ZGlmZiAtLWdpdCBhL2NvcmUvZnBkZmFwaS9lZGl0L2NwZGZfY3JlYXRvci5jcHAgYi9jb3JlL2ZwZGZhcGkvZWRpdC9jcGRmX2NyZWF0b3IuY3BwCmluZGV4IDFjMGNkNjkuLjg1OGQ1NmMgMTAwNjQ0Ci0tLSBhL2NvcmUvZnBkZmFwaS9lZGl0L2NwZGZfY3JlYXRvci5jcHAKKysrIGIvY29yZS9mcGRmYXBpL2VkaXQvY3BkZl9jcmVhdG9yLmNwcApAQCAtMTcxLDEzICsxNzEsMjEgQEAKICAgICBlbmNvZGVyLkdldERpY3QoKS0+U2V0TmV3Rm9yPENQREZfTnVtYmVyPigKICAgICAgICAgIkxlbmd0aCIsIHN0YXRpY19jYXN0PGludD4oZW5jcnlwdG9yLkdldFNpemUoKSkpOwogICB9CisKICAgaWYgKCFXcml0ZURpcmVjdE9iaihvYmpudW0sIGVuY29kZXIuR2V0RGljdCgpLCB0cnVlKSB8fAotICAgICAgIW1fQXJjaGl2ZS0+V3JpdGVTdHJpbmcoInN0cmVhbVxyXG4iKSB8fAotICAgICAgIW1fQXJjaGl2ZS0+V3JpdGVCbG9jayhlbmNyeXB0b3IuR2V0RGF0YSgpLCBlbmNyeXB0b3IuR2V0U2l6ZSgpKSB8fAotICAgICAgIW1fQXJjaGl2ZS0+V3JpdGVTdHJpbmcoIlxyXG5lbmRzdHJlYW0iKSkgeworICAgICAgIW1fQXJjaGl2ZS0+V3JpdGVTdHJpbmcoInN0cmVhbVxyXG4iKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIC8vIEFsbG93IGZvciBlbXB0eSBzdHJlYW1zLgorICBpZiAoZW5jcnlwdG9yLkdldFNpemUoKSA+IDAgJiYKKyAgICAgICFtX0FyY2hpdmUtPldyaXRlQmxvY2soZW5jcnlwdG9yLkdldERhdGEoKSwgZW5jcnlwdG9yLkdldFNpemUoKSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIW1fQXJjaGl2ZS0+V3JpdGVTdHJpbmcoIlxyXG5lbmRzdHJlYW0iKSkKKyAgICByZXR1cm4gZmFsc2U7CisKICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvZnBkZmFwaS9wYXJzZXIvY3BkZl9zeW50YXhfcGFyc2VyLmNwcCBiL2NvcmUvZnBkZmFwaS9wYXJzZXIvY3BkZl9zeW50YXhfcGFyc2VyLmNwcAppbmRleCBmZTFhMTk3Li45ZGNjYmQ5IDEwMDY0NAotLS0gYS9jb3JlL2ZwZGZhcGkvcGFyc2VyL2NwZGZfc3ludGF4X3BhcnNlci5jcHAKKysrIGIvY29yZS9mcGRmYXBpL3BhcnNlci9jcGRmX3N5bnRheF9wYXJzZXIuY3BwCkBAIC03MjUsMTAgKzcyNSwxMSBAQAogICAgIH0KICAgICBtX1BvcyA9IHN0cmVhbVN0YXJ0UG9zOwogICB9Ci0KLSAgLy8gUmVhZCB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisgIC8vIFJlYWQgdXAgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBOb3RlLCB3ZSBhbGxvdyB6ZXJvIGxlbmd0aCBzdHJlYW1zIGFzCisgIC8vIHdlIG5lZWQgdG8gcGFzcyB0aGVtIHRocm91Z2ggd2hlbiB3ZSBhcmUgaW1wb3J0aW5nIHBhZ2VzIGludG8gYSBuZXcKKyAgLy8gZG9jdW1lbnQuCiAgIGxlbiA9IHN0ZDo6bWluKGxlbiwgbV9GaWxlTGVuIC0gbV9Qb3MgLSBtX0hlYWRlck9mZnNldCk7Ci0gIGlmIChsZW4gPD0gMCkKKyAgaWYgKGxlbiA8IDApCiAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3QsIEZ4RnJlZURlbGV0ZXI+IHBEYXRhOwpAQCAtNzQ2LDcgKzc0Nyw2IEBACiAgICAgICBwRGF0YSA9IGRlc3RfYnVmLkRldGFjaEJ1ZmZlcigpOwogICAgIH0KICAgfQotCiAgIGF1dG8gcFN0cmVhbSA9CiAgICAgICBwZGZpdW06Ok1ha2VVbmlxdWU8Q1BERl9TdHJlYW0+KHN0ZDo6bW92ZShwRGF0YSksIGxlbiwgc3RkOjptb3ZlKHBEaWN0KSk7CiAgIHN0cmVhbVN0YXJ0UG9zID0gbV9Qb3M7CmRpZmYgLS1naXQgYS9mcGRmc2RrL2ZwZGZwcG9fZW1iZWRkZXJ0ZXN0LmNwcCBiL2ZwZGZzZGsvZnBkZnBwb19lbWJlZGRlcnRlc3QuY3BwCmluZGV4IGRiMzk3MDAuLjdlNmZmMzMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvZnBkZnBwb19lbWJlZGRlcnRlc3QuY3BwCisrKyBiL2ZwZGZzZGsvZnBkZnBwb19lbWJlZGRlcnRlc3QuY3BwCkBAIC0xLDExICsxLDExIEBACiAvLyBDb3B5cmlnaHQgMjAxNiBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJwdWJsaWMvZnBkZl9wcG8uaCIKKyNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlICJjb3JlL2Z4Y3J0L2Z4X2Jhc2ljLmgiCiAjaW5jbHVkZSAicHVibGljL2ZwZGZfZWRpdC5oIgorI2luY2x1ZGUgInB1YmxpYy9mcGRmX3Bwby5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmdmlldy5oIgogI2luY2x1ZGUgInRlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgpAQCAtMTMxLDcgKzEzMSw3IEBACiAgIEVYUEVDVF9UUlVFKE9wZW5Eb2N1bWVudCgiYnVnXzY2NDI4NC5wZGYiKSk7CiAKICAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKLSAgRVhQRUNUX1RSVUUocGFnZSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBwYWdlKTsKIAogICBGUERGX0RPQ1VNRU5UIG91dHB1dF9kb2MgPSBGUERGX0NyZWF0ZU5ld0RvY3VtZW50KCk7CiAgIEVYUEVDVF9UUlVFKG91dHB1dF9kb2MpOwpAQCAtMTQwLDMgKzE0MCwzNyBAQAogCiAgIFVubG9hZFBhZ2UocGFnZSk7CiB9CisKK1RFU1RfRihGUERGUFBPRW1iZWRkZXJ0ZXN0LCBJbXBvcnRXaXRoWmVyb0xlbmd0aFN0cmVhbSkgeworICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoInplcm9fbGVuZ3RoX3N0cmVhbS5wZGYiKSk7CisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9ORShudWxscHRyLCBwYWdlKTsKKworICBGUERGX0JJVE1BUCBiaXRtYXAgPSBSZW5kZXJQYWdlKHBhZ2UpOworICBBU1NFUlRfRVEoMjAwLCBGUERGQml0bWFwX0dldFdpZHRoKGJpdG1hcCkpOworICBBU1NFUlRfRVEoMjAwLCBGUERGQml0bWFwX0dldEhlaWdodChiaXRtYXApKTsKKyAgQVNTRVJUX0VRKDgwMCwgRlBERkJpdG1hcF9HZXRTdHJpZGUoYml0bWFwKSk7CisKKyAgc3RkOjpzdHJpbmcgZGlnZXN0ID0gSGFzaEJpdG1hcChiaXRtYXAsIDIwMCwgMjAwKTsKKyAgRlBERkJpdG1hcF9EZXN0cm95KGJpdG1hcCk7CisgIEZQREZfQ2xvc2VQYWdlKHBhZ2UpOworCisgIEZQREZfRE9DVU1FTlQgbmV3X2RvYyA9IEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQoKTsKKyAgRVhQRUNUX1RSVUUobmV3X2RvYyk7CisgIEVYUEVDVF9UUlVFKEZQREZfSW1wb3J0UGFnZXMobmV3X2RvYywgZG9jdW1lbnQoKSwgIjEiLCAwKSk7CisKKyAgRVhQRUNUX0VRKDEsIEZQREZfR2V0UGFnZUNvdW50KG5ld19kb2MpKTsKKyAgRlBERl9QQUdFIG5ld19wYWdlID0gRlBERl9Mb2FkUGFnZShuZXdfZG9jLCAwKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIG5ld19wYWdlKTsKKyAgRlBERl9CSVRNQVAgbmV3X2JpdG1hcCA9IFJlbmRlclBhZ2UobmV3X3BhZ2UpOworICBBU1NFUlRfRVEoMjAwLCBGUERGQml0bWFwX0dldFdpZHRoKG5ld19iaXRtYXApKTsKKyAgQVNTRVJUX0VRKDIwMCwgRlBERkJpdG1hcF9HZXRIZWlnaHQobmV3X2JpdG1hcCkpOworICBBU1NFUlRfRVEoODAwLCBGUERGQml0bWFwX0dldFN0cmlkZShuZXdfYml0bWFwKSk7CisKKyAgc3RkOjpzdHJpbmcgbmV3X2RpZ2VzdCA9IEhhc2hCaXRtYXAobmV3X2JpdG1hcCwgMjAwLCAyMDApOworICBGUERGQml0bWFwX0Rlc3Ryb3kobmV3X2JpdG1hcCk7CisgIEZQREZfQ2xvc2VQYWdlKG5ld19wYWdlKTsKKyAgRlBERl9DbG9zZURvY3VtZW50KG5ld19kb2MpOworCisgIEVYUEVDVF9FUShkaWdlc3QsIG5ld19kaWdlc3QpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmNwcCBiL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAKaW5kZXggYmYwMGMxMS4uNmNlYTU5OCAxMDA2NDQKLS0tIGEvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmNwcAorKysgYi90ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuY3BwCkBAIC0zMjYsNiArMzI2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfaW5kZXgpOwogfQogCitzdGQ6OnN0cmluZyBFbWJlZGRlclRlc3Q6Okhhc2hCaXRtYXAoRlBERl9CSVRNQVAgYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfaGVpZ2h0KSB7CisgIHVpbnQ4X3QgZGlnZXN0WzE2XTsKKyAgQ1JZUFRfTUQ1R2VuZXJhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KEZQREZCaXRtYXBfR2V0QnVmZmVyKGJpdG1hcCkpLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF93aWR0aCAqIDQgKiBleHBlY3RlZF9oZWlnaHQsIGRpZ2VzdCk7CisgIHJldHVybiBDcnlwdFRvQmFzZTE2KGRpZ2VzdCk7Cit9CisKIC8vIHN0YXRpYwogdm9pZCBFbWJlZGRlclRlc3Q6OkNvbXBhcmVCaXRtYXAoRlBERl9CSVRNQVAgYml0bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3dpZHRoLApAQCAtMzM5LDEwICszNDgsOCBAQAogICBpZiAoIWV4cGVjdGVkX21kNXN1bSkKICAgICByZXR1cm47CiAKLSAgdWludDhfdCBkaWdlc3RbMTZdOwotICBDUllQVF9NRDVHZW5lcmF0ZShzdGF0aWNfY2FzdDx1aW50OF90Kj4oRlBERkJpdG1hcF9HZXRCdWZmZXIoYml0bWFwKSksCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0cmlkZSAqIGV4cGVjdGVkX2hlaWdodCwgZGlnZXN0KTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX21kNXN1bSwgQ3J5cHRUb0Jhc2UxNihkaWdlc3QpKTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkX21kNXN1bSwKKyAgICAgICAgICAgIEhhc2hCaXRtYXAoYml0bWFwLCBleHBlY3RlZF93aWR0aCwgZXhwZWN0ZWRfaGVpZ2h0KSk7CiB9CiAKIC8vIENhbid0IHVzZSBndGVzdC1wcm92aWRlZCBtYWluIHNpbmNlIHdlIG5lZWQgdG8gc3Rhc2ggdGhlIHBhdGggdG8gdGhlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuaCBiL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5oCmluZGV4IDYxOWZjNWQuLjJiYjc5NmQgMTAwNjQ0Ci0tLSBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5oCisrKyBiL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5oCkBAIC0xMDgsNiArMTA4LDExIEBACiAgcHJvdGVjdGVkOgogICB2b2lkIFNldHVwRm9ybUZpbGxFbnZpcm9ubWVudCgpOwogCisgIC8vIFJldHVybiB0aGUgaGFzaCBvZiB8Yml0bWFwfC4KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEhhc2hCaXRtYXAoRlBERl9CSVRNQVAgYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9oZWlnaHQpOworCiAgIC8vIENoZWNrIHxiaXRtYXB8IHRvIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGRpbWVuc2lvbnMgYW5kIGNvbnRlbnQuCiAgIHN0YXRpYyB2b2lkIENvbXBhcmVCaXRtYXAoRlBERl9CSVRNQVAgYml0bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF93aWR0aCwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL3plcm9fbGVuZ3RoX3N0cmVhbS5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL3plcm9fbGVuZ3RoX3N0cmVhbS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjI1OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvemVyb19sZW5ndGhfc3RyZWFtLmluCkBAIC0wLDAgKzEsNjMgQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorPj4KK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCisgIC9Db3VudCAxCisgIC9LaWRzIFsgMyAwIFIgXQorPj4KK2VuZG9iagore3tvYmplY3QgMyAwfX0gPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvUmVzb3VyY2VzIDw8CisgICAgL0ZvbnQgPDwKKyAgICAgIC9GMSA0IDAgUgorICAgICAgL0YyIDUgMCBSCisgICAgPj4KKyAgPj4KKyAgL0NvbnRlbnRzIFs2IDAgUiA3IDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDQgMH19IDw8CisgIC9UeXBlIC9Gb250CisgIC9TdWJ0eXBlIC9UeXBlMQorICAvQmFzZUZvbnQgL1RpbWVzLVJvbWFuCis+PgorZW5kb2JqCit7e29iamVjdCA1IDB9fSA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9IZWx2ZXRpY2EKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDYgMH19IDw8CisgIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCisgIC9MZW5ndGggMAorPj4KK3N0cmVhbQorZW5kc3RyZWFtCitlbmRvYmoKK3t7b2JqZWN0IDcgMH19IDw8Cis+Pgorc3RyZWFtCitCVAorMjAgNTAgVGQKKy9GMSAxMiBUZgorKEhlbGxvLCB3b3JsZCEpIFRqCiswIDUwIFRkCisvRjIgMTYgVGYKKyhHb29kYnllLCB3b3JsZCEpIFRqCitFVAorZW5kc3RyZWFtCitlbmRvYmoKK3t7eHJlZn19Cit0cmFpbGVyIDw8CisgIC9TaXplIDYKKyAgL1Jvb3QgMSAwIFIKKz4+Cit7e3N0YXJ0eHJlZn19CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvemVyb19sZW5ndGhfc3RyZWFtLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL3plcm9fbGVuZ3RoX3N0cmVhbS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBmYWU1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL3plcm9fbGVuZ3RoX3N0cmVhbS5wZGYKQEAgLTAsMCArMSw3NCBAQAorJVBERi0xLjcKKyWg8qT0CisxIDAgb2JqIDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorPj4KKzIgMCBvYmogPDwKKyAgL1R5cGUgL1BhZ2VzCisgIC9NZWRpYUJveCBbIDAgMCAyMDAgMjAwIF0KKyAgL0NvdW50IDEKKyAgL0tpZHMgWyAzIDAgUiBdCis+PgorZW5kb2JqCiszIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL1Jlc291cmNlcyA8PAorICAgIC9Gb250IDw8CisgICAgICAvRjEgNCAwIFIKKyAgICAgIC9GMiA1IDAgUgorICAgID4+CisgID4+CisgIC9Db250ZW50cyBbNiAwIFIgNyAwIFJdCis+PgorZW5kb2JqCis0IDAgb2JqIDw8CisgIC9UeXBlIC9Gb250CisgIC9TdWJ0eXBlIC9UeXBlMQorICAvQmFzZUZvbnQgL1RpbWVzLVJvbWFuCis+PgorZW5kb2JqCis1IDAgb2JqIDw8CisgIC9UeXBlIC9Gb250CisgIC9TdWJ0eXBlIC9UeXBlMQorICAvQmFzZUZvbnQgL0hlbHZldGljYQorPj4KK2VuZG9iagorNiAwIG9iaiA8PAorICAvRmlsdGVyIC9GbGF0ZURlY29kZQorICAvTGVuZ3RoIDAKKz4+CitzdHJlYW0KK2VuZHN0cmVhbQorZW5kb2JqCis3IDAgb2JqIDw8Cis+Pgorc3RyZWFtCitCVAorMjAgNTAgVGQKKy9GMSAxMiBUZgorKEhlbGxvLCB3b3JsZCEpIFRqCiswIDUwIFRkCisvRjIgMTYgVGYKKyhHb29kYnllLCB3b3JsZCEpIFRqCitFVAorZW5kc3RyZWFtCitlbmRvYmoKK3hyZWYKKzAgOAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAxNSAwMDAwMCBuIAorMDAwMDAwMDA2MSAwMDAwMCBuIAorMDAwMDAwMDE1NCAwMDAwMCBuIAorMDAwMDAwMDMwNCAwMDAwMCBuIAorMDAwMDAwMDM4MiAwMDAwMCBuIAorMDAwMDAwMDQ1OCAwMDAwMCBuIAorMDAwMDAwMDUzMSAwMDAwMCBuIAordHJhaWxlciA8PAorICAvU2l6ZSA2CisgIC9Sb290IDEgMCBSCis+Pgorc3RhcnR4cmVmCis2NTIKKyUlRU9GCg==