ZGlmZiAtLWdpdCBhL2JlbmNoL0FBQ2xpcEJlbmNoLmNwcCBiL2JlbmNoL0FBQ2xpcEJlbmNoLmNwcAppbmRleCBjZTkxYjJjLi5mODVhZjY4IDEwMDY0NAotLS0gYS9iZW5jaC9BQUNsaXBCZW5jaC5jcHAKKysrIGIvYmVuY2gvQUFDbGlwQmVuY2guY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgfTsKIAogcHVibGljOgotICAgIEFBQ2xpcEJlbmNoKHZvaWQqIHBhcmFtLCBib29sIGRvUGF0aCwgYm9vbCBkb0FBKSAKKyAgICBBQUNsaXBCZW5jaCh2b2lkKiBwYXJhbSwgYm9vbCBkb1BhdGgsIGJvb2wgZG9BQSkKICAgICAgICAgOiBJTkhFUklURUQocGFyYW0pCiAgICAgICAgICwgZkRvUGF0aChkb1BhdGgpCiAgICAgICAgICwgZkRvQUEoZG9BQSkgewpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgZG9QYXRoID8gInBhdGgiIDogInJlY3QiLAogICAgICAgICAgICAgICAgICAgICAgZG9BQSA/ICJBQSIgOiAiQlciKTsKIAotICAgICAgICBmQ2xpcFJlY3Quc2V0KFNrRmxvYXRUb1NjYWxhcigxMC41ZiksIFNrRmxvYXRUb1NjYWxhcigxMC41ZiksIAorICAgICAgICBmQ2xpcFJlY3Quc2V0KFNrRmxvYXRUb1NjYWxhcigxMC41ZiksIFNrRmxvYXRUb1NjYWxhcigxMC41ZiksCiAgICAgICAgICAgICAgICAgICAgICAgU2tGbG9hdFRvU2NhbGFyKDUwLjVmKSwgU2tGbG9hdFRvU2NhbGFyKDUwLjVmKSk7CiAgICAgICAgIGZDbGlwUGF0aC5hZGRSb3VuZFJlY3QoZkNsaXBSZWN0LCBTa0ludFRvU2NhbGFyKDEwKSwgU2tJbnRUb1NjYWxhcigxMCkpOwogICAgICAgICBmRHJhd1JlY3Quc2V0KFNrSW50VG9TY2FsYXIoMCksIFNrSW50VG9TY2FsYXIoMCksCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAvLyBqb3N0bGUgdGhlIGNsaXAgcmVnaW9ucyBlYWNoIHRpbWUgdG8gcHJldmVudCBjYWNoaW5nCiAgICAgICAgICAgICBmQ2xpcFJlY3Qub2Zmc2V0KChpICUgMikgPT0gMCA/IFNrSW50VG9TY2FsYXIoMTApIDogU2tJbnRUb1NjYWxhcigtMTApLCAwKTsKICAgICAgICAgICAgIGZDbGlwUGF0aC5yZXNldCgpOwotICAgICAgICAgICAgZkNsaXBQYXRoLmFkZFJvdW5kUmVjdChmQ2xpcFJlY3QsIAorICAgICAgICAgICAgZkNsaXBQYXRoLmFkZFJvdW5kUmVjdChmQ2xpcFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoNSksIFNrSW50VG9TY2FsYXIoNSkpOwogICAgICAgICAgICAgU2tBU1NFUlQoZkNsaXBQYXRoLmlzQ29udmV4KCkpOwogCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogICAgIFNrUG9pbnQgZlNpemVzW2tOZXN0aW5nRGVwdGgrMV07CiAKIHB1YmxpYzoKLSAgICBOZXN0ZWRBQUNsaXBCZW5jaCh2b2lkKiBwYXJhbSwgYm9vbCBkb0FBKSAKKyAgICBOZXN0ZWRBQUNsaXBCZW5jaCh2b2lkKiBwYXJhbSwgYm9vbCBkb0FBKQogICAgICAgICA6IElOSEVSSVRFRChwYXJhbSkKICAgICAgICAgLCBmRG9BQShkb0FBKSB7CiAKICAgICAgICAgZk5hbWUucHJpbnRmKCJuZXN0ZWRfYWFjbGlwXyVzIiwgZG9BQSA/ICJBQSIgOiAiQlciKTsKIAotICAgICAgICBmRHJhd1JlY3QgPSBTa1JlY3Q6Ok1ha2VMVFJCKDAsIDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoa0ltYWdlU2l6ZSksIAorICAgICAgICBmRHJhd1JlY3QgPSBTa1JlY3Q6Ok1ha2VMVFJCKDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcihrSW1hZ2VTaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKGtJbWFnZVNpemUpKTsKIAogICAgICAgICBmU2l6ZXNbMF0uc2V0KFNrSW50VG9TY2FsYXIoa0ltYWdlU2l6ZSksIFNrSW50VG9TY2FsYXIoa0ltYWdlU2l6ZSkpOwpAQCAtMTI0LDEzICsxMjQsMTMgQEAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9uR2V0TmFtZSgpIHsgcmV0dXJuIGZOYW1lLmNfc3RyKCk7IH0KIAogCi0gICAgdm9pZCByZWN1cnNlKFNrQ2FudmFzKiBjYW52YXMsIAorICAgIHZvaWQgcmVjdXJzZShTa0NhbnZhcyogY2FudmFzLAogICAgICAgICAgICAgICAgICBpbnQgZGVwdGgsCiAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIG9mZnNldCkgewogCiAgICAgICAgICAgICBjYW52YXMtPnNhdmUoKTsKIAotICAgICAgICAgICAgU2tSZWN0IHRlbXAgPSBTa1JlY3Q6Ok1ha2VMVFJCKDAsIDAsIAorICAgICAgICAgICAgU2tSZWN0IHRlbXAgPSBTa1JlY3Q6Ok1ha2VMVFJCKDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNpemVzW2RlcHRoXS5mWCwgZlNpemVzW2RlcHRoXS5mWSk7CiAgICAgICAgICAgICB0ZW1wLm9mZnNldChvZmZzZXQpOwogCkBAIC0xMzgsOCArMTM4LDggQEAKICAgICAgICAgICAgIHBhdGguYWRkUm91bmRSZWN0KHRlbXAsIFNrSW50VG9TY2FsYXIoMyksIFNrSW50VG9TY2FsYXIoMykpOwogICAgICAgICAgICAgU2tBU1NFUlQocGF0aC5pc0NvbnZleCgpKTsKIAotICAgICAgICAgICAgY2FudmFzLT5jbGlwUGF0aChwYXRoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PSBkZXB0aCA/IFNrUmVnaW9uOjprUmVwbGFjZV9PcCA6IAorICAgICAgICAgICAgY2FudmFzLT5jbGlwUGF0aChwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwID09IGRlcHRoID8gU2tSZWdpb246OmtSZXBsYWNlX09wIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRG9BQSk7CiAKZGlmZiAtLWdpdCBhL2JlbmNoL0JlbmNoR3B1VGltZXJfZ2wuY3BwIGIvYmVuY2gvQmVuY2hHcHVUaW1lcl9nbC5jcHAKaW5kZXggMzI5MDk4My4uNjk5ZjVlNSAxMDA2NDQKLS0tIGEvYmVuY2gvQmVuY2hHcHVUaW1lcl9nbC5jcHAKKysrIGIvYmVuY2gvQmVuY2hHcHVUaW1lcl9nbC5jcHAKQEAgLTE3LDcgKzE3LDcgQEAKICAgICBmU3VwcG9ydGVkID0gR3JHTEdldFZlcnNpb24oZ2xjdHgtPmdsKCkpID4gR1JfR0xfVkVSKDMsMykgfHwKICAgICAgICAgICAgICAgICAgR3JHTEhhc0V4dGVuc2lvbihnbGN0eC0+Z2woKSwgIkdMX0FSQl90aW1lcl9xdWVyeSIpIHx8CiAgICAgICAgICAgICAgICAgIEdyR0xIYXNFeHRlbnNpb24oZ2xjdHgtPmdsKCksICJHTF9FWFRfdGltZXJfcXVlcnkiKTsKLSAgICAKKwogICAgIGlmIChmU3VwcG9ydGVkKSB7CiAgICAgICAgIFNLX0dMKCpnbGN0eCwgR2VuUXVlcmllcygxLCAmZlF1ZXJ5KSk7CiAgICAgfQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBmU3RhcnRlZCA9IGZhbHNlOwogICAgICAgICBmQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKICAgICAgICAgU0tfR0woKmZDb250ZXh0LCBFbmRRdWVyeShHUl9HTF9USU1FX0VMQVBTRUQpKTsKLSAgICAgICAgCisKICAgICAgICAgR3JHTGludCBhdmFpbGFibGUgPSAwOwogICAgICAgICB3aGlsZSAoIWF2YWlsYWJsZSkgewogICAgICAgICAgICAgU0tfR0woKmZDb250ZXh0LCBHZXRRdWVyeU9iamVjdGl2KGZRdWVyeSwKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgU0tfR0woKmZDb250ZXh0LCBHZXRRdWVyeU9iamVjdHVpNjR2KGZRdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX1FVRVJZX1JFU1VMVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b3RhbEdQVVRpbWVFbGFwc2VkKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0b3RhbEdQVVRpbWVFbGFwc2VkIC8gMTAwMDAwMC4wOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYmVuY2gvQmVuY2hTeXNUaW1lcl9tYWNoLmNwcCBiL2JlbmNoL0JlbmNoU3lzVGltZXJfbWFjaC5jcHAKaW5kZXggYzgzN2NhMy4uY2YzZjFjMSAxMDA2NDQKLS0tIGEvYmVuY2gvQmVuY2hTeXNUaW1lcl9tYWNoLmNwcAorKysgYi9iZW5jaC9CZW5jaFN5c1RpbWVyX21hY2guY3BwCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgIHRpbWVfdmFsdWVfdCBub25lID0gezAsIDB9OwogICAgICAgICByZXR1cm4gbm9uZTsKICAgICB9Ci0gICAgCisKICAgICB0YXNrX3RocmVhZF90aW1lc19pbmZvIHRocmVhZF9pbmZvX2RhdGE7CiAgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB0aHJlYWRfaW5mb19jb3VudCA9IFRBU0tfVEhSRUFEX1RJTUVTX0lORk9fQ09VTlQ7CiAgICAgaWYgKEtFUk5fU1VDQ0VTUyAhPSB0YXNrX2luZm8odGFzaywKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgdGltZV92YWx1ZV90IG5vbmUgPSB7MCwgMH07CiAgICAgICAgIHJldHVybiBub25lOwogICAgIH0KLSAgICAKKwogICAgIHRpbWVfdmFsdWVfYWRkKCZ0aHJlYWRfaW5mb19kYXRhLnVzZXJfdGltZSwgJnRocmVhZF9pbmZvX2RhdGEuc3lzdGVtX3RpbWUpCiAgICAgcmV0dXJuIHRocmVhZF9pbmZvX2RhdGEudXNlcl90aW1lOwogfQpAQCAtNjMsNyArNjMsNyBAQAogfQogZG91YmxlIEJlbmNoU3lzVGltZXI6OmVuZFdhbGwoKSB7CiAgICAgdWludDY0X3QgZW5kX3dhbGwgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKLSAgICAKKwogICAgIHVpbnQ2NF90IGVsYXBzZWQgPSBlbmRfd2FsbCAtIHRoaXMtPmZTdGFydFdhbGw7CiAgICAgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCBzVGltZWJhc2VJbmZvOwogICAgIGlmIChLRVJOX1NVQ0NFU1MgIT0gbWFjaF90aW1lYmFzZV9pbmZvKCZzVGltZWJhc2VJbmZvKSkgewpkaWZmIC0tZ2l0IGEvYmVuY2gvQmVuY2hTeXNUaW1lcl93aW5kb3dzLmNwcCBiL2JlbmNoL0JlbmNoU3lzVGltZXJfd2luZG93cy5jcHAKaW5kZXggMzYzNWVjNS4uMWM0ZTQwNCAxMDA2NDQKLS0tIGEvYmVuY2gvQmVuY2hTeXNUaW1lcl93aW5kb3dzLmNwcAorKysgYi9iZW5jaC9CZW5jaFN5c1RpbWVyX3dpbmRvd3MuY3BwCkBAIC00OSwxMCArNDksMTAgQEAKICAgICBpZiAoMCA9PSA6OlF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZlbmRfd2FsbCkpIHsKICAgICAgICAgZW5kX3dhbGwuUXVhZFBhcnQgPSAwOwogICAgIH0KLSAgICAKKwogICAgIExBUkdFX0lOVEVHRVIgdGlja3NfZWxhcHNlZDsKICAgICB0aWNrc19lbGFwc2VkLlF1YWRQYXJ0ID0gZW5kX3dhbGwuUXVhZFBhcnQgLSB0aGlzLT5mU3RhcnRXYWxsLlF1YWRQYXJ0OwotICAgIAorCiAgICAgTEFSR0VfSU5URUdFUiBmcmVxdWVuY3k7CiAgICAgaWYgKDAgPT0gOjpRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZmcmVxdWVuY3kpKSB7CiAgICAgICAgIHJldHVybiAwLjBMOwpkaWZmIC0tZ2l0IGEvYmVuY2gvQmVuY2hUaW1lci5oIGIvYmVuY2gvQmVuY2hUaW1lci5oCmluZGV4IGEwMDcwN2MuLjcwNjc1YWQgMTAwNjQ0Ci0tLSBhL2JlbmNoL0JlbmNoVGltZXIuaAorKysgYi9iZW5jaC9CZW5jaFRpbWVyLmgKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBkb3VibGUgZkNwdTsKICAgICBkb3VibGUgZldhbGw7CiAgICAgZG91YmxlIGZHcHU7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQmVuY2hTeXNUaW1lciAqZlN5c1RpbWVyOwogI2lmIFNLX1NVUFBPUlRfR1BVCmRpZmYgLS1naXQgYS9iZW5jaC9CaXRtYXBCZW5jaC5jcHAgYi9iZW5jaC9CaXRtYXBCZW5jaC5jcHAKaW5kZXggNDBhNzMzZC4uNWYwNmY4OCAxMDA2NDQKLS0tIGEvYmVuY2gvQml0bWFwQmVuY2guY3BwCisrKyBiL2JlbmNoL0JpdG1hcEJlbmNoLmNwcApAQCAtMzEsNyArMzEsNyBAQAogICAgIHAuc2V0Q29sb3IoU0tfQ29sb3JSRUQpOwogICAgIGNhbnZhcy5kcmF3Q2lyY2xlKFNrSW50VG9TY2FsYXIodykvMiwgU2tJbnRUb1NjYWxhcihoKS8yLAogICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoU2tNaW4zMih3LCBoKSkqMy84LCBwKTsKLSAgICAKKwogICAgIFNrUmVjdCByOwogICAgIHIuc2V0KDAsIDAsIFNrSW50VG9TY2FsYXIodyksIFNrSW50VG9TY2FsYXIoaCkpOwogICAgIHAuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgaW50IHIgPSBTa0dldFBhY2tlZFIzMihjKTsKICAgICBpbnQgZyA9IFNrR2V0UGFja2VkRzMyKGMpOwogICAgIGludCBiID0gU2tHZXRQYWNrZWRCMzIoYyk7Ci0gICAgCisKICAgICByZXR1cm4gY29udkJ5dGVUbzYocikgKiAzNiArIGNvbnZCeXRlVG82KGcpICogNiArIGNvbnZCeXRlVG82KGIpOwogfQogCkBAIC03NCw3ICs3NCw3IEBACiAgICAgZHN0LT5zZXRDb25maWcoU2tCaXRtYXA6OmtJbmRleDhfQ29uZmlnLCBzcmMud2lkdGgoKSwgc3JjLmhlaWdodCgpKTsKICAgICBkc3QtPmFsbG9jUGl4ZWxzKGN0YWJsZSk7CiAgICAgY3RhYmxlLT51bnJlZigpOwotICAgIAorCiAgICAgU2tBdXRvTG9ja1BpeGVscyBhbHBzKHNyYyk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBhbHBkKCpkc3QpOwogCkBAIC04OCwxMiArODgsMTIgQEAKIH0KIAogLyogIFZhcmlhbnRzIGZvciBiaXRtYXBzCi0gCisKICAgICAtIHNyYyBkZXB0aCAoMzIgdyt3L28gYWxwaGEpLCA1NjUsIDQ0NDQsIGluZGV4LCBhOAogICAgIC0gcGFpbnQgb3B0aW9uczogZmlsdGVyaW5nLCBkaXRoZXIsIGFscGhhCiAgICAgLSBtYXRyaXggb3B0aW9uczogdHJhbnNsYXRlLCBzY2FsZSwgcm90YXRlLCBwZXJzcAogICAgIC0gdGlsaW5nOiBub25lLCByZXBlYXQsIG1pcnJvciwgY2xhbXAKLSAgICAKKwogICovCiAKIGNsYXNzIEJpdG1hcEJlbmNoIDogcHVibGljIFNrQmVuY2htYXJrIHsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIGVudW0geyBOID0gU2tCRU5DSExPT1AoMzAwKSB9OwogcHVibGljOgogICAgIEJpdG1hcEJlbmNoKHZvaWQqIHBhcmFtLCBib29sIGlzT3BhcXVlLCBTa0JpdG1hcDo6Q29uZmlnIGMsCi0gICAgICAgICAgICAgICAgYm9vbCBmb3JjZVVwZGF0ZSA9IGZhbHNlLCBib29sIGJpdG1hcFZvbGF0aWxlID0gZmFsc2UsIAorICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VVcGRhdGUgPSBmYWxzZSwgYm9vbCBiaXRtYXBWb2xhdGlsZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgIGludCB0eCA9IC0xLCBpbnQgdHkgPSAtMSkKICAgICAgICAgOiBJTkhFUklURUQocGFyYW0pLCBmSXNPcGFxdWUoaXNPcGFxdWUpLCBmRm9yY2VVcGRhdGUoZm9yY2VVcGRhdGUpLCBmVGlsZVgodHgpLCBmVGlsZVkodHkpIHsKICAgICAgICAgY29uc3QgaW50IHcgPSAxMjg7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgfQogICAgICAgICBibS5hbGxvY1BpeGVscygpOwogICAgICAgICBibS5lcmFzZUNvbG9yKGlzT3BhcXVlID8gU0tfQ29sb3JCTEFDSyA6IDApOwotICAgICAgICAKKwogICAgICAgICBkcmF3SW50b0JpdG1hcChibSk7CiAKICAgICAgICAgaWYgKFNrQml0bWFwOjprSW5kZXg4X0NvbmZpZyA9PSBjKSB7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgfQogICAgICAgICBmTmFtZS5hcHBlbmRmKCJfJXMlcyIsIGdDb25maWdOYW1lW2ZCaXRtYXAuY29uZmlnKCldLAogICAgICAgICAgICAgICAgICAgICAgIGZJc09wYXF1ZSA/ICIiIDogIl9BIik7Ci0gICAgICAgIGlmIChmRm9yY2VVcGRhdGUpIAorICAgICAgICBpZiAoZkZvcmNlVXBkYXRlKQogICAgICAgICAgICAgZk5hbWUuYXBwZW5kKCJfdXBkYXRlIik7CiAgICAgICAgIGlmIChmQml0bWFwLmlzVm9sYXRpbGUoKSkKICAgICAgICAgICAgIGZOYW1lLmFwcGVuZCgiX3ZvbGF0aWxlIik7CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGZCaXRtYXA7CiAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHgwID0gU2tJbnRUb1NjYWxhcigtYml0bWFwLndpZHRoKCkgLyAyKTsKICAgICAgICAgY29uc3QgU2tTY2FsYXIgeTAgPSBTa0ludFRvU2NhbGFyKC1iaXRtYXAuaGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIFNrU2NhbGFyIHggPSB4MCArIHJhbmQubmV4dFVTY2FsYXIxKCkgKiBkaW0uZlg7CiAgICAgICAgICAgICBTa1NjYWxhciB5ID0geTAgKyByYW5kLm5leHRVU2NhbGFyMSgpICogZGltLmZZOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgZW51bSB7IE4gPSBTa0JFTkNITE9PUCgzMDApIH07CiBwdWJsaWM6CiAgICAgRmlsdGVyQml0bWFwQmVuY2godm9pZCogcGFyYW0sIGJvb2wgaXNPcGFxdWUsIFNrQml0bWFwOjpDb25maWcgYywKLSAgICAgICAgICAgICAgICBib29sIGZvcmNlVXBkYXRlID0gZmFsc2UsIGJvb2wgYml0bWFwVm9sYXRpbGUgPSBmYWxzZSwgCisgICAgICAgICAgICAgICAgYm9vbCBmb3JjZVVwZGF0ZSA9IGZhbHNlLCBib29sIGJpdG1hcFZvbGF0aWxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgaW50IHR4ID0gLTEsIGludCB0eSA9IC0xLCBib29sIGFkZFNjYWxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgYm9vbCBhZGRSb3RhdGUgPSBmYWxzZSwgYm9vbCBhZGRGaWx0ZXIgPSBmYWxzZSkKICAgICAgICAgOiBJTkhFUklURUQocGFyYW0sIGlzT3BhcXVlLCBjLCBmb3JjZVVwZGF0ZSwgYml0bWFwVm9sYXRpbGUsIHR4LCB0eSkKQEAgLTIwMywxMSArMjAzLDExIEBACiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvbkdldE5hbWUoKSB7CiAgICAgICAgIGZGdWxsTmFtZS5zZXQoSU5IRVJJVEVEOjpvbkdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChmU2NhbGUpIAorICAgICAgICBpZiAoZlNjYWxlKQogICAgICAgICAgICAgZkZ1bGxOYW1lLmFwcGVuZCgiX3NjYWxlIik7Ci0gICAgICAgIGlmIChmUm90YXRlKSAKKyAgICAgICAgaWYgKGZSb3RhdGUpCiAgICAgICAgICAgICBmRnVsbE5hbWUuYXBwZW5kKCJfcm90YXRlIik7Ci0gICAgICAgIGlmIChmRmlsdGVyKSAKKyAgICAgICAgaWYgKGZGaWx0ZXIpCiAgICAgICAgICAgICBmRnVsbE5hbWUuYXBwZW5kKCJfZmlsdGVyIik7CiAKICAgICAgICAgcmV0dXJuIGZGdWxsTmFtZS5jX3N0cigpOwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgIGlmIChmU2NhbGUpIHsKICAgICAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHggPSBTa0ludFRvU2NhbGFyKGRpbS5mV2lkdGgpIC8gMjsKICAgICAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHkgPSBTa0ludFRvU2NhbGFyKGRpbS5mSGVpZ2h0KSAvIDI7Ci0gICAgCisKICAgICAgICAgICAgIGNhbnZhcy0+dHJhbnNsYXRlKHgsIHkpOwogICAgICAgICAgICAgLy8ganVzdCBlbm91Z2ggc28gd2UgY2FuJ3QgdGFrZSB0aGUgc3ByaXRlIGNhc2UKICAgICAgICAgICAgIGNhbnZhcy0+c2NhbGUoU0tfU2NhbGFyMSAqIDk5LzEwMCwgU0tfU2NhbGFyMSAqIDk5LzEwMCk7CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICAgICAgaWYgKGZSb3RhdGUpIHsKICAgICAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHggPSBTa0ludFRvU2NhbGFyKGRpbS5mV2lkdGgpIC8gMjsKICAgICAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHkgPSBTa0ludFRvU2NhbGFyKGRpbS5mSGVpZ2h0KSAvIDI7Ci0gICAgCisKICAgICAgICAgICAgIGNhbnZhcy0+dHJhbnNsYXRlKHgsIHkpOwogICAgICAgICAgICAgY2FudmFzLT5yb3RhdGUoU2tJbnRUb1NjYWxhcigzNSkpOwogICAgICAgICAgICAgY2FudmFzLT50cmFuc2xhdGUoLXgsIC15KTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogc3RhdGljIFNrQmVuY2htYXJrKiBGYWN0Nyh2b2lkKiBwKSB7IHJldHVybiBuZXcgQml0bWFwQmVuY2gocCwgdHJ1ZSwgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCB0cnVlLCB0cnVlKTsgfQogc3RhdGljIFNrQmVuY2htYXJrKiBGYWN0OCh2b2lkKiBwKSB7IHJldHVybiBuZXcgQml0bWFwQmVuY2gocCwgdHJ1ZSwgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCB0cnVlLCBmYWxzZSk7IH0KIAotLy8gc2NhbGUgZmlsdGVyIC0+IFMzMl9vcGFxdWVfRDMyX2ZpbHRlcl9EWF97U1NFMixTU1NFM30gYW5kIEZhY3Q5IGlzIGFsc28gZm9yIFMzMl9EMTZfZmlsdGVyX0RYX1NTRTIgCisvLyBzY2FsZSBmaWx0ZXIgLT4gUzMyX29wYXF1ZV9EMzJfZmlsdGVyX0RYX3tTU0UyLFNTU0UzfSBhbmQgRmFjdDkgaXMgYWxzbyBmb3IgUzMyX0QxNl9maWx0ZXJfRFhfU1NFMgogc3RhdGljIFNrQmVuY2htYXJrKiBGYWN0OSh2b2lkKiBwKSB7IHJldHVybiBuZXcgRmlsdGVyQml0bWFwQmVuY2gocCwgZmFsc2UsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZmFsc2UsIGZhbHNlLCAtMSwgLTEsIHRydWUsIGZhbHNlLCB0cnVlKTsgfQogc3RhdGljIFNrQmVuY2htYXJrKiBGYWN0MTAodm9pZCogcCkgeyByZXR1cm4gbmV3IEZpbHRlckJpdG1hcEJlbmNoKHAsIHRydWUsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZmFsc2UsIGZhbHNlLCAtMSwgLTEsIHRydWUsIGZhbHNlLCB0cnVlKTsgfQogc3RhdGljIFNrQmVuY2htYXJrKiBGYWN0MTEodm9pZCogcCkgeyByZXR1cm4gbmV3IEZpbHRlckJpdG1hcEJlbmNoKHAsIHRydWUsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgdHJ1ZSwgdHJ1ZSwgLTEsIC0xLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7IH0KZGlmZiAtLWdpdCBhL2JlbmNoL0JsdXJCZW5jaC5jcHAgYi9iZW5jaC9CbHVyQmVuY2guY3BwCmluZGV4IGRlNzhmZTEuLjM3MWUyNmQgMTAwNjQ0Ci0tLSBhL2JlbmNoL0JsdXJCZW5jaC5jcHAKKysrIGIvYmVuY2gvQmx1ckJlbmNoLmNwcApAQCAtNDAsMTIgKzQwLDEyIEBACiAgICAgICAgICAgICBmTmFtZS5wcmludGYoImJsdXJfJWRfJXMiLCBTa1NjYWxhclJvdW5kKHJhZCksIG5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvbkdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBmTmFtZS5jX3N0cigpOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBvbkRyYXcoU2tDYW52YXMqIGNhbnZhcykgewogICAgICAgICBTa1BhaW50IHBhaW50OwogICAgICAgICB0aGlzLT5zZXR1cFBhaW50KCZwYWludCk7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICBjYW52YXMtPmRyYXdPdmFsKHIsIHBhaW50KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIFNrQmVuY2htYXJrIElOSEVSSVRFRDsKIH07CmRpZmYgLS1naXQgYS9iZW5jaC9EYXNoQmVuY2guY3BwIGIvYmVuY2gvRGFzaEJlbmNoLmNwcAppbmRleCAyMTU1ODE2Li5hNDdhYTcxIDEwMDY0NAotLS0gYS9iZW5jaC9EYXNoQmVuY2guY3BwCisrKyBiL2JlbmNoL0Rhc2hCZW5jaC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgZldpZHRoID0gd2lkdGg7CiAgICAgICAgIGZOYW1lLnByaW50ZigiZGFzaF8lZF8lcyIsIHdpZHRoLCBkb0NsaXAgPyAiY2xpcHBlZCIgOiAibm9jbGlwIik7CiAgICAgICAgIGZEb0NsaXAgPSBkb0NsaXA7Ci0gICAgICAgIAorCiAgICAgICAgIGZQdHNbMF0uc2V0KFNrSW50VG9TY2FsYXIoMTApLCBTa0ludFRvU2NhbGFyKDEwKSk7CiAgICAgICAgIGZQdHNbMV0uc2V0KFNrSW50VG9TY2FsYXIoNjAwKSwgU2tJbnRUb1NjYWxhcigxMCkpOwogICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIDogSU5IRVJJVEVEKHBhcmFtLCBpbnRlcnZhbHMsIGNvdW50LCB3aWR0aCkgewogICAgICAgICBmTmFtZS5hcHBlbmQoIl9yZWN0Iik7CiAgICAgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdGgoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgU2tQYXRoJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBpbnQgTikgU0tfT1ZFUlJJREUgewpAQCAtMTE5LDE0ICsxMTksMTQgQEAKICAgICAgICAgICAgIHJlY3QuZlRvcCA9IHB0c1swXS5mWSAtIHBhaW50LmdldFN0cm9rZVdpZHRoKCkgLyAyOwogICAgICAgICAgICAgcmVjdC5mUmlnaHQgPSByZWN0LmZMZWZ0ICsgU2tJbnRUb1NjYWxhcihmV2lkdGgpOwogICAgICAgICAgICAgcmVjdC5mQm90dG9tID0gcmVjdC5mVG9wICsgcGFpbnQuZ2V0U3Ryb2tlV2lkdGgoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTa1BhaW50IHAocGFpbnQpOwogICAgICAgICAgICAgcC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CiAgICAgICAgICAgICBwLnNldFBhdGhFZmZlY3QoTlVMTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGNvdW50ID0gU2tTY2FsYXJSb3VuZFRvSW50KChwdHNbMV0uZlggLSBwdHNbMF0uZlgpIC8gKDIqZldpZHRoKSk7CiAgICAgICAgICAgICBTa1NjYWxhciBkeCA9IFNrSW50VG9TY2FsYXIoMiAqIGZXaWR0aCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOKjEwOyArK2kpIHsKICAgICAgICAgICAgICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgKytqKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIERhc2hCZW5jaCBJTkhFUklURUQ7CiB9OwpAQCAtMTQ0LDcgKzE0NCw3IEBACiBzdGF0aWMgdm9pZCBtYWtlX3VuaXRfc3RhcihTa1BhdGgqIHBhdGgsIGludCBuKSB7CiAgICAgU2tTY2FsYXIgcmFkID0gLVNLX1NjYWxhclBJIC8gMjsKICAgICBjb25zdCBTa1NjYWxhciBkcmFkID0gKG4gPj4gMSkgKiBTS19TY2FsYXJQSSAqIDIgLyBuOwotICAgIAorCiAgICAgcGF0aC0+bW92ZVRvKDAsIC1TS19TY2FsYXIxKTsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgICByYWQgKz0gZHJhZDsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgIE1ha2VEYXNoQmVuY2godm9pZCogcGFyYW0sIHZvaWQgKCpwcm9jKShTa1BhdGgqKSwgY29uc3QgY2hhciBuYW1lW10pIDogSU5IRVJJVEVEKHBhcmFtKSB7CiAgICAgICAgIGZOYW1lLnByaW50ZigibWFrZWRhc2hfJXMiLCBuYW1lKTsKICAgICAgICAgcHJvYygmZlBhdGgpOwotICAgICAgICAKKwogICAgICAgICBTa1NjYWxhciB2YWxzW10gPSB7IFNrSW50VG9TY2FsYXIoNCksIFNrSW50VG9TY2FsYXIoNCkgfTsKICAgICAgICAgZlBFLnJlc2V0KG5ldyBTa0Rhc2hQYXRoRWZmZWN0KHZhbHMsIDIsIDApKTsKICAgICB9CkBAIC0yMDAsMTcgKzIwMCwxNyBAQAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogb25HZXROYW1lKCkgU0tfT1ZFUlJJREUgewogICAgICAgICByZXR1cm4gZk5hbWUuY19zdHIoKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgb25EcmF3KFNrQ2FudmFzKiBjYW52YXMpIFNLX09WRVJSSURFIHsKICAgICAgICAgU2tQYXRoIGRzdDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKICAgICAgICAgICAgIFNrU3Ryb2tlUmVjIHJlYyhTa1N0cm9rZVJlYzo6a0hhaXJsaW5lX0luaXRTdHlsZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZlBFLT5maWx0ZXJQYXRoKCZkc3QsIGZQYXRoLCAmcmVjKTsKICAgICAgICAgICAgIGRzdC5yZXdpbmQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIFNrQmVuY2htYXJrIElOSEVSSVRFRDsKIH07CmRpZmYgLS1naXQgYS9iZW5jaC9EZWNvZGVCZW5jaC5jcHAgYi9iZW5jaC9EZWNvZGVCZW5jaC5jcHAKaW5kZXggNjc2MTY5MC4uYzg1YjcxNSAxMDA2NDQKLS0tIGEvYmVuY2gvRGVjb2RlQmVuY2guY3BwCisrKyBiL2JlbmNoL0RlY29kZUJlbmNoLmNwcApAQCAtMjMsNyArMjMsNyBAQAogICAgIERlY29kZUJlbmNoKHZvaWQqIHBhcmFtLCBTa0JpdG1hcDo6Q29uZmlnIGMpIDogU2tCZW5jaG1hcmsocGFyYW0pIHsKICAgICAgICAgZkZpbGVuYW1lID0gdGhpcy0+ZmluZERlZmluZSgiZGVjb2RlLWZpbGVuYW1lIik7CiAgICAgICAgIGZQcmVmQ29uZmlnID0gYzsKLSAgICAgICAgCisKICAgICAgICAgY29uc3QgY2hhciogZm5hbWUgPSBOVUxMOwogICAgICAgICBpZiAoZkZpbGVuYW1lKSB7CiAgICAgICAgICAgICBmbmFtZSA9IHN0cnJjaHIoZkZpbGVuYW1lLCAnLycpOwpkaWZmIC0tZ2l0IGEvYmVuY2gvRGVmZXJyZWRDYW52YXNCZW5jaC5jcHAgYi9iZW5jaC9EZWZlcnJlZENhbnZhc0JlbmNoLmNwcAppbmRleCA5OWMwN2JmLi4xNTkwMmI5IDEwMDY0NAotLS0gYS9iZW5jaC9EZWZlcnJlZENhbnZhc0JlbmNoLmNwcAorKysgYi9iZW5jaC9EZWZlcnJlZENhbnZhc0JlbmNoLmNwcApAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICBjYW52YXMuY2xlYXIoMHgwKTsKICAgICAgICAgY2FudmFzLnNldE5vdGlmaWNhdGlvbkNsaWVudChOVUxMKTsKICAgICB9Ci0gICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIERlZmVycmVkQ2FudmFzQmVuY2ggSU5IRVJJVEVEOwogICAgIFNpbXBsZU5vdGlmaWNhdGlvbkNsaWVudCBmTm90aWZpY2F0aW9uQ2xpZW50OwpkaWZmIC0tZ2l0IGEvYmVuY2gvR3JNZW1vcnlQb29sQmVuY2guY3BwIGIvYmVuY2gvR3JNZW1vcnlQb29sQmVuY2guY3BwCmluZGV4IDk4ZmQ2ZTUuLjg2MWE0M2UgMTAwNjQ0Ci0tLSBhL2JlbmNoL0dyTWVtb3J5UG9vbEJlbmNoLmNwcAorKysgYi9iZW5jaC9Hck1lbW9yeVBvb2xCZW5jaC5jcHAKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICBzID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNrRml4ZWQgZGVsID0gci5uZXh0U0ZpeGVkMSgpOwotICAgICAgICAgICAgaWYgKGNvdW50ICYmIAorICAgICAgICAgICAgaWYgKGNvdW50ICYmCiAgICAgICAgICAgICAgICAgKGtNYXhPYmplY3RzID09IGNvdW50IHx8IGRlbCA8IGRlbFRocmVzaCkpIHsKICAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0c1tjb3VudC0xXTsKICAgICAgICAgICAgICAgICAtLWNvdW50OwpkaWZmIC0tZ2l0IGEvYmVuY2gvR3JhZGllbnRCZW5jaC5jcHAgYi9iZW5jaC9HcmFkaWVudEJlbmNoLmNwcAppbmRleCBhYzViYmM3Li5kN2NlNzRkIDEwMDY0NAotLS0gYS9iZW5jaC9HcmFkaWVudEJlbmNoLmNwcAorKysgYi9iZW5jaC9HcmFkaWVudEJlbmNoLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICB7IDAsIDAgfSwKICAgICAgICAgICAgIHsgU2tJbnRUb1NjYWxhcihXKSwgU2tJbnRUb1NjYWxhcihIKSB9CiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgICAgIGZDb3VudCA9IFNrQkVOQ0hMT09QKE4gKiBnR3JhZHNbZ3JhZFR5cGVdLmZSZXBlYXQpOwogICAgICAgICBmU2hhZGVyID0gZ0dyYWRzW2dyYWRUeXBlXS5mTWFrZXIocHRzLCBnR3JhZERhdGFbMF0sIHRtLCBOVUxMLCBzY2FsZSk7CiAgICAgICAgIGZHZW9tVHlwZSA9IGdlb21UeXBlOwpAQCAtMjIzLDE2ICsyMjMsMTYgQEAKIGNsYXNzIEdyYWRpZW50MkJlbmNoIDogcHVibGljIFNrQmVuY2htYXJrIHsKIHB1YmxpYzoKICAgICBHcmFkaWVudDJCZW5jaCh2b2lkKiBwYXJhbSkgOiBJTkhFUklURUQocGFyYW0pIHt9Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9uR2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuICJncmFkaWVudF9jcmVhdGUiOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBvbkRyYXcoU2tDYW52YXMqIGNhbnZhcykgewogICAgICAgICBTa1BhaW50IHBhaW50OwogICAgICAgICB0aGlzLT5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNvbnN0IFNrUmVjdCByID0geyAwLCAwLCBTa0ludFRvU2NhbGFyKDQpLCBTa0ludFRvU2NhbGFyKDQpIH07CiAgICAgICAgIGNvbnN0IFNrUG9pbnQgcHRzW10gPSB7CiAgICAgICAgICAgICB7IDAsIDAgfSwKQEAgLTI1Miw3ICsyNTIsNyBAQAogICAgICAgICAgICAgY2FudmFzLT5kcmF3UmVjdChyLCBwYWludCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBTa0JlbmNobWFyayBJTkhFUklURUQ7CiB9OwpkaWZmIC0tZ2l0IGEvYmVuY2gvSW50ZXJwQmVuY2guY3BwIGIvYmVuY2gvSW50ZXJwQmVuY2guY3BwCmluZGV4IDg1ZmFkYTMuLmY4ZjQ2M2IgMTAwNjQ0Ci0tLSBhL2JlbmNoL0ludGVycEJlbmNoLmNwcAorKysgYi9iZW5jaC9JbnRlcnBCZW5jaC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAKIGNsYXNzIEZpeGVkMTZEMTZJbnRlcnAgOiBwdWJsaWMgSW50ZXJwQmVuY2ggewogcHVibGljOgogICAgIEZpeGVkMTZEMTZJbnRlcnAodm9pZCogcGFyYW0pIDogSU5IRVJJVEVEKHBhcmFtLCAiMTYuMTYiKSB7fQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGludDE2X3QgZHN0W10sIGZsb2F0IGZ4LCBmbG9hdCBkeCwgaW50IGNvdW50KSBTS19PVkVSUklERSB7CiAgICAgICAgIFNrRml4ZWQgY3VyciA9IFNrRmxvYXRUb0ZpeGVkKGZ4KTsKQEAgLTY0LDI3ICs2NCwyNyBAQAogY2xhc3MgRml4ZWQzMkQzMkludGVycCA6IHB1YmxpYyBJbnRlcnBCZW5jaCB7CiBwdWJsaWM6CiAgICAgRml4ZWQzMkQzMkludGVycCh2b2lkKiBwYXJhbSkgOiBJTkhFUklURUQocGFyYW0sICIzMi4zMiIpIHt9Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRlc3QoaW50MTZfdCBkc3RbXSwgZmxvYXQgZngsIGZsb2F0IGR4LCBpbnQgY291bnQpIFNLX09WRVJSSURFIHsKICAgICAgICAgaW50NjRfdCBjdXJyID0gKGludDY0X3QpKGZ4ICogNjU1MzYgKiA2NTU1MzYpOwogICAgICAgICBpbnQ2NF90IHN0ZXAgPSAoaW50NjRfdCkoZHggKiA2NTUzNiAqIDY1NTUzNik7CiAgICAgICAgIFNrRml4ZWQgdG1wOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICs9IDQpIHsKLSAgICAgICAgICAgIHRtcCA9IChTa0ZpeGVkKShjdXJyID4+IDE2KTsgCi0gICAgICAgICAgICBkc3RbaSArIDBdID0gVElMRSh0bXAsIGNvdW50KTsgCisgICAgICAgICAgICB0bXAgPSAoU2tGaXhlZCkoY3VyciA+PiAxNik7CisgICAgICAgICAgICBkc3RbaSArIDBdID0gVElMRSh0bXAsIGNvdW50KTsKICAgICAgICAgICAgIGN1cnIgKz0gc3RlcDsKIAotICAgICAgICAgICAgdG1wID0gKFNrRml4ZWQpKGN1cnIgPj4gMTYpOyAKLSAgICAgICAgICAgIGRzdFtpICsgMV0gPSBUSUxFKHRtcCwgY291bnQpOyAKKyAgICAgICAgICAgIHRtcCA9IChTa0ZpeGVkKShjdXJyID4+IDE2KTsKKyAgICAgICAgICAgIGRzdFtpICsgMV0gPSBUSUxFKHRtcCwgY291bnQpOwogICAgICAgICAgICAgY3VyciArPSBzdGVwOwogCi0gICAgICAgICAgICB0bXAgPSAoU2tGaXhlZCkoY3VyciA+PiAxNik7IAotICAgICAgICAgICAgZHN0W2kgKyAyXSA9IFRJTEUodG1wLCBjb3VudCk7IAorICAgICAgICAgICAgdG1wID0gKFNrRml4ZWQpKGN1cnIgPj4gMTYpOworICAgICAgICAgICAgZHN0W2kgKyAyXSA9IFRJTEUodG1wLCBjb3VudCk7CiAgICAgICAgICAgICBjdXJyICs9IHN0ZXA7CiAKLSAgICAgICAgICAgIHRtcCA9IChTa0ZpeGVkKShjdXJyID4+IDE2KTsgCi0gICAgICAgICAgICBkc3RbaSArIDNdID0gVElMRSh0bXAsIGNvdW50KTsgCisgICAgICAgICAgICB0bXAgPSAoU2tGaXhlZCkoY3VyciA+PiAxNik7CisgICAgICAgICAgICBkc3RbaSArIDNdID0gVElMRSh0bXAsIGNvdW50KTsKICAgICAgICAgICAgIGN1cnIgKz0gc3RlcDsKICAgICAgICAgfQogICAgIH0KQEAgLTk1LDcgKzk1LDcgQEAKIGNsYXNzIEZpeGVkMTZENDhJbnRlcnAgOiBwdWJsaWMgSW50ZXJwQmVuY2ggewogcHVibGljOgogICAgIEZpeGVkMTZENDhJbnRlcnAodm9pZCogcGFyYW0pIDogSU5IRVJJVEVEKHBhcmFtLCAiMTYuNDgiKSB7fQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGludDE2X3QgZHN0W10sIGZsb2F0IGZ4LCBmbG9hdCBkeCwgaW50IGNvdW50KSBTS19PVkVSUklERSB7CiAgICAgICAgIGludDY0X3QgY3VyciA9IChpbnQ2NF90KShmeCAqIDY1NTM2ICogNjU1NTM2ICogNjU1MzYpOwpAQCAtMTE1LDcgKzExNSw3IEBACiBjbGFzcyBGbG9hdEludGVycCA6IHB1YmxpYyBJbnRlcnBCZW5jaCB7CiBwdWJsaWM6CiAgICAgRmxvYXRJbnRlcnAodm9pZCogcGFyYW0pIDogSU5IRVJJVEVEKHBhcmFtLCAiZmxvYXQiKSB7fQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGludDE2X3QgZHN0W10sIGZsb2F0IGZ4LCBmbG9hdCBkeCwgaW50IGNvdW50KSBTS19PVkVSUklERSB7CiAgICAgICAgIFNrRml4ZWQgdG1wOwpAQCAtMTMzLDcgKzEzMyw3IEBACiBjbGFzcyBEb3VibGVJbnRlcnAgOiBwdWJsaWMgSW50ZXJwQmVuY2ggewogcHVibGljOgogICAgIERvdWJsZUludGVycCh2b2lkKiBwYXJhbSkgOiBJTkhFUklURUQocGFyYW0sICJkb3VibGUiKSB7fQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGludDE2X3QgZHN0W10sIGZsb2F0IGZ4LCBmbG9hdCBkeCwgaW50IGNvdW50KSBTS19PVkVSUklERSB7CiAgICAgICAgIGRvdWJsZSBmZnggPSBmeDsKZGlmZiAtLWdpdCBhL2JlbmNoL01hdGhCZW5jaC5jcHAgYi9iZW5jaC9NYXRoQmVuY2guY3BwCmluZGV4IDIxYzExM2MuLjQxNDAzNmIgMTAwNjQ0Ci0tLSBhL2JlbmNoL01hdGhCZW5jaC5jcHAKKysrIGIvYmVuY2gvTWF0aEJlbmNoLmNwcApAQCAtMzIsOCArMzIsOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGZsb2F0KiBTS19SRVNUUklDVCBkc3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIFNLX1JFU1RSSUNUIHNyYywgCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGZsb2F0KiBTS19SRVNUUklDVCBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50KSA9IDA7CiAKIHByb3RlY3RlZDoKQEAgLTU5LDExICs1OSwxMSBAQAogICAgIE1hdGhCZW5jaFUzMih2b2lkKiBwYXJhbSwgY29uc3QgY2hhciBuYW1lW10pIDogSU5IRVJJVEVEKHBhcmFtLCBuYW1lKSB7fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1JVGVzdCh1aW50MzJfdCogU0tfUkVTVFJJQ1QgZHN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBTS19SRVNUUklDVCBzcmMsIAorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtSVRlc3QodWludDMyX3QqIFNLX1JFU1RSSUNUIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBTS19SRVNUUklDVCBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRlc3QoZmxvYXQqIFNLX1JFU1RSSUNUIGRzdCwgCisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRlc3QoZmxvYXQqIFNLX1JFU1RSSUNUIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBTS19SRVNUUklDVCBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpIFNLX09WRVJSSURFIHsKICAgICAgICAgdWludDMyX3QqIGQgPSBTa1RDYXN0PHVpbnQzMl90Kj4oZHN0KTsKQEAgLTgwLDggKzgwLDggQEAKIHB1YmxpYzoKICAgICBOb09wTWF0aEJlbmNoKHZvaWQqIHBhcmFtKSA6IElOSEVSSVRFRChwYXJhbSwgIm5vT3AiKSB7fQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGVzdChmbG9hdCogU0tfUkVTVFJJQ1QgZHN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBTS19SRVNUUklDVCBzcmMsIAorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGVzdChmbG9hdCogU0tfUkVTVFJJQ1QgZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIFNLX1JFU1RSSUNUIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIGRzdFtpXSA9IHNyY1tpXSArIDE7CkBAIC05NSw4ICs5NSw4IEBACiBwdWJsaWM6CiAgICAgU2xvd0lTcXJ0TWF0aEJlbmNoKHZvaWQqIHBhcmFtKSA6IElOSEVSSVRFRChwYXJhbSwgInNsb3dJc3FydCIpIHt9CiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGZsb2F0KiBTS19SRVNUUklDVCBkc3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIFNLX1JFU1RSSUNUIHNyYywgCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UZXN0KGZsb2F0KiBTS19SRVNUUklDVCBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgZHN0W2ldID0gMS4wZiAvIHNrX2Zsb2F0X3NxcnQoc3JjW2ldKTsKQEAgLTEyMCw4ICsxMjAsOCBAQAogcHVibGljOgogICAgIEZhc3RJU3FydE1hdGhCZW5jaCh2b2lkKiBwYXJhbSkgOiBJTkhFUklURUQocGFyYW0sICJmYXN0SXNxcnQiKSB7fQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGVzdChmbG9hdCogU0tfUkVTVFJJQ1QgZHN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBTS19SRVNUUklDVCBzcmMsIAorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGVzdChmbG9hdCogU0tfUkVTVFJJQ1QgZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIFNLX1JFU1RSSUNUIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIGRzdFtpXSA9IFNrRmFzdEludlNxcnQoc3JjW2ldKTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgIC8vIHggKiAwIHdpbGwgYmUgTmFOIGlmZiB4IGlzIGluZmluaXR5IG9yIE5hTi4KICAgICAvLyBhICsgYiB3aWxsIGJlIE5hTiBpZmYgZWl0aGVyIGEgb3IgYiBpcyBOYU4uCiAgICAgZmxvYXQgdmFsdWUgPSByLmZMZWZ0ICogMCArIHIuZlRvcCAqIDAgKyByLmZSaWdodCAqIDAgKyByLmZCb3R0b20gKiAwOwotICAgIAorCiAgICAgLy8gdmFsdWUgaXMgZWl0aGVyIE5hTiBvciBpdCBpcyBmaW5pdGUgKHplcm8pLgogICAgIC8vIHZhbHVlPT12YWx1ZSB3aWxsIGJlIHRydWUgaWZmIHZhbHVlIGlzIG5vdCBOYU4KICAgICByZXR1cm4gdmFsdWUgPT0gdmFsdWU7CkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU2tQYWludCBwYWludDsKICAgICAgICAgaWYgKHBhaW50LmdldEFscGhhKCkgPT0gMCkgewogICAgICAgICAgICAgU2tEZWJ1Z2YoIiVkXG4iLCBjb3VudGVyKTsKQEAgLTMwMSw3ICszMDEsNyBAQAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogb25HZXROYW1lKCkgewogICAgICAgICByZXR1cm4gZk5hbWU7CiAgICAgfQotICAgICAgICAKKwogcHJpdmF0ZToKICAgICBJc0Zpbml0ZVByb2MgICAgZlByb2M7CiAgICAgY29uc3QgY2hhciogICAgIGZOYW1lOwpAQCAtMzE3LDIxICszMTcsMjEgQEAKICAgICBmbG9hdCBmRGF0YVtBUlJBWV07CiAgICAgYm9vbCBmRmFzdDsKIHB1YmxpYzoKLSAgICAKKwogICAgIEZsb29yQmVuY2godm9pZCogcGFyYW0sIGJvb2wgZmFzdCkgOiBJTkhFUklURUQocGFyYW0pLCBmRmFzdChmYXN0KSB7CiAgICAgICAgIFNrUmFuZG9tIHJhbmQ7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVk7ICsraSkgewogICAgICAgICAgICAgZkRhdGFbaV0gPSByYW5kLm5leHRTU2NhbGFyMSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmYXN0KSB7CiAgICAgICAgICAgICBmTmFtZSA9ICJmbG9vcl9mYXN0IjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZOYW1lID0gImZsb29yX3N0ZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhmbG9hdCkge30KIAogcHJvdGVjdGVkOgpAQCAtMzM5LDcgKzMzOSw3IEBACiAgICAgICAgIFNrUmFuZG9tIHJhbmQ7CiAgICAgICAgIGZsb2F0IGFjY3VtID0gMDsKICAgICAgICAgY29uc3QgZmxvYXQqIGRhdGEgPSBmRGF0YTsKLSAgICAKKwogICAgICAgICBpZiAoZkZhc3QpIHsKICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTE9PUDsgKytqKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWTsgKytpKSB7CkBAIC0zNTYsMTQgKzM1NiwxNCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvbkdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBmTmFtZTsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogICAgIGZOYW1lOwotICAgIAorCiAgICAgdHlwZWRlZiBTa0JlbmNobWFyayBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9iZW5jaC9NYXRyaXhCZW5jaC5jcHAgYi9iZW5jaC9NYXRyaXhCZW5jaC5jcHAKaW5kZXggYjgyZDdmZS4uZDhlMjEzNyAxMDA2NDQKLS0tIGEvYmVuY2gvTWF0cml4QmVuY2guY3BwCisrKyBiL2JlbmNoL01hdHJpeEJlbmNoLmNwcApAQCAtMzQ0LDcgKzM0NCw3IEBACiAKIGNsYXNzIEludmVydE1hcFJlY3RNYXRyaXhCZW5jaCA6IHB1YmxpYyBNYXRyaXhCZW5jaCB7CiBwdWJsaWM6Ci0gICAgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoKHZvaWQqIHBhcmFtLCBjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmxhZ3MpIAorICAgIEludmVydE1hcFJlY3RNYXRyaXhCZW5jaCh2b2lkKiBwYXJhbSwgY29uc3QgY2hhciogbmFtZSwgaW50IGZsYWdzKQogICAgICAgICA6IElOSEVSSVRFRChwYXJhbSwgbmFtZSkKICAgICAgICAgLCBmRmxhZ3MoZmxhZ3MpIHsKICAgICAgICAgZk1hdHJpeC5yZXNldCgpOwpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICAgICAgICAgICBmTWF0cml4LnNldFBlcnNwWChmTWF0cml4LmdldFBlcnNwWCgpKTsKICAgICAgICAgfQogICAgICAgICBTa01hdHJpeCBpbnY7Ci0gICAgICAgIGJvb2wgaW52ZXJ0aWJsZSA9IAorICAgICAgICBib29sIGludmVydGlibGUgPQogICAgICAgICBmTWF0cml4LmludmVydCgmaW52KTsKICAgICAgICAgU2tBU1NFUlQoaW52ZXJ0aWJsZSk7CiAgICAgICAgIFNrUmVjdCB0cmFuc2Zvcm1lZFJlY3Q7CkBAIC00MDYsMzcgKzQwNiwzNyBAQAogc3RhdGljIFNrQmVuY2htYXJrKiBNMyh2b2lkKiBwKSB7IHJldHVybiBuZXcgRmxvYXREb3VibGVDb25jYXRNYXRyaXhCZW5jaChwKTsgfQogc3RhdGljIFNrQmVuY2htYXJrKiBNNCh2b2lkKiBwKSB7IHJldHVybiBuZXcgRG91YmxlQ29uY2F0TWF0cml4QmVuY2gocCk7IH0KIHN0YXRpYyBTa0JlbmNobWFyayogTTUodm9pZCogcCkgeyByZXR1cm4gbmV3IEdldFR5cGVNYXRyaXhCZW5jaChwKTsgfQotc3RhdGljIFNrQmVuY2htYXJrKiBNNih2b2lkKiBwKSB7IAotICAgIHJldHVybiBuZXcgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoKHAsIAorc3RhdGljIFNrQmVuY2htYXJrKiBNNih2b2lkKiBwKSB7CisgICAgcmV0dXJuIG5ldyBJbnZlcnRNYXBSZWN0TWF0cml4QmVuY2gocCwKICAgICAgICAgImludmVydF9tYXByZWN0X2lkZW50aXR5IiwgMCk7CiB9Ci1zdGF0aWMgU2tCZW5jaG1hcmsqIE03KHZvaWQqIHApIHsgCi0gICAgcmV0dXJuIG5ldyBJbnZlcnRNYXBSZWN0TWF0cml4QmVuY2gocCwgCi0gICAgICAgICJpbnZlcnRfbWFwcmVjdF9yZWN0c3RheXNyZWN0IiwgCitzdGF0aWMgU2tCZW5jaG1hcmsqIE03KHZvaWQqIHApIHsKKyAgICByZXR1cm4gbmV3IEludmVydE1hcFJlY3RNYXRyaXhCZW5jaChwLAorICAgICAgICAiaW52ZXJ0X21hcHJlY3RfcmVjdHN0YXlzcmVjdCIsCiAgICAgICAgIEludmVydE1hcFJlY3RNYXRyaXhCZW5jaDo6a1NjYWxlX0ZsYWcgfAogICAgICAgICBJbnZlcnRNYXBSZWN0TWF0cml4QmVuY2g6OmtUcmFuc2xhdGVfRmxhZyk7CiB9CiBzdGF0aWMgU2tCZW5jaG1hcmsqIE04KHZvaWQqIHApIHsKLSAgICByZXR1cm4gbmV3IEludmVydE1hcFJlY3RNYXRyaXhCZW5jaChwLCAKLSAgICAgICAgImludmVydF9tYXByZWN0X25vbnBlcnNwIiwgCisgICAgcmV0dXJuIG5ldyBJbnZlcnRNYXBSZWN0TWF0cml4QmVuY2gocCwKKyAgICAgICAgImludmVydF9tYXByZWN0X25vbnBlcnNwIiwKICAgICAgICAgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoOjprU2NhbGVfRmxhZyB8CiAgICAgICAgIEludmVydE1hcFJlY3RNYXRyaXhCZW5jaDo6a1JvdGF0ZV9GbGFnIHwKICAgICAgICAgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoOjprVHJhbnNsYXRlX0ZsYWcpOwogfQotc3RhdGljIFNrQmVuY2htYXJrKiBNOSh2b2lkKiBwKSB7IAotICAgIHJldHVybiBuZXcgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoKHAsIAotICAgICAgICAiaW52ZXJ0X21hcHJlY3RfcGVyc3AiLCAKK3N0YXRpYyBTa0JlbmNobWFyayogTTkodm9pZCogcCkgeworICAgIHJldHVybiBuZXcgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoKHAsCisgICAgICAgICJpbnZlcnRfbWFwcmVjdF9wZXJzcCIsCiAgICAgICAgIEludmVydE1hcFJlY3RNYXRyaXhCZW5jaDo6a1BlcnNwZWN0aXZlX0ZsYWcpOwogfQogc3RhdGljIFNrQmVuY2htYXJrKiBNMTAodm9pZCogcCkgewotICAgIHJldHVybiBuZXcgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoKHAsIAorICAgIHJldHVybiBuZXcgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoKHAsCiAgICAgICAgICJpbnZlcnRfbWFwcmVjdF90eXBlbWFza19yZWN0c3RheXNyZWN0IiwKICAgICAgICAgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoOjprVW5jYWNoZWRUeXBlTWFza19GbGFnIHwKICAgICAgICAgSW52ZXJ0TWFwUmVjdE1hdHJpeEJlbmNoOjprU2NhbGVfRmxhZyB8CiAgICAgICAgIEludmVydE1hcFJlY3RNYXRyaXhCZW5jaDo6a1RyYW5zbGF0ZV9GbGFnKTsKIH0KIHN0YXRpYyBTa0JlbmNobWFyayogTTExKHZvaWQqIHApIHsKLSAgICByZXR1cm4gbmV3IEludmVydE1hcFJlY3RNYXRyaXhCZW5jaChwLCAKKyAgICByZXR1cm4gbmV3IEludmVydE1hcFJlY3RNYXRyaXhCZW5jaChwLAogICAgICAgICAiaW52ZXJ0X21hcHJlY3RfdHlwZW1hc2tfbm9ucGVyc3AiLAogICAgICAgICBJbnZlcnRNYXBSZWN0TWF0cml4QmVuY2g6OmtVbmNhY2hlZFR5cGVNYXNrX0ZsYWcgfAogICAgICAgICBJbnZlcnRNYXBSZWN0TWF0cml4QmVuY2g6OmtTY2FsZV9GbGFnIHwKZGlmZiAtLWdpdCBhL2JlbmNoL01lbW9yeUJlbmNoLmNwcCBiL2JlbmNoL01lbW9yeUJlbmNoLmNwcAppbmRleCA1ZmRiN2YxLi5kOGQ2MDUyIDEwMDY0NAotLS0gYS9iZW5jaC9NZW1vcnlCZW5jaC5jcHAKKysrIGIvYmVuY2gvTWVtb3J5QmVuY2guY3BwCkBAIC0xNSw3ICsxNSw3IEBACiBjbGFzcyBDaHVua0FsbG9jQmVuY2ggOiBwdWJsaWMgU2tCZW5jaG1hcmsgewogICAgIFNrU3RyaW5nICAgIGZOYW1lOwogICAgIHNpemVfdCAgICAgIGZNaW5TaXplOwotICAgIAorCiAgICAgZW51bSB7CiAgICAgICAgIE4gPSBTa0JFTkNITE9PUCgxMDAwKQogICAgIH07CkBAIC0yNCwxMiArMjQsMTIgQEAKICAgICAgICAgZk1pblNpemUgPSBtaW5TaXplOwogICAgICAgICBmTmFtZS5wcmludGYoImNodW5rYWxsb2NfIiBTS19TSVpFX1RfU1BFQ0lGSUVSLCBtaW5TaXplKTsKICAgICB9Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9uR2V0TmFtZSgpIFNLX09WRVJSSURFIHsKICAgICAgICAgcmV0dXJuIGZOYW1lLmNfc3RyKCk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIG9uRHJhdyhTa0NhbnZhcyogY2FudmFzKSBTS19PVkVSUklERSB7CiAgICAgICAgIHNpemVfdCBpbmMgPSBmTWluU2l6ZSA+PiA0OwogICAgICAgICBTa0FTU0VSVChpbmMgPiAwKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgICAgIGFsbG9jLnJlc2V0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBTa0JlbmNobWFyayBJTkhFUklURUQ7CiB9OwpkaWZmIC0tZ2l0IGEvYmVuY2gvTW9ycGhvbG9neUJlbmNoLmNwcCBiL2JlbmNoL01vcnBob2xvZ3lCZW5jaC5jcHAKaW5kZXggZjQxZTc5Yy4uYjZlOWM5MiAxMDA2NDQKLS0tIGEvYmVuY2gvTW9ycGhvbG9neUJlbmNoLmNwcAorKysgYi9iZW5jaC9Nb3JwaG9sb2d5QmVuY2guY3BwCkBAIC00NywxMiArNDcsMTIgQEAKICAgICAgICAgICAgIGZOYW1lLnByaW50ZigibW9ycGhfJWRfJXMiLCBTa1NjYWxhclJvdW5kKHJhZCksIG5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvbkdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBmTmFtZS5jX3N0cigpOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBvbkRyYXcoU2tDYW52YXMqIGNhbnZhcykgewogICAgICAgICBTa1BhaW50IHBhaW50OwogICAgICAgICB0aGlzLT5zZXR1cFBhaW50KCZwYWludCk7CkBAIC02OSwxMSArNjksMTEgQEAKICAgICAgICAgICAgICAgICBTa01vcnBob2xvZ3lJbWFnZUZpbHRlciogbWYgPSBOVUxMOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoZlN0eWxlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBrRGlsYXRlX01UOgotICAgICAgICAgICAgICAgICAgICBtZiA9IG5ldyBTa0RpbGF0ZUltYWdlRmlsdGVyKFNrU2NhbGFyRmxvb3JUb0ludChmUmFkaXVzKSwgCisgICAgICAgICAgICAgICAgICAgIG1mID0gbmV3IFNrRGlsYXRlSW1hZ2VGaWx0ZXIoU2tTY2FsYXJGbG9vclRvSW50KGZSYWRpdXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyRmxvb3JUb0ludChmUmFkaXVzKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Uga0Vyb2RlX01UOgotICAgICAgICAgICAgICAgICAgICBtZiA9IG5ldyBTa0Vyb2RlSW1hZ2VGaWx0ZXIoU2tTY2FsYXJGbG9vclRvSW50KGZSYWRpdXMpLCAKKyAgICAgICAgICAgICAgICAgICAgbWYgPSBuZXcgU2tFcm9kZUltYWdlRmlsdGVyKFNrU2NhbGFyRmxvb3JUb0ludChmUmFkaXVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyRmxvb3JUb0ludChmUmFkaXVzKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd092YWwociwgcGFpbnQpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiBwcml2YXRlOgogICAgIHR5cGVkZWYgU2tCZW5jaG1hcmsgSU5IRVJJVEVEOwogfTsKZGlmZiAtLWdpdCBhL2JlbmNoL1BhdGhCZW5jaC5jcHAgYi9iZW5jaC9QYXRoQmVuY2guY3BwCmluZGV4IDYxMDE0ZTguLjJlMDdmNjcgMTAwNjQ0Ci0tLSBhL2JlbmNoL1BhdGhCZW5jaC5jcHAKKysrIGIvYmVuY2gvUGF0aEJlbmNoLmNwcApAQCAtODIsNyArODIsNyBAQAogY2xhc3MgVHJpYW5nbGVQYXRoQmVuY2ggOiBwdWJsaWMgUGF0aEJlbmNoIHsKIHB1YmxpYzoKICAgICBUcmlhbmdsZVBhdGhCZW5jaCh2b2lkKiBwYXJhbSwgRmxhZ3MgZmxhZ3MpIDogSU5IRVJJVEVEKHBhcmFtLCBmbGFncykge30KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmROYW1lKFNrU3RyaW5nKiBuYW1lKSBTS19PVkVSUklERSB7CiAgICAgICAgIG5hbWUtPmFwcGVuZCgidHJpYW5nbGUiKTsKICAgICB9CkBAIC0xMDIsNyArMTAyLDcgQEAKIGNsYXNzIFJlY3RQYXRoQmVuY2ggOiBwdWJsaWMgUGF0aEJlbmNoIHsKIHB1YmxpYzoKICAgICBSZWN0UGF0aEJlbmNoKHZvaWQqIHBhcmFtLCBGbGFncyBmbGFncykgOiBJTkhFUklURUQocGFyYW0sIGZsYWdzKSB7fQotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZE5hbWUoU2tTdHJpbmcqIG5hbWUpIFNLX09WRVJSSURFIHsKICAgICAgICAgbmFtZS0+YXBwZW5kKCJyZWN0Iik7CiAgICAgfQpAQCAtMTE3LDcgKzExNyw3IEBACiBjbGFzcyBPdmFsUGF0aEJlbmNoIDogcHVibGljIFBhdGhCZW5jaCB7CiBwdWJsaWM6CiAgICAgT3ZhbFBhdGhCZW5jaCh2b2lkKiBwYXJhbSwgRmxhZ3MgZmxhZ3MpIDogSU5IRVJJVEVEKHBhcmFtLCBmbGFncykge30KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmROYW1lKFNrU3RyaW5nKiBuYW1lKSBTS19PVkVSUklERSB7CiAgICAgICAgIG5hbWUtPmFwcGVuZCgib3ZhbCIpOwogICAgIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQAogY2xhc3MgU2F3VG9vdGhQYXRoQmVuY2ggOiBwdWJsaWMgUGF0aEJlbmNoIHsKIHB1YmxpYzoKICAgICBTYXdUb290aFBhdGhCZW5jaCh2b2lkKiBwYXJhbSwgRmxhZ3MgZmxhZ3MpIDogSU5IRVJJVEVEKHBhcmFtLCBmbGFncykge30KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmROYW1lKFNrU3RyaW5nKiBuYW1lKSBTS19PVkVSUklERSB7CiAgICAgICAgIG5hbWUtPmFwcGVuZCgic2F3dG9vdGgiKTsKICAgICB9CkBAIC02NTksNyArNjU5LDcgQEAKICAgICAgICAgICAgIHRlbXAuYWRkT3ZhbChyLCBTa1BhdGg6OmtDQ1dfRGlyZWN0aW9uKTsKICAgICAgICAgICAgIHRlbXAuYXJjVG8ociwgMzYwLCAwLCB0cnVlKTsKICAgICAgICAgICAgIHRlbXAuY2xvc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1BhdGgodGVtcCwgcGFpbnQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYmVuY2gvUGF0aEl0ZXJCZW5jaC5jcHAgYi9iZW5jaC9QYXRoSXRlckJlbmNoLmNwcAppbmRleCA4ZTQzMDhlLi4xODlkMWI1IDEwMDY0NAotLS0gYS9iZW5jaC9QYXRoSXRlckJlbmNoLmNwcAorKysgYi9iZW5jaC9QYXRoSXRlckJlbmNoLmNwcApAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgICAgIFNrUGF0aDo6UmF3SXRlciBpdGVyKGZQYXRoKTsKICAgICAgICAgICAgICAgICBTa1BhdGg6OlZlcmIgdmVyYjsKICAgICAgICAgICAgICAgICBTa1BvaW50ICAgICAgcHRzWzRdOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgd2hpbGUgKCh2ZXJiID0gaXRlci5uZXh0KHB0cykpICE9IFNrUGF0aDo6a0RvbmVfVmVyYik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgU2tQYXRoOjpJdGVyIGl0ZXIoZlBhdGgsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBTa1BhdGg6OlZlcmIgdmVyYjsKICAgICAgICAgICAgICAgICBTa1BvaW50ICAgICAgcHRzWzRdOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgd2hpbGUgKCh2ZXJiID0gaXRlci5uZXh0KHB0cykpICE9IFNrUGF0aDo6a0RvbmVfVmVyYik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2JlbmNoL1JlY3RCZW5jaC5jcHAgYi9iZW5jaC9SZWN0QmVuY2guY3BwCmluZGV4IGNlZjJlMjIuLjk5MmI4ZjkgMTAwNjQ0Ci0tLSBhL2JlbmNoL1JlY3RCZW5jaC5jcHAKKysrIGIvYmVuY2gvUmVjdEJlbmNoLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgU2tDYW52YXM6OlBvaW50TW9kZSBmTW9kZTsKICAgICBjb25zdCBjaGFyKiBmTmFtZTsKIAotICAgIEJsaXRNYXNrQmVuY2godm9pZCogcGFyYW0sIFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgCisgICAgQmxpdE1hc2tCZW5jaCh2b2lkKiBwYXJhbSwgU2tDYW52YXM6OlBvaW50TW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgQmxpdE1hc2tCZW5jaDo6a01hc2tUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG5hbWUpIDoKICAgICAgICAgICAgICAgICAgIFJlY3RCZW5jaChwYXJhbSwgMiksIGZNb2RlKG1vZGUpLCBfdHlwZSh0eXBlKSB7CiAgICAgICAgIGZOYW1lID0gbmFtZTsKQEAgLTE3NywxNyArMTc3LDE3IEBACiAgICAgICAgICAgICBwYWludC5zZXRTaGFkZXIocyktPnVucmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplczsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKF90eXBlKSB7CQotICAgICAgICAgICAgICAgIGNhc2Uga01hc2tPcGFxdWU6IAotICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGZDb2xvcnNbaV07IAotICAgICAgICAgICAgICAgICAgICBhbHBoYSA9IDB4RkY7IAorICAgICAgICAgICAgc3dpdGNoIChfdHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Uga01hc2tPcGFxdWU6CisgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gZkNvbG9yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSAweEZGOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIGtNYXNrQmxhY2s6IAorICAgICAgICAgICAgICAgIGNhc2Uga01hc2tCbGFjazoKICAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSAweEZGOwogICAgICAgICAgICAgICAgICAgICBjb2xvciA9IDB4RkYwMDAwMDA7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Uga01hc2tDb2xvcjoKLSAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBmQ29sb3JzW2ldOyAKKyAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBmQ29sb3JzW2ldOwogICAgICAgICAgICAgICAgICAgICBhbHBoYSA9IHJhbmQubmV4dFUoKSAmIDI1NTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBLTWFza1NoYWRlcjoKQEAgLTIwMiw4ICsyMDIsOCBAQAogICAgIH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9uR2V0TmFtZSgpIHsgcmV0dXJuIGZOYW1lOyB9CiBwcml2YXRlOgotCXR5cGVkZWYgUmVjdEJlbmNoIElOSEVSSVRFRDsKLQlrTWFza1R5cGUgX3R5cGU7CisgICAgdHlwZWRlZiBSZWN0QmVuY2ggSU5IRVJJVEVEOworICAgIGtNYXNrVHlwZSBfdHlwZTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvYmVuY2gvUmVnaW9uQmVuY2guY3BwIGIvYmVuY2gvUmVnaW9uQmVuY2guY3BwCmluZGV4IDU1NDFhNWMuLjdiOWUyZDQgMTAwNjQ0Ci0tLSBhL2JlbmNoL1JlZ2lvbkJlbmNoLmNwcAorKysgYi9iZW5jaC9SZWdpb25CZW5jaC5jcHAKQEAgLTc1LDcgKzc1LDcgQEAKICAgICBQcm9jICAgICBmUHJvYzsKICAgICBTa1N0cmluZyBmTmFtZTsKICAgICBpbnQgICAgICBmTG9vcE11bDsKLSAgICAKKwogICAgIGVudW0gewogICAgICAgICBXID0gMTAyNCwKICAgICAgICAgSCA9IDc2OCwKZGlmZiAtLWdpdCBhL2JlbmNoL1JlcGVhdFRpbGVCZW5jaC5jcHAgYi9iZW5jaC9SZXBlYXRUaWxlQmVuY2guY3BwCmluZGV4IDg0NzBiZWQuLmRhMzYyMDUgMTAwNjQ0Ci0tLSBhL2JlbmNoL1JlcGVhdFRpbGVCZW5jaC5jcHAKKysrIGIvYmVuY2gvUmVwZWF0VGlsZUJlbmNoLmNwcApAQCAtMjcsNyArMjcsNyBAQAogICAgIHAuc2V0Q29sb3IoU0tfQ29sb3JSRUQpOwogICAgIGNhbnZhcy5kcmF3Q2lyY2xlKFNrSW50VG9TY2FsYXIodykvMiwgU2tJbnRUb1NjYWxhcihoKS8yLAogICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoU2tNaW4zMih3LCBoKSkqMy84LCBwKTsKLSAgICAKKwogICAgIFNrUmVjdCByOwogICAgIHIuc2V0KDAsIDAsIFNrSW50VG9TY2FsYXIodyksIFNrSW50VG9TY2FsYXIoaCkpOwogICAgIHAuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgaW50IHIgPSBTa0dldFBhY2tlZFIzMihjKTsKICAgICBpbnQgZyA9IFNrR2V0UGFja2VkRzMyKGMpOwogICAgIGludCBiID0gU2tHZXRQYWNrZWRCMzIoYyk7Ci0gICAgCisKICAgICByZXR1cm4gY29udkJ5dGVUbzYocikgKiAzNiArIGNvbnZCeXRlVG82KGcpICogNiArIGNvbnZCeXRlVG82KGIpOwogfQogCkBAIC03MCw3ICs3MCw3IEBACiAgICAgZHN0LT5zZXRDb25maWcoU2tCaXRtYXA6OmtJbmRleDhfQ29uZmlnLCBzcmMud2lkdGgoKSwgc3JjLmhlaWdodCgpKTsKICAgICBkc3QtPmFsbG9jUGl4ZWxzKGN0YWJsZSk7CiAgICAgY3RhYmxlLT51bnJlZigpOwotICAgIAorCiAgICAgU2tBdXRvTG9ja1BpeGVscyBhbHBzKHNyYyk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBhbHBkKCpkc3QpOwogCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgfQogICAgICAgICBibS5hbGxvY1BpeGVscygpOwogICAgICAgICBibS5lcmFzZUNvbG9yKDApOwotICAgICAgICAKKwogICAgICAgICBkcmF3SW50b0JpdG1hcChibSk7CiAKICAgICAgICAgaWYgKFNrQml0bWFwOjprSW5kZXg4X0NvbmZpZyA9PSBjKSB7CmRpZmYgLS1naXQgYS9iZW5jaC9TaGFkZXJNYXNrQmVuY2guY3BwIGIvYmVuY2gvU2hhZGVyTWFza0JlbmNoLmNwcAppbmRleCAwYTY4YjQ0Li5hZDI3ZmNiIDEwMDY0NAotLS0gYS9iZW5jaC9TaGFkZXJNYXNrQmVuY2guY3BwCisrKyBiL2JlbmNoL1NoYWRlck1hc2tCZW5jaC5jcHAKQEAgLTcwLDE0ICs3MCwxNCBAQAogCiAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHgwID0gU2tJbnRUb1NjYWxhcigtMTApOwogICAgICAgICBjb25zdCBTa1NjYWxhciB5MCA9IFNrSW50VG9TY2FsYXIoLTEwKTsKLSAgICAgICAgCisKICAgICAgICAgcGFpbnQuc2V0VGV4dFNpemUoU2tJbnRUb1NjYWxhcigxMikpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgU2tTY2FsYXIgeCA9IHgwICsgcmFuZC5uZXh0VVNjYWxhcjEoKSAqIGRpbS5mWDsKICAgICAgICAgICAgIFNrU2NhbGFyIHkgPSB5MCArIHJhbmQubmV4dFVTY2FsYXIxKCkgKiBkaW0uZlk7CiAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0KGZUZXh0LmNfc3RyKCksIGZUZXh0LnNpemUoKSwgeCwgeSwgcGFpbnQpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHBhaW50LnNldFRleHRTaXplKFNrSW50VG9TY2FsYXIoNDgpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOLzQ7IGkrKykgewogICAgICAgICAgICAgU2tTY2FsYXIgeCA9IHgwICsgcmFuZC5uZXh0VVNjYWxhcjEoKSAqIGRpbS5mWDsKZGlmZiAtLWdpdCBhL2JlbmNoL1NrQmVuY2htYXJrLmggYi9iZW5jaC9Ta0JlbmNobWFyay5oCmluZGV4IDI4MzE0ZWEuLmE3N2NiODMgMTAwNjQ0Ci0tLSBhL2JlbmNoL1NrQmVuY2htYXJrLmgKKysrIGIvYmVuY2gvU2tCZW5jaG1hcmsuaApAQCAtNTUsMTUgKzU1LDE1IEBACiAgICAgdm9pZCBzZXRGb3JjZUFscGhhKGludCBhbHBoYSkgewogICAgICAgICBmRm9yY2VBbHBoYSA9IGFscGhhOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgc2V0Rm9yY2VBQShib29sIGFhKSB7CiAgICAgICAgIGZGb3JjZUFBID0gYWE7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBzZXRGb3JjZUZpbHRlcihib29sIGZpbHRlcikgewogICAgICAgICBmRm9yY2VGaWx0ZXIgPSBmaWx0ZXI7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBzZXREaXRoZXIoU2tUcmlTdGF0ZTo6U3RhdGUgc3RhdGUpIHsKICAgICAgICAgZkRpdGhlciA9IHN0YXRlOwogICAgIH0KZGlmZiAtLWdpdCBhL2JlbmNoL1ZlcnRCZW5jaC5jcHAgYi9iZW5jaC9WZXJ0QmVuY2guY3BwCmluZGV4IDk4ZGY0NDkuLmU1MDUzZDkgMTAwNjQ0Ci0tLSBhL2JlbmNoL1ZlcnRCZW5jaC5jcHAKKysrIGIvYmVuY2gvVmVydEJlbmNoLmNwcApAQCAtMzksNyArMzksNyBAQAogICAgICAgICBpZHhbMF0gPSBuOyBpZHhbMV0gPSBuICsgMTsgaWR4WzJdID0gcmIgKyBuICsgMTsKICAgICAgICAgaWR4WzNdID0gbjsgaWR4WzRdID0gcmIgKyBuICsgMTsgaWR4WzVdID0gbiArIHJiOwogICAgIH0KLSAgICAKKwogcHVibGljOgogICAgIFZlcnRCZW5jaCh2b2lkKiBwYXJhbSkgOiBJTkhFUklURUQocGFyYW0pIHsKICAgICAgICAgY29uc3QgU2tTY2FsYXIgZHggPSBTa0ludFRvU2NhbGFyKFcpIC8gQ09MOwpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgICAgIHB0cy0+c2V0KHh4LCB5eSk7CiAgICAgICAgICAgICAgICAgcHRzICs9IDE7CiAgICAgICAgICAgICAgICAgeHggKz0gZHg7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoeCA8IENPTCAmJiB5IDwgUk9XKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvYWRfMl90cmlzKGlkeCwgeCwgeSwgQ09MICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7CmRpZmYgLS1naXQgYS9iZW5jaC9iZW5jaG1haW4uY3BwIGIvYmVuY2gvYmVuY2htYWluLmNwcAppbmRleCA1ODY1ZWNhLi5kZmQzOWZkIDEwMDY0NAotLS0gYS9iZW5jaC9iZW5jaG1haW4uY3BwCisrKyBiL2JlbmNoL2JlbmNobWFpbi5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICBibTEuY29uZmlnKCkgIT0gYm0yLmNvbmZpZygpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBzaXplX3QgcGl4ZWxCeXRlcyA9IGJtMS53aWR0aCgpICogYm0xLmJ5dGVzUGVyUGl4ZWwoKTsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGJtMS5oZWlnaHQoKTsgeSsrKSB7CiAgICAgICAgIGlmIChtZW1jbXAoYm0xLmdldEFkZHIoMCwgeSksIGJtMi5nZXRBZGRyKDAsIHkpLCBwaXhlbEJ5dGVzKSkgewpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgIGZCZW5jaCA9IEJlbmNoUmVnaXN0cnk6OkhlYWQoKTsKICAgICAgICAgZlBhcmFtID0gcGFyYW07CiAgICAgfQotICAgIAorCiAgICAgU2tCZW5jaG1hcmsqIG5leHQoKSB7CiAgICAgICAgIGlmIChmQmVuY2gpIHsKICAgICAgICAgICAgIEJlbmNoUmVnaXN0cnk6OkZhY3RvcnkgZiA9IGZCZW5jaC0+ZmFjdG9yeSgpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgaWYgKCFibS5jb3B5VG8oJmNvcHksIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmIChibS5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykgewogICAgICAgICAvLyB0dXJuIGFscGhhIGludG8gZ3JheS1zY2FsZQogICAgICAgICBzaXplX3Qgc2l6ZSA9IGNvcHkuZ2V0U2l6ZSgpID4+IDI7CkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgICpwKysgPSBjIHwgKFNLX0EzMl9NQVNLIDw8IFNLX0EzMl9TSElGVCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBTa1N0cmluZyBzdHI7CiAgICAgbWFrZV9maWxlbmFtZShuYW1lLCAmc3RyKTsKICAgICBzdHIuYXBwZW5kZigiXyVzLnBuZyIsIGNvbmZpZyk7CkBAIC0xOTUsMTEgKzE5NSwxMSBAQAogCiBzdGF0aWMgdm9pZCBwZXJmb3JtQ2xpcChTa0NhbnZhcyogY2FudmFzLCBpbnQgdywgaW50IGgpIHsKICAgICBTa1JlY3QgcjsKLSAgICAKKwogICAgIHIuc2V0KFNrSW50VG9TY2FsYXIoMTApLCBTa0ludFRvU2NhbGFyKDEwKSwKICAgICAgICAgICBTa0ludFRvU2NhbGFyKHcqMi8zKSwgU2tJbnRUb1NjYWxhcihoKjIvMykpOwogICAgIGNhbnZhcy0+Y2xpcFJlY3QociwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOwotICAgIAorCiAgICAgci5zZXQoU2tJbnRUb1NjYWxhcih3LzMpLCBTa0ludFRvU2NhbGFyKGgvMyksCiAgICAgICAgICAgU2tJbnRUb1NjYWxhcih3LTEwKSwgU2tJbnRUb1NjYWxhcihoLTEwKSk7CiAgICAgY2FudmFzLT5jbGlwUmVjdChyLCBTa1JlZ2lvbjo6a1hPUl9PcCk7CkBAIC0yMDgsNyArMjA4LDcgQEAKIHN0YXRpYyB2b2lkIHBlcmZvcm1Sb3RhdGUoU2tDYW52YXMqIGNhbnZhcywgaW50IHcsIGludCBoKSB7CiAgICAgY29uc3QgU2tTY2FsYXIgeCA9IFNrSW50VG9TY2FsYXIodykgLyAyOwogICAgIGNvbnN0IFNrU2NhbGFyIHkgPSBTa0ludFRvU2NhbGFyKGgpIC8gMjsKLSAgICAKKwogICAgIGNhbnZhcy0+dHJhbnNsYXRlKHgsIHkpOwogICAgIGNhbnZhcy0+cm90YXRlKFNrSW50VG9TY2FsYXIoMzUpKTsKICAgICBjYW52YXMtPnRyYW5zbGF0ZSgteCwgLXkpOwpAQCAtMjE3LDcgKzIxNyw3IEBACiBzdGF0aWMgdm9pZCBwZXJmb3JtU2NhbGUoU2tDYW52YXMqIGNhbnZhcywgaW50IHcsIGludCBoKSB7CiAgICAgY29uc3QgU2tTY2FsYXIgeCA9IFNrSW50VG9TY2FsYXIodykgLyAyOwogICAgIGNvbnN0IFNrU2NhbGFyIHkgPSBTa0ludFRvU2NhbGFyKGgpIC8gMjsKLSAgICAKKwogICAgIGNhbnZhcy0+dHJhbnNsYXRlKHgsIHkpOwogICAgIC8vIGp1c3QgZW5vdWdoIHNvIHdlIGNhbid0IHRha2UgdGhlIHNwcml0ZSBjYXNlCiAgICAgY2FudmFzLT5zY2FsZShTS19TY2FsYXIxICogOTkvMTAwLCBTS19TY2FsYXIxICogOTkvMTAwKTsKQEAgLTMxNCw3ICszMTQsNyBAQAogICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBOVUxMOwogICAgIFNrQml0bWFwIGJpdG1hcDsKICAgICBiaXRtYXAuc2V0Q29uZmlnKGNvbmZpZywgc2l6ZS5mWCwgc2l6ZS5mWSk7Ci0gICAgCisKICAgICBzd2l0Y2ggKGJhY2tlbmQpIHsKICAgICAgICAgY2FzZSBrUmFzdGVyX0JhY2tlbmQ6CiAgICAgICAgICAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQAogICAgIEJhY2tlbmQgYmFja2VuZCA9IGtSYXN0ZXJfQmFja2VuZDsgIC8vIGZvciB3YXJuaW5nCiAgICAgU2tUREFycmF5PGludD4gY29uZmlnczsKICAgICBib29sIHVzZXJDb25maWcgPSBmYWxzZTsKLSAgICAKKwogICAgIGNoYXIqIGNvbnN0KiBzdG9wID0gYXJndiArIGFyZ2M7CiAgICAgZm9yICgrK2FyZ3Y7IGFyZ3YgPCBzdG9wOyArK2FyZ3YpIHsKICAgICAgICAgaWYgKHN0cmNtcCgqYXJndiwgIi1vIikgPT0gMCkgewpAQCAtNjkyLDcgKzY5Miw3IEBACiAgICAgICAgICAgICBkZWZhdWx0OiBkaXRoZXJOYW1lID0gIjxpbnZhbGlkPiI7IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHN0ci5hcHBlbmRmKCIgZGl0aGVyPSVzIiwgZGl0aGVyTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChoYXNTdHJva2VXaWR0aCkgewogICAgICAgICAgICAgc3RyLmFwcGVuZGYoIiBzdHJva2VXaWR0aD0lZiIsIHN0cm9rZVdpZHRoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTc1Myw3ICs3NTMsNyBAQAogICAgICAgICBpZiAoZGltLmZYIDw9IDAgfHwgZGltLmZZIDw9IDApIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJlbmNoLT5zZXRGb3JjZUFscGhhKGZvcmNlQWxwaGEpOwogICAgICAgICBiZW5jaC0+c2V0Rm9yY2VBQShmb3JjZUFBKTsKICAgICAgICAgYmVuY2gtPnNldEZvcmNlRmlsdGVyKGZvcmNlRmlsdGVyKTsKQEAgLTc2MSwxOSArNzYxLDE5IEBACiAgICAgICAgIGlmIChoYXNTdHJva2VXaWR0aCkgewogICAgICAgICAgICAgYmVuY2gtPnNldFN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBvbmx5IHJ1biBiZW5jaG1hcmtzIGlmIHRoZWlyIG5hbWUgY29udGFpbnMgbWF0Y2hTdHIKICAgICAgICAgaWYgKHNraXBfbmFtZShmTWF0Y2hlcywgYmVuY2gtPmdldE5hbWUoKSkpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHsKICAgICAgICAgICAgIFNrU3RyaW5nIHN0cjsKICAgICAgICAgICAgIHN0ci5wcmludGYoInJ1bm5pbmcgYmVuY2ggWyVkICVkXSAlMjhzIiwgZGltLmZYLCBkaW0uZlksCiAgICAgICAgICAgICAgICAgICAgICAgIGJlbmNoLT5nZXROYW1lKCkpOwogICAgICAgICAgICAgbG9nZ2VyLmxvZ1Byb2dyZXNzKHN0cik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQXV0b1ByZVBvc3REcmF3IGFwcGQoYmVuY2gpOwogCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29uZmlncy5jb3VudCgpOyArK3gpIHsKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL1FUL3FyY19Ta0ljb25zLmNwcCBiL2RlYnVnZ2VyL1FUL3FyY19Ta0ljb25zLmNwcAppbmRleCBiYTNjZjYxLi4yZTg3M2IwIDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9RVC9xcmNfU2tJY29ucy5jcHAKKysrIGIvZGVidWdnZXIvUVQvcXJjX1NrSWNvbnMuY3BwCkBAIC03ODMsNyArNzgzLDcgQEAKICAgMHg5NiwweDFiLDB4YWEsMHgzYywweGIwLDB4ZCwweDk4LDB4NywweGZlLDB4NWEsMHhlNywweDZjLDB4NiwweDY4LDB4MywweDVhLAogICAweDgxLDB4NjUsMHg2MCwweDFhLDB4NzcsMHhmOSwweDM3LDB4ZWEsMHg3ZiwweDVlLDB4N2YsMHgzLDB4NmUsMHhiMiwweGMzLDB4ZjAsCiAgIDB4MWMsMHhhYSwweDc3LDB4M2YsMHgwLDB4MCwweDAsMHgwLDB4NDksMHg0NSwweDRlLDB4NDQsMHhhZSwweDQyLDB4NjAsMHg4MiwKLSAgCisKICAgICAvLyAvdXNyL2xvY2FsL2dvb2dsZS9ob21lL2NodWR5L0ljby9wYXVzZS5wbmcKICAgMHgwLDB4MCwweDQsMHg5ZCwKICAgMHg4OSwKQEAgLTkzMyw3ICs5MzMsNyBAQAogICAweGEwLDB4MTcsMHhiOCwweGM1LDB4MmUsMHhlZSwweDg0LDB4YzksMHg2ZCwweDYyLDB4ZiwweGI2LDB4MjQsMHg3YSwweGIsMHhmMCwKICAgMHhkOCwweDFjLDB4NmMsMHg2LDB4MywweDc2LDB4NzEsMHgyZCwweGJmLDB4NmYsMHhmZiwweDEsMHgxNSwweDEzLDB4YjcsMHg3ZiwKICAgMHg2NywweDI0LDB4ODksMHgzNiwweDAsMHgwLDB4MCwweDAsMHg0OSwweDQ1LDB4NGUsMHg0NCwweGFlLDB4NDIsMHg2MCwweDgyLAotICAKKwogICAgIC8vIC91c3IvbG9jYWwvZ29vZ2xlL2hvbWUvY2h1ZHkvSWNvL3ByZXZpb3VzLnBuZwogICAweDAsMHgwLDB4MywweGFmLAogICAweDg5LApAQCAtOTk2LDcgKzk5Niw3IEBACiAgIDB4MmEsMHgxNSwweGQ2LDB4YzYsMHgyZiwweDcxLDB4NiwweDliLDB4OTUsMHgyNSwweDZiLDB4MjksMHgzNywweDk5LDB4NCwweDM2LAogICAweDYwLDB4ZTEsMHg2ZiwweDJkLDB4MTcsMHg2MCwweDU1LDB4YWIsMHhmYSwweDcsMHg0MiwweGFlLDB4ODcsMHhiOCwweDUwLDB4NzIsCiAgIDB4YzksMHg1MiwweDAsMHgwLDB4MCwweDAsMHg0OSwweDQ1LDB4NGUsMHg0NCwweGFlLDB4NDIsMHg2MCwweDgyLAotICAKKwogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcXRfcmVzb3VyY2VfbmFtZVtdID0gewpAQCAtMTA3Niw3ICsxMDc2LDcgQEAKICAgMHg4LDB4MzcsMHhjZCwweDQ3LAogICAweDAsMHg3MCwKICAgMHgwLDB4NzIsMHgwLDB4NjUsMHgwLDB4NzYsMHgwLDB4NjksMHgwLDB4NmYsMHgwLDB4NzUsMHgwLDB4NzMsMHgwLDB4MmUsMHgwLDB4NzAsMHgwLDB4NmUsMHgwLDB4NjcsCi0gIAorCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxdF9yZXNvdXJjZV9zdHJ1Y3RbXSA9IHsKZGlmZiAtLWdpdCBhL2ZvcnRoL0ZvcnRoLmNwcCBiL2ZvcnRoL0ZvcnRoLmNwcAppbmRleCBiZTM2NmZjLi5iZTI0MGUzIDEwMDY0NAotLS0gYS9mb3J0aC9Gb3J0aC5jcHAKKysrIGIvZm9ydGgvRm9ydGguY3BwCkBAIC0xMDEsMTIgKzEwMSwxMiBAQAogCiAvKgogICAgIHJlYWRpbmcgYW4gaW5pdGlhbCAzMmJpdCB2YWx1ZSBmcm9tIHRoZSBjb2RlIHN0cmVhbToKLSAKKwogICAgIHh4eHh4eHh4IHh4eHh4eHh4IHh4eHh4eHh4IHh4eHh4eDAwCi0gCisKICAgICBUaG9zZSBsYXN0IHR3byBiaXRzIGFyZSBhbHdheXMgMCBmb3IgYSB3b3JkLCBzbyB3ZSBzZXQgdGhvc2UgYml0cyBmb3Igb3RoZXIKICAgICBvcGNvZGVzCi0gCisKICAgICAwMCAtLSBleGVjdXRlIHRoaXMgd29yZAogICAgIDAxIC0tIHB1c2ggKHZhbHVlICYgfjMpIG9uIHRoZSBkYXRhIHN0YWNrCiAgICAgMTAgLS0gcHVzaCB2YWx1ZSA+PiAyIG9uIHRoZSBkYXRhIHN0YWNrIChzaWduIGV4dGVuZGVkKQpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgc3RhdGljIHVuc2lnbmVkIE1ha2VDb2RlKENvZGUgY29kZSkgewogICAgICAgICByZXR1cm4gKGNvZGUgPDwga0NvZGVTaGlmdCkgfCBrQ29kZVNoaWZ0Ml9CaXRzOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYXBwZW5kSW50KGludDMyX3QpOwogICAgIHZvaWQgYXBwZW5kV29yZChGb3J0aFdvcmQqKTsKICAgICB2b2lkIGFwcGVuZElGKCk7CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgdGhpcy0+ZG9uZSgpOwogICAgICAgICByZXR1cm4gZkRhdGEuYmVnaW4oKTsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgdm9pZCBFeGVjKGNvbnN0IGludHB0cl90KiwgRm9ydGhFbmdpbmUqKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL2ZvcnRoL0ZvcnRoVGVzdHMuY3BwIGIvZm9ydGgvRm9ydGhUZXN0cy5jcHAKaW5kZXggN2I5ZGQ1Yi4uMDhhYjdmMyAxMDA2NDQKLS0tIGEvZm9ydGgvRm9ydGhUZXN0cy5jcHAKKysrIGIvZm9ydGgvRm9ydGhUZXN0cy5jcHAKQEAgLTE2LDcgKzE2LDcgQEAKICAgICB2b2lkIHJlcG9ydEZhaWx1cmUoY29uc3QgY2hhciBleHByZXNzaW9uW10sIGNvbnN0IGNoYXIgZmlsZVtdLCBpbnQgbGluZSk7CiAgICAgdm9pZCByZXBvcnRGYWlsdXJlKGNvbnN0IGNoYXIgbXNnW10pOwogfTsKLSAgICAKKwogdHlwZWRlZiB2b2lkICgqRm9ydGhXb3JkVGVzdFByb2MpKEZvcnRoV29yZCosIEZvcnRoRW5naW5lKiwgUmVwb3J0ZXIqKTsKIAogI2RlZmluZSBGT1JUSF9BU1NFUlQocmVwb3J0ZXIsIGV4cHJlc3Npb24pICAgICAgXApAQCAtMzg1LDcgKzM4NSw3IEBACiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGdSZWNzKTsgaSsrKSB7CiAgICAgICAgIEZvcnRoRW5naW5lIGVuZ2luZShOVUxMKTsKLSAgICAgICAgCisKICAgICAgICAgRm9ydGhXb3JkKiB3b3JkID0gZW52LmZpbmRXb3JkKGdSZWNzW2ldLmZOYW1lKTsKICAgICAgICAgaWYgKE5VTEwgPT0gd29yZCkgewogICAgICAgICAgICAgU2tTdHJpbmcgc3RyOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICAgICAgICBnUmVjc1tpXS5mUHJvYyh3b3JkLCAmZW5naW5lLCAmcmVwb3J0ZXIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKDAgPT0gcmVwb3J0ZXIuZkZhaWx1cmVDb3VudCkgewogICAgICAgICBTa0RlYnVnZigiLS0tIHN1Y2Nlc3MhXG4iKTsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZm9ydGgvU2FtcGxlRm9ydGguY3BwIGIvZm9ydGgvU2FtcGxlRm9ydGguY3BwCmluZGV4IGRmNDExMGQuLjhmYTZhNGYgMTAwNjQ0Ci0tLSBhL2ZvcnRoL1NhbXBsZUZvcnRoLmNwcAorKysgYi9mb3J0aC9TYW1wbGVGb3J0aC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAKIGNsYXNzIFNrRm9ydGhDdHhfRlcgOiBwdWJsaWMgRm9ydGhXb3JkIHsKIHB1YmxpYzoKICAgICBTa0ZvcnRoQ3R4X0ZXKCkgOiBmQ3R4KE5VTEwpIHt9Ci0gICAgCisKICAgICB2b2lkIHNldEN0eChTa0ZvcnRoQ3R4KiBjdHgpIHsgZkN0eCA9IGN0eDsgfQotICAgIAorCiAgICAgU2tDYW52YXMqIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuICZmQ3R4LT5mQ2FudmFzOyB9CiAgICAgU2tQYWludCogcGFpbnQoKSBjb25zdCB7IHJldHVybiAmZkN0eC0+ZlBhaW50OyB9CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZXhlYyhGb3J0aEVuZ2luZSogZmUpIHsKICAgICAgICAgcGFpbnQoKS0+c2V0Q29sb3IoZmUtPnBvcCgpKTsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgU2tGb3J0aEN0eF9GVyogTmV3KCkgeyByZXR1cm4gbmV3IHNldENvbG9yX0ZXOyB9CiB9OwogCkBAIC02MCw3ICs2MCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGV4ZWMoRm9ydGhFbmdpbmUqIGZlKSB7CiAgICAgICAgIHBhaW50KCktPnNldFN0eWxlKChTa1BhaW50OjpTdHlsZSlmZS0+cG9wKCkpOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBTa0ZvcnRoQ3R4X0ZXKiBOZXcoKSB7IHJldHVybiBuZXcgc2V0U3R5bGVfRlc7IH0KIH07CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZXhlYyhGb3J0aEVuZ2luZSogZmUpIHsKICAgICAgICAgcGFpbnQoKS0+c2V0U3Ryb2tlV2lkdGgoZmUtPmZwb3AoKSk7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIFNrRm9ydGhDdHhfRlcqIE5ldygpIHsgcmV0dXJuIG5ldyBzZXRTdHJva2VXaWR0aF9GVzsgfQogfTsKIApAQCAtODAsNyArODAsNyBAQAogICAgICAgICBTa1NjYWxhciBkeCA9IGZlLT5mcG9wKCk7CiAgICAgICAgIGNhbnZhcygpLT50cmFuc2xhdGUoZHgsIGR5KTsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgU2tGb3J0aEN0eF9GVyogTmV3KCkgeyByZXR1cm4gbmV3IHRyYW5zbGF0ZV9GVzsgfQogfTsKIApAQCAtODksNyArODksNyBAQAogICAgIHZpcnR1YWwgdm9pZCBleGVjKEZvcnRoRW5naW5lKiBmZSkgewogICAgICAgICBjYW52YXMoKS0+ZHJhd0NvbG9yKGZlLT5wb3AoKSk7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIFNrRm9ydGhDdHhfRlcqIE5ldygpIHsgcmV0dXJuIG5ldyBkcmF3Q29sb3JfRlc7IH0KIH07CiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICByLmZMZWZ0ID0gZmUtPmZwb3AoKTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHIsICpwYWludCgpKTsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgU2tGb3J0aEN0eF9GVyogTmV3KCkgeyByZXR1cm4gbmV3IGRyYXdSZWN0X0ZXOyB9CiB9OwogCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgU2tTY2FsYXIgeCA9IGZlLT5mcG9wKCk7CiAgICAgICAgIGNhbnZhcygpLT5kcmF3Q2lyY2xlKHgsIHksIHJhZGl1cywgKnBhaW50KCkpOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBTa0ZvcnRoQ3R4X0ZXKiBOZXcoKSB7IHJldHVybiBuZXcgZHJhd0NpcmNsZV9GVzsgfQogfTsKIApAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIHgwID0gZmUtPmZwb3AoKTsKICAgICAgICAgY2FudmFzKCktPmRyYXdMaW5lKHgwLCB5MCwgeDEsIHkxLCAqcGFpbnQoKSk7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIFNrRm9ydGhDdHhfRlcqIE5ldygpIHsgcmV0dXJuIG5ldyBkcmF3TGluZV9GVzsgfQogfTsKIApAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgU2tCaXRtYXAgICAgZkJNOwogICAgIFNrRm9ydGhDdHggIGZDb250ZXh0OwogcHVibGljOgotCUZvcnRoVmlldygpIHsKKyAgICBGb3J0aFZpZXcoKSB7CiAgICAgICAgIEZvcnRoX3Rlc3Rfc3Rkd29yZHMoZmFsc2UpOwogCiAgICAgICAgIGxvYWRfd29yZHMoJmZFbnYsICZmQ29udGV4dCk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIH5Gb3J0aFZpZXcoKSB7CiAgICAgfQogCkBAIC0yMDcsMTEgKzIwNywxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0aGlzLT5JTkhFUklURUQ6Om9uUXVlcnkoZXZ0KTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGRyYXdCRyhTa0NhbnZhcyogY2FudmFzKSB7CiAgICAgICAgIGNhbnZhcy0+ZHJhd0NvbG9yKDB4RkZEREREREQpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgdGVzdF9vbkNsaWNrKEZvcnRoRW52KiBlbnYpIHsKICAgICAgICAgRm9ydGhXb3JkKiB3b3JkID0gZW52LT5maW5kV29yZCgidmlldy5vbkNsaWNrIik7CiAgICAgICAgIGlmICh3b3JkKSB7CkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgICAgIFNrRGVidWdmKCItLS0tLS0gdmlldy5vbkNsaWNrIG5vdCBmb3VuZFxuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgb25EcmF3KFNrQ2FudmFzKiBjYW52YXMpIHsKICAgICAgICAgZHJhd0JHKGNhbnZhcyk7CiAgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChmQk0sIDAsIDAsIE5VTEwpOwpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgdmlydHVhbCBTa1ZpZXc6OkNsaWNrKiBvbkZpbmRDbGlja0hhbmRsZXIoU2tTY2FsYXIgeCwgU2tTY2FsYXIgeSkgewogICAgICAgICByZXR1cm4gZk9uQ2xpY2tXb3JkID8gbmV3IENsaWNrKHRoaXMpIDogTlVMTDsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgb25DbGljayhDbGljayogY2xpY2spIHsKICAgICAgICAgaW50cHRyX3QgaWRhdGFbMl0gPSB7CiAgICAgICAgICAgICBmMmlfYml0cyhjbGljay0+ZkN1cnIuZlgpLCBmMmlfYml0cyhjbGljay0+ZkN1cnIuZlkpCmRpZmYgLS1naXQgYS9mb3J0aC9TdGRXb3Jkcy5jcHAgYi9mb3J0aC9TdGRXb3Jkcy5jcHAKaW5kZXggZmU3NTM0Mi4uOGE3ODFmOCAxMDA2NDQKLS0tIGEvZm9ydGgvU3RkV29yZHMuY3BwCisrKyBiL2ZvcnRoL1N0ZFdvcmRzLmNwcApAQCAtNDA4LDcgKzQwOCw3IEBACiAgICAgQUREX0xJVEVSQUxfV09SRCgiMkRVUCIsIGR1cDIpOwogICAgIEFERF9MSVRFUkFMX1dPUkQoIjJPVkVSIiwgb3ZlcjIpOwogICAgIEFERF9MSVRFUkFMX1dPUkQoIjJEUk9QIiwgZHJvcDIpOwotICAgIAorCiAgICAgQUREX0xJVEVSQUxfV09SRCgiKyIsIGFkZCk7CiAgICAgQUREX0xJVEVSQUxfV09SRCgiLSIsIHN1Yik7CiAgICAgQUREX0xJVEVSQUxfV09SRCgiKiIsIG11bCk7CkBAIC00NTEsNyArNDUxLDcgQEAKICAgICBBRERfTElURVJBTF9XT1JEKCIwPiIsIGd0MCk7CiAgICAgQUREX0xJVEVSQUxfV09SRCgiMDw9IiwgbGUwKTsKICAgICBBRERfTElURVJBTF9XT1JEKCIwPj0iLCBnZTApOwotICAgIAorCiAgICAgdGhpcy0+YWRkKCJmPSIsIDIsIG5ldyBmZXFfRm9ydGhXb3JkKTsKICAgICB0aGlzLT5hZGQoImY8PiIsIDMsIG5ldyBmbmVxX0ZvcnRoV29yZCk7CiAgICAgdGhpcy0+YWRkKCJmPCIsIDIsIG5ldyBmbHRfRm9ydGhXb3JkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5pbWF0b3IvU2tBbmltYXRvci5oIGIvaW5jbHVkZS9hbmltYXRvci9Ta0FuaW1hdG9yLmgKaW5kZXggZTZjNTU4My4uOTI0YzU5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hbmltYXRvci9Ta0FuaW1hdG9yLmgKKysrIGIvaW5jbHVkZS9hbmltYXRvci9Ta0FuaW1hdG9yLmgKQEAgLTQyLDE1ICs0MiwxNSBAQAogLyoqIFxjbGFzcyBTa0FuaW1hdG9yCiAKICAgICBUaGUgU2tBbmltYXRvciBjbGFzcyBkZWNvZGVzIGFuIFhNTCBzdHJlYW0gaW50byBhIGRpc3BsYXkgbGlzdC4gVGhlCi0gICAgZGlzcGxheSBsaXN0IGNhbiBiZSBkcmF3biBzdGF0aWNhbGx5IGFzIGEgcGljdHVyZSwgb3IgY2FuIGRyYXduIAorICAgIGRpc3BsYXkgbGlzdCBjYW4gYmUgZHJhd24gc3RhdGljYWxseSBhcyBhIHBpY3R1cmUsIG9yIGNhbiBkcmF3bgogICAgIGRpZmZlcmVudCBlbGVtZW50cyBhdCBkaWZmZXJlbnQgdGltZXMgdG8gZm9ybSBhIG1vdmluZyBhbmltYXRpb24uCiAKICAgICBTa0FuaW1hdG9yIGRvZXMgbm90IHJlYWQgdGhlIHN5c3RlbSB0aW1lIG9uIGl0cyBvd247IGl0IHJlbGllcyBvbiB0aGUKICAgICBjYWxsZXIgdG8gcGFzcyB0aGUgY3VycmVudCB0aW1lLiBUaGUgY2FsbGVyIGNhbiBwYXVzZSwgc3BlZWQgdXAsIG9yCiAgICAgcmV2ZXJzZSB0aGUgYW5pbWF0aW9uIGJ5IHZhcnlpbmcgdGhlIHRpbWUgcGFzc2VkIGluLgogCi0gICAgVGhlIFhNTCBkZXNjcmliaW5nIHRoZSBkaXNwbGF5IGxpc3QgbXVzdCBjb25mb3JtIHRvIHRoZSBzY2hlbWEgCi0gICAgZGVzY3JpYmVkIGJ5IFNrQW5pbWF0ZVNjaGVtYS54c2QuIAorICAgIFRoZSBYTUwgZGVzY3JpYmluZyB0aGUgZGlzcGxheSBsaXN0IG11c3QgY29uZm9ybSB0byB0aGUgc2NoZW1hCisgICAgZGVzY3JpYmVkIGJ5IFNrQW5pbWF0ZVNjaGVtYS54c2QuCiAKICAgICBUaGUgWE1MIG11c3QgY29udGFpbiBhbiA8ZXZlbnQ+IGVsZW1lbnQgdG8gZHJhdy4gVXN1YWxseSwgaXQgY29udGFpbnMKICAgICBhbiA8ZXZlbnQga2luZD0ib25sb2FkIiAvPiBibG9jayB0byBhZGQgc29tZSBkcmF3aW5nIGVsZW1lbnRzIHRvIHRoZQpAQCAtODQsNyArODQsNyBAQAogICAgIFNrQW5pbWF0b3IoKTsKICAgICB2aXJ0dWFsIH5Ta0FuaW1hdG9yKCk7CiAKLSAgICAvKiogQWRkIGEgZHJhd2FibGUgZXh0ZW5zaW9uIHRvIHRoZSBncmFwaGljcyBlbmdpbmUuIEV4cGVyaW1lbnRhbC4gCisgICAgLyoqIEFkZCBhIGRyYXdhYmxlIGV4dGVuc2lvbiB0byB0aGUgZ3JhcGhpY3MgZW5naW5lLiBFeHBlcmltZW50YWwuCiAgICAgICAgIEBwYXJhbSBleHRyYXMgQSBkZXJpdmVkIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBtZXRob2RzIHRoYXQgaWRlbnRpZnkgYW5kIGluc3RhbnRpYXRlIHRoZSBjbGFzcwogICAgICovCiAgICAgdm9pZCBhZGRFeHRyYXMoU2tFeHRyYXMqIGV4dHJhcyk7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgKi8KICAgICBib29sIGFwcGVuZFN0cmVhbShTa1N0cmVhbSogc3RyZWFtKTsKIAotICAgIC8qKiBSZWFkIGluIFhNTCBmcm9tIG1lbW9yeS4gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGNhbiBiZSAKKyAgICAvKiogUmVhZCBpbiBYTUwgZnJvbSBtZW1vcnkuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBjYW4gYmUKICAgICAgICAgcmVhZCB3aXRob3V0IGVycm9yLiBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4KICAgICAgICAgRXJyb3IgZGlhZ25vc3RpY3MgYXJlIHN0b3JlZCBpbiBmRXJyb3JDb2RlIGFuZCBmTGluZU51bWJlci4KICAgICAgICAgQHBhcmFtIGJ1ZmZlciAgVGhlIFhNTCB0ZXh0IGFzIFVURi04IGNoYXJhY3RlcnMuCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAqLwogICAgIGJvb2wgZGVjb2RlTWVtb3J5KGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpOwogCi0gICAgLyoqIFJlYWQgaW4gWE1MIGZyb20gYSBzdHJlYW0uIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBjYW4gYmUgCisgICAgLyoqIFJlYWQgaW4gWE1MIGZyb20gYSBzdHJlYW0uIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBjYW4gYmUKICAgICAgICAgcmVhZCB3aXRob3V0IGVycm9yLiBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4KICAgICAgICAgRXJyb3IgZGlhZ25vc3RpY3MgYXJlIHN0b3JlZCBpbiBmRXJyb3JDb2RlIGFuZCBmTGluZU51bWJlci4KICAgICAgICAgQHBhcmFtIHN0cmVhbSAgVGhlIHN0cmVhbSBjb250YWluZyB0aGUgWE1MIHRleHQgYXMgVVRGLTggY2hhcmFjdGVycy4KQEAgLTExNCwxNCArMTE0LDE0IEBACiAgICAgKi8KICAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyZWFtKFNrU3RyZWFtKiBzdHJlYW0pOwogCi0gICAgLyoqIFBhcnNlIHRoZSBET00gdHJlZSBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBpdCBjYW4gYmUgCisgICAgLyoqIFBhcnNlIHRoZSBET00gdHJlZSBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBpdCBjYW4gYmUKICAgICAgICAgcGFyc2VkIHdpdGhvdXQgZXJyb3IuIFJldHVybnMgZmFsc2UgaWYgYW4gZXJyb3Igd2FzIGVuY291bnRlcmVkLgogICAgICAgICBFcnJvciBkaWFnbm9zdGljcyBhcmUgc3RvcmVkIGluIGZFcnJvckNvZGUgYW5kIGZMaW5lTnVtYmVyLgogICAgICAgICBAcmV0dXJuIHRydWUgaWYgdGhlIERPTSB3YXMgcGFyc2VkIHN1Y2Nlc3NmdWxseS4KICAgICAqLwogICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVET00oY29uc3QgU2tET00mLCBjb25zdCBTa0RPTU5vZGUqKTsKIAotICAgIC8qKiBSZWFkIGluIFhNTCBmcm9tIGEgVVJJLiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgY2FuIGJlIAorICAgIC8qKiBSZWFkIGluIFhNTCBmcm9tIGEgVVJJLiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgY2FuIGJlCiAgICAgICAgIHJlYWQgd2l0aG91dCBlcnJvci4gUmV0dXJucyBmYWxzZSBpZiBhbiBlcnJvciB3YXMgZW5jb3VudGVyZWQuCiAgICAgICAgIEVycm9yIGRpYWdub3N0aWNzIGFyZSBzdG9yZWQgaW4gZkVycm9yQ29kZSBhbmQgZkxpbmVOdW1iZXIuCiAgICAgICAgIEBwYXJhbSB1cmkgVGhlIGNvbXBsZXRlIHVybCBwYXRoIHRvIGJlIHJlYWQgKGVpdGhlciBmdHAsIGh0dHAgb3IgaHR0cHMpLgpAQCAtMTMxLDE0ICsxMzEsMTQgQEAKIAogICAgIC8qKiBQYXNzIGEgY2hhciBldmVudCwgdXN1YWxseSBhIGtleWJvYXJkIHN5bWJvbCwgdG8gdGhlIGFuaW1hdG9yLgogICAgICAgICBUaGlzIHRyaWdnZXJzIGV2ZW50cyBvZiB0aGUgZm9ybSA8ZXZlbnQga2luZD0ia2V5Q2hhciIga2V5PSIuLi4gLz4KLSAgICAgICAgQHBhcmFtIGNoICBUaGUgY2hhcmFjdGVyIHRvIG1hdGNoIGFnYWluc3QgPGV2ZW50PiBlbGVtZW50ICJrZXkiIAorICAgICAgICBAcGFyYW0gY2ggIFRoZSBjaGFyYWN0ZXIgdG8gbWF0Y2ggYWdhaW5zdCA8ZXZlbnQ+IGVsZW1lbnQgImtleSIKICAgICAgICAgICAgIGF0dHJpYnV0ZXMuCiAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIGRpc3BhdGNoZWQgc3VjY2Vzc2Z1bGx5LgogICAgICovCiAgICAgYm9vbCBkb0NoYXJFdmVudChTa1VuaWNoYXIgY2gpOwogCiAgICAgLyoqIEV4cGVyaW1lbnRhbDoKLSAgICAgICAgUGFzcyBhIG1vdXNlIGNsaWNrIGV2ZW50IGFsb25nIHdpdGggdGhlIG1vdXNlIGNvb3JkaW5hdGVzIHRvIAorICAgICAgICBQYXNzIGEgbW91c2UgY2xpY2sgZXZlbnQgYWxvbmcgd2l0aCB0aGUgbW91c2UgY29vcmRpbmF0ZXMgdG8KICAgICAgICAgdGhlIGFuaW1hdG9yLiBUaGlzIHRyaWdnZXJzIGV2ZW50cyBvZiB0aGUgZm9ybSA8ZXZlbnQga2luZD0ibW91c2VEb3duIiAuLi4gLz4KICAgICAgICAgYW5kIG90aGVyIG1vdXNlIGV2ZW50cy4KICAgICAgICAgQHBhcmFtIHN0YXRlIFRoZSBtb3VzZSBzdGF0ZSwgZGVzY3JpYmVkIGJ5IFNrVmlldzo6Q2xpY2s6OlN0YXRlIDogdmFsdWVzIGFyZQpAQCAtMTUxLDQ4ICsxNTEsNDggQEAKIAogICAgIC8qKiBQYXNzIGEgbWV0YS1rZXkgZXZlbnQsIHN1Y2ggYXMgYW4gYXJyb3cgLCB0byB0aGUgYW5pbWF0b3IuCiAgICAgICAgIFRoaXMgdHJpZ2dlcnMgZXZlbnRzIG9mIHRoZSBmb3JtIDxldmVudCBraW5kPSJrZXlQcmVzcyIgY29kZT0iLi4uIC8+Ci0gICAgICAgIEBwYXJhbSBjb2RlICBUaGUga2V5IHRvIG1hdGNoIGFnYWluc3QgPGV2ZW50PiBlbGVtZW50ICJjb2RlIiAKKyAgICAgICAgQHBhcmFtIGNvZGUgIFRoZSBrZXkgdG8gbWF0Y2ggYWdhaW5zdCA8ZXZlbnQ+IGVsZW1lbnQgImNvZGUiCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLgogICAgICAgICBAcmV0dXJuIHRydWUgaWYgdGhlIGV2ZW50IHdhcyBkaXNwYXRjaGVkIHN1Y2Nlc3NmdWxseS4KICAgICAqLwogICAgIGJvb2wgZG9LZXlFdmVudChTa0tleSBjb2RlKTsKICAgICBib29sIGRvS2V5VXBFdmVudChTa0tleSBjb2RlKTsKLSAgICAKLSAgICAvKiogU2VuZCBhbiBldmVudCB0byB0aGUgYW5pbWF0b3IuIFRoZSBhbmltYXRvcidzIGNsb2NrIGlzIHNldCAKKworICAgIC8qKiBTZW5kIGFuIGV2ZW50IHRvIHRoZSBhbmltYXRvci4gVGhlIGFuaW1hdG9yJ3MgY2xvY2sgaXMgc2V0CiAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWUuCiAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIGRpc3BhdGNoZWQgc3VjY2Vzc2Z1bGx5LgogICAgICovCiAgICAgYm9vbCBkb1VzZXJFdmVudChjb25zdCBTa0V2ZW50JiBldnQpOwogCi0gICAgLyoqIFRoZSBwb3NzaWJsZSByZXN1bHRzIGZyb20gdGhlIGRyYXcgZnVuY3Rpb24uIAorICAgIC8qKiBUaGUgcG9zc2libGUgcmVzdWx0cyBmcm9tIHRoZSBkcmF3IGZ1bmN0aW9uLgogICAgICovCiAgICAgZW51bSBEaWZmZXJlbmNlVHlwZSB7CiAgICAgICAgIGtOb3REaWZmZXJlbnQsCiAgICAgICAgIGtEaWZmZXJlbnQsCiAgICAgICAgIGtQYXJ0aWFsbHlEaWZmZXJlbnQKICAgICB9OwotICAgIC8qKiBEcmF3cyBvbmUgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbi4gVGhlIGZpcnN0IGNhbGwgdG8gZHJhdyBhbHdheXMgCi0gICAgICAgIGRyYXdzIHRoZSBpbml0aWFsIGZyYW1lIG9mIHRoZSBhbmltYXRpb24uIFN1YnNlcXVlbnQgY2FsbHMgZHJhdyAKLSAgICAgICAgdGhlIG9mZnNldCBpbnRvIHRoZSBhbmltYXRpb24gYnkgCisgICAgLyoqIERyYXdzIG9uZSBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uLiBUaGUgZmlyc3QgY2FsbCB0byBkcmF3IGFsd2F5cworICAgICAgICBkcmF3cyB0aGUgaW5pdGlhbCBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIGRyYXcKKyAgICAgICAgdGhlIG9mZnNldCBpbnRvIHRoZSBhbmltYXRpb24gYnkKICAgICAgICAgc3VidHJhY3RpbmcgdGhlIGluaXRpYWwgdGltZSBmcm9tIHRoZSBjdXJyZW50IHRpbWUuCiAgICAgICAgIEBwYXJhbSBjYW52YXMgIFRoZSBjYW52YXMgdG8gZHJhdyBpbnRvLgogICAgICAgICBAcGFyYW0gcGFpbnQgICAgIFRoZSBwYWludCB0byBkcmF3IHdpdGguCiAgICAgICAgIEBwYXJhbSB0aW1lICBUaGUgb2Zmc2V0IGludG8gdGhlIGN1cnJlbnQgYW5pbWF0aW9uLgogICAgICAgICBAcmV0dXJuIGtOb3REaWZmZXJlbnQgaWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSBhbmltYXRpb25zOyBrRGlmZmVyZW50IGlmIHRoZXJlIGFyZSBhY3RpdmUgYW5pbWF0aW9uczsgYW5kCi0gICAgICAgIGtQYXJ0aWFsbHlEaWZmZXJlbnQgaWYgdGhlIGRvY3VtZW50IGNvbnRhaW5zIGFuIGFjdGl2ZSA8Ym91bmRzPiBlbGVtZW50IHRoYXQgc3BlY2lmaWVzIGEgbWluaW1hbCAKKyAgICAgICAga1BhcnRpYWxseURpZmZlcmVudCBpZiB0aGUgZG9jdW1lbnQgY29udGFpbnMgYW4gYWN0aXZlIDxib3VuZHM+IGVsZW1lbnQgdGhhdCBzcGVjaWZpZXMgYSBtaW5pbWFsCiAgICAgICAgIHJlZHJhdyBhcmVhLgogICAgICovCiAgICAgRGlmZmVyZW5jZVR5cGUgZHJhdyhTa0NhbnZhcyogY2FudmFzLCBTa1BhaW50KiBwYWludCwgU2tNU2VjIHRpbWUpOwogCiAgICAgLyoqIERyYXdzIG9uZSBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uLCB1c2luZyBhIG5ldyBQYWludCBlYWNoIHRpbWUuCi0gICAgICAgIFRoZSBmaXJzdCBjYWxsIHRvIGRyYXcgYWx3YXlzIAotICAgICAgICBkcmF3cyB0aGUgaW5pdGlhbCBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIGRyYXcgCi0gICAgICAgIHRoZSBvZmZzZXQgaW50byB0aGUgYW5pbWF0aW9uIGJ5IAorICAgICAgICBUaGUgZmlyc3QgY2FsbCB0byBkcmF3IGFsd2F5cworICAgICAgICBkcmF3cyB0aGUgaW5pdGlhbCBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIGRyYXcKKyAgICAgICAgdGhlIG9mZnNldCBpbnRvIHRoZSBhbmltYXRpb24gYnkKICAgICAgICAgc3VidHJhY3RpbmcgdGhlIGluaXRpYWwgdGltZSBmcm9tIHRoZSBjdXJyZW50IHRpbWUuCiAgICAgICAgIEBwYXJhbSBjYW52YXMgIFRoZSBjYW52YXMgdG8gZHJhdyBpbnRvLgogICAgICAgICBAcGFyYW0gdGltZSAgVGhlIG9mZnNldCBpbnRvIHRoZSBjdXJyZW50IGFuaW1hdGlvbi4KICAgICAgICAgQHJldHVybiBrTm90RGlmZmVyZW50IGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgYW5pbWF0aW9uczsga0RpZmZlcmVudCBpZiB0aGVyZSBhcmUgYWN0aXZlIGFuaW1hdGlvbnM7IGFuZAotICAgICAgICBrUGFydGlhbGx5RGlmZmVyZW50IGlmIHRoZSBkb2N1bWVudCBjb250YWlucyBhbiBhY3RpdmUgPGJvdW5kcz4gZWxlbWVudCB0aGF0IHNwZWNpZmllcyBhIG1pbmltYWwgCisgICAgICAgIGtQYXJ0aWFsbHlEaWZmZXJlbnQgaWYgdGhlIGRvY3VtZW50IGNvbnRhaW5zIGFuIGFjdGl2ZSA8Ym91bmRzPiBlbGVtZW50IHRoYXQgc3BlY2lmaWVzIGEgbWluaW1hbAogICAgICAgICByZWRyYXcgYXJlYS4KICAgICAqLwogICAgIERpZmZlcmVuY2VUeXBlIGRyYXcoU2tDYW52YXMqIGNhbnZhcywgU2tNU2VjIHRpbWUpOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAgICAgIEBwYXJhbSB5IGlnbm9yZWQKICAgICAgICAgQHJldHVybiB0cnVlIGlmIGEgbW91c2VEb3duIGV2ZW50IGhhbmRsZXIgaXMgZW5hYmxlZC4KICAgICAqLwotICAgIGJvb2wgZmluZENsaWNrRXZlbnQoU2tTY2FsYXIgeCwgU2tTY2FsYXIgeSk7IAorICAgIGJvb2wgZmluZENsaWNrRXZlbnQoU2tTY2FsYXIgeCwgU2tTY2FsYXIgeSk7CiAKIAogICAgIC8qKiBHZXQgdGhlIG5lc3RlZCBhbmltYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LCBpZiBhbnkuCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogICAgIC8qKiBSZXR1cm5zIHRoZSBzY2FsYXIgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50J3MgYXR0cmlidXRlW2luZGV4XQogICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50Ci0gICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgIAorICAgICAgICBAcGFyYW0gZmllbGROYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBpbmRleCB0aGUgYXJyYXkgZW50cnkKICAgICAgICAgQHJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSB0byByZXRyaWV2ZSwgb3IgU0tfTmFOMzIgaWYgdW5zdWNjZXNzZnVsCiAgICAgKi8KQEAgLTIzOSw3ICsyMzksNyBAQAogCiAgICAgLyoqIFJldHVybnMgdGhlIHNjYWxhciB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQncyBhdHRyaWJ1dGVbaW5kZXhdCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGluZGV4IHRoZSBhcnJheSBlbnRyeQogICAgICAgICBAcmV0dXJuIHRoZSBzY2FsYXIgdmFsdWUgdG8gcmV0cmlldmUsIG9yIFNLX1NjYWxhck5hTiBpZiB1bnN1Y2Nlc3NmdWwKICAgICAqLwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICAgICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCdzIGF0dHJpYnV0ZVtpbmRleF0KICAgICAgICAgQHBhcmFtIGVsZW1lbnQgaXMgYSB2YWx1ZSByZXR1cm5lZCBieSBnZXRFbGVtZW50Ci0gICAgICAgIEBwYXJhbSBmaWVsZCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEZpZWxkICAKKyAgICAgICAgQHBhcmFtIGZpZWxkIGlzIGEgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0RmllbGQKICAgICAgICAgQHBhcmFtIGluZGV4IHRoZSBhcnJheSBlbnRyeQogICAgICAgICBAcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUgdG8gcmV0cmlldmUsIG9yIG51bGwgaWYgdW5zdWNjZXNzZnVsCiAgICAgKi8KQEAgLTI1NSw1NSArMjU1LDU1IEBACiAKICAgICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCdzIGF0dHJpYnV0ZVtpbmRleF0KICAgICAgICAgQHBhcmFtIGVsZW1lbnRJRCBpcyB0aGUgdmFsdWUgb2YgdGhlIGlkIGF0dHJpYnV0ZSBpbiB0aGUgWE1MIG9mIHRoaXMgZWxlbWVudAotICAgICAgICBAcGFyYW0gZmllbGROYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlICAKKyAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQogICAgICAgICBAcGFyYW0gaW5kZXggdGhlIGFycmF5IGVudHJ5CiAgICAgICAgIEByZXR1cm4gdGhlIHN0cmluZyB2YWx1ZSB0byByZXRyaWV2ZSwgb3IgbnVsbCBpZiB1bnN1Y2Nlc3NmdWwKICAgICAqLwogICAgIGNvbnN0IGNoYXIqIGdldEFycmF5U3RyaW5nKGNvbnN0IGNoYXIqIGVsZW1lbnRJRCwgY29uc3QgY2hhciogZmllbGROYW1lLCBpbnQgaW5kZXgpOwogCiAgICAgLyoqIFJldHVybnMgdGhlIFhNTCBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIElELgotICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50IAorICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50CiAgICAgICAgIEByZXR1cm4gdGhlIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIElELCBvciBudWxsIGlmIHRoZSBlbGVtZW50IGNhbid0IGJlIGZvdW5kCiAgICAgKi8KICAgICBjb25zdCBTa0Rpc3BsYXlhYmxlKiBnZXRFbGVtZW50KGNvbnN0IGNoYXIqIGVsZW1lbnRJRCk7CiAKICAgICAvKiogUmV0dXJucyB0aGUgZWxlbWVudCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFhNTCBlbGVtZW50LgogICAgICAgICBUaGUgZWxlbWVudCB0eXBlIG1hdGNoZXMgdGhlIGVsZW1lbnQgbmFtZTsgZm9yIGluc3RhbmNlLCA8bGluZT4gcmV0dXJucyBrRWxlbWVudF9MaW5lVHlwZQotICAgICAgICBAcGFyYW0gZWxlbWVudCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEVsZW1lbnQgIAorICAgICAgICBAcGFyYW0gZWxlbWVudCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEVsZW1lbnQKICAgICAgICAgQHJldHVybiBlbGVtZW50IHR5cGUsIG9yIDAgaWYgdGhlIGVsZW1lbnQgY2FuJ3QgYmUgZm91bmQKICAgICAqLwogICAgIFNrRWxlbWVudFR5cGUgZ2V0RWxlbWVudFR5cGUoY29uc3QgU2tEaXNwbGF5YWJsZSogZWxlbWVudCk7CiAKICAgICAvKiogUmV0dXJucyB0aGUgZWxlbWVudCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIElELgotICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50IAorICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50CiAgICAgICAgIEByZXR1cm4gZWxlbWVudCB0eXBlLCBvciAwIGlmIHRoZSBlbGVtZW50IGNhbid0IGJlIGZvdW5kCiAgICAgKi8KICAgICBTa0VsZW1lbnRUeXBlIGdldEVsZW1lbnRUeXBlKGNvbnN0IGNoYXIqIGVsZW1lbnRJRCk7CiAKICAgICAvKiogUmV0dXJucyB0aGUgWE1MIGZpZWxkIG9mIHRoZSBuYW1lZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBlbGVtZW50LgogICAgICAgICBAcGFyYW0gZWxlbWVudCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBpcyB0aGUgYXR0cmlidXRlIHRvIHJldHVybiAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgaXMgdGhlIGF0dHJpYnV0ZSB0byByZXR1cm4KICAgICAgICAgQHJldHVybiB0aGUgYXR0cmlidXRlIG1hdGNoaW5nIHRoZSBmaWVsZE5hbWUsIG9yIG51bGwgaWYgdGhlIGVsZW1lbnQgY2FuJ3QgYmUgZm91bmQKICAgICAqLwogICAgIGNvbnN0IFNrTWVtYmVySW5mbyogZ2V0RmllbGQoY29uc3QgU2tEaXNwbGF5YWJsZSogZWxlbWVudCwgY29uc3QgY2hhciogZmllbGROYW1lKTsKIAogICAgIC8qKiBSZXR1cm5zIHRoZSBYTUwgZmllbGQgb2YgdGhlIG5hbWVkIGF0dHJpYnV0ZSBpbiB0aGUgWE1MIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGVsZW1lbnRJRC4KICAgICAgICAgQHBhcmFtIGVsZW1lbnRJRCBpcyB0aGUgdmFsdWUgb2YgdGhlIGlkIGF0dHJpYnV0ZSBpbiB0aGUgWE1MIG9mIHRoaXMgZWxlbWVudAotICAgICAgICBAcGFyYW0gZmllbGROYW1lIGlzIHRoZSBhdHRyaWJ1dGUgdG8gcmV0dXJuICAKKyAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBpcyB0aGUgYXR0cmlidXRlIHRvIHJldHVybgogICAgICAgICBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgbWF0Y2hpbmcgdGhlIGZpZWxkTmFtZSwgb3IgbnVsbCBpZiB0aGUgZWxlbWVudCBjYW4ndCBiZSBmb3VuZAogICAgICovCiAgICAgY29uc3QgU2tNZW1iZXJJbmZvKiBnZXRGaWVsZChjb25zdCBjaGFyKiBlbGVtZW50SUQsIGNvbnN0IGNoYXIqIGZpZWxkTmFtZSk7CiAKICAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgdHlwZSBjb3Jlc3BvbmRpbmcgdG8gdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGUuCiAgICAgICAgIFRoZSB2YWx1ZSB0eXBlIG1hdGNoZXMgdGhlIFhNTCBzY2hlbWE6IGFuZCBtYXkgYmUga0ZpZWxkX0Jvb2xlYW5UeXBlLCBrRmllbGRfU2NhbGFyVHlwZSwgZXRjLgotICAgICAgICBAcGFyYW0gZmllbGQgaXMgYSB2YWx1ZSByZXR1cm5lZCBieSBnZXRGaWVsZCAgCisgICAgICAgIEBwYXJhbSBmaWVsZCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEZpZWxkCiAgICAgICAgIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB0eXBlLCBvciAwIGlmIHRoZSBlbGVtZW50IGNhbid0IGJlIGZvdW5kCiAgICAgKi8KICAgICBTa0ZpZWxkVHlwZSBnZXRGaWVsZFR5cGUoY29uc3QgU2tNZW1iZXJJbmZvKiBmaWVsZCk7CiAKICAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgdHlwZSBjb3Jlc3BvbmRpbmcgdG8gdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGUuCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHJldHVybiB0aGUgYXR0cmlidXRlIHR5cGUsIG9yIDAgaWYgdGhlIGVsZW1lbnQgY2FuJ3QgYmUgZm91bmQKICAgICAqLwogICAgIFNrRmllbGRUeXBlIGdldEZpZWxkVHlwZShjb25zdCBjaGFyKiBlbGVtZW50SUQsIGNvbnN0IGNoYXIqIGZpZWxkTmFtZSk7CkBAIC0zMTUsNTQgKzMxNSw1NCBAQAogCiAgICAgLyoqIFJldHVybnMgdGhlIHBhcnRpYWwgcmVjdGFuZ2xlIHRvIGludmFsaWRhdGUgYWZ0ZXIgZHJhd2luZy4gQ2FsbCBhZnRlciBkcmF3KCkgcmV0dXJucwogICAgIGtJc1BhcnRpYWxseURpZmZlcmVudCB0byBkbyBhIG1pbWltYWwgaW52YWwoKS4gKi8KLSAgICB2b2lkIGdldEludmFsQm91bmRzKFNrUmVjdCogaW52YWwpOyAKKyAgICB2b2lkIGdldEludmFsQm91bmRzKFNrUmVjdCogaW52YWwpOwogCi0gICAgLyoqIFJldHVybnMgdGhlIGRldGFpbHMgb2YgYW55IGVycm9yIGVuY291bnRlcmVkIHdoaWxlIHBhcnNpbmcgdGhlIFhNTC4gCisgICAgLyoqIFJldHVybnMgdGhlIGRldGFpbHMgb2YgYW55IGVycm9yIGVuY291bnRlcmVkIHdoaWxlIHBhcnNpbmcgdGhlIFhNTC4KICAgICAqLwogICAgIGNvbnN0IFNrWE1MUGFyc2VyRXJyb3IqIGdldFBhcnNlckVycm9yKCk7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIGRldGFpbHMgb2YgYW55IGVycm9yIGVuY291bnRlcmVkIHdoaWxlIHBhcnNpbmcgdGhlIFhNTCBhcyBzdHJpbmcuIAorCisgICAgLyoqIFJldHVybnMgdGhlIGRldGFpbHMgb2YgYW55IGVycm9yIGVuY291bnRlcmVkIHdoaWxlIHBhcnNpbmcgdGhlIFhNTCBhcyBzdHJpbmcuCiAgICAgKi8KICAgICBjb25zdCBjaGFyKiBnZXRQYXJzZXJFcnJvclN0cmluZygpOwotICAgIAorCiAgICAgLyoqIFJldHVybnMgdGhlIHNjYWxhciB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQncyBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGVsZW1lbnQgaXMgYSB2YWx1ZSByZXR1cm5lZCBieSBnZXRFbGVtZW50Ci0gICAgICAgIEBwYXJhbSBmaWVsZCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEZpZWxkICAKKyAgICAgICAgQHBhcmFtIGZpZWxkIGlzIGEgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0RmllbGQKICAgICAgICAgQHJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSB0byByZXRyaWV2ZSwgb3IgU0tfTmFOMzIgaWYgbm90IGZvdW5kCiAgICAgKi8KICAgICBpbnQzMl90IGdldEludChjb25zdCBTa0Rpc3BsYXlhYmxlKiBlbGVtZW50LCBjb25zdCBTa01lbWJlckluZm8qIGZpZWxkKTsKIAogICAgIC8qKiBSZXR1cm5zIHRoZSBzY2FsYXIgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50J3MgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSB0byByZXRyaWV2ZSwgb3IgU0tfTmFOMzIgaWYgbm90IGZvdW5kCiAgICAgKi8KICAgICBpbnQzMl90IGdldEludChjb25zdCBjaGFyKiBlbGVtZW50SUQsIGNvbnN0IGNoYXIqIGZpZWxkTmFtZSk7CiAKICAgICAvKiogUmV0dXJucyB0aGUgc2NhbGFyIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCdzIGF0dHJpYnV0ZQogICAgICAgICBAcGFyYW0gZWxlbWVudCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkIGlzIGEgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0RmllbGQgIAorICAgICAgICBAcGFyYW0gZmllbGQgaXMgYSB2YWx1ZSByZXR1cm5lZCBieSBnZXRGaWVsZAogICAgICAgICBAcmV0dXJuIHRoZSBzY2FsYXIgdmFsdWUgdG8gcmV0cmlldmUsIG9yIFNLX1NjYWxhck5hTiBpZiBub3QgZm91bmQKICAgICAqLwogICAgIFNrU2NhbGFyIGdldFNjYWxhcihjb25zdCBTa0Rpc3BsYXlhYmxlKiBlbGVtZW50LCBjb25zdCBTa01lbWJlckluZm8qIGZpZWxkKTsKIAogICAgIC8qKiBSZXR1cm5zIHRoZSBzY2FsYXIgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50J3MgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHJldHVybiB0aGUgc2NhbGFyIHZhbHVlIHRvIHJldHJpZXZlLCBvciBTS19TY2FsYXJOYU4gaWYgbm90IGZvdW5kCiAgICAgKi8KICAgICBTa1NjYWxhciBnZXRTY2FsYXIoY29uc3QgY2hhciogZWxlbWVudElELCBjb25zdCBjaGFyKiBmaWVsZE5hbWUpOwogCiAgICAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQncyBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGVsZW1lbnQgaXMgYSB2YWx1ZSByZXR1cm5lZCBieSBnZXRFbGVtZW50Ci0gICAgICAgIEBwYXJhbSBmaWVsZCBpcyBhIHZhbHVlIHJldHVybmVkIGJ5IGdldEZpZWxkICAKKyAgICAgICAgQHBhcmFtIGZpZWxkIGlzIGEgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0RmllbGQKICAgICAgICAgQHJldHVybiB0aGUgc3RyaW5nIHZhbHVlIHRvIHJldHJpZXZlLCBvciBudWxsIGlmIG5vdCBmb3VuZAogICAgICovCiAgICAgY29uc3QgY2hhciogZ2V0U3RyaW5nKGNvbnN0IFNrRGlzcGxheWFibGUqIGVsZW1lbnQsIGNvbnN0IFNrTWVtYmVySW5mbyogZmllbGQpOwogCiAgICAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQncyBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGVsZW1lbnRJRCBpcyB0aGUgdmFsdWUgb2YgdGhlIGlkIGF0dHJpYnV0ZSBpbiB0aGUgWE1MIG9mIHRoaXMgZWxlbWVudAotICAgICAgICBAcGFyYW0gZmllbGROYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlICAKKyAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQogICAgICAgICBAcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUgdG8gcmV0cmlldmUsIG9yIG51bGwgaWYgbm90IGZvdW5kCiAgICAgKi8KICAgICBjb25zdCBjaGFyKiBnZXRTdHJpbmcoY29uc3QgY2hhciogZWxlbWVudElELCBjb25zdCBjaGFyKiBmaWVsZE5hbWUpOwpAQCAtMzczLDMxICszNzMsMzEgQEAKICAgICAvKiogUmVzZXRzIHRoZSBhbmltYXRvciB0byBhIG5ld2x5IGNyZWF0ZWQgc3RhdGUgd2l0aCBubyBhbmltYXRpb24gZGF0YS4gKi8KICAgICB2b2lkIGluaXRpYWxpemUoKTsKIAotICAgIC8qKiBFeHBlcmltZW50YWwuIFJlc2V0cyBhbnkgYWN0aXZlIGFuaW1hdGlvbnMgc28gdGhhdCB0aGUgbmV4dCB0aW1lIHBhc3NlZCBpcyB0cmVhdGVkIGFzIAorICAgIC8qKiBFeHBlcmltZW50YWwuIFJlc2V0cyBhbnkgYWN0aXZlIGFuaW1hdGlvbnMgc28gdGhhdCB0aGUgbmV4dCB0aW1lIHBhc3NlZCBpcyB0cmVhdGVkIGFzCiAgICAgICAgIHRpbWUgemVyby4gKi8KICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgCisKICAgICAvKiogU2V0cyB0aGUgc2NhbGFyIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCdzIGF0dHJpYnV0ZQogICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50Ci0gICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgIAorICAgICAgICBAcGFyYW0gZmllbGROYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBhcnJheSBpcyB0aGUgYy1zdHlsZSBhcnJheSBvZiBpbnRlZ2VycwogICAgICAgICBAcGFyYW0gY291bnQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkKICAgICAgICAgQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgc2V0IHN1Y2Nlc3NmdWxseQogICAgICovCiAgICAgYm9vbCBzZXRBcnJheUludChjb25zdCBjaGFyKiBlbGVtZW50SUQsIGNvbnN0IGNoYXIqIGZpZWxkTmFtZSwgY29uc3QgaW50KiBhcnJheSwgaW50IGNvdW50KTsKLSAgICAKKwogICAgIC8qKiBTZXRzIHRoZSBzY2FsYXIgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50J3MgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGFycmF5IGlzIHRoZSBjLXN0eWxlIGFycmF5IG9mIHN0cmluZ3MKICAgICAgICAgQHBhcmFtIGNvdW50IGlzIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5CiAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCBzdWNjZXNzZnVsbHkKICAgICAqLwogICAgIGJvb2wgc2V0QXJyYXlTdHJpbmcoY29uc3QgY2hhciogZWxlbWVudElELCBjb25zdCBjaGFyKiBmaWVsZE5hbWUsIGNvbnN0IGNoYXIqKiBhcnJheSwgaW50IGNvdW50KTsKLSAgICAKKwogICAgIC8qKiBTZXRzIHRoZSBzY2FsYXIgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50J3MgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGRhdGEgdGhlIGludGVnZXIgdmFsdWUgdG8gc2V0CiAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCBzdWNjZXNzZnVsbHkKICAgICAqLwpAQCAtNDA1LDcgKzQwNSw3IEBACiAKICAgICAvKiogU2V0cyB0aGUgc2NhbGFyIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCdzIGF0dHJpYnV0ZQogICAgICAgICBAcGFyYW0gZWxlbWVudElEIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBYTUwgb2YgdGhpcyBlbGVtZW50Ci0gICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgIAorICAgICAgICBAcGFyYW0gZmllbGROYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBkYXRhIHRoZSBzY2FsYXIgdmFsdWUgdG8gc2V0CiAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCBzdWNjZXNzZnVsbHkKICAgICAqLwpAQCAtNDEzLDE0ICs0MTMsMTQgQEAKIAogICAgIC8qKiBTZXRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50J3MgYXR0cmlidXRlCiAgICAgICAgIEBwYXJhbSBlbGVtZW50SUQgaXMgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIFhNTCBvZiB0aGlzIGVsZW1lbnQKLSAgICAgICAgQHBhcmFtIGZpZWxkTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAgCisgICAgICAgIEBwYXJhbSBmaWVsZE5hbWUgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAgICAgQHBhcmFtIGRhdGEgdGhlIHN0cmluZyB2YWx1ZSB0byBzZXQKICAgICAgICAgQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgc2V0IHN1Y2Nlc3NmdWxseQogICAgICovCiAgICAgYm9vbCBzZXRTdHJpbmcoY29uc3QgY2hhciogZWxlbWVudElELCBjb25zdCBjaGFyKiBmaWVsZE5hbWUsIGNvbnN0IGNoYXIqIGRhdGEpOwogCi0gICAgLyoqIFNldHMgdGhlIGZpbGUgZGVmYXVsdCBkaXJlY3Rvcnkgb2YgdGhlIFVSTCBiYXNlIHBhdGggCi0gICAgICAgIEBwYXJhbSBwYXRoIHRoZSBkaXJlY3RvcnkgcGF0aCAKKyAgICAvKiogU2V0cyB0aGUgZmlsZSBkZWZhdWx0IGRpcmVjdG9yeSBvZiB0aGUgVVJMIGJhc2UgcGF0aAorICAgICAgICBAcGFyYW0gcGF0aCB0aGUgZGlyZWN0b3J5IHBhdGgKICAgICAqLwogICAgIHZvaWQgc2V0VVJJQmFzZShjb25zdCBjaGFyKiBwYXRoKTsKIApAQCAtNDQyLDcgKzQ0Miw3IEBACiAgICAgICAgIHZpcnR1YWwgU2tNU2VjIGdldE1TZWNzKCkgY29uc3QgPSAwOwogICAgIH07CiAKLSAgICAvKiogU2V0cyBhIHVzZXIgY2xhc3MgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgdG8gdGhlIGFuaW1hdG9yLiAKKyAgICAvKiogU2V0cyBhIHVzZXIgY2xhc3MgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgdG8gdGhlIGFuaW1hdG9yLgogICAgICAgICBPcHRpb25hbDsgaWYgbm90IGNhbGxlZCwgdGhlIHN5c3RlbSBjbG9jayB3aWxsIGJlIHVzZWQgYnkgY2FsbGluZyBTa1RpbWU6OkdldE1TZWNzIGluc3RlYWQuCiAgICAgICAgIEBwYXJhbSBjYWxsQmFjayB0aGUgdGltZSBmdW5jdGlvbgogICAgICovCkBAIC00NTAsMjggKzQ1MCwyOCBAQAogCiAgICAgc3RhdGljIHZvaWQgSW5pdChib29sIHJ1blVuaXRUZXN0cyk7CiAgICAgc3RhdGljIHZvaWQgVGVybSgpOwotICAgIAotICAgIC8qKiBUaGUgZXZlbnQgc2luayBldmVudHMgZ2VuZXJhdGVkIGJ5IHRoZSBhbmltYXRpb24gYXJlIHBvc3RlZCB0by4gCisKKyAgICAvKiogVGhlIGV2ZW50IHNpbmsgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUgYW5pbWF0aW9uIGFyZSBwb3N0ZWQgdG8uCiAgICAgICAgIFNjcmVlbnBsYXkgYWxzbyBwb3N0cyBhbiBpbnZhbCBldmVudCB0byB0aGlzIGV2ZW50IHNpbmsgYWZ0ZXIgcHJvY2Vzc2luZyBhbgogICAgICAgICBldmVudCB0byBmb3JjZSBhIHJlZHJhdy4KICAgICAgICAgQHBhcmFtIHRhcmdldCB0aGUgZXZlbnQgc2luayBpZAogICAgICovCiAgICAgdm9pZCBzZXRIb3N0RXZlbnRTaW5rSUQoU2tFdmVudFNpbmtJRCBob3N0SUQpOwogICAgIFNrRXZlbnRTaW5rSUQgZ2V0SG9zdEV2ZW50U2lua0lEKCkgY29uc3Q7Ci0gICAgCisKICAgICAvLyBoZWxwZXIKICAgICB2b2lkIHNldEhvc3RFdmVudFNpbmsoU2tFdmVudFNpbmsqIHNpbmspIHsKICAgICAgICAgdGhpcy0+c2V0SG9zdEV2ZW50U2lua0lEKHNpbmsgPyBzaW5rLT5nZXRTaW5rSUQoKSA6IDApOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRKYXZhT3duZXIoSGFuZGxlciBvd25lcik7Ci0gICAgCisKICNpZmRlZiBTS19ERUJVRwogICAgIHZpcnR1YWwgdm9pZCBldmVudERvbmUoY29uc3QgU2tFdmVudCYgZXZ0KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNUcmFja2luZ0V2ZW50cygpOwogICAgIHN0YXRpYyBib29sIE5vTGVha3MoKTsKLSNlbmRpZiAgCi0gICAgCisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvblNldEhvc3RIYW5kbGVyKEhhbmRsZXIgaGFuZGxlcik7CiAgICAgdmlydHVhbCB2b2lkIG9uRXZlbnRQb3N0KFNrRXZlbnQqLCBTa0V2ZW50U2lua0lEKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQAogICAgIGJvb2wgc2V0SW50KFNrRGlzcGxheWFibGUqIGVsZW1lbnQsIGNvbnN0IFNrTWVtYmVySW5mbyogZmllbGQsIGludDMyX3QgZGF0YSk7CiAgICAgYm9vbCBzZXRTY2FsYXIoU2tEaXNwbGF5YWJsZSogZWxlbWVudCwgY29uc3QgU2tNZW1iZXJJbmZvKiBmaWVsZCwgU2tTY2FsYXIgZGF0YSk7CiAgICAgYm9vbCBzZXRTdHJpbmcoU2tEaXNwbGF5YWJsZSogZWxlbWVudCwgY29uc3QgU2tNZW1iZXJJbmZvKiBmaWVsZCwgY29uc3QgY2hhciogZGF0YSk7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgb25FdmVudChjb25zdCBTa0V2ZW50Jik7CiAgICAgU2tBbmltYXRlTWFrZXIqIGZNYWtlcjsKICAgICBmcmllbmQgY2xhc3MgU2tBbmltYXRlTWFrZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy9Ta1VzZXJDb25maWcuaCBiL2luY2x1ZGUvY29uZmlnL1NrVXNlckNvbmZpZy5oCmluZGV4IDJiNzcxNjIuLjM1MzI3MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlnL1NrVXNlckNvbmZpZy5oCisrKyBiL2luY2x1ZGUvY29uZmlnL1NrVXNlckNvbmZpZy5oCkBAIC02Nyw3ICs2Nyw3IEBACiAKIC8qICBUbyBhc3Npc3QgZGVidWdnaW5nLCBTa2lhIHByb3ZpZGVzIGFuIGluc3RhbmNlIGNvdW50aW5nIHV0aWxpdHkgaW4KICAgICBpbmNsdWRlL2NvcmUvU2tJbnN0Q291bnQuaC4gVGhpcyBmbGFnIHR1cm5zIG9uIGFuZCBvZmYgdGhhdCB1dGlsaXR5IHRvCi0gICAgYWxsb3cgaW5zdGFuY2UgY291bnQgdHJhY2tpbmcgaW4gZWl0aGVyIGRlYnVnIG9yIHJlbGVhc2UgYnVpbGRzLiBCeSAKKyAgICBhbGxvdyBpbnN0YW5jZSBjb3VudCB0cmFja2luZyBpbiBlaXRoZXIgZGVidWcgb3IgcmVsZWFzZSBidWlsZHMuIEJ5CiAgICAgZGVmYXVsdCBpdCBpcyBlbmFibGVkIGluIGRlYnVnIGJ1dCBkaXNhYmxlZCBpbiByZWxlYXNlLgogICovCiAvLyNkZWZpbmUgU0tfRU5BQkxFX0lOU1RfQ09VTlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9TazY0LmggYi9pbmNsdWRlL2NvcmUvU2s2NC5oCmluZGV4IGI4NmUwYmUuLmQyMzJkODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9TazY0LmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrNjQuaApAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgIGZIaSA9IGZIaSArIGhpICsgKHN1bSA8IGZMbyk7CiAgICAgICAgIGZMbyA9IHN1bTsKICAgICB9Ci0gICAgCisKICAgICAvKiogQWRkIHRoZSBzcGVjaWZpZWQgU2s2NCB0byB0aGUgbnVtYmVyICovCiAgICAgdm9pZCBhZGQoaW50MzJfdCBoaSwgdWludDMyX3QgbG8pIHsKICAgICAgICAgdWludDMyX3Qgc3VtID0gZkxvICsgbG87CkBAIC0xNDIsMTggKzE0MiwxOCBAQAogICAgICAgICBmSGkgPSBmSGkgKyBoaSArIChzdW0gPCBmTG8pOwogICAgICAgICBmTG8gPSBzdW07CiAgICAgfQotICAgIAorCiAgICAgLyoqIEFkZCB0aGUgc3BlY2lmaWVkIFNrNjQgdG8gdGhlIG51bWJlciAqLwogICAgIHZvaWQgICAgYWRkKGNvbnN0IFNrNjQmIG90aGVyKSB7IHRoaXMtPmFkZChvdGhlci5mSGksIG90aGVyLmZMbyk7IH0KLSAgICAKKwogICAgIC8qKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIFNrNjQgZnJvbSB0aGUgbnVtYmVyLiAoKnRoaXMpID0gKCp0aGlzKSAtIG51bQogICAgICovCiAgICAgdm9pZCAgICBzdWIoY29uc3QgU2s2NCYgbnVtKTsKLSAgICAKKwogICAgIC8qKiBTdWJ0cmFjdCB0aGUgbnVtYmVyIGZyb20gdGhlIHNwZWNpZmllZCBTazY0LiAoKnRoaXMpID0gbnVtIC0gKCp0aGlzKQogICAgICovCiAgICAgdm9pZCAgICByc3ViKGNvbnN0IFNrNjQmIG51bSk7Ci0gICAgCisKICAgICAvKiogTXVsdGlwbHkgdGhlIG51bWJlciBieSB0aGUgc3BlY2lmaWVkIDMyIGJpdCBpbnRlZ2VyCiAgICAgKi8KICAgICB2b2lkICAgIG11bChpbnQzMl90KTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICBrVHJ1bmNfRGl2T3B0aW9uLCAgIC8vITwgdHJ1bmNhdGUgdGhlIHJlc3VsdCB3aGVuIGNhbGxpbmcgZGl2KCkKICAgICAgICAga1JvdW5kX0Rpdk9wdGlvbiAgICAvLyE8IHJvdW5kIHRoZSByZXN1bHQgd2hlbiBjYWxsaW5nIGRpdigpCiAgICAgfTsKLSAgICAKKwogICAgIC8qKiBEaXZpZGUgdGhlIG51bWJlciBieSB0aGUgc3BlY2lmaWVkIDMyIGJpdCBpbnRlZ2VyLCB1c2luZyB0aGUgc3BlY2lmaWVkCiAgICAgICAgIGRpdmlkZSBvcHRpb24gKGVpdGhlciB0cnVuY2F0ZSBvciByb3VuZCkuCiAgICAgKi8KQEAgLTIwNSwxOSArMjA1LDE5IEBACiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTazY0JiBhLCBjb25zdCBTazY0JiBiKSB7CiAgICAgICAgIHJldHVybiBhLmZIaSAhPSBiLmZIaSB8fCBhLmZMbyAhPSBiLmZMbzsKICAgICB9Ci0gICAgCisKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgU2s2NCYgYSwgY29uc3QgU2s2NCYgYikgewogICAgICAgICByZXR1cm4gYS5mSGkgPCBiLmZIaSB8fCAoYS5mSGkgPT0gYi5mSGkgJiYgYS5mTG8gPCBiLmZMbyk7CiAgICAgfQotICAgIAorCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8PShjb25zdCBTazY0JiBhLCBjb25zdCBTazY0JiBiKSB7CiAgICAgICAgIHJldHVybiBhLmZIaSA8IGIuZkhpIHx8IChhLmZIaSA9PSBiLmZIaSAmJiBhLmZMbyA8PSBiLmZMbyk7CiAgICAgfQotICAgIAorCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFNrNjQmIGEsIGNvbnN0IFNrNjQmIGIpIHsKICAgICAgICAgcmV0dXJuIGEuZkhpID4gYi5mSGkgfHwgKGEuZkhpID09IGIuZkhpICYmIGEuZkxvID4gYi5mTG8pOwogICAgIH0KLSAgICAKKwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgU2s2NCYgYSwgY29uc3QgU2s2NCYgYikgewogICAgICAgICByZXR1cm4gYS5mSGkgPiBiLmZIaSB8fCAoYS5mSGkgPT0gYi5mSGkgJiYgYS5mTG8gPj0gYi5mTG8pOwogICAgIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta0Fubm90YXRpb24uaCBiL2luY2x1ZGUvY29yZS9Ta0Fubm90YXRpb24uaAppbmRleCA5Y2RiMmQ1Li5lMWVjZjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tBbm5vdGF0aW9uLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrQW5ub3RhdGlvbi5oCkBAIC00OCw3ICs0OCw3IEBACiBwcml2YXRlOgogICAgIFNrRGF0YVNldCogIGZEYXRhU2V0OwogICAgIHVpbnQzMl90ICAgIGZGbGFnczsKLSAgICAKKwogICAgIHZvaWQgd3JpdGVUb1N0cmVhbShTa1dTdHJlYW0qKSBjb25zdDsKICAgICB2b2lkIHJlYWRGcm9tU3RyZWFtKFNrU3RyZWFtKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta0JpdG1hcC5oIGIvaW5jbHVkZS9jb3JlL1NrQml0bWFwLmgKaW5kZXggYzJlZjdiNS4uOWM4MWU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrQml0bWFwLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrQml0bWFwLmgKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAgICAgLyoqIE1hcmtzIHRoaXMgYml0bWFwIGFzIGltbXV0YWJsZSwgbWVhbmluZyB0aGF0IHRoZSBjb250ZW50cyBvZiBpdHMKICAgICAgICAgcGl4ZWxzIHdpbGwgbm90IGNoYW5nZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBiaXRtYXAgYW5kIG9mIHRoZQotICAgICAgICB1bmRlcmx5aW5nIHBpeGVscmVmLiBUaGlzIHN0YXRlIGNhbiBiZSBzZXQsIGJ1dCBpdCBjYW5ub3QgYmUgCisgICAgICAgIHVuZGVybHlpbmcgcGl4ZWxyZWYuIFRoaXMgc3RhdGUgY2FuIGJlIHNldCwgYnV0IGl0IGNhbm5vdCBiZQogICAgICAgICBjbGVhcmVkIG9uY2UgaXQgaXMgc2V0LiBUaGlzIHN0YXRlIHByb3BhZ2F0ZXMgdG8gYWxsIG90aGVyIGJpdG1hcHMKICAgICAgICAgdGhhdCBzaGFyZSB0aGUgc2FtZSBwaXhlbHJlZi4KICAgICAqLwpAQCAtMTg4LDExICsxODgsMTEgQEAKICAgICAqLwogICAgIGJvb2wgaXNWb2xhdGlsZSgpIGNvbnN0OwogCi0gICAgLyoqIFNwZWNpZnkgd2hldGhlciB0aGlzIGJpdG1hcCBpcyB2b2xhdGlsZS4gQml0bWFwcyBhcmUgbm90IHZvbGF0aWxlIGJ5IAorICAgIC8qKiBTcGVjaWZ5IHdoZXRoZXIgdGhpcyBiaXRtYXAgaXMgdm9sYXRpbGUuIEJpdG1hcHMgYXJlIG5vdCB2b2xhdGlsZSBieQogICAgICAgICBkZWZhdWx0LiBUZW1wb3JhcnkgYml0bWFwcyB0aGF0IGFyZSBkaXNjYXJkZWQgYWZ0ZXIgdXNlIHNob3VsZCBiZQogICAgICAgICBtYXJrZWQgYXMgdm9sYXRpbGUuIFRoaXMgcHJvdmlkZXMgYSBoaW50IHRvIHRoZSBkZXZpY2UgdGhhdCB0aGUgYml0bWFwCi0gICAgICAgIHNob3VsZCBub3QgYmUgY2FjaGVkLiBQcm92aWRpbmcgdGhpcyBoaW50IHdoZW4gYXBwcm9wcmlhdGUgY2FuICAKLSAgICAgICAgaW1wcm92ZSBwZXJmb3JtYW5jZSBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBvdmVyaGVhZCBhbmQgcmVzb3VyY2UgCisgICAgICAgIHNob3VsZCBub3QgYmUgY2FjaGVkLiBQcm92aWRpbmcgdGhpcyBoaW50IHdoZW4gYXBwcm9wcmlhdGUgY2FuCisgICAgICAgIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgYW5kIHJlc291cmNlCiAgICAgICAgIGNvbnN1bXB0aW9uIG9uIHRoZSBkZXZpY2UuCiAgICAgKi8KICAgICB2b2lkIHNldElzVm9sYXRpbGUoYm9vbCk7CkBAIC00MjQsNyArNDI0LDcgQEAKICAgICAgKiAgZG9lcyBub3QgaGF2ZSBhbnkgcGl4ZWxzIChvciBoYXMgbm90IGJlIGxvY2tlZCB3aXRoIGxvY2tQaXhlbHMoKSkuCiAgICAgICovCiAgICAgU2tDb2xvciBnZXRDb2xvcihpbnQgeCwgaW50IHkpIGNvbnN0OwotICAgIAorCiAgICAgLyoqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHNwZWNpZmllZCBwaXhlbC4gVGhpcyBwZXJmb3JtcyBhIHJ1bnRpbWUKICAgICAgICAgY2hlY2sgdG8ga25vdyB0aGUgc2l6ZSBvZiB0aGUgcGl4ZWxzLCBhbmQgd2lsbCByZXR1cm4gdGhlIHNhbWUgYW5zd2VyCiAgICAgICAgIGFzIHRoZSBjb3JyZXNwb25kaW5nIHNpemUtc3BlY2lmaWMgbWV0aG9kIChlLmcuIGdldEFkZHIxNikuIFNpbmNlIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrQm91bmRlci5oIGIvaW5jbHVkZS9jb3JlL1NrQm91bmRlci5oCmluZGV4IDkzZDJlNGYuLjFlZGU1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0JvdW5kZXIuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tCb3VuZGVyLmgKQEAgLTMwLDEwICszMCwxMCBAQAogY2xhc3MgU2tCb3VuZGVyIDogcHVibGljIFNrUmVmQ250IHsKIHB1YmxpYzoKICAgICBTS19ERUNMQVJFX0lOU1RfQ09VTlQoU2tCb3VuZGVyKQotICAgIAorCiAgICAgU2tCb3VuZGVyKCk7CiAKLSAgICAvKiBDYWxsIHRvIHBlcmZvcm0gYSBjbGlwIHRlc3QgYmVmb3JlIGNhbGxpbmcgb25JUmVjdC4gCisgICAgLyogQ2FsbCB0byBwZXJmb3JtIGEgY2xpcCB0ZXN0IGJlZm9yZSBjYWxsaW5nIG9uSVJlY3QuCiAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0IGZyb20gb25JUmVjdC4KICAgICAqLwogICAgIGJvb2wgZG9JUmVjdChjb25zdCBTa0lSZWN0Jik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tDaGVja3N1bS5oIGIvaW5jbHVkZS9jb3JlL1NrQ2hlY2tzdW0uaAppbmRleCBlNjZkZjU0Li5lNWNjM2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tDaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0NoZWNrc3VtLmgKQEAgLTIxLDExICsyMSwxMSBAQAogICAgICAgICBST1RMID0gc2l6ZW9mKHVpbnRwdHJfdCkgKiA4IC0gUk9UUiwKICAgICAgICAgSEFMRkJJVFMgPSBzaXplb2YodWludHB0cl90KSAqIDQKICAgICB9OwotICAgIAorCiAgICAgc3RhdGljIGlubGluZSB1aW50cHRyX3QgTWFzaCh1aW50cHRyX3QgdG90YWwsIHVpbnRwdHJfdCB2YWx1ZSkgewogICAgICAgICByZXR1cm4gKCh0b3RhbCA+PiBST1RSKSB8ICh0b3RhbCA8PCBST1RMKSkgXiB2YWx1ZTsKICAgICB9Ci0gICAgCisKIHB1YmxpYzoKICAgICAvKioKICAgICAgKiAgQ29tcHV0ZSBhIDMyLWJpdCBjaGVja3N1bSBmb3IgYSBnaXZlbiBkYXRhIGJsb2NrCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICovCiAgICAgc3RhdGljIHVpbnQzMl90IENvbXB1dGUoY29uc3QgdWludDMyX3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CiAgICAgICAgIFNrQVNTRVJUKFNrSXNBbGlnbjQoc2l6ZSkpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKiAgV2Ugd2FudCB0byBsZXQgdGhlIGNvbXBpbGVyIHVzZSAzMmJpdCBvciA2NGJpdCBhZGRyZXNzaW5nIGFuZCBtYXRoCiAgICAgICAgICAqICBzbyB3ZSB1c2UgdWludHB0cl90IGFzIG91ciBtYWdpYyB0eXBlLiBUaGlzIG1ha2VzIHRoZSBjb2RlIGEgbGl0dGxlCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAqLwogICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0gMDsKICAgICAgICAgY29uc3QgdWludHB0cl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KGRhdGEpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKiAgY291bnQgdGhlIG51bWJlciBvZiBxdWFkIGVsZW1lbnQgY2h1bmtzLiBUaGlzIHRha2VzIGludG8gYWNjb3VudAogICAgICAgICAgKiAgaWYgd2UncmUgb24gYSAzMmJpdCBvciA2NGJpdCBhcmNoLCBzaW5jZSB3ZSB1c2Ugc2l6ZW9mKHVpbnRwdHJfdCkKQEAgLTYwLDEzICs2MCwxMyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gTWFzaChyZXN1bHQsICpwdHIrKyk7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZSAmPSAoKHNpemVvZih1aW50cHRyX3QpIDw8IDIpIC0gMSk7Ci0gICAgICAgIAorCiAgICAgICAgIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4ocHRyKTsKICAgICAgICAgY29uc3QgdWludDMyX3QqIHN0b3AgPSBkYXRhICsgKHNpemUgPj4gMik7CiAgICAgICAgIHdoaWxlIChkYXRhIDwgc3RvcCkgewogICAgICAgICAgICAgcmVzdWx0ID0gTWFzaChyZXN1bHQsICpkYXRhKyspOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqICBzbWFzaCB1cyBkb3duIHRvIDMyYml0cyBpZiB3ZSB3ZXJlIDY0LiBOb3RlIHRoYXQgd2hlbiB1aW50cHRyX3QgaXMKICAgICAgICAgICogIDMyYml0cywgdGhpcyBjb2RlLXBhdGggc2hvdWxkIGdvIGF3YXksIGJ1dCBJIHN0aWxsIGdvdCBhIHdhcm5pbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta0NodW5rQWxsb2MuaCBiL2luY2x1ZGUvY29yZS9Ta0NodW5rQWxsb2MuaAppbmRleCAxMDI5NjJiLi4xYjUyYTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tDaHVua0FsbG9jLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrQ2h1bmtBbGxvYy5oCkBAIC0yNywxMiArMjcsMTIgQEAKICAgICAgICAga1JldHVybk5pbF9BbGxvY0ZhaWxUeXBlLAogICAgICAgICBrVGhyb3dfQWxsb2NGYWlsVHlwZQogICAgIH07Ci0gICAgCisKICAgICB2b2lkKiBhbGxvYyhzaXplX3QgYnl0ZXMsIEFsbG9jRmFpbFR5cGUpOwogICAgIHZvaWQqIGFsbG9jVGhyb3coc2l6ZV90IGJ5dGVzKSB7CiAgICAgICAgIHJldHVybiB0aGlzLT5hbGxvYyhieXRlcywga1Rocm93X0FsbG9jRmFpbFR5cGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBDYWxsIHRoaXMgdG8gdW5hbGxvYyB0aGUgbW9zdC1yZWNlbnRseSBhbGxvY2F0ZWQgcHRyIGJ5IGFsbG9jKCkuIE9uCiAgICAgICAgIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJlZWQgaXMgcmV0dXJuZWQsIG9yIDAgaWYgdGhlIGJsb2NrIGNvdWxkCiAgICAgICAgIG5vdCBiZSB1bmFsbG9jYXRlZC4gVGhpcyBpcyBhIGhpbnQgdG8gdGhlIHVuZGVybHlpbmcgYWxsb2NhdG9yIHRoYXQKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgdG8gaWdub3JlIHRoaXMgY2FsbCAoYW5kIHJldHVybiAwKS4KICAgICAgKi8KICAgICBzaXplX3QgdW5hbGxvYyh2b2lkKiBwdHIpOwotICAgIAorCiAgICAgc2l6ZV90IHRvdGFsQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBmVG90YWxDYXBhY2l0eTsgfQogICAgIGludCBibG9ja0NvdW50KCkgY29uc3QgeyByZXR1cm4gZkJsb2NrQ291bnQ7IH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrQ2xpcFN0YWNrLmggYi9pbmNsdWRlL2NvcmUvU2tDbGlwU3RhY2suaAppbmRleCBjNDUwZmE4Li4yYWIxMThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tDbGlwU3RhY2suaAorKysgYi9pbmNsdWRlL2NvcmUvU2tDbGlwU3RhY2suaApAQCAtNDUsMjEgKzQ1LDIxIEBACiAgICAgICAgIC8vIFRoZSBib3VuZGluZyBib3ggY29udGFpbnMgYWxsIHRoZSBwaXhlbHMgdGhhdCBjYW5ub3QgYmUgd3JpdHRlbiB0by4KICAgICAgICAgLy8gVGhlIHJlYWwgYm91bmQgZXh0ZW5kcyBvdXQgdG8gaW5maW5pdHkgYW5kIGFsbCB0aGUgcGl4ZWxzIG91dHNpZGUKICAgICAgICAgLy8gb2YgdGhlIGJvdW5kIGNhbiBiZSB3cml0dGVuIHRvLiBOb3RlIHRoYXQgc29tZSBvZiB0aGUgcGl4ZWxzIGluc2lkZQotICAgICAgICAvLyB0aGUgYm91bmQgbWF5IGFsc28gYmUgd3JpdGVhYmxlIGJ1dCBhbGwgcGl4ZWxzIHRoYXQgY2Fubm90IGJlIAorICAgICAgICAvLyB0aGUgYm91bmQgbWF5IGFsc28gYmUgd3JpdGVhYmxlIGJ1dCBhbGwgcGl4ZWxzIHRoYXQgY2Fubm90IGJlCiAgICAgICAgIC8vIHdyaXR0ZW4gdG8gYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW5zaWRlLgogICAgICAgICBrSW5zaWRlT3V0X0JvdW5kc1R5cGUKICAgICB9OwogCiAgICAgLyoqCiAgICAgICogZ2V0Qm91bmRzIHBsYWNlcyB0aGUgY3VycmVudCBmaW5pdGUgYm91bmQgaW4gaXRzIGZpcnN0IHBhcmFtZXRlci4gSW4gaXRzCi0gICAgICogc2Vjb25kLCBpdCBpbmRpY2F0ZXMgd2hpY2gga2luZCBvZiBib3VuZCBpcyBiZWluZyByZXR1cm5lZC4gSWYgCisgICAgICogc2Vjb25kLCBpdCBpbmRpY2F0ZXMgd2hpY2gga2luZCBvZiBib3VuZCBpcyBiZWluZyByZXR1cm5lZC4gSWYKICAgICAgKiAnY2FudkZpbml0ZUJvdW5kJyBpcyBhIG5vcm1hbCBib3VuZGluZyBib3ggdGhlbiBpdCBlbmNsb3NlcyBhbGwgd3JpdGVhYmxlCi0gICAgICogcGl4ZWxzLiBJZiAnY2FudkZpbml0ZUJvdW5kJyBpcyBhbiBpbnNpZGUgb3V0IGJvdW5kaW5nIGJveCB0aGVuIGl0IAorICAgICAqIHBpeGVscy4gSWYgJ2NhbnZGaW5pdGVCb3VuZCcgaXMgYW4gaW5zaWRlIG91dCBib3VuZGluZyBib3ggdGhlbiBpdAogICAgICAqIGVuY2xvc2VzIGFsbCB0aGUgdW4td3JpdGVhYmxlIHBpeGVscyBhbmQgdGhlIHRydWUvbm9ybWFsIGJvdW5kIGlzIHRoZQogICAgICAqIGluZmluaXRlIHBsYW5lLiBpc0ludGVyc2VjdGlvbk9mUmVjdHMgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyCiAgICAgICogdGhhdCBpcyB0cnVlIGlmICdjYW52RmluaXRlQm91bmQnIHJlc3VsdGVkIGZyb20gYW4gaW50ZXJzZWN0aW9uIG9mIHJlY3RzLgogICAgICAqLwotICAgIHZvaWQgZ2V0Qm91bmRzKFNrUmVjdCogY2FudkZpbml0ZUJvdW5kLCAKKyAgICB2b2lkIGdldEJvdW5kcyhTa1JlY3QqIGNhbnZGaW5pdGVCb3VuZCwKICAgICAgICAgICAgICAgICAgICBCb3VuZHNUeXBlKiBib3VuZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNJbnRlcnNlY3Rpb25PZlJlY3RzID0gTlVMTCkgY29uc3Q7CiAKQEAgLTc0LDcgKzc0LDcgQEAKICAgICB2b2lkIGNsaXBFbXB0eSgpOwogCiAgICAgLyoqCi0gICAgICogaXNXaWRlT3BlbiByZXR1cm5zIHRydWUgaWYgdGhlIGNsaXAgc3RhdGUgY29ycmVzcG9uZHMgdG8gdGhlIGluZmluaXRlIAorICAgICAqIGlzV2lkZU9wZW4gcmV0dXJucyB0cnVlIGlmIHRoZSBjbGlwIHN0YXRlIGNvcnJlc3BvbmRzIHRvIHRoZSBpbmZpbml0ZQogICAgICAqIHBsYW5lIChpLmUuLCBkcmF3cyBhcmUgbm90IGxpbWl0ZWQgYXQgYWxsKQogICAgICAqLwogICAgIGJvb2wgaXNXaWRlT3BlbigpIGNvbnN0OwpAQCAtODIsNyArODIsNyBAQAogICAgIC8qKgogICAgICAqIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBjbGlwIHN0YXRlCiAgICAgICogaXMgbm8gbG9uZ2VyIHZpYWJsZS4gVGhpcyB3aWxsIG9jY3VyIHdoZW5ldmVyIHJlc3RvcmUKLSAgICAgKiBpcyBjYWxsZWQgb3Igd2hlbiBhIGNsaXBEZXZSZWN0IG9yIGNsaXBEZXZQYXRoIGNhbGwgdXBkYXRlcyB0aGUgCisgICAgICogaXMgY2FsbGVkIG9yIHdoZW4gYSBjbGlwRGV2UmVjdCBvciBjbGlwRGV2UGF0aCBjYWxsIHVwZGF0ZXMgdGhlCiAgICAgICogY2xpcCB3aXRoaW4gYW4gZXhpc3Rpbmcgc2F2ZS9yZXN0b3JlIHN0YXRlLiBFYWNoIGNsaXAgc3RhdGUgaXMKICAgICAgKiByZXByZXNlbnRlZCBieSBhIHVuaXF1ZSBnZW5lcmF0aW9uIElELgogICAgICAqLwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgIEl0ZXIoY29uc3QgU2tDbGlwU3RhY2smIHN0YWNrLCBJdGVyU3RhcnQgc3RhcnRMb2MpOwogCiAgICAgICAgIHN0cnVjdCBDbGlwIHsKLSAgICAgICAgICAgIENsaXAoKSA6IGZSZWN0KE5VTEwpLCBmUGF0aChOVUxMKSwgZk9wKFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKSwgCisgICAgICAgICAgICBDbGlwKCkgOiBmUmVjdChOVUxMKSwgZlBhdGgoTlVMTCksIGZPcChTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCksCiAgICAgICAgICAgICAgICAgICAgICBmRG9BQShmYWxzZSkge30KICAgICAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2xpcCYgYSwgY29uc3QgQ2xpcCYgYik7CiAgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENsaXAmIGEsIGNvbnN0IENsaXAmIGIpOwpAQCAtMTQ3LDggKzE0Nyw4IEBACiAgICAgICAgIGNvbnN0IENsaXAqIHByZXYoKTsKIAogICAgICAgICAvKioKLSAgICAgICAgICogTW92ZXMgdGhlIGl0ZXJhdG9yIHRvIHRoZSB0b3Btb3N0IGNsaXAgd2l0aCB0aGUgc3BlY2lmaWVkIFJlZ2lvbk9wIAotICAgICAgICAgKiBhbmQgcmV0dXJucyB0aGF0IGNsaXAuIElmIG5vIGNsaXAgd2l0aCB0aGF0IG9wIGlzIGZvdW5kLCAKKyAgICAgICAgICogTW92ZXMgdGhlIGl0ZXJhdG9yIHRvIHRoZSB0b3Btb3N0IGNsaXAgd2l0aCB0aGUgc3BlY2lmaWVkIFJlZ2lvbk9wCisgICAgICAgICAqIGFuZCByZXR1cm5zIHRoYXQgY2xpcC4gSWYgbm8gY2xpcCB3aXRoIHRoYXQgb3AgaXMgZm91bmQsCiAgICAgICAgICAqIHJldHVybnMgTlVMTC4KICAgICAgICAgICovCiAgICAgICAgIGNvbnN0IENsaXAqIHNraXBUb1RvcG1vc3QoU2tSZWdpb246Ok9wIG9wKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICBjb25zdCBDbGlwKiB1cGRhdGVDbGlwKGNvbnN0IFNrQ2xpcFN0YWNrOjpSZWMqIHJlYyk7CiAgICAgfTsKIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBUaGUgQjJUSXRlciBpdGVyYXRlcyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIHRvIHRoZSB0b3AuCiAgICAgICogSXQgaW5oZXJpdHMgcHJpdmF0ZWx5IGZyb20gSXRlciB0byBwcmV2ZW50IGFjY2VzcyB0byByZXZlcnNlIGl0ZXJhdGlvbi4KICAgICAgKi8KQEAgLTE3OSwxMCArMTc5LDEwIEBACiAgICAgICAgIEIyVEl0ZXIoKSB7fQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBXcmFwIEl0ZXIncyAyIHBhcmFtZXRlciBjdG9yIHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIHRvIHRoZSAKKyAgICAgICAgICogV3JhcCBJdGVyJ3MgMiBwYXJhbWV0ZXIgY3RvciB0byBmb3JjZSBpbml0aWFsaXphdGlvbiB0byB0aGUKICAgICAgICAgICogYmVnaW5uaW5nIG9mIHRoZSBkZXF1ZS9ib3R0b20gb2YgdGhlIHN0YWNrCiAgICAgICAgICAqLwotICAgICAgICBCMlRJdGVyKGNvbnN0IFNrQ2xpcFN0YWNrJiBzdGFjaykgCisgICAgICAgIEIyVEl0ZXIoY29uc3QgU2tDbGlwU3RhY2smIHN0YWNrKQogICAgICAgICA6IElOSEVSSVRFRChzdGFjaywga0JvdHRvbV9JdGVyU3RhcnQpIHsKICAgICAgICAgfQogCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgdXNpbmcgSXRlcjo6bmV4dDsKIAogICAgICAgICAvKioKLSAgICAgICAgICogV3JhcCBJdGVyOjpyZXNldCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiB0byB0aGUgCisgICAgICAgICAqIFdyYXAgSXRlcjo6cmVzZXQgdG8gZm9yY2UgaW5pdGlhbGl6YXRpb24gdG8gdGhlCiAgICAgICAgICAqIGJlZ2lubmluZyBvZiB0aGUgZGVxdWUvYm90dG9tIG9mIHRoZSBzdGFjawogICAgICAgICAgKi8KICAgICAgICAgdm9pZCByZXNldChjb25zdCBTa0NsaXBTdGFjayYgc3RhY2spIHsKQEAgLTIwMywxNSArMjAzLDE1IEBACiAgICAgfTsKIAogICAgIC8qKgotICAgICAqIEdldENvbnNlcnZhdGl2ZUJvdW5kcyByZXR1cm5zIGEgY29uc2VydmF0aXZlIGJvdW5kIG9mIHRoZSBjdXJyZW50IGNsaXAuIAotICAgICAqIFNpbmNlIHRoaXMgY291bGQgYmUgdGhlIGluZmluaXRlIHBsYW5lIChpZiBpbnZlcnNlIGZpbGxzIHdlcmUgaW52b2x2ZWQpIHRoZSAKLSAgICAgKiBtYXhXaWR0aCBhbmQgbWF4SGVpZ2h0IHBhcmFtZXRlcnMgY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIHJldHVybmVkIGJvdW5kIAorICAgICAqIEdldENvbnNlcnZhdGl2ZUJvdW5kcyByZXR1cm5zIGEgY29uc2VydmF0aXZlIGJvdW5kIG9mIHRoZSBjdXJyZW50IGNsaXAuCisgICAgICogU2luY2UgdGhpcyBjb3VsZCBiZSB0aGUgaW5maW5pdGUgcGxhbmUgKGlmIGludmVyc2UgZmlsbHMgd2VyZSBpbnZvbHZlZCkgdGhlCisgICAgICogbWF4V2lkdGggYW5kIG1heEhlaWdodCBwYXJhbWV0ZXJzIGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSByZXR1cm5lZCBib3VuZAogICAgICAqIHRvIHRoZSBleHBlY3RlZCBkcmF3aW5nIGFyZWEuIFNpbWlsYXJseSwgdGhlIG9mZnNldFggYW5kIG9mZnNldFkgcGFyYW1ldGVycwotICAgICAqIGFsbG93IHRoZSBjYWxsZXIgdG8gb2Zmc2V0IHRoZSByZXR1cm5lZCBib3VuZCB0byBhY2NvdW50IGZvciB0cmFuc2xhdGVkIAorICAgICAqIGFsbG93IHRoZSBjYWxsZXIgdG8gb2Zmc2V0IHRoZSByZXR1cm5lZCBib3VuZCB0byBhY2NvdW50IGZvciB0cmFuc2xhdGVkCiAgICAgICogZHJhd2luZyBhcmVhcyAoaS5lLiwgdGhvc2UgcmVzdWx0aW5nIGZyb20gYSBzYXZlTGF5ZXIpLiBGb3IgZmluaXRlIGJvdW5kcywKLSAgICAgKiB0aGUgdHJhbnNsYXRpb24gKCtvZmZzZXRYLCArb2Zmc2V0WSkgaXMgYXBwbGllZCBiZWZvcmUgdGhlIGNsYW1wIHRvIHRoZSAKKyAgICAgKiB0aGUgdHJhbnNsYXRpb24gKCtvZmZzZXRYLCArb2Zmc2V0WSkgaXMgYXBwbGllZCBiZWZvcmUgdGhlIGNsYW1wIHRvIHRoZQogICAgICAqIG1heGltdW0gcmVjdGFuZ2xlOiBbMCxtYXhXaWR0aCkgeCBbMCxtYXhIZWlnaHQpLgotICAgICAqIGlzSW50ZXJzZWN0aW9uT2ZSZWN0cyBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBpcyB0cnVlIHdoZW4gCisgICAgICogaXNJbnRlcnNlY3Rpb25PZlJlY3RzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGlzIHRydWUgd2hlbgogICAgICAqICdkZXZCb3VuZHMnIGlzIHRoZSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIG9mIHJlY3RzLiBJbiB0aGlzIGNhc2UKICAgICAgKiAnZGV2Qm91bmRzJyBpcyB0aGUgZXhhY3QgYW5zd2VyL2NsaXAuCiAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tDb2xvckZpbHRlci5oIGIvaW5jbHVkZS9jb3JlL1NrQ29sb3JGaWx0ZXIuaAppbmRleCA0YzVlZWU3Li45MzViNjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tDb2xvckZpbHRlci5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0NvbG9yRmlsdGVyLmgKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICAgICBhcmUgaWdub3JlZC4KICAgICAqLwogICAgIHN0YXRpYyBTa0NvbG9yRmlsdGVyKiBDcmVhdGVMaWdodGluZ0ZpbHRlcihTa0NvbG9yIG11bCwgU2tDb2xvciBhZGQpOwotICAgIAorCiAgICAgU0tfREVDTEFSRV9GTEFUVEVOQUJMRV9SRUdJU1RSQVJfR1JPVVAoKQogcHJvdGVjdGVkOgogICAgIFNrQ29sb3JGaWx0ZXIoKSB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrQ29sb3JQcml2LmggYi9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaAppbmRleCAwNzNhNGY1Li5hMmUxYmM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaApAQCAtNjcsNyArNjcsNyBAQAogICAgIFNrQVNTRVJUKChpbnQxNl90KXNyYyA9PSBzcmMpOwogICAgIFNrQVNTRVJUKChpbnQxNl90KWRzdCA9PSBkc3QpOwogICAgIFNrQVNTRVJUKCh1aW50OF90KWFscGhhID09IGFscGhhKTsKLSAgICAKKwogICAgIGludCBwcm9kID0gU2tNdWxTMTYoc3JjIC0gZHN0LCBhbHBoYSkgKyAxMjg7CiAgICAgcHJvZCA9IChwcm9kICsgKHByb2QgPj4gOCkpID4+IDg7CiAgICAgcmV0dXJuIGRzdCArIHByb2Q7CkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICB1bnNpZ25lZCByID0gU2tBbHBoYUJsZW5kKFNrR2V0UGFja2VkUjMyKHNyYyksIFNrR2V0UGFja2VkUjMyKGRzdCksIHNjYWxlKTsKICAgICB1bnNpZ25lZCBnID0gU2tBbHBoYUJsZW5kKFNrR2V0UGFja2VkRzMyKHNyYyksIFNrR2V0UGFja2VkRzMyKGRzdCksIHNjYWxlKTsKICAgICB1bnNpZ25lZCBiID0gU2tBbHBoYUJsZW5kKFNrR2V0UGFja2VkQjMyKHNyYyksIFNrR2V0UGFja2VkQjMyKGRzdCksIHNjYWxlKTsKLSAgICAKKwogICAgIHJldHVybiBTa1BhY2tBUkdCMzIoYSwgciwgZywgYik7CiB9CiAKQEAgLTc1NCwzMiArNzU0LDMyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgU2tQTUNvbG9yIFNrQmxlbmRMQ0QxNihpbnQgc3JjQSwgaW50IHNyY1IsIGludCBzcmNHLCBpbnQgc3JjQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IgZHN0LCB1aW50MTZfdCBtYXNrKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUE1Db2xvciBkc3QsIHVpbnQxNl90IG1hc2spIHsKICAgICBpZiAobWFzayA9PSAwKSB7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qICBXZSB3YW50IGFsbCBvZiB0aGVzZSBpbiA1Yml0cywgaGVuY2UgdGhlIHNoaWZ0cyBpbiBjYXNlIG9uZSBvZiB0aGVtCiAgICAgICogIChncmVlbikgaXMgNmJpdHMuCiAgICAgICovCiAgICAgaW50IG1hc2tSID0gU2tHZXRQYWNrZWRSMTYobWFzaykgPj4gKFNLX1IxNl9CSVRTIC0gNSk7CiAgICAgaW50IG1hc2tHID0gU2tHZXRQYWNrZWRHMTYobWFzaykgPj4gKFNLX0cxNl9CSVRTIC0gNSk7CiAgICAgaW50IG1hc2tCID0gU2tHZXRQYWNrZWRCMTYobWFzaykgPj4gKFNLX0IxNl9CSVRTIC0gNSk7Ci0gICAgICAgIAorCiAgICAgLy8gTm93IHVwc2NhbGUgdGhlbSB0byAwLi4zMiwgc28gd2UgY2FuIHVzZSBibGVuZDMyCiAgICAgbWFza1IgPSBTa1Vwc2NhbGUzMVRvMzIobWFza1IpOwogICAgIG1hc2tHID0gU2tVcHNjYWxlMzFUbzMyKG1hc2tHKTsKICAgICBtYXNrQiA9IFNrVXBzY2FsZTMxVG8zMihtYXNrQik7Ci0gICAgIAorCiAgICAgLy8gc3JjQSBoYXMgYmVlbiB1cHNjYWxlZCB0byAyNTYgYmVmb3JlIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24KICAgICBtYXNrUiA9IG1hc2tSICogc3JjQSA+PiA4OwogICAgIG1hc2tHID0gbWFza0cgKiBzcmNBID4+IDg7CiAgICAgbWFza0IgPSBtYXNrQiAqIHNyY0EgPj4gODsKLSAgICAgICAgCisKICAgICBpbnQgZHN0UiA9IFNrR2V0UGFja2VkUjMyKGRzdCk7CiAgICAgaW50IGRzdEcgPSBTa0dldFBhY2tlZEczMihkc3QpOwogICAgIGludCBkc3RCID0gU2tHZXRQYWNrZWRCMzIoZHN0KTsKLSAgICAgICAgCisKICAgICAvLyBMQ0QgYmxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhlIGRzdCBpcyBrbm93bi9yZXF1aXJlZAogICAgIC8vIHRvIGJlIG9wYXF1ZQogICAgIHJldHVybiBTa1BhY2tBUkdCMzIoMHhGRiwKQEAgLTc5MCw3ICs3OTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIFNrUE1Db2xvciBTa0JsZW5kTENEMTZPcGFxdWUoaW50IHNyY1IsIGludCBzcmNHLCBpbnQgc3JjQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IgZHN0LCB1aW50MTZfdCBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUE1Db2xvciBvcGFxdWVEc3QpIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tQTUNvbG9yIG9wYXF1ZURzdCkgewogICAgIGlmIChtYXNrID09IDApIHsKICAgICAgICAgcmV0dXJuIGRzdDsKICAgICB9CkBAIC03OTgsMjMgKzc5OCwyMyBAQAogICAgIGlmICgweEZGRkYgPT0gbWFzaykgewogICAgICAgICByZXR1cm4gb3BhcXVlRHN0OwogICAgIH0KLSAgICAgICAgCisKICAgICAvKiAgV2Ugd2FudCBhbGwgb2YgdGhlc2UgaW4gNWJpdHMsIGhlbmNlIHRoZSBzaGlmdHMgaW4gY2FzZSBvbmUgb2YgdGhlbQogICAgICAqICAoZ3JlZW4pIGlzIDZiaXRzLgogICAgICAqLwogICAgIGludCBtYXNrUiA9IFNrR2V0UGFja2VkUjE2KG1hc2spID4+IChTS19SMTZfQklUUyAtIDUpOwogICAgIGludCBtYXNrRyA9IFNrR2V0UGFja2VkRzE2KG1hc2spID4+IChTS19HMTZfQklUUyAtIDUpOwogICAgIGludCBtYXNrQiA9IFNrR2V0UGFja2VkQjE2KG1hc2spID4+IChTS19CMTZfQklUUyAtIDUpOwotICAgICAgICAKKwogICAgIC8vIE5vdyB1cHNjYWxlIHRoZW0gdG8gMC4uMzIsIHNvIHdlIGNhbiB1c2UgYmxlbmQzMgogICAgIG1hc2tSID0gU2tVcHNjYWxlMzFUbzMyKG1hc2tSKTsKICAgICBtYXNrRyA9IFNrVXBzY2FsZTMxVG8zMihtYXNrRyk7CiAgICAgbWFza0IgPSBTa1Vwc2NhbGUzMVRvMzIobWFza0IpOwotICAgICAgICAKKwogICAgIGludCBkc3RSID0gU2tHZXRQYWNrZWRSMzIoZHN0KTsKICAgICBpbnQgZHN0RyA9IFNrR2V0UGFja2VkRzMyKGRzdCk7CiAgICAgaW50IGRzdEIgPSBTa0dldFBhY2tlZEIzMihkc3QpOwotICAgICAgICAKKwogICAgIC8vIExDRCBibGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgZHN0IGlzIGtub3duL3JlcXVpcmVkCiAgICAgLy8gdG8gYmUgb3BhcXVlCiAgICAgcmV0dXJuIFNrUGFja0FSR0IzMigweEZGLApAQCAtODI5LDI0ICs4MjksMjQgQEAKICAgICBpbnQgc3JjUiA9IFNrQ29sb3JHZXRSKGNvbG9yKTsKICAgICBpbnQgc3JjRyA9IFNrQ29sb3JHZXRHKGNvbG9yKTsKICAgICBpbnQgc3JjQiA9IFNrQ29sb3JHZXRCKGNvbG9yKTsKLSAgICAKKwogICAgIHNyY0EgPSBTa0FscGhhMjU1VG8yNTYoc3JjQSk7Ci0gICAgCisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKICAgICAgICAgZHN0W2ldID0gU2tCbGVuZExDRDE2KHNyY0EsIHNyY1IsIHNyY0csIHNyY0IsIGRzdFtpXSwgc3JjW2ldKTsKICAgICB9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBTa0JsaXRMQ0QxNk9wYXF1ZVJvdyhTa1BNQ29sb3IgZHN0W10sIGNvbnN0IHVpbnQxNl90IHNyY1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ29sb3IgY29sb3IsIGludCB3aWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDb2xvciBjb2xvciwgaW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUE1Db2xvciBvcGFxdWVEc3QpIHsKICAgICBpbnQgc3JjUiA9IFNrQ29sb3JHZXRSKGNvbG9yKTsKICAgICBpbnQgc3JjRyA9IFNrQ29sb3JHZXRHKGNvbG9yKTsKICAgICBpbnQgc3JjQiA9IFNrQ29sb3JHZXRCKGNvbG9yKTsKLSAgICAKKwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgewogICAgICAgICBkc3RbaV0gPSBTa0JsZW5kTENEMTZPcGFxdWUoc3JjUiwgc3JjRywgc3JjQiwgZHN0W2ldLCBzcmNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWVEc3QpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYXF1ZURzdCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tDb21wb3NlU2hhZGVyLmggYi9pbmNsdWRlL2NvcmUvU2tDb21wb3NlU2hhZGVyLmgKaW5kZXggNzc3MjlkOS4uYThhOGUwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrQ29tcG9zZVNoYWRlci5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0NvbXBvc2VTaGFkZXIuaApAQCAtMzMsNyArMzMsNyBAQAogICAgICovCiAgICAgU2tDb21wb3NlU2hhZGVyKFNrU2hhZGVyKiBzQSwgU2tTaGFkZXIqIHNCLCBTa1hmZXJtb2RlKiBtb2RlID0gTlVMTCk7CiAgICAgdmlydHVhbCB+U2tDb21wb3NlU2hhZGVyKCk7Ci0gICAgCisKICAgICAvLyBvdmVycmlkZQogICAgIHZpcnR1YWwgYm9vbCBzZXRDb250ZXh0KGNvbnN0IFNrQml0bWFwJiBkZXZpY2UsIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa01hdHJpeCYgbWF0cml4KTsKICAgICB2aXJ0dWFsIHZvaWQgc2hhZGVTcGFuKGludCB4LCBpbnQgeSwgU2tQTUNvbG9yIHJlc3VsdFtdLCBpbnQgY291bnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrRGF0YS5oIGIvaW5jbHVkZS9jb3JlL1NrRGF0YS5oCmluZGV4IGUzNzE5MzEuLjRkYjE3YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0RhdGEuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tEYXRhLmgKQEAgLTYxLDEyICs2MSwxMiBAQAogICAgICAqICBvZiBzY29wZSwgYWxsb3dpbmcgZm9yIGN1c3RvbSBhbGxvY2F0aW9uL2ZyZWVpbmcgb2YgdGhlIGRhdGEuCiAgICAgICovCiAgICAgdHlwZWRlZiB2b2lkICgqUmVsZWFzZVByb2MpKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IGxlbmd0aCwgdm9pZCogY29udGV4dCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgQ3JlYXRlIGEgbmV3IGRhdGFyZWYgYnkgY29weWluZyB0aGUgc3BlY2lmaWVkIGRhdGEKICAgICAgKi8KICAgICBzdGF0aWMgU2tEYXRhKiBOZXdXaXRoQ29weShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBDcmVhdGUgYSBuZXcgZGF0YXJlZiBieSBjb3B5aW5nIHRoZSBzcGVjaWZpZWQgYy1zdHJpbmcKICAgICAgKiAgKGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIGJ5dGVzKS4gVGhlIHJldHVybmVkIFNrRGF0YSB3aWxsIGhhdmUgc2l6ZSgpCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICogIGFzICIiLgogICAgICAqLwogICAgIHN0YXRpYyBTa0RhdGEqIE5ld1dpdGhDU3RyaW5nKGNvbnN0IGNoYXIgY3N0cltdKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBDcmVhdGUgYSBuZXcgZGF0YXJlZiwgdGFraW5nIHRoZSBkYXRhIHB0ciBhcyBpcywgYW5kIHVzaW5nIHRoZQogICAgICAqICByZWxlYXNlcHJvYyB0byBmcmVlIGl0LiBUaGUgcHJvYyBtYXkgYmUgTlVMTC4KQEAgLTExOCwxMCArMTE4LDEwIEBACiAKICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTa0F1dG9UVW5yZWYgY3JlYXRlcyBhbiBpbnRlcm5hbCBoZWxwZXIgY2xhc3MKICAgICAvLyB0aGF0IGRlcml2ZXMgZnJvbSBTa0RhdGEgKGkuZS4sIEJsb2NrUmVmKSB0byBwcmV2ZW50IHJlZnNcdW5yZWZzLgotICAgIC8vIFRoaXMgaGVscGVyIGNsYXNzIGdlbmVyYXRlcyBhIGNvbXBpbGVyIHdhcm5pbmcgb24gV2luZG93cyBzaW5jZSB0aGUgCisgICAgLy8gVGhpcyBoZWxwZXIgY2xhc3MgZ2VuZXJhdGVzIGEgY29tcGlsZXIgd2FybmluZyBvbiBXaW5kb3dzIHNpbmNlIHRoZQogICAgIC8vIFNrRGF0YSdzIGRlc3RydWN0b3IgaXMgcHJpdmF0ZS4gVGhpcyBmcmllbmRpbmcgZ2l2ZXMgdGhlIGhlbHBlciBjbGFzcwogICAgIC8vIGFjY2VzcyB0byB0aGUgZGVzdHJ1Y3Rvci4KLSAgICBmcmllbmQgY2xhc3MgU2tBdXRvVFVucmVmPFNrRGF0YT46OkJsb2NrUmVmPFNrRGF0YT47IAorICAgIGZyaWVuZCBjbGFzcyBTa0F1dG9UVW5yZWY8U2tEYXRhPjo6QmxvY2tSZWY8U2tEYXRhPjsKIAogICAgIHR5cGVkZWYgU2tGbGF0dGVuYWJsZSBJTkhFUklURUQ7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrRGF0YVNldC5oIGIvaW5jbHVkZS9jb3JlL1NrRGF0YVNldC5oCmluZGV4IDczNGMzYzMuLjJlNWQ5NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0RhdGFTZXQuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tEYXRhU2V0LmgKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIFNrQVNTRVJUKCF0aGlzLT5kb25lKCkpOwogICAgICAgICAgICAgZlBhaXIgKz0gMTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IFNrRGF0YVNldDo6UGFpciogZlBhaXI7CiAgICAgICAgIGNvbnN0IFNrRGF0YVNldDo6UGFpciogZlN0b3A7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tEZXF1ZS5oIGIvaW5jbHVkZS9jb3JlL1NrRGVxdWUuaAppbmRleCBkMjlmNzJhLi5lZWYzMzVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tEZXF1ZS5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0RlcXVlLmgKQEAgLTE0LDggKzE0LDggQEAKIAogLyoKICAqIFRoZSBkZXF1ZSBjbGFzcyB3b3JrcyBieSBibGluZGx5IGNyZWF0aW5nIG1lbW9yeSBzcGFjZSBvZiBhIHNwZWNpZmllZCBlbGVtZW50Ci0gKiBzaXplLiBJdCBtYW5hZ2VzIHRoZSBtZW1vcnkgYXMgYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgYmxvY2tzIGVhY2ggb2Ygd2hpY2ggCi0gKiBjYW4gY29udGFpbiBtdWx0aXBsZSBlbGVtZW50cy4gUHVzaGVzIGFuZCBwb3BzIGFkZC9yZW1vdmUgYmxvY2tzIGZyb20gdGhlIAorICogc2l6ZS4gSXQgbWFuYWdlcyB0aGUgbWVtb3J5IGFzIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIGJsb2NrcyBlYWNoIG9mIHdoaWNoCisgKiBjYW4gY29udGFpbiBtdWx0aXBsZSBlbGVtZW50cy4gUHVzaGVzIGFuZCBwb3BzIGFkZC9yZW1vdmUgYmxvY2tzIGZyb20gdGhlCiAgKiBiZWdpbm5pbmcvZW5kIG9mIHRoZSBsaXN0IGFzIG5lY2Vzc2FyeSB3aGlsZSBlYWNoIGJsb2NrIHRyYWNrcyB0aGUgdXNlZAogICogcG9ydGlvbiBvZiBpdHMgbWVtb3J5LgogICogT25lIGJlaGF2aW9yIHRvIGJlIGF3YXJlIG9mIGlzIHRoYXQgdGhlIHBvcHMgZG8gbm90IGltbWVkaWF0ZWx5IHJlbW92ZSBhbgpAQCAtODUsMjIgKzg1LDIyIEBACiAgICAgICAgIGNoYXIqICAgICAgICAgICBmUG9zOwogICAgICAgICBzaXplX3QgICAgICAgICAgZkVsZW1TaXplOwogICAgIH07Ci0gICAgCisKICAgICAvLyBJbmhlcml0IHByaXZhdGVseSBmcm9tIEl0ZXIgdG8gcHJldmVudCBhY2Nlc3MgdG8gcmV2ZXJzZSBpdGVyYXRpb24KICAgICBjbGFzcyBGMkJJdGVyIDogcHJpdmF0ZSBJdGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEYyQkl0ZXIoKSB7fQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBXcmFwIEl0ZXIncyAyIHBhcmFtZXRlciBjdG9yIHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIHRvIHRoZSAKKyAgICAgICAgICogV3JhcCBJdGVyJ3MgMiBwYXJhbWV0ZXIgY3RvciB0byBmb3JjZSBpbml0aWFsaXphdGlvbiB0byB0aGUKICAgICAgICAgICogYmVnaW5uaW5nIG9mIHRoZSBkZXF1ZQogICAgICAgICAgKi8KICAgICAgICAgRjJCSXRlcihjb25zdCBTa0RlcXVlJiBkKSA6IElOSEVSSVRFRChkLCBrRnJvbnRfSXRlclN0YXJ0KSB7fQogCiAgICAgICAgIHVzaW5nIEl0ZXI6Om5leHQ7CiAKLSAgICAgICAgLyoqIAotICAgICAgICAgKiBXcmFwIEl0ZXI6OnJlc2V0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIAorICAgICAgICAvKioKKyAgICAgICAgICogV3JhcCBJdGVyOjpyZXNldCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgICAgICAgKiBkZXF1ZQogICAgICAgICAgKi8KICAgICAgICAgdm9pZCByZXNldChjb25zdCBTa0RlcXVlJiBkKSB7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAogcHJpdmF0ZToKICAgICAvLyBhbGxvdyB1bml0IHRlc3QgdG8gY2FsbCBudW1CbG9ja3NBbGxvY2F0ZWQKLSAgICBmcmllbmQgY2xhc3MgRGVxdWVVbml0VGVzdEhlbHBlcjsgCisgICAgZnJpZW5kIGNsYXNzIERlcXVlVW5pdFRlc3RIZWxwZXI7CiAKICAgICB2b2lkKiAgIGZGcm9udDsKICAgICB2b2lkKiAgIGZCYWNrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrRGV2aWNlLmggYi9pbmNsdWRlL2NvcmUvU2tEZXZpY2UuaAppbmRleCA1Y2Y1YzUwLi4zMjYxMTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tEZXZpY2UuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tEZXZpY2UuaApAQCAtMTM4LDEwICsxMzgsMTAgQEAKICAgICAgKi8KICAgICBjb25zdCBTa0lQb2ludCYgZ2V0T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gZk9yaWdpbjsgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIG9uQXR0YWNoVG9DYW52YXMgaXMgaW52b2tlZCB3aGVuZXZlciBhIGRldmljZSBpcyBpbnN0YWxsZWQgaW4gYSBjYW52YXMKICAgICAgKiAoaS5lLiwgc2V0RGV2aWNlLCBzYXZlTGF5ZXIgKGZvciB0aGUgbmV3IGRldmljZSBjcmVhdGVkIGJ5IHRoZSBzYXZlKSwKLSAgICAgKiBhbmQgU2tDYW52YXMnIFNrRGV2aWNlICYgU2tCaXRtYXAgLXRha2luZyBjdG9ycykuIEl0IGFsbG93cyB0aGUgCisgICAgICogYW5kIFNrQ2FudmFzJyBTa0RldmljZSAmIFNrQml0bWFwIC10YWtpbmcgY3RvcnMpLiBJdCBhbGxvd3MgdGhlCiAgICAgICogZGV2aWNlcyB0byBwcmVwYXJlIGZvciBkcmF3aW5nIChlLmcuLCBsb2NraW5nIHRoZWlyIHBpeGVscywgZXRjLikKICAgICAgKi8KICAgICB2aXJ0dWFsIHZvaWQgb25BdHRhY2hUb0NhbnZhcyhTa0NhbnZhcyogY2FudmFzKSB7CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAvKioKICAgICAgKiBvbkRldGFjaEZyb21DYW52YXMgbm90aWZpZXMgYSBkZXZpY2UgdGhhdCBpdCB3aWxsIG5vIGxvbmdlciBiZSBkcmF3biB0by4KICAgICAgKiBJdCBnaXZlcyB0aGUgZGV2aWNlIGEgY2hhbmNlIHRvIGNsZWFuIHVwIChlLmcuLCB1bmxvY2sgaXRzIHBpeGVscykuIEl0Ci0gICAgICogaXMgaW52b2tlZCBmcm9tIHNldERldmljZSAoZm9yIHRoZSBkaXNwbGFjZWQgZGV2aWNlKSwgcmVzdG9yZSBhbmQgCisgICAgICogaXMgaW52b2tlZCBmcm9tIHNldERldmljZSAoZm9yIHRoZSBkaXNwbGFjZWQgZGV2aWNlKSwgcmVzdG9yZSBhbmQKICAgICAgKiBwb3NzaWJseSBmcm9tIFNrQ2FudmFzJyBkdG9yLgogICAgICAqLwogICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaEZyb21DYW52YXMoKSB7CkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICAgICAgYWNjZXNzIHRoZSBwaXhlbHMgZGlyZWN0bHkuIE5vdGU6IG9ubHkgdGhlIHBpeGVscyBmaWVsZCBzaG91bGQgYmUKICAgICAgICAgYWx0ZXJlZC4gVGhlIGNvbmZpZy93aWR0aC9oZWlnaHQvcm93Ynl0ZXMgbXVzdCByZW1haW4gdW5jaGFuZ2VkLgogICAgICAgICBAcGFyYW0gYml0bWFwIFRoZSBkZXZpY2UncyBiaXRtYXAKLSAgICAgICAgQHJldHVybiBFY2hvIHRoZSBiaXRtYXAgcGFyYW1ldGVyLCBvciBhbiBhbHRlcm5hdGUgKHNoYWRvdykgYml0bWFwIAorICAgICAgICBAcmV0dXJuIEVjaG8gdGhlIGJpdG1hcCBwYXJhbWV0ZXIsIG9yIGFuIGFsdGVybmF0ZSAoc2hhZG93KSBiaXRtYXAKICAgICAgICAgICAgIG1haW50YWluZWQgYnkgdGhlIHN1YmNsYXNzLgogICAgICovCiAgICAgdmlydHVhbCBjb25zdCBTa0JpdG1hcCYgb25BY2Nlc3NCaXRtYXAoU2tCaXRtYXAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta0RpdGhlci5oIGIvaW5jbHVkZS9jb3JlL1NrRGl0aGVyLmgKaW5kZXggNjkyYzdlNC4uZDgyYjQxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrRGl0aGVyLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrRGl0aGVyLmgKQEAgLTcxLDcgKzcxLDcgQEAKIHN0YXRpYyBpbmxpbmUgU2tQTUNvbG9yIFNrRGl0aGVyQVJHQjMyRm9yNTY1KFNrUE1Db2xvciBjLCB1bnNpZ25lZCBkaXRoZXIpCiB7CiAgICAgU2tBU1NFUlQoZGl0aGVyIDw9IFNLX0RpdGhlclZhbHVlTWF4NTY1KTsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNhID0gU2tHZXRQYWNrZWRBMzIoYyk7CiAgICAgZGl0aGVyID0gU2tBbHBoYU11bChkaXRoZXIsIFNrQWxwaGEyNTVUbzI1NihzYSkpOwogCkBAIC04MSwyMSArODEsMjEgQEAKICAgICBzciA9IFNrRElUSEVSX1IzMl9GT1JfNTY1KHNyLCBkaXRoZXIpOwogICAgIHNnID0gU2tESVRIRVJfRzMyX0ZPUl81NjUoc2csIGRpdGhlcik7CiAgICAgc2IgPSBTa0RJVEhFUl9CMzJfRk9SXzU2NShzYiwgZGl0aGVyKTsKLSAgICAKKwogICAgIHJldHVybiBTa1BhY2tBUkdCMzIoc2EsIHNyLCBzZywgc2IpOwogfQogCiBzdGF0aWMgaW5saW5lIFNrUE1Db2xvciBTa0RpdGhlclJHQjMyRm9yNTY1KFNrUE1Db2xvciBjLCB1bnNpZ25lZCBkaXRoZXIpCiB7CiAgICAgU2tBU1NFUlQoZGl0aGVyIDw9IFNLX0RpdGhlclZhbHVlTWF4NTY1KTsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNyID0gU2tHZXRQYWNrZWRSMzIoYyk7CiAgICAgdW5zaWduZWQgc2cgPSBTa0dldFBhY2tlZEczMihjKTsKICAgICB1bnNpZ25lZCBzYiA9IFNrR2V0UGFja2VkQjMyKGMpOwogICAgIHNyID0gU2tESVRIRVJfUjMyX0ZPUl81NjUoc3IsIGRpdGhlcik7CiAgICAgc2cgPSBTa0RJVEhFUl9HMzJfRk9SXzU2NShzZywgZGl0aGVyKTsKICAgICBzYiA9IFNrRElUSEVSX0IzMl9GT1JfNTY1KHNiLCBkaXRoZXIpOwotICAgIAorCiAgICAgcmV0dXJuIFNrUGFja0FSR0IzMigweEZGLCBzciwgc2csIHNiKTsKIH0KIApAQCAtMTEyLDI5ICsxMTIsMjkgQEAKIHN0YXRpYyBpbmxpbmUgdWludDE2X3QgU2tEaXRoZXJSR0IzMlRvNTY1KFNrUE1Db2xvciBjLCB1bnNpZ25lZCBkaXRoZXIpCiB7CiAgICAgU2tBU1NFUlQoZGl0aGVyIDw9IFNLX0RpdGhlclZhbHVlTWF4NTY1KTsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNyID0gU2tHZXRQYWNrZWRSMzIoYyk7CiAgICAgdW5zaWduZWQgc2cgPSBTa0dldFBhY2tlZEczMihjKTsKICAgICB1bnNpZ25lZCBzYiA9IFNrR2V0UGFja2VkQjMyKGMpOwogICAgIHNyID0gU2tESVRIRVJfUjMyVG81NjUoc3IsIGRpdGhlcik7CiAgICAgc2cgPSBTa0RJVEhFUl9HMzJUbzU2NShzZywgZGl0aGVyKTsKICAgICBzYiA9IFNrRElUSEVSX0IzMlRvNTY1KHNiLCBkaXRoZXIpOwotICAgIAorCiAgICAgcmV0dXJuIFNrUGFja1JHQjE2KHNyLCBzZywgc2IpOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQxNl90IFNrRGl0aGVyQVJHQjMyVG81NjUoVThDUFUgc2EsIFNrUE1Db2xvciBjLCB1bnNpZ25lZCBkaXRoZXIpCiB7Ci0gICAgU2tBU1NFUlQoZGl0aGVyIDw9IFNLX0RpdGhlclZhbHVlTWF4NTY1KTsgICAgCisgICAgU2tBU1NFUlQoZGl0aGVyIDw9IFNLX0RpdGhlclZhbHVlTWF4NTY1KTsKICAgICBkaXRoZXIgPSBTa0FscGhhTXVsKGRpdGhlciwgU2tBbHBoYTI1NVRvMjU2KHNhKSk7Ci0gICAgCisKICAgICB1bnNpZ25lZCBzciA9IFNrR2V0UGFja2VkUjMyKGMpOwogICAgIHVuc2lnbmVkIHNnID0gU2tHZXRQYWNrZWRHMzIoYyk7CiAgICAgdW5zaWduZWQgc2IgPSBTa0dldFBhY2tlZEIzMihjKTsKICAgICBzciA9IFNrRElUSEVSX1IzMlRvNTY1KHNyLCBkaXRoZXIpOwogICAgIHNnID0gU2tESVRIRVJfRzMyVG81NjUoc2csIGRpdGhlcik7CiAgICAgc2IgPSBTa0RJVEhFUl9CMzJUbzU2NShzYiwgZGl0aGVyKTsKLSAgICAKKwogICAgIHJldHVybiBTa1BhY2tSR0IxNihzciwgc2csIHNiKTsKIH0KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgciA9IFNrRElUSEVSX1IzMlRvNDQ0NChyLCBkaXRoZXIpOwogICAgIGcgPSBTa0RJVEhFUl9HMzJUbzQ0NDQoZywgZGl0aGVyKTsKICAgICBiID0gU2tESVRIRVJfQjMyVG80NDQ0KGIsIGRpdGhlcik7Ci0gICAgCisKICAgICByZXR1cm4gU2tQYWNrQVJHQjQ0NDQoYSwgciwgZywgYik7CiB9CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgIHIgPSBTa0RJVEhFUl9SMzJUbzQ0NDQociwgZGl0aGVyKTsKICAgICBnID0gU2tESVRIRVJfRzMyVG80NDQ0KGcsIGRpdGhlcik7CiAgICAgYiA9IFNrRElUSEVSX0IzMlRvNDQ0NChiLCBkaXRoZXIpOwotICAgIAorCiAgICAgcmV0dXJuIFNrUGFja0FSR0I0NDQ0KGEsIHIsIGcsIGIpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tEcmF3RmlsdGVyLmggYi9pbmNsdWRlL2NvcmUvU2tEcmF3RmlsdGVyLmgKaW5kZXggMWU4NDNlYy4uNzNiMmNhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrRHJhd0ZpbHRlci5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0RyYXdGaWx0ZXIuaApAQCAtMjQsNyArMjQsNyBAQAogY2xhc3MgU2tEcmF3RmlsdGVyIDogcHVibGljIFNrUmVmQ250IHsKIHB1YmxpYzoKICAgICBTS19ERUNMQVJFX0lOU1RfQ09VTlQoU2tEcmF3RmlsdGVyKQotICAgIAorCiAgICAgZW51bSBUeXBlIHsKICAgICAgICAga1BhaW50X1R5cGUsCiAgICAgICAgIGtQb2ludF9UeXBlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrRHJhd0xvb3Blci5oIGIvaW5jbHVkZS9jb3JlL1NrRHJhd0xvb3Blci5oCmluZGV4IGYxZmI1YmQuLjhhMjE4YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0RyYXdMb29wZXIuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tEcmF3TG9vcGVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgKiAgaW5pdCgpIHdhcyBmaXJzdCBjYWxsZWQuCiAgICAgICovCiAgICAgdmlydHVhbCBib29sIG5leHQoU2tDYW52YXMqLCBTa1BhaW50KiBwYWludCkgPSAwOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIGZhc3QgYm91bmRzIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBlbmFibGUgdGhlIHBhaW50IHRvIGJlIGN1bGxlZCBlYXJseQogICAgICAqIGluIHRoZSBkcmF3aW5nIHBpcGVsaW5lLiBJZiBhIHN1YmNsYXNzIGNhbiBzdXBwb3J0IHRoaXMgZmVhdHVyZSBpdCBtdXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tGbGF0ZS5oIGIvaW5jbHVkZS9jb3JlL1NrRmxhdGUuaAppbmRleCBjMTExZGUwLi5lNGMxNDE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tGbGF0ZS5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0ZsYXRlLmgKQEAgLTMwLDE5ICszMCwxOSBAQAogICAgICAqICBwdXR0aW5nIHRoZSByZXN1bHQgaW50byBkc3QuICBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBzdGF0aWMgYm9vbCBEZWZsYXRlKFNrU3RyZWFtKiBzcmMsIFNrV1N0cmVhbSogZHN0KTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBVc2UgdGhlIGZsYXRlIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byBjb21wcmVzcyB0aGUgZGF0YSBpbiBzcmMsCiAgICAgICogIHB1dHRpbmcgdGhlIHJlc3VsdCBpbnRvIGRzdC4gIFJldHVybnMgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHN0YXRpYyBib29sIERlZmxhdGUoY29uc3Qgdm9pZCogc3JjLCBzaXplX3QgbGVuLCBTa1dTdHJlYW0qIGRzdCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgVXNlIHRoZSBmbGF0ZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gY29tcHJlc3MgdGhlIGRhdGEsCiAgICAgICogIHB1dHRpbmcgdGhlIHJlc3VsdCBpbnRvIGRzdC4gIFJldHVybnMgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHN0YXRpYyBib29sIERlZmxhdGUoY29uc3QgU2tEYXRhKiwgU2tXU3RyZWFtKiBkc3QpOwotICAgIAorCiAgICAgLyoqIFVzZSB0aGUgZmxhdGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHRvIGRlY29tcHJlc3MgdGhlIGRhdGEgaW4gc3JjLAogICAgICAgICBwdXR0aW5nIHRoZSByZXN1bHQgaW50byBkc3QuICBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIG9jY3Vycy4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta0ZsYXR0ZW5hYmxlLmggYi9pbmNsdWRlL2NvcmUvU2tGbGF0dGVuYWJsZS5oCmluZGV4IDliMzgwMzIuLjZkZjlmOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0ZsYXR0ZW5hYmxlLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrRmxhdHRlbmFibGUuaApAQCAtNTQsNyArNTQsNyBAQAogICAgIH0KIAogLyoqIFxjbGFzcyBTa0ZsYXR0ZW5hYmxlCi0gCisKICBTa0ZsYXR0ZW5hYmxlIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBmbGF0dGVuZWQKICBpbnRvIGEgZGF0YSBzdHJlYW0gZm9yIGVpdGhlciB0cmFuc3BvcnQgb3IgYXMgcGFydCBvZiB0aGUga2V5IHRvIHRoZQogIGZvbnQgY2FjaGUuCkBAIC02NCwxNSArNjQsMTUgQEAKICAgICBTS19ERUNMQVJFX0lOU1RfQ09VTlQoU2tGbGF0dGVuYWJsZSkKIAogICAgIHR5cGVkZWYgU2tGbGF0dGVuYWJsZSogKCpGYWN0b3J5KShTa0ZsYXR0ZW5hYmxlUmVhZEJ1ZmZlciYpOwotICAgIAorCiAgICAgU2tGbGF0dGVuYWJsZSgpIHt9Ci0gICAgCisKICAgICAvKiogSW1wbGVtZW50IHRoaXMgdG8gcmV0dXJuIGEgZmFjdG9yeSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgY2FuIGJlIGNhbGxlZAogICAgICB0byByZWNyZWF0ZSB5b3VyIGNsYXNzIGdpdmVuIGEgYnVmZmVyIChwcmV2aW91c2x5IHdyaXR0ZW4gdG8gYnkgeW91cgogICAgICBvdmVycmlkZSBvZiBmbGF0dGVuKCkuCiAgICAgICovCiAgICAgdmlydHVhbCBGYWN0b3J5IGdldEZhY3RvcnkoKSA9IDA7Ci0gICAgCisKICAgICBzdGF0aWMgRmFjdG9yeSBOYW1lVG9GYWN0b3J5KGNvbnN0IGNoYXIgbmFtZVtdKTsKICAgICBzdGF0aWMgY29uc3QgY2hhciogRmFjdG9yeVRvTmFtZShGYWN0b3J5KTsKICAgICBzdGF0aWMgdm9pZCBSZWdpc3Rlcihjb25zdCBjaGFyIG5hbWVbXSwgRmFjdG9yeSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tHcmFwaGljcy5oIGIvaW5jbHVkZS9jb3JlL1NrR3JhcGhpY3MuaAppbmRleCBjN2VlMDdmLi5jOWEwZjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tHcmFwaGljcy5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0dyYXBoaWNzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIHB1YmxpYzoKICAgICAvKioKICAgICAgKiAgQ2FsbCB0aGlzIGF0IHByb2Nlc3MgaW5pdGlhbGl6YXRpb24gdGltZSBpZiB5b3VyIGVudmlyb25tZW50IGRvZXMgbm90Ci0gICAgICogIHBlcm1pdCBzdGF0aWMgZ2xvYmFsIGluaXRpYWxpemVycyB0aGF0IGV4ZWN1dGUgY29kZS4gTm90ZSB0aGF0IAorICAgICAqICBwZXJtaXQgc3RhdGljIGdsb2JhbCBpbml0aWFsaXplcnMgdGhhdCBleGVjdXRlIGNvZGUuIE5vdGUgdGhhdAogICAgICAqICBJbml0KCkgaXMgbm90IHRocmVhZC1zYWZlLgogICAgICAqLwogICAgIHN0YXRpYyB2b2lkIEluaXQoKTsKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgKiAgVGhpcyBtYXggY2FuIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBTZXRGb250Q2FjaGVMaW1pdCgpLgogICAgICAqLwogICAgIHN0YXRpYyBzaXplX3QgR2V0Rm9udENhY2hlTGltaXQoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBTcGVjaWZ5IHRoZSBtYXggbnVtYmVyIG9mIGJ5dGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIGZvbnQgY2FjaGUuCiAgICAgICogIElmIHRoZSBjYWNoZSBuZWVkcyB0byBhbGxvY2F0ZSBtb3JlLCBpdCB3aWxsIHB1cmdlIHByZXZpb3VzIGVudHJpZXMuCkBAIC01OSw3ICs1OSw3IEBACiAgICAgICogIGRyYXdzIHRvIGJlIHJlY3JlYXRlZCwgc2luY2UgdGhleSB3aWxsIG5vIGxvbmdlciBiZSBpbiB0aGUgY2FjaGUuCiAgICAgICovCiAgICAgc3RhdGljIHZvaWQgUHVyZ2VGb250Q2FjaGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBBcHBsaWNhdGlvbnMgd2l0aCBjb21tYW5kIGxpbmUgb3B0aW9ucyBtYXkgcGFzcyBvcHRpb25hbCBzdGF0ZSwgc3VjaAogICAgICAqICBhcyBjYWNoZSBzaXplcywgaGVyZSwgZm9yIGluc3RhbmNlOgpAQCAtNjksNyArNjksNyBAQAogICAgICAqICBUaGlzIGZvcm1hdCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KICAgICAgKi8KICAgICBzdGF0aWMgdm9pZCBTZXRGbGFncyhjb25zdCBjaGFyKiBmbGFncyk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgUmV0dXJuIHRoZSBtYXggbnVtYmVyIG9mIGJ5dGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIHRocmVhZC1sb2NhbAogICAgICAqICBmb250IGNhY2hlLgpAQCAtODIsMTQgKzgyLDE0IEBACiAgICAgICogIEdldEZvbnRDYWNoZUxpbWl0LgogICAgICAqLwogICAgIHN0YXRpYyBzaXplX3QgR2V0VExTRm9udENhY2hlTGltaXQoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBTcGVjaWZ5IHRoZSBtYXggbnVtYmVyIG9mIGJ5dGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIHRocmVhZC1sb2NhbAogICAgICAqICBmb250IGNhY2hlLiBJZiB0aGlzIHZhbHVlIGlzIDAsIHRoZW4gdGhpcyB0aHJlYWQgd2lsbCB1c2UgdGhlIHNoYXJlZAogICAgICAqICBnbG9iYWwgZm9udCBjYWNoZS4KICAgICAgKi8KICAgICBzdGF0aWMgdm9pZCBTZXRUTFNGb250Q2FjaGVMaW1pdChzaXplX3QgYnl0ZXMpOwotICAgIAorCiBwcml2YXRlOgogICAgIC8qKiBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGJ5IFNrR3JhcGhpY3M6OkluaXQoKSwgYW5kIG11c3QgYmUKICAgICAgICAgaW1wbGVtZW50ZWQgYnkgdGhlIGhvc3QgT1MuIFRoaXMgYWxsb3dzIHRoZSBob3N0IE9TIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta0ltYWdlLmggYi9pbmNsdWRlL2NvcmUvU2tJbWFnZS5oCmluZGV4IDg5ZTMxODEuLjk4NWEzYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0ltYWdlLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrSW1hZ2UuaApAQCAtNDUsMTYgKzQ1LDE2IEBACiAgICAgICAgIGtSR0JBXzg4ODhfQ29sb3JUeXBlLAogICAgICAgICBrQkdSQV84ODg4X0NvbG9yVHlwZSwKICAgICAgICAga1BNQ29sb3JfQ29sb3JUeXBlLAotICAgICAgICAKKwogICAgICAgICBrTGFzdEVudW1fQ29sb3JUeXBlID0ga1BNQ29sb3JfQ29sb3JUeXBlCiAgICAgfTsKLSAgICAKKwogICAgIGVudW0gQWxwaGFUeXBlIHsKICAgICAgICAga0lnbm9yZV9BbHBoYVR5cGUsCiAgICAgICAgIGtPcGFxdWVfQWxwaGFUeXBlLAogICAgICAgICBrUHJlbXVsX0FscGhhVHlwZSwKICAgICAgICAga1VucHJlbXVsX0FscGhhVHlwZSwKLSAgICAgICAgCisKICAgICAgICAga0xhc3RFbnVtX0FscGhhVHlwZSA9IGtVbnByZW11bF9BbHBoYVR5cGUKICAgICB9OwogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGludCAgICAgICAgIGZIZWlnaHQ7CiAgICAgICAgIENvbG9yVHlwZSAgIGZDb2xvclR5cGU7CiAgICAgICAgIEFscGhhVHlwZSAgIGZBbHBoYVR5cGU7Ci0gICAgICAgIAorCiAgICAgfTsKIAogICAgIHN0YXRpYyBTa0ltYWdlKiBOZXdSYXN0ZXJDb3B5KGNvbnN0IEluZm8mLCBTa0NvbG9yU3BhY2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIHNpemVfdCByb3dCeXRlcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tJbWFnZUZpbHRlci5oIGIvaW5jbHVkZS9jb3JlL1NrSW1hZ2VGaWx0ZXIuaAppbmRleCBlNDcwNWM0Li5kZDVhZWNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tJbWFnZUZpbHRlci5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0ltYWdlRmlsdGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgKiAgVGhlIG1hdHJpeCBpcyB0aGUgY3VycmVudCBtYXRyaXggb24gdGhlIGNhbnZhcy4KICAgICAgKgogICAgICAqICBPZmZzZXQgaXMgdGhlIGFtb3VudCB0byB0cmFuc2xhdGUgdGhlIHJlc3VsdGluZyBpbWFnZSByZWxhdGl2ZSB0byB0aGUKLSAgICAgKiAgc3JjIHdoZW4gaXQgaXMgZHJhd24uIAorICAgICAqICBzcmMgd2hlbiBpdCBpcyBkcmF3bi4KICAgICAgKgogICAgICAqICBJZiB0aGUgcmVzdWx0IGltYWdlIGNhbm5vdCBiZSBjcmVhdGVkLCByZXR1cm4gZmFsc2UsIGluIHdoaWNoIGNhc2UgYm90aAogICAgICAqICB0aGUgcmVzdWx0IGFuZCBvZmZzZXQgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbGxlci4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSBmaWx0ZXIgY2FuIGJlIGV4cHJlc3NlZCBhIHNpbmdsZS1wYXNzCiAgICAgICogIEdyQ3VzdG9tU3RhZ2UsIHVzZWQgdG8gcHJvY2VzcyB0aGlzIGZpbHRlciBvbiB0aGUgR1BVLCBvciBmYWxzZSBpZgogICAgICAqICBub3QuCi0gICAgICogCisgICAgICoKICAgICAgKiAgSWYgc3RhZ2UgaXMgbm9uLU5VTEwsIGEgbmV3IEdyQ3VzdG9tU3RhZ2UgaW5zdGFuY2UgaXMgc3RvcmVkCiAgICAgICogIGluIGl0LiAgVGhlIGNhbGxlciBhc3N1bWVzIG93bmVyc2hpcCBvZiB0aGUgc3RhZ2UsIGFuZCBpdCBpcyB1cCB0byB0aGUKICAgICAgKiAgY2FsbGVyIHRvIHVucmVmIGl0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrSW5zdENudC5oIGIvaW5jbHVkZS9jb3JlL1NrSW5zdENudC5oCmluZGV4IGRiNmUyNzMuLjdlZDg2NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta0luc3RDbnQuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tJbnN0Q250LmgKQEAgLTEwLDcgKzEwLDcgQEAKICNkZWZpbmUgU2tJbnN0Q250X0RFRklORUQKIAogLyoKLSAqIFRoZSBpbnN0YW5jZSBjb3VudGluZyBzeXN0ZW0gY29uc2lzdHMgb2YgdGhyZWUgbWFjcm9zIHRoYXQgY3JlYXRlIHRoZSAKKyAqIFRoZSBpbnN0YW5jZSBjb3VudGluZyBzeXN0ZW0gY29uc2lzdHMgb2YgdGhyZWUgbWFjcm9zIHRoYXQgY3JlYXRlIHRoZQogICogaW5zdGFuY2UgY291bnRpbmcgbWFjaGluZXJ5LiBBIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBzeXN0ZW0gYnkgYWRkaW5nOgogICogICBTS19ERUNMQVJFX0lOU1RfQ09VTlQgYXQgdGhlIHRvcCBvZiBpdHMgZGVjbGFyYXRpb24gZm9yIGRlcml2ZWQgY2xhc3NlcwogICogICBTS19ERUNMQVJFX0lOU1RfQ09VTlRfUk9PVCBhdCB0aGUgdG9wIG9mIGl0cyBkZWNsYXJhdGlvbiBmb3IgYSByb290IGNsYXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tMaW5lQ2xpcHBlci5oIGIvaW5jbHVkZS9jb3JlL1NrTGluZUNsaXBwZXIuaAppbmRleCAyYzc1ZTVlLi41ODI3ZGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tMaW5lQ2xpcHBlci5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta0xpbmVDbGlwcGVyLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgbGllIGNvbXBsZXRlbHkgYWJvdmUgb3IgYmVsb3cgdGhlIGNsaXAuIEZvciBwb3J0aW9ucyB0byB0aGUgbGVmdCBvcgogICAgICAgICByaWdodCwgdHVybiB0aG9zZSBpbnRvIHZlcnRpY2FsIGxpbmUgc2VnbWVudHMgdGhhdCBhcmUgYWxpZ25lZCB0byB0aGUKICAgICAgICAgZWRnZSBvZiB0aGUgY2xpcC4KLSAgICAgICAgIAorCiAgICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpbmUgc2VnbWVudHMgdGhhdCByZXN1bHQsIGFuZCBzdG9yZSB0aGUgZW5kLXBvaW50cwogICAgICAgICBvZiB0aG9zZSBzZWdtZW50cyBzZXF1ZW50aWFsbHkgaW4gbGluZXMgYXMgZm9sbG93czoKICAgICAgICAgICAgIDFzdCBzZWdtZW50OiBsaW5lc1swXS4ubGluZXNbMV0KQEAgLTM1LDcgKzM1LDcgQEAKICAgICAvKiAgSW50ZXJzZWN0IHRoZSBsaW5lIHNlZ21lbnQgYWdhaW5zdCB0aGUgcmVjdC4gSWYgdGhlcmUgaXMgYSBub24tZW1wdHkKICAgICAgICAgcmVzdWx0aW5nIHNlZ21lbnQsIHJldHVybiB0cnVlIGFuZCBzZXQgZHN0W10gdG8gdGhhdCBzZWdtZW50LiBJZiBub3QsCiAgICAgICAgIHJldHVybiBmYWxzZSBhbmQgaWdub3JlIGRzdFtdLgotICAgICAKKwogICAgICAgICBDbGlwTGluZSBpcyBzcGVjaWFsaXplZCBmb3Igc2Nhbi1jb252ZXJzaW9uLCBhcyBpdCBhZGRzIHZlcnRpY2FsCiAgICAgICAgIHNlZ21lbnRzIG9uIHRoZSBzaWRlcyB0byBzaG93IHdoZXJlIHRoZSBsaW5lIGV4dGVuZGVkIGJleW9uZCB0aGUKICAgICAgICAgbGVmdCBvciByaWdodCBzaWRlcy4gSW50ZXJzZWN0TGluZSBkb2VzIG5vdC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta01NYXBTdHJlYW0uaCBiL2luY2x1ZGUvY29yZS9Ta01NYXBTdHJlYW0uaAppbmRleCAxOWJhNjM0Li5hM2IzNWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tNTWFwU3RyZWFtLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrTU1hcFN0cmVhbS5oCkBAIC0yMSw5ICsyMSw5IEBACiBwcml2YXRlOgogICAgIHZvaWQqICAgZkFkZHI7CiAgICAgc2l6ZV90ICBmU2l6ZTsKLSAgICAKKwogICAgIHZvaWQgY2xvc2VNTWFwKCk7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrTWVtb3J5U3RyZWFtIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta01hbGxvY1BpeGVsUmVmLmggYi9pbmNsdWRlL2NvcmUvU2tNYWxsb2NQaXhlbFJlZi5oCmluZGV4IDFiZjFhZmMuLjIyNDFhNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta01hbGxvY1BpeGVsUmVmLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrTWFsbG9jUGl4ZWxSZWYuaApAQCAtMjMsNyArMjMsNyBAQAogICAgICAqLwogICAgIFNrTWFsbG9jUGl4ZWxSZWYodm9pZCogYWRkciwgc2l6ZV90IHNpemUsIFNrQ29sb3JUYWJsZSogY3RhYmxlLCBib29sIG93blBpeGVscyA9IHRydWUpOwogICAgIHZpcnR1YWwgflNrTWFsbG9jUGl4ZWxSZWYoKTsKLSAgICAKKwogICAgIC8vISBSZXR1cm4gdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3IgdGhlIHBpeGVscwogICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gZlNpemU7IH0KICAgICB2b2lkKiBnZXRBZGRyKCkgY29uc3QgeyByZXR1cm4gZlN0b3JhZ2U7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta01hc2suaCBiL2luY2x1ZGUvY29yZS9Ta01hc2suaAppbmRleCAzZjlhMTE0Li41ZGFkYjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tNYXNrLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrTWFzay5oCkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICBTa0F1dG9NYXNrRnJlZUltYWdlKHVpbnQ4X3QqIG1hc2tJbWFnZSkgewogICAgICAgICBmSW1hZ2UgPSBtYXNrSW1hZ2U7CiAgICAgfQotICAgIAorCiAgICAgflNrQXV0b01hc2tGcmVlSW1hZ2UoKSB7CiAgICAgICAgIFNrTWFzazo6RnJlZUltYWdlKGZJbWFnZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrTWF0cml4LmggYi9pbmNsdWRlL2NvcmUvU2tNYXRyaXguaAppbmRleCA2Y2Y0ZDhmLi5mMmM2NTEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tNYXRyaXguaAorKysgYi9pbmNsdWRlL2NvcmUvU2tNYXRyaXguaApAQCAtNDQsOSArNDQsOSBAQAogICAgICAgICBrUGVyc3BlY3RpdmVfTWFzayAgID0gMHgwOCAgIC8vITwgc2V0IGlmIHRoZSBtYXRyaXggaXMgaW4gcGVyc3BlY3RpdmUKICAgICB9OwogCi0gICAgLyoqIFJldHVybnMgYSBiaXRmaWVsZCBkZXNjcmliaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbnMgdGhlIG1hdHJpeCBtYXkgCisgICAgLyoqIFJldHVybnMgYSBiaXRmaWVsZCBkZXNjcmliaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbnMgdGhlIG1hdHJpeCBtYXkKICAgICAgICAgcGVyZm9ybS4gVGhlIGJpdGZpZWxkIGlzIGNvbXB1dGVkIGNvbnNlcnZhdGl2ZWx5LCBzbyBpdCBtYXkgaW5jbHVkZQotICAgICAgICBmYWxzZSBwb3NpdGl2ZXMuIEZvciBleGFtcGxlLCB3aGVuIGtQZXJzcGVjdGl2ZV9NYXNrIGlzIHRydWUsIGFsbCAKKyAgICAgICAgZmFsc2UgcG9zaXRpdmVzLiBGb3IgZXhhbXBsZSwgd2hlbiBrUGVyc3BlY3RpdmVfTWFzayBpcyB0cnVlLCBhbGwKICAgICAgICAgb3RoZXIgYml0cyBtYXkgYmUgc2V0IHRvIHRydWUgZXZlbiBpbiB0aGUgY2FzZSBvZiBhIHB1cmUgcGVyc3BlY3RpdmUKICAgICAgICAgdHJhbnNmb3JtLgogICAgKi8KQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAga01QZXJzcDEsCiAgICAgICAgIGtNUGVyc3AyCiAgICAgfTsKLSAgICAKKwogICAgIC8qKiBBZmZpbmUgYXJyYXlzIGFyZSBpbiBjb2x1bW4gbWFqb3Igb3JkZXIKICAgICAgICAgYmVjYXVzZSB0aGF0J3MgaG93IFBERiBhbmQgWFBTIGxpa2UgaXQuCiAgICAgICovCkBAIC0xMTMsMTIgKzExMywxMiBAQAogICAgICAgICBTa0FTU0VSVCgodW5zaWduZWQpaW5kZXggPCA5KTsKICAgICAgICAgcmV0dXJuIGZNYXRbaW5kZXhdOwogICAgIH0KLSAgICAKKwogICAgIFNrU2NhbGFyIGdldChpbnQgaW5kZXgpIGNvbnN0IHsKICAgICAgICAgU2tBU1NFUlQoKHVuc2lnbmVkKWluZGV4IDwgOSk7CiAgICAgICAgIHJldHVybiBmTWF0W2luZGV4XTsKICAgICB9Ci0gICAgCisKICAgICBTa1NjYWxhciBnZXRTY2FsZVgoKSBjb25zdCB7IHJldHVybiBmTWF0W2tNU2NhbGVYXTsgfQogICAgIFNrU2NhbGFyIGdldFNjYWxlWSgpIGNvbnN0IHsgcmV0dXJuIGZNYXRba01TY2FsZVldOyB9CiAgICAgU2tTY2FsYXIgZ2V0U2tld1koKSBjb25zdCB7IHJldHVybiBmTWF0W2tNU2tld1ldOyB9CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgZk1hdFtrTVBlcnNwMl0gPSBwZXJzcDI7CiAgICAgICAgIHRoaXMtPnNldFR5cGVNYXNrKGtVbmtub3duX01hc2spOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKiogU2V0IHRoZSBtYXRyaXggdG8gaWRlbnRpdHkKICAgICAqLwogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTMyMyw3ICszMjMsNyBAQAogICAgICAgICBAcmV0dXJuIHRydWUgaWYgdGhlIG1hdHJpeCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgdGhlIHJlY3RhbmdsZSBtYXBwaW5nLgogICAgICovCiAgICAgYm9vbCBzZXRSZWN0VG9SZWN0KGNvbnN0IFNrUmVjdCYgc3JjLCBjb25zdCBTa1JlY3QmIGRzdCwgU2NhbGVUb0ZpdCBzdGYpOwotICAgIAorCiAgICAgLyoqIFNldCB0aGUgbWF0cml4IHN1Y2ggdGhhdCB0aGUgc3BlY2lmaWVkIHNyYyBwb2ludHMgd291bGQgbWFwIHRvIHRoZQogICAgICAgICBzcGVjaWZpZWQgZHN0IHBvaW50cy4gY291bnQgbXVzdCBiZSB3aXRoaW4gWzAuLjRdLgogICAgICAgICBAcGFyYW0gc3JjICBUaGUgYXJyYXkgb2Ygc3JjIHBvaW50cwpAQCAtMzc1LDcgKzM3NSw3IEBACiAgICAgdm9pZCBtYXBQb2ludHMoU2tQb2ludCBwdHNbXSwgaW50IGNvdW50KSBjb25zdCB7CiAgICAgICAgIHRoaXMtPm1hcFBvaW50cyhwdHMsIHB0cywgY291bnQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBMaWtlIG1hcFBvaW50cyBidXQgd2l0aCBjdXN0b20gYnl0ZSBzdHJpZGUgYmV0d2VlbiB0aGUgcG9pbnRzLiBTdHJpZGUKICAgICAgKiAgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKFNrU2NhbGFyKS4KICAgICAgKi8KQEAgLTQ2MSw3ICs0NjEsNyBAQAogICAgICAgICBTa0FTU0VSVCgobWFzayAmIH5rQWxsTWFza3MpID09IDApOwogICAgICAgICByZXR1cm4gZ01hcFhZUHJvY3NbbWFzayAmIGtBbGxNYXNrc107CiAgICAgfQotICAgIAorCiAgICAgTWFwWFlQcm9jIGdldE1hcFhZUHJvYygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIEdldE1hcFhZUHJvYyh0aGlzLT5nZXRUeXBlKCkpOwogICAgIH0KQEAgLTQ3Myw3ICs0NzMsNyBAQAogICAgICAgICBTa0FTU0VSVCgobWFzayAmIH5rQWxsTWFza3MpID09IDApOwogICAgICAgICByZXR1cm4gZ01hcFB0c1Byb2NzW21hc2sgJiBrQWxsTWFza3NdOwogICAgIH0KLSAgICAKKwogICAgIE1hcFB0c1Byb2MgZ2V0TWFwUHRzUHJvYygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIEdldE1hcFB0c1Byb2ModGhpcy0+Z2V0VHlwZSgpKTsKICAgICB9CkBAIC01MTUsNyArNTE1LDcgQEAKICAgICB1aW50MzJfdCB3cml0ZVRvTWVtb3J5KHZvaWQqIGJ1ZmZlcikgY29uc3Q7CiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZAogICAgIHVpbnQzMl90IHJlYWRGcm9tTWVtb3J5KGNvbnN0IHZvaWQqIGJ1ZmZlcik7Ci0gICAgCisKICAgICB2b2lkIGR1bXAoKSBjb25zdDsKICAgICB2b2lkIHRvRHVtcFN0cmluZyhTa1N0cmluZyopIGNvbnN0OwogCkBAIC01NTEsNyArNTUxLDcgQEAKICAgICAgICAgLyoqIFNldCBpZiB0aGUgbWF0cml4IHdpbGwgbWFwIGEgcmVjdGFuZ2xlIHRvIGFub3RoZXIgcmVjdGFuZ2xlLiBUaGlzCiAgICAgICAgICAgICBjYW4gYmUgdHJ1ZSBpZiB0aGUgbWF0cml4IGlzIHNjYWxlLW9ubHksIG9yIHJvdGF0ZXMgYSBtdWx0aXBsZSBvZgogICAgICAgICAgICAgOTAgZGVncmVlcy4KLSAgICAgICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBiaXQgd2lsbCBiZSBzZXQgb24gaWRlbnRpdHkgbWF0cmljZXMKICAgICAgICAgKi8KICAgICAgICAga1JlY3RTdGF5c1JlY3RfTWFzayA9IDB4MTAsCkBAIC02MTcsNyArNjE3LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKChmVHlwZU1hc2sgJiAweEYpID09IDApOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBib29sIFBvbHkyUHJvYyhjb25zdCBTa1BvaW50W10sIFNrTWF0cml4KiwgY29uc3QgU2tQb2ludCYgc2NhbGUpOwogICAgIHN0YXRpYyBib29sIFBvbHkzUHJvYyhjb25zdCBTa1BvaW50W10sIFNrTWF0cml4KiwgY29uc3QgU2tQb2ludCYgc2NhbGUpOwogICAgIHN0YXRpYyBib29sIFBvbHk0UHJvYyhjb25zdCBTa1BvaW50W10sIFNrTWF0cml4KiwgY29uc3QgU2tQb2ludCYgc2NhbGUpOwpAQCAtNjI5LDkgKzYyOSw5IEBACiAgICAgc3RhdGljIHZvaWQgUm90X3h5KGNvbnN0IFNrTWF0cml4JiwgU2tTY2FsYXIsIFNrU2NhbGFyLCBTa1BvaW50Kik7CiAgICAgc3RhdGljIHZvaWQgUm90VHJhbnNfeHkoY29uc3QgU2tNYXRyaXgmLCBTa1NjYWxhciwgU2tTY2FsYXIsIFNrUG9pbnQqKTsKICAgICBzdGF0aWMgdm9pZCBQZXJzcF94eShjb25zdCBTa01hdHJpeCYsIFNrU2NhbGFyLCBTa1NjYWxhciwgU2tQb2ludCopOwotICAgIAorCiAgICAgc3RhdGljIGNvbnN0IE1hcFhZUHJvYyBnTWFwWFlQcm9jc1tdOwotICAgIAorCiAgICAgc3RhdGljIHZvaWQgSWRlbnRpdHlfcHRzKGNvbnN0IFNrTWF0cml4JiwgU2tQb2ludFtdLCBjb25zdCBTa1BvaW50W10sIGludCk7CiAgICAgc3RhdGljIHZvaWQgVHJhbnNfcHRzKGNvbnN0IFNrTWF0cml4JiwgU2tQb2ludCBkc3RbXSwgY29uc3QgU2tQb2ludFtdLCBpbnQpOwogICAgIHN0YXRpYyB2b2lkIFNjYWxlX3B0cyhjb25zdCBTa01hdHJpeCYsIFNrUG9pbnQgZHN0W10sIGNvbnN0IFNrUG9pbnRbXSwgaW50KTsKQEAgLTY0MSw3ICs2NDEsNyBAQAogICAgIHN0YXRpYyB2b2lkIFJvdFRyYW5zX3B0cyhjb25zdCBTa01hdHJpeCYsIFNrUG9pbnQgZHN0W10sIGNvbnN0IFNrUG9pbnRbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50KTsKICAgICBzdGF0aWMgdm9pZCBQZXJzcF9wdHMoY29uc3QgU2tNYXRyaXgmLCBTa1BvaW50IGRzdFtdLCBjb25zdCBTa1BvaW50W10sIGludCk7Ci0gICAgCisKICAgICBzdGF0aWMgY29uc3QgTWFwUHRzUHJvYyBnTWFwUHRzUHJvY3NbXTsKIAogICAgIGZyaWVuZCBjbGFzcyBTa1BlcnNwSXRlcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta09TRmlsZS5oIGIvaW5jbHVkZS9jb3JlL1NrT1NGaWxlLmgKaW5kZXggOWYwMWVhZC4uNDVkOWQ2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrT1NGaWxlLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrT1NGaWxlLmgKQEAgLTcsNyArNyw3IEBACiAgKi8KIAogCi0vLyAKKy8vCiAjaWZuZGVmIFNrT1NGaWxlX0RFRklORUQKICNkZWZpbmUgU2tPU0ZpbGVfREVGSU5FRAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tQYWludC5oIGIvaW5jbHVkZS9jb3JlL1NrUGFpbnQuaAppbmRleCAwZTY4ZjAzLi4wOTYzNDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tQYWludC5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1BhaW50LmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBTa1RvQm9vbCh0aGlzLT5nZXRGbGFncygpICYga1ZlcnRpY2FsVGV4dF9GbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgSGVscGVyIGZvciBzZXR0aW5nIG9yIGNsZWFyaW5nIHRoZSBrVmVydGljYWxUZXh0X0ZsYWcgYml0IGluCiAgICAgICogIHNldEZsYWdzKC4uLikuCkBAIC01ODMsNyArNTgzLDcgQEAKIAogICAgIFNrSW1hZ2VGaWx0ZXIqIGdldEltYWdlRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZkltYWdlRmlsdGVyOyB9CiAgICAgU2tJbWFnZUZpbHRlciogc2V0SW1hZ2VGaWx0ZXIoU2tJbWFnZUZpbHRlciopOwotICAgIAorCiAgICAgU2tBbm5vdGF0aW9uKiBnZXRBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZkFubm90YXRpb247IH0KICAgICBTa0Fubm90YXRpb24qIHNldEFubm90YXRpb24oU2tBbm5vdGF0aW9uKik7CiAKQEAgLTc4Nyw3ICs3ODcsNyBAQAogICAgIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiB0ZXh0IHRoYXQgd2VyZSBtZWFzdXJlZC4gSWYKICAgICAgKiAgaXNWZXJ0aWNhbFRleHQoKSBpcyB0cnVlLCB0aGVuIHRoZSB2ZXJ0aWNhbCBhZHZhbmNlcyBhcmUgdXNlZCBmb3IKICAgICAgKiAgdGhlIG1lYXN1cmVtZW50LgotICAgICAqICAKKyAgICAgKgogICAgICAqICBAcGFyYW0gdGV4dCAgICAgVGhlIHRleHQgdG8gYmUgbWVhc3VyZWQKICAgICAgKiAgQHBhcmFtIGxlbmd0aCAgIE51bWJlciBvZiBieXRlcyBvZiB0ZXh0IHRvIG1lYXN1cmUKICAgICAgKiAgQHBhcmFtIG1heFdpZHRoIE1heGltdW0gd2lkdGguIE9ubHkgdGhlIHN1YnNldCBvZiB0ZXh0IHdob3NlIGFjY3VtdWxhdGVkCkBAIC04MjYsNyArODI2LDcgQEAKICAgICB2b2lkIGdldFRleHRQYXRoKGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBsZW5ndGgsIFNrU2NhbGFyIHgsIFNrU2NhbGFyIHksCiAgICAgICAgICAgICAgICAgICAgICBTa1BhdGgqIHBhdGgpIGNvbnN0OwogCi0gICAgdm9pZCBnZXRQb3NUZXh0UGF0aChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgbGVuZ3RoLCAKKyAgICB2b2lkIGdldFBvc1RleHRQYXRoKGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BvaW50IHBvc1tdLCBTa1BhdGgqIHBhdGgpIGNvbnN0OwogCiAjaWZkZWYgU0tfQlVJTERfRk9SX0FORFJPSUQKQEAgLTg1OCwxOCArODU4LDE4IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICF0aGlzLT5nZXRSYXN0ZXJpemVyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIE9ubHkgY2FsbCB0aGlzIGlmIGNhbkNvbXB1dGVGYXN0Qm91bmRzKCkgcmV0dXJuZWQgdHJ1ZS4gVGhpcyB0YWtlcyBhCiAgICAgIHJhdyByZWN0YW5nbGUgKHRoZSByYXcgYm91bmRzIG9mIGEgc2hhcGUpLCBhbmQgYWRqdXN0cyBpdCBmb3Igc3R5bGlzdGljCiAgICAgIGVmZmVjdHMgaW4gdGhlIHBhaW50IChlLmcuIHN0cm9raW5nKS4gSWYgbmVlZGVkLCBpdCB1c2VzIHRoZSBzdG9yYWdlCiAgICAgIHJlY3QgcGFyYW1ldGVyLiBJdCByZXR1cm5zIHRoZSBhZGp1c3RlZCBib3VuZHMgdGhhdCBjYW4gdGhlbiBiZSB1c2VkCiAgICAgIGZvciBxdWlja1JlamVjdCB0ZXN0cy4KLSAgICAgCisKICAgICAgVGhlIHJldHVybmVkIHJlY3Qgd2lsbCBlaXRoZXIgYmUgb3JpZyBvciBzdG9yYWdlLCB0aHVzIHRoZSBjYWxsZXIKICAgICAgc2hvdWxkIG5vdCByZWx5IG9uIHN0b3JhZ2UgYmVpbmcgc2V0IHRvIHRoZSByZXN1bHQsIGJ1dCBzaG91bGQgYWx3YXlzCiAgICAgIHVzZSB0aGUgcmV0dXJlZCB2YWx1ZS4gSXQgaXMgbGVnYWwgZm9yIG9yaWcgYW5kIHN0b3JhZ2UgdG8gYmUgdGhlIHNhbWUKICAgICAgcmVjdC4KLSAgICAgCisKICAgICAgZS5nLgogICAgICBpZiAocGFpbnQuY2FuQ29tcHV0ZUZhc3RCb3VuZHMoKSkgewogICAgICBTa1JlY3Qgciwgc3RvcmFnZTsKQEAgLTg5MSwyMCArODkxLDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRoaXMtPmRvQ29tcHV0ZUZhc3RCb3VuZHMob3JpZywgc3RvcmFnZSwgc3R5bGUpOwogICAgIH0KLSAgICAKKwogICAgIGNvbnN0IFNrUmVjdCYgY29tcHV0ZUZhc3RTdHJva2VCb3VuZHMoY29uc3QgU2tSZWN0JiBvcmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tSZWN0KiBzdG9yYWdlKSBjb25zdCB7CiAgICAgICAgIHJldHVybiB0aGlzLT5kb0NvbXB1dGVGYXN0Qm91bmRzKG9yaWcsIHN0b3JhZ2UsIGtTdHJva2VfU3R5bGUpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRha2UgdGhlIHN0eWxlIGV4cGxpY2l0bHksIHNvIHRoZSBjYWxsZXIgY2FuIGZvcmNlIHVzIHRvIGJlIHN0cm9rZWQKICAgICAvLyB3aXRob3V0IGhhdmluZyB0byBtYWtlIGEgY29weSBvZiB0aGUgcGFpbnQganVzdCB0byBjaGFuZ2UgdGhhdCBmaWVsZC4KICAgICBjb25zdCBTa1JlY3QmIGRvQ29tcHV0ZUZhc3RCb3VuZHMoY29uc3QgU2tSZWN0JiBvcmlnLCBTa1JlY3QqIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlKSBjb25zdDsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa1R5cGVmYWNlKiAgICAgZlR5cGVmYWNlOwogICAgIFNrU2NhbGFyICAgICAgICBmVGV4dFNpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tQYXRoLmggYi9pbmNsdWRlL2NvcmUvU2tQYXRoLmgKaW5kZXggNGYwZWU3ZC4uNjAxNjg5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrUGF0aC5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1BhdGguaApAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgICAgIFRoaXMgZG9lcyBOT1QgY2hhbmdlIHRoZSBmaWxsLXR5cGUgc2V0dGluZyBub3IgaXNDb252ZXgKICAgICAqLwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICAKKwogICAgIC8qKiBTaW1pbGFyIHRvIHJlc2V0KCksIGluIHRoYXQgYWxsIGxpbmVzIGFuZCBjdXJ2ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUKICAgICAgICAgcGF0aC4gSG93ZXZlciwgYW55IGludGVybmFsIHN0b3JhZ2UgZm9yIHRob3NlIGxpbmVzL2N1cnZlcyBpcyByZXRhaW5lZCwKICAgICAgICAgbWFraW5nIHJldXNlIG9mIHRoZSBwYXRoIHBvdGVudGlhbGx5IGZhc3Rlci4KQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggc3BlY2lmaWVzIGEgcmVjdGFuZ2xlLiBJZiBzbywgYW5kIGlmIHJlY3QgaXMKICAgICAgICAgbm90IG51bGwsIHNldCByZWN0IHRvIHRoZSBib3VuZHMgb2YgdGhlIHBhdGguIElmIHRoZSBwYXRoIGRvZXMgbm90CiAgICAgICAgIHNwZWNpZnkgYSByZWN0YW5nbGUsIHJldHVybiBmYWxzZSBhbmQgaWdub3JlIHJlY3QuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSByZWN0IElmIG5vdCBudWxsLCByZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIHBhdGggaWYgaXQgc3BlY2lmaWVzCiAgICAgICAgICAgICAgICAgICAgIGEgcmVjdGFuZ2xlCiAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBzcGVjaWZpZXMgYSByZWN0YW5nbGUKQEAgLTI2Niw3ICsyNjYsNyBAQAogICAgIFNrUG9pbnQgZ2V0UG9pbnQoaW50IGluZGV4KSBjb25zdDsKIAogICAgIC8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBwYXRoLiBVcCB0byBtYXggcG9pbnRzIGFyZSBjb3BpZWQuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBwb2ludHMgSWYgbm90IG51bGwsIHJlY2VpdmVzIHVwIHRvIG1heCBwb2ludHMKICAgICAgICAgQHBhcmFtIG1heCBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIHRvIGNvcHkgaW50byBwb2ludHMKICAgICAgICAgQHJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIHBhdGgKQEAgLTI4MSw3ICsyODEsNyBAQAogCiAgICAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiB2ZXJicyBpbiB0aGUgcGF0aC4gVXAgdG8gbWF4IHZlcmJzIGFyZSBjb3BpZWQuIFRoZQogICAgICAgICB2ZXJicyBhcmUgY29waWVkIGFzIG9uZSBieXRlIHBlciB2ZXJiLgotICAgICAgICAKKwogICAgICAgICBAcGFyYW0gdmVyYnMgSWYgbm90IG51bGwsIHJlY2VpdmVzIHVwIHRvIG1heCB2ZXJicwogICAgICAgICBAcGFyYW0gbWF4IFRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZXJicyB0byBjb3B5IGludG8gdmVyYnMKICAgICAgICAgQHJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiB2ZXJicyBpbiB0aGUgcGF0aApAQCAtMzE3LDIxICszMTcsMjEgQEAKIAogICAgIC8qKiBIaW50IHRvIHRoZSBwYXRoIHRvIHByZXBhcmUgZm9yIGFkZGluZyBtb3JlIHBvaW50cy4gVGhpcyBjYW4gYWxsb3cgdGhlCiAgICAgICAgIHBhdGggdG8gbW9yZSBlZmZpY2llbnRseSBncm93IGl0cyBzdG9yYWdlLgotICAgIAorCiAgICAgICAgIEBwYXJhbSBleHRyYVB0Q291bnQgVGhlIG51bWJlciBvZiBleHRyYSBwb2ludHMgdGhlIHBhdGggc2hvdWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlYWxsb2NhdGUgZm9yLgogICAgICovCiAgICAgdm9pZCBpbmNSZXNlcnZlKHVuc2lnbmVkIGV4dHJhUHRDb3VudCk7CiAKICAgICAvKiogU2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgY29udG91ciB0byB0aGUgcG9pbnQgKHgseSkuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSB4ICAgIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IG9mIGEgbmV3IGNvbnRvdXIKICAgICAgICAgQHBhcmFtIHkgICAgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQgb2YgYSBuZXcgY29udG91cgogICAgICovCiAgICAgdm9pZCBtb3ZlVG8oU2tTY2FsYXIgeCwgU2tTY2FsYXIgeSk7CiAKICAgICAvKiogU2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgY29udG91ciB0byB0aGUgcG9pbnQKLSAgICAgCisKICAgICAgICAgQHBhcmFtIHAgICAgVGhlIHN0YXJ0IG9mIGEgbmV3IGNvbnRvdXIKICAgICAqLwogICAgIHZvaWQgbW92ZVRvKGNvbnN0IFNrUG9pbnQmIHApIHsKQEAgLTM0MSw3ICszNDEsNyBAQAogICAgIC8qKiBTZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBjb250b3VyIHJlbGF0aXZlIHRvIHRoZSBsYXN0IHBvaW50IG9uIHRoZQogICAgICAgICBwcmV2aW91cyBjb250b3VyLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBjb250b3VyLCB0aGlzIGlzIHRyZWF0ZWQgdGhlCiAgICAgICAgIHNhbWUgYXMgbW92ZVRvKCkuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBkeCAgIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgY29udG91ciwgdG8gc3BlY2lmeSB0aGUgc3RhcnQgb2YgYSBuZXcgY29udG91cgogICAgICAgICBAcGFyYW0gZHkgICBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlCkBAIC0zNzEsNyArMzcxLDcgQEAKICAgICAvKiogU2FtZSBhcyBsaW5lVG8sIGJ1dCB0aGUgY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIGxhc3QKICAgICAgICAgcG9pbnQgb24gdGhpcyBjb250b3VyLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBwb2ludCwgdGhlbiBhIG1vdmVUbygwLDApCiAgICAgICAgIGlzIGluc2VydGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBkeCAgIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHByZXZpb3VzIHBvaW50CiAgICAgICAgICAgICAgICAgICAgIG9uIHRoaXMgY29udG91ciwgdG8gc3BlY2lmeSBhIGxpbmUKICAgICAgICAgQHBhcmFtIGR5ICAgVGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcHJldmlvdXMgcG9pbnQKQEAgLTM4Miw3ICszODIsNyBAQAogICAgIC8qKiBBZGQgYSBxdWFkcmF0aWMgYmV6aWVyIGZyb20gdGhlIGxhc3QgcG9pbnQsIGFwcHJvYWNoaW5nIGNvbnRyb2wgcG9pbnQKICAgICAgICAgKHgxLHkxKSwgYW5kIGVuZGluZyBhdCAoeDIseTIpLiBJZiBubyBtb3ZlVG8oKSBjYWxsIGhhcyBiZWVuIG1hZGUgZm9yCiAgICAgICAgIHRoaXMgY29udG91ciwgdGhlIGZpcnN0IHBvaW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICgwLDApLgotICAgICAKKwogICAgICAgICBAcGFyYW0geDEgICBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjb250cm9sIHBvaW50IG9uIGEgcXVhZHJhdGljIGN1cnZlCiAgICAgICAgIEBwYXJhbSB5MSAgIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNvbnRyb2wgcG9pbnQgb24gYSBxdWFkcmF0aWMgY3VydmUKICAgICAgICAgQHBhcmFtIHgyICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIHBvaW50IG9uIGEgcXVhZHJhdGljIGN1cnZlCkBAIC0zOTMsNyArMzkzLDcgQEAKICAgICAvKiogQWRkIGEgcXVhZHJhdGljIGJlemllciBmcm9tIHRoZSBsYXN0IHBvaW50LCBhcHByb2FjaGluZyBjb250cm9sIHBvaW50CiAgICAgICAgIHAxLCBhbmQgZW5kaW5nIGF0IHAyLiBJZiBubyBtb3ZlVG8oKSBjYWxsIGhhcyBiZWVuIG1hZGUgZm9yIHRoaXMKICAgICAgICAgY29udG91ciwgdGhlIGZpcnN0IHBvaW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICgwLDApLgotICAgICAKKwogICAgICAgICBAcGFyYW0gcDEgICBUaGUgY29udHJvbCBwb2ludCBvbiBhIHF1YWRyYXRpYyBjdXJ2ZQogICAgICAgICBAcGFyYW0gcDIgICBUaGUgZW5kIHBvaW50IG9uIGEgcXVhZHJhdGljIGN1cnZlCiAgICAgKi8KQEAgLTQxOSw3ICs0MTksNyBAQAogICAgIC8qKiBBZGQgYSBjdWJpYyBiZXppZXIgZnJvbSB0aGUgbGFzdCBwb2ludCwgYXBwcm9hY2hpbmcgY29udHJvbCBwb2ludHMKICAgICAgICAgKHgxLHkxKSBhbmQgKHgyLHkyKSwgYW5kIGVuZGluZyBhdCAoeDMseTMpLiBJZiBubyBtb3ZlVG8oKSBjYWxsIGhhcyBiZWVuCiAgICAgICAgIG1hZGUgZm9yIHRoaXMgY29udG91ciwgdGhlIGZpcnN0IHBvaW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICgwLDApLgotICAgICAKKwogICAgICAgICBAcGFyYW0geDEgICBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSAxc3QgY29udHJvbCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCiAgICAgICAgIEBwYXJhbSB5MSAgIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIDFzdCBjb250cm9sIHBvaW50IG9uIGEgY3ViaWMgY3VydmUKICAgICAgICAgQHBhcmFtIHgyICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgMm5kIGNvbnRyb2wgcG9pbnQgb24gYSBjdWJpYyBjdXJ2ZQpAQCAtNDMzLDcgKzQzMyw3IEBACiAgICAgLyoqIEFkZCBhIGN1YmljIGJlemllciBmcm9tIHRoZSBsYXN0IHBvaW50LCBhcHByb2FjaGluZyBjb250cm9sIHBvaW50cyBwMQogICAgICAgICBhbmQgcDIsIGFuZCBlbmRpbmcgYXQgcDMuIElmIG5vIG1vdmVUbygpIGNhbGwgaGFzIGJlZW4gbWFkZSBmb3IgdGhpcwogICAgICAgICBjb250b3VyLCB0aGUgZmlyc3QgcG9pbnQgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gKDAsMCkuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBwMSAgIFRoZSAxc3QgY29udHJvbCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCiAgICAgICAgIEBwYXJhbSBwMiAgIFRoZSAybmQgY29udHJvbCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCiAgICAgICAgIEBwYXJhbSBwMyAgIFRoZSBlbmQgcG9pbnQgb24gYSBjdWJpYyBjdXJ2ZQpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAgICAgLyoqIFNhbWUgYXMgY3ViaWNUbywgYnV0IHRoZSBjb29yZGluYXRlcyBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUKICAgICAgICAgY3VycmVudCBwb2ludCBvbiB0aGlzIGNvbnRvdXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBvaW50LCB0aGVuIGEKICAgICAgICAgbW92ZVRvKDAsMCkgaXMgaW5zZXJ0ZWQgYXV0b21hdGljYWxseS4KLSAgICAgCisKICAgICAgICAgQHBhcmFtIGR4MSAgIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxhc3QgcG9pbnQgb24KICAgICAgICAgICAgICAgICB0aGlzIGNvbnRvdXIsIHRvIHNwZWNpZnkgdGhlIDFzdCBjb250cm9sIHBvaW50IG9mIGEgY3ViaWMgY3VydmUKICAgICAgICAgQHBhcmFtIGR5MSAgIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxhc3QgcG9pbnQgb24KQEAgLTQ2Nyw3ICs0NjcsNyBAQAogICAgICAgICBhdXRvbWF0aWMgbGluZVRvKCkgaXMgYWRkZWQgdG8gY29ubmVjdCB0aGUgY3VycmVudCBjb250b3VyIHRvIHRoZSBzdGFydAogICAgICAgICBvZiB0aGUgYXJjLiBIb3dldmVyLCBpZiB0aGUgcGF0aCBpcyBlbXB0eSwgdGhlbiB3ZSBjYWxsIG1vdmVUbygpIHdpdGgKICAgICAgICAgdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBhcmMuIFRoZSBzd2VlcCBhbmdsZSBpcyB0cmVhdGVkIG1vZCAzNjAuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBvdmFsIFRoZSBib3VuZGluZyBvdmFsIGRlZmluaW5nIHRoZSBzaGFwZSBhbmQgc2l6ZSBvZiB0aGUgYXJjCiAgICAgICAgIEBwYXJhbSBzdGFydEFuZ2xlIFN0YXJ0aW5nIGFuZ2xlIChpbiBkZWdyZWVzKSB3aGVyZSB0aGUgYXJjIGJlZ2lucwogICAgICAgICBAcGFyYW0gc3dlZXBBbmdsZSBTd2VlcCBhbmdsZSAoaW4gZGVncmVlcykgbWVhc3VyZWQgY2xvY2t3aXNlLiBUaGlzIGlzCkBAIC01NjIsNyArNTYyLDcgQEAKICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb24gZGlyID0ga0NXX0RpcmVjdGlvbik7CiAKICAgICAvKiogQWRkIHRoZSBzcGVjaWZpZWQgYXJjIHRvIHRoZSBwYXRoIGFzIGEgbmV3IGNvbnRvdXIuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBvdmFsIFRoZSBib3VuZHMgb2Ygb3ZhbCB1c2VkIHRvIGRlZmluZSB0aGUgc2l6ZSBvZiB0aGUgYXJjCiAgICAgICAgIEBwYXJhbSBzdGFydEFuZ2xlIFN0YXJ0aW5nIGFuZ2xlIChpbiBkZWdyZWVzKSB3aGVyZSB0aGUgYXJjIGJlZ2lucwogICAgICAgICBAcGFyYW0gc3dlZXBBbmdsZSBTd2VlcCBhbmdsZSAoaW4gZGVncmVlcykgbWVhc3VyZWQgY2xvY2t3aXNlCkBAIC02MjcsMTcgKzYyNywxNyBAQAogICAgIHZvaWQgcmV2ZXJzZUFkZFBhdGgoY29uc3QgU2tQYXRoJiBzcmMpOwogCiAgICAgLyoqIE9mZnNldCB0aGUgcGF0aCBieSAoZHgsZHkpLCByZXR1cm5pbmcgdHJ1ZSBvbiBzdWNjZXNzCi0gICAgIAotICAgICAgICBAcGFyYW0gZHggICBUaGUgYW1vdW50IGluIHRoZSBYIGRpcmVjdGlvbiB0byBvZmZzZXQgdGhlIGVudGlyZSBwYXRoIAotICAgICAgICBAcGFyYW0gZHkgICBUaGUgYW1vdW50IGluIHRoZSBZIGRpcmVjdGlvbiB0byBvZmZzZXQgdGhlIGVudGlyZSBwYXRoIAorCisgICAgICAgIEBwYXJhbSBkeCAgIFRoZSBhbW91bnQgaW4gdGhlIFggZGlyZWN0aW9uIHRvIG9mZnNldCB0aGUgZW50aXJlIHBhdGgKKyAgICAgICAgQHBhcmFtIGR5ICAgVGhlIGFtb3VudCBpbiB0aGUgWSBkaXJlY3Rpb24gdG8gb2Zmc2V0IHRoZSBlbnRpcmUgcGF0aAogICAgICAgICBAcGFyYW0gZHN0ICBUaGUgdHJhbnNsYXRlZCBwYXRoIGlzIHdyaXR0ZW4gaGVyZQogICAgICovCiAgICAgdm9pZCBvZmZzZXQoU2tTY2FsYXIgZHgsIFNrU2NhbGFyIGR5LCBTa1BhdGgqIGRzdCkgY29uc3Q7CiAKICAgICAvKiogT2Zmc2V0IHRoZSBwYXRoIGJ5IChkeCxkeSksIHJldHVybmluZyB0cnVlIG9uIHN1Y2Nlc3MKLSAgICAgCi0gICAgICAgIEBwYXJhbSBkeCAgIFRoZSBhbW91bnQgaW4gdGhlIFggZGlyZWN0aW9uIHRvIG9mZnNldCB0aGUgZW50aXJlIHBhdGggCi0gICAgICAgIEBwYXJhbSBkeSAgIFRoZSBhbW91bnQgaW4gdGhlIFkgZGlyZWN0aW9uIHRvIG9mZnNldCB0aGUgZW50aXJlIHBhdGggCisKKyAgICAgICAgQHBhcmFtIGR4ICAgVGhlIGFtb3VudCBpbiB0aGUgWCBkaXJlY3Rpb24gdG8gb2Zmc2V0IHRoZSBlbnRpcmUgcGF0aAorICAgICAgICBAcGFyYW0gZHkgICBUaGUgYW1vdW50IGluIHRoZSBZIGRpcmVjdGlvbiB0byBvZmZzZXQgdGhlIGVudGlyZSBwYXRoCiAgICAgKi8KICAgICB2b2lkIG9mZnNldChTa1NjYWxhciBkeCwgU2tTY2FsYXIgZHkpIHsKICAgICAgICAgdGhpcy0+b2Zmc2V0KGR4LCBkeSwgdGhpcyk7CkBAIC02NDUsNyArNjQ1LDcgQEAKIAogICAgIC8qKiBUcmFuc2Zvcm0gdGhlIHBvaW50cyBpbiB0aGlzIHBhdGggYnkgbWF0cml4LCBhbmQgd3JpdGUgdGhlIGFuc3dlciBpbnRvCiAgICAgICAgIGRzdC4KLSAgICAgCisKICAgICAgICAgQHBhcmFtIG1hdHJpeCAgIFRoZSBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIHBhdGgKICAgICAgICAgQHBhcmFtIGRzdCAgICAgIFRoZSB0cmFuc2Zvcm1lZCBwYXRoIGlzIHdyaXR0ZW4gaGVyZQogICAgICovCkBAIC02NjIsMTQgKzY2MiwxNCBAQAogICAgIC8qKiBSZXR1cm4gdGhlIGxhc3QgcG9pbnQgb24gdGhlIHBhdGguIElmIG5vIHBvaW50cyBoYXZlIGJlZW4gYWRkZWQsICgwLDApCiAgICAgICAgIGlzIHJldHVybmVkLiBJZiB0aGVyZSBhcmUgbm8gcG9pbnRzLCB0aGlzIHJldHVybnMgZmFsc2UsIG90aGVyd2lzZSBpdAogICAgICAgICByZXR1cm5zIHRydWUuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSBsYXN0UHQgICBUaGUgbGFzdCBwb2ludCBvbiB0aGUgcGF0aCBpcyByZXR1cm5lZCBoZXJlCiAgICAgKi8KICAgICBib29sIGdldExhc3RQdChTa1BvaW50KiBsYXN0UHQpIGNvbnN0OwogCiAgICAgLyoqIFNldCB0aGUgbGFzdCBwb2ludCBvbiB0aGUgcGF0aC4gSWYgbm8gcG9pbnRzIGhhdmUgYmVlbiBhZGRlZCwKICAgICAgICAgbW92ZVRvKHgseSkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQuCi0gICAgIAorCiAgICAgICAgIEBwYXJhbSB4ICAgIFRoZSBuZXcgeC1jb29yZGluYXRlIGZvciB0aGUgbGFzdCBwb2ludAogICAgICAgICBAcGFyYW0geSAgICBUaGUgbmV3IHktY29vcmRpbmF0ZSBmb3IgdGhlIGxhc3QgcG9pbnQKICAgICAqLwpAQCAtNzgwLDcgKzc4MCw3IEBACiAKICAgICAgICAgLyoqIFJldHVybiB0aGUgbmV4dCB2ZXJiIGluIHRoaXMgaXRlcmF0aW9uIG9mIHRoZSBwYXRoLiBXaGVuIGFsbAogICAgICAgICAgICAgc2VnbWVudHMgaGF2ZSBiZWVuIHZpc2l0ZWQsIHJldHVybiBrRG9uZV9WZXJiLgotICAgICAgICAgCisKICAgICAgICAgICAgIEBwYXJhbSAgcHRzIFRoZSBwb2ludHMgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHZlcmIgYW5kL29yIHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBub3QgYmUgTlVMTC4KICAgICAgICAgICAgIEByZXR1cm4gVGhlIHZlcmIgZm9yIHRoZSBjdXJyZW50IHNlZ21lbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1BhdGhFZmZlY3QuaCBiL2luY2x1ZGUvY29yZS9Ta1BhdGhFZmZlY3QuaAppbmRleCBhY2NkYzM5Li41ZDliNjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tQYXRoRWZmZWN0LmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrUGF0aEVmZmVjdC5oCkBAIC00Miw3ICs0Miw3IEBACiAgICAgYm9vbCBpc0hhaXJsaW5lU3R5bGUoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBrSGFpcmxpbmVfU3R5bGUgPT0gdGhpcy0+Z2V0U3R5bGUoKTsKICAgICB9Ci0gICAgCisKICAgICBib29sIGlzRmlsbFN0eWxlKCkgY29uc3QgewogICAgICAgICByZXR1cm4ga0ZpbGxfU3R5bGUgPT0gdGhpcy0+Z2V0U3R5bGUoKTsKICAgICB9CkBAIC0xNTcsNyArMTU3LDcgQEAKIAogICAgIC8vIHRoZXNlIGFyZSB2aXNpYmxlIHRvIG91ciBzdWJjbGFzc2VzCiAgICAgU2tQYXRoRWZmZWN0KiBmUEUwLCAqZlBFMTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIFNrUGF0aEVmZmVjdCBJTkhFUklURUQ7CiB9OwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgLy8gaWxsZWdhbAogICAgIFNrQ29tcG9zZVBhdGhFZmZlY3QoY29uc3QgU2tDb21wb3NlUGF0aEVmZmVjdCYpOwogICAgIFNrQ29tcG9zZVBhdGhFZmZlY3QmIG9wZXJhdG9yPShjb25zdCBTa0NvbXBvc2VQYXRoRWZmZWN0Jik7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrUGFpclBhdGhFZmZlY3QgSU5IRVJJVEVEOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrUGF0aE1lYXN1cmUuaCBiL2luY2x1ZGUvY29yZS9Ta1BhdGhNZWFzdXJlLmgKaW5kZXggMzQxOWU2Ni4uNjg2NmNjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrUGF0aE1lYXN1cmUuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tQYXRoTWVhc3VyZS5oCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgaXMgbm8gcGF0aCwgb3IgYSB6ZXJvLWxlbmd0aCBwYXRoIHdhcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UKICAgICAgICAgcG9zaXRpb24gYW5kIHRhbmdlbnQgYXJlIHVuY2hhbmdlZC4KICAgICAqLwotICAgIGJvb2wgU0tfV0FSTl9VTlVTRURfUkVTVUxUIGdldFBvc1RhbihTa1NjYWxhciBkaXN0YW5jZSwgU2tQb2ludCogcG9zaXRpb24sIAorICAgIGJvb2wgU0tfV0FSTl9VTlVTRURfUkVTVUxUIGdldFBvc1RhbihTa1NjYWxhciBkaXN0YW5jZSwgU2tQb2ludCogcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrVmVjdG9yKiB0YW5nZW50KTsKIAogICAgIGVudW0gTWF0cml4RmxhZ3MgewpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBSZXR1cm5zIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHBhdGgsIG9yIGEgemVyby1sZW5ndGggcGF0aCB3YXMgc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlCiAgICAgICAgIG1hdHJpeCBpcyB1bmNoYW5nZWQuCiAgICAgKi8KLSAgICBib29sIFNLX1dBUk5fVU5VU0VEX1JFU1VMVCBnZXRNYXRyaXgoU2tTY2FsYXIgZGlzdGFuY2UsIFNrTWF0cml4KiBtYXRyaXgsIAorICAgIGJvb2wgU0tfV0FSTl9VTlVTRURfUkVTVUxUIGdldE1hdHJpeChTa1NjYWxhciBkaXN0YW5jZSwgU2tNYXRyaXgqIG1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXhGbGFncyBmbGFncyA9IGtHZXRQb3NBbmRUYW5fTWF0cml4RmxhZyk7CiAKICAgICAvKiogR2l2ZW4gYSBzdGFydCBhbmQgc3RvcCBkaXN0YW5jZSwgcmV0dXJuIGluIGRzdCB0aGUgaW50ZXJ2ZW5pbmcgc2VnbWVudChzKS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1BpY3R1cmUuaCBiL2luY2x1ZGUvY29yZS9Ta1BpY3R1cmUuaAppbmRleCBkYWU3ZWQ3Li44YTYzM2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tQaWN0dXJlLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrUGljdHVyZS5oCkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgKi8KICAgICBleHBsaWNpdCBTa1BpY3R1cmUoU2tTdHJlYW0qKTsKICAgICB2aXJ0dWFsIH5Ta1BpY3R1cmUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBTd2FwIHRoZSBjb250ZW50cyBvZiB0aGUgdHdvIHBpY3R1cmVzLiBHdWFyYW50ZWVkIHRvIHN1Y2NlZWQuCiAgICAgICovCiAgICAgdm9pZCBzd2FwKFNrUGljdHVyZSYgb3RoZXIpOwotICAgIAorCiAgICAgZW51bSBSZWNvcmRpbmdGbGFncyB7CiAgICAgICAgIC8qICBUaGlzIGZsYWcgc3BlY2lmaWVzIHRoYXQgd2hlbiBjbGlwUGF0aCgpIGlzIGNhbGxlZCwgdGhlIHBhdGggd2lsbAogICAgICAgICAgICAgYmUgZmFpdGhmdWxseSByZWNvcmRlZCwgYnV0IHRoZSByZWNvcmRpbmcgY2FudmFzJyBjdXJyZW50IGNsaXAgd2lsbApAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICBAcGFyYW0gc3VyZmFjZSB0aGUgY2FudmFzIHJlY2VpdmluZyB0aGUgZHJhd2luZyBjb21tYW5kcy4KICAgICAqLwogICAgIHZvaWQgZHJhdyhTa0NhbnZhcyogc3VyZmFjZSk7Ci0gICAgCisKICAgICAvKiogUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgcGljdHVyZSdzIHJlY29yZGluZyBjYW52YXMuIFRoaXMKICAgICAgICAgdmFsdWUgcmVmbGVjdHMgd2hhdCB3YXMgcGFzc2VkIHRvIHNldFNpemUoKSwgYW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5CiAgICAgICAgIHJlZmxlY3QgdGhlIGJvdW5kcyBvZiB3aGF0IGhhcyBiZWVuIHJlY29yZGVkIGludG8gdGhlIHBpY3R1cmUuCkBAIC0xMTEsMTAgKzExMSwxMCBAQAogCiAgICAgLyoqIFNpZ25hbHMgdGhhdCB0aGUgY2FsbGVyIGlzIHByZW1hdHVyZWx5IGRvbmUgcmVwbGF5aW5nIHRoZSBkcmF3aW5nCiAgICAgICAgIGNvbW1hbmRzLiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhIGNhbnZhcyB2aXJ0dWFsIHdoaWxlIHRoZSBwaWN0dXJlCi0gICAgICAgIGlzIGRyYXdpbmcuIEhhcyBubyBlZmZlY3QgaWYgdGhlIHBpY3R1cmUgaXMgbm90IGRyYXdpbmcuIAorICAgICAgICBpcyBkcmF3aW5nLiBIYXMgbm8gZWZmZWN0IGlmIHRoZSBwaWN0dXJlIGlzIG5vdCBkcmF3aW5nLgogICAgICovCiAgICAgdm9pZCBhYm9ydFBsYXliYWNrKCk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgaW50IGZXaWR0aCwgZkhlaWdodDsKICAgICBTa1BpY3R1cmVSZWNvcmQqIGZSZWNvcmQ7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgIH5Ta0F1dG9QaWN0dXJlUmVjb3JkKCkgewogICAgICAgICBmUGljdHVyZS0+ZW5kUmVjb3JkaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIFJldHVybiB0aGUgY2FudmFzIHRvIGRyYXcgaW50byBmb3IgcmVjb3JkaW5nIGludG8gdGhlIHBpY3R1cmUuCiAgICAgKi8KICAgICBTa0NhbnZhcyogZ2V0UmVjb3JkaW5nQ2FudmFzKCkgY29uc3QgeyByZXR1cm4gZkNhbnZhczsgfQotICAgIAorCiBwcml2YXRlOgogICAgIFNrUGljdHVyZSogIGZQaWN0dXJlOwogICAgIFNrQ2FudmFzKiAgIGZDYW52YXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tQaXhlbFJlZi5oIGIvaW5jbHVkZS9jb3JlL1NrUGl4ZWxSZWYuaAppbmRleCAxYjYzMmQzLi45MjIyYjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tQaXhlbFJlZi5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1BpeGVsUmVmLmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAgICAgLyoqIE1ha2VzIGEgZGVlcCBjb3B5IG9mIHRoaXMgUGl4ZWxSZWYsIHJlc3BlY3RpbmcgdGhlIHJlcXVlc3RlZCBjb25maWcuCiAgICAgICAgIFJldHVybnMgTlVMTCBpZiBlaXRoZXIgdGhlcmUgaXMgYW4gZXJyb3IgKGUuZy4gdGhlIGRlc3RpbmF0aW9uIGNvdWxkCi0gICAgICAgIG5vdCBiZSBjcmVhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZyksIG9yIHRoaXMgUGl4ZWxSZWYgZG9lcyBub3QgCisgICAgICAgIG5vdCBiZSBjcmVhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZyksIG9yIHRoaXMgUGl4ZWxSZWYgZG9lcyBub3QKICAgICAgICAgc3VwcG9ydCBkZWVwIGNvcGllcy4gICovCiAgICAgdmlydHVhbCBTa1BpeGVsUmVmKiBkZWVwQ29weShTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZykgeyByZXR1cm4gTlVMTDsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tQb2ludC5oIGIvaW5jbHVkZS9jb3JlL1NrUG9pbnQuaAppbmRleCA1ZTIwZjUzLi4xYmE3MTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tQb2ludC5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1BvaW50LmgKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICBmWCA9IFNrU2NhbGFyQWJzKHB0LmZYKTsKICAgICAgICAgZlkgPSBTa1NjYWxhckFicyhwdC5mWSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gY291bnRlci1jbG9ja3dpc2UgZmFuCiAgICAgdm9pZCBzZXRJUmVjdEZhbihpbnQgbCwgaW50IHQsIGludCByLCBpbnQgYikgewogICAgICAgICBTa1BvaW50KiB2ID0gdGhpczsKQEAgLTMyMiwxMCArMzIyLDEwIEBACiAgICAgICAgIFNrU2NhbGFyIGFjY3VtID0gMDsKICAgICAgICAgYWNjdW0gKj0gZlg7CiAgICAgICAgIGFjY3VtICo9IGZZOwotICAgICAgICAKKwogICAgICAgICAvLyBhY2N1bSBpcyBlaXRoZXIgTmFOIG9yIGl0IGlzIGZpbml0ZSAoemVybykuCiAgICAgICAgIFNrQVNTRVJUKDAgPT0gYWNjdW0gfHwgIShhY2N1bSA9PSBhY2N1bSkpOwotICAgICAgICAKKwogICAgICAgICAvLyB2YWx1ZT09dmFsdWUgd2lsbCBiZSB0cnVlIGlmZiB2YWx1ZSBpcyBub3QgTmFOCiAgICAgICAgIC8vIFRPRE86IGlzIGl0IGZhc3RlciB0byBzYXkgIWFjY3VtIG9yIGFjY3VtPT1hY2N1bT8KICAgICAgICAgcmV0dXJuIGFjY3VtID09IGFjY3VtOwpAQCAtNDMxLDExICs0MzEsMTEgQEAKICAgICBTa1NjYWxhciBkb3QoY29uc3QgU2tQb2ludCYgdmVjKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBEb3RQcm9kdWN0KCp0aGlzLCB2ZWMpOwogICAgIH0KLSAgICAKKwogICAgIFNrU2NhbGFyIGxlbmd0aFNxZCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIERvdFByb2R1Y3QoKnRoaXMsICp0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBTa1NjYWxhciBkaXN0YW5jZVRvU3FkKGNvbnN0IFNrUG9pbnQmIHB0KSBjb25zdCB7CiAgICAgICAgIFNrU2NhbGFyIGR4ID0gZlggLSBwdC5mWDsKICAgICAgICAgU2tTY2FsYXIgZHkgPSBmWSAtIHB0LmZZOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrUHJlQ29uZmlnLmggYi9pbmNsdWRlL2NvcmUvU2tQcmVDb25maWcuaAppbmRleCA1NWIxYWJmLi45MTA0ZmE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tQcmVDb25maWcuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tQcmVDb25maWcuaApAQCAtNDgsNyArNDgsNyBAQAogCiAvKiBFdmVuIGlmIHRoZSB1c2VyIG9ubHkgZGVmaW5lZCB0aGUgTkRLIHZhcmlhbnQgd2Ugc3RpbGwgbmVlZCB0byBidWlsZAogICogdGhlIGRlZmF1bHQgQW5kcm9pZCBjb2RlLiBUaGVyZWZvcmUsIHdoZW4gYXR0ZW1wdGluZyB0byBpbmNsdWRlL2V4Y2x1ZGUKLSAqIHNvbWV0aGluZyBmcm9tIHRoZSBOREsgdmFyaWFudCBjaGVjayBmaXJzdCB0aGF0IHdlIGFyZSBidWlsZGluZyBmb3IgCisgKiBzb21ldGhpbmcgZnJvbSB0aGUgTkRLIHZhcmlhbnQgY2hlY2sgZmlyc3QgdGhhdCB3ZSBhcmUgYnVpbGRpbmcgZm9yCiAgKiBBbmRyb2lkIHRoZW4gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgTkRLIGRlZmluZS4KICAqLwogI2lmIGRlZmluZWQoU0tfQlVJTERfRk9SX0FORFJPSURfTkRLKSAmJiAhZGVmaW5lZChTS19CVUlMRF9GT1JfQU5EUk9JRCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1JlYWRlcjMyLmggYi9pbmNsdWRlL2NvcmUvU2tSZWFkZXIzMi5oCmluZGV4IDFiZGY5NDkuLjRmNjgwOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1JlYWRlcjMyLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrUmVhZGVyMzIuaApAQCAtMjcsMTEgKzI3LDExIEBACiAgICAgdm9pZCBzZXRNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKICAgICAgICAgU2tBU1NFUlQocHRyX2FsaWduXzQoZGF0YSkpOwogICAgICAgICBTa0FTU0VSVChTa0FsaWduNChzaXplKSA9PSBzaXplKTsKLSAgICAgICAgCisKICAgICAgICAgZkJhc2UgPSBmQ3VyciA9IChjb25zdCBjaGFyKilkYXRhOwogICAgICAgICBmU3RvcCA9IChjb25zdCBjaGFyKilkYXRhICsgc2l6ZTsKICAgICB9Ci0gICAgCisKICAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gU2tUb1UzMihmU3RvcCAtIGZCYXNlKTsgfQogICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIFNrVG9VMzIoZkN1cnIgLSBmQmFzZSk7IH0KICAgICBib29sIGVvZigpIGNvbnN0IHsgcmV0dXJuIGZDdXJyID49IGZTdG9wOyB9CkBAIC00MCw3ICs0MCw3IEBACiAKICAgICB1aW50MzJfdCBhdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBTa1RvVTMyKGZTdG9wIC0gZkN1cnIpOyB9CiAgICAgYm9vbCBpc0F2YWlsYWJsZSh1aW50MzJfdCBzaXplKSBjb25zdCB7IHJldHVybiBmQ3VyciArIHNpemUgPD0gZlN0b3A7IH0KLSAgICAKKwogICAgIHZvaWQgcmV3aW5kKCkgeyBmQ3VyciA9IGZCYXNlOyB9CiAKICAgICB2b2lkIHNldE9mZnNldChzaXplX3Qgb2Zmc2V0KSB7CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICAgIFNrQVNTRVJUKG9mZnNldCA8PSB0aGlzLT5zaXplKCkpOwogICAgICAgICBmQ3VyciA9IGZCYXNlICsgb2Zmc2V0OwogICAgIH0KLSAgICAKKwogICAgIGJvb2wgcmVhZEJvb2woKSB7IHJldHVybiB0aGlzLT5yZWFkSW50KCkgIT0gMDsgfQotICAgIAorCiAgICAgaW50MzJfdCByZWFkSW50KCkgewogICAgICAgICBTa0FTU0VSVChwdHJfYWxpZ25fNChmQ3VycikpOwogICAgICAgICBpbnQzMl90IHZhbHVlID0gKihjb25zdCBpbnQzMl90KilmQ3VycjsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgU2tBU1NFUlQoZkN1cnIgPD0gZlN0b3ApOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQotICAgIAorCiAgICAgY29uc3Qgdm9pZCogc2tpcChzaXplX3Qgc2l6ZSkgewogICAgICAgICBTa0FTU0VSVChwdHJfYWxpZ25fNChmQ3VycikpOwogICAgICAgICBjb25zdCB2b2lkKiBhZGRyID0gZkN1cnI7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIFNrQVNTRVJUKGZDdXJyIDw9IGZTdG9wKTsKICAgICAgICAgcmV0dXJuIGFkZHI7CiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0IFQmIHNraXBUKCkgewogICAgICAgICBTa0FTU0VSVChTa0FsaWduNChzaXplb2YoVCkpID09IHNpemVvZihUKSk7CiAgICAgICAgIHJldHVybiAqKGNvbnN0IFQqKXRoaXMtPnNraXAoc2l6ZW9mKFQpKTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgZkN1cnIgKz0gU2tBbGlnbjQoc2l6ZSk7CiAgICAgICAgIFNrQVNTRVJUKGZDdXJyIDw9IGZTdG9wKTsKICAgICB9Ci0gICAgCisKICAgICB1aW50OF90IHJlYWRVOCgpIHsgcmV0dXJuICh1aW50OF90KXRoaXMtPnJlYWRJbnQoKTsgfQogICAgIHVpbnQxNl90IHJlYWRVMTYoKSB7IHJldHVybiAodWludDE2X3QpdGhpcy0+cmVhZEludCgpOyB9CiAgICAgaW50MzJfdCByZWFkUzMyKCkgeyByZXR1cm4gdGhpcy0+cmVhZEludCgpOyB9CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICBjb25zdCBjaGFyKiBmQ3VycjsgIC8vIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGJ1ZmZlcgogICAgIGNvbnN0IGNoYXIqIGZTdG9wOyAgLy8gZW5kIG9mIGJ1ZmZlcgogICAgIGNvbnN0IGNoYXIqIGZCYXNlOyAgLy8gYmVnaW5uaW5nIG9mIGJ1ZmZlcgotICAgIAorCiAjaWZkZWYgU0tfREVCVUcKICAgICBzdGF0aWMgYm9vbCBwdHJfYWxpZ25fNChjb25zdCB2b2lkKiBwdHIpIHsKICAgICAgICAgcmV0dXJuICgoKGNvbnN0IGNoYXIqKXB0ciAtIChjb25zdCBjaGFyKilOVUxMKSAmIDMpID09IDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tSZWN0LmggYi9pbmNsdWRlL2NvcmUvU2tSZWN0LmgKaW5kZXggNzIzZjVmNi4uMjNhZjU2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrUmVjdC5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1JlY3QuaApAQCAtMjUsMjUgKzI1LDI1IEBACiAgICAgICAgIHIuc2V0RW1wdHkoKTsKICAgICAgICAgcmV0dXJuIHI7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIFNrSVJlY3QgU0tfV0FSTl9VTlVTRURfUkVTVUxUIE1ha2VXSChpbnQzMl90IHcsIGludDMyX3QgaCkgewogICAgICAgICBTa0lSZWN0IHI7CiAgICAgICAgIHIuc2V0KDAsIDAsIHcsIGgpOwogICAgICAgICByZXR1cm4gcjsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgU2tJUmVjdCBTS19XQVJOX1VOVVNFRF9SRVNVTFQgTWFrZVNpemUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkgewogICAgICAgICBTa0lSZWN0IHI7CiAgICAgICAgIHIuc2V0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiByOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBTa0lSZWN0IFNLX1dBUk5fVU5VU0VEX1JFU1VMVCBNYWtlTFRSQihpbnQzMl90IGwsIGludDMyX3QgdCwgaW50MzJfdCByLCBpbnQzMl90IGIpIHsKICAgICAgICAgU2tJUmVjdCByZWN0OwogICAgICAgICByZWN0LnNldChsLCB0LCByLCBiKTsKICAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIFNrSVJlY3QgU0tfV0FSTl9VTlVTRURfUkVTVUxUIE1ha2VYWVdIKGludDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHcsIGludDMyX3QgaCkgewogICAgICAgICBTa0lSZWN0IHI7CiAgICAgICAgIHIuc2V0KHgsIHksIHggKyB3LCB5ICsgaCk7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgaW50IHRvcCgpIGNvbnN0IHsgcmV0dXJuIGZUb3A7IH0KICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBmUmlnaHQ7IH0KICAgICBpbnQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gZkJvdHRvbTsgfQotICAgIAorCiAgICAgLyoqIHJldHVybiB0aGUgbGVmdCBlZGdlIG9mIHRoZSByZWN0ICovCiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBmTGVmdDsgfQogICAgIC8qKiByZXR1cm4gdGhlIHRvcCBlZGdlIG9mIHRoZSByZWN0ICovCkBAIC02NCwxOCArNjQsMTggQEAKICAgICAgKiAgKGkuZS4gbGVmdCA8PSByaWdodCkgc28gdGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUuCiAgICAgICovCiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gZlJpZ2h0IC0gZkxlZnQ7IH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm5zIHRoZSByZWN0YW5nbGUncyBoZWlnaHQuIFRoaXMgZG9lcyBub3QgY2hlY2sgZm9yIGEgdmFsaWQgcmVjdAogICAgICAqICAoaS5lLiB0b3AgPD0gYm90dG9tKSBzbyB0aGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4KICAgICAgKi8KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZkJvdHRvbSAtIGZUb3A7IH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm4gdHJ1ZSBpZiB0aGUgcmVjdGFuZ2xlJ3Mgd2lkdGggb3IgaGVpZ2h0IGFyZSA8PSAwCiAgICAgICovCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gZkxlZnQgPj0gZlJpZ2h0IHx8IGZUb3AgPj0gZkJvdHRvbTsgfQotICAgIAorCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTa0lSZWN0JiBhLCBjb25zdCBTa0lSZWN0JiBiKSB7CiAgICAgICAgIHJldHVybiAhbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGEpKTsKICAgICB9CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgZkxlZnQgPSBmVG9wID0gU0tfTWluUzMyOwogICAgICAgICBmUmlnaHQgPSBmQm90dG9tID0gU0tfTWF4UzMyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBNYWtlIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgcmVjdGFuZ2xlLCBidXQgaW52ZXJ0ZWQgKGUuZy4gZkxlZnQgd2lsbAogICAgICAqICBiZSBtYXggMzJiaXQgYW5kIHJpZ2h0IHdpbGwgYmUgbWluIDMyYml0KS4KQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICBmTGVmdCA9IGZUb3AgPSBTS19NYXhTMzI7CiAgICAgICAgIGZSaWdodCA9IGZCb3R0b20gPSBTS19NaW5TMzI7CiAgICAgfQotICAgIAorCiAgICAgLyoqIE9mZnNldCBzZXQgdGhlIHJlY3RhbmdsZSBieSBhZGRpbmcgZHggdG8gaXRzIGxlZnQgYW5kIHJpZ2h0LAogICAgICAgICBhbmQgYWRkaW5nIGR5IHRvIGl0cyB0b3AgYW5kIGJvdHRvbS4KICAgICAqLwpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgYm9vbCBxdWlja1JlamVjdChpbnQgbCwgaW50IHQsIGludCByLCBpbnQgYikgY29uc3QgewogICAgICAgICByZXR1cm4gbCA+PSBmUmlnaHQgfHwgZkxlZnQgPj0gciB8fCB0ID49IGZCb3R0b20gfHwgZlRvcCA+PSBiOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgKHgseSkgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGUgYW5kIHRoZSByZWN0YW5nbGUgaXMgbm90CiAgICAgICAgIGVtcHR5LiBUaGUgbGVmdCBhbmQgdG9wIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluc2lkZSwgd2hpbGUgdGhlIHJpZ2h0CiAgICAgICAgIGFuZCBib3R0b20gYXJlIG5vdC4gVGh1cyBmb3IgdGhlIHJlY3RhbmdsZSAoMCwgMCwgNSwgMTApLCB0aGUKQEAgLTIwNSwxMSArMjA1LDExIEBACiAgICAgICAgIHJldHVybiBmTGVmdCA8PSBsZWZ0ICYmIGZUb3AgPD0gdG9wICYmCiAgICAgICAgICAgICAgICBmUmlnaHQgPj0gcmlnaHQgJiYgZkJvdHRvbSA+PSBib3R0b207CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBjb250YWluc05vRW1wdHlDaGVjayhjb25zdCBTa0lSZWN0JiByKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBjb250YWluc05vRW1wdHlDaGVjayhyLmZMZWZ0LCByLmZUb3AsIHIuZlJpZ2h0LCByLmZCb3R0b20pOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBJZiByIGludGVyc2VjdHMgdGhpcyByZWN0YW5nbGUsIHJldHVybiB0cnVlIGFuZCBzZXQgdGhpcyByZWN0YW5nbGUgdG8gdGhhdAogICAgICAgICBpbnRlcnNlY3Rpb24sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UgYW5kIGRvIG5vdCBjaGFuZ2UgdGhpcyByZWN0YW5nbGUuCiAgICAgICAgIElmIGVpdGhlciByZWN0YW5nbGUgaXMgZW1wdHksIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4KQEAgLTIyNSw3ICsyMjUsNyBAQAogICAgICovCiAgICAgYm9vbCBpbnRlcnNlY3QoY29uc3QgU2tJUmVjdCYgYSwgY29uc3QgU2tJUmVjdCYgYikgewogICAgICAgICBTa0FTU0VSVCgmYSAmJiAmYik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghYS5pc0VtcHR5KCkgJiYgIWIuaXNFbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgYS5mTGVmdCA8IGIuZlJpZ2h0ICYmIGIuZkxlZnQgPCBhLmZSaWdodCAmJgogICAgICAgICAgICAgICAgIGEuZlRvcCA8IGIuZkJvdHRvbSAmJiBiLmZUb3AgPCBhLmZCb3R0b20pIHsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKiogSWYgcmVjdGFuZ2xlcyBhIGFuZCBiIGludGVyc2VjdCwgcmV0dXJuIHRydWUgYW5kIHNldCB0aGlzIHJlY3RhbmdsZSB0bwogICAgICAgICB0aGF0IGludGVyc2VjdGlvbiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZSBhbmQgZG8gbm90IGNoYW5nZSB0aGlzCiAgICAgICAgIHJlY3RhbmdsZS4gRm9yIHNwZWVkLCBubyBjaGVjayB0byBzZWUgaWYgYSBvciBiIGFyZSBlbXB0eSBpcyBwZXJmb3JtZWQuCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICBib29sIGludGVyc2VjdE5vRW1wdHlDaGVjayhjb25zdCBTa0lSZWN0JiBhLCBjb25zdCBTa0lSZWN0JiBiKSB7CiAgICAgICAgIFNrQVNTRVJUKCZhICYmICZiKTsKICAgICAgICAgU2tBU1NFUlQoIWEuaXNFbXB0eSgpICYmICFiLmlzRW1wdHkoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhLmZMZWZ0IDwgYi5mUmlnaHQgJiYgYi5mTGVmdCA8IGEuZlJpZ2h0ICYmCiAgICAgICAgICAgICAgICAgYS5mVG9wIDwgYi5mQm90dG9tICYmIGIuZlRvcCA8IGEuZkJvdHRvbSkgewogICAgICAgICAgICAgZkxlZnQgICA9IFNrTWF4MzIoYS5mTGVmdCwgICBiLmZMZWZ0KTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKiogUmV0dXJucyB0cnVlIGlmIGEgYW5kIGIgYXJlIG5vdCBlbXB0eSwgYW5kIHRoZXkgaW50ZXJzZWN0CiAgICAgICovCiAgICAgc3RhdGljIGJvb2wgSW50ZXJzZWN0cyhjb25zdCBTa0lSZWN0JiBhLCBjb25zdCBTa0lSZWN0JiBiKSB7CkBAIC0yODMsNyArMjgzLDcgQEAKICAgICAgICAgYS5mTGVmdCA8IGIuZlJpZ2h0ICYmIGIuZkxlZnQgPCBhLmZSaWdodCAmJgogICAgICAgICBhLmZUb3AgPCBiLmZCb3R0b20gJiYgYi5mVG9wIDwgYS5mQm90dG9tOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm5zIHRydWUgaWYgYSBhbmQgYiBpbnRlcnNlY3QuIGRlYnVnLWFzc2VydHMgdGhhdCBuZWl0aGVyIGFyZSBlbXB0eS4KICAgICAgKi8KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAgICByZXR1cm4gIGEuZkxlZnQgPCBiLmZSaWdodCAmJiBiLmZMZWZ0IDwgYS5mUmlnaHQgJiYKICAgICAgICAgICAgICAgICBhLmZUb3AgPCBiLmZCb3R0b20gJiYgYi5mVG9wIDwgYS5mQm90dG9tOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBVcGRhdGUgdGhpcyByZWN0YW5nbGUgdG8gZW5jbG9zZSBpdHNlbGYgYW5kIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlLgogICAgICAgICBJZiB0aGlzIHJlY3RhbmdsZSBpcyBlbXB0eSwganVzdCBzZXQgaXQgdG8gdGhlIHNwZWNpZmllZCByZWN0YW5nbGUuIElmIHRoZSBzcGVjaWZpZWQKICAgICAgICAgcmVjdGFuZ2xlIGlzIGVtcHR5LCBkbyBub3RoaW5nLgpAQCAtMzYwLDcgKzM2MCw3IEBACiAgICAgICogIFJldHVybiB0cnVlIGlmIHRoZSByZWN0YW5nbGUncyB3aWR0aCBvciBoZWlnaHQgYXJlIDw9IDAKICAgICAgKi8KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBmTGVmdCA+PSBmUmlnaHQgfHwgZlRvcCA+PSBmQm90dG9tOyB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgUmV0dXJucyB0cnVlIGlmZiBhbGwgdmFsdWVzIGluIHRoZSByZWN0IGFyZSBmaW5pdGUuIElmIGFueSBhcmUKICAgICAgKiAgaW5maW5pdGUgb3IgTmFOIChvciBTS19GaXhlZE5hTiB3aGVuIFNrU2NhbGFyIGlzIGZpeGVkKSB0aGVuIHRoaXMKQEAgLTM3Myw3ICszNzMsNyBAQAogICAgICAgICBhY2N1bSAqPSBmVG9wOwogICAgICAgICBhY2N1bSAqPSBmUmlnaHQ7CiAgICAgICAgIGFjY3VtICo9IGZCb3R0b207Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGFjY3VtIGlzIGVpdGhlciBOYU4gb3IgaXQgaXMgZmluaXRlICh6ZXJvKS4KICAgICAgICAgU2tBU1NFUlQoMCA9PSBhY2N1bSB8fCAhKGFjY3VtID09IGFjY3VtKSk7CiAKQEAgLTQ1OSwxNCArNDU5LDE0IEBACiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgU2tQb2ludCBwdHNbXSwgaW50IGNvdW50KSB7CiAgICAgICAgICh2b2lkKXRoaXMtPnNldEJvdW5kc0NoZWNrKHB0cywgY291bnQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBDb21wdXRlIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5IG9mIHBvaW50cywgYW5kIHNldCB0aGlzIHJlY3QgdG8gdGhhdAogICAgICAqICBib3VuZHMgYW5kIHJldHVybiB0cnVlLi4uIHVubGVzcyBhIG5vbi1maW5pdGUgdmFsdWUgaXMgZW5jb3VudGVyZWQsCiAgICAgICogIGluIHdoaWNoIGNhc2UgdGhpcyByZWN0IGlzIHNldCB0byBlbXB0eSBhbmQgZmFsc2UgaXMgcmV0dXJuZWQuCiAgICAgICovCiAgICAgYm9vbCBzZXRCb3VuZHNDaGVjayhjb25zdCBTa1BvaW50IHB0c1tdLCBpbnQgY291bnQpOwotICAgIAorCiAgICAgdm9pZCBzZXQoY29uc3QgU2tQb2ludCYgcDAsIGNvbnN0IFNrUG9pbnQmIHAxKSB7CiAgICAgICAgIGZMZWZ0ID0gICBTa01pblNjYWxhcihwMC5mWCwgcDEuZlgpOwogICAgICAgICBmUmlnaHQgPSAgU2tNYXhTY2FsYXIocDAuZlgsIHAxLmZYKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogICAgICAgICBmTGVmdCA9IGZUb3AgPSBTS19TY2FsYXJNaW47CiAgICAgICAgIGZSaWdodCA9IGZCb3R0b20gPSBTS19TY2FsYXJNYXg7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIE1ha2UgdGhlIGxhcmdlc3QgcmVwcmVzZW50YWJsZSByZWN0YW5nbGUsIGJ1dCBpbnZlcnRlZCAoZS5nLiBmTGVmdCB3aWxsCiAgICAgICogIGJlIG1heCBhbmQgcmlnaHQgd2lsbCBiZSBtaW4pLgpAQCAtNTA2LDcgKzUwNiw3IEBACiAgICAgICAgIGZUb3AgICAgKz0gZHk7CiAgICAgICAgIGZSaWdodCAgKz0gZHg7CiAgICAgICAgIGZCb3R0b20gKz0gZHk7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHZvaWQgb2Zmc2V0KGNvbnN0IFNrUG9pbnQmIGRlbHRhKSB7CiAgICAgICAgIHRoaXMtPm9mZnNldChkZWx0YS5mWCwgZGVsdGEuZlkpOwpAQCAtNTYyLDcgKzU2Miw3IEBACiAgICAgICogIHJlY3RhbmdsZS4gSWYgZWl0aGVyIHJlY3RhbmdsZSBpcyBlbXB0eSwgZG8gbm90aGluZyBhbmQgcmV0dXJuIGZhbHNlLgogICAgICAqLwogICAgIGJvb2wgaW50ZXJzZWN0KGNvbnN0IFNrUmVjdCYgYSwgY29uc3QgU2tSZWN0JiBiKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm4gdHJ1ZSBpZiByZWN0YW5nbGVzIGEgYW5kIGIgYXJlIG5vdCBlbXB0eSBhbmQgaW50ZXJzZWN0LgogICAgICAqLwpAQCAtNTcxLDcgKzU3MSw3IEBACiAgICAgICAgICAgICAgICAgYS5mTGVmdCA8IGIuZlJpZ2h0ICYmIGIuZkxlZnQgPCBhLmZSaWdodCAmJgogICAgICAgICAgICAgICAgIGEuZlRvcCA8IGIuZkJvdHRvbSAmJiBiLmZUb3AgPCBhLmZCb3R0b207CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIFVwZGF0ZSB0aGlzIHJlY3RhbmdsZSB0byBlbmNsb3NlIGl0c2VsZiBhbmQgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUuCiAgICAgICogIElmIHRoaXMgcmVjdGFuZ2xlIGlzIGVtcHR5LCBqdXN0IHNldCBpdCB0byB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZS4KQEAgLTYwNCw3ICs2MDQsNyBAQAogICAgICAgICBmVG9wICAgID0gU2tNaW5TY2FsYXIoeSwgZlRvcCk7CiAgICAgICAgIGZCb3R0b20gPSBTa01heFNjYWxhcih5LCBmQm90dG9tKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIChwLmZYLHAuZlkpIGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlY3RhbmdsZQogICAgICAqICBpcyBub3QgZW1wdHkuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tSZWdpb24uaCBiL2luY2x1ZGUvY29yZS9Ta1JlZ2lvbi5oCmluZGV4IDJhYWI0MjMuLmFiOGYyMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1JlZ2lvbi5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1JlZ2lvbi5oCkBAIC0zMyw3ICszMyw3IEBACiAgICAgZW51bSB7CiAgICAgICAgIGtSdW5UeXBlU2VudGluZWwgPSAweDdGRkZGRkZGCiAgICAgfTsKLSAgICAKKwogICAgIFNrUmVnaW9uKCk7CiAgICAgU2tSZWdpb24oY29uc3QgU2tSZWdpb24mKTsKICAgICBleHBsaWNpdCBTa1JlZ2lvbihjb25zdCBTa0lSZWN0Jik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNrUmVnaW9uJiBvdGhlcikgY29uc3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJlcGxhY2UgdGhpcyByZWdpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHJlZ2lvbiwgYW5kIHJldHVybiB0cnVlIGlmIHRoZQogICAgICAqICByZXN1bHRpbmcgcmVnaW9uIGlzIG5vbi1lbXB0eS4KQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAqICBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdGluZyByZWdpb24gaXMgbm9uLWVtcHR5CiAgICAgICovCiAgICAgYm9vbCBzZXRSZWN0cyhjb25zdCBTa0lSZWN0IHJlY3RzW10sIGludCBjb3VudCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgU2V0IHRoaXMgcmVnaW9uIHRvIHRoZSBzcGVjaWZpZWQgcmVnaW9uLCBhbmQgcmV0dXJuIHRydWUgaWYgaXQgaXMKICAgICAgKiAgbm9uLWVtcHR5LgpAQCAtMTMxLDEzICsxMzEsMTMgQEAKICAgICAgKiAgZHJhd24gYnkgdGhlIHBhdGggKHdpdGggbm8gYW50aWFsaWFzaW5nKSB3aXRoIHRoZSBzcGVjaWZpZWQgY2xpcC4KICAgICAgKi8KICAgICBib29sIHNldFBhdGgoY29uc3QgU2tQYXRoJiwgY29uc3QgU2tSZWdpb24mIGNsaXApOwotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZSBoYXMgYSBub24tZW1wdHkgaW50ZXJzZWN0aW9uCiAgICAgICogIHdpdGggdGhpcyByZWdpb24uCiAgICAgICovCiAgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNrSVJlY3QmKSBjb25zdDsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCByZWdpb24gaGFzIGEgbm9uLWVtcHR5IGludGVyc2VjdGlvbgogICAgICAqICB3aXRoIHRoaXMgcmVnaW9uLgpAQCAtMTg1LDE0ICsxODUsMTQgQEAKICAgICBib29sIHF1aWNrQ29udGFpbnMoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHRvcCwgaW50MzJfdCByaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBib3R0b20pIGNvbnN0IHsKICAgICAgICAgU2tBU1NFUlQodGhpcy0+aXNFbXB0eSgpID09IGZCb3VuZHMuaXNFbXB0eSgpKTsgLy8gdmFsaWQgcmVnaW9uCi0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQgJiYgdG9wIDwgYm90dG9tICYmCiAgICAgICAgICAgICAgICBmUnVuSGVhZCA9PSBTa1JlZ2lvbl9nUmVjdFJ1bkhlYWRQdHIgJiYgIC8vIHRoaXMtPmlzUmVjdCgpCiAgICAgICAgICAgICAgICAvKiBmQm91bmRzLmNvbnRhaW5zKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7ICovCiAgICAgICAgICAgICAgICBmQm91bmRzLmZMZWZ0IDw9IGxlZnQgJiYgZkJvdW5kcy5mVG9wIDw9IHRvcCAmJgogICAgICAgICAgICAgICAgZkJvdW5kcy5mUmlnaHQgPj0gcmlnaHQgJiYgZkJvdW5kcy5mQm90dG9tID49IGJvdHRvbTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgUmV0dXJuIHRydWUgaWYgdGhpcyByZWdpb24gaXMgZW1wdHksIG9yIGlmIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIGRvZXMKICAgICAgKiAgbm90IGludGVyc2VjdCB0aGUgcmVnaW9uLiBSZXR1cm5pbmcgZmFsc2UgaXMgbm90IGEgZ3VhcmFudGVlIHRoYXQgdGhleQpAQCAtMjM2LDE0ICsyMzYsMTQgQEAKICAgICAgICAga1JldmVyc2VEaWZmZXJlbmNlX09wLAogICAgICAgICBrUmVwbGFjZV9PcCAgICAgLy8hPCByZXBsYWNlIHRoZSBkc3QgcmVnaW9uIHdpdGggdGhlIG9wIHJlZ2lvbgogICAgIH07Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgU2V0IHRoaXMgcmVnaW9uIHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIE9wIHRvIHRoaXMgcmVnaW9uIGFuZCB0aGUKICAgICAgKiAgc3BlY2lmaWVkIHJlY3RhbmdsZTogdGhpcyA9ICh0aGlzIG9wIHJlY3QpLgogICAgICAqICBSZXR1cm4gdHJ1ZSBpZiB0aGUgcmVzdWx0aW5nIHJlZ2lvbiBpcyBub24tZW1wdHkuCiAgICAgICovCiAgICAgYm9vbCBvcChjb25zdCBTa0lSZWN0JiByZWN0LCBPcCBvcCkgeyByZXR1cm4gdGhpcy0+b3AoKnRoaXMsIHJlY3QsIG9wKTsgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIFNldCB0aGlzIHJlZ2lvbiB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBPcCB0byB0aGlzIHJlZ2lvbiBhbmQgdGhlCiAgICAgICogIHNwZWNpZmllZCByZWN0YW5nbGU6IHRoaXMgPSAodGhpcyBvcCByZWN0KS4KQEAgLTI1NCw3ICsyNTQsNyBAQAogICAgICAgICByZWN0LnNldChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgICAgICByZXR1cm4gdGhpcy0+b3AoKnRoaXMsIHJlY3QsIG9wKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgU2V0IHRoaXMgcmVnaW9uIHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIE9wIHRvIHRoaXMgcmVnaW9uIGFuZCB0aGUKICAgICAgKiAgc3BlY2lmaWVkIHJlZ2lvbjogdGhpcyA9ICh0aGlzIG9wIHJnbikuCkBAIC0zODcsNyArMzg3LDcgQEAKICAgICBmcmllbmQgY2xhc3MgYW5kcm9pZDo6UmVnaW9uOyAgICAvLyBuZWVkZWQgZm9yIG1hcnNoYWxsaW5nIGVmZmljaWVudGx5CiAKICAgICBzdHJ1Y3QgUnVuSGVhZDsKLSAgICAKKwogICAgIC8vIGFsbG9jYXRlIHNwYWNlIGZvciBjb3VudCBydW5zCiAgICAgdm9pZCBhbGxvY2F0ZVJ1bnMoaW50IGNvdW50KTsKICAgICB2b2lkIGFsbG9jYXRlUnVucyhpbnQgY291bnQsIGludCB5U3BhbkNvdW50LCBpbnQgaW50ZXJ2YWxDb3VudCk7CkBAIC0zOTcsMjEgKzM5NywyMSBAQAogICAgIFJ1bkhlYWQqICAgIGZSdW5IZWFkOwogCiAgICAgdm9pZCBmcmVlUnVucygpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJldHVybiB0aGUgcnVucyBmcm9tIHRoaXMgcmVnaW9uLCBjb25zaW5nIHVwIGZha2UgcnVucyBpZiB0aGUgcmVnaW9uCiAgICAgICogIGlzIGVtcHR5IG9yIGEgcmVjdC4gSW4gdGhvc2UgMiBjYXNlcywgd2UgdXNlIHRtcFN0b3JhZ2UgdG8gaG9sZCB0aGUKICAgICAgKiAgcnVuIGRhdGEuCiAgICAgICovCiAgICAgY29uc3QgUnVuVHlwZSogIGdldFJ1bnMoUnVuVHlwZSB0bXBTdG9yYWdlW10sIGludCogaW50ZXJ2YWxzKSBjb25zdDsKLSAgICAKKwogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdpdGggcnVuc1tdIHRoYXQgZG8gbm90IHlldCBoYXZlIHRoZWlyIGludGVydmFsLWNvdW50CiAgICAgLy8gZmllbGQgc2V0IG9uIGVhY2ggc2NhbmxpbmUuIFRoYXQgaXMgY29tcHV0ZWQgYXMgcGFydCBvZiB0aGlzIGNhbGwKICAgICAvLyAoaW5zaWRlIENvbXB1dGVSdW5Cb3VuZHMpLgogICAgIGJvb2wgc2V0UnVucyhSdW5UeXBlIHJ1bnNbXSwgaW50IGNvdW50KTsKIAogICAgIGludCBjb3VudF9ydW50eXBlX3ZhbHVlcyhpbnQqIGl0b3AsIGludCogaWJvdCkgY29uc3Q7Ci0gICAgCisKICAgICBzdGF0aWMgdm9pZCBCdWlsZFJlY3RSdW5zKGNvbnN0IFNrSVJlY3QmIGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1blR5cGUgcnVuc1trUmVjdFJlZ2lvblJ1bnNdKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrU2hhZGVyLmggYi9pbmNsdWRlL2NvcmUvU2tTaGFkZXIuaAppbmRleCA1N2Q5MjBjLi40YzIwNjA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tTaGFkZXIuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tTaGFkZXIuaApAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAgICogIG5lZWQgdG8gY3JlYXRlIHRleHR1cmVzLiBUaGUgc2FtcGxlciBwYXJhbWV0ZXIgaXMgbmVjZXNzYXJ5IHRvIHNldAogICAgICAqICB1cCBtYXRyaXgvdGlsZSBtb2Rlcy9ldGMsIGFuZCB3aWxsIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAgICAgKi8KLSAgICB2aXJ0dWFsIEdyQ3VzdG9tU3RhZ2UqIGFzTmV3Q3VzdG9tU3RhZ2UoR3JDb250ZXh0KiBjb250ZXh0LCAKKyAgICB2aXJ0dWFsIEdyQ3VzdG9tU3RhZ2UqIGFzTmV3Q3VzdG9tU3RhZ2UoR3JDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZSogc2FtcGxlcikgY29uc3Q7CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrU2l6ZS5oIGIvaW5jbHVkZS9jb3JlL1NrU2l6ZS5oCmluZGV4IDEyZGJlYWUuLjgwODU4M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1NpemUuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tTaXplLmgKQEAgLTM2LDE1ICszNiwxNSBAQAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIGZXaWR0aCA8PSAwIHx8IGZIZWlnaHQgPD0gMDsKICAgICB9Ci0gICAgCisKICAgICAvKiogU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIDAgKi8KICAgICB2b2lkIHNldEVtcHR5KCkgewogICAgICAgICBmV2lkdGggPSBmSGVpZ2h0ID0gMDsKICAgICB9Ci0JCi0JVCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZXaWR0aDsgfQotCVQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZkhlaWdodDsgfQotICAgIAorCisgICAgVCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZXaWR0aDsgfQorICAgIFQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZkhlaWdodDsgfQorCiAgICAgLyoqIElmIHdpZHRoIG9yIGhlaWdodCBpcyA8IDAsIGl0IGlzIHNldCB0byAwICovCiAgICAgdm9pZCBjbGFtcE5lZ1RvWmVybygpIHsKICAgICAgICAgaWYgKGZXaWR0aCA8IDApIHsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIGZIZWlnaHQgPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBlcXVhbHMoVCB3LCBUIGgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIGZXaWR0aCA9PSB3ICYmIGZIZWlnaHQgPT0gaDsKICAgICB9CkBAIC04Myw4ICs4Myw4IEBACiAgICAgICAgIHMuZkhlaWdodCA9IGg7CiAgICAgICAgIHJldHVybiBzOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgU2tTaXplJiBvcGVyYXRvcj0oY29uc3QgU2tJU2l6ZSYgc3JjKSB7CiAgICAgICAgIHRoaXMtPnNldChTa0ludFRvU2NhbGFyKHNyYy5mV2lkdGgpLCBTa0ludFRvU2NhbGFyKHNyYy5mSGVpZ2h0KSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1N0cmVhbS5oIGIvaW5jbHVkZS9jb3JlL1NrU3RyZWFtLmgKaW5kZXggZjM5NGRlZS4uMDhkMDg3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrU3RyZWFtLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrU3RyZWFtLmgKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAvKiogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHN0cmVhbS4KICAgICAqLwogICAgIHNpemVfdCBnZXRMZW5ndGgoKSB7IHJldHVybiB0aGlzLT5yZWFkKE5VTEwsIDApOyB9Ci0gICAgCisKICAgICAvKiogU2tpcCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcywgcmV0dXJuaW5nIHRoZSBhY3R1YWwgbnVtYmVyCiAgICAgICAgIG9mIGJ5dGVzIHRoYXQgY291bGQgYmUgc2tpcHBlZC4KICAgICAqLwpAQCAtOTEsNyArOTEsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOwogCiAgICAgLy8gaGVscGVycwotICAgIAorCiAgICAgYm9vbCAgICB3cml0ZTgoVThDUFUpOwogICAgIGJvb2wgICAgd3JpdGUxNihVMTZDUFUpOwogICAgIGJvb2wgICAgd3JpdGUzMih1aW50MzJfdCk7CkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogICAgIGJvb2wgICAgd3JpdGVCaWdEZWNBc1RleHQoaW50NjRfdCwgaW50IG1pbkRpZ2l0cyA9IDApOwogICAgIGJvb2wgICAgd3JpdGVIZXhBc1RleHQodWludDMyX3QsIGludCBtaW5EaWdpdHMgPSAwKTsKICAgICBib29sICAgIHdyaXRlU2NhbGFyQXNUZXh0KFNrU2NhbGFyKTsKLSAgICAKKwogICAgIGJvb2wgICAgd3JpdGVCb29sKGJvb2wgdikgeyByZXR1cm4gdGhpcy0+d3JpdGU4KHYpOyB9CiAgICAgYm9vbCAgICB3cml0ZVNjYWxhcihTa1NjYWxhcik7CiAgICAgYm9vbCAgICB3cml0ZVBhY2tlZFVJbnQoc2l6ZV90KTsKLSAgICAKKwogICAgIGJvb2wgd3JpdGVTdHJlYW0oU2tTdHJlYW0qIGlucHV0LCBzaXplX3QgbGVuZ3RoKTsKIAogICAgIGJvb2wgd3JpdGVEYXRhKGNvbnN0IFNrRGF0YSopOwpAQCAtMTYxLDE1ICsxNjEsMTUgQEAKICAgICAgKi8KICAgICBTa0ZEU3RyZWFtKGludCBmaWxlRGVzYywgYm9vbCBjbG9zZVdoZW5Eb25lKTsKICAgICB2aXJ0dWFsIH5Ta0ZEU3RyZWFtKCk7Ci0gICAgCisKICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHBhdGggY291bGQgYmUgb3BlbmVkLgogICAgICAqLwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGZGRCA+PSAwOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgcmV3aW5kKCkgU0tfT1ZFUlJJREU7CiAgICAgdmlydHVhbCBzaXplX3QgcmVhZCh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKSBTS19PVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGdldEZpbGVOYW1lKCkgU0tfT1ZFUlJJREUgeyByZXR1cm4gTlVMTDsgfQotICAgIAorCiBwcml2YXRlOgogICAgIGludCAgICAgZkZEOwogICAgIGJvb2wgICAgZkNsb3NlV2hlbkRvbmU7CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICBjb25zdCB2b2lkKiBnZXRBdFBvcygpOwogICAgIHNpemVfdCBzZWVrKHNpemVfdCBvZmZzZXQpOwogICAgIHNpemVfdCBwZWVrKCkgY29uc3QgeyByZXR1cm4gZk9mZnNldDsgfQotICAgIAorCiBwcml2YXRlOgogICAgIFNrRGF0YSogZkRhdGE7CiAgICAgc2l6ZV90ICBmT2Zmc2V0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrU3VyZmFjZS5oIGIvaW5jbHVkZS9jb3JlL1NrU3VyZmFjZS5oCmluZGV4IDg4NDA0NWYuLjhlNDA3YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1N1cmZhY2UuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tTdXJmYWNlLmgKQEAgLTc5LDEzICs3OSwxMyBAQAogICAgICAqICAwLgogICAgICAqLwogICAgIHVpbnQzMl90IGdlbmVyYXRpb25JRCgpIGNvbnN0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogIENhbGwgdGhpcyBpZiB0aGUgY29udGVudHMgaGF2ZSBjaGFuZ2VkLiBUaGlzIHdpbGwgKGxhemlseSkgZm9yY2UgYSBuZXcKICAgICAgKiAgdmFsdWUgdG8gYmUgcmV0dXJuZWQgZnJvbSBnZW5lcmF0aW9uSUQoKSB3aGVuIGl0IGlzIGNhbGxlZCBuZXh0LgogICAgICAqLwogICAgIHZvaWQgbm90aWZ5Q29udGVudENoYW5nZWQoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm4gYSBjYW52YXMgdGhhdCB3aWxsIGRyYXcgaW50byB0aGlzIHN1cmZhY2UuIFRoaXMgd2lsbCBhbHdheXMKICAgICAgKiAgcmV0dXJuIHRoZSBzYW1lIGNhbnZhcyBmb3IgYSBnaXZlbiBzdXJmYWNlLCBhbmQgaXMgbWFuZ2VkL293bmVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrVEFycmF5LmggYi9pbmNsdWRlL2NvcmUvU2tUQXJyYXkuaAppbmRleCAwMWZjMTQyLi4zY2E2Njc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tUQXJyYXkuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tUQXJyYXkuaApAQCAtNjAsMTMgKzYwLDEzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBlbXB0eSBhcnJheSB0aGF0IHdpbGwgcHJlYWxsb2NhdGUgc3BhY2UgZm9yIHJlc2VydmVDb3VudCAKKyAgICAgKiBDcmVhdGVzIGFuIGVtcHR5IGFycmF5IHRoYXQgd2lsbCBwcmVhbGxvY2F0ZSBzcGFjZSBmb3IgcmVzZXJ2ZUNvdW50CiAgICAgICogZWxlbWVudHMuCiAgICAgICovCiAgICAgZXhwbGljaXQgU2tUQXJyYXkoaW50IHJlc2VydmVDb3VudCkgewogICAgICAgICB0aGlzLT5pbml0KE5VTEwsIDAsIE5VTEwsIHJlc2VydmVDb3VudCk7CiAgICAgfQotICAKKwogICAgIC8qKgogICAgICAqIENvcGllcyBvbmUgYXJyYXkgdG8gYW5vdGhlci4gVGhlIG5ldyBhcnJheSB3aWxsIGJlIGhlYXAgYWxsb2NhdGVkLgogICAgICAqLwpAQCAtNzUsNyArNzUsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBTa1RBcnJheSBieSBjb3B5aW5nIGNvbnRlbnRzIG9mIGEgc3RhbmRhcmQgQyBhcnJheS4gVGhlIG5ldyAKKyAgICAgKiBDcmVhdGVzIGEgU2tUQXJyYXkgYnkgY29weWluZyBjb250ZW50cyBvZiBhIHN0YW5kYXJkIEMgYXJyYXkuIFRoZSBuZXcKICAgICAgKiBhcnJheSB3aWxsIGJlIGhlYXAgYWxsb2NhdGVkLiBCZSBjYXJlZnVsIG5vdCB0byB1c2UgdGhpcyBjb25zdHJ1Y3RvcgogICAgICAqIHdoZW4geW91IHJlYWxseSB3YW50IHRoZSAodm9pZCosIGludCkgdmVyc2lvbi4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1REQXJyYXkuaCBiL2luY2x1ZGUvY29yZS9Ta1REQXJyYXkuaAppbmRleCAyZDdlYzE4Li45OTdhMDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tUREFycmF5LmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrVERBcnJheS5oCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgICAgIFNrQVNTRVJUKGZSZXNlcnZlID09IDAgJiYgZkNvdW50ID09IDApOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdm9pZCByZXdpbmQoKSB7CiAgICAgICAgIC8vIHNhbWUgYXMgc2V0Q291bnQoMCkKICAgICAgICAgZkNvdW50ID0gMDsKQEAgLTE2Niw5ICsxNjYsOSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmQXJyYXkgKyBvbGRDb3VudDsKICAgICB9Ci0gICAgCisKICAgICBUKiBhcHBlbmRDbGVhcigpIHsKLSAgICAgICAgVCogcmVzdWx0ID0gdGhpcy0+YXBwZW5kKCk7IAorICAgICAgICBUKiByZXN1bHQgPSB0aGlzLT5hcHBlbmQoKTsKICAgICAgICAgKnJlc3VsdCA9IDA7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrVERMaW5rZWRMaXN0LmggYi9pbmNsdWRlL2NvcmUvU2tURExpbmtlZExpc3QuaAppbmRleCBhNzZlZjk2Li43YWZiNWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tURExpbmtlZExpc3QuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tURExpbmtlZExpc3QuaApAQCAtMTAsNyArMTAsNyBAQAogCiAjaW5jbHVkZSAiU2tUeXBlcy5oIgogCi0vKiogCisvKioKICAqIEhlbHBlciBjbGFzcyB0byBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgdGhlIGRvdWJseSBsaW5rZWQgbGlzdAogICogY3JlYXRlZCBwb2ludGVycy4KICAqLwpAQCAtOTEsOCArOTEsOCBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyAKLSAgICAgICAgcmV0dXJuIE5VTEwgPT0gZkhlYWQgJiYgTlVMTCA9PSBmVGFpbDsgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeworICAgICAgICByZXR1cm4gTlVMTCA9PSBmSGVhZCAmJiBOVUxMID09IGZUYWlsOwogICAgIH0KIAogICAgIGNsYXNzIEl0ZXIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrVExhenkuaCBiL2luY2x1ZGUvY29yZS9Ta1RMYXp5LmgKaW5kZXggOWNmYWNjYi4uY2YyZDk0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb3JlL1NrVExhenkuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tUTGF6eS5oCkBAIC03NiwxMyArNzYsMTMgQEAKICAgICAgKiAgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIE5VTEwgIT0gZlB0cjsgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJldHVybnMgZWl0aGVyIE5VTEwsIG9yIGEgY29weSBvZiB0aGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCB0bwogICAgICAqICBzZXQoKSBvciB0aGUgY29uc3RydWN0b3IuCiAgICAgICovCiAgICAgVCogZ2V0KCkgY29uc3QgeyBTa0FTU0VSVCh0aGlzLT5pc1ZhbGlkKCkpOyByZXR1cm4gZlB0cjsgfQotICAgIAorCiBwcml2YXRlOgogICAgIFQqICAgZlB0cjsgLy8gTlVMTCBvciBmU3RvcmFnZQogICAgIGNoYXIgZlN0b3JhZ2Vbc2l6ZW9mKFQpXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1RTZWFyY2guaCBiL2luY2x1ZGUvY29yZS9Ta1RTZWFyY2guaAppbmRleCBmNjk1MWRhLi4yNTQxNjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tUU2VhcmNoLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrVFNlYXJjaC5oCkBAIC0yMjAsNyArMjIwLDcgQEAKIHB1YmxpYzoKICAgICBTa0F1dG9Bc2NpaVRvTEMoY29uc3QgY2hhciBzdHJbXSwgc2l6ZV90IGxlbiA9IChzaXplX3QpLTEpOwogICAgIH5Ta0F1dG9Bc2NpaVRvTEMoKTsKLSAgICAKKwogICAgIGNvbnN0IGNoYXIqIGxjKCkgY29uc3QgeyByZXR1cm4gZkxDOyB9CiAgICAgc2l6ZV90ICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZkxlbmd0aDsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tUZW1wbGF0ZXMuaCBiL2luY2x1ZGUvY29yZS9Ta1RlbXBsYXRlcy5oCmluZGV4IGMxNTJiMzEuLmU0YzhiYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1RlbXBsYXRlcy5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1RlbXBsYXRlcy5oCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAvKiogUmV0dXJuIHRoZSBhcnJheSBvZiBUIGVsZW1lbnRzLiBXaWxsIGJlIE5VTEwgaWYgY291bnQgPT0gMAogICAgICAqLwogICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIGZBcnJheTsgfQotICAgIAorCiAgICAgLyoqIFJldHVybiB0aGUgbnRoIGVsZW1lbnQgaW4gdGhlIGFycmF5CiAgICAgICovCiAgICAgVCYgIG9wZXJhdG9yW10oaW50IGluZGV4KSBjb25zdCB7CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgfQogICAgICAgICBmQ291bnQgPSBjb3VudDsKICAgICB9Ci0gICAgCisKICAgICB+U2tBdXRvU1RBcnJheSgpIHsKICAgICAgICAgaWYgKGZDb3VudCA+IE4pIHsKICAgICAgICAgICAgIGRlbGV0ZVtdIGZBcnJheTsKQEAgLTE4MiwyMiArMTgyLDIyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgVCBlbGVtZW50cyBpbiB0aGUgYXJyYXkKICAgICAgKi8KICAgICBzaXplX3QgY291bnQoKSBjb25zdCB7IHJldHVybiBmQ291bnQ7IH0KLSAgICAKKwogICAgIC8qKiBSZXR1cm4gdGhlIGFycmF5IG9mIFQgZWxlbWVudHMuIFdpbGwgYmUgTlVMTCBpZiBjb3VudCA9PSAwCiAgICAgICovCiAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gZkFycmF5OyB9Ci0gICAgCisKICAgICAvKiogUmV0dXJuIHRoZSBudGggZWxlbWVudCBpbiB0aGUgYXJyYXkKICAgICAgKi8KICAgICBUJiAgb3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKICAgICAgICAgU2tBU1NFUlQoKHVuc2lnbmVkKWluZGV4IDwgZkNvdW50KTsKICAgICAgICAgcmV0dXJuIGZBcnJheVtpbmRleF07CiAgICAgfQotICAgIAorCiBwcml2YXRlOgogICAgIHNpemVfdCAgZkNvdW50OwogICAgIFQqICAgICAgZkFycmF5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrVGhyZWFkLmggYi9pbmNsdWRlL2NvcmUvU2tUaHJlYWQuaAppbmRleCA1YjFmYzFjLi40YTI0OTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tUaHJlYWQuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tUaHJlYWQuaApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBTa0FTU0VSVChmTXV0ZXggIT0gTlVMTCk7CiAgICAgICAgIG11dGV4LmFjcXVpcmUoKTsKICAgICB9Ci0gICAgCisKICAgICBTa0F1dG9NdXRleEFjcXVpcmUoU2tCYXNlTXV0ZXgqIG11dGV4KSA6IGZNdXRleChtdXRleCkgewogICAgICAgICBpZiAobXV0ZXgpIHsKICAgICAgICAgICAgIG11dGV4LT5hY3F1aXJlKCk7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBmTXV0ZXggPSBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogcHJpdmF0ZToKICAgICBTa0Jhc2VNdXRleCogZk11dGV4OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1R5cGVmYWNlLmggYi9pbmNsdWRlL2NvcmUvU2tUeXBlZmFjZS5oCmluZGV4IDczNzk0ZGIuLjc4ZWM5ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1R5cGVmYWNlLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrVHlwZWZhY2UuaApAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBkYXRhLiBXaWxsIG5ldmVyIHJldHVybiAwLgogICAgICAqLwogICAgIFNrRm9udElEIHVuaXF1ZUlEKCkgY29uc3QgeyByZXR1cm4gZlVuaXF1ZUlEOyB9Ci0gICAgCisKICAgICAvKiogUmV0dXJuIHRoZSB1bmlxdWVJRCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlZmFjZS4gSWYgdGhlIGZhY2UgaXMgbnVsbCwKICAgICAgICAgcmVzb2x2ZSBpdCB0byB0aGUgZGVmYXVsdCBmb250IGFuZCByZXR1cm4gaXRzIHVuaXF1ZUlELiBXaWxsIG5ldmVyCiAgICAgICAgIHJldHVybiAwLgpAQCAtMTQyLDI1ICsxNDIsMjUgQEAKIAogICAgIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0YWJsZXMgaW4gdGhlIGZvbnQuICovCiAgICAgaW50IGNvdW50VGFibGVzKCkgY29uc3Q7Ci0gICAgCisKICAgICAvKiogQ29weSBpbnRvIHRhZ3NbXSAoYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIpIHRoZSBsaXN0IG9mIHRhYmxlIHRhZ3MgaW4KICAgICAgKiAgdGhlIGZvbnQsIGFuZCByZXR1cm4gdGhlIG51bWJlci4gVGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIENvdW50VGFibGVzKCkKICAgICAgKiAgb3IgMCBpZiBhbiBlcnJvciBvY2N1cmVkLiBJZiB0YWdzID09IE5VTEwsIHRoaXMgb25seSByZXR1cm5zIHRoZSBjb3VudAogICAgICAqICAodGhlIHNhbWUgYXMgY2FsbGluZyBjb3VudFRhYmxlcygpKS4KICAgICAgKi8KICAgICBpbnQgZ2V0VGFibGVUYWdzKFNrRm9udFRhYmxlVGFnIHRhZ3NbXSkgY29uc3Q7Ci0gICAgCisKICAgICAvKiogR2l2ZW4gYSB0YWJsZSB0YWcsIHJldHVybiB0aGUgc2l6ZSBvZiBpdHMgY29udGVudHMsIG9yIDAgaWYgbm90IHByZXNlbnQKICAgICAgKi8KICAgICBzaXplX3QgZ2V0VGFibGVTaXplKFNrRm9udFRhYmxlVGFnKSBjb25zdDsKLSAgICAKKwogICAgIC8qKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhIHRhYmxlIGludG8gZGF0YSAoYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIpLiBOb3RlCiAgICAgICogIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSB3aWxsIGJlIGluIHRoZWlyIG5hdGl2ZSBlbmRpYW4gb3JkZXIKICAgICAgKiAgKHdoaWNoIGZvciBtb3N0IHRydWV0eXBlIHRhYmxlcyBpcyBiaWcgZW5kaWFuKS4gSWYgdGhlIHRhYmxlIHRhZyBpcwogICAgICAqICBub3QgZm91bmQsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGNvcHlpbmcgdGhlIGRhdGEsIHRoZW4gMCBpcyByZXR1cm5lZC4KICAgICAgKiAgSWYgdGhpcyBoYXBwZW5zLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgb3IgYWxsIG9mIHRoZSBtZW1vcnkgcG9pbnRlZAogICAgICAqICB0byBieSBkYXRhIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB0bywgZXZlbiB0aG91Z2ggYW4gZXJyb3IgaGFzIG9jY3VyZWQuCi0gICAgICogIAorICAgICAqCiAgICAgICogIEBwYXJhbSBmb250SUQgdGhlIGZvbnQgdG8gY29weSB0aGUgdGFibGUgZnJvbQogICAgICAqICBAcGFyYW0gdGFnICBUaGUgdGFibGUgdGFnIHdob3NlIGNvbnRlbnRzIGFyZSB0byBiZSBjb3BpZWQKICAgICAgKiAgQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIHRhYmxlJ3MgY29udGVudHMgd2hlcmUgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvcmUvU2tUeXBlcy5oIGIvaW5jbHVkZS9jb3JlL1NrVHlwZXMuaAppbmRleCA3M2JkNDI5Li5lYjg3MTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvcmUvU2tUeXBlcy5oCisrKyBiL2luY2x1ZGUvY29yZS9Ta1R5cGVzLmgKQEAgLTQzMiw3ICs0MzIsNyBAQAogICAgICAgICAgKiAgbWFsbG9jIGEgbmV3IGJsb2NrIG9mIHRoZSBzbWFsbGVyIHNpemUuCiAgICAgICAgICAqLwogICAgICAgICBrQWxsb2NfT25TaHJpbmssCi0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgSWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzaXplLCBhbmQgdGhlCiAgICAgICAgICAqICBjdXJyZW50IGJsb2NrIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwganVzdCByZXR1cm4gdGhlIG9sZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrVW5QcmVNdWx0aXBseS5oIGIvaW5jbHVkZS9jb3JlL1NrVW5QcmVNdWx0aXBseS5oCmluZGV4IDcwODg5MTguLjRmYTVkNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1VuUHJlTXVsdGlwbHkuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tVblByZU11bHRpcGx5LmgKQEAgLTE4LDcgKzE4LDcgQEAKIGNsYXNzIFNLX0FQSSBTa1VuUHJlTXVsdGlwbHkgewogcHVibGljOgogICAgIHR5cGVkZWYgdWludDMyX3QgU2NhbGU7Ci0gICAgCisKICAgICAvLyBpbmRleCB0aGlzIHRhYmxlIHdpdGggYWxwaGEgWzAuLjI1NV0KICAgICBzdGF0aWMgY29uc3QgU2NhbGUqIEdldFNjYWxlVGFibGUoKSB7CiAgICAgICAgIHJldHVybiBnVGFibGU7CkBAIC0yOCwxNSArMjgsMTUgQEAKICAgICAgICAgU2tBU1NFUlQoYWxwaGEgPD0gMjU1KTsKICAgICAgICAgcmV0dXJuIGdUYWJsZVthbHBoYV07CiAgICAgfQotICAgIAorCiAgICAgLyoqIFVzYWdlOgotICAgICAKKwogICAgICAgICBjb25zdCBTY2FsZSogdGFibGUgPSBTa1VuUHJlTXVsdGlwbHk6OkdldFNjYWxlVGFibGUoKTsKLSAgICAgCisKICAgICAgICAgZm9yICguLi4pIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGEgPSAuLi4KICAgICAgICAgICAgIFNrVW5QcmVNdWx0aXBseTo6U2NhbGUgc2NhbGUgPSB0YWJsZVthXTsKLSAgICAgCisKICAgICAgICAgICAgIHJlZCA9IFNrVW5QcmVNdWx0aXBseTo6QXBwbHlTY2FsZShzY2FsZSwgcmVkKTsKICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgLy8gbm93IHJlZCBpcyB1bnByZW11bHRpcGxpZWQKQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICAgICAgU2tBU1NFUlQoY29tcG9uZW50IDw9IDI1NSk7CiAgICAgICAgIHJldHVybiAoc2NhbGUgKiBjb21wb25lbnQgKyAoMSA8PCAyMykpID4+IDI0OwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBTa0NvbG9yIFBNQ29sb3JUb0NvbG9yKFNrUE1Db2xvciBjKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgZ1RhYmxlWzI1Nl07CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb3JlL1NrVW5pdE1hcHBlci5oIGIvaW5jbHVkZS9jb3JlL1NrVW5pdE1hcHBlci5oCmluZGV4IDQ3YTRkYWQuLjQ1YmI5ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1VuaXRNYXBwZXIuaAorKysgYi9pbmNsdWRlL2NvcmUvU2tVbml0TWFwcGVyLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAvKiogR2l2ZW4gYSB2YWx1ZSBpbiBbMC4uMHhGRkZGXSwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHNhbWUgcmFuZ2UuCiAgICAgKi8KICAgICB2aXJ0dWFsIHVpbnQxNl90IG1hcFVuaXQxNih1aW50MTZfdCB4KSA9IDA7Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICBTa1VuaXRNYXBwZXIoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImIHJiKSA6IFNrRmxhdHRlbmFibGUocmIpIHt9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1dyaXRlcjMyLmggYi9pbmNsdWRlL2NvcmUvU2tXcml0ZXIzMi5oCmluZGV4IDc5M2U4MTUuLjc4Y2ZiMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1dyaXRlcjMyLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrV3JpdGVyMzIuaApAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIHRoaXMtPndyaXRlSW50KHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgd3JpdGVJbnQoaW50MzJfdCB2YWx1ZSkgewogICAgICAgICAqKGludDMyX3QqKXRoaXMtPnJlc2VydmUoc2l6ZW9mKHZhbHVlKSkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHdyaXRlOChpbnQzMl90IHZhbHVlKSB7CiAgICAgICAgICooaW50MzJfdCopdGhpcy0+cmVzZXJ2ZShzaXplb2YodmFsdWUpKSA9IHZhbHVlICYgMHhGRjsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHdyaXRlMTYoaW50MzJfdCB2YWx1ZSkgewogICAgICAgICAqKGludDMyX3QqKXRoaXMtPnJlc2VydmUoc2l6ZW9mKHZhbHVlKSkgPSB2YWx1ZSAmIDB4RkZGRjsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHdyaXRlMzIoaW50MzJfdCB2YWx1ZSkgewogICAgICAgICAqKGludDMyX3QqKXRoaXMtPnJlc2VydmUoc2l6ZW9mKHZhbHVlKSkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHdyaXRlUHRyKHZvaWQqIHB0cikgewogICAgICAgICAvLyBTaW5jZSB3ZSAia25vdyIgdGhhdCB3ZSdyZSBhbHdheXMgNC1ieXRlIGFsaWduZWQsIHdlIGNhbiB0ZWxsIHRoZQogICAgICAgICAvLyBjb21waWxlciB0aGF0IGhlcmUsIGJ5IGFzc2lnbmluZyB0byBhbiBpbnQzMiBwdHIuCkBAIC05MSwxMSArOTEsMTEgQEAKICAgICB2b2lkIHdyaXRlU2NhbGFyKFNrU2NhbGFyIHZhbHVlKSB7CiAgICAgICAgICooU2tTY2FsYXIqKXRoaXMtPnJlc2VydmUoc2l6ZW9mKHZhbHVlKSkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHdyaXRlUG9pbnQoY29uc3QgU2tQb2ludCYgcHQpIHsKICAgICAgICAgKihTa1BvaW50Kil0aGlzLT5yZXNlcnZlKHNpemVvZihwdCkpID0gcHQ7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCB3cml0ZVJlY3QoY29uc3QgU2tSZWN0JiByZWN0KSB7CiAgICAgICAgICooU2tSZWN0Kil0aGlzLT5yZXNlcnZlKHNpemVvZihyZWN0KSkgPSByZWN0OwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICBTa0FTU0VSVChTa0FsaWduNChzaXplKSA9PSBzaXplKTsKICAgICAgICAgbWF0cml4LndyaXRlVG9NZW1vcnkodGhpcy0+cmVzZXJ2ZShzaXplKSk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCB3cml0ZVJlZ2lvbihjb25zdCBTa1JlZ2lvbiYgcmduKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gcmduLndyaXRlVG9NZW1vcnkoTlVMTCk7CiAgICAgICAgIFNrQVNTRVJUKFNrQWxpZ240KHNpemUpID09IHNpemUpOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgIC8vIGluIHRoZSBjdXJyZW50IGJsb2NrCiAgICAgICAgIG1lbWNweSh0aGlzLT5yZXNlcnZlKHNpemUpLCB2YWx1ZXMsIHNpemUpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgd3JpdGVQYWQoY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSk7CiAKICAgICAvKioKQEAgLTE2MSwxNCArMTYxLDE0IEBACiAgICAgLy8gYmUgYSBtdWx0aXBsZSBvZiA0LiBUaGlzIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3BhY2UsIHNvIHRoZSByZXR1cm5lZAogICAgIC8vIGFkZHJlc3MgaXMgb25seSB2YWxpZCBmb3IgMSBpbnQuCiAgICAgdWludDMyX3QqIHBlZWszMihzaXplX3Qgb2Zmc2V0KTsKLSAgICAKKwogICAgIC8vIGNvcHkgaW50byBhIHNpbmdsZSBidWZmZXIgKGFsbG9jYXRlZCBieSBjYWxsZXIpLiBNdXN0IGJlIGF0IGxlYXN0IHNpemUoKQogICAgIHZvaWQgZmxhdHRlbih2b2lkKiBkc3QpIGNvbnN0OwotICAgIAorCiAgICAgLy8gcmVhZCBmcm9tIHRoZSBzdHJlYW0sIGFuZCB3cml0ZSB1cCB0byBsZW5ndGggYnl0ZXMuIFJldHVybiB0aGUgYWN0dWFsCiAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCiAgICAgc2l6ZV90IHJlYWRGcm9tU3RyZWFtKFNrU3RyZWFtKiwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgCisKICAgICBib29sIHdyaXRlVG9TdHJlYW0oU2tXU3RyZWFtKik7CiAKIHByaXZhdGU6CkBAIC0xOTYsNyArMTk2LDcgQEAKIHRlbXBsYXRlIDxzaXplX3QgU0laRT4gY2xhc3MgU2tTV3JpdGVyMzIgOiBwdWJsaWMgU2tXcml0ZXIzMiB7CiBwdWJsaWM6CiAgICAgU2tTV3JpdGVyMzIoc2l6ZV90IG1pblNpemUpIDogU2tXcml0ZXIzMihtaW5TaXplLCBmRGF0YS5mU3RvcmFnZSwgU0laRSkge30KLSAgICAKKwogcHJpdmF0ZToKICAgICB1bmlvbiB7CiAgICAgICAgIHZvaWQqICAgZlB0ckFsaWdubWVudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29yZS9Ta1hmZXJtb2RlLmggYi9pbmNsdWRlL2NvcmUvU2tYZmVybW9kZS5oCmluZGV4IDJiN2MxMWUuLjk5ZDVhOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29yZS9Ta1hmZXJtb2RlLmgKKysrIGIvaW5jbHVkZS9jb3JlL1NrWGZlcm1vZGUuaApAQCAtMTAxLDExICsxMDEsMTEgQEAKICAgICAgICAgLy8gYWxsIHJlbWFpbmluZyBtb2RlcyBhcmUgZGVmaW5lZCBpbiB0aGUgU1ZHIENvbXBvc2l0aW5nIHN0YW5kYXJkCiAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtU1ZHQ29tcG9zaXRpbmctMjAwOTA0MzAvCiAgICAgICAgIGtQbHVzX01vZGUsCi0gICAgICAgIGtNdWx0aXBseV9Nb2RlLCAKLSAgICAgICAgCisgICAgICAgIGtNdWx0aXBseV9Nb2RlLAorCiAgICAgICAgIC8vIGFsbCBhYm92ZSBtb2RlcyBjYW4gYmUgZXhwcmVzc2VkIGFzIHBhaXIgb2Ygc3JjL2RzdCBDb2VmZnMKLSAgICAgICAga0NvZWZmTW9kZXNDbnQsIAotICAgICAgICAKKyAgICAgICAga0NvZWZmTW9kZXNDbnQsCisKICAgICAgICAga1NjcmVlbl9Nb2RlID0ga0NvZWZmTW9kZXNDbnQsCiAgICAgICAgIGtPdmVybGF5X01vZGUsCiAgICAgICAgIGtEYXJrZW5fTW9kZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9TazFEUGF0aEVmZmVjdC5oIGIvaW5jbHVkZS9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmgKaW5kZXggZWFmYWMzNi4uOWZhZDFlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmgKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgICAgICBrVHJhbnNsYXRlX1N0eWxlLCAgIC8vIHRyYW5zbGF0ZSB0aGUgc2hhcGUgdG8gZWFjaCBwb3NpdGlvbgogICAgICAgICBrUm90YXRlX1N0eWxlLCAgICAgIC8vIHJvdGF0ZSB0aGUgc2hhcGUgYWJvdXQgaXRzIGNlbnRlcgogICAgICAgICBrTW9ycGhfU3R5bGUsICAgICAgIC8vIHRyYW5zZm9ybSBlYWNoIHBvaW50LCBhbmQgdHVybiBsaW5lcyBpbnRvIGN1cnZlcwotICAgICAgICAKKwogICAgICAgICBrU3R5bGVDb3VudAogICAgIH07Ci0gICAgCisKICAgICAvKiogRGFzaCBieSByZXBsaWNhdGluZyB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgICAgIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHJlcGxpY2F0ZSAoZGFzaCkKICAgICAgICAgQHBhcmFtIGFkdmFuY2UgVGhlIHNwYWNlIGJldHdlZW4gaW5zdGFuY2VzIG9mIHBhdGgKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAvLyBvdmVycmlkZXMgZnJvbSBTazFEUGF0aEVmZmVjdAogICAgIHZpcnR1YWwgU2tTY2FsYXIgYmVnaW4oU2tTY2FsYXIgY29udG91ckxlbmd0aCkgU0tfT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTa1NjYWxhciBuZXh0KFNrUGF0aCosIFNrU2NhbGFyIGRpc3RhbmNlLCBTa1BhdGhNZWFzdXJlJikgU0tfT1ZFUlJJREU7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tQYXRoICAgICAgZlBhdGg7ICAgICAgICAgIC8vIGNvcGllZCBmcm9tIGNvbnN0cnVjdG9yCiAgICAgU2tTY2FsYXIgICAgZkFkdmFuY2U7ICAgICAgIC8vIGNvcGllZCBmcm9tIGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2syRFBhdGhFZmZlY3QuaCBiL2luY2x1ZGUvZWZmZWN0cy9TazJEUGF0aEVmZmVjdC5oCmluZGV4IDcyNGZiOGYuLmFkYzI3ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZWZmZWN0cy9TazJEUGF0aEVmZmVjdC5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9TazJEUGF0aEVmZmVjdC5oCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICogIHRoZSBsYXRpY2UuCiAgICAgICovCiAgICAgU2tQYXRoMkRQYXRoRWZmZWN0KGNvbnN0IFNrTWF0cml4JiwgY29uc3QgU2tQYXRoJik7Ci0gICAgCisKICAgICBTS19ERUNMQVJFX1BVQkxJQ19GTEFUVEVOQUJMRV9ERVNFUklBTElaQVRJT05fUFJPQ1MoU2tQYXRoMkRQYXRoRWZmZWN0KQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tCbHVyRHJhd0xvb3Blci5oIGIvaW5jbHVkZS9lZmZlY3RzL1NrQmx1ckRyYXdMb29wZXIuaAppbmRleCAyYWZmMmYzLi4wZjQwMGNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tCbHVyRHJhd0xvb3Blci5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta0JsdXJEcmF3TG9vcGVyLmgKQEAgLTI1LDggKzI1LDggQEAKIHB1YmxpYzoKICAgICBlbnVtIEJsdXJGbGFncyB7CiAgICAgICAgIGtOb25lX0JsdXJGbGFnID0gMHgwMCwKLSAgICAgICAgLyoqIAotICAgICAgICAgICAgVGhlIGJsdXIgbGF5ZXIncyBkeC9keS9yYWRpdXMgYXJlbid0IGFmZmVjdGVkIGJ5IHRoZSBjYW52YXMgCisgICAgICAgIC8qKgorICAgICAgICAgICAgVGhlIGJsdXIgbGF5ZXIncyBkeC9keS9yYWRpdXMgYXJlbid0IGFmZmVjdGVkIGJ5IHRoZSBjYW52YXMKICAgICAgICAgICAgIHRyYW5zZm9ybS4KICAgICAgICAgKi8KICAgICAgICAga0lnbm9yZVRyYW5zZm9ybV9CbHVyRmxhZyAgID0gMHgwMSwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAga0FsbF9CbHVyRmxhZyA9IDB4MDcKICAgICB9OwogCi0gICAgU2tCbHVyRHJhd0xvb3BlcihTa1NjYWxhciByYWRpdXMsIFNrU2NhbGFyIGR4LCBTa1NjYWxhciBkeSwgU2tDb2xvciBjb2xvciwgCisgICAgU2tCbHVyRHJhd0xvb3BlcihTa1NjYWxhciByYWRpdXMsIFNrU2NhbGFyIGR4LCBTa1NjYWxhciBkeSwgU2tDb2xvciBjb2xvciwKICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzID0ga05vbmVfQmx1ckZsYWcpOwogICAgIHZpcnR1YWwgflNrQmx1ckRyYXdMb29wZXIoKTsKIApAQCAtNTUsNyArNTUsNyBAQAogICAgIFNrQ29sb3JGaWx0ZXIqICBmQ29sb3JGaWx0ZXI7CiAgICAgU2tTY2FsYXIgICAgICAgIGZEeCwgZkR5OwogICAgIFNrQ29sb3IgICAgICAgICBmQmx1ckNvbG9yOwotICAgIHVpbnQzMl90ICAgICAgICBmQmx1ckZsYWdzOyAgCisgICAgdWludDMyX3QgICAgICAgIGZCbHVyRmxhZ3M7CiAKICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAga0JlZm9yZUVkZ2UsCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGtEb25lCiAgICAgfTsKICAgICBTdGF0ZSAgIGZTdGF0ZTsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tEcmF3TG9vcGVyIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta0JsdXJNYXNrRmlsdGVyLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tCbHVyTWFza0ZpbHRlci5oCmluZGV4IDlhMWM5Y2UuLjUwMGU2ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZWZmZWN0cy9Ta0JsdXJNYXNrRmlsdGVyLmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrQmx1ck1hc2tGaWx0ZXIuaApAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBAcGFyYW0gZmxhZ3MgICAgRmxhZ3MgdG8gdXNlIC0gZGVmYXVsdHMgdG8gbm9uZQogICAgICAgICBAcmV0dXJuIFRoZSBuZXcgYmx1ciBtYXNrZmlsdGVyCiAgICAgKi8KLSAgICBzdGF0aWMgU2tNYXNrRmlsdGVyKiBDcmVhdGUoU2tTY2FsYXIgcmFkaXVzLCBCbHVyU3R5bGUgc3R5bGUsIAorICAgIHN0YXRpYyBTa01hc2tGaWx0ZXIqIENyZWF0ZShTa1NjYWxhciByYWRpdXMsIEJsdXJTdHlsZSBzdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MgPSBrTm9uZV9CbHVyRmxhZyk7CiAKICAgICAvKiogQ3JlYXRlIGFuIGVtYm9zcyBtYXNrZmlsdGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tDb2xvckZpbHRlckltYWdlRmlsdGVyLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tDb2xvckZpbHRlckltYWdlRmlsdGVyLmgKaW5kZXggMmQwN2Q1MS4uNzNiM2ZhOSAxMDA3NTUKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrQ29sb3JGaWx0ZXJJbWFnZUZpbHRlci5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta0NvbG9yRmlsdGVySW1hZ2VGaWx0ZXIuaApAQCAtMTgsMTcgKzE4LDE3IEBACiAgICAgdmlydHVhbCB+U2tDb2xvckZpbHRlckltYWdlRmlsdGVyKCk7CiAKICAgICBTS19ERUNMQVJFX1BVQkxJQ19GTEFUVEVOQUJMRV9ERVNFUklBTElaQVRJT05fUFJPQ1MoU2tDb2xvckZpbHRlckltYWdlRmlsdGVyKQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgU2tDb2xvckZpbHRlckltYWdlRmlsdGVyKFNrRmxhdHRlbmFibGVSZWFkQnVmZmVyJiBidWZmZXIpOwogICAgIHZpcnR1YWwgdm9pZCBmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYpIGNvbnN0IFNLX09WRVJSSURFOwotICAgIAorCiAgICAgdmlydHVhbCBib29sIG9uRmlsdGVySW1hZ2UoUHJveHkqLCBjb25zdCBTa0JpdG1hcCYgc3JjLCBjb25zdCBTa01hdHJpeCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tCaXRtYXAqIHJlc3VsdCwgU2tJUG9pbnQqIGxvYykgU0tfT1ZFUlJJREU7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tDb2xvckZpbHRlciogIGZDb2xvckZpbHRlcjsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tTaW5nbGVJbnB1dEltYWdlRmlsdGVyIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta0NvbG9yTWF0cml4LmggYi9pbmNsdWRlL2VmZmVjdHMvU2tDb2xvck1hdHJpeC5oCmluZGV4IGVlMzgzZGIuLmE5MmY1ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZWZmZWN0cy9Ta0NvbG9yTWF0cml4LmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrQ29sb3JNYXRyaXguaApAQCAtMTUsNyArMTUsNyBAQAogY2xhc3MgU2tDb2xvck1hdHJpeCB7CiBwdWJsaWM6CiAgICAgU2tTY2FsYXIgICAgZk1hdFsyMF07Ci0gICAgCisKICAgICB2b2lkIHNldElkZW50aXR5KCk7CiAgICAgdm9pZCBzZXRTY2FsZShTa1NjYWxhciByU2NhbGUsIFNrU2NhbGFyIGdTY2FsZSwgU2tTY2FsYXIgYlNjYWxlLAogICAgICAgICAgICAgICAgICAgU2tTY2FsYXIgYVNjYWxlID0gU0tfU2NhbGFyMSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tDb3JuZXJQYXRoRWZmZWN0LmggYi9pbmNsdWRlL2VmZmVjdHMvU2tDb3JuZXJQYXRoRWZmZWN0LmgKaW5kZXggMDJmZTZkOS4uNmM0M2I2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrQ29ybmVyUGF0aEVmZmVjdC5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta0Nvcm5lclBhdGhFZmZlY3QuaApAQCAtMzcsNyArMzcsNyBAQAogCiBwcml2YXRlOgogICAgIFNrU2NhbGFyICAgIGZSYWRpdXM7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrUGF0aEVmZmVjdCBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tEYXNoUGF0aEVmZmVjdC5oIGIvaW5jbHVkZS9lZmZlY3RzL1NrRGFzaFBhdGhFZmZlY3QuaAppbmRleCA4NzU4MGFhLi5kZGFjOWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tEYXNoUGF0aEVmZmVjdC5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta0Rhc2hQYXRoRWZmZWN0LmgKQEAgLTIxLDcgKzIxLDcgQEAKICAgICAvKiogaW50ZXJ2YWxzOiBhcnJheSBjb250YWluaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIGVudHJpZXMgKD49MiksIHdpdGgKICAgICAgICAgIHRoZSBldmVuIGluZGljZXMgc3BlY2lmeWluZyB0aGUgbGVuZ3RoIG9mICJvbiIgaW50ZXJ2YWxzLCBhbmQgdGhlIG9kZAogICAgICAgICAgaW5kaWNlcyBzcGVjaWZ5aW5nIHRoZSBsZW5ndGggb2YgIm9mZiIgaW50ZXJ2YWxzLgotICAgICAgICBjb3VudDogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpbnRlcnZhbHMgYXJyYXkgCisgICAgICAgIGNvdW50OiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGludGVydmFscyBhcnJheQogICAgICAgICBwaGFzZTogb2Zmc2V0IGludG8gdGhlIGludGVydmFscyBhcnJheSAobW9kIHRoZSBzdW0gb2YgYWxsIG9mIHRoZQogICAgICAgICAgaW50ZXJ2YWxzKS4KIApAQCAtNTEsNyArNTEsNyBAQAogcHJvdGVjdGVkOgogICAgIFNrRGFzaFBhdGhFZmZlY3QoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmxhdHRlbihTa0ZsYXR0ZW5hYmxlV3JpdGVCdWZmZXImKSBjb25zdCBTS19PVkVSUklERTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa1NjYWxhciogICBmSW50ZXJ2YWxzOwogICAgIGludDMyX3QgICAgIGZDb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta0Rpc2NyZXRlUGF0aEVmZmVjdC5oIGIvaW5jbHVkZS9lZmZlY3RzL1NrRGlzY3JldGVQYXRoRWZmZWN0LmgKaW5kZXggMjlmZDNjNS4uYTI5MzRkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrRGlzY3JldGVQYXRoRWZmZWN0LmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrRGlzY3JldGVQYXRoRWZmZWN0LmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogcHJpdmF0ZToKICAgICBTa1NjYWxhciBmU2VnTGVuZ3RoLCBmUGVydGVyYjsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tQYXRoRWZmZWN0IElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta0VtYm9zc01hc2tGaWx0ZXIuaCBiL2luY2x1ZGUvZWZmZWN0cy9Ta0VtYm9zc01hc2tGaWx0ZXIuaAppbmRleCAyNDgxNWE1Li5kYzVmOTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tFbWJvc3NNYXNrRmlsdGVyLmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrRW1ib3NzTWFza0ZpbHRlci5oCkBAIC00Myw3ICs0Myw3IEBACiBwcml2YXRlOgogICAgIExpZ2h0ICAgICAgIGZMaWdodDsKICAgICBTa1NjYWxhciAgICBmQmx1clJhZGl1czsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tNYXNrRmlsdGVyIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta0dyYWRpZW50U2hhZGVyLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tHcmFkaWVudFNoYWRlci5oCmluZGV4IDc0OGFiZDEuLjQ0M2JlOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZWZmZWN0cy9Ta0dyYWRpZW50U2hhZGVyLmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrR3JhZGllbnRTaGFkZXIuaApAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRoZSBjb2xvcnMgYXJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50LgogICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBub3QgbnVsbCwgdGhlIHZhbHVlcyBtdXN0IGJlZ2luIHdpdGggMCwgZW5kIHdpdGggMS4wLCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSB2YWx1ZXMgbXVzdCBiZSBzdHJpY3RseSBpbmNyZWFzaW5nLgotICAgICAgICBAcGFyYW0gIGNvdW50ICAgTXVzdCBiZSA+PTIuIFRoZSBudW1iZXIgb2YgY29sb3JzIChhbmQgcG9zIGlmIG5vdCBOVUxMKSBlbnRyaWVzLiAKKyAgICAgICAgQHBhcmFtICBjb3VudCAgIE11c3QgYmUgPj0yLiBUaGUgbnVtYmVyIG9mIGNvbG9ycyAoYW5kIHBvcyBpZiBub3QgTlVMTCkgZW50cmllcy4KICAgICAgICAgQHBhcmFtICBtb2RlICAgIFRoZSB0aWxpbmcgbW9kZQogICAgICAgICBAcGFyYW0gIG1hcHBlciAgTWF5IGJlIE5VTEwuIENhbGxiYWNrIHRvIG1vZGlmeSB0aGUgc3ByZWFkIG9mIHRoZSBjb2xvcnMuCiAgICAgKi8KQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tTY2FsYXIgcG9zW10sIGludCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2hhZGVyOjpUaWxlTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tVbml0TWFwcGVyKiBtYXBwZXIgPSBOVUxMKTsKLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIGEgc2hhZGVyIHRoYXQgZ2VuZXJhdGVzIGEgc3dlZXAgZ3JhZGllbnQgZ2l2ZW4gYSBjZW50ZXIuCiAgICAgICAgIDxwIC8+CiAgICAgICAgIENyZWF0ZVN3ZWVwIHJldHVybnMgYSBzaGFkZXIgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lZmZlY3RzL1NrS2VybmVsMzNNYXNrRmlsdGVyLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tLZXJuZWwzM01hc2tGaWx0ZXIuaAppbmRleCBiZDQ3MzIwLi5jZmUxMjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tLZXJuZWwzM01hc2tGaWx0ZXIuaAorKysgYi9pbmNsdWRlL2VmZmVjdHMvU2tLZXJuZWwzM01hc2tGaWx0ZXIuaApAQCAtMTgsNyArMTgsNyBAQAogICAgICAgICA6IGZQZXJjZW50MjU2KHBlcmNlbnQyNTYpIHt9CiAKICAgICB2aXJ0dWFsIHVpbnQ4X3QgY29tcHV0ZVZhbHVlKHVpbnQ4X3QqIGNvbnN0KiBzcmNSb3dzKSA9IDA7Ci0gICAgCisKICAgICAvLyBvdmVycmlkZXMgZnJvbSBTa01hc2tGaWx0ZXIKICAgICB2aXJ0dWFsIFNrTWFzazo6Rm9ybWF0IGdldEZvcm1hdCgpOwogICAgIHZpcnR1YWwgYm9vbCBmaWx0ZXJNYXNrKFNrTWFzayosIGNvbnN0IFNrTWFzayYsIGNvbnN0IFNrTWF0cml4JiwgU2tJUG9pbnQqKTsKQEAgLTI5LDcgKzI5LDcgQEAKIAogcHJpdmF0ZToKICAgICBpbnQgZlBlcmNlbnQyNTY7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrTWFza0ZpbHRlciBJTkhFUklURUQ7CiB9OwogCkBAIC00MiwxOSArNDIsMTkgQEAKICAgICAgICAgbWVtY3B5KGZLZXJuZWwsIGNvZWZmLCA5ICogc2l6ZW9mKGludCkpOwogICAgICAgICBmU2hpZnQgPSBzaGlmdDsKICAgICB9Ci0gICAgCisKICAgICAvLyBvdmVycmlkZSBmcm9tIFNrS2VybmVsMzNQcm9jTWFza0ZpbHRlcgogICAgIHZpcnR1YWwgdWludDhfdCBjb21wdXRlVmFsdWUodWludDhfdCogY29uc3QqIHNyY1Jvd3MpOwotICAgIAorCiAgICAgU0tfREVDTEFSRV9QVUJMSUNfRkxBVFRFTkFCTEVfREVTRVJJQUxJWkFUSU9OX1BST0NTKFNrS2VybmVsMzNNYXNrRmlsdGVyKQotICAgIAorCiBwcml2YXRlOgogICAgIGludCBmS2VybmVsWzNdWzNdOwogICAgIGludCBmU2hpZnQ7CiAKICAgICBTa0tlcm5lbDMzTWFza0ZpbHRlcihTa0ZsYXR0ZW5hYmxlUmVhZEJ1ZmZlciYgcmIpOwogICAgIHZpcnR1YWwgdm9pZCBmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYpIGNvbnN0IFNLX09WRVJSSURFOwotICAgIAorCiAgICAgdHlwZWRlZiBTa0tlcm5lbDMzUHJvY01hc2tGaWx0ZXIgSU5IRVJJVEVEOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lZmZlY3RzL1NrTGF5ZXJEcmF3TG9vcGVyLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tMYXllckRyYXdMb29wZXIuaAppbmRleCBkMDBjMWU1Li5kMzQ3ZGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tMYXllckRyYXdMb29wZXIuaAorKysgYi9pbmNsdWRlL2VmZmVjdHMvU2tMYXllckRyYXdMb29wZXIuaApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICBrU2hhZGVyX0JpdCAgICAgPSAxIDw8IDQsICAgLy8hPCB1c2UgdGhpcyBsYXllcidzIHNoYWRlcgogICAgICAgICBrQ29sb3JGaWx0ZXJfQml0ID0gMSA8PCA1LCAgLy8hPCB1c2UgdGhpcyBsYXllcidzIGNvbG9yZmlsdGVyCiAgICAgICAgIGtYZmVybW9kZV9CaXQgICA9IDEgPDwgNiwgICAvLyE8IHVzZSB0aGlzIGxheWVyJ3MgeGZlcm1vZGUKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqICBVc2UgdGhlIGxheWVyJ3MgcGFpbnQgZW50aXJlbHksIHdpdGggdGhlc2UgZXhjZXB0aW9uczoKICAgICAgICAgICogIC0gV2UgbmV2ZXIgb3ZlcnJpZGUgdGhlIGRyYXcncyBwYWludCdzIHRleHRfZW5jb2RpbmcsIHNpbmNlIHRoYXQgaXMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgICogICAgZkZsYWdzTWFzayBhbmQgZkNvbG9yTW9kZS4KICAgICAgICAgICovCiAgICAgICAgIGtFbnRpcmVQYWludF9CaXRzID0gLTEKLSAgICAgICAgCisKICAgICB9OwogICAgIHR5cGVkZWYgaW50MzJfdCBCaXRGbGFnczsKIApAQCAtOTMsMjIgKzkzLDIyIEBACiAgICAgICogIFRoaXMgbGF5ZXIgd2lsbCBkcmF3IHdpdGggdGhlIG9yaWdpbmFsIHBhaW50LCBhZCB0aGUgc3BlY2lmaWVkIG9mZnNldAogICAgICAqLwogICAgIHZvaWQgYWRkTGF5ZXIoU2tTY2FsYXIgZHgsIFNrU2NhbGFyIGR5KTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBUaGlzIGxheWVyIHdpbGwgd2l0aCB0aGUgb3JpZ2luYWwgcGFpbnQgYW5kIG5vIG9mZnNldC4KICAgICAgKi8KICAgICB2b2lkIGFkZExheWVyKCkgeyB0aGlzLT5hZGRMYXllcigwLCAwKTsgfQotICAgIAorCiAgICAgLy8gb3ZlcnJpZGVzIGZyb20gU2tEcmF3TG9vcGVyCiAgICAgdmlydHVhbCB2b2lkIGluaXQoU2tDYW52YXMqKTsKICAgICB2aXJ0dWFsIGJvb2wgbmV4dChTa0NhbnZhcyosIFNrUGFpbnQqIHBhaW50KTsKIAogICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxFX0RFU0VSSUFMSVpBVElPTl9QUk9DUyhTa0xheWVyRHJhd0xvb3BlcikKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIFNrTGF5ZXJEcmF3TG9vcGVyKFNrRmxhdHRlbmFibGVSZWFkQnVmZmVyJik7CiAgICAgdmlydHVhbCB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJikgY29uc3QgU0tfT1ZFUlJJREU7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgc3RydWN0IFJlYyB7CiAgICAgICAgIFJlYyogICAgZk5leHQ7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBwdWJsaWM6CiAgICAgICAgIE15UmVnaXN0cmFyKCk7CiAgICAgfTsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tEcmF3TG9vcGVyIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta0xheWVyUmFzdGVyaXplci5oIGIvaW5jbHVkZS9lZmZlY3RzL1NrTGF5ZXJSYXN0ZXJpemVyLmgKaW5kZXggYzUxYjE3NC4uZjMxNDllNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrTGF5ZXJSYXN0ZXJpemVyLmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrTGF5ZXJSYXN0ZXJpemVyLmgKQEAgLTIwLDE2ICsyMCwxNiBAQAogcHVibGljOgogICAgICAgICAgICAgU2tMYXllclJhc3Rlcml6ZXIoKTsKICAgICB2aXJ0dWFsIH5Ta0xheWVyUmFzdGVyaXplcigpOwotICAgIAorCiAgICAgdm9pZCBhZGRMYXllcihjb25zdCBTa1BhaW50JiBwYWludCkgewogICAgICAgICB0aGlzLT5hZGRMYXllcihwYWludCwgMCwgMCk7CiAgICAgfQogCi0JLyoqCUFkZCBhIG5ldyBsYXllciAoYWJvdmUgYW55IHByZXZpb3VzIGxheWVycykgdG8gdGhlIHJhc3Rlcml6ZXIuCi0JCVRoZSBsYXllciB3aWxsIGV4dHJhY3QgdGhvc2UgZmllbGRzIHRoYXQgYWZmZWN0IHRoZSBtYXNrIGZyb20KLQkJdGhlIHNwZWNpZmllZCBwYWludCwgYnV0IHdpbGwgbm90IHJldGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgcGFpbnQKLQkJb2JqZWN0IGl0c2VsZiwgc28gaXQgbWF5IGJlIHJldXNlZCB3aXRob3V0IGRhbmdlciBvZiBzaWRlLWVmZmVjdHMuCi0JKi8KKyAgICAvKiogICAgQWRkIGEgbmV3IGxheWVyIChhYm92ZSBhbnkgcHJldmlvdXMgbGF5ZXJzKSB0byB0aGUgcmFzdGVyaXplci4KKyAgICAgICAgVGhlIGxheWVyIHdpbGwgZXh0cmFjdCB0aG9zZSBmaWVsZHMgdGhhdCBhZmZlY3QgdGhlIG1hc2sgZnJvbQorICAgICAgICB0aGUgc3BlY2lmaWVkIHBhaW50LCBidXQgd2lsbCBub3QgcmV0YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBwYWludAorICAgICAgICBvYmplY3QgaXRzZWxmLCBzbyBpdCBtYXkgYmUgcmV1c2VkIHdpdGhvdXQgZGFuZ2VyIG9mIHNpZGUtZWZmZWN0cy4KKyAgICAqLwogICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgU2tQYWludCYgcGFpbnQsIFNrU2NhbGFyIGR4LCBTa1NjYWxhciBkeSk7CiAKICAgICBTS19ERUNMQVJFX1BVQkxJQ19GTEFUVEVOQUJMRV9ERVNFUklBTElaQVRJT05fUFJPQ1MoU2tMYXllclJhc3Rlcml6ZXIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tQYWludEZsYWdzRHJhd0ZpbHRlci5oIGIvaW5jbHVkZS9lZmZlY3RzL1NrUGFpbnRGbGFnc0RyYXdGaWx0ZXIuaAppbmRleCBkOGNjM2JhLi43NzVjYjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tQYWludEZsYWdzRHJhd0ZpbHRlci5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta1BhaW50RmxhZ3NEcmF3RmlsdGVyLmgKQEAgLTE1LDEwICsxNSwxMCBAQAogY2xhc3MgU2tQYWludEZsYWdzRHJhd0ZpbHRlciA6IHB1YmxpYyBTa0RyYXdGaWx0ZXIgewogcHVibGljOgogICAgIFNrUGFpbnRGbGFnc0RyYXdGaWx0ZXIodWludDMyX3QgY2xlYXJGbGFncywgdWludDMyX3Qgc2V0RmxhZ3MpOwotICAgIAorCiAgICAgLy8gb3ZlcnJpZGVzCiAgICAgdmlydHVhbCB2b2lkIGZpbHRlcihTa1BhaW50KiwgVHlwZSk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdWludDE2X3QgICAgZkNsZWFyRmxhZ3M7ICAgIC8vIHVzZXIgc3BlY2lmaWVkCiAgICAgdWludDE2X3QgICAgZlNldEZsYWdzOyAgICAgIC8vIHVzZXIgc3BlY2lmaWVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tQb3J0ZXJEdWZmLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tQb3J0ZXJEdWZmLmgKaW5kZXggNDRkOTRmOC4uODMwOGYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrUG9ydGVyRHVmZi5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta1BvcnRlckR1ZmYuaApAQCAtNTUsMTkgKzU1LDE5IEBACiAgICAgLyoqIFJldHVybiBhbiBTa1hmZXJtb2RlIG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBtb2RlLgogICAgICovCiAgICAgc3RhdGljIFNrWGZlcm1vZGUqIENyZWF0ZVhmZXJtb2RlKE1vZGUgbW9kZSk7Ci0gICAgCisKICAgICAvKiogUmV0dXJuIGEgZnVuY3Rpb24gcG9pbnRlciB0byBhIHJvdXRpbmUgdGhhdCBhcHBsaWVzIHRoZSBzcGVjaWZpZWQKICAgICAgICAgcG9ydGVyLWR1ZmYgdHJhbnNmZXIgbW9kZS4KICAgICAqLwogICAgIHN0YXRpYyBTa1hmZXJtb2RlUHJvYyBHZXRYZmVybW9kZVByb2MoTW9kZSBtb2RlKTsKLSAgICAKKwogICAgIC8qKiBSZXR1cm4gYSBmdW5jdGlvbiBwb2ludGVyIHRvIGEgcm91dGluZSB0aGF0IGFwcGxpZXMgdGhlIHNwZWNpZmllZAogICAgICAgICBwb3J0ZXItZHVmZiB0cmFuc2ZlciBtb2RlIGFuZCBzcmNDb2xvciB0byBhIDE2Yml0IGRldmljZSBjb2xvci4gTm90ZSwKICAgICAgICAgaWYgdGhlIG1vZGUrc3JjQ29sb3IgbWlnaHQgcmV0dXJuIGEgbm9uLW9wYXF1ZSBjb2xvciwgdGhlbiB0aGVyZSBpcyBub3QKICAgICAgICAgMTZiaXQgcHJvYywgYW5kIHRoaXMgd2lsbCByZXR1cm4gTlVMTC4KICAgICAqLwogICAgIHN0YXRpYyBTa1hmZXJtb2RlUHJvYzE2IEdldFhmZXJtb2RlUHJvYzE2KE1vZGUgbW9kZSwgU2tDb2xvciBzcmNDb2xvcik7Ci0gICAgCisKICAgICAvKiogSWYgdGhlIHNwZWNpZmllZCB4ZmVybW9kZSBhZHZlcnRpc2VzIGl0c2VsZiBhcyBvbmUgb2YgdGhlIHBvcnRlcmR1ZmYKICAgICAgICAgbW9kZXMgKHZpYSBTa1hmZXJtb2RlOjpDb2VmZiksIHJldHVybiB0cnVlIGFuZCBpZiBub3QgbnVsbCwgc2V0IG1vZGUKICAgICAgICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcG9ydGVyZHVmZiBtb2RlLiBJZiBpdCBpcyBub3QgcmVjb2duaXplZCBhcyBhIG9uZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWZmZWN0cy9Ta1RhYmxlQ29sb3JGaWx0ZXIuaCBiL2luY2x1ZGUvZWZmZWN0cy9Ta1RhYmxlQ29sb3JGaWx0ZXIuaAppbmRleCA5ZmVjNjhjLi41NzE0ZDA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2VmZmVjdHMvU2tUYWJsZUNvbG9yRmlsdGVyLmgKKysrIGIvaW5jbHVkZS9lZmZlY3RzL1NrVGFibGVDb2xvckZpbHRlci5oCkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICogIHRoZSB0YWJsZSBpcyBhcHBsaWVkLCBhbmQgdGhlbiB0aGUgcmVzdWx0IGlzIHJlbXVsdGlwbGllZC4KICAgICAgKi8KICAgICBzdGF0aWMgU2tDb2xvckZpbHRlciogQ3JlYXRlKGNvbnN0IHVpbnQ4X3QgdGFibGVbMjU2XSk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgQ3JlYXRlIGEgdGFibGUgY29sb3JmaWx0ZXIsIHdpdGggYSBkaWZmZXJlbnQgdGFibGUgZm9yIGVhY2gKICAgICAgKiAgY29tcG9uZW50IFtBLCBSLCBHLCBCXS4gSWYgYSBnaXZlbiB0YWJsZSBpcyBOVUxMLCB0aGVuIGl0IGlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tUYWJsZU1hc2tGaWx0ZXIuaCBiL2luY2x1ZGUvZWZmZWN0cy9Ta1RhYmxlTWFza0ZpbHRlci5oCmluZGV4IGUyNDcyZDcuLjY1NmVhYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZWZmZWN0cy9Ta1RhYmxlTWFza0ZpbHRlci5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta1RhYmxlTWFza0ZpbHRlci5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSAiU2tTY2FsYXIuaCIKIAogLyoqIFxjbGFzcyBTa1RhYmxlTWFza0ZpbHRlcgotIAorCiAgICAgQXBwbGllcyBhIHRhYmxlIGxvb2t1cCBvbiBlYWNoIG9mIHRoZSBhbHBoYSB2YWx1ZXMgaW4gdGhlIG1hc2suCiAgICAgSGVscGVyIG1ldGhvZHMgY3JlYXRlIHNvbWUgY29tbW9uIHRhYmxlcyAoZS5nLiBnYW1tYSwgY2xpcHBpbmcpCiAgKi8KQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvLyBvdmVycmlkZXMgZnJvbSBTa01hc2tGaWx0ZXIKICAgICB2aXJ0dWFsIFNrTWFzazo6Rm9ybWF0IGdldEZvcm1hdCgpOwogICAgIHZpcnR1YWwgYm9vbCBmaWx0ZXJNYXNrKFNrTWFzayosIGNvbnN0IFNrTWFzayYsIGNvbnN0IFNrTWF0cml4JiwgU2tJUG9pbnQqKTsKLSAgICAKKwogICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxFX0RFU0VSSUFMSVpBVElPTl9QUk9DUyhTa1RhYmxlTWFza0ZpbHRlcikKIAogcHJvdGVjdGVkOgpAQCAtNTksNyArNTksNyBAQAogCiBwcml2YXRlOgogICAgIHVpbnQ4X3QgZlRhYmxlWzI1Nl07Ci0gICAgCisKICAgICB0eXBlZGVmIFNrTWFza0ZpbHRlciBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2VmZmVjdHMvU2tUZXN0SW1hZ2VGaWx0ZXJzLmggYi9pbmNsdWRlL2VmZmVjdHMvU2tUZXN0SW1hZ2VGaWx0ZXJzLmgKaW5kZXggNTVlZTFkNi4uNGM5Njc3NiAxMDA3NTUKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrVGVzdEltYWdlRmlsdGVycy5oCisrKyBiL2luY2x1ZGUvZWZmZWN0cy9Ta1Rlc3RJbWFnZUZpbHRlcnMuaApAQCAtMzgsMTkgKzM4LDE5IEBACiAgICAgdmlydHVhbCB+U2tDb21wb3NlSW1hZ2VGaWx0ZXIoKTsKIAogICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxFX0RFU0VSSUFMSVpBVElPTl9QUk9DUyhTa0NvbXBvc2VJbWFnZUZpbHRlcikKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIFNrQ29tcG9zZUltYWdlRmlsdGVyKFNrRmxhdHRlbmFibGVSZWFkQnVmZmVyJiBidWZmZXIpOwogICAgIHZpcnR1YWwgdm9pZCBmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYpIGNvbnN0IFNLX09WRVJSSURFOwotICAgIAorCiAgICAgdmlydHVhbCBib29sIG9uRmlsdGVySW1hZ2UoUHJveHkqLCBjb25zdCBTa0JpdG1hcCYgc3JjLCBjb25zdCBTa01hdHJpeCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tCaXRtYXAqIHJlc3VsdCwgU2tJUG9pbnQqIGxvYykgU0tfT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIG9uRmlsdGVyQm91bmRzKGNvbnN0IFNrSVJlY3QmLCBjb25zdCBTa01hdHJpeCYsIFNrSVJlY3QqKSBTS19PVkVSUklERTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa0ltYWdlRmlsdGVyKiAgZk91dGVyOwogICAgIFNrSW1hZ2VGaWx0ZXIqICBmSW5uZXI7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrSW1hZ2VGaWx0ZXIgSU5IRVJJVEVEOwogfTsKIApAQCAtNjMsMTcgKzYzLDE3IEBACiAgICAgU2tNZXJnZUltYWdlRmlsdGVyKFNrSW1hZ2VGaWx0ZXIqIGNvbnN0IGZpbHRlcnNbXSwgaW50IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1hmZXJtb2RlOjpNb2RlIG1vZGVzW10gPSBOVUxMKTsKICAgICB2aXJ0dWFsIH5Ta01lcmdlSW1hZ2VGaWx0ZXIoKTsKLSAgICAKKwogICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxFX0RFU0VSSUFMSVpBVElPTl9QUk9DUyhTa01lcmdlSW1hZ2VGaWx0ZXIpCi0gICAgCisKIHByb3RlY3RlZDoKICAgICBTa01lcmdlSW1hZ2VGaWx0ZXIoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImIGJ1ZmZlcik7CiAgICAgdmlydHVhbCB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJikgY29uc3QgU0tfT1ZFUlJJREU7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgb25GaWx0ZXJJbWFnZShQcm94eSosIGNvbnN0IFNrQml0bWFwJiBzcmMsIGNvbnN0IFNrTWF0cml4JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JpdG1hcCogcmVzdWx0LCBTa0lQb2ludCogbG9jKSBTS19PVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgb25GaWx0ZXJCb3VuZHMoY29uc3QgU2tJUmVjdCYsIGNvbnN0IFNrTWF0cml4JiwgU2tJUmVjdCopIFNLX09WRVJSSURFOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrSW1hZ2VGaWx0ZXIqKiAgICAgZkZpbHRlcnM7CiAgICAgdWludDhfdCogICAgICAgICAgICBmTW9kZXM7IC8vIFNrWGZlcm1vZGU6Ok1vZGUKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIHZvaWQgaW5pdEFsbG9jKGludCBjb3VudCwgYm9vbCBoYXNNb2Rlcyk7CiAgICAgdm9pZCBpbml0KFNrSW1hZ2VGaWx0ZXIqIGNvbnN0IFtdLCBpbnQgY291bnQsIGNvbnN0IFNrWGZlcm1vZGU6Ok1vZGUgW10pOwotICAgIAorCiAgICAgdHlwZWRlZiBTa0ltYWdlRmlsdGVyIElOSEVSSVRFRDsKIH07CiAKQEAgLTk1LDE5ICs5NSwxOSBAQAogY2xhc3MgU2tEb3duU2FtcGxlSW1hZ2VGaWx0ZXIgOiBwdWJsaWMgU2tJbWFnZUZpbHRlciB7CiBwdWJsaWM6CiAgICAgU2tEb3duU2FtcGxlSW1hZ2VGaWx0ZXIoU2tTY2FsYXIgc2NhbGUpIDogZlNjYWxlKHNjYWxlKSB7fQotICAgIAorCiAgICAgU0tfREVDTEFSRV9QVUJMSUNfRkxBVFRFTkFCTEVfREVTRVJJQUxJWkFUSU9OX1BST0NTKFNrRG93blNhbXBsZUltYWdlRmlsdGVyKQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgU2tEb3duU2FtcGxlSW1hZ2VGaWx0ZXIoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImIGJ1ZmZlcik7CiAgICAgdmlydHVhbCB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJikgY29uc3QgU0tfT1ZFUlJJREU7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgb25GaWx0ZXJJbWFnZShQcm94eSosIGNvbnN0IFNrQml0bWFwJiBzcmMsIGNvbnN0IFNrTWF0cml4JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JpdG1hcCogcmVzdWx0LCBTa0lQb2ludCogbG9jKSBTS19PVkVSUklERTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa1NjYWxhciBmU2NhbGU7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrSW1hZ2VGaWx0ZXIgSU5IRVJJVEVEOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lZmZlY3RzL1NrVHJhbnNwYXJlbnRTaGFkZXIuaCBiL2luY2x1ZGUvZWZmZWN0cy9Ta1RyYW5zcGFyZW50U2hhZGVyLmgKaW5kZXggNTMxZGE3NC4uMjBiYjUxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lZmZlY3RzL1NrVHJhbnNwYXJlbnRTaGFkZXIuaAorKysgYi9pbmNsdWRlL2VmZmVjdHMvU2tUcmFuc3BhcmVudFNoYWRlci5oCkBAIC0zMSw3ICszMSw3IEBACiAgICAgdWludDhfdCAgICAgICAgIGZBbHBoYTsKIAogICAgIFNrVHJhbnNwYXJlbnRTaGFkZXIoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImIGJ1ZmZlcikgOiBJTkhFUklURUQoYnVmZmVyKSB7fQotICAgIAorCiAgICAgdHlwZWRlZiBTa1NoYWRlciBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9HckFBUmVjdFJlbmRlcmVyLmggYi9pbmNsdWRlL2dwdS9HckFBUmVjdFJlbmRlcmVyLmgKaW5kZXggZmRhYTMwYS4uZThiOWYxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JBQVJlY3RSZW5kZXJlci5oCisrKyBiL2luY2x1ZGUvZ3B1L0dyQUFSZWN0UmVuZGVyZXIuaApAQCAtMjMsNyArMjMsNyBAQAogcHVibGljOgogICAgIFNLX0RFQ0xBUkVfSU5TVF9DT1VOVChHckFBUmVjdFJlbmRlcmVyKQogCi0gICAgR3JBQVJlY3RSZW5kZXJlcigpIAorICAgIEdyQUFSZWN0UmVuZGVyZXIoKQogICAgIDogZkFBRmlsbFJlY3RJbmRleEJ1ZmZlcihOVUxMKQogICAgICwgZkFBU3Ryb2tlUmVjdEluZGV4QnVmZmVyKE5VTEwpIHsKICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9HckNhY2hlSUQuaCBiL2luY2x1ZGUvZ3B1L0dyQ2FjaGVJRC5oCmluZGV4IGU2ZjVmNzUuLmU1OTNkN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3B1L0dyQ2FjaGVJRC5oCisrKyBiL2luY2x1ZGUvZ3B1L0dyQ2FjaGVJRC5oCkBAIC00NSwxOCArNDUsMTggQEAKICAqICAgICAgdGhlIHJlc291cmNlLXNwZWNpZmljIHBvcnRpb24gLSB3aGljaCBpcyBmaWxsZWQgaW4gYnkgZWFjaCBHclJlc291cmNlLQogICogICAgICAgICAgICAgIGRlcml2ZWQgY2xhc3MuCiAgKgotICogRm9yIHRoZSBwdWJsaWMgcG9ydGlvbiBlYWNoIGNsaWVudCBvZiB0aGUgY2FjaGUgbWFrZXMgdXAgaXRzIG93biAKLSAqIHVuaXF1ZS1wZXItcmVzb3VyY2UgaWRlbnRpZmllciAoZS5nLiwgYml0bWFwIGdlbklEKS4gQSBwdWJsaWMgSUQgb2YgCi0gKiAna1NjcmF0Y2hfQ2FjaGVJRCcgaW5kaWNhdGVzIHRoYXQgdGhlIHJlc291cmNlIGlzIGEgInNjcmF0Y2giIHJlc291cmNlLiAKLSAqIFdoZW4gdXNlZCB0byBhY3F1aXJlIGEgcmVzb3VyY2UgaXQgaW5kaWNhdGVzIHRoZSBjYWNoZSB1c2VyIGlzIAotICogbG9va2luZyBmb3IgYSByZXNvdXJjZSB0aGF0IG1hdGNoZXMgYSByZXNvdXJjZS1zdWJjbGFzcy1zcGVjaWZpYyBzZXQgb2YgCi0gKiCTZGltZW5zaW9uc5Qgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBidWZmZXIgc2l6ZSwgb3IgcGl4ZWwgY29uZmlnLCBidXQgbm90IAotICogZm9yIHBhcnRpY3VsYXIgcmVzb3VyY2UgY29udGVudHMgKGUuZy4sIHRleGVsIG9yIHZlcnRleCB2YWx1ZXMpLiBUaGUgcHVibGljIAotICogSURzIGFyZSB1bmlxdWUgd2l0aGluIGEgcHJpdmF0ZSBJRCB2YWx1ZSBidXQgbm90IG5lY2Vzc2FyaWx5IGFjcm9zcyAKKyAqIEZvciB0aGUgcHVibGljIHBvcnRpb24gZWFjaCBjbGllbnQgb2YgdGhlIGNhY2hlIG1ha2VzIHVwIGl0cyBvd24KKyAqIHVuaXF1ZS1wZXItcmVzb3VyY2UgaWRlbnRpZmllciAoZS5nLiwgYml0bWFwIGdlbklEKS4gQSBwdWJsaWMgSUQgb2YKKyAqICdrU2NyYXRjaF9DYWNoZUlEJyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzb3VyY2UgaXMgYSAic2NyYXRjaCIgcmVzb3VyY2UuCisgKiBXaGVuIHVzZWQgdG8gYWNxdWlyZSBhIHJlc291cmNlIGl0IGluZGljYXRlcyB0aGUgY2FjaGUgdXNlciBpcworICogbG9va2luZyBmb3IgYSByZXNvdXJjZSB0aGF0IG1hdGNoZXMgYSByZXNvdXJjZS1zdWJjbGFzcy1zcGVjaWZpYyBzZXQgb2YKKyAqIJNkaW1lbnNpb25zlCBzdWNoIGFzIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlciBzaXplLCBvciBwaXhlbCBjb25maWcsIGJ1dCBub3QKKyAqIGZvciBwYXJ0aWN1bGFyIHJlc291cmNlIGNvbnRlbnRzIChlLmcuLCB0ZXhlbCBvciB2ZXJ0ZXggdmFsdWVzKS4gVGhlIHB1YmxpYworICogSURzIGFyZSB1bmlxdWUgd2l0aGluIGEgcHJpdmF0ZSBJRCB2YWx1ZSBidXQgbm90IG5lY2Vzc2FyaWx5IGFjcm9zcwogICogcHJpdmF0ZSBJRHMuCiAgKgogICogVGhlIGRvbWFpbiBwb3J0aW9uIGlkZW50aWZpZXMgdGhlIGNhY2hlIGNsaWVudCB3aGlsZSB0aGUgdHlwZSBmaWVsZAotICogaW5kaWNhdGVzIHRoZSByZXNvdXJjZSB0eXBlLiBXaGVuIHRoZSBwdWJsaWMgcG9ydGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGUgCisgKiBpbmRpY2F0ZXMgdGhlIHJlc291cmNlIHR5cGUuIFdoZW4gdGhlIHB1YmxpYyBwb3J0aW9uIGluZGljYXRlcyB0aGF0IHRoZQogICogcmVzb3VyY2UgaXMgYSBzY3JhdGNoIHJlc291cmNlLCB0aGUgZG9tYWluIGZpZWxkIHNob3VsZCBiZSBrVW5yZXN0cmljdGVkCiAgKiBzbyB0aGF0IHNjcmF0Y2ggcmVzb3VyY2VzIGNhbiBiZSByZWN5Y2xlZCBhY3Jvc3MgZG9tYWlucy4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncHUvR3JDbGlwRGF0YS5oIGIvaW5jbHVkZS9ncHUvR3JDbGlwRGF0YS5oCmluZGV4IGM5ZDkzNGQuLjBjZjcwMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3B1L0dyQ2xpcERhdGEuaAorKysgYi9pbmNsdWRlL2dwdS9HckNsaXBEYXRhLmgKQEAgLTE5LDcgKzE5LDcgQEAKIC8qKgogICogR3JDbGlwRGF0YSBlbmNhcHN1bGF0ZXMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgY2xpcAogICogbWFza3MuICdmT3JpZ2luJyBpcyBvbmx5IG5vbi16ZXJvIHdoZW4gc2F2ZUxheWVyIGhhcyBiZWVuIGNhbGxlZAotICogd2l0aCBhbiBvZmZzZXQgYm91bmRpbmcgYm94LiBUaGUgY2xpcHMgaW4gJ2ZDbGlwU3RhY2snIGFyZSBpbiAKKyAqIHdpdGggYW4gb2Zmc2V0IGJvdW5kaW5nIGJveC4gVGhlIGNsaXBzIGluICdmQ2xpcFN0YWNrJyBhcmUgaW4KICAqIGRldmljZSBjb29yZGluYXRlcyAoaS5lLiwgdGhleSBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSAtZk9yaWdpbiB3LnIudC4KICAqIHRoZSBjYW52YXMnIGRldmljZSBjb29yZGluYXRlcykuCiAgKi8KQEAgLTI4LDcgKzI4LDcgQEAKICAgICBjb25zdCBTa0NsaXBTdGFjayogIGZDbGlwU3RhY2s7CiAgICAgU2tJUG9pbnQgICAgICAgICAgICBmT3JpZ2luOwogCi0gICAgR3JDbGlwRGF0YSgpIAorICAgIEdyQ2xpcERhdGEoKQogICAgICAgICA6IGZDbGlwU3RhY2soTlVMTCkgewogICAgICAgICBmT3JpZ2luLnNldFplcm8oKTsKICAgICB9CkBAIC00NSwxMSArNDUsMTEgQEAKICAgICAgICAgcmV0dXJuIGZDbGlwU3RhY2sgPT0gb3RoZXIuZkNsaXBTdGFjazsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JDbGlwRGF0YSYgb3RoZXIpIGNvbnN0IHsgCi0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyQ2xpcERhdGEmIG90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAKLSAgICB2b2lkIGdldENvbnNlcnZhdGl2ZUJvdW5kcyhjb25zdCBHclN1cmZhY2UqIHN1cmZhY2UsIAorICAgIHZvaWQgZ2V0Q29uc2VydmF0aXZlQm91bmRzKGNvbnN0IEdyU3VyZmFjZSogc3VyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcklSZWN0KiBkZXZSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNJbnRlcnNlY3Rpb25PZlJlY3RzID0gTlVMTCkgY29uc3Q7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncHUvR3JDb25maWcuaCBiL2luY2x1ZGUvZ3B1L0dyQ29uZmlnLmgKaW5kZXggZmZhYjIzNy4uMzI3ZGJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JDb25maWcuaAorKysgYi9pbmNsdWRlL2dwdS9HckNvbmZpZy5oCkBAIC0xMTgsNyArMTE4LDcgQEAKICNlbHNlCiAvKgogICogIEluY2x1ZGUgc3RkaW50Lmggd2l0aCBkZWZpbmVzIHRoYXQgdHJpZ2dlciBkZWNsYXJhdGlvbiBvZiBDOTkgbGltaXQvY29uc3QKLSAqICBtYWNyb3MgaGVyZSBiZWZvcmUgYW55b25lIGVsc2UgaGFzIGEgY2hhbmNlIHRvIGluY2x1ZGUgc3RkaW50Lmggd2l0aG91dCAKKyAqICBtYWNyb3MgaGVyZSBiZWZvcmUgYW55b25lIGVsc2UgaGFzIGEgY2hhbmNlIHRvIGluY2x1ZGUgc3RkaW50Lmggd2l0aG91dAogICogIHRoZXNlLgogICovCiAjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3B1L0dyQ29udGV4dC5oIGIvaW5jbHVkZS9ncHUvR3JDb250ZXh0LmgKaW5kZXggOGRkODFkOS4uOGVlMzI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JDb250ZXh0LmgKKysrIGIvaW5jbHVkZS9ncHUvR3JDb250ZXh0LmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJHckNsaXBEYXRhLmgiCiAvLyBub3Qgc3RyaWN0bHkgbmVlZGVkIGJ1dCByZXF1aXJlcyBXSyBjaGFuZ2UgaW4gTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB0bwogLy8gcmVtb3ZlLgotI2luY2x1ZGUgIkdyUmVuZGVyVGFyZ2V0LmgiIAorI2luY2x1ZGUgIkdyUmVuZGVyVGFyZ2V0LmgiCiAjaW5jbHVkZSAiU2tDbGlwU3RhY2suaCIKIAogY2xhc3MgR3JBdXRvU2NyYXRjaFRleHR1cmU7CkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogICAgICAqIHVubG9ja2VkLiBDYWxsIG11c3QgYmUgYmFsYW5jZWQgd2l0aCBhbiB1bmxvY2tUZXh0dXJlKCkgY2FsbC4KICAgICAgKgogICAgICAqIFRleHR1cmVzIGNyZWF0ZWQgYnkgY3JlYXRlQW5kTG9ja1RleHR1cmUoKSBoaWRlIHRoZSBjb21wbGljYXRpb25zIG9mCi0gICAgICogdGlsaW5nIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMgb24gQVBJcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhpcyAoZS5nLiAKKyAgICAgKiB0aWxpbmcgbm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlcyBvbiBBUElzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGlzIChlLmcuCiAgICAgICogdW5leHRlbmRlZCBHTEVTMikuIFRpbGluZyBhIG5wb3QgdGV4dHVyZSBjcmVhdGVkIGJ5IGxvY2tTY3JhdGNoVGV4dHVyZSBvbgogICAgICAqIHN1Y2ggYW4gQVBJIHdpbGwgY3JlYXRlIGdhcHMgaW4gdGhlIHRpbGluZyBwYXR0ZXJuLiBUaGlzIGluY2x1ZGVzIGNsYW1wCiAgICAgICogbW9kZS4gKFRoaXMgbWF5IGJlIGFkZHJlc3NlZCBpbiBhIGZ1dHVyZSB1cGRhdGUuKQogICAgICAqLwotICAgIEdyVGV4dHVyZSogbG9ja1NjcmF0Y2hUZXh0dXJlKGNvbnN0IEdyVGV4dHVyZURlc2MmIGRlc2MsIAorICAgIEdyVGV4dHVyZSogbG9ja1NjcmF0Y2hUZXh0dXJlKGNvbnN0IEdyVGV4dHVyZURlc2MmIGRlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaFRleE1hdGNoIG1hdGNoKTsKIAogICAgIC8qKgpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgaW50IGdldE1heFRleHR1cmVTaXplKCkgY29uc3Q7CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIG1heCB3aWR0aCBvciBoZWlnaHQgb2YgYSByZW5kZXIgdGFyZ2V0IHN1cHBvcnRlZCBieSB0aGUgCisgICAgICogUmV0dXJuIHRoZSBtYXggd2lkdGggb3IgaGVpZ2h0IG9mIGEgcmVuZGVyIHRhcmdldCBzdXBwb3J0ZWQgYnkgdGhlCiAgICAgICogY3VycmVudCBncHUKICAgICAgKi8KICAgICBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZSgpIGNvbnN0OwpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICogQHBhcmFtIHRhcmdldCBpZiBub24tTlVMTCwgdGhlIHJlbmRlciB0YXJnZXQgdG8gY2xlYXIgb3RoZXJ3aXNlIGNsZWFyCiAgICAgICogICAgICAgICAgICAgICB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0CiAgICAgICovCi0gICAgdm9pZCBjbGVhcihjb25zdCBHcklSZWN0KiByZWN0LCBHckNvbG9yIGNvbG9yLCAKKyAgICB2b2lkIGNsZWFyKGNvbnN0IEdySVJlY3QqIHJlY3QsIEdyQ29sb3IgY29sb3IsCiAgICAgICAgICAgICAgICBHclJlbmRlclRhcmdldCogdGFyZ2V0ID0gTlVMTCk7CiAKICAgICAvKioKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCiAgICAgY2xhc3MgQXV0b0NsaXAgOiBHck5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEF1dG9DbGlwKEdyQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JSZWN0JiBuZXdDbGlwUmVjdCkgCisgICAgICAgIEF1dG9DbGlwKEdyQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JSZWN0JiBuZXdDbGlwUmVjdCkKICAgICAgICAgOiBmQ29udGV4dChjb250ZXh0KQogICAgICAgICAsIGZOZXdDbGlwU3RhY2sobmV3Q2xpcFJlY3QpIHsKICAgICAgICAgICAgIGZOZXdDbGlwRGF0YS5mQ2xpcFN0YWNrID0gJmZOZXdDbGlwU3RhY2s7CkBAIC03OTQsNyArNzk0LDcgQEAKICAgICAgICwgZlRleHR1cmUoTlVMTCkgewogICAgICAgdGhpcy0+c2V0KGNvbnRleHQsIGRlc2MsIG1hdGNoKTsKICAgICB9Ci0gICAgCisKICAgICB+R3JBdXRvU2NyYXRjaFRleHR1cmUoKSB7CiAgICAgICAgIHRoaXMtPnJlc2V0KCk7CiAgICAgfQpAQCAtODA4LDExICs4MDgsMTEgQEAKIAogICAgIC8qCiAgICAgICogV2hlbiBkZXRhY2hpbmcgYSB0ZXh0dXJlIHdlIGRvIG5vdCB1bmxvY2sgaXQgaW4gdGhlIHRleHR1cmUgY2FjaGUgYnV0Ci0gICAgICogd2UgZG8gc2V0IHRoZSByZXR1cm5Ub0NhY2hlIGZsYWcuIEluIHRoaXMgd2F5IHRoZSB0ZXh0dXJlIHJlbWFpbnMgCi0gICAgICogImxvY2tlZCIgaW4gdGhlIHRleHR1cmUgY2FjaGUgdW50aWwgaXQgaXMgZnJlZWQgYW5kIHJlY3ljbGVkIGluIAotICAgICAqIEdyVGV4dHVyZTo6aW50ZXJuYWxfZGlzcG9zZS4gSW4gcmVhbGl0eSwgdGhlIHRleHR1cmUgaGFzIGJlZW4gcmVtb3ZlZCAKLSAgICAgKiBmcm9tIHRoZSBjYWNoZSAoYmVjYXVzZSB0aGlzIGlzIGluIEF1dG9TY3JhdGNoVGV4dHVyZSkgYW5kIGJ5IG5vdCAKLSAgICAgKiBjYWxsaW5nIHVubG9ja1RleHR1cmUgd2Ugc2ltcGx5IGRvbid0IHJlLWFkZCBpdC4gSXQgd2lsbCBiZSByZWF0dGFjaGVkIAorICAgICAqIHdlIGRvIHNldCB0aGUgcmV0dXJuVG9DYWNoZSBmbGFnLiBJbiB0aGlzIHdheSB0aGUgdGV4dHVyZSByZW1haW5zCisgICAgICogImxvY2tlZCIgaW4gdGhlIHRleHR1cmUgY2FjaGUgdW50aWwgaXQgaXMgZnJlZWQgYW5kIHJlY3ljbGVkIGluCisgICAgICogR3JUZXh0dXJlOjppbnRlcm5hbF9kaXNwb3NlLiBJbiByZWFsaXR5LCB0aGUgdGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkCisgICAgICogZnJvbSB0aGUgY2FjaGUgKGJlY2F1c2UgdGhpcyBpcyBpbiBBdXRvU2NyYXRjaFRleHR1cmUpIGFuZCBieSBub3QKKyAgICAgKiBjYWxsaW5nIHVubG9ja1RleHR1cmUgd2Ugc2ltcGx5IGRvbid0IHJlLWFkZCBpdC4gSXQgd2lsbCBiZSByZWF0dGFjaGVkCiAgICAgICogaW4gR3JUZXh0dXJlOjppbnRlcm5hbF9kaXNwb3NlLgogICAgICAqCiAgICAgICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgaXMgYXNzdW1lZCB0byBhY2NlcHQgYW5kIG1hbmFnZSB0aGUgcmVmIHRvIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncHUvR3JDb250ZXh0RmFjdG9yeS5oIGIvaW5jbHVkZS9ncHUvR3JDb250ZXh0RmFjdG9yeS5oCmluZGV4IDQwOWM3ZmEuLjYwMGJlZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3B1L0dyQ29udGV4dEZhY3RvcnkuaAorKysgYi9pbmNsdWRlL2dwdS9HckNvbnRleHRGYWN0b3J5LmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJTa1RBcnJheS5oIgogCiAvKioKLSAqIFRoaXMgaXMgYSBzaW1wbGUgY2xhc3MgdGhhdCBpcyB1c2VmdWwgaW4gdGVzdCBhcHBzIHRoYXQgdXNlIGRpZmZlcmVudCAKKyAqIFRoaXMgaXMgYSBzaW1wbGUgY2xhc3MgdGhhdCBpcyB1c2VmdWwgaW4gdGVzdCBhcHBzIHRoYXQgdXNlIGRpZmZlcmVudAogICogR3JDb250ZXh0cyBiYWNrZWQgYnkgZGlmZmVyZW50IHR5cGVzIG9mIEdMIGNvbnRleHRzLiBJdCBtYW5hZ2VzIGNyZWF0aW5nIHRoZQogICogR0wgY29udGV4dCBhbmQgYSBHckNvbnRleHQgdGhhdCB1c2VzIGl0LiBUaGUgR0wvR3IgY29udGV4dHMgcGVyc2lzdCB1bnRpbCB0aGUKICAqIGZhY3RvcnkgaXMgZGVzdHJveWVkICh0aG91Z2ggdGhlIGNhbGxlciBjYW4gYWx3YXlzIGdyYWIgYSByZWYgb24gdGhlIHJldHVybmVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9HckN1c3RvbVN0YWdlLmggYi9pbmNsdWRlL2dwdS9HckN1c3RvbVN0YWdlLmgKaW5kZXggMGFjN2E3Ni4uZmQ1ZDdlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JDdXN0b21TdGFnZS5oCisrKyBiL2luY2x1ZGUvZ3B1L0dyQ3VzdG9tU3RhZ2UuaApAQCAtMzgsNyArMzgsNyBAQAogfTsKIAogLyoqIFByb3ZpZGVzIGN1c3RvbSB2ZXJ0ZXggc2hhZGVyLCBmcmFnbWVudCBzaGFkZXIsIHVuaWZvcm0gZGF0YSBmb3IgYQotICAgIHBhcnRpY3VsYXIgc3RhZ2Ugb2YgdGhlIEdhbmVzaCBzaGFkaW5nIHBpcGVsaW5lLiAKKyAgICBwYXJ0aWN1bGFyIHN0YWdlIG9mIHRoZSBHYW5lc2ggc2hhZGluZyBwaXBlbGluZS4KICAgICBTdWJjbGFzc2VzIG11c3QgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYSBodW1hbi1yZWFkYWJsZSBuYW1lOgogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogTmFtZSgpOwogICAgIEdyQ3VzdG9tU3RhZ2Ugb2JqZWN0cyAqbXVzdCogYmUgaW1tdXRhYmxlOiBhZnRlciBiZWluZyBjb25zdHJ1Y3RlZCwKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgRXhhbXBsZToKICAgICAgICAgY2xhc3MgTXlDdXN0b21TdGFnZSA6IHB1YmxpYyBHckN1c3RvbVN0YWdlIHsKICAgICAgICAgLi4uCi0gICAgICAgICAgICB2aXJ0dWFsIGNvbnN0IEdyUHJvZ3JhbVN0YWdlRmFjdG9yeSYgZ2V0RmFjdG9yeSgpIGNvbnN0IAorICAgICAgICAgICAgdmlydHVhbCBjb25zdCBHclByb2dyYW1TdGFnZUZhY3RvcnkmIGdldEZhY3RvcnkoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0tfT1ZFUlJJREUgewogICAgICAgICAgICAgICAgIHJldHVybiBHclRQcm9ncmFtU3RhZ2VGYWN0b3J5PE15Q3VzdG9tU3RhZ2U+OjpnZXRJbnN0YW5jZSgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncHUvR3JHbHlwaC5oIGIvaW5jbHVkZS9ncHUvR3JHbHlwaC5oCmluZGV4IGY3OWRlN2MuLjk1NjQwNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3B1L0dyR2x5cGguaAorKysgYi9pbmNsdWRlL2dwdS9HckdseXBoLmgKQEAgLTM4LDQwICszOCw0MCBAQAogICAgICAgICBmQm91bmRzLnNldChib3VuZHMpOwogICAgICAgICBmQXRsYXNMb2NhdGlvbi5zZXQoMCwgMCk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBmcmVlKCkgewogICAgICAgICBpZiAoZlBhdGgpIHsKICAgICAgICAgICAgIGRlbGV0ZSBmUGF0aDsKICAgICAgICAgICAgIGZQYXRoID0gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZCb3VuZHMud2lkdGgoKTsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBmQm91bmRzLmhlaWdodCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gZkJvdW5kcy5pc0VtcHR5KCk7IH0KICAgICB1aW50MTZfdCBnbHlwaElEKCkgY29uc3QgeyByZXR1cm4gVW5wYWNrSUQoZlBhY2tlZElEKTsgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEV4dHJhY3RTdWJQaXhlbEJpdHNGcm9tRml4ZWQoR3JGaXhlZCBwb3MpIHsKICAgICAgICAgLy8gdHdvIG1vc3Qgc2lnbmlmaWNhbnQgZnJhY3Rpb24gYml0cyBmcm9tIGZpeGVkLXBvaW50CiAgICAgICAgIHJldHVybiAocG9zID4+IDE0KSAmIDM7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIGlubGluZSBQYWNrZWRJRCBQYWNrKHVpbnQxNl90IGdseXBoSUQsIEdyRml4ZWQgeCwgR3JGaXhlZCB5KSB7CiAgICAgICAgIHggPSBFeHRyYWN0U3ViUGl4ZWxCaXRzRnJvbUZpeGVkKHgpOwogICAgICAgICB5ID0gRXh0cmFjdFN1YlBpeGVsQml0c0Zyb21GaXhlZCh5KTsKICAgICAgICAgcmV0dXJuICh4IDw8IDE4KSB8ICh5IDw8IDE2KSB8IGdseXBoSUQ7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIGlubGluZSBHckZpeGVkIFVucGFja0ZpeGVkWChQYWNrZWRJRCBwYWNrZWQpIHsKICAgICAgICAgcmV0dXJuICgocGFja2VkID4+IDE4KSAmIDMpIDw8IDE0OwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBpbmxpbmUgR3JGaXhlZCBVbnBhY2tGaXhlZFkoUGFja2VkSUQgcGFja2VkKSB7CiAgICAgICAgIHJldHVybiAoKHBhY2tlZCA+PiAxNikgJiAzKSA8PCAxNDsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgaW5saW5lIHVpbnQxNl90IFVucGFja0lEKFBhY2tlZElEIHBhY2tlZCkgewogICAgICAgICByZXR1cm4gKHVpbnQxNl90KXBhY2tlZDsKICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9HclBhaW50LmggYi9pbmNsdWRlL2dwdS9HclBhaW50LmgKaW5kZXggOTBiZDlhNy4uZjk1NzNiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JQYWludC5oCisrKyBiL2luY2x1ZGUvZ3B1L0dyUGFpbnQuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgIGlmIChmQ29sb3JNYXRyaXhFbmFibGVkKSB7CiAgICAgICAgICAgICBtZW1jcHkoZkNvbG9yTWF0cml4LCBwYWludC5mQ29sb3JNYXRyaXgsIHNpemVvZihmQ29sb3JNYXRyaXgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhUZXh0dXJlczsgKytpKSB7CiAgICAgICAgICAgICBpZiAocGFpbnQuaXNUZXh0dXJlU3RhZ2VFbmFibGVkKGkpKSB7CiAgICAgICAgICAgICAgICAgZlRleHR1cmVTYW1wbGVyc1tpXSA9IHBhaW50LmZUZXh0dXJlU2FtcGxlcnNbaV07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9HclBvaW50LmggYi9pbmNsdWRlL2dwdS9HclBvaW50LmgKaW5kZXggYjMyMTIzYi4uZmQyYzVhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JQb2ludC5oCisrKyBiL2luY2x1ZGUvZ3B1L0dyUG9pbnQuaApAQCAtMjAsNyArMjAsNyBAQAogCiBzdHJ1Y3QgR3JJUG9pbnQxNiB7CiAgICAgaW50MTZfdCBmWCwgZlk7Ci0gICAgCisKICAgICB2b2lkIHNldChpbnRwdHJfdCB4LCBpbnRwdHJfdCB5KSB7CiAgICAgICAgIGZYID0gR3JUb1MxNih4KTsKICAgICAgICAgZlkgPSBHclRvUzE2KHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncHUvR3JSZWN0LmggYi9pbmNsdWRlL2dwdS9HclJlY3QuaAppbmRleCA2MGE0NzczLi40MmRkZDhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dwdS9HclJlY3QuaAorKysgYi9pbmNsdWRlL2dwdS9HclJlY3QuaApAQCAtMTksMTIgKzE5LDEyIEBACiAKIHN0cnVjdCBHcklSZWN0MTYgewogICAgIGludDE2X3QgZkxlZnQsIGZUb3AsIGZSaWdodCwgZkJvdHRvbTsKLSAgICAKKwogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZSaWdodCAtIGZMZWZ0OyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZCb3R0b20gLSBmVG9wOyB9CiAgICAgaW50IGFyZWEoKSBjb25zdCB7IHJldHVybiB0aGlzLT53aWR0aCgpICogdGhpcy0+aGVpZ2h0KCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBmTGVmdCA+PSBmUmlnaHQgfHwgZlRvcCA+PSBmQm90dG9tOyB9Ci0gICAgCisKICAgICB2b2lkIHNldChjb25zdCBHcklSZWN0JiByKSB7CiAgICAgICAgIGZMZWZ0ICAgPSBTa1RvUzE2KHIuZkxlZnQpOwogICAgICAgICBmVG9wICAgID0gU2tUb1MxNihyLmZUb3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncHUvR3JSZW5kZXJUYXJnZXQuaCBiL2luY2x1ZGUvZ3B1L0dyUmVuZGVyVGFyZ2V0LmgKaW5kZXggMzNkZjhjNi4uZDZlOGVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JSZW5kZXJUYXJnZXQuaAorKysgYi9pbmNsdWRlL2dwdS9HclJlbmRlclRhcmdldC5oCkBAIC00OSw4ICs0OSw4IEBACiAgICAgICogQHJldHVybiB0aGlzIHJlbmRlciB0YXJnZXQuCiAgICAgICovCiAgICAgdmlydHVhbCBHclJlbmRlclRhcmdldCogYXNSZW5kZXJUYXJnZXQoKSBTS19PVkVSUklERSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCBjb25zdCBHclJlbmRlclRhcmdldCogYXNSZW5kZXJUYXJnZXQoKSBjb25zdCAgU0tfT1ZFUlJJREUgeyAKLSAgICAgICAgcmV0dXJuIHRoaXM7IAorICAgIHZpcnR1YWwgY29uc3QgR3JSZW5kZXJUYXJnZXQqIGFzUmVuZGVyVGFyZ2V0KCkgY29uc3QgIFNLX09WRVJSSURFIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIHJlYWRQaXhlbHMoaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgIHZvaWQgcmVzb2x2ZSgpOwogCiAgICAgLy8gYSBNU0FBIFJUIG1heSByZXF1aXJlIGV4cGxpY2l0IHJlc29sdmluZyAsIGl0IG1heSBhdXRvLXJlc29sdmUgKGUuZy4gRkJPCi0gICAgLy8gMCBpbiBHTCksIG9yIGJlIHVucmVzb2x2YWJsZSBiZWNhdXNlIHRoZSBjbGllbnQgZGlkbid0IGdpdmUgdXMgdGhlIAorICAgIC8vIDAgaW4gR0wpLCBvciBiZSB1bnJlc29sdmFibGUgYmVjYXVzZSB0aGUgY2xpZW50IGRpZG4ndCBnaXZlIHVzIHRoZQogICAgIC8vIHJlc29sdmUgZGVzdGluYXRpb24uCiAgICAgZW51bSBSZXNvbHZlVHlwZSB7CiAgICAgICAgIGtDYW5SZXNvbHZlX1Jlc29sdmVUeXBlLApAQCAtMTU5LDcgKzE1OSw3IEBACiAKICAgICBmcmllbmQgY2xhc3MgR3JUZXh0dXJlOwogICAgIC8vIFdoZW4gYSB0ZXh0dXJlIHVucmVmcyBhbiBvd25lZCByZW5kZXJ0YXJnZXQgdGhpcyBmdW5jCi0gICAgLy8gcmVtb3ZlcyB0aGUgYmFjayBwb2ludGVyLiBUaGlzIGNvdWxkIGJlIGNhbGxlZCBmcm9tIAorICAgIC8vIHJlbW92ZXMgdGhlIGJhY2sgcG9pbnRlci4gVGhpcyBjb3VsZCBiZSBjYWxsZWQgZnJvbQogICAgIC8vIHRleHR1cmUncyBkZXN0cnVjdG9yIGJ1dCB3b3VsZCBoYXZlIHRvIGJlIGRvbmUgaW4gZGVyaXZlZAogICAgIC8vIGNsYXNzZXMuIEJ5IHRoZSB0aW1lIG9mIHRleHR1cmUgYmFzZSBkZXN0cnVjdG9yIGl0IGhhcyBhbHJlYWR5CiAgICAgLy8gbG9zdCBpdHMgcG9pbnRlciB0byB0aGUgcnQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9HclNhbXBsZXJTdGF0ZS5oIGIvaW5jbHVkZS9ncHUvR3JTYW1wbGVyU3RhdGUuaAppbmRleCBmODdiOWI0Li4xMmMwOTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dwdS9HclNhbXBsZXJTdGF0ZS5oCisrKyBiL2luY2x1ZGUvZ3B1L0dyU2FtcGxlclN0YXRlLmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgR3JTYW1wbGVyU3RhdGUmIHMpIGNvbnN0IHsKICAgICAgICAgLyogV2UgbXVzdCBiZSBiaXQtaWRlbnRpY2FsIGFzIGZhciBhcyB0aGUgQ3VzdG9tU3RhZ2U7CiAgICAgICAgICAgIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBDdXN0b21TdGFnZXMgdGhhdCB3aWxsIHByb2R1Y2UKLSAgICAgICAgICAgdGhlIHNhbWUgc2hhZGVyIGNvZGUgYW5kIHNvIGFyZSBlcXVpdmFsZW50LiAKKyAgICAgICAgICAgdGhlIHNhbWUgc2hhZGVyIGNvZGUgYW5kIHNvIGFyZSBlcXVpdmFsZW50LgogICAgICAgICAgICBDYW4ndCB0YWtlIHRoZSBhZGRyZXNzIG9mIGZXcmFwWCBiZWNhdXNlIGl0J3MgOjggKi8KICAgICAgICAgaW50IGJpdHdpc2VSZWdpb24gPSAoaW50cHRyX3QpICZmQ3VzdG9tU3RhZ2UgLSAoaW50cHRyX3QpIHRoaXM7CiAgICAgICAgIEdyQXNzZXJ0KHNpemVvZihHclNhbXBsZXJTdGF0ZSkgPT0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAqCiAgICAgICogIEFmdGVyIHRoaXMgY2FsbCBNJyA9IE0qbSB3aGVyZSBNIGlzIHRoZSBvbGQgbWF0cml4LCBtIGlzIHRoZSBwYXJhbWV0ZXIKICAgICAgKiAgdG8gdGhpcyBmdW5jdGlvbiwgYW5kIE0nIGlzIHRoZSBuZXcgbWF0cml4LiAoV2UgY29uc2lkZXIgcG9pbnRzIHRvCi0gICAgICogIGJlIGNvbHVtbiB2ZWN0b3JzIHNvIHRleCBjb29kIHZlY3RvciB0IGlzIHRyYW5zZm9ybWVkIGJ5IG1hdHJpeCBYIGFzIAorICAgICAqICBiZSBjb2x1bW4gdmVjdG9ycyBzbyB0ZXggY29vZCB2ZWN0b3IgdCBpcyB0cmFuc2Zvcm1lZCBieSBtYXRyaXggWCBhcwogICAgICAqICB0JyA9IFgqdC4pCiAgICAgICoKICAgICAgKiAgQHBhcmFtIG1hdHJpeCAgIHRoZSBtYXRyaXggdXNlZCB0byBtb2RpZnkgdGhlIG1hdHJpeC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3B1L0dyVGV4dHVyZS5oIGIvaW5jbHVkZS9ncHUvR3JUZXh0dXJlLmgKaW5kZXggYzdiZmI4Yy4uNWY2ZDUzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvR3JUZXh0dXJlLmgKKysrIGIvaW5jbHVkZS9ncHUvR3JUZXh0dXJlLmgKQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIHZvaWQgcmVzZXRGbGFnKEdyVGV4dHVyZUZsYWdzIGZsYWdzKSB7CiAgICAgICAgIGZEZXNjLmZGbGFncyA9IGZEZXNjLmZGbGFncyAmIH5mbGFnczsKICAgICB9Ci0gICAgYm9vbCBpc1NldEZsYWcoR3JUZXh0dXJlRmxhZ3MgZmxhZ3MpIGNvbnN0IHsgCi0gICAgICAgIHJldHVybiAwICE9IChmRGVzYy5mRmxhZ3MgJiBmbGFncyk7IAorICAgIGJvb2wgaXNTZXRGbGFnKEdyVGV4dHVyZUZsYWdzIGZsYWdzKSBjb25zdCB7CisgICAgICAgIHJldHVybiAwICE9IChmRGVzYy5mRmxhZ3MgJiBmbGFncyk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogIEFwcHJveGltYXRlIG51bWJlciBvZiBieXRlcyB1c2VkIGJ5IHRoZSB0ZXh0dXJlCiAgICAgICovCiAgICAgdmlydHVhbCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBTS19PVkVSUklERSB7Ci0gICAgICAgIHJldHVybiAoc2l6ZV90KSBmRGVzYy5mV2lkdGggKiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZEZXNjLmZIZWlnaHQgKiAKKyAgICAgICAgcmV0dXJuIChzaXplX3QpIGZEZXNjLmZXaWR0aCAqCisgICAgICAgICAgICAgICAgICAgICAgICBmRGVzYy5mSGVpZ2h0ICoKICAgICAgICAgICAgICAgICAgICAgICAgIEdyQnl0ZXNQZXJQaXhlbChmRGVzYy5mQ29uZmlnKTsKICAgICB9CiAKQEAgLTgxLDExICs4MSwxMSBAQAogICAgICAqIEByZXR1cm4gICAgaGFuZGxlIHRvIHJlbmRlciB0YXJnZXQgb3IgTlVMTCBpZiB0aGUgdGV4dHVyZSBpcyBub3QgYQogICAgICAqICAgICAgICAgICAgcmVuZGVyIHRhcmdldAogICAgICAqLwotICAgIHZpcnR1YWwgR3JSZW5kZXJUYXJnZXQqIGFzUmVuZGVyVGFyZ2V0KCkgU0tfT1ZFUlJJREUgeyAKLSAgICAgICAgcmV0dXJuIGZSZW5kZXJUYXJnZXQ7IAorICAgIHZpcnR1YWwgR3JSZW5kZXJUYXJnZXQqIGFzUmVuZGVyVGFyZ2V0KCkgU0tfT1ZFUlJJREUgeworICAgICAgICByZXR1cm4gZlJlbmRlclRhcmdldDsKICAgICB9Ci0gICAgdmlydHVhbCBjb25zdCBHclJlbmRlclRhcmdldCogYXNSZW5kZXJUYXJnZXQoKSBjb25zdCBTS19PVkVSUklERSB7IAotICAgICAgICByZXR1cm4gZlJlbmRlclRhcmdldDsgCisgICAgdmlydHVhbCBjb25zdCBHclJlbmRlclRhcmdldCogYXNSZW5kZXJUYXJnZXQoKSBjb25zdCBTS19PVkVSUklERSB7CisgICAgICAgIHJldHVybiBmUmVuZGVyVGFyZ2V0OwogICAgIH0KIAogICAgIC8vIEdyVGV4dHVyZQpAQCAtOTMsMTMgKzkzLDEzIEBACiAgICAgICogQ29udmVydCBmcm9tIHRleGVscyB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRzIGZvciBQT1QgdGV4dHVyZXMKICAgICAgKiBvbmx5LgogICAgICAqLwotICAgIEdyRml4ZWQgbm9ybWFsaXplRml4ZWRYKEdyRml4ZWQgeCkgY29uc3QgeyAKKyAgICBHckZpeGVkIG5vcm1hbGl6ZUZpeGVkWChHckZpeGVkIHgpIGNvbnN0IHsKICAgICAgICAgR3JBc3NlcnQoR3JJc1BvdzIoZkRlc2MuZldpZHRoKSk7Ci0gICAgICAgIHJldHVybiB4ID4+IGZTaGlmdEZpeGVkWDsgCisgICAgICAgIHJldHVybiB4ID4+IGZTaGlmdEZpeGVkWDsKICAgICB9Ci0gICAgR3JGaXhlZCBub3JtYWxpemVGaXhlZFkoR3JGaXhlZCB5KSBjb25zdCB7IAorICAgIEdyRml4ZWQgbm9ybWFsaXplRml4ZWRZKEdyRml4ZWQgeSkgY29uc3QgewogICAgICAgICBHckFzc2VydChHcklzUG93MihmRGVzYy5mSGVpZ2h0KSk7Ci0gICAgICAgIHJldHVybiB5ID4+IGZTaGlmdEZpeGVkWTsgCisgICAgICAgIHJldHVybiB5ID4+IGZTaGlmdEZpeGVkWTsKICAgICB9CiAKICAgICAvKioKQEAgLTExNyw3ICsxMTcsNyBAQAogCiAgICAgLyoqCiAgICAgICogIENhbGwgdGhpcyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgbmF0aXZlIEFQSSB0ZXh0dXJlIG9iamVjdCBpcwotICAgICAqICBhbHRlcmVkIGRpcmVjdGx5LCB3aXRob3V0IGJlaW5nIHRyYWNrZWQgYnkgc2tpYS4gCisgICAgICogIGFsdGVyZWQgZGlyZWN0bHksIHdpdGhvdXQgYmVpbmcgdHJhY2tlZCBieSBza2lhLgogICAgICAqLwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkU3RhdGUoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3B1L0dyVHlwZXMuaCBiL2luY2x1ZGUvZ3B1L0dyVHlwZXMuaAppbmRleCA1OGY4OTY4Li42ODg4ZjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dwdS9HclR5cGVzLmgKKysrIGIvaW5jbHVkZS9ncHUvR3JUeXBlcy5oCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICBrR3JQaXhlbENvbmZpZ0NvdW50CiB9OwogCi0vLyBBbGlhc2VzIGZvciBwaXhlbCBjb25maWdzIHRoYXQgbWF0Y2ggc2tpYSdzIGJ5dGUgb3JkZXIuIAorLy8gQWxpYXNlcyBmb3IgcGl4ZWwgY29uZmlncyB0aGF0IG1hdGNoIHNraWEncyBieXRlIG9yZGVyLgogI2lmbmRlZiBTS19DUFVfTEVORElBTgogICAgICNlcnJvciAiU2tpYSBncHUgY3VycmVudGx5IGFzc3VtZXMgbGl0dGxlIGVuZGlhbiIKICNlbmRpZgpAQCAtNDA0LDcgKzQwNCw3IEBACiAgICAgICogQ3JlYXRlcyBhIHRleHR1cmUgdGhhdCBjYW4gYmUgcmVuZGVyZWQgdG8gYXMgYSBHclJlbmRlclRhcmdldC4gVXNlCiAgICAgICogR3JUZXh0dXJlOjphc1JlbmRlclRhcmdldCgpIHRvIGFjY2Vzcy4KICAgICAgKi8KLSAgICBrUmVuZGVyVGFyZ2V0X0dyVGV4dHVyZUZsYWdCaXQgID0gMHgxLCAgCisgICAga1JlbmRlclRhcmdldF9HclRleHR1cmVGbGFnQml0ICA9IDB4MSwKICAgICAvKioKICAgICAgKiBCeSBkZWZhdWx0IGFsbCByZW5kZXIgdGFyZ2V0cyBoYXZlIGFuIGFzc29jaWF0ZWQgc3RlbmNpbCBidWZmZXIgdGhhdAogICAgICAqIG1heSBiZSByZXF1aXJlZCBmb3IgcGF0aCBmaWxsaW5nLiBUaGlzIGZsYWcgb3ZlcnJpZGVzIHN0ZW5jaWwgYnVmZmVyCkBAIC00MzUsNyArNDM1LDcgQEAKICAqIERlc2NyaWJlcyBhIHRleHR1cmUgdG8gYmUgY3JlYXRlZC4KICAqLwogc3RydWN0IEdyVGV4dHVyZURlc2MgewotICAgIEdyVGV4dHVyZURlc2MoKSAKKyAgICBHclRleHR1cmVEZXNjKCkKICAgICA6IGZGbGFncyhrTm9uZV9HclRleHR1cmVGbGFncykKICAgICAsIGZXaWR0aCgwKQogICAgICwgZkhlaWdodCgwKQpAQCAtNDY0LDcgKzQ2NCw3IEBACiB9OwogCiAvKioKLSAqIEdyQ2FjaGVEYXRhIGhvbGRzIHVzZXItcHJvdmlkZWQgY2FjaGUtc3BlY2lmaWMgZGF0YS4gSXQgaXMgdXNlZCBpbiAKKyAqIEdyQ2FjaGVEYXRhIGhvbGRzIHVzZXItcHJvdmlkZWQgY2FjaGUtc3BlY2lmaWMgZGF0YS4gSXQgaXMgdXNlZCBpbgogICogY29tYmluYXRpb24gd2l0aCB0aGUgR3JUZXh0dXJlRGVzYyB0byBjb25zdHJ1Y3QgYSBjYWNoZSBrZXkgZm9yIHRleHR1cmUKICAqIHJlc291cmNlcy4KICAqLwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgLy8gTm8gZGVmYXVsdCBjb25zdHJ1Y3RvciBpcyBwcm92aWRlZCBzaW5jZSwgaWYgeW91IGFyZSBjcmVhdGluZyBvbmUKICAgICAvLyBvZiB0aGVzZSwgeW91IHNob3VsZCBkZWZpbml0ZWx5IGhhdmUgYSBrZXkgKG9yIGJlIHVzaW5nIHRoZSBzY3JhdGNoCiAgICAgLy8ga2V5KS4KLSAgICBHckNhY2hlRGF0YSh1aW50NjRfdCBrZXkpIAorICAgIEdyQ2FjaGVEYXRhKHVpbnQ2NF90IGtleSkKICAgICA6IGZDbGllbnRDYWNoZUlEKGtleSkKICAgICAsIGZSZXNvdXJjZURvbWFpbihrU2NyYXRjaF9SZXNvdXJjZURvbWFpbikgewogICAgIH0KQEAgLTYwMCw4ICs2MDAsOCBAQAogLyoqCiAgKiBHciBjYW4gd3JhcCBhbiBleGlzdGluZyB0ZXh0dXJlIGNyZWF0ZWQgYnkgdGhlIGNsaWVudCB3aXRoIGEgR3JUZXh0dXJlCiAgKiBvYmplY3QuIFRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIHRleHR1cmUgbGl2ZXMgYXQKLSAqIGxlYXN0IGFzIGxvbmcgYXMgdGhlIEdyVGV4dHVyZSBvYmplY3Qgd3JhcHBpbmcgaXQuIFdlIHJlcXVpcmUgdGhlIGNsaWVudCB0byAKLSAqIGV4cGxpY2l0bHkgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGV4dHVyZSwgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCAKKyAqIGxlYXN0IGFzIGxvbmcgYXMgdGhlIEdyVGV4dHVyZSBvYmplY3Qgd3JhcHBpbmcgaXQuIFdlIHJlcXVpcmUgdGhlIGNsaWVudCB0bworICogZXhwbGljaXRseSBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZXh0dXJlLCBzdWNoIGFzIHdpZHRoLCBoZWlnaHQsCiAgKiBhbmQgcGl4ZWwgY29uZmlnLCByYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgM0QgQVBJZm9yIHRoZXNlIHZhbHVlcy4gV2UgZXhwZWN0CiAgKiB0aGVzZSB0byBiZSBpbW11dGFibGUgZXZlbiBpZiB0aGUgM0QgQVBJIGRvZXNuJ3QgcmVxdWlyZSB0aGlzIChPcGVuR0wpLgogICoKQEAgLTY1OCw3ICs2NTgsNyBAQAogICogR3IgY2FuIHdyYXAgYW4gZXhpc3RpbmcgcmVuZGVyIHRhcmdldCBjcmVhdGVkIGJ5IHRoZSBjbGllbnQgaW4gdGhlIDNEIEFQSQogICogd2l0aCBhIEdyUmVuZGVyVGFyZ2V0IG9iamVjdC4gVGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUKICAqIHVuZGVybHlpbmcgM0QgQVBJIG9iamVjdCBsaXZlcyBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBHclJlbmRlclRhcmdldCBvYmplY3QKLSAqIHdyYXBwaW5nIGl0LiBXZSByZXF1aXJlIHRoZSBjbGllbnQgdG8gZXhwbGljaXRseSBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IAorICogd3JhcHBpbmcgaXQuIFdlIHJlcXVpcmUgdGhlIGNsaWVudCB0byBleHBsaWNpdGx5IHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQKICAqIHRoZSB0YXJnZXQsIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwgYW5kIHBpeGVsIGNvbmZpZyByYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUKICAqIDNEIEFQSSBmb3IgdGhlc2UgdmFsdWVzLiBXZSBleHBlY3QgdGhlc2UgcHJvcGVydGllcyB0byBiZSBpbW11dGFibGUgZXZlbiBpZgogICogdGhlIDNEIEFQSSBkb2Vzbid0IHJlcXVpcmUgdGhpcyAoT3BlbkdMKS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3B1L2dsL0dyR0xDb25maWcuaCBiL2luY2x1ZGUvZ3B1L2dsL0dyR0xDb25maWcuaAppbmRleCBkZDM4MjgzLi4yMGQ5MDMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dwdS9nbC9HckdMQ29uZmlnLmgKKysrIGIvaW5jbHVkZS9ncHUvZ2wvR3JHTENvbmZpZy5oCkBAIC00OSw3ICs0OSw3IEBACiAgKiBHUl9HTF9OT19DT05TVEFOVF9BVFRSSUJVVEVTOiBpZiB0aGlzIGV2YWx1YXRlcyB0byB0cnVlIHRoZW4gdGhlIEdMIGJhY2tlbmQKICAqIHdpbGwgdXNlIHVuaWZvcm1zIGluc3RlYWQgb2YgYXR0cmlidXRlcyBpbiBhbGwgY2FzZXMgd2hlbiB0aGVyZSBpcyBub3QKICAqIHBlci12ZXJ0ZXggZGF0YS4gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0aGUgdW5kZXJseWluZyBHTCBpbXBsZW1lbnRhdGlvbgotICogZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0IGltbWVkaWF0ZSBzdHlsZSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuIHdoZW4gCisgKiBkb2Vzbid0IGFjdHVhbGx5IHN1cHBvcnQgaW1tZWRpYXRlIHN0eWxlIGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4gd2hlbgogICogdGhlIEdMIHN0cmVhbSBpcyBjb252ZXJ0ZWQgdG8gRFggYXMgaW4gQU5HTEUgb24gQ2hyb21lKS4gRGVmYXVsdHMgdG8gMC4KICAqCiAgKiBHUl9HTF9VU0VfQlVGRkVSX0RBVEFfTlVMTF9ISU5UOiBXaGVuIHNwZWNpZmluZyBuZXcgZGF0YSBmb3IgYSB2ZXJ0ZXgvaW5kZXgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3B1L2dsL0dyR0xGdW5jdGlvbnMuaCBiL2luY2x1ZGUvZ3B1L2dsL0dyR0xGdW5jdGlvbnMuaAppbmRleCA2MjZkOTA0Li5iMGIzYjE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dwdS9nbC9HckdMRnVuY3Rpb25zLmgKKysrIGIvaW5jbHVkZS9ncHUvZ2wvR3JHTEZ1bmN0aW9ucy5oCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICB0eXBlZGVmIEdyR0x2b2lkIChHUl9HTF9GVU5DVElPTl9UWVBFKiBHckdMR2V0UXVlcnlPYmplY3RpNjR2UHJvYykoR3JHTHVpbnQgaWQsIEdyR0xlbnVtIHBuYW1lLCBHckdMaW50NjQgKnBhcmFtcyk7CiAgICAgdHlwZWRlZiBHckdMdm9pZCAoR1JfR0xfRlVOQ1RJT05fVFlQRSogR3JHTEdldFF1ZXJ5T2JqZWN0aXZQcm9jKShHckdMdWludCBpZCwgR3JHTGVudW0gcG5hbWUsIEdyR0xpbnQgKnBhcmFtcyk7CiAgICAgdHlwZWRlZiBHckdMdm9pZCAoR1JfR0xfRlVOQ1RJT05fVFlQRSogR3JHTEdldFF1ZXJ5T2JqZWN0dWk2NHZQcm9jKShHckdMdWludCBpZCwgR3JHTGVudW0gcG5hbWUsIEdyR0x1aW50NjQgKnBhcmFtcyk7Ci0gICAgdHlwZWRlZiBHckdMdm9pZCAoR1JfR0xfRlVOQ1RJT05fVFlQRSogR3JHTEdldFF1ZXJ5T2JqZWN0dWl2UHJvYykoR3JHTHVpbnQgaWQsIEdyR0xlbnVtIHBuYW1lLCBHckdMdWludCAqcGFyYW1zKTsgICAgCisgICAgdHlwZWRlZiBHckdMdm9pZCAoR1JfR0xfRlVOQ1RJT05fVFlQRSogR3JHTEdldFF1ZXJ5T2JqZWN0dWl2UHJvYykoR3JHTHVpbnQgaWQsIEdyR0xlbnVtIHBuYW1lLCBHckdMdWludCAqcGFyYW1zKTsKICAgICB0eXBlZGVmIEdyR0x2b2lkIChHUl9HTF9GVU5DVElPTl9UWVBFKiBHckdMR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZQcm9jKShHckdMZW51bSB0YXJnZXQsIEdyR0xlbnVtIHBuYW1lLCBHckdMaW50KiBwYXJhbXMpOwogICAgIHR5cGVkZWYgR3JHTHZvaWQgKEdSX0dMX0ZVTkNUSU9OX1RZUEUqIEdyR0xHZXRTaGFkZXJJbmZvTG9nUHJvYykoR3JHTHVpbnQgc2hhZGVyLCBHckdMc2l6ZWkgYnVmc2l6ZSwgR3JHTHNpemVpKiBsZW5ndGgsIGNoYXIqIGluZm9sb2cpOwogICAgIHR5cGVkZWYgR3JHTHZvaWQgKEdSX0dMX0ZVTkNUSU9OX1RZUEUqIEdyR0xHZXRTaGFkZXJpdlByb2MpKEdyR0x1aW50IHNoYWRlciwgR3JHTGVudW0gcG5hbWUsIEdyR0xpbnQqIHBhcmFtcyk7CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICB0eXBlZGVmIEdyR0x2b2lkIChHUl9HTF9GVU5DVElPTl9UWVBFKiBHckdMVmlld3BvcnRQcm9jKShHckdMaW50IHgsIEdyR0xpbnQgeSwgR3JHTHNpemVpIHdpZHRoLCBHckdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIC8vIEV4cGVyaW1lbnRhbDogRnVuY3Rpb25zIGZvciBHTF9OVl9wYXRoX3JlbmRlcmluZy4gVGhlc2Ugd2lsbCBiZQotICAgIC8vIGFscGhhYmV0aXplZCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMgb25jZSB0aGlzIGlzIGZ1bGx5IHN1cHBvcnRlZCAKKyAgICAvLyBhbHBoYWJldGl6ZWQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25zIG9uY2UgdGhpcyBpcyBmdWxseSBzdXBwb3J0ZWQKICAgICAvLyAoYW5kIGZ1bmN0aW9ucyB3ZSBhcmUgdW5saWtlbHkgdG8gdXNlIHdpbGwgcG9zc2libHkgYmUgb21pdHRlZCkuCiAgICAgdHlwZWRlZiBHckdMdm9pZCAoR1JfR0xfRlVOQ1RJT05fVFlQRSogR3JHTE1hdHJpeE1vZGVQcm9jKShHckdMZW51bSk7CiAgICAgdHlwZWRlZiBHckdMdm9pZCAoR1JfR0xfRlVOQ1RJT05fVFlQRSogR3JHTExvYWRJZGVudGl0eVByb2MpKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dwdS9nbC9HckdMSW50ZXJmYWNlLmggYi9pbmNsdWRlL2dwdS9nbC9HckdMSW50ZXJmYWNlLmgKaW5kZXggYzYyN2I5MC4uZTFjYTQwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncHUvZ2wvR3JHTEludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvZ3B1L2dsL0dyR0xJbnRlcmZhY2UuaApAQCAtNDUsNyArNDUsNyBAQAogICogd2hldGhlciB0aGUgc2FtZSBHckdMSW50ZXJmYWNlIGlzIHJldHVybmVkIG9yIHdoZXRoZXIgYSBuZXcgb25lIGlzIGNyZWF0ZWQKICAqIGF0IGVhY2ggY2FsbC4gU29tZSBwbGF0Zm9ybXMgbWF5IG5vdCBiZSBhYmxlIHRvIHVzZSBhIHNpbmdsZSBHckdMSW50ZXJmYWNlCiAgKiBiZWNhdXNlIGV4dGVuc2lvbiBmdW5jdGlvbiBwdHJzIHZhcnkgYWNyb3NzIGNvbnRleHRzLiBOb3RlIHRoYXQgR3JHTEludGVyZmFjZQotICogaXMgcmVmLWNvdW50ZWQuIFNvIGlmIHRoZSBzYW1lIG9iamVjdCBpcyByZXR1cm5lZCBieSBtdWx0aXBsZSBjYWxscyB0byAKKyAqIGlzIHJlZi1jb3VudGVkLiBTbyBpZiB0aGUgc2FtZSBvYmplY3QgaXMgcmV0dXJuZWQgYnkgbXVsdGlwbGUgY2FsbHMgdG8KICAqIEdyR0xEZWZhdWx0SW50ZXJmYWNlLCBlYWNoIHNob3VsZCBidW1wIHRoZSByZWYgY291bnQuCiAgKgogICogQnkgZGVmaW5pbmcgR1JfR0xfUEVSX0dMX0NBTExfSUZBQ0VfQ0FMTEJBQ0sgdG8gMSB0aGUgY2xpZW50IGNhbiBzcGVjaWZ5IGEKQEAgLTYwLDcgKzYwLDcgQEAKIC8qKgogICogQ3JlYXRlcyBhIEdyR0xJbnRlcmZhY2UgZm9yIGEgIm5hdGl2ZSIgR0wgY29udGV4dCAoZS5nLiBXR0wgb24gd2luZG93cywKICAqIEdMWCBvbiBsaW51eCwgQUdMIG9uIE1hYykuIE9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgY29udGV4dC1zcGVjaWZpYyBmdW5jdGlvbgotICogcG9pbnRlcnMgZm9yIEdMIGV4dGVuc2lvbnMgKGUuZy4gd2luZG93cykgdGhlIHJldHVybmVkIGludGVyZmFjZSBpcyBvbmx5IAorICogcG9pbnRlcnMgZm9yIEdMIGV4dGVuc2lvbnMgKGUuZy4gd2luZG93cykgdGhlIHJldHVybmVkIGludGVyZmFjZSBpcyBvbmx5CiAgKiB2YWxpZCBmb3IgdGhlIGNvbnRleHQgdGhhdCB3YXMgY3VycmVudCBhdCBjcmVhdGlvbi4KICAqLwogY29uc3QgR3JHTEludGVyZmFjZSogR3JHTENyZWF0ZU5hdGl2ZUludGVyZmFjZSgpOwpAQCAtODYsNyArODYsNyBAQAogY29uc3QgR3JHTEludGVyZmFjZSogR3JHTENyZWF0ZU51bGxJbnRlcmZhY2UoKTsKIAogLyoqCi0gKiBDcmVhdGVzIGEgZGVidWdnaW5nIEdyR0xJbnRlcmZhY2UgdGhhdCBkb2Vzbid0IGRyYXcgYW55dGhpbmcuIFVzZWQgZm9yIAorICogQ3JlYXRlcyBhIGRlYnVnZ2luZyBHckdMSW50ZXJmYWNlIHRoYXQgZG9lc24ndCBkcmF3IGFueXRoaW5nLiBVc2VkIGZvcgogICogZmluZGluZyBtZW1vcnkgbGVha3MgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLgogICovCiBjb25zdCBHckdMSW50ZXJmYWNlKiBHckdMQ3JlYXRlRGVidWdJbnRlcmZhY2UoKTsKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgIEdMUHRyPEdyR0xWaWV3cG9ydFByb2M+IGZWaWV3cG9ydDsKIAogICAgIC8vIEV4cGVyaW1lbnRhbDogRnVuY3Rpb25zIGZvciBHTF9OVl9wYXRoX3JlbmRlcmluZy4gVGhlc2Ugd2lsbCBiZQotICAgIC8vIGFscGhhYmV0aXplZCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMgb25jZSB0aGlzIGlzIGZ1bGx5IHN1cHBvcnRlZCAKKyAgICAvLyBhbHBoYWJldGl6ZWQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25zIG9uY2UgdGhpcyBpcyBmdWxseSBzdXBwb3J0ZWQKICAgICAvLyAoYW5kIGZ1bmN0aW9ucyB3ZSBhcmUgdW5saWtlbHkgdG8gdXNlIHdpbGwgcG9zc2libHkgYmUgb21pdHRlZCkuCiAgICAgR0xQdHI8R3JHTE1hdHJpeE1vZGVQcm9jPiBmTWF0cml4TW9kZTsKICAgICBHTFB0cjxHckdMTG9hZElkZW50aXR5UHJvYz4gZkxvYWRJZGVudGl0eTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3B1L2dsL1NrR0xDb250ZXh0LmggYi9pbmNsdWRlL2dwdS9nbC9Ta0dMQ29udGV4dC5oCmluZGV4IGI4YjZiNmUuLjNmOTllYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3B1L2dsL1NrR0xDb250ZXh0LmgKKysrIGIvaW5jbHVkZS9ncHUvZ2wvU2tHTENvbnRleHQuaApAQCAtMzgsOCArMzgsOCBAQAogCiBwcm90ZWN0ZWQ6CiAgICAgLyoqCi0gICAgICogU3ViY2xhc3MgaW1wbGVtZW50cyB0aGlzIHRvIG1ha2UgYSBHTCBjb250ZXh0LiBUaGUgcmV0dXJuZWQgR3JHTEludGVyZmFjZSAKLSAgICAgKiBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggZnVuY3Rpb25zIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dC4gVGhlIAorICAgICAqIFN1YmNsYXNzIGltcGxlbWVudHMgdGhpcyB0byBtYWtlIGEgR0wgY29udGV4dC4gVGhlIHJldHVybmVkIEdyR0xJbnRlcmZhY2UKKyAgICAgKiBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggZnVuY3Rpb25zIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dC4gVGhlCiAgICAgICogZm9ybWF0IGFuZCBzaXplIG9mIGJhY2tidWZmZXJzIGRvZXMgbm90IG1hdHRlciBzaW5jZSBhbiBGQk8gd2lsbCBiZQogICAgICAqIGNyZWF0ZWQuCiAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ltYWdlcy9Ta0ZsaXBQaXhlbFJlZi5oIGIvaW5jbHVkZS9pbWFnZXMvU2tGbGlwUGl4ZWxSZWYuaAppbmRleCAzZDVjMDk3Li5hYzQzNzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlcy9Ta0ZsaXBQaXhlbFJlZi5oCisrKyBiL2luY2x1ZGUvaW1hZ2VzL1NrRmxpcFBpeGVsUmVmLmgKQEAgLTIxLDcgKzIxLDcgQEAKIHB1YmxpYzoKICAgICAgICAgICAgIFNrRmxpcFBpeGVsUmVmKFNrQml0bWFwOjpDb25maWcsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdmlydHVhbCB+U2tGbGlwUGl4ZWxSZWYoKTsKLSAgICAKKwogICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIGZGbGlwcGVyLmlzRGlydHkoKTsgfQogICAgIGNvbnN0IFNrUmVnaW9uJiBkaXJ0eVJnbigpIGNvbnN0IHsgcmV0dXJuIGZGbGlwcGVyLmRpcnR5UmduKCk7IH0KIApAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgU2tGbGlwUGl4ZWxSZWYoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmxhdHRlbihTa0ZsYXR0ZW5hYmxlV3JpdGVCdWZmZXImKSBjb25zdCBTS19PVkVSUklERTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB2b2lkIGdldEZyb250QmFjayhjb25zdCB2b2lkKiogZnJvbnQsIHZvaWQqKiBiYWNrKSBjb25zdCB7CiAgICAgICAgIGlmIChmcm9udCkgewpAQCAtNjEsNyArNjEsNyBAQAogCiAgICAgU2tNdXRleCAgICAgICAgIGZNdXRleDsKICAgICBTa1BhZ2VGbGlwcGVyICAgZkZsaXBwZXI7Ci0gICAgCisKICAgICB2b2lkKiAgICAgICAgICAgZlN0b3JhZ2U7CiAgICAgdm9pZCogICAgICAgICAgIGZQYWdlMDsgLy8gcG9pbnRzIGludG8gZlN0b3JhZ2U7CiAgICAgdm9pZCogICAgICAgICAgIGZQYWdlMTsgLy8gcG9pbnRzIGludG8gZlN0b3JhZ2U7CkBAIC04MSwxMCArODEsMTAgQEAKICAgICAgICAgICAgIGZSZWYtPmVuZFVwZGF0ZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIGZCaXRtYXA7IH0KICAgICBjb25zdCBTa1JlZ2lvbiYgZGlydHkoKSBjb25zdCB7IHJldHVybiAqZkRpcnR5OyB9Ci0gICAgCisKICAgICAvLyBvcHRpb25hbC4gVGhpcyBnZXRzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGluIHRoZSBkZXN0cnVjdG9yIChvbmx5IG9uY2UpCiAgICAgdm9pZCBlbmRVcGRhdGUoKSB7CiAgICAgICAgIGlmIChmUmVmKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ltYWdlcy9Ta0ltYWdlRW5jb2Rlci5oIGIvaW5jbHVkZS9pbWFnZXMvU2tJbWFnZUVuY29kZXIuaAppbmRleCA5MDdlMjhiLi41ZTM1MGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlcy9Ta0ltYWdlRW5jb2Rlci5oCisrKyBiL2luY2x1ZGUvaW1hZ2VzL1NrSW1hZ2VFbmNvZGVyLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBzdGF0aWMgU2tJbWFnZUVuY29kZXIqIENyZWF0ZShUeXBlKTsKIAogICAgIHZpcnR1YWwgflNrSW1hZ2VFbmNvZGVyKCk7Ci0gICAgCisKICAgICAvKiAgUXVhbGl0eSByYW5nZXMgZnJvbSAwLi4xMDAgKi8KICAgICBlbnVtIHsKICAgICAgICAga0RlZmF1bHRRdWFsaXR5ID0gODAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW1hZ2VzL1NrSW1hZ2VSZWYuaCBiL2luY2x1ZGUvaW1hZ2VzL1NrSW1hZ2VSZWYuaAppbmRleCBiZWMzNTI3Li5kY2M0YzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlcy9Ta0ltYWdlUmVmLmgKKysrIGIvaW5jbHVkZS9pbWFnZXMvU2tJbWFnZVJlZi5oCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIHNpbmNlIGl0IG1heSBiZSBhY2Nlc3NlZCBmcm9tIGFub3RoZXIgdGhyZWFkLCB0aGUgY2FsbGVyIG11c3QgZW5zdXJlCiAgICAgICAgIHRoYXQgdGhpcyBpbWFnZXJlZiBpcyB0aGUgb25seSBvd25lciBvZiB0aGUgc3RyZWFtLiBpLmUuIC0gc29sZQogICAgICAgICBvd25lcnNoaXAgb2YgdGhlIHN0cmVhbSBvYmplY3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhpcyBpbWFnZXJlZiBvYmplY3QuCi0gICAgCisKICAgICAgICAgQHBhcmFtIHN0cmVhbSBUaGUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIGVuY29kZWQgaW1hZ2UgZGF0YS4gVGhpcyBtYXkgYmUKICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5lZCAoYnkgY2FsbGluZyByZWYoKSksIHNvIHRoZSBjYWxsZXIgc2hvdWxkIG5vdAogICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgZGVsZXRlIGl0LgpAQCAtNDAsMjIgKzQwLDIyIEBACiAgICAgLyoqIHRoaXMgdmFsdWUgaXMgcGFzc2VkIG9udG8gdGhlIGRlY29kZXIuIERlZmF1bHQgaXMgdHJ1ZQogICAgICAqLwogICAgIHZvaWQgc2V0RGl0aGVySW1hZ2UoYm9vbCBkaXRoZXIpIHsgZkRvRGl0aGVyID0gZGl0aGVyOyB9Ci0gICAgCisKICAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIGltYWdlIGNhbiBiZSBkZWNvZGVkLiBJZiBzbywgYW5kIGJpdG1hcCBpcyBub24tbnVsbCwKICAgICAgICAgY2FsbCBpdHMgc2V0Q29uZmlnKCkgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMsIGJ1dCBleHBsaWNpdGx5IHdpbGwKICAgICAgICAgbm90IHNldCBpdHMgcGl4ZWxzIG9yIGNvbG9ydGFibGUuIFVzZSBTa1BpeGVsUmVmOjpsb2NrUGl4ZWxzKCkgZm9yIHRoYXQuCi0gICAgIAorCiAgICAgICAgIElmIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGRlY29kaW5nIHRoZSBiaXRtYXAsIHRoaXMgd2lsbCByZXR1cm4gZmFsc2UKICAgICAgICAgYW5kIGlnbm9yZSB0aGUgYml0bWFwIHBhcmFtZXRlci4KICAgICAqLwogICAgIGJvb2wgZ2V0SW5mbyhTa0JpdG1hcCogYm0pOwotICAgIAorCiAgICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBpbWFnZSBjYW4gYmUgZGVjb2RlZCBhbmQgaXMgb3BhcXVlLiBDYWxsaW5nIHRoaXMKICAgICAgICAgbWV0aG9kIHdpbGwgZGVjb2RlIGFuZCBzZXQgdGhlIHBpeGVscyBpbiB0aGUgc3BlY2lmaWVkIGJpdG1hcCBhbmQKICAgICAgICAgc2V0cyB0aGUgaXNPcGFxdWUgZmxhZy4KICAgICAgKi8KICAgICBib29sIGlzT3BhcXVlKFNrQml0bWFwKiBibSk7Ci0gICAgCisKICAgICBTa0ltYWdlRGVjb2RlckZhY3RvcnkqIGdldERlY29kZXJGYWN0b3J5KCkgY29uc3QgeyByZXR1cm4gZkZhY3Rvcnk7IH0KICAgICAvLyByZXR1cm5zIHRoZSBmYWN0b3J5IHBhcmFtZXRlcgogICAgIFNrSW1hZ2VEZWNvZGVyRmFjdG9yeSogc2V0RGVjb2RlckZhY3RvcnkoU2tJbWFnZURlY29kZXJGYWN0b3J5Kik7CkBAIC03NCwxMyArNzQsMTMgQEAKICAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7CiAgICAgLy8gb3ZlcnJpZGUgdGhpcyBpbiB5b3VyIHN1YmNsYXNzIHRvIGNsZWFuIHVwIHdoZW4gd2UncmUgdW5sb2NraW5nIHBpeGVscwogICAgIHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOwotICAgIAorCiAgICAgU2tJbWFnZVJlZihTa0ZsYXR0ZW5hYmxlUmVhZEJ1ZmZlciYpOwogICAgIHZpcnR1YWwgdm9pZCBmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYpIGNvbnN0IFNLX09WRVJSSURFOwogCiAgICAgU2tCaXRtYXAgZkJpdG1hcDsKIAotcHJpdmF0ZTogICAgCitwcml2YXRlOgogICAgIFNrU3RyZWFtKiBzZXRTdHJlYW0oU2tTdHJlYW0qKTsKICAgICAvLyBjYWxsZWQgd2l0aCBtdXRleCBhbHJlYWR5IGhlbGQuIHJldHVybnMgdHJ1ZSBpZiB0aGUgYml0bWFwIGlzIGluIHRoZQogICAgIC8vIHJlcXVlc3RlZCBzdGF0ZSAob3IgZnVydGhlciwgaS5lLiBoYXMgcGl4ZWxzKQpAQCAtOTIsMTIgKzkyLDEyIEBACiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZlNhbXBsZVNpemU7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgZkRvRGl0aGVyOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGZFcnJvckluRGVjb2Rpbmc7Ci0gICAgCisKICAgICBmcmllbmQgY2xhc3MgU2tJbWFnZVJlZlBvb2w7Ci0gICAgCi0gICAgU2tJbWFnZVJlZiogIGZQcmV2LCAqZk5leHQ7ICAgIAorCisgICAgU2tJbWFnZVJlZiogIGZQcmV2LCAqZk5leHQ7CiAgICAgc2l6ZV90IHJhbVVzZWQoKSBjb25zdDsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tQaXhlbFJlZiBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ltYWdlcy9Ta0ltYWdlUmVmX0dsb2JhbFBvb2wuaCBiL2luY2x1ZGUvaW1hZ2VzL1NrSW1hZ2VSZWZfR2xvYmFsUG9vbC5oCmluZGV4IDAzYzIzNjcuLjkxNGIwZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW1hZ2VzL1NrSW1hZ2VSZWZfR2xvYmFsUG9vbC5oCisrKyBiL2luY2x1ZGUvaW1hZ2VzL1NrSW1hZ2VSZWZfR2xvYmFsUG9vbC5oCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgLy8gaWYgcG9vbCBpcyBudWxsLCB1c2UgdGhlIGdsb2JhbCBwb29sCiAgICAgU2tJbWFnZVJlZl9HbG9iYWxQb29sKFNrU3RyZWFtKiwgU2tCaXRtYXA6OkNvbmZpZywgaW50IHNhbXBsZVNpemUgPSAxKTsKICAgICB2aXJ0dWFsIH5Ta0ltYWdlUmVmX0dsb2JhbFBvb2woKTsKLSAgICAKKwogICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxFX0RFU0VSSUFMSVpBVElPTl9QUk9DUyhTa0ltYWdlUmVmX0dsb2JhbFBvb2wpCiAKICAgICAvLyBBUEkgdG8gY29udHJvbCB0aGUgZ2xvYmFsIHBvb2wKQEAgLTI1LDE1ICsyNSwxNSBAQAogICAgIC8qKiBSZXR1cm4gdGhlIGFtb3VudCBzcGVjaWZpZWQgYXMgdGhlIGJ1ZGdldCBmb3IgdGhlIGNhY2hlIChpbiBieXRlcykuCiAgICAgICovCiAgICAgc3RhdGljIHNpemVfdCBHZXRSQU1CdWRnZXQoKTsKLSAgICAKKwogICAgIC8qKiBTZXQgYSBuZXcgYnVkZ2V0IHZhbHVlIGZvciB0aGUgY2FjaGUuCiAgICAgICovCiAgICAgc3RhdGljIHZvaWQgU2V0UkFNQnVkZ2V0KHNpemVfdCk7Ci0gICAgCisKICAgICAvKiogUmV0dXJuIGhvdyBtdWNoIHJhbSBpcyBjdXJyZW50bHkgaW4gdXNlIGJ5IHRoZSBnbG9iYWwgY2FjaGUuCiAgICAgICovCiAgICAgc3RhdGljIHNpemVfdCBHZXRSQU1Vc2VkKCk7Ci0gICAgCisKICAgICAvKiogRnJlZSB1cCAoYXBwcm94aW1hdGVseSkgZW5vdWdoIHN1Y2ggdGhhdCB0aGUgYW1vdW50IHVzZWQgYnkgdGhlIGNhY2hlCiAgICAgIGlzIDw9IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBTaW5jZSBzb21lIGltYWdlcyBtYXkgYmUgImluIHVzZSIsIHRoZQogICAgICBhbW91bnQgYWN0dWFsbHkgZnJlZWQgbWF5IG5vdCBhbHdheXMgcmVzdWx0IGluIGEgcmFtIHVzYWdlIHZhbHVlIDw9CkBAIC00MiwxNiArNDIsMTYgQEAKICAgICAgYW1vdW50LgogICAgICAqLwogICAgIHN0YXRpYyB2b2lkIFNldFJBTVVzZWQoc2l6ZV90IHVzYWdlSW5CeXRlcyk7Ci0gICAgCisKICAgICBzdGF0aWMgdm9pZCBEdW1wUG9vbCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG9uRGVjb2RlKFNrSW1hZ2VEZWNvZGVyKiBjb2RlYywgU2tTdHJlYW0qIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tCaXRtYXAqIGJpdG1hcCwgU2tCaXRtYXA6OkNvbmZpZyBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW1hZ2VEZWNvZGVyOjpNb2RlIG1vZGUpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7Ci0gICAgCisKICAgICBTa0ltYWdlUmVmX0dsb2JhbFBvb2woU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW1hZ2VzL1NrTW92aWUuaCBiL2luY2x1ZGUvaW1hZ2VzL1NrTW92aWUuaAppbmRleCBjZWNhZDI5Li5mMzJkNjA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlcy9Ta01vdmllLmgKKysrIGIvaW5jbHVkZS9pbWFnZXMvU2tNb3ZpZS5oCkBAIC00MCw3ICs0MCw3IEBACiAgICAgaW50ICAgICB3aWR0aCgpOwogICAgIGludCAgICAgaGVpZ2h0KCk7CiAgICAgaW50ICAgICBpc09wYXF1ZSgpOwotICAgIAorCiAgICAgLyoqIFNwZWNpZnkgdGhlIHRpbWUgY29kZSAoYmV0d2VlbiAwLi4uZHVyYXRpb24pIHRvIHNhbXBsZSBhIGJpdG1hcAogICAgICAgICBmcm9tIHRoZSBtb3ZpZS4gUmV0dXJucyB0cnVlIGlmIHRoaXMgdGltZSBjb2RlIGdlbmVyYXRlZCBhIGRpZmZlcmVudAogICAgICAgICBiaXRtYXAvZnJhbWUgZnJvbSB0aGUgcHJldmlvdXMgc3RhdGUgKGkuZS4gdHJ1ZSBtZWFucyB5b3UgbmVlZCB0bwpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgLy8gcmV0dXJuIHRoZSByaWdodCBiaXRtYXAgZm9yIHRoZSBjdXJyZW50IHRpbWUgY29kZQogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKTsKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIHN0cnVjdCBJbmZvIHsKICAgICAgICAgU2tNU2VjICBmRHVyYXRpb247CkBAIC03MSw3ICs3MSw3IEBACiAgICAgU2tNU2VjICAgICAgZkN1cnJUaW1lOwogICAgIFNrQml0bWFwICAgIGZCaXRtYXA7CiAgICAgYm9vbCAgICAgICAgZk5lZWRCaXRtYXA7Ci0gICAgCisKICAgICB2b2lkIGVuc3VyZUluZm8oKTsKIAogICAgIHR5cGVkZWYgU2tSZWZDbnQgSU5IRVJJVEVEOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbWFnZXMvU2tQYWdlRmxpcHBlci5oIGIvaW5jbHVkZS9pbWFnZXMvU2tQYWdlRmxpcHBlci5oCmluZGV4IDFhMTg4NTYuLjkxYTFlOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW1hZ2VzL1NrUGFnZUZsaXBwZXIuaAorKysgYi9pbmNsdWRlL2ltYWdlcy9Ta1BhZ2VGbGlwcGVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIHB1YmxpYzoKICAgICBTa1BhZ2VGbGlwcGVyKCk7CiAgICAgU2tQYWdlRmxpcHBlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIAorCiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gZldpZHRoOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZIZWlnaHQ7IH0KIApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICByZWdpb24gKHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIpIGlzIHRoZSBhcmVhIHRoYXQgc2hvdWxkIGJlIGNvcGllZCBmcm9tCiAgICAgICAgIHRoZSBmcm9udCBwYWdlIHRvIHRoZSBiYWNrIHBhZ2UgKHdpbGwgbm90IGludGVyc2VjdCB3aXRoIHRoZSByZXR1cm5lZAogICAgICAgICBpbnZhbCByZWdpb24uCi0gICAgIAorCiAgICAgICAgIE9uY2UgdGhpcyBpcyBjYWxsZWQsIHRoZSB0d28gaW50ZXJuYWwgcmVnaW9ucyBhcmUgc3dhcHBlZCwgc28gdGhlICpuZXcqCiAgICAgICAgIGJhY2sgaW52YWwgcmVnaW9uIGlzIHJlYWR5IHRvIHJlY2VpdmUgbmV3IGludmFsIGNhbGxzLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wb3J0cy9Ta0hhcmZCdXp6Rm9udC5oIGIvaW5jbHVkZS9wb3J0cy9Ta0hhcmZCdXp6Rm9udC5oCmluZGV4IDY2YzU1MzQuLjIyNzQ5YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcG9ydHMvU2tIYXJmQnV6ekZvbnQuaAorKysgYi9pbmNsdWRlL3BvcnRzL1NrSGFyZkJ1enpGb250LmgKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgQ29sb3IgaW5mb3JtYXRpb24gKGUuZy4gY29sb3IsIHhmZXJtb2RlLCBzaGFkZXIsIGV0Yy4pIGFyZSBub3QgcmVxdWlyZWQuCiAgICAgICovCiAgICAgdmlydHVhbCB2b2lkIHNldHVwUGFpbnQoU2tQYWludCopIGNvbnN0ID0gMDsKLSAgICAKKwogICAgIC8qKiBJbXBsZW1lbnRhdGlvbiBvZiBIQl9HZXRGb250VGFibGVGdW5jLCB1c2luZyBTa0hhcmZCdXp6Rm9udCogYXMKICAgICAgICAgdGhlIGZpcnN0IHBhcmFtZXRlci4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcG9ydHMvU2tTdHJlYW1fV2luLmggYi9pbmNsdWRlL3BvcnRzL1NrU3RyZWFtX1dpbi5oCmluZGV4IDg0OTYzNjAuLmQ4NWRhOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcG9ydHMvU2tTdHJlYW1fV2luLmgKKysrIGIvaW5jbHVkZS9wb3J0cy9Ta1N0cmVhbV9XaW4uaApAQCAtMzQsNyArMzQsNyBAQAogICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgYm9vbCByZXdpbmQoKTsKICAgICB2aXJ0dWFsIHNpemVfdCByZWFkKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrU3RyaW5nIGZVUkw7CiAgICAgSElOVEVSTkVUIGZDb25uZWN0aW9uOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdmcvU2tTVkdCYXNlLmggYi9pbmNsdWRlL3N2Zy9Ta1NWR0Jhc2UuaAppbmRleCAyMzRiYThiLi5hNTEyZWFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3N2Zy9Ta1NWR0Jhc2UuaAorKysgYi9pbmNsdWRlL3N2Zy9Ta1NWR0Jhc2UuaApAQCAtMTcsNyArMTcsNyBAQAogY2xhc3MgU2tTVkdCYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ta1NWR0Jhc2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQXR0cmlidXRlKFNrU1ZHUGFyc2VyJiBwYXJzZXIsIGludCBhdHRySW5kZXgsIAorICAgIHZpcnR1YWwgdm9pZCBhZGRBdHRyaWJ1dGUoU2tTVkdQYXJzZXImIHBhcnNlciwgaW50IGF0dHJJbmRleCwKICAgICAgICAgY29uc3QgY2hhciogYXR0clZhbHVlLCBzaXplX3QgYXR0ckxlbmd0aCk7CiAgICAgdmlydHVhbCBpbnQgZ2V0QXR0cmlidXRlcyhjb25zdCBTa1NWR0F0dHJpYnV0ZSoqIGF0dHJQdHIpID0gMDsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3N2Zy9Ta1NWR1BhaW50U3RhdGUuaCBiL2luY2x1ZGUvc3ZnL1NrU1ZHUGFpbnRTdGF0ZS5oCmluZGV4IDc2YzVkYWYuLjIxMWU5Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3ZnL1NrU1ZHUGFpbnRTdGF0ZS5oCisrKyBiL2luY2x1ZGUvc3ZnL1NrU1ZHUGFpbnRTdGF0ZS5oCkBAIC00MiwxMCArNDIsMTAgQEAKICAgICB9OwogCiAgICAgU2tTVkdQYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRBdHRyaWJ1dGUoU2tTVkdQYXJzZXImIHBhcnNlciwgaW50IGF0dHJJbmRleCwgCisgICAgdmlydHVhbCB2b2lkIGFkZEF0dHJpYnV0ZShTa1NWR1BhcnNlciYgcGFyc2VyLCBpbnQgYXR0ckluZGV4LAogICAgICAgICBjb25zdCBjaGFyKiBhdHRyVmFsdWUsIHNpemVfdCBhdHRyTGVuZ3RoKTsKICAgICBib29sIGZsdXNoKFNrU1ZHUGFyc2VyJiAsIGJvb2wgaXNGbHVzaGFibGUsIGJvb2wgaXNEZWYpOwotICAgIHZpcnR1YWwgaW50IGdldEF0dHJpYnV0ZXMoY29uc3QgU2tTVkdBdHRyaWJ1dGUqKiBhdHRyUHRyKTsgCisgICAgdmlydHVhbCBpbnQgZ2V0QXR0cmlidXRlcyhjb25zdCBTa1NWR0F0dHJpYnV0ZSoqIGF0dHJQdHIpOwogICAgIHN0YXRpYyB2b2lkIFB1c2goU2tTVkdQYWludCoqIGhlYWQsIFNrU1ZHUGFpbnQqIGFkZCk7CiAgICAgc3RhdGljIHZvaWQgUG9wKFNrU1ZHUGFpbnQqKiBoZWFkKTsKICAgICBTa1N0cmluZyogb3BlcmF0b3JbXShpbnQgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdmcvU2tTVkdQYXJzZXIuaCBiL2luY2x1ZGUvc3ZnL1NrU1ZHUGFyc2VyLmgKaW5kZXggYTU4NzI5ZC4uYzJmOTExMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdmcvU2tTVkdQYXJzZXIuaAorKysgYi9pbmNsdWRlL3N2Zy9Ta1NWR1BhcnNlci5oCkBAIC01NSw3ICs1NSw3IEBACiAgICAgc3RhdGljIHZvaWQgRGVsZXRlKFNrVERBcnJheTxTa1NWR0VsZW1lbnQqPiYgZkNoaWxkcmVuKTsKICAgICBzdGF0aWMgU2tTVkdUeXBlcyBHZXRUeXBlKGNvbnN0IGNoYXIgbmFtZVtdLCBzaXplX3QgbGVuKTsKICAgICBTa1NWR1BhaW50KiBmSGVhZDsKLSAgICBTa1NWR1BhaW50IGZFbXB0eVBhaW50OyAKKyAgICBTa1NWR1BhaW50IGZFbXB0eVBhaW50OwogICAgIFNrU1ZHUGFpbnQgZkxhc3RGbHVzaDsKICAgICBTa1N0cmluZyBmTGFzdENvbG9yOwogICAgIFNrTWF0cml4IGZMYXN0VHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdmcvU2tTVkdUeXBlcy5oIGIvaW5jbHVkZS9zdmcvU2tTVkdUeXBlcy5oCmluZGV4IDI4ODMwYTEuLmIxM2JjNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3ZnL1NrU1ZHVHlwZXMuaAorKysgYi9pbmNsdWRlL3N2Zy9Ta1NWR1R5cGVzLmgKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBTa1NWR1R5cGVfU3ltYm9sLAogICAgIFNrU1ZHVHlwZV9UZXh0LAogICAgIFNrU1ZHVHlwZV9Uc3BhbiwKLQlTa1NWR1R5cGVfVW5rbm93biwKKyAgICBTa1NWR1R5cGVfVW5rbm93biwKICAgICBTa1NWR1R5cGVfVXNlCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RleHQvU2tUZXh0TGF5b3V0LmggYi9pbmNsdWRlL3RleHQvU2tUZXh0TGF5b3V0LmgKaW5kZXggM2IxMjMzNC4uN2QwZmZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90ZXh0L1NrVGV4dExheW91dC5oCisrKyBiL2luY2x1ZGUvdGV4dC9Ta1RleHRMYXlvdXQuaApAQCAtMjIsNyArMjIsNyBAQAogCiAgICAgY29uc3QgU2tQYWludCYgcGFpbnQoKSBjb25zdCB7IHJldHVybiBmUGFpbnQ7IH0KICAgICBTa1BhaW50JiBwYWludCgpIHsgcmV0dXJuIGZQYWludDsgfQotICAgIAorCiAgICAgLy8gdG9kbzogYmlkaS1vdmVycmlkZSwgbGFuZ3VhZ2UKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXRpbHMvU2tCb3VuZGFyeVBhdGNoLmggYi9pbmNsdWRlL3V0aWxzL1NrQm91bmRhcnlQYXRjaC5oCmluZGV4IDc5OTdjZjguLjg5MDYwYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdXRpbHMvU2tCb3VuZGFyeVBhdGNoLmgKKysrIGIvaW5jbHVkZS91dGlscy9Ta0JvdW5kYXJ5UGF0Y2guaApAQCAtNDksNyArNDksNyBAQAogY2xhc3MgU2tMaW5lQm91bmRhcnkgOiBwdWJsaWMgU2tCb3VuZGFyeSB7CiBwdWJsaWM6CiAgICAgU2tQb2ludCBmUHRzWzRdOwotICAgIAorCiAgICAgLy8gb3ZlcnJpZGUKICAgICB2aXJ0dWFsIFNrUG9pbnQgZXZhbChFZGdlLCBTa1NjYWxhcik7CiB9OwpAQCAtNTgsNyArNTgsNyBAQAogcHVibGljOgogICAgIC8vIHRoZSBjYWxsZXIgc2V0cyB0aGUgZmlyc3QgMTIgZW50cmllcy4gVGhlIDEzdGggaXMgdXNlZCBieSB0aGUgaW1wbC4KICAgICBTa1BvaW50IGZQdHNbMTNdOwotICAgIAorCiAgICAgLy8gb3ZlcnJpZGUKICAgICB2aXJ0dWFsIFNrUG9pbnQgZXZhbChFZGdlLCBTa1NjYWxhcik7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91dGlscy9Ta0NhbWVyYS5oIGIvaW5jbHVkZS91dGlscy9Ta0NhbWVyYS5oCmluZGV4IGQzYmRkYWEuLjY1MjdjMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdXRpbHMvU2tDYW1lcmEuaAorKysgYi9pbmNsdWRlL3V0aWxzL1NrQ2FtZXJhLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RydWN0IFNrTWF0cml4M0QgewogICAgIFNrU2NhbGFyICAgIGZNYXRbM11bNF07Ci0gICAgCisKICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICB2b2lkIHNldFJvdyhpbnQgcm93LCBTa1NjYWxhciBhLCBTa1NjYWxhciBiLCBTa1NjYWxhciBjLCBTa1NjYWxhciBkID0gMCkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICB2b2lkIHNldFJvdGF0ZVkoU2tTY2FsYXIgZGVnKTsKICAgICB2b2lkIHNldFJvdGF0ZVooU2tTY2FsYXIgZGVnKTsKICAgICB2b2lkIHNldFRyYW5zbGF0ZShTa1NjYWxhciB4LCBTa1NjYWxhciB5LCBTa1NjYWxhciB6KTsKLSAgICAKKwogICAgIHZvaWQgcHJlUm90YXRlWChTa1NjYWxhciBkZWcpOwogICAgIHZvaWQgcHJlUm90YXRlWShTa1NjYWxhciBkZWcpOwogICAgIHZvaWQgcHJlUm90YXRlWihTa1NjYWxhciBkZWcpOwpAQCAtMTEzLDcgKzExMyw3IEBACiBwdWJsaWM6IC8vIG1ha2UgcHVibGljIGZvciBTa0RyYXczRCBmb3Igbm93CiAgICAgU2tWZWN0b3IzRCAgZlUsIGZWOwogICAgIFNrUG9pbnQzRCAgIGZPcmlnaW47Ci0gICAgCisKICAgICBmcmllbmQgY2xhc3MgU2tDYW1lcmEzRDsKIH07CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgIHZvaWQgYXBwbHlUb0NhbnZhcyhTa0NhbnZhcyopIGNvbnN0OwogCiAgICAgU2tTY2FsYXIgZG90V2l0aE5vcm1hbChTa1NjYWxhciBkeCwgU2tTY2FsYXIgZHksIFNrU2NhbGFyIGR6KSBjb25zdDsKLSAgICAKKwogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVjIHsKICAgICAgICAgUmVjKiAgICAgICAgZk5leHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3V0aWxzL1NrQ3VsbFBvaW50cy5oIGIvaW5jbHVkZS91dGlscy9Ta0N1bGxQb2ludHMuaAppbmRleCA1NDU4YjI5Li5mYWZhMGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3V0aWxzL1NrQ3VsbFBvaW50cy5oCisrKyBiL2luY2x1ZGUvdXRpbHMvU2tDdWxsUG9pbnRzLmgKQEAgLTE2LDEzICsxNiwxMyBAQAogcHVibGljOgogICAgIFNrQ3VsbFBvaW50cygpOwogICAgIFNrQ3VsbFBvaW50cyhjb25zdCBTa0lSZWN0JiByKTsKLSAgICAKKwogICAgIHZvaWQgICAgcmVzZXQoY29uc3QgU2tJUmVjdCYgcik7Ci0gICAgCisKICAgICAvKiogU3RhcnQgYSBjb250b3VyIGF0ICh4LHkpLiBGb2xsb3cgdGhpcyB3aXRoIGNhbGwocykgdG8gbGluZVRvKC4uLikKICAgICAqLwogICAgIHZvaWQgICAgbW92ZVRvKGludCB4LCBpbnQgeSk7Ci0gICAgCisKICAgICBlbnVtIExpbmVUb1Jlc3VsdCB7CiAgICAgICAgIGtOb19SZXN1bHQsICAgICAgICAgICAgIC8vITwgbGluZSBzZWdtZW50IHdhcyBjb21wbGV0ZWx5IGNsaXBwZWQgb3V0CiAgICAgICAgIGtMaW5lVG9fUmVzdWx0LCAgICAgICAgIC8vITwgcGF0aC5saW5lVG8ocHRzWzFdKTsKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBTa0lQb2ludCAgICAgZkFzUXVhZFs0XTsgICAgIC8vIGNhY2hlIG9mIGZSIGFzIDQgcG9pbnRzCiAgICAgU2tJUG9pbnQgICAgIGZQcmV2UHQ7ICAgICAgICAvLyBwcml2YXRlIHN0YXRlCiAgICAgTGluZVRvUmVzdWx0IGZQcmV2UmVzdWx0OyAgIC8vIHByaXZhdGUgc3RhdGUKLSAgICAKKwogICAgIGJvb2wgc2VjdF90ZXN0KGludCB4MCwgaW50IHkwLCBpbnQgeDEsIGludCB5MSkgY29uc3Q7CiB9OwogCkBAIC01Niw3ICs1Niw3IEBACiAgICAgU2tDdWxsUG9pbnRzUGF0aChjb25zdCBTa0lSZWN0JiByLCBTa1BhdGgqIGRzdCk7CiAKICAgICB2b2lkIHJlc2V0KGNvbnN0IFNrSVJlY3QmIHIsIFNrUGF0aCogZHN0KTsKLSAgICAKKwogICAgIHZvaWQgICAgbW92ZVRvKGludCB4LCBpbnQgeSk7CiAgICAgdm9pZCAgICBsaW5lVG8oaW50IHgsIGludCB5KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91dGlscy9Ta0RlZmVycmVkQ2FudmFzLmggYi9pbmNsdWRlL3V0aWxzL1NrRGVmZXJyZWRDYW52YXMuaAppbmRleCBmZjMyMzUxLi44Nzc5ZGY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3V0aWxzL1NrRGVmZXJyZWRDYW52YXMuaAorKysgYi9pbmNsdWRlL3V0aWxzL1NrRGVmZXJyZWRDYW52YXMuaApAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgLyoqCiAgICAgICogIFNwZWNpZnkgYSBOb3RpZmljYXRpb25DbGllbnQgdG8gYmUgdXNlZCBieSB0aGlzIGNhbnZhcy4gQ2FsbGluZwotICAgICAqICBzZXROb3RpZmljYXRpb25DbGllbnQgd2lsbCByZWxlYXNlIHRoZSBwcmV2aW91c2x5IHNldCAKKyAgICAgKiAgc2V0Tm90aWZpY2F0aW9uQ2xpZW50IHdpbGwgcmVsZWFzZSB0aGUgcHJldmlvdXNseSBzZXQKICAgICAgKiAgTm90aWZpY2F0aW9uQ2xpZW50LCBpZiBhbnkuIFNrRGVmZXJyZWRDYW52YXMgZG9lcyBub3QgdGFrZSBvd25lcnNoaXAKICAgICAgKiAgb2YgdGhlIG5vdGlmaWNhdGlvbiBjbGllbnQuICBUaGVyZWZvcmUgdXNlciBjb2RlIGlzIHJlc3Bvc2libGUKICAgICAgKiAgZm9yIGl0cyBkZXN0cnVjdGlvbi4gIFRoZSBub3RpZmljYXRpb24gY2xpZW50IG11c3QgYmUgdW5yZWdpc3RlcmVkCkBAIC03NSw3ICs3NSw3IEBACiAgICAgYm9vbCBpc0RlZmVycmVkRHJhd2luZygpIGNvbnN0OwogCiAgICAgLyoqCi0gICAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FudmFzIGNvbnRhaW5zIGEgZnJlc2ggZnJhbWUuICBBIGZyYW1lIGlzIAorICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbnZhcyBjb250YWlucyBhIGZyZXNoIGZyYW1lLiAgQSBmcmFtZSBpcwogICAgICAqICBjb25zaWRlcmVkIGZyZXNoIHdoZW4gaXRzIGNvbnRlbnQgZG8gbm90IGRlcGVuZCBvbiB0aGUgY29udGVudHMKICAgICAgKiAgb2YgdGhlIHByZXZpb3VzIGZyYW1lLiBGb3IgZXhhbXBsZSwgaWYgYSBjYW52YXMgaXMgY2xlYXJlZCBiZWZvcmUKICAgICAgKiAgZHJhd2luZyBlYWNoIGZyYW1lLCB0aGUgZnJhbWVzIHdpbGwgYWxsIGJlIGNvbnNpZGVyZWQgZnJlc2guCkBAIC0xODEsNyArMTgxLDcgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqICBDYWxsZWQgYWZ0ZXIgYSByZWNvcmRpbmcgYSBkcmF3IGNvbW1hbmQgaWYgYWRkaXRpb25hbCBtZW1vcnkKICAgICAgICAgICogIGhhZCB0byBiZSBhbGxvY2F0ZWQgZm9yIHJlY29yZGluZy4KLSAgICAgICAgICogIEBwYXJhbSBuZXdBbGxvY2F0ZWRTdG9yYWdlIHNhbWUgdmFsdWUgYXMgd291bGQgYmUgcmV0dXJuZWQgYnkgCisgICAgICAgICAqICBAcGFyYW0gbmV3QWxsb2NhdGVkU3RvcmFnZSBzYW1lIHZhbHVlIGFzIHdvdWxkIGJlIHJldHVybmVkIGJ5CiAgICAgICAgICAqICAgICAgc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpLCBmb3IgY29udmVuaWVuY2UuCiAgICAgICAgICAqLwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICogIENhbGxlZCBhZnRlciBwZW5kaW5nIGRyYXcgY29tbWFuZHMgaGF2ZSBiZWVuIGZsdXNoZWQKICAgICAgICAgICovCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmbHVzaGVkRHJhd0NvbW1hbmRzKCkge30KLSAgICAgICAgCisKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIFNrUmVmQ250IElOSEVSSVRFRDsKICAgICB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91dGlscy9Ta0R1bXBDYW52YXMuaCBiL2luY2x1ZGUvdXRpbHMvU2tEdW1wQ2FudmFzLmgKaW5kZXggMzZjMjdjYS4uYmFlODRjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91dGlscy9Ta0R1bXBDYW52YXMuaAorKysgYi9pbmNsdWRlL3V0aWxzL1NrRHVtcENhbnZhcy5oCkBAIC01Myw3ICs1Myw3IEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIGR1bXAoU2tEdW1wQ2FudmFzKiwgU2tEdW1wQ2FudmFzOjpWZXJiLCBjb25zdCBjaGFyIHN0cltdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BhaW50KikgPSAwOwotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgU2tSZWZDbnQgSU5IRVJJVEVEOwogICAgIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3V0aWxzL1NrSlNPTi5oIGIvaW5jbHVkZS91dGlscy9Ta0pTT04uaAppbmRleCA1MjY4YWY1Li5jNjAxZmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3V0aWxzL1NrSlNPTi5oCisrKyBiL2luY2x1ZGUvdXRpbHMvU2tKU09OLmgKQEAgLTIzLDkgKzIzLDkgQEAKICAgICAgICAga0Zsb2F0LAogICAgICAgICBrQm9vbCwKICAgICB9OwotICAgIAorCiAgICAgY2xhc3MgQXJyYXk7Ci0gICAgCisKICAgICBjbGFzcyBPYmplY3QgewogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBTbG90OwpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgKiAgbm90IGJlIG51bGwuCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIGFkZE9iamVjdChjb25zdCBjaGFyIG5hbWVbXSwgT2JqZWN0KiB2YWx1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgQ3JlYXRlIGEgbmV3IHNsb3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZQogICAgICAgICAgKiAgcGFyYW1ldGVyIGlzIGNvcGllZCwgYnV0IG93bmVyc2hpcCBvZiB0aGUgQXJyYXkgcGFyYW1ldGVyIGlzCkBAIC01MCwyNiArNTAsMjYgQEAKICAgICAgICAgICogIG5vdCBiZSBudWxsLgogICAgICAgICAgKi8KICAgICAgICAgdm9pZCBhZGRBcnJheShjb25zdCBjaGFyIG5hbWVbXSwgQXJyYXkqIHZhbHVlKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqICBDcmVhdGUgYSBuZXcgc2xvdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgdmFsdWUuIEJvdGggcGFyYW1ldGVycwogICAgICAgICAgKiAgYXJlIGNvcGllZC4gVGhlIHZhbHVlIHBhcmFtZXRlciBtYXkgYmUgbnVsbCwgYnV0IHRoZSBuYW1lIG11c3QKICAgICAgICAgICogIG5vdCBiZSBudWxsLgogICAgICAgICAgKi8KICAgICAgICAgdm9pZCBhZGRTdHJpbmcoY29uc3QgY2hhciBuYW1lW10sIGNvbnN0IGNoYXIgdmFsdWVbXSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgQ3JlYXRlIGEgbmV3IHNsb3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZQogICAgICAgICAgKiAgcGFyYW1ldGVyIGlzIGNvcGllZCwgYW5kIG11c3Qgbm90IGJlIG51bGwuCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIGFkZEludChjb25zdCBjaGFyIG5hbWVbXSwgaW50MzJfdCB2YWx1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgQ3JlYXRlIGEgbmV3IHNsb3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZQogICAgICAgICAgKiAgcGFyYW1ldGVyIGlzIGNvcGllZCwgYW5kIG11c3Qgbm90IGJlIG51bGwuCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIGFkZEZsb2F0KGNvbnN0IGNoYXIgbmFtZVtdLCBmbG9hdCB2YWx1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgQ3JlYXRlIGEgbmV3IHNsb3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZQogICAgICAgICAgKiAgcGFyYW1ldGVyIGlzIGNvcGllZCwgYW5kIG11c3Qgbm90IGJlIG51bGwuCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgY2xhc3MgSXRlciB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIEl0ZXIoY29uc3QgT2JqZWN0Jik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgKiAgUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcyBpbiB0aGUgaXRlcmF0b3IuCiAgICAgICAgICAgICAgKiAgSW4gdGhpcyBjYXNlLCBubyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQuCkBAIC0xMjYsNDMgKzEyNiw0MyBAQAogICAgICAgICAgICAgICogIGlmIGRvbmUoKSByZXR1cm5zIGZhbHNlLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBUeXBlIHR5cGUoKSBjb25zdDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICAgICAgICAgICogIGlmIGRvbmUoKSByZXR1cm5zIGZhbHNlLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Q7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgKiAgUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBlbGVtZW50LiBTaG91bGQgb25seSBiZSBjYWxsZWQKICAgICAgICAgICAgICAqICBpZiBkb25lKCkgcmV0dXJucyBmYWxzZSBhbmQgdHlwZSgpIHJldHVybnMga09iamVjdC4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgT2JqZWN0KiBvYmplY3RWYWx1ZSgpIGNvbnN0OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkCiAgICAgICAgICAgICAgKiAgaWYgZG9uZSgpIHJldHVybnMgZmFsc2UgYW5kIHR5cGUoKSByZXR1cm5zIGtBcnJheS4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgQXJyYXkqIGFycmF5VmFsdWUoKSBjb25zdDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqICBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICAgICAgICAgICogIGlmIGRvbmUoKSByZXR1cm5zIGZhbHNlIGFuZCB0eXBlKCkgcmV0dXJucyBrU3RyaW5nLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkCiAgICAgICAgICAgICAgKiAgaWYgZG9uZSgpIHJldHVybnMgZmFsc2UgYW5kIHR5cGUoKSByZXR1cm5zIGtJbnQuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGludDMyX3QgaW50VmFsdWUoKSBjb25zdDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqICBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICAgICAgICAgICogIGlmIGRvbmUoKSByZXR1cm5zIGZhbHNlIGFuZCB0eXBlKCkgcmV0dXJucyBrRmxvYXQuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGZsb2F0IGZsb2F0VmFsdWUoKSBjb25zdDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqICBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICAgICAgICAgICogIGlmIGRvbmUoKSByZXR1cm5zIGZhbHNlIGFuZCB0eXBlKCkgcmV0dXJucyBrQm9vbC4KQEAgLTE3NiwxNCArMTc2LDE0IEBACiAgICAgcHJpdmF0ZToKICAgICAgICAgU2xvdCogZkhlYWQ7CiAgICAgICAgIFNsb3QqIGZUYWlsOwotICAgICAgICAKKwogICAgICAgICBjb25zdCBTbG90KiBmaW5kU2xvdChjb25zdCBjaGFyIG5hbWVbXSwgVHlwZSkgY29uc3Q7CiAgICAgICAgIFNsb3QqIGFkZFNsb3QoU2xvdCopOwogICAgICAgICB2b2lkIGR1bXBMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OwotICAgICAgICAKKwogICAgICAgICBmcmllbmQgY2xhc3MgQXJyYXk7CiAgICAgfTsKLSAgICAKKwogICAgIGNsYXNzIEFycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8qKgpAQCAtMTk3LDIyICsxOTcsMjIgQEAKICAgICAgICAgICogIHZhbHVlcy4KICAgICAgICAgICovCiAgICAgICAgIEFycmF5KGNvbnN0IGludDMyX3QgdmFsdWVzW10sIGludCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgQ3JlYXRlcyBhbiBhcnJheSBvZiBmbG9hdHMsIGluaXRpYWxpemVkIGJ5IGNvcHlpbmcgdGhlIHNwZWNpZmllZAogICAgICAgICAgKiAgdmFsdWVzLgogICAgICAgICAgKi8KICAgICAgICAgQXJyYXkoY29uc3QgZmxvYXQgdmFsdWVzW10sIGludCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgQ3JlYXRlcyBhbiBhcnJheSBvZiBib29scywgaW5pdGlhbGl6ZWQgYnkgY29weWluZyB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAqICB2YWx1ZXMuCiAgICAgICAgICAqLwogICAgICAgICBBcnJheShjb25zdCBib29sIHZhbHVlc1tdLCBpbnQgY291bnQpOwotICAgICAgICAKKwogICAgICAgICBBcnJheShjb25zdCBBcnJheSYpOwogICAgICAgICB+QXJyYXkoKTsKLSAgICAgICAgCisKICAgICAgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZkNvdW50OyB9CiAgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZUeXBlOyB9CiAKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgKiAgU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBBcnJheSdzIHR5cGUgaXMga09iamVjdC4KICAgICAgICAgICovCiAgICAgICAgIHZvaWQgc2V0T2JqZWN0KGludCBpbmRleCwgT2JqZWN0Kik7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiAgUmVwbGFjZSB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHdpdGggdGhlIHNwZWNpZmllZAogICAgICAgICAgKiAgQXJyYXkgKHdoaWNoIG1heSBiZSBudWxsKS4gT3duZXJzaGlwIG9mIHRoZSBBcnJheSBpcyB0cmFuc2ZlcnJlZC4KQEAgLTI3NCwxMCArMjc0LDEwIEBACiAgICAgICAgICAgICBmbG9hdCogICBmRmxvYXRzOwogICAgICAgICAgICAgYm9vbCogICAgZkJvb2xzOwogICAgICAgICB9IGZBcnJheTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBpbml0KFR5cGUsIGludCBjb3VudCwgY29uc3Qgdm9pZCogc3JjKTsKICAgICAgICAgdm9pZCBkdW1wTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdDsKICAgICB9OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXRpbHMvU2tNZXNoVXRpbHMuaCBiL2luY2x1ZGUvdXRpbHMvU2tNZXNoVXRpbHMuaAppbmRleCBjN2NkZWNhLi41NjRkZjY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3V0aWxzL1NrTWVzaFV0aWxzLmgKKysrIGIvaW5jbHVkZS91dGlscy9Ta01lc2hVdGlscy5oCkBAIC0xOSw3ICsxOSw3IEBACiBwdWJsaWM6CiAgICAgU2tNZXNoSW5kaWNlcygpOwogICAgIH5Ta01lc2hJbmRpY2VzKCk7Ci0gICAgCisKICAgICBib29sIGluaXQoaW50IHRleFcsIGludCB0ZXhILCBpbnQgcm93cywgaW50IGNvbHMpIHsKICAgICAgICAgcmV0dXJuIHRoaXMtPmluaXQoTlVMTCwgTlVMTCwgdGV4VywgdGV4SCwgcm93cywgY29scyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91dGlscy9Ta05pbmVQYXRjaC5oIGIvaW5jbHVkZS91dGlscy9Ta05pbmVQYXRjaC5oCmluZGV4IGIwZWE0NmIuLjRkODc4OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdXRpbHMvU2tOaW5lUGF0Y2guaAorKysgYi9pbmNsdWRlL3V0aWxzL1NrTmluZVBhdGNoLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBzdGF0aWMgdm9pZCBEcmF3TmluZShTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1JlY3QmIGRzdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QmIG1hcmdpbnMsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCA9IE5VTEwpOwotICAgIAorCiAgICAgc3RhdGljIHZvaWQgRHJhd01lc2goU2tDYW52YXMqIGNhbnZhcywgY29uc3QgU2tSZWN0JiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IHhEaXZzW10sIGludCBudW1YRGl2cywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXRpbHMvaW9zL1NrU3RyZWFtX05TRGF0YS5oIGIvaW5jbHVkZS91dGlscy9pb3MvU2tTdHJlYW1fTlNEYXRhLmgKaW5kZXggMDgyOWE0Zi4uOGU2ZjA2NCAxMDA3NTUKLS0tIGEvaW5jbHVkZS91dGlscy9pb3MvU2tTdHJlYW1fTlNEYXRhLmgKKysrIGIvaW5jbHVkZS91dGlscy9pb3MvU2tTdHJlYW1fTlNEYXRhLmgKQEAgLTMwLDcgKzMwLDcgQEAKIHB1YmxpYzoKICAgICAgICAgICAgIFNrU3RyZWFtX05TRGF0YShOU0RhdGEqIGRhdGEpOwogICAgIHZpcnR1YWwgflNrU3RyZWFtX05TRGF0YSgpOwotICAgIAorCiAgICAgc3RhdGljIFNrU3RyZWFtX05TRGF0YSogQ3JlYXRlRnJvbVJlc291cmNlKGNvbnN0IGNoYXIgbmFtZVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHN1ZmZpeFtdKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91dGlscy93aW4vU2tJU3RyZWFtLmggYi9pbmNsdWRlL3V0aWxzL3dpbi9Ta0lTdHJlYW0uaAppbmRleCBiN2QwOTQ5Li5lNGUwNDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3V0aWxzL3dpbi9Ta0lTdHJlYW0uaAorKysgYi9pbmNsdWRlL3V0aWxzL3dpbi9Ta0lTdHJlYW0uaApAQCAtNDYsMjQgKzQ2LDI0IEBACiAgICAgLy8gSVN0cmVhbSBJbnRlcmZhY2UKIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2l6ZShVTEFSR0VfSU5URUdFUik7Ci0gICAgCisKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ29weVRvKElTdHJlYW0qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBVTEFSR0VfSU5URUdFUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgVUxBUkdFX0lOVEVHRVIqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBVTEFSR0VfSU5URUdFUiopOwotICAgIAorCiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENvbW1pdChEV09SRCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmV2ZXJ0KHZvaWQpOwotICAgIAorCiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIExvY2tSZWdpb24oVUxBUkdFX0lOVEVHRVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBVTEFSR0VfSU5URUdFUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIERXT1JEKTsKLSAgICAKKwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVbmxvY2tSZWdpb24oVUxBUkdFX0lOVEVHRVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFVMQVJHRV9JTlRFR0VSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBEV09SRCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ2xvbmUoSVN0cmVhbSAqKik7CiAKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2VlayhMQVJHRV9JTlRFR0VSIGxpRGlzdGFuY2VUb01vdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXRpbHMvd2luL1NrVFNjb3BlZENvbVB0ci5oIGIvaW5jbHVkZS91dGlscy93aW4vU2tUU2NvcGVkQ29tUHRyLmgKaW5kZXggMTRhYWNlNS4uODVjMzE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91dGlscy93aW4vU2tUU2NvcGVkQ29tUHRyLmgKKysrIGIvaW5jbHVkZS91dGlscy93aW4vU2tUU2NvcGVkQ29tUHRyLmgKQEAgLTQ3LDEzICs0NywxMyBAQAogICAgICAgICAgICAgdGhpcy0+ZlB0ciA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIHN3YXAoU2tUU2NvcGVkQ29tUHRyPFQ+JiB0aGF0KSB7CiAgICAgICAgIFQqIHRlbXAgPSB0aGlzLT5mUHRyOwogICAgICAgICB0aGlzLT5mUHRyID0gdGhhdC5mUHRyOwogICAgICAgICB0aGF0LmZQdHIgPSB0ZW1wOwogICAgIH0KLSAgICAKKwogICAgIFQqIHJlbGVhc2UoKSB7CiAgICAgICAgIFQqIHRlbXAgPSB0aGlzLT5mUHRyOwogICAgICAgICB0aGlzLT5mUHRyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvU2tFdmVudC5oIGIvaW5jbHVkZS92aWV3cy9Ta0V2ZW50LmgKaW5kZXggYjNhMDdlOS4uZTExYzE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWV3cy9Ta0V2ZW50LmgKKysrIGIvaW5jbHVkZS92aWV3cy9Ta0V2ZW50LmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICBmVGFyZ2V0UHJvYyA9IHByb2M7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm4gdGhlIGV2ZW50J3MgdW5uYW1lZCAzMmJpdCBmaWVsZC4gRGVmYXVsdCB2YWx1ZSBpcyAwCiAgICAgICovCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICB2b2lkIHBvc3QoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLT5wb3N0RGVsYXkoMCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIFBvc3QgdG8gdGhlIGV2ZW50IHF1ZXVlIHVzaW5nIHRoZSBldmVudCdzIHRhcmdldElEIG9yIHRhcmdldC1wcm9jIGFuZAogICAgICAqICB0aGUgc3BlY2lmZWQgbWlsbGlzZWNvbmQgZGVsYXkuCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgKiAgdGhlIGV2ZW50IHF1ZXVlLiBJdCBjYW5ub3QgYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvciBpbiBhIGdsb2JhbC4KICAgICAgKi8KICAgICB2b2lkIHBvc3REZWxheShTa01TZWMgZGVsYXkpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogIFBvc3QgdG8gdGhlIGV2ZW50IHF1ZXVlIHVzaW5nIHRoZSBldmVudCdzIHRhcmdldElEIG9yIHRhcmdldC1wcm9jLgogICAgICAqICBUaGUgZXZlbnQgd2lsbCBiZSBkZWxpdmVyZWQgbm8gc29vbmVyIHRoYW4gdGhlIHNwZWNpZmllZCBtaWxsaXNlY29uZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWV3cy9Ta0tleS5oIGIvaW5jbHVkZS92aWV3cy9Ta0tleS5oCmluZGV4IDRkYjMxMDguLmEwMTljMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlld3MvU2tLZXkuaAorKysgYi9pbmNsdWRlL3ZpZXdzL1NrS2V5LmgKQEAgLTEzLDkgKzEzLDkgQEAKICNpbmNsdWRlICJTa1R5cGVzLmgiCiAKIGVudW0gU2tLZXkgewotICAgIC8vcmVvcmRlcmluZyB0aGVzZSB0byBtYXRjaCBhbmRyb2lkLmFwcC5LZXlFdmVudCAKKyAgICAvL3Jlb3JkZXJpbmcgdGhlc2UgdG8gbWF0Y2ggYW5kcm9pZC5hcHAuS2V5RXZlbnQKICAgICBrTk9ORV9Ta0tleSwgICAgLy9jb3JyZXNwb25kcyB0byBhbmRyb2lkJ3MgVU5LTk9XTgotICAgIAorCiAgICAga0xlZnRTb2Z0S2V5X1NrS2V5LAogICAgIGtSaWdodFNvZnRLZXlfU2tLZXksCiAKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBrQmFja19Ta0tleSwgICAgLy8hPCAoQ0xSKQogICAgIGtTZW5kX1NrS2V5LCAgICAvLyE8IHRoZSBncmVlbiAodGFsaykga2V5CiAgICAga0VuZF9Ta0tleSwgICAgIC8vITwgdGhlIHJlZCBrZXkKLSAgICAKKwogICAgIGswX1NrS2V5LAogICAgIGsxX1NrS2V5LAogICAgIGsyX1NrS2V5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWV3cy9Ta09TTWVudS5oIGIvaW5jbHVkZS92aWV3cy9Ta09TTWVudS5oCmluZGV4IDBjNGE2MTkuLjNlNWVlNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlld3MvU2tPU01lbnUuaAorKysgYi9pbmNsdWRlL3ZpZXdzL1NrT1NNZW51LmgKQEAgLTE3LDkgKzE3LDkgQEAKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTa09TTWVudShjb25zdCBjaGFyIHRpdGxlW10gPSAiIik7CiAgICAgflNrT1NNZW51KCk7Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFYWNoIG9mIHRoZXNlIChleGNlcHQgYWN0aW9uKSBoYXMgYW4gYXNzb2NpYXRlZCB2YWx1ZSwgd2hpY2ggaXMgc3RvcmVkIGluIAorICAgICAqIEVhY2ggb2YgdGhlc2UgKGV4Y2VwdCBhY3Rpb24pIGhhcyBhbiBhc3NvY2lhdGVkIHZhbHVlLCB3aGljaCBpcyBzdG9yZWQgaW4KICAgICAgKiB0aGUgZXZlbnQgcGF5bG9hZCBmb3IgdGhlIGl0ZW0uCiAgICAgICogRWFjaCB0eXBlIGhhcyBhIHNwZWNpZmljIHR5cGUgZm9yIGl0cyB2YWx1ZS4uLgogICAgICAqICAgICBBY3Rpb24gOiBub25lCkBAIC00MCwyMyArNDAsMjMgQEAKICAgICAgICAga1RleHRGaWVsZF9UeXBlLAogICAgICAgICBrQ3VzdG9tX1R5cGUKICAgICB9OwotICAgIAorCiAgICAgZW51bSBUcmlTdGF0ZSB7CiAgICAgICAgIGtNaXhlZFN0YXRlID0gLTEsCiAgICAgICAgIGtPZmZTdGF0ZSA9IDAsCiAgICAgICAgIGtPblN0YXRlID0gMQogICAgIH07Ci0gICAgCisKICAgICBjbGFzcyBJdGVtIHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8qKgogICAgICAgICAgKiBBdXRvIGluY3JlbWVudHMgYSBnbG9iYWwgdG8gZ2VuZXJhdGUgYW4gdW5pcXVlIElEIGZvciBlYWNoIG5ldyBpdGVtCiAgICAgICAgICAqIE5vdGU6IFRocmVhZCBzYWZlCiAgICAgICAgICAqLwotICAgICAgICBJdGVtKGNvbnN0IGNoYXIgbGFiZWxbXSwgU2tPU01lbnU6OlR5cGUgdHlwZSwgY29uc3QgY2hhciBzbG90TmFtZVtdLCAKKyAgICAgICAgSXRlbShjb25zdCBjaGFyIGxhYmVsW10sIFNrT1NNZW51OjpUeXBlIHR5cGUsIGNvbnN0IGNoYXIgc2xvdE5hbWVbXSwKICAgICAgICAgICAgICBTa0V2ZW50KiBldnQpOwogICAgICAgICB+SXRlbSgpIHsgZGVsZXRlIGZFdmVudDsgfQotICAgICAgICAKKwogICAgICAgICBTa0V2ZW50KiAgICBnZXRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIGZFdmVudDsgfQogICAgICAgICBpbnQgICAgICAgICBnZXRJRCgpIGNvbnN0IHsgcmV0dXJuIGZJRDsgfQogICAgICAgICBjb25zdCBjaGFyKiBnZXRMYWJlbCgpIGNvbnN0IHsgcmV0dXJuIGZMYWJlbC5jX3N0cigpOyB9CkBAIC02NCwxOCArNjQsMTggQEAKICAgICAgICAgVHlwZSAgICAgICAgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZUeXBlOyB9CiAgICAgICAgIHZvaWQgICAgICAgIHNldEtleUVxdWl2YWxlbnQoU2tVbmljaGFyIGtleSkgeyBmS2V5ID0ga2V5OyB9CiAgICAgICAgIFNrVW5pY2hhciAgIGdldEtleUVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBmS2V5OyB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBwcmVkZWZpbmVkIHR5cGVzCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIHNldEJvb2woYm9vbCB2YWx1ZSkgY29uc3Q7ICAgICAgICAgICAgIC8vRm9yIFN3aXRjaAotICAgICAgICB2b2lkIHNldFNjYWxhcihTa1NjYWxhciB2YWx1ZSkgY29uc3Q7ICAgICAgIC8vRm9yIFNsaWRlciAgICAgCisgICAgICAgIHZvaWQgc2V0U2NhbGFyKFNrU2NhbGFyIHZhbHVlKSBjb25zdDsgICAgICAgLy9Gb3IgU2xpZGVyCiAgICAgICAgIHZvaWQgc2V0SW50KGludCB2YWx1ZSkgY29uc3Q7ICAgICAgICAgICAgICAgLy9Gb3IgTGlzdAogICAgICAgICB2b2lkIHNldFRyaVN0YXRlKFRyaVN0YXRlIHZhbHVlKSBjb25zdDsgICAgIC8vRm9yIFRyaXN0YXRlCiAgICAgICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IGNoYXIgdmFsdWVbXSkgY29uc3Q7ICAgLy9Gb3IgVGV4dEZpZWxkCi0gICAgICAgIAorCiAgICAgICAgIC8qKgotICAgICAgICAgKiBQb3N0IGV2ZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSBpdGVtIHRvIHRhcmdldCwgYW55IGNoYW5nZXMgdG8gCisgICAgICAgICAqIFBvc3QgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW51IGl0ZW0gdG8gdGFyZ2V0LCBhbnkgY2hhbmdlcyB0bwogICAgICAgICAgKiB0aGUgYXNzb2NpYXRlZCBldmVudCBtdXN0IGJlIG1hZGUgcHJpb3IgdG8gY2FsbGluZyB0aGlzIG1ldGhvZAogICAgICAgICAgKi8KICAgICAgICAgdm9pZCBwb3N0RXZlbnQoKSBjb25zdCB7IChuZXcgU2tFdmVudCgqKGZFdmVudCkpKS0+cG9zdCgpOyB9CkBAIC04OCw4MCArODgsODAgQEAKICAgICAgICAgVHlwZSAgICAgICAgICAgIGZUeXBlOwogICAgICAgICBTa1VuaWNoYXIgICAgICAgZktleTsKICAgICB9OwotICAgIAorCiAgICAgdm9pZCAgICAgICAgcmVzZXQoKTsKICAgICBjb25zdCBjaGFyKiBnZXRUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIGZUaXRsZS5jX3N0cigpOyB9CiAgICAgdm9pZCAgICAgICAgc2V0VGl0bGUgKGNvbnN0IGNoYXIgdGl0bGVbXSkgeyBmVGl0bGUuc2V0KHRpdGxlKTsgfQogICAgIGludCAgICAgICAgIGdldENvdW50KCkgY29uc3QgeyByZXR1cm4gZkl0ZW1zLmNvdW50KCk7IH0KICAgICBjb25zdCBJdGVtKiBnZXRJdGVtQnlJRChpbnQgaXRlbUlEKSBjb25zdDsKICAgICB2b2lkICAgICAgICBnZXRJdGVtcyhjb25zdCBJdGVtKiBpdGVtc1tdKSBjb25zdDsKLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzc2lnbiBrZXkgdG8gdGhlIG1lbnUgaXRlbSB3aXRoIGl0ZW1JRCwgd2lsbCBkbyBub3RoaW5nIGlmIHRoZXJlJ3Mgbm8gCisgICAgICogQXNzaWduIGtleSB0byB0aGUgbWVudSBpdGVtIHdpdGggaXRlbUlELCB3aWxsIGRvIG5vdGhpbmcgaWYgdGhlcmUncyBubwogICAgICAqIGl0ZW0gd2l0aCB0aGUgaWQgZ2l2ZW4KICAgICAgKi8KICAgICB2b2lkICAgICAgICBhc3NpZ25LZXlFcXVpdmFsZW50VG9JdGVtKGludCBpdGVtSUQsIFNrVW5pY2hhciBrZXkpOwogICAgIC8qKgotICAgICAqIENhbGwgdGhpcyBpbiBhIFNrVmlldydzIG9uSGFuZGxlQ2hhciB0byB0cmlnZ2VyIGFueSBtZW51IGl0ZW1zIHdpdGggdGhlIAotICAgICAqIGdpdmVuIGtleSBlcXVpdmFsZW50LiBJZiBzdWNoIGFuIGl0ZW0gaXMgZm91bmQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gCi0gICAgICogdHJ1ZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgKGRlZmF1bHQgYmVoYXZpb3IgCisgICAgICogQ2FsbCB0aGlzIGluIGEgU2tWaWV3J3Mgb25IYW5kbGVDaGFyIHRvIHRyaWdnZXIgYW55IG1lbnUgaXRlbXMgd2l0aCB0aGUKKyAgICAgKiBnaXZlbiBrZXkgZXF1aXZhbGVudC4gSWYgc3VjaCBhbiBpdGVtIGlzIGZvdW5kLCB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuCisgICAgICogdHJ1ZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgKGRlZmF1bHQgYmVoYXZpb3IKICAgICAgKiBkZWZpbmVkIGZvciBzd2l0Y2hlcyh0b2dnbGluZyksIHRyaXN0YXRlcyhjeWNsZSksIGFuZCBsaXN0cyhjeWNsZSksCi0gICAgICogZm9yIGFueXRoaW5nIGVsc2UsIHRoZSBldmVudCBhdHRhY2hlZCBpcyBwb3N0ZWQgd2l0aG91dCBzdGF0ZSBjaGFuZ2VzKSAKKyAgICAgKiBmb3IgYW55dGhpbmcgZWxzZSwgdGhlIGV2ZW50IGF0dGFjaGVkIGlzIHBvc3RlZCB3aXRob3V0IHN0YXRlIGNoYW5nZXMpCiAgICAgICogSWYgbm8gbWVudSBpdGVtIGNhbiBiZSBtYXRjaGVkIHdpdGggdGhlIGtleSwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZAogICAgICAqLwogICAgIGJvb2wgICAgICAgIGhhbmRsZUtleUVxdWl2YWxlbnQoU2tVbmljaGFyIGtleSk7Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcHBlbmQgbmV3IGl0ZW1zIHRvIHRoZSBtZW51IGFuZCByZXR1cm5zIHRoZWlyIAotICAgICAqIGFzc29jaWF0ZWQgdW5pcXVlIGlkLCB3aGljaCBjYW4gYmUgdXNlZCB0byBieSB0aGUgY2xpZW50IHRvIHJlZmVyIHRvIAorICAgICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFwcGVuZCBuZXcgaXRlbXMgdG8gdGhlIG1lbnUgYW5kIHJldHVybnMgdGhlaXIKKyAgICAgKiBhc3NvY2lhdGVkIHVuaXF1ZSBpZCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYnkgdGhlIGNsaWVudCB0byByZWZlciB0bwogICAgICAqIHRoZSBtZW51IGl0ZW0gY3JlYXRlZCBhbmQgY2hhbmdlIGl0cyBzdGF0ZS4gc2xvdE5hbWUgc3BlY2lmaWVzIHRoZSBzdHJpbmcKICAgICAgKiBpZGVudGlmaWVyIG9mIGFueSBzdGF0ZS92YWx1ZSB0byBiZSByZXR1cm5lZCBpbiB0aGUgaXRlbSdzIFNrRXZlbnQgb2JqZWN0CiAgICAgICogTk9URTogZXZ0IG11c3QgYmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkCiAgICAgICovCi0gICAgaW50IGFwcGVuZEl0ZW0oY29uc3QgY2hhciBsYWJlbFtdLCBUeXBlIHR5cGUsIGNvbnN0IGNoYXIgc2xvdE5hbWVbXSwgCi0gICAgICAgICAgICAgICAgICAgU2tFdmVudCogZXZ0KTsgCi0gICAgCisgICAgaW50IGFwcGVuZEl0ZW0oY29uc3QgY2hhciBsYWJlbFtdLCBUeXBlIHR5cGUsIGNvbnN0IGNoYXIgc2xvdE5hbWVbXSwKKyAgICAgICAgICAgICAgICAgICBTa0V2ZW50KiBldnQpOworCiAgICAgLyoqCi0gICAgICogQ3JlYXRlIHByZWRlZmluZWQgaXRlbXMgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gVG8gYmUgdXNlZCB3aXRoIHRoZSAKKyAgICAgKiBDcmVhdGUgcHJlZGVmaW5lZCBpdGVtcyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiBUbyBiZSB1c2VkIHdpdGggdGhlCiAgICAgICogb3RoZXIgaGVscGVyIGZ1bmN0aW9ucyBiZWxvdyB0byByZXRyaXZlL3VwZGF0ZSBzdGF0ZSBpbmZvcm1hdGlvbi4KLSAgICAgKiBOb3RlOiB0aGUgaGVscGVyIGZ1bmN0aW9ucyBiZWxvdyBhc3N1bWUgdGhhdCBzbG90TmFtZSBpcyBVTklRVUUgZm9yIGFsbCAKKyAgICAgKiBOb3RlOiB0aGUgaGVscGVyIGZ1bmN0aW9ucyBiZWxvdyBhc3N1bWUgdGhhdCBzbG90TmFtZSBpcyBVTklRVUUgZm9yIGFsbAogICAgICAqIG1lbnUgaXRlbXMgb2YgdGhlIHNhbWUgdHlwZSBzaW5jZSBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGV2ZW50CiAgICAgICovCiAgICAgaW50IGFwcGVuZEFjdGlvbihjb25zdCBjaGFyIGxhYmVsW10sIFNrRXZlbnRTaW5rSUQgdGFyZ2V0KTsKLSAgICBpbnQgYXBwZW5kTGlzdChjb25zdCBjaGFyIGxhYmVsW10sIGNvbnN0IGNoYXIgc2xvdE5hbWVbXSwgCisgICAgaW50IGFwcGVuZExpc3QoY29uc3QgY2hhciBsYWJlbFtdLCBjb25zdCBjaGFyIHNsb3ROYW1lW10sCiAgICAgICAgICAgICAgICAgICAgU2tFdmVudFNpbmtJRCB0YXJnZXQsIGludCBkZWZhdWx0SW5kZXgsIGNvbnN0IGNoYXJbXSAuLi4pOwotICAgIGludCBhcHBlbmRTbGlkZXIoY29uc3QgY2hhciBsYWJlbFtdLCBjb25zdCBjaGFyIHNsb3ROYW1lW10sIAotICAgICAgICAgICAgICAgICAgICAgU2tFdmVudFNpbmtJRCB0YXJnZXQsIFNrU2NhbGFyIG1pbiwgU2tTY2FsYXIgbWF4LCAKKyAgICBpbnQgYXBwZW5kU2xpZGVyKGNvbnN0IGNoYXIgbGFiZWxbXSwgY29uc3QgY2hhciBzbG90TmFtZVtdLAorICAgICAgICAgICAgICAgICAgICAgU2tFdmVudFNpbmtJRCB0YXJnZXQsIFNrU2NhbGFyIG1pbiwgU2tTY2FsYXIgbWF4LAogICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXIgZGVmYXVsdFZhbHVlKTsKLSAgICBpbnQgYXBwZW5kU3dpdGNoKGNvbnN0IGNoYXIgbGFiZWxbXSwgY29uc3QgY2hhciBzbG90TmFtZVtdLCAKKyAgICBpbnQgYXBwZW5kU3dpdGNoKGNvbnN0IGNoYXIgbGFiZWxbXSwgY29uc3QgY2hhciBzbG90TmFtZVtdLAogICAgICAgICAgICAgICAgICAgICAgU2tFdmVudFNpbmtJRCB0YXJnZXQsIGJvb2wgZGVmYXVsdFN0YXRlID0gZmFsc2UpOwogICAgIGludCBhcHBlbmRUcmlTdGF0ZShjb25zdCBjaGFyIGxhYmVsW10sIGNvbnN0IGNoYXIgc2xvdE5hbWVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgU2tFdmVudFNpbmtJRCB0YXJnZXQsIFRyaVN0YXRlIGRlZmF1bHRTdGF0ZSA9IGtPZmZTdGF0ZSk7CiAgICAgaW50IGFwcGVuZFRleHRGaWVsZChjb25zdCBjaGFyIGxhYmVsW10sIGNvbnN0IGNoYXIgc2xvdE5hbWVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFNrRXZlbnRTaW5rSUQgdGFyZ2V0LCBjb25zdCBjaGFyIHBsYWNlaG9sZGVyW10gPSAiIik7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEhlbHBlciBmdW5jdGlvbnMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb3RoZXIgdGhhbiB0aGUgc3RvcmVkIHZhbHVlIGZvcgogICAgICAqIHNvbWUgcHJlZGVmaW5lZCB0eXBlcwogICAgICAqLwogICAgIHN0YXRpYyBib29sIEZpbmRMaXN0SXRlbUNvdW50KGNvbnN0IFNrRXZlbnQmIGV2dCwgaW50KiBjb3VudCk7CiAgICAgLyoqCi0gICAgICogRW5zdXJlIHRoYXQgdGhlIGl0ZW1zIGFycmF5IGNhbiBzdG9yZSBuIFNrU3RyaW5ncyB3aGVyZSBuIGlzIHRoZSBjb3VudCAKKyAgICAgKiBFbnN1cmUgdGhhdCB0aGUgaXRlbXMgYXJyYXkgY2FuIHN0b3JlIG4gU2tTdHJpbmdzIHdoZXJlIG4gaXMgdGhlIGNvdW50CiAgICAgICogZXh0cmFjdGVkIHVzaW5nIEZpbmRMaXN0SXRlbUNvdW50CiAgICAgICovCiAgICAgc3RhdGljIGJvb2wgRmluZExpc3RJdGVtcyhjb25zdCBTa0V2ZW50JiBldnQsIFNrU3RyaW5nIGl0ZW1zW10pOwogICAgIHN0YXRpYyBib29sIEZpbmRTbGlkZXJNaW4oY29uc3QgU2tFdmVudCYgZXZ0LCBTa1NjYWxhciogbWluKTsKICAgICBzdGF0aWMgYm9vbCBGaW5kU2xpZGVyTWF4KGNvbnN0IFNrRXZlbnQmIGV2dCwgU2tTY2FsYXIqIG1heCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgYW4gYWN0aW9uIHdpdGggdGhlIGdpdmVuIGxhYmVsIGlzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgYm9vbCBGaW5kQWN0aW9uKGNvbnN0IFNrRXZlbnQmIGV2dCwgY29uc3QgY2hhciBsYWJlbFtdKTsKICAgICAvKioKLSAgICAgKiBUaGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgd2lsbCByZXR1cm4gdHJ1ZSBpZiBldnQgaXMgZ2VuZXJhdGVkIGZyb20gCi0gICAgICogYSBwcmVkZWZpbmVkIGl0ZW0gdHlwZSBhbmQgcmV0cmlldmUgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGUgaW5mb3JtYXRpb24uIAotICAgICAqIFRoZXkgd2lsbCByZXR1cm4gZmFsc2UgYW5kIGxlYXZlIHZhbHVlIHVuY2hhbmdlZCBpZiB0aGVyZSdzIGEgdHlwZSAKKyAgICAgKiBUaGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgd2lsbCByZXR1cm4gdHJ1ZSBpZiBldnQgaXMgZ2VuZXJhdGVkIGZyb20KKyAgICAgKiBhIHByZWRlZmluZWQgaXRlbSB0eXBlIGFuZCByZXRyaWV2ZSB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBUaGV5IHdpbGwgcmV0dXJuIGZhbHNlIGFuZCBsZWF2ZSB2YWx1ZSB1bmNoYW5nZWQgaWYgdGhlcmUncyBhIHR5cGUKICAgICAgKiBtaXNtYXRjaCBvciBzbG90TmFtZSBpcyBpbmNvcnJlY3QKICAgICAgKi8KICAgICBzdGF0aWMgYm9vbCBGaW5kTGlzdEluZGV4KGNvbnN0IFNrRXZlbnQmIGV2dCwgY29uc3QgY2hhciBzbG90TmFtZVtdLCBpbnQqIHZhbHVlKTsKQEAgLTE2OSwxMSArMTY5LDExIEBACiAgICAgc3RhdGljIGJvb2wgRmluZFN3aXRjaFN0YXRlKGNvbnN0IFNrRXZlbnQmIGV2dCwgY29uc3QgY2hhciBzbG90TmFtZVtdLCBib29sKiB2YWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgRmluZFRyaVN0YXRlKGNvbnN0IFNrRXZlbnQmIGV2dCwgY29uc3QgY2hhciBzbG90TmFtZVtdLCBUcmlTdGF0ZSogdmFsdWUpOwogICAgIHN0YXRpYyBib29sIEZpbmRUZXh0KGNvbnN0IFNrRXZlbnQmIGV2dCwgY29uc3QgY2hhciBzbG90TmFtZVtdLCBTa1N0cmluZyogdmFsdWUpOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrU3RyaW5nIGZUaXRsZTsKICAgICBTa1REQXJyYXk8SXRlbSo+IGZJdGVtczsKLSAgICAKKwogICAgIC8vIGlsbGVnYWwKICAgICBTa09TTWVudShjb25zdCBTa09TTWVudSYpOwogICAgIFNrT1NNZW51JiBvcGVyYXRvcj0oY29uc3QgU2tPU01lbnUmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd19NYWMuaCBiL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd19NYWMuaAppbmRleCAzMzkxNzg1Li5kMTk1Y2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZXdzL1NrT1NXaW5kb3dfTWFjLmgKKysrIGIvaW5jbHVkZS92aWV3cy9Ta09TV2luZG93X01hYy5oCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgflNrT1NXaW5kb3coKTsKICAgICB2b2lkKiAgIGdldEhXTkQoKSBjb25zdCB7IHJldHVybiBmSFdORDsgfQogCi0gICAgdmlydHVhbCBib29sIG9uRGlzcGF0Y2hDbGljayhpbnQgeCwgaW50IHksIENsaWNrOjpTdGF0ZSBzdGF0ZSwgCisgICAgdmlydHVhbCBib29sIG9uRGlzcGF0Y2hDbGljayhpbnQgeCwgaW50IHksIENsaWNrOjpTdGF0ZSBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG93bmVyKTsKICAgICBlbnVtIFNrQmFja0VuZFR5cGVzIHsKICAgICAgICAga05vbmVfQmFja0VuZFR5cGUsCkBAIC0zOSw3ICszOSw3IEBACiAgICAgdmlydHVhbCB2b2lkIG9uQWRkTWVudShjb25zdCBTa09TTWVudSopOwogICAgIHZpcnR1YWwgdm9pZCBvblVwZGF0ZU1lbnUoY29uc3QgU2tPU01lbnUqKTsKICAgICB2aXJ0dWFsIHZvaWQgb25TZXRUaXRsZShjb25zdCBjaGFyW10pOwotICAgIAorCiBwcml2YXRlOgogICAgIHZvaWQqICAgZkhXTkQ7CiAgICAgYm9vbCAgICBmSW52YWxFdmVudElzUGVuZGluZzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd19XaW4uaCBiL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd19XaW4uaAppbmRleCA1YWRkNDIwLi5mZjI4OWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZXdzL1NrT1NXaW5kb3dfV2luLmgKKysrIGIvaW5jbHVkZS92aWV3cy9Ta09TV2luZG93X1dpbi5oCkBAIC02MSw3ICs2MSw3IEBACiAKIHByaXZhdGU6CiAgICAgdm9pZCogICAgICAgICAgICAgICBmSFdORDsKLSAgICAKKwogICAgIHZvaWQgICAgICAgICAgICAgICAgZG9QYWludCh2b2lkKiBjdHgpOwogCiAjaWYgU0tfU1VQUE9SVF9HUFUKQEAgLTg5LDcgKzg5LDcgQEAKICNlbmRpZiAvLyBTS19BTkdMRQogI2VuZGlmIC8vIFNLX1NVUFBPUlRfR1BVCiAKLSAgICB0eXBlZGVmIFNrV2luZG93IElOSEVSSVRFRDsgCisgICAgdHlwZWRlZiBTa1dpbmRvdyBJTkhFUklURUQ7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd19pT1MuaCBiL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd19pT1MuaAppbmRleCAzM2YwMTRjLi5hMWM0OTU2IDEwMDc1NQotLS0gYS9pbmNsdWRlL3ZpZXdzL1NrT1NXaW5kb3dfaU9TLmgKKysrIGIvaW5jbHVkZS92aWV3cy9Ta09TV2luZG93X2lPUy5oCkBAIC0xNiw3ICsxNiw3IEBACiAgICAgflNrT1NXaW5kb3coKTsKICAgICB2b2lkKiAgIGdldEhXTkQoKSBjb25zdCB7IHJldHVybiBmSFdORDsgfQogCi0gICAgdmlydHVhbCBib29sIG9uRGlzcGF0Y2hDbGljayhpbnQgeCwgaW50IHksIENsaWNrOjpTdGF0ZSBzdGF0ZSwgCisgICAgdmlydHVhbCBib29sIG9uRGlzcGF0Y2hDbGljayhpbnQgeCwgaW50IHksIENsaWNrOjpTdGF0ZSBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG93bmVyKTsKIAogICAgIGVudW0gU2tCYWNrRW5kVHlwZXMgewpAQCAtMzcsNyArMzcsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBvbkFkZE1lbnUoY29uc3QgU2tPU01lbnUqKTsKICAgICB2aXJ0dWFsIHZvaWQgb25VcGRhdGVNZW51KGNvbnN0IFNrT1NNZW51Kik7CiAgICAgdmlydHVhbCB2b2lkIG9uU2V0VGl0bGUoY29uc3QgY2hhcltdKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB2b2lkKiAgIGZIV05EOwogICAgIGJvb2wgICAgZkludmFsRXZlbnRJc1BlbmRpbmc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZXdzL1NrT1NXaW5kb3dfd3h3aWRnZXRzLmggYi9pbmNsdWRlL3ZpZXdzL1NrT1NXaW5kb3dfd3h3aWRnZXRzLmgKaW5kZXggYTY2MmI0MC4uYWQ5MzliMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWV3cy9Ta09TV2luZG93X3d4d2lkZ2V0cy5oCisrKyBiL2luY2x1ZGUvdmlld3MvU2tPU1dpbmRvd193eHdpZGdldHMuaApAQCAtMTcsMTkgKzE3LDE5IEBACiAgICAgU2tPU1dpbmRvdygpOwogICAgIFNrT1NXaW5kb3coY29uc3Qgd3hTdHJpbmcmIHRpdGxlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgflNrT1NXaW5kb3coKTsKLSAgICAKKwogICAgIHd4RnJhbWUqIGdldFdYRnJhbWUoKSBjb25zdCB7IHJldHVybiBmRnJhbWU7IH0KLSAgICAKKwogICAgIHZvaWQgdXBkYXRlU2l6ZSgpOwotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG9uSGFuZGxlSW52YWwoY29uc3QgU2tJUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBvbkFkZE1lbnUoY29uc3QgU2tPU01lbnUqKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB3eEZyYW1lKiBmRnJhbWU7CiAgICAgdHlwZWRlZiBTa1dpbmRvdyBJTkhFUklURUQ7Ci0gICAgCisKIH07CiAKICNlbmRpZnBlZGVmIFNrV2luZG93IElOSEVSSVRFRDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvU2tTdGFja1ZpZXdMYXlvdXQuaCBiL2luY2x1ZGUvdmlld3MvU2tTdGFja1ZpZXdMYXlvdXQuaAppbmRleCA3MDVmZjc0Li5mOGQyM2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZXdzL1NrU3RhY2tWaWV3TGF5b3V0LmgKKysrIGIvaW5jbHVkZS92aWV3cy9Ta1N0YWNrVmlld0xheW91dC5oCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIGtTdGFydF9QYWNrLAogICAgICAgICBrQ2VudGVyX1BhY2ssCiAgICAgICAgIGtFbmRfUGFjaywKLSAgICAgICAgCisKICAgICAgICAga1BhY2tDb3VudAogICAgIH07CiAgICAgUGFjayAgICBnZXRQYWNrKCkgY29uc3QgeyByZXR1cm4gKFBhY2spZlBhY2s7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvU2tTeXN0ZW1FdmVudFR5cGVzLmggYi9pbmNsdWRlL3ZpZXdzL1NrU3lzdGVtRXZlbnRUeXBlcy5oCmluZGV4IGYwZjI5NTIuLmJiMmI1ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlld3MvU2tTeXN0ZW1FdmVudFR5cGVzLmgKKysrIGIvaW5jbHVkZS92aWV3cy9Ta1N5c3RlbUV2ZW50VHlwZXMuaApAQCAtMTcsNyArMTcsNyBAQAogKi8KICNkZWZpbmUgU0tfRXZlbnRUeXBlX0RlbGF5ICAgICAgIlx4ZCIgImxheSIKICNkZWZpbmUgU0tfRXZlbnRUeXBlX0ludmFsICAgICAgIm52IiAiXHhhIiAibCIKLSNkZWZpbmUgU0tfRXZlbnRUeXBlX0tleSAgICAgICAgImtleSIgIlx4MSIgCisjZGVmaW5lIFNLX0V2ZW50VHlwZV9LZXkgICAgICAgICJrZXkiICJceDEiCiAjZGVmaW5lIFNLX0V2ZW50VHlwZV9PbkVuZCAib24iICJceGUiICJuIgogI2RlZmluZSBTS19FdmVudFR5cGVfVW5pY2hhciAgICAiXHhjIiAiaGFyIgogI2RlZmluZSBTS19FdmVudFR5cGVfS2V5VXAgICAgICAia2V5IiAiXHhmIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWV3cy9Ta1RvdWNoR2VzdHVyZS5oIGIvaW5jbHVkZS92aWV3cy9Ta1RvdWNoR2VzdHVyZS5oCmluZGV4IDUyNzA2NWUuLjFiYTM4NjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlld3MvU2tUb3VjaEdlc3R1cmUuaAorKysgYi9pbmNsdWRlL3ZpZXdzL1NrVG91Y2hHZXN0dXJlLmgKQEAgLTEzLDEzICsxMywxMyBAQAogCiBzdHJ1Y3QgU2tGbGluZ1N0YXRlIHsKICAgICBTa0ZsaW5nU3RhdGUoKSA6IGZBY3RpdmUoZmFsc2UpIHt9Ci0gICAgCisKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gZkFjdGl2ZTsgfQogICAgIHZvaWQgc3RvcCgpIHsgZkFjdGl2ZSA9IGZhbHNlOyB9Ci0gICAgCisKICAgICB2b2lkIHJlc2V0KGZsb2F0IHN4LCBmbG9hdCBzeSk7CiAgICAgYm9vbCBldmFsdWF0ZU1hdHJpeChTa01hdHJpeCogbWF0cml4KTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa1BvaW50ICAgICBmRGlyZWN0aW9uOwogICAgIFNrU2NhbGFyICAgIGZTcGVlZDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZXdzL1NrVmlldy5oIGIvaW5jbHVkZS92aWV3cy9Ta1ZpZXcuaAppbmRleCBkZTQ5N2RkLi5lYjA2MjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZXdzL1NrVmlldy5oCisrKyBiL2luY2x1ZGUvdmlld3MvU2tWaWV3LmgKQEAgLTgyLDkgKzgyLDkgQEAKICAgICB2b2lkICAgICAgICBnZXRMb2NhbEJvdW5kcyhTa1JlY3QqIGJvdW5kcykgY29uc3Q7CiAKICAgICAvKiogTG9jIC0gdGhlIHZpZXcncyBvZmZzZXQgd2l0aCByZXNwZWN0IHRvIGl0cyBwYXJlbnQgaW4gaXRzIHZpZXcgaGllYXJjaHkuCi0gICAgICAgIE5PVEU6IEZvciBtb3JlIGNvbXBsZXggdHJhbnNmb3JtcywgdXNlIExvY2FsIE1hdHJpeC4gVGhlIHRyYW5mb3JtYXRpb25zIAorICAgICAgICBOT1RFOiBGb3IgbW9yZSBjb21wbGV4IHRyYW5zZm9ybXMsIHVzZSBMb2NhbCBNYXRyaXguIFRoZSB0cmFuZm9ybWF0aW9ucwogICAgICAgICBhcmUgYXBwbGllZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgotICAgICAgICAgICAgIGNhbnZhcy0+dHJhbnNsYXRlKGZMb2MuZlgsIGZMb2MuZlkpOwkJCisgICAgICAgICAgICAgY2FudmFzLT50cmFuc2xhdGUoZkxvYy5mWCwgZkxvYy5mWSk7CiAgICAgICAgICAgICAgY2FudmFzLT5jb25jYXQoZk1hdHJpeCk7CiAgICAgKi8KICAgICAvKiogUmV0dXJuIHRoZSB2aWV3J3MgbGVmdCBlZGdlICovCkBAIC05NiwxMyArOTYsMTMgQEAKICAgICB2b2lkICAgICAgICBzZXRMb2MoY29uc3QgU2tQb2ludCYgbG9jKSB7IHRoaXMtPnNldExvYyhsb2MuZlgsIGxvYy5mWSk7IH0KICAgICB2b2lkICAgICAgICBzZXRMb2NYKFNrU2NhbGFyIHgpIHsgdGhpcy0+c2V0TG9jKHgsIGZMb2MuZlkpOyB9CiAgICAgdm9pZCAgICAgICAgc2V0TG9jWShTa1NjYWxhciB5KSB7IHRoaXMtPnNldExvYyhmTG9jLmZYLCB5KTsgfQotICAgIAotICAgIC8qKiBMb2NhbCBNYXRyaXggLSBtYXRyaXggdXNlZCB0byB0cmFuZm9ybSB0aGUgdmlldyB3aXRoIHJlc3BlY3QgdG8gaXRzIAotICAgICAgICBwYXJlbnQgaW4gaXRzIHZpZXcgaGllYXJjaHkuIFVzZSBzZXRMb2NhbE1hdHJpeCB0byBhcHBseSBtYXRyaXggCisKKyAgICAvKiogTG9jYWwgTWF0cml4IC0gbWF0cml4IHVzZWQgdG8gdHJhbmZvcm0gdGhlIHZpZXcgd2l0aCByZXNwZWN0IHRvIGl0cworICAgICAgICBwYXJlbnQgaW4gaXRzIHZpZXcgaGllYXJjaHkuIFVzZSBzZXRMb2NhbE1hdHJpeCB0byBhcHBseSBtYXRyaXgKICAgICAgICAgdHJhbnNmb3JtYXRpb25zIHRvIHRoZSBjdXJyZW50IHZpZXcgYW5kIGluIHR1cm4gYWZmZWN0IGl0cyBjaGlsZHJlbi4KICAgICAgICAgTk9URTogRm9yIHNpbXBsZSBvZmZzZXRzLCB1c2UgTG9jLiBUaGUgdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVkIGluCiAgICAgICAgIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0gICAgICAgICAgICAgY2FudmFzLT50cmFuc2xhdGUoZkxvYy5mWCwgZkxvYy5mWSk7CQkKKyAgICAgICAgICAgICBjYW52YXMtPnRyYW5zbGF0ZShmTG9jLmZYLCBmTG9jLmZZKTsKICAgICAgICAgICAgICBjYW52YXMtPmNvbmNhdChmTWF0cml4KTsKICAgICAqLwogICAgIGNvbnN0IFNrTWF0cml4JiBnZXRMb2NhbE1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIGZNYXRyaXg7IH0KQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgIC8qKiBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgcG9pbnQgZnJvbSBnbG9iYWwgY29vcmRpbmF0ZXMgaW50byB2aWV3LWxvY2FsIGNvb3JkaW5hdGVzCiAgICAgICogIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3M7IGZhbHNlIG9uIGZhaWx1cmUKICAgICAgKi8KLSAgICBib29sICAgICAgICBnbG9iYWxUb0xvY2FsKFNrUG9pbnQqIHB0KSBjb25zdCB7IAorICAgIGJvb2wgICAgICAgIGdsb2JhbFRvTG9jYWwoU2tQb2ludCogcHQpIGNvbnN0IHsKICAgICAgICAgaWYgKE5VTEwgIT0gcHQpIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nbG9iYWxUb0xvY2FsKHB0LT5mWCwgcHQtPmZZLCBwdCk7CiAgICAgICAgIH0KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIGJvb2wgICAgICAgIGdsb2JhbFRvTG9jYWwoU2tTY2FsYXIgZ2xvYmFsWCwgU2tTY2FsYXIgZ2xvYmFsWSwgU2tQb2ludCogbG9jYWwpIGNvbnN0OwogCiAgICAgLyoqIFxjbGFzcyBGMkJJdGVyCi0gICAgCisKICAgICAgICAgSXRlcmF0b3IgdGhhdCB3aWxsIHJldHVybiBlYWNoIG9mIHRoaXMgdmlldydzIGNoaWxkcmVuLCBpbgogICAgICAgICBmcm9udC10by1iYWNrIG9yZGVyICh0aGUgb3JkZXIgdXNlZCBmb3IgY2xpY2tpbmcpLiBUaGUgZmlyc3QKICAgICAgICAgY2FsbCB0byBuZXh0KCkgcmV0dXJucyB0aGUgZnJvbnQtbW9zdCBjaGlsZCB2aWV3LiBXaGVuCkBAIC0yMzIsNyArMjMyLDcgQEAKICAgICB9OwogCiAgICAgLyoqIFxjbGFzcyBCMkZJdGVyCi0gICAgCisKICAgICAgICAgSXRlcmF0b3IgdGhhdCB3aWxsIHJldHVybiBlYWNoIG9mIHRoaXMgdmlldydzIGNoaWxkcmVuLCBpbgogICAgICAgICBiYWNrLXRvLWZyb250IG9yZGVyICh0aGUgb3JkZXIgdGhleSBhcmUgZHJhd24pLiBUaGUgZmlyc3QKICAgICAgICAgY2FsbCB0byBuZXh0KCkgcmV0dXJucyB0aGUgYmFjay1tb3N0IGNoaWxkIHZpZXcuIFdoZW4KQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgIH07CiAKICAgICAvKiogXGNsYXNzIEFydGlzdAotICAgIAorCiAgICAgICAgIEluc3RhbGwgYSBzdWJjbGFzcyBvZiB0aGlzIGluIGEgdmlldyAoY2FsbGluZyBzZXRBcnRpc3QoKSksIGFuZCB0aGVuIHRoZQogICAgICAgICBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoYXQgdmlldydzIG9uRHJhdygpIHdpbGwgaW52b2tlIHRoaXMgb2JqZWN0CiAgICAgICAgIGF1dG9tYXRpY2FsbHkuCkBAIC0yNzUsNyArMjc1LDcgQEAKICAgICBBcnRpc3QqIHNldEFydGlzdChBcnRpc3QqIGFydGlzdCk7CiAKICAgICAvKiogXGNsYXNzIExheW91dAotICAgIAorCiAgICAgICAgIEluc3RhbGwgYSBzdWJjbGFzcyBvZiB0aGlzIGluIGEgdmlldyAoY2FsbGluZyBzZXRMYXlvdXQoKSksIGFuZCB0aGVuIHRoZQogICAgICAgICBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoYXQgdmlldydzIG9uTGF5b3V0Q2hpbGRyZW4oKSB3aWxsIGludm9rZQogICAgICAgICB0aGlzIG9iamVjdCBhdXRvbWF0aWNhbGx5LgpAQCAtMzgyLDcgKzM4Miw3IEBACiAKICAgICBmcmllbmQgY2xhc3MgQjJGSXRlcjsKICAgICBmcmllbmQgY2xhc3MgRjJCSXRlcjsKLSAgICAKKwogICAgIGZyaWVuZCBjbGFzcyBTa0xheWVyVmlldzsKIAogICAgIGJvb2wgICAgc2V0Rm9jdXNWaWV3KFNrVmlldyogZnZPck51bGwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWV3cy9Ta1ZpZXdJbmZsYXRlLmggYi9pbmNsdWRlL3ZpZXdzL1NrVmlld0luZmxhdGUuaAppbmRleCA3MjgyMDkxLi5iMmNkMWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZXdzL1NrVmlld0luZmxhdGUuaAorKysgYi9pbmNsdWRlL3ZpZXdzL1NrVmlld0luZmxhdGUuaApAQCAtMTcsNyArMTcsNyBAQAogY2xhc3MgU2tWaWV3OwogCiBjbGFzcyBTa1ZpZXdJbmZsYXRlIHsKLXB1YmxpYzogCitwdWJsaWM6CiAgICAgICAgICAgICBTa1ZpZXdJbmZsYXRlKCk7CiAgICAgdmlydHVhbCB+U2tWaWV3SW5mbGF0ZSgpOwogCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgogICAgICovCiAgICAgU2tWaWV3KiBmaW5kVmlld0J5SUQoY29uc3QgY2hhciBpZFtdKSBjb25zdDsKLSAgICAKKwogICAgIFNrREVCVUdDT0RFKHZvaWQgZHVtcCgpIGNvbnN0OykKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWV3cy9Ta1dpbmRvdy5oIGIvaW5jbHVkZS92aWV3cy9Ta1dpbmRvdy5oCmluZGV4IGM3MjE2M2MuLmE3MWJmNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlld3MvU2tXaW5kb3cuaAorKysgYi9pbmNsdWRlL3ZpZXdzL1NrV2luZG93LmgKQEAgLTU0LDcgKzU0LDcgQEAKIAogICAgIHZvaWQgICAgYWRkTWVudShTa09TTWVudSopOwogICAgIGNvbnN0IFNrVERBcnJheTxTa09TTWVudSo+KiBnZXRNZW51cygpIHsgcmV0dXJuICZmTWVudXM7IH0KLSAgICAKKwogICAgIGNvbnN0IGNoYXIqIGdldFRpdGxlKCkgY29uc3QgeyByZXR1cm4gZlRpdGxlLmNfc3RyKCk7IH0KICAgICB2b2lkICAgIHNldFRpdGxlKGNvbnN0IGNoYXIgdGl0bGVbXSk7CiAKQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIFNrVmlldyogZkZvY3VzVmlldzsKICAgICBib29sICAgIGZXYWl0aW5nT25JbnZhbDsKLSAgICAKKwogICAgIFNrU3RyaW5nICAgIGZUaXRsZTsKICAgICBTa01hdHJpeCAgICBmTWF0cml4OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZXdzL2FuaW1hdGVkL1NrSW1hZ2VWaWV3LmggYi9pbmNsdWRlL3ZpZXdzL2FuaW1hdGVkL1NrSW1hZ2VWaWV3LmgKaW5kZXggZTE3OTE0MS4uYTIxZGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta0ltYWdlVmlldy5oCisrKyBiL2luY2x1ZGUvdmlld3MvYW5pbWF0ZWQvU2tJbWFnZVZpZXcuaApAQCAtMjUsNyArMjUsNyBAQAogICAgIHZvaWQgICAgZ2V0VXJpKFNrU3RyaW5nKikgY29uc3Q7CiAgICAgdm9pZCAgICBzZXRVcmkoY29uc3QgY2hhciBbXSk7CiAgICAgdm9pZCAgICBzZXRVcmkoY29uc3QgU2tTdHJpbmcmKTsKLSAgICAKKwogCiAgICAgZW51bSBTY2FsZVR5cGUgewogICAgICAgICBrTWF0cml4X1NjYWxlVHlwZSwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICB9OwogICAgIFNjYWxlVHlwZSAgIGdldFNjYWxlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIChTY2FsZVR5cGUpZlNjYWxlVHlwZTsgfQogICAgIHZvaWQgICAgICAgIHNldFNjYWxlVHlwZShTY2FsZVR5cGUpOwotICAgIAorCiAgICAgYm9vbCAgICBnZXRJbWFnZU1hdHJpeChTa01hdHJpeCopIGNvbnN0OwogICAgIHZvaWQgICAgc2V0SW1hZ2VNYXRyaXgoY29uc3QgU2tNYXRyaXgqKTsKIApAQCAtNDUsNyArNDUsNyBAQAogICAgIHZpcnR1YWwgYm9vbCAgICBvbkV2ZW50KGNvbnN0IFNrRXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgICAgb25EcmF3KFNrQ2FudmFzKik7CiAgICAgdmlydHVhbCB2b2lkICAgIG9uSW5mbGF0ZShjb25zdCBTa0RPTSYsIGNvbnN0IFNrRE9NTm9kZSopOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrU3RyaW5nICAgIGZVcmk7CiAgICAgU2tNYXRyaXgqICAgZk1hdHJpeDsgICAgLy8gbnVsbCBvciBjb3B5IG9mIGNhbGxlcidzIG1hdHJpeCAsLCwsLApAQCAtNTYsNyArNTYsNyBAQAogICAgIHVpbnQ4X3QgICAgIGZTY2FsZVR5cGU7CiAgICAgU2tCb29sOCAgICAgZkRhdGFJc0FuaW07ICAgIC8vIGFzIG9wcG9zZWQgdG8gYml0bWFwCiAgICAgU2tCb29sOCAgICAgZlVyaUlzVmFsaWQ7Ci0gICAgCisKICAgICB2b2lkICAgIG9uVXJpQ2hhbmdlKCk7CiAgICAgYm9vbCAgICBnZXREYXRhQm91bmRzKFNrUmVjdCogYm91bmRzKTsKICAgICBib29sICAgIGZyZWVEYXRhKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZXdzL2FuaW1hdGVkL1NrUHJvZ3Jlc3NCYXJWaWV3LmggYi9pbmNsdWRlL3ZpZXdzL2FuaW1hdGVkL1NrUHJvZ3Jlc3NCYXJWaWV3LmgKaW5kZXggMGUzOWQxZS4uN2U2NzBhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta1Byb2dyZXNzQmFyVmlldy5oCisrKyBiL2luY2x1ZGUvdmlld3MvYW5pbWF0ZWQvU2tQcm9ncmVzc0JhclZpZXcuaApAQCAtMTgsMjkgKzE4LDI5IEBACiAgICAgcHVibGljOgogICAgICAgICBTa1Byb2dyZXNzQmFyVmlldygpOwogICAgICAgICAvL1NrUHJvZ3Jlc3NCYXJWaWV3KGludCBtYXgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIC8vaW5mbGF0ZTogInNrLXByb2dyZXNzIgotICAgIAorCiAgICAgICAgIHZvaWQgcmVzZXQoKTsgICAvL3Jlc2V0IHByb2dyZXNzIHRvIHplcm8KICAgICAgICAgdm9pZCBzZXRQcm9ncmVzcyhpbnQgcHJvZ3Jlc3MpOwogICAgICAgICB2b2lkIGNoYW5nZVByb2dyZXNzKGludCBkaWZmKTsKICAgICAgICAgdm9pZCBzZXRNYXgoaW50IG1heCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBnZXRQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGZQcm9ncmVzczsgfQogICAgICAgICBpbnQgZ2V0TWF4KCkgY29uc3QgeyByZXR1cm4gZk1heDsgfQotICAgIAorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICAvL292ZXJyaWRlcwogICAgICAgICB2aXJ0dWFsIHZvaWQgb25JbmZsYXRlKGNvbnN0IFNrRE9NJiBkb20sIGNvbnN0IFNrRE9NOjpOb2RlKiBub2RlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIG9uU2l6ZUNoYW5nZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgb25EcmF3KFNrQ2FudmFzKiBjYW52YXMpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgb25FdmVudChjb25zdCBTa0V2ZW50JiBldnQpOwotICAgIAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgU2tBbmltYXRvciAgZkFuaW07CiAgICAgICAgIGludCAgICAgICAgIGZQcm9ncmVzczsKICAgICAgICAgaW50ICAgICAgICAgZk1heDsKLSAgICAgICAgCisKICAgICAgICAgdHlwZWRlZiBTa1dpZGdldFZpZXcgSU5IRVJJVEVEOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta1Njcm9sbEJhclZpZXcuaCBiL2luY2x1ZGUvdmlld3MvYW5pbWF0ZWQvU2tTY3JvbGxCYXJWaWV3LmgKaW5kZXggMTEwZDBlMS4uMTI3MGUxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta1Njcm9sbEJhclZpZXcuaAorKysgYi9pbmNsdWRlL3ZpZXdzL2FuaW1hdGVkL1NrU2Nyb2xsQmFyVmlldy5oCkBAIC0yMiwxMCArMjIsMTAgQEAKICAgICB1bnNpZ25lZCBnZXRTaG93bigpIGNvbnN0IHsgcmV0dXJuIGZTaG93bkxlbmd0aDsgfQogICAgIHVuc2lnbmVkIGdldFRvdGFsKCkgY29uc3QgeyByZXR1cm4gZlRvdGFsTGVuZ3RoOyB9CiAKLSAgICB2b2lkIHNldFN0YXJ0KHVuc2lnbmVkIHN0YXJ0KTsgIAorICAgIHZvaWQgc2V0U3RhcnQodW5zaWduZWQgc3RhcnQpOwogICAgIHZvaWQgc2V0U2hvd24odW5zaWduZWQgc2hvd24pOwogICAgIHZvaWQgc2V0VG90YWwodW5zaWduZWQgdG90YWwpOwotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgLy9vdmVycmlkZXMKICAgICB2aXJ0dWFsIHZvaWQgb25JbmZsYXRlKGNvbnN0IFNrRE9NJiBkb20sIGNvbnN0IFNrRE9NOjpOb2RlKiBub2RlKTsKQEAgLTM2LDkgKzM2LDkgQEAKIHByaXZhdGU6CiAgICAgU2tBbmltYXRvciAgZkFuaW07CiAgICAgdW5zaWduZWQgICAgZlRvdGFsTGVuZ3RoLCBmU3RhcnRQb2ludCwgZlNob3duTGVuZ3RoOwotICAgIAorCiAgICAgdm9pZCBhZGp1c3QoKTsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tXaWRnZXRWaWV3IElOSEVSSVRFRDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlld3MvYW5pbWF0ZWQvU2tXaWRnZXRWaWV3cy5oIGIvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta1dpZGdldFZpZXdzLmgKaW5kZXggOTNhZGVlZi4uNDAzNDY2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta1dpZGdldFZpZXdzLmgKKysrIGIvaW5jbHVkZS92aWV3cy9hbmltYXRlZC9Ta1dpZGdldFZpZXdzLmgKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBrUHJvZ3Jlc3NfV2lkZ2V0RW51bSwgICAgICAgLy8hPCA8c2stcHJvZ3Jlc3M+CiAgICAga1Njcm9sbF9XaWRnZXRFbnVtLCAgICAgICAgIC8vITwgPHNrLXNjcm9sbD4KICAgICBrVGV4dF9XaWRnZXRFbnVtLCAgICAgICAgICAgLy8hPCA8c2stdGV4dD4KLSAgICAKKwogICAgIGtXaWRnZXRFbnVtQ291bnQKIH07CiAKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBrUHJvZ3Jlc3NfU2tpbkVudW0sCiAgICAga1Njcm9sbF9Ta2luRW51bSwKICAgICBrU3RhdGljVGV4dF9Ta2luRW51bSwKLSAgICAKKwogICAgIGtTa2luRW51bUNvdW50CiB9OwogCkBAIC03Myw3ICs3Myw3IEBACiAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2lkZ2V0IGNhbiBwb3N0IGl0cyBldmVudCB0byBpdHMgbGlzdGVuZXJzLgogICAgICovCiAgICAgYm9vbCAgICBwb3N0V2lkZ2V0RXZlbnQoKTsKLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIHRoZSBzaW5rSUQgb2YgdGhlIHdpZGdldHZpZXcgdGhhdCBwb3N0ZWQgdGhlIGV2ZW50LCBvciAwCiAgICAgKi8KICAgICBzdGF0aWMgU2tFdmVudFNpbmtJRCBHZXRXaWRnZXRFdmVudFNpbmtJRChjb25zdCBTa0V2ZW50Jik7CkBAIC05MywxMSArOTMsMTEgQEAKIAogICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgdm9pZCBvbkluZmxhdGUoY29uc3QgU2tET00mIGRvbSwgY29uc3QgU2tET006Ok5vZGUqKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa1N0cmluZyAgICBmTGFiZWw7CiAgICAgU2tFdmVudCAgICAgZkV2ZW50OwotICAgIAorCiAgICAgdHlwZWRlZiBTa1ZpZXcgSU5IRVJJVEVEOwogfTsKIApAQCAtMTA2LDcgKzEwNiw3IEBACiBjbGFzcyBTa0J1dHRvblZpZXcgOiBwdWJsaWMgU2tXaWRnZXRWaWV3IHsKIHB1YmxpYzoKICAgICAvLyBpbmZsYXRlOiAic2stYnV0dG9uIgotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgLy8gb3ZlcnJpZGVzCiAgICAgdmlydHVhbCBib29sIG9uRXZlbnQoY29uc3QgU2tFdmVudCYpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgU2tDaGVja0J1dHRvblZpZXcoKTsKIAogICAgIC8vIGluZmxhdGU6ICJzay1jaGVja2J1dHRvbiIKLSAgICAKKwogICAgIGVudW0gQ2hlY2tTdGF0ZSB7CiAgICAgICAgIGtPZmZfQ2hlY2tTdGF0ZSwgICAgICAgIC8vITwgaW5mbGF0ZTogY2hlY2stc3RhdGU9Im9mZiIKICAgICAgICAga09uX0NoZWNrU3RhdGUsICAgICAgICAgLy8hPCBpbmZsYXRlOiBjaGVjay1zdGF0ZT0ib24iCkBAIC0xNDQsMTAgKzE0NCwxMCBAQAogICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgdm9pZCBvbkluZmxhdGUoY29uc3QgU2tET00mIGRvbSwgY29uc3QgU2tET006Ok5vZGUqKTsKICAgICB2aXJ0dWFsIGJvb2wgb25QcmVwYXJlV2lkZ2V0RXZlbnQoU2tFdmVudCogZXZ0KTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB1aW50OF90ICBmQ2hlY2tTdGF0ZTsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tXaWRnZXRWaWV3IElOSEVSSVRFRDsKIH07CiAKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiAgICAgYm9vbCAgICBoYXNTY3JvbGxCYXIoKSBjb25zdCB7IHJldHVybiBmU2Nyb2xsQmFyICE9IE5VTEw7IH0KICAgICB2b2lkICAgIHNldEhhc1Njcm9sbEJhcihib29sKTsKLSAgICAKKwogICAgIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiB2aXNpYmxlIHJvd3MKICAgICAqLwogICAgIGludCAgICAgZ2V0VmlzaWJsZVJvd0NvdW50KCkgY29uc3QgeyByZXR1cm4gZlZpc2libGVSb3dDb3VudDsgfQpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGdldFJlY29yZChpbnQgcm93SW5kZXgsIGludCBmaWVsZEluZGV4LCBTa1N0cmluZyogZGF0YSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZVdpZGdldEV2ZW50KFNrRXZlbnQqLCBpbnQgcm93SW5kZXgpOwotICAgIAorCiAgICAgc3RhdGljIFNrTGlzdFNvdXJjZSogRmFjdG9yeShjb25zdCBjaGFyIG5hbWVbXSk7CiBwcml2YXRlOgogICAgIHR5cGVkZWYgU2tSZWZDbnQgSU5IRVJJVEVEOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94bWwvU2tCTUxfV1hNTFBhcnNlci5oIGIvaW5jbHVkZS94bWwvU2tCTUxfV1hNTFBhcnNlci5oCmluZGV4IGUxNmI5NWMuLjVkMjIwY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveG1sL1NrQk1MX1dYTUxQYXJzZXIuaAorKysgYi9pbmNsdWRlL3htbC9Ta0JNTF9XWE1MUGFyc2VyLmgKQEAgLTIxLDEwICsyMSwxMCBAQAogICAgIEJNTF9XWE1MUGFyc2VyKFNrV1N0cmVhbSYgd3JpdGVyKTsKICAgICB2aXJ0dWFsIH5CTUxfV1hNTFBhcnNlcigpOwogICAgIHN0YXRpYyB2b2lkIFdyaXRlKFNrU3RyZWFtJiBzLCBjb25zdCBjaGFyIGZpbGVuYW1lW10pOwotICAKKwogICAvKiogQGNvbmQgVU5JVF9URVNUICovCiAgIFNrREVCVUdDT0RFKHN0YXRpYyB2b2lkIFVuaXRUZXN0KCk7KQotICAvKiogQGVuZGNvbmQgKi8gIAorICAvKiogQGVuZGNvbmQgKi8KIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG9uQWRkQXR0cmlidXRlKGNvbnN0IGNoYXIgbmFtZVtdLCBjb25zdCBjaGFyIHZhbHVlW10pOwogICAgIHZpcnR1YWwgYm9vbCBvbkVuZEVsZW1lbnQoY29uc3QgY2hhciBuYW1lW10pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94bWwvU2tET00uaCBiL2luY2x1ZGUveG1sL1NrRE9NLmgKaW5kZXggNjAxNDVjOC4uZmQxNzVmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS94bWwvU2tET00uaAorKysgYi9pbmNsdWRlL3htbC9Ta0RPTS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgY29uc3QgQXR0ciogZ2V0TmV4dEF0dHIoY29uc3QgTm9kZSosIGNvbnN0IEF0dHIqKSBjb25zdDsKICAgICBjb25zdCBjaGFyKiBnZXRBdHRyTmFtZShjb25zdCBOb2RlKiwgY29uc3QgQXR0ciopIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIGdldEF0dHJWYWx1ZShjb25zdCBOb2RlKiwgY29uc3QgQXR0ciopIGNvbnN0OwotICAgIAorCiAgICAgLy8gaGVscGVycyBmb3Igd2Fsa2luZyBjaGlsZHJlbgogICAgIGludCBjb3VudENoaWxkcmVuKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIgZWxlbVtdID0gTlVMTCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUveG1sL1NrWE1MUGFyc2VyLmggYi9pbmNsdWRlL3htbC9Ta1hNTFBhcnNlci5oCmluZGV4IGJkOGMyZjEuLjFhOTBiZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveG1sL1NrWE1MUGFyc2VyLmgKKysrIGIvaW5jbHVkZS94bWwvU2tYTUxQYXJzZXIuaApAQCAtNzYsNyArNzYsNyBAQAogICAgIHZpcnR1YWwgYm9vbCBzdGFydEVsZW1lbnQoY29uc3QgY2hhciBlbGVtW10pOwogICAgIHZpcnR1YWwgYm9vbCBhZGRBdHRyaWJ1dGUoY29uc3QgY2hhciBuYW1lW10sIGNvbnN0IGNoYXIgdmFsdWVbXSk7CiAgICAgdmlydHVhbCBib29sIGVuZEVsZW1lbnQoY29uc3QgY2hhciBlbGVtW10pOwotICAgIHZpcnR1YWwgYm9vbCB0ZXh0KGNvbnN0IGNoYXIgdGV4dFtdLCBpbnQgbGVuKTsgCisgICAgdmlydHVhbCBib29sIHRleHQoY29uc3QgY2hhciB0ZXh0W10sIGludCBsZW4pOwogICAgIHZvaWQqIGZQYXJzZXI7CiBwcm90ZWN0ZWQ6CiAgICAgU2tYTUxQYXJzZXJFcnJvciogZkVycm9yOwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAKICAgICAgICAgY29uc3QgY2hhciogZk5hbWU7CiAgICAgICAgIGNvbnN0IGNoYXIqIGZWYWx1ZTsKICAgICB9OwotICAgIAorCiAgICAgaW50ICAgICAgICAgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBmRGVwdGg7IH0KICAgICBjb25zdCBjaGFyKiBnZXROYW1lKCk7CiAgICAgaW50ICAgICAgICAgZ2V0QXR0cmlidXRlQ291bnQoKTsKICAgICB2b2lkICAgICAgICBnZXRBdHRyaWJ1dGVJbmZvKGludCwgQXR0ckluZm8qKTsKICAgICBjb25zdCBjaGFyKiBnZXRUZXh0KCk7CiAgICAgYm9vbCAgICAgICAgaXNXaGl0ZXNwYWNlKCk7Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgb25FbnRpdHlSZXBsYWNlbWVudChjb25zdCBjaGFyIG5hbWVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1N0cmluZyogcmVwbGFjZW1lbnQpOwpAQCAtMTQyLDExICsxNDIsMTEgQEAKICAgICBib29sICAgICAgICBvbkluaXQoKTsgICAvLyByZXR1cm4gZmFsc2Ugb24gZmFpbHVyZQogICAgIEV2ZW50VHlwZSAgIG9uTmV4dFRva2VuKCk7CiAgICAgdm9pZCAgICAgICAgb25FeGl0KCk7Ci0gICAgCisKICAgICBTa1N0cmVhbSogICBmU3RyZWFtOwogICAgIEN1cnIgICAgICAgIGZDdXJyOwogICAgIGludCAgICAgICAgIGZEZXB0aDsKLSAgICAKKwogICAgIHN0cnVjdCBJbXBsOwogICAgIEltcGwqICAgZkltcGw7CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvQVJHQjMyX0NsYW1wX0JpbGluZWFyX0JpdG1hcFNoYWRlci5oIGIvc3JjL2NvcmUvQVJHQjMyX0NsYW1wX0JpbGluZWFyX0JpdG1hcFNoYWRlci5oCmluZGV4IGU3NmFiMDguLjcyMGI0NzkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL0FSR0IzMl9DbGFtcF9CaWxpbmVhcl9CaXRtYXBTaGFkZXIuaAorKysgYi9zcmMvY29yZS9BUkdCMzJfQ2xhbXBfQmlsaW5lYXJfQml0bWFwU2hhZGVyLmgKQEAgLTQ4LDE2ICs0OCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY1JCLCBjb25zdCBTa0ZpbHRlclB0clByb2MqIHByb2NfdGFibGUpCiB7CiAgICAgaW50IGl4ID0gZnggPj4gMTY7Ci0gICAgCisKICAgICBjb25zdCBTa1BNQ29sb3IgKnAwMCwgKnAwMSwgKnAxMCwgKnAxMTsKLSAgICAKKwogICAgIHAwMCA9IHAwMSA9IHNyY1BpeGVscyArIFNrQ2xhbXBNYXgoaXgsIHNyY01heFgpOwogICAgIGlmICgodW5zaWduZWQpaXggPCBzcmNNYXhYKQogICAgICAgICBwMDEgKz0gMTsKIAogICAgIHAxMCA9IChjb25zdCBTa1BNQ29sb3IqKSgoY29uc3QgY2hhciopcDAwICsgc3JjUkIpOwogICAgIHAxMSA9IChjb25zdCBTa1BNQ29sb3IqKSgoY29uc3QgY2hhciopcDAxICsgc3JjUkIpOwotICAgIAorCiAgICAgU2tGaWx0ZXJQdHJQcm9jIHByb2MgPSBTa0dldEJpbGluZWFyRmlsdGVyUHRyWFByb2MocHJvY190YWJsZSwgZngpOwogICAgIHJldHVybiBwcm9jKHAwMCwgcDAxLCBwMTAsIHAxMSk7CiB9CkBAIC02NSw3ICs2NSw3IEBACiB2b2lkIEFSR0IzMl9DbGFtcF9CaWxpbmVhcl9CaXRtYXBTaGFkZXI6OnNoYWRlU3BhbihpbnQgeCwgaW50IHksIFNrUE1Db2xvciBkc3RDW10sIGludCBjb3VudCkKIHsKICAgICBTa0FTU0VSVChjb3VudCA+IDApOwotICAgIAorCiAgICAgdW5zaWduZWQgc3JjU2NhbGUgPSBTa0FscGhhMjU1VG8yNTYodGhpcy0+Z2V0UGFpbnRBbHBoYSgpKTsKIAogICAgIGNvbnN0IFNrTWF0cml4JiBpbnYgPSB0aGlzLT5nZXRUb3RhbEludmVyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQUFDbGlwLmNwcCBiL3NyYy9jb3JlL1NrQUFDbGlwLmNwcAppbmRleCBlMGZjZjdhLi5mY2U2NjgzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0FBQ2xpcC5jcHAKKysrIGIvc3JjL2NvcmUvU2tBQUNsaXAuY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgaW50MzJfdCBmUmVmQ250OwogICAgIGludDMyX3QgZlJvd0NvdW50OwogICAgIGludDMyX3QgZkRhdGFTaXplOwotICAgIAorCiAgICAgWU9mZnNldCogeW9mZnNldHMoKSB7CiAgICAgICAgIHJldHVybiAoWU9mZnNldCopKChjaGFyKil0aGlzICsgc2l6ZW9mKFJ1bkhlYWQpKTsKICAgICB9CkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgZlN0b3BZT2ZmID0gTlVMTDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGNvbnN0IFJ1bkhlYWQqIGhlYWQgPSBjbGlwLmZSdW5IZWFkOwogICAgIGZDdXJyWU9mZiA9IGhlYWQtPnlvZmZzZXRzKCk7CiAgICAgZlN0b3BZT2ZmID0gZkN1cnJZT2ZmICsgaGVhZC0+ZlJvd0NvdW50OwpAQCAtMzM0LDcgKzMzNCw3IEBACiAgICAgICAgICAgICBTa0FTU0VSVChyaXRlWiA+PSAwKTsKICAgICAgICAgfSB3aGlsZSAocml0ZVogPiAwKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdHJpbTsKIH0KIApAQCAtMzU3LDcgKzM1Nyw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZ09uY2UgPSB0cnVlOwotICAgIAorCiAgICAgdWludDhfdCBkYXRhMFtdID0geyAgMCwgMCwgMCwgICAxMCwgICAgMTAsIDB4RkYgfTsKICAgICB1aW50OF90IGRhdGExW10gPSB7ICAyLCAwLCAwLCAgIDEwLCAgICA1LCAwLCAyLCAwLCAzLCAweEZGIH07CiAgICAgdWludDhfdCBkYXRhMltdID0geyAgNSwgMCwgMiwgICAxMCwgICAgNSwgMCwgMiwgMCwgMywgMHhGRiB9OwpAQCAtMzY5LDEzICszNjksMTMgQEAKICAgICB1aW50OF90IGRhdGE4W10gPSB7ICAyLCAyLCAyLCAgIDEwLCAgICAyLCAwLCAyLCAweEZGLCAyLCAwLCAyLCAweEZGLCAyLCAwIH07CiAgICAgdWludDhfdCBkYXRhOVtdID0geyAgNSwgMiwgNCwgICAxMCwgICAgMiwgMCwgMiwgMCwgMiwgMCwgMiwgMHhGRiwgMiwgMCB9OwogICAgIHVpbnQ4X3QgZGF0YTEwW10gPXsgIDc0LCAwLCA0LCAxNTAsICAgIDksIDAsIDY1LCAwLCA3NiwgMHhGRiB9OwotICAgIAorCiAgICAgdWludDhfdCogYXJyYXlbXSA9IHsKICAgICAgICAgZGF0YTAsIGRhdGExLCBkYXRhMiwgZGF0YTMsIGRhdGE0LAogICAgICAgICBkYXRhNSwgZGF0YTYsIGRhdGE3LCBkYXRhOCwgZGF0YTksCiAgICAgICAgIGRhdGExMAogICAgIH07Ci0gICAgCisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGFycmF5KTsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QqIGRhdGEgPSBhcnJheVtpXTsKICAgICAgICAgY29uc3QgaW50IHRyaW1MID0gKmRhdGErKzsKQEAgLTM5Nyw3ICszOTcsNyBAQAogICAgIGlmICh0aGlzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIEFVVE9fQUFDTElQX1ZBTElEQVRFKCp0aGlzKTsKIAogICAgIGNvbnN0IGludCB3aWR0aCA9IGZCb3VuZHMud2lkdGgoKTsKQEAgLTUxNCw3ICs1MTQsNyBAQAogICAgICAgICBTa0FTU0VSVCghZkJvdW5kcy5pc0VtcHR5KCkpOwogICAgICAgICBoZWFkLT5mUm93Q291bnQgLT0gc2tpcDsKICAgICAgICAgU2tBU1NFUlQoaGVhZC0+ZlJvd0NvdW50ID4gMCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMtPnZhbGlkYXRlKCk7CiAgICAgICAgIC8vIG5lZWQgdG8gcmVzZXQgdGhpcyBhZnRlciB0aGUgbWVtbW92ZQogICAgICAgICBiYXNlID0gaGVhZC0+ZGF0YSgpOwpAQCAtNjIxLDEwICs2MjEsMTAgQEAKICAgICBpZiAoYS5mQm91bmRzICE9IGIuZkJvdW5kcykgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgU2tBQUNsaXA6OlJ1bkhlYWQqIGFoID0gYS5mUnVuSGVhZDsKICAgICBjb25zdCBTa0FBQ2xpcDo6UnVuSGVhZCogYmggPSBiLmZSdW5IZWFkOwotICAgIAorCiAgICAgLy8gdGhpcyBjYXRjaGVzIGVtcHRpZXMgYW5kIHJlY3RzIGJlaW5nIGVxdWFsCiAgICAgaWYgKGFoID09IGJoKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzI2LDcgKzcyNiw3IEBACiAgICAgfQogICAgIHRoaXMtPnN3YXAoY2xpcCk7CiAgICAgcmV0dXJuICF0aGlzLT5pc0VtcHR5KCk7Ci0jZWxzZSAgICAKKyNlbHNlCiAgICAgY29uc3QgU2tJUmVjdCYgYm91bmRzID0gcmduLmdldEJvdW5kcygpOwogICAgIGNvbnN0IGludCBvZmZzZXRYID0gYm91bmRzLmZMZWZ0OwogICAgIGNvbnN0IGludCBvZmZzZXRZID0gYm91bmRzLmZUb3A7CkBAIC05MDksMTAgKzkwOSwxMCBAQAogICAgICAgICBTa0FTU0VSVChjb3VudCA+IDApOwogICAgICAgICBTa0FTU0VSVChmQm91bmRzLmNvbnRhaW5zKHgsIHkpKTsKICAgICAgICAgU2tBU1NFUlQoZkJvdW5kcy5jb250YWlucyh4ICsgY291bnQgLSAxLCB5KSk7Ci0gICAgICAgIAorCiAgICAgICAgIHggLT0gZkJvdW5kcy5sZWZ0KCk7CiAgICAgICAgIHkgLT0gZkJvdW5kcy50b3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgUm93KiByb3cgPSBmQ3VyclJvdzsKICAgICAgICAgaWYgKHkgIT0gZlByZXZZKSB7CiAgICAgICAgICAgICBTa0FTU0VSVCh5ID4gZlByZXZZKTsKQEAgLTk1MSw3ICs5NTEsNyBAQAogICAgICAgICBTa0FTU0VSVCh5ID09IGZDdXJyUm93LT5mWSk7CiAgICAgICAgIGZDdXJyUm93LT5mWSA9IHkgKyBoZWlnaHQgLSAxOwogICAgIH0KLSAKKwogICAgIHZvaWQgYWRkUmVjdFJ1bihpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgewogICAgICAgICBTa0FTU0VSVChmQm91bmRzLmNvbnRhaW5zKHggKyB3aWR0aCAtIDEsIHkgKyBoZWlnaHQgLSAxKSk7CiAgICAgICAgIHRoaXMtPmFkZFJ1bih4LCB5LCAweEZGLCB3aWR0aCk7CkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogICAgICAgICBjb25zdCBSb3cqIHJvdyA9IGZSb3dzLmJlZ2luKCk7CiAgICAgICAgIGNvbnN0IFJvdyogc3RvcCA9IGZSb3dzLmVuZCgpOwogCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDA7ICAgIAorICAgICAgICBzaXplX3QgZGF0YVNpemUgPSAwOwogICAgICAgICB3aGlsZSAocm93IDwgc3RvcCkgewogICAgICAgICAgICAgZGF0YVNpemUgKz0gcm93LT5mRGF0YS0+Y291bnQoKTsKICAgICAgICAgICAgIHJvdyArPSAxOwpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKICAgICAgICAgICAgIHlvZmZzZXQtPmZZID0gcm93LT5mWSAtIGFkanVzdFk7CiAgICAgICAgICAgICB5b2Zmc2V0LT5mT2Zmc2V0ID0gZGF0YSAtIGJhc2VEYXRhOwogICAgICAgICAgICAgeW9mZnNldCArPSAxOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNpemVfdCBuID0gcm93LT5mRGF0YS0+Y291bnQoKTsKICAgICAgICAgICAgIG1lbWNweShkYXRhLCByb3ctPmZEYXRhLT5iZWdpbigpLCBuKTsKICNpZmRlZiBTS19ERUJVRwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAKICAgICAgICAgICAgIFNrQVNTRVJUKGJ5dGVzTmVlZGVkID09IG4pOwogI2VuZGlmCiAgICAgICAgICAgICBkYXRhICs9IG47Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcm93ICs9IDE7CiAgICAgICAgIH0KIApAQCAtMTE2Niw3ICsxMTY2LDcgQEAKICAgICAvKgogICAgICAgICBJZiB3ZSBzZWUgYSBnYXAgb2YgMSBvciBtb3JlIGVtcHR5IHNjYW5saW5lcyB3aGlsZSBidWlsZGluZyBpbiBZLW9yZGVyLAogICAgICAgICB3ZSBpbmplY3QgYW4gZXhwbGljaXQgZW1wdHkgc2NhbmxpbmUgKGFscGhhPT0wKQotICAgICAKKwogICAgICAgICBTZWUgQUFDbGlwVGVzdC5jcHAgOiB0ZXN0X3BhdGhfd2l0aF9ob2xlKCkKICAgICAgKi8KICAgICB2b2lkIGNoZWNrRm9yWUdhcChpbnQgeSkgewpAQCAtMTI2NSw3ICsxMjY1LDcgQEAKICAgICAgICAgICAgICAgICBsb2NhbENvdW50IC09IHJpZ2h0IC0gZlJpZ2h0OwogICAgICAgICAgICAgICAgIFNrQVNTRVJUKGxvY2FsQ291bnQgPj0gMCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQpIHsKICAgICAgICAgICAgICAgICBmQnVpbGRlci0+YWRkUnVuKGxvY2FsWCwgeSwgKmFscGhhLCBsb2NhbENvdW50KTsKICAgICAgICAgICAgIH0KQEAgLTEzMTUsNyArMTMxNSw3IEBACiAgICAgICAgIHRtcENsaXAuc2V0UmVjdChpYm91bmRzKTsKICAgICAgICAgY2xpcCA9ICZ0bXBDbGlwOwogICAgIH0KLSAgICAKKwogICAgIGlmIChwYXRoLmlzSW52ZXJzZUZpbGxUeXBlKCkpIHsKICAgICAgICAgaWJvdW5kcyA9IGNsaXAtPmdldEJvdW5kcygpOwogICAgIH0gZWxzZSB7CkBAIC0xNDc4LDcgKzE0NzgsNyBAQAogICAgICAgICBVOENQVSBhbHBoYUEgPSAwOwogICAgICAgICBVOENQVSBhbHBoYUIgPSAwOwogICAgICAgICBpbnQgbGVmdCwgcml0ZTsKLSAKKwogICAgICAgICBpZiAobGVmdEEgPCBsZWZ0QikgewogICAgICAgICAgICAgbGVmdCA9IGxlZnRBOwogICAgICAgICAgICAgYWxwaGFBID0gaXRlckEuYWxwaGEoKTsKQEAgLTE1NjEsNyArMTU2MSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGJvdCA9IHRvcEEgPSB0b3BCOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIGlmICh0b3BCIDwgdG9wQSkgewogICAgICAgICAgICAgdG9wID0gdG9wQjsKICAgICAgICAgICAgIHJvd0IgPSBpdGVyQi5kYXRhKCk7CkBAIC0xNjAzLDE0ICsxNjAzLDE0IEBACiBib29sIFNrQUFDbGlwOjpvcChjb25zdCBTa0FBQ2xpcCYgY2xpcEFPcmlnLCBjb25zdCBTa0FBQ2xpcCYgY2xpcEJPcmlnLAogICAgICAgICAgICAgICAgICAgU2tSZWdpb246Ok9wIG9wKSB7CiAgICAgQVVUT19BQUNMSVBfVkFMSURBVEUoKnRoaXMpOwotICAgIAorCiAgICAgaWYgKFNrUmVnaW9uOjprUmVwbGFjZV9PcCA9PSBvcCkgewogICAgICAgICByZXR1cm4gdGhpcy0+c2V0KGNsaXBCT3JpZyk7CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgU2tBQUNsaXAqIGNsaXBBID0gJmNsaXBBT3JpZzsKICAgICBjb25zdCBTa0FBQ2xpcCogY2xpcEIgPSAmY2xpcEJPcmlnOwotICAgIAorCiAgICAgaWYgKFNrUmVnaW9uOjprUmV2ZXJzZURpZmZlcmVuY2VfT3AgPT0gb3ApIHsKICAgICAgICAgU2tUU3dhcChjbGlwQSwgY2xpcEIpOwogICAgICAgICBvcCA9IFNrUmVnaW9uOjprRGlmZmVyZW5jZV9PcDsKQEAgLTE2MzAsMTQgKzE2MzAsMTQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvdW5kcyA9IGNsaXBBLT5mQm91bmRzOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wOgogICAgICAgICAgICAgaWYgKChhX2VtcHR5IHwgYl9lbXB0eSkgfHwgIWJvdW5kcy5pbnRlcnNlY3QoY2xpcEEtPmZCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwQi0+ZkJvdW5kcykpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+c2V0RW1wdHkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKICAgICAgICAgY2FzZSBTa1JlZ2lvbjo6a1VuaW9uX09wOgogICAgICAgICBjYXNlIFNrUmVnaW9uOjprWE9SX09wOgogICAgICAgICAgICAgaWYgKGFfZW1wdHkpIHsKQEAgLTE3MDksNyArMTcwOSw3IEBACiBib29sIFNrQUFDbGlwOjpvcChjb25zdCBTa1JlY3QmIHJPcmlnLCBTa1JlZ2lvbjo6T3Agb3AsIGJvb2wgZG9BQSkgewogICAgIFNrUmVjdCAgICAgICAgclN0b3JhZ2UsIGJvdW5kc1N0b3JhZ2U7CiAgICAgY29uc3QgU2tSZWN0KiByID0gJnJPcmlnOwotICAgIAorCiAgICAgYm91bmRzU3RvcmFnZS5zZXQoZkJvdW5kcyk7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wOgpAQCAtMTczMSw3ICsxNzMxLDcgQEAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIFNrQUFDbGlwIGNsaXA7CiAgICAgY2xpcC5zZXRSZWN0KCpyLCBkb0FBKTsKICAgICByZXR1cm4gdGhpcy0+b3AoKnRoaXMsIGNsaXAsIG9wKTsKQEAgLTE3NDcsMTEgKzE3NDcsMTEgQEAKICAgICBpZiAoTlVMTCA9PSBkc3QpIHsKICAgICAgICAgcmV0dXJuICF0aGlzLT5pc0VtcHR5KCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHRoaXMtPmlzRW1wdHkoKSkgewogICAgICAgICByZXR1cm4gZHN0LT5zZXRFbXB0eSgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICh0aGlzICE9IGRzdCkgewogICAgICAgICBza19hdG9taWNfaW5jKCZmUnVuSGVhZC0+ZlJlZkNudCk7CiAgICAgICAgIGRzdC0+ZnJlZVJ1bnMoKTsKQEAgLTE3ODQsMTYgKzE3ODQsMTYgQEAKICAgICAgICAgbWFzay0+ZlJvd0J5dGVzID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIG1hc2stPmZCb3VuZHMgPSBmQm91bmRzOwogICAgIG1hc2stPmZSb3dCeXRlcyA9IGZCb3VuZHMud2lkdGgoKTsKICAgICBzaXplX3Qgc2l6ZSA9IG1hc2stPmNvbXB1dGVJbWFnZVNpemUoKTsKICAgICBtYXNrLT5mSW1hZ2UgPSBTa01hc2s6OkFsbG9jSW1hZ2Uoc2l6ZSk7Ci0gICAgCisKICAgICBJdGVyIGl0ZXIoKnRoaXMpOwogICAgIHVpbnQ4X3QqIGRzdCA9IG1hc2stPmZJbWFnZTsKICAgICBjb25zdCBpbnQgd2lkdGggPSBmQm91bmRzLndpZHRoKCk7Ci0gICAgCisKICAgICBpbnQgeSA9IGZCb3VuZHMuZlRvcDsKICAgICB3aGlsZSAoIWl0ZXIuZG9uZSgpKSB7CiAgICAgICAgIGRvIHsKQEAgLTE4MjIsNyArMTgyMiw3IEBACiAKICAgICAgICAgYWFbMF0gPSBkYXRhWzFdOwogICAgICAgICBhYSArPSBuOwotICAgICAgICAKKwogICAgICAgICBkYXRhICs9IDI7CiAgICAgICAgIHdpZHRoIC09IG47CiAgICAgICAgIGlmICgwID09IHdpZHRoKSB7CkBAIC0xOTEzLDcgKzE5MTMsNyBAQAogICAgICAgICAgICAgcm93ICs9IDI7CiAgICAgICAgICAgICByb3dOID0gcm93WzBdOyAgLy8gcmVsb2FkCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU2tERUJVR0NPREUoYWNjdW11bGF0ZWQgKz0gbWluTjspCiAgICAgICAgIFNrQVNTRVJUKGFjY3VtdWxhdGVkIDw9IHdpZHRoKTsKICAgICB9CkBAIC0yMDEyLDcgKzIwMTIsNyBAQAogICAgIGZvciAoOzspIHsKICAgICAgICAgU2tBU1NFUlQocm93TiA+IDApOwogICAgICAgICBTa0FTU0VSVChzcmNOID4gMCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBuID0gU2tNaW4zMihyb3dOLCBzcmNOKTsKICAgICAgICAgdW5zaWduZWQgcm93QSA9IHJvd1sxXTsKICAgICAgICAgaWYgKDB4RkYgPT0gcm93QSkgewpAQCAtMjAyNCwxNCArMjAyNCwxNCBAQAogICAgICAgICAgICAgICAgIGRzdFtpXSA9IG1lcmdlT25lKHNyY1tpXSwgcm93QSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKDAgPT0gKHNyY04gLT0gbikpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHNyYyArPSBuOwogICAgICAgICBkc3QgKz0gbjsKLSAgICAgICAgCisKICAgICAgICAgU2tBU1NFUlQocm93TiA9PSBuKTsKICAgICAgICAgcm93ICs9IDI7CiAgICAgICAgIHJvd04gPSByb3dbMF07CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0FBQ2xpcC5oIGIvc3JjL2NvcmUvU2tBQUNsaXAuaAppbmRleCAwM2Y2OTkyLi5mMmNkZTYyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0FBQ2xpcC5oCisrKyBiL3NyYy9jb3JlL1NrQUFDbGlwLmgKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB2b2lkIGNvcHlUb01hc2soU2tNYXNrKikgY29uc3Q7CiAKICAgICAvLyBjYWxsZWQgaW50ZXJuYWxseQotICAgIAorCiAgICAgYm9vbCBxdWlja0NvbnRhaW5zKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIGNvbnN0OwogICAgIGJvb2wgcXVpY2tDb250YWlucyhjb25zdCBTa0lSZWN0JiByKSBjb25zdCB7CiAgICAgICAgIHJldHVybiB0aGlzLT5xdWlja0NvbnRhaW5zKHIuZkxlZnQsIHIuZlRvcCwgci5mUmlnaHQsIHIuZkJvdHRvbSk7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgZkFBQ2xpcCA9IGFhY2xpcDsKICAgICAgICAgZkFBQ2xpcEJvdW5kcyA9IGFhY2xpcC0+Z2V0Qm91bmRzKCk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGJsaXRIKGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSBTS19PVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEFudGlIKGludCB4LCBpbnQgeSwgY29uc3QgU2tBbHBoYVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCBydW5zW10pIFNLX09WRVJSSURFOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGJsaXRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBTS19PVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdE1hc2soY29uc3QgU2tNYXNrJiwgY29uc3QgU2tJUmVjdCYgY2xpcCkgU0tfT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBTa0JpdG1hcCoganVzdEFuT3BhcXVlQ29sb3IodWludDMyX3QqIHZhbHVlKSBTS19PVkVSUklERTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBTa0JsaXR0ZXIqICAgICAgZkJsaXR0ZXI7CiAgICAgY29uc3QgU2tBQUNsaXAqIGZBQUNsaXA7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzLmNwcCBiL3NyYy9jb3JlL1NrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MuY3BwCmluZGV4IGU5MWIyZTUuLjM3MDYxNmUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MuY3BwCisrKyBiL3NyYy9jb3JlL1NrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MuY3BwCkBAIC00NiwxMiArNDYsMTIgQEAKIHZvaWQgc3RyaXBVbmludGVyZXN0aW5nVHJhaWxpbmdBZHZhbmNlc0Zyb21SYW5nZTxpbnQxNl90PigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzOjpBZHZhbmNlTWV0cmljPGludDE2X3Q+KiByYW5nZSkgewogICAgIFNrQVNTRVJUKHJhbmdlKTsKLSAgICAKKwogICAgIGludCBleHBlY3RlZEFkdmFuY2VDb3VudCA9IHJhbmdlLT5mRW5kSWQgLSByYW5nZS0+ZlN0YXJ0SWQgKyAxOwogICAgIGlmIChyYW5nZS0+ZkFkdmFuY2UuY291bnQoKSA8IGV4cGVjdGVkQWR2YW5jZUNvdW50KSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBmb3IgKGludCBpID0gZXhwZWN0ZWRBZHZhbmNlQ291bnQgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBpZiAocmFuZ2UtPmZBZHZhbmNlW2ldICE9IGtEb250Q2FyZUFkdmFuY2UgJiYKICAgICAgICAgICAgIHJhbmdlLT5mQWR2YW5jZVtpXSAhPSBrSW52YWxpZEFkdmFuY2UgJiYKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBTa0FTU0VSVChyYW5nZS0+ZkFkdmFuY2UuY291bnQoKSA9PSByYW5nZS0+ZkVuZElkIC0gcmFuZ2UtPmZTdGFydElkICsgMSk7Ci0gICAgCisKICAgICAvLyBaZXJvIG91dCB3aWxkY2FyZHMuCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5nZS0+ZkFkdmFuY2UuY291bnQoKTsgKytpKSB7CiAgICAgICAgIGlmIChyYW5nZS0+ZkFkdmFuY2VbaV0gPT0ga0RvbnRDYXJlQWR2YW5jZSkgewpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIH0KICAgICB9CiB9Ci0gICAgCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgogdm9pZCBmaW5pc2hSYW5nZSgKICAgICAgICAgU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljczo6QWR2YW5jZU1ldHJpYzxEYXRhPiogcmFuZ2UsCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0FudGlSdW4uaCBiL3NyYy9jb3JlL1NrQW50aVJ1bi5oCmluZGV4IDU2YjVlZTUuLjMxYjUyZTMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQW50aVJ1bi5oCisrKyBiL3NyYy9jb3JlL1NrQW50aVJ1bi5oCkBAIC0zMSw3ICszMSw3IEBACiAKICAgICAvLy8gUmVpbml0aWFsaXplIGZvciBhIG5ldyBzY2FubGluZS4KICAgICB2b2lkICAgIHJlc2V0KGludCB3aWR0aCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgSW5zZXJ0IGludG8gdGhlIGJ1ZmZlciBhIHJ1biBzdGFydGluZyBhdCAoeC1vZmZzZXRYKToKICAgICAgKiAgICAgIGlmIHN0YXJ0QWxwaGEgPiAwCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0F1dG9LZXJuLmggYi9zcmMvY29yZS9Ta0F1dG9LZXJuLmgKaW5kZXggZjY4NzlhMS4uMGEwODQzMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tBdXRvS2Vybi5oCisrKyBiL3NyYy9jb3JlL1NrQXV0b0tlcm4uaApAQCAtMjQsNyArMjQsNyBAQAogcHVibGljOgogICAgIFNrQXV0b0tlcm4oKSA6IGZQcmV2UnNiRGVsdGEoMCkge30KIAotICAgIFNrRml4ZWQgIGFkanVzdChjb25zdCBTa0dseXBoJiAgZ2x5cGgpIAorICAgIFNrRml4ZWQgIGFkanVzdChjb25zdCBTa0dseXBoJiAgZ2x5cGgpCiAgICAgewogLy8gICAgICAgIGlmIChTa0FiczMyKGdseXBoLmZMc2JEZWx0YSkgPiA0NyB8fCBTa0FiczMyKGdseXBoLmZSc2JEZWx0YSkgPiA0NykKIC8vICAgICAgICAgICAgcHJpbnRmKCItLS0tLS0tICVkPiBMICVkIFIgJWRcbiIsIGdseXBoLmZfR2x5cGhJRCwgZ2x5cGguZkxzYkRlbHRhLCBnbHlwaC5mUnNiRGVsdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCaXRtYXAuY3BwIGIvc3JjL2NvcmUvU2tCaXRtYXAuY3BwCmluZGV4IDM4MmQ2YTEuLjlkYmYzMjIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQml0bWFwLmNwcAorKysgYi9zcmMvY29yZS9Ta0JpdG1hcC5jcHAKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICAgIHJldHVybiBDb21wdXRlU2FmZVNpemU2NChnZXRDb25maWcoKSwgZldpZHRoLCBmSGVpZ2h0LCBmUm93Qnl0ZXMpOwogfQogCi1ib29sIFNrQml0bWFwOjpjb3B5UGl4ZWxzVG8odm9pZCogY29uc3QgZHN0LCBzaXplX3QgZHN0U2l6ZSwgCitib29sIFNrQml0bWFwOjpjb3B5UGl4ZWxzVG8odm9pZCogY29uc3QgZHN0LCBzaXplX3QgZHN0U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0Um93Qnl0ZXMsIGJvb2wgcHJlc2VydmVEc3RQYWQpIGNvbnN0IHsKIAogICAgIGlmIChkc3RSb3dCeXRlcyA9PSAtMSkKQEAgLTUxMiw5ICs1MTIsOSBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLWJvb2wgU2tCaXRtYXA6OmlzSW1tdXRhYmxlKCkgY29uc3QgeyAKK2Jvb2wgU2tCaXRtYXA6OmlzSW1tdXRhYmxlKCkgY29uc3QgewogICAgIHJldHVybiBmUGl4ZWxSZWYgPyBmUGl4ZWxSZWYtPmlzSW1tdXRhYmxlKCkgOgotICAgICAgICBmRmxhZ3MgJiBrSW1hZ2VJc0ltbXV0YWJsZV9GbGFnOyAKKyAgICAgICAgZkZsYWdzICYga0ltYWdlSXNJbW11dGFibGVfRmxhZzsKIH0KIAogdm9pZCBTa0JpdG1hcDo6c2V0SW1tdXRhYmxlKCkgewpAQCAtOTA3LDEwICs5MDcsMTAgQEAKICAgICBpZiAoIXNyYy0+cmVhZHlUb0RyYXcoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgU2tCaXRtYXAgdG1wRHN0OwogICAgIHRtcERzdC5zZXRDb25maWcoZHN0Q29uZmlnLCBzcmMtPndpZHRoKCksIHNyYy0+aGVpZ2h0KCkpOwotICAgIAorCiAgICAgLy8gYWxsb2NhdGUgY29sb3J0YWJsZSBpZiBzcmNDb25maWcgPT0ga0luZGV4OF9Db25maWcKICAgICBTa0NvbG9yVGFibGUqIGN0YWJsZSA9IChkc3RDb25maWcgPT0ga0luZGV4OF9Db25maWcpID8KICAgICBuZXcgU2tDb2xvclRhYmxlKCpzcmMtPmdldENvbG9yVGFibGUoKSkgOiBOVUxMOwpAQCAtOTE4LDEyICs5MTgsMTIgQEAKICAgICBpZiAoIXRtcERzdC5hbGxvY1BpeGVscyhhbGxvYywgY3RhYmxlKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCF0bXBEc3QucmVhZHlUb0RyYXcoKSkgewogICAgICAgICAvLyBhbGxvY2F0b3IvbG9jayBmYWlsZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qIGRvIG1lbWNweSBmb3IgdGhlIHNhbWUgY29uZmlncyBjYXNlcywgZWxzZSB1c2UgZHJhd2luZwogICAgICovCiAgICAgaWYgKHNyYy0+Y29uZmlnKCkgPT0gZHN0Q29uZmlnKSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JpdG1hcEhlYXAuY3BwIGIvc3JjL2NvcmUvU2tCaXRtYXBIZWFwLmNwcAppbmRleCBlN2Y5ZWVkLi45MzY5NTFjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JpdG1hcEhlYXAuY3BwCisrKyBiL3NyYy9jb3JlL1NrQml0bWFwSGVhcC5jcHAKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAgICAgICAgZkxlYXN0UmVjZW50bHlVc2VkLT5mTGVzc1JlY2VudGx5VXNlZCA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gb3JpZ0J5dGVzQWxsb2NhdGVkIC0gZkJ5dGVzQWxsb2NhdGVkOwogfQogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JpdG1hcEhlYXAuaCBiL3NyYy9jb3JlL1NrQml0bWFwSGVhcC5oCmluZGV4IDYxZTFkZDkuLmJhZGJjOWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQml0bWFwSGVhcC5oCisrKyBiL3NyYy9jb3JlL1NrQml0bWFwSGVhcC5oCkBAIC0yMDcsMTQgKzIwNywxNCBAQAogICAgICAqIGVxdWFsIHRvIElHTk9SRV9PV05FUlMuCiAgICAgICovCiAgICAgdm9pZCBkZWZlckFkZGluZ093bmVycygpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzdW1lIGFkZGluZyByZWZlcmVuY2VzIHdoZW4gZHVwbGljYXRlIFNrQml0bWFwcyBhcmUgaW5zZXJ0ZWQuCiAgICAgICogQHBhcmFtIGFkZCBJZiB0cnVlLCBhZGQgcmVmZXJlbmNlcyB0byB0aGUgU2tCaXRtYXBIZWFwRW50cnlzIHdob3NlIFNrQml0bWFwcyB3ZXJlIHJlLWluc2VydGVkCiAgICAgICogICAgICAgICAgICB3aGlsZSBkZWZlcnJpbmcuCiAgICAgICovCiAgICAgdm9pZCBlbmRBZGRpbmdPd25lcnNEZWZlcnJhbChib29sIGFkZCk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgc3RydWN0IExvb2t1cEVudHJ5IHsKICAgICAgICAgTG9va3VwRW50cnkoY29uc3QgU2tCaXRtYXAmIGJtKQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGUuY3BwIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGUuY3BwCmluZGV4IDAxZWY1YTUuLjNlY2NmNDcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlLmNwcAorKysgYi9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZS5jcHAKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgaW50IHNoaWZ0ID0gZk9yaWdCaXRtYXAuZXh0cmFjdE1pcExldmVsKCZmTWlwQml0bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0ZpeGVkKG0tPmdldFNjYWxlWCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9GaXhlZChtLT5nZXRTa2V3WSgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzaGlmdCA+IDApIHsKICAgICAgICAgICAgIGlmIChtICE9ICZmVW5pdEludk1hdHJpeCkgewogICAgICAgICAgICAgICAgIGZVbml0SW52TWF0cml4ID0gKm07CkBAIC03MCw3ICs3MCw3IEBACiAKICAgICAgICAgICAgIFNrU2NhbGFyIHNjYWxlID0gU2tGaXhlZFRvU2NhbGFyKFNLX0ZpeGVkMSA+PiBzaGlmdCk7CiAgICAgICAgICAgICBmVW5pdEludk1hdHJpeC5wb3N0U2NhbGUoc2NhbGUsIHNjYWxlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBub3cgcG9pbnQgaGVyZSBpbnN0ZWFkIG9mIGZPcmlnQml0bWFwCiAgICAgICAgICAgICBmQml0bWFwID0gJmZNaXBCaXRtYXA7CiAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBpbnQgaW5kZXggPSAwOwogICAgIGlmIChmQWxwaGFTY2FsZSA8IDI1NikgeyAgLy8gbm90ZTogdGhpcyBkaXN0aW5jdGlvbiBpcyBub3QgdXNlZCBmb3IgRDE2CiAgICAgICAgIGluZGV4IHw9IDE7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgUzMyX2FscGhhX0QzMl9maWx0ZXJfRFhEWSwKICAgICAgICAgUzMyX29wYXF1ZV9EMzJfZmlsdGVyX0RYLAogICAgICAgICBTMzJfYWxwaGFfRDMyX2ZpbHRlcl9EWCwKLSAgICAgICAgCisKICAgICAgICAgUzE2X29wYXF1ZV9EMzJfbm9maWx0ZXJfRFhEWSwKICAgICAgICAgUzE2X2FscGhhX0QzMl9ub2ZpbHRlcl9EWERZLAogICAgICAgICBTMTZfb3BhcXVlX0QzMl9ub2ZpbHRlcl9EWCwKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICBTMTZfYWxwaGFfRDMyX2ZpbHRlcl9EWERZLAogICAgICAgICBTMTZfb3BhcXVlX0QzMl9maWx0ZXJfRFgsCiAgICAgICAgIFMxNl9hbHBoYV9EMzJfZmlsdGVyX0RYLAotICAgICAgICAKKwogICAgICAgICBTSThfb3BhcXVlX0QzMl9ub2ZpbHRlcl9EWERZLAogICAgICAgICBTSThfYWxwaGFfRDMyX25vZmlsdGVyX0RYRFksCiAgICAgICAgIFNJOF9vcGFxdWVfRDMyX25vZmlsdGVyX0RYLApAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICAgIFNJOF9hbHBoYV9EMzJfZmlsdGVyX0RYRFksCiAgICAgICAgIFNJOF9vcGFxdWVfRDMyX2ZpbHRlcl9EWCwKICAgICAgICAgU0k4X2FscGhhX0QzMl9maWx0ZXJfRFgsCi0gICAgICAgIAorCiAgICAgICAgIFM0NDQ0X29wYXF1ZV9EMzJfbm9maWx0ZXJfRFhEWSwKICAgICAgICAgUzQ0NDRfYWxwaGFfRDMyX25vZmlsdGVyX0RYRFksCiAgICAgICAgIFM0NDQ0X29wYXF1ZV9EMzJfbm9maWx0ZXJfRFgsCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgUzQ0NDRfYWxwaGFfRDMyX2ZpbHRlcl9EWERZLAogICAgICAgICBTNDQ0NF9vcGFxdWVfRDMyX2ZpbHRlcl9EWCwKICAgICAgICAgUzQ0NDRfYWxwaGFfRDMyX2ZpbHRlcl9EWCwKLSAgICAgICAgCisKICAgICAgICAgLy8gQTggdHJlYXRzIGFscGhhL29wYXVxZSB0aGUgc2FtZSAoZXF1YWxseSBlZmZpY2llbnQpCiAgICAgICAgIFNBOF9hbHBoYV9EMzJfbm9maWx0ZXJfRFhEWSwKICAgICAgICAgU0E4X2FscGhhX0QzMl9ub2ZpbHRlcl9EWERZLApAQCAtMTg3LDIzICsxODcsMjMgQEAKICAgICAgICAgU0E4X2FscGhhX0QzMl9maWx0ZXJfRFgsCiAgICAgICAgIFNBOF9hbHBoYV9EMzJfZmlsdGVyX0RYCiAgICAgfTsKLSAgICAKKwogICAgIHN0YXRpYyBjb25zdCBTYW1wbGVQcm9jMTYgZ1NrQml0bWFwUHJvY1N0YXRlU2FtcGxlMTZbXSA9IHsKICAgICAgICAgUzMyX0QxNl9ub2ZpbHRlcl9EWERZLAogICAgICAgICBTMzJfRDE2X25vZmlsdGVyX0RYLAogICAgICAgICBTMzJfRDE2X2ZpbHRlcl9EWERZLAogICAgICAgICBTMzJfRDE2X2ZpbHRlcl9EWCwKLSAgICAgICAgCisKICAgICAgICAgUzE2X0QxNl9ub2ZpbHRlcl9EWERZLAogICAgICAgICBTMTZfRDE2X25vZmlsdGVyX0RYLAogICAgICAgICBTMTZfRDE2X2ZpbHRlcl9EWERZLAogICAgICAgICBTMTZfRDE2X2ZpbHRlcl9EWCwKLSAgICAgICAgCisKICAgICAgICAgU0k4X0QxNl9ub2ZpbHRlcl9EWERZLAogICAgICAgICBTSThfRDE2X25vZmlsdGVyX0RYLAogICAgICAgICBTSThfRDE2X2ZpbHRlcl9EWERZLAogICAgICAgICBTSThfRDE2X2ZpbHRlcl9EWCwKLSAgICAgICAgCisKICAgICAgICAgLy8gRG9uJ3Qgc3VwcG9ydCA0NDQ0IC0+IDU2NQogICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogICAgICAgICAvLyBEb24ndCBzdXBwb3J0IEE4IC0+IDU2NQpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBteCwgdW5zaWduZWQgbXkpIHsKICAgICB1bnNpZ25lZCB5ID0gKmJpdG1hcFhZKys7CiAgICAgU2tBU1NFUlQoeSA8IG15KTsKLSAgICAKKwogICAgIGNvbnN0IHVpbnQxNl90KiB4cHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGJpdG1hcFhZKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgU2tBU1NFUlQoeHB0cltpXSA8IG14KTsKQEAgLTI1MSwxMCArMjUxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBteCwgdW5zaWduZWQgbXkpIHsKICAgICB1aW50MzJfdCBZWSA9ICpiaXRtYXBYWSsrOwogICAgIHVuc2lnbmVkIHkwID0gWVkgPj4gMTg7Ci0gICAgdW5zaWduZWQgeTEgPSBZWSAmIDB4M0ZGRjsgICAgCisgICAgdW5zaWduZWQgeTEgPSBZWSAmIDB4M0ZGRjsKICAgICBTa0FTU0VSVCh5MCA8IG15KTsKICAgICBTa0FTU0VSVCh5MSA8IG15KTsKLSAgICAKKwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBYWCA9IGJpdG1hcFhZW2ldOwogICAgICAgICB1bnNpZ25lZCB4MCA9IFhYID4+IDE4OwpAQCAtMzIzLDcgKzMyMyw3IEBACiAvKgogICAgIFRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGRpZmZlcmVudCBtYXRyaXggcHJvY3MgYXJlIGFzIGZvbGxvd3MsCiAgICAgd2hlcmUgZWFjaCBYIG9yIFkgaXMgMiBieXRlcywgYW5kIE4gaXMgdGhlIG51bWJlciBvZiBwaXhlbHMvZWxlbWVudHM6Ci0gCisKICAgICBzY2FsZS90cmFuc2xhdGUgICAgIG5vZmlsdGVyICAgICAgWSg0Ynl0ZXMpICsgTiAqIFgKICAgICBhZmZpbmUvcGVyc3BlY3RpdmUgIG5vZmlsdGVyICAgICAgTiAqIChYIFkpCiAgICAgc2NhbGUvdHJhbnNsYXRlICAgICBmaWx0ZXIgICAgICAgIFkgWSArIE4gKiAoWCBYKQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGUuaCBiL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlLmgKaW5kZXggZTk5NTFjOC4uNGUzYTFhMSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGUuaAorKysgYi9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZS5oCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYml0bWFwWFlbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5KTsKLSAgICAKKwogICAgIHR5cGVkZWYgdm9pZCAoKlNhbXBsZVByb2MzMikoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3RbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBjb2xvcnNbXSk7Ci0gICAgCisKICAgICB0eXBlZGVmIFUxNkNQVSAoKkZpeGVkVGlsZVByb2MpKFNrRml4ZWQpOyAgIC8vIHJldHVybnMgMC4uMHhGRkZGCiAgICAgdHlwZWRlZiBVMTZDUFUgKCpGaXhlZFRpbGVMb3dCaXRzUHJvYykoU2tGaXhlZCwgaW50KTsgICAvLyByZXR1cm5zIDAuLjB4RgogICAgIHR5cGVkZWYgVTE2Q1BVICgqSW50VGlsZVByb2MpKGludCB2YWx1ZSwgaW50IGNvdW50KTsgICAvLyByZXR1cm5zIDAuLmNvdW50LTEKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgIFNrRnJhY3Rpb25hbEludCAgICAgZkludlN4RnJhY3Rpb25hbEludDsKICAgICBTa0ZyYWN0aW9uYWxJbnQgICAgIGZJbnZLeUZyYWN0aW9uYWxJbnQ7Ci0gICAgCisKICAgICBGaXhlZFRpbGVQcm9jICAgICAgIGZUaWxlUHJvY1g7ICAgICAgICAgLy8gY2hvb3NlUHJvY3MKICAgICBGaXhlZFRpbGVQcm9jICAgICAgIGZUaWxlUHJvY1k7ICAgICAgICAgLy8gY2hvb3NlUHJvY3MKICAgICBGaXhlZFRpbGVMb3dCaXRzUHJvYyBmVGlsZUxvd0JpdHNQcm9jWDsgLy8gY2hvb3NlUHJvY3MKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAoaS5lLiB0aGUgbnVtYmVyIG9mIFNrUE1Db2xvciB2YWx1ZXMgdG8gYmUgd3JpdHRlbiBieSB0aGUgc2FtcGxlIHByb2MpLgogICAgICAgICBUaGlzIHJvdXRpbmUgdGFrZXMgaW50byBhY2NvdW50IHRoYXQgZmlsdGVyaW5nIGFuZCBzY2FsZS12cy1hZmZpbmUKICAgICAgICAgYWZmZWN0IHRoZSBhbW91bnQgb2YgYnVmZmVyIHNwYWNlIG5lZWRlZC4KLSAgICAgCisKICAgICAgICAgT25seSB2YWxpZCB0byBjYWxsIGFmdGVyIGNob29zZVByb2NzIChzZXRDb250ZXh0KSBoYXMgYmVlbiBjYWxsZWQuIEl0IGlzCiAgICAgICAgIHNhZmUgdG8gY2FsbCB0aGlzIGluc2lkZSB0aGUgc2hhZGVyJ3Mgc2hhZGVTcGFuKCkgbWV0aG9kLgogICAgICAqLwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgTWF0cml4UHJvYyAgICAgICAgICBmTWF0cml4UHJvYzsgICAgICAgIC8vIGNob29zZVByb2NzCiAgICAgU2FtcGxlUHJvYzMyICAgICAgICBmU2FtcGxlUHJvYzMyOyAgICAgIC8vIGNob29zZVByb2NzCiAgICAgU2FtcGxlUHJvYzE2ICAgICAgICBmU2FtcGxlUHJvYzE2OyAgICAgIC8vIGNob29zZVByb2NzCi0gICAgCisKICAgICBTa01hdHJpeCAgICAgICAgICAgIGZVbml0SW52TWF0cml4OyAgICAgLy8gY2hvb3NlUHJvY3MKICAgICBTa0JpdG1hcCAgICAgICAgICAgIGZPcmlnQml0bWFwOyAgICAgICAgLy8gQ09OU1RSVUNUT1IKICAgICBTa0JpdG1hcCAgICAgICAgICAgIGZNaXBCaXRtYXA7CkBAIC0xNzQsOSArMTc0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgU2tQTUNvbG9yIGNvbG9yc1tdKTsKIHZvaWQgUzMyX2FscGhhX0QzMl9maWx0ZXJfRFgoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmIHMsIGNvbnN0IHVpbnQzMl90IHh5W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgU2tQTUNvbG9yIGNvbG9yc1tdKTsKLXZvaWQgUzMyX29wYXF1ZV9EMzJfZmlsdGVyX0RYRFkoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmIHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgeHlbXSwgaW50IGNvdW50LCBTa1BNQ29sb3IgY29sb3JzW10pOyAgCi12b2lkIFMzMl9hbHBoYV9EMzJfZmlsdGVyX0RYRFkoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmIHMsIAordm9pZCBTMzJfb3BhcXVlX0QzMl9maWx0ZXJfRFhEWShjb25zdCBTa0JpdG1hcFByb2NTdGF0ZSYgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHh5W10sIGludCBjb3VudCwgU2tQTUNvbG9yIGNvbG9yc1tdKTsKK3ZvaWQgUzMyX2FscGhhX0QzMl9maWx0ZXJfRFhEWShjb25zdCBTa0JpdG1hcFByb2NTdGF0ZSYgcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHh5W10sIGludCBjb3VudCwgU2tQTUNvbG9yIGNvbG9yc1tdKTsKIHZvaWQgQ2xhbXBYX0NsYW1wWV9maWx0ZXJfc2NhbGUoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmIHMsIHVpbnQzMl90IHh5W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50IHgsIGludCB5KTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlX2ZpbHRlci5oIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfZmlsdGVyLmgKaW5kZXggN2ZjZjc1NC4uZjc4NDhmNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfZmlsdGVyLmgKKysrIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfZmlsdGVyLmgKQEAgLTExLDcgKzExLDcgQEAKIAogLyoKICAgICBGaWx0ZXJfMzJfb3BhcXVlCi0gICAgCisKICAgICBUaGVyZSBpcyBubyBoYXJkLW4tZmFzdCBydWxlIHRoYXQgdGhlIGZpbHRlcmluZyBtdXN0IHByb2R1Y2UKICAgICBleGFjdCByZXN1bHRzIGZvciB0aGUgY29sb3IgY29tcG9uZW50cywgYnV0IGlmIHRoZSA0IGluY29taW5nIGNvbG9ycyBhcmUKICAgICBhbGwgb3BhcXVlLCB0aGVuIHRoZSBvdXRwdXQgY29sb3IgbXVzdCBhbHNvIGJlIG9wYXF1ZS4gU3Vic2VxdWVudCBwYXJ0cyBvZgpAQCAtMjQsMjUgKzI0LDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IqIGRzdENvbG9yKSB7CiAgICAgU2tBU1NFUlQoKHVuc2lnbmVkKXggPD0gMHhGKTsKICAgICBTa0FTU0VSVCgodW5zaWduZWQpeSA8PSAweEYpOwotICAgIAorCiAgICAgaW50IHh5ID0geCAqIHk7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBnTWFza18wMEZGMDBGRjsgLy8weEZGMDBGRjsKLSAgICAKKwogICAgIGludCBzY2FsZSA9IDI1NiAtIDE2KnkgLSAxNip4ICsgeHk7CiAgICAgdWludDMyX3QgbG8gPSAoYTAwICYgbWFzaykgKiBzY2FsZTsKICAgICB1aW50MzJfdCBoaSA9ICgoYTAwID4+IDgpICYgbWFzaykgKiBzY2FsZTsKLSAgICAKKwogICAgIHNjYWxlID0gMTYqeCAtIHh5OwogICAgIGxvICs9IChhMDEgJiBtYXNrKSAqIHNjYWxlOwogICAgIGhpICs9ICgoYTAxID4+IDgpICYgbWFzaykgKiBzY2FsZTsKLSAgICAKKwogICAgIHNjYWxlID0gMTYqeSAtIHh5OwogICAgIGxvICs9IChhMTAgJiBtYXNrKSAqIHNjYWxlOwogICAgIGhpICs9ICgoYTEwID4+IDgpICYgbWFzaykgKiBzY2FsZTsKLSAgICAKKwogICAgIGxvICs9IChhMTEgJiBtYXNrKSAqIHh5OwogICAgIGhpICs9ICgoYTExID4+IDgpICYgbWFzaykgKiB4eTsKLSAgICAKKwogICAgICpkc3RDb2xvciA9ICgobG8gPj4gOCkgJiBtYXNrKSB8IChoaSAmIH5tYXNrKTsKIH0KIApAQCAtNTQsMjIgKzU0LDIyIEBACiAgICAgU2tBU1NFUlQoKHVuc2lnbmVkKXggPD0gMHhGKTsKICAgICBTa0FTU0VSVCgodW5zaWduZWQpeSA8PSAweEYpOwogICAgIFNrQVNTRVJUKGFscGhhU2NhbGUgPD0gMjU2KTsKLSAgICAKKwogICAgIGludCB4eSA9IHggKiB5OwogICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtYXNrID0gZ01hc2tfMDBGRjAwRkY7IC8vMHhGRjAwRkY7Ci0gICAgCisKICAgICBpbnQgc2NhbGUgPSAyNTYgLSAxNip5IC0gMTYqeCArIHh5OwogICAgIHVpbnQzMl90IGxvID0gKGEwMCAmIG1hc2spICogc2NhbGU7CiAgICAgdWludDMyX3QgaGkgPSAoKGEwMCA+PiA4KSAmIG1hc2spICogc2NhbGU7Ci0gICAgCisKICAgICBzY2FsZSA9IDE2KnggLSB4eTsKICAgICBsbyArPSAoYTAxICYgbWFzaykgKiBzY2FsZTsKICAgICBoaSArPSAoKGEwMSA+PiA4KSAmIG1hc2spICogc2NhbGU7Ci0gICAgCisKICAgICBzY2FsZSA9IDE2KnkgLSB4eTsKICAgICBsbyArPSAoYTEwICYgbWFzaykgKiBzY2FsZTsKICAgICBoaSArPSAoKGExMCA+PiA4KSAmIG1hc2spICogc2NhbGU7Ci0gICAgCisKICAgICBsbyArPSAoYTExICYgbWFzaykgKiB4eTsKICAgICBoaSArPSAoKGExMSA+PiA4KSAmIG1hc2spICogeHk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeC5oIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4LmgKaW5kZXggMzE3Yzk4NC4uY2M2NWMyZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4LmgKKysrIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4LmgKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgKnh5KysgPSBUSUxFWV9QUk9DRihTa0ZyYWN0aW9uYWxJbnRUb0ZpeGVkKGZ4KSwgbWF4WSk7CiAgICAgICAgIGZ4ID0gU2tTY2FsYXJUb0ZyYWN0aW9uYWxJbnQocHQuZlgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICgwID09IG1heFgpIHsKICAgICAgICAgLy8gYWxsIG9mIHRoZSBmb2xsb3dpbmcgWCB2YWx1ZXMgbXVzdCBiZSAwCiAgICAgICAgIG1lbXNldCh4eSwgMCwgY291bnQgKiBzaXplb2YodWludDE2X3QpKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIFNrQVNTRVJUKChzLmZJbnZUeXBlICYgfihTa01hdHJpeDo6a1RyYW5zbGF0ZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtTY2FsZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtBZmZpbmVfTWFzaykpID09IDApOwotICAgIAorCiAgICAgUFJFQU1CTEUocyk7CiAgICAgU2tQb2ludCBzcmNQdDsKICAgICBzLmZJbnZQcm9jKCpzLmZJbnZNYXRyaXgsCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICBTa0ZyYWN0aW9uYWxJbnQgZHkgPSBzLmZJbnZLeUZyYWN0aW9uYWxJbnQ7CiAgICAgaW50IG1heFggPSBzLmZCaXRtYXAtPndpZHRoKCkgLSAxOwogICAgIGludCBtYXhZID0gcy5mQml0bWFwLT5oZWlnaHQoKSAtIDE7Ci0gICAgCisKICAgICBmb3IgKGludCBpID0gY291bnQ7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgKnh5KysgPSAoVElMRVlfUFJPQ0YoU2tGcmFjdGlvbmFsSW50VG9GaXhlZChmeSksIG1heFkpIDw8IDE2KSB8CiAgICAgICAgICAgICAgICAgIFRJTEVYX1BST0NGKFNrRnJhY3Rpb25hbEludFRvRml4ZWQoZngpLCBtYXhYKTsKQEAgLTEzOCwxNSArMTM4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBTS19SRVNUUklDVCB4eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVChzLmZJbnZUeXBlICYgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKTsKLSAgICAKKwogICAgIFBSRUFNQkxFKHMpOwogICAgIGludCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICBpbnQgbWF4WSA9IHMuZkJpdG1hcC0+aGVpZ2h0KCkgLSAxOwotICAgIAorCiAgICAgU2tQZXJzcEl0ZXIgICBpdGVyKCpzLmZJbnZNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgY291bnQpOwotICAgIAorCiAgICAgd2hpbGUgKChjb3VudCA9IGl0ZXIubmV4dCgpKSAhPSAwKSB7CiAgICAgICAgIGNvbnN0IFNrRml4ZWQqIFNLX1JFU1RSSUNUIHNyY1hZID0gaXRlci5nZXRYWSgpOwogICAgICAgICB3aGlsZSAoLS1jb3VudCA+PSAwKSB7CkBAIC0xODAsNyArMTgwLDcgQEAKICAgICBTa0FTU0VSVChzLmZJbnZLeSA9PSAwKTsKIAogICAgIFBSRUFNQkxFKHMpOwotICAgIAorCiAgICAgY29uc3QgdW5zaWduZWQgbWF4WCA9IHMuZkJpdG1hcC0+d2lkdGgoKSAtIDE7CiAgICAgY29uc3QgU2tGaXhlZCBvbmUgPSBzLmZGaWx0ZXJPbmVYOwogICAgIGNvbnN0IFNrRnJhY3Rpb25hbEludCBkeCA9IHMuZkludlN4RnJhY3Rpb25hbEludDsKQEAgLTIxOSwxMyArMjE5LDEzIEBACiAgICAgU2tBU1NFUlQoKHMuZkludlR5cGUgJiB+KFNrTWF0cml4OjprVHJhbnNsYXRlX01hc2sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6a1NjYWxlX01hc2sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6a0FmZmluZV9NYXNrKSkgPT0gMCk7Ci0gICAgCisKICAgICBQUkVBTUJMRShzKTsKICAgICBTa1BvaW50IHNyY1B0OwogICAgIHMuZkludlByb2MoKnMuZkludk1hdHJpeCwKICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih5KSArIFNLX1NjYWxhckhhbGYsICZzcmNQdCk7Ci0gICAgCisKICAgICBTa0ZpeGVkIG9uZVggPSBzLmZGaWx0ZXJPbmVYOwogICAgIFNrRml4ZWQgb25lWSA9IHMuZkZpbHRlck9uZVk7CiAgICAgU2tGaXhlZCBmeCA9IFNrU2NhbGFyVG9GaXhlZChzcmNQdC5mWCkgLSAob25lWCA+PiAxKTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgIFNrRml4ZWQgZHkgPSBzLmZJbnZLeTsKICAgICB1bnNpZ25lZCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICB1bnNpZ25lZCBtYXhZID0gcy5mQml0bWFwLT5oZWlnaHQoKSAtIDE7Ci0gICAgCisKICAgICBkbyB7CiAgICAgICAgICp4eSsrID0gUEFDS19GSUxURVJfWV9OQU1FKGZ5LCBtYXhZLCBvbmVZIFBSRUFNQkxFX0FSR19ZKTsKICAgICAgICAgZnkgKz0gZHk7CkBAIC0yNDcsMTcgKzI0NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIFNLX1JFU1RSSUNUIHh5LCBpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVChzLmZJbnZUeXBlICYgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKTsKLSAgICAKKwogICAgIFBSRUFNQkxFKHMpOwogICAgIHVuc2lnbmVkIG1heFggPSBzLmZCaXRtYXAtPndpZHRoKCkgLSAxOwogICAgIHVuc2lnbmVkIG1heFkgPSBzLmZCaXRtYXAtPmhlaWdodCgpIC0gMTsKICAgICBTa0ZpeGVkIG9uZVggPSBzLmZGaWx0ZXJPbmVYOwogICAgIFNrRml4ZWQgb25lWSA9IHMuZkZpbHRlck9uZVk7Ci0gICAgCisKICAgICBTa1BlcnNwSXRlciAgIGl0ZXIoKnMuZkludk1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih4KSArIFNLX1NjYWxhckhhbGYsCiAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeSkgKyBTS19TY2FsYXJIYWxmLCBjb3VudCk7Ci0gICAgCisKICAgICB3aGlsZSAoKGNvdW50ID0gaXRlci5uZXh0KCkpICE9IDApIHsKICAgICAgICAgY29uc3QgU2tGaXhlZCogU0tfUkVTVFJJQ1Qgc3JjWFkgPSBpdGVyLmdldFhZKCk7CiAgICAgICAgIGRvIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeFByb2NzLmNwcCBiL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeFByb2NzLmNwcAppbmRleCA2NDc1NWJlLi5hMGNmYzMzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9tYXRyaXhQcm9jcy5jcHAKKysrIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4UHJvY3MuY3BwCkBAIC0xLDQgKzEsNCBAQAotLyogTkVPTiBvcHRpbWl6ZWQgY29kZSAoQykgQ09QWVJJR0hUIDIwMDkgTW90b3JvbGEgCisvKiBORU9OIG9wdGltaXplZCBjb2RlIChDKSBDT1BZUklHSFQgMjAwOSBNb3Rvcm9sYQogICoKICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCkBAIC0xOCw5ICsxOCw5IEBACiB9CiAKIC8qICByZXR1cm5zIDAuLi4obi0xKSBnaXZlbiBhbnkgeCAocG9zaXRpdmUgb3IgbmVnYXRpdmUpLgotICAgIAorCiAgICAgQXMgYW4gZXhhbXBsZSwgaWYgbiAod2hpY2ggaXMgYWx3YXlzIHBvc2l0aXZlKSBpcyA1Li4uCi0gCisKICAgICAgICAgICB4OiAtOCAtNyAtNiAtNSAtNCAtMyAtMiAtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOAogICAgIHJldHVybnM6ICAyICAzICA0ICAwICAxICAyICAzICA0ICAwICAxICAyICAzICA0ICAwICAxICAyICAzCiAgKi8KQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrRnJhY3Rpb25hbEludCBmckR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBtYXgpIHsKICAgICBTa0ZpeGVkIGR4ID0gU2tGcmFjdGlvbmFsSW50VG9GaXhlZChmckR4KTsKLSAgICAKKwogICAgIC8vIGlmIGRlY2FsXyBrZXB0IFNrRnJhY3Rpb25hbEludCBwcmVjaXNpb24sIHRoaXMgd291bGQganVzdCBiZSBkeCA8PSAwCiAgICAgLy8gSSBqdXN0IG1hZGUgdXAgdGhlIDEvMjU2LiBKdXN0IGRvbid0IHdhbnQgdG8gcGVyY2VpdmUgYWNjdW11bGF0ZWQgZXJyb3IKICAgICAvLyBpZiB3ZSB0cnVuY2F0ZSBmckR4IGFuZCBsb3NlIGl0cyBsb3cgYml0cy4KQEAgLTMyMSwxMyArMzIxLDEzIEBACiAgICAgU2tBU1NFUlQoKHMuZkludlR5cGUgJiB+U2tNYXRyaXg6OmtUcmFuc2xhdGVfTWFzaykgPT0gMCk7CiAKICAgICBpbnQgeHBvcyA9IG5vZmlsdGVyX3RyYW5zX3ByZWFtYmxlKHMsICZ4eSwgeCwgeSk7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gcy5mQml0bWFwLT53aWR0aCgpOyAgICAKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzLmZCaXRtYXAtPndpZHRoKCk7CiAgICAgaWYgKDEgPT0gd2lkdGgpIHsKICAgICAgICAgLy8gYWxsIG9mIHRoZSBmb2xsb3dpbmcgWCB2YWx1ZXMgbXVzdCBiZSAwCiAgICAgICAgIG1lbXNldCh4eSwgMCwgY291bnQgKiBzaXplb2YodWludDE2X3QpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHVpbnQxNl90KiB4cHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHh5KTsKICAgICBpbnQgbjsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgU2tBU1NFUlQoKHMuZkludlR5cGUgJiB+U2tNYXRyaXg6OmtUcmFuc2xhdGVfTWFzaykgPT0gMCk7CiAKICAgICBpbnQgeHBvcyA9IG5vZmlsdGVyX3RyYW5zX3ByZWFtYmxlKHMsICZ4eSwgeCwgeSk7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gcy5mQml0bWFwLT53aWR0aCgpOyAgICAKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzLmZCaXRtYXAtPndpZHRoKCk7CiAgICAgaWYgKDEgPT0gd2lkdGgpIHsKICAgICAgICAgLy8gYWxsIG9mIHRoZSBmb2xsb3dpbmcgWCB2YWx1ZXMgbXVzdCBiZSAwCiAgICAgICAgIG1lbXNldCh4eSwgMCwgY291bnQgKiBzaXplb2YodWludDE2X3QpKTsKQEAgLTQwOSw3ICs0MDksNyBAQAogICAgIFNrQVNTRVJUKChzLmZJbnZUeXBlICYgflNrTWF0cml4OjprVHJhbnNsYXRlX01hc2spID09IDApOwogCiAgICAgaW50IHhwb3MgPSBub2ZpbHRlcl90cmFuc19wcmVhbWJsZShzLCAmeHksIHgsIHkpOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHMuZkJpdG1hcC0+d2lkdGgoKTsgICAgCisgICAgY29uc3QgaW50IHdpZHRoID0gcy5mQml0bWFwLT53aWR0aCgpOwogICAgIGlmICgxID09IHdpZHRoKSB7CiAgICAgICAgIC8vIGFsbCBvZiB0aGUgZm9sbG93aW5nIFggdmFsdWVzIG11c3QgYmUgMAogICAgICAgICBtZW1zZXQoeHksIDAsIGNvdW50ICogc2l6ZW9mKHVpbnQxNl90KSk7CkBAIC00NDAsNyArNDQwLDcgQEAKICAgICBmb3J3YXJkID0gIWZvcndhcmQ7CiAgICAgeHB0ciArPSBuOwogICAgIGNvdW50IC09IG47Ci0gICAgCisKICAgICB3aGlsZSAoY291bnQgPj0gd2lkdGgpIHsKICAgICAgICAgaWYgKGZvcndhcmQpIHsKICAgICAgICAgICAgIGZpbGxfc2VxdWVudGlhbCh4cHRyLCAwLCB3aWR0aCk7CkBAIC00NTEsNyArNDUxLDcgQEAKICAgICAgICAgeHB0ciArPSB3aWR0aDsKICAgICAgICAgY291bnQgLT0gd2lkdGg7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICBpZiAoZm9yd2FyZCkgewogICAgICAgICAgICAgZmlsbF9zZXF1ZW50aWFsKHhwdHIsIDAsIGNvdW50KTsKQEAgLTQ3OSw3ICs0NzksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBtaXJyb3J4X25vZmlsdGVyX3RyYW5zOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaW50IGluZGV4ID0gMDsKICAgICBpZiAoZkRvRmlsdGVyKSB7CiAgICAgICAgIGluZGV4ID0gMTsKQEAgLTQ4OSw3ICs0ODksNyBAQAogICAgIH0gZWxzZSBpZiAoZkludlR5cGUgJiBTa01hdHJpeDo6a0FmZmluZV9NYXNrKSB7CiAgICAgICAgIGluZGV4ICs9IDI7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGUgPT0gZlRpbGVNb2RlWCAmJgogICAgICAgICBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlID09IGZUaWxlTW9kZVkpCiAgICAgewpAQCAtNDk4LDExICs0OTgsMTEgQEAKICAgICAgICAgZkZpbHRlck9uZVkgPSBTS19GaXhlZDE7CiAgICAgICAgIHJldHVybiBTS19BUk1fTkVPTl9XUkFQKENsYW1wWF9DbGFtcFlfUHJvY3MpW2luZGV4XTsKICAgICB9Ci0gICAgCisKICAgICAvLyBhbGwgcmVtYWluaW5nIHByb2NzIHVzZSB0aGlzIGZvcm0gZm9yIGZpbHRlck9uZQogICAgIGZGaWx0ZXJPbmVYID0gU0tfRml4ZWQxIC8gZkJpdG1hcC0+d2lkdGgoKTsKICAgICBmRmlsdGVyT25lWSA9IFNLX0ZpeGVkMSAvIGZCaXRtYXAtPmhlaWdodCgpOwotICAgIAorCiAgICAgaWYgKFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlID09IGZUaWxlTW9kZVggJiYKICAgICAgICAgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgPT0gZlRpbGVNb2RlWSkKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9wcm9jcy5oIGIvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfcHJvY3MuaAppbmRleCA2ZDE3MTkzLi5kNDMzMDViIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9wcm9jcy5oCisrKyBiL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlX3Byb2NzLmgKQEAgLTE5LDEyICsxOSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGExMCwgdWludDMyX3QgYTExKSB7CiAgICAgU2tBU1NFUlQoKHVuc2lnbmVkKXggPD0gMHhGKTsKICAgICBTa0FTU0VSVCgodW5zaWduZWQpeSA8PSAweEYpOwotICAgIAorCiAgICAgYTAwID0gU2tFeHBhbmRfcmdiXzE2KGEwMCk7CiAgICAgYTAxID0gU2tFeHBhbmRfcmdiXzE2KGEwMSk7CiAgICAgYTEwID0gU2tFeHBhbmRfcmdiXzE2KGExMCk7CiAgICAgYTExID0gU2tFeHBhbmRfcmdiXzE2KGExMSk7Ci0gICAgCisKICAgICBpbnQgeHkgPSB4ICogeSA+PiAzOwogICAgIHJldHVybiAgYTAwICogKDMyIC0gMip5IC0gMip4ICsgeHkpICsKICAgICAgICAgICAgIGEwMSAqICgyKnggLSB4eSkgKwpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGExMCwgdWludDMyX3QgYTExKSB7CiAgICAgU2tBU1NFUlQoKHVuc2lnbmVkKXggPD0gMHhGKTsKICAgICBTa0FTU0VSVCgodW5zaWduZWQpeSA8PSAweEYpOwotICAgIAorCiAgICAgYTAwID0gU2tFeHBhbmRfNDQ0NChhMDApOwogICAgIGEwMSA9IFNrRXhwYW5kXzQ0NDQoYTAxKTsKICAgICBhMTAgPSBTa0V4cGFuZF80NDQ0KGExMCk7CkBAIC02NywxMyArNjcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVThDUFUgYTEwLCBVOENQVSBhMTEpIHsKICAgICBTa0FTU0VSVCgodW5zaWduZWQpeCA8PSAweEYpOwogICAgIFNrQVNTRVJUKCh1bnNpZ25lZCl5IDw9IDB4Rik7Ci0gICAgCisKICAgICBpbnQgeHkgPSB4ICogeTsKICAgICB1bnNpZ25lZCByZXN1bHQgPSAgIGEwMCAqICgyNTYgLSAxNip5IC0gMTYqeCArIHh5KSArCiAgICAgICAgICAgICAgICAgICAgICAgICBhMDEgKiAoMTYqeCAtIHh5KSArCiAgICAgICAgICAgICAgICAgICAgICAgICBhMTAgKiAoMTYqeSAtIHh5KSArCiAgICAgICAgICAgICAgICAgICAgICAgICBhMTEgKiB4eTsKLSAgICAKKwogICAgIHJldHVybiByZXN1bHQgPj4gODsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfc2FtcGxlLmggYi9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9zYW1wbGUuaAppbmRleCA3YmQwMDgwLi5iMzhlYjc3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9zYW1wbGUuaAorKysgYi9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9zYW1wbGUuaApAQCAtNTMsMTQgKzUzLDE0IEBACiAKICAgICB1aW50MzJfdCBYWTsKICAgICBTUkNUWVBFIHNyYzsKLSAgICAKKwogICAgIGZvciAoaSA9IChjb3VudCA+PiAxKTsgaSA+IDA7IC0taSkgewogICAgICAgICBYWSA9ICp4eSsrOwogICAgICAgICBTa0FTU0VSVCgoWFkgPj4gMTYpIDwgKHVuc2lnbmVkKXMuZkJpdG1hcC0+aGVpZ2h0KCkgJiYKICAgICAgICAgICAgICAgICAgKFhZICYgMHhGRkZGKSA8ICh1bnNpZ25lZClzLmZCaXRtYXAtPndpZHRoKCkpOwogICAgICAgICBzcmMgPSAoKGNvbnN0IFNSQ1RZUEUqKShzcmNBZGRyICsgKFhZID4+IDE2KSAqIHJiKSlbWFkgJiAweEZGRkZdOwogICAgICAgICAqY29sb3JzKysgPSBSRVRVUk5EU1Qoc3JjKTsKLSAgICAgICAgCisKICAgICAgICAgWFkgPSAqeHkrKzsKICAgICAgICAgU2tBU1NFUlQoKFhZID4+IDE2KSA8ICh1bnNpZ25lZClzLmZCaXRtYXAtPmhlaWdodCgpICYmCiAgICAgICAgICAgICAgICAgIChYWSAmIDB4RkZGRikgPCAodW5zaWduZWQpcy5mQml0bWFwLT53aWR0aCgpKTsKQEAgLTk5LDkgKzk5LDkgQEAKICAgICBzcmNBZGRyID0gKGNvbnN0IFNSQ1RZUEUqKSgoY29uc3QgY2hhciopc3JjQWRkciArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eVswXSAqIHMuZkJpdG1hcC0+cm93Qnl0ZXMoKSk7CiAgICAgeHkgKz0gMTsKLSAgICAKKwogICAgIFNSQ1RZUEUgc3JjOwotICAgIAorCiAgICAgaWYgKDEgPT0gcy5mQml0bWFwLT53aWR0aCgpKSB7CiAgICAgICAgIHNyYyA9IHNyY0FkZHJbMF07CiAgICAgICAgIERTVFRZUEUgZHN0VmFsdWUgPSBSRVRVUk5EU1Qoc3JjKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgU1JDVFlQRSB4MSA9IHNyY0FkZHJbVU5QQUNLX1NFQ09OREFSWV9TSE9SVCh4eDApXTsKICAgICAgICAgICAgIFNSQ1RZUEUgeDIgPSBzcmNBZGRyW1VOUEFDS19QUklNQVJZX1NIT1JUKHh4MSldOwogICAgICAgICAgICAgU1JDVFlQRSB4MyA9IHNyY0FkZHJbVU5QQUNLX1NFQ09OREFSWV9TSE9SVCh4eDEpXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAqY29sb3JzKysgPSBSRVRVUk5EU1QoeDApOwogICAgICAgICAgICAgKmNvbG9ycysrID0gUkVUVVJORFNUKHgxKTsKICAgICAgICAgICAgICpjb2xvcnMrKyA9IFJFVFVSTkRTVCh4Mik7CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgICAgIHNyYyA9IHNyY0FkZHJbKnh4KytdOyAqY29sb3JzKysgPSBSRVRVUk5EU1Qoc3JjKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogI2lmZGVmIFBPU1RBTUJMRQogICAgIFBPU1RBTUJMRShzKTsKICNlbmRpZgpAQCAtMTU5LDEyICsxNTksMTIgQEAKICAgICAgICAgcm93MSA9IChjb25zdCBTUkNUWVBFKikoc3JjQWRkciArIChYWSAmIDB4M0ZGRikgKiByYik7CiAgICAgICAgIHN1YlkgPSB5MCAmIDB4RjsKICAgICB9Ci0gICAgCisKICAgICBkbyB7CiAgICAgICAgIHVpbnQzMl90IFhYID0gKnh5Kys7ICAgIC8vIHgwOjE0IHwgNCB8IHgxOjE0CiAgICAgICAgIHVuc2lnbmVkIHgwID0gWFggPj4gMTQ7CiAgICAgICAgIHVuc2lnbmVkIHgxID0gWFggJiAweDNGRkY7Ci0gICAgICAgIHVuc2lnbmVkIHN1YlggPSB4MCAmIDB4RjsgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdWJYID0geDAgJiAweEY7CiAgICAgICAgIHgwID4+PSA0OwogCiAgICAgICAgIEZJTFRFUl9QUk9DKHN1YlgsIHN1YlksCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgY29sb3JzICs9IDE7CiAKICAgICB9IHdoaWxlICgtLWNvdW50ICE9IDApOwotICAgIAorCiAjaWZkZWYgUE9TVEFNQkxFCiAgICAgUE9TVEFNQkxFKHMpOwogI2VuZGlmCkBAIC0xODcsMjkgKzE4NywyOSBAQAogICAgIFNrQVNTRVJUKGNvdW50ID4gMCAmJiBjb2xvcnMgIT0gTlVMTCk7CiAgICAgU2tBU1NFUlQocy5mRG9GaWx0ZXIpOwogICAgIFNrREVCVUdDT0RFKENIRUNLU1RBVEUocyk7KQotICAgICAgICAKKwogI2lmZGVmIFBSRUFNQkxFCiAgICAgICAgIFBSRUFNQkxFKHMpOwogI2VuZGlmCiAgICAgY29uc3QgY2hhciogU0tfUkVTVFJJQ1Qgc3JjQWRkciA9IChjb25zdCBjaGFyKilzLmZCaXRtYXAtPmdldFBpeGVscygpOwogICAgIGludCByYiA9IHMuZkJpdG1hcC0+cm93Qnl0ZXMoKTsKLSAgICAKKwogICAgIGRvIHsKICAgICAgICAgdWludDMyX3QgZGF0YSA9ICp4eSsrOwogICAgICAgICB1bnNpZ25lZCB5MCA9IGRhdGEgPj4gMTQ7CiAgICAgICAgIHVuc2lnbmVkIHkxID0gZGF0YSAmIDB4M0ZGRjsKICAgICAgICAgdW5zaWduZWQgc3ViWSA9IHkwICYgMHhGOwogICAgICAgICB5MCA+Pj0gNDsKLSAgICAgICAgCisKICAgICAgICAgZGF0YSA9ICp4eSsrOwogICAgICAgICB1bnNpZ25lZCB4MCA9IGRhdGEgPj4gMTQ7CiAgICAgICAgIHVuc2lnbmVkIHgxID0gZGF0YSAmIDB4M0ZGRjsKICAgICAgICAgdW5zaWduZWQgc3ViWCA9IHgwICYgMHhGOwogICAgICAgICB4MCA+Pj0gNDsKLSAgICAgICAgCisKICAgICAgICAgY29uc3QgU1JDVFlQRSogU0tfUkVTVFJJQ1Qgcm93MCA9IChjb25zdCBTUkNUWVBFKikoc3JjQWRkciArIHkwICogcmIpOwogICAgICAgICBjb25zdCBTUkNUWVBFKiBTS19SRVNUUklDVCByb3cxID0gKGNvbnN0IFNSQ1RZUEUqKShzcmNBZGRyICsgeTEgKiByYik7Ci0gICAgICAgIAorCiAgICAgICAgIEZJTFRFUl9QUk9DKHN1YlgsIHN1YlksCiAgICAgICAgICAgICAgICAgICAgIFNSQ19UT19GSUxURVIocm93MFt4MF0pLAogICAgICAgICAgICAgICAgICAgICBTUkNfVE9fRklMVEVSKHJvdzBbeDFdKSwKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb2xvcnMpOwogICAgICAgICBjb2xvcnMgKz0gMTsKICAgICB9IHdoaWxlICgtLWNvdW50ICE9IDApOwotICAgIAorCiAjaWZkZWYgUE9TVEFNQkxFCiAgICAgUE9TVEFNQkxFKHMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9zaGFkZXJwcm9jLmggYi9zcmMvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9zaGFkZXJwcm9jLmgKaW5kZXggMzNjMjM4Yy4uNmYyYmJlNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCaXRtYXBQcm9jU3RhdGVfc2hhZGVycHJvYy5oCisrKyBiL3NyYy9jb3JlL1NrQml0bWFwUHJvY1N0YXRlX3NoYWRlcnByb2MuaApAQCAtNTEsNyArNTEsNyBAQAogI2lmZGVmIFBSRUFNQkxFCiAgICAgUFJFQU1CTEUocyk7CiAjZW5kaWYKLSAgICAKKwogICAgIGRvIHsKICAgICAgICAgdW5zaWduZWQgc3ViWCA9IFRJTEVYX0xPV19CSVRTKGZ4LCBtYXhYKTsKICAgICAgICAgdW5zaWduZWQgeDAgPSBUSUxFWF9QUk9DRihmeCwgbWF4WCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JpdG1hcFNhbXBsZXIuY3BwIGIvc3JjL2NvcmUvU2tCaXRtYXBTYW1wbGVyLmNwcAppbmRleCA0YzA1YmUyLi43NTVmNzE3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JpdG1hcFNhbXBsZXIuY3BwCisrKyBiL3NyYy9jb3JlL1NrQml0bWFwU2FtcGxlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIGZNYXhYID0gU2tUb1UxNihibS53aWR0aCgpIC0gMSk7CiAgICAgZk1heFkgPSBTa1RvVTE2KGJtLmhlaWdodCgpIC0gMSk7Ci0gICAgCisKICAgICBmVGlsZVByb2NYID0gZ2V0X3RpbGVtb2RlX3Byb2ModG14KTsKICAgICBmVGlsZVByb2NZID0gZ2V0X3RpbGVtb2RlX3Byb2ModG15KTsKIH0KQEAgLTg4LDEzICs4OCwxMyBAQAogICAgICAgICAvLyB0dXJuIHBpeGVsIGNlbnRlcnMgaW50byB0aGUgdG9wLWxlZnQgb2Ygb3VyIGZpbHRlci1ib3gKICAgICAgICAgeCAtPSBTS19GaXhlZEhhbGY7CiAgICAgICAgIHkgLT0gU0tfRml4ZWRIYWxmOwotICAgIAorCiAgICAgICAgIC8vIGNvbXB1dGUgb3VyIHBvaW50ZXJzCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IFNrQml0bWFwKiBiaXRtYXAgPSAmZkJpdG1hcDsKICAgICAgICAgICAgIGludCBpeCA9IHggPj4gMTY7CiAgICAgICAgICAgICBpbnQgaXkgPSB5ID4+IDE2OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXhYID0gZk1heFg7CiAgICAgICAgICAgICBTa1RpbGVNb2RlUHJvYyAgcHJvY1ggPSBmVGlsZVByb2NYOwogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1heFkgPSBmTWF4WTsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICBTa0ZpbHRlclB0clByb2MgcHJvYyA9IFNrR2V0QmlsaW5lYXJGaWx0ZXJQdHJQcm9jKGZQdHJQcm9jVGFibGUsIHgsIHkpOwogICAgICAgICByZXR1cm4gcHJvYyhwMDAsIHAwMSwgcDEwLCBwMTEpOwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBjb25zdCBTa0ZpbHRlclB0clByb2MqIGZQdHJQcm9jVGFibGU7CiB9OwpAQCAtMTM2LDEzICsxMzYsMTMgQEAKICAgICAgICAgLy8gdHVybiBwaXhlbCBjZW50ZXJzIGludG8gdGhlIHRvcC1sZWZ0IG9mIG91ciBmaWx0ZXItYm94CiAgICAgICAgIHggLT0gU0tfRml4ZWRIYWxmOwogICAgICAgICB5IC09IFNLX0ZpeGVkSGFsZjsKLSAgICAKKwogICAgICAgICAvLyBjb21wdXRlIG91ciBwb2ludGVycwogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBTa0JpdG1hcCogYml0bWFwID0gJmZCaXRtYXA7CiAgICAgICAgICAgICBpbnQgaXggPSB4ID4+IDE2OwogICAgICAgICAgICAgaW50IGl5ID0geSA+PiAxNjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWF4WCA9IGZNYXhYOwogICAgICAgICAgICAgU2tUaWxlTW9kZVByb2MgIHByb2NYID0gZlRpbGVQcm9jWDsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXhZID0gZk1heFk7CkBAIC0xNjcsNyArMTY3LDcgQEAKIAogICAgICAgICByZXR1cm4gU2tQaXhlbDE2VG9QaXhlbDMyKCh1aW50MTZfdClTa0NvbXBhY3RfcmdiXzE2KGMpKTsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgY29uc3QgU2tGaWx0ZXJQcm9jKiBmUHJvY1RhYmxlOwogfTsKQEAgLTE5MiwxMiArMTkyLDEyIEBACiAgICAgICAgICAvLyB0dXJuIHBpeGVsIGNlbnRlcnMgaW50byB0aGUgdG9wLWxlZnQgb2Ygb3VyIGZpbHRlci1ib3gKICAgICAgICAgeCAtPSBTS19GaXhlZEhhbGY7CiAgICAgICAgIHkgLT0gU0tfRml4ZWRIYWxmOwotICAgIAorCiAgICAgICAgLy8gY29tcHV0ZSBvdXIgcG9pbnRlcnMKICAgICAgICAgewogICAgICAgICAgICAgaW50IGl4ID0geCA+PiAxNjsKICAgICAgICAgICAgIGludCBpeSA9IHkgPj4gMTY7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1heFggPSBmTWF4WDsKICAgICAgICAgICAgIFNrVGlsZU1vZGVQcm9jICBwcm9jWCA9IGZUaWxlUHJvY1g7CiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWF4WSA9IGZNYXhZOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAKICAgICAgICAgcmV0dXJuIGM7CiAgICAgfQotICAgIAorCiBwcml2YXRlOgogICAgIGNvbnN0IFNrRmlsdGVyUHRyUHJvYyogZlB0clByb2NUYWJsZTsKIH07CkBAIC0yNTEsMTMgKzI1MSwxMyBAQAogICAgICAgICAvLyB0dXJuIHBpeGVsIGNlbnRlcnMgaW50byB0aGUgdG9wLWxlZnQgb2Ygb3VyIGZpbHRlci1ib3gKICAgICAgICAgeCAtPSBTS19GaXhlZEhhbGY7CiAgICAgICAgIHkgLT0gU0tfRml4ZWRIYWxmOwotICAgIAorCiAgICAgICAgIC8vIGNvbXB1dGUgb3VyIHBvaW50ZXJzCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IFNrQml0bWFwKiBiaXRtYXAgPSAmZkJpdG1hcDsKICAgICAgICAgICAgIGludCBpeCA9IHggPj4gMTY7CiAgICAgICAgICAgICBpbnQgaXkgPSB5ID4+IDE2OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXhYID0gZk1heFg7CiAgICAgICAgICAgICBTa1RpbGVNb2RlUHJvYyAgcHJvY1ggPSBmVGlsZVByb2NYOwogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1heFkgPSBmTWF4WTsKQEAgLTI4MCw3ICsyODAsNyBAQAogICAgICAgICBpbnQgYWxwaGEgPSBwcm9jKCpwMDAsICpwMDEsICpwMTAsICpwMTEpOwogICAgICAgICByZXR1cm4gU2tBbHBoYU11bFEoZkNvbG9yLCBTa0FscGhhMjU1VG8yNTYoYWxwaGEpKTsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgY29uc3QgU2tGaWx0ZXJQcm9jKiBmUHJvY1RhYmxlOwogICAgIFNrUE1Db2xvciAgICAgICAgICAgZkNvbG9yOwpAQCAtMzAzLDExICszMDMsMTEgQEAKICAgICB7CiAgICAgICAgIGludCBpeCA9IFNrRml4ZWRGbG9vcih4KTsKICAgICAgICAgaW50IGl5ID0gU2tGaXhlZEZsb29yKHkpOwotICAgICAgICAKKwogICAgICAgICBpbnQgYWxwaGEgPSAqZkJpdG1hcC5nZXRBZGRyOChmVGlsZVByb2NYKGl4LCBmTWF4WCksIGZUaWxlUHJvY1koaXksIGZNYXhZKSk7CiAgICAgICAgIHJldHVybiBTa0FscGhhTXVsUShmQ29sb3IsIFNrQWxwaGEyNTVUbzI1NihhbHBoYSkpOwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBjb25zdCBTa0ZpbHRlclByb2MqIGZQcm9jVGFibGU7CiAgICAgU2tQTUNvbG9yICAgICAgICAgICBmQ29sb3I7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JpdG1hcFNoYWRlcjE2QmlsZXJwVGVtcGxhdGUuaCBiL3NyYy9jb3JlL1NrQml0bWFwU2hhZGVyMTZCaWxlcnBUZW1wbGF0ZS5oCmluZGV4IDA3NjllMWMuLjQzNWI4MDYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQml0bWFwU2hhZGVyMTZCaWxlcnBUZW1wbGF0ZS5oCisrKyBiL3NyYy9jb3JlL1NrQml0bWFwU2hhZGVyMTZCaWxlcnBUZW1wbGF0ZS5oCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgdmlydHVhbCB2b2lkIHNoYWRlU3BhbihpbnQgeCwgaW50IHksIFNrUE1Db2xvciBkc3RDW10sIGludCBjb3VudCkKICAgICB7CiAgICAgICAgIFNrQVNTRVJUKGNvdW50ID4gMCk7Ci0gICAgICAgIAorCiAgICAgICAgIFU4Q1BVIGFscGhhID0gdGhpcy0+Z2V0UGFpbnRBbHBoYSgpOwogCiAgICAgICAgIGNvbnN0IFNrTWF0cml4JiBpbnYgPSB0aGlzLT5nZXRUb3RhbEludmVyc2UoKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBTa0ZpeGVkIGZ5ID0gKnNyY1hZKysgLSBTS19GaXhlZEhhbGY7CiAgICAgICAgICAgICAgICAgICAgIGludCBpeCA9IGZ4ID4+IDE2OwogICAgICAgICAgICAgICAgICAgICBpbnQgaXkgPSBmeSA+PiAxNjsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklMRVJQX0JJVE1BUDE2X1NIQURFUl9UWVBFICpwMDAsICpwMDEsICpwMTAsICpwMTE7CiAKICAgICAgICAgICAgICAgICAgICAgcDAwID0gcDAxID0gKChjb25zdCBCSUxFUlBfQklUTUFQMTZfU0hBREVSX1RZUEUqKSgoY29uc3QgY2hhciopc3JjUGl4ZWxzICsKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIGludCBpeCA9IGZ4ID4+IDE2OwogICAgICAgICAgICAgICAgIGludCBpeSA9IGZ5ID4+IDE2OwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY29uc3QgQklMRVJQX0JJVE1BUDE2X1NIQURFUl9UWVBFICpwMDAsICpwMDEsICpwMTAsICpwMTE7CiAKICAgICAgICAgICAgICAgICBwMDAgPSBwMDEgPSAoKGNvbnN0IEJJTEVSUF9CSVRNQVAxNl9TSEFERVJfVFlQRSopKChjb25zdCBjaGFyKilzcmNQaXhlbHMgKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCaXRtYXBTaGFkZXJUZW1wbGF0ZS5oIGIvc3JjL2NvcmUvU2tCaXRtYXBTaGFkZXJUZW1wbGF0ZS5oCmluZGV4IGJmYjEwZDkuLjIwZTU1MTggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQml0bWFwU2hhZGVyVGVtcGxhdGUuaAorKysgYi9zcmMvY29yZS9Ta0JpdG1hcFNoYWRlclRlbXBsYXRlLmgKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9GSUxURVJfQklUTUFQX1NIQURFUl9USUxFTU9ERSkKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIHNldENvbnRleHQoY29uc3QgU2tCaXRtYXAmIGRldmljZSwgY29uc3QgU2tQYWludCYgcGFpbnQsIGNvbnN0IFNrTWF0cml4JiBtYXRyaXgpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMtPklOSEVSSVRFRDo6c2V0Q29udGV4dChkZXZpY2UsIHBhaW50LCBtYXRyaXgpKQpAQCAtMjIxLDcgKzIyMSw3IEBACiAgICAgICAgICAgICB3aGlsZSAoKGNvdW50ID0gaXRlci5uZXh0KCkpICE9IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgU2tGaXhlZCogc3JjWFkgPSBpdGVyLmdldFhZKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB3aGlsZSAoLS1jb3VudCA+PSAwKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZnggPSAqc3JjWFkrKzsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQml0bWFwX3Njcm9sbC5jcHAgYi9zcmMvY29yZS9Ta0JpdG1hcF9zY3JvbGwuY3BwCmluZGV4IGRlNDcyNWIuLjM2ZTVmMDUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQml0bWFwX3Njcm9sbC5jcHAKKysrIGIvc3JjL2NvcmUvU2tCaXRtYXBfc2Nyb2xsLmNwcApAQCAtNDMsOCArNDMsOCBAQAogICAgIH0KIAogICAgIGludCB3aWR0aCA9IHRoaXMtPndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHRoaXMtPmhlaWdodCgpOyAgICAKLSAgICAKKyAgICBpbnQgaGVpZ2h0ID0gdGhpcy0+aGVpZ2h0KCk7CisKICAgICAvLyBjaGVjayBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KICAgICBpZiAoKGR4IHwgZHkpID09IDAgfHwgd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkgewogICAgICAgICBpZiAoTlVMTCAhPSBpbnZhbCkgewpAQCAtNTYsMjMgKzU2LDIzIEBACiAgICAgLy8gY29tcHV0ZSB0aGUgaW52YWwgcmVnaW9uIG5vdywgYmVmb3JlIHdlIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBpeGVscwogICAgIGlmIChOVUxMICE9IGludmFsKSB7CiAgICAgICAgIFNrSVJlY3QgcjsKLSAgICAgICAgCisKICAgICAgICAgci5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIC8vIGluaXRpYWwgdGhlIHJlZ2lvbiB3aXRoIHRoZSBlbnRpcmUgYm91bmRzCiAgICAgICAgIGludmFsLT5zZXRSZWN0KHIpOwogICAgICAgICAvLyBkbyB0aGUgInNjcm9sbCIKICAgICAgICAgci5vZmZzZXQoZHgsIGR5KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc2Nyb2xsZWQgY29tcGxldGVseSBhd2F5CiAgICAgICAgIGlmICghU2tJUmVjdDo6SW50ZXJzZWN0cyhyLCBpbnZhbC0+Z2V0Qm91bmRzKCkpKSB7CiAgICAgICAgICAgICAvLyBpbnZhbCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQuLi4KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGRpcnR5IGFyZWEKICAgICAgICAgaW52YWwtPm9wKHIsIFNrUmVnaW9uOjprRGlmZmVyZW5jZV9PcCk7CiAgICAgfQotICAgIAorCiAgICAgU2tBdXRvTG9ja1BpeGVscyAgICBhbHAoKnRoaXMpOwogICAgIC8vIGlmIHdlIGhhdmUgbm8gcGl4ZWxzLCBqdXN0IHJldHVybiAoaW52YWwgaXMgYWxyZWFkeSB1cGRhdGVkKQogICAgIC8vIGRvbid0IGNhbGwgcmVhZHlUb0RyYXcoKSwgc2luY2Ugd2UgZG9uJ3QgcmVxdWlyZSBhIGNvbG9ydGFibGUgcGVyIHNlCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JsaXRCV01hc2tUZW1wbGF0ZS5oIGIvc3JjL2NvcmUvU2tCbGl0QldNYXNrVGVtcGxhdGUuaAppbmRleCBlY2JkZmIzLi4xNWVkNTRlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JsaXRCV01hc2tUZW1wbGF0ZS5oCisrKyBiL3NyYy9jb3JlL1NrQmxpdEJXTWFza1RlbXBsYXRlLmgKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgfSB3aGlsZSAoLS1oZWlnaHQgIT0gMCk7CiAgICAgICAgIH0KICAgICB9Ci19ICAgCit9CiAKICN1bmRlZiBTS19CTElUQldNQVNLX05BTUUKICN1bmRlZiBTS19CTElUQldNQVNLX0FSR1MKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQmxpdE1hc2suaCBiL3NyYy9jb3JlL1NrQmxpdE1hc2suaAppbmRleCA5YzBmZTBmLi5lYTFkYTI1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JsaXRNYXNrLmgKKysrIGIvc3JjL2NvcmUvU2tCbGl0TWFzay5oCkBAIC0yOSwxNCArMjksMTQgQEAKICAgICB0eXBlZGVmIHZvaWQgKCpDb2xvclByb2MpKHZvaWQqIGRzdCwgc2l6ZV90IGRzdFJCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogbWFzaywgc2l6ZV90IG1hc2tSQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ29sb3IgY29sb3IsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgCisKICAgICAvKioKLSAgICAgKiAgRnVuY3Rpb24gcG9pbnRlciB0aGF0IGJsaXRzIGEgcm93IG9mIG1hc2sobGNkMTYpIGludG8gYSByb3cgb2YgZHN0IAorICAgICAqICBGdW5jdGlvbiBwb2ludGVyIHRoYXQgYmxpdHMgYSByb3cgb2YgbWFzayhsY2QxNikgaW50byBhIHJvdyBvZiBkc3QKICAgICAgKiAgY29sb3JpemVkIGJ5IGEgc2luZ2xlIGNvbG9yLiBUaGUgbnVtYmVyIG9mIHBpeGVscyB0byBibGl0IGlzIHNwZWNpZmllZAogICAgICAqICBieSB3aWR0aC4KICAgICAgKi8KICAgICB0eXBlZGVmIHZvaWQgKCpCbGl0TENEMTZSb3dQcm9jKShTa1BNQ29sb3IgZHN0W10sIGNvbnN0IHVpbnQxNl90IHNyY1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ29sb3IgY29sb3IsIGludCB3aWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDb2xvciBjb2xvciwgaW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUE1Db2xvciBvcGFxdWVEc3QpOwogCiAgICAgLyoqCkBAIC00NiwxOSArNDYsMTkgQEAKICAgICAgKi8KICAgICB0eXBlZGVmIHZvaWQgKCpSb3dQcm9jKSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIG1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQTUNvbG9yKiBzcmMsIGludCB3aWR0aCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgUHVibGljIGVudHJ5LXBvaW50IHRvIHJldHVybiBhIGJsaXRtYXNrIENvbG9yUHJvYy4KICAgICAgKiAgTWF5IHJldHVybiBOVUxMIGlmIGNvbmZpZyBvciBmb3JtYXQgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgICAgICovCiAgICAgc3RhdGljIENvbG9yUHJvYyBDb2xvckZhY3RvcnkoU2tCaXRtYXA6OkNvbmZpZywgU2tNYXNrOjpGb3JtYXQsIFNrQ29sb3IpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJldHVybiBlaXRoZXIgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemVkIGJsaXRtYXNrIENvbG9yUHJvYywKICAgICAgKiAgb3IgTlVMTCBpZiBubyBvcHRpbWl6ZWQgcm91dGluZSBpcyBhdmFpbGFibGUuCiAgICAgICovCiAgICAgc3RhdGljIENvbG9yUHJvYyBQbGF0Zm9ybUNvbG9yUHJvY3MoU2tCaXRtYXA6OkNvbmZpZywgU2tNYXNrOjpGb3JtYXQsIFNrQ29sb3IpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogIFB1YmxpYyBlbnRyeS1wb2ludCB0byByZXR1cm4gYSBibGl0Y29sb3IgQmxpdExDRDE2Um93UHJvYy4KICAgICAgKi8KQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgKiAgTWF5IHJldHVybiBOVUxMIGlmIGNvbmZpZyBvciBmb3JtYXQgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgICAgICovCiAgICAgc3RhdGljIFJvd1Byb2MgUm93RmFjdG9yeShTa0JpdG1hcDo6Q29uZmlnLCBTa01hc2s6OkZvcm1hdCwgUm93RmxhZ3MpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJldHVybiBlaXRoZXIgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemVkIGJsaXRtYXNrIFJvd1Byb2MsCiAgICAgICogIG9yIE5VTEwgaWYgbm8gb3B0aW1pemVkIHJvdXRpbmUgaXMgYXZhaWxhYmxlLgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCbGl0TWFza19EMzIuY3BwIGIvc3JjL2NvcmUvU2tCbGl0TWFza19EMzIuY3BwCmluZGV4IDY1NzZhY2IuLjRmYjk3NGIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQmxpdE1hc2tfRDMyLmNwcAorKysgYi9zcmMvY29yZS9Ta0JsaXRNYXNrX0QzMi5jcHAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBpZiAocHJvYykgewogICAgICAgICByZXR1cm4gcHJvYzsKICAgICB9Ci0gICAgCisKICAgICBpZiAoaXNPcGFxdWUpIHsKICAgICAgICAgcmV0dXJuICBTa0JsaXRMQ0QxNk9wYXF1ZVJvdzsKICAgICB9IGVsc2UgewpAQCAtODAsMTEgKzgwLDExIEBACiBzdGF0aWMgdm9pZCBEMzJfTENEMTZfUHJvYyh2b2lkKiBTS19SRVNUUklDVCBkc3QsIHNpemVfdCBkc3RSQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIFNLX1JFU1RSSUNUIG1hc2ssIHNpemVfdCBtYXNrUkIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0NvbG9yIGNvbG9yLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAKLSAgICBTa1BNQ29sb3IqCQlkc3RSb3cgPSAoU2tQTUNvbG9yKilkc3Q7CisKKyAgICBTa1BNQ29sb3IqICAgICAgICBkc3RSb3cgPSAoU2tQTUNvbG9yKilkc3Q7CiAgICAgY29uc3QgdWludDE2X3QqIHNyY1JvdyA9IChjb25zdCB1aW50MTZfdCopbWFzazsKICAgICBTa1BNQ29sb3IgICAgICAgb3BhcXVlRHN0OwotICAgIAorCiAgICAgU2tCbGl0TWFzazo6QmxpdExDRDE2Um93UHJvYyBwcm9jID0gTlVMTDsKICAgICBib29sIGlzT3BhcXVlID0gKDB4RkYgPT0gU2tDb2xvckdldEEoY29sb3IpKTsKICAgICBwcm9jID0gU2tCbGl0TWFzazo6QmxpdExDRDE2Um93RmFjdG9yeShpc09wYXF1ZSk7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgb3BhcXVlRHN0ID0gMDsgIC8vIGlnbm9yZWQKICAgICB9Ci0gICAgCisKICAgICBkbyB7CiAgICAgICAgIHByb2MoZHN0Um93LCBzcmNSb3csIGNvbG9yLCB3aWR0aCwgb3BhcXVlRHN0KTsKICAgICAgICAgZHN0Um93ID0gKFNrUE1Db2xvciopKChjaGFyKilkc3RSb3cgKyBkc3RSQik7CkBAIC0xMTEsMjggKzExMSwyOCBAQAogICAgIGludCBzcmNSID0gU2tDb2xvckdldFIoY29sb3IpOwogICAgIGludCBzcmNHID0gU2tDb2xvckdldEcoY29sb3IpOwogICAgIGludCBzcmNCID0gU2tDb2xvckdldEIoY29sb3IpOwotICAgIAorCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CiAgICAgICAgIFNrUE1Db2xvciBtYXNrID0gc3JjW2ldOwogICAgICAgICBpZiAoMCA9PSBtYXNrKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTa1BNQ29sb3IgZCA9IGRzdFtpXTsKLSAgICAgICAgCisKICAgICAgICAgaW50IG1hc2tSID0gU2tHZXRQYWNrZWRSMzIobWFzayk7CiAgICAgICAgIGludCBtYXNrRyA9IFNrR2V0UGFja2VkRzMyKG1hc2spOwogICAgICAgICBpbnQgbWFza0IgPSBTa0dldFBhY2tlZEIzMihtYXNrKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gTm93IHVwc2NhbGUgdGhlbSB0byAwLi4yNTYsIHNvIHdlIGNhbiB1c2UgU2tBbHBoYUJsZW5kCiAgICAgICAgIG1hc2tSID0gU2tBbHBoYTI1NVRvMjU2KG1hc2tSKTsKICAgICAgICAgbWFza0cgPSBTa0FscGhhMjU1VG8yNTYobWFza0cpOwogICAgICAgICBtYXNrQiA9IFNrQWxwaGEyNTVUbzI1NihtYXNrQik7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBkc3RSID0gU2tHZXRQYWNrZWRSMzIoZCk7CiAgICAgICAgIGludCBkc3RHID0gU2tHZXRQYWNrZWRHMzIoZCk7CiAgICAgICAgIGludCBkc3RCID0gU2tHZXRQYWNrZWRCMzIoZCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIExDRCBibGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgZHN0IGlzIGtub3duL3JlcXVpcmVkCiAgICAgICAgIC8vIHRvIGJlIG9wYXF1ZQogICAgICAgICBkc3RbaV0gPSBTa1BhY2tBUkdCMzIoMHhGRiwKQEAgLTE0OSwzNCArMTQ5LDM0IEBACiAgICAgaW50IHNyY1IgPSBTa0NvbG9yR2V0Uihjb2xvcik7CiAgICAgaW50IHNyY0cgPSBTa0NvbG9yR2V0Ryhjb2xvcik7CiAgICAgaW50IHNyY0IgPSBTa0NvbG9yR2V0Qihjb2xvcik7Ci0gICAgCisKICAgICBzcmNBID0gU2tBbHBoYTI1NVRvMjU2KHNyY0EpOwotICAgIAorCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CiAgICAgICAgIFNrUE1Db2xvciBtYXNrID0gc3JjW2ldOwogICAgICAgICBpZiAoMCA9PSBtYXNrKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTa1BNQ29sb3IgZCA9IGRzdFtpXTsKLSAgICAgICAgCisKICAgICAgICAgaW50IG1hc2tSID0gU2tHZXRQYWNrZWRSMzIobWFzayk7CiAgICAgICAgIGludCBtYXNrRyA9IFNrR2V0UGFja2VkRzMyKG1hc2spOwogICAgICAgICBpbnQgbWFza0IgPSBTa0dldFBhY2tlZEIzMihtYXNrKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gTm93IHVwc2NhbGUgdGhlbSB0byAwLi4yNTYsIHNvIHdlIGNhbiB1c2UgU2tBbHBoYUJsZW5kCiAgICAgICAgIG1hc2tSID0gU2tBbHBoYTI1NVRvMjU2KG1hc2tSKTsKICAgICAgICAgbWFza0cgPSBTa0FscGhhMjU1VG8yNTYobWFza0cpOwogICAgICAgICBtYXNrQiA9IFNrQWxwaGEyNTVUbzI1NihtYXNrQik7Ci0gICAgICAgIAorCiAgICAgICAgIG1hc2tSID0gbWFza1IgKiBzcmNBID4+IDg7CiAgICAgICAgIG1hc2tHID0gbWFza0cgKiBzcmNBID4+IDg7CiAgICAgICAgIG1hc2tCID0gbWFza0IgKiBzcmNBID4+IDg7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBkc3RSID0gU2tHZXRQYWNrZWRSMzIoZCk7CiAgICAgICAgIGludCBkc3RHID0gU2tHZXRQYWNrZWRHMzIoZCk7CiAgICAgICAgIGludCBkc3RCID0gU2tHZXRQYWNrZWRCMzIoZCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIExDRCBibGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgZHN0IGlzIGtub3duL3JlcXVpcmVkCiAgICAgICAgIC8vIHRvIGJlIG9wYXF1ZQogICAgICAgICBkc3RbaV0gPSBTa1BhY2tBUkdCMzIoMHhGRiwKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgIFNrQVNTRVJUKGhlaWdodCA+IDApOwogICAgIFNrUE1Db2xvciogU0tfUkVTVFJJQ1QgZHN0Um93ID0gKFNrUE1Db2xvciopZHN0OwogICAgIGNvbnN0IFNrUE1Db2xvciogU0tfUkVTVFJJQ1Qgc3JjUm93ID0gKGNvbnN0IFNrUE1Db2xvciopbWFzazsKLSAgICAKKwogICAgIGRvIHsKICAgICAgICAgYmxpdF9sY2QzMl9yb3coZHN0Um93LCBzcmNSb3csIGNvbG9yLCB3aWR0aCk7CiAgICAgICAgIGRzdFJvdyA9IChTa1BNQ29sb3IqKSgoY2hhciopZHN0Um93ICsgZHN0UkIpOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAgICAgU2tBU1NFUlQoaGVpZ2h0ID4gMCk7CiAgICAgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBkc3RSb3cgPSAoU2tQTUNvbG9yKilkc3Q7CiAgICAgY29uc3QgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBzcmNSb3cgPSAoY29uc3QgU2tQTUNvbG9yKiltYXNrOwotICAgIAorCiAgICAgZG8gewogICAgICAgICBibGl0X2xjZDMyX29wYXF1ZV9yb3coZHN0Um93LCBzcmNSb3csIGNvbG9yLCB3aWR0aCk7CiAgICAgICAgIGRzdFJvdyA9IChTa1BNQ29sb3IqKSgoY2hhciopZHN0Um93ICsgZHN0UkIpOwpAQCAtMzg4LDcgKzM4OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc3JjX2FscGhhX2JsZW5kKGludCBzcmMsIGludCBkc3QsIGludCBzcmNBLCBpbnQgbWFzaykgewotICAgIAorCiAgICAgcmV0dXJuIGRzdCArIG11bChzcmMgLSBtdWwoc3JjQSwgZHN0KSwgbWFzayk7CiB9CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogICAgICAgICBpZiAoMCA9PSBtKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTa1BNQ29sb3IgcyA9IHNyY1tpXTsKICAgICAgICAgU2tQTUNvbG9yIGQgPSBkc3RbaV07CiAKQEAgLTQxNywxNSArNDE3LDE1IEBACiAgICAgICAgIGludCBtYXNrUiA9IFNrR2V0UGFja2VkUjE2KG0pID4+IChTS19SMTZfQklUUyAtIDUpOwogICAgICAgICBpbnQgbWFza0cgPSBTa0dldFBhY2tlZEcxNihtKSA+PiAoU0tfRzE2X0JJVFMgLSA1KTsKICAgICAgICAgaW50IG1hc2tCID0gU2tHZXRQYWNrZWRCMTYobSkgPj4gKFNLX0IxNl9CSVRTIC0gNSk7Ci0gICAgICAgIAorCiAgICAgICAgIG1hc2tSID0gdXBzY2FsZTMxVG8yNTUobWFza1IpOwogICAgICAgICBtYXNrRyA9IHVwc2NhbGUzMVRvMjU1KG1hc2tHKTsKICAgICAgICAgbWFza0IgPSB1cHNjYWxlMzFUbzI1NShtYXNrQik7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBkc3RSID0gU2tHZXRQYWNrZWRSMzIoZCk7CiAgICAgICAgIGludCBkc3RHID0gU2tHZXRQYWNrZWRHMzIoZCk7CiAgICAgICAgIGludCBkc3RCID0gU2tHZXRQYWNrZWRCMzIoZCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIExDRCBibGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgZHN0IGlzIGtub3duL3JlcXVpcmVkCiAgICAgICAgIC8vIHRvIGJlIG9wYXF1ZQogICAgICAgICBkc3RbaV0gPSBTa1BhY2tBUkdCMzIoMHhGRiwKQEAgLTQ0MywxMCArNDQzLDEwIEBACiAgICAgICAgIGlmICgwID09IG0pIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFNrUE1Db2xvciBzID0gc3JjW2ldOwogICAgICAgICBTa1BNQ29sb3IgZCA9IGRzdFtpXTsKLSAgICAgICAgCisKICAgICAgICAgaW50IHNyY1IgPSBTa0dldFBhY2tlZFIzMihzKTsKICAgICAgICAgaW50IHNyY0cgPSBTa0dldFBhY2tlZEczMihzKTsKICAgICAgICAgaW50IHNyY0IgPSBTa0dldFBhY2tlZEIzMihzKTsKQEAgLTQ1NywxNiArNDU3LDE2IEBACiAgICAgICAgIGludCBtYXNrUiA9IFNrR2V0UGFja2VkUjE2KG0pID4+IChTS19SMTZfQklUUyAtIDUpOwogICAgICAgICBpbnQgbWFza0cgPSBTa0dldFBhY2tlZEcxNihtKSA+PiAoU0tfRzE2X0JJVFMgLSA1KTsKICAgICAgICAgaW50IG1hc2tCID0gU2tHZXRQYWNrZWRCMTYobSkgPj4gKFNLX0IxNl9CSVRTIC0gNSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE5vdyB1cHNjYWxlIHRoZW0gdG8gMC4uMzIsIHNvIHdlIGNhbiB1c2UgYmxlbmQzMgogICAgICAgICBtYXNrUiA9IFNrVXBzY2FsZTMxVG8zMihtYXNrUik7CiAgICAgICAgIG1hc2tHID0gU2tVcHNjYWxlMzFUbzMyKG1hc2tHKTsKICAgICAgICAgbWFza0IgPSBTa1Vwc2NhbGUzMVRvMzIobWFza0IpOwotICAgICAgICAKKwogICAgICAgICBpbnQgZHN0UiA9IFNrR2V0UGFja2VkUjMyKGQpOwogICAgICAgICBpbnQgZHN0RyA9IFNrR2V0UGFja2VkRzMyKGQpOwogICAgICAgICBpbnQgZHN0QiA9IFNrR2V0UGFja2VkQjMyKGQpOwotICAgICAgICAKKwogICAgICAgICAvLyBMQ0QgYmxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhlIGRzdCBpcyBrbm93bi9yZXF1aXJlZAogICAgICAgICAvLyB0byBiZSBvcGFxdWUKICAgICAgICAgZHN0W2ldID0gU2tQYWNrQVJHQjMyKDB4RkYsCkBAIC00OTAsMTEgKzQ5MCwxMSBAQAogICAgICAgICBpbnQgc3JjUiA9IFNrR2V0UGFja2VkUjMyKHMpOwogICAgICAgICBpbnQgc3JjRyA9IFNrR2V0UGFja2VkRzMyKHMpOwogICAgICAgICBpbnQgc3JjQiA9IFNrR2V0UGFja2VkQjMyKHMpOwotICAgICAgICAKKwogICAgICAgICBzcmNBID0gU2tBbHBoYTI1NVRvMjU2KHNyY0EpOwotICAgICAgICAKKwogICAgICAgICBTa1BNQ29sb3IgZCA9IGRzdFtpXTsKLSAgICAgICAgCisKICAgICAgICAgaW50IG1hc2tSID0gU2tHZXRQYWNrZWRSMzIobSk7CiAgICAgICAgIGludCBtYXNrRyA9IFNrR2V0UGFja2VkRzMyKG0pOwogICAgICAgICBpbnQgbWFza0IgPSBTa0dldFBhY2tlZEIzMihtKTsKQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgICAgICBpbnQgZHN0UiA9IFNrR2V0UGFja2VkUjMyKGQpOwogICAgICAgICBpbnQgZHN0RyA9IFNrR2V0UGFja2VkRzMyKGQpOwogICAgICAgICBpbnQgZHN0QiA9IFNrR2V0UGFja2VkQjMyKGQpOwotICAgICAgICAKKwogICAgICAgICAvLyBMQ0QgYmxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhlIGRzdCBpcyBrbm93bi9yZXF1aXJlZAogICAgICAgICAvLyB0byBiZSBvcGFxdWUKICAgICAgICAgZHN0W2ldID0gU2tQYWNrQVJHQjMyKDB4RkYsCkBAIC01MjUsNyArNTI1LDcgQEAKICAgICAgICAgaWYgKDAgPT0gbSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU2tQTUNvbG9yIHMgPSBzcmNbaV07CiAgICAgICAgIFNrUE1Db2xvciBkID0gZHN0W2ldOwogCkBAIC01NDAsNyArNTQwLDcgQEAKICAgICAgICAgaW50IGRzdFIgPSBTa0dldFBhY2tlZFIzMihkKTsKICAgICAgICAgaW50IGRzdEcgPSBTa0dldFBhY2tlZEczMihkKTsKICAgICAgICAgaW50IGRzdEIgPSBTa0dldFBhY2tlZEIzMihkKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gTm93IHVwc2NhbGUgdGhlbSB0byAwLi4yNTYsIHNvIHdlIGNhbiB1c2UgU2tBbHBoYUJsZW5kCiAgICAgICAgIG1hc2tSID0gU2tBbHBoYTI1NVRvMjU2KG1hc2tSKTsKICAgICAgICAgbWFza0cgPSBTa0FscGhhMjU1VG8yNTYobWFza0cpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCbGl0Um93X0QxNi5jcHAgYi9zcmMvY29yZS9Ta0JsaXRSb3dfRDE2LmNwcAppbmRleCA1ZTY3NWU1Li45NDUzNDg4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDE2LmNwcAorKysgYi9zcmMvY29yZS9Ta0JsaXRSb3dfRDE2LmNwcApAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBzcmMsIGludCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVOENQVSBhbHBoYSwgaW50IC8qeCovLCBpbnQgLyp5Ki8pIHsKICAgICBTa0FTU0VSVCgyNTUgPiBhbHBoYSk7Ci0gICAgCisKICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIFNrUE1Db2xvciBzYyA9ICpzcmMrKzsKQEAgLTg2LDEyICs4NiwxMiBAQAogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiBzdGF0aWMgdm9pZCBTMzJfRDU2NV9PcGFxdWVfRGl0aGVyKHVpbnQxNl90KiBTS19SRVNUUklDVCBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBVOENQVSBhbHBoYSwgaW50IHgsIGludCB5KSB7CiAgICAgU2tBU1NFUlQoMjU1ID09IGFscGhhKTsKLSAgICAKKwogICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgRElUSEVSXzU2NV9TQ0FOKHkpOwogICAgICAgICBkbyB7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUE1Db2xvciogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBVOENQVSBhbHBoYSwgaW50IHgsIGludCB5KSB7CiAgICAgU2tBU1NFUlQoMjU1ID4gYWxwaGEpOwotICAgIAorCiAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICBpbnQgc2NhbGUgPSBTa0FscGhhMjU1VG8yNTYoYWxwaGEpOwogICAgICAgICBESVRIRVJfNTY1X1NDQU4oeSk7CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICAgIFNrUE1Db2xvciBjID0gKnNyYysrOwogICAgICAgICAgICAgU2tQTUNvbG9yQXNzZXJ0KGMpOwogCi0gICAgICAgICAgICBpbnQgZGl0aGVyID0gRElUSEVSX1ZBTFVFKHgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGRpdGhlciA9IERJVEhFUl9WQUxVRSh4KTsKICAgICAgICAgICAgIGludCBzciA9IFNrR2V0UGFja2VkUjMyKGMpOwogICAgICAgICAgICAgaW50IHNnID0gU2tHZXRQYWNrZWRHMzIoYyk7CiAgICAgICAgICAgICBpbnQgc2IgPSBTa0dldFBhY2tlZEIzMihjKTsKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BNQ29sb3IqIFNLX1JFU1RSSUNUIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBVOENQVSBhbHBoYSwgaW50IHgsIGludCB5KSB7CiAgICAgU2tBU1NFUlQoMjU1ID09IGFscGhhKTsKLSAgICAKKwogICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgRElUSEVSXzU2NV9TQ0FOKHkpOwogICAgICAgICBkbyB7CkBAIC0xNDYsMTYgKzE0NiwxNiBAQAogICAgICAgICAgICAgU2tQTUNvbG9yQXNzZXJ0KGMpOwogICAgICAgICAgICAgaWYgKGMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhID0gU2tHZXRQYWNrZWRBMzIoYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpbnQgZCA9IFNrQWxwaGFNdWwoRElUSEVSX1ZBTFVFKHgpLCBTa0FscGhhMjU1VG8yNTYoYSkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgc3IgPSBTa0dldFBhY2tlZFIzMihjKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzZyA9IFNrR2V0UGFja2VkRzMyKGMpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNiID0gU2tHZXRQYWNrZWRCMzIoYyk7CiAgICAgICAgICAgICAgICAgc3IgPSBTa0RJVEhFUl9SMzJfRk9SXzU2NShzciwgZCk7CiAgICAgICAgICAgICAgICAgc2cgPSBTa0RJVEhFUl9HMzJfRk9SXzU2NShzZywgZCk7CiAgICAgICAgICAgICAgICAgc2IgPSBTa0RJVEhFUl9CMzJfRk9SXzU2NShzYiwgZCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNfZXhwYW5kZWQgPSAoc2cgPDwgMjQpIHwgKHNyIDw8IDEzKSB8IChzYiA8PCAyKTsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RfZXhwYW5kZWQgPSBTa0V4cGFuZF9yZ2JfMTYoKmRzdCk7CiAgICAgICAgICAgICAgICAgZHN0X2V4cGFuZGVkID0gZHN0X2V4cGFuZGVkICogKFNrQWxwaGEyNTVUbzI1NigyNTUgLSBhKSA+PiAzKTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUE1Db2xvciogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgVThDUFUgYWxwaGEsIGludCB4LCBpbnQgeSkgewogICAgIFNrQVNTRVJUKDI1NSA+IGFscGhhKTsKLSAgICAKKwogICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgaW50IHNyY19zY2FsZSA9IFNrQWxwaGEyNTVUbzI1NihhbHBoYSk7CiAgICAgICAgIERJVEhFUl81NjVfU0NBTih5KTsKQEAgLTE4NSwxOCArMTg1LDE4IEBACiAgICAgICAgICAgICAgICAgaW50IHNhID0gU2tHZXRQYWNrZWRBMzIoYyk7CiAgICAgICAgICAgICAgICAgaW50IGRzdF9zY2FsZSA9IFNrQWxwaGEyNTVUbzI1NigyNTUgLSBTa0FscGhhTXVsKHNhLCBzcmNfc2NhbGUpKTsKICAgICAgICAgICAgICAgICBpbnQgZGl0aGVyID0gRElUSEVSX1ZBTFVFKHgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaW50IHNyID0gU2tHZXRQYWNrZWRSMzIoYyk7CiAgICAgICAgICAgICAgICAgaW50IHNnID0gU2tHZXRQYWNrZWRHMzIoYyk7CiAgICAgICAgICAgICAgICAgaW50IHNiID0gU2tHZXRQYWNrZWRCMzIoYyk7CiAgICAgICAgICAgICAgICAgc3IgPSBTa0RJVEhFUl9SMzJUbzU2NShzciwgZGl0aGVyKTsKICAgICAgICAgICAgICAgICBzZyA9IFNrRElUSEVSX0czMlRvNTY1KHNnLCBkaXRoZXIpOwogICAgICAgICAgICAgICAgIHNiID0gU2tESVRIRVJfQjMyVG81NjUoc2IsIGRpdGhlcik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpbnQgZHIgPSAoc3IgKiBzcmNfc2NhbGUgKyBTa0dldFBhY2tlZFIxNihkKSAqIGRzdF9zY2FsZSkgPj4gODsKICAgICAgICAgICAgICAgICBpbnQgZGcgPSAoc2cgKiBzcmNfc2NhbGUgKyBTa0dldFBhY2tlZEcxNihkKSAqIGRzdF9zY2FsZSkgPj4gODsKICAgICAgICAgICAgICAgICBpbnQgZGIgPSAoc2IgKiBzcmNfc2NhbGUgKyBTa0dldFBhY2tlZEIxNihkKSAqIGRzdF9zY2FsZSkgPj4gODsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICpkc3QgPSBTa1BhY2tSR0IxNihkciwgZGcsIGRiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRzdCArPSAxOwpAQCAtMjI1LDcgKzIyNSw3IEBACiB9OwogCiBleHRlcm4gU2tCbGl0Um93OjpQcm9jIFNrQmxpdFJvd19GYWN0b3J5XzQ0NDQodW5zaWduZWQgZmxhZ3MpOwotICAgIAorCiBTa0JsaXRSb3c6OlByb2MgU2tCbGl0Um93OjpGYWN0b3J5KHVuc2lnbmVkIGZsYWdzLCBTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZykgewogICAgIFNrQVNTRVJUKGZsYWdzIDwgU0tfQVJSQVlfQ09VTlQoZ0RlZmF1bHRfNTY1X1Byb2NzKSk7CiAgICAgLy8ganVzdCBzbyB3ZSBkb24ndCBjcmFzaApAQCAtMjUxLDQgKzI1MSw0IEBACiAgICAgfQogICAgIHJldHVybiBwcm9jOwogfQotICAgIAorCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDQ0NDQuY3BwIGIvc3JjL2NvcmUvU2tCbGl0Um93X0Q0NDQ0LmNwcAppbmRleCAzYTkyYTZiLi5jMzJlODEyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDQ0NDQuY3BwCisrKyBiL3NyYy9jb3JlL1NrQmxpdFJvd19ENDQ0NC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBzcmMsIGludCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVThDUFUgYWxwaGEsIGludCAvKngqLywgaW50IC8qeSovKSB7CiAgICAgU2tBU1NFUlQoMjU1ID4gYWxwaGEpOwotICAgIAorCiAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICBpbnQgc3JjX3NjYWxlID0gU2tBbHBoYTI1NVRvMjU2KGFscGhhKSA+PiA0OwogICAgICAgICBkbyB7CkBAIC05MSwxMiArOTEsMTIgQEAKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogc3RhdGljIHZvaWQgUzMyX0Q0NDQ0X09wYXF1ZV9EaXRoZXIodWludDE2X3QqIFNLX1JFU1RSSUNUIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUE1Db2xvciogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBVOENQVSBhbHBoYSwgaW50IHgsIGludCB5KSB7CiAgICAgU2tBU1NFUlQoMjU1ID09IGFscGhhKTsKLSAgICAKKwogICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgRElUSEVSXzQ0NDRfU0NBTih5KTsKICAgICAgICAgZG8gewpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUE1Db2xvciogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIFU4Q1BVIGFscGhhLCBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVCgyNTUgPiBhbHBoYSk7Ci0gICAgCisKICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgIGludCBzY2FsZTE2ID0gU2tBbHBoYTI1NVRvMjU2KGFscGhhKSA+PiA0OwogICAgICAgICBESVRIRVJfNDQ0NF9TQ0FOKHkpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICAgICAgICAgIHVpbnQzMl90IHNyY19leHBhbmQgPSBTa0V4cGFuZDMyXzQ0NDQoYykgKiBzY2FsZTE2OwogICAgICAgICAgICAgdWludDMyX3QgZHN0X2V4cGFuZCA9IFNrRXhwYW5kXzQ0NDQoKmRzdCkgKiAoMTYgLSBzY2FsZTE2KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjID0gU2tDb21wYWN0Xzg4ODgoc3JjX2V4cGFuZCArIGRzdF9leHBhbmQpOyAvLyBjb252ZXJ0IGJhY2sgdG8gU2tQTUNvbG9yCiAgICAgICAgICAgICAqZHN0KysgPSBTa0RpdGhlckFSR0IzMlRvNDQ0NChjLCBESVRIRVJfVkFMVUUoeCkpOwogICAgICAgICAgICAgRElUSEVSX0lOQ19YKHgpOwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BNQ29sb3IqIFNLX1JFU1RSSUNUIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIFU4Q1BVIGFscGhhLCBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVCgyNTUgPT0gYWxwaGEpOwotICAgIAorCiAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICBESVRIRVJfNDQ0NF9TQ0FOKHkpOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBTa1BNQ29sb3IgYyA9ICpzcmMrKzsKICAgICAgICAgICAgIFNrUE1Db2xvckFzc2VydChjKTsKICAgICAgICAgICAgIGlmIChjKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYSA9IFNrR2V0UGFja2VkQTMyKGMpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhID0gU2tHZXRQYWNrZWRBMzIoYyk7CiAgICAgICAgICAgICAgICAgaW50IGQgPSBTa0FscGhhTXVsKERJVEhFUl9WQUxVRSh4KSwgU2tBbHBoYTI1NVRvMjU2KGEpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNjYWxlMTYgPSBTa0FscGhhMjU1VG8yNTYoMjU1IC0gYSkgPj4gNDsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNfZXhwYW5kID0gU2tFeHBhbmRfODg4OChjKTsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RfZXhwYW5kID0gU2tFeHBhbmRfNDQ0NCgqZHN0KSAqIHNjYWxlMTY7CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUE1Db2xvciogU0tfUkVTVFJJQ1Qgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBVOENQVSBhbHBoYSwgaW50IHgsIGludCB5KSB7CiAgICAgU2tBU1NFUlQoMjU1ID4gYWxwaGEpOwotICAgIAorCiAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICBpbnQgc3JjX3NjYWxlID0gU2tBbHBoYTI1NVRvMjU2KGFscGhhKSA+PiA0OwogICAgICAgICBESVRIRVJfNDQ0NF9TQ0FOKHkpOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgICAgICBpZiAoYykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGEgPSBTa0FscGhhMjU1VG8yNTYoU2tHZXRQYWNrZWRBMzIoYykpOwogICAgICAgICAgICAgICAgIGludCBkID0gU2tBbHBoYU11bChESVRIRVJfVkFMVUUoeCksIGEpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZHN0X3NjYWxlID0gMTYgLSBTa0FscGhhTXVsKHNyY19zY2FsZSwgYSk7CiAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjX2V4cGFuZCA9IFNrRXhwYW5kMzJfNDQ0NChjKSAqIHNyY19zY2FsZTsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RfZXhwYW5kID0gU2tFeHBhbmRfNDQ0NCgqZHN0KSAqIGRzdF9zY2FsZTsKQEAgLTE5NywyNCArMTk3LDI0IEBACiAgICAgLy8gbm8gZGl0aGVyCiAgICAgUzMyX0Q0NDQ0X09wYXF1ZSwKICAgICBTMzJfRDQ0NDRfQmxlbmQsCi0gICAgCisKICAgICBTMzJBX0Q0NDQ0X09wYXF1ZSwKICAgICBTMzJBX0Q0NDQ0X0JsZW5kLAotICAgIAorCiAgICAgLy8gZGl0aGVyCiAgICAgUzMyX0Q0NDQ0X09wYXF1ZV9EaXRoZXIsCiAgICAgUzMyX0Q0NDQ0X0JsZW5kX0RpdGhlciwKLSAgICAKKwogICAgIFMzMkFfRDQ0NDRfT3BhcXVlX0RpdGhlciwKICAgICBTMzJBX0Q0NDQ0X0JsZW5kX0RpdGhlcgogfTsKLSAgICAKKwogU2tCbGl0Um93OjpQcm9jIFNrQmxpdFJvd19GYWN0b3J5XzQ0NDQodW5zaWduZWQgZmxhZ3MpOwogU2tCbGl0Um93OjpQcm9jIFNrQmxpdFJvd19GYWN0b3J5XzQ0NDQodW5zaWduZWQgZmxhZ3MpCiB7CiAgICAgU2tBU1NFUlQoZmxhZ3MgPCBTS19BUlJBWV9DT1VOVChnUHJvY3M0NDQ0KSk7Ci0gICAgCisKICAgICByZXR1cm4gZ1Byb2NzNDQ0NFtmbGFnc107CiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCbGl0dGVyLmNwcCBiL3NyYy9jb3JlL1NrQmxpdHRlci5jcHAKaW5kZXggMDJmNzE2MC4uMzIyZjkxZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCbGl0dGVyLmNwcAorKysgYi9zcmMvY29yZS9Ta0JsaXR0ZXIuY3BwCkBAIC00OTgsNyArNDk4LDcgQEAKICAgICAgICAgICAgIGZCbGl0dGVyLT5ibGl0UmVjdChyLmZMZWZ0LCByLmZUb3AsIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoMSA9PSByLndpZHRoKCkpIHsKICAgICAgICAgICAgIGlmIChyLmZMZWZ0ID09IHgpIHsKLSAgICAgICAgICAgICAgICBmQmxpdHRlci0+YmxpdFYoci5mTGVmdCwgci5mVG9wLCByLmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICBmQmxpdHRlci0+YmxpdFYoci5mTGVmdCwgci5mVG9wLCByLmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVMZWZ0QWxwaGEpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTa0FTU0VSVChyLmZMZWZ0ID09IHggKyB3aWR0aCArIDEpOwpAQCAtODUxLDcgKzg1MSw3IEBACiAgICAgLy8gd2UgcHJvbWlzZSBub3QgdG8gbXV0YXRlIHBhaW50IHVubGVzcyB3ZSBrbm93IHdlJ3ZlIHJlYXNzaWduZWQgaXQgZnJvbQogICAgIC8vIGxhenlQYWludAogICAgIFNrUGFpbnQqIHBhaW50ID0gY29uc3RfY2FzdDxTa1BhaW50Kj4oJm9yaWdQYWludCk7Ci0gICAgCisKICAgICBpZiAob3JpZ1BhaW50LmdldE1hc2tGaWx0ZXIoKSAhPSBOVUxMICYmCiAgICAgICAgICAgICBvcmlnUGFpbnQuZ2V0TWFza0ZpbHRlcigpLT5nZXRGb3JtYXQoKSA9PSBTa01hc2s6OmszRF9Gb3JtYXQpIHsKICAgICAgICAgc2hhZGVyM0QgPSBTa05FV19BUkdTKFNrM0RTaGFkZXIsIChzaGFkZXIpKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQmxpdHRlcl9BUkdCMzIuY3BwIGIvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAKaW5kZXggNWI5YTc2YS4uNDE3YzI1MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAKKysrIGIvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAKQEAgLTE1LDI0ICsxNSwyNCBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBzdGF0aWMgdm9pZCBTa0FSR0IzMl9CbGl0MzIoY29uc3QgU2tCaXRtYXAmIGRldmljZSwgY29uc3QgU2tNYXNrJiBtYXNrLAotCQkJCQkJCWNvbnN0IFNrSVJlY3QmIGNsaXAsIFNrUE1Db2xvciBzcmNDb2xvcikgewotCVU4Q1BVIGFscGhhID0gU2tHZXRQYWNrZWRBMzIoc3JjQ29sb3IpOwotCXVuc2lnbmVkIGZsYWdzID0gU2tCbGl0Um93OjprU3JjUGl4ZWxBbHBoYV9GbGFnMzI7Ci0JaWYgKGFscGhhICE9IDI1NSkgewotCQlmbGFncyB8PSBTa0JsaXRSb3c6OmtHbG9iYWxBbHBoYV9GbGFnMzI7Ci0JfQotCVNrQmxpdFJvdzo6UHJvYzMyIHByb2MgPSBTa0JsaXRSb3c6OkZhY3RvcnkzMihmbGFncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgY2xpcCwgU2tQTUNvbG9yIHNyY0NvbG9yKSB7CisgICAgVThDUFUgYWxwaGEgPSBTa0dldFBhY2tlZEEzMihzcmNDb2xvcik7CisgICAgdW5zaWduZWQgZmxhZ3MgPSBTa0JsaXRSb3c6OmtTcmNQaXhlbEFscGhhX0ZsYWczMjsKKyAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgIGZsYWdzIHw9IFNrQmxpdFJvdzo6a0dsb2JhbEFscGhhX0ZsYWczMjsKKyAgICB9CisgICAgU2tCbGl0Um93OjpQcm9jMzIgcHJvYyA9IFNrQmxpdFJvdzo6RmFjdG9yeTMyKGZsYWdzKTsKIAogICAgIGludCB4ID0gY2xpcC5mTGVmdDsKICAgICBpbnQgeSA9IGNsaXAuZlRvcDsKICAgICBpbnQgd2lkdGggPSBjbGlwLndpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IGNsaXAuaGVpZ2h0KCk7CiAKLSAgICBTa1BNQ29sb3IqCQkgZHN0Um93ID0gZGV2aWNlLmdldEFkZHIzMih4LCB5KTsKKyAgICBTa1BNQ29sb3IqICAgICAgICAgZHN0Um93ID0gZGV2aWNlLmdldEFkZHIzMih4LCB5KTsKICAgICBjb25zdCBTa1BNQ29sb3IqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2tQTUNvbG9yKj4obWFzay5nZXRBZGRyOCh4LCB5KSk7CiAKICAgICBkbyB7Ci0JCXByb2MoZHN0Um93LCBzcmNSb3csIHdpZHRoLCBhbHBoYSk7CisgICAgICAgIHByb2MoZHN0Um93LCBzcmNSb3csIHdpZHRoLCBhbHBoYSk7CiAgICAgICAgIGRzdFJvdyA9IChTa1BNQ29sb3IqKSgoY2hhciopZHN0Um93ICsgZGV2aWNlLnJvd0J5dGVzKCkpOwogICAgICAgICBzcmNSb3cgPSAoY29uc3QgU2tQTUNvbG9yKikoKGNvbnN0IGNoYXIqKXNyY1JvdyArIG1hc2suZlJvd0J5dGVzKTsKICAgICB9IHdoaWxlICgtLWhlaWdodCAhPSAwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgIGlmIChtYXNrLmZGb3JtYXQgPT0gU2tNYXNrOjprQldfRm9ybWF0KSB7CiAgICAgICAgIFNrQVJHQjMyX0JsZW5kQlcoZkRldmljZSwgbWFzaywgY2xpcCwgZlBNQ29sb3IsIFNrQWxwaGEyNTVUbzI1NigyNTUgLSBmU3JjQSkpOwogICAgIH0gZWxzZSBpZiAoU2tNYXNrOjprQVJHQjMyX0Zvcm1hdCA9PSBtYXNrLmZGb3JtYXQpIHsKLQkJU2tBUkdCMzJfQmxpdDMyKGZEZXZpY2UsIG1hc2ssIGNsaXAsIGZQTUNvbG9yKTsKKyAgICAgICAgU2tBUkdCMzJfQmxpdDMyKGZEZXZpY2UsIG1hc2ssIGNsaXAsIGZQTUNvbG9yKTsKICAgICB9CiB9CiAKQEAgLTE3MywxMiArMTczLDEyIEBACiAgICAgaWYgKFNrQmxpdE1hc2s6OkJsaXRDb2xvcihmRGV2aWNlLCBtYXNrLCBjbGlwLCBmQ29sb3IpKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAobWFzay5mRm9ybWF0ID09IFNrTWFzazo6a0JXX0Zvcm1hdCkgewogICAgICAgICBTa0FSR0IzMl9CbGl0QlcoZkRldmljZSwgbWFzaywgY2xpcCwgZlBNQ29sb3IpOwogICAgIH0gZWxzZSBpZiAoU2tNYXNrOjprQVJHQjMyX0Zvcm1hdCA9PSBtYXNrLmZGb3JtYXQpIHsKLQkJU2tBUkdCMzJfQmxpdDMyKGZEZXZpY2UsIG1hc2ssIGNsaXAsIGZQTUNvbG9yKTsKLQl9CisgICAgICAgIFNrQVJHQjMyX0JsaXQzMihmRGV2aWNlLCBtYXNrLCBjbGlwLCBmUE1Db2xvcik7CisgICAgfQogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0JsaXR0ZXJfUkdCMTYuY3BwIGIvc3JjL2NvcmUvU2tCbGl0dGVyX1JHQjE2LmNwcAppbmRleCA4YTRkNDU0Li4xNzU0MDljIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0JsaXR0ZXJfUkdCMTYuY3BwCisrKyBiL3NyYy9jb3JlL1NrQmxpdHRlcl9SR0IxNi5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQAogICAgICAgICAgICAgY291bnQgLT0gMTsKICAgICAgICAgICAgIFNrVFN3YXAodmFsdWUsIG90aGVyKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBmYXN0IHdheSB0byBzZXQgW3ZhbHVlLG90aGVyXSBwYWlycwogI2lmZGVmIFNLX0NQVV9CRU5ESUFOCiAgICAgICAgIHNrX21lbXNldDMyKCh1aW50MzJfdCopZHN0LCAodmFsdWUgPDwgMTYpIHwgb3RoZXIsIGNvdW50ID4+IDEpOwogI2Vsc2UKICAgICAgICAgc2tfbWVtc2V0MzIoKHVpbnQzMl90Kilkc3QsIChvdGhlciA8PCAxNikgfCB2YWx1ZSwgY291bnQgPj4gMSk7CiAjZW5kaWYKLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvdW50ICYgMSkgewogICAgICAgICAgICAgZHN0W2NvdW50IC0gMV0gPSB2YWx1ZTsKICAgICAgICAgfQpAQCAtNjIsNyArNjIsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBibGl0TWFzayhjb25zdCBTa01hc2smLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0Jik7CiAgICAgdmlydHVhbCBjb25zdCBTa0JpdG1hcCoganVzdEFuT3BhcXVlQ29sb3IodWludDMyX3QqKTsKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIFNrUE1Db2xvciAgIGZTcmNDb2xvcjMyOwogICAgIHVpbnQzMl90ICAgIGZFeHBhbmRlZFJhdzE2OwpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgdWludDE2X3QgICAgZlJhd0NvbG9yMTY7ICAgIC8vIHVuc2NhbGVkCiAgICAgdWludDE2X3QgICAgZlJhd0RpdGhlcjE2OyAgIC8vIHVuc2NhbGVkCiAgICAgU2tCb29sOCAgICAgZkRvRGl0aGVyOwotICAgIAorCiAgICAgLy8gaWxsZWdhbAogICAgIFNrUkdCMTZfQmxpdHRlciYgb3BlcmF0b3I9KGNvbnN0IFNrUkdCMTZfQmxpdHRlciYpOwotICAgIAorCiAgICAgdHlwZWRlZiBTa1Jhc3RlckJsaXR0ZXIgSU5IRVJJVEVEOwogfTsKIApAQCAtODgsNyArODgsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBibGl0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdmlydHVhbCB2b2lkIGJsaXRNYXNrKGNvbnN0IFNrTWFzayYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIFNrUkdCMTZfQmxpdHRlciBJTkhFUklURUQ7CiB9OwpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGJsaXRNYXNrKGNvbnN0IFNrTWFzayYsIGNvbnN0IFNrSVJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEFudGlIKGludCB4LCBpbnQgeSwgY29uc3QgU2tBbHBoYSogYW50aWFsaWFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogcnVucyk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBTa1JHQjE2X09wYXF1ZV9CbGl0dGVyIElOSEVSSVRFRDsKIH07CkBAIC0xMTQsMTYgKzExNCwxNiBAQAogICAgIHZpcnR1YWwgdm9pZCBibGl0QW50aUgoaW50IHgsIGludCB5LCBjb25zdCBTa0FscGhhKiBhbnRpYWxpYXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBydW5zKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgU2tQTUNvbG9yKiAgICAgIGZCdWZmZXI7CiAgICAgU2tCbGl0Um93OjpQcm9jIGZPcGFxdWVQcm9jOwogICAgIFNrQmxpdFJvdzo6UHJvYyBmQWxwaGFQcm9jOwotICAgIAorCiBwcml2YXRlOgogICAgIC8vIGlsbGVnYWwKICAgICBTa1JHQjE2X1NoYWRlcl9CbGl0dGVyJiBvcGVyYXRvcj0oY29uc3QgU2tSR0IxNl9TaGFkZXJfQmxpdHRlciYpOwotICAgIAorCiAgICAgdHlwZWRlZiBTa1NoYWRlckJsaXR0ZXIgSU5IRVJJVEVEOwogfTsKIApAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgdmlydHVhbCB2b2lkIGJsaXRBbnRpSChpbnQgeCwgaW50IHksIGNvbnN0IFNrQWxwaGEqIGFudGlhbGlhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIHJ1bnMpOwogICAgIHZpcnR1YWwgdm9pZCBibGl0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBTa1JHQjE2X1NoYWRlcl9CbGl0dGVyIElOSEVSSVRFRDsKIH07CkBAIC0xNDcsMTUgKzE0NywxNSBAQAogICAgIHZpcnR1YWwgdm9pZCBibGl0SChpbnQgeCwgaW50IHksIGludCB3aWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGJsaXRBbnRpSChpbnQgeCwgaW50IHksIGNvbnN0IFNrQWxwaGEqIGFudGlhbGlhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIHJ1bnMpOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrWGZlcm1vZGUqIGZYZmVybW9kZTsKICAgICBTa1BNQ29sb3IqICBmQnVmZmVyOwogICAgIHVpbnQ4X3QqICAgIGZBQUV4cGFuZDsKLSAgICAKKwogICAgIC8vIGlsbGVnYWwKICAgICBTa1JHQjE2X1NoYWRlcl9YZmVybW9kZV9CbGl0dGVyJiBvcGVyYXRvcj0oY29uc3QgU2tSR0IxNl9TaGFkZXJfWGZlcm1vZGVfQmxpdHRlciYpOwotICAgIAorCiAgICAgdHlwZWRlZiBTa1NoYWRlckJsaXR0ZXIgSU5IRVJJVEVEOwogfTsKIApAQCAtMjkxLDcgKzI5MSw3IEBACiAKIC8vIHJldHVybiAxIG9yIDAgZnJvbSBhIGJvb2wKIHN0YXRpYyBpbmxpbmUgaW50IEJvb2wySW50KGludCB2YWx1ZSkgewotCXJldHVybiAhIXZhbHVlOworICAgIHJldHVybiAhIXZhbHVlOwogfQogCiB2b2lkIFNrUkdCMTZfT3BhcXVlX0JsaXR0ZXI6OmJsaXRBbnRpSChpbnQgeCwgaW50IHksCkBAIC0zODYsMjAgKzM4NiwyMCBAQAogICAgIHVpbnQzMl90ICAgIGV4cGFuZGVkMzIgPSBmRXhwYW5kZWRSYXcxNjsKIAogI2lmZGVmIFNLX1VTRV9ORU9OCi0jZGVmaW5lCVVOUk9MTAk4CisjZGVmaW5lICAgIFVOUk9MTCAgICA4CiAgICAgZG8gewogICAgICAgICBpbnQgdyA9IHdpZHRoOwogICAgICAgICBpZiAodyA+PSBVTlJPTEwpIHsKLSAgICAgICAgICAgIHVpbnQzMng0X3QgY29sb3I7CQkvKiBjYW4gdXNlIHNhbWUgb25lICovCisgICAgICAgICAgICB1aW50MzJ4NF90IGNvbG9yOyAgICAgICAgLyogY2FuIHVzZSBzYW1lIG9uZSAqLwogICAgICAgICAgICAgdWludDMyeDRfdCBkZXZfbG8sIGRldl9oaTsKICAgICAgICAgICAgIHVpbnQzMng0X3QgdDEsIHQyOwogICAgICAgICAgICAgdWludDMyeDRfdCB3bjEsIHduMjsKICAgICAgICAgICAgIHVpbnQxNng0X3Qgb2Rldl9sbywgb2Rldl9oaTsKICAgICAgICAgICAgIHVpbnQxNng0X3QgYWxwaGFfbG8sIGFscGhhX2hpOwogICAgICAgICAgICAgdWludDE2eDhfdCAgYWxwaGFfZnVsbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb2xvciA9IHZkdXBxX25fdTMyKGV4cGFuZGVkMzIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAvKiBhbHBoYSBpcyA4eDgsIHdpZGVuIGFuZCBzcGxpdCB0byBnZXQgcGFpciBvZiAxNng0J3MgKi8KICAgICAgICAgICAgICAgICBhbHBoYV9mdWxsID0gdm1vdmxfdTgodmxkMV91OChhbHBoYSkpOwpAQCAtNDA3LDUzICs0MDcsNTMgQEAKICAgICAgICAgICAgICAgICBhbHBoYV9mdWxsID0gdnNocnFfbl91MTYoYWxwaGFfZnVsbCwgMyk7CiAgICAgICAgICAgICAgICAgYWxwaGFfbG8gPSB2Z2V0X2xvd191MTYoYWxwaGFfZnVsbCk7CiAgICAgICAgICAgICAgICAgYWxwaGFfaGkgPSB2Z2V0X2hpZ2hfdTE2KGFscGhhX2Z1bGwpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGV2X2xvID0gdm1vdmxfdTE2KHZsZDFfdTE2KGRldmljZSkpOwogICAgICAgICAgICAgICAgIGRldl9oaSA9IHZtb3ZsX3UxNih2bGQxX3UxNihkZXZpY2UrNCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLyogdW5wYWNrIGluIDMyIGJpdHMgKi8KICAgICAgICAgICAgICAgICBkZXZfbG8gPSB2b3JycV91MzIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbmRxX3UzMihkZXZfbG8sIHZkdXBxX25fdTMyKDB4MDAwMEY4MUYpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNobHFfbl91MzIodmFuZHFfdTMyKGRldl9sbywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzaGxxX25fdTMyKHZhbmRxX3UzMihkZXZfbG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHVwcV9uX3UzMigweDAwMDAwN0UwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgIGRldl9oaSA9IHZvcnJxX3UzMigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFuZHFfdTMyKGRldl9oaSwgdmR1cHFfbl91MzIoMHgwMDAwRjgxRikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2hscV9uX3UzMih2YW5kcV91MzIoZGV2X2hpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNobHFfbl91MzIodmFuZHFfdTMyKGRldl9oaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkdXBxX25fdTMyKDB4MDAwMDA3RTApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvKiBibGVuZCB0aGUgdHdvICovCiAgICAgICAgICAgICAgICAgdDEgPSB2bXVscV91MzIodnN1YnFfdTMyKGNvbG9yLCBkZXZfbG8pLCB2bW92bF91MTYoYWxwaGFfbG8pKTsKICAgICAgICAgICAgICAgICB0MSA9IHZzaHJxX25fdTMyKHQxLCA1KTsKICAgICAgICAgICAgICAgICBkZXZfbG8gPSB2YWRkcV91MzIoZGV2X2xvLCB0MSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB0MSA9IHZtdWxxX3UzMih2c3VicV91MzIoY29sb3IsIGRldl9oaSksIHZtb3ZsX3UxNihhbHBoYV9oaSkpOwogICAgICAgICAgICAgICAgIHQxID0gdnNocnFfbl91MzIodDEsIDUpOwogICAgICAgICAgICAgICAgIGRldl9oaSA9IHZhZGRxX3UzMihkZXZfaGksIHQxKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8qIHJlLWNvbXBhY3QgYW5kIHN0b3JlICovCiAgICAgICAgICAgICAgICAgd24xID0gdmFuZHFfdTMyKGRldl9sbywgdmR1cHFfbl91MzIoMHgwMDAwRjgxRikpLAogICAgICAgICAgICAgICAgIHduMiA9IHZzaHJxX25fdTMyKGRldl9sbywgMTYpOwogICAgICAgICAgICAgICAgIHduMiA9IHZhbmRxX3UzMih3bjIsIHZkdXBxX25fdTMyKDB4MDAwMDA3RTApKTsKICAgICAgICAgICAgICAgICBvZGV2X2xvID0gdm1vdm5fdTMyKHZvcnJxX3UzMih3bjEsIHduMikpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgd24xID0gdmFuZHFfdTMyKGRldl9oaSwgdmR1cHFfbl91MzIoMHgwMDAwRjgxRikpLAogICAgICAgICAgICAgICAgIHduMiA9IHZzaHJxX25fdTMyKGRldl9oaSwgMTYpOwogICAgICAgICAgICAgICAgIHduMiA9IHZhbmRxX3UzMih3bjIsIHZkdXBxX25fdTMyKDB4MDAwMDA3RTApKTsKICAgICAgICAgICAgICAgICBvZGV2X2hpID0gdm1vdm5fdTMyKHZvcnJxX3UzMih3bjEsIHduMikpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdnN0MV91MTYoZGV2aWNlLCBvZGV2X2xvKTsKICAgICAgICAgICAgICAgICB2c3QxX3UxNihkZXZpY2UrNCwgb2Rldl9oaSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZXZpY2UgKz0gVU5ST0xMOwogICAgICAgICAgICAgICAgIGFscGhhICs9IFVOUk9MTDsKICAgICAgICAgICAgICAgICB3IC09IFVOUk9MTDsKICAgICAgICAgICAgIH0gd2hpbGUgKHcgPj0gVU5ST0xMKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKiByZXNpZHVhbHMgKHdoaWNoIGlzIGV2ZXJ5dGhpbmcgaWYgd2UgaGF2ZSBubyBuZW9uKSAqLwogICAgICAgICB3aGlsZSAodyA+IDApIHsKICAgICAgICAgICAgICpkZXZpY2UgPSBibGVuZF9jb21wYWN0KGV4cGFuZGVkMzIsIFNrRXhwYW5kX3JnYl8xNigqZGV2aWNlKSwKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICAgICAgICBkZXZpY2UgPSAodWludDE2X3QqKSgoY2hhciopZGV2aWNlICsgZGV2aWNlUkIpOwogICAgICAgICBhbHBoYSArPSBtYXNrUkI7CiAgICAgfSB3aGlsZSAoLS1oZWlnaHQgIT0gMCk7Ci0jdW5kZWYJVU5ST0xMCisjdW5kZWYgICAgVU5ST0xMCiAjZWxzZSAgIC8vIG5vbi1uZW9uIGNvZGUKICAgICBkbyB7CiAgICAgICAgIGludCB3ID0gd2lkdGg7CkBAIC00ODIsNyArNDgyLDcgQEAKIHZvaWQgU2tSR0IxNl9PcGFxdWVfQmxpdHRlcjo6YmxpdFYoaW50IHgsIGludCB5LCBpbnQgaGVpZ2h0LCBTa0FscGhhIGFscGhhKSB7CiAgICAgdWludDE2X3QqIFNLX1JFU1RSSUNUIGRldmljZSA9IGZEZXZpY2UuZ2V0QWRkcjE2KHgsIHkpOwogICAgIHVuc2lnbmVkICAgIGRldmljZVJCID0gZkRldmljZS5yb3dCeXRlcygpOwotICAgIAorCiAgICAgLy8gVE9ETzogcmVzcGVjdCBmRG9EaXRoZXIKICAgICB1bnNpZ25lZCBzY2FsZTUgPSBTa0FscGhhMjU1VG8yNTYoYWxwaGEpID4+IDM7CiAgICAgdWludDMyX3Qgc3JjMzIgPSAgZkV4cGFuZGVkUmF3MTYgKiBzY2FsZTU7CkBAIC04MjEsNyArODIxLDcgQEAKIAogICAgIC8vIGNvbXB1dGUgU2tCbGl0Um93OjpQcm9jcwogICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKLSAgICAKKwogICAgIHVpbnQzMl90IHNoYWRlckZsYWdzID0gZlNoYWRlckZsYWdzOwogICAgIC8vIHNoYWRlcnMgdGFrZSBjYXJlIG9mIGdsb2JhbCBhbHBoYSwgc28gd2UgbmV2ZXIgc2V0IGl0IGluIFNrQmxpdFJvdwogICAgIGlmICghKHNoYWRlckZsYWdzICYgU2tTaGFkZXI6OmtPcGFxdWVBbHBoYV9GbGFnKSkgewpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKICAgICAgICAgICAgIFNrQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgICAgICAgICBhYSA9ICphbnRpYWxpYXM7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTA2MCw2ICsxMDYwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlU2l6ZSwgKGRldmljZSwgcGFpbnQpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBibGl0dGVyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tCdWZmZXIuaCBiL3NyYy9jb3JlL1NrQnVmZmVyLmgKaW5kZXggMzQxNTlhYi4uNjcyMmViOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tCdWZmZXIuaAorKysgYi9zcmMvY29yZS9Ta0J1ZmZlci5oCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgTGlnaHQgd2VpZ2h0IGNsYXNzIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhIG1lbW9yeSBibG9jay4KICAgICBUaGUgUkJ1ZmZlciBpcyBnaXZlbiB0aGUgYnVmZmVyIHRvIHJlYWQgZnJvbSwgd2l0aCBlaXRoZXIgYSBzcGVjaWZpZWQgc2l6ZQogICAgIG9yIG5vIHNpemUgKGluIHdoaWNoIGNhc2Ugbm8gcmFuZ2UgY2hlY2tpbmcgaXMgcGVyZm9ybWVkKS4gSXQgaXMgaWlsbGVnYWwKLSAgICB0byBhdHRlbXB0IHRvIHJlYWQgYSB2YWx1ZSBmcm9tIGFuIGVtcHR5IFJCdWZmZXIgKGRhdGEgPT0gbnVsbCkuIAorICAgIHRvIGF0dGVtcHQgdG8gcmVhZCBhIHZhbHVlIGZyb20gYW4gZW1wdHkgUkJ1ZmZlciAoZGF0YSA9PSBudWxsKS4KICovCiBjbGFzcyBTa1JCdWZmZXIgOiBTa05vbmNvcHlhYmxlIHsKIHB1YmxpYzoKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgZlBvcyA9IChjb25zdCBjaGFyKilkYXRhOwogICAgICAgICBmU3RvcCA9IChjb25zdCBjaGFyKilkYXRhICsgc2l6ZTsKICAgICB9Ci0gICAgCisKICAgICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZCBmcm9tIHRoZSBiZWdpbm5pbmcKICAgICAgICAgb2YgdGhlIGRhdGEgcG9pbnRlci4KICAgICAqLwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIGZQb3MgPSAoY2hhciopZGF0YTsKICAgICAgICAgZlN0b3AgPSAoY2hhciopZGF0YSArIHNpemU7CiAgICAgfQotICAgIAorCiAgICAgc2l6ZV90ICBwb3MoKSBjb25zdCB7IHJldHVybiBmUG9zIC0gZkRhdGE7IH0KICAgICB2b2lkKiAgIHNraXAoc2l6ZV90IHNpemUpOyAvLyByZXR1cm4gc3RhcnQgb2Ygc2tpcHBlZCBkYXRhCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrQ2FudmFzLmNwcCBiL3NyYy9jb3JlL1NrQ2FudmFzLmNwcAppbmRleCA4YjMwODk3Li5iN2MwNmMzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0NhbnZhcy5jcHAKKysrIGIvc3JjL2NvcmUvU2tDYW52YXMuY3BwCkBAIC0zMjgsNyArMzI4LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLT5kb05leHQoZHJhd1R5cGUpOwogICAgICAgICB9Ci0gICAgfSAgICAgICAgCisgICAgfQogCiBwcml2YXRlOgogICAgIFNrTGF6eVBhaW50ICAgICBmTGF6eVBhaW50OwpAQCAtOTU5LDcgKzk1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQml0bWFwKiByZXN1bHQsIFNrSVBvaW50KiBvZmZzZXQpIFNLX09WRVJSSURFIHsKICAgICAgICAgcmV0dXJuIGZEZXZpY2UtPmZpbHRlckltYWdlKGZpbHRlciwgc3JjLCBjdG0sIHJlc3VsdCwgb2Zmc2V0KTsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tEZXZpY2UqIGZEZXZpY2U7CiB9OwpAQCAtOTk3LDE4ICs5OTcsMTggQEAKIHZvaWQgU2tDYW52YXM6OmRyYXdTcHJpdGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHgsIGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIFNrREVCVUdDT0RFKGJpdG1hcC52YWxpZGF0ZSgpOykKLSAgICAKKwogICAgIGlmIChyZWplY3RfYml0bWFwKGJpdG1hcCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIFNrUGFpbnQgdG1wOwogICAgIGlmIChOVUxMID09IHBhaW50KSB7CiAgICAgICAgIHBhaW50ID0gJnRtcDsKICAgICB9Ci0gICAgCisKICAgICBMT09QRVJfQkVHSU5fRFJBV0RFVklDRSgqcGFpbnQsIFNrRHJhd0ZpbHRlcjo6a0JpdG1hcF9UeXBlKQotICAgIAorCiAgICAgd2hpbGUgKGl0ZXIubmV4dCgpKSB7CiAgICAgICAgIHBhaW50ID0gJmxvb3Blci5wYWludCgpOwogICAgICAgICBTa0ltYWdlRmlsdGVyKiBmaWx0ZXIgPSBwYWludC0+Z2V0SW1hZ2VGaWx0ZXIoKTsKQEAgLTExNjUsMTEgKzExNjUsMTEgQEAKICAgICAgICAgaWYgKGZNQ1JlYy0+ZlJhc3RlckNsaXAtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0aGlzLT5xdWlja1JlamVjdChwYXRoLmdldEJvdW5kcygpKSkgewogICAgICAgICAgICAgZkRldmljZUNNRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgZkxvY2FsQm91bmRzQ29tcGFyZVR5cGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZkNsaXBTdGFjay5jbGlwRW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBmTUNSZWMtPmZSYXN0ZXJDbGlwLT5zZXRFbXB0eSgpOwogICAgICAgICB9CkBAIC0xMzUzLDcgKzEzNTMsNyBAQAogICAgICAgICAvLyB0aGF0IGNhbiBiZSBsYXJnZXIgdGhhbiAzMksgaW4gd2lkdGggb3IgaGVpZ2h0KS4KICAgICAgICAgci5pc2V0KHBpbkludEZvclNjYWxhcihpYm91bmRzLmZMZWZ0IC0gaW5zZXQpLAogICAgICAgICAgICAgICAgcGluSW50Rm9yU2NhbGFyKGlib3VuZHMuZlRvcCAtIGluc2V0KSwKLSAgICAgICAgICAgICAgIHBpbkludEZvclNjYWxhcihpYm91bmRzLmZSaWdodCArIGluc2V0KSwgCisgICAgICAgICAgICAgICBwaW5JbnRGb3JTY2FsYXIoaWJvdW5kcy5mUmlnaHQgKyBpbnNldCksCiAgICAgICAgICAgICAgICBwaW5JbnRGb3JTY2FsYXIoaWJvdW5kcy5mQm90dG9tICsgaW5zZXQpKTsKICAgICAgICAgaW52ZXJzZS5tYXBSZWN0KGJvdW5kcywgcik7CiAgICAgfQpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKICAgICAgICAgaWYgKHRoaXMtPnF1aWNrUmVqZWN0KHBhaW50LmNvbXB1dGVGYXN0U3Ryb2tlQm91bmRzKHIsICZzdG9yYWdlKSkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0gICAgCisgICAgfQogCiAgICAgU2tBU1NFUlQocHRzICE9IE5VTEwpOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0NodW5rQWxsb2MuY3BwIGIvc3JjL2NvcmUvU2tDaHVua0FsbG9jLmNwcAppbmRleCA4ZGYzOGNiLi4yNWVmNGJjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0NodW5rQWxsb2MuY3BwCisrKyBiL3NyYy9jb3JlL1NrQ2h1bmtBbGxvYy5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBzaXplX3QgIGZGcmVlU2l6ZTsKICAgICBjaGFyKiAgIGZGcmVlUHRyOwogICAgIC8vIGRhdGFbXSBmb2xsb3dzCi0gICAgCisKICAgICBjaGFyKiBzdGFydE9mRGF0YSgpIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMgKyAxKTsKICAgICB9CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgICBibG9jayA9IG5leHQ7CiAgICAgICAgIH0KICAgICB9OwotICAgIAorCiAgICAgYm9vbCBjb250YWlucyhjb25zdCB2b2lkKiBhZGRyKSBjb25zdCB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGFkZHIpOwogICAgICAgICByZXR1cm4gcHRyID49IChjb25zdCBjaGFyKikodGhpcyArIDEpICYmIHB0ciA8IGZGcmVlUHRyOwpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgIC8vICAgIGJsb2NrLT5mTmV4dCA9IGZCbG9jazsKICAgICAgICAgYmxvY2stPmZGcmVlU2l6ZSA9IHNpemU7CiAgICAgICAgIGJsb2NrLT5mRnJlZVB0ciA9IGJsb2NrLT5zdGFydE9mRGF0YSgpOwotICAgICAgICAKKwogICAgICAgICBmVG90YWxDYXBhY2l0eSArPSBzaXplOwogICAgICAgICBmQmxvY2tDb3VudCArPSAxOwotICAgICAgICAKKwogICAgICAgICBmQ2h1bmtTaXplID0gaW5jcmVhc2VfbmV4dF9zaXplKGZDaHVua1NpemUpOwogICAgIH0KICAgICByZXR1cm4gYmxvY2s7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0NsaXBTdGFjay5jcHAgYi9zcmMvY29yZS9Ta0NsaXBTdGFjay5jcHAKaW5kZXggZThmZjZlOC4uM2M5NzA1ZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tDbGlwU3RhY2suY3BwCisrKyBiL3NyYy9jb3JlL1NrQ2xpcFN0YWNrLmNwcApAQCAtMTMsNyArMTMsNyBAQAogCiAKIC8vIDAtMiBhcmUgcmVzZXJ2ZWQgZm9yIGludmFsaWQsIGVtcHR5ICYgd2lkZS1vcGVuCi1pbnQzMl90IFNrQ2xpcFN0YWNrOjpnR2VuSUQgPSAzOyAKK2ludDMyX3QgU2tDbGlwU3RhY2s6OmdHZW5JRCA9IDM7CiAKIHN0cnVjdCBTa0NsaXBTdGFjazo6UmVjIHsKICAgICBlbnVtIFN0YXRlIHsKQEAgLTMwLDEzICszMCwxMyBAQAogICAgIGJvb2wgICAgICAgICAgICBmRG9BQTsKIAogICAgIC8vIGZGaW5pdGVCb3VuZFR5cGUgYW5kIGZGaW5pdGVCb3VuZCBhcmUgdXNlZCB0byBpbmNyZW1lbnRhbGx5IHVwZGF0ZQotICAgIC8vIHRoZSBjbGlwIHN0YWNrJ3MgYm91bmQuIFdoZW4gZkZpbml0ZUJvdW5kVHlwZSBpcyBrTm9ybWFsX0JvdW5kc1R5cGUsIAotICAgIC8vIGZGaW5pdGVCb3VuZCByZXByZXNlbnRzIHRoZSAgY29uc2VydmF0aXZlIGJvdW5kaW5nIGJveCBvZiB0aGUgcGl4ZWxzIAotICAgIC8vIHRoYXQgYXJlbid0IGNsaXBwZWQgKGkuZS4sIGFueSBwaXhlbHMgdGhhdCBjYW4gYmUgZHJhd24gdG8gYXJlIGluc2lkZSAKLSAgICAvLyB0aGUgYm91bmQpLiBXaGVuIGZGaW5pdGVCb3VuZFR5cGUgaXMga0luc2lkZU91dF9Cb3VuZHNUeXBlICh3aGljaCBvY2N1cnMgCi0gICAgLy8gd2hlbiBhIGNsaXAgaXMgaW52ZXJzZSBmaWxsZWQpLCBmRmluaXRlQm91bmQgcmVwcmVzZW50cyB0aGUgCi0gICAgLy8gY29uc2VydmF0aXZlIGJvdW5kaW5nIGJveCBvZiB0aGUgcGl4ZWxzIHRoYXQgX2FyZV8gY2xpcHBlZCAoaS5lLiwgYW55IAotICAgIC8vIHBpeGVscyB0aGF0IGNhbm5vdCBiZSBkcmF3biB0byBhcmUgaW5zaWRlIHRoZSBib3VuZCkuIFdoZW4gCisgICAgLy8gdGhlIGNsaXAgc3RhY2sncyBib3VuZC4gV2hlbiBmRmluaXRlQm91bmRUeXBlIGlzIGtOb3JtYWxfQm91bmRzVHlwZSwKKyAgICAvLyBmRmluaXRlQm91bmQgcmVwcmVzZW50cyB0aGUgIGNvbnNlcnZhdGl2ZSBib3VuZGluZyBib3ggb2YgdGhlIHBpeGVscworICAgIC8vIHRoYXQgYXJlbid0IGNsaXBwZWQgKGkuZS4sIGFueSBwaXhlbHMgdGhhdCBjYW4gYmUgZHJhd24gdG8gYXJlIGluc2lkZQorICAgIC8vIHRoZSBib3VuZCkuIFdoZW4gZkZpbml0ZUJvdW5kVHlwZSBpcyBrSW5zaWRlT3V0X0JvdW5kc1R5cGUgKHdoaWNoIG9jY3VycworICAgIC8vIHdoZW4gYSBjbGlwIGlzIGludmVyc2UgZmlsbGVkKSwgZkZpbml0ZUJvdW5kIHJlcHJlc2VudHMgdGhlCisgICAgLy8gY29uc2VydmF0aXZlIGJvdW5kaW5nIGJveCBvZiB0aGUgcGl4ZWxzIHRoYXQgX2FyZV8gY2xpcHBlZCAoaS5lLiwgYW55CisgICAgLy8gcGl4ZWxzIHRoYXQgY2Fubm90IGJlIGRyYXduIHRvIGFyZSBpbnNpZGUgdGhlIGJvdW5kKS4gV2hlbgogICAgIC8vIGZGaW5pdGVCb3VuZFR5cGUgaXMga0luc2lkZU91dF9Cb3VuZHNUeXBlIHRoZSBhY3R1YWwgYm91bmQgaXMKICAgICAvLyB0aGUgaW5maW5pdGUgcGxhbmUuIFRoaXMgYmVoYXZpb3Igb2YgZkZpbml0ZUJvdW5kVHlwZSBhbmQKICAgICAvLyBmRmluaXRlQm91bmQgaXMgcmVxdWlyZWQgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY2FuY2VsbGluZyBvdXQKQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZkdlbklEOwogCi0gICAgUmVjKGludCBzYXZlQ291bnQpIAorICAgIFJlYyhpbnQgc2F2ZUNvdW50KQogICAgIDogZkdlbklEKGtJbnZhbGlkR2VuSUQpIHsKICAgICAgICAgZlNhdmVDb3VudCA9IHNhdmVDb3VudDsKICAgICAgICAgdGhpcy0+c2V0RW1wdHkoKTsKICAgICB9Ci0gICAgCi0gICAgUmVjKGludCBzYXZlQ291bnQsIGNvbnN0IFNrUmVjdCYgcmVjdCwgU2tSZWdpb246Ok9wIG9wLCBib29sIGRvQUEpIAorCisgICAgUmVjKGludCBzYXZlQ291bnQsIGNvbnN0IFNrUmVjdCYgcmVjdCwgU2tSZWdpb246Ok9wIG9wLCBib29sIGRvQUEpCiAgICAgICAgIDogZlJlY3QocmVjdCkKICAgICAgICAgLCBmR2VuSUQoa0ludmFsaWRHZW5JRCkgewogICAgICAgICBmU2F2ZUNvdW50ID0gc2F2ZUNvdW50OwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAvLyBib3VuZGluZyBib3ggbWVtYmVycyBhcmUgdXBkYXRlZCBpbiBhIGZvbGxvd2luZyB1cGRhdGVCb3VuZCBjYWxsCiAgICAgfQogCi0gICAgUmVjKGludCBzYXZlQ291bnQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tSZWdpb246Ok9wIG9wLCBib29sIGRvQUEpIAorICAgIFJlYyhpbnQgc2F2ZUNvdW50LCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCwgYm9vbCBkb0FBKQogICAgICAgICA6IGZQYXRoKHBhdGgpCiAgICAgICAgICwgZkdlbklEKGtJbnZhbGlkR2VuSUQpIHsKICAgICAgICAgZlJlY3Quc2V0RW1wdHkoKTsKQEAgLTkxLDggKzkxLDggQEAKICAgICB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVjJiBiKSBjb25zdCB7Ci0gICAgICAgIGlmIChmU2F2ZUNvdW50ICE9IGIuZlNhdmVDb3VudCB8fCAKLSAgICAgICAgICAgIGZPcCAhPSBiLmZPcCB8fCAKKyAgICAgICAgaWYgKGZTYXZlQ291bnQgIT0gYi5mU2F2ZUNvdW50IHx8CisgICAgICAgICAgICBmT3AgIT0gYi5mT3AgfHwKICAgICAgICAgICAgIGZTdGF0ZSAhPSBiLmZTdGF0ZSB8fAogICAgICAgICAgICAgZkRvQUEgIT0gYi5mRG9BQSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgIH0KICAgICAgICAgLy8gT25seSBjbGlwcyB3aXRoaW4gdGhlIHNhbWUgc2F2ZS9yZXN0b3JlIGZyYW1lIChhcyBjYXB0dXJlZCBieQogICAgICAgICAvLyB0aGUgc2F2ZSBjb3VudCkgY2FuIGJlIG1lcmdlZAotICAgICAgICByZXR1cm4gIGZTYXZlQ291bnQgPT0gc2F2ZUNvdW50ICYmIAorICAgICAgICByZXR1cm4gIGZTYXZlQ291bnQgPT0gc2F2ZUNvdW50ICYmCiAgICAgICAgICAgICAgICAgU2tSZWdpb246OmtJbnRlcnNlY3RfT3AgPT0gb3AgJiYKICAgICAgICAgICAgICAgICAoU2tSZWdpb246OmtJbnRlcnNlY3RfT3AgPT0gZk9wIHx8IFNrUmVnaW9uOjprUmVwbGFjZV9PcCA9PSBmT3ApOwogICAgIH0KQEAgLTE1NSw4ICsxNTUsOCBAQAogCiAgICAgICAgIC8vIFNvIGVpdGhlciB0aGUgdHdvIG92ZXJsYXAgaW4gc29tZSBjb21wbGV4IG1hbm5lciBvciBuZXdSIGNvbnRhaW5zIG9sZFIuCiAgICAgICAgIC8vIEluIHRoZSBmaXJzdCwgY2FzZSB0aGUgZWRnZXMgd2lsbCByZXF1aXJlIGRpZmZlcmVudCBBQS4gSW4gdGhlIHNlY29uZCwKLSAgICAgICAgLy8gdGhlIEFBIHNldHRpbmcgdGhhdCB3b3VsZCBiZSBjYXJyaWVkIGZvcndhcmQgaXMgaW5jb3JyZWN0IChlLmcuLCBvbGRSIAotICAgICAgICAvLyBpcyBBQSB3aGlsZSBuZXdSIGlzIEJXIGJ1dCBzaW5jZSBuZXdSIGNvbnRhaW5zIG9sZFIsIG9sZFIgd2lsbCBiZSAKKyAgICAgICAgLy8gdGhlIEFBIHNldHRpbmcgdGhhdCB3b3VsZCBiZSBjYXJyaWVkIGZvcndhcmQgaXMgaW5jb3JyZWN0IChlLmcuLCBvbGRSCisgICAgICAgIC8vIGlzIEFBIHdoaWxlIG5ld1IgaXMgQlcgYnV0IHNpbmNlIG5ld1IgY29udGFpbnMgb2xkUiwgb2xkUiB3aWxsIGJlCiAgICAgICAgIC8vIGRyYXduIEJXKSBzaW5jZSB0aGUgbmV3IEFBIHNldHRpbmcgd2lsbCBwcmVkb21pbmF0ZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgIC8qKgogICAgICAqIFRoZSBkaWZmZXJlbnQgY29tYmluYXRpb24gb2YgZmlsbCAmIGludmVyc2UgZmlsbCB3aGVuIGNvbWJpbmluZwogICAgICAqIGJvdW5kaW5nIGJveGVzCi0gICAgICovIAorICAgICAqLwogICAgIGVudW0gRmlsbENvbWJvIHsKICAgICAgICAga1ByZXZfQ3VyX0ZpbGxDb21ibywKICAgICAgICAga1ByZXZfSW52Q3VyX0ZpbGxDb21ibywKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBrUHJldl9JbnZDdXJfRmlsbENvbWJvOgogICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSBldmVyeXRoaW5nIG91dHNpZGUgb2YgdGhpcyBjbGlwJ3MgYm91bmQKLSAgICAgICAgICAgICAgICAvLyBpcyBlcmFzZWQsIHNvIHRoZSBvbmx5IHBpeGVscyB0aGF0IGNhbiByZW1haW4gc2V0IAorICAgICAgICAgICAgICAgIC8vIGlzIGVyYXNlZCwgc28gdGhlIG9ubHkgcGl4ZWxzIHRoYXQgY2FuIHJlbWFpbiBzZXQKICAgICAgICAgICAgICAgICAvLyBvY2N1ciB3L2luIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBmaW5pdGUgYm91bmRzCiAgICAgICAgICAgICAgICAgaWYgKCFmRmluaXRlQm91bmQuaW50ZXJzZWN0KHByZXZGaW5pdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZGaW5pdGVCb3VuZC5zZXRFbXB0eSgpOwpAQCAtMjAwLDExICsyMDAsMTEgQEAKICAgICAgICAgICAgICAgICBmRmluaXRlQm91bmRUeXBlID0ga05vcm1hbF9Cb3VuZHNUeXBlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBrUHJldl9DdXJfRmlsbENvbWJvOgotICAgICAgICAgICAgICAgIC8vIFRoZSBtb3N0IGNvbnNlcnZhdGl2ZSByZXN1bHQgYm91bmQgaXMgdGhhdCBvZiB0aGUgCi0gICAgICAgICAgICAgICAgLy8gcHJpb3IgY2xpcC4gVGhpcyBjb3VsZCBiZSB3aWxkbHkgaW5jb3JyZWN0IGlmIHRoZSAKLSAgICAgICAgICAgICAgICAvLyBzZWNvbmQgY2xpcCBlaXRoZXIgZXhhY3RseSBtYXRjaGVzIHRoZSBmaXJzdCBjbGlwIAorICAgICAgICAgICAgICAgIC8vIFRoZSBtb3N0IGNvbnNlcnZhdGl2ZSByZXN1bHQgYm91bmQgaXMgdGhhdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBwcmlvciBjbGlwLiBUaGlzIGNvdWxkIGJlIHdpbGRseSBpbmNvcnJlY3QgaWYgdGhlCisgICAgICAgICAgICAgICAgLy8gc2Vjb25kIGNsaXAgZWl0aGVyIGV4YWN0bHkgbWF0Y2hlcyB0aGUgZmlyc3QgY2xpcAogICAgICAgICAgICAgICAgIC8vICh3aGljaCBzaG91bGQgeWllbGQgdGhlIGVtcHR5IHNldCkgb3IgcmVkdWNlcyB0aGUKLSAgICAgICAgICAgICAgICAvLyBzaXplIG9mIHRoZSBwcmlvciBib3VuZCAoZS5nLiwgaWYgdGhlIHNlY29uZCBjbGlwIAorICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHByaW9yIGJvdW5kIChlLmcuLCBpZiB0aGUgc2Vjb25kIGNsaXAKICAgICAgICAgICAgICAgICAvLyBleGFjdGx5IG1hdGNoZWQgdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBwcmlvciBjbGlwKS4KICAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlc2UgdHdvIHBvc3NpYmlsaXRpZXMuCiAgICAgICAgICAgICAgICAgZkZpbml0ZUJvdW5kID0gcHJldkZpbml0ZTsKQEAgLTIyNywxNiArMjI3LDE2IEBACiAgICAgICAgICAgICAgICAgZkZpbml0ZUJvdW5kVHlwZSA9IGtJbnNpZGVPdXRfQm91bmRzVHlwZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Uga0ludlByZXZfSW52Q3VyX0ZpbGxDb21ibzoKLSAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBwaXhlbHMgdGhhdCBjYW4gc3Vydml2ZSBhcmUgd2l0aGluIHRoZSAKKyAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBwaXhlbHMgdGhhdCBjYW4gc3Vydml2ZSBhcmUgd2l0aGluIHRoZQogICAgICAgICAgICAgICAgIC8vIHVuaW9uIG9mIHRoZSB0d28gYm91bmRpbmcgYm94ZXMgc2luY2UgdGhlIGV4dGVuc2lvbnMKICAgICAgICAgICAgICAgICAvLyB0byBpbmZpbml0eSBvZiBib3RoIGNsaXBzIGNhbmNlbCBvdXQKICAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ghCiAgICAgICAgICAgICBjYXNlIGtQcmV2X0N1cl9GaWxsQ29tYm86Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG1vc3QgY29uc2VydmF0aXZlIGJvdW5kIGZvciB4b3IgaXMgdGhlIAorICAgICAgICAgICAgICAgIC8vIFRoZSBtb3N0IGNvbnNlcnZhdGl2ZSBib3VuZCBmb3IgeG9yIGlzIHRoZQogICAgICAgICAgICAgICAgIC8vIHVuaW9uIG9mIHRoZSB0d28gYm91bmRzLiBJZiB0aGUgdHdvIGNsaXBzIGV4YWN0bHkgb3ZlcmxhcHBlZAotICAgICAgICAgICAgICAgIC8vIHRoZSB4b3IgY291bGQgeWllbGQgdGhlIGVtcHR5IHNldC4gU2ltaWxhcmx5IHRoZSB4b3IgCi0gICAgICAgICAgICAgICAgLy8gY291bGQgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBvcmlnaW5hbCBjbGlwJ3MgYm91bmQgKGUuZy4sIAotICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzZWNvbmQgY2xpcCBleGFjdGx5IG1hdGNoZWQgdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSAKKyAgICAgICAgICAgICAgICAvLyB0aGUgeG9yIGNvdWxkIHlpZWxkIHRoZSBlbXB0eSBzZXQuIFNpbWlsYXJseSB0aGUgeG9yCisgICAgICAgICAgICAgICAgLy8gY291bGQgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBvcmlnaW5hbCBjbGlwJ3MgYm91bmQgKGUuZy4sCisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHNlY29uZCBjbGlwIGV4YWN0bHkgbWF0Y2hlZCB0aGUgYm90dG9tIGhhbGYgb2YgdGhlCiAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY2xpcCkuIFdlIGlnbm9yZSB0aGVzZSB0d28gY2FzZXMuCiAgICAgICAgICAgICAgICAgZkZpbml0ZUJvdW5kLmpvaW4ocHJldkZpbml0ZSk7CiAgICAgICAgICAgICAgICAgZkZpbml0ZUJvdW5kVHlwZSA9IGtOb3JtYWxfQm91bmRzVHlwZTsKQEAgLTI4MSwxMiArMjgxLDEyIEBACiAKICAgICAgICAgc3dpdGNoIChjb21iaW5hdGlvbikgewogICAgICAgICAgICAgY2FzZSBrSW52UHJldl9JbnZDdXJfRmlsbENvbWJvOgotICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHBpeGVscyB0aGF0IGFyZW4ndCB3cml0YWJsZSBpbiB0aGlzIGNhc2UgCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgcGl4ZWxzIHRoYXQgYXJlbid0IHdyaXRhYmxlIGluIHRoaXMgY2FzZQogICAgICAgICAgICAgICAgIC8vIG9jY3VyIGluIHRoZSB1bmlvbiBvZiB0aGUgdHdvIGZpbml0ZSBib3VuZHMKICAgICAgICAgICAgICAgICBmRmluaXRlQm91bmQuam9pbihwcmV2RmluaXRlKTsKICAgICAgICAgICAgICAgICBmRmluaXRlQm91bmRUeXBlID0ga0luc2lkZU91dF9Cb3VuZHNUeXBlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrSW52UHJldl9DdXJfRmlsbENvbWJvOiAgICAgIAorICAgICAgICAgICAgY2FzZSBrSW52UHJldl9DdXJfRmlsbENvbWJvOgogICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgb25seSBwaXhlbHMgdGhhdCB3aWxsIHJlbWFpbiB3cml0ZWFibGUKICAgICAgICAgICAgICAgICAvLyBhcmUgd2l0aGluIHRoZSBjdXJyZW50IGNsaXAKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb24pIHsKICAgICAgICAgICAgIGNhc2Uga0ludlByZXZfSW52Q3VyX0ZpbGxDb21ibzoKLSAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBwaXhlbHMgdGhhdCBjYW4gc3Vydml2ZSBhcmUgaW4gdGhlIAorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHBpeGVscyB0aGF0IGNhbiBzdXJ2aXZlIGFyZSBpbiB0aGUKICAgICAgICAgICAgICAgICAvLyBwcmV2aW91cyBib3VuZCBzaW5jZSB0aGUgZXh0ZW5zaW9ucyB0byBpbmZpbml0eSBpbgogICAgICAgICAgICAgICAgIC8vIGJvdGggY2xpcHMgY2FuY2VsIG91dAogICAgICAgICAgICAgICAgIGZGaW5pdGVCb3VuZCA9IHByZXZGaW5pdGU7CkBAIC0zMjksMTAgKzMyOSwxMCBAQAogICAgICAgICAgICAgICAgIGZGaW5pdGVCb3VuZFR5cGUgPSBrSW5zaWRlT3V0X0JvdW5kc1R5cGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGtQcmV2X0N1cl9GaWxsQ29tYm86Ci0gICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIC0gYXMgd2l0aCB0aGUga0RpZmZlcmVuY2VfT3AgY2FzZSwgdGhlIAorICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCAtIGFzIHdpdGggdGhlIGtEaWZmZXJlbmNlX09wIGNhc2UsIHRoZQogICAgICAgICAgICAgICAgIC8vIG1vc3QgY29uc2VydmF0aXZlIHJlc3VsdCBib3VuZCBpcyB0aGUgYm91bmQgb2YgdGhlCi0gICAgICAgICAgICAgICAgLy8gY3VycmVudCBjbGlwLiBUaGUgcHJpb3IgY2xpcCBjb3VsZCByZWR1Y2UgdGhlIHNpemUgb2YgdGhpcyAKLSAgICAgICAgICAgICAgICAvLyBib3VuZCAoYXMgaW4gdGhlIGtEaWZmZXJlbmNlX09wIGNhc2UpIGJ1dCB3ZSBhcmUgaWdub3JpbmcgCisgICAgICAgICAgICAgICAgLy8gY3VycmVudCBjbGlwLiBUaGUgcHJpb3IgY2xpcCBjb3VsZCByZWR1Y2UgdGhlIHNpemUgb2YgdGhpcworICAgICAgICAgICAgICAgIC8vIGJvdW5kIChhcyBpbiB0aGUga0RpZmZlcmVuY2VfT3AgY2FzZSkgYnV0IHdlIGFyZSBpZ25vcmluZwogICAgICAgICAgICAgICAgIC8vIHRob3NlIGNhc2VzLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM0Myw3ICszNDMsNyBAQAogCiAgICAgdm9pZCB1cGRhdGVCb3VuZChjb25zdCBSZWMqIHByaW9yKSB7CiAKLSAgICAgICAgLy8gRmlyc3QsIG9wdGltaXN0aWNhbGx5IHVwZGF0ZSB0aGUgY3VycmVudCBSZWMncyBib3VuZCBpbmZvcm1hdGlvbiAKKyAgICAgICAgLy8gRmlyc3QsIG9wdGltaXN0aWNhbGx5IHVwZGF0ZSB0aGUgY3VycmVudCBSZWMncyBib3VuZCBpbmZvcm1hdGlvbgogICAgICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IGNsaXAncyBib3VuZAogICAgICAgICBmSXNJbnRlcnNlY3Rpb25PZlJlY3RzID0gZmFsc2U7CiAgICAgICAgIGlmIChrUmVjdF9TdGF0ZSA9PSBmU3RhdGUpIHsKQEAgLTM1MSw3ICszNTEsNyBAQAogICAgICAgICAgICAgZkZpbml0ZUJvdW5kVHlwZSA9IGtOb3JtYWxfQm91bmRzVHlwZTsKIAogICAgICAgICAgICAgaWYgKFNrUmVnaW9uOjprUmVwbGFjZV9PcCA9PSBmT3AgfHwKLSAgICAgICAgICAgICAgICAoU2tSZWdpb246OmtJbnRlcnNlY3RfT3AgPT0gZk9wICYmIE5VTEwgPT0gcHJpb3IpIHx8IAorICAgICAgICAgICAgICAgIChTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCA9PSBmT3AgJiYgTlVMTCA9PSBwcmlvcikgfHwKICAgICAgICAgICAgICAgICAoU2tSZWdpb246OmtJbnRlcnNlY3RfT3AgPT0gZk9wICYmIHByaW9yLT5mSXNJbnRlcnNlY3Rpb25PZlJlY3RzICYmCiAgICAgICAgICAgICAgICAgIHByaW9yLT5yZWN0UmVjdEludGVyc2VjdEFsbG93ZWQoZlJlY3QsIGZEb0FBKSkpIHsKICAgICAgICAgICAgICAgICBmSXNJbnRlcnNlY3Rpb25PZlJlY3RzID0gdHJ1ZTsKQEAgLTM1OSw3ICszNTksNyBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTa0FTU0VSVChrUGF0aF9TdGF0ZSA9PSBmU3RhdGUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZGaW5pdGVCb3VuZCA9IGZQYXRoLmdldEJvdW5kcygpOwogCiAgICAgICAgICAgICBpZiAoZlBhdGguaXNJbnZlcnNlRmlsbFR5cGUoKSkgewpAQCAtMzc2LDkgKzM3Niw5IEBACiAgICAgICAgICAgICAvLyBOb3RlOiB0aGUgbGVmdCBlZGdlIGlzIGhhbmRsZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgYmVsb3cuIFdlCiAgICAgICAgICAgICAvLyBhcmUgYSBiaXQgbW9yZSBnZW5lcm91cyBpbiB0aGUgcm91bmRpbmcgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0bwogICAgICAgICAgICAgLy8gcmlzayBtaXNzaW5nIHRoZSBsZWZ0IHBpeGVscyB3aGVuIGZMZWZ0IGlzIHZlcnkgY2xvc2UgdG8gLjUKLSAgICAgICAgICAgIGZGaW5pdGVCb3VuZC5zZXQoU2tJbnRUb1NjYWxhcihTa1NjYWxhckZsb29yVG9JbnQoZkZpbml0ZUJvdW5kLmZMZWZ0KzAuNDVmKSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKFNrU2NhbGFyUm91bmQoZkZpbml0ZUJvdW5kLmZUb3ApKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoU2tTY2FsYXJSb3VuZChmRmluaXRlQm91bmQuZlJpZ2h0KSksIAorICAgICAgICAgICAgZkZpbml0ZUJvdW5kLnNldChTa0ludFRvU2NhbGFyKFNrU2NhbGFyRmxvb3JUb0ludChmRmluaXRlQm91bmQuZkxlZnQrMC40NWYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcihTa1NjYWxhclJvdW5kKGZGaW5pdGVCb3VuZC5mVG9wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoU2tTY2FsYXJSb3VuZChmRmluaXRlQm91bmQuZlJpZ2h0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoU2tTY2FsYXJSb3VuZChmRmluaXRlQm91bmQuZkJvdHRvbSkpKTsKICAgICAgICAgfQogCkBAIC00MDQsOSArNDA0LDkgQEAKICAgICAgICAgICAgIGNvbWJpbmF0aW9uID0gKEZpbGxDb21ibykgKGNvbWJpbmF0aW9uIHwgMHgwMik7CiAgICAgICAgIH0KIAotICAgICAgICBTa0FTU0VSVChrSW52UHJldl9JbnZDdXJfRmlsbENvbWJvID09IGNvbWJpbmF0aW9uIHx8IAorICAgICAgICBTa0FTU0VSVChrSW52UHJldl9JbnZDdXJfRmlsbENvbWJvID09IGNvbWJpbmF0aW9uIHx8CiAgICAgICAgICAgICAgICAgIGtJbnZQcmV2X0N1cl9GaWxsQ29tYm8gPT0gY29tYmluYXRpb24gfHwKLSAgICAgICAgICAgICAgICAga1ByZXZfSW52Q3VyX0ZpbGxDb21ibyA9PSBjb21iaW5hdGlvbiB8fCAKKyAgICAgICAgICAgICAgICAga1ByZXZfSW52Q3VyX0ZpbGxDb21ibyA9PSBjb21iaW5hdGlvbiB8fAogICAgICAgICAgICAgICAgICBrUHJldl9DdXJfRmlsbENvbWJvID09IGNvbWJpbmF0aW9uKTsKIAogICAgICAgICAvLyBOb3cgaW50ZWdyYXRlIHdpdGggY2xpcCB3aXRoIHRoZSBwcmlvciBjbGlwcwpAQCAtNDM5LDIzICs0MzksMjMgQEAKICAgICB9CiB9OwogCi0vLyBUaGlzIGNvbnN0YW50IGRldGVybWluZXMgaG93IG1hbnkgUmVjJ3MgYXJlIGFsbG9jYXRlZCB0b2dldGhlciBhcyBhIGJsb2NrIGluIAorLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVzIGhvdyBtYW55IFJlYydzIGFyZSBhbGxvY2F0ZWQgdG9nZXRoZXIgYXMgYSBibG9jayBpbgogLy8gdGhlIGRlcXVlLiBBcyBzdWNoIGl0IG5lZWRzIHRvIGJhbGFuY2UgYWxsb2NhdGluZyB0b28gbXVjaCBtZW1vcnkgdnMuCiAvLyBpbmN1cnJpbmcgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdGhyYXNoaW5nLiBJdCBzaG91bGQgcm91Z2hseSBjb3JyZXNwb25kIHRvCiAvLyB0aGUgZGVlcGVzdCBzYXZlL3Jlc3RvcmUgc3RhY2sgd2UgZXhwZWN0IHRvIHNlZS4KIHN0YXRpYyBjb25zdCBpbnQga0RlZmF1bHRSZWNvcmRBbGxvY0NudCA9IDg7CiAKLVNrQ2xpcFN0YWNrOjpTa0NsaXBTdGFjaygpIAorU2tDbGlwU3RhY2s6OlNrQ2xpcFN0YWNrKCkKICAgICA6IGZEZXF1ZShzaXplb2YoUmVjKSwga0RlZmF1bHRSZWNvcmRBbGxvY0NudCkKICAgICAsIGZTYXZlQ291bnQoMCkgewogfQogCi1Ta0NsaXBTdGFjazo6U2tDbGlwU3RhY2soY29uc3QgU2tDbGlwU3RhY2smIGIpIAorU2tDbGlwU3RhY2s6OlNrQ2xpcFN0YWNrKGNvbnN0IFNrQ2xpcFN0YWNrJiBiKQogICAgIDogZkRlcXVlKHNpemVvZihSZWMpLCBrRGVmYXVsdFJlY29yZEFsbG9jQ250KSB7CiAgICAgKnRoaXMgPSBiOwogfQogCi1Ta0NsaXBTdGFjazo6U2tDbGlwU3RhY2soY29uc3QgU2tSZWN0JiByKSAKK1NrQ2xpcFN0YWNrOjpTa0NsaXBTdGFjayhjb25zdCBTa1JlY3QmIHIpCiAgICAgOiBmRGVxdWUoc2l6ZW9mKFJlYyksIGtEZWZhdWx0UmVjb3JkQWxsb2NDbnQpCiAgICAgLCBmU2F2ZUNvdW50KDApIHsKICAgICBpZiAoIXIuaXNFbXB0eSgpKSB7CkBAIC00NjMsNyArNDYzLDcgQEAKICAgICB9CiB9CiAKLVNrQ2xpcFN0YWNrOjpTa0NsaXBTdGFjayhjb25zdCBTa0lSZWN0JiByKSAKK1NrQ2xpcFN0YWNrOjpTa0NsaXBTdGFjayhjb25zdCBTa0lSZWN0JiByKQogICAgIDogZkRlcXVlKHNpemVvZihSZWMpLCBrRGVmYXVsdFJlY29yZEFsbG9jQ250KQogICAgICwgZlNhdmVDb3VudCgwKSB7CiAgICAgaWYgKCFyLmlzRW1wdHkoKSkgewpAQCAtNDk1LDcgKzQ5NSw3IEBACiB9CiAKIGJvb2wgU2tDbGlwU3RhY2s6Om9wZXJhdG9yPT0oY29uc3QgU2tDbGlwU3RhY2smIGIpIGNvbnN0IHsKLSAgICBpZiAoZlNhdmVDb3VudCAhPSBiLmZTYXZlQ291bnQgfHwgCisgICAgaWYgKGZTYXZlQ291bnQgIT0gYi5mU2F2ZUNvdW50IHx8CiAgICAgICAgIGZEZXF1ZS5jb3VudCgpICE9IGIuZkRlcXVlLmNvdW50KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTU0Myw3ICs1NDMsNyBAQAogICAgIH0KIH0KIAotdm9pZCBTa0NsaXBTdGFjazo6Z2V0Qm91bmRzKFNrUmVjdCogY2FudkZpbml0ZUJvdW5kLCAKK3ZvaWQgU2tDbGlwU3RhY2s6OmdldEJvdW5kcyhTa1JlY3QqIGNhbnZGaW5pdGVCb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3VuZHNUeXBlKiBib3VuZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNJbnRlcnNlY3Rpb25PZlJlY3RzKSBjb25zdCB7CiAgICAgU2tBU1NFUlQoTlVMTCAhPSBjYW52RmluaXRlQm91bmQgJiYgTlVMTCAhPSBib3VuZFR5cGUpOwpAQCAtNjcwLDE3ICs2NzAsMTcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBuZXcgKGZEZXF1ZS5wdXNoX2JhY2soKSkgUmVjKGZTYXZlQ291bnQpOwotICAgIAorCiAgICAgaWYgKHJlYyAmJiByZWMtPmZTYXZlQ291bnQgPT0gZlNhdmVDb3VudCkgewogICAgICAgICB0aGlzLT5wdXJnZUNsaXAocmVjKTsKICAgICB9CiB9CiAKLWJvb2wgU2tDbGlwU3RhY2s6OmlzV2lkZU9wZW4oKSBjb25zdCB7IAorYm9vbCBTa0NsaXBTdGFjazo6aXNXaWRlT3BlbigpIGNvbnN0IHsKICAgICBpZiAoMCA9PSBmRGVxdWUuY291bnQoKSkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBjb25zdCBSZWMqIGJhY2sgPSAoY29uc3QgUmVjKikgZkRlcXVlLmJhY2soKTsKICAgICByZXR1cm4ga0luc2lkZU91dF9Cb3VuZHNUeXBlID09IGJhY2stPmZGaW5pdGVCb3VuZFR5cGUgJiYKICAgICAgICAgICAgYmFjay0+ZkZpbml0ZUJvdW5kLmlzRW1wdHkoKTsKQEAgLTc2NiwxMCArNzY2LDEwIEBACiAKICAgICAgICAgaWYgKG9wID09IHJlYy0+Zk9wKSB7CiAgICAgICAgICAgICAvLyBUaGUgRGVxdWUncyBpdGVyYXRvciBpcyBhY3R1YWxseSBvbmUgcGFjZSBhaGVhZCBvZiB0aGUKLSAgICAgICAgICAgIC8vIHJldHVybmVkIHZhbHVlLiBTbyB3aGlsZSAicmVjIiBpcyB0aGUgZWxlbWVudCB3ZSB3YW50IHRvIAorICAgICAgICAgICAgLy8gcmV0dXJuZWQgdmFsdWUuIFNvIHdoaWxlICJyZWMiIGlzIHRoZSBlbGVtZW50IHdlIHdhbnQgdG8KICAgICAgICAgICAgIC8vIHJldHVybiwgdGhlIGl0ZXJhdG9yIGlzIGFjdHVhbGx5IHBvaW50aW5nIGF0IChhbmQgd2lsbAogICAgICAgICAgICAgLy8gcmV0dXJuIG9uIHRoZSBuZXh0ICJuZXh0IiBvciAicHJldiIgY2FsbCkgdGhlIGVsZW1lbnQKLSAgICAgICAgICAgIC8vIGluIGZyb250IG9mIGl0IGluIHRoZSBkZXF1ZS4gQnVtcCB0aGUgaXRlcmF0b3IgZm9yd2FyZCBhIAorICAgICAgICAgICAgLy8gaW4gZnJvbnQgb2YgaXQgaW4gdGhlIGRlcXVlLiBCdW1wIHRoZSBpdGVyYXRvciBmb3J3YXJkIGEKICAgICAgICAgICAgIC8vIHN0ZXAgc28gd2UgZ2V0IHRoZSBleHBlY3RlZCByZXN1bHQuCiAgICAgICAgICAgICBpZiAoTlVMTCA9PSBmSXRlci5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgcmV2ZXJzZSBpdGVyYXRvciBoYXMgcnVuIG9mZiB0aGUgZnJvbnQgb2YgdGhlIGRlcXVlCkBAIC04MDMsMTIgKzgwMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzSW50ZXJzZWN0aW9uT2ZSZWN0cykgY29uc3QgewogICAgIFNrQVNTRVJUKE5VTEwgIT0gZGV2Qm91bmRzKTsKIAotICAgIGRldkJvdW5kcy0+c2V0TFRSQigwLCAwLCAKKyAgICBkZXZCb3VuZHMtPnNldExUUkIoMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcihtYXhXaWR0aCksIFNrSW50VG9TY2FsYXIobWF4SGVpZ2h0KSk7CiAKICAgICBTa1JlY3QgdGVtcDsKICAgICBTa0NsaXBTdGFjazo6Qm91bmRzVHlwZSBib3VuZFR5cGU7Ci0gICAgCisKICAgICAvLyB0ZW1wIHN0YXJ0cyBvZmYgaW4gY2FudmFzIHNwYWNlIGhlcmUKICAgICB0aGlzLT5nZXRCb3VuZHMoJnRlbXAsICZib3VuZFR5cGUsIGlzSW50ZXJzZWN0aW9uT2ZSZWN0cyk7CiAgICAgaWYgKFNrQ2xpcFN0YWNrOjprSW5zaWRlT3V0X0JvdW5kc1R5cGUgPT0gYm91bmRUeXBlKSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0NvbG9yLmNwcCBiL3NyYy9jb3JlL1NrQ29sb3IuY3BwCmluZGV4IGZlN2I4ZjguLmNiNWYxNWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQ29sb3IuY3BwCisrKyBiL3NyYy9jb3JlL1NrQ29sb3IuY3BwCkBAIC01MSw3ICs1MSw3IEBACiAgICAgU2tTY2FsYXIgcyA9IEJ5dGVEaXZUb1NjYWxhcihkZWx0YSwgbWF4KTsKICAgICBTa0FTU0VSVChzID49IDAgJiYgcyA8PSBTS19TY2FsYXIxKTsKIAotICAgIFNrU2NhbGFyIGg7ICAgIAorICAgIFNrU2NhbGFyIGg7CiAgICAgaWYgKHIgPT0gbWF4KSB7CiAgICAgICAgIGggPSBCeXRlRGl2VG9TY2FsYXIoZyAtIGIsIGRlbHRhKTsKICAgICB9IGVsc2UgaWYgKGcgPT0gbWF4KSB7CkBAIC05MiwxMiArOTIsMTIgQEAKICAgICB9CiAgICAgU2tGaXhlZCBoeCA9IChoc3ZbMF0gPCAwIHx8IGhzdlswXSA+PSBTa0ludFRvU2NhbGFyKDM2MCkpID8gMCA6IFNrU2NhbGFyVG9GaXhlZChoc3ZbMF0vNjApOwogICAgIFNrRml4ZWQgZiA9IGh4ICYgMHhGRkZGOwotICAgIAorCiAgICAgdW5zaWduZWQgdl9zY2FsZSA9IFNrQWxwaGEyNTVUbzI1Nih2KTsKICAgICB1bnNpZ25lZCBwID0gU2tBbHBoYU11bCgyNTUgLSBzLCB2X3NjYWxlKTsKICAgICB1bnNpZ25lZCBxID0gU2tBbHBoYU11bCgyNTUgLSAocyAqIGYgPj4gMTYpLCB2X3NjYWxlKTsKICAgICB1bnNpZ25lZCB0ID0gU2tBbHBoYU11bCgyNTUgLSAocyAqIChTS19GaXhlZDEgLSBmKSA+PiAxNiksIHZfc2NhbGUpOwotICAgIAorCiAgICAgdW5zaWduZWQgciwgZywgYjsKIAogICAgIFNrQVNTRVJUKCh1bnNpZ25lZCkoaHggPj4gMTYpIDwgNik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0NvbG9yRmlsdGVyLmNwcCBiL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXIuY3BwCmluZGV4IDgyYTg1ZjQuLmZlZTM0ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXIuY3BwCisrKyBiL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBACiB1aW50MzJfdCBTa0ZpbHRlclNoYWRlcjo6Z2V0RmxhZ3MoKSB7CiAgICAgdWludDMyX3Qgc2hhZGVyRiA9IGZTaGFkZXItPmdldEZsYWdzKCk7CiAgICAgdWludDMyX3QgZmlsdGVyRiA9IGZGaWx0ZXItPmdldEZsYWdzKCk7Ci0gICAgCisKICAgICAvLyBpZiB0aGUgZmlsdGVyIGRvZXNuJ3Qgc3VwcG9ydCAxNmJpdCwgY2xlYXIgdGhlIG1hdGNoaW5nIGJpdCBpbiB0aGUgc2hhZGVyCiAgICAgaWYgKCEoZmlsdGVyRiAmIFNrQ29sb3JGaWx0ZXI6OmtIYXNGaWx0ZXIxNl9GbGFnKSkgewogICAgICAgICBzaGFkZXJGICY9IH5Ta1NoYWRlcjo6a0hhc1NwYW4xNl9GbGFnOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tDb3JkaWMuY3BwIGIvc3JjL2NvcmUvU2tDb3JkaWMuY3BwCmluZGV4IDU2Y2I0NjAuLjAwZGQ3NmUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrQ29yZGljLmNwcAorKysgYi9zcmMvY29yZS9Ta0NvcmRpYy5jcHAKQEAgLTE4LDcgKzE4LDcgQEAKIAogY29uc3QgaW50MzJfdCBrRml4ZWRJbnZHYWluMSA9IDB4MThiZGUwYmI7ICAvLyAwLjYwNzI1MjkzNQogCi1zdGF0aWMgdm9pZCBTa0NpcmN1bGFyUm90YXRpb24oaW50MzJfdCogeDAsIGludDMyX3QqIHkwLCBpbnQzMl90KiB6MCkgCitzdGF0aWMgdm9pZCBTa0NpcmN1bGFyUm90YXRpb24oaW50MzJfdCogeDAsIGludDMyX3QqIHkwLCBpbnQzMl90KiB6MCkKIHsKICAgICBpbnQzMl90IHQgPSAwOwogICAgIGludDMyX3QgeCA9ICp4MDsKQEAgLTI4LDcgKzI4LDcgQEAKICAgIGRvIHsKICAgICAgICAgaW50MzJfdCB4MSA9IHkgPj4gdDsKICAgICAgICAgaW50MzJfdCB5MSA9IHggPj4gdDsKLSAgICAgICAgaW50MzJfdCB0YW4gPSAqdGFuUHRyKys7ICAgIAorICAgICAgICBpbnQzMl90IHRhbiA9ICp0YW5QdHIrKzsKICAgICAgICAgaWYgKHogPj0gMCkgewogICAgICAgICAgICAgeCAtPSB4MTsKICAgICAgICAgICAgIHkgKz0geTE7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgaW50MzJfdCBzY2FsZWRSYWRpYW5zID0gcmFkaWFucyAqIDB4MjhiZTsgICAvLyBzY2FsZSByYWRpYW5zIHRvIDY1NTM2IC8gUEkoKQogICAgIGludCBxdWFkcmFudCA9IHNjYWxlZFJhZGlhbnMgPj4gMzA7CiAgICAgcXVhZHJhbnQgKz0gMTsKLSAgICBpZiAocXVhZHJhbnQgJiAyKSAKKyAgICBpZiAocXVhZHJhbnQgJiAyKQogICAgICAgICBzY2FsZWRSYWRpYW5zID0gLXNjYWxlZFJhZGlhbnMgKyAweDgwMDAwMDAwOwogICAgIC8qIHxhfCA8PSA5MCBkZWdyZWVzIGFzIGEgMS4zMSBudW1iZXIgKi8KICAgICBTa0ZpeGVkIHNpbiA9IDA7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICByZXR1cm4gc2luOwogfQogCi1Ta0ZpeGVkIFNrQ29yZGljVGFuKFNrRml4ZWQgYSkgCitTa0ZpeGVkIFNrQ29yZGljVGFuKFNrRml4ZWQgYSkKIHsKICAgICBpbnQzMl90IGNvczsKICAgICBpbnQzMl90IHNpbiA9IFNrQ29yZGljU2luQ29zKGEsICZjb3MpOwogICAgIHJldHVybiBTa0ZpeGVkRGl2KHNpbiwgY29zKTsKIH0KIAotc3RhdGljIGludDMyX3QgU2tDaXJjdWxhclZlY3RvcihpbnQzMl90KiB5MCwgaW50MzJfdCogeDAsIGludDMyX3QgdmVjTW9kZSkgCitzdGF0aWMgaW50MzJfdCBTa0NpcmN1bGFyVmVjdG9yKGludDMyX3QqIHkwLCBpbnQzMl90KiB4MCwgaW50MzJfdCB2ZWNNb2RlKQogewogICAgIGludDMyX3QgeCA9ICp4MDsKICAgICBpbnQzMl90IHkgPSAqeTA7CkBAIC04Miw3ICs4Miw3IEBACiAgICBkbyB7CiAgICAgICAgIGludDMyX3QgeDEgPSB5ID4+IHQ7CiAgICAgICAgIGludDMyX3QgeTEgPSB4ID4+IHQ7Ci0gICAgICAgIGludDMyX3QgdGFuID0gKnRhblB0cisrOyAgICAKKyAgICAgICAgaW50MzJfdCB0YW4gPSAqdGFuUHRyKys7CiAgICAgICAgIGlmICh5IDwgdmVjTW9kZSkgewogICAgICAgICAgICAgeCAtPSB4MTsKICAgICAgICAgICAgIHkgKz0geTE7CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBpbnQzMl90IGtBVGFuSERlZ3JlZXNbXSA9IHsgCitjb25zdCBpbnQzMl90IGtBVGFuSERlZ3JlZXNbXSA9IHsKICAgICAweDE2NjE3ODhELCAweEE2ODBENjEsIDB4NTFFQTZGQywgMHgyOENCRkRELCAweDE0NjBFMzQsCiAgICAgMHhBMkZDRTgsIDB4NTE3RDJFLCAweDI4QkU2RSwgMHgxNDVGMzIsCiAgICAgMHhBMkY5OCwgMHg1MTdDQywgMHgyOEJFNiwgMHgxNDVGMywgMHhBMkY5LCAweDUxN0MsCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogY29uc3QgaW50MzJfdCBrRml4ZWRJbnZHYWluMiA9IDB4MzEzMzBBQUE7ICAvLyAxLjIwNzUzNDQ5NQogCi1zdGF0aWMgdm9pZCBTa0h5cGVyYm9saWMoaW50MzJfdCogeDAsIGludDMyX3QqIHkwLCBpbnQzMl90KiB6MCwgaW50IG1vZGUpIAorc3RhdGljIHZvaWQgU2tIeXBlcmJvbGljKGludDMyX3QqIHgwLCBpbnQzMl90KiB5MCwgaW50MzJfdCogejAsIGludCBtb2RlKQogewogICAgIGludDMyX3QgdCA9IDE7CiAgICAgaW50MzJfdCB4ID0gKngwOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgZG8gewogICAgICAgICBpbnQzMl90IHgxID0geSA+PiB0OwogICAgICAgICBpbnQzMl90IHkxID0geCA+PiB0OwotICAgICAgICBpbnQzMl90IHRhbiA9ICp0YW5QdHIrKzsgICAgCisgICAgICAgIGludDMyX3QgdGFuID0gKnRhblB0cisrOwogICAgICAgICBpbnQgY291bnQgPSAyICsgKGsgPj4gMzEpOwogICAgICAgICBpZiAoKytrID09IDEpCiAgICAgICAgICAgICBrID0gLTI7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0NvcmRpYy5oIGIvc3JjL2NvcmUvU2tDb3JkaWMuaAppbmRleCBiNzBmOTg3Li5hYTcwM2ViIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0NvcmRpYy5oCisrKyBiL3NyYy9jb3JlL1NrQ29yZGljLmgKQEAgLTI1LDUgKzI1LDUgQEAKICAgICB2b2lkIFNrQ29yZGljX1VuaXRUZXN0KCk7CiAjZW5kaWYKIAotI2VuZGlmIC8vIFNrQ29yZGljIAorI2VuZGlmIC8vIFNrQ29yZGljCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRGF0YS5jcHAgYi9zcmMvY29yZS9Ta0RhdGEuY3BwCmluZGV4IDVkYmMyMDYuLjQyNzRmMmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrRGF0YS5jcHAKKysrIGIvc3JjL2NvcmUvU2tEYXRhLmNwcApAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgICAgICAgICBwYWlyc1t1bmlxdWVDb3VudF0uZktleSA9IGtleVN0b3JhZ2U7CiAgICAgICAgICAgICBrZXlTdG9yYWdlICs9IGxlbiArIDE7CiAgICAgICAgICAgICBrZXlTaXplICs9IGxlbiArIDE7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcGFpcnNbdW5pcXVlQ291bnRdLmZWYWx1ZSA9IGR1cGRhdGEoYXJyYXlbaV0uZlZhbHVlKTsKICAgICAgICAgICAgIHVuaXF1ZUNvdW50ICs9IDE7CiAgICAgICAgIH0KQEAgLTIzMSw3ICsyMzEsNyBAQAogU2tEYXRhKiBTa0RhdGFTZXQ6OmZpbmQoY29uc3QgY2hhciBrZXlbXSkgY29uc3QgewogICAgIHJldHVybiBmaW5kVmFsdWUoa2V5LCBmUGFpcnMsIGZDb3VudCk7CiB9Ci0gICAgCisKIHZvaWQgU2tEYXRhU2V0Ojp3cml0ZVRvU3RyZWFtKFNrV1N0cmVhbSogc3RyZWFtKSBjb25zdCB7CiAgICAgc3RyZWFtLT53cml0ZTMyKGZDb3VudCk7CiAgICAgaWYgKGZDb3VudCA+IDApIHsKQEAgLTI2MCw5ICsyNjAsOSBAQAogICAgICAgICBmS2V5U2l6ZSA9IHN0cmVhbS0+cmVhZFUzMigpOwogICAgICAgICBmUGFpcnMgPSBhbGxvY2F0ZVBhaXJTdG9yYWdlKGZDb3VudCwgZktleVNpemUpOwogICAgICAgICBjaGFyKiBrZXlTdG9yYWdlID0gKGNoYXIqKShmUGFpcnMgKyBmQ291bnQpOwotICAgICAgICAKKwogICAgICAgICBzdHJlYW0tPnJlYWQoa2V5U3RvcmFnZSwgZktleVNpemUpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZDb3VudDsgKytpKSB7CiAgICAgICAgICAgICBmUGFpcnNbaV0uZktleSA9IGtleVN0b3JhZ2U7CiAgICAgICAgICAgICBrZXlTdG9yYWdlICs9IHN0cmxlbihrZXlTdG9yYWdlKSArIDE7CkBAIC0yODAsOSArMjgwLDkgQEAKICAgICAgICAgZktleVNpemUgPSBidWZmZXIuZ2V0QXJyYXlDb3VudCgpOwogICAgICAgICBmUGFpcnMgPSBhbGxvY2F0ZVBhaXJTdG9yYWdlKGZDb3VudCwgZktleVNpemUpOwogICAgICAgICBjaGFyKiBrZXlTdG9yYWdlID0gKGNoYXIqKShmUGFpcnMgKyBmQ291bnQpOwotICAgICAgICAKKwogICAgICAgICBidWZmZXIucmVhZEJ5dGVBcnJheShrZXlTdG9yYWdlKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmQ291bnQ7ICsraSkgewogICAgICAgICAgICAgZlBhaXJzW2ldLmZLZXkgPSBrZXlTdG9yYWdlOwogICAgICAgICAgICAga2V5U3RvcmFnZSArPSBzdHJsZW4oa2V5U3RvcmFnZSkgKyAxOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tEZXF1ZS5jcHAgYi9zcmMvY29yZS9Ta0RlcXVlLmNwcAppbmRleCA4M2M5Zjk3Li5kMjEwZGNmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0RlcXVlLmNwcAorKysgYi9zcmMvY29yZS9Ta0RlcXVlLmNwcApAQCAtMjE2LDE0ICsyMTYsMTQgQEAKICAgICB9CiB9CiAKLWludCBTa0RlcXVlOjpudW1CbG9ja3NBbGxvY2F0ZWQoKSBjb25zdCB7IAoraW50IFNrRGVxdWU6Om51bUJsb2Nrc0FsbG9jYXRlZCgpIGNvbnN0IHsKICAgICBpbnQgbnVtQmxvY2tzID0gMDsKIAogICAgIGZvciAoY29uc3QgQmxvY2sqIHRlbXAgPSBmRnJvbnRCbG9jazsgdGVtcDsgdGVtcCA9IHRlbXAtPmZOZXh0KSB7CiAgICAgICAgICsrbnVtQmxvY2tzOwogICAgIH0KIAotICAgIHJldHVybiBudW1CbG9ja3M7IAorICAgIHJldHVybiBudW1CbG9ja3M7CiB9CiAKIFNrRGVxdWU6OkJsb2NrKiBTa0RlcXVlOjphbGxvY2F0ZUJsb2NrKGludCBhbGxvY0NvdW50KSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0Rlc2NyaXB0b3IuaCBiL3NyYy9jb3JlL1NrRGVzY3JpcHRvci5oCmluZGV4IDg2NzVmYTEuLjA3MWE4OWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrRGVzY3JpcHRvci5oCisrKyBiL3NyYy9jb3JlL1NrRGVzY3JpcHRvci5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgc2l6ZV90IGxlbiA9IGRlc2MtPmZMZW5ndGggLSBzaXplb2YodWludDMyX3QpOwogICAgICAgICByZXR1cm4gU2tDaGVja3N1bTo6Q29tcHV0ZShwdHIsIGxlbik7CiAgICAgfQotICAgIAorCiAgICAgLy8gcHJpdmF0ZSBzbyBubyBvbmUgY2FuIGNyZWF0ZSBvbmUgZXhjZXB0IG91ciBmYWN0b3JpZXMKICAgICBTa0Rlc2NyaXB0b3IoKSB7fQogfTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRGV2aWNlLmNwcCBiL3NyYy9jb3JlL1NrRGV2aWNlLmNwcAppbmRleCA0Y2Q5MzEwLi42MTQ2ZmQ2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0RldmljZS5jcHAKKysrIGIvc3JjL2NvcmUvU2tEZXZpY2UuY3BwCkBAIC0yMCwxOSArMjAsMTkgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1Ta0RldmljZTo6U2tEZXZpY2UoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkgCitTa0RldmljZTo6U2tEZXZpY2UoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKICAgICA6IGZCaXRtYXAoYml0bWFwKQogI2lmZGVmIFNLX0RFQlVHCi0gICAgLCBmQXR0YWNoZWRUb0NhbnZhcyhmYWxzZSkgCisgICAgLCBmQXR0YWNoZWRUb0NhbnZhcyhmYWxzZSkKICNlbmRpZgogewogICAgIGZPcmlnaW4uc2V0WmVybygpOwogICAgIGZNZXRhRGF0YSA9IE5VTEw7CiB9CiAKLVNrRGV2aWNlOjpTa0RldmljZShTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIGlzT3BhcXVlKSAKK1NrRGV2aWNlOjpTa0RldmljZShTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIGlzT3BhcXVlKQogI2lmZGVmIFNLX0RFQlVHCi0gICAgOiBmQXR0YWNoZWRUb0NhbnZhcyhmYWxzZSkgCisgICAgOiBmQXR0YWNoZWRUb0NhbnZhcyhmYWxzZSkKICNlbmRpZgogewogICAgIGZPcmlnaW4uc2V0WmVybygpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tEZXZpY2VQcm9maWxlLmNwcCBiL3NyYy9jb3JlL1NrRGV2aWNlUHJvZmlsZS5jcHAKaW5kZXggZjRmMjQyYS4uYWJiNzhhYyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tEZXZpY2VQcm9maWxlLmNwcAorKysgYi9zcmMvY29yZS9Ta0RldmljZVByb2ZpbGUuY3BwCkBAIC03MCw3ICs3MCw3IEBACiAgICAgZ0dsb2JhbFByb2ZpbGUtPnJlZigpOwogICAgIHJldHVybiBnR2xvYmFsUHJvZmlsZTsKIH0KLSAgICAKKwogdm9pZCBTa0RldmljZVByb2ZpbGU6OlNldEdsb2JhbChTa0RldmljZVByb2ZpbGUqIHByb2ZpbGUpIHsKICAgICBTa0F1dG9NdXRleEFjcXVpcmUgYW1jKGdNdXRleCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRGl0aGVyLmNwcCBiL3NyYy9jb3JlL1NrRGl0aGVyLmNwcAppbmRleCBiZGQ4YzJmLi5lNzMzYWFkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0RpdGhlci5jcHAKKysrIGIvc3JjL2NvcmUvU2tEaXRoZXIuY3BwCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgIlNrRGl0aGVyLmgiCiAKIC8qICBUaGUgYmFzZSBkaXRoZXIgbWF0cml4IHdlIHVzZSB0byBkZXJpdmUgb3B0aW1pemVkIG9uZXMgZm9yIDU2NSBhbmQgNDQ0NAotIAorCiAgICAgeyAwLCAgMzIsIDgsICA0MCwgMiwgIDM0LCAxMCwgNDIgfSwKICAgICB7IDQ4LCAxNiwgNTYsIDI0LCA1MCwgMTgsIDU4LCAyNiB9LAogICAgIHsgMTIsIDQ0LCA0LCAgMzYsIDE0LCA0NiwgNiwgIDM4IH0sCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0RyYXcuY3BwIGIvc3JjL2NvcmUvU2tEcmF3LmNwcAppbmRleCA5ZThlOWVmLi5lOGQxNzFlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0RyYXcuY3BwCisrKyBiL3NyYy9jb3JlL1NrRHJhdy5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgZkJsaXR0ZXIgPSBTa0JsaXR0ZXI6OkNob29zZShkZXZpY2UsIG1hdHJpeCwgcGFpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlN0b3JhZ2UsIHNpemVvZihmU3RvcmFnZSkpOwogICAgIH0KLSAgICAKKwogICAgIH5Ta0F1dG9CbGl0dGVyQ2hvb3NlKCk7CiAKICAgICBTa0JsaXR0ZXIqICBvcGVyYXRvci0+KCkgeyByZXR1cm4gZkJsaXR0ZXI7IH0KQEAgLTU1Niw3ICs1NTYsNyBAQAogICAgICAgICBpZiAoIWJvdW5kZXJfcG9pbnRzKGZCb3VuZGVyLCBtb2RlLCBjb3VudCwgcHRzLCBwYWludCwgKmZNYXRyaXgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gY2xlYXIgdGhlIGJvdW5kZXIgYW5kIGNhbGwgdGhpcyBhZ2Fpbiwgc28gd2UgZG9uJ3QgaW52b2tlIHRoZSBib3VuZGVyCiAgICAgICAgIC8vIGxhdGVyIGlmIHdlIGhhcHBlbiB0byBjYWxsIG91cnNlbHZlcyBmb3IgZHJhd1JlY3QsIGRyYXdQYXRoLCBldGMuCiAgICAgICAgIFNrRHJhdyBub0JvdW5kZXIoKnRoaXMpOwpAQCAtNTY0LDcgKzU2NCw3IEBACiAgICAgICAgIG5vQm91bmRlci5kcmF3UG9pbnRzKG1vZGUsIGNvdW50LCBwdHMsIHBhaW50LCBmb3JjZVVzZURldmljZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBQdFByb2NSZWMgcmVjOwogICAgIGlmICghZm9yY2VVc2VEZXZpY2UgJiYgcmVjLmluaXQobW9kZSwgcGFpbnQsIGZNYXRyaXgsIGZSQykpIHsKICAgICAgICAgU2tBdXRvQmxpdHRlckNob29zZSBibGl0dGVyKCpmQml0bWFwLCAqZk1hdHJpeCwgcGFpbnQpOwpAQCAtNjcxLDcgKzY3MSw3IEBACiAgICAgICAgIHBhaW50LmdldFN0cm9rZU1pdGVyKCkgPCBTS19TY2FsYXJTcXJ0MikgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgU2tBU1NFUlQobWF0cml4LnJlY3RTdGF5c1JlY3QoKSk7CiAgICAgU2tQb2ludCBwdCA9IHsgcGFpbnQuZ2V0U3Ryb2tlV2lkdGgoKSwgcGFpbnQuZ2V0U3Ryb2tlV2lkdGgoKSB9OwogICAgIG1hdHJpeC5tYXBWZWN0b3JzKHN0cm9rZVNpemUsICZwdCwgMSk7CkBAIC02ODcsMTEgKzY4NywxMSBAQAogICAgIGNvbnN0IFNrU2NhbGFyIHdpZHRoID0gcGFpbnQuZ2V0U3Ryb2tlV2lkdGgoKTsKICAgICBjb25zdCBib29sIHplcm9XaWR0aCA9ICgwID09IHdpZHRoKTsKICAgICBTa1BhaW50OjpTdHlsZSBzdHlsZSA9IHBhaW50LmdldFN0eWxlKCk7Ci0gICAgCisKICAgICBpZiAoKFNrUGFpbnQ6OmtTdHJva2VBbmRGaWxsX1N0eWxlID09IHN0eWxlKSAmJiB6ZXJvV2lkdGgpIHsKICAgICAgICAgc3R5bGUgPSBTa1BhaW50OjprRmlsbF9TdHlsZTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocGFpbnQuZ2V0UGF0aEVmZmVjdCgpIHx8IHBhaW50LmdldE1hc2tGaWx0ZXIoKSB8fAogICAgICAgICBwYWludC5nZXRSYXN0ZXJpemVyKCkgfHwgIW1hdHJpeC5yZWN0U3RheXNSZWN0KCkgfHwKICAgICAgICAgU2tQYWludDo6a1N0cm9rZUFuZEZpbGxfU3R5bGUgPT0gc3R5bGUpIHsKQEAgLTg0OCw3ICs4NDgsNyBAQAogICAgIGlmICghU2tYZmVybW9kZTo6QXNDb2VmZih4ZmVyLCBOVUxMLCAmZGMpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBzd2l0Y2ggKGRjKSB7CiAgICAgICAgIGNhc2UgU2tYZmVybW9kZTo6a09uZV9Db2VmZjoKICAgICAgICAgY2FzZSBTa1hmZXJtb2RlOjprSVNBX0NvZWZmOgpAQCAtOTg2LDcgKzk4Niw3IEBACiAgICAgU2tBdXRvQmxpdHRlckNob29zZSBibGl0dGVyKCpmQml0bWFwLCAqZk1hdHJpeCwgKnBhaW50KTsKIAogICAgIGlmIChwYWludC0+Z2V0TWFza0ZpbHRlcigpKSB7Ci0gICAgICAgIFNrUGFpbnQ6OlN0eWxlIHN0eWxlID0gZG9GaWxsID8gU2tQYWludDo6a0ZpbGxfU3R5bGUgOiAKKyAgICAgICAgU2tQYWludDo6U3R5bGUgc3R5bGUgPSBkb0ZpbGwgPyBTa1BhaW50OjprRmlsbF9TdHlsZSA6CiAgICAgICAgICAgICBTa1BhaW50OjprU3Ryb2tlX1N0eWxlOwogICAgICAgICBpZiAocGFpbnQtPmdldE1hc2tGaWx0ZXIoKS0+ZmlsdGVyUGF0aCgqZGV2UGF0aFB0ciwgKmZNYXRyaXgsICpmUkMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZCb3VuZGVyLCBibGl0dGVyLmdldCgpLApAQCAtMTM1OSw5ICsxMzU5LDkgQEAKICAgICBpbnQgcmlnaHQgICA9IGxlZnQgKyBnbHlwaC5mV2lkdGg7CiAgICAgaW50IGJvdHRvbSAgPSB0b3AgKyBnbHlwaC5mSGVpZ2h0OwogCi0gICAgU2tNYXNrCQltYXNrOwotICAgIFNrSVJlY3QJCXN0b3JhZ2U7Ci0gICAgU2tJUmVjdCoJYm91bmRzID0gJm1hc2suZkJvdW5kczsKKyAgICBTa01hc2sgICAgICAgIG1hc2s7CisgICAgU2tJUmVjdCAgICAgICAgc3RvcmFnZTsKKyAgICBTa0lSZWN0KiAgICBib3VuZHMgPSAmbWFzay5mQm91bmRzOwogCiAgICAgbWFzay5mQm91bmRzLnNldChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogCkBAIC0xNDEwLDcgKzE0MTAsNyBAQAogICAgICAgICBpZiAoTlVMTCA9PSBhYSkgewogICAgICAgICAgICAgYWEgPSAodWludDhfdCopc3RhdGUuZkNhY2hlLT5maW5kSW1hZ2UoZ2x5cGgpOwogICAgICAgICAgICAgaWYgKE5VTEwgPT0gYWEpIHsKLSAgICAgICAgICAgIAlyZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE0MzAsMTUgKzE0MzAsMTUgQEAKICAgICBpbnQgbGVmdCA9IFNrRml4ZWRGbG9vcihmeCk7CiAgICAgaW50IHRvcCA9IFNrRml4ZWRGbG9vcihmeSk7CiAgICAgU2tBU1NFUlQoZ2x5cGguZldpZHRoID4gMCAmJiBnbHlwaC5mSGVpZ2h0ID4gMCk7Ci0gICAgCisKICAgICBTa01hc2sgIG1hc2s7Ci0gICAgCisKICAgICBsZWZ0ICs9IGdseXBoLmZMZWZ0OwogICAgIHRvcCAgKz0gZ2x5cGguZlRvcDsKLSAgICAKKwogICAgIG1hc2suZkJvdW5kcy5zZXQobGVmdCwgdG9wLCBsZWZ0ICsgZ2x5cGguZldpZHRoLCB0b3AgKyBnbHlwaC5mSGVpZ2h0KTsKICAgICBTa1JlZ2lvbjo6Q2xpcGVyYXRvciBjbGlwcGVyKCpzdGF0ZS5mQ2xpcCwgbWFzay5mQm91bmRzKTsKLSAgICAKKwogICAgIGlmICghY2xpcHBlci5kb25lKCkpIHsKICAgICAgICAgY29uc3QgU2tJUmVjdCYgIGNyID0gY2xpcHBlci5yZWN0KCk7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqICBhYSA9IChjb25zdCB1aW50OF90KilnbHlwaC5mSW1hZ2U7CkBAIC0xNDQ3LDggKzE0NDcsOCBAQAogICAgICAgICAgICAgaWYgKE5VTEwgPT0gYWEpIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgCX0KLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICAvLyB3ZSBuZWVkIHRvIHBhc3MgdGhlIG9yaWdpbiwgd2hpY2ggd2UgYXBwcm94aW1hdGUgd2l0aCBvdXIKICAgICAgICAgLy8gKHVuYWRqdXN0ZWQpIGxlZnQsdG9wIGNvb3JkaW5hdGVzICh0aGUgY2FsbGVyIGNhbGxlZCBmaXhlZGZsb29yKQogICAgICAgICBpZiAoc3RhdGUuZkJvdW5kZXItPmRvSVJlY3RHbHlwaChjciwKQEAgLTE1OTYsNyArMTU5Niw3IEBACiAgICAgICAgIH0gZWxzZSBpZiAoa1lfU2tBeGlzQWxpZ25tZW50ID09IGJhc2VsaW5lKSB7CiAgICAgICAgICAgICBmeE1hc2sgPSAwOwogICAgICAgICB9Ci0gICAgCisKICAgICAvLyBhcHBseSBiaWFzIGhlcmUgdG8gYXZvaWQgYWRkaW5nIDEvMiB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IGluIHRoZSBsb29wCiAgICAgICAgIGZ4ICs9IFNLX0ZpeGVkSGFsZiA+PiBTa0dseXBoOjprU3ViQml0czsKICAgICAgICAgZnkgKz0gU0tfRml4ZWRIYWxmID4+IFNrR2x5cGg6OmtTdWJCaXRzOwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKICAgICAgICAgICAgIGJsaXR0ZXIgPSB3cmFwcGVyLmdldEJsaXR0ZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGNvbnN0IGNoYXIqICAgICAgICBzdG9wID0gdGV4dCArIGJ5dGVMZW5ndGg7CiAgICAgQWxpZ25Qcm9jICAgICAgICAgIGFsaWduUHJvYyA9IHBpY2tfYWxpZ25fcHJvYyhwYWludC5nZXRUZXh0QWxpZ24oKSk7CiAgICAgU2tEcmF3MUdseXBoICAgICAgIGQxZzsKQEAgLTE4NTUsNyArMTg1NSw3IEBACiAgICAgICAgICAgICB3aGlsZSAodGV4dCA8IHN0b3ApIHsKICAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCAyIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQKICAgICAgICAgICAgICAgICBjb25zdCBTa0dseXBoJiBnbHlwaCA9IGdseXBoQ2FjaGVQcm9jKGNhY2hlLCAmdGV4dCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoZ2x5cGguZldpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRtc1Byb2ModG1zLCBwb3MpOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0RyYXdQcm9jcy5oIGIvc3JjL2NvcmUvU2tEcmF3UHJvY3MuaAppbmRleCAyZTI2ZWNmLi5iYTFhODc1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0RyYXdQcm9jcy5oCisrKyBiL3NyYy9jb3JlL1NrRHJhd1Byb2NzLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAvLyBpLmUuIGhhbGYgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBoYXMgYmVlbiBhZGRlZC4KICAgICAvLyBlLmcuIDEvMiBvciAxLygyXihTa0dseXBoOjprU3ViQml0cysxKSkgaGFzIGFscmVhZHkgYmVlbiBhZGRlZC4KICAgICB0eXBlZGVmIHZvaWQgKCpQcm9jKShjb25zdCBTa0RyYXcxR2x5cGgmLCBTa0ZpeGVkIHgsIFNrRml4ZWQgeSwgY29uc3QgU2tHbHlwaCYpOwotICAgIAorCiAgICAgUHJvYyBpbml0KGNvbnN0IFNrRHJhdyogZHJhdywgU2tCbGl0dGVyKiBibGl0dGVyLCBTa0dseXBoQ2FjaGUqIGNhY2hlKTsKIH07CiAKQEAgLTM1LDkgKzM1LDkgQEAKIH07CiAKIC8qKgotICogIElmIHRoZSBjdXJyZW50IHBhaW50IGlzIHNldCB0byBzdHJva2UgYW5kIHRoZSBzdHJva2Utd2lkdGggd2hlbiBhcHBsaWVkIHRvIAorICogIElmIHRoZSBjdXJyZW50IHBhaW50IGlzIHNldCB0byBzdHJva2UgYW5kIHRoZSBzdHJva2Utd2lkdGggd2hlbiBhcHBsaWVkIHRvCiAgKiAgdGhlIG1hdHJpeCBpcyA8PSAxLjAsIHRoZW4gdGhpcyByZXR1cm5zIHRydWUsIGFuZCBzZXRzIGNvdmVyYWdlIChzaW11bGF0aW5nCi0gKiAgYSBzdHJva2UgYnkgZHJhd2luZyBhIGhhaXJsaW5lIHdpdGggcGFydGlhbCBjb3ZlcmFnZSkuIElmIGFueSBvZiB0aGVzZSAKKyAqICBhIHN0cm9rZSBieSBkcmF3aW5nIGEgaGFpcmxpbmUgd2l0aCBwYXJ0aWFsIGNvdmVyYWdlKS4gSWYgYW55IG9mIHRoZXNlCiAgKiAgY29uZGl0aW9ucyBhcmUgZmFsc2UsIHRoZW4gdGhpcyByZXR1cm5zIGZhbHNlIGFuZCBjb3ZlcmFnZSBpcyBpZ25vcmVkLgogICovCiBib29sIFNrRHJhd1RyZWF0QXNIYWlybGluZShjb25zdCBTa1BhaW50JiwgY29uc3QgU2tNYXRyaXgmLCBTa1NjYWxhciogY292ZXJhZ2UpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tFZGdlLmNwcCBiL3NyYy9jb3JlL1NrRWRnZS5jcHAKaW5kZXggZDMyOGNhMy4uOGE2ZDE3MSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tFZGdlLmNwcAorKysgYi9zcmMvY29yZS9Ta0VkZ2UuY3BwCkBAIC0yMjUsNyArMjI1LDcgQEAKICAgICB9IGVsc2UgaWYgKHNoaWZ0ID4gTUFYX0NPRUZGX1NISUZUKSB7CiAgICAgICAgIHNoaWZ0ID0gTUFYX0NPRUZGX1NISUZUOwogICAgIH0KLSAgICAKKwogICAgIGZXaW5kaW5nICAgID0gU2tUb1M4KHdpbmRpbmcpOwogICAgIC8vZkN1YmljRFNoaWZ0IG9ubHkgc2V0IGZvciBjdWJpY3MKICAgICBmQ3VydmVDb3VudCA9IFNrVG9TOCgxIDw8IHNoaWZ0KTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRWRnZS5oIGIvc3JjL2NvcmUvU2tFZGdlLmgKaW5kZXggMjJhMjZkMC4uNTM2Nzg2MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tFZGdlLmgKKysrIGIvc3JjL2NvcmUvU2tFZGdlLmgKQEAgLTg0LDcgKzg0LDcgQEAKIAogaW50IFNrRWRnZTo6c2V0TGluZShjb25zdCBTa1BvaW50JiBwMCwgY29uc3QgU2tQb2ludCYgcDEsIGludCBzaGlmdCkgewogICAgIFNrRkRvdDYgeDAsIHkwLCB4MSwgeTE7Ci0gICAgCisKICAgICB7CiAjaWZkZWYgU0tfU0NBTEFSX0lTX0ZMT0FUCiAgICAgICAgIGZsb2F0IHNjYWxlID0gZmxvYXQoMSA8PCAoc2hpZnQgKyA2KSk7CkBAIC0xMDAsMjUgKzEwMCwyNSBAQAogICAgICAgICB5MSA9IHAxLmZZID4+IHNoaWZ0OwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgaW50IHdpbmRpbmcgPSAxOwotICAgIAorCiAgICAgaWYgKHkwID4geTEpIHsKICAgICAgICAgU2tUU3dhcCh4MCwgeDEpOwogICAgICAgICBTa1RTd2FwKHkwLCB5MSk7CiAgICAgICAgIHdpbmRpbmcgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICBpbnQgdG9wID0gU2tGRG90NlJvdW5kKHkwKTsKICAgICBpbnQgYm90ID0gU2tGRG90NlJvdW5kKHkxKTsKLSAgICAKKwogICAgIC8vIGFyZSB3ZSBhIHplcm8taGVpZ2h0IGxpbmU/CiAgICAgaWYgKHRvcCA9PSBib3QpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgU2tGaXhlZCBzbG9wZSA9IFNrRkRvdDZEaXYoeDEgLSB4MCwgeTEgLSB5MCk7Ci0gICAgCisKICAgICBmWCAgICAgICAgICA9IFNrRkRvdDZUb0ZpeGVkKHgwICsgU2tGaXhlZE11bChzbG9wZSwgKDMyIC0geTApICYgNjMpKTsgICAvLyArIFNLX0ZpeGVkMS8yCiAgICAgZkRYICAgICAgICAgPSBzbG9wZTsKICAgICBmRmlyc3RZICAgICA9IHRvcDsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRWRnZUJ1aWxkZXIuY3BwIGIvc3JjL2NvcmUvU2tFZGdlQnVpbGRlci5jcHAKaW5kZXggNzRiNDEyYy4uYWQ5ZWViNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tFZGdlQnVpbGRlci5jcHAKKysrIGIvc3JjL2NvcmUvU2tFZGdlQnVpbGRlci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICBTa1BhdGg6Okl0ZXIgICAgaXRlcihwYXRoLCB0cnVlKTsKICAgICBTa1BvaW50ICAgICAgICAgcHRzWzRdOwogICAgIFNrUGF0aDo6VmVyYiAgICB2ZXJiOwotICAgIAorCiAgICAgaW50IG1heEVkZ2VDb3VudCA9IHBhdGguY291bnRQb2ludHMoKTsKICAgICBpZiAoaWNsaXApIHsKICAgICAgICAgLy8gY2xpcHBpbmcgY2FuIHR1cm4gMSBsaW5lIGludG8gKHVwIHRvKSBrTWF4Q2xpcHBlZExpbmVTZWdtZW50cywgc2luY2UKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGlmIChpY2xpcCkgewogICAgICAgICBTa1JlY3QgY2xpcDsKICAgICAgICAgc2V0U2hpZnRlZENsaXAoJmNsaXAsICppY2xpcCwgc2hpZnRVcCk7Ci0gICAgICAgIAorCiAgICAgICAgIHdoaWxlICgodmVyYiA9IGl0ZXIubmV4dChwdHMsIGZhbHNlKSkgIT0gU2tQYXRoOjprRG9uZV9WZXJiKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a01vdmVfVmVyYjoKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRWRnZUJ1aWxkZXIuaCBiL3NyYy9jb3JlL1NrRWRnZUJ1aWxkZXIuaAppbmRleCA3MTRlMmI5Li5iMjk2Zjc3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0VkZ2VCdWlsZGVyLmgKKysrIGIvc3JjL2NvcmUvU2tFZGdlQnVpbGRlci5oCkBAIC0xOSwxNyArMTksMTcgQEAKIGNsYXNzIFNrRWRnZUJ1aWxkZXIgewogcHVibGljOgogICAgIFNrRWRnZUJ1aWxkZXIoKTsKLSAgICAKKwogICAgIC8vIHJldHVybnMgdGhlIG51bWJlciBvZiBidWlsdCBlZGdlcy4gVGhlIGFycmF5IG9mIHRob3NlIGVkZ2UgcG9pbnRlcnMKICAgICAvLyBpcyByZXR1cm5lZCBmcm9tIGVkZ2VMaXN0KCkuCiAgICAgaW50IGJ1aWxkKGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tJUmVjdCogY2xpcCwgaW50IHNoaWZ0VXApOwotICAgIAorCiAgICAgU2tFZGdlKiogZWRnZUxpc3QoKSB7IHJldHVybiBmRWRnZUxpc3Q7IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBTa0NodW5rQWxsb2MgICAgICAgIGZBbGxvYzsKICAgICBTa1REQXJyYXk8U2tFZGdlKj4gIGZMaXN0OwotICAgIAorCiAgICAgLyoKICAgICAgKiAgSWYgd2UncmUgaW4gZ2VuZXJhbCBtb2RlLCB3ZSBhbGxjb2F0ZSB0aGUgcG9pbnRlcnMgaW4gZkxpc3QsIGFuZCB0aGlzCiAgICAgICogIHdpbGwgcG9pbnQgYXQgZkxpc3QuYmVnaW4oKS4gSWYgd2UncmUgaW4gcG9seWdvbiBtb2RlLCBmTGlzdCB3aWxsIGJlCkBAIC0zOSw3ICszOSw3IEBACiAgICAgU2tFZGdlKiogICAgICAgICAgICBmRWRnZUxpc3Q7CiAKICAgICBpbnQgICAgICAgICAgICAgICAgIGZTaGlmdFVwOwotICAgIAorCiAgICAgdm9pZCBhZGRMaW5lKGNvbnN0IFNrUG9pbnQgcHRzW10pOwogICAgIHZvaWQgYWRkUXVhZChjb25zdCBTa1BvaW50IHB0c1tdKTsKICAgICB2b2lkIGFkZEN1YmljKGNvbnN0IFNrUG9pbnQgcHRzW10pOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tFZGdlQ2xpcHBlci5jcHAgYi9zcmMvY29yZS9Ta0VkZ2VDbGlwcGVyLmNwcAppbmRleCAxNGFmY2U1Li45ZmQ2YTBlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0VkZ2VDbGlwcGVyLmNwcAorKysgYi9zcmMvY29yZS9Ta0VkZ2VDbGlwcGVyLmNwcApAQCAtNTQsNyArNTQsNyBAQAogICAgIFNrU2NhbGFyIEEgPSBjMCAtIGMxIC0gYzEgKyBjMjsKICAgICBTa1NjYWxhciBCID0gMiooYzEgLSBjMCk7CiAgICAgU2tTY2FsYXIgQyA9IGMwIC0gdGFyZ2V0OwotICAgIAorCiAgICAgU2tTY2FsYXIgcm9vdHNbMl07ICAvLyB3ZSBvbmx5IGV4cGVjdCBvbmUsIGJ1dCBtYWtlIHJvb20gZm9yIDIgZm9yIHNhZmV0eQogICAgIGludCBjb3VudCA9IFNrRmluZFVuaXRRdWFkUm9vdHMoQSwgQiwgQywgcm9vdHMpOwogICAgIGlmIChjb3VudCkgewpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gYXJlIHdlIHBhcnRpYWxseSBiZWxvdwogICAgIGlmIChwdHNbMl0uZlkgPiBjbGlwLmZCb3R0b20pIHsKICAgICAgICAgaWYgKGNob3BNb25vUXVhZEF0WShwdHMsIGNsaXAuZkJvdHRvbSwgJnQpKSB7CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICBpZiAocHRzWzJdLmZZIDw9IGNsaXAuZlRvcCB8fCBwdHNbMF0uZlkgPj0gY2xpcC5mQm90dG9tKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3cgY2hvcCBzbyB0aGF0IHB0cyBpcyBjb250YWluZWQgd2l0aGluIGNsaXAgaW4gWQogICAgIGNob3BfcXVhZF9pbl9ZKHB0cywgY2xpcCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gYXJlIHdlIHBhcnRpYWxseSB0byB0aGUgcmlnaHQKICAgICBpZiAocHRzWzJdLmZYID4gY2xpcC5mUmlnaHQpIHsKICAgICAgICAgaWYgKGNob3BNb25vUXVhZEF0WChwdHMsIGNsaXAuZlJpZ2h0LCAmdCkpIHsKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAgICAgU2tSZWN0ICBib3VuZHM7CiAgICAgYm91bmRzLnNldChzcmNQdHMsIDMpOwotICAgIAorCiAgICAgaWYgKCFxdWlja19yZWplY3QoYm91bmRzLCBjbGlwKSkgewogICAgICAgICBTa1BvaW50IG1vbm9ZWzVdOwogICAgICAgICBpbnQgY291bnRZID0gU2tDaG9wUXVhZEF0WUV4dHJlbWEoc3JjUHRzLCBtb25vWSk7CkBAIC0yNzQsNyArMjc0LDcgQEAKIAogLy8gTW9kaWZ5IHB0c1tdIGluIHBsYWNlIHNvIHRoYXQgaXQgaXMgY2xpcHBlZCBpbiBZIHRvIHRoZSBjbGlwIHJlY3QKIHN0YXRpYyB2b2lkIGNob3BfY3ViaWNfaW5fWShTa1BvaW50IHB0c1s0XSwgY29uc3QgU2tSZWN0JiBjbGlwKSB7Ci0gICAgCisKICAgICAvLyBhcmUgd2UgcGFydGlhbGx5IGFib3ZlCiAgICAgaWYgKHB0c1swXS5mWSA8IGNsaXAuZlRvcCkgewogICAgICAgICBTa1NjYWxhciB0OwpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBhcmUgd2UgcGFydGlhbGx5IGJlbG93CiAgICAgaWYgKHB0c1szXS5mWSA+IGNsaXAuZkJvdHRvbSkgewogICAgICAgICBTa1NjYWxhciB0OwpAQCAtMzI4LDcgKzMyOCw3IEBACiB2b2lkIFNrRWRnZUNsaXBwZXI6OmNsaXBNb25vQ3ViaWMoY29uc3QgU2tQb2ludCBzcmNbNF0sIGNvbnN0IFNrUmVjdCYgY2xpcCkgewogICAgIFNrUG9pbnQgcHRzWzRdOwogICAgIGJvb2wgcmV2ZXJzZSA9IHNvcnRfaW5jcmVhc2luZ19ZKHB0cywgc3JjLCA0KTsKLSAgICAKKwogICAgIC8vIGFyZSB3ZSBjb21wbGV0ZWx5IGFib3ZlIG9yIGJlbG93CiAgICAgaWYgKHB0c1szXS5mWSA8PSBjbGlwLmZUb3AgfHwgcHRzWzBdLmZZID49IGNsaXAuZkJvdHRvbSkgewogICAgICAgICByZXR1cm47CkBAIC0zNDIsOSArMzQyLDkgQEAKICAgICAgICAgU2tUU3dhcDxTa1BvaW50PihwdHNbMV0sIHB0c1syXSk7CiAgICAgICAgIHJldmVyc2UgPSAhcmV2ZXJzZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3cgY2hvcCBpbiBYIGhhcyBuZWVkZWQsIGFuZCByZWNvcmQgdGhlIHNlZ21lbnRzCi0gICAgCisKICAgICBpZiAocHRzWzNdLmZYIDw9IGNsaXAuZkxlZnQpIHsgIC8vIHdob2xseSB0byB0aGUgbGVmdAogICAgICAgICB0aGlzLT5hcHBlbmRWTGluZShjbGlwLmZMZWZ0LCBwdHNbMF0uZlksIHB0c1szXS5mWSwgcmV2ZXJzZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM3OSw3ICszNzksNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gYXJlIHdlIHBhcnRpYWxseSB0byB0aGUgcmlnaHQKICAgICBpZiAocHRzWzNdLmZYID4gY2xpcC5mUmlnaHQpIHsKICAgICAgICAgU2tTY2FsYXIgdDsKQEAgLTQwNSwxMCArNDA1LDEwIEBACiBib29sIFNrRWRnZUNsaXBwZXI6OmNsaXBDdWJpYyhjb25zdCBTa1BvaW50IHNyY1B0c1s0XSwgY29uc3QgU2tSZWN0JiBjbGlwKSB7CiAgICAgZkN1cnJQb2ludCA9IGZQb2ludHM7CiAgICAgZkN1cnJWZXJiID0gZlZlcmJzOwotICAgIAorCiAgICAgU2tSZWN0ICBib3VuZHM7CiAgICAgYm91bmRzLnNldChzcmNQdHMsIDQpOwotICAgIAorCiAgICAgaWYgKCFxdWlja19yZWplY3QoYm91bmRzLCBjbGlwKSkgewogICAgICAgICBTa1BvaW50IG1vbm9ZWzEwXTsKICAgICAgICAgaW50IGNvdW50WSA9IFNrQ2hvcEN1YmljQXRZRXh0cmVtYShzcmNQdHMsIG1vbm9ZKTsKQEAgLTQyNSw3ICs0MjUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgKmZDdXJyVmVyYiA9IFNrUGF0aDo6a0RvbmVfVmVyYjsKICAgICBmQ3VyclBvaW50ID0gZlBvaW50czsKICAgICBmQ3VyclZlcmIgPSBmVmVyYnM7CkBAIC00MzcsNyArNDM3LDcgQEAKIHZvaWQgU2tFZGdlQ2xpcHBlcjo6YXBwZW5kVkxpbmUoU2tTY2FsYXIgeCwgU2tTY2FsYXIgeTAsIFNrU2NhbGFyIHkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldmVyc2UpIHsKICAgICAqZkN1cnJWZXJiKysgPSBTa1BhdGg6OmtMaW5lX1ZlcmI7Ci0gICAgCisKICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICBTa1RTd2FwPFNrU2NhbGFyPih5MCwgeTEpOwogICAgIH0KQEAgLTQ0OCw3ICs0NDgsNyBAQAogCiB2b2lkIFNrRWRnZUNsaXBwZXI6OmFwcGVuZFF1YWQoY29uc3QgU2tQb2ludCBwdHNbM10sIGJvb2wgcmV2ZXJzZSkgewogICAgICpmQ3VyclZlcmIrKyA9IFNrUGF0aDo6a1F1YWRfVmVyYjsKLSAgICAKKwogICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgIGZDdXJyUG9pbnRbMF0gPSBwdHNbMl07CiAgICAgICAgIGZDdXJyUG9pbnRbMl0gPSBwdHNbMF07CkBAIC00NjIsNyArNDYyLDcgQEAKIAogdm9pZCBTa0VkZ2VDbGlwcGVyOjphcHBlbmRDdWJpYyhjb25zdCBTa1BvaW50IHB0c1s0XSwgYm9vbCByZXZlcnNlKSB7CiAgICAgKmZDdXJyVmVyYisrID0gU2tQYXRoOjprQ3ViaWNfVmVyYjsKLSAgICAKKwogICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICAgICBmQ3VyclBvaW50W2ldID0gcHRzWzMgLSBpXTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRWRnZUNsaXBwZXIuaCBiL3NyYy9jb3JlL1NrRWRnZUNsaXBwZXIuaAppbmRleCBhN2VlZGQ1Li5lMTZlZDU1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0VkZ2VDbGlwcGVyLmgKKysrIGIvc3JjL2NvcmUvU2tFZGdlQ2xpcHBlci5oCkBAIC0yMSwxMSArMjEsMTEgQEAKICAgICBib29sIGNsaXBDdWJpYyhjb25zdCBTa1BvaW50IHB0c1s0XSwgY29uc3QgU2tSZWN0JiBjbGlwKTsKIAogICAgIFNrUGF0aDo6VmVyYiBuZXh0KFNrUG9pbnQgcHRzW10pOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrUG9pbnQqICAgICAgICBmQ3VyclBvaW50OwogICAgIFNrUGF0aDo6VmVyYiogICBmQ3VyclZlcmI7Ci0gICAgCisKICAgICBlbnVtIHsKICAgICAgICAga01heFZlcmJzID0gMTMsCiAgICAgICAgIGtNYXhQb2ludHMgPSAzMgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tGaWx0ZXJQcm9jLmNwcCBiL3NyYy9jb3JlL1NrRmlsdGVyUHJvYy5jcHAKaW5kZXggOGMyNGJiNi4uMjkwMzg0OSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tGaWx0ZXJQcm9jLmNwcAorKysgYi9zcmMvY29yZS9Ta0ZpbHRlclByb2MuY3BwCkBAIC0xNTYsMTQgKzE1NiwxNCBAQAogfQogc3RhdGljIHVpbnQzMl90IGJpbGVycHRyMDEoY29uc3QgdWludDMyX3QqIGEwMCwgY29uc3QgdWludDMyX3QqIGEwMSwgY29uc3QgdWludDMyX3QqIGExMCwgY29uc3QgdWludDMyX3QqIGExMSkgewogICAgIHVpbnQzMl90IGMwMCA9ICphMDA7Ci0gICAgdWludDMyX3QgYzAxID0gKmEwMTsgICAKKyAgICB1aW50MzJfdCBjMDEgPSAqYTAxOwogICAgIHVpbnQzMl90IGxvID0gKDMgKiBMT19QQUlSKGMwMCkgKyBMT19QQUlSKGMwMSkpID4+IDI7CiAgICAgdWludDMyX3QgaGkgPSAoMyAqIEhJX1BBSVIoYzAwKSArIEhJX1BBSVIoYzAxKSkgPj4gMjsKICAgICByZXR1cm4gQ09NQklORShsbywgaGkpOwogfQogc3RhdGljIHVpbnQzMl90IGJpbGVycHRyMDIoY29uc3QgdWludDMyX3QqIGEwMCwgY29uc3QgdWludDMyX3QqIGEwMSwgY29uc3QgdWludDMyX3QqIGExMCwgY29uc3QgdWludDMyX3QqIGExMSkgewogICAgIHVpbnQzMl90IGMwMCA9ICphMDA7Ci0gICAgdWludDMyX3QgYzAxID0gKmEwMTsgICAKKyAgICB1aW50MzJfdCBjMDEgPSAqYTAxOwogICAgIHVpbnQzMl90IGxvID0gKExPX1BBSVIoYzAwKSArIExPX1BBSVIoYzAxKSkgPj4gMTsKICAgICB1aW50MzJfdCBoaSA9IChISV9QQUlSKGMwMCkgKyBISV9QQUlSKGMwMSkpID4+IDE7CiAgICAgcmV0dXJuIENPTUJJTkUobG8sIGhpKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRmlsdGVyUHJvYy5oIGIvc3JjL2NvcmUvU2tGaWx0ZXJQcm9jLmgKaW5kZXggMmI1MTVlMi4uNGRmZGY2MCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tGaWx0ZXJQcm9jLmgKKysrIGIvc3JjL2NvcmUvU2tGaWx0ZXJQcm9jLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tGaXhlZCB4LCBTa0ZpeGVkIHkpCiB7CiAgICAgU2tBU1NFUlQodGFibGUpOwotICAgIAorCiAgICAgLy8gY29udmVydCB0byBkb3QgMgogICAgIHggPSAodW5zaWduZWQpKHggPDwgMTYpID4+IDMwOwogICAgIHkgPSAodW5zaWduZWQpKHkgPDwgMTYpID4+IDMwOwpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7CiAgICAgU2tBU1NFUlQodGFibGUpOwotICAgIAorCiAgICAgLy8gZXh0cmFjdCBsb3cgMiBiaXRzCiAgICAgeCA9IHggPDwgMzAgPj4gMzA7CiAgICAgeSA9IHkgPDwgMzAgPj4gMzA7CkBAIC01MSw3ICs1MSw3IEBACiBpbmxpbmUgU2tGaWx0ZXJQcm9jIFNrR2V0QmlsaW5lYXJGaWx0ZXJQcm9jMjJSb3dQcm9jKGNvbnN0IFNrRmlsdGVyUHJvYyogcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB4KQogewotICAgIFNrQVNTRVJUKHJvdyk7ICAgIAorICAgIFNrQVNTRVJUKHJvdyk7CiAgICAgLy8gZXh0cmFjdCBsb3cgMiBiaXRzCiAgICAgcmV0dXJuIHJvd1t4IDw8IDMwID4+IDMwXTsKIH0KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7CiAgICAgU2tBU1NFUlQodGFibGUpOwotICAgIAorCiAgICAgLy8gZXh0cmFjdCBsb3cgMiBiaXRzCiAgICAgeCA9IHggPDwgMzAgPj4gMzA7CiAgICAgeSA9IHkgPDwgMzAgPj4gMzA7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0Zsb2F0LmNwcCBiL3NyYy9jb3JlL1NrRmxvYXQuY3BwCmluZGV4IGRmZmIwZDcuLmI1Y2M0ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrRmxvYXQuY3BwCisrKyBiL3NyYy9jb3JlL1NrRmxvYXQuY3BwCkBAIC0yODksNyArMjg5LDcgQEAKICAgICBTa0FTU0VSVChuID09IC0zKTsKIAogICAgIGQuc2V0QWRkKGMsIGIpOwotICAgIFNrRGVidWdmKCJTa0Zsb2F0OiAlZCArICVkID0gJWRcbiIsIGMuZ2V0SW50KCksIGIuZ2V0SW50KCksIGQuZ2V0SW50KCkpOyAgICAKKyAgICBTa0RlYnVnZigiU2tGbG9hdDogJWQgKyAlZCA9ICVkXG4iLCBjLmdldEludCgpLCBiLmdldEludCgpLCBkLmdldEludCgpKTsKIAogICAgIFNrUmFuZG9tICAgIHJhbmQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRmxvYXQuaCBiL3NyYy9jb3JlL1NrRmxvYXQuaAppbmRleCBmZTQxYzI3Li43NGNkMTllIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0Zsb2F0LmgKKysrIGIvc3JjL2NvcmUvU2tGbG9hdC5oCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICBmbG9hdCAgIGZGbG9hdDsKICAgICAgICAgICAgIGludDMyX3QgZlBhY2tlZDsKICAgICAgICAgfSB0bXA7Ci0gICAgICAgIAorCiAgICAgICAgIHRtcC5mRmxvYXQgPSBmOwogICAgICAgICBpbnQgZCA9IHRtcC5mUGFja2VkIC0gZlBhY2tlZDsKICAgICAgICAgU2tBU1NFUlQoU2tBYnMzMihkKSA8PSB0b2xlcmFuY2UpOwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICAgICAgZmxvYXQgICBmRmxvYXQ7CiAgICAgICAgICAgICBpbnQzMl90IGZQYWNrZWQ7CiAgICAgICAgIH0gdG1wOwotICAgICAgICAKKwogICAgICAgICB0bXAuZlBhY2tlZCA9IGZQYWNrZWQ7CiAgICAgICAgIHJldHVybiB0bXAuZkZsb2F0OwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrRmxvYXRCaXRzLmNwcCBiL3NyYy9jb3JlL1NrRmxvYXRCaXRzLmNwcAppbmRleCBmZTRhMWI5Li41NGExZDIwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0Zsb2F0Qml0cy5jcHAKKysrIGIvc3JjL2NvcmUvU2tGbG9hdEJpdHMuY3BwCkBAIC00NSw3ICs0NSw3IEBACiBpbnQzMl90IFNrRmxvYXRCaXRzX3RvSW50Q2FzdChpbnQzMl90IHBhY2tlZCkgewogICAgIGludCBleHAgPSB1bnBhY2tfZXhwKHBhY2tlZCkgLSBFWFBfQklBUzsKICAgICBpbnQgdmFsdWUgPSB1bnBhY2tfbWF0aXNzYV9kaXJ0eShwYWNrZWQpIHwgTUFUSVNTQV9NQUdJQ19CSUc7Ci0gICAgCisKICAgICBpZiAoZXhwID49IDApIHsKICAgICAgICAgaWYgKGV4cCA+IDcpIHsgICAgLy8gb3ZlcmZsb3cKICAgICAgICAgICAgIHZhbHVlID0gU0tfTWF4UzMyOwpAQCAtNjgsNyArNjgsNyBAQAogICAgIGlmICgocGFja2VkIDw8IDEpID09IDApIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgaW50IGV4cCA9IHVucGFja19leHAocGFja2VkKSAtIEVYUF9CSUFTOwogICAgIGludCB2YWx1ZSA9IHVucGFja19tYXRpc3NhX2RpcnR5KHBhY2tlZCkgfCBNQVRJU1NBX01BR0lDX0JJRzsKIApAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgaWYgKChwYWNrZWQgPDwgMSkgPT0gMCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICBpbnQgZXhwID0gdW5wYWNrX2V4cChwYWNrZWQpIC0gRVhQX0JJQVM7CiAgICAgaW50IHZhbHVlID0gdW5wYWNrX21hdGlzc2FfZGlydHkocGFja2VkKSB8IE1BVElTU0FfTUFHSUNfQklHOwotICAgIAorCiAgICAgaWYgKGV4cCA+PSAwKSB7CiAgICAgICAgIGlmIChleHAgPiA3KSB7ICAgIC8vIG92ZXJmbG93CiAgICAgICAgICAgICB2YWx1ZSA9IFNLX01heFMzMjsKQEAgLTEyOCwxMCArMTI4LDEwIEBACiAgICAgaWYgKChwYWNrZWQgPDwgMSkgPT0gMCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICBpbnQgZXhwID0gdW5wYWNrX2V4cChwYWNrZWQpIC0gRVhQX0JJQVM7CiAgICAgaW50IHZhbHVlID0gdW5wYWNrX21hdGlzc2FfZGlydHkocGFja2VkKSB8IE1BVElTU0FfTUFHSUNfQklHOwotICAgIAorCiAgICAgaWYgKGV4cCA+PSAwKSB7CiAgICAgICAgIGlmIChleHAgPiA3KSB7ICAgIC8vIG92ZXJmbG93CiAgICAgICAgICAgICB2YWx1ZSA9IFNLX01heFMzMjsKQEAgLTE1OCwxMSArMTU4LDExIEBACiAgICAgfQogCiAgICAgaW50IHNoaWZ0ID0gRVhQX0JJQVM7Ci0gICAgCisKICAgICAvLyByZWNvcmQgdGhlIHNpZ24gYW5kIG1ha2UgdmFsdWUgcG9zaXRpdmUKICAgICBpbnQgc2lnbiA9IFNrRXh0cmFjdFNpZ24odmFsdWUpOwogICAgIHZhbHVlID0gU2tBcHBseVNpZ24odmFsdWUsIHNpZ24pOwotICAgIAorCiAgICAgaWYgKHZhbHVlID4+IDI0KSB7ICAgIC8vIHZhbHVlIGlzIHRvbyBiaWcgKGhhcyBtb3JlIHRoYW4gMjQgYml0cyBzZXQpCiAgICAgICAgIGludCBiaWFzID0gOCAtIFNrQ0xaKHZhbHVlKTsKICAgICAgICAgU2tEZWJ1Z2YoInZhbHVlID0gJWQsIGJpYXMgPSAlZFxuIiwgdmFsdWUsIGJpYXMpOwpAQCAtMTc1LDExICsxNzUsMTEgQEAKICAgICAgICAgdmFsdWUgPDw9IHplcm9zOwogICAgICAgICBzaGlmdCAtPSB6ZXJvczsKICAgICB9Ci0gICAgCisKICAgICAvLyBub3cgdmFsdWUgaXMgbGVmdC1hbGlnbmVkIHRvIDI0IGJpdHMKICAgICBTa0FTU0VSVCgodmFsdWUgPj4gMjMpID09IDEpOwogICAgIFNrQVNTRVJUKHNoaWZ0ID49IDAgJiYgc2hpZnQgPD0gMjU1KTsKLSAgICAKKwogICAgIFNrRmxvYXRJbnRVbmlvbiBkYXRhOwogICAgIGRhdGEuZlNpZ25CaXRJbnQgPSAoc2lnbiA8PCAzMSkgfCAoc2hpZnQgPDwgMjMpIHwgKHZhbHVlICYgfk1BVElTU0FfTUFHSUNfQklHKTsKICAgICByZXR1cm4gZGF0YS5mRmxvYXQ7CkBAIC0xOTEsMTUgKzE5MSwxNSBAQAogICAgIH0KIAogICAgIGludCBzaGlmdCA9IEVYUF9CSUFTOwotICAgIAorCiAgICAgLy8gcmVjb3JkIHRoZSBzaWduIGFuZCBtYWtlIHZhbHVlIHBvc2l0aXZlCiAgICAgaW50IHNpZ24gPSBTa0V4dHJhY3RTaWduKHZhbHVlKTsKICAgICB2YWx1ZSA9IFNrQXBwbHlTaWduKHZhbHVlLCBzaWduKTsKLSAgICAKKwogICAgIGludCB6ZXJvcyA9IFNrQ0xaKHZhbHVlIDw8IDgpOwogICAgIHZhbHVlIDw8PSB6ZXJvczsKICAgICBzaGlmdCAtPSB6ZXJvczsKLSAgICAKKwogICAgIFNrRmxvYXRJbnRVbmlvbiBkYXRhOwogICAgIGRhdGEuZlNpZ25CaXRJbnQgPSAoc2lnbiA8PCAzMSkgfCAoc2hpZnQgPDwgMjMpIHwgKHZhbHVlICYgfk1BVElTU0FfTUFHSUNfQklHKTsKICAgICByZXR1cm4gZGF0YS5mRmxvYXQ7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0dlb21ldHJ5LmNwcCBiL3NyYy9jb3JlL1NrR2VvbWV0cnkuY3BwCmluZGV4IDc3YWZmYTAuLjFjMWE0ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrR2VvbWV0cnkuY3BwCisrKyBiL3NyYy9jb3JlL1NrR2VvbWV0cnkuY3BwCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICByZXR1cm4gU2tTY2FsYXJNdWxBZGQoU2tTY2FsYXJNdWxBZGQoQSwgdCwgQiksIHQsIEMpOwogI2Vsc2UKICAgICBTa1NjYWxhciAgICBhYiA9IFNrU2NhbGFySW50ZXJwKHNyY1swXSwgc3JjWzJdLCB0KTsKLSAgICBTa1NjYWxhciAgICBiYyA9IFNrU2NhbGFySW50ZXJwKHNyY1syXSwgc3JjWzRdLCB0KTsgCisgICAgU2tTY2FsYXIgICAgYmMgPSBTa1NjYWxhckludGVycChzcmNbMl0sIHNyY1s0XSwgdCk7CiAgICAgcmV0dXJuIFNrU2NhbGFySW50ZXJwKGFiLCBiYywgdCk7CiAjZW5kaWYKIH0KQEAgLTMxNiw3ICszMTYsNyBAQAogewogICAgIFNrQVNTRVJUKHNyYyk7CiAgICAgU2tBU1NFUlQoZHN0KTsKLSAgICAKKwogI2lmIDAKICAgICBzdGF0aWMgYm9vbCBvbmNlID0gdHJ1ZTsKICAgICBpZiAob25jZSkKQEAgLTMyNCwxNiArMzI0LDE2IEBACiAgICAgICAgIG9uY2UgPSBmYWxzZTsKICAgICAgICAgU2tQb2ludCBzWzNdID0geyAwLCAyNjM5OCwgMCwgMjYzMzEsIDAsIDIwNjIxNDI4IH07CiAgICAgICAgIFNrUG9pbnQgZFs2XTsKLSAgICAgICAgCisKICAgICAgICAgaW50IG4gPSBTa0Nob3BRdWFkQXRZRXh0cmVtYShzLCBkKTsKICAgICAgICAgU2tEZWJ1Z2YoImNob3A9JWQsIFk9WyV4ICV4ICV4ICV4ICV4ICV4XVxuIiwgbiwgZFswXS5mWSwgZFsxXS5mWSwgZFsyXS5mWSwgZFszXS5mWSwgZFs0XS5mWSwgZFs1XS5mWSk7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICBTa1NjYWxhciBhID0gc3JjWzBdLmZZOwogICAgIFNrU2NhbGFyIGIgPSBzcmNbMV0uZlk7CiAgICAgU2tTY2FsYXIgYyA9IHNyY1syXS5mWTsKLSAgICAKKwogICAgIGlmIChpc19ub3RfbW9ub3RvbmljKGEsIGIsIGMpKQogICAgIHsKICAgICAgICAgU2tTY2FsYXIgICAgdFZhbHVlOwpAQCAtMzYwLDExICszNjAsMTEgQEAKIHsKICAgICBTa0FTU0VSVChzcmMpOwogICAgIFNrQVNTRVJUKGRzdCk7Ci0gICAgCisKICAgICBTa1NjYWxhciBhID0gc3JjWzBdLmZYOwogICAgIFNrU2NhbGFyIGIgPSBzcmNbMV0uZlg7CiAgICAgU2tTY2FsYXIgYyA9IHNyY1syXS5mWDsKLSAgICAKKwogICAgIGlmIChpc19ub3RfbW9ub3RvbmljKGEsIGIsIGMpKSB7CiAgICAgICAgIFNrU2NhbGFyIHRWYWx1ZTsKICAgICAgICAgaWYgKHZhbGlkX3VuaXRfZGl2aWRlKGEgLSBiLCBhIC0gYiAtIGIgKyBjLCAmdFZhbHVlKSkgewpAQCAtNTkyLDcgKzU5Miw3IEBACiB9CiAKIC8qICBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avc2tpYS9pc3N1ZXMvZGV0YWlsP2lkPTMyCi0gCisKICAgICBUaGlzIHRlc3QgY29kZSB3b3VsZCBmYWlsIHdoZW4gd2UgZGlkbid0IGNoZWNrIHRoZSByZXR1cm4gcmVzdWx0IG9mCiAgICAgdmFsaWRfdW5pdF9kaXZpZGUgaW4gU2tDaG9wQ3ViaWNBdCguLi4gdFZhbHVlc1tdLCBpbnQgcm9vdHMpLiBUaGUgcmVhc29uIGlzCiAgICAgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2hvcCwgdGhlIHBhcmFtZXRlcnMgdG8gdmFsaWRfdW5pdF9kaXZpZGUgYXJlIGVxdWFsCkBAIC02OTksNyArNjk5LDcgQEAKICAgICBTa1NjYWxhciAgICB0VmFsdWVzWzJdOwogICAgIGludCAgICAgICAgIHJvb3RzID0gU2tGaW5kQ3ViaWNFeHRyZW1hKHNyY1swXS5mWSwgc3JjWzFdLmZZLCBzcmNbMl0uZlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWzNdLmZZLCB0VmFsdWVzKTsKLSAgICAKKwogICAgIFNrQ2hvcEN1YmljQXQoc3JjLCBkc3QsIHRWYWx1ZXMsIHJvb3RzKTsKICAgICBpZiAoZHN0ICYmIHJvb3RzID4gMCkgewogICAgICAgICAvLyB3ZSBkbyBzb21lIGNsZWFudXAgdG8gZW5zdXJlIG91ciBZIGV4dHJlbWEgYXJlIGZsYXQKQEAgLTcxNSw3ICs3MTUsNyBAQAogICAgIFNrU2NhbGFyICAgIHRWYWx1ZXNbMl07CiAgICAgaW50ICAgICAgICAgcm9vdHMgPSBTa0ZpbmRDdWJpY0V4dHJlbWEoc3JjWzBdLmZYLCBzcmNbMV0uZlgsIHNyY1syXS5mWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbM10uZlgsIHRWYWx1ZXMpOwotICAgIAorCiAgICAgU2tDaG9wQ3ViaWNBdChzcmMsIGRzdCwgdFZhbHVlcywgcm9vdHMpOwogICAgIGlmIChkc3QgJiYgcm9vdHMgPiAwKSB7CiAgICAgICAgIC8vIHdlIGRvIHNvbWUgY2xlYW51cCB0byBlbnN1cmUgb3VyIFkgZXh0cmVtYSBhcmUgZmxhdApAQCAtODk5LDcgKzg5OSw3IEBACiAvKiAgU29sdmUgY29lZmYodCkgPT0gMCwgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2Ygcm9vdHMgdGhhdAogICAgIGxpZSB3aXRoaW5nIDAgPCB0IDwgMS4KICAgICBjb2VmZlswXXReMyArIGNvZWZmWzFddF4yICsgY29lZmZbMl10ICsgY29lZmZbM10KLSAKKwogICAgIEVsaW1pbmF0ZXMgcmVwZWF0ZWQgcm9vdHMgKHNvIHRoYXQgYWxsIHRWYWx1ZXMgYXJlIGRpc3RpbmN0LCBhbmQgYXJlIGFsd2F5cwogICAgIGluIGluY3JlYXNpbmcgb3JkZXIuCiAqLwpAQCAtOTg0LDcgKzk4NCw3IEBACiB9CiAKIC8qICBMb29raW5nIGZvciBGJyBkb3QgRicnID09IDAKLSAgICAKKwogICAgIEEgPSBiIC0gYQogICAgIEIgPSBjIC0gMmIgKyBhCiAgICAgQyA9IGQgLSAzYyArIDNiIC0gYQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKICNkZWZpbmUga01pblRWYWx1ZUZvckNob3BwaW5nICAgMAogCiAvKiAgTG9va2luZyBmb3IgRicgZG90IEYnJyA9PSAwCi0gICAgCisKICAgICBBID0gYiAtIGEKICAgICBCID0gYyAtIDJiICsgYQogICAgIEMgPSBkIC0gM2MgKyAzYiAtIGEKQEAgLTEyMzgsNyArMTIzOCw3IEBACiAgICAgICAgICAgICBjYXRjaCB0aGUgPj0gMSByb290cyAod2hpY2ggZ2l2ZW4gb3VyIGNhbGxlciwgd2lsbCBiYXNpY2FsbHkgbWVhbgogICAgICAgICAgICAgYSByb290IG9mIDEsIGdpdmUtb3ItdGFrZSBudW1lcmljYWwgaW5zdGFiaWxpdHkpLiBJZiB3ZSBhcmUgaW4gdGhlCiAgICAgICAgICAgICA+PSAxIGNhc2UsIHJldHVybiB0aGUgZXhpc3Rpbmcgb2ZmQ3VydmUgcG9pbnQuCi0gICAgICAgIAorCiAgICAgICAgICAgICBUaGUgdGVzdCBiZWxvdyBjaGVja3MgdG8gc2VlIGlmIHdlIGFyZSBjbG9zZSB0byB0aGUgImVuZCIgb2YgdGhlCiAgICAgICAgICAgICBjdXJ2ZSAobmVhciBiYXNlWzRdKS4gUmF0aGVyIHRoYW4gc3BlY2lmeWluZyBhIHRvbGVyYW5jZSwgSSBqdXN0CiAgICAgICAgICAgICBjaGVjayB0byBzZWUgaWYgdmFsdWUgaXMgb24gdG8gdGhlIHJpZ2h0L2xlZnQgb2YgdGhlIG1pZGRsZSBwb2ludApAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKICAgICBpZiAoYWJzWSA8PSBTS19TY2FsYXJOZWFybHlaZXJvICYmIHggPiAwICYmCiAgICAgICAgICgoeSA+PSAwICYmIGtDV19Ta1JvdGF0aW9uRGlyZWN0aW9uID09IGRpcikgfHwKICAgICAgICAgICh5IDw9IDAgJiYga0NDV19Ta1JvdGF0aW9uRGlyZWN0aW9uID09IGRpcikpKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgc3RhcnQtcG9pbnQKICAgICAgICAgcXVhZFBvaW50c1swXS5zZXQoU0tfU2NhbGFyMSwgMCk7CiAgICAgICAgIHBvaW50Q291bnQgPSAxOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tHbHlwaENhY2hlLmNwcCBiL3NyYy9jb3JlL1NrR2x5cGhDYWNoZS5jcHAKaW5kZXggZTYxOTQxOS4uNTkwNGVkZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tHbHlwaENhY2hlLmNwcAorKysgYi9zcmMvY29yZS9Ta0dseXBoQ2FjaGUuY3BwCkBAIC00MjMsNyArNDIzLDcgQEAKIAogICAgICAgICBTa0RFTEVURShmTXV0ZXgpOwogICAgIH0KLSAgICAKKwogICAgIFNrTXV0ZXgqICAgICAgICBmTXV0ZXg7CiAgICAgU2tHbHlwaENhY2hlKiAgIGZIZWFkOwogICAgIHNpemVfdCAgICAgICAgICBmVG90YWxNZW1vcnlVc2VkOwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAgICAgc3RhdGljIFNrR2x5cGhDYWNoZV9HbG9iYWxzKiBGaW5kVExTKCkgewogICAgICAgICByZXR1cm4gKFNrR2x5cGhDYWNoZV9HbG9iYWxzKilTa1RMUzo6RmluZChDcmVhdGVUTFMpOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBTa0dseXBoQ2FjaGVfR2xvYmFscyYgR2V0VExTKCkgewogICAgICAgICByZXR1cm4gKihTa0dseXBoQ2FjaGVfR2xvYmFscyopU2tUTFM6OkdldChDcmVhdGVUTFMsIERlbGV0ZVRMUyk7CiAgICAgfQpAQCAtNDY5LDEwICs0NjksMTAgQEAKICAgICBpZiAobmV3TGltaXQgPCBtaW5MaW1pdCkgewogICAgICAgICBuZXdMaW1pdCA9IG1pbkxpbWl0OwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBwcmV2TGltaXQgPSBmRm9udENhY2hlTGltaXQ7CiAgICAgZkZvbnRDYWNoZUxpbWl0ID0gbmV3TGltaXQ7Ci0gICAgCisKICAgICBzaXplX3QgY3VyclVzZWQgPSBmVG90YWxNZW1vcnlVc2VkOwogICAgIGlmIChjdXJyVXNlZCA+IG5ld0xpbWl0KSB7CiAgICAgICAgIFNrQXV0b011dGV4QWNxdWlyZSAgICBhYyhmTXV0ZXgpOwpAQCAtNjMxLDcgKzYzMSw3IEBACiAjaWZkZWYgU0tfREVCVUcKIHZvaWQgU2tHbHlwaENhY2hlX0dsb2JhbHM6OnZhbGlkYXRlKCkgY29uc3QgewogICAgIHNpemVfdCBjb21wdXRlZCA9IDA7Ci0gICAgCisKICAgICBjb25zdCBTa0dseXBoQ2FjaGUqIGhlYWQgPSBmSGVhZDsKICAgICB3aGlsZSAoaGVhZCAhPSBOVUxMKSB7CiAgICAgICAgIGNvbXB1dGVkICs9IGhlYWQtPmZNZW1vcnlVc2VkOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tHcmFwaGljcy5jcHAgYi9zcmMvY29yZS9Ta0dyYXBoaWNzLmNwcAppbmRleCA1MzM0Yzg1Li5kNzFhNzBlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta0dyYXBoaWNzLmNwcAorKysgYi9zcmMvY29yZS9Ta0dyYXBoaWNzLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIHN0YXRpYyBjb25zdCBjaGFyIGtGb250Q2FjaGVMaW1pdFN0cltdID0gImZvbnQtY2FjaGUtbGltaXQiOwotc3RhdGljIGNvbnN0IHNpemVfdCBrRm9udENhY2hlTGltaXRMZW4gPSBzaXplb2Yoa0ZvbnRDYWNoZUxpbWl0U3RyKSAtIDE7IAorc3RhdGljIGNvbnN0IHNpemVfdCBrRm9udENhY2hlTGltaXRMZW4gPSBzaXplb2Yoa0ZvbnRDYWNoZUxpbWl0U3RyKSAtIDE7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogICAgIGNvbnN0IGNoYXIqIGZTdHI7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta0xpbmVDbGlwcGVyLmNwcCBiL3NyYy9jb3JlL1NrTGluZUNsaXBwZXIuY3BwCmluZGV4IGIyNTYwZDYuLjdiNzc0NmYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrTGluZUNsaXBwZXIuY3BwCisrKyBiL3NyYy9jb3JlL1NrTGluZUNsaXBwZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIGRvdWJsZSBYMSA9IHNyY1sxXS5mWDsKICAgICAgICAgZG91YmxlIFkxID0gc3JjWzFdLmZZOwogICAgICAgICBkb3VibGUgcmVzdWx0ID0gWDAgKyAoKGRvdWJsZSlZIC0gWTApICogKFgxIC0gWDApIC8gKFkxIC0gWTApOwotICAgICAgICAKKwogICAgICAgICAvLyBUaGUgY29tcHV0ZWQgWCB2YWx1ZSBtaWdodCBzdGlsbCBleGNlZWQgW1gwLi5YMV0gZHVlIHRvIHF1YW50dW0gZmx1eAogICAgICAgICAvLyB3aGVuIHRoZSBkb3VibGVzIHdlcmUgYWRkZWQgYW5kIHN1YnRyYWN0ZWQsIHNvIHdlIGhhdmUgdG8gcGluIHRoZQogICAgICAgICAvLyBhbnN3ZXIgOigKQEAgLTg3LDcgKzg3LDcgQEAKIGJvb2wgU2tMaW5lQ2xpcHBlcjo6SW50ZXJzZWN0TGluZShjb25zdCBTa1BvaW50IHNyY1syXSwgY29uc3QgU2tSZWN0JiBjbGlwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUG9pbnQgZHN0WzJdKSB7CiAgICAgU2tSZWN0IGJvdW5kczsKLSAgICAKKwogICAgIGJvdW5kcy5zZXQoc3JjLCAyKTsKICAgICBpZiAoY29udGFpbnNOb0VtcHR5Q2hlY2soY2xpcCwgYm91bmRzKSkgewogICAgICAgICBpZiAoc3JjICE9IGRzdCkgewpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgfQogCiAgICAgaW50IGluZGV4MCwgaW5kZXgxOwotICAgIAorCiAgICAgaWYgKHNyY1swXS5mWSA8IHNyY1sxXS5mWSkgewogICAgICAgICBpbmRleDAgPSAwOwogICAgICAgICBpbmRleDEgPSAxOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgaWYgKHRtcFtpbmRleDFdLmZZID4gY2xpcC5mQm90dG9tKSB7CiAgICAgICAgIHRtcFtpbmRleDFdLnNldChzZWN0X3dpdGhfaG9yaXpvbnRhbChzcmMsIGNsaXAuZkJvdHRvbSksIGNsaXAuZkJvdHRvbSk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHRtcFswXS5mWCA8IHRtcFsxXS5mWCkgewogICAgICAgICBpbmRleDAgPSAwOwogICAgICAgICBpbmRleDEgPSAxOwpAQCAtMTc0LDcgKzE3NCw3IEBACiAvLwogc3RhdGljIHZvaWQgc2VjdF93aXRoX2hvcml6b250YWxfdGVzdF9mb3JfcGluX3Jlc3VsdHMoKSB7CiAgICAgY29uc3QgU2tQb2ludCBwdHNbXSA9IHsKLSAgICAgICAgeyAtNTQwMDAwLAktNzIwMDAwIH0sCisgICAgICAgIHsgLTU0MDAwMCwgICAgLTcyMDAwMCB9LAogICAgICAgICB7IFNrRmxvYXRUb1NjYWxhcigtOS4xMDAwMDAxN2UtMDVmKSwgU2tGbG9hdFRvU2NhbGFyKDkuOTk5OTk5OTZlLTEzZikgfQogICAgIH07CiAgICAgZmxvYXQgeCA9IHNlY3Rfd2l0aF9ob3Jpem9udGFsKHB0cywgMCk7CkBAIC0yMTQsNyArMjE0LDcgQEAKICAgICBpZiAocHRzW2luZGV4MF0uZlkgPj0gY2xpcC5mQm90dG9tKSB7ICAvLyB3ZSdyZSBiZWxvdyB0aGUgY2xpcAogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICAvLyBDaG9wIGluIFkgdG8gcHJvZHVjZSBhIHNpbmdsZSBzZWdtZW50LCBzdG9yZWQgaW4gdG1wWzAuLjFdCiAKICAgICBTa1BvaW50IHRtcFsyXTsKQEAgLTI1OSw3ICsyNTksNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFN0b3JhZ2U7CiAgICAgICAgIFNrUG9pbnQqIHIgPSByZXN1bHQ7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0bXBbaW5kZXgwXS5mWCA8IGNsaXAuZkxlZnQpIHsKICAgICAgICAgICAgIHItPnNldChjbGlwLmZMZWZ0LCB0bXBbaW5kZXgwXS5mWSk7CiAgICAgICAgICAgICByICs9IDE7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta01hbGxvY1BpeGVsUmVmLmNwcCBiL3NyYy9jb3JlL1NrTWFsbG9jUGl4ZWxSZWYuY3BwCmluZGV4IDc1OGNiZjIuLjcxZTY3MmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrTWFsbG9jUGl4ZWxSZWYuY3BwCisrKyBiL3NyYy9jb3JlL1NrTWFsbG9jUGl4ZWxSZWYuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgZkNUYWJsZSA9IGN0YWJsZTsKICAgICBTa1NhZmVSZWYoY3RhYmxlKTsKICAgICBmT3duUGl4ZWxzID0gb3duUGl4ZWxzOwotICAgIAorCiAgICAgdGhpcy0+c2V0UHJlTG9ja2VkKGZTdG9yYWdlLCBmQ1RhYmxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tNYXNrLmNwcCBiL3NyYy9jb3JlL1NrTWFzay5jcHAKaW5kZXggMzYwNDdmZS4uYzI5MGI1NyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tNYXNrLmNwcAorKysgYi9zcmMvY29yZS9Ta01hc2suY3BwCkBAIC02OCw3ICs2OCw3IEBACiAgICAgU2tBU1NFUlQoa0JXX0Zvcm1hdCAhPSBmRm9ybWF0KTsKICAgICBTa0FTU0VSVChmQm91bmRzLmNvbnRhaW5zKHgsIHkpKTsKICAgICBTa0FTU0VSVChmSW1hZ2UpOwotICAgIAorCiAgICAgY2hhciogYWRkciA9IChjaGFyKilmSW1hZ2U7CiAgICAgYWRkciArPSAoeSAtIGZCb3VuZHMuZlRvcCkgKiBmUm93Qnl0ZXM7CiAgICAgYWRkciArPSAoeCAtIGZCb3VuZHMuZkxlZnQpIDw8IG1hc2tGb3JtYXRUb1NoaWZ0KGZGb3JtYXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tNYXNrR2FtbWEuaCBiL3NyYy9jb3JlL1NrTWFza0dhbW1hLmgKaW5kZXggN2Q4YjllMy4uMzdjNjlmNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tNYXNrR2FtbWEuaAorKysgYi9zcmMvY29yZS9Ta01hc2tHYW1tYS5oCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogI2RlZmluZSBNYWNyb0NvbW1hICwKIFNLX0RFRklORV9JTlNUX0NPVU5UX1RFTVBMQVRFKAotICAgIHRlbXBsYXRlIDxpbnQgUl9MVU1fQklUUyBNYWNyb0NvbW1hIGludCBHX0xVTV9CSVRTIE1hY3JvQ29tbWEgaW50IEJfTFVNX0JJVFM+LCAKKyAgICB0ZW1wbGF0ZSA8aW50IFJfTFVNX0JJVFMgTWFjcm9Db21tYSBpbnQgR19MVU1fQklUUyBNYWNyb0NvbW1hIGludCBCX0xVTV9CSVRTPiwKICAgICBTa1RNYXNrR2FtbWE8Ul9MVU1fQklUUyBNYWNyb0NvbW1hIEdfTFVNX0JJVFMgTWFjcm9Db21tYSBCX0xVTV9CSVRTPik7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tNYXRoLmNwcCBiL3NyYy9jb3JlL1NrTWF0aC5jcHAKaW5kZXggYTE0OTYyNS4uY2NkOTZlOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tNYXRoLmNwcAorKysgYi9zcmMvY29yZS9Ta01hdGguY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjZGVmaW5lIHN1Yl9zaGlmdCh6ZXJvcywgeCwgbikgIFwKICAgICB6ZXJvcyAtPSBuOyAgICAgICAgICAgICAgICAgXAogICAgIHggPj49IG4KLSAgICAKKwogaW50IFNrQ0xaX3BvcnRhYmxlKHVpbnQzMl90IHgpIHsKICAgICBpZiAoeCA9PSAwKSB7CiAgICAgICAgIHJldHVybiAzMjsKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgIGludCBseiA9IFNrQ0xaKGEpOwogICAgIGEgPSBhIDw8IGx6ID4+IDE2OwogCi0gICAgLy8gY29tcHV0ZSAxL2EgYXBwcm94aW1hdGlvbiAoMC41IDw9IGEgPCAxLjApIAorICAgIC8vIGNvbXB1dGUgMS9hIGFwcHJveGltYXRpb24gKDAuNSA8PSBhIDwgMS4wKQogICAgIHVpbnQzMl90IHIgPSAweDE3NDAwIC0gYTsgICAgICAvLyAoMi45MDYyNSAofjIuOTE0KSAtIDIqYSkgPj4gMQogCiAgICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uOgpAQCAtMjUzLDEzICsyNTMsMTMgQEAKICAgICBjYXNlIG46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoKG51bWVyID0gKG51bWVyIDw8IDEpIC0gZGVub20pID49IDApICAgICAgICBcCiAgICAgICAgICAgICByZXN1bHQgfD0gMSA8PCAobiAtIDEpOyBlbHNlIG51bWVyICs9IGRlbm9tCi0gICAgICAgICAgICAKKwogaW50MzJfdCBTa0RpdkJpdHMoaW50MzJfdCBudW1lciwgaW50MzJfdCBkZW5vbSwgaW50IHNoaWZ0X2JpYXMpIHsKICAgICBTa0FTU0VSVChkZW5vbSAhPSAwKTsKICAgICBpZiAobnVtZXIgPT0gMCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLy8gbWFrZSBudW1lciBhbmQgZGVub20gcG9zaXRpdmUsIGFuZCBzaWduIGhvbGQgdGhlIHJlc3VsdGluZyBzaWduCiAgICAgaW50MzJfdCBzaWduID0gU2tFeHRyYWN0U2lnbihudW1lciBeIGRlbm9tKTsKICAgICBudW1lciA9IFNrQWJzMzIobnVtZXIpOwpAQCAtMjc4LDE2ICsyNzgsMTYgQEAKIAogICAgIGRlbm9tIDw8PSBkYml0czsKICAgICBudW1lciA8PD0gbmJpdHM7Ci0gICAgCisKICAgICBTa0ZpeGVkIHJlc3VsdCA9IDA7Ci0gICAgCisKICAgICAvLyBkbyB0aGUgZmlyc3Qgb25lCiAgICAgaWYgKChudW1lciAtPSBkZW5vbSkgPj0gMCkgewogICAgICAgICByZXN1bHQgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG51bWVyICs9IGRlbm9tOwogICAgIH0KLSAgICAKKwogICAgIC8vIE5vdyBmYWxsIGludG8gb3VyIHN3aXRjaCBzdGF0ZW1lbnQgaWYgdGhlcmUgYXJlIG1vcmUgYml0cyB0byBjb21wdXRlCiAgICAgaWYgKGJpdHMgPiAwKSB7CiAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgdGhlIHJlc3Qgb2YgdGhlIGFuc3dlciBiaXRzCkBAIC0zMjQsNyArMzI0LDcgQEAKIAogICAgIG51bWVyID0gU2tBcHBseVNpZ24obnVtZXIsIHNuKTsKICAgICBkZW5vbSA9IFNrQXBwbHlTaWduKGRlbm9tLCBzZCk7Ci0gICAgCisKICAgICBpZiAobnVtZXIgPCBkZW5vbSkgewogICAgICAgICByZXR1cm4gU2tBcHBseVNpZ24obnVtZXIsIHNuKTsKICAgICB9IGVsc2UgaWYgKG51bWVyID09IGRlbm9tKSB7CkBAIC0zODcsNyArMzg3LDcgQEAKIAogU2tGaXhlZCBTa0ZpeGVkTWVhbihTa0ZpeGVkIGEsIFNrRml4ZWQgYikgewogICAgIFNrNjQgdG1wOwotICAgIAorCiAgICAgdG1wLnNldE11bChhLCBiKTsKICAgICByZXR1cm4gdG1wLmdldFNxcnQoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrTWF0aFByaXYuaCBiL3NyYy9jb3JlL1NrTWF0aFByaXYuaAppbmRleCA2ZmFjMTI0Li4xMWFkMWJhIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta01hdGhQcml2LmgKKysrIGIvc3JjL2NvcmUvU2tNYXRoUHJpdi5oCkBAIC00Miw3ICs0Miw3IEBACiAgICAgaW50IGRpZmYgPSBtYXggLSB2YWx1ZTsKICAgICAvLyBjbGVhciBkaWZmIGlmIGRpZmYgaXMgcG9zaXRpdmUKICAgICBkaWZmICY9IGRpZmYgPj4gMzE7Ci0gICAgCisKICAgICByZXR1cm4gdmFsdWUgKyBkaWZmOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta01hdHJpeC5jcHAgYi9zcmMvY29yZS9Ta01hdHJpeC5jcHAKaW5kZXggMTJkOGQ4Yi4uNTE0NTBmYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tNYXRyaXguY3BwCisrKyBiL3NyYy9jb3JlL1NrTWF0cml4LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiB2b2lkIFNrTWF0cml4OjpyZXNldCgpIHsKICAgICBmTWF0W2tNU2NhbGVYXSA9IGZNYXRba01TY2FsZVldID0gU0tfU2NhbGFyMTsKLSAgICBmTWF0W2tNU2tld1hdICA9IGZNYXRba01Ta2V3WV0gPSAKKyAgICBmTWF0W2tNU2tld1hdICA9IGZNYXRba01Ta2V3WV0gPQogICAgIGZNYXRba01UcmFuc1hdID0gZk1hdFtrTVRyYW5zWV0gPQogICAgIGZNYXRba01QZXJzcDBdID0gZk1hdFtrTVBlcnNwMV0gPSAwOwogICAgIGZNYXRba01QZXJzcDJdID0ga01hdHJpeDIyRWxlbTsKQEAgLTY5LDkgKzY5LDkgQEAKICAgICAvLyB0aGF0IHJlc3VsdC4KICAgICBpZiAoZk1hdFtrTVBlcnNwMF0gIT0gMCB8fCBmTWF0W2tNUGVyc3AxXSAhPSAwIHx8CiAgICAgICAgIGZNYXRba01QZXJzcDJdICE9IGtNYXRyaXgyMkVsZW0pIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBlcnNwZWN0aXZlIHRyYW5zZm9ybSwgd2UgcmV0dXJuIHRydWUgZm9yIGFsbCBvdGhlciAKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBlcnNwZWN0aXZlIHRyYW5zZm9ybSwgd2UgcmV0dXJuIHRydWUgZm9yIGFsbCBvdGhlcgogICAgICAgICAvLyB0cmFuc2Zvcm0gZmxhZ3MgLSB0aGlzIGRvZXMgbm90IGRpc2FibGUgYW55IG9wdGltaXphdGlvbnMsIHJlc3BlY3RzCi0gICAgICAgIC8vIHRoZSBydWxlIHRoYXQgdGhlIHR5cGUgbWFzayBtdXN0IGJlIGNvbnNlcnZhdGl2ZSwgYW5kIHNwZWVkcyB1cCAKKyAgICAgICAgLy8gdGhlIHJ1bGUgdGhhdCB0aGUgdHlwZSBtYXNrIG11c3QgYmUgY29uc2VydmF0aXZlLCBhbmQgc3BlZWRzIHVwCiAgICAgICAgIC8vIHR5cGUgbWFzayBjb21wdXRhdGlvbi4KICAgICAgICAgcmV0dXJuIFNrVG9VOChrT1JhYmxlTWFza3MpOwogICAgIH0KQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICAgICAgbWFzayB8PSBrU2NhbGVfTWFzazsKICAgICAgICAgfQogCi0gICAgICAgIC8vIE5vdCBhZmZpbmUsIHRoZXJlZm9yZSB3ZSBhbHJlYWR5IGtub3cgc2Vjb25kYXJ5IGRpYWdvbmFsIGlzIAorICAgICAgICAvLyBOb3QgYWZmaW5lLCB0aGVyZWZvcmUgd2UgYWxyZWFkeSBrbm93IHNlY29uZGFyeSBkaWFnb25hbCBpcwogICAgICAgICAvLyBhbGwgemVyb3MsIHNvIHdlIGp1c3QgbmVlZCB0byBjaGVjayB0aGF0IHByaW1hcnkgZGlhZ29uYWwgaXMKICAgICAgICAgLy8gYWxsIG5vbi16ZXJvLgogCkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgZk1hdFtrTVRyYW5zWV0gPSBkeTsKIAogICAgICAgICBmTWF0W2tNU2NhbGVYXSA9IGZNYXRba01TY2FsZVldID0gU0tfU2NhbGFyMTsKLSAgICAgICAgZk1hdFtrTVNrZXdYXSAgPSBmTWF0W2tNU2tld1ldID0gCisgICAgICAgIGZNYXRba01Ta2V3WF0gID0gZk1hdFtrTVNrZXdZXSA9CiAgICAgICAgIGZNYXRba01QZXJzcDBdID0gZk1hdFtrTVBlcnNwMV0gPSAwOwogICAgICAgICBmTWF0W2tNUGVyc3AyXSA9IGtNYXRyaXgyMkVsZW07CiAKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICBtLnNldFRyYW5zbGF0ZShkeCwgZHkpOwogICAgICAgICByZXR1cm4gdGhpcy0+cHJlQ29uY2F0KG0pOwogICAgIH0KLSAgICAKKwogICAgIGlmIChTa1NjYWxhclRvQ29tcGFyZVR5cGUoZHgpIHx8IFNrU2NhbGFyVG9Db21wYXJlVHlwZShkeSkpIHsKICAgICAgICAgZk1hdFtrTVRyYW5zWF0gKz0gU2tTY2FsYXJNdWwoZk1hdFtrTVNjYWxlWF0sIGR4KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyTXVsKGZNYXRba01Ta2V3WF0sIGR5KTsKQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgICBtLnNldFRyYW5zbGF0ZShkeCwgZHkpOwogICAgICAgICByZXR1cm4gdGhpcy0+cG9zdENvbmNhdChtKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoU2tTY2FsYXJUb0NvbXBhcmVUeXBlKGR4KSB8fCBTa1NjYWxhclRvQ29tcGFyZVR5cGUoZHkpKSB7CiAgICAgICAgIGZNYXRba01UcmFuc1hdICs9IGR4OwogICAgICAgICBmTWF0W2tNVHJhbnNZXSArPSBkeTsKQEAgLTIzMyw5ICsyMzMsOSBAQAogICAgICAgICBmTWF0W2tNVHJhbnNZXSA9IHB5IC0gU2tTY2FsYXJNdWwoc3ksIHB5KTsKICAgICAgICAgZk1hdFtrTVBlcnNwMl0gPSBrTWF0cml4MjJFbGVtOwogCi0gICAgICAgIGZNYXRba01Ta2V3WF0gID0gZk1hdFtrTVNrZXdZXSA9IAorICAgICAgICBmTWF0W2tNU2tld1hdICA9IGZNYXRba01Ta2V3WV0gPQogICAgICAgICBmTWF0W2tNUGVyc3AwXSA9IGZNYXRba01QZXJzcDFdID0gMDsKLSAgICAgICAgCisKICAgICAgICAgdGhpcy0+c2V0VHlwZU1hc2soa1NjYWxlX01hc2sgfCBrVHJhbnNsYXRlX01hc2sgfCBrUmVjdFN0YXlzUmVjdF9NYXNrKTsKICAgICB9CiB9CkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICAgICAgZk1hdFtrTVBlcnNwMl0gPSBrTWF0cml4MjJFbGVtOwogCiAgICAgICAgIGZNYXRba01UcmFuc1hdID0gZk1hdFtrTVRyYW5zWV0gPQotICAgICAgICBmTWF0W2tNU2tld1hdICA9IGZNYXRba01Ta2V3WV0gPSAKKyAgICAgICAgZk1hdFtrTVNrZXdYXSAgPSBmTWF0W2tNU2tld1ldID0KICAgICAgICAgZk1hdFtrTVBlcnNwMF0gPSBmTWF0W2tNUGVyc3AxXSA9IDA7CiAKICAgICAgICAgdGhpcy0+c2V0VHlwZU1hc2soa1NjYWxlX01hc2sgfCBrUmVjdFN0YXlzUmVjdF9NYXNrKTsKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgICAgICBpbnQgZHMgPSBkZW5vbSA+PiAzMTsKICAgICAgICAgbnVtZXIgPSAobnVtZXIgXiBucykgLSBuczsKICAgICAgICAgZGVub20gPSAoZGVub20gXiBkcykgLSBkczsKLSAgICAgICAgCisKICAgICAgICAgU2tGaXhlZCBhbnN3ZXIgPSAobnVtZXIgKyAoZGVub20gPj4gMSkpIC8gZGVub207CiAgICAgICAgIGludCBhcyA9IG5zIF4gZHM7CiAgICAgICAgIHJldHVybiAoYW5zd2VyIF4gYXMpIC0gYXM7CkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICBmTWF0W2tNU2NhbGVYXSAqPSBpbnZYOwogICAgIGZNYXRba01Ta2V3WF0gICo9IGludlg7CiAgICAgZk1hdFtrTVRyYW5zWF0gKj0gaW52WDsKLSAgICAKKwogICAgIGZNYXRba01TY2FsZVldICo9IGludlk7CiAgICAgZk1hdFtrTVNrZXdZXSAgKj0gaW52WTsKICAgICBmTWF0W2tNVHJhbnNZXSAqPSBpbnZZOwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAKICAgICBmTWF0W2tNUGVyc3AwXSA9IGZNYXRba01QZXJzcDFdID0gMDsKICAgICBmTWF0W2tNUGVyc3AyXSA9IGtNYXRyaXgyMkVsZW07Ci0gICAgCisKICAgICB0aGlzLT5zZXRUeXBlTWFzayhrVW5rbm93bl9NYXNrIHwga09ubHlQZXJzcGVjdGl2ZVZhbGlkX01hc2spOwogfQogCkBAIC01MjUsNyArNTI1LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZGlmZiA9IGRzdC5oZWlnaHQoKSAtIFNrU2NhbGFyTXVsKHNyYy5oZWlnaHQoKSwgc3kpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChhbGlnbiA9PSBrQ2VudGVyX1NjYWxlVG9GaXQpIHsKICAgICAgICAgICAgICAgICBkaWZmID0gU2tTY2FsYXJIYWxmKGRpZmYpOwogICAgICAgICAgICAgfQpAQCAtNTQxLDcgKzU0MSw3IEBACiAgICAgICAgIGZNYXRba01TY2FsZVldID0gc3k7CiAgICAgICAgIGZNYXRba01UcmFuc1hdID0gdHg7CiAgICAgICAgIGZNYXRba01UcmFuc1ldID0gdHk7Ci0gICAgICAgIGZNYXRba01Ta2V3WF0gID0gZk1hdFtrTVNrZXdZXSA9IAorICAgICAgICBmTWF0W2tNU2tld1hdICA9IGZNYXRba01Ta2V3WV0gPQogICAgICAgICBmTWF0W2tNUGVyc3AwXSA9IGZNYXRba01QZXJzcDFdID0gMDsKIAogICAgICAgICB0aGlzLT5zZXRUeXBlTWFzayhrU2NhbGVfTWFzayB8IGtUcmFuc2xhdGVfTWFzayB8IGtSZWN0U3RheXNSZWN0X01hc2spOwpAQCAtODY2LDcgKzg2Niw3IEBACiAgICAgICAgICAgICBpbnYtPmZNYXRba01TY2FsZVldID0gU2tTY2FsYXJNdWxTaGlmdChTa1BlcnNwTXVsKGZNYXRba01TY2FsZVhdLCBmTWF0W2tNUGVyc3AyXSkgLSBTa1BlcnNwTXVsKGZNYXRba01UcmFuc1hdLCAgZk1hdFtrTVBlcnNwMF0pLCBzY2FsZSwgc2hpZnQpOwogICAgICAgICAgICAgaW52LT5mTWF0W2tNVHJhbnNZXSA9IFNrU2NhbGFyTXVsU2hpZnQoU2tTY2FsYXJNdWwoZk1hdFtrTVRyYW5zWF0sIGZNYXRba01Ta2V3WV0pIC0gU2tTY2FsYXJNdWwoZk1hdFtrTVNjYWxlWF0sIGZNYXRba01UcmFuc1ldKSwgc2NhbGUsIHNoaWZ0KTsKIAotICAgICAgICAgICAgaW52LT5mTWF0W2tNUGVyc3AwXSA9IFNrU2NhbGFyTXVsU2hpZnQoU2tTY2FsYXJNdWwoZk1hdFtrTVNrZXdZXSwgZk1hdFtrTVBlcnNwMV0pIC0gU2tTY2FsYXJNdWwoZk1hdFtrTVNjYWxlWV0sIGZNYXRba01QZXJzcDBdKSwgc2NhbGUsIHNoaWZ0KTsgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnYtPmZNYXRba01QZXJzcDBdID0gU2tTY2FsYXJNdWxTaGlmdChTa1NjYWxhck11bChmTWF0W2tNU2tld1ldLCBmTWF0W2tNUGVyc3AxXSkgLSBTa1NjYWxhck11bChmTWF0W2tNU2NhbGVZXSwgZk1hdFtrTVBlcnNwMF0pLCBzY2FsZSwgc2hpZnQpOwogICAgICAgICAgICAgaW52LT5mTWF0W2tNUGVyc3AxXSA9IFNrU2NhbGFyTXVsU2hpZnQoU2tTY2FsYXJNdWwoZk1hdFtrTVNrZXdYXSwgZk1hdFtrTVBlcnNwMF0pIC0gU2tTY2FsYXJNdWwoZk1hdFtrTVNjYWxlWF0sIGZNYXRba01QZXJzcDFdKSwgc2NhbGUsIHNoaWZ0KTsKICAgICAgICAgICAgIGludi0+Zk1hdFtrTVBlcnNwMl0gPSBTa1NjYWxhck11bFNoaWZ0KFNrU2NhbGFyTXVsKGZNYXRba01TY2FsZVhdLCBmTWF0W2tNU2NhbGVZXSkgLSBTa1NjYWxhck11bChmTWF0W2tNU2tld1hdLCBmTWF0W2tNU2tld1ldKSwgc2NhbGUsIHNoaWZ0KTsKICNpZmRlZiBTS19TQ0FMQVJfSVNfRklYRUQKQEAgLTkxNSw3ICs5MTUsNyBAQAogICAgICAgICAgICAgaW52LT5mTWF0W2tNU2NhbGVYXSA9IFNrTXVsU2hpZnQoZk1hdFtrTVNjYWxlWV0sIHNjYWxlLCBmaXhlZFNoaWZ0KTsKICAgICAgICAgICAgIGludi0+Zk1hdFtrTVNrZXdYXSAgPSBTa011bFNoaWZ0KC1mTWF0W2tNU2tld1hdLCBzY2FsZSwgZml4ZWRTaGlmdCk7CiAgICAgICAgICAgICBpbnYtPmZNYXRba01UcmFuc1hdID0gU2tNdWxTaGlmdCh0eC5nZXRTaGlmdFJpZ2h0KDMzIC0gY2x6TnVtZXIpLCBzY2FsZSwgc2s2NHNoaWZ0KTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaW52LT5mTWF0W2tNU2tld1ldICA9IFNrTXVsU2hpZnQoLWZNYXRba01Ta2V3WV0sIHNjYWxlLCBmaXhlZFNoaWZ0KTsKICAgICAgICAgICAgIGludi0+Zk1hdFtrTVNjYWxlWV0gPSBTa011bFNoaWZ0KGZNYXRba01TY2FsZVhdLCBzY2FsZSwgZml4ZWRTaGlmdCk7CiAgICAgICAgICAgICBpbnYtPmZNYXRba01UcmFuc1ldID0gU2tNdWxTaGlmdCh0eS5nZXRTaGlmdFJpZ2h0KDMzIC0gY2x6TnVtZXIpLCBzY2FsZSwgc2s2NHNoaWZ0KTsKQEAgLTkyNCw3ICs5MjQsNyBAQAogICAgICAgICAgICAgaW52LT5mTWF0W2tNU2tld1hdID0gU2tEb3VibGVUb0Zsb2F0KC1mTWF0W2tNU2tld1hdICogc2NhbGUpOwogICAgICAgICAgICAgaW52LT5mTWF0W2tNVHJhbnNYXSA9IG11bF9kaWZmX3NjYWxlKGZNYXRba01Ta2V3WF0sIGZNYXRba01UcmFuc1ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZNYXRba01TY2FsZVldLCBmTWF0W2tNVHJhbnNYXSwgc2NhbGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnYtPmZNYXRba01Ta2V3WV0gPSBTa0RvdWJsZVRvRmxvYXQoLWZNYXRba01Ta2V3WV0gKiBzY2FsZSk7CiAgICAgICAgICAgICBpbnYtPmZNYXRba01TY2FsZVldID0gU2tEb3VibGVUb0Zsb2F0KGZNYXRba01TY2FsZVhdICogc2NhbGUpOwogICAgICAgICAgICAgaW52LT5mTWF0W2tNVHJhbnNZXSA9IG11bF9kaWZmX3NjYWxlKGZNYXRba01Ta2V3WV0sIGZNYXRba01UcmFuc1hdLApAQCAtOTMzLDcgKzkzMyw3IEBACiAgICAgICAgICAgICBpbnYtPmZNYXRba01QZXJzcDBdID0gMDsKICAgICAgICAgICAgIGludi0+Zk1hdFtrTVBlcnNwMV0gPSAwOwogICAgICAgICAgICAgaW52LT5mTWF0W2tNUGVyc3AyXSA9IGtNYXRyaXgyMkVsZW07Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAKICAgICAgICAgaW52LT5zZXRUeXBlTWFzayhmVHlwZU1hc2spOwpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAKIHZvaWQgU2tNYXRyaXg6OlJvdFRyYW5zX3h5KGNvbnN0IFNrTWF0cml4JiBtLCBTa1NjYWxhciBzeCwgU2tTY2FsYXIgc3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BvaW50KiBwdCkgewogICAgIFNrQVNTRVJUKChtLmdldFR5cGUoKSAmIChrQWZmaW5lX01hc2sgfCBrUGVyc3BlY3RpdmVfTWFzaykpID09IGtBZmZpbmVfTWFzayk7Ci0gICAgCisKICNpZmRlZiBTS19TQ0FMQVJfSVNfRklYRUQKICAgICBwdC0+ZlggPSBmaXhtdWxhZGRtdWwoc3gsIG0uZk1hdFtrTVNjYWxlWF0sIHN5LCBtLmZNYXRba01Ta2V3WF0pICsKICAgICAgICAgICAgICBtLmZNYXRba01UcmFuc1hdOwpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tQb2ludCogcHQpIHsKICAgICBTa0FTU0VSVCgobS5nZXRUeXBlKCkgJiAoa1NjYWxlX01hc2sgfCBrQWZmaW5lX01hc2sgfCBrUGVyc3BlY3RpdmVfTWFzaykpCiAgICAgICAgICAgICAgPT0ga1NjYWxlX01hc2spOwotICAgIAorCiAgICAgcHQtPmZYID0gU2tTY2FsYXJNdWxBZGQoc3gsIG0uZk1hdFtrTVNjYWxlWF0sIG0uZk1hdFtrTVRyYW5zWF0pOwogICAgIHB0LT5mWSA9IFNrU2NhbGFyTXVsQWRkKHN5LCBtLmZNYXRba01TY2FsZVldLCBtLmZNYXRba01UcmFuc1ldKTsKIH0KQEAgLTEzMzMsNyArMTMzMyw3IEBACiAKIGludCBTa1BlcnNwSXRlcjo6bmV4dCgpIHsKICAgICBpbnQgbiA9IGZDb3VudDsKLSAgICAKKwogICAgIGlmICgwID09IG4pIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAKICAgICAgICAgKnArKyA9IHg7IHggKz0gZHg7CiAgICAgICAgICpwKysgPSB5OyB5ICs9IGR5OwogICAgIH0KLSAgICAKKwogICAgIGZDb3VudCAtPSBuOwogICAgIHJldHVybiBuOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tNZW1vcnlfc3RkbGliLmNwcCBiL3NyYy9jb3JlL1NrTWVtb3J5X3N0ZGxpYi5jcHAKaW5kZXggMDMzYjMzMS4uMTdiZjZhOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tNZW1vcnlfc3RkbGliLmNwcAorKysgYi9zcmMvY29yZS9Ta01lbW9yeV9zdGRsaWIuY3BwCkBAIC01MCw3ICs1MCw3IEBACiAgICAgLy8gZGF0YSBnb2VzIGhlcmUuIFRoZSBvZmZzZXQgdG8gdGhpcyBwb2ludCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOAogICAgIGNoYXIgZlRyYWlsZXJbc2l6ZW9mKGtCbG9ja1RyYWlsZXJUYWcpXTsKIAotICAgIHZvaWQqIGFkZChzaXplX3QgcmVhbFNpemUpIAorICAgIHZvaWQqIGFkZChzaXplX3QgcmVhbFNpemUpCiAgICAgewogICAgICAgICBTa0F1dG9NdXRleEFjcXVpcmUgIGFjKGdldF9ibG9ja19tdXRleCgpKTsKICAgICAgICAgSW5NdXRleFZhbGlkYXRlKCk7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIG1lbWNweSh0cmFpbGVyLCBrQmxvY2tUcmFpbGVyVGFnLCBzaXplb2Yoa0Jsb2NrVHJhaWxlclRhZykpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyB2b2lkIER1bXAoKQogICAgIHsKICAgICAgICAgU2tBdXRvTXV0ZXhBY3F1aXJlICBhYyhnZXRfYmxvY2tfbXV0ZXgoKSk7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgY29uc3QgY2hhciogdHJhaWxlciA9IGZUcmFpbGVyICsgZlNpemU7CiAgICAgICAgIFNrQVNTRVJUKG1lbWNtcCh0cmFpbGVyLCBrQmxvY2tUcmFpbGVyVGFnLCBzaXplb2Yoa0Jsb2NrVHJhaWxlclRhZykpID09IDApOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyB2b2lkIFZhbGlkYXRlKCkKICAgICB7CiAgICAgICAgIFNrQXV0b011dGV4QWNxdWlyZSAgYWMoZ2V0X2Jsb2NrX211dGV4KCkpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgIGFkZHIgPSBoZWFkZXI7CiAgICAgfQogICAgIHNpemVfdCByZWFsU2l6ZSA9IHNpemU7Ci0gICAgaWYgKHNpemUpIAorICAgIGlmIChzaXplKQogICAgICAgICBzaXplICs9IHNpemVvZihTa0Jsb2NrSGVhZGVyKTsKICNlbmRpZgogCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICB7CiAgICAgICAgIFZhbGlkYXRlSGVhcCgpOwogI2lmZGVmIFNLX1RBR19CTE9DS1MKLSAgICAgICAgU2tCbG9ja0hlYWRlciogaGVhZGVyID0gKFNrQmxvY2tIZWFkZXIqKSAKKyAgICAgICAgU2tCbG9ja0hlYWRlciogaGVhZGVyID0gKFNrQmxvY2tIZWFkZXIqKQogICAgICAgICAgICAgKChjaGFyKilwIC0gU0tfT0ZGU0VUT0YoU2tCbG9ja0hlYWRlciwgZlRyYWlsZXIpKTsKICAgICAgICAgaGVhZGVyLT5yZW1vdmUoKTsKICNpZmRlZiBTS19UUkFDS19BTExPQwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgc2l6ZV90IHJlYWxTaXplID0gc2l6ZTsKICAgICBzaXplICs9IHNpemVvZihTa0Jsb2NrSGVhZGVyKTsKICNlbmRpZgotICAgIAorCiAgICAgdm9pZCogcCA9IG1hbGxvYyhzaXplKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrUGFja0JpdHMuY3BwIGIvc3JjL2NvcmUvU2tQYWNrQml0cy5jcHAKaW5kZXggOGVkZDRjMC4uN2ExNDQ0YiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tQYWNrQml0cy5jcHAKKysrIGIvc3JjL2NvcmUvU2tQYWNrQml0cy5jcHAKQEAgLTg4LDcgKzg4LDcgQEAKICAgICBTa0FTU0VSVCgodW5zaWduZWQpbiA8PSAxMjgpOwogICAgIGdNZW1TZXRCdWNrZXRzW25dICs9IDE7CiAgICAgZ0NvdW50ZXIgKz0gMTsKLSAgICAKKwogICAgIGlmICgoZ0NvdW50ZXIgJiAweEZGKSA9PSAwKSB7CiAgICAgICAgIFNrRGVidWdmKCItLS0tLSBwYWNrYml0cyBtZW1zZXQgc3RhdHM6ICIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGdNZW1TZXRCdWNrZXRzKTsgaSsrKSB7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICBTa0FTU0VSVCgodW5zaWduZWQpbiA8PSAxMjgpOwogICAgIGdNZW1DcHlCdWNrZXRzW25dICs9IDE7CiAgICAgZ0NvdW50ZXIgKz0gMTsKLSAgICAKKwogICAgIGlmICgoZ0NvdW50ZXIgJiAweDFGRikgPT0gMCkgewogICAgICAgICBTa0RlYnVnZigiLS0tLS0gcGFja2JpdHMgbWVtY3B5IHN0YXRzOiAiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBTS19BUlJBWV9DT1VOVChnTWVtQ3B5QnVja2V0cyk7IGkrKykgewpAQCAtMjA3LDEwICsyMDcsMTAgQEAKICAgICAgICAgICAgICpkc3QrKyA9ICh1aW50OF90KSpzcmM7CiAgICAgICAgICAgICByZXR1cm4gZHN0IC0gb3JpZ0RzdDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9ICpzcmM7CiAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBzID0gc3JjICsgMTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCpzID09IHZhbHVlKSB7IC8vIGFjY3VtdWxhdGUgc2FtZSB2YWx1ZXMuLi4KICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBzKys7CkBAIC0yNDksMTAgKzI0OSwxMCBAQAogICAgICAgICAgICAgKmRzdCsrID0gKnNyYzsKICAgICAgICAgICAgIHJldHVybiBkc3QgLSBvcmlnRHN0OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKnNyYzsKICAgICAgICAgY29uc3QgdWludDhfdCogcyA9IHNyYyArIDE7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICgqcyA9PSB2YWx1ZSkgeyAvLyBhY2N1bXVsYXRlIHNhbWUgdmFsdWVzLi4uCiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgcysrOwpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QqIFNLX1JFU1RSSUNUIGRzdCkgewogICAgIHVpbnQxNl90KiBvcmlnRHN0ID0gZHN0OwogICAgIGNvbnN0IHVpbnQ4X3QqIHN0b3AgPSBzcmMgKyBzcmNTaXplOwotICAgIAorCiAgICAgd2hpbGUgKHNyYyA8IHN0b3ApIHsKICAgICAgICAgdW5zaWduZWQgbiA9ICpzcmMrKzsKICAgICAgICAgaWYgKG4gPD0gMTI3KSB7ICAgLy8gcmVwZWF0IGNvdW50IChuICsgMSkKQEAgLTMwNSw3ICszMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogU0tfUkVTVFJJQ1QgZHN0KSB7CiAgICAgdWludDhfdCogb3JpZ0RzdCA9IGRzdDsKICAgICBjb25zdCB1aW50OF90KiBzdG9wID0gc3JjICsgc3JjU2l6ZTsKLSAgICAKKwogICAgIHdoaWxlIChzcmMgPCBzdG9wKSB7CiAgICAgICAgIHVuc2lnbmVkIG4gPSAqc3JjKys7CiAgICAgICAgIGlmIChuIDw9IDEyNykgeyAgIC8vIHJlcGVhdCBjb3VudCAobiArIDEpCkBAIC0zMzYsNyArMzM2LDcgQEAKIAogICAgIFVucGFja1N0YXRlIHN0YXRlID0gQ0xFQU5fU1RBVEU7CiAgICAgc2l6ZV90ICAgICAgc3RhdGVDb3VudCA9IDA7Ci0gICAgCisKICAgICAvLyBzdGF0ZSAxOiBkbyB0aGUgc2tpcC1sb29wCiAgICAgd2hpbGUgKGRzdFNraXAgPiAwKSB7CiAgICAgICAgIHVuc2lnbmVkIG4gPSAqc3JjKys7CkBAIC0zNjEsNyArMzYxLDcgQEAKICAgICAgICAgfQogICAgICAgICBkc3RTa2lwIC09IG47CiAgICAgfQotICAgIAorCiAgICAgLy8gc3RhZ2UgMjogcGVyZm9ybSBhbnkgY2F0Y2h1cCBmcm9tIHRoZSBza2lwLXN0YWdlCiAgICAgaWYgKHN0YXRlQ291bnQgPiBkc3RXcml0ZSkgewogICAgICAgICBzdGF0ZUNvdW50ID0gZHN0V3JpdGU7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1BhaW50LmNwcCBiL3NyYy9jb3JlL1NrUGFpbnQuY3BwCmluZGV4IDA2MDU4YWIuLjljODEwYmUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUGFpbnQuY3BwCisrKyBiL3NyYy9jb3JlL1NrUGFpbnQuY3BwCkBAIC02MDAsNyArNjAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRleHQpIHsKICAgICBTa0FTU0VSVChjYWNoZSAhPSBOVUxMKTsKICAgICBTa0FTU0VSVCh0ZXh0ICE9IE5VTEwpOwotICAgIAorCiAgICAgcmV0dXJuIGNhY2hlLT5nZXRVbmljaGFyTWV0cmljcyhTa1VURjE2X05leHRVbmljaGFyKChjb25zdCB1aW50MTZfdCoqKXRleHQpKTsKIH0KIApAQCAtNjA4LDcgKzYwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0ZXh0KSB7CiAgICAgU2tBU1NFUlQoY2FjaGUgIT0gTlVMTCk7CiAgICAgU2tBU1NFUlQodGV4dCAhPSBOVUxMKTsKLSAgICAKKwogICAgIHJldHVybiBjYWNoZS0+Z2V0VW5pY2hhck1ldHJpY3MoU2tVVEYxNl9QcmV2VW5pY2hhcigoY29uc3QgdWludDE2X3QqKil0ZXh0KSk7CiB9CiAKQEAgLTYyNyw3ICs2MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogdGV4dCkgewogICAgIFNrQVNTRVJUKGNhY2hlICE9IE5VTEwpOwogICAgIFNrQVNTRVJUKHRleHQgIT0gTlVMTCk7Ci0gICAgCisKICAgICBjb25zdCBpbnQzMl90KiBwdHIgPSAqKGNvbnN0IGludDMyX3QqKil0ZXh0OwogICAgIFNrVW5pY2hhciB1bmkgPSAqLS1wdHI7CiAgICAgKnRleHQgPSAoY29uc3QgY2hhciopcHRyOwpAQCAtNjk0LDcgKzY5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0ZXh0KSB7CiAgICAgU2tBU1NFUlQoY2FjaGUgIT0gTlVMTCk7CiAgICAgU2tBU1NFUlQodGV4dCAhPSBOVUxMKTsKLSAgICAKKwogICAgIGNvbnN0IGludDMyX3QqIHB0ciA9ICooY29uc3QgaW50MzJfdCoqKXRleHQ7CiAgICAgU2tVbmljaGFyIHVuaSA9ICpwdHIrKzsKICAgICAqdGV4dCA9IChjb25zdCBjaGFyKilwdHI7CkBAIC03MDUsNyArNzA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRleHQpIHsKICAgICBTa0FTU0VSVChjYWNoZSAhPSBOVUxMKTsKICAgICBTa0FTU0VSVCh0ZXh0ICE9IE5VTEwpOwotICAgIAorCiAgICAgY29uc3QgaW50MzJfdCogcHRyID0gKihjb25zdCBpbnQzMl90KiopdGV4dDsKICAgICBTa1VuaWNoYXIgdW5pID0gKi0tcHRyOwogICAgICp0ZXh0ID0gKGNvbnN0IGNoYXIqKXB0cjsKQEAgLTgxMiw3ICs4MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRleHQsIFNrRml4ZWQsIFNrRml4ZWQpIHsKICAgICBTa0FTU0VSVChjYWNoZSAhPSBOVUxMKTsKICAgICBTa0FTU0VSVCh0ZXh0ICE9IE5VTEwpOwotICAgIAorCiAgICAgY29uc3QgaW50MzJfdCogcHRyID0gKihjb25zdCBpbnQzMl90KiopdGV4dDsKICAgICBTa1VuaWNoYXIgdW5pID0gKnB0cisrOwogICAgICp0ZXh0ID0gKGNvbnN0IGNoYXIqKXB0cjsKQEAgLTgyMyw3ICs4MjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRleHQsIFNrRml4ZWQgeCwgU2tGaXhlZCB5KSB7CiAgICAgU2tBU1NFUlQoY2FjaGUgIT0gTlVMTCk7CiAgICAgU2tBU1NFUlQodGV4dCAhPSBOVUxMKTsKLSAgICAKKwogICAgIGNvbnN0IGludDMyX3QqIHB0ciA9ICooY29uc3QgaW50MzJfdCoqKXRleHQ7CiAgICAgU2tVbmljaGFyIHVuaSA9ICotLXB0cjsKICAgICAqdGV4dCA9IChjb25zdCBjaGFyKilwdHI7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogI2VuZGlmCiAgICAgcmVjLT5zZXRDb250cmFzdChTa0Zsb2F0VG9TY2FsYXIoU0tfR0FNTUFfQ09OVFJBU1QpKTsKICAgICByZWMtPmZSZXNlcnZlZEFsaWduID0gMDsKLSAgICAKKwogICAgIC8qICBBbGxvdyB0aGUgZm9udGhvc3QgdG8gbW9kaWZ5IG91ciByZWMgYmVmb3JlIHdlIHVzZSBpdCBhcyBhIGtleSBpbnRvIHRoZQogICAgICAgICBjYWNoZS4gVGhpcyB3YXkgaWYgd2UncmUgYXNraW5nIGZvciBzb21ldGhpbmcgdGhhdCB0aGV5IHdpbGwgaWdub3JlLAogICAgICAgICB0aGV5IGNhbiBtb2RpZnkgb3VyIHJlYyB1cCBmcm9udCwgc28gd2UgZG9uJ3QgY3JlYXRlIGR1cGxpY2F0ZSBjYWNoZQpAQCAtMTcwMiwxMyArMTcwMiwxMyBAQAogICAgICAgICBjYXNlIFNrTWFzazo6a0E4X0Zvcm1hdDogewogICAgICAgICAgICAgLy8gZmlsdGVyIGRvd24gdGhlIGx1bWluYW5jZSB0byBhIHNpbmdsZSBjb21wb25lbnQsIHNpbmNlIEE4IGNhbid0CiAgICAgICAgICAgICAvLyB1c2UgcGVyLWNvbXBvbmVudCBpbmZvcm1hdGlvbgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNrQ29sb3IgY29sb3IgPSByZWMtPmdldEx1bWluYW5jZUNvbG9yKCk7CiAgICAgICAgICAgICBTa0F1dG9NdXRleEFjcXVpcmUgYW1hKGdNYXNrR2FtbWFDYWNoZU11dGV4KTsKICAgICAgICAgICAgIFU4Q1BVIGx1bSA9IGNhY2hlZFBhaW50THVtaW5hbmNlKHJlYy0+Z2V0UGFpbnRHYW1tYSgpKS0+Y29tcHV0ZUx1bWluYW5jZShjb2xvcik7CiAgICAgICAgICAgICAvLyBIQUNLOiBQcmV2ZW50cyBncmVlbiBmcm9tIGJlaW5nIHByZS1ibGVuZGVkIGFzIHdoaXRlLgogICAgICAgICAgICAgbHVtIC09ICgoMjU1IC0gbHVtKSAqIGx1bSkgLyAyNTU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gcmVkdWNlIHRvIG91ciBmaW5pdGUgbnVtYmVyIG9mIGJpdHMKICAgICAgICAgICAgIFNrTWFza0dhbW1hKiBtYXNrR2FtbWEgPSBjYWNoZWRNYXNrR2FtbWEocmVjLT5nZXRDb250cmFzdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMtPmdldFBhaW50R2FtbWEoKSwKQEAgLTE3ODAsNyArMTc4MCw3IEBACiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgLy8gTm93IHRoYXQgd2UncmUgZG9uZSB0d2Vha2luZyB0aGUgcmVjLCBjYWxsIHRoZSBQb3N0TWFrZVJlYyBjbGVhbnVwCiAgICAgU2tTY2FsZXJDb250ZXh0OjpQb3N0TWFrZVJlYygqdGhpcywgJnJlYyk7Ci0gICAgCisKICAgICBkZXNjU2l6ZSArPSBTa0Rlc2NyaXB0b3I6OkNvbXB1dGVPdmVyaGVhZChlbnRyeUNvdW50KTsKIAogICAgIFNrQXV0b0Rlc2NyaXB0b3IgICAgYWQoZGVzY1NpemUpOwpAQCAtMTgxNCwxNSArMTgxNCwxNSBAQAogICAgICAgICBTa0F1dG9EZXNjcmlwdG9yICAgIGFkMihkZXNjU2l6ZSk7CiAgICAgICAgIFNrRGVzY3JpcHRvciogICAgICAgZGVzYzEgPSBhZDEuZ2V0RGVzYygpOwogICAgICAgICBTa0Rlc2NyaXB0b3IqICAgICAgIGRlc2MyID0gYWQyLmdldERlc2MoKTsKLSAgICAgICAgCisKICAgICAgICAgbWVtc2V0KGRlc2MxLCAweDAwLCBkZXNjU2l6ZSk7CiAgICAgICAgIG1lbXNldChkZXNjMiwgMHhGRiwgZGVzY1NpemUpOwotICAgICAgICAKKwogICAgICAgICBkZXNjMS0+aW5pdCgpOwogICAgICAgICBkZXNjMi0+aW5pdCgpOwogICAgICAgICBkZXNjMS0+YWRkRW50cnkoa1JlY19Ta0Rlc2NyaXB0b3JUYWcsIHNpemVvZihyZWMpLCAmcmVjKTsKICAgICAgICAgZGVzYzItPmFkZEVudHJ5KGtSZWNfU2tEZXNjcmlwdG9yVGFnLCBzaXplb2YocmVjKSwgJnJlYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChwZSkgewogICAgICAgICAgICAgYWRkX2ZsYXR0ZW5hYmxlKGRlc2MxLCBrUGF0aEVmZmVjdF9Ta0Rlc2NyaXB0b3JUYWcsICZwZUJ1ZmZlcik7CiAgICAgICAgICAgICBhZGRfZmxhdHRlbmFibGUoZGVzYzIsIGtQYXRoRWZmZWN0X1NrRGVzY3JpcHRvclRhZywgJnBlQnVmZmVyKTsKQEAgLTE4MzUsNyArMTgzNSw3IEBACiAgICAgICAgICAgICBhZGRfZmxhdHRlbmFibGUoZGVzYzEsIGtSYXN0ZXJpemVyX1NrRGVzY3JpcHRvclRhZywgJnJhQnVmZmVyKTsKICAgICAgICAgICAgIGFkZF9mbGF0dGVuYWJsZShkZXNjMiwga1Jhc3Rlcml6ZXJfU2tEZXNjcmlwdG9yVGFnLCAmcmFCdWZmZXIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFNrQVNTRVJUKGRlc2NTaXplID09IGRlc2MxLT5nZXRMZW5ndGgoKSk7CiAgICAgICAgIFNrQVNTRVJUKGRlc2NTaXplID09IGRlc2MyLT5nZXRMZW5ndGgoKSk7CiAgICAgICAgIGRlc2MxLT5jb21wdXRlQ2hlY2tzdW0oKTsKQEAgLTE4NDQsNyArMTg0NCw3IEBACiAgICAgICAgIFNrQVNTRVJUKCFtZW1jbXAoZGVzYywgZGVzYzIsIGRlc2NTaXplKSk7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICBwcm9jKGRlc2MsIGNvbnRleHQpOwogfQogCkBAIC0yMzI3LDcgKzIzMjcsNyBAQAogdm9pZCBTa0RyYXdMb29wZXI6OmNvbXB1dGVGYXN0Qm91bmRzKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa1JlY3QmIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1JlY3QqIGRzdCkgewogICAgIFNrQ2FudmFzIGNhbnZhczsKLSAgICAKKwogICAgIHRoaXMtPmluaXQoJmNhbnZhcyk7CiAgICAgZm9yIChib29sIGZpcnN0VGltZSA9IHRydWU7OyBmaXJzdFRpbWUgPSBmYWxzZSkgewogICAgICAgICBTa1BhaW50IHAocGFpbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQYXRoLmNwcCBiL3NyYy9jb3JlL1NrUGF0aC5jcHAKaW5kZXggODE4NDM0NS4uMGIxNDQ0YyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tQYXRoLmNwcAorKysgYi9zcmMvY29yZS9Ta1BhdGguY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAKIC8vIGZsYWcgdG8gcmVxdWlyZSBhIG1vdmVUbyBpZiB3ZSBiZWdpbiB3aXRoIHNvbWV0aGluZyBlbHNlLCBsaWtlIGxpbmVUbyBldGMuCiAjZGVmaW5lIElOSVRJQUxfTEFTVE1PVkVUT0lOREVYX1ZBTFVFICAgfjAKIAotU2tQYXRoOjpTa1BhdGgoKSAKK1NrUGF0aDo6U2tQYXRoKCkKICAgICA6IGZGaWxsVHlwZShrV2luZGluZ19GaWxsVHlwZSkKICAgICAsIGZCb3VuZHNJc0RpcnR5KHRydWUpIHsKICAgICBmQ29udmV4aXR5ID0ga1Vua25vd25fQ29udmV4aXR5OwpAQCAtMjY1LDcgKzI2NSw3IEBACiBib29sIFNrUGF0aDo6aXNMaW5lKFNrUG9pbnQgbGluZVsyXSkgY29uc3QgewogICAgIGludCB2ZXJiQ291bnQgPSBmVmVyYnMuY291bnQoKTsKICAgICBpbnQgcHRDb3VudCA9IGZQdHMuY291bnQoKTsKLSAgICAKKwogICAgIGlmICgyID09IHZlcmJDb3VudCAmJiAyID09IHB0Q291bnQpIHsKICAgICAgICAgY29uc3QgdWludDhfdCogdmVyYnMgPSBmVmVyYnMuYmVnaW4oKTsKICAgICAgICAgaWYgKGtNb3ZlX1ZlcmIgPT0gdmVyYnNbMF0gJiYga0xpbmVfVmVyYiA9PSB2ZXJic1sxXSkgewpAQCAtMjgzLDEzICsyODMsMTMgQEAKIC8qCiAgRGV0ZXJtaW5lcyBpZiBwYXRoIGlzIGEgcmVjdCBieSBrZWVwaW5nIHRyYWNrIG9mIGNoYW5nZXMgaW4gZGlyZWN0aW9uCiAgYW5kIGxvb2tpbmcgZm9yIGEgbG9vcCBlaXRoZXIgY2xvY2t3aXNlIG9yIGNvdW50ZXJjbG9ja3dpc2UuCi0gCisKICBUaGUgZGlyZWN0aW9uIGlzIGNvbXB1dGVkIHN1Y2ggdGhhdDoKICAgMDogdmVydGljYWwgdXAKICAgMTogaG9yaXpvbnRhbCByaWdodAogICAyOiB2ZXJ0aWNhbCBkb3duCiAgIDM6IGhvcml6b250YWwgbGVmdAotIAorCiBBIHJlY3RhbmdsZSBjeWNsZXMgdXAvcmlnaHQvZG93bi9sZWZ0IG9yIHVwL2xlZnQvZG93bi9yaWdodC4KIAogVGhlIHRlc3QgZmFpbHMgaWY6CkBAIC0zMDMsMTEgKzMwMywxMSBAQAogICBUaGUgcGF0aCBjb250YWlucyBhIHF1YWRyYXRpYyBvciBjdWJpYy4KICAgVGhlIHBhdGggY29udGFpbnMgZmV3ZXIgdGhhbiBmb3VyIHBvaW50cy4KICAgVGhlIGZpbmFsIHBvaW50IGlzbid0IGVxdWFsIHRvIHRoZSBmaXJzdCBwb2ludC4KLSAgCisKIEl0J3MgT0sgaWYgdGhlIHBhdGggaGFzOgogICBTZXZlcmFsIGNvbGluZWFyIGxpbmUgc2VnbWVudHMgY29tcG9zaW5nIGEgcmVjdGFuZ2xlIHNpZGUuCiAgIFNpbmdsZSBwb2ludHMgb24gdGhlIHJlY3RhbmdsZSBzaWRlLgotICAKKwogVGhlIGRpcmVjdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNvcm5lcnMgZm91bmQgc2luY2Ugb3Bwb3NpdGUgc2lkZXMKIG11c3QgdHJhdmVsIGluIG9wcG9zaXRlIGRpcmVjdGlvbnMuCiAKQEAgLTkzNCw3ICs5MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyIHN3ZWVwQW5nbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tQb2ludCBwdHNba1NrQnVpbGRRdWFkQXJjU3RvcmFnZV0pIHsKIAotICAgIGlmICgwID09IHN3ZWVwQW5nbGUgJiYgCisgICAgaWYgKDAgPT0gc3dlZXBBbmdsZSAmJgogICAgICAgICAoMCA9PSBzdGFydEFuZ2xlIHx8IFNrSW50VG9TY2FsYXIoMzYwKSA9PSBzdGFydEFuZ2xlKSkgewogICAgICAgICAvLyBDaHJvbWUgdXNlcyB0aGlzIHBhdGggdG8gbW92ZSBpbnRvIGFuZCBvdXQgb2Ygb3ZhbHMuIElmIG5vdAogICAgICAgICAvLyB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRoZSBtb3ZlcyBjYW4gZGlzdG9ydCB0aGUgb3ZhbCdzCkBAIC0xOTI2LDE0ICsxOTI2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIFNrQVNTRVJUKGZQdENvdW50ID4gMik7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmFkZFZlYyh2ZWMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGludCBzeCA9IHNpZ24odmVjLmZYKTsKICAgICAgICAgICAgICAgICBpbnQgc3kgPSBzaWduKHZlYy5mWSk7CiAgICAgICAgICAgICAgICAgZkR4ICs9IChzeCAhPSBmU3gpOwogICAgICAgICAgICAgICAgIGZEeSArPSAoc3kgIT0gZlN5KTsKICAgICAgICAgICAgICAgICBmU3ggPSBzeDsKICAgICAgICAgICAgICAgICBmU3kgPSBzeTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChmRHggPiAzIHx8IGZEeSA+IDMpIHsKICAgICAgICAgICAgICAgICAgICAgZkNvbnZleGl0eSA9IFNrUGF0aDo6a0NvbmNhdmVfQ29udmV4aXR5OwogICAgICAgICAgICAgICAgIH0KQEAgLTIwMzUsNyArMjAzNSw3IEBACiBDb250b3VySXRlcjo6Q29udG91ckl0ZXIoY29uc3QgU2tUREFycmF5PHVpbnQ4X3Q+JiB2ZXJicywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1REQXJyYXk8U2tQb2ludD4mIHB0cykgewogICAgIGZTdG9wVmVyYnMgPSB2ZXJicy5iZWdpbigpICsgdmVyYnMuY291bnQoKTsKLSAgICAKKwogICAgIGZEb25lID0gZmFsc2U7CiAgICAgZkN1cnJQdCA9IHB0cy5iZWdpbigpOwogICAgIGZDdXJyVmVyYiA9IHZlcmJzLmJlZ2luKCk7CkBAIC0yMjkxLDcgKzIyOTEsNyBAQAogICAgICAgICAgICAgICAgIC8vIEl0cyBwb3NzaWJsZSB0aGF0IHdlIGNhbid0IGZpbmQgdHdvIG5vbi1kZWdlbmVyYXRlIHZlY3RvcnMsIHNvCiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBndWFyZCBvdXIgc2VhcmNoIChlLmcuIGFsbCB0aGUgcHRzIGNvdWxkIGJlIGluIHRoZQogICAgICAgICAgICAgICAgIC8vIHNhbWUgcGxhY2UpLgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gd2UgcGFzcyBuIC0gMSBpbnN0ZWFkIG9mIC0xIHNvIHdlIGRvbid0IGZvdWwgdXAgJSBvcGVyYXRvciBieQogICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgaXQgYSBuZWdhdGl2ZSBMSCBhcmd1bWVudC4KICAgICAgICAgICAgICAgICBpbnQgcHJldiA9IGZpbmRfZGlmZl9wdChwdHMsIGluZGV4LCBuLCBuIC0gMSk7CkBAIC0yMzA5LDcgKzIzMDksNyBAQAogICAgICAgICAgICAgICAgICAgICBjcm9zcyA9IHB0c1tpbmRleF0uZlggLSBwdHNbbmV4dF0uZlg7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjcm9zcykgewogICAgICAgICAgICAgICAgIC8vIHJlY29yZCBvdXIgYmVzdCBndWVzcyBzbyBmYXIKICAgICAgICAgICAgICAgICB5bWF4ID0gcHRzW2luZGV4XS5mWTsKQEAgLTIzNDQsMTIgKzIzNDQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhciB0YXJnZXQsIFNrU2NhbGFyKiB0KSB7CiAgICAgLy8gICBTa0FTU0VSVChjMCA8PSBjMSAmJiBjMSA8PSBjMiAmJiBjMiA8PSBjMyk7CiAgICAgU2tBU1NFUlQoYzAgPCB0YXJnZXQgJiYgdGFyZ2V0IDwgYzMpOwotICAgIAorCiAgICAgU2tTY2FsYXIgRCA9IGMwIC0gdGFyZ2V0OwogICAgIFNrU2NhbGFyIEEgPSBjMyArIDMqKGMxIC0gYzIpIC0gYzA7CiAgICAgU2tTY2FsYXIgQiA9IDMqKGMyIC0gYzEgLSBjMSArIGMwKTsKICAgICBTa1NjYWxhciBDID0gMyooYzEgLSBjMCk7Ci0gICAgCisKICAgICBjb25zdCBTa1NjYWxhciBUT0xFUkFOQ0UgPSBTS19TY2FsYXIxIC8gNDA5NjsKICAgICBTa1NjYWxhciBtaW5UID0gMDsKICAgICBTa1NjYWxhciBtYXhUID0gU0tfU2NhbGFyMTsKQEAgLTIzODYsNyArMjM4Niw3IEBACiAKIHN0YXRpYyBpbnQgd2luZGluZ19tb25vX2N1YmljKGNvbnN0IFNrUG9pbnQgcHRzW10sIFNrU2NhbGFyIHgsIFNrU2NhbGFyIHkpIHsKICAgICBTa1BvaW50IHN0b3JhZ2VbNF07Ci0gICAgCisKICAgICBpbnQgZGlyID0gMTsKICAgICBpZiAocHRzWzBdLmZZID4gcHRzWzNdLmZZKSB7CiAgICAgICAgIHN0b3JhZ2VbMF0gPSBwdHNbM107CkBAIC0yMzk5LDcgKzIzOTksNyBAQAogICAgIGlmICh5IDwgcHRzWzBdLmZZIHx8IHkgPj0gcHRzWzNdLmZZKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIC8vIHF1aWNrcmVqZWN0IG9yIHF1aWNrYWNjZXB0CiAgICAgU2tTY2FsYXIgbWluLCBtYXg7CiAgICAgZmluZF9taW5tYXg8ND4ocHRzLCAmbWluLCAmbWF4KTsKQEAgLTI0MDksNyArMjQwOSw3IEBACiAgICAgaWYgKHggPiBtYXgpIHsKICAgICAgICAgcmV0dXJuIGRpcjsKICAgICB9Ci0gICAgCisKICAgICAvLyBjb21wdXRlIHRoZSBhY3R1YWwgeCh0KSB2YWx1ZQogICAgIFNrU2NhbGFyIHQsIHh0OwogICAgIGlmIChjaG9wTW9ub0N1YmljQXQocHRzWzBdLmZZLCBwdHNbMV0uZlksIHB0c1syXS5mWSwgcHRzWzNdLmZZLCB5LCAmdCkpIHsKQEAgLTI0MzQsNyArMjQzNCw3IEBACiBzdGF0aWMgaW50IHdpbmRpbmdfbW9ub19xdWFkKGNvbnN0IFNrUG9pbnQgcHRzW10sIFNrU2NhbGFyIHgsIFNrU2NhbGFyIHkpIHsKICAgICBTa1NjYWxhciB5MCA9IHB0c1swXS5mWTsKICAgICBTa1NjYWxhciB5MiA9IHB0c1syXS5mWTsKLSAgICAKKwogICAgIGludCBkaXIgPSAxOwogICAgIGlmICh5MCA+IHkyKSB7CiAgICAgICAgIFNrVFN3YXAoeTAsIHkyKTsKQEAgLTI0NDMsMTQgKzI0NDMsMTQgQEAKICAgICBpZiAoeSA8IHkwIHx8IHkgPj0geTIpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgLy8gYm91bmRzIGNoZWNrIG9uIFggKG5vdCByZXF1aXJlZC4gaXMgaXQgZmFzdGVyPykKICNpZiAwCiAgICAgaWYgKHB0c1swXS5mWCA+IHggJiYgcHRzWzFdLmZYID4geCAmJiBwdHNbMl0uZlggPiB4KSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICNlbmRpZgotICAgIAorCiAgICAgU2tTY2FsYXIgcm9vdHNbMl07CiAgICAgaW50IG4gPSBTa0ZpbmRVbml0UXVhZFJvb3RzKHB0c1swXS5mWSAtIDIgKiBwdHNbMV0uZlkgKyBwdHNbMl0uZlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiAocHRzWzFdLmZZIC0gcHRzWzBdLmZZKSwKQEAgLTI0ODgsNyArMjQ4OCw3IEBACiBzdGF0aWMgaW50IHdpbmRpbmdfcXVhZChjb25zdCBTa1BvaW50IHB0c1tdLCBTa1NjYWxhciB4LCBTa1NjYWxhciB5KSB7CiAgICAgU2tQb2ludCBkc3RbNV07CiAgICAgaW50ICAgICBuID0gMDsKLSAgICAKKwogICAgIGlmICghaXNfbW9ub19xdWFkKHB0c1swXS5mWSwgcHRzWzFdLmZZLCBwdHNbMl0uZlkpKSB7CiAgICAgICAgIG4gPSBTa0Nob3BRdWFkQXRZRXh0cmVtYShwdHMsIGRzdCk7CiAgICAgICAgIHB0cyA9IGRzdDsKQEAgLTI1MDUsOSArMjUwNSw5IEBACiAgICAgU2tTY2FsYXIgeTAgPSBwdHNbMF0uZlk7CiAgICAgU2tTY2FsYXIgeDEgPSBwdHNbMV0uZlg7CiAgICAgU2tTY2FsYXIgeTEgPSBwdHNbMV0uZlk7Ci0gICAgCisKICAgICBTa1NjYWxhciBkeSA9IHkxIC0geTA7Ci0gICAgCisKICAgICBpbnQgZGlyID0gMTsKICAgICBpZiAoeTAgPiB5MSkgewogICAgICAgICBTa1RTd2FwKHkwLCB5MSk7CkBAIC0yNTE2LDEwICsyNTE2LDEwIEBACiAgICAgaWYgKHkgPCB5MCB8fCB5ID49IHkxKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIFNrU2NhbGFyIGNyb3NzID0gU2tTY2FsYXJNdWwoeDEgLSB4MCwgeSAtIHB0c1swXS5mWSkgLQogICAgIFNrU2NhbGFyTXVsKGR5LCB4IC0gcHRzWzBdLmZYKTsKLSAgICAKKwogICAgIGlmIChTa1NjYWxhclNpZ25Bc0ludChjcm9zcykgPT0gZGlyKSB7CiAgICAgICAgIGRpciA9IDA7CiAgICAgfQpAQCAtMjUzMSwxMiArMjUzMSwxMiBAQAogICAgIGlmICh0aGlzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgcmV0dXJuIGlzSW52ZXJzZTsKICAgICB9Ci0gICAgCisKICAgICBjb25zdCBTa1JlY3QmIGJvdW5kcyA9IHRoaXMtPmdldEJvdW5kcygpOwogICAgIGlmICghYm91bmRzLmNvbnRhaW5zKHgsIHkpKSB7CiAgICAgICAgIHJldHVybiBpc0ludmVyc2U7CiAgICAgfQotICAgIAorCiAgICAgU2tQYXRoOjpJdGVyIGl0ZXIoKnRoaXMsIHRydWUpOwogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgIGludCB3ID0gMDsKQEAgLTI1NjAsNyArMjU2MCw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICghZG9uZSk7Ci0gICAgCisKICAgICBzd2l0Y2ggKHRoaXMtPmdldEZpbGxUeXBlKCkpIHsKICAgICAgICAgY2FzZSBTa1BhdGg6OmtFdmVuT2RkX0ZpbGxUeXBlOgogICAgICAgICBjYXNlIFNrUGF0aDo6a0ludmVyc2VFdmVuT2RkX0ZpbGxUeXBlOgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQYXRoSGVhcC5jcHAgYi9zcmMvY29yZS9Ta1BhdGhIZWFwLmNwcAppbmRleCAzYWRkMzkyLi5iZDUyNjlkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1BhdGhIZWFwLmNwcAorKysgYi9zcmMvY29yZS9Ta1BhdGhIZWFwLmNwcApAQCAtNTIsNyArNTIsNyBAQAogCiB2b2lkIFNrUGF0aEhlYXA6OmZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJiBidWZmZXIpIGNvbnN0IHsKICAgICBpbnQgY291bnQgPSBmUGF0aHMuY291bnQoKTsKLSAgICAKKwogICAgIGJ1ZmZlci53cml0ZUludChjb3VudCk7CiAgICAgU2tQYXRoKiogaXRlciA9IGZQYXRocy5iZWdpbigpOwogICAgIFNrUGF0aCoqIHN0b3AgPSBmUGF0aHMuZW5kKCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1BhdGhIZWFwLmggYi9zcmMvY29yZS9Ta1BhdGhIZWFwLmgKaW5kZXggMzJhZGJjMC4uZjA0MzIyMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tQYXRoSGVhcC5oCisrKyBiL3NyYy9jb3JlL1NrUGF0aEhlYXAuaApAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgICAgIHRoaXMgbmV3bHkgYWRkZWQgKGNvcGllZCkgcGF0aC4KICAgICAgKi8KICAgICBpbnQgYXBwZW5kKGNvbnN0IFNrUGF0aCYpOwotICAgIAorCiAgICAgLy8gY2FsbGVkIGR1cmluZyBwaWN0dXJlLXBsYXliYWNrCiAgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZlBhdGhzLmNvdW50KCk7IH0KICAgICBjb25zdCBTa1BhdGgmIG9wZXJhdG9yW10oaW50IGluZGV4KSBjb25zdCB7CiAgICAgICAgIHJldHVybiAqZlBhdGhzW2luZGV4XTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJikgY29uc3Q7Ci0gICAgICAgIAorCiBwcml2YXRlOgogICAgIC8vIHdlIHN0b3JlIHRoZSBwYXRocyBpbiB0aGUgaGVhcCAocGxhY2VtZW50IG5ldykKICAgICBTa0NodW5rQWxsb2MgICAgICAgIGZIZWFwOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQYXRoTWVhc3VyZS5jcHAgYi9zcmMvY29yZS9Ta1BhdGhNZWFzdXJlLmNwcAppbmRleCBiNTkxYWFjLi44YjFlYzJkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1BhdGhNZWFzdXJlLmNwcAorKysgYi9zcmMvY29yZS9Ta1BhdGhNZWFzdXJlLmNwcApAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6CiAgICAgICAgICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a0RvbmVfVmVyYjoKICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQzNiw3ICs0MzYsNyBAQAogICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPiBsZW5ndGgpIHsKICAgICAgICAgZGlzdGFuY2UgPSBsZW5ndGg7CiAgICAgfQotICAgIAorCiAgICAgU2tTY2FsYXIgICAgICAgIHQ7CiAgICAgY29uc3QgU2VnbWVudCogIHNlZyA9IHRoaXMtPmRpc3RhbmNlVG9TZWdtZW50KGRpc3RhbmNlLCAmdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrUGVyc3BJdGVyLmggYi9zcmMvY29yZS9Ta1BlcnNwSXRlci5oCmluZGV4IDdmNmFkZDIuLjgyMWYxNTMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUGVyc3BJdGVyLmgKKysrIGIvc3JjL2NvcmUvU2tQZXJzcEl0ZXIuaApAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBwb2ludHMgKHgseSkgKHgrMSx5KSAoeCsyLHkpIC4uLiB3ZSB3aWxsIGV2ZW50dWFsbHkgbWFwCiAgICAgKi8KICAgICBTa1BlcnNwSXRlcihjb25zdCBTa01hdHJpeCYgbSwgU2tTY2FsYXIgeCwgU2tTY2FsYXIgeSwgaW50IGNvdW50KTsKLSAgICAKKwogICAgIC8qKiBSZXR1cm4gdGhlIGJ1ZmZlciBvZiBbeCx5XSBmaXhlZCBwb2ludCB2YWx1ZXMgd2Ugd2lsbCBiZSBmaWxsaW5nLgogICAgICAgICBUaGlzIGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIHZhbHVlLCBzbyBpdCBjYW4gYmUgc2F2ZWQgYWNyb3NzIGNhbGxzIHRvCiAgICAgICAgIG5leHQoKS4KQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgV2hlbiB0aGlzIHJldHVybnMgMCwgdGhlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLgogICAgICovCiAgICAgaW50IG5leHQoKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBlbnVtIHsKICAgICAgICAga1NoaWZ0ICA9IDQsCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1BpY3R1cmVGbGF0LmNwcCBiL3NyYy9jb3JlL1NrUGljdHVyZUZsYXQuY3BwCmluZGV4IGM2NjY4OWYuLjhmNmUwODkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUGljdHVyZUZsYXQuY3BwCisrKyBiL3NyYy9jb3JlL1NrUGljdHVyZUZsYXQuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIGZBcnJheVtpXS0+dW5yZWYoKTsKICAgICB9CiAgICAgU2tERUxFVEVfQVJSQVkoZkFycmF5KTsKLSAgICAKKwogICAgIGlmIChyZWMhPSBOVUxMICYmIHJlYy0+Y291bnQoKSA+IDApIHsKICAgICAgICAgZkNvdW50ID0gcmVjLT5jb3VudCgpOwogICAgICAgICBmQXJyYXkgPSBTa05FV19BUlJBWShTa1JlZkNudCosIGZDb3VudCk7CkBAIC00OCw3ICs0OCw3IEBACiAKIHZvaWQgU2tUeXBlZmFjZVBsYXliYWNrOjpzZXRDb3VudChpbnQgY291bnQpIHsKICAgICB0aGlzLT5yZXNldChOVUxMKTsKLSAgICAKKwogICAgIGZDb3VudCA9IGNvdW50OwogICAgIGZBcnJheSA9IFNrTkVXX0FSUkFZKFNrUmVmQ250KiwgY291bnQpOwogICAgIHNrX2J6ZXJvKGZBcnJheSwgY291bnQgKiBzaXplb2YoU2tSZWZDbnQqKSk7CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICBidWZmZXIuc2V0VHlwZWZhY2VSZWNvcmRlcihjb250cm9sbGVyLT5nZXRUeXBlZmFjZVNldCgpKTsKICAgICBidWZmZXIuc2V0TmFtZWRGYWN0b3J5UmVjb3JkZXIoY29udHJvbGxlci0+Z2V0TmFtZWRGYWN0b3J5U2V0KCkpOwogICAgIGJ1ZmZlci5zZXRGbGFncyhjb250cm9sbGVyLT5nZXRXcml0ZUJ1ZmZlckZsYWdzKCkpOwotICAgIAorCiAgICAgZmxhdHRlblByb2MoYnVmZmVyLCBvYmopOwogICAgIHVpbnQzMl90IHNpemUgPSBidWZmZXIuc2l6ZSgpOwogICAgIFNrQVNTRVJUKFNrSXNBbGlnbjQoc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQaWN0dXJlRmxhdC5oIGIvc3JjL2NvcmUvU2tQaWN0dXJlRmxhdC5oCmluZGV4IGI0ZjA2MjUuLjc1ZTY2NzIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUGljdHVyZUZsYXQuaAorKysgYi9zcmMvY29yZS9Ta1BpY3R1cmVGbGF0LmgKQEAgLTg5LDkgKzg5LDkgQEAKIHB1YmxpYzoKICAgICBTa1R5cGVmYWNlUGxheWJhY2soKTsKICAgICB2aXJ0dWFsIH5Ta1R5cGVmYWNlUGxheWJhY2soKTsKLSAgICAKKwogICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGZDb3VudDsgfQotICAgIAorCiAgICAgdm9pZCByZXNldChjb25zdCBTa1JlZkNudFNldCopOwogCiAgICAgdm9pZCBzZXRDb3VudChpbnQgY291bnQpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgdm9pZCBzZXR1cEJ1ZmZlcihTa09yZGVyZWRSZWFkQnVmZmVyJiBidWZmZXIpIGNvbnN0IHsKICAgICAgICAgYnVmZmVyLnNldFR5cGVmYWNlQXJyYXkoKFNrVHlwZWZhY2UqKilmQXJyYXksIGZDb3VudCk7CiAgICAgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgaW50IGZDb3VudDsKICAgICBTa1JlZkNudCoqIGZBcnJheTsKQEAgLTExNSwxMyArMTE1LDEzIEBACiAgICAgflNrRmFjdG9yeVBsYXliYWNrKCkgewogICAgICAgICBTa0RFTEVURV9BUlJBWShmQXJyYXkpOwogICAgIH0KLSAgICAKKwogICAgIFNrRmxhdHRlbmFibGU6OkZhY3RvcnkqIGJhc2UoKSBjb25zdCB7IHJldHVybiBmQXJyYXk7IH0KIAogICAgIHZvaWQgc2V0dXBCdWZmZXIoU2tPcmRlcmVkUmVhZEJ1ZmZlciYgYnVmZmVyKSBjb25zdCB7CiAgICAgICAgIGJ1ZmZlci5zZXRGYWN0b3J5UGxheWJhY2soZkFycmF5LCBmQ291bnQpOwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBpbnQgZkNvdW50OwogICAgIFNrRmxhdHRlbmFibGU6OkZhY3RvcnkqIGZBcnJheTsKQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgICBTa0FTU0VSVChiX3B0ciA8IGItPmRhdGFTdG9wKCkpOwogICAgICAgICByZXR1cm4gKCphX3B0ciA8ICpiX3B0cikgPyAtMSA6IDE7CiAgICAgfQotICAgIAorCiAgICAgaW50IGluZGV4KCkgY29uc3QgeyByZXR1cm4gZkluZGV4OyB9CiAgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBjaGFyKil0aGlzICsgc2l6ZW9mKCp0aGlzKTsgfQogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiAoY2hhciopdGhpcyArIHNpemVvZigqdGhpcyk7IH0KQEAgLTQ5MSwyMSArNDkxLDIxIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAKKwogICAgIFNrRmxhdENvbnRyb2xsZXIgKiBjb25zdCAgICAgZkNvbnRyb2xsZXI7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBmTmV4dEluZGV4OwogICAgIFNrVERBcnJheTxjb25zdCBTa0ZsYXREYXRhKj4gZkRhdGE7CiAKICAgICBjb25zdCBTa0ZsYXREYXRhKiBmaW5kQW5kUmV0dXJuRmxhdChjb25zdCBUJiBlbGVtZW50KSB7CiAgICAgICAgIFNrRmxhdERhdGEqIGZsYXQgPSBTa0ZsYXREYXRhOjpDcmVhdGUoZkNvbnRyb2xsZXIsICZlbGVtZW50LCBmTmV4dEluZGV4LCBmRmxhdHRlblByb2MpOwotICAgICAgICAKKwogICAgICAgICBpbnQgaGFzaEluZGV4ID0gQ2hlY2tzdW1Ub0hhc2hJbmRleChmbGF0LT5jaGVja3N1bSgpKTsKICAgICAgICAgY29uc3QgU2tGbGF0RGF0YSogY2FuZGlkYXRlID0gZkhhc2hbaGFzaEluZGV4XTsKICAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiAhU2tGbGF0RGF0YTo6Q29tcGFyZShmbGF0LCBjYW5kaWRhdGUpKSB7CiAgICAgICAgICAgICBmQ29udHJvbGxlci0+dW5hbGxvYyhmbGF0KTsKICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaW50IGluZGV4ID0gU2tUU2VhcmNoPFNrRmxhdERhdGE+KChjb25zdCBTa0ZsYXREYXRhKiopIGZEYXRhLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRGF0YS5jb3VudCgpLCBmbGF0LCBzaXplb2YoZmxhdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2tGbGF0RGF0YTo6Q29tcGFyZSk7CkBAIC01MTQsNyArNTE0LDcgQEAKICAgICAgICAgICAgIGZIYXNoW2hhc2hJbmRleF0gPSBmRGF0YVtpbmRleF07CiAgICAgICAgICAgICByZXR1cm4gZkRhdGFbaW5kZXhdOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGluZGV4ID0gfmluZGV4OwogICAgICAgICAqZkRhdGEuaW5zZXJ0KGluZGV4KSA9IGZsYXQ7CiAgICAgICAgIFNrQVNTRVJUKGZEYXRhLmNvdW50KCkgPT0gZk5leHRJbmRleCk7CkBAIC01MjMsNyArNTIzLDcgQEAKICAgICAgICAgZkhhc2hbaGFzaEluZGV4XSA9IGZsYXQ7CiAgICAgICAgIHJldHVybiBmbGF0OwogICAgIH0KLSAgICAKKwogCiAgICAgZW51bSB7CiAgICAgICAgIC8vIERldGVybWluZWQgYnkgdHJ5aW5nIGRpZmYgdmFsdWVzIG9uIHBpY3R1cmUtcmVjb3JkaW5nIGJlbmNobWFya3MKQEAgLTUzNSw3ICs1MzUsNyBAQAogICAgICAgICBIQVNIX0NPVU5UICA9IDEgPDwgSEFTSF9CSVRTCiAgICAgfTsKICAgICBjb25zdCBTa0ZsYXREYXRhKiBmSGFzaFtIQVNIX0NPVU5UXTsKLSAgICAKKwogICAgIHN0YXRpYyBpbnQgQ2hlY2tzdW1Ub0hhc2hJbmRleCh1aW50MzJfdCBjaGVja3N1bSkgewogICAgICAgICBpbnQgbiA9IGNoZWNrc3VtOwogICAgICAgICBpZiAoSEFTSF9CSVRTIDwgMzIpIHsKQEAgLTU0OCw3ICs1NDgsNyBAQAogICAgICAgICAgICAgbiBePSBuID4+IDQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG4gJiBIQVNIX01BU0s7Ci0gICAgfSAgICAgICAgCisgICAgfQogfTsKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQaWN0dXJlUGxheWJhY2suY3BwIGIvc3JjL2NvcmUvU2tQaWN0dXJlUGxheWJhY2suY3BwCmluZGV4IDAxZTUyYzQuLjQwMjk3ZGMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUGljdHVyZVBsYXliYWNrLmNwcAorKysgYi9zcmMvY29yZS9Ta1BpY3R1cmVQbGF5YmFjay5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgIH0KICAgICByZXR1cm4gb2JqOwogfQotICAgIAorCiBTa1BpY3R1cmVQbGF5YmFjazo6U2tQaWN0dXJlUGxheWJhY2soY29uc3QgU2tQaWN0dXJlUGxheWJhY2smIHNyYykgewogICAgIHRoaXMtPmluaXQoKTsKIApAQCAtMjYyLDcgKzI2Miw3IEBACiAgICAgICAgICAgICBidWZmZXIud3JpdGVCaXRtYXAoKCpmQml0bWFwcylbaV0pOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKChuID0gU2FmZUNvdW50KGZNYXRyaWNlcykpID4gMCkgewogICAgICAgICB3cml0ZVRhZ1NpemUoYnVmZmVyLCBQSUNUX01BVFJJWF9CVUZGRVJfVEFHLCBuKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMjcwLDE5ICsyNzAsMTkgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgaWYgKChuID0gU2FmZUNvdW50KGZQYWludHMpKSA+IDApIHsKICAgICAgICAgd3JpdGVUYWdTaXplKGJ1ZmZlciwgUElDVF9QQUlOVF9CVUZGRVJfVEFHLCBuKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgYnVmZmVyLndyaXRlUGFpbnQoKCpmUGFpbnRzKVtpXSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoKG4gPSBTYWZlQ291bnQoZlBhdGhIZWFwKSkgPiAwKSB7CiAgICAgICAgIHdyaXRlVGFnU2l6ZShidWZmZXIsIFBJQ1RfUEFUSF9CVUZGRVJfVEFHLCBuKTsKICAgICAgICAgZlBhdGhIZWFwLT5mbGF0dGVuKGJ1ZmZlcik7CiAgICAgfQotICAgIAorCiAgICAgaWYgKChuID0gU2FmZUNvdW50KGZSZWdpb25zKSkgPiAwKSB7CiAgICAgICAgIHdyaXRlVGFnU2l6ZShidWZmZXIsIFBJQ1RfUkVHSU9OX0JVRkZFUl9UQUcsIG4pOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgICAgICAgeyBTa1BpY3RJbmZvOjprU2NhbGFySXNGbG9hdF9GbGFnLCAgU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXI6OmtTY2FsYXJJc0Zsb2F0X0ZsYWcgfSwKICAgICAgICAgeyBTa1BpY3RJbmZvOjprUHRySXM2NEJpdF9GbGFnLCAgICAgU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXI6OmtQdHJJczY0Qml0X0ZsYWcgfSwKICAgICB9OwotICAgIAorCiAgICAgdWludDMyX3QgcmJNYXNrID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGdTRCk7ICsraSkgewogICAgICAgICBpZiAocGljdEluZm9GbGFncyAmIGdTRFtpXS5mU3JjKSB7CkBAIC00MDIsMTMgKzQwMiwxMyBAQAogICAgICAgICBjYXNlIFBJQ1RfQlVGRkVSX1NJWkVfVEFHOiB7CiAgICAgICAgICAgICBTa0F1dG9NYWxsb2Mgc3RvcmFnZShzaXplKTsKICAgICAgICAgICAgIHN0cmVhbS0+cmVhZChzdG9yYWdlLmdldCgpLCBzaXplKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTa09yZGVyZWRSZWFkQnVmZmVyIGJ1ZmZlcihzdG9yYWdlLmdldCgpLCBzaXplKTsKICAgICAgICAgICAgIGJ1ZmZlci5zZXRGbGFncyhwaWN0SW5mb0ZsYWdzVG9SZWFkQnVmZmVyRmxhZ3MoaW5mby5mRmxhZ3MpKTsKIAogICAgICAgICAgICAgZkZhY3RvcnlQbGF5YmFjay0+c2V0dXBCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgIGZURlBsYXliYWNrLnNldHVwQnVmZmVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgd2hpbGUgKCFidWZmZXIuZW9mKCkpIHsKICAgICAgICAgICAgICAgICB0YWcgPSBidWZmZXIucmVhZFVJbnQoKTsKICAgICAgICAgICAgICAgICBzaXplID0gYnVmZmVyLnJlYWRVSW50KCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1BpY3R1cmVQbGF5YmFjay5oIGIvc3JjL2NvcmUvU2tQaWN0dXJlUGxheWJhY2suaAppbmRleCA5Y2MyZmQzLi4wNzc3MTlmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1BpY3R1cmVQbGF5YmFjay5oCisrKyBiL3NyYy9jb3JlL1NrUGljdHVyZVBsYXliYWNrLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAga1NjYWxhcklzRmxvYXRfRmxhZyAgICAgPSAxIDw8IDEsCiAgICAgICAgIGtQdHJJczY0Qml0X0ZsYWcgICAgICAgID0gMSA8PCAyLAogICAgIH07Ci0gICAgCisKICAgICB1aW50MzJfdCAgICBmVmVyc2lvbjsKICAgICB1aW50MzJfdCAgICBmV2lkdGg7CiAgICAgdWludDMyX3QgICAgZkhlaWdodDsKQEAgLTE2NSwxNCArMTY1LDE0IEBACiAgICAgYm9vbCBwYXJzZVN0cmVhbVRhZyhTa1N0cmVhbSosIGNvbnN0IFNrUGljdEluZm8mLCB1aW50MzJfdCB0YWcsIHNpemVfdCBzaXplKTsKICAgICBib29sIHBhcnNlQnVmZmVyVGFnKFNrT3JkZXJlZFJlYWRCdWZmZXImLCB1aW50MzJfdCB0YWcsIHNpemVfdCBzaXplKTsKICAgICB2b2lkIGZsYXR0ZW5Ub0J1ZmZlcihTa09yZGVyZWRXcml0ZUJ1ZmZlciYpIGNvbnN0OwotICAgICAgICAKKwogcHJpdmF0ZToKICAgICBTa1BhdGhIZWFwKiBmUGF0aEhlYXA7ICAvLyByZWZlcmVuY2UgY291bnRlZAogICAgIFNrVFJlZkFycmF5PFNrQml0bWFwPiogZkJpdG1hcHM7CiAgICAgU2tUUmVmQXJyYXk8U2tNYXRyaXg+KiBmTWF0cmljZXM7CiAgICAgU2tUUmVmQXJyYXk8U2tQYWludD4qIGZQYWludHM7CiAgICAgU2tUUmVmQXJyYXk8U2tSZWdpb24+KiBmUmVnaW9uczsKLSAgICAKKwogICAgIFNrRGF0YSogZk9wRGF0YTsgICAgLy8gb3Bjb2RlcyBhbmQgcGFyYW1ldGVycwogCiAgICAgU2tQaWN0dXJlKiogZlBpY3R1cmVSZWZzOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQaWN0dXJlUmVjb3JkLmNwcCBiL3NyYy9jb3JlL1NrUGljdHVyZVJlY29yZC5jcHAKaW5kZXggZmI0Zjk5MS4uM2QxMjRjNCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tQaWN0dXJlUmVjb3JkLmNwcAorKysgYi9zcmMvY29yZS9Ta1BpY3R1cmVSZWNvcmQuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAvLyBUaGUgUmVzdG9yZU9mZnNldCBmaWVsZCBpcyBpbml0aWFsbHkgZmlsbGVkIHdpdGggYSBwbGFjZWhvbGRlcgogICAgIC8vIHZhbHVlIHRoYXQgcG9pbnRzIHRvIHRoZSBvZmZzZXQgb2YgdGhlIHByZXZpb3VzIFJlc3RvcmVPZmZzZXQKICAgICAvLyBpbiB0aGUgY3VycmVudCBzdGFjayBsZXZlbCwgdGh1cyBmb3JtaW5nIGEgbGlua2VkIGxpc3Qgc28gdGhhdAotICAgIC8vIHRoZSByZXN0b3JlIG9mZnNldHMgY2FuIGJlIGZpbGxlZCBpbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIAorICAgIC8vIHRoZSByZXN0b3JlIG9mZnNldHMgY2FuIGJlIGZpbGxlZCBpbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgLy8gcmVzdG9yZSBjb21tYW5kIGlzIHJlY29yZGVkLgogICAgIGFkZEludChmUmVzdG9yZU9mZnNldFN0YWNrLnRvcCgpKTsKICAgICBmUmVzdG9yZU9mZnNldFN0YWNrLnRvcCgpID0gb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQaXhlbFJlZi5jcHAgYi9zcmMvY29yZS9Ta1BpeGVsUmVmLmNwcAppbmRleCBkMDJmNTA0Li5mNzE0NThiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1BpeGVsUmVmLmNwcAorKysgYi9zcmMvY29yZS9Ta1BpeGVsUmVmLmNwcApAQCAtMTE2LDcgKzExNiw3IEBACiAKIHZvaWQgU2tQaXhlbFJlZjo6dW5sb2NrUGl4ZWxzKCkgewogICAgIFNrQVNTRVJUKCFmUHJlTG9ja2VkIHx8IFNLUElYRUxSRUZfUFJFTE9DS0VEX0xPQ0tDT1VOVCA9PSBmTG9ja0NvdW50KTsKLSAgICAKKwogICAgIGlmICghZlByZUxvY2tlZCkgewogICAgICAgICBTa0F1dG9NdXRleEFjcXVpcmUgIGFjKCpmTXV0ZXgpOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1BvaW50LmNwcCBiL3NyYy9jb3JlL1NrUG9pbnQuY3BwCmluZGV4IDQ4OGJhY2IuLmViYmUzYTQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUG9pbnQuY3BwCisrKyBiL3NyYy9jb3JlL1NrUG9pbnQuY3BwCkBAIC0zMSwyMSArMzEsMjEgQEAKIAogdm9pZCBTa1BvaW50OjpzZXRJUmVjdEZhbihpbnQgbCwgaW50IHQsIGludCByLCBpbnQgYiwgc2l6ZV90IHN0cmlkZSkgewogICAgIFNrQVNTRVJUKHN0cmlkZSA+PSBzaXplb2YoU2tQb2ludCkpOwotICAgIAotICAgICgoU2tQb2ludCopKChpbnRwdHJfdCl0aGlzICsgMCAqIHN0cmlkZSkpLT5zZXQoU2tJbnRUb1NjYWxhcihsKSwgCisKKyAgICAoKFNrUG9pbnQqKSgoaW50cHRyX3QpdGhpcyArIDAgKiBzdHJpZGUpKS0+c2V0KFNrSW50VG9TY2FsYXIobCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHQpKTsKLSAgICAoKFNrUG9pbnQqKSgoaW50cHRyX3QpdGhpcyArIDEgKiBzdHJpZGUpKS0+c2V0KFNrSW50VG9TY2FsYXIobCksIAorICAgICgoU2tQb2ludCopKChpbnRwdHJfdCl0aGlzICsgMSAqIHN0cmlkZSkpLT5zZXQoU2tJbnRUb1NjYWxhcihsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoYikpOwotICAgICgoU2tQb2ludCopKChpbnRwdHJfdCl0aGlzICsgMiAqIHN0cmlkZSkpLT5zZXQoU2tJbnRUb1NjYWxhcihyKSwgCisgICAgKChTa1BvaW50KikoKGludHB0cl90KXRoaXMgKyAyICogc3RyaWRlKSktPnNldChTa0ludFRvU2NhbGFyKHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcihiKSk7Ci0gICAgKChTa1BvaW50KikoKGludHB0cl90KXRoaXMgKyAzICogc3RyaWRlKSktPnNldChTa0ludFRvU2NhbGFyKHIpLCAKKyAgICAoKFNrUG9pbnQqKSgoaW50cHRyX3QpdGhpcyArIDMgKiBzdHJpZGUpKS0+c2V0KFNrSW50VG9TY2FsYXIociksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHQpKTsKIH0KIAogdm9pZCBTa1BvaW50OjpzZXRSZWN0RmFuKFNrU2NhbGFyIGwsIFNrU2NhbGFyIHQsIFNrU2NhbGFyIHIsIFNrU2NhbGFyIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSkgewogICAgIFNrQVNTRVJUKHN0cmlkZSA+PSBzaXplb2YoU2tQb2ludCkpOwotICAgIAorCiAgICAgKChTa1BvaW50KikoKGludHB0cl90KXRoaXMgKyAwICogc3RyaWRlKSktPnNldChsLCB0KTsKICAgICAoKFNrUG9pbnQqKSgoaW50cHRyX3QpdGhpcyArIDEgKiBzdHJpZGUpKS0+c2V0KGwsIGIpOwogICAgICgoU2tQb2ludCopKChpbnRwdHJfdCl0aGlzICsgMiAqIHN0cmlkZSkpLT5zZXQociwgYik7CkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICBTa0FTU0VSVCh0b3AgPj0gOCAmJiB0b3AgPD0gNjMpOwogICAgIFNrQVNTRVJUKHRvcCAtIDggPCBTS19BUlJBWV9DT1VOVChnSW52U3FydDE0R3Vlc3NUYWJsZSkpOwogICAgIHVuc2lnbmVkIFUgPSBnSW52U3FydDE0R3Vlc3NUYWJsZVt0b3AgLSA4XTsKLSAgICAKKwogICAgIFUgPSBpbnZzcXJ0X2l0ZXIoViwgVSk7CiAgICAgcmV0dXJuIGludnNxcnRfaXRlcihWLCBVKTsKIH0KQEAgLTI4NSw3ICsyODUsNyBAQAogICAgIC8vIG1ha2UgeCx5IDEuMTQgdmFsdWVzIHNvIG91ciBmYXN0IHNxciB3b24ndCBvdmVyZmxvdwogICAgIGlmICh6ZXJvcyA+IDE3KSB7CiAgICAgICAgIHggPDw9IHplcm9zIC0gMTc7Ci0gICAgICAgIHkgPDw9IHplcm9zIC0gMTc7IAorICAgICAgICB5IDw8PSB6ZXJvcyAtIDE3OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHggPj49IDE3IC0gemVyb3M7CiAgICAgICAgIHkgPj49IDE3IC0gemVyb3M7CkBAIC00MTAsNyArNDEwLDcgQEAKICAgICAgICAgeCA9IFNrRml4ZWRNdWwoeCwgbGVuZ3RoKTsKICAgICAgICAgeSA9IFNrRml4ZWRNdWwoeSwgbGVuZ3RoKTsKICAgICB9Ci0gICAgCisKICAgICB0aGlzLT5zZXQoeCwgeSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MjYsNyArNDI2LDcgQEAKIAogICAgIFNrVmVjdG9yIHUgPSBiIC0gYTsKICAgICBTa1ZlY3RvciB2ID0gKnRoaXMgLSBhOwotICAgIAorCiAgICAgU2tTY2FsYXIgdUxlbmd0aFNxZCA9IHUubGVuZ3RoU3FkKCk7CiAgICAgU2tTY2FsYXIgZGV0ID0gdS5jcm9zcyh2KTsKICAgICBpZiAoTlVMTCAhPSBzaWRlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKIFNrU2NhbGFyIFNrUG9pbnQ6OmRpc3RhbmNlVG9MaW5lU2VnbWVudEJldHdlZW5TcWQoY29uc3QgU2tQb2ludCYgYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQb2ludCYgYikgY29uc3QgewogICAgIC8vIFNlZSBjb21tZW50cyB0byBkaXN0YW5jZVRvTGluZUJldHdlZW5TcWQuIElmIHRoZSBwcm9qZWN0aW9uIG9mIGMgb250bwotICAgIC8vIHUgaXMgYmV0d2VlbiBhIGFuZCBiIHRoZW4gdGhpcyByZXR1cm5zIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGF0IAorICAgIC8vIHUgaXMgYmV0d2VlbiBhIGFuZCBiIHRoZW4gdGhpcyByZXR1cm5zIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGF0CiAgICAgLy8gZnVuY3Rpb24uIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNsb3NlciBvZiBhIGFuZAogICAgIC8vIGIuIExldCB0aGUgcHJvamVjdGlvbiBvZiB2IG9udG8gdSBiZSB2Jy4gIFRoZXJlIGFyZSB0aHJlZSBjYXNlczoKICAgICAvLyAgICAxLiB2JyBwb2ludHMgb3Bwb3NpdGUgdG8gdS4gYyBpcyBub3QgYmV0d2VlbiBhIGFuZCBiIGFuZCBpcyBjbG9zZXIKQEAgLTQ1MSwxNyArNDUxLDE3IEBACiAgICAgLy8gICAgICAgdG8gdGhlIGxpbmUgYWIuCiAgICAgLy8gICAgMy4gdicgcG9pbnRzIGFsb25nIHUgYW5kIGhhcyBncmVhdGVyIG1hZ25pdHVkZSB0aGFuIHUuIGMgaXMgbm90CiAgICAgLy8gICAgICAgbm90IGJldHdlZW4gYSBhbmQgYiBhbmQgaXMgY2xvc2VyIHRvIGIgdGhhbiBhLgotICAgIC8vIHYnID0gKHUgZG90IHYpICogdSAvIHx1fC4gU28gaWYgKHUgZG90IHYpL3x1fCBpcyBsZXNzIHRoYW4gemVybyB3ZSdyZSAKKyAgICAvLyB2JyA9ICh1IGRvdCB2KSAqIHUgLyB8dXwuIFNvIGlmICh1IGRvdCB2KS98dXwgaXMgbGVzcyB0aGFuIHplcm8gd2UncmUKICAgICAvLyBpbiBjYXNlIDEuIElmICh1IGRvdCB2KS98dXwgaXMgPiB8dXwgd2UgYXJlIGluIGNhc2UgMy4gT3RoZXJ3aXNlCi0gICAgLy8gd2UncmUgaW4gY2FzZSAyLiBXZSBhY3R1YWxseSBjb21wYXJlICh1IGRvdCB2KSB0byAwIGFuZCB8dXxeMiB0byAKKyAgICAvLyB3ZSdyZSBpbiBjYXNlIDIuIFdlIGFjdHVhbGx5IGNvbXBhcmUgKHUgZG90IHYpIHRvIDAgYW5kIHx1fF4yIHRvCiAgICAgLy8gYXZvaWQgYSBzcXJ0IHRvIGNvbXB1dGUgfHV8LgotICAgIAorCiAgICAgU2tWZWN0b3IgdSA9IGIgLSBhOwogICAgIFNrVmVjdG9yIHYgPSAqdGhpcyAtIGE7Ci0gICAgCisKICAgICBTa1NjYWxhciB1TGVuZ3RoU3FkID0gdS5sZW5ndGhTcWQoKTsKICAgICBTa1NjYWxhciB1RG90ViA9IFNrUG9pbnQ6OkRvdFByb2R1Y3QodSwgdik7Ci0gICAgCisKICAgICBpZiAodURvdFYgPD0gMCkgewogICAgICAgICByZXR1cm4gdi5sZW5ndGhTcWQoKTsKICAgICB9IGVsc2UgaWYgKHVEb3RWID4gdUxlbmd0aFNxZCkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tQdHJSZWNvcmRlci5jcHAgYi9zcmMvY29yZS9Ta1B0clJlY29yZGVyLmNwcAppbmRleCA2ZWU1OGY4Li44OTZlNjJkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1B0clJlY29yZGVyLmNwcAorKysgYi9zcmMvY29yZS9Ta1B0clJlY29yZGVyLmNwcApAQCAtMjksMTEgKzI5LDExIEBACiAgICAgaWYgKE5VTEwgPT0gcHRyKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIGludCBjb3VudCA9IGZMaXN0LmNvdW50KCk7CiAgICAgUGFpciBwYWlyOwogICAgIHBhaXIuZlB0ciA9IHB0cjsKLSAgICAKKwogICAgIGludCBpbmRleCA9IFNrVFNlYXJjaDxQYWlyLCBDbXA+KGZMaXN0LmJlZ2luKCksIGNvdW50LCBwYWlyLCBzaXplb2YocGFpcikpOwogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1B0clJlY29yZGVyLmggYi9zcmMvY29yZS9Ta1B0clJlY29yZGVyLmgKaW5kZXggYzRjMGJkOC4uMDBlNzViNCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tQdHJSZWNvcmRlci5oCisrKyBiL3NyYy9jb3JlL1NrUHRyUmVjb3JkZXIuaApAQCAtMzcsNyArMzcsNyBAQAogICAgICAqICBJZiB0aGUgcHRyIGlzIE5VTEwsIGl0IGlzIG5vdCBhZGRlZCwgYW5kIDAgaXMgcmV0dXJuZWQuCiAgICAgICovCiAgICAgdWludDMyX3QgYWRkKHZvaWQqKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm4gdGhlIG51bWJlciBvZiAobm9uLW51bGwpIHB0cnMgaW4gdGhlIHNldC4KICAgICAgKi8KQEAgLTczLDkgKzczLDkgQEAKICAgICAvLyBwdHIgYW5kIGl0cyBJRC9mSW5kZXggZXhwbGljaXRseSwgc2luY2UgdGhlIHB0cidzIHBvc2l0aW9uIGluIHRoZSBhcnJheQogICAgIC8vIGlzIG5vdCByZWxhdGVkIHRvIGl0cyAiaW5kZXgiLgogICAgIFNrVERBcnJheTxQYWlyPiAgZkxpc3Q7Ci0gICAgCisKICAgICBzdGF0aWMgaW50IENtcChjb25zdCBQYWlyKiBhLCBjb25zdCBQYWlyKiBiKTsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tSZWZDbnQgSU5IRVJJVEVEOwogfTsKIApAQCAtOTEsNyArOTEsNyBAQAogICAgIHVpbnQzMl90IGFkZChUIHB0cikgewogICAgICAgICByZXR1cm4gdGhpcy0+SU5IRVJJVEVEOjphZGQoKHZvaWQqKXB0cik7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBjb3B5VG9BcnJheShUKiBhcnJheSkgY29uc3QgewogICAgICAgICB0aGlzLT5JTkhFUklURUQ6OmNvcHlUb0FycmF5KCh2b2lkKiopYXJyYXkpOwogICAgIH0KQEAgLTEwOCw3ICsxMDgsNyBAQAogY2xhc3MgU2tSZWZDbnRTZXQgOiBwdWJsaWMgU2tUUHRyU2V0PFNrUmVmQ250Kj4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNrUmVmQ250U2V0KCk7Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICAvLyBvdmVycmlkZXMKICAgICB2aXJ0dWFsIHZvaWQgaW5jUHRyKHZvaWQqKTsKQEAgLTEyNiwxNCArMTI2LDE0IEBACiAgICAgU0tfREVDTEFSRV9JTlNUX0NPVU5UKFNrTmFtZWRGYWN0b3J5U2V0KQogCiAgICAgU2tOYW1lZEZhY3RvcnlTZXQoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEZpbmQgdGhlIHNwZWNpZmllZCBGYWN0b3J5IGluIHRoZSBzZXQuIElmIGl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBzZXQsCiAgICAgICogYW5kIGhhcyByZWdpc3RlcmVkIGl0cyBuYW1lLCBhZGQgaXQgdG8gdGhlIHNldCwgYW5kIHJldHVybiBpdHMgaW5kZXguCiAgICAgICogSWYgdGhlIEZhY3RvcnkgaGFzIG5vIHJlZ2lzdGVyZWQgbmFtZSwgcmV0dXJuIDAuCiAgICAgICovCiAgICAgdWludDMyX3QgZmluZChTa0ZsYXR0ZW5hYmxlOjpGYWN0b3J5KTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIElmIG5ldyBGYWN0b3J5cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHNldCwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaXJzdAogICAgICAqIEZhY3RvcnkgYWRkZWQgYWZ0ZXIgdGhlIEZhY3RvcnkgbmFtZSByZXR1cm5lZCBieSB0aGUgbGFzdCBjYWxsIHRvIHRoaXMKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrUXVhZENsaXBwZXIuY3BwIGIvc3JjL2NvcmUvU2tRdWFkQ2xpcHBlci5jcHAKaW5kZXggMGM5YzlhZC4uOWUwNDg4NyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tRdWFkQ2xpcHBlci5jcHAKKysrIGIvc3JjL2NvcmUvU2tRdWFkQ2xpcHBlci5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBTa1NjYWxhciBBID0gYzAgLSBjMSAtIGMxICsgYzI7CiAgICAgU2tTY2FsYXIgQiA9IDIqKGMxIC0gYzApOwogICAgIFNrU2NhbGFyIEMgPSBjMCAtIHRhcmdldDsKLSAgICAKKwogICAgIFNrU2NhbGFyIHJvb3RzWzJdOyAgLy8gd2Ugb25seSBleHBlY3Qgb25lLCBidXQgbWFrZSByb29tIGZvciAyIGZvciBzYWZldHkKICAgICBpbnQgY291bnQgPSBTa0ZpbmRVbml0UXVhZFJvb3RzKEEsIEIsIEMsIHJvb3RzKTsKICAgICBpZiAoY291bnQpIHsKQEAgLTY0LDcgKzY0LDcgQEAKICAqLwogYm9vbCBTa1F1YWRDbGlwcGVyOjpjbGlwUXVhZChjb25zdCBTa1BvaW50IHNyY1B0c1szXSwgU2tQb2ludCBkc3RbM10pIHsKICAgICBib29sIHJldmVyc2U7Ci0gICAgCisKICAgICAvLyB3ZSBuZWVkIHRoZSBkYXRhIHRvIGJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpbiBZCiAgICAgaWYgKHNyY1B0c1swXS5mWSA+IHNyY1B0c1syXS5mWSkgewogICAgICAgICBkc3RbMF0gPSBzcmNQdHNbMl07CkBAIC03NSwxNyArNzUsMTcgQEAKICAgICAgICAgbWVtY3B5KGRzdCwgc3JjUHRzLCAzICogc2l6ZW9mKFNrUG9pbnQpKTsKICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8vIGFyZSB3ZSBjb21wbGV0ZWx5IGFib3ZlIG9yIGJlbG93CiAgICAgY29uc3QgU2tTY2FsYXIgY3RvcCA9IGZDbGlwLmZUb3A7CiAgICAgY29uc3QgU2tTY2FsYXIgY2JvdCA9IGZDbGlwLmZCb3R0b207CiAgICAgaWYgKGRzdFsyXS5mWSA8PSBjdG9wIHx8IGRzdFswXS5mWSA+PSBjYm90KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBTa1NjYWxhciB0OwogICAgIFNrUG9pbnQgdG1wWzVdOyAvLyBmb3IgU2tDaG9wUXVhZEF0Ci0gICAgCisKICAgICAvLyBhcmUgd2UgcGFydGlhbGx5IGFib3ZlCiAgICAgaWYgKGRzdFswXS5mWSA8IGN0b3ApIHsKICAgICAgICAgaWYgKGNob3BNb25vUXVhZEF0WShkc3QsIGN0b3AsICZ0KSkgewpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBhcmUgd2UgcGFydGlhbGx5IGJlbG93CiAgICAgaWYgKGRzdFsyXS5mWSA+IGNib3QpIHsKICAgICAgICAgaWYgKGNob3BNb25vUXVhZEF0WShkc3QsIGNib3QsICZ0KSkgewpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICBTa1RTd2FwPFNrUG9pbnQ+KGRzdFswXSwgZHN0WzJdKTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1F1YWRDbGlwcGVyLmggYi9zcmMvY29yZS9Ta1F1YWRDbGlwcGVyLmgKaW5kZXggYmUwY2VhMC4uYzBiODY5NSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tRdWFkQ2xpcHBlci5oCisrKyBiL3NyYy9jb3JlL1NrUXVhZENsaXBwZXIuaApAQCAtMTQsMTYgKzE0LDE2IEBACiAKIC8qKiBUaGlzIGNsYXNzIGlzIGluaXRpYWxpemVkIHdpdGggYSBjbGlwIHJlY3RhbmdsZSwgYW5kIHRoZW4gY2FuIGJlIGZlZCBxdWFkcywKICAgICB3aGljaCBtdXN0IGFscmVhZHkgYmUgbW9ub3RvbmljIGluIFkuCi0gCisKICAgICBJbiB0aGUgZnV0dXJlLCBpdCBtaWdodCByZXR1cm4gYSBzZXJpZXMgb2Ygc2VnbWVudHMsIGFsbG93aW5nIGl0IHRvIGNsaXAKICAgICBhbHNvIGluIFgsIHRvIGVuc3VyZSB0aGF0IGFsbCBzZWdtZW50cyBmaXQgaW4gYSBmaW5pdGUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgKi8KIGNsYXNzIFNrUXVhZENsaXBwZXIgewogcHVibGljOgogICAgIFNrUXVhZENsaXBwZXIoKTsKLSAgICAKKwogICAgIHZvaWQgc2V0Q2xpcChjb25zdCBTa0lSZWN0JiBjbGlwKTsKLSAgICAKKwogICAgIGJvb2wgY2xpcFF1YWQoY29uc3QgU2tQb2ludCBzcmNbM10sIFNrUG9pbnQgZHN0WzNdKTsKIAogcHJpdmF0ZToKQEAgLTQwLDExICs0MCwxMSBAQAogICAgIGJvb2wgY2xpcEN1YmljKGNvbnN0IFNrUG9pbnQgcHRzWzRdLCBjb25zdCBTa1JlY3QmIGNsaXApOwogCiAgICAgU2tQYXRoOjpWZXJiIG5leHQoU2tQb2ludCBwdHNbXSk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tQb2ludCogICAgICAgIGZDdXJyUG9pbnQ7CiAgICAgU2tQYXRoOjpWZXJiKiAgIGZDdXJyVmVyYjsKLSAgICAKKwogICAgIGVudW0gewogICAgICAgICBrTWF4VmVyYnMgPSAxMywKICAgICAgICAga01heFBvaW50cyA9IDMyCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1Jhc3RlckNsaXAuY3BwIGIvc3JjL2NvcmUvU2tSYXN0ZXJDbGlwLmNwcAppbmRleCBhZWE3MzFlLi40MzEyNzE3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1Jhc3RlckNsaXAuY3BwCisrKyBiL3NyYy9jb3JlL1NrUmFzdGVyQ2xpcC5jcHAKQEAgLTE3LDcgKzE3LDcgQEAKIAogU2tSYXN0ZXJDbGlwOjpTa1Jhc3RlckNsaXAoY29uc3QgU2tSYXN0ZXJDbGlwJiBzcmMpIHsKICAgICBBVVRPX1JBU1RFUkNMSVBfVkFMSURBVEUoc3JjKTsKLSAgICAKKwogICAgIGZJc0JXID0gc3JjLmZJc0JXOwogICAgIGlmIChmSXNCVykgewogICAgICAgICBmQlcgPSBzcmMuZkJXOwpAQCAtNjIsNyArNjIsNyBAQAogCiBib29sIFNrUmFzdGVyQ2xpcDo6c2V0UmVjdChjb25zdCBTa0lSZWN0JiByZWN0KSB7CiAgICAgQVVUT19SQVNURVJDTElQX1ZBTElEQVRFKCp0aGlzKTsKLSAgICAKKwogICAgIGZJc0JXID0gdHJ1ZTsKICAgICBmQUEuc2V0RW1wdHkoKTsKICAgICBmSXNSZWN0ID0gZkJXLnNldFJlY3QocmVjdCk7CkBAIC0xMDgsMTQgKzEwOCwxNCBAQAogCiBib29sIFNrUmFzdGVyQ2xpcDo6b3AoY29uc3QgU2tJUmVjdCYgcmVjdCwgU2tSZWdpb246Ok9wIG9wKSB7CiAgICAgQVVUT19SQVNURVJDTElQX1ZBTElEQVRFKCp0aGlzKTsKLSAgICAKKwogICAgIGZJc0JXID8gZkJXLm9wKHJlY3QsIG9wKSA6IGZBQS5vcChyZWN0LCBvcCk7CiAgICAgcmV0dXJuIHRoaXMtPnVwZGF0ZUNhY2hlQW5kUmV0dXJuTm9uRW1wdHkoKTsKIH0KIAogYm9vbCBTa1Jhc3RlckNsaXA6Om9wKGNvbnN0IFNrUmVnaW9uJiByZ24sIFNrUmVnaW9uOjpPcCBvcCkgewogICAgIEFVVE9fUkFTVEVSQ0xJUF9WQUxJREFURSgqdGhpcyk7Ci0gICAgCisKICAgICBpZiAoZklzQlcpIHsKICAgICAgICAgKHZvaWQpZkJXLm9wKHJnbiwgb3ApOwogICAgIH0gZWxzZSB7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAogYm9vbCBTa1Jhc3RlckNsaXA6Om9wKGNvbnN0IFNrUmVjdCYgciwgU2tSZWdpb246Ok9wIG9wLCBib29sIGRvQUEpIHsKICAgICBBVVRPX1JBU1RFUkNMSVBfVkFMSURBVEUoKnRoaXMpOwotICAgIAorCiAgICAgaWYgKGZJc0JXICYmIGRvQUEpIHsKICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgcmVjdCByZWFsbHkgbmVlZHMgYWEsIG9yIGlzIGl0IGNsb3NlIGVub3VnaHQgdG8KICAgICAgICAgLy8gaW50ZWdlciBib3VuZGFyaWVzIHRoYXQgd2UgY2FuIGp1c3QgdHJlYXQgaXQgYXMgYSBCVyByZWN0PwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgfQogCiAgICAgQVVUT19SQVNURVJDTElQX1ZBTElEQVRFKCp0aGlzKTsKLSAgICAKKwogICAgIGlmICh0aGlzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgZHN0LT5zZXRFbXB0eSgpOwogICAgICAgICByZXR1cm47CkBAIC0yMjMsNyArMjIzLDcgQEAKIAogY29uc3QgU2tSZWdpb24mIFNrUmFzdGVyQ2xpcDo6Zm9yY2VHZXRCVygpIHsKICAgICBBVVRPX1JBU1RFUkNMSVBfVkFMSURBVEUoKnRoaXMpOwotICAgIAorCiAgICAgaWYgKCFmSXNCVykgewogICAgICAgICBmQlcuc2V0UmVjdChmQUEuZ2V0Qm91bmRzKCkpOwogICAgIH0KQEAgLTIzMiw3ICsyMzIsNyBAQAogCiB2b2lkIFNrUmFzdGVyQ2xpcDo6Y29udmVydFRvQUEoKSB7CiAgICAgQVVUT19SQVNURVJDTElQX1ZBTElEQVRFKCp0aGlzKTsKLSAgICAKKwogICAgIFNrQVNTRVJUKGZJc0JXKTsKICAgICBmQUEuc2V0UmVnaW9uKGZCVyk7CiAgICAgZklzQlcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrUmFzdGVyQ2xpcC5oIGIvc3JjL2NvcmUvU2tSYXN0ZXJDbGlwLmgKaW5kZXggMGFjN2ZmNC4uN2UwMTVhYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tSYXN0ZXJDbGlwLmgKKysrIGIvc3JjL2NvcmUvU2tSYXN0ZXJDbGlwLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBib29sIHF1aWNrQ29udGFpbnMoaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgY29uc3QgewogICAgICAgICByZXR1cm4gcXVpY2tDb250YWlucyhTa0lSZWN0OjpNYWtlTFRSQihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgUmV0dXJuIHRydWUgaWYgdGhpcyByZWdpb24gaXMgZW1wdHksIG9yIGlmIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIGRvZXMKICAgICAgKiAgbm90IGludGVyc2VjdCB0aGUgcmVnaW9uLiBSZXR1cm5pbmcgZmFsc2UgaXMgbm90IGEgZ3VhcmFudGVlIHRoYXQgdGhleQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICByZXR1cm4gdGhpcy0+aXNFbXB0eSgpIHx8IHJlY3QuaXNFbXB0eSgpIHx8CiAgICAgICAgICAgICAgICAhU2tJUmVjdDo6SW50ZXJzZWN0cyh0aGlzLT5nZXRCb3VuZHMoKSwgcmVjdCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gaGFjayBmb3IgU2tDYW52YXM6OmdldFRvdGFsQ2xpcAogICAgIGNvbnN0IFNrUmVnaW9uJiBmb3JjZUdldEJXKCk7CiAKQEAgLTkyLDcgKzkyLDcgQEAKICAgICBib29sIGNvbXB1dGVJc1JlY3QoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBmSXNCVyA/IGZCVy5pc1JlY3QoKSA6IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGJvb2wgdXBkYXRlQ2FjaGVBbmRSZXR1cm5Ob25FbXB0eSgpIHsKICAgICAgICAgZklzRW1wdHkgPSB0aGlzLT5jb21wdXRlSXNFbXB0eSgpOwogICAgICAgICBmSXNSZWN0ID0gdGhpcy0+Y29tcHV0ZUlzUmVjdCgpOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgU2tBQUNsaXBCbGl0dGVyV3JhcHBlcigpOwogICAgIFNrQUFDbGlwQmxpdHRlcldyYXBwZXIoY29uc3QgU2tSYXN0ZXJDbGlwJiwgU2tCbGl0dGVyKik7CiAgICAgU2tBQUNsaXBCbGl0dGVyV3JhcHBlcihjb25zdCBTa0FBQ2xpcCosIFNrQmxpdHRlciopOwotICAgIAorCiAgICAgdm9pZCBpbml0KGNvbnN0IFNrUmFzdGVyQ2xpcCYsIFNrQmxpdHRlciopOwogCiAgICAgY29uc3QgU2tJUmVjdCYgZ2V0Qm91bmRzKCkgY29uc3QgewpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgIFNrQVNTRVJUKGZCbGl0dGVyKTsKICAgICAgICAgcmV0dXJuIGZCbGl0dGVyOwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBjb25zdCBTa0FBQ2xpcCogZkFBQ2xpcDsKICAgICBTa1JlZ2lvbiAgICAgICAgZkJXUmduOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tSYXN0ZXJpemVyLmNwcCBiL3NyYy9jb3JlL1NrUmFzdGVyaXplci5jcHAKaW5kZXggZTU2MjViZi4uYzZkZGMwOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tSYXN0ZXJpemVyLmNwcAorKysgYi9zcmMvY29yZS9Ta1Jhc3Rlcml6ZXIuY3BwCkBAIC0xOCwxMSArMTgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCogY2xpcEJvdW5kcywgU2tNYXNrRmlsdGVyKiBmaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrTWFzayogbWFzaywgU2tNYXNrOjpDcmVhdGVNb2RlIG1vZGUpIHsKICAgICBTa0lSZWN0IHN0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGNsaXBCb3VuZHMgJiYgZmlsdGVyICYmIFNrTWFzazo6a0p1c3RSZW5kZXJJbWFnZV9DcmVhdGVNb2RlICE9IG1vZGUpIHsgICAgICAgIAorCisgICAgaWYgKGNsaXBCb3VuZHMgJiYgZmlsdGVyICYmIFNrTWFzazo6a0p1c3RSZW5kZXJJbWFnZV9DcmVhdGVNb2RlICE9IG1vZGUpIHsKICAgICAgICAgU2tJUG9pbnQgICAgbWFyZ2luOwogICAgICAgICBTa01hc2sgICAgICBzcmNNLCBkc3RNOwotICAgICAgICAKKwogICAgICAgICBzcmNNLmZGb3JtYXQgPSBTa01hc2s6OmtBOF9Gb3JtYXQ7CiAgICAgICAgIHNyY00uZkJvdW5kcy5zZXQoMCwgMCwgMSwgMSk7CiAgICAgICAgIHNyY00uZkltYWdlID0gTlVMTDsKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgc3RvcmFnZS5pbnNldCgtbWFyZ2luLmZYLCAtbWFyZ2luLmZZKTsKICAgICAgICAgY2xpcEJvdW5kcyA9ICZzdG9yYWdlOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0aGlzLT5vblJhc3Rlcml6ZShmaWxsUGF0aCwgbWF0cml4LCBjbGlwQm91bmRzLCBtYXNrLCBtb2RlKTsKIH0KIApAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0KiBjbGlwQm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hc2sqIG1hc2ssIFNrTWFzazo6Q3JlYXRlTW9kZSBtb2RlKSB7CiAgICAgU2tQYXRoICBkZXZQYXRoOwotICAgIAorCiAgICAgZmlsbFBhdGgudHJhbnNmb3JtKG1hdHJpeCwgJmRldlBhdGgpOwogICAgIHJldHVybiBTa0RyYXc6OkRyYXdUb01hc2soZGV2UGF0aCwgY2xpcEJvdW5kcywgTlVMTCwgTlVMTCwgbWFzaywgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrUmVjdC5jcHAgYi9zcmMvY29yZS9Ta1JlY3QuY3BwCmluZGV4IDU1ZGJlM2QuLjFkOGExM2UgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrUmVjdC5jcHAKKysrIGIvc3JjL2NvcmUvU2tSZWN0LmNwcApAQCAtNzIsNyArNzIsNyBAQAogCiBib29sIFNrUmVjdDo6c2V0Qm91bmRzQ2hlY2soY29uc3QgU2tQb2ludCBwdHNbXSwgaW50IGNvdW50KSB7CiAgICAgU2tBU1NFUlQoKHB0cyAmJiBjb3VudCA+IDApIHx8IGNvdW50ID09IDApOwotICAgIAorCiAgICAgYm9vbCBpc0Zpbml0ZSA9IHRydWU7CiAKICAgICBpZiAoY291bnQgPD0gMCkgewpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIHRoaXMtPnNldChsLCB0LCByLCBiKTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBpc0Zpbml0ZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tSZWZEaWN0LmggYi9zcmMvY29yZS9Ta1JlZkRpY3QuaAppbmRleCA2NzUxMTIxLi41NWI5YmZlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1JlZkRpY3QuaAorKysgYi9zcmMvY29yZS9Ta1JlZkRpY3QuaApAQCAtMjYsNyArMjYsNyBAQAogICAgICAqICBpcyBmb3VuZC4gVGhlIHJlZmVyZW5jZS1jb3VudCBvZiB0aGUgZW50cnkgaXMgbm90IGFmZmVjdGVkLgogICAgICAqLwogICAgIFNrUmVmQ250KiBmaW5kKGNvbnN0IGNoYXIgbmFtZVtdKSBjb25zdDsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBJZiBkYXRhIGlzIE5VTEwsIHJlbW92ZSAoaWYgcHJlc2VudCkgdGhlIGVudHJ5IG1hdGNoaW5nIG5hbWUgYW5kIGNhbGwKICAgICAgKiAgcHJldl9kYXRhLT51bnJlZigpIG9uIHRoZSBkYXRhIGZvciB0aGUgbWF0Y2hpbmcgZW50cnkuCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1JlZ2lvbi5jcHAgYi9zcmMvY29yZS9Ta1JlZ2lvbi5jcHAKaW5kZXggY2U1ZWQ4YS4uMGRjYWNkOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tSZWdpb24uY3BwCisrKyBiL3NyYy9jb3JlL1NrUmVnaW9uLmNwcApAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgICAgIGFzc2VydF9zZW50aW5lbChydW5zWzRdLCBmYWxzZSk7ICAgIC8vIHJpZ2h0CiAgICAgICAgIGFzc2VydF9zZW50aW5lbChydW5zWzVdLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0X3NlbnRpbmVsKHJ1bnNbNl0sIHRydWUpOwotICAgICAgICAKKwogICAgICAgICBTa0FTU0VSVChydW5zWzBdIDwgcnVuc1sxXSk7ICAgIC8vIHZhbGlkIGhlaWdodAogICAgICAgICBTa0FTU0VSVChydW5zWzNdIDwgcnVuc1s0XSk7ICAgIC8vIHZhbGlkIHdpZHRoCi0gICAgICAgIAorCiAgICAgICAgIGJvdW5kcy0+c2V0KHJ1bnNbM10sIHJ1bnNbMF0sIHJ1bnNbNF0sIHJ1bnNbMV0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAgICAgYXNzZXJ0X3NlbnRpbmVsKHJ1bnNbMF0sIGZhbHNlKTsgICAgLy8gdG9wCiAgICAgICAgIGFzc2VydF9zZW50aW5lbChydW5zWzFdLCBmYWxzZSk7ICAgIC8vIGJvdHRvbQogICAgICAgICAvLyBydW5zWzJdIGlzIHVuY29tcHV0ZWQgaW50ZXJ2YWxDb3VudAotICAgICAgICAKKwogICAgICAgICBpZiAocnVuc1szXSA9PSBTa1JlZ2lvbjo6a1J1blR5cGVTZW50aW5lbCkgeyAgLy8gc2hvdWxkIGJlIGZpcnN0IGxlZnQuLi4KICAgICAgICAgICAgIHJ1bnMgKz0gMzsgIC8vIHNraXAgZW1wdHkgaW5pdGlhbCBzcGFuCiAgICAgICAgICAgICBydW5zWzBdID0gcnVuc1stMl07IC8vIHNldCBuZXcgdG9wIHRvIHByZXYgYm90dG9tCkBAIC0yNzQsMTQgKzI3NCwxNCBAQAogICAgIGlmIChTa1JlZ2lvbjo6UnVuc0FyZUFSZWN0KHJ1bnMsIGNvdW50LCAmZkJvdW5kcykpIHsKICAgICAgICAgcmV0dXJuIHRoaXMtPnNldFJlY3QoZkJvdW5kcyk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8vICBpZiB3ZSBnZXQgaGVyZSwgd2UgbmVlZCB0byBiZWNvbWUgYSBjb21wbGV4IHJlZ2lvbgogCiAgICAgaWYgKCFmUnVuSGVhZC0+aXNDb21wbGV4KCkgfHwgZlJ1bkhlYWQtPmZSdW5Db3VudCAhPSBjb3VudCkgewogICAgICAgICB0aGlzLT5mcmVlUnVucygpOwogICAgICAgICB0aGlzLT5hbGxvY2F0ZVJ1bnMoY291bnQpOwogICAgIH0KLSAgICAKKwogICAgIC8vIG11c3QgY2FsbCB0aGlzIGJlZm9yZSB3ZSBjYW4gd3JpdGUgZGlyZWN0bHkgaW50byBydW5zKCkKICAgICAvLyBpbiBjYXNlIHdlIGFyZSBzaGFyaW5nIHRoZSBidWZmZXIgd2l0aCBhbm90aGVyIHJlZ2lvbiAoY29weSBvbiB3cml0ZSkKICAgICBmUnVuSGVhZCA9IGZSdW5IZWFkLT5lbnN1cmVXcml0YWJsZSgpOwpAQCAtMzE5LDcgKzMxOSw3IEBACiAKICAgICAvLyBTa2lwIHRoZSBCb3R0b20gYW5kIEludGVydmFsQ291bnQKICAgICBydW5zICs9IDI7Ci0gICAgCisKICAgICAvLyBKdXN0IHdhbGsgdGhpcyBzY2FubGluZSwgY2hlY2tpbmcgZWFjaCBpbnRlcnZhbC4gVGhlIFgtc2VudGluZWwgd2lsbAogICAgIC8vIGFwcGVhciBhcyBhIGxlZnQtaW50ZXZhbCAocnVuc1swXSkgYW5kIHNob3VsZCBhYm9ydCB0aGUgc2VhcmNoLgogICAgIC8vCkBAIC0zNjcsMTAgKzM2NywxMCBAQAogICAgIGlmICh0aGlzLT5pc1JlY3QoKSkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBTa0FTU0VSVCh0aGlzLT5pc0NvbXBsZXgoKSk7CiAgICAgY29uc3QgUnVuVHlwZSogc2NhbmxpbmUgPSBmUnVuSGVhZC0+ZmluZFNjYW5saW5lKHIuZlRvcCk7Ci0gICAgCisKICAgICBkbyB7CiAgICAgICAgIGlmICghc2NhbmxpbmVfY29udGFpbnMoc2NhbmxpbmUsIHIuZkxlZnQsIHIuZlJpZ2h0KSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM4LDExICs0MzgsMTEgQEAKIAogYm9vbCBTa1JlZ2lvbjo6aW50ZXJzZWN0cyhjb25zdCBTa0lSZWN0JiByKSBjb25zdCB7CiAgICAgU2tERUJVR0NPREUodGhpcy0+dmFsaWRhdGUoKTspCi0gICAgCisKICAgICBpZiAodGhpcy0+aXNFbXB0eSgpIHx8IHIuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBTa0lSZWN0IHNlY3Q7CiAgICAgaWYgKCFzZWN0LmludGVyc2VjdChmQm91bmRzLCByKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTAsNyArNDUwLDcgQEAKICAgICBpZiAodGhpcy0+aXNSZWN0KCkpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgUnVuVHlwZSogc2NhbmxpbmUgPSBmUnVuSGVhZC0+ZmluZFNjYW5saW5lKHNlY3QuZlRvcCk7CiAgICAgZG8gewogICAgICAgICBpZiAoc2NhbmxpbmVfaW50ZXJzZWN0cyhzY2FubGluZSwgc2VjdC5mTGVmdCwgc2VjdC5mUmlnaHQpKSB7CkBAIC00NjUsMTEgKzQ2NSwxMSBAQAogICAgIGlmICh0aGlzLT5pc0VtcHR5KCkgfHwgcmduLmlzRW1wdHkoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFTa0lSZWN0OjpJbnRlcnNlY3RzKGZCb3VuZHMsIHJnbi5mQm91bmRzKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCB3ZUFyZUFSZWN0ID0gdGhpcy0+aXNSZWN0KCk7CiAgICAgYm9vbCB0aGV5QXJlQVJlY3QgPSByZ24uaXNSZWN0KCk7CiAKQEAgLTQ4Miw3ICs0ODIsNyBAQAogICAgIGlmICh0aGV5QXJlQVJlY3QpIHsKICAgICAgICAgcmV0dXJuIHRoaXMtPmludGVyc2VjdHMocmduLmdldEJvdW5kcygpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBib3RoIG9mIHVzIGFyZSBjb21wbGV4CiAgICAgcmV0dXJuIE9wZXIoKnRoaXMsIHJnbiwga0ludGVyc2VjdF9PcCwgTlVMTCk7CiB9CkBAIC00OTksNyArNDk5LDcgQEAKICAgICBpZiAoZkJvdW5kcyAhPSBiLmZCb3VuZHMpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGNvbnN0IFNrUmVnaW9uOjpSdW5IZWFkKiBhaCA9IGZSdW5IZWFkOwogICAgIGNvbnN0IFNrUmVnaW9uOjpSdW5IZWFkKiBiaCA9IGIuZlJ1bkhlYWQ7CiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZHN0LT5mQm91bmRzLm9mZnNldChkeCwgZHkpOwotICAgICAgICAKKwogICAgICAgICBjb25zdCBSdW5UeXBlKiAgc3J1bnMgPSBmUnVuSGVhZC0+cmVhZG9ubHlfcnVucygpOwogICAgICAgICBSdW5UeXBlKiAgICAgICAgZHJ1bnMgPSBkc3QtPmZSdW5IZWFkLT53cml0YWJsZV9ydW5zKCk7CiAKQEAgLTYwNCw3ICs2MDQsNyBAQAogICAgIGNvbnN0IFNrUmVnaW9uOjpSdW5UeXBlKiAgICBmQl9ydW5zOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBmQV9sZWZ0LCBmQV9yaXRlLCBmQl9sZWZ0LCBmQl9yaXRlOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBmTGVmdCwgZlJpdGUsIGZJbnNpZGU7Ci0gICAgCisKICAgICB2b2lkIGluaXQoY29uc3QgU2tSZWdpb246OlJ1blR5cGUgYV9ydW5zW10sCiAgICAgICAgICAgICAgIGNvbnN0IFNrUmVnaW9uOjpSdW5UeXBlIGJfcnVuc1tdKSB7CiAgICAgICAgIGZBX2xlZnQgPSAqYV9ydW5zKys7CkBAIC02MTUsNyArNjE1LDcgQEAKICAgICAgICAgZkFfcnVucyA9IGFfcnVuczsKICAgICAgICAgZkJfcnVucyA9IGJfcnVuczsKICAgICB9Ci0gICAgCisKICAgICBib29sIGRvbmUoKSBjb25zdCB7CiAgICAgICAgIFNrQVNTRVJUKGZBX2xlZnQgPD0gU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwpOwogICAgICAgICBTa0FTU0VSVChmQl9sZWZ0IDw9IFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsKTsKQEAgLTYzMCw3ICs2MzAsNyBAQAogICAgICAgICBpbnQgICAgIGluc2lkZSwgbGVmdCwgcml0ZSBTS19JTklUX1RPX0FWT0lEX1dBUk5JTkc7CiAgICAgICAgIGJvb2wgICAgYV9mbHVzaCA9IGZhbHNlOwogICAgICAgICBib29sICAgIGJfZmx1c2ggPSBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgaW50IGFfbGVmdCA9IGZBX2xlZnQ7CiAgICAgICAgIGludCBhX3JpdGUgPSBmQV9yaXRlOwogICAgICAgICBpbnQgYl9sZWZ0ID0gZkJfbGVmdDsKQEAgLTY3NywxMyArNjc3LDEzIEBACiAgICAgICAgIH0KIAogICAgICAgICBTa0FTU0VSVChsZWZ0IDw9IHJpdGUpOwotICAgICAgICAKKwogICAgICAgICAvLyBub3cgdXBkYXRlIG91ciBzdGF0ZQogICAgICAgICBmQV9sZWZ0ID0gYV9sZWZ0OwogICAgICAgICBmQV9yaXRlID0gYV9yaXRlOwogICAgICAgICBmQl9sZWZ0ID0gYl9sZWZ0OwogICAgICAgICBmQl9yaXRlID0gYl9yaXRlOwotICAgICAgICAKKwogICAgICAgICBmTGVmdCA9IGxlZnQ7CiAgICAgICAgIGZSaXRlID0gcml0ZTsKICAgICAgICAgZkluc2lkZSA9IGluc2lkZTsKQEAgLTY5NiwxNSArNjk2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWluLCBpbnQgbWF4KSB7CiAgICAgc3BhblJlYyByZWM7CiAgICAgYm9vbCAgICBmaXJzdEludGVydmFsID0gdHJ1ZTsKLSAgICAKKwogICAgIHJlYy5pbml0KGFfcnVucywgYl9ydW5zKTsKIAogICAgIHdoaWxlICghcmVjLmRvbmUoKSkgewogICAgICAgICByZWMubmV4dCgpOwotICAgICAgICAKKwogICAgICAgICBpbnQgbGVmdCA9IHJlYy5mTGVmdDsKICAgICAgICAgaW50IHJpdGUgPSByZWMuZlJpdGU7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGFkZCBsZWZ0LHJpdGUgdG8gb3VyIGRzdCBidWZmZXIgKGNoZWNraW5nIGZvciBjb2luY2lkZW5jZQogICAgICAgICBpZiAoKHVuc2lnbmVkKShyZWMuZkluc2lkZSAtIG1pbikgPD0gKHVuc2lnbmVkKShtYXggLSBtaW4pICYmCiAgICAgICAgICAgICAgICAgbGVmdCA8IHJpdGUpIHsgICAgLy8gc2tpcCBpZiBlcXVhbApAQCAtNzgyLDcgKzc4Miw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpbnQgZmx1c2goKSB7CiAgICAgICAgIGZTdGFydERzdFswXSA9IGZUb3A7CiAgICAgICAgIGZQcmV2RHN0W2ZQcmV2TGVuXSA9IFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsOwpAQCAtODM3LDEwICs4MzcsMTAgQEAKICAgICBhc3NlcnRfc2VudGluZWwoYl9ib3QsIGZhbHNlKTsKIAogICAgIFJnbk9wZXIgb3BlcihTa01pbjMyKGFfdG9wLCBiX3RvcCksIGRzdCwgb3ApOwotICAgIAorCiAgICAgYm9vbCBmaXJzdEludGVydmFsID0gdHJ1ZTsKICAgICBpbnQgcHJldkJvdCA9IFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsOyAvLyBzbyB3ZSBmYWlsIHRoZSBmaXJzdCB0ZXN0Ci0gICAgCisKICAgICB3aGlsZSAoYV9ib3QgPCBTa1JlZ2lvbjo6a1J1blR5cGVTZW50aW5lbCB8fAogICAgICAgICAgICBiX2JvdCA8IFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsKSB7CiAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdCBTS19JTklUX1RPX0FWT0lEX1dBUk5JTkc7CkBAIC04ODAsNyArODgwLDcgQEAKICAgICAgICAgICAgICAgICBiX2ZsdXNoID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodG9wID4gcHJldkJvdCkgewogICAgICAgICAgICAgb3Blci5hZGRTcGFuKHRvcCwgZ1NlbnRpbmVsLCBnU2VudGluZWwpOwogICAgICAgICB9CkBAIC05MDksNyArOTA5LDcgQEAKICAgICAgICAgICAgICAgICBiX3RvcCA9IGJfYm90OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHByZXZCb3QgPSBib3Q7CiAgICAgfQogICAgIHJldHVybiBvcGVyLmZsdXNoKCk7CkBAIC05MjAsNyArOTIwLDcgQEAKIC8qICBHaXZlbiBjb3VudCBSdW5UeXBlcyBpbiBhIGNvbXBsZXggcmVnaW9uLCByZXR1cm4gdGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mCiAgICAgbG9naWNhbCBpbnRlcnZhbHMgdGhhdCByZXByZXNlbnRzIChpLmUuIG51bWJlciBvZiByZWN0cyB0aGF0IHdvdWxkIGJlCiAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaXRlcmF0b3IpLgotIAorCiAgICAgV2UgY291bGQganVzdCByZXR1cm4gY291bnQvMiwgc2luY2UgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAyIHZhbHVlcyBwZXIKICAgICBpbnRlcnZhbCwgYnV0IHdlIGNhbiBmaXJzdCB0cmltIG9mZiB0aGUgY29uc3Qgb3ZlcmhlYWQgb2YgdGhlIGluaXRpYWwgVE9QCiAgICAgdmFsdWUsIHBsdXMgdGhlIGZpbmFsIEJPVFRPTSArIDIgc2VudGluZWxzLgpAQCAtOTM0LDcgKzkzNCw3IEBACiAKIC8qICBHaXZlbiBhIG51bWJlciBvZiBpbnRlcnZhbHMsIHdoYXQgaXMgdGhlIHdvcnN0IGNhc2UgcmVwcmVzZW50YXRpb24gb2YgdGhhdAogICAgIG1hbnkgaW50ZXJ2YWxzPwotIAorCiAgICAgV29yc3QgY2FzZSAoZnJvbSBhIHN0b3JhZ2UgcGVyc3BlY3RpdmUpLCBpcyBhIHZlcnRpY2FsIHN0YWNrIG9mIHNpbmdsZQogICAgIGludGVydmFsczogIFRPUCArIE4gKiAoQk9UVE9NIElOVEVSVkFMQ09VTlQgTEVGVCBSSUdIVCBTRU5USU5FTCkgKyBTRU5USU5FTAogICovCkBAIC05NjcsMTEgKzk2NywxMSBAQAogYm9vbCBTa1JlZ2lvbjo6T3Blcihjb25zdCBTa1JlZ2lvbiYgcmduYU9yaWcsIGNvbnN0IFNrUmVnaW9uJiByZ25iT3JpZywgT3Agb3AsCiAgICAgICAgICAgICAgICAgICAgIFNrUmVnaW9uKiByZXN1bHQpIHsKICAgICBTa0FTU0VSVCgodW5zaWduZWQpb3AgPCBrT3BDb3VudCk7Ci0gICAgCisKICAgICBpZiAoa1JlcGxhY2VfT3AgPT0gb3ApIHsKICAgICAgICAgcmV0dXJuIHNldFJlZ2lvbkNoZWNrKHJlc3VsdCwgcmduYk9yaWcpOwogICAgIH0KLSAgICAKKwogICAgIC8vIHN3aXRoIHRvIHVzaW5nIHBvaW50ZXJzLCBzbyB3ZSBjYW4gc3dhcCB0aGVtIGFzIG5lZWRlZAogICAgIGNvbnN0IFNrUmVnaW9uKiByZ25hID0gJnJnbmFPcmlnOwogICAgIGNvbnN0IFNrUmVnaW9uKiByZ25iID0gJnJnbmJPcmlnOwpAQCAtMTExMywxNCArMTExMywxNCBAQAogICAgIFNrUkJ1ZmZlciAgIGJ1ZmZlcihzdG9yYWdlKTsKICAgICBTa1JlZ2lvbiAgICB0bXA7CiAgICAgaW50MzJfdCAgICAgY291bnQ7Ci0gICAgCisKICAgICBjb3VudCA9IGJ1ZmZlci5yZWFkUzMyKCk7CiAgICAgaWYgKGNvdW50ID49IDApIHsKICAgICAgICAgYnVmZmVyLnJlYWQoJnRtcC5mQm91bmRzLCBzaXplb2YodG1wLmZCb3VuZHMpKTsKICAgICAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAgICAgIHRtcC5mUnVuSGVhZCA9IFNrUmVnaW9uX2dSZWN0UnVuSGVhZFB0cjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludDMyX3QgeVNwYW5Db3VudCA9IGJ1ZmZlci5yZWFkUzMyKCk7IAorICAgICAgICAgICAgaW50MzJfdCB5U3BhbkNvdW50ID0gYnVmZmVyLnJlYWRTMzIoKTsKICAgICAgICAgICAgIGludDMyX3QgaW50ZXJ2YWxDb3VudCA9IGJ1ZmZlci5yZWFkUzMyKCk7CiAgICAgICAgICAgICB0bXAuYWxsb2NhdGVSdW5zKGNvdW50LCB5U3BhbkNvdW50LCBpbnRlcnZhbENvdW50KTsKICAgICAgICAgICAgIGJ1ZmZlci5yZWFkKHRtcC5mUnVuSGVhZC0+d3JpdGFibGVfcnVucygpLCBjb3VudCAqIHNpemVvZihSdW5UeXBlKSk7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogICAgIC8vIGNvbnRhaW5zKCkuCiAgICAgLy8KICAgICBTa1JlZ2lvbjo6UnVuVHlwZSBwcmV2UiA9IC1Ta1JlZ2lvbjo6a1J1blR5cGVTZW50aW5lbDsKLSAgICAKKwogICAgIHdoaWxlIChydW5zWzBdIDwgU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwpIHsKICAgICAgICAgU2tBU1NFUlQocHJldlIgPCBydW5zWzBdKTsKICAgICAgICAgU2tBU1NFUlQocnVuc1swXSA8IHJ1bnNbMV0pOwpAQCAtMTE2MywzMiArMTE2MywzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJUmVjdCogYm91bmRzLCBpbnQqIHlTcGFuQ291bnRQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGludGVydmFsQ291bnRQdHIpIHsKICAgICBhc3NlcnRfc2VudGluZWwocnVuc1swXSwgZmFsc2UpOyAgICAvLyB0b3AKLSAgICAKKwogICAgIGludCBsZWZ0ID0gU0tfTWF4UzMyOwogICAgIGludCByaXRlID0gU0tfTWluUzMyOwogICAgIGludCBib3Q7CiAgICAgaW50IHlTcGFuQ291bnQgPSAwOwogICAgIGludCBpbnRlcnZhbENvdW50ID0gMDsKLSAgICAKKwogICAgIGJvdW5kcy0+ZlRvcCA9ICpydW5zKys7CiAgICAgZG8gewogICAgICAgICBib3QgPSAqcnVucysrOwogICAgICAgICBTa0FTU0VSVChTa1JlZ2lvbjo6a1J1blR5cGVTZW50aW5lbCA+IGJvdCk7CiAKICAgICAgICAgeVNwYW5Db3VudCArPSAxOwotICAgICAgICAKKwogICAgICAgICBydW5zICs9IDE7ICAvLyBza2lwIGludGVydmFsQ291bnQgZm9yIG5vdwogICAgICAgICBpZiAoKnJ1bnMgPCBTa1JlZ2lvbjo6a1J1blR5cGVTZW50aW5lbCkgewogICAgICAgICAgICAgaWYgKGxlZnQgPiAqcnVucykgewogICAgICAgICAgICAgICAgIGxlZnQgPSAqcnVuczsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb25zdCBTa1JlZ2lvbjo6UnVuVHlwZSogcHJldiA9IHJ1bnM7CiAgICAgICAgICAgICBydW5zID0gc2tpcF9pbnRlcnZhbHNfc2xvdyhydW5zKTsKICAgICAgICAgICAgIGludCBpbnRlcnZhbHMgPSAocnVucyAtIHByZXYpID4+IDE7CiAgICAgICAgICAgICBTa0FTU0VSVChwcmV2Wy0xXSA9PSBpbnRlcnZhbHMpOwogICAgICAgICAgICAgaW50ZXJ2YWxDb3VudCArPSBpbnRlcnZhbHM7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHJpdGUgPCBydW5zWy0xXSkgewogICAgICAgICAgICAgICAgIHJpdGUgPSBydW5zWy0xXTsKICAgICAgICAgICAgIH0KQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICAgICAgIFNrQVNTRVJUKFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsID09ICpydW5zKTsKICAgICAgICAgcnVucyArPSAxOwogICAgIH0gd2hpbGUgKFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsICE9ICpydW5zKTsKLSAgICAKKwogICAgIGJvdW5kcy0+ZkxlZnQgPSBsZWZ0OwogICAgIGJvdW5kcy0+ZlJpZ2h0ID0gcml0ZTsKICAgICBib3VuZHMtPmZCb3R0b20gPSBib3Q7CkBAIC0xMzExLDcgKzEzMTEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBmUmVjdC5mVG9wID0gZlJlY3QuZkJvdHRvbTsKICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAgICAgZlJlY3QuZkJvdHRvbSA9IHJ1bnNbMF07CiAgICAgICAgICAgICBhc3NlcnRfc2VudGluZWwocnVuc1syXSwgZmFsc2UpOwogICAgICAgICAgICAgYXNzZXJ0X3NlbnRpbmVsKHJ1bnNbM10sIGZhbHNlKTsKQEAgLTE0NTAsNyArMTQ1MCw3IEBACiBib29sIFNrUmVnaW9uOjpkZWJ1Z1NldFJ1bnMoY29uc3QgUnVuVHlwZSBydW5zW10sIGludCBjb3VudCkgewogICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBhIGNvcHksIHNpbmNlIHRoZSByZWFsIG1ldGhvZCBtYXkgbW9kaWZ5IHRoZSBhcnJheSwgYW5kCiAgICAgLy8gc28gaXQgY2Fubm90IGJlIGNvbnN0LgotICAgIAorCiAgICAgU2tBdXRvVEFycmF5PFJ1blR5cGU+IHN0b3JhZ2UoY291bnQpOwogICAgIG1lbWNweShzdG9yYWdlLmdldCgpLCBydW5zLCBjb3VudCAqIHNpemVvZihSdW5UeXBlKSk7CiAgICAgcmV0dXJuIHRoaXMtPnNldFJ1bnMoc3RvcmFnZS5nZXQoKSwgY291bnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tSZWdpb25Qcml2LmggYi9zcmMvY29yZS9Ta1JlZ2lvblByaXYuaAppbmRleCA4NGM3MjZkLi45MWIzYTJlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1JlZ2lvblByaXYuaAorKysgYi9zcmMvY29yZS9Ta1JlZ2lvblByaXYuaApAQCAtMzksNyArMzksNyBAQAogcHVibGljOgogICAgIGludDMyX3QgZlJlZkNudDsKICAgICBpbnQzMl90IGZSdW5Db3VudDsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBOdW1iZXIgb2Ygc3BhbnMgd2l0aCBkaWZmZXJlbnQgWSB2YWx1ZXMuIFRoaXMgZG9lcyBub3QgY291bnQgdGhlIGluaXRpYWwKICAgICAgKiAgVG9wIHZhbHVlLCBub3IgZG9lcyBpdCBjb3VudCB0aGUgZmluYWwgWS1TZW50aW5lbCB2YWx1ZS4gSW4gdGhlIGxvZ2ljYWwKQEAgLTYyLDkgKzYyLDkgQEAKICAgICBzdGF0aWMgUnVuSGVhZCogQWxsb2MoaW50IGNvdW50KSB7CiAgICAgICAgIC8vU2tERUJVR0NPREUoc2tfYXRvbWljX2luYygmZ1JnbkFsbG9jQ291bnRlcik7KQogICAgICAgICAvL1NrREVCVUdGKCgiKioqKioqKioqKioqKiogZ1JnbkFsbG9jQ291bnRlcjo6YWxsb2MgJWRcbiIsIGdSZ25BbGxvY0NvdW50ZXIpKTsKLSAgICAgICAgCisKICAgICAgICAgU2tBU1NFUlQoY291bnQgPj0gU2tSZWdpb246OmtSZWN0UmVnaW9uUnVucyk7Ci0gICAgICAgIAorCiAgICAgICAgIFJ1bkhlYWQqIGhlYWQgPSAoUnVuSGVhZCopc2tfbWFsbG9jX3Rocm93KHNpemVvZihSdW5IZWFkKSArIGNvdW50ICogc2l6ZW9mKFJ1blR5cGUpKTsKICAgICAgICAgaGVhZC0+ZlJlZkNudCA9IDE7CiAgICAgICAgIGhlYWQtPmZSdW5Db3VudCA9IGNvdW50OwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICBoZWFkLT5mSW50ZXJ2YWxDb3VudCA9IDA7CiAgICAgICAgIHJldHVybiBoZWFkOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBSdW5IZWFkKiBBbGxvYyhpbnQgY291bnQsIGludCB5c3BhbmNvdW50LCBpbnQgaW50ZXJ2YWxDb3VudCkgewogICAgICAgICBTa0FTU0VSVCh5c3BhbmNvdW50ID4gMCk7CiAgICAgICAgIFNrQVNTRVJUKGludGVydmFsQ291bnQgPiAxKTsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgaGVhZC0+ZkludGVydmFsQ291bnQgPSBpbnRlcnZhbENvdW50OwogICAgICAgICByZXR1cm4gaGVhZDsKICAgICB9Ci0gICAgCisKICAgICBib29sIGlzQ29tcGxleCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIHRoaXMgIT0gU2tSZWdpb25fZ0VtcHR5UnVuSGVhZFB0ciAmJiB0aGlzICE9IFNrUmVnaW9uX2dSZWN0UnVuSGVhZFB0cjsKICAgICB9CkBAIC05OCwxNSArOTgsMTUgQEAKICAgICAgICAgU2tBU1NFUlQodGhpcy0+aXNDb21wbGV4KCkpOwogICAgICAgICByZXR1cm4gKGNvbnN0IFNrUmVnaW9uOjpSdW5UeXBlKikodGhpcyArIDEpOwogICAgIH0KLSAgICAKKwogICAgIFJ1bkhlYWQqIGVuc3VyZVdyaXRhYmxlKCkgewogICAgICAgICBTa0FTU0VSVCh0aGlzLT5pc0NvbXBsZXgoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFJ1bkhlYWQqIHdyaXRhYmxlID0gdGhpczsKICAgICAgICAgaWYgKGZSZWZDbnQgPiAxKSB7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFsbG9jICYgY29weSB0aGUgY3VycmVudCByZWdpb24gYmVmb3JlIHdlIGNhbGwKICAgICAgICAgICAgIC8vIHNrX2F0b21pY19kZWMgYmVjYXVzZSBpdCBjb3VsZCBiZSBmcmVlZCBpbiB0aGUgbWVhbnRpbWUsCi0gICAgICAgICAgICAvLyBvdGhlcndpc2UuICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBvdGhlcndpc2UuCiAgICAgICAgICAgICB3cml0YWJsZSA9IEFsbG9jKGZSdW5Db3VudCwgZllTcGFuQ291bnQsIGZJbnRlcnZhbENvdW50KTsKICAgICAgICAgICAgIG1lbWNweSh3cml0YWJsZS0+d3JpdGFibGVfcnVucygpLCB0aGlzLT5yZWFkb25seV9ydW5zKCksCiAgICAgICAgICAgICAgICAgICAgZlJ1bkNvdW50ICogc2l6ZW9mKFJ1blR5cGUpKTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB3cml0YWJsZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiAgR2l2ZW4gYSBzY2FubGluZSAoaW5jbHVkaW5nIGl0cyBCb3R0b20gdmFsdWUgYXQgcnVuc1swXSksIHJldHVybiB0aGUgbmV4dAogICAgICAqICBzY2FubGluZS4gQXNzZXJ0cyB0aGF0IHRoZXJlIGlzIG9uZSAoaS5lLiBydW5zWzBdIDwgU2VudGluZWwpCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICBzdGF0aWMgU2tSZWdpb246OlJ1blR5cGUqIFNraXBFbnRpcmVTY2FubGluZShjb25zdCBTa1JlZ2lvbjo6UnVuVHlwZSBydW5zW10pIHsKICAgICAgICAgLy8gd2UgYXJlIG5vdCB0aGUgWSBTZW50aW5lbAogICAgICAgICBTa0FTU0VSVChydW5zWzBdIDwgU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwpOwotICAgICAgICAKKwogICAgICAgICBjb25zdCBpbnQgaW50ZXJ2YWxzID0gcnVuc1sxXTsKICAgICAgICAgU2tBU1NFUlQocnVuc1syICsgaW50ZXJ2YWxzICogMl0gPT0gU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwpOwogI2lmZGVmIFNLX0RFQlVHCkBAIC0xNDIsOCArMTQyLDggQEAKICAgICAgICAgcnVucyArPSAxICsgMSArIGludGVydmFscyAqIDIgKyAxOwogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxTa1JlZ2lvbjo6UnVuVHlwZSo+KHJ1bnMpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogIFJldHVybiB0aGUgc2NhbmxpbmUgdGhhdCBjb250YWlucyB0aGUgWSB2YWx1ZS4gVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBZCiAgICAgICogIHZhbHVlIGlzIGFscmVhZHkga25vd24gdG8gYmUgY29udGFpbmVkIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSByZWdpb24sCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogICAgICAgICAvLyBpZiB0aGUgdG9wLWNoZWNrIGZhaWxzLCB3ZSBkaWRuJ3QgZG8gYSBxdWljayBjaGVjayBvbiB0aGUgYm91bmRzCiAgICAgICAgIFNrQVNTRVJUKHkgPj0gcnVuc1swXSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJ1bnMgKz0gMTsgIC8vIHNraXAgdG9wLVkKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgaW50IGJvdHRvbSA9IHJ1bnNbMF07CkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICB2b2lkIGNvbXB1dGVSdW5Cb3VuZHMoU2tJUmVjdCogYm91bmRzKSB7CiAgICAgICAgIFJ1blR5cGUqIHJ1bnMgPSB0aGlzLT53cml0YWJsZV9ydW5zKCk7CiAgICAgICAgIGJvdW5kcy0+ZlRvcCA9ICpydW5zKys7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBib3Q7CiAgICAgICAgIGludCB5U3BhbkNvdW50ID0gMDsKICAgICAgICAgaW50IGludGVydmFsQ291bnQgPSAwOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgICAgICBib3QgPSAqcnVucysrOwogICAgICAgICAgICAgU2tBU1NFUlQoYm90IDwgU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwpOwogICAgICAgICAgICAgeVNwYW5Db3VudCArPSAxOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbnN0IGludCBpbnRlcnZhbHMgPSAqcnVucysrOwogICAgICAgICAgICAgU2tBU1NFUlQoaW50ZXJ2YWxzID49IDApOwogICAgICAgICAgICAgU2tBU1NFUlQoaW50ZXJ2YWxzIDwgU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwpOwpAQCAtMjAzLDE0ICsyMDMsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAobGVmdCA+IEwpIHsKICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IEw7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgcnVucyArPSBpbnRlcnZhbHMgKiAyOwogICAgICAgICAgICAgICAgIFJ1blR5cGUgUiA9IHJ1bnNbLTFdOwogICAgICAgICAgICAgICAgIFNrQVNTRVJUKFIgPCBTa1JlZ2lvbjo6a1J1blR5cGVTZW50aW5lbCk7CiAgICAgICAgICAgICAgICAgaWYgKHJpdGUgPCBSKSB7CiAgICAgICAgICAgICAgICAgICAgIHJpdGUgPSBSOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGludGVydmFsQ291bnQgKz0gaW50ZXJ2YWxzOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU2tBU1NFUlQoU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWwgPT0gKnJ1bnMpOwpAQCAtMjE4LDEzICsyMTgsMTMgQEAKIAogICAgICAgICAgICAgLy8gdGVzdCBZLXNlbnRpbmVsCiAgICAgICAgIH0gd2hpbGUgKFNrUmVnaW9uOjprUnVuVHlwZVNlbnRpbmVsID4gKnJ1bnMpOwotICAgICAgICAKKwogI2lmZGVmIFNLX0RFQlVHCiAgICAgICAgIC8vICsxIHRvIHNraXAgdGhlIGxhc3QgWS1zZW50aW5lbAogICAgICAgICBpbnQgcnVuQ291bnQgPSBydW5zIC0gdGhpcy0+d3JpdGFibGVfcnVucygpICsgMTsKICAgICAgICAgU2tBU1NFUlQocnVuQ291bnQgPT0gZlJ1bkNvdW50KTsKICNlbmRpZgotICAgICAgICAKKwogICAgICAgICBmWVNwYW5Db3VudCA9IHlTcGFuQ291bnQ7CiAgICAgICAgIGZJbnRlcnZhbENvdW50ID0gaW50ZXJ2YWxDb3VudDsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tSZWdpb25fcGF0aC5jcHAgYi9zcmMvY29yZS9Ta1JlZ2lvbl9wYXRoLmNwcAppbmRleCA1ZWE3OTJhLi41ODgxMmViIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1JlZ2lvbl9wYXRoLmNwcAorKysgYi9zcmMvY29yZS9Ta1JlZ2lvbl9wYXRoLmNwcApAQCAtMTYsNyArMTYsNyBAQAogY2xhc3MgU2tSZ25CdWlsZGVyIDogcHVibGljIFNrQmxpdHRlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2tSZ25CdWlsZGVyKCk7Ci0gICAgCisKICAgICAvLyByZXR1cm5zIHRydWUgaWYgaXQgY291bGQgYWxsb2NhdGUgdGhlIHdvcmtpbmcgc3RvcmFnZSBuZWVkZWQKICAgICBib29sIGluaXQoaW50IG1heEhlaWdodCwgaW50IG1heFRyYW5zaXRpb25zKTsKIApAQCAtNzksNyArNzksNyBAQAogICAgIC8vICBwb2ludHMgYXQgbmV4dCBhdmlhbGFibGUgeFtdIGluIGZDdXJyU2NhbmxpbmUKICAgICBTa1JlZ2lvbjo6UnVuVHlwZSogIGZDdXJyWFB0cjsKICAgICBTa1JlZ2lvbjo6UnVuVHlwZSAgIGZUb3A7ICAgICAgICAgICAvLyBmaXJzdCBZIHZhbHVlCi0gICAgCisKICAgICBpbnQgZlN0b3JhZ2VDb3VudDsKIAogICAgIGJvb2wgY29sbGFwc1dpdGhQcmV2KCkgewpAQCAtMjkwLDcgKzI5MCw3IEBACiAgICAgaW50IHBhdGhUcmFuc2l0aW9ucyA9IGNvdW50X3BhdGhfcnVudHlwZV92YWx1ZXMocGF0aCwgJnBhdGhUb3AsICZwYXRoQm90KTsKICAgICBpbnQgY2xpcFRvcCwgY2xpcEJvdDsKICAgICBpbnQgY2xpcFRyYW5zaXRpb25zOwotICAgIAorCiAgICAgY2xpcFRyYW5zaXRpb25zID0gY2xpcC5jb3VudF9ydW50eXBlX3ZhbHVlcygmY2xpcFRvcCwgJmNsaXBCb3QpOwogCiAgICAgaW50IHRvcCA9IFNrTWF4MzIocGF0aFRvcCwgY2xpcFRvcCk7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgcmV0dXJuIHRoaXMtPnNldEVtcHR5KCk7CiAKICAgICBTa1JnbkJ1aWxkZXIgYnVpbGRlcjsKLSAgICAKKwogICAgIGlmICghYnVpbGRlci5pbml0KGJvdCAtIHRvcCwgU2tNYXgzMihwYXRoVHJhbnNpdGlvbnMsIGNsaXBUcmFuc2l0aW9ucykpKSB7CiAgICAgICAgIC8vIGNhbid0IGFsbG9jYXRlIHdvcmtpbmcgc3BhY2UsIHNvIHJldHVybiBmYWxzZQogICAgICAgICByZXR1cm4gdGhpcy0+c2V0RW1wdHkoKTsKQEAgLTMzNCw3ICszMzQsNyBAQAogICAgIGVudW0gewogICAgICAgICBrWTBMaW5rID0gMHgwMSwKICAgICAgICAga1kxTGluayA9IDB4MDIsCi0gICAgICAgIAorCiAgICAgICAgIGtDb21wbGV0ZUxpbmsgPSAoa1kwTGluayB8IGtZMUxpbmspCiAgICAgfTsKIApAQCAtMzQyLDcgKzM0Miw3IEBACiAgICAgU2tSZWdpb246OlJ1blR5cGUgZlkwLCBmWTE7CiAgICAgdWludDhfdCBmRmxhZ3M7CiAgICAgRWRnZSogICBmTmV4dDsKLSAgICAKKwogICAgIHZvaWQgc2V0KGludCB4LCBpbnQgeTAsIGludCB5MSkgewogICAgICAgICBTa0FTU0VSVCh5MCAhPSB5MSk7CiAKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgICAgICBmRmxhZ3MgPSAwOwogICAgICAgICBTa0RFQlVHQ09ERShmTmV4dCA9IE5VTEw7KQogICAgIH0KLSAgICAKKwogICAgIGludCB0b3AoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBTa0Zhc3RNaW4zMihmWTAsIGZZMSk7CiAgICAgfQpAQCAtMzgzLDcgKzM4Myw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBlID0gYmFzZTsKICAgICBpZiAoKGJhc2UtPmZGbGFncyAmIEVkZ2U6OmtZMUxpbmspID09IDApIHsKICAgICAgICAgZm9yICg7OykgewpAQCAtMzk2LDcgKzM5Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgYmFzZS0+ZkZsYWdzID0gRWRnZTo6a0NvbXBsZXRlTGluazsKIH0KIApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAgICAgY29uc3QgU2tJUmVjdCYgYm91bmRzID0gdGhpcy0+Z2V0Qm91bmRzKCk7CiAKICAgICBpZiAodGhpcy0+aXNSZWN0KCkpIHsKLSAgICAgICAgU2tSZWN0ICByOyAgICAgICAgCisgICAgICAgIFNrUmVjdCAgcjsKICAgICAgICAgci5zZXQoYm91bmRzKTsgICAgICAvLyB0aGlzIGNvbnZlcnRzIHRoZSBpbnRzIHRvIHNjYWxhcnMKICAgICAgICAgcGF0aC0+YWRkUmVjdChyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NTYsMTQgKzQ1NiwxNCBAQAogCiAgICAgU2tSZWdpb246Okl0ZXJhdG9yICBpdGVyKCp0aGlzKTsKICAgICBTa1REQXJyYXk8RWRnZT4gICAgIGVkZ2VzOwotICAgIAorCiAgICAgZm9yIChjb25zdCBTa0lSZWN0JiByID0gaXRlci5yZWN0KCk7ICFpdGVyLmRvbmUoKTsgaXRlci5uZXh0KCkpIHsKICAgICAgICAgRWRnZSogZWRnZSA9IGVkZ2VzLmFwcGVuZCgyKTsKICAgICAgICAgZWRnZVswXS5zZXQoci5mTGVmdCwgci5mQm90dG9tLCByLmZUb3ApOwogICAgICAgICBlZGdlWzFdLnNldChyLmZSaWdodCwgci5mVG9wLCByLmZCb3R0b20pOwogICAgIH0KICAgICBxc29ydChlZGdlcy5iZWdpbigpLCBlZGdlcy5jb3VudCgpLCBzaXplb2YoRWRnZSksIFNrQ2FzdEZvclFTb3J0KEVkZ2VQcm9jKSk7Ci0gICAgCisKICAgICBpbnQgY291bnQgPSBlZGdlcy5jb3VudCgpOwogICAgIEVkZ2UqIHN0YXJ0ID0gZWRnZXMuYmVnaW4oKTsKICAgICBFZGdlKiBzdG9wID0gc3RhcnQgKyBjb3VudDsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrUmVnaW9uX3JlY3RzLmNwcCBiL3NyYy9jb3JlL1NrUmVnaW9uX3JlY3RzLmNwcAppbmRleCAxNzc3YTFlLi40MTIxMDgwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1JlZ2lvbl9yZWN0cy5jcHAKKysrIGIvc3JjL2NvcmUvU2tSZWdpb25fcmVjdHMuY3BwCkBAIC0xNSwxMiArMTUsMTIgQEAKIHN0cnVjdCBWRWRnZSB7CiAgICAgVkVkZ2UqICBmUHJldjsKICAgICBWRWRnZSogIGZOZXh0OwotICAgIAorCiAgICAgU2tSZWdpb246OlJ1blR5cGUgICBmWDsKICAgICBTa1JlZ2lvbjo6UnVuVHlwZSAgIGZUb3A7CiAgICAgU2tSZWdpb246OlJ1blR5cGUgICBmQm90dG9tOwogICAgIGludCAgICAgICAgICAgICAgICAgZldpbmRpbmc7Ci0gICAgCisKICAgICB2b2lkIHJlbW92ZUZyb21MaXN0KCkgewogICAgICAgICBmUHJldi0+Zk5leHQgPSBmTmV4dDsKICAgICAgICAgZk5leHQtPmZQcmV2ID0gZlByZXY7CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgICAvLyByZW1vdmUgcHJldiBmcm9tIHRoZSBsaXN0CiAgICAgICAgICAgICBwcmV2LT5mUHJldi0+Zk5leHQgPSBuZXh0OwogICAgICAgICAgICAgbmV4dC0+ZlByZXYgPSBwcmV2LT5mUHJldjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnNlcnQgcHJldiBhZnRlciBuZXh0CiAgICAgICAgICAgICBwcmV2LT5mTmV4dCA9IG5leHQtPmZOZXh0OwogICAgICAgICAgICAgbmV4dC0+Zk5leHQtPmZQcmV2ID0gcHJldjsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgZWRnZXNbMF0uZlRvcCA9IHIuZlRvcDsKICAgICAgICAgZWRnZXNbMF0uZkJvdHRvbSA9IHIuZkJvdHRvbTsKICAgICAgICAgZWRnZXNbMF0uZldpbmRpbmcgPSAtMTsKLSAgICAgICAgCisKICAgICAgICAgZWRnZXNbMV0uZlggPSByLmZSaWdodDsKICAgICAgICAgZWRnZXNbMV0uZlRvcCA9IHIuZlRvcDsKICAgICAgICAgZWRnZXNbMV0uZkJvdHRvbSA9IHIuZkJvdHRvbTsKQEAgLTYwLDEyICs2MCwxMiBAQAogcHVibGljOgogICAgIEFjY3VtdWxhdG9yKFNrUmVnaW9uOjpSdW5UeXBlIHRvcCwgaW50IG51bVJlY3RzKTsKICAgICB+QWNjdW11bGF0b3IoKSB7fQotICAgIAorCiAgICAgU2tSZWdpb246OlJ1blR5cGUgYXBwZW5kKFNrUmVnaW9uOjpSdW5UeXBlIHRvcCwgY29uc3QgVkVkZ2UqIGVkZ2UpOwotICAgIAorCiAgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZlRvdGFsQ291bnQ7IH0KICAgICB2b2lkIGNvcHlUbyhTa1JlZ2lvbjo6UnVuVHlwZSBkc3RbXSk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgc3RydWN0IFJvdyB7CiAgICAgICAgIFNrUmVnaW9uOjpSdW5UeXBlKiAgZlB0cjsKQEAgLTk0LDcgKzk0LDcgQEAKICAgICBzaXplX3Qgc2l6ZSA9IGZSZWN0Q291bnQgKiAyICogc2l6ZW9mKFNrUmVnaW9uOjpSdW5UeXBlKTsKICAgICBTa1JlZ2lvbjo6UnVuVHlwZSogcm93ID0gKFNrUmVnaW9uOjpSdW5UeXBlKilmQWxsb2MuYWxsb2NUaHJvdyhzaXplKTsKICAgICBTa1JlZ2lvbjo6UnVuVHlwZSogcm93SGVhZCA9IHJvdzsKLSAgICAKKwogICAgIFNrUmVnaW9uOjpSdW5UeXBlIG5leHRZID0gU2tSZWdpb246OmtSdW5UeXBlU2VudGluZWw7CiAgICAgaW50IHdpbmRpbmcgPSBlZGdlLT5mV2luZGluZzsKIApAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICAgICAgKnJvdysrID0gZWRnZS0+Zlg7CiAgICAgICAgICAgICAgICAgVFJBQ0VfUk9XKFNrRGVidWdmKCIgJWRdIFslZCIsIGN1cnJSLCBlZGdlLT5mWCk7KQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG5leHRZID0gU2tNaW4zMihuZXh0WSwgZWRnZS0+ZkJvdHRvbSk7CiAgICAgICAgICAgICBlZGdlID0gZWRnZS0+Zk5leHQ7CiAgICAgICAgIH0KQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICBUUkFDRV9ST1coU2tEZWJ1Z2YoIiAlZF1cbiIsIGN1cnJSKTspCiAgICAgfQogICAgIGludCByb3dDb3VudCA9IHJvdyAtIHJvd0hlYWQ7Ci0gICAgCisKICAgICAvLyBub3cgc2VlIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoaXMgcm93LCBvciBpZiBpdHMgdW5pcXVlCiAKICAgICBSb3cqIHIgPSBmUm93cy5jb3VudCgpID8gJmZSb3dzW2ZSb3dzLmNvdW50KCkgLSAxXSA6IE5VTEw7CkBAIC0xNDgsMTUgKzE0OCwxNSBAQAogICAgICAgICAgICAgci0+ZkNvdW50ID0gcm93Q291bnQ7CiAgICAgICAgICAgICBmVG90YWxDb3VudCArPSAxICsgcm93Q291bnQgKyAxOwogICAgICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gbmV4dFk7CiB9CiAKIHZvaWQgQWNjdW11bGF0b3I6OmNvcHlUbyhTa1JlZ2lvbjo6UnVuVHlwZSBkc3RbXSkgewogICAgIFNrREVCVUdDT0RFKFNrUmVnaW9uOjpSdW5UeXBlKiBzdGFydERzdCA9IGRzdDspCi0gICAgCisKICAgICAqZHN0KysgPSBmVG9wOwotICAgIAorCiAgICAgY29uc3QgUm93KiBjdXJyID0gZlJvd3MuYmVnaW4oKTsKICAgICBjb25zdCBSb3cqIHN0b3AgPSBmUm93cy5lbmQoKTsKICAgICB3aGlsZSAoY3VyciA8IHN0b3ApIHsKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgICAgICAgICAgKnB0cisrID0gZWRnZSsrOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaW50IGVkZ2VDb3VudCA9IHB0ciAtIGVkZ2VQdHI7CiAgICAgaWYgKDAgPT0gZWRnZUNvdW50KSB7CiAgICAgICAgIC8vIGFsbCB0aGUgcmVjdHNbXSB3ZXJlIGVtcHR5CkBAIC0yNTEsNyArMjUxLDcgQEAKICAgICBoZWFkRWRnZS5mVG9wID0gU0tfTWluUzMyOwogICAgIGhlYWRFZGdlLmZYID0gU0tfTWluUzMyOwogICAgIGhlYWQtPmZQcmV2ID0gJmhlYWRFZGdlOwotICAgIAorCiAgICAgdGFpbEVkZ2UuZlByZXYgPSB0YWlsOwogICAgIHRhaWxFZGdlLmZOZXh0ID0gTlVMTDsKICAgICB0YWlsRWRnZS5mVG9wID0gU0tfTWF4UzMyOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKICAgICBpbnQzMl90IGN1cnJZID0gaGVhZC0+ZlRvcDsKICAgICBBY2N1bXVsYXRvciBhY2N1bShjdXJyWSwgcmVjdENvdW50KTsKLSAgICAKKwogICAgIHdoaWxlIChoZWFkLT5mTmV4dCkgewogICAgICAgICBWRWRnZSogZWRnZSA9IGhlYWQ7CiAgICAgICAgIC8vIGFjY3VtdWxhdGUgdGhlIGN1cnJlbnQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrU2NhbGVyQ29udGV4dC5jcHAgYi9zcmMvY29yZS9Ta1NjYWxlckNvbnRleHQuY3BwCmluZGV4IGExNDczYmUuLjEwNzI5MDUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrU2NhbGVyQ29udGV4dC5jcHAKKysrIGIvc3JjL2NvcmUvU2tTY2FsZXJDb250ZXh0LmNwcApAQCAtMzQwLDEyICszNDAsMTIgQEAKIHN0YXRpYyB2b2lkIHBhY2szeEhUb0xDRDE2KGNvbnN0IFNrQml0bWFwJiBzcmMsIGNvbnN0IFNrTWFzayYgZHN0LCBTa01hc2tHYW1tYTo6UHJlQmxlbmQqIG1hc2tQcmVCbGVuZCkgewogICAgIFNrQVNTRVJUKFNrQml0bWFwOjprQThfQ29uZmlnID09IHNyYy5jb25maWcoKSk7CiAgICAgU2tBU1NFUlQoU2tNYXNrOjprTENEMTZfRm9ybWF0ID09IGRzdC5mRm9ybWF0KTsKLSAgICAKKwogICAgIGNvbnN0IGludCB3aWR0aCA9IGRzdC5mQm91bmRzLndpZHRoKCk7CiAgICAgY29uc3QgaW50IGhlaWdodCA9IGRzdC5mQm91bmRzLmhlaWdodCgpOwogICAgIHVpbnQxNl90KiBkc3RQID0gKHVpbnQxNl90Kilkc3QuZkltYWdlOwogICAgIHNpemVfdCBkc3RSQiA9IGRzdC5mUm93Qnl0ZXM7Ci0gICAgCisKICAgICBjb25zdCB1aW50OF90KiBtYXNrUHJlQmxlbmRSID0gTlVMTDsKICAgICBjb25zdCB1aW50OF90KiBtYXNrUHJlQmxlbmRHID0gTlVMTDsKICAgICBjb25zdCB1aW50OF90KiBtYXNrUHJlQmxlbmRCID0gTlVMTDsKQEAgLTM3MSwxMiArMzcxLDEyIEBACiBzdGF0aWMgdm9pZCBwYWNrM3hIVG9MQ0QzMihjb25zdCBTa0JpdG1hcCYgc3JjLCBjb25zdCBTa01hc2smIGRzdCwgU2tNYXNrR2FtbWE6OlByZUJsZW5kKiBtYXNrUHJlQmxlbmQpIHsKICAgICBTa0FTU0VSVChTa0JpdG1hcDo6a0E4X0NvbmZpZyA9PSBzcmMuY29uZmlnKCkpOwogICAgIFNrQVNTRVJUKFNrTWFzazo6a0xDRDMyX0Zvcm1hdCA9PSBkc3QuZkZvcm1hdCk7Ci0gICAgCisKICAgICBjb25zdCBpbnQgd2lkdGggPSBkc3QuZkJvdW5kcy53aWR0aCgpOwogICAgIGNvbnN0IGludCBoZWlnaHQgPSBkc3QuZkJvdW5kcy5oZWlnaHQoKTsKICAgICBTa1BNQ29sb3IqIGRzdFAgPSAoU2tQTUNvbG9yKilkc3QuZkltYWdlOwogICAgIHNpemVfdCBkc3RSQiA9IGRzdC5mUm93Qnl0ZXM7Ci0gICAgCisKICAgICBjb25zdCB1aW50OF90KiBtYXNrUHJlQmxlbmRSID0gTlVMTDsKICAgICBjb25zdCB1aW50OF90KiBtYXNrUHJlQmxlbmRHID0gTlVMTDsKICAgICBjb25zdCB1aW50OF90KiBtYXNrUHJlQmxlbmRCID0gTlVMTDsKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICAgICBtYXNrUHJlQmxlbmRHID0gbWFza1ByZUJsZW5kLT5mRzsKICAgICAgICAgbWFza1ByZUJsZW5kQiA9IG1hc2tQcmVCbGVuZC0+ZkI7CiAgICAgfQotICAgIAorCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewogICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQID0gc3JjLmdldEFkZHI4KDAsIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKQEAgLTQ0Niw3ICs0NDYsNyBAQAogICAgICAgICBibS5zZXRQaXhlbHMobWFzay5mSW1hZ2UpOwogICAgIH0KICAgICBza19iemVybyhibS5nZXRQaXhlbHMoKSwgYm0uZ2V0U2FmZVNpemUoKSk7Ci0gICAgCisKICAgICBTa0RyYXcgIGRyYXc7CiAgICAgc2tfYnplcm8oJmRyYXcsIHNpemVvZihkcmF3KSk7CiAgICAgZHJhdy5mUkMgICAgPSAmY2xpcDsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogICAgIGRyYXcuZk1hdHJpeCA9ICZtYXRyaXg7CiAgICAgZHJhdy5mQml0bWFwID0gJmJtOwogICAgIGRyYXcuZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgIAorCiAgICAgaWYgKDAgPT0gZHN0UkIpIHsKICAgICAgICAgc3dpdGNoIChtYXNrLmZGb3JtYXQpIHsKICAgICAgICAgICAgIGNhc2UgU2tNYXNrOjprTENEMTZfRm9ybWF0OgpAQCAtNDgwLDcgKzQ4MCw3IEBACiBzdGF0aWMgdm9pZCBhcHBseUxVVFRvQThHbHlwaChjb25zdCBTa0dseXBoJiBnbHlwaCwgY29uc3QgdWludDhfdCogbHV0KSB7CiAgICAgICB1aW50OF90KiBTS19SRVNUUklDVCBkc3QgPSAodWludDhfdCopZ2x5cGguZkltYWdlOwogICAgICAgdW5zaWduZWQgcm93Qnl0ZXMgPSBnbHlwaC5yb3dCeXRlcygpOwotICAgICAgCisKICAgICAgIGZvciAoaW50IHkgPSBnbHlwaC5mSGVpZ2h0IC0gMTsgeSA+PSAwOyAtLXkpIHsKICAgICAgICAgICBmb3IgKGludCB4ID0gZ2x5cGguZldpZHRoIC0gMTsgeCA+PSAwOyAtLXgpIHsKICAgICAgICAgICAgICAgZHN0W3hdID0gbHV0W2RzdFt4XV07CkBAIC00OTMsNyArNDkzLDcgQEAKICAgICBjb25zdCBTa0dseXBoKiAgZ2x5cGggPSAmb3JpZ0dseXBoOwogICAgIFNrR2x5cGggICAgICAgICB0bXBHbHlwaDsKICAgICBTa01hc2tHYW1tYTo6UHJlQmxlbmQqIG1hc2tQcmVCbGVuZCA9ICZmTWFza1ByZUJsZW5kOwotICAgIAorCiAgICAgaWYgKGZNYXNrRmlsdGVyKSB7ICAgLy8gcmVzdG9yZSB0aGUgcHJlZmlsdGVyIGJvdW5kcwogICAgICAgICB0bXBHbHlwaC5pbml0KG9yaWdHbHlwaC5mSUQpOwogCkBAIC02MzEsNyArNjMxLDcgQEAKICAgICAgICAgLy8gbm93IGxvY2FsUGF0aCBpcyBvbmx5IGFmZmVjdGVkIGJ5IHRoZSBwYWludCBzZXR0aW5ncywgYW5kIG5vdCB0aGUgY2FudmFzIG1hdHJpeAogCiAgICAgICAgIFNrU3Ryb2tlUmVjIHJlYyhTa1N0cm9rZVJlYzo6a0ZpbGxfSW5pdFN0eWxlKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGZSZWMuZkZyYW1lV2lkdGggPiAwKSB7CiAgICAgICAgICAgICByZWMuc2V0U3Ryb2tlU3R5bGUoZlJlYy5mRnJhbWVXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1RvQm9vbChmUmVjLmZGbGFncyAmIGtGcmFtZUFuZEZpbGxfRmxhZykpOwpAQCAtNjQxLDcgKzY0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTa1BhaW50OjpKb2luKWZSZWMuZlN0cm9rZUpvaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZSZWMuZk1pdGVyTGltaXQpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmUGF0aEVmZmVjdCkgewogICAgICAgICAgICAgU2tQYXRoIGVmZmVjdFBhdGg7CiAgICAgICAgICAgICBpZiAoZlBhdGhFZmZlY3QtPmZpbHRlclBhdGgoJmVmZmVjdFBhdGgsIGxvY2FsUGF0aCwgJnJlYykpIHsKQEAgLTcxOCw3ICs3MTgsNyBAQAogCiBTa0F4aXNBbGlnbm1lbnQgU2tDb21wdXRlQXhpc0FsaWdubWVudEZvckhUZXh0KGNvbnN0IFNrTWF0cml4JiBtYXRyaXgpIHsKICAgICBTa0FTU0VSVCghbWF0cml4Lmhhc1BlcnNwZWN0aXZlKCkpOwotICAgIAorCiAgICAgaWYgKDAgPT0gbWF0cml4W1NrTWF0cml4OjprTVNrZXdZXSkgewogICAgICAgICByZXR1cm4ga1hfU2tBeGlzQWxpZ25tZW50OwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrU2NhbGVyQ29udGV4dC5oIGIvc3JjL2NvcmUvU2tTY2FsZXJDb250ZXh0LmgKaW5kZXggZWVlNTJhNS4uMDg1ZTMxZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tTY2FsZXJDb250ZXh0LmgKKysrIGIvc3JjL2NvcmUvU2tTY2FsZXJDb250ZXh0LmgKQEAgLTM0LDE0ICszNCwxNCBAQAogICAgIFNrU2NhbGFyICAgIGZUZXh0U2l6ZSwgZlByZVNjYWxlWCwgZlByZVNrZXdYOwogICAgIFNrU2NhbGFyICAgIGZQb3N0MngyWzJdWzJdOwogICAgIFNrU2NhbGFyICAgIGZGcmFtZVdpZHRoLCBmTWl0ZXJMaW1pdDsKLSAgICAKKwogICAgIC8vVGhlc2UgZGVzY3JpYmUgdGhlIHBhcmFtZXRlcnMgdG8gY3JlYXRlICh1bmlxdWVseSBpZGVudGlmeSkgdGhlIHByZS1ibGVuZC4KICAgICB1aW50MzJfdCAgICBmTHVtQml0czsKICAgICB1aW50OF90ICAgICBmRGV2aWNlR2FtbWE7IC8vMi42LCAoMC4wLCA0LjApIGdhbW1hLCAwLjAgZm9yIHNSR0IKICAgICB1aW50OF90ICAgICBmUGFpbnRHYW1tYTsgIC8vMi42LCAoMC4wLCA0LjApIGdhbW1hLCAwLjAgZm9yIHNSR0IKICAgICB1aW50OF90ICAgICBmQ29udHJhc3Q7ICAgIC8vMC44KzEsIFswLjAsIDEuMF0gYXJ0aWZpY2lhbCBjb250cmFzdAogICAgIHVpbnQ4X3QgICAgIGZSZXNlcnZlZEFsaWduOwotICAgIAorCiAgICAgU2tTY2FsYXIgZ2V0RGV2aWNlR2FtbWEoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBTa0ludFRvU2NhbGFyKGZEZXZpY2VHYW1tYSkgLyAoMSA8PCA2KTsKICAgICB9CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIFNrQVNTRVJUKDAgPD0gZGcgJiYgZGcgPCBTa0ludFRvU2NhbGFyKDQpKTsKICAgICAgICAgZkRldmljZUdhbW1hID0gU2tTY2FsYXJGbG9vclRvSW50KGRnICogKDEgPDwgNikpOwogICAgIH0KLSAgICAKKwogICAgIFNrU2NhbGFyIGdldFBhaW50R2FtbWEoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBTa0ludFRvU2NhbGFyKGZQYWludEdhbW1hKSAvICgxIDw8IDYpOwogICAgIH0KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgU2tBU1NFUlQoMCA8PSBwZyAmJiBwZyA8IFNrSW50VG9TY2FsYXIoNCkpOwogICAgICAgICBmUGFpbnRHYW1tYSA9IFNrU2NhbGFyRmxvb3JUb0ludChwZyAqICgxIDw8IDYpKTsKICAgICB9Ci0gICAgCisKICAgICBTa1NjYWxhciBnZXRDb250cmFzdCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIFNrSW50VG9TY2FsYXIoZkNvbnRyYXN0KSAvICgoMSA8PCA4KSAtIDEpOwogICAgIH0KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgU2tBU1NFUlQoMCA8PSBjICYmIGMgPD0gU0tfU2NhbGFyMSk7CiAgICAgICAgIGZDb250cmFzdCA9IFNrU2NhbGFyUm91bmRUb0ludChjICogKCgxIDw8IDgpIC0gMSkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqICBDYXVzZXMgdGhlIGx1bWluYW5jZSBjb2xvciBhbmQgY29udHJhc3QgdG8gYmUgaWdub3JlZCwgYW5kIHRoZQogICAgICAqICBwYWludCBhbmQgZGV2aWNlIGdhbW1hIHRvIGJlIGVmZmVjdGl2ZWx5IDEuMC4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgc2V0RGV2aWNlR2FtbWEoU0tfU2NhbGFyMSk7CiAgICAgICAgIHNldENvbnRyYXN0KDApOwogICAgIH0KLSAgICAKKwogICAgIHVpbnQ4X3QgICAgIGZNYXNrRm9ybWF0OwogICAgIHVpbnQ4X3QgICAgIGZTdHJva2VKb2luOwogICAgIHVpbnQxNl90ICAgIGZGbGFnczsKQEAgLTg0LDIyICs4NCwyMiBAQAogICAgIC8vIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiBTa0Rlc2NyaXB0b3IgcmVxdWlyZXMgdGhhdCBpdHMgYXJndW1lbnRzIGJlCiAgICAgLy8gbXVsdGlwbGVzIG9mIGZvdXIgYW5kIHRoaXMgc3RydWN0dXJlIGlzIHB1dCBpbiBhbiBTa0Rlc2NyaXB0b3IgaW4KICAgICAvLyBTa1BhaW50OjpNYWtlUmVjLgotICAgIAorCiAgICAgdm9pZCAgICBnZXRNYXRyaXhGcm9tMngyKFNrTWF0cml4KikgY29uc3Q7CiAgICAgdm9pZCAgICBnZXRMb2NhbE1hdHJpeChTa01hdHJpeCopIGNvbnN0OwogICAgIHZvaWQgICAgZ2V0U2luZ2xlTWF0cml4KFNrTWF0cml4KikgY29uc3Q7Ci0gICAgCisKICAgICBpbmxpbmUgU2tQYWludDo6SGludGluZyBnZXRIaW50aW5nKCkgY29uc3Q7CiAgICAgaW5saW5lIHZvaWQgc2V0SGludGluZyhTa1BhaW50OjpIaW50aW5nKTsKLSAgICAKKwogICAgIFNrTWFzazo6Rm9ybWF0IGdldEZvcm1hdCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNrTWFzazo6Rm9ybWF0PihmTWFza0Zvcm1hdCk7CiAgICAgfQotICAgIAorCiAgICAgU2tDb2xvciBnZXRMdW1pbmFuY2VDb2xvcigpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIGZMdW1CaXRzOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgc2V0THVtaW5hbmNlQ29sb3IoU2tDb2xvciBjKSB7CiAgICAgICAgIGZMdW1CaXRzID0gYzsKICAgICB9CkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgLy8gUGVyaGFwcyB3ZSBjYW4gc3RvcmUgdGhpcyAoaW5zdGVhZCkgaW4gZk1hc2tGb3JtYXQsIGluIGhpZ2h0IGJpdD8KICAgICAgICAga0dlbkE4RnJvbUxDRF9GbGFnICAgICAgICA9IDB4MDgwMCwKICAgICB9OwotICAgIAorCiAgICAgLy8gY29tcHV0ZWQgdmFsdWVzCiAgICAgZW51bSB7CiAgICAgICAgIGtIaW50aW5nX01hc2sgICA9IGtIaW50aW5nQml0MV9GbGFnIHwga0hpbnRpbmdCaXQyX0ZsYWcsCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICBib29sIGlzU3VicGl4ZWwoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBTa1RvQm9vbChmUmVjLmZGbGFncyAmIGtTdWJwaXhlbFBvc2l0aW9uaW5nX0ZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8vIHJlbWVtYmVyIG91ciBnbHlwaCBvZmZzZXQvYmFzZQogICAgIHZvaWQgc2V0QmFzZUdseXBoQ291bnQodW5zaWduZWQgYmFzZUdseXBoQ291bnQpIHsKICAgICAgICAgZkJhc2VHbHlwaENvdW50ID0gYmFzZUdseXBoQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1NjYW4uY3BwIGIvc3JjL2NvcmUvU2tTY2FuLmNwcAppbmRleCBjZWUzMjhmLi4zMDYyNmY3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1NjYW4uY3BwCisrKyBiL3NyYy9jb3JlL1NrU2Nhbi5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICAgICAgICAgaWYgKGNsaXApIHsKICAgICAgICAgICAgIGlmIChjbGlwLT5pc1JlY3QoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGNsaXBCb3VuZHMgPSBjbGlwLT5nZXRCb3VuZHMoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChjbGlwQm91bmRzLmNvbnRhaW5zKHIpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJsaXRyZWN0KGJsaXR0ZXIsIHIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFNrUmVnaW9uOjpDbGlwZXJhdG9yICAgIGNsaXBlcigqY2xpcCwgcik7CiAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgICAgICAgICAgcnIgPSBjbGlwZXIucmVjdCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgd2hpbGUgKCFjbGlwZXIuZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJsaXRyZWN0KGJsaXR0ZXIsIHJyKTsKICAgICAgICAgICAgICAgICAgICAgY2xpcGVyLm5leHQoKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIHZvaWQgU2tTY2FuOjpGaWxsWFJlY3QoY29uc3QgU2tYUmVjdCYgeHIsIGNvbnN0IFNrUmVnaW9uKiBjbGlwLAogICAgICAgICAgICAgICAgICAgICAgICBTa0JsaXR0ZXIqIGJsaXR0ZXIpIHsKICAgICBTa0lSZWN0IHI7Ci0gICAgCisKICAgICBYUmVjdF9yb3VuZCh4ciwgJnIpOwogICAgIFNrU2Nhbjo6RmlsbElSZWN0KHIsIGNsaXAsIGJsaXR0ZXIpOwogfQpAQCAtNTgsNyArNTgsNyBAQAogdm9pZCBTa1NjYW46OkZpbGxSZWN0KGNvbnN0IFNrUmVjdCYgciwgY29uc3QgU2tSZWdpb24qIGNsaXAsCiAgICAgICAgICAgICAgICAgICAgICAgIFNrQmxpdHRlciogYmxpdHRlcikgewogICAgIFNrSVJlY3QgaXI7Ci0gICAgCisKICAgICByLnJvdW5kKCZpcik7CiAgICAgU2tTY2FuOjpGaWxsSVJlY3QoaXIsIGNsaXAsIGJsaXR0ZXIpOwogfQpAQCAtNzIsNyArNzIsNyBAQAogICAgIGlmIChjbGlwLmlzRW1wdHkoKSB8fCByLmlzRW1wdHkoKSkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYgKGNsaXAuaXNCVygpKSB7CiAgICAgICAgIEZpbGxJUmVjdChyLCAmY2xpcC5id1JnbigpLCBibGl0dGVyKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODcsNyArODcsNyBAQAogICAgIGlmIChjbGlwLmlzRW1wdHkoKSB8fCB4ci5pc0VtcHR5KCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmIChjbGlwLmlzQlcoKSkgewogICAgICAgICBGaWxsWFJlY3QoeHIsICZjbGlwLmJ3UmduKCksIGJsaXR0ZXIpOwogICAgICAgICByZXR1cm47CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICBpZiAoY2xpcC5pc0VtcHR5KCkgfHwgci5pc0VtcHR5KCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmIChjbGlwLmlzQlcoKSkgewogICAgICAgICBGaWxsUmVjdChyLCAmY2xpcC5id1JnbigpLCBibGl0dGVyKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tTY2FuLmggYi9zcmMvY29yZS9Ta1NjYW4uaAppbmRleCA2MWJhMWIwLi41OTg5NDM1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1NjYW4uaAorKysgYi9zcmMvY29yZS9Ta1NjYW4uaApAQCAtODUsNyArODUsNyBAQAogICAgIHN0YXRpYyB2b2lkIEFudGlGaWxsUGF0aChjb25zdCBTa1BhdGgmLCBjb25zdCBTa1JlZ2lvbiYgY2xpcCwgU2tCbGl0dGVyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZVJMRSA9IGZhbHNlKTsKICAgICBzdGF0aWMgdm9pZCBGaWxsVHJpYW5nbGUoY29uc3QgU2tQb2ludCBwdHNbXSwgY29uc3QgU2tSZWdpb24qLCBTa0JsaXR0ZXIqKTsKLSAgICAKKwogICAgIHN0YXRpYyB2b2lkIEFudGlGcmFtZVJlY3QoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQb2ludCYgc3Ryb2tlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUmVnaW9uKiwgU2tCbGl0dGVyKik7CiAgICAgc3RhdGljIHZvaWQgSGFpckxpbmVSZ24oY29uc3QgU2tQb2ludCYsIGNvbnN0IFNrUG9pbnQmLCBjb25zdCBTa1JlZ2lvbiosCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1NjYW5fQW50aVBhdGguY3BwIGIvc3JjL2NvcmUvU2tTY2FuX0FudGlQYXRoLmNwcAppbmRleCAxNTM3NzhlLi5mZGQwYzhlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1NjYW5fQW50aVBhdGguY3BwCisrKyBiL3NyYy9jb3JlL1NrU2Nhbl9BbnRpUGF0aC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgKi8KICAgICBjb25zdCBpbnQgbGVmdCA9IGNsaXAuZ2V0Qm91bmRzKCkuZkxlZnQ7CiAgICAgY29uc3QgaW50IHJpZ2h0ID0gY2xpcC5nZXRCb3VuZHMoKS5mUmlnaHQ7Ci0gICAgCisKICAgICBmTGVmdCA9IGxlZnQ7CiAgICAgZlN1cGVyTGVmdCA9IGxlZnQgPDwgU0hJRlQ7CiAgICAgZldpZHRoID0gcmlnaHQgLSBsZWZ0OwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgICAgIGZPZmZzZXRYID0gMDsKICAgICAgICAgZkN1cnJZID0geTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoaXkgIT0gZkN1cnJJWSkgeyAgLy8gbmV3IHNjYW5saW5lCiAgICAgICAgIHRoaXMtPmZsdXNoKCk7CiAgICAgICAgIGZDdXJySVkgPSBpeTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAgIGZNYXNrLmZCb3VuZHMgICA9IGlyOwogICAgIGZNYXNrLmZSb3dCeXRlcyA9IGlyLndpZHRoKCk7CiAgICAgZk1hc2suZkZvcm1hdCAgID0gU2tNYXNrOjprQThfRm9ybWF0OwotICAgICAgICAgICAgCisKICAgICBmQ2xpcFJlY3QgPSBpcjsKICAgICBmQ2xpcFJlY3QuaW50ZXJzZWN0KGNsaXAuZ2V0Qm91bmRzKCkpOwogCkBAIC03MTQsMTMgKzcxNCwxMyBAQAogICAgIGlmIChjbGlwLmlzRW1wdHkoKSkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYgKGNsaXAuaXNCVygpKSB7CiAgICAgICAgIEZpbGxQYXRoKHBhdGgsIGNsaXAuYndSZ24oKSwgYmxpdHRlcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU2tSZWdpb24gICAgICAgIHRtcDsKICAgICAgICAgU2tBQUNsaXBCbGl0dGVyIGFhQmxpdHRlcjsKLSAgICAgICAgCisKICAgICAgICAgdG1wLnNldFJlY3QoY2xpcC5nZXRCb3VuZHMoKSk7CiAgICAgICAgIGFhQmxpdHRlci5pbml0KGJsaXR0ZXIsICZjbGlwLmFhUmduKCkpOwogICAgICAgICBTa1NjYW46OkZpbGxQYXRoKHBhdGgsIHRtcCwgJmFhQmxpdHRlcik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1NjYW5fQW50aWhhaXIuY3BwIGIvc3JjL2NvcmUvU2tTY2FuX0FudGloYWlyLmNwcAppbmRleCBlYzIzYTJiLi45MjI0NWQ0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1NjYW5fQW50aWhhaXIuY3BwCisrKyBiL3NyYy9jb3JlL1NrU2Nhbl9BbnRpaGFpci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIGlmIChtYSkgewogICAgICAgICBjYWxsX2hsaW5lX2JsaXR0ZXIoYmxpdHRlciwgeCwgeSAtIDEsIGNvdW50LCBtYSk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZ5IC0gU0tfRml4ZWQxLzI7CiB9CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZ5ICs9IGR5OwogICAgIH0gd2hpbGUgKCsreCA8IHN0b3B4KTsKLSAgICAKKwogICAgIHJldHVybiBmeSAtIFNLX0ZpeGVkMS8yOwogfQogCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICBpZiAobWEpIHsKICAgICAgICAgYmxpdHRlci0+YmxpdFYoeCAtIDEsIHksIHN0b3B5IC0geSwgQXBwbHlHYW1tYShnR2FtbWFUYWJsZSwgbWEpKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZnggLSBTS19GaXhlZDEvMjsKIH0KIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAKICAgICBpbnQgICAgICAgICBzY2FsZVN0YXJ0LCBzY2FsZVN0b3A7CiAgICAgaW50ICAgICAgICAgaXN0YXJ0LCBpc3RvcDsKLSAgICBTa0ZpeGVkICAgICBmc3RhcnQsIHNsb3BlOyAKKyAgICBTa0ZpeGVkICAgICBmc3RhcnQsIHNsb3BlOwogICAgIExpbmVQcm9jICAgIHByb2M7CiAKICAgICBpZiAoU2tBYnMzMih4MSAtIHgwKSA+IFNrQWJzMzIoeTEgLSB5MCkpIHsgICAvLyBtb3N0bHkgaG9yaXpvbnRhbApAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgICAgICBmc3RhcnQgKz0gKHNsb3BlICogKDMyIC0gKHgwICYgNjMpKSArIDMyKSA+PiA2OwogICAgICAgICAgICAgcHJvYyA9IGhvcmlzaDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTa0FTU0VSVChpc3RvcCA+IGlzdGFydCk7CiAgICAgICAgIGlmIChpc3RvcCAtIGlzdGFydCA9PSAxKSB7CiAgICAgICAgICAgICBzY2FsZVN0YXJ0ID0geDEgLSB4MDsKQEAgLTM2OCw3ICszNjgsNyBAQAogICAgICAgICAgICAgc2NhbGVTdGFydCA9IDY0IC0gKHkwICYgNjMpOwogICAgICAgICAgICAgc2NhbGVTdG9wID0geTEgJiA2MzsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY2xpcCkgewogICAgICAgICAgICAgaWYgKGlzdGFydCA+PSBjbGlwLT5mQm90dG9tIHx8IGlzdG9wIDw9IGNsaXAtPmZUb3ApIHsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MTQsNyArNDE0LDcgQEAKICAgICAgICAgcmVjdENsaXBwZXIuaW5pdChibGl0dGVyLCAqY2xpcCk7CiAgICAgICAgIGJsaXR0ZXIgPSAmcmVjdENsaXBwZXI7CiAgICAgfQotICAgIAorCiAgICAgZnN0YXJ0ID0gcHJvYyhpc3RhcnQsIGlzdGFydCArIDEsIGZzdGFydCwgc2xvcGUsIGJsaXR0ZXIsIHNjYWxlU3RhcnQpOwogICAgIGlzdGFydCArPSAxOwogICAgIGludCBmdWxsU3BhbnMgPSBpc3RvcCAtIGlzdGFydCAtIChzY2FsZVN0b3AgPiAwKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIFNrRkRvdDYgeDAgPSBTa1NjYWxhclRvRkRvdDYocHRzWzBdLmZYKTsKICAgICBTa0ZEb3Q2IHkwID0gU2tTY2FsYXJUb0ZEb3Q2KHB0c1swXS5mWSk7CiAgICAgU2tGRG90NiB4MSA9IFNrU2NhbGFyVG9GRG90NihwdHNbMV0uZlgpOwpAQCAtNTMzLDE0ICs1MzMsMTQgQEAKIHN0YXRpYyB2b2lkIGRvX3NjYW5saW5lKEZEb3Q4IEwsIGludCB0b3AsIEZEb3Q4IFIsIFU4Q1BVIGFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAgU2tCbGl0dGVyKiBibGl0dGVyKSB7CiAgICAgU2tBU1NFUlQoTCA8IFIpOwotICAgIAorCiAgICAgaWYgKChMID4+IDgpID09ICgoUiAtIDEpID4+IDgpKSB7ICAvLyAxeDEgcGl4ZWwKICAgICAgICAgYmxpdHRlci0+YmxpdFYoTCA+PiA4LCB0b3AsIDEsIFNrQWxwaGFNdWwoYWxwaGEsIFIgLSBMKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpbnQgbGVmdCA9IEwgPj4gODsKLSAgICAKKwogICAgIGlmIChMICYgMHhGRikgewogICAgICAgICBibGl0dGVyLT5ibGl0VihsZWZ0LCB0b3AsIDEsIFNrQWxwaGFNdWwoYWxwaGEsIDI1NiAtIChMICYgMHhGRikpKTsKICAgICAgICAgbGVmdCArPSAxOwpAQCAtNTY3LDEyICs1NjcsMTIgQEAKICAgICAgICAgZG9fc2NhbmxpbmUoTCwgdG9wLCBSLCBCIC0gVCAtIDEsIGJsaXR0ZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYgKFQgJiAweEZGKSB7CiAgICAgICAgIGRvX3NjYW5saW5lKEwsIHRvcCwgUiwgMjU2IC0gKFQgJiAweEZGKSwgYmxpdHRlcik7CiAgICAgICAgIHRvcCArPSAxOwogICAgIH0KLSAgICAKKwogICAgIGludCBib3QgPSBCID4+IDg7CiAgICAgaW50IGhlaWdodCA9IGJvdCAtIHRvcDsKICAgICBpZiAoaGVpZ2h0ID4gMCkgewpAQCAtNTk0LDcgKzU5NCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoQiAmIDB4RkYpIHsKICAgICAgICAgZG9fc2NhbmxpbmUoTCwgYm90LCBSLCBCICYgMHhGRiwgYmxpdHRlcik7CiAgICAgfQpAQCAtNjMyLDEwICs2MzIsMTAgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFNrUmVnaW9uOjpDbGlwZXJhdG9yIGNsaXBwZXIoKmNsaXAsIG91dGVyQm91bmRzKTsKICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmICAgICAgIHJyID0gY2xpcHBlci5yZWN0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgd2hpbGUgKCFjbGlwcGVyLmRvbmUoKSkgewogICAgICAgICAgICAgICAgIFNrWFJlY3QgIHRtcFI7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyB0aGlzIGtlZXBzIG91ciBvcmlnaW5hbCBlZGdlcyBmcmFjdGlvbmFsCiAgICAgICAgICAgICAgICAgWFJlY3Rfc2V0KCZ0bXBSLCBycik7CiAgICAgICAgICAgICAgICAgaWYgKHRtcFIuaW50ZXJzZWN0KHhyKSkgewpAQCAtNjc0LDcgKzY3NCw3IEBACiAqLwogc3RhdGljIHZvaWQgYW50aWZpbGxyZWN0KGNvbnN0IFNrUmVjdCYgciwgU2tCbGl0dGVyKiBibGl0dGVyKSB7CiAgICAgU2tYUmVjdCB4cjsKLSAgICAKKwogICAgIFhSZWN0X3NldCgmeHIsIHIpOwogICAgIGFudGlmaWxscmVjdCh4ciwgYmxpdHRlcik7CiB9CkBAIC02ODIsNyArNjgyLDcgQEAKIC8qICBXZSByZXBlYXQgdGhlIGNsaXBwaW5nIGxvZ2ljIG9mIEFudGlGaWxsWFJlY3QgYmVjYXVzZSB0aGUgZmxvYXQgcmVjdCBtaWdodAogICAgIG92ZXJmbG93IGlmIHdlIGJsaW5kbHkgY29udmVydGVkIGl0IHRvIGFuIFhSZWN0LiBUaGlzIHN1Y2tzIHRoYXQgd2UgaGF2ZSB0bwogICAgIHJlcGVhdCB0aGUgY2xpcHBpbmcgbG9naWMsIGJ1dCBJIGRvbid0IHNlZSBob3cgdG8gc2hhcmUgdGhlIGNvZGUvbG9naWMuCi0gCisKICAgICBXZSBjbGlwIHIgKGFzIG5lZWRlZCkgaW50byBvbmUgb3IgbW9yZSAoc21hbGxlcikgZmxvYXQgcmVjdHMsIGFuZCB0aGVuIHBhc3MKICAgICB0aG9zZSB0byBvdXIgdmVyc2lvbiBvZiBhbnRpZmlsbHJlY3QsIHdoaWNoIGNvbnZlcnRzIGl0IGludG8gYW4gWFJlY3QgYW5kCiAgICAgdGhlbiBjYWxscyB0aGUgYmxpdC4KQEAgLTY5OCw3ICs2OTgsNyBAQAogCiAgICAgICAgIFNrSVJlY3Qgb3V0ZXJCb3VuZHM7CiAgICAgICAgIG5ld1Iucm91bmRPdXQoJm91dGVyQm91bmRzKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGNsaXAtPmlzUmVjdCgpKSB7CiAgICAgICAgICAgICBhbnRpZmlsbHJlY3QobmV3UiwgYmxpdHRlcik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03NjUsMjQgKzc2NSwyNCBAQAogc3RhdGljIHZvaWQgaW5uZXJfc2NhbmxpbmUoRkRvdDggTCwgaW50IHRvcCwgRkRvdDggUiwgVThDUFUgYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JsaXR0ZXIqIGJsaXR0ZXIpIHsKICAgICBTa0FTU0VSVChMIDwgUik7Ci0gICAgCisKICAgICBpZiAoKEwgPj4gOCkgPT0gKChSIC0gMSkgPj4gOCkpIHsgIC8vIDF4MSBwaXhlbAogICAgICAgICBibGl0dGVyLT5ibGl0VihMID4+IDgsIHRvcCwgMSwgSW52QWxwaGFNdWwoYWxwaGEsIFIgLSBMKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpbnQgbGVmdCA9IEwgPj4gODsKICAgICBpZiAoTCAmIDB4RkYpIHsKICAgICAgICAgYmxpdHRlci0+YmxpdFYobGVmdCwgdG9wLCAxLCBJbnZBbHBoYU11bChhbHBoYSwgTCAmIDB4RkYpKTsKICAgICAgICAgbGVmdCArPSAxOwogICAgIH0KLSAgICAKKwogICAgIGludCByaXRlID0gUiA+PiA4OwogICAgIGludCB3aWR0aCA9IHJpdGUgLSBsZWZ0OwogICAgIGlmICh3aWR0aCA+IDApIHsKICAgICAgICAgY2FsbF9obGluZV9ibGl0dGVyKGJsaXR0ZXIsIGxlZnQsIHRvcCwgd2lkdGgsIGFscGhhKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoUiAmIDB4RkYpIHsKICAgICAgICAgYmxpdHRlci0+YmxpdFYocml0ZSwgdG9wLCAxLCBJbnZBbHBoYU11bChhbHBoYSwgflIgJiAweEZGKSk7CiAgICAgfQpAQCAtODAxLDEyICs4MDEsMTIgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYgKFQgJiAweEZGKSB7CiAgICAgICAgIGlubmVyX3NjYW5saW5lKEwsIHRvcCwgUiwgVCAmIDB4RkYsIGJsaXR0ZXIpOwogICAgICAgICB0b3AgKz0gMTsKICAgICB9Ci0gICAgCisKICAgICBpbnQgYm90ID0gQiA+PiA4OwogICAgIGludCBoZWlnaHQgPSBib3QgLSB0b3A7CiAgICAgaWYgKGhlaWdodCA+IDApIHsKQEAgLTgxNyw3ICs4MTcsNyBAQAogICAgICAgICAgICAgYmxpdHRlci0+YmxpdFYoUiA+PiA4LCB0b3AsIGhlaWdodCwgflIgJiAweEZGKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChCICYgMHhGRikgewogICAgICAgICBpbm5lcl9zY2FubGluZShMLCBib3QsIFIsIH5CICYgMHhGRiwgYmxpdHRlcik7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgLy8gbm93IHdlIGNhbiBpZ25vcmUgY2xpcCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uCiAgICAgfQotICAgIAorCiAgICAgLy8gc3Ryb2tlIHRoZSBvdXRlciBodWxsCiAgICAgYW50aWZpbGxkb3Q4KEwsIFQsIFIsIEIsIGJsaXR0ZXIsIGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tTY2FuX0hhaXJsaW5lLmNwcCBiL3NyYy9jb3JlL1NrU2Nhbl9IYWlybGluZS5jcHAKaW5kZXggMmE5NjYwYS4uNjkwOTVjMCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tTY2FuX0hhaXJsaW5lLmNwcAorKysgYi9zcmMvY29yZS9Ta1NjYW5fSGFpcmxpbmUuY3BwCkBAIC03MSw3ICs3MSw3IEBACiAgICAgU2tGRG90NiB5MCA9IFNrU2NhbGFyVG9GRG90NihwdHNbMF0uZlkpOwogICAgIFNrRkRvdDYgeDEgPSBTa1NjYWxhclRvRkRvdDYocHRzWzFdLmZYKTsKICAgICBTa0ZEb3Q2IHkxID0gU2tTY2FsYXJUb0ZEb3Q2KHB0c1sxXS5mWSk7Ci0gIAorCiAgICAgU2tBU1NFUlQoY2FuQ29udmVydEZEb3Q2VG9GaXhlZCh4MCkpOwogICAgIFNrQVNTRVJUKGNhbkNvbnZlcnRGRG90NlRvRml4ZWQoeTApKTsKICAgICBTa0FTU0VSVChjYW5Db252ZXJ0RkRvdDZUb0ZpeGVkKHgxKSk7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAogICAgIGludCB3aWR0aCA9IHIud2lkdGgoKTsKICAgICBpbnQgaGVpZ2h0ID0gci5oZWlnaHQoKTsKLSAgICAKKwogICAgIGlmICgod2lkdGggfCBoZWlnaHQpID09IDApIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAgICByLnNvcnQoKTsKICAgICAgICAgci5yb3VuZE91dCgmaXIpOwogICAgICAgICBpci5pbnNldCgtMSwgLTEpOwotICAgICAgICAKKwogICAgICAgICBTa0FBQ2xpcEJsaXR0ZXJXcmFwcGVyIHdyYXA7CiAgICAgICAgIGlmICghY2xpcC5xdWlja0NvbnRhaW5zKGlyKSkgewogICAgICAgICAgICAgd3JhcC5pbml0KGNsaXAsIGJsaXR0ZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tTY2FuX1BhdGguY3BwIGIvc3JjL2NvcmUvU2tTY2FuX1BhdGguY3BwCmluZGV4IGJmNzQ3YjcuLjY4YWM3ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrU2Nhbl9QYXRoLmNwcAorKysgYi9zcmMvY29yZS9Ta1NjYW5fUGF0aC5jcHAKQEAgLTIyMSw5ICsyMjEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlUG9zdFByb2MgcHJvYykgewogICAgIHN0YXRpYyBpbnQgZ0NhbGxzOwogICAgIGdDYWxscysrOwotICAgIAorCiAgICAgdmFsaWRhdGVfc29ydChwcmV2SGVhZC0+Zk5leHQpOwotICAgIAorCiAgICAgU2tFZGdlKiBsZWZ0RSA9IHByZXZIZWFkLT5mTmV4dDsKICAgICBTa0VkZ2UqIHJpdGVFID0gbGVmdEUtPmZOZXh0OwogICAgIFNrRWRnZSogY3VyckUgPSByaXRlRS0+Zk5leHQ7CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICBpbnQgbG9jYWxfdG9wID0gU2tNYXgzMihsZWZ0RS0+ZkZpcnN0WSwgcml0ZUUtPmZGaXJzdFkpOwogI2VuZGlmCiAgICAgU2tBU1NFUlQobG9jYWxfdG9wID49IHN0YXJ0X3kpOwotICAgIAorCiAgICAgaW50IGdMb29wcyA9IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBnTG9vcHMrKzsKQEAgLTI0OSwxMSArMjQ5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRFLT5mRFggPiByaXRlRS0+ZkRYKSkgewogICAgICAgICAgICAgU2tUU3dhcChsZWZ0RSwgcml0ZUUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGludCBsb2NhbF9ib3QgPSBTa01pbjMyKGxlZnRFLT5mTGFzdFksIHJpdGVFLT5mTGFzdFkpOwogICAgICAgICBsb2NhbF9ib3QgPSBTa01pbjMyKGxvY2FsX2JvdCwgc3RvcF95IC0gMSk7CiAgICAgICAgIFNrQVNTRVJUKGxvY2FsX3RvcCA8PSBsb2NhbF9ib3QpOwotICAgICAgICAKKwogICAgICAgICBTa0ZpeGVkIGxlZnQgPSBsZWZ0RS0+Zlg7CiAgICAgICAgIFNrRml4ZWQgZExlZnQgPSBsZWZ0RS0+ZkRYOwogICAgICAgICBTa0ZpeGVkIHJpdGUgPSByaXRlRS0+Zlg7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgICAgIHJpdGVFID0gY3VyckU7CiAgICAgICAgICAgICBjdXJyRSA9IGN1cnJFLT5mTmV4dDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTa0FTU0VSVChsZWZ0RSk7CiAgICAgICAgIFNrQVNTRVJUKHJpdGVFKTsKIApAQCAtNDAzLDEyICs0MDMsMTIgQEAKIHN0YXRpYyBib29sIG9wZXJhdG9yPChjb25zdCBTa0VkZ2UmIGEsIGNvbnN0IFNrRWRnZSYgYikgewogICAgIGludCB2YWx1ZWEgPSBhLmZGaXJzdFk7CiAgICAgaW50IHZhbHVlYiA9IGIuZkZpcnN0WTsKLSAgICAKKwogICAgIGlmICh2YWx1ZWEgPT0gdmFsdWViKSB7CiAgICAgICAgIHZhbHVlYSA9IGEuZlg7CiAgICAgICAgIHZhbHVlYiA9IGIuZlg7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHZhbHVlYSA8IHZhbHVlYjsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tTaGFkZXIuY3BwIGIvc3JjL2NvcmUvU2tTaGFkZXIuY3BwCmluZGV4IDkyYTVkM2YuLjQwZmU4MzggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrU2hhZGVyLmNwcAorKysgYi9zcmMvY29yZS9Ta1NoYWRlci5jcHAKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgIHJldHVybiBrTm9uZV9HcmFkaWVudFR5cGU7CiB9CiAKLUdyQ3VzdG9tU3RhZ2UqIFNrU2hhZGVyOjphc05ld0N1c3RvbVN0YWdlKEdyQ29udGV4dCogY29udGV4dCwgCitHckN1c3RvbVN0YWdlKiBTa1NoYWRlcjo6YXNOZXdDdXN0b21TdGFnZShHckNvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZSogc2FtcGxlcikgY29uc3QgewogICAgIHJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tTcHJpdGVCbGl0dGVyX1JHQjE2LmNwcCBiL3NyYy9jb3JlL1NrU3ByaXRlQmxpdHRlcl9SR0IxNi5jcHAKaW5kZXggMmMzOGY3MS4uMWE4NDA0ZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tTcHJpdGVCbGl0dGVyX1JHQjE2LmNwcAorKysgYi9zcmMvY29yZS9Ta1Nwcml0ZUJsaXR0ZXJfUkdCMTYuY3BwCkBAIC05OCwxNCArOTgsMTQgQEAKICAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNrU1BSSVRFX0NMQVNTTkFNRSAgICAgICAgICAgICAgICAgIFNwcml0ZV9EMTZfUzQ0NDRfT3BhcXVlCi0jZGVmaW5lIFNrU1BSSVRFX0FSR1MgICAgICAgICAgICAgICAgICAgICAgIAotI2RlZmluZSBTa1NQUklURV9GSUVMRFMgICAgICAgICAgICAgICAgICAgICAKLSNkZWZpbmUgU2tTUFJJVEVfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIFNrU1BSSVRFX0FSR1MKKyNkZWZpbmUgU2tTUFJJVEVfRklFTERTCisjZGVmaW5lIFNrU1BSSVRFX0lOSVQKICNkZWZpbmUgU2tTUFJJVEVfRFNUX1RZUEUgICAgICAgICAgICAgICAgICAgdWludDE2X3QKICNkZWZpbmUgU2tTUFJJVEVfU1JDX1RZUEUgICAgICAgICAgICAgICAgICAgU2tQTUNvbG9yMTYKICNkZWZpbmUgU2tTUFJJVEVfRFNUX0dFVEFERFIgICAgICAgICAgICAgICAgZ2V0QWRkcjE2CiAjZGVmaW5lIFNrU1BSSVRFX1NSQ19HRVRBRERSICAgICAgICAgICAgICAgIGdldEFkZHIxNgotI2RlZmluZSBTa1NQUklURV9QUkVBTUJMRShzcmNCTSwgeCwgeSkgICAgICAKKyNkZWZpbmUgU2tTUFJJVEVfUFJFQU1CTEUoc3JjQk0sIHgsIHkpCiAjZGVmaW5lIFNrU1BSSVRFX0JMSVRfUElYRUwoZHN0LCBzcmMpICAgICAgIEQxNl9TNDQ0NF9PcGFxdWUoZHN0LCBzcmMpCiAjZGVmaW5lIFNrU1BSSVRFX05FWFRfUk9XCiAjZGVmaW5lIFNrU1BSSVRFX1BPU1RBTUJMRShzcmNCTSkKQEAgLTI2MCwxNSArMjYwLDE1IEBACiBwdWJsaWM6CiAgICAgU3ByaXRlX0QxNl9TMzJfQmxpdFJvd1Byb2MoY29uc3QgU2tCaXRtYXAmIHNvdXJjZSkKICAgICAgICAgOiBTa1Nwcml0ZUJsaXR0ZXIoc291cmNlKSB7fQotICAgIAorCiAgICAgLy8gb3ZlcnJpZGVzCi0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgc2V0dXAoY29uc3QgU2tCaXRtYXAmIGRldmljZSwgaW50IGxlZnQsIGludCB0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50KSB7CiAgICAgICAgIHRoaXMtPklOSEVSSVRFRDo6c2V0dXAoZGV2aWNlLCBsZWZ0LCB0b3AsIHBhaW50KTsKLSAgICAgICAgCisKICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSAwOwotICAgICAgICAKKwogICAgICAgICBpZiAocGFpbnQuZ2V0QWxwaGEoKSA8IDB4RkYpIHsKICAgICAgICAgICAgIGZsYWdzIHw9IFNrQmxpdFJvdzo6a0dsb2JhbEFscGhhX0ZsYWc7CiAgICAgICAgIH0KQEAgLTI4MCw3ICsyODAsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZQcm9jID0gU2tCbGl0Um93OjpGYWN0b3J5KGZsYWdzLCBTa0JpdG1hcDo6a1JHQl81NjVfQ29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgYmxpdFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKICAgICAgICAgdWludDE2X3QqIFNLX1JFU1RSSUNUIGRzdCA9IGZEZXZpY2UtPmdldEFkZHIxNih4LCB5KTsKICAgICAgICAgY29uc3QgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBzcmMgPSBmU291cmNlLT5nZXRBZGRyMzIoeCAtIGZMZWZ0LApAQCAtMjg5LDcgKzI4OSw3IEBACiAgICAgICAgIHVuc2lnbmVkIHNyY1JCID0gZlNvdXJjZS0+cm93Qnl0ZXMoKTsKICAgICAgICAgU2tCbGl0Um93OjpQcm9jIHByb2MgPSBmUHJvYzsKICAgICAgICAgVThDUFUgYWxwaGEgPSBmUGFpbnQtPmdldEFscGhhKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHdoaWxlICgtLWhlaWdodCA+PSAwKSB7CiAgICAgICAgICAgICBwcm9jKGRzdCwgc3JjLCB3aWR0aCwgYWxwaGEsIHgsIHkpOwogICAgICAgICAgICAgeSArPSAxOwpAQCAtMjk3LDEwICsyOTcsMTAgQEAKICAgICAgICAgICAgIHNyYyA9IChjb25zdCBTa1BNQ29sb3IqIFNLX1JFU1RSSUNUKSgoY29uc3QgY2hhciopc3JjICsgc3JjUkIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiBwcml2YXRlOgogICAgIFNrQmxpdFJvdzo6UHJvYyBmUHJvYzsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tTcHJpdGVCbGl0dGVyIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrU3RyZWFtLmNwcCBiL3NyYy9jb3JlL1NrU3RyZWFtLmNwcAppbmRleCBmZjIyMDJkLi5mN2IxZmI0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1N0cmVhbS5jcHAKKysrIGIvc3JjL2NvcmUvU2tTdHJlYW0uY3BwCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIFNLX0JZVEVfU0VOVElORUxfRk9SX1UzMiAgICAweEZGCiAKIHNpemVfdCBTa1N0cmVhbTo6cmVhZFBhY2tlZFVJbnQoKSB7Ci0gICAgdWludDhfdCBieXRlOyAgICAKKyAgICB1aW50OF90IGJ5dGU7CiAgICAgaWYgKCF0aGlzLT5yZWFkKCZieXRlLCAxKSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xOTQsNyArMTk0LDcgQEAKIGJvb2wgU2tXU3RyZWFtOjp3cml0ZVN0cmVhbShTa1N0cmVhbSogc3RyZWFtLCBzaXplX3QgbGVuZ3RoKSB7CiAgICAgY2hhciBzY3JhdGNoWzEwMjRdOwogICAgIGNvbnN0IHNpemVfdCBNQVggPSBzaXplb2Yoc2NyYXRjaCk7Ci0gICAgCisKICAgICB3aGlsZSAobGVuZ3RoICE9IDApIHsKICAgICAgICAgc2l6ZV90IG4gPSBsZW5ndGg7CiAgICAgICAgIGlmIChuID4gTUFYKSB7CkBAIC01OTAsMTQgKzU5MCwxNCBAQAogICAgIGNoYXIqICAgc3RhcnQoKSB7IHJldHVybiAoY2hhciopKHRoaXMgKyAxKTsgfQogICAgIHNpemVfdCAgYXZhaWwoKSBjb25zdCB7IHJldHVybiBmU3RvcCAtIGZDdXJyOyB9CiAgICAgc2l6ZV90ICB3cml0dGVuKCkgY29uc3QgeyByZXR1cm4gZkN1cnIgLSB0aGlzLT5zdGFydCgpOyB9Ci0gICAgCisKICAgICB2b2lkIGluaXQoc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBmTmV4dCA9IE5VTEw7CiAgICAgICAgIGZDdXJyID0gdGhpcy0+c3RhcnQoKTsKICAgICAgICAgZlN0b3AgPSB0aGlzLT5zdGFydCgpICsgc2l6ZTsKICAgICB9Ci0gICAgCisKICAgICBjb25zdCB2b2lkKiBhcHBlbmQoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBTa0FTU0VSVCgoc2l6ZV90KShmU3RvcCAtIGZDdXJyKSA+PSBzaXplKTsKQEAgLTYyMCw5ICs2MjAsOSBAQAogdm9pZCBTa0R5bmFtaWNNZW1vcnlXU3RyZWFtOjpyZXNldCgpCiB7CiAgICAgdGhpcy0+aW52YWxpZGF0ZUNvcHkoKTsKLSAgICAKKwogICAgIEJsb2NrKiAgYmxvY2sgPSBmSGVhZDsKLSAgICAKKwogICAgIHdoaWxlIChibG9jayAhPSBOVUxMKSB7CiAgICAgICAgIEJsb2NrKiAgbmV4dCA9IGJsb2NrLT5mTmV4dDsKICAgICAgICAgc2tfZnJlZShibG9jayk7CkBAIC02MzgsMjMgKzYzOCwyMyBAQAogICAgICAgICB0aGlzLT5pbnZhbGlkYXRlQ29weSgpOwogCiAgICAgICAgIGZCeXRlc1dyaXR0ZW4gKz0gY291bnQ7Ci0gICAgICAgIAorCiAgICAgICAgIHNpemVfdCAgc2l6ZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGZUYWlsICE9IE5VTEwgJiYgZlRhaWwtPmF2YWlsKCkgPiAwKSB7CiAgICAgICAgICAgICBzaXplID0gU2tNaW4zMihmVGFpbC0+YXZhaWwoKSwgY291bnQpOwogICAgICAgICAgICAgYnVmZmVyID0gZlRhaWwtPmFwcGVuZChidWZmZXIsIHNpemUpOwogICAgICAgICAgICAgU2tBU1NFUlQoY291bnQgPj0gc2l6ZSk7Ci0gICAgICAgICAgICBjb3VudCAtPSBzaXplOyAgICAgICAgCisgICAgICAgICAgICBjb3VudCAtPSBzaXplOwogICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIHNpemUgPSBTa01heDMyKGNvdW50LCBTa0R5bmFtaWNNZW1vcnlXU3RyZWFtX01pbkJsb2NrU2l6ZSk7CiAgICAgICAgIEJsb2NrKiBibG9jayA9IChCbG9jayopc2tfbWFsbG9jX3Rocm93KHNpemVvZihCbG9jaykgKyBzaXplKTsKICAgICAgICAgYmxvY2stPmluaXQoc2l6ZSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmQoYnVmZmVyLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmVGFpbCAhPSBOVUxMKQogICAgICAgICAgICAgZlRhaWwtPmZOZXh0ID0gYmxvY2s7CiAgICAgICAgIGVsc2UKQEAgLTY3MSw3ICs2NzEsNyBAQAogICAgIH0KIAogICAgIHRoaXMtPmludmFsaWRhdGVDb3B5KCk7Ci0gICAgCisKICAgICBCbG9jayogYmxvY2sgPSBmSGVhZDsKICAgICB3aGlsZSAoYmxvY2sgIT0gTlVMTCkgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IGJsb2NrLT53cml0dGVuKCk7CkBAIC03MTYsNyArNzE2LDcgQEAKICAgICAgICAgbWVtY3B5KGRzdCwgZkNvcHktPmRhdGEoKSwgZkJ5dGVzV3JpdHRlbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQmxvY2sqIGJsb2NrID0gZkhlYWQ7Ci0gICAgICAgIAorCiAgICAgICAgIHdoaWxlIChibG9jayAhPSBOVUxMKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGJsb2NrLT53cml0dGVuKCk7CiAgICAgICAgICAgICBtZW1jcHkoZHN0LCBibG9jay0+c3RhcnQoKSwgc2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1N0cm9rZS5jcHAgYi9zcmMvY29yZS9Ta1N0cm9rZS5jcHAKaW5kZXggMTA3YTY5MS4uMGFiMTAxNiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tTdHJva2UuY3BwCisrKyBiL3NyYy9jb3JlL1NrU3Ryb2tlLmNwcApAQCAtMzE5LDcgKzMxOSw3IEBACiAgICAgICAgIHRoaXMtPmN1YmljX3RvKCZ0bXBbM10sIG5vcm0sIHVuaXQsICZkdW1teSwgJnVuaXREdW1teSwgc3ViRGl2aWRlKTsKICAgICB9IGVsc2UgewogICAgICAgICBTa1ZlY3RvciAgICBub3JtYWxCLCBub3JtYWxDOwotICAgICAgICAKKwogICAgICAgICAvLyBuZWVkIG5vcm1hbHMgdG8gaW5zZXQvb3V0c2V0IHRoZSBvZmYtY3VydmUgcHRzIEIgYW5kIEMKIAogICAgICAgICBpZiAoMCkgeyAgICAvLyB0aGlzIGlzIG5vcm1hbCB0byB0aGUgbGluZSBiZXR3ZWVuIG91ciBhZGphY2VudCBwdHMKQEAgLTU4NSwxMyArNTg1LDEzIEBACiAgICAgICAgICAgICBmU3dhcFdpdGhTcmMgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIH5BdXRvVG1wUGF0aCgpIHsKICAgICAgICAgaWYgKGZTd2FwV2l0aFNyYykgewogICAgICAgICAgICAgZlRtcERzdC5zd2FwKCpjb25zdF9jYXN0PFNrUGF0aCo+KCZmU3JjKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tQYXRoICAgICAgICAgIGZUbXBEc3Q7CiAgICAgY29uc3QgU2tQYXRoJiAgIGZTcmM7CkBAIC02MDgsNyArNjA4LDcgQEAKICAgICBpZiAocmFkaXVzIDw9IDApIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogI2lmZGVmIFNLX1NDQUxBUl9JU19GSVhFRAogICAgIHZvaWQgKCpwcm9jKShTa1BvaW50IHB0c1tdLCBpbnQgY291bnQpID0gaWRlbnRpdHlfcHJvYzsKICAgICBpZiAobmVlZHNfdG9fc2hyaW5rKHNyYykpIHsKQEAgLTY4Niw3ICs2ODYsNyBAQAogICAgICAgICAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoNyk7CiAgICAgICAgICAgICBwYWludC5zZXRTdHJva2VDYXAoU2tQYWludDo6a1JvdW5kX0NhcCk7CiAgICAgICAgICAgICBjYW52YXMtPmRyYXdMaW5lKHB0c1swXS5mWCwgcHRzWzBdLmZZLCBwdHNbMV0uZlgsIHB0c1sxXS5mWSwgcGFpbnQpOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogI2VuZGlmCiAjaWYgMAogICAgICAgICBpZiAoMiA9PSBzcmMuY291bnRQb2ludHMoKSkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tTdHJva2VyUHJpdi5jcHAgYi9zcmMvY29yZS9Ta1N0cm9rZXJQcml2LmNwcAppbmRleCA4NWFhZTAyLi4wYTBhNTgxIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1N0cm9rZXJQcml2LmNwcAorKysgYi9zcmMvY29yZS9Ta1N0cm9rZXJQcml2LmNwcApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgIGN1cnJJc0xpbmUgPSBmYWxzZTsKICAgICAgICAgZ290byBET19CTFVOVDsKICAgICB9Ci0gICAgCisKICAgICBjY3cgPSAhaXNfY2xvY2t3aXNlKGJlZm9yZSwgYWZ0ZXIpOwogICAgIGlmIChjY3cpCiAgICAgewpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgIGJlZm9yZS5uZWdhdGUoKTsKICAgICAgICAgYWZ0ZXIubmVnYXRlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyogIEJlZm9yZSB3ZSBlbnRlciB0aGUgd29ybGQgb2Ygc3F1YXJlLXJvb3RzIGFuZCBkaXZpZGVzLAogICAgICAgICBjaGVjayBpZiB3ZSdyZSB0cnlpbmcgdG8gam9pbiBhbiB1cHJpZ2h0IHJpZ2h0IGFuZ2xlCiAgICAgICAgIChjb21tb24gY2FzZSBmb3Igc3Ryb2tpbmcgcmVjdGFuZ2xlcykuIElmIHNvLCBzcGVjaWFsIGNhc2UKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrVExTLmNwcCBiL3NyYy9jb3JlL1NrVExTLmNwcAppbmRleCAyZDg0ZDZiLi5lNGY2MTg4IDEwMDc1NQotLS0gYS9zcmMvY29yZS9Ta1RMUy5jcHAKKysrIGIvc3JjL2NvcmUvU2tUTFMuY3BwCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIH0gd2hpbGUgKChyZWMgPSByZWMtPmZOZXh0KSAhPSBOVUxMKTsKICAgICAgICAgLy8gbm90IGZvdW5kLCBzbyBjcmVhdGUgYSBuZXcgb25lCiAgICAgfQotICAgIAorCiAgICAgLy8gYWRkIGEgbmV3IGhlYWQgb2Ygb3VyIGNoYW5nZQogICAgIFNrVExTUmVjKiByZWMgPSBuZXcgU2tUTFNSZWM7CiAgICAgcmVjLT5mTmV4dCA9IChTa1RMU1JlYyopcHRyOwpAQCAtODIsNyArODIsNyBAQAogICAgIGlmIChOVUxMID09IGNyZWF0ZVByb2MpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCogcHRyID0gU2tUTFM6OlBsYXRmb3JtR2V0U3BlY2lmaWMoZmFsc2UpOwogCiAgICAgaWYgKHB0cikgewpAQCAtMTAwLDkgKzEwMCw5IEBACiAgICAgaWYgKE5VTEwgPT0gY3JlYXRlUHJvYykgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgdm9pZCogcHRyID0gU2tUTFM6OlBsYXRmb3JtR2V0U3BlY2lmaWMoZmFsc2UpOwotICAgIAorCiAgICAgU2tUTFNSZWMqIGN1cnIgPSAoU2tUTFNSZWMqKXB0cjsKICAgICBTa1RMU1JlYyogcHJldiA9IE5VTEw7CiAgICAgd2hpbGUgKGN1cnIpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrVExTLmggYi9zcmMvY29yZS9Ta1RMUy5oCmluZGV4IDVkMGUxYTYuLmFkNWRhYTcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL1NrVExTLmgKKysrIGIvc3JjL2NvcmUvU2tUTFMuaApAQCAtMSw2ICsxLDYgQEAKIC8vCiAvLyAgU2tUTFMuaAotLy8gIAorLy8KIC8vCiAvLyAgQ3JlYXRlZCBieSBNaWtlIFJlZWQgb24gNC8yMS8xMi4KIC8vICBDb3B5cmlnaHQgKGMpIDIwMTIgX19NeUNvbXBhbnlOYW1lX18uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xOCw3ICsxOCw3IEBACiBwdWJsaWM6CiAgICAgdHlwZWRlZiB2b2lkKiAoKkNyZWF0ZVByb2MpKCk7CiAgICAgdHlwZWRlZiB2b2lkICAoKkRlbGV0ZVByb2MpKHZvaWQqKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBJZiBHZXQoKSBoYXMgcHJldmlvdXNseSBiZWVuIGNhbGxlZCB3aXRoIHRoaXMgQ3JlYXRlUHJvYywgdGhlbiB0aGlzCiAgICAgICogIHJldHVybnMgaXRzIGNhY2hlZCBkYXRhLCBvdGhlcndpc2UgaXQgcmV0dXJucyBOVUxMLiBUaGUgQ3JlYXRlUHJvYyBpcwpAQCAtMjYsNyArMjYsNyBAQAogICAgICAqICBjYWNoZS4KICAgICAgKi8KICAgICBzdGF0aWMgdm9pZCogRmluZChDcmVhdGVQcm9jKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBSZXR1cm4gdGhlIGNhY2hlZCBkYXRhIHRoYXQgd2FzIHJldHVybmVkIGJ5IHRoZSBDcmVhdGVQcm9jLiBUaGlzIHByb2MKICAgICAgKiAgaXMgb25seSBjYWxsZWQgdGhlIGZpcnN0IHRpbWUgR2V0IGlzIGNhbGxlZCwgYW5kIHRoZXJlIGFmdGVyIGl0IGlzCmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1RSZWZBcnJheS5oIGIvc3JjL2NvcmUvU2tUUmVmQXJyYXkuaAppbmRleCA4YzJjN2ZkLi45NjkyYWRiIDEwMDc1NQotLS0gYS9zcmMvY29yZS9Ta1RSZWZBcnJheS5oCisrKyBiL3NyYy9jb3JlL1NrVFJlZkFycmF5LmgKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgLy8gc3BhY2UgZm9yIHVzLCBhbmQgb3VyIFtjb3VudF0gZWxlbWVudHMKICAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoU2tUUmVmQXJyYXk8VD4pICsgY291bnQgKiBzaXplb2YoVCk7CiAgICAgICAgIFNrVFJlZkFycmF5PFQ+KiBvYmogPSAoU2tUUmVmQXJyYXk8VD4qKXNrX21hbGxvY190aHJvdyhzaXplKTsKLSAgICAgICAgCisKICAgICAgICAgU2tORVdfUExBQ0VNRU5UKG9iaiwgU2tUUmVmQXJyYXk8VD4pOwogICAgICAgICBvYmotPmZDb3VudCA9IGNvdW50OwogICAgICAgICByZXR1cm4gb2JqOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBvYmo7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIFJldHVybiBhIG5ldyBhcnJheSB3aXRoICdjb3VudCcgZWxlbWVudHMsIGluaXRpYWxpemVkIGZyb20gdGhlIHByb3ZpZGVkCiAgICAgICogIHNyYyBhcnJheS4gVG8gY2hhbmdlIHRoZW0gdG8gc29tZSBvdGhlciB2YWx1ZSwgdXNlIHdyaXRhYmxlQmVnaW4vRW5kIG9yCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG9iajsKICAgICB9Ci0gICAgCisKICAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBmQ291bnQ7IH0KICAgICBjb25zdCBUKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBUKikodGhpcyArIDEpOyB9CiAgICAgY29uc3QgVCogZW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+YmVnaW4oKSArIGZDb3VudDsgfQpAQCAtODksMTIgKzg5LDEyIEBACiAgICAgdmlydHVhbCB2b2lkIGludGVybmFsX2Rpc3Bvc2UoKSBjb25zdCBTS19PVkVSUklERSB7CiAgICAgICAgIFQqIGFycmF5ID0gY29uc3RfY2FzdDxUKj4odGhpcy0+YmVnaW4oKSk7CiAgICAgICAgIGludCBuID0gZkNvdW50OwotICAgICAgICAKKwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICAgICAgYXJyYXktPn5UKCk7CiAgICAgICAgICAgICBhcnJheSArPSAxOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMtPmludGVybmFsX2Rpc3Bvc2VfcmVzdG9yZV9yZWZjbnRfdG9fMSgpOwogICAgICAgICB0aGlzLT5+U2tUUmVmQXJyYXk8VD4oKTsKICAgICAgICAgc2tfZnJlZSgodm9pZCopdGhpcyk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9Ta1RTZWFyY2guY3BwIGIvc3JjL2NvcmUvU2tUU2VhcmNoLmNwcAppbmRleCBhNDg4MjBkLi44MDFjMGQ2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1RTZWFyY2guY3BwCisrKyBiL3NyYy9jb3JlL1NrVFNlYXJjaC5jcHAKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgbGMgPSAoY2hhciopc2tfbWFsbG9jX3Rocm93KGxlbiArIDEpOwogICAgIH0KICAgICBmTEMgPSBsYzsKLSAgICAKKwogICAgIC8vIGNvbnZlcnQgYW55IGFzaWkgdG8gbG93ZXItY2FzZS4gd2UgbGV0IG5vbi1hc2NpaSAodXRmOCkgY2hhcnMgcGFzcwogICAgIC8vIHRocm91Z2ggdW5jaGFuZ2VkCiAgICAgZm9yIChpbnQgaSA9IChpbnQpKGxlbiAtIDEpOyBpID49IDA7IC0taSkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tVblByZU11bHRpcGx5LmNwcCBiL3NyYy9jb3JlL1NrVW5QcmVNdWx0aXBseS5jcHAKaW5kZXggNWYzMmRhNi4uYWQ4N2Y4YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tVblByZU11bHRpcGx5LmNwcAorKysgYi9zcmMvY29yZS9Ta1VuUHJlTXVsdGlwbHkuY3BwCkBAIC01NiwxOCArNTYsMTggQEAKIHZvaWQgU2tVblByZU11bHRpcGx5X0J1aWxkVGFibGUoKSB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSAyNTU7IGkrKykgewogICAgICAgICB1aW50MzJfdCBzY2FsZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKDAgPT0gaSkgewogICAgICAgICAgICAgc2NhbGUgPSAwOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2NhbGUgPSAoKDI1NSA8PCAyNCkgKyAoaSA+PiAxKSkgLyBpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFNrRGVidWdmKCIgMHglMDhYLCIsIHNjYWxlKTsKICAgICAgICAgaWYgKChpICYgNykgPT0gNykgewogICAgICAgICAgICAgU2tEZWJ1Z2YoIlxuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gdGVzdCB0aGUgcmVzdWx0CiAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IGk7IGorKykgewogICAgICAgICAgICAgdWludDMyX3QgdGVzdCA9IChqICogc2NhbGUgKyAoMSA8PCAyMykpID4+IDI0OwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tVdGlscy5jcHAgYi9zcmMvY29yZS9Ta1V0aWxzLmNwcAppbmRleCAzZjFjNjVlLi5mZTQ5OGNlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1V0aWxzLmNwcAorKysgYi9zcmMvY29yZS9Ta1V0aWxzLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgY29uc3QgdWludDhfdCogIHAgPSAoY29uc3QgdWludDhfdCopKnB0cjsKICAgICBpbnQgICAgICAgICAgICAgYyA9ICpwOwogICAgIGludCAgICAgICAgICAgICBoaWMgPSBjIDw8IDI0OwotICAgIAorCiAgICAgYXNzZXJ0X3V0ZjhfbGVhZGluZ2J5dGUoYyk7CiAKICAgICBpZiAoaGljIDwgMCkgewpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgU2tBU1NFUlQoTlVMTCAhPSBwdHIgJiYgTlVMTCAhPSAqcHRyKTsKIAogICAgIGNvbnN0IGNoYXIqIHAgPSAqcHRyOwotICAgIAorCiAgICAgaWYgKCotLXAgJiAweDgwKSB7CiAgICAgICAgIHdoaWxlICgqLS1wICYgMHg0MCkgewogICAgICAgICAgICAgOwpAQCAtMzE0LDE1ICszMTQsMTUgQEAKIAogU2tVbmljaGFyIFNrVVRGMTZfTmV4dFVuaWNoYXIoY29uc3QgdWludDE2X3QqKiBzcmNQdHIpIHsKICAgICBTa0FTU0VSVChzcmNQdHIgJiYgKnNyY1B0cik7Ci0gICAgCisKICAgICBjb25zdCB1aW50MTZfdCogc3JjID0gKnNyY1B0cjsKICAgICBTa1VuaWNoYXIgICAgICAgYyA9ICpzcmMrKzsKLSAgICAKKwogICAgIFNrQVNTRVJUKCFTa1VURjE2X0lzTG93U3Vycm9nYXRlKGMpKTsKICAgICBpZiAoU2tVVEYxNl9Jc0hpZ2hTdXJyb2dhdGUoYykpIHsKICAgICAgICAgdW5zaWduZWQgYzIgPSAqc3JjKys7CiAgICAgICAgIFNrQVNTRVJUKFNrVVRGMTZfSXNMb3dTdXJyb2dhdGUoYzIpKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gYyA9ICgoYyAmIDB4M0ZGKSA8PCAxMCkgKyAoYzIgJiAweDNGRikgKyAweDEwMDAwCiAgICAgICAgIC8vIGMgPSAoKChjICYgMHgzRkYpICsgNjQpIDw8IDEwKSArIChjMiAmIDB4M0ZGKQogICAgICAgICBjID0gKGMgPDwgMTApICsgYzIgKyAoMHgxMDAwMCAtICgweEQ4MDAgPDwgMTApIC0gMHhEQzAwKTsKQEAgLTMzMywxMCArMzMzLDEwIEBACiAKIFNrVW5pY2hhciBTa1VURjE2X1ByZXZVbmljaGFyKGNvbnN0IHVpbnQxNl90Kiogc3JjUHRyKSB7CiAgICAgU2tBU1NFUlQoc3JjUHRyICYmICpzcmNQdHIpOwotICAgIAorCiAgICAgY29uc3QgdWludDE2X3QqIHNyYyA9ICpzcmNQdHI7CiAgICAgU2tVbmljaGFyICAgICAgIGMgPSAqLS1zcmM7Ci0gICAgCisKICAgICBTa0FTU0VSVCghU2tVVEYxNl9Jc0hpZ2hTdXJyb2dhdGUoYykpOwogICAgIGlmIChTa1VURjE2X0lzTG93U3Vycm9nYXRlKGMpKSB7CiAgICAgICAgIHVuc2lnbmVkIGMyID0gKi0tc3JjOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAgICAgICAgICAgICAvLyBkc3RbMF0gPSBTa1RvVTE2KDB4RDgwMCB8ICgodW5pID4+IDEwKSAtIDY0KSk7CiAgICAgICAgICAgICBkc3RbMF0gPSBTa1RvVTE2KCgweEQ4MDAgLSA2NCkgKyAodW5pID4+IDEwKSk7CiAgICAgICAgICAgICBkc3RbMV0gPSBTa1RvVTE2KDB4REMwMCB8ICh1bmkgJiAweDNGRikpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNrQVNTRVJUKFNrVVRGMTZfSXNIaWdoU3Vycm9nYXRlKGRzdFswXSkpOwogICAgICAgICAgICAgU2tBU1NFUlQoU2tVVEYxNl9Jc0xvd1N1cnJvZ2F0ZShkc3RbMV0pKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTM3OCwxMCArMzc4LDEwIEBACiAgICAgfQogCiAgICAgU2tBU1NFUlQodXRmMTYgIT0gTlVMTCk7Ci0gICAgCisKICAgICBjb25zdCB1aW50MTZfdCogc3RvcCA9IHV0ZjE2ICsgbnVtYmVyT2YxNkJpdFZhbHVlczsKICAgICBzaXplX3QgICAgICAgICAgc2l6ZSA9IDA7Ci0gICAgCisKICAgICBpZiAodXRmOCA9PSBOVUxMKSB7ICAgIC8vIGp1c3QgY291bnQKICAgICAgICAgd2hpbGUgKHV0ZjE2IDwgc3RvcCkgewogICAgICAgICAgICAgc2l6ZSArPSBTa1VURjhfRnJvbVVuaWNoYXIoU2tVVEYxNl9OZXh0VW5pY2hhcigmdXRmMTYpLCBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL1NrVXRpbHNBcm0uY3BwIGIvc3JjL2NvcmUvU2tVdGlsc0FybS5jcHAKaW5kZXggZTQ4NDU3Ni4uMWM0OTMxNiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvU2tVdGlsc0FybS5jcHAKKysrIGIvc3JjL2NvcmUvU2tVdGlsc0FybS5jcHAKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAvKgogICAgIFByb2Nlc3NvciAgICAgICA6IEFSTXY3IFByb2Nlc3NvciByZXYgMiAodjdsKQogICAgIEJvZ29NSVBTICAgICAgICA6IDk5NC42NQotICAgIEZlYXR1cmVzICAgICAgICA6IHN3cCBoYWxmIHRodW1iIGZhc3RtdWx0IHZmcCBlZHNwIHRodW1iZWUgbmVvbiB2ZnB2MyAKKyAgICBGZWF0dXJlcyAgICAgICAgOiBzd3AgaGFsZiB0aHVtYiBmYXN0bXVsdCB2ZnAgZWRzcCB0aHVtYmVlIG5lb24gdmZwdjMKICAgICBDUFUgaW1wbGVtZW50ZXIgOiAweDQxCiAgICAgQ1BVIGFyY2hpdGVjdHVyZTogNwogICAgIENQVSB2YXJpYW50ICAgICA6IDB4MgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvU2tXcml0ZXIzMi5jcHAgYi9zcmMvY29yZS9Ta1dyaXRlcjMyLmNwcAppbmRleCA5MjZhNDMwLi42MzZhZjM2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9Ta1dyaXRlcjMyLmNwcAorKysgYi9zcmMvY29yZS9Ta1dyaXRlcjMyLmNwcApAQCAtMTEsMTEgKzExLDExIEBACiAgICAgQmxvY2sqICBmTmV4dDsKICAgICBzaXplX3QgIGZTaXplOyAgICAgIC8vIHRvdGFsIHNwYWNlIGFsbG9jYXRlZCAoYWZ0ZXIgdGhpcykKICAgICBzaXplX3QgIGZBbGxvY2F0ZWQ7IC8vIHNwYWNlIHVzZWQgc28gZmFyCi0gICAgCisKICAgICBzaXplX3QgIGF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZTaXplIC0gZkFsbG9jYXRlZDsgfQogICAgIGNoYXIqICAgYmFzZSgpIHsgcmV0dXJuIChjaGFyKikodGhpcyArIDEpOyB9CiAgICAgY29uc3QgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBjaGFyKikodGhpcyArIDEpOyB9Ci0gICAgCisKICAgICB1aW50MzJfdCogYWxsb2Moc2l6ZV90IHNpemUpIHsKICAgICAgICAgU2tBU1NFUlQoU2tBbGlnbjQoc2l6ZSkgPT0gc2l6ZSk7CiAgICAgICAgIFNrQVNTRVJUKHRoaXMtPmF2YWlsYWJsZSgpID49IHNpemUpOwpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICBTa0FTU0VSVChmQWxsb2NhdGVkIDw9IGZTaXplKTsKICAgICAgICAgcmV0dXJuICh1aW50MzJfdCopcHRyOwogICAgIH0KLSAgICAKKwogICAgIHVpbnQzMl90KiBwZWVrMzIoc2l6ZV90IG9mZnNldCkgewogICAgICAgICBTa0FTU0VSVChvZmZzZXQgPD0gZkFsbG9jYXRlZCArIDQpOwogICAgICAgICB2b2lkKiBwdHIgPSB0aGlzLT5iYXNlKCkgKyBvZmZzZXQ7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIGJsb2NrLT5mQWxsb2NhdGVkID0gMDsKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBCbG9jayogQ3JlYXRlRnJvbVN0b3JhZ2Uodm9pZCogc3RvcmFnZSwgc2l6ZV90IHNpemUpIHsKICAgICAgICAgU2tBU1NFUlQoU2tJc0FsaWduNCgoaW50cHRyX3Qpc3RvcmFnZSkpOwogICAgICAgICBCbG9jayogYmxvY2sgPSAoQmxvY2sqKXN0b3JhZ2U7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIGJsb2NrLT5mQWxsb2NhdGVkID0gMDsKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KLSAgICAKKwogfTsKIAogI2RlZmluZSBNSU5fQkxPQ0tTSVpFICAgKHNpemVvZihTa1dyaXRlcjMyOjpCbG9jaykgKyBzaXplb2YoaW50cHRyX3QpKQpAQCAtODMsNyArODMsNyBAQAogCiB2b2lkIFNrV3JpdGVyMzI6OnJlc2V0KCkgewogICAgIEJsb2NrKiBibG9jayA9IGZIZWFkOwotICAgIAorCiAgICAgaWYgKGZIZWFkSXNFeHRlcm5hbFN0b3JhZ2UpIHsKICAgICAgICAgU2tBU1NFUlQoYmxvY2spOwogICAgICAgICAvLyBkb24ndCAnZnJlZScgdGhlIGZpcnN0IGJsb2NrLCBzaW5jZSBpdCBpcyBvd25lZCBieSB0aGUgY2FsbGVyCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgYmxvY2stPmZOZXh0ID0gZlRhaWw7CiAgICAgICAgIGJsb2NrID0gZlRhaWw7CiAgICAgfQotICAgIAorCiAgICAgZlNpemUgKz0gc2l6ZTsKIAogICAgIHJldHVybiBibG9jay0+YWxsb2Moc2l6ZSk7CkBAIC0xNDksNyArMTQ5LDcgQEAKIAogICAgIEJsb2NrKiBibG9jayA9IGZIZWFkOwogICAgIFNrQVNTRVJUKE5VTEwgIT0gYmxvY2spOwotICAgIAorCiAgICAgd2hpbGUgKG9mZnNldCA+PSBibG9jay0+ZkFsbG9jYXRlZCkgewogICAgICAgICBvZmZzZXQgLT0gYmxvY2stPmZBbGxvY2F0ZWQ7CiAgICAgICAgIGJsb2NrID0gYmxvY2stPmZOZXh0OwpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgY2hhciBzY3JhdGNoWzEwMjRdOwogICAgIGNvbnN0IHNpemVfdCBNQVggPSBzaXplb2Yoc2NyYXRjaCk7CiAgICAgc2l6ZV90IHJlbWFpbmluZyA9IGxlbmd0aDsKLSAgICAKKwogICAgIHdoaWxlIChyZW1haW5pbmcgIT0gMCkgewogICAgICAgICBzaXplX3QgbiA9IHJlbWFpbmluZzsKICAgICAgICAgaWYgKG4gPiBNQVgpIHsKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICAgICByZXR1cm4gc3RyZWFtLT53cml0ZShmU2luZ2xlQmxvY2ssIGZTaXplKTsKICAgICB9CiAKLSAgICBjb25zdCBCbG9jayogYmxvY2sgPSBmSGVhZDsgICAgCisgICAgY29uc3QgQmxvY2sqIGJsb2NrID0gZkhlYWQ7CiAgICAgd2hpbGUgKGJsb2NrKSB7CiAgICAgICAgIGlmICghc3RyZWFtLT53cml0ZShibG9jay0+YmFzZSgpLCBibG9jay0+ZkFsbG9jYXRlZCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmNwcCBiL3NyYy9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmNwcAppbmRleCBhMTc2Y2Y4Li42NTM2ODI2IDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9TazFEUGF0aEVmZmVjdC5jcHAKKysrIGIvc3JjL2VmZmVjdHMvU2sxRFBhdGhFZmZlY3QuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotU2tQYXRoMURQYXRoRWZmZWN0OjpTa1BhdGgxRFBhdGhFZmZlY3QoY29uc3QgU2tQYXRoJiBwYXRoLCBTa1NjYWxhciBhZHZhbmNlLCAKK1NrUGF0aDFEUGF0aEVmZmVjdDo6U2tQYXRoMURQYXRoRWZmZWN0KGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tTY2FsYXIgYWR2YW5jZSwKICAgICBTa1NjYWxhciBwaGFzZSwgU3R5bGUgc3R5bGUpIDogZlBhdGgocGF0aCkKIHsKICAgICBpZiAoYWR2YW5jZSA8PSAwIHx8IHBhdGguaXNFbXB0eSgpKSB7CkBAIC01OSw3ICs1OSw3IEBACiAKICAgICAgICAgZkFkdmFuY2UgPSBhZHZhbmNlOwogICAgICAgICBmSW5pdGlhbE9mZnNldCA9IHBoYXNlOwotICAgICAgICAKKwogICAgICAgICBpZiAoKHVuc2lnbmVkKXN0eWxlID49IGtTdHlsZUNvdW50KSB7CiAgICAgICAgICAgICBTa0RFQlVHRigoIlNrUGF0aDFEUGF0aEVmZmVjdCBzdHlsZSBlbnVtIG91dCBvZiByYW5nZSAlZFxuIiwgc3R5bGUpKTsKICAgICAgICAgfQpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIFNrUG9pbnQgcG9zOwogICAgICAgICBTa1ZlY3RvciB0YW5nZW50OwotICAgICAgICAKKwogICAgICAgICBTa1NjYWxhciBzeCA9IHNyY1tpXS5mWDsKICAgICAgICAgU2tTY2FsYXIgc3kgPSBzcmNbaV0uZlk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghbWVhcy5nZXRQb3NUYW4oZGlzdCArIHN4LCAmcG9zLCAmdGFuZ2VudCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTa01hdHJpeCAgICBtYXRyaXg7CiAgICAgICAgIFNrUG9pbnQgICAgIHB0OwotICAgICAgICAKKwogICAgICAgICBwdC5zZXQoc3gsIHN5KTsKICAgICAgICAgbWF0cml4LnNldFNpbkNvcyh0YW5nZW50LmZZLCB0YW5nZW50LmZYLCAwLCAwKTsKICAgICAgICAgbWF0cml4LnByZVRyYW5zbGF0ZSgtc3gsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvU2tCbHVyRHJhd0xvb3Blci5jcHAgYi9zcmMvZWZmZWN0cy9Ta0JsdXJEcmF3TG9vcGVyLmNwcAppbmRleCA5ZWMyYWZmLi44YmEyY2ZjIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9Ta0JsdXJEcmF3TG9vcGVyLmNwcAorKysgYi9zcmMvZWZmZWN0cy9Ta0JsdXJEcmF3TG9vcGVyLmNwcApAQCAtMjQsMTEgKzI0LDExIEBACiAgICAgICAgICAgICBTa0JsdXJNYXNrRmlsdGVyOjprTm9uZV9CbHVyRmxhZzsKIAogICAgICAgICBibHVyRmxhZ3MgfD0gZmxhZ3MgJiBrSGlnaFF1YWxpdHlfQmx1ckZsYWcgPwotICAgICAgICAgICAgU2tCbHVyTWFza0ZpbHRlcjo6a0hpZ2hRdWFsaXR5X0JsdXJGbGFnIDogCisgICAgICAgICAgICBTa0JsdXJNYXNrRmlsdGVyOjprSGlnaFF1YWxpdHlfQmx1ckZsYWcgOgogICAgICAgICAgICAgU2tCbHVyTWFza0ZpbHRlcjo6a05vbmVfQmx1ckZsYWc7CiAKICAgICAgICAgZkJsdXIgPSBTa0JsdXJNYXNrRmlsdGVyOjpDcmVhdGUocmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JsdXJNYXNrRmlsdGVyOjprTm9ybWFsX0JsdXJTdHlsZSwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JsdXJNYXNrRmlsdGVyOjprTm9ybWFsX0JsdXJTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ckZsYWdzKTsKICAgICB9IGVsc2UgewogICAgICAgICBmQmx1ciA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta0JsdXJNYXNrLmNwcCBiL3NyYy9lZmZlY3RzL1NrQmx1ck1hc2suY3BwCmluZGV4IDk1YTFlNmIuLmY1NDVkOGMgMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL1NrQmx1ck1hc2suY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrQmx1ck1hc2suY3BwCkBAIC0yNCwxMCArMjQsMTAgQEAKICAgICBzcmMgdmFsdWVzIGF0IHRoZWlyIHBvc2l0aW9uLCBwbHVzIGFsbCB2YWx1ZXMgYWJvdmUgYW5kIHRvIHRoZSBsZWZ0LgogICAgIFdoZW4gd2Ugc2FtcGxlIGludG8gdGhpcyBidWZmZXIsIHdlIG5lZWQgYW4gaW5pdGlhbCByb3cgYW5kIGNvbHVtbiBvZiAwcywKICAgICBzbyB3ZSBoYXZlIGFuIGluZGV4IGNvcnJlc3BvbmRlbmNlIGFzIGZvbGxvd3M6Ci0gCisKICAgICBzcmNbaSwgal0gPT0gc3VtW2krMSwgaisxXQogICAgIHN1bVswLCBqXSA9PSBzdW1baSwgMF0gPT0gMAotIAorCiAgICAgV2UgYXNzdW1lIHRoYXQgdGhlIHN1bSBidWZmZXIncyBzdHJpZGUgPT0gaXRzIHdpZHRoCiAgKi8KIHN0YXRpYyB2b2lkIGJ1aWxkX3N1bV9idWZmZXIodWludDMyX3Qgc3VtW10sIGludCBzcmNXLCBpbnQgc3JjSCwKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL1NrQmx1ck1hc2tGaWx0ZXIuY3BwIGIvc3JjL2VmZmVjdHMvU2tCbHVyTWFza0ZpbHRlci5jcHAKaW5kZXggY2M1ZjY3OS4uNGFmM2JmYyAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvU2tCbHVyTWFza0ZpbHRlci5jcHAKKysrIGIvc3JjL2VmZmVjdHMvU2tCbHVyTWFza0ZpbHRlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogICAgIFNrQmx1ck1hc2tGaWx0ZXJJbXBsKFNrRmxhdHRlbmFibGVSZWFkQnVmZmVyJik7CiAgICAgdmlydHVhbCB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJikgY29uc3QgU0tfT1ZFUlJJREU7Ci0gICAgCisKICAgICB0eXBlZGVmIFNrTWFza0ZpbHRlciBJTkhFUklURUQ7CiB9OwogCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JsdXJNYXNrRmlsdGVyOjpCbHVyU3R5bGUgc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmbGFncykgewogICAgIC8vIHVzZSAhKHJhZGl1cyA+IDApIGluc3RlYWQgb2YgcmFkaXVzIDw9IDAgdG8gcmVqZWN0IE5hTiB2YWx1ZXMKLSAgICBpZiAoIShyYWRpdXMgPiAwKSB8fCAodW5zaWduZWQpc3R5bGUgPj0gU2tCbHVyTWFza0ZpbHRlcjo6a0JsdXJTdHlsZUNvdW50IAorICAgIGlmICghKHJhZGl1cyA+IDApIHx8ICh1bnNpZ25lZClzdHlsZSA+PSBTa0JsdXJNYXNrRmlsdGVyOjprQmx1clN0eWxlQ291bnQKICAgICAgICAgfHwgZmxhZ3MgPiBTa0JsdXJNYXNrRmlsdGVyOjprQWxsX0JsdXJGbGFnKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTg5LDcgKzg5LDcgQEAKICAgICBzdGF0aWMgY29uc3QgU2tTY2FsYXIgTUFYX1JBRElVUyA9IFNrSW50VG9TY2FsYXIoMTI4KTsKICAgICByYWRpdXMgPSBTa01pblNjYWxhcihyYWRpdXMsIE1BWF9SQURJVVMpOwogICAgIFNrQmx1ck1hc2s6OlF1YWxpdHkgYmx1clF1YWxpdHkgPQotICAgICAgICAoZkJsdXJGbGFncyAmIFNrQmx1ck1hc2tGaWx0ZXI6OmtIaWdoUXVhbGl0eV9CbHVyRmxhZykgPyAKKyAgICAgICAgKGZCbHVyRmxhZ3MgJiBTa0JsdXJNYXNrRmlsdGVyOjprSGlnaFF1YWxpdHlfQmx1ckZsYWcpID8KICAgICAgICAgICAgIFNrQmx1ck1hc2s6OmtIaWdoX1F1YWxpdHkgOiBTa0JsdXJNYXNrOjprTG93X1F1YWxpdHk7CiAKICAgICByZXR1cm4gU2tCbHVyTWFzazo6Qmx1cihkc3QsIHNyYywgcmFkaXVzLCAoU2tCbHVyTWFzazo6U3R5bGUpZkJsdXJTdHlsZSwKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL1NrQ29sb3JGaWx0ZXJJbWFnZUZpbHRlci5jcHAgYi9zcmMvZWZmZWN0cy9Ta0NvbG9yRmlsdGVySW1hZ2VGaWx0ZXIuY3BwCmluZGV4IDQ3NGE0ZTYuLjAzZTJiZTQgMTAwNzU1Ci0tLSBhL3NyYy9lZmZlY3RzL1NrQ29sb3JGaWx0ZXJJbWFnZUZpbHRlci5jcHAKKysrIGIvc3JjL2VmZmVjdHMvU2tDb2xvckZpbHRlckltYWdlRmlsdGVyLmNwcApAQCAtMjIsNyArMjIsNyBAQAogCiB2b2lkIFNrQ29sb3JGaWx0ZXJJbWFnZUZpbHRlcjo6ZmxhdHRlbihTa0ZsYXR0ZW5hYmxlV3JpdGVCdWZmZXImIGJ1ZmZlcikgY29uc3QgewogICAgIHRoaXMtPklOSEVSSVRFRDo6ZmxhdHRlbihidWZmZXIpOwotICAgIAorCiAgICAgYnVmZmVyLndyaXRlRmxhdHRlbmFibGUoZkNvbG9yRmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvU2tDb2xvckZpbHRlcnMuY3BwIGIvc3JjL2VmZmVjdHMvU2tDb2xvckZpbHRlcnMuY3BwCmluZGV4IDI4NjJmOGIuLmFhZTc4NjggMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL1NrQ29sb3JGaWx0ZXJzLmNwcAorKysgYi9zcmMvZWZmZWN0cy9Ta0NvbG9yRmlsdGVycy5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBTa1hmZXJtb2RlOjpNb2RlIGdldE1vZGUoKSBjb25zdCB7IHJldHVybiBmTW9kZTsgfQogICAgIGJvb2wgaXNNb2RlVmFsaWQoKSBjb25zdCB7IHJldHVybiBJTExFR0FMX1hGRVJNT0RFX01PREUgIT0gZk1vZGU7IH0KICAgICBTa1BNQ29sb3IgZ2V0UE1Db2xvcigpIGNvbnN0IHsgcmV0dXJuIGZQTUNvbG9yOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgYXNDb2xvck1vZGUoU2tDb2xvciogY29sb3IsIFNrWGZlcm1vZGU6Ok1vZGUqIG1vZGUpIFNLX09WRVJSSURFIHsKICAgICAgICAgaWYgKElMTEVHQUxfWEZFUk1PREVfTU9ERSA9PSBmTW9kZSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTIsMjkgKzUyLDI5IEBACiAgICAgdmlydHVhbCB1aW50MzJfdCBnZXRGbGFncygpIFNLX09WRVJSSURFIHsKICAgICAgICAgcmV0dXJuIGZQcm9jMTYgPyAoa0FscGhhVW5jaGFuZ2VkX0ZsYWcgfCBrSGFzRmlsdGVyMTZfRmxhZykgOiAwOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBmaWx0ZXJTcGFuKGNvbnN0IFNrUE1Db2xvciBzaGFkZXJbXSwgaW50IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUE1Db2xvciByZXN1bHRbXSkgU0tfT1ZFUlJJREUgewogICAgICAgICBTa1BNQ29sb3IgICAgICAgY29sb3IgPSBmUE1Db2xvcjsKICAgICAgICAgU2tYZmVybW9kZVByb2MgIHByb2MgPSBmUHJvYzsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICByZXN1bHRbaV0gPSBwcm9jKGNvbG9yLCBzaGFkZXJbaV0pOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGZpbHRlclNwYW4xNihjb25zdCB1aW50MTZfdCBzaGFkZXJbXSwgaW50IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgcmVzdWx0W10pIFNLX09WRVJSSURFIHsKICAgICAgICAgU2tBU1NFUlQodGhpcy0+Z2V0RmxhZ3MoKSAmIGtIYXNGaWx0ZXIxNl9GbGFnKTsKLSAgICAgICAgCisKICAgICAgICAgU2tQTUNvbG9yICAgICAgICBjb2xvciA9IGZQTUNvbG9yOwogICAgICAgICBTa1hmZXJtb2RlUHJvYzE2IHByb2MxNiA9IGZQcm9jMTY7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgICAgcmVzdWx0W2ldID0gcHJvYzE2KGNvbG9yLCBzaGFkZXJbaV0pOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgU0tfREVDTEFSRV9QVUJMSUNfRkxBVFRFTkFCTEVfREVTRVJJQUxJWkFUSU9OX1BST0NTKFNrTW9kZUNvbG9yRmlsdGVyKQogCiBwcm90ZWN0ZWQ6CkBAIC05NywxMyArOTcsMTMgQEAKICAgICBTa1BNQ29sb3IgICAgICAgICAgIGZQTUNvbG9yOwogICAgIFNrWGZlcm1vZGVQcm9jICAgICAgZlByb2M7CiAgICAgU2tYZmVybW9kZVByb2MxNiAgICBmUHJvYzE2OwotICAgIAorCiAgICAgdm9pZCB1cGRhdGVDYWNoZSgpIHsKICAgICAgICAgZlBNQ29sb3IgPSBTa1ByZU11bHRpcGx5Q29sb3IoZkNvbG9yKTsKICAgICAgICAgZlByb2MgPSBTa1hmZXJtb2RlOjpHZXRQcm9jKGZNb2RlKTsKICAgICAgICAgZlByb2MxNiA9IFNrWGZlcm1vZGU6OkdldFByb2MxNihmTW9kZSwgZkNvbG9yKTsKICAgICB9Ci0gICAgCisKICAgICB0eXBlZGVmIFNrQ29sb3JGaWx0ZXIgSU5IRVJJVEVEOwogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvU2tDb2xvck1hdHJpeC5jcHAgYi9zcmMvZWZmZWN0cy9Ta0NvbG9yTWF0cml4LmNwcAppbmRleCA1ZjZjZmQ0Li45OGUyODY1IDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9Ta0NvbG9yTWF0cml4LmNwcAorKysgYi9zcmMvZWZmZWN0cy9Ta0NvbG9yTWF0cml4LmNwcApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAwLCAxLCAgNSwgIDYsCiAgICAgfTsKICAgICBjb25zdCB1aW50OF90KiBpbmRleCA9IGdSb3RhdGVJbmRleCArIGF4aXMgKiA0OwotICAgIAorCiAgICAgdGhpcy0+c2V0SWRlbnRpdHkoKTsKICAgICBmTWF0W2luZGV4WzBdXSA9IGNvc2luZTsKICAgICBmTWF0W2luZGV4WzFdXSA9IHNpbmU7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICBpZiAoJm1hdEEgPT0gdGhpcyB8fCAmbWF0QiA9PSB0aGlzKSB7CiAgICAgICAgIHJlc3VsdCA9IHRtcDsKICAgICB9Ci0gICAgCisKICAgICBjb25zdCBTa1NjYWxhciogYSA9IG1hdEEuZk1hdDsKICAgICBjb25zdCBTa1NjYWxhciogYiA9IG1hdEIuZk1hdDsKIAogICAgIGludCBpbmRleCA9IDA7CiAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAyMDsgaiArPSA1KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1bHRbaW5kZXgrK10gPSAgIFNrU2NhbGFyTXVsKGFbaiArIDBdLCBiW2kgKyAwXSkgKyAKKyAgICAgICAgICAgIHJlc3VsdFtpbmRleCsrXSA9ICAgU2tTY2FsYXJNdWwoYVtqICsgMF0sIGJbaSArIDBdKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyTXVsKGFbaiArIDFdLCBiW2kgKyA1XSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhck11bChhW2ogKyAyXSwgYltpICsgMTBdKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyTXVsKGFbaiArIDNdLCBiW2kgKyAxNV0pOwpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyTXVsKGFbaiArIDNdLCBiWzE5XSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbaiArIDRdOwogICAgIH0KLSAgICAKKwogICAgIGlmIChmTWF0ICE9IHJlc3VsdCkgewogICAgICAgICBtZW1jcHkoZk1hdCwgcmVzdWx0LCBzaXplb2YoZk1hdCkpOwogICAgIH0KQEAgLTEzOSw3ICsxMzksNyBAQAogCiB2b2lkIFNrQ29sb3JNYXRyaXg6OnNldFJHQjJZVVYoKSB7CiAgICAgbWVtc2V0KGZNYXQsIDAsIHNpemVvZihmTWF0KSk7Ci0gICAgCisKICAgICBzZXRyb3coZk1hdCArICAwLCBrUjJZLCBrRzJZLCBrQjJZKTsKICAgICBzZXRyb3coZk1hdCArICA1LCBrUjJVLCBrRzJVLCBrQjJVKTsKICAgICBzZXRyb3coZk1hdCArIDEwLCBrUjJWLCBrRzJWLCBrQjJWKTsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiB2b2lkIFNrQ29sb3JNYXRyaXg6OnNldFlVVjJSR0IoKSB7CiAgICAgbWVtc2V0KGZNYXQsIDAsIHNpemVvZihmTWF0KSk7Ci0gICAgCisKICAgICBzZXRyb3coZk1hdCArICAwLCBTS19TY2FsYXIxLCAwLCBrVjJSKTsKICAgICBzZXRyb3coZk1hdCArICA1LCBTS19TY2FsYXIxLCBrVTJHLCBrVjJHKTsKICAgICBzZXRyb3coZk1hdCArIDEwLCBTS19TY2FsYXIxLCBrVTJCLCAwKTsKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL1NrQ29ybmVyUGF0aEVmZmVjdC5jcHAgYi9zcmMvZWZmZWN0cy9Ta0Nvcm5lclBhdGhFZmZlY3QuY3BwCmluZGV4IDhjNzM4M2MuLmJjNTE2NWEgMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL1NrQ29ybmVyUGF0aEVmZmVjdC5jcHAKKysrIGIvc3JjL2VmZmVjdHMvU2tDb3JuZXJQYXRoRWZmZWN0LmNwcApAQCAtMjUsNyArMjUsNyBAQAogICAgIFNrU2NhbGFyIGRpc3QgPSBTa1BvaW50OjpEaXN0YW5jZShhLCBiKTsKIAogICAgIHN0ZXAtPnNldChiLmZYIC0gYS5mWCwgYi5mWSAtIGEuZlkpOwotICAgIAorCiAgICAgaWYgKGRpc3QgPD0gcmFkaXVzICogMikgewogICAgICAgICBzdGVwLT5zY2FsZShTS19TY2FsYXJIYWxmKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvU2tEYXNoUGF0aEVmZmVjdC5jcHAgYi9zcmMvZWZmZWN0cy9Ta0Rhc2hQYXRoRWZmZWN0LmNwcAppbmRleCAxNjVhZDk1Li4zMjk5YzYzIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9Ta0Rhc2hQYXRoRWZmZWN0LmNwcAorKysgYi9zcmMvZWZmZWN0cy9Ta0Rhc2hQYXRoRWZmZWN0LmNwcApAQCAtOTYsMTIgKzk2LDEyIEBACiAgICAgICAgIGlmIChyZWMtPmlzSGFpcmxpbmVTdHlsZSgpIHx8ICFzcmMuaXNMaW5lKGZQdHMpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gY2FuIHJlbGF4IHRoaXMgaW4gdGhlIGZ1dHVyZSwgaWYgd2UgaGFuZGxlIHNxdWFyZSBhbmQgcm91bmQgY2FwcwogICAgICAgICBpZiAoU2tQYWludDo6a0J1dHRfQ2FwICE9IHJlYy0+Z2V0Q2FwKCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmVGFuZ2VudCA9IGZQdHNbMV0gLSBmUHRzWzBdOwogICAgICAgICBpZiAoZlRhbmdlbnQuaXNaZXJvKCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNSwxMyArMTE1LDEzIEBACiAgICAgICAgIC8vIG5vdyBlc3RpbWF0ZSBob3cgbWFueSBxdWFkcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXRoCiAgICAgICAgIC8vICAgICByZXN1bHRpbmcgc2VnbWVudHMgPSBwYXRoTGVuICogaW50ZXJ2YWxDb3VudCAvIGludGVydmFsTGVuCiAgICAgICAgIC8vICAgICByZXN1bHRpbmcgcG9pbnRzID0gNCAqIHNlZ21lbnRzCi0gICAgCisKICAgICAgICAgU2tTY2FsYXIgcHRDb3VudCA9IFNrU2NhbGFyTXVsRGl2KHBhdGhMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKGludGVydmFsQ291bnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxMZW5ndGgpOwogICAgICAgICBpbnQgbiA9IFNrU2NhbGFyQ2VpbFRvSW50KHB0Q291bnQpIDw8IDI7CiAgICAgICAgIGRzdC0+aW5jUmVzZXJ2ZShuKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gd2Ugd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHN0cm9raW5nCiAgICAgICAgIHJlYy0+c2V0RmlsbFN0eWxlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgICAgIFNrU2NhbGFyICAgIGxlbmd0aCA9IG1lYXMuZ2V0TGVuZ3RoKCk7CiAgICAgICAgIGludCAgICAgICAgIGluZGV4ID0gZkluaXRpYWxEYXNoSW5kZXg7CiAgICAgICAgIFNrU2NhbGFyICAgIHNjYWxlID0gU0tfU2NhbGFyMTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGZTY2FsZVRvRml0KSB7CiAgICAgICAgICAgICBpZiAoZkludGVydmFsTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAgICAgICAgICAgIHNjYWxlID0gU2tTY2FsYXJEaXYobGVuZ3RoLCBmSW50ZXJ2YWxMZW5ndGgpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgICAgICBhZGRlZFNlZ21lbnQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChpc19ldmVuKGluZGV4KSAmJiBkbGVuID4gMCAmJiAhc2tpcEZpcnN0U2VnbWVudCkgewogICAgICAgICAgICAgICAgIGFkZGVkU2VnbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbExpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgbGluZVJlYy5hZGRTZWdtZW50KGRpc3RhbmNlLCBkaXN0YW5jZSArIGRsZW4sIGRzdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI1MSw3ICsyNTEsNyBAQAogICAgIGZJbml0aWFsRGFzaExlbmd0aCA9IGJ1ZmZlci5yZWFkU2NhbGFyKCk7CiAgICAgZkludGVydmFsTGVuZ3RoID0gYnVmZmVyLnJlYWRTY2FsYXIoKTsKICAgICBmU2NhbGVUb0ZpdCA9IGJ1ZmZlci5yZWFkQm9vbCgpOwotICAgIAorCiAgICAgZkNvdW50ID0gYnVmZmVyLmdldEFycmF5Q291bnQoKTsKICAgICBmSW50ZXJ2YWxzID0gKFNrU2NhbGFyKilza19tYWxsb2NfdGhyb3coc2l6ZW9mKFNrU2NhbGFyKSAqIGZDb3VudCk7CiAgICAgYnVmZmVyLnJlYWRTY2FsYXJBcnJheShmSW50ZXJ2YWxzKTsKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL1NrRGlzY3JldGVQYXRoRWZmZWN0LmNwcCBiL3NyYy9lZmZlY3RzL1NrRGlzY3JldGVQYXRoRWZmZWN0LmNwcAppbmRleCAwY2JlNDYxLi5kMzMxY2RiIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9Ta0Rpc2NyZXRlUGF0aEVmZmVjdC5jcHAKKysrIGIvc3JjL2VmZmVjdHMvU2tEaXNjcmV0ZVBhdGhFZmZlY3QuY3BwCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgbiAtPSAxOwogICAgICAgICAgICAgICAgIGRpc3RhbmNlICs9IGRlbHRhLzI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKG1lYXMuZ2V0UG9zVGFuKGRpc3RhbmNlLCAmcCwgJnYpKSB7CiAgICAgICAgICAgICAgICAgUGVydGVyYigmcCwgdiwgU2tTY2FsYXJNdWwocmFuZC5uZXh0U1NjYWxhcjEoKSwgc2NhbGUpKTsKICAgICAgICAgICAgICAgICBkc3QtPm1vdmVUbyhwKTsKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL1NrRW1ib3NzTWFza0ZpbHRlci5jcHAgYi9zcmMvZWZmZWN0cy9Ta0VtYm9zc01hc2tGaWx0ZXIuY3BwCmluZGV4IDVlZDk4MWEuLjVjZWQ0NjMgMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL1NrRW1ib3NzTWFza0ZpbHRlci5jcHAKKysrIGIvc3JjL2VmZmVjdHMvU2tFbWJvc3NNYXNrRmlsdGVyLmNwcApAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgaW50IHNwID0gcGluMmJ5dGUoU2tTY2FsYXJUb0ZpeGVkKHNwZWN1bGFyKSA+PiAxMik7CiAKICAgICBTa0VtYm9zc01hc2tGaWx0ZXI6OkxpZ2h0ICAgbGlnaHQ7Ci0gICAgCisKICAgICBtZW1jcHkobGlnaHQuZkRpcmVjdGlvbiwgZGlyZWN0aW9uLCBzaXplb2YobGlnaHQuZkRpcmVjdGlvbikpOwogICAgIGxpZ2h0LmZBbWJpZW50ID0gU2tUb1U4KGFtKTsKICAgICBsaWdodC5mU3BlY3VsYXIgPSBTa1RvVTgoc3ApOwotICAgIAorCiAgICAgcmV0dXJuIFNrTkVXX0FSR1MoU2tFbWJvc3NNYXNrRmlsdGVyLCAobGlnaHQsIGJsdXJSYWRpdXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvU2tFbWJvc3NNYXNrX1RhYmxlLmggYi9zcmMvZWZmZWN0cy9Ta0VtYm9zc01hc2tfVGFibGUuaAppbmRleCBmYzI5YTE1Li4wZDMzMWVlIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9Ta0VtYm9zc01hc2tfVGFibGUuaAorKysgYi9zcmMvZWZmZWN0cy9Ta0VtYm9zc01hc2tfVGFibGUuaApAQCAtMTAsMTAyOSArMTAsMTAyOSBAQAogI2luY2x1ZGUgIlNrVHlwZXMuaCIKIAogc3RhdGljIGNvbnN0IHVpbnQxNl90IGdJbnZTcXJ0VGFibGVbMTI4ICogMTI4XSA9IHsKLSAgICAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIAotICAgIDB4MDVEMSwgMHgwNTkwLCAweDA1NTUsIDB4MDU1NSwgMHgwNTFFLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgCi0gICAgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAKLSAgICAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIAotICAgIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgCi0gICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAKLSAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNjE4LCAKLSAgICAweDA1RDEsIDB4MDU5MCwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIAotICAgIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgCi0gICAgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAKLSAgICAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIAotICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgCi0gICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAKLSAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDVEMSwgCi0gICAgMHgwNUQxLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAKLSAgICAweDAzQTgsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIAotICAgIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgCi0gICAgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAKLSAgICAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIAotICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgCi0gICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAKLSAgICAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA1RDEsIAotICAgIDB4MDVEMSwgMHgwNTkwLCAweDA1NTUsIDB4MDUxRSwgMHgwNTFFLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgCi0gICAgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAKLSAgICAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIAotICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgCi0gICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAKLSAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLCAKLSAgICAweDA1RDEsIDB4MDU5MCwgMHgwNTU1LCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIAotICAgIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgCi0gICAgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAKLSAgICAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIAotICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgCi0gICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAKLSAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgCi0gICAgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgMHgwNTFFLCAweDA0RUMsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAKLSAgICAweDAzOEUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIAotICAgIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgCi0gICAgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAKLSAgICAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIAotICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgCi0gICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAKLSAgICAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsIAotICAgIDB4MDU5MCwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgCi0gICAgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAKLSAgICAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIAotICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgCi0gICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAKLSAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNTkwLCAKLSAgICAweDA1OTAsIDB4MDU1NSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIAotICAgIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgCi0gICAgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAKLSAgICAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIAotICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgCi0gICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAKLSAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2QkMsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgCi0gICAgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgMHgwM0E4LCAKLSAgICAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIAotICAgIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgCi0gICAgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAKLSAgICAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIAotICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgCi0gICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAKLSAgICAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNTkwLCAweDA1OTAsIAotICAgIDB4MDU1NSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDM4RSwgCi0gICAgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAKLSAgICAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIAotICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgCi0gICAgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAKLSAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwNzFDLCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2QkMsIDB4MDZCQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgMHgwNTU1LCAKLSAgICAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsIAotICAgIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgCi0gICAgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAKLSAgICAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIAotICAgIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgCi0gICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAKLSAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDZCQywgMHgwNkJDLCAweDA2QkMsIDB4MDZCQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwgMHgwNjE4LCAweDA1RDEsIDB4MDVEMSwgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgCi0gICAgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAKLSAgICAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIAotICAgIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgCi0gICAgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAKLSAgICAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIAotICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgCi0gICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAKLSAgICAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNUQxLCAweDA1OTAsIDB4MDU5MCwgMHgwNTU1LCAweDA1MUUsIAotICAgIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgCi0gICAgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAKLSAgICAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIAotICAgIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgCi0gICAgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAKLSAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgMHgwNTkwLCAweDA1NTUsIDB4MDU1NSwgMHgwNTFFLCAKLSAgICAweDA0RUMsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIAotICAgIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwgCi0gICAgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAKLSAgICAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIAotICAgIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgCi0gICAgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAKLSAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDRFQywgCi0gICAgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzQTgsIDB4MDM4RSwgMHgwMzc1LCAKLSAgICAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIAotICAgIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgCi0gICAgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAKLSAgICAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIAotICAgIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgCi0gICAgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAKLSAgICAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsIDB4MDVEMSwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIAotICAgIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgCi0gICAgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAKLSAgICAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIAotICAgIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgCi0gICAgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAKLSAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIAotICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwNUQxLCAweDA1RDEsIDB4MDVEMSwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNTFFLCAweDA0RUMsIDB4MDRFQywgMHgwNEJELCAKLSAgICAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIAotICAgIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgCi0gICAgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAKLSAgICAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIAotICAgIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgCi0gICAgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAKLSAgICAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIAotICAgIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgCi0gICAgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAKLSAgICAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIAotICAgIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgCi0gICAgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAKLSAgICAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIAotICAgIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgCi0gICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAKLSAgICAweDA1NTUsIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsIAotICAgIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgCi0gICAgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAKLSAgICAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIAotICAgIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgCi0gICAgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAKLSAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIAotICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgCi0gICAgMHgwNTU1LCAweDA1NTUsIDB4MDU1NSwgMHgwNTFFLCAweDA1MUUsIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAKLSAgICAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIAotICAgIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgCi0gICAgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAKLSAgICAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIAotICAgIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgCi0gICAgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAKLSAgICAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIAotICAgIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDUxRSwgMHgwNTFFLCAweDA0RUMsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgCi0gICAgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAKLSAgICAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIAotICAgIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgCi0gICAgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAKLSAgICAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIAotICAgIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgCi0gICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAKLSAgICAweDA0RUMsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRFQywgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIAotICAgIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzQTgsIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgCi0gICAgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAKLSAgICAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIAotICAgIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgCi0gICAgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAKLSAgICAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIAotICAgIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgCi0gICAgMHgwNEJELCAweDA0QkQsIDB4MDRCRCwgMHgwNEJELCAweDA0QkQsIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAKLSAgICAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIAotICAgIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgCi0gICAgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAKLSAgICAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIAotICAgIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgCi0gICAgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAKLSAgICAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIAotICAgIDB4MDQ5MiwgMHgwNDkyLCAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgCi0gICAgMHgwNDAwLCAweDA0MDAsIDB4MDNFMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzFGLCAKLSAgICAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIAotICAgIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgCi0gICAgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAKLSAgICAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIAotICAgIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgCi0gICAgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAKLSAgICAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDA0MDAsIAotICAgIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgMHgwM0E4LCAweDAzQTgsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgCi0gICAgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAKLSAgICAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIAotICAgIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgCi0gICAgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAKLSAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIAotICAgIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgCi0gICAgMHgwNDY5LCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwM0UwLCAKLSAgICAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIAotICAgIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgCi0gICAgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAKLSAgICAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIAotICAgIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgCi0gICAgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAKLSAgICAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIAotICAgIDB4MDQ0NCwgMHgwNDQ0LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDIxLCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNDMywgCi0gICAgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAKLSAgICAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIAotICAgIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgCi0gICAgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAKLSAgICAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIAotICAgIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgCi0gICAgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAKLSAgICAweDA0MjEsIDB4MDQyMSwgMHgwNDIxLCAweDA0MjEsIDB4MDQyMSwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIAotICAgIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgCi0gICAgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAKLSAgICAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIAotICAgIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgCi0gICAgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAKLSAgICAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIAotICAgIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgCi0gICAgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAKLSAgICAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIAotICAgIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgCi0gICAgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAKLSAgICAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIAotICAgIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgCi0gICAgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAKLSAgICAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIAotICAgIDB4MDNFMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAweDAzQTgsIDB4MDM4RSwgCi0gICAgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAKLSAgICAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIAotICAgIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgCi0gICAgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAKLSAgICAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIAotICAgIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgCi0gICAgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAKLSAgICAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIAotICAgIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgCi0gICAgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAKLSAgICAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIAotICAgIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgCi0gICAgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAKLSAgICAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIAotICAgIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgCi0gICAgMHgwM0MzLCAweDAzQzMsIDB4MDNDMywgMHgwM0E4LCAweDAzQTgsIDB4MDNBOCwgMHgwM0E4LCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzc1LCAKLSAgICAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIAotICAgIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgCi0gICAgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAKLSAgICAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIAotICAgIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgCi0gICAgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAKLSAgICAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIAotICAgIDB4MDNBOCwgMHgwM0E4LCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgCi0gICAgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAKLSAgICAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIAotICAgIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgCi0gICAgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAKLSAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIAotICAgIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgCi0gICAgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAKLSAgICAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsIAotICAgIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgCi0gICAgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAKLSAgICAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIAotICAgIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgCi0gICAgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAKLSAgICAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIAotICAgIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgCi0gICAgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAKLSAgICAweDAzMzMsIDB4MDMxRiwgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIAotICAgIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgCi0gICAgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAKLSAgICAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIAotICAgIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgCi0gICAgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAKLSAgICAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIAotICAgIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgCi0gICAgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAKLSAgICAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIAotICAgIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgCi0gICAgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAKLSAgICAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIAotICAgIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgCi0gICAgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAKLSAgICAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMEMsIAotICAgIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgCi0gICAgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAKLSAgICAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIAotICAgIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgCi0gICAgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAKLSAgICAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIAotICAgIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgCi0gICAgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzFGLCAweDAzMUYsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAKLSAgICAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIAotICAgIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgCi0gICAgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAKLSAgICAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIAotICAgIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgCi0gICAgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAKLSAgICAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIAotICAgIDB4MDMxRiwgMHgwMzFGLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRkEsIDB4MDJGQSwgCi0gICAgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAKLSAgICAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIAotICAgIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgCi0gICAgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAKLSAgICAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIAotICAgIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgCi0gICAgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAKLSAgICAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIAotICAgIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyODIsIDB4MDI3NiwgCi0gICAgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAKLSAgICAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIAotICAgIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgCi0gICAgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAKLSAgICAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIAotICAgIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgCi0gICAgMHgwMkZBLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAKLSAgICAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIAotICAgIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgCi0gICAgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAKLSAgICAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIAotICAgIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgCi0gICAgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAKLSAgICAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIAotICAgIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgCi0gICAgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAKLSAgICAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIAotICAgIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgCi0gICAgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAKLSAgICAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIAotICAgIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgCi0gICAgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAKLSAgICAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksIAotICAgIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgCi0gICAgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAKLSAgICAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIAotICAgIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgCi0gICAgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAKLSAgICAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIAotICAgIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgCi0gICAgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAKLSAgICAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIAotICAgIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgCi0gICAgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAKLSAgICAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIAotICAgIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgCi0gICAgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAKLSAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIAotICAgIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgCi0gICAgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI1MywgMHgwMjQ5LCAKLSAgICAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIAotICAgIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgCi0gICAgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAKLSAgICAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIAotICAgIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgCi0gICAgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAKLSAgICAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIAotICAgIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgCi0gICAgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAKLSAgICAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIAotICAgIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgCi0gICAgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAKLSAgICAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIAotICAgIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgCi0gICAgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAKLSAgICAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsIAotICAgIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgCi0gICAgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAKLSAgICAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIAotICAgIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgCi0gICAgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAKLSAgICAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIAotICAgIDB4MDI5QywgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgCi0gICAgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzNCwgMHgwMjM0LCAKLSAgICAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIAotICAgIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgCi0gICAgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAKLSAgICAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIAotICAgIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgCi0gICAgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAKLSAgICAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIAotICAgIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgCi0gICAgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAKLSAgICAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIAotICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgCi0gICAgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAKLSAgICAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIAotICAgIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgCi0gICAgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAKLSAgICAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIAotICAgIDB4MDIyMiwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgCi0gICAgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAKLSAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIAotICAgIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgCi0gICAgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAKLSAgICAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIAotICAgIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgCi0gICAgMHgwMjVFLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAKLSAgICAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIAotICAgIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgCi0gICAgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAKLSAgICAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIAotICAgIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgCi0gICAgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAKLSAgICAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIAotICAgIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgCi0gICAgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAKLSAgICAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIAotICAgIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgCi0gICAgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAKLSAgICAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIAotICAgIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgCi0gICAgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAKLSAgICAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIAotICAgIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgCi0gICAgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAKLSAgICAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIAotICAgIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgCi0gICAgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAKLSAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIAotICAgIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgCi0gICAgMHgwMjNFLCAweDAyM0UsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAKLSAgICAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIAotICAgIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgCi0gICAgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAKLSAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIAotICAgIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgCi0gICAgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAKLSAgICAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIAotICAgIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgCi0gICAgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAKLSAgICAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIAotICAgIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgCi0gICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAKLSAgICAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIAotICAgIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgCi0gICAgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAKLSAgICAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIAotICAgIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgCi0gICAgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAKLSAgICAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIAotICAgIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgCi0gICAgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAKLSAgICAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIAotICAgIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgCi0gICAgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAKLSAgICAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIAotICAgIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgCi0gICAgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAKLSAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIAotICAgIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgCi0gICAgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAKLSAgICAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIAotICAgIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgCi0gICAgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAKLSAgICAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIAotICAgIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgCi0gICAgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAKLSAgICAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIAotICAgIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgCi0gICAgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAKLSAgICAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIAotICAgIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgCi0gICAgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAKLSAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIAotICAgIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgCi0gICAgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAKLSAgICAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIAotICAgIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgCi0gICAgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAKLSAgICAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIAotICAgIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgCi0gICAgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAKLSAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgCi0gICAgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAKLSAgICAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIAotICAgIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgCi0gICAgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAKLSAgICAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIAotICAgIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgCi0gICAgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAKLSAgICAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIAotICAgIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgCi0gICAgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAKLSAgICAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIAotICAgIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgCi0gICAgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAKLSAgICAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIAotICAgIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgCi0gICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAKLSAgICAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIAotICAgIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgCi0gICAgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAKLSAgICAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIAotICAgIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgCi0gICAgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAKLSAgICAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIAotICAgIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAKLSAgICAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIAotICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgCi0gICAgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAKLSAgICAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIAotICAgIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgCi0gICAgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAKLSAgICAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgCi0gICAgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAKLSAgICAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIAotICAgIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgCi0gICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAKLSAgICAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIAotICAgIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgCi0gICAgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAKLSAgICAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIAotICAgIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgCi0gICAgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAKLSAgICAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIAotICAgIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgCi0gICAgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAKLSAgICAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIAotICAgIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgCi0gICAgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAKLSAgICAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIAotICAgIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgCi0gICAgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAKLSAgICAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIAotICAgIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgCi0gICAgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAKLSAgICAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIAotICAgIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgCi0gICAgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAKLSAgICAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIAotICAgIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgCi0gICAgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAKLSAgICAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIAotICAgIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgCi0gICAgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAKLSAgICAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIAotICAgIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgCi0gICAgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAKLSAgICAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIAotICAgIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgCi0gICAgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAKLSAgICAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIAotICAgIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgCi0gICAgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAKLSAgICAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIAotICAgIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgCi0gICAgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAKLSAgICAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIAotICAgIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgCi0gICAgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAKLSAgICAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIAotICAgIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgCi0gICAgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAKLSAgICAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIAotICAgIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgCi0gICAgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAKLSAgICAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIAotICAgIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgCi0gICAgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAKLSAgICAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIAotICAgIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgCi0gICAgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAKLSAgICAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIAotICAgIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgCi0gICAgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAKLSAgICAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIAotICAgIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgCi0gICAgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAKLSAgICAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIAotICAgIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgCi0gICAgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAKLSAgICAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIAotICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgCi0gICAgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAKLSAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIAotICAgIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgCi0gICAgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAKLSAgICAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIAotICAgIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgCi0gICAgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAKLSAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIAotICAgIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgCi0gICAgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAKLSAgICAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIAotICAgIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgCi0gICAgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAKLSAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIAotICAgIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgCi0gICAgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAKLSAgICAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIAotICAgIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgCi0gICAgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAKLSAgICAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIAotICAgIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgCi0gICAgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAKLSAgICAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIAotICAgIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgCi0gICAgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAKLSAgICAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIAotICAgIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgCi0gICAgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAKLSAgICAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIAotICAgIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgCi0gICAgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAKLSAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIAotICAgIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgCi0gICAgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAKLSAgICAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIAotICAgIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgCi0gICAgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAKLSAgICAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIAotICAgIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgCi0gICAgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAKLSAgICAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIAotICAgIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgCi0gICAgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAKLSAgICAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIAotICAgIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgCi0gICAgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAKLSAgICAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIAotICAgIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgCi0gICAgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAKLSAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIAotICAgIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQiwgCi0gICAgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAKLSAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIAotICAgIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgCi0gICAgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAKLSAgICAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIAotICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgCi0gICAgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAKLSAgICAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIAotICAgIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgCi0gICAgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAKLSAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIAotICAgIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgCi0gICAgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAKLSAgICAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIAotICAgIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgCi0gICAgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAKLSAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIAotICAgIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgCi0gICAgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAKLSAgICAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIAotICAgIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgCi0gICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAKLSAgICAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIAotICAgIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgCi0gICAgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAKLSAgICAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIAotICAgIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgCi0gICAgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAKLSAgICAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIAotICAgIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgCi0gICAgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAKLSAgICAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIAotICAgIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgCi0gICAgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAKLSAgICAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIAotICAgIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgCi0gICAgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAKLSAgICAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIAotICAgIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgCi0gICAgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAKLSAgICAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIAotICAgIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgCi0gICAgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAKLSAgICAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIAotICAgIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgCi0gICAgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAKLSAgICAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIAotICAgIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgCi0gICAgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAKLSAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIAotICAgIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgCi0gICAgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAKLSAgICAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIAotICAgIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAKLSAgICAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIAotICAgIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgCi0gICAgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAKLSAgICAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIAotICAgIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgCi0gICAgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAKLSAgICAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIAotICAgIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgCi0gICAgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAKLSAgICAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIAotICAgIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgCi0gICAgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAKLSAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIAotICAgIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgCi0gICAgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAKLSAgICAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIAotICAgIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgCi0gICAgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAKLSAgICAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIAotICAgIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgCi0gICAgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAKLSAgICAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIAotICAgIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgCi0gICAgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAKLSAgICAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIAotICAgIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgCi0gICAgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAKLSAgICAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIAotICAgIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgCi0gICAgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAKLSAgICAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIAotICAgIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgCi0gICAgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAKLSAgICAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIAotICAgIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgCi0gICAgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAKLSAgICAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIAotICAgIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgCi0gICAgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAKLSAgICAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIAotICAgIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgCi0gICAgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAKLSAgICAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIAotICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgCi0gICAgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAKLSAgICAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIAotICAgIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgCi0gICAgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAKLSAgICAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIAotICAgIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgCi0gICAgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAKLSAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIAotICAgIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgCi0gICAgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAKLSAgICAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIAotICAgIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgCi0gICAgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAKLSAgICAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIAotICAgIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgCi0gICAgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAKLSAgICAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIAotICAgIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgCi0gICAgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAKLSAgICAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIAotICAgIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgCi0gICAgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAKLSAgICAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIAotICAgIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgCi0gICAgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAKLSAgICAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIAotICAgIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgCi0gICAgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAKLSAgICAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIAotICAgIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgCi0gICAgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAKLSAgICAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIAotICAgIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgCi0gICAgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAKLSAgICAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIAotICAgIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgCi0gICAgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAKLSAgICAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIAotICAgIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgCi0gICAgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAKLSAgICAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIAotICAgIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgCi0gICAgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAKLSAgICAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIAotICAgIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgCi0gICAgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAKLSAgICAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIAotICAgIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgCi0gICAgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAKLSAgICAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIAotICAgIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgCi0gICAgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAKLSAgICAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIAotICAgIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgCi0gICAgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAKLSAgICAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIAotICAgIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgCi0gICAgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAKLSAgICAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIAotICAgIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgCi0gICAgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAKLSAgICAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIAotICAgIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgCi0gICAgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAKLSAgICAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIAotICAgIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgCi0gICAgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAKLSAgICAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIAotICAgIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQiwgCi0gICAgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAKLSAgICAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIAotICAgIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgCi0gICAgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAKLSAgICAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIAotICAgIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgCi0gICAgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAKLSAgICAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIAotICAgIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgCi0gICAgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAKLSAgICAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIAotICAgIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgCi0gICAgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAKLSAgICAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIAotICAgIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgCi0gICAgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAKLSAgICAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIAotICAgIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgCi0gICAgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAKLSAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIAotICAgIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgCi0gICAgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAKLSAgICAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIAotICAgIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgCi0gICAgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAKLSAgICAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIAotICAgIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgCi0gICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAKLSAgICAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIAotICAgIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgCi0gICAgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAKLSAgICAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIAotICAgIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgCi0gICAgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAKLSAgICAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIAotICAgIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgCi0gICAgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAKLSAgICAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIAotICAgIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgCi0gICAgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQiwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAKLSAgICAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIAotICAgIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgCi0gICAgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAKLSAgICAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIAotICAgIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgCi0gICAgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAKLSAgICAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIAotICAgIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgCi0gICAgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAKLSAgICAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIAotICAgIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgCi0gICAgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAKLSAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIAotICAgIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgCi0gICAgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAKLSAgICAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIAotICAgIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgCi0gICAgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAKLSAgICAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIAotICAgIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgCi0gICAgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAKLSAgICAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIAotICAgIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgCi0gICAgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENBLCAweDAwQzksIDB4MDBDOSwgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAKLSAgICAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIAotICAgIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgCi0gICAgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAKLSAgICAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIAotICAgIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgCi0gICAgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAKLSAgICAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIAotICAgIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM2LCAweDAwQzUsIDB4MDBDNCwgCi0gICAgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAKLSAgICAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIAotICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgCi0gICAgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAKLSAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIAotICAgIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgCi0gICAgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAKLSAgICAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzMsIAotICAgIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgCi0gICAgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAKLSAgICAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIAotICAgIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgCi0gICAgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAKLSAgICAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIAotICAgIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgCi0gICAgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzYsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMzLCAKLSAgICAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIAotICAgIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgCi0gICAgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAKLSAgICAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIAotICAgIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgCi0gICAgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAKLSAgICAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIAotICAgIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIDB4MDBDNCwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMSwgCi0gICAgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAKLSAgICAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIAotICAgIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgCi0gICAgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAKLSAgICAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIAotICAgIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgCi0gICAgMHgwMERELCAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAKLSAgICAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzAsIAotICAgIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgCi0gICAgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAKLSAgICAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIAotICAgIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgCi0gICAgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAKLSAgICAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIAotICAgIDB4MDBEQiwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgCi0gICAgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzQsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzEsIDB4MDBDMCwgMHgwMEMwLCAKLSAgICAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIAotICAgIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgCi0gICAgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAKLSAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIAotICAgIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgCi0gICAgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAKLSAgICAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIAotICAgIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIDB4MDBDNCwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMSwgMHgwMEMxLCAweDAwQzAsIDB4MDBCRiwgCi0gICAgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAKLSAgICAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIAotICAgIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgCi0gICAgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAKLSAgICAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIAotICAgIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgCi0gICAgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAKLSAgICAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkUsIAotICAgIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgCi0gICAgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAKLSAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIAotICAgIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgCi0gICAgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAKLSAgICAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIAotICAgIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgCi0gICAgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzUsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzEsIDB4MDBDMSwgMHgwMEMwLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJFLCAKLSAgICAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIAotICAgIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgCi0gICAgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAKLSAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIAotICAgIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgCi0gICAgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAKLSAgICAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIAotICAgIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMSwgMHgwMEMxLCAweDAwQzAsIDB4MDBCRiwgMHgwMEJGLCAweDAwQkUsIDB4MDBCRCwgCi0gICAgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAKLSAgICAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIAotICAgIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgCi0gICAgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAKLSAgICAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIAotICAgIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgCi0gICAgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAKLSAgICAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsIAotICAgIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgCi0gICAgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAKLSAgICAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIAotICAgIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgCi0gICAgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAKLSAgICAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIAotICAgIDB4MDBENiwgMHgwMEQ0LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgCi0gICAgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzUsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzEsIDB4MDBDMSwgMHgwMEMwLCAweDAwQkYsIDB4MDBCRiwgMHgwMEJFLCAweDAwQkQsIDB4MDBCQywgMHgwMEJDLCAKLSAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIAotICAgIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgCi0gICAgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAKLSAgICAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIAotICAgIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgCi0gICAgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAKLSAgICAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIAotICAgIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMSwgMHgwMEMxLCAweDAwQzAsIDB4MDBCRiwgMHgwMEJGLCAweDAwQkUsIDB4MDBCRCwgMHgwMEJDLCAweDAwQkMsIDB4MDBCQiwgCi0gICAgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAKLSAgICAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIAotICAgIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgCi0gICAgMHgwMEZBLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAKLSAgICAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIAotICAgIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgCi0gICAgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAKLSAgICAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkQsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIAotICAgIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgCi0gICAgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAKLSAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIAotICAgIDB4MDBGOCwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgCi0gICAgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAKLSAgICAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIAotICAgIDB4MDBEMiwgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQiwgMHgwMENBLCAweDAwQzksIDB4MDBDOSwgMHgwMEM3LCAweDAwQzYsIDB4MDBDNiwgCi0gICAgMHgwMEM1LCAweDAwQzQsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzEsIDB4MDBDMSwgMHgwMEMwLCAweDAwQkYsIDB4MDBCRiwgMHgwMEJFLCAweDAwQkQsIDB4MDBCRCwgMHgwMEJDLCAweDAwQkIsIDB4MDBCQSwgMHgwMEJBLCAKLSAgICAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIAotICAgIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgCi0gICAgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAKLSAgICAweDAwRjYsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIAotICAgIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgCi0gICAgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAKLSAgICAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM2LCAweDAwQzUsIAotICAgIDB4MDBDNCwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMSwgMHgwMEMxLCAweDAwQzAsIDB4MDBCRiwgMHgwMEJGLCAweDAwQkUsIDB4MDBCRCwgMHgwMEJELCAweDAwQkMsIDB4MDBCQiwgMHgwMEJBLCAweDAwQkEsIDB4MDBCOSwgCi0gICAgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAKLSAgICAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIAotICAgIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgCi0gICAgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAKLSAgICAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIAotICAgIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgCi0gICAgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAKLSAgICAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkQsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwgMHgwMEI5LCAweDAwQjgsIAotICAgIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgCi0gICAgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAKLSAgICAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIAotICAgIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFQSwgCi0gICAgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAKLSAgICAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIAotICAgIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzQsIDB4MDBDNCwgCi0gICAgMHgwMEMzLCAweDAwQzEsIDB4MDBDMSwgMHgwMEMwLCAweDAwQkYsIDB4MDBCRiwgMHgwMEJFLCAweDAwQkQsIDB4MDBCQywgMHgwMEJDLCAweDAwQkIsIDB4MDBCQSwgMHgwMEJBLCAweDAwQjksIDB4MDBCOCwgMHgwMEI4LCAKLSAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIAotICAgIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgCi0gICAgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAKLSAgICAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIAotICAgIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQiwgCi0gICAgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAKLSAgICAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzUsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzMsIAotICAgIDB4MDBDMSwgMHgwMEMwLCAweDAwQzAsIDB4MDBCRiwgMHgwMEJFLCAweDAwQkUsIDB4MDBCRCwgMHgwMEJDLCAweDAwQkMsIDB4MDBCQiwgMHgwMEJBLCAweDAwQkEsIDB4MDBCOSwgMHgwMEI4LCAweDAwQjgsIDB4MDBCNywgCi0gICAgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAKLSAgICAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIAotICAgIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgCi0gICAgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAKLSAgICAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERCLCAweDAwREEsIAotICAgIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIDB4MDBDRSwgCi0gICAgMHgwMENDLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMywgMHgwMEMxLCAKKyAgICAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsCisgICAgMHgwNUQxLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLAorICAgIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywKKyAgICAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsCisgICAgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LAorICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwKKyAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwKKyAgICAweDA1RDEsIDB4MDU5MCwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsCisgICAgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLAorICAgIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwKKyAgICAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksCisgICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LAorICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwKKyAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwNzg3LCAweDA3ODcsIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNUQxLAorICAgIDB4MDVEMSwgMHgwNTkwLCAweDA1NTUsIDB4MDU1NSwgMHgwNTFFLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywKKyAgICAweDAzQTgsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsCisgICAgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LAorICAgIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwKKyAgICAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsCisgICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LAorICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwKKyAgICAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNkJDLCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA1RDEsCisgICAgMHgwNUQxLCAweDA1OTAsIDB4MDU1NSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LAorICAgIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywKKyAgICAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsCisgICAgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LAorICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwKKyAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDgwMCwgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwODAwLCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2QkMsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwKKyAgICAweDA1RDEsIDB4MDU5MCwgMHgwNTU1LCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsCisgICAgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLAorICAgIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwKKyAgICAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksCisgICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LAorICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwKKyAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwODAwLCAweDA4MDAsIDB4MDgwMCwgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2QkMsIDB4MDY2NiwgMHgwNjY2LCAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLAorICAgIDB4MDU5MCwgMHgwNTkwLCAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwKKyAgICAweDAzOEUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsCisgICAgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LAorICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwKKyAgICAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsCisgICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LAorICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwKKyAgICAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsCisgICAgMHgwNTkwLCAweDA1NTUsIDB4MDU1NSwgMHgwNTFFLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LAorICAgIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwKKyAgICAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsCisgICAgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LAorICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwKKyAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDc4NywgMHgwNzg3LCAweDA3ODcsIDB4MDc4NywgMHgwNzg3LCAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNjE4LCAweDA1RDEsIDB4MDU5MCwKKyAgICAweDA1OTAsIDB4MDU1NSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsCisgICAgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLAorICAgIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwKKyAgICAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksCisgICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LAorICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwKKyAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwNzg3LCAweDA3ODcsIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNjE4LCAweDA1RDEsIDB4MDVEMSwgMHgwNTkwLAorICAgIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDRFQywgMHgwNEVDLCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwKKyAgICAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsCisgICAgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LAorICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwKKyAgICAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsCisgICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LAorICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwKKyAgICAweDA3MUMsIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDcxQywgMHgwNkJDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNTkwLCAweDA1OTAsCisgICAgMHgwNTU1LCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLAorICAgIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwKKyAgICAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsCisgICAgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LAorICAgIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwKKyAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDcxQywgMHgwNzFDLCAweDA3MUMsIDB4MDZCQywgMHgwNkJDLCAweDA2QkMsIDB4MDZCQywgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNUQxLCAweDA1OTAsIDB4MDU1NSwKKyAgICAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsCisgICAgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLAorICAgIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwKKyAgICAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsCisgICAgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LAorICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwKKyAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwNkJDLCAweDA2QkMsIDB4MDZCQywgMHgwNkJDLCAweDA2QkMsIDB4MDY2NiwgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNUQxLCAweDA1OTAsIDB4MDU5MCwgMHgwNTU1LAorICAgIDB4MDUxRSwgMHgwNTFFLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsIDB4MDQ2OSwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDM4RSwKKyAgICAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsCisgICAgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LAorICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwKKyAgICAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsCisgICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LAorICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwKKyAgICAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjY2LCAweDA2NjYsIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDVEMSwgMHgwNUQxLCAweDA1OTAsIDB4MDU5MCwgMHgwNTU1LCAweDA1MUUsCisgICAgMHgwNTFFLCAweDA0RUMsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQyMSwgMHgwNDAwLCAweDA0MDAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDM4RSwgMHgwMzhFLAorICAgIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwKKyAgICAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsCisgICAgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LAorICAgIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwKKyAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDY2NiwgMHgwNjY2LCAweDA2NjYsIDB4MDY2NiwgMHgwNjE4LCAweDA2MTgsIDB4MDYxOCwgMHgwNjE4LCAweDA1RDEsIDB4MDVEMSwgMHgwNUQxLCAweDA1OTAsIDB4MDU5MCwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwKKyAgICAweDA0RUMsIDB4MDRFQywgMHgwNEJELCAweDA0OTIsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDNFMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsCisgICAgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLAorICAgIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwKKyAgICAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsCisgICAgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLAorICAgIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwKKyAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwNjE4LCAweDA2MTgsIDB4MDYxOCwgMHgwNjE4LCAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsIDB4MDVEMSwgMHgwNTkwLCAweDA1OTAsIDB4MDU5MCwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNEVDLAorICAgIDB4MDRFQywgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MDAsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwKKyAgICAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsCisgICAgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLAorICAgIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwKKyAgICAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsCisgICAgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLAorICAgIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwKKyAgICAweDA2MTgsIDB4MDYxOCwgMHgwNUQxLCAweDA1RDEsIDB4MDVEMSwgMHgwNUQxLCAweDA1RDEsIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsCisgICAgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsIDB4MDM3NSwgMHgwMzc1LAorICAgIDB4MDM1RSwgMHgwMzQ4LCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwKKyAgICAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsCisgICAgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LAorICAgIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwKKyAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsCisgICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDVEMSwgMHgwNUQxLCAweDA1RDEsIDB4MDVEMSwgMHgwNUQxLCAweDA1OTAsIDB4MDU5MCwgMHgwNTkwLCAweDA1NTUsIDB4MDU1NSwgMHgwNTU1LCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwKKyAgICAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsCisgICAgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LAorICAgIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwKKyAgICAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsCisgICAgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLAorICAgIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwKKyAgICAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsCisgICAgMHgwNTkwLCAweDA1OTAsIDB4MDU5MCwgMHgwNTkwLCAweDA1OTAsIDB4MDU5MCwgMHgwNTU1LCAweDA1NTUsIDB4MDU1NSwgMHgwNTFFLCAweDA1MUUsIDB4MDUxRSwgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELAorICAgIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDM4RSwgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwKKyAgICAweDAzNDgsIDB4MDMzMywgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsCisgICAgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LAorICAgIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwKKyAgICAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsCisgICAgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLAorICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwKKyAgICAweDA1NTUsIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRCRCwgMHgwNEJELCAweDA0OTIsCisgICAgMHgwNDkyLCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzQ4LAorICAgIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyODIsIDB4MDI3NiwKKyAgICAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksCisgICAgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLAorICAgIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwKKyAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsCisgICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLAorICAgIDB4MDU1NSwgMHgwNTU1LCAweDA1NTUsIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDUxRSwgMHgwNTFFLCAweDA0RUMsIDB4MDRFQywgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwKKyAgICAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsCisgICAgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLAorICAgIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwKKyAgICAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsCisgICAgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLAorICAgIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwKKyAgICAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsCisgICAgMHgwNTFFLCAweDA1MUUsIDB4MDUxRSwgMHgwNTFFLCAweDA1MUUsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRFQywgMHgwNEJELCAweDA0QkQsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDY5LAorICAgIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDMzMywKKyAgICAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsCisgICAgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLAorICAgIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwKKyAgICAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsCisgICAgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLAorICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwKKyAgICAweDA0RUMsIDB4MDRFQywgMHgwNEVDLCAweDA0RUMsIDB4MDRFQywgMHgwNEVDLCAweDA0QkQsIDB4MDRCRCwgMHgwNEJELCAweDA0QkQsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsCisgICAgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLAorICAgIDB4MDMxRiwgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI2QSwKKyAgICAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsCisgICAgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLAorICAgIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwKKyAgICAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsCisgICAgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLAorICAgIDB4MDRCRCwgMHgwNEJELCAweDA0QkQsIDB4MDRCRCwgMHgwNEJELCAweDA0QkQsIDB4MDRCRCwgMHgwNDkyLCAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwKKyAgICAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsCisgICAgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLAorICAgIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwKKyAgICAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsCisgICAgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLAorICAgIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwKKyAgICAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsCisgICAgMHgwNDkyLCAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0OTIsIDB4MDQ2OSwgMHgwNDY5LCAweDA0NjksIDB4MDQ0NCwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDIxLAorICAgIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwKKyAgICAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsCisgICAgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLAorICAgIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwKKyAgICAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsCisgICAgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLAorICAgIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywKKyAgICAweDA0OTIsIDB4MDQ5MiwgMHgwNDkyLCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDQ0LCAweDA0MjEsIDB4MDQyMSwgMHgwNDAwLCAweDA0MDAsCisgICAgMHgwNDAwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLAorICAgIDB4MDJGQSwgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywKKyAgICAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsCisgICAgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LAorICAgIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwKKyAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsCisgICAgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLAorICAgIDB4MDQ2OSwgMHgwNDY5LCAweDA0NjksIDB4MDQ2OSwgMHgwNDY5LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDQ0LCAweDA0NDQsIDB4MDQyMSwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDA0MDAsIDB4MDNFMCwKKyAgICAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzOEUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsCisgICAgMHgwMkZBLCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLAorICAgIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwKKyAgICAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsCisgICAgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLAorICAgIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwKKyAgICAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsCisgICAgMHgwNDQ0LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDQ0LCAweDA0NDQsIDB4MDQ0NCwgMHgwNDIxLCAweDA0MjEsIDB4MDQyMSwgMHgwNDIxLCAweDA0MDAsIDB4MDQwMCwgMHgwNDAwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLAorICAgIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwKKyAgICAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksCisgICAgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LAorICAgIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwKKyAgICAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsCisgICAgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLAorICAgIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywKKyAgICAweDA0MjEsIDB4MDQyMSwgMHgwNDIxLCAweDA0MjEsIDB4MDQyMSwgMHgwNDIxLCAweDA0MjEsIDB4MDQwMCwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0MzLCAweDAzQzMsCisgICAgMHgwM0E4LCAweDAzQTgsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNUUsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LAorICAgIDB4MDJFOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwKKyAgICAweDAyM0UsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsCisgICAgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLAorICAgIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywKKyAgICAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsCisgICAgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLAorICAgIDB4MDQwMCwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwNDAwLCAweDA0MDAsIDB4MDQwMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0UwLCAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwKKyAgICAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsCisgICAgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI0OSwgMHgwMjNFLAorICAgIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwKKyAgICAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsCisgICAgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LAorICAgIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywKKyAgICAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsCisgICAgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNFMCwgMHgwM0UwLCAweDAzRTAsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNDMywgMHgwM0E4LCAweDAzQTgsIDB4MDNBOCwgMHgwMzhFLAorICAgIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLCAweDAzMzMsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwKKyAgICAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNTMsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsCisgICAgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELAorICAgIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwKKyAgICAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsCisgICAgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLAorICAgIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwKKyAgICAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNDMywgMHgwM0MzLCAweDAzQTgsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsCisgICAgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LAorICAgIDB4MDJDOCwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyM0UsIDB4MDIzNCwKKyAgICAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsCisgICAgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELAorICAgIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywKKyAgICAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsCisgICAgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLAorICAgIDB4MDNDMywgMHgwM0MzLCAweDAzQzMsIDB4MDNBOCwgMHgwM0E4LCAweDAzQTgsIDB4MDNBOCwgMHgwM0E4LCAweDAzQTgsIDB4MDM4RSwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwKKyAgICAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsCisgICAgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LAorICAgIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywKKyAgICAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsCisgICAgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LAorICAgIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwKKyAgICAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsCisgICAgMHgwM0E4LCAweDAzQTgsIDB4MDNBOCwgMHgwM0E4LCAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzNzUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLAorICAgIDB4MDM0OCwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwKKyAgICAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMkIsCisgICAgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LAorICAgIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwKKyAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsCisgICAgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLAorICAgIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwKKyAgICAweDAzOEUsIDB4MDM4RSwgMHgwMzhFLCAweDAzOEUsIDB4MDM4RSwgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzQ4LCAweDAzNDgsCisgICAgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLAorICAgIDB4MDJBQSwgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwKKyAgICAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsCisgICAgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LAorICAgIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwKKyAgICAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsCisgICAgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LAorICAgIDB4MDM3NSwgMHgwMzc1LCAweDAzNzUsIDB4MDM3NSwgMHgwMzc1LCAweDAzNzUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzMzMsIDB4MDMzMywKKyAgICAweDAzMzMsIDB4MDMxRiwgMHgwMzFGLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsCisgICAgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjIyLAorICAgIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwKKyAgICAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsCisgICAgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLAorICAgIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwKKyAgICAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsCisgICAgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNUUsIDB4MDM1RSwgMHgwMzVFLCAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzFGLAorICAgIDB4MDMxRiwgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywKKyAgICAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsCisgICAgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLAorICAgIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwKKyAgICAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsCisgICAgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LAorICAgIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwKKyAgICAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzNDgsIDB4MDM0OCwgMHgwMzQ4LCAweDAzNDgsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMEMsCisgICAgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwgMHgwMkZBLCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgMHgwMjhGLAorICAgIDB4MDI4RiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwKKyAgICAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsCisgICAgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LAorICAgIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwKKyAgICAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsCisgICAgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LAorICAgIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMzMsIDB4MDMzMywgMHgwMzMzLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDJGQSwKKyAgICAweDAyRkEsIDB4MDJGQSwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsCisgICAgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LAorICAgIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwKKyAgICAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsCisgICAgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLAorICAgIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwKKyAgICAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsCisgICAgMHgwMzFGLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMUYsIDB4MDMxRiwgMHgwMzFGLCAweDAzMUYsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLAorICAgIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwKKyAgICAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsCisgICAgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LAorICAgIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwKKyAgICAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsCisgICAgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LAorICAgIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwKKyAgICAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAzMEMsIDB4MDMwQywgMHgwMzBDLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsCisgICAgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LAorICAgIDB4MDI3NiwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwKKyAgICAweDAyMDgsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsCisgICAgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLAorICAgIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwKKyAgICAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsCisgICAgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LAorICAgIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJGQSwgMHgwMkZBLCAweDAyRkEsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwKKyAgICAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNkEsCisgICAgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LAorICAgIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwKKyAgICAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsCisgICAgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLAorICAgIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywKKyAgICAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsCisgICAgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LAorICAgIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyODIsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI2QSwKKyAgICAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsCisgICAgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLAorICAgIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywKKyAgICAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsCisgICAgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLAorICAgIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwKKyAgICAweDAyRTgsIDB4MDJFOCwgMHgwMkU4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkI5LCAweDAyQjksCisgICAgMHgwMkI5LCAweDAyQUEsIDB4MDJBQSwgMHgwMkFBLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyODIsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLAorICAgIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwKKyAgICAweDAxRjgsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksCisgICAgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLAorICAgIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwKKyAgICAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsCisgICAgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LAorICAgIDB4MDJEOCwgMHgwMkQ4LCAweDAyRDgsIDB4MDJEOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJBQSwKKyAgICAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsCisgICAgMHgwMjUzLCAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LAorICAgIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwKKyAgICAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsCisgICAgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LAorICAgIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwKKyAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsCisgICAgMHgwMkM4LCAweDAyQzgsIDB4MDJDOCwgMHgwMkM4LCAweDAyQzgsIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLAorICAgIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwKKyAgICAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsCisgICAgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LAorICAgIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwKKyAgICAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsCisgICAgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLAorICAgIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwKKyAgICAweDAyQjksIDB4MDJCOSwgMHgwMkI5LCAweDAyQjksIDB4MDJCOSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjlDLCAweDAyOEYsCisgICAgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI3NiwgMHgwMjc2LCAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LAorICAgIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwKKyAgICAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxOUUsCisgICAgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LAorICAgIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwKKyAgICAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsCisgICAgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLAorICAgIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDJBQSwgMHgwMkFBLCAweDAyQUEsIDB4MDI5QywgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjlDLCAweDAyOUMsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwKKyAgICAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsCisgICAgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LAorICAgIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwKKyAgICAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsCisgICAgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LAorICAgIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwKKyAgICAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsCisgICAgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjlDLCAweDAyOUMsIDB4MDI5QywgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLAorICAgIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNTMsIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwKKyAgICAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsCisgICAgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LAorICAgIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwKKyAgICAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsCisgICAgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLAorICAgIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwKKyAgICAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4RiwgMHgwMjhGLCAweDAyOEYsIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsCisgICAgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLAorICAgIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwKKyAgICAweDAxREEsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksCisgICAgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLAorICAgIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwKKyAgICAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsCisgICAgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLAorICAgIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjgyLCAweDAyODIsIDB4MDI4MiwgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwKKyAgICAweDAyNkEsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsCisgICAgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLAorICAgIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwKKyAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsCisgICAgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLAorICAgIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywKKyAgICAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsCisgICAgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI3NiwgMHgwMjc2LCAweDAyNzYsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLAorICAgIDB4MDI1RSwgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwKKyAgICAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsCisgICAgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMThGLAorICAgIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywKKyAgICAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsCisgICAgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLAorICAgIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwKKyAgICAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjZBLCAweDAyNkEsIDB4MDI2QSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsCisgICAgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LAorICAgIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwKKyAgICAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsCisgICAgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LAorICAgIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywKKyAgICAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsCisgICAgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLAorICAgIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1RSwgMHgwMjVFLCAweDAyNUUsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNDksIDB4MDI0OSwKKyAgICAweDAyNDksIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsCisgICAgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELAorICAgIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwKKyAgICAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsCisgICAgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLAorICAgIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwKKyAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsCisgICAgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjUzLCAweDAyNTMsIDB4MDI1MywgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDIzRSwgMHgwMjNFLAorICAgIDB4MDIzRSwgMHgwMjNFLCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwKKyAgICAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsCisgICAgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLAorICAgIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwKKyAgICAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsCisgICAgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LAorICAgIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwKKyAgICAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyNDksIDB4MDI0OSwgMHgwMjQ5LCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsCisgICAgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLAorICAgIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwKKyAgICAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsCisgICAgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLAorICAgIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwKKyAgICAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsCisgICAgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELAorICAgIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjNFLCAweDAyM0UsIDB4MDIzRSwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIyQiwKKyAgICAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsCisgICAgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLAorICAgIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwKKyAgICAweDAxODEsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsCisgICAgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LAorICAgIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwKKyAgICAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsCisgICAgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMzQsIDB4MDIzNCwgMHgwMjM0LCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjIyLAorICAgIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwKKyAgICAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsCisgICAgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLAorICAgIDB4MDE3RCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwKKyAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsCisgICAgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LAorICAgIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwKKyAgICAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyQiwgMHgwMjJCLCAweDAyMkIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksCisgICAgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjAwLCAweDAyMDAsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLAorICAgIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwKKyAgICAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsCisgICAgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLAorICAgIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywKKyAgICAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsCisgICAgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLAorICAgIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMjIsIDB4MDIyMiwgMHgwMjIyLCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwKKyAgICAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksCisgICAgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLAorICAgIDB4MDFBRiwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwKKyAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsCisgICAgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LAorICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwKKyAgICAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsCisgICAgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxOSwgMHgwMjE5LCAweDAyMTksIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLAorICAgIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwKKyAgICAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQTksCisgICAgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LAorICAgIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwKKyAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LAorICAgIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwKKyAgICAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjEwLCAweDAyMTAsIDB4MDIxMCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsCisgICAgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLAorICAgIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwKKyAgICAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsCisgICAgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LAorICAgIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwKKyAgICAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsCisgICAgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LAorICAgIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDgsIDB4MDIwOCwgMHgwMjA4LCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwKKyAgICAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsCisgICAgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LAorICAgIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwKKyAgICAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDQsCisgICAgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLAorICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwKKyAgICAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsCisgICAgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMjAwLCAweDAyMDAsIDB4MDIwMCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LAorICAgIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwKKyAgICAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsCisgICAgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLAorICAgIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwKKyAgICAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsCisgICAgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwKKyAgICAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjgsIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsCisgICAgMHgwMUYwLCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LAorICAgIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwKKyAgICAweDAxOTksIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsCisgICAgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLAorICAgIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywKKyAgICAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LAorICAgIDB4MDFGOCwgMHgwMUY4LCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUYwLCAweDAxRjAsIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwKKyAgICAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsCisgICAgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk0LAorICAgIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwKKyAgICAweDAxNjgsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsCisgICAgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLAorICAgIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwKKyAgICAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsCisgICAgMHgwMUYwLCAweDAxRjAsIDB4MDFGMCwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFOSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLAorICAgIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwKKyAgICAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsCisgICAgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LAorICAgIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwKKyAgICAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsCisgICAgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLAorICAgIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwKKyAgICAweDAxRTksIDB4MDFFOSwgMHgwMUU5LCAweDAxRTksIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsCisgICAgMHgwMURBLCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLAorICAgIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwKKyAgICAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsCisgICAgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLAorICAgIDB4MDEzQiwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwKKyAgICAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsCisgICAgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLAorICAgIDB4MDFFMSwgMHgwMUUxLCAweDAxRTEsIDB4MDFFMSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwKKyAgICAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsCisgICAgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLAorICAgIDB4MDE4QSwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwKKyAgICAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsCisgICAgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LAorICAgIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywKKyAgICAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsCisgICAgMHgwMURBLCAweDAxREEsIDB4MDFEQSwgMHgwMURBLCAweDAxREEsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELAorICAgIDB4MDFDRCwgMHgwMUNELCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwKKyAgICAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsCisgICAgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLAorICAgIDB4MDE1QywgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwKKyAgICAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsCisgICAgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLAorICAgIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywKKyAgICAweDAxRDQsIDB4MDFENCwgMHgwMUQ0LCAweDAxRDQsIDB4MDFENCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsCisgICAgMHgwMUM3LCAweDAxQzcsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LAorICAgIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4MSwKKyAgICAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsCisgICAgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LAorICAgIDB4MDEzNSwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwKKyAgICAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsCisgICAgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLAorICAgIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDRCwgMHgwMUNELCAweDAxQ0QsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzAsIDB4MDFDMCwKKyAgICAweDAxQzAsIDB4MDFDMCwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsCisgICAgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLAorICAgIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwKKyAgICAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsCisgICAgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLAorICAgIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwKKyAgICAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsCisgICAgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUM3LCAweDAxQzcsIDB4MDFDNywgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFCQSwgMHgwMUJBLAorICAgIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwKKyAgICAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsCisgICAgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU1LAorICAgIDB4MDE1NSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwKKyAgICAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsCisgICAgMHgwMTExLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LAorICAgIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwKKyAgICAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQzAsIDB4MDFDMCwgMHgwMUMwLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsCisgICAgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LAorICAgIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwKKyAgICAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsCisgICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLAorICAgIDB4MDEyRiwgMHgwMTJDLCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwKKyAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsCisgICAgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLAorICAgIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUJBLCAweDAxQkEsIDB4MDFCQSwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwKKyAgICAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksCisgICAgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LAorICAgIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwKKyAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsCisgICAgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLAorICAgIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwKKyAgICAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsCisgICAgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQjQsIDB4MDFCNCwgMHgwMUI0LCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUE5LAorICAgIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwKKyAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsCisgICAgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLAorICAgIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywKKyAgICAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsCisgICAgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LAorICAgIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwKKyAgICAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBRiwgMHgwMUFGLCAweDAxQUYsIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsCisgICAgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE4RiwgMHgwMThGLAorICAgIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwKKyAgICAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEEsCisgICAgMHgwMTRBLCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LAorICAgIDB4MDEyOSwgMHgwMTI3LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwQywKKyAgICAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsCisgICAgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELAorICAgIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTksIDB4MDFBOSwgMHgwMUE5LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwKKyAgICAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThBLCAweDAxOEEsCisgICAgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLAorICAgIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywKKyAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksCisgICAgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLAorICAgIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwKKyAgICAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsCisgICAgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDFBNCwgMHgwMUE0LCAweDAxQTQsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LAorICAgIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxODYsIDB4MDE4NiwKKyAgICAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsCisgICAgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LAorICAgIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywKKyAgICAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsCisgICAgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLAorICAgIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwKKyAgICAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTlFLCAweDAxOUUsIDB4MDE5RSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsCisgICAgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLAorICAgIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwKKyAgICAweDAxNjQsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsCisgICAgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LAorICAgIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwKKyAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsCisgICAgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERCLAorICAgIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTksIDB4MDE5OSwgMHgwMTk5LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwKKyAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsCisgICAgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLAorICAgIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwKKyAgICAweDAxNDEsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsCisgICAgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LAorICAgIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwKKyAgICAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsCisgICAgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMTk0LCAweDAxOTQsIDB4MDE5NCwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLAorICAgIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3OCwKKyAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsCisgICAgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTNFLAorICAgIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwKKyAgICAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsCisgICAgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLAorICAgIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwKKyAgICAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEYsIDB4MDE4RiwgMHgwMThGLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsCisgICAgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc0LAorICAgIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwKKyAgICAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsCisgICAgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLAorICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwKKyAgICAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsCisgICAgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LAorICAgIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4QSwgMHgwMThBLCAweDAxOEEsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwKKyAgICAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzAsCisgICAgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LAorICAgIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwKKyAgICAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsCisgICAgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LAorICAgIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwKKyAgICAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsCisgICAgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTg2LCAweDAxODYsIDB4MDE4NiwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLAorICAgIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywKKyAgICAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsCisgICAgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LAorICAgIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywKKyAgICAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsCisgICAgMHgwMTAyLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLAorICAgIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywKKyAgICAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE4MSwgMHgwMTgxLCAweDAxODEsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsCisgICAgMHgwMTdELCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLAorICAgIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwKKyAgICAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsCisgICAgMHgwMTM1LCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLAorICAgIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwKKyAgICAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsCisgICAgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ2LAorICAgIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTdELCAweDAxN0QsIDB4MDE3RCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwKKyAgICAweDAxNzgsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsCisgICAgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLAorICAgIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzMiwKKyAgICAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsCisgICAgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwKKyAgICAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsCisgICAgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzgsIDB4MDE3OCwgMHgwMTc4LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LAorICAgIDB4MDE3NCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwKKyAgICAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsCisgICAgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLAorICAgIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwKKyAgICAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsCisgICAgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LAorICAgIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwKKyAgICAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3NCwgMHgwMTc0LCAweDAxNzQsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsCisgICAgMHgwMTcwLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLAorICAgIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywKKyAgICAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsCisgICAgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LAorICAgIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwKKyAgICAweDAwRkMsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsCisgICAgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LAorICAgIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTcwLCAweDAxNzAsIDB4MDE3MCwgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywKKyAgICAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsCisgICAgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LAorICAgIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywKKyAgICAweDAxMkMsIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsCisgICAgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLAorICAgIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwKKyAgICAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsCisgICAgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2QywgMHgwMTZDLCAweDAxNkMsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LAorICAgIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwKKyAgICAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsCisgICAgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LAorICAgIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwKKyAgICAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsCisgICAgMHgwMEZBLCAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LAorICAgIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywKKyAgICAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY4LCAweDAxNjgsIDB4MDE2OCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsCisgICAgMHgwMTY0LCAweDAxNjQsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LAorICAgIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwKKyAgICAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjcsCisgICAgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLAorICAgIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwKKyAgICAweDAwRjgsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsCisgICAgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLAorICAgIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjQsIDB4MDE2NCwgMHgwMTY0LCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwKKyAgICAweDAxNjAsIDB4MDE2MCwgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsCisgICAgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLAorICAgIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywKKyAgICAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsCisgICAgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LAorICAgIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywKKyAgICAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsCisgICAgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE2MCwgMHgwMTYwLCAweDAxNjAsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLAorICAgIDB4MDE1QywgMHgwMTVDLCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwKKyAgICAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsCisgICAgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LAorICAgIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywKKyAgICAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsCisgICAgMHgwMEY2LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUxLAorICAgIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQyLCAweDAwRDIsIDB4MDBEMCwKKyAgICAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTVDLCAweDAxNUMsIDB4MDE1QywgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsCisgICAgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLAorICAgIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwKKyAgICAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsCisgICAgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLAorICAgIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwKKyAgICAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsCisgICAgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLAorICAgIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1OCwgMHgwMTU4LCAweDAxNTgsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwKKyAgICAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsCisgICAgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LAorICAgIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwKKyAgICAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsCisgICAgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LAorICAgIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwKKyAgICAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsCisgICAgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTU1LCAweDAxNTUsIDB4MDE1NSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLAorICAgIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwKKyAgICAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsCisgICAgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLAorICAgIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwKKyAgICAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsCisgICAgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLAorICAgIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwKKyAgICAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNTEsIDB4MDE1MSwgMHgwMTUxLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsCisgICAgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLAorICAgIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwKKyAgICAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsCisgICAgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LAorICAgIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwKKyAgICAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsCisgICAgMHgwMERELCAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENDLAorICAgIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0RSwgMHgwMTRFLCAweDAxNEUsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwKKyAgICAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsCisgICAgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLAorICAgIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwKKyAgICAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDQsCisgICAgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLAorICAgIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwKKyAgICAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsCisgICAgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTRBLCAweDAxNEEsIDB4MDE0QSwgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LAorICAgIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwKKyAgICAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsCisgICAgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LAorICAgIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwKKyAgICAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsCisgICAgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELAorICAgIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwKKyAgICAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDcsIDB4MDE0NywgMHgwMTQ3LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsCisgICAgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLAorICAgIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwKKyAgICAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsCisgICAgMHgwMTE1LCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLAorICAgIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwKKyAgICAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsCisgICAgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLAorICAgIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQ0LCAweDAxNDQsIDB4MDE0NCwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwKKyAgICAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsCisgICAgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LAorICAgIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywKKyAgICAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsCisgICAgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELAorICAgIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwKKyAgICAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsCisgICAgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxNDEsIDB4MDE0MSwgMHgwMTQxLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLAorICAgIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwKKyAgICAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsCisgICAgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLAorICAgIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwKKyAgICAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsCisgICAgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLAorICAgIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwKKyAgICAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzRSwgMHgwMTNFLCAweDAxM0UsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsCisgICAgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLAorICAgIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwKKyAgICAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsCisgICAgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZDLAorICAgIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQSwKKyAgICAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksCisgICAgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LAorICAgIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTNCLCAweDAxM0IsIDB4MDEzQiwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwKKyAgICAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsCisgICAgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLAorICAgIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwKKyAgICAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsCisgICAgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LAorICAgIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywKKyAgICAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsCisgICAgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzgsIDB4MDEzOCwgMHgwMTM4LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LAorICAgIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywKKyAgICAweDAxMkMsIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsCisgICAgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLAorICAgIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwKKyAgICAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsCisgICAgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LAorICAgIDB4MDBENiwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywKKyAgICAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzNSwgMHgwMTM1LCAweDAxMzUsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsCisgICAgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LAorICAgIDB4MDEyOSwgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwKKyAgICAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsCisgICAgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LAorICAgIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwKKyAgICAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsCisgICAgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBDRiwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywgMHgwMEM2LAorICAgIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMzIsIDB4MDEzMiwgMHgwMTMyLCAweDAxMkYsIDB4MDEyRiwKKyAgICAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsCisgICAgMHgwMTI3LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LAorICAgIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwKKyAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjYsCisgICAgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU1LAorICAgIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwKKyAgICAweDAwRDMsIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsCisgICAgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyRiwgMHgwMTJGLCAweDAxMkYsIDB4MDEyQywgMHgwMTJDLAorICAgIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwKKyAgICAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsCisgICAgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LAorICAgIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwKKyAgICAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsCisgICAgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLAorICAgIDB4MDBEMywgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzUsIDB4MDBDNSwKKyAgICAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTJDLCAweDAxMkMsIDB4MDEyQywgMHgwMTI5LCAweDAxMjksCisgICAgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLAorICAgIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwKKyAgICAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsCisgICAgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LAorICAgIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywKKyAgICAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsCisgICAgMHgwMEQyLCAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LAorICAgIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjksIDB4MDEyOSwgMHgwMTI5LCAweDAxMjcsIDB4MDEyNywKKyAgICAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsCisgICAgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTEzLAorICAgIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwKKyAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsCisgICAgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLAorICAgIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwKKyAgICAweDAwRDAsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzMsCisgICAgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNywgMHgwMTI3LCAweDAxMjcsIDB4MDEyNCwgMHgwMTI0LAorICAgIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywKKyAgICAweDAxMUMsIDB4MDExQywgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsCisgICAgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLAorICAgIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwKKyAgICAweDAwRjAsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTAsCisgICAgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLAorICAgIDB4MDBEMCwgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM2LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzMsIDB4MDBDMywKKyAgICAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTI0LCAweDAxMjQsIDB4MDEyNCwgMHgwMTIxLCAweDAxMjEsCisgICAgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLAorICAgIDB4MDExQSwgMHgwMTFBLCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwKKyAgICAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsCisgICAgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLAorICAgIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwKKyAgICAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsCisgICAgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLAorICAgIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjEsIDB4MDEyMSwgMHgwMTIxLCAweDAxMUYsIDB4MDExRiwKKyAgICAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsCisgICAgMHgwMTE4LCAweDAxMTgsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLAorICAgIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwKKyAgICAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsCisgICAgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLAorICAgIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwKKyAgICAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzAsCisgICAgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFGLCAweDAxMUYsIDB4MDExRiwgMHgwMTFDLAorICAgIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwKKyAgICAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsCisgICAgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLAorICAgIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwKKyAgICAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsCisgICAgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLAorICAgIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzAsIDB4MDBDMCwKKyAgICAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUMsIDB4MDExQywgMHgwMTFDLCAweDAxMUEsCisgICAgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLAorICAgIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwKKyAgICAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsCisgICAgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLAorICAgIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBEQiwKKyAgICAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsCisgICAgMHgwMENDLCAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLAorICAgIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExQSwgMHgwMTFBLCAweDAxMUEsIDB4MDExOCwKKyAgICAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsCisgICAgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LAorICAgIDB4MDEwNiwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwKKyAgICAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsCisgICAgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLAorICAgIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywKKyAgICAweDAwQ0IsIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkUsCisgICAgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE4LCAweDAxMTgsIDB4MDExOCwgMHgwMTE1LAorICAgIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwKKyAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsCisgICAgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LAorICAgIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwKKyAgICAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsCisgICAgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0UsIDB4MDBDQywgMHgwMENCLAorICAgIDB4MDBDQSwgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkUsIDB4MDBCRSwKKyAgICAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTUsIDB4MDExNSwgMHgwMTE1LCAweDAxMTMsCisgICAgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLAorICAgIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwKKyAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsCisgICAgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU2LAorICAgIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwKKyAgICAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsCisgICAgMHgwMENBLCAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELAorICAgIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMywgMHgwMTEzLCAweDAxMTMsIDB4MDExMSwKKyAgICAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsCisgICAgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLAorICAgIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwKKyAgICAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsCisgICAgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LAorICAgIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwKKyAgICAweDAwQzksIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsCisgICAgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTExLCAweDAxMTEsIDB4MDExMSwgMHgwMTBFLAorICAgIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwKKyAgICAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsCisgICAgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLAorICAgIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwKKyAgICAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERELCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDYsCisgICAgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LAorICAgIDB4MDBDNywgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsIDB4MDBCQywKKyAgICAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsIDB4MDEwRSwgMHgwMTBFLCAweDAxMEUsCisgICAgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LAorICAgIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwKKyAgICAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsCisgICAgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLAorICAgIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwKKyAgICAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQywgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsCisgICAgMHgwMEM3LCAweDAwQzYsIDB4MDBDNSwgMHgwMEM1LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsIDB4MDBCQywgMHgwMEJCLAorICAgIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywgMHgwMTBDLCAweDAxMEMsIDB4MDEwQywKKyAgICAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsCisgICAgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLAorICAgIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwKKyAgICAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsCisgICAgMHgwMEUxLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREIsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LAorICAgIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDQSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNywKKyAgICAweDAwQzYsIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkQsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsCisgICAgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLCAweDAxMEEsIDB4MDEwQSwgMHgwMTBBLAorICAgIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwKKyAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsCisgICAgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEYwLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELAorICAgIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwKKyAgICAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBERCwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDksIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQ0LCAweDAwRDMsCisgICAgMHgwMEQyLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM2LAorICAgIDB4MDBDNSwgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkQsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwKKyAgICAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsIDB4MDEwOCwgMHgwMTA4LCAweDAxMDgsCisgICAgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLAorICAgIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwKKyAgICAweDAwRjYsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYwLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsCisgICAgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEVBLCAweDAwRTgsIDB4MDBFOCwgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMERFLAorICAgIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERCLCAweDAwREEsIDB4MDBEQSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDYsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwKKyAgICAweDAwRDIsIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENFLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM2LCAweDAwQzUsCisgICAgMHgwMEM0LCAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkQsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwgMHgwMEI5LAorICAgIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwgMHgwMTA2LCAweDAxMDYsIDB4MDEwNiwKKyAgICAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsCisgICAgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LAorICAgIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwKKyAgICAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsIDB4MDBFNiwgMHgwMEU2LCAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMSwgMHgwMEUxLCAweDAwRTAsIDB4MDBFMCwgMHgwMERFLCAweDAwREUsCisgICAgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ5LCAweDAwRDcsIDB4MDBENywgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDMsIDB4MDBEMiwgMHgwMEQwLAorICAgIDB4MDBEMCwgMHgwMENGLCAweDAwQ0YsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENCLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM5LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM2LCAweDAwQzUsIDB4MDBDNCwKKyAgICAweDAwQzQsIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkQsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwgMHgwMEI5LCAweDAwQjgsCisgICAgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LCAweDAxMDQsIDB4MDEwNCwgMHgwMTA0LAorICAgIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwKKyAgICAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY0LCAweDAwRjQsCisgICAgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjAsIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFQiwgMHgwMEVCLCAweDAwRUEsIDB4MDBFQSwgMHgwMEVBLAorICAgIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwgMHgwMEU1LCAweDAwRTUsIDB4MDBFMywgMHgwMEUzLCAweDAwRTEsIDB4MDBFMSwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERFLCAweDAwREQsIDB4MDBERCwKKyAgICAweDAwREIsIDB4MDBEQiwgMHgwMERBLCAweDAwREEsIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBENCwgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwRDAsCisgICAgMHgwMENGLCAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0MsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM2LCAweDAwQzUsIDB4MDBDNCwgMHgwMEM0LAorICAgIDB4MDBDMywgMHgwMEMxLCAweDAwQzEsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkYsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwgMHgwMEI5LCAweDAwQjgsIDB4MDBCOCwKKyAgICAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDIsCisgICAgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLAorICAgIDB4MDBGQywgMHgwMEZBLCAweDAwRkEsIDB4MDBGQSwgMHgwMEY4LCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjYsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjQsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjIsIDB4MDBGMiwKKyAgICAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLCAweDAwRjAsIDB4MDBFRiwgMHgwMEVGLCAweDAwRUQsIDB4MDBFRCwgMHgwMEVELCAweDAwRUIsIDB4MDBFQiwgMHgwMEVBLCAweDAwRUEsIDB4MDBFQSwgMHgwMEU4LCAweDAwRTgsCisgICAgMHgwMEU2LCAweDAwRTYsIDB4MDBFNSwgMHgwMEU1LCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwRTAsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERCLAorICAgIDB4MDBEQSwgMHgwMERBLCAweDAwRDksIDB4MDBEOSwgMHgwMEQ3LCAweDAwRDcsIDB4MDBENiwgMHgwMEQ2LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMiwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwKKyAgICAweDAwQ0UsIDB4MDBDRSwgMHgwMENDLCAweDAwQ0IsIDB4MDBDQiwgMHgwMENBLCAweDAwQ0EsIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzUsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzMsCisgICAgMHgwMEMxLCAweDAwQzAsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkUsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwgMHgwMEI5LCAweDAwQjgsIDB4MDBCOCwgMHgwMEI3LAorICAgIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKKyAgICAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGRSwgMHgwMEZFLCAweDAwRkUsIDB4MDBGQywgMHgwMEZDLCAweDAwRkMsIDB4MDBGQywgMHgwMEZDLCAweDAwRkEsIDB4MDBGQSwgMHgwMEZBLCAweDAwRkEsCisgICAgMHgwMEZBLCAweDAwRjgsIDB4MDBGOCwgMHgwMEY4LCAweDAwRjgsIDB4MDBGNiwgMHgwMEY2LCAweDAwRjYsIDB4MDBGNCwgMHgwMEY0LCAweDAwRjQsIDB4MDBGMiwgMHgwMEYyLCAweDAwRjIsIDB4MDBGMCwgMHgwMEYwLAorICAgIDB4MDBGMCwgMHgwMEVGLCAweDAwRUYsIDB4MDBFRiwgMHgwMEVELCAweDAwRUQsIDB4MDBFRCwgMHgwMEVCLCAweDAwRUIsIDB4MDBFQSwgMHgwMEVBLCAweDAwRUEsIDB4MDBFOCwgMHgwMEU4LCAweDAwRTYsIDB4MDBFNiwKKyAgICAweDAwRTUsIDB4MDBFNSwgMHgwMEUzLCAweDAwRTMsIDB4MDBFMywgMHgwMEUxLCAweDAwRTEsIDB4MDBFMCwgMHgwMEUwLCAweDAwREUsIDB4MDBERSwgMHgwMERELCAweDAwREQsIDB4MDBEQiwgMHgwMERCLCAweDAwREEsCisgICAgMHgwMERBLCAweDAwRDksIDB4MDBENywgMHgwMEQ3LCAweDAwRDYsIDB4MDBENiwgMHgwMEQ0LCAweDAwRDQsIDB4MDBEMywgMHgwMEQzLCAweDAwRDIsIDB4MDBEMCwgMHgwMEQwLCAweDAwQ0YsIDB4MDBDRiwgMHgwMENFLAorICAgIDB4MDBDQywgMHgwMENDLCAweDAwQ0IsIDB4MDBDQiwgMHgwMENBLCAweDAwQzksIDB4MDBDOSwgMHgwMEM3LCAweDAwQzcsIDB4MDBDNiwgMHgwMEM1LCAweDAwQzUsIDB4MDBDNCwgMHgwMEMzLCAweDAwQzMsIDB4MDBDMSwKICAgICAweDAwQzAsIDB4MDBDMCwgMHgwMEJGLCAweDAwQkUsIDB4MDBCRSwgMHgwMEJELCAweDAwQkMsIDB4MDBCQywgMHgwMEJCLCAweDAwQkEsIDB4MDBCQSwgMHgwMEI5LCAweDAwQjgsIDB4MDBCOCwgMHgwMEI3LCAweDAwQjYKIH07CiAjZGVmaW5lIGtEZWx0YVVzZWRUb0J1aWxkVGFibGUgIDMyCmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta0tlcm5lbDMzTWFza0ZpbHRlci5jcHAgYi9zcmMvZWZmZWN0cy9Ta0tlcm5lbDMzTWFza0ZpbHRlci5jcHAKaW5kZXggOTQyNmRkOS4uMTU2OGE0ZiAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvU2tLZXJuZWwzM01hc2tGaWx0ZXIuY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrS2VybmVsMzNNYXNrRmlsdGVyLmNwcApAQCAtMjAsMTggKzIwLDE4IEBACiAgICAgZHN0LT5mQm91bmRzID0gc3JjLmZCb3VuZHM7CiAgICAgZHN0LT5mQm91bmRzLmluc2V0KC0xLCAtMSk7CiAgICAgZHN0LT5mRm9ybWF0ID0gU2tNYXNrOjprQThfRm9ybWF0OwotICAgIAorCiAgICAgaWYgKE5VTEwgPT0gc3JjLmZJbWFnZSkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBkc3QtPmZSb3dCeXRlcyA9IGRzdC0+ZkJvdW5kcy53aWR0aCgpOwogICAgIHNpemVfdCBzaXplID0gZHN0LT5jb21wdXRlSW1hZ2VTaXplKCk7CiAgICAgaWYgKDAgPT0gc2l6ZSkgewogICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gdG9vIGJpZyB0byBhbGxvY2F0ZSwgYWJvcnQKICAgICB9CiAgICAgZHN0LT5mSW1hZ2UgPSBTa01hc2s6OkFsbG9jSW1hZ2Uoc2l6ZSk7Ci0gICAgCisKICAgICBjb25zdCBpbnQgaCA9IHNyYy5mQm91bmRzLmhlaWdodCgpOwogICAgIGNvbnN0IGludCB3ID0gc3JjLmZCb3VuZHMud2lkdGgoKTsKICAgICBjb25zdCBpbnQgc3JjUkIgPSBzcmMuZlJvd0J5dGVzOwpAQCAtNDAsMTMgKzQwLDEzIEBACiAKICAgICB1aW50OF90KiBzcmNSb3dzWzNdOwogICAgIHVpbnQ4X3Qgc3RvcmFnZVszXVszXTsKLSAgICAKKwogICAgIHNyY1Jvd3NbMF0gPSBzdG9yYWdlWzBdOwogICAgIHNyY1Jvd3NbMV0gPSBzdG9yYWdlWzFdOwogICAgIHNyY1Jvd3NbMl0gPSBzdG9yYWdlWzJdOwogCiAgICAgdW5zaWduZWQgc2NhbGUgPSBmUGVyY2VudDI1NjsKLSAgICAKKwogICAgIGZvciAoaW50IHkgPSAtMTsgeSA8PSBoOyB5KyspIHsKICAgICAgICAgdWludDhfdCogZHN0Um93ID0gZHN0SW1hZ2U7CiAgICAgICAgIGZvciAoaW50IHggPSAtMTsgeCA8PSB3OyB4KyspIHsKQEAgLTYxLDkgKzYxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUHRyKys7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgaW50IHZhbHVlID0gdGhpcy0+Y29tcHV0ZVZhbHVlKHNyY1Jvd3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzY2FsZSA8IDI1NikgewogICAgICAgICAgICAgICAgIHZhbHVlID0gU2tBbHBoYUJsZW5kKHZhbHVlLCBzcmNSb3dzWzFdWzFdLCBzY2FsZSk7CiAgICAgICAgICAgICB9CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICB2YWx1ZSArPSBmS2VybmVsW2ldW2pdICogc3JjUm93c1tpXVtqXTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZhbHVlID4+PSBmU2hpZnQ7CiAKICAgICBpZiAodmFsdWUgPCAwKSB7CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta0xheWVyRHJhd0xvb3Blci5jcHAgYi9zcmMvZWZmZWN0cy9Ta0xheWVyRHJhd0xvb3Blci5jcHAKaW5kZXggYTMyY2Y5Yi4uZTRhZWYxOCAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvU2tMYXllckRyYXdMb29wZXIuY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrTGF5ZXJEcmF3TG9vcGVyLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBACiAjZW5kaWYKIAogICAgIGJ1ZmZlci53cml0ZUludChmQ291bnQpOwotICAgIAorCiAgICAgUmVjKiByZWMgPSBmUmVjczsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZDb3VudDsgaSsrKSB7CiAgICAgICAgIGJ1ZmZlci53cml0ZUludChyZWMtPmZJbmZvLmZGbGFnc01hc2spOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKICAgICAvLyB3ZSdyZSBpbiByZXZlcnNlIG9yZGVyLCBzbyBmaXggaXQgbm93CiAgICAgZlJlY3MgPSBSZWM6OlJldmVyc2UoZlJlY3MpOwotICAgIAorCiAjaWZkZWYgU0tfREVCVUcKICAgICB7CiAgICAgICAgIFJlYyogcmVjID0gZlJlY3M7CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta0xpZ2h0aW5nSW1hZ2VGaWx0ZXIuY3BwIGIvc3JjL2VmZmVjdHMvU2tMaWdodGluZ0ltYWdlRmlsdGVyLmNwcAppbmRleCA5NzAwMjQ5Li5jNzNlODg0IDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9Ta0xpZ2h0aW5nSW1hZ2VGaWx0ZXIuY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrTGlnaHRpbmdJbWFnZUZpbHRlci5jcHAKQEAgLTczMCw3ICs3MzAsNyBAQAogU2tJbWFnZUZpbHRlciogU2tMaWdodGluZ0ltYWdlRmlsdGVyOjpDcmVhdGVEaXN0YW50TGl0U3BlY3VsYXIoCiAgICAgY29uc3QgU2tQb2ludDMmIGRpcmVjdGlvbiwgU2tDb2xvciBsaWdodENvbG9yLCBTa1NjYWxhciBzdXJmYWNlU2NhbGUsCiAgICAgU2tTY2FsYXIga3MsIFNrU2NhbGFyIHNoaW5pbmVzcykgewotICAgIHJldHVybiBTa05FV19BUkdTKFNrU3BlY3VsYXJMaWdodGluZ0ltYWdlRmlsdGVyLCAKKyAgICByZXR1cm4gU2tORVdfQVJHUyhTa1NwZWN1bGFyTGlnaHRpbmdJbWFnZUZpbHRlciwKICAgICAgICAgKFNrTkVXX0FSR1MoU2tEaXN0YW50TGlnaHQsIChkaXJlY3Rpb24sIGxpZ2h0Q29sb3IpKSwgc3VyZmFjZVNjYWxlLCBrcywgc2hpbmluZXNzKSk7CiB9CiAKQEAgLTkyNyw3ICs5MjcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNrTkVXX0FSR1MoU2tTcG90TGlnaHQsIChyYW5kb21fcG9pbnQzKHJhbmRvbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9wb2ludDMocmFuZG9tKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLT5uZXh0VVNjYWxhcjEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLT5uZXh0VVNjYWxhcjEoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbS0+bmV4dFVTY2FsYXIxKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbS0+bmV4dFUoKSkpOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta01vcnBob2xvZ3lJbWFnZUZpbHRlci5jcHAgYi9zcmMvZWZmZWN0cy9Ta01vcnBob2xvZ3lJbWFnZUZpbHRlci5jcHAKaW5kZXggY2JmYTVjZi4uNGJkZTNmMCAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvU2tNb3JwaG9sb2d5SW1hZ2VGaWx0ZXIuY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrTW9ycGhvbG9neUltYWdlRmlsdGVyLmNwcApAQCAtNDQ0LDcgKzQ0NCw3IEBACiAgICAgR3JDb250ZXh0KiBjb250ZXh0ID0gc3JjVGV4dHVyZS0+Z2V0Q29udGV4dCgpOwogICAgIHNyY1RleHR1cmUtPnJlZigpOwogICAgIEdyQ29udGV4dDo6QXV0b01hdHJpeCBhdm0oY29udGV4dCwgR3JNYXRyaXg6OkkoKSk7Ci0gICAgR3JDb250ZXh0OjpBdXRvQ2xpcCBhY3MoY29udGV4dCwgR3JSZWN0OjpNYWtlV0goU2tJbnRUb1NjYWxhcihzcmNUZXh0dXJlLT53aWR0aCgpKSwgCisgICAgR3JDb250ZXh0OjpBdXRvQ2xpcCBhY3MoY29udGV4dCwgR3JSZWN0OjpNYWtlV0goU2tJbnRUb1NjYWxhcihzcmNUZXh0dXJlLT53aWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHNyY1RleHR1cmUtPmhlaWdodCgpKSkpOwogICAgIEdyVGV4dHVyZURlc2MgZGVzYzsKICAgICBkZXNjLmZGbGFncyA9IGtSZW5kZXJUYXJnZXRfR3JUZXh0dXJlRmxhZ0JpdCB8IGtOb1N0ZW5jaWxfR3JUZXh0dXJlRmxhZ0JpdDsKQEAgLTQ1Nyw5ICs0NTcsOSBAQAogICAgICAgICBhcHBseV9tb3JwaG9sb2d5X3Bhc3MoY29udGV4dCwgc3JjVGV4dHVyZSwgcmVjdCwgcmFkaXVzLmZXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoVHlwZSwgR3IxREtlcm5lbEVmZmVjdDo6a1hfRGlyZWN0aW9uKTsKICAgICAgICAgU2tJUmVjdCBjbGVhclJlY3QgPSBTa0lSZWN0OjpNYWtlWFlXSCgKLSAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJGbG9vclRvSW50KHJlY3QuZkxlZnQpLCAKKyAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJGbG9vclRvSW50KHJlY3QuZkxlZnQpLAogICAgICAgICAgICAgICAgICAgICBTa1NjYWxhckZsb29yVG9JbnQocmVjdC5mQm90dG9tKSwKLSAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJGbG9vclRvSW50KHJlY3Qud2lkdGgoKSksIAorICAgICAgICAgICAgICAgICAgICBTa1NjYWxhckZsb29yVG9JbnQocmVjdC53aWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgcmFkaXVzLmZIZWlnaHQpOwogICAgICAgICBjb250ZXh0LT5jbGVhcigmY2xlYXJSZWN0LCAweDApOwogICAgICAgICBzcmNUZXh0dXJlLT51bnJlZigpOwpkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvU2tUYWJsZUNvbG9yRmlsdGVyLmNwcCBiL3NyYy9lZmZlY3RzL1NrVGFibGVDb2xvckZpbHRlci5jcHAKaW5kZXggZjMxNmM1Mi4uZmNmYjQ0NCAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvU2tUYWJsZUNvbG9yRmlsdGVyLmNwcAorKysgYi9zcmMvZWZmZWN0cy9Ta1RhYmxlQ29sb3JGaWx0ZXIuY3BwCkBAIC02NSwzNyArNjUsMzcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCB1aW50OF90IGdJZGVudGl0eVRhYmxlW10gPSB7Ci0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCi0gICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwgCi0gICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgCi0gICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwgCi0gICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywgCi0gICAgMHgyOCwgMHgyOSwgMHgyQSwgMHgyQiwgMHgyQywgMHgyRCwgMHgyRSwgMHgyRiwgCi0gICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgCi0gICAgMHgzOCwgMHgzOSwgMHgzQSwgMHgzQiwgMHgzQywgMHgzRCwgMHgzRSwgMHgzRiwgCi0gICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgCi0gICAgMHg0OCwgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgCi0gICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgCi0gICAgMHg1OCwgMHg1OSwgMHg1QSwgMHg1QiwgMHg1QywgMHg1RCwgMHg1RSwgMHg1RiwgCi0gICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgCi0gICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgCi0gICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgCi0gICAgMHg3OCwgMHg3OSwgMHg3QSwgMHg3QiwgMHg3QywgMHg3RCwgMHg3RSwgMHg3RiwgCi0gICAgMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgCi0gICAgMHg4OCwgMHg4OSwgMHg4QSwgMHg4QiwgMHg4QywgMHg4RCwgMHg4RSwgMHg4RiwgCi0gICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgCi0gICAgMHg5OCwgMHg5OSwgMHg5QSwgMHg5QiwgMHg5QywgMHg5RCwgMHg5RSwgMHg5RiwgCi0gICAgMHhBMCwgMHhBMSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywgCi0gICAgMHhBOCwgMHhBOSwgMHhBQSwgMHhBQiwgMHhBQywgMHhBRCwgMHhBRSwgMHhBRiwgCi0gICAgMHhCMCwgMHhCMSwgMHhCMiwgMHhCMywgMHhCNCwgMHhCNSwgMHhCNiwgMHhCNywgCi0gICAgMHhCOCwgMHhCOSwgMHhCQSwgMHhCQiwgMHhCQywgMHhCRCwgMHhCRSwgMHhCRiwgCi0gICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNywgCi0gICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhDRSwgMHhDRiwgCi0gICAgMHhEMCwgMHhEMSwgMHhEMiwgMHhEMywgMHhENCwgMHhENSwgMHhENiwgMHhENywgCi0gICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERiwgCi0gICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNywgCi0gICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRiwgCi0gICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNywgCisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwKKyAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorICAgIDB4MjgsIDB4MjksIDB4MkEsIDB4MkIsIDB4MkMsIDB4MkQsIDB4MkUsIDB4MkYsCisgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKKyAgICAweDM4LCAweDM5LCAweDNBLCAweDNCLCAweDNDLCAweDNELCAweDNFLCAweDNGLAorICAgIDB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCisgICAgMHg0OCwgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwKKyAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAorICAgIDB4NTgsIDB4NTksIDB4NUEsIDB4NUIsIDB4NUMsIDB4NUQsIDB4NUUsIDB4NUYsCisgICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKKyAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLAorICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCisgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHg3QiwgMHg3QywgMHg3RCwgMHg3RSwgMHg3RiwKKyAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorICAgIDB4ODgsIDB4ODksIDB4OEEsIDB4OEIsIDB4OEMsIDB4OEQsIDB4OEUsIDB4OEYsCisgICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKyAgICAweDk4LCAweDk5LCAweDlBLCAweDlCLCAweDlDLCAweDlELCAweDlFLCAweDlGLAorICAgIDB4QTAsIDB4QTEsIDB4QTIsIDB4QTMsIDB4QTQsIDB4QTUsIDB4QTYsIDB4QTcsCisgICAgMHhBOCwgMHhBOSwgMHhBQSwgMHhBQiwgMHhBQywgMHhBRCwgMHhBRSwgMHhBRiwKKyAgICAweEIwLCAweEIxLCAweEIyLCAweEIzLCAweEI0LCAweEI1LCAweEI2LCAweEI3LAorICAgIDB4QjgsIDB4QjksIDB4QkEsIDB4QkIsIDB4QkMsIDB4QkQsIDB4QkUsIDB4QkYsCisgICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNywKKyAgICAweEM4LCAweEM5LCAweENBLCAweENCLCAweENDLCAweENELCAweENFLCAweENGLAorICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsCisgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERiwKKyAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LAorICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsCisgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNywKICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweEZGCiB9OwogCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICBTa0FTU0VSVChzaXplIDw9IHNpemVvZihzdG9yYWdlKSk7CiAKIC8vICAgIFNrRGVidWdmKCJyYXcgJWQgcGFja2VkICVkXG4iLCBjb3VudCAqIDI1Niwgc2l6ZSk7Ci0gICAgCisKICAgICBidWZmZXIud3JpdGVJbnQoZkZsYWdzKTsKICAgICBidWZmZXIud3JpdGVCeXRlQXJyYXkoc3RvcmFnZSwgc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta1RhYmxlTWFza0ZpbHRlci5jcHAgYi9zcmMvZWZmZWN0cy9Ta1RhYmxlTWFza0ZpbHRlci5jcHAKaW5kZXggNDk1YWZmYi4uZDFmZTEzNCAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvU2tUYWJsZU1hc2tGaWx0ZXIuY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrVGFibGVNYXNrRmlsdGVyLmNwcApAQCAtMzYsMTYgKzM2LDE2IEBACiAgICAgZHN0LT5mUm93Qnl0ZXMgPSBTa0FsaWduNChkc3QtPmZCb3VuZHMud2lkdGgoKSk7CiAgICAgZHN0LT5mRm9ybWF0ID0gU2tNYXNrOjprQThfRm9ybWF0OwogICAgIGRzdC0+ZkltYWdlID0gTlVMTDsKLSAgICAKKwogICAgIGlmIChzcmMuZkltYWdlKSB7CiAgICAgICAgIGRzdC0+ZkltYWdlID0gU2tNYXNrOjpBbGxvY0ltYWdlKGRzdC0+Y29tcHV0ZUltYWdlU2l6ZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUCA9IHNyYy5mSW1hZ2U7CiAgICAgICAgIHVpbnQ4X3QqIGRzdFAgPSBkc3QtPmZJbWFnZTsKICAgICAgICAgY29uc3QgdWludDhfdCogdGFibGUgPSBmVGFibGU7CiAgICAgICAgIGludCBkc3RXaWR0aCA9IGRzdC0+ZkJvdW5kcy53aWR0aCgpOwogICAgICAgICBpbnQgZXh0cmFaZXJvcyA9IGRzdC0+ZlJvd0J5dGVzIC0gZHN0V2lkdGg7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IHkgPSBkc3QtPmZCb3VuZHMuaGVpZ2h0KCkgLSAxOyB5ID49IDA7IC0teSkgewogICAgICAgICAgICAgZm9yIChpbnQgeCA9IGRzdFdpZHRoIC0gMTsgeCA+PSAwOyAtLXgpIHsKICAgICAgICAgICAgICAgICBkc3RQW3hdID0gdGFibGVbc3JjUFt4XV07CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9Ta1Rlc3RJbWFnZUZpbHRlcnMuY3BwIGIvc3JjL2VmZmVjdHMvU2tUZXN0SW1hZ2VGaWx0ZXJzLmNwcAppbmRleCBlNjc5NzZkLi5hZWI1ZDc5IDEwMDc1NQotLS0gYS9zcmMvZWZmZWN0cy9Ta1Rlc3RJbWFnZUZpbHRlcnMuY3BwCisrKyBiL3NyYy9lZmZlY3RzL1NrVGVzdEltYWdlRmlsdGVycy5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0lQb2ludCogbG9jKSB7CiAgICAgU2tWZWN0b3IgdmVjOwogICAgIG1hdHJpeC5tYXBWZWN0b3JzKCZ2ZWMsICZmT2Zmc2V0LCAxKTsKLSAgICAKKwogICAgIGxvYy0+ZlggKz0gU2tTY2FsYXJSb3VuZFRvSW50KHZlYy5mWCk7CiAgICAgbG9jLT5mWSArPSBTa1NjYWxhclJvdW5kVG9JbnQodmVjLmZZKTsKICAgICAqcmVzdWx0ID0gc3JjOwpAQCAtNjUsMTEgKzY1LDExIEBACiAgICAgaWYgKCFmT3V0ZXIgJiYgIWZJbm5lcikgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFmT3V0ZXIgfHwgIWZJbm5lcikgewogICAgICAgICByZXR1cm4gKGZPdXRlciA/IGZPdXRlciA6IGZJbm5lciktPmZpbHRlckltYWdlKHByb3h5LCBzcmMsIGN0bSwgcmVzdWx0LCBsb2MpOwogICAgIH0KLSAgICAKKwogICAgIFNrQml0bWFwIHRtcDsKICAgICByZXR1cm4gZklubmVyLT5maWx0ZXJJbWFnZShwcm94eSwgc3JjLCBjdG0sICZ0bXAsIGxvYykgJiYKICAgICAgICAgICAgZk91dGVyLT5maWx0ZXJJbWFnZShwcm94eSwgdG1wLCBjdG0sIHJlc3VsdCwgbG9jKTsKQEAgLTgxLDExICs4MSwxMSBAQAogICAgIGlmICghZk91dGVyICYmICFmSW5uZXIpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmICghZk91dGVyIHx8ICFmSW5uZXIpIHsKICAgICAgICAgcmV0dXJuIChmT3V0ZXIgPyBmT3V0ZXIgOiBmSW5uZXIpLT5maWx0ZXJCb3VuZHMoc3JjLCBjdG0sIGRzdCk7CiAgICAgfQotICAgIAorCiAgICAgU2tJUmVjdCB0bXA7CiAgICAgcmV0dXJuIGZJbm5lci0+ZmlsdGVyQm91bmRzKHNyYywgY3RtLCAmdG1wKSAmJgogICAgICAgICAgICBmT3V0ZXItPmZpbHRlckJvdW5kcyh0bXAsIGN0bSwgZHN0KTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIH0KIAogICAgIFNrSVJlY3QgdG90YWxCb3VuZHM7Ci0gICAgCisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZDb3VudDsgKytpKSB7CiAgICAgICAgIFNrSW1hZ2VGaWx0ZXIqIGZpbHRlciA9IGZGaWx0ZXJzW2ldOwogICAgICAgICBTa0lSZWN0IHI7CkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNyY1B0ciA9ICZzcmM7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGZNb2RlcykgewogICAgICAgICAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKChTa1hmZXJtb2RlOjpNb2RlKWZNb2Rlc1tpXSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICBpZiAoc2NhbGUgPiBTS19TY2FsYXIxIHx8IHNjYWxlIDw9IDApIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGludCBkc3RXID0gU2tTY2FsYXJSb3VuZFRvSW50KHNyYy53aWR0aCgpICogc2NhbGUpOwogICAgIGludCBkc3RIID0gU2tTY2FsYXJSb3VuZFRvSW50KHNyYy5oZWlnaHQoKSAqIHNjYWxlKTsKICAgICBpZiAoZHN0VyA8IDEpIHsKQEAgLTMzNiw3ICszMzYsNyBAQAogCiB2b2lkIFNrRG93blNhbXBsZUltYWdlRmlsdGVyOjpmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYgYnVmZmVyKSBjb25zdCB7CiAgICAgdGhpcy0+SU5IRVJJVEVEOjpmbGF0dGVuKGJ1ZmZlcik7Ci0gICAgCisKICAgICBidWZmZXIud3JpdGVTY2FsYXIoZlNjYWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrQ2xhbXBSYW5nZS5jcHAgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tDbGFtcFJhbmdlLmNwcAppbmRleCAxZjdjY2UzLi5jNGJmOGIxIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tDbGFtcFJhbmdlLmNwcAorKysgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tDbGFtcFJhbmdlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgIGV4dHJhQ291bnQgPSBvcmlnaW5hbENvdW50IC0gY291bnQ7CiAgICAgICAgIGV4ID0gZnggKyBkeCAqIGNvdW50OwogICAgIH0KLSAgICAKKwogICAgIGJvb2wgZG9Td2FwID0gZHggPCAwOwogCiAgICAgaWYgKGRvU3dhcCkgewpkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXIuY3BwIGIvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXIuY3BwCmluZGV4IGJlNWIxYjAuLjZiY2MxYmEgMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta0dyYWRpZW50U2hhZGVyLmNwcAorKysgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tHcmFkaWVudFNoYWRlci5jcHAKQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgRVhQQU5EXzFfQ09MT1IoY29sb3JDb3VudCk7Ci0gICAgCisKICAgICByZXR1cm4gU2tORVdfQVJHUyhTa1R3b1BvaW50UmFkaWFsR3JhZGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0LCBzdGFydFJhZGl1cywgZW5kLCBlbmRSYWRpdXMsIGNvbG9ycywgcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvdW50LCBtb2RlLCBtYXBwZXIpKTsKQEAgLTY5OCw4ICs2OTgsOCBAQAogICAgIH0KIH0KIAotdm9pZCBHckdMR3JhZGllbnRTdGFnZTo6ZW1pdENvbG9yTG9va3VwKEdyR0xTaGFkZXJCdWlsZGVyKiBidWlsZGVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0TmFtZSwgCit2b2lkIEdyR0xHcmFkaWVudFN0YWdlOjplbWl0Q29sb3JMb29rdXAoR3JHTFNoYWRlckJ1aWxkZXIqIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogb3V0cHV0Q29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc2FtcGxlck5hbWUpIHsKICAgICBidWlsZGVyLT5mU2FtcGxlQ29vcmRzLnByaW50ZigidmVjMiglcywgJXMpIiwgdE5hbWUsCkBAIC03MTAsNyArNzEwLDcgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLUdyR3JhZGllbnRFZmZlY3Q6OkdyR3JhZGllbnRFZmZlY3QoR3JDb250ZXh0KiBjdHgsIAorR3JHcmFkaWVudEVmZmVjdDo6R3JHcmFkaWVudEVmZmVjdChHckNvbnRleHQqIGN0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tHcmFkaWVudFNoYWRlckJhc2UmIHNoYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JTYW1wbGVyU3RhdGUqIHNhbXBsZXIpCiAgICAgOiBmVGV4dHVyZSAoTlVMTCkKQEAgLTczMSw3ICs3MzEsNyBAQAogICAgIGRlc2MuZkNvbmZpZyA9IFNrQml0bWFwQ29uZmlnMkdyUGl4ZWxDb25maWcoYml0bWFwLmNvbmZpZygpKTsKICAgICBmQXRsYXMgPSBHclRleHR1cmVTdHJpcEF0bGFzOjpHZXRBdGxhcyhkZXNjKTsKICAgICBHckFzc2VydChOVUxMICE9IGZBdGxhcyk7Ci0gCisKICAgICBmUm93ID0gZkF0bGFzLT5sb2NrUm93KGJpdG1hcCk7CiAgICAgaWYgKC0xICE9IGZSb3cpIHsKICAgICAgICAgZllDb29yZCA9IGZBdGxhcy0+Z2V0WU9mZnNldChmUm93KSArIEdSX1NjYWxhckhhbGYgKgpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICAgICAgIGZUZXh0dXJlID0gR3JMb2NrQ2FjaGVkQml0bWFwVGV4dHVyZShjdHgsIGJpdG1hcCwgc2FtcGxlci0+dGV4dHVyZVBhcmFtcygpKTsKICAgICAgICAgU2tTYWZlUmVmKGZUZXh0dXJlKTsKICAgICAgICAgZllDb29yZCA9IEdSX1NjYWxhckhhbGY7Ci0gCisKICAgICAgICAgLy8gVW5sb2NrIGltbWVkaWF0ZWx5LCB0aGlzIGlzIG5vdCBncmVhdCwgYnV0IHdlIGRvbid0IGhhdmUgYSB3YXkgb2YKICAgICAgICAgLy8ga25vd2luZyB3aGVuIGVsc2UgdG8gdW5sb2NrIGl0IGN1cnJlbnRseSwgc28gaXQgbWF5IGdldCBwdXJnZWQgZnJvbQogICAgICAgICAvLyB0aGUgY2FjaGUsIGJ1dCBpdCdsbCBzdGlsbCBiZSByZWYnZCB1bnRpbCBpdCdzIG5vIGxvbmdlciBiZWluZyB1c2VkLgpAQCAtNzYxLDcgKzc2MSw3IEBACiAgICAgcmV0dXJuIGZVc2VUZXh0dXJlID8gMSA6IDA7CiB9CiAKLUdyVGV4dHVyZSogR3JHcmFkaWVudEVmZmVjdDo6dGV4dHVyZSh1bnNpZ25lZCBpbnQgaW5kZXgpIAorR3JUZXh0dXJlKiBHckdyYWRpZW50RWZmZWN0Ojp0ZXh0dXJlKHVuc2lnbmVkIGludCBpbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgewogICAgIEdyQXNzZXJ0KGZVc2VUZXh0dXJlICYmIDAgPT0gaW5kZXgpOwogICAgIHJldHVybiBmVGV4dHVyZTsKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta0dyYWRpZW50U2hhZGVyUHJpdi5oIGIvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXJQcml2LmgKaW5kZXggNGMzYjZjNy4uMzc5NTk2NyAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXJQcml2LmgKKysrIGIvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXJQcml2LmgKQEAgLTIwMSw3ICsyMDEsNyBAQAogICogVGhlIGludGVwcmV0YXRpb24gb2YgdGhlIHRleHR1cmUgbWF0cml4IGRlcGVuZHMgb24gdGhlIHNhbXBsZSBtb2RlLiBUaGUKICAqIHRleHR1cmUgbWF0cml4IGlzIGFwcGxpZWQgYm90aCB3aGVuIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFyZSBleHBsaWNpdAogICogYW5kICB3aGVuIHZlcnRleCBwb3NpdGlvbnMgYXJlIHVzZWQgYXMgdGV4dHVyZSAgY29vcmRpbmF0ZXMuIEluIHRoZSBsYXR0ZXIKLSAqIGNhc2UgdGhlIHRleHR1cmUgbWF0cml4IGlzIGFwcGxpZWQgdG8gdGhlIHByZS12aWV3LW1hdHJpeCBwb3NpdGlvbiAKKyAqIGNhc2UgdGhlIHRleHR1cmUgbWF0cml4IGlzIGFwcGxpZWQgdG8gdGhlIHByZS12aWV3LW1hdHJpeCBwb3NpdGlvbgogICogdmFsdWVzLgogICoKICAqIE5vcm1hbCBTYW1wbGVNb2RlCkBAIC0yMTIsOCArMjEyLDggQEAKICAqICAoMCwwKSBpbiB0aGUgcG9zdC1tYXRyaXggc3BhY2UgaXMgY2VudGVyIG9mIHRoZSByYWRpYWwgZ3JhZGllbnQuCiAgKiBSYWRpYWwyR3JhZGllbnQKICAqICAgTWF0cml4IHRyYW5zZm9ybXMgdG8gc3BhY2Ugd2hlcmUgZmlyc3QgY2lyY2xlIGlzIGNlbnRlcmVkIGF0IHRoZQotICogICBvcmlnaW4uIFRoZSBzZWNvbmQgY2lyY2xlIHdpbGwgYmUgY2VudGVyZWQgKHgsIDApIHdoZXJlIHggbWF5IGJlIAotICogICAwIGFuZCBpcyBwcm92aWRlZCBieSBzZXRSYWRpYWwyUGFyYW1zLiBUaGUgcG9zdC1tYXRyaXggc3BhY2UgaXMgCisgKiAgIG9yaWdpbi4gVGhlIHNlY29uZCBjaXJjbGUgd2lsbCBiZSBjZW50ZXJlZCAoeCwgMCkgd2hlcmUgeCBtYXkgYmUKKyAqICAgMCBhbmQgaXMgcHJvdmlkZWQgYnkgc2V0UmFkaWFsMlBhcmFtcy4gVGhlIHBvc3QtbWF0cml4IHNwYWNlIGlzCiAgKiAgIG5vcm1hbGl6ZWQgc3VjaCB0aGF0IDEgaXMgdGhlIHNlY29uZCByYWRpdXMgLSBmaXJzdCByYWRpdXMuCiAgKiBTd2VlcEdyYWRpZW50CiAgKiAgVGhlIGFuZ2xlIGZyb20gdGhlIG9yaWdpbiBvZiB0ZXh0dXJlIGNvb3JkaW5hdGVzIGluIHBvc3QtbWF0cml4IHNwYWNlCkBAIC0yMjYsNyArMjI2LDcgQEAKIGNsYXNzIEdyR3JhZGllbnRFZmZlY3QgOiBwdWJsaWMgR3JDdXN0b21TdGFnZSB7CiBwdWJsaWM6CiAKLSAgICBHckdyYWRpZW50RWZmZWN0KEdyQ29udGV4dCogY3R4LCBjb25zdCBTa0dyYWRpZW50U2hhZGVyQmFzZSYgc2hhZGVyLCAKKyAgICBHckdyYWRpZW50RWZmZWN0KEdyQ29udGV4dCogY3R4LCBjb25zdCBTa0dyYWRpZW50U2hhZGVyQmFzZSYgc2hhZGVyLAogICAgICAgICAgICAgICAgICAgICAgR3JTYW1wbGVyU3RhdGUqIHNhbXBsZXIpOwogCiAgICAgdmlydHVhbCB+R3JHcmFkaWVudEVmZmVjdCgpOwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAKICAgICAvLyBlbWl0IGNvZGUgdGhhdCBnZXRzIGEgZnJhZ21lbnQncyBjb2xvciBmcm9tIGFuIGV4cHJlc3Npb24gZm9yIHQ7IGZvciBub3cKICAgICAvLyB0aGlzIGFsd2F5cyB1c2VzIHRoZSB0ZXh0dXJlLCBidXQgZm9yIHNpbXBsZXIgY2FzZXMgd2UnbGwgYmUgYWJsZSB0byBsZXJwCi0gICAgdm9pZCBlbWl0Q29sb3JMb29rdXAoR3JHTFNoYWRlckJ1aWxkZXIqIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIHQsIAorICAgIHZvaWQgZW1pdENvbG9yTG9va3VwKEdyR0xTaGFkZXJCdWlsZGVyKiBidWlsZGVyLCBjb25zdCBjaGFyKiB0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG91dHB1dENvbG9yLCBjb25zdCBjaGFyKiBzYW1wbGVyTmFtZSk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tMaW5lYXJHcmFkaWVudC5jcHAgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tMaW5lYXJHcmFkaWVudC5jcHAKaW5kZXggZWYzOTc2OC4uMzU3ZDFkYiAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrTGluZWFyR3JhZGllbnQuY3BwCisrKyBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta0xpbmVhckdyYWRpZW50LmNwcApAQCAtNjMsMTAgKzYzLDEwIEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIFNrTGluZWFyR3JhZGllbnQ6OlNrTGluZWFyR3JhZGllbnQoY29uc3QgU2tQb2ludCBwdHNbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrQ29sb3IgY29sb3JzW10sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1NjYWxhciBwb3NbXSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrQ29sb3IgY29sb3JzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrU2NhbGFyIHBvc1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sb3JDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTaGFkZXI6OlRpbGVNb2RlIG1vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NoYWRlcjo6VGlsZU1vZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tVbml0TWFwcGVyKiBtYXBwZXIpCiAgICAgOiBTa0dyYWRpZW50U2hhZGVyQmFzZShjb2xvcnMsIHBvcywgY29sb3JDb3VudCwgbW9kZSwgbWFwcGVyKQogICAgICwgZlN0YXJ0KHB0c1swXSkKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IqIGRzdEMsIGNvbnN0IFNrUE1Db2xvciogY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b2dnbGUsIGludCBjb3VudCk7CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlcGxhY2VkIGJ5CiAvLyBzaGFkZVNwYW5fbGluZWFyX3ZlcnRpY2FsX2xlcnAoKSBvbmNlIENocm9tZSBoYXMgYmVlbiB3ZWFuZWQgb2ZmIG9mIGl0Lgogdm9pZCBzaGFkZVNwYW5fbGluZWFyX3ZlcnRpY2FsKFRpbGVQcm9jIHByb2MsIFNrRml4ZWQgZHgsIFNrRml4ZWQgZngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBkc3RDLApkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrTGluZWFyR3JhZGllbnQuaCBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta0xpbmVhckdyYWRpZW50LmgKaW5kZXggNzA1YzM3Yy4uMTI5YTU2YSAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrTGluZWFyR3JhZGllbnQuaAorKysgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tMaW5lYXJHcmFkaWVudC5oCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgdmlydHVhbCB2b2lkIHNoYWRlU3BhbjE2KGludCB4LCBpbnQgeSwgdWludDE2X3QgZHN0Q1tdLCBpbnQgY291bnQpIFNLX09WRVJSSURFOwogICAgIHZpcnR1YWwgQml0bWFwVHlwZSBhc0FCaXRtYXAoU2tCaXRtYXAqLCBTa01hdHJpeCosIFRpbGVNb2RlKikgY29uc3QgU0tfT1ZFUlJJREU7CiAgICAgdmlydHVhbCBHcmFkaWVudFR5cGUgYXNBR3JhZGllbnQoR3JhZGllbnRJbmZvKiBpbmZvKSBjb25zdCBTS19PVkVSUklERTsKLSAgICB2aXJ0dWFsIEdyQ3VzdG9tU3RhZ2UqIGFzTmV3Q3VzdG9tU3RhZ2UoR3JDb250ZXh0KiBjb250ZXh0LCAKKyAgICB2aXJ0dWFsIEdyQ3VzdG9tU3RhZ2UqIGFzTmV3Q3VzdG9tU3RhZ2UoR3JDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZSogc2FtcGxlcikgY29uc3QgU0tfT1ZFUlJJREU7CiAKICAgICBTS19ERUNMQVJFX1BVQkxJQ19GTEFUVEVOQUJMRV9ERVNFUklBTElaQVRJT05fUFJPQ1MoU2tMaW5lYXJHcmFkaWVudCkKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1JhZGlhbEdyYWRpZW50LmNwcCBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1JhZGlhbEdyYWRpZW50LmNwcAppbmRleCBkYmRlOTVhLi5lMTEzNTZhIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tSYWRpYWxHcmFkaWVudC5jcHAKKysrIGIvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrUmFkaWFsR3JhZGllbnQuY3BwCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICB9CiB9CiAKLVNrU2hhZGVyOjpCaXRtYXBUeXBlIFNrUmFkaWFsR3JhZGllbnQ6OmFzQUJpdG1hcChTa0JpdG1hcCogYml0bWFwLCAKK1NrU2hhZGVyOjpCaXRtYXBUeXBlIFNrUmFkaWFsR3JhZGllbnQ6OmFzQUJpdG1hcChTa0JpdG1hcCogYml0bWFwLAogICAgIFNrTWF0cml4KiBtYXRyaXgsIFNrU2hhZGVyOjpUaWxlTW9kZSogeHkpIGNvbnN0IHsKICAgICBpZiAoYml0bWFwKSB7CiAgICAgICAgIHRoaXMtPmdldEdyYWRpZW50VGFibGVCaXRtYXAoYml0bWFwKTsKQEAgLTUwMCw3ICs1MDAsNyBAQAogY2xhc3MgR3JSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBHckdyYWRpZW50RWZmZWN0IHsKIHB1YmxpYzoKIAotICAgIEdyUmFkaWFsR3JhZGllbnQoR3JDb250ZXh0KiBjdHgsIAorICAgIEdyUmFkaWFsR3JhZGllbnQoR3JDb250ZXh0KiBjdHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1JhZGlhbEdyYWRpZW50JiBzaGFkZXIsCiAgICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZSogc2FtcGxlcikKICAgICAgICAgOiBJTkhFUklURUQoY3R4LCBzaGFkZXIsIHNhbXBsZXIpIHsKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1JhZGlhbEdyYWRpZW50X1RhYmxlLmggYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tSYWRpYWxHcmFkaWVudF9UYWJsZS5oCmluZGV4IDdkYjIzZGYuLjlhOGE1ZjggMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1JhZGlhbEdyYWRpZW50X1RhYmxlLmgKKysrIGIvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrUmFkaWFsR3JhZGllbnRfVGFibGUuaApAQCAtOCwxMzIgKzgsMTMyIEBACiAKIAogc3RhdGljIGNvbnN0IHVpbnQ4X3QgZ1NxcnQ4VGFibGVbXSA9IHsKLSAgICAweDAwLCAweDA1LCAweDA4LCAweDA5LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDEwLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE1LCAKLSAgICAweDE2LCAweDE3LCAweDE4LCAweDE4LCAweDE5LCAweDE5LCAweDFBLCAweDFCLCAweDFCLCAweDFDLCAweDFDLCAweDFELCAweDFELCAweDFFLCAweDFFLCAweDFGLCAKLSAgICAweDIwLCAweDIwLCAweDIwLCAweDIxLCAweDIxLCAweDIyLCAweDIyLCAweDIzLCAweDIzLCAweDI0LCAweDI0LCAweDI1LCAweDI1LCAweDI1LCAweDI2LCAweDI2LCAKLSAgICAweDI3LCAweDI3LCAweDI4LCAweDI4LCAweDI4LCAweDI5LCAweDI5LCAweDI5LCAweDJBLCAweDJBLCAweDJCLCAweDJCLCAweDJCLCAweDJDLCAweDJDLCAweDJDLCAKLSAgICAweDJELCAweDJELCAweDJELCAweDJFLCAweDJFLCAweDJFLCAweDJGLCAweDJGLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMxLCAweDMxLCAweDMxLCAweDMyLCAKLSAgICAweDMyLCAweDMyLCAweDMzLCAweDMzLCAweDMzLCAweDM0LCAweDM0LCAweDM0LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM2LCAweDM2LCAweDM2LCAweDM3LCAKLSAgICAweDM3LCAweDM3LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM5LCAweDM5LCAweDM5LCAweDM5LCAweDNBLCAweDNBLCAweDNBLCAweDNCLCAweDNCLCAweDNCLCAKLSAgICAweDNCLCAweDNDLCAweDNDLCAweDNDLCAweDNDLCAweDNELCAweDNELCAweDNELCAweDNELCAweDNFLCAweDNFLCAweDNFLCAweDNFLCAweDNGLCAweDNGLCAweDNGLCAKLSAgICAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQyLCAweDQyLCAweDQyLCAweDQyLCAweDQzLCAweDQzLCAweDQzLCAKLSAgICAweDQzLCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ1LCAweDQ1LCAweDQ1LCAweDQ1LCAweDQ1LCAweDQ2LCAweDQ2LCAweDQ2LCAweDQ2LCAweDQ3LCAweDQ3LCAKLSAgICAweDQ3LCAweDQ3LCAweDQ4LCAweDQ4LCAweDQ4LCAweDQ4LCAweDQ4LCAweDQ5LCAweDQ5LCAweDQ5LCAweDQ5LCAweDQ5LCAweDRBLCAweDRBLCAweDRBLCAweDRBLCAKLSAgICAweDRCLCAweDRCLCAweDRCLCAweDRCLCAweDRCLCAweDRDLCAweDRDLCAweDRDLCAweDRDLCAweDRDLCAweDRELCAweDRELCAweDRELCAweDRELCAweDRELCAweDRFLCAKLSAgICAweDRFLCAweDRFLCAweDRFLCAweDRFLCAweDRGLCAweDRGLCAweDRGLCAweDRGLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUxLCAweDUxLCAKLSAgICAweDUxLCAweDUxLCAweDUxLCAweDUyLCAweDUyLCAweDUyLCAweDUyLCAweDUyLCAweDUzLCAweDUzLCAweDUzLCAweDUzLCAweDUzLCAweDU0LCAweDU0LCAweDU0LCAKLSAgICAweDU0LCAweDU0LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU2LCAweDU2LCAweDU2LCAweDU2LCAweDU2LCAweDU3LCAweDU3LCAweDU3LCAKLSAgICAweDU3LCAweDU3LCAweDU4LCAweDU4LCAweDU4LCAweDU4LCAweDU4LCAweDU4LCAweDU5LCAweDU5LCAweDU5LCAweDU5LCAweDU5LCAweDU5LCAweDVBLCAweDVBLCAKLSAgICAweDVBLCAweDVBLCAweDVBLCAweDVCLCAweDVCLCAweDVCLCAweDVCLCAweDVCLCAweDVCLCAweDVDLCAweDVDLCAweDVDLCAweDVDLCAweDVDLCAweDVDLCAweDVELCAKLSAgICAweDVELCAweDVELCAweDVELCAweDVELCAweDVELCAweDVFLCAweDVFLCAweDVFLCAweDVFLCAweDVFLCAweDVFLCAweDVGLCAweDVGLCAweDVGLCAweDVGLCAweDVGLCAKLSAgICAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYxLCAweDYxLCAweDYxLCAweDYxLCAweDYxLCAweDYxLCAweDYyLCAweDYyLCAweDYyLCAKLSAgICAweDYyLCAweDYyLCAweDYyLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDY0LCAweDY0LCAweDY0LCAweDY0LCAweDY0LCAweDY0LCAweDY1LCAKLSAgICAweDY1LCAweDY1LCAweDY1LCAweDY1LCAweDY1LCAweDY1LCAweDY2LCAweDY2LCAweDY2LCAweDY2LCAweDY2LCAweDY2LCAweDY3LCAweDY3LCAweDY3LCAweDY3LCAKLSAgICAweDY3LCAweDY3LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAKLSAgICAweDZBLCAweDZBLCAweDZBLCAweDZBLCAweDZBLCAweDZBLCAweDZCLCAweDZCLCAweDZCLCAweDZCLCAweDZCLCAweDZCLCAweDZCLCAweDZDLCAweDZDLCAweDZDLCAKLSAgICAweDZDLCAweDZDLCAweDZDLCAweDZDLCAweDZELCAweDZELCAweDZELCAweDZELCAweDZELCAweDZELCAweDZELCAweDZFLCAweDZFLCAweDZFLCAweDZFLCAweDZFLCAKLSAgICAweDZFLCAweDZFLCAweDZGLCAweDZGLCAweDZGLCAweDZGLCAweDZGLCAweDZGLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAKLSAgICAweDcxLCAweDcxLCAweDcxLCAweDcxLCAweDcxLCAweDcxLCAweDcxLCAweDcyLCAweDcyLCAweDcyLCAweDcyLCAweDcyLCAweDcyLCAweDcyLCAweDczLCAweDczLCAKLSAgICAweDczLCAweDczLCAweDczLCAweDczLCAweDczLCAweDc0LCAweDc0LCAweDc0LCAweDc0LCAweDc0LCAweDc0LCAweDc0LCAweDc1LCAweDc1LCAweDc1LCAweDc1LCAKLSAgICAweDc1LCAweDc1LCAweDc1LCAweDc1LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc3LCAweDc3LCAweDc3LCAweDc3LCAweDc3LCAKLSAgICAweDc3LCAweDc3LCAweDc4LCAweDc4LCAweDc4LCAweDc4LCAweDc4LCAweDc4LCAweDc4LCAweDc4LCAweDc5LCAweDc5LCAweDc5LCAweDc5LCAweDc5LCAweDc5LCAKLSAgICAweDc5LCAweDc5LCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAKLSAgICAweDdCLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdELCAweDdELCAweDdELCAweDdELCAweDdELCAweDdELCAweDdELCAKLSAgICAweDdELCAweDdFLCAweDdFLCAweDdFLCAweDdFLCAweDdFLCAweDdFLCAweDdFLCAweDdFLCAweDdGLCAweDdGLCAweDdGLCAweDdGLCAweDdGLCAweDdGLCAweDdGLCAKLSAgICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAKLSAgICAweDgxLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAKLSAgICAweDgzLCAweDg0LCAweDg0LCAweDg0LCAweDg0LCAweDg0LCAweDg0LCAweDg0LCAweDg0LCAweDg1LCAweDg1LCAweDg1LCAweDg1LCAweDg1LCAweDg1LCAweDg1LCAKLSAgICAweDg1LCAweDg1LCAweDg2LCAweDg2LCAweDg2LCAweDg2LCAweDg2LCAweDg2LCAweDg2LCAweDg2LCAweDg3LCAweDg3LCAweDg3LCAweDg3LCAweDg3LCAweDg3LCAKLSAgICAweDg3LCAweDg3LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg5LCAweDg5LCAweDg5LCAweDg5LCAweDg5LCAKLSAgICAweDg5LCAweDg5LCAweDg5LCAweDg5LCAweDhBLCAweDhBLCAweDhBLCAweDhBLCAweDhBLCAweDhBLCAweDhBLCAweDhBLCAweDhCLCAweDhCLCAweDhCLCAweDhCLCAKLSAgICAweDhCLCAweDhCLCAweDhCLCAweDhCLCAweDhCLCAweDhDLCAweDhDLCAweDhDLCAweDhDLCAweDhDLCAweDhDLCAweDhDLCAweDhDLCAweDhDLCAweDhELCAweDhELCAKLSAgICAweDhELCAweDhELCAweDhELCAweDhELCAweDhELCAweDhELCAweDhELCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAKLSAgICAweDhGLCAweDhGLCAweDhGLCAweDhGLCAweDhGLCAweDhGLCAweDhGLCAweDhGLCAweDkwLCAweDkwLCAweDkwLCAweDkwLCAweDkwLCAweDkwLCAweDkwLCAweDkwLCAKLSAgICAweDkwLCAweDkwLCAweDkxLCAweDkxLCAweDkxLCAweDkxLCAweDkxLCAweDkxLCAweDkxLCAweDkxLCAweDkxLCAweDkyLCAweDkyLCAweDkyLCAweDkyLCAweDkyLCAKLSAgICAweDkyLCAweDkyLCAweDkyLCAweDkyLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDk0LCAweDk0LCAweDk0LCAKLSAgICAweDk0LCAweDk0LCAweDk0LCAweDk0LCAweDk0LCAweDk0LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAweDk1LCAKLSAgICAweDk2LCAweDk2LCAweDk2LCAweDk2LCAweDk2LCAweDk2LCAweDk2LCAweDk2LCAweDk2LCAweDk3LCAweDk3LCAweDk3LCAweDk3LCAweDk3LCAweDk3LCAweDk3LCAKLSAgICAweDk3LCAweDk3LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAKLSAgICAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlBLCAweDlBLCAweDlBLCAweDlBLCAweDlBLCAweDlBLCAweDlBLCAweDlBLCAweDlBLCAweDlCLCAKLSAgICAweDlCLCAweDlCLCAweDlCLCAweDlCLCAweDlCLCAweDlCLCAweDlCLCAweDlCLCAweDlCLCAweDlDLCAweDlDLCAweDlDLCAweDlDLCAweDlDLCAweDlDLCAweDlDLCAKLSAgICAweDlDLCAweDlDLCAweDlDLCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlFLCAweDlFLCAweDlFLCAKLSAgICAweDlFLCAweDlFLCAweDlFLCAweDlFLCAweDlFLCAweDlFLCAweDlFLCAweDlGLCAweDlGLCAweDlGLCAweDlGLCAweDlGLCAweDlGLCAweDlGLCAweDlGLCAweDlGLCAKLSAgICAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEEwLCAweEExLCAweEExLCAweEExLCAweEExLCAweEExLCAKLSAgICAweEExLCAweEExLCAweEExLCAweEExLCAweEExLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEzLCAKLSAgICAweEEzLCAweEEzLCAweEEzLCAweEEzLCAweEEzLCAweEEzLCAweEEzLCAweEEzLCAweEEzLCAweEE0LCAweEE0LCAweEE0LCAweEE0LCAweEE0LCAweEE0LCAweEE0LCAKLSAgICAweEE0LCAweEE0LCAweEE0LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE1LCAweEE2LCAweEE2LCAKLSAgICAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAKLSAgICAweEE3LCAweEE3LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE4LCAweEE5LCAweEE5LCAweEE5LCAKLSAgICAweEE5LCAweEE5LCAweEE5LCAweEE5LCAweEE5LCAweEE5LCAweEE5LCAweEE5LCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAKLSAgICAweEFBLCAweEFBLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFDLCAweEFDLCAweEFDLCAKLSAgICAweEFDLCAweEFDLCAweEFDLCAweEFDLCAweEFDLCAweEFDLCAweEFDLCAweEFDLCAweEFELCAweEFELCAweEFELCAweEFELCAweEFELCAweEFELCAweEFELCAweEFELCAKLSAgICAweEFELCAweEFELCAweEFELCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFFLCAweEFGLCAweEFGLCAKLSAgICAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAKLSAgICAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIxLCAweEIyLCAKLSAgICAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIyLCAweEIzLCAweEIzLCAweEIzLCAweEIzLCAweEIzLCAweEIzLCAKLSAgICAweEIzLCAweEIzLCAweEIzLCAweEIzLCAweEIzLCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAKLSAgICAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI1LCAweEI2LCAweEI2LCAweEI2LCAweEI2LCAKLSAgICAweEI2LCAweEI2LCAweEI2LCAweEI2LCAweEI2LCAweEI2LCAweEI2LCAweEI3LCAweEI3LCAweEI3LCAweEI3LCAweEI3LCAweEI3LCAweEI3LCAweEI3LCAweEI3LCAKLSAgICAweEI3LCAweEI3LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI5LCAweEI5LCAKLSAgICAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEI5LCAweEJBLCAweEJBLCAweEJBLCAweEJBLCAweEJBLCAweEJBLCAKLSAgICAweEJBLCAweEJBLCAweEJBLCAweEJBLCAweEJBLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAKLSAgICAweEJCLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJELCAweEJELCAweEJELCAKLSAgICAweEJELCAweEJELCAweEJELCAweEJELCAweEJELCAweEJELCAweEJELCAweEJELCAweEJELCAweEJFLCAweEJFLCAweEJFLCAweEJFLCAweEJFLCAweEJFLCAweEJFLCAKLSAgICAweEJFLCAweEJFLCAweEJFLCAweEJFLCAweEJFLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAweEJGLCAKLSAgICAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMxLCAweEMxLCAweEMxLCAKLSAgICAweEMxLCAweEMxLCAweEMxLCAweEMxLCAweEMxLCAweEMxLCAweEMxLCAweEMxLCAweEMxLCAweEMyLCAweEMyLCAweEMyLCAweEMyLCAweEMyLCAweEMyLCAweEMyLCAKLSAgICAweEMyLCAweEMyLCAweEMyLCAweEMyLCAweEMyLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAweEMzLCAKLSAgICAweEMzLCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM1LCAweEM1LCAweEM1LCAKLSAgICAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM1LCAweEM2LCAweEM2LCAweEM2LCAweEM2LCAweEM2LCAweEM2LCAKLSAgICAweEM2LCAweEM2LCAweEM2LCAweEM2LCAweEM2LCAweEM2LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAweEM3LCAKLSAgICAweEM3LCAweEM3LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM5LCAKLSAgICAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweEM5LCAweENBLCAweENBLCAweENBLCAweENBLCAKLSAgICAweENBLCAweENBLCAweENBLCAweENBLCAweENBLCAweENBLCAweENBLCAweENBLCAweENCLCAweENCLCAweENCLCAweENCLCAweENCLCAweENCLCAweENCLCAweENCLCAKLSAgICAweENCLCAweENCLCAweENCLCAweENCLCAweENCLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAKLSAgICAweENDLCAweENDLCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENELCAweENFLCAKLSAgICAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENFLCAweENGLCAweENGLCAweENGLCAweENGLCAKLSAgICAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAKLSAgICAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAweEQxLCAKLSAgICAweEQxLCAweEQxLCAweEQxLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAweEQyLCAKLSAgICAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQ0LCAweEQ0LCAweEQ0LCAKLSAgICAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ0LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAKLSAgICAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ1LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAKLSAgICAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAKLSAgICAweEQ3LCAweEQ3LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAweEQ4LCAKLSAgICAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweEQ5LCAweERBLCAweERBLCAKLSAgICAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERCLCAweERCLCAweERCLCAweERCLCAweERCLCAKLSAgICAweERCLCAweERCLCAweERCLCAweERCLCAweERCLCAweERCLCAweERCLCAweERCLCAweERCLCAweERDLCAweERDLCAweERDLCAweERDLCAweERDLCAweERDLCAweERDLCAKLSAgICAweERDLCAweERDLCAweERDLCAweERDLCAweERDLCAweERDLCAweERDLCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAKLSAgICAweERELCAweERELCAweERELCAweERELCAweERELCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAKLSAgICAweERFLCAweERFLCAweERFLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAweERGLCAKLSAgICAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUwLCAweEUxLCAKLSAgICAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUyLCAweEUyLCAweEUyLCAKLSAgICAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUyLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAKLSAgICAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEUzLCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAKLSAgICAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAKLSAgICAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU2LCAKLSAgICAweEU2LCAweEU2LCAweEU2LCAweEU2LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAKLSAgICAweEU3LCAweEU3LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAKLSAgICAweEU4LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAweEU5LCAKLSAgICAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVBLCAweEVCLCAweEVCLCAKLSAgICAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVDLCAweEVDLCAweEVDLCAKLSAgICAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVDLCAweEVELCAweEVELCAweEVELCAweEVELCAKLSAgICAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVELCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAKLSAgICAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAKLSAgICAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAKLSAgICAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAKLSAgICAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAKLSAgICAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAKLSAgICAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEYzLCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY0LCAKLSAgICAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAKLSAgICAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAweEY2LCAKLSAgICAweEY2LCAweEY2LCAweEY2LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAweEY3LCAKLSAgICAweEY3LCAweEY3LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAKLSAgICAweEY4LCAweEY4LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAweEY5LCAKLSAgICAweEY5LCAweEY5LCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAweEZBLCAKLSAgICAweEZBLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAKLSAgICAweEZCLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAweEZDLCAKLSAgICAweEZDLCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAweEZELCAKLSAgICAweEZELCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAKKyAgICAweDAwLCAweDA1LCAweDA4LCAweDA5LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDEwLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE1LAorICAgIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTgsIDB4MTksIDB4MTksIDB4MUEsIDB4MUIsIDB4MUIsIDB4MUMsIDB4MUMsIDB4MUQsIDB4MUQsIDB4MUUsIDB4MUUsIDB4MUYsCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMSwgMHgyMSwgMHgyMiwgMHgyMiwgMHgyMywgMHgyMywgMHgyNCwgMHgyNCwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNiwgMHgyNiwKKyAgICAweDI3LCAweDI3LCAweDI4LCAweDI4LCAweDI4LCAweDI5LCAweDI5LCAweDI5LCAweDJBLCAweDJBLCAweDJCLCAweDJCLCAweDJCLCAweDJDLCAweDJDLCAweDJDLAorICAgIDB4MkQsIDB4MkQsIDB4MkQsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkYsIDB4MkYsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzIsCisgICAgMHgzMiwgMHgzMiwgMHgzMywgMHgzMywgMHgzMywgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNiwgMHgzNiwgMHgzNiwgMHgzNywKKyAgICAweDM3LCAweDM3LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM5LCAweDM5LCAweDM5LCAweDM5LCAweDNBLCAweDNBLCAweDNBLCAweDNCLCAweDNCLCAweDNCLAorICAgIDB4M0IsIDB4M0MsIDB4M0MsIDB4M0MsIDB4M0MsIDB4M0QsIDB4M0QsIDB4M0QsIDB4M0QsIDB4M0UsIDB4M0UsIDB4M0UsIDB4M0UsIDB4M0YsIDB4M0YsIDB4M0YsCisgICAgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MiwgMHg0MiwgMHg0MiwgMHg0MiwgMHg0MywgMHg0MywgMHg0MywKKyAgICAweDQzLCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ1LCAweDQ1LCAweDQ1LCAweDQ1LCAweDQ1LCAweDQ2LCAweDQ2LCAweDQ2LCAweDQ2LCAweDQ3LCAweDQ3LAorICAgIDB4NDcsIDB4NDcsIDB4NDgsIDB4NDgsIDB4NDgsIDB4NDgsIDB4NDgsIDB4NDksIDB4NDksIDB4NDksIDB4NDksIDB4NDksIDB4NEEsIDB4NEEsIDB4NEEsIDB4NEEsCisgICAgMHg0QiwgMHg0QiwgMHg0QiwgMHg0QiwgMHg0QiwgMHg0QywgMHg0QywgMHg0QywgMHg0QywgMHg0QywgMHg0RCwgMHg0RCwgMHg0RCwgMHg0RCwgMHg0RCwgMHg0RSwKKyAgICAweDRFLCAweDRFLCAweDRFLCAweDRFLCAweDRGLCAweDRGLCAweDRGLCAweDRGLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUxLCAweDUxLAorICAgIDB4NTEsIDB4NTEsIDB4NTEsIDB4NTIsIDB4NTIsIDB4NTIsIDB4NTIsIDB4NTIsIDB4NTMsIDB4NTMsIDB4NTMsIDB4NTMsIDB4NTMsIDB4NTQsIDB4NTQsIDB4NTQsCisgICAgMHg1NCwgMHg1NCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NiwgMHg1NiwgMHg1NiwgMHg1NiwgMHg1NiwgMHg1NywgMHg1NywgMHg1NywKKyAgICAweDU3LCAweDU3LCAweDU4LCAweDU4LCAweDU4LCAweDU4LCAweDU4LCAweDU4LCAweDU5LCAweDU5LCAweDU5LCAweDU5LCAweDU5LCAweDU5LCAweDVBLCAweDVBLAorICAgIDB4NUEsIDB4NUEsIDB4NUEsIDB4NUIsIDB4NUIsIDB4NUIsIDB4NUIsIDB4NUIsIDB4NUIsIDB4NUMsIDB4NUMsIDB4NUMsIDB4NUMsIDB4NUMsIDB4NUMsIDB4NUQsCisgICAgMHg1RCwgMHg1RCwgMHg1RCwgMHg1RCwgMHg1RCwgMHg1RSwgMHg1RSwgMHg1RSwgMHg1RSwgMHg1RSwgMHg1RSwgMHg1RiwgMHg1RiwgMHg1RiwgMHg1RiwgMHg1RiwKKyAgICAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYwLCAweDYxLCAweDYxLCAweDYxLCAweDYxLCAweDYxLCAweDYxLCAweDYyLCAweDYyLCAweDYyLAorICAgIDB4NjIsIDB4NjIsIDB4NjIsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjQsIDB4NjQsIDB4NjQsIDB4NjQsIDB4NjQsIDB4NjQsIDB4NjUsCisgICAgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NywgMHg2NywgMHg2NywgMHg2NywKKyAgICAweDY3LCAweDY3LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY4LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LAorICAgIDB4NkEsIDB4NkEsIDB4NkEsIDB4NkEsIDB4NkEsIDB4NkEsIDB4NkIsIDB4NkIsIDB4NkIsIDB4NkIsIDB4NkIsIDB4NkIsIDB4NkIsIDB4NkMsIDB4NkMsIDB4NkMsCisgICAgMHg2QywgMHg2QywgMHg2QywgMHg2QywgMHg2RCwgMHg2RCwgMHg2RCwgMHg2RCwgMHg2RCwgMHg2RCwgMHg2RCwgMHg2RSwgMHg2RSwgMHg2RSwgMHg2RSwgMHg2RSwKKyAgICAweDZFLCAweDZFLCAweDZGLCAweDZGLCAweDZGLCAweDZGLCAweDZGLCAweDZGLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLCAweDcwLAorICAgIDB4NzEsIDB4NzEsIDB4NzEsIDB4NzEsIDB4NzEsIDB4NzEsIDB4NzEsIDB4NzIsIDB4NzIsIDB4NzIsIDB4NzIsIDB4NzIsIDB4NzIsIDB4NzIsIDB4NzMsIDB4NzMsCisgICAgMHg3MywgMHg3MywgMHg3MywgMHg3MywgMHg3MywgMHg3NCwgMHg3NCwgMHg3NCwgMHg3NCwgMHg3NCwgMHg3NCwgMHg3NCwgMHg3NSwgMHg3NSwgMHg3NSwgMHg3NSwKKyAgICAweDc1LCAweDc1LCAweDc1LCAweDc1LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc2LCAweDc3LCAweDc3LCAweDc3LCAweDc3LCAweDc3LAorICAgIDB4NzcsIDB4NzcsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzksIDB4NzksIDB4NzksIDB4NzksIDB4NzksIDB4NzksCisgICAgMHg3OSwgMHg3OSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwKKyAgICAweDdCLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdDLCAweDdELCAweDdELCAweDdELCAweDdELCAweDdELCAweDdELCAweDdELAorICAgIDB4N0QsIDB4N0UsIDB4N0UsIDB4N0UsIDB4N0UsIDB4N0UsIDB4N0UsIDB4N0UsIDB4N0UsIDB4N0YsIDB4N0YsIDB4N0YsIDB4N0YsIDB4N0YsIDB4N0YsIDB4N0YsCisgICAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwKKyAgICAweDgxLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgyLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAweDgzLCAweDgzLAorICAgIDB4ODMsIDB4ODQsIDB4ODQsIDB4ODQsIDB4ODQsIDB4ODQsIDB4ODQsIDB4ODQsIDB4ODQsIDB4ODUsIDB4ODUsIDB4ODUsIDB4ODUsIDB4ODUsIDB4ODUsIDB4ODUsCisgICAgMHg4NSwgMHg4NSwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywKKyAgICAweDg3LCAweDg3LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg4LCAweDg5LCAweDg5LCAweDg5LCAweDg5LCAweDg5LAorICAgIDB4ODksIDB4ODksIDB4ODksIDB4ODksIDB4OEEsIDB4OEEsIDB4OEEsIDB4OEEsIDB4OEEsIDB4OEEsIDB4OEEsIDB4OEEsIDB4OEIsIDB4OEIsIDB4OEIsIDB4OEIsCisgICAgMHg4QiwgMHg4QiwgMHg4QiwgMHg4QiwgMHg4QiwgMHg4QywgMHg4QywgMHg4QywgMHg4QywgMHg4QywgMHg4QywgMHg4QywgMHg4QywgMHg4QywgMHg4RCwgMHg4RCwKKyAgICAweDhELCAweDhELCAweDhELCAweDhELCAweDhELCAweDhELCAweDhELCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLCAweDhFLAorICAgIDB4OEYsIDB4OEYsIDB4OEYsIDB4OEYsIDB4OEYsIDB4OEYsIDB4OEYsIDB4OEYsIDB4OTAsIDB4OTAsIDB4OTAsIDB4OTAsIDB4OTAsIDB4OTAsIDB4OTAsIDB4OTAsCisgICAgMHg5MCwgMHg5MCwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwKKyAgICAweDkyLCAweDkyLCAweDkyLCAweDkyLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDkzLCAweDk0LCAweDk0LCAweDk0LAorICAgIDB4OTQsIDB4OTQsIDB4OTQsIDB4OTQsIDB4OTQsIDB4OTQsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsIDB4OTUsCisgICAgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywKKyAgICAweDk3LCAweDk3LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk4LCAweDk5LCAweDk5LCAweDk5LCAweDk5LAorICAgIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUEsIDB4OUIsCisgICAgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QiwgMHg5QywgMHg5QywgMHg5QywgMHg5QywgMHg5QywgMHg5QywgMHg5QywKKyAgICAweDlDLCAweDlDLCAweDlDLCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlELCAweDlFLCAweDlFLCAweDlFLAorICAgIDB4OUUsIDB4OUUsIDB4OUUsIDB4OUUsIDB4OUUsIDB4OUUsIDB4OUUsIDB4OUYsIDB4OUYsIDB4OUYsIDB4OUYsIDB4OUYsIDB4OUYsIDB4OUYsIDB4OUYsIDB4OUYsCisgICAgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMCwgMHhBMSwgMHhBMSwgMHhBMSwgMHhBMSwgMHhBMSwKKyAgICAweEExLCAweEExLCAweEExLCAweEExLCAweEExLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEyLCAweEEzLAorICAgIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTMsIDB4QTQsIDB4QTQsIDB4QTQsIDB4QTQsIDB4QTQsIDB4QTQsIDB4QTQsCisgICAgMHhBNCwgMHhBNCwgMHhBNCwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNSwgMHhBNiwgMHhBNiwKKyAgICAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LCAweEE3LAorICAgIDB4QTcsIDB4QTcsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTgsIDB4QTksIDB4QTksIDB4QTksCisgICAgMHhBOSwgMHhBOSwgMHhBOSwgMHhBOSwgMHhBOSwgMHhBOSwgMHhBOSwgMHhBOSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwKKyAgICAweEFBLCAweEFBLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFCLCAweEFDLCAweEFDLCAweEFDLAorICAgIDB4QUMsIDB4QUMsIDB4QUMsIDB4QUMsIDB4QUMsIDB4QUMsIDB4QUMsIDB4QUMsIDB4QUQsIDB4QUQsIDB4QUQsIDB4QUQsIDB4QUQsIDB4QUQsIDB4QUQsIDB4QUQsCisgICAgMHhBRCwgMHhBRCwgMHhBRCwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRSwgMHhBRiwgMHhBRiwKKyAgICAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEFGLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLCAweEIwLAorICAgIDB4QjAsIDB4QjAsIDB4QjAsIDB4QjAsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjEsIDB4QjIsCisgICAgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMiwgMHhCMywgMHhCMywgMHhCMywgMHhCMywgMHhCMywgMHhCMywKKyAgICAweEIzLCAweEIzLCAweEIzLCAweEIzLCAweEIzLCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LCAweEI0LAorICAgIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjUsIDB4QjYsIDB4QjYsIDB4QjYsIDB4QjYsCisgICAgMHhCNiwgMHhCNiwgMHhCNiwgMHhCNiwgMHhCNiwgMHhCNiwgMHhCNiwgMHhCNywgMHhCNywgMHhCNywgMHhCNywgMHhCNywgMHhCNywgMHhCNywgMHhCNywgMHhCNywKKyAgICAweEI3LCAweEI3LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI4LCAweEI5LCAweEI5LAorICAgIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QjksIDB4QkEsIDB4QkEsIDB4QkEsIDB4QkEsIDB4QkEsIDB4QkEsCisgICAgMHhCQSwgMHhCQSwgMHhCQSwgMHhCQSwgMHhCQSwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwgMHhCQiwKKyAgICAweEJCLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJDLCAweEJELCAweEJELCAweEJELAorICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkUsIDB4QkUsIDB4QkUsIDB4QkUsIDB4QkUsIDB4QkUsIDB4QkUsCisgICAgMHhCRSwgMHhCRSwgMHhCRSwgMHhCRSwgMHhCRSwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwgMHhCRiwKKyAgICAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMwLCAweEMxLCAweEMxLCAweEMxLAorICAgIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzEsIDB4QzIsIDB4QzIsIDB4QzIsIDB4QzIsIDB4QzIsIDB4QzIsIDB4QzIsCisgICAgMHhDMiwgMHhDMiwgMHhDMiwgMHhDMiwgMHhDMiwgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywgMHhDMywKKyAgICAweEMzLCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM0LCAweEM1LCAweEM1LCAweEM1LAorICAgIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzUsIDB4QzYsIDB4QzYsIDB4QzYsIDB4QzYsIDB4QzYsIDB4QzYsCisgICAgMHhDNiwgMHhDNiwgMHhDNiwgMHhDNiwgMHhDNiwgMHhDNiwgMHhDNywgMHhDNywgMHhDNywgMHhDNywgMHhDNywgMHhDNywgMHhDNywgMHhDNywgMHhDNywgMHhDNywKKyAgICAweEM3LCAweEM3LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM4LCAweEM5LAorICAgIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4QzksIDB4Q0EsIDB4Q0EsIDB4Q0EsIDB4Q0EsCisgICAgMHhDQSwgMHhDQSwgMHhDQSwgMHhDQSwgMHhDQSwgMHhDQSwgMHhDQSwgMHhDQSwgMHhDQiwgMHhDQiwgMHhDQiwgMHhDQiwgMHhDQiwgMHhDQiwgMHhDQiwgMHhDQiwKKyAgICAweENCLCAweENCLCAweENCLCAweENCLCAweENCLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLCAweENDLAorICAgIDB4Q0MsIDB4Q0MsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0QsIDB4Q0UsCisgICAgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRSwgMHhDRiwgMHhDRiwgMHhDRiwgMHhDRiwKKyAgICAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweENGLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLCAweEQwLAorICAgIDB4RDAsIDB4RDAsIDB4RDAsIDB4RDAsIDB4RDAsIDB4RDAsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsIDB4RDEsCisgICAgMHhEMSwgMHhEMSwgMHhEMSwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwgMHhEMiwKKyAgICAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQzLCAweEQ0LCAweEQ0LCAweEQ0LAorICAgIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDQsIDB4RDUsIDB4RDUsIDB4RDUsIDB4RDUsIDB4RDUsIDB4RDUsCisgICAgMHhENSwgMHhENSwgMHhENSwgMHhENSwgMHhENSwgMHhENSwgMHhENSwgMHhENSwgMHhENiwgMHhENiwgMHhENiwgMHhENiwgMHhENiwgMHhENiwgMHhENiwgMHhENiwKKyAgICAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ2LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LCAweEQ3LAorICAgIDB4RDcsIDB4RDcsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsIDB4RDgsCisgICAgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEOSwgMHhEQSwgMHhEQSwKKyAgICAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERBLCAweERCLCAweERCLCAweERCLCAweERCLCAweERCLAorICAgIDB4REIsIDB4REIsIDB4REIsIDB4REIsIDB4REIsIDB4REIsIDB4REIsIDB4REIsIDB4REIsIDB4REMsIDB4REMsIDB4REMsIDB4REMsIDB4REMsIDB4REMsIDB4REMsCisgICAgMHhEQywgMHhEQywgMHhEQywgMHhEQywgMHhEQywgMHhEQywgMHhEQywgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwKKyAgICAweERELCAweERELCAweERELCAweERELCAweERELCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLCAweERFLAorICAgIDB4REUsIDB4REUsIDB4REUsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsCisgICAgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMSwKKyAgICAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUxLCAweEUyLCAweEUyLCAweEUyLAorICAgIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTIsIDB4RTMsIDB4RTMsIDB4RTMsIDB4RTMsIDB4RTMsCisgICAgMHhFMywgMHhFMywgMHhFMywgMHhFMywgMHhFMywgMHhFMywgMHhFMywgMHhFMywgMHhFMywgMHhFNCwgMHhFNCwgMHhFNCwgMHhFNCwgMHhFNCwgMHhFNCwgMHhFNCwKKyAgICAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU0LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LCAweEU1LAorICAgIDB4RTUsIDB4RTUsIDB4RTUsIDB4RTUsIDB4RTUsIDB4RTUsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsIDB4RTYsCisgICAgMHhFNiwgMHhFNiwgMHhFNiwgMHhFNiwgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywgMHhFNywKKyAgICAweEU3LCAweEU3LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LCAweEU4LAorICAgIDB4RTgsIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksIDB4RTksCisgICAgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQSwgMHhFQiwgMHhFQiwKKyAgICAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVCLCAweEVDLCAweEVDLCAweEVDLAorICAgIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUMsIDB4RUQsIDB4RUQsIDB4RUQsIDB4RUQsCisgICAgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRCwgMHhFRSwgMHhFRSwgMHhFRSwgMHhFRSwgMHhFRSwKKyAgICAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVFLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLAorICAgIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsCisgICAgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMSwgMHhGMSwgMHhGMSwgMHhGMSwgMHhGMSwgMHhGMSwgMHhGMSwgMHhGMSwKKyAgICAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYxLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLCAweEYyLAorICAgIDB4RjIsIDB4RjIsIDB4RjIsIDB4RjIsIDB4RjIsIDB4RjIsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RjMsCisgICAgMHhGMywgMHhGMywgMHhGMywgMHhGMywgMHhGMywgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwgMHhGNCwKKyAgICAweEY0LCAweEY0LCAweEY0LCAweEY0LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LCAweEY1LAorICAgIDB4RjUsIDB4RjUsIDB4RjUsIDB4RjUsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsIDB4RjYsCisgICAgMHhGNiwgMHhGNiwgMHhGNiwgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywgMHhGNywKKyAgICAweEY3LCAweEY3LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LCAweEY4LAorICAgIDB4RjgsIDB4RjgsIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksIDB4RjksCisgICAgMHhGOSwgMHhGOSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwgMHhGQSwKKyAgICAweEZBLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLCAweEZCLAorICAgIDB4RkIsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsIDB4RkMsCisgICAgMHhGQywgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwgMHhGRCwKKyAgICAweEZELCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLAogICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYKIH07CmRpZmYgLS1naXQgYS9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tTd2VlcEdyYWRpZW50LmNwcCBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1N3ZWVwR3JhZGllbnQuY3BwCmluZGV4IDg5ZWJiYTIuLjViM2U0YjQgMTAwNjQ0Ci0tLSBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1N3ZWVwR3JhZGllbnQuY3BwCisrKyBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1N3ZWVwR3JhZGllbnQuY3BwCkBAIC0yMjQsNyArMjI0LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBTa0FUYW4yXzI1NShmbG9hdCB5LCBmbG9hdCB4KSB7CiAgICAgLy8gICAgc3RhdGljIGNvbnN0IGZsb2F0IGcyNTVPdmVyMlBJID0gMjU1IC8gKDIgKiBTS19TY2FsYXJQSSk7CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGcyNTVPdmVyMlBJID0gNDAuNTg0NTEwNDg4NDMzMzE0ZjsKLSAgICAKKwogICAgIGZsb2F0IHJlc3VsdCA9IHNrX2Zsb2F0X2F0YW4yKHksIHgpOwogICAgIGlmIChyZXN1bHQgPCAwKSB7CiAgICAgICAgIHJlc3VsdCArPSAyICogU0tfU2NhbGFyUEk7CkBAIC00MDksOSArNDA5LDkgQEAKIGNsYXNzIEdyU3dlZXBHcmFkaWVudCA6IHB1YmxpYyBHckdyYWRpZW50RWZmZWN0IHsKIHB1YmxpYzoKIAotICAgIEdyU3dlZXBHcmFkaWVudChHckNvbnRleHQqIGN0eCwgCisgICAgR3JTd2VlcEdyYWRpZW50KEdyQ29udGV4dCogY3R4LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1N3ZWVwR3JhZGllbnQmIHNoYWRlciwKLSAgICAgICAgICAgICAgICAgICAgR3JTYW1wbGVyU3RhdGUqIHNhbXBsZXIpIAorICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZSogc2FtcGxlcikKICAgICA6IElOSEVSSVRFRChjdHgsIHNoYWRlciwgc2FtcGxlcikgeyB9CiAgICAgdmlydHVhbCB+R3JTd2VlcEdyYWRpZW50KCkgeyB9CiAKZGlmZiAtLWdpdCBhL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1R3b1BvaW50Q29uaWNhbEdyYWRpZW50LmNwcCBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1R3b1BvaW50Q29uaWNhbEdyYWRpZW50LmNwcAppbmRleCBlMWQ4Y2I0Li5jZGVhOGQ0IDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tUd29Qb2ludENvbmljYWxHcmFkaWVudC5jcHAKKysrIGIvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrVHdvUG9pbnRDb25pY2FsR3JhZGllbnQuY3BwCkBAIC0yMSwxMSArMjEsMTEgQEAKIC8vIGFzY2VuZGluZyBvcmRlcgogc3RhdGljIGludCBmaW5kX3F1YWRfcm9vdHMoZmxvYXQgQSwgZmxvYXQgQiwgZmxvYXQgQywgZmxvYXQgcm9vdHNbMl0pIHsKICAgICBTa0FTU0VSVChyb290cyk7Ci0gICAgCisKICAgICBpZiAoQSA9PSAwKSB7CiAgICAgICAgIHJldHVybiB2YWxpZF9kaXZpZGUoLUMsIEIsIHJvb3RzKTsKICAgICB9Ci0gICAgCisKICAgICBmbG9hdCBSID0gQipCIC0gNCpBKkM7CiAgICAgaWYgKFIgPCAwKSB7CiAgICAgICAgIHJldHVybiAwOwpAQCAtODcsNyArODcsNyBAQAogCiBTa0ZpeGVkIFR3b1B0UmFkaWFsOjpuZXh0VCgpIHsKICAgICBmbG9hdCByb290c1syXTsKLSAgICAKKwogICAgIGZsb2F0IEMgPSBzcXIoZlJlbFgpICsgc3FyKGZSZWxZKSAtIGZSYWRpdXMyOwogICAgIGludCBjb3VudFJvb3RzID0gZmluZF9xdWFkX3Jvb3RzKGZBLCBmQiwgQywgcm9vdHMpOwogCkBAIC0xODQsOSArMTg0LDkgQEAKIHZvaWQgU2tUd29Qb2ludENvbmljYWxHcmFkaWVudDo6c2hhZGVTcGFuKGludCB4LCBpbnQgeSwgU2tQTUNvbG9yKiBkc3RDUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpIHsKICAgICBTa0FTU0VSVChjb3VudCA+IDApOwotICAgIAorCiAgICAgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBkc3RDID0gZHN0Q1BhcmFtOwotICAgIAorCiAgICAgU2tNYXRyaXg6Ok1hcFhZUHJvYyBkc3RQcm9jID0gZkRzdFRvSW5kZXhQcm9jOwogICAgIFRpbGVQcm9jICAgICAgICAgICAgcHJvYyA9IGZUaWxlUHJvYzsKICAgICBjb25zdCBTa1BNQ29sb3IqIFNLX1JFU1RSSUNUIGNhY2hlID0gdGhpcy0+Z2V0Q2FjaGUzMigpOwpAQCAtMTk5LDE0ICsxOTksMTQgQEAKICAgICB9IGVsc2UgewogICAgICAgICBTa0FTU0VSVChTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA9PSBmVGlsZU1vZGUpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChmRHN0VG9JbmRleENsYXNzICE9IGtQZXJzcGVjdGl2ZV9NYXRyaXhDbGFzcykgewogICAgICAgICBTa1BvaW50IHNyY1B0OwogICAgICAgICBkc3RQcm9jKGZEc3RUb0luZGV4LCBTa0ludFRvU2NhbGFyKHgpICsgU0tfU2NhbGFySGFsZiwKICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgJnNyY1B0KTsKICAgICAgICAgU2tTY2FsYXIgZHgsIGZ4ID0gc3JjUHQuZlg7CiAgICAgICAgIFNrU2NhbGFyIGR5LCBmeSA9IHNyY1B0LmZZOwotICAgICAgICAKKwogICAgICAgICBpZiAoZkRzdFRvSW5kZXhDbGFzcyA9PSBrRml4ZWRTdGVwSW5YX01hdHJpeENsYXNzKSB7CiAgICAgICAgICAgICBTa0ZpeGVkIGZpeGVkWCwgZml4ZWRZOwogICAgICAgICAgICAgKHZvaWQpZkRzdFRvSW5kZXguZml4ZWRTdGVwSW5YKFNrSW50VG9TY2FsYXIoeSksICZmaXhlZFgsICZmaXhlZFkpOwpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBTa1BvaW50IHNyY1B0OwogICAgICAgICAgICAgZHN0UHJvYyhmRHN0VG9JbmRleCwgZHN0WCwgZHN0WSwgJnNyY1B0KTsKICAgICAgICAgICAgIGRzdFggKz0gU0tfU2NhbGFyMTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmUmVjLnNldHVwKHNyY1B0LmZYLCBzcmNQdC5mWSwgMCwgMCk7CiAgICAgICAgICAgICAoKnNoYWRlUHJvYykoJmZSZWMsIGRzdEMsIGNhY2hlLCAxKTsKICAgICAgICAgfQpAQCAtMjQwLDEwICsyNDAsMTAgQEAKICAgICBpZiAoIXRoaXMtPklOSEVSSVRFRDo6c2V0Q29udGV4dChkZXZpY2UsIHBhaW50LCBtYXRyaXgpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvLyB3ZSBkb24ndCBoYXZlIGEgc3BhbjE2IHByb2MKICAgICBmRmxhZ3MgJj0gfmtIYXNTcGFuMTZfRmxhZzsKLSAgICAKKwogICAgIC8vIGluIGdlbmVyYWwsIHdlIG1pZ2h0IGRpc2NhcmQgYmFzZWQgb24gY29tcHV0ZWQtcmFkaXVzLCBzbyBjbGVhcgogICAgIC8vIHRoaXMgZmxhZyAodG9kbzogc29tZXRpbWVzIHdlIGNhbiBkZXRlY3QgdGhhdCB3ZSBuZXZlciBkaXNjYXJkLi4uKQogICAgIGZGbGFncyAmPSB+a09wYXF1ZUFscGhhX0ZsYWc7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAogICAgIEdyQ29uaWNhbDJHcmFkaWVudChHckNvbnRleHQqIGN0eCwgY29uc3QgU2tUd29Qb2ludENvbmljYWxHcmFkaWVudCYgc2hhZGVyLAogICAgICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZSogc2FtcGxlcikKLSAgICAgICAgOiBJTkhFUklURUQoY3R4LCBzaGFkZXIsIHNhbXBsZXIpIAorICAgICAgICA6IElOSEVSSVRFRChjdHgsIHNoYWRlciwgc2FtcGxlcikKICAgICAgICAgLCBmQ2VudGVyWDEoc2hhZGVyLmdldENlbnRlclgxKCkpCiAgICAgICAgICwgZlJhZGl1czAoc2hhZGVyLmdldFN0YXJ0UmFkaXVzKCkpCiAgICAgICAgICwgZkRpZmZSYWRpdXMoc2hhZGVyLmdldERpZmZSYWRpdXMoKSkgeyB9CkBAIC00MzEsNyArNDMxLDcgQEAKICAgICAgICAgcmFkaXVzMiA9IHJhbmRvbS0+bmV4dFVTY2FsYXIxICgpOwogICAgICAgICAvLyBJZiB0aGUgY2lyY2xlcyBhcmUgaWRlbnRpY2FsIHRoZSBmYWN0b3J5IHdpbGwgZ2l2ZSB1cyBhbiBlbXB0eSBzaGFkZXIuCiAgICAgfSB3aGlsZSAocmFkaXVzMSA9PSByYWRpdXMyICYmIGNlbnRlcjEgPT0gY2VudGVyMik7Ci0gICAgCisKICAgICBTa0NvbG9yIGNvbG9yc1trTWF4UmFuZG9tR3JhZGllbnRDb2xvcnNdOwogICAgIFNrU2NhbGFyIHN0b3BzQXJyYXlba01heFJhbmRvbUdyYWRpZW50Q29sb3JzXTsKICAgICBTa1NjYWxhciogc3RvcHMgPSBzdG9wc0FycmF5OwpAQCAtNTQxLDggKzU0MSw4IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgR3JBc3NlcnQoMyA9PSBidWlsZGVyLT5mVmFyeWluZ0RpbXMpOwogICAgICAgICBiVmFyID0gImIiOwotICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdGZsb2F0ICVzID0gLTIuMCAqICglcyAqICVzLnggKyAlcyAqICVzKTtcbiIsIAotICAgICAgICAgICAgICAgICAgICAgIGJWYXIuY19zdHIoKSwgcDIuY19zdHIoKSwgYnVpbGRlci0+ZlNhbXBsZUNvb3Jkcy5jX3N0cigpLCAKKyAgICAgICAgY29kZS0+YXBwZW5kZigiXHRmbG9hdCAlcyA9IC0yLjAgKiAoJXMgKiAlcy54ICsgJXMgKiAlcyk7XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGJWYXIuY19zdHIoKSwgcDIuY19zdHIoKSwgYnVpbGRlci0+ZlNhbXBsZUNvb3Jkcy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgIHAzLmNfc3RyKCksIHA1LmNfc3RyKCkpOwogICAgIH0KIApAQCAtNTUxLDcgKzU1MSw3IEBACiAgICAgY29kZS0+YXBwZW5kZigiXHQlcyA9IHZlYzQoMC4wLDAuMCwwLjAsMC4wKTtcbiIsIG91dHB1dENvbG9yKTsKIAogICAgIC8vIGMgPSAoeF4yKSsoeV4yKSAtIHBhcmFtc1s0XQotICAgIGNvZGUtPmFwcGVuZGYoIlx0ZmxvYXQgJXMgPSBkb3QoJXMsICVzKSAtICVzO1xuIiwgY05hbWUuY19zdHIoKSwgCisgICAgY29kZS0+YXBwZW5kZigiXHRmbG9hdCAlcyA9IGRvdCglcywgJXMpIC0gJXM7XG4iLCBjTmFtZS5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgYnVpbGRlci0+ZlNhbXBsZUNvb3Jkcy5jX3N0cigpLCBidWlsZGVyLT5mU2FtcGxlQ29vcmRzLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICBwNC5jX3N0cigpKTsKIApAQCAtNTYxLDkgKzU2MSw5IEBACiAgICAgICAgIC8vIGFjNCA9IHBhcmFtc1swXSAqIGMKICAgICAgICAgY29kZS0+YXBwZW5kZigiXHRmbG9hdCAlcyA9ICVzICogJXM7XG4iLCBhYzROYW1lLmNfc3RyKCksIHAwLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgY05hbWUuY19zdHIoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGQgPSBiXjIgLSBhYzQKLSAgICAgICAgY29kZS0+YXBwZW5kZigiXHRmbG9hdCAlcyA9ICVzICogJXMgLSAlcztcbiIsIGROYW1lLmNfc3RyKCksIAorICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdGZsb2F0ICVzID0gJXMgKiAlcyAtICVzO1xuIiwgZE5hbWUuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICBiVmFyLmNfc3RyKCksIGJWYXIuY19zdHIoKSwgYWM0TmFtZS5jX3N0cigpKTsKIAogICAgICAgICAvLyBvbmx5IHByb2NlZWQgaWYgZGlzY3JpbWluYW50IGlzID49IDAKQEAgLTU3MiwyNiArNTcyLDI2IEBACiAgICAgICAgIC8vIGludGVybWVkaWF0ZSB2YWx1ZSB3ZSdsbCB1c2UgdG8gY29tcHV0ZSB0aGUgcm9vdHMKICAgICAgICAgLy8gcSA9IC0wLjUgKiAoYiArLy0gc3FydChkKSkKICAgICAgICAgY29kZS0+YXBwZW5kZigiXHRcdGZsb2F0ICVzID0gLTAuNSAqICglcyArICglcyA8IDAuMCA/IC0xLjAgOiAxLjApIgotICAgICAgICAgICAgICAgICAgICAgICIgKiBzcXJ0KCVzKSk7XG4iLCBxTmFtZS5jX3N0cigpLCBiVmFyLmNfc3RyKCksIAorICAgICAgICAgICAgICAgICAgICAgICIgKiBzcXJ0KCVzKSk7XG4iLCBxTmFtZS5jX3N0cigpLCBiVmFyLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgYlZhci5jX3N0cigpLCBkTmFtZS5jX3N0cigpKTsKIAogICAgICAgICAvLyBjb21wdXRlIGJvdGggcm9vdHMKICAgICAgICAgLy8gcjAgPSBxICogcGFyYW1zWzFdCi0gICAgICAgIGNvZGUtPmFwcGVuZGYoIlx0XHRmbG9hdCAlcyA9ICVzICogJXM7XG4iLCByME5hbWUuY19zdHIoKSwgCisgICAgICAgIGNvZGUtPmFwcGVuZGYoIlx0XHRmbG9hdCAlcyA9ICVzICogJXM7XG4iLCByME5hbWUuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICBxTmFtZS5jX3N0cigpLCBwMS5jX3N0cigpKTsKICAgICAgICAgLy8gcjEgPSBjIC8gcQotICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0ZmxvYXQgJXMgPSAlcyAvICVzO1xuIiwgcjFOYW1lLmNfc3RyKCksIAorICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0ZmxvYXQgJXMgPSAlcyAvICVzO1xuIiwgcjFOYW1lLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgY05hbWUuY19zdHIoKSwgcU5hbWUuY19zdHIoKSk7CiAKLSAgICAgICAgLy8gTm90ZTogSWYgdGhlcmUgYXJlIHR3byByb290cyB0aGF0IGJvdGggZ2VuZXJhdGUgcmFkaXVzKHQpID4gMCwgdGhlIAorICAgICAgICAvLyBOb3RlOiBJZiB0aGVyZSBhcmUgdHdvIHJvb3RzIHRoYXQgYm90aCBnZW5lcmF0ZSByYWRpdXModCkgPiAwLCB0aGUKICAgICAgICAgLy8gQ2FudmFzIHNwZWMgc2F5cyB0byBjaG9vc2UgdGhlIGxhcmdlciB0LgogCiAgICAgICAgIC8vIHNvIHdlJ2xsIGxvb2sgYXQgdGhlIGxhcmdlciBvbmUgZmlyc3Q6Ci0gICAgICAgIGNvZGUtPmFwcGVuZGYoIlx0XHRmbG9hdCAlcyA9IG1heCglcywgJXMpO1xuIiwgdE5hbWUuY19zdHIoKSwgCisgICAgICAgIGNvZGUtPmFwcGVuZGYoIlx0XHRmbG9hdCAlcyA9IG1heCglcywgJXMpO1xuIiwgdE5hbWUuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICByME5hbWUuY19zdHIoKSwgcjFOYW1lLmNfc3RyKCkpOwogCiAgICAgICAgIC8vIGlmIHIodCkgPiAwLCB0aGVuIHdlJ3JlIGRvbmU7IHQgd2lsbCBiZSBvdXIgeCBjb29yZGluYXRlCi0gICAgICAgIGNvZGUtPmFwcGVuZGYoIlx0XHRpZiAoJXMgKiAlcyArICVzID4gMC4wKSB7XG4iLCB0TmFtZS5jX3N0cigpLCAKKyAgICAgICAgY29kZS0+YXBwZW5kZigiXHRcdGlmICglcyAqICVzICsgJXMgPiAwLjApIHtcbiIsIHROYW1lLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgcDUuY19zdHIoKSwgcDMuY19zdHIoKSk7CiAKICAgICAgICAgY29kZS0+YXBwZW5kZigiXHRcdCIpOwpAQCAtNTk5LDcgKzU5OSw3IEBACiAKICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiByKHQpIGZvciB0aGUgbGFyZ2VyIHJvb3Qgd2FzIDw9IDAsIHRyeSB0aGUgb3RoZXIgcm9vdAogICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0fSBlbHNlIHtcbiIpOwotICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0XHQlcyA9IG1pbiglcywgJXMpO1xuIiwgdE5hbWUuY19zdHIoKSwgCisgICAgICAgIGNvZGUtPmFwcGVuZGYoIlx0XHRcdCVzID0gbWluKCVzLCAlcyk7XG4iLCB0TmFtZS5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgIHIwTmFtZS5jX3N0cigpLCByMU5hbWUuY19zdHIoKSk7CiAKICAgICAgICAgLy8gaWYgcih0KSA+IDAgZm9yIHRoZSBzbWFsbGVyIHJvb3QsIHRoZW4gdCB3aWxsIGJlIG91ciB4IGNvb3JkaW5hdGUKQEAgLTYwOSw3ICs2MDksNyBAQAogICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0XHQiKTsKICAgICAgICAgdGhpcy0+ZW1pdENvbG9yTG9va3VwKGJ1aWxkZXIsIHROYW1lLmNfc3RyKCksIG91dHB1dENvbG9yLCBzYW1wbGVyTmFtZSk7CiAKLSAgICAgICAgLy8gZW5kIGlmIChyKHQpID4gMCkgZm9yIHNtYWxsZXIgcm9vdCAKKyAgICAgICAgLy8gZW5kIGlmIChyKHQpID4gMCkgZm9yIHNtYWxsZXIgcm9vdAogICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0XHR9XG4iKTsKICAgICAgICAgLy8gZW5kIGlmIChyKHQpID4gMCksIGVsc2UsIGZvciBsYXJnZXIgcm9vdAogICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdFx0fVxuIik7CkBAIC02MTgsNyArNjE4LDcgQEAKICAgICB9IGVsc2UgewogCiAgICAgICAgIC8vIGxpbmVhciBjYXNlOiB0ID0gLWMvYgotICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdGZsb2F0ICVzID0gLSglcyAvICVzKTtcbiIsIHROYW1lLmNfc3RyKCksIAorICAgICAgICBjb2RlLT5hcHBlbmRmKCJcdGZsb2F0ICVzID0gLSglcyAvICVzKTtcbiIsIHROYW1lLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgY05hbWUuY19zdHIoKSwgYlZhci5jX3N0cigpKTsKIAogICAgICAgICAvLyBpZiByKHQpID4gMCwgdGhlbiB0IHdpbGwgYmUgdGhlIHggY29vcmRpbmF0ZQpkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrVHdvUG9pbnRDb25pY2FsR3JhZGllbnQuaCBiL3NyYy9lZmZlY3RzL2dyYWRpZW50cy9Ta1R3b1BvaW50Q29uaWNhbEdyYWRpZW50LmgKaW5kZXggNDVlZDE1Yi4uNGNlNzI4MCAxMDA2NDQKLS0tIGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrVHdvUG9pbnRDb25pY2FsR3JhZGllbnQuaAorKysgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tUd29Qb2ludENvbmljYWxHcmFkaWVudC5oCkBAIC0yNiwxNCArMjYsMTQgQEAKIAogICAgIHZvaWQgaW5pdChjb25zdCBTa1BvaW50JiBjZW50ZXIwLCBTa1NjYWxhciByYWQwLAogICAgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBjZW50ZXIxLCBTa1NjYWxhciByYWQxKTsKLSAgICAKKwogICAgIC8vIHVzZWQgYnkgc2V0dXAgYW5kIG5leHRUCiAgICAgZmxvYXQgICBmUmVsWCwgZlJlbFksIGZJbmNYLCBmSW5jWTsKICAgICBmbG9hdCAgIGZCLCBmREI7Ci0gICAgCisKICAgICB2b2lkIHNldHVwKFNrU2NhbGFyIGZ4LCBTa1NjYWxhciBmeSwgU2tTY2FsYXIgZGZ4LCBTa1NjYWxhciBkZnkpOwogICAgIFNrRml4ZWQgbmV4dFQoKTsKLSAgICAKKwogICAgIHN0YXRpYyBib29sIERvbnREcmF3VChTa0ZpeGVkIHQpIHsKICAgICAgICAgcmV0dXJuIGtEb250RHJhd1QgPT0gKHVpbnQzMl90KXQ7CiAgICAgfQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tDb2xvciBjb2xvcnNbXSwgY29uc3QgU2tTY2FsYXIgcG9zW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sb3JDb3VudCwgU2tTaGFkZXI6OlRpbGVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1VuaXRNYXBwZXIqIG1hcHBlcik7Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgc2hhZGVTcGFuKGludCB4LCBpbnQgeSwgU2tQTUNvbG9yKiBkc3RDUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpIFNLX09WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDb250ZXh0KGNvbnN0IFNrQml0bWFwJiBkZXZpY2UsCkBAIC02OSwxMSArNjksMTEgQEAKICAgICBTa1NjYWxhciBnZXREaWZmUmFkaXVzKCkgY29uc3QgeyByZXR1cm4gZlJhZGl1czIgLSBmUmFkaXVzMTsgfQogCiAgICAgU0tfREVDTEFSRV9QVUJMSUNfRkxBVFRFTkFCTEVfREVTRVJJQUxJWkFUSU9OX1BST0NTKFNrVHdvUG9pbnRDb25pY2FsR3JhZGllbnQpCi0gICAgCisKIHByb3RlY3RlZDoKICAgICBTa1R3b1BvaW50Q29uaWNhbEdyYWRpZW50KFNrRmxhdHRlbmFibGVSZWFkQnVmZmVyJiBidWZmZXIpOwogICAgIHZpcnR1YWwgdm9pZCBmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYgYnVmZmVyKSBjb25zdCBTS19PVkVSUklERTsKLSAgICAKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIFNrR3JhZGllbnRTaGFkZXJCYXNlIElOSEVSSVRFRDsKICAgICBjb25zdCBTa1BvaW50IGZDZW50ZXIxOwpkaWZmIC0tZ2l0IGEvc3JjL2VmZmVjdHMvZ3JhZGllbnRzL1NrVHdvUG9pbnRSYWRpYWxHcmFkaWVudC5jcHAgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tUd29Qb2ludFJhZGlhbEdyYWRpZW50LmNwcAppbmRleCA5ZDkzNzcxLi44ZGE2ZjgzIDEwMDY0NAotLS0gYS9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tUd29Qb2ludFJhZGlhbEdyYWRpZW50LmNwcAorKysgYi9zcmMvZWZmZWN0cy9ncmFkaWVudHMvU2tUd29Qb2ludFJhZGlhbEdyYWRpZW50LmNwcApAQCAtNDA1LDExICs0MDUsMTEgQEAKIGNsYXNzIEdyUmFkaWFsMkdyYWRpZW50IDogcHVibGljIEdyR3JhZGllbnRFZmZlY3QgewogcHVibGljOgogCi0gICAgR3JSYWRpYWwyR3JhZGllbnQoR3JDb250ZXh0KiBjdHgsIGNvbnN0IFNrVHdvUG9pbnRSYWRpYWxHcmFkaWVudCYgc2hhZGVyLCAKKyAgICBHclJhZGlhbDJHcmFkaWVudChHckNvbnRleHQqIGN0eCwgY29uc3QgU2tUd29Qb2ludFJhZGlhbEdyYWRpZW50JiBzaGFkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgR3JTYW1wbGVyU3RhdGUqIHNhbXBsZXIpCiAgICAgICAgIDogSU5IRVJJVEVEKGN0eCwgc2hhZGVyLCBzYW1wbGVyKQogICAgICAgICAsIGZDZW50ZXJYMShzaGFkZXIuZ2V0Q2VudGVyWDEoKSkKLSAgICAgICAgLCBmUmFkaXVzMChzaGFkZXIuZ2V0U3RhcnRSYWRpdXMoKSkgCisgICAgICAgICwgZlJhZGl1czAoc2hhZGVyLmdldFN0YXJ0UmFkaXVzKCkpCiAgICAgICAgICwgZlBvc1Jvb3Qoc2hhZGVyLmdldERpZmZSYWRpdXMoKSA8IDApIHsgfQogICAgIHZpcnR1YWwgfkdyUmFkaWFsMkdyYWRpZW50KCkgeyB9CiAKZGlmZiAtLWdpdCBhL3NyYy9ncHUvRmxpbmdTdGF0ZS5jcHAgYi9zcmMvZ3B1L0ZsaW5nU3RhdGUuY3BwCmluZGV4IDA1MGE4MTAuLjhkOWUxYzUgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvRmxpbmdTdGF0ZS5jcHAKKysrIGIvc3JjL2dwdS9GbGluZ1N0YXRlLmNwcApAQCAtMTEwLDEzICsxMTAsMTMgQEAKICAgICBpZiAoIWZUaW1lMCkgewogICAgICAgICByZXR1cm4gZlZhbHVlMTsKICAgICB9Ci0gICAgCisKICAgICBkb3VibGUgZWxhcHNlZCA9IChTa1RpbWU6OkdldE1TZWNzKCkgLSBmVGltZTApICogMC4wMDE7CiAgICAgaWYgKGVsYXBzZWQgPj0gZkR1cmF0aW9uKSB7CiAgICAgICAgIGZUaW1lMCA9IDA7CiAgICAgICAgIHJldHVybiBmVmFsdWUxOwogICAgIH0KLSAgICAKKwogICAgIGRvdWJsZSB0ID0gZWxhcHNlZCAvIGZEdXJhdGlvbjsKICAgICBpZiAodHJ1ZSkgewogICAgICAgICB0ID0gKDMgLSAyICogdCkgKiB0ICogdDsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvR3JBQUNvbnZleFBhdGhSZW5kZXJlci5jcHAgYi9zcmMvZ3B1L0dyQUFDb252ZXhQYXRoUmVuZGVyZXIuY3BwCmluZGV4IDE4NTdiZWIuLjcxOGNmZGQgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JBQUNvbnZleFBhdGhSZW5kZXJlci5jcHAKKysrIGIvc3JjL2dwdS9HckFBQ29udmV4UGF0aFJlbmRlcmVyLmNwcApAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgLy8gVGhpcyByZW5kZXJlciBvdmVyZW1waGFzaXNlcyB2ZXJ5IHRoaW4gcGF0aCByZWdpb25zLiBXZSB1c2UgdGhlIGRpc3RhbmNlCiAgICAgLy8gdG8gdGhlIHBhdGggZnJvbSB0aGUgc2FtcGxlIHRvIGNvbXB1dGUgY292ZXJhZ2UuIEV2ZXJ5IHBpeGVsIGludGVyc2VjdGVkCiAgICAgLy8gYnkgdGhlIHBhdGggd2lsbCBiZSBoaXQgYW5kIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGlzIHNxcnQoMikvMi4gV2UgZG9uJ3QKLSAgICAvLyBub3RpY2UgdGhhdCB0aGUgc2FtcGxlIG1heSBiZSBjbG9zZSB0byBhIHZlcnkgdGhpbiBhcmVhIG9mIHRoZSBwYXRoIGFuZCAKKyAgICAvLyBub3RpY2UgdGhhdCB0aGUgc2FtcGxlIG1heSBiZSBjbG9zZSB0byBhIHZlcnkgdGhpbiBhcmVhIG9mIHRoZSBwYXRoIGFuZAogICAgIC8vIHRodXMgc2hvdWxkIGJlIHZlcnkgbGlnaHQuIFRoaXMgaXMgcGFydGljdWxhcmx5IGVncmVnaW91cyBmb3IgZGVnZW5lcmF0ZQogICAgIC8vIGxpbmUgcGF0aHMuIFdlIGRldGVjdCBwYXRocyB0aGF0IGFyZSB2ZXJ5IGNsb3NlIHRvIGEgbGluZSAoemVybyBhcmVhKSBhbmQKICAgICAvLyBkcmF3IG5vdGhpbmcuCkBAIC0yOTksNyArMjk5LDcgQEAKICAgICBHclNjYWxhciBmRDA7CiAgICAgR3JTY2FsYXIgZkQxOwogfTsKLSAgICAKKwogdm9pZCBjcmVhdGVfdmVydGljZXMoY29uc3QgU2VnbWVudEFycmF5JiAgc2VnbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBmYW5QdCwKICAgICAgICAgICAgICAgICAgICAgIFF1YWRWZXJ0ZXgqICAgIHZlcnRzLApAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgICAgIGNvbnN0IFNlZ21lbnQmIHNlZ2EgPSBzZWdtZW50c1thXTsKICAgICAgICAgaW50IGIgPSAoYSArIDEpICUgY291bnQ7CiAgICAgICAgIGNvbnN0IFNlZ21lbnQmIHNlZ2IgPSBzZWdtZW50c1tiXTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRklYTUU6IFRoZXNlIHRyaXMgYXJlIGluc2V0IGluIHRoZSAxIHVuaXQgYXJjIGFyb3VuZCB0aGUgY29ybmVyCiAgICAgICAgIHZlcnRzW3YgKyAwXS5mUG9zID0gc2VnYS5lbmRQdCgpOwogICAgICAgICB2ZXJ0c1t2ICsgMV0uZlBvcyA9IHZlcnRzW3YgKyAwXS5mUG9zICsgc2VnYS5lbmROb3JtKCk7CkBAIC0zMjYsMTQgKzMyNiwxNCBAQAogICAgICAgICB2ZXJ0c1t2ICsgMV0uZkQwID0gdmVydHNbdiArIDFdLmZEMSA9IC1TS19TY2FsYXIxOwogICAgICAgICB2ZXJ0c1t2ICsgMl0uZkQwID0gdmVydHNbdiArIDJdLmZEMSA9IC1TS19TY2FsYXIxOwogICAgICAgICB2ZXJ0c1t2ICsgM10uZkQwID0gdmVydHNbdiArIDNdLmZEMSA9IC1TS19TY2FsYXIxOwotICAgICAgICAKKwogICAgICAgICBpZHhzW2kgKyAwXSA9IHYgKyAwOwogICAgICAgICBpZHhzW2kgKyAxXSA9IHYgKyAyOwogICAgICAgICBpZHhzW2kgKyAyXSA9IHYgKyAxOwogICAgICAgICBpZHhzW2kgKyAzXSA9IHYgKyAwOwogICAgICAgICBpZHhzW2kgKyA0XSA9IHYgKyAzOwogICAgICAgICBpZHhzW2kgKyA1XSA9IHYgKyAyOwotICAgICAgICAKKwogICAgICAgICB2ICs9IDQ7CiAgICAgICAgIGkgKz0gNjsKIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9HckFBSGFpckxpbmVQYXRoUmVuZGVyZXIuY3BwIGIvc3JjL2dwdS9HckFBSGFpckxpbmVQYXRoUmVuZGVyZXIuY3BwCmluZGV4IDQzZTg3ZDYuLjk0YjYwN2MgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JBQUhhaXJMaW5lUGF0aFJlbmRlcmVyLmNwcAorKysgYi9zcmMvZ3B1L0dyQUFIYWlyTGluZVBhdGhSZW5kZXJlci5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQAogLy8gaWYgaXQgcmV0dXJucyAtMSB0aGVuIHNob3VsZCBiZSBkcmF3biBhcyBsaW5lcwogaW50IG51bV9xdWFkX3N1YmRpdnMoY29uc3QgU2tQb2ludCBwWzNdKSB7CiAgICAgc3RhdGljIGNvbnN0IFNrU2NhbGFyIGdEZWdlbmVyYXRlVG9MaW5lVG9sID0gU0tfU2NhbGFyMTsKLSAgICBzdGF0aWMgY29uc3QgU2tTY2FsYXIgZ0RlZ2VuZXJhdGVUb0xpbmVUb2xTcWQgPSAKKyAgICBzdGF0aWMgY29uc3QgU2tTY2FsYXIgZ0RlZ2VuZXJhdGVUb0xpbmVUb2xTcWQgPQogICAgICAgICBTa1NjYWxhck11bChnRGVnZW5lcmF0ZVRvTGluZVRvbCwgZ0RlZ2VuZXJhdGVUb0xpbmVUb2wpOwogCiAgICAgaWYgKHBbMF0uZGlzdGFuY2VUb1NxZChwWzFdKSA8IGdEZWdlbmVyYXRlVG9MaW5lVG9sU3FkIHx8CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgcmV0dXJuIGxvZzsKICNlbHNlCiAgICAgICAgIFNrU2NhbGFyIGxvZyA9IFNrU2NhbGFyTG9nKAotICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhckRpdihkc3FkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJEaXYoZHNxZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJNdWwoZ1N1YmRpdlRvbCwgZ1N1YmRpdlRvbCkpKTsKICAgICAgICAgc3RhdGljIGNvbnN0IFNrU2NhbGFyIGNvbnYgPSBTa1NjYWxhckludmVydChTa1NjYWxhckxvZygyKSk7CiAgICAgICAgIGxvZyA9IFNrU2NhbGFyTXVsKGxvZywgY29udik7CkBAIC0yNjksNyArMjY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY29udmVydCBjdWJpY3MgdG8gcXVhZHJhdGljcyAoZm9yIG5vdykuCiAgICAgICAgICAgICAgICAgICAgIC8vIEluIHBlcnNwZWN0aXZlIGhhdmUgdG8gZG8gY29udmVyc2lvbiBpbiBzcmMgc3BhY2UuCiAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJzcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXIgdG9sU2NhbGUgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyIHRvbFNjYWxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclBhdGhVdGlsczo6c2NhbGVUb2xlcmFuY2VUb1NyYyhTS19TY2FsYXIxLCBtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguZ2V0Qm91bmRzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgR3JQYXRoVXRpbHM6OmNvbnZlcnRDdWJpY1RvUXVhZHMocHRzLCB0b2xTY2FsZSwgZmFsc2UsIGtEdW1teURpciwgJnEpOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAKICAgICByZXN1bHQtPmZYID0gU2tTY2FsYXJNdWwobm9ybUEuZlksIGxpbmVCVykgLSBTa1NjYWxhck11bChsaW5lQVcsIG5vcm1CLmZZKTsKICAgICByZXN1bHQtPmZYID0gU2tTY2FsYXJNdWwocmVzdWx0LT5mWCwgd0ludik7Ci0gICAgCisKICAgICByZXN1bHQtPmZZID0gU2tTY2FsYXJNdWwobGluZUFXLCBub3JtQi5mWCkgLSBTa1NjYWxhck11bChub3JtQS5mWCwgbGluZUJXKTsKICAgICByZXN1bHQtPmZZID0gU2tTY2FsYXJNdWwocmVzdWx0LT5mWSwgd0ludik7CiB9CkBAIC01MTIsNyArNTEyLDcgQEAKICAgICBpbnQgcnRIZWlnaHQgPSBkcmF3U3RhdGUuZ2V0UmVuZGVyVGFyZ2V0KCktPmhlaWdodCgpOwogCiAgICAgR3JJUmVjdCBkZXZDbGlwQm91bmRzOwotICAgIHRhcmdldC0+Z2V0Q2xpcCgpLT5nZXRDb25zZXJ2YXRpdmVCb3VuZHMoZHJhd1N0YXRlLmdldFJlbmRlclRhcmdldCgpLCAKKyAgICB0YXJnZXQtPmdldENsaXAoKS0+Z2V0Q29uc2VydmF0aXZlQm91bmRzKGRyYXdTdGF0ZS5nZXRSZW5kZXJUYXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXZDbGlwQm91bmRzKTsKIAogICAgIEdyVmVydGV4TGF5b3V0IGxheW91dCA9IEdyRHJhd1RhcmdldDo6a0VkZ2VfVmVydGV4TGF5b3V0Qml0OwpAQCAtNjExLDcgKzYxMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZHJhd1N0YXRlLT52aWV3TWF0cml4KCktPnJlc2V0KCk7CiAgICAgfQotICAgIAorCiAKICAgICAvLyBUT0RPOiBTZWUgd2hldGhlciByZW5kZXJpbmcgbGluZXMgYXMgZGVnZW5lcmF0ZSBxdWFkcyBpbXByb3ZlcyBwZXJmCiAgICAgLy8gd2hlbiB3ZSBoYXZlIGEgbWl4CmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyQWRkUGF0aFJlbmRlcmVyc19ub25lLmNwcCBiL3NyYy9ncHUvR3JBZGRQYXRoUmVuZGVyZXJzX25vbmUuY3BwCmluZGV4IDQ2ODU1ZGIuLjAyZGE3MTAgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JBZGRQYXRoUmVuZGVyZXJzX25vbmUuY3BwCisrKyBiL3NyYy9ncHUvR3JBZGRQYXRoUmVuZGVyZXJzX25vbmUuY3BwCkBAIC0xMCw2ICsxMCw2IEBACiAjaW5jbHVkZSAiR3JQYXRoUmVuZGVyZXIuaCIKIAogCi12b2lkIEdyUGF0aFJlbmRlcmVyOjpBZGRQYXRoUmVuZGVyZXJzKEdyQ29udGV4dCosIAordm9pZCBHclBhdGhSZW5kZXJlcjo6QWRkUGF0aFJlbmRlcmVycyhHckNvbnRleHQqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclBhdGhSZW5kZXJlckNoYWluOjpVc2FnZUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclBhdGhSZW5kZXJlckNoYWluKikge30KZGlmZiAtLWdpdCBhL3NyYy9ncHUvR3JBbGxvY1Bvb2wuY3BwIGIvc3JjL2dwdS9HckFsbG9jUG9vbC5jcHAKaW5kZXggZWNkMmFjZi4uMzlmODM1MCAxMDA2NDQKLS0tIGEvc3JjL2dwdS9HckFsbG9jUG9vbC5jcHAKKysrIGIvc3JjL2dwdS9HckFsbG9jUG9vbC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgZlB0ciArPSBieXRlczsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9Ci0gICAgCisKICAgICBzaXplX3QgcmVsZWFzZShzaXplX3QgYnl0ZXMpIHsKICAgICAgICAgR3JBc3NlcnQoYnl0ZXMgPiAwKTsKICAgICAgICAgc2l6ZV90IGZyZWUgPSBHck1pbihieXRlcywgZkJ5dGVzVG90YWwgLSBmQnl0ZXNGcmVlKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgZlB0ciAtPSBmcmVlOwogICAgICAgICByZXR1cm4gYnl0ZXMgLSBmcmVlOwogICAgIH0KLSAgICAKKwogICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBmQnl0ZXNUb3RhbCA9PSBmQnl0ZXNGcmVlOyB9CiB9OwogCkBAIC03OSw3ICs3OSw3IEBACiAKIHZvaWQqIEdyQWxsb2NQb29sOjphbGxvYyhzaXplX3Qgc2l6ZSkgewogICAgIHRoaXMtPnZhbGlkYXRlKCk7Ci0gICAgCisKICAgICBpZiAoIWZCbG9jayB8fCAhZkJsb2NrLT5jYW5BbGxvYyhzaXplKSkgewogICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gR3JNYXgoZk1pbkJsb2NrU2l6ZSwgc2l6ZSk7CiAgICAgICAgIGZCbG9jayA9IEJsb2NrOjpDcmVhdGUoYmxvY2tTaXplLCBmQmxvY2spOwpAQCAtOTAsNyArOTAsNyBAQAogCiB2b2lkIEdyQWxsb2NQb29sOjpyZWxlYXNlKHNpemVfdCBieXRlcykgewogICAgIHRoaXMtPnZhbGlkYXRlKCk7Ci0gICAgCisKICAgICB3aGlsZSAoYnl0ZXMgJiYgTlVMTCAhPSBmQmxvY2spIHsKICAgICAgICAgYnl0ZXMgPSBmQmxvY2stPnJlbGVhc2UoYnl0ZXMpOwogICAgICAgICBpZiAoZkJsb2NrLT5lbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyQWxsb2NQb29sLmggYi9zcmMvZ3B1L0dyQWxsb2NQb29sLmgKaW5kZXggM2VjYzRhYS4uMzQ4OWNiOSAxMDA2NDQKLS0tIGEvc3JjL2dwdS9HckFsbG9jUG9vbC5oCisrKyBiL3NyYy9ncHUvR3JBbGxvY1Bvb2wuaApAQCAtMjksNyArMjksNyBAQAogICAgICAqICBhZGRyZXNzIHdhcyBhbGxvY2F0ZWQgYnkgbWFsbG9jIG9yIG5ldyAoYmVjYXVzZSBpdCBoYXNuJ3QpLgogICAgICAqLwogICAgIHZvaWQqIGFsbG9jKHNpemVfdCBieXRlcyk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZWxlYXNlcyB0aGUgbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgYnl0ZXMgYmFjayB0byBhbGxvY3Bvb2wuCiAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyQnVmZmVyQWxsb2NQb29sLmNwcCBiL3NyYy9ncHUvR3JCdWZmZXJBbGxvY1Bvb2wuY3BwCmluZGV4IDcwOTI0ZjIuLmMyZWUzNTcgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JCdWZmZXJBbGxvY1Bvb2wuY3BwCisrKyBiL3NyYy9ncHUvR3JCdWZmZXJBbGxvY1Bvb2wuY3BwCkBAIC0xMzQsMTEgKzEzNCwxMSBAQAogICAgICAgICBHckFzc2VydCghZkJsb2Nrc1tpXS5mQnVmZmVyLT5pc0xvY2tlZCgpKTsKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmQmxvY2tzLmNvdW50KCk7ICsraSkgewotICAgICAgICBzaXplX3QgYnl0ZXMgPSBmQmxvY2tzW2ldLmZCdWZmZXItPnNpemVJbkJ5dGVzKCkgLSBmQmxvY2tzW2ldLmZCeXRlc0ZyZWU7IAorICAgICAgICBzaXplX3QgYnl0ZXMgPSBmQmxvY2tzW2ldLmZCdWZmZXItPnNpemVJbkJ5dGVzKCkgLSBmQmxvY2tzW2ldLmZCeXRlc0ZyZWU7CiAgICAgICAgIGJ5dGVzSW5Vc2UgKz0gYnl0ZXM7CiAgICAgICAgIEdyQXNzZXJ0KGJ5dGVzIHx8IHVudXNlZEJsb2NrQWxsb3dlZCk7CiAgICAgfQotICAgIAorCiAgICAgR3JBc3NlcnQoYnl0ZXNJblVzZSA9PSBmQnl0ZXNJblVzZSk7CiAgICAgaWYgKHVudXNlZEJsb2NrQWxsb3dlZCkgewogICAgICAgICBHckFzc2VydCgoZkJ5dGVzSW5Vc2UgJiYgIWZCbG9ja3MuZW1wdHkoKSkgfHwKQEAgLTE4MSw3ICsxODEsNyBAQAogICAgIC8vIG1heSBiZSBjaGVhdGluZyBvbiB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIGJ5IHNocmlua2luZyB0aGUgYnVmZmVyIG9uCiAgICAgLy8gdXBkYXRlRGF0YSgpIGlmIHRoZSBhbW91bnQgb2YgZGF0YSBwYXNzZWQgaXMgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZmZlcgogICAgIC8vIHNpemUuCi0gICAgCisKICAgICBpZiAoIWNyZWF0ZUJsb2NrKHNpemUpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ncHUvR3JCdWZmZXJBbGxvY1Bvb2wuaCBiL3NyYy9ncHUvR3JCdWZmZXJBbGxvY1Bvb2wuaAppbmRleCAzZTJjZDM5Li43ZWQ0YjBjIDEwMDY0NAotLS0gYS9zcmMvZ3B1L0dyQnVmZmVyQWxsb2NQb29sLmgKKysrIGIvc3JjL2dwdS9HckJ1ZmZlckFsbG9jUG9vbC5oCkBAIC0xNjQsNyArMTY0LDcgQEAKICNpZiBHUl9ERUJVRwogICAgIHZvaWQgdmFsaWRhdGUoYm9vbCB1bnVzZWRCbG9ja0FsbG93ZWQgPSBmYWxzZSkgY29uc3Q7CiAjZW5kaWYKLSAgICAKKwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZkJ5dGVzSW5Vc2U7CiAKICAgICBHckdwdSogICAgICAgICAgICAgICAgICAgICAgICAgIGZHcHU7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyQ2FjaGVJRC5jcHAgYi9zcmMvZ3B1L0dyQ2FjaGVJRC5jcHAKaW5kZXggNWY2MGQ5NC4uNGM2ZGQ0OSAxMDA2NDQKLS0tIGEvc3JjL2dwdS9HckNhY2hlSUQuY3BwCisrKyBiL3NyYy9ncHUvR3JDYWNoZUlELmNwcApAQCAtMTAsNyArMTAsNyBAQAogCiB1aW50OF90IEdyQ2FjaGVJRDo6R2V0TmV4dERvbWFpbigpIHsKICAgICAvLyAwIHJlc2VydmVkIGZvciBrVW5yZXN0cmljdGVkX1Jlc291cmNlRG9tYWluCi0gICAgc3RhdGljIGludDMyX3QgZ05leHREb21haW4gPSAxOyAgICAgCisgICAgc3RhdGljIGludDMyX3QgZ05leHREb21haW4gPSAxOwogCiAgICAgaW50MzJfdCBkb21haW4gPSBza19hdG9taWNfaW5jKCZnTmV4dERvbWFpbik7CiAgICAgaWYgKGRvbWFpbiA+PSAyNTYpIHsKQEAgLTIyLDcgKzIyLDcgQEAKIAogdWludDhfdCBHckNhY2hlSUQ6OkdldE5leHRSZXNvdXJjZVR5cGUoKSB7CiAgICAgLy8gMCByZXNlcnZlZCBmb3Iga0ludmFsaWRfUmVzb3VyY2VUeXBlCi0gICAgc3RhdGljIGludDMyX3QgZ05leHRSZXNvdXJjZVR5cGUgPSAxOyAgICAgICAKKyAgICBzdGF0aWMgaW50MzJfdCBnTmV4dFJlc291cmNlVHlwZSA9IDE7CiAKICAgICBpbnQzMl90IHR5cGUgPSBza19hdG9taWNfaW5jKCZnTmV4dFJlc291cmNlVHlwZSk7CiAgICAgaWYgKHR5cGUgPj0gMjU2KSB7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyQ2xpcERhdGEuY3BwIGIvc3JjL2dwdS9HckNsaXBEYXRhLmNwcAppbmRleCA0ODg2NDNkLi43Yzg0YzE4IDEwMDY0NAotLS0gYS9zcmMvZ3B1L0dyQ2xpcERhdGEuY3BwCisrKyBiL3NyYy9ncHUvR3JDbGlwRGF0YS5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzSW50ZXJzZWN0aW9uT2ZSZWN0cykgY29uc3QgewogICAgIEdyUmVjdCBkZXZCb3VuZHM7CiAKLSAgICBmQ2xpcFN0YWNrLT5nZXRDb25zZXJ2YXRpdmVCb3VuZHMoLWZPcmlnaW4uZlgsIAorICAgIGZDbGlwU3RhY2stPmdldENvbnNlcnZhdGl2ZUJvdW5kcygtZk9yaWdpbi5mWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWZPcmlnaW4uZlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2UtPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2UtPmhlaWdodCgpLApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9HckNsaXBNYXNrTWFuYWdlci5jcHAgYi9zcmMvZ3B1L0dyQ2xpcE1hc2tNYW5hZ2VyLmNwcAppbmRleCBhMWNkNzViLi5kZThmMzIzIDEwMDY0NAotLS0gYS9zcmMvZ3B1L0dyQ2xpcE1hc2tNYW5hZ2VyLmNwcAorKysgYi9zcmMvZ3B1L0dyQ2xpcE1hc2tNYW5hZ2VyLmNwcApAQCAtMjYsNyArMjYsNyBAQAogR3JDbGlwTWFza0NhY2hlOjpHckNsaXBNYXNrQ2FjaGUoKQogICAgIDogZkNvbnRleHQoTlVMTCkKICAgICAsIGZTdGFjayhzaXplb2YoR3JDbGlwU3RhY2tGcmFtZSkpIHsKLSAgICAvLyBXZSBuZWVkIGFuIGluaXRpYWwgZnJhbWUgdG8gY2FwdHVyZSB0aGUgY2xpcCBzdGF0ZSBwcmlvciB0byAKKyAgICAvLyBXZSBuZWVkIGFuIGluaXRpYWwgZnJhbWUgdG8gY2FwdHVyZSB0aGUgY2xpcCBzdGF0ZSBwcmlvciB0bwogICAgIC8vIGFueSBwdXNoZXMKICAgICBTa05FV19QTEFDRU1FTlQoZlN0YWNrLnB1c2hfYmFjaygpLCBHckNsaXBTdGFja0ZyYW1lKTsKIH0KQEAgLTM3LDEwICszNywxMCBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogbmFtZXNwYWNlIHsKLS8vIHNldCB1cCB0aGUgZHJhdyBzdGF0ZSB0byBlbmFibGUgdGhlIGFhIGNsaXBwaW5nIG1hc2suIEJlc2lkZXMgc2V0dGluZyB1cCB0aGUgCisvLyBzZXQgdXAgdGhlIGRyYXcgc3RhdGUgdG8gZW5hYmxlIHRoZSBhYSBjbGlwcGluZyBtYXNrLiBCZXNpZGVzIHNldHRpbmcgdXAgdGhlCiAvLyBzYW1wbGVyIG1hdHJpeCB0aGlzIGFsc28gYWx0ZXJzIHRoZSB2ZXJ0ZXggbGF5b3V0Ci12b2lkIHNldHVwX2RyYXdzdGF0ZV9hYWNsaXAoR3JHcHUqIGdwdSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JUZXh0dXJlKiByZXN1bHQsIAordm9pZCBzZXR1cF9kcmF3c3RhdGVfYWFjbGlwKEdyR3B1KiBncHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JUZXh0dXJlKiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JJUmVjdCAmZGV2Qm91bmQpIHsKICAgICBHckRyYXdTdGF0ZSogZHJhd1N0YXRlID0gZ3B1LT5kcmF3U3RhdGUoKTsKICAgICBHckFzc2VydChkcmF3U3RhdGUpOwpAQCAtNDksNyArNDksNyBAQAogCiAgICAgR3JNYXRyaXggbWF0OwogICAgIG1hdC5zZXRJRGl2KHJlc3VsdC0+d2lkdGgoKSwgcmVzdWx0LT5oZWlnaHQoKSk7Ci0gICAgbWF0LnByZVRyYW5zbGF0ZShTa0ludFRvU2NhbGFyKC1kZXZCb3VuZC5mTGVmdCksIAorICAgIG1hdC5wcmVUcmFuc2xhdGUoU2tJbnRUb1NjYWxhcigtZGV2Qm91bmQuZkxlZnQpLAogICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtZGV2Qm91bmQuZlRvcCkpOwogICAgIG1hdC5wcmVDb25jYXQoZHJhd1N0YXRlLT5nZXRWaWV3TWF0cml4KCkpOwogCkBAIC0xMzQsOCArMTM0LDggQEAKICAgICAgICAgLy8gcmVjdHMgY2FuIGFsd2F5cyBiZSBkcmF3biBkaXJlY3RseSB3L28gdXNpbmcgdGhlIHNvZnR3YXJlIHBhdGgKICAgICAgICAgLy8gc28gb25seSBwYXRocyBuZWVkIHRvIGJlIGNoZWNrZWQKICAgICAgICAgaWYgKE5VTEwgIT0gY2xpcC0+ZlBhdGggJiYKLSAgICAgICAgICAgIHBhdGhfbmVlZHNfU1dfcmVuZGVyZXIodGhpcy0+Z2V0Q29udGV4dCgpLCBmR3B1LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNsaXAtPmZQYXRoLCAKKyAgICAgICAgICAgIHBhdGhfbmVlZHNfU1dfcmVuZGVyZXIodGhpcy0+Z2V0Q29udGV4dCgpLCBmR3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2xpcC0+ZlBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9wYXRoX2ZpbGwoKmNsaXAtPmZQYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC0+ZkRvQUEpKSB7CiAgICAgICAgICAgICB1c2VTVyA9IHRydWU7CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICBHcklSZWN0IGRldkNsaXBCb3VuZHM7CiAgICAgYm9vbCBpc0ludGVyc2VjdGlvbk9mUmVjdHMgPSBmYWxzZTsKIAotICAgIGNsaXBEYXRhSW4tPmdldENvbnNlcnZhdGl2ZUJvdW5kcyhydCwgJmRldkNsaXBCb3VuZHMsIAorICAgIGNsaXBEYXRhSW4tPmdldENvbnNlcnZhdGl2ZUJvdW5kcyhydCwgJmRldkNsaXBCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc0ludGVyc2VjdGlvbk9mUmVjdHMpOwogICAgIGlmIChkZXZDbGlwQm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzUsMTEgKzE3NSwxMSBAQAogCiAjaWYgR1JfU1dfQ0xJUAogICAgIC8vIElmIE1TQUEgaXMgZW5hYmxlZCB3ZSBjYW4gZG8gZXZlcnl0aGluZyBpbiB0aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgLy8gT3RoZXJ3aXNlIGNoZWNrIGlmIHdlIHNob3VsZCBqdXN0IGNyZWF0ZSB0aGUgZW50aXJlIGNsaXAgbWFzayAKKyAgICAvLyBPdGhlcndpc2UgY2hlY2sgaWYgd2Ugc2hvdWxkIGp1c3QgY3JlYXRlIHRoZSBlbnRpcmUgY2xpcCBtYXNrCiAgICAgLy8gaW4gc29mdHdhcmUgKHRoaXMgd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGUgY2xpcCBtYXNrIGlzIGFudGktYWxpYXNlZAogICAgIC8vIGFuZCB0b28gY29tcGxleCBmb3IgdGhlIGdwdSB0byBoYW5kbGUgaW4gaXRzIGVudGlyZXR5KQogICAgIGlmICgwID09IHJ0LT5udW1TYW1wbGVzKCkgJiYKLSAgICAgICAgcmVxdWlyZXNBQSAmJiAKKyAgICAgICAgcmVxdWlyZXNBQSAmJgogICAgICAgICB0aGlzLT51c2VTV09ubHlQYXRoKCpjbGlwRGF0YUluLT5mQ2xpcFN0YWNrKSkgewogICAgICAgICAvLyBUaGUgY2xpcCBnZW9tZXRyeSBpcyBjb21wbGV4IGVub3VnaCB0aGF0IGl0IHdpbGwgYmUgbW9yZQogICAgICAgICAvLyBlZmZpY2llbnQgdG8gY3JlYXRlIGl0IGVudGlyZWx5IGluIHNvZnR3YXJlCkBAIC0yMTksMTIgKzIxOSwxMiBAQAogICAgIH0KICNlbmRpZiAvLyBHUl9BQV9DTElQCiAKLSAgICAvLyBFaXRoZXIgYSBoYXJkIChzdGVuY2lsIGJ1ZmZlcikgY2xpcCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgb3IgCisgICAgLy8gRWl0aGVyIGEgaGFyZCAoc3RlbmNpbCBidWZmZXIpIGNsaXAgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIG9yCiAgICAgLy8gYW4gYW50aWFsaWFzZWQgY2xpcCBjb3VsZG4ndCBiZSBjcmVhdGVkLiBJbiBlaXRoZXIgY2FzZSwgZnJlZSB1cAogICAgIC8vIHRoZSB0ZXh0dXJlIGluIHRoZSBhbnRpYWxpYXNlZCBtYXNrIGNhY2hlLgogICAgIC8vIFRPRE86IHRoaXMgbWF5IHJlcXVpcmUgbW9yZSBpbnZlc3RpZ2F0aW9uLiBHYW5lc2ggcGVyZm9ybXMgYSBsb3Qgb2YKICAgICAvLyB1dGlsaXR5IGRyYXdzIChlLmcuLCBjbGVhcnMsIEluT3JkZXJEcmF3QnVmZmVyIHBsYXliYWNrcykgdGhhdCBoaXQKLSAgICAvLyB0aGUgc3RlbmNpbCBidWZmZXIgcGF0aC4gVGhlc2UgbWF5IGJlICJpbmNvcnJlY3RseSIgY2xlYXJpbmcgdGhlIAorICAgIC8vIHRoZSBzdGVuY2lsIGJ1ZmZlciBwYXRoLiBUaGVzZSBtYXkgYmUgImluY29ycmVjdGx5IiBjbGVhcmluZyB0aGUKICAgICAvLyBBQSBjYWNoZS4KICAgICBmQUFDYWNoZS5yZXNldCgpOwogCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICB9CiAKICAgICAvLyB1c2UgdGhlIHN0ZW5jaWwgY2xpcCBpZiB3ZSBjYW4ndCByZXByZXNlbnQgdGhlIGNsaXAgYXMgYSByZWN0YW5nbGUuCi0gICAgYm9vbCB1c2VTdGVuY2lsID0gIWNsaXBEYXRhSW4tPmZDbGlwU3RhY2stPmlzV2lkZU9wZW4oKSAmJiAKKyAgICBib29sIHVzZVN0ZW5jaWwgPSAhY2xpcERhdGFJbi0+ZkNsaXBTdGFjay0+aXNXaWRlT3BlbigpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIWRldkNsaXBCb3VuZHMuaXNFbXB0eSgpOwogCiAgICAgaWYgKHVzZVN0ZW5jaWwpIHsKQEAgLTI2OSwxMyArMjY5LDEzIEBACiAgKiAiZGV2Q29udGFpbmVlIiBpcyBpbiBkZXZpY2UgY29vcmRpYXRlcy4gIm9yaWdpbiIgcHJvdmlkZXMgdGhlIG1hcHBpbmcgYmV0d2VlbgogICogdGhlIHR3by4KICAqLwotYm9vbCBjb250YWlucyhjb25zdCBTa1JlY3QmIGNhbnZDb250YWluZXIsIAorYm9vbCBjb250YWlucyhjb25zdCBTa1JlY3QmIGNhbnZDb250YWluZXIsCiAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRldkNvbnRhaW5lZSwKICAgICAgICAgICAgICAgY29uc3QgU2tJUG9pbnQmIG9yaWdpbikgewogICAgIHJldHVybiAgIWRldkNvbnRhaW5lZS5pc0VtcHR5KCkgJiYgIWNhbnZDb250YWluZXIuaXNFbXB0eSgpICYmCi0gICAgICAgICAgICBjYW52Q29udGFpbmVyLmZMZWZ0IDw9IFNrSW50VG9TY2FsYXIoZGV2Q29udGFpbmVlLmZMZWZ0K29yaWdpbi5mWCkgJiYgCisgICAgICAgICAgICBjYW52Q29udGFpbmVyLmZMZWZ0IDw9IFNrSW50VG9TY2FsYXIoZGV2Q29udGFpbmVlLmZMZWZ0K29yaWdpbi5mWCkgJiYKICAgICAgICAgICAgIGNhbnZDb250YWluZXIuZlRvcCA8PSBTa0ludFRvU2NhbGFyKGRldkNvbnRhaW5lZS5mVG9wK29yaWdpbi5mWSkgJiYKLSAgICAgICAgICAgIGNhbnZDb250YWluZXIuZlJpZ2h0ID49IFNrSW50VG9TY2FsYXIoZGV2Q29udGFpbmVlLmZSaWdodCtvcmlnaW4uZlgpICYmIAorICAgICAgICAgICAgY2FudkNvbnRhaW5lci5mUmlnaHQgPj0gU2tJbnRUb1NjYWxhcihkZXZDb250YWluZWUuZlJpZ2h0K29yaWdpbi5mWCkgJiYKICAgICAgICAgICAgIGNhbnZDb250YWluZXIuZkJvdHRvbSA+PSBTa0ludFRvU2NhbGFyKGRldkNvbnRhaW5lZS5mQm90dG9tK29yaWdpbi5mWSk7CiB9CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogCiAgICAgR3JBc3NlcnQoTlVMTCAhPSBpdGVyICYmIE5VTEwgIT0gY2xlYXJUb0luc2lkZSAmJiBOVUxMICE9IGZpcnN0T3ApOwogCi0gICAgLy8gbG9naWNhbGx5IGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY2xpcCBzdGFjayBpcyAKKyAgICAvLyBsb2dpY2FsbHkgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjbGlwIHN0YWNrIGlzCiAgICAgLy8gcHJvY2Vzc2VkIHRoZSBjbGlwIGlzIGVudGlyZWx5IG9wZW4uIEhvd2V2ZXIsIGRlcGVuZGluZyBvbiB0aGUKICAgICAvLyBmaXJzdCBzZXQgb3Agd2UgbWF5IHByZWZlciB0byBjbGVhciB0byAwIGZvciBwZXJmb3JtYW5jZS4gV2UgbWF5CiAgICAgLy8gYWxzbyBiZSBhYmxlIHRvIHNraXAgdGhlIGluaXRpYWwgY2xpcCBwYXRocy9yZWN0cy4gV2UgbG9vcCB1bnRpbApAQCAtMzMxLDcgKzMzMSw3IEBACiAgICAgICAgICAgICAgICAgLy8gd2UgY2FuIHNraXAgYSBsZWFkaW5nIHVuaW9uLgogICAgICAgICAgICAgY2FzZSBTa1JlZ2lvbjo6a1VuaW9uX09wOgogICAgICAgICAgICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGx5IG91dHNpZGUgdGhlbiB1bmlvbiBpcwotICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgcmVwbGFjZS4gT3RoZXJ3aXNlLCBldmVyeSBwaXhlbCBpcyBzdGlsbCAKKyAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIHJlcGxhY2UuIE90aGVyd2lzZSwgZXZlcnkgcGl4ZWwgaXMgc3RpbGwKICAgICAgICAgICAgICAgICAvLyBjbGVhclRvSW5zaWRlCiAgICAgICAgICAgICAgICAgaWYgKCEqY2xlYXJUb0luc2lkZSkgewogICAgICAgICAgICAgICAgICAgICAqZmlyc3RPcCA9IFNrUmVnaW9uOjprUmVwbGFjZV9PcDsKQEAgLTM4NSw4ICszODUsOCBAQAogbmFtZXNwYWNlIHsKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIHNldCB1cCB0aGUgT3BlbkdMIGJsZW5kIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHNwZWNpZmllZCAKLS8vIGJvb2xlYW4gb3BlcmF0aW9uIGZvciBhbHBoYSBjbGlwIG1hc2sgY3JlYXRpb24gCisvLyBzZXQgdXAgdGhlIE9wZW5HTCBibGVuZCBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBzcGVjaWZpZWQKKy8vIGJvb2xlYW4gb3BlcmF0aW9uIGZvciBhbHBoYSBjbGlwIG1hc2sgY3JlYXRpb24KIHZvaWQgc2V0dXBfYm9vbGVhbl9ibGVuZGNvZWZmcyhHckRyYXdTdGF0ZSogZHJhd1N0YXRlLCBTa1JlZ2lvbjo6T3Agb3ApIHsKIAogICAgIHN3aXRjaCAob3ApIHsKQEAgLTQyMyw4ICs0MjMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JJUmVjdCYgcmVzdWx0Qm91bmRzKSB7CiAKICAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0ZXh0dXJlKAotICAgICAgICAgICAgICAgIEdyU1dNYXNrSGVscGVyOjpEcmF3UGF0aE1hc2tUb1RleHR1cmUoY29udGV4dCwgcGF0aCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRCb3VuZHMsIGZpbGwsIAorICAgICAgICAgICAgICAgIEdyU1dNYXNrSGVscGVyOjpEcmF3UGF0aE1hc2tUb1RleHR1cmUoY29udGV4dCwgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEJvdW5kcywgZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvQUEsIE5VTEwpKTsKICAgICBpZiAoTlVMTCA9PSB0ZXh0dXJlKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxMCw3ICs1MTAsNyBAQAogICAgIGRyYXdTdGF0ZS0+c2FtcGxlcigwKS0+cmVzZXQoc2FtcGxlTSk7CiAgICAgZHJhd1N0YXRlLT5jcmVhdGVUZXh0dXJlRWZmZWN0KDAsIHRleHR1cmUpOwogCi0gICAgR3JSZWN0IHJlY3QgPSBHclJlY3Q6Ok1ha2VXSChTa0ludFRvU2NhbGFyKHRhcmdldC0+d2lkdGgoKSksIAorICAgIEdyUmVjdCByZWN0ID0gR3JSZWN0OjpNYWtlV0goU2tJbnRUb1NjYWxhcih0YXJnZXQtPndpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih0YXJnZXQtPmhlaWdodCgpKSk7CiAKICAgICBmR3B1LT5kcmF3U2ltcGxlUmVjdChyZWN0LCBOVUxMKTsKQEAgLTUyMCw3ICs1MjAsNyBAQAogCiAvLyBnZXQgYSB0ZXh0dXJlIHRvIGFjdCBhcyBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIEFBIGNsaXAgYm9vbGVhbiBvcGVyYXRpb25zCiAvLyBUT0RPOiBnaXZlbiB0aGUgZXhwZW5zZSBvZiBjcmVhdGVUZXh0dXJlIHdlIG1heSB3YW50IHRvIGp1c3QgY2FjaGUgdGhpcyB0b28KLXZvaWQgR3JDbGlwTWFza01hbmFnZXI6OmdldFRlbXAoY29uc3QgR3JJUmVjdCYgYm91bmRzLCAKK3ZvaWQgR3JDbGlwTWFza01hbmFnZXI6OmdldFRlbXAoY29uc3QgR3JJUmVjdCYgYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckF1dG9TY3JhdGNoVGV4dHVyZSogdGVtcCkgewogICAgIGlmIChOVUxMICE9IHRlbXAtPnRleHR1cmUoKSkgewogICAgICAgICAvLyB3ZSd2ZSBhbHJlYWR5IGFsbG9jYXRlZCB0aGUgdGVtcCB0ZXh0dXJlCkBAIC01NzgsNyArNTc4LDcgQEAKIAogICAgIC8vIFRPRE86IG1ha2Ugc3VyZSB3ZSBkb24ndCBvdXRzZXQgaWYgYm91bmRzIGFyZSBzdGlsbCAwLDAgQCBtaW4KIAotICAgIGlmIChmQUFDYWNoZS5jYW5SZXVzZSgqY2xpcERhdGFJbi5mQ2xpcFN0YWNrLCAKKyAgICBpZiAoZkFBQ2FjaGUuY2FuUmV1c2UoKmNsaXBEYXRhSW4uZkNsaXBTdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2Q2xpcEJvdW5kcy53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZDbGlwQm91bmRzLmhlaWdodCgpKSkgewogICAgICAgICAqcmVzdWx0ID0gZkFBQ2FjaGUuZ2V0TGFzdE1hc2soKTsKQEAgLTYyMCwxNyArNjIwLDE3IEBACiAKICAgICBpZiAoMCAhPSBkZXZSZXN1bHRCb3VuZHMtPmZUb3AgfHwgMCAhPSBkZXZSZXN1bHRCb3VuZHMtPmZMZWZ0IHx8CiAgICAgICAgIDAgIT0gY2xpcERhdGFJbi5mT3JpZ2luLmZYIHx8IDAgIT0gY2xpcERhdGFJbi5mT3JpZ2luLmZZKSB7Ci0gICAgICAgIC8vIGlmIHdlIHdlcmUgYWJsZSB0byB0cmltIGRvd24gdGhlIHNpemUgb2YgdGhlIG1hc2sgd2UgbmVlZCB0byAKKyAgICAgICAgLy8gaWYgd2Ugd2VyZSBhYmxlIHRvIHRyaW0gZG93biB0aGUgc2l6ZSBvZiB0aGUgbWFzayB3ZSBuZWVkIHRvCiAgICAgICAgIC8vIG9mZnNldCB0aGUgcGF0aHMgJiByZWN0cyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjb21wdXRlIGl0CiAgICAgICAgIGRyYXdTdGF0ZS0+dmlld01hdHJpeCgpLT5zZXRUcmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtZGV2UmVzdWx0Qm91bmRzLT5mTGVmdC1jbGlwRGF0YUluLmZPcmlnaW4uZlgpLCAKKyAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKC1kZXZSZXN1bHRCb3VuZHMtPmZMZWZ0LWNsaXBEYXRhSW4uZk9yaWdpbi5mWCksCiAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtZGV2UmVzdWx0Qm91bmRzLT5mVG9wLWNsaXBEYXRhSW4uZk9yaWdpbi5mWSkpOwogICAgIH0KIAogICAgIGJvb2wgY2xlYXJUb0luc2lkZTsKICAgICBTa1JlZ2lvbjo6T3AgZmlyc3RPcCA9IFNrUmVnaW9uOjprUmVwbGFjZV9PcDsgLy8gc3VwcHJlc3Mgd2FybmluZwogCi0gICAgU2tDbGlwU3RhY2s6Okl0ZXIgaXRlcigqY2xpcERhdGFJbi5mQ2xpcFN0YWNrLCAKKyAgICBTa0NsaXBTdGFjazo6SXRlciBpdGVyKCpjbGlwRGF0YUluLmZDbGlwU3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0NsaXBTdGFjazo6SXRlcjo6a0JvdHRvbV9JdGVyU3RhcnQpOwogICAgIGNvbnN0IFNrQ2xpcFN0YWNrOjpJdGVyOjpDbGlwKiBjbGlwID0gcHJvY2Vzc19pbml0aWFsX2NsaXBfZWxlbWVudHMoJml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXZSZXN1bHRCb3VuZHMsCkBAIC02MzgsOCArNjM4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpcnN0T3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBEYXRhSW4pOwogCi0gICAgZkdwdS0+Y2xlYXIoTlVMTCwgCi0gICAgICAgICAgICAgICAgY2xlYXJUb0luc2lkZSA/IDB4ZmZmZmZmZmYgOiAweDAwMDAwMDAwLCAKKyAgICBmR3B1LT5jbGVhcihOVUxMLAorICAgICAgICAgICAgICAgIGNsZWFyVG9JbnNpZGUgPyAweGZmZmZmZmZmIDogMHgwMDAwMDAwMCwKICAgICAgICAgICAgICAgICBhY2N1bS0+YXNSZW5kZXJUYXJnZXQoKSk7CiAKICAgICBHckF1dG9TY3JhdGNoVGV4dHVyZSB0ZW1wOwpAQCAtNjk4LDEyICs2OTgsMTIgQEAKICAgICAgICAgICAgIGlmICgwICE9IGRldlJlc3VsdEJvdW5kcy0+ZlRvcCB8fCAwICE9IGRldlJlc3VsdEJvdW5kcy0+ZkxlZnQgfHwKICAgICAgICAgICAgICAgICAwICE9IGNsaXBEYXRhSW4uZk9yaWdpbi5mWCB8fCAwICE9IGNsaXBEYXRhSW4uZk9yaWdpbi5mWSkgewogICAgICAgICAgICAgICAgIGRyYXdTdGF0ZS0+dmlld01hdHJpeCgpLT5zZXRUcmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKC1kZXZSZXN1bHRCb3VuZHMtPmZMZWZ0LWNsaXBEYXRhSW4uZk9yaWdpbi5mWCksIAorICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtZGV2UmVzdWx0Qm91bmRzLT5mTGVmdC1jbGlwRGF0YUluLmZPcmlnaW4uZlgpLAogICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtZGV2UmVzdWx0Qm91bmRzLT5mVG9wLWNsaXBEYXRhSW4uZk9yaWdpbi5mWSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBhbGwgdGhlIHJlbWFpbmluZyBvcHMgY2FuIGp1c3QgYmUgZGlyZWN0bHkgZHJhdyBpbnRvIAorICAgICAgICAgICAgLy8gYWxsIHRoZSByZW1haW5pbmcgb3BzIGNhbiBqdXN0IGJlIGRpcmVjdGx5IGRyYXcgaW50bwogICAgICAgICAgICAgLy8gdGhlIGFjY3VtdWxhdGlvbiBidWZmZXIKICAgICAgICAgICAgIHNldHVwX2Jvb2xlYW5fYmxlbmRjb2VmZnMoZHJhd1N0YXRlLCBvcCk7CiAgICAgICAgICAgICB0aGlzLT5kcmF3Q2xpcFNoYXBlKGFjY3VtLCBjbGlwLCAqZGV2UmVzdWx0Qm91bmRzKTsKQEAgLTcxNiw3ICs3MTYsNyBAQAogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gQ3JlYXRlIGEgMS1iaXQgY2xpcCBtYXNrIGluIHRoZSBzdGVuY2lsIGJ1ZmZlci4gJ2RldkNsaXBCb3VuZHMnIGFyZSBpbiBkZXZpY2UgCisvLyBDcmVhdGUgYSAxLWJpdCBjbGlwIG1hc2sgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyLiAnZGV2Q2xpcEJvdW5kcycgYXJlIGluIGRldmljZQogLy8gKGFzIG9wcG9zZWQgdG8gY2FudmFzKSBjb29yZGluYXRlcwogYm9vbCBHckNsaXBNYXNrTWFuYWdlcjo6Y3JlYXRlU3RlbmNpbENsaXBNYXNrKGNvbnN0IEdyQ2xpcERhdGEmIGNsaXBEYXRhSW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JJUmVjdCYgZGV2Q2xpcEJvdW5kcykgewpAQCAtNzU5LDEwICs3NTksMTAgQEAKICAgICAgICAgR3JEcmF3VGFyZ2V0OjpBdXRvR2VvbWV0cnlQdXNoIGFncChmR3B1KTsKIAogICAgICAgICBpZiAoMCAhPSBjbGlwRGF0YUluLmZPcmlnaW4uZlggfHwgMCAhPSBjbGlwRGF0YUluLmZPcmlnaW4uZlkpIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgc2F2ZUxheWVyJ3Mgb2Zmc2V0IHRvIHRoZSB2aWV3IG1hdHJpeCByYXRoZXIgdGhhbiAKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgc2F2ZUxheWVyJ3Mgb2Zmc2V0IHRvIHRoZSB2aWV3IG1hdHJpeCByYXRoZXIgdGhhbgogICAgICAgICAgICAgLy8gb2Zmc2V0IGVhY2ggaW5kaXZpZHVhbCBkcmF3CiAgICAgICAgICAgICBkcmF3U3RhdGUtPnZpZXdNYXRyaXgoKS0+c2V0VHJhbnNsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtY2xpcERhdGFJbi5mT3JpZ2luLmZYKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKC1jbGlwRGF0YUluLmZPcmlnaW4uZlgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcigtY2xpcERhdGFJbi5mT3JpZ2luLmZZKSk7CiAgICAgICAgIH0KIApAQCAtNzgwLDcgKzc4MCw3IEBACiAgICAgICAgIGJvb2wgY2xlYXJUb0luc2lkZTsKICAgICAgICAgU2tSZWdpb246Ok9wIGZpcnN0T3AgPSBTa1JlZ2lvbjo6a1JlcGxhY2VfT3A7IC8vIHN1cHByZXNzIHdhcm5pbmcKIAotICAgICAgICBTa0NsaXBTdGFjazo6SXRlciBpdGVyKCpvbGRDbGlwRGF0YS0+ZkNsaXBTdGFjaywgCisgICAgICAgIFNrQ2xpcFN0YWNrOjpJdGVyIGl0ZXIoKm9sZENsaXBEYXRhLT5mQ2xpcFN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ2xpcFN0YWNrOjpJdGVyOjprQm90dG9tX0l0ZXJTdGFydCk7CiAgICAgICAgIGNvbnN0IFNrQ2xpcFN0YWNrOjpJdGVyOjpDbGlwKiBjbGlwID0gcHJvY2Vzc19pbml0aWFsX2NsaXBfZWxlbWVudHMoJml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldlJUUmVjdCwKQEAgLTg5OCw4ICs4OTgsOCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU0VUX1JBTkRPTV9DT0xPUgotICAgICAgICAgICAgICAgICAgICAvLyAnZGV2Q2xpcEJvdW5kcycgaXMgYWxyZWFkeSBpbiBkZXZpY2UgY29vcmRpbmF0ZXMgc28gdGhlIAotICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2xhdGlvbiBpbiB0aGUgdmlldyBtYXRyaXggaXMgaW5hcHByb3ByaWF0ZS4gCisgICAgICAgICAgICAgICAgICAgIC8vICdkZXZDbGlwQm91bmRzJyBpcyBhbHJlYWR5IGluIGRldmljZSBjb29yZGluYXRlcyBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRpb24gaW4gdGhlIHZpZXcgbWF0cml4IGlzIGluYXBwcm9wcmlhdGUuCiAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gY2FudmFzIHNwYWNlIHNvIHRoZSBkcmF3biByZWN0IHdpbGwKICAgICAgICAgICAgICAgICAgICAgLy8gYmUgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAgR3JSZWN0IGNhbnZDbGlwQm91bmRzOwpAQCAtOTIxLDcgKzkyMSw3IEBACiAKIC8vIG1hcHBpbmcgb2YgY2xpcC1yZXNwZWN0aW5nIHN0ZW5jaWwgZnVuY3MgdG8gbm9ybWFsIHN0ZW5jaWwgZnVuY3MKIC8vIG1hcHBpbmcgZGVwZW5kcyBvbiB3aGV0aGVyIHN0ZW5jaWwtY2xpcHBpbmcgaXMgaW4gZWZmZWN0Lgotc3RhdGljIGNvbnN0IEdyU3RlbmNpbEZ1bmMgCitzdGF0aWMgY29uc3QgR3JTdGVuY2lsRnVuYwogICAgIGdTcGVjaWFsVG9CYXNpY1N0ZW5jaWxGdW5jWzJdW2tDbGlwU3RlbmNpbEZ1bmNDb3VudF0gPSB7CiAgICAgey8vIFN0ZW5jaWwtQ2xpcHBpbmcgaXMgRElTQUJMRUQsICB3ZSBhcmUgZWZmZWN0aXZlbHkgYWx3YXlzIGluc2lkZSB0aGUgY2xpcAogICAgICAgICAvLyBJbiB0aGUgQ2xpcCBGdW5jcwpAQCAtOTY2LDcgKzk2Niw3IEBACiAgICAgICAgIGtBbHdheXNJZkluQ2xpcF9TdGVuY2lsRnVuYywKICAgICAgICAgMHgwMDAwLAogICAgICAgICAweDAwMDAsCi0gICAgICAgIDB4MDAwMCk7ICAgIAorICAgICAgICAweDAwMDApOwogICAgIHJldHVybiAqR1JfQ09OU1RfU1RFTkNJTF9TRVRUSU5HU19QVFJfRlJPTV9TVFJVQ1RfUFRSKCZnU2V0dGluZ3MpOwogfQogfQpAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAogICAgIC8vIFRPRE86IGR5bmFtaWNhbGx5IGF0dGFjaCBhIHN0ZW5jaWwgYnVmZmVyCiAgICAgaW50IHN0ZW5jaWxCaXRzID0gMDsKLSAgICBHclN0ZW5jaWxCdWZmZXIqIHN0ZW5jaWxCdWZmZXIgPSAKKyAgICBHclN0ZW5jaWxCdWZmZXIqIHN0ZW5jaWxCdWZmZXIgPQogICAgICAgICBkcmF3U3RhdGUuZ2V0UmVuZGVyVGFyZ2V0KCktPmdldFN0ZW5jaWxCdWZmZXIoKTsKICAgICBpZiAoTlVMTCAhPSBzdGVuY2lsQnVmZmVyKSB7CiAgICAgICAgIHN0ZW5jaWxCaXRzID0gc3RlbmNpbEJ1ZmZlci0+Yml0cygpOwpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKICAgICAgICAgICAgICAgICBmdW5jTWFzayAmPSB1c2VyQml0czsKICAgICAgICAgICAgICAgICBmdW5jUmVmICY9IHVzZXJCaXRzOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgR3JTdGVuY2lsRnVuYyogdGFibGUgPSAKKyAgICAgICAgICAgIGNvbnN0IEdyU3RlbmNpbEZ1bmMqIHRhYmxlID0KICAgICAgICAgICAgICAgICBnU3BlY2lhbFRvQmFzaWNTdGVuY2lsRnVuY1tyZXNwZWN0Q2xpcF07CiAgICAgICAgICAgICBmdW5jID0gdGFibGVbZnVuYyAtIGtCYXNpY1N0ZW5jaWxGdW5jQ291bnRdOwogICAgICAgICAgICAgR3JBc3NlcnQoZnVuYyA+PSAwICYmIGZ1bmMgPCBrQmFzaWNTdGVuY2lsRnVuY0NvdW50KTsKQEAgLTExNDUsMTQgKzExNDUsMTQgQEAKICAgICBHclNXTWFza0hlbHBlciBoZWxwZXIodGhpcy0+Z2V0Q29udGV4dCgpKTsKIAogICAgIEdyTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXguc2V0VHJhbnNsYXRlKFNrSW50VG9TY2FsYXIoLWNsaXBEYXRhSW4uZk9yaWdpbi5mWCksIAorICAgIG1hdHJpeC5zZXRUcmFuc2xhdGUoU2tJbnRUb1NjYWxhcigtY2xpcERhdGFJbi5mT3JpZ2luLmZYKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoLWNsaXBEYXRhSW4uZk9yaWdpbi5mWSkpOwogICAgIGhlbHBlci5pbml0KCpkZXZSZXN1bHRCb3VuZHMsICZtYXRyaXgpOwogCiAgICAgYm9vbCBjbGVhclRvSW5zaWRlOwogICAgIFNrUmVnaW9uOjpPcCBmaXJzdE9wID0gU2tSZWdpb246OmtSZXBsYWNlX09wOyAvLyBzdXBwcmVzcyB3YXJuaW5nCiAKLSAgICBTa0NsaXBTdGFjazo6SXRlciBpdGVyKCpjbGlwRGF0YUluLmZDbGlwU3RhY2ssIAorICAgIFNrQ2xpcFN0YWNrOjpJdGVyIGl0ZXIoKmNsaXBEYXRhSW4uZkNsaXBTdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ2xpcFN0YWNrOjpJdGVyOjprQm90dG9tX0l0ZXJTdGFydCk7CiAgICAgY29uc3QgU2tDbGlwU3RhY2s6Okl0ZXI6OkNsaXAqIGNsaXAgPSBwcm9jZXNzX2luaXRpYWxfY2xpcF9lbGVtZW50cygmaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGV2UmVzdWx0Qm91bmRzLApAQCAtMTE5Myw3ICsxMTkzLDcgQEAKICAgICAgICAgICAgICAgICBTa1BhdGggdGVtcDsKICAgICAgICAgICAgICAgICB0ZW1wLmFkZFJlY3QoKmNsaXAtPmZSZWN0KTsKIAotICAgICAgICAgICAgICAgIGhlbHBlci5kcmF3KHRlbXAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCwgCisgICAgICAgICAgICAgICAgaGVscGVyLmRyYXcodGVtcCwgU2tSZWdpb246OmtSZXBsYWNlX09wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJbnZlcnNlRXZlbk9kZF9HclBhdGhGaWxsLCBjbGlwLT5mRG9BQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoTlVMTCAhPSBjbGlwLT5mUGF0aCkgewpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtPmZEb0FBLCAweEZGKTsKIAogICAgICAgICB9IGVsc2UgaWYgKE5VTEwgIT0gY2xpcC0+ZlBhdGgpIHsKLSAgICAgICAgICAgIGhlbHBlci5kcmF3KCpjbGlwLT5mUGF0aCwgCisgICAgICAgICAgICBoZWxwZXIuZHJhdygqY2xpcC0+ZlBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBvcCwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9wYXRoX2ZpbGwoKmNsaXAtPmZQYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtPmZEb0FBLCAweEZGKTsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvR3JDb250ZXh0LmNwcCBiL3NyYy9ncHUvR3JDb250ZXh0LmNwcAppbmRleCA2ZjFlMjRkLi5kMWZkYjE4IDEwMDY0NAotLS0gYS9zcmMvZ3B1L0dyQ29udGV4dC5jcHAKKysrIGIvc3JjL2dwdS9HckNvbnRleHQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogdm9pZCBHckNvbnRleHQ6OmZyZWVHcHVSZXNvdXJjZXMoKSB7CiAgICAgdGhpcy0+Zmx1c2goKTsKLSAgICAKKwogICAgIGZHcHUtPnB1cmdlUmVzb3VyY2VzKCk7CiAKICAgICBmQUFSZWN0UmVuZGVyZXItPnJlc2V0KCk7CkBAIC0yNzUsNyArMjc1LDcgQEAKICAgICB9CiB9CiAKLS8vIFRoZSBkZXNpcmVkIHRleHR1cmUgaXMgTlBPVCBhbmQgdGlsZWQgYnV0IHRoYXQgaXNuJ3Qgc3VwcG9ydGVkIGJ5IAorLy8gVGhlIGRlc2lyZWQgdGV4dHVyZSBpcyBOUE9UIGFuZCB0aWxlZCBidXQgdGhhdCBpc24ndCBzdXBwb3J0ZWQgYnkKIC8vIHRoZSBjdXJyZW50IGhhcmR3YXJlLiBSZXNpemUgdGhlIHRleHR1cmUgdG8gYmUgYSBQT1QKIEdyVGV4dHVyZSogR3JDb250ZXh0OjpjcmVhdGVSZXNpemVkVGV4dHVyZShjb25zdCBHclRleHR1cmVEZXNjJiBkZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyQ2FjaGVEYXRhJiBjYWNoZURhdGEsCkBAIC0zNzMsNyArMzczLDcgQEAKICAgICBHclRleHR1cmUqIHRleHR1cmUgPSBOVUxMOwogICAgIGlmIChHclRleHR1cmU6Ok5lZWRzUmVzaXppbmcocmVzb3VyY2VLZXkpKSB7CiAgICAgICAgIHRleHR1cmUgPSB0aGlzLT5jcmVhdGVSZXNpemVkVGV4dHVyZShkZXNjLCBjYWNoZURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNEYXRhLCByb3dCeXRlcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNEYXRhLCByb3dCeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyVGV4dHVyZTo6TmVlZHNGaWx0ZXJpbmcocmVzb3VyY2VLZXkpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0ZXh0dXJlID0gZkdwdS0+Y3JlYXRlVGV4dHVyZShkZXNjLCBzcmNEYXRhLCByb3dCeXRlcyk7CkBAIC00MTYsMTIgKzQxNiwxMiBAQAogICAgICAgICBpZiAoTlVMTCAhPSByZXNvdXJjZSB8fCBrRXhhY3RfU2NyYXRjaFRleE1hdGNoID09IG1hdGNoKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBXZSBubyBsb25nZXIgdHJ5IHRvIHJldXNlIHRleHR1cmVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHVzZWQgYXMgcmVuZGVyIHRhcmdldHMgaW4gCisgICAgICAgIC8vIFdlIG5vIGxvbmdlciB0cnkgdG8gcmV1c2UgdGV4dHVyZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdXNlZCBhcyByZW5kZXIgdGFyZ2V0cyBpbgogICAgICAgICAvLyBzaXR1YXRpb25zIHdoZXJlIG5vIFJUIGlzIG5lZWRlZDsgZG9pbmcgb3RoZXJ3aXNlIGNhbiBjb25mdXNlIHRoZSB2aWRlbyBkcml2ZXIgYW5kCiAgICAgICAgIC8vIGNhdXNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHByb2JsZW1zIGluIHNvbWUgY2FzZXMuCiAgICAgICAgIGlmIChkZXNjLmZGbGFncyAmIGtOb1N0ZW5jaWxfR3JUZXh0dXJlRmxhZ0JpdCkgewogICAgICAgICAgICAgZGVzYy5mRmxhZ3MgPSBkZXNjLmZGbGFncyAmIH5rTm9TdGVuY2lsX0dyVGV4dHVyZUZsYWdCaXQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWRvdWJsZWRXKSB7IAorICAgICAgICB9IGVsc2UgaWYgKCFkb3VibGVkVykgewogICAgICAgICAgICAgZGVzYy5mRmxhZ3MgPSBpbkRlc2MuZkZsYWdzOwogICAgICAgICAgICAgZGVzYy5mV2lkdGggKj0gMjsKICAgICAgICAgICAgIGRvdWJsZWRXID0gdHJ1ZTsKQEAgLTQzMyw3ICs0MzMsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIGlmIChOVUxMID09IHJlc291cmNlKSB7CkBAIC01NTQsNyArNTU0LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIGNvbnN0IEdyQ2xpcERhdGEqIEdyQ29udGV4dDo6Z2V0Q2xpcCgpIGNvbnN0IHsKLSAgICByZXR1cm4gZkdwdS0+Z2V0Q2xpcCgpOyAKKyAgICByZXR1cm4gZkdwdS0+Z2V0Q2xpcCgpOwogfQogCiB2b2lkIEdyQ29udGV4dDo6c2V0Q2xpcChjb25zdCBHckNsaXBEYXRhKiBjbGlwRGF0YSkgewpAQCAtNjQ5LDE5ICs2NDksMTkgQEAKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVjdHMgZWRnZXMgYXJlIGludGVnZXItYWxpZ25lZC4KICAqLwogc3RhdGljIGJvb2wgaXNJUmVjdChjb25zdCBHclJlY3QmIHIpIHsKLSAgICByZXR1cm4gR3JTY2FsYXJJc0ludChyLmZMZWZ0KSAmJiBHclNjYWxhcklzSW50KHIuZlRvcCkgJiYgCisgICAgcmV0dXJuIEdyU2NhbGFySXNJbnQoci5mTGVmdCkgJiYgR3JTY2FsYXJJc0ludChyLmZUb3ApICYmCiAgICAgICAgICAgIEdyU2NhbGFySXNJbnQoci5mUmlnaHQpICYmIEdyU2NhbGFySXNJbnQoci5mQm90dG9tKTsKIH0KIAogc3RhdGljIGJvb2wgYXBwbHlfYWFfdG9fcmVjdChHckRyYXdUYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JSZWN0JiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNjYWxhciB3aWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyU2NhbGFyIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHck1hdHJpeCogbWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHck1hdHJpeCogY29tYmluZWRNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVjdCogZGV2UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogdXNlVmVydGV4Q292ZXJhZ2UpIHsKICAgICAvLyB3ZSB1c2UgYSBzaW1wbGUgY292ZXJhZ2UgcmFtcCB0byBkbyBhYSBvbiBheGlzLWFsaWduZWQgcmVjdHMKLSAgICAvLyB3ZSBjaGVjayBpZiB0aGUgcmVjdCB3aWxsIGJlIGF4aXMtYWxpZ25lZCwgYW5kIHRoZSByZWN0IHdvbid0IGxhbmQgb24gCisgICAgLy8gd2UgY2hlY2sgaWYgdGhlIHJlY3Qgd2lsbCBiZSBheGlzLWFsaWduZWQsIGFuZCB0aGUgcmVjdCB3b24ndCBsYW5kIG9uCiAgICAgLy8gaW50ZWdlciBjb29yZHMuCiAKICAgICAvLyB3ZSBhcmUga2VlcGluZyBhcm91bmQgdGhlICJ0d2VhayB0aGUgYWxwaGEiIHRyaWNrIGJlY2F1c2UKQEAgLTY5Miw3ICs2OTIsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKE5VTEwgIT0gbWF0cml4ICYmIAorICAgIGlmIChOVUxMICE9IG1hdHJpeCAmJgogICAgICAgICAhbWF0cml4LT5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTcwMiw3ICs3MDIsNyBAQAogICAgICAgICBjb21iaW5lZE1hdHJpeC0+cHJlQ29uY2F0KCptYXRyaXgpOwogICAgICAgICBHckFzc2VydChjb21iaW5lZE1hdHJpeC0+cHJlc2VydmVzQXhpc0FsaWdubWVudCgpKTsKICAgICB9Ci0gICAgCisKICAgICBjb21iaW5lZE1hdHJpeC0+bWFwUmVjdChkZXZSZWN0LCByZWN0KTsKICAgICBkZXZSZWN0LT5zb3J0KCk7CiAKQEAgLTc0NSwxMCArNzQ1LDEwIEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cm9rZVNpemUuc2V0KEdSX1NjYWxhcjEsIEdSX1NjYWxhcjEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZkFBUmVjdFJlbmRlcmVyLT5zdHJva2VBQVJlY3QodGhpcy0+Z2V0R3B1KCksIHRhcmdldCwgZGV2UmVjdCwgCisgICAgICAgICAgICBmQUFSZWN0UmVuZGVyZXItPnN0cm9rZUFBUmVjdCh0aGlzLT5nZXRHcHUoKSwgdGFyZ2V0LCBkZXZSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VTaXplLCB1c2VWZXJ0ZXhDb3ZlcmFnZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmQUFSZWN0UmVuZGVyZXItPmZpbGxBQVJlY3QodGhpcy0+Z2V0R3B1KCksIHRhcmdldCwgCisgICAgICAgICAgICBmQUFSZWN0UmVuZGVyZXItPmZpbGxBQVJlY3QodGhpcy0+Z2V0R3B1KCksIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldlJlY3QsIHVzZVZlcnRleENvdmVyYWdlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC04MTUsNyArODE1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRyYXdTdGF0ZS0+cHJlQ29uY2F0Vmlld01hdHJpeChtKTsKICAgICAgICAgICAgIGRyYXdTdGF0ZS0+cHJlQ29uY2F0U2FtcGxlck1hdHJpY2VzKG0pOwotIAorCiAgICAgICAgICAgICB0YXJnZXQtPmRyYXdOb25JbmRleGVkKGtUcmlhbmdsZUZhbl9HclByaW1pdGl2ZVR5cGUsIDAsIDQpOwogI2Vsc2UKICAgICAgICAgICAgIHRhcmdldC0+ZHJhd1NpbXBsZVJlY3QocmVjdCwgbWF0cml4KTsKQEAgLTk0MSw3ICs5NDEsNyBAQAogICAgICAgICB0YXJnZXQtPnNldFZlcnRleFNvdXJjZVRvQXJyYXkobGF5b3V0LCBwb3NpdGlvbnMsIHZlcnRleENvdW50KTsKICAgICB9CiAKLSAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgYXBwbHkgb2Zmc2NyZWVuIEFBIHRvIHRoaXMgcGF0aC4gTmVlZCBpbXByb3ZlZCAKKyAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgYXBwbHkgb2Zmc2NyZWVuIEFBIHRvIHRoaXMgcGF0aC4gTmVlZCBpbXByb3ZlZAogICAgIC8vIG1hbmFnZW1lbnQgb2YgR3JEcmF3VGFyZ2V0J3MgZ2VvbWV0cnkgdG8gYXZvaWQgY29weWluZyBwb2ludHMgcGVyLXRpbGUuCiAKICAgICBpZiAoTlVMTCAhPSBpbmRpY2VzKSB7CkBAIC0xMTgyLDcgKzExODIsNyBAQAogICAgICAgICB0aGlzLT5mbHVzaCgpOwogICAgIH0KIAotICAgIGZHcHUtPndyaXRlVGV4dHVyZVBpeGVscyh0ZXh0dXJlLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsIAorICAgIGZHcHUtPndyaXRlVGV4dHVyZVBpeGVscyh0ZXh0dXJlLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgYnVmZmVyLCByb3dCeXRlcyk7CiB9CiAKQEAgLTEyNDQsNyArMTI0NCw3IEBACiAgICAgU0tfVFJBQ0VfRVZFTlQwKCJHckNvbnRleHQ6OnJlYWRSZW5kZXJUYXJnZXRQaXhlbHMiKTsKICAgICBBU1NFUlRfT1dORURfUkVTT1VSQ0UodGFyZ2V0KTsKIAotICAgIGlmIChOVUxMID09IHRhcmdldCkgeyAKKyAgICBpZiAoTlVMTCA9PSB0YXJnZXQpIHsKICAgICAgICAgdGFyZ2V0ID0gZkRyYXdTdGF0ZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIGlmIChOVUxMID09IHRhcmdldCkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM5OSw3ICsxMzk5LDcgQEAKICAgICBmR3B1LT5kcmF3U2ltcGxlUmVjdChyZWN0LCBOVUxMKTsKIH0KIAotdm9pZCBHckNvbnRleHQ6OndyaXRlUmVuZGVyVGFyZ2V0UGl4ZWxzKEdyUmVuZGVyVGFyZ2V0KiB0YXJnZXQsIAordm9pZCBHckNvbnRleHQ6OndyaXRlUmVuZGVyVGFyZ2V0UGl4ZWxzKEdyUmVuZGVyVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclBpeGVsQ29uZmlnIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIsCkBAIC0xNDA4LDcgKzE0MDgsNyBAQAogICAgIFNLX1RSQUNFX0VWRU5UMCgiR3JDb250ZXh0Ojp3cml0ZVJlbmRlclRhcmdldFBpeGVscyIpOwogICAgIEFTU0VSVF9PV05FRF9SRVNPVVJDRSh0YXJnZXQpOwogCi0gICAgaWYgKE5VTEwgPT0gdGFyZ2V0KSB7IAorICAgIGlmIChOVUxMID09IHRhcmdldCkgewogICAgICAgICB0YXJnZXQgPSBmRHJhd1N0YXRlLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgaWYgKE5VTEwgPT0gdGFyZ2V0KSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDIxLDcgKzE0MjEsNyBAQAogICAgIC8vIElmIHRoZSBSVCBpcyBhbHNvIGEgdGV4dHVyZSBhbmQgd2UgZG9uJ3QgaGF2ZSB0byBwcmVtdWx0aXBseSB0aGVuIHRha2UgdGhlIHRleHR1cmUgcGF0aC4KICAgICAvLyBXZSBleHBlY3QgdG8gYmUgYXQgbGVhc3QgYXMgZmFzdCBvciBmYXN0ZXIgc2luY2UgaXQgZG9lc24ndCB1c2UgYW4gaW50ZXJtZWRpYXRlIHRleHR1cmUgYXMKICAgICAvLyB3ZSBkbyBiZWxvdy4KLSAgICAKKwogI2lmICFHUl9NQUNfQlVJTEQKICAgICAvLyBBdCBsZWFzdCBzb21lIGRyaXZlcnMgb24gdGhlIE1hYyBnZXQgY29uZnVzZWQgd2hlbiBnbFRleEltYWdlMkQgaXMgY2FsbGVkCiAgICAgLy8gb24gYSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGFuIEZCTy4gVGhlIEZCTyBzdGlsbCBzZWVzIHRoZSBvbGQgaW1hZ2UuIFRPRE86CkBAIC0xNTIxLDcgKzE1MjEsNyBAQAogICAgICAgICAgICAgKmZEcmF3U3RhdGUtPnNhbXBsZXIocykgPSBwYWludC5nZXRNYXNrU2FtcGxlcihpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIGRpc2FibGUgYWxsIHN0YWdlcyBub3QgYWNjZXNzaWJsZSB2aWEgdGhlIHBhaW50CiAgICAgZm9yIChpbnQgcyA9IEdyUGFpbnQ6OmtUb3RhbFN0YWdlczsgcyA8IEdyRHJhd1N0YXRlOjprTnVtU3RhZ2VzOyArK3MpIHsKICAgICAgICAgZkRyYXdTdGF0ZS0+ZGlzYWJsZVN0YWdlKHMpOwpAQCAtMTU3Nyw3ICsxNTc3LDcgQEAKIC8qCiAgKiBUaGlzIG1ldGhvZCBmaW5kcyBhIHBhdGggcmVuZGVyZXIgdGhhdCBjYW4gZHJhdyB0aGUgc3BlY2lmaWVkIHBhdGggb24KICAqIHRoZSBwcm92aWRlZCB0YXJnZXQuCi0gKiBEdWUgdG8gaXRzIGV4cGVuc2UsIHRoZSBzb2Z0d2FyZSBwYXRoIHJlbmRlcmVyIGhhcyBzcGxpdCBvdXQgc28gaXQgY2FuIAorICogRHVlIHRvIGl0cyBleHBlbnNlLCB0aGUgc29mdHdhcmUgcGF0aCByZW5kZXJlciBoYXMgc3BsaXQgb3V0IHNvIGl0IGNhbgogICogY2FuIGJlIGluZGl2aWR1YWxseSBhbGxvd2VkL2Rpc2FsbG93ZWQgdmlhIHRoZSAiYWxsb3dTVyIgYm9vbGVhbi4KICAqLwogR3JQYXRoUmVuZGVyZXIqIEdyQ29udGV4dDo6Z2V0UGF0aFJlbmRlcmVyKGNvbnN0IFNrUGF0aCYgcGF0aCwKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbnRpQWxpYXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd1NXKSB7CiAgICAgaWYgKE5VTEwgPT0gZlBhdGhSZW5kZXJlckNoYWluKSB7Ci0gICAgICAgIGZQYXRoUmVuZGVyZXJDaGFpbiA9IAorICAgICAgICBmUGF0aFJlbmRlcmVyQ2hhaW4gPQogICAgICAgICAgICAgU2tORVdfQVJHUyhHclBhdGhSZW5kZXJlckNoYWluLAogICAgICAgICAgICAgICAgICAgICAgICAodGhpcywgR3JQYXRoUmVuZGVyZXJDaGFpbjo6a05vbmVfVXNhZ2VGbGFnKSk7CiAgICAgfQpAQCAtMTcyNiw3ICsxNzI2LDcgQEAKICAgICBTa1JlY3Qgc3JjUmVjdChyZWN0KTsKICAgICBzY2FsZV9yZWN0KCZzcmNSZWN0LCAxLjBmIC8gc2NhbGVGYWN0b3JYLCAxLjBmIC8gc2NhbGVGYWN0b3JZKTsKICAgICBzcmNSZWN0LnJvdW5kT3V0KCk7Ci0gICAgc2NhbGVfcmVjdCgmc3JjUmVjdCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjYWxlRmFjdG9yWCksIAorICAgIHNjYWxlX3JlY3QoJnNyY1JlY3QsIHN0YXRpY19jYXN0PGZsb2F0PihzY2FsZUZhY3RvclgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihzY2FsZUZhY3RvclkpKTsKIAogICAgIEF1dG9DbGlwIGFjcyh0aGlzLCBzcmNSZWN0KTsKQEAgLTE3NzEsNyArMTc3MSw3IEBACiAgICAgICAgIGlmIChzY2FsZUZhY3RvclggPiAxKSB7CiAgICAgICAgICAgICAvLyBDbGVhciBvdXQgYSByYWRpdXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBzcmNSZWN0IHRvIHByZXZlbnQgdGhlCiAgICAgICAgICAgICAvLyBYIGNvbnZvbHV0aW9uIGZyb20gcmVhZGluZyBnYXJiYWdlLgotICAgICAgICAgICAgY2xlYXJSZWN0ID0gU2tJUmVjdDo6TWFrZVhZV0goc3JjSVJlY3QuZlJpZ2h0LCBzcmNJUmVjdC5mVG9wLCAKKyAgICAgICAgICAgIGNsZWFyUmVjdCA9IFNrSVJlY3Q6Ok1ha2VYWVdIKHNyY0lSZWN0LmZSaWdodCwgc3JjSVJlY3QuZlRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1c1gsIHNyY0lSZWN0LmhlaWdodCgpKTsKICAgICAgICAgICAgIHRoaXMtPmNsZWFyKCZjbGVhclJlY3QsIDB4MCk7CiAgICAgICAgIH0KQEAgLTE3ODgsNyArMTc4OCw3IEBACiAgICAgICAgIGlmIChzY2FsZUZhY3RvclkgPiAxIHx8IHNpZ21hWCA+IDAuMGYpIHsKICAgICAgICAgICAgIC8vIENsZWFyIG91dCBhIHJhZGl1cyBiZWxvdyB0aGUgc3JjUmVjdCB0byBwcmV2ZW50IHRoZSBZCiAgICAgICAgICAgICAvLyBjb252b2x1dGlvbiBmcm9tIHJlYWRpbmcgZ2FyYmFnZS4KLSAgICAgICAgICAgIGNsZWFyUmVjdCA9IFNrSVJlY3Q6Ok1ha2VYWVdIKHNyY0lSZWN0LmZMZWZ0LCBzcmNJUmVjdC5mQm90dG9tLCAKKyAgICAgICAgICAgIGNsZWFyUmVjdCA9IFNrSVJlY3Q6Ok1ha2VYWVdIKHNyY0lSZWN0LmZMZWZ0LCBzcmNJUmVjdC5mQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3Qud2lkdGgoKSwgcmFkaXVzWSk7CiAgICAgICAgICAgICB0aGlzLT5jbGVhcigmY2xlYXJSZWN0LCAweDApOwogICAgICAgICB9CkBAIC0xODA0LDEwICsxODA0LDEwIEBACiAgICAgaWYgKHNjYWxlRmFjdG9yWCA+IDEgfHwgc2NhbGVGYWN0b3JZID4gMSkgewogICAgICAgICAvLyBDbGVhciBvbmUgcGl4ZWwgdG8gdGhlIHJpZ2h0IGFuZCBiZWxvdywgdG8gYWNjb21tb2RhdGUgYmlsaW5lYXIKICAgICAgICAgLy8gdXBzYW1wbGluZy4KLSAgICAgICAgY2xlYXJSZWN0ID0gU2tJUmVjdDo6TWFrZVhZV0goc3JjSVJlY3QuZkxlZnQsIHNyY0lSZWN0LmZCb3R0b20sIAorICAgICAgICBjbGVhclJlY3QgPSBTa0lSZWN0OjpNYWtlWFlXSChzcmNJUmVjdC5mTGVmdCwgc3JjSVJlY3QuZkJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3Qud2lkdGgoKSArIDEsIDEpOwogICAgICAgICB0aGlzLT5jbGVhcigmY2xlYXJSZWN0LCAweDApOwotICAgICAgICBjbGVhclJlY3QgPSBTa0lSZWN0OjpNYWtlWFlXSChzcmNJUmVjdC5mUmlnaHQsIHNyY0lSZWN0LmZUb3AsIAorICAgICAgICBjbGVhclJlY3QgPSBTa0lSZWN0OjpNYWtlWFlXSChzcmNJUmVjdC5mUmlnaHQsIHNyY0lSZWN0LmZUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHNyY0lSZWN0LmhlaWdodCgpKTsKICAgICAgICAgdGhpcy0+Y2xlYXIoJmNsZWFyUmVjdCwgMHgwKTsKICAgICAgICAgLy8gRklYTUU6ICBUaGlzIHNob3VsZCBiZSBtaXRjaGVsbCwgbm90IGJpbGluZWFyLgpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9HckRlZmF1bHRQYXRoUmVuZGVyZXIuY3BwIGIvc3JjL2dwdS9HckRlZmF1bHRQYXRoUmVuZGVyZXIuY3BwCmluZGV4IGE1OWE3YmUuLmViNDA3MmQgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JEZWZhdWx0UGF0aFJlbmRlcmVyLmNwcAorKysgYi9zcmMvZ3B1L0dyRGVmYXVsdFBhdGhSZW5kZXJlci5jcHAKQEAgLTI2OSw3ICsyNjksNyBAQAogICAgICAgICAgICAgY2FzZSBrUXVhZHJhdGljX1BhdGhDbWQ6IHsKICAgICAgICAgICAgICAgICAvLyBmaXJzdCBwdCBvZiBxdWFkIGlzIHRoZSBwdCB3ZSBlbmRlZCBvbiBpbiBwcmV2aW91cyBzdGVwCiAgICAgICAgICAgICAgICAgdWludDE2X3QgZmlyc3RRUHRJZHggPSAodWludDE2X3QpKHZlcnQgLSBiYXNlKSAtIDE7Ci0gICAgICAgICAgICAgICAgdWludDE2X3QgbnVtUHRzID0gICh1aW50MTZfdCkgCisgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtUHRzID0gICh1aW50MTZfdCkKICAgICAgICAgICAgICAgICAgICAgR3JQYXRoVXRpbHM6OmdlbmVyYXRlUXVhZHJhdGljUG9pbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0c1swXSwgcHRzWzFdLCBwdHNbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU3BhY2VUb2xTcWQsICZ2ZXJ0LApAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgKnZlcnRleENudCA9IHZlcnQgLSBiYXNlOwogICAgICppbmRleENudCA9IGlkeCAtIGlkeEJhc2U7CiAKLSAgICBpZiAoTlVMTCAhPSB0cmFuc2xhdGUgJiYgCisgICAgaWYgKE5VTEwgIT0gdHJhbnNsYXRlICYmCiAgICAgICAgICh0cmFuc2xhdGUtPmZYIHx8IHRyYW5zbGF0ZS0+ZlkpKSB7CiAgICAgICAgIGludCBjb3VudCA9IHZlcnQgLSBiYXNlOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogICAgICAgICAgICAgICAgIGRyYXdTdGF0ZS0+ZW5hYmxlU3RhdGUoR3JEcmF3U3RhdGU6OmtOb0NvbG9yV3JpdGVzX1N0YXRlQml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbmRleENudCkgewotICAgICAgICAgICAgICAgIHRhcmdldC0+ZHJhd0luZGV4ZWQocHJpbVR5cGUsIDAsIDAsIAorICAgICAgICAgICAgICAgIHRhcmdldC0+ZHJhd0luZGV4ZWQocHJpbVR5cGUsIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhDbnQsIGluZGV4Q250KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGFyZ2V0LT5kcmF3Tm9uSW5kZXhlZChwcmltVHlwZSwgMCwgdmVydGV4Q250KTsKQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUGF0aEZpbGwgZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckRyYXdUYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFudGlBbGlhcykgY29uc3QgewotICAgIC8vIHRoaXMgY2xhc3MgY2FuIGRyYXcgYW55IHBhdGggd2l0aCBhbnkgZmlsbCBidXQgZG9lc24ndCBkbyBhbnkgCisgICAgLy8gdGhpcyBjbGFzcyBjYW4gZHJhdyBhbnkgcGF0aCB3aXRoIGFueSBmaWxsIGJ1dCBkb2Vzbid0IGRvIGFueQogICAgIC8vIGFudGktYWxpYXNpbmcuCiAgICAgcmV0dXJuICFhbnRpQWxpYXM7CiB9CmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dySW5PcmRlckRyYXdCdWZmZXIuY3BwIGIvc3JjL2dwdS9HckluT3JkZXJEcmF3QnVmZmVyLmNwcAppbmRleCBlNTYyMzAwLi5lMDQzOTI2IDEwMDY0NAotLS0gYS9zcmMvZ3B1L0dySW5PcmRlckRyYXdCdWZmZXIuY3BwCisrKyBiL3NyYy9ncHUvR3JJbk9yZGVyRHJhd0J1ZmZlci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICBib29sIGRpc2FibGVkQ2xpcCA9IGZhbHNlOwogCiAgICAgICAgIGlmIChkcmF3U3RhdGUtPmlzQ2xpcFN0YXRlKCkpIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBHclJlY3QgZGV2Q2xpcFJlY3Q7CiAgICAgICAgICAgICBib29sIGlzSW50ZXJzZWN0aW9uT2ZSZWN0cyA9IGZhbHNlOwogCkBAIC0xODksNyArMTg5LDcgQEAKIAogICAgICAgICAgICAgR2VvbWV0cnlQb29sU3RhdGUmIHBvb2xTdGF0ZSA9IGZHZW9Qb29sU3RhdGVTdGFjay5iYWNrKCk7CiAKLSAgICAgICAgICAgIGFwcGVuZFRvUHJldmlvdXNEcmF3ID0gCisgICAgICAgICAgICBhcHBlbmRUb1ByZXZpb3VzRHJhdyA9CiAgICAgICAgICAgICAgICAga0RyYXdfQ21kICE9IGZDbWRzLmJhY2soKSAmJgogICAgICAgICAgICAgICAgIGxhc3REcmF3LmZWZXJ0ZXhCdWZmZXIgPT0gcG9vbFN0YXRlLmZQb29sVmVydGV4QnVmZmVyICYmCiAgICAgICAgICAgICAgICAgKGZDdXJyUXVhZCAqIDQgKyBsYXN0RHJhdy5mU3RhcnRWZXJ0ZXgpID09IHBvb2xTdGF0ZS5mUG9vbFN0YXJ0VmVydGV4OwpAQCAtMzczLDcgKzM3Myw3IEBACiAgICAgY2FzZSBrQXJyYXlfR2VvbWV0cnlTcmNUeXBlOiB7CiAgICAgICAgIHNpemVfdCB2ZXJ0ZXhCeXRlcyA9ICh2ZXJ0ZXhDb3VudCArIHN0YXJ0VmVydGV4KSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleFNpemUoZHJhdy0+ZlZlcnRleExheW91dCk7Ci0gICAgICAgIHBvb2xTdGF0ZS5mVXNlZFBvb2xWZXJ0ZXhCeXRlcyA9IAorICAgICAgICBwb29sU3RhdGUuZlVzZWRQb29sVmVydGV4Qnl0ZXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyTWF4KHBvb2xTdGF0ZS5mVXNlZFBvb2xWZXJ0ZXhCeXRlcywgdmVydGV4Qnl0ZXMpOwogICAgICAgICBkcmF3LT5mVmVydGV4QnVmZmVyID0gcG9vbFN0YXRlLmZQb29sVmVydGV4QnVmZmVyOwogICAgICAgICBkcmF3LT5mU3RhcnRWZXJ0ZXggKz0gcG9vbFN0YXRlLmZQb29sU3RhcnRWZXJ0ZXg7CkBAIC0zODgsMTAgKzM4OCwxMCBAQAogICAgIGNhc2Uga0J1ZmZlcl9HZW9tZXRyeVNyY1R5cGU6CiAgICAgICAgIGRyYXctPmZJbmRleEJ1ZmZlciA9IHRoaXMtPmdldEdlb21TcmMoKS5mSW5kZXhCdWZmZXI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1Jlc2VydmVkX0dlb21ldHJ5U3JjVHlwZTogLy8gZmFsbHRocm91Z2ggCisgICAgY2FzZSBrUmVzZXJ2ZWRfR2VvbWV0cnlTcmNUeXBlOiAvLyBmYWxsdGhyb3VnaAogICAgIGNhc2Uga0FycmF5X0dlb21ldHJ5U3JjVHlwZTogewogICAgICAgICBzaXplX3QgaW5kZXhCeXRlcyA9IChpbmRleENvdW50ICsgc3RhcnRJbmRleCkgKiBzaXplb2YodWludDE2X3QpOwotICAgICAgICBwb29sU3RhdGUuZlVzZWRQb29sSW5kZXhCeXRlcyA9IAorICAgICAgICBwb29sU3RhdGUuZlVzZWRQb29sSW5kZXhCeXRlcyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JNYXgocG9vbFN0YXRlLmZVc2VkUG9vbEluZGV4Qnl0ZXMsIGluZGV4Qnl0ZXMpOwogICAgICAgICBkcmF3LT5mSW5kZXhCdWZmZXIgPSBwb29sU3RhdGUuZlBvb2xJbmRleEJ1ZmZlcjsKICAgICAgICAgZHJhdy0+ZlN0YXJ0SW5kZXggKz0gcG9vbFN0YXRlLmZQb29sU3RhcnRJbmRleDsKQEAgLTQzNiw3ICs0MzYsNyBAQAogICAgIGNhc2Uga0FycmF5X0dlb21ldHJ5U3JjVHlwZTogewogICAgICAgICBzaXplX3QgdmVydGV4Qnl0ZXMgPSAodmVydGV4Q291bnQgKyBzdGFydFZlcnRleCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhTaXplKGRyYXctPmZWZXJ0ZXhMYXlvdXQpOwotICAgICAgICBwb29sU3RhdGUuZlVzZWRQb29sVmVydGV4Qnl0ZXMgPSAKKyAgICAgICAgcG9vbFN0YXRlLmZVc2VkUG9vbFZlcnRleEJ5dGVzID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHck1heChwb29sU3RhdGUuZlVzZWRQb29sVmVydGV4Qnl0ZXMsIHZlcnRleEJ5dGVzKTsKICAgICAgICAgZHJhdy0+ZlZlcnRleEJ1ZmZlciA9IHBvb2xTdGF0ZS5mUG9vbFZlcnRleEJ1ZmZlcjsKICAgICAgICAgZHJhdy0+ZlN0YXJ0VmVydGV4ICs9IHBvb2xTdGF0ZS5mUG9vbFN0YXJ0VmVydGV4OwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAgICAgc3AtPmZGaWxsID0gZmlsbDsKIH0KIAotdm9pZCBHckluT3JkZXJEcmF3QnVmZmVyOjpjbGVhcihjb25zdCBHcklSZWN0KiByZWN0LCAKK3ZvaWQgR3JJbk9yZGVyRHJhd0J1ZmZlcjo6Y2xlYXIoY29uc3QgR3JJUmVjdCogcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb2xvciBjb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgIEdySVJlY3QgcjsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICAgICAgICAgICAgICAgICsrY3VyckNsaXA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGtDbGVhcl9DbWQ6Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LT5jbGVhcigmZkNsZWFyc1tjdXJyQ2xlYXJdLmZSZWN0LCAKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmNsZWFyKCZmQ2xlYXJzW2N1cnJDbGVhcl0uZlJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQ2xlYXJzW2N1cnJDbGVhcl0uZkNvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkNsZWFyc1tjdXJyQ2xlYXJdLmZSZW5kZXJUYXJnZXQpOwogICAgICAgICAgICAgICAgICsrY3VyckNsZWFyOwpAQCAtNjM1LDEwICs2MzUsMTAgQEAKICAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBjbGllbnQgaGFzIGZpbmlzaGVkIHdyaXRpbmcgdG8gaXQuCiAgICAgICAgIGJvb2wgdGFyZ2V0SGFzUmVzZXJ2ZWRHZW9tID0KICAgICAgICAgICAgIGZBdXRvRmx1c2hUYXJnZXQtPmhhc1Jlc2VydmVkVmVydGljZXNPckluZGljZXMoKTsKLSAgICAgICAgCisKICAgICAgICAgaW50IHZjb3VudCA9IHZlcnRleENvdW50OwogICAgICAgICBpbnQgaWNvdW50ID0gaW5kZXhDb3VudDsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFpbnNpZGVHZW9QdXNoICYmCiAgICAgICAgICAgICAhdW5yZWxlYXNlZFZlcnRleFNwYWNlICYmCiAgICAgICAgICAgICAhdW5yZWxlYXNlZEluZGV4U3BhY2UgJiYKQEAgLTY4NywxNCArNjg3LDE0IEBACiAgICAgR3JBc3NlcnQodmVydGV4Q291bnQgPiAwKTsKICAgICBHckFzc2VydChOVUxMICE9IHZlcnRpY2VzKTsKICAgICBHckFzc2VydCgwID09IHBvb2xTdGF0ZS5mVXNlZFBvb2xWZXJ0ZXhCeXRlcyk7Ci0gICAgCisKICAgICAqdmVydGljZXMgPSBmVmVydGV4UG9vbC5tYWtlU3BhY2UodmVydGV4TGF5b3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvb2xTdGF0ZS5mUG9vbFZlcnRleEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvb2xTdGF0ZS5mUG9vbFN0YXJ0VmVydGV4KTsKICAgICByZXR1cm4gTlVMTCAhPSAqdmVydGljZXM7CiB9Ci0gICAgCisKIGJvb2wgR3JJbk9yZGVyRHJhd0J1ZmZlcjo6b25SZXNlcnZlSW5kZXhTcGFjZShpbnQgaW5kZXhDb3VudCwgdm9pZCoqIGluZGljZXMpIHsKICAgICBHZW9tZXRyeVBvb2xTdGF0ZSYgcG9vbFN0YXRlID0gZkdlb1Bvb2xTdGF0ZVN0YWNrLmJhY2soKTsKICAgICBHckFzc2VydChpbmRleENvdW50ID4gMCk7CkBAIC03MDksNyArNzA5LDcgQEAKIAogdm9pZCBHckluT3JkZXJEcmF3QnVmZmVyOjpyZWxlYXNlUmVzZXJ2ZWRWZXJ0ZXhTcGFjZSgpIHsKICAgICBHZW9tZXRyeVBvb2xTdGF0ZSYgcG9vbFN0YXRlID0gZkdlb1Bvb2xTdGF0ZVN0YWNrLmJhY2soKTsKLSAgICBjb25zdCBHZW9tZXRyeVNyY1N0YXRlJiBnZW9TcmMgPSB0aGlzLT5nZXRHZW9tU3JjKCk7IAorICAgIGNvbnN0IEdlb21ldHJ5U3JjU3RhdGUmIGdlb1NyYyA9IHRoaXMtPmdldEdlb21TcmMoKTsKIAogICAgIC8vIElmIHdlIGdldCBhIHJlbGVhc2UgdmVydGV4IHNwYWNlIGNhbGwgdGhlbiBvdXIgY3VycmVudCBzb3VyY2Ugc2hvdWxkIGVpdGhlciBiZSByZXNlcnZlZAogICAgIC8vIG9yIGFycmF5ICh3aGljaCB3ZSBjb3BpZWQgaW50byByZXNlcnZlZCBzcGFjZSkuCkBAIC03MjIsNyArNzIyLDcgQEAKICAgICAvLyBwb29sIGFueSBwb3J0aW9uIGF0IHRoZSB0YWlsIG9mIHRoZSBhbGxvY2F0aW9uIHRoYXQgbm8gZHJhdyByZWZlcmVuY2VkLgogICAgIHNpemVfdCByZXNlcnZlZFZlcnRleEJ5dGVzID0gVmVydGV4U2l6ZShnZW9TcmMuZlZlcnRleExheW91dCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvU3JjLmZWZXJ0ZXhDb3VudDsKLSAgICBmVmVydGV4UG9vbC5wdXRCYWNrKHJlc2VydmVkVmVydGV4Qnl0ZXMgLSAKKyAgICBmVmVydGV4UG9vbC5wdXRCYWNrKHJlc2VydmVkVmVydGV4Qnl0ZXMgLQogICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFN0YXRlLmZVc2VkUG9vbFZlcnRleEJ5dGVzKTsKICAgICBwb29sU3RhdGUuZlVzZWRQb29sVmVydGV4Qnl0ZXMgPSAwOwogICAgIHBvb2xTdGF0ZS5mUG9vbFZlcnRleEJ1ZmZlciA9IE5VTEw7CkBAIC03MzEsNyArNzMxLDcgQEAKIAogdm9pZCBHckluT3JkZXJEcmF3QnVmZmVyOjpyZWxlYXNlUmVzZXJ2ZWRJbmRleFNwYWNlKCkgewogICAgIEdlb21ldHJ5UG9vbFN0YXRlJiBwb29sU3RhdGUgPSBmR2VvUG9vbFN0YXRlU3RhY2suYmFjaygpOwotICAgIGNvbnN0IEdlb21ldHJ5U3JjU3RhdGUmIGdlb1NyYyA9IHRoaXMtPmdldEdlb21TcmMoKTsgCisgICAgY29uc3QgR2VvbWV0cnlTcmNTdGF0ZSYgZ2VvU3JjID0gdGhpcy0+Z2V0R2VvbVNyYygpOwogCiAgICAgLy8gSWYgd2UgZ2V0IGEgcmVsZWFzZSBpbmRleCBzcGFjZSBjYWxsIHRoZW4gb3VyIGN1cnJlbnQgc291cmNlIHNob3VsZCBlaXRoZXIgYmUgcmVzZXJ2ZWQKICAgICAvLyBvciBhcnJheSAod2hpY2ggd2UgY29waWVkIGludG8gcmVzZXJ2ZWQgc3BhY2UpLgpAQCAtNzQ2LDcgKzc0Niw3IEBACiAgICAgcG9vbFN0YXRlLmZQb29sSW5kZXhCdWZmZXIgPSBOVUxMOwogICAgIHBvb2xTdGF0ZS5mUG9vbFN0YXJ0SW5kZXggPSAwOwogfQotICAgIAorCiB2b2lkIEdySW5PcmRlckRyYXdCdWZmZXI6Om9uU2V0VmVydGV4U291cmNlVG9BcnJheShjb25zdCB2b2lkKiB2ZXJ0ZXhBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJ0ZXhDb3VudCkgewogCkBAIC04MTIsMTMgKzgxMiwxMyBAQAogICAgIC8vIHBvb2wuCiAgICAgaWYgKGtSZXNlcnZlZF9HZW9tZXRyeVNyY1R5cGUgPT0gcmVzdG9yZWRTdGF0ZS5mVmVydGV4U3JjIHx8CiAgICAgICAgIGtBcnJheV9HZW9tZXRyeVNyY1R5cGUgPT0gcmVzdG9yZWRTdGF0ZS5mVmVydGV4U3JjKSB7Ci0gICAgICAgIHBvb2xTdGF0ZS5mVXNlZFBvb2xWZXJ0ZXhCeXRlcyA9IAotICAgICAgICAgICAgVmVydGV4U2l6ZShyZXN0b3JlZFN0YXRlLmZWZXJ0ZXhMYXlvdXQpICogCisgICAgICAgIHBvb2xTdGF0ZS5mVXNlZFBvb2xWZXJ0ZXhCeXRlcyA9CisgICAgICAgICAgICBWZXJ0ZXhTaXplKHJlc3RvcmVkU3RhdGUuZlZlcnRleExheW91dCkgKgogICAgICAgICAgICAgcmVzdG9yZWRTdGF0ZS5mVmVydGV4Q291bnQ7CiAgICAgfQogICAgIGlmIChrUmVzZXJ2ZWRfR2VvbWV0cnlTcmNUeXBlID09IHJlc3RvcmVkU3RhdGUuZkluZGV4U3JjIHx8CiAgICAgICAgIGtBcnJheV9HZW9tZXRyeVNyY1R5cGUgPT0gcmVzdG9yZWRTdGF0ZS5mSW5kZXhTcmMpIHsKLSAgICAgICAgcG9vbFN0YXRlLmZVc2VkUG9vbEluZGV4Qnl0ZXMgPSBzaXplb2YodWludDE2X3QpICogCisgICAgICAgIHBvb2xTdGF0ZS5mVXNlZFBvb2xJbmRleEJ5dGVzID0gc2l6ZW9mKHVpbnQxNl90KSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVkU3RhdGUuZkluZGV4Q291bnQ7CiAgICAgfQogICAgIHRoaXMtPnJlc2V0RHJhd1RyYWNraW5nKCk7CkBAIC04MzIsNyArODMyLDcgQEAKIAogYm9vbCBHckluT3JkZXJEcmF3QnVmZmVyOjpuZWVkc05ld0NsaXAoKSBjb25zdCB7CiAgICBpZiAodGhpcy0+Z2V0RHJhd1N0YXRlKCkuaXNDbGlwU3RhdGUoKSkgewotICAgICAgIGlmIChmQ2xpcFNldCAmJiAKKyAgICAgICBpZiAoZkNsaXBTZXQgJiYKICAgICAgICAgICAgKGZDbGlwcy5iYWNrKCkgIT0gKmZDbGlwLT5mQ2xpcFN0YWNrIHx8CiAgICAgICAgICAgICBmQ2xpcE9yaWdpbnMuYmFjaygpICE9IGZDbGlwLT5mT3JpZ2luKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvR3JJbk9yZGVyRHJhd0J1ZmZlci5oIGIvc3JjL2dwdS9HckluT3JkZXJEcmF3QnVmZmVyLmgKaW5kZXggNzNhOTA2OC4uMDhkZDc3NCAxMDA2NDQKLS0tIGEvc3JjL2dwdS9HckluT3JkZXJEcmF3QnVmZmVyLmgKKysrIGIvc3JjL2dwdS9HckluT3JkZXJEcmF3QnVmZmVyLmgKQEAgLTEwNCwxNiArMTA0LDE2IEBACiAKICAgICAvKioKICAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgZHJhdyBidWZmZXIgdG8gYXV0b21hdGljYWxseSBmbHVzaCBpdHNlbGYgdG8KLSAgICAgKiBhbm90aGVyIHRhcmdldC4gVGhpcyBtZWFucyB0aGUgYnVmZmVyIG1heSBpbnRlcm5hbGx5IGNhbGwgCisgICAgICogYW5vdGhlciB0YXJnZXQuIFRoaXMgbWVhbnMgdGhlIGJ1ZmZlciBtYXkgaW50ZXJuYWxseSBjYWxsCiAgICAgICogdGhpcy0+Zmx1c2hUbyh0YXJnZXQpIHdoZW4gaXQgaXMgc2FmZSB0byBkbyBzby4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIFdoZW4gdGhlIGF1dG8gZmx1c2ggdGFyZ2V0IGlzIHNldCB0byBOVUxMIChhcyBpdCBpbml0aWFsbHkgaXMpIHRoZSBkcmF3CiAgICAgICogYnVmZmVyIHdpbGwgbmV2ZXIgYXV0b21hdGljYWxseSBmbHVzaCBpdHNlbGYuCiAgICAgICovCiAgICAgdm9pZCBzZXRBdXRvRmx1c2hUYXJnZXQoR3JEcmF3VGFyZ2V0KiB0YXJnZXQpOwogCiAgICAgLy8gb3ZlcnJpZGVzIGZyb20gR3JEcmF3VGFyZ2V0Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEdyUmVjdCYgcmVjdCwgCisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEdyUmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JNYXRyaXgqIG1hdHJpeCA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyUmVjdCogc3JjUmVjdHNbXSA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyTWF0cml4KiBzcmNNYXRyaWNlc1tdID0gTlVMTCkgU0tfT1ZFUlJJREU7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZlcnRleENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogaW5kZXhDb3VudCkgY29uc3QgU0tfT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgR3JJUmVjdCogcmVjdCwgCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IEdySVJlY3QqIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIEdyQ29sb3IgY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQgPSBOVUxMKSBTS19PVkVSUklERTsKIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0VmVydGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJ0ZXhDb3VudCkgU0tfT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIG9uU3RlbmNpbFBhdGgoY29uc3QgR3JQYXRoKiwgR3JQYXRoRmlsbCkgU0tfT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIG9uUmVzZXJ2ZVZlcnRleFNwYWNlKEdyVmVydGV4TGF5b3V0IGxheW91dCwgCisgICAgdmlydHVhbCBib29sIG9uUmVzZXJ2ZVZlcnRleFNwYWNlKEdyVmVydGV4TGF5b3V0IGxheW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnRleENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogdmVydGljZXMpIFNLX09WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBvblJlc2VydmVJbmRleFNwYWNlKGludCBpbmRleENvdW50LApAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgU3RlbmNpbFBhdGgqICAgIHJlY29yZFN0ZW5jaWxQYXRoKCk7CiAgICAgQ2xlYXIqICAgICAgICAgIHJlY29yZENsZWFyKCk7CiAKLSAgICAvLyBjYWxsIHRoaXMgdG8gaW52YWxpZGF0ZSB0aGUgdHJhY2tpbmcgZGF0YSB0aGF0IGlzIHVzZWQgdG8gY29uY2F0ZW5hdGUgCisgICAgLy8gY2FsbCB0aGlzIHRvIGludmFsaWRhdGUgdGhlIHRyYWNraW5nIGRhdGEgdGhhdCBpcyB1c2VkIHRvIGNvbmNhdGVuYXRlCiAgICAgLy8gbXVsdGlwbGUgZHJhd3MgaW50byBhIHNpbmdsZSBkcmF3LgogICAgIHZvaWQgcmVzZXREcmF3VHJhY2tpbmcoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9HclJlY3Rhbml6ZXJfZmlmby5jcHAgYi9zcmMvZ3B1L0dyUmVjdGFuaXplcl9maWZvLmNwcAppbmRleCAwZjQxMmI4Li5hYWIwMTJkIDEwMDY0NAotLS0gYS9zcmMvZ3B1L0dyUmVjdGFuaXplcl9maWZvLmNwcAorKysgYi9zcmMvZ3B1L0dyUmVjdGFuaXplcl9maWZvLmNwcApAQCAtMjAsNDQgKzIwLDQ0IEBACiAgICAgICAgIGZBcmVhU29GYXIgPSAwOwogICAgICAgICBHcl9iemVybyhmUm93cywgc2l6ZW9mKGZSb3dzKSk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCB+R3JSZWN0YW5pemVyRklGTygpIHsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgYWRkUmVjdChpbnQgdywgaW50IGgsIEdySVBvaW50MTYqIGxvYyk7Ci0gICAgCisKICAgICB2aXJ0dWFsIGZsb2F0IHBlcmNlbnRGdWxsKCkgY29uc3QgewogICAgICAgICByZXR1cm4gZkFyZWFTb0ZhciAvICgoZmxvYXQpdGhpcy0+d2lkdGgoKSAqIHRoaXMtPmhlaWdodCgpKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGludCBzdHJpcFRvUHVyZ2UoaW50IGhlaWdodCkgY29uc3QgeyByZXR1cm4gLTE7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VTdHJpcEF0WShpbnQgeUNvb3JkKSB7IH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgc3RydWN0IFJvdyB7CiAgICAgICAgIEdySVBvaW50MTYgIGZMb2M7CiAgICAgICAgIGludCAgICAgICAgIGZSb3dIZWlnaHQ7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgY2FuQWRkV2lkdGgoaW50IHdpZHRoLCBpbnQgY29udGFpbmVyV2lkdGgpIGNvbnN0IHsKICAgICAgICAgICAgIHJldHVybiBmTG9jLmZYICsgd2lkdGggPD0gY29udGFpbmVyV2lkdGg7CiAgICAgICAgIH0KICAgICB9OwotICAgIAorCiAgICAgUm93IGZSb3dzWzE2XTsKLSAgICAKKwogICAgIHN0YXRpYyBpbnQgSGVpZ2h0VG9Sb3dJbmRleChpbnQgaGVpZ2h0KSB7CiAgICAgICAgIEdyQXNzZXJ0KGhlaWdodCA+PSBNSU5fSEVJR0hUX1BPVzIpOwogICAgICAgICByZXR1cm4gMzIgLSBHcl9jbHooaGVpZ2h0IC0gMSk7CiAgICAgfQotICAgIAorCiAgICAgaW50IGZOZXh0U3RyaXBZOwogICAgIGludDMyX3QgZkFyZWFTb0ZhcjsKLSAgICAKKwogICAgIGJvb2wgY2FuQWRkU3RyaXAoaW50IGhlaWdodCkgY29uc3QgewogICAgICAgICByZXR1cm4gZk5leHRTdHJpcFkgKyBoZWlnaHQgPD0gdGhpcy0+aGVpZ2h0KCk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBpbml0Um93KFJvdyogcm93LCBpbnQgcm93SGVpZ2h0KSB7CiAgICAgICAgIHJvdy0+ZkxvYy5zZXQoMCwgZk5leHRTdHJpcFkpOwogICAgICAgICByb3ctPmZSb3dIZWlnaHQgPSByb3dIZWlnaHQ7CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICh1bnNpZ25lZCloZWlnaHQgPiAodW5zaWduZWQpdGhpcy0+aGVpZ2h0KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGludDMyX3QgYXJlYSA9IHdpZHRoICogaGVpZ2h0OwotICAgIAorCiAgICAgLyoKICAgICAgV2UgdXNlIGJzZWFyY2gsIGJ1dCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSByb3cgd2l0aCB0aGUgc2FtZSBoZWlnaHQsCiAgICAgIHNvIHdlIGFjdHVhbGx5IHNlYXJjaCBmb3IgaGVpZ2h0LTEsIHdoaWNoIGNhbiBvbmx5IGJlIGEgcG93MiBpdHNlbGYgaWYKQEAgLTgyLDEwICs4MiwxMCBAQAogICAgIGlmIChoZWlnaHQgPCBNSU5fSEVJR0hUX1BPVzIpIHsKICAgICAgICAgaGVpZ2h0ID0gTUlOX0hFSUdIVF9QT1cyOwogICAgIH0KLSAgICAKKwogICAgIFJvdyogcm93ID0gJmZSb3dzW0hlaWdodFRvUm93SW5kZXgoaGVpZ2h0KV07CiAgICAgR3JBc3NlcnQocm93LT5mUm93SGVpZ2h0ID09IDAgfHwgcm93LT5mUm93SGVpZ2h0ID09IGhlaWdodCk7Ci0gICAgCisKICAgICBpZiAoMCA9PSByb3ctPmZSb3dIZWlnaHQpIHsKICAgICAgICAgaWYgKCF0aGlzLT5jYW5BZGRTdHJpcChoZWlnaHQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDEsMTIgKzEwMSwxMiBAQAogICAgICAgICAgICAgdGhpcy0+aW5pdFJvdyhyb3csIGhlaWdodCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBHckFzc2VydChyb3ctPmZSb3dIZWlnaHQgPT0gaGVpZ2h0KTsKICAgICBHckFzc2VydChyb3ctPmNhbkFkZFdpZHRoKHdpZHRoLCB0aGlzLT53aWR0aCgpKSk7CiAgICAgKmxvYyA9IHJvdy0+ZkxvYzsKICAgICByb3ctPmZMb2MuZlggKz0gd2lkdGg7Ci0gICAgCisKICAgICBHckFzc2VydChyb3ctPmZMb2MuZlggPD0gdGhpcy0+d2lkdGgoKSk7CiAgICAgR3JBc3NlcnQocm93LT5mTG9jLmZZIDw9IHRoaXMtPmhlaWdodCgpKTsKICAgICBHckFzc2VydChmTmV4dFN0cmlwWSA8PSB0aGlzLT5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyUmVzb3VyY2VDYWNoZS5jcHAgYi9zcmMvZ3B1L0dyUmVzb3VyY2VDYWNoZS5jcHAKaW5kZXggY2FlMmVjOS4uNjBlMjBhNyAxMDA2NDQKLS0tIGEvc3JjL2dwdS9HclJlc291cmNlQ2FjaGUuY3BwCisrKyBiL3NyYy9ncHUvR3JSZXNvdXJjZUNhY2hlLmNwcApAQCAtMjk2LDcgKzI5Niw3IEBACiB9CiAKIC8qKgotICogRGVzdHJveWluZyBhIHJlc291cmNlIG1heSBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoZSB1bmxvY2sgb2YgYWRkaXRpb25hbCAKKyAqIERlc3Ryb3lpbmcgYSByZXNvdXJjZSBtYXkgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGUgdW5sb2NrIG9mIGFkZGl0aW9uYWwKICAqIHJlc291cmNlcyB3aGljaCBpbiB0dXJuIHdpbGwgdHJpZ2dlciBhIG5lc3RlZCBwdXJnZS4gV2UgYmxvY2sgdGhlIG5lc3RlZAogICogcHVyZ2UgdXNpbmcgdGhlIGZQdXJnaW5nIHZhcmlhYmxlLiBIb3dldmVyLCB0aGUgaW5pdGlhbCBwdXJnZSB3aWxsIGtlZXAKICAqIGxvb3BpbmcgdW50aWwgZWl0aGVyIGFsbCByZXNvdXJjZXMgaW4gdGhlIGNhY2hlIGFyZSB1bmxvY2tlZCBvciB3ZSd2ZSBtZXQKQEAgLTMxMSw4ICszMTEsOCBAQAogICAgICAgICBib29sIHdpdGhpbkJ1ZGdldCA9IGZhbHNlOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBTa1RETGlua2VkTGlzdDxHclJlc291cmNlRW50cnk+OjpJdGVyIGl0ZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBmb2xsb3dpbmcgY29kZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB0aGUgCisKKyAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBmb2xsb3dpbmcgY29kZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB0aGUKICAgICAgICAgICAgIC8vIGRvdWJseSBsaW5rZWQgbGlzdCBkb2Vzbid0IGludmFsaWRhdGUgaXRzIGRhdGEvcG9pbnRlcnMKICAgICAgICAgICAgIC8vIG91dHNpZGUgb2YgdGhlIHNwZWNpZmljIGFyZWEgd2hlcmUgYSBkZWxldGlvbiBvY2N1cnMgKGUuZy4sCiAgICAgICAgICAgICAvLyBpbiBpbnRlcm5hbERldGFjaCkKQEAgLTM4OCw3ICszODgsNyBAQAogICAgIHNpemVfdCBieXRlcyA9IDA7CiAKICAgICBTa1RETGlua2VkTGlzdDxHclJlc291cmNlRW50cnk+OjpJdGVyIGl0ZXI7Ci0gICAgCisKICAgICBjb25zdCBHclJlc291cmNlRW50cnkqIGVudHJ5ID0gaXRlci5pbml0KAogICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxTa1RETGlua2VkTGlzdDxHclJlc291cmNlRW50cnk+Jj4obGlzdCksCiAgICAgICAgICAgICAgICAgICBTa1RETGlua2VkTGlzdDxHclJlc291cmNlRW50cnk+OjpJdGVyOjprVGFpbF9JdGVyU3RhcnQpOwpAQCAtNDE4LDcgKzQxOCw3IEBACiAgICAgaW50IHVubG9ja0NvdW50ID0gMDsKIAogICAgIFNrVERMaW5rZWRMaXN0PEdyUmVzb3VyY2VFbnRyeT46Okl0ZXIgaXRlcjsKLSAgICAKKwogICAgIGNvbnN0IEdyUmVzb3VyY2VFbnRyeSogZW50cnkgPSBpdGVyLmluaXQoCiAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PFNrVERMaW5rZWRMaXN0PEdyUmVzb3VyY2VFbnRyeT4mPihmTGlzdCksCiAgICAgICAgICAgICAgICAgICBTa1RETGlua2VkTGlzdDxHclJlc291cmNlRW50cnk+OjpJdGVyOjprSGVhZF9JdGVyU3RhcnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9HclJlc291cmNlQ2FjaGUuaCBiL3NyYy9ncHUvR3JSZXNvdXJjZUNhY2hlLmgKaW5kZXggNTViYmMyNS4uMTYyZTFlZiAxMDA2NDQKLS0tIGEvc3JjL2dwdS9HclJlc291cmNlQ2FjaGUuaAorKysgYi9zcmMvZ3B1L0dyUmVzb3VyY2VDYWNoZS5oCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAvKioKICAgICAgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHJlc291cmNlIGNhY2hlIGxpbWl0cy4KICAgICAgKgotICAgICAqICBAcGFyYW0gbWF4UmVzb3VyY2UgSWYgbm9uLW51bGwsIHJldHVybnMgbWF4aW11bSBudW1iZXIgb2YgcmVzb3VyY2VzIAorICAgICAqICBAcGFyYW0gbWF4UmVzb3VyY2UgSWYgbm9uLW51bGwsIHJldHVybnMgbWF4aW11bSBudW1iZXIgb2YgcmVzb3VyY2VzCiAgICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSBoZWxkIGluIHRoZSBjYWNoZS4KICAgICAgKiAgQHBhcmFtIG1heEJ5dGVzICAgIElmIG5vbi1udWxsLCByZXR1cm5zIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9mCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgZ3B1IG1lbW9yeSB0aGF0IGNhbiBiZSBoZWxkIGluIHRoZSBjYWNoZS4KQEAgLTIyNCwxMCArMjI0LDEwIEBACiAgICAgR3JSZXNvdXJjZSogZmluZEFuZExvY2soY29uc3QgR3JSZXNvdXJjZUtleSYsIExvY2tUeXBlIHN0eWxlKTsKIAogICAgIC8qKgotICAgICAqICBDcmVhdGUgYSBuZXcgY2FjaGUgZW50cnksIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBrZXkgYW5kIHJlc291cmNlLCBhbmQgCisgICAgICogIENyZWF0ZSBhIG5ldyBjYWNoZSBlbnRyeSwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGtleSBhbmQgcmVzb3VyY2UsIGFuZAogICAgICAqICByZXR1cm4gaXQuCiAgICAgICoKLSAgICAgKiAgT3duZXJzaGlwIG9mIHRoZSByZXNvdXJjZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVzb3VyY2UgY2FjaGUsIAorICAgICAqICBPd25lcnNoaXAgb2YgdGhlIHJlc291cmNlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZXNvdXJjZSBjYWNoZSwKICAgICAgKiAgd2hpY2ggd2lsbCB1bnJlZigpIGl0IHdoZW4gaXQgaXMgcHVyZ2VkIG9yIGRlbGV0ZWQuCiAgICAgICovCiAgICAgdm9pZCBjcmVhdGVBbmRMb2NrKGNvbnN0IEdyUmVzb3VyY2VLZXkmLCBHclJlc291cmNlKik7CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAvKioKICAgICAgKiAgQ3JlYXRlIGEgbmV3IGNhY2hlIGVudHJ5LCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQga2V5IGFuZCByZXNvdXJjZS4KICAgICAgKgotICAgICAqICBPd25lcnNoaXAgb2YgdGhlIHJlc291cmNlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZXNvdXJjZSBjYWNoZSwgCisgICAgICogIE93bmVyc2hpcCBvZiB0aGUgcmVzb3VyY2UgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlc291cmNlIGNhY2hlLAogICAgICAqICB3aGljaCB3aWxsIHVucmVmKCkgaXQgd2hlbiBpdCBpcyBwdXJnZWQgb3IgZGVsZXRlZC4KICAgICAgKgogICAgICAqICBDdXJyZW50bHkgdGhpcyBlbnRyeSBwb2ludCBpcyBvbmx5IGludGVuZGVkIGZvciB0ZXh0dXJlcyAiZGV0YWNoZWQiCmRpZmYgLS1naXQgYS9zcmMvZ3B1L0dyU1dNYXNrSGVscGVyLmNwcCBiL3NyYy9ncHUvR3JTV01hc2tIZWxwZXIuY3BwCmluZGV4IDI3ZDY3NjAuLjllNzAxMmIgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JTV01hc2tIZWxwZXIuY3BwCisrKyBiL3NyYy9ncHUvR3JTV01hc2tIZWxwZXIuY3BwCkBAIC01Miw3ICs1Miw3IEBACiAvKioKICAqIERyYXcgYSBzaW5nbGUgcmVjdCBlbGVtZW50IG9mIHRoZSBjbGlwIHN0YWNrIGludG8gdGhlIGFjY3VtdWxhdGlvbiBiaXRtYXAKICAqLwotdm9pZCBHclNXTWFza0hlbHBlcjo6ZHJhdyhjb25zdCBHclJlY3QmIHJlY3QsIFNrUmVnaW9uOjpPcCBvcCwgCit2b2lkIEdyU1dNYXNrSGVscGVyOjpkcmF3KGNvbnN0IEdyUmVjdCYgcmVjdCwgU2tSZWdpb246Ok9wIG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFudGlBbGlhcywgdWludDhfdCBhbHBoYSkgewogICAgIFNrUGFpbnQgcGFpbnQ7CiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICBTa1NhZmVVbnJlZihtb2RlKTsKIH0KIAotYm9vbCBHclNXTWFza0hlbHBlcjo6aW5pdChjb25zdCBHcklSZWN0JiByZXN1bHRCb3VuZHMsIAorYm9vbCBHclNXTWFza0hlbHBlcjo6aW5pdChjb25zdCBHcklSZWN0JiByZXN1bHRCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyTWF0cml4KiBtYXRyaXgpIHsKICAgICBpZiAoTlVMTCAhPSBtYXRyaXgpIHsKICAgICAgICAgZk1hdHJpeCA9ICptYXRyaXg7CkBAIC0xNTEsMjQgKzE1MSwyNCBAQAogICAgIC8vIFRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlIGlzIGFsbW9zdCBhbHdheXMgbGFyZ2VyIHRoYW4gImZCTSIuIENsZWFyCiAgICAgLy8gaXQgYXBwcm9wcmlhdGVseSBzbyB3ZSBkb24ndCBnZXQgbWFzayBhcnRpZmFjdHMgb3V0c2lkZSBvZiB0aGUgcGF0aCdzCiAgICAgLy8gYm91bmRpbmcgYm94Ci0gICAgCisKICAgICAvLyAidGV4dHVyZSIgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGFzIHRoZSByZW5kZXIgdGFyZ2V0IGZvciB0aGUgY2xlYXIKICAgICAvLyBhbmQgdGhlIHRleHR1cmUgdXBsb2FkIGJ1dCBjYW5ub3QgcmVtYWluIHRoZSByZW5kZXIgdGFyZ2V0IHVwb24KICAgICAvLyByZXR1cm4uIENhbGxlcnMgdHlwaWNhbGx5IHVzZSBpdCBhcyBhIHRleHR1cmUgYW5kIGl0IHdvdWxkIHRoZW4KICAgICAvLyBiZSBib3RoIHNvdXJjZSBhbmQgZGVzdC4KLSAgICBHckRyYXdTdGF0ZTo6QXV0b1JlbmRlclRhcmdldFJlc3RvcmUgYXJ0cihmQ29udGV4dC0+Z2V0R3B1KCktPmRyYXdTdGF0ZSgpLCAKKyAgICBHckRyYXdTdGF0ZTo6QXV0b1JlbmRlclRhcmdldFJlc3RvcmUgYXJ0cihmQ29udGV4dC0+Z2V0R3B1KCktPmRyYXdTdGF0ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmFzUmVuZGVyVGFyZ2V0KCkpOwogCiAgICAgZkNvbnRleHQtPmdldEdwdSgpLT5jbGVhcihOVUxMLCBTa0NvbG9yU2V0QVJHQihhbHBoYSwgYWxwaGEsIGFscGhhLCBhbHBoYSkpOwogCi0gICAgdGV4dHVyZS0+d3JpdGVQaXhlbHMoMCwgMCwgZkJNLndpZHRoKCksIGZCTS5oZWlnaHQoKSwgCisgICAgdGV4dHVyZS0+d3JpdGVQaXhlbHMoMCwgMCwgZkJNLndpZHRoKCksIGZCTS5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBrQWxwaGFfOF9HclBpeGVsQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZCTS5nZXRQaXhlbHMoKSwgZkJNLnJvd0J5dGVzKCkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLyoqCi0gKiBTb2Z0d2FyZSByYXN0ZXJpemVzIHBhdGggdG8gQTggbWFzayAocG9zc2libHkgdXNpbmcgdGhlIGNvbnRleHQncyBtYXRyaXgpIAorICogU29mdHdhcmUgcmFzdGVyaXplcyBwYXRoIHRvIEE4IG1hc2sgKHBvc3NpYmx5IHVzaW5nIHRoZSBjb250ZXh0J3MgbWF0cml4KQogICogYW5kIHVwbG9hZHMgdGhlIHJlc3VsdCB0byBhIHNjcmF0Y2ggdGV4dHVyZS4gUmV0dXJucyB0aGUgcmVzdWx0aW5nCiAgKiB0ZXh0dXJlIG9uIHN1Y2Nlc3M7IE5VTEwgb24gZmFpbHVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9HclN0ZW5jaWwuY3BwIGIvc3JjL2dwdS9HclN0ZW5jaWwuY3BwCmluZGV4IGRlY2ZkMmQuLjc2NzcyNjAgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvR3JTdGVuY2lsLmNwcAorKysgYi9zcmMvZ3B1L0dyU3RlbmNpbC5jcHAKQEAgLTIzMyw3ICsyMzMsNyBAQAogKTsKIAogYm9vbCBHclN0ZW5jaWxTZXR0aW5nczo6R2V0Q2xpcFBhc3NlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1JlZ2lvbjo6T3Agb3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUmVnaW9uOjpPcCBvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJlRGlyZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsQ2xpcE1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbnZlcnRlZEZpbGwsCmRpZmYgLS1naXQgYS9zcmMvZ3B1L1NrR3IuY3BwIGIvc3JjL2dwdS9Ta0dyLmNwcAppbmRleCAyMDUyYjc3Li44NzAxMTc4IDEwMDY0NAotLS0gYS9zcmMvZ3B1L1NrR3IuY3BwCisrKyBiL3NyYy9ncHUvU2tHci5jcHAKQEAgLTkwLDE1ICs5MCwxNSBAQAogCiAgICAgICAgICAgICAvLyBvdXIgY29tcHJlc3NlZCBkYXRhIHdpbGwgYmUgdHJpbW1lZCwgc28gcGFzcyB3aWR0aCgpIGZvciBpdHMKICAgICAgICAgICAgIC8vICJyb3dCeXRlcyIsIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIG5vdy4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoR3JDYWNoZURhdGE6OmtTY3JhdGNoX0NhY2hlSUQgIT0ga2V5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC0+Y3JlYXRlQW5kTG9ja1RleHR1cmUocGFyYW1zLCBkZXNjLCBjYWNoZURhdGEsIAorICAgICAgICAgICAgICAgIHJldHVybiBjdHgtPmNyZWF0ZUFuZExvY2tUZXh0dXJlKHBhcmFtcywgZGVzYywgY2FjaGVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLT53aWR0aCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgR3JUZXh0dXJlKiByZXN1bHQgPSBjdHgtPmxvY2tTY3JhdGNoVGV4dHVyZShkZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb250ZXh0OjprRXhhY3RfU2NyYXRjaFRleE1hdGNoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQtPndyaXRlUGl4ZWxzKDAsIDAsIGJpdG1hcC0+d2lkdGgoKSwgCisgICAgICAgICAgICAgICAgcmVzdWx0LT53cml0ZVBpeGVscygwLCAwLCBiaXRtYXAtPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAtPmhlaWdodCgpLCBkZXNjLmZDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLmdldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTE5LDEwICsxMTksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLT5nZXRQaXhlbHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLT5yb3dCeXRlcygpKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGlzIHRleHR1cmUgaXMgdW5saWtlbHkgdG8gYmUgdXNlZCBhZ2FpbiAoaW4gaXRzIHByZXNlbnQgZm9ybSkgc28gCi0gICAgICAgIC8vIGp1c3QgdXNlIGEgc2NyYXRjaCB0ZXh0dXJlLiBUaGlzIHdpbGwgcmVtb3ZlIHRoZSB0ZXh0dXJlIGZyb20gdGhlIAotICAgICAgICAvLyBjYWNoZSBzbyBubyBvbmUgZWxzZSBjYW4gZmluZCBpdC4gQWRkaXRpb25hbGx5LCBvbmNlIHVubG9ja2VkLCB0aGUgCi0gICAgICAgIC8vIHNjcmF0Y2ggdGV4dHVyZSB3aWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgZm9yIHB1cmdpbmcgc28gd2lsbCAKKyAgICAgICAgLy8gVGhpcyB0ZXh0dXJlIGlzIHVubGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4gKGluIGl0cyBwcmVzZW50IGZvcm0pIHNvCisgICAgICAgIC8vIGp1c3QgdXNlIGEgc2NyYXRjaCB0ZXh0dXJlLiBUaGlzIHdpbGwgcmVtb3ZlIHRoZSB0ZXh0dXJlIGZyb20gdGhlCisgICAgICAgIC8vIGNhY2hlIHNvIG5vIG9uZSBlbHNlIGNhbiBmaW5kIGl0LiBBZGRpdGlvbmFsbHksIG9uY2UgdW5sb2NrZWQsIHRoZQorICAgICAgICAvLyBzY3JhdGNoIHRleHR1cmUgd2lsbCBnbyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGZvciBwdXJnaW5nIHNvIHdpbGwKICAgICAgICAgLy8gbGlrZWx5IGJlIGF2YWlsYWJsZSBmb3IgdGhpcyB2b2xhdGlsZSBiaXRtYXAgdGhlIG5leHQgdGltZSBhcm91bmQuCiAgICAgICAgIEdyVGV4dHVyZSogcmVzdWx0ID0gY3R4LT5sb2NrU2NyYXRjaFRleHR1cmUoZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb250ZXh0OjprRXhhY3RfU2NyYXRjaFRleE1hdGNoKTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLUdyVGV4dHVyZSogR3JMb2NrQ2FjaGVkQml0bWFwVGV4dHVyZShHckNvbnRleHQqIGN0eCwgCitHclRleHR1cmUqIEdyTG9ja0NhY2hlZEJpdG1hcFRleHR1cmUoR3JDb250ZXh0KiBjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHclRleHR1cmVQYXJhbXMqIHBhcmFtcykgewogICAgIEdyVGV4dHVyZSogcmVzdWx0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvYW5kcm9pZC9Ta05hdGl2ZUdMQ29udGV4dF9hbmRyb2lkLmNwcCBiL3NyYy9ncHUvYW5kcm9pZC9Ta05hdGl2ZUdMQ29udGV4dF9hbmRyb2lkLmNwcAppbmRleCBkZDQ0NGRmLi5mMjFlZWQ4IDEwMDY0NAotLS0gYS9zcmMvZ3B1L2FuZHJvaWQvU2tOYXRpdmVHTENvbnRleHRfYW5kcm9pZC5jcHAKKysrIGIvc3JjL2dwdS9hbmRyb2lkL1NrTmF0aXZlR0xDb250ZXh0X2FuZHJvaWQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotU2tOYXRpdmVHTENvbnRleHQ6OlNrTmF0aXZlR0xDb250ZXh0KCkgCitTa05hdGl2ZUdMQ29udGV4dDo6U2tOYXRpdmVHTENvbnRleHQoKQogICAgIDogZkNvbnRleHQoRUdMX05PX0NPTlRFWFQpCiAgICAgLCBmRGlzcGxheShFR0xfTk9fRElTUExBWSkKICAgICAsIGZTdXJmYWNlKEVHTF9OT19TVVJGQUNFKSB7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2FwcC1hbmRyb2lkLmNwcCBiL3NyYy9ncHUvYXBwLWFuZHJvaWQuY3BwCmluZGV4IDU2YTk2YTYuLmM2NTZiNTkgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvYXBwLWFuZHJvaWQuY3BwCisrKyBiL3NyYy9ncHUvYXBwLWFuZHJvaWQuY3BwCkBAIC02MCw3ICs2MCw3IEBACiAgICAgdm9pZCBzZXRWaWV3cG9ydChpbnQgdywgaW50IGgpOwogICAgIGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZWaWV3cG9ydC5mWDsgfQogICAgIGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBmVmlld3BvcnQuZlk7IH0KLSAgICAKKwogICAgIHZvaWQgaGFuZGxlVG91Y2godm9pZCosIFRvdWNoU3RhdGUsIGZsb2F0IHgsIGZsb2F0IHkpOwogICAgIHZvaWQgYXBwbHlNYXRyaXgoU2tDYW52YXMqKTsKIApAQCAtNjksNyArNjksNyBAQAogcHJpdmF0ZToKICAgICBTa1ZpZXcqICAgICBmVmlldzsKICAgICBTa0lQb2ludCAgICBmVmlld3BvcnQ7Ci0gICAgCisKICAgICBTa1RvdWNoR2VzdHVyZSBmR2VzdHVyZTsKIAogICAgIFNrVERBcnJheTxTa1ZpZXdGYWN0b3J5PiBmRmFjdG9yeTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgZ0hlYWQgPSBOVUxMOwogICAgICAgICBnT25jZSA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgZkNoYWluID0gZ0hlYWQ7CiAgICAgZ0hlYWQgPSB0aGlzOwogfQpAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAgICAgIGludCBmcHMgPSAoRlJBTUVfQ09VTlQgKiAxMDAwKSAvIGdEdXJhdGlvbjsKICAgICAgICAgU2tTdHJpbmcgc3RyOwogICAgICAgICBzdHIucHJpbnRmKCJGUFM9JTNkIE1TPSUzZCIsIGZwcywgZ0R1cmF0aW9uIC8gRlJBTUVfQ09VTlQpOwotICAgICAgICAKKwogICAgICAgICBTa0dwdUNhbnZhcyBjKGdDb250ZXh0KTsKICAgICAgICAgYy5zZXRCaXRtYXBEZXZpY2Uodmlld3BvcnQpOwogCmRpZmYgLS1naXQgYS9zcmMvZ3B1L2VmZmVjdHMvR3JDb2xvclRhYmxlRWZmZWN0LmggYi9zcmMvZ3B1L2VmZmVjdHMvR3JDb2xvclRhYmxlRWZmZWN0LmgKaW5kZXggZGU4Njc2OC4uZjc5ZTU4NiAxMDA2NDQKLS0tIGEvc3JjL2dwdS9lZmZlY3RzL0dyQ29sb3JUYWJsZUVmZmVjdC5oCisrKyBiL3NyYy9ncHUvZWZmZWN0cy9HckNvbG9yVGFibGVFZmZlY3QuaApAQCAtMTYsNyArMTYsNyBAQAogLyoqCiAgKiBMVVQtYmFzZWQgY29sb3IgdHJhbnNmb3JtYXRpb24gZWZmZWN0LiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIEdyCiAgKiBjb3VudGVycGFydCB0byB0aGUgU2tUYWJsZV9Db2xvckZpbHRlciBlZmZlY3QuIEEgMjU2ICogNCAoc2luZ2xlLWNoYW5uZWwpCi0gKiBMVVQgaXMgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGlucHV0IGNvbG9ycyBvZiB0aGUgaW1hZ2UuIAorICogTFVUIGlzIHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBpbnB1dCBjb2xvcnMgb2YgdGhlIGltYWdlLgogICovCiBjbGFzcyBHckNvbG9yVGFibGVFZmZlY3QgOiBwdWJsaWMgR3JTaW5nbGVUZXh0dXJlRWZmZWN0IHsKIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9lZmZlY3RzL0dyQ29udm9sdXRpb25FZmZlY3QuY3BwIGIvc3JjL2dwdS9lZmZlY3RzL0dyQ29udm9sdXRpb25FZmZlY3QuY3BwCmluZGV4IDkyYzZmZmIuLjJjZWZiYzQgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZWZmZWN0cy9HckNvbnZvbHV0aW9uRWZmZWN0LmNwcAorKysgYi9zcmMvZ3B1L2VmZmVjdHMvR3JDb252b2x1dGlvbkVmZmVjdC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBTa1N0cmluZyogY29kZSA9ICZidWlsZGVyLT5mRlNDb2RlOwogCiAgICAgY29kZS0+YXBwZW5kZigiXHRcdCVzID0gdmVjNCgwLCAwLCAwLCAwKTtcbiIsIG91dHB1dENvbG9yKTsKLSAgICAKKwogICAgIGludCB3aWR0aCA9IHRoaXMgLT53aWR0aCgpOwogICAgIGNvbnN0IEdyR0xTaGFkZXJWYXImIGtlcm5lbCA9IGJ1aWxkZXItPmdldFVuaWZvcm1WYXJpYWJsZShmS2VybmVsVW5pKTsKICAgICBjb25zdCBjaGFyKiBpbWdJbmMgPSBidWlsZGVyLT5nZXRVbmlmb3JtQ1N0cihmSW1hZ2VJbmNyZW1lbnRVbmkpOwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9lZmZlY3RzL0dyQ29udm9sdXRpb25FZmZlY3QuaCBiL3NyYy9ncHUvZWZmZWN0cy9HckNvbnZvbHV0aW9uRWZmZWN0LmgKaW5kZXggMjFjMDIyZC4uNGM0MmE2YyAxMDA2NDQKLS0tIGEvc3JjL2dwdS9lZmZlY3RzL0dyQ29udm9sdXRpb25FZmZlY3QuaAorKysgYi9zcmMvZ3B1L2VmZmVjdHMvR3JDb252b2x1dGlvbkVmZmVjdC5oCkBAIC0xMyw3ICsxMyw3IEBACiBjbGFzcyBHckdMQ29udm9sdXRpb25FZmZlY3Q7CiAKIC8qKgotICogQSBjb252b2x1dGlvbiBlZmZlY3QuIFRoZSBrZXJuZWwgaXMgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIDIgKiBoYWxmLXdpZHRoIAorICogQSBjb252b2x1dGlvbiBlZmZlY3QuIFRoZSBrZXJuZWwgaXMgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIDIgKiBoYWxmLXdpZHRoCiAgKiArIDEgd2VpZ2h0cy4gRWFjaCB0ZXhlbCBpcyBtdWx0aXBsaWVkIGJ5IGl0J3Mgd2VpZ2h0IGFuZCBzdW1tZWQgdG8gZGV0ZXJtaW5lCiAgKiB0aGUgb3V0cHV0IGNvbG9yLiBUaGUgb3V0cHV0IGNvbG9yIGlzIG1vZHVsYXRlZCBieSB0aGUgaW5wdXQgY29sb3IuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9ncHUvZWZmZWN0cy9HclRleHR1cmVTdHJpcEF0bGFzLmNwcCBiL3NyYy9ncHUvZWZmZWN0cy9HclRleHR1cmVTdHJpcEF0bGFzLmNwcAppbmRleCAzNDYyZTkyLi5hNDNmOWQ2IDEwMDY0NAotLS0gYS9zcmMvZ3B1L2VmZmVjdHMvR3JUZXh0dXJlU3RyaXBBdGxhcy5jcHAKKysrIGIvc3JjL2dwdS9lZmZlY3RzL0dyVGV4dHVyZVN0cmlwQXRsYXMuY3BwCkBAIC01MSw3ICs1MSw3IEBACiAgICAgfQogfQogCi1HclRleHR1cmVTdHJpcEF0bGFzOjpHclRleHR1cmVTdHJpcEF0bGFzKEdyVGV4dHVyZVN0cmlwQXRsYXM6OkRlc2MgZGVzYykgCitHclRleHR1cmVTdHJpcEF0bGFzOjpHclRleHR1cmVTdHJpcEF0bGFzKEdyVGV4dHVyZVN0cmlwQXRsYXM6OkRlc2MgZGVzYykKICAgICA6IGZDYWNoZUlEKHNrX2F0b21pY19pbmMoJmdDYWNoZUNvdW50KSkKICAgICAsIGZMb2NrZWRSb3dzKDApCiAgICAgLCBmRGVzYyhkZXNjKQpAQCAtODgsOSArODgsOSBAQAogICAgICAgICArK3Jvdy0+ZkxvY2tzOwogICAgICAgICArK2ZMb2NrZWRSb3dzOwogCi0gICAgICAgIC8vIFNpbmNlIGFsbCB0aGUgcm93cyBhcmUgYWx3YXlzIHN0b3JlZCBpbiBhIGNvbnRpZ3VvdXMgYXJyYXksIHdlIGNhbiBzYXZlIHRoZSBtZW1vcnkgCisgICAgICAgIC8vIFNpbmNlIGFsbCB0aGUgcm93cyBhcmUgYWx3YXlzIHN0b3JlZCBpbiBhIGNvbnRpZ3VvdXMgYXJyYXksIHdlIGNhbiBzYXZlIHRoZSBtZW1vcnkKICAgICAgICAgLy8gcmVxdWlyZWQgZm9yIHN0b3Jpbmcgcm93IG51bWJlcnMgYW5kIGp1c3QgY29tcHV0ZSBpdCB3aXRoIHNvbWUgcG9pbnRlciBhcml0aG1ldGljCi0gICAgICAgIHJvd051bWJlciA9IHN0YXRpY19jYXN0PGludD4ocm93IC0gZlJvd3MpOyAKKyAgICAgICAgcm93TnVtYmVyID0gc3RhdGljX2Nhc3Q8aW50Pihyb3cgLSBmUm93cyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gfmluZGV4IGlzIHRoZSBpbmRleCB3aGVyZSB3ZSB3aWxsIGluc2VydCB0aGUgbmV3IGtleSB0byBrZWVwIHRoaW5ncyBzb3J0ZWQKICAgICAgICAgaW5kZXggPSB+aW5kZXg7CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgcm93LT5mS2V5ID0ga2V5OwogICAgICAgICByb3ctPmZMb2NrcyA9IDE7CiAgICAgICAgIGZLZXlUYWJsZS5pbnNlcnQoaW5kZXgsIDEsICZyb3cpOwotICAgICAgICByb3dOdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHJvdyAtIGZSb3dzKTsgCisgICAgICAgIHJvd051bWJlciA9IHN0YXRpY19jYXN0PGludD4ocm93IC0gZlJvd3MpOwogCiAgICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhkYXRhKTsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIC8vIHRoYXQgaXMgbm90IGN1cnJlbnRseSBpbiB1c2UKICAgICAgICAgZkRlc2MuZkNvbnRleHQtPndyaXRlVGV4dHVyZVBpeGVscyhmVGV4dHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgcm93TnVtYmVyICogZkRlc2MuZlJvd0hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRGVzYy5mV2lkdGgsIGZEZXNjLmZSb3dIZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZEZXNjLmZXaWR0aCwgZkRlc2MuZlJvd0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JpdG1hcENvbmZpZzJHclBpeGVsQ29uZmlnKGRhdGEuY29uZmlnKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ2V0UGl4ZWxzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3dCeXRlcygpLApAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgICAgICBpZiAoZkxSVUZyb250KSB7CiAgICAgICAgICAgICAgICAgZkxSVUZyb250LT5mUHJldiA9IE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAgICAgcm93LT5mTmV4dCA9IE5VTEw7CiAgICAgcm93LT5mUHJldiA9IE5VTEw7CkBAIC0yNDksOCArMjQ5LDggQEAKICAgICBBdGxhc1JvdyB0YXJnZXQ7CiAgICAgdGFyZ2V0LmZLZXkgPSBrZXk7CiAgICAgcmV0dXJuIFNrVFNlYXJjaDxBdGxhc1JvdywgR3JUZXh0dXJlU3RyaXBBdGxhczo6Y29tcGFyZUtleXM+KChjb25zdCBBdGxhc1JvdyoqKWZLZXlUYWJsZS5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmS2V5VGFibGUuY291bnQoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXJnZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmS2V5VGFibGUuY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEF0bGFzUm93KikpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvZ3B1L2VmZmVjdHMvR3JUZXh0dXJlU3RyaXBBdGxhcy5oIGIvc3JjL2dwdS9lZmZlY3RzL0dyVGV4dHVyZVN0cmlwQXRsYXMuaAppbmRleCBjNzYzNTk5Li4xYTRjMzcxIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2VmZmVjdHMvR3JUZXh0dXJlU3RyaXBBdGxhcy5oCisrKyBiL3NyYy9ncHUvZWZmZWN0cy9HclRleHR1cmVTdHJpcEF0bGFzLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJTa1REQXJyYXkuaCIKIAogLyoqCi0gKiBNYWludGFpbnMgYSBzaW5nbGUgbGFyZ2UgdGV4dHVyZSB3aG9zZSByb3dzIHN0b3JlIG1hbnkgdGV4dHVyZXMgb2YgYSBzbWFsbCBmaXhlZCBoZWlnaHQsIAorICogTWFpbnRhaW5zIGEgc2luZ2xlIGxhcmdlIHRleHR1cmUgd2hvc2Ugcm93cyBzdG9yZSBtYW55IHRleHR1cmVzIG9mIGEgc21hbGwgZml4ZWQgaGVpZ2h0LAogICogc3RvcmVkIGluIHJvd3MgYWNyb3NzIHRoZSB4LWF4aXMgc3VjaCB0aGF0IHdlIGNhbiBzYWZlbHkgd3JhcC9yZXBlYXQgdGhlbSBob3Jpem9udGFsbHkuCiAgKi8KIGNsYXNzIEdyVGV4dHVyZVN0cmlwQXRsYXMgewpAQCAtNDksMjAgKzQ5LDIwIEBACiAgICAgaW50IGxvY2tSb3coY29uc3QgU2tCaXRtYXAmIGRhdGEpOwogICAgIHZvaWQgdW5sb2NrUm93KGludCByb3cpOwogCi0gICAgLyoqIAotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBoZWxwIHR1cm4gYW4gaW50ZWdlciByb3cgaW5kZXggaW4gWzAsIDEsIDIsIC4uLiBudW1Sb3dzXSBpbnRvIGEgc2NhbGFyIHkgCisgICAgLyoqCisgICAgICogVGhlc2UgZnVuY3Rpb25zIGhlbHAgdHVybiBhbiBpbnRlZ2VyIHJvdyBpbmRleCBpbiBbMCwgMSwgMiwgLi4uIG51bVJvd3NdIGludG8gYSBzY2FsYXIgeQogICAgICAqIHRleHR1cmUgY29vcmRpbmF0ZSBpbiBbMCwgMV0gdGhhdCB3ZSBjYW4gdXNlIGluIGEgc2hhZGVyLgogICAgICAqCi0gICAgICogSWYgYSByZWd1bGFyIHRleHR1cmUgYWNjZXNzIHdpdGhvdXQgdXNpbmcgdGhlIGF0bGFzIGxvb2tzIGxpa2U6IAorICAgICAqIElmIGEgcmVndWxhciB0ZXh0dXJlIGFjY2VzcyB3aXRob3V0IHVzaW5nIHRoZSBhdGxhcyBsb29rcyBsaWtlOgogICAgICAqCiAgICAgICogICAgICB0ZXh0dXJlMkQoc2FtcGxlciwgdmVjMih4LCB5KSkKICAgICAgKgotICAgICAqIFRoZW4gd2hlbiB1c2luZyB0aGUgYXRsYXMgd2UnZCByZXBsYWNlIGl0IHdpdGg6IAorICAgICAqIFRoZW4gd2hlbiB1c2luZyB0aGUgYXRsYXMgd2UnZCByZXBsYWNlIGl0IHdpdGg6CiAgICAgICoKLSAgICAgKiAgICAgICB0ZXh0dXJlMkQoc2FtcGxlciwgdmVjMih4LCB5T2Zmc2V0ICsgeSAqIHNjYWxlRmFjdG9yKSkgCisgICAgICogICAgICAgdGV4dHVyZTJEKHNhbXBsZXIsIHZlYzIoeCwgeU9mZnNldCArIHkgKiBzY2FsZUZhY3RvcikpCiAgICAgICoKICAgICAgKiBXaGVyZSB5T2Zmc2V0LCByZXR1cm5lZCBieSBnZXRZT2Zmc2V0KCksIGlzIHRoZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSByb3cgd2l0aGluIHRoZQotICAgICAqIGF0bGFzIGFuZCBzY2FsZUZhY3RvciwgcmV0dXJuZWQgYnkgZ2V0VmVydGljYWxTY2FsZUZhY3RvcigpLCBpcyB0aGUgeS1zY2FsZSBvZiB0aGUgcm93LCAKKyAgICAgKiBhdGxhcyBhbmQgc2NhbGVGYWN0b3IsIHJldHVybmVkIGJ5IGdldFZlcnRpY2FsU2NhbGVGYWN0b3IoKSwgaXMgdGhlIHktc2NhbGUgb2YgdGhlIHJvdywKICAgICAgKiByZWxhdGl2ZSB0byB0aGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIGF0bGFzIHRleHR1cmUuCiAgICAgICovCiAgICAgR3JTY2FsYXIgZ2V0WU9mZnNldChpbnQgcm93KSBjb25zdCB7IHJldHVybiBTa0ludFRvU2NhbGFyKHJvdykgLyBmTnVtUm93czsgfQpAQCAtNzYsMzAgKzc2LDMwIEBACiAgICAgLy8gS2V5IHRvIGluZGljYXRlIGFuIGF0bGFzIHJvdyB3aXRob3V0IGFueSBtZWFuaW5nZnVsIGRhdGEgc3RvcmVkIGluIGl0CiAgICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IGtFbXB0eUF0bGFzUm93S2V5ID0gMHhmZmZmZmZmZjsKIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBUaGUgc3RhdGUgb2YgYSBzaW5nbGUgcm93IGluIG91ciBjYWNoZSwgbmV4dC9wcmV2IHBvaW50ZXJzIGFsbG93IHRoZXNlIHRvIGJlIGNoYWluZWQKICAgICAgKiB0b2dldGhlciB0byByZXByZXNlbnQgTFJVIHN0YXR1cwogICAgICAqLwogICAgIHN0cnVjdCBBdGxhc1JvdyA6IHB1YmxpYyBHck5vbmNvcHlhYmxlIHsKICAgICAgICAgQXRsYXNSb3coKSA6IGZLZXkoa0VtcHR5QXRsYXNSb3dLZXkpLCBmTG9ja3MoMCksIGZOZXh0KE5VTEwpLCBmUHJldihOVUxMKSB7IH0KICAgICAgICAgLy8gR2VuZXJhdGlvbklEIG9mIHRoZSBiaXRtYXAgdGhhdCBpcyByZXByZXNlbnRlZCBieSB0aGlzIHJvdywgMHhmZmZmZmZmZiBtZWFucyAiZW1wdHkiCi0gICAgICAgIHVpbnQzMl90IGZLZXk7ICAgCisgICAgICAgIHVpbnQzMl90IGZLZXk7CiAgICAgICAgIC8vIEhvdyBtYW55IHRpbWVzIHRoaXMgaGFzIGJlZW4gbG9ja2VkICgwID09IHVubG9ja2VkKQotICAgICAgICBpbnQzMl90IGZMb2NrczsgCisgICAgICAgIGludDMyX3QgZkxvY2tzOwogICAgICAgICAvLyBXZSBtYWludGFpbiBhbiBMUlUgbGlua2VkIGxpc3QgYmV0d2VlbiB1bmxvY2tlZCBub2RlcyB3aXRoIHRoZXNlIHBvaW50ZXJzCiAgICAgICAgIEF0bGFzUm93KiBmTmV4dDsKICAgICAgICAgQXRsYXNSb3cqIGZQcmV2OwogICAgIH07CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogV2UnbGwgb25seSBhbGxvdyBjb25zdHJ1Y3Rpb24gdmlhIHRoZSBzdGF0aWMgR3JUZXh0dXJlU3RyaXBBdGxhczo6R2V0QXRsYXMKICAgICAgKi8KICAgICBHclRleHR1cmVTdHJpcEF0bGFzKERlc2MgZGVzYyk7Ci0gICAgCisKICAgICB2b2lkIGxvY2tUZXh0dXJlKCk7CiAgICAgdm9pZCB1bmxvY2tUZXh0dXJlKCk7CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSW5pdGlhbGl6ZSBvdXIgTFJVIGxpc3QgKGlmIG9uZSBhbHJlYWR5IGV4aXN0cywgY2xlYXIgaXQgYW5kIHN0YXJ0IGFuZXcpCiAgICAgICovCiAgICAgdm9pZCBpbml0TFJVKCk7CkBAIC0xMTIsOCArMTEyLDggQEAKICAgICB2b2lkIGFwcGVuZExSVShBdGxhc1Jvdyogcm93KTsKICAgICB2b2lkIHJlbW92ZUZyb21MUlUoQXRsYXNSb3cqIHJvdyk7CiAKLSAgICAvKiogCi0gICAgICogU2VhcmNoZXMgdGhlIGtleSB0YWJsZSBmb3IgYSBrZXkgYW5kIHJldHVybnMgdGhlIGluZGV4IGlmIGZvdW5kOyBpZiBub3QgZm91bmQsIGl0IHJldHVybnMgCisgICAgLyoqCisgICAgICogU2VhcmNoZXMgdGhlIGtleSB0YWJsZSBmb3IgYSBrZXkgYW5kIHJldHVybnMgdGhlIGluZGV4IGlmIGZvdW5kOyBpZiBub3QgZm91bmQsIGl0IHJldHVybnMKICAgICAgKiB0aGUgYml0d2lzZSBub3Qgb2YgdGhlIGluZGV4IGF0IHdoaWNoIHdlIGNvdWxkIGluc2VydCB0aGUga2V5IHRvIG1haW50YWluIGEgc29ydGVkIGxpc3QuCiAgICAgICoqLwogICAgIGludCBzZWFyY2hCeUtleSh1aW50MzJfdCBrZXkpOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgR3JUZXh0dXJlKiBmVGV4dHVyZTsKIAogICAgIC8vIEFycmF5IG9mIEF0bGFzUm93cyB3aGljaCBzdG9yZSB0aGUgc3RhdGUgb2YgYWxsIG91ciByb3dzLiBTdG9yZWQgaW4gYSBjb250aWd1b3VzIGFycmF5LCBpbgotICAgIC8vIG9yZGVyIHRoYXQgdGhleSBhcHBlYXIgaW4gb3VyIHRleHR1cmUsIHRoaXMgbWVhbnMgd2UgY2FuIHN1YnRyYWN0IHRoaXMgcG9pbnRlciBmcm9tIGEgcm93IAorICAgIC8vIG9yZGVyIHRoYXQgdGhleSBhcHBlYXIgaW4gb3VyIHRleHR1cmUsIHRoaXMgbWVhbnMgd2UgY2FuIHN1YnRyYWN0IHRoaXMgcG9pbnRlciBmcm9tIGEgcm93CiAgICAgLy8gcG9pbnRlciB0byBnZXQgaXRzIGluZGV4IGluIHRoZSB0ZXh0dXJlLCBhbmQgY2FuIHNhdmUgc3RvcmluZyBhIHJvdyBudW1iZXIgaW4gQXRsYXNSb3cuCiAgICAgQXRsYXNSb3cqIGZSb3dzOwogCmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xDYXBzLmNwcCBiL3NyYy9ncHUvZ2wvR3JHTENhcHMuY3BwCmluZGV4IDI2ODJlYjIuLjUyYzQ4MGEgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvR3JHTENhcHMuY3BwCisrKyBiL3NyYy9ncHUvZ2wvR3JHTENhcHMuY3BwCkBAIC0xNjMsOCArMTYzLDggQEAKIH0KIAogYm9vbCBHckdMQ2Fwczo6cmVhZFBpeGVsc1N1cHBvcnRlZChjb25zdCBHckdMSW50ZXJmYWNlKiBpbnRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBmb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlKSBjb25zdCB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHR5cGUpIGNvbnN0IHsKICAgICBpZiAoR1JfR0xfUkdCQSA9PSBmb3JtYXQgJiYgR1JfR0xfVU5TSUdORURfQllURSA9PSB0eXBlKSB7CiAgICAgICAgIC8vIEVTIDIgZ3VhcmFudGVlcyB0aGlzIGZvcm1hdCBpcyBzdXBwb3J0ZWQKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODAsMTEgKzE4MCwxMSBAQAogCiAgICAgLy8gVGhlIG90aGVyIHN1cHBvcnRlZCBmb3JtYXQvdHlwZSBjb21ibyBzdXBwb3J0ZWQgZm9yIFJlYWRQaXhlbHMKICAgICAvLyBjYW4gY2hhbmdlIGJhc2VkIG9uIHdoaWNoIHJlbmRlciB0YXJnZXQgaXMgYm91bmQKLSAgICBHUl9HTF9HZXRJbnRlZ2VydihpbnRmLCAKKyAgICBHUl9HTF9HZXRJbnRlZ2VydihpbnRmLAogICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFULAogICAgICAgICAgICAgICAgICAgICAgICZvdGhlckZvcm1hdCk7CiAKLSAgICBHUl9HTF9HZXRJbnRlZ2VydihpbnRmLCAKKyAgICBHUl9HTF9HZXRJbnRlZ2VydihpbnRmLAogICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAmb3RoZXJUeXBlKTsKIApAQCAtMzAxLDcgKzMwMSw3IEBACiAKICAgICBpZiAoa0Rlc2t0b3BfR3JHTEJpbmRpbmcgPT0gY3R4SW5mby5iaW5kaW5nKCkpIHsKICAgICAgICAgYm9vbCBzdXBwb3J0c1BhY2tlZERTID0KLSAgICAgICAgICAgIGN0eEluZm8udmVyc2lvbigpID49IEdSX0dMX1ZFUigzLDApIHx8IAorICAgICAgICAgICAgY3R4SW5mby52ZXJzaW9uKCkgPj0gR1JfR0xfVkVSKDMsMCkgfHwKICAgICAgICAgICAgIGN0eEluZm8uaGFzRXh0ZW5zaW9uKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSB8fAogICAgICAgICAgICAgY3R4SW5mby5oYXNFeHRlbnNpb24oIkdMX0FSQl9mcmFtZWJ1ZmZlcl9vYmplY3QiKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9HckdMQ2Fwcy5oIGIvc3JjL2dwdS9nbC9HckdMQ2Fwcy5oCmluZGV4IDJhY2ZiZDcuLjFjYzUwYzIgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvR3JHTENhcHMuaAorKysgYi9zcmMvZ3B1L2dsL0dyR0xDYXBzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIG5vIHN1cHBvcnQgZm9yIE1TQUEgRkJPcwogICAgICAgICAgKi8KLSAgICAgICAga05vbmVfTVNGQk9UeXBlID0gMCwgIAorICAgICAgICBrTm9uZV9NU0ZCT1R5cGUgPSAwLAogICAgICAgICAvKioKICAgICAgICAgICogR0wzLjAtc3R5bGUgTVNBQSBGQk8gKEdMX0FSQl9mcmFtZWJ1ZmZlcl9vYmplY3QpCiAgICAgICAgICAqLwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICogUmVwb3J0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2FtcGxlcyBzdXBwb3J0ZWQuCiAgICAgICovCiAgICAgaW50IG1heFNhbXBsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gZk1heFNhbXBsZUNvdW50OyB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBvcnRzIHRoZSB0eXBlIG9mIGNvdmVyYWdlIHNhbXBsZSBBQSBzdXBwb3J0LgogICAgICAqLwpAQCAtMjE4LDcgKzIxOCw3IEBACiAKICAgICAvLyBEb2VzIFJlYWRQaXhlbHMgc3VwcG9ydCB0aGUgcHJvdmlkZWQgZm9ybWF0L3R5cGUgY29tYm8/CiAgICAgYm9vbCByZWFkUGl4ZWxzU3VwcG9ydGVkKGNvbnN0IEdyR0xJbnRlcmZhY2UqIGludGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGZvcm1hdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gdHlwZSkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xDcmVhdGVOdWxsSW50ZXJmYWNlLmNwcCBiL3NyYy9ncHUvZ2wvR3JHTENyZWF0ZU51bGxJbnRlcmZhY2UuY3BwCmluZGV4IDY0NTFmY2EuLmQwZTJiYjYgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvR3JHTENyZWF0ZU51bGxJbnRlcmZhY2UuY3BwCisrKyBiL3NyYy9ncHUvZ2wvR3JHTENyZWF0ZU51bGxJbnRlcmZhY2UuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBHUl9HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKICAgICAgICAgICAgICAgICAgICAgYnVmID0gZ0N1cnJFbGVtZW50QXJyYXlCdWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJ1ZikgewogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ01hcHBlZEJ1ZmZlcnMuY291bnQoKTsgKytpKSB7CkBAIC0zODQsNyArMzg0LDcgQEAKIH0gLy8gZW5kIGFub255bW91cyBuYW1lc3BhY2UKIAogY29uc3QgR3JHTEludGVyZmFjZSogR3JHTENyZWF0ZU51bGxJbnRlcmZhY2UoKSB7Ci0gICAgLy8gVGhlIGdsIGZ1bmN0aW9ucyBhcmUgbm90IGNvbnRleHQtc3BlY2lmaWMgc28gd2UgY3JlYXRlIG9uZSBnbG9iYWwgCisgICAgLy8gVGhlIGdsIGZ1bmN0aW9ucyBhcmUgbm90IGNvbnRleHQtc3BlY2lmaWMgc28gd2UgY3JlYXRlIG9uZSBnbG9iYWwKICAgICAvLyBpbnRlcmZhY2UKICAgICBzdGF0aWMgU2tBdXRvVFVucmVmPEdyR0xJbnRlcmZhY2U+IGdsSW50ZXJmYWNlOwogICAgIGlmICghZ2xJbnRlcmZhY2UuZ2V0KCkpIHsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvR3JHTEluZGV4QnVmZmVyLmNwcCBiL3NyYy9ncHUvZ2wvR3JHTEluZGV4QnVmZmVyLmNwcAppbmRleCA1NDY4OTkyLi45YzAxOWMxIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL0dyR0xJbmRleEJ1ZmZlci5jcHAKKysrIGIvc3JjL2dwdS9nbC9HckdMSW5kZXhCdWZmZXIuY3BwCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAvLyBOb3RlIHRoYXQgd2UncmUgY2hlYXRpbmcgb24gdGhlIHNpemUgaGVyZS4gQ3VycmVudGx5IG5vIG1ldGhvZHMKICAgICAvLyBhbGxvdyBhIHBhcnRpYWwgdXBkYXRlIHRoYXQgcHJlc2VydmVzIGNvbnRlbnRzIG9mIG5vbi11cGRhdGVkCiAgICAgLy8gcG9ydGlvbnMgb2YgdGhlIGJ1ZmZlciAobG9jaygpIGRvZXMgYSBnbEJ1ZmZlckRhdGEoLi5zaXplLCBOVUxMLi4pKQotICAgIEdMX0NBTEwoQnVmZmVyRGF0YShHUl9HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgCisgICAgR0xfQ0FMTChCdWZmZXJEYXRhKEdSX0dMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLAogICAgICAgICAgICAgICAgICAgICAgICBzcmNTaXplSW5CeXRlcywgc3JjLCB1c2FnZSkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xJbnRlcmZhY2UuY3BwIGIvc3JjL2dwdS9nbC9HckdMSW50ZXJmYWNlLmNwcAppbmRleCAwMmU5MzM3Li4yOTdlMWZjIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL0dyR0xJbnRlcmZhY2UuY3BwCisrKyBiL3NyYy9ncHUvZ2wvR3JHTEludGVyZmFjZS5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQAogICAgIC8vIE9uIEVTIGJ1ZmZlciBtYXBwaW5nIGlzIGFuIGV4dGVuc2lvbi4gT24gRGVza3RvcAogICAgIC8vIGJ1ZmZlciBtYXBwaW5nIHdhcyBwYXJ0IG9mIG9yaWdpbmFsIFZCTyBleHRlbnNpb24KICAgICAvLyB3aGljaCB3ZSByZXF1aXJlLgotICAgIGlmIChrRGVza3RvcF9HckdMQmluZGluZyA9PSBiaW5kaW5nIHx8IAorICAgIGlmIChrRGVza3RvcF9HckdMQmluZGluZyA9PSBiaW5kaW5nIHx8CiAgICAgICAgIEdyR0xIYXNFeHRlbnNpb25Gcm9tU3RyaW5nKCJHTF9PRVNfbWFwYnVmZmVyIiwgZXh0KSkgewogICAgICAgICBpZiAoTlVMTCA9PSBmTWFwQnVmZmVyIHx8CiAgICAgICAgICAgICBOVUxMID09IGZVbm1hcEJ1ZmZlcikgewpAQCAtMzM3LDcgKzMzNyw3IEBACiAKICAgICAvLyBEdWFsIHNvdXJjZSBibGVuZGluZwogICAgIGlmIChrRGVza3RvcF9HckdMQmluZGluZyA9PSBiaW5kaW5nICYmCi0gICAgICAgIChnbFZlciA+PSBHUl9HTF9WRVIoMywzKSB8fCAKKyAgICAgICAgKGdsVmVyID49IEdSX0dMX1ZFUigzLDMpIHx8CiAgICAgICAgICBHckdMSGFzRXh0ZW5zaW9uRnJvbVN0cmluZygiR0xfQVJCX2JsZW5kX2Z1bmNfZXh0ZW5kZWQiLCBleHQpKSkgewogICAgICAgICBpZiAoTlVMTCA9PSBmQmluZEZyYWdEYXRhTG9jYXRpb25JbmRleGVkKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xQYXRoLmNwcCBiL3NyYy9ncHUvZ2wvR3JHTFBhdGguY3BwCmluZGV4IDY0ZDVhNTUuLjk1ZTExZjIgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvR3JHTFBhdGguY3BwCisrKyBiL3NyYy9ncHUvZ2wvR3JHTFBhdGguY3BwCkBAIC03MCw3ICs3MCw3IEBACiAgICAgLy8gVE9ETzogRGlyZWN0IGFjY2VzcyB0byBwYXRoIHBvaW50cyBzaW5jZSB3ZSBjb3VsZCBwYXNzIHRoZW0gb24gZGlyZWN0bHkuCiAgICAgcGF0aC5nZXRQb2ludHMoJnBhdGhQb2ludHNbMF0sIHBvaW50Q250KTsKICAgICBwYXRoLmdldFZlcmJzKCZwYXRoQ29tbWFuZHNbMF0sIHZlcmJDbnQpOwotICAgIAorCiAgICAgR1JfREVCVUdDT0RFKGludCBudW1QdHMgPSAwKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcmJDbnQ7ICsraSkgewogICAgICAgICBTa1BhdGg6OlZlcmIgdiA9IHN0YXRpY19jYXN0PFNrUGF0aDo6VmVyYj4ocGF0aENvbW1hbmRzW2ldKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgR1JfREVCVUdDT0RFKG51bVB0cyArPSBudW1fcHRzKHYpKTsKICAgICB9CiAgICAgR3JBc3NlcnQocGF0aFBvaW50cy5jb3VudCgpID09IG51bVB0cyk7Ci0gICAgCisKICAgICBHTF9DQUxMKFBhdGhDb21tYW5kcyhmUGF0aElELAogICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJDbnQsICZwYXRoQ29tbWFuZHNbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIHBvaW50Q250LCBHUl9HTF9GTE9BVCwgJnBhdGhQb2ludHNbMF0pKTsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvR3JHTFByb2dyYW0uY3BwIGIvc3JjL2dwdS9nbC9HckdMUHJvZ3JhbS5jcHAKaW5kZXggYjA0ZDkyNC4uYmQ0MDZmNCAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9HckdMUHJvZ3JhbS5jcHAKKysrIGIvc3JjL2dwdS9nbC9HckdMUHJvZ3JhbS5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR3JEcmF3U3RhdGU6OmtRdWFkX0VkZ2VUeXBlOgogICAgICAgICAgICAgc2VnbWVudHMtPmZGU0NvZGUuYXBwZW5kKCJcdGZsb2F0IGVkZ2VBbHBoYTtcbiIpOwotICAgICAgICAgICAgLy8ga2VlcCB0aGUgZGVyaXZhdGl2ZSBpbnN0cnVjdGlvbnMgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgCisgICAgICAgICAgICAvLyBrZWVwIHRoZSBkZXJpdmF0aXZlIGluc3RydWN0aW9ucyBvdXRzaWRlIHRoZSBjb25kaXRpb25hbAogICAgICAgICAgICAgc2VnbWVudHMtPmZGU0NvZGUuYXBwZW5kZigiXHR2ZWMyIGR1dmR4ID0gZEZkeCglcy54eSk7XG4iLCBmc05hbWUpOwogICAgICAgICAgICAgc2VnbWVudHMtPmZGU0NvZGUuYXBwZW5kZigiXHR2ZWMyIGR1dmR5ID0gZEZkeSglcy54eSk7XG4iLCBmc05hbWUpOwogICAgICAgICAgICAgc2VnbWVudHMtPmZGU0NvZGUuYXBwZW5kZigiXHRpZiAoJXMueiA+IDAuMCAmJiAlcy53ID4gMC4wKSB7XG4iLCBmc05hbWUsIGZzTmFtZSk7CkBAIC01MDgsNyArNTA4LDcgQEAKICAgICAgICAgICAgIC8vIHJldHJpZXZlIGxlbmd0aCBldmVuIHRob3VnaCB3ZSBkb24ndCBuZWVkIGl0IHRvIHdvcmthcm91bmQgYnVnIGluIGNocm9tZSBjbWQgYnVmZmVyCiAgICAgICAgICAgICAvLyBwYXJhbSB2YWxpZGF0aW9uLgogICAgICAgICAgICAgR3JHTHNpemVpIGxlbmd0aCA9IEdSX0dMX0lOSVRfWkVSTzsKLSAgICAgICAgICAgIEdSX0dMX0NBTEwoZ2xpLCBHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgaW5mb0xlbisxLCAKKyAgICAgICAgICAgIEdSX0dMX0NBTEwoZ2xpLCBHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgaW5mb0xlbisxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCwgKGNoYXIqKWxvZy5nZXQoKSkpOwogICAgICAgICAgICAgcHJpbnRfc2hhZGVyKHN0cmluZ0NudCwgc3RyaW5ncywgc3RyaW5nTGVuZ3Rocyk7CiAgICAgICAgICAgICBHclByaW50ZigiXG4lcyIsIGxvZy5nZXQoKSk7CkBAIC04MTYsMTAgKzgxNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JQcm9ncmFtU3RhZ2VGYWN0b3J5JiBmYWN0b3J5ID0gY3VzdG9tU3RhZ2VzW3NdLT5nZXRGYWN0b3J5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmUHJvZ3JhbVN0YWdlW3NdID0gZmFjdG9yeS5jcmVhdGVHTEluc3RhbmNlKCpjdXN0b21TdGFnZXNbc10pOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIHN0YWdlcyBkb24ndCBrbm93IGhvdyB0byBkZWFsIHdpdGggYSBzY2FsYXIgaW5wdXQuIChNYXliZSB0aGV5IHNob3VsZC4gV2UgCisgICAgICAgICAgICAgICAgICAgIC8vIHN0YWdlcyBkb24ndCBrbm93IGhvdyB0byBkZWFsIHdpdGggYSBzY2FsYXIgaW5wdXQuIChNYXliZSB0aGV5IHNob3VsZC4gV2UKICAgICAgICAgICAgICAgICAgICAgLy8gY291bGQgcGFzcyBhIEdyR0xTaGFkZXJWYXIpCiAgICAgICAgICAgICAgICAgICAgIGlmIChpbkNvdmVyYWdlSXNTY2FsYXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuZkZTQ29kZS5hcHBlbmRmKCJcdHZlYzQgJXM0ID0gdmVjNCglcyk7XG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuZkZTQ29kZS5hcHBlbmRmKCJcdHZlYzQgJXM0ID0gdmVjNCglcyk7XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db3ZlcmFnZS5jX3N0cigpLCBpbkNvdmVyYWdlLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5Db3ZlcmFnZS5hcHBlbmQoIjQiKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTA5MiwxMyArMTA5MiwxMyBAQAogICAgICAgICBpZiAoZGVzYy5mSW5Db25maWdGbGFncyAmIGtNdWxCeUFscGhhTWFzaykgewogICAgICAgICAgICAgLy8gb25seSBvbmUgb2YgdGhlIG11bCBieSBhbHBoYSBmbGFncyBzaG91bGQgYmUgc2V0CiAgICAgICAgICAgICBHckFzc2VydChHcklzUG93MihrTXVsQnlBbHBoYU1hc2sgJiBkZXNjLmZJbkNvbmZpZ0ZsYWdzKSk7Ci0gICAgICAgICAgICBHckFzc2VydCghKGRlc2MuZkluQ29uZmlnRmxhZ3MgJiAKKyAgICAgICAgICAgIEdyQXNzZXJ0KCEoZGVzYy5mSW5Db25maWdGbGFncyAmCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YWdlRGVzYzo6a1NtZWFyQWxwaGFfSW5Db25maWdGbGFnKSk7Ci0gICAgICAgICAgICBHckFzc2VydCghKGRlc2MuZkluQ29uZmlnRmxhZ3MgJiAKKyAgICAgICAgICAgIEdyQXNzZXJ0KCEoZGVzYy5mSW5Db25maWdGbGFncyAmCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YWdlRGVzYzo6a1NtZWFyUmVkX0luQ29uZmlnRmxhZykpOwogICAgICAgICAgICAgYnVpbGRlci0+ZkZTQ29kZS5hcHBlbmRmKCJcdCVzID0gJXMoJXMsICVzKSVzO1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc091dENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmZUZXhGdW5jLmNfc3RyKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmZUZXhGdW5jLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci0+ZlNhbXBsZUNvb3Jkcy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmZTd2l6emxlLmNfc3RyKCkpOwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9HckdMUmVuZGVyVGFyZ2V0LmggYi9zcmMvZ3B1L2dsL0dyR0xSZW5kZXJUYXJnZXQuaAppbmRleCBkNWYwNGQ0Li42NGQ5NWZhIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL0dyR0xSZW5kZXJUYXJnZXQuaAorKysgYi9zcmMvZ3B1L2dsL0dyR0xSZW5kZXJUYXJnZXQuaApAQCAtNTAsNyArNTAsNyBAQAogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgR3JHTElSZWN0JiByZWN0KSB7IGZWaWV3cG9ydCA9IHJlY3Q7IH0KICAgICBjb25zdCBHckdMSVJlY3QmIGdldFZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gZlZpZXdwb3J0OyB9CiAKLSAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzYW1lIElEIHdoZW4gYSAKKyAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzYW1lIElEIHdoZW4gYQogICAgIC8vIHRleHR1cmUtcmVuZGVydGFyZ2V0IGlzIG11bHRpc2FtcGxlZCwgYW5kIGRpZmZlcmVudCBJRHMgd2hlbgogICAgIC8vIGl0IGlzLgogICAgIC8vIEZCTyBJRCB1c2VkIHRvIHJlbmRlciBpbnRvCkBAIC01OCw5ICs1OCw5IEBACiAgICAgLy8gRkJPIElEIHRoYXQgaGFzIHRleHR1cmUgSUQgYXR0YWNoZWQuCiAgICAgR3JHTHVpbnQgdGV4dHVyZUZCT0lEKCkgY29uc3QgeyByZXR1cm4gZlRleEZCT0lEOyB9CiAKLSAgICAvLyBvdmVycmlkZSBvZiBHclJlbmRlclRhcmdldCAKKyAgICAvLyBvdmVycmlkZSBvZiBHclJlbmRlclRhcmdldAogICAgIHZpcnR1YWwgaW50cHRyX3QgZ2V0UmVuZGVyVGFyZ2V0SGFuZGxlKCkgY29uc3QgewotICAgICAgICByZXR1cm4gdGhpcy0+cmVuZGVyRkJPSUQoKTsgCisgICAgICAgIHJldHVybiB0aGlzLT5yZW5kZXJGQk9JRCgpOwogICAgIH0KICAgICB2aXJ0dWFsIGludHB0cl90IGdldFJlbmRlclRhcmdldFJlc29sdmVkSGFuZGxlKCkgY29uc3QgewogICAgICAgICByZXR1cm4gdGhpcy0+dGV4dHVyZUZCT0lEKCk7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xTTC5oIGIvc3JjL2dwdS9nbC9HckdMU0wuaAppbmRleCBhNThmN2U4Li5kNzY2ZGQ5IDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL0dyR0xTTC5oCisrKyBiL3NyYy9ncHUvZ2wvR3JHTFNMLmgKQEAgLTY0LDcgKzY0LDcgQEAKICAqIGRlY2xhcmUgYW4gb3V0cHV0IHZhcmlhYmxlIGZvciB0aGUgY29sb3IuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlOgogICogICAgKiBQYXJhbWV0ZXIgdmFyJ3MgbmFtZSB3aWxsIGJlIHNldCB0byBuYW1lSWZEZWNsYXJlZAogICogICAgKiBUaGUgdmFyaWFibGUgbXVzdCBiZSBkZWNsYXJlZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyCi0gKiAgICAqIFRoZSB2YXJpYWJsZSBoYXMgdG8gYmUgYm91bmQgYXMgdGhlIGNvbG9yIG91dHB1dCAKKyAqICAgICogVGhlIHZhcmlhYmxlIGhhcyB0byBiZSBib3VuZCBhcyB0aGUgY29sb3Igb3V0cHV0CiAgKiAgICAgICh1c2luZyBnbEJpbmRGcmFnRGF0YUxvY2F0aW9uKQogICogICAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2U6CiAgKiAgICAqIFBhcmFtZXRlciB2YXIncyBuYW1lIHdpbGwgYmUgc2V0IHRvIHRoZSBHTFNMIGJ1aWx0LWluIGNvbG9yIG91dHB1dCBuYW1lLgpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9HckdMU2hhZGVyVmFyLmggYi9zcmMvZ3B1L2dsL0dyR0xTaGFkZXJWYXIuaAppbmRleCA5MmQ3ZWUwLi5lOGY0OTFjIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL0dyR0xTaGFkZXJWYXIuaAorKysgYi9zcmMvZ3B1L2dsL0dyR0xTaGFkZXJWYXIuaApAQCAtMjMzLDEyICsyMzMsMTIgQEAKICAgICAgICAgR3JTTFR5cGUgZWZmZWN0aXZlVHlwZSA9IHRoaXMtPmdldFR5cGUoKTsKICAgICAgICAgaWYgKHRoaXMtPmlzQXJyYXkoKSkgewogICAgICAgICAgICAgaWYgKHRoaXMtPmlzVW5zaXplZEFycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBvdXQtPmFwcGVuZGYoIiVzICVzW10iLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVN0cmluZyhlZmZlY3RpdmVUeXBlKSwgCisgICAgICAgICAgICAgICAgb3V0LT5hcHBlbmRmKCIlcyAlc1tdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVN0cmluZyhlZmZlY3RpdmVUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBHckFzc2VydCh0aGlzLT5nZXRBcnJheUNvdW50KCkgPiAwKTsKLSAgICAgICAgICAgICAgICBvdXQtPmFwcGVuZGYoIiVzICVzWyVkXSIsIAorICAgICAgICAgICAgICAgIG91dC0+YXBwZW5kZigiJXMgJXNbJWRdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVN0cmluZyhlZmZlY3RpdmVUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0TmFtZSgpLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldEFycmF5Q291bnQoKSk7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xTdGVuY2lsQnVmZmVyLmggYi9zcmMvZ3B1L2dsL0dyR0xTdGVuY2lsQnVmZmVyLmgKaW5kZXggN2IzZGE0Zi4uNjVlYjBkOSAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9HckdMU3RlbmNpbEJ1ZmZlci5oCisrKyBiL3NyYy9ncHUvZ2wvR3JHTFN0ZW5jaWxCdWZmZXIuaApAQCAtMjMsMTAgKzIzLDEwIEBACiAgICAgICAgIGJvb2wgICAgICBmUGFja2VkOwogICAgIH07CiAKLSAgICBHckdMU3RlbmNpbEJ1ZmZlcihHckdwdSogZ3B1LCBHckdMaW50IHJiaWQsIAorICAgIEdyR0xTdGVuY2lsQnVmZmVyKEdyR3B1KiBncHUsIEdyR0xpbnQgcmJpZCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBsZUNudCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQmIGZvcm1hdCkgCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0JiBmb3JtYXQpCiAgICAgICAgIDogR3JTdGVuY2lsQnVmZmVyKGdwdSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LmZTdGVuY2lsQml0cywgc2FtcGxlQ250KQogICAgICAgICAsIGZGb3JtYXQoZm9ybWF0KQogICAgICAgICAsIGZSZW5kZXJidWZmZXJJRChyYmlkKSB7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR0xUZXh0dXJlLmNwcCBiL3NyYy9ncHUvZ2wvR3JHTFRleHR1cmUuY3BwCmluZGV4IGUzNjA4NzQuLjJjNWU0YTIgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvR3JHTFRleHR1cmUuY3BwCisrKyBiL3NyYy9ncHUvZ2wvR3JHTFRleHR1cmUuY3BwCkBAIC00Miw3ICs0Miw3IEBACiB9CiAKIEdyR0xUZXh0dXJlOjpHckdMVGV4dHVyZShHckdwdUdMKiBncHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzYyYgdGV4dHVyZURlc2MpIAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2MmIHRleHR1cmVEZXNjKQogICAgIDogSU5IRVJJVEVEKGdwdSwgdGV4dHVyZURlc2MpIHsKICAgICB0aGlzLT5pbml0KGdwdSwgdGV4dHVyZURlc2MsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9HckdMVXRpbC5jcHAgYi9zcmMvZ3B1L2dsL0dyR0xVdGlsLmNwcAppbmRleCAyZjIyZjAwLi4wZTllMjFmIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL0dyR0xVdGlsLmNwcAorKysgYi9zcmMvZ3B1L2dsL0dyR0xVdGlsLmNwcApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgaWYgKDQgPT0gbikgewogICAgICAgICByZXR1cm4gR1JfR0xfVkVSKG1ham9yLCBtaW5vcik7CiAgICAgfQotICAgIAorCiAgICAgbiA9IHNzY2FuZih2ZXJzaW9uU3RyaW5nLCAiT3BlbkdMIEVTICVkLiVkIiwgJm1ham9yLCAmbWlub3IpOwogICAgIGlmICgyID09IG4pIHsKICAgICAgICAgcmV0dXJuIEdSX0dMX1ZFUihtYWpvciwgbWlub3IpOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgaWYgKDIgPT0gbikgewogICAgICAgICByZXR1cm4gR1JfR0xTTF9WRVIobWFqb3IsIG1pbm9yKTsKICAgICB9Ci0gICAgCisKICAgICBuID0gc3NjYW5mKHZlcnNpb25TdHJpbmcsICJPcGVuR0wgRVMgR0xTTCBFUyAlZC4lZCIsICZtYWpvciwgJm1pbm9yKTsKICAgICBpZiAoMiA9PSBuKSB7CiAgICAgICAgIHJldHVybiBHUl9HTFNMX1ZFUihtYWpvciwgbWlub3IpOwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9HckdMVmVydGV4QnVmZmVyLmNwcCBiL3NyYy9ncHUvZ2wvR3JHTFZlcnRleEJ1ZmZlci5jcHAKaW5kZXggZDkzMmYxMS4uM2Q2MDYyZCAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9HckdMVmVydGV4QnVmZmVyLmNwcAorKysgYi9zcmMvZ3B1L2dsL0dyR0xWZXJ0ZXhCdWZmZXIuY3BwCkBAIC04NSw3ICs4NSw3IEBACiAgICAgaWYgKHRoaXMtPmlzVmFsaWQoKSAmJiB0aGlzLT5nZXRHcHUoKS0+Z2V0Q2FwcygpLmZCdWZmZXJMb2NrU3VwcG9ydCkgewogICAgICAgICBHckdMaW50IG1hcHBlZDsKICAgICAgICAgdGhpcy0+YmluZCgpOwotICAgICAgICBHTF9DQUxMKEdldEJ1ZmZlclBhcmFtZXRlcml2KEdSX0dMX0FSUkFZX0JVRkZFUiwgCisgICAgICAgIEdMX0NBTEwoR2V0QnVmZmVyUGFyYW1ldGVyaXYoR1JfR0xfQVJSQVlfQlVGRkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX0JVRkZFUl9NQVBQRUQsICZtYXBwZWQpKTsKICAgICAgICAgR3JBc3NlcnQoISFtYXBwZWQgPT0gISFmTG9ja1B0cik7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgIC8vIGRyYXdzIHRoYXQgcmVmZXJlbmNlIHRoZSBvbGQgY29udGVudHMuIFdpdGggdGhpcyBoaW50IGl0IGNhbgogICAgICAgICAvLyBhc3NpZ24gYSBkaWZmZXJlbnQgYWxsb2NhdGlvbiBmb3IgdGhlIG5ldyBjb250ZW50cyB0byBhdm9pZAogICAgICAgICAvLyBmbHVzaGluZyB0aGUgZ3B1IHBhc3QgZHJhd3MgY29uc3VtaW5nIHRoZSBvbGQgY29udGVudHMuCi0gICAgICAgIEdMX0NBTEwoQnVmZmVyRGF0YShHUl9HTF9BUlJBWV9CVUZGRVIsIAorICAgICAgICBHTF9DQUxMKEJ1ZmZlckRhdGEoR1JfR0xfQVJSQVlfQlVGRkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZUluQnl0ZXMoKSwgTlVMTCwgdXNhZ2UpKTsKICAgICAgICAgR0xfQ0FMTChCdWZmZXJTdWJEYXRhKEdSX0dMX0FSUkFZX0JVRkZFUiwgMCwgc3JjU2l6ZUluQnl0ZXMsIHNyYykpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvR3JHcHVHTC5jcHAgYi9zcmMvZ3B1L2dsL0dyR3B1R0wuY3BwCmluZGV4IDAzNDYyZTcuLjM3NjM3MDkgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvR3JHcHVHTC5jcHAKKysrIGIvc3JjL2dwdS9nbC9HckdwdUdMLmNwcApAQCAtMjksNyArMjksNyBAQAogICAgICNkZWZpbmUgQ0xFQVJfRVJST1JfQkVGT1JFX0FMTE9DKGlmYWNlKSAgIEdyR0xDbGVhckVycihpZmFjZSkKICAgICAjZGVmaW5lIEdMX0FMTE9DX0NBTEwoaWZhY2UsIGNhbGwpICAgICAgICBHUl9HTF9DQUxMX05PRVJSQ0hFQ0soaWZhY2UsIGNhbGwpCiAgICAgI2RlZmluZSBDSEVDS19BTExPQ19FUlJPUihpZmFjZSkgICAgICAgICAgR1JfR0xfR0VUX0VSUk9SKGlmYWNlKQotI2Vsc2UgCisjZWxzZQogICAgICNkZWZpbmUgQ0xFQVJfRVJST1JfQkVGT1JFX0FMTE9DKGlmYWNlKQogICAgICNkZWZpbmUgR0xfQUxMT0NfQ0FMTChpZmFjZSwgY2FsbCkgICAgICAgIEdSX0dMX0NBTEwoaWZhY2UsIGNhbGwpCiAgICAgI2RlZmluZSBDSEVDS19BTExPQ19FUlJPUihpZmFjZSkgICAgICAgICAgR1JfR0xfTk9fRVJST1IKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgIH0KIAogICAgIGlmIChrRGVza3RvcF9HckdMQmluZGluZyA9PSB0aGlzLT5nbEJpbmRpbmcoKSkgewotICAgICAgICBpZiAodGhpcy0+Z2xWZXJzaW9uKCkgPj0gR1JfR0xfVkVSKDIsMCkgfHwgCisgICAgICAgIGlmICh0aGlzLT5nbFZlcnNpb24oKSA+PSBHUl9HTF9WRVIoMiwwKSB8fAogICAgICAgICAgICAgdGhpcy0+aGFzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIikpIHsKICAgICAgICAgICAgIGZDYXBzLmZOUE9UVGV4dHVyZVRpbGVTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmhhc0V4dGVuc2lvbigiR0xfQVJCX2JsZW5kX2Z1bmNfZXh0ZW5kZWQiKTsKICAgICAgICAgZkNhcHMuZlNoYWRlckRlcml2YXRpdmVTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBHTF9BUkJfZ2VvbWV0cnlfc2hhZGVyNCwganVzdCBHTCAzLjIrIEdTCi0gICAgICAgIGZDYXBzLmZHZW9tZXRyeVNoYWRlclN1cHBvcnQgPSAKKyAgICAgICAgZkNhcHMuZkdlb21ldHJ5U2hhZGVyU3VwcG9ydCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdsVmVyc2lvbigpID49IEdSX0dMX1ZFUigzLDIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdsc2xHZW5lcmF0aW9uKCkgPj0gazE1MF9HckdMU0xHZW5lcmF0aW9uOwogICAgIH0gZWxzZSB7CkBAIC0yODcsOSArMjg3LDkgQEAKIHZvaWQgR3JHcHVHTDo6ZmlsbEluQ29uZmlnUmVuZGVyYWJsZVRhYmxlKCkgewogCiAgICAgLy8gT3BlbkdMIDwgMy4wCi0gICAgLy8gIG5vIHN1cHBvcnQgZm9yIHJlbmRlciB0YXJnZXRzIHVubGVzcyB0aGUgR0xfQVJCX2ZyYW1lYnVmZmVyX29iamVjdCAKLSAgICAvLyAgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCAoaW4gd2hpY2ggY2FzZSB3ZSBnZXQgQUxQSEEsIFJFRCwgUkcsIFJHQiwgCi0gICAgLy8gIFJHQkEgKEFMUEhBOCwgUkdCQTQsIFJHQkE4KSBmb3IgT3BlbkdMID4gMS4xKS4gTm90ZSB0aGF0IHdlIAorICAgIC8vICBubyBzdXBwb3J0IGZvciByZW5kZXIgdGFyZ2V0cyB1bmxlc3MgdGhlIEdMX0FSQl9mcmFtZWJ1ZmZlcl9vYmplY3QKKyAgICAvLyAgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCAoaW4gd2hpY2ggY2FzZSB3ZSBnZXQgQUxQSEEsIFJFRCwgUkcsIFJHQiwKKyAgICAvLyAgUkdCQSAoQUxQSEE4LCBSR0JBNCwgUkdCQTgpIGZvciBPcGVuR0wgPiAxLjEpLiBOb3RlIHRoYXQgd2UKICAgICAvLyAgcHJvYmFibHkgZG9uJ3QgZ2V0IFI4IGluIHRoaXMgY2FzZS4KIAogICAgIC8vIE9wZW5HTCAzLjAKQEAgLTMyMCw3ICszMjAsNyBAQAogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gT24gRVMgd2UgY2FuIG9ubHkgaG9wZSBmb3IgUjgKLSAgICAgICAgZkNvbmZpZ1JlbmRlclN1cHBvcnRba0FscGhhXzhfR3JQaXhlbENvbmZpZ10gPSAKKyAgICAgICAgZkNvbmZpZ1JlbmRlclN1cHBvcnRba0FscGhhXzhfR3JQaXhlbENvbmZpZ10gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5nbENhcHMoKS50ZXh0dXJlUmVkU3VwcG9ydCgpOwogICAgIH0KIApAQCAtMzI5LDcgKzMyOSw3IEBACiAgICAgICAgIGZDb25maWdSZW5kZXJTdXBwb3J0W2tSR0JfNTY1X0dyUGl4ZWxDb25maWddID0gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBQcmUgMy4wLCBHYW5lc2ggcmVsaWVzIG9uIGVpdGhlciBHTF9BUkJfZnJhbWVidWZmZXJfb2JqZWN0IG9yIAorICAgIC8vIFByZSAzLjAsIEdhbmVzaCByZWxpZXMgb24gZWl0aGVyIEdMX0FSQl9mcmFtZWJ1ZmZlcl9vYmplY3Qgb3IKICAgICAvLyBHTF9FWFRfZnJhbWVidWZmZXJfb2JqZWN0IGZvciBGQk8gc3VwcG9ydC4gQm90aCBvZiB0aGVzZQogICAgIC8vIGFsbG93IFJHQkE0IHJlbmRlciB0YXJnZXRzIHNvIHRoaXMgaXMgYWx3YXlzIHN1cHBvcnRlZC4KICAgICBmQ29uZmlnUmVuZGVyU3VwcG9ydFtrUkdCQV80NDQ0X0dyUGl4ZWxDb25maWddID0gdHJ1ZTsKQEAgLTQxMyw3ICs0MTMsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmQ2FuUHJlc2VydmVVbnByZW11bFJvdW5kdHJpcCA9IGZhaWxlZCA/IAorICAgICAgICBmQ2FuUHJlc2VydmVVbnByZW11bFJvdW5kdHJpcCA9IGZhaWxlZCA/CiAgICAgICAgICAgICAgICAgICAgICAgICBrTm9fQ2FuUHJlc2VydmVVbnByZW11bFJvdW5kdHJpcCA6CiAgICAgICAgICAgICAgICAgICAgICAgICBrWWVzX0NhblByZXNlcnZlVW5wcmVtdWxSb3VuZHRyaXA7CiAgICAgfQpAQCAtNDc2LDcgKzQ3Niw3IEBACiAgICAgICAgIEdMX0NBTEwoRW5hYmxlKEdSX0dMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpKTsKIAogICAgICAgICAvLyBXZSBzaG91bGQgc2V0IGdsUG9seWdvbk1vZGUoRlJPTlRfQU5EX0JBQ0ssRklMTCkgaGVyZSwgdG9vLiBJdCBpc24ndAotICAgICAgICAvLyBjdXJyZW50bHkgcGFydCBvZiBvdXIgZ2wgaW50ZXJmYWNlLiBUaGVyZSBhcmUgcHJvYmFibHkgb3RoZXJzIGFzIAorICAgICAgICAvLyBjdXJyZW50bHkgcGFydCBvZiBvdXIgZ2wgaW50ZXJmYWNlLiBUaGVyZSBhcmUgcHJvYmFibHkgb3RoZXJzIGFzCiAgICAgICAgIC8vIHdlbGwuCiAgICAgfQogICAgIGZIV0FBU3RhdGUuaW52YWxpZGF0ZSgpOwpAQCAtNTk0LDcgKzU5NCw3IEBACiAgICAgaWYgKE5VTEwgPT0gdGV4dHVyZSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKICAgICB0aGlzLT5zZXRTcGFyZVRleHR1cmVVbml0KCk7CiAgICAgcmV0dXJuIHRleHR1cmU7CiB9CkBAIC02MTIsNyArNjEyLDcgQEAKICAgICB2aWV3cG9ydC5mQm90dG9tID0gMDsKICAgICB2aWV3cG9ydC5mV2lkdGggID0gZGVzYy5mV2lkdGg7CiAgICAgdmlld3BvcnQuZkhlaWdodCA9IGRlc2MuZkhlaWdodDsKLSAgICAKKwogICAgIEdyUmVuZGVyVGFyZ2V0KiB0Z3QgPSBTa05FV19BUkdTKEdyR0xSZW5kZXJUYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMsIGdsRGVzYywgdmlld3BvcnQpKTsKICAgICBpZiAoZGVzYy5mU3RlbmNpbEJpdHMpIHsKQEAgLTY1Nyw3ICs2NTcsNyBAQAogICAgIGRlc2MuZk9yaWVudGF0aW9uID0gZ2xUZXgtPm9yaWVudGF0aW9uKCk7CiAKICAgICB0aGlzLT51cGxvYWRUZXhEYXRhKGRlc2MsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgYnVmZmVyLCByb3dCeXRlcyk7CiB9CiAKQEAgLTcxMSw3ICs3MTEsNyBAQAogICAgIGJvb2wgdXNlVGV4U3RvcmFnZSA9IGlzTmV3VGV4dHVyZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuZkNvbmZpZyAhPSBrSW5kZXhfOF9HclBpeGVsQ29uZmlnICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2xDYXBzKCkudGV4U3RvcmFnZVN1cHBvcnQoKTsKLSAgICAKKwogICAgIGlmICh1c2VUZXhTdG9yYWdlICYmIGtEZXNrdG9wX0dyR0xCaW5kaW5nID09IHRoaXMtPmdsQmluZGluZygpKSB7CiAgICAgICAgIC8vIDU2NSBpcyBub3QgYSBzaXplZCBpbnRlcm5hbCBmb3JtYXQgb24gZGVza3RvcCBHTC4gU28gb24gZGVza3RvcCB3aXRoCiAgICAgICAgIC8vIDU2NSB3ZSBhbHdheXMgdXNlIGFuIHVuc2l6ZWQgaW50ZXJuYWwgZm9ybWF0IHRvIGxldCB0aGUgc3lzdGVtIHBpY2sKQEAgLTc4Nyw3ICs3ODcsNyBAQAogICAgICAgICBHTF9DQUxMKFBpeGVsU3RvcmVpKEdSX0dMX1VOUEFDS19BTElHTk1FTlQsIHN0YXRpY19jYXN0PEdyR0xpbnQ+KGJwcCkpKTsKICAgICB9CiAgICAgYm9vbCBzdWNjZWVkZWQgPSB0cnVlOwotICAgIGlmIChpc05ld1RleHR1cmUgJiYgCisgICAgaWYgKGlzTmV3VGV4dHVyZSAmJgogICAgICAgICAwID09IGxlZnQgJiYgMCA9PSB0b3AgJiYKICAgICAgICAgZGVzYy5mV2lkdGggPT0gd2lkdGggJiYgZGVzYy5mSGVpZ2h0ID09IGhlaWdodCkgewogICAgICAgICBDTEVBUl9FUlJPUl9CRUZPUkVfQUxMT0ModGhpcy0+Z2xJbnRlcmZhY2UoKSk7CkBAIC05MDgsNyArOTA4LDcgQEAKICAgICBpZiAoIWRlc2MtPmZUZXhGQk9JRCkgewogICAgICAgICBnb3RvIEZBSUxFRDsKICAgICB9Ci0gICAgCisKIAogICAgIC8vIElmIHdlIGFyZSB1c2luZyBtdWx0aXNhbXBsaW5nIHdlIHdpbGwgY3JlYXRlIHR3byBGQk9TLiBXZSByZW5kZXIKICAgICAvLyB0byBvbmUgYW5kIHRoZW4gcmVzb2x2ZSB0byB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgb3RoZXIuCkBAIC05MTksNyArOTE5LDcgQEAKICAgICAgICAgR0xfQ0FMTChHZW5GcmFtZWJ1ZmZlcnMoMSwgJmRlc2MtPmZSVEZCT0lEKSk7CiAgICAgICAgIEdMX0NBTEwoR2VuUmVuZGVyYnVmZmVycygxLCAmZGVzYy0+Zk1TQ29sb3JSZW5kZXJidWZmZXJJRCkpOwogICAgICAgICBpZiAoIWRlc2MtPmZSVEZCT0lEIHx8Ci0gICAgICAgICAgICAhZGVzYy0+Zk1TQ29sb3JSZW5kZXJidWZmZXJJRCB8fCAKKyAgICAgICAgICAgICFkZXNjLT5mTVNDb2xvclJlbmRlcmJ1ZmZlcklEIHx8CiAgICAgICAgICAgICAhdGhpcy0+Y29uZmlnVG9HTEZvcm1hdHMoZGVzYy0+ZkNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHTEVTIHJlcXVpcmVzIHNpemVkIGludGVybmFsIGZvcm1hdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRVMyX0dyR0xCaW5kaW5nID09IHRoaXMtPmdsQmluZGluZygpLApAQCAtOTQzLDcgKzk0Myw3IEBACiAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKICAgICAgICAgfQogICAgICAgICBHTF9DQUxMKEJpbmRGcmFtZWJ1ZmZlcihHUl9HTF9GUkFNRUJVRkZFUiwgZGVzYy0+ZlJURkJPSUQpKTsKLSAgICAgICAgR0xfQ0FMTChGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHUl9HTF9GUkFNRUJVRkZFUiwgCisgICAgICAgIEdMX0NBTEwoRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR1JfR0xfRlJBTUVCVUZGRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX0NPTE9SX0FUVEFDSE1FTlQwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUl9HTF9SRU5ERVJCVUZGRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPmZNU0NvbG9yUmVuZGVyYnVmZmVySUQpKTsKQEAgLTExMTYsNyArMTExNiw3IEBACiBjb25zdCBHckdMdWludCBrVW5rbm93bkJpdENvdW50ID0gR3JHTFN0ZW5jaWxCdWZmZXI6OmtVbmtub3duQml0Q291bnQ7CiAKIHZvaWQgaW5saW5lIGdldF9zdGVuY2lsX3JiX3NpemVzKGNvbnN0IEdyR0xJbnRlcmZhY2UqIGdsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgcmIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgcmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMU3RlbmNpbEJ1ZmZlcjo6Rm9ybWF0KiBmb3JtYXQpIHsKICAgICAvLyB3ZSBzaG91bGRuJ3QgZXZlciBrbm93IG9uZSBzaXplIGFuZCBub3QgdGhlIG90aGVyCiAgICAgR3JBc3NlcnQoKGtVbmtub3duQml0Q291bnQgPT0gZm9ybWF0LT5mU3RlbmNpbEJpdHMpID09CkBAIC0xMTg3LDcgKzExODcsNyBAQAogICAgICAgICAgICAgR3JHTFN0ZW5jaWxCdWZmZXI6OkZvcm1hdCBmb3JtYXQgPSBzRm10OwogICAgICAgICAgICAgZ2V0X3N0ZW5jaWxfcmJfc2l6ZXModGhpcy0+Z2xJbnRlcmZhY2UoKSwgc2JJRCwgJmZvcm1hdCk7CiAgICAgICAgICAgICBzYiA9IFNrTkVXX0FSR1MoR3JHTFN0ZW5jaWxCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMsIHNiSUQsIHdpZHRoLCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLCBzYklELCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLCBmb3JtYXQpKTsKICAgICAgICAgICAgIGlmICh0aGlzLT5hdHRhY2hTdGVuY2lsQnVmZmVyVG9SZW5kZXJUYXJnZXQoc2IsIHJ0KSkgewogICAgICAgICAgICAgICAgIGZMYXN0U3VjY2Vzc2Z1bFN0ZW5jaWxGbXRJZHggPSBzSWR4OwpAQCAtMTQwOSw3ICsxNDA5LDcgQEAKICAgICBpZiAoTlVMTCA9PSB0aGlzLT5nZXREcmF3U3RhdGUoKS5nZXRSZW5kZXJUYXJnZXQoKSkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgdGhpcy0+Zmx1c2hSZW5kZXJUYXJnZXQoJkdySVJlY3Q6OkVtcHR5SVJlY3QoKSk7CiAKICAgICBHckF1dG9UUmVzdG9yZTxTY2lzc29yU3RhdGU+IGFzcigmZlNjaXNzb3JTdGF0ZSk7CkBAIC0xNTM2LDE0ICsxNTM2LDE0IEBACiAgICAgLy8gdGhlIHJlYWQgcmVjdCBpcyB2aWV3cG9ydC1yZWxhdGl2ZQogICAgIEdyR0xJUmVjdCByZWFkUmVjdDsKICAgICByZWFkUmVjdC5zZXRSZWxhdGl2ZVRvKGdsdnAsIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCisKICAgICBzaXplX3QgdGlnaHRSb3dCeXRlcyA9IGJwcCAqIHdpZHRoOwogICAgIGlmICgwID09IHJvd0J5dGVzKSB7CiAgICAgICAgIHJvd0J5dGVzID0gdGlnaHRSb3dCeXRlczsKICAgICB9CiAgICAgc2l6ZV90IHJlYWREc3RSb3dCeXRlcyA9IHRpZ2h0Um93Qnl0ZXM7CiAgICAgdm9pZCogcmVhZERzdCA9IGJ1ZmZlcjsKLSAgICAKKwogICAgIC8vIGRldGVybWluZSBpZiBHTCBjYW4gcmVhZCB1c2luZyB0aGUgcGFzc2VkIHJvd0J5dGVzIG9yIGlmIHdlIG5lZWQKICAgICAvLyBhIHNjcmF0Y2ggYnVmZmVyLgogICAgIFNrQXV0b1NNYWxsb2M8MzIgKiBzaXplb2YoR3JDb2xvcik+IHNjcmF0Y2g7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL0dyR3B1R0xfcHJvZ3JhbS5jcHAgYi9zcmMvZ3B1L2dsL0dyR3B1R0xfcHJvZ3JhbS5jcHAKaW5kZXggYzFlYjM2ZS4uZjlkNzFkYiAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9HckdwdUdMX3Byb2dyYW0uY3BwCisrKyBiL3NyYy9ncHUvZ2wvR3JHcHVHTF9wcm9ncmFtLmNwcApAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIE9wZW5HTCBFUyBvbmx5IHN1cHBvcnRzIHRoZSBmbG9hdCB2YXJpZXRpZXMgb2YKICAgICAgICAgICAgICAgICAgICAgLy8gZ2xWZXJ0ZXhBdHRyaWIKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY1tdID0gR1JfQ09MT1JfVE9fVkVDNChjb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIEdMX0NBTEwoVmVydGV4QXR0cmliNGZ2KEdyR0xQcm9ncmFtOjpDb2xvckF0dHJpYnV0ZUlkeCgpLCAKKyAgICAgICAgICAgICAgICAgICAgR0xfQ0FMTChWZXJ0ZXhBdHRyaWI0ZnYoR3JHTFByb2dyYW06OkNvbG9yQXR0cmlidXRlSWR4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMpKTsKICAgICAgICAgICAgICAgICAgICAgZkhXQ29uc3RBdHRyaWJDb2xvciA9IGNvbG9yOwogICAgICAgICAgICAgICAgIH0KQEAgLTMzMSw3ICszMzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBPcGVuR0wgRVMgb25seSBzdXBwb3J0cyB0aGUgZmxvYXQgdmFyaWV0aWVzIG9mCiAgICAgICAgICAgICAgICAgICAgIC8vIGdsVmVydGV4QXR0cmliCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNbXSA9IEdSX0NPTE9SX1RPX1ZFQzQoY292ZXJhZ2UpOwotICAgICAgICAgICAgICAgICAgICBHTF9DQUxMKFZlcnRleEF0dHJpYjRmdihHckdMUHJvZ3JhbTo6Q292ZXJhZ2VBdHRyaWJ1dGVJZHgoKSwgCisgICAgICAgICAgICAgICAgICAgIEdMX0NBTEwoVmVydGV4QXR0cmliNGZ2KEdyR0xQcm9ncmFtOjpDb3ZlcmFnZUF0dHJpYnV0ZUlkeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKSk7CiAgICAgICAgICAgICAgICAgICAgIGZIV0NvbnN0QXR0cmliQ292ZXJhZ2UgPSBjb3ZlcmFnZTsKICAgICAgICAgICAgICAgICB9CkBAIC00MzAsNyArNDMwLDcgQEAKICAgICBHcklSZWN0KiBkZXZSZWN0ID0gTlVMTDsKICAgICBHcklSZWN0IGRldkNsaXBCb3VuZHM7CiAgICAgaWYgKGRyYXdTdGF0ZS5pc0NsaXBTdGF0ZSgpKSB7Ci0gICAgICAgIGZDbGlwLT5nZXRDb25zZXJ2YXRpdmVCb3VuZHMoZHJhd1N0YXRlLmdldFJlbmRlclRhcmdldCgpLCAKKyAgICAgICAgZkNsaXAtPmdldENvbnNlcnZhdGl2ZUJvdW5kcyhkcmF3U3RhdGUuZ2V0UmVuZGVyVGFyZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRldkNsaXBCb3VuZHMpOwogICAgICAgICBkZXZSZWN0ID0gJmRldkNsaXBCb3VuZHM7CiAgICAgfQpAQCAtNTIwLDcgKzUyMCw3IEBACiAKICAgICBpZiAocG9zQW5kVGV4Q2hhbmdlKSB7CiAgICAgICAgIGludCBpZHggPSBHckdMUHJvZ3JhbTo6UG9zaXRpb25BdHRyaWJ1dGVJZHgoKTsKLSAgICAgICAgR0xfQ0FMTChWZXJ0ZXhBdHRyaWJQb2ludGVyKGlkeCwgMiwgc2NhbGFyVHlwZSwgZmFsc2UsIG5ld1N0cmlkZSwgCisgICAgICAgIEdMX0NBTEwoVmVydGV4QXR0cmliUG9pbnRlcihpZHgsIDIsIHNjYWxhclR5cGUsIGZhbHNlLCBuZXdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdyR0x2b2lkKil2ZXJ0ZXhPZmZzZXQpKTsKICAgICAgICAgZkhXR2VvbWV0cnlTdGF0ZS5mVmVydGV4T2Zmc2V0ID0gdmVydGV4T2Zmc2V0OwogICAgIH0KQEAgLTUzMSwxMSArNTMxLDExIEBACiAgICAgICAgICAgICBpbnQgaWR4ID0gR3JHTFByb2dyYW06OlRleENvb3JkQXR0cmlidXRlSWR4KHQpOwogICAgICAgICAgICAgaWYgKG9sZFRleENvb3JkT2Zmc2V0c1t0XSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgR0xfQ0FMTChFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpZHgpKTsKLSAgICAgICAgICAgICAgICBHTF9DQUxMKFZlcnRleEF0dHJpYlBvaW50ZXIoaWR4LCAyLCBzY2FsYXJUeXBlLCB0ZXhDb29yZE5vcm0sIAorICAgICAgICAgICAgICAgIEdMX0NBTEwoVmVydGV4QXR0cmliUG9pbnRlcihpZHgsIDIsIHNjYWxhclR5cGUsIHRleENvb3JkTm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0cmlkZSwgdGV4Q29vcmRPZmZzZXQpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zQW5kVGV4Q2hhbmdlIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RleENvb3JkT2Zmc2V0c1t0XSAhPSBvbGRUZXhDb29yZE9mZnNldHNbdF0pIHsKLSAgICAgICAgICAgICAgICBHTF9DQUxMKFZlcnRleEF0dHJpYlBvaW50ZXIoaWR4LCAyLCBzY2FsYXJUeXBlLCB0ZXhDb29yZE5vcm0sIAorICAgICAgICAgICAgICAgIEdMX0NBTEwoVmVydGV4QXR0cmliUG9pbnRlcihpZHgsIDIsIHNjYWxhclR5cGUsIHRleENvb3JkTm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0cmlkZSwgdGV4Q29vcmRPZmZzZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChvbGRUZXhDb29yZE9mZnNldHNbdF0gPiAwKSB7CkBAIC02NzEsOSArNjcxLDkgQEAKICAgICB9IGVsc2UgewogICAgICAgICBkZXNjLT5mQ29sb3JJbnB1dCA9IFByb2dyYW1EZXNjOjprQXR0cmlidXRlX0NvbG9ySW5wdXQ7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBjb3ZJc1NvbGlkV2hpdGUgPSAhcmVxdWlyZXNBdHRyaWJ1dGVDb3ZlcmFnZSAmJiAweGZmZmZmZmZmID09IGRyYXdTdGF0ZS5nZXRDb3ZlcmFnZSgpOwotICAgIAorCiAgICAgaWYgKHNraXBDb3ZlcmFnZSkgewogICAgICAgICBkZXNjLT5mQ292ZXJhZ2VJbnB1dCA9IFByb2dyYW1EZXNjOjprVHJhbnNCbGFja19Db2xvcklucHV0OwogICAgIH0gZWxzZSBpZiAoY292SXNTb2xpZFdoaXRlKSB7CkBAIC03ODAsNyArNzgwLDcgQEAKICNlbmRpZgogCiAgICAgLy8gV2Ugd2FudCB0byBhdm9pZCBnZW5lcmF0aW5nIHByb2dyYW1zIHdpdGggZGlmZmVyZW50ICJmaXJzdCBjb3Ygc3RhZ2UiIHZhbHVlcyB3aGVuIHRoZXkgd291bGQKLSAgICAvLyBjb21wdXRlIHRoZSBzYW1lIHJlc3VsdC4gV2Ugc2V0IGZpZWxkIGluIHRoZSBkZXNjIHRvIGtOdW1TdGFnZXMgd2hlbiBlaXRoZXIgdGhlcmUgYXJlIG5vIAorICAgIC8vIGNvbXB1dGUgdGhlIHNhbWUgcmVzdWx0LiBXZSBzZXQgZmllbGQgaW4gdGhlIGRlc2MgdG8ga051bVN0YWdlcyB3aGVuIGVpdGhlciB0aGVyZSBhcmUgbm8KICAgICAvLyBjb3ZlcmFnZSBzdGFnZXMgb3IgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gY292ZXJhZ2UgYW5kIGNvbG9yIGlzIGltbWF0ZXJpYWwuCiAgICAgaW50IGZpcnN0Q292ZXJhZ2VTdGFnZSA9IEdyRHJhd1N0YXRlOjprTnVtU3RhZ2VzOwogICAgIGRlc2MtPmZGaXJzdENvdmVyYWdlU3RhZ2UgPSBHckRyYXdTdGF0ZTo6a051bVN0YWdlczsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvU2tHTENvbnRleHQuY3BwIGIvc3JjL2dwdS9nbC9Ta0dMQ29udGV4dC5jcHAKaW5kZXggZjY3ZTY4Yy4uYzUwNjliMiAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9Ta0dMQ29udGV4dC5jcHAKKysrIGIvc3JjL2dwdS9nbC9Ta0dMQ29udGV4dC5jcHAKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgfQogICAgICAgICBTS19HTCgqdGhpcywgRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR1JfR0xfRlJBTUVCVUZGRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUl9HTF9DT0xPUl9BVFRBQ0hNRU5UMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX1JFTkRFUkJVRkZFUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUl9HTF9SRU5ERVJCVUZGRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQ29sb3JCdWZmZXJJRCkpOwogICAgICAgICBTS19HTCgqdGhpcywgR2VuUmVuZGVyYnVmZmVycygxLCAmZkRlcHRoU3RlbmNpbEJ1ZmZlcklEKSk7CiAgICAgICAgIFNLX0dMKCp0aGlzLCBCaW5kUmVuZGVyYnVmZmVyKEdSX0dMX1JFTkRFUkJVRkZFUiwgZkRlcHRoU3RlbmNpbEJ1ZmZlcklEKSk7CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIC8vIGRlcHRoIHN0ZW5jaWwgYmVpbmcgYXZhaWxhYmxlLgogICAgICAgICBib29sIHN1cHBvcnRzUGFja2VkRGVwdGhTdGVuY2lsOwogICAgICAgICBpZiAoa0VTMl9HckdMQmluZGluZyA9PSBiaW5kaW5nSW5Vc2UpIHsKLSAgICAgICAgICAgIHN1cHBvcnRzUGFja2VkRGVwdGhTdGVuY2lsID0gCisgICAgICAgICAgICBzdXBwb3J0c1BhY2tlZERlcHRoU3RlbmNpbCA9CiAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmhhc0V4dGVuc2lvbigiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdXBwb3J0c1BhY2tlZERlcHRoU3RlbmNpbCA9IHZlcnNpb24gPj0gR1JfR0xfVkVSKDMsMCkgfHwKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgaWYgKHN1cHBvcnRzUGFja2VkRGVwdGhTdGVuY2lsKSB7CiAgICAgICAgICAgICAvLyBFUzIgcmVxdWlyZXMgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cyBmb3IgUmVuZGVyYnVmZmVyU3RvcmFnZQogICAgICAgICAgICAgLy8gT24gRGVza3RvcCB3ZSBsZXQgdGhlIGRyaXZlciBkZWNpZGUuCi0gICAgICAgICAgICBHckdMZW51bSBmb3JtYXQgPSBrRVMyX0dyR0xCaW5kaW5nID09IGJpbmRpbmdJblVzZSA/IAorICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0ID0ga0VTMl9HckdMQmluZGluZyA9PSBiaW5kaW5nSW5Vc2UgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JfR0xfREVQVEgyNF9TVEVOQ0lMOCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUl9HTF9ERVBUSF9TVEVOQ0lMOwogICAgICAgICAgICAgU0tfR0woKnRoaXMsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR1JfR0xfUkVOREVSQlVGRkVSLApAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JfR0xfUkVOREVSQlVGRkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZEZXB0aFN0ZW5jaWxCdWZmZXJJRCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0ID0ga0VTMl9HckdMQmluZGluZyA9PSBiaW5kaW5nSW5Vc2UgPyAKKyAgICAgICAgICAgIEdyR0xlbnVtIGZvcm1hdCA9IGtFUzJfR3JHTEJpbmRpbmcgPT0gYmluZGluZ0luVXNlID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX1NURU5DSUxfSU5ERVg4IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX1NURU5DSUxfSU5ERVg7CiAgICAgICAgICAgICBTS19HTCgqdGhpcywgUmVuZGVyYnVmZmVyU3RvcmFnZShHUl9HTF9SRU5ERVJCVUZGRVIsCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgU0tfR0woKnRoaXMsIFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgICAgU0tfR0woKnRoaXMsIENsZWFyU3RlbmNpbCgwKSk7CiAgICAgICAgIFNLX0dMKCp0aGlzLCBDbGVhcihHUl9HTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKLSAgICAgICAgCisKICAgICAgICAgZXJyb3IgPSBTS19HTCgqdGhpcywgR2V0RXJyb3IoKSk7CiAgICAgICAgIEdyR0xlbnVtIHN0YXR1cyA9CiAgICAgICAgICAgICBTS19HTCgqdGhpcywgQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHUl9HTF9GUkFNRUJVRkZFUikpOwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9hbmdsZS9HckdMQ3JlYXRlQU5HTEVJbnRlcmZhY2UuY3BwIGIvc3JjL2dwdS9nbC9hbmdsZS9HckdMQ3JlYXRlQU5HTEVJbnRlcmZhY2UuY3BwCmluZGV4IGNkMWRhNzEuLjE5ZmU0NGYgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvYW5nbGUvR3JHTENyZWF0ZUFOR0xFSW50ZXJmYWNlLmNwcAorKysgYi9zcmMvZ3B1L2dsL2FuZ2xlL0dyR0xDcmVhdGVBTkdMRUludGVyZmFjZS5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogICAgIHN0YXRpYyBTa0F1dG9UVW5yZWY8R3JHTEludGVyZmFjZT4gZ2xJbnRlcmZhY2U7CiAgICAgc3RhdGljIEhNT0RVTEUgZ2hBTkdMRUxpYiA9IE5VTEw7Ci0gICAgCisKICAgICBpZiAoTlVMTCA9PSBnaEFOR0xFTGliKSB7CiAgICAgICAgIC8vIFdlIGxvYWQgdGhlIEFOR0xFIGxpYnJhcnkgYW5kIG5ldmVyIGxldCBpdCBnbwogICAgICAgICBnaEFOR0xFTGliID0gTG9hZExpYnJhcnkoImxpYkdMRVN2Mi5kbGwiKTsKQEAgLTEwMSw4ICsxMDEsOCBAQAogI2lmIEdMX0FSQl90ZXh0dXJlX3N0b3JhZ2UKICAgICAgICAgR1JfR0VUX1BST0MoR3JHTFRleFN0b3JhZ2UyRFByb2MsICAgICAgIFRleFN0b3JhZ2UyRCk7CiAjZWxpZiBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlCi0gICAgICAgIGludGVyZmFjZS0+ZlRleFN0b3JhZ2UyRCA9IChHckdMVGV4U3RvcmFnZTJEUHJvYykgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGdoQU5HTEVMaWIsIAorICAgICAgICBpbnRlcmZhY2UtPmZUZXhTdG9yYWdlMkQgPSAoR3JHTFRleFN0b3JhZ2UyRFByb2MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGdoQU5HTEVMaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbFRleFN0b3JhZ2UyREVYVCIpOwogI2VuZGlmCiAgICAgICAgIEdSX0dFVF9QUk9DKEdyR0xVbmlmb3JtMWZQcm9jLCAgICAgICAgICBVbmlmb3JtMWYpOwpAQCAtMTQxLDkgKzE0MSw5IEBACiAgICAgICAgIEdSX0dFVF9QUk9DKEdyR0xGcmFtZWJ1ZmZlclRleHR1cmUyRFByb2MsIEZyYW1lYnVmZmVyVGV4dHVyZTJEKTsKICAgICAgICAgR1JfR0VUX1BST0MoR3JHTEdlbkZyYW1lYnVmZmVyc1Byb2MsICAgIEdlbkZyYW1lYnVmZmVycyk7CiAgICAgICAgIEdSX0dFVF9QUk9DKEdyR0xHZW5SZW5kZXJidWZmZXJzUHJvYywgICBHZW5SZW5kZXJidWZmZXJzKTsKLSAgICAgICAgR1JfR0VUX1BST0MoR3JHTEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2UHJvYywgCisgICAgICAgIEdSX0dFVF9QUk9DKEdyR0xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlByb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KTsKLSAgICAgICAgR1JfR0VUX1BST0MoR3JHTEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2UHJvYywgCisgICAgICAgIEdSX0dFVF9QUk9DKEdyR0xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlByb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KTsKICAgICAgICAgR1JfR0VUX1BST0MoR3JHTFJlbmRlcmJ1ZmZlclN0b3JhZ2VQcm9jLCBSZW5kZXJidWZmZXJTdG9yYWdlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9kZWJ1Zy9HckJ1ZmZlck9iai5oIGIvc3JjL2dwdS9nbC9kZWJ1Zy9HckJ1ZmZlck9iai5oCmluZGV4IGE3OGRhODMuLmZhYTIzOTggMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvZGVidWcvR3JCdWZmZXJPYmouaAorKysgYi9zcmMvZ3B1L2dsL2RlYnVnL0dyQnVmZmVyT2JqLmgKQEAgLTE3LDcgKzE3LDcgQEAKICAgICBHUl9ERUZJTkVfQ1JFQVRPUihHckJ1ZmZlck9iaik7CiAKIHB1YmxpYzoKLSAgICBHckJ1ZmZlck9iaigpIAorICAgIEdyQnVmZmVyT2JqKCkKICAgICAgICAgOiBHckZha2VSZWZPYmooKQogICAgICAgICAsIGZEYXRhUHRyKE5VTEwpCiAgICAgICAgICwgZk1hcHBlZChmYWxzZSkKQEAgLTU4LDggKzU4LDggQEAKICAgICBib29sICAgICAgICBmTWFwcGVkOyAgICAgICAvLyBpcyB0aGUgYnVmZmVyIG9iamVjdCBtYXBwZWQgdmlhICJnbE1hcEJ1ZmZlciI/CiAgICAgYm9vbCAgICAgICAgZkJvdW5kOyAgICAgICAgLy8gaXMgdGhlIGJ1ZmZlciBvYmplY3QgYm91bmQgdmlhICJnbEJpbmRCdWZmZXIiPwogICAgIEdyR0xpbnQgICAgIGZTaXplOyAgICAgICAgIC8vIHNpemUgaW4gYnl0ZXMKLSAgICBHckdMaW50ICAgICBmVXNhZ2U7ICAgICAgICAvLyBvbmUgb2Y6IEdMX1NUUkVBTV9EUkFXLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIEdMX1NUQVRJQ19EUkFXLCAKKyAgICBHckdMaW50ICAgICBmVXNhZ2U7ICAgICAgICAvLyBvbmUgb2Y6IEdMX1NUUkVBTV9EUkFXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgR0xfU1RBVElDX0RSQVcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBHTF9EWU5BTUlDX0RSQVcKIAogICAgIHR5cGVkZWYgR3JGYWtlUmVmT2JqIElOSEVSSVRFRDsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvZGVidWcvR3JEZWJ1Z0dMLmNwcCBiL3NyYy9ncHUvZ2wvZGVidWcvR3JEZWJ1Z0dMLmNwcAppbmRleCA2NTcwMDM5Li45ZTJlNTEwIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL2RlYnVnL0dyRGVidWdHTC5jcHAKKysrIGIvc3JjL2dwdS9nbC9kZWJ1Zy9HckRlYnVnR0wuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiB9OwogCiAKLUdyRGVidWdHTDo6R3JEZWJ1Z0dMKCkgCitHckRlYnVnR0w6OkdyRGVidWdHTCgpCiAgICAgOiBmUGFja1Jvd0xlbmd0aCgwKQogICAgICwgZlVuUGFja1Jvd0xlbmd0aCgwKQogICAgICwgZkN1clRleHR1cmVVbml0KDApCkBAIC03Niw3ICs3Niw3IEBACiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmT2JqZWN0cy5jb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYgKGZPYmplY3RzW2ldLT5nZXRJRCgpID09IElEKSB7IC8vICYmIGZPYmplY3RzW2ldLT5nZXRUeXBlKCkgPT0gdHlwZSkgewogICAgICAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIHNob3VsZG4ndCBiZSBhY2Nlc3Npbmcgb2JqZWN0cwotICAgICAgICAgICAgLy8gdGhhdCAoYXMgZmFyIGFzIE9wZW5HTCBrbm93cykgd2VyZSBhbHJlYWR5IGRlbGV0ZWQgCisgICAgICAgICAgICAvLyB0aGF0IChhcyBmYXIgYXMgT3BlbkdMIGtub3dzKSB3ZXJlIGFscmVhZHkgZGVsZXRlZAogICAgICAgICAgICAgR3JBbHdheXNBc3NlcnQoIWZPYmplY3RzW2ldLT5nZXREZWxldGVkKCkpOwogICAgICAgICAgICAgR3JBbHdheXNBc3NlcnQoIWZPYmplY3RzW2ldLT5nZXRNYXJrZWRGb3JEZWxldGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBmT2JqZWN0c1tpXTsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBHckRlYnVnR0w6OnNldEFycmF5QnVmZmVyKEdyQnVmZmVyT2JqICphcnJheUJ1ZmZlcikgeyAKK3ZvaWQgR3JEZWJ1Z0dMOjpzZXRBcnJheUJ1ZmZlcihHckJ1ZmZlck9iaiAqYXJyYXlCdWZmZXIpIHsKICAgICBpZiAoZkFycmF5QnVmZmVyKSB7CiAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgYnJlYWsgdGhlIGJpbmRpbmcgb2YgdGhlIG9sZCBidWZmZXIKICAgICAgICAgR3JBbHdheXNBc3NlcnQoZkFycmF5QnVmZmVyLT5nZXRCb3VuZCgpKTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgZkFycmF5QnVmZmVyLT51bnJlZigpOwogICAgIH0KIAotICAgIGZBcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyOyAKKyAgICBmQXJyYXlCdWZmZXIgPSBhcnJheUJ1ZmZlcjsKIAogICAgIGlmIChmQXJyYXlCdWZmZXIpIHsKICAgICAgICAgR3JBbHdheXNBc3NlcnQoIWZBcnJheUJ1ZmZlci0+Z2V0RGVsZXRlZCgpKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIH0KIH0KIAotdm9pZCBHckRlYnVnR0w6OnNldEVsZW1lbnRBcnJheUJ1ZmZlcihHckJ1ZmZlck9iaiAqZWxlbWVudEFycmF5QnVmZmVyKSB7IAordm9pZCBHckRlYnVnR0w6OnNldEVsZW1lbnRBcnJheUJ1ZmZlcihHckJ1ZmZlck9iaiAqZWxlbWVudEFycmF5QnVmZmVyKSB7CiAgICAgaWYgKGZFbGVtZW50QXJyYXlCdWZmZXIpIHsKICAgICAgICAgLy8gYXV0b21hdGljYWxseSBicmVhayB0aGUgYmluZGluZyBvZiB0aGUgb2xkIGJ1ZmZlcgogICAgICAgICBHckFsd2F5c0Fzc2VydChmRWxlbWVudEFycmF5QnVmZmVyLT5nZXRCb3VuZCgpKTsKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICBmRWxlbWVudEFycmF5QnVmZmVyLT51bnJlZigpOwogICAgIH0KIAotICAgIGZFbGVtZW50QXJyYXlCdWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXI7IAorICAgIGZFbGVtZW50QXJyYXlCdWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXI7CiAKICAgICBpZiAoZkVsZW1lbnRBcnJheUJ1ZmZlcikgewogICAgICAgICBHckFsd2F5c0Fzc2VydCghZkVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0RGVsZXRlZCgpKTsKQEAgLTEyOCwxMSArMTI4LDExIEBACiAgICAgfQogfQogCi12b2lkIEdyRGVidWdHTDo6c2V0VGV4dHVyZShHclRleHR1cmVPYmogKnRleHR1cmUpICB7IAordm9pZCBHckRlYnVnR0w6OnNldFRleHR1cmUoR3JUZXh0dXJlT2JqICp0ZXh0dXJlKSAgewogICAgIGZUZXh0dXJlVW5pdHNbZkN1clRleHR1cmVVbml0XS0+c2V0VGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHckRlYnVnR0w6OnNldEZyYW1lQnVmZmVyKEdyRnJhbWVCdWZmZXJPYmogKmZyYW1lQnVmZmVyKSAgeyAKK3ZvaWQgR3JEZWJ1Z0dMOjpzZXRGcmFtZUJ1ZmZlcihHckZyYW1lQnVmZmVyT2JqICpmcmFtZUJ1ZmZlcikgIHsKICAgICBpZiAoZkZyYW1lQnVmZmVyKSB7CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KGZGcmFtZUJ1ZmZlci0+Z2V0Qm91bmQoKSk7CiAgICAgICAgIGZGcmFtZUJ1ZmZlci0+cmVzZXRCb3VuZCgpOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIGZGcmFtZUJ1ZmZlci0+dW5yZWYoKTsKICAgICB9CiAKLSAgICBmRnJhbWVCdWZmZXIgPSBmcmFtZUJ1ZmZlcjsgCisgICAgZkZyYW1lQnVmZmVyID0gZnJhbWVCdWZmZXI7CiAKICAgICBpZiAoZkZyYW1lQnVmZmVyKSB7CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KCFmRnJhbWVCdWZmZXItPmdldERlbGV0ZWQoKSk7CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgR3JEZWJ1Z0dMOjpzZXRSZW5kZXJCdWZmZXIoR3JSZW5kZXJCdWZmZXJPYmogKnJlbmRlckJ1ZmZlcikgIHsgCit2b2lkIEdyRGVidWdHTDo6c2V0UmVuZGVyQnVmZmVyKEdyUmVuZGVyQnVmZmVyT2JqICpyZW5kZXJCdWZmZXIpICB7CiAgICAgaWYgKGZSZW5kZXJCdWZmZXIpIHsKICAgICAgICAgR3JBbHdheXNBc3NlcnQoZlJlbmRlckJ1ZmZlci0+Z2V0Qm91bmQoKSk7CiAgICAgICAgIGZSZW5kZXJCdWZmZXItPnJlc2V0Qm91bmQoKTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgICAgICBmUmVuZGVyQnVmZmVyLT51bnJlZigpOwogICAgIH0KIAotICAgIGZSZW5kZXJCdWZmZXIgPSByZW5kZXJCdWZmZXI7IAorICAgIGZSZW5kZXJCdWZmZXIgPSByZW5kZXJCdWZmZXI7CiAKICAgICBpZiAoZlJlbmRlckJ1ZmZlcikgewogICAgICAgICBHckFsd2F5c0Fzc2VydCghZlJlbmRlckJ1ZmZlci0+Z2V0RGVsZXRlZCgpKTsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvZGVidWcvR3JEZWJ1Z0dMLmggYi9zcmMvZ3B1L2dsL2RlYnVnL0dyRGVidWdHTC5oCmluZGV4IGQ2Njk3ZmQuLjQwOWYxM2QxIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL2RlYnVnL0dyRGVidWdHTC5oCisrKyBiL3NyYy9ncHUvZ2wvZGVidWcvR3JEZWJ1Z0dMLmgKQEAgLTczLDggKzczLDggQEAKIAogICAgIHZvaWQgdXNlUHJvZ3JhbShHclByb2dyYW1PYmogKnByb2dyYW0pOwogCi0gICAgdm9pZCBzZXRQYWNrUm93TGVuZ3RoKEdyR0xpbnQgcGFja1Jvd0xlbmd0aCkgeyAKLSAgICAgICAgZlBhY2tSb3dMZW5ndGggPSBwYWNrUm93TGVuZ3RoOyAKKyAgICB2b2lkIHNldFBhY2tSb3dMZW5ndGgoR3JHTGludCBwYWNrUm93TGVuZ3RoKSB7CisgICAgICAgIGZQYWNrUm93TGVuZ3RoID0gcGFja1Jvd0xlbmd0aDsKICAgICB9CiAgICAgR3JHTGludCBnZXRQYWNrUm93TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZlBhY2tSb3dMZW5ndGg7IH0KIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9kZWJ1Zy9HckZCQmluZGFibGVPYmouaCBiL3NyYy9ncHUvZ2wvZGVidWcvR3JGQkJpbmRhYmxlT2JqLmgKaW5kZXggMzhjODYzOC4uZTJiNDNhNiAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9kZWJ1Zy9HckZCQmluZGFibGVPYmouaAorKysgYi9zcmMvZ3B1L2dsL2RlYnVnL0dyRkJCaW5kYWJsZU9iai5oCkBAIC0xNyw3ICsxNyw3IEBACiBjbGFzcyBHckZCQmluZGFibGVPYmogOiBwdWJsaWMgR3JGYWtlUmVmT2JqIHsKIAogcHVibGljOgotICAgIEdyRkJCaW5kYWJsZU9iaigpIAorICAgIEdyRkJCaW5kYWJsZU9iaigpCiAgICAgICAgIDogR3JGYWtlUmVmT2JqKCkgewogICAgIH0KIApAQCAtMjcsNTEgKzI3LDUxIEBACiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KDAgPT0gZlN0ZW5jaWxSZWZlcmVlcy5jb3VudCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbG9yQm91bmQoR3JGYWtlUmVmT2JqICpyZWZlcmVlKSB7IAorICAgIHZvaWQgc2V0Q29sb3JCb3VuZChHckZha2VSZWZPYmogKnJlZmVyZWUpIHsKICAgICAgICAgZkNvbG9yUmVmZXJlZXMuYXBwZW5kKDEsICZyZWZlcmVlKTsKICAgICB9Ci0gICAgdm9pZCByZXNldENvbG9yQm91bmQoR3JGYWtlUmVmT2JqICpyZWZlcmVlKSB7IAorICAgIHZvaWQgcmVzZXRDb2xvckJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgewogICAgICAgICBpbnQgaW5kZXggPSBmQ29sb3JSZWZlcmVlcy5maW5kKHJlZmVyZWUpOwogICAgICAgICBHckFsd2F5c0Fzc2VydCgwIDw9IGluZGV4KTsKICAgICAgICAgZkNvbG9yUmVmZXJlZXMucmVtb3ZlU2h1ZmZsZShpbmRleCk7CiAgICAgfQotICAgIGJvb2wgZ2V0Q29sb3JCb3VuZChHckZha2VSZWZPYmogKnJlZmVyZWUpIGNvbnN0IHsgCisgICAgYm9vbCBnZXRDb2xvckJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgY29uc3QgewogICAgICAgICBpbnQgaW5kZXggPSBmQ29sb3JSZWZlcmVlcy5maW5kKHJlZmVyZWUpOwogICAgICAgICByZXR1cm4gMCA8PSBpbmRleDsKICAgICB9Ci0gICAgYm9vbCBnZXRDb2xvckJvdW5kKCkgY29uc3QgeyAKKyAgICBib29sIGdldENvbG9yQm91bmQoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAwICE9IGZDb2xvclJlZmVyZWVzLmNvdW50KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXREZXB0aEJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgeyAKKyAgICB2b2lkIHNldERlcHRoQm91bmQoR3JGYWtlUmVmT2JqICpyZWZlcmVlKSB7CiAgICAgICAgIGZEZXB0aFJlZmVyZWVzLmFwcGVuZCgxLCAmcmVmZXJlZSk7CiAgICAgfQotICAgIHZvaWQgcmVzZXREZXB0aEJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgeyAKKyAgICB2b2lkIHJlc2V0RGVwdGhCb3VuZChHckZha2VSZWZPYmogKnJlZmVyZWUpIHsKICAgICAgICAgaW50IGluZGV4ID0gZkRlcHRoUmVmZXJlZXMuZmluZChyZWZlcmVlKTsKICAgICAgICAgR3JBbHdheXNBc3NlcnQoMCA8PSBpbmRleCk7CiAgICAgICAgIGZEZXB0aFJlZmVyZWVzLnJlbW92ZVNodWZmbGUoaW5kZXgpOwogICAgIH0KLSAgICBib29sIGdldERlcHRoQm91bmQoR3JGYWtlUmVmT2JqICpyZWZlcmVlKSBjb25zdCB7IAorICAgIGJvb2wgZ2V0RGVwdGhCb3VuZChHckZha2VSZWZPYmogKnJlZmVyZWUpIGNvbnN0IHsKICAgICAgICAgaW50IGluZGV4ID0gZkRlcHRoUmVmZXJlZXMuZmluZChyZWZlcmVlKTsKICAgICAgICAgcmV0dXJuIDAgPD0gaW5kZXg7CiAgICAgfQotICAgIGJvb2wgZ2V0RGVwdGhCb3VuZCgpIGNvbnN0IHsgCisgICAgYm9vbCBnZXREZXB0aEJvdW5kKCkgY29uc3QgewogICAgICAgICByZXR1cm4gMCAhPSBmRGVwdGhSZWZlcmVlcy5jb3VudCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0U3RlbmNpbEJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgeyAKKyAgICB2b2lkIHNldFN0ZW5jaWxCb3VuZChHckZha2VSZWZPYmogKnJlZmVyZWUpIHsKICAgICAgICAgZlN0ZW5jaWxSZWZlcmVlcy5hcHBlbmQoMSwgJnJlZmVyZWUpOwogICAgIH0KLSAgICB2b2lkIHJlc2V0U3RlbmNpbEJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgeyAKKyAgICB2b2lkIHJlc2V0U3RlbmNpbEJvdW5kKEdyRmFrZVJlZk9iaiAqcmVmZXJlZSkgewogICAgICAgICBpbnQgaW5kZXggPSBmU3RlbmNpbFJlZmVyZWVzLmZpbmQocmVmZXJlZSk7CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KDAgPD0gaW5kZXgpOwogICAgICAgICBmU3RlbmNpbFJlZmVyZWVzLnJlbW92ZVNodWZmbGUoaW5kZXgpOwogICAgIH0KLSAgICBib29sIGdldFN0ZW5jaWxCb3VuZChHckZha2VSZWZPYmogKnJlZmVyZWUpIGNvbnN0IHsgCisgICAgYm9vbCBnZXRTdGVuY2lsQm91bmQoR3JGYWtlUmVmT2JqICpyZWZlcmVlKSBjb25zdCB7CiAgICAgICAgIGludCBpbmRleCA9IGZTdGVuY2lsUmVmZXJlZXMuZmluZChyZWZlcmVlKTsKICAgICAgICAgcmV0dXJuIDAgPD0gaW5kZXg7CiAgICAgfQotICAgIGJvb2wgZ2V0U3RlbmNpbEJvdW5kKCkgY29uc3QgeyAKKyAgICBib29sIGdldFN0ZW5jaWxCb3VuZCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIDAgIT0gZlN0ZW5jaWxSZWZlcmVlcy5jb3VudCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9kZWJ1Zy9HckZha2VSZWZPYmouaCBiL3NyYy9ncHUvZ2wvZGVidWcvR3JGYWtlUmVmT2JqLmgKaW5kZXggODFmYjkwYy4uN2YyMWM5NCAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9kZWJ1Zy9HckZha2VSZWZPYmouaAorKysgYi9zcmMvZ3B1L2dsL2RlYnVnL0dyRmFrZVJlZk9iai5oCkBAIC0xNCw0MSArMTQsNDEgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIFRoaXMgb2JqZWN0IGlzIHVzZWQgdG8gdHJhY2sgdGhlIE9wZW5HTCBvYmplY3RzLiBXZSBkb24ndCB1c2UgcmVhbAotLy8gcmVmZXJlbmNlIGNvdW50aW5nIChpLmUuLCB3ZSBkb24ndCBmcmVlIHRoZSBvYmplY3RzIHdoZW4gdGhlaXIgcmVmIGNvdW50IAorLy8gcmVmZXJlbmNlIGNvdW50aW5nIChpLmUuLCB3ZSBkb24ndCBmcmVlIHRoZSBvYmplY3RzIHdoZW4gdGhlaXIgcmVmIGNvdW50CiAvLyBnb2VzIHRvIDApIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlIHJlZnMgd2UKIC8vIGFyZSB0cmFja2luZyBpbiB0aGlzIGNsYXNzIGFyZSBhY3R1YWxseSBPcGVuR0wncyByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RzCiAvLyBub3QgIm91cnMiCiAvLyBFYWNoIG9iamVjdCBhbHNvIGdldHMgYSB1bmlxdWUgZ2xvYmFsbHkgaWRlbnRpZnlpbmcgSUQKIGNsYXNzIEdyRmFrZVJlZk9iaiA6IHB1YmxpYyBHck5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBHckZha2VSZWZPYmooKSAKKyAgICBHckZha2VSZWZPYmooKQogICAgICAgICA6IGZSZWYoMCkKICAgICAgICAgLCBmSGlnaFJlZkNvdW50KDApCiAgICAgICAgICwgZk1hcmtlZEZvckRlbGV0aW9uKGZhbHNlKQogICAgICAgICAsIGZEZWxldGVkKGZhbHNlKSB7CiAKICAgICAgICAgLy8gc291cmNlIGZvciBnbG9iYWxseSB1bmlxdWUgSURzIC0gMCBpcyByZXNlcnZlZCEKLSAgICAgICAgc3RhdGljIGludCBmTmV4dElEID0gMDsgIAorICAgICAgICBzdGF0aWMgaW50IGZOZXh0SUQgPSAwOwogCiAgICAgICAgIGZJRCA9ICsrZk5leHRJRDsKICAgICB9CiAgICAgdmlydHVhbCB+R3JGYWtlUmVmT2JqKCkge307CiAKLSAgICB2b2lkIHJlZigpIHsgCi0gICAgICAgIGZSZWYrKzsgCisgICAgdm9pZCByZWYoKSB7CisgICAgICAgIGZSZWYrKzsKICAgICAgICAgaWYgKGZIaWdoUmVmQ291bnQgPCBmUmVmKSB7CiAgICAgICAgICAgICBmSGlnaFJlZkNvdW50ID0gZlJlZjsKICAgICAgICAgfQogICAgIH0KLSAgICB2b2lkIHVucmVmKCkgeyAKLSAgICAgICAgZlJlZi0tOyAKKyAgICB2b2lkIHVucmVmKCkgeworICAgICAgICBmUmVmLS07CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KGZSZWYgPj0gMCk7CiAKLSAgICAgICAgLy8gb2Z0ZW4gaW4gT3BlbkdMIGEgZ2l2ZW4gb2JqZWN0IG1heSBzdGlsbCBiZSBpbiB1c2Ugd2hlbiB0aGUgCisgICAgICAgIC8vIG9mdGVuIGluIE9wZW5HTCBhIGdpdmVuIG9iamVjdCBtYXkgc3RpbGwgYmUgaW4gdXNlIHdoZW4gdGhlCiAgICAgICAgIC8vIGRlbGV0ZSBjYWxsIGlzIG1hZGUuIEluIHRoZXNlIGNhc2VzIHRoZSBvYmplY3QgaXMgbWFya2VkCiAgICAgICAgIC8vIGZvciBkZWxldGlvbiBhbmQgdGhlbiBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBpbiB1c2UKICAgICAgICAgaWYgKDAgPT0gZlJlZiAmJiBmTWFya2VkRm9yRGVsZXRpb24pIHsKLSAgICAgICAgICAgIHRoaXMtPmRlbGV0ZUFjdGlvbigpOyAKKyAgICAgICAgICAgIHRoaXMtPmRlbGV0ZUFjdGlvbigpOwogICAgICAgICB9CiAgICAgfQogICAgIGludCBnZXRSZWZDb3VudCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGZSZWY7IH0KZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvZGVidWcvR3JHTENyZWF0ZURlYnVnSW50ZXJmYWNlLmNwcCBiL3NyYy9ncHUvZ2wvZGVidWcvR3JHTENyZWF0ZURlYnVnSW50ZXJmYWNlLmNwcAppbmRleCAzZjU4Y2M2Li40YWZmMjAyIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL2RlYnVnL0dyR0xDcmVhdGVEZWJ1Z0ludGVyZmFjZS5jcHAKKysrIGIvc3JjL2dwdS9nbC9kZWJ1Zy9HckdMQ3JlYXRlRGVidWdJbnRlcmZhY2UuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xBY3RpdmVUZXh0dXJlKEdyR0xlbnVtIHRleHR1cmUpIHsKLSAgICAKKwogICAgIC8vIEdhbmVzaCBvZmZzZXRzIHRoZSB0ZXh0dXJlIHVuaXQgaW5kaWNlcwogICAgIHRleHR1cmUgLT0gR1JfR0xfVEVYVFVSRTA7CiAgICAgR3JBbHdheXNBc3NlcnQodGV4dHVyZSA8IEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0TWF4VGV4dHVyZVVuaXRzKCkpOwpAQCAtNDMsMTUgKzQzLDE1IEBACiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xBdHRhY2hTaGFkZXIoR3JHTHVpbnQgcHJvZ3JhbUlELCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEF0dGFjaFNoYWRlcihHckdMdWludCBwcm9ncmFtSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgc2hhZGVySUQpIHsKIAotICAgIEdyUHJvZ3JhbU9iaiAqcHJvZ3JhbSA9IEdSX0ZJTkQocHJvZ3JhbUlELCBHclByb2dyYW1PYmosIAorICAgIEdyUHJvZ3JhbU9iaiAqcHJvZ3JhbSA9IEdSX0ZJTkQocHJvZ3JhbUlELCBHclByb2dyYW1PYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtQcm9ncmFtX09ialR5cGVzKTsKICAgICBHckFsd2F5c0Fzc2VydChwcm9ncmFtKTsKIAotICAgIEdyU2hhZGVyT2JqICpzaGFkZXIgPSBHUl9GSU5EKHNoYWRlcklELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNoYWRlck9iaiwgCisgICAgR3JTaGFkZXJPYmogKnNoYWRlciA9IEdSX0ZJTkQoc2hhZGVySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JTaGFkZXJPYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JEZWJ1Z0dMOjprU2hhZGVyX09ialR5cGVzKTsKICAgICBHckFsd2F5c0Fzc2VydChzaGFkZXIpOwogCkBAIC02MSw1MSArNjEsNTEgQEAKIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJlZ2luUXVlcnkoR3JHTGVudW0gdGFyZ2V0LCBHckdMdWludCBpZCkgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kQXR0cmliTG9jYXRpb24oR3JHTHVpbnQgcHJvZ3JhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgaW5kZXgsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQmluZEF0dHJpYkxvY2F0aW9uKEdyR0x1aW50IHByb2dyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSkgewogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQmluZFRleHR1cmUoR3JHTGVudW0gdGFyZ2V0LCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJpbmRUZXh0dXJlKEdyR0xlbnVtIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0x1aW50IHRleHR1cmVJRCkgewogCiAgICAgLy8gd2UgZG9uJ3QgdXNlIGN1YmUgbWFwcwotICAgIEdyQWx3YXlzQXNzZXJ0KHRhcmdldCA9PSBHUl9HTF9URVhUVVJFXzJEKTsgCisgICAgR3JBbHdheXNBc3NlcnQodGFyZ2V0ID09IEdSX0dMX1RFWFRVUkVfMkQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfHwgdGFyZ2V0ID09IEdSX0dMX1RFWFRVUkVfQ1VCRV9NQVApOwogCiAgICAgLy8gYSB0ZXh0dXJlSUQgb2YgMCBpcyBhY2NlcHRhYmxlIC0gaXQgYmluZHMgdG8gdGhlIGRlZmF1bHQgdGV4dHVyZSB0YXJnZXQKLSAgICBHclRleHR1cmVPYmogKnRleHR1cmUgPSBHUl9GSU5EKHRleHR1cmVJRCwgR3JUZXh0dXJlT2JqLCAKKyAgICBHclRleHR1cmVPYmogKnRleHR1cmUgPSBHUl9GSU5EKHRleHR1cmVJRCwgR3JUZXh0dXJlT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JEZWJ1Z0dMOjprVGV4dHVyZV9PYmpUeXBlcyk7CiAKICAgICBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPnNldFRleHR1cmUodGV4dHVyZSk7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJsZW5kQ29sb3IoR3JHTGNsYW1wZiByZWQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMY2xhbXBmIGdyZWVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGNsYW1wZiBibHVlLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJsZW5kQ29sb3IoR3JHTGNsYW1wZiByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xjbGFtcGYgZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xjbGFtcGYgYmx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGNsYW1wZiBhbHBoYSkgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kRnJhZ0RhdGFMb2NhdGlvbihHckdMdWludCBwcm9ncmFtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0x1aW50IGNvbG9yTnVtYmVyLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJpbmRGcmFnRGF0YUxvY2F0aW9uKEdyR0x1aW50IHByb2dyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCBjb2xvck51bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0xjaGFyKiBuYW1lKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJsZW5kRnVuYyhHckdMZW51bSBzZmFjdG9yLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJsZW5kRnVuYyhHckdMZW51bSBzZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGRmYWN0b3IpIHsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJ1ZmZlckRhdGEoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpcHRyIHNpemUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMdm9pZCogZGF0YSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCdWZmZXJEYXRhKEdyR0xlbnVtIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpcHRyIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0x2b2lkKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB1c2FnZSkgewotICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX0FSUkFZX0JVRkZFUiA9PSB0YXJnZXQgfHwgCisgICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfQVJSQVlfQlVGRkVSID09IHRhcmdldCB8fAogICAgICAgICAgICAgICAgICAgIEdSX0dMX0VMRU1FTlRfQVJSQVlfQlVGRkVSID09IHRhcmdldCk7CiAgICAgR3JBbHdheXNBc3NlcnQoc2l6ZSA+PSAwKTsKLSAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9TVFJFQU1fRFJBVyA9PSB1c2FnZSB8fCAKLSAgICAgICAgICAgICAgICAgICBHUl9HTF9TVEFUSUNfRFJBVyA9PSB1c2FnZSB8fCAKKyAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9TVFJFQU1fRFJBVyA9PSB1c2FnZSB8fAorICAgICAgICAgICAgICAgICAgIEdSX0dMX1NUQVRJQ19EUkFXID09IHVzYWdlIHx8CiAgICAgICAgICAgICAgICAgICAgR1JfR0xfRFlOQU1JQ19EUkFXID09IHVzYWdlKTsKIAogICAgIEdyQnVmZmVyT2JqICpidWZmZXIgPSBOVUxMOwpAQCAtMTI4LDQwICsxMjgsNDAgQEAKICAgICBidWZmZXItPnNldFVzYWdlKHVzYWdlKTsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQnVmZmVyU3ViRGF0YShHckdMZW51bSB0YXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50cHRyIG9mZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaXB0ciBzaXplLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJ1ZmZlclN1YkRhdGEoR3JHTGVudW0gdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50cHRyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpcHRyIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0x2b2lkKiBkYXRhKSB7CiB9CiAKIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTENsZWFyKEdyR0xiaXRmaWVsZCBtYXNrKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTENsZWFyQ29sb3IoR3JHTGNsYW1wZiByZWQsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQ2xlYXJDb2xvcihHckdMY2xhbXBmIHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGNsYW1wZiBncmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGNsYW1wZiBibHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGNsYW1wZiBibHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMY2xhbXBmIGFscGhhKSB7CiB9CiAKIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTENsZWFyU3RlbmNpbChHckdMaW50IHMpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQ29sb3JNYXNrKEdyR0xib29sZWFuIHJlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGJvb2xlYW4gZ3JlZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xib29sZWFuIGJsdWUsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQ29sb3JNYXNrKEdyR0xib29sZWFuIHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMYm9vbGVhbiBncmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMYm9vbGVhbiBibHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xib29sZWFuIGFscGhhKSB7CiB9CiAKIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTENvbXBpbGVTaGFkZXIoR3JHTHVpbnQgc2hhZGVyKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTENvbXByZXNzZWRUZXhJbWFnZTJEKEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IGxldmVsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGludGVybmFsZm9ybWF0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgYm9yZGVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBpbWFnZVNpemUsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQ29tcHJlc3NlZFRleEltYWdlMkQoR3JHTGVudW0gdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGltYWdlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0x2b2lkKiBkYXRhKSB7CiB9CiAKQEAgLTE3NywyMSArMTc3LDIxIEBACiBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR3JHTHVpbnQgaW5kZXgpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRHJhd0FycmF5cyhHckdMZW51bSBtb2RlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBmaXJzdCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xEcmF3QXJyYXlzKEdyR0xlbnVtIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCkgewogfQogCiBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xEcmF3QnVmZmVyKEdyR0xlbnVtIG1vZGUpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRHJhd0J1ZmZlcnMoR3JHTHNpemVpIG4sIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRHJhd0J1ZmZlcnMoR3JHTHNpemVpIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMZW51bSogYnVmcykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xEcmF3RWxlbWVudHMoR3JHTGVudW0gbW9kZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTERyYXdFbGVtZW50cyhHckdMZW51bSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0x2b2lkKiBpbmRpY2VzKSB7CiB9CiAKQEAgLTIxOSw3ICsyMTksNyBAQAogR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMTGlua1Byb2dyYW0oR3JHTHVpbnQgcHJvZ3JhbSkgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xQaXhlbFN0b3JlaShHckdMZW51bSBwbmFtZSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xQaXhlbFN0b3JlaShHckdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgcGFyYW0pIHsKIAogICAgIHN3aXRjaCAocG5hbWUpIHsKQEAgLTI0MCwxOSArMjQwLDE5IEBACiAgICAgfQogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xRdWVyeUNvdW50ZXIoR3JHTHVpbnQgaWQsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMUXVlcnlDb3VudGVyKEdyR0x1aW50IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHRhcmdldCkgewogfQogCiBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xSZWFkQnVmZmVyKEdyR0xlbnVtIHNyYykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xSZWFkUGl4ZWxzKEdyR0xpbnQgeCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgeSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBmb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFJlYWRQaXhlbHMoR3JHTGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdm9pZCogcGl4ZWxzKSB7CiAKICAgICBHckdMaW50IHBpeGVsc0luUm93ID0gd2lkdGg7CkBAIC0yOTcsOCArMjk3LDggQEAKICAgICBpZiAoY29tcG9uZW50U2l6ZSA+PSBhbGlnbm1lbnQpIHsKICAgICAgICAgcm93U3RyaWRlID0gY29tcG9uZW50c1BlclBpeGVsICogcGl4ZWxzSW5Sb3c7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgZlRlbXAgPSAKLSAgICAgICAgICAgIHNrX2Zsb2F0X2NlaWwoY29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudHNQZXJQaXhlbCAqIHBpeGVsc0luUm93IC8gCisgICAgICAgIGZsb2F0IGZUZW1wID0KKyAgICAgICAgICAgIHNrX2Zsb2F0X2NlaWwoY29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudHNQZXJQaXhlbCAqIHBpeGVsc0luUm93IC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFsaWdubWVudCkpOwogICAgICAgICByb3dTdHJpZGUgPSBzdGF0aWNfY2FzdDxHckdMaW50PihhbGlnbm1lbnQgKiBmVGVtcCAvIGNvbXBvbmVudFNpemUpOwogICAgIH0KQEAgLTMxMCwyNTAgKzMxMCwyNTAgQEAKICAgICB9CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFNjaXNzb3IoR3JHTGludCB4LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHdpZHRoLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFNjaXNzb3IoR3JHTGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGhlaWdodCkgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xTaGFkZXJTb3VyY2UoR3JHTHVpbnQgc2hhZGVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgY291bnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBzdHIsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMU2hhZGVyU291cmNlKEdyR0x1aW50IHNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMaW50KiBsZW5ndGgpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMU3RlbmNpbEZ1bmMoR3JHTGVudW0gZnVuYywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHJlZiwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xTdGVuY2lsRnVuYyhHckdMZW51bSBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCByZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCBtYXNrKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFN0ZW5jaWxGdW5jU2VwYXJhdGUoR3JHTGVudW0gZmFjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGZ1bmMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHJlZiwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xTdGVuY2lsRnVuY1NlcGFyYXRlKEdyR0xlbnVtIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCBtYXNrKSB7CiB9CiAKIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFN0ZW5jaWxNYXNrKEdyR0x1aW50IG1hc2spIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMU3RlbmNpbE1hc2tTZXBhcmF0ZShHckdMZW51bSBmYWNlLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JHTGVudW0gZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgbWFzaykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xTdGVuY2lsT3AoR3JHTGVudW0gZmFpbCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gemZhaWwsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMU3RlbmNpbE9wKEdyR0xlbnVtIGZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gemZhaWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0genBhc3MpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMU3RlbmNpbE9wU2VwYXJhdGUoR3JHTGVudW0gZmFjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBmYWlsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHpmYWlsLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFN0ZW5jaWxPcFNlcGFyYXRlKEdyR0xlbnVtIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBmYWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gemZhaWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB6cGFzcykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xUZXhJbWFnZTJEKEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgbGV2ZWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IGludGVybmFsZm9ybWF0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHdpZHRoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGhlaWdodCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgYm9yZGVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gdHlwZSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xUZXhJbWFnZTJEKEdyR0xlbnVtIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMdm9pZCogcGl4ZWxzKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFRleFBhcmFtZXRlcmkoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcG5hbWUsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVGV4UGFyYW1ldGVyaShHckdMZW51bSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHBhcmFtKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFRleFBhcmFtZXRlcml2KEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBwbmFtZSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xUZXhQYXJhbWV0ZXJpdihHckdMZW51bSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0xpbnQqIHBhcmFtcykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xUZXhTdG9yYWdlMkQoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgbGV2ZWxzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBpbnRlcm5hbGZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHdpZHRoLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFRleFN0b3JhZ2UyRChHckdMZW51bSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGxldmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGhlaWdodCkgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xUZXhTdWJJbWFnZTJEKEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgbGV2ZWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHhvZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHlvZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgd2lkdGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gdHlwZSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xUZXhTdWJJbWFnZTJEKEdyR0xlbnVtIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB4b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMdm9pZCogcGl4ZWxzKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0xZihHckdMaW50IGxvY2F0aW9uLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0xZihHckdMaW50IGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xmbG9hdCB2MCkgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMWkoR3JHTGludCBsb2NhdGlvbiwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMWkoR3JHTGludCBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHYwKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0xZnYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMWZ2KEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGZsb2F0KiB2KSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0xaXYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMWl2KEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGludCogdikgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMmYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGZsb2F0IHYwLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0yZihHckdMaW50IGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xmbG9hdCB2MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZmxvYXQgdjEpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTJpKEdyR0xpbnQgbG9jYXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgdjAsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTJpKEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB2MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHYxKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0yZnYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMmZ2KEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGZsb2F0KiB2KSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0yaXYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtMml2KEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGludCogdikgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtM2YoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGZsb2F0IHYwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZmxvYXQgdjEsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTNmKEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGZsb2F0IHYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xmbG9hdCB2MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZmxvYXQgdjIpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTNpKEdyR0xpbnQgbG9jYXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgdjAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgdjEsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTNpKEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgdjIpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTNmdihHckdMaW50IGxvY2F0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0zZnYoR3JHTGludCBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMZmxvYXQqIHYpIHsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTNpdihHckdMaW50IGxvY2F0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm0zaXYoR3JHTGludCBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMaW50KiB2KSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm00ZihHckdMaW50IGxvY2F0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZmxvYXQgdjAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xmbG9hdCB2MSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGZsb2F0IHYyLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm00ZihHckdMaW50IGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xmbG9hdCB2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZmxvYXQgdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGZsb2F0IHYyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xmbG9hdCB2MykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtNGkoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB2MCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB2MSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB2MiwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtNGkoR3JHTGludCBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB2MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHYzKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm00ZnYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtNGZ2KEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGZsb2F0KiB2KSB7CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTRpdihHckdMaW50IGxvY2F0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybTRpdihHckdMaW50IGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGludCogdikgewogIH0KIAotIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm1NYXRyaXgyZnYoR3JHTGludCBsb2NhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgY291bnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGJvb2xlYW4gdHJhbnNwb3NlLCAKKyBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtTWF0cml4MmZ2KEdyR0xpbnQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMYm9vbGVhbiB0cmFuc3Bvc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckdMZmxvYXQqIHZhbHVlKSB7CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybU1hdHJpeDNmdihHckdMaW50IGxvY2F0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMYm9vbGVhbiB0cmFuc3Bvc2UsIAorIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVuaWZvcm1NYXRyaXgzZnYoR3JHTGludCBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xib29sZWFuIHRyYW5zcG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0xmbG9hdCogdmFsdWUpIHsKICB9CiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xVbmlmb3JtTWF0cml4NGZ2KEdyR0xpbnQgbG9jYXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xib29sZWFuIHRyYW5zcG9zZSwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVW5pZm9ybU1hdHJpeDRmdihHckdMaW50IGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGJvb2xlYW4gdHJhbnNwb3NlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGZsb2F0KiB2YWx1ZSkgewogIH0KIAogIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVzZVByb2dyYW0oR3JHTHVpbnQgcHJvZ3JhbUlEKSB7CiAKICAgICAgLy8gQSBwcm9ncmFtSUQgb2YgMCBpcyBsZWdhbAotICAgICBHclByb2dyYW1PYmogKnByb2dyYW0gPSBHUl9GSU5EKHByb2dyYW1JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JQcm9ncmFtT2JqLCAKKyAgICAgR3JQcm9ncmFtT2JqICpwcm9ncmFtID0gR1JfRklORChwcm9ncmFtSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JQcm9ncmFtT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyRGVidWdHTDo6a1Byb2dyYW1fT2JqVHlwZXMpOwogCiAgICAgIEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKICB9CiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xWZXJ0ZXhBdHRyaWI0ZnYoR3JHTHVpbnQgaW5keCwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVmVydGV4QXR0cmliNGZ2KEdyR0x1aW50IGluZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0xmbG9hdCogdmFsdWVzKSB7CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVmVydGV4QXR0cmliUG9pbnRlcihHckdMdWludCBpbmR4LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgc2l6ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xib29sZWFuIG5vcm1hbGl6ZWQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHN0cmlkZSwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMVmVydGV4QXR0cmliUG9pbnRlcihHckdMdWludCBpbmR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xib29sZWFuIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTHZvaWQqIHB0cikgewogIH0KIAotIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFZpZXdwb3J0KEdyR0xpbnQgeCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCB5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgd2lkdGgsIAorIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFZpZXdwb3J0KEdyR0xpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBoZWlnaHQpIHsKICB9CiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kRnJhbWVidWZmZXIoR3JHTGVudW0gdGFyZ2V0LCAKKyBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kRnJhbWVidWZmZXIoR3JHTGVudW0gdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCBmcmFtZUJ1ZmZlcklEKSB7CiAKICAgICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfRlJBTUVCVUZGRVIgPT0gdGFyZ2V0KTsKIAotICAgICAvLyBhIGZyYW1lQnVmZmVySUQgb2YgMCBpcyBhY2NlcHRhYmxlIC0gaXQgYmluZHMgdG8gdGhlIGRlZmF1bHQgCisgICAgIC8vIGEgZnJhbWVCdWZmZXJJRCBvZiAwIGlzIGFjY2VwdGFibGUgLSBpdCBiaW5kcyB0byB0aGUgZGVmYXVsdAogICAgICAvLyBmcmFtZSBidWZmZXIKLSAgICAgR3JGcmFtZUJ1ZmZlck9iaiAqZnJhbWVCdWZmZXIgPSBHUl9GSU5EKGZyYW1lQnVmZmVySUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JGcmFtZUJ1ZmZlck9iaiwgCisgICAgIEdyRnJhbWVCdWZmZXJPYmogKmZyYW1lQnVmZmVyID0gR1JfRklORChmcmFtZUJ1ZmZlcklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JGcmFtZUJ1ZmZlck9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyRGVidWdHTDo6a0ZyYW1lQnVmZmVyX09ialR5cGVzKTsKIAogICAgICBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPnNldEZyYW1lQnVmZmVyKGZyYW1lQnVmZmVyKTsKICB9CiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kUmVuZGVyYnVmZmVyKEdyR0xlbnVtIHRhcmdldCwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQmluZFJlbmRlcmJ1ZmZlcihHckdMZW51bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCByZW5kZXJCdWZmZXJJRCkgewogCiAgICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX1JFTkRFUkJVRkZFUiA9PSB0YXJnZXQpOwogCiAgICAgIC8vIGEgcmVuZGVyQnVmZmVySUQgb2YgMCBpcyBhY2NlcHRhYmxlIC0gaXQgdW5iaW5kcyB0aGUgYm91bmQgcmVuZGVyIGJ1ZmZlcgotICAgICBHclJlbmRlckJ1ZmZlck9iaiAqcmVuZGVyQnVmZmVyID0gR1JfRklORChyZW5kZXJCdWZmZXJJRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVuZGVyQnVmZmVyT2JqLCAKKyAgICAgR3JSZW5kZXJCdWZmZXJPYmogKnJlbmRlckJ1ZmZlciA9IEdSX0ZJTkQocmVuZGVyQnVmZmVySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVuZGVyQnVmZmVyT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtSZW5kZXJCdWZmZXJfT2JqVHlwZXMpOwogCiAgICAgIEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+c2V0UmVuZGVyQnVmZmVyKHJlbmRlckJ1ZmZlcik7CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRGVsZXRlVGV4dHVyZXMoR3JHTHNpemVpIG4sIAorIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTERlbGV0ZVRleHR1cmVzKEdyR0xzaXplaSBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0x1aW50KiB0ZXh0dXJlcykgewogCiAgICAgIC8vIGZpcnN0IHBvdGVudGlhbGx5IHVuYmluZCB0aGUgdGV4dHVyZQogICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgaW50byBHckRlYnVnR0wgYXMgdW5CaW5kVGV4dHVyZT8KLSAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IAotICAgICAgICAgIGkgPCBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldE1heFRleHR1cmVVbml0cygpOyAKKyAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7CisgICAgICAgICAgaSA8IEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0TWF4VGV4dHVyZVVuaXRzKCk7CiAgICAgICAgICAgKytpKSB7CiAgICAgICAgICBHclRleHR1cmVVbml0T2JqICpwVFUgPSBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldFRleHR1cmVVbml0KGkpOwogCkBAIC01NjksNyArNTY5LDcgQEAKICAgICAgfQogCiAgICAgIC8vIFRPRE86IGZ1c2UgdGhlIGZvbGxvd2luZyBibG9jayB3aXRoIERlbGV0ZVJlbmRlckJ1ZmZlcnM/Ci0gICAgIC8vIE9wZW4gR0wgd2lsbCByZW1vdmUgYSBkZWxldGVkIHJlbmRlciBidWZmZXIgZnJvbSB0aGUgYWN0aXZlIAorICAgICAvLyBPcGVuIEdMIHdpbGwgcmVtb3ZlIGEgZGVsZXRlZCByZW5kZXIgYnVmZmVyIGZyb20gdGhlIGFjdGl2ZQogICAgICAvLyBmcmFtZSBidWZmZXIgYnV0IG5vdCBmcm9tIGFueSBvdGhlciBmcmFtZSBidWZmZXIKICAgICAgaWYgKEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0RnJhbWVCdWZmZXIoKSkgewogCkBAIC01NzcsMTUgKzU3NywxNSBAQAogCiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogCi0gICAgICAgICAgICAgaWYgKE5VTEwgIT0gZnJhbWVCdWZmZXItPmdldENvbG9yKCkgJiYgCisgICAgICAgICAgICAgaWYgKE5VTEwgIT0gZnJhbWVCdWZmZXItPmdldENvbG9yKCkgJiYKICAgICAgICAgICAgICAgICAgdGV4dHVyZXNbaV0gPT0gZnJhbWVCdWZmZXItPmdldENvbG9yKCktPmdldElEKCkpIHsKICAgICAgICAgICAgICAgICAgZnJhbWVCdWZmZXItPnNldENvbG9yKE5VTEwpOwotICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgaWYgKE5VTEwgIT0gZnJhbWVCdWZmZXItPmdldERlcHRoKCkgJiYgCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGlmIChOVUxMICE9IGZyYW1lQnVmZmVyLT5nZXREZXB0aCgpICYmCiAgICAgICAgICAgICAgICAgIHRleHR1cmVzW2ldID09IGZyYW1lQnVmZmVyLT5nZXREZXB0aCgpLT5nZXRJRCgpKSB7CiAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLT5zZXREZXB0aChOVUxMKTsKICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgaWYgKE5VTEwgIT0gZnJhbWVCdWZmZXItPmdldFN0ZW5jaWwoKSAmJiAKKyAgICAgICAgICAgICBpZiAoTlVMTCAhPSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbCgpICYmCiAgICAgICAgICAgICAgICAgIHRleHR1cmVzW2ldID09IGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsKCktPmdldElEKCkpIHsKICAgICAgICAgICAgICAgICAgZnJhbWVCdWZmZXItPnNldFN0ZW5jaWwoTlVMTCk7CiAgICAgICAgICAgICAgfQpAQCAtNTk0LDggKzU5NCw4IEBACiAKICAgICAgLy8gdGhlbiBhY3R1YWxseSAiZGVsZXRlIiB0aGUgYnVmZmVycwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICAgR3JUZXh0dXJlT2JqICpidWZmZXIgPSBHUl9GSU5EKHRleHR1cmVzW2ldLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclRleHR1cmVPYmosIAorICAgICAgICAgR3JUZXh0dXJlT2JqICpidWZmZXIgPSBHUl9GSU5EKHRleHR1cmVzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyVGV4dHVyZU9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtUZXh0dXJlX09ialR5cGVzKTsKICAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KGJ1ZmZlcik7CiAKQEAgLTYxMCwxNCArNjEwLDE0IEBACiAgfQogCiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xEZWxldGVGcmFtZWJ1ZmZlcnMoR3JHTHNpemVpIG4sIAorIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTERlbGV0ZUZyYW1lYnVmZmVycyhHckdMc2l6ZWkgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTHVpbnQgKmZyYW1lQnVmZmVycykgewogCiAgICAgIC8vIGZpcnN0IHBvdGVudGlhbGx5IHVuYmluZCB0aGUgYnVmZmVycwogICAgICBpZiAoR3JEZWJ1Z0dMOjpnZXRJbnN0YW5jZSgpLT5nZXRGcmFtZUJ1ZmZlcigpKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogCi0gICAgICAgICAgICAgaWYgKGZyYW1lQnVmZmVyc1tpXSA9PSAKKyAgICAgICAgICAgICBpZiAoZnJhbWVCdWZmZXJzW2ldID09CiAgICAgICAgICAgICAgICAgIEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0RnJhbWVCdWZmZXIoKS0+Z2V0SUQoKSkgewogICAgICAgICAgICAgICAgICAvLyB0aGlzIElEIGlzIHRoZSBjdXJyZW50IGZyYW1lIGJ1ZmZlciAtIHJlYmluZCB0byB0aGUgZGVmYXVsdAogICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPnNldEZyYW1lQnVmZmVyKE5VTEwpOwpAQCAtNjI3LDggKzYyNyw4IEBACiAKICAgICAgLy8gdGhlbiBhY3R1YWxseSAiZGVsZXRlIiB0aGUgYnVmZmVycwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICAgR3JGcmFtZUJ1ZmZlck9iaiAqYnVmZmVyID0gR1JfRklORChmcmFtZUJ1ZmZlcnNbaV0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckZyYW1lQnVmZmVyT2JqLCAKKyAgICAgICAgIEdyRnJhbWVCdWZmZXJPYmogKmJ1ZmZlciA9IEdSX0ZJTkQoZnJhbWVCdWZmZXJzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckZyYW1lQnVmZmVyT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtGcmFtZUJ1ZmZlcl9PYmpUeXBlcyk7CiAgICAgICAgICBHckFsd2F5c0Fzc2VydChidWZmZXIpOwogCkBAIC02MzcsMTYgKzYzNywxNiBAQAogICAgICB9CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRGVsZXRlUmVuZGVyYnVmZmVycyhHckdMc2l6ZWkgbiwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRGVsZXRlUmVuZGVyYnVmZmVycyhHckdMc2l6ZWkgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyR0x1aW50ICpyZW5kZXJCdWZmZXJzKSB7CiAKICAgICAgLy8gZmlyc3QgcG90ZW50aWFsbHkgdW5iaW5kIHRoZSBidWZmZXJzCiAgICAgIGlmIChHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldFJlbmRlckJ1ZmZlcigpKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogCi0gICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcnNbaV0gPT0gCisgICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcnNbaV0gPT0KICAgICAgICAgICAgICAgICAgR3JEZWJ1Z0dMOjpnZXRJbnN0YW5jZSgpLT5nZXRSZW5kZXJCdWZmZXIoKS0+Z2V0SUQoKSkgewotICAgICAgICAgICAgICAgICAvLyB0aGlzIElEIGlzIHRoZSBjdXJyZW50IHJlbmRlciBidWZmZXIgLSBtYWtlIG5vIAorICAgICAgICAgICAgICAgICAvLyB0aGlzIElEIGlzIHRoZSBjdXJyZW50IHJlbmRlciBidWZmZXIgLSBtYWtlIG5vCiAgICAgICAgICAgICAgICAgIC8vIHJlbmRlciBidWZmZXIgYmUgYm91bmQKICAgICAgICAgICAgICAgICAgR3JEZWJ1Z0dMOjpnZXRJbnN0YW5jZSgpLT5zZXRSZW5kZXJCdWZmZXIoTlVMTCk7CiAgICAgICAgICAgICAgfQpAQCAtNjU0LDI0ICs2NTQsMjQgQEAKICAgICAgfQogCiAgICAgIC8vIFRPRE86IGZ1c2UgdGhlIGZvbGxvd2luZyBibG9jayB3aXRoIERlbGV0ZVRleHR1cmVzPwotICAgICAvLyBPcGVuIEdMIHdpbGwgcmVtb3ZlIGEgZGVsZXRlZCByZW5kZXIgYnVmZmVyIGZyb20gdGhlIGFjdGl2ZSBmcmFtZSAKKyAgICAgLy8gT3BlbiBHTCB3aWxsIHJlbW92ZSBhIGRlbGV0ZWQgcmVuZGVyIGJ1ZmZlciBmcm9tIHRoZSBhY3RpdmUgZnJhbWUKICAgICAgLy8gYnVmZmVyIGJ1dCBub3QgZnJvbSBhbnkgb3RoZXIgZnJhbWUgYnVmZmVyCiAgICAgIGlmIChHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldEZyYW1lQnVmZmVyKCkpIHsKIAotICAgICAgICAgR3JGcmFtZUJ1ZmZlck9iaiAqZnJhbWVCdWZmZXIgPSAKKyAgICAgICAgIEdyRnJhbWVCdWZmZXJPYmogKmZyYW1lQnVmZmVyID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldEZyYW1lQnVmZmVyKCk7CiAKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAKLSAgICAgICAgICAgICBpZiAoTlVMTCAhPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3IoKSAmJiAKKyAgICAgICAgICAgICBpZiAoTlVMTCAhPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3IoKSAmJgogICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXJzW2ldID09IGZyYW1lQnVmZmVyLT5nZXRDb2xvcigpLT5nZXRJRCgpKSB7CiAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLT5zZXRDb2xvcihOVUxMKTsKLSAgICAgICAgICAgICB9IAotICAgICAgICAgICAgIGlmIChOVUxMICE9IGZyYW1lQnVmZmVyLT5nZXREZXB0aCgpICYmIAorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBpZiAoTlVMTCAhPSBmcmFtZUJ1ZmZlci0+Z2V0RGVwdGgoKSAmJgogICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXJzW2ldID09IGZyYW1lQnVmZmVyLT5nZXREZXB0aCgpLT5nZXRJRCgpKSB7CiAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLT5zZXREZXB0aChOVUxMKTsKICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgaWYgKE5VTEwgIT0gZnJhbWVCdWZmZXItPmdldFN0ZW5jaWwoKSAmJiAKKyAgICAgICAgICAgICBpZiAoTlVMTCAhPSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbCgpICYmCiAgICAgICAgICAgICAgICAgIHJlbmRlckJ1ZmZlcnNbaV0gPT0gZnJhbWVCdWZmZXItPmdldFN0ZW5jaWwoKS0+Z2V0SUQoKSkgewogICAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci0+c2V0U3RlbmNpbChOVUxMKTsKICAgICAgICAgICAgICB9CkBAIC02ODAsMTMgKzY4MCwxMyBAQAogCiAgICAgIC8vIHRoZW4gYWN0dWFsbHkgImRlbGV0ZSIgdGhlIGJ1ZmZlcnMKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgIEdyUmVuZGVyQnVmZmVyT2JqICpidWZmZXIgPSBHUl9GSU5EKHJlbmRlckJ1ZmZlcnNbaV0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JSZW5kZXJCdWZmZXJPYmosIAorICAgICAgICAgR3JSZW5kZXJCdWZmZXJPYmogKmJ1ZmZlciA9IEdSX0ZJTkQocmVuZGVyQnVmZmVyc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVuZGVyQnVmZmVyT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JEZWJ1Z0dMOjprUmVuZGVyQnVmZmVyX09ialR5cGVzKTsKICAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KGJ1ZmZlcik7CiAKLSAgICAgICAgIC8vIE9wZW5HTCBnaXZlcyBubyBndWFyYW50ZWVzIGlmIGEgcmVuZGVyIGJ1ZmZlciBpcyBkZWxldGVkIAotICAgICAgICAgLy8gd2hpbGUgYXR0YWNoZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGN1cnJlbnRseSAKKyAgICAgICAgIC8vIE9wZW5HTCBnaXZlcyBubyBndWFyYW50ZWVzIGlmIGEgcmVuZGVyIGJ1ZmZlciBpcyBkZWxldGVkCisgICAgICAgICAvLyB3aGlsZSBhdHRhY2hlZCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgY3VycmVudGx5CiAgICAgICAgICAvLyBib3VuZCBmcmFtZSBidWZmZXIKICAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KCFidWZmZXItPmdldENvbG9yQm91bmQoKSk7CiAgICAgICAgICBHckFsd2F5c0Fzc2VydCghYnVmZmVyLT5nZXREZXB0aEJvdW5kKCkpOwpAQCAtNjk3LDE0ICs2OTcsMTQgQEAKICAgICAgfQogIH0KIAotIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gYXR0YWNobWVudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCAKKyBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHckdMZW51bSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gYXR0YWNobWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgcmVuZGVyQnVmZmVySUQpIHsKIAogICAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9GUkFNRUJVRkZFUiA9PSB0YXJnZXQpOwotICAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9DT0xPUl9BVFRBQ0hNRU5UMCA9PSBhdHRhY2htZW50IHx8IAotICAgICAgICAgICAgICAgICAgICBHUl9HTF9ERVBUSF9BVFRBQ0hNRU5UID09IGF0dGFjaG1lbnQgfHwgCisgICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX0NPTE9SX0FUVEFDSE1FTlQwID09IGF0dGFjaG1lbnQgfHwKKyAgICAgICAgICAgICAgICAgICAgR1JfR0xfREVQVEhfQVRUQUNITUVOVCA9PSBhdHRhY2htZW50IHx8CiAgICAgICAgICAgICAgICAgICAgIEdSX0dMX1NURU5DSUxfQVRUQUNITUVOVCA9PSBhdHRhY2htZW50KTsKICAgICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfUkVOREVSQlVGRkVSID09IHJlbmRlcmJ1ZmZlcnRhcmdldCk7CiAKQEAgLTcxMiwxMCArNzEyLDEwIEBACiAgICAgIC8vIEEgcmVuZGVyIGJ1ZmZlciBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIKICAgICAgR3JBbHdheXNBc3NlcnQoTlVMTCAhPSBmcmFtZWJ1ZmZlcik7CiAKLSAgICAgLy8gYSByZW5kZXJCdWZmZXJJRCBvZiAwIGlzIGFjY2VwdGFibGUgLSBpdCB1bmJpbmRzIHRoZSBjdXJyZW50IAorICAgICAvLyBhIHJlbmRlckJ1ZmZlcklEIG9mIDAgaXMgYWNjZXB0YWJsZSAtIGl0IHVuYmluZHMgdGhlIGN1cnJlbnQKICAgICAgLy8gcmVuZGVyIGJ1ZmZlcgotICAgICBHclJlbmRlckJ1ZmZlck9iaiAqcmVuZGVyYnVmZmVyID0gR1JfRklORChyZW5kZXJCdWZmZXJJRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVuZGVyQnVmZmVyT2JqLCAKKyAgICAgR3JSZW5kZXJCdWZmZXJPYmogKnJlbmRlcmJ1ZmZlciA9IEdSX0ZJTkQocmVuZGVyQnVmZmVySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUmVuZGVyQnVmZmVyT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtSZW5kZXJCdWZmZXJfT2JqVHlwZXMpOwogCiAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtNzM2LDE1ICs3MzYsMTUgQEAKICB9CiAKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gYXR0YWNobWVudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gdGV4dGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCB0ZXh0dXJlSUQsIAorIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyR0xlbnVtIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBhdHRhY2htZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHRleHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCB0ZXh0dXJlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBsZXZlbCkgewogCiAgICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX0ZSQU1FQlVGRkVSID09IHRhcmdldCk7Ci0gICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX0NPTE9SX0FUVEFDSE1FTlQwID09IGF0dGFjaG1lbnQgfHwgCi0gICAgICAgICAgICAgICAgICAgIEdSX0dMX0RFUFRIX0FUVEFDSE1FTlQgPT0gYXR0YWNobWVudCB8fCAKKyAgICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfQ09MT1JfQVRUQUNITUVOVDAgPT0gYXR0YWNobWVudCB8fAorICAgICAgICAgICAgICAgICAgICBHUl9HTF9ERVBUSF9BVFRBQ0hNRU5UID09IGF0dGFjaG1lbnQgfHwKICAgICAgICAgICAgICAgICAgICAgR1JfR0xfU1RFTkNJTF9BVFRBQ0hNRU5UID09IGF0dGFjaG1lbnQpOwogICAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9URVhUVVJFXzJEID09IHRleHRhcmdldCk7CiAKQEAgLTc1MywxMCArNzUzLDEwIEBACiAgICAgIEdyQWx3YXlzQXNzZXJ0KE5VTEwgIT0gZnJhbWVidWZmZXIpOwogCiAgICAgIC8vIEEgdGV4dHVyZUlEIG9mIDAgaXMgYWxsb3dlZCAtIGl0IHVuYmluZHMgdGhlIGN1cnJlbnRseSBib3VuZCB0ZXh0dXJlCi0gICAgIEdyVGV4dHVyZU9iaiAqdGV4dHVyZSA9IEdSX0ZJTkQodGV4dHVyZUlELCBHclRleHR1cmVPYmosIAorICAgICBHclRleHR1cmVPYmogKnRleHR1cmUgPSBHUl9GSU5EKHRleHR1cmVJRCwgR3JUZXh0dXJlT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyRGVidWdHTDo6a1RleHR1cmVfT2JqVHlwZXMpOwogICAgICBpZiAodGV4dHVyZSkgewotICAgICAgICAgLy8gVGhlIHRleHR1cmUgc2hvdWxkbid0IGJlIGJvdW5kIHRvIGEgdGV4dHVyZSB1bml0IC0gdGhpcyAKKyAgICAgICAgIC8vIFRoZSB0ZXh0dXJlIHNob3VsZG4ndCBiZSBib3VuZCB0byBhIHRleHR1cmUgdW5pdCAtIHRoaXMKICAgICAgICAgIC8vIGNvdWxkIGxlYWQgdG8gYSBmZWVkYmFjayBsb29wCiAgICAgICAgICBHckFsd2F5c0Fzc2VydCghdGV4dHVyZS0+Z2V0Qm91bmQoKSk7CiAgICAgIH0KQEAgLTc3OSw0OCArNzc5LDQ4IEBACiAgICAgIH07CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBhdHRhY2htZW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBwbmFtZSwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR3JHTGVudW0gdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGF0dGFjaG1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCogcGFyYW1zKSB7CiAgfQogCi0gR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBwbmFtZSwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR3JHTGVudW0gdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQqIHBhcmFtcykgewogIH0KIAotIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGludGVybmFsZm9ybWF0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMUmVuZGVyYnVmZmVyU3RvcmFnZShHckdMZW51bSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBoZWlnaHQpIHsKICB9CiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHNhbXBsZXMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBpbnRlcm5hbGZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSB3aWR0aCwgCisgR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyR0xlbnVtIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIHNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBoZWlnaHQpIHsKICB9CiAKLSBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCbGl0RnJhbWVidWZmZXIoR3JHTGludCBzcmNYMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgc3JjWTAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IHNyY1gxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgZHN0WDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgZHN0WTAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgZHN0WDEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgZHN0WTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xiaXRmaWVsZCBtYXNrLCAKKyBHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCbGl0RnJhbWVidWZmZXIoR3JHTGludCBzcmNYMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBzcmNZMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBzcmNYMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBzcmNZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBkc3RYMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IGRzdFkwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQgZHN0WDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMYml0ZmllbGQgbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBmaWx0ZXIpIHsKIH0KIAogR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXIoKSB7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEJpbmRGcmFnRGF0YUxvY2F0aW9uSW5kZXhlZChHckdMdWludCBwcm9ncmFtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCBjb2xvck51bWJlciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgaW5kZXgsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMQmluZEZyYWdEYXRhTG9jYXRpb25JbmRleGVkKEdyR0x1aW50IHByb2dyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgY29sb3JOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTGNoYXIgKiBuYW1lKSB7CiB9CiAKQEAgLTgzMywxNSArODMzLDE1IEBACiAKIEdyR0x1aW50IEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTENyZWF0ZVByb2dyYW0oKSB7CiAKLSAgICBHclByb2dyYW1PYmogKnByb2dyYW0gPSBHUl9DUkVBVEUoR3JQcm9ncmFtT2JqLCAKKyAgICBHclByb2dyYW1PYmogKnByb2dyYW0gPSBHUl9DUkVBVEUoR3JQcm9ncmFtT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtQcm9ncmFtX09ialR5cGVzKTsKIAogICAgIHJldHVybiBwcm9ncmFtLT5nZXRJRCgpOwogfQogCiBHckdMdWludCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xDcmVhdGVTaGFkZXIoR3JHTGVudW0gdHlwZSkgewotICAgIAotICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX1ZFUlRFWF9TSEFERVIgPT0gdHlwZSB8fCAKKworICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX1ZFUlRFWF9TSEFERVIgPT0gdHlwZSB8fAogICAgICAgICAgICAgICAgICAgIEdSX0dMX0ZSQUdNRU5UX1NIQURFUiA9PSB0eXBlKTsKIAogICAgIEdyU2hhZGVyT2JqICpzaGFkZXIgPSBHUl9DUkVBVEUoR3JTaGFkZXJPYmosIEdyRGVidWdHTDo6a1NoYWRlcl9PYmpUeXBlcyk7CkBAIC04NTIsOCArODUyLDggQEAKIAogR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRGVsZXRlUHJvZ3JhbShHckdMdWludCBwcm9ncmFtSUQpIHsKIAotICAgIEdyUHJvZ3JhbU9iaiAqcHJvZ3JhbSA9IEdSX0ZJTkQocHJvZ3JhbUlELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyUHJvZ3JhbU9iaiwgCisgICAgR3JQcm9ncmFtT2JqICpwcm9ncmFtID0gR1JfRklORChwcm9ncmFtSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclByb2dyYW1PYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtQcm9ncmFtX09ialR5cGVzKTsKICAgICBHckFsd2F5c0Fzc2VydChwcm9ncmFtKTsKIApAQCAtODY3LDggKzg2Nyw4IEBACiAKIEdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTERlbGV0ZVNoYWRlcihHckdMdWludCBzaGFkZXJJRCkgewogCi0gICAgR3JTaGFkZXJPYmogKnNoYWRlciA9IEdSX0ZJTkQoc2hhZGVySUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyU2hhZGVyT2JqLCAKKyAgICBHclNoYWRlck9iaiAqc2hhZGVyID0gR1JfRklORChzaGFkZXJJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNoYWRlck9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmtTaGFkZXJfT2JqVHlwZXMpOwogICAgIEdyQWx3YXlzQXNzZXJ0KHNoYWRlcik7CiAKQEAgLTg4OCw4ICs4ODgsOCBAQAogICAgIH0KIH0KIAotR3JHTHZvaWQgZGVidWdHZW5PYmpzKEdyRGVidWdHTDo6R3JPYmpUeXBlcyB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkgbiwgCitHckdMdm9pZCBkZWJ1Z0dlbk9ianMoR3JEZWJ1Z0dMOjpHck9ialR5cGVzIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIG4sCiAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQqIGlkcykgewogCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewpAQCAtOTA0LDEzICs5MDQsMTMgQEAKICAgICBkZWJ1Z0dlbk9ianMoR3JEZWJ1Z0dMOjprQnVmZmVyX09ialR5cGVzLCBuLCBpZHMpOwogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZW5GcmFtZWJ1ZmZlcnMoR3JHTHNpemVpIG4sIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2VuRnJhbWVidWZmZXJzKEdyR0xzaXplaSBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0x1aW50KiBpZHMpIHsKIAogICAgIGRlYnVnR2VuT2JqcyhHckRlYnVnR0w6OmtGcmFtZUJ1ZmZlcl9PYmpUeXBlcywgbiwgaWRzKTsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2VuUmVuZGVyYnVmZmVycyhHckdMc2l6ZWkgbiwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZW5SZW5kZXJidWZmZXJzKEdyR0xzaXplaSBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCogaWRzKSB7CiAKICAgICBkZWJ1Z0dlbk9ianMoR3JEZWJ1Z0dMOjprUmVuZGVyQnVmZmVyX09ialR5cGVzLCBuLCBpZHMpOwpAQCAtOTIxLDIwICs5MjEsMjAgQEAKICAgICBkZWJ1Z0dlbk9ianMoR3JEZWJ1Z0dMOjprVGV4dHVyZV9PYmpUeXBlcywgbiwgaWRzKTsKIH0KIAotLy8gc2FtZSBkZWxldGUgZnVuY3Rpb24gZm9yIGFsbCBnbERlbGV0ZSooR0xzaXplIGksIGNvbnN0IEdMdWludCopIGV4Y2VwdCAKKy8vIHNhbWUgZGVsZXRlIGZ1bmN0aW9uIGZvciBhbGwgZ2xEZWxldGUqKEdMc2l6ZSBpLCBjb25zdCBHTHVpbnQqKSBleGNlcHQKIC8vIGJ1ZmZlcnMKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTERlbGV0ZUlkcyhHckdMc2l6ZWkgbiwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xEZWxldGVJZHMoR3JHTHNpemVpIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTHVpbnQqIGlkcykgewogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kQnVmZmVyKEdyR0xlbnVtIHRhcmdldCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xCaW5kQnVmZmVyKEdyR0xlbnVtIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHVpbnQgYnVmZmVySUQpIHsKIAotICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX0FSUkFZX0JVRkZFUiA9PSB0YXJnZXQgfHwgCisgICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfQVJSQVlfQlVGRkVSID09IHRhcmdldCB8fAogICAgICAgICAgICAgICAgICAgIEdSX0dMX0VMRU1FTlRfQVJSQVlfQlVGRkVSID09IHRhcmdldCk7CiAKLSAgICBHckJ1ZmZlck9iaiAqYnVmZmVyID0gR1JfRklORChidWZmZXJJRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JCdWZmZXJPYmosIAorICAgIEdyQnVmZmVyT2JqICpidWZmZXIgPSBHUl9GSU5EKGJ1ZmZlcklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyQnVmZmVyT2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyRGVidWdHTDo6a0J1ZmZlcl9PYmpUeXBlcyk7CiAgICAgLy8gMCBpcyBhIHBlcm1pc3NhYmxlIGJ1ZmZlcklEIC0gaXQgdW5iaW5kcyB0aGUgY3VycmVudCBidWZmZXIKIApAQCAtOTUyLDE4ICs5NTIsMTggQEAKIH0KIAogLy8gZGVsZXRpbmcgYSBib3VuZCBidWZmZXIgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBiaW5kaW5nIDAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTERlbGV0ZUJ1ZmZlcnMoR3JHTHNpemVpIG4sIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMRGVsZXRlQnVmZmVycyhHckdMc2l6ZWkgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JHTHVpbnQqIGlkcykgewogICAgIC8vIGZpcnN0IHBvdGVudGlhbGx5IHVuYmluZCB0aGUgYnVmZmVycwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAKLSAgICAgICAgaWYgKEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0QXJyYXlCdWZmZXIoKSAmJiAKKyAgICAgICAgaWYgKEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0QXJyYXlCdWZmZXIoKSAmJgogICAgICAgICAgICAgaWRzW2ldID09IEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0QXJyYXlCdWZmZXIoKS0+Z2V0SUQoKSkgewogICAgICAgICAgICAgLy8gdGhpcyBJRCBpcyB0aGUgY3VycmVudCBhcnJheSBidWZmZXIKICAgICAgICAgICAgIEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+c2V0QXJyYXlCdWZmZXIoTlVMTCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkgJiYgCi0gICAgICAgICAgICBpZHNbaV0gPT0gCisgICAgICAgIGlmIChHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpICYmCisgICAgICAgICAgICBpZHNbaV0gPT0KICAgICAgICAgICAgICAgICBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLT5nZXRJRCgpKSB7CiAgICAgICAgICAgICAvLyB0aGlzIElEIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQgYXJyYXkgYnVmZmVyCiAgICAgICAgICAgICBHckRlYnVnR0w6OmdldEluc3RhbmNlKCktPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihOVUxMKTsKQEAgLTk3Miw4ICs5NzIsOCBAQAogCiAgICAgLy8gdGhlbiBhY3R1YWxseSAiZGVsZXRlIiB0aGUgYnVmZmVycwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIEdyQnVmZmVyT2JqICpidWZmZXIgPSBHUl9GSU5EKGlkc1tpXSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyQnVmZmVyT2JqLCAKKyAgICAgICAgR3JCdWZmZXJPYmogKmJ1ZmZlciA9IEdSX0ZJTkQoaWRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckJ1ZmZlck9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JEZWJ1Z0dMOjprQnVmZmVyX09ialR5cGVzKTsKICAgICAgICAgR3JBbHdheXNBc3NlcnQoYnVmZmVyKTsKIApAQCAtOTgzLDEzICs5ODMsMTMgQEAKIH0KIAogLy8gbWFwIGEgYnVmZmVyIHRvIHRoZSBjYWxsZXIncyBhZGRyZXNzIHNwYWNlCi1HckdMdm9pZCogR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMTWFwQnVmZmVyKEdyR0xlbnVtIHRhcmdldCwgCitHckdMdm9pZCogR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMTWFwQnVmZmVyKEdyR0xlbnVtIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gYWNjZXNzKSB7CiAKLSAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9BUlJBWV9CVUZGRVIgPT0gdGFyZ2V0IHx8IAorICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX0FSUkFZX0JVRkZFUiA9PSB0YXJnZXQgfHwKICAgICAgICAgICAgICAgICAgICBHUl9HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiA9PSB0YXJnZXQpOwogICAgIC8vIEdSX0dMX1JFQURfT05MWSA9PSBhY2Nlc3MgfHwgIHx8IEdSX0dMX1JFQURfV1JJVCA9PSBhY2Nlc3MpOwotICAgIEdyQWx3YXlzQXNzZXJ0KEdSX0dMX1dSSVRFX09OTFkgPT0gYWNjZXNzKTsgCisgICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfV1JJVEVfT05MWSA9PSBhY2Nlc3MpOwogCiAgICAgR3JCdWZmZXJPYmogKmJ1ZmZlciA9IE5VTEw7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKQEAgLTEwMTUsMTAgKzEwMTUsMTAgQEAKIH0KIAogLy8gcmVtb3ZlIGEgYnVmZmVyIGZyb20gdGhlIGNhbGxlcidzIGFkZHJlc3Mgc3BhY2UKLS8vIFRPRE86IGNoZWNrIGlmIHRoZSAiYWNjZXNzIiBtZXRob2QgZnJvbSAiZ2xNYXBCdWZmZXIiIHdhcyBob25vcmVkIAorLy8gVE9ETzogY2hlY2sgaWYgdGhlICJhY2Nlc3MiIG1ldGhvZCBmcm9tICJnbE1hcEJ1ZmZlciIgd2FzIGhvbm9yZWQKIEdyR0xib29sZWFuIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTFVubWFwQnVmZmVyKEdyR0xlbnVtIHRhcmdldCkgewogCi0gICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfQVJSQVlfQlVGRkVSID09IHRhcmdldCB8fCAKKyAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9BUlJBWV9CVUZGRVIgPT0gdGFyZ2V0IHx8CiAgICAgICAgICAgICAgICAgICAgR1JfR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIgPT0gdGFyZ2V0KTsKIAogICAgIEdyQnVmZmVyT2JqICpidWZmZXIgPSBOVUxMOwpAQCAtMTA0NCwxMyArMTA0NCwxMyBAQAogICAgIHJldHVybiBHUl9HTF9GQUxTRTsgLy8gR1JfR0xfSU5WQUxJRF9PUEVSQVRJT047CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldEJ1ZmZlclBhcmFtZXRlcml2KEdyR0xlbnVtIHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB2YWx1ZSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRCdWZmZXJQYXJhbWV0ZXJpdihHckdMZW51bSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQqIHBhcmFtcykgewogCi0gICAgR3JBbHdheXNBc3NlcnQoR1JfR0xfQVJSQVlfQlVGRkVSID09IHRhcmdldCB8fCAKKyAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9BUlJBWV9CVUZGRVIgPT0gdGFyZ2V0IHx8CiAgICAgICAgICAgICAgICAgICAgR1JfR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIgPT0gdGFyZ2V0KTsKLSAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9CVUZGRVJfU0laRSA9PSB2YWx1ZSB8fCAKKyAgICBHckFsd2F5c0Fzc2VydChHUl9HTF9CVUZGRVJfU0laRSA9PSB2YWx1ZSB8fAogICAgICAgICAgICAgICAgICAgIEdSX0dMX0JVRkZFUl9VU0FHRSA9PSB2YWx1ZSk7CiAKICAgICBHckJ1ZmZlck9iaiAqYnVmZmVyID0gTlVMTDsKQEAgLTEwNjAsNyArMTA2MCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHUl9HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKICAgICAgICAgICAgIGJ1ZmZlciA9IEdyRGVidWdHTDo6Z2V0SW5zdGFuY2UoKS0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICBicmVhazsgIAorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgR3JBbHdheXNBc3NlcnQoYnVmZmVyKTsKQEAgLTEwOTEsNyArMTA5MSw3IEBACiAgICAgcmV0dXJuIEdSX0dMX05PX0VSUk9SOwogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRJbnRlZ2VydihHckdMZW51bSBwbmFtZSwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRJbnRlZ2VydihHckdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQqIHBhcmFtcykgewogICAgIC8vIFRPRE86IHJlbW92ZSBmcm9tIEdhbmVzaCB0aGUgI2RlZmluZXMgZm9yIGdldHMgd2UgZG9uJ3QgdXNlLgogICAgIC8vIFdlIHdvdWxkIGxpa2UgdG8gbWluaW1pemUgZ2V0cyBvdmVyYWxsIGR1ZSB0byBwZXJmb3JtYW5jZSBpc3N1ZXMKQEAgLTExNDgsOSArMTE0OCw5IEBACiAgICAgfQogfQogLy8gdXNlZCBmb3IgYm90aCB0aGUgcHJvZ3JhbSBhbmQgc2hhZGVyIGluZm8gbG9ncwotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0SW5mb0xvZyhHckdMdWludCBwcm9ncmFtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTHNpemVpIGJ1ZnNpemUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkqIGxlbmd0aCwgCitHckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRJbmZvTG9nKEdyR0x1aW50IHByb2dyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xzaXplaSBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMc2l6ZWkqIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaW5mb2xvZykgewogICAgIGlmIChsZW5ndGgpIHsKICAgICAgICAgKmxlbmd0aCA9IDA7CkBAIC0xMTYxLDggKzExNjEsOCBAQAogfQogCiAvLyB1c2VkIGZvciBib3RoIHRoZSBwcm9ncmFtIGFuZCBzaGFkZXIgcGFyYW1zCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRTaGFkZXJPclByb2dyYW1pdihHckdMdWludCBwcm9ncmFtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFNoYWRlck9yUHJvZ3JhbWl2KEdyR0x1aW50IHByb2dyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQqIHBhcmFtcykgewogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICAgICAgY2FzZSBHUl9HTF9MSU5LX1NUQVRVUzogIC8vIGZhbGx0aHJ1CkBAIC0xMTk2LDEwICsxMTk2LDEwIEBACiB9CiB9CiAKLS8vIFF1ZXJpZXMgb24gdGhlIG51bGwgR0wganVzdCBkb24ndCBkbyBhbnl0aGluZyBhdCBhbGwuIFdlIGNvdWxkIHBvdGVudGlhbGx5IAorLy8gUXVlcmllcyBvbiB0aGUgbnVsbCBHTCBqdXN0IGRvbid0IGRvIGFueXRoaW5nIGF0IGFsbC4gV2UgY291bGQgcG90ZW50aWFsbHkKIC8vIG1ha2UgdGhlIHRpbWVycyB3b3JrLgotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0UXVlcnlpdihHckdMZW51bSBHTHRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFF1ZXJ5aXYoR3JHTGVudW0gR0x0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50ICpwYXJhbXMpIHsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgICAgIGNhc2UgR1JfR0xfQ1VSUkVOVF9RVUVSWToKQEAgLTEyMTMsMjYgKzEyMTMsMjYgQEAKICAgICB9CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFF1ZXJ5T2JqZWN0aTY0dihHckdMdWludCBpZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcG5hbWUsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0UXVlcnlPYmplY3RpNjR2KEdyR0x1aW50IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xpbnQ2NCAqcGFyYW1zKSB7CiAgICAgcXVlcnlfcmVzdWx0KGlkLCBwbmFtZSwgcGFyYW1zKTsKIH0KIAotR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0UXVlcnlPYmplY3RpdihHckdMdWludCBpZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFF1ZXJ5T2JqZWN0aXYoR3JHTHVpbnQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50ICpwYXJhbXMpIHsKICAgICBxdWVyeV9yZXN1bHQoaWQsIHBuYW1lLCBwYXJhbXMpOwogfQogCi1HckdMdm9pZCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRRdWVyeU9iamVjdHVpNjR2KEdyR0x1aW50IGlkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcG5hbWUsIAorR3JHTHZvaWQgR1JfR0xfRlVOQ1RJT05fVFlQRSBkZWJ1Z0dMR2V0UXVlcnlPYmplY3R1aTY0dihHckdMdWludCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0x1aW50NjQgKnBhcmFtcykgewogICAgIHF1ZXJ5X3Jlc3VsdChpZCwgcG5hbWUsIHBhcmFtcyk7CiB9CiAKLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFF1ZXJ5T2JqZWN0dWl2KEdyR0x1aW50IGlkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFF1ZXJ5T2JqZWN0dWl2KEdyR0x1aW50IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGVudW0gcG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMdWludCAqcGFyYW1zKSB7CiAgICAgcXVlcnlfcmVzdWx0KGlkLCBwbmFtZSwgcGFyYW1zKTsKIH0KQEAgLTEyNTUsMTYgKzEyNTUsMTYgQEAKICAgICB9CiB9CiAKLS8vIHdlIHVzZWQgdG8gdXNlIHRoaXMgdG8gcXVlcnkgc3R1ZmYgYWJvdXQgZXh0ZXJuYWxseSBjcmVhdGVkIHRleHR1cmVzLCAKKy8vIHdlIHVzZWQgdG8gdXNlIHRoaXMgdG8gcXVlcnkgc3R1ZmYgYWJvdXQgZXh0ZXJuYWxseSBjcmVhdGVkIHRleHR1cmVzLAogLy8gbm93IHdlIGp1c3QgcmVxdWlyZSBjbGllbnRzIHRvIHRlbGwgdXMgZXZlcnl0aGluZyBhYm91dCB0aGUgdGV4dHVyZS4KLUdyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFRleExldmVsUGFyYW1ldGVyaXYoR3JHTGVudW0gdGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCBsZXZlbCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyR0xlbnVtIHBuYW1lLCAKK0dyR0x2b2lkIEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFRleExldmVsUGFyYW1ldGVyaXYoR3JHTGVudW0gdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JHTGludCogcGFyYW1zKSB7CiAgICAgR3JDcmFzaCgiU2hvdWxkIG5ldmVyIHF1ZXJ5IHRleHR1cmUgcGFyYW1ldGVycy4iKTsKIH0KIAotR3JHTGludCBHUl9HTF9GVU5DVElPTl9UWVBFIGRlYnVnR0xHZXRVbmlmb3JtTG9jYXRpb24oR3JHTHVpbnQgcHJvZ3JhbSwgCitHckdMaW50IEdSX0dMX0ZVTkNUSU9OX1RZUEUgZGVidWdHTEdldFVuaWZvcm1Mb2NhdGlvbihHckdMdWludCBwcm9ncmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSkgewogICAgIHN0YXRpYyBpbnQgZ1VuaUxvY2F0aW9uID0gMDsKICAgICByZXR1cm4gKytnVW5pTG9jYXRpb247CkBAIC0xMjk1LDI1ICsxMjk1LDI1IEBACiAgICAgLy8gZGVidWcgaW50ZXJmYWNlOgogICAgIC8vICAgICAgU2luY2Ugbm9uZSBvZiB0aGUgImdsIiBtZXRob2RzIGFyZSBtZW1iZXIgZnVuY3Rpb25zIHRoZXkgZG9uJ3QgZ2V0CiAgICAgLy8gICAgICBhICJ0aGlzIiBwb2ludGVyIHRocm91Z2ggd2hpY2ggdG8gYWNjZXNzICJmV3JhcHBlZCIKLSAgICAvLyAgICAgIFRoaXMgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSBoYXZpbmcgYWxsIG9mIHRoZW0gYWNjZXNzIHRoZSAKLSAgICAvLyAgICAgICJnbEludGVyZmFjZSIgcG9pbnRlciAtIGkuZS4sIHRyZWF0aW5nIHRoZSBkZWJ1ZyBpbnRlcmZhY2UgYXMgYSAKKyAgICAvLyAgICAgIFRoaXMgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSBoYXZpbmcgYWxsIG9mIHRoZW0gYWNjZXNzIHRoZQorICAgIC8vICAgICAgImdsSW50ZXJmYWNlIiBwb2ludGVyIC0gaS5lLiwgdHJlYXRpbmcgdGhlIGRlYnVnIGludGVyZmFjZSBhcyBhCiAgICAgLy8gICAgICB0cnVlIHNpbmdsZXRvbgogICAgIC8vCi0gICAgLy8gICAgICBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCB3ZSBhbHNvIHdhbnQgdG8gaGFuZGxlIE9wZW5HTCAKLSAgICAvLyAgICAgIGNvbnRleHRzLiBUaGUgbmF0dXJhbCB3YXkgdG8gZG8gdGhpcyBpcyB0byBoYXZlIG11bHRpcGxlIGRlYnVnIAotICAgIC8vICAgICAgaW50ZXJmYWNlcy4gRWFjaCBvZiB3aGljaCByZXByZXNlbnRzIGEgc2VwYXJhdGUgY29udGV4dC4gVGhlIAotICAgIC8vICAgICAgc3RhdGljIElEIGNvdW50IHdvdWxkIHN0aWxsIHVuaXF1aWZ5IElEcyBhY3Jvc3MgYWxsIG9mIHRoZW0uIAotICAgIC8vICAgICAgVGhlIHByb2JsZW0gdGhlbiBpcyB0aGF0IHdlIGNvdWxkbid0IHRyZWF0IHRoZSBkZWJ1ZyBHTCAKLSAgICAvLyAgICAgIGludGVyZmFjZSBhcyBhIHNpbmdsZXRvbiAoc2luY2UgdGhlcmUgd291bGQgYmUgb25lIGZvciBlYWNoIAorICAgIC8vICAgICAgVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgd2UgYWxzbyB3YW50IHRvIGhhbmRsZSBPcGVuR0wKKyAgICAvLyAgICAgIGNvbnRleHRzLiBUaGUgbmF0dXJhbCB3YXkgdG8gZG8gdGhpcyBpcyB0byBoYXZlIG11bHRpcGxlIGRlYnVnCisgICAgLy8gICAgICBpbnRlcmZhY2VzLiBFYWNoIG9mIHdoaWNoIHJlcHJlc2VudHMgYSBzZXBhcmF0ZSBjb250ZXh0LiBUaGUKKyAgICAvLyAgICAgIHN0YXRpYyBJRCBjb3VudCB3b3VsZCBzdGlsbCB1bmlxdWlmeSBJRHMgYWNyb3NzIGFsbCBvZiB0aGVtLgorICAgIC8vICAgICAgVGhlIHByb2JsZW0gdGhlbiBpcyB0aGF0IHdlIGNvdWxkbid0IHRyZWF0IHRoZSBkZWJ1ZyBHTAorICAgIC8vICAgICAgaW50ZXJmYWNlIGFzIGEgc2luZ2xldG9uIChzaW5jZSB0aGVyZSB3b3VsZCBiZSBvbmUgZm9yIGVhY2gKICAgICAvLyAgICAgIGNvbnRleHQpLgogICAgIC8vCi0gICAgLy8gICAgICBUaGUgc29sdXRpb24gdG8gdGhpcyBpcyBwcm9iYWJseSB0byBhbHRlciBTa0RlYnVnR2xDb250ZXh0J3MgCi0gICAgLy8gICAgICAibWFrZUN1cnJlbnQiIG1ldGhvZCB0byBtYWtlIGEgY2FsbCBsaWtlICJtYWtlQ3VycmVudCh0aGlzKSIgdG8gCi0gICAgLy8gICAgICB0aGUgZGVidWcgR0wgaW50ZXJmYWNlIChhc3N1bWluZyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNyZWF0ZSAKLSAgICAvLyAgICAgIG11bHRpcGxlIFNrR0xDb250ZXh0J3MpIHRvIGxldCBpdCBzd2l0Y2ggYmV0d2VlbiB0aGUgYWN0aXZlIAotICAgIC8vICAgICAgY29udGV4dC4gRXZlcnl0aGluZyBpbiB0aGUgR3JEZWJ1Z0dMIG9iamVjdCB3b3VsZCB0aGVuIG5lZWQgdG8gYmUgCi0gICAgLy8gICAgICBtb3ZlZCB0byBhIEdyQ29udGV4dE9iaiBhbmQgdGhlIEdyRGVidWdHTCBvYmplY3Qgd291bGQganVzdCBzd2l0Y2ggCi0gICAgLy8gICAgICBiZXR3ZWVuIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIHdvdWxkIGFsc28gcmVxdWlyZSB0aGF0IAorICAgIC8vICAgICAgVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgcHJvYmFibHkgdG8gYWx0ZXIgU2tEZWJ1Z0dsQ29udGV4dCdzCisgICAgLy8gICAgICAibWFrZUN1cnJlbnQiIG1ldGhvZCB0byBtYWtlIGEgY2FsbCBsaWtlICJtYWtlQ3VycmVudCh0aGlzKSIgdG8KKyAgICAvLyAgICAgIHRoZSBkZWJ1ZyBHTCBpbnRlcmZhY2UgKGFzc3VtaW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY3JlYXRlCisgICAgLy8gICAgICBtdWx0aXBsZSBTa0dMQ29udGV4dCdzKSB0byBsZXQgaXQgc3dpdGNoIGJldHdlZW4gdGhlIGFjdGl2ZQorICAgIC8vICAgICAgY29udGV4dC4gRXZlcnl0aGluZyBpbiB0aGUgR3JEZWJ1Z0dMIG9iamVjdCB3b3VsZCB0aGVuIG5lZWQgdG8gYmUKKyAgICAvLyAgICAgIG1vdmVkIHRvIGEgR3JDb250ZXh0T2JqIGFuZCB0aGUgR3JEZWJ1Z0dMIG9iamVjdCB3b3VsZCBqdXN0IHN3aXRjaAorICAgIC8vICAgICAgYmV0d2VlbiB0aGVtLiBOb3RlIHRoYXQgdGhpcyBhcHByb2FjaCB3b3VsZCBhbHNvIHJlcXVpcmUgdGhhdAogICAgIC8vICAgICAgU2tEZWJ1Z0dMQ29udGV4dCB3cmFwIGFuIGFyYml0cmFyeSBvdGhlciBjb250ZXh0CiAgICAgLy8gICAgICBhbmQgdGhlbiBwYXNzIHRoZSB3cmFwcGVkIGludGVyZmFjZSB0byB0aGUgZGVidWcgR0wgaW50ZXJmYWNlLgogCkBAIC0xNDM5LDE4ICsxNDM5LDE4IEBACiAgICAgaW50ZXJmYWNlLT5mRnJhbWVidWZmZXJUZXh0dXJlMkQgPSBkZWJ1Z0dMRnJhbWVidWZmZXJUZXh0dXJlMkQ7CiAgICAgaW50ZXJmYWNlLT5mR2VuRnJhbWVidWZmZXJzID0gZGVidWdHTEdlbkZyYW1lYnVmZmVyczsKICAgICBpbnRlcmZhY2UtPmZHZW5SZW5kZXJidWZmZXJzID0gZGVidWdHTEdlblJlbmRlcmJ1ZmZlcnM7Ci0gICAgaW50ZXJmYWNlLT5mR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYgPSAKKyAgICBpbnRlcmZhY2UtPmZHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0dMR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CiAgICAgaW50ZXJmYWNlLT5mR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgPSBkZWJ1Z0dMR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXY7CiAgICAgaW50ZXJmYWNlLT5mUmVuZGVyYnVmZmVyU3RvcmFnZSA9IGRlYnVnR0xSZW5kZXJidWZmZXJTdG9yYWdlOwotICAgIGludGVyZmFjZS0+ZlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSA9IAorICAgIGludGVyZmFjZS0+ZlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0dMUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlOwogICAgIGludGVyZmFjZS0+ZkJsaXRGcmFtZWJ1ZmZlciA9IGRlYnVnR0xCbGl0RnJhbWVidWZmZXI7Ci0gICAgaW50ZXJmYWNlLT5mUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXIgPSAKKyAgICBpbnRlcmZhY2UtPmZSZXNvbHZlTXVsdGlzYW1wbGVGcmFtZWJ1ZmZlciA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0dMUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXI7CiAgICAgaW50ZXJmYWNlLT5mTWFwQnVmZmVyID0gZGVidWdHTE1hcEJ1ZmZlcjsKICAgICBpbnRlcmZhY2UtPmZVbm1hcEJ1ZmZlciA9IGRlYnVnR0xVbm1hcEJ1ZmZlcjsKLSAgICBpbnRlcmZhY2UtPmZCaW5kRnJhZ0RhdGFMb2NhdGlvbkluZGV4ZWQgPSAKKyAgICBpbnRlcmZhY2UtPmZCaW5kRnJhZ0RhdGFMb2NhdGlvbkluZGV4ZWQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdHTEJpbmRGcmFnRGF0YUxvY2F0aW9uSW5kZXhlZDsKIAogICAgIHJldHVybiBpbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL2RlYnVnL0dyU2hhZGVyT2JqLmggYi9zcmMvZ3B1L2dsL2RlYnVnL0dyU2hhZGVyT2JqLmgKaW5kZXggMGUxMTIzNy4uMGI4ODhmYSAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9kZWJ1Zy9HclNoYWRlck9iai5oCisrKyBiL3NyYy9ncHUvZ2wvZGVidWcvR3JTaGFkZXJPYmouaApAQCAtMTcsNyArMTcsNyBAQAogICAgIEdSX0RFRklORV9DUkVBVE9SKEdyU2hhZGVyT2JqKTsKIAogcHVibGljOgotICAgIEdyU2hhZGVyT2JqKCkgCisgICAgR3JTaGFkZXJPYmooKQogICAgICAgICA6IEdyRmFrZVJlZk9iaigpCiAgICAgICAgICwgZlR5cGUoR1JfR0xfVkVSVEVYX1NIQURFUikgICAge30KIApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9kZWJ1Zy9HclRleHR1cmVPYmouaCBiL3NyYy9ncHUvZ2wvZGVidWcvR3JUZXh0dXJlT2JqLmgKaW5kZXggMDQ0M2FiNy4uNzY3M2NkMSAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9kZWJ1Zy9HclRleHR1cmVPYmouaAorKysgYi9zcmMvZ3B1L2dsL2RlYnVnL0dyVGV4dHVyZU9iai5oCkBAIC0xOCw3ICsxOCw3IEBACiAgICAgR1JfREVGSU5FX0NSRUFUT1IoR3JUZXh0dXJlT2JqKTsKIAogcHVibGljOgotICAgIEdyVGV4dHVyZU9iaigpIAorICAgIEdyVGV4dHVyZU9iaigpCiAgICAgICAgIDogR3JGQkJpbmRhYmxlT2JqKCkgewogICAgIH0KIApAQCAtMjYsMjAgKzI2LDIwIEBACiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KDAgPT0gZlRleHR1cmVVbml0UmVmZXJlZXMuY291bnQoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRCb3VuZChHclRleHR1cmVVbml0T2JqICpyZWZlcmVlKSB7IAorICAgIHZvaWQgc2V0Qm91bmQoR3JUZXh0dXJlVW5pdE9iaiAqcmVmZXJlZSkgewogICAgICAgICBmVGV4dHVyZVVuaXRSZWZlcmVlcy5hcHBlbmQoMSwgJnJlZmVyZWUpOwogICAgIH0KIAotICAgIHZvaWQgcmVzZXRCb3VuZChHclRleHR1cmVVbml0T2JqICpyZWZlcmVlKSB7IAorICAgIHZvaWQgcmVzZXRCb3VuZChHclRleHR1cmVVbml0T2JqICpyZWZlcmVlKSB7CiAgICAgICAgIGludCBpbmRleCA9IGZUZXh0dXJlVW5pdFJlZmVyZWVzLmZpbmQocmVmZXJlZSk7CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KDAgPD0gaW5kZXgpOwogICAgICAgICBmVGV4dHVyZVVuaXRSZWZlcmVlcy5yZW1vdmVTaHVmZmxlKGluZGV4KTsKICAgICB9Ci0gICAgYm9vbCBnZXRCb3VuZChHclRleHR1cmVVbml0T2JqICpyZWZlcmVlKSBjb25zdCB7IAorICAgIGJvb2wgZ2V0Qm91bmQoR3JUZXh0dXJlVW5pdE9iaiAqcmVmZXJlZSkgY29uc3QgewogICAgICAgICBpbnQgaW5kZXggPSBmVGV4dHVyZVVuaXRSZWZlcmVlcy5maW5kKHJlZmVyZWUpOwogICAgICAgICByZXR1cm4gMCA8PSBpbmRleDsKICAgICB9Ci0gICAgYm9vbCBnZXRCb3VuZCgpIGNvbnN0IHsgCisgICAgYm9vbCBnZXRCb3VuZCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIDAgIT0gZlRleHR1cmVVbml0UmVmZXJlZXMuY291bnQoKTsKICAgICB9CiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogcHJpdmF0ZToKICAgICAvLyB0ZXh0dXJlIHVuaXRzIHRoYXQgYmluZCB0aGlzIHRleHR1cmUgKHZpYSAiZ2xCaW5kVGV4dHVyZSIpCi0gICAgU2tUREFycmF5PEdyVGV4dHVyZVVuaXRPYmogKj4gZlRleHR1cmVVbml0UmVmZXJlZXM7ICAgCisgICAgU2tUREFycmF5PEdyVGV4dHVyZVVuaXRPYmogKj4gZlRleHR1cmVVbml0UmVmZXJlZXM7CiAKICAgICB0eXBlZGVmIEdyRkJCaW5kYWJsZU9iaiBJTkhFUklURUQ7CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9kZWJ1Zy9HclRleHR1cmVVbml0T2JqLmNwcCBiL3NyYy9ncHUvZ2wvZGVidWcvR3JUZXh0dXJlVW5pdE9iai5jcHAKaW5kZXggMDVjMTQ5YS4uYjdjN2IwYyAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9kZWJ1Zy9HclRleHR1cmVVbml0T2JqLmNwcAorKysgYi9zcmMvZ3B1L2dsL2RlYnVnL0dyVGV4dHVyZVVuaXRPYmouY3BwCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgIkdyVGV4dHVyZVVuaXRPYmouaCIKICNpbmNsdWRlICJHclRleHR1cmVPYmouaCIKIAotdm9pZCBHclRleHR1cmVVbml0T2JqOjpzZXRUZXh0dXJlKEdyVGV4dHVyZU9iaiAqdGV4dHVyZSkgIHsgCit2b2lkIEdyVGV4dHVyZVVuaXRPYmo6OnNldFRleHR1cmUoR3JUZXh0dXJlT2JqICp0ZXh0dXJlKSAgewogCiAgICAgaWYgKGZUZXh0dXJlKSB7CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KGZUZXh0dXJlLT5nZXRCb3VuZCh0aGlzKSk7CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgICAgIGZUZXh0dXJlLT51bnJlZigpOwogICAgIH0KIAotICAgIGZUZXh0dXJlID0gdGV4dHVyZTsgCisgICAgZlRleHR1cmUgPSB0ZXh0dXJlOwogCiAgICAgaWYgKGZUZXh0dXJlKSB7CiAgICAgICAgIEdyQWx3YXlzQXNzZXJ0KCFmVGV4dHVyZS0+Z2V0RGVsZXRlZCgpKTsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvbWFjL0dyR0xDcmVhdGVOYXRpdmVJbnRlcmZhY2VfbWFjLmNwcCBiL3NyYy9ncHUvZ2wvbWFjL0dyR0xDcmVhdGVOYXRpdmVJbnRlcmZhY2VfbWFjLmNwcAppbmRleCA0NzM1NjE3Li5lMGVjYzM4IDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL21hYy9HckdMQ3JlYXRlTmF0aXZlSW50ZXJmYWNlX21hYy5jcHAKKysrIGIvc3JjL2dwdS9nbC9tYWMvR3JHTENyZWF0ZU5hdGl2ZUludGVyZmFjZV9tYWMuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIEdFVF9QUk9DX1NVRkZJWChuYW1lLCBzdWZmaXgpIChpbnRlcmZhY2UtPmYgIyMgbmFtZSA9ICgoR3JHTCAjIyBuYW1lICMjIFByb2MpIEdldFByb2NBZGRyZXNzKCJnbCIgI25hbWUgI3N1ZmZpeCkpKQogCiBjb25zdCBHckdMSW50ZXJmYWNlKiBHckdMQ3JlYXRlTmF0aXZlSW50ZXJmYWNlKCkgewotICAgIC8vIFRoZSBnbCBmdW5jdGlvbnMgYXJlIG5vdCBjb250ZXh0LXNwZWNpZmljIHNvIHdlIGNyZWF0ZSBvbmUgZ2xvYmFsIAorICAgIC8vIFRoZSBnbCBmdW5jdGlvbnMgYXJlIG5vdCBjb250ZXh0LXNwZWNpZmljIHNvIHdlIGNyZWF0ZSBvbmUgZ2xvYmFsCiAgICAgLy8gaW50ZXJmYWNlCiAgICAgc3RhdGljIFNrQXV0b1RVbnJlZjxHckdMSW50ZXJmYWNlPiBnbEludGVyZmFjZTsKICAgICBpZiAoIWdsSW50ZXJmYWNlLmdldCgpKSB7CkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIGNvbnN0IGNoYXIqIHZlclN0ciA9IChjb25zdCBjaGFyKikgZ2xHZXRTdHJpbmcoR0xfVkVSU0lPTik7CiAgICAgICAgIEdyR0xWZXJzaW9uIHZlciA9IEdyR0xHZXRWZXJzaW9uRnJvbVN0cmluZyh2ZXJTdHIpOwogICAgICAgICBjb25zdCBjaGFyKiBleHRTdHIgPSAoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpOwotICAgICAgICAKKwogICAgICAgICBpbnRlcmZhY2UtPmZCaW5kaW5nc0V4cG9ydGVkID0ga0Rlc2t0b3BfR3JHTEJpbmRpbmc7CiAgICAgICAgIGludGVyZmFjZS0+ZkFjdGl2ZVRleHR1cmUgPSBnbEFjdGl2ZVRleHR1cmU7CiAgICAgICAgIGludGVyZmFjZS0+ZkF0dGFjaFNoYWRlciA9IGdsQXR0YWNoU2hhZGVyOwpAQCAtMTc4LDkgKzE3OCw5IEBACiAgICAgICAgICAgICAjZWxzZQogICAgICAgICAgICAgICAgIGludGVyZmFjZS0+ZkdldFF1ZXJ5T2JqZWN0aTY0diA9IEdFVF9QUk9DX1NVRkZJWChHZXRRdWVyeU9iamVjdGk2NHYsIEVYVCk7CiAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5mR2V0UXVlcnlPYmplY3R1aTY0diA9IEdFVF9QUk9DX1NVRkZJWChHZXRRdWVyeU9iamVjdHVpNjR2LCBFWFQpOwotICAgICAgICAgICAgI2VuZGlmICAgICAgICAgICAgCisgICAgICAgICAgICAjZW5kaWYKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKHZlciA+PSBHUl9HTF9WRVIoMywwKSB8fCBHckdMSGFzRXh0ZW5zaW9uRnJvbVN0cmluZygiR0xfQVJCX2ZyYW1lYnVmZmVyX29iamVjdCIsIGV4dFN0cikpIHsKICAgICAgICAgICAgIC8vIEFSQiBleHRlbnNpb24gZG9lc24ndCB1c2UgdGhlIEFSQiBzdWZmaXggb24gdGhlIGZ1bmN0aW9uIG5hbWVzCiAgICAgICAgICAgICAjaWYgR0xfVkVSU0lPTl8zXzAgfHwgR0xfQVJCX2ZyYW1lYnVmZmVyX29iamVjdApkaWZmIC0tZ2l0IGEvc3JjL2dwdS9nbC9tYWMvU2tOYXRpdmVHTENvbnRleHRfbWFjLmNwcCBiL3NyYy9ncHUvZ2wvbWFjL1NrTmF0aXZlR0xDb250ZXh0X21hYy5jcHAKaW5kZXggMmRjZjhhZS4uZjBjYjJiNiAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC9tYWMvU2tOYXRpdmVHTENvbnRleHRfbWFjLmNwcAorKysgYi9zcmMvZ3B1L2dsL21hYy9Ta05hdGl2ZUdMQ29udGV4dF9tYWMuY3BwCkBAIC0xNyw3ICsxNyw3IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotU2tOYXRpdmVHTENvbnRleHQ6OlNrTmF0aXZlR0xDb250ZXh0KCkgCitTa05hdGl2ZUdMQ29udGV4dDo6U2tOYXRpdmVHTENvbnRleHQoKQogICAgIDogZkNvbnRleHQoTlVMTCkgewogfQogCkBAIC01OCwxNCArNTgsMTQgQEAKICAgICBhZ2xEZXN0cm95UGl4ZWxGb3JtYXQoZm9ybWF0KTsKIAogICAgIGFnbFNldEN1cnJlbnRDb250ZXh0KGZDb250ZXh0KTsKLSAgICAKKwogICAgIGNvbnN0IEdyR0xJbnRlcmZhY2UqIGludGVyZmFjZSA9IEdyR0xDcmVhdGVOYXRpdmVJbnRlcmZhY2UoKTsKICAgICBpZiAoTlVMTCA9PSBpbnRlcmZhY2UpIHsKICAgICAgICAgU2tEZWJ1Z2YoIkNvbnRleHQgY291bGQgbm90IGNyZWF0ZSBHTCBpbnRlcmZhY2UuXG4iKTsKICAgICAgICAgdGhpcy0+ZGVzdHJveUdMQ29udGV4dCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gaW50ZXJmYWNlOwogfQogCmRpZmYgLS1naXQgYS9zcmMvZ3B1L2dsL21lc2EvU2tNZXNhR0xDb250ZXh0LmNwcCBiL3NyYy9ncHUvZ2wvbWVzYS9Ta01lc2FHTENvbnRleHQuY3BwCmluZGV4IGI3ZDIyMGMuLmNhYzAyMWMgMTAwNjQ0Ci0tLSBhL3NyYy9ncHUvZ2wvbWVzYS9Ta01lc2FHTENvbnRleHQuY3BwCisrKyBiL3NyYy9ncHUvZ2wvbWVzYS9Ta01lc2FHTENvbnRleHQuY3BwCkBAIC0xNiwxMyArMTYsMTMgQEAKICAgICBpZiAoTlVMTCAhPSAoT1NNZXNhQ29udGV4dClmT2xkQ29udGV4dCkgewogICAgICAgICBPU01lc2FHZXRDb2xvckJ1ZmZlcigoT1NNZXNhQ29udGV4dClmT2xkQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmT2xkV2lkdGgsICZmT2xkSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZPbGRGb3JtYXQsICZmT2xkSW1hZ2UpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmT2xkRm9ybWF0LCAmZk9sZEltYWdlKTsKICAgICB9CiB9CiAKIFNrTWVzYUdMQ29udGV4dDo6QXV0b0NvbnRleHRSZXN0b3JlOjp+QXV0b0NvbnRleHRSZXN0b3JlKCkgewogICAgIGlmIChOVUxMICE9IChPU01lc2FDb250ZXh0KWZPbGRDb250ZXh0KSB7Ci0gICAgICAgIE9TTWVzYU1ha2VDdXJyZW50KChPU01lc2FDb250ZXh0KWZPbGRDb250ZXh0LCBmT2xkSW1hZ2UsIAorICAgICAgICBPU01lc2FNYWtlQ3VycmVudCgoT1NNZXNhQ29udGV4dClmT2xkQ29udGV4dCwgZk9sZEltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmT2xkRm9ybWF0LCBmT2xkV2lkdGgsIGZPbGRIZWlnaHQpOwogICAgIH0KIH0KQEAgLTQzLDcgKzQzLDcgQEAKICAgICBpZiAoZkltYWdlKSB7CiAgICAgICAgIHNrX2ZyZWUoZkltYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoZkNvbnRleHQpIHsKICAgICAgICAgT1NNZXNhRGVzdHJveUNvbnRleHQoKE9TTWVzYUNvbnRleHQpZkNvbnRleHQpOwogICAgIH0KQEAgLTcyLDE4ICs3MiwxOCBAQAogICAgICAgICB0aGlzLT5kZXN0cm95R0xDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIC8vIEJpbmQgdGhlIGJ1ZmZlciB0byB0aGUgY29udGV4dCBhbmQgbWFrZSBpdCBjdXJyZW50Ci0gICAgaWYgKCFPU01lc2FNYWtlQ3VycmVudCgoT1NNZXNhQ29udGV4dClmQ29udGV4dCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmSW1hZ2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JfR0xfVU5TSUdORURfQllURSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnQk9HVVNfU0laRSwgCisgICAgaWYgKCFPU01lc2FNYWtlQ3VycmVudCgoT1NNZXNhQ29udGV4dClmQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSX0dMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnQk9HVVNfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdCT0dVU19TSVpFKSkgewogICAgICAgICBTa0RlYnVnZigiT1NNZXNhTWFrZUN1cnJlbnQgZmFpbGVkIVxuIik7CiAgICAgICAgIHRoaXMtPmRlc3Ryb3lHTENvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgR3JHTEludGVyZmFjZSogaW50ZXJmYWNlID0gR3JHTENyZWF0ZU1lc2FJbnRlcmZhY2UoKTsKICAgICBpZiAoIWludGVyZmFjZSkgewogICAgICAgICBTa0RlYnVnZigiQ291bGQgbm90IGNyZWF0ZSBHTCBpbnRlcmZhY2UhXG4iKTsKQEAgLTkxLDEyICs5MSwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIGludGVyZmFjZTsKLSAgICAKKwogfQogCiB2b2lkIFNrTWVzYUdMQ29udGV4dDo6bWFrZUN1cnJlbnQoKSBjb25zdCB7CiAgICAgaWYgKGZDb250ZXh0KSB7Ci0gICAgICAgIGlmICghT1NNZXNhTWFrZUN1cnJlbnQoKE9TTWVzYUNvbnRleHQpZkNvbnRleHQsIGZJbWFnZSwgCisgICAgICAgIGlmICghT1NNZXNhTWFrZUN1cnJlbnQoKE9TTWVzYUNvbnRleHQpZkNvbnRleHQsIGZJbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUl9HTF9VTlNJR05FRF9CWVRFLCBnQk9HVVNfU0laRSwgZ0JPR1VTX1NJWkUpKSB7CiAgICAgICAgICAgICBTa0RlYnVnZigiQ291bGQgbm90IG1ha2UgTUVTQSBjb250ZXh0IGN1cnJlbnQuIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvdW5peC9HckdMQ3JlYXRlTmF0aXZlSW50ZXJmYWNlX3VuaXguY3BwIGIvc3JjL2dwdS9nbC91bml4L0dyR0xDcmVhdGVOYXRpdmVJbnRlcmZhY2VfdW5peC5jcHAKaW5kZXggOWVkYzQyNS4uMDRkMzVkMSAxMDA2NDQKLS0tIGEvc3JjL2dwdS9nbC91bml4L0dyR0xDcmVhdGVOYXRpdmVJbnRlcmZhY2VfdW5peC5jcHAKKysrIGIvc3JjL2dwdS9nbC91bml4L0dyR0xDcmVhdGVOYXRpdmVJbnRlcmZhY2VfdW5peC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgIEdyR0xIYXNFeHRlbnNpb25Gcm9tU3RyaW5nKCJHTF9BUkJfaW1hZ2luZyIsIGV4dFN0cmluZykgfHwKICAgICAgICAgICAgIEdyR0xIYXNFeHRlbnNpb25Gcm9tU3RyaW5nKCJHTF9FWFRfYmxlbmRfY29sb3IiLCBleHRTdHJpbmcpKSB7CiAgICAgICAgICAgICBHUl9HTF9HRVRfUFJPQyhCbGVuZENvbG9yKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIEdSX0dMX0dFVF9QUk9DKEJ1ZmZlckRhdGEpOwogICAgICAgICBHUl9HTF9HRVRfUFJPQyhCdWZmZXJTdWJEYXRhKTsKZGlmZiAtLWdpdCBhL3NyYy9ncHUvZ2wvdW5peC9Ta05hdGl2ZUdMQ29udGV4dF91bml4LmNwcCBiL3NyYy9ncHUvZ2wvdW5peC9Ta05hdGl2ZUdMQ29udGV4dF91bml4LmNwcAppbmRleCBmOWM1ODJjLi5lNmZhZThlIDEwMDY0NAotLS0gYS9zcmMvZ3B1L2dsL3VuaXgvU2tOYXRpdmVHTENvbnRleHRfdW5peC5jcHAKKysrIGIvc3JjL2dwdS9nbC91bml4L1NrTmF0aXZlR0xDb250ZXh0X3VuaXguY3BwCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVNrTmF0aXZlR0xDb250ZXh0OjpTa05hdGl2ZUdMQ29udGV4dCgpIAorU2tOYXRpdmVHTENvbnRleHQ6OlNrTmF0aXZlR0xDb250ZXh0KCkKICAgICA6IGZDb250ZXh0KE5VTEwpCiAgICAgLCBmRGlzcGxheShOVUxMKQogICAgICwgZlBpeG1hcCgwKQpAQCAtMTEyLDcgKzExMiw3IEBACiAKICAgICAgICAgICAgIGlmIChiZXN0X2ZiYyA8IDAgfHwgKHNhbXBfYnVmICYmIHNhbXBsZXMgPiBiZXN0X251bV9zYW1wKSkKICAgICAgICAgICAgICAgICBiZXN0X2ZiYyA9IGksIGJlc3RfbnVtX3NhbXAgPSBzYW1wbGVzOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIFhGcmVlKHZpKTsKICAgICB9CiAKQEAgLTIwMSwxMiArMjAxLDEyIEBACiAgICAgICAgIGZDb250ZXh0ID0gZ2xYQ3JlYXRlQ29udGV4dChmRGlzcGxheSwgdmksIDAsIFRydWUpOwogI2VuZGlmCiAKLSAgICB9IAorICAgIH0KICNpZmRlZiBHTFhfMV8zCiAgICAgZWxzZSB7CiAgICAgICAgIC8vU2tEZWJ1Z2YoIkNyZWF0aW5nIGNvbnRleHQuXG4iKTsKIAotICAgICAgICBQRk5HTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBST0MgZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIgPSAKKyAgICAgICAgUEZOR0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DIGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCID0KICAgICAgICAgICAgIChQRk5HTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBST0MpIGdsWEdldFByb2NBZGRyZXNzQVJCKChHckdMdWJ5dGUqKSJnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQiIpOwogICAgICAgICBpbnQgY29udGV4dF9hdHRyaWJzW10gPSB7CiAgICAgICAgICAgICBHTFhfQ09OVEVYVF9NQUpPUl9WRVJTSU9OX0FSQiwgMywKZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS9Ta0RhdGFQaXhlbFJlZi5oIGIvc3JjL2ltYWdlL1NrRGF0YVBpeGVsUmVmLmgKaW5kZXggYjZlMTZlMC4uNmIxNTgwMiAxMDA2NDQKLS0tIGEvc3JjL2ltYWdlL1NrRGF0YVBpeGVsUmVmLmgKKysrIGIvc3JjL2ltYWdlL1NrRGF0YVBpeGVsUmVmLmgKQEAgLTE2LDE5ICsxNiwxOSBAQAogcHVibGljOgogICAgICAgICAgICAgU2tEYXRhUGl4ZWxSZWYoU2tEYXRhKiBkYXRhKTsKICAgICB2aXJ0dWFsIH5Ta0RhdGFQaXhlbFJlZigpOwotICAgIAorCiAgICAgU0tfREVDTEFSRV9QVUJMSUNfRkxBVFRFTkFCTEVfREVTRVJJQUxJWkFUSU9OX1BST0NTKFNrRGF0YVBpeGVsUmVmKQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopIFNLX09WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpIFNLX09WRVJSSURFOwotICAgIAorCiAgICAgU2tEYXRhUGl4ZWxSZWYoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImIGJ1ZmZlcik7CiAgICAgdmlydHVhbCB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdyaXRlQnVmZmVyJikgY29uc3QgU0tfT1ZFUlJJREU7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tEYXRhKiBmRGF0YTsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tQaXhlbFJlZiBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvaW1hZ2UvU2tJbWFnZVByaXYuY3BwIGIvc3JjL2ltYWdlL1NrSW1hZ2VQcml2LmNwcAppbmRleCA2N2QzMWI3Li5hMDIwZWFmIDEwMDY0NAotLS0gYS9zcmMvaW1hZ2UvU2tJbWFnZVByaXYuY3BwCisrKyBiL3NyYy9pbWFnZS9Ta0ltYWdlUHJpdi5jcHAKQEAgLTgwLDE1ICs4MCwxNSBAQAogICAgICAgICBjYXNlIFNrQml0bWFwOjprUkdCXzU2NV9Db25maWc6CiAgICAgICAgICAgICBpbmZvLT5mQ29sb3JUeXBlID0gU2tJbWFnZTo6a1JHQl81NjVfQ29sb3JUeXBlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZzoKICAgICAgICAgICAgIGluZm8tPmZDb2xvclR5cGUgPSBTa0ltYWdlOjprUE1Db2xvcl9Db2xvclR5cGU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBpbmZvLT5mV2lkdGggPSBibS53aWR0aCgpOwogICAgIGluZm8tPmZIZWlnaHQgPSBibS5oZWlnaHQoKTsKICAgICBpbmZvLT5mQWxwaGFUeXBlID0gYm0uaXNPcGFxdWUoKSA/IFNrSW1hZ2U6OmtPcGFxdWVfQWxwaGFUeXBlIDoKQEAgLTEyNiw3ICsxMjYsNyBAQAogdm9pZCBTa0ltYWdlUHJpdkRyYXdQaWN0dXJlKFNrQ2FudmFzKiBjYW52YXMsIFNrUGljdHVyZSogcGljdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhciB4LCBTa1NjYWxhciB5LCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGludCBzYXZlQ291bnQgPSBjYW52YXMtPmdldFNhdmVDb3VudCgpOwotICAgIAorCiAgICAgaWYgKHBhaW50ICYmIG5lZWRzX2xheWVyKCpwYWludCkpIHsKICAgICAgICAgU2tSZWN0IGJvdW5kczsKICAgICAgICAgYm91bmRzLnNldCh4LCB5LApAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgIGNhbnZhcy0+c2F2ZSgpOwogICAgICAgICBjYW52YXMtPnRyYW5zbGF0ZSh4LCB5KTsKICAgICB9Ci0gICAgCisKICAgICBjYW52YXMtPmRyYXdQaWN0dXJlKCpwaWN0dXJlKTsKICAgICBjYW52YXMtPnJlc3RvcmVUb0NvdW50KHNhdmVDb3VudCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW1hZ2UvU2tJbWFnZV9CYXNlLmggYi9zcmMvaW1hZ2UvU2tJbWFnZV9CYXNlLmgKaW5kZXggMjU0OThlYy4uZWQ3NDYxMCAxMDA2NDQKLS0tIGEvc3JjL2ltYWdlL1NrSW1hZ2VfQmFzZS5oCisrKyBiL3NyYy9pbWFnZS9Ta0ltYWdlX0Jhc2UuaApAQCAtMTYsNyArMTYsNyBAQAogCiAgICAgdmlydHVhbCB2b2lkIG9uRHJhdyhTa0NhbnZhcyosIFNrU2NhbGFyLCBTa1NjYWxhciwgY29uc3QgU2tQYWludCopID0gMDsKIAotcHJpdmF0ZTogICAgCitwcml2YXRlOgogICAgIHR5cGVkZWYgU2tJbWFnZSBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvaW1hZ2UvU2tJbWFnZV9Db2RlYy5jcHAgYi9zcmMvaW1hZ2UvU2tJbWFnZV9Db2RlYy5jcHAKaW5kZXggYWY3ZTBkYi4uYjQ2YWMyZCAxMDA2NDQKLS0tIGEvc3JjL2ltYWdlL1NrSW1hZ2VfQ29kZWMuY3BwCisrKyBiL3NyYy9pbWFnZS9Ta0ltYWdlX0NvZGVjLmNwcApAQCAtMTIsMTggKzEyLDE4IEBACiAjaW5jbHVkZSAiLi4vaW1hZ2VzL1NrSW1hZ2VEZWNvZGVyLmgiCiAKIGNsYXNzIFNrSW1hZ2VfQ29kZWMgOiBwdWJsaWMgU2tJbWFnZV9CYXNlIHsKLXB1YmxpYzogICAgCitwdWJsaWM6CiAgICAgc3RhdGljIFNrSW1hZ2UqIE5ld0VtcHR5KCk7Ci0gICAgCisKICAgICBTa0ltYWdlX0NvZGVjKFNrRGF0YSogZW5jb2RlZERhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdmlydHVhbCB+U2tJbWFnZV9Db2RlYygpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIG9uRHJhdyhTa0NhbnZhcyosIFNrU2NhbGFyLCBTa1NjYWxhciwgY29uc3QgU2tQYWludCopIFNLX09WRVJSSURFOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrRGF0YSogICAgIGZFbmNvZGVkRGF0YTsKICAgICBTa0JpdG1hcCAgICBmQml0bWFwOwotICAgIAorCiAgICAgdHlwZWRlZiBTa0ltYWdlX0Jhc2UgSU5IRVJJVEVEOwogfTsKIApAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0ltYWdlRGVjb2Rlcjo6a0RlY29kZUJvdW5kc19Nb2RlKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gU2tORVdfQVJHUyhTa0ltYWdlX0NvZGVjLCAoZGF0YSwgYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSkpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW1hZ2UvU2tJbWFnZV9HcHUuY3BwIGIvc3JjL2ltYWdlL1NrSW1hZ2VfR3B1LmNwcAppbmRleCA2Y2NmMTBiLi5lMDYxZTJkIDEwMDY0NAotLS0gYS9zcmMvaW1hZ2UvU2tJbWFnZV9HcHUuY3BwCisrKyBiL3NyYy9pbWFnZS9Ta0ltYWdlX0dwdS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpZiAwCiAgICAgYm9vbCBpc09wYXF1ZTsKICAgICBTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZyA9IFNrSW1hZ2VJbmZvVG9CaXRtYXBDb25maWcoaW5mbywgJmlzT3BhcXVlKTsKLSAgICAKKwogICAgIGZCaXRtYXAuc2V0Q29uZmlnKGNvbmZpZywgaW5mby5mV2lkdGgsIGluZm8uZkhlaWdodCwgcm93Qnl0ZXMpOwogICAgIGZCaXRtYXAuc2V0UGl4ZWxSZWYoU2tORVdfQVJHUyhTa0RhdGFQaXhlbFJlZiwgKGRhdGEpKSktPnVucmVmKCk7CiAgICAgZkJpdG1hcC5zZXRJc09wYXF1ZShpc09wYXF1ZSk7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgaWYgKCFTa0ltYWdlX0dwdTo6VmFsaWRBcmdzKGNvbnRleHQsIGRlc2MpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBTa05FV19BUkdTKFNrSW1hZ2VfR3B1LCAoY29udGV4dCwgZGVzYykpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW1hZ2UvU2tJbWFnZV9SYXN0ZXIuY3BwIGIvc3JjL2ltYWdlL1NrSW1hZ2VfUmFzdGVyLmNwcAppbmRleCAyZTY5MTVlLi4yMTZmMDk0IDEwMDY0NAotLS0gYS9zcmMvaW1hZ2UvU2tJbWFnZV9SYXN0ZXIuY3BwCisrKyBiL3NyYy9pbWFnZS9Ta0ltYWdlX1Jhc3Rlci5jcHAKQEAgLTM1LDEzICszNSwxMyBAQAogICAgICAgICBpZiAoU2tJbWFnZUluZm9Ub0JpdG1hcENvbmZpZyhpbmZvLCAmaXNPcGFxdWUpID09IFNrQml0bWFwOjprTm9fQ29uZmlnKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIFRPRE86IGNoZWNrIGNvbG9yc3BhY2UKLSAgICAgICAgCisKICAgICAgICAgaWYgKHJvd0J5dGVzIDwgU2tJbWFnZU1pblJvd0J5dGVzKGluZm8pKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaW50NjRfdCBzaXplID0gKGludDY0X3QpaW5mby5mSGVpZ2h0ICogcm93Qnl0ZXM7CiAgICAgICAgIGlmIChzaXplID4ga01heFBpeGVsQnl0ZVNpemUpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg0LDcgKzg0LDcgQEAKIDogSU5IRVJJVEVEKGluZm8uZldpZHRoLCBpbmZvLmZIZWlnaHQpIHsKICAgICBib29sIGlzT3BhcXVlOwogICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gU2tJbWFnZUluZm9Ub0JpdG1hcENvbmZpZyhpbmZvLCAmaXNPcGFxdWUpOwotICAgIAorCiAgICAgZkJpdG1hcC5zZXRDb25maWcoY29uZmlnLCBpbmZvLmZXaWR0aCwgaW5mby5mSGVpZ2h0LCByb3dCeXRlcyk7CiAgICAgZkJpdG1hcC5zZXRQaXhlbFJlZihTa05FV19BUkdTKFNrRGF0YVBpeGVsUmVmLCAoZGF0YSkpKS0+dW5yZWYoKTsKICAgICBmQml0bWFwLnNldElzT3BhcXVlKGlzT3BhcXVlKTsKQEAgLTk0LDEwICs5NCwxMCBAQAogU2tJbWFnZV9SYXN0ZXI6OlNrSW1hZ2VfUmFzdGVyKGNvbnN0IEluZm8mIGluZm8sIFNrUGl4ZWxSZWYqIHByLCBzaXplX3Qgcm93Qnl0ZXMpCiA6IElOSEVSSVRFRChpbmZvLmZXaWR0aCwgaW5mby5mSGVpZ2h0KSB7CiAgICAgU2tBU1NFUlQocHItPmlzSW1tdXRhYmxlKCkpOwotICAgIAorCiAgICAgYm9vbCBpc09wYXF1ZTsKICAgICBTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZyA9IFNrSW1hZ2VJbmZvVG9CaXRtYXBDb25maWcoaW5mbywgJmlzT3BhcXVlKTsKLSAgICAKKwogICAgIGZCaXRtYXAuc2V0Q29uZmlnKGNvbmZpZywgaW5mby5mV2lkdGgsIGluZm8uZkhlaWdodCwgcm93Qnl0ZXMpOwogICAgIGZCaXRtYXAuc2V0UGl4ZWxSZWYocHIpOwogICAgIGZCaXRtYXAuc2V0SXNPcGFxdWUoaXNPcGFxdWUpOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgaWYgKE5VTEwgPT0gcGl4ZWxzKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIC8vIEhlcmUgd2UgYWN0dWFsbHkgbWFrZSBhIGNvcHkgb2YgdGhlIGNhbGxlcidzIHBpeGVsIGRhdGEKICAgICBTa0F1dG9EYXRhVW5yZWYgZGF0YShTa0RhdGE6Ok5ld1dpdGhDb3B5KHBpeGVscywgaW5mby5mSGVpZ2h0ICogcm93Qnl0ZXMpKTsKICAgICByZXR1cm4gU2tORVdfQVJHUyhTa0ltYWdlX1Jhc3RlciwgKGluZm8sIGNzLCBkYXRhLCByb3dCeXRlcykpOwpAQCAtMTQzLDEzICsxNDMsMTMgQEAKICAgICBpZiAoTlVMTCA9PSBwaXhlbERhdGEpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgLy8gZGlkIHRoZXkgZ2l2ZSB1cyBlbm91Z2ggZGF0YT8KICAgICBzaXplX3Qgc2l6ZSA9IGluZm8uZkhlaWdodCAqIHJvd0J5dGVzOwogICAgIGlmIChwaXhlbERhdGEtPnNpemUoKSA8IHNpemUpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgU2tBdXRvRGF0YVVucmVmIGRhdGEocGl4ZWxEYXRhKTsKICAgICByZXR1cm4gU2tORVdfQVJHUyhTa0ltYWdlX1Jhc3RlciwgKGluZm8sIGNzLCBkYXRhLCByb3dCeXRlcykpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2ltYWdlL1NrU3VyZmFjZV9CYXNlLmggYi9zcmMvaW1hZ2UvU2tTdXJmYWNlX0Jhc2UuaAppbmRleCA1YTgwM2ZhLi44MTY2YzhjIDEwMDY0NAotLS0gYS9zcmMvaW1hZ2UvU2tTdXJmYWNlX0Jhc2UuaAorKysgYi9zcmMvaW1hZ2UvU2tTdXJmYWNlX0Jhc2UuaApAQCAtMTQsNyArMTQsNyBAQAogcHVibGljOgogICAgIFNrU3VyZmFjZV9CYXNlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdmlydHVhbCB+U2tTdXJmYWNlX0Jhc2UoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBBbGxvY2F0ZSBhIGNhbnZhcyB0aGF0IHdpbGwgZHJhdyBpbnRvIHRoaXMgc3VyZmFjZS4gV2Ugd2lsbCBjYWNoZSB0aGlzCiAgICAgICogIGNhbnZhcywgdG8gcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB0byB0aGUgY2FsbGVyIG11bHRpcGxlIHRpbWVzLiBXZQpAQCAtMjIsOSArMjIsOSBAQAogICAgICAqICBzY29wZS4KICAgICAgKi8KICAgICB2aXJ0dWFsIFNrQ2FudmFzKiBvbk5ld0NhbnZhcygpID0gMDsKLSAgICAKKwogICAgIHZpcnR1YWwgU2tTdXJmYWNlKiBvbk5ld1N1cmZhY2UoY29uc3QgU2tJbWFnZTo6SW5mbyYsIFNrQ29sb3JTcGFjZSopID0gMDsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBBbGxvY2F0ZSBhbiBTa0ltYWdlIHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgc3VyZmFjZS4KICAgICAgKiAgVGhpcyBuZWVkcyB0byBiZSBhYmxlIHRvIG91dGxpdmUgdGhlIHN1cmZhY2UgaXRzZWxmIChpZiBuZWVkIGJlKSwgYW5kCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICogIGlzIGNoYWdlZCBhZnRlciB0aGlzIGNhbGxlIChlLmcuIGl0IGlzIGRyYXduIHRvIHZpYSBpdHMgY2FudmFzKS4KICAgICAgKi8KICAgICB2aXJ0dWFsIFNrSW1hZ2UqIG9uTmV3SW1hZ2VTaGFwc2hvdCgpID0gMDsKLSAgICAKKwogICAgIC8qKgogICAgICAqICBEZWZhdWx0IGltcGxlbWVudGF0aW9uOgogICAgICAqCkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZkNhY2hlZENhbnZhczsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU2tDYW52YXMqICAgZkNhY2hlZENhbnZhczsKLSAgICAKKwogICAgIHR5cGVkZWYgU2tTdXJmYWNlIElOSEVSSVRFRDsKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS9Ta1N1cmZhY2VfR3B1LmNwcCBiL3NyYy9pbWFnZS9Ta1N1cmZhY2VfR3B1LmNwcAppbmRleCBjNjAxNmJlLi5kNzA3ZDkzIDEwMDY0NAotLS0gYS9zcmMvaW1hZ2UvU2tTdXJmYWNlX0dwdS5jcHAKKysrIGIvc3JjL2ltYWdlL1NrU3VyZmFjZV9HcHUuY3BwCkBAIC03Niw3ICs3Niw3IEBACiAgICAgaWYgKHNpemUgPiBrTWF4VG90YWxTaXplKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODUsNyArODUsNyBAQAogICAgICAgICA6IElOSEVSSVRFRChpbmZvLmZXaWR0aCwgaW5mby5mSGVpZ2h0KSB7CiAgICAgYm9vbCBpc09wYXF1ZTsKICAgICBTa0JpdG1hcDo6Q29uZmlnIGNvbmZpZyA9IFNrSW1hZ2VJbmZvVG9CaXRtYXBDb25maWcoaW5mbywgJmlzT3BhcXVlKTsKLSAgICAKKwogICAgIGZCaXRtYXAuc2V0Q29uZmlnKGNvbmZpZywgaW5mby5mV2lkdGgsIGluZm8uZkhlaWdodCwgcmIpOwogICAgIGZCaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CiAgICAgZkJpdG1hcC5zZXRJc09wYXF1ZShpc09wYXF1ZSk7CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICBpZiAoTlVMTCA9PSBjdHggfHwgTlVMTCA9PSB0YXJnZXQpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIFNrTkVXX0FSR1MoU2tTdXJmYWNlX0dwdSwgKGN0eCwgdGFyZ2V0KSk7CiB9CiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgIGlmICghU2tTdXJmYWNlX0dwdTo6VmFsaWQoaW5mbywgY3MsIHNhbXBsZUNvdW50KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKIC8vICAgIHJldHVybiBTa05FV19BUkdTKFNrU3VyZmFjZV9HcHUsIChpbmZvLCBjcywgcHIsIHJvd0J5dGVzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS9Ta1N1cmZhY2VfUGljdHVyZS5jcHAgYi9zcmMvaW1hZ2UvU2tTdXJmYWNlX1BpY3R1cmUuY3BwCmluZGV4IGI2Y2JiOTQuLmJhYzA5YzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFnZS9Ta1N1cmZhY2VfUGljdHVyZS5jcHAKKysrIGIvc3JjL2ltYWdlL1NrU3VyZmFjZV9QaWN0dXJlLmNwcApAQCAtMTgsMTcgKzE4LDE3IEBACiBwdWJsaWM6CiAgICAgU2tTdXJmYWNlX1BpY3R1cmUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICB2aXJ0dWFsIH5Ta1N1cmZhY2VfUGljdHVyZSgpOwotICAgIAorCiAgICAgdmlydHVhbCBTa0NhbnZhcyogb25OZXdDYW52YXMoKSBTS19PVkVSUklERTsKICAgICB2aXJ0dWFsIFNrU3VyZmFjZSogb25OZXdTdXJmYWNlKGNvbnN0IFNrSW1hZ2U6OkluZm8mLCBTa0NvbG9yU3BhY2UqKSBTS19PVkVSUklERTsKICAgICB2aXJ0dWFsIFNrSW1hZ2UqIG9uTmV3SW1hZ2VTaGFwc2hvdCgpIFNLX09WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBvbkRyYXcoU2tDYW52YXMqLCBTa1NjYWxhciB4LCBTa1NjYWxhciB5LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQYWludCopIFNLX09WRVJSSURFOwotICAgIAorCiBwcml2YXRlOgogICAgIFNrUGljdHVyZSogIGZQaWN0dXJlOwogICAgIFNrUGljdHVyZSogIGZSZWNvcmRpbmdQaWN0dXJlOwotICAgIAorCiAgICAgdHlwZWRlZiBTa1N1cmZhY2VfQmFzZSBJTkhFUklURUQ7CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvaW1hZ2UvU2tTdXJmYWNlX1Jhc3Rlci5jcHAgYi9zcmMvaW1hZ2UvU2tTdXJmYWNlX1Jhc3Rlci5jcHAKaW5kZXggYTBiMWU2Mi4uYzRhYzk1OSAxMDA2NDQKLS0tIGEvc3JjL2ltYWdlL1NrU3VyZmFjZV9SYXN0ZXIuY3BwCisrKyBiL3NyYy9pbWFnZS9Ta1N1cmZhY2VfUmFzdGVyLmNwcApAQCAtNzYsNyArNzYsNyBAQAogICAgIGlmIChzaXplID4ga01heFRvdGFsU2l6ZSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgOiBJTkhFUklURUQoaW5mby5mV2lkdGgsIGluZm8uZkhlaWdodCkgewogICAgIGJvb2wgaXNPcGFxdWU7CiAgICAgU2tCaXRtYXA6OkNvbmZpZyBjb25maWcgPSBTa0ltYWdlSW5mb1RvQml0bWFwQ29uZmlnKGluZm8sICZpc09wYXF1ZSk7Ci0gICAgCisKICAgICBmQml0bWFwLnNldENvbmZpZyhjb25maWcsIGluZm8uZldpZHRoLCBpbmZvLmZIZWlnaHQsIHJiKTsKICAgICBmQml0bWFwLnNldFBpeGVscyhwaXhlbHMpOwogICAgIGZCaXRtYXAuc2V0SXNPcGFxdWUoaXNPcGFxdWUpOwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgaWYgKE5VTEwgPT0gcGl4ZWxzKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBTa05FV19BUkdTKFNrU3VyZmFjZV9SYXN0ZXIsIChpbmZvLCBjcywgcGl4ZWxzLCByb3dCeXRlcykpOwogfQogCkBAIC0xNDgsMjAgKzE0OCwyMCBAQAogICAgIGlmICghU2tTdXJmYWNlX1Jhc3Rlcjo6VmFsaWQoaW5mbywgY3MpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heFRvdGFsU2l6ZSA9IFNLX01heFMzMjsKICAgICBzaXplX3Qgcm93Qnl0ZXMgPSBTa0ltYWdlTWluUm93Qnl0ZXMoaW5mbyk7CiAgICAgdWludDY0X3Qgc2l6ZTY0ID0gKHVpbnQ2NF90KWluZm8uZkhlaWdodCAqIHJvd0J5dGVzOwogICAgIGlmIChzaXplNjQgPiBrTWF4VG90YWxTaXplKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBzaXplID0gKHNpemVfdClzaXplNjQ7CiAgICAgdm9pZCogcGl4ZWxzID0gc2tfbWFsbG9jX3Rocm93KHNpemUpOwogICAgIGlmIChOVUxMID09IHBpeGVscykgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKICAgICBTa0F1dG9UVW5yZWY8U2tQaXhlbFJlZj4gcHIoU2tORVdfQVJHUyhTa01hbGxvY1BpeGVsUmVmLCAocGl4ZWxzLCBzaXplLCBOVUxMLCB0cnVlKSkpOwogICAgIHJldHVybiBTa05FV19BUkdTKFNrU3VyZmFjZV9SYXN0ZXIsIChpbmZvLCBjcywgcHIsIHJvd0J5dGVzKSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9maWx0ZXJfbmVvbi5oIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfZmlsdGVyX25lb24uaAppbmRleCBhYWRhYjkxLi42OTlmODU2IDEwMDY0NAotLS0gYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9maWx0ZXJfbmVvbi5oCisrKyBiL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX2ZpbHRlcl9uZW9uLmgKQEAgLTExLDE0ICsxMSwxNCBAQAogCiAvKgogICAgIEZpbHRlcl8zMl9vcGFxdWUKLSAgICAKKwogICAgIFRoZXJlIGlzIG5vIGhhcmQtbi1mYXN0IHJ1bGUgdGhhdCB0aGUgZmlsdGVyaW5nIG11c3QgcHJvZHVjZQogICAgIGV4YWN0IHJlc3VsdHMgZm9yIHRoZSBjb2xvciBjb21wb25lbnRzLCBidXQgaWYgdGhlIDQgaW5jb21pbmcgY29sb3JzIGFyZQogICAgIGFsbCBvcGFxdWUsIHRoZW4gdGhlIG91dHB1dCBjb2xvciBtdXN0IGFsc28gYmUgb3BhcXVlLiBTdWJzZXF1ZW50IHBhcnRzIG9mCiAgICAgdGhlIGRyYXdpbmcgcGlwZWxpbmUgbWF5IHJlbHkgb24gdGhpcyAoZS5nLiB3aGljaCBibGl0cm93IHByb2MgdG8gdXNlKS4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgRmlsdGVyXzMyX29wYXF1ZV9uZW9uKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIAorc3RhdGljIGlubGluZSB2b2lkIEZpbHRlcl8zMl9vcGFxdWVfbmVvbih1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IgYTAwLCBTa1BNQ29sb3IgYTAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IgYTEwLCBTa1BNQ29sb3IgYTExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BNQ29sb3IgKmRzdCkgewpAQCAtMjYsMTkgKzI2LDE5IEBACiAgICAgICAgICAgICAgICAgICJ2ZHVwLjggICAgICAgICBkMCwgJVt5XSAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGR1cGxpY2F0ZSB5IGludG8gZDAKICAgICAgICAgICAgICAgICAgInZtb3YudTggICAgICAgIGQxNiwgIzE2ICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gc2V0IHVwIGNvbnN0YW50IGluIGQxNgogICAgICAgICAgICAgICAgICAidnN1Yi51OCAgICAgICAgZDEsIGQxNiwgZDAgICAgICAgICAgICAgXG5cdCIgICAvLyBkMSA9IDE2LXkKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgInZkdXAuMzIgICAgICAgIGQ0LCAlW2EwMF0gICAgICAgICAgICAgIFxuXHQiICAgLy8gZHVwbGljYXRlIGEwMCBpbnRvIGQ0CiAgICAgICAgICAgICAgICAgICJ2ZHVwLjMyICAgICAgICBkNSwgJVthMTBdICAgICAgICAgICAgICBcblx0IiAgIC8vIGR1cGxpY2F0ZSBhMTAgaW50byBkNQogICAgICAgICAgICAgICAgICAidm1vdi4zMiAgICAgICAgZDRbMV0sICVbYTAxXSAgICAgICAgICAgXG5cdCIgICAvLyBzZXQgdG9wIG9mIGQ0IHRvIGEwMQogICAgICAgICAgICAgICAgICAidm1vdi4zMiAgICAgICAgZDVbMV0sICVbYTExXSAgICAgICAgICAgXG5cdCIgICAvLyBzZXQgdG9wIG9mIGQ1IHRvIGExMQotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAidm11bGwudTggICAgICAgcTMsIGQ0LCBkMSAgICAgICAgICAgICAgXG5cdCIgICAvLyBxMyA9IFthMDF8YTAwXSAqICgxNi15KQogICAgICAgICAgICAgICAgICAidm11bGwudTggICAgICAgcTAsIGQ1LCBkMCAgICAgICAgICAgICAgXG5cdCIgICAvLyBxMCA9IFthMTF8YTEwXSAqIHkKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgInZkdXAuMTYgICAgICAgIGQ1LCAlW3hdICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gZHVwbGljYXRlIHggaW50byBkNQogICAgICAgICAgICAgICAgICAidm1vdi51MTYgICAgICAgZDE2LCAjMTYgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzZXQgdXAgY29uc3RhbnQgaW4gZDE2CiAgICAgICAgICAgICAgICAgICJ2c3ViLnUxNiAgICAgICBkMywgZDE2LCBkNSAgICAgICAgICAgICBcblx0IiAgIC8vIGQzID0gMTYteAotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAidm11bC5pMTYgICAgICAgZDQsIGQ3LCBkNSAgICAgICAgICAgICAgXG5cdCIgICAvLyBkNCAgPSBhMDEgKiB4CiAgICAgICAgICAgICAgICAgICJ2bWxhLmkxNiAgICAgICBkNCwgZDEsIGQ1ICAgICAgICAgICAgICBcblx0IiAgIC8vIGQ0ICs9IGExMSAqIHgKICAgICAgICAgICAgICAgICAgInZtbGEuaTE2ICAgICAgIGQ0LCBkNiwgZDMgICAgICAgICAgICAgIFxuXHQiICAgLy8gZDQgKz0gYTAwICogKDE2LXgpCkBAIC01OSwxOSArNTksMTkgQEAKICAgICAgICAgICAgICAgICAgInZkdXAuOCAgICAgICAgIGQwLCAlW3ldICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gZHVwbGljYXRlIHkgaW50byBkMAogICAgICAgICAgICAgICAgICAidm1vdi51OCAgICAgICAgZDE2LCAjMTYgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzZXQgdXAgY29uc3RhbnQgaW4gZDE2CiAgICAgICAgICAgICAgICAgICJ2c3ViLnU4ICAgICAgICBkMSwgZDE2LCBkMCAgICAgICAgICAgICBcblx0IiAgIC8vIGQxID0gMTYteQotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAidmR1cC4zMiAgICAgICAgZDQsICVbYTAwXSAgICAgICAgICAgICAgXG5cdCIgICAvLyBkdXBsaWNhdGUgYTAwIGludG8gZDQKICAgICAgICAgICAgICAgICAgInZkdXAuMzIgICAgICAgIGQ1LCAlW2ExMF0gICAgICAgICAgICAgIFxuXHQiICAgLy8gZHVwbGljYXRlIGExMCBpbnRvIGQ1CiAgICAgICAgICAgICAgICAgICJ2bW92LjMyICAgICAgICBkNFsxXSwgJVthMDFdICAgICAgICAgICBcblx0IiAgIC8vIHNldCB0b3Agb2YgZDQgdG8gYTAxCiAgICAgICAgICAgICAgICAgICJ2bW92LjMyICAgICAgICBkNVsxXSwgJVthMTFdICAgICAgICAgICBcblx0IiAgIC8vIHNldCB0b3Agb2YgZDUgdG8gYTExCi0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICJ2bXVsbC51OCAgICAgICBxMywgZDQsIGQxICAgICAgICAgICAgICBcblx0IiAgIC8vIHEzID0gW2EwMXxhMDBdICogKDE2LXkpCiAgICAgICAgICAgICAgICAgICJ2bXVsbC51OCAgICAgICBxMCwgZDUsIGQwICAgICAgICAgICAgICBcblx0IiAgIC8vIHEwID0gW2ExMXxhMTBdICogeQotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAidmR1cC4xNiAgICAgICAgZDUsICVbeF0gICAgICAgICAgICAgICAgXG5cdCIgICAvLyBkdXBsaWNhdGUgeCBpbnRvIGQ1CiAgICAgICAgICAgICAgICAgICJ2bW92LnUxNiAgICAgICBkMTYsICMxNiAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHNldCB1cCBjb25zdGFudCBpbiBkMTYKICAgICAgICAgICAgICAgICAgInZzdWIudTE2ICAgICAgIGQzLCBkMTYsIGQ1ICAgICAgICAgICAgIFxuXHQiICAgLy8gZDMgPSAxNi14Ci0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICJ2bXVsLmkxNiAgICAgICBkNCwgZDcsIGQ1ICAgICAgICAgICAgICBcblx0IiAgIC8vIGQ0ICA9IGEwMSAqIHgKICAgICAgICAgICAgICAgICAgInZtbGEuaTE2ICAgICAgIGQ0LCBkMSwgZDUgICAgICAgICAgICAgIFxuXHQiICAgLy8gZDQgKz0gYTExICogeAogICAgICAgICAgICAgICAgICAidm1sYS5pMTYgICAgICAgZDQsIGQ2LCBkMyAgICAgICAgICAgICAgXG5cdCIgICAvLyBkNCArPSBhMDAgKiAoMTYteCkKZGlmZiAtLWdpdCBhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeFByb2NzX25lb24uY3BwIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4UHJvY3NfbmVvbi5jcHAKaW5kZXggN2ViZGRkYy4uZTk2ODRlMiAxMDA2NDQKLS0tIGEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4UHJvY3NfbmVvbi5jcHAKKysrIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4UHJvY3NfbmVvbi5jcHAKQEAgLTEsNCArMSw0IEBACi0vKiBORU9OIG9wdGltaXplZCBjb2RlIChDKSBDT1BZUklHSFQgMjAwOSBNb3Rvcm9sYSAKKy8qIE5FT04gb3B0aW1pemVkIGNvZGUgKEMpIENPUFlSSUdIVCAyMDA5IE1vdG9yb2xhCiAgKgogICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KZGlmZiAtLWdpdCBhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeF9jbGFtcF9uZW9uLmggYi9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9tYXRyaXhfY2xhbXBfbmVvbi5oCmluZGV4IDJlNDgxNjEuLjRmNDdkNDcgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeF9jbGFtcF9uZW9uLmgKKysrIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4X2NsYW1wX25lb24uaApAQCAtNSw3ICs1LDcgQEAKICAqLwogCiAvKgotICogTW9kaWZpY2F0aW9ucyBkb25lIGluLWhvdXNlIGF0IE1vdG9yb2xhIAorICogTW9kaWZpY2F0aW9ucyBkb25lIGluLWhvdXNlIGF0IE1vdG9yb2xhCiAgKgogICogdGhpcyBpcyBhIGNsb25lIG9mIFNrQml0bWFwUHJvY1N0YXRlX21hdHJpeC5oCiAgKiBhbmQgaGFzIGJlZW4gdHVuZWQgdG8gd29yayB3aXRoIHRoZSBORU9OIHVuaXQuCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICp4eSsrID0gVElMRVlfUFJPQ0YoZngsIG1heFkpOwogICAgICAgICBmeCA9IFNrU2NhbGFyVG9GaXhlZChwdC5mWCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKDAgPT0gbWF4WCkgewogICAgICAgICAvLyBhbGwgb2YgdGhlIGZvbGxvd2luZyBYIHZhbHVlcyBtdXN0IGJlIDAKICAgICAgICAgbWVtc2V0KHh5LCAwLCBjb3VudCAqIHNpemVvZih1aW50MTZfdCkpOwpAQCAtOTQsMzggKzk0LDM4IEBACiAKICAgICBpbnQgaTsKIAotCS8qIHZlcnkgbXVjaCBsaWtlIGRvbmUgaW4gZGVjYWxfbm9maWx0ZXIsIGJ1dCB3aXRoCi0JICogYW4gZXh0cmEgY2xhbXBpbmcgZnVuY3Rpb24gYXBwbGllZC4KLQkgKiBUSUxFWF9QUk9DRihmeCxtYXgpIFNrQ2xhbXBNYXgoKGZ4KT4+MTYsIG1heCkKLQkgKi8KLQlpZiAoY291bnQgPj0gOCkgewotCSAgICAvKiBTa0ZpeGVkIGlzIDE2LjE2IGZpeGVkIHBvaW50ICovCi0JICAgIFNrRml4ZWQgZHgyID0gZHgrZHg7Ci0JICAgIFNrRml4ZWQgZHg0ID0gZHgyK2R4MjsKLQkgICAgU2tGaXhlZCBkeDggPSBkeDQrZHg0OworICAgIC8qIHZlcnkgbXVjaCBsaWtlIGRvbmUgaW4gZGVjYWxfbm9maWx0ZXIsIGJ1dCB3aXRoCisgICAgICogYW4gZXh0cmEgY2xhbXBpbmcgZnVuY3Rpb24gYXBwbGllZC4KKyAgICAgKiBUSUxFWF9QUk9DRihmeCxtYXgpIFNrQ2xhbXBNYXgoKGZ4KT4+MTYsIG1heCkKKyAgICAgKi8KKyAgICBpZiAoY291bnQgPj0gOCkgeworICAgICAgICAvKiBTa0ZpeGVkIGlzIDE2LjE2IGZpeGVkIHBvaW50ICovCisgICAgICAgIFNrRml4ZWQgZHgyID0gZHgrZHg7CisgICAgICAgIFNrRml4ZWQgZHg0ID0gZHgyK2R4MjsKKyAgICAgICAgU2tGaXhlZCBkeDggPSBkeDQrZHg0OwogCi0JICAgIC8qIG5vdyBidWlsZCBmeC9meCtkeC9meCsyZHgvZngrM2R4ICovCi0JICAgIFNrRml4ZWQgZngxLCBmeDIsIGZ4MzsKLQkgICAgaW50MzJ4Ml90IGxvd2VyLCB1cHBlcjsKLQkgICAgaW50MzJ4NF90IGxiYXNlLCBoYmFzZTsKLQkgICAgaW50MTZfdCAqZHN0MTYgPSAoaW50MTZfdCAqKXh5OworICAgICAgICAvKiBub3cgYnVpbGQgZngvZngrZHgvZngrMmR4L2Z4KzNkeCAqLworICAgICAgICBTa0ZpeGVkIGZ4MSwgZngyLCBmeDM7CisgICAgICAgIGludDMyeDJfdCBsb3dlciwgdXBwZXI7CisgICAgICAgIGludDMyeDRfdCBsYmFzZSwgaGJhc2U7CisgICAgICAgIGludDE2X3QgKmRzdDE2ID0gKGludDE2X3QgKil4eTsKIAotCSAgICBmeDEgPSBmeCtkeDsKLQkgICAgZngyID0gZngxK2R4OwotCSAgICBmeDMgPSBmeDIrZHg7CisgICAgICAgIGZ4MSA9IGZ4K2R4OworICAgICAgICBmeDIgPSBmeDErZHg7CisgICAgICAgIGZ4MyA9IGZ4MitkeDsKIAotCSAgICAvKiBidWlsZCBteSB0ZW1wbGF0ZShzKSAqLwotCSAgICAvKiBhdm9pZCB0aGUgJ2xiYXNlIHVuaXRpYWxpemVkJyB3YXJuaW5nICovCi0JICAgIGxiYXNlID0gdmR1cHFfbl9zMzIoZngpOwotCSAgICBsYmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4MSwgbGJhc2UsIDEpOwotCSAgICBsYmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4MiwgbGJhc2UsIDIpOwotCSAgICBsYmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4MywgbGJhc2UsIDMpOworICAgICAgICAvKiBidWlsZCBteSB0ZW1wbGF0ZShzKSAqLworICAgICAgICAvKiBhdm9pZCB0aGUgJ2xiYXNlIHVuaXRpYWxpemVkJyB3YXJuaW5nICovCisgICAgICAgIGxiYXNlID0gdmR1cHFfbl9zMzIoZngpOworICAgICAgICBsYmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4MSwgbGJhc2UsIDEpOworICAgICAgICBsYmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4MiwgbGJhc2UsIDIpOworICAgICAgICBsYmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4MywgbGJhc2UsIDMpOwogCi0JICAgIGhiYXNlID0gdmFkZHFfczMyKGxiYXNlLCB2ZHVwcV9uX3MzMihkeDQpKTsKKyAgICAgICAgaGJhc2UgPSB2YWRkcV9zMzIobGJhc2UsIHZkdXBxX25fczMyKGR4NCkpOwogCi0JICAgIC8qIHN0b3JlICYgYnVtcCAqLwotCSAgICBkbyB7Ci0JICAgICAgICBpbnQzMng0X3QgbG91dDsKKyAgICAgICAgLyogc3RvcmUgJiBidW1wICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGludDMyeDRfdCBsb3V0OwogICAgICAgICAgICAgaW50MzJ4NF90IGhvdXQ7CiAgICAgICAgICAgICBpbnQxNng4X3QgaGkxNjsKIApAQCAtMTQ3LDkgKzE0Nyw5IEBACiAgICAgICAgICAgICBkc3QxNiArPSA4OwogICAgICAgICAgICAgY291bnQgLT0gODsKICAgICAgICAgICAgIGZ4ICs9IGR4ODsKLQkgICAgfSB3aGlsZSAoY291bnQgPj0gOCk7Ci0JICAgIHh5ID0gKHVpbnQzMl90ICopIGRzdDE2OwotCX0KKyAgICAgICAgfSB3aGlsZSAoY291bnQgPj0gOCk7CisgICAgICAgIHh5ID0gKHVpbnQzMl90ICopIGRzdDE2OworICAgIH0KIAogICAgIHVpbnQxNl90KiB4eCA9ICh1aW50MTZfdCopeHk7CiAgICAgZm9yIChpID0gY291bnQ7IGkgPiAwOyAtLWkpIHsKQEAgLTE2NywyMCArMTY3LDIwIEBACiAgICAgU2tBU1NFUlQoKHMuZkludlR5cGUgJiB+KFNrTWF0cml4OjprVHJhbnNsYXRlX01hc2sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6a1NjYWxlX01hc2sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6a0FmZmluZV9NYXNrKSkgPT0gMCk7Ci0gICAgCisKICAgICBQUkVBTUJMRShzKTsKICAgICBTa1BvaW50IHNyY1B0OwogICAgIHMuZkludlByb2MoKnMuZkludk1hdHJpeCwKICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih5KSArIFNLX1NjYWxhckhhbGYsICZzcmNQdCk7Ci0gICAgCisKICAgICBTa0ZpeGVkIGZ4ID0gU2tTY2FsYXJUb0ZpeGVkKHNyY1B0LmZYKTsKICAgICBTa0ZpeGVkIGZ5ID0gU2tTY2FsYXJUb0ZpeGVkKHNyY1B0LmZZKTsKICAgICBTa0ZpeGVkIGR4ID0gcy5mSW52U3g7CiAgICAgU2tGaXhlZCBkeSA9IHMuZkludkt5OwogICAgIGludCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICBpbnQgbWF4WSA9IHMuZkJpdG1hcC0+aGVpZ2h0KCkgLSAxOwotICAgIAorCiAgICAgLyogTkVPTiBsZXRzIHVzIGRvIGFuIDh4IHVucm9sbGluZyAqLwogICAgIGlmIChjb3VudCA+PSA4KSB7CiAgICAgICAgIC8qIFNrRml4ZWQgaXMgMTYuMTYgZml4ZWQgcG9pbnQgKi8KQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICAgICAgeDJiYXNlID0gdmFkZHFfczMyICh4MmJhc2UsIHZkdXBxX25fczMyIChkeDgpKTsKICAgICAgICAgICAgIHkyYmFzZSA9IHZhZGRxX3MzMiAoeTJiYXNlLCB2ZHVwcV9uX3MzMiAoZHk4KSk7CiAKLSAgICAgICAgICAgIGRzdDE2ICs9IDE2OwkJLyogOHgzMiBha2EgMTZ4MTYgKi8KKyAgICAgICAgICAgIGRzdDE2ICs9IDE2OyAgICAgICAgLyogOHgzMiBha2EgMTZ4MTYgKi8KICAgICAgICAgICAgIGNvdW50IC09IDg7CiAgICAgICAgICAgICBmeCArPSBkeDg7CiAgICAgICAgICAgICBmeSArPSBkeTg7CkBAIC0yNzEsMzcgKzI3MSwzNyBAQAogICAgIH0KIH0KIAotI3VuZGVmCURFQlVHX1BFUlNQX05PRklMVEVSCisjdW5kZWYgICAgREVCVUdfUEVSU1BfTk9GSUxURVIKIAogc3RhdGljIHZvaWQgUEVSU1BfTk9GSUxURVJfTkFNRShjb25zdCBTa0JpdG1hcFByb2NTdGF0ZSYgcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIFNLX1JFU1RSSUNUIHh5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCB4LCBpbnQgeSkgewogICAgIFNrQVNTRVJUKHMuZkludlR5cGUgJiBTa01hdHJpeDo6a1BlcnNwZWN0aXZlX01hc2spOwotICAgIAorCiAgICAgUFJFQU1CTEUocyk7CiAgICAgLyogbWF4e1gsWX0gYXJlIGludCBoZXJlLCBidXQgbGF0ZXIgc2hvd24vYXNzdW1lZCB0byBmaXQgaW4gMTYgYml0cyAqLwogICAgIGludCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICBpbnQgbWF4WSA9IHMuZkJpdG1hcC0+aGVpZ2h0KCkgLSAxOwotICAgIAorCiAgICAgU2tQZXJzcEl0ZXIgICBpdGVyKCpzLmZJbnZNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgY291bnQpOwotICAgIAorCiAgICAgd2hpbGUgKChjb3VudCA9IGl0ZXIubmV4dCgpKSAhPSAwKSB7CiAgICAgICAgIGNvbnN0IFNrRml4ZWQqIFNLX1JFU1RSSUNUIHNyY1hZID0gaXRlci5nZXRYWSgpOwogCiAjaWYgZGVmaW5lZChERUJVR19QRVJTUF9OT0ZJTFRFUikKLQkvKiBkZWJ1Z2dpbmcgc3R1ZmYgKi8KLQljb25zdCBTa0ZpeGVkICplbmRfc3JjWFkgPSBzcmNYWSArIChjb3VudCoyKTsKLQl1aW50MzJfdCAqZW5kX3h5ID0geHkgKyAoY291bnQpOwotCWNvbnN0IFNrRml4ZWQgKmJhc2Vfc3JjWFkgPSBzcmNYWTsKLQl1aW50MzJfdCAqYmFzZV94eSA9IHh5OwotCWludCBiYXNlX2NvdW50ID0gY291bnQ7CisgICAgLyogZGVidWdnaW5nIHN0dWZmICovCisgICAgY29uc3QgU2tGaXhlZCAqZW5kX3NyY1hZID0gc3JjWFkgKyAoY291bnQqMik7CisgICAgdWludDMyX3QgKmVuZF94eSA9IHh5ICsgKGNvdW50KTsKKyAgICBjb25zdCBTa0ZpeGVkICpiYXNlX3NyY1hZID0gc3JjWFk7CisgICAgdWludDMyX3QgKmJhc2VfeHkgPSB4eTsKKyAgICBpbnQgYmFzZV9jb3VudCA9IGNvdW50OwogI2VuZGlmCiAKICNpZiAxCiAgICAgICAgIC8vIDIwMDkvOS8zMDogY3Jhc2hlcyBpbiBBcGlEZW1vcyAtIFZpZXdzIC0gQW5pbWF0aW9uIC0gM0QgVHJhbnNpdGlvbgotCS8vIDIwMDkvMTAvOTogcmV3b3JrZWQgdG8gYXZvaWQgaWxsZWdhbCAoYnV0IGFsbG93ZWQgYnkgZ2FzKSBpbnNuCisgICAgLy8gMjAwOS8xMC85OiByZXdvcmtlZCB0byBhdm9pZCBpbGxlZ2FsIChidXQgYWxsb3dlZCBieSBnYXMpIGluc24KIAogICAgICAgICAvKiBzcmNYWSBpcyBhIGJhdGNoIG9mIDMyIGJpdCBudW1iZXJzIFgwLFkwLFgxLFkxLi4uCiAgICAgICAgICAqIGJ1dCB3ZSBpbW1lZGlhdGVseSBkaXNjYXJkIHRoZSBsb3cgMTYgYml0cy4uLgpAQCAtMzE2LDk5ICszMTYsOTkgQEAKICAgICAgICAgICAgIGludDE2eDRfdCBtYXhZNCA9IHZkdXBfbl9zMTYoKGludDE2X3QpbWF4WSk7CiAgICAgICAgICAgICBpbnQxNng0X3QgemVybzQgPSB2ZHVwX25fczE2KDApOwogCi0JICAgIC8qIFRoZSBjb25zdHJ1Y3RzIHdpdGggbG9jYWwgYmxvY2tzIGZvciByZWdpc3RlciBhc3NpZ25tZW50cwotCSAgICAgKiBhbmQgYXNtKCkgaW5zdHJ1Y3Rpb25zIGlzIHRvIG1ha2Uga2VlcCBhbnkgaGFyZCByZWdpc3RlcgotCSAgICAgKiBhc3NpZ25tZW50cyB0byBhcyBzbWFsbCBhIHNjb3BlIGFzIHBvc3NpYmxlLiBhbmQgdG8gYXZvaWQKLQkgICAgICogYnVybmluZyBjYWxsLXByZXNlcnZlZCBoYXJkIHJlZ2lzdGVycyBvbiB0aGUgdmxkL3ZzdCAKLQkgICAgICogaW5zdHJ1Y3Rpb25zLgotCSAgICAgKi8KKyAgICAgICAgLyogVGhlIGNvbnN0cnVjdHMgd2l0aCBsb2NhbCBibG9ja3MgZm9yIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisgICAgICAgICAqIGFuZCBhc20oKSBpbnN0cnVjdGlvbnMgaXMgdG8gbWFrZSBrZWVwIGFueSBoYXJkIHJlZ2lzdGVyCisgICAgICAgICAqIGFzc2lnbm1lbnRzIHRvIGFzIHNtYWxsIGEgc2NvcGUgYXMgcG9zc2libGUuIGFuZCB0byBhdm9pZAorICAgICAgICAgKiBidXJuaW5nIGNhbGwtcHJlc2VydmVkIGhhcmQgcmVnaXN0ZXJzIG9uIHRoZSB2bGQvdnN0CisgICAgICAgICAqIGluc3RydWN0aW9ucy4KKyAgICAgICAgICovCiAKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBpbnQxNng0X3QgeGxvLCB4aGksIHlsbywgeWhpOwogICAgICAgICAgICAgICAgIGludDE2eDRfdCB4MmxvLCB4MmhpLCB5MmxvLCB5MmhpOwogCiAgICAgICAgICAgICAgICAgLyogdmxkNCBkb2VzIHRoZSBkZS1pbnRlcmxlYXZpbmcgZm9yIHVzICovCi0JCXsKKyAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQxNng0X3QgdF94bG8gYXNtKCJkMCIpOwogICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQxNng0X3QgdF94aGkgYXNtKCJkMSIpOwogICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQxNng0X3QgdF95bG8gYXNtKCJkMiIpOwogICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQxNng0X3QgdF95aGkgYXNtKCJkMyIpOwogCi0gICAgICAgICAgICAgICAgICAgIGFzbSAoInZsZDQuMTYJe2QwLWQzfSxbJTRdICAvKiB4bG89JVAwIHhoaT0lUDEgeWxvPSVQMiB5aGk9JVAzICovIgorICAgICAgICAgICAgICAgICAgICBhc20gKCJ2bGQ0LjE2ICAgIHtkMC1kM30sWyU0XSAgLyogeGxvPSVQMCB4aGk9JVAxIHlsbz0lUDIgeWhpPSVQMyAqLyIKICAgICAgICAgICAgICAgICAgICAgICAgIDogIj13IiAodF94bG8pLCAiPXciICh0X3hoaSksICI9dyIgKHRfeWxvKSwgIj13IiAodF95aGkpCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAobXlzcmMpCiAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICB4bG8gPSB0X3hsbzsKLQkJICAgIHhoaSA9IHRfeGhpOwotCQkgICAgeWxvID0gdF95bG87Ci0JCSAgICB5aGkgPSB0X3loaTsKLQkJfQorICAgICAgICAgICAgeGxvID0gdF94bG87CisgICAgICAgICAgICB4aGkgPSB0X3hoaTsKKyAgICAgICAgICAgIHlsbyA9IHRfeWxvOworICAgICAgICAgICAgeWhpID0gdF95aGk7CisgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8qIGNsYW1wIFg+PjE2IChha2EgeGhpKSB0byAwLi5tYXhYICovCi0gICAgICAgICAgICAgICAgeGhpID0gdm1heF9zMTYoeGhpLCB6ZXJvNCk7CS8qIG5vdyAwLi4gKi8KLSAgICAgICAgICAgICAgICB4aGkgPSB2bWluX3MxNih4aGksIG1heFg0KTsJLyogbm93IDAuLm1heFggKi8KKyAgICAgICAgICAgICAgICB4aGkgPSB2bWF4X3MxNih4aGksIHplcm80KTsgICAgLyogbm93IDAuLiAqLworICAgICAgICAgICAgICAgIHhoaSA9IHZtaW5fczE2KHhoaSwgbWF4WDQpOyAgICAvKiBub3cgMC4ubWF4WCAqLwogCiAgICAgICAgICAgICAgICAgLyogY2xhbXAgWT4+MTYgKGFrYSB5aGkpIHRvIDAuLm1heFkgKi8KLSAgICAgICAgICAgICAgICB5aGkgPSB2bWF4X3MxNih5aGksIHplcm80KTsJLyogbm93IDAuLiAqLwotICAgICAgICAgICAgICAgIHloaSA9IHZtaW5fczE2KHloaSwgbWF4WTQpOwkvKiBub3cgMC4ubWF4WSAqLworICAgICAgICAgICAgICAgIHloaSA9IHZtYXhfczE2KHloaSwgemVybzQpOyAgICAvKiBub3cgMC4uICovCisgICAgICAgICAgICAgICAgeWhpID0gdm1pbl9zMTYoeWhpLCBtYXhZNCk7ICAgIC8qIG5vdyAwLi5tYXhZICovCiAKLQkJLyogZGVhbCB3aXRoIHRoZSBzZWNvbmQgc2V0IG9mIG51bWJlcnMgKi8KLQkJeworICAgICAgICAvKiBkZWFsIHdpdGggdGhlIHNlY29uZCBzZXQgb2YgbnVtYmVycyAqLworICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludDE2eDRfdCB0X3hsbyBhc20oImQ0Iik7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludDE2eDRfdCB0X3hoaSBhc20oImQ1Iik7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludDE2eDRfdCB0X3lsbyBhc20oImQ2Iik7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludDE2eDRfdCB0X3loaSBhc20oImQ3Iik7CiAKICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0ID09IDI1NiBiaXRzID09IDMyIGJ5dGVzID09IDggbG9uZ3MgPT0gMTYgc2hvcnRzICovCi0gICAgICAgICAgICAgICAgICAgIGFzbSAoInZsZDQuMTYJe2Q0LWQ3fSxbJTRdICAvKiB4bG89JVAwIHhoaT0lUDEgeWxvPSVQMiB5aGk9JVAzICovIgorICAgICAgICAgICAgICAgICAgICBhc20gKCJ2bGQ0LjE2ICAgIHtkNC1kN30sWyU0XSAgLyogeGxvPSVQMCB4aGk9JVAxIHlsbz0lUDIgeWhpPSVQMyAqLyIKICAgICAgICAgICAgICAgICAgICAgICAgIDogIj13IiAodF94bG8pLCAiPXciICh0X3hoaSksICI9dyIgKHRfeWxvKSwgIj13IiAodF95aGkpCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAobXlzcmMrMTYpCiAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICB4MmxvID0gdF94bG87Ci0JCSAgICB4MmhpID0gdF94aGk7Ci0JCSAgICB5MmxvID0gdF95bG87Ci0JCSAgICB5MmhpID0gdF95aGk7Ci0JCX0KKyAgICAgICAgICAgIHgybG8gPSB0X3hsbzsKKyAgICAgICAgICAgIHgyaGkgPSB0X3hoaTsKKyAgICAgICAgICAgIHkybG8gPSB0X3lsbzsKKyAgICAgICAgICAgIHkyaGkgPSB0X3loaTsKKyAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLyogY2xhbXAgdGhlIHNlY29uZCA0IGhlcmUgKi8KIAotCQlpZiAoMCkgeyBleHRlcm4gdm9pZCByYmUodm9pZCk7IHJiZSgpOyB9CisgICAgICAgIGlmICgwKSB7IGV4dGVybiB2b2lkIHJiZSh2b2lkKTsgcmJlKCk7IH0KIAogICAgICAgICAgICAgICAgIC8qIGNsYW1wIFg+PjE2IChha2EgeGhpKSB0byAwLi5tYXhYICovCi0gICAgICAgICAgICAgICAgeDJoaSA9IHZtYXhfczE2KHgyaGksIHplcm80KTsJLyogbm93IDAuLiAqLwotICAgICAgICAgICAgICAgIHgyaGkgPSB2bWluX3MxNih4MmhpLCBtYXhYNCk7CS8qIG5vdyAwLi5tYXhYICovCisgICAgICAgICAgICAgICAgeDJoaSA9IHZtYXhfczE2KHgyaGksIHplcm80KTsgICAgLyogbm93IDAuLiAqLworICAgICAgICAgICAgICAgIHgyaGkgPSB2bWluX3MxNih4MmhpLCBtYXhYNCk7ICAgIC8qIG5vdyAwLi5tYXhYICovCiAKICAgICAgICAgICAgICAgICAvKiBjbGFtcCBZPj4xNiAoYWthIHloaSkgdG8gMC4ubWF4WSAqLwotICAgICAgICAgICAgICAgIHkyaGkgPSB2bWF4X3MxNih5MmhpLCB6ZXJvNCk7CS8qIG5vdyAwLi4gKi8KLSAgICAgICAgICAgICAgICB5MmhpID0gdm1pbl9zMTYoeTJoaSwgbWF4WTQpOwkvKiBub3cgMC4ubWF4WSAqLworICAgICAgICAgICAgICAgIHkyaGkgPSB2bWF4X3MxNih5MmhpLCB6ZXJvNCk7ICAgIC8qIG5vdyAwLi4gKi8KKyAgICAgICAgICAgICAgICB5MmhpID0gdm1pbl9zMTYoeTJoaSwgbWF4WTQpOyAgICAvKiBub3cgMC4ubWF4WSAqLwogCiAgICAgICAgICAgICAgICAgLyogd2UncmUgc3RvcmluZyBhcyB7eCx5fXM6IHggaXMgWzBdLCB5IGlzIFsxXSAqLwogICAgICAgICAgICAgICAgIC8qIHdlJ2xsIHVzZSB2c3QyIHRvIG1ha2UgdGhpcyBoYXBwZW4gKi8KIAotCQl7CisgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50MTZ4NF90IG91dF94IGFzbSgiZDE2IikgPSB4aGk7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludDE2eDRfdCBvdXRfeSBhc20oImQxNyIpID0geWhpOwogCi0gICAgICAgICAgICAgICAgICAgIGFzbSAoInZzdDIuMTYJe2QxNi1kMTd9LFslMl0gIC8qIHhsbz0lUDAgeGhpPSVQMSAqLyIKLQkJCToKLQkJCTogInciIChvdXRfeCksICJ3IiAob3V0X3kpLCAiciIgKG15ZHN0KQotCQkJKTsKLQkJfQotCQl7CisgICAgICAgICAgICAgICAgICAgIGFzbSAoInZzdDIuMTYgICAge2QxNi1kMTd9LFslMl0gIC8qIHhsbz0lUDAgeGhpPSVQMSAqLyIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogInciIChvdXRfeCksICJ3IiAob3V0X3kpLCAiciIgKG15ZHN0KQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludDE2eDRfdCBvdXRfeCBhc20oImQxOCIpID0geDJoaTsKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50MTZ4NF90IG91dF95IGFzbSgiZDE5IikgPSB5MmhpOwogCi0gICAgICAgICAgICAgICAgICAgIGFzbSAoInZzdDIuMTYJe2QxOC1kMTl9LFslMl0gIC8qIHhsbz0lUDAgeGhpPSVQMSAqLyIKLQkJCToKLQkJCTogInciIChvdXRfeCksICJ3IiAob3V0X3kpLCAiciIgKG15ZHN0KzgpCi0JCQkpOwotCQl9CisgICAgICAgICAgICAgICAgICAgIGFzbSAoInZzdDIuMTYgICAge2QxOC1kMTl9LFslMl0gIC8qIHhsbz0lUDAgeGhpPSVQMSAqLyIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogInciIChvdXRfeCksICJ3IiAob3V0X3kpLCAiciIgKG15ZHN0KzgpCisgICAgICAgICAgICApOworICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvKiBYWFg6IGdjYyBpc24ndCBpbnRlcmxlYXZpbmcgdGhlc2Ugd2l0aCB0aGUgTkVPTiBvcHMKICAgICAgICAgICAgICAgICAgKiBidXQgaSB0aGluayB0aGF0IGFsbCB0aGUgc2NvcmVib2FyZGluZyB3b3JrcyBvdXQgKi8KLSAgICAgICAgICAgICAgICBjb3VudCAtPSA4OwkvKiA4IGl0ZXJhdGlvbnMgKi8KLSAgICAgICAgICAgICAgICBteXNyYyArPSAzMjsJLyogMTYgbG9uZ3MsIGFrYSAzMiBzaG9ydHMgKi8KLSAgICAgICAgICAgICAgICBteWRzdCArPSAxNjsJLyogMTYgc2hvcnRzLCBha2EgOCBsb25ncyAqLworICAgICAgICAgICAgICAgIGNvdW50IC09IDg7ICAgIC8qIDggaXRlcmF0aW9ucyAqLworICAgICAgICAgICAgICAgIG15c3JjICs9IDMyOyAgICAvKiAxNiBsb25ncywgYWthIDMyIHNob3J0cyAqLworICAgICAgICAgICAgICAgIG15ZHN0ICs9IDE2OyAgICAvKiAxNiBzaG9ydHMsIGFrYSA4IGxvbmdzICovCiAgICAgICAgICAgICB9IHdoaWxlIChjb3VudCA+PSA4KTsKICAgICAgICAgICAgIC8qIGdldCB4eSBhbmQgc3JjWFkgZml4ZWQgdXAgKi8KICAgICAgICAgICAgIHNyY1hZID0gKGNvbnN0IFNrRml4ZWQgKikgbXlzcmM7CkBAIC00MjMsMTAgKzQyMywxMCBAQAogICAgICAgICB9CiAKICNpZiBkZWZpbmVkKERFQlVHX1BFUlNQX05PRklMVEVSKQotCS8qIGZvciBjaGVja2luZyBvdXIgTkVPTi1wcm9kdWNlZCByZXN1bHRzIGFnYWluc3QgdmFuaWxsYSBjb2RlICovCi0JewotCSAgICBpbnQgYmFkID0gKC0xKTsKLQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiYXNlX2NvdW50OyBpKyspIHsKKyAgICAvKiBmb3IgY2hlY2tpbmcgb3VyIE5FT04tcHJvZHVjZWQgcmVzdWx0cyBhZ2FpbnN0IHZhbmlsbGEgY29kZSAqLworICAgIHsKKyAgICAgICAgaW50IGJhZCA9ICgtMSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmFzZV9jb3VudDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MzJfdCB2YWw7CiAgICAgICAgICAgICB2YWwgPSAoVElMRVlfUFJPQ0YgKGJhc2Vfc3JjWFlbaSAqIDIgKyAxXSwgbWF4WSkgPDwgMTYpIHwKICAgICAgICAgICAgICAgICAgICAgVElMRVhfUFJPQ0YgKGJhc2Vfc3JjWFlbaSAqIDIgKyAwXSwgbWF4WCk7CkBAIC00MzUsMTEgKzQzNSwxMSBAQAogICAgICAgICAgICAgICAgIGJhZCA9IGk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0JICAgIH0KLQkgICAgaWYgKGJhZCA+PSAwKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhZCA+PSAwKSB7CiAgICAgICAgICAgICBTa0RlYnVnZigiY2xhbXAtbm9maWx0ZXItcGVyc3AgZmFpbGVkIHBpZWNlICVkXG4iLCBiYWQpOwogICAgICAgICAgICAgU2tEZWJ1Z2YoIiAgICBtYXhYICUwOHggbWF4WSAlMDh4XG4iLCBtYXhYLCBtYXhZKTsKLSAgICAgICAgICAgIGJhZCAtPSAoYmFkICYgMHg3KTsJICAgICAgIC8qIGFsaWduICovCisgICAgICAgICAgICBiYWQgLT0gKGJhZCAmIDB4Nyk7ICAgICAgICAgICAvKiBhbGlnbiAqLwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJhZDsgaSA8IGJhZCArIDg7IGkrKykgewogICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbDsKICAgICAgICAgICAgICAgICB2YWwgPSAoVElMRVlfUFJPQ0YgKGJhc2Vfc3JjWFlbaSAqIDIgKyAxXSwgbWF4WSkgPDwgMTYpIHwKQEAgLTQ1MCwyMSArNDUwLDIxIEBACiAgICAgICAgICAgICAgICAgIGJhc2Vfc3JjWFlbaSAqIDIgKyAxXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTa0RlYnVnZiAoIi0tLVxuIik7Ci0JICAgIH0KKyAgICAgICAgfQogCi0JICAgIGlmIChlbmRfeHkgIT0geHkpIHsKKyAgICAgICAgaWYgKGVuZF94eSAhPSB4eSkgewogICAgICAgICAgICAgU2tEZWJ1Z2YoInh5IGVuZGVkIGF0ICUwOHgsIHNob3VsZCBiZSAlMDh4XG4iLCB4eSwgZW5kX3h5KTsKLQkgICAgfQotCSAgICBpZiAoZW5kX3NyY1hZICE9IHNyY1hZKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZF9zcmNYWSAhPSBzcmNYWSkgewogICAgICAgICAgICAgU2tEZWJ1Z2YoInNyY1hZIGVuZGVkIGF0ICUwOHgsIHNob3VsZCBiZSAlMDh4XG4iLCBzcmNYWSwKICAgICAgICAgICAgICAgICAgICAgICBlbmRfc3JjWFkpOwotCSAgICB9Ci0JfQorICAgICAgICB9CisgICAgfQogI2VuZGlmCiAgICAgfQogfQogCi0jdW5kZWYJREVCVUdfUEVSU1BfTk9GSUxURVIKKyN1bmRlZiAgICBERUJVR19QRVJTUF9OT0ZJTFRFUgogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtNDg5LDcgKzQ4OSw3IEBACiAgICAgU2tBU1NFUlQocy5mSW52S3kgPT0gMCk7CiAKICAgICBQUkVBTUJMRShzKTsKLSAgICAKKwogICAgIGNvbnN0IHVuc2lnbmVkIG1heFggPSBzLmZCaXRtYXAtPndpZHRoKCkgLSAxOwogICAgIGNvbnN0IFNrRml4ZWQgb25lID0gcy5mRmlsdGVyT25lWDsKICAgICBjb25zdCBTa0ZpeGVkIGR4ID0gcy5mSW52U3g7CkBAIC01MzQsNyArNTM0LDcgQEAKICAgICAgICAgd2lkZV9vbmUgPSB2ZHVwcV9uX3MzMihvbmUpOwogCiAgICAgICAgIHdoaWxlIChjb3VudCA+PSA0KSB7Ci0gICAgICAgICAgICAvKiBvcmlnaW5hbCBleHBhbmRzIHRvOiAKKyAgICAgICAgICAgIC8qIG9yaWdpbmFsIGV4cGFuZHMgdG86CiAgICAgICAgICAgICAgKiB1bnNpZ25lZCBpID0gU2tDbGFtcE1heCgoZikgPj4gMTYsIG1heCk7CiAgICAgICAgICAgICAgKiBpID0gKGkgPDwgNCkgfCAoKChmKSA+PiAxMikgJiAweEYpOwogICAgICAgICAgICAgICogcmV0dXJuIChpIDw8IDE0KSB8IChTa0NsYW1wTWF4KCgoZiArIG9uZSkpID4+IDE2LCBtYXgpKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICAgICAgICAgICAgY291bnQgLT0gNDsKICAgICAgICAgfQogICAgIH0KLSAgIAorCiAgICAgd2hpbGUgKC0tY291bnQgPj0gMCkgewogICAgICAgICAqeHkrKyA9IFBBQ0tfRklMVEVSX1hfTkFNRShmeCwgbWF4WCwgb25lIFBSRUFNQkxFX0FSR19YKTsKICAgICAgICAgZnggKz0gZHg7CkBAIC02MDAsMTMgKzYwMCwxMyBAQAogICAgIFNrQVNTRVJUKChzLmZJbnZUeXBlICYgfihTa01hdHJpeDo6a1RyYW5zbGF0ZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtTY2FsZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtBZmZpbmVfTWFzaykpID09IDApOwotICAgIAorCiAgICAgUFJFQU1CTEUocyk7CiAgICAgU2tQb2ludCBzcmNQdDsKICAgICBzLmZJbnZQcm9jKCpzLmZJbnZNYXRyaXgsCiAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHgpICsgU0tfU2NhbGFySGFsZiwKICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeSkgKyBTS19TY2FsYXJIYWxmLCAmc3JjUHQpOwotICAgIAorCiAgICAgU2tGaXhlZCBvbmVYID0gcy5mRmlsdGVyT25lWDsKICAgICBTa0ZpeGVkIG9uZVkgPSBzLmZGaWx0ZXJPbmVZOwogICAgIFNrRml4ZWQgZnggPSBTa1NjYWxhclRvRml4ZWQoc3JjUHQuZlgpIC0gKG9uZVggPj4gMSk7CkBAIC02MTUsMTQgKzYxNSwxNCBAQAogICAgIFNrRml4ZWQgZHkgPSBzLmZJbnZLeTsKICAgICB1bnNpZ25lZCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICB1bnNpZ25lZCBtYXhZID0gcy5mQml0bWFwLT5oZWlnaHQoKSAtIDE7Ci0gICAgCisKICAgICBpZiAoY291bnQgPj0gNCkgewogICAgICAgICBpbnQzMng0X3Qgd2lkZV9vbmUsIHdpZGVfaSwgd2lkZV9sbzsKICAgICAgICAgaW50MzJ4NF90IHdpZGVfZHgsIHdpZGVfZngsIHdpZGVfb25leCwgd2lkZV9meDE7CiAgICAgICAgIGludDMyeDRfdCB3aWRlX2R5LCB3aWRlX2Z5LCB3aWRlX29uZXksIHdpZGVfZnkxOwogCi0gICAgI3VuZGVmCUFGRklORV9ERUJVRwotICAgICNpZglkZWZpbmVkKEFGRklORV9ERUJVRykKKyAgICAjdW5kZWYgICAgQUZGSU5FX0RFQlVHCisgICAgI2lmICAgIGRlZmluZWQoQUZGSU5FX0RFQlVHKQogICAgICAgICBTa0ZpeGVkIGZ5cCA9IGZ5OwogICAgICAgICBTa0ZpeGVkIGZ4cCA9IGZ4OwogICAgICAgICB1aW50MzJfdCAqeHlwID0geHk7CkBAIC02NTAsNyArNjUwLDcgQEAKIAogICAgICAgICAgICAgLyogZG8gdGhlIFggc2lkZSwgdGhlbiB0aGUgWSBzaWRlLCB0aGVuIGludGVybGVhdmUgdGhlbSAqLwogCi0gICAgICAgICAgICAvKiBvcmlnaW5hbCBleHBhbmRzIHRvOiAKKyAgICAgICAgICAgIC8qIG9yaWdpbmFsIGV4cGFuZHMgdG86CiAgICAgICAgICAgICAgKiB1bnNpZ25lZCBpID0gU2tDbGFtcE1heCgoZikgPj4gMTYsIG1heCk7CiAgICAgICAgICAgICAgKiBpID0gKGkgPDwgNCkgfCAoKChmKSA+PiAxMikgJiAweEYpOwogICAgICAgICAgICAgICogcmV0dXJuIChpIDw8IDE0KSB8IChTa0NsYW1wTWF4KCgoZiArIG9uZSkpID4+IDE2LCBtYXgpKTsKQEAgLTY5NywxOSArNjk3LDE5IEBACiAgICAgICAgICAgICB3aWRlX3kgPSB2b3JycV9zMzIod2lkZV9pLCB3aWRlX2Z5MSk7CiAKICAgICAgICAgICAgIC8qIGludGVybGVhdmUgYXMgWVhZWFlYWVggYXMgcGFydCBvZiB0aGUgc3RvcmluZyAqLwotCSAgICB7CisgICAgICAgIHsKICAgICAgICAgICAgICAgICAvKiB2c3QyLjMyIG5lZWRzIHNpZGUtYnktc2lkZSByZWdpc3RlcnMgKi8KICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQzMng0X3QgdF94IGFzbSgicTEiKTsKICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQzMng0X3QgdF95IGFzbSgicTAiKTsKIAotCQl0X3ggPSB3aWRlX3g7IHRfeSA9IHdpZGVfeTsKLSAgICAgICAgICAgICAgICBhc20gKCJ2c3QyLjMyCXtxMC1xMX0sWyUyXSAgLyogeT0lcTAgeD0lcTEgKi8iCisgICAgICAgIHRfeCA9IHdpZGVfeDsgdF95ID0gd2lkZV95OworICAgICAgICAgICAgICAgIGFzbSAoInZzdDIuMzIgICAge3EwLXExfSxbJTJdICAvKiB5PSVxMCB4PSVxMSAqLyIKICAgICAgICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAgICA6ICJ3IiAodF95KSwgInciICh0X3gpLCAiciIgKHh5KQogICAgICAgICAgICAgICAgICAgICApOwotCSAgICB9CisgICAgICAgIH0KIAotICAgICNpZglkZWZpbmVkKEFGRklORV9ERUJVRykKKyAgICAjaWYgICAgZGVmaW5lZChBRkZJTkVfREVCVUcpCiAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgd2UncmUgZ29vZCBoZXJlIC0tIGNoZWNrIHRoZSA0IHdlIGp1c3Qgb3V0cHV0ICovCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaTw0O2krKykgewogICAgICAgICAgICAgdWludDMyX3QgdmFsOwpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICAgICAgICAgICBmeCArPSBkeCtkeCtkeCtkeDsKICAgICAgICAgICAgIHdpZGVfZnkgKz0gdmR1cHFfbl9zMzIoZHkrZHkrZHkrZHkpOwogICAgICAgICAgICAgZnkgKz0gZHkrZHkrZHkrZHk7Ci0gICAgICAgICAgICB4eSArPSA4OwkJLyogNCB4J3MsIDQgeSdzICovCisgICAgICAgICAgICB4eSArPSA4OyAgICAgICAgLyogNCB4J3MsIDQgeSdzICovCiAgICAgICAgICAgICBjb3VudCAtPSA0OwogICAgICAgICB9CiAgICAgfQpAQCAtNzg2LDIwICs3ODYsMjAgQEAKICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgIC8qIGxvYWQgc3JjOiAgeC15LXgteS14LXkteC15ICovCi0JCXsKLQkJICAgIHJlZ2lzdGVyIGludDMyeDRfdCBxMCBhc20gKCJxMCIpOwotCQkgICAgcmVnaXN0ZXIgaW50MzJ4NF90IHExIGFzbSAoInExIik7Ci0gICAgICAgICAgICAgICAgICAgIGFzbSAoInZsZDIuMzIJe3EwLXExfSxbJTJdICAvKiB4PSVxMCB5PSVxMSAqLyIKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXIgaW50MzJ4NF90IHEwIGFzbSAoInEwIik7CisgICAgICAgICAgICByZWdpc3RlciBpbnQzMng0X3QgcTEgYXNtICgicTEiKTsKKyAgICAgICAgICAgICAgICAgICAgYXNtICgidmxkMi4zMiAgICB7cTAtcTF9LFslMl0gIC8qIHg9JXEwIHk9JXExICovIgogICAgICAgICAgICAgICAgICAgICAgICAgIDogIj13IiAocTApLCAiPXciIChxMSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoc3JjWFkpKTsKLQkJICAgIHdpZGVfeCA9IHEwOyB3aWRlX3kgPSBxMTsKLQkJfQorICAgICAgICAgICAgd2lkZV94ID0gcTA7IHdpZGVfeSA9IHExOworICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvKiBkbyB0aGUgWCBzaWRlLCB0aGVuIHRoZSBZIHNpZGUsIHRoZW4gaW50ZXJsZWF2ZSB0aGVtICovCiAKICAgICAgICAgICAgICAgICB3aWRlX3ggPSB2c3VicV9zMzIod2lkZV94LCB2ZHVwcV9uX3MzMiAob25lWD4+MSkpOwogCi0gICAgICAgICAgICAgICAgLyogb3JpZ2luYWwgZXhwYW5kcyB0bzogCisgICAgICAgICAgICAgICAgLyogb3JpZ2luYWwgZXhwYW5kcyB0bzoKICAgICAgICAgICAgICAgICAgKiB1bnNpZ25lZCBpID0gU2tDbGFtcE1heCgoZikgPj4gMTYsIG1heCk7CiAgICAgICAgICAgICAgICAgICogaSA9IChpIDw8IDQpIHwgKCgoZikgPj4gMTIpICYgMHhGKTsKICAgICAgICAgICAgICAgICAgKiByZXR1cm4gKGkgPDwgMTQpIHwgKFNrQ2xhbXBNYXgoKChmICsgb25lKSkgPj4gMTYsIG1heCkpOwpAQCAtODYwLDE0ICs4NjAsMTQgQEAKICAgICAgICAgICAgICAgICBjb3VudCAtPSA0OwogCiAgICAgICAgICAgICAgICAgLyogc3RvcmUgaW50ZXJsZWF2ZWQgYXMgeS14LXkteC15LXgteS14IChOQiAhPSByZWFkIG9yZGVyKSAqLwotCQl7Ci0JCSAgICByZWdpc3RlciBpbnQzMng0X3QgcTAgYXNtICgicTAiKSA9IHdpZGVfeTsKLQkJICAgIHJlZ2lzdGVyIGludDMyeDRfdCBxMSBhc20gKCJxMSIpID0gd2lkZV94OwotCQkJCi0gICAgICAgICAgICAgICAgICAgIGFzbSAoInZzdDIuMzIJe3EwLXExfSxbJTJdICAvKiB5PSVxMCB4PSVxMSAqLyIKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXIgaW50MzJ4NF90IHEwIGFzbSAoInEwIikgPSB3aWRlX3k7CisgICAgICAgICAgICByZWdpc3RlciBpbnQzMng0X3QgcTEgYXNtICgicTEiKSA9IHdpZGVfeDsKKworICAgICAgICAgICAgICAgICAgICBhc20gKCJ2c3QyLjMyICAgIHtxMC1xMX0sWyUyXSAgLyogeT0lcTAgeD0lcTEgKi8iCiAgICAgICAgICAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICAgICAgICAgICA6ICJ3IiAocTApLCAidyIgKHExKSwgInIiICh4eSkpOwotCQl9CisgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8qIG9uIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLwogICAgICAgICAgICAgICAgIC8qIGNvdW50LCBzcmNYWSBhcmUgaGFuZGxlZCBhYm92ZSAqLwpAQCAtODc2LDggKzg3Niw4IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiB3YXMgZG8td2hpbGU7IE5FT04gY29kZSBpbnZhbGlkYXRlcyBvcmlnaW5hbCBjb3VudD4wIGFzc3VtcHRpb24gKi8KLSAgICAgICAgd2hpbGUgKC0tY291bnQgPj0gMCkgeyAKLQkgICAgLyogTkI6IHdlIHJlYWQgeC95LCB3ZSB3cml0ZSB5L3ggKi8KKyAgICAgICAgd2hpbGUgKC0tY291bnQgPj0gMCkgeworICAgICAgICAvKiBOQjogd2UgcmVhZCB4L3ksIHdlIHdyaXRlIHkveCAqLwogICAgICAgICAgICAgKnh5KysgPSBQQUNLX0ZJTFRFUl9ZX05BTUUoc3JjWFlbMV0gLSAob25lWSA+PiAxKSwgbWF4WSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZVkgUFJFQU1CTEVfQVJHX1kpOwogICAgICAgICAgICAgKnh5KysgPSBQQUNLX0ZJTFRFUl9YX05BTUUoc3JjWFlbMF0gLSAob25lWCA+PiAxKSwgbWF4WCwKZGlmZiAtLWdpdCBhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX21hdHJpeF9yZXBlYXRfbmVvbi5oIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4X3JlcGVhdF9uZW9uLmgKaW5kZXggZDA1YmVhYi4uNjE1ZjNmZiAxMDA2NDQKLS0tIGEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4X3JlcGVhdF9uZW9uLmgKKysrIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4X3JlcGVhdF9uZW9uLmgKQEAgLTMsOSArMyw5IEBACiAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogICovCi0gCisKIC8qCi0gKiBNb2RpZmljYXRpb25zIGRvbmUgaW4taG91c2UgYXQgTW90b3JvbGEgCisgKiBNb2RpZmljYXRpb25zIGRvbmUgaW4taG91c2UgYXQgTW90b3JvbGEKICAqCiAgKiB0aGlzIGlzIGEgY2xvbmUgb2YgU2tCaXRtYXBQcm9jU3RhdGVfbWF0cml4LmgKICAqIGFuZCBoYXMgYmVlbiB0dW5lZCB0byB3b3JrIHdpdGggdGhlIE5FT04gdW5pdC4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgKnh5KysgPSBUSUxFWV9QUk9DRihmeCwgbWF4WSk7CiAgICAgICAgIGZ4ID0gU2tTY2FsYXJUb0ZpeGVkKHB0LmZYKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoMCA9PSBtYXhYKSB7CiAgICAgICAgIC8vIGFsbCBvZiB0aGUgZm9sbG93aW5nIFggdmFsdWVzIG11c3QgYmUgMAogICAgICAgICBtZW1zZXQoeHksIDAsIGNvdW50ICogc2l6ZW9mKHVpbnQxNl90KSk7CkBAIC05MSw2MiArOTEsNjIgQEAKICAgICB7CiAgICAgICAgIGludCBpOwogCi0JLyogUkJFOiB2ZXJ5IG11Y2ggbGlrZSBkb25lIGluIGRlY2FsX25vZmlsdGVyICwKLQkgKiBidXQgc29tZSBwcm9jZXNzaW5nIG9mIHRoZSAnZngnIGluZm9ybWF0aW9uIAorICAgIC8qIFJCRTogdmVyeSBtdWNoIGxpa2UgZG9uZSBpbiBkZWNhbF9ub2ZpbHRlciAsCisgICAgICogYnV0IHNvbWUgcHJvY2Vzc2luZyBvZiB0aGUgJ2Z4JyBpbmZvcm1hdGlvbgogICAgICAgICAgKiBUSUxFWF9QUk9DRihmeCwgbWF4KSAgICAoKChmeCkgJiAweEZGRkYpICogKChtYXgpICsgMSkgPj4gMTYpCi0JICovCi0JaWYgKGNvdW50ID49IDgpIHsKLQkgICAgLyogU2tGaXhlZCBpcyAxNi4xNiBmaXhlZCBwb2ludCAqLwotCSAgICBTa0ZpeGVkIGR4MiA9IGR4K2R4OwotCSAgICBTa0ZpeGVkIGR4NCA9IGR4MitkeDI7Ci0JICAgIFNrRml4ZWQgZHg4ID0gZHg0K2R4NDsKKyAgICAgKi8KKyAgICBpZiAoY291bnQgPj0gOCkgeworICAgICAgICAvKiBTa0ZpeGVkIGlzIDE2LjE2IGZpeGVkIHBvaW50ICovCisgICAgICAgIFNrRml4ZWQgZHgyID0gZHgrZHg7CisgICAgICAgIFNrRml4ZWQgZHg0ID0gZHgyK2R4MjsKKyAgICAgICAgU2tGaXhlZCBkeDggPSBkeDQrZHg0OwogCi0JICAgIC8qIG5vdyBidWlsZCBmeC9meCtkeC9meCsyZHgvZngrM2R4ICovCi0JICAgIFNrRml4ZWQgZngxLCBmeDIsIGZ4MzsKLQkgICAgaW50MzJ4Ml90IGxvd2VyLCB1cHBlcjsKLQkgICAgaW50MzJ4NF90IGxiYXNlLCBoYmFzZTsKLQkgICAgaW50MTZfdCAqZHN0MTYgPSAoaW50MTZfdCAqKXh5OworICAgICAgICAvKiBub3cgYnVpbGQgZngvZngrZHgvZngrMmR4L2Z4KzNkeCAqLworICAgICAgICBTa0ZpeGVkIGZ4MSwgZngyLCBmeDM7CisgICAgICAgIGludDMyeDJfdCBsb3dlciwgdXBwZXI7CisgICAgICAgIGludDMyeDRfdCBsYmFzZSwgaGJhc2U7CisgICAgICAgIGludDE2X3QgKmRzdDE2ID0gKGludDE2X3QgKil4eTsKIAotCSAgICBmeDEgPSBmeCtkeDsKLQkgICAgZngyID0gZngxK2R4OwotCSAgICBmeDMgPSBmeDIrZHg7CisgICAgICAgIGZ4MSA9IGZ4K2R4OworICAgICAgICBmeDIgPSBmeDErZHg7CisgICAgICAgIGZ4MyA9IGZ4MitkeDsKIAotCSAgICBsYmFzZSA9IHZkdXBxX25fczMyKGZ4KTsKLQkgICAgbGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeDEsIGxiYXNlLCAxKTsKLQkgICAgbGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeDIsIGxiYXNlLCAyKTsKLQkgICAgbGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeDMsIGxiYXNlLCAzKTsKLQkgICAgaGJhc2UgPSB2YWRkcV9zMzIobGJhc2UsIHZkdXBxX25fczMyKGR4NCkpOworICAgICAgICBsYmFzZSA9IHZkdXBxX25fczMyKGZ4KTsKKyAgICAgICAgbGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeDEsIGxiYXNlLCAxKTsKKyAgICAgICAgbGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeDIsIGxiYXNlLCAyKTsKKyAgICAgICAgbGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeDMsIGxiYXNlLCAzKTsKKyAgICAgICAgaGJhc2UgPSB2YWRkcV9zMzIobGJhc2UsIHZkdXBxX25fczMyKGR4NCkpOwogCi0JICAgIC8qIHN0b3JlICYgYnVtcCAqLwotCSAgICBkbwotCSAgICB7Ci0JICAgICAgICBpbnQzMng0X3QgbG91dDsKLQkJaW50MzJ4NF90IGhvdXQ7Ci0JCWludDE2eDhfdCBoaTE2OworICAgICAgICAvKiBzdG9yZSAmIGJ1bXAgKi8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgaW50MzJ4NF90IGxvdXQ7CisgICAgICAgIGludDMyeDRfdCBob3V0OworICAgICAgICBpbnQxNng4X3QgaGkxNjsKIAotICAgICAgICAgCS8qIFRJTEVYX1BST0NGKGZ4LCBtYXgpICgoKGZ4KSYweEZGRkYpKigobWF4KSsxKT4+IDE2KSAqLwotCQkvKiBtYXNrIHRvIGxvdyAxNiBbd291bGQgbGlrZSB0byB1c2UgdXpwIHRyaWNrcykgKi8KLQkgICAgICAgIGxvdXQgPSB2YW5kcV9zMzIobGJhc2UsIHZkdXBxX25fczMyKDB4ZmZmZikpOwotCSAgICAgICAgaG91dCA9IHZhbmRxX3MzMihoYmFzZSwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7Ci0JCS8qIGJhcmUgbXVsdGlwbGljYXRpb24sIG5vdCBTa0ZpeGVkTXVsICovCi0JCWxvdXQgPSB2bXVscV9zMzIobG91dCwgdmR1cHFfbl9zMzIobWF4WCsxKSk7Ci0JCWhvdXQgPSB2bXVscV9zMzIoaG91dCwgdmR1cHFfbl9zMzIobWF4WCsxKSk7CisgICAgICAgICAgICAgLyogVElMRVhfUFJPQ0YoZngsIG1heCkgKCgoZngpJjB4RkZGRikqKChtYXgpKzEpPj4gMTYpICovCisgICAgICAgIC8qIG1hc2sgdG8gbG93IDE2IFt3b3VsZCBsaWtlIHRvIHVzZSB1enAgdHJpY2tzKSAqLworICAgICAgICAgICAgbG91dCA9IHZhbmRxX3MzMihsYmFzZSwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7CisgICAgICAgICAgICBob3V0ID0gdmFuZHFfczMyKGhiYXNlLCB2ZHVwcV9uX3MzMigweGZmZmYpKTsKKyAgICAgICAgLyogYmFyZSBtdWx0aXBsaWNhdGlvbiwgbm90IFNrRml4ZWRNdWwgKi8KKyAgICAgICAgbG91dCA9IHZtdWxxX3MzMihsb3V0LCB2ZHVwcV9uX3MzMihtYXhYKzEpKTsKKyAgICAgICAgaG91dCA9IHZtdWxxX3MzMihob3V0LCB2ZHVwcV9uX3MzMihtYXhYKzEpKTsKIAotCQkvKiBleHRyYWN0aW9uLCB1c2luZyB1enAgKi8KLQkJLyogdGhpcyBpcyBvayAtLSB3ZSB3YW50IGFsbCBoaShsb3V0KXMgdGhlbiBhbGwgaGkoaG91dClzICovCi0JCWFzbSAoInZ1enBxLjE2ICVxMCwgJXExIiA6ICIrdyIgKGxvdXQpLCAiK3ciIChob3V0KSk7Ci0JCWhpMTYgPSB2cmVpbnRlcnByZXRxX3MxNl9zMzIoaG91dCk7Ci0JCXZzdDFxX3MxNihkc3QxNiwgaGkxNik7CisgICAgICAgIC8qIGV4dHJhY3Rpb24sIHVzaW5nIHV6cCAqLworICAgICAgICAvKiB0aGlzIGlzIG9rIC0tIHdlIHdhbnQgYWxsIGhpKGxvdXQpcyB0aGVuIGFsbCBoaShob3V0KXMgKi8KKyAgICAgICAgYXNtICgidnV6cHEuMTYgJXEwLCAlcTEiIDogIit3IiAobG91dCksICIrdyIgKGhvdXQpKTsKKyAgICAgICAgaGkxNiA9IHZyZWludGVycHJldHFfczE2X3MzMihob3V0KTsKKyAgICAgICAgdnN0MXFfczE2KGRzdDE2LCBoaTE2KTsKIAotCQkvKiBidW1wIG91ciBiYXNlIG9uIHRvIHRoZSBuZXh0ICovCi0JCWxiYXNlID0gdmFkZHFfczMyIChsYmFzZSwgdmR1cHFfbl9zMzIoZHg4KSk7Ci0JCWhiYXNlID0gdmFkZHFfczMyIChoYmFzZSwgdmR1cHFfbl9zMzIoZHg4KSk7Ci0JCWRzdDE2ICs9IDg7Ci0JCWNvdW50IC09IDg7Ci0JCWZ4ICs9IGR4ODsKLQkgICAgfSB3aGlsZSAoY291bnQgPj0gOCk7Ci0JICAgIHh5ID0gKHVpbnQzMl90ICopIGRzdDE2OwotCX0KKyAgICAgICAgLyogYnVtcCBvdXIgYmFzZSBvbiB0byB0aGUgbmV4dCAqLworICAgICAgICBsYmFzZSA9IHZhZGRxX3MzMiAobGJhc2UsIHZkdXBxX25fczMyKGR4OCkpOworICAgICAgICBoYmFzZSA9IHZhZGRxX3MzMiAoaGJhc2UsIHZkdXBxX25fczMyKGR4OCkpOworICAgICAgICBkc3QxNiArPSA4OworICAgICAgICBjb3VudCAtPSA4OworICAgICAgICBmeCArPSBkeDg7CisgICAgICAgIH0gd2hpbGUgKGNvdW50ID49IDgpOworICAgICAgICB4eSA9ICh1aW50MzJfdCAqKSBkc3QxNjsKKyAgICB9CiAgICAgICAgIHVpbnQxNl90KiB4eCA9ICh1aW50MTZfdCopeHk7CiAgICAgICAgIGZvciAoaSA9IGNvdW50OyBpID4gMDsgLS1pKSB7CiAgICAgICAgICAgICAqeHgrKyA9IFRJTEVYX1BST0NGKGZ4LCBtYXhYKTsgZnggKz0gZHg7CkBAIC0xNjUsMTMgKzE2NSwxMyBAQAogICAgIFNrQVNTRVJUKChzLmZJbnZUeXBlICYgfihTa01hdHJpeDo6a1RyYW5zbGF0ZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtTY2FsZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtBZmZpbmVfTWFzaykpID09IDApOwotICAgIAorCiAgICAgUFJFQU1CTEUocyk7CiAgICAgU2tQb2ludCBzcmNQdDsKICAgICBzLmZJbnZQcm9jKCpzLmZJbnZNYXRyaXgsCiAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHgpICsgU0tfU2NhbGFySGFsZiwKICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeSkgKyBTS19TY2FsYXJIYWxmLCAmc3JjUHQpOwotICAgIAorCiAgICAgU2tGaXhlZCBmeCA9IFNrU2NhbGFyVG9GaXhlZChzcmNQdC5mWCk7CiAgICAgU2tGaXhlZCBmeSA9IFNrU2NhbGFyVG9GaXhlZChzcmNQdC5mWSk7CiAgICAgU2tGaXhlZCBkeCA9IHMuZkludlN4OwpAQCAtMTg2LDY1ICsxODYsNjUgQEAKICNlbmRpZgogCiAKLQlpZiAoMCkgeyBleHRlcm4gdm9pZCByYmUodm9pZCk7IHJiZSgpOyB9CisgICAgaWYgKDApIHsgZXh0ZXJuIHZvaWQgcmJlKHZvaWQpOyByYmUoKTsgfQogCi0JLyogUkJFOiBiZW5jaG1hcmtzIHNob3cgdGhpcyBlYXRzIHVwIHRpbWU7IGNhbiB3ZSBuZW9uaXplIGl0PyAqLwotCS8qIFJCRTogdmVyeSBtdWNoIGxpa2UgZG9uZSBpbiBkZWNhbF9ub2ZpbHRlciAsCi0JICogYnV0IHNvbWUgcHJvY2Vzc2luZyBvZiB0aGUgJ2Z4JyBpbmZvcm1hdGlvbiAKKyAgICAvKiBSQkU6IGJlbmNobWFya3Mgc2hvdyB0aGlzIGVhdHMgdXAgdGltZTsgY2FuIHdlIG5lb25pemUgaXQ/ICovCisgICAgLyogUkJFOiB2ZXJ5IG11Y2ggbGlrZSBkb25lIGluIGRlY2FsX25vZmlsdGVyICwKKyAgICAgKiBidXQgc29tZSBwcm9jZXNzaW5nIG9mIHRoZSAnZngnIGluZm9ybWF0aW9uCiAgICAgICAgICAqIFRJTEVYX1BST0NGKGZ4LCBtYXgpICAgICgoKGZ4KSAmIDB4RkZGRikgKiAoKG1heCkgKyAxKSA+PiAxNikKLQkgKi8KLQlpZiAoY291bnQgPj0gNCkgewotCSAgICAvKiBTa0ZpeGVkIGlzIDE2LjE2IGZpeGVkIHBvaW50ICovCi0JICAgIFNrRml4ZWQgZHg0ID0gZHgqNDsKLQkgICAgU2tGaXhlZCBkeTQgPSBkeSo0OworICAgICAqLworICAgIGlmIChjb3VudCA+PSA0KSB7CisgICAgICAgIC8qIFNrRml4ZWQgaXMgMTYuMTYgZml4ZWQgcG9pbnQgKi8KKyAgICAgICAgU2tGaXhlZCBkeDQgPSBkeCo0OworICAgICAgICBTa0ZpeGVkIGR5NCA9IGR5KjQ7CiAKLQkgICAgLyogbm93IGJ1aWxkIGZ4L2Z4K2R4L2Z4KzJkeC9meCszZHggKi8KLQkgICAgaW50MzJ4Ml90IGxvd2VyLCB1cHBlcjsKLQkgICAgaW50MzJ4NF90IHhiYXNlLCB5YmFzZTsKLQkgICAgaW50MTZfdCAqZHN0MTYgPSAoaW50MTZfdCAqKXh5OworICAgICAgICAvKiBub3cgYnVpbGQgZngvZngrZHgvZngrMmR4L2Z4KzNkeCAqLworICAgICAgICBpbnQzMngyX3QgbG93ZXIsIHVwcGVyOworICAgICAgICBpbnQzMng0X3QgeGJhc2UsIHliYXNlOworICAgICAgICBpbnQxNl90ICpkc3QxNiA9IChpbnQxNl90ICopeHk7CiAKLQkgICAgLyogc3ludGhlc2l6ZSA0eCBmb3IgYm90aCBYIGFuZCBZICovCi0JICAgIHhiYXNlID0gdmR1cHFfbl9zMzIoZngpOwotCSAgICB4YmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4K2R4LCB4YmFzZSwgMSk7Ci0JICAgIHhiYXNlID0gdnNldHFfbGFuZV9zMzIoZngrZHgrZHgsIHhiYXNlLCAyKTsKLQkgICAgeGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeCtkeCtkeCtkeCwgeGJhc2UsIDMpOworICAgICAgICAvKiBzeW50aGVzaXplIDR4IGZvciBib3RoIFggYW5kIFkgKi8KKyAgICAgICAgeGJhc2UgPSB2ZHVwcV9uX3MzMihmeCk7CisgICAgICAgIHhiYXNlID0gdnNldHFfbGFuZV9zMzIoZngrZHgsIHhiYXNlLCAxKTsKKyAgICAgICAgeGJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeCtkeCtkeCwgeGJhc2UsIDIpOworICAgICAgICB4YmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ4K2R4K2R4K2R4LCB4YmFzZSwgMyk7CiAKLQkgICAgeWJhc2UgPSB2ZHVwcV9uX3MzMihmeSk7Ci0JICAgIHliYXNlID0gdnNldHFfbGFuZV9zMzIoZnkrZHksIHliYXNlLCAxKTsKLQkgICAgeWJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeStkeStkeSwgeWJhc2UsIDIpOwotCSAgICB5YmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ5K2R5K2R5K2R5LCB5YmFzZSwgMyk7CisgICAgICAgIHliYXNlID0gdmR1cHFfbl9zMzIoZnkpOworICAgICAgICB5YmFzZSA9IHZzZXRxX2xhbmVfczMyKGZ5K2R5LCB5YmFzZSwgMSk7CisgICAgICAgIHliYXNlID0gdnNldHFfbGFuZV9zMzIoZnkrZHkrZHksIHliYXNlLCAyKTsKKyAgICAgICAgeWJhc2UgPSB2c2V0cV9sYW5lX3MzMihmeStkeStkeStkeSwgeWJhc2UsIDMpOwogCi0JICAgIC8qIHN0b3JlICYgYnVtcCAqLwotCSAgICBkbyB7Ci0JICAgICAgICBpbnQzMng0X3QgeG91dDsKKyAgICAgICAgLyogc3RvcmUgJiBidW1wICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGludDMyeDRfdCB4b3V0OwogICAgICAgICAgICAgaW50MzJ4NF90IHlvdXQ7CiAgICAgICAgICAgICBpbnQxNng4X3QgaGkxNjsKIAotICAgICAgICAgCS8qIFRJTEVYX1BST0NGKGZ4LCBtYXgpICgoKGZ4KSYweEZGRkYpKigobWF4KSsxKT4+IDE2KSAqLwotCQkvKiBtYXNrIHRvIGxvdyAxNiBbd291bGQgbGlrZSB0byB1c2UgdXpwIHRyaWNrcykgKi8KLQkgICAgICAgIHhvdXQgPSB2YW5kcV9zMzIoeGJhc2UsIHZkdXBxX25fczMyKDB4ZmZmZikpOwotCSAgICAgICAgeW91dCA9IHZhbmRxX3MzMih5YmFzZSwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7Ci0JCS8qIGJhcmUgbXVsdGlwbGljYXRpb24sIG5vdCBTa0ZpeGVkTXVsICovCi0JCXhvdXQgPSB2bXVscV9zMzIoeG91dCwgdmR1cHFfbl9zMzIobWF4WCsxKSk7Ci0JCXlvdXQgPSB2bXVscV9zMzIoeW91dCwgdmR1cHFfbl9zMzIobWF4WSsxKSk7CisgICAgICAgICAgICAgLyogVElMRVhfUFJPQ0YoZngsIG1heCkgKCgoZngpJjB4RkZGRikqKChtYXgpKzEpPj4gMTYpICovCisgICAgICAgIC8qIG1hc2sgdG8gbG93IDE2IFt3b3VsZCBsaWtlIHRvIHVzZSB1enAgdHJpY2tzKSAqLworICAgICAgICAgICAgeG91dCA9IHZhbmRxX3MzMih4YmFzZSwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7CisgICAgICAgICAgICB5b3V0ID0gdmFuZHFfczMyKHliYXNlLCB2ZHVwcV9uX3MzMigweGZmZmYpKTsKKyAgICAgICAgLyogYmFyZSBtdWx0aXBsaWNhdGlvbiwgbm90IFNrRml4ZWRNdWwgKi8KKyAgICAgICAgeG91dCA9IHZtdWxxX3MzMih4b3V0LCB2ZHVwcV9uX3MzMihtYXhYKzEpKTsKKyAgICAgICAgeW91dCA9IHZtdWxxX3MzMih5b3V0LCB2ZHVwcV9uX3MzMihtYXhZKzEpKTsKIAotCQkvKiBwdXQgaGkxNiBmcm9tIHhvdXQgb3ZlciBsb3cxNiBmcm9tIHlvdXQgKi8KLQkJeW91dCA9IHZzcmlxX25fczMyKHlvdXQsIHhvdXQsIDE2KTsKKyAgICAgICAgLyogcHV0IGhpMTYgZnJvbSB4b3V0IG92ZXIgbG93MTYgZnJvbSB5b3V0ICovCisgICAgICAgIHlvdXQgPSB2c3JpcV9uX3MzMih5b3V0LCB4b3V0LCAxNik7CiAKLQkJLyogYW5kIHRoZW4geW91dCBoYXMgdGhlIGludGVybGVhdmVkIHVwcGVyIDE2J3MgKi8KLQkJaGkxNiA9IHZyZWludGVycHJldHFfczE2X3MzMih5b3V0KTsKLQkJdnN0MXFfczE2KGRzdDE2LCBoaTE2KTsKKyAgICAgICAgLyogYW5kIHRoZW4geW91dCBoYXMgdGhlIGludGVybGVhdmVkIHVwcGVyIDE2J3MgKi8KKyAgICAgICAgaGkxNiA9IHZyZWludGVycHJldHFfczE2X3MzMih5b3V0KTsKKyAgICAgICAgdnN0MXFfczE2KGRzdDE2LCBoaTE2KTsKIAotCQkvKiBidW1wIHByZXNlcnZlZCBiYXNlICYgb24gdG8gdGhlIG5leHQgKi8KLQkJeGJhc2UgPSB2YWRkcV9zMzIgKHhiYXNlLCB2ZHVwcV9uX3MzMihkeDQpKTsKLQkJeWJhc2UgPSB2YWRkcV9zMzIgKHliYXNlLCB2ZHVwcV9uX3MzMihkeTQpKTsKLQkJZHN0MTYgKz0gODsJLyogOCB4MTYgYWthIDR4MzIgKi8KLQkJY291bnQgLT0gNDsKLQkJZnggKz0gZHg0OwotCQlmeSArPSBkeTQ7Ci0JICAgIH0gd2hpbGUgKGNvdW50ID49IDQpOwotCSAgICB4eSA9ICh1aW50MzJfdCAqKSBkc3QxNjsKLQl9CisgICAgICAgIC8qIGJ1bXAgcHJlc2VydmVkIGJhc2UgJiBvbiB0byB0aGUgbmV4dCAqLworICAgICAgICB4YmFzZSA9IHZhZGRxX3MzMiAoeGJhc2UsIHZkdXBxX25fczMyKGR4NCkpOworICAgICAgICB5YmFzZSA9IHZhZGRxX3MzMiAoeWJhc2UsIHZkdXBxX25fczMyKGR5NCkpOworICAgICAgICBkc3QxNiArPSA4OyAgICAvKiA4IHgxNiBha2EgNHgzMiAqLworICAgICAgICBjb3VudCAtPSA0OworICAgICAgICBmeCArPSBkeDQ7CisgICAgICAgIGZ5ICs9IGR5NDsKKyAgICAgICAgfSB3aGlsZSAoY291bnQgPj0gNCk7CisgICAgICAgIHh5ID0gKHVpbnQzMl90ICopIGRzdDE2OworICAgIH0KIAogI2lmIDAKICAgICAvKiBkaWFnbm9zdGljcy4uLiBzZWUgd2hldGhlciB3ZSBhZ3JlZSB3aXRoIHRoZSBORU9OIGNvZGUgKi8KQEAgLTI1MywxMSArMjUzLDExIEBACiAgICAgaW50IG15aSA9ICgtMSk7CiAgICAgU2tGaXhlZCBvZnggPSBiZngsIG9meT0gYmZ5LCBvZHg9IGJkeCwgb2R5PSBiZHk7CiAgICAgZm9yIChteWkgPSBvY291bnQ7IG15aSA+IDA7IC0tbXlpKSB7Ci0JdWludDMyX3QgdmFsID0gKFRJTEVZX1BST0NGKG9meSwgbWF4WSkgPDwgMTYpIHwgVElMRVhfUFJPQ0Yob2Z4LCBtYXhYKTsKLQlpZiAodmFsICE9ICpteXh5KyspIHsKLQkJYmFkKys7Ci0JCWJyZWFrOwotCX0KKyAgICB1aW50MzJfdCB2YWwgPSAoVElMRVlfUFJPQ0Yob2Z5LCBtYXhZKSA8PCAxNikgfCBUSUxFWF9QUk9DRihvZngsIG1heFgpOworICAgIGlmICh2YWwgIT0gKm15eHkrKykgeworICAgICAgICBiYWQrKzsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICBvZnggKz0gb2R4OyBvZnkgKz0gb2R5OwogICAgIH0KICAgICBpZiAoYmFkKSB7CkBAIC0yNzAsOCArMjcwLDggQEAKICNlbmRpZgogCiAgICAgZm9yIChpbnQgaSA9IGNvdW50OyBpID4gMDsgLS1pKSB7Ci0JLyogZngsIGZ5LCBkeCwgZHkgYXJlIGFsbCAzMiBiaXQgMTYuMTYgZml4ZWQgcG9pbnQgKi8KLQkvKiAoKChmeCkgJiAweEZGRkYpICogKChtYXgpICsgMSkgPj4gMTYpICovCisgICAgLyogZngsIGZ5LCBkeCwgZHkgYXJlIGFsbCAzMiBiaXQgMTYuMTYgZml4ZWQgcG9pbnQgKi8KKyAgICAvKiAoKChmeCkgJiAweEZGRkYpICogKChtYXgpICsgMSkgPj4gMTYpICovCiAgICAgICAgICp4eSsrID0gKFRJTEVZX1BST0NGKGZ5LCBtYXhZKSA8PCAxNikgfCBUSUxFWF9QUk9DRihmeCwgbWF4WCk7CiAgICAgICAgIGZ4ICs9IGR4OyBmeSArPSBkeTsKICAgICB9CkBAIC0yODEsMTEwICsyODEsMTEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBTS19SRVNUUklDVCB4eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVChzLmZJbnZUeXBlICYgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKTsKLSAgICAKKwogICAgIFBSRUFNQkxFKHMpOwogICAgIGludCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICBpbnQgbWF4WSA9IHMuZkJpdG1hcC0+aGVpZ2h0KCkgLSAxOwotICAgIAorCiAgICAgU2tQZXJzcEl0ZXIgICBpdGVyKCpzLmZJbnZNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgY291bnQpOwotICAgIAorCiAgICAgd2hpbGUgKChjb3VudCA9IGl0ZXIubmV4dCgpKSAhPSAwKSB7CiAgICAgICAgIGNvbnN0IFNrRml4ZWQqIFNLX1JFU1RSSUNUIHNyY1hZID0gaXRlci5nZXRYWSgpOwogCi0JLyogUkJFOiAqLwotCS8qIFRJTEVYX1BST0NGKGZ4LCBtYXgpICgoKGZ4KSAmIDB4RkZGRikgKiAoKG1heCkgKyAxKSA+PiAxNikgKi8KLQkvKiBpdCdzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB3aGF0IEkgZGlkIGZvciB0aGUKLQkgKiBjbGFtcCBjYXNlIC0tIHdoZXJlIEkgY291bGQgaW1tZWRpYXRlbHkgc25pcCB0byB0aGUgdG9wCi0JICogMTYgYml0cyBhbmQgZG8gbXkgbWluL21heCBnYW1lcyB0aGVyZS4KLQkgKiAuLi4gbWlnaHQgb25seSBiZSBhYmxlIHRvIGdldCA0eCB1bnJvbGxpbmcgaGVyZQotCSAqLworICAgIC8qIFJCRTogKi8KKyAgICAvKiBUSUxFWF9QUk9DRihmeCwgbWF4KSAoKChmeCkgJiAweEZGRkYpICogKChtYXgpICsgMSkgPj4gMTYpICovCisgICAgLyogaXQncyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gd2hhdCBJIGRpZCBmb3IgdGhlCisgICAgICogY2xhbXAgY2FzZSAtLSB3aGVyZSBJIGNvdWxkIGltbWVkaWF0ZWx5IHNuaXAgdG8gdGhlIHRvcAorICAgICAqIDE2IGJpdHMgYW5kIGRvIG15IG1pbi9tYXggZ2FtZXMgdGhlcmUuCisgICAgICogLi4uIG1pZ2h0IG9ubHkgYmUgYWJsZSB0byBnZXQgNHggdW5yb2xsaW5nIGhlcmUKKyAgICAgKi8KIAotCS8qIHZsZDIgdG8gZ2V0IGEgc2V0IG9mIDMyeDQncyAuLi4gKi8KLQkvKiBkbyB0aGUgdGlsZVt4eV1fcHJvY2Ygb3BlcmF0aW9ucyAqLwotCS8qIHdoaWNoIGluY2x1ZGVzIGRvaW5nIHZ1enAgdG8gZ2V0IGhpMTYncyAqLwotCS8qIHN0b3JlIGl0ICovCi0JLyogLS0gaW5uZXIgbG9vcCAob3RoZXIgdGhhbiB2bGQyKSBjYW4gYmUgaGFkIGZyb20gYWJvdmUgKi8KKyAgICAvKiB2bGQyIHRvIGdldCBhIHNldCBvZiAzMng0J3MgLi4uICovCisgICAgLyogZG8gdGhlIHRpbGVbeHldX3Byb2NmIG9wZXJhdGlvbnMgKi8KKyAgICAvKiB3aGljaCBpbmNsdWRlcyBkb2luZyB2dXpwIHRvIGdldCBoaTE2J3MgKi8KKyAgICAvKiBzdG9yZSBpdCAqLworICAgIC8qIC0tIGlubmVyIGxvb3AgKG90aGVyIHRoYW4gdmxkMikgY2FuIGJlIGhhZCBmcm9tIGFib3ZlICovCiAKLQkvKiBzcmNYWSBpcyBhIGJhdGNoIG9mIDMyIGJpdCBudW1iZXJzIFgwLFkwLFgxLFkxLi4uCi0JICogYnV0IHdlIGltbWVkaWF0ZWx5IGRpc2NhcmQgdGhlIGxvdyAxNiBiaXRzLi4uCi0JICogc28gd2hhdCB3ZSdyZSBnb2luZyB0byBkbyBpcyB2bGQ0LCB3aGljaCB3aWxsIGdpdmUgdXMKLQkgKiB4bG8seGhpLHlsbyx5aGkgZGlzdHJpYnV0aW9uIGFuZCB3ZSBjYW4gaWdub3JlIHRoZSAnbG8nCi0JICogcGFydHMuLi4uCi0JICovCi0JaWYgKDApIHsgZXh0ZXJuIHZvaWQgcmJlKHZvaWQpOyByYmUoKTsgfQotCWlmIChjb3VudCA+PSA4KSB7Ci0JICAgIGludDMyX3QgKm15c3JjID0gKGludDMyX3QgKikgc3JjWFk7Ci0JICAgIGludDE2X3QgKm15ZHN0ID0gKGludDE2X3QgKikgeHk7Ci0JICAgIGRvIHsKLQkJaW50MzJ4NF90IHgsIHksIHgyLCB5MjsKLQkJaW50MTZ4OF90IGhpLCBoaTI7CisgICAgLyogc3JjWFkgaXMgYSBiYXRjaCBvZiAzMiBiaXQgbnVtYmVycyBYMCxZMCxYMSxZMS4uLgorICAgICAqIGJ1dCB3ZSBpbW1lZGlhdGVseSBkaXNjYXJkIHRoZSBsb3cgMTYgYml0cy4uLgorICAgICAqIHNvIHdoYXQgd2UncmUgZ29pbmcgdG8gZG8gaXMgdmxkNCwgd2hpY2ggd2lsbCBnaXZlIHVzCisgICAgICogeGxvLHhoaSx5bG8seWhpIGRpc3RyaWJ1dGlvbiBhbmQgd2UgY2FuIGlnbm9yZSB0aGUgJ2xvJworICAgICAqIHBhcnRzLi4uLgorICAgICAqLworICAgIGlmICgwKSB7IGV4dGVybiB2b2lkIHJiZSh2b2lkKTsgcmJlKCk7IH0KKyAgICBpZiAoY291bnQgPj0gOCkgeworICAgICAgICBpbnQzMl90ICpteXNyYyA9IChpbnQzMl90ICopIHNyY1hZOworICAgICAgICBpbnQxNl90ICpteWRzdCA9IChpbnQxNl90ICopIHh5OworICAgICAgICBkbyB7CisgICAgICAgIGludDMyeDRfdCB4LCB5LCB4MiwgeTI7CisgICAgICAgIGludDE2eDhfdCBoaSwgaGkyOwogCi0JCS8qIHJlYWQgYXJyYXkgb2YgeCx5LHgseSx4LHkgKi8KLQkgICAgICAgIC8qIHZsZDIgZG9lcyB0aGUgZGUtaW50ZXJsZWF2aW5nIGZvciB1cyAqLwotCQkvKiBpc29sYXRlIHJlZy1ib3VuZCBzY29wZXM7IGdjYyB3aWxsIG1pbmltaXplIHJlZ2lzdGVyCi0JCSAqIG1vdGlvbiBpZiBwb3NzaWJsZTsgdGhpcyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgbG9zZQotCQkgKiBhIHJlZ2lzdGVyIGFjcm9zcyBhIGRlYnVnZ2luZyBjYWxsIGJlY2F1c2UgaXQgaGFwcGVucwotCQkgKiB0byBiZSBib3VuZCBpbnRvIGEgY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXIKLQkJICovCi0JCXsKLQkJICAgIHJlZ2lzdGVyIGludDMyeDRfdCBxMCBhc20oInEwIik7Ci0JCSAgICByZWdpc3RlciBpbnQzMng0X3QgcTEgYXNtKCJxMSIpOwotCQkgICAgYXNtICgidmxkMi4zMgl7cTAtcTF9LFslMl0gIC8qIHg9JXEwIHk9JXExICovIgotCQkgICAgICAgIDogIj13IiAocTApLCAiPXciIChxMSkKLQkJICAgICAgICA6ICJyIiAobXlzcmMpCi0JCSAgICAgICAgKTsKLQkJICAgIHggPSBxMDsgeSA9IHExOwotCQl9CisgICAgICAgIC8qIHJlYWQgYXJyYXkgb2YgeCx5LHgseSx4LHkgKi8KKyAgICAgICAgICAgIC8qIHZsZDIgZG9lcyB0aGUgZGUtaW50ZXJsZWF2aW5nIGZvciB1cyAqLworICAgICAgICAvKiBpc29sYXRlIHJlZy1ib3VuZCBzY29wZXM7IGdjYyB3aWxsIG1pbmltaXplIHJlZ2lzdGVyCisgICAgICAgICAqIG1vdGlvbiBpZiBwb3NzaWJsZTsgdGhpcyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgbG9zZQorICAgICAgICAgKiBhIHJlZ2lzdGVyIGFjcm9zcyBhIGRlYnVnZ2luZyBjYWxsIGJlY2F1c2UgaXQgaGFwcGVucworICAgICAgICAgKiB0byBiZSBib3VuZCBpbnRvIGEgY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXIKKyAgICAgICAgICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludDMyeDRfdCBxMCBhc20oInEwIik7CisgICAgICAgICAgICByZWdpc3RlciBpbnQzMng0X3QgcTEgYXNtKCJxMSIpOworICAgICAgICAgICAgYXNtICgidmxkMi4zMiAgICB7cTAtcTF9LFslMl0gIC8qIHg9JXEwIHk9JXExICovIgorICAgICAgICAgICAgICAgIDogIj13IiAocTApLCAiPXciIChxMSkKKyAgICAgICAgICAgICAgICA6ICJyIiAobXlzcmMpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHggPSBxMDsgeSA9IHExOworICAgICAgICB9CiAKLQkJLyogb2Zmc2V0ID09IDI1NiBiaXRzID09IDMyIGJ5dGVzID09IDggbG9uZ3MgKi8KLQkJewotCQkgICAgcmVnaXN0ZXIgaW50MzJ4NF90IHEyIGFzbSgicTIiKTsKLQkJICAgIHJlZ2lzdGVyIGludDMyeDRfdCBxMyBhc20oInEzIik7Ci0JCSAgICBhc20gKCJ2bGQyLjMyCXtxMi1xM30sWyUyXSAgLyogeD0lcTAgeT0lcTEgKi8iCi0JCSAgICAgICAgOiAiPXciIChxMiksICI9dyIgKHEzKQotCQkgICAgICAgIDogInIiIChteXNyYys4KQotCQkgICAgICAgICk7Ci0JCSAgICB4MiA9IHEyOyB5MiA9IHEzOwotCQl9CisgICAgICAgIC8qIG9mZnNldCA9PSAyNTYgYml0cyA9PSAzMiBieXRlcyA9PSA4IGxvbmdzICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludDMyeDRfdCBxMiBhc20oInEyIik7CisgICAgICAgICAgICByZWdpc3RlciBpbnQzMng0X3QgcTMgYXNtKCJxMyIpOworICAgICAgICAgICAgYXNtICgidmxkMi4zMiAgICB7cTItcTN9LFslMl0gIC8qIHg9JXEwIHk9JXExICovIgorICAgICAgICAgICAgICAgIDogIj13IiAocTIpLCAiPXciIChxMykKKyAgICAgICAgICAgICAgICA6ICJyIiAobXlzcmMrOCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgeDIgPSBxMjsgeTIgPSBxMzsKKyAgICAgICAgfQogCi0gICAgICAgICAJLyogVElMRVhfUFJPQ0YoZngsIG1heCkgKCgoZngpJjB4RkZGRikqKChtYXgpKzEpPj4gMTYpICovCi0JCS8qIG1hc2sgdG8gbG93IDE2IFt3b3VsZCBsaWtlIHRvIHVzZSB1enAgdHJpY2tzKSAqLwotCQkvKiBiYXJlIG11bHRpcGxpY2F0aW9uLCBub3QgU2tGaXhlZE11bCAqLwotCSAgICAgICAgeCA9IHZhbmRxX3MzMih4LCB2ZHVwcV9uX3MzMigweGZmZmYpKTsKLQkJeCA9IHZtdWxxX3MzMih4LCB2ZHVwcV9uX3MzMihtYXhYKzEpKTsKLQkgICAgICAgIHkgPSB2YW5kcV9zMzIoeSwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7Ci0JCXkgPSB2bXVscV9zMzIoeSwgdmR1cHFfbl9zMzIobWF4WSsxKSk7CisgICAgICAgICAgICAgLyogVElMRVhfUFJPQ0YoZngsIG1heCkgKCgoZngpJjB4RkZGRikqKChtYXgpKzEpPj4gMTYpICovCisgICAgICAgIC8qIG1hc2sgdG8gbG93IDE2IFt3b3VsZCBsaWtlIHRvIHVzZSB1enAgdHJpY2tzKSAqLworICAgICAgICAvKiBiYXJlIG11bHRpcGxpY2F0aW9uLCBub3QgU2tGaXhlZE11bCAqLworICAgICAgICAgICAgeCA9IHZhbmRxX3MzMih4LCB2ZHVwcV9uX3MzMigweGZmZmYpKTsKKyAgICAgICAgeCA9IHZtdWxxX3MzMih4LCB2ZHVwcV9uX3MzMihtYXhYKzEpKTsKKyAgICAgICAgICAgIHkgPSB2YW5kcV9zMzIoeSwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7CisgICAgICAgIHkgPSB2bXVscV9zMzIoeSwgdmR1cHFfbl9zMzIobWF4WSsxKSk7CiAKLQkgICAgICAgIHgyID0gdmFuZHFfczMyKHgyLCB2ZHVwcV9uX3MzMigweGZmZmYpKTsKLQkJeDIgPSB2bXVscV9zMzIoeDIsIHZkdXBxX25fczMyKG1heFgrMSkpOwotCSAgICAgICAgeTIgPSB2YW5kcV9zMzIoeTIsIHZkdXBxX25fczMyKDB4ZmZmZikpOwotCQl5MiA9IHZtdWxxX3MzMih5MiwgdmR1cHFfbl9zMzIobWF4WSsxKSk7CisgICAgICAgICAgICB4MiA9IHZhbmRxX3MzMih4MiwgdmR1cHFfbl9zMzIoMHhmZmZmKSk7CisgICAgICAgIHgyID0gdm11bHFfczMyKHgyLCB2ZHVwcV9uX3MzMihtYXhYKzEpKTsKKyAgICAgICAgICAgIHkyID0gdmFuZHFfczMyKHkyLCB2ZHVwcV9uX3MzMigweGZmZmYpKTsKKyAgICAgICAgeTIgPSB2bXVscV9zMzIoeTIsIHZkdXBxX25fczMyKG1heFkrMSkpOwogCi0JCS8qIG5vdyBjb2xsZWN0IGludGVybGVhdmVkIGhpZ2ggMTYncyAqLwotCQkvKiAoaGkteCwgaGkteSk0ICAoaGkteDI7IGhpLXkyKTQgKi8KKyAgICAgICAgLyogbm93IGNvbGxlY3QgaW50ZXJsZWF2ZWQgaGlnaCAxNidzICovCisgICAgICAgIC8qIChoaS14LCBoaS15KTQgIChoaS14MjsgaGkteTIpNCAqLwogCi0JCS8qIGV4dHJhY3Rpb24sIHVzaW5nIHV6cCwgbGVhdmVzIGhpMTYncyBpbiB5ICovCi0JCXkgPSB2c3JpcV9uX3MzMih5LCB4LCAxNik7Ci0JCWhpID0gdnJlaW50ZXJwcmV0cV9zMTZfczMyKHkpOwotCQl2c3QxcV9zMTYobXlkc3QsIGhpKTsKKyAgICAgICAgLyogZXh0cmFjdGlvbiwgdXNpbmcgdXpwLCBsZWF2ZXMgaGkxNidzIGluIHkgKi8KKyAgICAgICAgeSA9IHZzcmlxX25fczMyKHksIHgsIDE2KTsKKyAgICAgICAgaGkgPSB2cmVpbnRlcnByZXRxX3MxNl9zMzIoeSk7CisgICAgICAgIHZzdDFxX3MxNihteWRzdCwgaGkpOwogCi0JCS8qIGFuZCBsaWtld2lzZSBmb3IgdGhlIHNlY29uZCA4IGVudHJpZXMgKi8KLQkJeTIgPSB2c3JpcV9uX3MzMih5MiwgeDIsIDE2KTsKLQkJaGkyID0gdnJlaW50ZXJwcmV0cV9zMTZfczMyKHkyKTsKLQkJdnN0MXFfczE2KG15ZHN0KzgsIGhpMik7CisgICAgICAgIC8qIGFuZCBsaWtld2lzZSBmb3IgdGhlIHNlY29uZCA4IGVudHJpZXMgKi8KKyAgICAgICAgeTIgPSB2c3JpcV9uX3MzMih5MiwgeDIsIDE2KTsKKyAgICAgICAgaGkyID0gdnJlaW50ZXJwcmV0cV9zMTZfczMyKHkyKTsKKyAgICAgICAgdnN0MXFfczE2KG15ZHN0KzgsIGhpMik7CiAKLQkJLyogWFhYOiBnY2MgaXNuJ3QgaW50ZXJsZWF2aW5nIHRoZXNlIHdpdGggdGhlIE5FT04gb3BzCi0JCSAqIGJ1dCBpIHRoaW5rIHRoYXQgYWxsIHRoZSBzY29yZWJvYXJkaW5nIHdvcmtzIG91dCAqLwotCQljb3VudCAtPSA4OwkvKiA4IGl0ZXJhdGlvbnMgKi8KLQkJbXlzcmMgKz0gMTY7CS8qIDE2IGxvbmdzICovCi0JCW15ZHN0ICs9IDE2OwkvKiAxNiBzaG9ydHMsIGFrYSA4IGxvbmdzICovCi0JICAgIH0gd2hpbGUgKGNvdW50ID49IDgpOwotCSAgICAvKiBnZXQgeHkgYW5kIHNyY1hZIGZpeGVkIHVwICovCi0JICAgIHNyY1hZID0gKGNvbnN0IFNrRml4ZWQgKikgbXlzcmM7Ci0JICAgIHh5ID0gKHVpbnQzMl90ICopIG15ZHN0OwotCX0KKyAgICAgICAgLyogWFhYOiBnY2MgaXNuJ3QgaW50ZXJsZWF2aW5nIHRoZXNlIHdpdGggdGhlIE5FT04gb3BzCisgICAgICAgICAqIGJ1dCBpIHRoaW5rIHRoYXQgYWxsIHRoZSBzY29yZWJvYXJkaW5nIHdvcmtzIG91dCAqLworICAgICAgICBjb3VudCAtPSA4OyAgICAvKiA4IGl0ZXJhdGlvbnMgKi8KKyAgICAgICAgbXlzcmMgKz0gMTY7ICAgIC8qIDE2IGxvbmdzICovCisgICAgICAgIG15ZHN0ICs9IDE2OyAgICAvKiAxNiBzaG9ydHMsIGFrYSA4IGxvbmdzICovCisgICAgICAgIH0gd2hpbGUgKGNvdW50ID49IDgpOworICAgICAgICAvKiBnZXQgeHkgYW5kIHNyY1hZIGZpeGVkIHVwICovCisgICAgICAgIHNyY1hZID0gKGNvbnN0IFNrRml4ZWQgKikgbXlzcmM7CisgICAgICAgIHh5ID0gKHVpbnQzMl90ICopIG15ZHN0OworICAgIH0KICAgICAgICAgd2hpbGUgKC0tY291bnQgPj0gMCkgewogICAgICAgICAgICAgKnh5KysgPSAoVElMRVlfUFJPQ0Yoc3JjWFlbMV0sIG1heFkpIDw8IDE2KSB8CiAgICAgICAgICAgICAgICAgICAgICBUSUxFWF9QUk9DRihzcmNYWVswXSwgbWF4WCk7CkBAIC00MTYsNyArNDE2LDcgQEAKICAgICBTa0FTU0VSVChzLmZJbnZLeSA9PSAwKTsKIAogICAgIFBSRUFNQkxFKHMpOwotICAgIAorCiAgICAgY29uc3QgdW5zaWduZWQgbWF4WCA9IHMuZkJpdG1hcC0+d2lkdGgoKSAtIDE7CiAgICAgY29uc3QgU2tGaXhlZCBvbmUgPSBzLmZGaWx0ZXJPbmVYOwogICAgIGNvbnN0IFNrRml4ZWQgZHggPSBzLmZJbnZTeDsKQEAgLTQ1NiwxMyArNDU2LDEzIEBACiAgICAgU2tBU1NFUlQoKHMuZkludlR5cGUgJiB+KFNrTWF0cml4OjprVHJhbnNsYXRlX01hc2sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6a1NjYWxlX01hc2sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6a0FmZmluZV9NYXNrKSkgPT0gMCk7Ci0gICAgCisKICAgICBQUkVBTUJMRShzKTsKICAgICBTa1BvaW50IHNyY1B0OwogICAgIHMuZkludlByb2MoKnMuZkludk1hdHJpeCwKICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih5KSArIFNLX1NjYWxhckhhbGYsICZzcmNQdCk7Ci0gICAgCisKICAgICBTa0ZpeGVkIG9uZVggPSBzLmZGaWx0ZXJPbmVYOwogICAgIFNrRml4ZWQgb25lWSA9IHMuZkZpbHRlck9uZVk7CiAgICAgU2tGaXhlZCBmeCA9IFNrU2NhbGFyVG9GaXhlZChzcmNQdC5mWCkgLSAob25lWCA+PiAxKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAgIFNrRml4ZWQgZHkgPSBzLmZJbnZLeTsKICAgICB1bnNpZ25lZCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICB1bnNpZ25lZCBtYXhZID0gcy5mQml0bWFwLT5oZWlnaHQoKSAtIDE7Ci0gICAgCisKICAgICBkbyB7CiAgICAgICAgICp4eSsrID0gUEFDS19GSUxURVJfWV9OQU1FKGZ5LCBtYXhZLCBvbmVZIFBSRUFNQkxFX0FSR19ZKTsKICAgICAgICAgZnkgKz0gZHk7CkBAIC00ODYsNyArNDg2LDcgQEAKICAgICBTa0FTU0VSVChzLmZJbnZUeXBlICYgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKTsKIAogICAgIGV4dGVybiB2b2lkIHJiZSh2b2lkKTsKLSAgICAKKwogICAgIFBSRUFNQkxFKHMpOwogICAgIHVuc2lnbmVkIG1heFggPSBzLmZCaXRtYXAtPndpZHRoKCkgLSAxOwogICAgIHVuc2lnbmVkIG1heFkgPSBzLmZCaXRtYXAtPmhlaWdodCgpIC0gMTsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICAgIFNrRml4ZWQgb25lWSA9IHMuZkZpbHRlck9uZVk7CiAKIAotICAgIAorCiAgICAgU2tQZXJzcEl0ZXIgICBpdGVyKCpzLmZJbnZNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNrSW50VG9TY2FsYXIoeCkgKyBTS19TY2FsYXJIYWxmLAogICAgICAgICAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgY291bnQpOwpkaWZmIC0tZ2l0IGEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0c19TU0UyLmNwcCBiL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHNfU1NFMi5jcHAKaW5kZXggNzU4NDQ4NS4uMWUyZGM5MyAxMDA2NDQKLS0tIGEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0c19TU0UyLmNwcAorKysgYi9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzX1NTRTIuY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICAgICAgLy8gKDAsIDAsIDAsIDAsIDAsIDAsIDAsIHgpCiAgICAgICAgIF9fbTEyOGkgYWxsWCA9IF9tbV9jdnRzaTMyX3NpMTI4KChYWCA+PiAxNCkgJiAweDBGKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gKDAsIDAsIDAsIDAsIHgsIHgsIHgsIHgpCiAgICAgICAgIGFsbFggPSBfbW1fc2h1ZmZsZWxvX2VwaTE2KGFsbFgsIDApOwogCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogICAgICAgICAvLyAoMCwgMCwgMCwgMCwgMCwgMCwgMCwgeCkKICAgICAgICAgX19tMTI4aSBhbGxYID0gX21tX2N2dHNpMzJfc2kxMjgoKFhYID4+IDE0KSAmIDB4MEYpOwotICAgICAgICAKKwogICAgICAgICAvLyAoMCwgMCwgMCwgMCwgeCwgeCwgeCwgeCkKICAgICAgICAgYWxsWCA9IF9tbV9zaHVmZmxlbG9fZXBpMTYoYWxsWCwgMCk7CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgIFNrQVNTRVJUKChzLmZJbnZUeXBlICYgfihTa01hdHJpeDo6a1RyYW5zbGF0ZV9NYXNrIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXg6OmtTY2FsZV9NYXNrKSkgPT0gMCk7CiAgICAgU2tBU1NFUlQocy5mSW52S3kgPT0gMCk7Ci0gICAgCisKICAgICBjb25zdCB1bnNpZ25lZCBtYXhYID0gcy5mQml0bWFwLT53aWR0aCgpIC0gMTsKICAgICBjb25zdCBTa0ZpeGVkIG9uZSA9IHMuZkZpbHRlck9uZVg7CiAgICAgY29uc3QgU2tGaXhlZCBkeCA9IHMuZkludlN4OwpAQCAtMjgyLDE0ICsyODIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeCArIGR4LCBmeCk7CiAKICAgICAgICAgICAgIHdoaWxlIChjb3VudCA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgX19tMTI4aSB3aWRlX291dDsgCi0gICAgCisgICAgICAgICAgICAgICAgX19tMTI4aSB3aWRlX291dDsKKwogICAgICAgICAgICAgICAgIHdpZGVfb3V0ID0gX21tX3NsbGlfZXBpMzIoX21tX3NyYWlfZXBpMzIod2lkZV9meCwgMTIpLCAxNCk7CiAgICAgICAgICAgICAgICAgd2lkZV9vdXQgPSBfbW1fb3Jfc2kxMjgod2lkZV9vdXQsIF9tbV9hZGRfZXBpMzIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NyYWlfZXBpMzIod2lkZV9meCwgMTYpLCB3aWRlXzEpKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NyYWlfZXBpMzIod2lkZV9meCwgMTYpLCB3aWRlXzEpKTsKKwogICAgICAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPih4eSksIHdpZGVfb3V0KTsKLSAgICAgIAorCiAgICAgICAgICAgICAgICAgeHkgKz0gNDsKICAgICAgICAgICAgICAgICBmeCArPSBkeCAqIDQ7CiAgICAgICAgICAgICAgICAgd2lkZV9meCAgPSBfbW1fYWRkX2VwaTMyKHdpZGVfZngsIHdpZGVfZHg0KTsKQEAgLTMwNSw3ICszMDUsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFNTRTIgb25seSBzdXBwb3J0IDE2Yml0IGludGVyZ2VyIG1heCAmIG1pbiwgc28gb25seSBwcm9jZXNzIHRoZSBjYXNlCiAgICAgICAgIC8vIG1heFggbGVzcyB0aGFuIHRoZSBtYXggMTZiaXQgaW50ZXJnZXIuIEFjdHVhbGx5IG1heFggaXMgdGhlIGJpdG1hcCdzCi0gICAgICAgIC8vIGhlaWdodCwgdGhlcmUgc2hvdWxkIGJlIHJhcmUgYml0bWFwIHdob3NlIGhlaWdodCB3aWxsIGJlIGdyZWF0ZXIgCisgICAgICAgIC8vIGhlaWdodCwgdGhlcmUgc2hvdWxkIGJlIHJhcmUgYml0bWFwIHdob3NlIGhlaWdodCB3aWxsIGJlIGdyZWF0ZXIKICAgICAgICAgLy8gdGhhbiBtYXggMTZiaXQgaW50ZXJnZXIgaW4gdGhlIHJlYWwgd29ybGQuCiAgICAgICAgIGlmICgoY291bnQgPj0gNCkgJiYgKG1heFggPD0gMHhGRkZGKSkgewogICAgICAgICAgICAgd2hpbGUgKCgoc2l6ZV90KXh5ICYgMHgwRikgIT0gMCkgewpAQCAtMzEzLDEyICszMTMsMTIgQEAKICAgICAgICAgICAgICAgICBmeCArPSBkeDsKICAgICAgICAgICAgICAgICBjb3VudC0tOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICBfX20xMjhpIHdpZGVfZnggICA9IF9tbV9zZXRfZXBpMzIoZnggKyBkeCAqIDMsIGZ4ICsgZHggKiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ4ICsgZHgsIGZ4KTsKICAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9keDQgID0gX21tX3NldDFfZXBpMzIoZHggKiA0KTsKICAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9vbmUgID0gX21tX3NldDFfZXBpMzIob25lKTsKLSAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9tYXhYID0gX21tX3NldDFfZXBpMzIobWF4WCk7IAorICAgICAgICAgICAgX19tMTI4aSB3aWRlX21heFggPSBfbW1fc2V0MV9lcGkzMihtYXhYKTsKICAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9tYXNrID0gX21tX3NldDFfZXBpMzIoMHhGKTsKIAogICAgICAgICAgICAgIHdoaWxlIChjb3VudCA+PSA0KSB7CkBAIC0zMjcsMzEgKzMyNywzMSBAQAogICAgICAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9meDE7CiAKICAgICAgICAgICAgICAgICAvLyBpID0gU2tDbGFtcE1heChmPj4xNixtYXhYKQotICAgICAgICAgICAgICAgIHdpZGVfaSA9IF9tbV9tYXhfZXBpMTYoX21tX3NybGlfZXBpMzIod2lkZV9meCwgMTYpLCAKKyAgICAgICAgICAgICAgICB3aWRlX2kgPSBfbW1fbWF4X2VwaTE2KF9tbV9zcmxpX2VwaTMyKHdpZGVfZngsIDE2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgICAgICAgICAgICAgIHdpZGVfaSA9IF9tbV9taW5fZXBpMTYod2lkZV9pLCB3aWRlX21heFgpOwotICAgIAorCiAgICAgICAgICAgICAgICAgLy8gaTw8NCB8IFRJTEVYX0xPV19CSVRTKGZ4KQogICAgICAgICAgICAgICAgIHdpZGVfbG8gPSBfbW1fc3JsaV9lcGkzMih3aWRlX2Z4LCAxMik7CiAgICAgICAgICAgICAgICAgd2lkZV9sbyA9IF9tbV9hbmRfc2kxMjgod2lkZV9sbywgd2lkZV9tYXNrKTsKLSAgICAgICAgICAgICAgICB3aWRlX2kgID0gX21tX3NsbGlfZXBpMzIod2lkZV9pLCA0KTsgICAgICAgICAKLSAgICAgICAgICAgICAgICB3aWRlX2kgID0gX21tX29yX3NpMTI4KHdpZGVfaSwgd2lkZV9sbyk7ICAgICAKLSAgICAKKyAgICAgICAgICAgICAgICB3aWRlX2kgID0gX21tX3NsbGlfZXBpMzIod2lkZV9pLCA0KTsKKyAgICAgICAgICAgICAgICB3aWRlX2kgID0gX21tX29yX3NpMTI4KHdpZGVfaSwgd2lkZV9sbyk7CisKICAgICAgICAgICAgICAgICAvLyBpPDwxNAogICAgICAgICAgICAgICAgIHdpZGVfaSA9IF9tbV9zbGxpX2VwaTMyKHdpZGVfaSwgMTQpOwotICAgIAorCiAgICAgICAgICAgICAgICAgLy8gU2tDbGFtcE1heCgoKGYrb25lKSk+PjE2LG1heCkKICAgICAgICAgICAgICAgICB3aWRlX2Z4MSA9IF9tbV9hZGRfZXBpMzIod2lkZV9meCwgd2lkZV9vbmUpOwotICAgICAgICAgICAgICAgIHdpZGVfZngxID0gX21tX21heF9lcGkxNihfbW1fc3JsaV9lcGkzMih3aWRlX2Z4MSwgMTYpLCAKKyAgICAgICAgICAgICAgICB3aWRlX2Z4MSA9IF9tbV9tYXhfZXBpMTYoX21tX3NybGlfZXBpMzIod2lkZV9meDEsIDE2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjgoKSk7CiAgICAgICAgICAgICAgICAgd2lkZV9meDEgPSBfbW1fbWluX2VwaTE2KHdpZGVfZngxLCB3aWRlX21heFgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIGZpbmFsIGNvbWJpbmF0aW9uCiAgICAgICAgICAgICAgICAgd2lkZV9pID0gX21tX29yX3NpMTI4KHdpZGVfaSwgd2lkZV9meDEpOwotICAgICAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPih4eSksIHdpZGVfaSk7IAotICAgIAorICAgICAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPih4eSksIHdpZGVfaSk7CisKICAgICAgICAgICAgICAgICB3aWRlX2Z4ID0gX21tX2FkZF9lcGkzMih3aWRlX2Z4LCB3aWRlX2R4NCk7Ci0gICAgICAgICAgICAgICAgZnggKz0gZHggKiA0OyAgIAorICAgICAgICAgICAgICAgIGZ4ICs9IGR4ICogNDsKICAgICAgICAgICAgICAgICB4eSArPSA0OwogICAgICAgICAgICAgICAgIGNvdW50IC09IDQ7CiAgICAgICAgICAgICB9IC8vIHdoaWxlIGNvdW50ID49IDQKQEAgLTM4Miw3ICszODIsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIG1heFkgPSBzLmZCaXRtYXAtPmhlaWdodCgpIC0gMTsKICAgICAqeHkrKyA9IFNrQ2xhbXBNYXgoZnggPj4gMTYsIG1heFkpOwogICAgIGZ4ID0gU2tTY2FsYXJUb0ZpeGVkKHB0LmZYKTsKLSAgICAKKwogICAgIGlmICgwID09IG1heFgpIHsKICAgICAgICAgLy8gYWxsIG9mIHRoZSBmb2xsb3dpbmcgWCB2YWx1ZXMgbXVzdCBiZSAwCiAgICAgICAgIG1lbXNldCh4eSwgMCwgY291bnQgKiBzaXplb2YodWludDE2X3QpKTsKQEAgLTQxNiw3ICs0MTYsNyBAQAogICAgICAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9yZXN1bHQgPSBfbW1fcGFja3NfZXBpMzIod2lkZV9vdXRfbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZV9vdXRfaGlnaCk7CiAgICAgICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KHh5KSwgd2lkZV9yZXN1bHQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB3aWRlX2xvdyA9IF9tbV9hZGRfZXBpMzIod2lkZV9sb3csIHdpZGVfZHg4KTsKICAgICAgICAgICAgICAgICB3aWRlX2hpZ2ggPSBfbW1fYWRkX2VwaTMyKHdpZGVfaGlnaCwgd2lkZV9keDgpOwogCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTU0UyIG9ubHkgc3VwcG9ydCAxNmJpdCBpbnRlcmdlciBtYXggJiBtaW4sIHNvIG9ubHkgcHJvY2VzcyB0aGUgY2FzZQogICAgICAgICAvLyBtYXhYIGxlc3MgdGhhbiB0aGUgbWF4IDE2Yml0IGludGVyZ2VyLiBBY3R1YWxseSBtYXhYIGlzIHRoZSBiaXRtYXAncwotICAgICAgICAvLyBoZWlnaHQsIHRoZXJlIHNob3VsZCBiZSByYXJlIGJpdG1hcCB3aG9zZSBoZWlnaHQgd2lsbCBiZSBncmVhdGVyIAorICAgICAgICAvLyBoZWlnaHQsIHRoZXJlIHNob3VsZCBiZSByYXJlIGJpdG1hcCB3aG9zZSBoZWlnaHQgd2lsbCBiZSBncmVhdGVyCiAgICAgICAgIC8vIHRoYW4gbWF4IDE2Yml0IGludGVyZ2VyIGluIHRoZSByZWFsIHdvcmxkLgogICAgICAgICBpZiAoKGNvdW50ID49IDgpICYmIChtYXhYIDw9IDB4RkZGRikpIHsKICAgICAgICAgICAgIHdoaWxlICgoKHNpemVfdCl4eSAmIDB4MEYpICE9IDApIHsKQEAgLTQ1Niw3ICs0NTYsNyBAQAogICAgICAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9vdXRfbG93ID0gX21tX3NybGlfZXBpMzIod2lkZV9sb3csIDE2KTsKICAgICAgICAgICAgICAgICBfX20xMjhpIHdpZGVfb3V0X2hpZ2ggPSBfbW1fc3JsaV9lcGkzMih3aWRlX2hpZ2gsIDE2KTsKIAotICAgICAgICAgICAgICAgIHdpZGVfb3V0X2xvdyAgPSBfbW1fbWF4X2VwaTE2KHdpZGVfb3V0X2xvdywgCisgICAgICAgICAgICAgICAgd2lkZV9vdXRfbG93ICA9IF9tbV9tYXhfZXBpMTYod2lkZV9vdXRfbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgICAgICAgICAgICAgIHdpZGVfb3V0X2xvdyAgPSBfbW1fbWluX2VwaTE2KHdpZGVfb3V0X2xvdywgd2lkZV9tYXhYKTsKICAgICAgICAgICAgICAgICB3aWRlX291dF9oaWdoID0gX21tX21heF9lcGkxNih3aWRlX291dF9oaWdoLApAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICAgcy5mSW52UHJvYygqcy5mSW52TWF0cml4LAogICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih4KSArIFNLX1NjYWxhckhhbGYsCiAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgJnNyY1B0KTsKLSAgICAKKwogICAgIFNrRml4ZWQgb25lWCA9IHMuZkZpbHRlck9uZVg7CiAgICAgU2tGaXhlZCBvbmVZID0gcy5mRmlsdGVyT25lWTsKICAgICBTa0ZpeGVkIGZ4ID0gU2tTY2FsYXJUb0ZpeGVkKHNyY1B0LmZYKSAtIChvbmVYID4+IDEpOwpAQCAtNTEwLDM3ICs1MTAsMzcgQEAKICAgICAgICAgX19tMTI4aSB3aWRlX2YgPSBfbW1fc2V0X2VwaTMyKGZ4ICsgZHgsIGZ5ICsgZHksIGZ4LCBmeSk7CiAgICAgICAgIF9fbTEyOGkgd2lkZV9kMiAgPSBfbW1fc2V0X2VwaTMyKGR4MiwgZHkyLCBkeDIsIGR5Mik7CiAgICAgICAgIF9fbTEyOGkgd2lkZV9vbmUgID0gX21tX3NldF9lcGkzMihvbmVYLCBvbmVZLCBvbmVYLCBvbmVZKTsKLSAgICAgICAgX19tMTI4aSB3aWRlX21heCA9IF9tbV9zZXRfZXBpMzIobWF4WCwgbWF4WSwgbWF4WCwgbWF4WSk7IAorICAgICAgICBfX20xMjhpIHdpZGVfbWF4ID0gX21tX3NldF9lcGkzMihtYXhYLCBtYXhZLCBtYXhYLCBtYXhZKTsKICAgICAgICAgX19tMTI4aSB3aWRlX21hc2sgPSBfbW1fc2V0MV9lcGkzMigweEYpOwogCiAgICAgICAgIHdoaWxlIChjb3VudCA+PSAyKSB7CiAgICAgICAgICAgICAvLyBpID0gU2tDbGFtcE1heChmPj4xNixtYXhYKQotICAgICAgICAgICAgX19tMTI4aSB3aWRlX2kgPSBfbW1fbWF4X2VwaTE2KF9tbV9zcmxpX2VwaTMyKHdpZGVfZiwgMTYpLCAKKyAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9pID0gX21tX21heF9lcGkxNihfbW1fc3JsaV9lcGkzMih3aWRlX2YsIDE2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpKTsKICAgICAgICAgICAgIHdpZGVfaSA9IF9tbV9taW5fZXBpMTYod2lkZV9pLCB3aWRlX21heCk7Ci0gICAgCisKICAgICAgICAgICAgIC8vIGk8PDQgfCBUSUxFWF9MT1dfQklUUyhmKQogICAgICAgICAgICAgX19tMTI4aSB3aWRlX2xvID0gX21tX3NybGlfZXBpMzIod2lkZV9mLCAxMik7CiAgICAgICAgICAgICB3aWRlX2xvID0gX21tX2FuZF9zaTEyOCh3aWRlX2xvLCB3aWRlX21hc2spOwotICAgICAgICAgICAgd2lkZV9pICA9IF9tbV9zbGxpX2VwaTMyKHdpZGVfaSwgNCk7ICAgICAgICAgCi0gICAgICAgICAgICB3aWRlX2kgID0gX21tX29yX3NpMTI4KHdpZGVfaSwgd2lkZV9sbyk7ICAgICAKLSAgICAKKyAgICAgICAgICAgIHdpZGVfaSAgPSBfbW1fc2xsaV9lcGkzMih3aWRlX2ksIDQpOworICAgICAgICAgICAgd2lkZV9pICA9IF9tbV9vcl9zaTEyOCh3aWRlX2ksIHdpZGVfbG8pOworCiAgICAgICAgICAgICAvLyBpPDwxNAogICAgICAgICAgICAgd2lkZV9pID0gX21tX3NsbGlfZXBpMzIod2lkZV9pLCAxNCk7Ci0gICAgCisKICAgICAgICAgICAgIC8vIFNrQ2xhbXBNYXgoKChmK29uZSkpPj4xNixtYXgpCiAgICAgICAgICAgICBfX20xMjhpIHdpZGVfZjEgPSBfbW1fYWRkX2VwaTMyKHdpZGVfZiwgd2lkZV9vbmUpOwotICAgICAgICAgICAgd2lkZV9mMSA9IF9tbV9tYXhfZXBpMTYoX21tX3NybGlfZXBpMzIod2lkZV9mMSwgMTYpLCAKKyAgICAgICAgICAgIHdpZGVfZjEgPSBfbW1fbWF4X2VwaTE2KF9tbV9zcmxpX2VwaTMyKHdpZGVfZjEsIDE2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgICAgICAgICAgd2lkZV9mMSA9IF9tbV9taW5fZXBpMTYod2lkZV9mMSwgd2lkZV9tYXgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gZmluYWwgY29tYmluYXRpb24KICAgICAgICAgICAgIHdpZGVfaSA9IF9tbV9vcl9zaTEyOCh3aWRlX2ksIHdpZGVfZjEpOwotICAgICAgICAgICAgX21tX3N0b3JldV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPih4eSksIHdpZGVfaSk7IAotICAgIAorICAgICAgICAgICAgX21tX3N0b3JldV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPih4eSksIHdpZGVfaSk7CisKICAgICAgICAgICAgIHdpZGVfZiA9IF9tbV9hZGRfZXBpMzIod2lkZV9mLCB3aWRlX2QyKTsKIAotICAgICAgICAgICAgZnggKz0gZHgyOyAKKyAgICAgICAgICAgIGZ4ICs9IGR4MjsKICAgICAgICAgICAgIGZ5ICs9IGR5MjsKICAgICAgICAgICAgIHh5ICs9IDQ7CiAgICAgICAgICAgICBjb3VudCAtPSAyOwpAQCAtNTUxLDcgKzU1MSw3IEBACiAgICAgICAgICp4eSsrID0gQ2xhbXBYX0NsYW1wWV9wYWNrX2ZpbHRlcihmeSwgbWF4WSwgb25lWSk7CiAgICAgICAgIGZ5ICs9IGR5OwogICAgICAgICAqeHkrKyA9IENsYW1wWF9DbGFtcFlfcGFja19maWx0ZXIoZngsIG1heFgsIG9uZVgpOwotICAgICAgICBmeCArPSBkeDsgICAgICAgICAgCisgICAgICAgIGZ4ICs9IGR4OwogICAgIH0KIH0KIApAQCAtNTY5LDcgKzU2OSw3IEBACiAgICAgcy5mSW52UHJvYygqcy5mSW52TWF0cml4LAogICAgICAgICAgICAgICAgU2tJbnRUb1NjYWxhcih4KSArIFNLX1NjYWxhckhhbGYsCiAgICAgICAgICAgICAgICBTa0ludFRvU2NhbGFyKHkpICsgU0tfU2NhbGFySGFsZiwgJnNyY1B0KTsKLSAgICAKKwogICAgIFNrRml4ZWQgZnggPSBTa1NjYWxhclRvRml4ZWQoc3JjUHQuZlgpOwogICAgIFNrRml4ZWQgZnkgPSBTa1NjYWxhclRvRml4ZWQoc3JjUHQuZlkpOwogICAgIFNrRml4ZWQgZHggPSBzLmZJbnZTeDsKQEAgLTU3OSw3ICs1NzksNyBAQAogCiAgICAgaWYgKGNvdW50ID49IDQgJiYgKG1heFggPD0gMHhGRkZGKSkgewogICAgICAgICB3aGlsZSAoKChzaXplX3QpeHkgJiAweDBGKSAhPSAwKSB7Ci0gICAgICAgICAgICAqeHkrKyA9IChTa0NsYW1wTWF4KGZ5ID4+IDE2LCBtYXhZKSA8PCAxNikgfCAKKyAgICAgICAgICAgICp4eSsrID0gKFNrQ2xhbXBNYXgoZnkgPj4gMTYsIG1heFkpIDw8IDE2KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDbGFtcE1heChmeCA+PiAxNiwgbWF4WCk7CiAgICAgICAgICAgICBmeCArPSBkeDsKICAgICAgICAgICAgIGZ5ICs9IGR5OwpAQCAtNTk2LDI5ICs1OTYsMjkgQEAKICAgICAgICAgX19tMTI4aSB3aWRlX2R4NCAgPSBfbW1fc2V0MV9lcGkzMihkeDQpOwogICAgICAgICBfX20xMjhpIHdpZGVfZHk0ICA9IF9tbV9zZXQxX2VwaTMyKGR5NCk7CiAKLSAgICAgICAgX19tMTI4aSB3aWRlX21heFggPSBfbW1fc2V0MV9lcGkzMihtYXhYKTsgCi0gICAgICAgIF9fbTEyOGkgd2lkZV9tYXhZID0gX21tX3NldDFfZXBpMzIobWF4WSk7IAorICAgICAgICBfX20xMjhpIHdpZGVfbWF4WCA9IF9tbV9zZXQxX2VwaTMyKG1heFgpOworICAgICAgICBfX20xMjhpIHdpZGVfbWF4WSA9IF9tbV9zZXQxX2VwaTMyKG1heFkpOwogCiAgICAgICAgIHdoaWxlIChjb3VudCA+PSA0KSB7CiAgICAgICAgICAgICAvLyBTa0NsYW1wTWF4KGZ4Pj4xNixtYXhYKQotICAgICAgICAgICAgX19tMTI4aSB3aWRlX2xvID0gX21tX21heF9lcGkxNihfbW1fc3JsaV9lcGkzMih3aWRlX2Z4LCAxNiksIAorICAgICAgICAgICAgX19tMTI4aSB3aWRlX2xvID0gX21tX21heF9lcGkxNihfbW1fc3JsaV9lcGkzMih3aWRlX2Z4LCAxNiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgICAgICAgICAgd2lkZV9sbyA9IF9tbV9taW5fZXBpMTYod2lkZV9sbywgd2lkZV9tYXhYKTsKLSAgICAKKwogICAgICAgICAgICAgLy8gU2tDbGFtcE1heChmeT4+MTYsbWF4WSkKLSAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9oaSA9IF9tbV9tYXhfZXBpMTYoX21tX3NybGlfZXBpMzIod2lkZV9meSwgMTYpLCAKKyAgICAgICAgICAgIF9fbTEyOGkgd2lkZV9oaSA9IF9tbV9tYXhfZXBpMTYoX21tX3NybGlfZXBpMzIod2lkZV9meSwgMTYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpKTsKICAgICAgICAgICAgIHdpZGVfaGkgPSBfbW1fbWluX2VwaTE2KHdpZGVfaGksIHdpZGVfbWF4WSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBmaW5hbCBjb21iaW5hdGlvbgogICAgICAgICAgICAgX19tMTI4aSB3aWRlX2kgPSBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpMzIod2lkZV9oaSwgMTYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZV9sbyk7Ci0gICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oeHkpLCB3aWRlX2kpOyAKLSAKKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPih4eSksIHdpZGVfaSk7CisKICAgICAgICAgICAgIHdpZGVfZnggPSBfbW1fYWRkX2VwaTMyKHdpZGVfZngsIHdpZGVfZHg0KTsKICAgICAgICAgICAgIHdpZGVfZnkgPSBfbW1fYWRkX2VwaTMyKHdpZGVfZnksIHdpZGVfZHk0KTsKIAotICAgICAgICAgICAgZnggKz0gZHg0OyAKKyAgICAgICAgICAgIGZ4ICs9IGR4NDsKICAgICAgICAgICAgIGZ5ICs9IGR5NDsKICAgICAgICAgICAgIHh5ICs9IDQ7CiAgICAgICAgICAgICBjb3VudCAtPSA0OwpAQCAtNjI5LDcgKzYyOSw3IEBACiAgICAgICAgICp4eSsrID0gKFNrQ2xhbXBNYXgoZnkgPj4gMTYsIG1heFkpIDw8IDE2KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0NsYW1wTWF4KGZ4ID4+IDE2LCBtYXhYKTsKICAgICAgICAgZnggKz0gZHg7Ci0gICAgICAgIGZ5ICs9IGR5OyAgICAgICAgICAgCisgICAgICAgIGZ5ICs9IGR5OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0c19TU1NFMy5jcHAgYi9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzX1NTU0UzLmNwcAppbmRleCBlOWRjYzdmLi41OWIyMzg2IDEwMDY0NAotLS0gYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzX1NTU0UzLmNwcAorKysgYi9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzX1NTU0UzLmNwcApAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbTEyOGkqIGFsbF94eV9yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tMTI4aSogc2l4dGVlbl9taW51c194eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHh5MCwgaW50KiB4eTEpIHsKLSAgICBjb25zdCBfX20xMjhpIHh5X3dpZGUgPSAKKyAgICBjb25zdCBfX20xMjhpIHh5X3dpZGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgX21tX2xvYWR1X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSAqPih4eSkpOwogCiAgICAgLy8gKHgxMCwgeTEwLCB4MDAsIHkwMCkKQEAgLTU4NCw3ICs1ODQsNyBAQAogICAgICAgICBTa0FTU0VSVChzLmZBbHBoYVNjYWxlID09IDI1Nik7CiAgICAgfQogCi0gICAgY29uc3QgdWludDhfdCogc3JjX2FkZHIgPSAKKyAgICBjb25zdCB1aW50OF90KiBzcmNfYWRkciA9CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocy5mQml0bWFwLT5nZXRQaXhlbHMoKSk7CiAgICAgY29uc3QgdW5zaWduZWQgcmIgPSBzLmZCaXRtYXAtPnJvd0J5dGVzKCk7CiAKQEAgLTYwOCw3ICs2MDgsNyBAQAogICAgICAgICBpbnQgeHkwWzRdOwogICAgICAgICBpbnQgeHkxWzRdOwogICAgICAgICBfX20xMjhpIGFsbF94eSwgc2l4dGVlbl9taW51c194eTsKLSAgICAgICAgUHJlcGFyZUNvbnN0YW50c1R3b1BpeGVsUGFpcnNEWERZKHh5LCBtYXNrXzNGRkYsIG1hc2tfMDAwRiwgCisgICAgICAgIFByZXBhcmVDb25zdGFudHNUd29QaXhlbFBhaXJzRFhEWSh4eSwgbWFza18zRkZGLCBtYXNrXzAwMEYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXh0ZWVuXzhiaXQsIG1hc2tfZGlzdF9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbGxfeHksICZzaXh0ZWVuX21pbnVzX3h5LCB4eTAsIHh5MSk7CiAKQEAgLTYxOCwxMyArNjE4LDEzIEBACiAgICAgICAgIF9fbTEyOGkgYWxsX3kgPSBfbW1fdW5wYWNraGlfZXBpOChhbGxfeHksIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgICAgICBfX20xMjhpIG5lZ195ID0gX21tX3N1Yl9lcGkxNihfbW1fc2V0MV9lcGkxNigxNiksIGFsbF95KTsKIAotICAgICAgICBjb25zdCB1aW50MzJfdCogcm93MDAgPSAKKyAgICAgICAgY29uc3QgdWludDMyX3QqIHJvdzAwID0KICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY19hZGRyICsgeHkwWzJdICogcmIpOwotICAgICAgICBjb25zdCB1aW50MzJfdCogcm93MDEgPSAKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY19hZGRyICsgeHkxWzJdICogcmIpOyAKLSAgICAgICAgY29uc3QgdWludDMyX3QqIHJvdzEwID0gCisgICAgICAgIGNvbnN0IHVpbnQzMl90KiByb3cwMSA9CisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNfYWRkciArIHh5MVsyXSAqIHJiKTsKKyAgICAgICAgY29uc3QgdWludDMyX3QqIHJvdzEwID0KICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY19hZGRyICsgeHkwWzNdICogcmIpOwotICAgICAgICBjb25zdCB1aW50MzJfdCogcm93MTEgPSAKKyAgICAgICAgY29uc3QgdWludDMyX3QqIHJvdzExID0KICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY19hZGRyICsgeHkxWzNdICogcmIpOwogCiAgICAgICAgIF9fbTEyOGkgc3VtMCA9IFByb2Nlc3NUd29QaXhlbFBhaXJzRFhEWTxoYXNfYWxwaGE+KApAQCAtNjQwLDcgKzY0MCw3IEBACiAgICAgICAgIHh5ICs9IDQ7CiAgICAgICAgIGNvbG9ycyArPSAyOwogICAgICAgICBjb3VudCAtPSAyOwotICAgIH0gCisgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXIKICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKQEAgLTY0OSwxNyArNjQ5LDE3IEBACiAgICAgICAgIHVuc2lnbmVkIHkxID0gZGF0YSAmIDB4M0ZGRjsKICAgICAgICAgdW5zaWduZWQgc3ViWSA9IHkwICYgMHhGOwogICAgICAgICB5MCA+Pj0gNDsKLSAgICAgICAgCisKICAgICAgICAgZGF0YSA9ICp4eSsrOwogICAgICAgICB1bnNpZ25lZCB4MCA9IGRhdGEgPj4gMTQ7CiAgICAgICAgIHVuc2lnbmVkIHgxID0gZGF0YSAmIDB4M0ZGRjsKICAgICAgICAgdW5zaWduZWQgc3ViWCA9IHgwICYgMHhGOwogICAgICAgICB4MCA+Pj0gNDsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IHVpbnQzMl90KiByb3cwID0gCisKKyAgICAgICAgY29uc3QgdWludDMyX3QqIHJvdzAgPQogICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY19hZGRyICsgeTAgKiByYik7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90KiByb3cxID0gCi0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjX2FkZHIgKyB5MSAqIHJiKTsgCisgICAgICAgIGNvbnN0IHVpbnQzMl90KiByb3cxID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNfYWRkciArIHkxICogcmIpOwogCiAgICAgICAgIC8vIDE2eCh4KQogICAgICAgICBjb25zdCBfX20xMjhpIGFsbF94ID0gX21tX3NldDFfZXBpOChzdWJYKTsKZGlmZiAtLWdpdCBhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHNfYXJtLmNwcCBiL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHNfYXJtLmNwcAppbmRleCBkZWIxYmZlLi43YTk2ODdkIDEwMDY0NAotLS0gYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzX2FybS5jcHAKKysrIGIvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0c19hcm0uY3BwCkBAIC0yNCwxOCArMjQsMTggQEAKICAgICBTa0FTU0VSVChjb3VudCA+IDAgJiYgY29sb3JzICE9IE5VTEwpOwogICAgIFNrQVNTRVJUKHMuZkludlR5cGUgPD0gKFNrTWF0cml4OjprVHJhbnNsYXRlX01hc2sgfCBTa01hdHJpeDo6a1NjYWxlX01hc2spKTsKICAgICBTa0FTU0VSVChzLmZEb0ZpbHRlciA9PSBmYWxzZSk7Ci0gICAgCisKICAgICBjb25zdCB1aW50MTZfdCogU0tfUkVTVFJJQ1QgdGFibGUgPSBzLmZCaXRtYXAtPmdldENvbG9yVGFibGUoKS0+bG9jazE2Qml0Q2FjaGUoKTsKICAgICBjb25zdCB1aW50OF90KiBTS19SRVNUUklDVCBzcmNBZGRyID0gKGNvbnN0IHVpbnQ4X3QqKXMuZkJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0gICAgCisKICAgICAvLyBidWZmZXIgaXMgeTMyLCB4MTYsIHgxNiwgeDE2LCB4MTYsIHgxNgogICAgIC8vIGJ1bXAgc3JjQWRkciB0byB0aGUgcHJvcGVyIHJvdywgc2luY2Ugd2UncmUgdG9sZCBZIG5ldmVyIGNoYW5nZXMKICAgICBTa0FTU0VSVCgodW5zaWduZWQpeHlbMF0gPCAodW5zaWduZWQpcy5mQml0bWFwLT5oZWlnaHQoKSk7CiAgICAgc3JjQWRkciA9IChjb25zdCB1aW50OF90KikoKGNvbnN0IGNoYXIqKXNyY0FkZHIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5WzBdICogcy5mQml0bWFwLT5yb3dCeXRlcygpKTsKLSAgICAKKwogICAgIHVpbnQ4X3Qgc3JjOwotICAgIAorCiAgICAgaWYgKDEgPT0gcy5mQml0bWFwLT53aWR0aCgpKSB7CiAgICAgICAgIHNyYyA9IHNyY0FkZHJbMF07CiAgICAgICAgIHVpbnQxNl90IGRzdFZhbHVlID0gdGFibGVbc3JjXTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBjb3VudDggPSBjb3VudCA+PiAzOwogICAgICAgICBjb25zdCB1aW50MTZfdCogU0tfUkVTVFJJQ1QgeHggPSAoY29uc3QgdWludDE2X3QqKSh4eSArIDEpOwotICAgICAgICAKKwogICAgICAgICBhc20gdm9sYXRpbGUgKAogICAgICAgICAgICAgICAgICAgICAgICJjbXAgICAgICAgICVbY291bnQ4XSwgIzAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBjb21wYXJlIGxvb3AgY291bnRlciB3aXRoIDAKICAgICAgICAgICAgICAgICAgICAgICAiYmVxICAgICAgICAyZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gaWYgbG9vcCBjb3VudGVyID09IDAsIGV4aXQKQEAgLTk0LDEzICs5NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgIDogW3RhYmxlXSAiciIgKHRhYmxlKSwgW3NyY0FkZHJdICJyIiAoc3JjQWRkcikKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAicjQiLCAicjUiLCAicjYiLCAicjciLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIKICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGkgPSAoY291bnQgJiA3KTsgaSA+IDA7IC0taSkgewogICAgICAgICAgICAgc3JjID0gc3JjQWRkclsqeHgrK107ICpjb2xvcnMrKyA9IHRhYmxlW3NyY107CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzLmZCaXRtYXAtPmdldENvbG9yVGFibGUoKS0+dW5sb2NrMTZCaXRDYWNoZSgpOyAKKyAgICBzLmZCaXRtYXAtPmdldENvbG9yVGFibGUoKS0+dW5sb2NrMTZCaXRDYWNoZSgpOwogfQogCiB2b2lkIFNJOF9vcGFxdWVfRDMyX25vZmlsdGVyX0RYX2FybSgKZGlmZiAtLWdpdCBhL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzX1NTRTIuY3BwIGIvc3JjL29wdHMvU2tCbGl0Um93X29wdHNfU1NFMi5jcHAKaW5kZXggODRhMjM5Ny4uMjdjZTFlNSAxMDA2NDQKLS0tIGEvc3JjL29wdHMvU2tCbGl0Um93X29wdHNfU1NFMi5jcHAKKysrIGIvc3JjL29wdHMvU2tCbGl0Um93X29wdHNfU1NFMi5jcHAKQEAgLTU1MiwxNCArNTUyLDE0IEBACiAKICAgICBfX20xMjhpIGcgPSBfbW1fYW5kX3NpMTI4KFNrUGFja2VkRzE2eDVUb1VubWFza2VkRzMyeDVfU1NFMihtYXNrKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXQxX2VwaTMyKDB4MUYgPDwgU0tfRzMyX1NISUZUKSk7Ci0gICAgCisKICAgICBfX20xMjhpIGIgPSBfbW1fYW5kX3NpMTI4KFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVfU1NFMihtYXNrKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXQxX2VwaTMyKDB4MUYgPDwgU0tfQjMyX1NISUZUKSk7Ci0gICAgICAgICAgICAKKwogICAgIC8vIFBhY2sgdGhlIDQgMTZiaXQgbWFzayBwaXhlbHMgaW50byA0IDMyYml0IHBpeGVscywgKHAwLCBwMSwgcDIsIHAzKQogICAgIG1hc2sgPSBfbW1fb3Jfc2kxMjgoX21tX29yX3NpMTI4KHIsIGcpLCBiKTsKIAotICAgIC8vIEludGVybGVhdmUgUixHLEIgaW50byB0aGUgbG93ZXIgYnl0ZSBvZiB3b3JkLiAKKyAgICAvLyBJbnRlcmxlYXZlIFIsRyxCIGludG8gdGhlIGxvd2VyIGJ5dGUgb2Ygd29yZC4KICAgICBfX20xMjhpIG1hc2tMbywgbWFza0hpOwogICAgIG1hc2tMbyA9IF9tbV91bnBhY2tsb19lcGk4KG1hc2ssIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgIG1hc2tIaSA9IF9tbV91bnBhY2toaV9lcGk4KG1hc2ssIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwpAQCAtNjAwLDE0ICs2MDAsMTQgQEAKIAogICAgIF9fbTEyOGkgZyA9IF9tbV9hbmRfc2kxMjgoU2tQYWNrZWRHMTZ4NVRvVW5tYXNrZWRHMzJ4NV9TU0UyKG1hc2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldDFfZXBpMzIoMHgxRiA8PCBTS19HMzJfU0hJRlQpKTsKLSAgICAKKwogICAgIF9fbTEyOGkgYiA9IF9tbV9hbmRfc2kxMjgoU2tQYWNrZWRCMTZ4NVRvVW5tYXNrZWRCMzJ4NV9TU0UyKG1hc2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldDFfZXBpMzIoMHgxRiA8PCBTS19CMzJfU0hJRlQpKTsKIAogICAgIC8vIFBhY2sgdGhlIDQgMTZiaXQgbWFzayBwaXhlbHMgaW50byA0IDMyYml0IHBpeGVscywgKHAwLCBwMSwgcDIsIHAzKQogICAgIG1hc2sgPSBfbW1fb3Jfc2kxMjgoX21tX29yX3NpMTI4KHIsIGcpLCBiKTsKIAotICAgIC8vIEludGVybGVhdmUgUixHLEIgaW50byB0aGUgbG93ZXIgYnl0ZSBvZiB3b3JkLiAKKyAgICAvLyBJbnRlcmxlYXZlIFIsRyxCIGludG8gdGhlIGxvd2VyIGJ5dGUgb2Ygd29yZC4KICAgICBfX20xMjhpIG1hc2tMbywgbWFza0hpOwogICAgIG1hc2tMbyA9IF9tbV91bnBhY2tsb19lcGk4KG1hc2ssIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwogICAgIG1hc2tIaSA9IF9tbV91bnBhY2toaV9lcGk4KG1hc2ssIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAgICAgaW50IHNyY1IgPSBTa0NvbG9yR2V0Uihjb2xvcik7CiAgICAgaW50IHNyY0cgPSBTa0NvbG9yR2V0Ryhjb2xvcik7CiAgICAgaW50IHNyY0IgPSBTa0NvbG9yR2V0Qihjb2xvcik7Ci0gICAgCisKICAgICBzcmNBID0gU2tBbHBoYTI1NVRvMjU2KHNyY0EpOwogCiAgICAgaWYgKHdpZHRoID49IDQpIHsKQEAgLTY3NCwxNCArNjc0LDE0IEBACiAKICAgICAgICAgICAgIC8vIGlmIG1hc2sgcGl4ZWxzIGFyZSBub3QgYWxsIHplcm8sIHdlIHdpbGwgYmxlbmQgdGhlIGRzdCBwaXhlbHMKICAgICAgICAgICAgIGlmIChwYWNrX2NtcCAhPSAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICAvLyBVbnBhY2sgNCAxNmJpdCBtYXNrIHBpeGVscyB0byAKKyAgICAgICAgICAgICAgICAvLyBVbnBhY2sgNCAxNmJpdCBtYXNrIHBpeGVscyB0bwogICAgICAgICAgICAgICAgIC8vIChwMCwgMCwgcDEsIDAsIHAyLCAwLCBwMywgMCkKICAgICAgICAgICAgICAgICBtYXNrX3BpeGVsID0gX21tX3VucGFja2xvX2VwaTE2KG1hc2tfcGl4ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgNCAzMmJpdCBkc3QgcGl4ZWxzCiAgICAgICAgICAgICAgICAgX19tMTI4aSByZXN1bHQgPSBTa0JsZW5kTENEMTZfU1NFMihzcmNpLCBkc3RfcGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3BpeGVsLCBzY2FsZSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19waXhlbCwgc2NhbGUpOwogICAgICAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChkLCByZXN1bHQpOwogICAgICAgICAgICAgfQogCkBAIC02OTcsNyArNjk3LDcgQEAKICAgICAgICAgKmRzdCA9IFNrQmxlbmRMQ0QxNihzcmNBLCBzcmNSLCBzcmNHLCBzcmNCLCAqZHN0LCAqc3JjKTsKICAgICAgICAgc3JjKys7CiAgICAgICAgIGRzdCsrOwotICAgICAgICB3aWR0aC0tOyAgICAgICAgCisgICAgICAgIHdpZHRoLS07CiAgICAgfQogfQogCkBAIC03MzYsMTQgKzczNiwxNCBAQAogCiAgICAgICAgICAgICAvLyBpZiBtYXNrIHBpeGVscyBhcmUgbm90IGFsbCB6ZXJvLCB3ZSB3aWxsIGJsZW5kIHRoZSBkc3QgcGl4ZWxzCiAgICAgICAgICAgICBpZiAocGFja19jbXAgIT0gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgLy8gVW5wYWNrIDQgMTZiaXQgbWFzayBwaXhlbHMgdG8gCisgICAgICAgICAgICAgICAgLy8gVW5wYWNrIDQgMTZiaXQgbWFzayBwaXhlbHMgdG8KICAgICAgICAgICAgICAgICAvLyAocDAsIDAsIHAxLCAwLCBwMiwgMCwgcDMsIDApCiAgICAgICAgICAgICAgICAgbWFza19waXhlbCA9IF9tbV91bnBhY2tsb19lcGkxNihtYXNrX3BpeGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjgoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIDQgMzJiaXQgZHN0IHBpeGVscwogICAgICAgICAgICAgICAgIF9fbTEyOGkgcmVzdWx0ID0gU2tCbGVuZExDRDE2T3BhcXVlX1NTRTIoc3JjaSwgZHN0X3BpeGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19waXhlbCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19waXhlbCk7CiAgICAgICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KGQsIHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAKQEAgLTc1OSw2ICs3NTksNiBAQAogICAgICAgICAqZHN0ID0gU2tCbGVuZExDRDE2T3BhcXVlKHNyY1IsIHNyY0csIHNyY0IsICpkc3QsICpzcmMsIG9wYXF1ZURzdCk7CiAgICAgICAgIHNyYysrOwogICAgICAgICBkc3QrKzsKLSAgICAgICAgd2lkdGgtLTsgICAgICAgIAorICAgICAgICB3aWR0aC0tOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzX2FybV9uZW9uLmNwcCBiL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzX2FybV9uZW9uLmNwcAppbmRleCA2ZjJmN2U1Li4xNGQ1OTY4IDEwMDY0NAotLS0gYS9zcmMvb3B0cy9Ta0JsaXRSb3dfb3B0c19hcm1fbmVvbi5jcHAKKysrIGIvc3JjL29wdHMvU2tCbGl0Um93X29wdHNfYXJtX25lb24uY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICBpZiAoY291bnQgPj0gOCkgewogICAgICAgICB1aW50MTZfdCogU0tfUkVTVFJJQ1Qga2VlcF9kc3Q7Ci0gICAgICAgIAorCiAgICAgICAgIGFzbSB2b2xhdGlsZSAoCiAgICAgICAgICAgICAgICAgICAgICAgImFuZHMgICAgICAgaXAsICVbY291bnRdLCAjNyAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZtb3YudTggICAgZDMxLCAjMTw8NyAgICAgICAgICAgICAgICAgIFxuXHQiCkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAiaXQgZXEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAibW92ZXEgICAgICBpcCwgIzggICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAibW92ICAgICAgICAlW2tlZXBfZHN0XSwgJVtkc3RdICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgICVbc3JjXSwgJVtzcmNdLCBpcCwgTFNMIzIgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgICVbZHN0XSwgJVtkc3RdLCBpcCwgTFNMIzEgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJzdWJzICAgICAgICVbY291bnRdLCAlW2NvdW50XSwgaXAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJiICAgICAgICAgIDlmICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgIC8vIExPT1AKICAgICAgICAgICAgICAgICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAidmxkMS4xNiAgICB7cTEyfSwgWyVbZHN0XV0hICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidmxkNC44ICAgICB7ZDAtZDN9LCBbJVtzcmNdXSEgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidnN0MS4xNiAgICB7cTEwfSwgWyVba2VlcF9kc3RdXSAgICAgICAgXG5cdCIKQEAgLTYxLDExICs2MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICJ2c2hsLnU4ICAgIGQ0LCBkNCwgIzMgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2c2hsLnU4ICAgIGQ1LCBkNSwgIzIgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2c2hsLnU4ICAgIGQ2LCBkNiwgIzMgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgInZtb3ZsLnU4ICAgcTE0LCBkMzEgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZtb3ZsLnU4ICAgcTEzLCBkMzEgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZtb3ZsLnU4ICAgcTEyLCBkMzEgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAvLyBkdXBsaWNhdGUgaW4gNC8yLzEgJiA4cGl4IHZzbnMKICAgICAgICAgICAgICAgICAgICAgICAidm12bi44ICAgICBkMzAsIGQzICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidm1sYWwudTggICBxMTQsIGQzMCwgZDYgICAgICAgICAgICAgICAgXG5cdCIKQEAgLTgwLDUzICs4MCw1MyBAQAogICAgICAgICAgICAgICAgICAgICAgICJ2YWRkaG4udTE2IGQ0LCBxMTIsIHE4ICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVudGlvbmFsbHkgZG9uJ3QgY2FsY3VsYXRlIGFscGhhCiAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0IGluIGQ0LWQ2Ci0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAidnFhZGQudTggICBkNSwgZDUsIGQxICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidnFhZGQudTggICBkNCwgZDQsIGQyICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgIC8vIHBhY2sgODg4OCB7ZDQtZDZ9IHRvIDA1NjUgcTEwCiAgICAgICAgICAgICAgICAgICAgICAgInZzaGxsLnU4ICAgcTEwLCBkNiwgIzggICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzaGxsLnU4ICAgcTMsIGQ1LCAjOCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzaGxsLnU4ICAgcTIsIGQ0LCAjOCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzcmkudTE2ICAgcTEwLCBxMywgIzUgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzcmkudTE2ICAgcTEwLCBxMiwgIzExICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAiYm5lICAgICAgICAyYiAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidnN0MS4xNiAgICAgIHtxMTB9LCBbJVtrZWVwX2RzdF1dICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICA6IFtjb3VudF0gIityIiAoY291bnQpCi0gICAgICAgICAgICAgICAgICAgICAgOiBbZHN0XSAiciIgKGRzdCksIFtrZWVwX2RzdF0gInIiIChrZWVwX2RzdCksIFtzcmNdICJyIiAoc3JjKSAKKyAgICAgICAgICAgICAgICAgICAgICA6IFtkc3RdICJyIiAoZHN0KSwgW2tlZXBfZHN0XSAiciIgKGtlZXBfZHN0KSwgW3NyY10gInIiIChzcmMpCiAgICAgICAgICAgICAgICAgICAgICAgOiAiaXAiLCAiY2MiLCAibWVtb3J5IiwgImQwIiwiZDEiLCJkMiIsImQzIiwiZDQiLCJkNSIsImQ2IiwiZDciLAogICAgICAgICAgICAgICAgICAgICAgICJkMTYiLCJkMTciLCJkMTgiLCJkMTkiLCJkMjAiLCJkMjEiLCJkMjIiLCJkMjMiLCJkMjQiLCJkMjUiLCJkMjYiLCJkMjciLCJkMjgiLCJkMjkiLAogICAgICAgICAgICAgICAgICAgICAgICJkMzAiLCJkMzEiCiAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICB9Ci0gICAgZWxzZSAKKyAgICBlbHNlCiAgICAgeyAgIC8vIGhhbmRsZSBjb3VudCA8IDgKICAgICAgICAgdWludDE2X3QqIFNLX1JFU1RSSUNUIGtlZXBfZHN0OwotICAgICAgICAKKwogICAgICAgICBhc20gdm9sYXRpbGUgKAogICAgICAgICAgICAgICAgICAgICAgICJ2bW92LnU4ICAgIGQzMSwgIzE8PDcgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJtb3YgICAgICAgICVba2VlcF9kc3RdLCAlW2RzdF0gICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgInRzdCAgICAgICAgJVtjb3VudF0sICM0ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgImJlcSAgICAgICAgMTRmICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZsZDEuMTYgICAge2QyNX0sIFslW2RzdF1dISAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZsZDEuMzIgICAge3ExfSwgWyVbc3JjXV0hICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAiMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInRzdCAgICAgICAgJVtjb3VudF0sICMyICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgImJlcSAgICAgICAgMTJmICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZsZDEuMzIgICAge2QyNFsxXX0sIFslW2RzdF1dISAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZsZDEuMzIgICAge2QxfSwgWyVbc3JjXV0hICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAiMTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInRzdCAgICAgICAgJVtjb3VudF0sICMxICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgImJlcSAgICAgICAgMTFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZsZDEuMTYgICAge2QyNFsxXX0sIFslW2RzdF1dISAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZsZDEuMzIgICAge2QwWzFdfSwgWyVbc3JjXV0hICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAiMTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgLy8gdW56aXBzIGFjaGlldmUgdGhlIHNhbWUgYXMgYSB2bGQ0IG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICJ2dXpwcS51MTYgIHEwLCBxMSAgICAgICAgICAgICAgICAgICAgICBcblx0IgpAQCAtMTQxLDExICsxNDEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAidnNobC51OCAgICBkNCwgZDQsICMzICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidnNobC51OCAgICBkNSwgZDUsICMyICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidnNobC51OCAgICBkNiwgZDYsICMzICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICJ2bW92bC51OCAgIHExNCwgZDMxICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2bW92bC51OCAgIHExMywgZDMxICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2bW92bC51OCAgIHExMiwgZDMxICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlIGluIDQvMi8xICYgOHBpeCB2c25zCiAgICAgICAgICAgICAgICAgICAgICAgInZtdm4uOCAgICAgZDMwLCBkMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZtbGFsLnU4ICAgcTE0LCBkMzAsIGQ2ICAgICAgICAgICAgICAgIFxuXHQiCkBAIC0xNjAsMzIgKzE2MCwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICJ2YWRkaG4udTE2IGQ0LCBxMTIsIHE4ICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVudGlvbmFsbHkgZG9uJ3QgY2FsY3VsYXRlIGFscGhhCiAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0IGluIGQ0LWQ2Ci0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAidnFhZGQudTggICBkNSwgZDUsIGQxICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAidnFhZGQudTggICBkNCwgZDQsIGQyICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgIC8vIHBhY2sgODg4OCB7ZDQtZDZ9IHRvIDA1NjUgcTEwCiAgICAgICAgICAgICAgICAgICAgICAgInZzaGxsLnU4ICAgcTEwLCBkNiwgIzggICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzaGxsLnU4ICAgcTMsIGQ1LCAjOCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzaGxsLnU4ICAgcTIsIGQ0LCAjOCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzcmkudTE2ICAgcTEwLCBxMywgIzUgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgInZzcmkudTE2ICAgcTEwLCBxMiwgIzExICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZQogICAgICAgICAgICAgICAgICAgICAgICJ0c3QgICAgICAgICVbY291bnRdLCAjNCAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJiZXEgICAgICAgIDI0ZiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2c3QxLjE2ICAgIHtkMjF9LCBbJVtrZWVwX2RzdF1dISAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgIjI0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ0c3QgICAgICAgICVbY291bnRdLCAjMiAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJiZXEgICAgICAgIDIyZiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2c3QxLjMyICAgIHtkMjBbMV19LCBbJVtrZWVwX2RzdF1dISAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgIjIyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ0c3QgICAgICAgICVbY291bnRdLCAjMSAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJiZXEgICAgICAgIDIxZiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICJ2c3QxLjE2ICAgIHtkMjBbMV19LCBbJVtrZWVwX2RzdF1dISAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgIjIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgIDogW2NvdW50XSAiK3IiIChjb3VudCkKICAgICAgICAgICAgICAgICAgICAgICA6IFtkc3RdICJyIiAoZHN0KSwgW2tlZXBfZHN0XSAiciIgKGtlZXBfZHN0KSwgW3NyY10gInIiIChzcmMpCkBAIC0yMDksMTUgKzIwOSwxNSBAQAogICAgICAqICAgICBuZXZlciBleGNlZWQgMS4gSXQncyBwb3NzaWJsZSB0byBpbXByb3ZlIGFjY3VyYWN5IHZzLiBhIGZsb2F0aW5nIHBvaW50CiAgICAgICogICAgIGltcGxlbWVudGF0aW9uIGJ5IGludHJvZHVjaW5nIHJvdW5kaW5nIHJpZ2h0IHNoaWZ0cyAodnJzaHIpIGZvciB0aGUgZmluYWwgc3RhZ2UuCiAgICAgICogICAgIFJvdW5kaW5nIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjb2RlIGJlbG93LCBiZWNhdXNlIGFsdGhvdWdoIHJlc3VsdHMgd291bGQgYmUgY2xvc2VyCi0gICAgICogICAgIHRvIGEgZmxvYXRpbmcgcG9pbnQgaW1wbGVtZW50YXRpb24sIHRoZSBudW1iZXIgb2YgbWlzbWF0Y2hlcyBjb21wYXJlZCB0byB0aGUgCisgICAgICogICAgIHRvIGEgZmxvYXRpbmcgcG9pbnQgaW1wbGVtZW50YXRpb24sIHRoZSBudW1iZXIgb2YgbWlzbWF0Y2hlcyBjb21wYXJlZCB0byB0aGUKICAgICAgKiAgICAgb3JpZ2luYWwgY29kZSB3b3VsZCBiZSBmYXIgZ3JlYXRlci4KICAgICAgKiAgMi4gT24gY2VydGFpbiBpbnB1dHMsIHRoZSBvcmlnaW5hbCBjb2RlIGNhbiBvdmVyZmxvdywgY2F1c2luZyBjb2xvdXIgY2hhbm5lbHMgdG8KICAgICAgKiAgICAgbWl4LiBBbHRob3VnaCB0aGUgTmVvbiBjb2RlIGNhbiBhbHNvIG92ZXJmbG93LCBpdCBkb2Vzbid0IGFsbG93IG9uZSBjb2xvdXIgY2hhbm5lbAogICAgICAqICAgICB0byBhZmZlY3QgYW5vdGhlci4KICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIAorCiAjaWYgMQotCQkvKiByZWZsZWN0cyBTa0FscGhhMjU1VG8yNTYoKSdzIGNoYW5nZSBmcm9tIGErYT4+NyB0byBhKzEgKi8KKyAgICAgICAgLyogcmVmbGVjdHMgU2tBbHBoYTI1NVRvMjU2KCkncyBjaGFuZ2UgZnJvbSBhK2E+PjcgdG8gYSsxICovCiAgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICAlW2FscGhhXSwgJVthbHBoYV0sICMxICAgICAgICAgXG5cdCIgICAvLyBhZGp1c3QgcmFuZ2Ugb2YgYWxwaGEgMC0yNTYKICNlbHNlCiAgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICAlW2FscGhhXSwgJVthbHBoYV0sICVbYWxwaGFdLCBsc3IgIzcgICAgXG5cdCIgICAvLyBhZGp1c3QgcmFuZ2Ugb2YgYWxwaGEgMC0yNTYKQEAgLTIyNyw2MyArMjI3LDYzIEBACiAgICAgICAgICAgICAgICAgICAidm1vdi51MTYgICBkMlswXSwgJVthbHBoYV0gICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gbW92ZSBhbHBoYSB0byBOZW9uCiAgICAgICAgICAgICAgICAgICAiYmVxICAgICAgICAyZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gaWYgY291bnQ4ID09IDAsIGV4aXQKICAgICAgICAgICAgICAgICAgICJ2bW92LnUxNiAgIHExNSwgIzB4MWYgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzZXQgdXAgYmx1ZSBtYXNrCi0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJ2bGQxLnUxNiAgIHtkMCwgZDF9LCBbJVtkc3RdXSAgICAgICAgICAgICAgXG5cdCIgICAvLyBsb2FkIGVpZ2h0IGRzdCBSR0I1NjUgcGl4ZWxzCiAgICAgICAgICAgICAgICAgICAic3VicyAgICAgICByNCwgcjQsICMxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gZGVjcmVtZW50IGxvb3AgY291bnRlcgogICAgICAgICAgICAgICAgICAgInZsZDQudTggICAge2QyNCwgZDI1LCBkMjYsIGQyN30sIFslW3NyY11dISBcblx0IiAgIC8vIGxvYWQgZWlnaHQgc3JjIEFCR1IzMiBwaXhlbHMKICAgICAgICAgICAgICAgICAgIC8vICBhbmQgZGVpbnRlcmxlYXZlCi0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgInZzaGwudTE2ICAgcTksIHEwLCAjNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHNoaWZ0IGdyZWVuIHRvIHRvcCBvZiBsYW5lcwogICAgICAgICAgICAgICAgICAgInZhbmQgICAgICAgcTEwLCBxMCwgcTE1ICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGV4dHJhY3QgYmx1ZQogICAgICAgICAgICAgICAgICAgInZzaHIudTE2ICAgcTgsIHEwLCAjMTEgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGV4dHJhY3QgcmVkCiAgICAgICAgICAgICAgICAgICAidnNoci51MTYgICBxOSwgcTksICMxMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gZXh0cmFjdCBncmVlbgogICAgICAgICAgICAgICAgICAgLy8gZHN0cmdiID0ge3E4LCBxOSwgcTEwfQotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICJ2c2hyLnU4ICAgIGQyNCwgZDI0LCAjMyAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzaGlmdCByZWQgdG8gNTY1IHJhbmdlCiAgICAgICAgICAgICAgICAgICAidnNoci51OCAgICBkMjUsIGQyNSwgIzIgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gc2hpZnQgZ3JlZW4gdG8gNTY1IHJhbmdlCiAgICAgICAgICAgICAgICAgICAidnNoci51OCAgICBkMjYsIGQyNiwgIzMgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gc2hpZnQgYmx1ZSB0byA1NjUgcmFuZ2UKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAidm1vdmwudTggICBxMTEsIGQyNCAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gd2lkZW4gcmVkIHRvIDE2IGJpdHMKICAgICAgICAgICAgICAgICAgICJ2bW92bC51OCAgIHExMiwgZDI1ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyB3aWRlbiBncmVlbiB0byAxNiBiaXRzCiAgICAgICAgICAgICAgICAgICAidm1vdmwudTggICBxMTQsIGQyNyAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gd2lkZW4gYWxwaGEgdG8gMTYgYml0cwogICAgICAgICAgICAgICAgICAgInZtb3ZsLnU4ICAgcTEzLCBkMjYgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHdpZGVuIGJsdWUgdG8gMTYgYml0cwogICAgICAgICAgICAgICAgICAgLy8gc3JjcmdiYSA9IHtxMTEsIHExMiwgcTEzLCBxMTR9Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgInZtdWwudTE2ICAgcTIsIHExNCwgZDJbMF0gICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHNhICogc3JjX3NjYWxlCiAgICAgICAgICAgICAgICAgICAidm11bC51MTYgICBxMTEsIHExMSwgZDJbMF0gICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gcmVkIHJlc3VsdCA9IHNyY19yZWQgKiBzcmNfc2NhbGUKICAgICAgICAgICAgICAgICAgICJ2bXVsLnUxNiAgIHExMiwgcTEyLCBkMlswXSAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBncm4gcmVzdWx0ID0gc3JjX2dybiAqIHNyY19zY2FsZQogICAgICAgICAgICAgICAgICAgInZtdWwudTE2ICAgcTEzLCBxMTMsIGQyWzBdICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGJsdSByZXN1bHQgPSBzcmNfYmx1ICogc3JjX3NjYWxlCi0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgInZzaHIudTE2ICAgcTIsIHEyLCAjOCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHNhICogc3JjX3NjYWxlID4+IDgKICAgICAgICAgICAgICAgICAgICJ2c3ViLnUxNiAgIHEyLCBxMywgcTIgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyAyNTUgLSAoc2EgKiBzcmNfc2NhbGUgPj4gOCkKICAgICAgICAgICAgICAgICAgIC8vIGRzdF9zY2FsZSA9IHEyCi0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgInZtbGEudTE2ICAgcTExLCBxOCwgcTIgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHJlZCByZXN1bHQgKz0gZHN0X3JlZCAqIGRzdF9zY2FsZQogICAgICAgICAgICAgICAgICAgInZtbGEudTE2ICAgcTEyLCBxOSwgcTIgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGdybiByZXN1bHQgKz0gZHN0X2dybiAqIGRzdF9zY2FsZQogICAgICAgICAgICAgICAgICAgInZtbGEudTE2ICAgcTEzLCBxMTAsIHEyICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGJsdSByZXN1bHQgKz0gZHN0X2JsdSAqIGRzdF9zY2FsZQogCiAjaWYgMQotCS8vIHRyeWluZyBmb3IgYSBiZXR0ZXIgbWF0Y2ggd2l0aCBTa0RpdjI1NVJvdW5kKGEpCi0JLy8gQyBhbGcgaXM6ICBhKz0xMjg7IChhK2E+PjgpPj44Ci0JLy8gd2UnbGwgdXNlIGp1c3QgYSByb3VuZGluZyBzaGlmdCBbcTIgaXMgYXZhaWxhYmxlIGZvciBzY3JhdGNoXQorICAgIC8vIHRyeWluZyBmb3IgYSBiZXR0ZXIgbWF0Y2ggd2l0aCBTa0RpdjI1NVJvdW5kKGEpCisgICAgLy8gQyBhbGcgaXM6ICBhKz0xMjg7IChhK2E+PjgpPj44CisgICAgLy8gd2UnbGwgdXNlIGp1c3QgYSByb3VuZGluZyBzaGlmdCBbcTIgaXMgYXZhaWxhYmxlIGZvciBzY3JhdGNoXQogICAgICAgICAgICAgICAgICAgInZyc2hyLnUxNiAgIHExMSwgcTExLCAjOCAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzaGlmdCBkb3duIHJlZAogICAgICAgICAgICAgICAgICAgInZyc2hyLnUxNiAgIHExMiwgcTEyLCAjOCAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzaGlmdCBkb3duIGdyZWVuCiAgICAgICAgICAgICAgICAgICAidnJzaHIudTE2ICAgcTEzLCBxMTMsICM4ICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIHNoaWZ0IGRvd24gYmx1ZQogI2Vsc2UKLQkvLyBhcm0ncyBvcmlnaW5hbCAidHJ1bmNhdGluZyBkaXZpZGUgYnkgMjU2IgorICAgIC8vIGFybSdzIG9yaWdpbmFsICJ0cnVuY2F0aW5nIGRpdmlkZSBieSAyNTYiCiAgICAgICAgICAgICAgICAgICAidnNoci51MTYgICBxMTEsIHExMSwgIzggICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gc2hpZnQgZG93biByZWQKICAgICAgICAgICAgICAgICAgICJ2c2hyLnUxNiAgIHExMiwgcTEyLCAjOCAgICAgICAgICAgICAgICAgICAgXG5cdCIgICAvLyBzaGlmdCBkb3duIGdyZWVuCiAgICAgICAgICAgICAgICAgICAidnNoci51MTYgICBxMTMsIHExMywgIzggICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gc2hpZnQgZG93biBibHVlCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAidnNsaS51MTYgICBxMTMsIHExMiwgIzUgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gaW5zZXJ0IGdyZWVuIGludG8gYmx1ZQogICAgICAgICAgICAgICAgICAgInZzbGkudTE2ICAgcTEzLCBxMTEsICMxMSAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGluc2VydCByZWQgaW50byBncmVlbi9ibHVlCiAgICAgICAgICAgICAgICAgICAidnN0MS4xNiAgICB7ZDI2LCBkMjd9LCBbJVtkc3RdXSEgICAgICAgICAgIFxuXHQiICAgLy8gd3JpdGUgcGl4ZWwgYmFjayB0byBkc3QsIHVwZGF0ZSBwdHIKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAiYm5lICAgICAgICAxYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gaWYgY291bnRlciAhPSAwLCBsb29wCiAgICAgICAgICAgICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIC8vIGV4aXQKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICA6IFtzcmNdICIrciIgKHNyYyksIFtkc3RdICIrciIgKGRzdCksIFtjb3VudF0gIityIiAoY291bnQpLCBbYWxwaGFdICIrciIgKGFscGhhX2Zvcl9hc20pCiAgICAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiLCAicjQiLCAiZDAiLCAiZDEiLCAiZDIiLCAiZDMiLCAiZDQiLCAiZDUiLCAiZDYiLCAiZDciLCAiZDE2IiwgImQxNyIsICJkMTgiLCAiZDE5IiwgImQyMCIsICJkMjEiLCAiZDIyIiwgImQyMyIsICJkMjQiLCAiZDI1IiwgImQyNiIsICJkMjciLCAiZDI4IiwgImQyOSIsICJkMzAiLCAiZDMxIgpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgNiwgMiwgNywgMywgNiwgMiwgNywgMywgNiwgMiwgNywgMywKICAgICAxLCA1LCAwLCA0LCAxLCA1LCAwLCA0LCAxLCA1LCAwLCA0LAogICAgIDcsIDMsIDYsIDIsIDcsIDMsIDYsIDIsIDcsIDMsIDYsIDIsCi0gICAgCisKIH07CiAKIHZvaWQgUzMyX0Q1NjVfQmxlbmRfRGl0aGVyX25lb24odWludDE2X3QgKmRzdCwgY29uc3QgU2tQTUNvbG9yICpzcmMsCkBAIC0zMjQsMTAgKzMyNCwxMCBAQAogewogICAgIC8qIHNlbGVjdCByb3cgYW5kIG9mZnNldCBmb3IgZGl0aGVyIGFycmF5ICovCiAgICAgY29uc3QgdWludDhfdCAqZHN0YXJ0ID0gJmdEaXRoZXJNYXRyaXhfTmVvblsoeSYzKSoxMiArICh4JjMpXTsKLSAgICAKKwogICAgIC8qIHJlc2NhbGUgYWxwaGEgdG8gcmFuZ2UgMCAtIDI1NiAqLwogICAgIGludCBzY2FsZSA9IFNrQWxwaGEyNTVUbzI1NihhbHBoYSk7Ci0gICAgCisKICAgICBhc20gdm9sYXRpbGUgKAogICAgICAgICAgICAgICAgICAgInZsZDEuOCAgICAgICAgIHtkMzF9LCBbJVtkc3RhcnRdXSAgICAgICAgICAgICAgXG5cdCIgICAvLyBsb2FkIGRpdGhlciB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICJ2c2hyLnU4ICAgICAgICBkMzAsIGQzMSwgIzEgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgLy8gY2FsYy4gZ3JlZW4gZGl0aGVyIHZhbHVlcwpAQCAtMzgzLDEzICszODMsMTMgQEAKICAgICAgICAgICAgICAgICAgIDogW2RzdGFydF0gInIiIChkc3RhcnQpLCBbc2NhbGVdICJyIiAoc2NhbGUpCiAgICAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiLCAiZDAiLCAiZDEiLCAiZDIiLCAiZDMiLCAiZDQiLCAiZDUiLCAiZDYiLCAiZDE2IiwgImQxNyIsICJkMTgiLCAiZDE5IiwgImQyMCIsICJkMjEiLCAiZDIyIiwgImQyMyIsICJkMjQiLCAiZDI4IiwgImQyOSIsICJkMzAiLCAiZDMxIgogICAgICAgICAgICAgICAgICAgKTsKLSAgICAKKwogICAgIERJVEhFUl81NjVfU0NBTih5KTsKLSAgICAKKwogICAgIHdoaWxlKChjb3VudCAmIDcpID4gMCkKICAgICB7CiAgICAgICAgIFNrUE1Db2xvciBjID0gKnNyYysrOwotICAgICAgICAKKwogICAgICAgICBpbnQgZGl0aGVyID0gRElUSEVSX1ZBTFVFKHgpOwogICAgICAgICBpbnQgc3IgPSBTa0dldFBhY2tlZFIzMihjKTsKICAgICAgICAgaW50IHNnID0gU2tHZXRQYWNrZWRHMzIoYyk7CkBAIC0zOTcsNyArMzk3LDcgQEAKICAgICAgICAgc3IgPSBTa0RJVEhFUl9SMzJUbzU2NShzciwgZGl0aGVyKTsKICAgICAgICAgc2cgPSBTa0RJVEhFUl9HMzJUbzU2NShzZywgZGl0aGVyKTsKICAgICAgICAgc2IgPSBTa0RJVEhFUl9CMzJUbzU2NShzYiwgZGl0aGVyKTsKLSAgICAgICAgCisKICAgICAgICAgdWludDE2X3QgZCA9ICpkc3Q7CiAgICAgICAgICpkc3QrKyA9IFNrUGFja1JHQjE2KFNrQWxwaGFCbGVuZChzciwgU2tHZXRQYWNrZWRSMTYoZCksIHNjYWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tBbHBoYUJsZW5kKHNnLCBTa0dldFBhY2tlZEcxNihkKSwgc2NhbGUpLApAQCAtNDE1LDEwMCArNDE1LDEwMCBAQAogICAgIGlmIChjb3VudCA+IDApIHsKIAogCi0JdWludDh4OF90IGFscGhhX21hc2s7CisgICAgdWludDh4OF90IGFscGhhX21hc2s7CiAKLQlzdGF0aWMgY29uc3QgdWludDhfdCBhbHBoYV9tYXNrX3NldHVwW10gPSB7MywzLDMsMyw3LDcsNyw3fTsKLQlhbHBoYV9tYXNrID0gdmxkMV91OChhbHBoYV9tYXNrX3NldHVwKTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBhbHBoYV9tYXNrX3NldHVwW10gPSB7MywzLDMsMyw3LDcsNyw3fTsKKyAgICBhbHBoYV9tYXNrID0gdmxkMV91OChhbHBoYV9tYXNrX3NldHVwKTsKIAotCS8qIGRvIHRoZSBORU9OIHVucm9sbGVkIGNvZGUgKi8KLSNkZWZpbmUJVU5ST0xMCTQKLQl3aGlsZSAoY291bnQgPj0gVU5ST0xMKSB7Ci0JICAgIHVpbnQ4eDhfdCBzcmNfcmF3LCBkc3RfcmF3LCBkc3RfZmluYWw7Ci0JICAgIHVpbnQ4eDhfdCBzcmNfcmF3XzIsIGRzdF9yYXdfMiwgZHN0X2ZpbmFsXzI7CisgICAgLyogZG8gdGhlIE5FT04gdW5yb2xsZWQgY29kZSAqLworI2RlZmluZSAgICBVTlJPTEwgICAgNAorICAgIHdoaWxlIChjb3VudCA+PSBVTlJPTEwpIHsKKyAgICAgICAgdWludDh4OF90IHNyY19yYXcsIGRzdF9yYXcsIGRzdF9maW5hbDsKKyAgICAgICAgdWludDh4OF90IHNyY19yYXdfMiwgZHN0X3Jhd18yLCBkc3RfZmluYWxfMjsKIAotCSAgICAvKiBnZXQgdGhlIHNvdXJjZSAqLwotCSAgICBzcmNfcmF3ID0gdnJlaW50ZXJwcmV0X3U4X3UzMih2bGQxX3UzMihzcmMpKTsKLSNpZglVTlJPTEwgPiAyCi0JICAgIHNyY19yYXdfMiA9IHZyZWludGVycHJldF91OF91MzIodmxkMV91MzIoc3JjKzIpKTsKKyAgICAgICAgLyogZ2V0IHRoZSBzb3VyY2UgKi8KKyAgICAgICAgc3JjX3JhdyA9IHZyZWludGVycHJldF91OF91MzIodmxkMV91MzIoc3JjKSk7CisjaWYgICAgVU5ST0xMID4gMgorICAgICAgICBzcmNfcmF3XzIgPSB2cmVpbnRlcnByZXRfdThfdTMyKHZsZDFfdTMyKHNyYysyKSk7CiAjZW5kaWYKIAotCSAgICAvKiBnZXQgYW5kIGhvbGQgdGhlIGRzdCB0b28gKi8KLQkgICAgZHN0X3JhdyA9IHZyZWludGVycHJldF91OF91MzIodmxkMV91MzIoZHN0KSk7Ci0jaWYJVU5ST0xMID4gMgotCSAgICBkc3RfcmF3XzIgPSB2cmVpbnRlcnByZXRfdThfdTMyKHZsZDFfdTMyKGRzdCsyKSk7CisgICAgICAgIC8qIGdldCBhbmQgaG9sZCB0aGUgZHN0IHRvbyAqLworICAgICAgICBkc3RfcmF3ID0gdnJlaW50ZXJwcmV0X3U4X3UzMih2bGQxX3UzMihkc3QpKTsKKyNpZiAgICBVTlJPTEwgPiAyCisgICAgICAgIGRzdF9yYXdfMiA9IHZyZWludGVycHJldF91OF91MzIodmxkMV91MzIoZHN0KzIpKTsKICNlbmRpZgogCi0JLyogMXN0IGFuZCAybmQgYml0cyBvZiB0aGUgdW5yb2xsaW5nICovCi0JewotCSAgICB1aW50OHg4X3QgZHN0X2Nvb2tlZDsKLQkgICAgdWludDE2eDhfdCBkc3Rfd2lkZTsKLQkgICAgdWludDh4OF90IGFscGhhX25hcnJvdzsKLQkgICAgdWludDE2eDhfdCBhbHBoYV93aWRlOworICAgIC8qIDFzdCBhbmQgMm5kIGJpdHMgb2YgdGhlIHVucm9sbGluZyAqLworICAgIHsKKyAgICAgICAgdWludDh4OF90IGRzdF9jb29rZWQ7CisgICAgICAgIHVpbnQxNng4X3QgZHN0X3dpZGU7CisgICAgICAgIHVpbnQ4eDhfdCBhbHBoYV9uYXJyb3c7CisgICAgICAgIHVpbnQxNng4X3QgYWxwaGFfd2lkZTsKIAotCSAgICAvKiBnZXQgdGhlIGFscGhhcyBzcHJlYWQgb3V0IHByb3Blcmx5ICovCi0JICAgIGFscGhhX25hcnJvdyA9IHZ0YmwxX3U4KHNyY19yYXcsIGFscGhhX21hc2spOworICAgICAgICAvKiBnZXQgdGhlIGFscGhhcyBzcHJlYWQgb3V0IHByb3Blcmx5ICovCisgICAgICAgIGFscGhhX25hcnJvdyA9IHZ0YmwxX3U4KHNyY19yYXcsIGFscGhhX21hc2spOwogI2lmIDEKLQkgICAgLyogcmVmbGVjdCBTa0FscGhhMjU1VG8yNTYoKSBzZW1hbnRpY3MgYSsxIHZzIGErYT4+NyAqLwotCSAgICAvKiB3ZSBjb2xsYXBzZWQgKDI1NS1hKSsxIC4uLiAqLwotCSAgICBhbHBoYV93aWRlID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU2KSwgYWxwaGFfbmFycm93KTsKKyAgICAgICAgLyogcmVmbGVjdCBTa0FscGhhMjU1VG8yNTYoKSBzZW1hbnRpY3MgYSsxIHZzIGErYT4+NyAqLworICAgICAgICAvKiB3ZSBjb2xsYXBzZWQgKDI1NS1hKSsxIC4uLiAqLworICAgICAgICBhbHBoYV93aWRlID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU2KSwgYWxwaGFfbmFycm93KTsKICNlbHNlCi0JICAgIGFscGhhX3dpZGUgPSB2c3Vid191OCh2ZHVwcV9uX3UxNigyNTUpLCBhbHBoYV9uYXJyb3cpOwotCSAgICBhbHBoYV93aWRlID0gdmFkZHFfdTE2KGFscGhhX3dpZGUsIHZzaHJxX25fdTE2KGFscGhhX3dpZGUsNykpOworICAgICAgICBhbHBoYV93aWRlID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU1KSwgYWxwaGFfbmFycm93KTsKKyAgICAgICAgYWxwaGFfd2lkZSA9IHZhZGRxX3UxNihhbHBoYV93aWRlLCB2c2hycV9uX3UxNihhbHBoYV93aWRlLDcpKTsKICNlbmRpZgogCi0JICAgIC8qIHNwcmVhZCB0aGUgZGVzdCAqLwotCSAgICBkc3Rfd2lkZSA9IHZtb3ZsX3U4KGRzdF9yYXcpOworICAgICAgICAvKiBzcHJlYWQgdGhlIGRlc3QgKi8KKyAgICAgICAgZHN0X3dpZGUgPSB2bW92bF91OChkc3RfcmF3KTsKIAotCSAgICAvKiBhbHBoYSBtdWwgdGhlIGRlc3QgKi8KLQkgICAgZHN0X3dpZGUgPSB2bXVscV91MTYgKGRzdF93aWRlLCBhbHBoYV93aWRlKTsKLQkgICAgZHN0X2Nvb2tlZCA9IHZzaHJuX25fdTE2KGRzdF93aWRlLCA4KTsKKyAgICAgICAgLyogYWxwaGEgbXVsIHRoZSBkZXN0ICovCisgICAgICAgIGRzdF93aWRlID0gdm11bHFfdTE2IChkc3Rfd2lkZSwgYWxwaGFfd2lkZSk7CisgICAgICAgIGRzdF9jb29rZWQgPSB2c2hybl9uX3UxNihkc3Rfd2lkZSwgOCk7CiAKLQkgICAgLyogc3VtIC0tIGlnbm9yaW5nIGFueSBieXRlIGxhbmUgb3ZlcmZsb3dzICovCi0JICAgIGRzdF9maW5hbCA9IHZhZGRfdTgoc3JjX3JhdywgZHN0X2Nvb2tlZCk7Ci0JfQorICAgICAgICAvKiBzdW0gLS0gaWdub3JpbmcgYW55IGJ5dGUgbGFuZSBvdmVyZmxvd3MgKi8KKyAgICAgICAgZHN0X2ZpbmFsID0gdmFkZF91OChzcmNfcmF3LCBkc3RfY29va2VkKTsKKyAgICB9CiAKLSNpZglVTlJPTEwgPiAyCi0JLyogdGhlIDNyZCBhbmQgNHRoIGJpdHMgb2Ygb3VyIHVucm9sbGluZyAqLwotCXsKLQkgICAgdWludDh4OF90IGRzdF9jb29rZWQ7Ci0JICAgIHVpbnQxNng4X3QgZHN0X3dpZGU7Ci0JICAgIHVpbnQ4eDhfdCBhbHBoYV9uYXJyb3c7Ci0JICAgIHVpbnQxNng4X3QgYWxwaGFfd2lkZTsKKyNpZiAgICBVTlJPTEwgPiAyCisgICAgLyogdGhlIDNyZCBhbmQgNHRoIGJpdHMgb2Ygb3VyIHVucm9sbGluZyAqLworICAgIHsKKyAgICAgICAgdWludDh4OF90IGRzdF9jb29rZWQ7CisgICAgICAgIHVpbnQxNng4X3QgZHN0X3dpZGU7CisgICAgICAgIHVpbnQ4eDhfdCBhbHBoYV9uYXJyb3c7CisgICAgICAgIHVpbnQxNng4X3QgYWxwaGFfd2lkZTsKIAotCSAgICBhbHBoYV9uYXJyb3cgPSB2dGJsMV91OChzcmNfcmF3XzIsIGFscGhhX21hc2spOworICAgICAgICBhbHBoYV9uYXJyb3cgPSB2dGJsMV91OChzcmNfcmF3XzIsIGFscGhhX21hc2spOwogI2lmIDEKLQkgICAgLyogcmVmbGVjdCBTa0FscGhhMjU1VG8yNTYoKSBzZW1hbnRpY3MgYSsxIHZzIGErYT4+NyAqLwotCSAgICAvKiB3ZSBjb2xsYXBzZWQgKDI1NS1hKSsxIC4uLiAqLwotCSAgICBhbHBoYV93aWRlID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU2KSwgYWxwaGFfbmFycm93KTsKKyAgICAgICAgLyogcmVmbGVjdCBTa0FscGhhMjU1VG8yNTYoKSBzZW1hbnRpY3MgYSsxIHZzIGErYT4+NyAqLworICAgICAgICAvKiB3ZSBjb2xsYXBzZWQgKDI1NS1hKSsxIC4uLiAqLworICAgICAgICBhbHBoYV93aWRlID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU2KSwgYWxwaGFfbmFycm93KTsKICNlbHNlCi0JICAgIGFscGhhX3dpZGUgPSB2c3Vid191OCh2ZHVwcV9uX3UxNigyNTUpLCBhbHBoYV9uYXJyb3cpOwotCSAgICBhbHBoYV93aWRlID0gdmFkZHFfdTE2KGFscGhhX3dpZGUsIHZzaHJxX25fdTE2KGFscGhhX3dpZGUsNykpOworICAgICAgICBhbHBoYV93aWRlID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU1KSwgYWxwaGFfbmFycm93KTsKKyAgICAgICAgYWxwaGFfd2lkZSA9IHZhZGRxX3UxNihhbHBoYV93aWRlLCB2c2hycV9uX3UxNihhbHBoYV93aWRlLDcpKTsKICNlbmRpZgogCi0JICAgIC8qIHNwcmVhZCB0aGUgZGVzdCAqLwotCSAgICBkc3Rfd2lkZSA9IHZtb3ZsX3U4KGRzdF9yYXdfMik7CisgICAgICAgIC8qIHNwcmVhZCB0aGUgZGVzdCAqLworICAgICAgICBkc3Rfd2lkZSA9IHZtb3ZsX3U4KGRzdF9yYXdfMik7CiAKLQkgICAgLyogYWxwaGEgbXVsIHRoZSBkZXN0ICovCi0JICAgIGRzdF93aWRlID0gdm11bHFfdTE2IChkc3Rfd2lkZSwgYWxwaGFfd2lkZSk7Ci0JICAgIGRzdF9jb29rZWQgPSB2c2hybl9uX3UxNihkc3Rfd2lkZSwgOCk7CisgICAgICAgIC8qIGFscGhhIG11bCB0aGUgZGVzdCAqLworICAgICAgICBkc3Rfd2lkZSA9IHZtdWxxX3UxNiAoZHN0X3dpZGUsIGFscGhhX3dpZGUpOworICAgICAgICBkc3RfY29va2VkID0gdnNocm5fbl91MTYoZHN0X3dpZGUsIDgpOwogCi0JICAgIC8qIHN1bSAtLSBpZ25vcmluZyBhbnkgYnl0ZSBsYW5lIG92ZXJmbG93cyAqLwotCSAgICBkc3RfZmluYWxfMiA9IHZhZGRfdTgoc3JjX3Jhd18yLCBkc3RfY29va2VkKTsKLQl9CisgICAgICAgIC8qIHN1bSAtLSBpZ25vcmluZyBhbnkgYnl0ZSBsYW5lIG92ZXJmbG93cyAqLworICAgICAgICBkc3RfZmluYWxfMiA9IHZhZGRfdTgoc3JjX3Jhd18yLCBkc3RfY29va2VkKTsKKyAgICB9CiAjZW5kaWYKIAotCSAgICB2c3QxX3UzMihkc3QsIHZyZWludGVycHJldF91MzJfdTgoZHN0X2ZpbmFsKSk7Ci0jaWYJVU5ST0xMID4gMgotCSAgICB2c3QxX3UzMihkc3QrMiwgdnJlaW50ZXJwcmV0X3UzMl91OChkc3RfZmluYWxfMikpOworICAgICAgICB2c3QxX3UzMihkc3QsIHZyZWludGVycHJldF91MzJfdTgoZHN0X2ZpbmFsKSk7CisjaWYgICAgVU5ST0xMID4gMgorICAgICAgICB2c3QxX3UzMihkc3QrMiwgdnJlaW50ZXJwcmV0X3UzMl91OChkc3RfZmluYWxfMikpOwogI2VuZGlmCiAKLQkgICAgc3JjICs9IFVOUk9MTDsKLQkgICAgZHN0ICs9IFVOUk9MTDsKLQkgICAgY291bnQgLT0gVU5ST0xMOwotCX0KLSN1bmRlZglVTlJPTEwKKyAgICAgICAgc3JjICs9IFVOUk9MTDsKKyAgICAgICAgZHN0ICs9IFVOUk9MTDsKKyAgICAgICAgY291bnQgLT0gVU5ST0xMOworICAgIH0KKyN1bmRlZiAgICBVTlJPTEwKIAotCS8qIGRvIGFueSByZXNpZHVhbCBpdGVyYXRpb25zICovCisgICAgLyogZG8gYW55IHJlc2lkdWFsIGl0ZXJhdGlvbnMgKi8KICAgICAgICAgd2hpbGUgKC0tY291bnQgPj0gMCkgewogICAgICAgICAgICAgKmRzdCA9IFNrUE1TcmNPdmVyKCpzcmMsICpkc3QpOwogICAgICAgICAgICAgc3JjICs9IDE7CkBAIC01MjksMTAzICs1MjksMTAzIEBACiAgICAgICAgIHVpbnQxNl90IHNyY19zY2FsZSA9IFNrQWxwaGEyNTVUbzI1NihhbHBoYSk7CiAgICAgICAgIHVpbnQxNl90IGRzdF9zY2FsZSA9IDI1NiAtIHNyY19zY2FsZTsKIAotCS8qIHJ1biB0aGVtIE4gYXQgYSB0aW1lIHRocm91Z2ggdGhlIE5FT04gdW5pdCAqLwotCS8qIG5vdGUgdGhhdCBlYWNoIDEgaXMgNCBieXRlcywgZWFjaCB0cmVhdGVkIGV4YWN0bHkgdGhlIHNhbWUsCi0JICogc28gd2UgY2FuIHdvcmsgdW5kZXIgdGhhdCBndWlzZS4gV2UgKmRvKiBrbm93IHRoYXQgdGhlIHNyYyZkc3QKLQkgKiB3aWxsIGJlIDMyLWJpdCBhbGlnbmVkIHF1YW50aXRpZXMsIHNvIHdlIGNhbiBzcGVjaWZ5IHRoYXQgb24KLQkgKiB0aGUgbG9hZC9zdG9yZSBvcHMgYW5kIGRvIGEgbmVvbiAncmVpbnRlcnByZXQnIHRvIGdldCB1cyB0bwotCSAqIGJ5dGUtc2l6ZWQgKHB1biBpbnRlbmRlZCkgcGllY2VzIHRoYXQgd2Ugd2lkZW4vbXVsdGlwbHkvc2hpZnQKLQkgKiB3ZSdyZSBsaW1pdGVkIGF0IDEyOCBiaXRzIGluIHRoZSB3aWRlIG9wcywgd2hpY2ggaXMgOHgxNmJpdHMKLQkgKiBvciBhIHBhaXIgb2YgMzIgYml0IHNyYy9kc3RzLgotCSAqLwotCS8qIHdlICpjb3VsZCogbWFudWFsbHkgdW5yb2xsIHRoaXMgbG9vcCBzbyB0aGF0IHdlIGxvYWQgMTI4IGJpdHMKLQkgKiAoYXMgYSBwYWlyIG9mIDY0cykgZnJvbSBlYWNoIG9mIHNyYyBhbmQgZHN0LCBwcm9jZXNzaW5nIHRoZW0KLQkgKiBpbiBwaWVjZXMuIFRoaXMgbWlnaHQgZ2l2ZSB1cyBhIGxpdHRsZSBiZXR0ZXIgbWFuYWdlbWVudCBvZgotCSAqIHRoZSBtZW1vcnkgbGF0ZW5jeSwgYnV0IG15IGluaXRpYWwgYXR0ZW1wdHMgaGVyZSBkaWQgbm90Ci0JICogcHJvZHVjZSBhbiBpbnN0cnVjdGlvbiBzdHJlYW0gdGhhdCBsb29rZWQgYWxsIHRoYXQgbmljZS4KLQkgKi8KLSNkZWZpbmUJVU5ST0xMCTIKLQl3aGlsZSAoY291bnQgPj0gVU5ST0xMKSB7Ci0JICAgIHVpbnQ4eDhfdCAgc3JjX3JhdywgZHN0X3JhdywgZHN0X2ZpbmFsOwotCSAgICB1aW50MTZ4OF90ICBzcmNfd2lkZSwgZHN0X3dpZGU7CisgICAgLyogcnVuIHRoZW0gTiBhdCBhIHRpbWUgdGhyb3VnaCB0aGUgTkVPTiB1bml0ICovCisgICAgLyogbm90ZSB0aGF0IGVhY2ggMSBpcyA0IGJ5dGVzLCBlYWNoIHRyZWF0ZWQgZXhhY3RseSB0aGUgc2FtZSwKKyAgICAgKiBzbyB3ZSBjYW4gd29yayB1bmRlciB0aGF0IGd1aXNlLiBXZSAqZG8qIGtub3cgdGhhdCB0aGUgc3JjJmRzdAorICAgICAqIHdpbGwgYmUgMzItYml0IGFsaWduZWQgcXVhbnRpdGllcywgc28gd2UgY2FuIHNwZWNpZnkgdGhhdCBvbgorICAgICAqIHRoZSBsb2FkL3N0b3JlIG9wcyBhbmQgZG8gYSBuZW9uICdyZWludGVycHJldCcgdG8gZ2V0IHVzIHRvCisgICAgICogYnl0ZS1zaXplZCAocHVuIGludGVuZGVkKSBwaWVjZXMgdGhhdCB3ZSB3aWRlbi9tdWx0aXBseS9zaGlmdAorICAgICAqIHdlJ3JlIGxpbWl0ZWQgYXQgMTI4IGJpdHMgaW4gdGhlIHdpZGUgb3BzLCB3aGljaCBpcyA4eDE2Yml0cworICAgICAqIG9yIGEgcGFpciBvZiAzMiBiaXQgc3JjL2RzdHMuCisgICAgICovCisgICAgLyogd2UgKmNvdWxkKiBtYW51YWxseSB1bnJvbGwgdGhpcyBsb29wIHNvIHRoYXQgd2UgbG9hZCAxMjggYml0cworICAgICAqIChhcyBhIHBhaXIgb2YgNjRzKSBmcm9tIGVhY2ggb2Ygc3JjIGFuZCBkc3QsIHByb2Nlc3NpbmcgdGhlbQorICAgICAqIGluIHBpZWNlcy4gVGhpcyBtaWdodCBnaXZlIHVzIGEgbGl0dGxlIGJldHRlciBtYW5hZ2VtZW50IG9mCisgICAgICogdGhlIG1lbW9yeSBsYXRlbmN5LCBidXQgbXkgaW5pdGlhbCBhdHRlbXB0cyBoZXJlIGRpZCBub3QKKyAgICAgKiBwcm9kdWNlIGFuIGluc3RydWN0aW9uIHN0cmVhbSB0aGF0IGxvb2tlZCBhbGwgdGhhdCBuaWNlLgorICAgICAqLworI2RlZmluZSAgICBVTlJPTEwgICAgMgorICAgIHdoaWxlIChjb3VudCA+PSBVTlJPTEwpIHsKKyAgICAgICAgdWludDh4OF90ICBzcmNfcmF3LCBkc3RfcmF3LCBkc3RfZmluYWw7CisgICAgICAgIHVpbnQxNng4X3QgIHNyY193aWRlLCBkc3Rfd2lkZTsKIAotCSAgICAvKiBnZXQgNjQgYml0cyBvZiBzcmMsIHdpZGVuIGl0LCBtdWx0aXBseSBieSBzcmNfc2NhbGUgKi8KLQkgICAgc3JjX3JhdyA9IHZyZWludGVycHJldF91OF91MzIodmxkMV91MzIoc3JjKSk7Ci0JICAgIHNyY193aWRlID0gdm1vdmxfdTgoc3JjX3Jhdyk7Ci0JICAgIC8qIGdjYyBob2lzdHMgdmR1cHFfbl91MTYoKSwgYmV0dGVyIHRoYW4gdXNpbmcgdm11bHFfbl91MTYoKSAqLwotCSAgICBzcmNfd2lkZSA9IHZtdWxxX3UxNiAoc3JjX3dpZGUsIHZkdXBxX25fdTE2KHNyY19zY2FsZSkpOworICAgICAgICAvKiBnZXQgNjQgYml0cyBvZiBzcmMsIHdpZGVuIGl0LCBtdWx0aXBseSBieSBzcmNfc2NhbGUgKi8KKyAgICAgICAgc3JjX3JhdyA9IHZyZWludGVycHJldF91OF91MzIodmxkMV91MzIoc3JjKSk7CisgICAgICAgIHNyY193aWRlID0gdm1vdmxfdTgoc3JjX3Jhdyk7CisgICAgICAgIC8qIGdjYyBob2lzdHMgdmR1cHFfbl91MTYoKSwgYmV0dGVyIHRoYW4gdXNpbmcgdm11bHFfbl91MTYoKSAqLworICAgICAgICBzcmNfd2lkZSA9IHZtdWxxX3UxNiAoc3JjX3dpZGUsIHZkdXBxX25fdTE2KHNyY19zY2FsZSkpOwogCi0JICAgIC8qIGRpdHRvIHdpdGggZHN0ICovCi0JICAgIGRzdF9yYXcgPSB2cmVpbnRlcnByZXRfdThfdTMyKHZsZDFfdTMyKGRzdCkpOwotCSAgICBkc3Rfd2lkZSA9IHZtb3ZsX3U4KGRzdF9yYXcpOworICAgICAgICAvKiBkaXR0byB3aXRoIGRzdCAqLworICAgICAgICBkc3RfcmF3ID0gdnJlaW50ZXJwcmV0X3U4X3UzMih2bGQxX3UzMihkc3QpKTsKKyAgICAgICAgZHN0X3dpZGUgPSB2bW92bF91OChkc3RfcmF3KTsKIAotCSAgICAvKiBjb21iaW5lIGFkZCB3aXRoIGRzdCBtdWx0aXBseSBpbnRvIG11bC1hY2N1bXVsYXRlICovCi0JICAgIGRzdF93aWRlID0gdm1sYXFfdTE2KHNyY193aWRlLCBkc3Rfd2lkZSwgdmR1cHFfbl91MTYoZHN0X3NjYWxlKSk7CisgICAgICAgIC8qIGNvbWJpbmUgYWRkIHdpdGggZHN0IG11bHRpcGx5IGludG8gbXVsLWFjY3VtdWxhdGUgKi8KKyAgICAgICAgZHN0X3dpZGUgPSB2bWxhcV91MTYoc3JjX3dpZGUsIGRzdF93aWRlLCB2ZHVwcV9uX3UxNihkc3Rfc2NhbGUpKTsKIAotCSAgICBkc3RfZmluYWwgPSB2c2hybl9uX3UxNihkc3Rfd2lkZSwgOCk7Ci0JICAgIHZzdDFfdTMyKGRzdCwgdnJlaW50ZXJwcmV0X3UzMl91OChkc3RfZmluYWwpKTsKKyAgICAgICAgZHN0X2ZpbmFsID0gdnNocm5fbl91MTYoZHN0X3dpZGUsIDgpOworICAgICAgICB2c3QxX3UzMihkc3QsIHZyZWludGVycHJldF91MzJfdTgoZHN0X2ZpbmFsKSk7CiAKLQkgICAgc3JjICs9IFVOUk9MTDsKLQkgICAgZHN0ICs9IFVOUk9MTDsKLQkgICAgY291bnQgLT0gVU5ST0xMOwotCX0KLQkvKiBSQkU6IHdlbGwsIGkgZG9uJ3QgbGlrZSBob3cgZ2NjIG1hbmFnZXMgc3JjL2RzdCBhY3Jvc3MgdGhlIGFib3ZlCi0JICogbG9vcCBpdCdzIGNvbnN0YW50bHkgY2FsY3VsYXRpbmcgc3JjK2JpYXMsIGRzdCtiaWFzIGFuZCBpdCBvbmx5Ci0JICogYWRqdXN0cyB0aGUgcmVhbCBvbmVzIHdoZW4gd2UgbGVhdmUgdGhlIGxvb3AuIE5vdCBzdXJlIHdoeQotCSAqIGl0J3MgImhvaXN0aW5nIGRvd24iIChob2lzdGluZyBpbXBsaWVzIGFib3ZlIGluIG15IGxleGljb24gOykpCi0JICogdGhlIGFkanVzdG1lbnRzIHRvIHNyYy9kc3QvY291bnQsIGJ1dCBpdCBkb2VzLi4uCi0JICogKG1pZ2h0IGJlIFNTQS1zdHlsZSBpbnRlcm5hbCBsb2dpYy4uLgotCSAqLworICAgICAgICBzcmMgKz0gVU5ST0xMOworICAgICAgICBkc3QgKz0gVU5ST0xMOworICAgICAgICBjb3VudCAtPSBVTlJPTEw7CisgICAgfQorICAgIC8qIFJCRTogd2VsbCwgaSBkb24ndCBsaWtlIGhvdyBnY2MgbWFuYWdlcyBzcmMvZHN0IGFjcm9zcyB0aGUgYWJvdmUKKyAgICAgKiBsb29wIGl0J3MgY29uc3RhbnRseSBjYWxjdWxhdGluZyBzcmMrYmlhcywgZHN0K2JpYXMgYW5kIGl0IG9ubHkKKyAgICAgKiBhZGp1c3RzIHRoZSByZWFsIG9uZXMgd2hlbiB3ZSBsZWF2ZSB0aGUgbG9vcC4gTm90IHN1cmUgd2h5CisgICAgICogaXQncyAiaG9pc3RpbmcgZG93biIgKGhvaXN0aW5nIGltcGxpZXMgYWJvdmUgaW4gbXkgbGV4aWNvbiA7KSkKKyAgICAgKiB0aGUgYWRqdXN0bWVudHMgdG8gc3JjL2RzdC9jb3VudCwgYnV0IGl0IGRvZXMuLi4KKyAgICAgKiAobWlnaHQgYmUgU1NBLXN0eWxlIGludGVybmFsIGxvZ2ljLi4uCisgICAgICovCiAKLSNpZglVTlJPTEwgPT0gMgotCWlmIChjb3VudCA9PSAxKSB7CisjaWYgICAgVU5ST0xMID09IDIKKyAgICBpZiAoY291bnQgPT0gMSkgewogICAgICAgICAgICAgKmRzdCA9IFNrQWxwaGFNdWxRKCpzcmMsIHNyY19zY2FsZSkgKyBTa0FscGhhTXVsUSgqZHN0LCBkc3Rfc2NhbGUpOwotCX0KKyAgICB9CiAjZWxzZQotCWlmIChjb3VudCA+IDApIHsKKyAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgKmRzdCA9IFNrQWxwaGFNdWxRKCpzcmMsIHNyY19zY2FsZSkgKyBTa0FscGhhTXVsUSgqZHN0LCBkc3Rfc2NhbGUpOwogICAgICAgICAgICAgICAgIHNyYyArPSAxOwogICAgICAgICAgICAgICAgIGRzdCArPSAxOwogICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3VudCA+IDApOwotCX0KKyAgICB9CiAjZW5kaWYKIAotI3VuZGVmCVVOUk9MTAorI3VuZGVmICAgIFVOUk9MTAogICAgIH0KIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0jdW5kZWYJREVCVUdfT1BBUVVFX0RJVEhFUgorI3VuZGVmICAgIERFQlVHX09QQVFVRV9ESVRIRVIKIAotI2lmCWRlZmluZWQoREVCVUdfT1BBUVVFX0RJVEhFUikKKyNpZiAgICBkZWZpbmVkKERFQlVHX09QQVFVRV9ESVRIRVIpCiBzdGF0aWMgdm9pZCBzaG93bWU4KGNoYXIgKnN0ciwgdm9pZCAqcCwgaW50IGxlbikKIHsKLQlzdGF0aWMgY2hhciBidWZbMjU2XTsKLQljaGFyIHRidWZbMzJdOwotCWludCBpOwotCWNoYXIgKnBjID0gKGNoYXIqKSBwOwotCXNwcmludGYoYnVmLCIlOHM6Iiwgc3RyKTsKLQlmb3IoaT0wO2k8bGVuO2krKykgewotCSAgICBzcHJpbnRmKHRidWYsICIgICAlMDJ4IiwgcGNbaV0pOwotCSAgICBzdHJjYXQoYnVmLCB0YnVmKTsKLQl9Ci0JU2tEZWJ1Z2YoIiVzXG4iLCBidWYpOworICAgIHN0YXRpYyBjaGFyIGJ1ZlsyNTZdOworICAgIGNoYXIgdGJ1ZlszMl07CisgICAgaW50IGk7CisgICAgY2hhciAqcGMgPSAoY2hhciopIHA7CisgICAgc3ByaW50ZihidWYsIiU4czoiLCBzdHIpOworICAgIGZvcihpPTA7aTxsZW47aSsrKSB7CisgICAgICAgIHNwcmludGYodGJ1ZiwgIiAgICUwMngiLCBwY1tpXSk7CisgICAgICAgIHN0cmNhdChidWYsIHRidWYpOworICAgIH0KKyAgICBTa0RlYnVnZigiJXNcbiIsIGJ1Zik7CiB9CiBzdGF0aWMgdm9pZCBzaG93bWUxNihjaGFyICpzdHIsIHZvaWQgKnAsIGludCBsZW4pCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzI1Nl07Ci0JY2hhciB0YnVmWzMyXTsKLQlpbnQgaTsKLQl1aW50MTZfdCAqcGMgPSAodWludDE2X3QqKSBwOwotCXNwcmludGYoYnVmLCIlOHM6Iiwgc3RyKTsKLQlsZW4gPSAobGVuIC8gc2l6ZW9mKHVpbnQxNl90KSk7CS8qIHBhc3NlZCBhcyBieXRlcyAqLwotCWZvcihpPTA7aTxsZW47aSsrKSB7Ci0JICAgIHNwcmludGYodGJ1ZiwgIiAlMDR4IiwgcGNbaV0pOwotCSAgICBzdHJjYXQoYnVmLCB0YnVmKTsKLQl9Ci0JU2tEZWJ1Z2YoIiVzXG4iLCBidWYpOworICAgIHN0YXRpYyBjaGFyIGJ1ZlsyNTZdOworICAgIGNoYXIgdGJ1ZlszMl07CisgICAgaW50IGk7CisgICAgdWludDE2X3QgKnBjID0gKHVpbnQxNl90KikgcDsKKyAgICBzcHJpbnRmKGJ1ZiwiJThzOiIsIHN0cik7CisgICAgbGVuID0gKGxlbiAvIHNpemVvZih1aW50MTZfdCkpOyAgICAvKiBwYXNzZWQgYXMgYnl0ZXMgKi8KKyAgICBmb3IoaT0wO2k8bGVuO2krKykgeworICAgICAgICBzcHJpbnRmKHRidWYsICIgJTA0eCIsIHBjW2ldKTsKKyAgICAgICAgc3RyY2F0KGJ1ZiwgdGJ1Zik7CisgICAgfQorICAgIFNrRGVidWdmKCIlc1xuIiwgYnVmKTsKIH0KICNlbmRpZgogCkBAIC02MzQsMzggKzYzNCwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIFU4Q1BVIGFscGhhLCBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVCgyNTUgPT0gYWxwaGEpOwogCi0jZGVmaW5lCVVOUk9MTAk4CisjZGVmaW5lICAgIFVOUk9MTCAgICA4CiAKICAgICBpZiAoY291bnQgPj0gVU5ST0xMKSB7Ci0JdWludDh4OF90IGRiYXNlOworICAgIHVpbnQ4eDhfdCBkYmFzZTsKIAotI2lmCWRlZmluZWQoREVCVUdfT1BBUVVFX0RJVEhFUikKLQl1aW50MTZfdCB0bXBidWZbVU5ST0xMXTsKLQlpbnQgdGRbVU5ST0xMXTsKLQlpbnQgdGR2W1VOUk9MTF07Ci0JaW50IHRhW1VOUk9MTF07Ci0JaW50IHRhcFtVTlJPTExdOwotCXVpbnQxNl90IGluX2RzdFtVTlJPTExdOwotCWludCBvZmZzZXQgPSAwOwotCWludCBub2lzeSA9IDA7CisjaWYgICAgZGVmaW5lZChERUJVR19PUEFRVUVfRElUSEVSKQorICAgIHVpbnQxNl90IHRtcGJ1ZltVTlJPTExdOworICAgIGludCB0ZFtVTlJPTExdOworICAgIGludCB0ZHZbVU5ST0xMXTsKKyAgICBpbnQgdGFbVU5ST0xMXTsKKyAgICBpbnQgdGFwW1VOUk9MTF07CisgICAgdWludDE2X3QgaW5fZHN0W1VOUk9MTF07CisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IG5vaXN5ID0gMDsKICNlbmRpZgogCi0JY29uc3QgdWludDhfdCAqZHN0YXJ0ID0gJmdEaXRoZXJNYXRyaXhfTmVvblsoeSYzKSoxMiArICh4JjMpXTsKLQlkYmFzZSA9IHZsZDFfdTgoZHN0YXJ0KTsKKyAgICBjb25zdCB1aW50OF90ICpkc3RhcnQgPSAmZ0RpdGhlck1hdHJpeF9OZW9uWyh5JjMpKjEyICsgKHgmMyldOworICAgIGRiYXNlID0gdmxkMV91OChkc3RhcnQpOwogCiAgICAgICAgIGRvIHsKLQkgICAgdWludDh4OF90IHNyLCBzZywgc2IsIHNhLCBkOwotCSAgICB1aW50MTZ4OF90IGRzdDgsIHNjYWxlOCwgYWxwaGE4OwotCSAgICB1aW50MTZ4OF90IGRzdF9yLCBkc3RfZywgZHN0X2I7CisgICAgICAgIHVpbnQ4eDhfdCBzciwgc2csIHNiLCBzYSwgZDsKKyAgICAgICAgdWludDE2eDhfdCBkc3Q4LCBzY2FsZTgsIGFscGhhODsKKyAgICAgICAgdWludDE2eDhfdCBkc3RfciwgZHN0X2csIGRzdF9iOwogCi0jaWYJZGVmaW5lZChERUJVR19PUEFRVUVfRElUSEVSKQotCS8qIGNhbGN1bGF0ZSA4IGVsZW1lbnRzIHdvcnRoIGludG8gYSB0ZW1wIGJ1ZmZlciAqLwotCXsKLQkgIGludCBteV95ID0geTsKLQkgIGludCBteV94ID0geDsKLQkgIFNrUE1Db2xvciogbXlfc3JjID0gKFNrUE1Db2xvciopc3JjOwotCSAgdWludDE2X3QqIG15X2RzdCA9IGRzdDsKLQkgIGludCBpOworI2lmICAgIGRlZmluZWQoREVCVUdfT1BBUVVFX0RJVEhFUikKKyAgICAvKiBjYWxjdWxhdGUgOCBlbGVtZW50cyB3b3J0aCBpbnRvIGEgdGVtcCBidWZmZXIgKi8KKyAgICB7CisgICAgICBpbnQgbXlfeSA9IHk7CisgICAgICBpbnQgbXlfeCA9IHg7CisgICAgICBTa1BNQ29sb3IqIG15X3NyYyA9IChTa1BNQ29sb3IqKXNyYzsKKyAgICAgIHVpbnQxNl90KiBteV9kc3QgPSBkc3Q7CisgICAgICBpbnQgaTsKIAogICAgICAgICAgIERJVEhFUl81NjVfU0NBTihteV95KTsKICAgICAgICAgICBmb3IoaT0wO2k8VU5ST0xMO2krKykgewpAQCAtNjczLDE2NCArNjczLDE2NCBAQAogICAgICAgICAgICAgU2tQTUNvbG9yQXNzZXJ0KGMpOwogICAgICAgICAgICAgaWYgKGMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhID0gU2tHZXRQYWNrZWRBMzIoYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpbnQgZCA9IFNrQWxwaGFNdWwoRElUSEVSX1ZBTFVFKG15X3gpLCBTa0FscGhhMjU1VG8yNTYoYSkpOwotCQl0ZHZbaV0gPSBESVRIRVJfVkFMVUUobXlfeCk7Ci0JCXRhW2ldID0gYTsKLQkJdGFwW2ldID0gU2tBbHBoYTI1NVRvMjU2KGEpOwotCQl0ZFtpXSA9IGQ7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgIHRkdltpXSA9IERJVEhFUl9WQUxVRShteV94KTsKKyAgICAgICAgdGFbaV0gPSBhOworICAgICAgICB0YXBbaV0gPSBTa0FscGhhMjU1VG8yNTYoYSk7CisgICAgICAgIHRkW2ldID0gZDsKKwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNyID0gU2tHZXRQYWNrZWRSMzIoYyk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2cgPSBTa0dldFBhY2tlZEczMihjKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzYiA9IFNrR2V0UGFja2VkQjMyKGMpOwogICAgICAgICAgICAgICAgIHNyID0gU2tESVRIRVJfUjMyX0ZPUl81NjUoc3IsIGQpOwogICAgICAgICAgICAgICAgIHNnID0gU2tESVRIRVJfRzMyX0ZPUl81NjUoc2csIGQpOwogICAgICAgICAgICAgICAgIHNiID0gU2tESVRIRVJfQjMyX0ZPUl81NjUoc2IsIGQpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjX2V4cGFuZGVkID0gKHNnIDw8IDI0KSB8IChzciA8PCAxMykgfCAoc2IgPDwgMik7CiAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0X2V4cGFuZGVkID0gU2tFeHBhbmRfcmdiXzE2KCpteV9kc3QpOwogICAgICAgICAgICAgICAgIGRzdF9leHBhbmRlZCA9IGRzdF9leHBhbmRlZCAqIChTa0FscGhhMjU1VG8yNTYoMjU1IC0gYSkgPj4gMyk7CiAgICAgICAgICAgICAgICAgLy8gbm93IHNyYyBhbmQgZHN0IGV4cGFuZGVkIGFyZSBpbiBnOjExIHI6MTAgeDoxIGI6MTAKICAgICAgICAgICAgICAgICB0bXBidWZbaV0gPSBTa0NvbXBhY3RfcmdiXzE2KChzcmNfZXhwYW5kZWQgKyBkc3RfZXhwYW5kZWQpID4+IDUpOwotCQl0ZFtpXSA9IGQ7CisgICAgICAgIHRkW2ldID0gZDsKIAogICAgICAgICAgICAgfSBlbHNlIHsKLQkJdG1wYnVmW2ldID0gKm15X2RzdDsKLQkJdGFbaV0gPSB0ZHZbaV0gPSB0ZFtpXSA9IDB4YmVlZjsKLQkgICAgfQotCSAgICBpbl9kc3RbaV0gPSAqbXlfZHN0OworICAgICAgICB0bXBidWZbaV0gPSAqbXlfZHN0OworICAgICAgICB0YVtpXSA9IHRkdltpXSA9IHRkW2ldID0gMHhiZWVmOworICAgICAgICB9CisgICAgICAgIGluX2RzdFtpXSA9ICpteV9kc3Q7CiAgICAgICAgICAgICBteV9kc3QgKz0gMTsKICAgICAgICAgICAgIERJVEhFUl9JTkNfWChteV94KTsKICAgICAgICAgICB9Ci0JfQorICAgIH0KICNlbmRpZgogCi0JICAgIC8qIHNvdXJjZSBpcyBpbiBBQkdSICovCi0JICAgIHsKLQkJcmVnaXN0ZXIgdWludDh4OF90IGQwIGFzbSgiZDAiKTsKLQkJcmVnaXN0ZXIgdWludDh4OF90IGQxIGFzbSgiZDEiKTsKLQkJcmVnaXN0ZXIgdWludDh4OF90IGQyIGFzbSgiZDIiKTsKLQkJcmVnaXN0ZXIgdWludDh4OF90IGQzIGFzbSgiZDMiKTsKKyAgICAgICAgLyogc291cmNlIGlzIGluIEFCR1IgKi8KKyAgICAgICAgeworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDAgYXNtKCJkMCIpOworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDEgYXNtKCJkMSIpOworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDIgYXNtKCJkMiIpOworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDMgYXNtKCJkMyIpOwogCi0JCWFzbSAoInZsZDQuOAl7ZDAtZDN9LFslNF0gIC8qIHI9JVAwIGc9JVAxIGI9JVAyIGE9JVAzICovIgotCQkgICAgOiAiPXciIChkMCksICI9dyIgKGQxKSwgIj13IiAoZDIpLCAiPXciIChkMykKLQkJICAgIDogInIiIChzcmMpCisgICAgICAgIGFzbSAoInZsZDQuOCAgICB7ZDAtZDN9LFslNF0gIC8qIHI9JVAwIGc9JVAxIGI9JVAyIGE9JVAzICovIgorICAgICAgICAgICAgOiAiPXciIChkMCksICI9dyIgKGQxKSwgIj13IiAoZDIpLCAiPXciIChkMykKKyAgICAgICAgICAgIDogInIiIChzcmMpCiAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICBzciA9IGQwOyBzZyA9IGQxOyBzYiA9IGQyOyBzYSA9IGQzOwotCSAgICB9CisgICAgICAgICAgICBzciA9IGQwOyBzZyA9IGQxOyBzYiA9IGQyOyBzYSA9IGQzOworICAgICAgICB9CiAKLQkgICAgLyogY2FsY3VsYXRlICdkJywgd2hpY2ggd2lsbCBiZSAwLi43ICovCi0JICAgIC8qIGRiYXNlW10gaXMgMC4uNzsgYWxwaGEgaXMgMC4uMjU2OyAxNiBiaXRzIHN1ZmZpY2UgKi8KKyAgICAgICAgLyogY2FsY3VsYXRlICdkJywgd2hpY2ggd2lsbCBiZSAwLi43ICovCisgICAgICAgIC8qIGRiYXNlW10gaXMgMC4uNzsgYWxwaGEgaXMgMC4uMjU2OyAxNiBiaXRzIHN1ZmZpY2UgKi8KICNpZiBkZWZpbmVkKFNLX0JVSUxEX0ZPUl9BTkRST0lEKQotCSAgICAvKiBTa0FscGhhMjU1VG8yNTYoKSBzZW1hbnRpYyBhKzEgdnMgYSthPj43ICovCi0JICAgIGFscGhhOCA9IHZhZGR3X3U4KHZtb3ZsX3U4KHNhKSwgdmR1cF9uX3U4KDEpKTsKKyAgICAgICAgLyogU2tBbHBoYTI1NVRvMjU2KCkgc2VtYW50aWMgYSsxIHZzIGErYT4+NyAqLworICAgICAgICBhbHBoYTggPSB2YWRkd191OCh2bW92bF91OChzYSksIHZkdXBfbl91OCgxKSk7CiAjZWxzZQotCSAgICBhbHBoYTggPSB2YWRkd191OCh2bW92bF91OChzYSksIHZzaHJfbl91OChzYSwgNykpOworICAgICAgICBhbHBoYTggPSB2YWRkd191OCh2bW92bF91OChzYSksIHZzaHJfbl91OChzYSwgNykpOwogI2VuZGlmCi0JICAgIGFscGhhOCA9IHZtdWxxX3UxNihhbHBoYTgsIHZtb3ZsX3U4KGRiYXNlKSk7IAotCSAgICBkID0gdnNocm5fbl91MTYoYWxwaGE4LCA4KTsJLyogbmFycm93aW5nIHRvbyAqLwotCSAgICAKLQkgICAgLyogc3IgPSBzciAtIChzcj4+NSkgKyBkICovCi0JICAgIC8qIHdhdGNoaW5nIGZvciA4LWJpdCBvdmVyZmxvdy4gIGQgaXMgMC4uNzsgcmlza3kgcmFuZ2Ugb2YKLQkgICAgICogc3IgaXMgPjI0ODsgYW5kIHRoZW4gKHNyPj41KSBpcyA3IHNvIGl0IG9mZnNldHMgJ2QnOwotCSAgICAgKiBzYWZlICBhcyBsb25nIGFzIHdlIGRvICgoc3Itc3I+PjUpICsgZCkgKi8KLQkgICAgc3IgPSB2c3ViX3U4KHNyLCB2c2hyX25fdTgoc3IsIDUpKTsKLQkgICAgc3IgPSB2YWRkX3U4KHNyLCBkKTsKKyAgICAgICAgYWxwaGE4ID0gdm11bHFfdTE2KGFscGhhOCwgdm1vdmxfdTgoZGJhc2UpKTsKKyAgICAgICAgZCA9IHZzaHJuX25fdTE2KGFscGhhOCwgOCk7ICAgIC8qIG5hcnJvd2luZyB0b28gKi8KIAotCSAgICAvKiBzYiA9IHNiIC0gKHNiPj41KSArIGQgKi8KLQkgICAgc2IgPSB2c3ViX3U4KHNiLCB2c2hyX25fdTgoc2IsIDUpKTsKLQkgICAgc2IgPSB2YWRkX3U4KHNiLCBkKTsKKyAgICAgICAgLyogc3IgPSBzciAtIChzcj4+NSkgKyBkICovCisgICAgICAgIC8qIHdhdGNoaW5nIGZvciA4LWJpdCBvdmVyZmxvdy4gIGQgaXMgMC4uNzsgcmlza3kgcmFuZ2Ugb2YKKyAgICAgICAgICogc3IgaXMgPjI0ODsgYW5kIHRoZW4gKHNyPj41KSBpcyA3IHNvIGl0IG9mZnNldHMgJ2QnOworICAgICAgICAgKiBzYWZlICBhcyBsb25nIGFzIHdlIGRvICgoc3Itc3I+PjUpICsgZCkgKi8KKyAgICAgICAgc3IgPSB2c3ViX3U4KHNyLCB2c2hyX25fdTgoc3IsIDUpKTsKKyAgICAgICAgc3IgPSB2YWRkX3U4KHNyLCBkKTsKIAotCSAgICAvKiBzZyA9IHNnIC0gKHNnPj42KSArIGQ+PjE7IHNpbWlsYXIgbG9naWMgZm9yIG92ZXJmbG93cyAqLwotCSAgICBzZyA9IHZzdWJfdTgoc2csIHZzaHJfbl91OChzZywgNikpOwotCSAgICBzZyA9IHZhZGRfdTgoc2csIHZzaHJfbl91OChkLDEpKTsKKyAgICAgICAgLyogc2IgPSBzYiAtIChzYj4+NSkgKyBkICovCisgICAgICAgIHNiID0gdnN1Yl91OChzYiwgdnNocl9uX3U4KHNiLCA1KSk7CisgICAgICAgIHNiID0gdmFkZF91OChzYiwgZCk7CiAKLQkgICAgLyogbmVlZCB0byBwaWNrIHVwIDggZHN0J3MgLS0gYXQgMTYgYml0cyBlYWNoLCAxMjggYml0cyAqLwotCSAgICBkc3Q4ID0gdmxkMXFfdTE2KGRzdCk7Ci0JICAgIGRzdF9iID0gdmFuZHFfdTE2KGRzdDgsIHZkdXBxX25fdTE2KDB4MDAxRikpOwotCSAgICBkc3RfZyA9IHZhbmRxX3UxNih2c2hycV9uX3UxNihkc3Q4LDUpLCB2ZHVwcV9uX3UxNigweDAwM0YpKTsKLQkgICAgZHN0X3IgPSB2c2hycV9uX3UxNihkc3Q4LDExKTsJLyogY2xlYXJpbmcgaGkgYml0cyAqLworICAgICAgICAvKiBzZyA9IHNnIC0gKHNnPj42KSArIGQ+PjE7IHNpbWlsYXIgbG9naWMgZm9yIG92ZXJmbG93cyAqLworICAgICAgICBzZyA9IHZzdWJfdTgoc2csIHZzaHJfbl91OChzZywgNikpOworICAgICAgICBzZyA9IHZhZGRfdTgoc2csIHZzaHJfbl91OChkLDEpKTsKIAotCSAgICAvKiBibGVuZCAqLworICAgICAgICAvKiBuZWVkIHRvIHBpY2sgdXAgOCBkc3QncyAtLSBhdCAxNiBiaXRzIGVhY2gsIDEyOCBiaXRzICovCisgICAgICAgIGRzdDggPSB2bGQxcV91MTYoZHN0KTsKKyAgICAgICAgZHN0X2IgPSB2YW5kcV91MTYoZHN0OCwgdmR1cHFfbl91MTYoMHgwMDFGKSk7CisgICAgICAgIGRzdF9nID0gdmFuZHFfdTE2KHZzaHJxX25fdTE2KGRzdDgsNSksIHZkdXBxX25fdTE2KDB4MDAzRikpOworICAgICAgICBkc3RfciA9IHZzaHJxX25fdTE2KGRzdDgsMTEpOyAgICAvKiBjbGVhcmluZyBoaSBiaXRzICovCisKKyAgICAgICAgLyogYmxlbmQgKi8KICNpZiAxCi0JICAgIC8qIFNrQWxwaGEyNTVUbzI1NigpIHNlbWFudGljIGErMSB2cyBhK2E+PjcgKi8KLQkgICAgLyogb3JpZ2luYWxseSAyNTUtc2EgKyAxICovCi0JICAgIHNjYWxlOCA9IHZzdWJ3X3U4KHZkdXBxX25fdTE2KDI1NiksIHNhKTsKKyAgICAgICAgLyogU2tBbHBoYTI1NVRvMjU2KCkgc2VtYW50aWMgYSsxIHZzIGErYT4+NyAqLworICAgICAgICAvKiBvcmlnaW5hbGx5IDI1NS1zYSArIDEgKi8KKyAgICAgICAgc2NhbGU4ID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU2KSwgc2EpOwogI2Vsc2UKLQkgICAgc2NhbGU4ID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU1KSwgc2EpOwotCSAgICBzY2FsZTggPSB2YWRkcV91MTYoc2NhbGU4LCB2c2hycV9uX3UxNihzY2FsZTgsIDcpKTsKKyAgICAgICAgc2NhbGU4ID0gdnN1YndfdTgodmR1cHFfbl91MTYoMjU1KSwgc2EpOworICAgICAgICBzY2FsZTggPSB2YWRkcV91MTYoc2NhbGU4LCB2c2hycV9uX3UxNihzY2FsZTgsIDcpKTsKICNlbmRpZgogCiAjaWYgMQotCSAgICAvKiBjb21iaW5lIHRoZSBhZGRxIGFuZCBtdWwsIHNhdmUgMyBpbnNucyAqLwotCSAgICBzY2FsZTggPSB2c2hycV9uX3UxNihzY2FsZTgsIDMpOwotCSAgICBkc3RfYiA9IHZtbGFxX3UxNih2c2hsbF9uX3U4KHNiLDIpLCBkc3RfYiwgc2NhbGU4KTsKLQkgICAgZHN0X2cgPSB2bWxhcV91MTYodnNobGxfbl91OChzZywzKSwgZHN0X2csIHNjYWxlOCk7Ci0JICAgIGRzdF9yID0gdm1sYXFfdTE2KHZzaGxsX25fdTgoc3IsMiksIGRzdF9yLCBzY2FsZTgpOworICAgICAgICAvKiBjb21iaW5lIHRoZSBhZGRxIGFuZCBtdWwsIHNhdmUgMyBpbnNucyAqLworICAgICAgICBzY2FsZTggPSB2c2hycV9uX3UxNihzY2FsZTgsIDMpOworICAgICAgICBkc3RfYiA9IHZtbGFxX3UxNih2c2hsbF9uX3U4KHNiLDIpLCBkc3RfYiwgc2NhbGU4KTsKKyAgICAgICAgZHN0X2cgPSB2bWxhcV91MTYodnNobGxfbl91OChzZywzKSwgZHN0X2csIHNjYWxlOCk7CisgICAgICAgIGRzdF9yID0gdm1sYXFfdTE2KHZzaGxsX25fdTgoc3IsMiksIGRzdF9yLCBzY2FsZTgpOwogI2Vsc2UKLQkgICAgLyoga25vd24gY29ycmVjdCwgYnV0ICszIGluc25zIG92ZXIgYWJvdmUgKi8KLQkgICAgc2NhbGU4ID0gdnNocnFfbl91MTYoc2NhbGU4LCAzKTsKLQkgICAgZHN0X2IgPSB2bXVscV91MTYoZHN0X2IsIHNjYWxlOCk7Ci0JICAgIGRzdF9nID0gdm11bHFfdTE2KGRzdF9nLCBzY2FsZTgpOwotCSAgICBkc3RfciA9IHZtdWxxX3UxNihkc3Rfciwgc2NhbGU4KTsKKyAgICAgICAgLyoga25vd24gY29ycmVjdCwgYnV0ICszIGluc25zIG92ZXIgYWJvdmUgKi8KKyAgICAgICAgc2NhbGU4ID0gdnNocnFfbl91MTYoc2NhbGU4LCAzKTsKKyAgICAgICAgZHN0X2IgPSB2bXVscV91MTYoZHN0X2IsIHNjYWxlOCk7CisgICAgICAgIGRzdF9nID0gdm11bHFfdTE2KGRzdF9nLCBzY2FsZTgpOworICAgICAgICBkc3RfciA9IHZtdWxxX3UxNihkc3Rfciwgc2NhbGU4KTsKIAotCSAgICAvKiBjb21iaW5lICovCi0JICAgIC8qIE5COiB2c2hsbCB3aWRlbnMsIG5lZWQgdG8gcHJlc2VydmUgdGhvc2UgYml0cyAqLwotCSAgICBkc3RfYiA9IHZhZGRxX3UxNihkc3RfYiwgdnNobGxfbl91OChzYiwyKSk7Ci0JICAgIGRzdF9nID0gdmFkZHFfdTE2KGRzdF9nLCB2c2hsbF9uX3U4KHNnLDMpKTsKLQkgICAgZHN0X3IgPSB2YWRkcV91MTYoZHN0X3IsIHZzaGxsX25fdTgoc3IsMikpOworICAgICAgICAvKiBjb21iaW5lICovCisgICAgICAgIC8qIE5COiB2c2hsbCB3aWRlbnMsIG5lZWQgdG8gcHJlc2VydmUgdGhvc2UgYml0cyAqLworICAgICAgICBkc3RfYiA9IHZhZGRxX3UxNihkc3RfYiwgdnNobGxfbl91OChzYiwyKSk7CisgICAgICAgIGRzdF9nID0gdmFkZHFfdTE2KGRzdF9nLCB2c2hsbF9uX3U4KHNnLDMpKTsKKyAgICAgICAgZHN0X3IgPSB2YWRkcV91MTYoZHN0X3IsIHZzaGxsX25fdTgoc3IsMikpOwogI2VuZGlmCiAKLQkgICAgLyogcmVwYWNrIHRvIHN0b3JlICovCi0JICAgIGRzdDggPSB2YW5kcV91MTYodnNocnFfbl91MTYoZHN0X2IsIDUpLCB2ZHVwcV9uX3UxNigweDAwMUYpKTsKLQkgICAgZHN0OCA9IHZzbGlxX25fdTE2KGRzdDgsIHZzaHJxX25fdTE2KGRzdF9nLCA1KSwgNSk7Ci0JICAgIGRzdDggPSB2c2xpcV9uX3UxNihkc3Q4LCB2c2hycV9uX3UxNihkc3Rfciw1KSwgMTEpOworICAgICAgICAvKiByZXBhY2sgdG8gc3RvcmUgKi8KKyAgICAgICAgZHN0OCA9IHZhbmRxX3UxNih2c2hycV9uX3UxNihkc3RfYiwgNSksIHZkdXBxX25fdTE2KDB4MDAxRikpOworICAgICAgICBkc3Q4ID0gdnNsaXFfbl91MTYoZHN0OCwgdnNocnFfbl91MTYoZHN0X2csIDUpLCA1KTsKKyAgICAgICAgZHN0OCA9IHZzbGlxX25fdTE2KGRzdDgsIHZzaHJxX25fdTE2KGRzdF9yLDUpLCAxMSk7CiAKLQkgICAgdnN0MXFfdTE2KGRzdCwgZHN0OCk7CisgICAgICAgIHZzdDFxX3UxNihkc3QsIGRzdDgpOwogCi0jaWYJZGVmaW5lZChERUJVR19PUEFRVUVfRElUSEVSKQotCSAgICAvKiB2ZXJpZnkgbXkgOCBlbGVtZW50cyBtYXRjaCB0aGUgdGVtcCBidWZmZXIgKi8KLQl7Ci0JICAgaW50IGksIGJhZD0wOwotCSAgIHN0YXRpYyBpbnQgaW52b2NhdGlvbjsKKyNpZiAgICBkZWZpbmVkKERFQlVHX09QQVFVRV9ESVRIRVIpCisgICAgICAgIC8qIHZlcmlmeSBteSA4IGVsZW1lbnRzIG1hdGNoIHRoZSB0ZW1wIGJ1ZmZlciAqLworICAgIHsKKyAgICAgICBpbnQgaSwgYmFkPTA7CisgICAgICAgc3RhdGljIGludCBpbnZvY2F0aW9uOwogCi0JICAgZm9yIChpPTA7aTxVTlJPTEw7aSsrKQotCQlpZiAodG1wYnVmW2ldICE9IGRzdFtpXSkgYmFkPTE7Ci0JICAgaWYgKGJhZCkgewotCQlTa0RlYnVnZigiQkFEIFMzMkFfRDU2NV9PcGFxdWVfRGl0aGVyX25lb24oKTsgaW52b2NhdGlvbiAlZCBvZmZzZXQgJWRcbiIsCi0JCQlpbnZvY2F0aW9uLCBvZmZzZXQpOwotCQlTa0RlYnVnZigiICBhbHBoYSAweCV4XG4iLCBhbHBoYSk7Ci0JCWZvciAoaT0wO2k8VU5ST0xMO2krKykKLQkJICAgIFNrRGVidWdmKCIlMmQ6ICVzICUwNHggdyAlMDR4IGlkICUwNHggcyAlMDh4IGQgJTA0eCAlMDR4ICUwNHggJTA0eFxuIiwKLQkJCWksICgodG1wYnVmW2ldICE9IGRzdFtpXSk/IkJBRCI6ImdvdCIpLAotCQkJZHN0W2ldLCB0bXBidWZbaV0sIGluX2RzdFtpXSwgc3JjW2ldLCB0ZFtpXSwgdGR2W2ldLCB0YXBbaV0sIHRhW2ldKTsKKyAgICAgICBmb3IgKGk9MDtpPFVOUk9MTDtpKyspCisgICAgICAgIGlmICh0bXBidWZbaV0gIT0gZHN0W2ldKSBiYWQ9MTsKKyAgICAgICBpZiAoYmFkKSB7CisgICAgICAgIFNrRGVidWdmKCJCQUQgUzMyQV9ENTY1X09wYXF1ZV9EaXRoZXJfbmVvbigpOyBpbnZvY2F0aW9uICVkIG9mZnNldCAlZFxuIiwKKyAgICAgICAgICAgIGludm9jYXRpb24sIG9mZnNldCk7CisgICAgICAgIFNrRGVidWdmKCIgIGFscGhhIDB4JXhcbiIsIGFscGhhKTsKKyAgICAgICAgZm9yIChpPTA7aTxVTlJPTEw7aSsrKQorICAgICAgICAgICAgU2tEZWJ1Z2YoIiUyZDogJXMgJTA0eCB3ICUwNHggaWQgJTA0eCBzICUwOHggZCAlMDR4ICUwNHggJTA0eCAlMDR4XG4iLAorICAgICAgICAgICAgaSwgKCh0bXBidWZbaV0gIT0gZHN0W2ldKT8iQkFEIjoiZ290IiksCisgICAgICAgICAgICBkc3RbaV0sIHRtcGJ1ZltpXSwgaW5fZHN0W2ldLCBzcmNbaV0sIHRkW2ldLCB0ZHZbaV0sIHRhcFtpXSwgdGFbaV0pOwogCi0JCXNob3dtZTE2KCJhbHBoYTgiLCAmYWxwaGE4LCBzaXplb2YoYWxwaGE4KSk7Ci0JCXNob3dtZTE2KCJzY2FsZTgiLCAmc2NhbGU4LCBzaXplb2Yoc2NhbGU4KSk7Ci0JCXNob3dtZTgoImQiLCAmZCwgc2l6ZW9mKGQpKTsKLQkJc2hvd21lMTYoImRzdDgiLCAmZHN0OCwgc2l6ZW9mKGRzdDgpKTsKLQkJc2hvd21lMTYoImRzdF9iIiwgJmRzdF9iLCBzaXplb2YoZHN0X2IpKTsKLQkJc2hvd21lMTYoImRzdF9nIiwgJmRzdF9nLCBzaXplb2YoZHN0X2cpKTsKLQkJc2hvd21lMTYoImRzdF9yIiwgJmRzdF9yLCBzaXplb2YoZHN0X3IpKTsKLQkJc2hvd21lOCgic2IiLCAmc2IsIHNpemVvZihzYikpOwotCQlzaG93bWU4KCJzZyIsICZzZywgc2l6ZW9mKHNnKSk7Ci0JCXNob3dtZTgoInNyIiwgJnNyLCBzaXplb2Yoc3IpKTsKKyAgICAgICAgc2hvd21lMTYoImFscGhhOCIsICZhbHBoYTgsIHNpemVvZihhbHBoYTgpKTsKKyAgICAgICAgc2hvd21lMTYoInNjYWxlOCIsICZzY2FsZTgsIHNpemVvZihzY2FsZTgpKTsKKyAgICAgICAgc2hvd21lOCgiZCIsICZkLCBzaXplb2YoZCkpOworICAgICAgICBzaG93bWUxNigiZHN0OCIsICZkc3Q4LCBzaXplb2YoZHN0OCkpOworICAgICAgICBzaG93bWUxNigiZHN0X2IiLCAmZHN0X2IsIHNpemVvZihkc3RfYikpOworICAgICAgICBzaG93bWUxNigiZHN0X2ciLCAmZHN0X2csIHNpemVvZihkc3RfZykpOworICAgICAgICBzaG93bWUxNigiZHN0X3IiLCAmZHN0X3IsIHNpemVvZihkc3RfcikpOworICAgICAgICBzaG93bWU4KCJzYiIsICZzYiwgc2l6ZW9mKHNiKSk7CisgICAgICAgIHNob3dtZTgoInNnIiwgJnNnLCBzaXplb2Yoc2cpKTsKKyAgICAgICAgc2hvd21lOCgic3IiLCAmc3IsIHNpemVvZihzcikpOwogCi0JCS8qIGNvcCBvdXQgKi8KLQkJcmV0dXJuOwotCSAgIH0KLQkgICBvZmZzZXQgKz0gVU5ST0xMOwotCSAgIGludm9jYXRpb24rKzsKLQl9CisgICAgICAgIC8qIGNvcCBvdXQgKi8KKyAgICAgICAgcmV0dXJuOworICAgICAgIH0KKyAgICAgICBvZmZzZXQgKz0gVU5ST0xMOworICAgICAgIGludm9jYXRpb24rKzsKKyAgICB9CiAjZW5kaWYKIAogICAgICAgICAgICAgZHN0ICs9IFVOUk9MTDsKLQkgICAgc3JjICs9IFVOUk9MTDsKLQkgICAgY291bnQgLT0gVU5ST0xMOwotCSAgICAvKiBza2lwIHggKz0gVU5ST0xMLCBzaW5jZSBpdCdzIHVuY2hhbmdlZCBtb2QtNCAqLworICAgICAgICBzcmMgKz0gVU5ST0xMOworICAgICAgICBjb3VudCAtPSBVTlJPTEw7CisgICAgICAgIC8qIHNraXAgeCArPSBVTlJPTEwsIHNpbmNlIGl0J3MgdW5jaGFuZ2VkIG1vZC00ICovCiAgICAgICAgIH0gd2hpbGUgKGNvdW50ID49IFVOUk9MTCk7CiAgICAgfQotI3VuZGVmCVVOUk9MTAorI3VuZGVmICAgIFVOUk9MTAogCiAgICAgLyogcmVzaWR1YWxzICovCiAgICAgaWYgKGNvdW50ID4gMCkgewpAQCAtODQwLDIwICs4NDAsMjAgQEAKICAgICAgICAgICAgIFNrUE1Db2xvckFzc2VydChjKTsKICAgICAgICAgICAgIGlmIChjKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYSA9IFNrR2V0UGFja2VkQTMyKGMpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gZGl0aGVyIGFuZCBhbHBoYSBhcmUganVzdCB0ZW1wb3JhcnkgdmFyaWFibGVzIHRvIHdvcmstYXJvdW5kCiAgICAgICAgICAgICAgICAgLy8gYW4gSUNFIGluIGRlYnVnLgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRpdGhlciA9IERJVEhFUl9WQUxVRSh4KTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IFNrQWxwaGEyNTVUbzI1NihhKTsKICAgICAgICAgICAgICAgICBpbnQgZCA9IFNrQWxwaGFNdWwoZGl0aGVyLCBhbHBoYSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzciA9IFNrR2V0UGFja2VkUjMyKGMpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNnID0gU2tHZXRQYWNrZWRHMzIoYyk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2IgPSBTa0dldFBhY2tlZEIzMihjKTsKICAgICAgICAgICAgICAgICBzciA9IFNrRElUSEVSX1IzMl9GT1JfNTY1KHNyLCBkKTsKICAgICAgICAgICAgICAgICBzZyA9IFNrRElUSEVSX0czMl9GT1JfNTY1KHNnLCBkKTsKICAgICAgICAgICAgICAgICBzYiA9IFNrRElUSEVSX0IzMl9GT1JfNTY1KHNiLCBkKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY19leHBhbmRlZCA9IChzZyA8PCAyNCkgfCAoc3IgPDwgMTMpIHwgKHNiIDw8IDIpOwogICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdF9leHBhbmRlZCA9IFNrRXhwYW5kX3JnYl8xNigqZHN0KTsKICAgICAgICAgICAgICAgICBkc3RfZXhwYW5kZWQgPSBkc3RfZXhwYW5kZWQgKiAoU2tBbHBoYTI1NVRvMjU2KDI1NSAtIGEpID4+IDMpOwpAQCAtODc1LDg5ICs4NzUsODkgQEAKICAqIG5vdCBhY2NvdW50aW5nIGZvciBhbnkgaW5zdHJ1Y3Rpb24gb3IgbWVtb3J5IGxhdGVuY2llcy4KICAqLwogCi0jdW5kZWYJREVCVUdfUzMyX09QQVFVRV9ESVRIRVIKKyN1bmRlZiAgICBERUJVR19TMzJfT1BBUVVFX0RJVEhFUgogCiB2b2lkIFMzMl9ENTY1X09wYXF1ZV9EaXRoZXJfbmVvbih1aW50MTZfdCogU0tfUkVTVFJJQ1QgZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQTUNvbG9yKiBTS19SRVNUUklDVCBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIFU4Q1BVIGFscGhhLCBpbnQgeCwgaW50IHkpIHsKICAgICBTa0FTU0VSVCgyNTUgPT0gYWxwaGEpOwogCi0jZGVmaW5lCVVOUk9MTAk4CisjZGVmaW5lICAgIFVOUk9MTCAgICA4CiAgICAgaWYgKGNvdW50ID49IFVOUk9MTCkgewotCXVpbnQ4eDhfdCBkOwotCWNvbnN0IHVpbnQ4X3QgKmRzdGFydCA9ICZnRGl0aGVyTWF0cml4X05lb25bKHkmMykqMTIgKyAoeCYzKV07Ci0JZCA9IHZsZDFfdTgoZHN0YXJ0KTsKKyAgICB1aW50OHg4X3QgZDsKKyAgICBjb25zdCB1aW50OF90ICpkc3RhcnQgPSAmZ0RpdGhlck1hdHJpeF9OZW9uWyh5JjMpKjEyICsgKHgmMyldOworICAgIGQgPSB2bGQxX3U4KGRzdGFydCk7CiAKLQl3aGlsZSAoY291bnQgPj0gVU5ST0xMKSB7Ci0JICAgIHVpbnQ4eDhfdCBzciwgc2csIHNiLCBzYTsKLQkgICAgdWludDE2eDhfdCBkciwgZGcsIGRiLCBkYTsKLQkgICAgdWludDE2eDhfdCBkc3Q4OworICAgIHdoaWxlIChjb3VudCA+PSBVTlJPTEwpIHsKKyAgICAgICAgdWludDh4OF90IHNyLCBzZywgc2IsIHNhOworICAgICAgICB1aW50MTZ4OF90IGRyLCBkZywgZGIsIGRhOworICAgICAgICB1aW50MTZ4OF90IGRzdDg7CiAKLQkgICAgLyogc291cmNlIGlzIGluIEFCR1Igb3JkZXJpbmcgKFIgPT0gbHNiKSAqLwotCSAgICB7Ci0JCXJlZ2lzdGVyIHVpbnQ4eDhfdCBkMCBhc20oImQwIik7Ci0JCXJlZ2lzdGVyIHVpbnQ4eDhfdCBkMSBhc20oImQxIik7Ci0JCXJlZ2lzdGVyIHVpbnQ4eDhfdCBkMiBhc20oImQyIik7Ci0JCXJlZ2lzdGVyIHVpbnQ4eDhfdCBkMyBhc20oImQzIik7CisgICAgICAgIC8qIHNvdXJjZSBpcyBpbiBBQkdSIG9yZGVyaW5nIChSID09IGxzYikgKi8KKyAgICAgICAgeworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDAgYXNtKCJkMCIpOworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDEgYXNtKCJkMSIpOworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDIgYXNtKCJkMiIpOworICAgICAgICByZWdpc3RlciB1aW50OHg4X3QgZDMgYXNtKCJkMyIpOwogCi0JCWFzbSAoInZsZDQuOAl7ZDAtZDN9LFslNF0gIC8qIHI9JVAwIGc9JVAxIGI9JVAyIGE9JVAzICovIgotCQkgICAgOiAiPXciIChkMCksICI9dyIgKGQxKSwgIj13IiAoZDIpLCAiPXciIChkMykKLQkJICAgIDogInIiIChzcmMpCisgICAgICAgIGFzbSAoInZsZDQuOCAgICB7ZDAtZDN9LFslNF0gIC8qIHI9JVAwIGc9JVAxIGI9JVAyIGE9JVAzICovIgorICAgICAgICAgICAgOiAiPXciIChkMCksICI9dyIgKGQxKSwgIj13IiAoZDIpLCAiPXciIChkMykKKyAgICAgICAgICAgIDogInIiIChzcmMpCiAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICBzciA9IGQwOyBzZyA9IGQxOyBzYiA9IGQyOyBzYSA9IGQzOwotCSAgICB9Ci0JICAgIC8qIFhYWDogaWYgd2Ugd2FudCB0byBwcmVmZXRjaCwgaGlkZSBpdCBpbiB0aGUgYWJvdmUgYXNtKCkKLQkgICAgICogdXNpbmcgdGhlIGdjYyBfX2J1aWx0aW5fcHJlZmV0Y2goKSwgdGhlIHByZWZldGNoIHdpbGwKLQkgICAgICogZmFsbCB0byB0aGUgYm90dG9tIG9mIHRoZSBsb29wIC0tIGl0IHdvbid0IHN0aWNrIHVwCi0JICAgICAqIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AsIGp1c3QgYWZ0ZXIgdGhlIHZsZDQuCi0JICAgICAqLworICAgICAgICAgICAgc3IgPSBkMDsgc2cgPSBkMTsgc2IgPSBkMjsgc2EgPSBkMzsKKyAgICAgICAgfQorICAgICAgICAvKiBYWFg6IGlmIHdlIHdhbnQgdG8gcHJlZmV0Y2gsIGhpZGUgaXQgaW4gdGhlIGFib3ZlIGFzbSgpCisgICAgICAgICAqIHVzaW5nIHRoZSBnY2MgX19idWlsdGluX3ByZWZldGNoKCksIHRoZSBwcmVmZXRjaCB3aWxsCisgICAgICAgICAqIGZhbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbG9vcCAtLSBpdCB3b24ndCBzdGljayB1cAorICAgICAgICAgKiBhdCB0aGUgdG9wIG9mIHRoZSBsb29wLCBqdXN0IGFmdGVyIHRoZSB2bGQ0LgorICAgICAgICAgKi8KIAotCSAgICAvKiBzciA9IHNyIC0gKHNyPj41KSArIGQgKi8KLQkgICAgc3IgPSB2c3ViX3U4KHNyLCB2c2hyX25fdTgoc3IsIDUpKTsKLQkgICAgZHIgPSB2YWRkbF91OChzciwgZCk7CisgICAgICAgIC8qIHNyID0gc3IgLSAoc3I+PjUpICsgZCAqLworICAgICAgICBzciA9IHZzdWJfdTgoc3IsIHZzaHJfbl91OChzciwgNSkpOworICAgICAgICBkciA9IHZhZGRsX3U4KHNyLCBkKTsKIAotCSAgICAvKiBzYiA9IHNiIC0gKHNiPj41KSArIGQgKi8KLQkgICAgc2IgPSB2c3ViX3U4KHNiLCB2c2hyX25fdTgoc2IsIDUpKTsKLQkgICAgZGIgPSB2YWRkbF91OChzYiwgZCk7CisgICAgICAgIC8qIHNiID0gc2IgLSAoc2I+PjUpICsgZCAqLworICAgICAgICBzYiA9IHZzdWJfdTgoc2IsIHZzaHJfbl91OChzYiwgNSkpOworICAgICAgICBkYiA9IHZhZGRsX3U4KHNiLCBkKTsKIAotCSAgICAvKiBzZyA9IHNnIC0gKHNnPj42KSArIGQ+PjE7IHNpbWlsYXIgbG9naWMgZm9yIG92ZXJmbG93cyAqLwotCSAgICBzZyA9IHZzdWJfdTgoc2csIHZzaHJfbl91OChzZywgNikpOwotCSAgICBkZyA9IHZhZGRsX3U4KHNnLCB2c2hyX25fdTgoZCwxKSk7Ci0JICAgIC8qIFhYWDogY2hlY2sgdGhhdCB0aGUgImQ+PjEiIGhlcmUgaXMgaG9pc3RlZCAqLworICAgICAgICAvKiBzZyA9IHNnIC0gKHNnPj42KSArIGQ+PjE7IHNpbWlsYXIgbG9naWMgZm9yIG92ZXJmbG93cyAqLworICAgICAgICBzZyA9IHZzdWJfdTgoc2csIHZzaHJfbl91OChzZywgNikpOworICAgICAgICBkZyA9IHZhZGRsX3U4KHNnLCB2c2hyX25fdTgoZCwxKSk7CisgICAgICAgIC8qIFhYWDogY2hlY2sgdGhhdCB0aGUgImQ+PjEiIGhlcmUgaXMgaG9pc3RlZCAqLwogCi0JICAgIC8qIHBhY2sgaGlnaCBiaXRzIG9mIGVhY2ggaW50byA1NjUgZm9ybWF0ICAocmdiLCBiIGlzIGxzYikgKi8KLQkgICAgZHN0OCA9IHZzaHJxX25fdTE2KGRiLCAzKTsKLQkgICAgZHN0OCA9IHZzbGlxX25fdTE2KGRzdDgsIHZzaHJxX25fdTE2KGRnLCAyKSwgNSk7Ci0JICAgIGRzdDggPSB2c2xpcV9uX3UxNihkc3Q4LCB2c2hycV9uX3UxNihkciwzKSwgMTEpOworICAgICAgICAvKiBwYWNrIGhpZ2ggYml0cyBvZiBlYWNoIGludG8gNTY1IGZvcm1hdCAgKHJnYiwgYiBpcyBsc2IpICovCisgICAgICAgIGRzdDggPSB2c2hycV9uX3UxNihkYiwgMyk7CisgICAgICAgIGRzdDggPSB2c2xpcV9uX3UxNihkc3Q4LCB2c2hycV9uX3UxNihkZywgMiksIDUpOworICAgICAgICBkc3Q4ID0gdnNsaXFfbl91MTYoZHN0OCwgdnNocnFfbl91MTYoZHIsMyksIDExKTsKIAotCSAgICAvKiBzdG9yZSBpdCAqLwotCSAgICB2c3QxcV91MTYoZHN0LCBkc3Q4KTsKKyAgICAgICAgLyogc3RvcmUgaXQgKi8KKyAgICAgICAgdnN0MXFfdTE2KGRzdCwgZHN0OCk7CiAKLSNpZglkZWZpbmVkKERFQlVHX1MzMl9PUEFRVUVfRElUSEVSKQotCSAgICAvKiBhbHdheXMgZ29vZCB0byBrbm93IGlmIHdlIGdlbmVyYXRlZCBnb29kIHJlc3VsdHMgKi8KLQkgICAgewotCQlpbnQgaSwgbXl4ID0geCwgbXl5ID0geTsKLQkJRElUSEVSXzU2NV9TQ0FOKG15eSk7Ci0JCWZvciAoaT0wO2k8VU5ST0xMO2krKykgewotCQkgICAgU2tQTUNvbG9yIGMgPSBzcmNbaV07Ci0JCSAgICB1bnNpZ25lZCBkaXRoZXIgPSBESVRIRVJfVkFMVUUobXl4KTsKLQkJICAgIHVpbnQxNl90IHZhbCA9IFNrRGl0aGVyUkdCMzJUbzU2NShjLCBkaXRoZXIpOwotCQkgICAgaWYgKHZhbCAhPSBkc3RbaV0pIHsKLQkJCVNrRGVidWdmKCJSQkU6IHNyYyAlMDh4IGRpdGhlciAlMDJ4LCB3YW50ICUwNHggZ290ICUwNHggZGJhc1tpXSAlMDJ4XG4iLAotCQkJICAgIGMsIGRpdGhlciwgdmFsLCBkc3RbaV0sIGRzdGFydFtpXSk7Ci0JCSAgICB9Ci0JCSAgICBESVRIRVJfSU5DX1gobXl4KTsKLQkJfQotCSAgICB9CisjaWYgICAgZGVmaW5lZChERUJVR19TMzJfT1BBUVVFX0RJVEhFUikKKyAgICAgICAgLyogYWx3YXlzIGdvb2QgdG8ga25vdyBpZiB3ZSBnZW5lcmF0ZWQgZ29vZCByZXN1bHRzICovCisgICAgICAgIHsKKyAgICAgICAgaW50IGksIG15eCA9IHgsIG15eSA9IHk7CisgICAgICAgIERJVEhFUl81NjVfU0NBTihteXkpOworICAgICAgICBmb3IgKGk9MDtpPFVOUk9MTDtpKyspIHsKKyAgICAgICAgICAgIFNrUE1Db2xvciBjID0gc3JjW2ldOworICAgICAgICAgICAgdW5zaWduZWQgZGl0aGVyID0gRElUSEVSX1ZBTFVFKG15eCk7CisgICAgICAgICAgICB1aW50MTZfdCB2YWwgPSBTa0RpdGhlclJHQjMyVG81NjUoYywgZGl0aGVyKTsKKyAgICAgICAgICAgIGlmICh2YWwgIT0gZHN0W2ldKSB7CisgICAgICAgICAgICBTa0RlYnVnZigiUkJFOiBzcmMgJTA4eCBkaXRoZXIgJTAyeCwgd2FudCAlMDR4IGdvdCAlMDR4IGRiYXNbaV0gJTAyeFxuIiwKKyAgICAgICAgICAgICAgICBjLCBkaXRoZXIsIHZhbCwgZHN0W2ldLCBkc3RhcnRbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRElUSEVSX0lOQ19YKG15eCk7CisgICAgICAgIH0KKyAgICAgICAgfQogI2VuZGlmCiAKLQkgICAgZHN0ICs9IFVOUk9MTDsKLQkgICAgc3JjICs9IFVOUk9MTDsKLQkgICAgY291bnQgLT0gVU5ST0xMOwotCSAgICB4ICs9IFVOUk9MTDsJCS8qIHByb2JhYmx5IHN1cGVyZmx1b3VzICovCi0JfQorICAgICAgICBkc3QgKz0gVU5ST0xMOworICAgICAgICBzcmMgKz0gVU5ST0xMOworICAgICAgICBjb3VudCAtPSBVTlJPTEw7CisgICAgICAgIHggKz0gVU5ST0xMOyAgICAgICAgLyogcHJvYmFibHkgc3VwZXJmbHVvdXMgKi8KICAgICB9Ci0jdW5kZWYJVU5ST0xMCisgICAgfQorI3VuZGVmICAgIFVOUk9MTAogCiAgICAgLyogcmVzaWR1YWxzICovCiAgICAgaWYgKGNvdW50ID4gMCkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAKIAogY29uc3QgU2tCbGl0Um93OjpQcm9jMzIgc2tfYmxpdHJvd19wbGF0Zm9ybV8zMl9wcm9jc19hcm1fbmVvbltdID0gewogICAgIE5VTEwsICAgLy8gUzMyX09wYXF1ZSwKLSAgICBTMzJfQmxlbmRfQmxpdFJvdzMyX25lb24sCQkvLyBTMzJfQmxlbmQsCi0gICAgUzMyQV9PcGFxdWVfQmxpdFJvdzMyX25lb24sCQkvLyBTMzJBX09wYXF1ZSwKLSAgICBTMzJBX0JsZW5kX0JsaXRSb3czMl9hcm0JCS8vIFMzMkFfQmxlbmQKKyAgICBTMzJfQmxlbmRfQmxpdFJvdzMyX25lb24sICAgICAgICAvLyBTMzJfQmxlbmQsCisgICAgUzMyQV9PcGFxdWVfQmxpdFJvdzMyX25lb24sICAgICAgICAvLyBTMzJBX09wYXF1ZSwKKyAgICBTMzJBX0JsZW5kX0JsaXRSb3czMl9hcm0gICAgICAgIC8vIFMzMkFfQmxlbmQKIH07CmRpZmYgLS1naXQgYS9zcmMvb3B0cy9Ta1V0aWxzX29wdHNfU1NFMi5jcHAgYi9zcmMvb3B0cy9Ta1V0aWxzX29wdHNfU1NFMi5jcHAKaW5kZXggNjNlN2YyYy4uMDhlNGY2NiAxMDA2NDQKLS0tIGEvc3JjL29wdHMvU2tVdGlsc19vcHRzX1NTRTIuY3BwCisrKyBiL3NyYy9vcHRzL1NrVXRpbHNfb3B0c19TU0UyLmNwcApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgPGVtbWludHJpbi5oPgogI2luY2x1ZGUgIlNrVXRpbHNfb3B0c19TU0UyLmgiCi0gCisKIHZvaWQgc2tfbWVtc2V0MTZfU1NFMih1aW50MTZfdCAqZHN0LCB1aW50MTZfdCB2YWx1ZSwgaW50IGNvdW50KQogewogICAgIFNrQVNTRVJUKGRzdCAhPSBOVUxMICYmIGNvdW50ID49IDApOwpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAtLWNvdW50OwogICAgIH0KIH0KLSAKKwogdm9pZCBza19tZW1zZXQzMl9TU0UyKHVpbnQzMl90ICpkc3QsIHVpbnQzMl90IHZhbHVlLCBpbnQgY291bnQpCiB7CiAgICAgU2tBU1NFUlQoZHN0ICE9IE5VTEwgJiYgY291bnQgPj0gMCk7CmRpZmYgLS1naXQgYS9zcmMvb3B0cy9Ta1V0aWxzX29wdHNfU1NFMi5oIGIvc3JjL29wdHMvU2tVdGlsc19vcHRzX1NTRTIuaAppbmRleCA3NzE2NTZmLi5lZDI0YzFmIDEwMDY0NAotLS0gYS9zcmMvb3B0cy9Ta1V0aWxzX29wdHNfU1NFMi5oCisrKyBiL3NyYy9vcHRzL1NrVXRpbHNfb3B0c19TU0UyLmgKQEAgLTgsNiArOCw2IEBACiAKIAogI2luY2x1ZGUgIlNrVHlwZXMuaCIKLSAKKwogdm9pZCBza19tZW1zZXQxNl9TU0UyKHVpbnQxNl90ICpkc3QsIHVpbnQxNl90IHZhbHVlLCBpbnQgY291bnQpOwogdm9pZCBza19tZW1zZXQzMl9TU0UyKHVpbnQzMl90ICpkc3QsIHVpbnQzMl90IHZhbHVlLCBpbnQgY291bnQpOwpkaWZmIC0tZ2l0IGEvc3JjL29wdHMvb3B0c19jaGVja19TU0UyLmNwcCBiL3NyYy9vcHRzL29wdHNfY2hlY2tfU1NFMi5jcHAKaW5kZXggMWE3MDRiOC4uOTZkMGRlYSAxMDA2NDQKLS0tIGEvc3JjL29wdHMvb3B0c19jaGVja19TU0UyLmNwcAorKysgYi9zcmMvb3B0cy9vcHRzX2NoZWNrX1NTRTIuY3BwCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICBpZiAoU2tNYXNrOjprQThfRm9ybWF0ICE9IG1hc2tGb3JtYXQpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgQ29sb3JQcm9jIHByb2MgPSBOVUxMOwogICAgIGlmIChjYWNoZWRIYXNTU0UyKCkpIHsKICAgICAgICAgc3dpdGNoIChkc3RDb25maWcpIHsK