ZGlmZiAtLWdpdCBhLy5idWlsZC9wdXNoLWFydGlmYWN0cy5zaCBiLy5idWlsZC9wdXNoLWFydGlmYWN0cy5zaAppbmRleCBlYzgxZDYyLi5hZTdhY2U2IDEwMDc1NQotLS0gYS8uYnVpbGQvcHVzaC1hcnRpZmFjdHMuc2gKKysrIGIvLmJ1aWxkL3B1c2gtYXJ0aWZhY3RzLnNoCkBAIC0xLDQgKzEsNCBAQAotIyEvYmluL2Jhc2ggLWV1CisjIS9iaW4vYmFzaCAtZXV4CiAKICMgUHVzaCB0aGUgbG94aWdlbiBhcnRpZmFjdHMgdG8gYSBkZWRpY2F0ZWQgZ2l0IHJlcG9zaXRvcnksCiAjIGFsb25nIHdpdGggYSBuaWNlIGNvbW1pdCBtZXNzYWdlIGFuZCBhIHRhZwpAQCAtMTAsMTMgKzEwLDE4IEBACiBmaQogCiBBUlRJRkFDVF9SRVBPX0JSQU5DSD0kezItbWFzdGVyfQorQVJUSUZBQ1RfVEFSR0VUX0JSQU5DSD0kezMtbWFzdGVyfQorCitNQUtFPSR7TUFLRS1tYWtlfQogCiBBUlRJRkFDVF9SRVBPPSQobWt0ZW1wIC1kIC0tdG1wZGlyICJwdXNoLWFydGlmYWN0cy1yZXBvLlhYWFhYWFgiKQogCiBnaXQgY2xvbmUgJHtBUlRJRkFDVF9SRVBPX1VSTH0gJHtBUlRJRkFDVF9SRVBPfSAtYiAke0FSVElGQUNUX1JFUE9fQlJBTkNIfQotZmluZCAke0FSVElGQUNUX1JFUE99IC1taW5kZXB0aCAxIC1tYXhkZXB0aCAxIC10eXBlIGQgXCEgLW5hbWUgJy4qJyAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLXIKLW1ha2UgTE9YSV9PVVRQVVRfRElSPSR7QVJUSUZBQ1RfUkVQT30gY2xlYW4gYWxsCiAKK2ZpbmQgJHtBUlRJRkFDVF9SRVBPfSAtbWluZGVwdGggMSAtbWF4ZGVwdGggMSAtdHlwZSBkIFwhIC1uYW1lICcuKicgLXByaW50MCB8IHhhcmdzIC0wIHJtIC1yCiske01BS0V9IExPWElfT1VUUFVUX0RJUj0ke0FSVElGQUNUX1JFUE99IGNsZWFuIGFsbAorCitsb3hpX2JyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpCiBsb3hpX2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpCiBsYXN0X2xveGlfbG9nPSQoZ2l0IGxvZyAtLWZvcm1hdD1vbmVsaW5lIC0xKQogZ2l0X2xvZ19maWxlPSQobWt0ZW1wIC0tdG1wZGlyICJnaXQtbG9nLWZpbGUuWFhYWFhYWCIpCkBAIC00OSwxNSArNTQsMTkgQEAKICAgICBnaXQgYWRkIC1BCiAKICAgICAoCi0gICAgICAgZWNobyAiQXJ0aWZhY3RzIGZyb20gJHtsb3hpX2dpdGh1Yl91cmx9IgorICAgICAgIGVjaG8gIkFydGlmYWN0cyBmcm9tICR7bG94aV9naXRodWJfdXJsfSAoQnJhbmNoICR7bG94aV9icmFuY2h9KSIKICAgICAgICBlY2hvCiAgICAgICAgZWNobyAiTG94aWdlbiBIZWFkIGNvbW1pdCBmbG9vZGxpZ2h0L2xveGlnZW5AJHtsb3hpX2hlYWR9IgogICAgICAgIGNhdCAkZ2l0X2xvZ19maWxlCiAgICAgKSB8IGdpdCBjb21taXQgLS1maWxlPS0KIAogICAgIGdpdCB0YWcgLWEgLWYgImxveGkvJHtsb3hpX2hlYWR9IiAtbSAiVGFnIExveGlnZW4gUmV2aXNpb24gJHtsb3hpX2hlYWR9IgotICAgIGdpdCBwdXNoIC0tdGFncwotICAgIGdpdCBwdXNoIG9yaWdpbiBIRUFECisgICAgZ2l0IHB1c2ggLS10YWdzIC1mCisgICAgaWYgW1sgJEFSVElGQUNUX1RBUkdFVF9CUkFOQ0ggIT0gJEFSVElGQUNUX1JFUE9fQlJBTkNIIF1dOyB0aGVuCisgICAgICAgIGdpdCBwdXNoIC1mIG9yaWdpbiBIRUFEOiR7QVJUSUZBQ1RfVEFSR0VUX0JSQU5DSH0KKyAgICBlbHNlCisgICAgICAgIGdpdCBwdXNoIG9yaWdpbiBIRUFECisgICAgZmkKICkKIAogcm0gLXJmICR7QVJUSUZBQ1RfUkVQT30KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNTE4YWM2ZS4uNTc0NmU5NCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTUyLDcgKzUyLDcgQEAKIGM6IC5sb3hpX3RzLmMKIAogLmxveGlfdHMuYzogJHtMT1hJX1BZX0ZJTEVTfSAke0xPWElfVEVNUExBVEVfRklMRVN9ICR7SU5QVVRfRklMRVN9ICR7VEVTVF9EQVRBfQotCS4vbG94aWdlbi5weSAtLWluc3RhbGwtZGlyPSR7TE9YSV9PVVRQVVRfRElSfSAtLWxhbmc9YworCS4vbG94aWdlbi5weSAtLWluc3RhbGwtZGlyPSR7TE9YSV9PVVRQVVRfRElSfSAtLWxhbmc9YyAtLXZlcnNpb24tbGlzdD0xLjAsMS4xLDEuMiwxLjMsMS40CiAJdG91Y2ggJEAKIAogcHl0aG9uOiAubG94aV90cy5weXRob24KQEAgLTEzMyw2ICsxMzMsNyBAQAogCVBZVEhPTlBBVEg9JHtMT1hJX09VVFBVVF9ESVJ9L3B5bG94aTouIHB5dGhvbiBweV9nZW4vdGVzdHMvb2YxMi5weQogCVBZVEhPTlBBVEg9JHtMT1hJX09VVFBVVF9ESVJ9L3B5bG94aTouIHB5dGhvbiBweV9nZW4vdGVzdHMvb2YxMy5weQogCVBZVEhPTlBBVEg9JHtMT1hJX09VVFBVVF9ESVJ9L3B5bG94aTouIHB5dGhvbiBweV9nZW4vdGVzdHMvb2YxNC5weQorCVBZVEhPTlBBVEg9JHtMT1hJX09VVFBVVF9ESVJ9L3B5bG94aTouIHB5dGhvbiBweV9nZW4vdGVzdHMvb2YxNS5weQogCiBjaGVjay1jOiBjCiAJbWFrZSAtajQgLUMgJHtMT1hJX09VVFBVVF9ESVJ9L2xvY2l0ZXN0CmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggMTgzNTdkNC4uNTkzNTBhZSAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMywxNSArMywxNiBAQAogCiBMb3hpR2VuIGlzIGEgdG9vbCB0aGF0IGdlbmVyYXRlcyBPcGVuRmxvdyBwcm90b2NvbCBsaWJyYXJpZXMgZm9yIGEgbnVtYmVyIG9mCiBsYW5ndWFnZXMuIEl0IGlzIGNvbXBvc2VkIG9mIGEgZnJvbnRlbmQgdGhhdCBwYXJzZXMgd2lyZSBwcm90b2NvbCBkZXNjcmlwdGlvbnMKLWFuZCBhIGJhY2tlbmQgZm9yIGVhY2ggc3VwcG9ydGVkIGxhbmd1YWdlIChjdXJyZW50bHkgQywgUHl0aG9uLCBhbmQgSmF2YSwgd2l0aCBhbiAKLWF1dG8tZ2VuZXJhdGVkIHdpcmVzaGFyayBkaXNzZWN0b3IgaW4gTHVhIG9uIHRoZSB3YXkpLiAKK2FuZCBhIGJhY2tlbmQgZm9yIGVhY2ggc3VwcG9ydGVkIGxhbmd1YWdlIChjdXJyZW50bHkgQywgUHl0aG9uLCBhbmQgSmF2YSwgd2l0aCBhbgorYXV0by1nZW5lcmF0ZWQgd2lyZXNoYXJrIGRpc3NlY3RvciBpbiBMdWEgb24gdGhlIHdheSkuCiAKLUxveGlHZW4gY3VycmVudGx5IHN1cHBvcnRzIE9wZW5GbG93IFZlcnNpb25zICoqMS4wKiosICoqMS4xKiosICoqMS4yKiosIGFuZCAqKjEuMy4xKiouIFZlcnNpb25zIDEuMAotYW5kIDEuMy4xIGFyZSBhY3RpdmVseSB1c2VkIGluIHByb2R1Y3Rpb24uIFN1cHBvcnQgZm9yIHZlcnNpb25zIDEuMSBhbmQgMS4yIGlzIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsLgorTG94aUdlbiBjdXJyZW50bHkgc3VwcG9ydHMgT3BlbkZsb3cgVmVyc2lvbnMgKioxLjAqKiwgKioxLjEqKiwgKioxLjIqKiwgYW5kICoqMS4zLjEqKiwgKioxLjQuMSoqLCBhbmQgKioxLjUuMSoqLgorVmVyc2lvbnMgMS4wLCAxLjMuMSBhbmQgMS40LjEgYXJlIGFjdGl2ZWx5IHVzZWQgaW4gcHJvZHVjdGlvbi4gU3VwcG9ydCBmb3IgdmVyc2lvbnMgMS4xIGFuZCAxLjIgaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwuCitTdXBwb3J0IGZvciAqKjEuNS4xKiogaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbCBhbmQgbGltaXRlZCB0byB0aGUgSmF2YSBiYWNrZW5kLgogCi1Mb3hpZ2VuIGlzIGZyZWUgYW5kIG9wZW4gc291cmNlIHNvZnR3YXJlLiBUaGUgTG94aWdlbiB0b29sIGl0c2VsZiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgW0VjbGlwc2UgUHVibGljIAotTGljZW5zZSwgIHZlcnNpb24gMS4wXShodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCkgKEVQTCksIHdpdGggYW4gZXhjZXB0aW9uIGFsbG93aW5nIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzIAotdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UgKGNvcHlyaWdodCBub3RpY2VzIG11c3QgYmUgcmV0YWluZWQsIHNlZSB0aGUgW2xveGlnZW4ucHldKGxveGlnZW4ucHkpIAorTG94aWdlbiBpcyBmcmVlIGFuZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZS4gVGhlIExveGlnZW4gdG9vbCBpdHNlbGYgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFtFY2xpcHNlIFB1YmxpYworTGljZW5zZSwgIHZlcnNpb24gMS4wXShodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCkgKEVQTCksIHdpdGggYW4gZXhjZXB0aW9uIGFsbG93aW5nIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSAoY29weXJpZ2h0IG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCwgc2VlIHRoZSBbbG94aWdlbi5weV0obG94aWdlbi5weSkKIGhlYWRlciBmb3IgZGV0YWlscy4pCiAKIApAQCAtNTYsOCArNTcsOCBAQAogbWFrZSBjCiBgYGAKIAotVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZSBgY2AsIGBweXRob25gIGFuZCBgamF2YWAuIFRoZXJlIGlzIGFuIAotZXhwZXJpbWVudGFsL3BhcnRpYWxseSBjb21wbGV0ZWQgYmFja2VuZCB0aGF0IGdlbmVyYXRlcyBhIGx1YSB3aXJlc2hhcmsgZGlzc2VjdG9yCitUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBsYW5ndWFnZXMgYXJlIGBjYCwgYHB5dGhvbmAgYW5kIGBqYXZhYC4gVGhlcmUgaXMgYW4KK2V4cGVyaW1lbnRhbCBiYWNrZW5kIHRoYXQgZ2VuZXJhdGVzIGEgbHVhIHdpcmVzaGFyayBkaXNzZWN0b3IKIChgd2lyZXNoYXJrYCkuCiAKIFRoZSBnZW5lcmF0ZWQgbGlicmFyaWVzIHdpbGwgYmUgdW5kZXIgdGhlIGBsb3hpX291dHB1dGAgZGlyZWN0b3J5LiBUaGlzIGNhbiBiZQpkaWZmIC0tZ2l0IGEvY19nZW4vYnVpbGRfb2ZfZy5weSBiL2NfZ2VuL2J1aWxkX29mX2cucHkKaW5kZXggYWNlMzg2ZC4uZDExZTYwZCAxMDA3NTUKLS0tIGEvY19nZW4vYnVpbGRfb2ZfZy5weQorKysgYi9jX2dlbi9idWlsZF9vZl9nLnB5CkBAIC0xNzIsMTAgKzE3MiwxMyBAQAogCiAgICAgZm9yIHZlcnNpb24gaW4gbG94aV9nbG9iYWxzLk9GVmVyc2lvbnMudGFyZ2V0X3ZlcnNpb25zOgogICAgICAgICB3aXJlX3ZlcnNpb24gPSB2ZXJzaW9uLndpcmVfdmVyc2lvbgotICAgICAgICB2ZXJzaW9uX25hbWUgPSBvZl9nLm9mX3ZlcnNpb25fd2lyZTJuYW1lW3dpcmVfdmVyc2lvbl0KLSAgICAgICAgb2ZfZy53aXJlX3Zlcl9tYXBbd2lyZV92ZXJzaW9uXSA9IHZlcnNpb25fbmFtZQotICAgICAgICB2ZXJzaW9uc1t2ZXJzaW9uX25hbWVdID0gZGljdCgKLSAgICAgICAgICAgIHZlcnNpb25fbmFtZSA9IHZlcnNpb25fbmFtZSwKKyAgICAgICAgbG9uZ19jb25zdGFudCA9IHZlcnNpb24uY29uc3RhbnRfdmVyc2lvbignT0ZfVkVSU0lPTl8nKQorICAgICAgICBvZl9nLndpcmVfdmVyX21hcFt3aXJlX3ZlcnNpb25dID0gbG9uZ19jb25zdGFudAorICAgICAgICBvZl9nLnNob3J0X3ZlcnNpb25fbmFtZXNbd2lyZV92ZXJzaW9uXSA9IHZlcnNpb24uc2hvcnRfY29uc3RhbnQKKyAgICAgICAgb2ZfZy5vZl92ZXJzaW9uX3JhbmdlLmFwcGVuZCh3aXJlX3ZlcnNpb24pCisgICAgICAgIG9mX2cub2ZfdmVyc2lvbl93aXJlMm5hbWVbd2lyZV92ZXJzaW9uXSA9IGxvbmdfY29uc3RhbnQKKyAgICAgICAgdmVyc2lvbnNbbG9uZ19jb25zdGFudF0gPSBkaWN0KAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lID0gdmVyc2lvbi5jb25zdGFudCwKICAgICAgICAgICAgIHdpcmVfdmVyc2lvbiA9IHdpcmVfdmVyc2lvbiwKICAgICAgICAgICAgIGNsYXNzZXMgPSB7fSkKICAgICAgICAgb2ZfZy5vcmRlcmVkX2NsYXNzZXNbd2lyZV92ZXJzaW9uXSA9IFtdCmRpZmYgLS1naXQgYS9jX2dlbi9jX21hdGNoLnB5IGIvY19nZW4vY19tYXRjaC5weQppbmRleCBjY2M1MDNkLi4yN2Y3N2I5IDEwMDY0NAotLS0gYS9jX2dlbi9jX21hdGNoLnB5CisrKyBiL2NfZ2VuL2NfbWF0Y2gucHkKQEAgLTU5NSw3ICs1OTUsNyBAQAogICAgIGlmIChPRl9WQVJJQUJMRV9JU19OT05fWkVSTygmZHN0LT5tYXNrcy4lKGtleSlzKSkgeyAvKiBNYXRjaGluZyBzb21ldGhpbmcgKi8KICAgICAgICAgb2ZfbWF0Y2hfdjJfJShrZXkpc19nZXQoc3JjLCAmZHN0LT5maWVsZHMuJShrZXkpcyk7CiAgICAgfQotICAgIG9mX21lbW1hc2soJmRzdC0+ZmllbGRzLiUoa2V5KXMsICZkc3QtPm1hc2tzLiUoa2V5KXMsIHNpemVvZigmZHN0LT5maWVsZHMuJShrZXkpcykpOworICAgIG9mX21lbW1hc2soJmRzdC0+ZmllbGRzLiUoa2V5KXMsICZkc3QtPm1hc2tzLiUoa2V5KXMsIHNpemVvZihkc3QtPmZpZWxkcy4lKGtleSlzKSk7CiAiIiIgJSBkaWN0KGt1PWtleS51cHBlcigpLCBrZXk9a2V5KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG91dC53cml0ZSgiIiIKQEAgLTY0OSw3ICs2NDksNyBAQAogICAgICAgICAgICAgb2Zfb3htXyUoa2V5KXNfbWFza2VkX3ZhbHVlX2dldCgKICAgICAgICAgICAgICAgICAmb3htX2VudHJ5LAogICAgICAgICAgICAgICAgICZkc3QtPmZpZWxkcy4lKGtleSlzKTsKLSAgICAgICAgICAgIG9mX21lbW1hc2soJmRzdC0+ZmllbGRzLiUoa2V5KXMsICZkc3QtPm1hc2tzLiUoa2V5KXMsIHNpemVvZigmZHN0LT5maWVsZHMuJShrZXkpcykpOworICAgICAgICAgICAgb2ZfbWVtbWFzaygmZHN0LT5maWVsZHMuJShrZXkpcywgJmRzdC0+bWFza3MuJShrZXkpcywgc2l6ZW9mKGRzdC0+ZmllbGRzLiUoa2V5KXMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE9GX09YTV8lKGt1KXM6CiAgICAgICAgICAgICBPRl9NQVRDSF9NQVNLXyUoa3Upc19FWEFDVF9TRVQoZHN0KTsKZGlmZiAtLWdpdCBhL2NfZ2VuL29mX2dfbGVnYWN5LnB5IGIvY19nZW4vb2ZfZ19sZWdhY3kucHkKaW5kZXggNGVlZDRkYS4uNzU4MDc3MSAxMDA2NDQKLS0tIGEvY19nZW4vb2ZfZ19sZWdhY3kucHkKKysrIGIvY19nZW4vb2ZfZ19sZWdhY3kucHkKQEAgLTMzMSwxMSArMzMxLDcgQEAKIG9mX3ZlcnNpb25fd2lyZTJuYW1lID0ge30KIAogZm9yIHZlcnNpb24gaW4gbG94aV9nbG9iYWxzLk9GVmVyc2lvbnMuYWxsX3N1cHBvcnRlZDoKLSAgICB2ID0gdmVyc2lvbi52ZXJzaW9uLnJlcGxhY2UoJy4nLCAnXycpCi0gICAgc2hvcnRfdmVyc2lvbl9uYW1lc1t2ZXJzaW9uLndpcmVfdmVyc2lvbl0gPSAnT0ZfJyArIHYKLSAgICBvZl92ZXJzaW9uX3JhbmdlLmFwcGVuZCh2ZXJzaW9uLndpcmVfdmVyc2lvbikKLSAgICBvZl92ZXJzaW9uX3dpcmUybmFtZVt2ZXJzaW9uLndpcmVfdmVyc2lvbl0gPSAnT0ZfVkVSU0lPTl8nICsgdgotICAgIGdsb2JhbHMoKVsnVkVSU0lPTl8nICsgdl0gPSB2ZXJzaW9uLndpcmVfdmVyc2lvbgorICAgIGdsb2JhbHMoKVt2ZXJzaW9uLmNvbnN0YW50XSA9IHZlcnNpb24ud2lyZV92ZXJzaW9uCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY19nZW4vdGVtcGxhdGVzL2xvY2l0ZXN0L3Rlc3RfdXRpbHMuYyBiL2NfZ2VuL3RlbXBsYXRlcy9sb2NpdGVzdC90ZXN0X3V0aWxzLmMKaW5kZXggZDA3OGE1OS4uYmE3OTMwNCAxMDA2NDQKLS0tIGEvY19nZW4vdGVtcGxhdGVzL2xvY2l0ZXN0L3Rlc3RfdXRpbHMuYworKysgYi9jX2dlbi90ZW1wbGF0ZXMvbG9jaXRlc3QvdGVzdF91dGlscy5jCkBAIC0xNTgsNiArMTU4LDMxIEBACiAgICAgcmV0dXJuIFRFU1RfUEFTUzsKIH0KIAorc3RhdGljIGludAordGVzdF90cnVuY2F0ZSh2b2lkKQoreworICAgIG9mX29iamVjdF90ICpvYmogPSBvZl9wb3J0X2Rlc2NfbmV3KE9GX1ZFUlNJT05fMV80KTsKKyAgICBvZl9vYmplY3RfdCAqZHVwID0gb2Zfb2JqZWN0X2R1cChvYmopOworCisgICAgb2Zfb2JqZWN0X3QgcHJvcHM7CisgICAgb2Zfb2JqZWN0X3QgcHJvcDsKKyAgICBvZl9wb3J0X2Rlc2NfcHJvcGVydGllc19iaW5kKG9iaiwgJnByb3BzKTsKKyAgICBvZl9wb3J0X2Rlc2NfcHJvcF9ic25fdXBsaW5rX2luaXQoJnByb3AsIHByb3BzLnZlcnNpb24sIC0xLCAxKTsKKyAgICBpZiAob2ZfbGlzdF9wb3J0X2Rlc2NfcHJvcF9hcHBlbmRfYmluZCgmcHJvcHMsICZwcm9wKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KKworICAgIG9mX29iamVjdF90cnVuY2F0ZShvYmopOworCisgICAgVEVTVF9BU1NFUlQob2JqLT53YnVmLT5jdXJyZW50X2J5dGVzID09IGR1cC0+d2J1Zi0+Y3VycmVudF9ieXRlcyk7CisgICAgVEVTVF9BU1NFUlQoIW1lbWNtcChvYmotPndidWYtPmJ1ZiwgZHVwLT53YnVmLT5idWYsIG9iai0+d2J1Zi0+Y3VycmVudF9ieXRlcykpOworCisgICAgb2Zfb2JqZWN0X2RlbGV0ZShvYmopOworICAgIG9mX29iamVjdF9kZWxldGUoZHVwKTsKKworICAgIHJldHVybiBURVNUX1BBU1M7Cit9CisKIGludAogcnVuX3V0aWxpdHlfdGVzdHModm9pZCkKIHsKQEAgLTE2NSw2ICsxOTAsNyBAQAogICAgIFJVTl9URVNUKG9mX29iamVjdF9uZXdfZnJvbV9tZXNzYWdlKTsKICAgICBSVU5fVEVTVChvZl9vYmplY3RfbmV3X2Zyb21fbWVzc2FnZV9wcmVhbGxvY2F0ZWQpOwogICAgIFJVTl9URVNUKGR1bXBfb2Jqcyk7CisgICAgUlVOX1RFU1QodHJ1bmNhdGUpOwogCiAgICAgcmV0dXJuIFRFU1RfUEFTUzsKIH0KZGlmZiAtLWdpdCBhL2NfZ2VuL3RlbXBsYXRlcy9vZl9vYmplY3QuYyBiL2NfZ2VuL3RlbXBsYXRlcy9vZl9vYmplY3QuYwppbmRleCAzODM2NzI4Li40OGRjMGE0IDEwMDY0NAotLS0gYS9jX2dlbi90ZW1wbGF0ZXMvb2Zfb2JqZWN0LmMKKysrIGIvY19nZW4vdGVtcGxhdGVzL29mX29iamVjdC5jCkBAIC02MTEsNCArNjExLDkgQEAKIHsKICAgICBvZl9vYmplY3RfaW5pdF9tYXBbb2JqLT5vYmplY3RfaWRdKG9iaiwgb2JqLT52ZXJzaW9uLCAtMSwgMCk7CiAgICAgb2JqLT53YnVmLT5jdXJyZW50X2J5dGVzID0gb2JqLT5sZW5ndGg7CisKKyAgICBvZl93aXJlX2xlbmd0aF9zZXRfZiB3aXJlX2xlbmd0aF9zZXQgPSBsb2NpX2NsYXNzX21ldGFkYXRhW29iai0+b2JqZWN0X2lkXS53aXJlX2xlbmd0aF9zZXQ7CisgICAgaWYgKHdpcmVfbGVuZ3RoX3NldCAhPSBOVUxMKSB7CisgICAgICAgIHdpcmVfbGVuZ3RoX3NldChvYmosIG9iai0+bGVuZ3RoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jbWRsaW5lLnB5IGIvY21kbGluZS5weQppbmRleCBkZTcwNzBhLi44ODhkN2YwIDEwMDY0NAotLS0gYS9jbWRsaW5lLnB5CisrKyBiL2NtZGxpbmUucHkKQEAgLTMzLDcgKzMzLDcgQEAKICMgVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IGZvciBMT1hJIGNvZGUgZ2VuZXJhdGlvbgogb3B0aW9uc19kZWZhdWx0ID0gewogICAgICJsYW5nIiAgICAgICAgICAgICAgIDogImMiLAotICAgICJ2ZXJzaW9uLWxpc3QiICAgICAgIDogIjEuMCAxLjEgMS4yIDEuMyAxLjQiLAorICAgICJ2ZXJzaW9uLWxpc3QiICAgICAgIDogIjEuMCAxLjEgMS4yIDEuMyAxLjQgMS41IiwKICAgICAiaW5zdGFsbC1kaXIiICAgICAgICA6ICJsb3hpX291dHB1dCIsCiB9CiAKZGlmZiAtLWdpdCBhL2RvY2tlci5zaCBiL2RvY2tlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2IyMTAxCi0tLSAvZGV2L251bGwKKysrIGIvZG9ja2VyLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL2Jhc2gKK2lmIFsgLXQgMSBdOyB0aGVuCisgICAgdHR5X2ZsYWc9Ii10IgorZWxzZQorICAgIHR0eV9mbGFnPSIiCitmaQorZGlyPSQocHl0aG9uIC1jICdpbXBvcnQgb3M7IGltcG9ydCBzeXM7IHByaW50IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlsxXSknICQoZGlybmFtZSAiJDAiKSkKK2RvY2tlciBydW4gLWkgJHR0eV9mbGFnIC0tcm0gLXYgJGRpcjovbG94aSBmbG9vZGxpZ2h0L2xveGktYnVpbGRlci11YnVudHUxNCAiJEAiCmRpZmYgLS1naXQgYS9kb2NrZXIvRG9ja2VyZmlsZSBiL2RvY2tlci9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmI1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NrZXIvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDggQEAKK0ZST00gdWJ1bnR1OjE0LjA0CisKK1JVTiBhcHQtZ2V0IHVwZGF0ZSBcCisgICYmIGFwdC1nZXQgdXBncmFkZSAteSAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyBidWlsZC1lc3NlbnRpYWwgcHl0aG9uIHB5dGhvbi1ub3NlIHJzeW5jIG9wZW5qZGstNy1qZGsgbWF2ZW4KKworUlVOIHVzZXJhZGQgLW0gLWQgL2xveGkgLWMgJ2xveGkgYnVpbGQgdXNlcicgLXUgMzAwIC1zIC9iaW4vYmFzaCBsb3hpCitDT1BZIHJ1bi1hcy1sb3hpIC8KK0VOVFJZUE9JTlQgWyAiL3J1bi1hcy1sb3hpIiBdCmRpZmYgLS1naXQgYS9kb2NrZXIvcnVuLWFzLWxveGkgYi9kb2NrZXIvcnVuLWFzLWxveGkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFlOWEzOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY2tlci9ydW4tYXMtbG94aQpAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vYmFzaCAtZQorCitsb3hpX3VpZD0kKHN0YXQgLWMnJXUnIC9sb3hpL2xveGlnZW4ucHkpCitsb3hpX2dpZD0kKHN0YXQgLWMnJWcnIC9sb3hpL2xveGlnZW4ucHkpCit1c2VybW9kIC11ICRsb3hpX3VpZCAtZyAkbG94aV9naWQgbG94aSB8fCBlY2hvICJvayIKKworY2QgL2xveGkKK2lmIFtbICIkKiIgXV07IHRoZW4KKyAgICBzdWRvIC11IGxveGkgLWkgL2Jpbi9iYXNoIC1jICIkKiIKK2Vsc2UKKyAgICBzdWRvIC11IGxveGkgLWkgL2Jpbi9iYXNoCitmaQorCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9qYXZhX21vZGVsLnB5IGIvamF2YV9nZW4vamF2YV9tb2RlbC5weQppbmRleCBjOGY3MGU2Li42YWFjMzljIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9qYXZhX21vZGVsLnB5CisrKyBiL2phdmFfZ2VuL2phdmFfbW9kZWwucHkKQEAgLTc0LDYgKzc0LDcgQEAKICAgICB3cml0ZV9ibGFja2xpc3QgPSBkZWZhdWx0ZGljdCgKICAgICAgICAgbGFtYmRhOiBzZXQoKSwKICAgICAgICAgT0ZPeG09c2V0KCgndHlwZUxlbicsKSksCisgICAgICAgIE9GT3hzPXNldCgoJ3R5cGVMZW4nLCkpLAogICAgICAgICBPRkFjdGlvbj1zZXQoKCd0eXBlJywpKSwKICAgICAgICAgT0ZJbnN0cnVjdGlvbj1zZXQoKCd0eXBlJywpKSwKICAgICAgICAgT0ZGbG93TW9kPXNldCgoJ2NvbW1hbmQnLCApKSwKQEAgLTgxLDcgKzgyLDcgQEAKICAgICAgICAgT0ZBY3Rpb25FeHBlcmltZW50ZXI9c2V0KCgnZGF0YScsKSksCiAgICAgICAgIE9GQnNuVGx2PXNldCgoJ3R5cGUnLCkpKQogICAgICMgaW50ZXJmYWNlcyB0aGF0IGFyZSB2aXJ0dWFsCi0gICAgdmlydHVhbF9pbnRlcmZhY2VzID0gc2V0KFsnT0ZPeG0nLCAnT0ZJbnN0cnVjdGlvbicsICdPRkZsb3dNb2QnLCAnT0ZCc25WcG9ydCcgXSkKKyAgICB2aXJ0dWFsX2ludGVyZmFjZXMgPSBzZXQoWydPRk94bScsICdPRkluc3RydWN0aW9uJywgJ09GRmxvd01vZCcsICdPRkJzblZwb3J0JywgJ09GT3hzJyBdKQogCiAgICAgIyBSZWdpc3RyeSBvZiBudWxsYWJsZSBwcm9wZXJ0aWVzOgogICAgICMgJHtqYXZhX2NsYXNzX25hbWV9IC0+IHNldCgke2phdmFfcHJvcGVydHlfbmFtZX0pCkBAIC0yMjMsMTMgKzIyNCwxMyBAQAogCiAgICAgICAgIGZhY3RvcmllcyA9IE9yZGVyZWREaWN0KCkKIAotICAgICAgICBzdWJfZmFjdG9yeV9jbGFzc2VzID0gKCJPRkFjdGlvbiIsICJPRkluc3RydWN0aW9uIiwgIk9GTWV0ZXJCYW5kIiwgIk9GT3htIiwgIk9GUXVldWVQcm9wIiwgIk9GRXJyb3JNc2ciLCAiT0ZBY3Rpb25JZCIsICJPRkluc3RydWN0aW9uSWQiLCAiT0ZCc25UbHYiKQorICAgICAgICBzdWJfZmFjdG9yeV9jbGFzc2VzID0gKCJPRkFjdGlvbiIsICJPRkluc3RydWN0aW9uIiwgIk9GTWV0ZXJCYW5kIiwgIk9GT3htIiwgIk9GUXVldWVQcm9wIiwgIk9GRXJyb3JNc2ciLCAiT0ZBY3Rpb25JZCIsICJPRkluc3RydWN0aW9uSWQiLCAiT0ZCc25UbHYiLCAiT0ZPeHMiKQogICAgICAgICBmb3IgYmFzZV9jbGFzcyBpbiBzdWJfZmFjdG9yeV9jbGFzc2VzOgogICAgICAgICAgICAgcGFja2FnZSA9IGJhc2VfY2xhc3NbMjpdLmxvd2VyKCkKICAgICAgICAgICAgIHJlbW92ZV9wcmVmaXggPSBiYXNlX2NsYXNzWzJdLmxvd2VyKCkgKyBiYXNlX2NsYXNzWzM6XQogCiAgICAgICAgICAgICAjIEhBQ0sgbmVlZCB0byBoYXZlIGEgYmV0dGVyIHdheSB0byBkZWFsIHdpdGggcGFyYW1ldGVyaXplZCBiYXNlIGNsYXNzZXMKLSAgICAgICAgICAgIGFubm90YXRlZF9iYXNlX2NsYXNzID0gYmFzZV9jbGFzcyArICI8Pz4iIGlmIGJhc2VfY2xhc3MgPT0gIk9GT3htIiBlbHNlIGJhc2VfY2xhc3MKKyAgICAgICAgICAgIGFubm90YXRlZF9iYXNlX2NsYXNzID0gYmFzZV9jbGFzcyArICI8Pz4iIGlmIGJhc2VfY2xhc3MgPT0gIk9GT3htIiBvciBiYXNlX2NsYXNzID09ICJPRk94cyIgZWxzZSBiYXNlX2NsYXNzCiAKICAgICAgICAgICAgIGZhY3Rvcmllc1tiYXNlX2NsYXNzXSA9IE9GRmFjdG9yeShwYWNrYWdlPSIlcy4lcyIgJSAocHJlZml4LCBwYWNrYWdlKSwKICAgICAgICAgICAgICAgICAgICAgbmFtZT1iYXNlX2NsYXNzICsgInMiLCBtZW1iZXJzPVtdLCByZW1vdmVfcHJlZml4PXJlbW92ZV9wcmVmaXgsIGJhc2VfY2xhc3M9YW5ub3RhdGVkX2Jhc2VfY2xhc3MsIHN1Yl9mYWN0b3JpZXM9e30sIHhpZF9nZW5lcmF0b3I9IChiYXNlX2NsYXNzID09ICJPRkVycm9yTXNnIikpCkBAIC0yNjgsNiArMjY5LDggQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIGNsYXp6LmludGVyZmFjZS5uYW1lLnN0YXJ0c3dpdGgoIk9GTWF0Y2hWIik6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBjbGF6ei5pbnRlcmZhY2UubmFtZS5zdGFydHN3aXRoKCJPRlN0YXRWIik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBlbGlmIGNsYXp6Lm5hbWUgPT0gIk9GVGFibGVNb2RWZXIxMCI6CiAgICAgICAgICAgICAjIHRhYmxlbW9kIHZlciAxMCBpcyBhIGhhY2sgYW5kIGhhcyBubyBvZnR5cGUgZGVmaW5lZAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0yNzksNiArMjgyLDggQEAKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIGxveGlfdXRpbHMuY2xhc3NfaXNfaW5zdHJ1Y3Rpb24oY2xhenouaW50ZXJmYWNlLmNfbmFtZSk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBsb3hpX3V0aWxzLmNsYXNzX2lzX294cyhjbGF6ei5pbnRlcmZhY2UuY19uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yOTEsNiArMjk2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrZWQ9b3htLmlyX2NsYXNzLm5hbWUuZW5kc3dpdGgoIl9tYXNrZWQiKSkpCiAgICAgICAgICAgICAgICAgICBmb3Igb3htIGluIHNlbGYuaW50ZXJmYWNlcyBpZiBveG0uaXJfY2xhc3MuaXNfc3ViY2xhc3NvZigib2Zfb3htIikgKQogCisgICAgQHByb3BlcnR5CisgICAgQG1lbW9pemUKKyAgICBkZWYgb3hzX21hcChzZWxmKToKKyAgICAgICAgT3hzTWFwRW50cnkgPSBuYW1lZHR1cGxlKCJPeHNNYXBFbnRyeSIsIFsidHlwZV9uYW1lIiwgInZhbHVlIiwgIm1hc2tlZCIgXSkKKyAgICAgICAgcmV0dXJuIE9yZGVyZWREaWN0KCAob3hzLm5hbWUsIE94c01hcEVudHJ5KHR5cGVfbmFtZT1veHMubWVtYmVyX2J5X25hbWUoInZhbHVlIikuamF2YV90eXBlLnB1YmxpY190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9cmUuc3ViKHInXm9mX294c18nLCByJycsIHJlLnN1YihyJ19tYXNrZWQkJywgcicnLCBveHMuaXJfY2xhc3MubmFtZSkpLnVwcGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrZWQ9b3hzLmlyX2NsYXNzLm5hbWUuZW5kc3dpdGgoIl9tYXNrZWQiKSkpCisgICAgICAgICAgICAgICAgICBmb3Igb3hzIGluIHNlbGYuaW50ZXJmYWNlcyBpZiBveHMuaXJfY2xhc3MuaXNfc3ViY2xhc3NvZigib2Zfb3hzIikgKQorCiBjbGFzcyBPRkZhY3RvcnkobmFtZWR0dXBsZSgiT0ZGYWN0b3J5IiwgKCJwYWNrYWdlIiwgIm5hbWUiLCAibWVtYmVycyIsICJyZW1vdmVfcHJlZml4IiwgImJhc2VfY2xhc3MiLCAic3ViX2ZhY3RvcmllcyIsICJ4aWRfZ2VuZXJhdG9yIikpKToKICAgICBAcHJvcGVydHkKICAgICBkZWYgZmFjdG9yeV9jbGFzc2VzKHNlbGYpOgpAQCAtNDY3LDYgKzQ4MSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnN0cnVjdGlvbmlkIgogICAgICAgICAgICAgZWxpZiBpLmlzX2luc3RhbmNlb2YoIm9mX294bSIpOgogICAgICAgICAgICAgICAgIHJldHVybiAib3htIgorICAgICAgICAgICAgZWxpZiBpLmlzX2luc3RhbmNlb2YoIm9mX294cyIpOgorICAgICAgICAgICAgICAgIHJldHVybiAib3hzIgogICAgICAgICAgICAgZWxpZiBpLmlzX2luc3RhbmNlb2YoIm9mX21ldGVyX2JhbmQiKToKICAgICAgICAgICAgICAgICByZXR1cm4gIm1ldGVyYmFuZCIKICAgICAgICAgICAgIGVsaWYgaS5pc19pbnN0YW5jZW9mKCJvZl9xdWV1ZV9wcm9wIik6CkBAIC00NzksNiArNDk1LDggQEAKICAgICAgICAgZGVmIGNhbGNfc3VwZXJfbmFtZShpKToKICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCdvZl9tYXRjaF8uKicsIGkubmFtZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJNYXRjaCIKKyAgICAgICAgICAgIGVsaWYgcmUubWF0Y2goJ29mX3N0YXRfLionLCBpLm5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiAiU3RhdCIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaXJfc3VwZXJfY2xhc3MgPSBzZWxmLmlyX2NsYXNzLnN1cGVyY2xhc3MKICAgICAgICAgICAgICAgICByZXR1cm4gamF2YV9jbGFzc19uYW1lKGlyX3N1cGVyX2NsYXNzLm5hbWUpIGlmIGlyX3N1cGVyX2NsYXNzIGVsc2UgIiIKQEAgLTUwMSwxMiArNTE5LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIHR5cGVfYW5ub3RhdGlvbikKICAgICAgICAgZWxpZiBzZWxmLm5hbWUgPT0gIk9GT3htIjoKICAgICAgICAgICAgIHJldHVybiAocGFja2FnZSwgTm9uZSwgIlQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPiIpCisgICAgICAgIGVsaWYgc2VsZi5uYW1lID09ICJPRk94cyI6CisgICAgICAgICAgICByZXR1cm4gKHBhY2thZ2UsIE5vbmUsICJUIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8VD4iKQogICAgICAgICBlbGlmIGxveGlfdXRpbHMuY2xhc3NfaXNfb3htKHNlbGYuY19uYW1lKToKICAgICAgICAgICAgICMgbG9vayB1cCB0eXBlIGZyb20gbWVtYmVyIHZhbHVlIGZvciBPRlZhbHVlVHlwZSB0eXBlIGFubm90YXRpb24KICAgICAgICAgICAgIGlmIHNlbGYubWVtYmVyX2J5X25hbWUoInZhbHVlIikgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIChwYWNrYWdlLCAiT0ZPeG08JXM+IiAlIHNlbGYubWVtYmVyX2J5X25hbWUoInZhbHVlIikuamF2YV90eXBlLnB1YmxpY190eXBlLCBOb25lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gKHBhY2thZ2UsICJPRk94bSIsIE5vbmUpCisgICAgICAgIGVsaWYgbG94aV91dGlscy5jbGFzc19pc19veHMoc2VsZi5jX25hbWUpOgorICAgICAgICAgICAgIyBsb29rIHVwIHR5cGUgZnJvbSBtZW1iZXIgdmFsdWUgZm9yIE9GVmFsdWVUeXBlIHR5cGUgYW5ub3RhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi5tZW1iZXJfYnlfbmFtZSgidmFsdWUiKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHBhY2thZ2UsICJPRk94czwlcz4iICUgc2VsZi5tZW1iZXJfYnlfbmFtZSgidmFsdWUiKS5qYXZhX3R5cGUucHVibGljX3R5cGUsIE5vbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAocGFja2FnZSwgIk9GT3hzIiwgTm9uZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiAocGFja2FnZSwgc3VwZXJfbmFtZSwgTm9uZSkKIApAQCAtNTcxLDYgKzU5NywxMSBAQAogICAgICAgICAgICAgICAgICAgICBKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAibWFza2VkIiwgamF2YV90eXBlLmJvb2xlYW4pLAogICAgICAgICAgICAgICAgICAgICBKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAiY2Fub25pY2FsIiwgamF2YV90eXBlLm1ha2Vfb3htX2p0eXBlKCJUIikpCiAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBlbGlmIHNlbGYubmFtZSA9PSAiT0ZPeHMiOgorICAgICAgICAgICAgdmlydHVhbF9tZW1iZXJzICs9IFsKKyAgICAgICAgICAgICAgICAgICAgSmF2YVZpcnR1YWxNZW1iZXIoc2VsZiwgInZhbHVlIiwgamF2YV90eXBlLmdlbmVyaWNfdCksCisgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJzdGF0RmllbGQiLCBqYXZhX3R5cGUubWFrZV9zdGF0X2ZpZWxkX2p0eXBlKCJUIikpLAorICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZWxpZiBzZWxmLmlyX2NsYXNzLmlzX3N1YmNsYXNzb2YoIm9mX294bSIpOgogICAgICAgICAgICAgdmFsdWUgPSBmaW5kKGxhbWJkYSBtOiBtLm5hbWU9PSJ2YWx1ZSIsIHNlbGYuaXJfbW9kZWxfbWVtYmVycykKICAgICAgICAgICAgIGlmIHZhbHVlOgpAQCAtNTg3LDYgKzYxOCwyMiBAQAogICAgICAgICAgICAgaWYgbm90IGZpbmQobGFtYmRhIHg6IHgubmFtZSA9PSAibWFzayIsIHNlbGYuaXJfbW9kZWxfbWVtYmVycyk6CiAgICAgICAgICAgICAgICAgdmlydHVhbF9tZW1iZXJzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJtYXNrIiwgZmluZChsYW1iZGEgeDogeC5uYW1lID09ICJ2YWx1ZSIsIHNlbGYuaXJfbW9kZWxfbWVtYmVycykuamF2YV90eXBlKSkKKyAgICAgICAgZWxpZiBzZWxmLmlyX2NsYXNzLmlzX3N1YmNsYXNzb2YoIm9mX294cyIpOgorICAgICAgICAgICAgdmFsdWUgPSBmaW5kKGxhbWJkYSBtOiBtLm5hbWU9PSJ2YWx1ZSIsIHNlbGYuaXJfbW9kZWxfbWVtYmVycykKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIGZpZWxkX3R5cGUgPSBqYXZhX3R5cGUubWFrZV9zdGF0X2ZpZWxkX2p0eXBlKHZhbHVlLmphdmFfdHlwZS5wdWJsaWNfdHlwZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRfdHlwZSA9IGphdmFfdHlwZS5tYWtlX3N0YXRfZmllbGRfanR5cGUoKQorCisgICAgICAgICAgICB2aXJ0dWFsX21lbWJlcnMgKz0gWworICAgICAgICAgICAgICAgICAgICBKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAic3RhdEZpZWxkIiwgZmllbGRfdHlwZSksCisgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJtYXNrZWQiLCBqYXZhX3R5cGUuYm9vbGVhbiksCisgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJjYW5vbmljYWwiLCBqYXZhX3R5cGUubWFrZV9veHNfanR5cGUodmFsdWUuamF2YV90eXBlLnB1YmxpY190eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fdGVtcGxhdGU9bGFtYmRhIGJ1aWxkZXI6ICJPRk94c3t9X2dldENhbm9uaWNhbC5qYXZhIi5mb3JtYXQoIi5CdWlsZGVyIiBpZiBidWlsZGVyIGVsc2UgIiIpKSwKKyAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICBpZiBub3QgZmluZChsYW1iZGEgeDogeC5uYW1lID09ICJtYXNrIiwgc2VsZi5pcl9tb2RlbF9tZW1iZXJzKToKKyAgICAgICAgICAgICAgICB2aXJ0dWFsX21lbWJlcnMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgSmF2YVZpcnR1YWxNZW1iZXIoc2VsZiwgIm1hc2siLCBmaW5kKGxhbWJkYSB4OiB4Lm5hbWUgPT0gInZhbHVlIiwgc2VsZi5pcl9tb2RlbF9tZW1iZXJzKS5qYXZhX3R5cGUpKQogICAgICAgICBlbGlmIHNlbGYubmFtZSA9PSJPRkVycm9yTXNnIjoKICAgICAgICAgICAgIHZpcnR1YWxfbWVtYmVycyArPSBbIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJkYXRhIiwgamF2YV90eXBlLmVycm9yX2NhdXNlX2RhdGEpIF0KIApAQCAtNzIwLDYgKzc2NywxOSBAQAogICAgICAgICAgICAgICAgICAgICBKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAibWF0Y2hGaWVsZCIsIGphdmFfdHlwZS5tYWtlX21hdGNoX2ZpZWxkX2p0eXBlKCksICJudWxsIiksCiAgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJtYXNrZWQiLCBqYXZhX3R5cGUuYm9vbGVhbiwgImZhbHNlIiksCiAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZWxpZiBzZWxmLmlyX2NsYXNzLmlzX3N1YmNsYXNzb2YoIm9mX294cyIpOgorICAgICAgICAgICAgdmFsdWVfbWVtYmVyID0gZmluZChsYW1iZGEgbTogbS5uYW1lLCBzZWxmLmlyX21vZGVsX21lbWJlcnMpCisgICAgICAgICAgICBpZiB2YWx1ZV9tZW1iZXI6CisgICAgICAgICAgICAgICAgb3hzX2VudHJ5ID0gbW9kZWwub3hzX21hcFtzZWxmLmludGVyZmFjZS5uYW1lXQorICAgICAgICAgICAgICAgIHZpcnR1YWxfbWVtYmVycyArPSBbCisgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJzdGF0RmllbGQiLCBqYXZhX3R5cGUubWFrZV9zdGF0X2ZpZWxkX2p0eXBlKHZhbHVlX21lbWJlci5qYXZhX3R5cGUucHVibGljX3R5cGUpLCAiU3RhdEZpZWxkLiVzIiAlIG94c19lbnRyeS52YWx1ZSksCisgICAgICAgICAgICAgICAgICAgIEphdmFWaXJ0dWFsTWVtYmVyKHNlbGYsICJtYXNrZWQiLCBqYXZhX3R5cGUuYm9vbGVhbiwgInRydWUiIGlmIG94c19lbnRyeS5tYXNrZWQgZWxzZSAiZmFsc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2aXJ0dWFsX21lbWJlcnMgKz0gWworICAgICAgICAgICAgICAgICAgICBKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAic3RhdEZpZWxkIiwgamF2YV90eXBlLm1ha2Vfc3RhdF9maWVsZF9qdHlwZSgpLCAibnVsbCIpLAorICAgICAgICAgICAgICAgICAgICBKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAibWFza2VkIiwgamF2YV90eXBlLmJvb2xlYW4sICJmYWxzZSIpLAorICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGlmIG5vdCBmaW5kKGxhbWJkYSBtOiBtLm5hbWUgPT0gInZlcnNpb24iLCBzZWxmLmlyX21vZGVsX21lbWJlcnMpOgogICAgICAgICAgICAgdmlydHVhbF9tZW1iZXJzLmFwcGVuZChKYXZhVmlydHVhbE1lbWJlcihzZWxmLCAidmVyc2lvbiIsIGphdmFfdHlwZS5vZl92ZXJzaW9uLCAiT0ZWZXJzaW9uLiVzIiAlIHNlbGYudmVyc2lvbi5jb25zdGFudF92ZXJzaW9uKSkKIApAQCAtODkwLDYgKzk1MCwxNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuamF2YV90eXBlLmZvcm1hdF92YWx1ZShzZWxmLm1lbWJlci52YWx1ZSwgcHViX3R5cGU9RmFsc2UpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmVlZHNfc2V0dGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX3dyaXRlYWJsZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHN1cGVyX2NsYXNzID0gc2VsZi5tc2cuc3VwZXJfY2xhc3MKKyAgICAgICAgaWYgc3VwZXJfY2xhc3M6CisgICAgICAgICAgICBzdXBlcl9tZW1iZXIgPSBzdXBlcl9jbGFzcy5tZW1iZXJfYnlfbmFtZShzZWxmLm5hbWUpCisgICAgICAgICAgICBpZiBzdXBlcl9tZW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyX21lbWJlci5uZWVkc19zZXR0ZXIKKyAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfd3JpdGVhYmxlKHNlbGYpOgpAQCAtMTAzNywxMSArMTEwNywxMSBAQAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi50ZXN0X2NsYXNzX25hbWUKLSAgICAKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpbnRlcmZhY2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmphdmFfY2xhc3MuaW50ZXJmYWNlCi0gICAgCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgaGFzX3Rlc3RfZGF0YShzZWxmKToKICAgICAgICAgcmV0dXJuIHRlc3RfZGF0YS5leGlzdHMoc2VsZi5kYXRhX2ZpbGVfbmFtZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL2phdmFfdHlwZS5weSBiL2phdmFfZ2VuL2phdmFfdHlwZS5weQppbmRleCBhNTBiZmE5Li5kNTAwOTRmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9qYXZhX3R5cGUucHkKKysrIGIvamF2YV9nZW4vamF2YV90eXBlLnB5CkBAIC04OCw3ICs4OCw3IEBACiBjbGFzcyBKVHlwZShvYmplY3QpOgogICAgICIiIiBXcmFwcGVyIGNsYXNzIHRvIGhvbGQgQyB0byBKYXZhIHR5cGUgY29udmVyc2lvbiBpbmZvcm1hdGlvbi4gSlR5cGVzIGNhbiBoYXZlIGEgJ3B1YmxpYycKICAgICAgICAgYW5kIG9yICdwcml2YXRlJyBqYXZhIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIGNhbiBkZWZpbmUgaG93IHRob3NlIHR5cGVzIGNhbiBiZQotICAgICAgICByZWFkIGZyb20gYW5kIHdyaXR0ZW4gdG8gQ2hhbm5lbEJ1ZmZlcnMuCisgICAgICAgIHJlYWQgZnJvbSBhbmQgd3JpdHRlbiB0byBCeXRlQnVmcy4KIAogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwdWJfdHlwZSwgcHJpdl90eXBlPU5vbmUpOgpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmVkdWNlKGxhbWJkYSBhLHJlcGw6IGEucmVwbGFjZSgiJCVzIiAlIHJlcGxbMF0sIHN0cihyZXBsWzFdKSksICBhcmd1bWVudHMuaXRlbXMoKSwgX29wKQogCiAgICAgZGVmIHJlYWRfb3Aoc2VsZiwgdmVyc2lvbj1Ob25lLCBsZW5ndGg9Tm9uZSwgcHViX3R5cGU9VHJ1ZSk6Ci0gICAgICAgICIiIiByZXR1cm4gYSBKYXZhIHN0YW56YSB0aGF0IHJlYWRzIGEgdmFsdWUgb2YgdGhpcyBKVHlwZSBmcm9tIENoYW5uZWxCdWZmZXIgYmIuCisgICAgICAgICIiIiByZXR1cm4gYSBKYXZhIHN0YW56YSB0aGF0IHJlYWRzIGEgdmFsdWUgb2YgdGhpcyBKVHlwZSBmcm9tIEJ5dGVCdWYgYmIuCiAgICAgICAgIEBwYXJhbSB2ZXJzaW9uIGludCAtIE9GIHdpcmUgdmVyc2lvbiB0byBnZW5lcmF0ZSBleHByZXNzaW9uIGZvcgogICAgICAgICBAcGFyYW0gcHViX3R5cGUgYm9vbGVhbiB1c2UgdGhpcyBKVHlwZXMgJ3B1YmxpYycgKFRydWUpLCBvciBwcml2YXRlIChGYWxzZSkgcmVwcmVzZW50YXRpb24KICAgICAgICAgQHBhcmFtIGxlbmd0aCBzdHJpbmcsIGZvciBvcGVyYXRpb25zIHRoYXQgbmVlZCBpdCAoZS5nLiwgcmVhZCBhIGxpc3Qgb2YgdW5rbm93biBsZW5ndGgpCkBAIC0xODQsNyArMTg0LDcgQEAKIAogICAgIGRlZiB3cml0ZV9vcChzZWxmLCB2ZXJzaW9uPU5vbmUsIG5hbWU9Tm9uZSwgcHViX3R5cGU9VHJ1ZSk6CiAgICAgICAgICIiIiByZXR1cm4gYSBKYXZhIHN0YW56YSB0aGF0IHdyaXRlcyBhIHZhbHVlIG9mIHRoaXMgSlR5cGUgY29udGFpbmVkIGluIEphdmEgZXhwcmVzc2lvbgotICAgICAgICAnbmFtZScgdG8gQ2hhbm5lbEJ1ZmZlciBiYi4KKyAgICAgICAgJ25hbWUnIHRvIEJ5dGVCdWYgYmIuCiAgICAgICAgIEBwYXJhbSBuYW1lIHN0cmluZyBjb250YWluaW5nIEphdmEgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRpb25zIHRvIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuCiAgICAgICAgIEBwYXJhbSB2ZXJzaW9uIGludCAtIE9GIHdpcmUgdmVyc2lvbiB0byBnZW5lcmF0ZSBleHByZXNzaW9uIGZvcgogICAgICAgICBAcGFyYW0gcHViX3R5cGUgYm9vbGVhbiB1c2UgdGhpcyBKVHlwZXMgJ3B1YmxpYycgKFRydWUpLCBvciBwcml2YXRlIChGYWxzZSkgcmVwcmVzZW50YXRpb24KQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICApCiAKICAgICBkZWYgc2tpcF9vcChzZWxmLCB2ZXJzaW9uPU5vbmUsIGxlbmd0aD1Ob25lKToKLSAgICAgICAgIiIiIHJldHVybiBhIGphdmEgc3RhbnphIHRoYXQgc2tpcHMgYW4gaW5zdGFuY2Ugb2YgSlR5cGUgaW4gdGhlIGlucHV0IENoYW5uZWxCdWZmZXIgJ2JiJy4KKyAgICAgICAgIiIiIHJldHVybiBhIGphdmEgc3RhbnphIHRoYXQgc2tpcHMgYW4gaW5zdGFuY2Ugb2YgSlR5cGUgaW4gdGhlIGlucHV0IEJ5dGVCdWYgJ2JiJy4KICAgICAgICAgICAgIFRoaXMgaXMgdXNlZCBpbiB0aGUgUmVhZGVyIGltcGxlbWVudGF0aW9ucyBmb3IgdmlydHVhbCBjbGFzc2VzIChiZWNhdXNlIGFmdGVyIHRoZQogICAgICAgICAgICAgZGlzY3JpbWluYXRvciBmaWVsZCwgdGhlIGNvbmNyZXRlIFJlYWRlciBpbnN0YW5jZSB3aWxsIHJlLXJlYWQgYWxsIHRoZSBmaWVsZHMpCiAgICAgICAgICAgICBDdXJyZW50bHkganVzdCBkZWxlZ2F0ZXMgdG8gcmVhZF9vcCArIHRocm93cyBhd2F5IHRoZSByZXN1bHQuIiIiCkBAIC0yNTksNyArMjU5LDcgQEAKIAogZGVmIGdlbl9saXN0X2p0eXBlKGphdmFfYmFzZV9uYW1lKToKICAgICAjIHJlYWQgb3AgYXNzdW1lcyB0aGUgY2xhc3MgaGFzIGEgcHVibGljIGZpbmFsIHN0YXRpYyBmaWVsZCBSRUFERVIgdGhhdCBpbXBsZW1lbnRzCi0gICAgIyBPRk1lc3NhZ2VSZWFkZXI8JGNsYXNzPiBpLmUuLCBjYW4gZGVzZXJpYWxpemUgYW4gaW5zdGFuY2Ugb2YgY2xhc3MgZnJvbSBhIENoYW5uZWxCdWZmZXIKKyAgICAjIE9GTWVzc2FnZVJlYWRlcjwkY2xhc3M+IGkuZS4sIGNhbiBkZXNlcmlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBjbGFzcyBmcm9tIGEgQnl0ZUJ1ZgogICAgICMgd3JpdGUgb3AgYXNzdW1lcyBjbGFzcyBpbXBsZW1lbnRzIFdyaXRlYWJsZQogICAgIHJldHVybiBKVHlwZSgiTGlzdDx7fT4iLmZvcm1hdChqYXZhX2Jhc2VfbmFtZSkpIFwKICAgICAgICAgLm9wKApAQCAtMzQ5LDYgKzM0OSwxMSBAQAogICAgICAgICAub3AocmVhZD0nQ2hhbm5lbFV0aWxzVmVyJHZlcnNpb24ucmVhZE9GTWF0Y2goYmIpJywgXAogICAgICAgICAgICAgd3JpdGU9JyRuYW1lLndyaXRlVG8oYmIpJywKICAgICAgICAgICAgIGRlZmF1bHQ9Ik9GRmFjdG9yeVZlciR2ZXJzaW9uLk1BVENIX1dJTERDQVJEX0FMTCIpOworb2Zfc3RhdCA9IEpUeXBlKCdTdGF0JykgXAorICAgICAgICAgLm9wKHJlYWQ9J0NoYW5uZWxVdGlsc1ZlciR2ZXJzaW9uLnJlYWRPRlN0YXQoYmIpJywgd3JpdGU9JyRuYW1lLndyaXRlVG8oYmIpJykKK29mX3RpbWUgPSBKVHlwZSgnT0ZUaW1lJykgXAorICAgICAgICAgLm9wKHJlYWQ9J09GVGltZVZlciR2ZXJzaW9uLlJFQURFUi5yZWFkRnJvbShiYiknLCBcCisgICAgICAgICAgICAgd3JpdGU9JyRuYW1lLndyaXRlVG8oYmIpJykKIGdyb3VwX21vZF9jbWQgPSBKVHlwZSgnT0ZHcm91cE1vZENvbW1hbmQnLCAnc2hvcnQnKSBcCiAgICAgICAgIC5vcCh2ZXJzaW9uPUFOWSwgcmVhZD0iYmIucmVhZFNob3J0KCkiLCB3cml0ZT0iYmIud3JpdGVTaG9ydCgkbmFtZSkiKQogZmxvd19tb2RfY21kID0gSlR5cGUoJ09GRmxvd01vZENvbW1hbmQnLCAnc2hvcnQnKSBcCkBAIC0zNTgsNiArMzYzLDE1IEBACiAgICAgICAgIC5vcChyZWFkPSJNYWNBZGRyZXNzLnJlYWQ2Qnl0ZXMoYmIpIiwgXAogICAgICAgICAgICAgd3JpdGU9IiRuYW1lLndyaXRlNkJ5dGVzKGJiKSIsCiAgICAgICAgICAgICBkZWZhdWx0PSJNYWNBZGRyZXNzLk5PTkUiKQordnhsYW5fbmkgPSBKVHlwZSgnVnhsYW5OSScpIFwKKyAgICAgICAgLm9wKHJlYWQ9IlZ4bGFuTkkucmVhZDRCeXRlcyhiYikiLCBcCisgICAgICAgICAgICB3cml0ZT0iJG5hbWUud3JpdGU0Qnl0ZXMoYmIpIiwKKyAgICAgICAgICAgIGRlZmF1bHQ9IlZ4bGFuTkkuWkVSTyIpCisKK3ZmaSA9IEpUeXBlKCdWRkknKSBcCisgICAgICAgIC5vcChyZWFkPSJWRkkucmVhZDJCeXRlcyhiYikiLCBcCisgICAgICAgICAgICB3cml0ZT0iJG5hbWUud3JpdGUyQnl0ZXMoYmIpIiwKKyAgICAgICAgICAgIGRlZmF1bHQ9IlZGSS5aRVJPIikKIAogcG9ydF9uYW1lID0gZ2VuX2ZpeGVkX2xlbmd0aF9zdHJpbmdfanR5cGUoMTYpCiBhcHBfY29kZSA9IGdlbl9maXhlZF9sZW5ndGhfc3RyaW5nX2p0eXBlKDE1KQpAQCAtNDMyLDYgKzQ0Niw5IEBACiAgICAgICAgIC5vcChyZWFkPSJJUHY2Rmxvd0xhYmVsLnJlYWQ0Qnl0ZXMoYmIpIiwKICAgICAgICAgICAgIHdyaXRlPSIkbmFtZS53cml0ZTRCeXRlcyhiYikiLAogICAgICAgICAgICAgZGVmYXVsdD0iSVB2NkZsb3dMYWJlbC5OT05FIikKK3BhY2tldF90eXBlID0gSlR5cGUoIlBhY2tldFR5cGUiKSBcCisgICAgICAgIC5vcChyZWFkPSJQYWNrZXRUeXBlLnJlYWQ0Qnl0ZXMoYmIpIiwKKyAgICAgICAgICAgIHdyaXRlPSIkbmFtZS53cml0ZTRCeXRlcyhiYikiKQogbWV0YWRhdGEgPSBKVHlwZSgiT0ZNZXRhZGF0YSIpXAogICAgICAgICAub3AocmVhZD0iT0ZNZXRhZGF0YS5yZWFkOEJ5dGVzKGJiKSIsCiAgICAgICAgICAgICB3cml0ZT0iJG5hbWUud3JpdGU4Qnl0ZXMoYmIpIiwKQEAgLTQ0NCw2ICs0NjEsMTcgQEAKICAgICAgICAgICAgIHJlYWQ9ICdPRk94bUxpc3QucmVhZEZyb20oYmIsICRsZW5ndGgsIE9GT3htVmVyJHZlcnNpb24uUkVBREVSKScsIFwKICAgICAgICAgICAgIHdyaXRlPSckbmFtZS53cml0ZVRvKGJiKScsCiAgICAgICAgICAgICBkZWZhdWx0PSJPRk94bUxpc3QuRU1QVFkiKQorY29ubmVjdGlvbl91cmkgPSBKVHlwZSgiT0ZDb25uZWN0aW9uSW5kZXgiKSBcCisgICAgICAgIC5vcChyZWFkPSJPRkNvbm5lY3Rpb25JbmRleC5yZWFkNEJ5dGVzKGJiKSIsCisgICAgICAgICAgICB3cml0ZT0iJG5hbWUud3JpdGU0Qnl0ZXMoYmIpIikKKyNGaXhlZCBWZXIxNSAoRklYTUUgZm9yIDEuNSArIHZlcnNpb25zKQorb3hzID0gSlR5cGUoIk9GT3hzPD8+IilcCisgICAgICAgIC5vcChyZWFkPSJPRk94c1ZlcjE1LlJFQURFUi5yZWFkRnJvbShiYikiLAorICAgICAgICAgICAgd3JpdGU9IiRuYW1lLndyaXRlVG8oYmIpIikKK294c19saXN0ID0gSlR5cGUoIk9GT3hzTGlzdCIpIFwKKyAgICAgICAgLm9wKHJlYWQ9ICdPRk94c0xpc3QucmVhZEZyb20oYmIsICRsZW5ndGgsIE9GT3hzVmVyMTUuUkVBREVSKScsIFwKKyAgICAgICAgICAgIHdyaXRlPSckbmFtZS53cml0ZVRvKGJiKScsCisgICAgICAgICAgICBkZWZhdWx0PSJPRk94c0xpc3QuRU1QVFkiKQogbWV0ZXJfZmVhdHVyZXMgPSBKVHlwZSgiT0ZNZXRlckZlYXR1cmVzIilcCiAgICAgICAgIC5vcChyZWFkPSJPRk1ldGVyRmVhdHVyZXNWZXIkdmVyc2lvbi5SRUFERVIucmVhZEZyb20oYmIpIiwKICAgICAgICAgICAgIHdyaXRlPSIkbmFtZS53cml0ZVRvKGJiKSIpCkBAIC00ODUsNiArNTEzLDcgQEAKICAgICAgICAgICAgIC5vcChyZWFkPSdiYi5yZWFkQnl0ZSgpJywgd3JpdGU9J2JiLndyaXRlQnl0ZSgkbmFtZSknKQogCiBwb3J0X3NwZWVkID0gSlR5cGUoIlBvcnRTcGVlZCIpCisKIGVycm9yX3R5cGUgPSBKVHlwZSgiT0ZFcnJvclR5cGUiKQogb2ZfbWVzc2FnZSA9IEpUeXBlKCJPRk1lc3NhZ2UiKVwKICAgICAgICAgICAgIC5vcChyZWFkPSJPRk1lc3NhZ2VWZXIkdmVyc2lvbi5SRUFERVIucmVhZEZyb20oYmIpIiwKQEAgLTU2NCw2ICs1OTMsOSBAQAogICAgICAgICAub3AocmVhZD0nT0ZUYWJsZURlc2NWZXIkdmVyc2lvbi5SRUFERVIucmVhZEZyb20oYmIpJywgXAogICAgICAgICAgICAgd3JpdGU9JyRuYW1lLndyaXRlVG8oYmIpJykKIAorY29udHJvbGxlcl9zdGF0dXNfZW50cnkgPSBKVHlwZSgnT0ZDb250cm9sbGVyU3RhdHVzRW50cnknKSBcCisgICAgICAgIC5vcChyZWFkPSdPRkNvbnRyb2xsZXJTdGF0dXNFbnRyeVZlciR2ZXJzaW9uLlJFQURFUi5yZWFkRnJvbShiYiknLCBcCisgICAgICAgICAgICB3cml0ZT0nJG5hbWUud3JpdGVUbyhiYiknKQogCiBkZWZhdWx0X210eXBlX3RvX2p0eXBlX2NvbnZlcnRfbWFwID0gewogICAgICAgICAndWludDhfdCcgOiB1OCwKQEAgLTU4MSwxMCArNjEzLDEzIEBACiAgICAgICAgICdsaXN0KG9mX3VpbnQxNl90KScgOiB1MTZfbGlzdCwKICAgICAgICAgJ2xpc3Qob2ZfdWludDhfdCknIDogdThfbGlzdCwKICAgICAgICAgJ2xpc3Qob2Zfb3htX3QpJyA6IG94bV9saXN0LAorICAgICAgICAnbGlzdChvZl9veHNfdCknIDogb3hzX2xpc3QsCiAgICAgICAgICdsaXN0KG9mX2lwdjRfdCknIDogaXB2NF9saXN0LAogICAgICAgICAnbGlzdChvZl9pcHY2X3QpJyA6IGlwdjZfbGlzdCwKICAgICAgICAgJ29mX29jdGV0c190JyA6IG9jdGV0cywKICAgICAgICAgJ29mX21hdGNoX3QnOiBvZl9tYXRjaCwKKyAgICAgICAgJ29mX3N0YXRfdCcgOiBvZl9zdGF0LAorICAgICAgICAnb2ZfY29udHJvbGxlcl91cmlfdCcgOiBjb25uZWN0aW9uX3VyaSwKICAgICAgICAgJ29mX2ZtX2NtZF90JzogZmxvd19tb2RfY21kLAogICAgICAgICAnb2ZfbWFjX2FkZHJfdCc6IG1hY19hZGRyLAogICAgICAgICAnb2ZfcG9ydF9kZXNjX3QnOiBwb3J0X2Rlc2MsCkBAIC02MDAsNiArNjM1LDcgQEAKICAgICAgICAgJ29mX2lwdjZfdCc6IGlwdjYsCiAgICAgICAgICdvZl93Y19ibWFwX3QnOiBmbG93X3dpbGRjYXJkcywKICAgICAgICAgJ29mX294bV90Jzogb3htLAorICAgICAgICAnb2Zfb3hzX3QnOiBveHMsCiAgICAgICAgICdvZl9tZXRlcl9mZWF0dXJlc190JzogbWV0ZXJfZmVhdHVyZXMsCiAgICAgICAgICdvZl9iaXRtYXBfMTI4X3QnOiBwb3J0X2JpdG1hcF8xMjgsCiAgICAgICAgICdvZl9iaXRtYXBfMjU2X3QnOiBwb3J0X2JpdG1hcF8yNTYsCkBAIC02MTEsNiArNjQ3LDkgQEAKICAgICAgICAgJ29mX3RhYmxlX2Rlc2NfdCc6IHRhYmxlX2Rlc2MsCiAgICAgICAgICdvZl9vZHVfc2lnX2lkX3QnOiBvZHVfc2lnX2lkLAogICAgICAgICAnb2Zfb2NoX3NpZ19pZF90JyA6IHNpZ19pZCwKKyAgICAgICAgJ29mX2NvbnRyb2xsZXJfc3RhdHVzX2VudHJ5X3QnIDogY29udHJvbGxlcl9zdGF0dXNfZW50cnksCisgICAgICAgICdvZl90aW1lX3QnIDogb2ZfdGltZSwKKyAgICAgICAgJ29mX2hlYWRlcl90JyA6IG9mX21lc3NhZ2UsCiAgICAgICAgIH0KIAogIyMgTWFwIHRoYXQgZGVmaW5lcyBleGNlcHRpb25zIGZyb20gdGhlIHN0YW5kYXJkIGxveGktPmphdmEgbWFwcGluZyBzY2hlbWUKQEAgLTY3OSw2ICs3MTgsMjEgQEAKICAgICAgICAgJ29mX294bV9jb25udHJhY2tfbGFiZWwnIDogeyAndmFsdWUnIDogcG9ydF9iaXRtYXBfMTI4IH0sCiAgICAgICAgICdvZl9veG1fY29ubnRyYWNrX2xhYmVsX21hc2tlZCcgOiB7ICd2YWx1ZScgOiBwb3J0X2JpdG1hcF8xMjgsICd2YWx1ZV9tYXNrJyA6IHBvcnRfYml0bWFwXzEyOCB9LAogCisgICAgICAgICdvZl9veG1fdGNwX2ZsYWdzJyA6IHsgJ3ZhbHVlJyA6IHUxNm9iaiB9LAorICAgICAgICAnb2Zfb3htX3RjcF9mbGFnc19tYXNrZWQnIDogeyAndmFsdWUnIDogdTE2b2JqLCAndmFsdWVfbWFzaycgOiB1MTZvYmogfSwKKyAgICAgICAgJ29mX294bV9vdnNfdGNwX2ZsYWdzJyA6IHsgJ3ZhbHVlJyA6IHUxNm9iaiB9LAorICAgICAgICAnb2Zfb3htX292c190Y3BfZmxhZ3NfbWFza2VkJyA6IHsgJ3ZhbHVlJyA6IHUxNm9iaiwgJ3ZhbHVlX21hc2snIDogdTE2b2JqIH0sCisgICAgICAgICdvZl9veG1fYWN0c2V0X291dHB1dCcgOiB7ICd2YWx1ZScgOiBvZl9wb3J0IH0sCisgICAgICAgICdvZl9veG1fYWN0c2V0X291dHB1dF9tYXNrZWQnIDogeyAndmFsdWUnIDogb2ZfcG9ydCwgJ3ZhbHVlX21hc2snIDogb2ZfcG9ydCB9LAorICAgICAgICAnb2Zfb3htX3BhY2tldF90eXBlJyA6IHsgJ3ZhbHVlJyA6IHBhY2tldF90eXBlIH0sCisgICAgICAgICdvZl9veG1fcGFja2V0X3R5cGVfbWFza2VkJyA6IHsgJ3ZhbHVlJyA6IHBhY2tldF90eXBlLCAndmFsdWVfbWFzaycgOiBwYWNrZXRfdHlwZSB9LAorCisgICAgICAgICdvZl9veHNfYnl0ZV9jb3VudCcgOiB7ICd2YWx1ZScgOiB1NjQgfSwKKyAgICAgICAgJ29mX294c19kdXJhdGlvbicgOiB7ICd2YWx1ZScgOiB1NjQgfSwKKyAgICAgICAgJ29mX294c19mbG93X2NvdW50JyA6IHsgJ3ZhbHVlJyA6IHUzMm9iaiB9LAorICAgICAgICAnb2Zfb3hzX2lkbGVfdGltZScgOiB7ICd2YWx1ZScgOiB1NjQgfSwKKyAgICAgICAgJ29mX294c19wYWNrZXRfY291bnQnIDogeyAndmFsdWUnIDogdTY0IH0sCisKICAgICAgICAgJ29mX294bV9ic25faW5fcG9ydHNfMTI4JyA6IHsgJ3ZhbHVlJzogcG9ydF9iaXRtYXBfMTI4IH0sCiAgICAgICAgICdvZl9veG1fYnNuX2luX3BvcnRzXzEyOF9tYXNrZWQnIDogeyAndmFsdWUnOiBwb3J0X2JpdG1hcF8xMjgsICd2YWx1ZV9tYXNrJzogcG9ydF9iaXRtYXBfMTI4IH0sCiAKQEAgLTc0NSw4ICs3OTksOCBAQAogICAgICAgICAnb2Zfb3htX2Jzbl9sMl9jYWNoZV9oaXQnIDogeyAndmFsdWUnIDogYm9vbGVhbl92YWx1ZSB9LAogICAgICAgICAnb2Zfb3htX2Jzbl9sMl9jYWNoZV9oaXRfbWFza2VkJyA6IHsgJ3ZhbHVlJyA6IGJvb2xlYW5fdmFsdWUsICd2YWx1ZV9tYXNrJyA6IGJvb2xlYW5fdmFsdWUgfSwKIAotICAgICAgICAnb2Zfb3htX2Jzbl92eGxhbl9uZXR3b3JrX2lkJyA6IHsgJ3ZhbHVlJyA6IHUzMm9iaiB9LAotICAgICAgICAnb2Zfb3htX2Jzbl92eGxhbl9uZXR3b3JrX2lkX21hc2tlZCcgOiB7ICd2YWx1ZScgOiB1MzJvYmosICd2YWx1ZV9tYXNrJyA6IHUzMm9iaiB9LAorICAgICAgICAnb2Zfb3htX2Jzbl92eGxhbl9uZXR3b3JrX2lkJyA6IHsgJ3ZhbHVlJyA6IHZ4bGFuX25pIH0sCisgICAgICAgICdvZl9veG1fYnNuX3Z4bGFuX25ldHdvcmtfaWRfbWFza2VkJyA6IHsgJ3ZhbHVlJyA6IHZ4bGFuX25pLCAndmFsdWVfbWFzaycgOiB2eGxhbl9uaX0sCiAKICAgICAgICAgJ29mX294bV9ic25faW5uZXJfZXRoX2RzdCcgOiB7ICd2YWx1ZScgOiBtYWNfYWRkciB9LAogICAgICAgICAnb2Zfb3htX2Jzbl9pbm5lcl9ldGhfZHN0X21hc2tlZCcgOiB7ICd2YWx1ZScgOiBtYWNfYWRkciwgJ3ZhbHVlX21hc2snIDogbWFjX2FkZHIgfSwKQEAgLTc1Nyw2ICs4MTEsMTIgQEAKICAgICAgICAgJ29mX294bV9ic25faW5uZXJfdmxhbl92aWQnIDogeyAndmFsdWUnIDogdmxhbl92aWRfbWF0Y2ggfSwKICAgICAgICAgJ29mX294bV9ic25faW5uZXJfdmxhbl92aWRfbWFza2VkJyA6IHsgJ3ZhbHVlJyA6IHZsYW5fdmlkX21hdGNoLCAndmFsdWVfbWFzaycgOiB2bGFuX3ZpZF9tYXRjaCB9LAogCisgICAgICAgICdvZl9veG1fYnNuX3ZmaScgOiB7ICd2YWx1ZScgOiB2ZmkgfSwKKyAgICAgICAgJ29mX294bV9ic25fdmZpX21hc2tlZCcgOiB7ICd2YWx1ZScgOiB2ZmksICd2YWx1ZV9tYXNrJyA6IHZmaSB9LAorCisgICAgICAgICdvZl9veG1fYnNuX2lwX2ZyYWdtZW50YXRpb24nIDogeyAndmFsdWUnIDogYm9vbGVhbl92YWx1ZSB9LAorICAgICAgICAnb2Zfb3htX2Jzbl9pcF9mcmFnbWVudGF0aW9uX21hc2tlZCcgOiB7ICd2YWx1ZScgOiBib29sZWFuX3ZhbHVlLCAndmFsdWVfbWFzaycgOiBib29sZWFuX3ZhbHVlIH0sCisKICAgICAgICAgJ29mX3RhYmxlX3N0YXRzX2VudHJ5JzogeyAnd2lsZGNhcmRzJzogdGFibGVfc3RhdHNfd2lsZGNhcmRzIH0sCiAgICAgICAgICdvZl9tYXRjaF92MSc6IHsgJ3ZsYW5fdmlkJyA6IHZsYW5fdmlkX21hdGNoLCAndmxhbl9wY3AnOiB2bGFuX3BjcCwKICAgICAgICAgICAgICAgICAnZXRoX3R5cGUnOiBldGhfdHlwZSwgJ2lwX2RzY3AnOiBpcF9kc2NwLCAnaXBfcHJvdG8nOiBpcF9wcm90bywKQEAgLTc4Nyw2ICs4NDcsOCBAQAogICAgICAgICAnb2ZfZ3JvdXBfYWRkJyA6IHsgJ2NvbW1hbmQnIDogZ3JvdXBfbW9kX2NtZCB9LAogICAgICAgICAnb2ZfZ3JvdXBfbW9kaWZ5JyA6IHsgJ2NvbW1hbmQnIDogZ3JvdXBfbW9kX2NtZCB9LAogICAgICAgICAnb2ZfZ3JvdXBfZGVsZXRlJyA6IHsgJ2NvbW1hbmQnIDogZ3JvdXBfbW9kX2NtZCB9LAorICAgICAgICAnb2ZfZ3JvdXBfaW5zZXJ0X2J1Y2tldCc6IHsnY29tbWFuZCcgOiBncm91cF9tb2RfY21kIH0sCisgICAgICAgICdvZl9ncm91cF9yZW1vdmVfYnVja2V0JyA6IHsnY29tbWFuZCcgOiBncm91cF9tb2RfY21kIH0sCiAKICAgICAgICAgJ29mX2J1Y2tldCcgOiB7ICd3YXRjaF9ncm91cCc6IG9mX2dyb3VwIH0sCiAKQEAgLTg4MSw3ICs5NDMsNyBAQAogICAgICAgICAnb2Zfb3htX3R1bl9ncGVfZmxhZ3MnIDogeyAndmFsdWUnIDogdThvYmogfSwKICAgICAgICAgJ29mX294bV90dW5fZ3BlX2ZsYWdzX21hc2tlZCcgOiB7ICd2YWx1ZScgOiB1OG9iaiwgJ3ZhbHVlX21hc2snIDogdThvYmogfSwKIAotICAgICAgICAnb2Zfb3htX29mZHBhX21wbHNfdHlwZSc6IHsgJ3ZhbHVlJzogdTE2b2JqIH0sCisgICAgICAgICdvZl9veG1fb2ZkcGFfbXBsc190eXBlJyA6IHsgJ3ZhbHVlJzogdTE2b2JqIH0sCiAKICAgICAgICAgJ29mX294bV9vZmRwYV9xb3NfaW5kZXgnOiB7ICd2YWx1ZSc6IHU4b2JqIH0sCiAKQEAgLTg4OSw2ICs5NTEsOCBAQAogICAgICAgICAnb2Zfb3htX29mZHBhX21wbHNfbDJfcG9ydF9tYXNrZWQnOiB7ICd2YWx1ZSc6IHUzMm9iaiwgJ3ZhbHVlX21hc2snOiB1MzJvYmogfSwKIAogICAgICAgICAnb2Zfb3htX29mZHBhX292aWQnOiB7ICd2YWx1ZSc6IHUxNm9iaiB9LAorCisgICAgICAgICdvZl9mbG93X2xpZ2h0d2VpZ2h0X3N0YXRzX3JlcXVlc3QnIDogeyAnb3V0X2dyb3VwJyA6IG9mX2dyb3VwIH0KIH0KIAogCkBAIC05MDMsOSArOTY3LDE1IEBACiBkZWYgbWFrZV9tYXRjaF9maWVsZF9qdHlwZShzdWJfdHlwZV9uYW1lPSI/Iik6CiAgICAgcmV0dXJuIEpUeXBlKCJNYXRjaEZpZWxkPHt9PiIuZm9ybWF0KHN1Yl90eXBlX25hbWUpKQogCitkZWYgbWFrZV9zdGF0X2ZpZWxkX2p0eXBlKHN1Yl90eXBlX25hbWU9Ij8iKToKKyAgICByZXR1cm4gSlR5cGUoIlN0YXRGaWVsZDx7fT4iLmZvcm1hdChzdWJfdHlwZV9uYW1lKSkKKwogZGVmIG1ha2Vfb3htX2p0eXBlKHN1Yl90eXBlX25hbWU9Ij8iKToKICAgICByZXR1cm4gSlR5cGUoIk9GT3htPHt9PiIuZm9ybWF0KHN1Yl90eXBlX25hbWUpKQogCitkZWYgbWFrZV9veHNfanR5cGUoc3ViX3R5cGVfbmFtZT0iPyIpOgorICAgIHJldHVybiBKVHlwZSgiT0ZPeHM8e30+Ii5mb3JtYXQoc3ViX3R5cGVfbmFtZSkpCisKIGRlZiBsaXN0X2NuYW1lX3RvX2phdmFfbmFtZShjX3R5cGUpOgogICAgIG0gPSByZS5tYXRjaChyJ2xpc3RcKG9mXyhbYS16QS1aX10rKV90XCknLCBjX3R5cGUpCiAgICAgaWYgbm90IG06CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9wb20ueG1sIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vcG9tLnhtbAppbmRleCBjYzZkYTZiLi5hMDQ3ZjFkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9wb20ueG1sCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3BvbS54bWwKQEAgLTEwLDExICsxMCwxMSBAQAogCiAgICAgPGdyb3VwSWQ+b3JnLm9ub3Nwcm9qZWN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9wZW5mbG93ajwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4wLjkuOS5vbm9zLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjMuMi4wLm9ub3MtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KIAogICAgIDxuYW1lPk9wZW5GbG93Si1Mb3hpPC9uYW1lPgotICAgIDxkZXNjcmlwdGlvbj5PcGVuRmxvd0ogQVBJIHN1cHBvcnRpbmcgT3BlbkZsb3cgdmVyc2lvbnMgMS4wIHRocm91Z2ggMS4zLjEsIGdlbmVyYXRlZCBieSBMb3hpR2VuPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+T3BlbkZsb3dKIEFQSSBzdXBwb3J0aW5nIE9wZW5GbG93IHZlcnNpb25zIDEuMCB0aHJvdWdoIDEuNS4xLCBnZW5lcmF0ZWQgYnkgTG94aUdlbjwvZGVzY3JpcHRpb24+CiAgICAgPHVybD5odHRwOi8vd3d3LnByb2plY3RmbG9vZGxpZ2h0Lm9yZy9wcm9qZWN0cy88L3VybD4KICAgICA8bGljZW5zZXM+CiAgICAgICAgIDxsaWNlbnNlPgpAQCAtNDUsOCArNDUsNyBAQAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuY29kZS5maW5kYnVnczwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFubm90YXRpb25zPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4wLjA8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICAgICAgPHZlcnNpb24+My4wLjF1MjwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgpAQCAtNjIsMTggKzYxLDI4IEBACiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5pby5uZXR0eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm5ldHR5PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4xMC41LkZpbmFsPC92ZXJzaW9uPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV0dHktYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC4wLjMxLkZpbmFsPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5ndWF2YTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1YXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MTkuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIwLjA8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjcuMTM8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjcuMjI8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jaC5xb3MubG9nYmFjazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvZ2JhY2stY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNoLnFvcy5sb2diYWNrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nYmFjay1jbGFzc2ljPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4xLjEwPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPGJ1aWxkPgpAQCAtMTM1LDYgKzE0NCw5IEBACiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1heG1lbW9yeT4xMDI0bTwvbWF4bWVtb3J5PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hdHRhY2gtamF2YWRvY3M8L2lkPgpAQCAtMjQzLDYgKzI1NSwxOCBAQAogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgPHZlcnNpb24+My4wLjE8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG5pY2VNYW5pZmVzdD50cnVlPC9uaWNlTWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb21waWxlLXRpbWUgZGVwZW5kZW5jeSBjYW4gYmUgb3B0aW9uYWwtLT4KKyAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFueSBHdWF2YSB2ZXJzaW9uIDIwLjAgb3IgbGF0ZXItLT4KKyAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LmFubm90YXRpb247cmVzb2x1dGlvbjo9b3B0aW9uYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5nb29nbGUuKjt2ZXJzaW9uPTIwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgogICAgICAgICA8cmVzb3VyY2VzPgpAQCAtMjc3LDYgKzMwMSw5IEBACiAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1heG1lbW9yeT4xMDI0bTwvbWF4bWVtb3J5PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgogICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hdHRhY2gtamF2YWRvY3M8L2lkPgpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZNZXNzYWdlUmVhZGVyLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk1lc3NhZ2VSZWFkZXIuamF2YQppbmRleCA4ODM3ODY3Li5jYTI4ZGFmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk1lc3NhZ2VSZWFkZXIuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk1lc3NhZ2VSZWFkZXIuamF2YQpAQCAtMSw4ICsxLDggQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIAogcHVibGljIGludGVyZmFjZSBPRk1lc3NhZ2VSZWFkZXI8VD4gewotICAgIFQgcmVhZEZyb20oQ2hhbm5lbEJ1ZmZlciBiYikgdGhyb3dzIE9GUGFyc2VFcnJvcjsKKyAgICBUIHJlYWRGcm9tKEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3I7CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk1lc3NhZ2VXcml0ZXIuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL09GTWVzc2FnZVdyaXRlci5qYXZhCmluZGV4IGJlYzU2MzQuLjU4OTBjZTMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL09GTWVzc2FnZVdyaXRlci5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL09GTWVzc2FnZVdyaXRlci5qYXZhCkBAIC0xLDggKzEsOCBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2w7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCiBwdWJsaWMgaW50ZXJmYWNlIE9GTWVzc2FnZVdyaXRlcjxUPiB7Ci0gICAgcHVibGljIHZvaWQgd3JpdGUoQ2hhbm5lbEJ1ZmZlciBiYiwgVCBtZXNzYWdlKSB0aHJvd3MgT0ZQYXJzZUVycm9yOworICAgIHB1YmxpYyB2b2lkIHdyaXRlKEJ5dGVCdWYgYmIsIFQgbWVzc2FnZSkgdGhyb3dzIE9GUGFyc2VFcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL09GT2JqZWN0RmFjdG9yeS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZPYmplY3RGYWN0b3J5LmphdmEKaW5kZXggYzU4NjllZi4uYTgyOWIyMiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZPYmplY3RGYWN0b3J5LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZPYmplY3RGYWN0b3J5LmphdmEKQEAgLTEsNyArMSw3IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbDsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogcHVibGljIGludGVyZmFjZSBPRk9iamVjdEZhY3Rvcnk8VCBleHRlbmRzIE9GT2JqZWN0PiB7Ci0gICAgVCByZWFkKENoYW5uZWxCdWZmZXIgYnVmZmVyKTsKKyAgICBUIHJlYWQoQnl0ZUJ1ZiBidWZmZXIpOwogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZPeG1MaXN0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk94bUxpc3QuamF2YQppbmRleCA3ZjY2MTEwLi41YjEzZGE4IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk94bUxpc3QuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk94bUxpc3QuamF2YQpAQCAtNCw3ICs0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm1hdGNoLk1hdGNoRmllbGQ7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm1hdGNoLk1hdGNoRmllbGRzOwpAQCAtOTcsMTMgKzk3LDEzIEBACiAgICAgICAgIHJldHVybiBuZXcgT0ZPeG1MaXN0KG1hcCk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRk94bUxpc3QgcmVhZEZyb20oQ2hhbm5lbEJ1ZmZlciBiYiwgaW50IGxlbmd0aCwKKyAgICBwdWJsaWMgc3RhdGljIE9GT3htTGlzdCByZWFkRnJvbShCeXRlQnVmIGJiLCBpbnQgbGVuZ3RoLAogICAgICAgICAgICAgT0ZNZXNzYWdlUmVhZGVyPE9GT3htPD8+PiByZWFkZXIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gb2ZMaXN0KENoYW5uZWxVdGlscy5yZWFkTGlzdChiYiwgbGVuZ3RoLCByZWFkZXIpKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVRvKENoYW5uZWxCdWZmZXIgYmIpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvKEJ5dGVCdWYgYmIpIHsKICAgICAgICAgZm9yIChPRk94bTw/PiBvIDogdGhpcykgewogICAgICAgICAgICAgby53cml0ZVRvKGJiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZPeHNMaXN0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9PRk94c0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTExMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZPeHNMaXN0LmphdmEKQEAgLTAsMCArMSwxNDAgQEAKK3BhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sOworCitpbXBvcnQgamF2YS51dGlsLkVudW1NYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm94cy5PRk94czsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuc3RhdC5TdGF0RmllbGQ7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLnN0YXQuU3RhdEZpZWxkczsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuT0ZWYWx1ZVR5cGU7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzLlByaW1pdGl2ZVNpbmthYmxlOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy51dGlsLkNoYW5uZWxVdGlsczsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVNYXA7CitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CisKKworcHVibGljIGNsYXNzIE9GT3hzTGlzdCBpbXBsZW1lbnRzIEl0ZXJhYmxlPE9GT3hzPD8+PiwgV3JpdGVhYmxlLCBQcmltaXRpdmVTaW5rYWJsZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKE9GT3hzTGlzdC5jbGFzcyk7CisKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdGF0RmllbGRzLCBPRk94czw/Pj4gb3hzTWFwOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBPRk94c0xpc3QgRU1QVFkgPSBuZXcgT0ZPeHNMaXN0KEltbXV0YWJsZU1hcC48U3RhdEZpZWxkcywgT0ZPeHM8Pz4+b2YoKSk7CisKKyAgICBwcml2YXRlIE9GT3hzTGlzdChNYXA8U3RhdEZpZWxkcywgT0ZPeHM8Pz4+IG94c01hcCkgeworICAgICAgICB0aGlzLm94c01hcCA9IG94c01hcDsKKyAgICB9CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBwdWJsaWMgPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPj4gT0ZPeHM8VD4gZ2V0KFN0YXRGaWVsZDxUPiBzdGF0RmllbGQpIHsKKyAgICAgICAgcmV0dXJuIChPRk94czxUPikgb3hzTWFwLmdldChzdGF0RmllbGQuaWQpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0YXRGaWVsZHMsIE9GT3hzPD8+PiBveHNNYXA7CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIoKSB7CisgICAgICAgICAgICBveHNNYXAgPSBuZXcgRW51bU1hcDxTdGF0RmllbGRzLCBPRk94czw/Pj4oU3RhdEZpZWxkcy5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlcihFbnVtTWFwPFN0YXRGaWVsZHMsIE9GT3hzPD8+PiBveHNNYXApIHsKKyAgICAgICAgICAgIHRoaXMub3hzTWFwID0gb3hzTWFwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIDxUIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8VD4+IHZvaWQgc2V0KE9GT3hzPFQ+IG94cykgeworICAgICAgICAgICAgb3hzTWFwLnB1dChveHMuZ2V0U3RhdEZpZWxkKCkuaWQsIG94cyk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPj4gdm9pZCB1bnNldChTdGF0RmllbGQ8VD4gc3RhdEZpZWxkKSB7CisgICAgICAgICAgICBveHNNYXAucmVtb3ZlKHN0YXRGaWVsZC5pZCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgT0ZPeHNMaXN0IGJ1aWxkKCkgeworICAgICAgICAgICAgcmV0dXJuIE9GT3hzTGlzdC5vZkxpc3Qob3hzTWFwLnZhbHVlcygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYXRvcjxPRk94czw/Pj4gaXRlcmF0b3IoKSB7CisgICAgICAgIHJldHVybiBveHNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE9GT3hzTGlzdCBvZkxpc3QoSXRlcmFibGU8T0ZPeHM8Pz4+IG94c0xpc3QpIHsKKyAgICAgICAgTWFwPFN0YXRGaWVsZHMsIE9GT3hzPD8+PiBtYXAgPSBuZXcgRW51bU1hcDxTdGF0RmllbGRzLCBPRk94czw/Pj4oCisgICAgICAgICAgICAgICAgU3RhdEZpZWxkcy5jbGFzcyk7CisgICAgICAgIGZvciAoT0ZPeHM8Pz4gbyA6IG94c0xpc3QpIHsKKyAgICAgICAgICAgIG1hcC5wdXQoby5nZXRTdGF0RmllbGQoKS5pZCwgbyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBPRk94c0xpc3QobWFwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE9GT3hzTGlzdCBvZihPRk94czw/Pi4uLiBveHNzKSB7CisgICAgICAgIE1hcDxTdGF0RmllbGRzLCBPRk94czw/Pj4gbWFwID0gbmV3IEVudW1NYXA8U3RhdEZpZWxkcywgT0ZPeHM8Pz4+KAorICAgICAgICAgICAgICAgIFN0YXRGaWVsZHMuY2xhc3MpOworICAgICAgICBmb3IgKE9GT3hzPD8+IG8gOiBveHNzKSB7CisgICAgICAgICAgICBtYXAucHV0KG8uZ2V0U3RhdEZpZWxkKCkuaWQsIG8pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgT0ZPeHNMaXN0KG1hcCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBPRk94c0xpc3QgcmVhZEZyb20oQnl0ZUJ1ZiBiYiwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgIE9GTWVzc2FnZVJlYWRlcjxPRk94czw/Pj4gcmVhZGVyKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcmV0dXJuIG9mTGlzdChDaGFubmVsVXRpbHMucmVhZExpc3QoYmIsIGxlbmd0aCwgcmVhZGVyKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGJiKSB7CisgICAgICAgIGZvciAoT0ZPeHM8Pz4gbyA6IHRoaXMpIHsKKyAgICAgICAgICAgIG8ud3JpdGVUbyhiYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgT0ZPeHNMaXN0LkJ1aWxkZXIgY3JlYXRlQnVpbGRlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPRk94c0xpc3QuQnVpbGRlcihuZXcgRW51bU1hcDxTdGF0RmllbGRzLCBPRk94czw/Pj4ob3hzTWFwKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7CisgICAgICAgIGludCByZXN1bHQgPSAxOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICgob3hzTWFwID09IG51bGwpID8gMCA6IG94c01hcC5oYXNoQ29kZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgICBpZiAodGhpcyA9PSBvYmopCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9iaiA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT0ZPeHNMaXN0IG90aGVyID0gKE9GT3hzTGlzdCkgb2JqOworICAgICAgICBpZiAob3hzTWFwID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChvdGhlci5veHNNYXAgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoIW94c01hcC5lcXVhbHMob3RoZXIub3hzTWFwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuICJPRk94c0xpc3QiICsgb3hzTWFwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHB1dFRvKFByaW1pdGl2ZVNpbmsgc2luaykgeworICAgICAgICBmb3IgKE9GT3hzPD8+IG8gOiB0aGlzKSB7CisgICAgICAgICAgICBvLnB1dFRvKHNpbmspOworICAgICAgICB9CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL09GVmVyc2lvbi5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZWZXJzaW9uLmphdmEKaW5kZXggMGM1NGZkYy4uY2NiN2Y2OCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZWZXJzaW9uLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvT0ZWZXJzaW9uLmphdmEKQEAgLTEsNyArMSw3IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbDsKIAogcHVibGljIGVudW0gT0ZWZXJzaW9uIHsKLSAgICBPRl8xMCgxKSwgT0ZfMTEoMiksIE9GXzEyKDMpLCBPRl8xMyg0KSwgT0ZfMTQoNSk7CisgICAgT0ZfMTAoMSksIE9GXzExKDIpLCBPRl8xMigzKSwgT0ZfMTMoNCksIE9GXzE0KDUpLCBPRl8xNSg2KTsKIAogICAgIHB1YmxpYyBmaW5hbCBpbnQgd2lyZVZlcnNpb247CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL1dyaXRlYWJsZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvV3JpdGVhYmxlLmphdmEKaW5kZXggMzFhZTlhYi4uMzJhYWYyYiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvV3JpdGVhYmxlLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvV3JpdGVhYmxlLmphdmEKQEAgLTEsNyArMSw3IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbDsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogcHVibGljIGludGVyZmFjZSBXcml0ZWFibGUgewotICAgIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKTsKKyAgICB2b2lkIHdyaXRlVG8oQnl0ZUJ1ZiBiYik7CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2guamF2YQppbmRleCA2NzUxM2I5Li5mZGQxY2E3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEKQEAgLTU2LDYgKzU2LDcgQEAKICAgICAgKiA8L3VsPgogICAgICAqIElmIG9uZSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBkb2VzIG5vdCBob2xkLCByZXR1cm5zIG51bGwuIFZhbHVlIGlzIHJldHVybmVkIG1hc2tlZCBpZiBwYXJ0aWFsbHkgd2lsZGNhcmRlZC4KICAgICAgKgorICAgICAqIEBwYXJhbSA8Rj4gTWF0Y2hGaWVsZCB0eXBlCiAgICAgICogQHBhcmFtIGZpZWxkIE1hdGNoIGZpZWxkIHRvIHJldHJpZXZlCiAgICAgICogQHJldHVybiBWYWx1ZSBvZiBtYXRjaCBmaWVsZCAobWF5IGJlIG1hc2tlZCksIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIGZpZWxkIGlzIG9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBkb2VzIG5vdCBob2xkLgogICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gSWYgZmllbGQgaXMgbm90IHN1cHBvcnRlZC4KQEAgLTY3LDYgKzY4LDcgQEAKICAgICAgKiBQcmVyZXF1aXNpdGU6IGZpZWxkIGlzIHBhcnRpYWxseSBtYXNrZWQuCiAgICAgICogSWYgcHJlcmVxdWlzaXRlIGlzIG5vdCBtZXQsIGEgPGNvZGU+bnVsbDwvY29kZT4gaXMgcmV0dXJuZWQuCiAgICAgICoKKyAgICAgKiBAcGFyYW0gPEY+IE1hdGNoRmllbGQgdHlwZQogICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZCB0byByZXRyaWV2ZS4KICAgICAgKiBAcmV0dXJuIE1hc2tlZCB2YWx1ZSBvZiBtYXRjaCBmaWVsZCBvciBudWxsIGlmIG5vIG1hc2sgaXMgc2V0LgogICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gSWYgZmllbGQgaXMgbm90IHN1cHBvcnRlZC4KQEAgLTEyOCw3ICsxMzAsNyBAQAogICAgICAqIG1hdGNoLiBUaGlzIGluY2x1ZGVzIHRoZSBtYXRjaCBmaWVsZHMgdGhhdCBhcmUgZXhhY3Qgb3IgbWFza2VkIG1hdGNoCiAgICAgICogKGJ1dCBub3QgZnVsbHkgd2lsZGNhcmRlZCkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCisgICAgICogQHJldHVybiB0aGUgSXRlcmFibGUgb2YgTWF0Y2hGaWVsZAogICAgICAqLwogICAgIHB1YmxpYyBJdGVyYWJsZTxNYXRjaEZpZWxkPD8+PiBnZXRNYXRjaEZpZWxkcygpOwogCkBAIC0xNjksNiArMTcxLDcgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFNldHMgYSBzcGVjaWZpYyBleGFjdCB2YWx1ZSBmb3IgYSBmaWVsZC4KICAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIDxGPiBNYXRjaEZpZWxkIGFuZCB2YWx1ZSB0eXBlCiAgICAgICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZCB0byBzZXQuCiAgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiBtYXRjaCBmaWVsZC4KICAgICAgICAgICogQHJldHVybiB0aGUgQnVpbGRlciBpbnN0YW5jZSB1c2VkLgpAQCAtMTc5LDYgKzE4Miw3IEBACiAgICAgICAgIC8qKgogICAgICAgICAgKiBTZXRzIGEgbWFza2VkIHZhbHVlIGZvciBhIGZpZWxkLgogICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gPEY+IE1hdGNoRmllbGQsIHZhbHVlLCBhbmQgbWFzayB0eXBlCiAgICAgICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZCB0byBzZXQuCiAgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiBmaWVsZC4KICAgICAgICAgICogQHBhcmFtIG1hc2sgTWFzayB2YWx1ZS4KQEAgLTE5MCw2ICsxOTQsNyBAQAogICAgICAgICAvKioKICAgICAgICAgICogU2V0cyBhIG1hc2tlZCB2YWx1ZSBmb3IgYSBmaWVsZC4KICAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIDxGPiBNYXRjaEZpZWxkIGFuZCB2YWx1ZSB3aXRoIG1hc2sgdHlwZQogICAgICAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQgdG8gc2V0LgogICAgICAgICAgKiBAcGFyYW0gdmFsdWVXaXRoTWFzayBDb21wb3VuZCBNYXNrZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSB2YWx1ZSBhbmQgdGhlIG1hc2suCiAgICAgICAgICAqIEByZXR1cm4gdGhlIEJ1aWxkZXIgaW5zdGFuY2UgdXNlZC4KQEAgLTIwMCw2ICsyMDUsNyBAQAogICAgICAgICAvKioKICAgICAgICAgICogVW5zZXRzIGFueSB2YWx1ZSBnaXZlbiBmb3IgdGhlIGZpZWxkIGFuZCB3aWxkY2FyZHMgaXQgc28gdGhhdCBpdCBtYXRjaGVzIGFueSB2YWx1ZS4KICAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIDxGPiBNYXRjaEZpZWxkIHR5cGUKICAgICAgICAgICogQHBhcmFtIGZpZWxkIE1hdGNoIGZpZWxkIHRvIHVuc2V0LgogICAgICAgICAgKiBAcmV0dXJuIHRoZSBCdWlsZGVyIGluc3RhbmNlIHVzZWQuCiAgICAgICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gSWYgZmllbGQgaXMgbm90IHN1cHBvcnRlZC4KQEAgLTIxMyw0ICsyMTksNCBAQAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIE1hdGNoIGJ1aWxkKCk7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoRmllbGQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoRmllbGQuamF2YQppbmRleCA0OGYzOGQ3Li4zM2E2NzM2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZC5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzLk9GVmFsdWVUeXBlOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5PRlZsYW5WaWRNYXRjaDsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuVHJhbnNwb3J0UG9ydDsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuUGFja2V0VHlwZTsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuVTE2OwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5VMzI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzLlU2NDsKQEAgLTMwLDE2ICszMSwyMiBAQAogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5WbGFuUGNwOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5DaXJjdWl0U2lnbmFsSUQ7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzLk9kdVNpZ25hbElEOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5WeGxhbk5JOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5WRkk7CisKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlU2V0OwogCiBwdWJsaWMgY2xhc3MgTWF0Y2hGaWVsZDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IHsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwogICAgIHB1YmxpYyBmaW5hbCBNYXRjaEZpZWxkcyBpZDsKLSAgICBwcml2YXRlIGZpbmFsIFByZXJlcXVpc2l0ZTw/PltdIHByZXJlcXVpc2l0ZXM7CisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8UHJlcmVxdWlzaXRlPD8+PiBwcmVyZXF1aXNpdGVzOwogCiAgICAgcHJpdmF0ZSBNYXRjaEZpZWxkKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBNYXRjaEZpZWxkcyBpZCwgUHJlcmVxdWlzaXRlPD8+Li4uIHByZXJlcXVpc2l0ZXMpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAgICB0aGlzLnByZXJlcXVpc2l0ZXMgPSBwcmVyZXF1aXNpdGVzOworICAgICAgICAvKiBndWFyYW50ZWVkIG5vbi1udWxsIChwcml2YXRlIGNvbnN0cnVjdG9yKTsgJ251bGwnIGlzbid0IHBhc3NlZCBhcyBwcmVyZXF1aXNpdGVzICovCisgICAgICAgIHRoaXMucHJlcmVxdWlzaXRlcyA9IEltbXV0YWJsZVNldC5jb3B5T2YocHJlcmVxdWlzaXRlcyk7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gSU5fUE9SVCA9CkBAIC0xOTcsMTAgKzIwNCwyNiBAQAogICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8VTY0PigidHVubmVsX2lkIiwgTWF0Y2hGaWVsZHMuVFVOTkVMX0lEKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxVMTY+IElQVjZfRVhUSERSID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPFUxNj4oImlwdjZfZXh0aGRyIiwgTWF0Y2hGaWVsZHMuSVBWNl9FWFRIRFIpOworICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8VTE2PigiaXB2Nl9leHRoZHIiLCBNYXRjaEZpZWxkcy5JUFY2X0VYVEhEUiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFByZXJlcXVpc2l0ZTxFdGhUeXBlPihNYXRjaEZpZWxkLkVUSF9UWVBFLCBFdGhUeXBlLklQdjYpKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxPRkJvb2xlYW5WYWx1ZT4gUEJCX1VDQSA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxPRkJvb2xlYW5WYWx1ZT4oInBiYl91Y2EiLCBNYXRjaEZpZWxkcy5QQkJfVUNBKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GQm9vbGVhblZhbHVlPigicGJiX3VjYSIsIE1hdGNoRmllbGRzLlBCQl9VQ0EsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQcmVyZXF1aXNpdGU8RXRoVHlwZT4oTWF0Y2hGaWVsZC5FVEhfVFlQRSwgRXRoVHlwZS5QQkIpKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxVMTY+IFRDUF9GTEFHUyA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxVMTY+KCJ0Y3BfZmxhZ3MiLCBNYXRjaEZpZWxkcy5UQ1BfRkxBR1MsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQcmVyZXF1aXNpdGU8SXBQcm90b2NvbD4oTWF0Y2hGaWVsZC5JUF9QUk9UTywgSXBQcm90b2NvbC5UQ1ApKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxVMTY+IE9WU19UQ1BfRkxBR1MgPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8VTE2Pigib3ZzX3RjcF9mbGFncyIsIE1hdGNoRmllbGRzLk9WU19UQ1BfRkxBR1MsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQcmVyZXF1aXNpdGU8SXBQcm90b2NvbD4oTWF0Y2hGaWVsZC5JUF9QUk9UTywgSXBQcm90b2NvbC5UQ1ApKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxQYWNrZXRUeXBlPiBQQUNLRVRfVFlQRSA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxQYWNrZXRUeXBlPigicGFja2V0X3R5cGUiLCBNYXRjaEZpZWxkcy5QQUNLRVRfVFlQRSk7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8T0ZQb3J0PiBBQ1RTRVRfT1VUUFVUID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GUG9ydD4oImFjdHNldF9vdXRwdXQiLCBNYXRjaEZpZWxkcy5BQ1RTRVRfT1VUUFVUKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJUHY0QWRkcmVzcz4gVFVOTkVMX0lQVjRfU1JDID0KICAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjRBZGRyZXNzPigidHVubmVsX2lwdjRfc3JjIiwgTWF0Y2hGaWVsZHMuVFVOTkVMX0lQVjRfU1JDLApAQCAtMjk3LDggKzMyMCw4IEBACiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GQm9vbGVhblZhbHVlPiBCU05fTDJfQ0FDSEVfSElUID0KICAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GQm9vbGVhblZhbHVlPigiYnNuX2wyX2NhY2hlX2hpdCIsIE1hdGNoRmllbGRzLkJTTl9MMl9DQUNIRV9ISVQpOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFUzMj4gQlNOX1ZYTEFOX05FVFdPUktfSUQgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8VTMyPigiYnNuX3Z4bGFuX25ldHdvcmtfaWQiLCBNYXRjaEZpZWxkcy5CU05fVlhMQU5fTkVUV09SS19JRCk7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFZ4bGFuTkk+IEJTTl9WWExBTl9ORVRXT1JLX0lEID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPFZ4bGFuTkk+KCJic25fdnhsYW5fbmV0d29ya19pZCIsIE1hdGNoRmllbGRzLkJTTl9WWExBTl9ORVRXT1JLX0lEKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxNYWNBZGRyZXNzPiBCU05fSU5ORVJfRVRIX0RTVCA9CiAgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYWNBZGRyZXNzPigiYnNuX2lubmVyX2V0aF9kc3QiLCBNYXRjaEZpZWxkcy5CU05fSU5ORVJfRVRIX0RTVCk7CkBAIC00MDYsNiArNDI5LDEzIEBACiAgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxVMTY+KCJvZmRwYV9vdmlkIiwgTWF0Y2hGaWVsZHMuT0ZEUEFfT1ZJRCwKICAgICAgICAgICAgICAgICBuZXcgUHJlcmVxdWlzaXRlPE9GVmxhblZpZE1hdGNoPihNYXRjaEZpZWxkLlZMQU5fVklEKSk7CiAKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8VkZJPiBCU05fVkZJID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPFZGST4oImJzbl92ZmkiLCBNYXRjaEZpZWxkcy5CU05fVkZJKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxPRkJvb2xlYW5WYWx1ZT4gQlNOX0lQX0ZSQUdNRU5UQVRJT04gPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8T0ZCb29sZWFuVmFsdWU+KCJic25faXBfZnJhZ21lbnRhdGlvbiIsIE1hdGNoRmllbGRzLkJTTl9JUF9GUkFHTUVOVEFUSU9OLAorICAgICAgICAgICAgICAgICAgICBuZXcgUHJlcmVxdWlzaXRlPEV0aFR5cGU+KE1hdGNoRmllbGQuRVRIX1RZUEUsIEV0aFR5cGUuSVB2NCwgRXRoVHlwZS5JUHY2KSk7CisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KQEAgLTQxOSw0ICs0NDksMTUgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmV0cmlldmUgd2hhdCBhbHNvIG11c3QgYmUgbWF0Y2hlZCBpbiBvcmRlciB0bworICAgICAqIHVzZSB0aGlzIHBhcnRpY3VsYXIgTWF0Y2hGaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIHByZXJlcXVpc2l0ZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgU2V0PFByZXJlcXVpc2l0ZTw/Pj4gZ2V0UHJlcmVxdWlzaXRlcygpIHsKKyAgICAgICAgLyogYXNzdW1lcyBub24tbnVsbDsgZ3VhcmFudGVlZCBieSBjb25zdHJ1Y3RvciAqLworICAgICAgICByZXR1cm4gdGhpcy5wcmVyZXF1aXNpdGVzOworICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZHMuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoRmllbGRzLmphdmEKaW5kZXggOTI3NDE1My4uM2Y4NjQ2NiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZHMuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkcy5qYXZhCkBAIC0yLDYgKzIsOCBAQAogCiAvLyBNVVNUIEJFIE9SREVSRUQgQlkgVEhFIE9SREVSIE9GIE9GIFNQRUMhISEKIHB1YmxpYyBlbnVtIE1hdGNoRmllbGRzIHsKKyAgICAvLyBpZiBwcmVzZW50LCBQYWNrZXRUeXBlIG11c3QgYXBwZWFyIGFzIHRoZSBmaXJzdCBPWE0gaW4gdGhlIGxpc3QgKE9GIDEuNS4sIDcuMi4zLjExKQorICAgIFBBQ0tFVF9UWVBFLAogICAgIElOX1BPUlQsCiAgICAgSU5fUEhZX1BPUlQsCiAgICAgTUVUQURBVEEsCkBAIC00Niw2ICs0OCw5IEBACiAgICAgQ09OTlRSQUNLX0xBQkVMLAogICAgIElQVjZfRVhUSERSLAogICAgIFBCQl9VQ0EsCisgICAgVENQX0ZMQUdTLAorICAgIE9WU19UQ1BfRkxBR1MsCisgICAgQUNUU0VUX09VVFBVVCwKICAgICBUVU5ORUxfSVBWNF9TUkMsCiAgICAgVFVOTkVMX0lQVjRfRFNULAogICAgIEJTTl9JTl9QT1JUU18xMjgsCkBAIC03Myw2ICs3OCw3IEBACiAgICAgQlNOX0lOTkVSX0VUSF9EU1QsCiAgICAgQlNOX0lOTkVSX0VUSF9TUkMsCiAgICAgQlNOX0lOTkVSX1ZMQU5fVklELAorICAgIEJTTl9WRkksCiAgICAgT0NIX1NJR1RZUEUsCiAgICAgT0NIX1NJR1RZUEVfQkFTSUMsCiAgICAgT0NIX1NJR0lELApAQCAtMTExLDQgKzExNyw1IEBACiAgICAgT0ZEUEFfTVBMU19UWVBFLAogICAgIE9GRFBBX01QTFNfTDJfUE9SVCwKICAgICBPRkRQQV9PVklELAorICAgIEJTTl9JUF9GUkFHTUVOVEFUSU9OCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9QcmVyZXF1aXNpdGUuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL1ByZXJlcXVpc2l0ZS5qYXZhCmluZGV4IDAzZDVlNzkuLmRlYzlkMjEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL1ByZXJlcXVpc2l0ZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL21hdGNoL1ByZXJlcXVpc2l0ZS5qYXZhCkBAIC0xLDcgKzEsNyBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wubWF0Y2g7CiAKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlU2V0OwogCiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzLk9GVmFsdWVUeXBlOwogCkBAIC0xMiwxNSArMTIsMTQgQEAKIAogICAgIEBTYWZlVmFyYXJncwogICAgIHB1YmxpYyBQcmVyZXF1aXNpdGUoTWF0Y2hGaWVsZDxUPiBmaWVsZCwgT0ZWYWx1ZVR5cGU8VD4uLi4gdmFsdWVzKSB7Ci0gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEhhc2hTZXQ8T0ZWYWx1ZVR5cGU8VD4+KCk7CiAgICAgICAgIHRoaXMuZmllbGQgPSBmaWVsZDsKKyAgICAgICAgLyogcG9zc2libGUgbnVsbCB2YWx1ZXMsIHNpbmNlIHB1YmxpYyBjb25zdHJ1Y3RvciAqLwogICAgICAgICBpZiAodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICB0aGlzLmFueSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IEltbXV0YWJsZVNldC5vZigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhpcy5hbnkgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoT0ZWYWx1ZVR5cGU8VD4gdmFsdWUgOiB2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcy5hZGQodmFsdWUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBJbW11dGFibGVTZXQuY29weU9mKHZhbHVlcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQyLDQgKzQxLDIyIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBHZXQgdmFsaWQvcG9zc2libGUgdmFsdWVzIGZvciB0aGlzIHByZXJlcXVpc2l0ZSBtYXRjaC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdW5tb2RpZmlhYmxlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgU2V0PE9GVmFsdWVUeXBlPFQ+PiBnZXRWYWx1ZXMoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnZhbHVlczsgICAKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIE1hdGNoRmllbGQgb2YgdGhpcyBwcmVyZXF1aXNpdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBNYXRjaEZpZWxkIHRoYXQgaXMgcmVxdWlyZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgTWF0Y2hGaWVsZDxUPiBnZXRNYXRjaEZpZWxkKCkgeworICAgICAgICByZXR1cm4gdGhpcy5maWVsZDsgLyogaW1tdXRhYmxlICovCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9zdGF0L1N0YXQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3N0YXQvU3RhdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODU5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9zdGF0L1N0YXQuamF2YQpAQCAtMCwwICsxLDI4IEBACitwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5zdGF0OworCitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GT2JqZWN0OworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5PRlZhbHVlVHlwZTsKKworcHVibGljIGludGVyZmFjZSBTdGF0IGV4dGVuZHMgT0ZPYmplY3QgeworICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBGIGdldChTdGF0RmllbGQ8Rj4gZmllbGQpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0cyhTdGF0RmllbGQ8Pz4gZmllbGQpOworICAgIHB1YmxpYyBJdGVyYWJsZTxTdGF0RmllbGQ8Pz4+IGdldFN0YXRGaWVsZHMoKTsKKyAgICBwdWJsaWMgQnVpbGRlciBjcmVhdGVCdWlsZGVyKCk7CisKKyAgICBpbnRlcmZhY2UgQnVpbGRlciB7CisgICAgICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBGIGdldChTdGF0RmllbGQ8Rj4gZmllbGQpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBzdGF0IGZpZWxkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gPEY+IFN0YXRGaWVsZCB0eXBlCisgICAgICAgICAqIEBwYXJhbSBmaWVsZCBTdGF0IGZpZWxkIHRvIHNldC4KKyAgICAgICAgICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHN0YXQgZmllbGQuCisgICAgICAgICAqIEByZXR1cm4gdGhlIEJ1aWxkZXIgaW5zdGFuY2UgdXNlZC4KKyAgICAgICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBJZiBmaWVsZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IEJ1aWxkZXIgc2V0KFN0YXRGaWVsZDxGPiBmaWVsZCwgRiB2YWx1ZSkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOworCisgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzKFN0YXRGaWVsZDw/PiBmaWVsZCk7CisgICAgICAgIHB1YmxpYyBTdGF0IGJ1aWxkKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvc3RhdC9TdGF0RmllbGQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3N0YXQvU3RhdEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiYjkxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3N0YXQvU3RhdEZpZWxkLmphdmEKQEAgLTAsMCArMSwzNiBAQAorcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuc3RhdDsKKworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5PRlZhbHVlVHlwZTsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuVTMyOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5VNjQ7CisKK3B1YmxpYyBjbGFzcyBTdGF0RmllbGQ8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiB7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworICAgIHB1YmxpYyBmaW5hbCBTdGF0RmllbGRzIGlkOworCisgICAgcHJpdmF0ZSBTdGF0RmllbGQoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0YXRGaWVsZHMgaWQpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RhdEZpZWxkPFU2ND4gRFVSQVRJT04gPQorICAgICAgICAgICAgbmV3IFN0YXRGaWVsZDxVNjQ+KCJvZl9kdXJhdGlvbiIsIFN0YXRGaWVsZHMuRFVSQVRJT04pOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdGF0RmllbGQ8VTY0PiBJRExFX1RJTUUgPQorICAgICAgICAgICAgbmV3IFN0YXRGaWVsZDxVNjQ+KCJvZl9pZGxlX3RpbWUiLCBTdGF0RmllbGRzLklETEVfVElNRSk7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0YXRGaWVsZDxVMzI+IEZMT1dfQ09VTlQgPQorICAgICAgICAgICAgbmV3IFN0YXRGaWVsZDxVMzI+KCJvZl9mbG93X2NvdW50IiwgU3RhdEZpZWxkcy5GTE9XX0NPVU5UKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RhdEZpZWxkPFU2ND4gUEFDS0VUX0NPVU5UID0KKyAgICAgICAgICAgIG5ldyBTdGF0RmllbGQ8VTY0Pigib2ZfcGFja2V0X2NvdW50IiwgU3RhdEZpZWxkcy5QQUNLRVRfQ09VTlQpOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdGF0RmllbGQ8VTY0PiBCWVRFX0NPVU5UID0KKyAgICAgICAgICAgIG5ldyBTdGF0RmllbGQ8VTY0Pigib2ZfYnl0ZV9jb3VudCIsIFN0YXRGaWVsZHMuQllURV9DT1VOVCk7CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvc3RhdC9TdGF0RmllbGRzLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC9zdGF0L1N0YXRGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRhOTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvc3RhdC9TdGF0RmllbGRzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuc3RhdDsKKworLy9NVVNUIEJFIE9SREVSRUQgQlkgVEhFIE9SREVSIE9GIE9GIFNQRUMhISEKK3B1YmxpYyBlbnVtIFN0YXRGaWVsZHMgeworICAgIERVUkFUSU9OLAorICAgIElETEVfVElNRSwKKyAgICBGTE9XX0NPVU5ULAorICAgIFBBQ0tFVF9DT1VOVCwKKyAgICBCWVRFX0NPVU5ULAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjEwL0NoYW5uZWxVdGlsc1ZlcjEwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxMC9DaGFubmVsVXRpbHNWZXIxMC5qYXZhCmluZGV4IGI0OTM3YmEuLjc0Zjc1YmEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjEwL0NoYW5uZWxVdGlsc1ZlcjEwLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvdmVyMTAvQ2hhbm5lbFV0aWxzVmVyMTAuamF2YQpAQCAtMywyNSArMywyNiBAQAogaW1wb3J0IGphdmEudXRpbC5FbnVtU2V0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRkFjdGlvblR5cGU7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm1hdGNoLk1hdGNoOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5zdGF0LlN0YXQ7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CiAKIC8qKgotICogQ29sbGVjdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGludG8gQ2hhbm5lbEJ1ZmZlcnMKKyAqIENvbGxlY3Rpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBpbnRvIFVucG9vbGVkCiAgKgogICogQGF1dGhvciBjYXB2ZWcKICAqLwogCiBwdWJsaWMgY2xhc3MgQ2hhbm5lbFV0aWxzVmVyMTAgewotICAgIHB1YmxpYyBzdGF0aWMgTWF0Y2ggcmVhZE9GTWF0Y2goZmluYWwgQ2hhbm5lbEJ1ZmZlciBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBNYXRjaCByZWFkT0ZNYXRjaChmaW5hbCBCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GTWF0Y2hWMVZlcjEwLlJFQURFUi5yZWFkRnJvbShiYik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBTZXQ8T0ZBY3Rpb25UeXBlPiByZWFkU3VwcG9ydGVkQWN0aW9ucyhDaGFubmVsQnVmZmVyIGJiKSB7CisgICAgcHVibGljIHN0YXRpYyBTZXQ8T0ZBY3Rpb25UeXBlPiByZWFkU3VwcG9ydGVkQWN0aW9ucyhCeXRlQnVmIGJiKSB7CiAgICAgICAgIGludCBhY3Rpb25zID0gYmIucmVhZEludCgpOwogICAgICAgICBFbnVtU2V0PE9GQWN0aW9uVHlwZT4gc3VwcG9ydGVkQWN0aW9ucyA9IEVudW1TZXQubm9uZU9mKE9GQWN0aW9uVHlwZS5jbGFzcyk7CiAgICAgICAgIGlmICgoYWN0aW9ucyAmICgxIDw8IE9GQWN0aW9uVHlwZVNlcmlhbGl6ZXJWZXIxMC5PVVRQVVRfVkFMKSkgIT0gMCkKQEAgLTg0LDggKzg1LDEyIEBACiAgICAgICAgIHNpbmsucHV0SW50KHN1cHBvcnRlZEFjdGlvbnNUb1dpcmUoc3VwcG9ydGVkQWN0aW9ucykpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVN1cHBvcnRlZEFjdGlvbnMoQ2hhbm5lbEJ1ZmZlciBiYiwgU2V0PE9GQWN0aW9uVHlwZT4gc3VwcG9ydGVkQWN0aW9ucykgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVN1cHBvcnRlZEFjdGlvbnMoQnl0ZUJ1ZiBiYiwgU2V0PE9GQWN0aW9uVHlwZT4gc3VwcG9ydGVkQWN0aW9ucykgewogICAgICAgICBiYi53cml0ZUludChzdXBwb3J0ZWRBY3Rpb25zVG9XaXJlKHN1cHBvcnRlZEFjdGlvbnMpKTsKICAgICB9CiAKKyAgICBwdWJsaWMgc3RhdGljIFN0YXQgcmVhZE9GU3RhdChmaW5hbCBCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3Qgc3VwcG9ydGVkIik7CisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxMS9DaGFubmVsVXRpbHNWZXIxMS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvdmVyMTEvQ2hhbm5lbFV0aWxzVmVyMTEuamF2YQppbmRleCBiMDkwZTQ3Li5iMDlkYTM3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxMS9DaGFubmVsVXRpbHNWZXIxMS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjExL0NoYW5uZWxVdGlsc1ZlcjExLmphdmEKQEAgLTEsMjYgKzEsMzEgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLnZlcjExOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZNYXRjaEJtYXA7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm1hdGNoLk1hdGNoOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5zdGF0LlN0YXQ7CiAKIC8qKgotICogQ29sbGVjdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGludG8gQ2hhbm5lbEJ1ZmZlcnMKKyAqIENvbGxlY3Rpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBpbnRvIFVucG9vbGVkCiAgKgogICogQGF1dGhvciBjYXB2ZWcKICAqLwogCiBwdWJsaWMgY2xhc3MgQ2hhbm5lbFV0aWxzVmVyMTEgewotICAgIHB1YmxpYyBzdGF0aWMgTWF0Y2ggcmVhZE9GTWF0Y2goZmluYWwgQ2hhbm5lbEJ1ZmZlciBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBNYXRjaCByZWFkT0ZNYXRjaChmaW5hbCBCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GTWF0Y2hWMlZlcjExLlJFQURFUi5yZWFkRnJvbShiYik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRk1hdGNoQm1hcCByZWFkT0ZNYXRjaEJtYXAoQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZNYXRjaEJtYXAgcmVhZE9GTWF0Y2hCbWFwKEJ5dGVCdWYgYmIpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3QgaW1wbGVtZW50ZWQiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVPRk1hdGNoQm1hcChDaGFubmVsQnVmZmVyIGJiLCBPRk1hdGNoQm1hcCBtYXRjaCkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZU9GTWF0Y2hCbWFwKEJ5dGVCdWYgYmIsIE9GTWF0Y2hCbWFwIG1hdGNoKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IGltcGxlbWVudGVkIik7CiAgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdGF0IHJlYWRPRlN0YXQoZmluYWwgQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IHN1cHBvcnRlZCIpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjEyL0NoYW5uZWxVdGlsc1ZlcjEyLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxMi9DaGFubmVsVXRpbHNWZXIxMi5qYXZhCmluZGV4IDc1NjM2M2QuLjViMjgxNzAgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjEyL0NoYW5uZWxVdGlsc1ZlcjEyLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvdmVyMTIvQ2hhbm5lbFV0aWxzVmVyMTIuamF2YQpAQCAtMSw0MCArMSw0NSBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wudmVyMTI7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1hdGNoQm1hcDsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wubWF0Y2guTWF0Y2g7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLnZlcjEyLk9GTWF0Y2hWM1ZlcjEyOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRkJzblZwb3J0UUluUTsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuc3RhdC5TdGF0OwogCiAvKioKLSAqIENvbGxlY3Rpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBpbnRvIENoYW5uZWxCdWZmZXJzCisgKiBDb2xsZWN0aW9uIG9mIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgaW50byBVbnBvb2xlZAogICoKICAqIEBhdXRob3IgY2FwdmVnCiAgKi8KIAogcHVibGljIGNsYXNzIENoYW5uZWxVdGlsc1ZlcjEyIHsKLSAgICBwdWJsaWMgc3RhdGljIE1hdGNoIHJlYWRPRk1hdGNoKGZpbmFsIENoYW5uZWxCdWZmZXIgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgTWF0Y2ggcmVhZE9GTWF0Y2goZmluYWwgQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBPRk1hdGNoVjNWZXIxMi5SRUFERVIucmVhZEZyb20oYmIpOwogICAgIH0KIAogICAgIC8vIFRPRE8gdGhlc2UgbmVlZCB0byBiZSBmaWd1cmVkIG91dCAvIHJlbW92ZWQKIAotICAgIHB1YmxpYyBzdGF0aWMgT0ZCc25WcG9ydFFJblEgcmVhZE9GQnNuVnBvcnRRSW5RKENoYW5uZWxCdWZmZXIgYmIpIHsKKyAgICBwdWJsaWMgc3RhdGljIE9GQnNuVnBvcnRRSW5RIHJlYWRPRkJzblZwb3J0UUluUShCeXRlQnVmIGJiKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IGltcGxlbWVudGVkIik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlT0ZCc25WcG9ydFFJblEoQ2hhbm5lbEJ1ZmZlciBiYiwKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVPRkJzblZwb3J0UUluUShCeXRlQnVmIGJiLAogICAgICAgICAgICAgT0ZCc25WcG9ydFFJblEgdnBvcnQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3QgaW1wbGVtZW50ZWQiKTsKIAogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgT0ZNYXRjaEJtYXAgcmVhZE9GTWF0Y2hCbWFwKENoYW5uZWxCdWZmZXIgYmIpIHsKKyAgICBwdWJsaWMgc3RhdGljIE9GTWF0Y2hCbWFwIHJlYWRPRk1hdGNoQm1hcChCeXRlQnVmIGJiKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IGltcGxlbWVudGVkIik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlT0ZNYXRjaEJtYXAoQ2hhbm5lbEJ1ZmZlciBiYiwgT0ZNYXRjaEJtYXAgbWF0Y2gpIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVPRk1hdGNoQm1hcChCeXRlQnVmIGJiLCBPRk1hdGNoQm1hcCBtYXRjaCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIm5vdCBpbXBsZW1lbnRlZCIpOwogICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RhdCByZWFkT0ZTdGF0KGZpbmFsIEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIm5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxMy9DaGFubmVsVXRpbHNWZXIxMy5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvdmVyMTMvQ2hhbm5lbFV0aWxzVmVyMTMuamF2YQppbmRleCA4MjE2YmIwLi5jZDY1YmNkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxMy9DaGFubmVsVXRpbHNWZXIxMy5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjEzL0NoYW5uZWxVdGlsc1ZlcjEzLmphdmEKQEAgLTEsMjYgKzEsMzEgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLnZlcjEzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZNYXRjaEJtYXA7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm1hdGNoLk1hdGNoOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5zdGF0LlN0YXQ7CiAKIC8qKgotICogQ29sbGVjdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGludG8gQ2hhbm5lbEJ1ZmZlcnMKKyAqIENvbGxlY3Rpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBpbnRvIFVucG9vbGVkCiAgKgogICogQGF1dGhvciBjYXB2ZWcKICAqLwogCiBwdWJsaWMgY2xhc3MgQ2hhbm5lbFV0aWxzVmVyMTMgewotICAgIHB1YmxpYyBzdGF0aWMgTWF0Y2ggcmVhZE9GTWF0Y2goZmluYWwgQ2hhbm5lbEJ1ZmZlciBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBNYXRjaCByZWFkT0ZNYXRjaChmaW5hbCBCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GTWF0Y2hWM1ZlcjEzLlJFQURFUi5yZWFkRnJvbShiYik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRk1hdGNoQm1hcCByZWFkT0ZNYXRjaEJtYXAoQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZNYXRjaEJtYXAgcmVhZE9GTWF0Y2hCbWFwKEJ5dGVCdWYgYmIpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3QgaW1wbGVtZW50ZWQiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVPRk1hdGNoQm1hcChDaGFubmVsQnVmZmVyIGJiLCBPRk1hdGNoQm1hcCBtYXRjaCkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZU9GTWF0Y2hCbWFwKEJ5dGVCdWYgYmIsIE9GTWF0Y2hCbWFwIG1hdGNoKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IGltcGxlbWVudGVkIik7CiAgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdGF0IHJlYWRPRlN0YXQoZmluYWwgQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IHN1cHBvcnRlZCIpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjE0L0NoYW5uZWxVdGlsc1ZlcjE0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy9wcm90b2NvbC92ZXIxNC9DaGFubmVsVXRpbHNWZXIxNC5qYXZhCmluZGV4IGM4OTNjYWIuLmYwNjI3MTEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjE0L0NoYW5uZWxVdGlsc1ZlcjE0LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvdmVyMTQvQ2hhbm5lbFV0aWxzVmVyMTQuamF2YQpAQCAtMSwyNiArMSwzMSBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wudmVyMTQ7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1hdGNoQm1hcDsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wubWF0Y2guTWF0Y2g7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLnN0YXQuU3RhdDsKIAogLyoqCi0gKiBDb2xsZWN0aW9uIG9mIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgaW50byBDaGFubmVsQnVmZmVycworICogQ29sbGVjdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGludG8gQnl0ZUJ1ZnMKICAqCiAgKiBAYXV0aG9yIGNhcHZlZwogICovCiAKIHB1YmxpYyBjbGFzcyBDaGFubmVsVXRpbHNWZXIxNCB7Ci0gICAgcHVibGljIHN0YXRpYyBNYXRjaCByZWFkT0ZNYXRjaChmaW5hbCBDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljIE1hdGNoIHJlYWRPRk1hdGNoKGZpbmFsIEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gT0ZNYXRjaFYzVmVyMTQuUkVBREVSLnJlYWRGcm9tKGJiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIE9GTWF0Y2hCbWFwIHJlYWRPRk1hdGNoQm1hcChDaGFubmVsQnVmZmVyIGJiKSB7CisgICAgcHVibGljIHN0YXRpYyBPRk1hdGNoQm1hcCByZWFkT0ZNYXRjaEJtYXAoQnl0ZUJ1ZiBiYikgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIm5vdCBpbXBsZW1lbnRlZCIpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZU9GTWF0Y2hCbWFwKENoYW5uZWxCdWZmZXIgYmIsIE9GTWF0Y2hCbWFwIG1hdGNoKSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlT0ZNYXRjaEJtYXAoQnl0ZUJ1ZiBiYiwgT0ZNYXRjaEJtYXAgbWF0Y2gpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3QgaW1wbGVtZW50ZWQiKTsKICAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0YXQgcmVhZE9GU3RhdChmaW5hbCBCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3Qgc3VwcG9ydGVkIik7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvcHJvdG9jb2wvdmVyMTUvQ2hhbm5lbFV0aWxzVmVyMTUuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjE1L0NoYW5uZWxVdGlsc1ZlcjE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0MmExOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3Byb3RvY29sL3ZlcjE1L0NoYW5uZWxVdGlsc1ZlcjE1LmphdmEKQEAgLTAsMCArMSwzMCBAQAorcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wudmVyMTU7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GTWF0Y2hCbWFwOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5tYXRjaC5NYXRjaDsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuc3RhdC5TdGF0OworLyoqCisgKiBDb2xsZWN0aW9uIG9mIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgaW50byBCeXRlQnVmcworICoKKyAqIEBhdXRob3IgY2FwdmVnCisgKi8KKworcHVibGljIGNsYXNzIENoYW5uZWxVdGlsc1ZlcjE1IHsKKyAgICBwdWJsaWMgc3RhdGljIE1hdGNoIHJlYWRPRk1hdGNoKGZpbmFsIEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgICAgICByZXR1cm4gT0ZNYXRjaFYzVmVyMTUuUkVBREVSLnJlYWRGcm9tKGJiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0YXQgcmVhZE9GU3RhdChmaW5hbCBCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcmV0dXJuIE9GU3RhdFY2VmVyMTUuUkVBREVSLnJlYWRGcm9tKGJiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE9GTWF0Y2hCbWFwIHJlYWRPRk1hdGNoQm1hcChCeXRlQnVmIGJiKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigibm90IGltcGxlbWVudGVkIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlT0ZNYXRjaEJtYXAoQnl0ZUJ1ZiBiYiwgT0ZNYXRjaEJtYXAgbWF0Y2gpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQXJwT3Bjb2RlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9BcnBPcGNvZGUuamF2YQppbmRleCBkZDUwZDI5Li4yZmIyODE2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9BcnBPcGNvZGUuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9BcnBPcGNvZGUuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuVW5zaWduZWRJbnRzOwpAQCAtMTQ2LDExICsxNDYsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlU2hvcnQodGhpcy5vcGNvZGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQXJwT3Bjb2RlIHJlYWQyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHN0YXRpYyBBcnBPcGNvZGUgcmVhZDJCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgcmV0dXJuIEFycE9wY29kZS5vZihjLnJlYWRVbnNpZ25lZFNob3J0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQnVuZGxlSWQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0J1bmRsZUlkLmphdmEKaW5kZXggY2NjZjY3ZS4uN2Y2YjQ5NiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQnVuZGxlSWQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9CdW5kbGVJZC5qYXZhCkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50LkltbXV0YWJsZTsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLlVuc2lnbmVkSW50czsKQEAgLTcyLDExICs3MiwxMSBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUludChyYXdWYWx1ZSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCdW5kbGVJZCByZWFkNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyBzdGF0aWMgQnVuZGxlSWQgcmVhZDRCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgcmV0dXJuIEJ1bmRsZUlkLm9mKGMucmVhZEludCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0NpcmN1aXRTaWduYWxJRC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQ2lyY3VpdFNpZ25hbElELmphdmEKaW5kZXggN2EzMDRmNi4uOTFlZWJlMCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQ2lyY3VpdFNpZ25hbElELmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQ2lyY3VpdFNpZ25hbElELmphdmEKQEAgLTEsNyArMSw3IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuQ29tcGFyaXNvbkNoYWluOwotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CkBAIC01MywxNCArNTMsMTQgQEAKICAgICAgICAgcmV0dXJuIHNwZWN0cmFsV2lkdGg7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGU2Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGU2Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVCeXRlKGdyaWRUeXBlKTsKICAgICAgICAgYy53cml0ZUJ5dGUoY2hhbm5lbFNwYWNpbmcpOwogICAgICAgICBjLndyaXRlU2hvcnQoY2hhbm5lbE51bWJlcik7CiAgICAgICAgIGMud3JpdGVTaG9ydChzcGVjdHJhbFdpZHRoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIENpcmN1aXRTaWduYWxJRCByZWFkNkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBDaXJjdWl0U2lnbmFsSUQgcmVhZDZCeXRlcyhCeXRlQnVmIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gbmV3IENpcmN1aXRTaWduYWxJRCgoYnl0ZSljLnJlYWRVbnNpZ25lZEJ5dGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpYy5yZWFkVW5zaWduZWRCeXRlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG9ydCljLnJlYWRVbnNpZ25lZFNob3J0KCksCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9DbGFzc0lkLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9DbGFzc0lkLmphdmEKaW5kZXggOThjMTI1My4uYzVmMThjZCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvQ2xhc3NJZC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0NsYXNzSWQuamF2YQpAQCAtMiw3ICsyLDcgQEAKIAogaW1wb3J0IGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5JbW11dGFibGU7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24ucHJpbWl0aXZlcy5VbnNpZ25lZEludHM7CkBAIC03MiwxMSArNzIsMTEgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVJbnQocmF3VmFsdWUpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NJZCByZWFkNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NJZCByZWFkNEJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICByZXR1cm4gQ2xhc3NJZC5vZihjLnJlYWRJbnQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9FdGhUeXBlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9FdGhUeXBlLmphdmEKaW5kZXggMWQ5YzhkNi4uYTdjMTQ2NCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvRXRoVHlwZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0V0aFR5cGUuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuVW5zaWduZWRJbnRzOwpAQCAtNTksNiArNTksNyBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgVkFMX0NPTkZfVEVTVCAgICAgICAgID0gMHg5MDAwOyAvLyBFdGhlcm5ldCBDb25maWd1cmF0aW9uIFRlc3RpbmcgUHJvdG9jb2xbNl0KICAgICBzdGF0aWMgZmluYWwgaW50IFZBTF9RX0lOX1EgICAgICAgICAgICA9IDB4OTEwMDsgLy8gUS1pbi1RCiAgICAgc3RhdGljIGZpbmFsIGludCBWQUxfTExUICAgICAgICAgICAgICAgPSAweENBRkU7IC8vIFZlcml0YXMgTG93IExhdGVuY3kgVHJhbnNwb3J0IChMTFQpWzddIGZvciBWZXJpdGFzIENsdXN0ZXIgU2VydmVyCisgICAgc3RhdGljIGZpbmFsIGludCBWQUxfUEJCICAgICAgICAgICAgICAgPSAweDg4RTc7IC8vIFByb3ZpZGVyIEJhY2tib25lIEJyaWRnZXMgKFBCQikKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRXRoVHlwZSBJUHY0ICAgICAgICAgICAgICAgPSBuZXcgRXRoVHlwZShWQUxfSVB2NCk7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFdGhUeXBlIEFSUCAgICAgICAgICAgICAgICA9IG5ldyBFdGhUeXBlKFZBTF9BUlApOwpAQCAtMTAzLDYgKzEwNCw3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFdGhUeXBlIENPTkZfVEVTVCAgICAgICAgICA9IG5ldyBFdGhUeXBlKFZBTF9DT05GX1RFU1QgKTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEV0aFR5cGUgUV9JTl9RICAgICAgICAgICAgID0gbmV3IEV0aFR5cGUoVkFMX1FfSU5fUSApOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRXRoVHlwZSBMTFQgICAgICAgICAgICAgICAgPSBuZXcgRXRoVHlwZShWQUxfTExUICk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFdGhUeXBlIFBCQiAgICAgICAgICAgICAgICA9IG5ldyBFdGhUeXBlKFZBTF9QQkIgKTsKIAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PTkVfVkFMID0gMHgwOwpAQCAtMjEwLDYgKzIxMiw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFFfSU5fUTsKICAgICAgICAgICAgIGNhc2UgVkFMX0xMVDoKICAgICAgICAgICAgICAgICByZXR1cm4gTExUOworICAgICAgICAgICAgY2FzZSBWQUxfUEJCOgorICAgICAgICAgICAgICAgIHJldHVybiBQQkI7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQncyBoZXJlPwogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXRoVHlwZSh0eXBlKTsKQEAgLTIyMSwxMSArMjI1LDExIEBACiAgICAgICAgIHJldHVybiAiMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhyYXdWYWx1ZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGUyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGUyQnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVTaG9ydCh0aGlzLnJhd1ZhbHVlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEV0aFR5cGUgcmVhZDJCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgc3RhdGljIEV0aFR5cGUgcmVhZDJCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgcmV0dXJuIEV0aFR5cGUub2YoYy5yZWFkVW5zaWduZWRTaG9ydCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0dlblRhYmxlSWQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0dlblRhYmxlSWQuamF2YQppbmRleCBjZmE3Y2RmLi4yMTI3YmVmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9HZW5UYWJsZUlkLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvR2VuVGFibGVJZC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgICAgIHJldHVybiBMRU5HVEg7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGUyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGUyQnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVTaG9ydCh0aGlzLmlkKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEdlblRhYmxlSWQgcmVhZDJCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgR2VuVGFibGVJZCByZWFkMkJ5dGVzKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBHZW5UYWJsZUlkLm9mKGMucmVhZFVuc2lnbmVkU2hvcnQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9IYXNoVmFsdWUuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0hhc2hWYWx1ZS5qYXZhCmluZGV4IGVlNzM2ZDcuLjVlOGJiNzIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0hhc2hWYWx1ZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0hhc2hWYWx1ZS5qYXZhCkBAIC03LDcgKzcsNyBAQAogICoKICAqIEBhdXRob3IgQW5kcmVhcyBXdW5kc2FtIHtAbGl0ZXJhbCA8fWFuZHJlYXMud3VuZHNhbUBiaWdzd2l0Y2guY29te0BsaXRlcmFsID59CiAgKgotICogQHBhcmFtIDxIPiAtIHRoaXMgdHlwZSwgZm9yIHJldHVybiB0eXBlIHNhZmV0eS4KKyAqIEBwYXJhbSBIIC0gdGhpcyB0eXBlLCBmb3IgcmV0dXJuIHR5cGUgc2FmZXR5LgogICovCiBASW1tdXRhYmxlCiBwdWJsaWMgaW50ZXJmYWNlIEhhc2hWYWx1ZTxIIGV4dGVuZHMgSGFzaFZhbHVlPEg+PiB7CkBAIC0yMCw3ICsyMCw3IEBACiAgICAgLyoqIHBlcmZvcm0gYW4gYXJpdGhtZXRpYyBhZGRpdGlvbiBvZiB0aGlzIHZhbHVlIGFuZCBvdGhlci4gV3JhcHMgYXJvdW5kIG9uCiAgICAgICogb3ZlcmZsb3cgb2YgdGhlIGRlZmluZWQgd29yZCBzaXplLgogICAgICAqCi0gICAgICogQHBhcmFtIG90aGVyCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciB2YWx1ZSB0byBhZGQgdG8gdGhpcwogICAgICAqIEByZXR1cm4gdGhpcyArIG90aGVyCiAgICAgICovCiAgICAgSCBhZGQoSCBvdGhlcik7CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICogYXJpdGhtZXRpY2FsbHkgc3Vic3RyYWN0IHRoZSBnaXZlbiAnb3RoZXInIHZhbHVlIGZyb20gdGhpcyB2YWx1ZS4KICAgICAgKiBhcm91bmQgb24gb3ZlcmZsb3cuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gb3RoZXIKKyAgICAgKiBAcGFyYW0gb3RoZXIgdGhlIG90aGVyIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gdGhpcwogICAgICAqIEByZXR1cm4gdGhpcyAtIG90aGVyCiAgICAgICovCiAgICAgSCBzdWJ0cmFjdChIIG90aGVyKTsKQEAgLTM3LDMyICszNyw1MyBAQAogICAgIC8qKiBAcmV0dXJuIHRoZSBiaXR3aXNlIGludmVyc2Ugb2YgdGhpcyB2YWx1ZSAqLwogICAgIEggaW52ZXJzZSgpOwogCi0gICAgLyoqIG9yIHRoaXMgdmFsdWUgd2l0aCBhbm90aGVyIHZhbHVlIHZhbHVlIG9mIHRoZSBzYW1lIHR5cGUgKi8KKyAgICAvKiogCisgICAgICogb3IgdGhpcyB2YWx1ZSB3aXRoIGFub3RoZXIgdmFsdWUgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZSAKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gb3RoZXIgdGhlIG90aGVyIHZhbHVlIHRvIGJpdHdpc2Ugb3Igd2l0aCB0aGlzCisgICAgICogQHJldHVybiB0aGlzIHwgb3RoZXIKKyAgICAgKi8KICAgICBIIG9yKEggb3RoZXIpOwogCi0gICAgLyoqIGFuZCB0aGlzIHZhbHVlIHdpdGggYW5vdGhlciB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlICovCisgICAgLyoqIAorICAgICAqIGFuZCB0aGlzIHZhbHVlIHdpdGggYW5vdGhlciB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlIAorICAgICAqIAorICAgICAqIEBwYXJhbSBvdGhlciB0aGUgb3RoZXIgdmFsdWUgdG8gYml0d2lzZSBhbmQgd2l0aCB0aGlzCisgICAgICogQHJldHVybiB0aGlzIHtAbGl0ZXJhbCAmfSBvdGhlcgorICAgICAqLwogICAgIEggYW5kKEggb3RoZXIpOwogCi0gICAgLyoqIHhvciB0aGlzIHZhbHVlIHdpdGggYW5vdGhlciB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlICovCisgICAgLyoqIAorICAgICAqIHhvciB0aGlzIHZhbHVlIHdpdGggYW5vdGhlciB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlIAorICAgICAqCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciB2YWx1ZSB0byBiaXR3aXNlIHhvciB3aXRoIHRoaXMKKyAgICAgKiBAcmV0dXJuIHRoaXMgWE9SIG90aGVyCisgICAgICovCiAgICAgSCB4b3IoSCBvdGhlcik7CiAKLSAgICAvKiogY3JlYXRlIGFuZCByZXR1cm4gYSBidWlsZGVyICovCisgICAgLyoqIAorICAgICAqIGNyZWF0ZSBhbmQgcmV0dXJuIGEgYnVpbGRlciAKKyAgICAgKgorICAgICAqIEByZXR1cm4gYnVpbGRlcgorICAgICAqLwogICAgIEJ1aWxkZXI8SD4gYnVpbGRlcigpOwogCi0gICAgLyoqIGEgbXV0YXRvciBmb3IgSGFzaFZhbHVlcy4gQWxsb3dzIHBlcmZvbXJpbmcgYSBzZXJpZXMgb2YKLSAgICAgKiAgb3BlcmF0aW9ucyBvbiBhIGhhc2h2IHZhbHVlIHdpdGhvdXQgdGhlIGFzc29jaWF0ZWQgY29zdCBvZiBvYmplY3QKLSAgICAgKiAgcmVhbGxvY2F0aW9uLgorICAgIC8qKiAKKyAgICAgKiBhIG11dGF0b3IgZm9yIEhhc2hWYWx1ZXMuIEFsbG93cyBwZXJmb21yaW5nIGEgc2VyaWVzIG9mCisgICAgICogb3BlcmF0aW9ucyBvbiBhIGhhc2h2IHZhbHVlIHdpdGhvdXQgdGhlIGFzc29jaWF0ZWQgY29zdCBvZiBvYmplY3QKKyAgICAgKiByZWFsbG9jYXRpb24uCiAgICAgICoKICAgICAgKiBAYXV0aG9yIEFuZHJlYXMgV3VuZHNhbSB7QGxpdGVyYWwgPH1hbmRyZWFzLnd1bmRzYW1AYmlnc3dpdGNoLmNvbXtAbGl0ZXJhbCA+fQogICAgICAqCiAgICAgICogQHBhcmFtIDxIPiAtIHRoZSBoYXNodmFsdWUKICAgICAgKi8KICAgICBwdWJsaWMgaW50ZXJmYWNlIEJ1aWxkZXI8SD4gewotICAgICAgICAvKiogcGVyZm9ybSBhbiBhcml0aG1ldGljIGFkZGl0aW9uIG9mIHRoaXMgdmFsdWUgYW5kIG90aGVyLiBXcmFwcyBhcm91bmQgb24KKyAgICAgICAgLyoqIAorICAgICAgICAgKiBwZXJmb3JtIGFuIGFyaXRobWV0aWMgYWRkaXRpb24gb2YgdGhpcyB2YWx1ZSBhbmQgb3RoZXIuIFdyYXBzIGFyb3VuZCBvbgogICAgICAgICAgKiBvdmVyZmxvdyBvZiB0aGUgZGVmaW5lZCB3b3JkIHNpemUuCiAgICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBvdGhlcgotICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvcgorICAgICAgICAgKiBAcGFyYW0gb3RoZXIgdGhlIG90aGVyIHZhbHVlIHRvIGFkZCB0byB0aGlzCisgICAgICAgICAqIEByZXR1cm4gdGhpcyBtdXRhdG9yIGNvbnRhaW5pbmcgdGhpcyArIG90aGVyCiAgICAgICAgICAqLwogICAgICAgICBCdWlsZGVyPEg+IGFkZChIIG90aGVyKTsKIApAQCAtNzAsMzMgKzkxLDQ3IEBACiAgICAgICAgICAqIGFyaXRobWV0aWNhbGx5IHN1YnN0cmFjdCB0aGUgZ2l2ZW4gJ290aGVyJyB2YWx1ZSBmcm9tIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhpcyBtdXRhdG9yLgogICAgICAgICAgKiBhcm91bmQgb24gb3ZlcmZsb3cuCiAgICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBvdGhlcgotICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvcgorICAgICAgICAgKiBAcGFyYW0gb3RoZXIgdGhlIG90aGVyIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gdGhpcworICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvciBjb250YWluaW5nIHRoaXMgLSBvdGhlcgogICAgICAgICAgKi8KICAgICAgICAgQnVpbGRlcjxIPiBzdWJ0cmFjdChIIG90aGVyKTsKIAotICAgICAgICAvKiogYml0d2lzZSBpbnZlcnQgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGlzIG11dGF0b3IKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBiaXR3aXNlIGludmVydCB0aGUgdmFsdWUgc3RvcmVkIGluIHRoaXMgbXV0YXRvcgogICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvcgorICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvciBjb250YWluaW5nIH50aGlzCiAgICAgICAgICAqLwogICAgICAgICBCdWlsZGVyPEg+IGludmVydCgpOwogCi0gICAgICAgIC8qKiBvciB0aGUgdmFsdWUgc3RvcmVkIGluIHRoaXMgbXV0YXRvciB3aXRoIGFub3RoZXIgdmFsdWUgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZQotICAgICAgICAqIEByZXR1cm4gdGhpcyBtdXRhdG9yCi0gICAgICAgICovCisgICAgICAgIC8qKiAKKyAgICAgICAgICogb3IgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGlzIG11dGF0b3Igd2l0aCBhbm90aGVyIHZhbHVlIHZhbHVlIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciB2YWx1ZSB0byBiaXR3aXNlIG9yIHdpdGggdGhpcworICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvciBjb250YWluaW5nIHRoaXMgfCBvdGhlcgorICAgICAgICAgKi8KICAgICAgICAgQnVpbGRlcjxIPiBvcihIIG90aGVyKTsKIAotICAgICAgICAvKiogYW5kIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhpcyBtdXRhdG9yIHdpdGggYW5vdGhlciB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlCi0gICAgICAgICogQHJldHVybiB0aGlzIG11dGF0b3IKLSAgICAgICAgKi8KKyAgICAgICAgLyoqIAorICAgICAgICAgKiBhbmQgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGlzIG11dGF0b3Igd2l0aCBhbm90aGVyIHZhbHVlIHZhbHVlIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciB2YWx1ZSB0byBiaXR3aXNlIGFuZCB3aXRoIHRoaXMKKyAgICAgICAgICogQHJldHVybiB0aGlzIG11dGF0b3IgY29udGFpbmluZyB0aGlzIHtAbGl0ZXJhbCAmfSBvdGhlcgorICAgICAgICAgKi8KICAgICAgICAgQnVpbGRlcjxIPiBhbmQoSCBvdGhlcik7CiAKLSAgICAgICAgLyoqIHhvciB0aGUgdmFsdWUgc3RvcmVkIGluIHRoaXMgbXV0YXRvciB3aXRoIGFub3RoZXIgdmFsdWUgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZQotICAgICAgICAqIEByZXR1cm4gdGhpcyBtdXRhdG9yCi0gICAgICAgICovCisgICAgICAgIC8qKiAKKyAgICAgICAgICogeG9yIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhpcyBtdXRhdG9yIHdpdGggYW5vdGhlciB2YWx1ZSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBvdGhlciB0aGUgb3RoZXIgdmFsdWUgdG8gYml0d2lzZSBleGNsdXNpdmUgb3Igd2l0aCB0aGlzCisgICAgICAgICAqIEByZXR1cm4gdGhpcyBtdXRhdG9yIGNvbnRhaW5pbmcgdGhpcyBYT1Igb3RoZXIKKyAgICAgICAgICovCiAgICAgICAgIEJ1aWxkZXI8SD4geG9yKEggb3RoZXIpOwogCi0gICAgICAgIC8qKiBAcmV0dXJuIHRoZSBoYXNoIHZhbHVlICovCisgICAgICAgIC8qKiAKKyAgICAgICAgICogY29uc3RydWN0IGFuIGltbXV0YWJsZSB2YWx1ZSBmcm9tIHRoZSB2YWx1ZSBkZWZpbmVkIGluIHRoZSBidWlsZGVyCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gdGhlIGhhc2ggdmFsdWUgCisgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgSCBidWlsZCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lDTVB2NENvZGUuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lDTVB2NENvZGUuamF2YQppbmRleCBjZWQ1NzM3Li41OTcwOTVkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JQ01QdjRDb2RlLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSUNNUHY0Q29kZS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24ucHJpbWl0aXZlcy5TaG9ydHM7CkBAIC00NSwxMSArNDUsMTEgQEAKICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRlKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUJ5dGUodGhpcy5jb2RlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIElDTVB2NENvZGUgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHN0YXRpYyBJQ01QdjRDb2RlIHJlYWRCeXRlKEJ5dGVCdWYgYykgewogICAgICAgICByZXR1cm4gSUNNUHY0Q29kZS5vZihjLnJlYWRVbnNpZ25lZEJ5dGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JQ01QdjRUeXBlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JQ01QdjRUeXBlLmphdmEKaW5kZXggNjM0YmMwMy4uM2ViMjk4NyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSUNNUHY0VHlwZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lDTVB2NFR5cGUuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuU2hvcnRzOwpAQCAtMTU1LDExICsxNTUsMTEgQEAKICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRlKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUJ5dGUodGhpcy50eXBlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIElDTVB2NFR5cGUgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHN0YXRpYyBJQ01QdjRUeXBlIHJlYWRCeXRlKEJ5dGVCdWYgYykgewogICAgICAgICByZXR1cm4gSUNNUHY0VHlwZS5vZihjLnJlYWRVbnNpZ25lZEJ5dGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUEFkZHJlc3MuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQQWRkcmVzcy5qYXZhCmluZGV4IGFkMjFlMDYuLmNjOTFlYmYgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQQWRkcmVzcy5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQQWRkcmVzcy5qYXZhCkBAIC0zNCwxMyArMzQsNDkgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGFzQ2lkck1hc2tMZW5ndGgoKTsKIAogICAgIC8qKgorICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRoZSBJUEFkZHJlc3MgaXMgdW5zcGVjaWZpZWQuCisgICAgICoKKyAgICAgKiA8cD5UaGUgPGVtPnVuc3BlY2lmaWVkPC9lbT4gYWRkcmVzc2VzLCBhbHNvIGtub3duIGFzIHRoZQorICAgICAqIDxlbT53aWxkY2FyZDwvZW0+IGFkZHJlc3NlcywgcmVmZXIgdG86CisgICAgICogPHVsPgorICAgICAqIDxsaT50aGUge0BsaW5rIElQdjRBZGRyZXNzfSBvZiB7QGNvZGUgMC4wLjAuMH0KKyAgICAgKiA8bGk+dGhlIHtAbGluayBJUHY2QWRkcmVzc30gb2Yge0Bjb2RlIDo6fQorICAgICAqIDwvdWw+CisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIElQQWRkcmVzcyBpcyB1bnNwZWNpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNVbnNwZWNpZmllZCgpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB7QGNvZGUgdHJ1ZX0gaWYgdGhlIElQQWRkcmVzcyBpcyBhIGxvb3BiYWNrIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiA8cD48ZW0+TG9vcGJhY2s8L2VtPiBhZGRyZXNzZXMgcmVmZXIgdG86CisgICAgICogPHVsPgorICAgICAqIDxsaT5hbnkge0BsaW5rIElQdjRBZGRyZXNzfSB3aXRoaW4ge0Bjb2RlIDEyNy4wLjAuMC84fQorICAgICAqIDxsaT50aGUge0BsaW5rIElQdjZBZGRyZXNzfSBvZiB7QGNvZGUgOjoxfQorICAgICAqIDwvdWw+CisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIElQQWRkcmVzcyBpcyBhIGxvb3BiYWNrIGFkZHJlc3MsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzTG9vcGJhY2soKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRoZSBJUEFkZHJlc3MgaXMgYSBsaW5rIGxvY2FsIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiA8cD48ZW0+TGluayBsb2NhbDwvZW0+IGFkZHJlc3NlcyByZWZlciB0bzoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPmFueSB7QGxpbmsgSVB2NEFkZHJlc3N9IHdpdGhpbiB7QGNvZGUgMTY5LjI1NC4wLjAvMTZ9CisgICAgICogPGxpPmFueSB7QGxpbmsgSVB2NkFkZHJlc3N9IHdpdGhpbiB7QGNvZGUgZmU4MDo6LzEwfQorICAgICAqIDwvdWw+CisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIElQQWRkcmVzcyBpcyBhIGxpbmsgbG9jYWwgYWRkcmVzcywgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNMaW5rTG9jYWwoKTsKKworICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGUgSVBBZGRyZXNzIGlzIHRoZSBnbG9iYWwgYnJvYWRjYXN0IGFkZHJlc3MKICAgICAgKiAyNTUuMjU1LjI1NS4yNTUgaW4gY2FzZSBvZiBJUHY0CiAgICAgICogQHJldHVybiBib29sZWFuIHRydWUgb3IgZmFsc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0Jyb2FkY2FzdCgpOwogCi0KICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhlIElQQWRkcmVzcyBpcyB0aGUgbXVsdGljYXN0IGFkZHJlc3MKICAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZQpAQCAtMTExLDYgKzE0NywyMCBAQAogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBieXRlW10gZ2V0Qnl0ZXMoKTsKIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYW4ge0BsaW5rIEluZXRBZGRyZXNzfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgSVAgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIDxwPlRoZSByZXN1bHRpbmcge0BsaW5rIEluZXRBZGRyZXNzfSBvYmplY3Q6CisgICAgICogPHVsPgorICAgICAqIDxsaT53aWxsIG5vdCBjYXJyeSBhIGhvc3RuYW1lCisgICAgICogPGxpPndpbGwgbm90IGNhcnJ5IGEgbm9uLXplcm8gc2NvcGUgSUQgb3Igc2NvcGVkIGludGVyZmFjZSwKKyAgICAgKiAgICAgaW4gdGhlIGNhc2Ugb2Yge0BsaW5rIEluZXQ2QWRkcmVzc30KKyAgICAgKiA8L3VsPgorICAgICAqIEByZXR1cm4gYW4ge0BsaW5rIEluZXRBZGRyZXNzfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgSVAgYWRkcmVzcworICAgICAqLworICAgIEBOb25udWxsCisgICAgcHVibGljIGFic3RyYWN0IEluZXRBZGRyZXNzIHRvSW5ldEFkZHJlc3MoKTsKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgdG9TdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVB2NEFkZHJlc3MuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjRBZGRyZXNzLmphdmEKaW5kZXggNTNlODA3MS4uMzdkZDkxOSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVB2NEFkZHJlc3MuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY0QWRkcmVzcy5qYXZhCkBAIC0xLDIxICsxLDI0IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAoraW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworCitpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuY29tbW9uLmJhc2UuUHJlY29uZGl0aW9ucy5jaGVja0FyZ3VtZW50OworCiBpbXBvcnQgamF2YS5uZXQuSW5ldDRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiAKIGltcG9ydCBqYXZheC5hbm5vdGF0aW9uLk5vbm51bGw7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLldyaXRlYWJsZTsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuUHJlY29uZGl0aW9uczsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24ucHJpbWl0aXZlcy5VbnNpZ25lZEludHM7CiAKLWltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuV3JpdGVhYmxlOwotaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7Ci1pbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwotCiAvKioKICAqIFdyYXBwZXIgYXJvdW5kIGFuIElQdjRBZGRyZXNzIGFkZHJlc3MKICAqCkBAIC00NCw3ICs0Nyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZWFkZXIgaW1wbGVtZW50cyBPRk1lc3NhZ2VSZWFkZXI8SVB2NEFkZHJlc3M+IHsKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBJUHY0QWRkcmVzcyByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcHVibGljIElQdjRBZGRyZXNzIHJlYWRGcm9tKEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBJUHY0QWRkcmVzcyhiYi5yZWFkSW50KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtODYsMTggKzg5LDM0IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNVbnNwZWNpZmllZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXF1YWxzKE5PTkUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzTG9vcGJhY2soKSB7CisgICAgICAgIHJldHVybiAoKHJhd1ZhbHVlID4+PiAyNCkgJiAweEZGKSA9PSAxMjc7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNMaW5rTG9jYWwoKSB7CisgICAgICAgIHJldHVybiAoKHJhd1ZhbHVlID4+PiAyNCkgJiAweEZGKSA9PSAxNjkKKyAgICAgICAgICAgICAgICAmJiAoKHJhd1ZhbHVlID4+PiAxNikgJiAweEZGKSA9PSAyNTQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNCcm9hZGNhc3QoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhOT19NQVNLKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBJUHY0IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGRlZmluZWQgYnkgdGhlIGxlYWRpbmcgYWRkcmVzcyBiaXRzIG9mIDExMTAgCisgICAgICogSVB2NCBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBkZWZpbmVkIGJ5IHRoZSBsZWFkaW5nIGFkZHJlc3MgYml0cyBvZiAxMTEwCiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNNdWx0aWNhc3QoKSB7CiAgICAgICAgIHJldHVybiAoKHJhd1ZhbHVlID4+PiAyNCkgJiAweEYwKSA9PSAweEUwOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJUHY0QWRkcmVzcyBhbmQoSVB2NEFkZHJlc3Mgb3RoZXIpIHsKICAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwob3RoZXIsICJvdGhlciBtdXN0IG5vdCBiZSBudWxsIik7CkBAIC0xNTMsNiArMTcyLDQ4IEBACiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIHtAY29kZSBJUHY0QWRkcmVzc30gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZ2l2ZW4KKyAgICAgKiBJUCBhZGRyZXNzLiBUaGUgYXJndW1lbnRzIGFyZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXI6IHRoZSBoaWdoZXN0CisgICAgICogb3JkZXIgYnl0ZSBvZiB0aGUgYWRkcmVzcyBpcyBpbiB7QGNvZGUgb2N0ZXQxfS4KKyAgICAgKgorICAgICAqIDxwPkZvciBleGFtcGxlLCB7QGNvZGUgSVB2NEFkZHJlc3Mub2YoMTkyLCAwLCAyLCAxMDEpfSB5aWVsZHMKKyAgICAgKiB0aGUgSVB2NCBhZGRyZXNzIG9mIHtAY29kZSAiMTkyLjAuMi4xMDEifS4KKyAgICAgKgorICAgICAqIDxwPlVzZSBjYXV0aW9uIHdoZW4gcHJvdmlkaW5nIGJ5dGUtdHlwZWQgdmFsdWVzIGFzIGFyZ3VtZW50cy4KKyAgICAgKiAiQnl0ZS10eXBlZCB2YWx1ZXMiIGhlcmUgcmVmZXIgdG8gdmFsdWVzIHRoYXQgYXJlIG9mIGVpdGhlciB0aGUKKyAgICAgKiBwcmltaXRpdmUge0Bjb2RlIGJ5dGV9IHR5cGUgb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXIKKyAgICAgKiBjbGFzcyB7QGxpbmsgQnl0ZX0uIEJ5dGUtdHlwZWQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcgYXJlCisgICAgICogZXNzZW50aWFsbHkgbmVnYXRpdmUgdmFsdWVzIGFuZCB3aWxsIGJlIGNhc3RlZCB0byBuZWdhdGl2ZQorICAgICAqIHtAY29kZSBpbnR9IHZhbHVlcywgdGh1cyBmYWlsaW5nIHRoZSBudW1lcmljIHJhbmdlIGNoZWNrcworICAgICAqIGVuZm9yY2VkIGJ5IHRoaXMgbWV0aG9kLiBDb25zaWRlciB1c2luZyB7QGxpbmsgI29mKGJ5dGVbXSl9CisgICAgICogaW5zdGVhZCB3aGVuIGhhbmRsaW5nIGJ5dGUtdHlwZWQgdmFsdWVzLgorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYW55IG9mIHRoZSBvY3RldHMgd2VyZQorICAgICAqICAgICAgICAgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIDI1NQorICAgICAqIEBwYXJhbSBvY3RldDEgdGhlIGhpZ2hlc3Qgb3JkZXIgYnl0ZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAgICAgKiBAcGFyYW0gb2N0ZXQyIHRoZSAybmQtaGlnaGVzdCBvcmRlciBieXRlIGluIG5ldHdvcmsgYnl0ZSBvcmRlcgorICAgICAqIEBwYXJhbSBvY3RldDMgdGhlIDJuZC1sb3dlc3Qgb3JkZXIgYnl0ZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAgICAgKiBAcGFyYW0gb2N0ZXQ0IHRoZSBsb3dlc3Qgb3JkZXIgYnl0ZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAgICAgKiBAcmV0dXJuIGFuIHtAY29kZSBJUHY0QWRkcmVzc30gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZ2l2ZW4KKyAgICAgKiBJUCBhZGRyZXNzCisgICAgICovCisgICAgQE5vbm51bGwKKyAgICBwdWJsaWMgc3RhdGljIElQdjRBZGRyZXNzIG9mKAorICAgICAgICAgICAgaW50IG9jdGV0MSwgaW50IG9jdGV0MiwgaW50IG9jdGV0MywgaW50IG9jdGV0NCkgeworICAgICAgICBjaGVja0FyZ3VtZW50KChvY3RldDEgJiAweEZGKSA9PSBvY3RldDEKKyAgICAgICAgICAgICAgICAmJiAob2N0ZXQyICYgMHhGRikgPT0gb2N0ZXQyCisgICAgICAgICAgICAgICAgJiYgKG9jdGV0MyAmIDB4RkYpID09IG9jdGV0MworICAgICAgICAgICAgICAgICYmIChvY3RldDQgJiAweEZGKSA9PSBvY3RldDQsCisgICAgICAgICAgICAgICAgIkludmFsaWQgSVB2NCBhZGRyZXNzICVzLiVzLiVzLiVzIiwKKyAgICAgICAgICAgICAgICBvY3RldDEsIG9jdGV0Miwgb2N0ZXQzLCBvY3RldDQpOworICAgICAgICBpbnQgcmF3ID0gKG9jdGV0MSAmIDB4RkYpIDw8IDI0CisgICAgICAgICAgICAgICAgfCAob2N0ZXQyICYgMHhGRikgPDwgMTYKKyAgICAgICAgICAgICAgICB8IChvY3RldDMgJiAweEZGKSA8PCA4CisgICAgICAgICAgICAgICAgfCAob2N0ZXQ0ICYgMHhGRikgPDwgMDsKKyAgICAgICAgcmV0dXJuIElQdjRBZGRyZXNzLm9mKHJhdyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiB7QGNvZGUgSVB2NEFkZHJlc3N9IG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGdpdmVuCiAgICAgICogSVAgYWRkcmVzcy4KICAgICAgKgogICAgICAqIEBwYXJhbSByYXcgIHRoZSByYXcgSVAgYWRkcmVzcyByZXByZXNlbnRlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyCkBAIC0zMDksNiArMzcwLDE3IEBACiAgICAgICAgIHJldHVybiBMRU5HVEg7CiAgICAgfQogCisgICAgQE5vbm51bGwKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW5ldDRBZGRyZXNzIHRvSW5ldEFkZHJlc3MoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKEluZXQ0QWRkcmVzcykgSW5ldEFkZHJlc3MuZ2V0QnlBZGRyZXNzKGdldEJ5dGVzKCkpOworICAgICAgICB9IGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2V0dGluZyBJbmV0QWRkcmVzcyBmb3IgdGhlIElQQWRkcmVzcyAiICsgdGhpcywgZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHJlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CkBAIC0zMTksMTEgKzM5MSwxMSBAQAogICAgICAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVJbnQocmF3VmFsdWUpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgSVB2NEFkZHJlc3MgcmVhZDRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgc3RhdGljIElQdjRBZGRyZXNzIHJlYWQ0Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIHJldHVybiBJUHY0QWRkcmVzcy5vZihjLnJlYWRJbnQoKSk7CiAgICAgfQogCkBAIC0zNjUsNyArNDM3LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVRvKENoYW5uZWxCdWZmZXIgYmIpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvKEJ5dGVCdWYgYmIpIHsKICAgICAgICAgYmIud3JpdGVJbnQocmF3VmFsdWUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZBZGRyZXNzLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY2QWRkcmVzcy5qYXZhCmluZGV4IGZlZTA0YWMuLjQ5N2E0MGMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZBZGRyZXNzLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVB2NkFkZHJlc3MuamF2YQpAQCAtMSwyMiArMSwyNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKKworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlByZWNvbmRpdGlvbnMuY2hlY2tBcmd1bWVudDsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24uYmFzZS5QcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbDsKKwogaW1wb3J0IGphdmEubmV0LkluZXQ2QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKK2ltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwogCiBpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5Ob25udWxsOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZNZXNzYWdlUmVhZGVyOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5Xcml0ZWFibGU7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlByZWNvbmRpdGlvbnM7CiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuVW5zaWduZWRMb25nczsKIAotaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5Xcml0ZWFibGU7Ci1pbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GTWVzc2FnZVJlYWRlcjsKLWltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7Ci0KIC8qKgogICogSVB2NiBhZGRyZXNzIG9iamVjdC4gSW5zdGFuY2UgY29udHJvbGxlZCwgaW1tdXRhYmxlLiBJbnRlcm5hbCByZXByZXNlbnRhdGlvbjoKICAqIHR3byA2NCBiaXQgbG9uZ3MgKG5vdCB0aGF0IHlvdSdkIGhhdmUgdG8ga25vdykuCkBAIC0yNCw3ICsyOCw3IEBACiAgKiBAYXV0aG9yIEFuZHJlYXMgV3VuZHNhbSB7QGxpdGVyYWwgPH1hbmRyZWFzLnd1bmRzYW1AdGVsZXRlYWNoLmRle0BsaXRlcmFsID59CiAgKi8KIHB1YmxpYyBjbGFzcyBJUHY2QWRkcmVzcyBleHRlbmRzIElQQWRkcmVzczxJUHY2QWRkcmVzcz4gaW1wbGVtZW50cyBXcml0ZWFibGUgewotICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gMTY7CiAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHJhdzE7CiAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHJhdzI7CiAKQEAgLTUwLDcgKzU0LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFJlYWRlciBpbXBsZW1lbnRzIE9GTWVzc2FnZVJlYWRlcjxJUHY2QWRkcmVzcz4gewogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIElQdjZBZGRyZXNzIHJlYWRGcm9tKENoYW5uZWxCdWZmZXIgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgICAgICBwdWJsaWMgSVB2NkFkZHJlc3MgcmVhZEZyb20oQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IElQdjZBZGRyZXNzKGJiLnJlYWRMb25nKCksIGJiLnJlYWRMb25nKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTExLDE4ICsxMTUsNzQgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1Vuc3BlY2lmaWVkKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMoTk9ORSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNMb29wYmFjaygpIHsKKyAgICAgICAgcmV0dXJuIHJhdzEgPT0gMCAmJiByYXcyID09IDE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNMaW5rTG9jYWwoKSB7CisgICAgICAgIHJldHVybiAocmF3MSAmIDB4RkZDMF8wMDAwXzAwMDBfMDAwMEwpID09IDB4RkU4MF8wMDAwXzAwMDBfMDAwMEw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNCcm9hZGNhc3QoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhOT19NQVNLKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGRlZmluZWQgYnkgdGhlIHByZWZpeCBmZjAwOjovOCAKKyAgICAgKiBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGRlZmluZWQgYnkgdGhlIHByZWZpeCBmZjAwOjovOAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGlzTXVsdGljYXN0KCkgewogICAgICAgICByZXR1cm4gKHJhdzEgPj4+IDU2KSA9PSAweEZGTDsKICAgICB9Ci0gICAgCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBNb2RpZmllZCBFVUktNjQgZm9ybWF0IGludGVyZmFjZSBpZGVudGlmaWVyIHRoYXQKKyAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIE1BQyBhZGRyZXNzLgorICAgICAqCisgICAgICogPHA+UmVmZXIgdG8gdGhlIGZvbGxvd2luZ3MgZm9yIHRoZSBjb252ZXJzaW9uIGRldGFpbHM6CisgICAgICogPHVsPgorICAgICAqIDxsaT5SRkMgNzA0MiAtIFNlY3Rpb24gMi4yLjEKKyAgICAgKiA8bGk+UkZDIDUzNDIgLSBTZWN0aW9uIDIuMi4xIChPYnNvbGV0ZWQgYnkgUkZDIDcwNDIpCisgICAgICogPGxpPlJGQyA0MjkxIC0gQXBwZW5kaXggQQorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyB0b01vZGlmaWVkRXVpNjQoQE5vbm51bGwgTWFjQWRkcmVzcyBtYWNBZGRyZXNzKSB7CisgICAgICAgIGNoZWNrTm90TnVsbChtYWNBZGRyZXNzLCAibWFjQWRkcmVzcyBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIHJldHVybiAgICgoMHhGRkZGX0ZGMDBfMDAwMF8wMDAwTCAmIChtYWNBZGRyZXNzLmdldExvbmcoKSA8PCAxNikpCisgICAgICAgICAgICAgICAgXiAoMHgwMjAwXzAwMDBfMDAwMF8wMDAwTCkpCisgICAgICAgICAgICAgICAgfCAoMHgwMDAwXzAwRkZfRkUwMF8wMDAwTCkKKyAgICAgICAgICAgICAgICB8ICgweDAwMDBfMDAwMF8wMEZGX0ZGRkZMICYgbWFjQWRkcmVzcy5nZXRMb25nKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRoZSBzZWNvbmQgKGxvd2VyLW9yZGVyKSA2NC1iaXQgYmxvY2sgb2YKKyAgICAgKiB0aGlzIGFkZHJlc3MgaXMgZXF1YWwgdG8gdGhlIE1vZGlmaWVkIEVVSS02NCBmb3JtYXQgaW50ZXJmYWNlCisgICAgICogaWRlbnRpZmllciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgTUFDIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiA8cD5SZWZlciB0byB0aGUgZm9sbG93aW5ncyBmb3IgdGhlIGRldGFpbHMgb2YgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAqIE1BQyBhZGRyZXNzZXMgYW5kIE1vZGlmaWVkIEVVSS02NCBmb3JtYXQgaW50ZXJmYWNlIGlkZW50aWZpZXJzOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+UkZDIDcwNDIgLSBTZWN0aW9uIDIuMi4xCisgICAgICogPGxpPlJGQyA1MzQyIC0gU2VjdGlvbiAyLjIuMSAoT2Jzb2xldGVkIGJ5IFJGQyA3MDQyKQorICAgICAqIDxsaT5SRkMgNDI5MSAtIEFwcGVuZGl4IEEKKyAgICAgKiA8L3VsPgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgYXNzdW1lcyB0aGUgc2Vjb25kIChsb3dlci1vcmRlcikgNjQtYml0IGJsb2NrIHRvIGJlCisgICAgICogYSA2NC1iaXQgaW50ZXJmYWNlIGlkZW50aWZpZXIsIHdoaWNoIG1heSBub3QgYWx3YXlzIGJlIHRydWUuCisgICAgICogQHBhcmFtIG1hY0FkZHJlc3MgdGhlIE1BQyBhZGRyZXNzIHRvIGNoZWNrCisgICAgICogQHJldHVybiBib29sZWFuIHRydWUgb3IgZmFsc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc01vZGlmaWVkRXVpNjREZXJpdmVkKEBOb25udWxsIE1hY0FkZHJlc3MgbWFjQWRkcmVzcykgeworICAgICAgICByZXR1cm4gcmF3MiA9PSB0b01vZGlmaWVkRXVpNjQobWFjQWRkcmVzcyk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElQdjZBZGRyZXNzIGFuZChJUHY2QWRkcmVzcyBvdGhlcikgewogICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbChvdGhlciwgIm90aGVyIG11c3Qgbm90IGJlIG51bGwiKTsKQEAgLTMyOSw2ICszODksNTQgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIHtAY29kZSBJUHY2QWRkcmVzc30gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZ2l2ZW4KKyAgICAgKiBNQUMgYWRkcmVzcyBpbiB0aGUgc3BlY2lmaWVkIG5ldHdvcmsuCisgICAgICoKKyAgICAgKiA8cD5UaGUgZmlyc3QgKGhpZ2hlci1vcmRlcikgNjQtYml0IGJsb2NrIG9mIHRoZSByZXR1cm5lZCBhZGRyZXNzCisgICAgICogd2lsbCBiZSB0aGUgbmV0d29yayBwcmVmaXggZGVyaXZlZCBmcm9tIHRoZSBzcGVjaWZpZWQgbmV0d29yay4KKyAgICAgKiBUaGUgc3BlY2lmaWVkIG5ldHdvcmsgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmdzOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+e0BsaW5rICNpc0NpZHJNYXNrKCl9IHtAY29kZSA9PSB0cnVlfQorICAgICAqIDxsaT57QGxpdGVyYWwgMCA8PSB9IHtAbGluayAjYXNDaWRyTWFza0xlbmd0aCgpfSB7QGxpdGVyYWwgPD0gNjR9CisgICAgICogPC91bD4KKyAgICAgKgorICAgICAqIDxwPlRoZSBzZWNvbmQgKGxvd2VyLW9yZGVyKSA2NC1iaXQgYmxvY2sgb2YgdGhlIHJldHVybmVkIGFkZHJlc3MKKyAgICAgKiB3aWxsIGJlIGVxdWFsIHRvIHRoZSBNb2RpZmllZCBFVUktNjQgZm9ybWF0IGludGVyZmFjZSBpZGVudGlmaWVyCisgICAgICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIE1BQyBhZGRyZXNzLgorICAgICAqCisgICAgICogPHA+UmVmZXIgdG8gdGhlIGZvbGxvd2luZ3MgZm9yIHRoZSBkZXRhaWxzIG9mIGNvbnZlcnNpb25zIGJldHdlZW4KKyAgICAgKiBNQUMgYWRkcmVzc2VzIGFuZCBNb2RpZmllZCBFVUktNjQgZm9ybWF0IGludGVyZmFjZSBpZGVudGlmaWVyczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlJGQyA3MDQyIC0gU2VjdGlvbiAyLjIuMQorICAgICAqIDxsaT5SRkMgNTM0MiAtIFNlY3Rpb24gMi4yLjEgKE9ic29sZXRlZCBieSBSRkMgNzA0MikKKyAgICAgKiA8bGk+UkZDIDQyOTEgLSBBcHBlbmRpeCBBCisgICAgICogPC91bD4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBzcGVjaWZpZWQgbmV0d29yayBkb2VzIG5vdAorICAgICAqICAgICAgICAgbWVldCB0aGUgYWZvcmVtZW50aW9uZWQgcmVxdWlyZW1lbnRzCisgICAgICogQHBhcmFtIG5ldHdvcmsgdGhlIElQdjYgbmV0d29yaworICAgICAqIEBwYXJhbSBtYWNBZGRyZXNzIHRoZSBNQUMgYWRkcmVzcworICAgICAqIEByZXR1cm4gYW4ge0Bjb2RlIElQdjZBZGRyZXNzfSBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbgorICAgICAqIE1BQyBhZGRyZXNzIGluIHRoZSBzcGVjaWZpZWQgbmV0d29yaworICAgICAqLworICAgIEBOb25udWxsCisgICAgcHVibGljIHN0YXRpYyBJUHY2QWRkcmVzcyBvZigKKyAgICAgICAgICAgIEBOb25udWxsIElQdjZBZGRyZXNzV2l0aE1hc2sgbmV0d29yaywKKyAgICAgICAgICAgIEBOb25udWxsIE1hY0FkZHJlc3MgbWFjQWRkcmVzcykgeworCisgICAgICAgIGNoZWNrTm90TnVsbChuZXR3b3JrLCAibmV0d29yayBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIGNoZWNrQXJndW1lbnQobmV0d29yay5nZXRNYXNrKCkuaXNDaWRyTWFzaygpCisgICAgICAgICAgICAgICAgJiYgbmV0d29yay5nZXRNYXNrKCkuYXNDaWRyTWFza0xlbmd0aCgpIDw9IDY0LAorICAgICAgICAgICAgICAgICJuZXR3b3JrIG11c3QgY29uc2lzdCBvZiBhIG1hc2sgb2YgNjQgb3IgbGVzcyBsZWFkaW5nIDEgYml0cyIKKyAgICAgICAgICAgICAgICArICIgYW5kIG5vIG90aGVyIDEgYml0czogJXMiLCBuZXR3b3JrKTsKKworICAgICAgICBsb25nIHJhdzEgPSBuZXR3b3JrLmdldFZhbHVlKCkucmF3MTsKKyAgICAgICAgbG9uZyByYXcyID0gdG9Nb2RpZmllZEV1aTY0KG1hY0FkZHJlc3MpOworCisgICAgICAgIHJldHVybiBJUHY2QWRkcmVzcy5vZihyYXcxLCByYXcyKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIHtAY29kZSBJUHY2QWRkcmVzc30gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUKICAgICAgKiBDSURSIHN1Ym5ldCBtYXNrIG9mIHRoZSBnaXZlbiBwcmVmaXggbGVuZ3RoLgogICAgICAqCkBAIC0zOTQsNiArNTAyLDcgQEAKIAogICAgIHByaXZhdGUgdm9sYXRpbGUgYnl0ZVtdIGJ5dGVzQ2FjaGUgPSBudWxsOwogCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJ5dGVbXSBnZXRCeXRlcygpIHsKICAgICAgICAgaWYgKGJ5dGVzQ2FjaGUgPT0gbnVsbCkgewogICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CkBAIC00MjcsNiArNTM2LDE3IEBACiAgICAgICAgIHJldHVybiBMRU5HVEg7CiAgICAgfQogCisgICAgQE5vbm51bGwKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW5ldDZBZGRyZXNzIHRvSW5ldEFkZHJlc3MoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKEluZXQ2QWRkcmVzcykgSW5ldEFkZHJlc3MuZ2V0QnlBZGRyZXNzKGdldEJ5dGVzKCkpOworICAgICAgICB9IGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2V0dGluZyBJbmV0QWRkcmVzcyBmb3IgdGhlIElQQWRkcmVzcyAiICsgdGhpcywgZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gdG9TdHJpbmcodHJ1ZSwgZmFsc2UpOwpAQCAtNDQxLDcgKzU2MSwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiMTYgYml0IHdvcmQgaW5kZXggbXVzdCBiZSBpbiBbMCw3XSIpOwogICAgIH0KIAotICAgIC8qKiBnZXQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB3b3JkIHdoZXJlIHRvIGFwcGx5IElQdjYgemVybyBjb21wcmVzc2lvbiAqLworICAgIC8qKiAKKyAgICAgKiBnZXQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB3b3JkIHdoZXJlIHRvIGFwcGx5IElQdjYgemVybyBjb21wcmVzc2lvbiAKKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4CisgICAgICovCiAgICAgcHVibGljIGludCBnZXRaZXJvQ29tcHJlc3NTdGFydCgpIHsKICAgICAgICAgaW50IHN0YXJ0ID0gSW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgIGludCBtYXhMZW5ndGggPSAtMTsKQEAgLTQ1NCw3ICs1NzgsNyBAQAogICAgICAgICAgICAgICAgIGlmIChnZXRVbnNpZ25lZFNob3J0V29yZChpKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGVuZCBvZiB0aGlzIGNhbmRpZGF0ZSB3b3JkCiAgICAgICAgICAgICAgICAgICAgIGludCBjYW5kaWRhdGVMZW5ndGggPSBpIC0gY2FuZGlkYXRlU3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVMZW5ndGggPj0gbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoY2FuZGlkYXRlTGVuZ3RoID4gMSkgJiYgKGNhbmRpZGF0ZUxlbmd0aCA+IG1heExlbmd0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gY2FuZGlkYXRlU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBjYW5kaWRhdGVMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ3MCw3ICs1OTQsNyBAQAogCiAgICAgICAgIGlmIChjYW5kaWRhdGVTdGFydCA+PSAwKSB7CiAgICAgICAgICAgICBpbnQgY2FuZGlkYXRlTGVuZ3RoID0gOCAtIGNhbmRpZGF0ZVN0YXJ0OwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUxlbmd0aCA+PSBtYXhMZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICgoY2FuZGlkYXRlTGVuZ3RoID4gMSkgJiYgKGNhbmRpZGF0ZUxlbmd0aCA+IG1heExlbmd0aCkpIHsKICAgICAgICAgICAgICAgICBzdGFydCA9IGNhbmRpZGF0ZVN0YXJ0OwogICAgICAgICAgICAgICAgIG1heExlbmd0aCA9IGNhbmRpZGF0ZUxlbmd0aDsKICAgICAgICAgICAgIH0KQEAgLTUzOSwxMiArNjYzLDEyIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMTZCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTE2Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVMb25nKHRoaXMucmF3MSk7CiAgICAgICAgIGMud3JpdGVMb25nKHRoaXMucmF3Mik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBJUHY2QWRkcmVzcyByZWFkMTZCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgSVB2NkFkZHJlc3MgcmVhZDE2Qnl0ZXMoQnl0ZUJ1ZiBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIElQdjZBZGRyZXNzLm9mKGMucmVhZExvbmcoKSwgYy5yZWFkTG9uZygpKTsKICAgICB9CiAKQEAgLTU2OSw3ICs2OTMsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQnl0ZUJ1ZiBiYikgewogICAgICAgICBiYi53cml0ZUxvbmcocmF3MSk7CiAgICAgICAgIGJiLndyaXRlTG9uZyhyYXcyKTsKICAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY2QWRkcmVzc1dpdGhNYXNrLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY2QWRkcmVzc1dpdGhNYXNrLmphdmEKaW5kZXggZWUzNDkyMy4uYTUwZGExYSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVB2NkFkZHJlc3NXaXRoTWFzay5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZBZGRyZXNzV2l0aE1hc2suamF2YQpAQCAtNSw2ICs1LDMyIEBACiBwdWJsaWMgY2xhc3MgSVB2NkFkZHJlc3NXaXRoTWFzayBleHRlbmRzIElQQWRkcmVzc1dpdGhNYXNrPElQdjZBZGRyZXNzPiB7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBJUHY2QWRkcmVzc1dpdGhNYXNrIE5PTkUgPSBvZihJUHY2QWRkcmVzcy5OT05FLCBJUHY2QWRkcmVzcy5OT05FKTsKIAorICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgdGhlIGxpbmstbG9jYWwgbmV0d29yayBjb25maWd1cmF0aW9uIHVzZWQgaW4gcHJhY3RpY2UsCisgICAgICogaS5lLiB7QGNvZGUgZmU4MDo6LzY0fS4KKyAgICAgKgorICAgICAqIDxwPlNlZSBTZWN0aW9uIDIuNS42IG9mIFJGQyA0MjkxLgorICAgICAqCisgICAgICogQHNlZSAjTElOS19MT0NBTF9SRVNFUlZFRAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgSVB2NkFkZHJlc3NXaXRoTWFzayBMSU5LX0xPQ0FMX05FVFdPUksKKyAgICAgICAgICAgID0gSVB2NkFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgLm9mKDB4RkU4MF8wMDAwXzAwMDBfMDAwMEwsIDB4MDAwMF8wMDAwXzAwMDBfMDAwMEwpCisgICAgICAgICAgICAgICAgICAgIC53aXRoTWFza09mTGVuZ3RoKDY0KTsKKworICAgIC8qKgorICAgICAqIENvbnRhaW5zIGFsbCBhZGRyZXNzZXMgcmVzZXJ2ZWQgZm9yIGxpbmstbG9jYWwgdXNhZ2VzLAorICAgICAqIGkuZS4ge0Bjb2RlIGZlODA6Oi8xMH0uCisgICAgICoKKyAgICAgKiA8cD5TZWUgU2VjdGlvbiAyLjQgb2YgUkZDIDQyOTEuCisgICAgICoKKyAgICAgKiBAc2VlICNMSU5LX0xPQ0FMX05FVFdPUksKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIElQdjZBZGRyZXNzV2l0aE1hc2sgTElOS19MT0NBTF9SRVNFUlZFRAorICAgICAgICAgICAgPSBJUHY2QWRkcmVzcworICAgICAgICAgICAgICAgICAgICAub2YoMHhGRTgwXzAwMDBfMDAwMF8wMDAwTCwgMHgwMDAwXzAwMDBfMDAwMF8wMDAwTCkKKyAgICAgICAgICAgICAgICAgICAgLndpdGhNYXNrT2ZMZW5ndGgoMTApOworCiAgICAgcHJpdmF0ZSBJUHY2QWRkcmVzc1dpdGhNYXNrKElQdjZBZGRyZXNzIHZhbHVlLCBJUHY2QWRkcmVzcyBtYXNrKSB7CiAgICAgICAgIHN1cGVyKHZhbHVlLCBtYXNrKTsKICAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY2Rmxvd0xhYmVsLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY2Rmxvd0xhYmVsLmphdmEKaW5kZXggY2ZlZmQzOS4uN2M4NDY4NCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVB2NkZsb3dMYWJlbC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZGbG93TGFiZWwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICByZXR1cm4gIjB4IiArIEludGVnZXIudG9IZXhTdHJpbmcobGFiZWwpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlSW50KHRoaXMubGFiZWwpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgSVB2NkZsb3dMYWJlbCByZWFkNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBJUHY2Rmxvd0xhYmVsIHJlYWQ0Qnl0ZXMoQnl0ZUJ1ZiBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIElQdjZGbG93TGFiZWwub2YoKGludCkoYy5yZWFkVW5zaWduZWRJbnQoKSAmIDB4RkZGRkZGRkYpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lwRHNjcC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEKaW5kZXggZjE5ZTA1MS4uYTczOGFlMyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEKQEAgLTEsNiArMSw2IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CkBAIC0yMzAsMTEgKzIzMCwxMSBAQAogICAgICAgICByZXR1cm4gIjB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZHNjcCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRlKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUJ5dGUodGhpcy5kc2NwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIElwRHNjcCByZWFkQnl0ZShDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgSXBEc2NwIHJlYWRCeXRlKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBJcERzY3Aub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JcEVjbi5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSXBFY24uamF2YQppbmRleCA2NTRkZjAxLi5lYjZhZTY2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JcEVjbi5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lwRWNuLmphdmEKQEAgLTEsNiArMSw2IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CkBAIC00OSwxMSArNDksMTEgQEAKICAgICAgICAgcmV0dXJuIChlY24gPCAzID8gIjAiIDogIiIpICsgSW50ZWdlci50b0JpbmFyeVN0cmluZyhlY24pOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGUoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVCeXRlKHRoaXMuZWNuKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIElwRWNuIHJlYWRCeXRlKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBJcEVjbiByZWFkQnl0ZShCeXRlQnVmIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gSXBFY24ub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JcFByb3RvY29sLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JcFByb3RvY29sLmphdmEKaW5kZXggODQ0M2EzMS4uMTRlMDFhNyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSXBQcm90b2NvbC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lwUHJvdG9jb2wuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuU2hvcnRzOwpAQCAtNjE1LDExICs2MTUsMTEgQEAKICAgICAgICAgcmV0dXJuICIweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHByb3RvKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVCeXRlKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlQnl0ZSh0aGlzLnByb3RvKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIElwUHJvdG9jb2wgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHN0YXRpYyBJcFByb3RvY29sIHJlYWRCeXRlKEJ5dGVCdWYgYykgewogICAgICAgICByZXR1cm4gSXBQcm90b2NvbC5vZihjLnJlYWRVbnNpZ25lZEJ5dGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9MYWdJZC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvTGFnSWQuamF2YQppbmRleCA1MTM2NGUxLi4wNGU1OWQ0IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9MYWdJZC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0xhZ0lkLmphdmEKQEAgLTIsNyArMiw3IEBACiAKIGltcG9ydCBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuSW1tdXRhYmxlOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuVW5zaWduZWRJbnRzOwpAQCAtNjcsMTEgKzY3LDExIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlSW50KHJhd1ZhbHVlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIExhZ0lkIHJlYWQ0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHN0YXRpYyBMYWdJZCByZWFkNEJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICByZXR1cm4gTGFnSWQub2YoYy5yZWFkSW50KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvTWFjQWRkcmVzcy5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvTWFjQWRkcmVzcy5qYXZhCmluZGV4IGI3M2RiNDMuLjdhNDg0ZjQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL01hY0FkZHJlc3MuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9NYWNBZGRyZXNzLmphdmEKQEAgLTQsNyArNCw2IEBACiAKIGltcG9ydCBqYXZheC5hbm5vdGF0aW9uLk5vbm51bGw7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy51dGlsLkhleFN0cmluZzsKIApAQCAtMTIsNiArMTEsOCBAQAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLkxvbmdzOwogCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CisKIC8qKgogICogV3JhcHBlciBhcm91bmQgYSA2IGJ5dGUgbWFjIGFkZHJlc3MuCiAgKgpAQCAtMTksNiArMjAsNyBAQAogICovCiAKIHB1YmxpYyBjbGFzcyBNYWNBZGRyZXNzIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8TWFjQWRkcmVzcz4geworCiAgICAgc3RhdGljIGZpbmFsIGludCBNYWNBZGRyTGVuID0gNjsKICAgICBwcml2YXRlIGZpbmFsIGxvbmcgcmF3VmFsdWU7CiAKQEAgLTMzLDExICszNSwxNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBMTERQX01BQ19BRERSRVNTX01BU0sgPSAweGZmZmZmZmZmZmZmMEw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBMTERQX01BQ19BRERSRVNTX1ZBTFVFID0gMHgwMTgwYzIwMDAwMDBMOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hY0FkZHJlc3MgSVBWNF9NVUxUSUNBU1RfQkFTRV9BRERSRVNTID0KKyAgICAgICAgICAgTWFjQWRkcmVzcy5vZigiMDE6MDA6NUU6MDA6MDA6MDAiKTsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYWNBZGRyZXNzIElQVjZfTVVMVElDQVNUX0JBU0VfQUREUkVTUyA9CisgICAgICAgICAgIE1hY0FkZHJlc3Mub2YoIjMzOjMzOjAwOjAwOjAwOjAwIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUX0VSUk9SID0gIk1hYyBhZGRyZXNzIGlzIG5vdCB3ZWxsLWZvcm1lZC4gIiArCi0gICAgICAgICAgICAiSXQgbXVzdCBjb25zaXN0IG9mIDYgaGV4IGRpZ2l0IHBhaXJzIHNlcGFyYXRlZCBieSBjb2xvbnM6ICI7CisgICAgICAgICAgICAiSXQgbXVzdCBjb25zaXN0IG9mIDYgaGV4IGRpZ2l0IHBhaXJzIHNlcGFyYXRlZCBieSBjb2xvbnMgb3IgaHlwaGVuczogIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFDX1NUUklOR19MRU5HVEggPSA2ICogMiArIDU7CiAKKwogICAgIHByaXZhdGUgTWFjQWRkcmVzcyhmaW5hbCBsb25nIHJhd1ZhbHVlKSB7CiAgICAgICAgIHRoaXMucmF3VmFsdWUgPSByYXdWYWx1ZTsKICAgICB9CkBAIC02MiwyNyArNjksMjcgQEAKICAgICAgICAgcmV0dXJuIG5ldyBNYWNBZGRyZXNzKHJhdyk7CiAgICAgfQogCi0gICAgLyoqIFBhcnNlIGEgbWFjIGFkcmVzcyBmcm9tIHRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0gICAgICogIDYgaGV4IGJ5dGVzIHNlcGFyYXRlZCBieSBjb2xvbnMgKDAxOjAyOjAzOjA0OjA1OjA2KS4KKyAgICAvKiogUGFyc2UgYSBtYWMgYWRyZXNzIGZyb20gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMKKyAgICAgKiAgNiBoZXggYnl0ZXMgc2VwYXJhdGVkIGJ5IGNvbG9ucyBvciBoeXBoZW5zICgwMTowMjowMzowNDowNTowNiwKKyAgICAgKiAgMDEtMDItMDMtMDQtMDUtMDYpLgogICAgICAqCi0gICAgICogQHBhcmFtIG1hY1N0cmluZyAtIGEgbWFjIGFkZHJlc3MgaW4gY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAqIEBwYXJhbSBtYWNTdHJpbmcgLSBhIG1hYyBhZGRyZXNzIGluIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICAqIEByZXR1cm4gdGhlIHBhcnNlZCBNYWNBZGRyZXNzCiAgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbWFjU3RyaW5nIGlzIG5vdCBhIHZhbGlkIG1hYyBhZGRkcmVzcwogICAgICAqLwogICAgIEBOb25udWxsCiAgICAgcHVibGljIHN0YXRpYyBNYWNBZGRyZXNzIG9mKEBOb25udWxsIGZpbmFsIFN0cmluZyBtYWNTdHJpbmcpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gewotICAgICAgICBpZiAobWFjU3RyaW5nID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigibWFjU3RyaW5nIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbChtYWNTdHJpbmcsICJtYWNTdHJpbmdtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tBcmd1bWVudChtYWNTdHJpbmcubGVuZ3RoKCkgPT0gTUFDX1NUUklOR19MRU5HVEgsCisgICAgICAgICAgICAgICAgRk9STUFUX0VSUk9SICsgbWFjU3RyaW5nKTsKKyAgICAgICAgZmluYWwgY2hhciBzZXBhcmF0b3IgPSBtYWNTdHJpbmcuY2hhckF0KDIpOworICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQoc2VwYXJhdG9yID09ICc6JyB8fCBzZXBhcmF0b3IgPT0gJy0nLAorICAgICAgICAgICAgICAgIEZPUk1BVF9FUlJPUiArIG1hY1N0cmluZyArICIgKGludmFsaWQgc2VwYXJhdG9yKSIpOwogCiAgICAgICAgIGludCBpbmRleCA9IDA7CiAgICAgICAgIGludCBzaGlmdCA9IDQwOwogICAgICAgICBsb25nIHJhdyA9IDA7CiAKLSAgICAgICAgaWYgKG1hY1N0cmluZy5sZW5ndGgoKSAhPSBNQUNfU1RSSU5HX0xFTkdUSCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihGT1JNQVRfRVJST1IgKyBtYWNTdHJpbmcpOwotICAgICAgICB9Ci0KICAgICAgICAgd2hpbGUgKHNoaWZ0ID49IDApIHsKICAgICAgICAgICAgIGludCBkaWdpdDEgPSBDaGFyYWN0ZXIuZGlnaXQobWFjU3RyaW5nLmNoYXJBdChpbmRleCsrKSwgMTYpOwogICAgICAgICAgICAgaW50IGRpZ2l0MiA9IENoYXJhY3Rlci5kaWdpdChtYWNTdHJpbmcuY2hhckF0KGluZGV4KyspLCAxNik7CkBAIC05MCwxMCArOTcsMTYgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKEZPUk1BVF9FUlJPUiArIG1hY1N0cmluZyk7CiAgICAgICAgICAgICByYXcgfD0gKChsb25nKSAoZGlnaXQxIDw8IDQgfCBkaWdpdDIpKSA8PCBzaGlmdDsKIAotICAgICAgICAgICAgaWYgKHNoaWZ0ID09IDApCisgICAgICAgICAgICBpZiAoc2hpZnQgPT0gMCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1hY1N0cmluZy5jaGFyQXQoaW5kZXgrKykgIT0gJzonKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oRk9STUFUX0VSUk9SICsgbWFjU3RyaW5nKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHNlcGFyYXRvcnMKKyAgICAgICAgICAgIGlmIChtYWNTdHJpbmcuY2hhckF0KGluZGV4KyspICE9IHNlcGFyYXRvcikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oRk9STUFUX0VSUk9SICsgbWFjU3RyaW5nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKGluY29uc2lzdGVudCBzZXBhcmF0b3JzIik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHNoaWZ0IC09IDg7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE1hY0FkZHJlc3Mub2YocmF3KTsKQEAgLTIwMCwxMiArMjEzLDEyIEBACiAgICAgICAgIHJldHVybiByYXdWYWx1ZTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTZCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTZCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUludCgoaW50KSAodGhpcy5yYXdWYWx1ZSA+PiAxNikpOwogICAgICAgICBjLndyaXRlU2hvcnQoKGludCkgdGhpcy5yYXdWYWx1ZSAmIDB4RkZGRik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBNYWNBZGRyZXNzIHJlYWQ2Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljIE1hY0FkZHJlc3MgcmVhZDZCeXRlcyhCeXRlQnVmIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICBsb25nIHJhdyA9IGMucmVhZFVuc2lnbmVkSW50KCkgPDwgMTYgfCBjLnJlYWRVbnNpZ25lZFNob3J0KCk7CiAgICAgICAgIHJldHVybiBNYWNBZGRyZXNzLm9mKHJhdyk7CiAgICAgfQpAQCAtMjIyLDEwICsyMzUsNzQgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHB1dFRvKFByaW1pdGl2ZVNpbmsgc2luaykgewotICAgICAgICBzaW5rLnB1dEludCgoaW50KSAodGhpcy5yYXdWYWx1ZSA+PiAxNikpOwotICAgICAgICBzaW5rLnB1dFNob3J0KChzaG9ydCkgKHRoaXMucmF3VmFsdWUgJiAweEZGRkYpKTsKKyAgICAgICAgc2luay5wdXRMb25nKHJhd1ZhbHVlKTsKICAgICB9CiAKKyAgICAvKgorICAgICAqIFBhcnNlIGFuIElQdjQgTXVsdGljYXN0IGFkZHJlc3MgYW5kIHJldHVybiB0aGUgbWFjQWRkcmVzcworICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG11bHRpY2FzdCBJUHY0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBGb3IgbXVsdGljYXN0IGZvcndhcmRpbmcsIHRoZSBtYWMgYWRkcmVzc2VzIGluIHRoZSByYW5nZQorICAgICAqIDAxLTAwLTVFLTAwLTAwLTAwIHRvIDAxLTAwLTVFLTdGLUZGLUZGIGhhdmUgYmVlbiByZXNlcnZlZC4KKyAgICAgKiBUaGUgbW9zdCBzaWduaWZpY2FudCAyNSBiaXRzIG9mIHRoZSBhYm92ZSA0OC1iaXQgbWFjIGFkZHJlc3MKKyAgICAgKiBhcmUgZml4ZWQgd2hpbGUgdGhlIGxvd2VyIDIzIGJpdHMgYXJlIHZhcmlhYmxlLgorICAgICAqIFRoZXNlIGxvd2VyIDIzIGJpdHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbG93ZXIgMjMgYml0cworICAgICAqIG9mIHRoZSBtdWx0aWNhc3QgSVAgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEFORCBpcHY0IGFkZHJlc3Mgd2l0aCAweDA3RkZGRkYgdG8gZXh0cmFjdCB0aGUgbGFzdCAyMyBiaXRzCisgICAgICogT1Igd2l0aCAwMTowMDo1RTowMDowMDowMCBNQUMgKGZpcnN0IDI1IGJpdHMpCisgICAgICoKKyAgICAgKiBAcGFyYW0gaXB2NCAtIGlwdjQgbXVsdGljYXN0IGFkZHJlc3MKKyAgICAgKiBAcmV0dXJuIHRoZSBNYWNBZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG11bHRpY2FzdCBhZGRyZXNzCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgaXB2NCBpcyBub3QgYSB2YWxpZCBtdWx0aWNhc3QgYWRkcmVzcworICAgICAqLworICAgIEBOb25udWxsCisgICAgcHVibGljIHN0YXRpYyBNYWNBZGRyZXNzIGZvcklQdjRNdWx0aWNhc3RBZGRyZXNzKElQdjRBZGRyZXNzIGlwdjQpCisgICAgICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKIAorICAgICAgICBpZiAoIWlwdjQuaXNNdWx0aWNhc3QoKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJOb3QgYSBNdWx0aWNhc3QgSVBBZGRyZXNzXCIiICsgaXB2NCArICJcIiIpOwogCisgICAgICAgIGxvbmcgaXBMb25nID0gaXB2NC5nZXRJbnQoKTsKKyAgICAgICAgaW50IGlwTWFzayA9IDB4MDA3RkZGRkY7CisgICAgICAgIGlwTG9uZyA9IGlwTG9uZyAmIGlwTWFzazsKKworICAgICAgICBsb25nIG1hY0xvbmcgPSBJUFY0X01VTFRJQ0FTVF9CQVNFX0FERFJFU1MuZ2V0TG9uZygpOyAvLyAwMTowMDo1RTowMDowMDowMAorICAgICAgICBtYWNMb25nID0gbWFjTG9uZyB8IGlwTG9uZzsKKyAgICAgICAgTWFjQWRkcmVzcyByZXR1cm5NYWMgPSBNYWNBZGRyZXNzLm9mKG1hY0xvbmcpOworCisgICAgICAgIHJldHVybiByZXR1cm5NYWM7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2VuZXJhdGUgYSBNQUMgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIG11bHRpY2FzdCBJUHY2ICBhZGRyZXNzLgorICAgICAqCisgICAgICogVGFrZSB0aGUgbGFzdCA0IGJ5dGVzIG9mIElQdjYgYWRkcmVzcyBhbmQgY29weSB0aGVtIHRvIHRoZSBiYXNlIElQdjYKKyAgICAgKiBtdWx0aWNhc3QgbWFjIGFkZHJlc3MgLSAzMzozMzowMDowMDowMDowMC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpcHY2IC0gSVB2NiBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gd2hpY2ggbXVsdGljYXN0IE1BQyBhZGRyCisgICAgICogbmVlZCB0byBiZSBnZW5lcmF0ZWQuCisgICAgICogQHJldHVybiAtIHRoZSBnZW5lcmF0ZWQgbXVsdGljYXN0IG1hYyBhZGRyZXNzLgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGlwdjYgYWRkcmVzcyBpcyBub3QgYSB2YWxpZCBJUHY2CisgICAgICogbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICovCisgICAgQE5vbm51bGwKKyAgICBwdWJsaWMgc3RhdGljIE1hY0FkZHJlc3MgZm9ySVB2Nk11bHRpY2FzdEFkZHIoSVB2NkFkZHJlc3MgaXB2NikKKyAgICAgICAgICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworICAgICAgICBpZiAoIWlwdjYuaXNNdWx0aWNhc3QoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIk5vdCBhIE11bHRpY2FzdCBJUHY2QWRkcmVzc1wiIiArIGlwdjYgKyAiXCIiKTsKKyAgICAgICAgfQorICAgICAgICBsb25nIGlwTG9uZyA9ICgoaXB2Ni5nZXRVbnNpZ25lZFNob3J0V29yZCg2KSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2LmdldFVuc2lnbmVkU2hvcnRXb3JkKDcpKTsKKyAgICAgICAgbG9uZyBpcE1hc2sgPSAweEZGRkZGRkZGbDsKKyAgICAgICAgaXBMb25nID0gaXBMb25nICYgaXBNYXNrOworCisgICAgICAgIGxvbmcgbWFjTG9uZyA9IElQVjZfTVVMVElDQVNUX0JBU0VfQUREUkVTUy5nZXRMb25nKCk7Ly8zMzozMzowMDowMDowMDowMAorICAgICAgICBtYWNMb25nID0gbWFjTG9uZyB8IGlwTG9uZzsKKyAgICAgICAgTWFjQWRkcmVzcyByZXR1cm5NYWMgPSBNYWNBZGRyZXNzLm9mKG1hY0xvbmcpOworCisgICAgICAgIHJldHVybiByZXR1cm5NYWM7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZBdXhJZC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZBdXhJZC5qYXZhCmluZGV4IGM4ZTA0ZDIuLjNjODNmOTEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GQXV4SWQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkF1eElkLmphdmEKQEAgLTEsNiArMSw2IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CkBAIC02NCwxMSArNjQsMTEgQEAKICAgICAgICAgcmV0dXJuIGlkOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGUoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVCeXRlKHRoaXMuaWQpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgT0ZBdXhJZCByZWFkQnl0ZShDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZBdXhJZCByZWFkQnl0ZShCeXRlQnVmIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gT0ZBdXhJZC5vZihjLnJlYWRVbnNpZ25lZEJ5dGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2sxMjguamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GQml0TWFzazEyOC5qYXZhCmluZGV4IDkzZjVhMmQuLjkzYmE0MWUgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GQml0TWFzazEyOC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GQml0TWFzazEyOC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CiAKQEAgLTY2LDEyICs2NiwxMiBAQAogICAgICAgICByZXR1cm4gKHdvcmQgJiAoKGxvbmcpMSA8PCBiaXQpKSAhPSAwOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMTZCeXRlcyhDaGFubmVsQnVmZmVyIGNiKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGUxNkJ5dGVzKEJ5dGVCdWYgY2IpIHsKICAgICAgICAgY2Iud3JpdGVMb25nKHJhdzEpOwogICAgICAgICBjYi53cml0ZUxvbmcocmF3Mik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRkJpdE1hc2sxMjggcmVhZDE2Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjYikgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZCaXRNYXNrMTI4IHJlYWQxNkJ5dGVzKEJ5dGVCdWYgY2IpIHsKICAgICAgICAgbG9uZyByYXcxID0gY2IucmVhZExvbmcoKTsKICAgICAgICAgbG9uZyByYXcyID0gY2IucmVhZExvbmcoKTsKICAgICAgICAgcmV0dXJuIG9mKHJhdzEsIHJhdzIpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZCaXRNYXNrMjU2LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2syNTYuamF2YQppbmRleCA1MzI2ZTBkLi42MDA5YTJmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2syNTYuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2syNTYuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogCiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKIApAQCAtMTEwLDE0ICsxMTAsMTQgQEAKICAgICAgICAgcmV0dXJuICh3b3JkICYgKChsb25nKTEgPDwgYml0KSkgIT0gMDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTMyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjYikgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlMzJCeXRlcyhCeXRlQnVmIGNiKSB7CiAgICAgICAgIGNiLndyaXRlTG9uZyhyYXcxKTsKICAgICAgICAgY2Iud3JpdGVMb25nKHJhdzIpOwogICAgICAgICBjYi53cml0ZUxvbmcocmF3Myk7CiAgICAgICAgIGNiLndyaXRlTG9uZyhyYXc0KTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIE9GQml0TWFzazI1NiByZWFkMzJCeXRlcyhDaGFubmVsQnVmZmVyIGNiKSB7CisgICAgcHVibGljIHN0YXRpYyBPRkJpdE1hc2syNTYgcmVhZDMyQnl0ZXMoQnl0ZUJ1ZiBjYikgewogICAgICAgICBsb25nIHJhdzEgPSBjYi5yZWFkTG9uZygpOwogICAgICAgICBsb25nIHJhdzIgPSBjYi5yZWFkTG9uZygpOwogICAgICAgICBsb25nIHJhdzMgPSBjYi5yZWFkTG9uZygpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZCaXRNYXNrNTEyLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2s1MTIuamF2YQppbmRleCBlMzY4NmE0Li4zOWI4ZmU3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2s1MTIuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJpdE1hc2s1MTIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgcmV0dXJuICh3b3JkICYgKChsb25nKTEgPDwgYml0KSkgIT0gMDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTY0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjYikgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlNjRCeXRlcyhCeXRlQnVmIGNiKSB7CiAgICAgICAgIGNiLndyaXRlTG9uZyhyYXcxKTsKICAgICAgICAgY2Iud3JpdGVMb25nKHJhdzIpOwogICAgICAgICBjYi53cml0ZUxvbmcocmF3Myk7CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgICAgY2Iud3JpdGVMb25nKHJhdzgpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgT0ZCaXRNYXNrNTEyIHJlYWQ2NEJ5dGVzKENoYW5uZWxCdWZmZXIgY2IpIHsKKyAgICBwdWJsaWMgc3RhdGljIE9GQml0TWFzazUxMiByZWFkNjRCeXRlcyhCeXRlQnVmIGNiKSB7CiAgICAgICAgIGxvbmcgcmF3MSA9IGNiLnJlYWRMb25nKCk7CiAgICAgICAgIGxvbmcgcmF3MiA9IGNiLnJlYWRMb25nKCk7CiAgICAgICAgIGxvbmcgcmF3MyA9IGNiLnJlYWRMb25nKCk7CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJvb2xlYW5WYWx1ZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZCb29sZWFuVmFsdWUuamF2YQppbmRleCA5OTQxNmEzLi43NTk4ZDM2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkJvb2xlYW5WYWx1ZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GQm9vbGVhblZhbHVlLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLldyaXRlYWJsZTsKQEAgLTc5LDEzICs3OSwxMyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQnl0ZUJ1ZiBiYikgewogICAgICAgICBiYi53cml0ZUJ5dGUoZ2V0SW50KCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFJlYWRlciBpbXBsZW1lbnRzIE9GTWVzc2FnZVJlYWRlcjxPRkJvb2xlYW5WYWx1ZT4gewogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE9GQm9vbGVhblZhbHVlIHJlYWRGcm9tKENoYW5uZWxCdWZmZXIgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgICAgICBwdWJsaWMgT0ZCb29sZWFuVmFsdWUgcmVhZEZyb20oQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgICAgICByZXR1cm4gb2YoYmIucmVhZEJ5dGUoKSAhPSAwKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GQ29ubmVjdGlvbkluZGV4LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkNvbm5lY3Rpb25JbmRleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2Y0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkNvbm5lY3Rpb25JbmRleC5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOworCitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmFubm90YXRpb25zLkltbXV0YWJsZTsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLlVuc2lnbmVkSW50czsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworCitASW1tdXRhYmxlCitwdWJsaWMgY2xhc3MgT0ZDb25uZWN0aW9uSW5kZXggaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxPRkNvbm5lY3Rpb25JbmRleD4gIHsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gNDsKKyAgICBwcml2YXRlIGZpbmFsIGludCBjb25uZWN0aW9uSW5kZXg7CisKKyAgICBwcml2YXRlIE9GQ29ubmVjdGlvbkluZGV4KGZpbmFsIGludCBjb25uZWN0aW9uSW5kZXgpIHsKKyAgICAgICAgdGhpcy5jb25uZWN0aW9uSW5kZXggPSBjb25uZWN0aW9uSW5kZXg7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBPRkNvbm5lY3Rpb25JbmRleCBvZihmaW5hbCBpbnQgY29ubmVjdGlvbkluZGV4KSB7CisgICAgICAgIHJldHVybiBuZXcgT0ZDb25uZWN0aW9uSW5kZXgoY29ubmVjdGlvbkluZGV4KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhCeXRlQnVmIGMpIHsKKyAgICAgICAgYy53cml0ZUludChjb25uZWN0aW9uSW5kZXgpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgT0ZDb25uZWN0aW9uSW5kZXggcmVhZDRCeXRlcyhCeXRlQnVmIGMpIHsKKyAgICAgICAgcmV0dXJuIE9GQ29ubmVjdGlvbkluZGV4Lm9mKGMucmVhZEludCgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgT0ZDb25uZWN0aW9uSW5kZXggYXBwbHlNYXNrKE9GQ29ubmVjdGlvbkluZGV4IG1hc2spIHsKKyAgICAgICAgcmV0dXJuIE9GQ29ubmVjdGlvbkluZGV4Lm9mKHRoaXMuY29ubmVjdGlvbkluZGV4ICYgbWFzay5jb25uZWN0aW9uSW5kZXgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKE9GQ29ubmVjdGlvbkluZGV4IG8pIHsKKyAgICAgICAgcmV0dXJuIFVuc2lnbmVkSW50cy5jb21wYXJlKHRoaXMuY29ubmVjdGlvbkluZGV4LG8uY29ubmVjdGlvbkluZGV4KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwdXRUbyhQcmltaXRpdmVTaW5rIHNpbmspIHsKKyAgICAgICAgc2luay5wdXRJbnQoY29ubmVjdGlvbkluZGV4KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIExFTkdUSDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gVW5zaWduZWRJbnRzLnRvU3RyaW5nKGNvbm5lY3Rpb25JbmRleCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7CisgICAgICAgIGludCByZXN1bHQgPSAxOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIGNvbm5lY3Rpb25JbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgICBpZiAodGhpcyA9PSBvYmopCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9iaiA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT0ZDb25uZWN0aW9uSW5kZXggb3RoZXIgPSAoT0ZDb25uZWN0aW9uSW5kZXgpIG9iajsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25JbmRleCAhPSBvdGhlci5jb25uZWN0aW9uSW5kZXgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkVycm9yQ2F1c2VEYXRhLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkVycm9yQ2F1c2VEYXRhLmphdmEKaW5kZXggMWU3MWIzYy4uMDNlMmZjZCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZFcnJvckNhdXNlRGF0YS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GRXJyb3JDYXVzZURhdGEuamF2YQpAQCAtMSw5ICsxLDEwIEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAoraW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZDsKKwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7Ci1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyczsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GRXJyb3JNc2c7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GRmFjdG9yaWVzOwpAQCAtNTUsNyArNTYsNyBAQAogICAgIHB1YmxpYyBPcHRpb25hbDxPRk1lc3NhZ2U+IGdldFBhcnNlZE1lc3NhZ2UoKSB7CiAgICAgICAgIE9GRmFjdG9yeSBmYWN0b3J5ID0gT0ZGYWN0b3JpZXMuZ2V0RmFjdG9yeSh2ZXJzaW9uKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIE9GTWVzc2FnZSBtc2cgPSBmYWN0b3J5LmdldFJlYWRlcigpLnJlYWRGcm9tKENoYW5uZWxCdWZmZXJzLndyYXBwZWRCdWZmZXIoZGF0YSkpOworICAgICAgICAgICAgT0ZNZXNzYWdlIG1zZyA9IGZhY3RvcnkuZ2V0UmVhZGVyKCkucmVhZEZyb20oVW5wb29sZWQud3JhcHBlZEJ1ZmZlcihkYXRhKSk7CiAgICAgICAgICAgICBpZihtc2cgIT0gbnVsbCkKICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwub2YobXNnKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTY2LDcgKzY3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgT0ZFcnJvckNhdXNlRGF0YSByZWFkKENoYW5uZWxCdWZmZXIgYmIsIGludCBsZW5ndGgsIE9GVmVyc2lvbiB2ZXJzaW9uKSB7CisgICAgcHVibGljIHN0YXRpYyBPRkVycm9yQ2F1c2VEYXRhIHJlYWQoQnl0ZUJ1ZiBiYiwgaW50IGxlbmd0aCwgT0ZWZXJzaW9uIHZlcnNpb24pIHsKICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gQ2hhbm5lbFV0aWxzLnJlYWRCeXRlcyhiYiwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG9mKGJ5dGVzLCB2ZXJzaW9uKTsKICAgIH0KQEAgLTc3LDcgKzc4LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVRvKENoYW5uZWxCdWZmZXIgYmIpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvKEJ5dGVCdWYgYmIpIHsKICAgICAgICAgYmIud3JpdGVCeXRlcyhkYXRhKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GR3JvdXAuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GR3JvdXAuamF2YQppbmRleCA5YzU3MWVhLi5lNDdjZDkwIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkdyb3VwLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZHcm91cC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmFubm90YXRpb25zLkltbXV0YWJsZTsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKQEAgLTc5LDcgKzc5LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiogcmV0dXJuIHRoZSBncm91cCBudW1iZXIgYXMgYSBpbnQzMiAqLworICAgIC8qKiAKKyAgICAgKiBnZXQgdGhlIGdyb3VwIG51bWJlciBvZiB0aGlzIGdyb3VwIGFzIGEgaW50MzIgCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBpbnRlZ2VyIGZvcm0gb2YgdGhlIHRoaXMgZ3JvdXAKKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEdyb3VwTnVtYmVyKCkgewogICAgICAgICByZXR1cm4gZ3JvdXBOdW1iZXI7CiAgICAgfQpAQCAtMTMxLDExICsxMzUsMTEgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUludCh0aGlzLmdyb3VwTnVtYmVyKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIE9GR3JvdXAgcmVhZDRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZHcm91cCByZWFkNEJ5dGVzKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBPRkdyb3VwLm9mKGMucmVhZEludCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GTWV0YWRhdGEuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GTWV0YWRhdGEuamF2YQppbmRleCBmY2FiZGNkLi40NDVjMzMzIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRk1ldGFkYXRhLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZNZXRhZGF0YS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CiAKQEAgLTMxLDExICszMSwxMSBAQAogICAgICAgICByZXR1cm4gdTY0OwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgT0ZNZXRhZGF0YSByZWFkOEJ5dGVzKENoYW5uZWxCdWZmZXIgY2IpIHsKKyAgICBwdWJsaWMgc3RhdGljIE9GTWV0YWRhdGEgcmVhZDhCeXRlcyhCeXRlQnVmIGNiKSB7CiAgICAgICAgIHJldHVybiBPRk1ldGFkYXRhLm9mUmF3KGNiLnJlYWRMb25nKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlOEJ5dGVzKENoYW5uZWxCdWZmZXIgY2IpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZThCeXRlcyhCeXRlQnVmIGNiKSB7CiAgICAgICAgIHU2NC53cml0ZVRvKGNiKTsKICAgICB9CiAKQEAgLTY2LDcgKzY2LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiAiTWV0YWRhdGE6ICIgKyB1NjQudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHU2NC50b1N0cmluZygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZQb3J0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQppbmRleCBmMmIxZTlhLi44OWFjZTk3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5hbm5vdGF0aW9ucy5JbW11dGFibGU7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgKiBOT1RFOiBUaGUgcG9ydCBvYmplY3QgbWF5IGVpdGhlciBiZSBuZXdseSBhbGxvY2F0ZWQgb3IgY2FjaGVkLiBEbyBub3QKICAgICAgKiByZWx5IG9uIGVpdGhlciBiZWhhdmlvci4KICAgICAgKgotICAgICAqIEBwYXJhbSBwb3J0TnVtYmVyCisgICAgICogQHBhcmFtIHBvcnROdW1iZXIgdGhlIGludGVnZXIgcG9ydCBudW1iZXIKICAgICAgKiBAcmV0dXJuIGEgY29ycmVzcG9uZGluZyBPRlBvcnQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIE9GUG9ydCBvZkludChmaW5hbCBpbnQgcG9ydE51bWJlcikgewpAQCAtMjk0LDcgKzI5NCwxMiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqIGNvbnZlbmllbmNlIGZ1bmN0aW9uOiBkZWxlZ2F0ZXMgdG8gb2ZJbnQgKi8KKyAgICAvKiogCisgICAgICogY29udmVuaWVuY2UgZnVuY3Rpb246IGRlbGVnYXRlcyB0byBvZkludCAKKyAgICAgKgorICAgICAqIEBwYXJhbSBwb3J0TnVtYmVyIHRoZSBpbnRlZ2VyIHBvcnQgbnVtYmVyCisgICAgICogQHJldHVybiBhIGNvcnJlc3BvbmRpbmcgT0ZQb3J0CisgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBPRlBvcnQgb2YoZmluYWwgaW50IHBvcnROdW1iZXIpIHsKICAgICAgICAgcmV0dXJuIG9mSW50KHBvcnROdW1iZXIpOwogICAgIH0KQEAgLTMwNSw3ICszMTAsNyBAQAogICAgICAqIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIGFsbG9jYXRlZCBhcyBpdHMgcG9ydCBudW1iZXIuIE5PVEU6IFRoZSBwb3J0IG9iamVjdAogICAgICAqIG1heSBlaXRoZXIgYmUgbmV3bHkgYWxsb2NhdGVkIG9yIGNhY2hlZC4gRG8gbm90IHJlbHkgb24gZWl0aGVyIGJlaGF2aW9yLgogICAgICAqCi0gICAgICogQHBhcmFtIHBvcnROdW1iZXIKKyAgICAgKiBAcGFyYW0gcG9ydE51bWJlciB0aGUgc2hvcnQgcG9ydCBudW1iZXIKICAgICAgKiBAcmV0dXJuIGEgY29ycmVzcG9uZGluZyBPRlBvcnQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIE9GUG9ydCBvZlNob3J0KGZpbmFsIHNob3J0IHBvcnROdW1iZXIpIHsKQEAgLTQzOCw3ICs0NDMsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKiByZXR1cm4gdGhlIHBvcnQgbnVtYmVyIGFzIGEgaW50MzIgKi8KKyAgICAvKiogCisgICAgICogcmV0dXJuIHRoZSBwb3J0IG51bWJlciBhcyBhIGludDMyIAorICAgICAqCisgICAgICogQHJldHVybiB0aGUgcG9ydCBudW1iZXIgYXMgYW4gaW50ZWdlcgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHBvcnROdW1iZXI7CiAgICAgfQpAQCAtNDUwLDcgKzQ1OSw4IEBACiAgICAgICoKICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogICAgICAqICAgICAgICAgICAgIGlmIGEgcmVndWxhciBwb3J0IG51bWJlciBleGNlZWRzIHRoZSBtYXhpbXVtIHZhbHVlIGluIE9GMS4wCi0gICAgICoqLworICAgICAqIEByZXR1cm4gdGhlIHBvcnQgbnVtYmVyIGFzIGEgc2hvcnQKKyAgICAgKi8KICAgICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnRQb3J0TnVtYmVyKCkgewogCiAgICAgICAgIHN3aXRjaCAocG9ydE51bWJlcikgewpAQCAtNTMwLDE5ICs1NDAsMTkgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTJCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTJCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZVNob3J0KHRoaXMucG9ydE51bWJlcik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRlBvcnQgcmVhZDJCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZQb3J0IHJlYWQyQnl0ZXMoQnl0ZUJ1ZiBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GUG9ydC5vZlNob3J0KGMucmVhZFNob3J0KCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlSW50KHRoaXMucG9ydE51bWJlcik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRlBvcnQgcmVhZDRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZQb3J0IHJlYWQ0Qnl0ZXMoQnl0ZUJ1ZiBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GUG9ydC5vZigoaW50KShjLnJlYWRVbnNpZ25lZEludCgpICYgMHhGRkZGRkZGRikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZQb3J0Qml0TWFwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnRCaXRNYXAuamF2YQppbmRleCAxZDY1OGM1Li4xYzNiYzY4IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnRCaXRNYXAuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnRCaXRNYXAuamF2YQpAQCAtNDYsOSArNDYsMTMgQEAKICAgICAgICAgc3VwZXIoT0ZCaXRNYXNrMTI4Lk5PTkUsIG1hc2spOwogICAgIH0KIAotICAgIC8qKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwb3J0IGlzIGxvZ2ljYWxseSBpbmNsdWRlZCBpbiB0aGUKLSAgICAgKiAgbWF0Y2gsIGkuZS4sIHdoZXRoZXIgYSBwYWNrZXQgZnJvbSBpbi1wb3J0IDxlbT5wb3J0PC9lbT4gYmUgbWF0Y2hlZCBieQotICAgICAqICB0aGlzIE9YTS4KKyAgICAvKiogCisgICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIHBvcnQgaXMgbG9naWNhbGx5IGluY2x1ZGVkIGluIHRoZQorICAgICAqIG1hdGNoLiBJLmUuIHdpbGwgYSBwYWNrZXQgZnJvbSBpbi1wb3J0IDxlbT5wb3J0PC9lbT4KKyAgICAgKiBiZSBtYXRjaGVkIGJ5IHRoaXMgT1hNPworICAgICAqCisgICAgICogQHBhcmFtIHBvcnQgdGhlIHBvcnQgdG8gY2hlY2sgaW4gdGhlIG1hdGNoCisgICAgICogQHJldHVybiBib29sZWFuIHRydWUgb3IgZmFsc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc09uKE9GUG9ydCBwb3J0KSB7CiAgICAgICAgIC8vIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gbm90ZSBhYm92ZSBhYm91dCB0aGUgbG9naWNhbCBpbnZlcnNpb24gb2YgdGhlIG1hc2sKQEAgLTYzLDE2ICs2NywxOSBAQAogICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogICAgIH0KIAotICAgIC8qKiBAcmV0dXJuIGFuIE9GUG9ydEJpdG1hcCBiYXNlZCBvbiB0aGUgJ21hc2snIHBhcnQgb2YgYW4gT0ZCaXRNYXNrMTI4LCBhcywgZS5nLiwgcmV0dXJuZWQKLSAgICAgKiAgYnkgdGhlIHN3aXRjaC4KLSAgICAgKiovCisgICAgLyoqIAorICAgICAqIEBwYXJhbSBtYXNrIHRoZSBtYXNrIHRvIGNyZWF0ZSB0aGUgYml0bWFwIGZyb20KKyAgICAgKiBAcmV0dXJuIGFuIE9GUG9ydEJpdG1hcCBiYXNlZCBvbiB0aGUgJ21hc2snIHBhcnQgb2YgYW4gT0ZCaXRNYXNrMTI4LCBhcywgZS5nLiwgcmV0dXJuZWQKKyAgICAgKiBieSB0aGUgc3dpdGNoLgorICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgT0ZQb3J0Qml0TWFwIG9mKE9GQml0TWFzazEyOCBtYXNrKSB7CiAgICAgICAgIHJldHVybiBuZXcgT0ZQb3J0Qml0TWFwKG1hc2spOwogICAgIH0KIAotICAgIC8qKiBAcmV0dXJuIGl0ZXJhdGluZyBvdmVyIGFsbCBwb3J0cyB0aGF0IGFyZSBsb2dpY2FsbHkgaW5jbHVkZWQgaW4gdGhlCi0gICAgICogIG1hdGNoLCBpLmUuLCB3aGV0aGVyIGEgcGFja2V0IGZyb20gaW4tcG9ydCA8ZW0+cG9ydDwvZW0+IGJlIG1hdGNoZWQgYnkKLSAgICAgKiAgdGhpcyBPWE0uCisgICAgLyoqIAorICAgICAqIEByZXR1cm4gaXRlcmF0aW5nIG92ZXIgYWxsIHBvcnRzIHRoYXQgYXJlIGxvZ2ljYWxseSBpbmNsdWRlZCBpbiB0aGUKKyAgICAgKiBtYXRjaCwgaS5lLiwgd2hldGhlciBhIHBhY2tldCBmcm9tIGluLXBvcnQgPGVtPnBvcnQ8L2VtPiBiZSBtYXRjaGVkIGJ5CisgICAgICogdGhpcyBPWE0uCiAgICAgICovCiAgICAgcHVibGljIEl0ZXJhYmxlPE9GUG9ydD4gZ2V0T25Qb3J0cygpIHsKICAgICAgICAgQXJyYXlMaXN0PE9GUG9ydD4gcG9ydHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKQEAgLTEwNCwxNyArMTExLDIyIEBACiAKICAgICAgICAgfQogCi0gICAgICAgIC8qKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwb3J0IGlzIGxvZ2ljYWxseSBpbmNsdWRlZCBpbiB0aGUKLSAgICAgICAgICogIG1hdGNoLCBpLmUuLCB3aGV0aGVyIGEgcGFja2V0IGZyb20gaW4tcG9ydCA8ZW0+cG9ydDwvZW0+IGJlIG1hdGNoZWQgYnkKLSAgICAgICAgICogIHRoaXMgT1hNLgorICAgICAgICAvKiogCisgICAgICAgICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0IHRvIGNoZWNrIGlmIGl0J3MgYmVpbmcgbWF0Y2hlZCBieSB0aGUgYml0bWFzaworICAgICAgICAgKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwb3J0IGlzIGxvZ2ljYWxseSBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICogbWF0Y2gsIGkuZS4sIHdoZXRoZXIgYSBwYWNrZXQgZnJvbSBpbi1wb3J0IDxlbT5wb3J0PC9lbT4gYmUgbWF0Y2hlZCBieQorICAgICAgICAgKiB0aGlzIE9YTS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzT24oT0ZQb3J0IHBvcnQpIHsKICAgICAgICAgICAgIC8vIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gbm90ZSBhYm92ZSBhYm91dCB0aGUgbG9naWNhbCBpbnZlcnNpb24gb2YgdGhlIG1hc2sKICAgICAgICAgICAgIHJldHVybiAhKE9GQml0TWFzazEyOC5pc0JpdE9uKHJhdzEsIHJhdzIsIHBvcnQuZ2V0UG9ydE51bWJlcigpKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvKiogcmVtb3ZlIHRoaXMgcG9ydCBmcm9tIHRoZSBtYXRjaCwgaS5lLiwgcGFja2V0cyBmcm9tIHRoaXMgaW4tcG9ydAotICAgICAgICAgKiAgd2lsbCBOT1QgYmUgbWF0Y2hlZC4KKyAgICAgICAgLyoqIAorICAgICAgICAgKiByZW1vdmUgdGhpcyBwb3J0IGZyb20gdGhlIG1hdGNoLCBpLmUuLCBwYWNrZXRzIGZyb20gdGhpcyBpbi1wb3J0CisgICAgICAgICAqIHdpbGwgTk9UIGJlIG1hdGNoZWQuCisgICAgICAgICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0IHRvIHJlbW92ZSBmcm9tIHRoZSBtYXRjaAorICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvcgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgdW5zZXQoT0ZQb3J0IHBvcnQpIHsKICAgICAgICAgICAgIC8vIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gbm90ZSBhYm92ZSBhYm91dCB0aGUgbG9naWNhbCBpbnZlcnNpb24gb2YgdGhlIG1hc2sKQEAgLTEzNSw4ICsxNDcsMTEgQEAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgLyoqIGFkZCB0aGlzIHBvcnQgZnJvbSB0aGUgbWF0Y2gsIGkuZS4sIHBhY2tldHMgZnJvbSB0aGlzIGluLXBvcnQKLSAgICAgICAgICogIHdpbGwgTk9UIGJlIG1hdGNoZWQuCisgICAgICAgIC8qKiAKKyAgICAgICAgICogYWRkIHRoaXMgcG9ydCB0byB0aGUgbWF0Y2gsIGkuZS4sIHBhY2tldHMgZnJvbSB0aGlzIGluLXBvcnQKKyAgICAgICAgICogd2lsbCBiZSBtYXRjaGVkLgorICAgICAgICAgKiBAcGFyYW0gcG9ydCB0aGUgcG9ydCB0byBhZGQgdG8gdGhlIG1hdGNoCisgICAgICAgICAqIEByZXR1cm4gdGhpcyBtdXRhdG9yIAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0KE9GUG9ydCBwb3J0KSB7CiAgICAgICAgICAgICAvLyBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG5vdGUgYWJvdmUgYWJvdXQgdGhlIGxvZ2ljYWwgaW52ZXJzaW9uIG9mIHRoZSBtYXNrCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlBvcnRCaXRNYXA1MTIuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GUG9ydEJpdE1hcDUxMi5qYXZhCmluZGV4IGM4NWM3NTAuLmU5YzhmNGMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GUG9ydEJpdE1hcDUxMi5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GUG9ydEJpdE1hcDUxMi5qYXZhCkBAIC00Niw5ICs0NiwxMSBAQAogICAgICAgICBzdXBlcihPRkJpdE1hc2s1MTIuTk9ORSwgbWFzayk7CiAgICAgfQogCi0gICAgLyoqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBvcnQgaXMgbG9naWNhbGx5IGluY2x1ZGVkIGluIHRoZQotICAgICAqICBtYXRjaCwgaS5lLiwgd2hldGhlciBhIHBhY2tldCBmcm9tIGluLXBvcnQgPGVtPnBvcnQ8L2VtPiBiZSBtYXRjaGVkIGJ5Ci0gICAgICogIHRoaXMgT1hNLgorICAgIC8qKiAKKyAgICAgKiBAcGFyYW0gcG9ydCB0aGUgcG9ydCB0byBjaGVjaworICAgICAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBvcnQgaXMgbG9naWNhbGx5IGluY2x1ZGVkIGluIHRoZQorICAgICAqIG1hdGNoLCBpLmUuLCB3aGV0aGVyIGEgcGFja2V0IGZyb20gaW4tcG9ydCA8ZW0+cG9ydDwvZW0+IGJlIG1hdGNoZWQgYnkKKyAgICAgKiB0aGlzIE9YTS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc09uKE9GUG9ydCBwb3J0KSB7CiAgICAgICAgIC8vIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gbm90ZSBhYm92ZSBhYm91dCB0aGUgbG9naWNhbCBpbnZlcnNpb24gb2YgdGhlIG1hc2sKQEAgLTYzLDE2ICs2NSwxOSBAQAogICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogICAgIH0KIAotICAgIC8qKiBAcmV0dXJuIGFuIE9GUG9ydEJpdG1hcCBiYXNlZCBvbiB0aGUgJ21hc2snIHBhcnQgb2YgYW4gT0ZCaXRNYXNrNTEyLCBhcywgZS5nLiwgcmV0dXJuZWQKLSAgICAgKiAgYnkgdGhlIHN3aXRjaC4KLSAgICAgKiovCisgICAgLyoqIAorICAgICAqIEBwYXJhbSBtYXNrIHRoZSBtYXNrIHVzZWQgdG8gY3JlYXRlIHRoZSBiaXRtYXAKKyAgICAgKiBAcmV0dXJuIGFuIE9GUG9ydEJpdG1hcCBiYXNlZCBvbiB0aGUgJ21hc2snIHBhcnQgb2YgYW4gT0ZCaXRNYXNrNTEyLCBhcywgZS5nLiwgcmV0dXJuZWQKKyAgICAgKiBieSB0aGUgc3dpdGNoLgorICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgT0ZQb3J0Qml0TWFwNTEyIG9mKE9GQml0TWFzazUxMiBtYXNrKSB7CiAgICAgICAgIHJldHVybiBuZXcgT0ZQb3J0Qml0TWFwNTEyKG1hc2spOwogICAgIH0KIAotICAgIC8qKiBAcmV0dXJuIGl0ZXJhdGluZyBvdmVyIGFsbCBwb3J0cyB0aGF0IGFyZSBsb2dpY2FsbHkgaW5jbHVkZWQgaW4gdGhlCi0gICAgICogIG1hdGNoLCBpLmUuLCB3aGV0aGVyIGEgcGFja2V0IGZyb20gaW4tcG9ydCA8ZW0+cG9ydDwvZW0+IGJlIG1hdGNoZWQgYnkKLSAgICAgKiAgdGhpcyBPWE0uCisgICAgLyoqIAorICAgICAqIEByZXR1cm4gaXRlcmF0aW5nIG92ZXIgYWxsIHBvcnRzIHRoYXQgYXJlIGxvZ2ljYWxseSBpbmNsdWRlZCBpbiB0aGUKKyAgICAgKiBtYXRjaCwgaS5lLiwgd2hldGhlciBhIHBhY2tldCBmcm9tIGluLXBvcnQgPGVtPnBvcnQ8L2VtPiBiZSBtYXRjaGVkIGJ5CisgICAgICogdGhpcyBPWE0uCiAgICAgICovCiAgICAgcHVibGljIEl0ZXJhYmxlPE9GUG9ydD4gZ2V0T25Qb3J0cygpIHsKICAgICAgICAgQXJyYXlMaXN0PE9GUG9ydD4gcG9ydHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKQEAgLTEwNSw5ICsxMTAsMTEgQEAKIAogICAgICAgICB9CiAKLSAgICAgICAgLyoqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBvcnQgaXMgbG9naWNhbGx5IGluY2x1ZGVkIGluIHRoZQotICAgICAgICAgKiAgbWF0Y2gsIGkuZS4sIHdoZXRoZXIgYSBwYWNrZXQgZnJvbSBpbi1wb3J0IDxlbT5wb3J0PC9lbT4gYmUgbWF0Y2hlZCBieQotICAgICAgICAgKiAgdGhpcyBPWE0uCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0gcG9ydCB0aGUgcG9ydCB0byBjaGVjaworICAgICAgICAgKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwb3J0IGlzIGxvZ2ljYWxseSBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICogbWF0Y2gsIGkuZS4sIHdoZXRoZXIgYSBwYWNrZXQgZnJvbSBpbi1wb3J0IDxlbT5wb3J0PC9lbT4gYmUgbWF0Y2hlZCBieQorICAgICAgICAgKiB0aGlzIE9YTS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzT24oT0ZQb3J0IHBvcnQpIHsKICAgICAgICAgICAgIC8vIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gbm90ZSBhYm92ZSBhYm91dCB0aGUgbG9naWNhbCBpbnZlcnNpb24gb2YgdGhlIG1hc2sKQEAgLTExNSw4ICsxMjIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcmF3NSwgcmF3NiwgcmF3NywgcmF3OCwgcG9ydC5nZXRQb3J0TnVtYmVyKCkpKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qKiByZW1vdmUgdGhpcyBwb3J0IGZyb20gdGhlIG1hdGNoLCBpLmUuLCBwYWNrZXRzIGZyb20gdGhpcyBpbi1wb3J0Ci0gICAgICAgICAqICB3aWxsIE5PVCBiZSBtYXRjaGVkLgorICAgICAgICAvKiogCisgICAgICAgICAqIHJlbW92ZSB0aGlzIHBvcnQgZnJvbSB0aGUgbWF0Y2gsIGkuZS4sIHBhY2tldHMgZnJvbSB0aGlzIGluLXBvcnQKKyAgICAgICAgICogd2lsbCBOT1QgYmUgbWF0Y2hlZC4KKyAgICAgICAgICogQHBhcmFtIHBvcnQgdGhlIHBvcnQgdGhlIHJlbW92ZSBmcm9tIHRoZSBtYXRjaAorICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvcgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgdW5zZXQoT0ZQb3J0IHBvcnQpIHsKICAgICAgICAgICAgIC8vIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gbm90ZSBhYm92ZSBhYm91dCB0aGUgbG9naWNhbCBpbnZlcnNpb24gb2YgdGhlIG1hc2sKQEAgLTE0OSw4ICsxNTksMTEgQEAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgLyoqIGFkZCB0aGlzIHBvcnQgZnJvbSB0aGUgbWF0Y2gsIGkuZS4sIHBhY2tldHMgZnJvbSB0aGlzIGluLXBvcnQKLSAgICAgICAgICogIHdpbGwgTk9UIGJlIG1hdGNoZWQuCisgICAgICAgIC8qKgorICAgICAgICAgKiBhZGQgdGhpcyBwb3J0IGZyb20gdGhlIG1hdGNoLCBpLmUuLCBwYWNrZXRzIGZyb20gdGhpcyBpbi1wb3J0CisgICAgICAgICAqIHdpbGwgYmUgbWF0Y2hlZC4KKyAgICAgICAgICogQHBhcmFtIHBvcnQgdGhlIHBvcnQgdG8gYWRkIHRvIHRoZSBtYXRjaAorICAgICAgICAgKiBAcmV0dXJuIHRoaXMgbXV0YXRvcgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0KE9GUG9ydCBwb3J0KSB7CiAgICAgICAgICAgICAvLyBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG5vdGUgYWJvdmUgYWJvdXQgdGhlIGxvZ2ljYWwgaW52ZXJzaW9uIG9mIHRoZSBtYXNrCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlZsYW5WaWRNYXRjaC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZWbGFuVmlkTWF0Y2guamF2YQppbmRleCA5MWM5ZmM4Li5kZTlkYTY3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRlZsYW5WaWRNYXRjaC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GVmxhblZpZE1hdGNoLmphdmEKQEAgLTQsNyArNCw3IEBACiAKIGltcG9ydCBqYXZheC5hbm5vdGF0aW9uLk51bGxhYmxlOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwpAQCAtNDgsNyArNDgsNyBAQAogICAgIC8qKiBhbiB1bnRhZ2dlZCBwYWNrZXQgaXMgc3BlY2lmaWVkIGFzIDAwMDAgaW4gT0YgMS4wLCBidXQgMHhGRkZGIGluIE9GMS4wLiBTcGVjaWFsIGNhc2UgdGhhdC4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9GVmxhblZpZE1hdGNoIFVOVEFHR0VEID0gbmV3IE9GVmxhblZpZE1hdGNoKE5PTkVfVkFMKSB7CiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZTJCeXRlc09GMTAoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzT0YxMChCeXRlQnVmIGMpIHsKICAgICAgICAgICAgIGMud3JpdGVTaG9ydChVTlRBR0dFRF9WQUxfT0YxMCk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTcyLDE5ICsxNzIsMTkgQEAKICAgICAgICAgcmV0dXJuIEFycmF5cy5jb3B5T2YoYnl0ZXNDYWNoZSwgYnl0ZXNDYWNoZS5sZW5ndGgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlU2hvcnQodGhpcy52aWQpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzT0YxMChDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTJCeXRlc09GMTAoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVTaG9ydCh0aGlzLmdldFZsYW4oKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBPRlZsYW5WaWRNYXRjaCByZWFkMkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBPRlZsYW5WaWRNYXRjaCByZWFkMkJ5dGVzKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBPRlZsYW5WaWRNYXRjaC5vZlJhd1ZpZChjLnJlYWRTaG9ydCgpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIE9GVmxhblZpZE1hdGNoIHJlYWQyQnl0ZXNPRjEwKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBPRlZsYW5WaWRNYXRjaCByZWFkMkJ5dGVzT0YxMChCeXRlQnVmIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gT0ZWbGFuVmlkTWF0Y2gub2ZWbGFuT0YxMChjLnJlYWRTaG9ydCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09kdVNpZ25hbElELmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PZHVTaWduYWxJRC5qYXZhCmluZGV4IGM5N2M0ZDAuLjk3YTVkMGQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09kdVNpZ25hbElELmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT2R1U2lnbmFsSUQuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkNvbXBhcmlzb25DaGFpbjsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLlVuc2lnbmVkQnl0ZXM7CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgIHJldHVybiBNSU5JTVVNX0xFTkdUSCArIDEyOyAvLyAgdHNsZW4gPT0gODAgCiAgICAgfQogIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZVNob3J0KHRwbik7CiAgICAgICAgIGMud3JpdGVTaG9ydCh0c2xlbik7CiAgICAgICAgIGMud3JpdGVCeXRlcyh0c21hcCk7IC8vIDEwIGJ5dGVzCiAgICAgICAgIGMud3JpdGVaZXJvKDIpOyAvLyB3cml0ZSBieXRlcyBmb3IgYWRkIHBhZGRpbmcgYWxpZ25tZW50ICh0aGUgc2l6ZSBvZiBieXRlcyBpbiB0c21hcCBtdXN0IGJlIGRpdmlkZWQgaW4gNCkgICAKICAgICB9CiAKLSAgICAgcHVibGljIHN0YXRpYyBPZHVTaWduYWxJRCByZWFkRnJvbShDaGFubmVsQnVmZmVyIGMpICAgeworICAgICBwdWJsaWMgc3RhdGljIE9kdVNpZ25hbElEIHJlYWRGcm9tKEJ5dGVCdWYgYykgICB7CiAgICAgICAgIGludCB0cG4gPSBVMTYuZihjLnJlYWRTaG9ydCgpKTsKICAgICAgICAgaW50IHRzbGVuID0gVTE2LmYoYy5yZWFkU2hvcnQoKSk7CiAgICAgICAgIGJ5dGVbXSB0c21hcCA9IG51bGw7CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9QYWNrZXRUeXBlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9QYWNrZXRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4MWI2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1BhY2tldFR5cGUuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CisKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZIZWFkZXJUeXBlTmFtZXNwYWNlOworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuVW5zaWduZWRJbnRzOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CisKK3B1YmxpYyBjbGFzcyBQYWNrZXRUeXBlIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8UGFja2V0VHlwZT4geworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbmFtZXNwYWNlOworICAgIHByaXZhdGUgZmluYWwgaW50IG5zVHlwZTsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgTkFNRVNQQUNFX09ORiA9IDA7CisgICAgc3RhdGljIGZpbmFsIGludCBOQU1FU1BBQ0VfRVRIRVJUWVBFID0gMTsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgTlNfVFlQRV9PTkZfRVRIRVJORVQgPSAwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgTlNfVFlQRV9PTkZfTk9fUEFDS0VUID0gMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IE5TX1RZUEVfT05GX0VYUEVSSU1FTlRFUiAgID0gMHhGRkZGOworCisgICAgc3RhdGljIGZpbmFsIGludCBOU19UWVBFX0VUSEVSX0lQdjQgICA9IDB4ODAwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgTlNfVFlQRV9FVEhFUl9JUHY2ICAgPSAweDg2ZGQ7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhY2tldFR5cGUgRVRIRVJORVQgPSBuZXcgUGFja2V0VHlwZShOQU1FU1BBQ0VfT05GLCBOU19UWVBFX09ORl9FVEhFUk5FVCk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYWNrZXRUeXBlIE5PX1BBQ0tFVCA9IG5ldyBQYWNrZXRUeXBlKE5BTUVTUEFDRV9PTkYsIE5TX1RZUEVfT05GX05PX1BBQ0tFVCk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYWNrZXRUeXBlIEVYUEVSSU1FTlRFUiA9IG5ldyBQYWNrZXRUeXBlKE5BTUVTUEFDRV9PTkYsIE5TX1RZUEVfT05GX0VYUEVSSU1FTlRFUik7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhY2tldFR5cGUgSVBWNCA9IG5ldyBQYWNrZXRUeXBlKE5BTUVTUEFDRV9FVEhFUlRZUEUsIE5TX1RZUEVfRVRIRVJfSVB2NCk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYWNrZXRUeXBlIElQVjYgPSBuZXcgUGFja2V0VHlwZShOQU1FU1BBQ0VfRVRIRVJUWVBFLCBOU19UWVBFX0VUSEVSX0lQdjYpOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYWNrZXRUeXBlIE5PX01BU0sgPSBQYWNrZXRUeXBlLm9mKDB4RkZGRiwgMHgwRkZGRik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYWNrZXRUeXBlIEZVTExfTUFTSyA9IFBhY2tldFR5cGUub2YoMCwgMCk7CisKKyAgICBwcml2YXRlIFBhY2tldFR5cGUoaW50IG5hbWVzcGFjZSwgaW50IG5zVHlwZSkgeworICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKKyAgICAgICAgdGhpcy5uc1R5cGUgPSBuc1R5cGU7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBQYWNrZXRUeXBlIG9mKGludCBuYW1lc3BhY2UsIGludCBuc1R5cGUpIHsKKyAgICAgICAgc3dpdGNoKG5hbWVzcGFjZSkgeworICAgICAgICAgICAgY2FzZSBOQU1FU1BBQ0VfT05GOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobnNUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTlNfVFlQRV9PTkZfRVRIRVJORVQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVRIRVJORVQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTlNfVFlQRV9PTkZfTk9fUEFDS0VUOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX1BBQ0tFVDsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBOU19UWVBFX09ORl9FWFBFUklNRU5URVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVhQRVJJTUVOVEVSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTkFNRVNQQUNFX0VUSEVSVFlQRToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5zVHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIE5TX1RZUEVfRVRIRVJfSVB2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJUFY0OworICAgICAgICAgICAgICAgICAgICBjYXNlIE5TX1RZUEVfRVRIRVJfSVB2NjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJUFY2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IFBhY2tldFR5cGUobmFtZXNwYWNlLCBuc1R5cGUpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUGFja2V0VHlwZSBvZihPRkhlYWRlclR5cGVOYW1lc3BhY2UgbmFtZXNwYWNlLCBpbnQgbnNUeXBlKSB7CisgICAgICAgIHJldHVybiBvZihuYW1lc3BhY2UuZ2V0U3RhYmxlVmFsdWUoKSwgbnNUeXBlKTsKKworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBQYWNrZXRUeXBlIGFwcGx5TWFzayhQYWNrZXRUeXBlIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIFBhY2tldFR5cGUub2YodGhpcy5uYW1lc3BhY2UgJiBtYXNrLm5hbWVzcGFjZSwgdGhpcy5uc1R5cGUgJiBtYXNrLm5zVHlwZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBjb21wYXJlVG8oUGFja2V0VHlwZSBvKSB7CisgICAgICAgIGludCByZXMgPSBVbnNpZ25lZEludHMuY29tcGFyZSh0aGlzLm5hbWVzcGFjZSwgby5uYW1lc3BhY2UpOworICAgICAgICBpZihyZXMgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZXM7CisKKyAgICAgICAgcmV0dXJuIFVuc2lnbmVkSW50cy5jb21wYXJlKHRoaXMubnNUeXBlLCBvLm5zVHlwZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcHV0VG8oUHJpbWl0aXZlU2luayBzaW5rKSB7CisgICAgICAgIHNpbmsucHV0SW50KG5hbWVzcGFjZSk7CisgICAgICAgIHNpbmsucHV0SW50KG5zVHlwZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRMZW5ndGgoKSB7CisgICAgICAgIC8vNCBieXRlCisgICAgICAgIHJldHVybiA0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHdyaXRlNEJ5dGVzKEJ5dGVCdWYgYykgeworICAgICAgICBjLndyaXRlU2hvcnQobmFtZXNwYWNlKTsKKyAgICAgICAgYy53cml0ZUludChuc1R5cGUpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUGFja2V0VHlwZSByZWFkNEJ5dGVzKEJ5dGVCdWYgYykgeworICAgICAgICByZXR1cm4gUGFja2V0VHlwZS5vZihjLnJlYWRTaG9ydCgpLCBjLnJlYWRJbnQoKSk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXROYW1lc3BhY2UoKSB7CisgICAgICAgIHJldHVybiBuYW1lc3BhY2U7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXROc1R5cGUoKSB7CisgICAgICAgIHJldHVybiBuc1R5cGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7CisgICAgICAgIGludCByZXN1bHQgPSAxOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG5hbWVzcGFjZTsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyBuc1R5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gb2JqKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFBhY2tldFR5cGUgb3RoZXIgPSAoUGFja2V0VHlwZSkgb2JqOworICAgICAgICBpZiAobmFtZXNwYWNlICE9IG90aGVyLm5hbWVzcGFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5zVHlwZSAhPSBvdGhlci5uc1R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiAiUGFja2V0VHlwZSBbbmFtZXNwYWNlPSIgKyBuYW1lc3BhY2UgKyAiLCBuc1R5cGU9IiArIG5zVHlwZSArICJdIjsKKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1RhYmxlSWQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1RhYmxlSWQuamF2YQppbmRleCA5NTAwODdkLi41NTE5ZDRlIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9UYWJsZUlkLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVGFibGVJZC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwpAQCAtNTgsMTEgKzU4LDExIEBACiAgICAgICAgIHJldHVybiBMRU5HVEg7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRlKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUJ5dGUodGhpcy5pZCk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBUYWJsZUlkIHJlYWRCeXRlKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgcHVibGljIHN0YXRpYyBUYWJsZUlkIHJlYWRCeXRlKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBUYWJsZUlkLm9mKGMucmVhZFVuc2lnbmVkQnl0ZSgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1RyYW5zcG9ydFBvcnQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1RyYW5zcG9ydFBvcnQuamF2YQppbmRleCA2YWIwMjU0Li5iZmNhMmQ3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9UcmFuc3BvcnRQb3J0LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVHJhbnNwb3J0UG9ydC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHBvcnQpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlU2hvcnQodGhpcy5wb3J0KTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIFRyYW5zcG9ydFBvcnQgcmVhZDJCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgIHB1YmxpYyBzdGF0aWMgVHJhbnNwb3J0UG9ydCByZWFkMkJ5dGVzKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBUcmFuc3BvcnRQb3J0Lm9mKChjLnJlYWRVbnNpZ25lZFNob3J0KCkgJiAweDBGRkZGKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VMTI4LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VMTI4LmphdmEKaW5kZXggZGRmNGZhYS4uOWU3YmQzNCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTEyOC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1UxMjguamF2YQpAQCAtMiw3ICsyLDcgQEAKIAogaW1wb3J0IGphdmF4LmFubm90YXRpb24uTm9ubnVsbDsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLlVuc2lnbmVkTG9uZ3M7CkBAIC03MSwxMiArNzEsMTIgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGUxNkJ5dGVzKENoYW5uZWxCdWZmZXIgY2IpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTE2Qnl0ZXMoQnl0ZUJ1ZiBjYikgewogICAgICAgICBjYi53cml0ZUxvbmcocmF3MSk7CiAgICAgICAgIGNiLndyaXRlTG9uZyhyYXcyKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIFUxMjggcmVhZDE2Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjYikgeworICAgIHB1YmxpYyBzdGF0aWMgVTEyOCByZWFkMTZCeXRlcyhCeXRlQnVmIGNiKSB7CiAgICAgICAgIGxvbmcgcmF3MSA9IGNiLnJlYWRMb25nKCk7CiAgICAgICAgIGxvbmcgcmF3MiA9IGNiLnJlYWRMb25nKCk7CiAgICAgICAgIHJldHVybiBvZihyYXcxLCByYXcyKTsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1UxNi5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTE2LmphdmEKaW5kZXggMjQ2NmZmYy4uOWVkMGY0NSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTE2LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTE2LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLldyaXRlYWJsZTsKQEAgLTk0LDcgKzk0LDcgQEAKIAogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGJiKSB7CiAgICAgICAgIGJiLndyaXRlU2hvcnQocmF3KTsKICAgICB9CiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUmVhZGVyIGltcGxlbWVudHMgT0ZNZXNzYWdlUmVhZGVyPFUxNj4gewogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFUxNiByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcHVibGljIFUxNiByZWFkRnJvbShCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgICAgIHJldHVybiBvZlJhdyhiYi5yZWFkU2hvcnQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VMzIuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1UzMi5qYXZhCmluZGV4IGM2OTc4NmMuLmZkZGI2NDcgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1UzMi5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1UzMi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZNZXNzYWdlUmVhZGVyOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5Xcml0ZWFibGU7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGJiKSB7CiAgICAgICAgIGJiLndyaXRlSW50KHJhdyk7CiAgICAgfQogCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFJlYWRlciBpbXBsZW1lbnRzIE9GTWVzc2FnZVJlYWRlcjxVMzI+IHsKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBVMzIgcmVhZEZyb20oQ2hhbm5lbEJ1ZmZlciBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgICAgIHB1YmxpYyBVMzIgcmVhZEZyb20oQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFUzMihiYi5yZWFkSW50KCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTY0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VNjQuamF2YQppbmRleCBmMTU1NDRmLi4wZDNjYzZlIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VNjQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VNjQuamF2YQpAQCAtMTksNyArMTksNyBAQAogCiBpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLldyaXRlYWJsZTsKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQnl0ZUJ1ZiBiYikgewogICAgICAgICBiYi53cml0ZUxvbmcocmF3KTsKICAgICB9CiAKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUmVhZGVyIGltcGxlbWVudHMgT0ZNZXNzYWdlUmVhZGVyPFU2ND4gewogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFU2NCByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcHVibGljIFU2NCByZWFkRnJvbShCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgICAgIHJldHVybiBVNjQub2ZSYXcoYmIucmVhZExvbmcoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VOC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTguamF2YQppbmRleCAxNzE5MWFmLi5mNGZlZDU2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VOC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1U4LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIAogcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLldyaXRlYWJsZTsKQEAgLTg5LDcgKzg5LDcgQEAKIAogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGJiKSB7CiAgICAgICAgIGJiLndyaXRlQnl0ZShyYXcpOwogICAgIH0KIApAQCAtMTA2LDcgKzEwNiw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZWFkZXIgaW1wbGVtZW50cyBPRk1lc3NhZ2VSZWFkZXI8VTg+IHsKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBVOCByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcHVibGljIFU4IHJlYWRGcm9tKEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBVOChiYi5yZWFkQnl0ZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1VERi5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVURGLmphdmEKaW5kZXggZTUzN2MyMC4uYmM0M2Q1NiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVURGLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVURGLmphdmEKQEAgLTIsNyArMiw3IEBACiAKIGltcG9ydCBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuSW1tdXRhYmxlOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogCiBpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaGFzaC5QcmltaXRpdmVTaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnByaW1pdGl2ZXMuVW5zaWduZWRJbnRzOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHJhd1ZhbHVlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTRCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgYy53cml0ZUludChyYXdWYWx1ZSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBVREYgcmVhZDRCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgc3RhdGljIFVERiByZWFkNEJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICByZXR1cm4gVURGLm9mKGMucmVhZEludCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZGSS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVkZJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2OTFlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZGSS5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKK3BhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CisKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CisKKy8qKiBSZXByZXNlbnRzIGEgdHdvIGJ5dGUgdmlydHVhbCBmb3J3YXJkaW5nIGluc3RhbmNlLgorKgorKiBAYXV0aG9yIFN1ZGVlcCBNb2RpIHtAbGl0ZXJhbCA8fXN1ZGVlcC5tb2RpQGJpZ3N3aXRjaC5jb217QGxpdGVyYWwgPn0KKyoKKyovcHVibGljIGNsYXNzIFZGSSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPFZGST4geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IFpFUk9fVkFMID0gMHgwMDAwOworICAgIGZpbmFsIHN0YXRpYyBpbnQgTEVOR1RIID0gMjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVkZJIFpFUk8gPSBuZXcgVkZJKFpFUk9fVkFMKTsKKworICAgIC8qKiBmb3IgdXNlIHdpdGggbWFza2luZyBvcGVyYXRpb25zICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWRkkgTk9fTUFTSyA9IG5ldyBWRkkoKHNob3J0KTB4RkZGRik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWRkkgRlVMTF9NQVNLID0gWkVSTzsKKworICAgIHByaXZhdGUgZmluYWwgc2hvcnQgdmZpOworCisgICAgcHJpdmF0ZSBWRkkoc2hvcnQgdmZpKSB7CisgICAgICAgIHRoaXMudmZpID0gdmZpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgVkZJIG9mVmZpKGludCB2ZmkpIHsKKyAgICAgICAgaWYgKHZmaSA9PSBOT19NQVNLLnZmaSkKKyAgICAgICAgICAgIHJldHVybiBOT19NQVNLOworICAgICAgICBpZiAodmZpID09IFpFUk9fVkFMKQorICAgICAgICAgICAgcmV0dXJuIFpFUk87CisgICAgICAgIHJldHVybiBuZXcgVkZJKChzaG9ydCkgdmZpKTsKKyAgICB9CisKKyAgICAvKiogQHJldHVybiB0aGUgYWN0dWFsIFZGSSB2YWx1ZSAqLworICAgIHB1YmxpYyBzaG9ydCBnZXRWZmkoKSB7CisgICAgICAgIHJldHVybiB2Zmk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7CisgICAgICAgIGludCByZXN1bHQgPSAxOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIHZmaTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOworICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgVkZJIG90aGVyID0gKFZGSSkgb2JqOworICAgICAgICBpZiAodmZpICE9IG90aGVyLnZmaSkgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gIjB4IiArIEludGVnZXIudG9IZXhTdHJpbmcodmZpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIExFTkdUSDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTJCeXRlcyhCeXRlQnVmIGMpIHsKKyAgICAgICAgYy53cml0ZVNob3J0KHRoaXMudmZpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFZGSSByZWFkMkJ5dGVzKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgICAgIHJldHVybiBWRkkub2ZWZmkoYy5yZWFkU2hvcnQoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZGSSBhcHBseU1hc2soVkZJIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIFZGSS5vZlZmaSh0aGlzLnZmaSAmIG1hc2sudmZpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhWRkkgbykgeworICAgICAgICByZXR1cm4gSW50ZWdlci5jb21wYXJlKHZmaSAmIDB4ZmZmZiwgby52ZmkgJiAweGZmZmYpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHB1dFRvKFByaW1pdGl2ZVNpbmsgc2luaykgeworICAgICAgICBzaW5rLnB1dFNob3J0KHZmaSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9WUkYuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZSRi5qYXZhCmluZGV4IGI3NDJkYTUuLmFkNTdlN2QgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZSRi5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZSRi5qYXZhCkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50LkltbXV0YWJsZTsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLlVuc2lnbmVkSW50czsKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyhyYXdWYWx1ZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVJbnQocmF3VmFsdWUpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgVlJGIHJlYWQ0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CisgICAgcHVibGljIHN0YXRpYyBWUkYgcmVhZDRCeXRlcyhCeXRlQnVmIGMpIHsKICAgICAgICAgcmV0dXJuIFZSRi5vZihjLnJlYWRJbnQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9WbGFuUGNwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9WbGFuUGNwLmphdmEKaW5kZXggY2JiNzAwNC4uNWVjMjVkYyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVmxhblBjcC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZsYW5QY3AuamF2YQpAQCAtMSw2ICsxLDYgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKQEAgLTU4LDExICs1OCwxMSBAQAogICAgICAgICByZXR1cm4gTEVOR1RIOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZShDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGUoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVCeXRlKHRoaXMucGNwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIFZsYW5QY3AgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljIFZsYW5QY3AgcmVhZEJ5dGUoQnl0ZUJ1ZiBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIFZsYW5QY3Aub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpICYgMHhGRikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVmxhblZpZC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVmxhblZpZC5qYXZhCmluZGV4IDFjM2ViYTQuLmE4NDI4MjEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1ZsYW5WaWQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9WbGFuVmlkLmphdmEKQEAgLTEsOCArMSw5IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAoraW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworCiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5oYXNoLlByaW1pdGl2ZVNpbms7CkBAIC04NiwxNSArODcsMTUgQEAKICAgICAgICAgcmV0dXJuIEFycmF5cy5jb3B5T2YoYnl0ZXNDYWNoZSwgYnl0ZXNDYWNoZS5sZW5ndGgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgeworICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzKEJ5dGVCdWYgYykgewogICAgICAgICBjLndyaXRlU2hvcnQodGhpcy52aWQpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHdyaXRlMkJ5dGVzT0YxMChDaGFubmVsQnVmZmVyIGMpIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZTJCeXRlc09GMTAoQnl0ZUJ1ZiBjKSB7CiAgICAgICAgIGMud3JpdGVTaG9ydCh0aGlzLmdldFZsYW4oKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBWbGFuVmlkIHJlYWQyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljIFZsYW5WaWQgcmVhZDJCeXRlcyhCeXRlQnVmIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gVmxhblZpZC5vZlZsYW4oYy5yZWFkU2hvcnQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9WeGxhbk5JLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9WeGxhbk5JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1MmI1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1Z4bGFuTkkuamF2YQpAQCAtMCwwICsxLDk4IEBACitwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKKworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmhhc2guUHJpbWl0aXZlU2luazsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLlVuc2lnbmVkSW50czsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworCisvKiogUmVwcmVzZW50cyB0aGUgVlhMQU4gTmV0d29yayBJZGVudGlmaWVyICgyNCBiaXRzKS4KKyAqCisgKiBAYXV0aG9yIFNhcmF0aCBLdW1hciBTYW5rYXJhbiBLdXR0eQorICoge0BsaXRlcmFsIDx9c2FyYXRoLmt1dHR5QGJpZ3N3aXRjaC5jb217QGxpdGVyYWwgPn0KKyAqLworcHVibGljIGNsYXNzIFZ4bGFuTkkgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxWeGxhbk5JPiB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTl9NQVNLID0gMHgwMEZGZmZGRjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IExFTkdUSCA9IDQ7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWkVST19WQUwgPSAweDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWeGxhbk5JIFpFUk8gPSBuZXcgVnhsYW5OSShaRVJPX1ZBTCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9fTUFTS19WQUwgPSAweEZGZmZGRmZmOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVnhsYW5OSSBOT19NQVNLID0gbmV3IFZ4bGFuTkkoTk9fTUFTS19WQUwpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVnhsYW5OSSBGVUxMX01BU0sgPSBaRVJPOworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgdm5pOworCisgICAgcHJpdmF0ZSBWeGxhbk5JKGludCB2bmkpIHsKKyAgICAgICAgdGhpcy52bmkgPSB2bmk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBWeGxhbk5JIG9mVm5pKGludCB2bmkpIHsKKyAgICAgICAgaWYgKHZuaSA9PSBaRVJPX1ZBTCkKKyAgICAgICAgICAgIHJldHVybiBaRVJPOworICAgICAgICBpZiAoKHZuaSAmIFZBTElEQVRJT05fTUFTSykgIT0gdm5pKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoIklsbGVnYWwgVk5JIHZhbHVlOiAleCIsIHZuaSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgVnhsYW5OSSh2bmkpOworICAgIH0KKworICAgIC8qKiBAcmV0dXJuIHRoZSBWeExBTiBOZXR3b3JrIElEICovCisgICAgcHVibGljIGludCBnZXRWbmkoKSB7CisgICAgICAgIHJldHVybiB2bmk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gb2JqKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIFZ4bGFuTkkgb3RoZXIgPSAoVnhsYW5OSSkgb2JqOworICAgICAgICBpZiAodm5pICE9IG90aGVyLnZuaSkgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICBmaW5hbCBpbnQgcHJpbWUgPSAzMTsKKyAgICAgICAgaW50IHJlc3VsdCA9IDE7CisgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgdm5pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBTdHJpbmcudmFsdWVPZih2bmkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgeworICAgICAgICByZXR1cm4gTEVOR1RIOworICAgIH0KKworCisgICAgcHVibGljIHZvaWQgd3JpdGU0Qnl0ZXMoQnl0ZUJ1ZiBjKSB7CisgICAgICAgIGMud3JpdGVJbnQodGhpcy52bmkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgVnhsYW5OSSByZWFkNEJ5dGVzKEJ5dGVCdWYgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CisgICAgICAgIHJldHVybiBWeGxhbk5JLm9mVm5pKGMucmVhZEludCgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgVnhsYW5OSSBhcHBseU1hc2soVnhsYW5OSSBtYXNrKSB7CisgICAgICAgIHJldHVybiBWeGxhbk5JLm9mVm5pKHRoaXMudm5pICYgbWFzay52bmkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKFZ4bGFuTkkgbykgeworICAgICAgICByZXR1cm4gVW5zaWduZWRJbnRzLmNvbXBhcmUodm5pLCBvLnZuaSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcHV0VG8oUHJpbWl0aXZlU2luayBzaW5rKSB7CisgICAgICAgIHNpbmsucHV0SW50KHZuaSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9DaGFubmVsVXRpbHMuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvQ2hhbm5lbFV0aWxzLmphdmEKaW5kZXggMWExYWM2YS4uOTNkN2JhNiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9DaGFubmVsVXRpbHMuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy91dGlsL0NoYW5uZWxVdGlscy5qYXZhCkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRk1lc3NhZ2VSZWFkZXI7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLldyaXRlYWJsZTsKQEAgLTE0LDE0ICsxNCwxNSBAQAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlTGlzdC5CdWlsZGVyOwogCiAvKioKLSAqIENvbGxlY3Rpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBpbnRvIENoYW5uZWxCdWZmZXJzCisgKiBDb2xsZWN0aW9uIG9mIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgaW50byBVbnBvb2xlZAogICoKICAqIEBhdXRob3IgY2FwdmVnCiAgKi8KIAogcHVibGljIGNsYXNzIENoYW5uZWxVdGlscyB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKENoYW5uZWxVdGlscy5jbGFzcyk7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVhZEZpeGVkTGVuZ3RoU3RyaW5nKENoYW5uZWxCdWZmZXIgYmIsIGludCBsZW5ndGgpIHsKKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlYWRGaXhlZExlbmd0aFN0cmluZyhCeXRlQnVmIGJiLCBpbnQgbGVuZ3RoKSB7CiAgICAgICAgIGJ5dGVbXSBkc3QgPSBuZXcgYnl0ZVtsZW5ndGhdOwogICAgICAgICBiYi5yZWFkQnl0ZXMoZHN0LCAwLCBsZW5ndGgpOwogICAgICAgICBpbnQgdmFsaWRMZW5ndGggPSAwOwpAQCAtMzIsNyArMzMsNyBAQAogICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhkc3QsIDAsIHZhbGlkTGVuZ3RoLCBDaGFyc2V0cy5VU19BU0NJSSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlRml4ZWRMZW5ndGhTdHJpbmcoQ2hhbm5lbEJ1ZmZlciBiYiwgU3RyaW5nIHN0cmluZywKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVGaXhlZExlbmd0aFN0cmluZyhCeXRlQnVmIGJiLCBTdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgaW50IGxlbmd0aCkgewogICAgICAgICBpbnQgbCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICAgICAgaWYgKGwgPiBsZW5ndGgpIHsKQEAgLTQ1LDE4ICs0NiwxOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHB1YmxpYyBieXRlW10gcmVhZEJ5dGVzKGZpbmFsIENoYW5uZWxCdWZmZXIgYmIsIGZpbmFsIGludCBsZW5ndGgpIHsKKyAgICBzdGF0aWMgcHVibGljIGJ5dGVbXSByZWFkQnl0ZXMoZmluYWwgQnl0ZUJ1ZiBiYiwgZmluYWwgaW50IGxlbmd0aCkgewogICAgICAgICBieXRlIGJ5dGVBcnJheVtdID0gbmV3IGJ5dGVbbGVuZ3RoXTsKICAgICAgICAgYmIucmVhZEJ5dGVzKGJ5dGVBcnJheSk7CiAgICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgfQogCi0gICAgc3RhdGljIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZXMoZmluYWwgQ2hhbm5lbEJ1ZmZlciBiYiwKKyAgICBzdGF0aWMgcHVibGljIHZvaWQgd3JpdGVCeXRlcyhmaW5hbCBCeXRlQnVmIGJiLAogICAgICAgICAgICAgZmluYWwgYnl0ZSBieXRlQXJyYXlbXSkgewogICAgICAgICBiYi53cml0ZUJ5dGVzKGJ5dGVBcnJheSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyA8VD4gTGlzdDxUPiByZWFkTGlzdChDaGFubmVsQnVmZmVyIGJiLCBpbnQgbGVuZ3RoLCBPRk1lc3NhZ2VSZWFkZXI8VD4gcmVhZGVyKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBMaXN0PFQ+IHJlYWRMaXN0KEJ5dGVCdWYgYmIsIGludCBsZW5ndGgsIE9GTWVzc2FnZVJlYWRlcjxUPiByZWFkZXIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICBpbnQgZW5kID0gYmIucmVhZGVySW5kZXgoKSArIGxlbmd0aDsKICAgICAgICAgQnVpbGRlcjxUPiBidWlsZGVyID0gSW1tdXRhYmxlTGlzdC48VD5idWlsZGVyKCk7CiAgICAgICAgIGlmKGxvZ2dlci5pc1RyYWNlRW5hYmxlZCgpKQpAQCAtNzMsNyArNzQsNyBAQAogICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZUxpc3QoQ2hhbm5lbEJ1ZmZlciBiYiwgTGlzdDw/IGV4dGVuZHMgV3JpdGVhYmxlPiB3cml0ZWFibGVzKSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlTGlzdChCeXRlQnVmIGJiLCBMaXN0PD8gZXh0ZW5kcyBXcml0ZWFibGU+IHdyaXRlYWJsZXMpIHsKICAgICAgICAgZm9yKFdyaXRlYWJsZSB3OiB3cml0ZWFibGVzKQogICAgICAgICAgICAgdy53cml0ZVRvKGJiKTsKICAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy91dGlsL0hleFN0cmluZy5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9IZXhTdHJpbmcuamF2YQppbmRleCBiY2M0NmY3Li4wMGNjNjVlIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy91dGlsL0hleFN0cmluZy5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvSGV4U3RyaW5nLmphdmEKQEAgLTEsNzAgKzEsMTA0IEBACi0vKioKLSAqICAgIENvcHlyaWdodCAoYykgMjAwOCBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgVGhlIExlbGFuZCBTdGFuZm9yZCBKdW5pb3IKLSAqICAgIFVuaXZlcnNpdHkKLSAqCi0gKiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQotICogICAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4KLSAqICAgIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotICogICAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCi0gKiAgICBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogICAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKiovCi0KIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnV0aWw7CiAKLWltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuVTg7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5pbnRlcm5hbC5FbXB0eUFycmF5czsKIAotcHVibGljIGNsYXNzIEhleFN0cmluZyB7CisvKiogVXRpbGl0eSBtZXRob2QgdG8gY29udmVydCBoZXhhZGVjaW1hbCBzdHJpbmcgZnJvbS90byBsb25ncyBhbmQgYnl0ZSBhcnJheXMuCisgKgorICogQGF1dGhvciBBbmRyZWFzIFd1bmRzYW0ge0BsaXRlcmFsIDx9YW5kcmVhcy53dW5kc2FtQGJpZ3N3aXRjaC5jb217QGxpdGVyYWwgPn0KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEhleFN0cmluZyB7CisKKyAgICBwcml2YXRlIEhleFN0cmluZygpIHt9CisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAqIEltcGxlbWVudGF0aW9uIG5vdGU6CisgICAgICogVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBvcHRpbWl6ZWQgZm9yIHNtYWxsLU8gZWZmaWNpZW5jeSBhbmQgdGh1cyByYXRoZXIgdWdseS4KKyAgICAgKgorICAgICAqIFdoZW4gbWFraW5nIGNoYW5nZXMsIG1ha2Ugc3VyZSAqZXZlcnkgbGluZSogaXMgY292ZXJlZCBieSBhIHVuaXQgdGVzdC4KKyAgICAgKgorICAgICAqIERvIG5vdCB1c2UgdGhpcyBhcyBhIGJsdWUgcHJpbnQgZm9yIG5vcm1hbCBjb2RlLgorICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICovCisKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBjaGFyW10gQ0hBUlMgPQorICAgICAgICB7ICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJyB9OworCiAgICAgLyoqCiAgICAgICogQ29udmVydCBhIHN0cmluZyBvZiBieXRlcyB0byBhICc6JyBzZXBhcmF0ZWQgaGV4IHN0cmluZwogICAgICAqCi0gICAgICogQHBhcmFtIGJ5dGVzCisgICAgICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlW10gdG8gY29udmVydAogICAgICAqIEByZXR1cm4gIjBmOmNhOmZlOmRlOmFkOmJlOmVmIgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4U3RyaW5nKGZpbmFsIGJ5dGVbXSBieXRlcykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgU3RyaW5nIHJldCA9ICIiOwotICAgICAgICBTdHJpbmcgdG1wOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICByZXQgKz0gIjoiOwotICAgICAgICAgICAgdG1wID0gSW50ZWdlci50b0hleFN0cmluZyhVOC5mKGJ5dGVzW2ldKSk7Ci0gICAgICAgICAgICBpZiAodG1wLmxlbmd0aCgpID09IDEpCi0gICAgICAgICAgICAgICAgcmV0ICs9ICIwIjsKLSAgICAgICAgICAgIHJldCArPSB0bXA7CisgICAgICAgIGludCBsZW5CeXRlcyA9IGJ5dGVzLmxlbmd0aDsKKyAgICAgICAgaWYgKGxlbkJ5dGVzID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBjaGFyIGFycltdID0gbmV3IGNoYXJbbGVuQnl0ZXMgKiAyICsgKGxlbkJ5dGVzIC0xKV07CisKKyAgICAgICAgaW50IGNoYXJQb3MgPSAwOworICAgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgYXJyW2NoYXJQb3MrK10gPSBDSEFSU1sgKGJ5dGVzW2ldID4+PiA0KSAmIDB4RiBdOworICAgICAgICAgICAgYXJyW2NoYXJQb3MrK10gPSBDSEFSU1sgYnl0ZXNbaV0gJiAweEYgXTsKKyAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFycltjaGFyUG9zKytdID0gJzonOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYXJyLCAwLCBhcnIubGVuZ3RoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0hleFN0cmluZyhmaW5hbCBsb25nIHZhbCwgZmluYWwgaW50IHBhZFRvKSB7Ci0gICAgICAgIGNoYXIgYXJyW10gPSBMb25nLnRvSGV4U3RyaW5nKHZhbCkudG9DaGFyQXJyYXkoKTsKLSAgICAgICAgU3RyaW5nIHJldCA9ICIiOwotICAgICAgICAvLyBwcmVwZW5kIHRoZSByaWdodCBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgKHBhZFRvICogMiAtIGFyci5sZW5ndGgpOyBpKyspIHsKLSAgICAgICAgICAgIHJldCArPSAiMCI7Ci0gICAgICAgICAgICBpZiAoKGkgJSAyKSAhPSAwKQotICAgICAgICAgICAgICAgIHJldCArPSAiOiI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9IZXhTdHJpbmcobG9uZyB2YWwsIGZpbmFsIGludCBwYWRUbykgeworICAgICAgICBpbnQgdmFsQnl0ZXMgPSAoNjQgLSBMb25nLm51bWJlck9mTGVhZGluZ1plcm9zKHZhbCkgKyA3KS84OworICAgICAgICBpbnQgbGVuQnl0ZXMgPSB2YWxCeXRlcyA+IHBhZFRvID8gdmFsQnl0ZXMgOiBwYWRUbzsKKworICAgICAgICBjaGFyIGFycltdID0gbmV3IGNoYXJbbGVuQnl0ZXMgKiAyICsgKGxlbkJ5dGVzIC0xKV07CisKKyAgICAgICAgLy8gZmlsbCBjaGFyIGFycmF5IGZyb20gdGhlIGxhc3QgcG9zaXRpb24sIHNoaWZ0aW5nIHZhbCBieSA0IGJpdHMKKyAgICAgICAgZm9yIChpbnQgY2hhclBvcyA9IGFyci5sZW5ndGggLSAxOyBjaGFyUG9zID49IDA7IGNoYXJQb3MtLSkgeworICAgICAgICAgICAgaWYgKChjaGFyUG9zICsgMSkgJSAzID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBldmVyeSB0aGlyZCBjaGFyIGlzIGEgY29sb24KKyAgICAgICAgICAgICAgICBhcnJbY2hhclBvc10gPSAnOic7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFycltjaGFyUG9zXSA9IENIQVJTWygoaW50KSB2YWwpICYgMHhGXTsKKyAgICAgICAgICAgICAgICB2YWwgPj4+PSA0OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICByZXQgKz0gYXJyW2pdOwotICAgICAgICAgICAgaWYgKCgoKGkgKyBqKSAlIDIpICE9IDApICYmIChqIDwgKGFyci5sZW5ndGggLSAxKSkpCi0gICAgICAgICAgICAgICAgcmV0ICs9ICI6IjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OworICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhhcnIsIDAsIGFyci5sZW5ndGgpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4U3RyaW5nKGZpbmFsIGxvbmcgdmFsKSB7CiAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyh2YWwsIDgpOwogICAgIH0KIAorCisgICAgLyoqIERlcHJlY2F0ZWQgdmVyc2lvbiBvZiB7QGxpbmsgI3RvQnl0ZXMoU3RyaW5nKX0uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiB1cG9uIHZhbHVlcyBwYXJzZSBlcnJvcgorICAgICAqIEBwYXJhbSB2YWx1ZXMgdGhlIGhleHN0cmluZyB0byBwYXJzZSBpbnRvIGEgYnl0ZVtdCisgICAgICogQHJldHVybiBhIGJ5dGVbXSByZXByZXNlbnRpbmcgdGhlIGhleHN0cmluZworICAgICAqIHtAbGluayBEZXByZWNhdGVkfSBiZWNhdXNlIG9mIGluY29uc2lzdGVudCBuYW1pbmcKKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGZyb21IZXhTdHJpbmcoZmluYWwgU3RyaW5nIHZhbHVlcykgdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiB0b0J5dGVzKHZhbHVlcyk7CisgICAgfQorCisgICAgLyoqIHN0YXRlIGNvbnN0YW50cyBmb3IgdG9CeXRlcyAqLworICAgIC8qKiBleHBlY3RpbmcgZmlyc3QgZGlnaXQgKi8KKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRklSU1RfRElHSVQgPSAxOworICAgIC8qKiBleHBlY3Rpbmcgc2Vjb25kIGRpZ2l0IG9yIGNvbG9uICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFQ09ORF9ESUdJVF9PUl9DT0xPTiA9IDI7CisgICAgLyoqIGV4cGVjdGluZyBjb2xvbiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPTiA9IDM7CisgICAgLyoqIHNhdmUgYnl0ZSBhbmQgbW92ZSBiYWNrIHRvIEZJUlNUX0RJR0lUICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNBVkVfQllURSA9IDQ7CisKICAgICAvKioKLSAgICAgKiBDb252ZXJ0IGEgc3RyaW5nIG9mIGhleCB2YWx1ZXMgaW50byBhIHN0cmluZyBvZiBieXRlcworICAgICAqIENvbnZlcnQgYSBzdHJpbmcgb2YgaGV4IHZhbHVlcyBpbnRvIGEgc3RyaW5nIG9mIGJ5dGVzLgogICAgICAqCiAgICAgICogQHBhcmFtIHZhbHVlcwogICAgICAqICAgICAgICAgICAgIjBmOmNhOmZlOmRlOmFkOmJlOmVmIgpAQCAtNzIsMjkgKzEwNiwxMDMgQEAKICAgICAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbgogICAgICAqICAgICAgICAgICAgIElmIHRoZSBzdHJpbmcgY2FuIG5vdCBiZSBwYXJzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSBmcm9tSGV4U3RyaW5nKGZpbmFsIFN0cmluZyB2YWx1ZXMpIHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gewotICAgICAgICBTdHJpbmdbXSBvY3RldHMgPSB2YWx1ZXMuc3BsaXQoIjoiKTsKLSAgICAgICAgYnl0ZVtdIHJldCA9IG5ldyBieXRlW29jdGV0cy5sZW5ndGhdOworICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIHRvQnl0ZXMoZmluYWwgU3RyaW5nIHZhbHVlcykgdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiB7CisgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgIGludCBsZW4gPSB2YWx1ZXMubGVuZ3RoKCk7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvY3RldHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChvY3RldHNbaV0ubGVuZ3RoKCkgPiAyKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgb2N0ZXQgbGVuZ3RoIik7Ci0gICAgICAgICAgICByZXRbaV0gPSBJbnRlZ2VyLnZhbHVlT2Yob2N0ZXRzW2ldLCAxNikuYnl0ZVZhbHVlKCk7CisgICAgICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIEVtcHR5QXJyYXlzLkVNUFRZX0JZVEVTOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgaW50IG51bUNvbG9ucyA9IDA7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBpZiAodmFsdWVzLmNoYXJBdChpKSA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICBudW1Db2xvbnMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJ5dGVbXSByZXMgPSBuZXcgYnl0ZVtudW1Db2xvbnMrMV07CisgICAgICAgIGludCBwb3MgPSAwOworCisgICAgICAgIGludCBzdGF0ZSA9IEZJUlNUX0RJR0lUOworCisgICAgICAgIGJ5dGUgYiA9IDA7CisgICAgICAgIHdoaWxlIChzdGFydCA8IGxlbikgeworICAgICAgICAgICAgY2hhciBjID0gdmFsdWVzLmNoYXJBdChzdGFydCsrKTsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZJUlNUX0RJR0lUOgorICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBDaGFyYWN0ZXIuZGlnaXQoYywgMTYpOworICAgICAgICAgICAgICAgICAgICBpZihkaWdpdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhciBhdCBpbmRleCAiICsgc3RhcnQgKyAiOiAiICsgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiID0gKGJ5dGUpIGRpZ2l0OworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXJ0IDwgbGVuID8gU0VDT05EX0RJR0lUX09SX0NPTE9OIDogU0FWRV9CWVRFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFQ09ORF9ESUdJVF9PUl9DT0xPTjoKKyAgICAgICAgICAgICAgICAgICAgaWYoYyAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdDIgPSBDaGFyYWN0ZXIuZGlnaXQoYywgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGlnaXQyIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhciBhdCBpbmRleCAiICsgc3RhcnQgKyAiOiAiICsgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAgKGJ5dGUpICgoYjw8NCkgfCBkaWdpdDIpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGFydCA8IGxlbiA/IENPTE9OIDogU0FWRV9CWVRFOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTQVZFX0JZVEU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDT0xPTjoKKyAgICAgICAgICAgICAgICAgICAgaWYoYyAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIlNlcGFyYXRvciBleHBlY3RlZCBhdCBpbmRleCAiICsgc3RhcnQgKyAiOiAiICsgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFNBVkVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCBiZSBpbiBzdGF0ZSAiICsgc3RhdGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRlID09IFNBVkVfQllURSkgeworICAgICAgICAgICAgICAgIHJlc1twb3MrK10gPSBiOworICAgICAgICAgICAgICAgIGIgPSAwOworICAgICAgICAgICAgICAgIHN0YXRlID0gRklSU1RfRElHSVQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyAhPSByZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBkZXRlY3RzIGEgbWFsLWZvcm1lZCBpbnB1dCBzdHJpbmcsIGUuZy4sICIwMTowMjoiCisgICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGhleCBzdHJpbmc6ICIgKyB2YWx1ZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGxvbmcgdG9Mb25nKFN0cmluZyB2YWx1ZSkgdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZ1tdIG9jdGV0cyA9IHZhbHVlLnNwbGl0KCI6Iik7Ci0gICAgICAgIGlmIChvY3RldHMubGVuZ3RoID4gOCkKLSAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIklucHV0IHN0cmluZyBpcyB0b28gYmlnIHRvIGZpdCBpbiBsb25nOiAiICsgdmFsdWUpOwotICAgICAgICBsb25nIGwgPSAwOwotICAgICAgICBmb3IgKFN0cmluZyBvY3RldDogb2N0ZXRzKSB7Ci0gICAgICAgICAgICBpZiAob2N0ZXQubGVuZ3RoKCkgPiAyKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIkVhY2ggY29sb24tc2VwYXJhdGVkIGJ5dGUgY29tcG9uZW50IG11c3QgY29uc2lzdCBvZiAxIG9yIDIgaGV4IGRpZ2l0czogIiArIHZhbHVlKTsKLSAgICAgICAgICAgIHNob3J0IHMgPSBTaG9ydC5wYXJzZVNob3J0KG9jdGV0LCAxNik7Ci0gICAgICAgICAgICBsID0gKGwgPDwgOCkgKyBzOworICAgICAgICBpbnQgc2hpZnQgPSAwOworICAgICAgICBsb25nIHJlc3VsdCA9IDBMOworCisgICAgICAgIGludCBzaW5jZUxhc3RTZXBhcmF0b3IgPSAwOworICAgICAgICBmb3IgKGludCBjaGFyUG9zPXZhbHVlLmxlbmd0aCgpIC0gMTsgY2hhclBvcyA+PSAwOyBjaGFyUG9zLS0pIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHZhbHVlLmNoYXJBdChjaGFyUG9zKTsKKyAgICAgICAgICAgIGlmIChjID09ICc6JykgeworICAgICAgICAgICAgICAgIGlmIChzaW5jZUxhc3RTZXBhcmF0b3IgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJFeHBlY3RlZCBoZXggZGlnaXQgYXQgaW5kZXggIiArIGNoYXJQb3MgKyI6ICIgKyB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHNpbmNlTGFzdFNlcGFyYXRvciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNpbmNlTGFzdFNlcGFyYXRvciA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IENoYXJhY3Rlci5kaWdpdChjLCAxNik7CisgICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGhleCBkaWdpdCBhdCBpbmRleCAiICsgY2hhclBvcyArIjogIiArIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0IHw9ICgobG9uZykgZGlnaXQpIDw8IHNoaWZ0OworICAgICAgICAgICAgICAgIHNoaWZ0ICs9NDsKKyAgICAgICAgICAgICAgICBzaW5jZUxhc3RTZXBhcmF0b3IrKzsKKyAgICAgICAgICAgICAgICBpZiAoc2luY2VMYXN0U2VwYXJhdG9yID4gMikgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJFeHBlY3RlZCBjb2xvbiBhdCBpbmRleCAiICsgY2hhclBvcyArIjogIiArIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hpZnQgPiA2NCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIlRvbyBtYW55IGJ5dGVzIGluIGhleCBzdHJpbmcgdG8gY29udmVydCB0byBsb25nOiAiICsgdmFsdWUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvTXVsdGlwbGVQa3RJblJlYXNvblV0aWwuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvTXVsdGlwbGVQa3RJblJlYXNvblV0aWwuamF2YQppbmRleCAzZWU1ODhmLi4xMDdiN2NmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy91dGlsL011bHRpcGxlUGt0SW5SZWFzb25VdGlsLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9NdWx0aXBsZVBrdEluUmVhc29uVXRpbC5qYXZhCkBAIC0yMCw3ICsyMCwxMCBAQAogICAgIC8qKgogICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBCVlMgVDUvNiB0byBkZWNvZGUgdGhlIG11bHRpcGxlIHBhY2tldCBpbgogICAgICAqIHJlYXNvbnMgaW4gTWF0Y2guTWV0YURhdGEgZmllbGQuCi0gICAgICogKi8KKyAgICAgKgorICAgICAqIEBwYXJhbSBwa3RJbiB0aGUgcGFja2V0IGluIG1lc3NhZ2UKKyAgICAgKiBAcmV0dXJuIHRoZSBzZXQgb2YgcGFja2V0IGluIHJlYXNvbnMKKyAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFNldDxPRkJzblBrdGluRmxhZz4gZ2V0T0ZCc25Qa3RpbkZsYWdzKE9GUGFja2V0SW4gcGt0SW4pIHsKICAgICAgICAgaWYocGt0SW4uZ2V0VmVyc2lvbigpLmNvbXBhcmVUbyhPRlZlcnNpb24uT0ZfMTMpIDwgMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibXVsdGlwbGUgcGt0IGluIHJlYXNvbnMgYXJlICIKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvUHJpbWl0aXZlU2lua1V0aWxzLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy91dGlsL1ByaW1pdGl2ZVNpbmtVdGlscy5qYXZhCmluZGV4IGFhZmUyNjIuLjdiMDFlNGMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvUHJpbWl0aXZlU2lua1V0aWxzLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9QcmltaXRpdmVTaW5rVXRpbHMuamF2YQpAQCAtNDgsOCArNDgsOCBAQAogICAgIC8qKiBwdXRzIHRoZSBlbGVtZW50cyBvZiBhIHNvcnRlZCBzZXQgaW50byB0aGUge0BsaW5rIFByaW1pdGl2ZVNpbmt9LiBEb2VzIG5vdCBzdXBwb3J0IG51bGwKICAgICAgKiAgZWxlbWVudHMuIFRoZSBlbGVtZW50cyBhcmUgYXNzdW1lZCB0byBiZSBzZWxmLWRlbGltaXRhdGluZy4KICAgICAgKgotICAgICAqIEBwYXJhbSBzaW5rCi0gICAgICogQHBhcmFtIHNldAorICAgICAqIEBwYXJhbSBzaW5rIHRoZSBzaW5rIHRvIHB1dCB0aGUgc29ydGVkIHNldAorICAgICAqIEBwYXJhbSBzZXQgdGhlIHNvcnRlZCBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHV0U29ydGVkU2V0VG8oUHJpbWl0aXZlU2luayBzaW5rLAogICAgICAgICAgICAgU29ydGVkU2V0PD8gZXh0ZW5kcyBQcmltaXRpdmVTaW5rYWJsZT4gc2V0KSB7CkBAIC02MiwxMyArNjIsMTMgQEAKICAgICAvKiogcHV0cyB0aGUgZWxlbWVudHMgb2YgYSBsaXN0IGludG8gdGhlIHtAbGluayBQcmltaXRpdmVTaW5rfS4gRG9lcyBub3Qgc3VwcG9ydCBudWxsCiAgICAgICogIGVsZW1lbnRzLiBUaGUgZWxlbWVudHMgYXJlIGFzc3VtZWQgdG8gYmUgc2VsZi1kZWxpbWl0YXRpbmcuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gc2luawotICAgICAqIEBwYXJhbSBzZXQKKyAgICAgKiBAcGFyYW0gc2luayB0aGUgc2luayB0byBwdXQgdGhlIGxpc3QgZWxlbWVudHMKKyAgICAgKiBAcGFyYW0gbGlzdCB0aGUgbGlzdAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwdXRMaXN0VG8oUHJpbWl0aXZlU2luayBzaW5rLAotICAgICAgICAgICAgTGlzdDw/IGV4dGVuZHMgUHJpbWl0aXZlU2lua2FibGU+IHNldCkgewotICAgICAgICBzaW5rLnB1dEludChzZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yKFByaW1pdGl2ZVNpbmthYmxlIGU6IHNldCkgeworICAgICAgICAgICAgTGlzdDw/IGV4dGVuZHMgUHJpbWl0aXZlU2lua2FibGU+IGxpc3QpIHsKKyAgICAgICAgc2luay5wdXRJbnQobGlzdC5zaXplKCkpOworICAgICAgICBmb3IoUHJpbWl0aXZlU2lua2FibGUgZTogbGlzdCkgewogICAgICAgICAgICAgZS5wdXRUbyhzaW5rKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvU3RyaW5nQnl0ZVNlcmlhbGl6ZXIuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvU3RyaW5nQnl0ZVNlcmlhbGl6ZXIuamF2YQppbmRleCA2OTQ5ZmIyLi42Mzk2ZjJlIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy91dGlsL1N0cmluZ0J5dGVTZXJpYWxpemVyLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9TdHJpbmdCeXRlU2VyaWFsaXplci5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIGltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIAogcHVibGljIGNsYXNzIFN0cmluZ0J5dGVTZXJpYWxpemVyIHsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyByZWFkRnJvbShmaW5hbCBDaGFubmVsQnVmZmVyIGRhdGEsIGZpbmFsIGludCBsZW5ndGgpIHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyByZWFkRnJvbShmaW5hbCBCeXRlQnVmIGRhdGEsIGZpbmFsIGludCBsZW5ndGgpIHsKICAgICAgICAgYnl0ZVtdIHN0cmluZ0J5dGVzID0gbmV3IGJ5dGVbbGVuZ3RoXTsKICAgICAgICAgZGF0YS5yZWFkQnl0ZXMoc3RyaW5nQnl0ZXMpOwogICAgICAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbmRleCBvZiAwCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKEFycmF5cy5jb3B5T2Yoc3RyaW5nQnl0ZXMsIGluZGV4KSwgQ2hhcnNldC5mb3JOYW1lKCJhc2NpaSIpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVUbyhmaW5hbCBDaGFubmVsQnVmZmVyIGRhdGEsIGZpbmFsIGludCBsZW5ndGgsCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlVG8oZmluYWwgQnl0ZUJ1ZiBkYXRhLCBmaW5hbCBpbnQgbGVuZ3RoLAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBieXRlW10gbmFtZSA9IHZhbHVlLmdldEJ5dGVzKCJBU0NJSSIpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVBBZGRyZXNzVGVzdC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVBBZGRyZXNzVGVzdC5qYXZhCmluZGV4IDZlOWQwNDcuLjQyMGYxNzYgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQQWRkcmVzc1Rlc3QuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUEFkZHJlc3NUZXN0LmphdmEKQEAgLTEsNSArMSw3IEBACiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlczsKIAoraW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuaXM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CkBAIC04LDkgKzEwLDEyIEBACiAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0OworCiAvKioKICAqIE1vc3QgdGVzdHMgYXJlIGluIElQdjRBZGRyZXNzVGVzdCBhbmQgSVB2NkFkZHJlc3NUZXN0CiAgKiBKdXN0IGV4Y2VwdGlvbiB0ZXN0aW5nIGhlcmUKQEAgLTkyLDYgKzk3LDE2IEBACiAgICAgfQogCiAgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9JbmV0QWRkcmVzcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBJUEFkZHJlc3M8Pz4gaXAwID0gSVBBZGRyZXNzLm9mKCIyMDEuMjAyLjMuNCIpOworICAgICAgICBJUEFkZHJlc3M8Pz4gaXAxID0gSVBBZGRyZXNzLm9mKCIyMDAxOmRiODphYmNkOjoxOjI6Mzo0Iik7CisgICAgICAgIEluZXRBZGRyZXNzIGlhMCA9IGlwMC50b0luZXRBZGRyZXNzKCk7CisgICAgICAgIEluZXRBZGRyZXNzIGlhMSA9IGlwMS50b0luZXRBZGRyZXNzKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhpYTAsIEluZXRBZGRyZXNzLmdldEJ5TmFtZSgiMjAxLjIwMi4zLjQiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhpYTEsIEluZXRBZGRyZXNzLmdldEJ5TmFtZSgiMjAwMTpkYjg6YWJjZDowOjE6MjozOjQiKSk7CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q29udGFpbnMoKSB7CiAKICAgICAgICAgLy8gVGVzdCBJUHY0IE1hc2sKQEAgLTEzMSw2ICsxNDYsOTMgQEAKICAgICB9CiAKICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJc1Vuc3BlY2lmaWVkKCkgeworICAgICAgICBJUEFkZHJlc3M8Pz4gdW5zcGVjaWZpZWRWNCA9IElQQWRkcmVzcy5vZigiMC4wLjAuMCIpOworICAgICAgICBJUEFkZHJlc3M8Pz4gdW5zcGVjaWZpZWRWNiA9IElQQWRkcmVzcy5vZigiOjoiKTsKKyAgICAgICAgYXNzZXJ0VGhhdCh1bnNwZWNpZmllZFY0LmlzVW5zcGVjaWZpZWQoKSwgaXModHJ1ZSkpOworICAgICAgICBhc3NlcnRUaGF0KHVuc3BlY2lmaWVkVjYuaXNVbnNwZWNpZmllZCgpLCBpcyh0cnVlKSk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBvdGhlcnMgPSBJbW11dGFibGVMaXN0Lm9mKAorICAgICAgICAgICAgICAgICIwLjAuMC4xIiwKKyAgICAgICAgICAgICAgICAiMS4yLjMuNCIsCisgICAgICAgICAgICAgICAgIjEwLjAuMC4wIiwKKyAgICAgICAgICAgICAgICAiMTI3LjAuMC4xIiwKKyAgICAgICAgICAgICAgICAiMjU1LjI1NS4yNTUuMjU1IiwKKyAgICAgICAgICAgICAgICAiOjoxIiwKKyAgICAgICAgICAgICAgICAiMjAwMTpkYjg6MToyOjo1OjYiLAorICAgICAgICAgICAgICAgICJmYzAwOjo0OjU6Njo3IiwKKyAgICAgICAgICAgICAgICAiZmU4MDo6MTIzNCIsCisgICAgICAgICAgICAgICAgImZmMDI6OjEiKTsKKyAgICAgICAgZm9yIChTdHJpbmcgb3RoZXIgOiBvdGhlcnMpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoSVBBZGRyZXNzLm9mKG90aGVyKS5pc1Vuc3BlY2lmaWVkKCksIGlzKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJc0xvb3BiYWNrKCkgeworICAgICAgICBMaXN0PFN0cmluZz4gbG9vcGJhY2tzID0gSW1tdXRhYmxlTGlzdC5vZigKKyAgICAgICAgICAgICAgICAiMTI3LjAuMC4wIiwKKyAgICAgICAgICAgICAgICAiMTI3LjAuMC4xIiwKKyAgICAgICAgICAgICAgICAiMTI3LjAuMC4yIiwKKyAgICAgICAgICAgICAgICAiMTI3LjAuMC4yNTUiLAorICAgICAgICAgICAgICAgICIxMjcuMS4yLjMiLAorICAgICAgICAgICAgICAgICIxMjcuMTAxLjEwMi4xMDMiLAorICAgICAgICAgICAgICAgICIxMjcuMjAxLjIwMi4yMDMiLAorICAgICAgICAgICAgICAgICIxMjcuMjU1LjI1NS4yNTUiLAorICAgICAgICAgICAgICAgICI6OjEiKTsKKyAgICAgICAgZm9yIChTdHJpbmcgbG9vcGJhY2sgOiBsb29wYmFja3MpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoSVBBZGRyZXNzLm9mKGxvb3BiYWNrKS5pc0xvb3BiYWNrKCksIGlzKHRydWUpKTsKKyAgICAgICAgfQorICAgICAgICBMaXN0PFN0cmluZz4gb3RoZXJzID0gSW1tdXRhYmxlTGlzdC5vZigKKyAgICAgICAgICAgICAgICAiMC4wLjAuMCIsCisgICAgICAgICAgICAgICAgIjAuMC4wLjEiLAorICAgICAgICAgICAgICAgICIxMC4wLjAuMSIsCisgICAgICAgICAgICAgICAgIjEyNi4yNTUuMjU1LjI1NSIsCisgICAgICAgICAgICAgICAgIjEyOC4wLjAuMCIsCisgICAgICAgICAgICAgICAgIjI1NS4yNTUuMjU1LjI1NSIsCisgICAgICAgICAgICAgICAgIjo6IiwKKyAgICAgICAgICAgICAgICAiOjoyIiwKKyAgICAgICAgICAgICAgICAiMjAwMTpkYjg6OjE6MjozOjQiLAorICAgICAgICAgICAgICAgICJmZTgwOjc6Njo1OjQ6MzoyOjEiLAorICAgICAgICAgICAgICAgICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYiKTsKKyAgICAgICAgZm9yIChTdHJpbmcgb3RoZXIgOiBvdGhlcnMpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoSVBBZGRyZXNzLm9mKG90aGVyKS5pc0xvb3BiYWNrKCksIGlzKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJc0xpbmtMb2NhbCgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpbmtMb2NhbHMgPSBJbW11dGFibGVMaXN0Lm9mKAorICAgICAgICAgICAgICAgICIxNjkuMjU0LjAuMCIsCisgICAgICAgICAgICAgICAgIjE2OS4yNTQuMC4xIiwKKyAgICAgICAgICAgICAgICAiMTY5LjI1NC4xLjIiLAorICAgICAgICAgICAgICAgICIxNjkuMjU0LjEwMS4xMDIiLAorICAgICAgICAgICAgICAgICIxNjkuMjU0LjIwMS4yMDIiLAorICAgICAgICAgICAgICAgICIxNjkuMjU0LjI1NS4yNTUiLAorICAgICAgICAgICAgICAgICJmZTgwOjoiLAorICAgICAgICAgICAgICAgICJmZTgwOjoxIiwKKyAgICAgICAgICAgICAgICAiZmU4MDo6MToyOjM6NDo1OjY6NyIsCisgICAgICAgICAgICAgICAgImZlODA6YWFhYTpiYmJiOmNjY2M6ZGRkZDplZWVlOmZmZmY6MTIzNCIsCisgICAgICAgICAgICAgICAgImZlYmY6OiIsCisgICAgICAgICAgICAgICAgImZlYmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZiIpOworICAgICAgICBmb3IgKFN0cmluZyBsaW5rTG9jYWwgOiBsaW5rTG9jYWxzKSB7CisgICAgICAgICAgICBhc3NlcnRUaGF0KElQQWRkcmVzcy5vZihsaW5rTG9jYWwpLmlzTGlua0xvY2FsKCksIGlzKHRydWUpKTsKKyAgICAgICAgfQorICAgICAgICBMaXN0PFN0cmluZz4gb3RoZXJzID0gSW1tdXRhYmxlTGlzdC5vZigKKyAgICAgICAgICAgICAgICAiMC4wLjAuMCIsCisgICAgICAgICAgICAgICAgIjEuMi4zLjQiLAorICAgICAgICAgICAgICAgICIxNjkuMjUzLjI1NS4yNTUiLAorICAgICAgICAgICAgICAgICIxNjkuMjU1LjAuMCIsCisgICAgICAgICAgICAgICAgIjI1NS4yNTUuMjU1LjI1NSIsCisgICAgICAgICAgICAgICAgIjo6IiwKKyAgICAgICAgICAgICAgICAiZmU3ZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIiwKKyAgICAgICAgICAgICAgICAiZmVjMDo6IiwKKyAgICAgICAgICAgICAgICAiZmYwMjo6MSIpOworICAgICAgICBmb3IgKFN0cmluZyBvdGhlciA6IG90aGVycykgeworICAgICAgICAgICAgYXNzZXJ0VGhhdChJUEFkZHJlc3Mub2Yob3RoZXIpLmlzTGlua0xvY2FsKCksIGlzKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aWNhc3RJcCgpIHsKICAgICAgICAgSVBBZGRyZXNzPD8+IGlwMCA9IElQQWRkcmVzcy5vZigiMjQwLjIuMy40Iik7CiAgICAgICAgIElQQWRkcmVzczw/PiBpcDEgPSBJUEFkZHJlc3Mub2YoIjIyNC4wLjEuMSIpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvSVB2NEFkZHJlc3NUZXN0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY0QWRkcmVzc1Rlc3QuamF2YQppbmRleCA1ZDk1YTVhLi5kMGJlYjEyIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY0QWRkcmVzc1Rlc3QuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY0QWRkcmVzc1Rlc3QuamF2YQpAQCAtOCwxMyArOCwxNiBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRoYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZDsKIAogaW1wb3J0IGphdmEubmV0LkluZXQ0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CiAKIGltcG9ydCBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzOwogaW1wb3J0IG9yZy5oYW1jcmVzdC5NYXRjaGVyczsKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXJzOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIApAQCAtMjI4LDYgKzIzMSw4NCBAQAogICAgIH0KIAogICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE9mNEludGVnZXJzKCkgeworICAgICAgICBNYXA8SVB2NEFkZHJlc3MsIElQdjRBZGRyZXNzPiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIG1hcC5wdXQoSVB2NEFkZHJlc3Mub2YoMCwgMCwgMCwgMCksIElQdjRBZGRyZXNzLm9mKDApKTsKKyAgICAgICAgbWFwLnB1dChJUHY0QWRkcmVzcy5vZigxLCAyLCAzLCA0KSwgSVB2NEFkZHJlc3Mub2YoIjEuMi4zLjQiKSk7CisgICAgICAgIG1hcC5wdXQoSVB2NEFkZHJlc3Mub2YoNiwgNywgOCwgOSksIElQdjRBZGRyZXNzLm9mKCI2LjcuOC45IikpOworICAgICAgICBtYXAucHV0KElQdjRBZGRyZXNzLm9mKDEwLCAxLCAyLCAzKSwgSVB2NEFkZHJlc3Mub2YoIjEwLjEuMi4zIikpOworICAgICAgICBtYXAucHV0KElQdjRBZGRyZXNzLm9mKDEwLCAyMDEsIDIwMiwgMjAzKSwgSVB2NEFkZHJlc3Mub2YoIjEwLjIwMS4yMDIuMjAzIikpOworICAgICAgICBtYXAucHV0KElQdjRBZGRyZXNzLm9mKDE5MiwgMTY4LCAwLCAxMDEpLCBJUHY0QWRkcmVzcy5vZigiMTkyLjE2OC4wLjEwMSIpKTsKKyAgICAgICAgbWFwLnB1dChJUHY0QWRkcmVzcy5vZigyMTEsIDIxMiwgMjEzLCAyMTQpLCBJUHY0QWRkcmVzcy5vZigiMjExLjIxMi4yMTMuMjE0IikpOworICAgICAgICBtYXAucHV0KElQdjRBZGRyZXNzLm9mKDI1NSwgMjU1LCAyNTUsIDI1NSksIElQdjRBZGRyZXNzLm9mKDB4RkZfRkZfRkZfRkYpKTsKKyAgICAgICAgZm9yIChFbnRyeTxJUHY0QWRkcmVzcywgSVB2NEFkZHJlc3M+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZW50cnkuZ2V0S2V5KCksIGVxdWFsVG8oZW50cnkuZ2V0VmFsdWUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RPZjRJbnRlZ2Vyc0V4Y2VwdGlvbk5lZ2F0aXZlMSgpIHsKKyAgICAgICAgSVB2NEFkZHJlc3Mub2YoLTMsIDQsIDUsIDYpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2Y0SW50ZWdlcnNFeGNlcHRpb25OZWdhdGl2ZTIoKSB7CisgICAgICAgIElQdjRBZGRyZXNzLm9mKDMsIC00LCA1LCA2KTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZD1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdE9mNEludGVnZXJzRXhjZXB0aW9uTmVnYXRpdmUzKCkgeworICAgICAgICBJUHY0QWRkcmVzcy5vZigzLCA0LCAtNSwgNik7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RPZjRJbnRlZ2Vyc0V4Y2VwdGlvbk5lZ2F0aXZlNCgpIHsKKyAgICAgICAgSVB2NEFkZHJlc3Mub2YoMywgNCwgNSwgLTYpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2Y0SW50ZWdlcnNFeGNlcHRpb25OZWdhdGl2ZTUoKSB7CisgICAgICAgIC8vICgoYnl0ZSkgMTI4KSBpcyBhY3R1YWxseSAtMTI4CisgICAgICAgIElQdjRBZGRyZXNzLm9mKDEwMSwgMTAyLCAxMDMsIChieXRlKSAxMjgpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2Y0SW50ZWdlcnNFeGNlcHRpb25OZWdhdGl2ZTYoKSB7CisgICAgICAgIC8vICgoYnl0ZSkgMjU1KSBpcyBhY3R1YWxseSAtMQorICAgICAgICBJUHY0QWRkcmVzcy5vZigxMDEsIDEwMiwgMTAzLCAoYnl0ZSkgMjU1KTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZD1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdE9mNEludGVnZXJzRXhjZXB0aW9uTmVnYXRpdmU3KCkgeworICAgICAgICBJUHY0QWRkcmVzcy5vZigtMSwgLTEsIC0xLCAtMSk7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RPZjRJbnRlZ2Vyc0V4Y2VwdGlvblRvb0JpZzEoKSB7CisgICAgICAgIElQdjRBZGRyZXNzLm9mKDEwMDAsIDIsIDMsIDQpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2Y0SW50ZWdlcnNFeGNlcHRpb25Ub29CaWcyKCkgeworICAgICAgICBJUHY0QWRkcmVzcy5vZigxLCAyMDAwMCwgMywgNCk7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RPZjRJbnRlZ2Vyc0V4Y2VwdGlvblRvb0JpZzMoKSB7CisgICAgICAgIElQdjRBZGRyZXNzLm9mKDEsIDIsIDMwMDAwMCwgNCk7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RPZjRJbnRlZ2Vyc0V4Y2VwdGlvblRvb0JpZzQoKSB7CisgICAgICAgIElQdjRBZGRyZXNzLm9mKDEsIDIsIDMsIDQwMDAwMDApOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2Y0SW50ZWdlcnNFeGNlcHRpb25Ub29CaWc1KCkgeworICAgICAgICBJUHY0QWRkcmVzcy5vZigyNTYsIDI1NiwgMjU2LCAyNTYpOworICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE9mQ2lkck1hc2tMZW5ndGgoKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDMyOyBpKyspIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhJUHY0QWRkcmVzcy5vZkNpZHJNYXNrTGVuZ3RoKGkpLmFzQ2lkck1hc2tMZW5ndGgoKSwgaSk7CkBAIC0zMDcsNyArMzg4LDcgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbSgpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICBmb3IoaW50IGk9MDsgaSA8IHRlc3RBZGRyZXNzZXMubGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICBJUHY0QWRkcmVzcyBpcCA9IElQdjRBZGRyZXNzLnJlYWQ0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlcnMuY29waWVkQnVmZmVyKHRlc3RBZGRyZXNzZXNbaV0pKTsKKyAgICAgICAgICAgIElQdjRBZGRyZXNzIGlwID0gSVB2NEFkZHJlc3MucmVhZDRCeXRlcyhVbnBvb2xlZC5jb3BpZWRCdWZmZXIodGVzdEFkZHJlc3Nlc1tpXSkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RJbnRzW2ldLCBpcC5nZXRJbnQoKSk7CiAgICAgICAgICAgICBhc3NlcnRBcnJheUVxdWFscyh0ZXN0QWRkcmVzc2VzW2ldLCBpcC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyh0ZXN0U3RyaW5nc1tpXSwgaXAudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9JUHY2QWRkcmVzc1Rlc3QuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZBZGRyZXNzVGVzdC5qYXZhCmluZGV4IGE5NGY0NDMuLmQ3NzhjMWIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZBZGRyZXNzVGVzdC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL0lQdjZBZGRyZXNzVGVzdC5qYXZhCkBAIC0xLDYgKzEsMTQgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuKjsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmlzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEFycmF5RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRoYXQ7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZDsKIAogaW1wb3J0IGphdmEubmV0LkluZXQ2QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKQEAgLTgsNyArMTYsNiBAQAogCiBpbXBvcnQgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVyczsKIGltcG9ydCBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnM7Ci1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyczsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy5PRlBhcnNlRXJyb3I7CiAKQEAgLTI3Nyw3ICsyODQsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbSgpIHRocm93cyBPRlBhcnNlRXJyb3IsIFVua25vd25Ib3N0RXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpPTA7IGkgPCB0ZXN0U3RyaW5ncy5sZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IEluZXQ2QWRkcmVzcy5nZXRCeU5hbWUodGVzdFN0cmluZ3NbaV0pLmdldEFkZHJlc3MoKTsKLSAgICAgICAgICAgIElQdjZBZGRyZXNzIGlwID0gSVB2NkFkZHJlc3MucmVhZDE2Qnl0ZXMoQ2hhbm5lbEJ1ZmZlcnMuY29waWVkQnVmZmVyKGJ5dGVzKSk7CisgICAgICAgICAgICBJUHY2QWRkcmVzcyBpcCA9IElQdjZBZGRyZXNzLnJlYWQxNkJ5dGVzKFVucG9vbGVkLmNvcGllZEJ1ZmZlcihieXRlcykpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmdzW2ldLCBpcC50b1N0cmluZygpKTsKICAgICAgICAgICAgIGFzc2VydEFycmF5RXF1YWxzKGJ5dGVzLCBpcC5nZXRCeXRlcygpKTsKICAgICAgICAgfQpAQCAtMzE0LDYgKzMyMSwxMyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoIjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMCIsIElQdjZBZGRyZXNzLm9mKCI6OiIpLnRvU3RyaW5nKGZhbHNlLCB0cnVlKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiMTo6NDo1OjY6MDo4IiwgSVB2NkFkZHJlc3Mub2YoIjE6MDowOjQ6NTo2OjA6OCIpLnRvU3RyaW5nKHRydWUsIGZhbHNlKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiMTowOjA6NDo6OCIsIElQdjZBZGRyZXNzLm9mKCIxOjA6MDo0OjA6MDowOjgiKS50b1N0cmluZyh0cnVlLCBmYWxzZSkpOworICAgICAgICAvLyBUd28gZXF1YWwgbGVuZ3RoIHplcm8gcnVuczsgc2hvdWxkIHplcm8gY29tcHJlc3MgdGhlIGZpcnN0IGluc3RhbmNlCisgICAgICAgIGFzc2VydEVxdWFscygiMTo6NDoyOjA6MDo4IiwgSVB2NkFkZHJlc3Mub2YoIjE6MDowOjQ6MjowOjA6OCIpLnRvU3RyaW5nKHRydWUsIGZhbHNlKSk7CisgICAgICAgIC8vIFNob3VsZG4ndCB6ZXJvIGNvbXByZXNzIGEgc2luZ2xlIHplcm8KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCIxOjA6Mjo0OjM6MTowOjgiLCBJUHY2QWRkcmVzcy5vZigiMTowOjI6NDozOjE6MDo4IikudG9TdHJpbmcodHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgLy8gVGVzdCB6ZXJvIHJ1bnMgYXQgdGhlIGVuZCBvZiB0aGUgYWRkcmVzcyBzaW5jZSB0aGF0J3MgYSBkaWZmZXJlbnQgY29kZSBwYXRoIGluIHRvU3RyaW5nCisgICAgICAgIGFzc2VydEVxdWFscygiMTo6NDoyOjg6MDowIiwgSVB2NkFkZHJlc3Mub2YoIjE6MDowOjQ6Mjo4OjA6MCIpLnRvU3RyaW5nKHRydWUsIGZhbHNlKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMTozOjI6NDozOjE6NTowIiwgSVB2NkFkZHJlc3Mub2YoIjE6MzoyOjQ6MzoxOjU6MCIpLnRvU3RyaW5nKHRydWUsIGZhbHNlKSk7CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTQyNyw0ICs0NDEsNzYgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKCI6OiIsIElQdjZBZGRyZXNzLm9mKCI6OiVldGgwIikudG9TdHJpbmcodHJ1ZSwgZmFsc2UpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxOjA6MDo0Ojo4IiwgSVB2NkFkZHJlc3Mub2YoIjE6MDowOjQ6MDowOjA6OCUyIikudG9TdHJpbmcodHJ1ZSwgZmFsc2UpKTsKICAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdGVzdE1vZGlmaWVkRXVpNjQoCisgICAgICAgICAgICBTdHJpbmcgbmV0d29yaywgU3RyaW5nIG1hY0FkZHJlc3MsIFN0cmluZyBleHBlY3RlZElwQWRkcmVzcykgeworCisgICAgICAgIElQdjZBZGRyZXNzV2l0aE1hc2sgbmV0d29ya09iaiA9IElQdjZBZGRyZXNzV2l0aE1hc2sub2YobmV0d29yayk7CisgICAgICAgIE1hY0FkZHJlc3MgbWFjQWRkcmVzc09iaiA9IE1hY0FkZHJlc3Mub2YobWFjQWRkcmVzcyk7CisgICAgICAgIE1hY0FkZHJlc3MgbWFjQWRkcmVzc0FkZDEgPSBNYWNBZGRyZXNzLm9mKAorICAgICAgICAgICAgICAgIG1hY0FkZHJlc3NPYmouZ2V0TG9uZygpICsgMSAmIDB4RkZGRl9GRkZGX0ZGRkZMKTsKKyAgICAgICAgTWFjQWRkcmVzcyBtYWNBZGRyZXNzU3ViMSA9IE1hY0FkZHJlc3Mub2YoCisgICAgICAgICAgICAgICAgbWFjQWRkcmVzc09iai5nZXRMb25nKCkgLSAxICYgMHhGRkZGX0ZGRkZfRkZGRkwpOworICAgICAgICBJUHY2QWRkcmVzcyBpcEFkZHJlc3NPYmogPSBJUHY2QWRkcmVzcy5vZihuZXR3b3JrT2JqLCBtYWNBZGRyZXNzT2JqKTsKKyAgICAgICAgSVB2NkFkZHJlc3MgZXhwZWN0ZWRPYmogPSBJUHY2QWRkcmVzcy5vZihleHBlY3RlZElwQWRkcmVzcyk7CisKKyAgICAgICAgYXNzZXJ0VGhhdChpcEFkZHJlc3NPYmosIGlzKGV4cGVjdGVkT2JqKSk7CisgICAgICAgIGFzc2VydFRoYXQoaXBBZGRyZXNzT2JqLmlzTW9kaWZpZWRFdWk2NERlcml2ZWQobWFjQWRkcmVzc09iaiksIGlzKHRydWUpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChpcEFkZHJlc3NPYmouaXNNb2RpZmllZEV1aTY0RGVyaXZlZChtYWNBZGRyZXNzQWRkMSksIGlzKGZhbHNlKSk7CisgICAgICAgIGFzc2VydFRoYXQoaXBBZGRyZXNzT2JqLmlzTW9kaWZpZWRFdWk2NERlcml2ZWQobWFjQWRkcmVzc1N1YjEpLCBpcyhmYWxzZSkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkRXVpNjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdGVzdE1vZGlmaWVkRXVpNjQoCisgICAgICAgICAgICAgICAgImZlODA6Oi82NCIsICIwMDowMDowMDowMDowMDowMCIsICJmZTgwOjowMjAwOmZmOmZlMDA6MCIpOworICAgICAgICB0ZXN0TW9kaWZpZWRFdWk2NCgKKyAgICAgICAgICAgICAgICAiZmU4MDo6LzY0IiwgIjEyOjM0OjU2Ojc4OjlhOmJjIiwgImZlODA6OjEwMzQ6NTZmZjpmZTc4OjlhYmMiKTsKKyAgICAgICAgdGVzdE1vZGlmaWVkRXVpNjQoCisgICAgICAgICAgICAgICAgImZlODA6Oi82NCIsICJmZjpmZjpmZjpmZjpmZjpmZiIsICJmZTgwOjpmZGZmOmZmZmY6ZmVmZjpmZmZmIik7CisgICAgICAgIHRlc3RNb2RpZmllZEV1aTY0KAorICAgICAgICAgICAgICAgICJmZTgwOjovMTAiLCAiNWM6MTY6Yzc6MTI6MzQ6NTYiLCAiZmU4MDo6NWUxNjpjN2ZmOmZlMTI6MzQ1NiIpOworICAgICAgICB0ZXN0TW9kaWZpZWRFdWk2NCgKKyAgICAgICAgICAgICAgICAiMjAwMTpkYjg6OTg3Njo1NDAwOjovNTYiLCAiMDA6MGM6Mjk6YWI6Y2Q6ZWYiLAorICAgICAgICAgICAgICAgICIyMDAxOmRiODo5ODc2OjU0MDA6MjBjOjI5ZmY6ZmVhYjpjZGVmIik7CisgICAgICAgIHRlc3RNb2RpZmllZEV1aTY0KAorICAgICAgICAgICAgICAgICJmZDAwOjk5OTk6ODg4ODo6LzQ4IiwgIjUyOjU0OjAwOjc4OjU2OjM0IiwKKyAgICAgICAgICAgICAgICAiZmQwMDo5OTk5Ojg4ODg6OjUwNTQ6MDBmZjpmZTc4OjU2MzQiKTsKKyAgICAgICAgdGVzdE1vZGlmaWVkRXVpNjQoCisgICAgICAgICAgICAgICAgIjIwMDE6ZGI4Ojc3Nzc6YWFiYjo6LzY0IiwgIjE0OjEwOjlmOjAwOjAwOmNkIiwKKyAgICAgICAgICAgICAgICAiMjAwMTpkYjg6Nzc3NzphYWJiOjE2MTA6OWZmZjpmZTAwOjAwY2QiKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZD1OdWxsUG9pbnRlckV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZWRFdWk2NEV4Y2VwdGlvbk51bGxOZXR3b3JrKCkgeworICAgICAgICBJUHY2QWRkcmVzcy5vZigKKyAgICAgICAgICAgICAgICAoSVB2NkFkZHJlc3NXaXRoTWFzaykgbnVsbCwKKyAgICAgICAgICAgICAgICBNYWNBZGRyZXNzLm9mKCIwMDo1MDo1NjoxMjozNDo1NiIpKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZD1OdWxsUG9pbnRlckV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZWRFdWk2NEV4Y2VwdGlvbk51bGxNYWNBZGRyZXNzKCkgeworICAgICAgICBJUHY2QWRkcmVzcy5vZigKKyAgICAgICAgICAgICAgICBJUHY2QWRkcmVzc1dpdGhNYXNrLkxJTktfTE9DQUxfTkVUV09SSywKKyAgICAgICAgICAgICAgICAoTWFjQWRkcmVzcykgbnVsbCk7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9TnVsbFBvaW50ZXJFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkRXVpNjRFeGNlcHRpb25OdWxsRGVyaXZlZE1hY0FkZHJlc3MoKSB7CisgICAgICAgIElQdjZBZGRyZXNzLk5PTkUuaXNNb2RpZmllZEV1aTY0RGVyaXZlZChudWxsKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZD1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkRXVpNjRFeGNlcHRpb25QcmVmaXhMZW5ndGhObygpIHsKKyAgICAgICAgSVB2NkFkZHJlc3Mub2YoCisgICAgICAgICAgICAgICAgSVB2NkFkZHJlc3Mub2YoImZlZjo6Iikud2l0aE1hc2soSVB2NkFkZHJlc3Mub2YoImYwZjA6MTIzNDo6IikpLAorICAgICAgICAgICAgICAgIE1hY0FkZHJlc3Mub2YoIjVjOjE2OmM3OjAwOjAwOjAwIikpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZWRFdWk2NEV4Y2VwdGlvblByZWZpeExlbmd0aFRvb0xvbmcoKSB7CisgICAgICAgIElQdjZBZGRyZXNzLm9mKAorICAgICAgICAgICAgICAgIElQdjZBZGRyZXNzV2l0aE1hc2sub2YoImZlODA6Oi82NSIpLAorICAgICAgICAgICAgICAgIE1hY0FkZHJlc3Mub2YoIjVjOjE2OmM3OjAwOjAwOjAwIikpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL01hY0FkZHJlc3NUZXN0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9NYWNBZGRyZXNzVGVzdC5qYXZhCmluZGV4IGUxYzc3MjEuLmYyMDFiNDcgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL01hY0FkZHJlc3NUZXN0LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvTWFjQWRkcmVzc1Rlc3QuamF2YQpAQCAtMSw4ICsxLDkgQEAKIHBhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzOwogCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkOworCiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIAotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcnM7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCkBAIC0yMiwxMiArMjMsMTggQEAKICAgICAgICAgICAgIHsoYnl0ZSkgMjU1LCAoYnl0ZSkgMjU1LCAoYnl0ZSkgMjU1LCAoYnl0ZSkgMjU1LCAoYnl0ZSkgMjU1LCAoYnl0ZSkgMjU1IH0KICAgICB9OwogCi0gICAgU3RyaW5nW10gdGVzdFN0cmluZ3MgPSB7CisgICAgU3RyaW5nW10gdGVzdENvbG9uU3RyaW5ncyA9IHsKICAgICAgICAgICAgICIwMTowMjowMzowNDowNTowNiIsCiAgICAgICAgICAgICAiODA6MDA6MDA6MDA6MDA6MDEiLAotICAgICAgICAgICAgImZmOmZmOmZmOmZmOmZmOmZmIgorICAgICAgICAgICAgImZmOmZmOmZmOmZmOmZmOmZmIiwKICAgICB9OwogCisgICAgU3RyaW5nW10gdGVzdEh5cGhlblN0cmluZ3MgPSB7CisgICAgICAgICAgICAgIjAxLTAyLTAzLTA0LTA1LTA2IiwKKyAgICAgICAgICAgICAiODAtMDAtMDAtMDAtMDAtMDEiLAorICAgICAgICAgICAgICJmZi1mZi1mZi1mZi1mZi1mZiIsCisgICAgIH07CisKICAgICBsb25nW10gdGVzdEludHMgPSB7CiAgICAgICAgICAgICAweDAwMDEwMjAzMDQwNTA2TCwKICAgICAgICAgICAgIDB4MDA4MDAwMDAwMDAwMDFMLApAQCAtNDMsNyArNTAsOCBAQAogICAgICAgICAgICAgIjAwOmZmZjplZjoxMjoxMjpmZiIsCiAgICAgICAgICAgICAiMDE6MDI6MDM6MDQ6MDU7MDYiLAogICAgICAgICAgICAgIjA6MToyOjM6NDo1OjYiLAotICAgICAgICAgICAgIjAxOjAyOjAzOjA0IgorICAgICAgICAgICAgIjAxOjAyOjAzOjA0IiwKKyAgICAgICAgICAgICIwMS0wMi0wMzowNC0wNS0wNiIsCiAgICAgfTsKIAogICAgIGJ5dGVbXVtdIGludmFsaWRNYWNCeXRlcyA9IHsKQEAgLTUzLDExICs2MSwxNSBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0T2ZTdHJpbmcoKSB7CisgICAgICAgIHRlc3RPZlN0cmluZ0ZvckFycmF5KHRlc3RDb2xvblN0cmluZ3MpOworICAgICAgICB0ZXN0T2ZTdHJpbmdGb3JBcnJheSh0ZXN0SHlwaGVuU3RyaW5ncyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3RPZlN0cmluZ0ZvckFycmF5KFN0cmluZyBbXSBzdHJpbmdzKSB7CiAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgdGVzdEFkZHJlc3Nlcy5sZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgIE1hY0FkZHJlc3MgaXAgPSBNYWNBZGRyZXNzLm9mKHRlc3RTdHJpbmdzW2ldKTsKKyAgICAgICAgICAgIE1hY0FkZHJlc3MgaXAgPSBNYWNBZGRyZXNzLm9mKHN0cmluZ3NbaV0pOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RJbnRzW2ldLCBpcC5nZXRMb25nKCkpOwogICAgICAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHModGVzdEFkZHJlc3Nlc1tpXSwgaXAuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHModGVzdFN0cmluZ3NbaV0sIGlwLnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02NywxNyArNzksMTcgQEAKICAgICAgICAgICAgIE1hY0FkZHJlc3MgaXAgPSBNYWNBZGRyZXNzLm9mKHRlc3RBZGRyZXNzZXNbaV0pOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJlcnJvciBjaGVja2luZyBsb25nIHJlcHJlc2VudGF0aW9uIG9mICIrQXJyYXlzLnRvU3RyaW5nKHRlc3RBZGRyZXNzZXNbaV0pICsgIihzaG91bGQgYmUgIitMb25nLnRvSGV4U3RyaW5nKHRlc3RJbnRzW2ldKSArIikiLCB0ZXN0SW50c1tpXSwgIGlwLmdldExvbmcoKSk7CiAgICAgICAgICAgICBhc3NlcnRBcnJheUVxdWFscyh0ZXN0QWRkcmVzc2VzW2ldLCBpcC5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyh0ZXN0U3RyaW5nc1tpXSwgaXAudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHModGVzdENvbG9uU3RyaW5nc1tpXSwgaXAudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbSgpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICBmb3IoaW50IGk9MDsgaSA8IHRlc3RBZGRyZXNzZXMubGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICBNYWNBZGRyZXNzIGlwID0gTWFjQWRkcmVzcy5yZWFkNkJ5dGVzKENoYW5uZWxCdWZmZXJzLmNvcGllZEJ1ZmZlcih0ZXN0QWRkcmVzc2VzW2ldKSk7CisgICAgICAgICAgICBNYWNBZGRyZXNzIGlwID0gTWFjQWRkcmVzcy5yZWFkNkJ5dGVzKFVucG9vbGVkLmNvcGllZEJ1ZmZlcih0ZXN0QWRkcmVzc2VzW2ldKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHModGVzdEludHNbaV0sIGlwLmdldExvbmcoKSk7CiAgICAgICAgICAgICBhc3NlcnRBcnJheUVxdWFscyh0ZXN0QWRkcmVzc2VzW2ldLCBpcC5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyh0ZXN0U3RyaW5nc1tpXSwgaXAudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHModGVzdENvbG9uU3RyaW5nc1tpXSwgaXAudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNCArMTY4LDcyIEBACiAgICAgfQogCiAgICAgQFRlc3QKKworICAgIHB1YmxpYyB2b2lkIHRlc3RGb3JJUHY0TXVsdGljYXN0QWRkcmVzcygpIHsKKyAgICAgICAgSVB2NEFkZHJlc3MgaXAgPSBJUHY0QWRkcmVzcy5vZigiMjI0LjEuMS4xIik7CisgICAgICAgIE1hY0FkZHJlc3MgbWFjID0gTWFjQWRkcmVzcy5mb3JJUHY0TXVsdGljYXN0QWRkcmVzcyhpcCk7CisgICAgICAgIE1hY0FkZHJlc3MgZXhwZWN0ZWRNYWMgPSBNYWNBZGRyZXNzLm9mKCIwMTowMDo1RTowMTowMTowMSIpOworICAgICAgICBhc3NlcnRUcnVlKG1hYy5lcXVhbHMoZXhwZWN0ZWRNYWMpKTsKKworICAgICAgICBpcCA9IElQdjRBZGRyZXNzLm9mKCIyMjQuMTI5LjEuMSIpOworICAgICAgICBtYWMgPSBNYWNBZGRyZXNzLmZvcklQdjRNdWx0aWNhc3RBZGRyZXNzKGlwKTsKKyAgICAgICAgZXhwZWN0ZWRNYWMgPSBNYWNBZGRyZXNzLm9mKCIwMTowMDo1RTowMTowMTowMSIpOworICAgICAgICBhc3NlcnRUcnVlKG1hYy5lcXVhbHMoZXhwZWN0ZWRNYWMpKTsKKworICAgICAgICBpcCA9IElQdjRBZGRyZXNzLm9mKCIyMjUuMS4xLjEiKTsKKyAgICAgICAgbWFjID0gTWFjQWRkcmVzcy5mb3JJUHY0TXVsdGljYXN0QWRkcmVzcyhpcCk7CisgICAgICAgIGV4cGVjdGVkTWFjID0gTWFjQWRkcmVzcy5vZigiMDE6MDA6NUU6MDE6MDE6MDEiKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShtYWMuZXF1YWxzKGV4cGVjdGVkTWFjKSk7CisKKyAgICAgICAgaXAgPSBJUHY0QWRkcmVzcy5vZigiMjM5LjEyOS4xLjEiKTsKKyAgICAgICAgbWFjID0gTWFjQWRkcmVzcy5mb3JJUHY0TXVsdGljYXN0QWRkcmVzcyhpcCk7CisgICAgICAgIGV4cGVjdGVkTWFjID0gTWFjQWRkcmVzcy5vZigiMDE6MDA6NUU6MDE6MDE6MDEiKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShtYWMuZXF1YWxzKGV4cGVjdGVkTWFjKSk7CisKKyAgICAgICAgaXAgPSBJUHY0QWRkcmVzcy5vZigiMjI0LjEuMi4zIik7CisgICAgICAgIG1hYyA9IE1hY0FkZHJlc3MuZm9ySVB2NE11bHRpY2FzdEFkZHJlc3MoaXApOworICAgICAgICBleHBlY3RlZE1hYyA9IE1hY0FkZHJlc3Mub2YoIjAxOjAwOjVFOjAxOjAyOjAzIik7CisgICAgICAgIGFzc2VydFRydWUobWFjLmVxdWFscyhleHBlY3RlZE1hYykpOworCisgICAgICAgIGlwID0gSVB2NEFkZHJlc3Mub2YoIjIzOS4xMjkuMi4zIik7CisgICAgICAgIG1hYyA9IE1hY0FkZHJlc3MuZm9ySVB2NE11bHRpY2FzdEFkZHJlc3MoaXApOworICAgICAgICBleHBlY3RlZE1hYyA9IE1hY0FkZHJlc3Mub2YoIjAxOjAwOjVFOjAxOjAyOjAzIik7CisgICAgICAgIGFzc2VydFRydWUobWFjLmVxdWFscyhleHBlY3RlZE1hYykpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHRlc3RPZkRhdGFwYXRoaWQoKSB7CiAgICAgICAgIE1hY0FkZHJlc3MgbWFjID0gTWFjQWRkcmVzcy5vZihEYXRhcGF0aElkLk5PTkUpOwogICAgICAgICBhc3NlcnRUaGF0KG1hYywgaXMoTWFjQWRkcmVzcy5OT05FKSk7CiAKLSAgICAgICAgZm9yIChTdHJpbmcgcyA6IHRlc3RTdHJpbmdzKSB7CisgICAgICAgIGZvciAoU3RyaW5nIHMgOiB0ZXN0Q29sb25TdHJpbmdzKSB7CiAgICAgICAgICAgICBEYXRhcGF0aElkIGRwaWQgPSBEYXRhcGF0aElkLm9mKCIwMDowMDoiICsgcyk7CiAgICAgICAgICAgICBtYWMgPSBNYWNBZGRyZXNzLm9mKGRwaWQpOwogICAgICAgICAgICAgYXNzZXJ0VGhhdChtYWMsIGlzKE1hY0FkZHJlc3Mub2YocykpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZm9ySVB2Nk11bHRpY2FzdEFkZHIoKSB7CisgICAgICAgIElQdjZBZGRyZXNzIGlwID0gSVB2NkFkZHJlc3Mub2YoImZmMDI6OjE6ZmYwMDowIik7CisgICAgICAgIE1hY0FkZHJlc3MgbWFjID0gTWFjQWRkcmVzcy5mb3JJUHY2TXVsdGljYXN0QWRkcihpcCk7CisgICAgICAgIE1hY0FkZHJlc3MgZXhwZWN0ZWRNYWMgPSBNYWNBZGRyZXNzLm9mKCIzMzozMzpmZjowMDowMDowMCIpOworICAgICAgICBhc3NlcnRUcnVlKG1hYy5lcXVhbHMoZXhwZWN0ZWRNYWMpKTsKKworICAgICAgICBpcCA9IElQdjZBZGRyZXNzLm9mKCJmZjAyOjoxOmZmMDE6MDIwMyIpOworICAgICAgICBtYWMgPSBNYWNBZGRyZXNzLmZvcklQdjZNdWx0aWNhc3RBZGRyKGlwKTsKKyAgICAgICAgZXhwZWN0ZWRNYWMgPSBNYWNBZGRyZXNzLm9mKCIzMzozMzpmZjowMTowMjowMyIpOworICAgICAgICBhc3NlcnRUcnVlKG1hYy5lcXVhbHMoZXhwZWN0ZWRNYWMpKTsKKworICAgICAgICBpcCA9IElQdjZBZGRyZXNzLm9mKCJmZjAyOjoxOjAxMDI6MDMwNCIpOworICAgICAgICBtYWMgPSBNYWNBZGRyZXNzLmZvcklQdjZNdWx0aWNhc3RBZGRyKGlwKTsKKyAgICAgICAgZXhwZWN0ZWRNYWMgPSBNYWNBZGRyZXNzLm9mKCIzMzozMzowMTowMjowMzowNCIpOworICAgICAgICBhc3NlcnRUcnVlKG1hYy5lcXVhbHMoZXhwZWN0ZWRNYWMpKTsKKworICAgICAgICBpcCA9IElQdjZBZGRyZXNzLm9mKCIyMDAxOjoxOjAxMDI6MDMwNCIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbWFjID0gTWFjQWRkcmVzcy5mb3JJUHY2TXVsdGljYXN0QWRkcihpcCk7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBvaworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZFcnJvckNhdXNlRGF0YVRlc3QuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL09GRXJyb3JDYXVzZURhdGFUZXN0LmphdmEKaW5kZXggOWE1YTRkYy4uNmQ2YzU0NSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvT0ZFcnJvckNhdXNlRGF0YVRlc3QuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9PRkVycm9yQ2F1c2VEYXRhVGVzdC5qYXZhCkBAIC0yLDEwICsyLDEwIEBACiAKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5lcXVhbFRvOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRoYXQ7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkOwogCiBpbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzOwotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXJzOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRkZhY3RvcmllczsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZGbG93QWRkOwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAuc2V0UHJpb3JpdHkoNjAwMCkKICAgICAgICAgLmJ1aWxkKCk7CiAKLSAgICAgICAgQ2hhbm5lbEJ1ZmZlciBiYiA9IENoYW5uZWxCdWZmZXJzLmR5bmFtaWNCdWZmZXIoKTsKKyAgICAgICAgQnl0ZUJ1ZiBiYiA9IFVucG9vbGVkLmJ1ZmZlcigpOwogICAgICAgICBmbG93QWRkLndyaXRlVG8oYmIpOwogICAgICAgICBieXRlW10gZmxvd0FkZEJ5dGVzID0gbmV3IGJ5dGVbYmIucmVhZGFibGVCeXRlcygpXTsKICAgICAgICAgYmIucmVhZEJ5dGVzKGZsb3dBZGRCeXRlcyk7CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VMTI4VGVzdC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVTEyOFRlc3QuamF2YQppbmRleCA4MWQ5ZDdmLi41NmRjMDcwIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9vcGVuZmxvdy90eXBlcy9VMTI4VGVzdC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1UxMjhUZXN0LmphdmEKQEAgLTgsMTIgKzgsMTIgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CiAKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIAogaW1wb3J0IG9yZy5oYW1jcmVzdC5NYXRjaGVyczsKLWltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7Ci1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyczsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCkBAIC0zNiwxMiArMzYsMTIgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFJlYWRCeXRlcygpIHsKLSAgICAgICAgQ2hhbm5lbEJ1ZmZlciBlbXB0eSA9IENoYW5uZWxCdWZmZXJzLndyYXBwZWRCdWZmZXIobmV3IGJ5dGVbMTZdKTsKKyAgICAgICAgQnl0ZUJ1ZiBlbXB0eSA9IFVucG9vbGVkLndyYXBwZWRCdWZmZXIobmV3IGJ5dGVbMTZdKTsKICAgICAgICAgVTEyOCB1RW1wdHkgPSBVMTI4LnJlYWQxNkJ5dGVzKGVtcHR5KTsKICAgICAgICAgYXNzZXJ0VGhhdCh1RW1wdHkuZ2V0TXNiKCksIGVxdWFsVG8oMEwpKTsKICAgICAgICAgYXNzZXJ0VGhhdCh1RW1wdHkuZ2V0THNiKCksIGVxdWFsVG8oMEwpKTsKIAotICAgICAgICBDaGFubmVsQnVmZmVyIHZhbHVlID0gQ2hhbm5lbEJ1ZmZlcnMud3JhcHBlZEJ1ZmZlcigKKyAgICAgICAgQnl0ZUJ1ZiB2YWx1ZSA9IFVucG9vbGVkLndyYXBwZWRCdWZmZXIoCiAgICAgICAgICAgICAgICAgbmV3IGJ5dGVbXSB7IDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIChieXRlKSAweDg4LAogICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpIDB4OTksIChieXRlKSAweGFhLCAoYnl0ZSkgMHhiYiwgKGJ5dGUpIDB4Y2MsIChieXRlKSAweGRkLAogICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpIDB4ZWUsIChieXRlKSAweGZmLCAweDExIH0pOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdHlwZXMvVnhsYW5OSVRlc3QuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1Z4bGFuTklUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4ZGQwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3R5cGVzL1Z4bGFuTklUZXN0LmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworCitwdWJsaWMgY2xhc3MgVnhsYW5OSVRlc3QgeworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRNYXhWbmkoKSB7CisgICAgICAgIFZ4bGFuTkkub2ZWbmkoMHgwMGZmZmZmZik7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRNaW5WbmkoKSB7CisgICAgICAgIFZ4bGFuTkkub2ZWbmkoMHgwMDAwMDAxKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RWbmlFcXVhbHMoKSB7CisgICAgICAgIGFzc2VydEVxdWFscygoaW50KVZ4bGFuTkkub2ZWbmkoMHgwMSkuZ2V0Vm5pKCksIDB4MDEpOworICAgICAgICBhc3NlcnRFcXVhbHMoKGludClWeGxhbk5JLm9mVm5pKDB4MDBmZkZGZmYpLmdldFZuaSgpLCAweDAwZmZGRmZmKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RWbmlPYmplY3RzKCkgeworICAgICAgICBWeGxhbk5JIG8gPSBWeGxhbk5JLm9mVm5pKDB4MDBmZkZGZmYpOworICAgICAgICBWeGxhbk5JIG0gPSBWeGxhbk5JLm9mVm5pKDB4MDBmZkZGZmYpOworICAgICAgICBhc3NlcnRFcXVhbHMoby5jb21wYXJlVG8obSksIDApOworICAgICAgICBhc3NlcnRFcXVhbHMoby5nZXRWbmkoKSwgbS5nZXRWbmkoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKCFvLmVxdWFscyhtKSk7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdEludmFsaWRWbmkxKCkgeworICAgICAgICBWeGxhbk5JLm9mVm5pKDB4RkZmZkZGZmYpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkVm5pMigpIHsKKyAgICAgICAgVnhsYW5OSS5vZlZuaSgweDBGZmZGRmZmKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZCA9IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZFZuaTMoKSB7CisgICAgICAgIFZ4bGFuTkkub2ZWbmkoMHgwMUZmZkZGZmYpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L29wZW5mbG93L3V0aWwvSGV4U3RyaW5nVGVzdC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9IZXhTdHJpbmdUZXN0LmphdmEKaW5kZXggMzYwY2I1YS4uY2E1ZGY5OCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9IZXhTdHJpbmdUZXN0LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvb3BlbmZsb3cvdXRpbC9IZXhTdHJpbmdUZXN0LmphdmEKQEAgLTE3LDE0ICsxNywyMSBAQAogCiBwYWNrYWdlIG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy51dGlsOwogCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5lcXVhbFRvOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0OworCiAvKioKICAqIERvZXMgaGV4c3RyaW5nIGNvbnZlcnNpb24gd29yaz8KICAqCiAgKiBAYXV0aG9yIFJvYiBTaGVyd29vZCAocm9iLnNoZXJ3b29kQHN0YW5mb3JkLmVkdSkKKyAqIEBhdXRob3IgQW5kcmVhcyBXdW5kc2FtIDxhbmRyZWFzLnd1bmRzYW1AYmlnc3dpdGNoLmNvbT4KICAqLwogcHVibGljIGNsYXNzIEhleFN0cmluZ1Rlc3QgewogCkBAIC00MSw3ICs0OCw3IEBACiAgICAgICAgIFN0cmluZyBkcGlkU3RyID0gIjNlOjFmOjAxOmZjOjcyOjhjOjYzOjMxIjsKICAgICAgICAgbG9uZyB2YWxpZCA9IDB4M2UxZjAxZmM3MjhjNjMzMUw7CiAgICAgICAgIGxvbmcgdGVzdExvbmcgPSBIZXhTdHJpbmcudG9Mb25nKGRwaWRTdHIpOwotICAgICAgICBhc3NlcnRFcXVhbHModmFsaWQsIHRlc3RMb25nKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3YXM6ICIgKyBMb25nLnRvSGV4U3RyaW5nKHRlc3RMb25nKSwgdmFsaWQsIHRlc3RMb25nKTsKICAgICB9CiAKICAgICBAVGVzdApAQCAtNDksNyArNTYsNyBAQAogICAgICAgICBTdHJpbmcgZHBpZFN0ciA9ICIxZjoxOmZjOjcyOjM6ZjozMSI7CiAgICAgICAgIGxvbmcgdmFsaWQgPSAweDFmMDFmYzcyMDMwZjMxTDsKICAgICAgICAgbG9uZyB0ZXN0TG9uZyA9IEhleFN0cmluZy50b0xvbmcoZHBpZFN0cik7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2YWxpZCwgdGVzdExvbmcpOworICAgICAgICBhc3NlcnRFcXVhbHMoIndhczogIiArIExvbmcudG9IZXhTdHJpbmcodGVzdExvbmcpLCB2YWxpZCwgdGVzdExvbmcpOwogICAgIH0KIAogICAgIEBUZXN0CkBAIC03NiwxMyArODMsMTcgQEAKICAgICB9CiAKICAgICBAVGVzdChleHBlY3RlZD1OdW1iZXJGb3JtYXRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdFRvTG9uZ0Vycm9yQ29sb25BdEVuZCgpIHsKKyAgICAgICAgSGV4U3RyaW5nLnRvTG9uZygiMDM6MDE6Iik7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9TnVtYmVyRm9ybWF0RXhjZXB0aW9uLmNsYXNzKQogICAgIHB1YmxpYyB2b2lkIHRlc3RUb0xvbmdFcnJvckludmFsaWRIZXhEaWdpdCgpIHsKICAgICAgICAgSGV4U3RyaW5nLnRvTG9uZygic3M6MDEiKTsKICAgICB9CiAKLSAgICBAVGVzdChleHBlY3RlZD1OdW1iZXJGb3JtYXRFeGNlcHRpb24uY2xhc3MpCiAgICAgcHVibGljIHZvaWQgdGVzdFRvTG9uZ0Vycm9yRW1wdHlTdHJpbmcoKSB7Ci0gICAgICAgIEhleFN0cmluZy50b0xvbmcoIiIpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0xvbmcoIiIpLCBlcXVhbFRvKDBMKSk7CiAgICAgfQogCiAKQEAgLTk0LDEwICsxMDUsMTM4IEBACiAgICAgICAgIGFzc2VydEVxdWFscyh2YWxpZCwgdGVzdFN0cmluZyk7CiAgICAgfQogCi0gICAgQFRlc3QoZXhwZWN0ZWQ9TnVtYmVyRm9ybWF0RXhjZXB0aW9uLmNsYXNzKQotICAgIHB1YmxpYyB2b2lkIHRlc3RGcm9tSGV4U3RyaW5nRXJyb3IoKSB7Ci0gICAgICAgIFN0cmluZyBpbnZhbGlkU3RyID0gIjAwOjAwOjAwOjAwOjAwOjAwOmZmZmYiOwotICAgICAgICBIZXhTdHJpbmcuZnJvbUhleFN0cmluZyhpbnZhbGlkU3RyKTsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZ0J5dGVzMigpIHsKKyAgICAgICAgYnl0ZVtdIGRwaWQgPSB7IDEsIDIsIDMsIDQgfTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gIjAxOjAyOjAzOjA0IjsKKyAgICAgICAgU3RyaW5nIHRlc3RTdHJpbmcgPSBIZXhTdHJpbmcudG9IZXhTdHJpbmcoZHBpZCk7CisgICAgICAgIGFzc2VydEVxdWFscyh2YWxpZCwgdGVzdFN0cmluZyk7CiAgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmdCeXRlczMoKSB7CisgICAgICAgIGJ5dGVbXSBkcGlkID0geyAoYnl0ZSkgMHhmZiB9OworICAgICAgICBTdHJpbmcgdmFsaWQgPSAiZmYiOworICAgICAgICBTdHJpbmcgdGVzdFN0cmluZyA9IEhleFN0cmluZy50b0hleFN0cmluZyhkcGlkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHZhbGlkLCB0ZXN0U3RyaW5nKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZ0VtcHR5KCkgeworICAgICAgICBieXRlW10gZHBpZCA9IHsgfTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gIiI7CisgICAgICAgIFN0cmluZyB0ZXN0U3RyaW5nID0gSGV4U3RyaW5nLnRvSGV4U3RyaW5nKGRwaWQpOworICAgICAgICBhc3NlcnRFcXVhbHModmFsaWQsIHRlc3RTdHJpbmcpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nTG9uZygpIHsKKyAgICAgICAgYnl0ZVtdIGRwaWQgPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gIjAxOjAyOjAzOjA0OjA1OjA2OjA3OjA4OjA5OjBhOjBiOjBjOjBkOjBlOjBmIjsKKyAgICAgICAgU3RyaW5nIHRlc3RTdHJpbmcgPSBIZXhTdHJpbmcudG9IZXhTdHJpbmcoZHBpZCk7CisgICAgICAgIGFzc2VydEVxdWFscyh2YWxpZCwgdGVzdFN0cmluZyk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9aZXJvKCkgeworICAgICAgICBieXRlW10gZHBpZCA9IHsgMCwgMCwgMCwgMH07CisgICAgICAgIFN0cmluZyB2YWxpZCA9ICIwMDowMDowMDowMCI7CisgICAgICAgIFN0cmluZyB0ZXN0U3RyaW5nID0gSGV4U3RyaW5nLnRvSGV4U3RyaW5nKGRwaWQpOworICAgICAgICBhc3NlcnRFcXVhbHModmFsaWQsIHRlc3RTdHJpbmcpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nRnJvbUxvbmcoKSB7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvSGV4U3RyaW5nKDB4MEwpLCBlcXVhbFRvKCIwMDowMDowMDowMDowMDowMDowMDowMCIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9IZXhTdHJpbmcoMHgwMF8wMF8wMF8wMF8wMF8wMF8wMF8wMUwpLCBlcXVhbFRvKCIwMDowMDowMDowMDowMDowMDowMDowMSIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9IZXhTdHJpbmcoMHgwMV8wMl8wM18wNF8wNV8wNl8wN18wOEwpLCBlcXVhbFRvKCIwMTowMjowMzowNDowNTowNjowNzowOCIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9IZXhTdHJpbmcoMHgwMF8wMF9mZl9mZV9mZF9mY19mYl9mYV9mOV9mOEwpLCBlcXVhbFRvKCJmZjpmZTpmZDpmYzpmYjpmYTpmOTpmOCIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9IZXhTdHJpbmcoMHg4MF83MF82MF81MF80MF8zMF8yMF8xMEwpLCBlcXVhbFRvKCI4MDo3MDo2MDo1MDo0MDozMDoyMDoxMCIpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZ0Zyb21Mb25nUGFkNigpIHsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9IZXhTdHJpbmcoMHgwTCwgNiksIGVxdWFsVG8oIjAwOjAwOjAwOjAwOjAwOjAwIikpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0hleFN0cmluZygweDAwXzAwXzAwXzAwXzAwXzAwXzAwXzAxTCwgNiksIGVxdWFsVG8oIjAwOjAwOjAwOjAwOjAwOjAxIikpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0hleFN0cmluZygweDAwXzAwXzAxXzAyXzAzXzA0XzA1XzA2TCwgNiksIGVxdWFsVG8oIjAxOjAyOjAzOjA0OjA1OjA2IikpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0hleFN0cmluZygweDAwXzAwX2ZmX2ZlX2ZkX2ZjX2ZiX2ZhTCwgNiksIGVxdWFsVG8oImZmOmZlOmZkOmZjOmZiOmZhIikpOworICAgICAgICAvLyB3aGVuIHN1cHBseWluZyBhIHZhbHVlIGxvbmdlciB0aGFuIDYsIGl0IGlzIGRpc3BsYXllZCBjb21wbGV0ZWx5CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvSGV4U3RyaW5nKDB4ODBfNzBfNjBfNTBfNDBfMzBfMjBfMTBMLCA2KSwgZXF1YWxUbygiODA6NzA6NjA6NTA6NDA6MzA6MjA6MTAiKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9CeXRlcygpIHsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9CeXRlcygiIiksIGVxdWFsVG8obmV3IGJ5dGVbXXt9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjEiKSwgZXF1YWxUbyhuZXcgYnl0ZVtdezB4MDF9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoImYiKSwgZXF1YWxUbyhuZXcgYnl0ZVtdezB4MGZ9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjEwIiksIGVxdWFsVG8obmV3IGJ5dGVbXXsoYnl0ZSkgMHgxMH0pKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9CeXRlcygiODAiKSwgZXF1YWxUbyhuZXcgYnl0ZVtdeyhieXRlKSAweDgwfSkpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0J5dGVzKCJmZiIpLCBlcXVhbFRvKG5ldyBieXRlW117KGJ5dGUpIDB4ZmZ9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjA6MCIpLCBlcXVhbFRvKG5ldyBieXRlW117KGJ5dGUpIDB4MDAsIDB4MDB9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjAwOjAwIiksIGVxdWFsVG8obmV3IGJ5dGVbXXsoYnl0ZSkgMHgwMCwgMHgwMH0pKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9CeXRlcygiMDoxIiksIGVxdWFsVG8obmV3IGJ5dGVbXXsoYnl0ZSkgMHgwMCwgMHgwMX0pKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9CeXRlcygiMDA6MSIpLCBlcXVhbFRvKG5ldyBieXRlW117KGJ5dGUpIDB4MDAsIDB4MDF9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjA6MDEiKSwgZXF1YWxUbyhuZXcgYnl0ZVtdeyhieXRlKSAweDAwLCAweDAxfSkpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0J5dGVzKCIxOjAiKSwgZXF1YWxUbyhuZXcgYnl0ZVtdeyhieXRlKSAweDAxLCAweDAwfSkpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0J5dGVzKCIwMTowMCIpLCBlcXVhbFRvKG5ldyBieXRlW117KGJ5dGUpIDB4MDEsIDB4MDB9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjAxOjAyOjAzOjA0IiksIGVxdWFsVG8obmV3IGJ5dGVbXXsoYnl0ZSkgMHgwMSwgMHgwMiwgMDMsIDA0fSkpOworICAgICAgICBhc3NlcnRUaGF0KEhleFN0cmluZy50b0J5dGVzKCJmZjpmZTowMzowNCIpLCBlcXVhbFRvKG5ldyBieXRlW117KGJ5dGUpIDB4ZmYsIChieXRlKSAweGZlLCAwMywgMDR9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoImZmOmZlOjM6NCIpLCBlcXVhbFRvKG5ldyBieXRlW117KGJ5dGUpIDB4ZmYsIChieXRlKSAweGZlLCAwMywgMDR9KSk7CisgICAgICAgIGFzc2VydFRoYXQoSGV4U3RyaW5nLnRvQnl0ZXMoIjAxOjAyOjAzOjA0OjA1OjA2IiksIGVxdWFsVG8obmV3IGJ5dGVbXXsweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2IH0pKTsKKyAgICAgICAgYXNzZXJ0VGhhdChIZXhTdHJpbmcudG9CeXRlcygiZmY6MTpmZToyOmZkIiksCisgICAgICAgICAgICAgICAgZXF1YWxUbyhuZXcgYnl0ZVtdeyhieXRlKSAweGZmLCAweDAxLCAoYnl0ZSkgMHhmZSwgMHgwMiwgKGJ5dGUpIDB4ZmR9KSk7CisKKyAgICB9CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9CeXRlc1JhbmRvbSgpIHsKKyAgICAgICAgUmFuZG9tIHIgPSBuZXcgUmFuZG9tKCk7CisgICAgICAgIGZvcihpbnQgbGVuZ3RoOiBJbW11dGFibGVMaXN0Lm9mKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDE1LCAxNiwgMzIsIDYzLCA2NCwgMTI4LCAyNTUsIDI1NiwgNTExLCA1MTIsIDEwMjMsIDEwMjQpKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2xlbmd0aF07CisgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGJ5dGUgYiA9IChieXRlKSByLm5leHRJbnQoMjU2KTsKKyAgICAgICAgICAgICAgICBidWlsZC5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiJTAyeCIsIGIpKTsKKyAgICAgICAgICAgICAgICBpZihpIDwgbGVuZ3RoLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQuYXBwZW5kKCI6Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ5dGVzW2ldID0gYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydFRoYXQoIkZvciBsZW5ndGggIisgbGVuZ3RoICsgIiwgIiwKKyAgICAgICAgICAgICAgICAgICAgSGV4U3RyaW5nLnRvQnl0ZXMoYnVpbGQudG9TdHJpbmcoKSksCisgICAgICAgICAgICAgICAgICAgIGVxdWFsVG8oYnl0ZXMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPU51bWJlckZvcm1hdEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9CeXRlc0Vycm9yKCkgeworICAgICAgICBTdHJpbmcgaW52YWxpZFN0ciA9ICIwMDowMDowMDowMDowMDowMDpmZmZmIjsKKyAgICAgICAgSGV4U3RyaW5nLnRvQnl0ZXMoaW52YWxpZFN0cik7CisgICAgfQorCisKKyAgICBAVGVzdChleHBlY3RlZD1OdW1iZXJGb3JtYXRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdFRvQnl0ZXNFcnJvcjIoKSB7CisgICAgICAgIFN0cmluZyBpbnZhbGlkU3RyID0gIjowMTowMjowMyI7CisgICAgICAgIEhleFN0cmluZy50b0J5dGVzKGludmFsaWRTdHIpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkPU51bWJlckZvcm1hdEV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9CeXRlc0Vycm9yMygpIHsKKyAgICAgICAgU3RyaW5nIGludmFsaWRTdHIgPSAiMDE6OjAyOjAzIjsKKyAgICAgICAgSGV4U3RyaW5nLnRvQnl0ZXMoaW52YWxpZFN0cik7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQ9TnVtYmVyRm9ybWF0RXhjZXB0aW9uLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RCb0J5dGVzRXJyb3I0KCkgeworICAgICAgICBTdHJpbmcgaW52YWxpZFN0ciA9ICIwMTowMjowMzoiOworICAgICAgICBIZXhTdHJpbmcudG9CeXRlcyhpbnZhbGlkU3RyKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZD1OdW1iZXJGb3JtYXRFeGNlcHRpb24uY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdHRvQnl0ZXNFcnJvcjUoKSB7CisgICAgICAgIFN0cmluZyBpbnZhbGlkU3RyID0gIjAxOjBYIjsKKyAgICAgICAgSGV4U3RyaW5nLnRvQnl0ZXMoaW52YWxpZFN0cik7CisgICAgfQorCiB9CiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L3Byb3RvY29sL09GQnVuZGxlQWRkVGVzdC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvcHJvdG9jb2wvT0ZCdW5kbGVBZGRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhODBjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy90ZXN0L2phdmEvb3JnL3Byb2plY3RmbG9vZGxpZ2h0L3Byb3RvY29sL09GQnVuZGxlQWRkVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKK3BhY2thZ2Ugb3JnLnByb2plY3RmbG9vZGxpZ2h0LnByb3RvY29sOworCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuZXF1YWxUbzsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OworCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZCdW5kbGVBZGRNc2c7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GRmFjdG9yaWVzOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5PRkZhY3Rvcnk7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GRmxvd0FkZDsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZWZXJzaW9uOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy50eXBlcy5CdW5kbGVJZDsKKworLyoqIEN1c3RvbSB0ZXN0cyB0aGF0IHZhbGlkYXRlIHRoYXQgQnVuZGxlQWRkIG1lc3NhZ2VzIGluaGVyaXQgdGhlIFhJRCBmcm9tIHRoZWlyCisgKiAgY29udGFpbmVkIG1lc3NhZ2UsIGFzIHBlciBPRiBTcGVjIDEuNC4wOgorICogIDxwPgorICogIDcuMy45LjYgQWRkaW5nIG1lc3NhZ2VzIHRvIGEgYnVuZGxlCisgKiAgPHA+CisgKiAgICAgTWVzc2FnZSBhZGRlZCBpbiBhIGJ1bmRsZSBzaG91bGQgaGF2ZSBhIHVuaXF1ZSB4aWQgdG8gaGVscCBtYXRjaGluZyBlcnJvcnMgdG8gbWVzc2FnZXMsCisgKiAgICAgYW5kIHRoZSB4aWQgb2YgdGhlIGJ1bmRsZSBhZGQgbWVzc2FnZSBtdXN0IGJlIHRoZSBzYW1lLgorICogIDwvcD4KKyAqCisgKiBAYXV0aG9yIEFuZHJlYXMgV3VuZHNhbSA8YW5kcmVhcy53dW5kc2FtQGJpZ3N3aXRjaC5jb20+CisgKi8KK3B1YmxpYyBjbGFzcyBPRkJ1bmRsZUFkZFRlc3QgeworICAgIHByaXZhdGUgZmluYWwgT0ZGYWN0b3J5IGZhY3RvcnkgPSBPRkZhY3Rvcmllcy5nZXRGYWN0b3J5KE9GVmVyc2lvbi5PRl8xNCk7CisgICAgcHJpdmF0ZSBPRkZsb3dBZGQgZmxvd0FkZDsKKworICAgIEBCZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgZmxvd0FkZCA9IGZhY3RvcnkuYnVpbGRGbG93QWRkKCkuYnVpbGQoKTsKKworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEJ1bmRsZUFkZEJ1aWxkZXIoKSB7CisgICAgICAgIE9GQnVuZGxlQWRkTXNnIGJ1bmRsZUFkZCA9IGNyZWF0ZUJ1bmRsZUFkZCgpOworICAgICAgICBhc3NlcnRUaGF0KGJ1bmRsZUFkZC5nZXRYaWQoKSwgZXF1YWxUbyhmbG93QWRkLmdldFhpZCgpKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBPRkJ1bmRsZUFkZE1zZyBjcmVhdGVCdW5kbGVBZGQoKSB7CisgICAgICAgIHJldHVybiBmYWN0b3J5LmJ1aWxkQnVuZGxlQWRkTXNnKCkKKyAgICAgICAgICAgICAgICAuc2V0QnVuZGxlSWQoQnVuZGxlSWQub2YoMSkpCisgICAgICAgICAgICAgICAgLnNldERhdGEoZmxvd0FkZCkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RCdW5kbGVBZGRCdWlsZGVyV2l0aFBhcmVudCgpIHsKKyAgICAgICAgT0ZCdW5kbGVBZGRNc2cgYnVuZGxlQWRkID0gY3JlYXRlQnVuZGxlQWRkKCk7CisKKyAgICAgICAgLy8gdmFsaWRhdGUgQnVpbGRlcldpdGhQYXJlbnQKKyAgICAgICAgT0ZCdW5kbGVBZGRNc2cgYnVpbHRGcm9tT3RoZXJNZXNzYWdlID0gYnVuZGxlQWRkLmNyZWF0ZUJ1aWxkZXIoKQorICAgICAgICAgICAuYnVpbGQoKTsKKworICAgICAgICBhc3NlcnRUaGF0KGJ1aWx0RnJvbU90aGVyTWVzc2FnZS5nZXRYaWQoKSwgZXF1YWxUbyhidWlsdEZyb21PdGhlck1lc3NhZ2UuZ2V0RGF0YSgpLmdldFhpZCgpKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlQWRkQnVpbGRlcldpdGhQYXJlbnRPdmVyd3JpdGUoKSB7CisgICAgICAgIE9GRmxvd0FkZCBmbG93QWRkMiA9IGZhY3RvcnkuYnVpbGRGbG93QWRkKCkuc2V0WGlkKDEyMzRMKS5idWlsZCgpOworCisgICAgICAgIC8vIEJ1aWxkZXJXaXRoUGFyZW50LCBvdmVyd3JpdGUgd2l0aCBuZXcgbWVzc2FnZQorICAgICAgICBPRkJ1bmRsZUFkZE1zZyBidW5kbGVBZGQgPSBjcmVhdGVCdW5kbGVBZGQoKTsKKworICAgICAgICBPRkJ1bmRsZUFkZE1zZyBidWlsdEZyb21PdGhlck1lc3NhZ2UgPSBidW5kbGVBZGQuY3JlYXRlQnVpbGRlcigpCisgICAgICAgICAgIC5zZXREYXRhKGZsb3dBZGQyKQorICAgICAgICAgICAuYnVpbGQoKTsKKworICAgICAgICBhc3NlcnRUaGF0KGJ1aWx0RnJvbU90aGVyTWVzc2FnZS5nZXRYaWQoKSwgZXF1YWxUbyhmbG93QWRkMi5nZXRYaWQoKSkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvcHJvdG9jb2wvbWF0Y2gvT0ZNYXRjaFByZXJlcXVpc2l0ZXNUZXN0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvdGVzdC9qYXZhL29yZy9wcm9qZWN0Zmxvb2RsaWdodC9wcm90b2NvbC9tYXRjaC9PRk1hdGNoUHJlcmVxdWlzaXRlc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNkNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL3Rlc3QvamF2YS9vcmcvcHJvamVjdGZsb29kbGlnaHQvcHJvdG9jb2wvbWF0Y2gvT0ZNYXRjaFByZXJlcXVpc2l0ZXNUZXN0LmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcucHJvamVjdGZsb29kbGlnaHQucHJvdG9jb2wubWF0Y2g7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5lcXVhbFRvOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLm51bGxWYWx1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wubWF0Y2guTWF0Y2hGaWVsZC5FVEhfVFlQRTsKK2ltcG9ydCBzdGF0aWMgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm1hdGNoLk1hdGNoRmllbGQuSVBWNF9TUkM7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCitpbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVycy5QYXJhbWV0ZXJpemVkOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlBhcmFtZXRlcml6ZWQuUGFyYW1ldGVyczsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZGYWN0b3JpZXM7CitpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLk9GRmFjdG9yeTsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuT0ZWZXJzaW9uOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5tYXRjaC5NYXRjaDsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wubWF0Y2guTWF0Y2hGaWVsZDsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuRXRoVHlwZTsKK2ltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cudHlwZXMuSVB2NEFkZHJlc3M7CisKK0BSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCitwdWJsaWMgY2xhc3MgT0ZNYXRjaFByZXJlcXVpc2l0ZXNUZXN0IHsKKyAgICBwcml2YXRlIGZpbmFsIE9GRmFjdG9yeSBmYWN0b3J5OworCisgICAgQFBhcmFtZXRlcnMobmFtZT0ie2luZGV4fS5DaGFubmVsSGFuZGxlclZlcnNpb249ezB9IikKKyAgICBwdWJsaWMgc3RhdGljIEl0ZXJhYmxlPE9iamVjdFtdPiBkYXRhKCkgeworICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0W11bXSB7CisgICAgICAgICAgICAgICAge09GVmVyc2lvbi5PRl8xMH0sCisgICAgICAgICAgICAgICAge09GVmVyc2lvbi5PRl8xM30sCisgICAgICAgICAgICAgICAge09GVmVyc2lvbi5PRl8xNH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHVibGljIE9GTWF0Y2hQcmVyZXF1aXNpdGVzVGVzdChPRlZlcnNpb24gdmVyc2lvbikgeworICAgICAgICBmYWN0b3J5ID0gT0ZGYWN0b3JpZXMuZ2V0RmFjdG9yeSh2ZXJzaW9uKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RQcmVSZXF1aXNpdGVzTm90TWV0KCkgeworICAgICAgICBNYXRjaCBtYXRjaCA9IGZhY3RvcnkuYnVpbGRNYXRjaCgpCisgICAgICAgICAgIC5zZXRFeGFjdChFVEhfVFlQRSwgRXRoVHlwZS5JUHY2KQorICAgICAgICAgICAuc2V0RXhhY3QoSVBWNF9TUkMsIElQdjRBZGRyZXNzLm9mKCIxLjIuMy40IikpCisgICAgICAgICAgIC5idWlsZCgpOworCisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guZ2V0KEVUSF9UWVBFKSwgZXF1YWxUbyhFdGhUeXBlLklQdjYpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5pc0V4YWN0KEVUSF9UWVBFKSwgZXF1YWxUbyh0cnVlKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNQYXJ0aWFsbHlNYXNrZWQoRVRIX1RZUEUpLCBlcXVhbFRvKGZhbHNlKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNGdWxseVdpbGRjYXJkZWQoRVRIX1RZUEUpLCBlcXVhbFRvKGZhbHNlKSk7CisKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5nZXQoSVBWNF9TUkMpLCBudWxsVmFsdWUoKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNFeGFjdChJUFY0X1NSQyksIGVxdWFsVG8oZmFsc2UpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5pc1BhcnRpYWxseU1hc2tlZChJUFY0X1NSQyksIGVxdWFsVG8oZmFsc2UpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5pc0Z1bGx5V2lsZGNhcmRlZChJUFY0X1NSQyksIGVxdWFsVG8odHJ1ZSkpOworCisgICAgICAgIEl0ZXJhYmxlPE1hdGNoRmllbGQ8Pz4+IG1hdGNoRmllbGRzID0gbWF0Y2guZ2V0TWF0Y2hGaWVsZHMoKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaEZpZWxkcywgTWF0Y2hlcnMuPE1hdGNoRmllbGQ8Pz4+aXRlcmFibGVXaXRoU2l6ZSgxKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2hGaWVsZHMsIE1hdGNoZXJzLjxNYXRjaEZpZWxkPD8+PmNvbnRhaW5zKE1hdGNoRmllbGQuRVRIX1RZUEUpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RQcmVSZXF1aXNpdGVzTWV0KCkgeworICAgICAgICBNYXRjaCBtYXRjaCA9IGZhY3RvcnkuYnVpbGRNYXRjaCgpCisgICAgICAgICAgIC5zZXRFeGFjdChFVEhfVFlQRSwgRXRoVHlwZS5JUHY0KQorICAgICAgICAgICAuc2V0RXhhY3QoSVBWNF9TUkMsIElQdjRBZGRyZXNzLm9mKCIxLjIuMy40IikpCisgICAgICAgICAgIC5idWlsZCgpOworCisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guZ2V0KEVUSF9UWVBFKSwgZXF1YWxUbyhFdGhUeXBlLklQdjQpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5pc0V4YWN0KEVUSF9UWVBFKSwgZXF1YWxUbyh0cnVlKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNQYXJ0aWFsbHlNYXNrZWQoRVRIX1RZUEUpLCBlcXVhbFRvKGZhbHNlKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNGdWxseVdpbGRjYXJkZWQoRVRIX1RZUEUpLCBlcXVhbFRvKGZhbHNlKSk7CisKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5nZXQoSVBWNF9TUkMpLCBlcXVhbFRvKElQdjRBZGRyZXNzLm9mKCIxLjIuMy40IikpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaC5pc0V4YWN0KElQVjRfU1JDKSwgZXF1YWxUbyh0cnVlKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNQYXJ0aWFsbHlNYXNrZWQoSVBWNF9TUkMpLCBlcXVhbFRvKGZhbHNlKSk7CisgICAgICAgIGFzc2VydFRoYXQobWF0Y2guaXNGdWxseVdpbGRjYXJkZWQoSVBWNF9TUkMpLCBlcXVhbFRvKGZhbHNlKSk7CisKKyAgICAgICAgSXRlcmFibGU8TWF0Y2hGaWVsZDw/Pj4gbWF0Y2hGaWVsZHMgPSBtYXRjaC5nZXRNYXRjaEZpZWxkcygpOworICAgICAgICBhc3NlcnRUaGF0KG1hdGNoRmllbGRzLCBNYXRjaGVycy48TWF0Y2hGaWVsZDw/Pj5pdGVyYWJsZVdpdGhTaXplKDIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChtYXRjaEZpZWxkcywgTWF0Y2hlcnMuPE1hdGNoRmllbGQ8Pz4+Y29udGFpbnMoTWF0Y2hGaWVsZC5FVEhfVFlQRSwgTWF0Y2hGaWVsZC5JUFY0X1NSQykpOworICAgIH0KKworCit9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvX2ZpZWxkX2FjY2Vzc29ycy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL19maWVsZF9hY2Nlc3NvcnMuamF2YQppbmRleCA0MWFjNjZmLi40NmE3OWI2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvX2ZpZWxkX2FjY2Vzc29ycy5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9fZmllbGRfYWNjZXNzb3JzLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKICAgICAgICAgcmV0dXJuICR7dmVyc2lvbl9wcm9wLmVudW1fdmFsdWV9OwogLy86OiAgICBlbGlmIHZlcnNpb25fcHJvcC5pc19sZW5ndGhfdmFsdWU6CiAgICAgICAgIC8vIEZJWE1FOiBIYWNreSBhbmQgaW5wZXJmb3JtYW50IHdheSB0byBkZXRlcm1pbmUgYSBtZXNzYWdlIGxlbmd0aC4gU2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nIGJldHRlcgotICAgICAgICBDaGFubmVsQnVmZmVyIGMgPSBuZXcgTGVuZ3RoQ291bnRpbmdQc2V1ZG9DaGFubmVsQnVmZmVyKCk7CisgICAgICAgIEJ5dGVCdWYgYyA9IG5ldyBMZW5ndGhDb3VudGluZ1BzZXVkb0J5dGVCdWYoKTsKICAgICAgICAgV1JJVEVSLndyaXRlKGMsICR7ICJ0aGlzIiBpZiBub3QgYnVpbGRlciBlbHNlICIoezB9KSB0aGlzLmdldE1lc3NhZ2UoKSIuZm9ybWF0KG1zZy5uYW1lKSB9KTsKICAgICAgICAgcmV0dXJuIGMud3JpdGVySW5kZXgoKTsKIC8vOjogICAgZWxzZToKQEAgLTI4LDcgKzI4LDcgQEAKICAgICB9CiAvLzo6ICNlbmRpZgogCi0vLzo6IGlmIGdlbmVyYXRlX3NldHRlcnMgYW5kIHByb3AuaXNfd3JpdGVhYmxlOgorLy86OiBpZiBnZW5lcmF0ZV9zZXR0ZXJzIGFuZCBwcm9wLm5lZWRzX3NldHRlcjoKICAgICAvLzo6IHNldHRlcl90ZW1wbGF0ZV9maWxlX25hbWUgPSAiJXMvY3VzdG9tLyVzXyVzLmphdmEiICUgKHRlbXBsYXRlX2RpciwgbXNnLm5hbWUgaWYgbm90IGJ1aWxkZXIgZWxzZSBtc2cubmFtZSArICcuQnVpbGRlcicsIHByb3Auc2V0dGVyX25hbWUpCiAgICAgLy86OiBpZiBvcy5wYXRoLmV4aXN0cyhzZXR0ZXJfdGVtcGxhdGVfZmlsZV9uYW1lKToKICAgICAvLzo6IGluY2x1ZGUoc2V0dGVyX3RlbXBsYXRlX2ZpbGVfbmFtZSwgbXNnPW1zZywgYnVpbGRlcj1idWlsZGVyLCBoYXNfcGFyZW50PWhhc19wYXJlbnQpCkBAIC0zNiwxMiArMzYsMTQgQEAKICAgICAvLzo6IGVsc2U6CiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljICR7bXNnLmludGVyZmFjZS5uYW1lfS5CdWlsZGVyICR7cHJvcC5zZXR0ZXJfbmFtZX0oJHtwcm9wLmphdmFfdHlwZS5wdWJsaWNfdHlwZX0gJHtwcm9wLm5hbWV9KSR7ICIiIGlmIHByb3AgaW4gbXNnLm1lbWJlcnMgZWxzZSAiIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiJ9IHsKLSAgICAgICAgLy86OiBpZiBwcm9wIGluIG1zZy5tZW1iZXJzOgorICAgICAgICAvLzo6IGlmIHByb3AuaXNfd3JpdGVhYmxlIGFuZCBwcm9wIGluIG1zZy5tZW1iZXJzOgogICAgICAgICB0aGlzLiR7cHJvcC5uYW1lfSA9ICR7cHJvcC5uYW1lfTsKICAgICAgICAgdGhpcy4ke3Byb3AubmFtZX1TZXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgLy86OiBlbHNlOgorICAgICAgICAvLzo6IGVsaWYgcHJvcC5pc193cml0ZWFibGU6CiAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlByb3BlcnR5ICR7cHJvcC5uYW1lfSBub3Qgc3VwcG9ydGVkIGluIHZlcnNpb24gI3t2ZXJzaW9ufSIpOworICAgICAgICAvLzo6IGVsc2U6CisgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlByb3BlcnR5ICR7cHJvcC5uYW1lfSBpcyBub3Qgd3JpdGVhYmxlIik7CiAgICAgICAgIC8vOjogI2VuZGlmCiAgICAgfQogICAgIC8vOjogI2VuZGlmCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvX2ltcG9ydHMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9faW1wb3J0cy5qYXZhCmluZGV4IGY4NGVmYmUuLmI2NDg2NWYgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9faW1wb3J0cy5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9faW1wb3J0cy5qYXZhCkBAIC0xNiwxNSArMTYsMTcgQEAKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuaW5zdHJ1Y3Rpb24uKjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wuaW5zdHJ1Y3Rpb25pZC4qOwogaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5tYXRjaC4qOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5zdGF0Lio7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnByb3RvY29sLm94bS4qOworaW1wb3J0IG9yZy5wcm9qZWN0Zmxvb2RsaWdodC5vcGVuZmxvdy5wcm90b2NvbC5veHMuKjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cucHJvdG9jb2wucXVldWVwcm9wLio7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnR5cGVzLio7CiBpbXBvcnQgb3JnLnByb2plY3RmbG9vZGxpZ2h0Lm9wZW5mbG93LnV0aWwuKjsKIGltcG9ydCBvcmcucHJvamVjdGZsb29kbGlnaHQub3BlbmZsb3cuZXhjZXB0aW9ucy4qOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOwotaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcnM7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkOwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlTGlzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZVNldDsKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LlNldHM7CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY29uc3Rfc2VyaWFsaXplci5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2NvbnN0X3NlcmlhbGl6ZXIuamF2YQppbmRleCAwM2NhOGFjLi45YWYzYTQwIDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY29uc3Rfc2VyaWFsaXplci5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jb25zdF9zZXJpYWxpemVyLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljICR7aW50X3dpcmVfdHlwZX0gJHtlbnRyeS5uYW1lfV9WQUwgPSAke2VudHJ5LmZvcm1hdF92YWx1ZSh2ZXJzaW9uKX07CiAgICAgLy86OiAjZW5kZm9yCiAKLSAgICBwdWJsaWMgc3RhdGljICR7ZW51bS5uYW1lfSByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljICR7ZW51bS5uYW1lfSByZWFkRnJvbShCeXRlQnVmIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBvZldpcmVWYWx1ZSgke3dpcmVfdHlwZS5yZWFkX29wKHZlcnNpb24pfSk7CiAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiLCAke2VudW0ubmFtZX0gZSkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVRvKEJ5dGVCdWYgYmIsICR7ZW51bS5uYW1lfSBlKSB7CiAgICAgICAgICR7d2lyZV90eXBlLndyaXRlX29wKHZlcnNpb249dmVyc2lvbiwgbmFtZT0idG9XaXJlVmFsdWUoZSkiKX07CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY29uc3Rfc2V0X3NlcmlhbGl6ZXIuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jb25zdF9zZXRfc2VyaWFsaXplci5qYXZhCmluZGV4IDYxNTkyYTYuLjM1ZTljODYgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jb25zdF9zZXRfc2VyaWFsaXplci5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jb25zdF9zZXRfc2VyaWFsaXplci5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyAke2ludF93aXJlX3R5cGV9ICR7ZW50cnkubmFtZX1fVkFMID0gJHtlbnRyeS5mb3JtYXRfdmFsdWUodmVyc2lvbil9OwogICAgIC8vOjogI2VuZGZvcgogCi0gICAgcHVibGljIHN0YXRpYyBTZXQ8JHtlbnVtLm5hbWV9PiByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICBwdWJsaWMgc3RhdGljIFNldDwke2VudW0ubmFtZX0+IHJlYWRGcm9tKEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG9mV2lyZVZhbHVlKCR7d2lyZV90eXBlLnJlYWRfb3AodmVyc2lvbil9KTsKICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVRvKENoYW5uZWxCdWZmZXIgYmIsIFNldDwke2VudW0ubmFtZX0+IHNldCkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVRvKEJ5dGVCdWYgYmIsIFNldDwke2VudW0ubmFtZX0+IHNldCkgewogICAgICAgICAke3dpcmVfdHlwZS53cml0ZV9vcCh2ZXJzaW9uPXZlcnNpb24sIG5hbWU9InRvV2lyZVZhbHVlKHNldCkiKX07CiAgICAgfQogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GQnVuZGxlQWRkTXNnLkJ1aWxkZXJfc2V0RGF0YS5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkJ1bmRsZUFkZE1zZy5CdWlsZGVyX3NldERhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTU5MTMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkJ1bmRsZUFkZE1zZy5CdWlsZGVyX3NldERhdGEuamF2YQpAQCAtMCwwICsxLDE1IEBACisgICAgLyoqIEN1c3RvbSBzZXR0ZXIgdGhhdCBlbnN1cmVzIHRoZSBCdW5kbGVBZGQgbWVzc2FnZSBpbmhlcml0cyB0aGUgWElEIGZyb20gdGhlaXIKKyAgICAgKiAgY29udGFpbmVkIG1lc3NhZ2UsIGFzIHBlciBPRiBTcGVjIDEuNC4wOgorICAgICAqICA8cD4KKyAgICAgKiAgNy4zLjkuNiBBZGRpbmcgbWVzc2FnZXMgdG8gYSBidW5kbGUKKyAgICAgKiAgPC9wPjxwPgorICAgICAqICAgICBNZXNzYWdlIGFkZGVkIGluIGEgYnVuZGxlIHNob3VsZCBoYXZlIGEgdW5pcXVlIHhpZCB0byBoZWxwIG1hdGNoaW5nIGVycm9ycyB0byBtZXNzYWdlcywKKyAgICAgKiAgICAgYW5kIHRoZSB4aWQgb2YgdGhlIGJ1bmRsZSBhZGQgbWVzc2FnZSBtdXN0IGJlIHRoZSBzYW1lLgorICAgICAqICA8L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE9GQnVuZGxlQWRkTXNnLkJ1aWxkZXIgc2V0RGF0YShPRk1lc3NhZ2UgZGF0YSkgeworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgICB0aGlzLmRhdGFTZXQgPSB0cnVlOworICAgICAgICByZXR1cm4gc2V0WGlkKGRhdGEuZ2V0WGlkKCkpOworICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZCdW5kbGVBZGRNc2dWZXIxNC5CdWlsZGVyX3NldERhdGEuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZCdW5kbGVBZGRNc2dWZXIxNC5CdWlsZGVyX3NldERhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg0MTVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkJ1bmRsZUFkZE1zZ1ZlcjE0LkJ1aWxkZXJfc2V0RGF0YS5qYXZhCkBAIC0wLDAgKzEgQEAKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GQnVuZGxlQWRkTXNnLkJ1aWxkZXJfc2V0RGF0YS5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dEZWxldGVTdHJpY3RWZXIxMy5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGphdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlU3RyaWN0VmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKcmVuYW1lIHRvIGphdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCmluZGV4IGNlNzE5ODEuLmQ0ZWQyNDIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlU3RyaWN0VmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTE2LDQgKzE2LDQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTc3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxLDkgQEAKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyAke21zZy5pbnRlcmZhY2UubmFtZX0uQnVpbGRlciBzZXRBY3Rpb25zKExpc3Q8T0ZBY3Rpb24+IGFjdGlvbnMpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnNWZXIke3ZlcnNpb24uZG90bGVzc192ZXJzaW9ufS5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9uc1ZlciR7dmVyc2lvbi5kb3RsZXNzX3ZlcnNpb259LkJ1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5zZXRBY3Rpb25zKGFjdGlvbnMpOworICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKE9GSW5zdHJ1Y3Rpb24pYnVpbGRlci5idWlsZCgpKTsKKyAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnNTZXQgPSB0cnVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjExLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODUyZmFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjExLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTExOGEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjExX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTFfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNmY5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjExX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGRfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMi5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTIuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1MmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTIuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMi5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTIuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxMThhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTIuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMl9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjEyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZmOTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkX2dldEFjdGlvbnMuamF2YSIsIG1zZz1tc2csIHZlcnNpb249dmVyc2lvbiwgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjEzLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCmluZGV4IGNlNzE5ODEuLjg4NTJmYWQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMy5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMSwxOSArMSBAQAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8T0ZBY3Rpb24+IGdldEFjdGlvbnMoKXRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0vLzo6IGlmIGJ1aWxkZXI6Ci0gICAgICAgIGlmICghdGhpcy5pbnN0cnVjdGlvbnNTZXQpCi0vLzo6IGlmIGhhc19wYXJlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyZW50TWVzc2FnZS5nZXRBY3Rpb25zKCk7Ci0vLzo6IGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0vLzo6ICNlbmRpZgotLy86OiAjZW5kaWYKLSAgICAgICAgZm9yIChPRkluc3RydWN0aW9uIGluc3QgOiB0aGlzLmluc3RydWN0aW9ucykgewotICAgICAgICAgICAgaWYgKGluc3QgaW5zdGFuY2VvZiBPRkluc3RydWN0aW9uQXBwbHlBY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucyBpYXAgPSAoT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucylpbnN0OwotICAgICAgICAgICAgICAgIHJldHVybiBpYXAuZ2V0QWN0aW9ucygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMy5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKaW5kZXggNzI1ZGUyNC4uODkxMThhMCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxMy5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjEzLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCkBAIC0xLDkgKzEgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPRkZsb3dBZGQuQnVpbGRlciBzZXRBY3Rpb25zKExpc3Q8T0ZBY3Rpb24+IGFjdGlvbnMpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnNWZXIxMy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9uc1ZlcjEzLkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5zZXRBY3Rpb25zKGFjdGlvbnMpOwotICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKE9GSW5zdHJ1Y3Rpb24pYnVpbGRlci5idWlsZCgpKTsKLSAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnNTZXQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxM19nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjEzX2dldEFjdGlvbnMuamF2YQppbmRleCBlYjc3OTlhLi43YTZmOTFmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjEzX2dldEFjdGlvbnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjEzX2dldEFjdGlvbnMuamF2YQpAQCAtMSwxMSArMSBAQAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8T0ZBY3Rpb24+IGdldEFjdGlvbnMoKXRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZvciAoT0ZJbnN0cnVjdGlvbiBpbnN0IDogdGhpcy5pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChpbnN0IGluc3RhbmNlb2YgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucykgewotICAgICAgICAgICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMgaWFwID0gKE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMpaW5zdDsKLSAgICAgICAgICAgICAgICByZXR1cm4gaWFwLmdldEFjdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GRmxvd0FkZF9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjE0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODUyZmFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjE0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTExOGEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjE0X2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTRfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNmY5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjE0X2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGRfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTUuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1MmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTUuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTUuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxMThhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93QWRkVmVyMTUuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNV9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZFZlcjE1X2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZmOTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRWZXIxNV9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93QWRkX2dldEFjdGlvbnMuamF2YSIsIG1zZz1tc2csIHZlcnNpb249dmVyc2lvbiwgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlU3RyaWN0VmVyMTNfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRfZ2V0QWN0aW9ucy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGphdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlU3RyaWN0VmVyMTNfZ2V0QWN0aW9ucy5qYXZhCnJlbmFtZSB0byBqYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0FkZF9nZXRBY3Rpb25zLmphdmEKaW5kZXggZWI3Nzk5YS4uYzEyOGE2OCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dEZWxldGVTdHJpY3RWZXIxM19nZXRBY3Rpb25zLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dBZGRfZ2V0QWN0aW9ucy5qYXZhCkBAIC04LDQgKzgsNCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlU3RyaWN0VmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0RlbGV0ZVN0cmljdFZlcjEzLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmRhZmU1Li4wMDAwMDAwCi0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlU3RyaWN0VmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPRkZsb3dEZWxldGVTdHJpY3QuQnVpbGRlciBzZXRBY3Rpb25zKExpc3Q8T0ZBY3Rpb24+IGFjdGlvbnMpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnNWZXIxMy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9uc1ZlcjEzLkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5zZXRBY3Rpb25zKGFjdGlvbnMpOwotICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKE9GSW5zdHJ1Y3Rpb24pYnVpbGRlci5idWlsZCgpKTsKLSAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnNTZXQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dEZWxldGVWZXIxMy5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlVmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzE5ODEuLjAwMDAwMDAKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dEZWxldGVWZXIxMy5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PE9GQWN0aW9uPiBnZXRBY3Rpb25zKCl0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gewotLy86OiBpZiBidWlsZGVyOgotICAgICAgICBpZiAoIXRoaXMuaW5zdHJ1Y3Rpb25zU2V0KQotLy86OiBpZiBoYXNfcGFyZW50OgotICAgICAgICAgICAgcmV0dXJuIHBhcmVudE1lc3NhZ2UuZ2V0QWN0aW9ucygpOwotLy86OiBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotLy86OiAjZW5kaWYKLS8vOjogI2VuZGlmCi0gICAgICAgIGZvciAoT0ZJbnN0cnVjdGlvbiBpbnN0IDogdGhpcy5pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChpbnN0IGluc3RhbmNlb2YgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucykgewotICAgICAgICAgICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMgaWFwID0gKE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMpaW5zdDsKLSAgICAgICAgICAgICAgICByZXR1cm4gaWFwLmdldEFjdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlVmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0RlbGV0ZVZlcjEzLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTc2YWFhLi4wMDAwMDAwCi0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93RGVsZXRlVmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPRkZsb3dEZWxldGUuQnVpbGRlciBzZXRBY3Rpb25zKExpc3Q8T0ZBY3Rpb24+IGFjdGlvbnMpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnNWZXIxMy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9uc1ZlcjEzLkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5zZXRBY3Rpb25zKGFjdGlvbnMpOwotICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKE9GSW5zdHJ1Y3Rpb24pYnVpbGRlci5idWlsZCgpKTsKLSAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnNTZXQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dEZWxldGVWZXIxM19nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0RlbGV0ZVZlcjEzX2dldEFjdGlvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3Nzk5YS4uMDAwMDAwMAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd0RlbGV0ZVZlcjEzX2dldEFjdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PE9GQWN0aW9uPiBnZXRBY3Rpb25zKCl0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gewotICAgICAgICBmb3IgKE9GSW5zdHJ1Y3Rpb24gaW5zdCA6IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7Ci0gICAgICAgICAgICBpZiAoaW5zdCBpbnN0YW5jZW9mIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBPRkluc3RydWN0aW9uQXBwbHlBY3Rpb25zIGlhcCA9IChPRkluc3RydWN0aW9uQXBwbHlBY3Rpb25zKWluc3Q7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlhcC5nZXRBY3Rpb25zKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTJmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTJmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dBZGQuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjExLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzY1ODFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3QuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjExLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWYxOThhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3QuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjExX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTFfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWJkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjExX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMi5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTIuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2NTgxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTIuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMi5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTIuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmMTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTIuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMl9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjEyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODFiZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0X2dldEFjdGlvbnMuamF2YSIsIG1zZz1tc2csIHZlcnNpb249dmVyc2lvbiwgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjEzLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCmluZGV4IGNlNzE5ODEuLjBjNjU4MWEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMy5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMSwxOSArMSBAQAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8T0ZBY3Rpb24+IGdldEFjdGlvbnMoKXRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0vLzo6IGlmIGJ1aWxkZXI6Ci0gICAgICAgIGlmICghdGhpcy5pbnN0cnVjdGlvbnNTZXQpCi0vLzo6IGlmIGhhc19wYXJlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyZW50TWVzc2FnZS5nZXRBY3Rpb25zKCk7Ci0vLzo6IGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0vLzo6ICNlbmRpZgotLy86OiAjZW5kaWYKLSAgICAgICAgZm9yIChPRkluc3RydWN0aW9uIGluc3QgOiB0aGlzLmluc3RydWN0aW9ucykgewotICAgICAgICAgICAgaWYgKGluc3QgaW5zdGFuY2VvZiBPRkluc3RydWN0aW9uQXBwbHlBY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucyBpYXAgPSAoT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucylpbnN0OwotICAgICAgICAgICAgICAgIHJldHVybiBpYXAuZ2V0QWN0aW9ucygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMy5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKaW5kZXggZmMwNDA3OS4uZTFmMTk4YSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxMy5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjEzLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCkBAIC0xLDkgKzEgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPRkZsb3dNb2RpZnlTdHJpY3QuQnVpbGRlciBzZXRBY3Rpb25zKExpc3Q8T0ZBY3Rpb24+IGFjdGlvbnMpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnNWZXIxMy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9uc1ZlcjEzLkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5zZXRBY3Rpb25zKGFjdGlvbnMpOwotICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKE9GSW5zdHJ1Y3Rpb24pYnVpbGRlci5idWlsZCgpKTsKLSAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnNTZXQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxM19nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjEzX2dldEFjdGlvbnMuamF2YQppbmRleCBlYjc3OTlhLi5hODFiZDE1IDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjEzX2dldEFjdGlvbnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjEzX2dldEFjdGlvbnMuamF2YQpAQCAtMSwxMSArMSBAQAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8T0ZBY3Rpb24+IGdldEFjdGlvbnMoKXRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZvciAoT0ZJbnN0cnVjdGlvbiBpbnN0IDogdGhpcy5pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChpbnN0IGluc3RhbmNlb2YgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucykgewotICAgICAgICAgICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMgaWFwID0gKE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMpaW5zdDsKLSAgICAgICAgICAgICAgICByZXR1cm4gaWFwLmdldEFjdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdF9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjE0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzY1ODFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3QuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjE0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWYxOThhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3QuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjE0X2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTRfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWJkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjE0X2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTUuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2NTgxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTUuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTUuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmMTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0VmVyMTUuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNV9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVN0cmljdFZlcjE1X2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODFiZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RWZXIxNV9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0X2dldEFjdGlvbnMuamF2YSIsIG1zZz1tc2csIHZlcnNpb249dmVyc2lvbiwgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0X2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5U3RyaWN0X2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZmOTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlTdHJpY3RfZ2V0QWN0aW9ucy5qYXZhCkBAIC0wLDAgKzEgQEAKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GRmxvd0FkZF9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjExLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWQzNWMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnkuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjExLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQyYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnkuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjExX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTFfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzI2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjExX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMi5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTIuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMzVjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTIuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMi5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTIuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MmExNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTIuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMl9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjEyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMyNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5X2dldEFjdGlvbnMuamF2YSIsIG1zZz1tc2csIHZlcnNpb249dmVyc2lvbiwgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjEzLkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhCmluZGV4IGNlNzE5ODEuLmRlZDM1YzIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTMuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMy5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMSwxOSArMSBAQAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8T0ZBY3Rpb24+IGdldEFjdGlvbnMoKXRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0vLzo6IGlmIGJ1aWxkZXI6Ci0gICAgICAgIGlmICghdGhpcy5pbnN0cnVjdGlvbnNTZXQpCi0vLzo6IGlmIGhhc19wYXJlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyZW50TWVzc2FnZS5nZXRBY3Rpb25zKCk7Ci0vLzo6IGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0vLzo6ICNlbmRpZgotLy86OiAjZW5kaWYKLSAgICAgICAgZm9yIChPRkluc3RydWN0aW9uIGluc3QgOiB0aGlzLmluc3RydWN0aW9ucykgewotICAgICAgICAgICAgaWYgKGluc3QgaW5zdGFuY2VvZiBPRkluc3RydWN0aW9uQXBwbHlBY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucyBpYXAgPSAoT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucylpbnN0OwotICAgICAgICAgICAgICAgIHJldHVybiBpYXAuZ2V0QWN0aW9ucygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMy5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTMuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKaW5kZXggNjk1Yjc3MS4uNDk0MmExNSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxMy5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjEzLkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhCkBAIC0xLDkgKzEgQEAKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPRkZsb3dNb2RpZnkuQnVpbGRlciBzZXRBY3Rpb25zKExpc3Q8T0ZBY3Rpb24+IGFjdGlvbnMpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnNWZXIxMy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9uc1ZlcjEzLkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5zZXRBY3Rpb25zKGFjdGlvbnMpOwotICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKE9GSW5zdHJ1Y3Rpb24pYnVpbGRlci5idWlsZCgpKTsKLSAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnNTZXQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxM19nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjEzX2dldEFjdGlvbnMuamF2YQppbmRleCBlYjc3OTlhLi4yNDMyNjY1IDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjEzX2dldEFjdGlvbnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjEzX2dldEFjdGlvbnMuamF2YQpAQCAtMSwxMSArMSBAQAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8T0ZBY3Rpb24+IGdldEFjdGlvbnMoKXRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZvciAoT0ZJbnN0cnVjdGlvbiBpbnN0IDogdGhpcy5pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChpbnN0IGluc3RhbmNlb2YgT0ZJbnN0cnVjdGlvbkFwcGx5QWN0aW9ucykgewotICAgICAgICAgICAgICAgIE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMgaWFwID0gKE9GSW5zdHJ1Y3Rpb25BcHBseUFjdGlvbnMpaW5zdDsKLSAgICAgICAgICAgICAgICByZXR1cm4gaWFwLmdldEFjdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GRmxvd01vZGlmeV9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjE0LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWQzNWMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNC5CdWlsZGVyX2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnkuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjE0LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQyYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNC5CdWlsZGVyX3NldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnkuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjE0X2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTRfZ2V0QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzI2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjE0X2dldEFjdGlvbnMuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRkZsb3dNb2RpZnlfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNS5CdWlsZGVyX2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTUuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMzVjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTUuQnVpbGRlcl9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfZ2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNS5CdWlsZGVyX3NldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTUuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MmExNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5VmVyMTUuQnVpbGRlcl9zZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5LkJ1aWxkZXJfc2V0QWN0aW9ucy5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNV9nZXRBY3Rpb25zLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GRmxvd01vZGlmeVZlcjE1X2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMyNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlWZXIxNV9nZXRBY3Rpb25zLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZGbG93TW9kaWZ5X2dldEFjdGlvbnMuamF2YSIsIG1zZz1tc2csIHZlcnNpb249dmVyc2lvbiwgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5X2dldEFjdGlvbnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZGbG93TW9kaWZ5X2dldEFjdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZmOTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkZsb3dNb2RpZnlfZ2V0QWN0aW9ucy5qYXZhCkBAIC0wLDAgKzEgQEAKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GRmxvd0FkZF9nZXRBY3Rpb25zLmphdmEiLCBtc2c9bXNnLCB2ZXJzaW9uPXZlcnNpb24sIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GR3JvdXBJbnNlcnRCdWNrZXRWZXIxNS5CdWlsZGVyLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GR3JvdXBJbnNlcnRCdWNrZXRWZXIxNS5CdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0YzQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZHcm91cEluc2VydEJ1Y2tldFZlcjE1LkJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACisKKyAgICBwdWJsaWMgTGlzdDxPRkJ1Y2tldD4gaW5zZXJ0QnVja2V0QmFzZWRPbkNvbW1hbmRCdWNrZXRJZChPRkJ1Y2tldCBidWNrZXQpIHsKKyAgICAgICAgaWYoY29tbWFuZEJ1Y2tldElkID09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21tYW5kQnVja2V0SWQgaXMgbnVsbCIpOworICAgICAgICBpZihjb21tYW5kQnVja2V0SWQuZXF1YWxzKE9GR3JvdXBCdWNrZXQuQlVDS0VUX0ZJUlNUKSkKKyAgICAgICAgICAgIGJ1Y2tldHMuYWRkKDAsIGJ1Y2tldCk7CisgICAgICAgIGVsc2UgaWYoY29tbWFuZEJ1Y2tldElkLmVxdWFscyhPRkdyb3VwQnVja2V0LkJVQ0tFVF9MQVNUKSkKKyAgICAgICAgICAgIGJ1Y2tldHMuYWRkKGJ1Y2tldHMuc2l6ZSgpLCBidWNrZXQpOworICAgICAgICByZXR1cm4gYnVja2V0czsKKyAgICB9CisKKworICAgIHB1YmxpYyBMaXN0PE9GQnVja2V0PiBpbnNlcnRCdWNrZXRCYXNlZE9uU3BlY2lmaWNJbmRleChPRkJ1Y2tldCBidWNrZXQsIGludCBpbmRleCkgeworICAgICAgICBpZihpbmRleCA8PSBidWNrZXRzLnNpemUoKSkKKyAgICAgICAgICAgIGJ1Y2tldHMuYWRkKGluZGV4LGJ1Y2tldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkluZGV4IGlzIG5vdCB2YWxpZCIpOworICAgICAgICByZXR1cm4gYnVja2V0czsKKyAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkdyb3VwUmVtb3ZlQnVja2V0VmVyMTUuQnVpbGRlci5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRkdyb3VwUmVtb3ZlQnVja2V0VmVyMTUuQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZWNhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GR3JvdXBSZW1vdmVCdWNrZXRWZXIxNS5CdWlsZGVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorCisgICAgcHVibGljIExpc3Q8T0ZCdWNrZXQ+IHJlbW92ZUJ1Y2tldEJhc2VkT25Db21tYW5kQnVja2V0SWQoKSB7CisgICAgICAgIGlmKGNvbW1hbmRCdWNrZXRJZCA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tbWFuZEJ1Y2tldElkIGlzIG51bGwiKTsKKyAgICAgICAgaWYoY29tbWFuZEJ1Y2tldElkLmVxdWFscyhPRkdyb3VwQnVja2V0LkJVQ0tFVF9GSVJTVCkpCisgICAgICAgICAgICBidWNrZXRzLnJlbW92ZSgwKTsKKyAgICAgICAgZWxzZSBpZihjb21tYW5kQnVja2V0SWQuZXF1YWxzKE9GR3JvdXBCdWNrZXQuQlVDS0VUX0xBU1QpKQorICAgICAgICAgICAgYnVja2V0cy5yZW1vdmUoYnVja2V0cy5zaXplKCktMSk7CisgICAgICAgIGVsc2UgaWYoY29tbWFuZEJ1Y2tldElkLmVxdWFscyhPRkdyb3VwQnVja2V0LkJVQ0tFVF9BTEwpKQorICAgICAgICAgICAgYnVja2V0cy5yZW1vdmVBbGwoYnVja2V0cyk7CisgICAgICAgIHJldHVybiBidWNrZXRzOworICAgIH0KKworCisgICAgcHVibGljIExpc3Q8T0ZCdWNrZXQ+IHJlbW92ZUJ1Y2tldEJhc2VkT25TcGVjaWZpY0luZGV4KGludCBpbmRleCkgeworICAgICAgICBpZihpbmRleCA8PSBidWNrZXRzLnNpemUoKSkKKyAgICAgICAgICAgIGJ1Y2tldHMucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSW5kZXggaXMgbm90IHZhbGlkIik7CisgICAgICAgIHJldHVybiBidWNrZXRzOworICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZNYXRjaFYxVmVyMTAuQnVpbGRlci5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjFWZXIxMC5CdWlsZGVyLmphdmEKaW5kZXggYzRjYjZiYy4uYjg3OTdmZSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjFWZXIxMC5CdWlsZGVyLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjFWZXIxMC5CdWlsZGVyLmphdmEKQEAgLTY0LDExICs2NCwxMSBAQAogICAgICAgICAgICAgICAgIGNhc2UgU0NUUF9EU1Q6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRjcERzdDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJQ01QVjRfVFlQRToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGNwU3JjOworICAgICAgICAgICAgICAgY2FzZSBJQ01QVjRfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSUNNUHY0VHlwZS5vZigoc2hvcnQpIHRjcFNyYy5nZXRQb3J0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElDTVBWNF9DT0RFOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0Y3BEc3Q7CisgICAgICAgICAgICAgICBjYXNlIElDTVBWNF9DT0RFOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJQ01QdjRDb2RlLm9mKChzaG9ydCkgdGNwRHN0LmdldFBvcnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIC8vIE5PVCBTVVBQT1JURUQ6CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZNYXRjaFYxVmVyMTAuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZNYXRjaFYxVmVyMTAuamF2YQppbmRleCA4YTI0YjJmLi5iYjU3NTk2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GTWF0Y2hWMVZlcjEwLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjFWZXIxMC5qYXZhCkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRjcERzdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSUNNUFY0X1RZUEU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGNwU3JjOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IElDTVB2NFR5cGUub2YoKHNob3J0KSB0Y3BTcmMuZ2V0UG9ydCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSUNNUFY0X0NPREU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGNwRHN0OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IElDTVB2NENvZGUub2YoKHNob3J0KSB0Y3BEc3QuZ2V0UG9ydCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIC8vIE5PVCBTVVBQT1JURUQ6CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzY1LDYgKzM2NSw4IEBACiAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGQoTWF0Y2hGaWVsZC5UQ1BfU1JDKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXBQcm90byA9PSBJcFByb3RvY29sLlNDVFApIHsKICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZChNYXRjaEZpZWxkLlNDVFBfU1JDKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXBQcm90byA9PSBJcFByb3RvY29sLklDTVApIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZChNYXRjaEZpZWxkLklDTVBWNF9UWVBFKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIElQIHByb3RvY29sIGZvciBtYXRjaGluZyBvbiBzb3VyY2UgcG9ydCAiICsgaXBQcm90byk7CkBAIC0zNzcsNiArMzc5LDggQEAKICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZChNYXRjaEZpZWxkLlRDUF9EU1QpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpcFByb3RvID09IElwUHJvdG9jb2wuU0NUUCkgewogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkKE1hdGNoRmllbGQuU0NUUF9EU1QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpcFByb3RvID09IElwUHJvdG9jb2wuSUNNUCkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkKE1hdGNoRmllbGQuSUNNUFY0X0NPREUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgSVAgcHJvdG9jb2wgZm9yIG1hdGNoaW5nIG9uIGRlc3RpbmF0aW9uIHBvcnQgIiArIGlwUHJvdG8pOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZNYXRjaFYzLmphdmEKaW5kZXggNzk5MTM1Yy4uYmM5N2NhMiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GTWF0Y2hWMy5qYXZhCkBAIC01OCw2ICs1OCw5IEBACiAgICAgICAgIGlmICghc3VwcG9ydHMoZmllbGQpKQogICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCIke21zZy5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IG1hdGNoaW5nIG9uIGZpZWxkICIgKyBmaWVsZC5nZXROYW1lKCkpOwogCisgICAgICAgIGlmKCFmaWVsZC5hcmVQcmVyZXF1aXNpdGVzT0sodGhpcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgT0ZPeG08Pz4gb3htID0gdGhpcy5veG1MaXN0LmdldChmaWVsZCk7CiAKICAgICAgICAgcmV0dXJuIG94bSAhPSBudWxsICYmICFveG0uaXNNYXNrZWQoKTsKQEAgLTY3LDYgKzcwLDggQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc0Z1bGx5V2lsZGNhcmRlZChNYXRjaEZpZWxkPD8+IGZpZWxkKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHMoZmllbGQpKQogICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCIke21zZy5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IG1hdGNoaW5nIG9uIGZpZWxkICIgKyBmaWVsZC5nZXROYW1lKCkpOworICAgICAgICBpZighZmllbGQuYXJlUHJlcmVxdWlzaXRlc09LKHRoaXMpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgT0ZPeG08Pz4gb3htID0gdGhpcy5veG1MaXN0LmdldChmaWVsZCk7CiAKQEAgLTc3LDYgKzgyLDggQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1BhcnRpYWxseU1hc2tlZChNYXRjaEZpZWxkPD8+IGZpZWxkKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHMoZmllbGQpKQogICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCIke21zZy5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IG1hdGNoaW5nIG9uIGZpZWxkICIgKyBmaWVsZC5nZXROYW1lKCkpOworICAgICAgICBpZighZmllbGQuYXJlUHJlcmVxdWlzaXRlc09LKHRoaXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIE9GT3htPD8+IG94bSA9IHRoaXMub3htTGlzdC5nZXQoZmllbGQpOwogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GTWF0Y2hWM1ZlcjE1LkJ1aWxkZXIuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZNYXRjaFYzVmVyMTUuQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmVjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GTWF0Y2hWM1ZlcjE1LkJ1aWxkZXIuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRk1hdGNoVjMuQnVpbGRlci5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjNWZXIxNS5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjNWZXIxNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWIwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GTWF0Y2hWM1ZlcjE1LmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZNYXRjaFYzLmphdmEiLCBtc2c9bXNnLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjNWZXIxNV90b1N0cmluZy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRk1hdGNoVjNWZXIxNV90b1N0cmluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjc4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GTWF0Y2hWM1ZlcjE1X3RvU3RyaW5nLmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZNYXRjaF90b1N0cmluZy5qYXZhIiwgbXNnPW1zZywgaGFzX3BhcmVudD1GYWxzZSkKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZPeHNfZ2V0Q2Fub25pY2FsLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GT3hzX2dldENhbm9uaWNhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTZmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GT3hzX2dldENhbm9uaWNhbC5qYXZhCkBAIC0wLDAgKzEgQEAKKy8vOjogaW5jbHVkZSgiY3VzdG9tL09GT3htX2dldENhbm9uaWNhbC5qYXZhIiwgbXNnPW1zZywgdmVyc2lvbj12ZXJzaW9uLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlBvcnREZXNjLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GUG9ydERlc2MuamF2YQppbmRleCBjY2ZiZWRiLi5hMmYwNWNmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GUG9ydERlc2MuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GUG9ydERlc2MuamF2YQpAQCAtMTMsNyArMTMsNyBAQAogICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBJRCBvZiB0aGlzIHBvcnQuCiAgICAgICoKICAgICAgKiBUaGUgZ2VuZXJhdGlvbklkIGlzIHJlcG9ydGVkIGJ5IHRoZSBzd2l0Y2ggYXMgYSBAe2xpbmsgT0ZQb3J0RGVzY1Byb3B9IGluCi0gICAgICogQGxpbmt7T0ZQb3J0RGVzY1N0YXRzUmVwbHl9IGFuZCBAbGlua3tPRlBvcnRTdGF0dXN9IG1lc3NhZ2VzLiBJZiB0aGUKKyAgICAgKiB7QGxpbmsgT0ZQb3J0RGVzY1N0YXRzUmVwbHl9IGFuZCB7QGxpbmsgT0ZQb3J0U3RhdHVzfSBtZXNzYWdlcy4gSWYgdGhlCiAgICAgICogY3VycmVudCBPRlBvcnREZXNjIGRvZXMgbm90IGNvbnRhaW4gYSBnZW5lcmF0aW9uIElkLCByZXR1cm5zIFU2NC5aRVJPOwogICAgICAqCiAgICAgICogRm9yIE9wZW5GbG93IHZlcnNpb25zIGVhcmxpZXIgdGhhbiAxLjQsIGFsd2F5cyByZXR1cm5zIFU2NC5aRVJPOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlBvcnREZXNjVmVyMTUuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZQb3J0RGVzY1ZlcjE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyYTcyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZQb3J0RGVzY1ZlcjE1LmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZQb3J0RGVzYy5qYXZhIiwgbXNnPW1zZywgaGFzX3BhcmVudD1GYWxzZSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GU3RhdFY2LkJ1aWxkZXIuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZTdGF0VjYuQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTkwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GU3RhdFY2LkJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDUwIEBACisgICAgcHJpdmF0ZSBPRk94c0xpc3QuQnVpbGRlciBveHNGaWVsZHNCdWlsZGVyOworCisgICAgcHJpdmF0ZSB2b2lkIGluaXRCdWlsZGVyKCkgeworICAgICAgICBpZiAob3hzRmllbGRzQnVpbGRlciAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBveHNGaWVsZHNCdWlsZGVyID0gbmV3IE9GT3hzTGlzdC5CdWlsZGVyKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU94c0xpc3QoKSB7CisgICAgICAgIHRoaXMub3hzRmllbGRzID0gdGhpcy5veHNGaWVsZHNCdWlsZGVyLmJ1aWxkKCk7CisgICAgICAgIHRoaXMub3hzRmllbGRzU2V0ID0gdHJ1ZTsKKyAgICB9CisKKworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IEYgZ2V0KFN0YXRGaWVsZDxGPiBmaWVsZCkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ueworICAgICAgICBpZiAoIXN1cHBvcnRzKGZpZWxkKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiJHttc2cubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBzdGF0aXN0aWNzIG9uIGZpZWxkICIgKyBmaWVsZC5nZXROYW1lKCkpOworCisgICAgICAgIE9GT3hzPEY+IG94cyA9IGdldE94cyhmaWVsZCk7CisKKyAgICAgICAgaWYgKG94cyA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgcmV0dXJuIG94cy5nZXRWYWx1ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBTdGF0LkJ1aWxkZXIgc2V0KFN0YXRGaWVsZDxGPiBmaWVsZCwgRiB2YWx1ZSkgeworICAgICAgICBpbml0QnVpbGRlcigpOworICAgICAgICBPRk94czxGPiBveHMgPSBPRkZhY3Rvcmllcy5nZXRGYWN0b3J5KE9GVmVyc2lvbi4ke3ZlcnNpb24uY29uc3RhbnRfdmVyc2lvbn0pLm94c3MoKS5mcm9tVmFsdWUodmFsdWUsIGZpZWxkKTsKKyAgICAgICAgdGhpcy5veHNGaWVsZHNCdWlsZGVyLnNldChveHMpOworICAgICAgICB1cGRhdGVPeHNMaXN0KCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHMoU3RhdEZpZWxkPD8+IGZpZWxkKXsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzRmllbGQoZmllbGQpOworICAgIH0KKworICAgIHByaXZhdGUgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gT0ZPeHM8Rj4gZ2V0T3hzKFN0YXRGaWVsZDxGPiBmaWVsZCkgeworLy86OiBpZiBoYXNfcGFyZW50OgorICAgICAgICByZXR1cm4gdGhpcy5veHNGaWVsZHNTZXQgPyB0aGlzLm94c0ZpZWxkcy5nZXQoZmllbGQpIDogcGFyZW50TWVzc2FnZS5veHNGaWVsZHMuZ2V0KGZpZWxkKTsKKy8vOjogZWxzZToKKyAgICAgICAgcmV0dXJuIHRoaXMub3hzRmllbGRzU2V0ID8gdGhpcy5veHNGaWVsZHMuZ2V0KGZpZWxkKSA6IG51bGw7CisvLzo6ICNlbmRpZgorICAgIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZTdGF0VjYuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vT0ZTdGF0VjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmIzOTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlN0YXRWNi5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKworLy86OiBmcm9tIGdlbmVyaWNfdXRpbHMgaW1wb3J0IE9yZGVyZWRTZXQKKy8vOjogZnJvbSBqYXZhX2dlbi5qYXZhX21vZGVsIGltcG9ydCBtb2RlbAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBGIGdldChTdGF0RmllbGQ8Rj4gZmllbGQpCisgICAgICAgICAgICB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICBpZiAoIXN1cHBvcnRzKGZpZWxkKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiJHttc2cubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBzdGF0aXN0aWNzIG9uIGZpZWxkICIgKyBmaWVsZC5nZXROYW1lKCkpOworCisgICAgICAgIE9GT3hzPEY+IG94cyA9IHRoaXMub3hzRmllbGRzLmdldChmaWVsZCk7CisKKyAgICAgICAgaWYgKG94cyA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgcmV0dXJuIG94cy5nZXRWYWx1ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJdGVyYWJsZTxTdGF0RmllbGQ8Pz4+IGdldFN0YXRGaWVsZHMoKSB7CisgICAgICAgIHJldHVybiBuZXcgSXRlcmFibGU8U3RhdEZpZWxkPD8+PigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBJdGVyYXRvcjxTdGF0RmllbGQ8Pz4+IGl0ZXJhdG9yKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhdEZpZWxkSXRlcmF0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0cyhTdGF0RmllbGQ8Pz4gZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzRmllbGQoZmllbGQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc3VwcG9ydHNGaWVsZChTdGF0RmllbGQ8Pz4gZmllbGQpIHsKKyAgICAgICAgc3dpdGNoIChmaWVsZC5pZCkgeworICAgICAgICAgICAgLy86OiBmb3IgaWRfY29uc3RhbnQgaW4gc29ydGVkKHNldChpZF9jb25zdGFudCBmb3IgXywgaWRfY29uc3RhbnQsIF8gaW4gbW9kZWwub3hzX21hcC52YWx1ZXMoKSkpOgorICAgICAgICAgICAgY2FzZSAke2lkX2NvbnN0YW50fToKKyAgICAgICAgICAgIC8vOjogI2VuZGZvcgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFN0YXRGaWVsZEl0ZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RJdGVyYXRvcjxTdGF0RmllbGQ8Pz4+IHsKKyAgICAgICAgcHJpdmF0ZSBJdGVyYXRvcjxPRk94czw/Pj4gb3hzSXRlcmF0b3I7CisKKyAgICAgICAgU3RhdEZpZWxkSXRlcmF0b3IoKSB7CisgICAgICAgICAgICBveHNJdGVyYXRvciA9IG94c0ZpZWxkcy5pdGVyYXRvcigpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBTdGF0RmllbGQ8Pz4gY29tcHV0ZU5leHQoKSB7CisgICAgICAgICAgICB3aGlsZShveHNJdGVyYXRvci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBPRk94czw/PiBveHMgPSBveHNJdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG94cy5nZXRTdGF0RmllbGQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZE9mRGF0YSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GU3RhdFY2VmVyMTUuQnVpbGRlci5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlN0YXRWNlZlcjE1LkJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q4ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlN0YXRWNlZlcjE1LkJ1aWxkZXIuamF2YQpAQCAtMCwwICsxIEBACisvLzo6IGluY2x1ZGUoImN1c3RvbS9PRlN0YXRWNi5CdWlsZGVyLmphdmEiLCBtc2c9bXNnLCBoYXNfcGFyZW50PUZhbHNlKQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlN0YXRWNlZlcjE1LmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL09GU3RhdFY2VmVyMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWNiOWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9PRlN0YXRWNlZlcjE1LmphdmEKQEAgLTAsMCArMSBAQAorLy86OiBpbmNsdWRlKCJjdXN0b20vT0ZTdGF0VjYuamF2YSIsIG1zZz1tc2csIGhhc19wYXJlbnQ9RmFsc2UpCmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL2ludGVyZmFjZS9PRk1lc3NhZ2UuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vaW50ZXJmYWNlL09GTWVzc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjNlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL2ludGVyZmFjZS9PRk1lc3NhZ2UuamF2YQpAQCAtMCwwICsxLDI4IEBACisgICAgCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhlIHR3byBtZXNzYWdlcyBmb3IgZXF1YWxpdHksIGlnbm9yaW5nIHRoZSBYSUQgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2JqIHRoZSBvdGhlciBtZXNzYWdlIHRvIGNvbXBhcmUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1lc3NhZ2VzIGFyZSBlcXVhbCwgaWdub3JpbmcgdGhlIFhJRDsgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbGVhbiBlcXVhbHNJZ25vcmVYaWQoT2JqZWN0IG9iaik7CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG1lc3NhZ2UsIGlnbm9yaW5nIHRoZSBYSUQgZmllbGQuCisgICAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGluIGhhc2hpbmcgT0ZNZXNzYWdlcyB3aGVyZSBhbiBPRk1lc3NhZ2UKKyAgICAgKiBpcyAidGhlIHNhbWUgYXMiIGFub3RoZXIgT0ZNZXNzYWdlIGlmIGFsbCBmaWVsZHMgYXJlIGVxdWFsCisgICAgICogZXhjZXB0IGZvciBwb3NzaWJseSB0aGUgWElEcywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgZXF1YWwuCisgICAgICoKKyAgICAgKiBUaGUgb2J2aW91cyBwcm9ibGVtIGlzIHRoYXQgZXhpc3RpbmcgaGFzaCBkYXRhIHN0cnVjdHVyZSAKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgd2lsbCB1c2UgT0ZNZXNzYWdlJ3MgaGFzaENvZGUoKSBmdW5jdGlvbiBpbnN0ZWFkLgorICAgICAqIEluIG9yZGVyIHRvIHVzZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBoYXNoQ29kZUlnbm9yZVhpZCgpLCBvbmUgCisgICAgICogbXVzdCB3cmFwIHRoZSBPRk1lc3NhZ2Ugd2l0aGluIGEgdXNlci1kZWZpbmVkIGNsYXNzLCB3aGVyZSB0aGlzIAorICAgICAqIHVzZXItZGVmaW5lZCBjbGFzcyBpcyB1c2VkIGFzIHRoZSBrZXkgd2l0aGluIGEgaGFzaCBkYXRhIHN0cnVjdHVyZSwgCisgICAgICogZS5nLiBIYXNoTWFwLiBUaGUgdXNlci1kZWZpbmVkIGNsYXNzJyBvdmVycmlkZWVuIGhhc2hDb2RlKCkgCisgICAgICogZnVuY3Rpb24gbXVzdCBleHBsaWNpdGx5IGludm9rZSBoYXNoQ29kZUlnbm9yZVhpZCgpIHdoZW4gY29tcHV0aW5nIAorICAgICAqIHRoZSBoYXNoIG9mIHRoZSBPRk1lc3NhZ2UgbWVtYmVyIGluc3RlYWQgb2YgY29tcHV0aW5nIGl0IHVzaW5nIAorICAgICAqIE9GTWVzc2FnZSdzIGhhc2hDb2RlKCkuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBoYXNoY29kZSBvZiB0aGUgbWVzc2FnZSwgaWdub3JpbmcgdGhlIFhJRAorICAgICAqLworICAgIGludCBoYXNoQ29kZUlnbm9yZVhpZCgpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9pbnRlcmZhY2UvT0ZQb3J0RGVzYy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL2N1c3RvbS9pbnRlcmZhY2UvT0ZQb3J0RGVzYy5qYXZhCmluZGV4IDI0NzQ2NGQuLjQ1ZTJkZmIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9jdXN0b20vaW50ZXJmYWNlL09GUG9ydERlc2MuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvY3VzdG9tL2ludGVyZmFjZS9PRlBvcnREZXNjLmphdmEKQEAgLTEyLDcgKzEyLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gSUQgb2YgdGhpcyBwb3J0LgogICAgICAqCiAgICAgICogVGhlIGdlbmVyYXRpb25JZCBpcyByZXBvcnRlZCBieSB0aGUgc3dpdGNoIGFzIGEgQHtsaW5rIE9GUG9ydERlc2NQcm9wfSBpbgotICAgICAqIEBsaW5re09GUG9ydERlc2NTdGF0c1JlcGx5fSBhbmQgQGxpbmt7T0ZQb3J0U3RhdHVzfSBtZXNzYWdlcy4gSWYgdGhlCisgICAgICoge0BsaW5rIE9GUG9ydERlc2NTdGF0c1JlcGx5fSBhbmQge0BsaW5rIE9GUG9ydFN0YXR1c30gbWVzc2FnZXMuIElmIHRoZQogICAgICAqIGN1cnJlbnQgT0ZQb3J0RGVzYyBkb2VzIG5vdCBjb250YWluIGEgZ2VuZXJhdGlvbiBJZCwgcmV0dXJucyBVNjQuWkVSTzsKICAgICAgKgogICAgICAqIEZvciBPcGVuRmxvdyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS40LCBhbHdheXMgcmV0dXJucyBVNjQuWkVSTzsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2NsYXNzLmphdmEKaW5kZXggMGIwMzJhYy4uZGNiMTVlOCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2NsYXNzLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2NsYXNzLmphdmEKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgIGZpbmFsIHN0YXRpYyBSZWFkZXIgUkVBREVSID0gbmV3IFJlYWRlcigpOwogICAgIHN0YXRpYyBjbGFzcyBSZWFkZXIgaW1wbGVtZW50cyBPRk1lc3NhZ2VSZWFkZXI8JHttc2cuaW50ZXJmYWNlLm5hbWV9PiB7CiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLm5hbWV9IHJlYWRGcm9tKENoYW5uZWxCdWZmZXIgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgICAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLm5hbWV9IHJlYWRGcm9tKEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgewogLy86OiBmb3IgcHJvcCBpbiBtc2cubWVtYmVyczoKIC8vOjogaWYgbm90IHByb3AuaXNfdmlydHVhbCBhbmQgKHByb3AuaXNfbGVuZ3RoX3ZhbHVlIG9yIHByb3AuaXNfZmllbGRfbGVuZ3RoX3ZhbHVlKToKICAgICAgICAgICAgIGludCBzdGFydCA9IGJiLnJlYWRlckluZGV4KCk7CkBAIC0zMDQsMTggKzMwNCwxOSBAQAogICAgIH0KIAogCi0gICAgcHVibGljIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGJiKSB7CiAgICAgICAgIFdSSVRFUi53cml0ZShiYiwgdGhpcyk7CiAgICAgfQogCiAgICAgZmluYWwgc3RhdGljIFdyaXRlciBXUklURVIgPSBuZXcgV3JpdGVyKCk7CiAgICAgc3RhdGljIGNsYXNzIFdyaXRlciBpbXBsZW1lbnRzIE9GTWVzc2FnZVdyaXRlcjwke2ltcGxfY2xhc3N9PiB7CiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZShDaGFubmVsQnVmZmVyIGJiLCAke2ltcGxfY2xhc3N9IG1lc3NhZ2UpIHsKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGUoQnl0ZUJ1ZiBiYiwgJHtpbXBsX2NsYXNzfSBtZXNzYWdlKSB7CiAvLzo6IGlmIG5vdCBtc2cuaXNfZml4ZWRfbGVuZ3RoOgogICAgICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBiYi53cml0ZXJJbmRleCgpOwogLy86OiAjZW5kaWYKIC8vOjogZmllbGRzX3dpdGhfbGVuZ3RoX21lbWJlciA9IHt9CisvLzo6IGhhc19sZW5ndGhfdmFsdWUgPSBGYWxzZQogLy86OiBmb3IgcHJvcCBpbiBtc2cubWVtYmVyczoKIC8vOjogaWYgcHJvcC5jX25hbWUgaW4gZmllbGRzX3dpdGhfbGVuZ3RoX21lbWJlcjoKICAgICAgICAgICAgIGludCAke3Byb3AubmFtZX1TdGFydEluZGV4ID0gYmIud3JpdGVySW5kZXgoKTsKQEAgLTMzMSw2ICszMzIsNyBAQAogICAgICAgICAgICAgLy8gZml4ZWQgdmFsdWUgcHJvcGVydHkgJHtwcm9wLm5hbWV9ID0gJHtwcm9wLnZhbHVlfQogICAgICAgICAgICAgJHtwcm9wLmphdmFfdHlwZS53cml0ZV9vcCh2ZXJzaW9uLCBwcm9wLnByaXZfdmFsdWUsIHB1Yl90eXBlPUZhbHNlKX07CiAvLzo6IGVsaWYgcHJvcC5pc19sZW5ndGhfdmFsdWU6CisvLzo6ICAgICBoYXNfbGVuZ3RoX3ZhbHVlID0gVHJ1ZQogICAgICAgICAgICAgLy8gJHtwcm9wLm5hbWV9IGlzIGxlbmd0aCBvZiB2YXJpYWJsZSBtZXNzYWdlLCB3aWxsIGJlIHVwZGF0ZWQgYXQgdGhlIGVuZAogLy86OiBpZiBub3QgbXNnLmlzX2ZpeGVkX2xlbmd0aDoKICAgICAgICAgICAgIGludCBsZW5ndGhJbmRleCA9IGJiLndyaXRlckluZGV4KCk7CkBAIC0zNTQsNyArMzU2LDcgQEAKIC8vOjogI2VuZGlmCiAvLzo6ICNlbmRmb3IKIAotLy86OiBpZiBub3QgbXNnLmlzX2ZpeGVkX2xlbmd0aDoKKy8vOjogaWYgbm90IG1zZy5pc19maXhlZF9sZW5ndGggYW5kIGhhc19sZW5ndGhfdmFsdWU6CiAgICAgICAgICAgICAvLyB1cGRhdGUgbGVuZ3RoIGZpZWxkCiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gYmIud3JpdGVySW5kZXgoKSAtIHN0YXJ0SW5kZXg7CiAgICAgICAgICAgICAvLzo6IGlmIG1zZy5hbGlnbjoKQEAgLTQxNyw2ICs0MTksNDAgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLy86OiBpZiBmaWx0ZXIobGFtYmRhIG06IG0ubmFtZSA9PSAneGlkJywgbXNnLmRhdGFfbWVtYmVycyk6CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlWGlkKE9iamVjdCBvYmopIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gb2JqKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vOjogaWYgbGVuKG1zZy5kYXRhX21lbWJlcnMpID4gMDoKKyAgICAgICAgJHttc2cubmFtZX0gb3RoZXIgPSAoJHttc2cubmFtZX0pIG9iajsKKyAgICAgICAgLy86OiAjZW5kaWYKKworICAgICAgICAvLzo6IGZvciBwcm9wIGluIG1zZy5kYXRhX21lbWJlcnM6CisgICAgICAgIC8vOjogaWYgcHJvcC5qYXZhX3R5cGUuaXNfcHJpbWl0aXZlIGFuZCBwcm9wLm5hbWUgPT0gJ3hpZCc6CisgICAgICAgIC8vIGlnbm9yZSBYSUQKKyAgICAgICAgLy86OiBlbGlmIHByb3AuamF2YV90eXBlLmlzX3ByaW1pdGl2ZToKKyAgICAgICAgaWYoICR7cHJvcC5uYW1lfSAhPSBvdGhlci4ke3Byb3AubmFtZX0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vOjogZWxpZiBwcm9wLmphdmFfdHlwZS5pc19hcnJheToKKyAgICAgICAgaWYgKCFBcnJheXMuZXF1YWxzKCR7cHJvcC5uYW1lfSwgb3RoZXIuJHtwcm9wLm5hbWV9KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vOjogZWxzZToKKyAgICAgICAgaWYgKCR7cHJvcC5uYW1lfSA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAob3RoZXIuJHtwcm9wLm5hbWV9ICE9IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKCEke3Byb3AubmFtZX0uZXF1YWxzKG90aGVyLiR7cHJvcC5uYW1lfSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vOjogI2VuZGlmCisgICAgICAgIC8vOjogI2VuZGZvcgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLzo6ICNlbmRpZgogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIC8vOjogaWYgbGVuKG1zZy5kYXRhX21lbWJlcnMpID4gMDoKQEAgLTQ0MCw0ICs0NzYsMzEgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvLzo6IGlmIGZpbHRlcihsYW1iZGEgbTogbS5uYW1lID09ICd4aWQnLCBtc2cuZGF0YV9tZW1iZXJzKToKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlSWdub3JlWGlkKCkgeworICAgICAgICAvLzo6IGlmIGxlbihtc2cuZGF0YV9tZW1iZXJzKSA+IDA6CisgICAgICAgIGZpbmFsIGludCBwcmltZSA9IDMxOworICAgICAgICAvLzo6ICNlbmRpZgorICAgICAgICBpbnQgcmVzdWx0ID0gMTsKKworICAgICAgICAvLzo6IGZvciBwcm9wIGluIG1zZy5kYXRhX21lbWJlcnM6CisgICAgICAgIC8vOjogaWYgcHJvcC5qYXZhX3R5cGUuaXNfcHJpbWl0aXZlIGFuZCBwcm9wLm5hbWUgPT0gJ3hpZCc6CisgICAgICAgIC8vIGlnbm9yZSBYSUQKKyAgICAgICAgLy86OiBlbGlmIHByb3AuamF2YV90eXBlLnB1Yl90eXBlID09ICdsb25nJzoKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiAgKGludCkgKCR7cHJvcC5uYW1lfSBeICgke3Byb3AubmFtZX0gPj4+IDMyKSk7CisgICAgICAgIC8vOjogZWxpZiBwcm9wLmphdmFfdHlwZS5wdWJfdHlwZSA9PSAnYm9vbGVhbic6CisgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKCR7cHJvcC5uYW1lfSA/IDEyMzEgOiAxMjM3KTsKKyAgICAgICAgLy86OiBlbGlmIHByb3AuamF2YV90eXBlLmlzX3ByaW1pdGl2ZToKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAke3Byb3AubmFtZX07CisgICAgICAgIC8vOjogZWxpZiBwcm9wLmphdmFfdHlwZS5pc19hcnJheToKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyBBcnJheXMuaGFzaENvZGUoJHtwcm9wLm5hbWV9KTsKKyAgICAgICAgLy86OiBlbHNlOgorICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICgoJHtwcm9wLm5hbWV9ID09IG51bGwpID8gMCA6ICR7cHJvcC5uYW1lfS5oYXNoQ29kZSgpKTsKKyAgICAgICAgLy86OiAjZW5kaWYKKyAgICAgICAgLy86OiAjZW5kZm9yCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy86OiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9mYWN0b3JpZXMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9mYWN0b3JpZXMuamF2YQppbmRleCBiYTczMjg2Li5mZmNhN2I0IDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfZmFjdG9yaWVzLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ZhY3Rvcmllcy5qYXZhCkBAIC01MCw4ICs1MCw4IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR2VuZXJpY1JlYWRlciBpbXBsZW1lbnRzIE9GTWVzc2FnZVJlYWRlcjxPRk1lc3NhZ2U+IHsKLSAgICAgICAgcHVibGljIE9GTWVzc2FnZSByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKLSAgICAgICAgICAgIGlmKCFiYi5yZWFkYWJsZSgpKQorICAgICAgICBwdWJsaWMgT0ZNZXNzYWdlIHJlYWRGcm9tKEJ5dGVCdWYgYmIpIHRocm93cyBPRlBhcnNlRXJyb3IgeworICAgICAgICAgICAgaWYoIWJiLmlzUmVhZGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIHNob3J0IHdpcmVWZXJzaW9uID0gVTguZihiYi5nZXRCeXRlKGJiLnJlYWRlckluZGV4KCkpKTsKICAgICAgICAgICAgIE9GRmFjdG9yeSBmYWN0b3J5OwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ZhY3RvcnlfY2xhc3MuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9mYWN0b3J5X2NsYXNzLmphdmEKaW5kZXggZWYyNmNhMC4uMmQzMjcwMyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ZhY3RvcnlfY2xhc3MuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfZmFjdG9yeV9jbGFzcy5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgLy86OiBpZiBpLmlzX3ZpcnR1YWw6CiAgICAgLy86OiAgICBjb250aW51ZQogICAgIC8vOjogI2VuZGlmCi0gICAgLy86OiBpc19tYXRjaF9vYmplY3QgPSByZS5tYXRjaCgnT0ZNYXRjaC4qJywgaS5uYW1lKSAjIGkuaGFzX3ZlcnNpb24oZmFjdG9yeS52ZXJzaW9uKSBhbmQgbW9kZWwuZ2VuZXJhdGVfY2xhc3MoaS52ZXJzaW9uZWRfY2xhc3MoZmFjdG9yeS52ZXJzaW9uKSkgYW5kIGkudmVyc2lvbmVkX2NsYXNzKGZhY3RvcnkudmVyc2lvbikuaW50ZXJmYWNlLnBhcmVudF9pbnRlcmZhY2UgPT0gJ01hdGNoJworICAgIC8vOjogaXNfbWF0Y2hfb2JqZWN0ID0gcmUubWF0Y2goJ09GTWF0Y2guKicsIGkubmFtZSkKICAgICAvLzo6IHVuc3VwcG9ydGVkX21hdGNoX29iamVjdCA9IGlzX21hdGNoX29iamVjdCBhbmQgbm90IGkuaGFzX3ZlcnNpb24oZmFjdG9yeS52ZXJzaW9uKQogCiAgICAgLy86OiBpZiBsZW4oaS53cml0ZWFibGVfbWVtYmVycykgPiAwOgpAQCAtMTA1LDcgKzEwNSwxMiBAQAogLy86OiAjZW5kaWYKICAgICB9CiAKLS8vOjogaWYgZmFjdG9yeS5pbnRlcmZhY2UubmFtZSA9PSAnT0ZPeG1zJzoKKy8vOjogaWYgZmFjdG9yeS5pbnRlcmZhY2UubmFtZSA9PSAiT0ZGYWN0b3J5IjoKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RhdC5CdWlsZGVyIGJ1aWxkU3RhdCgpIHsKKyAgICAgICAgICAgIHJldHVybiBidWlsZFN0YXRWNigpOworICAgIH0KKy8vOjogZWxpZiBmYWN0b3J5LmludGVyZmFjZS5uYW1lID09ICdPRk94bXMnOgogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBPRk94bTxGPiBmcm9tVmFsdWUoRiB2YWx1ZSwgTWF0Y2hGaWVsZDxGPiBmaWVsZCkgewogICAgICAgICBzd2l0Y2ggKGZpZWxkLmlkKSB7CkBAIC0xNjIsNiArMTY3LDIzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICB9CisvLzo6IGVsaWYgZmFjdG9yeS5pbnRlcmZhY2UubmFtZSA9PSAiT0ZPeHNzIjoKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gT0ZPeHM8Rj4gZnJvbVZhbHVlKEYgdmFsdWUsIFN0YXRGaWVsZDxGPiBmaWVsZCkgeworICAgICAgICBzd2l0Y2ggKGZpZWxkLmlkKSB7CisgICAgICAgICAgICAvLzo6IGZvciBveHNfbmFtZSBpbiBtb2RlbC5veHNfbWFwOgorICAgICAgICAgICAgLy86OiAgICB0eXBlX25hbWUsIHZhbHVlLCBtYXNrZWQgPSBtb2RlbC5veHNfbWFwW294c19uYW1lXQorICAgICAgICAgICAgLy86OiAgICBtZXRob2RfbmFtZSA9IG94c19uYW1lLnJlcGxhY2UoJ09GT3hzJywgJycpCisgICAgICAgICAgICAvLzo6ICAgIG1ldGhvZF9uYW1lID0gbWV0aG9kX25hbWVbMF0ubG93ZXIoKSArIG1ldGhvZF9uYW1lWzE6XQorICAgICAgICAgICAgY2FzZSAke3ZhbHVlfToKKyAgICAgICAgICAgICAgICAvLzo6ICMgVGhlIGNhc3QgdG8gT2JqZWN0IGlzIGRvbmUgdG8gYXZvaWQgc29tZSBqYXZhYyBidWcgdGhhdCBpbiBzb21lIHZlcnNpb25zIGNhbm5vdCBoYW5kbGUgY2FzdCBmcm9tIGdlbmVyaWMgdHlwZSB0byBvdGhlciB0eXBlcyBidXQgT2JqZWN0CisgICAgICAgICAgICAgICAgcmV0dXJuIChPRk94czxGPikoKE9iamVjdCkke21ldGhvZF9uYW1lfSgoJHt0eXBlX25hbWV9KSgoT2JqZWN0KXZhbHVlKSkpOworICAgICAgICAgICAgLy86OiAjZW5kZm9yCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vIE9YTSBrbm93biBmb3IgbWF0Y2ggZmllbGQgIiArIGZpZWxkKTsKKyAgICAgICAgfQorICAgIH0KKwogLy86OiAjZW5kaWYKIC8vOjogaWYgZmFjdG9yeS5pbnRlcmZhY2UueGlkX2dlbmVyYXRvcjoKICAgICBwdWJsaWMgbG9uZyBuZXh0WGlkKCkgewpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ZhY3RvcnlfaW50ZXJmYWNlLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfZmFjdG9yeV9pbnRlcmZhY2UuamF2YQppbmRleCAzNjk0NTMwLi43YWM5MjhkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfZmFjdG9yeV9pbnRlcmZhY2UuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfZmFjdG9yeV9pbnRlcmZhY2UuamF2YQpAQCAtNTUsNiArNTUsNyBAQAogLy86OiBpZiBmYWN0b3J5Lm5hbWUgPT0gJ09GRmFjdG9yeSc6CiAgICAgTWF0Y2guQnVpbGRlciBidWlsZE1hdGNoKCk7CiAgICAgTWF0Y2ggbWF0Y2hXaWxkY2FyZEFsbCgpOworICAgIFN0YXQuQnVpbGRlciBidWlsZFN0YXQoKTsKIC8vOjogI2VuZGlmCiAKICAgICBPRk1lc3NhZ2VSZWFkZXI8JHtmYWN0b3J5LmJhc2VfY2xhc3N9PiBnZXRSZWFkZXIoKTsKQEAgLTY1LDQgKzY2LDggQEAKICAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gT0ZPeG08Rj4gZnJvbVZhbHVlQW5kTWFzayhGIHZhbHVlLCBGIG1hc2ssIE1hdGNoRmllbGQ8Rj4gZmllbGQpOwogICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBPRk94bTxGPiBmcm9tTWFza2VkKE1hc2tlZDxGPiBtYXNrZWQsIE1hdGNoRmllbGQ8Rj4gZmllbGQpOwogLy86OiAjZW5kaWYKKy8vOjogaWYgZmFjdG9yeS5uYW1lID09ICdPRk94c3MnOgorCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IE9GT3hzPEY+IGZyb21WYWx1ZShGIHZhbHVlLCBTdGF0RmllbGQ8Rj4gZmllbGQpOworLy86OiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9pbnRlcmZhY2UuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9pbnRlcmZhY2UuamF2YQppbmRleCAxOGUyY2YxLi5jOTQwNTM0IDEwMDY0NAotLS0gYS9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfaW50ZXJmYWNlLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ludGVyZmFjZS5qYXZhCkBAIC00Myw5ICs0Myw4IEBACiAvLzo6IGlmIG9zLnBhdGguZXhpc3RzKCIlcy9jdXN0b20vaW50ZXJmYWNlLyVzLmphdmEiICUgKHRlbXBsYXRlX2RpciwgbXNnLm5hbWUpKToKIC8vOjogaW5jbHVkZSgiY3VzdG9tL2ludGVyZmFjZS8lcy5qYXZhIiAlIG1zZy5uYW1lLCBtc2c9bXNnKQogLy86OiAjZW5kaWYKLSAgICAKIAotICAgIHZvaWQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGNoYW5uZWxCdWZmZXIpOworICAgIHZvaWQgd3JpdGVUbyhCeXRlQnVmIGNoYW5uZWxCdWZmZXIpOwogCiAgICAgQnVpbGRlciR7bXNnLnR5cGVfdmFyaWFibGV9IGNyZWF0ZUJ1aWxkZXIoKTsKICAgICAvLzo6IHNpbXBsZV90eXBlLCBhbm5vdGF0aW9uID0gcmUubWF0Y2gocicoXHcrKSg8Lio+KT8nLCBtc2cucGFyZW50X2ludGVyZmFjZSkuZ3JvdXBzKCkgaWYgbXNnLnBhcmVudF9pbnRlcmZhY2UgZWxzZSAoIiIsICIiKQpAQCAtNTMsNyArNTIsNyBAQAogICAgICAgICAke21zZy5uYW1lfSR7bXNnLnR5cGVfdmFyaWFibGV9IGJ1aWxkKCk7CiAvLzo6IGZvciBwcm9wIGluIG1zZy5tZW1iZXJzOgogICAgICAgICAke3Byb3AuamF2YV90eXBlLnB1YmxpY190eXBlfSAke3Byb3AuZ2V0dGVyX25hbWV9KCkkeyAiIiBpZiBwcm9wLmlzX3VuaXZlcnNhbCBlbHNlICIgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIn07Ci0vLzo6IGlmIHByb3AuaXNfd3JpdGVhYmxlOgorLy86OiBpZiBwcm9wLm5lZWRzX3NldHRlcjoKICAgICAgICAgQnVpbGRlciR7bXNnLnR5cGVfdmFyaWFibGV9ICR7cHJvcC5zZXR0ZXJfbmFtZX0oJHtwcm9wLmphdmFfdHlwZS5wdWJsaWNfdHlwZX0gJHtwcm9wLm5hbWV9KSR7ICIiIGlmIHByb3AuaXNfdW5pdmVyc2FsIGVsc2UgIiB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24ifTsKIC8vOjogI2VuZGlmCiAvLzo6ICNlbmRmb3IKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl92aXJ0dWFsX2NsYXNzLmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfdmlydHVhbF9jbGFzcy5qYXZhCmluZGV4IDJjMzFjNzUuLmQ3ODU4MzggMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl92aXJ0dWFsX2NsYXNzLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX3ZpcnR1YWxfY2xhc3MuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgc3RhdGljIGNsYXNzIFJlYWRlciBpbXBsZW1lbnRzIE9GTWVzc2FnZVJlYWRlcjwke21zZy5pbnRlcmZhY2UuaW5oZXJpdGVkX2RlY2xhcmF0aW9uKCl9PiB7CiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLmluaGVyaXRlZF9kZWNsYXJhdGlvbigpfSByZWFkRnJvbShDaGFubmVsQnVmZmVyIGJiKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKKyAgICAgICAgcHVibGljICR7bXNnLmludGVyZmFjZS5pbmhlcml0ZWRfZGVjbGFyYXRpb24oKX0gcmVhZEZyb20oQnl0ZUJ1ZiBiYikgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAvLzo6IGlmIG1zZy5pc19maXhlZF9sZW5ndGg6CiAgICAgICAgICAgICBpZihiYi5yZWFkYWJsZUJ5dGVzKCkgPCBMRU5HVEgpCiAvLzo6IGVsc2U6CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvdW5pdF90ZXN0LmphdmEgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvdW5pdF90ZXN0LmphdmEKaW5kZXggY2YwMTQyOS4uYjkxMjdmZiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL3VuaXRfdGVzdC5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy91bml0X3Rlc3QuamF2YQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAvLzo6IGVsc2U6CiAgICAgICAgICR7dmFyX3R5cGV9ICR7dmFyX25hbWV9ID0gZmFjdG9yeS4ke2ZhY3RvcnlfbWV0aG9kfSgpOwogICAgICAgICAvLzo6ICNlbmRpZgotICAgICAgICBDaGFubmVsQnVmZmVyIGJiID0gQ2hhbm5lbEJ1ZmZlcnMuZHluYW1pY0J1ZmZlcigpOworICAgICAgICBCeXRlQnVmIGJiID0gVW5wb29sZWQuYnVmZmVyKCk7CiAgICAgICAgICR7dmFyX25hbWV9LndyaXRlVG8oYmIpOwogICAgICAgICBieXRlW10gd3JpdHRlbiA9IG5ldyBieXRlW2JiLnJlYWRhYmxlQnl0ZXMoKV07CiAgICAgICAgIGJiLnJlYWRCeXRlcyh3cml0dGVuKTsKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgJHt2YXJfdHlwZX0gJHt2YXJfbmFtZX1CdWlsdCA9IGZhY3RvcnkuJHtmYWN0b3J5X21ldGhvZH0oKTsKICAgICAgICAgLy86OiAjZW5kaWYKIAotICAgICAgICBDaGFubmVsQnVmZmVyIGlucHV0ID0gQ2hhbm5lbEJ1ZmZlcnMuY29waWVkQnVmZmVyKCR7bXNnLmNvbnN0YW50X25hbWV9X1NFUklBTElaRUQpOworICAgICAgICBCeXRlQnVmIGlucHV0ID0gVW5wb29sZWQuY29waWVkQnVmZmVyKCR7bXNnLmNvbnN0YW50X25hbWV9X1NFUklBTElaRUQpOwogCiAgICAgICAgIC8vIEZJWE1FIHNob3VsZCBpbnZva2UgdGhlIG92ZXJhbGwgcmVhZGVyIG9uY2UgaW1wbGVtZW50ZWQKICAgICAgICAgJHt2YXJfdHlwZX0gJHt2YXJfbmFtZX1SZWFkID0gJHttc2cubmFtZX0uUkVBREVSLnJlYWRGcm9tKGlucHV0KTsKQEAgLTEwMSwxNCArMTAxLDE0IEBACiAKICAgIEBUZXN0CiAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFdyaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgQ2hhbm5lbEJ1ZmZlciBpbnB1dCA9IENoYW5uZWxCdWZmZXJzLmNvcGllZEJ1ZmZlcigke21zZy5jb25zdGFudF9uYW1lfV9TRVJJQUxJWkVEKTsKKyAgICAgICBCeXRlQnVmIGlucHV0ID0gVW5wb29sZWQuY29waWVkQnVmZmVyKCR7bXNnLmNvbnN0YW50X25hbWV9X1NFUklBTElaRUQpOwogCiAgICAgICAgLy8gRklYTUUgc2hvdWxkIGludm9rZSB0aGUgb3ZlcmFsbCByZWFkZXIgb25jZSBpbXBsZW1lbnRlZAogICAgICAgICR7dmFyX3R5cGV9ICR7dmFyX25hbWV9ID0gJHttc2cubmFtZX0uUkVBREVSLnJlYWRGcm9tKGlucHV0KTsKICAgICAgICBhc3NlcnRFcXVhbHMoJHttc2cuY29uc3RhbnRfbmFtZX1fU0VSSUFMSVpFRC5sZW5ndGgsIGlucHV0LnJlYWRlckluZGV4KCkpOwogCiAgICAgICAgLy8gd3JpdGUgbWVzc2FnZSBhZ2FpbgotICAgICAgIENoYW5uZWxCdWZmZXIgYmIgPSBDaGFubmVsQnVmZmVycy5keW5hbWljQnVmZmVyKCk7CisgICAgICAgQnl0ZUJ1ZiBiYiA9IFVucG9vbGVkLmJ1ZmZlcigpOwogICAgICAgICR7dmFyX25hbWV9LndyaXRlVG8oYmIpOwogICAgICAgIGJ5dGVbXSB3cml0dGVuID0gbmV3IGJ5dGVbYmIucmVhZGFibGVCeXRlcygpXTsKICAgICAgICBiYi5yZWFkQnl0ZXMod3JpdHRlbik7CmRpZmYgLS1naXQgYS9sb3hpX2Zyb250X2VuZC9mcm9udGVuZC5weSBiL2xveGlfZnJvbnRfZW5kL2Zyb250ZW5kLnB5CmluZGV4IDdiOTZmZTMuLjU4NDA5ZDEgMTAwNjQ0Ci0tLSBhL2xveGlfZnJvbnRfZW5kL2Zyb250ZW5kLnB5CisrKyBiL2xveGlfZnJvbnRfZW5kL2Zyb250ZW5kLnB5CkBAIC01MSwxNiArNTEsMTQgQEAKICAgICBlbGlmIG1fYXN0WzBdID09ICdkYXRhJzoKICAgICAgICAgaWYgbV9hc3RbMl0gPT0gJ2xlbmd0aCcgb3IgbV9hc3RbMl0gPT0gJ2xlbic6ICMgU2hvdWxkIGJlIG1vdmVkIHRvIHBhcnNlcgogICAgICAgICAgICAgcmV0dXJuIGlyLk9GTGVuZ3RoTWVtYmVyKG5hbWU9bV9hc3RbMl0sIG9mdHlwZT1nZXRfdHlwZShtX2FzdFsxXSwgY3R4KSkKLSAgICAgICAgZWxpZiBtX2FzdFsyXSA9PSAnYWN0aW9uc19sZW4nOgotICAgICAgICAgICAgcmV0dXJuIGlyLk9GRmllbGRMZW5ndGhNZW1iZXIobmFtZT1tX2FzdFsyXSwgb2Z0eXBlPWdldF90eXBlKG1fYXN0WzFdLCBjdHgpLCBmaWVsZF9uYW1lPSdhY3Rpb25zJykKLSAgICAgICAgaWYgbV9hc3RbMl0gPT0gJ3ZlcnNpb24nOiAjIFNob3VsZCBiZSBtb3ZlZCB0byBwYXJzZXIKKyAgICAgICAgZWxpZiBtX2FzdFsyXSA9PSAndmVyc2lvbic6ICMgU2hvdWxkIGJlIG1vdmVkIHRvIHBhcnNlcgogICAgICAgICAgICAgcmV0dXJuIGlyLk9GVmVyc2lvbk1lbWJlcihuYW1lPW1fYXN0WzJdLCBvZnR5cGU9Z2V0X3R5cGUobV9hc3RbMV0sIGN0eCkpCi0gICAgICAgIGVsaWYgbV9hc3RbMl0gPT0gJ2tleV9sZW5ndGgnOgotICAgICAgICAgICAgcmV0dXJuIGlyLk9GRmllbGRMZW5ndGhNZW1iZXIobmFtZT1tX2FzdFsyXSwgb2Z0eXBlPWdldF90eXBlKG1fYXN0WzFdLCBjdHgpLCBmaWVsZF9uYW1lPSdrZXknKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGlyLk9GRGF0YU1lbWJlcihuYW1lPW1fYXN0WzJdLCBvZnR5cGU9Z2V0X3R5cGUobV9hc3RbMV0sIGN0eCkpCiAgICAgZWxpZiBtX2FzdFswXSA9PSAnZGlzY3JpbWluYXRvcic6CiAgICAgICAgIHJldHVybiBpci5PRkRpc2NyaW1pbmF0b3JNZW1iZXIobmFtZT1tX2FzdFsyXSwgb2Z0eXBlPWdldF90eXBlKG1fYXN0WzFdLCBjdHgpKQorICAgIGVsaWYgbV9hc3RbMF0gPT0gJ2ZpZWxkX2xlbmd0aCc6CisgICAgICAgIHJldHVybiBpci5PRkZpZWxkTGVuZ3RoTWVtYmVyKG5hbWU9bV9hc3RbMl0sIG9mdHlwZT1nZXRfdHlwZShtX2FzdFsxXSwgY3R4KSwgZmllbGRfbmFtZT1tX2FzdFszXSkKICAgICBlbHNlOgogICAgICAgICByYWlzZSBJbnB1dEVycm9yKCJEb250IGtub3cgaG93IHRvIGNyZWF0ZSBtZW1iZXI6ICVzIiAlIG1fYXN0WzBdKQogCmRpZmYgLS1naXQgYS9sb3hpX2Zyb250X2VuZC9wYXJzZXIucHkgYi9sb3hpX2Zyb250X2VuZC9wYXJzZXIucHkKaW5kZXggZmJmNDc2ZC4uZmNiZTAwNCAxMDA2NDQKLS0tIGEvbG94aV9mcm9udF9lbmQvcGFyc2VyLnB5CisrKyBiL2xveGlfZnJvbnRfZW5kL3BhcnNlci5weQpAQCAtNTMsNiArNTMsOCBAQAogIyBTdHJ1Y3RzCiBwYWRfbWVtYmVyID0gUC5Hcm91cChrdygncGFkJykgLSBzKCcoJykgLSBpbnRlZ2VyIC0gcygnKScpKQogZGlzY3JpbWluYXRvcl9tZW1iZXIgPSBQLkdyb3VwKHRhZygnZGlzY3JpbWluYXRvcicpICsgYW55X3R5cGUgKyBpZGVudGlmaWVyICsgcygnPT0nKSArIHMoJz8nKSkKK2ZpZWxkX2xlbmd0aF9tZW1iZXIgPSBQLkdyb3VwKHRhZygnZmllbGRfbGVuZ3RoJykgKyBhbnlfdHlwZSArIGlkZW50aWZpZXIgKyBcCisgICAgcygnPT0nKSArIHMoJ2xlbmd0aCcpICsgcygnKCcpICsgaWRlbnRpZmllciArIHMoJyknKSkKIHR5cGVfbWVtYmVyID0gUC5Hcm91cCh0YWcoJ3R5cGUnKSArIGFueV90eXBlICsgaWRlbnRpZmllciArIHMoJz09JykgKyBpbnRlZ2VyKQogZGF0YV9tZW1iZXIgPSBQLkdyb3VwKHRhZygnZGF0YScpICsgYW55X3R5cGUgLSBpZGVudGlmaWVyKQogCkBAIC02MSw3ICs2Myw3IEBACiBzdHJ1Y3RfcGFyYW1fbGlzdCA9IFAuRm9yd2FyZCgpCiBzdHJ1Y3RfcGFyYW1fbGlzdCA8PCBzdHJ1Y3RfcGFyYW0gKyBQLk9wdGlvbmFsKHMoJywnKSAtIFAuT3B0aW9uYWwoc3RydWN0X3BhcmFtX2xpc3QpKQogCi1zdHJ1Y3RfbWVtYmVyID0gcGFkX21lbWJlciB8IHR5cGVfbWVtYmVyIHwgZGlzY3JpbWluYXRvcl9tZW1iZXIgfCBkYXRhX21lbWJlcjsKK3N0cnVjdF9tZW1iZXIgPSBwYWRfbWVtYmVyIHwgdHlwZV9tZW1iZXIgfCBkaXNjcmltaW5hdG9yX21lbWJlciB8IGZpZWxkX2xlbmd0aF9tZW1iZXIgfCBkYXRhX21lbWJlcjsKIHBhcmVudCA9IChzKCc6JykgLSBpZGVudGlmaWVyKSB8IHRhZyhOb25lKQogc3RydWN0ID0ga3coJ3N0cnVjdCcpIC0gaWRlbnRpZmllciAtIFAuR3JvdXAoUC5PcHRpb25hbChzKCcoJykgLSBzdHJ1Y3RfcGFyYW1fbGlzdCAtIHMoJyknKSkpIC0gcGFyZW50IC0gcygneycpICsgXAogICAgICAgICAgUC5Hcm91cChQLlplcm9Pck1vcmUoc3RydWN0X21lbWJlciAtIHMoJzsnKSkpICsgXApkaWZmIC0tZ2l0IGEvbG94aV9nbG9iYWxzLnB5IGIvbG94aV9nbG9iYWxzLnB5CmluZGV4IGI0NjYyY2IuLjY3NzRhOGUgMTAwNjQ0Ci0tLSBhL2xveGlfZ2xvYmFscy5weQorKysgYi9sb3hpX2dsb2JhbHMucHkKQEAgLTM4LDYgKzM4LDcgQEAKICAgICBWRVJTSU9OXzFfMiA9IE9GVmVyc2lvbigiMS4yIiwgMykKICAgICBWRVJTSU9OXzFfMyA9IE9GVmVyc2lvbigiMS4zIiwgNCkKICAgICBWRVJTSU9OXzFfNCA9IE9GVmVyc2lvbigiMS40IiwgNSkKKyAgICBWRVJTSU9OXzFfNSA9IE9GVmVyc2lvbigiMS41IiwgNikKIAogICAgIGFsbF9zdXBwb3J0ZWQgPSAoCiAgICAgICAgIFZFUlNJT05fMV8wLApAQCAtNDUsNiArNDYsNyBAQAogICAgICAgICBWRVJTSU9OXzFfMiwKICAgICAgICAgVkVSU0lPTl8xXzMsCiAgICAgICAgIFZFUlNJT05fMV80LAorICAgICAgICBWRVJTSU9OXzFfNSwKICAgICApCiAKICAgICB3aXJlX3ZlcnNpb25fbWFwICAgPSB7IHYud2lyZV92ZXJzaW9uIDogdiBmb3IgdiBpbiBhbGxfc3VwcG9ydGVkIH0KZGlmZiAtLWdpdCBhL2xveGlfaXIvaXIucHkgYi9sb3hpX2lyL2lyLnB5CmluZGV4IDdiOWEwYjYuLjg0OTk3M2QgMTAwNjQ0Ci0tLSBhL2xveGlfaXIvaXIucHkKKysrIGIvbG94aV9pci9pci5weQpAQCAtMTYzLDYgKzE2MywxMCBAQAogICAgICAgICByZXR1cm4gc2VsZi5pc19pbnN0YW5jZW9mKCJvZl9veG0iKQogCiAgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX294cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfaW5zdGFuY2VvZigib2Zfb3hzIikKKworICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19hY3Rpb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmlzX2luc3RhbmNlb2YoIm9mX2FjdGlvbiIpCiAKZGlmZiAtLWdpdCBhL2xveGlfaXIvaXJfb2Zmc2V0LnB5IGIvbG94aV9pci9pcl9vZmZzZXQucHkKaW5kZXggYjFjZjc4NS4uYTQ3OWNjMyAxMDA2NDQKLS0tIGEvbG94aV9pci9pcl9vZmZzZXQucHkKKysrIGIvbG94aV9pci9pcl9vZmZzZXQucHkKQEAgLTI2LDcgKzI2LDggQEAKICAgICBPRl9FVEhfQUxFTiA9IDYsCiAgICAgT0ZfREVTQ19TVFJfTEVOICAgPSAyNTYsCiAgICAgT0ZfU0VSSUFMX05VTV9MRU4gPSAzMiwKLSAgICBPRl9BUFBfQ09ERV9MRU4gPSAxNSAJCisgICAgT0ZfQVBQX0NPREVfTEVOID0gMTUsIAkKKyAgICBPRl9DT05UUk9MTEVSX1VSSV9MRU4gPSAzMgogKQogCiAKQEAgLTM3LDYgKzM4LDcgQEAKICAgICAgICAgMzogInVpbnQzMl90IiwKICAgICAgICAgNDogInVpbnQzMl90IiwKICAgICAgICAgNTogInVpbnQzMl90IiwKKyAgICAgICAgNjogInVpbnQzMl90IiwKICAgICAgICAgInNob3J0X25hbWUiOiJwb3J0X25vIgogICAgICAgICB9LAogICAgIG9mX3BvcnRfZGVzY190ID0gewpAQCAtNDUsNiArNDcsNyBAQAogICAgICAgICAzOiAib2ZfcG9ydF9kZXNjX3QiLAogICAgICAgICA0OiAib2ZfcG9ydF9kZXNjX3QiLAogICAgICAgICA1OiAib2ZfcG9ydF9kZXNjX3QiLAorICAgICAgICA2OiAib2ZfcG9ydF9kZXNjX3QiLAogICAgICAgICAic2hvcnRfbmFtZSI6InBvcnRfZGVzYyIKICAgICAgICAgfSwKICAgICBvZl9ic25fdnBvcnRfdCA9IHsKQEAgLTUzLDYgKzU2LDcgQEAKICAgICAgICAgMzogIm9mX2Jzbl92cG9ydF90IiwKICAgICAgICAgNDogIm9mX2Jzbl92cG9ydF90IiwKICAgICAgICAgNTogIm9mX2Jzbl92cG9ydF90IiwKKyAgICAgICAgNjogIm9mX2Jzbl92cG9ydF90IiwKICAgICAgICAgInNob3J0X25hbWUiOiJic25fdnBvcnQiCiAgICAgICAgIH0sCiAgICAgb2ZfZm1fY21kX3QgPSB7ICMgRmxvdyBtb2QgY29tbWFuZCB3ZW50IGZyb20gdTE2IHRvIHU4CkBAIC02MSw2ICs2NSw3IEBACiAgICAgICAgIDM6ICJ1aW50OF90IiwKICAgICAgICAgNDogInVpbnQ4X3QiLAogICAgICAgICA1OiAidWludDhfdCIsCisgICAgICAgIDY6ICJ1aW50OF90IiwKICAgICAgICAgInNob3J0X25hbWUiOiJmbV9jbWQiCiAgICAgICAgIH0sCiAgICAgb2Zfd2NfYm1hcF90ID0geyAjIFdpbGRjYXJkIGJpdG1hcApAQCAtNjksNiArNzQsNyBAQAogICAgICAgICAzOiAidWludDY0X3QiLAogICAgICAgICA0OiAidWludDY0X3QiLAogICAgICAgICA1OiAidWludDY0X3QiLAorICAgICAgICA2OiAidWludDY0X3QiLAogICAgICAgICAic2hvcnRfbmFtZSI6IndjX2JtYXAiCiAgICAgICAgIH0sCiAgICAgb2ZfbWF0Y2hfYm1hcF90ID0geyAjIE1hdGNoIGJpdG1hcApAQCAtNzcsNiArODMsNyBAQAogICAgICAgICAzOiAidWludDY0X3QiLAogICAgICAgICA0OiAidWludDY0X3QiLAogICAgICAgICA1OiAidWludDY0X3QiLAorICAgICAgICA2OiAidWludDY0X3QiLAogICAgICAgICAic2hvcnRfbmFtZSI6Im1hdGNoX2JtYXAiCiAgICAgICAgIH0sCiAgICAgb2ZfbWF0Y2hfdCA9IHsgIyBNYXRjaCBvYmplY3QKQEAgLTg1LDggKzkyLDE3IEBACiAgICAgICAgIDM6ICJvZl9tYXRjaF92M190IiwKICAgICAgICAgNDogIm9mX21hdGNoX3YzX3QiLCAgIyBDdXJyZW50bHkgdXNlcyBzYW1lIG1hdGNoIGFzIDEuMiAodjMpLgogICAgICAgICA1OiAib2ZfbWF0Y2hfdjNfdCIsICAjIEN1cnJlbnRseSB1c2VzIHNhbWUgbWF0Y2ggYXMgMS4yICh2MykuCisgICAgICAgIDY6ICJvZl9tYXRjaF92M190IiwKICAgICAgICAgInNob3J0X25hbWUiOiJtYXRjaCIKICAgICAgICAgfSwKKyAgICBvZl9zdGF0X3QgPSB7ICNTdGF0aXN0aWNzIG9iamVjdAorICAgICAgICA2OiAib2Zfc3RhdF92Nl90IiwKKyAgICAgICAgInNob3J0X25hbWUiOiJzdGF0IgorICAgICAgICB9LAorICAgIG9mX3RpbWVfdCA9IHsgIyB0aW1lIG9iamVjdAorICAgICAgICA2OiAib2ZfdGltZV90IiwKKyAgICAgICAgInNob3J0X25hbWUiOiJ0aW1lIgorICAgICAgICB9CiApCiAKICMjIGJhc2ljIGxlbmd0aHMKQEAgLTEwMywxMiArMTE5LDE0IEBACiAgICAgb2ZfdGFibGVfbmFtZV90ID0gKG9mcF9jb25zdGFudHNbIk9GX01BWF9UQUJMRV9OQU1FX0xFTiJdLCBUcnVlKSwKICAgICBvZl9kZXNjX3N0cl90ID0gKG9mcF9jb25zdGFudHNbIk9GX0RFU0NfU1RSX0xFTiJdLCBUcnVlKSwKICAgICBvZl9zZXJpYWxfbnVtX3QgPSAob2ZwX2NvbnN0YW50c1siT0ZfU0VSSUFMX05VTV9MRU4iXSwgVHJ1ZSksCisgICAgb2ZfY29udHJvbGxlcl91cmlfdCA9IChvZnBfY29uc3RhbnRzWyJPRl9DT05UUk9MTEVSX1VSSV9MRU4iXSwgVHJ1ZSksCiAgICAgb2Zfc3RyNjRfdCA9ICg2NCwgVHJ1ZSksCiAgICAgb2Zfc3RyMzJfdCA9ICgzMiwgVHJ1ZSksCiAgICAgb2Zfc3RyNl90ID0gKDYsIFRydWUpLAogICAgIG9mX21hdGNoX3YxX3QgPSAoNDAsIFRydWUpLAogICAgIG9mX21hdGNoX3YyX3QgPSAoODgsIFRydWUpLAogICAgIG9mX21hdGNoX3YzX3QgPSAoOCwgRmFsc2UpLAorICAgIG9mX3N0YXRfdjZfdCA9ICg4LCBGYWxzZSksCiAgICAgb2Zfb2N0ZXRzX3QgPSAoMCwgRmFsc2UpLAogICAgIG9mX2JpdG1hcF8xMjhfdCA9ICgxNiwgVHJ1ZSksCiAgICAgb2ZfY2hlY2tzdW1fMTI4X3QgPSAoMTYsIFRydWUpLApAQCAtMTE4LDYgKzEzNiw3IEBACiAgICAgb2ZfYml0bWFwXzUxMl90ID0gKDY0LCBUcnVlKSwKICAgICBvZl9vZHVfc2lnX2lkX3QgPSAoMTYsIFRydWUpLAogICAgIG9mX29jaF9zaWdfaWRfdCA9ICg2LCBUcnVlKSwKKyAgICBvZl90aW1lX3QgPSAoMTYsIFRydWUpCiApCiAKIGRlZiB0eXBlX2RlY190b19jb3VudF9iYXNlKG1fdHlwZSk6CmRpZmYgLS1naXQgYS9sb3hpX3V0aWxzL2xveGlfdXRpbHMucHkgYi9sb3hpX3V0aWxzL2xveGlfdXRpbHMucHkKaW5kZXggYzg2YzUwMy4uYzczODJiYiAxMDA2NDQKLS0tIGEvbG94aV91dGlscy9sb3hpX3V0aWxzLnB5CisrKyBiL2xveGlfdXRpbHMvbG94aV91dGlscy5weQpAQCAtNTYsNiArNTYsOSBAQAogIyBPWE0KICMgICAgQW4gZXh0ZW5zaWJsZSBtYXRjaCBvYmplY3QKICMKKyMgT1hTCisjICAgIEV4dGVuc2libGUgU3RhdHMgT2JqZWN0CisjCiAjIE1lc3NhZ2UKICMgICAgQSB0b3AgbGV2ZWwgT3BlbkZsb3cgbWVzc2FnZQogIwpAQCAtODYsNiArODksMTIgQEAKICAgICAiIiIKICAgICByZXR1cm4gX3VuaWZpZWRfYnlfbmFtZShjbHMpLmlzX2luc3RhbmNlb2YoIm9mX294bSIpCiAKK2RlZiBjbGFzc19pc19veHMoY2xzKToKKyAgICAiIiIKKyAgICBSZXR1cm4gVHJ1ZSBpZiBjbHNfbmFtZSBpcyBhbiBPWFMgb2JqZWN0CisgICAgIiIiCisgICAgcmV0dXJuIF91bmlmaWVkX2J5X25hbWUoY2xzKS5pc19pbnN0YW5jZW9mKCJvZl9veHMiKQorCiBkZWYgY2xhc3NfaXNfYWN0aW9uKGNscyk6CiAgICAgIiIiCiAgICAgUmV0dXJuIFRydWUgaWYgY2xzX25hbWUgaXMgYW4gYWN0aW9uIG9iamVjdApkaWZmIC0tZ2l0IGEvbG94aWdlbi5weSBiL2xveGlnZW4ucHkKaW5kZXggZmNiMjc4OC4uNWVmNGQ1OSAxMDA3NTUKLS0tIGEvbG94aWdlbi5weQorKysgYi9sb3hpZ2VuLnB5CkBAIC0xMzcsNyArMTM3LDkgQEAKICAgICAgICAgb2ZpbnB1dCA9IHByb2Nlc3NfaW5wdXRfZmlsZShmaWxlbmFtZSkKIAogICAgICAgICBmb3Igd2lyZV92ZXJzaW9uIGluIG9maW5wdXQud2lyZV92ZXJzaW9uczoKLSAgICAgICAgICAgIG9maW5wdXRzX2J5X3ZlcnNpb25bd2lyZV92ZXJzaW9uXS5hcHBlbmQob2ZpbnB1dCkKKyAgICAgICAgICAgIHZlcnNpb24gPSBsb3hpX2dsb2JhbHMuT0ZWZXJzaW9ucy5mcm9tX3dpcmUod2lyZV92ZXJzaW9uKQorICAgICAgICAgICAgaWYgdmVyc2lvbiBpbiBsb3hpX2dsb2JhbHMuT0ZWZXJzaW9ucy50YXJnZXRfdmVyc2lvbnM6CisgICAgICAgICAgICAgICAgb2ZpbnB1dHNfYnlfdmVyc2lvblt3aXJlX3ZlcnNpb25dLmFwcGVuZChvZmlucHV0KQogICAgIHJldHVybiBvZmlucHV0c19ieV92ZXJzaW9uCiAKIGRlZiBidWlsZF9pcihvZmlucHV0c19ieV92ZXJzaW9uKToKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbi0xLjMgYi9vcGVuZmxvd19pbnB1dC9ic24tMS4zCmluZGV4IDVhZDQ4MGMuLjcyMGY5MzMgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbi0xLjMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuMwpAQCAtMjcsNiArMjcsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIEJTTiBleHRlbnNpb24gaW5zdHJ1Y3Rpb24KIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic24gOiBvZl9pbnN0cnVjdGlvbl9leHBlcmltZW50ZXIgewpAQCAtMzYsMyArMzcsMjkgQEAKICAgICB1aW50MzJfdCBzdWJ0eXBlID09ID87CiAgICAgcGFkKDQpOwogfTsKKworLy8gQlNOIGJhc2UgZXJyb3IgbWVzc2FnZQorc3RydWN0IG9mX2Jzbl9iYXNlX2Vycm9yIDogb2ZfZXhwZXJpbWVudGVyX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IHN1YnR5cGUgPT0gPzsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgb2ZfZGVzY19zdHJfdCBlcnJfbXNnOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvLyBCU04gZXJyb3IgbWVzc2FnZQorc3RydWN0IG9mX2Jzbl9lcnJvciA6IG9mX2Jzbl9iYXNlX2Vycm9yIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3Qgc3VidHlwZSA9PSAxOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICBvZl9kZXNjX3N0cl90IGVycl9tc2c7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic24tMS40IGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuNAppbmRleCBjNjRhNzBhLi41MjJkYzQ2IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic24tMS40CisrKyBiL29wZW5mbG93X2lucHV0L2Jzbi0xLjQKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNSwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gQ29weXJpZ2h0IDIwMTUtMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgogLy8KIC8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCiAvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgpAQCAtMjYsNiArMjYsNyBAQAogLy8gdW5kZXIgdGhlIEVQTC4KIAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfYnNuIDogb2ZfcG9ydF9kZXNjX3Byb3BfZXhwZXJpbWVudGVyIHsKICAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKQEAgLTMzLDMgKzM0LDEwIEBACiAgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OwogICAgIHVpbnQzMl90IGV4cF90eXBlID09ID87CiB9OworCitzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wX2JzbiA6IG9mX3F1ZXVlX2Rlc2NfcHJvcF9leHBlcmltZW50ZXIgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgdWludDMyX3QgZXhwX3R5cGUgPT0gPzsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic24tMS41IGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDM4ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuNQpAQCAtMCwwICsxLDQ0IEBACisvLyBDb3B5cmlnaHQgMjAxNSwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8KKy8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCisvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgorLy8KKy8vIExPWEkgRXhjZXB0aW9uCisvLworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heSBkaXN0cmlidXRlIGxpYnJhcmllcworLy8gZ2VuZXJhdGVkIGJ5IExveGlHZW4gKExveGlHZW4gTGlicmFyaWVzKSB1bmRlciB0aGUgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkCisvLyB0aGF0IGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIG5vdGljZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gYXJlIG5vdCBhbHRlcmVkIG9yIHJlbW92ZWQKKy8vIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKSBpbmNsdWRlZCBpbgorLy8gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueQorLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxMywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLiBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLworLy8gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IgTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluCisvLyBhIGNvcHkgb2YgdGhlIEVQTCBhdDoKKy8vCisvLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKy8vIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorLy8gRVBMIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworLy8gdW5kZXIgdGhlIEVQTC4KKworI3ZlcnNpb24gNgorCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcHJvcF9ic24gOiBvZl9xdWV1ZV9zdGF0c19wcm9wX2V4cGVyaW1lbnRlciB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICB1aW50MzJfdCBleHBfdHlwZSA9PSAwOyAvLyAwIGlzIHdyaXR0ZW4gZm9yIHRlc3QgLSBmaXggbWUgPworICAgIG9mX29jdGV0c190IGV4cGVyaW1lbnRlcl9kYXRhOworfTsKKworc3RydWN0IG9mX3JvbGVfcHJvcF9ic24gOiBvZl9yb2xlX3Byb3BfZXhwZXJpbWVudGVyIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OworICAgIHVpbnQzMl90IGV4cF90eXBlID09IDU1OyAvLyA1NSBpcyB0YWtlbiBmcm9tIGJzbl9yb2xlX3N0YXR1cyAtIGZpeCBtZSA/CisgICAgb2Zfb2N0ZXRzX3QgZXhwZXJpbWVudGVyX2RhdGE7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hY2wgYi9vcGVuZmxvd19pbnB1dC9ic25fYWNsCmluZGV4IGJjY2E4NDIuLmFhZDQ3OGYgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9hY2wKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2FjbApAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIEluc3RydWN0aW9ucyB0byBleHByZXNzIGNvbnRyb2wgZmxvdyBpbiBBQ0wgdGFibGVzCiAKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfaWRsZSBiL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfaWRsZQppbmRleCAxNmExNzgyLi4wMzBiYWRlIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fYXJwX2lkbGUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2FycF9pZGxlCkBAIC0zNiw2ICszNiw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX2Jzbl9hcnBfaWRsZSA6IG9mX2Jzbl9oZWFkZXIgewogICAgIHVpbnQ4X3QgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfb2ZmbG9hZCBiL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfb2ZmbG9hZAppbmRleCBmMTNmNmFjLi44NjRjMzhjIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fYXJwX29mZmxvYWQKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2FycF9vZmZsb2FkCkBAIC0zMSw2ICszMSw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX2luc3RydWN0aW9uX2Jzbl9hcnBfb2ZmbG9hZCA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hdXRvX25lZ290aWF0aW9uIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2F1dG9fbmVnb3RpYXRpb24KaW5kZXggNjgxMTZjZi4uMTE5ZDA0NyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2F1dG9fbmVnb3RpYXRpb24KKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2F1dG9fbmVnb3RpYXRpb24KQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2F1dG9fbmVnb3RpYXRpb24gOiBvZl9pbnN0cnVjdGlvbl9ic24gewogICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fYXV4X2N4bnMgYi9vcGVuZmxvd19pbnB1dC9ic25fYXV4X2N4bnMKaW5kZXggOGNlYWE3Mi4uNGMyZjk4ZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2F1eF9jeG5zCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9hdXhfY3hucwpAQCAtMjksNiArMjksNyBAQAogLy8KICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLy8gU2V0IHRoZSBudW1iZXIgb2YgZGVzaXJlZCBhdXggY29ubmVjdGlvbnMgbnVtX2F1eD0oMC0xNikgYWNjb21wYW55aW5nIHRoaXMgbWFpbiBjb25uZWN0aW9uCiAvLyBUaGlzIG1lc3NhZ2UgaXMgb25seSBhbGxvd2VkIG9uIHRoZSBtYWluIGNvbm5lY3Rpb24uIApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2NvbnRyb2xsZXJfY29ubmVjdGlvbnMgYi9vcGVuZmxvd19pbnB1dC9ic25fY29udHJvbGxlcl9jb25uZWN0aW9ucwppbmRleCA4NDVkM2I4Li44MzY5NTUxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fY29udHJvbGxlcl9jb25uZWN0aW9ucworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fY29udHJvbGxlcl9jb25uZWN0aW9ucwpAQCAtMzgsNiArMzgsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIGVudW0gb2ZwX2Jzbl9jb250cm9sbGVyX2Nvbm5lY3Rpb25fc3RhdGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKICAgICBPRlBfQlNOX0NPTlRST0xMRVJfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQgPSAwLApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2RlYnVnX2NvdW50ZXIgYi9vcGVuZmxvd19pbnB1dC9ic25fZGVidWdfY291bnRlcgppbmRleCA2YzI4Yjg3Li5iZWE2Y2Y4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZGVidWdfY291bnRlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZGVidWdfY291bnRlcgpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIFN3aXRjaGVzIGhhdmUgbWFueSBub24tZGF0YXBsYW5lIGNvdW50ZXJzIHRoYXQgYXJlIG1haW5seSB1c2VmdWwgZm9yCiAvLyBkZWJ1Z2dpbmcuIEFuIGV4YW1wbGUgaXMgdGhlIG51bWJlciBvZiBwYWNrZXQtaW5zIGRyb3BwZWQgZHVlIHRvCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZGhjcF9vZmZsb2FkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2RoY3Bfb2ZmbG9hZAppbmRleCA1MzUyNzU0Li41YTE0YTUxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZGhjcF9vZmZsb2FkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9kaGNwX29mZmxvYWQKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2RoY3Bfb2ZmbG9hZCA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX2wzIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfbDMKaW5kZXggMjlkOGFkMS4uMzg5ZmM2NSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfbDMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfbDMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2Rpc2FibGVfbDMgOiBvZl9pbnN0cnVjdGlvbl9ic24gewogICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZGlzYWJsZV9zcmNfbWFjX2NoZWNrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfc3JjX21hY19jaGVjawppbmRleCA2YjA5NWNhLi5jZmUxNWIxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZGlzYWJsZV9zcmNfbWFjX2NoZWNrCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX3NyY19tYWNfY2hlY2sKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2Rpc2FibGVfc3JjX21hY19jaGVjayA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX3ZsYW5fY291bnRlcnMgYi9vcGVuZmxvd19pbnB1dC9ic25fZGlzYWJsZV92bGFuX2NvdW50ZXJzCmluZGV4IGU1ODY5MTcuLjE1ZmJjYTIgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX3ZsYW5fY291bnRlcnMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfdmxhbl9jb3VudGVycwpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fZGlzYWJsZV92bGFuX2NvdW50ZXJzIDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Vncl9wb3J0X2dyb3VwX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Vncl9wb3J0X2dyb3VwX2lkCmluZGV4IDNiYTU0NjIuLjczYzZiZTYgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9lZ3JfcG9ydF9ncm91cF9pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZWdyX3BvcnRfZ3JvdXBfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEVncmVzcyBwb3J0IGdyb3VwIElEIGZvciBTd2l0Y2hMaWdodApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Zsb3dfY2hlY2tzdW0gYi9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19jaGVja3N1bQppbmRleCAzNWI2NThmLi5jNGY5NDg4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19jaGVja3N1bQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19jaGVja3N1bQpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIFJldHJpZXZlcyB0aGUgY2hlY2tzdW0gZm9yIGV2ZXJ5IGJ1Y2tldCBpbiBhIHRhYmxlLiBUaGUgZW50cmllcyBhcmUgb3JkZXJlZAogLy8gYnkgYnVja2V0IGluZGV4LgpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Zsb3dfaWRsZSBiL29wZW5mbG93X2lucHV0L2Jzbl9mbG93X2lkbGUKaW5kZXggZTAxMzllMi4uNmM2ZjNhOCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Zsb3dfaWRsZQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19pZGxlCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIE5vdGlmaWNhdGlvbiBvZiBpZGxlIGZsb3dzCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZm9yd2FyZF9lcnJvcl9jb3JyZWN0aW9uIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjkxNzMyCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbgpAQCAtMCwwICsxLDM4IEBACisvLyBDb3B5cmlnaHQgMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8KKy8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCisvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgorLy8KKy8vIExPWEkgRXhjZXB0aW9uCisvLworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heSBkaXN0cmlidXRlIGxpYnJhcmllcworLy8gZ2VuZXJhdGVkIGJ5IExveGlHZW4gKExveGlHZW4gTGlicmFyaWVzKSB1bmRlciB0aGUgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkCisvLyB0aGF0IGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIG5vdGljZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gYXJlIG5vdCBhbHRlcmVkIG9yIHJlbW92ZWQKKy8vIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKSBpbmNsdWRlZCBpbgorLy8gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueQorLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxMywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLiBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLworLy8gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IgTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluCisvLyBhIGNvcHkgb2YgdGhlIEVQTCBhdDoKKy8vCisvLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKy8vIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorLy8gRVBMIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworLy8gdW5kZXIgdGhlIEVQTC4KKworI3ZlcnNpb24gNQorI3ZlcnNpb24gNgorCitzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbiA6IG9mX3BvcnRfZGVzY19wcm9wX2JzbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICB1aW50MzJfdCBleHBfdHlwZSA9PSAyOworICAgIHVpbnQzMl90IGNvbmZpZ3VyZWQ7ICAgIC8qIG5vbi16ZXJvIGlmIEZFQyBpcyBjb25maWd1cmVkICovCisgICAgdWludDMyX3QgZW5hYmxlZDsgICAgICAgLyogbm9uLXplcm8gaWYgRkVDIGlzIGVuYWJsZWQgKi8KK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZ2VuZXJpY19hc3luYyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2FzeW5jCmluZGV4IDdkN2VlOTguLmIxNjMwNzkgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2FzeW5jCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2FzeW5jCkBAIC0yOSw2ICsyOSw3IEBACiAvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCiAKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLy8gVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgZmxleGliaWxpdHkgZm9yIGFzeW5jIG1lc3NhZ2VzIGxpa2UgZ2VudGFibGUKIC8vIGRvZXMgZm9yIHRhYmxlIHByb2dyYW1taW5nLgpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfY29tbWFuZCBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2NvbW1hbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwZjkzYgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2NvbW1hbmQKQEAgLTAsMCArMSw0NiBAQAorLy8gQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLAorLy8gdmVyc2lvbiAxLjAgKEVQTCksIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkKKy8vIGRpc3RyaWJ1dGUgbGlicmFyaWVzIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykKKy8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBjb3B5cmlnaHQgYW5kCisvLyBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpCisvLyBpbmNsdWRlZCBpbiB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlCisvLyBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbgorLy8gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNSwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yCisvLyBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKy8vIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorLy8gZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlCisvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworLy8gVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgZmxleGliaWxpdHkgZm9yIGNvbW1hbmQgbWVzc2FnZXMgbGlrZSBnZW50YWJsZQorLy8gZG9lcyBmb3IgdGFibGUgcHJvZ3JhbW1pbmcuCisKK3N0cnVjdCBvZl9ic25fZ2VuZXJpY19jb21tYW5kIDogb2ZfYnNuX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OworICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gNzE7CisgICAgb2Zfc3RyNjRfdCBuYW1lOworICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSB0bHZzOworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX3N0YXRzIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfc3RhdHMKaW5kZXggYjY3ZDhlMy4uYWQxOTVjZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfc3RhdHMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfc3RhdHMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBUaGlzIGV4dGVuc2lvbiBwcm92aWRlcyBmbGV4aWJpbGl0eSBmb3Igc3RhdHMgcmVxdWVzdHMgbGlrZSBnZW50YWJsZQogLy8gZG9lcyBmb3IgdGFibGUgcHJvZ3JhbW1pbmcuCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZ2VudGFibGUgYi9vcGVuZmxvd19pbnB1dC9ic25fZ2VudGFibGUKaW5kZXggNTU2YWUwYi4uZTA3NTNjMCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbnRhYmxlCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW50YWJsZQpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIFdlIGhhdmUgYSBudW1iZXIgb2Ygc3dpdGNoIGFnZW50cyB0aGF0IG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSB0aGUKIC8vIGNvbnRyb2xsZXIgYW5kIHJlcG9ydCBzdGF0cy4gU29tZSBvZiB0aGVtIHdpbGwgaGF2ZSBsYXJnZSB0YWJsZXMgKDEwMDArCkBAIC04Niw3ICs4Nyw3IEBACiAgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OwogICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gNDY7CiAgICAgdWludDE2X3QgdGFibGVfaWQ7Ci0gICAgdWludDE2X3Qga2V5X2xlbmd0aDsKKyAgICB1aW50MTZfdCBrZXlfbGVuZ3RoID09IGxlbmd0aChrZXkpOwogICAgIG9mX2NoZWNrc3VtXzEyOF90IGNoZWNrc3VtOwogICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSBrZXk7CiAgICAgbGlzdChvZl9ic25fdGx2X3QpIHZhbHVlOwpAQCAtMTgxLDcgKzE4Miw3IEBACiAKIHN0cnVjdCBvZl9ic25fZ2VudGFibGVfZW50cnlfZGVzY19zdGF0c19lbnRyeSB7CiAgICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQxNl90IGtleV9sZW5ndGg7CisgICAgdWludDE2X3Qga2V5X2xlbmd0aCA9PSBsZW5ndGgoa2V5KTsKICAgICBvZl9jaGVja3N1bV8xMjhfdCBjaGVja3N1bTsKICAgICBsaXN0KG9mX2Jzbl90bHZfdCkga2V5OwogICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSB2YWx1ZTsKQEAgLTIyNCw3ICsyMjUsNyBAQAogCiBzdHJ1Y3Qgb2ZfYnNuX2dlbnRhYmxlX2VudHJ5X3N0YXRzX2VudHJ5IHsKICAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDE2X3Qga2V5X2xlbmd0aDsKKyAgICB1aW50MTZfdCBrZXlfbGVuZ3RoID09IGxlbmd0aChrZXkpOwogICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSBrZXk7CiAgICAgbGlzdChvZl9ic25fdGx2X3QpIHN0YXRzOwogfTsKQEAgLTM2MiwzICszNjMsMjQgQEAKICAgICB1aW50MzJfdCB0YWJsZV9pZDsKICAgICBsaXN0KG9mX2Jzbl90bHZfdCkga2V5OwogfTsKKworZW51bSBvZl9ic25fZ2VudGFibGVfZXJyb3JfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRl9CU05fR0VOVEFCTEVfRVJST1JfVU5LTk9XTiA9IDAsCisgICAgT0ZfQlNOX0dFTlRBQkxFX0VSUk9SX1BBUkFNID0gMSwgIC8vIGludmFsaWQgcGFyYW1ldGVyCisgICAgT0ZfQlNOX0dFTlRBQkxFX0VSUk9SX1RBQkxFX0ZVTEwgPSAyLAorfTsKKworLy8gQlNOIGdlbnRhYmxlIGVycm9yIG1lc3NhZ2UKK3N0cnVjdCBvZl9ic25fZ2VudGFibGVfZXJyb3IgOiBvZl9ic25fYmFzZV9lcnJvciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IHN1YnR5cGUgPT0gMjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgZW51bSBvZl9ic25fZ2VudGFibGVfZXJyb3JfY29kZSBlcnJvcl9jb2RlOworICAgIHVpbnQxNl90IHRhYmxlX2lkOworICAgIG9mX2Rlc2Nfc3RyX3QgZXJyX21zZzsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9oYXNoX3NlbGVjdCBiL29wZW5mbG93X2lucHV0L2Jzbl9oYXNoX3NlbGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ5YWViCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2hhc2hfc2VsZWN0CkBAIC0wLDAgKzEsNDkgQEAKKy8vIENvcHlyaWdodCAyMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLworLy8gTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxLjAgKEVQTCksIHdpdGgKKy8vIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBleGNlcHRpb246CisvLworLy8gTE9YSSBFeGNlcHRpb24KKy8vCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSB0ZXJtcyBvZiB0aGUgRVBMLCB5b3UgbWF5IGRpc3RyaWJ1dGUgbGlicmFyaWVzCisvLyBnZW5lcmF0ZWQgYnkgTG94aUdlbiAoTG94aUdlbiBMaWJyYXJpZXMpIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQKKy8vIHRoYXQgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpIGluY2x1ZGVkIGluCisvLyB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIGZvcm0gYW5kIChpaSkgaW5jbHVkZWQgaW4gYW55CisvLyBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBmb3JtLgorLy8KKy8vIE5vdGljZTogIkNvcHlyaWdodCAyMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKKy8vCisvLyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIEVQTCBvciBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4KKy8vIGEgY29weSBvZiB0aGUgRVBMIGF0OgorLy8KKy8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorLy8gV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisvLyBFUEwgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisvLyB1bmRlciB0aGUgRVBMLgorLy8KKy8vIEFsc28gZGVyaXZlZCBmcm9tIHRoZSBPcGVuRmxvdyBoZWFkZXIgZmlsZXMgd2hpY2ggaGF2ZSB0aGVzZSBjb3B5cmlnaHRzOgorLy8gQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBUaGUgTGVsYW5kIFN0YW5mb3JkIEp1bmlvciBVbml2ZXJzaXR5CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIDIwMTIgT3BlbiBOZXR3b3JraW5nIEZvdW5kYXRpb24KKworI3ZlcnNpb24gNAorI3ZlcnNpb24gNQorI3ZlcnNpb24gNgorCisvLyBJbnN0cnVjdGlvbnMgdG8gZXhwcmVzcyBjb250cm9sIG9mIGhhc2ggc2VsZWN0aW9uIGluIEFDTCB0YWJsZXMKKworZW51bSBvZnBfYnNuX2hhc2hfc2VsZWN0X2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQX0JTTl9IQVNIX1NFTEVDVF9TUkNfSVAgPSAweDEsCisgICAgT0ZQX0JTTl9IQVNIX1NFTEVDVF9EU1RfSVAgPSAweDIsCit9OworCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2hhc2hfc2VsZWN0IDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgdWludDMyX3Qgc3VidHlwZSA9PSAxNTsKKyAgICBlbnVtIG9mcF9ic25faGFzaF9zZWxlY3RfZmxhZ3MgZmxhZ3M7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2ltYWdlIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2ltYWdlCmluZGV4IGZhZmU4ZDguLjAzY2RiMzQgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9pbWFnZQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25faW1hZ2UKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfYnNuX2ltYWdlX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX2Jzbl9zdGF0c19yZXF1ZXN0IHsKICAgICB1aW50OF90IHZlcnNpb247CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW5fcG9ydHMgYi9vcGVuZmxvd19pbnB1dC9ic25faW5fcG9ydHMKaW5kZXggYmI0YzAzMC4uMTMyZDZkNiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2luX3BvcnRzCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbl9wb3J0cwpAQCAtMzEsNiArMzEsNyBAQAogI3ZlcnNpb24gMwogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvKgogICogQml0bWFwIG9mIGlucHV0IHBvcnRzCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW5ncmVzc19wb3J0X2dyb3VwX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2luZ3Jlc3NfcG9ydF9ncm91cF9pZAppbmRleCA1ZTFhZDk3Li45ZDRlYWUzIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25faW5ncmVzc19wb3J0X2dyb3VwX2lkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbmdyZXNzX3BvcnRfZ3JvdXBfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEluZ3Jlc3MgcG9ydCBncm91cCBJRCBmb3IgU3dpdGNoTGlnaHQKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfZHN0IGIvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX2V0aF9kc3QKaW5kZXggZDNlOWZhOS4uYzZjZWM0YiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX2V0aF9kc3QKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX2V0aF9kc3QKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvKgogICogSW5uZXIgZXRoZXJuZXQgZGVzdGluYXRpb24gTUFDCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW5uZXJfZXRoX3NyYyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfc3JjCmluZGV4IDM2ZTBlMzUuLjM2MjQ0N2QgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfc3JjCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfc3JjCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIElubmVyIGV0aGVybmV0IHNvdXJjZSBNQUMKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl92bGFuX3ZpZCBiL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl92bGFuX3ZpZAppbmRleCA2ODA5MmEyLi43MDJmM2U5IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25faW5uZXJfdmxhbl92aWQKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX3ZsYW5fdmlkCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIElubmVyIFZMQU4gVklECmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW50ZXJuYWxfcHJpb3JpdHkgYi9vcGVuZmxvd19pbnB1dC9ic25faW50ZXJuYWxfcHJpb3JpdHkKaW5kZXggNTVkOTAzZC4uNjQ4Mjk5MiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2ludGVybmFsX3ByaW9yaXR5CisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbnRlcm5hbF9wcmlvcml0eQpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25faW50ZXJuYWxfcHJpb3JpdHkgOiBvZl9pbnN0cnVjdGlvbl9ic24gewogICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faXBfZnJhZ21lbnRhdGlvbiBiL29wZW5mbG93X2lucHV0L2Jzbl9pcF9mcmFnbWVudGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGNiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25faXBfZnJhZ21lbnRhdGlvbgpAQCAtMCwwICsxLDUwIEBACisvLyBDb3B5cmlnaHQgMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8KKy8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsCisvLyB2ZXJzaW9uIDEuMCAoRVBMKSwgd2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgorLy8KKy8vIExPWEkgRXhjZXB0aW9uCisvLworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heQorLy8gZGlzdHJpYnV0ZSBsaWJyYXJpZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gKExveGlHZW4gTGlicmFyaWVzKQorLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IGNvcHlyaWdodCBhbmQKKy8vIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisvLyBmcm9tIHRoZSBMb3hpR2VuIExpYnJhcmllcyBhbmQgdGhlIG5vdGljZSBwcm92aWRlZCBiZWxvdyBpcyAoaSkKKy8vIGluY2x1ZGVkIGluIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUKKy8vIGZvcm0gYW5kIChpaSkgaW5jbHVkZWQgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuCisvLyBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBmb3JtLgorLy8KKy8vIE5vdGljZTogIkNvcHlyaWdodCAyMDEzLCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLyBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLworLy8gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IKKy8vIExPWEkgRXhjZXB0aW9uLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVQTCBhdDoKKy8vCisvLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKy8vIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworLy8gSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyCisvLyBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgRVBMIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UKKy8vIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIEVQTC4KKworI3ZlcnNpb24gMworI3ZlcnNpb24gNAorI3ZlcnNpb24gNQorI3ZlcnNpb24gNgorCisvKgorICogSVAgZnJhZ21lbnRhdGlvbgorICovCisKK3N0cnVjdCBvZl9veG1fYnNuX2lwX2ZyYWdtZW50YXRpb24gOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4MDAwMzM0MDE7CisgICAgdWludDhfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veG1fYnNuX2lwX2ZyYWdtZW50YXRpb25fbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDAwMDMzNTAyOworICAgIHVpbnQ4X3QgdmFsdWU7CisgICAgdWludDhfdCB2YWx1ZV9tYXNrOworfTsKKwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wyX2NhY2hlX2hpdCBiL29wZW5mbG93X2lucHV0L2Jzbl9sMl9jYWNoZV9oaXQKaW5kZXggNjk0YmM2NS4uYzE3ODYxMSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wyX2NhY2hlX2hpdAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbDJfY2FjaGVfaGl0CkBAIC0zMCw2ICszMCw4IEBACiAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEwyIENhY2hlIEhpdApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wzX2ludGVyZmFjZV9jbGFzc19pZCBiL29wZW5mbG93X2lucHV0L2Jzbl9sM19pbnRlcmZhY2VfY2xhc3NfaWQKaW5kZXggZjE2ZDMzMy4uY2ZkMTdlZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wzX2ludGVyZmFjZV9jbGFzc19pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbDNfaW50ZXJmYWNlX2NsYXNzX2lkCkBAIC0zMSw2ICszMSw3IEBACiAjdmVyc2lvbiAzCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBMMyBpbnRlcmZhY2UgY2xhc3MgSUQgZm9yIFN3aXRjaExpZ2h0CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fbDNfc3JjX2NsYXNzX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2wzX3NyY19jbGFzc19pZAppbmRleCA3ZTI1NjllLi41ODZiYTM4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fbDNfc3JjX2NsYXNzX2lkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9sM19zcmNfY2xhc3NfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEwzIHNvdXJjZSBjbGFzcyBJRCBmb3IgU3dpdGNoTGlnaHQKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9sYWNwIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2xhY3AKaW5kZXggZWQzNmIwZC4uMjAxODQ4YyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2xhY3AKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2xhY3AKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBMQUNQIENvbnZlcmdlbmNlIFN0YXR1cyBzZXQgaW4gb2ZfYnNuX2xhY3BfY29udmVyZ2VuY2Vfbm90aWYgbWVzc2FnZQogZW51bSBvZl9ic25fbGFjcF9jb252ZXJnZW5jZV9zdGF0dXMod2lyZV90eXBlPXVpbnQ4X3QsIGNvbXBsZXRlPUZhbHNlKSB7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fbGFnX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2xhZ19pZAppbmRleCBkNDI4OTMzLi5mOWYyNWEyIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fbGFnX2lkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9sYWdfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEluZ3Jlc3MgTEFHIElEIGZvciBTd2l0Y2hMaWdodApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2xvZyBiL29wZW5mbG93X2lucHV0L2Jzbl9sb2cKaW5kZXggZTYzNmQ2ZS4uOWMzNjRmZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2xvZworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbG9nCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogZW51bSBvZnBfYnNuX2xvZ2xldmVsKHdpcmVfdHlwZT11aW50OF90KSB7CiAgICAgT0ZQX0JTTl9MT0dMRVZFTF9NU0cgPSAwLApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2x1YSBiL29wZW5mbG93X2lucHV0L2Jzbl9sdWEKaW5kZXggZDk0MTY2Ni4uYzg5ZWRmZCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2x1YQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbHVhCkBAIC0zOSw2ICszOSw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLy8gVXBsb2FkIGNodW5rcyBvZiBMdWEgY29kZSB0byB0aGUgc3dpdGNoCiAvLwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX25kcF9vZmZsb2FkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX25kcF9vZmZsb2FkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzIzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbmRwX29mZmxvYWQKQEAgLTAsMCArMSw0MiBAQAorLy8gQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEuMCAoRVBMKSwgd2l0aAorLy8gdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkgZGlzdHJpYnV0ZSBsaWJyYXJpZXMKKy8vIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykgdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZAorLy8gdGhhdCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisvLyBmcm9tIHRoZSBMb3hpR2VuIExpYnJhcmllcyBhbmQgdGhlIG5vdGljZSBwcm92aWRlZCBiZWxvdyBpcyAoaSkgaW5jbHVkZWQgaW4KKy8vIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUgZm9ybSBhbmQgKGlpKSBpbmNsdWRlZCBpbiBhbnkKKy8vIGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisvLworLy8gTm90aWNlOiAiQ29weXJpZ2h0IDIwMTMsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yIExPWEkgRXhjZXB0aW9uLiBZb3UgbWF5IG9idGFpbgorLy8gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisvLyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKy8vIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKy8vIHVuZGVyIHRoZSBFUEwuCisvLworLy8gQWxzbyBkZXJpdmVkIGZyb20gdGhlIE9wZW5GbG93IGhlYWRlciBmaWxlcyB3aGljaCBoYXZlIHRoZXNlIGNvcHlyaWdodHM6CisvLyBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIFRoZSBMZWxhbmQgU3RhbmZvcmQgSnVuaW9yIFVuaXZlcnNpdHkKKy8vIENvcHlyaWdodCAoYykgMjAxMSwgMjAxMiBPcGVuIE5ldHdvcmtpbmcgRm91bmRhdGlvbgorCisjdmVyc2lvbiA0CisjdmVyc2lvbiA1CisjdmVyc2lvbiA2CisKK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fbmRwX29mZmxvYWQgOiBvZl9pbnN0cnVjdGlvbl9ic24geworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICB1aW50MzJfdCBzdWJ0eXBlID09IDE0OworICAgIHBhZCg0KTsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fcGFja2V0X29mX2RlYXRoIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BhY2tldF9vZl9kZWF0aAppbmRleCBjMWFjMjhkLi4xOGQ4Yzc4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fcGFja2V0X29mX2RlYXRoCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9wYWNrZXRfb2ZfZGVhdGgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX3BhY2tldF9vZl9kZWF0aCA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9wa3Rpbl9mbGFnIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BrdGluX2ZsYWcKaW5kZXggYjIxNjE2YS4uN2FjZmE0YiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3BrdGluX2ZsYWcKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BrdGluX2ZsYWcKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gQ29weXJpZ2h0IDIwMTQtMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgogLy8KIC8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCiAvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgpAQCAtMTIsNyArMTIsNyBAQAogLy8gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueQogLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KIC8vCi0vLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNCwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLiBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNC0yMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKIC8vCiAvLyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIEVQTCBvciBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4KIC8vIGEgY29weSBvZiB0aGUgRVBMIGF0OgpAQCAtMjcsNiArMjcsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIEluIGEgcmVhbGlzdGljIHN3aXRjaCBwaXBlbGluZSB0aGVyZSBhcmUgbXVsdGlwbGUgcmVhc29ucyBhIGdpdmVuIHBhY2tldAogLy8gc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGNvbnRyb2xsZXIuIFRoZSBwYWNrZXQtaW4gcmVhc29uIGZpZWxkIGlzIG9ubHkgOCBiaXRzLApAQCAtNDcsNCArNDgsMTEgQEAKICAgICBPRlBfQlNOX1BLVElOX0ZMQUdfU0ZMT1cgPSAweDgwMCwKICAgICBPRlBfQlNOX1BLVElOX0ZMQUdfQVJQX0NBQ0hFID0gMHgxMDAwLAogICAgIE9GUF9CU05fUEtUSU5fRkxBR19BUlBfVEFSR0VUID0gMHgyMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19JR01QID0gMHg0MDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19QSU0gPSAweDgwMDAsCisgICAgT0ZQX0JTTl9QS1RJTl9GTEFHX1ZYTEFOX1NJUF9NSVNTID0gMHgxMDAwMCwKKyAgICBPRlBfQlNOX1BLVElOX0ZMQUdfTUNfUkVTRVJWRUQgPSAweDIwMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19BTkFMWVRJQ1MgPSAweDQwMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19JQ01QVjYgPSAweDgwMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19JTkdSRVNTX0FDTF9MT0NBTCA9IDB4MTAwMDAwLAogfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9wb3J0X2NvdW50ZXIgYi9vcGVuZmxvd19pbnB1dC9ic25fcG9ydF9jb3VudGVyCmluZGV4IDUxYTM2ZjguLjg4ZjYwZDMgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9wb3J0X2NvdW50ZXIKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BvcnRfY291bnRlcgpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIGVudW0gb2ZwX2Jzbl9wb3J0X2NvdW50ZXIod2lyZV90eXBlPXVpbnQ4X3QsIGNvbXBsZXRlPUZhbHNlLCBzdGFibGU9VHJ1ZSkgewogICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9CWVRFUyA9IDAsCkBAIC02MCw2ICs2MSwzNCBAQAogICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9PVkVSRkxPV19FUlJPUlMgPSAyNSwKICAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfVFhfQ0FSUklFUl9FUlJPUlMgPSAyNiwKICAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEFDS0VUU19CQURfVkxBTiA9IDI3LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9MSU5LX1VQID0gMjgsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX0xJTktfRE9XTiA9IDI5LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfQ09OVFJPTF9GUkFNRSA9IDMwLAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9UWF9QRkNfQ09OVFJPTF9GUkFNRSA9IDMxLAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfRlJBTUVfWE9OX1BSSU9SSVRZXzAgPSAzMiwKKyAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEZDX0ZSQU1FX1hPTl9QUklPUklUWV8xID0gMzMsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9YT05fUFJJT1JJVFlfMiA9IDM0LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfRlJBTUVfWE9OX1BSSU9SSVRZXzMgPSAzNSwKKyAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEZDX0ZSQU1FX1hPTl9QUklPUklUWV80ID0gMzYsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9YT05fUFJJT1JJVFlfNSA9IDM3LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfRlJBTUVfWE9OX1BSSU9SSVRZXzYgPSAzOCwKKyAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEZDX0ZSQU1FX1hPTl9QUklPUklUWV83ID0gMzksCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8wID0gNDAsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8xID0gNDEsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8yID0gNDIsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8zID0gNDMsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV80ID0gNDQsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV81ID0gNDUsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV82ID0gNDYsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV83ID0gNDcsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8wID0gNDgsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8xID0gNDksCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8yID0gNTAsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8zID0gNTEsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV80ID0gNTIsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV81ID0gNTMsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV82ID0gNTQsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV83ID0gNTUsCiB9OwogCiBzdHJ1Y3Qgb2ZfYnNuX3BvcnRfY291bnRlcl9zdGF0c19yZXF1ZXN0IDogb2ZfYnNuX3N0YXRzX3JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3BvcnRfZ2VuZXJhdGlvbl9pZCBiL29wZW5mbG93X2lucHV0L2Jzbl9wb3J0X2dlbmVyYXRpb25faWQKaW5kZXggZmRkZjlhMy4uM2I0MjQxMSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3BvcnRfZ2VuZXJhdGlvbl9pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fcG9ydF9nZW5lcmF0aW9uX2lkCkBAIC0yOCw2ICsyOCw3IEBACiAvLyBUaGlzIGdlbmVyYXRpb24gSUQgaXMgY2hhbmdlZCB3aGVuZXZlciBhIHBvcnQgZ29lcyBsaW5rLWRvd24uCiAKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2Jzbl9nZW5lcmF0aW9uX2lkIDogb2ZfcG9ydF9kZXNjX3Byb3BfYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9wcmlvcml0aXplX3BkdXMgYi9vcGVuZmxvd19pbnB1dC9ic25fcHJpb3JpdGl6ZV9wZHVzCmluZGV4IDdhMTc5YTkuLjJhZmI3MGEgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9wcmlvcml0aXplX3BkdXMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3ByaW9yaXRpemVfcGR1cwpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fcHJpb3JpdGl6ZV9wZHVzIDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3F1ZXVlX25hbWUgYi9vcGVuZmxvd19pbnB1dC9ic25fcXVldWVfbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNmYmJiCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3F1ZXVlX25hbWUKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEuMCAoRVBMKSwgd2l0aAorLy8gdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkgZGlzdHJpYnV0ZSBsaWJyYXJpZXMKKy8vIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykgdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZAorLy8gdGhhdCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisvLyBmcm9tIHRoZSBMb3hpR2VuIExpYnJhcmllcyBhbmQgdGhlIG5vdGljZSBwcm92aWRlZCBiZWxvdyBpcyAoaSkgaW5jbHVkZWQgaW4KKy8vIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUgZm9ybSBhbmQgKGlpKSBpbmNsdWRlZCBpbiBhbnkKKy8vIGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisvLworLy8gTm90aWNlOiAiQ29weXJpZ2h0IDIwMTMsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yIExPWEkgRXhjZXB0aW9uLiBZb3UgbWF5IG9idGFpbgorLy8gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisvLyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKy8vIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKy8vIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworc3RydWN0IG9mX3F1ZXVlX2Rlc2NfcHJvcF9ic25fcXVldWVfbmFtZSA6IG9mX3F1ZXVlX2Rlc2NfcHJvcF9ic24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgdWludDMyX3QgZXhwX3R5cGUgPT0gMDsKKyAgICBvZl9vY3RldHNfdCBuYW1lOyAvKiBVVEYtOCBlbmNvZGVkLiBOb3QgbnVsbCB0ZXJtaW5hdGVkLiAqLworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9yZXF1aXJlX3ZsYW5feGxhdGUgYi9vcGVuZmxvd19pbnB1dC9ic25fcmVxdWlyZV92bGFuX3hsYXRlCmluZGV4IDMyZmM1NWMuLmRjMGI1NmUgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9yZXF1aXJlX3ZsYW5feGxhdGUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3JlcXVpcmVfdmxhbl94bGF0ZQpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fcmVxdWlyZV92bGFuX3hsYXRlIDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3NwYW5fZGVzdGluYXRpb24gYi9vcGVuZmxvd19pbnB1dC9ic25fc3Bhbl9kZXN0aW5hdGlvbgppbmRleCBmZDRmNjc3Li5mNDQzOWJiIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fc3Bhbl9kZXN0aW5hdGlvbgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fc3Bhbl9kZXN0aW5hdGlvbgpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fc3Bhbl9kZXN0aW5hdGlvbiA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9zd2l0Y2hfcGlwZWxpbmUgYi9vcGVuZmxvd19pbnB1dC9ic25fc3dpdGNoX3BpcGVsaW5lCmluZGV4IGQ0MjUzMmIuLmY5MTBkNWEgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9zd2l0Y2hfcGlwZWxpbmUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3N3aXRjaF9waXBlbGluZQpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9ic25fZ2V0X3N3aXRjaF9waXBlbGluZV9yZXF1ZXN0IDogb2ZfYnNuX2hlYWRlciB7CiAgICAgdWludDhfdCB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3Rha2VvdmVyIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3Rha2VvdmVyCmluZGV4IDFiOTU2MTEuLmI2OTcyMWIgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl90YWtlb3ZlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdGFrZW92ZXIKQEAgLTI5LDYgKzI5LDcgQEAKIC8vIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIEVQTC4KIAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBJVlMgZm9yIGhpdGxlc3MgcmVzdGFydC4KIApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3RjcF9mbGFncyBiL29wZW5mbG93X2lucHV0L2Jzbl90Y3BfZmxhZ3MKaW5kZXggMWE4NGE5MC4uMDY5NjVlZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3RjcF9mbGFncworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdGNwX2ZsYWdzCkBAIC0zMSw2ICszMSw3IEBACiAjdmVyc2lvbiAzCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBUQ1AgZmxhZ3MKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl90aW1lIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3RpbWUKaW5kZXggZDY5ZTUzOC4uYmI1OTk2NiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3RpbWUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3RpbWUKQEAgLTM0LDYgKzM0LDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfYnNuX3RpbWVfcmVxdWVzdCA6IG9mX2Jzbl9oZWFkZXIgewogICAgIHVpbnQ4X3QgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl90bHYgYi9vcGVuZmxvd19pbnB1dC9ic25fdGx2CmluZGV4IDA5ODVlMWMuLjg0ZjkxNTggMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl90bHYKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3RsdgpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDEzLCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLyBDb3B5cmlnaHQgMjAxMy0yMDE3LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCiAvLwogLy8gTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwKIC8vIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBleGNlcHRpb246CkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX2Jzbl90bHZfcG9ydCA6IG9mX2Jzbl90bHYgewogICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKQEAgLTU1MCw1ICs1NTEsNTI4IEBACiBzdHJ1Y3Qgb2ZfYnNuX3Rsdl9pcHY2IDogb2ZfYnNuX3RsdiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA4NDsKICAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgb2ZfaXB2Nl90IHZhbHVlOyAKKyAgICBvZl9pcHY2X3QgdmFsdWU7Cit9OworCitlbnVtIG9mcF9ic25fZGVjYXAod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQX0JTTl9ERUNBUF9WWExBTiA9IDAsCisgICAgT0ZQX0JTTl9ERUNBUF9FUlNQQU4gPSAxLAorICAgIE9GUF9CU05fREVDQVBfTDJfR1JFID0gMiwKKyAgICBPRlBfQlNOX0RFQ0FQX05WR1JFID0gMywKKyAgICBPRlBfQlNOX0RFQ0FQX0NBUFdBUCA9IDQsCisgICAgT0ZQX0JTTl9ERUNBUF9MMl9NUExTID0gNSwKKyAgICBPRlBfQlNOX0RFQ0FQX0wzX0dSRSA9IDYsCisgICAgT0ZQX0JTTl9ERUNBUF9HVFAgPSA3LAorICAgIE9GUF9CU05fREVDQVBfTDNfTVBMUyA9IDgsCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9kZWNhcCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gODU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2Jzbl9kZWNhcCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3ZuaSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gODY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbWNnX3R5cGVfdnhsYW4gOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDg3OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK2VudW0gb2ZwX2Jzbl9wb3J0X3Z4bGFuX21vZGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBfQlNOX1BPUlRfVlhMQU5fUkVDSVJDVUxBVElPTl9FTkFCTEUgPSAwLAorICAgIE9GUF9CU05fUE9SVF9WWExBTl9URVJNSU5BVElPTl9FTkFCTEUgPSAxLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcG9ydF92eGxhbl9tb2RlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA4ODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX3BvcnRfdnhsYW5fbW9kZSB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl9yYXRlX3VuaXQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBfQlNOX1JBVEVfVU5JVF9QUFMgPSAwLCAvKiBQYWNrZXRzIHBlciBzZWNvbmQgKi8KKyAgICBPRlBfQlNOX1JBVEVfVU5JVF9LQklUUFMgPSAxLCAvKiBLaWxvYml0cyBwZXIgc2Vjb25kICovCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9yYXRlX3VuaXQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDg5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fcmF0ZV91bml0IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfYnJvYWRjYXN0X3JhdGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDkwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2tub3duX211bHRpY2FzdF9yYXRlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA5MTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl91bmtub3duX211bHRpY2FzdF9yYXRlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA5MjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl91bmljYXN0X3JhdGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDkzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25leHRob3BfdHlwZV92eGxhbiA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbXVsdGljYXN0X2ludGVyZmFjZV9pZCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdXNlX3BhY2tldF9zdGF0ZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgdmFsdWU7Cit9OworCitlbnVtIG9mcF9ic25fc3RhdHVzKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9TVEFUVVNfRElTQUJMRSA9IDAsCisgICAgT0ZQX0JTTl9TVEFUVVNfRU5BQkxFID0gMSwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3N0YXR1czogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA5NzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX3N0YXR1cyB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdmxhbl9tYWMgeworICAgIHVpbnQxNl90IHZsYW5fdmlkOworICAgIG9mX21hY19hZGRyX3QgbWFjOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdmxhbl9tYWNfbGlzdCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGxpc3Qob2ZfYnNuX3ZsYW5fbWFjX3QpIGtleTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3ZmaSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfaGFzaF9zZWVkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHNlZWQxOworICAgIHVpbnQzMl90IHNlZWQyOworfTsKKworZW51bSBvZl9ic25faGFzaF90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9IQVNIX1RZUEVfTDIgPSAwLAorICAgIE9GUF9CU05fSEFTSF9UWVBFX0wzID0gMSwKKyAgICBPRlBfQlNOX0hBU0hfVFlQRV9FTkhBTkNFRCA9IDIsCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9oYXNoX3R5cGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZl9ic25faGFzaF90eXBlIHZhbHVlOworfTsKKworZW51bSBvZl9ic25faGFzaF9wYWNrZXRfdHlwZSh3aXJlX3R5cGU9dWludDhfdCkgeworICAgIE9GX0JTTl9IQVNIX1BBQ0tFVF9MMiA9IDAsCisgICAgT0ZfQlNOX0hBU0hfUEFDS0VUX0wyR1JFID0gMSwKKyAgICBPRl9CU05fSEFTSF9QQUNLRVRfSVBWNCA9IDMsCisgICAgT0ZfQlNOX0hBU0hfUEFDS0VUX0lQVjYgPSA0LAorICAgIE9GX0JTTl9IQVNIX1BBQ0tFVF9NUExTID0gNSwKKyAgICBPRl9CU05fSEFTSF9QQUNLRVRfU1lNTUVUUklDID0gNiwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfcGFja2V0X3R5cGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZl9ic25faGFzaF9wYWNrZXRfdHlwZSB2YWx1ZTsKK307CisKK2VudW0gb2ZfYnNuX2hhc2hfcGFja2V0X2ZpZWxkKHdpcmVfdHlwZT11aW50NjRfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgLy8gMHgxIGlzIHVudXNlZAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9EU1RfTUFDID0gICAgIDB4MiwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfU1JDX01BQyA9ICAgICAweDQsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0VUSF9UWVBFID0gICAgMHg4LAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9WTEFOX0lEID0gICAgIDB4MTAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0lOTkVSX0wyID0gICAgMHgyMCwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfSU5ORVJfTDMgPSAgICAweDQwLAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9TUkNfSVAgPSAgICAgIDB4ODAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0RTVF9JUCA9ICAgICAgMHgxMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0lQX1BST1RPID0gICAgMHgyMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX1NSQ19MNF9QT1JUID0gMHg0MDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0RTVF9MNF9QT1JUID0gMHg4MDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX01QTFNfTEFCRUwxID0gMHgxMDAwLAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9NUExTX0xBQkVMMiA9IDB4MjAwMCwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfTVBMU19MQUJFTDMgPSAweDQwMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX01QTFNfTEFCRUxfSElfQklUUyAgPSAweDgwMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX01QTFNfUEFZTE9BRF9TUkNfSVAgPSAweDEwMDAwLAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9NUExTX1BBWUxPQURfRFNUX0lQID0gMHgyMDAwMCwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfU1lNTUVUUklDID0gICAgICAgICAgIDB4NDAwMDAsCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9oYXNoX3BhY2tldF9maWVsZCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTAzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mX2Jzbl9oYXNoX3BhY2tldF9maWVsZCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfZ3RwX2hlYWRlcl9tYXRjaCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTA0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50OF90IGZpcnN0X2hlYWRlcl9ieXRlOworICAgIHVpbnQ4X3QgZmlyc3RfaGVhZGVyX21hc2s7Cit9OworCitlbnVtIG9mX2Jzbl9oYXNoX2d0cF9wb3J0X21hdGNoKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZfQlNOX0hBU0hfR1RQX1BPUlRfTUFUQ0hfU1JDID0gMSwKKyAgICBPRl9CU05fSEFTSF9HVFBfUE9SVF9NQVRDSF9EU1QgPSAyLAorICAgIE9GX0JTTl9IQVNIX0dUUF9QT1JUX01BVENIX1NSQ19PUl9EU1QgPSAzLAorICAgIE9GX0JTTl9IQVNIX0dUUF9QT1JUX01BVENIX1NSQ19BTkRfRFNUID0gNCwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfZ3RwX3BvcnRfbWF0Y2ggOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZl9ic25faGFzaF9ndHBfcG9ydF9tYXRjaCBtYXRjaDsKKyAgICB1aW50MTZfdCBzcmNfcG9ydDsKKyAgICB1aW50MTZfdCBkc3RfcG9ydDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3VudGFnZ2VkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDY7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdmZwX2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDc7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcW9zX3ByaW9yaXR5IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcGFyZW50X3BvcnQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2ZfcG9ydF9ub190IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbG9vcGJhY2tfcG9ydCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTEwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9wb3J0X25vX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl92cG5fa2V5IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfZHNjcCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTEyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsgIC8vIDAtNjMKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3R0bCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTEzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25leHRfaG9wX21hYyA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9tYWNfYWRkcl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbmV4dF9ob3BfaXB2NCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9pcHY0X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9yYXRlX2xpbWl0IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOyAgLy8gaW4gS2JwcworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdnhsYW5fZWdyZXNzX2xhZyA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE3OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2NwdV9sYWcgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDExODsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl91aW50NjRfbGlzdCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQ2NF90KSB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2Rpc2FibGVfc3JjX21hY19jaGVjayA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTIwOworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2Ryb3AgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEyMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9pcHY2X3ByZWZpeCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTIyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9pcHY2X3QgdmFsdWU7CisgICAgdWludDhfdCBwcmVmaXhfbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbmRwX29mZmxvYWQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEyMzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9uZHBfc3RhdGljIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfaWNtcHY2X2Noa3N1bSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTI1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2lwdjZfc3JjIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIG9mX2lwdjZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2lwdjZfZHN0IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjc7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIG9mX2lwdjZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3B1c2hfdmxhbl9vbl9pbmdyZXNzIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjg7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLy8gYXBwbHlfcGFja2V0cyBhbmQgYXBwbHlfYnl0ZXMgYXJlIHN0YXQgY291bnRlcnMsIGxpa2UgcnhfcGFja2V0CisvLyBpZGVudGlmaWVzIHBhY2tldHMgYW5kIGJ5dGVzIGFwcGxpZWQgdG8gc29tZSBhY3Rpb24sIGZvciBleGFtcGxlOgorLy8gcGFja2V0cyB3aXRoIGluZXQgTDMvTDQgaGVhZGVycyBmb3IgbmV0ZmxvdworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9hcHBseV9wYWNrZXRzIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ2NF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfYXBwbHlfYnl0ZXMgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzMDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDY0X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9ldGhfdHlwZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTMxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2VjbiA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTMyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50OF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdGNwX2ZsYWdzIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbDNfaW50ZXJmYWNlX2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbDNfc3JjX2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbDNfZHN0X2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfZWdyZXNzX29ubHkgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzNzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9pbmdyZXNzX3BvcnRfZ3JvdXBfaWQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9lZ3Jlc3NfcG9ydF9ncm91cF9pZCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTM5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2RhdGFfbWFzayA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9vY3RldHNfdCB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl9wb3J0X3VzYWdlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUF9CU05fUE9SVF9VTlVTRUQgPSAwLAorICAgIE9GUF9CU05fUE9SVF9UUkFOU01JVF9PTkxZID0gMSwKKyAgICBPRlBfQlNOX1BPUlRfUkVDRUlWRV9PTkxZID0gMiwKKyAgICBPRlBfQlNOX1BPUlRfQklESVJFQ1RJT04gPSAzLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcG9ydF91c2FnZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fcG9ydF91c2FnZSB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl90dW5uZWxfdHlwZSh3aXJlX3R5cGU9dWludDY0X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUF9CU05fVFVOTkVMX0wyR1JFID0gMHgxLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdHVubmVsX2NhcGFiaWxpdHkgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE0MjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX3R1bm5lbF90eXBlIHZhbHVlOworfTsKKworZW51bSBvZnBfYnNuX2VuaGFuY2VkX2hhc2hfdHlwZSh3aXJlX3R5cGU9dWludDY0X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9MMiA9IDB4MSwKKyAgICBPRlBfQlNOX0VOSEFOQ0VEX0hBU0hfTDMgPSAweDIsCisgICAgT0ZQX0JTTl9FTkhBTkNFRF9IQVNIX0wyR1JFID0gMHg0LAorICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9NUExTID0gMHg4LAorICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9HVFAgPSAweDEwLAorICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9TWU1NRVRSSUMgPSAweDIwLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfZW5oYW5jZWRfaGFzaF9jYXBhYmlsaXR5IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNDM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2Jzbl9lbmhhbmNlZF9oYXNoX3R5cGUgdmFsdWU7Cit9OworCitlbnVtIG9mcF9ic25fYXV0b19uZWdvdGlhdGlvbl90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9BVVRPX05FR09USUFUSU9OX0RFRkFVTFQgPSAwLAorICAgIE9GUF9CU05fQVVUT19ORUdPVElBVElPTl9FTkFCTEUgPSAxLAorICAgIE9GUF9CU05fQVVUT19ORUdPVElBVElPTl9ESVNBQkxFID0gMiwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2F1dG9fbmVnb3RpYXRpb24gOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE0NDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX2F1dG9fbmVnb3RpYXRpb25fdHlwZSB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl9oYXNoX2FsZ29yaXRobV90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUF9CU05fSEFTSF9BTEdPUklUSE1fQ1JDMTZYT1I4ID0gMCwKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX0NSQzE2WE9SNCA9IDEsCisgICAgT0ZQX0JTTl9IQVNIX0FMR09SSVRITV9DUkMxNlhPUjIgPSAyLAorICAgIE9GUF9CU05fSEFTSF9BTEdPUklUSE1fQ1JDMTZYT1IxID0gMywKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX0NSQzE2ID0gNCwKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX1hPUjE2ID0gNSwKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX0NSQzE2Q0NJVFQgPSA2LAorICAgIE9GUF9CU05fSEFTSF9BTEdPUklUSE1fQ1JDMzJMTyA9IDcsCisgICAgT0ZQX0JTTl9IQVNIX0FMR09SSVRITV9DUkMzMkhJID0gOCwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfYWxnb3JpdGhtIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNDU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2Jzbl9oYXNoX2FsZ29yaXRobV90eXBlIHZhbHVlOworfTsKKworZW51bSBvZnBfYnNuX2xvb3BiYWNrX21vZGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBfQlNOX0xPT1BCQUNLX01PREVfTk9ORSA9IDAsCisgICAgT0ZQX0JTTl9MT09QQkFDS19NT0RFX01BQyA9IDEsCisgICAgT0ZQX0JTTl9MT09QQkFDS19NT0RFX1BIWSA9IDIsCisgICAgT0ZQX0JTTl9MT09QQkFDS19NT0RFX1BIWV9SRU1PVEUgPSAzLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbG9vcGJhY2tfbW9kZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ2OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fbG9vcGJhY2tfbW9kZSB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25vX2FycF9yZXNwb25zZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ3OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25vX25zX3Jlc3BvbnNlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNDg7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworZW51bSBvZnBfYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbl90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9GT1JXQVJEX0VSUk9SX0NPUlJFQ1RJT05fREVGQVVMVCA9IDAsCisgICAgT0ZQX0JTTl9GT1JXQVJEX0VSUk9SX0NPUlJFQ1RJT05fRU5BQkxFID0gMSwKKyAgICBPRlBfQlNOX0ZPUldBUkRfRVJST1JfQ09SUkVDVElPTl9ESVNBQkxFID0gMiwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbiA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fZm9yd2FyZF9lcnJvcl9jb3JyZWN0aW9uX3R5cGUgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9vcHRpY3NfYWx3YXlzX2VuYWJsZWQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE1MDsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9mb3JjZV9saW5rX3VwIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNTE7CisgICAgdWludDE2X3QgbGVuZ3RoOwogfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl91ZGYgYi9vcGVuZmxvd19pbnB1dC9ic25fdWRmCmluZGV4IDEyYWQxY2IuLjVmYWU2NzQgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl91ZGYKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3VkZgpAQCAtMzEsNiArMzEsNyBAQAogI3ZlcnNpb24gMwogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvKgogICogVXNlciBEZWZpbmVkIEZpZWxkcwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3VwbGluayBiL29wZW5mbG93X2lucHV0L2Jzbl91cGxpbmsKaW5kZXggZGVjMmVkNC4uODIwMTEyYyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3VwbGluaworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdXBsaW5rCkBAIC0yNiw2ICsyNiw3IEBACiAvLyB1bmRlciB0aGUgRVBMLgogCiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcF9ic25fdXBsaW5rIDogb2ZfcG9ydF9kZXNjX3Byb3BfYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl92ZmkgYi9vcGVuZmxvd19pbnB1dC9ic25fdmZpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjAyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdmZpCkBAIC0wLDAgKzEsNDggQEAKKy8vIENvcHlyaWdodCAyMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLworLy8gTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwKKy8vIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBleGNlcHRpb246CisvLworLy8gTE9YSSBFeGNlcHRpb24KKy8vCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSB0ZXJtcyBvZiB0aGUgRVBMLCB5b3UgbWF5CisvLyBkaXN0cmlidXRlIGxpYnJhcmllcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiAoTG94aUdlbiBMaWJyYXJpZXMpCisvLyB1bmRlciB0aGUgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgY29weXJpZ2h0IGFuZAorLy8gbGljZW5zaW5nIG5vdGljZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gYXJlIG5vdCBhbHRlcmVkIG9yIHJlbW92ZWQKKy8vIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKQorLy8gaW5jbHVkZWQgaW4gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZQorLy8gZm9ybSBhbmQgKGlpKSBpbmNsdWRlZCBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4KKy8vIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisvLworLy8gTm90aWNlOiAiQ29weXJpZ2h0IDIwMTMsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKKy8vCisvLyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIEVQTCBvcgorLy8gTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgRVBMIGF0OgorLy8KKy8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorLy8gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisvLyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIKKy8vIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBFUEwgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZQorLy8gZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgRVBMLgorCisjdmVyc2lvbiA0CisjdmVyc2lvbiA1CisjdmVyc2lvbiA2CisKKy8qCisgKiBWWExBTiBWRkkgSU5ERVgKKyAqLworCitzdHJ1Y3Qgb2Zfb3htX2Jzbl92ZmkgOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4MDAwMzMyMDI7CisgICAgdWludDE2X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3htX2Jzbl92ZmlfbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDAwMDMzMzA0OworICAgIHVpbnQxNl90IHZhbHVlOworICAgIHVpbnQxNl90IHZhbHVlX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5fY291bnRlciBiL29wZW5mbG93X2lucHV0L2Jzbl92bGFuX2NvdW50ZXIKaW5kZXggZDM5ZDM1Zi4uZDAyMDQ1OSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5fY291bnRlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdmxhbl9jb3VudGVyCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogZW51bSBvZnBfYnNuX3ZsYW5fY291bnRlcl9jb25zdGFudHMgewogICAgIE9GUF9CU05fVkxBTl9BTEwgPSAweGZmZmYsCkBAIC03NCwzICs3NSwxMyBAQAogICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gOTsKICAgICBsaXN0KG9mX2Jzbl92bGFuX2NvdW50ZXJfc3RhdHNfZW50cnlfdCkgZW50cmllczsKIH07CisKK3N0cnVjdCBvZl9ic25fdmxhbl9jb3VudGVyX2NsZWFyIDogb2ZfYnNuX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OworICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gNzA7CisgICAgdWludDE2X3Qgdmxhbl92aWQ7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5feGxhdGVfcG9ydF9ncm91cF9pZCBiL29wZW5mbG93X2lucHV0L2Jzbl92bGFuX3hsYXRlX3BvcnRfZ3JvdXBfaWQKaW5kZXggOTg2ZGMwZS4uZTU3NTY3OSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5feGxhdGVfcG9ydF9ncm91cF9pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdmxhbl94bGF0ZV9wb3J0X2dyb3VwX2lkCkBAIC0zMSw2ICszMSw3IEBACiAjdmVyc2lvbiAzCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBWTEFOIHhsYXRlIHBvcnQgZ3JvdXAgSUQgZm9yIFN3aXRjaExpZ2h0CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fdnJmIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3ZyZgppbmRleCBjNjFjMzEzLi5hNTk4ZGY1IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fdnJmCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl92cmYKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIFZpcnR1YWwgUm91dGluZy9Gb3J3YXJkaW5nIElEIGZvciBTd2l0Y2hMaWdodApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZyZl9jb3VudGVyIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3ZyZl9jb3VudGVyCmluZGV4IDAxMmQ3MjguLjMxMDY2ODIgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl92cmZfY291bnRlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdnJmX2NvdW50ZXIKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBlbnVtIG9mcF9ic25fdnJmX2NvdW50ZXJfY29uc3RhbnRzKHdpcmVfdHlwZT11aW50MzJfdCkgewogICAgIE9GUF9CU05fVlJGX0FMTCA9IDB4ZmZmZmZmZmYsCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fdnhsYW4gYi9vcGVuZmxvd19pbnB1dC9ic25fdnhsYW4KaW5kZXggNDE3MWE1MS4uNDY2ZjQ1MCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3Z4bGFuCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl92eGxhbgpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBWWExBTiBWaXJ0dWFsIE5ldHdvcmsgSWRlbnRpZmllcgpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvaW50ZWwgYi9vcGVuZmxvd19pbnB1dC9pbnRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvaW50ZWwKQEAgLTAsMCArMSw2NCBAQAorLy8gQ29weXJpZ2h0IDIwMTcsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLAorLy8gdmVyc2lvbiAxLjAgKEVQTCksIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkKKy8vIGRpc3RyaWJ1dGUgbGlicmFyaWVzIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykKKy8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBjb3B5cmlnaHQgYW5kCisvLyBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpCisvLyBpbmNsdWRlZCBpbiB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlCisvLyBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbgorLy8gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yCisvLyBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKy8vIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorLy8gZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlCisvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcF9leHBlcmltZW50ZXJfaW50ZWwgOiBvZl9wb3J0X3N0YXRzX3Byb3BfZXhwZXJpbWVudGVyIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4MDAwMGFhMDE7CisgICAgdWludDMyX3QgZXhwX3R5cGUgPT0gMHgwMDAwMDAwMTsKKyAgICBwYWQoNCk7CisgICAgCisgICAgdWludDY0X3QgcnhfMV90b182NF9wYWNrZXRzOworICAgIHVpbnQ2NF90IHJ4XzY1X3RvXzEyN19wYWNrZXRzOworICAgIHVpbnQ2NF90IHJ4XzEyOF90b18yNTVfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF8yNTZfdG9fNTExX3BhY2tldHM7CisgICAgdWludDY0X3QgcnhfNTEyX3RvXzEwMjNfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF8xMDI0X3RvXzE1MjJfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF8xNTIzX3RvX21heF9wYWNrZXRzOworICAgICAgICAgICAgIAorICAgIHVpbnQ2NF90IHR4XzFfdG9fNjRfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF82NV90b18xMjdfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF8xMjhfdG9fMjU1X3BhY2tldHM7CisgICAgdWludDY0X3QgdHhfMjU2X3RvXzUxMV9wYWNrZXRzOworICAgIHVpbnQ2NF90IHR4XzUxMl90b18xMDIzX3BhY2tldHM7CisgICAgdWludDY0X3QgdHhfMTAyNF90b18xNTIyX3BhY2tldHM7CisgICAgdWludDY0X3QgdHhfMTUyM190b19tYXhfcGFja2V0czsKKyAgICAgICAgICAgICAKKyAgICB1aW50NjRfdCB0eF9tdWx0aWNhc3RfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF9icm9hZGNhc3RfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF9icm9hZGNhc3RfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF91bmRlcnNpemVkX2Vycm9yczsKKyAgICB1aW50NjRfdCByeF9vdmVyc2l6ZV9lcnJvcnM7CisgICAgdWludDY0X3QgcnhfZnJhZ21lbnRlZF9lcnJvcnM7CisgICAgdWludDY0X3QgcnhfamFiYmVyX2Vycm9yczsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3ZzX3RjcF9mbGFncyBiL29wZW5mbG93X2lucHV0L292c190Y3BfZmxhZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjMzczNwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L292c190Y3BfZmxhZ3MKQEAgLTAsMCArMSw2NCBAQAorLy8gQ29weXJpZ2h0IDIwMTQsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLAorLy8gdmVyc2lvbiAxLjAgKEVQTCksIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkKKy8vIGRpc3RyaWJ1dGUgbGlicmFyaWVzIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykKKy8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBjb3B5cmlnaHQgYW5kCisvLyBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpCisvLyBpbmNsdWRlZCBpbiB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlCisvLyBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbgorLy8gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxMywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yCisvLyBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKy8vIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorLy8gZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlCisvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDMKKyN2ZXJzaW9uIDQKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworLyoKKyAqRXhwZXJpbWVudGVyIFRDUCBmbGFncworICpBdXRob3I6IGZhbmd0dW85MEBnbWFpbC5jb20KKyAqLworCitlbnVtIG9mcF9vdnNfdGNwX2ZsYWcod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBfT1ZTX1RDUF9GTEFHX0ZJTiA9IDB4MDAxLAorICAgIE9GUF9PVlNfVENQX0ZMQUdfU1lOID0gMHgwMDIsCisgICAgT0ZQX09WU19UQ1BfRkxBR19SU1QgPSAweDAwNCwKKyAgICBPRlBfT1ZTX1RDUF9GTEFHX1BTSCA9IDB4MDA4LAorICAgIE9GUF9PVlNfVENQX0ZMQUdfQUNLID0gMHgwMTAsCisgICAgT0ZQX09WU19UQ1BfRkxBR19VUkcgPSAweDAyMCwKKyAgICBPRlBfT1ZTX1RDUF9GTEFHX0VDRSA9IDB4MDQwLAorICAgIE9GUF9PVlNfVENQX0ZMQUdfQ1dSID0gMHgwODAsCisgICAgT0ZQX09WU19UQ1BfRkxBR19OUyAgPSAweDEwMCwKK307CisKK3N0cnVjdCBvZl9veG1fb3ZzX3RjcF9mbGFncyA6IG9mX294bSB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHhmZmZmNTQwNjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXJfaWQgPT0gMHg0ZjRlNDYwMDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veG1fb3ZzX3RjcF9mbGFnc19tYXNrZWQgOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4ZmZmZjU1MDg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyX2lkID09IDB4NGY0ZTQ2MDA7CisgICAgdWludDE2X3QgdmFsdWU7CisgICAgdWludDE2X3QgdmFsdWVfbWFzazsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9veG0tMS4yIGIvb3BlbmZsb3dfaW5wdXQvb3htLTEuMgppbmRleCBkZDU5NmJkLi4zOWMwZmRkIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9veG0tMS4yCisrKyBiL29wZW5mbG93X2lucHV0L294bS0xLjIKQEAgLTMyLDYgKzMyLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX294bSB7CiAgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gPzsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L294bS0xLjMgYi9vcGVuZmxvd19pbnB1dC9veG0tMS4zCmluZGV4IDRiYjU1YTEuLjIwMGYzY2QgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L294bS0xLjMKKysrIGIvb3BlbmZsb3dfaW5wdXQvb3htLTEuMwpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9veG1fdHVubmVsX2lkIDogb2Zfb3htIHsKICAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA0YzA4OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3htLTEuNCBiL29wZW5mbG93X2lucHV0L294bS0xLjQKaW5kZXggMGZkOTZlYy4uYjE2NWZjNSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvb3htLTEuNAorKysgYi9vcGVuZmxvd19pbnB1dC9veG0tMS40CkBAIC0yOSw2ICsyOSw3IEBACiAvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCiAKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX294bV9wYmJfdWNhIDogb2Zfb3htIHsKICAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1MjAxOwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3htLTEuNSBiL29wZW5mbG93X2lucHV0L294bS0xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkMmU0YwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L294bS0xLjUKQEAgLTAsMCArMSwzNSBAQAorI3ZlcnNpb24gNgorCitzdHJ1Y3Qgb2Zfb3htX3RjcF9mbGFncyA6IG9mX294bSB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAwNTQwMjsKKyAgICB1aW50OF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX294bV90Y3BfZmxhZ3NfbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1NTA0OworICAgIHVpbnQ4X3QgdmFsdWU7CisgICAgdWludDhfdCB2YWx1ZV9tYXNrOworfTsKKworc3RydWN0IG9mX294bV9hY3RzZXRfb3V0cHV0IDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1NjA0OworICAgIHVpbnQ4X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3htX2FjdHNldF9vdXRwdXRfbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1NzA4OworICAgIG9mX3BvcnRfbm9fdCB2YWx1ZTsKKyAgICBvZl9wb3J0X25vX3QgdmFsdWVfbWFzazsKK307CisKKworc3RydWN0IG9mX294bV9wYWNrZXRfdHlwZSA6IG9mX294bSB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAwNTgwNDsKKyAgICB1aW50OF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX294bV9wYWNrZXRfdHlwZV9tYXNrZWQgOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4ODAwMDU5MDg7CisgICAgdWludDhfdCB2YWx1ZTsKKyAgICB1aW50OF90IHZhbHVlX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3htX25pY2lyYV90dW4gYi9vcGVuZmxvd19pbnB1dC9veG1fbmljaXJhX3R1bgppbmRleCA5ZTczZmVjLi5hZTI1NzVmIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9veG1fbmljaXJhX3R1bgorKysgYi9vcGVuZmxvd19pbnB1dC9veG1fbmljaXJhX3R1bgpAQCAtMjgsNiArMjgsNyBAQAogI3ZlcnNpb24gMwogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBOaWNpcmEgZXh0ZW5zaW9uIGZvciB0dW5faXB2NF9zcmMgKDMxKQogc3RydWN0IG9mX294bV90dW5uZWxfaXB2NF9zcmMgOiBvZl9veG0gewpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3hzLTEuNSBiL29wZW5mbG93X2lucHV0L294cy0xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmMTY0MgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L294cy0xLjUKQEAgLTAsMCArMSwzMSBAQAorCisjdmVyc2lvbiA2CisKK3N0cnVjdCBvZl9veHMgeworICAgIHVpbnQzMl90IHR5cGVfbGVuID09ID87Cit9OworCitzdHJ1Y3Qgb2Zfb3hzX2R1cmF0aW9uIDogb2Zfb3hzIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDIwMDA4IDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veHNfaWRsZV90aW1lIDogb2Zfb3hzIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDIwMjA4IDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veHNfZmxvd19jb3VudCA6IG9mX294cyB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAyMDQwNCA7CisgICAgdWludDE2X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3hzX3BhY2tldF9jb3VudCA6IG9mX294cyB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAyMDYwOCA7CisgICAgdWludDE2X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3hzX2J5dGVfY291bnQgOiBvZl9veHMgeworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4ODAwMjA4MDggOworICAgIHVpbnQxNl90IHZhbHVlOworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMCBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMAppbmRleCAxZTQ3NTBiLi4xYmJhNDExIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjAKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4wCkBAIC00MzMsOCArNDMzLDggQEAKICAgICB1aW50MzJfdCB4aWQ7CiAgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwotICAgIHVpbnQzMl90IGNvbmZpZzsKLSAgICB1aW50MzJfdCBtYXNrOworICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIGNvbmZpZzsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBtYXNrOwogICAgIHVpbnQzMl90IGFkdmVydGlzZTsKICAgICBwYWQoNCk7CiB9OwpAQCAtNTU0LDcgKzU1NCw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgICBvZl9wb3J0X25vX3QgaW5fcG9ydDsKLSAgICB1aW50MTZfdCBhY3Rpb25zX2xlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25zX2xlbiA9PSBsZW5ndGgoYWN0aW9ucyk7CiAgICAgbGlzdChvZl9hY3Rpb25fdCkgYWN0aW9uczsKICAgICBvZl9vY3RldHNfdCBkYXRhOwogfTsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICAgdWludDY0X3QgY29va2llOwogICAgIHVpbnQxNl90IHByaW9yaXR5OwotICAgIHVpbnQ4X3QgcmVhc29uOworICAgIGVudW0gb2ZwX2Zsb3dfcmVtb3ZlZF9yZWFzb24gcmVhc29uOwogICAgIHBhZCgxKTsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CiAgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMSBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMQppbmRleCA2NzY1ZmU3Li4wN2YyNDZlIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjEKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4xCkBAIC01NTUsOCArNTU1LDggQEAKICAgICBwYWQoNCk7CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgIHBhZCgyKTsKLSAgICB1aW50MzJfdCBjb25maWc7Ci0gICAgdWludDMyX3QgbWFzazsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKICAgICB1aW50MzJfdCBhZHZlcnRpc2U7CiAgICAgcGFkKDQpOwogfTsKQEAgLTc2MSw3ICs3NjEsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MzJfdCBidWZmZXJfaWQ7CiAgICAgb2ZfcG9ydF9ub190IGluX3BvcnQ7Ci0gICAgdWludDE2X3QgYWN0aW9uc19sZW47CisgICAgdWludDE2X3QgYWN0aW9uc19sZW4gPT0gbGVuZ3RoKGFjdGlvbnMpOwogICAgIHBhZCg2KTsKICAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwogICAgIG9mX29jdGV0c190IGRhdGE7CkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50NjRfdCBjb29raWU7CiAgICAgdWludDE2X3QgcHJpb3JpdHk7Ci0gICAgdWludDhfdCByZWFzb247CisgICAgZW51bSBvZnBfZmxvd19yZW1vdmVkX3JlYXNvbiByZWFzb247CiAgICAgdWludDhfdCB0YWJsZV9pZDsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CiAgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMiBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMgppbmRleCBjMWU4YTJiLi45MTQxZjIyIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjIKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4yCkBAIC01OTQsOCArNTk0LDggQEAKICAgICBwYWQoNCk7CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgIHBhZCgyKTsKLSAgICB1aW50MzJfdCBjb25maWc7Ci0gICAgdWludDMyX3QgbWFzazsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKICAgICB1aW50MzJfdCBhZHZlcnRpc2U7CiAgICAgcGFkKDQpOwogfTsKQEAgLTk0OCw3ICs5NDgsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MzJfdCBidWZmZXJfaWQ7CiAgICAgb2ZfcG9ydF9ub190IGluX3BvcnQ7Ci0gICAgdWludDE2X3QgYWN0aW9uc19sZW47CisgICAgdWludDE2X3QgYWN0aW9uc19sZW4gPT0gbGVuZ3RoKGFjdGlvbnMpOwogICAgIHBhZCg2KTsKICAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwogICAgIG9mX29jdGV0c190IGRhdGE7CkBAIC05NzUsNyArOTc1LDcgQEAKICAgICB1aW50MzJfdCB4aWQ7CiAgICAgdWludDY0X3QgY29va2llOwogICAgIHVpbnQxNl90IHByaW9yaXR5OwotICAgIHVpbnQ4X3QgcmVhc29uOworICAgIGVudW0gb2ZwX2Zsb3dfcmVtb3ZlZF9yZWFzb24gcmVhc29uOwogICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICAgdWludDMyX3QgZHVyYXRpb25fc2VjOwogICAgIHVpbnQzMl90IGR1cmF0aW9uX25zZWM7CkBAIC0xMTIxLDcgKzExMjEsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CiAgICAgdWludDE2X3Qgc3VidHlwZTsKLSAgICB1aW50MzJfdCBleHBlcmltZW50ZXI7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKIH07CiAKQEAgLTEyMTQsNyArMTIxNCw3IEBACiAgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKIH07CiAKLS8vIFNUQVRTOiAKKy8vIFNUQVRTOgogLy8gIERlc2MsIGZsb3csIGFnZywgdGFibGUsIHBvcnQsIHF1ZXVlLCBncm91cCwgZ3JvdXBfZGVzYywgZ3JvdXBfZmVhdCwgZXhwZXJpCiAKIHN0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKQEAgLTE0NTMsNyArMTQ1Myw3IEBACiAgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICAgcGFkKDQpOwogICAgIHVpbnQzMl90IHR5cGVzOwotICAgIHVpbnQzMl90IGNhcGFiaWxpdGllczsKKyAgICBlbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfc2VsZWN0OwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfaW5kaXJlY3Q7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjMgYi9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjMKaW5kZXggMWVkYWJiMi4uNDM0OTBhYyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4zCisrKyBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMwpAQCAtNzQyLDggKzc0Miw4IEBACiAgICAgcGFkKDQpOwogICAgIG9mX21hY19hZGRyX3QgaHdfYWRkcjsKICAgICBwYWQoMik7Ci0gICAgdWludDMyX3QgY29uZmlnOwotICAgIHVpbnQzMl90IG1hc2s7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgY29uZmlnOworICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIG1hc2s7CiAgICAgdWludDMyX3QgYWR2ZXJ0aXNlOwogICAgIHBhZCg0KTsKIH07CkBAIC03NTUsNyArNzU1LDcgQEAKICAgICBsaXN0KG9mX294bV90KSBveG1fbGlzdDsKIH07CiAKLS8vIFRoaXMgbG9va3MgbGlrZSBhbiBhY3Rpb24gaGVhZGVyLCBidXQgaXMgc3RhbmRhbG9uZS4gIFNlZSAKKy8vIFRoaXMgbG9va3MgbGlrZSBhbiBhY3Rpb24gaGVhZGVyLCBidXQgaXMgc3RhbmRhbG9uZS4gIFNlZQogLy8gb2ZwX3RhYmxlX2ZlYXR1cmVzX3Byb3BfYWN0aW9ucwogc3RydWN0IG9mX2FjdGlvbl9pZCB7CiAgICAgdWludDE2X3QgdHlwZTsKQEAgLTExMjcsNyArMTEyNyw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgICBvZl9wb3J0X25vX3QgaW5fcG9ydDsKLSAgICB1aW50MTZfdCBhY3Rpb25zX2xlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25zX2xlbiA9PSBsZW5ndGgoYWN0aW9ucyk7CiAgICAgcGFkKDYpOwogICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKQEAgLTExNTUsNyArMTE1NSw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgICB1aW50MTZfdCBwcmlvcml0eTsKLSAgICB1aW50OF90IHJlYXNvbjsKKyAgICBlbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uIHJlYXNvbjsKICAgICB1aW50OF90IHRhYmxlX2lkOwogICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOwpAQCAtMTIwMyw4ICsxMjAzLDggQEAKICAgICB1aW50OF90IHR5cGUgPT0gMjk7CiAgICAgdWludDE2X3QgbGVuZ3RoOwogICAgIHVpbnQzMl90IHhpZDsKLSAgICB1aW50MTZfdCBjb21tYW5kOwotICAgIHVpbnQxNl90IGZsYWdzOworICAgIGVudW0gb2ZwX21ldGVyX21vZF9jb21tYW5kIGNvbW1hbmQ7CisgICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CiAgICAgdWludDMyX3QgbWV0ZXJfaWQ7CiAgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIG1ldGVyczsKIH07CkBAIC0xMzY0LDcgKzEzNjQsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CiAgICAgdWludDE2X3Qgc3VidHlwZTsKLSAgICB1aW50MzJfdCBleHBlcmltZW50ZXI7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKIH07CiAKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKIH07CiAKLS8vIFNUQVRTOiAKKy8vIFNUQVRTOgogLy8gIERlc2MsIGZsb3csIGFnZywgdGFibGUsIHBvcnQsIHF1ZXVlLCBncm91cCwgZ3JvdXBfZGVzYywgZ3JvdXBfZmVhdCwgZXhwZXJpCiAKIHN0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKQEAgLTE4NDIsNyArMTg0Miw3IEBACiAgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICAgcGFkKDQpOwogICAgIHVpbnQzMl90IHR5cGVzOwotICAgIHVpbnQzMl90IGNhcGFiaWxpdGllczsKKyAgICBlbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfc2VsZWN0OwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfaW5kaXJlY3Q7CkBAIC0xOTg4LDcgKzE5ODgsNyBAQAogCiBzdHJ1Y3Qgb2ZfbWV0ZXJfY29uZmlnIHsKICAgICB1aW50MTZfdCAgICAgICAgbGVuZ3RoOwotICAgIHVpbnQxNl90ICAgICAgICBmbGFnczsKKyAgICBlbnVtIG9mcF9tZXRlcl9mbGFncyAgICAgICAgZmxhZ3M7CiAgICAgdWludDMyX3QgICAgICAgIG1ldGVyX2lkOwogICAgIGxpc3Qob2ZfbWV0ZXJfYmFuZF90KSBlbnRyaWVzOwogfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuNCBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuNAppbmRleCAyOGFhNzg3Li5hZjY1N2QxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjQKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS40CkBAIC05MzQsNyArOTM0LDcgQEAKIHN0cnVjdCBvZl9wb3J0X21vZF9wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9tb2RfcHJvcCB7CiAgICAgdWludDE2X3QgdHlwZSA9PSAwOwogICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MzJfdCBhZHZlcnRpc2U7CisgICAgZW51bSBvZnBfcG9ydF9mZWF0dXJlcyBhZHZlcnRpc2U7CiB9OwogCiBzdHJ1Y3Qgb2ZfcG9ydF9tb2RfcHJvcF9vcHRpY2FsIDogb2ZfcG9ydF9tb2RfcHJvcCB7CkBAIC05NjMsOCArOTYzLDggQEAKICAgICBwYWQoNCk7CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgIHBhZCgyKTsKLSAgICB1aW50MzJfdCBjb25maWc7Ci0gICAgdWludDMyX3QgbWFzazsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKICAgICBsaXN0KG9mX3BvcnRfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKIH07CiAKQEAgLTEzNDcsNyArMTM0Nyw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgICBvZl9wb3J0X25vX3QgaW5fcG9ydDsKLSAgICB1aW50MTZfdCBhY3Rpb25zX2xlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25zX2xlbiA9PSBsZW5ndGgoYWN0aW9ucyk7CiAgICAgcGFkKDYpOwogICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKQEAgLTEzNzUsNyArMTM3NSw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgICB1aW50MTZfdCBwcmlvcml0eTsKLSAgICB1aW50OF90IHJlYXNvbjsKKyAgICBlbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uIHJlYXNvbjsKICAgICB1aW50OF90IHRhYmxlX2lkOwogICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOwpAQCAtMTQyMyw4ICsxNDIzLDggQEAKICAgICB1aW50OF90IHR5cGUgPT0gMjk7CiAgICAgdWludDE2X3QgbGVuZ3RoOwogICAgIHVpbnQzMl90IHhpZDsKLSAgICB1aW50MTZfdCBjb21tYW5kOwotICAgIHVpbnQxNl90IGZsYWdzOworICAgIGVudW0gb2ZwX21ldGVyX21vZF9jb21tYW5kIGNvbW1hbmQ7CisgICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CiAgICAgdWludDMyX3QgbWV0ZXJfaWQ7CiAgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGJhbmRzOwogfTsKQEAgLTE2MjQsNyArMTYyNCw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQxNl90IGVycl90eXBlID09IDB4ZmZmZjsKICAgICB1aW50MTZfdCBzdWJ0eXBlOwotICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlcjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKICAgICBvZl9vY3RldHNfdCBkYXRhOwogfTsKIApAQCAtMTY4Miw3ICsxNjgyLDcgQEAKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBwYWQoNCk7CiAKLSAgICB1aW50MzJfdCBmbGFnczsgICAgICAgCisgICAgdWludDMyX3QgZmxhZ3M7CiAgICAgdWludDMyX3QgdHhfZnJlcV9sbWRhOwogICAgIHVpbnQzMl90IHR4X29mZnNldDsKICAgICB1aW50MzJfdCB0eF9ncmlkX3NwYW47CkBAIC0xNzAxLDcgKzE3MDEsNyBAQAogICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CiAgICAgdWludDMyX3QgICAgICAgICBleHBfdHlwZTsKLSAgICBvZl9vY3RldHNfdCAgICAgIGV4cGVyaW1lbnRlcl9kYXRhOworICAgIC8qIG9mX29jdGV0c190ICAgICAgZXhwZXJpbWVudGVyX2RhdGE7ICBJbXBsZW1lbnRpbmcgcHJvcGVydHkgZGVmaW5lcyBmaWVsZHMuICovCiB9OwogCiBzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19lbnRyeSB7CkBAIC0xOTMzLDk4ICsxOTMzLDk4IEBACiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9ucyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMDsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICAvLyBGSVhNRSBDaGVjayBpZiBpbnN0cnVjdGlvbl90IGlzIHJpZ2h0IGZvciBpZHMgaGVyZQogICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25faWRfdCkgICBpbnN0cnVjdGlvbl9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfaW5zdHJ1Y3Rpb25zX21pc3MoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDE7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl9pbnN0cnVjdGlvbl9pZF90KSAgIGluc3RydWN0aW9uX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9uZXh0X3RhYmxlcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMjsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQ4X3QpIG5leHRfdGFibGVfaWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9uZXh0X3RhYmxlc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXNfbWlzcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMzsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQ4X3QpIG5leHRfdGFibGVfaWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9hY3Rpb25zIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9ucyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNDsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX2FjdGlvbl9pZF90KSBhY3Rpb25faWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9hY3Rpb25zX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9hY3Rpb25zX21pc3MoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDU7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X2FjdGlvbnMoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9uc19taXNzKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA3OwogICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX21hdGNoIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbWF0Y2goYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDg7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd2lsZGNhcmRzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd2lsZGNhcmRzKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxMDsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9zZXRmaWVsZCA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX3NldGZpZWxkKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxMjsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9zZXRmaWVsZF9taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfc2V0ZmllbGRfbWlzcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTM7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfc2V0ZmllbGQgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9hcHBseV9zZXRmaWVsZChhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTQ7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfc2V0ZmllbGRfbWlzcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X3NldGZpZWxkX21pc3MoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDE1OwogICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgIGxpc3Qob2ZfdWludDMyX3QpIG94bV9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3RhYmxlX3N5bmNfZnJvbSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3RhYmxlX3N5bmNfZnJvbShhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTY7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50OF90KSB0YWJsZV9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlcihhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNjU1MzQ7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgdWludDMyX3QgICAgICAgICBleHBlcmltZW50ZXIgPT0gPzsKQEAgLTIwMzIsNyArMjAzMiw3IEBACiAgICAgb2Zfb2N0ZXRzX3QgICAgICBleHBlcmltZW50ZXJfZGF0YTsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfZXhwZXJpbWVudGVyX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9leHBlcmltZW50ZXJfbWlzcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNjU1MzU7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgdWludDMyX3QgICAgICAgICBleHBlcmltZW50ZXIgPT0gPzsKQEAgLTIxNzAsNyArMjE3MCw3IEBACiAgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICAgcGFkKDQpOwogICAgIHVpbnQzMl90IHR5cGVzOwotICAgIHVpbnQzMl90IGNhcGFiaWxpdGllczsKKyAgICBlbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfc2VsZWN0OwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfaW5kaXJlY3Q7CkBAIC0yMzMzLDYgKzIzMzMsOCBAQAogICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTU7CiAgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKICAgICBwYWQoNCk7CisgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CisgICAgdWludDMyX3QgcXVldWVfaWQ7CiB9OwogCiBzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wIHsKQEAgLTI0MDYsNyArMjQwOCw3IEBACiAKIHN0cnVjdCBvZl9tZXRlcl9jb25maWcgewogICAgIHVpbnQxNl90ICAgICAgICBsZW5ndGg7Ci0gICAgdWludDE2X3QgICAgICAgIGZsYWdzOworICAgIGVudW0gb2ZwX21ldGVyX2ZsYWdzICAgICAgICBmbGFnczsKICAgICB1aW50MzJfdCAgICAgICAgbWV0ZXJfaWQ7CiAgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGVudHJpZXM7CiB9OwpAQCAtMjY0Miw3ICsyNjQ0LDcgQEAKICAgICB1aW50OF90IHR5cGUgPT0gMzA7CiAgICAgdWludDE2X3QgbGVuZ3RoOwogICAgIHVpbnQzMl90IHhpZDsKLSAgICB1aW50MzJfdCByb2xlOworICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOwogICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZV9yZWFzb24gcmVhc29uOwogICAgIHBhZCgzKTsKICAgICB1aW50NjRfdCBnZW5lcmF0aW9uX2lkOwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS41IGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGE4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjUKQEAgLTAsMCArMSwzNjEwIEBACisKKyN2ZXJzaW9uIDYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNQUNSTyBERUZJTklUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2VudW0gbWFjcm9fZGVmaW5pdGlvbnMgeworICAgIE9GUF9NQVhfVEFCTEVfTkFNRV9MRU4gPSAzMiwKKyAgICBPRlBfTUFYX1BPUlRfTkFNRV9MRU4gPSAxNiwKKworICAgIE9GUF9UQ1BfUE9SVCA9IDY2NTMsCisgICAgT0ZQX1NTTF9QT1JUID0gNjY1MywKKworICAgIE9GUF9FVEhfQUxFTiA9IDYsCisKKyAgICBPRlBfREVGQVVMVF9NSVNTX1NFTkRfTEVOID0gMTI4LAorCisgICAgT0ZQX1ZMQU5fTk9ORSA9IDAsCisKKyAgICBPRlBfRkxPV19QRVJNQU5FTlQgPSAwLAorCisgICAgT0ZQX0RFRkFVTFRfUFJJT1JJVFkgPSAweDgwMDAsCisKKyAgICBPRlBfTk9fQlVGRkVSID0gMHhmZmZmZmZmZiwKKworICAgIERFU0NfU1RSX0xFTiA9IDI1NiwKKyAgICBTRVJJQUxfTlVNX0xFTiA9IDMyLAorCisgICAgT0ZQUV9BTEwgPSAweGZmZmZmZmZmLAorICAgIE9GUFFfTUFYX1JBVEVfVU5DRkcgPSAweGZmZmYsCisgICAgT0ZQUV9NSU5fUkFURV9VTkNGRyA9IDB4ZmZmZiwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BFQ0lBTCBTVFJVQ1RVUkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IG9mX3VpbnQ2NCB7CisgICAgdWludDY0X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfdWludDMyIHsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl91aW50OCB7CisgICAgdWludDhfdCB2YWx1ZTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSEVBREVSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVHlwZSBmb3IgaGVhZGVyICovCitlbnVtIG9mcF90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQVF9IRUxMTyA9IDAsCisgICAgT0ZQVF9FUlJPUiA9IDEsCisgICAgT0ZQVF9FQ0hPX1JFUVVFU1QgPSAyLAorICAgIE9GUFRfRUNIT19SRVBMWSA9IDMsCisgICAgT0ZQVF9FWFBFUklNRU5URVIgPSA0LAorICAgIE9GUFRfRkVBVFVSRVNfUkVRVUVTVCA9IDUsCisgICAgT0ZQVF9GRUFUVVJFU19SRVBMWSA9IDYsCisgICAgT0ZQVF9HRVRfQ09ORklHX1JFUVVFU1QgPSA3LAorICAgIE9GUFRfR0VUX0NPTkZJR19SRVBMWSA9IDgsCisgICAgT0ZQVF9TRVRfQ09ORklHID0gOSwKKyAgICBPRlBUX1BBQ0tFVF9JTiA9IDEwLAorICAgIE9GUFRfRkxPV19SRU1PVkVEID0gMTEsCisgICAgT0ZQVF9QT1JUX1NUQVRVUyA9IDEyLAorICAgIE9GUFRfUEFDS0VUX09VVCA9IDEzLAorICAgIE9GUFRfRkxPV19NT0QgPSAxNCwKKyAgICBPRlBUX0dST1VQX01PRCA9IDE1LAorICAgIE9GUFRfUE9SVF9NT0QgPSAxNiwKKyAgICBPRlBUX1RBQkxFX01PRCA9IDE3LAorICAgIE9GUFRfU1RBVFNfUkVRVUVTVCA9IDE4LCAvKiBU/G0gc/xy/G1sZXIgaedpbiBheW79IG9sc3VuIGRpeWUgbXVsdGlwYXJ0IHllcmluZSBzdGF0cyAqLworICAgIE9GUFRfU1RBVFNfUkVQTFkgPSAxOSwgLyogVPxtIHP8cvxtbGVyIGnnaW4gYXlu/SBvbHN1biBkaXllIG11bHRpcGFydCB5ZXJpbmUgc3RhdHMgKi8KKyAgICBPRlBUX0JBUlJJRVJfUkVRVUVTVCA9IDIwLAorICAgIE9GUFRfQkFSUklFUl9SRVBMWSA9IDIxLAorICAgIE9GUFRfUk9MRV9SRVFVRVNUID0gMjQsCisgICAgT0ZQVF9ST0xFX1JFUExZID0gMjUsCisgICAgT0ZQVF9HRVRfQVNZTkNfUkVRVUVTVCA9IDI2LAorICAgIE9GUFRfR0VUX0FTWU5DX1JFUExZID0gMjcsCisgICAgT0ZQVF9TRVRfQVNZTkMgPSAyOCwKKyAgICBPRlBUX01FVEVSX01PRCA9IDI5LAorICAgIE9GUFRfUk9MRV9TVEFUVVMgPSAzMCwKKyAgICBPRlBUX1RBQkxFX1NUQVRVUyA9IDMxLAorICAgIE9GUFRfUkVRVUVTVEZPUldBUkQgPSAzMiwKKyAgICBPRlBUX0JVTkRMRV9DT05UUk9MID0gMzMsCisgICAgT0ZQVF9CVU5ETEVfQUREX01FU1NBR0UgPSAzNCwKKyAgICBPRlBUX0NPTlRST0xMRVJfU1RBVFVTID0gMzUsIC8qIDEuNCBkZW4gc29ucmEgeWVuaSBnZWxtaXMgKi8KK307CisKKy8qIEhlYWRlciBvbiBhbGwgT3BlbkZsb3cgcGFja2V0cyAqLworc3RydWN0IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhFQURFUiBUWVBFUyAoRk9SIERJRkZFUkVOVCBQQUNLRVRTKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE5hbWVzcGFjZXMgKi8KKy8qIFVzZWQgaW4gaGVhZGVyX3R5cGUgKi8KK2VudW0gb2ZwX2hlYWRlcl90eXBlX25hbWVzcGFjZSh3aXJlX3R5cGU9dWludDE2X3QsIHN0YWJsZT1UcnVlKSB7CisgICAgT0ZQSFROX09ORiA9IDAsCisgICAgT0ZQSFROX0VUSEVSVFlQRSA9IDEsCisgICAgT0ZQSFROX0lQX1BST1RPID0gMiwKKyAgICBPRlBIVE5fVURQX1RDUF9QT1JUID0gMywKKyAgICBPRlBIVE5fSVBWNF9PUFRJT04gPSA0LAorfTsKKworLyogT05GIG5hbWVzcGFjZXMgKi8KK2VudW0gb2ZwX2hlYWRlcl90eXBlX29uZih3aXJlX3R5cGU9dWludDE2X3QsIHN0YWJsZT1UcnVlLCBjb21wbGV0ZT1GYWxzZSkgeworICAgIE9GUEhUT19FVEhFUk5FVCA9IDAsCisgICAgT0ZQSFRPX05PX0hFQURFUiA9IDEsCisgICAgT0ZQSFRPX09YTV9FWFBFUklNRU5URVIgPSAweEZGRkYsCit9OworCisvKiBIZWFkZXIgdHlwZSBzdHJ1Y3R1cmUuICovCitzdHJ1Y3Qgb2ZfaGVhZGVyX3R5cGUgeworICAgIGVudW0gb2ZwX2hlYWRlcl90eXBlX25hbWVzcGFjZSBuYW1lc3BhY2UgPT0gPzsKKyAgICB1aW50MTZfdCBuc190eXBlOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBPUlQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogUG9ydCBudW1iZXJpbmcgKi8KKy8qIFT8bSBz/HL8bWxlciBp52luIGF5bv0gb2xzdW4gZGl5ZSBvZnBfcG9ydF9ubyB5ZXJpbmUgcG9ydCAqLworZW51bSBvZnBfcG9ydCh3aXJlX3R5cGU9dWludDMyX3QpIHsKKyAgICBPRlBQX01BWCA9IDB4ZmZmZmZmMDAsCisgICAgT0ZQUF9VTlNFVCA9IDB4ZmZmZmZmZjcsCisgICAgT0ZQUF9JTl9QT1JUID0gMHhmZmZmZmZmOCwKKyAgICBPRlBQX1RBQkxFID0gMHhmZmZmZmZmOSwKKyAgICBPRlBQX05PUk1BTCA9IDB4ZmZmZmZmZmEsCisgICAgT0ZQUF9GTE9PRCA9IDB4ZmZmZmZmZmIsCisgICAgT0ZQUF9BTEwgPSAweGZmZmZmZmZjLAorICAgIE9GUFBfQ09OVFJPTExFUiA9IDB4ZmZmZmZmZmQsCisgICAgT0ZQUF9MT0NBTCA9IDB4ZmZmZmZmZmUsCisgICAgT0ZQUF9BTlkgPSAweGZmZmZmZmZmLAorfTsKKworLyogRmxhZ3MgdG8gaW5kaWNhdGUgYmVoYXZpb3Igb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KKy8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjIGFuZCBvZnBfcG9ydF9tb2QgbWVzc2FnZSAqLworZW51bSBvZnBfcG9ydF9jb25maWcod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBQQ19QT1JUX0RPV04gPSAweDEsCisgICAgT0ZQUENfTk9fUkVDViA9IDB4NCwKKyAgICBPRlBQQ19OT19GV0QgPSAweDIwLAorICAgIE9GUFBDX05PX1BBQ0tFVF9JTiA9IDB4NDAsCisgICAgT0ZQUENfQlNOX01JUlJPUl9ERVNUID0gMHg4MDAwMDAwMCwgLyogaGVhZGVyIGRvc3lhbGFy/W5kYSBidWx1bm11eW9yICovCit9OworCisvKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCisvKiBOb3QgY29uZmlndXJhYmxlIGZyb20gdGhlIGNvbnRyb2xsZXIgKi8KKy8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjICovCitlbnVtIG9mcF9wb3J0X3N0YXRlKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQUFNfTElOS19ET1dOID0gMHgxLAorICAgIE9GUFBTX0JMT0NLRUQgPSAweDIsCisgICAgT0ZQUFNfTElWRSA9IDB4NCwKK307CisKKy8qIFBvcnQgZGVzY3JpcHRpb24gcHJvcGVydHkgdHlwZXMgKi8KKy8qIG5vdCBpbiBiZWZvcmUgKi8KKy8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjX3Byb3BfZXRoZXJuZXQgKi8KK2VudW0gb2ZwX3BvcnRfZGVzY19wcm9wX3R5cGUgeworICAgT0ZQUERQVF9FVEhFUk5FVCA9IDAsCisgICBPRlBQRFBUX09QVElDQUwgPSAxLAorICAgT0ZQUERQVF9QSVBFTElORV9JTlBVVCA9IDIsCisgICBPRlBQRFBUX1BJUEVMSU5FX09VVFBVVCA9IDMsCisgICBPRlBQRFBUX1JFQ0lSQ1VMQVRFID0gNCwKKyAgIE9GUFBEUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworLyogRmVhdHVyZXMgb2YgcG9ydHMgYXZhaWxhYmxlIGluIGEgZGF0YXBhdGguICovCitlbnVtIG9mcF9wb3J0X2ZlYXR1cmVzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQUEZfMTBNQl9IRCA9IDB4MSwKKyAgICBPRlBQRl8xME1CX0ZEID0gMHgyLAorICAgIE9GUFBGXzEwME1CX0hEID0gMHg0LAorICAgIE9GUFBGXzEwME1CX0ZEID0gMHg4LAorICAgIE9GUFBGXzFHQl9IRCA9IDB4MTAsCisgICAgT0ZQUEZfMUdCX0ZEID0gMHgyMCwKKyAgICBPRlBQRl8xMEdCX0ZEID0gMHg0MCwKKyAgICBPRlBQRl80MEdCX0ZEID0gMHg4MCwKKyAgICBPRlBQRl8xMDBHQl9GRCA9IDB4MTAwLAorICAgIE9GUFBGXzFUQl9GRCA9IDB4MjAwLAorICAgIE9GUFBGX09USEVSID0gMHg0MDAsCisgICAgT0ZQUEZfQ09QUEVSID0gMHg4MDAsCisgICAgT0ZQUEZfRklCRVIgPSAweDEwMDAsCisgICAgT0ZQUEZfQVVUT05FRyA9IDB4MjAwMCwKKyAgICBPRlBQRl9QQVVTRSA9IDB4NDAwMCwKKyAgICBPRlBQRl9QQVVTRV9BU1lNID0gMHg4MDAwLAorICAgIE9GUFBGX0JTTl9CUkVBS09VVF9DQVBBQkxFID0gMHg4MDAwMDAwMCwgLyogbm90IGluIHNwZWMuICovCit9OworCisvKiBGZWF0dXJlcyBvZiBvcHRpY2FsIHBvcnRzIGF2YWlsYWJsZSBpbiBzd2l0Y2guICovCitlbnVtIG9mcF9vcHRpY2FsX3BvcnRfZmVhdHVyZXMod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBPUEZfUlhfVFVORSA9IDB4MSwKKyAgICBPRlBPUEZfVFhfVFVORSA9IDB4MiwKKyAgICBPRlBPUEZfVFhfUFdSID0gMHg0LAorICAgIE9GUE9QRl9VU0VfRlJFUSA9IDB4OCwKK307CisKKy8qIERlc2NyaXB0aW9uIG9mIGEgcG9ydCAqLworLyogVPxtIHP8cvxtbGVyIGnnaW4gYXlu/SBvbHN1biBkaXllIG9mcF9wb3J0IHllcmluZSBvZl9wb3J0X2Rlc2MgKi8KK3N0cnVjdCBvZl9wb3J0X2Rlc2MgeworICAgIG9mX3BvcnRfbm9fdCBwb3J0X25vOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoMik7CisgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOworICAgIHBhZCgyKTsKKyAgICBvZl9wb3J0X25hbWVfdCBuYW1lOworICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIGNvbmZpZzsgLyogQml0bWFwIG9mIE9GUFBDXyogZmxhZ3MuICovCisgICAgZW51bSBvZnBfcG9ydF9zdGF0ZSBzdGF0ZTsgLyogQml0bWFwIG9mIE9GUFBTXyogZmxhZ3MuICovCisgICAgbGlzdChvZl9wb3J0X2Rlc2NfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHBvcnQgZGVzY3JpcHRpb24gcHJvcGVydGllcy4gKi8KK3N0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKKy8qIEV0aGVybmV0IHBvcnQgZGVzY3JpcHRpb24gcHJvcGVydHkuICovCitzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfZXRoZXJuZXQgOiBvZl9wb3J0X2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgY3VycjsKKyAgICB1aW50MzJfdCBhZHZlcnRpc2VkOworICAgIHVpbnQzMl90IHN1cHBvcnRlZDsKKyAgICB1aW50MzJfdCBwZWVyOworICAgIHVpbnQzMl90IGN1cnJfc3BlZWQ7CisgICAgdWludDMyX3QgbWF4X3NwZWVkOworfTsKKworLyogT3B0aWNhbCBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX29wdGljYWwgOiBvZl9wb3J0X2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3Qgc3VwcG9ydGVkOworICAgIHVpbnQzMl90IHR4X21pbl9mcmVxX2xtZGE7CisgICAgdWludDMyX3QgdHhfbWF4X2ZyZXFfbG1kYTsKKyAgICB1aW50MzJfdCB0eF9ncmlkX2ZyZXFfbG1kYTsKKyAgICB1aW50MzJfdCByeF9taW5fZnJlcV9sbWRhOworICAgIHVpbnQzMl90IHJ4X21heF9mcmVxX2xtZGE7CisgICAgdWludDMyX3QgcnhfZ3JpZF9mcmVxX2xtZGE7CisgICAgdWludDE2X3QgdHhfcHdyX21pbjsKKyAgICB1aW50MTZfdCB0eF9wd3JfbWF4OworfTsKKworLyogSW5ncmVzcyBwaXBlbGluZSBmaWVsZHMgZGVzY3JpcHRpb24gcHJvcGVydHkgKi8KKy8qIEluIDEuNS4xIHNwZWMgb2ZwX3BvcnRfZGVzY19wcm9wX294bSAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2luZ3Jlc3MgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2Zfb2N0ZXRzX3Qgb3htX2lkczsKK307CisKKy8qIEVncmVzcyBwaXBlbGluZSBmaWVsZHMgZGVzY3JpcHRpb24gcHJvcGVydHkgKi8KKy8qIEluIDEuNS4xIHNwZWMgb2ZwX3BvcnRfZGVzY19wcm9wX294bSAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2VncmVzcyB7CisgICAgdWludDE2X3QgdHlwZSA9PSAzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9vY3RldHNfdCBveG1faWRzOworfTsKKworLyogUmVjaXJjdWxhdGUgcG9ydCBkZXNjcmlwdGlvbiBwcm9wZXJ0eS4gKi8KK3N0cnVjdCBvZnBfcG9ydF9kZXNjX3Byb3BfcmVjaXJjdWxhdGUgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2Zfb2N0ZXRzX3QgcG9ydF9ub3M7Cit9OworCisKKy8qIEV4cGVyaW1lbnRlciBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3BvcnRfZGVzY19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgZXhwX3R5cGU7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGTE9XIE1BVENIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE1hdGNoIFR5cGUgKi8KKy8qIFN0YW5kYXJkIGRlcHJlY2F0ZWQgb2xtdf4gKi8KK2VudW0gb2ZwX21hdGNoX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTVRfU1RBTkRBUkQgPSAwLAorICAgIE9GUE1UX09YTSA9IDEsCit9OworCisvKiBPWE0gQ2xhc3MgSURzICovCitlbnVtIG9mcF9veG1fY2xhc3Mod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQWE1DX05YTV8wID0gMCwKKyAgICBPRlBYTUNfTlhNXzEgPSAxLAorICAgIE9GUFhNQ19PUEVORkxPV19CQVNJQyA9IDB4ODAwMCwKKyAgICBPRlBYTUNfUEFDS0VUX1JFR1MgPSAweDgwMDEsCisgICAgT0ZQWE1DX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKworLyogVkxBTiBpZCBzZXQgb3Igbm90ICovCitlbnVtIG9mcF92bGFuX2lkKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUFZJRF9OT05FID0gMCwKKyAgICBPRlBWSURfUFJFU0VOVCA9IDB4MTAwMCwKK307CisKKy8vIEZJWE1FOiBPRiBzcGVjIHNwZWNpZmllZCB0aGlzIGFzICc5JyBiaXRzLCBpbXBsaWNpdGx5IGFkZGluZyB0byBmdWxsIGJ5dGUKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgSVB2NiBFeHRlbnNpb24gSGVhZGVyIHBzZXVkby1maWVsZC4gKi8KK2VudW0gb2ZwX2lwdjZleHRoZHJfZmxhZ3Mod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBJRUhfTk9ORVhUID0gMHgxLAorICAgIE9GUElFSF9FU1AgPSAweDIsCisgICAgT0ZQSUVIX0FVVEggPSAweDQsCisgICAgT0ZQSUVIX0RFU1QgPSAweDgsCisgICAgT0ZQSUVIX0ZSQUcgPSAweDEwLAorICAgIE9GUElFSF9ST1VURVIgPSAweDIwLAorICAgIE9GUElFSF9IT1AgPSAweDQwLAorICAgIE9GUElFSF9VTlJFUCA9IDB4ODAsCisgICAgT0ZQSUVIX1VOU0VRID0gMHgxMDAsCit9OworCisvKiBGbG93IE1hdGNoICovCisvKiBzdGFuZGFyZC0xLjAgaedpbmRlIHYxIG9sYXJhayB2YXIgKi8KKy8qIHN0YW5kYXJkLTEuMSBp52luZGUgdjIgb2xhcmFrIHZhciAqLworLyogc3RhbmRhcmQtMS4yIGRlbiBpdGliYXJlbiB2MyBvbGFyYWsgZGXwaf5taf4gdmUgb3htIGNsYXNzbGFy/SBvbHX+dHVydWxtdf4gKi8KK3N0cnVjdCBvZl9tYXRjaF92MyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGxpc3Qob2Zfb3htX3QpIG94bV9saXN0OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZMT1cgU1RBVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogc3RhdHMgb3hzIGNsYXNzICovCisvKiBub3QgaW4gMS40ICAqLworZW51bSBvZnBfb3hzX2NsYXNzKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUFhTQ19PUEVORkxPV19CQVNJQyA9IDB4ODAwMiwKKyAgICBPRlBYU0NfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworc3RydWN0IG9mX3N0YXRfdjYgKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSl7CisgICAgcGFkKDIpOyAvKiByZXNlcnZlZCAqLworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBsaXN0KG9mX294c190KSBveHNfZmllbGRzOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGTE9XIElOU1RSVUNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaW5zdHJ1Y3Rpb24gdHlwZXMgKi8KK2VudW0gb2ZwX2luc3RydWN0aW9uX3R5cGUod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBJVF9HT1RPX1RBQkxFID0gMHgxLAorICAgIE9GUElUX1dSSVRFX01FVEFEQVRBID0gMHgyLAorICAgIE9GUElUX1dSSVRFX0FDVElPTlMgPSAweDMsCisgICAgT0ZQSVRfQVBQTFlfQUNUSU9OUyA9IDB4NCwKKyAgICBPRlBJVF9DTEVBUl9BQ1RJT05TID0gMHg1LAorICAgIE9GUElUX0RFUFJFQ0FURUQgPSAweDYsCisgICAgT0ZQSVRfU1RBVF9UUklHR0VSID0gMHg3LAorICAgIE9GUElUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKy8qIHN0YXQgdHJpZ2dlciBpbnN0cnVjdGlvbiBmbGFncyAqLworLyogbm90IGluIDEuNCAqLworZW51bSBvZnBfc3RhdF90cmlnZ2VyX2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQU1RGX1BFUklPRElDID0gMHgxLAorICAgIE9GUFNURl9PTkxZX0ZJUlNUID0gMHgyLAorfTsKKworLyogSW5zdHJ1Y3Rpb24gSGVhZGVyICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW47Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX0dPVE9fVEFCTEUgKi8KK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl9nb3RvX3RhYmxlIDogb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX1dSSVRFX01FVEFEQVRBICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fd3JpdGVfbWV0YWRhdGEgOiBvZl9pbnN0cnVjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyOworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNCk7CisgICAgdWludDY0X3QgbWV0YWRhdGE7CisgICAgdWludDY0X3QgbWV0YWRhdGFfbWFzazsKK307CisKKy8qIEluc3RydWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQSVRfV1JJVEUgKi8KK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl93cml0ZV9hY3Rpb25zIDogb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX0FQUExZICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYXBwbHlfYWN0aW9ucyA6IG9mX2luc3RydWN0aW9uIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDQ7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKKyAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOworfTsKKworLyogSW5zdHJ1Y3Rpb24gc3RydWN0dXJlIGZvciBPRlBJVF9DTEVBUiAqLworc3RydWN0IG9mX2luc3RydWN0aW9uX2NsZWFyX2FjdGlvbnMgOiBvZl9pbnN0cnVjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA1OworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNCk7Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX1NUQVRfVFJJR0dFUiAqLworLyogbm90IGluIDEuNCAqLworc3RydWN0IG9mX2luc3RydWN0aW9uX3N0YXRfdHJpZ2dlciA6IG9mX2luc3RydWN0aW9uIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDc7CisgICAgdWludDE2X3QgbGVuOworICAgIGVudW0gb2ZwX3N0YXRfdHJpZ2dlcl9mbGFncyBmbGFnczsKKyAgICBsaXN0KG9mX294c190KSB0aHJlc2hvbGRzOworfTsKKworLyogSW5zdHJ1Y3Rpb24gc3RydWN0dXJlIGZvciBleHBlcmltZW50YWwgaW5zdHJ1Y3Rpb25zICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fZXhwZXJpbWVudGVyIDogb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUNUSU9OIFNUUlVDVFVSRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYWN0aW9uIHR5cGVzICovCitlbnVtIG9mcF9hY3Rpb25fdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBBVF9PVVRQVVQgPSAwLAorICAgIE9GUEFUX0NPUFlfVFRMX09VVCA9IDB4YiwKKyAgICBPRlBBVF9DT1BZX1RUTF9JTiA9IDB4YywKKyAgICBPRlBBVF9TRVRfTVBMU19UVEwgPSAweGYsCisgICAgT0ZQQVRfREVDX01QTFNfVFRMID0gMHgxMCwKKyAgICBPRlBBVF9QVVNIX1ZMQU4gPSAweDExLAorICAgIE9GUEFUX1BPUF9WTEFOID0gMHgxMiwKKyAgICBPRlBBVF9QVVNIX01QTFMgPSAweDEzLAorICAgIE9GUEFUX1BPUF9NUExTID0gMHgxNCwKKyAgICBPRlBBVF9TRVRfUVVFVUUgPSAweDE1LAorICAgIE9GUEFUX0dST1VQID0gMHgxNiwKKyAgICBPRlBBVF9TRVRfTldfVFRMID0gMHgxNywKKyAgICBPRlBBVF9ERUNfTldfVFRMID0gMHgxOCwKKyAgICBPRlBBVF9TRVRfRklFTEQgPSAweDE5LAorICAgIE9GUEFUX1BVU0hfUEJCID0gMHgxYSwKKyAgICBPRlBBVF9QT1BfUEJCID0gMHgxYiwKKyAgICBPRlBBVF9DT1BZX0ZJRUxEID0gMHgxYywKKyAgICBPRlBBVF9NRVRFUiA9IDB4MWQsCisgICAgT0ZQQVRfRVhQRVJJTUVOVEVSID0gMHhmZmZmLAorfTsKKworLyogQWN0aW9uIGhlYWRlciB0aGF0IGlzIGNvbW1vbiB0byBhbGwgYWN0aW9ucyAqLworc3RydWN0IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbjsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX09VVFBVVCAqLworc3RydWN0IG9mX2FjdGlvbl9vdXRwdXQgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKKyAgICB1aW50MTZfdCBsZW47CisgICAgb2ZfcG9ydF9ub190IHBvcnQ7CisgICAgdWludDE2X3QgbWF4X2xlbjsKKyAgICBwYWQoNik7Cit9OworCisvKlRoZSBtYXhfbGVuIGluZGljYXRlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSBmcm9tIGEgcGFja2V0IHRoYXQgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgcG9ydCBpcyBPRlBQX0NPTlRST0xMRVIqLworZW51bSBvZnBfY29udHJvbGxlcl9tYXhfbGVuKHdpcmVfdHlwZT11aW50MTZfdCwgY29tcGxldGU9RmFsc2UpIHsKKyAgICBPRlBDTUxfTUFYID0gMHhmZmU1LAorICAgIE9GUENNTF9OT19CVUZGRVIgPSAweGZmZmYsCit9OworCisvKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9HUk9VUC4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fZ3JvdXAgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjI7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX1FVRVVFLiAqLworc3RydWN0IG9mX2FjdGlvbl9zZXRfcXVldWUgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjE7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IHF1ZXVlX2lkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfTUVURVIgKi8KK3N0cnVjdCBvZl9hY3Rpb25fbWV0ZXIgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjk7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IG1ldGVyX2lkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX01QTFNfVFRMLiAqLworc3RydWN0IG9mX2FjdGlvbl9zZXRfbXBsc190dGwgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQ4X3QgbXBsc190dGw7CisgICAgcGFkKDMpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9UVExfT1VUICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX2NvcHlfdHRsX291dCA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9UVExfSU4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fY29weV90dGxfaW4gOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTI7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX0RFQ19NUExTX1RUTCAqLworc3RydWN0IG9mX2FjdGlvbl9kZWNfbXBsc190dGwgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTY7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX0RFQ19OV19UVEwgKi8KK3N0cnVjdCBvZl9hY3Rpb25fZGVjX253X3R0bCA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyNDsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfUE9QX1ZMQU4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fcG9wX3ZsYW4gOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9QQkIgKi8KK3N0cnVjdCBvZl9hY3Rpb25fcG9wX3BiYiA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyNzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX05XX1RUTC4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fc2V0X253X3R0bCA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyMzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDhfdCBud190dGw7CisgICAgcGFkKDMpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfUFVTSF9WTEFOICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX3B1c2hfdmxhbiA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDE2X3QgZXRoZXJ0eXBlOworICAgIHBhZCgyKTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BVU0hfTVBMUyAqLworc3RydWN0IG9mX2FjdGlvbl9wdXNoX21wbHMgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQxNl90IGV0aGVydHlwZTsKKyAgICBwYWQoMik7Cit9OworCisvKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9QVVNIX1BCQiAqLworc3RydWN0IG9mX2FjdGlvbl9wdXNoX3BiYiA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyNjsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDE2X3QgZXRoZXJ0eXBlOworICAgIHBhZCgyKTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9NUExTICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX3BvcF9tcGxzIDogb2ZfYWN0aW9uIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDIwOworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MTZfdCBldGhlcnR5cGU7CisgICAgcGFkKDIpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX0ZJRUxEICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX3NldF9maWVsZChhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249VHJ1ZSkgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjU7CisgICAgdWludDE2X3QgbGVuOworICAgIG9mX294bV90IGZpZWxkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9GSUVMRCAqLworLyogbm90IGluIDEuNCAqLworc3RydWN0IG9mcF9hY3Rpb25fY29weV9maWVsZCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyODsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDE2X3Qgbl9iaXRzOworICAgIHVpbnQxNl90IHNyY19vZmZzZXQ7CisgICAgdWludDE2X3QgZHN0X29mZnNldDsKKyAgICBwYWQoMik7CisgICAgbGlzdChvZl9veG1fdCkgb3htX2lkczsKK307CisKKy8qIEFjdGlvbiBoZWFkZXIgZm9yIE9GUEFUX0VYUEVSSU1FTlRFUiAqLworc3RydWN0IG9mX2FjdGlvbl9leHBlcmltZW50ZXIoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPVRydWUpOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDT05UUk9MTEVSIFNUQVRVUyBTVFJVQ1RVUkUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogbm90IGluIDEuNCAqLworCisvKiBXaHkgaXMgdGhlIGNvbnRyb2xsZXIgc3RhdHVzIGJlaW5nIHJlcG9ydGVkPyAqLworZW51bSBvZnBfY29udHJvbGxlcl9zdGF0dXNfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQQ1NSX1JFUVVFU1QgPSAwLAorICAgIE9GUENTUl9DSEFOTkVMX1NUQVRVUyA9IDEsCisgICAgT0ZQQ1NSX1JPTEUgPSAyLAorICAgIE9GUENTUl9DT05UUk9MTEVSX0FEREVEID0gMywKKyAgICBPRlBDU1JfQ09OVFJPTExFUl9SRU1PVkVEID0gNCwKKyAgICBPRlBDU1JfU0hPUlRfSUQgPSA1LAorICAgIE9GUENTUl9FWFBFUklNRU5URVIgPSA2LAorfTsKKworLyogQ29udHJvbCBjaGFubmVsIHN0YXR1cy4gKi8KK2VudW0gb2ZwX2NvbnRyb2xfY2hhbm5lbF9zdGF0dXMod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBDVF9TVEFUVVNfVVAgPSAwLAorICAgIE9GUENUX1NUQVRVU19ET1dOID0gMSwKK307CisKKy8qIENvbnRyb2xsZXIgc3RhdHVzIHByb3BlcnR5IHR5cGVzICovCitlbnVtIG9mcF9jb250cm9sbGVyX3N0YXR1c19wcm9wX3R5cGUgeworICAgIE9GUENTUFRfVVJJID0gMCwKKyAgICBPRlBDU1BUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBDb250cm9sbGVyIFN0YXR1cyBQcm9wZXJ0aWVzICovCitzdHJ1Y3Qgb2ZfY29udHJvbGxlcl9zdGF0dXNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IHNob3J0X2lkOworICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOworICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3JlYXNvbiByZWFzb247CisgICAgZW51bSBvZnBfY29udHJvbF9jaGFubmVsX3N0YXR1cyBjaGFubmVsX3N0YXR1czsKKyAgICBwYWQoNik7CisgICAgbGlzdChvZl9jb250cm9sbGVyX3N0YXR1c19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBCb2R5IG9mIE9GUE1QX0NPTlRST0xMRVJfU1RBVFVTIHJlcGx5IG1lc3NhZ2UgYW5kIGJvZHkgb2YgYXN5bmMgT0ZQVF9DT05UUk9MTEVSX1NUQVRVUyBtZXNzYWdlICovCitzdHJ1Y3Qgb2ZfY29udHJvbGxlcl9zdGF0dXMgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeV90IGVudHJ5OworfTsKKworLyogQ29ubmVjdGlvbiBVUkkgY29udHJvbGxlciBzdGF0dXMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZnBfY29udHJvbGxlcl9zdGF0dXNfcHJvcF91cmkgOiBvZl9jb250cm9sbGVyX3N0YXR1c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIG9mX2NvbnRyb2xsZXJfdXJpX3QgdXJpOworfTsKKworLyogRXhwZXJpbWVudGVyIGNvbnRyb2xsZXIgc3RhdHVzIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfY29udHJvbGxlcl9zdGF0dXNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUVTU0FHRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFwYXRoLiAqLworZW51bSBvZnBfY2FwYWJpbGl0aWVzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQQ19GTE9XX1NUQVRTID0gMHgxLAorICAgIE9GUENfVEFCTEVfU1RBVFMgPSAweDIsCisgICAgT0ZQQ19QT1JUX1NUQVRTID0gMHg0LAorICAgIE9GUENfR1JPVVBfU1RBVFMgPSAweDgsCisgICAgT0ZQQ19JUF9SRUFTTSA9IDB4MjAsCisgICAgT0ZQQ19RVUVVRV9TVEFUUyA9IDB4NDAsCisgICAgT0ZQQ19QT1JUX0JMT0NLRUQgPSAweDEwMCwKKyAgICBPRlBDX0JVTkRMRVMgPSAweDIwMCwKKyAgICBPRlBDX0ZMT1dfTU9OSVRPUklORyA9IDB4NDAwLAorfTsKKworLyogSGFuZGxpbmcgb2YgSVAgZnJhZ21lbnRzLiAqLworZW51bSBvZnBfY29uZmlnX2ZsYWdzKHdpcmVfdHlwZT11aW50MTZfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQQ19GUkFHX05PUk1BTCA9IDAsCisgICAgT0ZQQ19GUkFHX0RST1AgPSAxLAorICAgIE9GUENfRlJBR19SRUFTTSA9IDIsCisgICAgT0ZQQ19GUkFHX01BU0sgPSAzLAorfTsKKworLyogVGFibGUgbnVtYmVyaW5nLiBUYWJsZXMgY2FuIHVzZSBhbnkgbnVtYmVyIHVwIHRvIE9GUFRfTUFYLiAqLworZW51bSBvZnBfdGFibGUod2lyZV90eXBlPXVpbnQ4X3QsIGNvbXBsZXRlPUZhbHNlKSB7CisgICAgT0ZQVFRfTUFYID0gMHhmZSwKKyAgICBPRlBUVF9BTEwgPSAweGZmLAorfTsKKworCisvKiBGbGFncyB0byBjb25maWd1cmUgdGhlIHRhYmxlLiAqLworZW51bSBvZnBfdGFibGVfY29uZmlnKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQVENfREVQUkVDQVRFRF9NQVNLID0gMHgzLAorICAgIE9GUFRDX0VWSUNUSU9OID0gMHg0LAorICAgIE9GUFRDX1ZBQ0FOQ1lfRVZFTlRTID0gMHg4LAorfTsKKworLyogRXZpY3Rpb24gZmxhZ3MuICovCitlbnVtIG9mcF90YWJsZV9tb2RfcHJvcF9ldmljdGlvbl9mbGFnKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQVE1QRUZfT1RIRVIgPSAweDEsCisgICAgT0ZQVE1QRUZfSU1QT1JUQU5DRSA9IDB4MiwKKyAgICBPRlBUTVBFRl9MSUZFVElNRSA9IDB4NCwKK307CisKKy8qIGZsb3cgbW9kIGNvbW1hbmQgKi8KK2VudW0gb2ZwX2Zsb3dfbW9kX2NvbW1hbmQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBGQ19BREQgPSAwLAorICAgIE9GUEZDX01PRElGWSA9IDEsCisgICAgT0ZQRkNfTU9ESUZZX1NUUklDVCA9IDIsCisgICAgT0ZQRkNfREVMRVRFID0gMywKKyAgICBPRlBGQ19ERUxFVEVfU1RSSUNUID0gNCwKK307CisKKy8qIGZsb3cgbW9kIGZsYWdzICovCitlbnVtIG9mcF9mbG93X21vZF9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEZGX1NFTkRfRkxPV19SRU0gPSAweDEsCisgICAgT0ZQRkZfQ0hFQ0tfT1ZFUkxBUCA9IDB4MiwKKyAgICBPRlBGRl9SRVNFVF9DT1VOVFMgPSAweDQsCisgICAgT0ZQRkZfTk9fUEtUX0NPVU5UUyA9IDB4OCwKKyAgICBPRlBGRl9OT19CWVRfQ09VTlRTID0gMHgxMCwKKworICAgIC8qIE5vbi1zdGFuZGFyZCwgZW5hYmxlZCBieSBhbiBleHBlcmltZW50ZXIgbWVzc2FnZSAqLworICAgIC8qIFNlZSB0aGUgYnNuX2Zsb3dfaWRsZSBpbnB1dCBmaWxlICovCisgICAgT0ZQRkZfQlNOX1NFTkRfSURMRSA9IDB4ODAsCit9OworCisvKiBHcm91cCBjb21tYW5kcyAqLworZW51bSBvZnBfZ3JvdXBfbW9kX2NvbW1hbmQod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQR0NfQUREID0gMCwKKyAgICBPRlBHQ19NT0RJRlkgPSAxLAorICAgIE9GUEdDX0RFTEVURSA9IDIsCisgICAgT0ZQR0NfSU5TRVJUX0JVQ0tFVCA9IDMsCisgICAgT0ZQR0NfUkVNT1ZFX0JVQ0tFVCA9IDUsCit9OworCisvKiBHcm91cCB0eXBlcyAqLworZW51bSBvZnBfZ3JvdXBfdHlwZSh3aXJlX3R5cGU9dWludDhfdCkgeworICAgIE9GUEdUX0FMTCA9IDAsCisgICAgT0ZQR1RfU0VMRUNUID0gMSwKKyAgICBPRlBHVF9JTkRJUkVDVCA9IDIsCisgICAgT0ZQR1RfRkYgPSAzLAorfTsKKworLyogR3JvdXAgbnVtYmVyaW5nLiBHcm91cHMgY2FuIHVzZSBhbnkgbnVtYmVyIHVwIHRvIE9GUEdfTUFYLiAqLworZW51bSBvZnBfZ3JvdXAod2lyZV90eXBlPXVpbnQzMl90LCBjb21wbGV0ZT1GYWxzZSkgeworICAgIE9GUEdfTUFYID0gMHhmZmZmZmYwMCwKKyAgICBPRlBHX0FMTCA9IDB4ZmZmZmZmZmMsCisgICAgT0ZQR19BTlkgPSAweGZmZmZmZmZmLAorfTsKKworLyogQnVja2V0IElkIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAwIGFuZCBPRlBHX0JVQ0tFVF9NQVggKi8KK2VudW0gb2ZwX2dyb3VwX2J1Y2tldCh3aXJlX3R5cGU9dWludDMyX3QpIHsKKyAgICBPRlBHX0JVQ0tFVF9NQVggPSAweGZmZmZmZjAwLAorICAgIE9GUEdfQlVDS0VUX0ZJUlNUID0gMHhmZmZmZmZmZCwKKyAgICBPRlBHX0JVQ0tFVF9MQVNUID0gMHhmZmZmZmZmZSwKKyAgICBPRlBHX0JVQ0tFVF9BTEwgPSAweGZmZmZmZmZmLAorfTsKKworLyogR3JvdXAgYnVja2V0IHByb3BlcnR5IHR5cGVzLiAqLworZW51bSBvZnBfZ3JvdXBfYnVja2V0X3Byb3BfdHlwZSB7CisgICAgT0ZQR0JQVF9XRUlHSFQgPSAwLAorICAgIE9GUEdCUFRfV0FUQ0hfUE9SVCA9IDEsCisgICAgT0ZQR0JQVF9XQVRDSF9HUk9VUCA9IDIsCisgICAgT0ZQR0JQVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCit9OworCisvKiBHcm91cCBwcm9wZXJ0eSB0eXBlcy4gKi8KK2VudW0gb2ZwX2dyb3VwX3Byb3BfdHlwZSB7CisgICAgT0ZQR1BUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKK307CisKKy8qIFBvcnQgbW9kIHByb3BlcnR5IHR5cGVzICovCitlbnVtIG9mcF9wb3J0X21vZF9wcm9wX3R5cGUgeworICAgIE9GUFBNUFRfRVRIRVJORVQgPSAwLAorICAgIE9GUFBNUFRfT1BUSUNBTCA9IDEsCisgICAgT0ZQUE1QVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCit9OworCisvKiBNZXRlciBudW1iZXJpbmcuIEZsb3cgbWV0ZXJzIGNhbiB1c2UgYW55IG51bWJlciB1cCB0byBPRlBNX01BWC4gKi8KK2VudW0gb2ZwX21ldGVyKHdpcmVfdHlwZT11aW50MzJfdCwgY29tcGxldGU9RmFsc2UpIHsKKyAgICBPRlBNX01BWCA9IDB4ZmZmZjAwMDAsCisgICAgT0ZQTV9TTE9XUEFUSCA9IDB4ZmZmZmZmZmQsCisgICAgT0ZQTV9DT05UUk9MTEVSID0gMHhmZmZmZmZmZSwKKyAgICBPRlBNX0FMTCA9IDB4ZmZmZmZmZmYsCit9OworCisvKiBNZXRlciBjb21tYW5kcyAqLworZW51bSBvZnBfbWV0ZXJfbW9kX2NvbW1hbmQod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTUNfQUREID0gMCwKKyAgICBPRlBNQ19NT0RJRlkgPSAxLAorICAgIE9GUE1DX0RFTEVURSA9IDIsCit9OworCisvKiBNZXRlciBjb25maWd1cmF0aW9uIGZsYWdzICovCitlbnVtIG9mcF9tZXRlcl9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUE1GX0tCUFMgPSAweDEsCisgICAgT0ZQTUZfUEtUUFMgPSAweDIsCisgICAgT0ZQTUZfQlVSU1QgPSAweDQsCisgICAgT0ZQTUZfU1RBVFMgPSAweDgsCit9OworCisvKiBNZXRlciBiYW5kIHR5cGVzICovCitlbnVtIG9mcF9tZXRlcl9iYW5kX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTUJUX0RST1AgPSAweDEsCisgICAgT0ZQTUJUX0RTQ1BfUkVNQVJLID0gMHgyLAorICAgIE9GUE1CVF9FWFBFUklNRU5URVIgPSAweGZmZmYsCit9OworCisvKiBNdWx0aXBhcnQgcmVxdWVzdCBmbGFncyAqLworZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUFNGX1JFUV9NT1JFID0gMHgxLAorfTsKKworLyogTXVsdGlwYXJ0IHJlcGx5IGZsYWdzICovCitlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUFNGX1JFUExZX01PUkUgPSAweDEsCit9OworCisvKiAKKyAqIE11bHRpcGFydCBNZXNzYWdlIFR5cGVzIAorICoKKyAqIE9GMS41IHJlbmFtZXMgdGhlIE9GUE1QL1NUIGZvcjoKKyAqIGZsb3cgKDEpIC0+IGZsb3dfZGVzYyAoMSkKKyAqIGFnZ3JlZ2F0ZSAoMikgLT4gYWdncmVnYXRlX3N0YXRzICgyKQorICogdGFibGUgKDMpIC0+IHRhYmxlX3N0YXRzICgzKQorICogZ3JvdXAgKDYpIC0+IGdyb3VwX3N0YXRzICg2KQorICogbWV0ZXIgKDkpIC0+IG1ldGVyX3N0YXRzICg5KQorICogbWV0ZXJfY29uZmlnICgxMCkgLT4gbWV0ZXJfZGVzYyAoMTApCisgKiAKKyAqIE9GMS40IHJlbmFtZWQ6CisgKiBxdWV1ZSAoNSkgLT4gcXVldWVfc3RhdHMgKDUpCisgKiB3aGljaCB3YXMgcmV0YWluZWQgYXMgInF1ZXVlIiBpbiBzdGFuZGFyZC0xLjQuCisgKgorICogVXNpbmcgZGlmZmVyZW50IG5hbWVzIGZvciB0aGUgc2FtZSBtZXNzYWdlCisgKiBpbiBMb3hpIGNhdXNlcyBkdXBsaWNhdGUgZW51bSBlbnRyaWVzIHRoYXQKKyAqIG1hcCB0byBlc3NlbnRpYWxseSB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lc3NhZ2UuCisgKiBGb3Igc2ltcGxpY2l5LCB3ZSBjYW4gcmV0YWluIHRoZSBvcmlnaW5hbCwgCisgKiBPRjEuMy0sIG5hbWluZyBjb252ZW50aW9uIHRvIHJlZHVjZSBjb21wbGV4aXR5LgorICogVGhpcyBpcyB3aHkgT0YxLjQrIG9mcF9zdGF0c190eXBlIGVudW1zIGZyb20gCisgKiBPRjEuMy0gcmVtYWluIGFzIE9GUFNUXyogYW5kIGRvIG5vdCBhcHBlYXIgYXMKKyAqIE9GUE1QXyouCisgKgorICogVXNpbmcgdGhlIF9TVEFUUyBpcyBjZXJ0YWlubHkgbW9yZSBleHBsaWNpdDsgCisgKiBob3dldmVyLCB0aGF0IHdvdWxkIHBlcmhhcHMgbmVjZXNzaXRhdGUgY2hhbmdpbmcKKyAqIE9GMS4zLSBPRlBNUC9TVCBuYW1lcywgd2hpY2ggd291bGQgYnJlYWsgZXhpc3RpbmcKKyAqIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBPRjEuMy0gT0ZQTVAvU1QgbmFtZXMuCisgKi8KK2VudW0gb2ZwX3N0YXRzX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQU1RfREVTQyA9IDAsCisgICAgT0ZQU1RfRkxPVyA9IDEsIC8qIG9taXQgX2Rlc2MgKi8KKyAgICBPRlBTVF9BR0dSRUdBVEUgPSAyLCAvKiBvbWl0IF9zdGF0cyAqLworICAgIE9GUFNUX1RBQkxFID0gMywgLyogb21pdCBfc3RhdHMgKi8KKyAgICBPRlBTVF9QT1JUID0gNCwgLyogb21pdCBfc3RhdHM7IGhpc3RvcmljYWxseSBvbWl0dGVkICovCisgICAgT0ZQU1RfUVVFVUUgPSA1LCAvKiBvbWl0IF9zdGF0cyAqLworICAgIE9GUFNUX0dST1VQID0gNiwgLyogb21pdCBfc3RhdHMgKi8KKyAgICBPRlBTVF9HUk9VUF9ERVNDID0gNywKKyAgICBPRlBTVF9HUk9VUF9GRUFUVVJFUyA9IDgsCisgICAgT0ZQU1RfTUVURVIgPSA5LCAvKiBvbWl0X3N0YXRzICovCisgICAgT0ZQU1RfTUVURVJfQ09ORklHID0gMTAsIC8qIHJldGFpbiBPRlBTVF8gcHJlZml4OyByZXRhaW4gX2NvbmZpZyAqLworICAgIE9GUFNUX01FVEVSX0ZFQVRVUkVTID0gMTEsCisgICAgT0ZQU1RfVEFCTEVfRkVBVFVSRVMgPSAxMiwKKyAgICBPRlBTVF9QT1JUX0RFU0MgPSAxMywKKyAgICBPRlBNUF9UQUJMRV9ERVNDID0gMTQsCisgICAgT0ZQTVBfUVVFVUVfREVTQyA9IDE1LAorICAgIE9GUE1QX0ZMT1dfTU9OSVRPUiA9IDE2LAorICAgIE9GUE1QX0ZMT1dfTElHSFRXRUlHSFQgPSAxNywgLyogb21pdCBfc3RhdHM7IHVzZSBfbGlnaHR3ZWlnaHQgdG8gaW1wbHkgbm8gZGVzYyBpbmNsdWRlZCAqLworICAgIE9GUE1QX0NPTlRST0xMRVJfU1RBVFVTID0gMTgsCisgICAgT0ZQTVBfQlVORExFX0ZFQVRVUkVTID0gMTksCisgICAgT0ZQU1RfRVhQRVJJTUVOVEVSID0gMHhmZmZmLAorfTsKKworLyogUmVhc29uIGZvciBnZW5lcmF0aW5nIGZsb3cgc3RhdHMuICovCitlbnVtIG9mcF9mbG93X3N0YXRzX3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgeworICAgIE9GUEZTUl9TVEFUU19SRVFVRVNUID0gMCwKKyAgICBPRlBGU1JfU1RBVF9UUklHR0VSID0gMSwKK307CisKKy8qIFBvcnQgc3RhdHMgcHJvcGVydHkgdHlwZXMuICAqLworZW51bSBvZnBfcG9ydF9zdGF0c19wcm9wX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQUFNQVF9FVEhFUk5FVCAgICAgICAgICA9IDAsICAgICAgLyogRXRoZXJuZXQgcHJvcGVydHkuICovCisgICAgT0ZQUFNQVF9PUFRJQ0FMICAgICAgICAgICA9IDEsICAgICAgLyogT3B0aWNhbCBwcm9wZXJ0eS4gKi8KKyAgICBPRlBQU1BUX0VYUEVSSU1FTlRFUiAgICAgID0gMHhGRkZGLCAvKiBFeHBlcmltZW50ZXIgcHJvcGVydHkuICovCit9OworCisvKiBGbGFncyBpcyBvbmUgb2YgT0ZQT1NGXyBiZWxvdyAqLworZW51bSBvZnBfcG9ydF9zdGF0c19vcHRpY2FsX2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQT1NGX1JYX1RVTkUgPSAweDEsCisgICAgT0ZQT1NGX1RYX1RVTkUgPSAweDIsCisgICAgT0ZQT1NGX1RYX1BXUiA9IDB4NCwKKyAgICBPRlBPU0ZfUlhfUFdSID0gMHgxMCwKKyAgICBPRlBPU0ZfVFhfQklBUyA9IDB4MjAsCisgICAgT0ZQT1NGX1RYX1RFTVAgPSAweDQwLAorfTsKKworLyogcXVldWUgc3RhdGlzdGljcyBwcm9wZXJ0eSB0eXBlcyAqLworZW51bSBvZnBfcXVldWVfc3RhdHNfcHJvcF90eXBlIHsKKyAgICBPRlBRU1BUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZgorfTsKKworLyogcXVldWUgZGVzY3JpcHRpb24gcHJvcGVydHkgdHlwZXMgKi8KK2VudW0gb2ZwX3F1ZXVlX2Rlc2NfcHJvcF90eXBlIHsKKyAgICBPRlBRRFBUX01JTl9SQVRFID0gMSwKKyAgICBPRlBRRFBUX01BWF9SQVRFID0gMiwKKyAgICBPRlBRRFBUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKy8qIEdyb3VwIGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KK2VudW0gb2ZwX2dyb3VwX2NhcGFiaWxpdGllcyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEdGQ19TRUxFQ1RfV0VJR0hUID0gMHgxLAorICAgIE9GUEdGQ19TRUxFQ1RfTElWRU5FU1MgPSAweDIsCisgICAgT0ZQR0ZDX0NIQUlOSU5HID0gMHg0LAorICAgIE9GUEdGQ19DSEFJTklOR19DSEVDS1MgPSAweDgsCit9OworCisvKiBNZXRlciBmZWF0dXJlIGZsYWdzICovCitlbnVtIG9mcF9tZXRlcl9mZWF0dXJlX2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQTUZGX0FDVElPTl9TRVQgPSAweDEsCisgICAgT0ZQTUZGX0FOWV9QT1NJVElPTiA9IDB4MiwKKyAgICBPRlBNRkZfTVVMVElfTElTVCA9IDB4NCwKK307CisKKy8qIFRhYmxlIEZlYXR1cmVzIHJlcXVlc3QgY29tbWFuZHMgKi8KK2VudW0gb2ZwX3RhYmxlX2ZlYXR1cmVzX2NvbW1hbmQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBURkNfUkVQTEFDRSA9IDAsCisgICAgT0ZQVEZDX01PRElGWSA9IDEsCisgICAgT0ZQVEZDX0VOQUJMRSA9IDIsCisgICAgT0ZQVEZDX0RJU0FCTEUgPSAzLAorfTsKKworLyogRmxhZ3Mgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSB0YWJsZS4gKi8KK2VudW0gb2ZwX3RhYmxlX2ZlYXR1cmVfZmxhZyAod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBURkZfSU5HUkVTU19UQUJMRSA9IDB4MSwKKyAgICBPRlBURkZfRUdSRVNTX1RBQkxFID0gMHgyLAorICAgIE9GUFRGRl9GSVJTVF9FR1JFU1MgPSAweDEwLAorfTsKKworLyogVGFibGUgRmVhdHVyZSBwcm9wZXJ0eSB0eXBlcy4gKi8KK2VudW0gb2ZwX3RhYmxlX2ZlYXR1cmVfcHJvcF90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUFRGUFRfSU5TVFJVQ1RJT05TID0gMCwKKyAgICBPRlBURlBUX0lOU1RSVUNUSU9OU19NSVNTID0gMSwKKyAgICBPRlBURlBUX05FWFRfVEFCTEVTID0gMiwKKyAgICBPRlBURlBUX05FWFRfVEFCTEVTX01JU1MgPSAzLAorICAgIE9GUFRGUFRfV1JJVEVfQUNUSU9OUyA9IDQsCisgICAgT0ZQVEZQVF9XUklURV9BQ1RJT05TX01JU1MgPSA1LAorICAgIE9GUFRGUFRfQVBQTFlfQUNUSU9OUyA9IDYsCisgICAgT0ZQVEZQVF9BUFBMWV9BQ1RJT05TX01JU1MgPSA3LAorICAgIE9GUFRGUFRfTUFUQ0ggPSA4LAorICAgIE9GUFRGUFRfV0lMRENBUkRTID0gMHhhLAorICAgIE9GUFRGUFRfV1JJVEVfU0VURklFTEQgPSAweGMsCisgICAgT0ZQVEZQVF9XUklURV9TRVRGSUVMRF9NSVNTID0gMHhkLAorICAgIE9GUFRGUFRfQVBQTFlfU0VURklFTEQgPSAweGUsCisgICAgT0ZQVEZQVF9BUFBMWV9TRVRGSUVMRF9NSVNTID0gMHhmLAorICAgIE9GUFRGUFRfVEFCTEVfU1lOQ19GUk9NID0gMHgxMCwKKyAgICBPRlBURlBUX1dSSVRFX0NPUFlGSUVMRCA9IDE4LAorICAgIE9GUFRGUFRfV1JJVEVfQ09QWUZJRUxEX01JU1MgPSAxOSwKKyAgICBPRlBURlBUX0FQUExZX0NPUFlGSUVMRCA9IDIwLAorICAgIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEX01JU1MgPSAyMSwKKyAgICBPRlBURlBUX1BBQ0tFVF9UWVBFUyA9IDIyLAorICAgIE9GUFRGUFRfRVhQRVJJTUVOVEVSID0gMHhmZmZlLAorICAgIE9GUFRGUFRfRVhQRVJJTUVOVEVSX01JU1MgPSAweGZmZmYsCit9OworCisvKiBUYWJsZSBNb2QgcHJvcGVydHkgdHlwZXMuKi8KK2VudW0gb2ZwX3RhYmxlX21vZF9wcm9wX3R5cGUgeworICAgIE9GUFRNUFRfRVZJQ1RJT04gPSAweDIsCisgICAgT0ZQVE1QVF9WQUNBTkNZID0gMHgzLAorICAgIE9GUFRNUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworCisvKiBjb250cm9sbGVyIHJvbGVzICovCitlbnVtIG9mcF9jb250cm9sbGVyX3JvbGUod2lyZV90eXBlPXVpbnQzMl90KSB7CisgICAgT0ZQQ1JfUk9MRV9OT0NIQU5HRSA9IDAsCisgICAgT0ZQQ1JfUk9MRV9FUVVBTCA9IDEsCisgICAgT0ZQQ1JfUk9MRV9NQVNURVIgPSAyLAorICAgIE9GUENSX1JPTEVfU0xBVkUgPSAzLAorfTsKKworLyogQnVuZGxlIGNvbnRyb2wgbWVzc2FnZSB0eXBlcyAqLworZW51bSBvZnBfYnVuZGxlX2N0cmxfdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBCQ1RfT1BFTl9SRVFVRVNUID0gMCwKKyAgICBPRlBCQ1RfT1BFTl9SRVBMWSA9IDEsCisgICAgT0ZQQkNUX0NMT1NFX1JFUVVFU1QgPSAyLAorICAgIE9GUEJDVF9DTE9TRV9SRVBMWSA9IDMsCisgICAgT0ZQQkNUX0NPTU1JVF9SRVFVRVNUID0gNCwKKyAgICBPRlBCQ1RfQ09NTUlUX1JFUExZID0gNSwKKyAgICBPRlBCQ1RfRElTQ0FSRF9SRVFVRVNUID0gNiwKKyAgICBPRlBCQ1RfRElTQ0FSRF9SRVBMWSA9IDcsCit9OworCisvKiBCdW5kbGUgY29uZmlndXJhdGlvbiBmbGFncy4gKi8KK2VudW0gb2ZwX2J1bmRsZV9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEJGX0FUT01JQyA9IDEsCisgICAgT0ZQQkZfT1JERVJFRCA9IDIsCisgICAgT0ZQQkZfVElNRSA9IDQsCit9OworCisvKiBCdW5kbGUgZmVhdHVyZXMgcHJvcGVydHkgdHlwZXMuICovCitlbnVtIG9mcF9idW5kbGVfZmVhdHVyZXNfcHJvcF90eXBlIHsKKyAgICBPRlBUTVBCRl9USU1FX0NBUEFCSUxJVFkgPSAweDEsCisgICAgT0ZQVE1QQkZfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworCisvKiBCdW5kbGUgcHJvcGVydHkgdHlwZXMuICovCitlbnVtIG9mcF9idW5kbGVfcHJvcF90eXBlIHsKKyAgICBPRlBCUFRfVElNRSA9IDEsCisgICAgT0ZQQlBUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKK307CisKKworLyogQXN5bmMgQ29uZmlnIHByb3BlcnR5IHR5cGVzLiovCitlbnVtIG9mcF9hc3luY19jb25maWdfcHJvcF90eXBlIHsKKyAgICBPRlBBQ1BUX1BBQ0tFVF9JTl9TTEFWRSA9IDAsCisgICAgT0ZQQUNQVF9QQUNLRVRfSU5fTUFTVEVSID0gMSwKKyAgICBPRlBBQ1BUX1BPUlRfU1RBVFVTX1NMQVZFID0gMiwKKyAgICBPRlBBQ1BUX1BPUlRfU1RBVFVTX01BU1RFUiA9IDMsCisgICAgT0ZQQUNQVF9GTE9XX1JFTU9WRURfU0xBVkUgPSA0LAorICAgIE9GUEFDUFRfRkxPV19SRU1PVkVEX01BU1RFUiA9IDUsCisgICAgT0ZQQUNQVF9ST0xFX1NUQVRVU19TTEFWRSA9IDYsCisgICAgT0ZQQUNQVF9ST0xFX1NUQVRVU19NQVNURVIgPSA3LAorICAgIE9GUEFDUFRfVEFCTEVfU1RBVFVTX1NMQVZFID0gOCwKKyAgICBPRlBBQ1BUX1RBQkxFX1NUQVRVU19NQVNURVIgPSA5LAorICAgIE9GUEFDUFRfUkVRVUVTVEZPUldBUkRfU0xBVkUgPSAxMCwKKyAgICBPRlBBQ1BUX1JFUVVFU1RGT1JXQVJEX01BU1RFUiA9IDExLAorICAgIE9GUEFDUFRfRkxPV19TVEFUU19TTEFWRSA9IDEyLAorICAgIE9GUEFDUFRfRkxPV19TVEFUU19NQVNURVIgPSAxMywKKyAgICBPRlBBQ1BUX0NPTlRfU1RBVFVTX1NMQVZFID0gMTQsCisgICAgT0ZQQUNQVF9DT05UX1NUQVRVU19NQVNURVIgPSAxNSwKKyAgICBPRlBBQ1BUX0VYUEVSSU1FTlRFUl9TTEFWRSA9IDB4RkZGRSwKKyAgICBPRlBBQ1BUX0VYUEVSSU1FTlRFUl9NQVNURVIgPSAweEZGRkYsCit9OworCisvKiBXaHkgaXMgdGhpcyBwYWNrZXQgYmVpbmcgc2VudCB0byB0aGUgY29udHJvbGxlcj8gKi8KK2VudW0gb2ZwX3BhY2tldF9pbl9yZWFzb24od2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBSX05PX01BVENIID0gMCwKKyAgICBPRlBSX0FDVElPTiA9IDEsCisgICAgT0ZQUl9JTlZBTElEX1RUTCA9IDIsCisgICAgT0ZQUl9BQ1RJT05fU0VUID0gMywKKyAgICBPRlBSX0dST1VQID0gNCwKKyAgICBPRlBSX1BBQ0tFVF9PVVQgPSA1LAorCisgICAgLy8gbm9uLXN0YW5kYXJkIEJTTiBleHRlbnNpb25zLiBPRiBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhcmQtY29uZm9ybWFudAorICAgIC8vIHdheSB0byBleHRlbmQgdGhlIHNldCBvZiBwYWNrZXRfaW4gcmVhc29ucworICAgIE9GUFJfQlNOX05FV19IT1NUID0gMTI4LAorICAgIE9GUFJfQlNOX1NUQVRJT05fTU9WRSA9IDEyOSwKKyAgICBPRlBSX0JTTl9CQURfVkxBTiA9IDEzMCwKKyAgICBPRlBSX0JTTl9ERVNUSU5BVElPTl9MT09LVVBfRkFJTFVSRSA9IDEzMSwKKyAgICBPRlBSX0JTTl9OT19ST1VURSA9IDEzMiwKKyAgICBPRlBSX0JTTl9JQ01QX0VDSE9fUkVRVUVTVCA9IDEzMywKKyAgICBPRlBSX0JTTl9ERVNUX05FVFdPUktfVU5SRUFDSEFCTEUgPSAxMzQsCisgICAgT0ZQUl9CU05fREVTVF9IT1NUX1VOUkVBQ0hBQkxFID0gMTM1LAorICAgIE9GUFJfQlNOX0RFU1RfUE9SVF9VTlJFQUNIQUJMRSA9IDEzNiwKKyAgICBPRlBSX0JTTl9GUkFHTUVOVEFUSU9OX1JFUVVJUkVEID0gMTM3LAorICAgIE9GUFJfQlNOX0FSUCA9IDEzOSwKKyAgICBPRlBSX0JTTl9ESENQID0gMTQwLAorICAgIE9GUFJfQlNOX0RFQlVHID0gMTQxLAorICAgIE9GUFJfQlNOX1BBQ0tFVF9PRl9ERUFUSCA9IDE0MiwKK307CisKKy8qIFdoeSB3YXMgdGhpcyBmbG93IHJlbW92ZWQ/ICovCitlbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQUlJfSURMRV9USU1FT1VUID0gMCwKKyAgICBPRlBSUl9IQVJEX1RJTUVPVVQgPSAxLAorICAgIE9GUFJSX0RFTEVURSA9IDIsCisgICAgT0ZQUlJfR1JPVVBfREVMRVRFID0gMywKKyAgICBPRlBSUl9NRVRFUl9ERUxFVEUgPSA0LAorICAgIE9GUFJSX0VWSUNUSU9OID0gNSwKK307CisKKy8qIFdoYXQgY2hhbmdlZCBhYm91dCB0aGUgcGh5c2ljYWwgcG9ydCAqLworZW51bSBvZnBfcG9ydF9yZWFzb24od2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBQUl9BREQgPSAwLAorICAgIE9GUFBSX0RFTEVURSA9IDEsCisgICAgT0ZQUFJfTU9ESUZZID0gMiwKK307CisKKy8qIFdoYXQgY2hhbmdlZCBhYm91dCB0aGUgY29udHJvbGxlciByb2xlICovCitlbnVtIG9mcF9jb250cm9sbGVyX3JvbGVfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQQ1JSX01BU1RFUl9SRVFVRVNUID0gMCwKKyAgICBPRlBDUlJfQ09ORklHID0gMSwKKyAgICBPRlBDUlJfRVhQRVJJTUVOVEVSID0gMiwKK307CisKKy8qIFJvbGUgcHJvcGVydHkgdHlwZXMuKi8KK2VudW0gb2ZwX3JvbGVfcHJvcF90eXBlIHsKKyAgICBPRlBSUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworLyogV2hhdCBjaGFuZ2VkIGFib3V0IHRoZSB0YWJsZSAqLworZW51bSBvZnBfdGFibGVfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQVFJfVkFDQU5DWV9ET1dOID0gMywKKyAgICBPRlBUUl9WQUNBTkNZX1VQID0gNCwKK307CisKKy8qIFJlcXVlc3QgZm9yd2FyZCByZWFzb24gKi8KK2VudW0gb2ZwX3JlcXVlc3Rmb3J3YXJkX3JlYXNvbiB7CisgICAgT0ZQUkZSX0dST1VQX01PRCA9IDAsCisgICAgT0ZQUkZSX01FVEVSX01PRCA9IDEsCit9OworCisvKiBIZWxsbyBlbGVtZW50cyB0eXBlcy4gKi8KK2VudW0gb2ZwX2hlbGxvX2VsZW1fdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBIRVRfVkVSU0lPTkJJVE1BUCA9IDEsCit9OworCisvKiBWYWx1ZXMgZm9yIJJ0eXBlkiBpbiBvZnBfZXJyb3JfbWVzc2FnZSAqLworZW51bSBvZnBfZXJyb3JfdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBFVF9IRUxMT19GQUlMRUQgPSAwLAorICAgIE9GUEVUX0JBRF9SRVFVRVNUID0gMSwKKyAgICBPRlBFVF9CQURfQUNUSU9OID0gMiwKKyAgICBPRlBFVF9CQURfSU5TVFJVQ1RJT04gPSAzLAorICAgIE9GUEVUX0JBRF9NQVRDSCA9IDQsCisgICAgT0ZQRVRfRkxPV19NT0RfRkFJTEVEID0gNSwKKyAgICBPRlBFVF9HUk9VUF9NT0RfRkFJTEVEID0gNiwKKyAgICBPRlBFVF9QT1JUX01PRF9GQUlMRUQgPSA3LAorICAgIE9GUEVUX1RBQkxFX01PRF9GQUlMRUQgPSA4LAorICAgIE9GUEVUX1FVRVVFX09QX0ZBSUxFRCA9IDksCisgICAgT0ZQRVRfU1dJVENIX0NPTkZJR19GQUlMRUQgPSAxMCwKKyAgICBPRlBFVF9ST0xFX1JFUVVFU1RfRkFJTEVEID0gMTEsCisgICAgT0ZQRVRfTUVURVJfTU9EX0ZBSUxFRCA9IDEyLAorICAgIE9GUEVUX1RBQkxFX0ZFQVRVUkVTX0ZBSUxFRCA9IDEzLAorICAgIE9GUEVUX0JBRF9QUk9QRVJUWSA9IDE0LAorICAgIE9GUEVUX0FTWU5DX0NPTkZJR19GQUlMRUQgPSAxNSwKKyAgICBPRlBFVF9GTE9XX01PTklUT1JfRkFJTEVEID0gMTYsCisgICAgT0ZQRVRfQlVORExFX0ZBSUxFRCA9IDE3LAorICAgIE9GUEVUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfSEVMTE9fRkFJTEVEICovCitlbnVtIG9mcF9oZWxsb19mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBIRkNfSU5DT01QQVRJQkxFID0gMCwKKyAgICBPRlBIRkNfRVBFUk0gPSAxLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfUkVRVUVTVC4gKi8KK2VudW0gb2ZwX2JhZF9yZXF1ZXN0X2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQQlJDX0JBRF9WRVJTSU9OID0gMCwKKyAgICBPRlBCUkNfQkFEX1RZUEUgPSAxLAorICAgIE9GUEJSQ19CQURfU1RBVCA9IDIsCisgICAgT0ZQQlJDX0JBRF9FWFBFUklNRU5URVIgPSAzLAorICAgIE9GUEJSQ19CQURfRVhQRVJJTUVOVEVSX1RZUEUgPSA0LAorICAgIE9GUEJSQ19FUEVSTSA9IDUsCisgICAgT0ZQQlJDX0JBRF9MRU4gPSA2LAorICAgIE9GUEJSQ19CVUZGRVJfRU1QVFkgPSA3LAorICAgIE9GUEJSQ19CVUZGRVJfVU5LTk9XTiA9IDgsCisgICAgT0ZQQlJDX0JBRF9UQUJMRV9JRCA9IDksCisgICAgT0ZQQlJDX0lTX1NMQVZFID0gMTAsCisgICAgT0ZQQlJDX0JBRF9QT1JUID0gMTEsCisgICAgT0ZQQlJDX0JBRF9QQUNLRVQgPSAxMiwKKyAgICBPRlBCUkNfTVVMVElQQVJUX0JVRkZFUl9PVkVSRkxPVyA9IDEzLAorICAgIE9GUEJSQ19NVUxUSVBBUlRfUkVRVUVTVF9USU1FT1VUID0gMTQsCisgICAgT0ZQQlJDX01VTFRJUEFSVF9SRVBMWV9USU1FT1VUID0gMTUsCisgICAgT0ZQQlJDX01VTFRJUEFSVF9CQURfU0NIRUQgPSAxNiwKKyAgICBPRlBCUkNfUElQRUxJTkVfRklFTERTX09OTFkgPSAxNywKKyAgICBPRlBCUkNfVU5LTk9XTiA9IDE4LAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfQUNUSU9OLiAqLworZW51bSBvZnBfYmFkX2FjdGlvbl9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEJBQ19CQURfVFlQRSA9IDAsCisgICAgT0ZQQkFDX0JBRF9MRU4gPSAxLAorICAgIE9GUEJBQ19CQURfRVhQRVJJTUVOVEVSID0gMiwKKyAgICBPRlBCQUNfQkFEX0VYUEVSSU1FTlRFUl9UWVBFID0gMywKKyAgICBPRlBCQUNfQkFEX09VVF9QT1JUID0gNCwKKyAgICBPRlBCQUNfQkFEX0FSR1VNRU5UID0gNSwKKyAgICBPRlBCQUNfRVBFUk0gPSA2LAorICAgIE9GUEJBQ19UT09fTUFOWSA9IDcsCisgICAgT0ZQQkFDX0JBRF9RVUVVRSA9IDgsCisgICAgT0ZQQkFDX0JBRF9PVVRfR1JPVVAgPSA5LAorICAgIE9GUEJBQ19NQVRDSF9JTkNPTlNJU1RFTlQgPSAxMCwKKyAgICBPRlBCQUNfVU5TVVBQT1JURURfT1JERVIgPSAxMSwKKyAgICBPRlBCQUNfQkFEX1RBRyA9IDEyLAorICAgIE9GUEJBQ19CQURfU0VUX1RZUEUgPSAxMywKKyAgICBPRlBCQUNfQkFEX1NFVF9MRU4gPSAxNCwKKyAgICBPRlBCQUNfQkFEX1NFVF9BUkdVTUVOVCA9IDE1LAorICAgIE9GUEJBQ19CQURfU0VUX01BU0sgPSAxNiwKKyAgICBPRlBCQUNfQkFEX01FVEVSID0gMTcsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0JBRF9JTlNUUlVDVElPTi4gKi8KK2VudW0gb2ZwX2JhZF9pbnN0cnVjdGlvbl9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEJJQ19VTktOT1dOX0lOU1QgPSAwLAorICAgIE9GUEJJQ19VTlNVUF9JTlNUID0gMSwKKyAgICBPRlBCSUNfQkFEX1RBQkxFX0lEID0gMiwKKyAgICBPRlBCSUNfVU5TVVBfTUVUQURBVEEgPSAzLAorICAgIE9GUEJJQ19VTlNVUF9NRVRBREFUQV9NQVNLID0gNCwKKyAgICBPRlBCSUNfQkFEX0VYUEVSSU1FTlRFUiA9IDUsCisgICAgT0ZQQklDX0JBRF9FWFBFUklNRU5URVJfVFlQRSA9IDYsCisgICAgT0ZQQklDX0JBRF9MRU4gPSA3LAorICAgIE9GUEJJQ19FUEVSTSA9IDgsCisgICAgT0ZQQklDX0RVUF9JTlNUID0gOSwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfQkFEX01BVENILiAqLworZW51bSBvZnBfYmFkX21hdGNoX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQQk1DX0JBRF9UWVBFID0gMCwKKyAgICBPRlBCTUNfQkFEX0xFTiA9IDEsCisgICAgT0ZQQk1DX0JBRF9UQUcgPSAyLAorICAgIE9GUEJNQ19CQURfRExfQUREUl9NQVNLID0gMywKKyAgICBPRlBCTUNfQkFEX05XX0FERFJfTUFTSyA9IDQsCisgICAgT0ZQQk1DX0JBRF9XSUxEQ0FSRFMgPSA1LAorICAgIE9GUEJNQ19CQURfRklFTEQgPSA2LAorICAgIE9GUEJNQ19CQURfVkFMVUUgPSA3LAorICAgIE9GUEJNQ19CQURfTUFTSyA9IDgsCisgICAgT0ZQQk1DX0JBRF9QUkVSRVEgPSA5LAorICAgIE9GUEJNQ19EVVBfRklFTEQgPSAxMCwKKyAgICBPRlBCTUNfRVBFUk0gPSAxMSwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfRkxPV19NT0RfRkFJTEVELiAqLworZW51bSBvZnBfZmxvd19tb2RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQRk1GQ19VTktOT1dOID0gMCwKKyAgICBPRlBGTUZDX1RBQkxFX0ZVTEwgPSAxLAorICAgIE9GUEZNRkNfQkFEX1RBQkxFX0lEID0gMiwKKyAgICBPRlBGTUZDX09WRVJMQVAgPSAzLAorICAgIE9GUEZNRkNfRVBFUk0gPSA0LAorICAgIE9GUEZNRkNfQkFEX1RJTUVPVVQgPSA1LAorICAgIE9GUEZNRkNfQkFEX0NPTU1BTkQgPSA2LAorICAgIE9GUEZNRkNfQkFEX0ZMQUdTID0gNywKKyAgICBPRlBGTUZDX0NBTlRfU1lOQyA9IDgsCisgICAgT0ZQRk1GQ19CQURfUFJJT1JJVFkgPSA5LAorICAgIE9GUEZNRkNfSVNfU1lOQyA9IDEwLAorfTsKKworLyogkmZsYWdzkiBiaXRzIGluIHN0cnVjdCBvZl9mbG93X21vbml0b3JfcmVxdWVzdC4gKi8KK2VudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mbGFncyAod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpeworICAgIE9GUEZNRl9JTklUSUFMID0gMHgxLAorICAgIE9GUEZNRl9BREQgPSAweDIsCisgICAgT0ZQRk1GX1JFTU9WRUQgPSAweDQsCisgICAgT0ZQRk1GX01PRElGWSA9IDB4OCwKKyAgICBPRlBGTUZfSU5TVFJVQ1RJT05TID0gMHgxMCwKKyAgICBPRlBGTUZfTk9fQUJCUkVWID0gMHgyMCwKKyAgICBPRlBGTUZfT05MWV9PV04gPSAweDQwLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9HUk9VUF9NT0RfRkFJTEVELiAqLworZW51bSBvZnBfZ3JvdXBfbW9kX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEdNRkNfR1JPVVBfRVhJU1RTID0gMCwKKyAgICBPRlBHTUZDX0lOVkFMSURfR1JPVVAgPSAxLAorICAgIE9GUEdNRkNfV0VJR0hUX1VOU1VQUE9SVEVEID0gMiwKKyAgICBPRlBHTUZDX09VVF9PRl9HUk9VUFMgPSAzLAorICAgIE9GUEdNRkNfT1VUX09GX0JVQ0tFVFMgPSA0LAorICAgIE9GUEdNRkNfQ0hBSU5JTkdfVU5TVVBQT1JURUQgPSA1LAorICAgIE9GUEdNRkNfV0FUQ0hfVU5TVVBQT1JURUQgPSA2LAorICAgIE9GUEdNRkNfTE9PUCA9IDcsCisgICAgT0ZQR01GQ19VTktOT1dOX0dST1VQID0gOCwKKyAgICBPRlBHTUZDX0NIQUlORURfR1JPVVAgPSA5LAorICAgIE9GUEdNRkNfQkFEX1RZUEUgPSAxMCwKKyAgICBPRlBHTUZDX0JBRF9DT01NQU5EID0gMTEsCisgICAgT0ZQR01GQ19CQURfQlVDS0VUID0gMTIsCisgICAgT0ZQR01GQ19CQURfV0FUQ0ggPSAxMywKKyAgICBPRlBHTUZDX0VQRVJNID0gMTQsCisgICAgT0ZQR01GQ19VTktOT1dOX0JVQ0tFVCA9IDE1LAorICAgIE9GUEdNRkNfQlVDS0VUX0VYSVNUUyA9IDE2LAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9QT1JUX01PRF9GQUlMRUQuICovCitlbnVtIG9mcF9wb3J0X21vZF9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBQTUZDX0JBRF9QT1JUID0gMCwKKyAgICBPRlBQTUZDX0JBRF9IV19BRERSID0gMSwKKyAgICBPRlBQTUZDX0JBRF9DT05GSUcgPSAyLAorICAgIE9GUFBNRkNfQkFEX0FEVkVSVElTRSA9IDMsCisgICAgT0ZQUE1GQ19FUEVSTSA9IDQsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1RBQkxFX01PRF9GQUlMRUQuICovCitlbnVtIG9mcF90YWJsZV9tb2RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQVE1GQ19CQURfVEFCTEUgPSAwLAorICAgIE9GUFRNRkNfQkFEX0NPTkZJRyA9IDEsCisgICAgT0ZQVE1GQ19FUEVSTSA9IDIsCit9OworCisvKiBvZnBfZXJyb3IgbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1FVRVVFX09QX0ZBSUxFRCAqLworZW51bSBvZnBfcXVldWVfb3BfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQUU9GQ19CQURfUE9SVCA9IDAsCisgICAgT0ZQUU9GQ19CQURfUVVFVUUgPSAxLAorICAgIE9GUFFPRkNfRVBFUk0gPSAyLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9TV0lUQ0hfQ09ORklHX0ZBSUxFRCAqLworZW51bSBvZnBfc3dpdGNoX2NvbmZpZ19mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBTQ0ZDX0JBRF9GTEFHUyA9IDAsCisgICAgT0ZQU0NGQ19CQURfTEVOID0gMSwKKyAgICBPRlBTQ0ZDX0VQRVJNID0gMiwKKyAgICBPRlBSUkZDX0lEX1VOU1VQID0gMywKKyAgICBPRlBSUkZDX0lEX0lOX1VTRSA9IDQsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1JPTEVfUkVRVUVTVF9GQUlMRUQuICovCitlbnVtIG9mcF9yb2xlX3JlcXVlc3RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KXsKKyAgICBPRlBSUkZDX1NUQUxFID0gMCwKKyAgICBPRlBSUkZDX1VOU1VQID0gMSwKKyAgICBPRlBSUkZDX0JBRF9ST0xFID0gMiwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfTUVURVJfTU9EX0ZBSUxFRCAqLworZW51bSBvZnBfbWV0ZXJfbW9kX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUE1NRkNfVU5LTk9XTiA9IDAsCisgICAgT0ZQTU1GQ19NRVRFUl9FWElTVFMgPSAxLAorICAgIE9GUE1NRkNfSU5WQUxJRF9NRVRFUiA9IDIsCisgICAgT0ZQTU1GQ19VTktOT1dOX01FVEVSID0gMywKKyAgICBPRlBNTUZDX0JBRF9DT01NQU5EID0gNCwKKyAgICBPRlBNTUZDX0JBRF9GTEFHUyA9IDUsCisgICAgT0ZQTU1GQ19CQURfUkFURSA9IDYsCisgICAgT0ZQTU1GQ19CQURfQlVSU1QgPSA3LAorICAgIE9GUE1NRkNfQkFEX0JBTkQgPSA4LAorICAgIE9GUE1NRkNfQkFEX0JBTkRfVkFMVUUgPSA5LAorICAgIE9GUE1NRkNfT1VUX09GX01FVEVSUyA9IDEwLAorICAgIE9GUE1NRkNfT1VUX09GX0JBTkRTID0gMTEsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1RBQkxFX0ZFQVRVUkVTX0ZBSUxFRCAqLworZW51bSBvZnBfdGFibGVfZmVhdHVyZXNfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQVEZGQ19CQURfVEFCTEUgPSAwLAorICAgIE9GUFRGRkNfQkFEX01FVEFEQVRBID0gMSwKKyAgICBPRlBURkZDX0VQRVJNID0gNSwKKyAgICBPRlBURkZDX0JBRF9DQVBBID0gNiwKKyAgICBPRlBURkZDX0JBRF9NQVhfRU5UID0gNywKKyAgICBPRlBURkZDX0JBRF9GRUFUVVJFUyA9IDgsCisgICAgT0ZQVEZGQ19CQURfQ09NTUFORCA9IDksCisgICAgT0ZQVEZGQ19UT09fTUFOWSA9IDEwLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfUFJPUEVSVFkuICovCitlbnVtIG9mcF9iYWRfcHJvcGVydHlfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBCUENfQkFEX1RZUEUgPSAwLAorICAgIE9GUEJQQ19CQURfTEVOID0gMSwKKyAgICBPRlBCUENfQkFEX1ZBTFVFID0gMiwKKyAgICBPRlBCUENfVE9PX01BTlkgPSAzLAorICAgIE9GUEJQQ19EVVBfVFlQRSA9IDQsCisgICAgT0ZQQlBDX0JBRF9FWFBFUklNRU5URVIgPSA1LAorICAgIE9GUEJQQ19CQURfRVhQX1RZUEUgPSA2LAorICAgIE9GUEJQQ19CQURfRVhQX1ZBTFVFID0gNywKKyAgICBPRlBCUENfRVBFUk0gPSA4LAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9BU1lOQ19DT05GSUdfRkFJTEVELiAqLworZW51bSBvZnBfYXN5bmNfY29uZmlnX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEFDRkNfSU5WQUxJRCA9IDAsCisgICAgT0ZQQUNGQ19VTlNVUFBPUlRFRCA9IDEsCisgICAgT0ZQQUNGQ19FUEVSTSA9IDIsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0ZMT1dfTU9OSVRPUl9GQUlMRUQuICovCitlbnVtIG9mcF9mbG93X21vbml0b3JfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTU9GQ19VTktOT1dOID0gMCwKKyAgICBPRlBNT0ZDX01PTklUT1JfRVhJU1RTID0gMSwKKyAgICBPRlBNT0ZDX0lOVkFMSURfTU9OSVRPUiA9IDIsCisgICAgT0ZQTU9GQ19VTktOT1dOX01PTklUT1IgPSAzLAorICAgIE9GUE1PRkNfQkFEX0NPTU1BTkQgPSA0LAorICAgIE9GUE1PRkNfQkFEX0ZMQUdTID0gNSwKKyAgICBPRlBNT0ZDX0JBRF9UQUJMRV9JRCA9IDYsCisgICAgT0ZQTU9GQ19CQURfT1VUID0gNywKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfQlVORExFX0ZBSUxFRC4gKi8KK2VudW0gb2ZwX2J1bmRsZV9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBCRkNfVU5LTk9XTiA9IDAsCisgICAgT0ZQQkZDX0VQRVJNID0gMSwKKyAgICBPRlBCRkNfQkFEX0lEID0gMiwKKyAgICBPRlBCRkNfQlVORExFX0VYSVNUID0gMywKKyAgICBPRlBCRkNfQlVORExFX0NMT1NFRCA9IDQsCisgICAgT0ZQQkZDX09VVF9PRl9CVU5ETEVTID0gNSwKKyAgICBPRlBCRkNfQkFEX1RZUEUgPSA2LAorICAgIE9GUEJGQ19CQURfRkxBR1MgPSA3LAorICAgIE9GUEJGQ19NU0dfQkFEX0xFTiA9IDgsCisgICAgT0ZQQkZDX01TR19CQURfWElEID0gOSwKKyAgICBPRlBCRkNfTVNHX1VOU1VQID0gMTAsCisgICAgT0ZQQkZDX01TR19DT05GTElDVCA9IDExLAorICAgIE9GUEJGQ19NU0dfVE9PX01BTlkgPSAxMiwKKyAgICBPRlBCRkNfTVNHX0ZBSUxFRCA9IDEzLAorICAgIE9GUEJGQ19USU1FT1VUID0gMTQsCisgICAgT0ZQQkZDX0JVTkRMRV9JTl9QUk9HUkVTUyA9IDE1LAorICAgIE9GUEJGQ19TQ0hFRF9OT1RfU1VQUE9SVEVEID0gMTYsCisgICAgT0ZQQkZDX1NDSEVEX0ZVVFVSRSA9IDE3LAorICAgIE9GUEJGQ19TQ0hFRF9QQVNUID0gMTgsCit9OworCitlbnVtIG9mcF9idW5kbGVfZmVhdHVyZV9mbGFncyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEJGX1RJTUVTVEFNUCA9IDB4MSwKKyAgICBPRlBCRl9USU1FX1NFVF9TQ0hFRCA9IDB4MiwKK307CisKKy8qIENvbmZpZ3VyZS9Nb2RpZnkgYmVoYXZpb3Igb2YgYSBmbG93IHRhYmxlICovCitzdHJ1Y3Qgb2ZfdGFibGVfbW9kIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE3OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgdWludDMyX3QgY29uZmlnOworICAgIGxpc3Qob2ZfdGFibGVfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBUYWJsZSBNb2QgUHJvcGVydGllcyAqLworc3RydWN0IG9mX3RhYmxlX21vZF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogRXZpY3Rpb24gdGFibGUgbW9kIFByb3BlcnR5LiBNb3N0bHkgdXNlZCBpbiBPRlBNUF9UQUJMRV9ERVNDIHJlcGxpZXMuICovCitzdHJ1Y3Qgb2ZfdGFibGVfbW9kX3Byb3BfZXZpY3Rpb24gOiBvZl90YWJsZV9tb2RfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF90YWJsZV9tb2RfcHJvcF9ldmljdGlvbl9mbGFnIGZsYWdzOworfTsKKworLyogVmFjYW5jeSB0YWJsZSBtb2QgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9tb2RfcHJvcF92YWNhbmN5IDogb2ZfdGFibGVfbW9kX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDhfdCB2YWNhbmN5X2Rvd247CisgICAgdWludDhfdCB2YWNhbmN5X3VwOworICAgIHVpbnQ4X3QgdmFjYW5jeTsKKyAgICBwYWQoMSk7Cit9OworCisvKiBFeHBlcmltZW50ZXIgdGFibGUgbW9kIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfbW9kX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfdGFibGVfbW9kX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIEZsb3cgc2V0dXAgYW5kIHRlYXJkb3duIChjb250cm9sbGVyIC0+IGRhdGFwYXRoKS4gKi8KK3N0cnVjdCBvZl9mbG93X21vZCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09ID87CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cit9OworCisvKiBHcm91cCBzZXR1cCBhbmQgdGVhcmRvd24gKGNvbnRyb2xsZXIgLT4gZGF0YXBhdGgpLiAqLworc3RydWN0IG9mX2dyb3VwX21vZCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gPzsKKyAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CisgICAgcGFkKDEpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CisgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKKyAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJ1Y2tldCBmb3IgdXNlIGluIGdyb3Vwcy4gKi8KK3N0cnVjdCBvZl9idWNrZXQgeworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25fYXJyYXlfbGVuID09IGxlbmd0aChhY3Rpb25zKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgYnVja2V0X2lkOworICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7CisgICAgbGlzdChvZl9ncm91cF9idWNrZXRfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIGdyb3VwIGJ1Y2tldCBwcm9wZXJ0aWVzLiAqLworc3RydWN0IG9mX2dyb3VwX2J1Y2tldF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogR3JvdXAgYnVja2V0IHdlaWdodCBwcm9wZXJ0eSwgZm9yIHNlbGVjdCBncm91cHMgb25seS4gKi8KK3N0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93ZWlnaHQgOiBvZl9ncm91cF9idWNrZXRfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB3ZWlnaHQ7CisgICAgcGFkKDIpOworfTsKKworLyogR3JvdXAgYnVja2V0IHdhdGNoIHBvcnQgKi8KK3N0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93YXRjaF9wb3J0IDogb2ZfZ3JvdXBfYnVja2V0X3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3Qgd2F0Y2g7Cit9OworCisvKiBHcm91cCBidWNrZXQgd2F0Y2ggZ3JvdXAgKi8KK3N0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93YXRjaF9ncm91cCA6IG9mX2dyb3VwX2J1Y2tldF9wcm9weworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3Qgd2F0Y2g7Cit9OworCisvKiBFeHBlcmltZW50ZXIgZ3JvdXAgYnVja2V0IHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfYnVja2V0X3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfZ3JvdXBfYnVja2V0X3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgZXhwX3R5cGU7Cit9OworCisvKiBDb21tb24gaGVhZGVyIGZvciBhbGwgZ3JvdXAgcHJvcGVydGllcy4gKi8KK3N0cnVjdCBvZl9ncm91cF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogRXhwZXJpbWVudGVyIGdyb3VwIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfcHJvcF9leHBlcmltZW50ZXIgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogTW9kaWZ5IGJlaGF2aW9yIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCitzdHJ1Y3Qgb2ZfcG9ydF9tb2QgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICBwYWQoNCk7CisgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKKyAgICBsaXN0KG9mX3BvcnRfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBwb3J0IG1vZCBwcm9wZXJ0aWVzLiAqLworc3RydWN0IG9mX3BvcnRfbW9kX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBFdGhlcm5ldCBwb3J0IG1vZCBwcm9wZXJ0eS4gKi8KK3N0cnVjdCBvZl9wb3J0X21vZF9wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9tb2RfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9wb3J0X2ZlYXR1cmVzIGFkdmVydGlzZTsKK307CisKKy8qIE9wdGljYWwgcG9ydCBtb2QgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9wb3J0X21vZF9wcm9wX29wdGljYWwgOiBvZl9wb3J0X21vZF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGNvbmZpZ3VyZTsKKyAgICB1aW50MzJfdCBmcmVxX2xkbWE7CisgICAgdWludDMyX3QgZmxfb2Zmc2V0OyAvKiBUT0RPIHNpZ25lZCAqLworICAgIHVpbnQzMl90IGdyaWRfc3BhbjsKKyAgICB1aW50MzJfdCB0eF9wd3I7Cit9OworCisvKiBFeHBlcmltZW50ZXIgcG9ydCBtb2QgcHJvcGVydHkuICovCitzdHJ1Y3Qgb2ZfcG9ydF9tb2RfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9wb3J0X21vZF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgZXhwX3R5cGU7Cit9OworCisvKiBNZXRlciBjb25maWd1cmF0aW9uLiBPRlBUX01FVEVSX01PRC4gKi8KK3N0cnVjdCBvZl9tZXRlcl9tb2QgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMjk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9tZXRlcl9tb2RfY29tbWFuZCBjb21tYW5kOworICAgIGVudW0gb2ZwX21ldGVyX2ZsYWdzIGZsYWdzOworICAgIHVpbnQzMl90IG1ldGVyX2lkOworICAgIGxpc3Qob2ZfbWV0ZXJfYmFuZF90KSBiYW5kczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBtZXRlciBiYW5kcyAqLworc3RydWN0IG9mX21ldGVyX2JhbmQgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW47CisvLyAgdWludDMyX3QgcmF0ZTsgIC8vIFRoZXNlIGFyZSBleGNsdWRlZCBiL2MgdGhpcyBpcyB0aGUgaGVhZGVyCisvLyAgdWludDMyX3QgYnVyc3Rfc2l6ZTsgIC8vIFRoZXNlIGFyZSBleGNsdWRlZCBiL2MgdGhpcyBpcyB0aGUgaGVhZGVyCit9OworCisvKiBPRlBNQlRfRFJPUCBiYW5kIC0gZHJvcCBwYWNrZXRzICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9kcm9wIDogb2ZfbWV0ZXJfYmFuZCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCByYXRlOworICAgIHVpbnQzMl90IGJ1cnN0X3NpemU7CisgICAgcGFkKDQpOworfTsKKworLyogT0ZQTUJUX0RTQ1BfUkVNQVJLIGJhbmQgLSBSZW1hcmsgRFNDUCBpbiB0aGUgSVAgaGVhZGVyICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9kc2NwX3JlbWFyayA6IG9mX21ldGVyX2JhbmQgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDMyX3QgcmF0ZTsKKyAgICB1aW50MzJfdCBidXJzdF9zaXplOworICAgIHVpbnQ4X3QgcHJlY19sZXZlbDsKKyAgICBwYWQoMyk7Cit9OworCisvKiBPRlBNQlRfRVhQRVJJTUVOVEVSIGJhbmQgLSBFeHBlcmltZW50ZXIgdHlwZS4KKyogVGhlIHJlc3Qgb2YgdGhlIGJhbmQgaXMgZXhwZXJpbWVudGVyLWRlZmluZWQuICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9leHBlcmltZW50ZXIgOiBvZl9tZXRlcl9iYW5kIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCByYXRlOworICAgIHVpbnQzMl90IGJ1cnN0X3NpemU7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyOworfTsKKworLyogTXVsdGlwYXJ0IFJlcXVlc3QgKi8KK3N0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSA/OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLyogTXVsdGlwYXJ0IFJlcGx5ICovCitzdHJ1Y3Qgb2Zfc3RhdHNfcmVwbHkgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09ID87CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXF1ZXN0IG9mIHR5cGUgT0ZQU1RfRkxPVyhfREVTQykgKi8KK3N0cnVjdCBvZl9mbG93X3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgcGFkKDMpOworICAgIG9mX3BvcnRfbm9fdCBvdXRfcG9ydDsKKyAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CisgICAgcGFkKDQpOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICBvZl9tYXRjaF90IG1hdGNoOworfTsKKworLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXBseSBvZiB0eXBlIE9GUFNUX0ZMT1coX0RFU0MpICovCitzdHJ1Y3Qgb2ZfZmxvd19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOworICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBsaXN0KG9mX2Zsb3dfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlIE9GUE1QX0ZMT1dfKFNUQVRTKUxJR0hUV0VJR0hUICovCitzdHJ1Y3Qgb2ZfZmxvd19saWdodHdlaWdodF9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTc7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBwYWQoNCk7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIG9mX21hdGNoX3QgbWF0Y2g7Cit9OworCisvKiBFbnRyeSBmb3IgT0ZQU1RfRkxPVyAqLworc3RydWN0IG9mX2Zsb3dfc3RhdHNfZW50cnkgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoMik7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMSk7CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICBvZl9tYXRjaF90IG1hdGNoOworICAgIG9mX3N0YXRfdCBzdGF0czsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKK307CisKKy8qIEVudHJ5IGZvciBPRlBNUF9GTE9XXyhTVEFUUylMSUdIVFdFSUdIVCAqLworc3RydWN0IG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfZW50cnkgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoMik7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBlbnVtIG9mcF9mbG93X3N0YXRzX3JlYXNvbiByZWFzb247CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBvZl9zdGF0X3Qgc3RhdHM7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUFNUX0ZMT1dfKFNUQVRTKUxJR0hUV0VJR0hUIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9mbG93X2xpZ2h0d2VpZ2h0X3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE3OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBsaXN0KG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlIE9GUE1QX0FHR1JFR0FURV9TVEFUUy4gKi8KK3N0cnVjdCBvZl9hZ2dyZWdhdGVfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDI7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBwYWQoNCk7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIG9mX21hdGNoX3QgbWF0Y2g7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX0FHR1JFR0FURV9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX2FnZ3JlZ2F0ZV9zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAyOworICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9zdGF0X3Qgc3RhdHM7Cit9OworCisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlcyBPRlBNUF9QT1JUX1NUQVRTICovCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCgyKTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CisgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKKyAgICB1aW50NjRfdCByeF9wYWNrZXRzOworICAgIHVpbnQ2NF90IHR4X3BhY2tldHM7CisgICAgdWludDY0X3QgcnhfYnl0ZXM7CisgICAgdWludDY0X3QgdHhfYnl0ZXM7CisgICAgdWludDY0X3QgcnhfZHJvcHBlZDsKKyAgICB1aW50NjRfdCB0eF9kcm9wcGVkOworICAgIHVpbnQ2NF90IHJ4X2Vycm9yczsKKyAgICB1aW50NjRfdCB0eF9lcnJvcnM7CisgICAgbGlzdChvZl9wb3J0X3N0YXRzX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfUE9SVF9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9wb3J0X3N0YXRzX2VudHJ5X3QpIGVudHJpZXM7Cit9OworCisvKiBDb21tb24gaGVhZGVyIGZvciBhbGwgcG9ydCBzdGF0cyBwcm9wZXJ0aWVzLiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKKy8qIEV0aGVybmV0IHBvcnQgc3RhdHMgcHJvcGVydHkuICovCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9zdGF0c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCg0KTsKKyAgICB1aW50NjRfdCByeF9mcmFtZV9lcnI7CisgICAgdWludDY0X3Qgcnhfb3Zlcl9lcnI7CisgICAgdWludDY0X3QgcnhfY3JjX2VycjsKKyAgICB1aW50NjRfdCBjb2xsaXNpb25zOworfTsKKworLyogT3B0aWNhbCBwb3J0IHN0YXRzIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcF9vcHRpY2FsIDogb2ZfcG9ydF9zdGF0c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICB1aW50MzJfdCB0eF9mcmVxX2xtZGE7CisgICAgdWludDMyX3QgdHhfb2Zmc2V0OworICAgIHVpbnQzMl90IHR4X2dyaWRfc3BhbjsKKyAgICB1aW50MzJfdCByeF9mcmVxX2xtZGE7CisgICAgdWludDMyX3Qgcnhfb2Zmc2V0OworICAgIHVpbnQzMl90IHJ4X2dyaWRfc3BhbjsKKyAgICB1aW50MTZfdCB0eF9wd3I7CisgICAgdWludDE2X3QgcnhfcHdyOworICAgIHVpbnQxNl90IGJpYXNfY3VycmVudDsKKyAgICB1aW50MTZfdCB0ZW1wZXJhdHVyZTsKK307CisKKy8qIEV4cGVyaW1lbnRlciBwb3J0IHN0YXRzIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9wb3J0X3N0YXRzX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiBPRlBNUF9QT1JUX0RFU0MuICovCitzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMzsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICBwYWQoNCk7Cit9OworCisvKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcGx5IG9mIE9GUE1QX1BPUlRfREVTQy4gKi8KK3N0cnVjdCBvZl9wb3J0X2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTM7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfcG9ydF9kZXNjX3QpIGVudHJpZXM7Cit9OworCisvKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcXVlc3Qgb2YgT0ZQTVBfUVVFVUVfU1RBVFMuICovCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDU7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CisgICAgdWludDMyX3QgcXVldWVfaWQ7Cit9OworCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfZW50cnkgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNik7CisgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CisgICAgdWludDMyX3QgcXVldWVfaWQ7CisgICAgdWludDY0X3QgdHhfYnl0ZXM7CisgICAgdWludDY0X3QgdHhfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF9lcnJvcnM7CisgICAgdWludDMyX3QgZHVyYXRpb25fc2VjOworICAgIHVpbnQzMl90IGR1cmF0aW9uX25zZWM7CisgICAgbGlzdChvZl9xdWV1ZV9zdGF0c19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9xdWV1ZV9zdGF0c19lbnRyeV90KSBlbnRyaWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHF1ZXVlIHByb3BlcnRpZXMgKi8KK3N0cnVjdCBvZl9xdWV1ZV9zdGF0c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogRXhwZXJpbWVudGVyIHF1ZXVlIHByb3BlcnR5IGRlc2NyaXB0aW9uLiAqLworc3RydWN0IG9mX3F1ZXVlX3N0YXRzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfcXVldWVfc3RhdHNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXF1ZXN0IG9mIE9GUE1QX1FVRVVFX0RFU0MgKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICB1aW50MzJfdCBxdWV1ZV9pZDsKK307CisKK3N0cnVjdCBvZl9xdWV1ZV9kZXNjIHsKKyAgICB1aW50MzJfdCBwb3J0X25vOworICAgIHVpbnQzMl90IHF1ZXVlX2lkOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNik7CisgICAgbGlzdChvZl9xdWV1ZV9kZXNjX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfUVVFVUVfREVTQyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3F1ZXVlX2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTU7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfcXVldWVfZGVzY190KSBlbnRyaWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHF1ZXVlIHByb3BlcnRpZXMgKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBNaW4tUmF0ZSBxdWV1ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4gKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3Byb3BfbWluX3JhdGUgOiBvZl9xdWV1ZV9kZXNjX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgcmF0ZTsKKyAgICBwYWQoMik7Cit9OworCisvKiBNYXgtUmF0ZSBxdWV1ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4gKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3Byb3BfbWF4X3JhdGUgOiBvZl9xdWV1ZV9kZXNjX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgcmF0ZTsKKyAgICBwYWQoMik7Cit9OworCisvKiBFeHBlcmltZW50ZXIgcXVldWUgcHJvcGVydHkgZGVzY3JpcHRpb24uICovCitzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3F1ZXVlX2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogQm9keSBvZiBPRlBNUF9HUk9VUF9TVEFUUyAqLworc3RydWN0IG9mX2dyb3VwX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSA2OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHBhZCg0KTsKK307CisKK3N0cnVjdCBvZl9ncm91cF9zdGF0c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCgyKTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICB1aW50MzJfdCByZWZfY291bnQ7CisgICAgcGFkKDQpOworICAgIHVpbnQ2NF90IHBhY2tldF9jb3VudDsKKyAgICB1aW50NjRfdCBieXRlX2NvdW50OworICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKKyAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOworICAgIGxpc3Qob2ZfYnVja2V0X2NvdW50ZXJfdCkgYnVja2V0X3N0YXRzOworfTsKKworLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9HUk9VUF9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX2dyb3VwX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDY7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfZ3JvdXBfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIFVzZWQgaW4gZ3JvdXAgc3RhdHMgcmVwbGllcy4gKi8KK3N0cnVjdCBvZl9idWNrZXRfY291bnRlciB7CisgICAgdWludDY0X3QgcGFja2V0X2NvdW50OworICAgIHVpbnQ2NF90IGJ5dGVfY291bnQ7Cit9OworCisvKiBCb2R5IG9mIE9GUE1QX0dST1VQX0RFU0MgcmVxdWVzdHMuICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfZGVzY19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNzsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfZ3JvdXBfZGVzY19zdGF0c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2dyb3VwX3R5cGUgZ3JvdXBfdHlwZTsKKyAgICBwYWQoMSk7CisgICAgdWludDMyX3QgZ3JvdXBfaWQ7CisgICAgdWludDE2X3QgYnVja2V0X2FycmF5X2xlbiA9PSBsZW5ndGgoYnVja2V0cyk7CisgICAgcGFkKDYpOworICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CisgICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX0dST1VQX0RFU0MgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl9ncm91cF9kZXNjX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDc7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfZ3JvdXBfZGVzY19zdGF0c19lbnRyeV90KSBlbnRyaWVzOworfTsKKworLyogQm9keSBvZiBPRlBNUF9HUk9VUF9GRUFUVVJFUyByZXF1ZXN0LiBHcm91cCBmZWF0dXJlcy4gKi8KK3N0cnVjdCBvZl9ncm91cF9mZWF0dXJlc19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gODsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfR1JPVVBfRkVBVFVSRVMgcmVxdWVzdC4gR3JvdXAgZmVhdHVyZXMuICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gODsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgdHlwZXM7CisgICAgZW51bSBvZnBfZ3JvdXBfY2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX2FsbDsKKyAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX3NlbGVjdDsKKyAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX2luZGlyZWN0OworICAgIHVpbnQzMl90IG1heF9ncm91cHNfZmY7CisgICAgdWludDMyX3QgYWN0aW9uc19hbGw7CisgICAgdWludDMyX3QgYWN0aW9uc19zZWxlY3Q7CisgICAgdWludDMyX3QgYWN0aW9uc19pbmRpcmVjdDsKKyAgICB1aW50MzJfdCBhY3Rpb25zX2ZmOworfTsKKworLyogQm9keSBvZiBPRlBNUF9NRVRFUl9TVEFUUyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDk7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgbWV0ZXJfaWQ7CisgICAgcGFkKDQpOworfTsKKworc3RydWN0IG9mX21ldGVyX3N0YXRzIHsKKyAgICB1aW50MzJfdCBtZXRlcl9pZDsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDYpOworICAgIHVpbnQzMl90IHJlZl9jb3VudDsKKyAgICB1aW50NjRfdCBwYWNrZXRfaW5fY291bnQ7CisgICAgdWludDY0X3QgYnl0ZV9pbl9jb3VudDsKKyAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CisgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKKyAgICBsaXN0KG9mX21ldGVyX2JhbmRfc3RhdHNfdCkgYmFuZF9zdGF0czsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfTUVURVJfU1RBVFMgcmVxdWVzdCAqLworc3RydWN0IG9mX21ldGVyX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDk7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfbWV0ZXJfc3RhdHNfdCkgZW50cmllczsKK307CisKKy8qIFN0YXRpc3RpY3MgZm9yIGVhY2ggbWV0ZXIgYmFuZCAqLworc3RydWN0IG9mX21ldGVyX2JhbmRfc3RhdHMgeworICAgIHVpbnQ2NF90IHBhY2tldF9iYW5kX2NvdW50OworICAgIHVpbnQ2NF90IGJ5dGVfYmFuZF9jb3VudDsKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfTUVURVJfREVTQyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfY29uZmlnX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBtZXRlcl9pZDsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfbWV0ZXJfY29uZmlnIHsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CisgICAgdWludDMyX3QgbWV0ZXJfaWQ7CisgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGVudHJpZXM7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX01FVEVSX0RFU0MgcmVxdWVzdCAqLworc3RydWN0IG9mX21ldGVyX2NvbmZpZ19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9tZXRlcl9jb25maWdfdCkgZW50cmllczsKK307CisKKworLyogQm9keSBvZiBPRlBNUF9NRVRFUl9GRUFUVVJFUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX21ldGVyX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKK307CisKK3N0cnVjdCBvZl9tZXRlcl9mZWF0dXJlcyB7CisgICAgdWludDMyX3QgICAgbWF4X21ldGVyOworICAgIHVpbnQzMl90ICAgIGJhbmRfdHlwZXM7CisgICAgdWludDMyX3QgICAgY2FwYWJpbGl0aWVzOworICAgIHVpbnQ4X3QgICAgIG1heF9iYW5kczsKKyAgICB1aW50OF90ICAgICBtYXhfY29sb3I7CisgICAgcGFkKDIpOworICAgIHVpbnQzMl90IGZlYXR1cmVzOworICAgIHBhZCg0KTsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfTUVURVJfRkVBVFVSRVMgcmVxdWVzdC4gTWV0ZXIgZmVhdHVyZXMuICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfZmVhdHVyZXNfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTE7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIG9mX21ldGVyX2ZlYXR1cmVzX3QgZmVhdHVyZXM7CisKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfVEFCTEVfU1RBVFMgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl90YWJsZV9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMzsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKK307CisKK3N0cnVjdCBvZl90YWJsZV9zdGF0c19lbnRyeSB7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgdWludDMyX3QgYWN0aXZlX2NvdW50OworICAgIHVpbnQ2NF90IGxvb2t1cF9jb3VudDsKKyAgICB1aW50NjRfdCBtYXRjaGVkX2NvdW50OworfTsKKworLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9UQUJMRV9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3RhYmxlX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDM7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfdGFibGVfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEZsb3cgbW9uaXRvciBjb21tYW5kcyAqLworZW51bSBvZnBfZmxvd19tb25pdG9yX2NvbW1hbmQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBGTUNfQUREID0gMCwKKyAgICBPRlBGTUNfTU9ESUZZID0gMSwKKyAgICBPRlBGTUNfREVMRVRFID0gMiwKK307CisKK3N0cnVjdCBvZl9mbG93X21vbml0b3JfZW50cnkgeworICAgIHVpbnQzMl90IG1vbml0b3JfaWQ7CisgICAgdWludDMyX3Qgb3V0X3BvcnQ7CisgICAgdWludDMyX3Qgb3V0X2dyb3VwOworICAgIGVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mbGFncyBmbGFnczsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIGVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9jb21tYW5kIGNvbW1hbmQ7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfRkxPV19NT05JVE9SIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9mbG93X21vbml0b3JfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE2OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfZmxvd19tb25pdG9yX2VudHJ5X3QpIGVudHJpZXM7Cit9OworCitlbnVtIG9mcF9mbG93X3VwZGF0ZV9ldmVudCh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBGTUVfSU5JVElBTCA9IDAsCisgICAgT0ZQRk1FX0FEREVEID0gMSwKKyAgICBPRlBGTUVfUkVNT1ZFRCA9IDIsCisgICAgT0ZQRk1FX01PRElGSUVEID0gMywKKyAgICBPRlBGTUVfQUJCUkVWID0gNCwKKyAgICBPRlBGTUVfUEFVU0VEID0gNSwKKyAgICBPRlBGTUVfUkVTVU1FRCA9IDYsCit9OworCitzdHJ1Y3Qgb2ZfZmxvd19tb25pdG9yX3JlcGx5X2VudHJ5IHsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfZmxvd191cGRhdGVfZXZlbnQgZXZlbnQ7Cit9OworCisvKiBCb2R5IG9mIE9GUE1QX0ZMT1dfTU9OSVRPUiByZXBseSAqLworc3RydWN0IG9mX2Zsb3dfbW9uaXRvcl9yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9mbG93X21vbml0b3JfcmVwbHlfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfVEFCTEVfREVTQyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3RhYmxlX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE0OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9UQUJMRV9ERVNDIHJlcXVlc3QuICovCitzdHJ1Y3Qgb2ZfdGFibGVfZGVzY19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90YWJsZV9kZXNjX3QpIGVudHJpZXM7Cit9OworCisKKy8qIEJvZHkgb2YgT0ZQTVBfVEFCTEVfRkVBVFVSRVMgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTI7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90YWJsZV9mZWF0dXJlc190KSBlbnRyaWVzOworfTsKKworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVzIHsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBlbnVtIG9mcF90YWJsZV9mZWF0dXJlc19jb21tYW5kIGNvbW1hbmQ7CisgICAgZW51bSBvZnBfdGFibGVfZmVhdHVyZV9mbGFnIGZlYXR1cmVzOworICAgIG9mX3RhYmxlX25hbWVfdCBuYW1lOworICAgIHVpbnQ2NF90IG1ldGFkYXRhX21hdGNoOworICAgIHVpbnQ2NF90IG1ldGFkYXRhX3dyaXRlOworICAgIGVudW0gb2ZwX3RhYmxlX2NvbmZpZyBjYXBhYmlsaXRpZXM7CisgICAgdWludDMyX3QgbWF4X2VudHJpZXM7CisgICAgbGlzdChvZl90YWJsZV9mZWF0dXJlX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfVEFCTEVfRkVBVFVSRVMgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90YWJsZV9mZWF0dXJlc190KSBlbnRyaWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIFRhYmxlIEZlYXR1cmUgUHJvcGVydGllcyAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09ID87CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7Cit9OworCisvKiBJbnN0cnVjdGlvbnMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfaW5zdHJ1Y3Rpb25zIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMDsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICAvLyBGSVhNRSBDaGVjayBpZiBpbnN0cnVjdGlvbl90IGlzIHJpZ2h0IGZvciBpZHMgaGVyZQorICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25faWRfdCkgICBpbnN0cnVjdGlvbl9pZHM7Cit9OworCisvKiBJbnN0cnVjdGlvbiBNaXNzIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX2lkX3QpICAgaW5zdHJ1Y3Rpb25faWRzOworfTsKKworLyogSW5zdHJ1Y3Rpb24gSUQgKi8KK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl9pZCB7CisgICAgdWludDE2X3QgdHlwZTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgb2Zfb2N0ZXRzX3QgZXhwX2RhdGE7Cit9OworCisvKiBPRlBURlBUX1RBQkxFX1NZTkNfRlJPTSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF90YWJsZV9zeW5jX2Zyb20gOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNjsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQ4X3QpIHRhYmxlX2lkczsKK307CisKKy8qIE9GUFRGUFRfTkVYVF9UQUJMRVMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAyOworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfdWludDhfdCkgbmV4dF90YWJsZV9pZHM7Cit9OworCisvKiBORVhUX1RBQkxFU19NSVNTIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX25leHRfdGFibGVzX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAzOworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfdWludDhfdCkgbmV4dF90YWJsZV9pZHM7Cit9OworCisvKiBPRlBURlBUX1dSSVRFX0FDVElPTlMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDQ7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKK307CisKKy8qIEZQVEZQVF9XUklURV9BQ1RJT05TX01JU1MgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX2FjdGlvbl9pZF90KSBhY3Rpb25faWRzOworfTsKKworLyogT0ZQVEZQVF9BUFBMWV9BQ1RJT05TIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X2FjdGlvbnMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA2OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7Cit9OworCisvKiBPRlBURlBUX0FQUExZX0FDVElPTlNfTUlTUyBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9hcHBseV9hY3Rpb25zX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA3OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7Cit9OworCisvKiBBY3Rpb24gSUQgKi8KK3N0cnVjdCBvZl9hY3Rpb25faWQgeworICAgIHVpbnQxNl90IHR5cGU7CisgICAgdWludDE2X3QgbGVuOworICAgIG9mX29jdGV0c190IGV4cF9kYXRhOworfTsKKworLyogT0ZQVEZQVF9NQVRDSCBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9tYXRjaCA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDg7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfV0lMRENBUkRTIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dpbGRjYXJkcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDEwOworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfdWludDMyX3QpIG94bV9pZHM7Cit9OworCisvKiBPRlBURlBUX1dSSVRFX1NFVEZJRUxEIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX3NldGZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTI7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfV1JJVEVfU0VURklFTERfTUlTUyBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9zZXRmaWVsZF9taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTM7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfQVBQTFlfU0VURklFTEQgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfc2V0ZmllbGQgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9BUFBMWV9TRVRGSUVMRF9NSVNTIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X3NldGZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9XUklURV9DT1BZRklFTEQgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfY29weWZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfV1JJVEVfQ09QWUZJRUxEX01JU1MgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfY29weWZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9BUFBMWV9DT1BZRklFTEQgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfY29weWZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMjA7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEX01JU1MgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfY29weWZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAyMTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9QQUNLRVRfVFlQRVMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfb3htX3ZhbHVlcyB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2Zfb2N0ZXRzX3Qgb3htX3ZhbHVlczsKK307CisKKy8qIE9GUFRGUFRfRVhQRVJJTUVOVEVSIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY1NTM0OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgICAgICAgICBzdWJ0eXBlOworfTsKKworLyogT0ZQVEZQVF9FWFBFUklNRU5URVJfTUlTUyBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9leHBlcmltZW50ZXJfbWlzcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgICAgICAgICBzdWJ0eXBlOworfTsKKworLyoKKyAqIE5vdCBzdXBwb3J0aW5nIHRoZSBmbG93IG1vbml0b3IgbXVsdGlwYXJ0IG1lc3NhZ2VzLiBUaGlzIG1lc3NhZ2UgaXMKKyAqIHBvb3JseSBkZXNpZ25lZCBiZWNhdXNlIGl0IGluY2x1ZGVzIGEgdmFyaWFibGUgbGVuZ3RoIG1hdGNoIGluc2lkZSBhCisgKiBzdHJ1Y3QgKG9mcF9mbG93X21vbml0b3JfcmVxdWVzdCkgd2l0aCBubyBleHBsaWNpdCBsZW5ndGggbWVtYmVyLgorICogSSdtIG5vdCB3cml0aW5nIHRoZSBzcGVjaWFsIGNhc2UgY29kZSB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbCBsZW5ndGguCisgKi8KKworCisgLyogU2VuZCBwYWNrZXQgKGNvbnRyb2xsZXIgLT4gZGF0YXBhdGgpLiAqLworIHN0cnVjdCBvZl9wYWNrZXRfb3V0IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDEzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgYnVmZmVyX2lkOworICAgIHVpbnQxNl90IGFjdGlvbnNfbGVuID09IGxlbmd0aChhY3Rpb25zKTsKKyAgICBwYWQoMik7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCYXJyaWVyIG1lc3NhZ2UgcmVxdWVzdCAqLworc3RydWN0IG9mX2JhcnJpZXJfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAyMDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworfTsKKworLyogQmFycmllciBtZXNzYWdlIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9iYXJyaWVyX3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDIxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisvKiBSb2xlIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9yb2xlX3JlcXVlc3QgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMjQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9jb250cm9sbGVyX3JvbGUgcm9sZTsKKyAgICB1aW50MTZfdCBzaG9ydF9pZDsKKyAgICBwYWQoMik7CisgICAgdWludDY0X3QgZ2VuZXJhdGlvbl9pZDsKK307CisKKy8qIFJvbGUgcmVwbHkgKi8KK3N0cnVjdCBvZl9yb2xlX3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDI1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlIHJvbGU7CisgICAgdWludDE2X3Qgc2hvcnRfaWQ7CisgICAgcGFkKDIpOworICAgIHVpbnQ2NF90IGdlbmVyYXRpb25faWQ7Cit9OworCisvKiBCdW5kbGUgY29udHJvbCBtZXNzYWdlICovCitzdHJ1Y3Qgb2ZfYnVuZGxlX2N0cmxfbXNnIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDMzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgYnVuZGxlX2lkOworICAgIGVudW0gb2ZwX2J1bmRsZV9jdHJsX3R5cGUgYnVuZGxlX2N0cmxfdHlwZTsKKyAgICBlbnVtIG9mcF9idW5kbGVfZmxhZ3MgZmxhZ3M7CisgICAgbGlzdChvZl9idW5kbGVfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogQnVuZGxlIGFkZCBtZXNzYWdlICovCitzdHJ1Y3Qgb2ZfYnVuZGxlX2FkZF9tc2cgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MzJfdCBidW5kbGVfaWQ7CisgICAgcGFkKDEpOworICAgIGVudW0gb2ZwX2J1bmRsZV9mbGFncyBmbGFnczsKKyAgICBvZl9oZWFkZXJfdCBtZXNzYWdlOworICAgIGxpc3Qob2ZfYnVuZGxlX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJ1bmRsZSBwcm9wZXJ0eSB0eXBlcy4gKi8KK3N0cnVjdCBvZl9idW5kbGVfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKKy8qIEJ1bmRsZSB0aW1lIHByb3BlcnR5LiAqLworc3RydWN0IG9mX2J1bmRsZV9wcm9wX3RpbWUgOiBvZl9idW5kbGVfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90aW1lX3QpIHNjaGVkdWxlZF90aW1lOworfTsKKworLyogRXhwZXJpbWVudGVyIGJ1bmRsZSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2J1bmRsZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX2J1bmRsZV9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIFRpbWUgRm9ybWF0LiAqLworc3RydWN0IG9mX3RpbWUgeworICAgIHVpbnQ2NF90IHNlY29uZHM7CisgICAgdWludDMyX3QgbmFub3NlY29uZHM7CisgICAgcGFkKDQpOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIGFzeW5jIGNvbmZpZyBQcm9wZXJ0aWVzICovCitzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBPRlBBQ1BUX1BBQ0tFVF9JTl9TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BhY2tldF9pbl9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1BBQ0tFVF9JTl9NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9wYWNrZXRfaW5fbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfUE9SVF9TVEFUVVNfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9wb3J0X3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDI7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1BPUlRfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BvcnRfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2Zsb3dfcmVtb3ZlZF9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9mbG93X3JlbW92ZWRfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfUk9MRV9TVEFUVVNfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yb2xlX3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1JPTEVfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3JvbGVfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDc7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1RBQkxFX1NUQVRVU19TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3RhYmxlX3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1RBQkxFX1NUQVRVU19NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF90YWJsZV9zdGF0dXNfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfUkVRVUVTVEZPUldBUkRfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yZXF1ZXN0Zm9yd2FyZF9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBtYXNrOworfTsKKworLyogT0ZQQUNQVF9SRVFVRVNURk9SV0FSRF9NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yZXF1ZXN0Zm9yd2FyZF9tYXN0ZXIgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfRkxPV19TVEFUU19TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2Zsb3dfc3RhdHNfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfRkxPV19TVEFUU19NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9mbG93X3N0YXRzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBtYXNrOworfTsKKworLyogT0ZQQUNQVF9DT05UX1NUQVRVU19TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2NvbnRfc3RhdHVzX3NsYXZlIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX0NPTlRfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2NvbnRfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBtYXNrOworfTsKKworLyogT0ZQVEZQVF9FWFBFUklNRU5URVJfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9leHBlcmltZW50ZXJfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIC8vdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgLy91aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIE9GUFRGUFRfRVhQRVJJTUVOVEVSX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2V4cGVyaW1lbnRlcl9tYXN0ZXIgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIC8vdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgLy91aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIFBhY2tldCByZWNlaXZlZCBvbiBwb3J0IChkYXRhcGF0aCAtPiBjb250cm9sbGVyKS4gKi8KK3N0cnVjdCBvZl9wYWNrZXRfaW4gOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgdWludDE2X3QgdG90YWxfbGVuOworICAgIHVpbnQ4X3QgcmVhc29uOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgdWludDY0X3QgY29va2llOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgcGFkKDIpOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBGbG93IHJlbW92ZWQgKGRhdGFwYXRoIC0+IGNvbnRyb2xsZXIpLiAqLworc3RydWN0IG9mX2Zsb3dfcmVtb3ZlZCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgZW51bSBvZnBfZmxvd19yZW1vdmVkX3JlYXNvbiByZWFzb247CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50NjRfdCBjb29raWU7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBvZl9zdGF0X3Qgc3RhdHM7Cit9OworCisvKiBBIHBoeXNpY2FsIHBvcnQgaGFzIGNoYW5nZWQgaW4gdGhlIGRhdGFwYXRoICovCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0dXMgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTI7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9wb3J0X3JlYXNvbiByZWFzb247CisgICAgcGFkKDcpOworICAgIG9mX3BvcnRfZGVzY190IGRlc2M7Cit9OworCisvKiBSb2xlIHN0YXR1cyBldmVudCBtZXNzYWdlLiAqLworc3RydWN0IG9mX3JvbGVfc3RhdHVzIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDMwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlIHJvbGU7CisgICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlX3JlYXNvbiByZWFzb247CisgICAgcGFkKDMpOworICAgIHVpbnQ2NF90IGdlbmVyYXRpb25faWQ7CisgICAgbGlzdChvZl9yb2xlX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBSb2xlIFByb3BlcnRpZXMgKi8KK3N0cnVjdCBvZl9yb2xlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBFeHBlcmltZW50ZXIgcm9sZSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3JvbGVfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9yb2xlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIFRhYmxlIGRlc2NyaW90aW9uICovCitzdHJ1Y3Qgb2ZfdGFibGVfZGVzYyB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgcGFkKDEpOworICAgIGVudW0gb2ZwX3RhYmxlX2NvbmZpZyBjb25maWc7CisgICAgbGlzdChvZl90YWJsZV9tb2RfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworCisvKiBBIHRhYmxlIGNvbmZpZyBoYXMgY2hhbmdlZCBpbiB0aGUgZGF0YXBhdGggKi8KK3N0cnVjdCBvZl90YWJsZV9zdGF0dXMgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF90YWJsZV9yZWFzb24gcmVhc29uOworICAgIHBhZCg3KTsKKyAgICBvZl90YWJsZV9kZXNjX3QgdGFibGU7Cit9OworCisvKiBHcm91cC9NZXRlciByZXF1ZXN0IGZvcndhcmRpbmcuICovCitzdHJ1Y3Qgb2ZfcmVxdWVzdGZvcndhcmQgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzI7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9oZWFkZXJfdCByZXF1ZXN0OworfTsKKworLyogT0ZQVF9IRUxMTy4gVGhpcyBtZXNzYWdlIGluY2x1ZGVzIHplcm8gb3IgbW9yZSBoZWxsbyBlbGVtZW50cyBoYXZpbmcKKyogdmFyaWFibGUgc2l6ZS4gVW5rbm93biBlbGVtZW50cyB0eXBlcyBtdXN0IGJlIGlnbm9yZWQvc2tpcHBlZCwgdG8gYWxsb3cKKyogZm9yIGZ1dHVyZSBleHRlbnNpb25zLiAqLworc3RydWN0IG9mX2hlbGxvIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBsaXN0KG9mX2hlbGxvX2VsZW1fdCkgZWxlbWVudHM7Cit9OworCisvKiBDb21tb24gaGVhZGVyIGZvciBhbGwgSGVsbG8gRWxlbWVudHMgKi8KK3N0cnVjdCBvZl9oZWxsb19lbGVtIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogVmVyc2lvbiBiaXRtYXAgSGVsbG8gRWxlbWVudCAqLworc3RydWN0IG9mX2hlbGxvX2VsZW1fdmVyc2lvbmJpdG1hcCA6IG9mX2hlbGxvX2VsZW0geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgYml0bWFwczsKK307CisKKy8qIEVDSE8gUkVRVUVTVCAqLworc3RydWN0IG9mX2VjaG9fcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEVDSE8gUkVQTFkgKi8KK3N0cnVjdCBvZl9lY2hvX3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogT0ZQVF9FUlJPUjogRXJyb3IgbWVzc2FnZS4gKi8KK3N0cnVjdCBvZl9lcnJvcl9tc2cgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09ID87Cit9OworCisvKiBFeHBlcmltZW50ZXIgZXh0ZW5zaW9uIG1lc3NhZ2UuICovCitzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBzdWJ0eXBlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBGZWF0dXJlcyBSZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfZmVhdHVyZXNfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisvKiBGZWF0dXJlcyBSZXBseSAgKG9mcF9zd2l0Y2hfZmVhdHVyZXMpICovCitzdHJ1Y3Qgb2ZfZmVhdHVyZXNfcmVwbHkgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gNjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGRhdGFwYXRoX2lkOworICAgIHVpbnQzMl90IG5fYnVmZmVyczsKKyAgICB1aW50OF90IG5fdGFibGVzOworICAgIHVpbnQ4X3QgYXV4aWxpYXJ5X2lkOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIHVpbnQzMl90IHJlc2VydmVkOworfTsKKworLyogR2V0IENvbmZpZ3VyYXRpb24gTWVzc2FnZSAqLworc3RydWN0IG9mX2dldF9jb25maWdfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA3OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisvKiBHZXQgQ29uZmlndXJhdGlvbiBSZXBseSAob2ZwX3N3aXRjaF9jb25maWcpICovCitzdHJ1Y3Qgb2ZfZ2V0X2NvbmZpZ19yZXBseSA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29uZmlnX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IG1pc3Nfc2VuZF9sZW47Cit9OworCisvKiBTZXQgQ29uZmlndXJhdGlvbiBNZXNzYWdlICovCitzdHJ1Y3Qgb2Zfc2V0X2NvbmZpZyA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29uZmlnX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IG1pc3Nfc2VuZF9sZW47Cit9OworCisvKiBGbG93IEFkZCBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19hZGQgOiBvZl9mbG93X21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09IDA7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cit9OworCisvKiBGbG93IE1vZGlmeSBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19tb2RpZnkgOiBvZl9mbG93X21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09IDE7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cit9OworCisvKiBGbG93IE1vZGlmeSBTdHJpY3QgTWVzc2FnZSAqLworc3RydWN0IG9mX2Zsb3dfbW9kaWZ5X3N0cmljdCA6IG9mX2Zsb3dfbW9kIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gMjsKKyAgICB1aW50MTZfdCBpZGxlX3RpbWVvdXQ7CisgICAgdWludDE2X3QgaGFyZF90aW1lb3V0OworICAgIHVpbnQxNl90IHByaW9yaXR5OworICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKKyAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CisgICAgdWludDMyX3Qgb3V0X2dyb3VwOworICAgIGVudW0gb2ZwX2Zsb3dfbW9kX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IGltcG9ydGFuY2U7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKK307CisKKy8qIEZsb3cgRGVsZXRlIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9mbG93X2RlbGV0ZSA6IG9mX2Zsb3dfbW9kIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gMzsKKyAgICB1aW50MTZfdCBpZGxlX3RpbWVvdXQ7CisgICAgdWludDE2X3QgaGFyZF90aW1lb3V0OworICAgIHVpbnQxNl90IHByaW9yaXR5OworICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKKyAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CisgICAgdWludDMyX3Qgb3V0X2dyb3VwOworICAgIGVudW0gb2ZwX2Zsb3dfbW9kX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IGltcG9ydGFuY2U7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKK307CisKKy8qIEZsb3cgRGVsZXRlIFN0cmljdCBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19kZWxldGVfc3RyaWN0IDogb2ZfZmxvd19tb2QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50NjRfdCBjb29raWU7CisgICAgdWludDY0X3QgY29va2llX21hc2s7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBvZl9mbV9jbWRfdCBfY29tbWFuZCA9PSA0OworICAgIHVpbnQxNl90IGlkbGVfdGltZW91dDsKKyAgICB1aW50MTZfdCBoYXJkX3RpbWVvdXQ7CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgdWludDMyX3QgYnVmZmVyX2lkOworICAgIG9mX3BvcnRfbm9fdCBvdXRfcG9ydDsKKyAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CisgICAgZW51bSBvZnBfZmxvd19tb2RfZmxhZ3MgZmxhZ3M7CisgICAgdWludDE2X3QgaW1wb3J0YW5jZTsKKyAgICBvZl9tYXRjaF90IG1hdGNoOworICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25fdCkgaW5zdHJ1Y3Rpb25zOworfTsKKworLyogR3JvdXAgQWRkIG1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9ncm91cF9hZGQgOiBvZl9ncm91cF9tb2QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDA7CisgICAgZW51bSBvZnBfZ3JvdXBfdHlwZSBncm91cF90eXBlOworICAgIHBhZCgxKTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICB1aW50MTZfdCBidWNrZXRfYXJyYXlfbGVuID09IGxlbmd0aChidWNrZXRzKTsKKyAgICBwYWQoMik7CisgICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOworICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CisgICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBHcm91cCBNb2RpZnkgTWVzc2FnZSAqLworc3RydWN0IG9mX2dyb3VwX21vZGlmeSA6IG9mX2dyb3VwX21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gMTsKKyAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CisgICAgcGFkKDEpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CisgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKKyAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEdyb3VwIERlbGV0ZSBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfZGVsZXRlIDogb2ZfZ3JvdXBfbW9kIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfZ3JvdXBfbW9kX2NvbW1hbmQgY29tbWFuZCA9PSAyOworICAgIGVudW0gb2ZwX2dyb3VwX3R5cGUgZ3JvdXBfdHlwZTsKKyAgICBwYWQoMSk7CisgICAgdWludDMyX3QgZ3JvdXBfaWQ7CisgICAgdWludDE2X3QgYnVja2V0X2FycmF5X2xlbiA9PSBsZW5ndGgoYnVja2V0cyk7CisgICAgcGFkKDIpOworICAgIGVudW0gb2ZwX2dyb3VwX2J1Y2tldCBjb21tYW5kX2J1Y2tldF9pZDsKKyAgICBsaXN0KG9mX2J1Y2tldF90KSBidWNrZXRzOworICAgIGxpc3Qob2ZfZ3JvdXBfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogR3JvdXAgSW5zZXJ0IEJ1Y2tldCBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfaW5zZXJ0X2J1Y2tldCA6IG9mX2dyb3VwX21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gMzsKKyAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CisgICAgcGFkKDEpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CisgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKKyAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEdyb3VwIFJlbW92ZSBCdWNrZXQgTWVzc2FnZSAqLworc3RydWN0IG9mX2dyb3VwX3JlbW92ZV9idWNrZXQgOiBvZl9ncm91cF9tb2QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDU7CisgICAgZW51bSBvZnBfZ3JvdXBfdHlwZSBncm91cF90eXBlOworICAgIHBhZCgxKTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICB1aW50MTZfdCBidWNrZXRfYXJyYXlfbGVuID09IGxlbmd0aChidWNrZXRzKTsKKyAgICBwYWQoMik7CisgICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOworICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CisgICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBIZWxsbyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2hlbGxvX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDA7CisgICAgZW51bSBvZnBfaGVsbG9fZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogQmFkIFJlcXVlc3QgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9yZXF1ZXN0X2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTsKKyAgICBlbnVtIG9mcF9iYWRfcmVxdWVzdF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEJhZCBBY3Rpb24gRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9hY3Rpb25fZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAyOworICAgIGVudW0gb2ZwX2JhZF9hY3Rpb25fY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCYWQgSW5zdHJ1Y3Rpb24gRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9pbnN0cnVjdGlvbl9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDM7CisgICAgZW51bSBvZnBfYmFkX2luc3RydWN0aW9uX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogQmFkIE1hdGNoIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9iYWRfbWF0Y2hfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA0OworICAgIGVudW0gb2ZwX2JhZF9tYXRjaF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEZsb3cgTW9kIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19tb2RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gNTsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBHcm91cCBNb2QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9ncm91cF9tb2RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gNjsKKyAgICBlbnVtIG9mcF9ncm91cF9tb2RfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogUG9ydCBNb2QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9wb3J0X21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA3OworICAgIGVudW0gb2ZwX3BvcnRfbW9kX2ZhaWxlZF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIFRhYmxlIE1vZCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX3RhYmxlX21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA4OworICAgIGVudW0gb2ZwX3RhYmxlX21vZF9mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBRdWV1ZSBPcCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX3F1ZXVlX29wX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDk7CisgICAgZW51bSBvZnBfcXVldWVfb3BfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogU3dpdGNoIENvbmZpZyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX3N3aXRjaF9jb25maWdfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTA7CisgICAgZW51bSBvZnBfc3dpdGNoX2NvbmZpZ19mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBSb2xlIFJlcXVlc3QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9yb2xlX3JlcXVlc3RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTE7CisgICAgZW51bSBvZnBfcm9sZV9yZXF1ZXN0X2ZhaWxlZF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIE1ldGVyIE1vZCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX21ldGVyX21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxMjsKKyAgICBlbnVtIG9mcF9tZXRlcl9tb2RfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogVGFibGUgRmVhdHVyZXMgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxMzsKKyAgICBlbnVtIG9mcF90YWJsZV9mZWF0dXJlc19mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCYWQgUHJvcGVydHkgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9wcm9wZXJ0eV9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDE0OworICAgIGVudW0gb2ZwX2JhZF9wcm9wZXJ0eV9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEFzeW5jIENvbmZpZyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxNTsKKyAgICBlbnVtIG9mcF9hc3luY19jb25maWdfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogRmxvdyBNb25pdG9yIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19tb25pdG9yX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDE2OworICAgIGVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCdW5kbGUgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9idW5kbGVfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTc7CisgICAgZW51bSBvZnBfYnVuZGxlX2ZhaWxlZF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEV4cGVyaW1lbnRlciBFcnJvciBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IHN1YnR5cGU7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEdldCBBc3luYyBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9hc3luY19nZXRfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAyNjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGxpc3Qob2ZfYXN5bmNfY29uZmlnX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEdldCBBc3luYyBSZXBseSBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfYXN5bmNfZ2V0X3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDI3OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgbGlzdChvZl9hc3luY19jb25maWdfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogU2V0IEFzeW5jIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9hc3luY19zZXQgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMjg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBsaXN0KG9mX2FzeW5jX2NvbmZpZ19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBkZXNjcmlwdGlvbiBzdGF0aXN0aWMgcmVxdWVzdCAqLworc3RydWN0IG9mX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDA7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7Cit9OworCisvKiBkZXNjcmlwdGlvbiBzdGF0aXN0aWMgcmVwbHkgKG9mcF9kZXNjKSAqLworc3RydWN0IG9mX2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgb2ZfZGVzY19zdHJfdCBtZnJfZGVzYzsKKyAgICBvZl9kZXNjX3N0cl90IGh3X2Rlc2M7CisgICAgb2ZfZGVzY19zdHJfdCBzd19kZXNjOworICAgIG9mX3NlcmlhbF9udW1fdCBzZXJpYWxfbnVtOworICAgIG9mX2Rlc2Nfc3RyX3QgZHBfZGVzYzsKK307CisKKy8qIGNvbnRyb2xsZXIgc3RhdHVzIHN0YXRpc3RpYyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfY29udHJvbGxlcl9zdGF0dXNfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE4OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLypjb250cm9sbGVyIHN0YXR1cyBzdGF0aXN0aWMgcmVwbHkgKi8KK3N0cnVjdCBvZl9jb250cm9sbGVyX3N0YXR1c19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxODsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeV90KSBjb250cm9sbGVyX3N0YXR1czsKK307CisKKy8qIEJ1bmRsZSBmZWF0dXJlcyBwcm9wZXJ0aWVzIGhlYWRlciAqLworc3RydWN0IG9mX2J1bmRsZV9mZWF0dXJlc19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogQnVuZGxlIGZlYXR1cmVzIHN0YXRpc3RpYyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfYnVuZGxlX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBlbnVtIG9mcF9idW5kbGVfZmVhdHVyZV9mbGFncyBmZWF0dXJlX3JlcXVlc3RfZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qQnVuZGxlIGZlYXR1cmVzIHN0YXRpc3RpYyByZXBseSAqLworc3RydWN0IG9mX2J1bmRsZV9mZWF0dXJlc19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgZW51bSBvZnBfYnVuZGxlX2ZlYXR1cmVfZmxhZ3MgY2FwYWJpbGl0aWVzOworICAgIHBhZCg2KTsKKyAgICBsaXN0KG9mX2J1bmRsZV9mZWF0dXJlc19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBCdW5kbGUgdGltZSBmZWF0dXJlcy4gKi8KK3N0cnVjdCBvZl9idW5kbGVfZmVhdHVyZXNfcHJvcF90aW1lIDogb2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3B7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgb2ZfdGltZV90IHNjaGVkX2FjY3VyYWN5OworICAgIG9mX3RpbWVfdCBzY2hlZF9tYXhfZnV0dXJlOworICAgIG9mX3RpbWVfdCBzY2hlZF9tYXhfcGFzdDsKKyAgICBvZl90aW1lX3QgdGltZXN0YW1wOworfTsKKworLyogRXhwZXJpbWVudGVyIHN0YXRzIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9leHBlcmltZW50ZXJfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDB4ZmZmZjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBzdWJ0eXBlOworfTsKKworLyogRXhwZXJpbWVudGVyIHN0YXRzIHJlcGx5ICovCitzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDB4ZmZmZjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3Qgc3VidHlwZTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMS4zLjEgUXVldWUgU3RydWN0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdHJ1Y3Qgb2ZfcXVldWVfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfcXVldWVfcHJvcF9taW5fcmF0ZSA6IG9mX3F1ZXVlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworICAgIHVpbnQxNl90IHJhdGU7CisgICAgcGFkKDYpOworfTsKKworc3RydWN0IG9mX3F1ZXVlX3Byb3BfbWF4X3JhdGUgOiBvZl9xdWV1ZV9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDI7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKKyAgICB1aW50MTZfdCByYXRlOworICAgIHBhZCg2KTsKK307CisKK3N0cnVjdCBvZl9xdWV1ZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3F1ZXVlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICBwYWQoNCk7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKK3N0cnVjdCBvZl9wYWNrZXRfcXVldWUgeworICAgIHVpbnQzMl90IHF1ZXVlX2lkOworICAgIG9mX3BvcnRfbm9fdCBwb3J0OworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNik7CisgICAgbGlzdChvZl9xdWV1ZV9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisKKworCmRpZmYgLS1naXQgYS9weV9nZW4vb2Z0eXBlLnB5IGIvcHlfZ2VuL29mdHlwZS5weQppbmRleCA2YzEzMDE1Li4wZmY3ODIzIDEwMDY0NAotLS0gYS9weV9nZW4vb2Z0eXBlLnB5CisrKyBiL3B5X2dlbi9vZnR5cGUucHkKQEAgLTE1MSw2ICsxNTEsNyBAQAogICAgICdvZl9tZXRlcl9mZWF0dXJlc190JzogJ29mcC5tZXRlcl9mZWF0dXJlcycsCiAgICAgJ29mX2Jzbl92cG9ydF90JzogJ29mcC5ic25fdnBvcnQnLAogICAgICdvZl90YWJsZV9kZXNjX3QnOiAnb2ZwLnRhYmxlX2Rlc2MnLAorICAgICdvZl9zdGF0X3QnOiAnb2ZwLnN0YXQnLAogfQogCiBmb3IgKGNscywgcHljbGFzcykgaW4gZW1iZWRkZWRfc3RydWN0cy5pdGVtcygpOgpkaWZmIC0tZ2l0IGEvcHlfZ2VuL3RlbXBsYXRlcy9fY29tbW9uX2V4dHJhLnB5IGIvcHlfZ2VuL3RlbXBsYXRlcy9fY29tbW9uX2V4dHJhLnB5CmluZGV4IGY4MDE5NjUuLjU2ZDg4ZjIgMTAwNjQ0Ci0tLSBhL3B5X2dlbi90ZW1wbGF0ZXMvX2NvbW1vbl9leHRyYS5weQorKysgYi9weV9nZW4vdGVtcGxhdGVzL19jb21tb25fZXh0cmEucHkKQEAgLTM4LDQgKzM4LDggQEAKIDo6IGVsaWYgdmVyc2lvbiA9PSBPRlZlcnNpb25zLlZFUlNJT05fMV80OgogOjogIyBIQUNLCiBtYXRjaCA9IG1hdGNoX3YzCis6OiBlbGlmIHZlcnNpb24gPT0gT0ZWZXJzaW9ucy5WRVJTSU9OXzFfNToKKzo6ICMgSEFDSworbWF0Y2ggPSBtYXRjaF92Mworc3RhdCA9IHN0YXRfdjYKIDo6ICNlbmRpZgpkaWZmIC0tZ2l0IGEvcHlfZ2VuL3RlbXBsYXRlcy9fcHJldHR5X3ByaW50LnB5IGIvcHlfZ2VuL3RlbXBsYXRlcy9fcHJldHR5X3ByaW50LnB5CmluZGV4IGM4Yzc3NzAuLmNjZTM1NjEgMTAwNjQ0Ci0tLSBhL3B5X2dlbi90ZW1wbGF0ZXMvX3ByZXR0eV9wcmludC5weQorKysgYi9weV9nZW4vdGVtcGxhdGVzL19wcmV0dHlfcHJpbnQucHkKQEAgLTU0LDYgKzU0LDggQEAKICAgICAgICAgICAgICAgICBxLnRleHQodXRpbC5wcmV0dHlfd2lsZGNhcmRzKHNlbGYuJHttLm5hbWV9KSkKIDo6IGVsaWYgbS5vZnR5cGUgPT0gJ29mX3BvcnRfbm9fdCc6CiAgICAgICAgICAgICAgICAgcS50ZXh0KHV0aWwucHJldHR5X3BvcnQoc2VsZi4ke20ubmFtZX0pKQorOjogZWxpZiBtLm9mdHlwZSA9PSAnb2ZfaXB2Nl90JzoKKyAgICAgICAgICAgICAgICBxLnRleHQodXRpbC5wcmV0dHlfaXB2NihzZWxmLiR7bS5uYW1lfSkpCiA6OiBlbGlmIGxveGlfdXRpbHMubG9va3VwX2lyX3dpcmV0eXBlKG0ub2Z0eXBlLCB2ZXJzaW9uPXZlcnNpb24pLnN0YXJ0c3dpdGgoInVpbnQiKToKICAgICAgICAgICAgICAgICBxLnRleHQoIiUjeCIgJSBzZWxmLiR7bS5uYW1lfSkKIDo6IGVsc2U6CmRpZmYgLS1naXQgYS9weV9nZW4vdGVtcGxhdGVzL2Nvbm5lY3Rpb24ucHkgYi9weV9nZW4vdGVtcGxhdGVzL2Nvbm5lY3Rpb24ucHkKaW5kZXggZjA2NDhiZS4uMWZiZjRhNiAxMDA2NDQKLS0tIGEvcHlfZ2VuL3RlbXBsYXRlcy9jb25uZWN0aW9uLnB5CisrKyBiL3B5X2dlbi90ZW1wbGF0ZXMvY29ubmVjdGlvbi5weQpAQCAtMjYyLDMgKzI2MiwyMCBAQAogICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRpZCBub3QgcmVjZWl2ZSBIRUxMTyIpCiAKICAgICByZXR1cm4gY3huCisKK2RlZiBjb25uZWN0X3VuaXgocGF0aCwgZGFlbW9uPVRydWUsIG9mcD1sb3hpLm9mMTQpOgorICAgICIiIgorICAgIENvbm5lY3Qgb3ZlciBhIHVuaXggZG9tYWluIHNvY2tldAorICAgICIiIgorICAgIHNvYyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICBzb2MuY29ubmVjdChwYXRoKQorICAgIGN4biA9IGxveGkuY29ubmVjdGlvbi5Db25uZWN0aW9uKHNvYykKKyAgICBjeG4uZGFlbW9uID0gZGFlbW9uCisgICAgY3huLmxvZ2dlci5kZWJ1ZygiQ29ubmVjdGVkIHRvICVzIiwgcGF0aCkKKyAgICBjeG4uc3RhcnQoKQorCisgICAgY3huLnNlbmQob2ZwLm1lc3NhZ2UuaGVsbG8oKSkKKyAgICBpZiBub3QgY3huLnJlY3YobGFtYmRhIG1zZzogbXNnLnR5cGUgPT0gb2ZwLk9GUFRfSEVMTE8pOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRpZCBub3QgcmVjZWl2ZSBIRUxMTyIpCisKKyAgICByZXR1cm4gY3huCmRpZmYgLS1naXQgYS9weV9nZW4vdGVtcGxhdGVzL3V0aWwucHkgYi9weV9nZW4vdGVtcGxhdGVzL3V0aWwucHkKaW5kZXggNzU1ODU3Ni4uMjBkNGVmMiAxMDA2NDQKLS0tIGEvcHlfZ2VuL3RlbXBsYXRlcy91dGlsLnB5CisrKyBiL3B5X2dlbi90ZW1wbGF0ZXMvdXRpbC5weQpAQCAtNTIsNiArNTIsOSBAQAogZGVmIHByZXR0eV9pcHY0KHYpOgogICAgIHJldHVybiAiJWQuJWQuJWQuJWQiICUgKCh2ID4+IDI0KSAmIDB4RkYsICh2ID4+IDE2KSAmIDB4RkYsICh2ID4+IDgpICYgMHhGRiwgdiAmIDB4RkYpCiAKK2RlZiBwcmV0dHlfaXB2Nih2KToKKyAgICByZXR1cm4gIjoiLmpvaW4oWyIlMC4yeCUwLjJ4IiAlIChvcmQodltpXSksIG9yZCh2W2krMV0pKSBmb3IgaSBpbiByYW5nZSgwLCBsZW4odiksIDIpXSkKKwogZGVmIHByZXR0eV9mbGFncyh2LCBmbGFnX25hbWVzKToKICAgICBzZXRfZmxhZ3MgPSBbXQogICAgIGZvciBmbGFnX25hbWUgaW4gZmxhZ19uYW1lczoKZGlmZiAtLWdpdCBhL3B5X2dlbi90ZXN0cy9vZjE1LnB5IGIvcHlfZ2VuL3Rlc3RzL29mMTUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5Y2MyOAotLS0gL2Rldi9udWxsCisrKyBiL3B5X2dlbi90ZXN0cy9vZjE1LnB5CkBAIC0wLDAgKzEsMTMwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKyMKKyMgTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxLjAgKEVQTCksIHdpdGgKKyMgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKyMKKyMgTE9YSSBFeGNlcHRpb24KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heSBkaXN0cmlidXRlIGxpYnJhcmllcworIyBnZW5lcmF0ZWQgYnkgTG94aUdlbiAoTG94aUdlbiBMaWJyYXJpZXMpIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQKKyMgdGhhdCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisjIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKSBpbmNsdWRlZCBpbgorIyB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIGZvcm0gYW5kIChpaSkgaW5jbHVkZWQgaW4gYW55CisjIGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisjCisjIE5vdGljZTogIkNvcHlyaWdodCAyMDE0LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKKyMKKyMgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IgTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluCisjIGEgY29weSBvZiB0aGUgRVBMIGF0OgorIworIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIEVQTC4KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0dXRpbCBpbXBvcnQgdGVzdF9zZXJpYWxpemF0aW9uCitmcm9tIHRlc3R1dGlsIGltcG9ydCBhZGRfZGF0YWZpbGVzX3Rlc3RzCisKK3RyeToKKyAgICBpbXBvcnQgbG94aQorICAgIGltcG9ydCBsb3hpLm9mMTUgYXMgb2ZwCisgICAgZnJvbSBsb3hpLmdlbmVyaWNfdXRpbCBpbXBvcnQgT0ZSZWFkZXIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBleGl0KCJsb3hpIHBhY2thZ2Ugbm90IGZvdW5kLiBUcnkgc2V0dGluZyBQWVRIT05QQVRILiIpCisKK2NsYXNzIFRlc3RJbXBvcnRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3BsZXZlbChzZWxmKToKKyAgICAgICAgaW1wb3J0IGxveGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG94aSwgIlByb3RvY29sRXJyb3IiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG94aS52ZXJzaW9uX25hbWVzWzZdLCAiMS41IikKKyAgICAgICAgb2ZwID0gbG94aS5wcm90b2NvbCg2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvZnAuT0ZQX1ZFUlNJT04sIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9mcCwgImFjdGlvbiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvZnAsICJjb21tb24iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob2ZwLCAiY29uc3QiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob2ZwLCAibWVzc2FnZSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvZnAsICJveG0iKSkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGltcG9ydCBsb3hpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxveGkub2YxNSwgIlByb3RvY29sRXJyb3IiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG94aS5vZjE1LCAiT0ZQX1ZFUlNJT04iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG94aS5vZjE1Lk9GUF9WRVJTSU9OLCA2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb3hpLm9mMTUsICJhY3Rpb24iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG94aS5vZjE1LCAiY29tbW9uIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxveGkub2YxNSwgImNvbnN0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxveGkub2YxNSwgIm1lc3NhZ2UiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG94aS5vZjE1LCAib3htIikpCisKKyMgVGhlIG1ham9yaXR5IG9mIHRoZSBzZXJpYWxpemF0aW9uIHRlc3RzIGFyZSBjcmVhdGVkIGhlcmUgdXNpbmcgdGhlIGZpbGVzIGluCisjIHRoZSB0ZXN0X2RhdGEgZGlyZWN0b3J5LgorY2xhc3MgVGVzdERhdGFGaWxlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGFzcworYWRkX2RhdGFmaWxlc190ZXN0cyhUZXN0RGF0YUZpbGVzLCAnb2YxNS8nLCBvZnApCisKK2NsYXNzIFRlc3RBbGxvZjE1KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBSb3VuZC10cmlwcyBldmVyeSBjbGFzcyB0aHJvdWdoIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uLgorICAgIE5vdCBhIHJlcGxhY2VtZW50IGZvciBoYW5kY29kZWQgdGVzdHMgYmVjYXVzZSBpdCBvbmx5IHVzZXMgdGhlCisgICAgZGVmYXVsdCBtZW1iZXIgdmFsdWVzLgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBtb2RzID0gW29mcC5hY3Rpb24sb2ZwLm1lc3NhZ2Usb2ZwLmNvbW1vbixvZnAub3htXQorICAgICAgICBzZWxmLmtsYXNzZXMgPSBba2xhc3MgZm9yIG1vZCBpbiBtb2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Iga2xhc3MgaW4gbW9kLl9fZGljdF9fLnZhbHVlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtsYXNzLCB0eXBlKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Moa2xhc3MsIGxveGkuT0ZPYmplY3QpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGhhc2F0dHIoa2xhc3MsICdzdWJ0eXBlcycpXQorICAgICAgICBzZWxmLmtsYXNzZXMuc29ydChrZXk9bGFtYmRhIHg6IHN0cih4KSkKKworICAgIGRlZiB0ZXN0X3NlcmlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIGV4cGVjdGVkX2ZhaWx1cmVzID0gWworICAgICAgICAgICAgb2ZwLmFjdGlvbi5zZXRfZmllbGQsICMgZmllbGQgZGVmYXVsdHMgdG8gTm9uZQorICAgICAgICBdCisgICAgICAgIGZvciBrbGFzcyBpbiBzZWxmLmtsYXNzZXM6CisgICAgICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgICAgICBvYmogPSBrbGFzcygpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvYmosICJ4aWQiKTogb2JqLnhpZCA9IDQyCisgICAgICAgICAgICAgICAgYnVmID0gb2JqLnBhY2soKQorICAgICAgICAgICAgICAgIG9iajIgPSBrbGFzcy51bnBhY2soT0ZSZWFkZXIoYnVmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvYmosIG9iajIpCisgICAgICAgICAgICBpZiBrbGFzcyBpbiBleHBlY3RlZF9mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIGZuKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmbigpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9mYWlsdXJlcyA9IFsKKyAgICAgICAgXQorICAgICAgICBmb3Iga2xhc3MgaW4gc2VsZi5rbGFzc2VzOgorICAgICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3Moa2xhc3MsIG9mcC5tZXNzYWdlLm1lc3NhZ2UpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgICAgICBvYmogPSBrbGFzcyh4aWQ9NDIpCisgICAgICAgICAgICAgICAgYnVmID0gb2JqLnBhY2soKQorICAgICAgICAgICAgICAgIG9iajIgPSBvZnAubWVzc2FnZS5wYXJzZV9tZXNzYWdlKGJ1ZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvYmosIG9iajIpCisgICAgICAgICAgICBpZiBrbGFzcyBpbiBleHBlY3RlZF9mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIGZuKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmbigpCisKKyAgICBkZWYgdGVzdF9zaG93KHNlbGYpOgorICAgICAgICBleHBlY3RlZF9mYWlsdXJlcyA9IFtdCisgICAgICAgIGZvciBrbGFzcyBpbiBzZWxmLmtsYXNzZXM6CisgICAgICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgICAgICBvYmogPSBrbGFzcygpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvYmosICJ4aWQiKTogb2JqLnhpZCA9IDQyCisgICAgICAgICAgICAgICAgb2JqLnNob3coKQorICAgICAgICAgICAgaWYga2xhc3MgaW4gZXhwZWN0ZWRfZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBmbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTAvcG9ydF9tb2QuZGF0YSBiL3Rlc3RfZGF0YS9vZjEwL3BvcnRfbW9kLmRhdGEKaW5kZXggNzU0ZTEzOS4uM2QxMTBjZiAxMDA2NDQKLS0tIGEvdGVzdF9kYXRhL29mMTAvcG9ydF9tb2QuZGF0YQorKysgYi90ZXN0X2RhdGEvb2YxMC9wb3J0X21vZC5kYXRhCkBAIC00LDggKzQsOCBAQAogMDAgMDAgMDAgMDIgIyB4aWQKIGZmIGZkICMgcG9ydF9ubwogMDEgMDIgMDMgMDQgMDUgMDYgIyBod19hZGRyCi05MCBhYiBjZCBlZiAjIGNvbmZpZwotZmYgMTEgZmYgMTEgIyBtYXNrCis4MCAwMCAwMCA2ZiAjIGNvbmZpZworODAgMDAgMDAgMTEgIyBtYXNrCiBjYSBmZSA2NyA4OSAjIGFkdmVydGlzZQogMDAgMDAgMDAgMDAgIyBwYWQKIC0tIHB5dGhvbgpAQCAtMTMsMTcgKzEzLDE3IEBACiAgICAgeGlkPTIsCiAgICAgcG9ydF9ubz1vZnAuT0ZQUF9DT05UUk9MTEVSLAogICAgIGh3X2FkZHI9WzEsMiwzLDQsNSw2XSwKLSAgICBjb25maWc9MHg5MEFCQ0RFRiwKLSAgICBtYXNrPTB4RkYxMUZGMTEsCisgICAgY29uZmlnPTB4ODAwMDAwNmYsCisgICAgbWFzaz0weDgwMDAwMDExLAogICAgIGFkdmVydGlzZT0weENBRkU2Nzg5KQogLS0gYwogb2JqID0gb2ZfcG9ydF9tb2RfbmV3KE9GX1ZFUlNJT05fMV8wKTsKIG9mX3BvcnRfbW9kX2FkdmVydGlzZV9zZXQob2JqLCAweENBRkU2Nzg5KTsKLW9mX3BvcnRfbW9kX2NvbmZpZ19zZXQob2JqLCAweDkwQUJDREVGKTsKK29mX3BvcnRfbW9kX2NvbmZpZ19zZXQob2JqLCAweDgwMDAwMDZmKTsKIHsKICAgICBvZl9tYWNfYWRkcl90IGh3X2FkZHIgPSB7IHsgMSwgMiwgMywgNCwgNSwgNiB9IH07CiAgICAgb2ZfcG9ydF9tb2RfaHdfYWRkcl9zZXQob2JqLCBod19hZGRyKTsKIH0KLW9mX3BvcnRfbW9kX21hc2tfc2V0KG9iaiwgMHhGRjExRkYxMSk7CitvZl9wb3J0X21vZF9tYXNrX3NldChvYmosIDB4ODAwMDAwMTEpOwogb2ZfcG9ydF9tb2RfcG9ydF9ub19zZXQob2JqLCA2NTUzMyk7CiBvZl9wb3J0X21vZF94aWRfc2V0KG9iaiwgMik7CmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hY3Rpb25fb3V0cHV0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9hY3Rpb25fb3V0cHV0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3YTQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2FjdGlvbl9vdXRwdXQuZGF0YQpAQCAtMCwwICsxLDggQEAKKy0tIGJpbmFyeQorMDAgMDAgIyB0eXBlCiswMCAxMCAjIGxlbmd0aAorMDAgMDAgMDAgMzIgIyBwb3J0CitmZiBmZiAjIG1heF9sZW4KKzAwIDAwIDAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyLnNldFBvcnQoT0ZQb3J0Lm9mKDUwKSkuc2V0TWF4TGVuKDY1NTM1KQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2FjdGlvbl9zZXRfZmllbGRfX2V0aF9kc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2FjdGlvbl9zZXRfZmllbGRfX2V0aF9kc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYxNTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYWN0aW9uX3NldF9maWVsZF9fZXRoX2RzdC5kYXRhCkBAIC0wLDAgKzEsOSBAQAorLS0gYmluYXJ5CiswMCAxOSAjIHR5cGUKKzAwIDEwICMgbGVuZ3RoCis4MCAwMCAwNiAwNiAjIE9YTSBoZWFkZXIKKzAwIDAxIDAyIDAzIDA0IDA1ICMgT1hNIHZhbHVlCiswMCAwMCAjIHBhZAorLS0gamF2YQorT0ZPeG1zIG94bXMgPSBPRkZhY3Rvcmllcy5nZXRGYWN0b3J5KE9GVmVyc2lvbi5PRl8xNSkub3htcygpOworYnVpbGRlci5zZXRGaWVsZChveG1zLmV0aERzdChNYWNBZGRyZXNzLm9mKCIwMDowMTowMjowMzowNDowNSIpKSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hY3Rpb25fc2V0X2ZpZWxkX19pcHY2X3NyYy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYWN0aW9uX3NldF9maWVsZF9faXB2Nl9zcmMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjNiYzQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYWN0aW9uX3NldF9maWVsZF9faXB2Nl9zcmMuZGF0YQpAQCAtMCwwICsxLDggQEAKKy0tIGJpbmFyeQorMDAgMTkgIyB0eXBlCiswMCAxOCAjIGxlbmd0aAorODAgMDAgMzQgMTAgIyBPWE0gaGVhZGVyCiswMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZiAjIE9YTSB2YWx1ZQorLS0gamF2YQorT0ZPeG1zIG94bXMgPSBPRkZhY3Rvcmllcy5nZXRGYWN0b3J5KE9GVmVyc2lvbi5PRl8xNSkub3htcygpOworYnVpbGRlci5zZXRGaWVsZChveG1zLmlwdjZTcmMoSVB2NkFkZHJlc3Mub2YoIjAwMDE6MDIwMzowNDA1OjA2MDc6MDgwOTowYTBiOjBjMGQ6MGUwZiIpKSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hY3Rpb25fc2V0X2ZpZWxkX190Y3Bfc3JjLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9hY3Rpb25fc2V0X2ZpZWxkX190Y3Bfc3JjLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2YWRhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2FjdGlvbl9zZXRfZmllbGRfX3RjcF9zcmMuZGF0YQpAQCAtMCwwICsxLDkgQEAKKy0tIGJpbmFyeQorMDAgMTkgIyB0eXBlCiswMCAxMCAjIGxlbmd0aAorODAgMDAgMWEgMDIgIyBPWE0gaGVhZGVyCiswMCAzMiAjIE9YTSB2YWx1ZQorMDAgMDAgMDAgMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK09GT3htcyBveG1zID0gT0ZGYWN0b3JpZXMuZ2V0RmFjdG9yeShPRlZlcnNpb24uT0ZfMTUpLm94bXMoKTsKK2J1aWxkZXIuc2V0RmllbGQob3htcy50Y3BTcmMoVHJhbnNwb3J0UG9ydC5vZig1MCkpKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2FnZ3JlZ2F0ZV9zdGF0c19yZXBseS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYWdncmVnYXRlX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1MjUwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2FnZ3JlZ2F0ZV9zdGF0c19yZXBseS5kYXRhCkBAIC0wLDAgKzEsMjQgQEAKKy0tYmluYXJ5CiswNiAxMyAjIHZlcnNpb24sIHR5cGUKKzAwIDMwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDIgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9BR0dSRUdBVEVfU1RBVFMpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAjIHJlc2VydmVkCiswMCAxYyAjIHN0YXRzLmxlbmd0aAorODAgMDIgMDAgMDggIyBzdGF0cy5veHNfbGlzdFswXS50eXBlX2xlbiAtIERVUkFUSU9OCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNCAjIHN0YXRzLm94c19saXN0WzBdLnZhbHVlCis4MCAwMiAwMiAwOCAjIHN0YXRzLm94c19saXN0WzFdLnR5cGVfbGVuIC0gSURMRV9USU1FICgwMiAtPiAwMDAwIDAwMTAgLT4gb3hzX2ZpZWxkIHdpZHRoIDcsIG94c19yZXNlcnZlZCB3aWR0aCAxKQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDYgIyBzdGF0cy5veHNfbGlzdFsxXS52YWx1ZQorMDAgMDAgMDAgMDAgIyBzdGF0cy5wYWQKKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXBseUZsYWdzPm9mKE9GU3RhdHNSZXBseUZsYWdzLlJFUExZX01PUkUpKQorICAgICAgICAuc2V0U3RhdHMoCisgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkU3RhdFY2KCkKKyAgICAgICAgICAgIC5zZXRPeHNGaWVsZHMoT0ZPeHNMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub2YoZmFjdG9yeS5veHNzKCkuYnVpbGREdXJhdGlvbigpLnNldFZhbHVlKFU2NC5vZig0KSkuYnVpbGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5Lm94c3MoKS5idWlsZElkbGVUaW1lKCkuc2V0VmFsdWUoVTY0Lm9mKDYpKS5idWlsZCgpKSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hZ2dyZWdhdGVfc3RhdHNfcmVxdWVzdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYWdncmVnYXRlX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjYyOTYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYWdncmVnYXRlX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDMzIEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgNDAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMiAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0FHR1JFR0FURV9TVEFUUykKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCitmZiAjIHRhYmxlSWQKKzAwIDAwIDAwICAjIHBhZAorMDAgMDAgMDAgMDQgIyBvdXRfcG9ydAorMDAgMDAgMDAgMDEgIyBvdXRfZ3JvdXAKKzAwIDAwIDAwIDAwICMgcGFkCitmZSBkYyBiYSA5OCA3NiA1NCAzMiAxMCAjIGNvb2tpZQorZmYgMDAgZmYgMDAgZmYgMDAgZmYgMDAgIyBjb29raWVfbWFza2sKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgMTAgIyBtYXRjaC5sZW5ndGgKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJTl9QT1JUCiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0VGFibGVJZChUYWJsZUlkLkFMTCkKKyAgICAgICAgLnNldE91dFBvcnQoT0ZQb3J0Lm9mKDQpKQorICAgICAgICAuc2V0T3V0R3JvdXAoT0ZHcm91cC5vZigxKSkKKyAgICAgICAgLnNldENvb2tpZShVNjQucGFyc2VIZXgoIkZFRENCQTk4NzY1NDMyMTAiKSkKKyAgICAgICAgLnNldENvb2tpZU1hc2soVTY0LnBhcnNlSGV4KCJGRjAwRkYwMEZGMDBGRjAwIikpCisgICAgICAgIC5zZXRNYXRjaCgKKyAgICAgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkTWF0Y2goKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklOX1BPUlQsIE9GUG9ydC5vZig0KSwgT0ZQb3J0Lm9mKDUpKQorICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpCisgICAgICAgIC5idWlsZCgpCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hc3luY19nZXRfcmVwbHkuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2FzeW5jX2dldF9yZXBseS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMzVkYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9hc3luY19nZXRfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDFiICMgdmVyc2lvbiwgdHlwZQorMDAgMTAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMSAjIHByb3BlcnRpZXNbMF0udHlwZSAoT0ZQQUNQVF9QQUNLRVRfSU5fTUFTVEVSKQorMDAgMDggIyBwcm9wZXJ0aWVzWzBdLmxlbmd0aAorMDAgMDAgMDAgMDAgIyBtYXNrCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZBc3luY0NvbmZpZ1Byb3A+b2YoZmFjdG9yeS5idWlsZEFzeW5jQ29uZmlnUHJvcFBhY2tldEluTWFzdGVyKCkuc2V0TWFzaygwKS5idWlsZCgpKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hc3luY19nZXRfcmVxdWVzdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYXN5bmNfZ2V0X3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWU1MTNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYXN5bmNfZ2V0X3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDYgQEAKKy0tIGJpbmFyeQorMDYgMWEgIyB2ZXJzaW9uLCB0eXBlCiswMCAwOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKy0tIGphdmEKK2J1aWxkZXIuc2V0WGlkKDB4MTIzNDU2NzgpLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9hc3luY19zZXQuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2FzeW5jX3NldC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTVmY2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9hc3luY19zZXQuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDFjICMgdmVyc2lvbiwgdHlwZQorMDAgMTAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMSAjIHByb3BlcnRpZXNbMF0udHlwZSAoT0ZQQUNQVF9QQUNLRVRfSU5fTUFTVEVSKQorMDAgMDggIyBwcm9wZXJ0aWVzWzBdLmxlbmd0aAorMDAgMDAgMDAgMDAgIyBtYXNrCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZBc3luY0NvbmZpZ1Byb3A+b2YoZmFjdG9yeS5idWlsZEFzeW5jQ29uZmlnUHJvcFBhY2tldEluTWFzdGVyKCkuc2V0TWFzaygwKS5idWlsZCgpKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9iYWRfYWN0aW9uX2Vycm9yX21zZy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYmFkX2FjdGlvbl9lcnJvcl9tc2cuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWIxMDUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYmFkX2FjdGlvbl9lcnJvcl9tc2cuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDAxICMgdmVyc2lvbiAvIHR5cGUKKzAwIDBmICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDIgIyBlcnJfdHlwZQorMDAgMDAgIyBjb2RlCis2MSA2MiA2MyAjIGRhdGEKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0Q29kZShPRkJhZEFjdGlvbkNvZGUuQkFEX1RZUEUpCisgICAgICAgIC5zZXREYXRhKE9GRXJyb3JDYXVzZURhdGEub2YobmV3IGJ5dGVbXSB7IDB4NjEsIDB4NjIsIDB4NjMgfSwgT0ZWZXJzaW9uLk9GXzE1KSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvYmFkX2luc3RydWN0aW9uX2Vycm9yX21zZy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYmFkX2luc3RydWN0aW9uX2Vycm9yX21zZy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmE5MmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9iYWRfaW5zdHJ1Y3Rpb25fZXJyb3JfbXNnLmRhdGEKQEAgLTAsMCArMSwxMiBAQAorLS0gYmluYXJ5CiswNiAwMSAjIHZlcnNpb24gLyB0eXBlCiswMCAwZiAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAzICMgZXJyX3R5cGUKKzAwIDA4ICMgY29kZQorNjEgNjIgNjMgIyBkYXRhCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldENvZGUoT0ZCYWRJbnN0cnVjdGlvbkNvZGUuRVBFUk0pCisgICAgICAgIC5zZXREYXRhKE9GRXJyb3JDYXVzZURhdGEub2YobmV3IGJ5dGVbXSB7IDB4NjEsIDB4NjIsIDB4NjMgfSwgT0ZWZXJzaW9uLk9GXzE1KSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvYmFkX21hdGNoX2Vycm9yX21zZy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYmFkX21hdGNoX2Vycm9yX21zZy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZGZkNTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9iYWRfbWF0Y2hfZXJyb3JfbXNnLmRhdGEKQEAgLTAsMCArMSwxMiBAQAorLS0gYmluYXJ5CiswNiAwMSAjIHZlcnNpb24gLyB0eXBlCiswMCAwZiAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDA0ICMgZXJyX3R5cGUKKzAwIDA4ICMgY29kZQorNjEgNjIgNjMgIyBkYXRhCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldENvZGUoT0ZCYWRNYXRjaENvZGUuQkFEX01BU0spCisgICAgICAgIC5zZXREYXRhKE9GRXJyb3JDYXVzZURhdGEub2YobmV3IGJ5dGVbXSB7IDB4NjEsIDB4NjIsIDB4NjMgfSwgT0ZWZXJzaW9uLk9GXzE1KSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvYmFkX3JlcXVlc3RfZXJyb3JfbXNnLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9iYWRfcmVxdWVzdF9lcnJvcl9tc2cuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJmZTkxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYmFkX3JlcXVlc3RfZXJyb3JfbXNnLmRhdGEKQEAgLTAsMCArMSwxMiBAQAorLS0gYmluYXJ5CiswNiAwMSAjIHZlcnNpb24gLyB0eXBlCiswMCAwZiAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAxICMgZXJyX3R5cGUKKzAwIDA4ICMgY29kZQorNjEgNjIgNjMgIyBkYXRhCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldENvZGUoT0ZCYWRSZXF1ZXN0Q29kZS5CVUZGRVJfVU5LTk9XTikKKyAgICAgICAgLnNldERhdGEoT0ZFcnJvckNhdXNlRGF0YS5vZihuZXcgYnl0ZVtdIHsgMHg2MSwgMHg2MiwgMHg2MyB9LCBPRlZlcnNpb24uT0ZfMTUpKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9iYXJyaWVyX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9iYXJyaWVyX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5ZTAyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2JhcnJpZXJfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDYgQEAKKy0tIGJpbmFyeQorMDYgMTUgIyB2ZXJzaW9uLCB0eXBlCiswMCAwOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKy0tIGphdmEKK2J1aWxkZXIuc2V0WGlkKDB4MTIzNDU2NzgpLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9iYXJyaWVyX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2JhcnJpZXJfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Mzg3NTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9iYXJyaWVyX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDYgQEAKKy0tIGJpbmFyeQorMDYgMTQgIyB2ZXJzaW9uLCB0eXBlCiswMCAwOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKy0tIGphdmEKK2J1aWxkZXIuc2V0WGlkKDB4MTIzNDU2NzgpLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9idW5kbGVfYWRkX21zZy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYnVuZGxlX2FkZF9tc2cuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDEzY2MyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYnVuZGxlX2FkZF9tc2cuZGF0YQpAQCAtMCwwICsxLDI1IEBACistLSBiaW5hcnkKKzA2IDIyICMgdmVyc2lvbiwgdHlwZQorMDAgMzIgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMCAwMCAwMSAjIGJ1bmRsZV9pZAorMDAgIyBwYWQKKzAwIDAxICMgZmxhZ3MgKE9GUEJGX0FUT01JQykKKzA2IDAyICMgbWVzc2FnZS52ZXJzaW9uLCB0eXBlCiswMCAwYiAjIG1lc3NhZ2UubGVuZ3RoCisxMSAxMSAxMSAxMSAjIG1lc3NhZ2UueGlkCis2MSA2MiA2MyAjIGRhdGEKKzAwIDAxICMgcHJvcGVydGllc1swXS50eXBlIChPRlBCUFRfVElNRSkKKzAwIDE4ICMgcHJvcGVydGllc1swXS5sZW5ndGgKKzAwIDAwIDAwIDAwICMgcHJvcGVydGllc1swXS5wYWQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICAjIHByb3BlcnRpZXNbMF0uc2NoZWR1bGVkX3RpbWUuc2Vjb25kcworM2IgOWEgY2EgMDAgIyBwcm9wZXJ0aWVzWzBdLnNjaGVkdWxlZF90aW1lLm5hbm9zZWNvbmRzCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0uc2NoZWR1bGVkX3RpbWUucGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEJ1bmRsZUlkKEJ1bmRsZUlkLm9mKDEpKQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRkJ1bmRsZUZsYWdzPm9mKE9GQnVuZGxlRmxhZ3MuQVRPTUlDKSkKKyAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZCdW5kbGVQcm9wPm9mKGZhY3RvcnkuYnVpbGRCdW5kbGVQcm9wVGltZSgpLnNldFNjaGVkdWxlZFRpbWUoSW1tdXRhYmxlTGlzdC48T0ZUaW1lPm9mKGZhY3RvcnkuYnVpbGRUaW1lKCkuc2V0U2Vjb25kcyhVNjQub2YoMSkpLnNldE5hbm9zZWNvbmRzKDEwMDAwMDAwMDBMKS5idWlsZCgpKSkuYnVpbGQoKSkpCisgICAgICAgIC5zZXRNZXNzYWdlKGZhY3RvcnkuYnVpbGRFY2hvUmVxdWVzdCgpLnNldFhpZCgweDExMTExMTExKS5zZXREYXRhKG5ldyBieXRlW10gezk3LDk4LDk5fSkuYnVpbGQoKSkKKyAgICAgICAgLmJ1aWxkKCkKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2J1bmRsZV9jdHJsX21zZy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYnVuZGxlX2N0cmxfbXNnLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2MjRhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2J1bmRsZV9jdHJsX21zZy5kYXRhCkBAIC0wLDAgKzEsMjEgQEAKKy0tIGJpbmFyeQorMDYgMjEgIyB2ZXJzaW9uLCB0eXBlCiswMCAyOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAwIDAwIDAxICMgYnVuZGxlX2lkCiswMCAwMCAjIHR5cGUgKE9GUEJDVF9PUEVOX1JFUVVFU1QpCiswMCAwMSAjIGZsYWdzIChPRlBCRl9BVE9NSUMpCiswMCAwMSAjIHByb3BlcnRpZXNbMF0udHlwZSAoT0ZQQlBUX1RJTUUpCiswMCAxOCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0ucGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAjIHByb3BlcnRpZXNbMF0ub2ZwX3RpbWUuc2Vjb25kcworM2IgOWEgY2EgMDAgIyBwcm9wZXJ0aWVzWzBdLm9mcF90aW1lLm5hbm9zZWNvbmRzCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0ub2ZwX3RpbWUucGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEJ1bmRsZUlkKEJ1bmRsZUlkLm9mKDEpKQorICAgICAgICAuc2V0QnVuZGxlQ3RybFR5cGUoT0ZCdW5kbGVDdHJsVHlwZS5PUEVOX1JFUVVFU1QpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GQnVuZGxlRmxhZ3M+b2YoT0ZCdW5kbGVGbGFncy5BVE9NSUMpKQorICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRkJ1bmRsZVByb3A+b2YoZmFjdG9yeS5idWlsZEJ1bmRsZVByb3BUaW1lKCkuc2V0U2NoZWR1bGVkVGltZShJbW11dGFibGVMaXN0LjxPRlRpbWU+b2YoZmFjdG9yeS5idWlsZFRpbWUoKS5zZXRTZWNvbmRzKFU2NC5vZigxKSkuc2V0TmFub3NlY29uZHMoMTAwMDAwMDAwMEwpLmJ1aWxkKCkpKS5idWlsZCgpKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9idW5kbGVfZmVhdHVyZXNfc3RhdHNfcmVxdWVzdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvYnVuZGxlX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU1ZjczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvYnVuZGxlX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDM3IEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgNjAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAxMyAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0JVTkRMRV9GRUFUVVJFUykKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIGZlYXR1cmVfcmVxdWVzdF9mbGFncyAoT0ZQQkZfVElNRVNUQU1QKQorMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDAxICMgcHJvcGVydGllc1swXS50eXBlIChPRlBUTVBCRl9USU1FX0NBUEFCSUxJVFkpCiswMCA0OCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0ucGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMyAjIHByb3BlcnRpZXNbMF0uc2NoZWRfYWNjdXJhY3kuc2Vjb25kcworYjIgZDAgNWUgMDAgIyBwcm9wZXJ0aWVzWzBdLnNjaGVkX2FjY3VyYWN5Lm5hbm9zZWNvbmRzCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0uc2NoZWRfYWNjdXJhY3kucGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMyAjIHByb3BlcnRpZXNbMF0uc2NoZWRfbWF4X2Z1dHVyZS5zZWNvbmRzCitiMiBkMCA1ZSAwMCAjIHByb3BlcnRpZXNbMF0uc2NoZWRfbWF4X2Z1dHVyZS5uYW5vc2Vjb25kcworMDAgMDAgMDAgMDAgIyBwcm9wZXJ0aWVzWzBdLnNjaGVkX21heF9mdXR1cmUucGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMyAjIHByb3BlcnRpZXNbMF0uc2NoZWRfbWF4X3Bhc3Quc2Vjb25kcworYjIgZDAgNWUgMDAgIyBwcm9wZXJ0aWVzWzBdLnNjaGVkX21heF9wYXN0Lm5hbm9zZWNvbmRzCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0uc2NoZWRfbWF4X3Bhc3QucGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMyAjIHByb3BlcnRpZXNbMF0udGltZXN0YW1wLnNlY29uZHMKK2IyIGQwIDVlIDAwICMgcHJvcGVydGllc1swXS50aW1lc3RhbXA7Lm5hbm9zZWNvbmRzCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0udGltZXN0YW1wOy5wYWQKKy0tICBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLnNldEZlYXR1cmVSZXF1ZXN0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRkJ1bmRsZUZlYXR1cmVGbGFncz5vZihPRkJ1bmRsZUZlYXR1cmVGbGFncy5USU1FU1RBTVApKQorICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRkJ1bmRsZUZlYXR1cmVzUHJvcD5vZihmYWN0b3J5LmJ1aWxkQnVuZGxlRmVhdHVyZXNQcm9wVGltZSgpLnNldFNjaGVkQWNjdXJhY3koZmFjdG9yeS5idWlsZFRpbWUoKS5zZXRTZWNvbmRzKFU2NC5vZigzKSkuc2V0TmFub3NlY29uZHMoMzAwMDAwMDAwMEwpLmJ1aWxkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2NoZWRNYXhGdXR1cmUoZmFjdG9yeS5idWlsZFRpbWUoKS5zZXRTZWNvbmRzKFU2NC5vZigzKSkuc2V0TmFub3NlY29uZHMoMzAwMDAwMDAwMEwpLmJ1aWxkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2NoZWRNYXhQYXN0KGZhY3RvcnkuYnVpbGRUaW1lKCkuc2V0U2Vjb25kcyhVNjQub2YoMykpLnNldE5hbm9zZWNvbmRzKDMwMDAwMDAwMDBMKS5idWlsZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRpbWVzdGFtcChmYWN0b3J5LmJ1aWxkVGltZSgpLnNldFNlY29uZHMoVTY0Lm9mKDMpKS5zZXROYW5vc2Vjb25kcygzMDAwMDAwMDAwTCkuYnVpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKSkKKyAgICAgICAgLmJ1aWxkKCkKKworCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9jb250cm9sbGVyX3N0YXR1c19zdGF0c19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9jb250cm9sbGVyX3N0YXR1c19zdGF0c19yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwNjA4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2NvbnRyb2xsZXJfc3RhdHVzX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgMTAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAxMiAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0NPTlRST0xMRVJfU1RBVFVTKQorMDAgMDEgIyBmbGFncyAoT0ZQTVBGX1JFUVVFU1RfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9kZXNjX3N0YXRzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9kZXNjX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmZGI5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2Rlc2Nfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDQyIEBACistLSBiaW5hcnkKKzA2IDEzICMgdmVyc2lvbiwgdHlwZQorMDQgMzAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMCAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0RFU0MpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorNjEgNjIgNjMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAjIG1mcl9kZXNjIFsyNTZdCis2MSA2MiA2MyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICMgaHdfZGVzYyBbMjU2XQorNjEgNjIgNjMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAjIHN3X2Rlc2MgWzI1Nl0KKzYxIDYyIDYzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICMgc2VyaWFsIG51bWJlciBbMzJdCis2MSA2MiA2MyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICMgZHBfZGVzYyBbMjU2XQorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXBseUZsYWdzPm9mKE9GU3RhdHNSZXBseUZsYWdzLlJFUExZX01PUkUpKQorICAgICAgICAuc2V0TWZyRGVzYygiYWJjIikKKyAgICAgICAgLnNldEh3RGVzYygiYWJjIikKKyAgICAgICAgLnNldFN3RGVzYygiYWJjIikKKyAgICAgICAgLnNldFNlcmlhbE51bSgiYWJjIikKKyAgICAgICAgLnNldERwRGVzYygiYWJjIikKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2Rlc2Nfc3RhdHNfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYmMwOTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgMTAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMCAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0RFU0MpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXF1ZXN0RmxhZ3M+b2YoT0ZTdGF0c1JlcXVlc3RGbGFncy5SRVFfTU9SRSkpCisgICAgICAgIC5idWlsZCgpCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9lY2hvX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9lY2hvX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzZTczMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2VjaG9fcmVwbHkuZGF0YQpAQCAtMCwwICsxLDcgQEAKKy0tYmluYXJ5CiswNiAwMyAjIHZlcnNpb24sIHR5cGUKKzAwIDBiICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorNjEgNjIgNjMgIyBkYXRhCistLWphdmEKK2J1aWxkZXIuc2V0WGlkKDB4MTIzNDU2NzgpLnNldERhdGEobmV3IGJ5dGVbXSB7OTcsOTgsOTl9KS5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZWNob19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9lY2hvX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODJjNDAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZWNob19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSw3IEBACistLWJpbmFyeQorMDYgMDIgIyB2ZXJzaW9uLCB0eXBlCiswMCAwYiAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzYxIDYyIDYzICMgZGF0YQorLS1qYXZhCitidWlsZGVyLnNldFhpZCgweDEyMzQ1Njc4KS5zZXREYXRhKG5ldyBieXRlW10gezk3LDk4LDk5fSkuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2ZlYXR1cmVzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mZWF0dXJlc19yZXBseS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyY2FmZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9mZWF0dXJlc19yZXBseS5kYXRhCkBAIC0wLDAgKzEsMjEgQEAKKy0tYmluYXJ5CiswNiAwNiAjIHZlcnNpb24sIHR5cGUKKzAwIDIwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMTAgMTAgMTAgMTAgMTAgMTAgMTAgMTAgIyBkYXRhcGF0aF9pZAorMDAgMDAgMDAgNDAgIyBuX2J1ZmZlcnMKK2M4ICMgbl90YWJsZXMKKzA1ICMgYXV4aWxpYXJ5X2lkCiswMCAwMCAjIHBhZAorMDAgMDAgMDEgMDEgIyBjYXBhYmlsaXRpZXMKKzAwIDAwIDAwIDAwICMgcmVzZXJ2ZWQKKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXREYXRhcGF0aElkKERhdGFwYXRoSWQub2YobmV3IGJ5dGVbXSB7MTYsMTYsMTYsMTYsMTYsMTYsMTYsMTZ9KSkKKyAgICAgICAgLnNldE5CdWZmZXJzKDY0KQorICAgICAgICAuc2V0TlRhYmxlcygoc2hvcnQpMjAwKQorICAgICAgICAuc2V0QXV4aWxpYXJ5SWQoT0ZBdXhJZC5vZig1KSkKKyAgICAgICAgLnNldENhcGFiaWxpdGllcyhTZXRzLmltbXV0YWJsZUVudW1TZXQoT0ZDYXBhYmlsaXRpZXMuRkxPV19TVEFUUywgT0ZDYXBhYmlsaXRpZXMuUE9SVF9CTE9DS0VEKSkKKyAgICAgICAgLnNldFJlc2VydmVkKDApCisgICAgICAgIC5idWlsZCgpCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9mZWF0dXJlc19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mZWF0dXJlc19yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhODFlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2ZlYXR1cmVzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDYgQEAKKy0tYmluYXJ5CiswNiAwNSAjIHZlcnNpb24sIHR5cGUKKzAwIDA4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjeGlkCistLWphdmEKK2J1aWxkZXIuc2V0WGlkKDB4MTIzNDU2NzgpLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9mbG93X2FkZC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvZmxvd19hZGQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZiOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19hZGQuZGF0YQpAQCAtMCwwICsxLDc5IEBACistLSBiaW5hcnkKKzA2IDBlICMgdmVyc2lvbiwgdHlwZQorMDAgODAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCisKK2ZlIGRjIGJhIDk4IDc2IDU0IDMyIDEwICMgY29va2llCisKK2ZmIDAwIGZmIDAwIGZmIDAwIGZmIDAwICMgY29va2llX21hc2sKKworMDMgIyB0YWJsZV9pZAorMDAgIyBfY29tbWFuZAorMDAgMDUgIyBpZGxlX3RpbWVvdXQKKzAwIDBhICMgaGFyZF90aW1lb3V0CisxNyA3MCAjIHByaW9yaXR5CisKKzAwIDAwIDAwIDMyICMgYnVmZmVyX2lkCiswMCAwMCAwMCAwNiAjIG91dF9wb3J0CisKKzAwIDAwIDAwIDA4ICMgb3V0X2dyb3VwCiswMCAwMCAjIGZsYWdzCiswMCAwMCAjIGltcG9ydGFuY2UKKworMDAgMDEgIyBtYXRjaC50eXBlCiswMCAzRiAjIG1hdGNoLmxlbmd0aCAjIDU5IGJ5dGVzIE9YTXMgKyA0IGJ5dGVzIG1hdGNoIGhlYWRlcgorCis4MCAwMCAwMSAwOCAjIG1hdGNoLm94bV9saXN0WzBdLnR5cGVfbGVuIC0gSU5fUE9SVAorMDAgMDAgMDAgMDQgIyBtYXRjaC5veG1fbGlzdFswXS52YWx1ZQorMDAgMDAgMDAgMDUgIyBtYXRjaC5veG1fbGlzdFswXS5tYXNrCisKKzgwIDAwIDBBIDAyICMgbWF0Y2gub3htX2xpc3RbMV0udHlwZV9sZW4gLSBFVEhfVFlQRQorODYgREQgIyBtYXRjaC5veG1fbGlzdFsxXS52YWx1ZSAtIEVUSF9UWVBFID0gSVB2NgorCis4MCAwMCAxNCAwMSAjIG1hdGNoLm94bV9saXN0WzJdLnR5cGVfbGVuIC0gSVAgUHJvdG8KKzA2ICMgbWF0Y2gub3htX2xpc3RbMl0udmFsdWUgPSBJUF9QUk9UTyA9IFRDUAorCis4MCAwMCAzNSAyMCAjIG1hdGNoLm94bV9saXN0WzNdLnR5cGVfbGVuIC0gSVBWNl9TUkMKKzFDIENBIEZFIDFDIEIxIDEwIDFDIDAwIDAwIDI4IDAwIDAwIDAwIDAwIDAwIDAwICMgbWF0Y2gub3htX2xpc3RbM10udmFsdWUKK0ZGIEZGIEZGIEZGIEZGIEYwIEZGIEZGIDFDIDJDIDNDIDAwIDAwIDAwIDAwIDAwICMgbWF0Y2gub3htX2xpc3RbM10ubWFzaworCiswMCAjIG1hdGNoLnBhZAorCiswMCAwMSAjIGluc3RydWN0aW9uc1swXS50eXBlCiswMCAwOCAjIGluc3RydWN0aW9uc1swXS5sZW5ndGgKKzA0ICMgaW5zdHJ1Y3Rpb25zWzBdLnRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorCiswMCAwMSAjIGluc3RydWN0aW9uc1sxXS50eXBlCiswMCAwOCAjIGluc3RydWN0aW9uc1sxXS5sZW5ndGgKKzA3ICMgaW5zdHJ1Y3Rpb25zWzFdLnRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRDb29raWUoVTY0LnBhcnNlSGV4KCJGRURDQkE5ODc2NTQzMjEwIikpCisgICAgICAgIC5zZXRDb29raWVNYXNrKFU2NC5wYXJzZUhleCgiRkYwMEZGMDBGRjAwRkYwMCIpKQorICAgICAgICAuc2V0VGFibGVJZChUYWJsZUlkLm9mKDMpKQorICAgICAgICAuc2V0SWRsZVRpbWVvdXQoNSkKKyAgICAgICAgLnNldEhhcmRUaW1lb3V0KDEwKQorICAgICAgICAuc2V0UHJpb3JpdHkoNjAwMCkKKyAgICAgICAgLnNldEJ1ZmZlcklkKE9GQnVmZmVySWQub2YoNTApKQorICAgICAgICAuc2V0T3V0UG9ydChPRlBvcnQub2YoNikpCisgICAgICAgIC5zZXRPdXRHcm91cChPRkdyb3VwLm9mKDgpKQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRkZsb3dNb2RGbGFncz5vZigpKQorICAgICAgICAuc2V0TWF0Y2goCisgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkTWF0Y2goKQorICAgICAgICAgICAgICAgIC5zZXRNYXNrZWQoTWF0Y2hGaWVsZC5JTl9QT1JULCBPRlBvcnQub2YoNCksIE9GUG9ydC5vZig1KSkKKyAgICAgICAgICAgICAgICAuc2V0RXhhY3QoTWF0Y2hGaWVsZC5FVEhfVFlQRSwgRXRoVHlwZS5JUHY2KQorICAgICAgICAgICAgICAgIC5zZXRFeGFjdChNYXRjaEZpZWxkLklQX1BST1RPLCBJcFByb3RvY29sLlRDUCkKKyAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSVBWNl9TUkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NkFkZHJlc3Mub2YoMHgxQ0NBRkUxQ0IxMTAxQzAwbCwgMHgwMDI4MDAwMDAwMDAwMDAwbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NkFkZHJlc3Mub2YoMHhGRkZGRkZGRkZGRjBGRkZGbCwgMHgxQzJDM0MwMDAwMDAwMDAwbCkpCisgICAgICAgICAgICAuYnVpbGQoKQorICAgICAgICApCisgICAgICAgIC5zZXRJbnN0cnVjdGlvbnMoCisgICAgICAgICAgICBJbW11dGFibGVMaXN0LjxPRkluc3RydWN0aW9uPm9mKAorICAgICAgICAgICAgICAgIGZhY3RvcnkuaW5zdHJ1Y3Rpb25zKCkuZ290b1RhYmxlKFRhYmxlSWQub2YoNCkpLAorICAgICAgICAgICAgICAgIGZhY3RvcnkuaW5zdHJ1Y3Rpb25zKCkuZ290b1RhYmxlKFRhYmxlSWQub2YoNykpCisgICAgICAgICAgICApCisgICAgICAgICk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZmxvd19kZWxldGUuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfZGVsZXRlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxMjkxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfZGVsZXRlLmRhdGEKQEAgLTAsMCArMSw3OSBAQAorLS0gYmluYXJ5CiswNiAwZSAjIHZlcnNpb24sIHR5cGUKKzAwIDgwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorCitmZSBkYyBiYSA5OCA3NiA1NCAzMiAxMCAjIGNvb2tpZQorCitmZiAwMCBmZiAwMCBmZiAwMCBmZiAwMCAjIGNvb2tpZV9tYXNrCisKKzAzICMgdGFibGVfaWQKKzAzICMgX2NvbW1hbmQKKzAwIDA1ICMgaWRsZV90aW1lb3V0CiswMCAwYSAjIGhhcmRfdGltZW91dAorMTcgNzAgIyBwcmlvcml0eQorCiswMCAwMCAwMCAzMiAjIGJ1ZmZlcl9pZAorMDAgMDAgMDAgMDYgIyBvdXRfcG9ydAorCiswMCAwMCAwMCAwOCAjIG91dF9ncm91cAorMDAgMDAgIyBmbGFncworMDAgMDAgIyBpbXBvcnRhbmNlCisKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgM0YgIyBtYXRjaC5sZW5ndGggIyA1OSBieXRlcyBPWE1zICsgNCBieXRlcyBtYXRjaCBoZWFkZXIKKworODAgMDAgMDEgMDggIyBtYXRjaC5veG1fbGlzdFswXS50eXBlX2xlbiAtIElOX1BPUlQKKzAwIDAwIDAwIDA0ICMgbWF0Y2gub3htX2xpc3RbMF0udmFsdWUKKzAwIDAwIDAwIDA1ICMgbWF0Y2gub3htX2xpc3RbMF0ubWFzaworCis4MCAwMCAwQSAwMiAjIG1hdGNoLm94bV9saXN0WzFdLnR5cGVfbGVuIC0gRVRIX1RZUEUKKzg2IEREICMgbWF0Y2gub3htX2xpc3RbMV0udmFsdWUgLSBFVEhfVFlQRSA9IElQdjYKKworODAgMDAgMTQgMDEgIyBtYXRjaC5veG1fbGlzdFsyXS50eXBlX2xlbiAtIElQIFByb3RvCiswNiAjIG1hdGNoLm94bV9saXN0WzJdLnZhbHVlID0gSVBfUFJPVE8gPSBUQ1AKKworODAgMDAgMzUgMjAgIyBtYXRjaC5veG1fbGlzdFszXS50eXBlX2xlbiAtIElQVjZfU1JDCisxQyBDQSBGRSAxQyBCMSAxMCAxQyAwMCAwMCAyOCAwMCAwMCAwMCAwMCAwMCAwMCAjIG1hdGNoLm94bV9saXN0WzNdLnZhbHVlCitGRiBGRiBGRiBGRiBGRiBGMCBGRiBGRiAxQyAyQyAzQyAwMCAwMCAwMCAwMCAwMCAjIG1hdGNoLm94bV9saXN0WzNdLm1hc2sKKworMDAgIyBtYXRjaC5wYWQKKworMDAgMDEgIyBpbnN0cnVjdGlvbnNbMF0udHlwZQorMDAgMDggIyBpbnN0cnVjdGlvbnNbMF0ubGVuZ3RoCiswNCAjIGluc3RydWN0aW9uc1swXS50YWJsZV9pZAorMDAgMDAgMDAgIyBwYWQKKworMDAgMDEgIyBpbnN0cnVjdGlvbnNbMV0udHlwZQorMDAgMDggIyBpbnN0cnVjdGlvbnNbMV0ubGVuZ3RoCiswNyAjIGluc3RydWN0aW9uc1sxXS50YWJsZV9pZAorMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0Q29va2llKFU2NC5wYXJzZUhleCgiRkVEQ0JBOTg3NjU0MzIxMCIpKQorICAgICAgICAuc2V0Q29va2llTWFzayhVNjQucGFyc2VIZXgoIkZGMDBGRjAwRkYwMEZGMDAiKSkKKyAgICAgICAgLnNldFRhYmxlSWQoVGFibGVJZC5vZigzKSkKKyAgICAgICAgLnNldElkbGVUaW1lb3V0KDUpCisgICAgICAgIC5zZXRIYXJkVGltZW91dCgxMCkKKyAgICAgICAgLnNldFByaW9yaXR5KDYwMDApCisgICAgICAgIC5zZXRCdWZmZXJJZChPRkJ1ZmZlcklkLm9mKDUwKSkKKyAgICAgICAgLnNldE91dFBvcnQoT0ZQb3J0Lm9mKDYpKQorICAgICAgICAuc2V0T3V0R3JvdXAoT0ZHcm91cC5vZig4KSkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZGbG93TW9kRmxhZ3M+b2YoKSkKKyAgICAgICAgLnNldE1hdGNoKAorICAgICAgICAgICAgZmFjdG9yeS5idWlsZE1hdGNoKCkKKyAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSU5fUE9SVCwgT0ZQb3J0Lm9mKDQpLCBPRlBvcnQub2YoNSkpCisgICAgICAgICAgICAgICAgLnNldEV4YWN0KE1hdGNoRmllbGQuRVRIX1RZUEUsIEV0aFR5cGUuSVB2NikKKyAgICAgICAgICAgICAgICAuc2V0RXhhY3QoTWF0Y2hGaWVsZC5JUF9QUk9UTywgSXBQcm90b2NvbC5UQ1ApCisgICAgICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklQVjZfU1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgSVB2NkFkZHJlc3Mub2YoMHgxQ0NBRkUxQ0IxMTAxQzAwbCwgMHgwMDI4MDAwMDAwMDAwMDAwbCksCisgICAgICAgICAgICAgICAgICAgICAgICBJUHY2QWRkcmVzcy5vZigweEZGRkZGRkZGRkZGMEZGRkZsLCAweDFDMkMzQzAwMDAwMDAwMDBsKSkKKyAgICAgICAgICAgIC5idWlsZCgpCisgICAgICAgICkKKyAgICAgICAgLnNldEluc3RydWN0aW9ucygKKyAgICAgICAgICAgIEltbXV0YWJsZUxpc3QuPE9GSW5zdHJ1Y3Rpb24+b2YoCisgICAgICAgICAgICAgICAgZmFjdG9yeS5pbnN0cnVjdGlvbnMoKS5nb3RvVGFibGUoVGFibGVJZC5vZig0KSksCisgICAgICAgICAgICAgICAgZmFjdG9yeS5pbnN0cnVjdGlvbnMoKS5nb3RvVGFibGUoVGFibGVJZC5vZig3KSkKKyAgICAgICAgICAgICkKKyAgICAgICAgKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9mbG93X2RlbGV0ZV9zdHJpY3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfZGVsZXRlX3N0cmljdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzQ5NmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9mbG93X2RlbGV0ZV9zdHJpY3QuZGF0YQpAQCAtMCwwICsxLDc5IEBACistLSBiaW5hcnkKKzA2IDBlICMgdmVyc2lvbiwgdHlwZQorMDAgODAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCisKK2ZlIGRjIGJhIDk4IDc2IDU0IDMyIDEwICMgY29va2llCisKK2ZmIDAwIGZmIDAwIGZmIDAwIGZmIDAwICMgY29va2llX21hc2sKKworMDMgIyB0YWJsZV9pZAorMDQgIyBfY29tbWFuZAorMDAgMDUgIyBpZGxlX3RpbWVvdXQKKzAwIDBhICMgaGFyZF90aW1lb3V0CisxNyA3MCAjIHByaW9yaXR5CisKKzAwIDAwIDAwIDMyICMgYnVmZmVyX2lkCiswMCAwMCAwMCAwNiAjIG91dF9wb3J0CisKKzAwIDAwIDAwIDA4ICMgb3V0X2dyb3VwCiswMCAwMCAjIGZsYWdzCiswMCAwMCAjIGltcG9ydGFuY2UKKworMDAgMDEgIyBtYXRjaC50eXBlCiswMCAzRiAjIG1hdGNoLmxlbmd0aCAjIDU5IGJ5dGVzIE9YTXMgKyA0IGJ5dGVzIG1hdGNoIGhlYWRlcgorCis4MCAwMCAwMSAwOCAjIG1hdGNoLm94bV9saXN0WzBdLnR5cGVfbGVuIC0gSU5fUE9SVAorMDAgMDAgMDAgMDQgIyBtYXRjaC5veG1fbGlzdFswXS52YWx1ZQorMDAgMDAgMDAgMDUgIyBtYXRjaC5veG1fbGlzdFswXS5tYXNrCisKKzgwIDAwIDBBIDAyICMgbWF0Y2gub3htX2xpc3RbMV0udHlwZV9sZW4gLSBFVEhfVFlQRQorODYgREQgIyBtYXRjaC5veG1fbGlzdFsxXS52YWx1ZSAtIEVUSF9UWVBFID0gSVB2NgorCis4MCAwMCAxNCAwMSAjIG1hdGNoLm94bV9saXN0WzJdLnR5cGVfbGVuIC0gSVAgUHJvdG8KKzA2ICMgbWF0Y2gub3htX2xpc3RbMl0udmFsdWUgPSBJUF9QUk9UTyA9IFRDUAorCis4MCAwMCAzNSAyMCAjIG1hdGNoLm94bV9saXN0WzNdLnR5cGVfbGVuIC0gSVBWNl9TUkMKKzFDIENBIEZFIDFDIEIxIDEwIDFDIDAwIDAwIDI4IDAwIDAwIDAwIDAwIDAwIDAwICMgbWF0Y2gub3htX2xpc3RbM10udmFsdWUKK0ZGIEZGIEZGIEZGIEZGIEYwIEZGIEZGIDFDIDJDIDNDIDAwIDAwIDAwIDAwIDAwICMgbWF0Y2gub3htX2xpc3RbM10ubWFzaworCiswMCAjIG1hdGNoLnBhZAorCiswMCAwMSAjIGluc3RydWN0aW9uc1swXS50eXBlCiswMCAwOCAjIGluc3RydWN0aW9uc1swXS5sZW5ndGgKKzA0ICMgaW5zdHJ1Y3Rpb25zWzBdLnRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorCiswMCAwMSAjIGluc3RydWN0aW9uc1sxXS50eXBlCiswMCAwOCAjIGluc3RydWN0aW9uc1sxXS5sZW5ndGgKKzA3ICMgaW5zdHJ1Y3Rpb25zWzFdLnRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRDb29raWUoVTY0LnBhcnNlSGV4KCJGRURDQkE5ODc2NTQzMjEwIikpCisgICAgICAgIC5zZXRDb29raWVNYXNrKFU2NC5wYXJzZUhleCgiRkYwMEZGMDBGRjAwRkYwMCIpKQorICAgICAgICAuc2V0VGFibGVJZChUYWJsZUlkLm9mKDMpKQorICAgICAgICAuc2V0SWRsZVRpbWVvdXQoNSkKKyAgICAgICAgLnNldEhhcmRUaW1lb3V0KDEwKQorICAgICAgICAuc2V0UHJpb3JpdHkoNjAwMCkKKyAgICAgICAgLnNldEJ1ZmZlcklkKE9GQnVmZmVySWQub2YoNTApKQorICAgICAgICAuc2V0T3V0UG9ydChPRlBvcnQub2YoNikpCisgICAgICAgIC5zZXRPdXRHcm91cChPRkdyb3VwLm9mKDgpKQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRkZsb3dNb2RGbGFncz5vZigpKQorICAgICAgICAuc2V0TWF0Y2goCisgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkTWF0Y2goKQorICAgICAgICAgICAgICAgIC5zZXRNYXNrZWQoTWF0Y2hGaWVsZC5JTl9QT1JULCBPRlBvcnQub2YoNCksIE9GUG9ydC5vZig1KSkKKyAgICAgICAgICAgICAgICAuc2V0RXhhY3QoTWF0Y2hGaWVsZC5FVEhfVFlQRSwgRXRoVHlwZS5JUHY2KQorICAgICAgICAgICAgICAgIC5zZXRFeGFjdChNYXRjaEZpZWxkLklQX1BST1RPLCBJcFByb3RvY29sLlRDUCkKKyAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSVBWNl9TUkMsCisgICAgICAgICAgICAgICAgICAgICAgICBJUHY2QWRkcmVzcy5vZigweDFDQ0FGRTFDQjExMDFDMDBsLCAweDAwMjgwMDAwMDAwMDAwMDBsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIElQdjZBZGRyZXNzLm9mKDB4RkZGRkZGRkZGRkYwRkZGRmwsIDB4MUMyQzNDMDAwMDAwMDAwMGwpKQorICAgICAgICAgICAgLmJ1aWxkKCkKKyAgICAgICAgKQorICAgICAgICAuc2V0SW5zdHJ1Y3Rpb25zKAorICAgICAgICAgICAgSW1tdXRhYmxlTGlzdC48T0ZJbnN0cnVjdGlvbj5vZigKKyAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDQpKSwKKyAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDcpKQorICAgICAgICAgICAgKQorICAgICAgICApOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfcmVwbHkuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZlOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19saWdodHdlaWdodF9zdGF0c19yZXBseS5kYXRhCkBAIC0wLDAgKzEsNDAgQEAKKy0tIGJpbmFyeQorMDYgMTMgIyB2ZXJzaW9uLCB0eXBlCiswMCA0OCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDExICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfRkxPV19MSUdIVFdFSUdIVChfU1RBVFMpKQorMDAgMDEgIyBmbGFncyAoUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAzOCAjIGxlbmd0aAorMDAgMDAgIyBwYWQKKzAxICMgdGFibGVfaWQKKzAwICMgcmVhc29uIChPRlBGU1JfU1RBVFNfUkVRVUVTVCkKKzAwIDAxICMgcHJpb3JpdHkKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgMTAgIyBtYXRjaC5sZW5ndGgKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJTl9QT1JUCiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKzAwIDAwICMgbWF0Y2gucGFkCiswMCAxYyAjIHN0YXRzLmxlbmd0aAorODAgMDIgMDAgMDggIyBzdGF0cy5veHNfbGlzdFswXS50eXBlX2xlbiAtIERVUkFUSU9OCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNCAjIHN0YXRzLm94c19saXN0WzBdLnZhbHVlCis4MCAwMiAwMiAwOCAjIHN0YXRzLm94c19saXN0WzFdLnR5cGVfbGVuIC0gSURMRV9USU1FICgwMiAtPiAwMDAwIDAwMTAgLT4gb3hzX2ZpZWxkIHdpZHRoIDcsIG94c19yZXNlcnZlZCB3aWR0aCAxKQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDYgIyBzdGF0cy5veHNfbGlzdFsxXS52YWx1ZQorMDAgMDAgMDAgMDAgIyBzdGF0cy5wYWQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZGbG93TGlnaHR3ZWlnaHRTdGF0c0VudHJ5Pm9mKGZhY3RvcnkuYnVpbGRGbG93TGlnaHR3ZWlnaHRTdGF0c0VudHJ5KCkuc2V0VGFibGVJZChUYWJsZUlkLm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRSZWFzb24oT0ZGbG93U3RhdHNSZWFzb24uU1RBVFNfUkVRVUVTVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UHJpb3JpdHkoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2goZmFjdG9yeS5idWlsZE1hdGNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklOX1BPUlQsIE9GUG9ydC5vZig0KSwgT0ZQb3J0Lm9mKDUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U3RhdHMoZmFjdG9yeS5idWlsZFN0YXRWNigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRPeHNGaWVsZHMoT0ZPeHNMaXN0Lm9mKGZhY3Rvcnkub3hzcygpLmJ1aWxkRHVyYXRpb24oKS5zZXRWYWx1ZShVNjQub2YoNCkpLmJ1aWxkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcnkub3hzcygpLmJ1aWxkSWRsZVRpbWUoKS5zZXRWYWx1ZShVNjQub2YoNikpLmJ1aWxkKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpCisgICAgICAgIC5idWlsZCgpOwpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZmxvd19saWdodHdlaWdodF9zdGF0c19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mbG93X2xpZ2h0d2VpZ2h0X3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTliOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19saWdodHdlaWdodF9zdGF0c19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSwzMyBAQAorLS0gYmluYXJ5CiswNiAxMiAjIHZlcnNpb24sIHR5cGUKKzAwIDQwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMTEgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9GTE9XX0xJR0hUV0VJR0hUKF9TVEFUUykpCiswMCAwMSAjIGZsYWdzIChSRVFfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMSAjIHRhYmxlSWQKKzAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwNCAjIG91dF9wb3J0CiswMCAwMCAwMCAwMSAjIG91dF9ncm91cAorMDAgMDAgMDAgMDAgIyBwYWQKK2ZlIGRjIGJhIDk4IDc2IDU0IDMyIDEwICMgY29va2llCitmZiAwMCBmZiAwMCBmZiAwMCBmZiAwMCAjIGNvb2tpZV9tYXNrCiswMCAwMSAjIG1hdGNoLnR5cGUKKzAwIDEwICMgbWF0Y2gubGVuZ3RoCis4MCAwMCAwMSAwOCAjIG1hdGNoLm94bV9saXN0WzBdLnR5cGVfbGVuIC0gSU5fUE9SVAorMDAgMDAgMDAgMDQgIyBtYXRjaC5veG1fbGlzdFswXS52YWx1ZQorMDAgMDAgMDAgMDUgIyBtYXRjaC5veG1fbGlzdFswXS5tYXNrCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0VGFibGVJZChUYWJsZUlkLm9mKDEpKQorICAgICAgICAuc2V0T3V0UG9ydChPRlBvcnQub2YoNCkpCisgICAgICAgIC5zZXRPdXRHcm91cChPRkdyb3VwLm9mKDEpKQorICAgICAgICAuc2V0Q29va2llKFU2NC5wYXJzZUhleCgiRkVEQ0JBOTg3NjU0MzIxMCIpKQorICAgICAgICAuc2V0Q29va2llTWFzayhVNjQucGFyc2VIZXgoIkZGMDBGRjAwRkYwMEZGMDAiKSkKKyAgICAgICAgLnNldE1hdGNoKGZhY3RvcnkuYnVpbGRNYXRjaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSU5fUE9SVCwgT0ZQb3J0Lm9mKDQpLCBPRlBvcnQub2YoNSkpCisgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgLmJ1aWxkKCkKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbW9kX2ZhaWxlZF9lcnJvcl9tc2cuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbW9kX2ZhaWxlZF9lcnJvcl9tc2cuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRhNDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19tb2RfZmFpbGVkX2Vycm9yX21zZy5kYXRhCkBAIC0wLDAgKzEsMTIgQEAKKy0tIGJpbmFyeQorMDYgMDEgIyB2ZXJzaW9uIC8gdHlwZQorMDAgMGYgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwNSAjIGVycl90eXBlCiswMCAwMSAjIGNvZGUKKzYxIDYyIDYzICMgZGF0YQorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRDb2RlKE9GRmxvd01vZEZhaWxlZENvZGUuVEFCTEVfRlVMTCkKKyAgICAgICAgLnNldERhdGEoT0ZFcnJvckNhdXNlRGF0YS5vZihuZXcgYnl0ZVtdIHsgMHg2MSwgMHg2MiwgMHg2MyB9LCBPRlZlcnNpb24uT0ZfMTUpKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9mbG93X21vZGlmeS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvZmxvd19tb2RpZnkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTNhY2QyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19tb2RpZnkuZGF0YQpAQCAtMCwwICsxLDc5IEBACistLSBiaW5hcnkKKzA2IDBlICMgdmVyc2lvbiwgdHlwZQorMDAgODAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCisKK2ZlIGRjIGJhIDk4IDc2IDU0IDMyIDEwICMgY29va2llCisKK2ZmIDAwIGZmIDAwIGZmIDAwIGZmIDAwICMgY29va2llX21hc2sKKworMDMgIyB0YWJsZV9pZAorMDEgIyBfY29tbWFuZAorMDAgMDUgIyBpZGxlX3RpbWVvdXQKKzAwIDBhICMgaGFyZF90aW1lb3V0CisxNyA3MCAjIHByaW9yaXR5CisKKzAwIDAwIDAwIDMyICMgYnVmZmVyX2lkCiswMCAwMCAwMCAwNiAjIG91dF9wb3J0CisKKzAwIDAwIDAwIDA4ICMgb3V0X2dyb3VwCiswMCAwMCAjIGZsYWdzCiswMCAwMCAjIGltcG9ydGFuY2UKKworMDAgMDEgIyBtYXRjaC50eXBlCiswMCAzRiAjIG1hdGNoLmxlbmd0aCAjIDU5IGJ5dGVzIE9YTXMgKyA0IGJ5dGVzIG1hdGNoIGhlYWRlcgorCis4MCAwMCAwMSAwOCAjIG1hdGNoLm94bV9saXN0WzBdLnR5cGVfbGVuIC0gSU5fUE9SVAorMDAgMDAgMDAgMDQgIyBtYXRjaC5veG1fbGlzdFswXS52YWx1ZQorMDAgMDAgMDAgMDUgIyBtYXRjaC5veG1fbGlzdFswXS5tYXNrCisKKzgwIDAwIDBBIDAyICMgbWF0Y2gub3htX2xpc3RbMV0udHlwZV9sZW4gLSBFVEhfVFlQRQorODYgREQgIyBtYXRjaC5veG1fbGlzdFsxXS52YWx1ZSAtIEVUSF9UWVBFID0gSVB2NgorCis4MCAwMCAxNCAwMSAjIG1hdGNoLm94bV9saXN0WzJdLnR5cGVfbGVuIC0gSVAgUHJvdG8KKzA2ICMgbWF0Y2gub3htX2xpc3RbMl0udmFsdWUgPSBJUF9QUk9UTyA9IFRDUAorCis4MCAwMCAzNSAyMCAjIG1hdGNoLm94bV9saXN0WzNdLnR5cGVfbGVuIC0gSVBWNl9TUkMKKzFDIENBIEZFIDFDIEIxIDEwIDFDIDAwIDAwIDI4IDAwIDAwIDAwIDAwIDAwIDAwICMgbWF0Y2gub3htX2xpc3RbM10udmFsdWUKK0ZGIEZGIEZGIEZGIEZGIEYwIEZGIEZGIDFDIDJDIDNDIDAwIDAwIDAwIDAwIDAwICMgbWF0Y2gub3htX2xpc3RbM10ubWFzaworCiswMCAjIG1hdGNoLnBhZAorCiswMCAwMSAjIGluc3RydWN0aW9uc1swXS50eXBlCiswMCAwOCAjIGluc3RydWN0aW9uc1swXS5sZW5ndGgKKzA0ICMgaW5zdHJ1Y3Rpb25zWzBdLnRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorCiswMCAwMSAjIGluc3RydWN0aW9uc1sxXS50eXBlCiswMCAwOCAjIGluc3RydWN0aW9uc1sxXS5sZW5ndGgKKzA3ICMgaW5zdHJ1Y3Rpb25zWzFdLnRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRDb29raWUoVTY0LnBhcnNlSGV4KCJGRURDQkE5ODc2NTQzMjEwIikpCisgICAgICAgIC5zZXRDb29raWVNYXNrKFU2NC5wYXJzZUhleCgiRkYwMEZGMDBGRjAwRkYwMCIpKQorICAgICAgICAuc2V0VGFibGVJZChUYWJsZUlkLm9mKDMpKQorICAgICAgICAuc2V0SWRsZVRpbWVvdXQoNSkKKyAgICAgICAgLnNldEhhcmRUaW1lb3V0KDEwKQorICAgICAgICAuc2V0UHJpb3JpdHkoNjAwMCkKKyAgICAgICAgLnNldEJ1ZmZlcklkKE9GQnVmZmVySWQub2YoNTApKQorICAgICAgICAuc2V0T3V0UG9ydChPRlBvcnQub2YoNikpCisgICAgICAgIC5zZXRPdXRHcm91cChPRkdyb3VwLm9mKDgpKQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRkZsb3dNb2RGbGFncz5vZigpKQorICAgICAgICAuc2V0TWF0Y2goCisgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkTWF0Y2goKQorICAgICAgICAgICAgICAgIC5zZXRNYXNrZWQoTWF0Y2hGaWVsZC5JTl9QT1JULCBPRlBvcnQub2YoNCksIE9GUG9ydC5vZig1KSkKKyAgICAgICAgICAgICAgICAuc2V0RXhhY3QoTWF0Y2hGaWVsZC5FVEhfVFlQRSwgRXRoVHlwZS5JUHY2KQorICAgICAgICAgICAgICAgIC5zZXRFeGFjdChNYXRjaEZpZWxkLklQX1BST1RPLCBJcFByb3RvY29sLlRDUCkKKyAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSVBWNl9TUkMsCisgICAgICAgICAgICAgICAgICAgICAgICBJUHY2QWRkcmVzcy5vZigweDFDQ0FGRTFDQjExMDFDMDBsLCAweDAwMjgwMDAwMDAwMDAwMDBsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIElQdjZBZGRyZXNzLm9mKDB4RkZGRkZGRkZGRkYwRkZGRmwsIDB4MUMyQzNDMDAwMDAwMDAwMGwpKQorICAgICAgICAgICAgLmJ1aWxkKCkKKyAgICAgICAgKQorICAgICAgICAuc2V0SW5zdHJ1Y3Rpb25zKAorICAgICAgICAgICAgSW1tdXRhYmxlTGlzdC48T0ZJbnN0cnVjdGlvbj5vZigKKyAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDQpKSwKKyAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDcpKQorICAgICAgICAgICAgKQorICAgICAgICApOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbW9kaWZ5X3N0cmljdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvZmxvd19tb2RpZnlfc3RyaWN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjNjgzYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbW9kaWZ5X3N0cmljdC5kYXRhCkBAIC0wLDAgKzEsNzkgQEAKKy0tIGJpbmFyeQorMDYgMGUgIyB2ZXJzaW9uLCB0eXBlCiswMCA4MCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKworZmUgZGMgYmEgOTggNzYgNTQgMzIgMTAgIyBjb29raWUKKworZmYgMDAgZmYgMDAgZmYgMDAgZmYgMDAgIyBjb29raWVfbWFzaworCiswMyAjIHRhYmxlX2lkCiswMiAjIF9jb21tYW5kCiswMCAwNSAjIGlkbGVfdGltZW91dAorMDAgMGEgIyBoYXJkX3RpbWVvdXQKKzE3IDcwICMgcHJpb3JpdHkKKworMDAgMDAgMDAgMzIgIyBidWZmZXJfaWQKKzAwIDAwIDAwIDA2ICMgb3V0X3BvcnQKKworMDAgMDAgMDAgMDggIyBvdXRfZ3JvdXAKKzAwIDAwICMgZmxhZ3MKKzAwIDAwICMgaW1wb3J0YW5jZQorCiswMCAwMSAjIG1hdGNoLnR5cGUKKzAwIDNGICMgbWF0Y2gubGVuZ3RoICMgNTkgYnl0ZXMgT1hNcyArIDQgYnl0ZXMgbWF0Y2ggaGVhZGVyCisKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJTl9QT1JUCiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKworODAgMDAgMEEgMDIgIyBtYXRjaC5veG1fbGlzdFsxXS50eXBlX2xlbiAtIEVUSF9UWVBFCis4NiBERCAjIG1hdGNoLm94bV9saXN0WzFdLnZhbHVlIC0gRVRIX1RZUEUgPSBJUHY2CisKKzgwIDAwIDE0IDAxICMgbWF0Y2gub3htX2xpc3RbMl0udHlwZV9sZW4gLSBJUCBQcm90bworMDYgIyBtYXRjaC5veG1fbGlzdFsyXS52YWx1ZSA9IElQX1BST1RPID0gVENQCisKKzgwIDAwIDM1IDIwICMgbWF0Y2gub3htX2xpc3RbM10udHlwZV9sZW4gLSBJUFY2X1NSQworMUMgQ0EgRkUgMUMgQjEgMTAgMUMgMDAgMDAgMjggMDAgMDAgMDAgMDAgMDAgMDAgIyBtYXRjaC5veG1fbGlzdFszXS52YWx1ZQorRkYgRkYgRkYgRkYgRkYgRjAgRkYgRkYgMUMgMkMgM0MgMDAgMDAgMDAgMDAgMDAgIyBtYXRjaC5veG1fbGlzdFszXS5tYXNrCisKKzAwICMgbWF0Y2gucGFkCisKKzAwIDAxICMgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUKKzAwIDA4ICMgaW5zdHJ1Y3Rpb25zWzBdLmxlbmd0aAorMDQgIyBpbnN0cnVjdGlvbnNbMF0udGFibGVfaWQKKzAwIDAwIDAwICMgcGFkCisKKzAwIDAxICMgaW5zdHJ1Y3Rpb25zWzFdLnR5cGUKKzAwIDA4ICMgaW5zdHJ1Y3Rpb25zWzFdLmxlbmd0aAorMDcgIyBpbnN0cnVjdGlvbnNbMV0udGFibGVfaWQKKzAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldENvb2tpZShVNjQucGFyc2VIZXgoIkZFRENCQTk4NzY1NDMyMTAiKSkKKyAgICAgICAgLnNldENvb2tpZU1hc2soVTY0LnBhcnNlSGV4KCJGRjAwRkYwMEZGMDBGRjAwIikpCisgICAgICAgIC5zZXRUYWJsZUlkKFRhYmxlSWQub2YoMykpCisgICAgICAgIC5zZXRJZGxlVGltZW91dCg1KQorICAgICAgICAuc2V0SGFyZFRpbWVvdXQoMTApCisgICAgICAgIC5zZXRQcmlvcml0eSg2MDAwKQorICAgICAgICAuc2V0QnVmZmVySWQoT0ZCdWZmZXJJZC5vZig1MCkpCisgICAgICAgIC5zZXRPdXRQb3J0KE9GUG9ydC5vZig2KSkKKyAgICAgICAgLnNldE91dEdyb3VwKE9GR3JvdXAub2YoOCkpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GRmxvd01vZEZsYWdzPm9mKCkpCisgICAgICAgIC5zZXRNYXRjaCgKKyAgICAgICAgICAgIGZhY3RvcnkuYnVpbGRNYXRjaCgpCisgICAgICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklOX1BPUlQsIE9GUG9ydC5vZig0KSwgT0ZQb3J0Lm9mKDUpKQorICAgICAgICAgICAgICAgIC5zZXRFeGFjdChNYXRjaEZpZWxkLkVUSF9UWVBFLCBFdGhUeXBlLklQdjYpCisgICAgICAgICAgICAgICAgLnNldEV4YWN0KE1hdGNoRmllbGQuSVBfUFJPVE8sIElwUHJvdG9jb2wuVENQKQorICAgICAgICAgICAgICAgIC5zZXRNYXNrZWQoTWF0Y2hGaWVsZC5JUFY2X1NSQywKKyAgICAgICAgICAgICAgICAgICAgICAgSVB2NkFkZHJlc3Mub2YoMHgxQ0NBRkUxQ0IxMTAxQzAwbCwgMHgwMDI4MDAwMDAwMDAwMDAwbCksCisgICAgICAgICAgICAgICAgICAgICAgIElQdjZBZGRyZXNzLm9mKDB4RkZGRkZGRkZGRkYwRkZGRmwsIDB4MUMyQzNDMDAwMDAwMDAwMGwpKQorICAgICAgICAgICAgLmJ1aWxkKCkKKyAgICAgICAgKQorICAgICAgICAuc2V0SW5zdHJ1Y3Rpb25zKAorICAgICAgICAgICAgSW1tdXRhYmxlTGlzdC48T0ZJbnN0cnVjdGlvbj5vZigKKyAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDQpKSwKKyAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDcpKQorICAgICAgICAgICAgKQorICAgICAgICApOwpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZmxvd19tb25pdG9yX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mbG93X21vbml0b3JfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzE4ODUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19tb25pdG9yX3JlcGx5LmRhdGEKQEAgLTAsMCArMSwxNSBAQAorLS0gYmluYXJ5CiswNiAxMyAjIHZlcnNpb24sIHR5cGUKKzAwIDE0ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMTAgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9GTE9XX01PTklUT1IpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwNCAjIGxlbmd0aAorMDAgMDEgIyBldmVudAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXBseUZsYWdzPm9mKE9GU3RhdHNSZXBseUZsYWdzLlJFUExZX01PUkUpKQorICAgICAgICAuc2V0RW50cmllcyhJbW11dGFibGVMaXN0LjxPRkZsb3dNb25pdG9yUmVwbHlFbnRyeT5vZihmYWN0b3J5LmJ1aWxkRmxvd01vbml0b3JSZXBseUVudHJ5KCkuc2V0RXZlbnQoT0ZGbG93VXBkYXRlRXZlbnQuQURERUQpLmJ1aWxkKCkpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfbW9uaXRvcl9yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mbG93X21vbml0b3JfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjU4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9mbG93X21vbml0b3JfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMzMgQEAKKy0tIGJpbmFyeQorMDYgMTIgIyB2ZXJzaW9uLCB0eXBlCiswMCAzMCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDEwICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfRkxPV19NT05JVE9SKQorMDAgMDEgIyBmbGFncworMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDAwIDAwIDAxICMgbW9uaXRvcl9pZAorMDAgMDAgMDAgMDEgIyBvdXRfcG9ydAorMDAgMDAgMDAgMDEgIyBvdXRfZ3JvdXAKKzAwIDAxICMgZmxhZ3MgKElOSVRJQUwpCiswMSAjIHRhYmxlX2lkCiswMCAjIGNvbW1hbmQgKEFERCkKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgMTAgIyBtYXRjaC5sZW5ndGgKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJTl9QT1JUCiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0RW50cmllcyhJbW11dGFibGVMaXN0LjxPRkZsb3dNb25pdG9yRW50cnk+b2YoZmFjdG9yeS5idWlsZEZsb3dNb25pdG9yRW50cnkoKS5zZXRNb25pdG9ySWQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0T3V0UG9ydCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRPdXRHcm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GRmxvd01vbml0b3JGbGFncz5vZihPRkZsb3dNb25pdG9yRmxhZ3MuSU5JVElBTCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRhYmxlSWQoVGFibGVJZC5vZigxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29tbWFuZChPRkZsb3dNb25pdG9yQ29tbWFuZC5BREQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE1hdGNoKGZhY3RvcnkuYnVpbGRNYXRjaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSU5fUE9SVCwgT0ZQb3J0Lm9mKDQpLCBPRlBvcnQub2YoNSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZmxvd19yZW1vdmVkLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mbG93X3JlbW92ZWQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZkODcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19yZW1vdmVkLmRhdGEKQEAgLTAsMCArMSw0NCBAQAorLS0gYmluYXJ5CiswNiAwYiAjIHZlcnNpb24sIHR5cGUKKzAwIDQ4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMTQgIyB0YWJsZV9pZAorMDIgIyByZWFzb24KKzQyIDY4ICMgcHJpb3JpdHkKKzAwIDA1ICMgaWRsZV90aW1lb3V0CiswMCAxZSAjIGhhcmRfdGltZW91dAorZmUgZGMgYmEgOTggNzYgNTQgMzIgMTAgIyBjb29raWUKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgMTAgIyBtYXRjaC5sZW5ndGgKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJTl9QT1JUCiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKzAwIDAwICMgbWF0Y2gucGFkCiswMCAxYyAjIHN0YXRzLmxlbmd0aAorODAgMDIgMDAgMDggIyBzdGF0cy5veHNfbGlzdFswXS50eXBlX2xlbiAtIERVUkFUSU9OCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNCAjIHN0YXRzLm94c19saXN0WzBdLnZhbHVlCis4MCAwMiAwMiAwOCAjIHN0YXRzLm94c19saXN0WzFdLnR5cGVfbGVuIC0gSURMRV9USU1FICgwMiAtPiAwMDAwIDAwMTAgLT4gb3hzX2ZpZWxkIHdpZHRoIDcsIG94c19yZXNlcnZlZCB3aWR0aCAxKQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDYgIyBzdGF0cy5veHNfbGlzdFsxXS52YWx1ZQorMDAgMDAgMDAgMDAgIyBzdGF0cy5wYWQKKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRUYWJsZUlkKFRhYmxlSWQub2YoMjApKQorICAgICAgICAuc2V0UmVhc29uKE9GRmxvd1JlbW92ZWRSZWFzb24uREVMRVRFKQorICAgICAgICAuc2V0UHJpb3JpdHkoMTcwMDApCisgICAgICAgIC5zZXRJZGxlVGltZW91dCg1KQorICAgICAgICAuc2V0SGFyZFRpbWVvdXQoMzApCisgICAgICAgIC5zZXRDb29raWUoVTY0LnBhcnNlSGV4KCJGRURDQkE5ODc2NTQzMjEwIikpCisgICAgICAgIC5zZXRNYXRjaCgKKyAgICAgICAgICAgIGZhY3RvcnkuYnVpbGRNYXRjaCgpCisgICAgICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklOX1BPUlQsIE9GUG9ydC5vZig0KSwgT0ZQb3J0Lm9mKDUpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKQorICAgICAgICAuc2V0U3RhdHMoCisgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkU3RhdFY2KCkKKyAgICAgICAgICAgICAgICAuc2V0T3hzRmllbGRzKE9GT3hzTGlzdC5vZihmYWN0b3J5Lm94c3MoKS5idWlsZER1cmF0aW9uKCkuc2V0VmFsdWUoVTY0Lm9mKDQpKS5idWlsZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5Lm94c3MoKS5idWlsZElkbGVUaW1lKCkuc2V0VmFsdWUoVTY0Lm9mKDYpKS5idWlsZCgpKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgLmJ1aWxkKCkKKworCisKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfc3RhdHNfcmVwbHkuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2Zsb3dfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGM0NWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19zdGF0c19yZXBseS5kYXRhCkBAIC0wLDAgKzEsNjggQEAKKy0tIGJpbmFyeQorMDYgMTMgIyB2ZXJzaW9uLCB0eXBlCiswMCA2OCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAxICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfRkxPV19ERVNDKSAtLSBvbGQgbmFtZSBpcyBPRlBNUF9GTE9XIGZvciBzcGVjIDEuMy4xLCAxLjQuMCwgMS40LjEKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCisKKzAwIDU4ICMgbGVuZ3RoCiswMCAwMCAjIHBhZAorMDEgIyB0YWJsZV9pZAorMDAgIyBwYWQKKzAwIDAxICMgcHJpb3JpdHkKKzAwIDEwICMgaWRsZV90aW1lb3V0CiswMCA2MCAjIGhhcmRfdGltZW91dAorMDAgMDEgIyBmbGFncyAoT0ZQRkZfU0VORF9GTE9XX1JFTSkgU2VuZCBmbG93IHJlbW92ZWQgbWVzc2FnZSB3aGVuIGZsb3cgZXhwaXJlcyBvciBpcyBkZWxldGVkCiswMCAwMSAjIGltcG9ydGFuY2UKK2ZlIGRjIGJhIDk4IDc2IDU0IDMyIDEwICMgY29va2llCisKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgMTAgIyBtYXRjaC5sZW5ndGgKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJTl9QT1JUCiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKzAwIDAwICMgbWF0Y2gucGFkCisKKworMDAgMWMgIyBzdGF0cy5sZW5ndGgKKzgwIDAyIDAwIDA4ICMgc3RhdHMub3hzX2xpc3RbMF0udHlwZV9sZW4gLSBEVVJBVElPTgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDQgIyBzdGF0cy5veHNfbGlzdFswXS52YWx1ZQorODAgMDIgMDIgMDggIyBzdGF0cy5veHNfbGlzdFsxXS50eXBlX2xlbiAtIElETEVfVElNRSAoODAwMiAtPiBPcGVuZmxvd19iYXNpYyBveHMgY2xhc3MgYW5kIDAyIC0+IDAwMDAgMDAxMCAtPiBveHNfZmllbGQgd2lkdGggNywgb3hzX3Jlc2VydmVkIHdpZHRoIDEgYW5kIDA4IGlzIGxlbmd0aCkKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDA2ICMgc3RhdHMub3hzX2xpc3RbMV0udmFsdWUKKzAwIDAwIDAwIDAwICMgc3RhdHMucGFkCisKKzAwIDAxICMgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUKKzAwIDA4ICMgaW5zdHJ1Y3Rpb25zWzBdLmxlbmd0aAorMDQgIyBpbnN0cnVjdGlvbnNbMF0udGFibGVfaWQKKzAwIDAwIDAwICMgcGFkCisKKzAwIDAxICMgaW5zdHJ1Y3Rpb25zWzFdLnR5cGUKKzAwIDA4ICMgaW5zdHJ1Y3Rpb25zWzFdLmxlbmd0aAorMDcgIyBpbnN0cnVjdGlvbnNbMV0udGFibGVfaWQKKzAwIDAwIDAwICMgcGFkCisKKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXBseUZsYWdzPm9mKE9GU3RhdHNSZXBseUZsYWdzLlJFUExZX01PUkUpKQorICAgICAgICAuc2V0RW50cmllcyhJbW11dGFibGVMaXN0LjxPRkZsb3dTdGF0c0VudHJ5Pm9mKAorICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5idWlsZEZsb3dTdGF0c0VudHJ5KCkuc2V0VGFibGVJZChUYWJsZUlkLm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRQcmlvcml0eSgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJZGxlVGltZW91dCgxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SGFyZFRpbWVvdXQoOTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZGbG93TW9kRmxhZ3M+b2YoT0ZGbG93TW9kRmxhZ3MuU0VORF9GTE9XX1JFTSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEltcG9ydGFuY2UoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29va2llKFU2NC5wYXJzZUhleCgiRkVEQ0JBOTg3NjU0MzIxMCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaChmYWN0b3J5LmJ1aWxkTWF0Y2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSU5fUE9SVCwgT0ZQb3J0Lm9mKDQpLCBPRlBvcnQub2YoNSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdGF0cyhmYWN0b3J5LmJ1aWxkU3RhdFY2KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE94c0ZpZWxkcyhPRk94c0xpc3Qub2YoZmFjdG9yeS5veHNzKCkuYnVpbGREdXJhdGlvbigpLnNldFZhbHVlKFU2NC5vZig0KSkuYnVpbGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcnkub3hzcygpLmJ1aWxkSWRsZVRpbWUoKS5zZXRWYWx1ZShVNjQub2YoNikpLmJ1aWxkKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SW5zdHJ1Y3Rpb25zKEltbXV0YWJsZUxpc3QuPE9GSW5zdHJ1Y3Rpb24+b2YoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5Lmluc3RydWN0aW9ucygpLmdvdG9UYWJsZShUYWJsZUlkLm9mKDQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaW5zdHJ1Y3Rpb25zKCkuZ290b1RhYmxlKFRhYmxlSWQub2YoNykpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSApKQorICAgICAgICAuYnVpbGQoKQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZmxvd19zdGF0c19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9mbG93X3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmRkNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZmxvd19zdGF0c19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSwzNCBAQAorLS0gYmluYXJ5CiswNiAxMiAjIHZlcnNpb24sIHR5cGUKKzAwIDQwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDEgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9GTE9XKF9ERVNDKSkKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCiswMSAjIHRhYmxlSWQKKzAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwNCAjIG91dF9wb3J0CiswMCAwMCAwMCAwMSAjIG91dF9ncm91cAorMDAgMDAgMDAgMDAgIyBwYWQKK2ZlIGRjIGJhIDk4IDc2IDU0IDMyIDEwICMgY29va2llCitmZiAwMCBmZiAwMCBmZiAwMCBmZiAwMCAjIGNvb2tpZV9tYXNrCiswMCAwMSAjIG1hdGNoLnR5cGUKKzAwIDEwICMgbWF0Y2gubGVuZ3RoCis4MCAwMCAwMSAwOCAjIG1hdGNoLm94bV9saXN0WzBdLnR5cGVfbGVuIC0gSU5fUE9SVAorMDAgMDAgMDAgMDQgIyBtYXRjaC5veG1fbGlzdFswXS52YWx1ZQorMDAgMDAgMDAgMDUgIyBtYXRjaC5veG1fbGlzdFswXS5tYXNrCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0VGFibGVJZChUYWJsZUlkLm9mKDEpKQorICAgICAgICAuc2V0T3V0UG9ydChPRlBvcnQub2YoNCkpCisgICAgICAgIC5zZXRPdXRHcm91cChPRkdyb3VwLm9mKDEpKQorICAgICAgICAuc2V0Q29va2llKFU2NC5wYXJzZUhleCgiRkVEQ0JBOTg3NjU0MzIxMCIpKQorICAgICAgICAuc2V0Q29va2llTWFzayhVNjQucGFyc2VIZXgoIkZGMDBGRjAwRkYwMEZGMDAiKSkKKyAgICAgICAgLnNldE1hdGNoKAorICAgICAgICBmYWN0b3J5LmJ1aWxkTWF0Y2goKQorICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklOX1BPUlQsIE9GUG9ydC5vZig0KSwgT0ZQb3J0Lm9mKDUpKQorICAgICAgICAgICAgLmJ1aWxkKCkpCisgICAgICAgIC5idWlsZCgpCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9nZXRfY29uZmlnX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9nZXRfY29uZmlnX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiNzQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2dldF9jb25maWdfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDA4ICMgdmVyc2lvbiwgdHlwZQorMDAgMGMgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMiAjIGZsYWdzCitmZiBmZiAjIG1pc3Nfc2VuZF9sZW4KKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhTZXRzLmltbXV0YWJsZUVudW1TZXQoT0ZDb25maWdGbGFncy5GUkFHX1JFQVNNKSkKKyAgICAgICAgLnNldE1pc3NTZW5kTGVuKDB4ZmZmZikKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9nZXRfY29uZmlnX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2dldF9jb25maWdfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjU0YjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9nZXRfY29uZmlnX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDYgQEAKKy0tYmluYXJ5CiswNiAwNyAjIHZlcnNpb24sIHR5cGUKKzAwIDA4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorLS1qYXZhCitidWlsZGVyLnNldFhpZCgweDEyMzQ1Njc4KS5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZ3JvdXBfYWRkLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9ncm91cF9hZGQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2QyNDcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfYWRkLmRhdGEKQEAgLTAsMCArMSw0NyBAQAorLS0gYmluYXJ5CiswNiAwZiAjIHZlcnNpb24sIHR5cGUKKzAwIDQwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDAgIyBjb21tYW5kIChPRlBHQ19BREQpCiswMSAjIHR5cGUgKE9GUEdUX1NFTEVDVCkKKzAwICMgcGFkCiswMCAwMCAwMCAwMSAjIGdyb3VwX2lkCiswMCAyOCAjIGJ1Y2tldF9hcnJheV9sZW4KKzAwIDAwICMgcGFkCitmZiBmZiBmZiAwMCAjIGNvbW1hbmRfYnVja2V0X2lkIChCVUNLRVRfTUFYKSAtLSBub3QgYXBwbGljYWJsZSB0byBPRlBHQ19BREQgY29tbWFuZCwgc28gY291bGQgYmUgYW55IHZhbHVlIHJlYWxseQorCiswMCAyOCAjIGxlbiBvZiB0aGlzIGJ1Y2tldCBpbmNsdWRpbmcgaGVhZGVyLCBwcm9wZXJ0aWVzLCBhbmQgYW55IGVuZCBwYWQKKzAwIDE4ICMgbGVuIG9mIHRoaXMgYnVja2V0J3MgYWN0aW9ucyBhcnJheQorZmYgZmYgZmYgZmQgIyBidWNrZXRfaWQgb2YgdGhpcyBidWNrZXQgKGZkID09IGZpcnN0IGJ1Y2tldCBpbiBsaXN0KQorCiswMCAwMCAjIG9mcF9hY3Rpb25bMF0udHlwZSAoT0ZQQVRfT1VUUFVUKQorMDAgMTAgIyBvZnBfYWN0aW9uWzBdLmxlbgorMDAgMDAgMDAgMDEgIyBwb3J0CiswMCAwMyAjIG1heF9sZW4KKzAwIDAwIDAwIDAwIDAwIDAwICMgcGFkCisKKzAwIDE2ICMgb2ZfYWN0aW9uWzFdLnR5cGUgKE9GUEFUX0dST1VQKQorMDAgMDggIyBvZl9hY3Rpb25bMV0ubGVuZ3RoCiswMCAwMCAwMCAwMSAjIGdyb3VwX2lkCisKKzAwIDAwICMgZ3JvdXAgYnVja2V0IHByb3BlcnR5IGhlYWRlciBwcm9wX3R5cGUgPT0gU0VMRUNUCiswMCAwOCAjIGxlbmd0aCBvZiBTRUxFQ1QgcHJvcF90eXBlCiswMCAwMCAjIGRlZmF1bHQgd2VpZ2h0IG9mIFNFTEVDVCBncm91cAorMDAgMDAgIyBwYWQgdG8gOCBieXRlcworCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEdyb3VwVHlwZShPRkdyb3VwVHlwZS5TRUxFQ1QpCisgICAgICAgIC5zZXRHcm91cChPRkdyb3VwLm9mKDEpKQorICAgICAgICAuc2V0Q29tbWFuZEJ1Y2tldElkKE9GR3JvdXBCdWNrZXQuQlVDS0VUX01BWCkKKyAgICAgICAgLnNldEJ1Y2tldHMoSW1tdXRhYmxlTGlzdC48T0ZCdWNrZXQ+b2YoZmFjdG9yeS5idWlsZEJ1Y2tldCgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRCdWNrZXRJZChPRkdyb3VwQnVja2V0LkJVQ0tFVF9GSVJTVCkKKyAgICAgICAgICAgICAgICAgICAgLnNldEFjdGlvbnMoSW1tdXRhYmxlTGlzdC48T0ZBY3Rpb24+b2YoCisgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmFjdGlvbnMoKS5vdXRwdXQoT0ZQb3J0Lm9mKDEpLDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5hY3Rpb25zKCkuZ3JvdXAoT0ZHcm91cC5vZigxKSkpKQorICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRkdyb3VwQnVja2V0UHJvcD5vZihmYWN0b3J5LmJ1aWxkR3JvdXBCdWNrZXRQcm9wV2VpZ2h0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRXZWlnaHQoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKQorCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9ncm91cF9kZXNjX3N0YXRzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9ncm91cF9kZXNjX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxZjEyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2dyb3VwX2Rlc2Nfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDQ2IEBACistLSBiaW5hcnkKKzA2IDEzICMgdmVyc2lvbiwgdHlwZQorMDAgNDAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwNyAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0dST1VQX0RFU0MpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCisKKzAwIDMwICMgbGVuZ3RoCiswMCAjIHR5cGUKKzAwICMgcGFkCiswMCAwMCAwMCAwMSAjIGdyb3VwX2lkCiswMCAyMCAjIGJ1Y2tldF9hcnJheV9sZW4KKzAwIDAwIDAwIDAwIDAwIDAwICMgcGFkCisKKzAwIDIwICMgYnVja2V0X2xlbgorMDAgMTggIyBhY3Rpb25fYXJyYXlfbGVuCitmZiBmZiBmZiBmZCAjIGJ1Y2tldF9pZAorCiswMCAwMCAjIG9mcF9hY3Rpb25bMF0udHlwZSAoT0ZQQVRfT1VUUFVUKQorMDAgMTAgIyBvZnBfYWN0aW9uWzBdLmxlbmd0aAorMDAgMDAgMDAgMDEgIyBwb3J0CiswMCAwMyAjIG1heF9sZW4KKzAwIDAwIDAwIDAwIDAwIDAwICMgcGFkCisKKzAwIDE2ICMgb2ZwX2FjdGlvblswXS50eXBlIChPRlBBVF9HUk9VUCkKKzAwIDA4ICMgb2ZwX2FjdGlvblswXS5sZW5ndGgKKzAwIDAwIDAwIDAxICMgZ3JvdXBfaWQKKworIyBubyBncm91cF9idWNrZXRfcHJvcGVydGllcyBhZnRlciB0aGlzLCBzaW5jZSBpdCdzIGFuIEFMTCBncm91cAorCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcGx5RmxhZ3M+b2YoT0ZTdGF0c1JlcGx5RmxhZ3MuUkVQTFlfTU9SRSkpCisgICAgICAgIC5zZXRFbnRyaWVzKEltbXV0YWJsZUxpc3QuPE9GR3JvdXBEZXNjU3RhdHNFbnRyeT5vZihmYWN0b3J5LmJ1aWxkR3JvdXBEZXNjU3RhdHNFbnRyeSgpCisgICAgICAgICAgICAuc2V0R3JvdXBUeXBlKE9GR3JvdXBUeXBlLkFMTCkKKyAgICAgICAgICAgIC5zZXRHcm91cChPRkdyb3VwLm9mKDEpKQorICAgICAgICAgICAgLnNldEJ1Y2tldHMoSW1tdXRhYmxlTGlzdC48T0ZCdWNrZXQ+b2YoZmFjdG9yeS5idWlsZEJ1Y2tldCgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRCdWNrZXRJZChPRkdyb3VwQnVja2V0LkJVQ0tFVF9GSVJTVCkKKyAgICAgICAgICAgICAgICAgICAgLnNldEFjdGlvbnMoSW1tdXRhYmxlTGlzdC48T0ZBY3Rpb24+b2YoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuYWN0aW9ucygpLm91dHB1dChPRlBvcnQub2YoMSksMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuYWN0aW9ucygpLmdyb3VwKE9GR3JvdXAub2YoMSkpKSkKKyAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKQorICAgICAgICAgICAgLmJ1aWxkKCkpKQorCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9ncm91cF9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2dyb3VwX2Rlc2Nfc3RhdHNfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjdmNzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9ncm91cF9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDE1IEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgMTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwNyAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0dST1VQX0RFU0MpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBncm91cF9pZAorMDAgMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0R3JvdXAoT0ZHcm91cC5vZigxKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9ncm91cF9mZWF0dXJlc19zdGF0c19yZXBseS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA1YzFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDMyIEBACistLSBiaW5hcnkKKzA2IDEzICMgdmVyc2lvbiwgdHlwZQorMDAgMzggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwOCAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0dST1VQX0ZFQVRVUkVTKQorMDAgMDEgIyBmbGFncyAoT0ZQTVBGX1JFUExZX01PUkUpCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDAgIyB0eXBlcyAoQUxMKQorMDAgMDAgMDAgMDQgIyBjYXBhYmlsaXRpZXMgKENIQUlOSU5HKQorMDAgMDAgMDAgMDUgIyBtYXhfZ3JvdXBzX2FsbAorMDAgMDAgMDAgMDAgIyBtYXhfZ3JvdXBzX3NlbGVjdAorMDAgMDAgMDAgMDAgIyBtYXhfZ3JvdXBzX2luZGlyZWN0CiswMCAwMCAwMCAwMCAjIG1heF9ncm91cHNfZmYKKzAwIDAwIDAwIDA4ICMgYWN0aW9uc19hbGwKKzAwIDAwIDAwIDAwICMgYWN0aW9uc19zZWxlY3QKKzAwIDAwIDAwIDAwICMgYWN0aW9uc19pbmRpcmVjdAorMDAgMDAgMDAgMDAgIyBhY3Rpb25zX2ZmCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcGx5RmxhZ3M+b2YoT0ZTdGF0c1JlcGx5RmxhZ3MuUkVQTFlfTU9SRSkpCisgICAgICAgIC5zZXRUeXBlcygwKQorICAgICAgICAuc2V0Q2FwYWJpbGl0aWVzKEltbXV0YWJsZVNldC48T0ZHcm91cENhcGFiaWxpdGllcz5vZihPRkdyb3VwQ2FwYWJpbGl0aWVzLkNIQUlOSU5HKSkKKyAgICAgICAgLnNldE1heEdyb3Vwc0FsbCg1KQorICAgICAgICAuc2V0TWF4R3JvdXBzU2VsZWN0KDApCisgICAgICAgIC5zZXRNYXhHcm91cHNJbmRpcmVjdCgwKQorICAgICAgICAuc2V0TWF4R3JvdXBzRmYoMCkKKyAgICAgICAgLnNldEFjdGlvbnNBbGwoOCkKKyAgICAgICAgLnNldEFjdGlvbnNTZWxlY3QoMCkKKyAgICAgICAgLnNldEFjdGlvbnNJbmRpcmVjdCgwKQorICAgICAgICAuc2V0QWN0aW9uc0ZmKDApCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVxdWVzdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Nzg1YjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9ncm91cF9mZWF0dXJlc19zdGF0c19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSwxMiBAQAorLS0gYmluYXJ5CiswNiAxMiAjIHZlcnNpb24sIHR5cGUKKzAwIDEwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDggIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9HUk9VUF9GRUFUVVJFUykKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9ncm91cF9zdGF0c19yZXBseS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmFlNmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDQwIEBACistLSBiaW5hcnkKKzA2IDEzICMgdmVyc2lvbiwgdHlwZQorMDAgNTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwNiAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX0dST1VQX1NUQVRTKQorMDAgMDEgIyBmbGFncyAoT0ZQTVBGX1JFUExZX01PUkUpCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgNDggIyBsZW5ndGgKKzAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIGdyb3VwX2lkCiswMCAwMCAwMCAwMSAjIHJlZl9jb3VudAorMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3ICMgcGFja2V0X2NvdW50CiswMCAwMCAwMCAwMCAwMCAwMCAwMCAxMiAjIGJ5dGVfY291bnQKKzAwIDAwIDAwIDAzICMgZHVyYXRpb25fc2VjCitiMiBkMCA1ZSAwMCAjIGR1cmF0aW9uX25zZWMKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3ICMgYnVja2V0X2NvdW50ZXJbMF0ucGFja2V0X2NvdW50CiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwYyAjIGJ1Y2tldF9jb3VudGVyWzBdLmJ5dGVfY291bnQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAzICMgYnVja2V0X2NvdW50ZXJbMV0ucGFja2V0X2NvdW50CiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwYSAjIGJ1Y2tldF9jb3VudGVyWzFdLmJ5dGVfY291bnQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZHcm91cFN0YXRzRW50cnk+b2YoZmFjdG9yeS5idWlsZEdyb3VwU3RhdHNFbnRyeSgpLnNldEdyb3VwKE9GR3JvdXAub2YoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UmVmQ291bnQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRQYWNrZXRDb3VudChVNjQub2YoNykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Qnl0ZUNvdW50KFU2NC5vZigxOCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb25TZWMoMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbk5zZWMoMzAwMDAwMDAwMEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0QnVja2V0U3RhdHMoSW1tdXRhYmxlTGlzdC48T0ZCdWNrZXRDb3VudGVyPm9mKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5idWlsZEJ1Y2tldENvdW50ZXIoKS5zZXRQYWNrZXRDb3VudChVNjQub2YoNykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEJ5dGVDb3VudChVNjQub2YoMTIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5idWlsZEJ1Y2tldENvdW50ZXIoKS5zZXRQYWNrZXRDb3VudChVNjQub2YoMykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEJ5dGVDb3VudChVNjQub2YoMTApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKSkKKworICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2dyb3VwX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2dyb3VwX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmIyMGRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvZ3JvdXBfc3RhdHNfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMTUgQEAKKy0tIGJpbmFyeQorMDYgMTIgIyB2ZXJzaW9uLCB0eXBlCiswMCAxOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDA2ICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfR1JPVVBfU1RBVFMpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBncm91cF9pZAorMDAgMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0R3JvdXAoT0ZHcm91cC5vZigxKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9oZWxsby5kYXRhIGIvdGVzdF9kYXRhL29mMTUvaGVsbG8uZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgyZWRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvaGVsbG8uZGF0YQpAQCAtMCwwICsxLDE5IEBACistLSBiaW5hcnkKKzA2IDAwICMgdmVyc2lvbiwgdHlwZQorMDAgMjAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMSAjIGVsZW1lbnRzWzBdLnR5cGUKKzAwIDBjICMgZWxlbWVudHNbMF0ubGVuZ3RoCiswMCAwMCAwMCAwMSAjIGVsZW1lbnRzWzBdLmJpdG1hcHNbMF0KKzAwIDAwIDAwIDAyICMgZWxlbWVudHNbMF0uYml0bWFwc1sxXQorMDAgMDEgIyBlbGVtZW50c1sxXS50eXBlCiswMCAwYyAjIGVsZW1lbnRzWzFdLmxlbmd0aAorMDAgMDAgMDAgMDMgIyBlbGVtZW50c1sxXS5iaXRtYXBzWzBdCiswMCAwMCAwMCAwNCAjIGVsZW1lbnRzWzFdLmJpdG1hcHNbMV0KKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRFbGVtZW50cyhJbW11dGFibGVMaXN0LjxPRkhlbGxvRWxlbT5vZigKKyAgICAgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkSGVsbG9FbGVtVmVyc2lvbmJpdG1hcCgpLnNldEJpdG1hcHMoSW1tdXRhYmxlTGlzdC48VTMyPm9mKFUzMi5vZigxKSxVMzIub2YoMikpKS5idWlsZCgpLAorICAgICAgICAgICAgICAgIGZhY3RvcnkuYnVpbGRIZWxsb0VsZW1WZXJzaW9uYml0bWFwKCkuc2V0Qml0bWFwcyhJbW11dGFibGVMaXN0LjxVMzI+b2YoVTMyLm9mKDMpLFUzMi5vZig0KSkpLmJ1aWxkKCkpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2hlbGxvX2VsZW1fdmVyc2lvbmJpdG1hcC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvaGVsbG9fZWxlbV92ZXJzaW9uYml0bWFwLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyZmVkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2hlbGxvX2VsZW1fdmVyc2lvbmJpdG1hcC5kYXRhCkBAIC0wLDAgKzEsNyBAQAorLS0gYmluYXJ5CiswMCAwMSAjIHR5cGUKKzAwIDBjICMgbGVuZ3RoCiswMSAyMyA0NSA2NyAjIGJpdG1hcHNbMF0KKzg5IGFiIGNkIGVmICMgYml0bWFwc1sxXQorLS1qYXZhCitidWlsZGVyLnNldEJpdG1hcHMoSW1tdXRhYmxlTGlzdC48VTMyPm9mKFUzMi5vZigweDAxMjM0NTY3KSxVMzIub2YoMHg4OWFiY2RlZikpKS5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvaGVsbG9fZmFpbGVkX2Vycm9yX21zZy5kYXRhIGIvdGVzdF9kYXRhL29mMTUvaGVsbG9fZmFpbGVkX2Vycm9yX21zZy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYzY2NTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9oZWxsb19mYWlsZWRfZXJyb3JfbXNnLmRhdGEKQEAgLTAsMCArMSwxMiBAQAorLS0gYmluYXJ5CiswNiAwMSAjIHZlcnNpb24gLyB0eXBlCiswMCAwZiAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAwICMgZXJyX3R5cGUKKzAwIDAwICMgY29kZQorNjEgNjIgNjMgIyBkYXRhCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldENvZGUoT0ZIZWxsb0ZhaWxlZENvZGUuSU5DT01QQVRJQkxFKQorICAgICAgICAuc2V0RGF0YShPRkVycm9yQ2F1c2VEYXRhLm9mKG5ldyBieXRlW10geyAweDYxLCAweDYyLCAweDYzIH0sIE9GVmVyc2lvbi5PRl8xNSkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX2FwcGx5X2FjdGlvbnMuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX2FwcGx5X2FjdGlvbnMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmMwMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvaW5zdHJ1Y3Rpb25fYXBwbHlfYWN0aW9ucy5kYXRhCkBAIC0wLDAgKzEsMTAgQEAKKy0tIGJpbmFyeQorMDAgMDQgIyB0eXBlCiswMCAxMCAjIGxlbmd0aAorMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDBjICMgYWN0aW9uc1swXS50eXBlIChPRlBBVF9DT1BZX1RUTF9JTikKKzAwIDA4ICMgYWN0aW9uc1swXS5sZW5ndGgKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitPRkFjdGlvbnMgYWN0aW9ucyA9IE9GRmFjdG9yaWVzLmdldEZhY3RvcnkoT0ZWZXJzaW9uLk9GXzE1KS5hY3Rpb25zKCk7CitidWlsZGVyLnNldEFjdGlvbnMoSW1tdXRhYmxlTGlzdC48T0ZBY3Rpb24+b2YoYWN0aW9ucy5jb3B5VHRsSW4oKSkpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvaW5zdHJ1Y3Rpb25fZ290b190YWJsZS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvaW5zdHJ1Y3Rpb25fZ290b190YWJsZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTZmYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9pbnN0cnVjdGlvbl9nb3RvX3RhYmxlLmRhdGEKQEAgLTAsMCArMSw3IEBACistLSBiaW5hcnkKKzAwIDAxICMgdHlwZQorMDAgMDggIyBsZW5ndGgKKzA1ICMgdGFibGVfaWQKKzAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyLnNldFRhYmxlSWQoVGFibGVJZC5vZig1KSkuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX3N0YXRfdHJpZ2dlci5kYXRhIGIvdGVzdF9kYXRhL29mMTUvaW5zdHJ1Y3Rpb25fc3RhdF90cmlnZ2VyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1N2I2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX3N0YXRfdHJpZ2dlci5kYXRhCkBAIC0wLDAgKzEsMTMgQEAKKy0tIGJpbmFyeQorMDAgMDcgIyB0eXBlCiswMCAyMCAjIGxlbmd0aAorMDAgMDAgMDAgMDEgIyBmbGFncyAoT0ZQU1RGX1BFUklPRElDKQorODAgMDIgMDAgMDggIyBzdGF0cy5veHNfbGlzdFswXS50eXBlX2xlbiAtIERVUkFUSU9OCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNCAjIHN0YXRzLm94c19saXN0WzBdLnZhbHVlCis4MCAwMiAwMiAwOCAjIHN0YXRzLm94c19saXN0WzFdLnR5cGVfbGVuIC0gSURMRV9USU1FICgwMiAtPiAwMDAwIDAwMTAgLT4gb3hzX2ZpZWxkIHdpZHRoIDcsIG94c19yZXNlcnZlZCB3aWR0aCAxKQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDYgIyBzdGF0cy5veHNfbGlzdFsxXS52YWx1ZQorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRUcmlnZ2VyRmxhZ3M+b2YoT0ZTdGF0VHJpZ2dlckZsYWdzLlBFUklPRElDKSkKKyAgICAgICAgLnNldFRocmVzaG9sZHMoT0ZPeHNMaXN0Lm9mKE9GRmFjdG9yaWVzLmdldEZhY3RvcnkoT0ZWZXJzaW9uLk9GXzE1KS5veHNzKCkuYnVpbGREdXJhdGlvbigpLnNldFZhbHVlKFU2NC5vZig0KSkuYnVpbGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9GRmFjdG9yaWVzLmdldEZhY3RvcnkoT0ZWZXJzaW9uLk9GXzE1KS5veHNzKCkuYnVpbGRJZGxlVGltZSgpLnNldFZhbHVlKFU2NC5vZig2KSkuYnVpbGQoKSkpCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9pbnN0cnVjdGlvbl93cml0ZV9hY3Rpb25zLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9pbnN0cnVjdGlvbl93cml0ZV9hY3Rpb25zLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyOTBkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX3dyaXRlX2FjdGlvbnMuZGF0YQpAQCAtMCwwICsxLDEwIEBACistLSBiaW5hcnkKKzAwIDAzICMgdHlwZQorMDAgMTAgIyBsZW5ndGgKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwYiAjIGFjdGlvbnNbMF0udHlwZSAoT0ZQQVRfQ09QWV9UVExfT1VUKQorMDAgMDggIyBhY3Rpb25zWzBdLmxlbmd0aAorMDAgMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK09GQWN0aW9ucyBhY3Rpb25zID0gT0ZGYWN0b3JpZXMuZ2V0RmFjdG9yeShPRlZlcnNpb24uT0ZfMTUpLmFjdGlvbnMoKTsKK2J1aWxkZXIuc2V0QWN0aW9ucyhJbW11dGFibGVMaXN0LjxPRkFjdGlvbj5vZihhY3Rpb25zLmNvcHlUdGxPdXQoKSkpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvaW5zdHJ1Y3Rpb25fd3JpdGVfbWV0YWRhdGEuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX3dyaXRlX21ldGFkYXRhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkOWJjYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L2luc3RydWN0aW9uX3dyaXRlX21ldGFkYXRhLmRhdGEKQEAgLTAsMCArMSw4IEBACistLSBiaW5hcnkKKzAwIDAyICMgdHlwZQorMDAgMTggIyBsZW4KKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwYSBiYyAjIG1ldGFkYXRhCiswMCAwMCAwMCAwMCAwMCAwMCAwYSBiYyAjIG1ldGFkYXRhX21hc2sKKy0tIGphdmEKK2J1aWxkZXIuc2V0TWV0YWRhdGEoVTY0LnBhcnNlSGV4KCJhYmMiKSkuc2V0TWV0YWRhdGFNYXNrKFU2NC5wYXJzZUhleCgiYWJjIikpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvbWF0Y2hfdjMuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L21hdGNoX3YzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2MGE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L21hdGNoX3YzLmRhdGEKQEAgLTAsMCArMSwyNSBAQAorLS0gYmluYXJ5CiswMCAwMSAjIHR5cGUKKzAwIDNDICMgbGVuZ3RoCis4MCAwMCAjIG94bV9saXN0WzBdLmNsYXNzCiswNSAxMCAjIG94bV9saXN0WzBdLnR5cGVfbGVuIC0gTUVUQURBVEEKK0ZFIERDIEJBIDk4IDEyIDE0IDEyIDEwICMgb3htX2xpc3RbMF0udmFsdWUKK0ZGIEZGIEZGIEZGIDEyIDM0IDU2IDc4ICMgb3htX2xpc3RbMF0ubWFzaworODAgMDAgIyBveG1fbGlzdFsxXS5jbGFzcworMDggMDYgIyBveG1fbGlzdFsxXS50eXBlX2xlbiAtIEVUSF9TUkMKKzAxIDAyIDAzIDA0IDA1IDA2ICMgb3htX2xpc3RbMV0udmFsdWUKKzgwIDAwICMgb3htX2xpc3RbMl0uY2xhc3MKKzIwIDAyICMgb3htX2xpc3RbMl0udHlwZV9sZW4gLSBVRFBfRFNUCiswMCAzNSAjIG94bV9saXN0WzJdLnZhbHVlCis4MCAwMCAjIG94bV9saXN0WzNdLmNsYXNzCiszNiAxMCAjIG94bV9saXN0WzRdLnR5cGVfbGVuIC0gSVBWNl9EU1QKKzEyIDEyIDEyIDEyIDEyIDEyIDEyIDEyICMgb3htX2xpc3RbNF0udmFsdWUKKzEyIDEyIDEyIDEyIDEyIDEyIDEyIDEyICMgLi4uCiswMCAwMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuTUVUQURBVEEsIE9GTWV0YWRhdGEub2ZSYXcoMHhGRURDQkE5ODEyMTQxMjEwbCksIE9GTWV0YWRhdGEub2ZSYXcoMHhGRkZGRkZGRjEyMzQ1Njc4bCkpCisgICAgICAgIC5zZXRFeGFjdChNYXRjaEZpZWxkLkVUSF9TUkMsIE1hY0FkZHJlc3Mub2YobmV3IGJ5dGVbXSB7MSwyLDMsNCw1LDZ9KSkKKyAgICAgICAgLnNldEV4YWN0KE1hdGNoRmllbGQuVURQX0RTVCwgVHJhbnNwb3J0UG9ydC5vZig1MykpCisgICAgICAgIC5zZXRFeGFjdChNYXRjaEZpZWxkLklQVjZfRFNULCBJUHY2QWRkcmVzcy5vZihuZXcgYnl0ZVtdIHsgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIgfSkpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvbWV0ZXJfY29uZmlnX3N0YXRzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9tZXRlcl9jb25maWdfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE2MWRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvbWV0ZXJfY29uZmlnX3N0YXRzX3JlcGx5LmRhdGEKQEAgLTAsMCArMSwyOCBAQAorLS0gYmluYXJ5CiswNiAxMyAjIHZlcnNpb24sIHR5cGUKKzAwIDI4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMGEgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9NRVRFUl9ERVNDKQorMDAgMDEgIyBmbGFncyAoT0ZQTVBGX1JFUExZX01PUkUpCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMTggIyBsZW5ndGgKKzAwIDAxICMgZmxhZ3MgKE9GUE1GX0tCUFMpCiswMCAwMCAwMCAwMSAjIG1ldGVyX2lkCiswMCAwMSAjIG1ldGVyX2JhbmRbMF0udHlwZSAoT0ZQTUJUX0RST1ApCiswMCAxMCAjIG1ldGVyX2JhbmRbMF0ubGVuCiswMCAwMCAwMCAwMSAjIG1ldGVyX2JhbmRbMF0ucmF0ZQorMDAgMDAgMDAgMDIgIyBtZXRlcl9iYW5kWzBdLmJ1cnN0X3NpemUKKzAwIDAwIDAwIDAwICMgcGFkCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZNZXRlckNvbmZpZz5vZihmYWN0b3J5LmJ1aWxkTWV0ZXJDb25maWcoKS5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GTWV0ZXJGbGFncz5vZihPRk1ldGVyRmxhZ3MuS0JQUykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE1ldGVySWQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RW50cmllcyhJbW11dGFibGVMaXN0LjxPRk1ldGVyQmFuZD5vZihmYWN0b3J5Lm1ldGVyQmFuZHMoKS5idWlsZERyb3AoKS5zZXRSYXRlKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEJ1cnN0U2l6ZSgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpCisKKyAgICAgICAgLmJ1aWxkKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvbWV0ZXJfY29uZmlnX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX2NvbmZpZ19zdGF0c19yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwZTUzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX2NvbmZpZ19zdGF0c19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSwxNSBAQAorLS0gYmluYXJ5CiswNiAxMiAjIHZlcnNpb24sIHR5cGUKKzAwIDE4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMGEgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9NRVRFUl9ERVNDKQorMDAgMDEgIyBmbGFncworMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDAwIDAwIDAxICMgbWV0ZXJJZAorMDAgMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuc2V0TWV0ZXJJZCgxTCkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9tZXRlcl9mZWF0dXJlc19zdGF0c19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9tZXRlcl9mZWF0dXJlc19zdGF0c19yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExMWUzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDEyIEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgMTAgIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwYiAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX01FVEVSX0ZFQVRVUkVTKQorMDAgMDEgIyBmbGFncworMDAgMDAgMDAgMDAgIyBwYWQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVxdWVzdEZsYWdzPm9mKE9GU3RhdHNSZXF1ZXN0RmxhZ3MuUkVRX01PUkUpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L21ldGVyX21vZC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvbWV0ZXJfbW9kLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhMDc5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX21vZC5kYXRhCkBAIC0wLDAgKzEsMjAgQEAKKy0tIGJpbmFyeQorMDYgMWQgIyB2ZXJzaW9uLCB0eXBlCiswMCAyMCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAwICMgY29tbWFuZCAoT0ZQTUNfQUREKQorMDAgMDEgIyBmbGFncyAoT0ZQTUZfS0JQUykKKzAwIDAwIDAwIDAxICMgbWV0ZXJfaWQKKzAwIDAxICMgYmFuZHNbMF0udHlwZSAoT0ZQTUJUX0RST1ApCiswMCAxMCAjIGJhbmRzWzBdLmxlbmd0aAorMDAgMDAgMDAgMDEgIyBiYW5kc1swXS5yYXRlCiswMCAwMCAwMCAwMiAjIGJhbmRzWzBdLmJ1cnN0X3NpemUKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldENvbW1hbmQoT0ZNZXRlck1vZENvbW1hbmQuQUREKQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRk1ldGVyRmxhZ3M+b2YoT0ZNZXRlckZsYWdzLktCUFMpKQorICAgICAgICAuc2V0TWV0ZXJJZCgxKQorICAgICAgICAuc2V0QmFuZHMoSW1tdXRhYmxlTGlzdC48T0ZNZXRlckJhbmQ+b2YoZmFjdG9yeS5tZXRlckJhbmRzKCkuYnVpbGREcm9wKCkuc2V0UmF0ZSgxKS5zZXRCdXJzdFNpemUoMikuYnVpbGQoKSkpCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvbWV0ZXJfc3RhdHNfcmVwbHkuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjYzNkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX3N0YXRzX3JlcGx5LmRhdGEKQEAgLTAsMCArMSwzOSBAQAorLS1iaW5hcnkKKzA2IDEzICMgdmVyc2lvbiwgdHlwZQorMDAgNTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwOSAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX01FVEVSX0RFU0MpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIG1ldGVyX2lkCiswMCA0OCAjIGxlbgorMDAgMDAgMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDAwIDAwIDAxICMgcmVmX2NvdW50CiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwYSAjIHBhY2tldF9pbl9jb3VudAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMGEgIyBieXRlX2luX2NvdW50CiswMCAwMCAwMCAwMyAjIGR1cmF0aW9uX3NlYworYjIgZDAgNWUgMDAgIyBkdXJhdGlvbl9uc2VjCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwYSAjIGJhbmRfc3RhdHNbMF0ucGFja2V0X2JhbmRfY291bnQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDBiICMgYmFuZF9zdGF0c1swXS5ieXRlX2JhbmRfY291bnQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDBjICMgYmFuZF9zdGF0c1sxXS5wYWNrZXRfYmFuZF9jb3VudAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMGQgIyBiYW5kX3N0YXRzWzFdLmJ5dGVfYmFuZF9jb3VudAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXBseUZsYWdzPm9mKE9GU3RhdHNSZXBseUZsYWdzLlJFUExZX01PUkUpKQorICAgICAgICAuc2V0RW50cmllcyhJbW11dGFibGVMaXN0LjxPRk1ldGVyU3RhdHM+b2YoZmFjdG9yeS5idWlsZE1ldGVyU3RhdHMoKS5zZXRNZXRlcklkKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFJlZkNvdW50KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBhY2tldEluQ291bnQoVTY0Lm9mKDEwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Qnl0ZUluQ291bnQoVTY0Lm9mKDEwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb25TZWMoMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb25Oc2VjKDMwMDAwMDAwMDBMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRCYW5kU3RhdHMoSW1tdXRhYmxlTGlzdC48T0ZNZXRlckJhbmRTdGF0cz5vZihmYWN0b3J5LmJ1aWxkTWV0ZXJCYW5kU3RhdHMoKS5zZXRQYWNrZXRCYW5kQ291bnQoVTY0Lm9mKDEwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRCeXRlQmFuZENvdW50KFU2NC5vZigxMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmJ1aWxkTWV0ZXJCYW5kU3RhdHMoKS5zZXRQYWNrZXRCYW5kQ291bnQoVTY0Lm9mKDEyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRCeXRlQmFuZENvdW50KFU2NC5vZigxMykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKQorCisgICAgICAgIC5idWlsZCgpCisKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L21ldGVyX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L21ldGVyX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZmZTczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvbWV0ZXJfc3RhdHNfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMTUgQEAKKy0tIGJpbmFyeQorMDYgMTIgIyB2ZXJzaW9uLCB0eXBlCiswMCAxOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDA5ICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfTUVURVJfU1RBVFMpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBtZXRlcklkCiswMCAwMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXF1ZXN0RmxhZ3M+b2YoT0ZTdGF0c1JlcXVlc3RGbGFncy5SRVFfTU9SRSkpCisgICAgICAgIC5zZXRNZXRlcklkKDFMKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3BhY2tldF9pbi5kYXRhIGIvdGVzdF9kYXRhL29mMTUvcGFja2V0X2luLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0MTg1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3BhY2tldF9pbi5kYXRhCkBAIC0wLDAgKzEsMzMgQEAKKy0tYmluYXJ5CiswNiAwYSAjIHZlcnNpb24sIHR5cGUKKzAwIDM1ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDAgMDAgNjQgIyBidWZmZXJfaWQKKzQyIDY4ICMgdG90YWxfbGVuCiswMSAjIHJlYXNvbgorMTQgIyB0YWJsZV9pZAorZmUgZGMgYmEgOTggNzYgNTQgMzIgMTAgIyBjb29raWUKKzAwIDAxICMgbWF0Y2gudHlwZQorMDAgMTYgIyBtYXRjaC5sZW5ndGgKKzgwIDAwIDAxIDA4ICMgbWF0Y2gub3htX2xpc3RbMF0udHlwZV9sZW4gLSBJbnB1dCBQb3J0CiswMCAwMCAwMCAwNCAjIG1hdGNoLm94bV9saXN0WzBdLnZhbHVlCiswMCAwMCAwMCAwNSAjIG1hdGNoLm94bV9saXN0WzBdLm1hc2sKKzgwIDAwIDJBIDAyICMgbWF0Y2gub3htX2xpc3RbMV0udHlwZV9sZW4gLSBBUlAgT3BDb2RlCiswMCAwMSAjIG1hdGNoLm94bV9saXN0WzFdLnZhbHVlCiswMCAwMCAjIG1hdGNoLnBhZAorMDAgMDAgIyBwYWQKKzYxIDYyIDYzICMgZGF0YQorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRCdWZmZXJJZChPRkJ1ZmZlcklkLm9mKDEwMCkpCisgICAgICAgIC5zZXRUb3RhbExlbigxNzAwMCkKKyAgICAgICAgLnNldFJlYXNvbihPRlBhY2tldEluUmVhc29uLkFDVElPTikKKyAgICAgICAgLnNldFRhYmxlSWQoVGFibGVJZC5vZigyMCkpCisgICAgICAgIC5zZXRDb29raWUoVTY0LnBhcnNlSGV4KCJGRURDQkE5ODc2NTQzMjEwIikpCisgICAgICAgIC5zZXRNYXRjaCgKKyAgICAgICAgICAgIGZhY3RvcnkuYnVpbGRNYXRjaFYzKCkKKyAgICAgICAgICAgICAgICAuc2V0TWFza2VkKE1hdGNoRmllbGQuSU5fUE9SVCwgT0ZQb3J0Lm9mKDQpLCBPRlBvcnQub2YoNSkpCisgICAgICAgICAgICAgICAgLnNldEV4YWN0KE1hdGNoRmllbGQuQVJQX09QLCBBcnBPcGNvZGUuUkVRVUVTVCkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgLnNldERhdGEobmV3IGJ5dGVbXSB7IDk3LCA5OCwgOTkgfSApOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3BhY2tldF9vdXQuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3BhY2tldF9vdXQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBiM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvcGFja2V0X291dC5kYXRhCkBAIC0wLDAgKzEsMzYgQEAKKy0tIGJpbmFyeQorMDYgMGQgIyB2ZXJzaW9uLCB0eXBlCiswMCA0MyAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAwIDAwIDY0ICMgYnVmZmVyX2lkCiswMCAxOCAjIGFjdGlvbnNfbGVuCiswMCAwMCAjIHBhZAorMDAgMDEgIyBtYXRjaC50eXBlCiswMCAxNiAjIG1hdGNoLmxlbmd0aAorODAgMDAgMDEgMDggIyBtYXRjaC5veG1fbGlzdFswXS50eXBlX2xlbiAtIElucHV0IFBvcnQKKzAwIDAwIDAwIDA0ICMgbWF0Y2gub3htX2xpc3RbMF0udmFsdWUKKzAwIDAwIDAwIDA1ICMgbWF0Y2gub3htX2xpc3RbMF0ubWFzaworODAgMDAgMkEgMDIgIyBtYXRjaC5veG1fbGlzdFsxXS50eXBlX2xlbiAtIEFSUCBPcENvZGUKKzAwIDAxICMgbWF0Y2gub3htX2xpc3RbMV0udmFsdWUKKzAwIDAwICMgbWF0Y2gucGFkCiswMCAwMCAjIGFjdGlvbnNbMF0udHlwZQorMDAgMTAgIyBhY3Rpb25zWzBdLmxlbmd0aAorMDAgMDAgMDAgMDIgIyBhY3Rpb25zWzBdLnBvcnQKK2ZmIGZmICMgYWN0aW9uc1swXS5tYXhfbGVuCiswMCAwMCAwMCAwMCAwMCAwMCAjIHBhZAorMDAgMTggIyBhY3Rpb25zWzFdLnR5cGUKKzAwIDA4ICMgYWN0aW9uc1sxXS5sZW5ndGgKKzAwIDAwIDAwIDAwICMgcGFkCis2MSA2MiA2MyAjIGRhdGEKKy0tamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRCdWZmZXJJZChPRkJ1ZmZlcklkLm9mKDEwMCkpCisgICAgICAgIC5zZXRNYXRjaCgKKyAgICAgICAgZmFjdG9yeS5idWlsZE1hdGNoVjMoKQorICAgICAgICAgICAgLnNldE1hc2tlZChNYXRjaEZpZWxkLklOX1BPUlQsIE9GUG9ydC5vZig0KSwgT0ZQb3J0Lm9mKDUpKQorICAgICAgICAgICAgLnNldEV4YWN0KE1hdGNoRmllbGQuQVJQX09QLCBBcnBPcGNvZGUuUkVRVUVTVCkKKyAgICAgICAgICAgIC5idWlsZCgpKQorICAgICAgICAuc2V0QWN0aW9ucyhBcnJheXMuYXNMaXN0KG5ldyBPRkFjdGlvbltdIHtmYWN0b3J5LmFjdGlvbnMoKS5idWlsZE91dHB1dCgpLnNldFBvcnQoT0ZQb3J0Lm9mKDIpKS5zZXRNYXhMZW4oNjU1MzUpLmJ1aWxkKCksIGZhY3RvcnkuYWN0aW9ucygpLmRlY053VHRsKCl9KSkKKyAgICAgICAgLnNldERhdGEobmV3IGJ5dGVbXSB7OTcsOTgsOTl9KQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3BvcnRfZGVzY19zdGF0c19yZXBseS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvcG9ydF9kZXNjX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTM1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3BvcnRfZGVzY19zdGF0c19yZXBseS5kYXRhCkBAIC0wLDAgKzEsNDMgQEAKKy0tYmluYXJ5CiswNiAxMyAjIHZlcnNpb24sIHR5cGUKKzAwIDU4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMGQgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9QT1JUX0RFU0MpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIHBvcnRbMF0ucG9ydF9ubworMDAgNDggIyBwb3J0WzBdLmxlbmd0aAorMDAgMDAgIyBwYWQKKzAwIDAxIDAyIDAzIDA0IDA1ICMgcG9ydFswXS5od19kZXNjIFsyNTZdCiswMCAwMCAjIHBhZAorNTAgNmYgNzIgNzQgMzEgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIyBuYW1lCiswMCAwMCAwMCAwMSAjIGNvbmZpZyAoT0ZQUENfUE9SVF9ET1dOKQorMDAgMDAgMDAgMDQgIyBzdGF0ZSAoT0ZQUFNfTElWRSkKKzAwIDAwICMgcHJvcGVydGllc1swXS50eXBlIChPRlBQRFBUX0VUSEVSTkVUKQorMDAgMjAgIyBwcm9wZXJ0aWVzWzBdLmxlbmd0aAorMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDAwIDAwIDAxICMgY3VycgorMDAgMDAgMDAgMDIgIyBhZHZlcnRpc2VkCiswMCAwMCAwMCAwMyAjIHN1cHBvcnRlZAorMDAgMDAgMDAgMDQgIyBwZWVyCiswMCAwMCAwMCAwNSAjIGN1cnJfc3BlZWQKKzAwIDAwIDAwIDA2ICMgbWF4X3NwZWVkCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZQb3J0RGVzYz5vZihmYWN0b3J5LmJ1aWxkUG9ydERlc2MoKS5zZXRQb3J0Tm8oT0ZQb3J0Lm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SHdBZGRyKE1hY0FkZHJlc3Mub2YoIjAwOjAxOjAyOjAzOjA0OjA1IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKCJQb3J0MSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb25maWcoSW1tdXRhYmxlU2V0LjxPRlBvcnRDb25maWc+b2YoT0ZQb3J0Q29uZmlnLlBPUlRfRE9XTikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdGF0ZShJbW11dGFibGVTZXQuPE9GUG9ydFN0YXRlPm9mKE9GUG9ydFN0YXRlLkxJVkUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRlBvcnREZXNjUHJvcD5vZihmYWN0b3J5LmJ1aWxkUG9ydERlc2NQcm9wRXRoZXJuZXQoKS5zZXRDdXJyKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRBZHZlcnRpc2VkKDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdXBwb3J0ZWQoMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBlZXIoNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEN1cnJTcGVlZCg1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF4U3BlZWQoNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkuYnVpbGQoKSkpCisgICAgICAgIC5idWlsZCgpOwpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvcG9ydF9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3BvcnRfZGVzY19zdGF0c19yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkZWUwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3BvcnRfZGVzY19zdGF0c19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSwxNSBAQAorLS0gYmluYXJ5CiswNiAxMiAjIHZlcnNpb24sIHR5cGUKKzAwIDE4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMGQgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9QT1JUX0RFU0MpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBwb3J0X25vCiswMCAwMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXF1ZXN0RmxhZ3M+b2YoT0ZTdGF0c1JlcXVlc3RGbGFncy5SRVFfTU9SRSkpCisgICAgICAgIC5zZXRQb3J0Tm8oT0ZQb3J0Lm9mKDEpKQorICAgICAgICAuYnVpbGQoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9wb3J0X21vZC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvcG9ydF9tb2QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzkzODAwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvcG9ydF9tb2QuZGF0YQpAQCAtMCwwICsxLDIzIEBACistLSBiaW5hcnkKKzA2IDEwICMgdmVyc2lvbiwgdHlwZQorMDAgMjggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMCAwMCAwMSAjIHBvcnRfbm8KKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMSAwMiAwMyAwNCAwNSAjIGh3X2FkZHIKKzAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIGNvbmZpZyAoT0ZQUENfUE9SVF9ET1dOKQorMDAgMDAgMDAgMDEgIyBtYXNrIChPRlBQQ19QT1JUX0RPV04pCiswMCAwMCAjIHByb3BlcnRpZXNbMF0udHlwZSAoT0ZQUE1QVF9FVEhFUk5FVCkKKzAwIDA4ICMgcHJvcGVydGllc1swXS5sZW5ndGgKKzAwIDAwIDAwIDAxICMgcHJvcGVydGllc1swXS5hZHZlcnRpc2UgKE9GUFBGXzEwTUJfSEQpCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldFBvcnRObyhPRlBvcnQub2YoMSkpCisgICAgICAgIC5zZXRId0FkZHIoTWFjQWRkcmVzcy5vZigiMDA6MDE6MDI6MDM6MDQ6MDUiKSkKKyAgICAgICAgLnNldENvbmZpZyhJbW11dGFibGVTZXQuPE9GUG9ydENvbmZpZz5vZihPRlBvcnRDb25maWcuUE9SVF9ET1dOKSkKKyAgICAgICAgLnNldE1hc2soSW1tdXRhYmxlU2V0LjxPRlBvcnRDb25maWc+b2YoT0ZQb3J0Q29uZmlnLlBPUlRfRE9XTikpCisgICAgICAgIC5zZXRQcm9wZXJ0aWVzKEltbXV0YWJsZUxpc3QuPE9GUG9ydE1vZFByb3A+b2YoZmFjdG9yeS5idWlsZFBvcnRNb2RQcm9wRXRoZXJuZXQoKS5zZXRBZHZlcnRpc2UoSW1tdXRhYmxlU2V0LjxPRlBvcnRGZWF0dXJlcz5vZihPRlBvcnRGZWF0dXJlcy5QRl8xME1CX0hEKSkuYnVpbGQoKSkpCisgICAgICAgIC5idWlsZCgpCisKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3BvcnRfc3RhdHNfcmVwbHkuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3BvcnRfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDdhNGJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvcG9ydF9zdGF0c19yZXBseS5kYXRhCkBAIC0wLDAgKzEsNTIgQEAKKy0tYmluYXJ5CiswNiAxMyAjIHZlcnNpb24sIHR5cGUKKzAwIDg4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDQgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9QT1JUX1NUQVRTKQorMDAgMDEgIyBmbGFncyAoT0ZQTVBGX1JFUExZX01PUkUpCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgNzggIyBsZW5ndGgKKzAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIHBvcnRfbm8KKzAwIDAwIDAwIDAzICMgZHVyYXRpb25fc2VjCitiMiBkMCA1ZSAwMCAjIGR1cmF0aW9uX25zZWMKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDBhICMgcnhfcGFja2V0cworMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgIyB0eF9wYWNrZXRzCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwYSAjIHJ4X2J5dGVzCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNyAjIHR4X2J5dGVzCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMiAjIHJ4X2Ryb3BwZWQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICMgdHhfZHJvcHBlZAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDEgIyByeF9lcnJvcnMKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICMgdHhfZXJyb3JzCiswMCAwMCAjIHByb3BlcnRpZXNbMF0udHlwZSAoT0ZQUFNQVF9FVEhFUk5FVCkKKzAwIDI4ICMgcHJvcGVydGllc1swXS5sZW5ndGgKKzAwIDAwIDAwIDAwICMgcHJvcGVydGllc1swXS5wYWQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDFhICMgcHJvcGVydGllc1swXS5yeF9mcmFtZV9lcnIKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDFiICMgcHJvcGVydGllc1swXS5yeF9vdmVyX2VycgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMWMgIyBwcm9wZXJ0aWVzWzBdLnJ4X2NyY19lcnIKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDFkICMgcHJvcGVydGllc1swXS5jb2xsaXNpb25zCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZQb3J0U3RhdHNFbnRyeT5vZihmYWN0b3J5LmJ1aWxkUG9ydFN0YXRzRW50cnkoKS5zZXRQb3J0Tm8oT0ZQb3J0Lm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uU2VjKDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb25Oc2VjKDMwMDAwMDAwMDBMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFJ4UGFja2V0cyhVNjQub2YoMTApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFR4UGFja2V0cyhVNjQub2YoNykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UnhCeXRlcyhVNjQub2YoMTApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFR4Qnl0ZXMoVTY0Lm9mKDcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFJ4RHJvcHBlZChVNjQub2YoMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VHhEcm9wcGVkKFU2NC5vZigxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRSeEVycm9ycyhVNjQub2YoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VHhFcnJvcnMoVTY0Lm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZQb3J0U3RhdHNQcm9wPm9mKGZhY3RvcnkuYnVpbGRQb3J0U3RhdHNQcm9wRXRoZXJuZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UnhGcmFtZUVycihVNjQub2YoMjYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UnhPdmVyRXJyKFU2NC5vZigyNykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRSeENyY0VycihVNjQub2YoMjgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29sbGlzaW9ucyhVNjQub2YoMjkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpCisKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9wb3J0X3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3BvcnRfc3RhdHNfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGEwODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9wb3J0X3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDE1IEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgMTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwNCAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX1BPUlRfU1RBVFMpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBwb3J0X25vCiswMCAwMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXF1ZXN0RmxhZ3M+b2YoT0ZTdGF0c1JlcXVlc3RGbGFncy5SRVFfTU9SRSkpCisgICAgICAgIC5zZXRQb3J0Tm8oT0ZQb3J0Lm9mKDEpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3BvcnRfc3RhdHVzLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9wb3J0X3N0YXR1cy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjQxMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9wb3J0X3N0YXR1cy5kYXRhCkBAIC0wLDAgKzEsNDMgQEAKKy0tYmluYXJ5CiswNiAwYyAjIHZlcnNpb24sIHR5cGUKKzAwIDU4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgIyByZWFzb24KKzAwIDAwIDAwIDAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwNCAjIHBvcnRfbm8KKzAwIDQ4ICMgbGVuZ3RoCiswMCAwMCAjIHBhZAorMDAgMDAgMDAgMTIgMzQgNTYgIyBod19hZGRyCiswMCAwMCAjIHBhZAorNjEgNjIgNjMgMDAgMDAgMDAgMDAgMDAgIyBuYW1lCiswMCAwMCAwMCAwMCAjIGNvbmZpZworMDAgMDAgMDAgMDAgIyBzdGF0ZQorMDAgMDAgMDAgMDEgIyBwb3J0X2Rlc2NfcHJvcF9oZWFkZXIgLSB0eXBlLCBsZW5ndGgKKzAwIDAwIDAwIDAxICMgcHJvcGVydGllc1swXS50eXBlCiswMCAwMCAwMCAyMCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXMucGFkCiswMCAwMCAwMCAwMSAjIHByb3BlcnRpZXNbMF0uY3VycgorMDAgMDAgMDAgMDIgIyBwcm9wZXJ0aWVzWzBdLmFkdmVydGlzZWQKKzAwIDAwIDAwIDA0ICMgcHJvcGVydGllc1swXS5zdXBwb3J0ZWQKKzAwIDAwIDAwIDA4ICMgcHJvcGVydGllc1swXS5wZWVyCiswMCAwMCAwMCAwYSAjIHByb3BlcnRpZXNbMF0uY3Vycl9zcGVlZAorMDAgMDAgMDAgMGUgIyBwcm9wZXJ0aWVzWzBdLm1heF9zcGVlZAorCistLWphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0UmVhc29uKE9GUG9ydFJlYXNvbi5BREQpCisgICAgICAgIC5zZXREZXNjKGZhY3RvcnkuYnVpbGRQb3J0RGVzYygpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UG9ydE5vKE9GUG9ydC5vZkludCg0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRId0FkZHIoTWFjQWRkcmVzcy5vZigweDEyMzQ1NikpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZSgiYWJjIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb25maWcoU2V0cy5pbW11dGFibGVFbnVtU2V0KE9GUG9ydENvbmZpZy5QT1JUX0RPV04pKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN0YXRlKFNldHMuaW1tdXRhYmxlRW51bVNldChPRlBvcnRTdGF0ZS5MSU5LX0RPV04pKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFByb3BlcnRpZXMoQXJyYXlzLmFzTGlzdChuZXcgT0ZQb3J0RGVzY1Byb3BbXSB7ZmFjdG9yeS5idWlsZFBvcnREZXNjUHJvcEV0aGVybmV0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDdXJyKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0QWR2ZXJ0aXNlZCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN1cHBvcnRlZCg0KQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBlZXIoOCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDdXJyU3BlZWQoMTApCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF4U3BlZWQoMTQpCisgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKX0pKS5idWlsZCgpKQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvcXVldWVfZGVzY19zdGF0c19yZXBseS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvcXVldWVfZGVzY19zdGF0c19yZXBseS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTlkMGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9xdWV1ZV9kZXNjX3N0YXRzX3JlcGx5LmRhdGEKQEAgLTAsMCArMSwyNiBAQAorLS1iaW5hcnkKKzA2IDEzICMgdmVyc2lvbiwgdHlwZQorMDAgMjggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwRiAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX1FVRVVFX0RFU0MpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwMSAjIHBvcnRfbm8KKzAwIDAwIDAwIDAxICMgcXVldWVfaWQKKzAwIDE4ICMgbGVuZ3RoCiswMCAwMCAwMCAwMCAwMCAwMCAjIHBhZAorMDAgMDEgIyBwcm9wZXJ0aWVzWzBdLnR5cGUgKE9GUFFEUFRfTUlOX1JBVEUpCiswMCAwOCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCAwMSAjIHJhdGUKKzAwIDAwICMgcGFkCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZRdWV1ZURlc2M+b2YoZmFjdG9yeS5idWlsZFF1ZXVlRGVzYygpLnNldFBvcnRObygxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFF1ZXVlSWQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0aWVzKEltbXV0YWJsZUxpc3QuPE9GUXVldWVEZXNjUHJvcD5vZihmYWN0b3J5LmJ1aWxkUXVldWVEZXNjUHJvcE1pblJhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UmF0ZSgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkpLmJ1aWxkKCkpKQorICAgICAgICAuYnVpbGQoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9xdWV1ZV9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3F1ZXVlX2Rlc2Nfc3RhdHNfcmVxdWVzdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzMzY2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9xdWV1ZV9kZXNjX3N0YXRzX3JlcXVlc3QuZGF0YQpAQCAtMCwwICsxLDE2IEBACistLSBiaW5hcnkKKzA2IDEyICMgdmVyc2lvbiwgdHlwZQorMDAgMTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwZiAjIG11bHRpcGFydCBtZXNzYWdlIHR5cGUgKE9GUE1QX1FVRVVFX0RFU0MpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBwb3J0X25vCiswMCAwMCAwMCAwMSAjIHF1ZXVlX2lkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLnNldFBvcnRObyhPRlBvcnQub2YoMSkpCisgICAgICAgIC5zZXRRdWV1ZUlkKDFMKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3F1ZXVlX3N0YXRzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9xdWV1ZV9zdGF0c19yZXBseS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyY2VkMjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS9xdWV1ZV9zdGF0c19yZXBseS5kYXRhCkBAIC0wLDAgKzEsMzggQEAKKy0tYmluYXJ5CiswNiAxMyAjIHZlcnNpb24sIHR5cGUKKzAwIDUwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDUgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9RVUVVRV9TVEFUUykKKzAwIDAxICMgZmxhZ3MgKE9GUE1QRl9SRVBMWV9NT1JFKQorMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDQwICMgbGVuZ3RoCiswMCAwMCAwMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBwb3J0X25vCiswMCAwMCAwMCAwMSAjIHF1ZXVlX2lkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwYSAjIHR4X2J5dGVzCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNyAjIHR4X3BhY2tldHMKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICMgdHhfZXJyb3JzCiswMCAwMCAwMCAwMyAjIGR1cmF0aW9uX3NlYworYjIgZDAgNWUgMDAgIyBkdXJhdGlvbl9uc2VjCitmZiBmZiAjIHByb3BlcnRpZXNbMF0udHlwZSAoT0ZQUVNQVF9FWFBFUklNRU5URVIpCiswMCAxMCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCA1YyAxNiBjNyAjIHByb3BlcnRpZXNbMF0uZXhwZXJpbWVudGVyCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF0uZXhwX3R5cGUKKzAwIDAwIDAwIDAyICMgcHJvcGVydGllc1swXS5leHBlcmltZW50ZXJfZGF0YQorCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcGx5RmxhZ3M+b2YoT0ZTdGF0c1JlcGx5RmxhZ3MuUkVQTFlfTU9SRSkpCisgICAgICAgIC5zZXRFbnRyaWVzKEltbXV0YWJsZUxpc3QuPE9GUXVldWVTdGF0c0VudHJ5Pm9mKGZhY3RvcnkuYnVpbGRRdWV1ZVN0YXRzRW50cnkoKS5zZXRQb3J0Tm8oT0ZQb3J0Lm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFF1ZXVlSWQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUeEJ5dGVzKFU2NC5vZigxMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VHhQYWNrZXRzKFU2NC5vZig3KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUeEVycm9ycyhVNjQub2YoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb25TZWMoMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbk5zZWMoMzAwMDAwMDAwMEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRlF1ZXVlU3RhdHNQcm9wPm9mKGZhY3RvcnkuYnVpbGRRdWV1ZVN0YXRzUHJvcEJzbigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RXhwZXJpbWVudGVyRGF0YShuZXcgYnl0ZVtdIHsweDAsIDB4MCwgMHgwLCAweDJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKS5idWlsZCgpKSkKKworICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3F1ZXVlX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3F1ZXVlX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ0NDlhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvcXVldWVfc3RhdHNfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMTYgQEAKKy0tIGJpbmFyeQorMDYgMTIgIyB2ZXJzaW9uLCB0eXBlCiswMCAxOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDA1ICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfUVVFVUVfU1RBVFMpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDEgIyBwb3J0X25vCiswMCAwMCAwMCAwMSAjIHF1ZXVlX2lkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLnNldFBvcnRObyhPRlBvcnQub2YoMSkpCisgICAgICAgIC5zZXRRdWV1ZUlkKDEpCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvcmVxdWVzdGZvcndhcmQuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3JlcXVlc3Rmb3J3YXJkLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjYWVhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3JlcXVlc3Rmb3J3YXJkLmRhdGEKQEAgLTAsMCArMSwyNCBAQAorLS0gYmluYXJ5CiswNiAyMCAjIHZlcnNpb24sIHR5cGUKKzAwIDI4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDYgMWQgIyB2ZXJzaW9uLCB0eXBlIChNRVRFUl9NT0QpCiswMCAyMCAjIGxlbmd0aAorMTEgMTEgMTEgMTEgIyB4aWQKKzAwIDAwICMgY29tbWFuZCAoT0ZQTUNfQUREKQorMDAgMDEgIyBmbGFncyAoT0ZQTUZfS0JQUykKKzAwIDAwIDAwIDAxICMgbWV0ZXJfaWQKKzAwIDAxICMgYmFuZHNbMF0udHlwZSAoT0ZQTUJUX0RST1ApCiswMCAxMCAjIGJhbmRzWzBdLmxlbmd0aAorMDAgMDAgMDAgMDEgIyBiYW5kc1swXS5yYXRlCiswMCAwMCAwMCAwMiAjIGJhbmRzWzBdLmJ1cnN0X3NpemUKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldFJlcXVlc3QoZmFjdG9yeS5idWlsZE1ldGVyTW9kKCkuc2V0WGlkKDB4MTExMTExMTEpLnNldENvbW1hbmQoT0ZNZXRlck1vZENvbW1hbmQuQUREKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZNZXRlckZsYWdzPm9mKE9GTWV0ZXJGbGFncy5LQlBTKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRNZXRlcklkKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0QmFuZHMoSW1tdXRhYmxlTGlzdC48T0ZNZXRlckJhbmQ+b2YoZmFjdG9yeS5tZXRlckJhbmRzKCkuYnVpbGREcm9wKCkuc2V0UmF0ZSgxKS5zZXRCdXJzdFNpemUoMikuYnVpbGQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS9yb2xlX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS9yb2xlX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4NjVmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3JvbGVfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDE1IEBACistLSBiaW5hcnkKKzA2IDE5ICMgdmVyc2lvbiwgdHlwZQorMDAgMTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMCAwMCAwMCAwMiAjIHJvbGUgKE9GUENSX1JPTEVfTUFTVEVSKQorMDAgMDEgIyBzaG9ydF9pZAorMDAgMDAgIyBwYWQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICMgZ2VuZXJhdGlvbl9pZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRSb2xlKE9GQ29udHJvbGxlclJvbGUuUk9MRV9NQVNURVIpCisgICAgICAgIC5zZXRTaG9ydElkKDEpCisgICAgICAgIC5zZXRHZW5lcmF0aW9uSWQoVTY0Lm9mKDEpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3JvbGVfcmVxdWVzdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvcm9sZV9yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkYzkyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3JvbGVfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMTUgQEAKKy0tIGJpbmFyeQorMDYgMTggIyB2ZXJzaW9uLCB0eXBlCiswMCAxOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAwIDAwIDAyICMgcm9sZSAoT0ZQQ1JfUk9MRV9NQVNURVIpCiswMCAwMSAjIHNob3J0X2lkCiswMCAwMCAjIHBhZAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDEgIyBnZW5lcmF0aW9uX2lkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldFJvbGUoT0ZDb250cm9sbGVyUm9sZS5ST0xFX01BU1RFUikKKyAgICAgICAgLnNldFNob3J0SWQoMSkKKyAgICAgICAgLnNldEdlbmVyYXRpb25JZChVNjQub2YoMSkpCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvcm9sZV9zdGF0dXMuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3JvbGVfc3RhdHVzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkNTE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3JvbGVfc3RhdHVzLmRhdGEKQEAgLTAsMCArMSwyMSBAQAorLS0gYmluYXJ5CiswNiAxZSAjIHZlcnNpb24sIHR5cGUKKzAwIDI4ICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMDAgMDAgMDMgIyByb2xlIChPRlBDUl9ST0xFX1NMQVZFKQorMDAgIyByZWFzb24gKE9GUENSUl9NQVNURVJfUkVRVUVTVCkKKzAwIDAwIDAwICMgcGFkCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAjIGdlbmVyYXRpb25faWQKK2ZmIGZmICMgcHJvcGVydGllc1swXS50eXBlIChPRlBSUFRfRVhQRVJJTUVOVEVSKQorMDAgMTAgIyBwcm9wZXJ0aWVzWzBdLmxlbmd0aAorMDAgNWMgMTYgYzcgIyBwcm9wZXJ0aWVzWzBdLmV4cGVyaW1lbnRlcgorMDAgMDAgMDAgMzcgIyBwcm9wZXJ0aWVzWzBdLmV4cF90eXBlCiswMCAwMCAwMCAwMCAjIHByb3BlcnRpZXNbMF1leHBfZGF0YQorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRSb2xlKE9GQ29udHJvbGxlclJvbGUuUk9MRV9TTEFWRSkKKyAgICAgICAgLnNldFJlYXNvbihPRkNvbnRyb2xsZXJSb2xlUmVhc29uLk1BU1RFUl9SRVFVRVNUKQorICAgICAgICAuc2V0R2VuZXJhdGlvbklkKFU2NC5vZigxKSkKKyAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZSb2xlUHJvcD5vZihmYWN0b3J5LmJ1aWxkUm9sZVByb3BCc24oKS5zZXRFeHBlcmltZW50ZXJEYXRhKG5ldyBieXRlW10gezB4MCwgMHgwLCAweDAsIDB4MH0pLmJ1aWxkKCkpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3NldF9jb25maWcuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3NldF9jb25maWcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA4YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvc2V0X2NvbmZpZy5kYXRhCkBAIC0wLDAgKzEsMTIgQEAKKy0tIGJpbmFyeQorMDYgMDkgIyB2ZXJzaW9uLCB0eXBlCiswMCAwYyAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAyICMgZmxhZ3MKK2ZmIGZmICMgbWlzc19zZW5kX2xlbgorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhTZXRzLmltbXV0YWJsZUVudW1TZXQoT0ZDb25maWdGbGFncy5GUkFHX1JFQVNNKSkKKyAgICAgICAgLnNldE1pc3NTZW5kTGVuKDB4ZmZmZikKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS90YWJsZV9kZXNjX3N0YXRzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS90YWJsZV9kZXNjX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmZDZiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX2Rlc2Nfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDI2IEBACistLWJpbmFyeQorMDYgMTMgIyB2ZXJzaW9uLCB0eXBlCiswMCAyMCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDBlICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfVEFCTEVfREVTQykKKzAwIDAxICMgZmxhZ3MgKE9GUE1QRl9SRVBMWV9NT1JFKQorMDAgMDAgMDAgMDAgIyBwYWQKKzAwIDEwICMgbGVuZ3RoCiswMCAjIHRhYmxlX2lkCiswMCAjIHBhZAorMDAgMDAgMDAgMDQgIyBjb25maWcgKE9GUFRDX0VWSUNUSU9OKQorMDAgMDIgIyBwcm9wZXJ0aWVzWzBdLnR5cGUgKE9GUFRNUFRfRVZJQ1RJT04pCiswMCAwOCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCAwMCAwMCAwMiAjIHByb3BlcnRpZXNbMF0uZmxhZ3MgKE9GUFRNUEVGX0lNUE9SVEFOQ0UpCisKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZUYWJsZURlc2M+b2YoZmFjdG9yeS5idWlsZFRhYmxlRGVzYygpLnNldFRhYmxlSWQoVGFibGVJZC5vZigwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb25maWcoSW1tdXRhYmxlU2V0LjxPRlRhYmxlQ29uZmlnPm9mKE9GVGFibGVDb25maWcuRVZJQ1RJT04pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZUYWJsZU1vZFByb3A+b2YoZmFjdG9yeS5idWlsZFRhYmxlTW9kUHJvcEV2aWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GVGFibGVNb2RQcm9wRXZpY3Rpb25GbGFnPm9mKE9GVGFibGVNb2RQcm9wRXZpY3Rpb25GbGFnLklNUE9SVEFOQ0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX2Rlc2Nfc3RhdHNfcmVxdWVzdC5kYXRhIGIvdGVzdF9kYXRhL29mMTUvdGFibGVfZGVzY19zdGF0c19yZXF1ZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2YjI5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX2Rlc2Nfc3RhdHNfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMTIgQEAKKy0tIGJpbmFyeQorMDYgMTIgIyB2ZXJzaW9uLCB0eXBlCiswMCAxMCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDBlICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfVEFCTEVfREVTQykKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS90YWJsZV9mZWF0dXJlX3N0YXRzX3JlcGx5LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS90YWJsZV9mZWF0dXJlX3N0YXRzX3JlcGx5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YzNlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX2ZlYXR1cmVfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDM1IEBACistLWJpbmFyeQorMDYgMTMgIyB2ZXJzaW9uLCB0eXBlCiswMCA1OCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDBjICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfVEFCTEVfRkVBVFVSRVMpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMCA0OCAjIGxlbmd0aAorMDEgIyB0YWJsZV9pZAorMDIgIyBjb21tYW5kIChPRlBURkNfRU5BQkxFKQorMDAgMDAgMDAgMDEgIyBmZWF0dXJlcyAoT0ZQVEZGX0lOR1JFU1NfVEFCTEUpCis2MSA2MiA2MyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAjIG5hbWUKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICMgbWV0YWRhdGFfbWF0Y2gKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICMgbWV0YWRhdGFfd3JpdGUKKzAwIDAwIDAwIDA4ICMgY2FwYWJpbGl0aWVzIChPRlBUQ19WQUNBTkNZX0VWRU5UUykKKzAwIDAwIDAwIDBhICMgbWF4X2VudHJpZXMKKzAwIDAxICMgcHJvcGVydGllc1swXS50eXBlIChPRlBURlBUX0lOU1RSVUNUSU9OU19NSVNTKQorMDAgMDggIyBwcm9wZXJ0aWVzWzBdLmxlbmd0aAorMDAgMDQgIyBpbnN0cnVjdGlvbl9pZFswXS50eXBlIChPRlBJVF9BUFBMWV9BQ1RJT05TKQorMDAgMDQgIyBpbnN0cnVjdGlvbl9pZFswXS5sZW4KKworLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXBseUZsYWdzPm9mKE9GU3RhdHNSZXBseUZsYWdzLlJFUExZX01PUkUpKQorICAgICAgICAuc2V0RW50cmllcyhJbW11dGFibGVMaXN0LjxPRlRhYmxlRmVhdHVyZXM+b2YoZmFjdG9yeS5idWlsZFRhYmxlRmVhdHVyZXMoKS5zZXRUYWJsZUlkKFRhYmxlSWQub2YoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb21tYW5kKE9GVGFibGVGZWF0dXJlc0NvbW1hbmQuRU5BQkxFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RmVhdHVyZXMoSW1tdXRhYmxlU2V0LjxPRlRhYmxlRmVhdHVyZUZsYWc+b2YoT0ZUYWJsZUZlYXR1cmVGbGFnLklOR1JFU1NfVEFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZSgiYWJjIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE1ldGFkYXRhTWF0Y2goVTY0Lm9mKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWV0YWRhdGFXcml0ZShVNjQub2YoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDYXBhYmlsaXRpZXMoSW1tdXRhYmxlU2V0LjxPRlRhYmxlQ29uZmlnPm9mKE9GVGFibGVDb25maWcuVkFDQU5DWV9FVkVOVFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF4RW50cmllcygxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFByb3BlcnRpZXMoSW1tdXRhYmxlTGlzdC48T0ZUYWJsZUZlYXR1cmVQcm9wPm9mKGZhY3RvcnkuYnVpbGRUYWJsZUZlYXR1cmVQcm9wSW5zdHJ1Y3Rpb25zTWlzcygpLnNldEluc3RydWN0aW9uSWRzKEltbXV0YWJsZUxpc3QuPE9GSW5zdHJ1Y3Rpb25JZD5vZihmYWN0b3J5Lmluc3RydWN0aW9uSWRzKCkuYXBwbHlBY3Rpb25zKCkpKS5idWlsZCgpKSkuYnVpbGQoKSkpCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvdGFibGVfZmVhdHVyZV9zdGF0c19yZXF1ZXN0LmRhdGEgYi90ZXN0X2RhdGEvb2YxNS90YWJsZV9mZWF0dXJlX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ1YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvdGFibGVfZmVhdHVyZV9zdGF0c19yZXF1ZXN0LmRhdGEKQEAgLTAsMCArMSwxMiBAQAorLS0gYmluYXJ5CiswNiAxMiAjIHZlcnNpb24sIHR5cGUKKzAwIDEwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDAgMGMgIyBtdWx0aXBhcnQgbWVzc2FnZSB0eXBlIChPRlBNUF9UQUJMRV9GRUFUVVJFUykKKzAwIDAxICMgZmxhZ3MKKzAwIDAwIDAwIDAwICMgcGFkCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldEZsYWdzKEltbXV0YWJsZVNldC48T0ZTdGF0c1JlcXVlc3RGbGFncz5vZihPRlN0YXRzUmVxdWVzdEZsYWdzLlJFUV9NT1JFKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS90YWJsZV9tb2QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX21vZC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjQ0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0X2RhdGEvb2YxNS90YWJsZV9tb2QuZGF0YQpAQCAtMCwwICsxLDE3IEBACistLSBiaW5hcnkKKzA2IDExICMgdmVyc2lvbiwgdHlwZQorMDAgMTggIyBsZW5ndGgKKzEyIDM0IDU2IDc4ICMgeGlkCiswMSAjIHRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMDQgIyBjb25maWcgKE9GUFRDX0VWSUNUSU9OKQorMDAgMDIgIyBwcm9wZXJ0aWVzWzBdLnR5cGUgKE9GUFRNUFRfRVZJQ1RJT04pCiswMCAwOCAjIHByb3BlcnRpZXNbMF0ubGVuZ3RoCiswMCAwMCAwMCAwMiAjIHByb3BlcnRpZXNbMF0uZmxhZ3MgKE9GUFRNUEVGX0lNUE9SVEFOQ0UpCistLSBqYXZhCitidWlsZGVyCisgICAgICAgIC5zZXRYaWQoMHgxMjM0NTY3OCkKKyAgICAgICAgLnNldFRhYmxlSWQoVGFibGVJZC5vZigxKSkKKyAgICAgICAgLnNldENvbmZpZyg0KQorICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRlRhYmxlTW9kUHJvcD5vZihmYWN0b3J5LmJ1aWxkVGFibGVNb2RQcm9wRXZpY3Rpb24oKS5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GVGFibGVNb2RQcm9wRXZpY3Rpb25GbGFnPm9mKE9GVGFibGVNb2RQcm9wRXZpY3Rpb25GbGFnLklNUE9SVEFOQ0UpKS5idWlsZCgpKSkKKyAgICAgICAgLmJ1aWxkKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0X2RhdGEvb2YxNS90YWJsZV9zdGF0c19yZXBseS5kYXRhIGIvdGVzdF9kYXRhL29mMTUvdGFibGVfc3RhdHNfcmVwbHkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTUwYjlhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvdGFibGVfc3RhdHNfcmVwbHkuZGF0YQpAQCAtMCwwICsxLDIzIEBACistLWJpbmFyeQorMDYgMTMgIyB2ZXJzaW9uLCB0eXBlCiswMCAyOCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAzICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfVEFCTEVfU1RBVFMpCiswMCAwMSAjIGZsYWdzIChPRlBNUEZfUkVQTFlfTU9SRSkKKzAwIDAwIDAwIDAwICMgcGFkCiswMSAjIHRhYmxlX2lkCiswMCAwMCAwMCAjIHBhZAorMDAgMDAgMDAgMGEgIyBhY3RpdmVfY291bnQKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3ICMgbG9va3VwX2NvdW50CiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwNSAjIG1hdGNoZWRfY291bnQKKy0tIGphdmEKK2J1aWxkZXIKKyAgICAgICAgLnNldFhpZCgweDEyMzQ1Njc4KQorICAgICAgICAuc2V0RmxhZ3MoSW1tdXRhYmxlU2V0LjxPRlN0YXRzUmVwbHlGbGFncz5vZihPRlN0YXRzUmVwbHlGbGFncy5SRVBMWV9NT1JFKSkKKyAgICAgICAgLnNldEVudHJpZXMoSW1tdXRhYmxlTGlzdC48T0ZUYWJsZVN0YXRzRW50cnk+b2YoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuYnVpbGRUYWJsZVN0YXRzRW50cnkoKS5zZXRUYWJsZUlkKFRhYmxlSWQub2YoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0QWN0aXZlQ291bnQoMTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TG9va3VwQ291bnQoVTY0LnBhcnNlSGV4KCI3IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlZENvdW50KFU2NC5wYXJzZUhleCgiNSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX3N0YXRzX3JlcXVlc3QuZGF0YSBiL3Rlc3RfZGF0YS9vZjE1L3RhYmxlX3N0YXRzX3JlcXVlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRhYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvdGFibGVfc3RhdHNfcmVxdWVzdC5kYXRhCkBAIC0wLDAgKzEsMTIgQEAKKy0tIGJpbmFyeQorMDYgMTIgIyB2ZXJzaW9uLCB0eXBlCiswMCAxMCAjIGxlbmd0aAorMTIgMzQgNTYgNzggIyB4aWQKKzAwIDAzICMgbXVsdGlwYXJ0IG1lc3NhZ2UgdHlwZSAoT0ZQTVBfVEFCTEVfU1RBVFMpCiswMCAwMSAjIGZsYWdzCiswMCAwMCAwMCAwMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRGbGFncyhJbW11dGFibGVTZXQuPE9GU3RhdHNSZXF1ZXN0RmxhZ3M+b2YoT0ZTdGF0c1JlcXVlc3RGbGFncy5SRVFfTU9SRSkpCisgICAgICAgIC5idWlsZCgpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdF9kYXRhL29mMTUvdGFibGVfc3RhdHVzLmRhdGEgYi90ZXN0X2RhdGEvb2YxNS90YWJsZV9zdGF0dXMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFhNTIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdF9kYXRhL29mMTUvdGFibGVfc3RhdHVzLmRhdGEKQEAgLTAsMCArMSwyNiBAQAorLS0gYmluYXJ5CiswNiAxZiAjIHZlcnNpb24sIHR5cGUKKzAwIDIwICMgbGVuZ3RoCisxMiAzNCA1NiA3OCAjIHhpZAorMDMgIyByZWFzb24gKE9GUFRSX1ZBQ0FOQ1lfRE9XTikKKzAwIDAwIDAwIDAwIDAwIDAwIDAwICMgcGFkCiswMCAxMCAjIHRhYmxlLmxlbmd0aAorMDEgIyB0YWJsZS50YWJsZV9pZAorMDAgIyB0YWJsZS5wYWQKKzAwIDAwIDAwIDA4ICMgdGFibGUuY29uZmlnIChPRlBUQ19WQUNBTkNZX0VWRU5UUykKKzAwIDAzICMgdGFibGUucHJvcGVydGllc1swXS50eXBlIChPRlBUTVBUX1ZBQ0FOQ1kpCiswMCAwOCAjIGxlbmd0aC5wcm9wZXJ0aWVzWzBdLmxlbmd0aAorMDMgIyB2YWNhbmN5X2Rvd24KKzA0ICMgdmFjYW5jeV91cAorMDUgIyB2YWNhbmN5CiswMCAjIHBhZAorLS0gamF2YQorYnVpbGRlcgorICAgICAgICAuc2V0WGlkKDB4MTIzNDU2NzgpCisgICAgICAgIC5zZXRSZWFzb24oT0ZUYWJsZVJlYXNvbi5WQUNBTkNZX0RPV04pCisgICAgICAgIC5zZXRUYWJsZShmYWN0b3J5LmJ1aWxkVGFibGVEZXNjKCkuc2V0VGFibGVJZChUYWJsZUlkLm9mKDEpKS5zZXRDb25maWcoSW1tdXRhYmxlU2V0LjxPRlRhYmxlQ29uZmlnPm9mKE9GVGFibGVDb25maWcuVkFDQU5DWV9FVkVOVFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydGllcyhJbW11dGFibGVMaXN0LjxPRlRhYmxlTW9kUHJvcD5vZihmYWN0b3J5LmJ1aWxkVGFibGVNb2RQcm9wVmFjYW5jeSgpLnNldFZhY2FuY3lEb3duKChzaG9ydCkzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWNhbmN5VXAoKHNob3J0KTQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFZhY2FuY3koKHNob3J0KTUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpKS5idWlsZCgpKQorICAgICAgICAuYnVpbGQoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3V0ZXN0L3Rlc3RfZnJvbnRlbmQucHkgYi91dGVzdC90ZXN0X2Zyb250ZW5kLnB5CmluZGV4IGNmYWRjMzkuLjAxZDU5ZjUgMTAwNzU1Ci0tLSBhL3V0ZXN0L3Rlc3RfZnJvbnRlbmQucHkKKysrIGIvdXRlc3QvdGVzdF9mcm9udGVuZC5weQpAQCAtMTk1LDUgKzE5NSw0NCBAQAogICAgICAgICBdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX2NsYXNzZXMsIG9maW5wdXQuY2xhc3NlcykKIAorICAgIGRlZiB0ZXN0X2ZpZWxkX2xlbmd0aChzZWxmKToKKyAgICAgICAgYXN0ID0gcGFyc2VyLnBhcnNlKCIiIgorI3ZlcnNpb24gMQorCitzdHJ1Y3Qgb2ZfdGVzdF9lbnRyeSB7CisgICAgdWludDMyX3QgeDsKK307CisKK3N0cnVjdCBvZl90ZXN0IHsKKyAgICB1aW50MTZfdCBsaXN0X2xlbiA9PSBsZW5ndGgobGlzdCk7CisgICAgbGlzdChvZl90ZXN0X2VudHJ5X3QpIGxpc3Q7Cit9OworIiIiKQorCisgICAgICAgICMgTm90IHRlc3RpbmcgdGhlIHBhcnNlciwganVzdCBtYWtpbmcgc3VyZSB0aGUgQVNUIGlzIHdoYXQgd2UgZXhwZWN0CisgICAgICAgIGV4cGVjdGVkX2FzdCA9IFsKKyAgICAgICAgICAgIFsnbWV0YWRhdGEnLCAndmVyc2lvbicsICcxJ10sCisKKyAgICAgICAgICAgIFsnc3RydWN0JywgJ29mX3Rlc3RfZW50cnknLCBbXSwgTm9uZSwgWworICAgICAgICAgICAgICAgIFsnZGF0YScsIFsnc2NhbGFyJywgJ3VpbnQzMl90J10sICd4J11dXSwKKworICAgICAgICAgICAgWydzdHJ1Y3QnLCAnb2ZfdGVzdCcsIFtdLCBOb25lLCBbCisgICAgICAgICAgICAgICAgWydmaWVsZF9sZW5ndGgnLCBbJ3NjYWxhcicsICd1aW50MTZfdCddLCAnbGlzdF9sZW4nLCAnbGlzdCddLAorICAgICAgICAgICAgICAgIFsnZGF0YScsIFsnbGlzdCcsICdsaXN0KG9mX3Rlc3RfZW50cnlfdCknXSwgJ2xpc3QnXV1dCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfYXN0LCBhc3QpCisKKyAgICAgICAgb2ZpbnB1dCA9IGZyb250ZW5kLmNyZWF0ZV9vZmlucHV0KCJzdGFuZGFyZC0xLjAiLCBhc3QpCisgICAgICAgIGV4cGVjdGVkX2NsYXNzZXMgPSBbCisgICAgICAgICAgICBPRkNsYXNzKG5hbWU9J29mX3Rlc3RfZW50cnknLCBzdXBlcmNsYXNzPU5vbmUsIHZpcnR1YWw9RmFsc2UsIHBhcmFtcz17fSwKKyAgICAgICAgICAgICAgICBtZW1iZXJzPVsKKyAgICAgICAgICAgICAgICAgICAgT0ZEYXRhTWVtYmVyKCd4JywgJ3VpbnQzMl90JyldKSwKKyAgICAgICAgICAgIE9GQ2xhc3MobmFtZT0nb2ZfdGVzdCcsIHN1cGVyY2xhc3M9Tm9uZSwgdmlydHVhbD1GYWxzZSwgcGFyYW1zPXt9LAorICAgICAgICAgICAgICAgIG1lbWJlcnM9WworICAgICAgICAgICAgICAgICAgICBPRkZpZWxkTGVuZ3RoTWVtYmVyKCdsaXN0X2xlbicsICd1aW50MTZfdCcsICdsaXN0JyksCisgICAgICAgICAgICAgICAgICAgIE9GRGF0YU1lbWJlcignbGlzdCcsICdsaXN0KG9mX3Rlc3RfZW50cnlfdCknKV0pCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfY2xhc3Nlcywgb2ZpbnB1dC5jbGFzc2VzKQorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdXRlc3QvdGVzdF9wYXJzZXIucHkgYi91dGVzdC90ZXN0X3BhcnNlci5weQppbmRleCA4YWNmZGRhLi4zYjlhZTI2IDEwMDc1NQotLS0gYS91dGVzdC90ZXN0X3BhcnNlci5weQorKysgYi91dGVzdC90ZXN0X3BhcnNlci5weQpAQCAtMTM5LDYgKzEzOSwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhc3QsCiAgICAgICAgICAgICBbWydzdHJ1Y3QnLCAnZm9vJywgW10sIE5vbmUsIFtbJ2Rpc2NyaW1pbmF0b3InLCBbJ3NjYWxhcicsICd1aW50MTZfdCddLCAnZm9vJ11dXV0pCiAKKyAgICBkZWYgdGVzdF9maWVsZF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNyYyA9ICIiIlwKK3N0cnVjdCBmb28geworICAgIHVpbnQxNl90IGxpc3RfbGVuID09IGxlbmd0aChsaXN0KTsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBsaXN0OworfTsKKyIiIgorICAgICAgICBhc3QgPSBwYXJzZXIucGFyc2Uoc3JjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhc3QsCisgICAgICAgICAgICBbWydzdHJ1Y3QnLCAnZm9vJywgW10sIE5vbmUsIFsKKyAgICAgICAgICAgICAgICBbJ2ZpZWxkX2xlbmd0aCcsIFsnc2NhbGFyJywgJ3VpbnQxNl90J10sICdsaXN0X2xlbicsICdsaXN0J10sCisgICAgICAgICAgICAgICAgWydkYXRhJywgWydsaXN0JywgJ2xpc3Qob2ZfdWludDMyX3QpJ10sICdsaXN0J11dXV0pCisKIGNsYXNzIEVudW1UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CiAgICAgICAgIHNyYyA9ICIiIlwKZGlmZiAtLWdpdCBhL3dpcmVzaGFya19nZW4vX19pbml0X18ucHkgYi93aXJlc2hhcmtfZ2VuL19faW5pdF9fLnB5CmluZGV4IDc1OTE4ZjguLmE4MmFjNDkgMTAwNjQ0Ci0tLSBhL3dpcmVzaGFya19nZW4vX19pbml0X18ucHkKKysrIGIvd2lyZXNoYXJrX2dlbi9fX2luaXRfXy5weQpAQCAtMzgsNyArMzgsNyBAQAogCiBEaXNzZWN0b3JGaWVsZCA9IG5hbWVkdHVwbGUoIkRpc3NlY3RvckZpZWxkIiwgWyJmdWxsbmFtZSIsICJuYW1lIiwgInR5cGUiLCAiYmFzZSIsICJlbnVtX3RhYmxlIl0pCiAKLXByb3RvX25hbWVzID0geyAxOiAnb2YxMCcsIDI6ICdvZjExJywgMzogJ29mMTInLCA0OiAnb2YxMycsIDU6ICdvZjE0JyB9Citwcm90b19uYW1lcyA9IHsgMTogJ29mMTAnLCAyOiAnb2YxMScsIDM6ICdvZjEyJywgNDogJ29mMTMnLCA1OiAnb2YxNCcgLCA2OiAnb2YxNScgfQogZGVmIG1ha2VfZmllbGRfbmFtZSh2ZXJzaW9uLCBvZmNsYXNzX25hbWUsIG1lbWJlcl9uYW1lKToKICAgICByZXR1cm4gIiVzLiVzLiVzIiAlIChwcm90b19uYW1lc1t2ZXJzaW9uLndpcmVfdmVyc2lvbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZjbGFzc19uYW1lWzM6XSwKZGlmZiAtLWdpdCBhL3dpcmVzaGFya19nZW4vZmllbGRfaW5mby5weSBiL3dpcmVzaGFya19nZW4vZmllbGRfaW5mby5weQppbmRleCA1OTk5MjhhLi5mMTgyNDhlIDEwMDY0NAotLS0gYS93aXJlc2hhcmtfZ2VuL2ZpZWxkX2luZm8ucHkKKysrIGIvd2lyZXNoYXJrX2dlbi9maWVsZF9pbmZvLnB5CkBAIC00NSwxNyArNDUsMjEgQEAKICAgICAib2Zfb2N0ZXRzX3QiOiAiYnl0ZXMiLAogICAgICJvZl9wb3J0X25vX3QiOiAidWludDMyIiwKICAgICAib2ZfcG9ydF9kZXNjX3QiOiAic3RyaW5neiIsCisgICAgIm9mX3RhYmxlX2Rlc2NfdCI6ICJzdHJpbmd6IiwKICAgICAib2ZfYnNuX3Zwb3J0X3QiOiAiYnl0ZXMiLAogICAgICJvZl9ic25fdnBvcnRfcV9pbl9xX3QiOiAiYnl0ZXMiLAogICAgICJvZl9mbV9jbWRfdCI6ICJ1aW50MTYiLAogICAgICJvZl93Y19ibWFwX3QiOiAidWludDY0IiwKICAgICAib2ZfbWF0Y2hfYm1hcF90IjogInVpbnQ2NCIsCiAgICAgIm9mX21hdGNoX3QiOiAiYnl0ZXMiLAorICAgICJvZl9zdGF0X3QiOiAiYnl0ZXMiLAogICAgICJvZl9veG1fdCI6ICJieXRlcyIsCisgICAgIm9mX294c190IjogImJ5dGVzIiwKICAgICAib2ZfbWV0ZXJfZmVhdHVyZXNfdCI6ICJieXRlcyIsCiAgICAgIm9mX2JpdG1hcF8xMjhfdCI6ICJieXRlcyIsCiAgICAgIm9mX2JpdG1hcF81MTJfdCI6ICJieXRlcyIsCiAgICAgIm9mX2NoZWNrc3VtXzEyOF90IjogImJ5dGVzIiwKKyAgICAib2ZfY29udHJvbGxlcl91cmlfdCI6InN0cmluZ3oiLAogfQogCiAjIE1hcCBmcm9tIExPWEkgdHlwZSB0byBXaXJlc2hhcmsgYmFzZQpAQCAtODQsNyArODgsOSBAQAogICAgICJvZl93Y19ibWFwX3QiOiAiSEVYIiwKICAgICAib2ZfbWF0Y2hfYm1hcF90IjogIkhFWCIsCiAgICAgIm9mX21hdGNoX3QiOiAiTk9ORSIsCisgICAgIm9mX3N0YXRfdCI6Ik5PTkUiLAogICAgICJvZl9veG1fdCI6ICJOT05FIiwKKyAgICAib2Zfb3hzX3QiIDogIk5PTkUiLAogICAgICJvZl9tZXRlcl9mZWF0dXJlc190IjogIk5PTkUiLAogICAgICJvZl9iaXRtYXBfMTI4X3QiOiAiTk9ORSIsCiAgICAgIm9mX2JpdG1hcF81MTJfdCI6ICJOT05FIiwKQEAgLTExOCw2ICsxMjQsNyBAQAogICAgICgnb2ZfZmxvd19hZGQnLCAndHlwZScpOiAnb2ZwX3R5cGUnLAogICAgICgnb2ZfcG9ydF9zdGF0dXMnLCAndHlwZScpOiAnb2ZwX3R5cGUnLAogICAgICgnb2ZfbWF0Y2hfdjMnLCAndHlwZScpOiAnb2ZwX21hdGNoX3R5cGUnLAorICAgICgnb2Zfc3RhdF92NicgLCAndHlwZScpOiAnb2ZwX3N0YXRfdHlwZScsCiAgICAgKCdvZl9hY3Rpb25fc2V0X253X3R0bCcsICd0eXBlJyk6ICdvZnBfYWN0aW9uX3R5cGUnLAogICAgICgnb2ZfYWN0aW9uX3NldF9maWVsZCcsICd0eXBlJyk6ICdvZnBfYWN0aW9uX3R5cGUnLAogICAgICgnb2ZfYWN0aW9uX291dHB1dCcsICd0eXBlJyk6ICdvZnBfYWN0aW9uX3R5cGUnLApkaWZmIC0tZ2l0IGEvd2lyZXNoYXJrX2dlbi90ZW1wbGF0ZXMvX29mY2xhc3NfZGlzc2VjdG9yLmx1YSBiL3dpcmVzaGFya19nZW4vdGVtcGxhdGVzL19vZmNsYXNzX2Rpc3NlY3Rvci5sdWEKaW5kZXggZDMyN2I0OS4uNmFlNmIxMiAxMDA2NDQKLS0tIGEvd2lyZXNoYXJrX2dlbi90ZW1wbGF0ZXMvX29mY2xhc3NfZGlzc2VjdG9yLmx1YQorKysgYi93aXJlc2hhcmtfZ2VuL3RlbXBsYXRlcy9fb2ZjbGFzc19kaXNzZWN0b3IubHVhCkBAIC00Myw3ICs0Myw3IEBACiA6OiBpZiBvZmNsYXNzLnZpcnR1YWw6CiAgICAgcmV0dXJuICR7b2ZjbGFzcy5uYW1lfV92JHt2ZXJzaW9uLndpcmVfdmVyc2lvbn1fZGlzc2VjdG9yc1tyZWFkZXIucGVlaygke29mY2xhc3MuZGlzY3JpbWluYXRvci5vZmZzZXR9LCR7b2ZjbGFzcy5kaXNjcmltaW5hdG9yLmxlbmd0aH0pOnVpbnQoKV0ocmVhZGVyLCBzdWJ0cmVlKQogOjogZWxzZToKLTo6IGlmIG5vdCBvZmNsYXNzLmlzX2ZpeGVkX2xlbmd0aDoKKzo6IGlmIG5vdCBvZmNsYXNzLmlzX2ZpeGVkX2xlbmd0aCBhbmQgb2ZjbGFzcy5sZW5ndGhfbWVtYmVyIGlzIG5vdCBOb25lOgogICAgIGxvY2FsIF9sZW5ndGggPSByZWFkZXIucGVlaygke29mY2xhc3MubGVuZ3RoX21lbWJlci5vZmZzZXR9LCAke29mY2xhc3MubGVuZ3RoX21lbWJlci5iYXNlX2xlbmd0aH0pOnVpbnQoKQogICAgIGxvY2FsIG9yaWdfcmVhZGVyID0gcmVhZGVyCiAgICAgcmVhZGVyID0gb3JpZ19yZWFkZXIuc2xpY2UoX2xlbmd0aCkKZGlmZiAtLWdpdCBhL3dpcmVzaGFya19nZW4vdGVtcGxhdGVzL19vZnR5cGVfcmVhZGVycy5sdWEgYi93aXJlc2hhcmtfZ2VuL3RlbXBsYXRlcy9fb2Z0eXBlX3JlYWRlcnMubHVhCmluZGV4IDcwMGIyMzYuLmU0MjQ3OWQgMTAwNjQ0Ci0tLSBhL3dpcmVzaGFya19nZW4vdGVtcGxhdGVzL19vZnR5cGVfcmVhZGVycy5sdWEKKysrIGIvd2lyZXNoYXJrX2dlbi90ZW1wbGF0ZXMvX29mdHlwZV9yZWFkZXJzLmx1YQpAQCAtNzgsMTEgKzc4LDMxIEBACiAgICAgICAgIGRpc3NlY3Rfb2ZfbWF0Y2hfdjNfdjQocmVhZGVyLCBzdWJ0cmVlOmFkZCgib2ZfbWF0Y2giKSkKICAgICBlbHNlaWYgdmVyc2lvbiA9PSA1IHRoZW4KICAgICAgICAgZGlzc2VjdF9vZl9tYXRjaF92M192NShyZWFkZXIsIHN1YnRyZWU6YWRkKCJvZl9tYXRjaCIpKQorICAgIGVsc2VpZiB2ZXJzaW9uID09IDYgdGhlbgorICAgICAgICBkaXNzZWN0X29mX21hdGNoX3YzX3Y2KHJlYWRlciwgc3VidHJlZTphZGQoIm9mX21hdGNoIikpCiAgICAgZWxzZQogICAgICAgICBlcnJvcigiVW5zdXBwb3J0ZWQgbWF0Y2ggdmVyc2lvbiIpCiAgICAgZW5kCiBlbmQKIAorZnVuY3Rpb24gcmVhZF9vZl9zdGF0X3QocmVhZGVyLCB2ZXJzaW9uLCBzdWJ0cmVlLCBmaWVsZF9uYW1lKQorICAgIGlmIHZlcnNpb24gPT0gMSB0aGVuCisgICAgICAgIGVycm9yKCJVbnN1cHBvcnRlZCBzdGF0aXN0aWNzIHZlcnNpb24iKQorICAgIGVsc2VpZiB2ZXJzaW9uID09IDIgdGhlbgorICAgICAgICBlcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGlzdGljcyB2ZXJzaW9uIikKKyAgICBlbHNlaWYgdmVyc2lvbiA9PSAzIHRoZW4KKyAgICAgICAgZXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRpc3RpY3MgdmVyc2lvbiIpCisgICAgZWxzZWlmIHZlcnNpb24gPT0gNCB0aGVuCisgICAgICAgIGVycm9yKCJVbnN1cHBvcnRlZCBzdGF0aXN0aWNzIHZlcnNpb24iKQorICAgIGVsc2VpZiB2ZXJzaW9uID09IDUgdGhlbgorICAgICAgICBlcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGlzdGljcyB2ZXJzaW9uIikKKyAgICBlbHNlaWYgdmVyc2lvbiA9PSA2IHRoZW4KKyAgICAgICAgZGlzc2VjdF9vZl9zdGF0X3Y2X3Y2KHJlYWRlciwgc3VidHJlZTphZGQoIm9mX3N0YXQiKSkKKyAgICBlbHNlCisgICAgICAgIGVycm9yKCJVbnN1cHBvcnRlZCBzdGF0aXN0aWNzIHZlcnNpb24iKQorICAgIGVuZAorZW5kCisKIGZ1bmN0aW9uIHJlYWRfb2Zfd2NfYm1hcF90KHJlYWRlciwgdmVyc2lvbiwgc3VidHJlZSwgZmllbGRfbmFtZSkKICAgICBpZiB2ZXJzaW9uIDw9IDIgdGhlbgogICAgICAgICByZWFkX3NjYWxhcihyZWFkZXIsIHN1YnRyZWUsIGZpZWxkX25hbWUsIDQpCkBAIC0xNjUsNiArMTg1LDE1IEBACiAgICAgY2hpbGRfc3VidHJlZTpzZXRfdGV4dChpbmZvKQogZW5kCiAKK2Z1bmN0aW9uIHJlYWRfb2Zfb3hzX3QocmVhZGVyLCB2ZXJzaW9uLCBzdWJ0cmVlLCBmaWVsZF9uYW1lKQorICAgIGlmIHJlYWRlci5pc19lbXB0eSgpIHRoZW4KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgbG9jYWwgY2hpbGRfc3VidHJlZSA9IHN1YnRyZWU6YWRkKGZpZWxkc1tmaWVsZF9uYW1lXSwgcmVhZGVyLnBlZWtfYWxsKDApKQorICAgIGxvY2FsIGluZm8gPSBvZl9veHNfZGlzc2VjdG9yc1t2ZXJzaW9uXShyZWFkZXIsIGNoaWxkX3N1YnRyZWUpCisgICAgY2hpbGRfc3VidHJlZTpzZXRfdGV4dChpbmZvKQorZW5kCisKIGZ1bmN0aW9uIHJlYWRfbGlzdChyZWFkZXIsIGRpc3NlY3Rvciwgc3VidHJlZSwgZmllbGRfbmFtZSkKICAgICBpZiBub3QgcmVhZGVyLmlzX2VtcHR5KCkgdGhlbgogICAgICAgICBsb2NhbCBsaXN0X3N1YnRyZWUgPSBzdWJ0cmVlOmFkZChmaWVsZF9uYW1lIC4uICIgbGlzdCIsIHJlYWRlci5wZWVrX2FsbCgwKSkKZGlmZiAtLWdpdCBhL3dpcmVzaGFya19nZW4vdGVtcGxhdGVzL29wZW5mbG93Lmx1YSBiL3dpcmVzaGFya19nZW4vdGVtcGxhdGVzL29wZW5mbG93Lmx1YQppbmRleCBmNmFhZWEzLi5jYjRhMjg5IDEwMDY0NAotLS0gYS93aXJlc2hhcmtfZ2VuL3RlbXBsYXRlcy9vcGVuZmxvdy5sdWEKKysrIGIvd2lyZXNoYXJrX2dlbi90ZW1wbGF0ZXMvb3BlbmZsb3cubHVhCkBAIC0zOSw3ICszOSw3IEBACiAKIDo6IGluY2x1ZGUoJ19vZnJlYWRlci5sdWEnKQogCi1wX29mID0gUHJvdG8gKCJvZiIsICJPcGVuRmxvdyIpCitwX29mID0gUHJvdG8gKCJvZiIsICJPcGVuRmxvdyAoTE9YSSkiKQogZXRoZXJuZXRfZGlzc2VjdG9yID0gRGlzc2VjdG9yLmdldCgiZXRoIikKIAogY3VycmVudF9wa3QgPSBuaWwKQEAgLTEyNCw2ICsxMjQsMTMgQEAKIDo6ICNlbmRmb3IKIH0KIAorCitsb2NhbCBvZl9veHNfZGlzc2VjdG9ycyA9IHsKKzo6IGZvciB2ZXJzaW9uIGluIGlyOgorICAgIFske3ZlcnNpb24ud2lyZV92ZXJzaW9ufV0gPSBkaXNzZWN0X29mX294c192JHt2ZXJzaW9uLndpcmVfdmVyc2lvbn0sCis6OiAjZW5kZm9yCit9CisKIGxvY2FsIG9mX2Jzbl92cG9ydF9xX2luX3FfZGlzc2VjdG9ycyA9IHsKIDo6IGZvciB2ZXJzaW9uIGluIGlyOgogICAgIFske3ZlcnNpb24ud2lyZV92ZXJzaW9ufV0gPSBkaXNzZWN0X29mX2Jzbl92cG9ydF9xX2luX3FfdiR7dmVyc2lvbi53aXJlX3ZlcnNpb259LApAQCAtMTY5LDggKzE3Niw4IEBACiAgICAgICAgICAgICBsb2NhbCBtc2dfbGVuID0gYnVmKG9mZnNldCsyLDIpOnVpbnQoKQogCiAgICAgICAgICAgICAtLSBEZXRlY3Qgb2J2aW91c2x5IGJyb2tlbiBtZXNzYWdlcwotICAgICAgICAgICAgaWYgbXNnX3ZlcnNpb24gPT0gMCBvciBtc2dfdmVyc2lvbiA+IDUgdGhlbiBicmVhayBlbmQKLSAgICAgICAgICAgIGlmIG1zZ190eXBlID4gMzQgdGhlbiBicmVhayBlbmQKKyAgICAgICAgICAgIGlmIG1zZ192ZXJzaW9uID09IDAgb3IgbXNnX3ZlcnNpb24gPiA2IHRoZW4gYnJlYWsgZW5kCisgICAgICAgICAgICBpZiBtc2dfdHlwZSA+IDM1IHRoZW4gYnJlYWsgZW5kCiAgICAgICAgICAgICBpZiBtc2dfbGVuIDwgOCB0aGVuIGJyZWFrIGVuZAogCiAgICAgICAgICAgICBpZiBvZmZzZXQgKyBtc2dfbGVuID4gYnVmOmxlbigpIHRoZW4K