ZGlmZiAtLWdpdCBhL3BsYXRmb3JtL21zbTd4MzAvcGFuZWwuYyBiL3BsYXRmb3JtL21zbTd4MzAvcGFuZWwuYwppbmRleCAyMjYwOGUxLi5mNzIzOWMxIDEwMDY0NAotLS0gYS9wbGF0Zm9ybS9tc203eDMwL3BhbmVsLmMKKysrIGIvcGxhdGZvcm0vbXNtN3gzMC9wYW5lbC5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8ZGVidWcuaD4KICNpbmNsdWRlIDxkZXYvZ3Bpby5oPgogI2luY2x1ZGUgPGtlcm5lbC90aHJlYWQuaD4KLSNpbmNsdWRlIDxncGlvX2h3Lmg+CisjaW5jbHVkZSAiZ3Bpb19ody5oIgogCiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQogc3RhdGljIGludCBkaXNwbGF5X2NvbW1vbl9wb3dlcihpbnQpOwpkaWZmIC0tZ2l0IGEvcHJvamVjdC9tc203NjMwXzF4Lm1rIGIvcHJvamVjdC9tc203NjMwXzF4Lm1rCmluZGV4IGQxMDdlOTQuLjkxYWE2MzUgMTAwNjQ0Ci0tLSBhL3Byb2plY3QvbXNtNzYzMF8xeC5taworKysgYi9wcm9qZWN0L21zbTc2MzBfMXgubWsKQEAgLTIsNyArMiw3IEBACiAjCiBMT0NBTF9ESVIgOj0gJChHRVRfTE9DQUxfRElSKQogCi1UQVJHRVQgOj0gbXNtNzYzMF9zdXJmCitUQVJHRVQgOj0gbXNtNzYzMF8xeAogCiBNT0RVTEVTICs9IGFwcC9hYm9vdAogCmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYzMF8xeC9hdGFncy5jIGIvdGFyZ2V0L21zbTc2MzBfMXgvYXRhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI2NGVjCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MzBfMXgvYXRhZ3MuYwpAQCAtMCwwICsxLDk5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIENvZGUgQXVyb3JhIG5vcgorICogICAgICAgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgICAgIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworICogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxyZWcuaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPHNtZW0uaD4KKworI2RlZmluZSBFQkkxX0FERFJfMTI4TSAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBTSVpFXzFNICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorCisKK3N0YXRpYyBpbnQgc2NyYXRjaF9hZGRyID0gLTE7CitpbnQgc21lbV9yYW1fcHRhYmxlX2luaXQoc3RydWN0IHNtZW1fcmFtX3B0YWJsZSAqKTsKKwordW5zaWduZWQqIHRhcmdldF9hdGFnX21lbSh1bnNpZ25lZCogcHRyKQoreworICAgIHN0cnVjdCBzbWVtX3JhbV9wdGFibGUgcmFtX3B0YWJsZTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKworICAgIGlmIChzbWVtX3JhbV9wdGFibGVfaW5pdCgmcmFtX3B0YWJsZSkpCisgICAgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFtX3B0YWJsZS5sZW47IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyYW1fcHRhYmxlLnBhcnRzW2ldLmF0dHIgPT0gUkVBRFdSSVRFKQorICAgICAgICAgICAgICAgICYmIChyYW1fcHRhYmxlLnBhcnRzW2ldLmRvbWFpbiA9PSBBUFBTX0RPTUFJTikKKyAgICAgICAgICAgICAgICAmJiAocmFtX3B0YWJsZS5wYXJ0c1tpXS5zdGFydCAhPSAweDApCisgICAgICAgICAgICAgICAgJiYgKCEocmFtX3B0YWJsZS5wYXJ0c1tpXS5zaXplIDwgU0laRV8xTSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEFUQUdfTUVNICovCisgICAgICAgICAgICAgICAgKnB0cisrID0gNDsKKyAgICAgICAgICAgICAgICAqcHRyKysgPSAweDU0NDEwMDAyOworICAgICAgICAgICAgICAgICpwdHIrKyA9IHJhbV9wdGFibGUucGFydHNbaV0uc2l6ZTsKKyAgICAgICAgICAgICAgICAqcHRyKysgPSByYW1fcHRhYmxlLnBhcnRzW2ldLnN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRwcmludGYoQ1JJVElDQUwsICJFUlJPUjogVW5hYmxlIHRvIHJlYWQgUkFNIHBhcnRpdGlvblxuIik7CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHRyOworfQorCit2b2lkICp0YXJnZXRfZ2V0X3NjcmF0Y2hfYWRkcmVzcyh2b2lkKQoreworICAgIHN0cnVjdCBzbWVtX3JhbV9wdGFibGUgcmFtX3B0YWJsZTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKworICAgIGlmIChzbWVtX3JhbV9wdGFibGVfaW5pdCgmcmFtX3B0YWJsZSkpCisgICAgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFtX3B0YWJsZS5sZW47IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyYW1fcHRhYmxlLnBhcnRzW2ldLmF0dHIgPT0gUkVBRFdSSVRFKQorICAgICAgICAgICAgICAgICYmIChyYW1fcHRhYmxlLnBhcnRzW2ldLmRvbWFpbiA9PSBBUFBTX0RPTUFJTikKKyAgICAgICAgICAgICAgICAmJiAocmFtX3B0YWJsZS5wYXJ0c1tpXS5zdGFydCAhPSAweDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyYW1fcHRhYmxlLnBhcnRzW2ldLnNpemUgPj0gRkFTVEJPT1RfQlVGX1NJWkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoX2FkZHIgPSByYW1fcHRhYmxlLnBhcnRzW2ldLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiBVbmFibGUgdG8gcmVhZCBSQU0gcGFydGl0aW9uXG4iKTsKKyAgICAgICAgQVNTRVJUKDApOworICAgIH0KKworICAgIHJldHVybiAodm9pZCAqKSgoc2NyYXRjaF9hZGRyID09IC0xKSA/IEVCSTFfQUREUl8xMjhNIDogc2NyYXRjaF9hZGRyKTsKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9tc203NjMwXzF4L2luY2x1ZGUvdGFyZ2V0L2Rpc3BsYXkuaCBiL3RhcmdldC9tc203NjMwXzF4L2luY2x1ZGUvdGFyZ2V0L2Rpc3BsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWNkNGFjCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MzBfMXgvaW5jbHVkZS90YXJnZXQvZGlzcGxheS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDb2RlIEF1cm9yYSBGb3J1bSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVAorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisjaWZuZGVmIF9UQVJHRVRfTVNNNzYzMF9TVVJGX0RJU1BMQVlfSAorI2RlZmluZSBfVEFSR0VUX01TTTc2MzBfU1VSRl9ESVNQTEFZX0gKKworI2RlZmluZSBUQVJHRVRfWFJFUyA0ODAKKyNkZWZpbmUgVEFSR0VUX1lSRVMgODAwCisKKyNkZWZpbmUgTENEQ19GQl9XSURUSCAgICAgNDgwCisjZGVmaW5lIExDRENfRkJfSEVJR0hUICAgIDgwMAorCisjZGVmaW5lIExDRENfSFNZTkNfUFVMU0VfV0lEVEhfRENMSyA4CisjZGVmaW5lIExDRENfSFNZTkNfQkFDS19QT1JDSF9EQ0xLICAxODQKKyNkZWZpbmUgTENEQ19IU1lOQ19GUk9OVF9QT1JDSF9EQ0xLIDQKKyNkZWZpbmUgTENEQ19IU1lOQ19TS0VXX0RDTEsgICAgICAgIDAKKworI2RlZmluZSBMQ0RDX1ZTWU5DX1BVTFNFX1dJRFRIX0xJTkVTIDEKKyNkZWZpbmUgTENEQ19WU1lOQ19CQUNLX1BPUkNIX0xJTkVTICAyCisjZGVmaW5lIExDRENfVlNZTkNfRlJPTlRfUE9SQ0hfTElORVMgMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RhcmdldC9tc203NjMwXzF4L2luaXQuYyBiL3RhcmdldC9tc203NjMwXzF4L2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDAzNDAyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MzBfMXgvaW5pdC5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8ZGV2L2tleXMuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpb19rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaWIvcHRhYmxlLmg+CisjaW5jbHVkZSA8ZGV2L2ZsYXNoLmg+CisjaW5jbHVkZSA8c21lbS5oPgorCisjZGVmaW5lIExJTlVYX01BQ0hUWVBFXzd4MzBfU1VSRiAgIDEwMDcwMTYKKyNkZWZpbmUgTElOVVhfTUFDSFRZUEVfN3gzMF9GRkEgICAgMTAwNzAxNworI2RlZmluZSBMSU5VWF9NQUNIVFlQRV83eDMwX0ZMVUlEICAxMDA3MDE4CisjZGVmaW5lIExJTlVYX01BQ0hUWVBFXzh4NTVfU1VSRiAgIDI3NjgKKyNkZWZpbmUgTElOVVhfTUFDSFRZUEVfOHg1NV9GRkEgICAgMjc2OQorCisjZGVmaW5lIE1TTTgyNTVfSUQgICAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIE1TTTg2NTVfSUQgICAgICAgICAgICAgICAgIDc1CisjZGVmaW5lIEFQUTgwNTVfSUQgICAgICAgICAgICAgICAgIDg1CisKKy8vRW51bSB2YWx1ZXMgZm9yIDd4MzAgdGFyZ2V0IHBsYXRmb3Jtcy4KK2VudW0gcGxhdGZvcm0KK3sKKyAgICBIV19QTEFURk9STV9VTktOT1dOID0gMCwKKyAgICBIV19QTEFURk9STV9TVVJGICAgID0gMSwKKyAgICBIV19QTEFURk9STV9GRkEgICAgID0gMiwKKyAgICBIV19QTEFURk9STV9GTFVJRCAgID0gMywKKyAgICBIV19QTEFURk9STV8zMkJJVFMgID0gMHg3RkZGRkZGRgorfTsKKworI2RlZmluZSBWQVJJQUJMRV9MRU5HVEggICAgICAgIDB4MTAxMDEwMTAKKyNkZWZpbmUgRElGRl9TVEFSVF9BRERSICAgICAgICAweEYwRjBGMEYwCisjZGVmaW5lIE5VTV9QQUdFU19QRVJfQkxPQ0sgICAgMHg0MAorCitzdGF0aWMgc3RydWN0IHB0YWJsZSBmbGFzaF9wdGFibGU7CitzdGF0aWMgaW50IGh3X3BsYXRmb3JtX3R5cGUgPSAtMTsKKworLyogZm9yIHRoZXNlIHBhcnRpdGlvbnMsIHN0YXJ0IHdpbGwgYmUgb2Zmc2V0IGJ5IGVpdGhlciB3aGF0IHdlIGdldCBmcm9tCisgKiBzbWVtLCBvciBmcm9tIHRoZSBhYm92ZSBvZmZzZXQgaWYgc21lbSBpcyBub3QgdXNlZnVsLiBBbHNvLCB3ZSBzaG91bGQKKyAqIHByb2JhYmx5IGhhdmUgc21lbV9wdGFibGUgY29kZSBwb3B1bGF0ZSBvdXIgZmxhc2hfcHRhYmxlLgorICoKKyAqIFdoZW4gc21lbSBwcm92aWRlcyB1cyB3aXRoIGEgZnVsbCBwYXJ0aXRpb24gdGFibGUsIHdlIGNhbiBnZXQgcmlkIG9mCisgKiB0aGlzIGFsdG9nZXRoZXIuCisgKgorICovCitzdGF0aWMgc3RydWN0IHB0ZW50cnkgYm9hcmRfcGFydF9saXN0W10gPSB7CisJeworCQkuc3RhcnQgPSAwLAorCQkubGVuZ3RoID0gMjAgIC8qIDVNQiAqLywKKwkJLm5hbWUgPSAiYm9vdCIsCisJfSwKKwl7CisJCS5zdGFydCA9IDIwLAorCQkubGVuZ3RoID0gNDgwIC8qIDEyME1CICovLAorCQkubmFtZSA9ICJzeXN0ZW0iLAorCX0sCisJeworCQkuc3RhcnQgPSA0NDAsCisJCS5sZW5ndGggPSAyMCAvKiA1TUIgKi8sCisJCS5uYW1lID0gImNhY2hlIiwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gNDYwLAorCQkubGVuZ3RoID0gVkFSSUFCTEVfTEVOR1RILAorCQkubmFtZSA9ICJ1c2VyZGF0YSIsCisJfSwKKwl7CisJCS5zdGFydCA9IERJRkZfU1RBUlRfQUREUiwKKwkJLmxlbmd0aCA9IDEyIC8qIDNNQiAqLywKKwkJLm5hbWUgPSAicGVyc2lzdCIsCisJfSwKKwl7CisJCS5zdGFydCA9IERJRkZfU1RBUlRfQUREUiwKKwkJLmxlbmd0aCA9IDIwIC8qIDVNQiAqLywKKwkJLm5hbWUgPSAicmVjb3ZlcnkiLAorCX0sCit9Oworc3RhdGljIGludCBudW1fcGFydHMgPSBzaXplb2YoYm9hcmRfcGFydF9saXN0KS9zaXplb2Yoc3RydWN0IHB0ZW50cnkpOworCit2b2lkIHNtZW1fcHRhYmxlX2luaXQodm9pZCk7Cit1bnNpZ25lZCBzbWVtX2dldF9hcHBzX2ZsYXNoX3N0YXJ0KHZvaWQpOworCit2b2lkIGtleXBhZF9pbml0KHZvaWQpOworCitzdGF0aWMgaW50IGVtbWNfYm9vdCA9IC0xOyAgLyogc2V0IHRvIHVuaW5pdGlhbGl6ZWQgKi8KK2ludCB0YXJnZXRfaXNfZW1tY19ib290KHZvaWQpOworc3RhdGljIGludCBwbGF0Zm9ybV92ZXJzaW9uID0gLTE7CitzdGF0aWMgaW50IHRhcmdldF9tc21faWQgPSAtMTsKKwordm9pZCB0YXJnZXRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzdHJ1Y3QgZmxhc2hfaW5mbyAqZmxhc2hfaW5mbzsKKwl1bnNpZ25lZCB0b3RhbF9udW1fb2ZfYmxvY2tzOworCWJvb2wgIHN0YXJ0X2FkZHJfY2hhbmdlZCA9IGZhbHNlOworCXVuc2lnbmVkIG5leHRfcHRyX3N0YXJ0X2FkciA9IDA7CisJaW50IGk7CisKKwlkcHJpbnRmKElORk8sICJ0YXJnZXRfaW5pdCgpXG4iKTsKKworI2lmICghRU5BQkxFX05BTkRXUklURSkKKwlrZXlzX2luaXQoKTsKKwlrZXlwYWRfaW5pdCgpOworI2VuZGlmCisKKwlpZiAodGFyZ2V0X2lzX2VtbWNfYm9vdCgpKQorCQlyZXR1cm47CisKKwlwdGFibGVfaW5pdCgmZmxhc2hfcHRhYmxlKTsKKwlzbWVtX3B0YWJsZV9pbml0KCk7CisKKwlmbGFzaF9pbml0KCk7CisJZmxhc2hfaW5mbyA9IGZsYXNoX2dldF9pbmZvKCk7CisJQVNTRVJUKGZsYXNoX2luZm8pOworCisJb2Zmc2V0ID0gc21lbV9nZXRfYXBwc19mbGFzaF9zdGFydCgpOworCWlmIChvZmZzZXQgPT0gMHhmZmZmZmZmZikKKwkgICAgICAgIHdoaWxlKDEpOworCisJdG90YWxfbnVtX29mX2Jsb2NrcyA9IGZsYXNoX2luZm8tPm51bV9ibG9ja3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcnRzOyBpKyspIHsKKwkJc3RydWN0IHB0ZW50cnkgKnB0biA9ICZib2FyZF9wYXJ0X2xpc3RbaV07CisJCXVuc2lnbmVkIGxlbiA9IHB0bi0+bGVuZ3RoOworCisJCWlmKGxlbiA9PSBWQVJJQUJMRV9MRU5HVEgpCisJCXsKKwkJICAgICAgICBzdGFydF9hZGRyX2NoYW5nZWQgPSB0cnVlOworCQkJdW5zaWduZWQgbGVuZ3RoX2Zvcl9wcnQgPSAwOworCQkJdW5zaWduZWQgajsKKwkJCWZvciAoaiA9IGkrMTsgaiA8IG51bV9wYXJ0czsgaisrKQorCQkJeworCQkJICAgICAgICBzdHJ1Y3QgcHRlbnRyeSAqdGVtcF9wdG4gPSAmYm9hcmRfcGFydF9saXN0W2pdOworCQkJICAgICAgICBBU1NFUlQodGVtcF9wdG4tPmxlbmd0aCAhPSBWQVJJQUJMRV9MRU5HVEgpOworCQkJICAgICAgICBsZW5ndGhfZm9yX3BydCArPSB0ZW1wX3B0bi0+bGVuZ3RoOworCQkJfQorCQkgICAgICAgIGxlbiA9ICh0b3RhbF9udW1fb2ZfYmxvY2tzIC0gMSkgLSAob2Zmc2V0ICsgcHRuLT5zdGFydCArIGxlbmd0aF9mb3JfcHJ0KTsKKwkJCUFTU0VSVChsZW4gPj0gMCk7CisJCSAgICAgICAgbmV4dF9wdHJfc3RhcnRfYWRyID0gcHRuLT5zdGFydCArIGxlbjsKKwkJfQorCQlpZigocHRuLT5zdGFydCA9PSBESUZGX1NUQVJUX0FERFIpICYmIChzdGFydF9hZGRyX2NoYW5nZWQpKQorCQl7CisJCSAgICAgICAgQVNTRVJUKG5leHRfcHRyX3N0YXJ0X2Fkcik7CisJCQlwdG4tPnN0YXJ0ID0gbmV4dF9wdHJfc3RhcnRfYWRyOworCQkJbmV4dF9wdHJfc3RhcnRfYWRyID0gcHRuLT5zdGFydCArIHB0bi0+bGVuZ3RoOworCQl9CisJCXB0YWJsZV9hZGQoJmZsYXNoX3B0YWJsZSwgcHRuLT5uYW1lLCBvZmZzZXQgKyBwdG4tPnN0YXJ0LAorCQkJICAgbGVuLCBwdG4tPmZsYWdzLCBUWVBFX0FQUFNfUEFSVElUSU9OLCBQRVJNX1dSSVRFQUJMRSk7CisJfQorCisJc21lbV9hZGRfbW9kZW1fcGFydGl0aW9ucygmZmxhc2hfcHRhYmxlKTsKKworCXB0YWJsZV9kdW1wKCZmbGFzaF9wdGFibGUpOworCWZsYXNoX3NldF9wdGFibGUoJmZsYXNoX3B0YWJsZSk7Cit9CisKK2ludCB0YXJnZXRfcGxhdGZvcm1fdmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBwbGF0Zm9ybV92ZXJzaW9uOworfQorCitpbnQgdGFyZ2V0X2lzX21zbTh4NTUodm9pZCkKK3sKKyAgICBpZiAoKHRhcmdldF9tc21faWQgPT0gTVNNODI1NV9JRCkgfHwKKwkgICAgICAgICAgKHRhcmdldF9tc21faWQgPT0gTVNNODY1NV9JRCkgfHwKKwkgICAgICAgICAgKHRhcmdldF9tc21faWQgPT0gQVBRODA1NV9JRCkpCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGJvYXJkX21hY2h0eXBlKHZvaWQpCit7CisgICAgc3RydWN0IHNtZW1fYm9hcmRfaW5mb192NCBib2FyZF9pbmZvX3Y0OworICAgIHVuc2lnbmVkIGludCBib2FyZF9pbmZvX2xlbiA9IDA7CisgICAgZW51bSBwbGF0Zm9ybSBwbGF0Zm9ybV90eXBlID0gMDsKKyAgICB1bnNpZ25lZCBzbWVtX3N0YXR1czsKKyAgICB1bnNpZ25lZCBmb3JtYXQgPSAwOworICAgIGlmKGh3X3BsYXRmb3JtX3R5cGUgIT0gLTEpCisgICAgICAgIHJldHVybiBod19wbGF0Zm9ybV90eXBlOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnlfb2Zmc2V0KFNNRU1fQk9BUkRfSU5GT19MT0NBVElPTiwKKwkJCQkJICAgICAgICZmb3JtYXQsIHNpemVvZihmb3JtYXQpLCAwKTsKKyAgICBpZighc21lbV9zdGF0dXMpCisgICAgeworCWlmICgoZm9ybWF0ID09IDMpIHx8IChmb3JtYXQgPT0gNCkpCisJeworCSAgICBpZiAoZm9ybWF0ID09IDQpCisJCWJvYXJkX2luZm9fbGVuID0gc2l6ZW9mKGJvYXJkX2luZm9fdjQpOworCSAgICBlbHNlCisJCWJvYXJkX2luZm9fbGVuID0gc2l6ZW9mKGJvYXJkX2luZm9fdjQuYm9hcmRfaW5mb192Myk7CisKKwkgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9CT0FSRF9JTkZPX0xPQ0FUSU9OLAorCQkJCQkgICAgJmJvYXJkX2luZm9fdjQsIGJvYXJkX2luZm9fbGVuKTsKKwkgICAgaWYoIXNtZW1fc3RhdHVzKQorCSAgICB7CisJCWlmKGZvcm1hdCA9PSA0KQorCQkgICAgcGxhdGZvcm1fdmVyc2lvbiA9IGJvYXJkX2luZm9fdjQucGxhdGZvcm1fdmVyc2lvbjsKKworCQlwbGF0Zm9ybV90eXBlID0gYm9hcmRfaW5mb192NC5ib2FyZF9pbmZvX3YzLmh3X3BsYXRmb3JtOworCQl0YXJnZXRfbXNtX2lkID0gYm9hcmRfaW5mb192NC5ib2FyZF9pbmZvX3YzLm1zbV9pZDsKKwkJc3dpdGNoIChwbGF0Zm9ybV90eXBlKQorCQl7CisJCWNhc2UgSFdfUExBVEZPUk1fU1VSRjoKKwkJICAgIGh3X3BsYXRmb3JtX3R5cGUgPSAoKHRhcmdldF9pc19tc204eDU1KCkpID8KKwkJCQkgICAgICBMSU5VWF9NQUNIVFlQRV84eDU1X1NVUkYgOiBMSU5VWF9NQUNIVFlQRV83eDMwX1NVUkYpOyAgICBicmVhazsKKwkJY2FzZSBIV19QTEFURk9STV9GRkE6CisJCSAgICBod19wbGF0Zm9ybV90eXBlID0gKCh0YXJnZXRfaXNfbXNtOHg1NSgpKSA/CisJCQkJICAgICAgTElOVVhfTUFDSFRZUEVfOHg1NV9GRkEgOiBMSU5VWF9NQUNIVFlQRV83eDMwX0ZGQSk7ICAgICAgYnJlYWs7CisJCWNhc2UgSFdfUExBVEZPUk1fRkxVSUQ6CisJCSAgICBod19wbGF0Zm9ybV90eXBlID0gTElOVVhfTUFDSFRZUEVfN3gzMF9GTFVJRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIGh3X3BsYXRmb3JtX3R5cGUgPSAoKHRhcmdldF9pc19tc204eDU1KCkpID8KKwkJCQkgICAgICBMSU5VWF9NQUNIVFlQRV84eDU1X1NVUkYgOiBMSU5VWF9NQUNIVFlQRV83eDMwX1NVUkYpOyAgICBicmVhazsKKwkJfQorCQlyZXR1cm4gaHdfcGxhdGZvcm1fdHlwZTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaHdfcGxhdGZvcm1fdHlwZSA9IExJTlVYX01BQ0hUWVBFXzd4MzBfU1VSRjsKKyAgICByZXR1cm4gaHdfcGxhdGZvcm1fdHlwZTsKK30KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CisKK3ZvaWQgdGFyZ2V0X2JhdHRlcnlfY2hhcmdpbmdfZW5hYmxlKHVuc2lnbmVkIGVuYWJsZSwgdW5zaWduZWQgZGlzY29ubmVjdCkKK3sKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9tc203NjMwXzF4L2tleXBhZC5jIGIvdGFyZ2V0L21zbTc2MzBfMXgva2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2MTEyNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tc203NjMwXzF4L2tleXBhZC5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZGV2L2tleXMuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpb19rZXlwYWQuaD4KKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkvc2l6ZW9mKCh4KVswXSkpCisjZGVmaW5lIEJJVFNfSU5fRUxFTUVOVCh4KSAoc2l6ZW9mKHgpWzBdICogOCkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcXdlcnR5X2tleXNfb2xkW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgcXdlcnR5X2tleXNfbmV3W10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCisjZGVmaW5lIEtFWU1BUF9JTkRFWChyb3csIGNvbCkgKHJvdykqIEJJVFNfSU5fRUxFTUVOVChxd2VydHlfa2V5c19uZXcpICsgKGNvbCkKKworc3RhdGljIHVuc2lnbmVkIGludCBxd2VydHlfa2V5bWFwW10gPSB7CisgICAgW0tFWU1BUF9JTkRFWCg0LCAyKV0gPSBLRVlfQkFDSywgICAgICAgICAgLyogLUwgb24gU1VSRiAmIEZGQSAqLworICAgIFtLRVlNQVBfSU5ERVgoMywgNCldID0gS0VZX0hPTUUsICAgICAgICAgIC8qICtSIG9uIFNVUkYgJiBGRkEgKi8KKyAgICBbS0VZTUFQX0lOREVYKDEsIDQpXSA9IEtFWV9DTEVBUiwgICAgICAgICAvKiAnLScgb2YgbGVmdCBzaWRlIHN3aXRjaCBvbiBGTFVJRCAqLworfTsKKworc3RhdGljIHN0cnVjdCBxd2VydHlfa2V5cGFkX2luZm8gcXdlcnR5X2tleXBhZCA9IHsKKyAgICAua2V5bWFwICAgICAgICAgPSBxd2VydHlfa2V5bWFwLAorICAgIC5vbGRfa2V5cyAgICAgICA9IHF3ZXJ0eV9rZXlzX29sZCwKKyAgICAucmVjX2tleXMgICAgICAgPSBxd2VydHlfa2V5c19uZXcsCisgICAgLnJvd3MgICAgICAgICAgID0gNSwKKyAgICAuY29sdW1ucyAgICAgICAgPSA1LAorICAgIC5udW1fb2ZfcmVhZHMgICA9IDYsCisgICAgLnJkX2Z1bmMgICAgICAgID0gJmkyY19zc2JpX3JlYWRfYnl0ZXMsCisgICAgLndyX2Z1bmMgICAgICAgID0gJmkyY19zc2JpX3dyaXRlX2J5dGVzLAorICAgIC5zZXR0bGVfdGltZSAgICA9IDUgLyogbXNlYyAqLywKKyAgICAucG9sbF90aW1lCSAgICA9IDIwIC8qIG1zZWMgKi8sCit9OworCit2b2lkIGtleXBhZF9pbml0KHZvaWQpCit7CisgICAgc3NiaV9rZXlwYWRfaW5pdCgmcXdlcnR5X2tleXBhZCk7Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYzMF8xeC9wYW5lbC5jIGIvdGFyZ2V0L21zbTc2MzBfMXgvcGFuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI1NmExCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MzBfMXgvcGFuZWwuYwpAQCAtMCwwICsxLDQ3MSBAQAorLyogQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuICovCisKKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGRldi9ncGlvLmg+CisjaW5jbHVkZSA8a2VybmVsL3RocmVhZC5oPgorI2luY2x1ZGUgPHBsYXRmb3JtL21kZGkuaD4KKworI2RlZmluZSBNRERJX0NMSUVOVF9DT1JFX0JBU0UgIDB4MTA4MDAwCisjZGVmaW5lIExDRF9DT05UUk9MX0JMT0NLX0JBU0UgMHgxMTAwMDAKKyNkZWZpbmUgU1BJX0JMT0NLX0JBU0UgICAgICAgICAweDEyMDAwMAorI2RlZmluZSBJMkNfQkxPQ0tfQkFTRSAgICAgICAgIDB4MTMwMDAwCisjZGVmaW5lIFBXTV9CTE9DS19CQVNFICAgICAgICAgMHgxNDAwMDAKKyNkZWZpbmUgR1BJT19CTE9DS19CQVNFICAgICAgICAweDE1MDAwMAorI2RlZmluZSBTWVNURU1fQkxPQ0sxX0JBU0UgICAgIDB4MTYwMDAwCisjZGVmaW5lIFNZU1RFTV9CTE9DSzJfQkFTRSAgICAgMHgxNzAwMDAKKworCisjZGVmaW5lCU1ERElDQVAwICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgwMCkKKyNkZWZpbmUJTURESUNBUDEgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDA0KQorI2RlZmluZQlNRERJQ0FQMiAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MDgpCisjZGVmaW5lCU1ERElDQVAzICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgwQykKKyNkZWZpbmUJTURDQVBDSEcgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDEwKQorI2RlZmluZQlNRENSQ0VSQyAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MTQpCisjZGVmaW5lCVRUQlVTU0VMICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxOCkKKyNkZWZpbmUJRFBTRVQwICAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDFDKQorI2RlZmluZQlEUFNFVDEgICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MjApCisjZGVmaW5lCURQU1VTICAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyNCkKKyNkZWZpbmUJRFBSVU4gICAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDI4KQorI2RlZmluZQlTWVNDS0VOQSAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MkMpCisjZGVmaW5lCVRFU1RNT0RFICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgzMCkKKyNkZWZpbmUJRklGT01PTkkgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDM0KQorI2RlZmluZQlJTlRNT05JICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MzgpCisjZGVmaW5lCU1ESU9CSVNUICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgzQykKKyNkZWZpbmUJTURJT1BTRVQgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDQwKQorI2RlZmluZQlCSVRNQVAwICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NDQpCisjZGVmaW5lCUJJVE1BUDEgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0OCkKKyNkZWZpbmUJQklUTUFQMiAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDRDKQorI2RlZmluZQlCSVRNQVAzICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NTApCisjZGVmaW5lCUJJVE1BUDQgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg1NCkKKworCisjZGVmaW5lCVNSU1QgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MDApCisjZGVmaW5lCVBPUlRfRU5CICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MDQpCisjZGVmaW5lCVNUQVJUICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MDgpCisjZGVmaW5lCVBPUlQgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MEMpCisjZGVmaW5lCUNNTiAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MTApCisjZGVmaW5lCUdBTU1BICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MTQpCisjZGVmaW5lCUlOVEZMRyAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MTgpCisjZGVmaW5lCUlOVE1TSyAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MUMpCisjZGVmaW5lCU1QTEZCVUYgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MjApCisjZGVmaW5lCUhERV9MRUZUICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MjQpCisjZGVmaW5lCVZERV9UT1AgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MjgpCisKKyNkZWZpbmUJUFhMICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzMCkKKyNkZWZpbmUJSENZQ0xFICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzNCkKKyNkZWZpbmUJSFNXICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzOCkKKyNkZWZpbmUJSERFX1NUQVJUICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzQykKKyNkZWZpbmUJSERFX1NJWkUgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0MCkKKyNkZWZpbmUJVkNZQ0xFICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0NCkKKyNkZWZpbmUJVlNXICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0OCkKKyNkZWZpbmUJVkRFX1NUQVJUICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0QykKKyNkZWZpbmUJVkRFX1NJWkUgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1MCkKKyNkZWZpbmUJV0FLRVVQICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1NCkKKyNkZWZpbmUJV1NZTl9ETFkgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1OCkKKyNkZWZpbmUJUkVHRU5CICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1QykKKyNkZWZpbmUJVlNZTklGICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2MCkKKyNkZWZpbmUJV1JTVEIgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2NCkKKyNkZWZpbmUJUkRTVEIgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2OCkKKyNkZWZpbmUJQVNZX0RBVEEgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2QykKKyNkZWZpbmUJQVNZX0RBVEIgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3MCkKKyNkZWZpbmUJQVNZX0RBVEMgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3NCkKKyNkZWZpbmUJQVNZX0RBVEQgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3OCkKKyNkZWZpbmUJQVNZX0RBVEUgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3QykKKyNkZWZpbmUJQVNZX0RBVEYgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4MCkKKyNkZWZpbmUJQVNZX0RBVEcgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4NCkKKyNkZWZpbmUJQVNZX0RBVEggICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4OCkKKyNkZWZpbmUJQVNZX0NNRFNFVCAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4QykKKworI2RlZmluZQlNT05JICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEIwKQorCisjZGVmaW5lCUN1cnJlbnQgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4QzApCisjZGVmaW5lCUxDRCAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4QzQpCisjZGVmaW5lCUNPTU1BTkQgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4QzgpCisKKworI2RlZmluZQlTU0lDVEwgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJU1NJVElNRSAgICAgKFNQSV9CTE9DS19CQVNFfDB4MDQpCisjZGVmaW5lCVNTSVRYICAgICAgIChTUElfQkxPQ0tfQkFTRXwweDA4KQorI2RlZmluZQlTU0lSWCAgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJU1NJSU5UQyAgICAgKFNQSV9CTE9DS19CQVNFfDB4MTApCisjZGVmaW5lCVNTSUlOVFMgICAgIChTUElfQkxPQ0tfQkFTRXwweDE0KQorI2RlZmluZQlTU0lEQkcxICAgICAoU1BJX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUJU1NJREJHMiAgICAgKFNQSV9CTE9DS19CQVNFfDB4MUMpCisjZGVmaW5lCVNTSUlEICAgICAgIChTUElfQkxPQ0tfQkFTRXwweDIwKQorCisKKyNkZWZpbmUJSTJDU0VUVVAJKEkyQ19CTE9DS19CQVNFfDB4MDApCisjZGVmaW5lCUkyQ0NUUkwJICAgIChJMkNfQkxPQ0tfQkFTRXwweDA0KQorCisKKyNkZWZpbmUJVElNRVIwTE9BRAkgIChQV01fQkxPQ0tfQkFTRXwweDAwKQorI2RlZmluZQlUSU1FUjBWQUxVRQkgIChQV01fQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlUSU1FUjBDT05UUk9MIChQV01fQkxPQ0tfQkFTRXwweDA4KQorI2RlZmluZQlUSU1FUjBJTlRDTFIgIChQV01fQkxPQ0tfQkFTRXwweDBDKQorI2RlZmluZQlUSU1FUjBSSVMJICAoUFdNX0JMT0NLX0JBU0V8MHgxMCkKKyNkZWZpbmUJVElNRVIwTUlTCSAgKFBXTV9CTE9DS19CQVNFfDB4MTQpCisjZGVmaW5lCVRJTUVSMEJHTE9BRCAgKFBXTV9CTE9DS19CQVNFfDB4MTgpCisjZGVmaW5lCVBXTTBPRkYJICAgICAgKFBXTV9CTE9DS19CQVNFfDB4MUMpCisjZGVmaW5lCVRJTUVSMUxPQUQJICAoUFdNX0JMT0NLX0JBU0V8MHgyMCkKKyNkZWZpbmUJVElNRVIxVkFMVUUJICAoUFdNX0JMT0NLX0JBU0V8MHgyNCkKKyNkZWZpbmUJVElNRVIxQ09OVFJPTCAoUFdNX0JMT0NLX0JBU0V8MHgyOCkKKyNkZWZpbmUJVElNRVIxSU5UQ0xSICAoUFdNX0JMT0NLX0JBU0V8MHgyQykKKyNkZWZpbmUJVElNRVIxUklTCSAgKFBXTV9CTE9DS19CQVNFfDB4MzApCisjZGVmaW5lCVRJTUVSMU1JUwkgIChQV01fQkxPQ0tfQkFTRXwweDM0KQorI2RlZmluZQlUSU1FUjFCR0xPQUQgIChQV01fQkxPQ0tfQkFTRXwweDM4KQorI2RlZmluZQlQV00xT0ZGCSAgICAgIChQV01fQkxPQ0tfQkFTRXwweDNDKQorI2RlZmluZQlUSU1FUklUQ1IJICAoUFdNX0JMT0NLX0JBU0V8MHg2MCkKKyNkZWZpbmUJVElNRVJJVE9QCSAgKFBXTV9CTE9DS19CQVNFfDB4NjQpCisjZGVmaW5lCVBXTUNSCSAgICAgIChQV01fQkxPQ0tfQkFTRXwweDY4KQorI2RlZmluZQlQV01JRAkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHg2QykKKyNkZWZpbmUJUFdNTU9OCSAgICAgIChQV01fQkxPQ0tfQkFTRXwweDcwKQorCisKKyNkZWZpbmUJR1BJT0RBVEEgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDAwKQorI2RlZmluZQlHUElPRElSICAgICAoR1BJT19CTE9DS19CQVNFfDB4MDQpCisjZGVmaW5lCUdQSU9JUyAgICAgIChHUElPX0JMT0NLX0JBU0V8MHgwOCkKKyNkZWZpbmUJR1BJT0lCRSAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDBDKQorI2RlZmluZQlHUElPSUVWICAgICAoR1BJT19CTE9DS19CQVNFfDB4MTApCisjZGVmaW5lCUdQSU9JRSAgICAgIChHUElPX0JMT0NLX0JBU0V8MHgxNCkKKyNkZWZpbmUJR1BJT1JJUyAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDE4KQorI2RlZmluZQlHUElPTUlTICAgICAoR1BJT19CTE9DS19CQVNFfDB4MUMpCisjZGVmaW5lCUdQSU9JQyAgICAgIChHUElPX0JMT0NLX0JBU0V8MHgyMCkKKyNkZWZpbmUJR1BJT09NUyAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDI0KQorI2RlZmluZQlHUElPUEMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MjgpCisKKyNkZWZpbmUJR1BJT0lEICAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDMwKQorCisKKyNkZWZpbmUJV0tSRVEgICAgICAgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDAwKQorI2RlZmluZQlDTEtFTkIgICAgICAoU1lTVEVNX0JMT0NLMV9CQVNFfDB4MDQpCisjZGVmaW5lCURSQU1QV1IgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwOCkKKyNkZWZpbmUJSU5UTUFTSyAgICAgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDBDKQorI2RlZmluZQlHUElPU0VMICAgICAoU1lTVEVNX0JMT0NLMl9CQVNFfDB4MDApCisKK3N0cnVjdCBpbml0X3RhYmxlIHsKKyAgICB1bnNpZ25lZCBpbnQgcmVnOworICAgIHVuc2lnbmVkIGludCB2YWw7Cit9OworCitzdGF0aWMgc3RydWN0IGluaXRfdGFibGUgdG9zaGliYV80ODB4NjQwX2luaXRfdGFibGVbXSA9IHsKKwl7IERQU0VUMCwgICAgICAgICAgICAgICAweDRCRUMwMDY2IH0sICAvLyAjIE1EQy5EUFNFVDAgICMgU2V0dXAgRFBMTCBwYXJhbWV0ZXJzCisJeyBEUFNFVDEsICAgICAgICAgICAgICAgMHgwMDAwMDExMyB9LCAgLy8gICAjIE1EQy5EUFNFVDEgIAorCXsgRFBTVVMsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBNREMuRFBTVVMgICMgU2V0IERQTEwgb3NjaWxsYXRpb24gZW5hYmxlCisJeyBEUFJVTiwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIE1EQy5EUFJVTiAgIyBSZWxlYXNlIHJlc2V0IHNpZ25hbCBmb3IgRFBMTAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDE0ICAgICAgICAgfSwgIC8vIHdhaXRfbXMoMTQpOworCXsgU1lTQ0tFTkEsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBNREMuU1lTQ0tFTkEgICMgRW5hYmxlIHN5c3RlbSBjbG9jayBvdXRwdXQKKwl7IENMS0VOQiwgICAgICAgICAgICAgICAweDAwMDAwMEVGIH0sICAvLyAgICMgU1lTLkNMS0VOQiAgIyBFbmFibGUgY2xvY2tzIGZvciBlYWNoIG1vZHVsZSAod2l0aG91dCBEQ0xLICwgaTJjQ0xLKQorCXsgR1BJT19CTE9DS19CQVNFLCAgICAgIDB4MDNGRjAwMDAgfSwgIC8vICAgIyBHUEkgLkdQSU9EQVRBICAjIEdQSU8yKFJFU0VUX0xDRF9OKSBzZXQgdG8gMCAsIEdQSU8zKGVEUkFNX1Bvd2VyKSBzZXQgdG8gMAorCXsgR1BJT0RJUiwgICAgICAgICAgICAgIDB4MDAwMDAyNEQgfSwgIC8vICAgIyBHUEkgLkdQSU9ESVIgICMgU2VsZWN0IGRpcmVjdGlvbiBvZiBHUElPIHBvcnQgKDAsMiwzLDYsOSBvdXRwdXQpCisJeyBTWVNURU1fQkxPQ0syX0JBU0UsICAgMHgwMDAwMDE3MyB9LCAgLy8gICAjIFNZUy5HUElPU0VMICAjIEdQSU8gcG9ydCBtdWx0aXBsZXhpbmcgY29udHJvbAorCXsgR1BJT1BDLCAgICAgICAgICAgICAgIDB4MDNDMzAwQzAgfSwgIC8vICAgIyBHUEkgLkdQSU9QQyAgIyBHUElPMiwzIFBEIGN1dAorCXsgU1lTVEVNX0JMT0NLMV9CQVNFLCAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBTWVMuV0tSRVEgICMgV2FrZS11cCByZXF1ZXN0IGV2ZW50IGlzIFZTWU5DIGFsaWdubWVudAorCXsgR1BJT0lTLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBHUEkgLkdQSU9JUyAgIyBTZXQgaW50ZXJydXB0IHNlbnNlIG9mIEdQSU8KKwl7IEdQSU9JRVYsICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgR1BJIC5HUElPSUVWICAjIFNldCBpbnRlcnJ1cHQgZXZlbnQgb2YgR1BJTworCXsgR1BJT0lDLCAgICAgICAgICAgICAgIDB4MDAwMDAzRkYgfSwgIC8vICAgIyBHUEkgLkdQSU9JQyAgIyBHUElPIGludGVycnVwdCBjbGVhcgorCXsgR1BJT19CTE9DS19CQVNFLCAgICAgIDB4MDAwNjAwMDYgfSwgIC8vICAgIyBHUEkgLkdQSU9EQVRBICAjIFJlbGVhc2UgTENERCByZXNldAorCXsgR1BJT19CTE9DS19CQVNFLCAgICAgIDB4MDAwODAwMDggfSwgIC8vICAgIyBHUEkgLkdQSU9EQVRBICAjIGVEUkFNIFZEIHN1cHBseQorCXsgR1BJT19CTE9DS19CQVNFLCAgICAgIDB4MDIwMDAyMDAgfSwgIC8vICAgIyBHUEkgLkdQSU9EQVRBICAjIFRFU1QgTEVEIE9OCisJeyBEUkFNUFdSLCAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIFNZUy5EUkFNUFdSICAjIGVEUkFNIHBvd2VyIHVwCisJeyBUSU1FUjBDT05UUk9MLCAgICAgICAgMHgwMDAwMDA2MCB9LCAgLy8gICAjIFBXTS5UaW1lcjBDb250cm9sICAjIFBXTTAgb3V0cHV0IHN0b3AKKwl7IFBXTV9CTE9DS19CQVNFLCAgICAgICAweDAwMDAxMzg4IH0sICAvLyAgICMgUFdNLlRpbWVyMExvYWQgICMgUFdNMCAxMGtIeiAsIER1dHkgOTkgKEJhY2tMaWdodCBPRkYpCisJLy97UFdNME9GRiwgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgUFdNLlBXTTBPRkYgIAorI2lmIDAKKwl7IFBXTTBPRkYsICAgICAgICAgICAgICAweDAwMDAxMzg3IH0sIC8vIFNVUkYgMTAwJSBiYWNrbGlnaHQKKwl7IFBXTTBPRkYsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sIC8vIEZGQSAxMDAlIGJhY2tsaWdodAorI2VuZGlmCisJeyBQV00wT0ZGLCAgICAgICAgICAgICAgMHgwMDAwMDlDMyB9LCAvLyA1MCUgQkwKKwl7IFRJTUVSMUNPTlRST0wsICAgICAgICAweDAwMDAwMDYwIH0sICAvLyAgICMgUFdNLlRpbWVyMUNvbnRyb2wgICMgUFdNMSBvdXRwdXQgc3RvcAorCXsgVElNRVIxTE9BRCwgICAgICAgICAgIDB4MDAwMDEzODggfSwgIC8vICAgIyBQV00uVGltZXIxTG9hZCAgIyBQV00xIDEwa0h6ICwgRHV0eSA5OSAoQmFja0xpZ2h0IE9GRikKKwkvL3tQV00xT0ZGLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBQV00uUFdNMU9GRiAgCisJeyBQV00xT0ZGLCAgICAgICAgICAgICAgMHgwMDAwMTM4NyB9LAorCXsgVElNRVIwQ09OVFJPTCwgICAgICAgIDB4MDAwMDAwRTAgfSwgIC8vICAgIyBQV00uVGltZXIwQ29udHJvbCAgIyBQV00wIG91dHB1dCBzdGFydAorCXsgVElNRVIxQ09OVFJPTCwgICAgICAgIDB4MDAwMDAwRTAgfSwgIC8vICAgIyBQV00uVGltZXIxQ29udHJvbCAgIyBQV00xIG91dHB1dCBzdGFydAorCXsgUFdNQ1IsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgfSwgIC8vICAgIyBQV00uUFdNQ1IgICMgUFdNIG91dHB1dCBlbmFibGUKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsgICAgICAgIAorCXsgU1BJX0JMT0NLX0JBU0UsICAgICAgIDB4MDAwMDA3OTkgfSwgIC8vICAgIyBTUEkgLlNTSUNUTCAgIyBTUEkgb3BlcmF0aW9uIG1vZGUgc2V0dGluZworCXsgU1NJVElNRSwgICAgICAgICAgICAgIDB4MDAwMDAxMDAgfSwgIC8vICAgIyBTUEkgLlNTSVRJTUUgICMgU1BJIHNlcmlhbCBpbnRlcmZhY2UgdGltaW5nIHNldHRpbmcKKwl7IFNQSV9CTE9DS19CQVNFLCAgICAgICAweDAwMDAwNzliIH0sICAvLyAgICMgU1BJIC5TU0lDVEwgICMgU2V0IFNQSSBhY3RpdmUgbW9kZQorCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAgLy8gICAjIFNQSS5TU0lUWCAgIyBSZWxlYXNlIGZyb20gRGVlcCBTdGFuYnkgbW9kZQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDEpOworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBTUEkuU1NJVFggIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDEpOworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBTUEkuU1NJVFggIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDEpOworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkEgfSwgIC8vICAgIyBTUEkuU1NJVFggICAgICAgICAgKk5PVEUgMSAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExMSB9LCAgLy8gICAgICMgRGlzcGxheSBtb2RlIHNldHVwKDEpIDogTm9ybWFseSBCbGFjaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwMzYgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICAgIyBNZW1vcnkgYWNjZXNzIGNvbnRyb2wKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgLy8gICAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCQiB9LCAgLy8gICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICMgRGlzcGxheSBtb2RlIHNldHVwKDIpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDAzQSB9LCAgLy8gICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTYwIH0sICAvLyAgICMgUkdCIEludGVyZmFjZSBkYXRhIGZvcm1hdAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEJGIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgfSwgIC8vICAgIyBEcml2bmlnIG1ldGhvZAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQjEgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE1RCB9LCAgLy8gICAjIEJvb3N0ZXIgb3BlcmF0aW9uIHNldHVwCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQjIgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzMyB9LCAgLy8gICAjIEJvb3N0ZXIgbW9kZSBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQjMgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEyMiB9LCAgLy8gICAgICMgQm9vc3RlciBmcmVxdWVuY2llcyBzZXR1cAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEI0IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMiB9LCAgLy8gICAgICMgT1AtYW1wIGNhcGFiaWxpdHkvU3lzdGVtIGNsb2NrIGZyZXEuIGRpdmlzaW9uIHNldHVwCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMUYgfSwgIC8vICAgICAjIFZDUyBWb2x0YWdlIGFkanVzdG1lbnQgICgxQy0+MUYgZm9yIFJldiAyKQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEI2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEyOCB9LCAgLy8gICAgICMgVkNPTSBWb2x0YWdlIGFkanVzdG1lbnQKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEI3IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMyB9LCAgLy8gICAgICMgQ29uZmlndXJlIGFuIGV4dGVybmFsIGRpc3BsYXkgc2lnbmFsCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQjkgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTIwIH0sICAvLyAgICAgIyBEQ0NLL0RDRVYgdGltaW5nIHNldHVwCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCRCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDIgfSwgIC8vICAgICAjIEFTVyBzaWduYWwgY29udHJvbAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEJFIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAgICMgRHVtbXkgZGlzcGxheSAod2hpdGUvYmxhY2spIGNvdW50IHNldHVwIGZvciBRVUFEIERhdGEgb3BlcmF0aW9uCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDMCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEgfSwgIC8vICAgICAjIHdhaXRfbXMoLW91dCBGUiBjb3VudCBzZXR1cCAoQSkKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDMSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEgfSwgIC8vICAgICAjIHdhaXRfbXMoLW91dCBGUiBjb3VudCBzZXR1cCAoQikKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEMyIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExMSB9LCAgLy8gICAgICMgd2FpdF9tcygtb3V0IEZSIGNvdW50IHNldHVwIChDKQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEMzIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwQSB9LCAgLy8gICAgICMgd2FpdF9tcygtaW4gbGluZSBjbG9jayBjb3VudCBzZXR1cCAoRCkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTBBIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTYwIH0sICAvLyAgICAgIyBTZWVwLWluIGxpbmUgY2xvY2sgY291bnQgc2V0dXAgKEUpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE2MCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM1IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDE2MCB9LCAgLy8gICAgICMgd2FpdF9tcygtaW4gbGluZSBjbG9jayBjb3VudCBzZXR1cCAoRikKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTYwIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzYgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTYwIH0sICAvLyAgICAgIyB3YWl0X21zKC1pbiBsaW5lIGNsb2NrIHNldHVwIChHKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNjAgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDNyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMzMgfSwgIC8vICAgICAjIEdhbW1hIDEgZmluZSB0dW5pbmcgKDEpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE0MyB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM4IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE0NCB9LCAgLy8gICAgICMgR2FtbWEgMSBmaW5lIHR1bmluZyAoMikKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM5IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzMyB9LCAgLy8gICAgICMgR2FtbWEgMSBpbmNsaW5hdGlvbiBhZGp1c3RtZW50CisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQ0EgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICAgIyBHYW1tYSAxIGJsdWUgb2Zmc2V0IGFkanVzdG1lbnQKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFQyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDIgfSwgIC8vICAgICAjIFRvdGFsIG51bWJlciBvZiBob3Jpem9udGFsIGNsb2NrIGN5Y2xlcyAoMSkgW1BDTEsgU3luYy4gVkdBIHNldHRpbmddCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExOCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMENGIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMSB9LCAgLy8gICAgICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQwIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDExMCB9LCAgLy8gICAgICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBEMSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDEgfSwgIC8vICAgICAjIENLViB0aW1pbmcgY29udHJvbCBvbi9vZmYgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDIgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAwIH0sICAvLyAgICAgIyBDS1YxLDIgdGltaW5nIGNvbnRyb2wgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQzIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwMCB9LCAgLy8gICAgICMgT0VWIHRpbWluZyBjb250cm9sIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxM0EgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBENCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMjQgfSwgIC8vICAgICAjIEFTVyB0aW1pbmcgY29udHJvbCAoMSkgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE2RSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDEpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQ1IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEyNCB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFRCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDEgfSwgIC8vICAgICAjIFRvdGFsIG51bWJlciBvZiBob3Jpem9udGFsIGNsb2NrIGN5Y2xlcyAoMikgW1BDTEsgU3luYy4gVGFibGUxIGZvciBRVkdBIF0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTBBIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDYgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAxIH0sICAvLyAgICAgIyBCbGFua2luZyBwZXJpb2QgY29udHJvbCAoMSkgW1BDTEsgU3luYy4gVGFibGUyIGZvciBRVkdBXQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQ3IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDExMCB9LCAgLy8gICAgICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTBBIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDggfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAxIH0sICAvLyAgICAgIyBDS1YgdGltaW5nIGNvbnRyb2wgb24vb2ZmIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBEOSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDAgfSwgIC8vICAgICAjIENLVjEsMiB0aW1pbmcgY29udHJvbCBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExNCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMERFIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwMCB9LCAgLy8gICAgICMgT0VWIHRpbWluZyBjb250cm9sIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTE0IH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwREYgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTEyIH0sICAvLyAgICAgIyBBU1cgdGltaW5nIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTNGIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTAgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTBCIH0sICAvLyAgICAgIyBBU1cgdGltaW5nIGNvbnRyb2wgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEUyIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMSB9LCAgLy8gICAgICMgQnVpbHQtaW4gb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aXNpb24gc2V0dXAgW0ZyZXF1ZW5jeSBkaXZpc2lvbiByYXRpbyA6IDIgKDYwSHEpCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTMgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTM2IH0sICAvLyAgICAgIyBCdWlsdC1pbiBvc2NpbGxhdG9yIGNsb2NrIGNvdW50IHNldHVwCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAwIH0sICAvLyAgICAgIyBDS1YgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDMgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFNSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDIgfSwgIC8vICAgICAjIE9FViB0aW1pbmcgY29udHJvbCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwNCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMyB9LCAgLy8gICAgICMgRENFViB0aW1pbmcgY29udHJvbCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTcgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTA0IH0sICAvLyAgICAgIyBBU1cgdGltaW5nIHNldHVwIGZvciB1c2luZyBidWlsZC1pbiBvc2MoMSkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTBBIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTggfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTA0IH0sICAvLyAgICAgIyBBU1cgdGltaW5nIHNldHVwIGZvciB1c2luZyBidWlsZC1pbiBvc2MoMikKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisJeyBDTEtFTkIsICAgICAgICAgICAgICAgMHgwMDAwMDFFRiB9LCAgLy8gICAjIFNZUy5DTEtFTkIgICMgRENMSyBlbmFibGUKKwl7IFNUQVJULCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgTENELlNUQVJUICAjIExDREMgd2FpdF9tcyggbW9kZQorCXsgV1JTVEIsICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YgfSwgIC8vICAgIyBMQ0QuV1JTVEIgICMgd3JpdGVfY2xpZW50X3JlZyggc3Ryb2JlCisJeyBSRFNUQiwgICAgICAgICAgICAgICAgMHgwMDAwMDQzMiB9LCAgLy8gICAjIExDRC5SRFNUQiAgIyBSZWFkIHN0cm9iZQorCXsgUE9SVF9FTkIsICAgICAgICAgICAgIDB4MDAwMDAwMDIgfSwgIC8vICAgIyBMQ0QuUE9SVF9FTkIgICMgQXN5bmNocm9ub3VzIHBvcnQgZW5hYmxlCisJeyBWU1lOSUYsICAgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAgLy8gICAjIExDRC5WU1lOQ0lGICAjIFZTWU5DIEkvRiBtb2RlIHNldAorCXsgQVNZX0RBVEEsICAgICAgICAgICAgIDB4ODAwMDAwMDAgfSwgIC8vICAgIyBMQ0QuQVNZX0RBVHggICMgSW5kZXggc2V0dGluZyBvZiBTVUIgTENERAorCXsgQVNZX0RBVEIsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgICAjIE9zY2lsbGF0b3Igc3RhcnQKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA1IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgICMgRGlyZWN0IGNvbW1hbmQgdHJhbnNmZXIgZW5hYmxlCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwNCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGRpc2FibGUKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxMCAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxMCk7CisJeyBBU1lfREFUQSwgICAgICAgICAgICAgMHg4MDAwMDAwMCB9LCAgLy8gICAjIExDRC5BU1lfREFUeCAgIyBEVU1NWSB3cml0ZV9jbGllbnRfcmVnKIFAKk5PVEUyCisJeyBBU1lfREFUQiwgICAgICAgICAgICAgMHg4MDAwMDAwMCB9LCAgLy8gICAgIAorCXsgQVNZX0RBVEMsICAgICAgICAgICAgIDB4ODAwMDAwMDAgfSwgIC8vICAgICAKKwl7IEFTWV9EQVRELCAgICAgICAgICAgICAweDgwMDAwMDAwIH0sICAvLyAgICAgCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwOSB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA4IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgIAorCXsgQVNZX0RBVEEsICAgICAgICAgICAgIDB4ODAwMDAwMDcgfSwgIC8vICAgIyBMQ0QuQVNZX0RBVHggICMgSW5kZXggc2V0dGluZyBvZiBTVUIgTENERAorCXsgQVNZX0RBVEIsICAgICAgICAgICAgIDB4MDAwMDQwMDUgfSwgIC8vICAgICAjIExDRCBkcml2ZXIgY29udHJvbAorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDUgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBlbmFibGUKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA0IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgICMgRGlyZWN0IGNvbW1hbmQgdHJhbnNmZXIgZGlzYWJsZQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIwICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIwKTsKKwl7IEFTWV9EQVRBLCAgICAgICAgICAgICAweDgwMDAwMDU5IH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKKwl7IEFTWV9EQVRCLCAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICAgIyBMVFBTIEkvRiBjb250cm9sCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwNSB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGVuYWJsZQorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDQgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBkaXNhYmxlCisKKwl7IFZTWU5JRiwgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgTENELlZTWU5DSUYgICMgVlNZTkMgSS9GIG1vZGUgT0ZGCisJeyBQT1JUX0VOQiwgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIExDRC5QT1JUX0VOQiAgIyBTWU5DIEkvRiAgb3V0cHV0IHNlbGVjdAorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXsgVlNZTklGLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vIFZTWU5DIEkvRiBtb2RlIE9GRgorCXsgUE9SVF9FTkIsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vIFNZTkMgSS9GIG1vZGUgT04KKworCXsgQklUTUFQMSwgICAgICAgICAgICAgIDB4MDFFMDAwRjAgfSwgIC8vIE1EQy5CSVRNQVAyICApOyAvLyBTZXR1cCBvZiBQSVRDSCBzaXplIHRvIEZyYW1lIGJ1ZmZlcjEKKwl7IEJJVE1BUDIsICAgICAgICAgICAgICAweDAxRTAwMEYwIH0sICAvLyBNREMuQklUTUFQMyAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXIyCisJeyBCSVRNQVAzLCAgICAgICAgICAgICAgMHgwMUUwMDBGMCB9LCAgLy8gTURDLkJJVE1BUDQgICk7IC8vIFNldHVwIG9mIFBJVENIIHNpemUgdG8gRnJhbWUgYnVmZmVyMworCXsgQklUTUFQNCwgICAgICAgICAgICAgIDB4MDBEQzAwQjAgfSwgIC8vIE1EQy5CSVRNQVA1ICApOyAvLyBTZXR1cCBvZiBQSVRDSCBzaXplIHRvIEZyYW1lIGJ1ZmZlcjQKKwl7IENMS0VOQiwgICAgICAgICAgICAgICAweDAwMDAwMUVGIH0sICAvLyBTWVMuQ0xLRU5CICApOyAvLyBEQ0xLIHN1cHBseQorCXsgUE9SVF9FTkIsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vIExDRC5QT1JUX0VOQiAgKTsgLy8gU3luY2hyb25vdXMgcG9ydCBlbmFibGUKKwl7IFBPUlQsICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IH0sICAvLyBMQ0QuUE9SVCAgKTsgLy8gUG9sYXJpdHkgb2YgREUgaXMgc2V0IHRvIGhpZ2ggYWN0aXZlCisJeyBQWEwsICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiB9LCAgLy8gTENELlBYTCAgKTsgLy8gQUNUTU9ERSAyIHNldCAoMXN0IGZyYW1lIGJsYWNrIGRhdGEgb3V0cHV0KQorCXsgTVBMRkJVRiwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vIExDRC5NUExGQlVGICApOyAvLyBTZWxlY3QgdGhlIHJlYWRpbmcgYnVmZmVyCisJeyBIQ1lDTEUsICAgICAgICAgICAgICAgMHgwMDAwMDEwYiB9LCAgLy8gTENELkhDWUNMRSAgKTsgLy8gU2V0dXAgdG8gVkdBIHNpemUKKwl7IEhTVywgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIH0sICAvLyBMQ0QuSFNXICAKKwl7IEhERV9TVEFSVCwgICAgICAgICAgICAweDAwMDAwMDA3IH0sICAvLyBMQ0QuSERFX1NUQVJUICAKKwl7IEhERV9TSVpFLCAgICAgICAgICAgICAweDAwMDAwMEVGIH0sICAvLyBMQ0QuSERFX1NJWkUgIAorCXsgVkNZQ0xFLCAgICAgICAgICAgICAgIDB4MDAwMDAyODUgfSwgIC8vIExDRC5WQ1lDTEUgIAorCXsgVlNXLCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vIExDRC5WU1cgIAorCXsgVkRFX1NUQVJULCAgICAgICAgICAgIDB4MDAwMDAwMDMgfSwgIC8vIExDRC5WREVfU1RBUlQgIAorCXsgVkRFX1NJWkUsICAgICAgICAgICAgIDB4MDAwMDAyN0YgfSwgIC8vIExDRC5WREVfU0laRSAgCisKKwl7IFNUQVJULCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBMQ0QuU1RBUlQgICk7IC8vIExDREMgLSBQaXhlbCBkYXRhIHRyYW5zZmVyIHN0YXJ0CisKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxMCAgICAgICAgIH0sICAvLyAgd2FpdF9tcyggMTAgICk7CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCQyB9LCAgLy8gU1BJLlNTSVRYICApOyAvLyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE4MCB9LCAgLy8gRGlzcGxheSBkYXRhIHNldHVwCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDAzQiB9LCAgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgfSwgIC8vIFF1YWQgRGF0YSBjb25maWd1cmF0aW9uIC0gVkdBCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoIDEgICAgICAgICAgKTsgLy8gIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIwIH0sICAvLyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExNiB9LCAgLy8gUG93ZXIgc3VwcGx5IE9OL09GRiBjb250cm9sCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoIDEgICAgICAgICAgKTsgLy8gIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEI4IH0sICAvLyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDFGRiB9LCAgLy8gT3V0cHV0IGNvbnRyb2wKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMUY1IH0sICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoIDEpOyAgICAgICAgIC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDAxMSB9LCAgLy8gd2FpdF9tcygtb3V0IChDb21tYW5kIG9ubHkpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDAyOSB9LCAgLy8gRGlzcGxheSBvbiAoQ29tbWFuZCBvbmx5KQorCisJeyBTWVNURU1fQkxPQ0sxX0JBU0UsICAgMHgwMDAwMDAwMiB9LCAgLy8gICAgIyB3YWtlUkVRIC0+IEdQSU8KKworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCBfcGFuZWxfaW5pdChzdHJ1Y3QgaW5pdF90YWJsZSAqaW5pdF90YWJsZSkKK3sKKwl1bnNpZ25lZCBuOworCisJZHByaW50ZihJTkZPLCAicGFuZWxfaW5pdCgpXG4iKTsKKworCW4gPSAwOworCXdoaWxlIChpbml0X3RhYmxlW25dLnJlZyAhPSAwIHx8IGluaXRfdGFibGVbbl0udmFsICE9IDApIHsKKwkJaWYgKGluaXRfdGFibGVbbl0ucmVnICE9IDApCisJCQltZGRpX3JlbW90ZV93cml0ZShpbml0X3RhYmxlW25dLnZhbCwgaW5pdF90YWJsZVtuXS5yZWcpOworCQllbHNlCisJCQl0aHJlYWRfc2xlZXAoaW5pdF90YWJsZVtuXS52YWwpOy8vbWRlbGF5KGluaXRfdGFibGVbbl0udmFsKTsKKwkJbisrOworCX0KKworCWRwcmludGYoSU5GTywgInBhbmVsX2luaXQoKSBkb25lXG4iKTsKK30KKwordm9pZCBwYW5lbF9pbml0KHN0cnVjdCBtZGRpX2NsaWVudF9jYXBzICpjbGllbnRfY2FwcykKK3sKKwlzd2l0Y2goY2xpZW50X2NhcHMtPm1hbnVmYWN0dXJlcl9uYW1lKSB7CisJY2FzZSAweGQyNjM6IC8vIFRvc2hpYmEKKwkJZHByaW50ZihJTkZPLCAiRm91bmQgVG9zaGliYSBwYW5lbFxuIik7CisJCV9wYW5lbF9pbml0KHRvc2hpYmFfNDgweDY0MF9pbml0X3RhYmxlKTsKKwkJYnJlYWs7CisJY2FzZSAweDQ0NzQ6IC8vPz8KKwkJaWYgKGNsaWVudF9jYXBzLT5wcm9kdWN0X2NvZGUgPT0gMHhjMDY1KQorCQkJZHByaW50ZihJTkZPLCAiRm91bmQgV1ZHQSBwYW5lbFxuIik7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBwYW5lbF9wb3dlcm9uKHZvaWQpCit7CisJZ3Bpb19zZXQoODgsIDApOworCWdwaW9fY29uZmlnKDg4LCBHUElPX09VVFBVVCk7CisJdGhyZWFkX3NsZWVwKDEpOyAvL3VkZWxheSgxMCk7CisJZ3Bpb19zZXQoODgsIDEpOworCXRocmVhZF9zbGVlcCgxMCk7IC8vbWRlbGF5KDEwKTsKKworCS8vbWRlbGF5KDEwMDApOyAvLyB1bmNvbW1lbnQgZm9yIHNlY29uZCBzdGFnZSBib290Cit9CisKK3ZvaWQgcGFuZWxfYmFja2xpZ2h0KGludCBvbikKK3t9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYzMF8xeC9ydWxlcy5tayBiL3RhcmdldC9tc203NjMwXzF4L3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjQ3YWEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYzMF8xeC9ydWxlcy5tawpAQCAtMCwwICsxLDQwIEBACitMT0NBTF9ESVIgOj0gJChHRVRfTE9DQUxfRElSKQorCitJTkNMVURFUyArPSAtSSQoTE9DQUxfRElSKS9pbmNsdWRlIC1JJChMS19UT1BfRElSKS9wbGF0Zm9ybS9tc21fc2hhcmVkCisKK1BMQVRGT1JNIDo9IG1zbTd4MzAKKworTUVNQkFTRSA6PSAweDAwMDAwMDAwICMgRUJJCitNRU1TSVpFIDo9IDB4MDAxMDAwMDAgIyAxTUIKKworQkFTRV9BRERSICAgICAgICAgICAgOj0gMHgwMDIwMDAwMAorCitUQUdTX0FERFIgICAgICAgICAgICA6PSBCQVNFX0FERFIrMHgwMDAwMDEwMAorS0VSTkVMX0FERFIgICAgICAgICAgOj0gQkFTRV9BRERSKzB4MDAwMDgwMDAKK1JBTURJU0tfQUREUiAgICAgICAgIDo9IEJBU0VfQUREUisweDAxMDAwMDAwCitTQ1JBVENIX0FERFIgICAgICAgICA6PSAweDA4MDA4MDAwCitGQVNUQk9PVF9CVUZfU0laRSAgICA6PSAweDA3ODAwMDAwCisKK0tFWVNfVVNFX0dQSU9fS0VZUEFEIDo9IDEKKworREVGSU5FUyArPSBESVNQTEFZX1RZUEVfTUREST0xCisKK01PRFVMRVMgKz0gXAorCWRldi9rZXlzIFwKKwlsaWIvcHRhYmxlCisKK0RFRklORVMgKz0gXAorCVNEUkFNX1NJWkU9JChNRU1TSVpFKSBcCisJTUVNQkFTRT0kKE1FTUJBU0UpIFwKKwlCQVNFX0FERFI9JChCQVNFX0FERFIpIFwKKwlUQUdTX0FERFI9JChUQUdTX0FERFIpIFwKKwlLRVJORUxfQUREUj0kKEtFUk5FTF9BRERSKSBcCisJUkFNRElTS19BRERSPSQoUkFNRElTS19BRERSKSBcCisJU0NSQVRDSF9BRERSPSQoU0NSQVRDSF9BRERSKSBcCisJRkFTVEJPT1RfQlVGX1NJWkU9JChGQVNUQk9PVF9CVUZfU0laRSkKKworCitPQkpTICs9IFwKKwkkKExPQ0FMX0RJUikvaW5pdC5vIFwKKwkkKExPQ0FMX0RJUikvYXRhZ3MubyBcCisJJChMT0NBTF9ESVIpL2tleXBhZC5vCmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYzMF8xeC90b29scy9tYWtlZmlsZSBiL3RhcmdldC9tc203NjMwXzF4L3Rvb2xzL21ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGE0NTEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYzMF8xeC90b29scy9tYWtlZmlsZQpAQCAtMCwwICsxLDQxIEBACisjTWFrZWZpbGUgdG8gZ2VuZXJhdGUgYXBwc2Jvb3QubWJuCisKK2lmZXEgKCQoQk9PVExPQURFUl9PVVQpLC4pCitBUFBTQk9PVEhFQURFUl9ESVIgIDo9ICQoQlVJTERESVIpCitlbHNlCitBUFBTQk9PVEhFQURFUl9ESVIgIDo9ICQoQk9PVExPQURFUl9PVVQpLy4uLy4uLworZW5kaWYKKworU1JDX0RJUiAgOj0gdGFyZ2V0LyQoVEFSR0VUKS90b29scworQ09NUElMRVIgOj0gZ2NjCisKK2lmZXEgKCQoRU1NQ19CT09UKSwgMSkKKyAgQVBQU0JPT1RIRFJfRklMRVMgOj0gRU1NQ0JPT1QuTUJOCitlbHNlCisgIGlmZXEgKCQoQlVJTERfTkFORFdSSVRFKSwgMSkKKyAgICBBUFBTQk9PVEhEUl9GSUxFUyA6PQorICBlbHNlCisgICAgQVBQU0JPT1RIRFJfRklMRVMgOj0gYXBwc2Jvb3QubWJuCisgIGVuZGlmCitlbmRpZgorCitBUFBTQk9PVEhFQURFUjogJChBUFBTQk9PVEhEUl9GSUxFUykKKworCithcHBzYm9vdC5tYm46IGFwcHNib290aGQubWJuICQoT1VUQklOKQorCWNhdCAkKEFQUFNCT09USEVBREVSX0RJUikvYXBwc2Jvb3RoZC5tYm4gJChPVVRCSU4pID4gJChBUFBTQk9PVEhFQURFUl9ESVIpL2FwcHNib290Lm1ibgorCXJtIC1mICQoQVBQU0JPT1RIRUFERVJfRElSKS9hcHBzYm9vdGhkLm1ibgorCithcHBzYm9vdGhkLm1ibjogbWtoZWFkZXIgJChPVVRCSU4pCisJJChTUkNfRElSKS9ta2hlYWRlciAkKE9VVEJJTikgJChBUFBTQk9PVEhFQURFUl9ESVIpL2FwcHNib290aGQubWJuCisKK0VNTUNCT09ULk1CTjogZW1tY19hcHBzYm9vdGhkLm1ibiAkKE9VVEJJTikKKwljYXQgJChBUFBTQk9PVEhFQURFUl9ESVIpL2VtbWNfYXBwc2Jvb3RoZC5tYm4gJChPVVRCSU4pID4gJChBUFBTQk9PVEhFQURFUl9ESVIpL0VNTUNCT09ULk1CTgorCXJtIC1mICQoQVBQU0JPT1RIRUFERVJfRElSKS9lbW1jX2FwcHNib290aGQubWJuCisKK2VtbWNfYXBwc2Jvb3RoZC5tYm46IG1raGVhZGVyICQoT1VUQklOKQorCSQoU1JDX0RJUikvbWtoZWFkZXIgJChPVVRCSU4pICQoQVBQU0JPT1RIRUFERVJfRElSKS9lbW1jX2FwcHNib290aGQubWJuIHVuaWZpZWQtYm9vdAorCitta2hlYWRlcjogJChTUkNfRElSKS9ta2hlYWRlci5jCisJJHtDT01QSUxFUn0gLURNRU1CQVNFPSQoTUVNQkFTRSkgJChTUkNfRElSKS9ta2hlYWRlci5jIC1vICQoU1JDX0RJUikvbWtoZWFkZXIKKwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MzBfMXgvdG9vbHMvbWtoZWFkZXIuYyBiL3RhcmdldC9tc203NjMwXzF4L3Rvb2xzL21raGVhZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwMTAwNwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tc203NjMwXzF4L3Rvb2xzL21raGVhZGVyLmMKQEAgLTAsMCArMSw5MSBAQAorLyogQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzdGF0IHM7CisJdW5zaWduZWQgc2l6ZSwgYmFzZTsKKwlpbnQgdW5pZmllZF9ib290ID0gMDsKKwl1bnNpZ25lZCB1bmlmaWVkX2Jvb3RfbWFnaWNbMjBdOworCXVuc2lnbmVkIG5vbl91bmlmaWVkX2Jvb3RfbWFnaWNbMTBdOworCXVuc2lnbmVkIG1hZ2ljX2xlbiA9IDA7CisJdW5zaWduZWQgKm1hZ2ljOworCWludCBmZDsKKworCWlmKGFyZ2MgPCAzKSB7CisJCWZwcmludGYoc3RkZXJyLCJ1c2FnZTogbWtoZWFkZXIgPGJpbj4gPGhkcj5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFyZ2MgPT0gNCkgeworCQlpZighc3RyY21wKCJ1bmlmaWVkLWJvb3QiLGFyZ3ZbM10pKSB7CisJCQl1bmlmaWVkX2Jvb3QgPSAxOworCQl9CisJfQorCisJaWYoc3RhdChhcmd2WzFdLCAmcykpIHsKKwkJcGVycm9yKCJjYW5ub3Qgc3RhdCBiaW5hcnkiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmKHVuaWZpZWRfYm9vdCkgeworCQltYWdpYyA9IHVuaWZpZWRfYm9vdF9tYWdpYzsKKwkJbWFnaWNfbGVuID0gc2l6ZW9mKHVuaWZpZWRfYm9vdF9tYWdpYyk7CisJfSBlbHNlIHsKKwkJbWFnaWMgPSBub25fdW5pZmllZF9ib290X21hZ2ljOworCQltYWdpY19sZW4gPSBzaXplb2Yobm9uX3VuaWZpZWRfYm9vdF9tYWdpYyk7CisJfQorCisJc2l6ZSA9IHMuc3Rfc2l6ZTsKKyNpZiBNRU1CQVNFCisJYmFzZSA9IE1FTUJBU0U7CisjZWxzZQorCWJhc2UgPSAwOworI2VuZGlmCisKKwltYWdpY1swXSA9IDB4MDAwMDAwMDU7IC8qIGFwcHNibCAqLworCW1hZ2ljWzFdID0gMHgwMDAwMDAwMjsgLyogbmFuZCAqLworCW1hZ2ljWzJdID0gMHgwMDAwMDAwMDsKKwltYWdpY1szXSA9IGJhc2U7CisJbWFnaWNbNF0gPSBzaXplOworCW1hZ2ljWzVdID0gc2l6ZTsKKwltYWdpY1s2XSA9IHNpemUgKyBiYXNlOworCW1hZ2ljWzddID0gMHgwMDAwMDAwMDsKKwltYWdpY1s4XSA9IHNpemUgKyBiYXNlOworCW1hZ2ljWzldID0gMHgwMDAwMDAwMDsKKworCWlmICh1bmlmaWVkX2Jvb3QgPT0gMSkKKwl7CisJCW1hZ2ljWzEwXSA9IDB4MzM4MzY2ODU7IC8qIGNvb2tpZSBtYWdpYyBudW1iZXIgKi8KKwkJbWFnaWNbMTFdID0gMHgwMDAwMDAwMTsgLyogY29va2llIHZlcnNpb24gKi8KKwkJbWFnaWNbMTJdID0gMHgwMDAwMDAwMjsgLyogZmlsZSBmb3JtYXRzICovCisJCW1hZ2ljWzEzXSA9IDB4MDAwMDAwMDA7CisJCW1hZ2ljWzE0XSA9IDB4MDA1MDAwMDA7IC8qIDVNIGZvciBib290LmltZyAqLworCQltYWdpY1sxNV0gPSAweDAwMDAwMDAwOworCQltYWdpY1sxNl0gPSAweDAwMDAwMDAwOworCQltYWdpY1sxN10gPSAweDAwMDAwMDAwOworCQltYWdpY1sxOF0gPSAweDAwMDAwMDAwOworCQltYWdpY1sxOV0gPSAweDAwMDAwMDAwOworCX0KKworCWZkID0gb3Blbihhcmd2WzJdLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsKKwlpZihmZCA8IDApIHsKKwkJcGVycm9yKCJjYW5ub3Qgb3BlbiBoZWFkZXIgZm9yIHdyaXRpbmciKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZih3cml0ZShmZCwgbWFnaWMsIG1hZ2ljX2xlbikgIT0gbWFnaWNfbGVuKSB7CisJCXBlcnJvcigiY2Fubm90IHdyaXRlIGhlYWRlciIpOworCQljbG9zZShmZCk7CisJCXVubGluayhhcmd2WzJdKTsKKwkJcmV0dXJuIC0xOworCX0KKwljbG9zZShmZCk7CisKKwlyZXR1cm4gMDsKK30K