ZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2MDE4NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXJfMS4wLjAuamFyCi10ZW1wCi1EaXRhTGluay5jYXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkOTQwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+Q29weSBvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlY2IzNzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQkyMDA4LTAxLTA5IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCBmb3IgbmV3IERJVEEtT1QgdmVyc2lvbgotCTIwMDgtMDUtMDUgS2F0ZSBQcmljZSA8a2F0ZXBAY2EuaWJtLmNvbT4KLQktIG1vZGlmaWVkIHRvIGFkZCBnZW5lcmF0aW9uIG9mIHByZS1idWlsdCBoZWxwIGluZGV4LiAKLQktIE11c3QgZGVsZXRlIC9pbmRleCBmb2xkZXIgYmVmb3JlIHJ1bm5pbmcgYnVpbGQKLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMy4zLjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249ImpzdF9qMmVlX3RvYy5kaXRhbWFwIiAvPiAKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iYnVpbGQuaW5kZXgiIGRlc2NyaXB0aW9uPSJCdWlsZHMgc2VhcmNoIGluZGV4IGZvciB0aGUgcGx1Zy1pbiIgaWY9ImVjbGlwc2UucnVubmluZyI+Ci0JCSAgICAgPGhlbHAuYnVpbGRIZWxwSW5kZXggbWFuaWZlc3Q9InBsdWdpbi54bWwiIGRlc3RpbmF0aW9uPSIuIi8+Ci0JCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYmE5ZTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMS5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjE5YjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gaW1hZ2VzLyxcCi0gICAgICAgICAgICAgICBqc3RfajJlZV90b2MueG1sLFwKLSAgICAgICAgICAgICAgIGpzdF9qMmVlX3JlbHNtYXAueG1sLFwKLSAgICAgICAgICAgICAgIHRvcGljcy8qLmh0bSosXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXJpbmRleC54bWwKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMsXAotCQkgICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotICAgICAgICAgICAgICAgdG9waWNzLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW1hZ2VzL0FkZFJlbGF0aW9uc2hpcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy9BZGRSZWxhdGlvbnNoaXAuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTZhNzU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW1hZ2VzL0FkZFJlbGF0aW9uc2hpcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy9Qcm9qZWN0RXhwbG9yZXIuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbWFnZXMvUHJvamVjdEV4cGxvcmVyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjNzI5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy9Qcm9qZWN0RXhwbG9yZXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbWFnZXMvUmVsYXRpb25zaGlwcy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy9SZWxhdGlvbnNoaXBzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmNTJlYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy9SZWxhdGlvbnNoaXBzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW1hZ2VzL241cnBkY3N0LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW1hZ2VzL241cnBkY3N0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhiZTE4Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy9uNXJwZGNzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy92YWxpZGF0ZWZpbHRlcnMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbWFnZXMvdmFsaWRhdGVmaWx0ZXJzLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4MTA5MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2ltYWdlcy92YWxpZGF0ZWZpbHRlcnMuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbWFnZXMveWN3aW4uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbWFnZXMveWN3aW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTVmOWNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW1hZ2VzL3ljd2luLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW5kZXgvXzE4LmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW5kZXgvXzE4LmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQwMjQxNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2luZGV4L18xOC5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNDcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2NDM2Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1R1ZSBNYXkgMjcgMTA6NDc6NDQgRURUIDIwMDgNCi1vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlcj1vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlclxuMS4xLjAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0M2U1ZmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1R1ZSBNYXkgMjcgMTA6NDc6NDQgRURUIDIwMDgNCi1sdWNlbmU9MS45LjEudjIwMDcwNjExMTcyNA0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4zLjEudjIwMDcwODEzXzMzeD9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI4OWEyNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNUdWUgTWF5IDI3IDEwOjQ3OjQ0IEVEVCAyMDA4DQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamNpcmNsZS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsc2VsZWN0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGFkZGluZ2ZhY2V0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBhcHAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jZmFjZXRzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGNoYW5nZWZhY2V0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtajJlZWFwcC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqYXBwcHJvai5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3BoLXByb2plY3RzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY3R5cGVzb2Zhbm5vLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcmpsaW1pdGN1cnJlbnQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamVlNW92ZXJ2aWV3Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2p2aWV3Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2phcmNoLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtaW1wb3J0ZXhwb3J0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXByYXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amVhci5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqaW1wZWFyLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtcmVmLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpjaXJjbGViLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpyYXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9janBlcnMuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFwcGNsaXByb2ouaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsZXJyLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90Y2hhbmdlamF2YWxldmVsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxtYW51YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsaWRhdG9ycy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwYXBwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jYW5ub3RhdGlvbnMuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamVhcnByb2ouaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZpZXdmaWx0ZXJzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHBlYXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cHJhci5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXZhZWU1Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp0YXJnZXRzZXJ2ZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZhbGRpc2FibGUuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydHVuZXZhbGlkYXQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZhbGdsb2JhbHByZWYuaHRtbD0wDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzY0OWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9pbmRleC9zZWdtZW50cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfcmVsc21hcC5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9qc3RfajJlZV9yZWxzbWFwLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwN2Y5NDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9qc3RfajJlZV9yZWxzbWFwLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiINCi0gIm1hcC5kdGQiPg0KLTxtYXAgdGl0bGU9IkoyRUUgV1RQIHJlbGF0aW9uYWwgdGFibGUiPg0KLTxyZWx0YWJsZT4NCi08cmVsaGVhZGVyPg0KLTxyZWxjb2xzcGVjIHR5cGU9ImNvbmNlcHQiPjwvcmVsY29sc3BlYz4NCi08cmVsY29sc3BlYyB0eXBlPSJ0YXNrIj48L3JlbGNvbHNwZWM+DQotPHJlbGNvbHNwZWMgdHlwZT0icmVmZXJlbmNlIj48L3JlbGNvbHNwZWM+DQotPC9yZWxoZWFkZXI+DQotPHJlbHJvdz4NCi08cmVsY2VsbCBsaW5raW5nPSJ0YXJnZXRvbmx5Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NqYXJjaC5kaXRhIiBuYXZ0aXRsZT0iSjJFRSBhcmNoaXRlY3R1cmUiPjwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsIGNvbGxlY3Rpb24tdHlwZT0iZmFtaWx5Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqdGFyZ2V0c2VydmVyLmRpdGEiIG5hdnRpdGxlPSJTcGVjaWZ5aW5nIHRhcmdldCBzZXJ2ZXJzIGZvciBKMkVFIHByb2plY3RzIj4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbD48L3JlbGNlbGw+DQotPHJlbGNlbGw+DQotPHRvcGljcmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5kb2MudXNlci90b3BpY3MvdHdpbnN0cHJmLmh0bWwiDQotbGlua2luZz0idGFyZ2V0b25seSIgbG9ja3RpdGxlPSJ5ZXMiIG5hdnRpdGxlPSJEZWZpbmluZyB0aGUgaW5zdGFsbGVkIHNlcnZlciBydW50aW1lIGVudmlyb25tZW50cyINCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPC9yZWxyb3c+DQotPHJlbHJvdz4NCi08cmVsY2VsbD48L3JlbGNlbGw+DQotPHJlbGNlbGw+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90anZhbC5kaXRhIiBuYXZ0aXRsZT0iVmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zIj4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbCBjb2xsZWN0aW9uLXR5cGU9ImZhbWlseSI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9ydmFsZXJyLmRpdGEiIG5hdnRpdGxlPSJDb21tb24gdmFsaWRhdGlvbiBlcnJvcnMgYW5kIHNvbHV0aW9ucyI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3J2YWxpZGF0b3JzLmRpdGEiIG5hdnRpdGxlPSJKMkVFIFZhbGlkYXRvcnMiPjwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTwvcmVscm93Pg0KLTxyZWxyb3c+DQotPHJlbGNlbGw+PC9yZWxjZWxsPg0KLTxyZWxjZWxsIGNvbGxlY3Rpb24tdHlwZT0iZmFtaWx5Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqdmFsZGlzYWJsZS5kaXRhIiBuYXZ0aXRsZT0iRGlzYWJsaW5nIHZhbGlkYXRpb24iPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90anZhbGdsb2JhbHByZWYuZGl0YSIgbmF2dGl0bGU9Ik92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90anZhbG1hbnVhbC5kaXRhIiBuYXZ0aXRsZT0iTWFudWFsbHkgdmFsaWRhdGluZyBjb2RlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGp2YWxzZWxlY3QuZGl0YSIgbmF2dGl0bGU9IlNlbGVjdGluZyBjb2RlIHZhbGlkYXRvcnMiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcnR1bmV2YWxpZGF0LmRpdGEiIG5hdnRpdGxlPSJUdW5pbmcgdmFsaWRhdG9ycyI+PC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPC9yZWxyb3c+DQotPHJlbHJvdz4NCi08cmVsY2VsbCBjb2xsZWN0aW9uLXR5cGU9ImZhbWlseSI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jamFyY2guZGl0YSIgbmF2dGl0bGU9IkoyRUUgYXJjaGl0ZWN0dXJlIj48L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2plYXJwcm9qLmRpdGEiIG5hdnRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIj4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbCBjb2xsZWN0aW9uLXR5cGU9ImZhbWlseSI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amVhci5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0Ij4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGppbXBlYXIuZGl0YSIgbmF2dGl0bGU9IkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGpleHBlYXIuZGl0YSIgbmF2dGl0bGU9IkV4cG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIGludG8gYW4gRUFSIGZpbGUiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPjwvcmVsY2VsbD4NCi08L3JlbHJvdz4NCi08cmVscm93Pg0KLTxyZWxjZWxsIGNvbGxlY3Rpb24tdHlwZT0iZmFtaWx5Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NqYXJjaC5kaXRhIiBuYXZ0aXRsZT0iSjJFRSBhcmNoaXRlY3R1cmUiPjwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jamFwcGNsaXByb2ouZGl0YSIgbmF2dGl0bGU9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyI+DQotPC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPHJlbGNlbGwgY29sbGVjdGlvbi10eXBlPSJmYW1pbHkiPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGphcHBwcm9qLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqZXhwYXBwLmRpdGEiIG5hdnRpdGxlPSJFeHBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amltcGFwcC5kaXRhIiBuYXZ0aXRsZT0iSW1wb3J0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBKQVIgZmlsZSI+DQotPC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPHJlbGNlbGw+PC9yZWxjZWxsPg0KLTwvcmVscm93Pg0KLTxyZWxyb3c+DQotPHJlbGNlbGw+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jamNpcmNsZS5kaXRhIiBuYXZ0aXRsZT0iQ3ljbGljYWwgZGVwZW5kZW5jaWVzIGJldHdlZW4gSjJFRSBtb2R1bGVzIj4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbCBjb2xsZWN0aW9uLXR5cGU9ImZhbWlseSI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amltcGVhci5kaXRhIiBuYXZ0aXRsZT0iSW1wb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gRUFSIGZpbGUiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amNpcmNsZWIuZGl0YSIgbmF2dGl0bGU9IkNvcnJlY3RpbmcgY3ljbGljYWwgZGVwZW5kZW5jaWVzIGFmdGVyIGFuIEVBUiBpcyBpbXBvcnRlZCI+DQotPC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPHJlbGNlbGw+PC9yZWxjZWxsPg0KLTwvcmVscm93Pg0KLTxyZWxyb3c+DQotPHJlbGNlbGwgY29sbGVjdGlvbi10eXBlPSJmYW1pbHkiPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2p2aWV3LmRpdGEiIG5hdnRpdGxlPSJQcm9qZWN0IEV4cGxvcmVyIHZpZXcgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGp2aWV3ZmlsdGVycy5kaXRhIiBuYXZ0aXRsZT0iRmlsdGVyaW5nIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXciPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPjwvcmVsY2VsbD4NCi08L3JlbHJvdz4NCi08cmVscm93Pg0KLTxyZWxjZWxsPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2plYXJwcm9qLmRpdGEiIG5hdnRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIj4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbD4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqZWFyLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amFwcHByb2ouZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0Ij4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGpyYXIuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGEgY29ubmVjdG9yIHByb2plY3QiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPjwvcmVsY2VsbD4NCi08cmVsY2VsbD4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NmYWNldHMuZGl0YSIgbmF2dGl0bGU9IlByb2plY3QgZmFjZXRzIj48L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08L3JlbHJvdz4NCi08cmVscm93Pg0KLTxyZWxjZWxsPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2pwZXJzLmRpdGEiIG5hdnRpdGxlPSJKMkVFIHBlcnNwZWN0aXZlIj48L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2p2aWV3LmRpdGEiIG5hdnRpdGxlPSJQcm9qZWN0IEV4cGxvcmVyIHZpZXcgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPjwvcmVsY2VsbD4NCi08cmVsY2VsbD48L3JlbGNlbGw+DQotPHJlbGNlbGw+DQotPHRvcGljcmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvY29uY2VwdHMvY3dvcmtzZXQuaHRtIg0KLWxvY2t0aXRsZT0ieWVzIiBuYXZ0aXRsZT0iV29ya2luZyBzZXRzIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPC9yZWxyb3c+DQotPHJlbHJvdz4NCi08cmVsY2VsbD4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NmYWNldHMuZGl0YSIgbmF2dGl0bGU9IlByb2plY3QgZmFjZXRzIj48L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbCBjb2xsZWN0aW9uLXR5cGU9ImZhbWlseSI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90YWRkaW5nZmFjZXQuZGl0YSIgbmF2dGl0bGU9IkFkZGluZyBhIGZhY2V0IHRvIGEgSjJFRSBwcm9qZWN0Ij4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGNoYW5nZWphdmFsZXZlbC5kaXRhIiBuYXZ0aXRsZT0iQ2hhbmdpbmcgdGhlIEphdmEgY29tcGlsZXIgdmVyc2lvbiBmb3IgYSBKMkVFDQotcHJvamVjdCI+PC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RjaGFuZ2VmYWNldC5kaXRhIiBuYXZ0aXRsZT0iQ2hhbmdpbmcgdGhlIHZlcnNpb24gb2YgYSBmYWNldCI+DQotPC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPHJlbGNlbGw+PC9yZWxjZWxsPg0KLTxyZWxjZWxsPjwvcmVsY2VsbD4NCi08L3JlbHJvdz4NCi08L3JlbHRhYmxlPg0KLTwvbWFwPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfcmVsc21hcC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2pzdF9qMmVlX3JlbHNtYXAueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM5OTBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfcmVsc21hcC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGFiZWw9IkoyRUUgV1RQIHJlbGF0aW9uYWwgdGFibGUiLz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2pzdF9qMmVlX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjJkYWQ4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiINCi0gIm1hcC5kdGQiPg0KLTxtYXAgaWQ9ImpzdGoyZWV0b2MiIHRpdGxlPSJKMkVFIGFwcGxpY2F0aW9ucyAtIFdUUCI+DQotPGFuY2hvciBpZD0ibWFwX3RvcCIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcGgtajJlZWFwcC5kaXRhIiBuYXZ0aXRsZT0iSmF2YSBFRSBhcHBsaWNhdGlvbnMiPg0KLTxhbmNob3IgaWQ9ImJlZm9yZV9pbnRyb190b3BpY3MiLz4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NqYXZhZWU1LmRpdGEiIG5hdnRpdGxlPSJEZXZlbG9waW5nIEphdmEgRUUgNSBBcHBsaWNhdGlvbnMiPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2plZTVvdmVydmlldy5kaXRhIiBuYXZ0aXRsZT0iSmF2YSBFRSA1OiBPdmVydmlldyI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2Nhbm5vdGF0aW9ucy5kaXRhIiBuYXZ0aXRsZT0iSmF2YSBFRSA1IHN1cHBvcnQgZm9yIGFubm90YXRpb25zIj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RkZWZpbmluZ2Fubm90YXRpb25zLmRpdGEiIG5hdnRpdGxlPSJEZWZpbmluZyBhbmQgdXNpbmcgQW5ub3RhdGlvbnMiPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY3R5cGVzb2Zhbm5vLmRpdGEiIG5hdnRpdGxlPSJUeXBlcyBvZiBhbm5vdGF0aW9ucyI+DQotPC90b3BpY3JlZj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2NqYXJjaC5kaXRhIiBuYXZ0aXRsZT0iSjJFRSBhcmNoaXRlY3R1cmUiPjwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9janBlcnMuZGl0YSIgbmF2dGl0bGU9IkphdmEgRUUgcGVyc3BlY3RpdmUiPjwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9janZpZXcuZGl0YSIgbmF2dGl0bGU9IlByb2plY3QgRXhwbG9yZXIgdmlldyBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSI+DQotPC90b3BpY3JlZj4NCi08YW5jaG9yIGlkPSJhZnRlcl9pbnRyb190b3BpY3MiLz4NCi08YW5jaG9yIGlkPSJiZWZvcmVfZmlsdGVycyIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGp2aWV3ZmlsdGVycy5kaXRhIiBuYXZ0aXRsZT0iRmlsdGVyaW5nIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXciPg0KLTwvdG9waWNyZWY+DQotPGFuY2hvciBpZD0iYWZ0ZXJfZmlsdGVycyIvPg0KLTxhbmNob3IgaWQ9ImJlZm9yZV9wcm9qZWN0cyIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcGgtcHJvamVjdHMuZGl0YSIgbmF2dGl0bGU9Ildvcmtpbmcgd2l0aCBwcm9qZWN0cyI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jamVhcnByb2ouZGl0YSIgbmF2dGl0bGU9IkVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jamFwcGNsaXByb2ouZGl0YSIgbmF2dGl0bGU9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyI+DQotPC90b3BpY3JlZj4NCi08YW5jaG9yIGlkPSJwcm9qZWN0X3R5cGVzIi8+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amVhci5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0Ij4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGphcHBwcm9qLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqcmFyLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhIGNvbm5lY3RvciBwcm9qZWN0Ij4NCi08L3RvcGljcmVmPg0KLTxhbmNob3IgaWQ9ImNyZWF0aW5nX3Byb2plY3RzIi8+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90anRhcmdldHNlcnZlci5kaXRhIiBuYXZ0aXRsZT0iU3BlY2lmeWluZyB0YXJnZXQgc2VydmVycyBmb3IgSjJFRSBwcm9qZWN0cyI+DQotPC90b3BpY3JlZj4NCi08YW5jaG9yIGlkPSJ0YXJnZXRfc2VydmVycyIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2ZhY2V0cy5kaXRhIiBuYXZ0aXRsZT0iUHJvamVjdCBmYWNldHMiPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGFkZGluZ2ZhY2V0LmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgYSBmYWNldCB0byBhIEphdmEgRUUgcHJvamVjdCI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RjaGFuZ2VmYWNldC5kaXRhIiBuYXZ0aXRsZT0iQ2hhbmdpbmcgdGhlIHZlcnNpb24gb2YgYSBmYWNldCI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuZGl0YSIgbmF2dGl0bGU9IkNoYW5naW5nIHRoZSBKYXZhIGNvbXBpbGVyIHZlcnNpb24gZm9yIGEgSmF2YSBFRSBwcm9qZWN0Ij4NCi08L3RvcGljcmVmPg0KLTxhbmNob3IgaWQ9ImNoaWxkb2ZfSjJFRVByb2plY3RGYWNldHMiLz48L3RvcGljcmVmPg0KLTxhbmNob3IgaWQ9IkoyRUVQcm9qZWN0RmFjZXRzIi8+DQotPGFuY2hvciBpZD0iYmVmb3JlX2ltcG9ydGV4cG9ydCIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcGgtaW1wb3J0ZXhwb3J0LmRpdGEiIG5hdnRpdGxlPSJJbXBvcnRpbmcgYW5kIGV4cG9ydGluZyBwcm9qZWN0cyBhbmQgZmlsZXMiPg0KLTxhbmNob3IgaWQ9ImltcG9ydGV4cG9ydF90b3AiLz4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqZXhwYXBwLmRpdGEiIG5hdnRpdGxlPSJFeHBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90amV4cGVhci5kaXRhIiBuYXZ0aXRsZT0iRXhwb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gaW50byBhbiBFQVIgZmlsZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqZXhwcmFyLmRpdGEiIG5hdnRpdGxlPSJFeHBvcnRpbmcgY29ubmVjdG9yIHByb2plY3RzIHRvIFJBUiBmaWxlcyI+DQotPC90b3BpY3JlZj4NCi08YW5jaG9yIGlkPSJleHBvcnRfdHlwZXMiLz4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqaW1wZWFyLmRpdGEiIG5hdnRpdGxlPSJJbXBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBFQVIgZmlsZSI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqaW1wYXBwLmRpdGEiIG5hdnRpdGxlPSJJbXBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdGppbXByYXIuZGl0YSIgbmF2dGl0bGU9IkltcG9ydGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IFJBUiBmaWxlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53ZWJ0b29scy5kb2MudXNlci90b3BpY3MvdHdpbXB3YXIuaHRtbCINCi1saW5raW5nPSJ0YXJnZXRvbmx5IiBsb2NrdGl0bGU9InllcyIgbmF2dGl0bGU9IkltcG9ydGluZyBXZWIgYXJjaGl2ZSAoV0FSKSBmaWxlcyINCi1zY29wZT0icGVlciIgdG9jPSJubyI+PC90b3BpY3JlZj4NCi08dG9waWNyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud2VidG9vbHMuZG9jLnVzZXIvdG9waWNzL3R3Y3Jld2FyLmh0bWwiDQotbGlua2luZz0idGFyZ2V0b25seSIgbG9ja3RpdGxlPSJ5ZXMiIG5hdnRpdGxlPSJFeHBvcnRpbmcgV2ViIEFyY2hpdmUgKFdBUikgZmlsZXMiDQotc2NvcGU9InBlZXIiIHRvYz0ibm8iPjwvdG9waWNyZWY+DQotPHRvcGljcmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LmVqYi5kb2MudXNlci90b3BpY3MvdGVpbXAuaHRtbCINCi1saW5raW5nPSJ0YXJnZXRvbmx5IiBsb2NrdGl0bGU9InllcyIgbmF2dGl0bGU9IkltcG9ydGluZyBFSkIgSkFSIGZpbGVzIiBzY29wZT0icGVlciINCi10b2M9Im5vIj48L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC5lamIuZG9jLnVzZXIvdG9waWNzL3RlZXhwLmh0bWwiDQotbGlua2luZz0idGFyZ2V0b25seSIgbG9ja3RpdGxlPSJ5ZXMiIG5hdnRpdGxlPSJFeHBvcnRpbmcgRUpCIHByb2plY3RzIHRvIEVKQiBKQVIgZmlsZXMiDQotc2NvcGU9InBlZXIiIHRvYz0ibm8iPjwvdG9waWNyZWY+DQotPGFuY2hvciBpZD0iaW1wb3J0X3R5cGVzIi8+DQotPGFuY2hvciBpZD0iYmVmb3JlX2RlcGVuZGVuY2llcyIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2pjaXJjbGUuZGl0YSIgbmF2dGl0bGU9IkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlcyI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqY2lyY2xlYi5kaXRhIiBuYXZ0aXRsZT0iQ29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgYW4gRUFSDQotaXMgaW1wb3J0ZWQiPjwvdG9waWNyZWY+DQotPGFuY2hvciBpZD0iYWZ0ZXJfZGVwZW5kZW5jaWVzIi8+DQotPGFuY2hvciBpZD0iaW1wb3J0ZXhwb3J0X2JvdHRvbSIvPjwvdG9waWNyZWY+DQotPGFuY2hvciBpZD0iYWZ0ZXJfaW1wb3J0ZXhwb3J0Ii8+PC90b3BpY3JlZj4NCi08YW5jaG9yIGlkPSJhZnRlcl9wcm9qZWN0cyIvPg0KLTxhbmNob3IgaWQ9ImJlZm9yZV92YWxpZGF0aW9uIi8+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90anZhbC5kaXRhIiBuYXZ0aXRsZT0iVmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zIj4NCi08YW5jaG9yIGlkPSJ2YWxpZGF0aW9uX3RvcCIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcnR1bmV2YWxpZGF0LmRpdGEiIG5hdnRpdGxlPSJUdW5pbmcgdmFsaWRhdG9ycyI+PC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3J2YWxlcnIuZGl0YSIgbmF2dGl0bGU9IkNvbW1vbiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgc29sdXRpb25zIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcnZhbGlkYXRvcnMuZGl0YSIgbmF2dGl0bGU9IkoyRUUgVmFsaWRhdG9ycyI+DQotPGFuY2hvciBpZD0iY2hpbGRvZl92YWxpZGF0b3JzIi8+PC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqdmFsZGlzYWJsZS5kaXRhIiBuYXZ0aXRsZT0iRGlzYWJsaW5nIHZhbGlkYXRpb24iPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90anZhbHNlbGVjdC5kaXRhIiBuYXZ0aXRsZT0iU2VsZWN0aW5nIGNvZGUgdmFsaWRhdG9ycyI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqdmFsZ2xvYmFscHJlZi5kaXRhIiBuYXZ0aXRsZT0iT3ZlcnJpZGluZyBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcyI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RqdmFsbWFudWFsLmRpdGEiIG5hdnRpdGxlPSJNYW51YWxseSB2YWxpZGF0aW5nIGNvZGUiPg0KLTwvdG9waWNyZWY+DQotPGFuY2hvciBpZD0idmFsaWRhdGlvbl9ib3R0b20iLz48L3RvcGljcmVmPg0KLTxhbmNob3IgaWQ9ImFmdGVyX3ZhbGlkYXRpb24iLz4NCi08YW5jaG9yIGlkPSJiZWZvcmVfcmVmZXJlbmNlIi8+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9waC1yZWYuZGl0YSIgbmF2dGl0bGU9IlJlZmVyZW5jZSI+DQotPGFuY2hvciBpZD0icmVmZXJlbmNlX3RvcCIvPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcnZhbGlkYXRvcnMuZGl0YSIgbmF2dGl0bGU9IkoyRUUgVmFsaWRhdG9ycyI+PC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3J2YWxlcnIuZGl0YSIgbmF2dGl0bGU9IkNvbW1vbiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgc29sdXRpb25zIj4NCi08YW5jaG9yIGlkPSJ2YWxpZGF0aW9uX2Vycm9ycyIvPjwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9yamxpbWl0Y3VycmVudC5kaXRhIiBuYXZ0aXRsZT0iTGltaXRhdGlvbnMgb2YgSjJFRSBkZXZlbG9wbWVudCB0b29scyI+DQotPGFuY2hvciBpZD0ibGltaXRhdGlvbnMiLz48L3RvcGljcmVmPg0KLTxhbmNob3IgaWQ9InJlZmVyZW5jZV9ib3R0b20iLz48L3RvcGljcmVmPg0KLTxhbmNob3IgaWQ9ImFmdGVyX3JlZmVyZW5jZSIvPjwvdG9waWNyZWY+DQotPGFuY2hvciBpZD0ibWFwX2JvdHRvbSIvPjwvbWFwPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvanN0X2oyZWVfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhMWMzNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL2pzdF9qMmVlX3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxhYmVsPSJKMkVFIGFwcGxpY2F0aW9ucyAtIFdUUCIgdG9waWM9InRvcGljcy9waC1qMmVlYXBwLmh0bWwiPgotPGFuY2hvciBpZD0ibWFwX3RvcCIvPgotPHRvcGljIGxhYmVsPSJKYXZhIEVFIGFwcGxpY2F0aW9ucyIgaHJlZj0idG9waWNzL3BoLWoyZWVhcHAuaHRtbCI+Ci08YW5jaG9yIGlkPSJiZWZvcmVfaW50cm9fdG9waWNzIi8+Ci08dG9waWMgbGFiZWw9IkRldmVsb3BpbmcgSmF2YSBFRSA1IEFwcGxpY2F0aW9ucyIgaHJlZj0idG9waWNzL2NqYXZhZWU1Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJKYXZhIEVFIDU6IE92ZXJ2aWV3IiBocmVmPSJ0b3BpY3MvY2plZTVvdmVydmlldy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkphdmEgRUUgNSBzdXBwb3J0IGZvciBhbm5vdGF0aW9ucyIgaHJlZj0idG9waWNzL2Nhbm5vdGF0aW9ucy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRGVmaW5pbmcgYW5kIHVzaW5nIGFubm90YXRpb25zIiBocmVmPSJ0b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlR5cGVzIG9mIGFubm90YXRpb25zIiBocmVmPSJ0b3BpY3MvY3R5cGVzb2Zhbm5vLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvcGljPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iSjJFRSBhcmNoaXRlY3R1cmUiIGhyZWY9InRvcGljcy9jamFyY2guaHRtbCIvPgotPHRvcGljIGxhYmVsPSJKYXZhIEVFIHBlcnNwZWN0aXZlIiBocmVmPSJ0b3BpY3MvY2pwZXJzLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHJvamVjdCBFeHBsb3JlciB2aWV3IGluIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlIiBocmVmPSJ0b3BpY3MvY2p2aWV3Lmh0bWwiLz4KLTxhbmNob3IgaWQ9ImFmdGVyX2ludHJvX3RvcGljcyIvPgotPGFuY2hvciBpZD0iYmVmb3JlX2ZpbHRlcnMiLz4KLTx0b3BpYyBsYWJlbD0iRmlsdGVyaW5nIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXciIGhyZWY9InRvcGljcy90anZpZXdmaWx0ZXJzLmh0bWwiLz4KLTxhbmNob3IgaWQ9ImFmdGVyX2ZpbHRlcnMiLz4KLTxhbmNob3IgaWQ9ImJlZm9yZV9wcm9qZWN0cyIvPgotPHRvcGljIGxhYmVsPSJXb3JraW5nIHdpdGggcHJvamVjdHMiIGhyZWY9InRvcGljcy9waC1wcm9qZWN0cy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cyIgaHJlZj0idG9waWNzL2NqZWFycHJvai5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyIgaHJlZj0idG9waWNzL2NqYXBwY2xpcHJvai5odG1sIi8+Ci08YW5jaG9yIGlkPSJwcm9qZWN0X3R5cGVzIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCIgaHJlZj0idG9waWNzL3RqZWFyLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QiIGhyZWY9InRvcGljcy90amFwcHByb2ouaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IiBocmVmPSJ0b3BpY3MvdGpyYXIuaHRtbCIvPgotPGFuY2hvciBpZD0iY3JlYXRpbmdfcHJvamVjdHMiLz4KLTx0b3BpYyBsYWJlbD0iU3BlY2lmeWluZyB0YXJnZXQgc2VydmVycyBmb3IgSjJFRSBwcm9qZWN0cyIgaHJlZj0idG9waWNzL3RqdGFyZ2V0c2VydmVyLmh0bWwiLz4KLTxhbmNob3IgaWQ9InRhcmdldF9zZXJ2ZXJzIi8+Ci08dG9waWMgbGFiZWw9IlByb2plY3QgZmFjZXRzIiBocmVmPSJ0b3BpY3MvY2ZhY2V0cy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3QiIGhyZWY9InRvcGljcy90YWRkaW5nZmFjZXQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0IiBocmVmPSJ0b3BpY3MvdGNoYW5nZWZhY2V0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ2hhbmdpbmcgdGhlIEphdmEgY29tcGlsZXIgdmVyc2lvbiBmb3IgYSBKYXZhIEVFIHByb2plY3QiIGhyZWY9InRvcGljcy90Y2hhbmdlamF2YWxldmVsLmh0bWwiLz4KLTxhbmNob3IgaWQ9ImNoaWxkb2ZfSjJFRVByb2plY3RGYWNldHMiLz4KLTwvdG9waWM+Ci08YW5jaG9yIGlkPSJKMkVFUHJvamVjdEZhY2V0cyIvPgotPGFuY2hvciBpZD0iYmVmb3JlX2ltcG9ydGV4cG9ydCIvPgotPHRvcGljIGxhYmVsPSJJbXBvcnRpbmcgYW5kIGV4cG9ydGluZyBwcm9qZWN0cyBhbmQgZmlsZXMiIGhyZWY9InRvcGljcy9waC1pbXBvcnRleHBvcnQuaHRtbCI+Ci08YW5jaG9yIGlkPSJpbXBvcnRleHBvcnRfdG9wIi8+Ci08dG9waWMgbGFiZWw9IkV4cG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCIgaHJlZj0idG9waWNzL3RqZXhwYXBwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iRXhwb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gaW50byBhbiBFQVIgZmlsZSIgaHJlZj0idG9waWNzL3RqZXhwZWFyLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iRXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXMiIGhyZWY9InRvcGljcy90amV4cHJhci5odG1sIi8+Ci08YW5jaG9yIGlkPSJleHBvcnRfdHlwZXMiLz4KLTx0b3BpYyBsYWJlbD0iSW1wb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gRUFSIGZpbGUiIGhyZWY9InRvcGljcy90amltcGVhci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkltcG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgSkFSIGZpbGUiIGhyZWY9InRvcGljcy90amltcGFwcC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkltcG9ydGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IFJBUiBmaWxlIiBocmVmPSJ0b3BpY3MvdGppbXByYXIuaHRtbCIvPgotPGFuY2hvciBpZD0iaW1wb3J0X3R5cGVzIi8+Ci08YW5jaG9yIGlkPSJiZWZvcmVfZGVwZW5kZW5jaWVzIi8+Ci08dG9waWMgbGFiZWw9IkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlcyIgaHJlZj0idG9waWNzL2NqY2lyY2xlLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgYW4gRUFSIGlzIGltcG9ydGVkIiBocmVmPSJ0b3BpY3MvdGpjaXJjbGViLmh0bWwiLz4KLTxhbmNob3IgaWQ9ImFmdGVyX2RlcGVuZGVuY2llcyIvPgotPGFuY2hvciBpZD0iaW1wb3J0ZXhwb3J0X2JvdHRvbSIvPgotPC90b3BpYz4KLTxhbmNob3IgaWQ9ImFmdGVyX2ltcG9ydGV4cG9ydCIvPgotPC90b3BpYz4KLTxhbmNob3IgaWQ9ImFmdGVyX3Byb2plY3RzIi8+Ci08YW5jaG9yIGlkPSJiZWZvcmVfdmFsaWRhdGlvbiIvPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIGNvZGUgaW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMiIGhyZWY9InRvcGljcy90anZhbC5odG1sIj4KLTxhbmNob3IgaWQ9InZhbGlkYXRpb25fdG9wIi8+Ci08dG9waWMgbGFiZWw9IlR1bmluZyB2YWxpZGF0b3JzIiBocmVmPSJ0b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ29tbW9uIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBzb2x1dGlvbnMiIGhyZWY9InRvcGljcy9ydmFsZXJyLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iSjJFRSBWYWxpZGF0b3JzIiBocmVmPSJ0b3BpY3MvcnZhbGlkYXRvcnMuaHRtbCI+Ci08YW5jaG9yIGlkPSJjaGlsZG9mX3ZhbGlkYXRvcnMiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkRpc2FibGluZyB2YWxpZGF0aW9uIiBocmVmPSJ0b3BpY3MvdGp2YWxkaXNhYmxlLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iU2VsZWN0aW5nIGNvZGUgdmFsaWRhdG9ycyIgaHJlZj0idG9waWNzL3RqdmFsc2VsZWN0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iT3ZlcnJpZGluZyBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcyIgaHJlZj0idG9waWNzL3RqdmFsZ2xvYmFscHJlZi5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbnVhbGx5IHZhbGlkYXRpbmcgY29kZSIgaHJlZj0idG9waWNzL3RqdmFsbWFudWFsLmh0bWwiLz4KLTxhbmNob3IgaWQ9InZhbGlkYXRpb25fYm90dG9tIi8+Ci08L3RvcGljPgotPGFuY2hvciBpZD0iYWZ0ZXJfdmFsaWRhdGlvbiIvPgotPGFuY2hvciBpZD0iYmVmb3JlX3JlZmVyZW5jZSIvPgotPHRvcGljIGxhYmVsPSJSZWZlcmVuY2UiIGhyZWY9InRvcGljcy9waC1yZWYuaHRtbCI+Ci08YW5jaG9yIGlkPSJyZWZlcmVuY2VfdG9wIi8+Ci08dG9waWMgbGFiZWw9IkoyRUUgVmFsaWRhdG9ycyIgaHJlZj0idG9waWNzL3J2YWxpZGF0b3JzLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ29tbW9uIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBzb2x1dGlvbnMiIGhyZWY9InRvcGljcy9ydmFsZXJyLmh0bWwiPgotPGFuY2hvciBpZD0idmFsaWRhdGlvbl9lcnJvcnMiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkxpbWl0YXRpb25zIG9mIEoyRUUgZGV2ZWxvcG1lbnQgdG9vbHMiIGhyZWY9InRvcGljcy9yamxpbWl0Y3VycmVudC5odG1sIj4KLTxhbmNob3IgaWQ9ImxpbWl0YXRpb25zIi8+Ci08L3RvcGljPgotPGFuY2hvciBpZD0icmVmZXJlbmNlX2JvdHRvbSIvPgotPC90b3BpYz4KLTxhbmNob3IgaWQ9ImFmdGVyX3JlZmVyZW5jZSIvPgotPC90b3BpYz4KLTxhbmNob3IgaWQ9Im1hcF9ib3R0b20iLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL215cGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcxODA1Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4zIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgICAgPHRvYyBmaWxlPSJqc3RfajJlZV90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyaW5kZXgueG1sIi8+Ci0gICAgPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjhjMmFkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPg0KLSAgPG5hdj4NCi0gICAgPG1hcCBmaWxlPSJqc3RfajJlZV90b2MuZGl0YW1hcCIvPg0KLSAgPC9uYXY+DQotICA8bGluaz4NCi0gICAgPG1hcCBmaWxlPSJqc3RfajJlZV90b2MuZGl0YW1hcCIvPg0KLSAgICA8bWFwIGZpbGU9ImpzdF9qMmVlX3JlbHNtYXAuZGl0YW1hcCIvPg0KLSAgPC9saW5rPg0KLTwvbWFwbGlzdD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc1NWIxNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKYXZhIEVudGVycHJpc2UgRWRpdGlvbiA1Ij4KLSAgICA8ZW50cnkga2V5d29yZD0iT3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jamF2YWVlNS5odG1sI2NqYXZhZWU1IiB0aXRsZT0iRGV2ZWxvcGluZyBKYXZhIEVFIDUgQXBwbGljYXRpb25zIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkphdmEgRUUgNSI+Ci0gICAgPHRvcGljIGhyZWY9InRvcGljcy9jamVlNW92ZXJ2aWV3Lmh0bWwjY2phdmFlZTUiIHRpdGxlPSJKYXZhIEVFIDU6IE92ZXJ2aWV3Ii8+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFubm90YXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY2Fubm90YXRpb25zLmh0bWwjY2phdmFlZTUiIHRpdGxlPSJKYXZhIEVFIDUgc3VwcG9ydCBmb3IgYW5ub3RhdGlvbnMiLz4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbCN0amltcGVhciIgdGl0bGU9IkRlZmluaW5nIGFuZCB1c2luZyBhbm5vdGF0aW9ucyIvPgotICAgICAgPGVudHJ5IGtleXdvcmQ9InR5cGVzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jdHlwZXNvZmFubm8uaHRtbCNjamF2YWVlNSIgdGl0bGU9IlR5cGVzIG9mIGFubm90YXRpb25zIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRlZmluaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbCN0amltcGVhciIgdGl0bGU9IkRlZmluaW5nIGFuZCB1c2luZyBhbm5vdGF0aW9ucyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJPZXJ2aWV3Ij4KLSAgICA8dG9waWMgaHJlZj0idG9waWNzL2NqZWU1b3ZlcnZpZXcuaHRtbCNjamF2YWVlNSIgdGl0bGU9IkphdmEgRUUgNTogT3ZlcnZpZXciLz4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkoyRUUiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJhcmNoaXRlY3R1cmUiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jamFyY2guaHRtbCNjamFyY2giIHRpdGxlPSJKMkVFIGFyY2hpdGVjdHVyZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jamVhcnByb2ouaHRtbCNjamVhcnByb2oiIHRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90amVhci5odG1sI3RqZWFyIiB0aXRsZT0iQ3JlYXRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRhcmdldCBzZXJ2ZXJzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGp0YXJnZXRzZXJ2ZXIuaHRtbCN0anRhcmdldHNlcnZlciIgdGl0bGU9IlNwZWNpZnlpbmcgdGFyZ2V0IHNlcnZlcnMgZm9yIEoyRUUgcHJvamVjdHMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0b29sIGxpbWl0YXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcmpsaW1pdGN1cnJlbnQuaHRtbCNyamxpbWl0Y3VycmVudCIgdGl0bGU9IkxpbWl0YXRpb25zIG9mIEoyRUUgZGV2ZWxvcG1lbnQgdG9vbHMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iSmF2YSBFRSI+Ci0gICAgPHRvcGljIGhyZWY9InRvcGljcy9jamFyY2guaHRtbCNjamFyY2giIHRpdGxlPSJKMkVFIGFyY2hpdGVjdHVyZSIvPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ3b3JrYmVuY2ggcGVyc3BlY3RpdmVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY2pwZXJzLmh0bWwjY2pwZXJzIiB0aXRsZT0iSmF2YSBFRSBwZXJzcGVjdGl2ZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL2NqYXBwY2xpcHJvai5odG1sI2NqYXBwY2xpcHJvaiIgdGl0bGU9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InByb2plY3QgZmFjZXRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY2ZhY2V0cy5odG1sI2NmYWNldHMiIHRpdGxlPSJQcm9qZWN0IGZhY2V0cyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBwcm9qZWN0IGZhY2V0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RhZGRpbmdmYWNldC5odG1sI3RhZGRpbmdmYWNldCIgdGl0bGU9IkFkZGluZyBhIGZhY2V0IHRvIGEgSmF2YSBFRSBwcm9qZWN0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY2hhbmdpbmcgZmFjZXQgdmVyc2lvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90Y2hhbmdlZmFjZXQuaHRtbCN0Y2hhbmdlZmFjZXQiIHRpdGxlPSJDaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHJvamVjdCBjb21waWxlciBsZXZlbCI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuaHRtbCN0Y2hhbmdlamF2YWxldmVsIiB0aXRsZT0iQ2hhbmdpbmcgdGhlIEphdmEgY29tcGlsZXIgdmVyc2lvbiBmb3IgYSBKYXZhIEVFIHByb2plY3QiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBtb2R1bGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY2pjaXJjbGUuaHRtbCNjamNpcmNsZSIgdGl0bGU9IkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJlbnRlcnByaXNlIGFwcGxpY2F0aW9ucyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IkphdmEgRUUgcGVyc3BlY3RpdmUiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9janBlcnMuaHRtbCNjanBlcnMiIHRpdGxlPSJKYXZhIEVFIHBlcnNwZWN0aXZlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHJvamVjdHMiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImFydGlmYWN0cyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY2plYXJwcm9qLmh0bWwjY2plYXJwcm9qIiB0aXRsZT0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cyIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGplYXIuaHRtbCN0amVhciIgdGl0bGU9IkNyZWF0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJleHBvcnRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqZXhwZWFyLmh0bWwjdGpleHBlYXIiIHRpdGxlPSJFeHBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBpbnRvIGFuIEVBUiBmaWxlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGppbXBlYXIuaHRtbCN0amltcGVhciIgdGl0bGU9IkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJ2aWV3cyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IlByb2plY3QgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9janZpZXcuaHRtbCNjanZpZXciIHRpdGxlPSJQcm9qZWN0IEV4cGxvcmVyIHZpZXcgaW4gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJQcm9qZWN0IEV4cGxvcmVyIGZpbHRlcnMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90anZpZXdmaWx0ZXJzLmh0bWwjY2p2aWV3ZmlsdGVyc0NhaXQiIHRpdGxlPSJGaWx0ZXJpbmcgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJmaWx0ZXJzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iUHJvamVjdCBFeHBsb3JlciB2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGp2aWV3ZmlsdGVycy5odG1sI2Nqdmlld2ZpbHRlcnNDYWl0IiB0aXRsZT0iRmlsdGVyaW5nIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXciLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0icHJvamVjdHMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJmaWx0ZXJpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90anZpZXdmaWx0ZXJzLmh0bWwjY2p2aWV3ZmlsdGVyc0NhaXQiIHRpdGxlPSJGaWx0ZXJpbmcgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImVudGVycHJpc2UgYXBwbGljYXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvY2plYXJwcm9qLmh0bWwjY2plYXJwcm9qIiB0aXRsZT0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRhcmdldCBzZXJ2ZXJzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGp0YXJnZXRzZXJ2ZXIuaHRtbCN0anRhcmdldHNlcnZlciIgdGl0bGU9IlNwZWNpZnlpbmcgdGFyZ2V0IHNlcnZlcnMgZm9yIEoyRUUgcHJvamVjdHMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJmYWNldHMiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jZmFjZXRzLmh0bWwjY2ZhY2V0cyIgdGl0bGU9IlByb2plY3QgZmFjZXRzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGFkZGluZ2ZhY2V0Lmh0bWwjdGFkZGluZ2ZhY2V0IiB0aXRsZT0iQWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3QiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY2hhbmdpbmcgZmFjZXQgdmVyc2lvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90Y2hhbmdlZmFjZXQuaHRtbCN0Y2hhbmdlZmFjZXQiIHRpdGxlPSJDaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSmF2YSBjb21waWxlciBsZXZlbCI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuaHRtbCN0Y2hhbmdlamF2YWxldmVsIiB0aXRsZT0iQ2hhbmdpbmcgdGhlIEphdmEgY29tcGlsZXIgdmVyc2lvbiBmb3IgYSBKYXZhIEVFIHByb2plY3QiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjeWNsaWNhbCBkZXBlbmRlbmNpZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jamNpcmNsZS5odG1sI2NqY2lyY2xlIiB0aXRsZT0iQ3ljbGljYWwgZGVwZW5kZW5jaWVzIGJldHdlZW4gSmF2YSBFRSBtb2R1bGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90amNpcmNsZWIuaHRtbCN0amNpcmNsZWIiIHRpdGxlPSJDb3JyZWN0aW5nIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iYXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jamFwcGNsaXByb2ouaHRtbCNjamFwcGNsaXByb2oiIHRpdGxlPSJBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqYXBwcHJvai5odG1sI3RqYXBwcHJvaiIgdGl0bGU9IkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZXhwb3J0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGpleHBhcHAuaHRtbCN0amV4cGFwcCIgdGl0bGU9IkV4cG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqaW1wYXBwLmh0bWwjdGppbXBhcHAiIHRpdGxlPSJJbXBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImNvbm5lY3RvciBwcm9qZWN0cyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGpyYXIuaHRtbCN0anJhciIgdGl0bGU9IkNyZWF0aW5nIGEgY29ubmVjdG9yIHByb2plY3QiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJleHBvcnRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90amV4cHJhci5odG1sI3RqZXhwcmFyIiB0aXRsZT0iRXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90amltcHJhci5odG1sI3RqaW1wcmFyIiB0aXRsZT0iSW1wb3J0aW5nIGEgY29ubmVjdG9yIHByb2plY3QgUkFSIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0idGFyZ2V0IHNlcnZlcnMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJKMkVFIGFwcGxpY2F0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqdGFyZ2V0c2VydmVyLmh0bWwjdGp0YXJnZXRzZXJ2ZXIiIHRpdGxlPSJTcGVjaWZ5aW5nIHRhcmdldCBzZXJ2ZXJzIGZvciBKMkVFIHByb2plY3RzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkphdmFTZXJ2ZXIgRmFjZXMgKEpTRikiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJwcm9qZWN0IGZhY2V0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL2NmYWNldHMuaHRtbCNjZmFjZXRzIiB0aXRsZT0iUHJvamVjdCBmYWNldHMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iZmFjZXRzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iY2hhbmdpbmcgdmVyc2lvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90Y2hhbmdlZmFjZXQuaHRtbCN0Y2hhbmdlZmFjZXQiIHRpdGxlPSJDaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkVBUiI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImZpbGVzIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJleHBvcnRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqZXhwZWFyLmh0bWwjdGpleHBlYXIiIHRpdGxlPSJFeHBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBpbnRvIGFuIEVBUiBmaWxlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGppbXBlYXIuaHRtbCN0amltcGVhciIgdGl0bGU9IkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJSQVIgZmlsZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJleHBvcnRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90amV4cHJhci5odG1sI3RqZXhwcmFyIiB0aXRsZT0iRXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90amltcHJhci5odG1sI3RqaW1wcmFyIiB0aXRsZT0iSW1wb3J0aW5nIGEgY29ubmVjdG9yIHByb2plY3QgUkFSIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iZGVwZW5kZW5jaWVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iY3ljbGVzIGJldHdlZW4gbW9kdWxlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL2NqY2lyY2xlLmh0bWwjY2pjaXJjbGUiIHRpdGxlPSJDeWNsaWNhbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBKYXZhIEVFIG1vZHVsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjb3JyZWN0aW5nIGN5Y2xpY2FsIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGpjaXJjbGViLmh0bWwjdGpjaXJjbGViIiB0aXRsZT0iQ29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgYW4gRUFSIGlzIGltcG9ydGVkIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkVBUiBmaWxlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNvcnJlY3RpbmcgY3ljbGljYWwgZGVwZW5kZW5jaWVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGpjaXJjbGViLmh0bWwjdGpjaXJjbGViIiB0aXRsZT0iQ29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgYW4gRUFSIGlzIGltcG9ydGVkIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImJ1aWxkIHZhbGlkYXRpb24iPgotICAgIDxlbnRyeSBrZXl3b3JkPSJlbmFibGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqdmFsLmh0bWwjdGp2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIGNvZGUgaW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iY29kZSB2YWxpZGF0aW9uIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90anZhbC5odG1sI3RqdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZXJyb3Igc29sdXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcnZhbGVyci5odG1sI3J2YWxlcnIiIHRpdGxlPSJDb21tb24gdmFsaWRhdGlvbiBlcnJvcnMgYW5kIHNvbHV0aW9ucyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IkoyRUUgdmFsaWRhdG9ycyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3J2YWxpZGF0b3JzLmh0bWwjcnZhbGlkYXRvcnMiIHRpdGxlPSJKMkVFIFZhbGlkYXRvcnMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNhYmxpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90anZhbGRpc2FibGUuaHRtbCN0anZhbGRpc2FibGUiIHRpdGxlPSJEaXNhYmxpbmcgdmFsaWRhdGlvbiIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNlbGVjdGluZyB2YWxpZGF0b3JzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGp2YWxzZWxlY3QuaHRtbCN0anZhbHNlbGVjdCIgdGl0bGU9IlNlbGVjdGluZyBjb2RlIHZhbGlkYXRvcnMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVycmlkaW5nIGdsb2JhbCBwcmVmZXJlbmNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqdmFsZ2xvYmFscHJlZi5odG1sI3RqdmFsZ2xvYmFscHJlZiIgdGl0bGU9Ik92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW51YWwiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90anZhbG1hbnVhbC5odG1sI3RqdmFsbWFudWFsIiB0aXRsZT0iTWFudWFsbHkgdmFsaWRhdGluZyBjb2RlIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpb24iPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqdmFsLmh0bWwjdGp2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIGNvZGUgaW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJlcnJvciBzb2x1dGlvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9ydmFsZXJyLmh0bWwjcnZhbGVyciIgdGl0bGU9IkNvbW1vbiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgc29sdXRpb25zIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSjJFRSB2YWxpZGF0b3JzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvcnZhbGlkYXRvcnMuaHRtbCNydmFsaWRhdG9ycyIgdGl0bGU9IkoyRUUgVmFsaWRhdG9ycyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRpc2FibGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqdmFsZGlzYWJsZS5odG1sI3RqdmFsZGlzYWJsZSIgdGl0bGU9IkRpc2FibGluZyB2YWxpZGF0aW9uIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2VsZWN0aW5nIHZhbGlkYXRvcnMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90anZhbHNlbGVjdC5odG1sI3RqdmFsc2VsZWN0IiB0aXRsZT0iU2VsZWN0aW5nIGNvZGUgdmFsaWRhdG9ycyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJyaWRpbmcgZ2xvYmFsIHByZWZlcmVuY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwjdGp2YWxnbG9iYWxwcmVmIiB0aXRsZT0iT3ZlcnJpZGluZyBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbnVhbCI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RqdmFsbWFudWFsLmh0bWwjdGp2YWxtYW51YWwiIHRpdGxlPSJNYW51YWxseSB2YWxpZGF0aW5nIGNvZGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhNDk1MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi1wbHVnaW5OYW1lID0gSjJFRSB0b29scyBkb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MTgwNTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjMiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICA8dG9jIGZpbGU9ImpzdF9qMmVlX3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgPC9leHRlbnNpb24+Ci0gICAJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXJpbmRleC54bWwiLz4KLSAgICA8L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jYW5ub3RhdGlvbnMuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nhbm5vdGF0aW9ucy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTZmNzI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nhbm5vdGF0aW9ucy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjamF2YWVlNSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj48dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSA1IHN1cHBvcnQgZm9yIGFubm90YXRpb25zPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoZSBnb2FsIG9mIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIDUgcGxhdGZvcm0gZGV2ZWxvcG1lbnQgaXMgdG8gbWluaW1pemUNCi10aGUgbnVtYmVyIG9mIGFydGlmYWN0cyB0aGF0IHlvdSBoYXZlIHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4sIHRoZXJlYnkgc2ltcGxpZnlpbmcNCi10aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgNSBzdXBwb3J0cyB0aGUgaW5qZWN0aW9uIG9mIGFubm90YXRpb25zDQotaW50byB5b3VyIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHlvdSBjYW4gZW1iZWQgcmVzb3VyY2VzLCBkZXBlbmRlbmNpZXMsIHNlcnZpY2VzLA0KLWFuZCBsaWZlLWN5Y2xlIG5vdGlmaWNhdGlvbnMgaW4geW91ciBzb3VyY2UgY29kZSwgd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4NCi10aGVzZSBhcnRpZmFjdHMgZWxzZXdoZXJlLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkphdmEgRUUgNTxpbmRleHRlcm0+YW5ub3RhdGlvbnM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPGNvbmJvZHk+DQotPHA+QW4gYW5ub3RhdGlvbiBpcyBhIG1vZGlmaWVyIG9yIE1ldGFkYXRhIHRhZyB0aGF0IHByb3ZpZGVzIGFkZGl0aW9uYWwgZGF0YQ0KLXRvIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzLA0KLWludGVyZmFjZXMsIGNvbnN0cnVjdG9ycywgbWV0aG9kcywgZmllbGRzLCBwYXJhbWV0ZXJzLCBhbmQgbG9jYWwgdmFyaWFibGVzLg0KLUFubm90YXRpb25zIHJlcGxhY2UgYm9pbGVycGxhdGUgY29kZSwgY29tbW9uIGNvZGUgdGhhdCBpcyByZXF1aXJlZCBieSBjZXJ0YWluDQotYXBwbGljYXRpb25zLiBGb3IgZXhhbXBsZSwgYW4gYW5ub3RhdGlvbiBjYW4gcmVwbGFjZSB0aGUgcGFpcmVkIGludGVyZmFjZQ0KLWFuZCBpbXBsZW1lbnRhdGlvbiByZXF1aXJlZCBmb3IgYSBXZWIgc2VydmljZS4gQW5ub3RhdGlvbnMgY2FuIGFsc28gcmVwbGFjZQ0KLWFkZGl0aW9uYWwgZmlsZXMgdGhhdCBwcm9ncmFtcyByZXF1aXJlLCB3aGljaCBhcmUgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5LiBCeQ0KLXVzaW5nIGFuIGFubm90YXRpb24sIHRoaXMgc2VwYXJhdGUgZmlsZSBpcyBubyBsb25nZXIgcmVxdWlyZWQuIEZvciBleGFtcGxlLA0KLWFubm90YXRpb25zIGNhbiByZXBsYWNlIHRoZSBuZWVkIGZvciBhIHNlcGFyYXRlbHkgbWFpbnRhaW5lZCBkZXBsb3ltZW50IGRlc2NyaXB0b3INCi1mb3IgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YUJlYW5zIj5KYXZhQmVhbnM8L3RtPi4gPC9wPg0KLTxwPkFubm90YXRpb25zPHVsPg0KLTxsaT5SZXBsYWNlIGRlc2NyaXB0b3JzIGZvciBtb3N0IHB1cnBvc2VzPC9saT4NCi08bGk+UmVtb3ZlIHRoZSBuZWVkIGZvciBtYXJrZXIgaW50ZXJmYWNlcyAobGlrZSBqYXZhLnJtaS5SZW1vdGUpPC9saT4NCi08bGk+QWxsb3cgYXBwbGljYXRpb24gc2V0dGluZ3MgdG8gYmUgdmlzaWJsZSBpbiB0aGUgY29tcG9uZW50IHRoZXkgYWZmZWN0PC9saT4NCi08L3VsPjwvcD4NCi08cD5KYXZhIEVFIDUgcHJvdmlkZXMgYW5ub3RhdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgdGFza3MsIGFtb25nIG90aGVyczo8dWw+DQotPGxpPkRldmVsb3BpbmcgRW50ZXJwcmlzZSBKYXZhQmVhbiBhcHBsaWNhdGlvbnM8L2xpPg0KLTxsaT5EZWZpbmluZyBhbmQgdXNpbmcgV2ViIHNlcnZpY2VzPC9saT4NCi08bGk+TWFwcGluZyBKYXZhIHRlY2hub2xvZ3kgY2xhc3NlcyB0byBYTUw8L2xpPg0KLTxsaT5NYXBwaW5nIEphdmEgdGVjaG5vbG9neSBjbGFzc2VzIHRvIGRhdGFiYXNlczwvbGk+DQotPGxpPk1hcHBpbmcgbWV0aG9kcyB0byBvcGVyYXRpb25zPC9saT4NCi08bGk+U3BlY2lmeWluZyBleHRlcm5hbCBkZXBlbmRlbmNpZXM8L2xpPg0KLTxsaT5TcGVjaXJ5aW5nIGRlcGxveW1lbnQgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBzZWN1cml0eSBhdHRyaWJ1dGVzPC9saT4NCi08L3VsPjwvcD4NCi08cD48dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUNCi01IGRlZmluZXMgYSBudW1iZXIgb2YgYW5ub3RhdGlvbnMgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byB5b3VyIHNvdXJjZSBjb2RlLg0KLVRvIGRlY2xhcmUgYW4gYW5ub3RhdGlvbiwgeW91IHNpbXBseSBwcmVjZWRlIHRoZSBrZXl3b3JkIHdpdGggYW4gImF0IiBzaWduDQotKEApLiA8Y29kZWJsb2NrPg0KLXBhY2thZ2UgY29tLmlibS5jb3VudGVyOw0KLQ0KLWltcG9ydCBqYXZheC5lamIuU3RhdGVsZXNzOw0KLQ0KLUBTdGF0ZWxlc3MNCi0NCi1wdWJsaWMgY2xhc3MgQ291bnRlckJlYW4gew0KLQ0KLX08L2NvZGVibG9jaz48L3A+DQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhdGVnb3JpZXMgb2YgYW5ub3RhdGlvbnMgdGhhdCA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRQ0KLTUgc3VwcG9ydHMsIHNlZSA8eHJlZiBocmVmPSJjdHlwZXNvZmFubm8uZGl0YSI+VHlwZXMgb2YgYW5ub3RhdGlvbnM8L3hyZWY+LjwvcD4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nhbm5vdGF0aW9ucy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2Fubm90YXRpb25zLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOWNlMWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2Fubm90YXRpb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSmF2YSBFRSA1IHN1cHBvcnQgZm9yIGFubm90YXRpb25zIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBnb2FsIG9mIEphdmEgRUUgNSBwbGF0Zm9ybSBkZXZlbG9wbWVudCBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGFydGlmYWN0cyB0aGF0IHlvdSBoYXZlIHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4sIHRoZXJlYnkgc2ltcGxpZnlpbmcgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuIEphdmEgRUUgNSBzdXBwb3J0cyB0aGUgaW5qZWN0aW9uIG9mIGFubm90YXRpb25zIGludG8geW91ciBzb3VyY2UgY29kZSwgc28gdGhhdCB5b3UgY2FuIGVtYmVkIHJlc291cmNlcywgZGVwZW5kZW5jaWVzLCBzZXJ2aWNlcywgYW5kIGxpZmUtY3ljbGUgbm90aWZpY2F0aW9ucyBpbiB5b3VyIHNvdXJjZSBjb2RlLCB3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiB0aGVzZSBhcnRpZmFjdHMgZWxzZXdoZXJlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgZ29hbCBvZiBKYXZhIEVFIDUgcGxhdGZvcm0gZGV2ZWxvcG1lbnQgaXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBhcnRpZmFjdHMgdGhhdCB5b3UgaGF2ZSB0byBjcmVhdGUgYW5kIG1haW50YWluLCB0aGVyZWJ5IHNpbXBsaWZ5aW5nIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLiBKYXZhIEVFIDUgc3VwcG9ydHMgdGhlIGluamVjdGlvbiBvZiBhbm5vdGF0aW9ucyBpbnRvIHlvdXIgc291cmNlIGNvZGUsIHNvIHRoYXQgeW91IGNhbiBlbWJlZCByZXNvdXJjZXMsIGRlcGVuZGVuY2llcywgc2VydmljZXMsIGFuZCBsaWZlLWN5Y2xlIG5vdGlmaWNhdGlvbnMgaW4geW91ciBzb3VyY2UgY29kZSwgd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gdGhlc2UgYXJ0aWZhY3RzIGVsc2V3aGVyZS4iIC8+Ci08bWV0YSBjb250ZW50PSJKYXZhIEVFIDUsIGFubm90YXRpb25zIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSA1LCBhbm5vdGF0aW9ucyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamF2YWVlNS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjamF2YWVlNSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkphdmEgRUUgNSBzdXBwb3J0IGZvciBhbm5vdGF0aW9uczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2phdmFlZTUiPjxhIG5hbWU9ImNqYXZhZWU1Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5KYXZhIEVFIDUgc3VwcG9ydCBmb3IgYW5ub3RhdGlvbnM8L2gxPgotCi0KLQotPGRpdj48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGUgZ29hbCBvZiBKYXZh4oSiIEVFIDUgcGxhdGZvcm0gZGV2ZWxvcG1lbnQgaXMgdG8gbWluaW1pemUKLXRoZSBudW1iZXIgb2YgYXJ0aWZhY3RzIHRoYXQgeW91IGhhdmUgdG8gY3JlYXRlIGFuZCBtYWludGFpbiwgdGhlcmVieSBzaW1wbGlmeWluZwotdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuIEphdmEgRUUgNSBzdXBwb3J0cyB0aGUgaW5qZWN0aW9uIG9mIGFubm90YXRpb25zCi1pbnRvIHlvdXIgc291cmNlIGNvZGUsIHNvIHRoYXQgeW91IGNhbiBlbWJlZCByZXNvdXJjZXMsIGRlcGVuZGVuY2llcywgc2VydmljZXMsCi1hbmQgbGlmZS1jeWNsZSBub3RpZmljYXRpb25zIGluIHlvdXIgc291cmNlIGNvZGUsIHdpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluCi10aGVzZSBhcnRpZmFjdHMgZWxzZXdoZXJlLjwvcD4KLQotPHA+QW4gYW5ub3RhdGlvbiBpcyBhIG1vZGlmaWVyIG9yIE1ldGFkYXRhIHRhZyB0aGF0IHByb3ZpZGVzIGFkZGl0aW9uYWwgZGF0YQotdG8gSmF2YSBjbGFzc2VzLAotaW50ZXJmYWNlcywgY29uc3RydWN0b3JzLCBtZXRob2RzLCBmaWVsZHMsIHBhcmFtZXRlcnMsIGFuZCBsb2NhbCB2YXJpYWJsZXMuCi1Bbm5vdGF0aW9ucyByZXBsYWNlIGJvaWxlcnBsYXRlIGNvZGUsIGNvbW1vbiBjb2RlIHRoYXQgaXMgcmVxdWlyZWQgYnkgY2VydGFpbgotYXBwbGljYXRpb25zLiBGb3IgZXhhbXBsZSwgYW4gYW5ub3RhdGlvbiBjYW4gcmVwbGFjZSB0aGUgcGFpcmVkIGludGVyZmFjZQotYW5kIGltcGxlbWVudGF0aW9uIHJlcXVpcmVkIGZvciBhIFdlYiBzZXJ2aWNlLiBBbm5vdGF0aW9ucyBjYW4gYWxzbyByZXBsYWNlCi1hZGRpdGlvbmFsIGZpbGVzIHRoYXQgcHJvZ3JhbXMgcmVxdWlyZSwgd2hpY2ggYXJlIG1haW50YWluZWQgc2VwYXJhdGVseS4gQnkKLXVzaW5nIGFuIGFubm90YXRpb24sIHRoaXMgc2VwYXJhdGUgZmlsZSBpcyBubyBsb25nZXIgcmVxdWlyZWQuIEZvciBleGFtcGxlLAotYW5ub3RhdGlvbnMgY2FuIHJlcGxhY2UgdGhlIG5lZWQgZm9yIGEgc2VwYXJhdGVseSBtYWludGFpbmVkIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotZm9yIEphdmFCZWFuc+KEoi4gPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5Bbm5vdGF0aW9uczx1bD4KLTxsaT5SZXBsYWNlIGRlc2NyaXB0b3JzIGZvciBtb3N0IHB1cnBvc2VzPC9saT4KLQotPGxpPlJlbW92ZSB0aGUgbmVlZCBmb3IgbWFya2VyIGludGVyZmFjZXMgKGxpa2UgamF2YS5ybWkuUmVtb3RlKTwvbGk+Ci0KLTxsaT5BbGxvdyBhcHBsaWNhdGlvbiBzZXR0aW5ncyB0byBiZSB2aXNpYmxlIGluIHRoZSBjb21wb25lbnQgdGhleSBhZmZlY3Q8L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InAiPkphdmEgRUUgNSBwcm92aWRlcyBhbm5vdGF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyB0YXNrcywgYW1vbmcgb3RoZXJzOjx1bD4KLTxsaT5EZXZlbG9waW5nIEVudGVycHJpc2UgSmF2YUJlYW4gYXBwbGljYXRpb25zPC9saT4KLQotPGxpPkRlZmluaW5nIGFuZCB1c2luZyBXZWIgc2VydmljZXM8L2xpPgotCi08bGk+TWFwcGluZyBKYXZhIHRlY2hub2xvZ3kgY2xhc3NlcyB0byBYTUw8L2xpPgotCi08bGk+TWFwcGluZyBKYXZhIHRlY2hub2xvZ3kgY2xhc3NlcyB0byBkYXRhYmFzZXM8L2xpPgotCi08bGk+TWFwcGluZyBtZXRob2RzIHRvIG9wZXJhdGlvbnM8L2xpPgotCi08bGk+U3BlY2lmeWluZyBleHRlcm5hbCBkZXBlbmRlbmNpZXM8L2xpPgotCi08bGk+U3BlY2lyeWluZyBkZXBsb3ltZW50IGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgc2VjdXJpdHkgYXR0cmlidXRlczwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0icCI+SmF2YSBFRQotNSBkZWZpbmVzIGEgbnVtYmVyIG9mIGFubm90YXRpb25zIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8geW91ciBzb3VyY2UgY29kZS4KLVRvIGRlY2xhcmUgYW4gYW5ub3RhdGlvbiwgeW91IHNpbXBseSBwcmVjZWRlIHRoZSBrZXl3b3JkIHdpdGggYW4gImF0IiBzaWduCi0oQCkuIDxwcmU+Ci1wYWNrYWdlIGNvbS5pYm0uY291bnRlcjsKLQotaW1wb3J0IGphdmF4LmVqYi5TdGF0ZWxlc3M7Ci0KLUBTdGF0ZWxlc3MKLQotcHVibGljIGNsYXNzIENvdW50ZXJCZWFuIHsKLQotfTwvcHJlPgotPC9kaXY+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXRlZ29yaWVzIG9mIGFubm90YXRpb25zIHRoYXQgSmF2YSBFRQotNSBzdXBwb3J0cywgc2VlIDxhIGhyZWY9ImN0eXBlc29mYW5uby5odG1sIj5UeXBlcyBvZiBhbm5vdGF0aW9uczwvYT4uPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90ZGVmaW5pbmdhbm5vdGF0aW9ucy5odG1sIj5EZWZpbmluZyBhbmQgdXNpbmcgYW5ub3RhdGlvbnM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1Zb3UgY2FuIHVzZSB0aGUgQEludGVyZmFjZSBhbm5vdGF0aW9uIHRvIGRlZmluZSB5b3VyIG93biBhbm5vdGF0aW9uIGRlZmluaXRpb24uPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvY2phdmFlZTUuaHRtbCIgdGl0bGU9IlRoZSBKYXZhIEVFIDUgcHJvZ3JhbW1pbmcgbW9kZWwgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBKYXZhIGFwcGxpY2F0aW9ucy4iPkRldmVsb3BpbmcgSmF2YSBFRSA1IEFwcGxpY2F0aW9uczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jZmFjZXRzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jZmFjZXRzLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYjA1NzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2ZhY2V0cy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjZmFjZXRzIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPlByb2plY3QgZmFjZXRzPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPkZhY2V0cyBkZWZpbmUgY2hhcmFjdGVyaXN0aWNzIGFuZCByZXF1aXJlbWVudHMNCi1mb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiA8L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5KYXZhIEVFPGluZGV4dGVybT5wcm9qZWN0IGZhY2V0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+SmF2YVNlcnZlciBGYWNlcyAoSlNGKTxpbmRleHRlcm0+cHJvamVjdCBmYWNldHM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPnByb2plY3RzPGluZGV4dGVybT5mYWNldHM8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5IG91dHB1dGNsYXNzPSJpZF9jb25ib2R5Ij4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+DQotPHAgaWQ9ImFib3V0ZmFjZXQiPldoZW4geW91IGFkZCBhIGZhY2V0IHRvIGEgcHJvamVjdCwgdGhhdCBwcm9qZWN0IGlzIGNvbmZpZ3VyZWQNCi10byBwZXJmb3JtIGEgY2VydGFpbiB0YXNrLCBmdWxmaWxsIGNlcnRhaW4gcmVxdWlyZW1lbnRzLCBvciBoYXZlIGNlcnRhaW4gY2hhcmFjdGVyaXN0aWNzLg0KLUZvciBleGFtcGxlLCB0aGUgRUFSIGZhY2V0IHNldHMgdXAgYSBwcm9qZWN0IHRvIGZ1bmN0aW9uIGFzIGFuIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbiBieSBhZGRpbmcgYSBkZXBsb3ltZW50IGRlc2NyaXB0b3IgYW5kIHNldHRpbmcgdXAgdGhlIHByb2plY3Qncw0KLWNsYXNzcGF0aC48L3A+DQotPHA+WW91IGNhbiBhZGQgZmFjZXRzIG9ubHkgdG8gSmF2YSBFRSBwcm9qZWN0cyBhbmQgb3RoZXIgdHlwZXMgb2YgcHJvamVjdHMNCi10aGF0IGFyZSBiYXNlZCBvbiBKMkVFIHByb2plY3RzLCBzdWNoIGFzIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMsDQotZHluYW1pYyBXZWIgcHJvamVjdHMsIGFuZCBFSkIgcHJvamVjdHMuIFlvdSBjYW5ub3QgYWRkIGZhY2V0cyB0byBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHByb2plY3QNCi1vciBwbHVnLWluIHByb2plY3QsIGZvciBleGFtcGxlLiBUeXBpY2FsbHksIGEgZmFjZXQtZW5hYmxlZCBwcm9qZWN0IGhhcyBhdA0KLWxlYXN0IG9uZSBmYWNldCB3aGVuIGl0IGlzIGNyZWF0ZWQsIGFsbG93aW5nIHlvdSB0byBhZGQgbW9yZSBmYWNldHMgaWYgbmVjZXNzYXJ5Lg0KLUZvciBleGFtcGxlLCBhIG5ldyBFSkIgcHJvamVjdCBoYXMgdGhlIEVKQiBNb2R1bGUgZmFjZXQuIFlvdSBjYW4gdGhlbiBhZGQNCi1vdGhlciBmYWNldHMgdG8gdGhpcyBwcm9qZWN0IGxpa2UgdGhlIEVKQkRvY2xldCAoWERvY2xldCkgZmFjZXQuIFRvIGFkZCBhDQotZmFjZXQgdG8gYSBwcm9qZWN0LCBzZWUgPHhyZWYgaHJlZj0idGFkZGluZ2ZhY2V0LmRpdGEiPjwveHJlZj4uPC9wPg0KLTxwPlNvbWUgZmFjZXRzIHJlcXVpcmUgb3RoZXIgZmFjZXRzIGFzIHByZXJlcXVpc2l0ZXMuIE90aGVyIGZhY2V0cyBjYW5ub3QNCi1iZSBpbiB0aGUgc2FtZSBwcm9qZWN0IHRvZ2V0aGVyLiBGb3IgZXhhbXBsZSwgeW91IGNhbm5vdCBhZGQgdGhlIER5bmFtaWMgV2ViDQotTW9kdWxlIGZhY2V0IHRvIGFuIEVKQiBwcm9qZWN0IGJlY2F1c2UgdGhlIEVKQiBwcm9qZWN0IGFscmVhZHkgaGFzIHRoZSBFSkINCi1Nb2R1bGUgZmFjZXQuIFNvbWUgZmFjZXRzIGNhbiBiZSByZW1vdmVkIGZyb20gYSBwcm9qZWN0IGFuZCBvdGhlcnMgY2Fubm90LjwvcD4NCi08cD5GYWNldHMgYWxzbyBoYXZlIHZlcnNpb24gbnVtYmVycy4gWW91IGNhbiBjaGFuZ2UgdGhlIHZlcnNpb24gbnVtYmVycyBvZg0KLWZhY2V0cyBhcyBsb25nIGFzIHlvdSBzdGF5IHdpdGhpbiB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgZmFjZXRzLiBUbyBjaGFuZ2UNCi10aGUgdmVyc2lvbiBudW1iZXIgb2YgYSBmYWNldCwgc2VlIDx4cmVmIGhyZWY9InRjaGFuZ2VmYWNldC5kaXRhIj48L3hyZWY+LjwvcD4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+DQotPC9jb25ib2R5Pg0KLTwvY29uY2VwdD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jZmFjZXRzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jZmFjZXRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOTU4ZTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2ZhY2V0cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUHJvamVjdCBmYWNldHMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iRmFjZXRzIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cyBmb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJGYWNldHMgZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzIGZvciBKYXZhIEVFIHByb2plY3RzIGFuZCBhcmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb24uIiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSwgcHJvamVjdCBmYWNldHMsIEphdmFTZXJ2ZXIgRmFjZXMgKEpTRiksIHByb2plY3RzLCBmYWNldHMsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSwgcHJvamVjdCBmYWNldHMsIEphdmFTZXJ2ZXIgRmFjZXMgKEpTRiksIHByb2plY3RzLCBmYWNldHMsIG92ZXJ2aWV3IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGplYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGpyYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RhZGRpbmdmYWNldC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGNoYW5nZWphdmFsZXZlbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGNoYW5nZWZhY2V0Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2ZhY2V0cyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlByb2plY3QgZmFjZXRzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjZmFjZXRzIj48YSBuYW1lPSJjZmFjZXRzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5Qcm9qZWN0IGZhY2V0czwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF9jb25ib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5GYWNldHMgZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzCi1mb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiA8L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwIGlkPSJjZmFjZXRzX19hYm91dGZhY2V0Ij48YSBuYW1lPSJjZmFjZXRzX19hYm91dGZhY2V0Ij48IS0tIC0tPjwvYT5XaGVuIHlvdSBhZGQgYSBmYWNldCB0byBhIHByb2plY3QsIHRoYXQgcHJvamVjdCBpcyBjb25maWd1cmVkCi10byBwZXJmb3JtIGEgY2VydGFpbiB0YXNrLCBmdWxmaWxsIGNlcnRhaW4gcmVxdWlyZW1lbnRzLCBvciBoYXZlIGNlcnRhaW4gY2hhcmFjdGVyaXN0aWNzLgotRm9yIGV4YW1wbGUsIHRoZSBFQVIgZmFjZXQgc2V0cyB1cCBhIHByb2plY3QgdG8gZnVuY3Rpb24gYXMgYW4gZW50ZXJwcmlzZQotYXBwbGljYXRpb24gYnkgYWRkaW5nIGEgZGVwbG95bWVudCBkZXNjcmlwdG9yIGFuZCBzZXR0aW5nIHVwIHRoZSBwcm9qZWN0J3MKLWNsYXNzcGF0aC48L3A+Ci0KLTxwPllvdSBjYW4gYWRkIGZhY2V0cyBvbmx5IHRvIEphdmEgRUUgcHJvamVjdHMgYW5kIG90aGVyIHR5cGVzIG9mIHByb2plY3RzCi10aGF0IGFyZSBiYXNlZCBvbiBKMkVFIHByb2plY3RzLCBzdWNoIGFzIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMsCi1keW5hbWljIFdlYiBwcm9qZWN0cywgYW5kIEVKQiBwcm9qZWN0cy4gWW91IGNhbm5vdCBhZGQgZmFjZXRzIHRvIGEgSmF2YeKEoiBwcm9qZWN0Ci1vciBwbHVnLWluIHByb2plY3QsIGZvciBleGFtcGxlLiBUeXBpY2FsbHksIGEgZmFjZXQtZW5hYmxlZCBwcm9qZWN0IGhhcyBhdAotbGVhc3Qgb25lIGZhY2V0IHdoZW4gaXQgaXMgY3JlYXRlZCwgYWxsb3dpbmcgeW91IHRvIGFkZCBtb3JlIGZhY2V0cyBpZiBuZWNlc3NhcnkuCi1Gb3IgZXhhbXBsZSwgYSBuZXcgRUpCIHByb2plY3QgaGFzIHRoZSBFSkIgTW9kdWxlIGZhY2V0LiBZb3UgY2FuIHRoZW4gYWRkCi1vdGhlciBmYWNldHMgdG8gdGhpcyBwcm9qZWN0IGxpa2UgdGhlIEVKQkRvY2xldCAoWERvY2xldCkgZmFjZXQuIFRvIGFkZCBhCi1mYWNldCB0byBhIHByb2plY3QsIHNlZSA8YSBocmVmPSJ0YWRkaW5nZmFjZXQuaHRtbCIgdGl0bGU9IlRoaXMgdG9waWMgZXhwbGFpbnMgaG93IHRvIGFkZCBhIGZhY2V0JiMxMDt0byBhbiBleGlzdGluZyBwcm9qZWN0IGluIHlvdXIgd29ya3NwYWNlLiI+QWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3Q8L2E+LjwvcD4KLQotPHA+U29tZSBmYWNldHMgcmVxdWlyZSBvdGhlciBmYWNldHMgYXMgcHJlcmVxdWlzaXRlcy4gT3RoZXIgZmFjZXRzIGNhbm5vdAotYmUgaW4gdGhlIHNhbWUgcHJvamVjdCB0b2dldGhlci4gRm9yIGV4YW1wbGUsIHlvdSBjYW5ub3QgYWRkIHRoZSBEeW5hbWljIFdlYgotTW9kdWxlIGZhY2V0IHRvIGFuIEVKQiBwcm9qZWN0IGJlY2F1c2UgdGhlIEVKQiBwcm9qZWN0IGFscmVhZHkgaGFzIHRoZSBFSkIKLU1vZHVsZSBmYWNldC4gU29tZSBmYWNldHMgY2FuIGJlIHJlbW92ZWQgZnJvbSBhIHByb2plY3QgYW5kIG90aGVycyBjYW5ub3QuPC9wPgotCi08cD5GYWNldHMgYWxzbyBoYXZlIHZlcnNpb24gbnVtYmVycy4gWW91IGNhbiBjaGFuZ2UgdGhlIHZlcnNpb24gbnVtYmVycyBvZgotZmFjZXRzIGFzIGxvbmcgYXMgeW91IHN0YXkgd2l0aGluIHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBmYWNldHMuIFRvIGNoYW5nZQotdGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgZmFjZXQsIHNlZSA8YSBocmVmPSJ0Y2hhbmdlZmFjZXQuaHRtbCIgdGl0bGU9IllvdSBjYW4gY2hhbmdlIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQmIzEwO2luIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGVkaXRpbmcgdGhlIGZhY2V0cyBmb3IgdGhlIHByb2plY3QuIj5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0PC9hPi48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiB0aXRsZT0iQW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRpZXMgdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amVhci5odG1sIiB0aXRsZT0iVXNpbmcgdGhlIHdpemFyZCB0byBjcmVhdGUgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGFsbG93cyB5b3UgdG8gcGFja2FnZSBtYW55IHdlYiBhcHBsaWNhdGlvbnMgYW5kIG1vZHVsZXMgaW4gYSBwcm9qZWN0IGFuZCBkZXBsb3kgdGhlc2UgbW9kdWxlcyBhcyBhIEoyRUUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbi4iPkNyZWF0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiB0aXRsZT0iWW91IGNhbiB1c2UgYSB3aXphcmQgdG8gY3JlYXRlIGEgbmV3IGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGFuZCBhZGQgaXQgdG8gYSBuZXcgb3IgZXhpc3RpbmcgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LiI+Q3JlYXRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Q8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anJhci5odG1sIiB0aXRsZT0iQSBjb25uZWN0b3IgaXMgYSBKMkVFIHN0YW5kYXJkIGV4dGVuc2lvbiBtZWNoYW5pc20gZm9yIGNvbnRhaW5lcnMgdG8gcHJvdmlkZSBjb25uZWN0aXZpdHkgdG8gZW50ZXJwcmlzZSBpbmZvcm1hdGlvbiBzeXN0ZW1zIChFSVNzKS4iPkNyZWF0aW5nIGEgY29ubmVjdG9yIHByb2plY3Q8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90YWRkaW5nZmFjZXQuaHRtbCIgdGl0bGU9IlRoaXMgdG9waWMgZXhwbGFpbnMgaG93IHRvIGFkZCBhIGZhY2V0IHRvIGFuIGV4aXN0aW5nIHByb2plY3QgaW4geW91ciB3b3Jrc3BhY2UuIj5BZGRpbmcgYSBmYWNldCB0byBhIEphdmEgRUUgcHJvamVjdDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY2hhbmdlIHRoZSB2ZXJzaW9uIG9mIEphdmEgdXNlZCBpbiBhIEphdmEgRUUgcHJvamVjdCBieSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIEphdmEgZmFjZXQuIj5DaGFuZ2luZyB0aGUgSmF2YSBjb21waWxlciB2ZXJzaW9uIGZvciBhIEphdmEgRUUgcHJvamVjdDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RjaGFuZ2VmYWNldC5odG1sIiB0aXRsZT0iWW91IGNhbiBjaGFuZ2UgdGhlIHZlcnNpb24gb2YgYSBmYWNldCBpbiBhIEphdmEgRUUgcHJvamVjdCBieSBlZGl0aW5nIHRoZSBmYWNldHMgZm9yIHRoZSBwcm9qZWN0LiI+Q2hhbmdpbmcgdGhlIHZlcnNpb24gb2YgYSBmYWNldDwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFwcGNsaXByb2ouZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXBwY2xpcHJvai5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmQ0NGEwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXBwY2xpcHJvai5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjamFwcGNsaXByb2oiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBjb250YWluDQotcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zIHNvIHRoZSBwcm9qZWN0IGNhbiBiZW5lZml0IGZyb20NCi1hIHNlcnZlcidzIHRvb2xzLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0czxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPkphdmEgRUU8aW5kZXh0ZXJtPmFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Y29uYm9keSBvdXRwdXRjbGFzcz0iaWRfY29uYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwPiBBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgY29udGFpbiB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgYXBwbGljYXRpb24NCi1jbGllbnQgbW9kdWxlcy4gQW4gYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZSBpcyB1c2VkIHRvIGNvbnRhaW4gYSBmdWxsLWZ1bmN0aW9uDQotY2xpZW50IDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGFwcGxpY2F0aW9uIChub24gV2ViLWJhc2VkKSB0aGF0IGNvbm5lY3RzIHRvIGFuZA0KLXVzZXMgdGhlIEphdmEgRUUgcmVzb3VyY2VzIGRlZmluZWQgaW4geW91ciBzZXJ2ZXIuIFdoZW4geW91IHBsYWNlIHRoZSBjbGllbnQNCi1jb2RlIGluIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBtb2R1bGUgaW5zdGVhZCBvZiBhIHNpbXBsZSBKQVIgZmlsZSwgdGhlIGFwcGxpY2F0aW9uDQotY2xpZW50IGJlbmVmaXRzIGZyb20gdGhlIHNlcnZlcidzIHJlc291cmNlcyAoaXQgZG9lcyBub3QgbmVlZCB0byByZS1zcGVjaWZ5DQotdGhlIGNsYXNzIHBhdGggdG8gSmF2YSBFRSBhbmQgc2VydmVyIEpBUiBmaWxlcykgYXMgd2VsbCBhcyBmcm9tIGVhc2llciBKTkRJDQotbG9va3VwICh0aGUgY2xpZW50IGNvbnRhaW5lciBmaWxscyBpbiB0aGUgaW5pdGlhbCBjb250ZXh0IGFuZCBvdGhlciBwYXJhbWV0ZXJzKS4NCi1UaGUgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYWxsb3dzIHlvdSB0byB3b3JrIGFzIGlmIHlvdSBhcmUgY3JlYXRpbmcgYQ0KLXN0YW5kYWxvbmUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYXBwbGljYXRpb24gaW4gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm9qZWN0LjwvcD4NCi08cD5BbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBlbmFibGVzIHlvdSB0byBkbyB0aGUgZm9sbG93aW5nIHRoaW5nczo8L3A+DQotPHVsPg0KLTxsaT5EZXZlbG9wIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoZSBjbGllbnQgbW9kdWxlPC9saT4NCi08bGk+U2V0IHRoZSBhcHBsaWNhdGlvbiBjbGllbnQgZGVwbG95bWVudCBkZXNjcmlwdG9yPC9saT4NCi08bGk+VGVzdCB0aGUgYXBwbGljYXRpb24gY2xpZW50PC9saT4NCi08L3VsPg0KLTxwPkxpa2UgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcHJvamVjdHMsIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBjb250YWluIHRoZQ0KLXJlc291cmNlcyBuZWVkZWQgZm9yIGFwcGxpY2F0aW9uIGNsaWVudHMsIGluY2x1ZGluZyA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzcw0KLWZpbGVzLiBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QsIHRoZSBlbnZpcm9ubWVudCBpcw0KLXNldCB1cCBmb3IgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gZGV2ZWxvcG1lbnQuIEEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYnVpbGRlciBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2plY3QNCi1zbyB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gc291cmNlIGNhbiBiZSBpbmNyZW1lbnRhbGx5IGNvbXBpbGVkIGFzIGl0IGlzIHVwZGF0ZWQuDQotVGhlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlIGhpZXJhcmNoeQ0KLWFuZCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gZWxlbWVudHMuDQotVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXB0IGN1cnJlbnQgYXMgY2hhbmdlcyBhcmUgbWFkZSwgYW5kIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBidWlsZGVyDQotd2lsbCBpbmNyZW1lbnRhbGx5IGNvbXBpbGUgdGhlIHJlc291cmNlcyB3aXRoaW4gdGhlc2UgcHJvamVjdHMgYXMgdGhlIHJlc291cmNlcw0KLWFyZSB1cGRhdGVkLjwvcD4NCi08cD5JbiB0aGUgd29ya2JlbmNoLCBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgYXJlIGFsd2F5cyByZWZlcmVuY2VkIGJ5DQotZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiAoRUFSKSBwcm9qZWN0cy4gV2hlbiB5b3UgY3JlYXRlIGFuIGFwcGxpY2F0aW9uIGNsaWVudA0KLXByb2plY3QsIHlvdSBzcGVjaWZ5IHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgdG8gd2hpY2ggdGhlIGFwcGxpY2F0aW9uDQotY2xpZW50IHByb2plY3QgYmVsb25ncy4gQSBtb2R1bGUgZWxlbWVudCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSA8Y29kZXBoPmFwcGxpY2F0aW9uLnhtbDwvY29kZXBoPiBkZXBsb3ltZW50DQotZGVzY3JpcHRvciBmb3IgdGhlIEVBUiBwcm9qZWN0LjwvcD4NCi08cD5BbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBpcyBkZXBsb3llZCBhcyBhIEpBUiBmaWxlLiBUaGlzIGFwcGxpY2F0aW9uDQotY2xpZW50IEpBUiBmaWxlIGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB0aGUgYXBwbGljYXRpb24sIGluY2x1ZGluZyA8dG0NCi10bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzcw0KLWZpbGVzLCBhbmQgZGVwbG95bWVudCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGFuZCBhbnkgbWV0YS1kYXRhIGV4dGVuc2lvbnMNCi1hbmQgYmluZGluZ3MgZmlsZXMuPC9wPg0KLTxwPkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBhcmUgdHlwaWNhbGx5IHJ1biBvbiBuZXR3b3JrZWQgY2xpZW50IHN5c3RlbXMNCi1jb25uZWN0ZWQgdG8gSmF2YSBFRSAoRUpCKSBzZXJ2ZXJzLiBUaGUgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBhcHBsaWNhdGlvbg0KLWNsaWVudCBpcyBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IG1haW4tY2xhc3MsIHdoaWNoIGlzIHNpbXBseSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsYXNzDQotdGhhdCBjb250YWlucyBhIHN0YXRpYyBtYWluIG1ldGhvZC4gVGhlIGNsYXNzIGlzIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdA0KLWZpbGUgb2YgdGhlIGNsaWVudCBtb2R1bGUuIDwvcD4NCi08cD5BIEphdmEgRUUgYXBwbGljYXRpb24gY2xpZW50IGNvbnRhaW5lciBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEphdmEgRUUgc2VydmljZQ0KLShKTkRJIG5hbWluZyBzZXJ2aWNlcywgZGVwbG95bWVudCBzZXJ2aWNlcywgdHJhbnNhY3Rpb24gc2VydmljZXMsIGFuZCBzZWN1cml0eQ0KLXNlcnZpY2VzKSBhbmQgY29tbXVuaWNhdGlvbnMgQVBJcyAoaW50ZXJuZXQgcHJvdG9jb2xzLCBSZW1vdGUgTWV0aG9kIEludm9jYXRpb24NCi1wcm90b2NvbHMsIE9iamVjdCBNYW5hZ2VtZW50IEdyb3VwIHByb3RvY29scywgTWVzc2FnaW5nIHByb3RvY29scywgYW5kIGRhdGENCi1mb3JtYXRzKS48L3A+DQotPHA+QnkgZGVmYXVsdCwgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gb25lIGZvbGRlciBuYW1lZCA8dWljb250cm9sPmFwcENsaWVudE1vZHVsZTwvdWljb250cm9sPiwNCi13aGljaCBjb250YWlucyBib3RoIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHNvdXJjZSBjb2RlIGFuZCBjb21waWxlZCA8Y29kZXBoPi5jbGFzczwvY29kZXBoPiBmaWxlcywNCi1hbG9uZyB3aXRoIGFsbCB0aGUgbWV0YS1kYXRhIGZpbGVzIGluIHRoZSA8dWljb250cm9sPk1FVEEtSU5GPC91aWNvbnRyb2w+IHN1YmZvbGRlci48L3A+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPg0KLTwvY29uYm9keT4NCi08L2NvbmNlcHQ+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2phcHBjbGlwcm9qLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFwcGNsaXByb2ouaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0ODc3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFwcGNsaXByb2ouaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zIHNvIHRoZSBwcm9qZWN0IGNhbiBiZW5lZml0IGZyb20gYSBzZXJ2ZXIncyB0b29scy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zIHNvIHRoZSBwcm9qZWN0IGNhbiBiZW5lZml0IGZyb20gYSBzZXJ2ZXIncyB0b29scy4iIC8+Ci08bWV0YSBjb250ZW50PSJhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMsIG92ZXJ2aWV3LCBKYXZhIEVFIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iYXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzLCBvdmVydmlldywgSmF2YSBFRSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamFyY2guaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGpleHBhcHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqaW1wYXBwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2phcHBjbGlwcm9qIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjamFwcGNsaXByb2oiPjxhIG5hbWU9ImNqYXBwY2xpcHJvaiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX2NvbmJvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBjb250YWluCi1wcm9ncmFtcyB0aGF0IHJ1biBvbiBuZXR3b3JrZWQgY2xpZW50IHN5c3RlbXMgc28gdGhlIHByb2plY3QgY2FuIGJlbmVmaXQgZnJvbQotYSBzZXJ2ZXIncyB0b29scy48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwPiBBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgY29udGFpbiB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgYXBwbGljYXRpb24KLWNsaWVudCBtb2R1bGVzLiBBbiBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlIGlzIHVzZWQgdG8gY29udGFpbiBhIGZ1bGwtZnVuY3Rpb24KLWNsaWVudCBKYXZh4oSiIGFwcGxpY2F0aW9uIChub24gV2ViLWJhc2VkKSB0aGF0IGNvbm5lY3RzIHRvIGFuZAotdXNlcyB0aGUgSmF2YSBFRSByZXNvdXJjZXMgZGVmaW5lZCBpbiB5b3VyIHNlcnZlci4gV2hlbiB5b3UgcGxhY2UgdGhlIGNsaWVudAotY29kZSBpbiBhbiBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlIGluc3RlYWQgb2YgYSBzaW1wbGUgSkFSIGZpbGUsIHRoZSBhcHBsaWNhdGlvbgotY2xpZW50IGJlbmVmaXRzIGZyb20gdGhlIHNlcnZlcidzIHJlc291cmNlcyAoaXQgZG9lcyBub3QgbmVlZCB0byByZS1zcGVjaWZ5Ci10aGUgY2xhc3MgcGF0aCB0byBKYXZhIEVFIGFuZCBzZXJ2ZXIgSkFSIGZpbGVzKSBhcyB3ZWxsIGFzIGZyb20gZWFzaWVyIEpOREkKLWxvb2t1cCAodGhlIGNsaWVudCBjb250YWluZXIgZmlsbHMgaW4gdGhlIGluaXRpYWwgY29udGV4dCBhbmQgb3RoZXIgcGFyYW1ldGVycykuCi1UaGUgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYWxsb3dzIHlvdSB0byB3b3JrIGFzIGlmIHlvdSBhcmUgY3JlYXRpbmcgYQotc3RhbmRhbG9uZSBKYXZhIGFwcGxpY2F0aW9uIGluIGEgSmF2YSBwcm9qZWN0LjwvcD4KLQotPHA+QW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgZW5hYmxlcyB5b3UgdG8gZG8gdGhlIGZvbGxvd2luZyB0aGluZ3M6PC9wPgotCi08dWw+Ci08bGk+RGV2ZWxvcCB0aGUgSmF2YSBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoZSBjbGllbnQgbW9kdWxlPC9saT4KLQotPGxpPlNldCB0aGUgYXBwbGljYXRpb24gY2xpZW50IGRlcGxveW1lbnQgZGVzY3JpcHRvcjwvbGk+Ci0KLTxsaT5UZXN0IHRoZSBhcHBsaWNhdGlvbiBjbGllbnQ8L2xpPgotCi08L3VsPgotCi08cD5MaWtlIEphdmEgcHJvamVjdHMsIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBjb250YWluIHRoZQotcmVzb3VyY2VzIG5lZWRlZCBmb3IgYXBwbGljYXRpb24gY2xpZW50cywgaW5jbHVkaW5nIEphdmEgY2xhc3MKLWZpbGVzLiBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QsIHRoZSBlbnZpcm9ubWVudCBpcwotc2V0IHVwIGZvciBKYXZhIGRldmVsb3BtZW50LiBBIEphdmEgYnVpbGRlciBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2plY3QKLXNvIHRoZSBKYXZhIHNvdXJjZSBjYW4gYmUgaW5jcmVtZW50YWxseSBjb21waWxlZCBhcyBpdCBpcyB1cGRhdGVkLgotVGhlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlIGhpZXJhcmNoeQotYW5kIEphdmEgZWxlbWVudHMuCi1UaGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgY3VycmVudCBhcyBjaGFuZ2VzIGFyZSBtYWRlLCBhbmQgdGhlIEphdmEgYnVpbGRlcgotd2lsbCBpbmNyZW1lbnRhbGx5IGNvbXBpbGUgdGhlIHJlc291cmNlcyB3aXRoaW4gdGhlc2UgcHJvamVjdHMgYXMgdGhlIHJlc291cmNlcwotYXJlIHVwZGF0ZWQuPC9wPgotCi08cD5JbiB0aGUgd29ya2JlbmNoLCBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgYXJlIGFsd2F5cyByZWZlcmVuY2VkIGJ5Ci1lbnRlcnByaXNlIGFwcGxpY2F0aW9uIChFQVIpIHByb2plY3RzLiBXaGVuIHlvdSBjcmVhdGUgYW4gYXBwbGljYXRpb24gY2xpZW50Ci1wcm9qZWN0LCB5b3Ugc3BlY2lmeSB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRvIHdoaWNoIHRoZSBhcHBsaWNhdGlvbgotY2xpZW50IHByb2plY3QgYmVsb25ncy4gQSBtb2R1bGUgZWxlbWVudCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5hcHBsaWNhdGlvbi54bWw8L3NhbXA+IGRlcGxveW1lbnQKLWRlc2NyaXB0b3IgZm9yIHRoZSBFQVIgcHJvamVjdC48L3A+Ci0KLTxwPkFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGlzIGRlcGxveWVkIGFzIGEgSkFSIGZpbGUuIFRoaXMgYXBwbGljYXRpb24KLWNsaWVudCBKQVIgZmlsZSBjb250YWlucyB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgSmF2YSBjbGFzcwotZmlsZXMsIGFuZCBkZXBsb3ltZW50IGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gYW5kIGFueSBtZXRhLWRhdGEgZXh0ZW5zaW9ucwotYW5kIGJpbmRpbmdzIGZpbGVzLjwvcD4KLQotPHA+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGFyZSB0eXBpY2FsbHkgcnVuIG9uIG5ldHdvcmtlZCBjbGllbnQgc3lzdGVtcwotY29ubmVjdGVkIHRvIEphdmEgRUUgKEVKQikgc2VydmVycy4gVGhlIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgYXBwbGljYXRpb24KLWNsaWVudCBpcyBhIEphdmEgbWFpbi1jbGFzcywgd2hpY2ggaXMgc2ltcGx5IGEgSmF2YSBjbGFzcwotdGhhdCBjb250YWlucyBhIHN0YXRpYyBtYWluIG1ldGhvZC4gVGhlIGNsYXNzIGlzIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdAotZmlsZSBvZiB0aGUgY2xpZW50IG1vZHVsZS4gPC9wPgotCi08cD5BIEphdmEgRUUgYXBwbGljYXRpb24gY2xpZW50IGNvbnRhaW5lciBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEphdmEgRUUgc2VydmljZQotKEpOREkgbmFtaW5nIHNlcnZpY2VzLCBkZXBsb3ltZW50IHNlcnZpY2VzLCB0cmFuc2FjdGlvbiBzZXJ2aWNlcywgYW5kIHNlY3VyaXR5Ci1zZXJ2aWNlcykgYW5kIGNvbW11bmljYXRpb25zIEFQSXMgKGludGVybmV0IHByb3RvY29scywgUmVtb3RlIE1ldGhvZCBJbnZvY2F0aW9uCi1wcm90b2NvbHMsIE9iamVjdCBNYW5hZ2VtZW50IEdyb3VwIHByb3RvY29scywgTWVzc2FnaW5nIHByb3RvY29scywgYW5kIGRhdGEKLWZvcm1hdHMpLjwvcD4KLQotPHA+QnkgZGVmYXVsdCwgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gb25lIGZvbGRlciBuYW1lZCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5hcHBDbGllbnRNb2R1bGU8L3NwYW4+LAotd2hpY2ggY29udGFpbnMgYm90aCBKYXZhIHNvdXJjZSBjb2RlIGFuZCBjb21waWxlZCA8c2FtcCBjbGFzcz0iY29kZXBoIj4uY2xhc3M8L3NhbXA+IGZpbGVzLAotYWxvbmcgd2l0aCBhbGwgdGhlIG1ldGEtZGF0YSBmaWxlcyBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TUVUQS1JTkY8L3NwYW4+IHN1YmZvbGRlci48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiB0aXRsZT0iVGhlIEphdmEgMiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSBwcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIj5KMkVFIGFyY2hpdGVjdHVyZTwvYT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGphcHBwcm9qLmh0bWwiIHRpdGxlPSJZb3UgY2FuIHVzZSBhIHdpemFyZCB0byBjcmVhdGUgYSBuZXcgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYW5kIGFkZCBpdCB0byBhIG5ldyBvciBleGlzdGluZyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QuIj5DcmVhdGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqZXhwYXBwLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGV4cG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBhcyBhIEpBUiBmaWxlLiI+RXhwb3J0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGppbXBhcHAuaHRtbCIgdGl0bGU9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBhcmUgZGVwbG95ZWQgYXMgSkFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCB0aGF0IGhhcyBiZWVuIGRlcGxveWVkIGludG8gYSBKQVIgZmlsZSBieSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC4iPkltcG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgSkFSIGZpbGU8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2phcmNoLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFyY2guZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcxNWNkNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFyY2guZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiINCi0gImNvbmNlcHQuZHRkIj4NCi08Y29uY2VwdCBpZD0iY2phcmNoIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkoyRUUgYXJjaGl0ZWN0dXJlPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiAyIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpDQotcHJvdmlkZXMgYSBzdGFuZGFyZCBmb3IgZGV2ZWxvcGluZyBtdWx0aXRpZXIsIGVudGVycHJpc2UgYXBwbGljYXRpb25zLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkoyRUU8aW5kZXh0ZXJtPmFyY2hpdGVjdHVyZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+SmF2YQ0KLUVFPC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5IG91dHB1dGNsYXNzPSJpZF9jb25ib2R5Ij4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+DQotPHA+VGhlIGVjb25vbXkgYW5kIHRlY2hub2xvZ3kgb2YgdG9kYXkgaGF2ZSBpbnRlbnNpZmllZCB0aGUgbmVlZCBmb3IgZmFzdGVyLA0KLW1vcmUgZWZmaWNpZW50LCBhbmQgbGFyZ2VyLXNjYWxlIGluZm9ybWF0aW9uIG1hbmFnZW1lbnQgc29sdXRpb25zLiBUaGUgSjJFRQ0KLXNwZWNpZmljYXRpb24gc2F0aXNmaWVzIHRoZXNlIGNoYWxsZW5nZXMgYnkgcHJvdmlkaW5nIGEgcHJvZ3JhbW1pbmcgbW9kZWwNCi10aGF0IGltcHJvdmVzIGRldmVsb3BtZW50IHByb2R1Y3Rpdml0eSwgc3RhbmRhcmRpemVzIHRoZSBwbGF0Zm9ybSBmb3IgaG9zdGluZw0KLWVudGVycHJpc2UgYXBwbGljYXRpb25zLCBhbmQgZW5zdXJlcyBwb3J0YWJpbGl0eSBvZiBkZXZlbG9wZWQgYXBwbGljYXRpb25zDQotd2l0aCBhbiBleHRlbnNpdmUgdGVzdCBzdWl0ZS48L3A+DQotPHA+SjJFRSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgY29tcG9uZW50LWJhc2VkIGRldmVsb3BtZW50IG9mIG11bHRpLXRpZXIgZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9ucy4gQSBKMkVFIGFwcGxpY2F0aW9uIHN5c3RlbSB0eXBpY2FsbHkgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB0aWVyczo8L3A+DQotPGRsPjxkbGVudHJ5IG91dHB1dGNsYXNzPSJpZF9wcm9qZWN0ZmlsZXNfdG9wIj4NCi08ZHQ+Q2xpZW50IHRpZXI8L2R0Pg0KLTxkZD5JbiB0aGUgY2xpZW50IHRpZXIsIFdlYiBjb21wb25lbnRzLCBzdWNoIGFzIFNlcnZsZXRzIGFuZCBKYXZhU2VydmVyIFBhZ2VzDQotKEpTUHMpLCBvciBzdGFuZGFsb25lIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGFwcGxpY2F0aW9ucyBwcm92aWRlIGEgZHluYW1pYyBpbnRlcmZhY2UNCi10byB0aGUgbWlkZGxlIHRpZXIuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0Pk1pZGRsZSB0aWVyPC9kdD4NCi08ZGQ+SW4gdGhlIHNlcnZlciB0aWVyLCBvciBtaWRkbGUgdGllciwgZW50ZXJwcmlzZSBiZWFucyBhbmQgV2ViIFNlcnZpY2VzDQotZW5jYXBzdWxhdGUgcmV1c2FibGUsIGRpc3RyaWJ1dGFibGUgYnVzaW5lc3MgbG9naWMgZm9yIHRoZSBhcHBsaWNhdGlvbi4gVGhlc2UNCi1zZXJ2ZXItdGllciBjb21wb25lbnRzIGFyZSBjb250YWluZWQgb24gYSBKMkVFIEFwcGxpY2F0aW9uIFNlcnZlciwgd2hpY2ggcHJvdmlkZXMNCi10aGUgcGxhdGZvcm0gZm9yIHRoZXNlIGNvbXBvbmVudHMgdG8gcGVyZm9ybSBhY3Rpb25zIGFuZCBzdG9yZSBkYXRhLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5FbnRlcnByaXNlIGRhdGEgdGllcjwvZHQ+DQotPGRkPkluIHRoZSBkYXRhIHRpZXIsIHRoZSBlbnRlcnByaXNlJ3MgZGF0YSBpcyBzdG9yZWQgYW5kIHBlcnNpc3RlZCwgdHlwaWNhbGx5DQotaW4gYSByZWxhdGlvbmFsIGRhdGFiYXNlLjwvZGQ+DQotPC9kbGVudHJ5PjwvZGw+DQotPHA+SjJFRSBhcHBsaWNhdGlvbnMgYXJlIGNvbXByaXNlZCBvZiBjb21wb25lbnRzLCBjb250YWluZXJzLCBhbmQgc2VydmljZXMuDQotQ29tcG9uZW50cyBhcmUgYXBwbGljYXRpb24tbGV2ZWwgY29tcG9uZW50cy4gV2ViIGNvbXBvbmVudHMsIHN1Y2ggYXMgU2VydmxldHMNCi1hbmQgSlNQcywgcHJvdmlkZSBkeW5hbWljIHJlc3BvbnNlcyB0byByZXF1ZXN0cyBmcm9tIGEgV2ViIHBhZ2UuIEVKQiBjb21wb25lbnRzDQotY29udGFpbiBzZXJ2ZXItc2lkZSBidXNpbmVzcyBsb2dpYyBmb3IgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIFdlYiBhbmQgRUpCDQotY29tcG9uZW50IGNvbnRhaW5lcnMgaG9zdCBzZXJ2aWNlcyB0aGF0IHN1cHBvcnQgV2ViIGFuZCBFSkIgbW9kdWxlcy48L3A+DQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSjJFRSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbXBsaWNpdCB0ZWNobm9sb2dpZXMsDQotZG93bmxvYWQgYW5kIHJlYWQgdGhlIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2Rvd25sb2FkLmh0bWwjcGxhdGZvcm1zcGVjIg0KLXNjb3BlPSJleHRlcm5hbCI+SjJFRSAxLjQgU3BlY2lmaWNhdGlvbjxkZXNjPjwvZGVzYz48L3hyZWY+LjwvcD4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+DQotPC9jb25ib2R5Pg0KLTwvY29uY2VwdD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamFyY2guaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXJjaC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzIxZmZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXJjaC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkoyRUUgYXJjaGl0ZWN0dXJlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBKYXZhIDIgUGxhdGZvcm0sIEVudGVycHJpc2UgRWRpdGlvbiAoSjJFRSkgcHJvdmlkZXMgYSBzdGFuZGFyZCBmb3IgZGV2ZWxvcGluZyBtdWx0aXRpZXIsIGVudGVycHJpc2UgYXBwbGljYXRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgSmF2YSAyIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpIHByb3ZpZGVzIGEgc3RhbmRhcmQgZm9yIGRldmVsb3BpbmcgbXVsdGl0aWVyLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4iIC8+Ci08bWV0YSBjb250ZW50PSJKMkVFLCBhcmNoaXRlY3R1cmUsIEphdmEgRUUiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKMkVFLCBhcmNoaXRlY3R1cmUsIEphdmEgRUUiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2plYXJwcm9qLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amVhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGppbXBlYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqZXhwZWFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamFwcGNsaXByb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGpleHBhcHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqaW1wYXBwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2phcmNoIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SjJFRSBhcmNoaXRlY3R1cmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqYXJjaCI+PGEgbmFtZT0iY2phcmNoIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5KMkVFIGFyY2hpdGVjdHVyZTwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF9jb25ib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGUgSmF2YeKEoiAyIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpCi1wcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuPC9wPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotCi08cD5UaGUgZWNvbm9teSBhbmQgdGVjaG5vbG9neSBvZiB0b2RheSBoYXZlIGludGVuc2lmaWVkIHRoZSBuZWVkIGZvciBmYXN0ZXIsCi1tb3JlIGVmZmljaWVudCwgYW5kIGxhcmdlci1zY2FsZSBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IHNvbHV0aW9ucy4gVGhlIEoyRUUKLXNwZWNpZmljYXRpb24gc2F0aXNmaWVzIHRoZXNlIGNoYWxsZW5nZXMgYnkgcHJvdmlkaW5nIGEgcHJvZ3JhbW1pbmcgbW9kZWwKLXRoYXQgaW1wcm92ZXMgZGV2ZWxvcG1lbnQgcHJvZHVjdGl2aXR5LCBzdGFuZGFyZGl6ZXMgdGhlIHBsYXRmb3JtIGZvciBob3N0aW5nCi1lbnRlcnByaXNlIGFwcGxpY2F0aW9ucywgYW5kIGVuc3VyZXMgcG9ydGFiaWxpdHkgb2YgZGV2ZWxvcGVkIGFwcGxpY2F0aW9ucwotd2l0aCBhbiBleHRlbnNpdmUgdGVzdCBzdWl0ZS48L3A+Ci0KLTxwPkoyRUUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGNvbXBvbmVudC1iYXNlZCBkZXZlbG9wbWVudCBvZiBtdWx0aS10aWVyIGVudGVycHJpc2UKLWFwcGxpY2F0aW9ucy4gQSBKMkVFIGFwcGxpY2F0aW9uIHN5c3RlbSB0eXBpY2FsbHkgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB0aWVyczo8L3A+Ci0KLTxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DbGllbnQgdGllcjwvZHQ+Ci0KLTxkZD5JbiB0aGUgY2xpZW50IHRpZXIsIFdlYiBjb21wb25lbnRzLCBzdWNoIGFzIFNlcnZsZXRzIGFuZCBKYXZhU2VydmVyIFBhZ2VzCi0oSlNQcyksIG9yIHN0YW5kYWxvbmUgSmF2YSBhcHBsaWNhdGlvbnMgcHJvdmlkZSBhIGR5bmFtaWMgaW50ZXJmYWNlCi10byB0aGUgbWlkZGxlIHRpZXIuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWlkZGxlIHRpZXI8L2R0PgotCi08ZGQ+SW4gdGhlIHNlcnZlciB0aWVyLCBvciBtaWRkbGUgdGllciwgZW50ZXJwcmlzZSBiZWFucyBhbmQgV2ViIFNlcnZpY2VzCi1lbmNhcHN1bGF0ZSByZXVzYWJsZSwgZGlzdHJpYnV0YWJsZSBidXNpbmVzcyBsb2dpYyBmb3IgdGhlIGFwcGxpY2F0aW9uLiBUaGVzZQotc2VydmVyLXRpZXIgY29tcG9uZW50cyBhcmUgY29udGFpbmVkIG9uIGEgSjJFRSBBcHBsaWNhdGlvbiBTZXJ2ZXIsIHdoaWNoIHByb3ZpZGVzCi10aGUgcGxhdGZvcm0gZm9yIHRoZXNlIGNvbXBvbmVudHMgdG8gcGVyZm9ybSBhY3Rpb25zIGFuZCBzdG9yZSBkYXRhLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkVudGVycHJpc2UgZGF0YSB0aWVyPC9kdD4KLQotPGRkPkluIHRoZSBkYXRhIHRpZXIsIHRoZSBlbnRlcnByaXNlJ3MgZGF0YSBpcyBzdG9yZWQgYW5kIHBlcnNpc3RlZCwgdHlwaWNhbGx5Ci1pbiBhIHJlbGF0aW9uYWwgZGF0YWJhc2UuPC9kZD4KLQotPC9kbD4KLQotPHA+SjJFRSBhcHBsaWNhdGlvbnMgYXJlIGNvbXByaXNlZCBvZiBjb21wb25lbnRzLCBjb250YWluZXJzLCBhbmQgc2VydmljZXMuCi1Db21wb25lbnRzIGFyZSBhcHBsaWNhdGlvbi1sZXZlbCBjb21wb25lbnRzLiBXZWIgY29tcG9uZW50cywgc3VjaCBhcyBTZXJ2bGV0cwotYW5kIEpTUHMsIHByb3ZpZGUgZHluYW1pYyByZXNwb25zZXMgdG8gcmVxdWVzdHMgZnJvbSBhIFdlYiBwYWdlLiBFSkIgY29tcG9uZW50cwotY29udGFpbiBzZXJ2ZXItc2lkZSBidXNpbmVzcyBsb2dpYyBmb3IgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIFdlYiBhbmQgRUpCCi1jb21wb25lbnQgY29udGFpbmVycyBob3N0IHNlcnZpY2VzIHRoYXQgc3VwcG9ydCBXZWIgYW5kIEVKQiBtb2R1bGVzLjwvcD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSjJFRSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbXBsaWNpdCB0ZWNobm9sb2dpZXMsCi1kb3dubG9hZCBhbmQgcmVhZCB0aGUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2Rvd25sb2FkLmh0bWwjcGxhdGZvcm1zcGVjIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IiI+SjJFRSAxLjQgU3BlY2lmaWNhdGlvbjwvYT4uPC9wPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWxjb25jZXB0cyI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCIgdGl0bGU9IkFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCB0aWVzIHRvZ2V0aGVyIHRoZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gZGVwbG95IGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLiI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0czwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXBwY2xpcHJvai5odG1sIiB0aXRsZT0iQXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zIHNvIHRoZSBwcm9qZWN0IGNhbiBiZW5lZml0IGZyb20gYSBzZXJ2ZXIncyB0b29scy4iPkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0czwvYT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGplYXIuaHRtbCIgdGl0bGU9IlVzaW5nIHRoZSB3aXphcmQgdG8gY3JlYXRlIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBhbGxvd3MgeW91IHRvIHBhY2thZ2UgbWFueSB3ZWIgYXBwbGljYXRpb25zIGFuZCBtb2R1bGVzIGluIGEgcHJvamVjdCBhbmQgZGVwbG95IHRoZXNlIG1vZHVsZXMgYXMgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5DcmVhdGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3Q8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amltcGVhci5odG1sIiB0aXRsZT0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cyBhcmUgZGVwbG95ZWQgaW50byBFQVIgZmlsZXMuIFlvdSBjYW4gaW1wb3J0IGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBieSBpbXBvcnRpbmcgaXQgZnJvbSBhIGRlcGxveWVkIEVBUiBmaWxlLiI+SW1wb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gRUFSIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amV4cGVhci5odG1sIiB0aXRsZT0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgYXJlIGRlcGxveWVkIGluIHRoZSBmb3JtIG9mIGFuIEVBUiBmaWxlLiBVc2UgdGhlIEV4cG9ydCB3aXphcmQgdG8gZXhwb3J0IGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBpbnRvIGFuIEVBUiBmaWxlIGZvciBkZXBsb3ltZW50LiI+RXhwb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gaW50byBhbiBFQVIgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiB0aXRsZT0iWW91IGNhbiB1c2UgYSB3aXphcmQgdG8gY3JlYXRlIGEgbmV3IGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGFuZCBhZGQgaXQgdG8gYSBuZXcgb3IgZXhpc3RpbmcgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LiI+Q3JlYXRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Q8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amV4cGFwcC5odG1sIiB0aXRsZT0iWW91IGNhbiBleHBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYXMgYSBKQVIgZmlsZS4iPkV4cG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqaW1wYXBwLmh0bWwiIHRpdGxlPSJBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgYXJlIGRlcGxveWVkIGFzIEpBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgdGhhdCBoYXMgYmVlbiBkZXBsb3llZCBpbnRvIGEgSkFSIGZpbGUgYnkgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQuIj5JbXBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXZhZWU1LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamF2YWVlNS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTVlMTQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXZhZWU1LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iDQotICJjb25jZXB0LmR0ZCI+DQotPGNvbmNlcHQgaWQ9ImNqYXZhZWU1IiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkRldmVsb3BpbmcgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgNSBBcHBsaWNhdGlvbnM8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIDUgcHJvZ3JhbW1pbmcgbW9kZWwgc2ltcGxpZmllcyB0aGUNCi1wcm9jZXNzIG9mIGNyZWF0aW5nIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGFwcGxpY2F0aW9ucy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5KYXZhIEVudGVycHJpc2UgRWRpdGlvbiA1PGluZGV4dGVybT5PdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Y29uYm9keSBvdXRwdXRjbGFzcz0iaWRfY29uYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwIGlkPSJhYm91dGZhY2V0Ij5JbiB0aGUgSmF2YSBFRSA1IHNwZWNpZmljYXRpb25zLCBwcm9ncmFtbWluZyByZXF1aXJlbWVudHMNCi1oYXZlIGJlZW4gc3RyZWFtbGluZWQsIGFuZCBYTUwgZGVwbG95bWVudCBkZXNjcmlwdG9ycyBhcmUgb3B0aW9uYWwuIEluc3RlYWQsDQoteW91IGNhbiBzcGVjaWZ5IG1hbnkgZGV0YWlscyBvZiBhc3NlbWJseSBhbmQgZGVwbG95bWVudCB3aXRoIEphdmEgYW5ub3RhdGlvbnMuDQotSmF2YSBFRSA1IHdpbGwgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBpbiBtYW55IHNpdHVhdGlvbnMgc28gZXhwbGljaXRseSBzcGVjaWZpY2F0aW9uDQotb2YgdGhlc2UgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQuPC9wPg0KLTxwPkNvZGUgdmFsaWRhdGlvbiwgY29udGVudCBhc3Npc3RhbmNlLCBRdWljayBGaXhlcywgYW5kIHJlZmFjdG9yaW5nIHNpbXBsaWZ5DQotd29ya2luZyB3aXRoIHlvdXIgY29kZS4gQ29kZSB2YWxpZGF0b3JzIGNoZWNrIHlvdXIgcHJvamVjdHMgZm9yIGVycm9ycy4gV2hlbg0KLWFuIGVycm9yIGlzIGZvdW5kLCB5b3UgY2FuIGRvdWJsZS1jbGljayBvbiBpdCBpbiB0aGUgUHJvYmxlbXMgdmlldyBpbiB0aGUNCi1wcm9kdWN0IHdvcmtiZW5jaCB0byBnbyB0byB0aGUgZXJyb3IgbG9jYXRpb24uIEZvciBzb21lIGVycm9yIHR5cGVzLCB5b3UgY2FuDQotdXNlIGEgUXVpY2sgRml4IHRvIGNvcnJlY3QgdGhlIGVycm9yIGF1dG9tYXRpY2FsbHkuIEZvciBib3RoIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHNvdXJjZQ0KLWFuZCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYW5ub3RhdGlvbnMsDQoteW91IGNhbiByZWx5IG9uIGNvbnRlbnQgYXNzaXN0YW5jZSB0byBzaW1wbGlmeSB5b3VyIHByb2dyYW1taW5nIHRhc2suIFdoZW4NCi15b3UgcmVmYWN0b3Igc291cmNlIGNvZGUsIHRoZSB0b29scyBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgYXNzb2NpYXRlZCBtZXRhZGF0YS48L3A+DQotPHA+Rm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgNS4wLCBzZWUgdGhlIG9mZmljaWFsIHNwZWNpZmljYXRpb246IDx4cmVmDQotaHJlZj0iaHR0cDovL2pjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0yNDQiIHNjb3BlPSJleHRlcm5hbCI+SlNSIDI0NDogPHRtIHRtY2xhc3M9InNwZWNpYWwiDQotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gUGxhdGZvcm0sDQotRW50ZXJwcmlzZSBFZGl0aW9uIDUgKDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIDUpIFNwZWNpZmljYXRpb248L3hyZWY+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXZhZWU1Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamF2YWVlNS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzBjMmM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqYXZhZWU1Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJEZXZlbG9waW5nIEphdmEgRUUgNSBBcHBsaWNhdGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIEphdmEgRUUgNSBwcm9ncmFtbWluZyBtb2RlbCBzaW1wbGlmaWVzIHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIEphdmEgYXBwbGljYXRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgSmF2YSBFRSA1IHByb2dyYW1taW5nIG1vZGVsIHNpbXBsaWZpZXMgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgSmF2YSBhcHBsaWNhdGlvbnMuIiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFbnRlcnByaXNlIEVkaXRpb24gNSwgT3ZlcnZpZXciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKYXZhIEVudGVycHJpc2UgRWRpdGlvbiA1LCBPdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9waC1qMmVlYXBwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamVlNW92ZXJ2aWV3Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jYW5ub3RhdGlvbnMuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjamF2YWVlNSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkRldmVsb3BpbmcgSmF2YSBFRSA1IEFwcGxpY2F0aW9uczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2phdmFlZTUiPjxhIG5hbWU9ImNqYXZhZWU1Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5EZXZlbG9waW5nIEphdmEgRUUgNSBBcHBsaWNhdGlvbnM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfY29uYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhlIEphdmHihKIgRUUgNSBwcm9ncmFtbWluZyBtb2RlbCBzaW1wbGlmaWVzIHRoZQotcHJvY2VzcyBvZiBjcmVhdGluZyBKYXZhIGFwcGxpY2F0aW9ucy48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwIGlkPSJjamF2YWVlNV9fYWJvdXRmYWNldCI+PGEgbmFtZT0iY2phdmFlZTVfX2Fib3V0ZmFjZXQiPjwhLS0gLS0+PC9hPkluIHRoZSBKYXZhIEVFIDUgc3BlY2lmaWNhdGlvbnMsIHByb2dyYW1taW5nIHJlcXVpcmVtZW50cwotaGF2ZSBiZWVuIHN0cmVhbWxpbmVkLCBhbmQgWE1MIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgYXJlIG9wdGlvbmFsLiBJbnN0ZWFkLAoteW91IGNhbiBzcGVjaWZ5IG1hbnkgZGV0YWlscyBvZiBhc3NlbWJseSBhbmQgZGVwbG95bWVudCB3aXRoIEphdmEgYW5ub3RhdGlvbnMuCi1KYXZhIEVFIDUgd2lsbCBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGluIG1hbnkgc2l0dWF0aW9ucyBzbyBleHBsaWNpdGx5IHNwZWNpZmljYXRpb24KLW9mIHRoZXNlIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkLjwvcD4KLQotPHA+Q29kZSB2YWxpZGF0aW9uLCBjb250ZW50IGFzc2lzdGFuY2UsIFF1aWNrIEZpeGVzLCBhbmQgcmVmYWN0b3Jpbmcgc2ltcGxpZnkKLXdvcmtpbmcgd2l0aCB5b3VyIGNvZGUuIENvZGUgdmFsaWRhdG9ycyBjaGVjayB5b3VyIHByb2plY3RzIGZvciBlcnJvcnMuIFdoZW4KLWFuIGVycm9yIGlzIGZvdW5kLCB5b3UgY2FuIGRvdWJsZS1jbGljayBvbiBpdCBpbiB0aGUgUHJvYmxlbXMgdmlldyBpbiB0aGUKLXByb2R1Y3Qgd29ya2JlbmNoIHRvIGdvIHRvIHRoZSBlcnJvciBsb2NhdGlvbi4gRm9yIHNvbWUgZXJyb3IgdHlwZXMsIHlvdSBjYW4KLXVzZSBhIFF1aWNrIEZpeCB0byBjb3JyZWN0IHRoZSBlcnJvciBhdXRvbWF0aWNhbGx5LiBGb3IgYm90aCBKYXZhIHNvdXJjZQotYW5kIEphdmEgYW5ub3RhdGlvbnMsCi15b3UgY2FuIHJlbHkgb24gY29udGVudCBhc3Npc3RhbmNlIHRvIHNpbXBsaWZ5IHlvdXIgcHJvZ3JhbW1pbmcgdGFzay4gV2hlbgoteW91IHJlZmFjdG9yIHNvdXJjZSBjb2RlLCB0aGUgdG9vbHMgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEuPC9wPgotCi08cD5Gb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBKYXZhIEVFIDUuMCwgc2VlIHRoZSBvZmZpY2lhbCBzcGVjaWZpY2F0aW9uOiA8YSBocmVmPSJodHRwOi8vamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTI0NCIgdGFyZ2V0PSJfYmxhbmsiPkpTUiAyNDQ6IEphdmEgUGxhdGZvcm0sIEVudGVycHJpc2UgRWRpdGlvbiA1IChKYXZhIEVFIDUpIFNwZWNpZmljYXRpb248L2E+PC9wPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy9jamVlNW92ZXJ2aWV3Lmh0bWwiPkphdmEgRUUgNTogT3ZlcnZpZXc8L2E+PC9zdHJvbmc+PGJyIC8+Ci1Vc2luZyB0aGUgSmF2YSBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKYXZhIEVFKSBhcmNoaXRlY3R1cmUsIHlvdSBjYW4gYnVpbGQgZGlzdHJpYnV0ZWQgV2ViIGFuZCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4gVGhpcyBhcmNoaXRlY3R1cmUgaGVscHMgeW91IGZvY3VzIG9uIHByZXNlbnRhdGlvbiBhbmQgYXBwbGljYXRpb24gaXNzdWVzLCByYXRoZXIgdGhhbiBvbiBzeXN0ZW1zIGlzc3Vlcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvY2Fubm90YXRpb25zLmh0bWwiPkphdmEgRUUgNSBzdXBwb3J0IGZvciBhbm5vdGF0aW9uczwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBnb2FsIG9mIEphdmEgRUUgNSBwbGF0Zm9ybSBkZXZlbG9wbWVudCBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGFydGlmYWN0cyB0aGF0IHlvdSBoYXZlIHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4sIHRoZXJlYnkgc2ltcGxpZnlpbmcgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuIEphdmEgRUUgNSBzdXBwb3J0cyB0aGUgaW5qZWN0aW9uIG9mIGFubm90YXRpb25zIGludG8geW91ciBzb3VyY2UgY29kZSwgc28gdGhhdCB5b3UgY2FuIGVtYmVkIHJlc291cmNlcywgZGVwZW5kZW5jaWVzLCBzZXJ2aWNlcywgYW5kIGxpZmUtY3ljbGUgbm90aWZpY2F0aW9ucyBpbiB5b3VyIHNvdXJjZSBjb2RlLCB3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiB0aGVzZSBhcnRpZmFjdHMgZWxzZXdoZXJlLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL3BoLWoyZWVhcHAuaHRtbCIgdGl0bGU9IlRoZXNlIHRvcGljcyBkZWFsIHdpdGggdGhlIEphdmEgRW50ZXJwcmlzZSBFZGl0aW9uIChKYXZhIEVFKS4iPkphdmEgRUUgYXBwbGljYXRpb25zPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqY2lyY2xlLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamNpcmNsZS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjRhYjU2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqY2lyY2xlLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iDQotICJjb25jZXB0LmR0ZCI+DQotPGNvbmNlcHQgaWQ9ImNqY2lyY2xlIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlczwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5BIGN5Y2xpY2FsIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gb3INCi1tb3JlIG1vZHVsZXMgaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb3N0IGNvbW1vbmx5IG9jY3VycyB3aGVuIHByb2plY3RzDQotYXJlIGltcG9ydGVkIGZyb20gb3V0c2lkZSB0aGUgV29ya2JlbmNoLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmRlcGVuZGVuY2llczxpbmRleHRlcm0+Y3ljbGVzIGJldHdlZW4gbW9kdWxlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+SmF2YSBFRTxpbmRleHRlcm0+Y3ljbGljYWwgZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+cHJvamVjdHM8aW5kZXh0ZXJtPmN5Y2xpY2FsIGRlcGVuZGVuY2llczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Y29uYm9keSBvdXRwdXRjbGFzcz0iaWRfY29uYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwPldoZW4gYSBjeWNsZSBleGlzdHMgYmV0d2VlbiB0d28gb3IgbW9yZSBtb2R1bGVzIGluIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24sDQotdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBidWlsZGVyDQotY2Fubm90IGFjY3VyYXRlbHkgY29tcHV0ZSB0aGUgYnVpbGQgb3JkZXIgb2YgdGhlIHByb2plY3RzLiBGdWxsIGJ1aWxkcyBmYWlsDQotdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgb3IgcmVxdWlyZSBzZXZlcmFsIGludm9jYXRpb25zLjwvcD4NCi08cD5UaGVyZWZvcmUsIHRoZSBiZXN0IHByYWN0aWNlIGlzIHRvIGNvbXBvbmVudGl6ZSB5b3VyIHByb2plY3RzIG9yIG1vZHVsZXMuDQotVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgeW91ciBtb2R1bGUgZGVwZW5kZW5jaWVzIGZ1bmN0aW9uIGFzIGEgdHJlZSBpbnN0ZWFkDQotb2YgYSBjeWNsZSBkaWFncmFtLiBUaGlzIHByYWN0aWNlIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBwcm9kdWNpbmcgYSBiZXR0ZXINCi1mYWN0b3JlZCBhbmQgbGF5ZXJlZCBhcHBsaWNhdGlvbi48L3A+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPg0KLTwvY29uYm9keT4NCi08L2NvbmNlcHQ+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2pjaXJjbGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqY2lyY2xlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYTJmZTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2pjaXJjbGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIGN5Y2xpY2FsIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gb3IgbW9yZSBtb2R1bGVzIGluIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gbW9zdCBjb21tb25seSBvY2N1cnMgd2hlbiBwcm9qZWN0cyBhcmUgaW1wb3J0ZWQgZnJvbSBvdXRzaWRlIHRoZSBXb3JrYmVuY2guIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgY3ljbGljYWwgZGVwZW5kZW5jeSBiZXR3ZWVuIHR3byBvciBtb3JlIG1vZHVsZXMgaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb3N0IGNvbW1vbmx5IG9jY3VycyB3aGVuIHByb2plY3RzIGFyZSBpbXBvcnRlZCBmcm9tIG91dHNpZGUgdGhlIFdvcmtiZW5jaC4iIC8+Ci08bWV0YSBjb250ZW50PSJkZXBlbmRlbmNpZXMsIGN5Y2xlcyBiZXR3ZWVuIG1vZHVsZXMsIEphdmEgRUUsIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1vZHVsZXMsIHByb2plY3RzLCBjeWNsaWNhbCBkZXBlbmRlbmNpZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJkZXBlbmRlbmNpZXMsIGN5Y2xlcyBiZXR3ZWVuIG1vZHVsZXMsIEphdmEgRUUsIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1vZHVsZXMsIHByb2plY3RzLCBjeWNsaWNhbCBkZXBlbmRlbmNpZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGppbXBlYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqY2lyY2xlYi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNqY2lyY2xlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3ljbGljYWwgZGVwZW5kZW5jaWVzIGJldHdlZW4gSmF2YSBFRSBtb2R1bGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjamNpcmNsZSI+PGEgbmFtZT0iY2pjaXJjbGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlczwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF9jb25ib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5BIGN5Y2xpY2FsIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gb3IKLW1vcmUgbW9kdWxlcyBpbiBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIG1vc3QgY29tbW9ubHkgb2NjdXJzIHdoZW4gcHJvamVjdHMKLWFyZSBpbXBvcnRlZCBmcm9tIG91dHNpZGUgdGhlIFdvcmtiZW5jaC48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwPldoZW4gYSBjeWNsZSBleGlzdHMgYmV0d2VlbiB0d28gb3IgbW9yZSBtb2R1bGVzIGluIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24sCi10aGUgSmF2YeKEoiBidWlsZGVyCi1jYW5ub3QgYWNjdXJhdGVseSBjb21wdXRlIHRoZSBidWlsZCBvcmRlciBvZiB0aGUgcHJvamVjdHMuIEZ1bGwgYnVpbGRzIGZhaWwKLXVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIG9yIHJlcXVpcmUgc2V2ZXJhbCBpbnZvY2F0aW9ucy48L3A+Ci0KLTxwPlRoZXJlZm9yZSwgdGhlIGJlc3QgcHJhY3RpY2UgaXMgdG8gY29tcG9uZW50aXplIHlvdXIgcHJvamVjdHMgb3IgbW9kdWxlcy4KLVRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIHlvdXIgbW9kdWxlIGRlcGVuZGVuY2llcyBmdW5jdGlvbiBhcyBhIHRyZWUgaW5zdGVhZAotb2YgYSBjeWNsZSBkaWFncmFtLiBUaGlzIHByYWN0aWNlIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBwcm9kdWNpbmcgYSBiZXR0ZXIKLWZhY3RvcmVkIGFuZCBsYXllcmVkIGFwcGxpY2F0aW9uLjwvcD4KLQotPHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGppbXBlYXIuaHRtbCIgdGl0bGU9IkVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMgYXJlIGRlcGxveWVkIGludG8gRUFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYnkgaW1wb3J0aW5nIGl0IGZyb20gYSBkZXBsb3llZCBFQVIgZmlsZS4iPkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGpjaXJjbGViLmh0bWwiIHRpdGxlPSJZb3UgY2FuIHJlc29sdmUgY3ljbGljYWwgZGVwZW5kZW5jaWVzIGFmdGVyIGFuIEVBUiBpcyBpbXBvcnRlZC4iPkNvcnJlY3RpbmcgY3ljbGljYWwgZGVwZW5kZW5jaWVzIGFmdGVyIGFuIEVBUiBpcyBpbXBvcnRlZDwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamVhcnByb2ouZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqZWFycHJvai5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2EwMDU2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqZWFycHJvai5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjamVhcnByb2oiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0czwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5BbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgdGllcw0KLXRvZ2V0aGVyIHRoZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gZGVwbG95IGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmVudGVycHJpc2UgYXBwbGljYXRpb25zPGluZGV4dGVybT5wcm9qZWN0czxpbmRleHRlcm0+YXJ0aWZhY3RzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5KMkVFPGluZGV4dGVybT5lbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+cHJvamVjdHM8aW5kZXh0ZXJtPmVudGVycHJpc2UgYXBwbGljYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5IG91dHB1dGNsYXNzPSJpZF9jb25ib2R5Ij4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+DQotPHA+QW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGNvbnRhaW5zIGEgc2V0IG9mIHJlZmVyZW5jZXMgdG8gb3RoZXINCi1KMkVFIG1vZHVsZXMgYW5kIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHByb2plY3RzIHRoYXQgYXJlIGNvbWJpbmVkIHRvIGNvbXBvc2UgYW4gRUFSIGZpbGUuDQotVGhlc2UgcHJvamVjdHMgY2FuIGJlIFdlYiBtb2R1bGVzLCBFSkIgbW9kdWxlcywgYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZXMsDQotY29ubmVjdG9yIG1vZHVsZXMsIGdlbmVyYWwgdXRpbGl0eSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBKQVIgZmlsZXMsIGFuZCBFSkIgY2xpZW50IEpBUiBmaWxlcy4NCi1FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGNyZWF0ZWQgaW4gdGhlIHdvcmtiZW5jaCBpbmNsdWRlIGEgZGVwbG95bWVudA0KLWRlc2NyaXB0b3IsIGFzIHdlbGwgYXMgZmlsZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBKMkVFIG1vZHVsZXMgdGhhdCBhcmUNCi1kZWZpbmVkIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IuPC9wPg0KLTxwPldoZW4gYSBKMkVFIG1vZHVsZSBwcm9qZWN0IGlzIGNyZWF0ZWQsIGl0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYW4gZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9uIHByb2plY3QuIFRoZSBwcm9qZWN0IHdpemFyZHMgYWlkIHRoaXMgYnkgYWxsb3dpbmcgeW91IHRvIHNwZWNpZnkNCi1hIG5ldyBvciBleGlzdGluZyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QuIEVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMNCi1hcmUgZXhwb3J0ZWQgYXMgRUFSIChlbnRlcnByaXNlIGFyY2hpdmUpIGZpbGVzIHRoYXQgaW5jbHVkZSBhbGwgZmlsZXMgZGVmaW5lZA0KLWluIHRoZSBFbnRlcnByaXNlIEFwcGxpY2F0aW9uIHByb2plY3QgYXMgd2VsbCBhcyB0aGUgYXBwcm9wcmlhdGUgYXJjaGl2ZSBmaWxlDQotZm9yIGVhY2ggSjJFRSBtb2R1bGUgb3IgdXRpbGl0eSBKQVIgcHJvamVjdCBkZWZpbmVkIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IsDQotc3VjaCBhcyBXZWIgYXJjaGl2ZSAoV0FSKSBmaWxlcyBhbmQgRUpCIEpBUiBmaWxlcy48L3A+DQotPHA+QW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBjYW4gY29udGFpbiB1dGlsaXR5IEpBUiBmaWxlcyB0aGF0IGFyZSB0byBiZQ0KLXVzZWQgYnkgdGhlIGNvbnRhaW5lZCBtb2R1bGVzLiBUaGlzIGFsbG93cyBzaGFyaW5nIG9mIGNvZGUgYXQgdGhlIGFwcGxpY2F0aW9uDQotbGV2ZWwgYnkgbXVsdGlwbGUgV2ViLCBFSkIsIG9yIGFwcGxpY2F0aW9uIGNsaWVudCBtb2R1bGVzLiBUaGVzZSBKQVIgZmlsZXMNCi1hcmUgY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgdXRpbGl0eSBKQVIgZmlsZXMuIFRoZSB1dGlsaXR5IEpBUiBmaWxlcyBkZWZpbmVkDQotZm9yIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBjYW4gYmUgYWN0dWFsIEpBUiBmaWxlcyBpbiB0aGUgcHJvamVjdCwNCi1vciB5b3UgY2FuIGluY2x1ZGUgdXRpbGl0eSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm9qZWN0cyB0aGF0IGFyZSBkZXNpZ25hdGVkIHRvIGJlY29tZQ0KLXRoZSB1dGlsaXR5IEpBUiBmaWxlcyBkdXJpbmcgYXNzZW1ibHkgYW5kIGRlcGxveW1lbnQuPC9wPg0KLTxwPlRvIHN0YXJ0IGRldmVsb3BpbmcgSjJFRSBhcHBsaWNhdGlvbnMsIHlvdSB0eXBpY2FsbHkgZmlyc3QgY3JlYXRlIGFuIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbiBwcm9qZWN0IHRvIHRpZSB0b2dldGhlciB5b3VyIFdlYiwgRUpCLCBhbmQgYXBwbGljYXRpb24gY2xpZW50DQotbW9kdWxlcy4gVGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBpcyB1c2VkIHRvIGNvbXBvc2UgYW4gZW50aXJlIGFwcGxpY2F0aW9uDQotZnJvbSB0aGUgdmFyaW91cyBtb2R1bGVzLiBTaW5jZSBubyBzb3VyY2UgY29kZSBpcyBidWlsdCBkaXJlY3RseSBpbnRvIGFuIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbiwgdGhlc2UgcHJvamVjdHMgYXJlIG5vdCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm9qZWN0cywgYW5kIHRoZXkgYXJlIG5vdCBjb21waWxlZA0KLWJ5IHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBidWlsZGVyLjwvcD4NCi08cD5XaGVuIHlvdSBjcmVhdGUgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHVzaW5nIHRoZSB3b3JrYmVuY2gsDQotdGhlIGZvbGxvd2luZyBrZXkgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZDo8ZGw+PGRsZW50cnkgb3V0cHV0Y2xhc3M9ImlkX3Byb2plY3RmaWxlc190b3AiPg0KLTxkdD5NRVRBLUlORi9hcHBsaWNhdGlvbi54bWw8L2R0Pg0KLTxkZD5UaGlzIGZpbGUgaXMgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciBmb3IgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24sDQotYXMgZGVmaW5lZCBpbiB0aGUgSjJFRSBzcGVjaWZpY2F0aW9uLCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBhc3NvY2lhdGluZw0KLUoyRUUgbW9kdWxlcyB0byBhIHNwZWNpZmljIEVBUiBmaWxlLiBUaGlzIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgPHVpY29udHJvbD5NRVRBLUlORjwvdWljb250cm9sPiBmb2xkZXIuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0Pi5zZXR0aW5ncy8uY29tcG9uZW50PC9kdD4NCi08ZGQ+VGhpcyBmaWxlIG1hdGNoZXMgdGhlIGxvY2F0aW9uIG9mIGVhY2ggbW9kdWxlJ3Mgc291cmNlIGNvZGUgdG8gdGhlIGxvY2F0aW9uDQotb2YgdGhlIG1vZHVsZSBhdCBkZXBsb3ltZW50LiBGb3IgZWFjaCBtb2R1bGUgaW5jbHVkZWQgZm9yIGRlcGxveW1lbnQgd2l0aA0KLXRoZSBFQVIgZmlsZSwgdGhlIC5jb21wb25lbnQgZmlsZSBsaXN0cyBpdHMgc291cmNlIHBhdGggYW5kIGRlcGxveW1lbnQgcGF0aC4NCi1UaGlzIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgPHVpY29udHJvbD4uc2V0dGluZ3M8L3VpY29udHJvbD4gZm9sZGVyLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD4uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sPC9kdD4NCi08ZGQ+VGhpcyBmaWxlIGxpc3RzIHRoZSBmYWNldHMgb2YgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4gU2VlIDx4cmVmDQotaHJlZj0iY2ZhY2V0cy5kaXRhIj48L3hyZWY+LiBUaGlzIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgPHVpY29udHJvbD4uc2V0dGluZ3M8L3VpY29udHJvbD4gZm9sZGVyLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5IG91dHB1dGNsYXNzPSJpZF9wcm9qZWN0ZmlsZXNfYm90dG9tIj4NCi08ZHQ+LnByb2plY3Q8L2R0Pg0KLTxkZD5UaGlzIGlzIGEgd29ya2JlbmNoIGFydGlmYWN0LCB0aGUgc3RhbmRhcmQgcHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlLjwvZGQ+DQotPC9kbGVudHJ5PjwvZGw+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqZWFycHJvai5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2plYXJwcm9qLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NjYxMzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2plYXJwcm9qLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgdGllcyB0b2dldGhlciB0aGUgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGRlcGxveSBhIEoyRUUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRpZXMgdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIiAvPgotPG1ldGEgY29udGVudD0iZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMsIHByb2plY3RzLCBhcnRpZmFjdHMsIEoyRUUsIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMsIHByb2plY3RzLCBhcnRpZmFjdHMsIEoyRUUsIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMsIG92ZXJ2aWV3IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGplYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqaW1wZWFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amV4cGVhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGplYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGpyYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NmYWNldHMuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjamVhcnByb2oiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjamVhcnByb2oiPjxhIG5hbWU9ImNqZWFycHJvaiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0czwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF9jb25ib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5BbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgdGllcwotdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uPC9wPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotCi08cD5BbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgY29udGFpbnMgYSBzZXQgb2YgcmVmZXJlbmNlcyB0byBvdGhlcgotSjJFRSBtb2R1bGVzIGFuZCBKYXZh4oSiIHByb2plY3RzIHRoYXQgYXJlIGNvbWJpbmVkIHRvIGNvbXBvc2UgYW4gRUFSIGZpbGUuCi1UaGVzZSBwcm9qZWN0cyBjYW4gYmUgV2ViIG1vZHVsZXMsIEVKQiBtb2R1bGVzLCBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlcywKLWNvbm5lY3RvciBtb2R1bGVzLCBnZW5lcmFsIHV0aWxpdHkgSmF2YSBKQVIgZmlsZXMsIGFuZCBFSkIgY2xpZW50IEpBUiBmaWxlcy4KLUVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMgY3JlYXRlZCBpbiB0aGUgd29ya2JlbmNoIGluY2x1ZGUgYSBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yLCBhcyB3ZWxsIGFzIGZpbGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgSjJFRSBtb2R1bGVzIHRoYXQgYXJlCi1kZWZpbmVkIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IuPC9wPgotCi08cD5XaGVuIGEgSjJFRSBtb2R1bGUgcHJvamVjdCBpcyBjcmVhdGVkLCBpdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVudGVycHJpc2UKLWFwcGxpY2F0aW9uIHByb2plY3QuIFRoZSBwcm9qZWN0IHdpemFyZHMgYWlkIHRoaXMgYnkgYWxsb3dpbmcgeW91IHRvIHNwZWNpZnkKLWEgbmV3IG9yIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4gRW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cwotYXJlIGV4cG9ydGVkIGFzIEVBUiAoZW50ZXJwcmlzZSBhcmNoaXZlKSBmaWxlcyB0aGF0IGluY2x1ZGUgYWxsIGZpbGVzIGRlZmluZWQKLWluIHRoZSBFbnRlcnByaXNlIEFwcGxpY2F0aW9uIHByb2plY3QgYXMgd2VsbCBhcyB0aGUgYXBwcm9wcmlhdGUgYXJjaGl2ZSBmaWxlCi1mb3IgZWFjaCBKMkVFIG1vZHVsZSBvciB1dGlsaXR5IEpBUiBwcm9qZWN0IGRlZmluZWQgaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciwKLXN1Y2ggYXMgV2ViIGFyY2hpdmUgKFdBUikgZmlsZXMgYW5kIEVKQiBKQVIgZmlsZXMuPC9wPgotCi08cD5BbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIGNhbiBjb250YWluIHV0aWxpdHkgSkFSIGZpbGVzIHRoYXQgYXJlIHRvIGJlCi11c2VkIGJ5IHRoZSBjb250YWluZWQgbW9kdWxlcy4gVGhpcyBhbGxvd3Mgc2hhcmluZyBvZiBjb2RlIGF0IHRoZSBhcHBsaWNhdGlvbgotbGV2ZWwgYnkgbXVsdGlwbGUgV2ViLCBFSkIsIG9yIGFwcGxpY2F0aW9uIGNsaWVudCBtb2R1bGVzLiBUaGVzZSBKQVIgZmlsZXMKLWFyZSBjb21tb25seSByZWZlcnJlZCB0byBhcyB1dGlsaXR5IEpBUiBmaWxlcy4gVGhlIHV0aWxpdHkgSkFSIGZpbGVzIGRlZmluZWQKLWZvciBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgY2FuIGJlIGFjdHVhbCBKQVIgZmlsZXMgaW4gdGhlIHByb2plY3QsCi1vciB5b3UgY2FuIGluY2x1ZGUgdXRpbGl0eSBKYXZhIHByb2plY3RzIHRoYXQgYXJlIGRlc2lnbmF0ZWQgdG8gYmVjb21lCi10aGUgdXRpbGl0eSBKQVIgZmlsZXMgZHVyaW5nIGFzc2VtYmx5IGFuZCBkZXBsb3ltZW50LjwvcD4KLQotPHA+VG8gc3RhcnQgZGV2ZWxvcGluZyBKMkVFIGFwcGxpY2F0aW9ucywgeW91IHR5cGljYWxseSBmaXJzdCBjcmVhdGUgYW4gZW50ZXJwcmlzZQotYXBwbGljYXRpb24gcHJvamVjdCB0byB0aWUgdG9nZXRoZXIgeW91ciBXZWIsIEVKQiwgYW5kIGFwcGxpY2F0aW9uIGNsaWVudAotbW9kdWxlcy4gVGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBpcyB1c2VkIHRvIGNvbXBvc2UgYW4gZW50aXJlIGFwcGxpY2F0aW9uCi1mcm9tIHRoZSB2YXJpb3VzIG1vZHVsZXMuIFNpbmNlIG5vIHNvdXJjZSBjb2RlIGlzIGJ1aWx0IGRpcmVjdGx5IGludG8gYW4gZW50ZXJwcmlzZQotYXBwbGljYXRpb24sIHRoZXNlIHByb2plY3RzIGFyZSBub3QgSmF2YSBwcm9qZWN0cywgYW5kIHRoZXkgYXJlIG5vdCBjb21waWxlZAotYnkgdGhlIEphdmEgYnVpbGRlci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPldoZW4geW91IGNyZWF0ZSBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgdXNpbmcgdGhlIHdvcmtiZW5jaCwKLXRoZSBmb2xsb3dpbmcga2V5IGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQ6PGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPk1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbDwvZHQ+Ci0KLTxkZD5UaGlzIGZpbGUgaXMgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciBmb3IgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24sCi1hcyBkZWZpbmVkIGluIHRoZSBKMkVFIHNwZWNpZmljYXRpb24sIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGFzc29jaWF0aW5nCi1KMkVFIG1vZHVsZXMgdG8gYSBzcGVjaWZpYyBFQVIgZmlsZS4gVGhpcyBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk1FVEEtSU5GPC9zcGFuPiBmb2xkZXIuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+LnNldHRpbmdzLy5jb21wb25lbnQ8L2R0PgotCi08ZGQ+VGhpcyBmaWxlIG1hdGNoZXMgdGhlIGxvY2F0aW9uIG9mIGVhY2ggbW9kdWxlJ3Mgc291cmNlIGNvZGUgdG8gdGhlIGxvY2F0aW9uCi1vZiB0aGUgbW9kdWxlIGF0IGRlcGxveW1lbnQuIEZvciBlYWNoIG1vZHVsZSBpbmNsdWRlZCBmb3IgZGVwbG95bWVudCB3aXRoCi10aGUgRUFSIGZpbGUsIHRoZSAuY29tcG9uZW50IGZpbGUgbGlzdHMgaXRzIHNvdXJjZSBwYXRoIGFuZCBkZXBsb3ltZW50IHBhdGguCi1UaGlzIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+LnNldHRpbmdzPC9zcGFuPiBmb2xkZXIuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+LnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbDwvZHQ+Ci0KLTxkZD5UaGlzIGZpbGUgbGlzdHMgdGhlIGZhY2V0cyBvZiB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LiBTZWUgPGEgaHJlZj0iY2ZhY2V0cy5odG1sIiB0aXRsZT0iRmFjZXRzIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cyYjMTA7Zm9yIEphdmEgRUUgcHJvamVjdHMgYW5kIGFyZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbi4gIj5Qcm9qZWN0IGZhY2V0czwvYT4uIFRoaXMgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj4uc2V0dGluZ3M8L3NwYW4+IGZvbGRlci48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj4ucHJvamVjdDwvZHQ+Ci0KLTxkZD5UaGlzIGlzIGEgd29ya2JlbmNoIGFydGlmYWN0LCB0aGUgc3RhbmRhcmQgcHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlLjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsY29uY2VwdHMiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2phcmNoLmh0bWwiIHRpdGxlPSJUaGUgSmF2YSAyIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpIHByb3ZpZGVzIGEgc3RhbmRhcmQgZm9yIGRldmVsb3BpbmcgbXVsdGl0aWVyLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4iPkoyRUUgYXJjaGl0ZWN0dXJlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiB0aXRsZT0iRmFjZXRzIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cyBmb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiI+UHJvamVjdCBmYWNldHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqZWFyLmh0bWwiIHRpdGxlPSJVc2luZyB0aGUgd2l6YXJkIHRvIGNyZWF0ZSBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYWxsb3dzIHlvdSB0byBwYWNrYWdlIG1hbnkgd2ViIGFwcGxpY2F0aW9ucyBhbmQgbW9kdWxlcyBpbiBhIHByb2plY3QgYW5kIGRlcGxveSB0aGVzZSBtb2R1bGVzIGFzIGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLiI+Q3JlYXRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGppbXBlYXIuaHRtbCIgdGl0bGU9IkVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMgYXJlIGRlcGxveWVkIGludG8gRUFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYnkgaW1wb3J0aW5nIGl0IGZyb20gYSBkZXBsb3llZCBFQVIgZmlsZS4iPkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGpleHBlYXIuaHRtbCIgdGl0bGU9IkVudGVycHJpc2UgYXBwbGljYXRpb25zIGFyZSBkZXBsb3llZCBpbiB0aGUgZm9ybSBvZiBhbiBFQVIgZmlsZS4gVXNlIHRoZSBFeHBvcnQgd2l6YXJkIHRvIGV4cG9ydCBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgaW50byBhbiBFQVIgZmlsZSBmb3IgZGVwbG95bWVudC4iPkV4cG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIGludG8gYW4gRUFSIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amFwcHByb2ouaHRtbCIgdGl0bGU9IllvdSBjYW4gdXNlIGEgd2l6YXJkIHRvIGNyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBhbmQgYWRkIGl0IHRvIGEgbmV3IG9yIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4iPkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGpyYXIuaHRtbCIgdGl0bGU9IkEgY29ubmVjdG9yIGlzIGEgSjJFRSBzdGFuZGFyZCBleHRlbnNpb24gbWVjaGFuaXNtIGZvciBjb250YWluZXJzIHRvIHByb3ZpZGUgY29ubmVjdGl2aXR5IHRvIGVudGVycHJpc2UgaW5mb3JtYXRpb24gc3lzdGVtcyAoRUlTcykuIj5DcmVhdGluZyBhIGNvbm5lY3RvciBwcm9qZWN0PC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqZWU1b3ZlcnZpZXcuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqZWU1b3ZlcnZpZXcuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2MmIxOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jamVlNW92ZXJ2aWV3LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iDQotICJjb25jZXB0LmR0ZCI+DQotPGNvbmNlcHQgaWQ9ImNqYXZhZWU1IiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPjx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIDU6IE92ZXJ2aWV3PC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlVzaW5nIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uICg8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSkNCi1hcmNoaXRlY3R1cmUsIHlvdSBjYW4gYnVpbGQgZGlzdHJpYnV0ZWQgV2ViIGFuZCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4gVGhpcw0KLWFyY2hpdGVjdHVyZSBoZWxwcyB5b3UgZm9jdXMgb24gcHJlc2VudGF0aW9uIGFuZCBhcHBsaWNhdGlvbiBpc3N1ZXMsIHJhdGhlcg0KLXRoYW4gb24gc3lzdGVtcyBpc3N1ZXMuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+SmF2YSBFRSA1PC9pbmRleHRlcm0+PGluZGV4dGVybT5PZXJ2aWV3PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5Pg0KLTxwPllvdSBjYW4gdXNlIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSA1IHRvb2xzIGFuZCBmZWF0dXJlcyB0byBjcmVhdGUgYXBwbGljYXRpb25zDQotdGhhdCBhcmUgc3RydWN0dXJlZCBhcm91bmQgbW9kdWxlcyB3aXRoIGRpZmZlcmVudCBwdXJwb3Nlcywgc3VjaCBhcyBXZWIgc2l0ZXMNCi1hbmQgRW50ZXJwcmlzZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmFCZWFucyI+SmF2YUJlYW5zPC90bT4gKEVKQikgYXBwbGljYXRpb25zLiBXaGVuIHlvdSB1c2UgRUpCDQotMy4wIGNvbXBvbmVudHMsIHlvdSBjYW4gY3JlYXRlIGEgZGlzdHJpYnV0ZWQsIHNlY3VyZSBhcHBsaWNhdGlvbiB3aXRoIHRyYW5zYWN0aW9uYWwNCi1zdXBwb3J0LiBXaGVuIHlvdSBkZXZlbG9wIGFwcGxpY2F0aW9ucyB0aGF0IGFjY2VzcyBwZXJzaXN0ZW50IGRhdGEsIHlvdSBjYW4NCi11c2UgdGhlIG5ldyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBQZXJzaXN0ZW5jZSBBUEkgKEpQQSkuIFRoaXMgc3RhbmRhcmQgc2ltcGxpZmllcw0KLXRoZSBjcmVhdGlvbiBhbmQgdXNlIG9mIHBlcnNpc3RlbnQgZW50aXRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIG5ldyBmZWF0dXJlcy4NCi1Gb3IgZGV2ZWxvcGluZyBwcmVzZW50YXRpb24gbG9naWMsIHlvdSBjYW4gdXNlIHRlY2hub2xvZ2llcyBzdWNoIGFzIEphdmFTZXJ2ZXINCi1QYWdlcyAoSlNQKSBvciBKYXZhU2VydmVyIEZhY2VzIChKU0YpLjwvcD4NCi08cD5Vc2luZyB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgNSBQbGF0Zm9ybSBFbnRlcnByaXNlIEVkaXRpb24gKEphdmEgRUUpICwgeW91DQotY2FuIGRldmVsb3AgYXBwbGljYXRpb25zIG1vcmUgcXVpY2tseSBhbmQgY29udmVuaWVudGx5IHRoYW4gaW4gcHJldmlvdXMgdmVyc2lvbnMuDQotVGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRQ0KLTUgcGxhdGZvcm0gcmVwbGFjZXMgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gMiBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpLCB2ZXJzaW9uDQotMS40LiBUaGUgcHJvZHVjdCB0b29scyBzdXBwb3J0IGZvciBib3RoIHZlcnNpb25zLiBKYXZhIEVFIDUgc2lnbmlmaWNhbnRseQ0KLWVuaGFuY2VzIGVhc2Ugb2YgdXNlIHByb3ZpZGluZzx1bD4NCi08bGk+UmVkdWNlZCBkZXZlbG9wbWVudCB0aW1lPC9saT4NCi08bGk+UmVkdWNlZCBhcHBsaWNhdGlvbiBjb21wbGV4aXR5PC9saT4NCi08bGk+SW1wcm92ZWQgYXBwbGljYXRpb24gcGVyZm9ybWFuY2U8L2xpPg0KLTwvdWw+PC9wPg0KLTxwPkphdmEgRUUgNSBwcm92aWRlcyBhIHNpbXBsaWZpZWQgcHJvZ3JhbW1pbmcgbW9kZWwsIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nDQotdG9vbHM6PHVsPg0KLTxsaT5JbmxpbmUgY29uZmlndXJhdGlvbiB3aXRoIGFubm90YXRpb25zLCBtYWtpbmcgZGVwbG95bWVudCBkZXNjcmlwdG9ycyBub3cNCi1vcHRpb25hbDwvbGk+DQotPGxpPkRlcGVuZGVuY3kgaW5qZWN0aW9uLCBoaWRpbmcgcmVzb3VyY2UgY3JlYXRpb24gYW5kIGxvb2t1cCBmcm9tIGFwcGxpY2F0aW9uDQotY29kZTwvbGk+DQotPGxpPkphdmEgcGVyc2lzdGVuY2UgQVBJIChKUEEpIGFsbG93cyBkYXRhIG1hbmFnZW1lbnQgd2l0aG91dCBleHBsaWNpdCBTUUwNCi1vciBKREJDPC9saT4NCi08bGk+VXNlIG9mIHBsYWluIG9sZCBKYXZhIG9iamVjdHMgKFBPSk9zKSBmb3IgRW50ZXJwcmlzZSBKYXZhQmVhbnMgYW5kIFdlYg0KLXNlcnZpY2VzPC9saT4NCi08L3VsPjwvcD4NCi08cD5KYXZhIEVFIDUgcHJvdmlkZXMgc2ltcGxpZmllZCBwYWNrYWdpbmcgcnVsZXMgZm9yIGVudGVycHJpc2UgYXBwbGljYXRpb25zOjx1bD4NCi08bGk+V2ViIGFwcGxpY2F0aW9ucyB1cyAuV0FSIGZpbGVzPC9saT4NCi08bGk+UmVzb3VyY2UgYWRhcHRlcnMgdXNlIC5SQVIgZmlsZXM8L2xpPg0KLTxsaT5FbnRlcnByaXNlIGFwcGxpY2F0aW9ucyB1c2UgLkVBUiBmaWxlczwvbGk+DQotPGxpPlRoZSA8Y29kZXBoPmxpYjwvY29kZXBoPiBkaXJlY3RvcnkgY29udGFpbnMgc2hhcmVkIC5KQVIgZmlsZXM8L2xpPg0KLTxsaT5BIC5KQVIgZmlsZSB3aXRoIDxjb2RlcGg+TWFpbi1DbGFzczwvY29kZXBoPiBpbXBsaWVzIGFuIGFwcGxpY2F0aW9uIGNsaWVudDwvbGk+DQotPGxpPkEgLkpBUiBmaWxlIHdpdGggQFN0YXRlbGVzcyBhbm5vdGF0aW9uIGltcGxpZXMgYW4gRUpCIGFwcGxpY2F0aW9uPC9saT4NCi08bGk+TWFueSBzaW1wbGUgYXBwbGljYXRpb25zIG5vIGxvbmdlciByZXF1aXJlIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMsIGluY2x1ZGluZzx1bD4NCi08bGk+RUpCIGFwcGxpY2F0aW9ucyAoLkpBUiBmaWxlcyk8L2xpPg0KLTxsaT5XZWIgYXBwbGljYXRpb25zIHRoYXQgdXNlIEpTUCB0ZWNobm9sb2d5IG9ubHk8L2xpPg0KLTxsaT5BcHBsaWNhdGlvbiBjbGllbnRzPC9saT4NCi08bGk+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgKC5FQVIgZmlsZXMpPC9saT4NCi08L3VsPjwvbGk+DQotPC91bD48L3A+DQotPHA+SmF2YSBFRSA1IHByb3ZpZGVzIHNpbXBsaWZpZWQgcmVzb3VyY2UgYWNjZXNzIHVzaW5nIGRlcGVuZGVuY3kgaW5qZWN0aW9uOjx1bD4NCi08bGk+SW4gdGhlIERlcGVuZGVuY3kgSW5qZWN0aW9uIHBhdHRlcm4sIGFuIGV4dGVybmFsIGVudGl0eSBhdXRvbWF0aWNhbGx5DQotc3VwcGxpZXMgYW4gb2JqZWN0J3MgZGVwZW5kZW5jaWVzLjx1bD4NCi08bGk+VGhlIG9iamVjdCBuZWVkIG5vdCByZXF1ZXN0IHRoZXNlIHJlc291cmNlcyBleHBsaWNpdGx5PC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkluIEphdmEgRUUgNSwgZGVwZW5kZW5jeSBpbmplY3Rpb24gY2FuIGJlIGFwcGxpZWQgdG8gYWxsIHJlc291cmNlcyB0aGF0DQotYSBjb21wb25lbnQgbmVlZHM8dWw+DQotPGxpPkNyZWF0aW9uIGFuZCBsb29rdXAgb2YgcmVzb3VyY2VzIGFyZSBoaWRkZW4gZnJvbSBhcHBsaWNhdGlvbiBjb2RlPC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkRlcGVuZGVuY3kgaW5qZWN0aW9uIGNhbiBiZSBhcHBsaWVkIHRocm91Z2hvdXQgSmF2YSBFRSA1IHRlY2hub2xvZ3k6PHVsPg0KLTxsaT5FSkIgY29udGFpbmVyczwvbGk+DQotPGxpPldlYiBjb250YWluZXJzPC9saT4NCi08bGk+Q2xpZW50czwvbGk+DQotPGxpPldlYiBzZXJ2aWNlczwvbGk+DQotPC91bD48L2xpPg0KLTwvdWw+PC9wPg0KLTwvY29uYm9keT4NCi08L2NvbmNlcHQ+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2plZTVvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2plZTVvdmVydmlldy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2IyOGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqZWU1b3ZlcnZpZXcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJKYXZhIEVFIDU6IE92ZXJ2aWV3IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlVzaW5nIHRoZSBKYXZhIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEphdmEgRUUpIGFyY2hpdGVjdHVyZSwgeW91IGNhbiBidWlsZCBkaXN0cmlidXRlZCBXZWIgYW5kIGVudGVycHJpc2UgYXBwbGljYXRpb25zLiBUaGlzIGFyY2hpdGVjdHVyZSBoZWxwcyB5b3UgZm9jdXMgb24gcHJlc2VudGF0aW9uIGFuZCBhcHBsaWNhdGlvbiBpc3N1ZXMsIHJhdGhlciB0aGFuIG9uIHN5c3RlbXMgaXNzdWVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgSmF2YSBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKYXZhIEVFKSBhcmNoaXRlY3R1cmUsIHlvdSBjYW4gYnVpbGQgZGlzdHJpYnV0ZWQgV2ViIGFuZCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4gVGhpcyBhcmNoaXRlY3R1cmUgaGVscHMgeW91IGZvY3VzIG9uIHByZXNlbnRhdGlvbiBhbmQgYXBwbGljYXRpb24gaXNzdWVzLCByYXRoZXIgdGhhbiBvbiBzeXN0ZW1zIGlzc3Vlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJKYXZhIEVFIDUsIE9lcnZpZXciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKYXZhIEVFIDUsIE9lcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2phdmFlZTUuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjamF2YWVlNSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkphdmEgRUUgNTogT3ZlcnZpZXc8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqYXZhZWU1Ij48YSBuYW1lPSJjamF2YWVlNSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+SmF2YSBFRSA1OiBPdmVydmlldzwvaDE+Ci0KLQotCi08ZGl2PjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPlVzaW5nIHRoZSBKYXZh4oSiIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEphdmEgRUUpCi1hcmNoaXRlY3R1cmUsIHlvdSBjYW4gYnVpbGQgZGlzdHJpYnV0ZWQgV2ViIGFuZCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4gVGhpcwotYXJjaGl0ZWN0dXJlIGhlbHBzIHlvdSBmb2N1cyBvbiBwcmVzZW50YXRpb24gYW5kIGFwcGxpY2F0aW9uIGlzc3VlcywgcmF0aGVyCi10aGFuIG9uIHN5c3RlbXMgaXNzdWVzLjwvcD4KLQotPHA+WW91IGNhbiB1c2UgdGhlIEphdmEgRUUgNSB0b29scyBhbmQgZmVhdHVyZXMgdG8gY3JlYXRlIGFwcGxpY2F0aW9ucwotdGhhdCBhcmUgc3RydWN0dXJlZCBhcm91bmQgbW9kdWxlcyB3aXRoIGRpZmZlcmVudCBwdXJwb3Nlcywgc3VjaCBhcyBXZWIgc2l0ZXMKLWFuZCBFbnRlcnByaXNlIEphdmFCZWFuc+KEoiAoRUpCKSBhcHBsaWNhdGlvbnMuIFdoZW4geW91IHVzZSBFSkIKLTMuMCBjb21wb25lbnRzLCB5b3UgY2FuIGNyZWF0ZSBhIGRpc3RyaWJ1dGVkLCBzZWN1cmUgYXBwbGljYXRpb24gd2l0aCB0cmFuc2FjdGlvbmFsCi1zdXBwb3J0LiBXaGVuIHlvdSBkZXZlbG9wIGFwcGxpY2F0aW9ucyB0aGF0IGFjY2VzcyBwZXJzaXN0ZW50IGRhdGEsIHlvdSBjYW4KLXVzZSB0aGUgbmV3IEphdmEgUGVyc2lzdGVuY2UgQVBJIChKUEEpLiBUaGlzIHN0YW5kYXJkIHNpbXBsaWZpZXMKLXRoZSBjcmVhdGlvbiBhbmQgdXNlIG9mIHBlcnNpc3RlbnQgZW50aXRpZXMsIGFzIHdlbGwgYXMgYWRkaW5nIG5ldyBmZWF0dXJlcy4KLUZvciBkZXZlbG9waW5nIHByZXNlbnRhdGlvbiBsb2dpYywgeW91IGNhbiB1c2UgdGVjaG5vbG9naWVzIHN1Y2ggYXMgSmF2YVNlcnZlcgotUGFnZXMgKEpTUCkgb3IgSmF2YVNlcnZlciBGYWNlcyAoSlNGKS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlVzaW5nIHRoZSBKYXZhIEVFIDUgUGxhdGZvcm0gRW50ZXJwcmlzZSBFZGl0aW9uIChKYXZhIEVFKSAsIHlvdQotY2FuIGRldmVsb3AgYXBwbGljYXRpb25zIG1vcmUgcXVpY2tseSBhbmQgY29udmVuaWVudGx5IHRoYW4gaW4gcHJldmlvdXMgdmVyc2lvbnMuCi1UaGUgSmF2YSBFRQotNSBwbGF0Zm9ybSByZXBsYWNlcyBKYXZhIDIgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSwgdmVyc2lvbgotMS40LiBUaGUgcHJvZHVjdCB0b29scyBzdXBwb3J0IGZvciBib3RoIHZlcnNpb25zLiBKYXZhIEVFIDUgc2lnbmlmaWNhbnRseQotZW5oYW5jZXMgZWFzZSBvZiB1c2UgcHJvdmlkaW5nPHVsPgotPGxpPlJlZHVjZWQgZGV2ZWxvcG1lbnQgdGltZTwvbGk+Ci0KLTxsaT5SZWR1Y2VkIGFwcGxpY2F0aW9uIGNvbXBsZXhpdHk8L2xpPgotCi08bGk+SW1wcm92ZWQgYXBwbGljYXRpb24gcGVyZm9ybWFuY2U8L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InAiPkphdmEgRUUgNSBwcm92aWRlcyBhIHNpbXBsaWZpZWQgcHJvZ3JhbW1pbmcgbW9kZWwsIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nCi10b29sczo8dWw+Ci08bGk+SW5saW5lIGNvbmZpZ3VyYXRpb24gd2l0aCBhbm5vdGF0aW9ucywgbWFraW5nIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgbm93Ci1vcHRpb25hbDwvbGk+Ci0KLTxsaT5EZXBlbmRlbmN5IGluamVjdGlvbiwgaGlkaW5nIHJlc291cmNlIGNyZWF0aW9uIGFuZCBsb29rdXAgZnJvbSBhcHBsaWNhdGlvbgotY29kZTwvbGk+Ci0KLTxsaT5KYXZhIHBlcnNpc3RlbmNlIEFQSSAoSlBBKSBhbGxvd3MgZGF0YSBtYW5hZ2VtZW50IHdpdGhvdXQgZXhwbGljaXQgU1FMCi1vciBKREJDPC9saT4KLQotPGxpPlVzZSBvZiBwbGFpbiBvbGQgSmF2YSBvYmplY3RzIChQT0pPcykgZm9yIEVudGVycHJpc2UgSmF2YUJlYW5zIGFuZCBXZWIKLXNlcnZpY2VzPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJwIj5KYXZhIEVFIDUgcHJvdmlkZXMgc2ltcGxpZmllZCBwYWNrYWdpbmcgcnVsZXMgZm9yIGVudGVycHJpc2UgYXBwbGljYXRpb25zOjx1bD4KLTxsaT5XZWIgYXBwbGljYXRpb25zIHVzIC5XQVIgZmlsZXM8L2xpPgotCi08bGk+UmVzb3VyY2UgYWRhcHRlcnMgdXNlIC5SQVIgZmlsZXM8L2xpPgotCi08bGk+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgdXNlIC5FQVIgZmlsZXM8L2xpPgotCi08bGk+VGhlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmxpYjwvc2FtcD4gZGlyZWN0b3J5IGNvbnRhaW5zIHNoYXJlZCAuSkFSIGZpbGVzPC9saT4KLQotPGxpPkEgLkpBUiBmaWxlIHdpdGggPHNhbXAgY2xhc3M9ImNvZGVwaCI+TWFpbi1DbGFzczwvc2FtcD4gaW1wbGllcyBhbiBhcHBsaWNhdGlvbiBjbGllbnQ8L2xpPgotCi08bGk+QSAuSkFSIGZpbGUgd2l0aCBAU3RhdGVsZXNzIGFubm90YXRpb24gaW1wbGllcyBhbiBFSkIgYXBwbGljYXRpb248L2xpPgotCi08bGk+TWFueSBzaW1wbGUgYXBwbGljYXRpb25zIG5vIGxvbmdlciByZXF1aXJlIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMsIGluY2x1ZGluZzx1bD4KLTxsaT5FSkIgYXBwbGljYXRpb25zICguSkFSIGZpbGVzKTwvbGk+Ci0KLTxsaT5XZWIgYXBwbGljYXRpb25zIHRoYXQgdXNlIEpTUCB0ZWNobm9sb2d5IG9ubHk8L2xpPgotCi08bGk+QXBwbGljYXRpb24gY2xpZW50czwvbGk+Ci0KLTxsaT5FbnRlcnByaXNlIGFwcGxpY2F0aW9ucyAoLkVBUiBmaWxlcyk8L2xpPgotCi08L3VsPgotPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJwIj5KYXZhIEVFIDUgcHJvdmlkZXMgc2ltcGxpZmllZCByZXNvdXJjZSBhY2Nlc3MgdXNpbmcgZGVwZW5kZW5jeSBpbmplY3Rpb246PHVsPgotPGxpPkluIHRoZSBEZXBlbmRlbmN5IEluamVjdGlvbiBwYXR0ZXJuLCBhbiBleHRlcm5hbCBlbnRpdHkgYXV0b21hdGljYWxseQotc3VwcGxpZXMgYW4gb2JqZWN0J3MgZGVwZW5kZW5jaWVzLjx1bD4KLTxsaT5UaGUgb2JqZWN0IG5lZWQgbm90IHJlcXVlc3QgdGhlc2UgcmVzb3VyY2VzIGV4cGxpY2l0bHk8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkluIEphdmEgRUUgNSwgZGVwZW5kZW5jeSBpbmplY3Rpb24gY2FuIGJlIGFwcGxpZWQgdG8gYWxsIHJlc291cmNlcyB0aGF0Ci1hIGNvbXBvbmVudCBuZWVkczx1bD4KLTxsaT5DcmVhdGlvbiBhbmQgbG9va3VwIG9mIHJlc291cmNlcyBhcmUgaGlkZGVuIGZyb20gYXBwbGljYXRpb24gY29kZTwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+RGVwZW5kZW5jeSBpbmplY3Rpb24gY2FuIGJlIGFwcGxpZWQgdGhyb3VnaG91dCBKYXZhIEVFIDUgdGVjaG5vbG9neTo8dWw+Ci08bGk+RUpCIGNvbnRhaW5lcnM8L2xpPgotCi08bGk+V2ViIGNvbnRhaW5lcnM8L2xpPgotCi08bGk+Q2xpZW50czwvbGk+Ci0KLTxsaT5XZWIgc2VydmljZXM8L2xpPgotCi08L3VsPgotPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvY2phdmFlZTUuaHRtbCIgdGl0bGU9IlRoZSBKYXZhIEVFIDUgcHJvZ3JhbW1pbmcgbW9kZWwgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBKYXZhIGFwcGxpY2F0aW9ucy4iPkRldmVsb3BpbmcgSmF2YSBFRSA1IEFwcGxpY2F0aW9uczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9janBlcnMuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqcGVycy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDhiZDAwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqcGVycy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjanBlcnMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+PHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgcGVyc3BlY3RpdmU8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIHBlcnNwZWN0aXZlIGluY2x1ZGVzIHdvcmtiZW5jaCB2aWV3cw0KLXRoYXQgeW91IGNhbiB1c2Ugd2hlbiBkZXZlbG9waW5nIHJlc291cmNlcyBmb3IgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMsIEVKQg0KLW1vZHVsZXMsIFdlYiBtb2R1bGVzLCBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlcywgYW5kIGNvbm5lY3RvciBwcm9qZWN0cyBvcg0KLW1vZHVsZXMuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+SmF2YSBFRTxpbmRleHRlcm0+d29ya2JlbmNoIHBlcnNwZWN0aXZlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+ZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnM8aW5kZXh0ZXJtPkphdmEgRUUgcGVyc3BlY3RpdmU8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPGNvbmJvZHkgb3V0cHV0Y2xhc3M9ImlkX2NvbmJvZHkiPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4NCi08cD5Zb3UgY2FuIHJlYXJyYW5nZSB0aGUgbG9jYXRpb24sIHRpbGluZywgYW5kIHNpemUgb2YgdGhlIHZpZXdzIHdpdGhpbiB0aGUNCi1wZXJzcGVjdGl2ZS4gWW91IGNhbiBhbHNvIGFkZCBvdGhlciB2aWV3cyB0byB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgcGVyc3BlY3RpdmUgYnkgY2xpY2tpbmcgPG1lbnVjYXNjYWRlPg0KLTx1aWNvbnRyb2w+V2luZG93PC91aWNvbnRyb2w+PHVpY29udHJvbD5TaG93IFZpZXc8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQNCi1zZWxlY3RpbmcgdGhlIHZpZXcuPC9wPg0KLTxwPlRoZSB3b3JrYmVuY2ggcHJvdmlkZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHZpZXdzIGFuZCBlZGl0b3JzLg0KLVRoaXMgaXMgYWxzbyB0cnVlIGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlLjwvcD4NCi08cD5CeSBkZWZhdWx0LCB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgcGVyc3BlY3RpdmUgaW5jbHVkZXMgdGhlIGZvbGxvd2luZw0KLXdvcmtiZW5jaCB2aWV3czo8L3A+DQotPGRsPjxkbGVudHJ5IG91dHB1dGNsYXNzPSJpZF9wZXJzcGVjdGl2ZXZpZXdzX3RvcCI+DQotPGR0Pjx1aWNvbnRyb2w+UHJvamVjdCBFeHBsb3JlcjwvdWljb250cm9sPjwvZHQ+DQotPGRkPlRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgcHJvdmlkZXMgYW4gaW50ZWdyYXRlZCB2aWV3IG9mIHlvdXIgcHJvamVjdHMNCi1hbmQgdGhlaXIgYXJ0aWZhY3RzIHJlbGF0ZWQgdG8gSjJFRSBkZXZlbG9wbWVudC4gWW91IGNhbiBzaG93IG9yIGhpZGUgeW91cg0KLXByb2plY3RzIGJhc2VkIG9uIHdvcmtpbmcgc2V0cy4gVGhpcyB2aWV3IGRpc3BsYXlzIG5hdmlnYWJsZSBtb2RlbHMgb2YgSjJFRQ0KLWRlcGxveW1lbnQgZGVzY3JpcHRvcnMsIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGFydGlmYWN0cyAoc291cmNlIGZvbGRlcnMsIHBhY2thZ2VzLA0KLWFuZCBjbGFzc2VzKSwgbmF2aWdhYmxlIG1vZGVscyBvZiB0aGUgYXZhaWxhYmxlIFdlYiBzZXJ2aWNlcywgYW5kIHNwZWNpYWxpemVkDQotdmlld3Mgb2YgV2ViIG1vZHVsZXMgdG8gc2ltcGxpZnkgdGhlIGRldmVsb3BtZW50IG9mIGR5bmFtaWMgV2ViIGFwcGxpY2F0aW9ucy4NCi1JbiBhZGRpdGlvbiwgRUpCIGRhdGFiYXNlIG1hcHBpbmcgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9mIHByb2plY3RzIGZvciBhDQotSjJFRSBhcHBsaWNhdGlvbiBzZXJ2ZXIgYXJlIG1hZGUgcmVhZGlseSBhdmFpbGFibGUuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0Pjx1aWNvbnRyb2w+IE91dGxpbmU8L3VpY29udHJvbD48L2R0Pg0KLTxkZD5UaGUgT3V0bGluZSB2aWV3IGluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSBwZXJzcGVjdGl2ZSBzaG93cyB0aGUgb3V0bGluZSBvZg0KLXRoZSBmaWxlIHRoYXQgeW91IGFyZSBlZGl0aW5nLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBhIHRhYmJlZCBkZXBsb3ltZW50DQotZGVzY3JpcHRvciBlZGl0b3IsIHRoZSBPdXRsaW5lIHZpZXcgc2hvd3MgdGhlIG91dGxpbmUgZm9yIHRoZSBzZWxlY3RlZCBwYWdlJ3MNCi1lbGVtZW50cywgYW5kIGlmIHlvdSBhcmUgZWRpdGluZyBvbiB0aGUgU291cmNlIHRhYiwgdGhlIG91dGxpbmUgZm9yIHRoZSBYTUwNCi1zb3VyY2UgaXMgZGlzcGxheWVkLiBJZiB5b3UgYXJlIGVkaXRpbmcgYW4gZW50ZXJwcmlzZSBiZWFuIGluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBlZGl0b3IsDQotdGhlIE91dGxpbmUgdmlldyBzaG93cyB0aGUgb3V0bGluZSBmb3IgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsYXNzLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD48dWljb250cm9sPlRhc2tzPC91aWNvbnRyb2w+PC9kdD4NCi08ZGQ+VGhlIFRhc2tzIHZpZXcgbGlzdHMgdGhlIHRvLWRvIGl0ZW1zIHRoYXQgeW91IGhhdmUgZW50ZXJlZC48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+PHVpY29udHJvbD5Qcm9ibGVtczwvdWljb250cm9sPjwvZHQ+DQotPGRkPlRoZSBQcm9ibGVtcyB2aWV3IGRpc3BsYXlzIHByb2JsZW1zLCB3YXJuaW5ncywgb3IgZXJyb3JzIGFzc29jaWF0ZWQgd2l0aA0KLXRoZSBzZWxlY3RlZCBwcm9qZWN0LiBZb3UgY2FuIGRvdWJsZS1jbGljayBvbiBhbiBpdGVtIHRvIGFkZHJlc3MgdGhlIHNwZWNpZmljDQotcHJvYmxlbSBpbiB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UuPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0Pjx1aWNvbnRyb2w+UHJvcGVydGllczwvdWljb250cm9sPjwvZHQ+DQotPGRkPlRoZSBQcm9wZXJ0aWVzIHZpZXcgcHJvdmlkZXMgYSB0YWJ1bGFyIHZpZXcgb2YgdGhlIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0ZWQNCi12YWx1ZXMgb2Ygb2JqZWN0cyBpbiBmaWxlcyB5b3UgaGF2ZSBvcGVuIGluIGFuIGVkaXRvci48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+PHVpY29udHJvbD5TZXJ2ZXJzPC91aWNvbnRyb2w+PC9kdD4NCi08ZGQ+VGhlIFNlcnZlcnMgdmlldyBzaG93cyBhbGwgdGhlIGNyZWF0ZWQgc2VydmVyIGluc3RhbmNlcy4gWW91IGNhbiBzdGFydA0KLWFuZCBzdG9wIGVhY2ggc2VydmVyIGZyb20gdGhpcyB2aWV3LCBhbmQgeW91IGNhbiBsYXVuY2ggdGhlIHRlc3QgY2xpZW50LjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5IG91dHB1dGNsYXNzPSJpZF9wZXJzcGVjdGl2ZXZpZXdzX2JvdHRvbSI+DQotPGR0Pjx1aWNvbnRyb2w+U25pcHBldHM8L3VpY29udHJvbD48L2R0Pg0KLTxkZD5UaGUgU25pcHBldHMgdmlldyBwcm92aWRlcyBjYXRlZ29yaXplZCBwaWVjZXMgb2YgY29kZSB0aGF0IHlvdSBjYW4gaW5zZXJ0DQotaW50byBhcHByb3ByaWF0ZSBwbGFjZXMgaW4geW91ciBzb3VyY2UgY29kZS48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+PHVpY29udHJvbD5EYXRhIFNvdXJjZSBFeHBsb3JlcjwvdWljb250cm9sPjwvZHQ+DQotPGRkPlRoZSBEYXRhIFNvdXJjZSBFeHBsb3JlciBwcm92aWRlcyBhIGxpc3Qgb2YgY29uZmlndXJlZCBjb25uZWN0aW9uIHByb2ZpbGVzLg0KLUlmIGNhdGVnb3JpZXMgYXJlIGVuYWJsZWQsIHlvdSBjYW4gc2VlIHRoZSBsaXN0IGdyb3VwZWQgaW50byBjYXRlZ29yaWVzLiBVc2UNCi10aGUgRGF0YSBTb3VyY2UgRXhwbG9yZXIgdG8gY29ubmVjdCB0bywgbmF2aWdhdGUsIGFuZCBpbnRlcmFjdCB3aXRoIHJlc291cmNlcw0KLWFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY29ubmVjdGlvbiBwcm9maWxlLiBJdCBhbHNvIHByb3ZpZGVzIGltcG9ydCBhbmQNCi1leHBvcnQgY2FwYWJpbGl0aWVzIHRvIHNoYXJlIGNvbm5lY3Rpb24gcHJvZmlsZSBkZWZpbml0aW9ucyB3aXRoIG90aGVyIEVjbGlwc2UNCi1Xb3JrYmVuY2hlcy4gPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0Pjx1aWNvbnRyb2w+U3RhdHVzIGJhcjwvdWljb250cm9sPjwvZHQ+DQotPGRkPlRoZSBTdGF0dXMgYmFyIHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGxvY2F0aW9uIG9mIHNlbGVjdGVkIG9iamVjdHMNCi1pbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3cyBpbiB0aGUgbGVmdCBzaWRlLiBXaGVuIGZpbGUgYW5kIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMNCi1hcmUgb3BlbiwgdGhlIHN0YXR1cyBiYXIgc2hvd3MgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgZmlsZXMgYW5kIHRoZSBsaW5lDQotYW5kIGNvbHVtbiBudW1iZXJzIHdoZW4gYXBwbGljYWJsZS4gU29tZXRpbWVzIHdoZW4gbG9uZyBvcGVyYXRpb25zIHJ1biwgYQ0KLXN0YXR1cyBtb25pdG9yIHdpbGwgYXBwZWFyIGluIHRoZSBzdGF0dXMgYmFyLCBhbG9uZyB3aXRoIGEgYnV0dG9uIHdpdGggYSBzdG9wDQotc2lnbiBpY29uLiBDbGlja2luZyB0aGUgc3RvcCBzaWduIHN0b3BzIHRoZSBvcGVyYXRpb24gd2hlbiB0aGUgb3BlcmF0aW9uIGNhbg0KLWJlIGNhbmNlbGxlZC48L2RkPg0KLTwvZGxlbnRyeT48L2RsPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2NqcGVycy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2pwZXJzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NGZlMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2pwZXJzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSmF2YSBFRSBwZXJzcGVjdGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBpbmNsdWRlcyB3b3JrYmVuY2ggdmlld3MgdGhhdCB5b3UgY2FuIHVzZSB3aGVuIGRldmVsb3BpbmcgcmVzb3VyY2VzIGZvciBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucywgRUpCIG1vZHVsZXMsIFdlYiBtb2R1bGVzLCBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlcywgYW5kIGNvbm5lY3RvciBwcm9qZWN0cyBvciBtb2R1bGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBpbmNsdWRlcyB3b3JrYmVuY2ggdmlld3MgdGhhdCB5b3UgY2FuIHVzZSB3aGVuIGRldmVsb3BpbmcgcmVzb3VyY2VzIGZvciBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucywgRUpCIG1vZHVsZXMsIFdlYiBtb2R1bGVzLCBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlcywgYW5kIGNvbm5lY3RvciBwcm9qZWN0cyBvciBtb2R1bGVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkphdmEgRUUsIHdvcmtiZW5jaCBwZXJzcGVjdGl2ZXMsIGVudGVycHJpc2UgYXBwbGljYXRpb25zLCBKYXZhIEVFIHBlcnNwZWN0aXZlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSwgd29ya2JlbmNoIHBlcnNwZWN0aXZlcywgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMsIEphdmEgRUUgcGVyc3BlY3RpdmUiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9jd29ya3NldC5odG0iIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2pwZXJzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SmF2YSBFRSBwZXJzcGVjdGl2ZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2pwZXJzIj48YSBuYW1lPSJjanBlcnMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkphdmEgRUUgcGVyc3BlY3RpdmU8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfY29uYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhlIEphdmHihKIgRUUgcGVyc3BlY3RpdmUgaW5jbHVkZXMgd29ya2JlbmNoIHZpZXdzCi10aGF0IHlvdSBjYW4gdXNlIHdoZW4gZGV2ZWxvcGluZyByZXNvdXJjZXMgZm9yIGVudGVycHJpc2UgYXBwbGljYXRpb25zLCBFSkIKLW1vZHVsZXMsIFdlYiBtb2R1bGVzLCBhcHBsaWNhdGlvbiBjbGllbnQgbW9kdWxlcywgYW5kIGNvbm5lY3RvciBwcm9qZWN0cyBvcgotbW9kdWxlcy48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwPllvdSBjYW4gcmVhcnJhbmdlIHRoZSBsb2NhdGlvbiwgdGlsaW5nLCBhbmQgc2l6ZSBvZiB0aGUgdmlld3Mgd2l0aGluIHRoZQotcGVyc3BlY3RpdmUuIFlvdSBjYW4gYWxzbyBhZGQgb3RoZXIgdmlld3MgdG8gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUgYnkgY2xpY2tpbmcgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93IFZpZXc8L3NwYW4+PC9zcGFuPiBhbmQKLXNlbGVjdGluZyB0aGUgdmlldy48L3A+Ci0KLTxwPlRoZSB3b3JrYmVuY2ggcHJvdmlkZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHZpZXdzIGFuZCBlZGl0b3JzLgotVGhpcyBpcyBhbHNvIHRydWUgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUuPC9wPgotCi08cD5CeSBkZWZhdWx0LCB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nCi13b3JrYmVuY2ggdmlld3M6PC9wPgotCi08ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvamVjdCBFeHBsb3Jlcjwvc3Bhbj48L2R0PgotCi08ZGQ+VGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyBwcm92aWRlcyBhbiBpbnRlZ3JhdGVkIHZpZXcgb2YgeW91ciBwcm9qZWN0cwotYW5kIHRoZWlyIGFydGlmYWN0cyByZWxhdGVkIHRvIEoyRUUgZGV2ZWxvcG1lbnQuIFlvdSBjYW4gc2hvdyBvciBoaWRlIHlvdXIKLXByb2plY3RzIGJhc2VkIG9uIHdvcmtpbmcgc2V0cy4gVGhpcyB2aWV3IGRpc3BsYXlzIG5hdmlnYWJsZSBtb2RlbHMgb2YgSjJFRQotZGVwbG95bWVudCBkZXNjcmlwdG9ycywgSmF2YSBhcnRpZmFjdHMgKHNvdXJjZSBmb2xkZXJzLCBwYWNrYWdlcywKLWFuZCBjbGFzc2VzKSwgbmF2aWdhYmxlIG1vZGVscyBvZiB0aGUgYXZhaWxhYmxlIFdlYiBzZXJ2aWNlcywgYW5kIHNwZWNpYWxpemVkCi12aWV3cyBvZiBXZWIgbW9kdWxlcyB0byBzaW1wbGlmeSB0aGUgZGV2ZWxvcG1lbnQgb2YgZHluYW1pYyBXZWIgYXBwbGljYXRpb25zLgotSW4gYWRkaXRpb24sIEVKQiBkYXRhYmFzZSBtYXBwaW5nIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvZiBwcm9qZWN0cyBmb3IgYQotSjJFRSBhcHBsaWNhdGlvbiBzZXJ2ZXIgYXJlIG1hZGUgcmVhZGlseSBhdmFpbGFibGUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+IE91dGxpbmU8L3NwYW4+PC9kdD4KLQotPGRkPlRoZSBPdXRsaW5lIHZpZXcgaW4gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUgc2hvd3MgdGhlIG91dGxpbmUgb2YKLXRoZSBmaWxlIHRoYXQgeW91IGFyZSBlZGl0aW5nLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBhIHRhYmJlZCBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yIGVkaXRvciwgdGhlIE91dGxpbmUgdmlldyBzaG93cyB0aGUgb3V0bGluZSBmb3IgdGhlIHNlbGVjdGVkIHBhZ2UncwotZWxlbWVudHMsIGFuZCBpZiB5b3UgYXJlIGVkaXRpbmcgb24gdGhlIFNvdXJjZSB0YWIsIHRoZSBvdXRsaW5lIGZvciB0aGUgWE1MCi1zb3VyY2UgaXMgZGlzcGxheWVkLiBJZiB5b3UgYXJlIGVkaXRpbmcgYW4gZW50ZXJwcmlzZSBiZWFuIGluIHRoZSBKYXZhIGVkaXRvciwKLXRoZSBPdXRsaW5lIHZpZXcgc2hvd3MgdGhlIG91dGxpbmUgZm9yIHRoZSBKYXZhIGNsYXNzLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhc2tzPC9zcGFuPjwvZHQ+Ci0KLTxkZD5UaGUgVGFza3MgdmlldyBsaXN0cyB0aGUgdG8tZG8gaXRlbXMgdGhhdCB5b3UgaGF2ZSBlbnRlcmVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByb2JsZW1zPC9zcGFuPjwvZHQ+Ci0KLTxkZD5UaGUgUHJvYmxlbXMgdmlldyBkaXNwbGF5cyBwcm9ibGVtcywgd2FybmluZ3MsIG9yIGVycm9ycyBhc3NvY2lhdGVkIHdpdGgKLXRoZSBzZWxlY3RlZCBwcm9qZWN0LiBZb3UgY2FuIGRvdWJsZS1jbGljayBvbiBhbiBpdGVtIHRvIGFkZHJlc3MgdGhlIHNwZWNpZmljCi1wcm9ibGVtIGluIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9wZXJ0aWVzPC9zcGFuPjwvZHQ+Ci0KLTxkZD5UaGUgUHJvcGVydGllcyB2aWV3IHByb3ZpZGVzIGEgdGFidWxhciB2aWV3IG9mIHRoZSBwcm9wZXJ0aWVzIGFuZCBhc3NvY2lhdGVkCi12YWx1ZXMgb2Ygb2JqZWN0cyBpbiBmaWxlcyB5b3UgaGF2ZSBvcGVuIGluIGFuIGVkaXRvci48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5TZXJ2ZXJzPC9zcGFuPjwvZHQ+Ci0KLTxkZD5UaGUgU2VydmVycyB2aWV3IHNob3dzIGFsbCB0aGUgY3JlYXRlZCBzZXJ2ZXIgaW5zdGFuY2VzLiBZb3UgY2FuIHN0YXJ0Ci1hbmQgc3RvcCBlYWNoIHNlcnZlciBmcm9tIHRoaXMgdmlldywgYW5kIHlvdSBjYW4gbGF1bmNoIHRoZSB0ZXN0IGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5TbmlwcGV0czwvc3Bhbj48L2R0PgotCi08ZGQ+VGhlIFNuaXBwZXRzIHZpZXcgcHJvdmlkZXMgY2F0ZWdvcml6ZWQgcGllY2VzIG9mIGNvZGUgdGhhdCB5b3UgY2FuIGluc2VydAotaW50byBhcHByb3ByaWF0ZSBwbGFjZXMgaW4geW91ciBzb3VyY2UgY29kZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5EYXRhIFNvdXJjZSBFeHBsb3Jlcjwvc3Bhbj48L2R0PgotCi08ZGQ+VGhlIERhdGEgU291cmNlIEV4cGxvcmVyIHByb3ZpZGVzIGEgbGlzdCBvZiBjb25maWd1cmVkIGNvbm5lY3Rpb24gcHJvZmlsZXMuCi1JZiBjYXRlZ29yaWVzIGFyZSBlbmFibGVkLCB5b3UgY2FuIHNlZSB0aGUgbGlzdCBncm91cGVkIGludG8gY2F0ZWdvcmllcy4gVXNlCi10aGUgRGF0YSBTb3VyY2UgRXhwbG9yZXIgdG8gY29ubmVjdCB0bywgbmF2aWdhdGUsIGFuZCBpbnRlcmFjdCB3aXRoIHJlc291cmNlcwotYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjb25uZWN0aW9uIHByb2ZpbGUuIEl0IGFsc28gcHJvdmlkZXMgaW1wb3J0IGFuZAotZXhwb3J0IGNhcGFiaWxpdGllcyB0byBzaGFyZSBjb25uZWN0aW9uIHByb2ZpbGUgZGVmaW5pdGlvbnMgd2l0aCBvdGhlciBFY2xpcHNlCi1Xb3JrYmVuY2hlcy4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+U3RhdHVzIGJhcjwvc3Bhbj48L2R0PgotCi08ZGQ+VGhlIFN0YXR1cyBiYXIgcHJvdmlkZXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbG9jYXRpb24gb2Ygc2VsZWN0ZWQgb2JqZWN0cwotaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlld3MgaW4gdGhlIGxlZnQgc2lkZS4gV2hlbiBmaWxlIGFuZCBkZXBsb3ltZW50IGRlc2NyaXB0b3JzCi1hcmUgb3BlbiwgdGhlIHN0YXR1cyBiYXIgc2hvd3MgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgZmlsZXMgYW5kIHRoZSBsaW5lCi1hbmQgY29sdW1uIG51bWJlcnMgd2hlbiBhcHBsaWNhYmxlLiBTb21ldGltZXMgd2hlbiBsb25nIG9wZXJhdGlvbnMgcnVuLCBhCi1zdGF0dXMgbW9uaXRvciB3aWxsIGFwcGVhciBpbiB0aGUgc3RhdHVzIGJhciwgYWxvbmcgd2l0aCBhIGJ1dHRvbiB3aXRoIGEgc3RvcAotc2lnbiBpY29uLiBDbGlja2luZyB0aGUgc3RvcCBzaWduIHN0b3BzIHRoZSBvcGVyYXRpb24gd2hlbiB0aGUgb3BlcmF0aW9uIGNhbgotYmUgY2FuY2VsbGVkLjwvZGQ+Ci0KLTwvZGw+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGluZm8iPjxzdHJvbmc+UmVsYXRlZCBpbmZvcm1hdGlvbjwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9jd29ya3NldC5odG0iPldvcmtpbmcgc2V0czwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9janZpZXcuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nqdmlldy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2E0OWUxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nqdmlldy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjanZpZXciIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+UHJvamVjdCBFeHBsb3JlciB2aWV3IGluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRQ0KLXBlcnNwZWN0aXZlPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPldoaWxlIGRldmVsb3BpbmcgSjJFRSBhcHBsaWNhdGlvbnMgaW4NCi10aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFDQotcGVyc3BlY3RpdmUsIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgaXMgeW91ciBtYWluIHZpZXcgb2YgeW91ciBKMkVFIHByb2plY3RzDQotYW5kIHJlc291cmNlcy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT52aWV3czxpbmRleHRlcm0+UHJvamVjdCBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Y29uYm9keSBvdXRwdXRjbGFzcz0iaWRfY29uYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwPlRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgcHJvdmlkZXMgYW4gaW50ZWdyYXRlZCB2aWV3IG9mIGFsbCBwcm9qZWN0IHJlc291cmNlcywNCi1pbmNsdWRpbmcgbW9kZWxzIG9mIEoyRUUgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYXJ0aWZhY3RzLCByZXNvdXJjZXMsIFdlYiBzZXJ2aWNlcywNCi1kYXRhYmFzZXMsIGFuZCBkeW5hbWljIFdlYiBwcm9qZWN0IGFydGlmYWN0cy48L3A+DQotPHA+WW91IHNob3VsZCB1c2UgdGhpcyB2aWV3IHRvIHdvcmsgd2l0aCB5b3VyIEoyRUUgZGVwbG95bWVudCBkZXNjcmlwdG9ycw0KLWFuZCB0aGVpciBjb250ZW50LiBZb3UgY2FuIHZpZXcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGFuZCBzZWUNCi1hbGwgb2YgdGhlIG1vZHVsZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiA8L3A+DQotPHA+WW91IGNhbiBhbHNvIGZpbHRlciB3aGF0IHlvdSBzZWUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyB0byBoaWRlIHByb2plY3RzLA0KLWZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gc2VlLiBUbyBlbmFibGUgb3IgZGlzYWJsZSBmaWx0ZXJzLA0KLXNlbGVjdCA8dWljb250cm9sPkN1c3RvbWl6ZSBWaWV3Li4uPC91aWNvbnRyb2w+IGZyb20gdGhlIGRyb3AtZG93biBtZW51IGF0DQotdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlIHZpZXcuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPHhyZWYgaHJlZj0iY2p2aWV3ZmlsdGVycy5kaXRhIj5GaWx0ZXJzDQotaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldzwveHJlZj4uPC9wPg0KLTxwPkFsdGVybmF0ZWx5LCB5b3UgY2FuIGZpbHRlciB3aGF0IHlvdSBzZWUgYnkgc2hvd2luZyBvciBoaWRpbmcgd29ya2luZyBzZXRzLA0KLWdyb3VwcyBvZiByZWxhdGVkIHJlc291cmNlcyBvciBwcm9qZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8eHJlZiBmb3JtYXQ9Imh0bWwiDQotaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvY29uY2VwdHMvY3dvcmtzZXQuaHRtIiBzY29wZT0icGVlciI+V29ya2luZw0KLVNldHM8ZGVzYz48L2Rlc2M+PC94cmVmPi48L3A+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPg0KLTwvY29uYm9keT4NCi08L2NvbmNlcHQ+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2p2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9janZpZXcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzOGMwZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9janZpZXcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlByb2plY3QgRXhwbG9yZXIgdmlldyBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXaGlsZSBkZXZlbG9waW5nIEoyRUUgYXBwbGljYXRpb25zIGluIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlLCB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IGlzIHlvdXIgbWFpbiB2aWV3IG9mIHlvdXIgSjJFRSBwcm9qZWN0cyBhbmQgcmVzb3VyY2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXaGlsZSBkZXZlbG9waW5nIEoyRUUgYXBwbGljYXRpb25zIGluIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlLCB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IGlzIHlvdXIgbWFpbiB2aWV3IG9mIHlvdXIgSjJFRSBwcm9qZWN0cyBhbmQgcmVzb3VyY2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9InZpZXdzLCBQcm9qZWN0IEV4cGxvcmVyIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0idmlld3MsIFByb2plY3QgRXhwbG9yZXIiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGp2aWV3ZmlsdGVycy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9jd29ya3NldC5odG0iIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2p2aWV3IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UHJvamVjdCBFeHBsb3JlciB2aWV3IGluIHRoZSBKYXZhIEVFCi1wZXJzcGVjdGl2ZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2p2aWV3Ij48YSBuYW1lPSJjanZpZXciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPlByb2plY3QgRXhwbG9yZXIgdmlldyBpbiB0aGUgSmF2YSBFRQotcGVyc3BlY3RpdmU8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfY29uYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+V2hpbGUgZGV2ZWxvcGluZyBKMkVFIGFwcGxpY2F0aW9ucyBpbgotdGhlIEphdmHihKIgRUUKLXBlcnNwZWN0aXZlLCB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IGlzIHlvdXIgbWFpbiB2aWV3IG9mIHlvdXIgSjJFRSBwcm9qZWN0cwotYW5kIHJlc291cmNlcy48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwPlRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgcHJvdmlkZXMgYW4gaW50ZWdyYXRlZCB2aWV3IG9mIGFsbCBwcm9qZWN0IHJlc291cmNlcywKLWluY2x1ZGluZyBtb2RlbHMgb2YgSjJFRSBkZXBsb3ltZW50IGRlc2NyaXB0b3JzLCBKYXZhIGFydGlmYWN0cywgcmVzb3VyY2VzLCBXZWIgc2VydmljZXMsCi1kYXRhYmFzZXMsIGFuZCBkeW5hbWljIFdlYiBwcm9qZWN0IGFydGlmYWN0cy48L3A+Ci0KLTxwPllvdSBzaG91bGQgdXNlIHRoaXMgdmlldyB0byB3b3JrIHdpdGggeW91ciBKMkVFIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMKLWFuZCB0aGVpciBjb250ZW50LiBZb3UgY2FuIHZpZXcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGFuZCBzZWUKLWFsbCBvZiB0aGUgbW9kdWxlcyBhc3NvY2lhdGVkIHdpdGggaXQuIDwvcD4KLQotPHA+WW91IGNhbiBhbHNvIGZpbHRlciB3aGF0IHlvdSBzZWUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyB0byBoaWRlIHByb2plY3RzLAotZm9sZGVycywgb3IgZmlsZXMgdGhhdCB5b3UgZG9uJ3Qgd2FudCB0byBzZWUuIFRvIGVuYWJsZSBvciBkaXNhYmxlIGZpbHRlcnMsCi1zZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3VzdG9taXplIFZpZXcuLi48L3NwYW4+IGZyb20gdGhlIGRyb3AtZG93biBtZW51IGF0Ci10aGUgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUgdmlldy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSJjanZpZXdmaWx0ZXJzLmh0bWwiPkZpbHRlcnMgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldzwvYT4uPC9wPgotCi08cD5BbHRlcm5hdGVseSwgeW91IGNhbiBmaWx0ZXIgd2hhdCB5b3Ugc2VlIGJ5IHNob3dpbmcgb3IgaGlkaW5nIHdvcmtpbmcgc2V0cywKLWdyb3VwcyBvZiByZWxhdGVkIHJlc291cmNlcyBvciBwcm9qZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9jd29ya3NldC5odG0iIHRpdGxlPSIiPldvcmtpbmcgU2V0czwvYT4uPC9wPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZpZXdmaWx0ZXJzLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGZpbHRlciB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IHRvIGhpZGUgcHJvamVjdHMsIGZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIHNlZS4iPkZpbHRlcmluZyBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3PC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWxpbmZvIj48c3Ryb25nPlJlbGF0ZWQgaW5mb3JtYXRpb248L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvY29uY2VwdHMvY3dvcmtzZXQuaHRtIj5Xb3JraW5nIHNldHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2p2aWV3ZmlsdGVycy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY2p2aWV3ZmlsdGVycy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTM3N2ExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nqdmlld2ZpbHRlcnMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiINCi0gImNvbmNlcHQuZHRkIj4NCi08Y29uY2VwdCBpZD0iY2p2aWV3ZmlsdGVycyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5GaWx0ZXJzIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXc8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+WW91IGNhbiBmaWx0ZXIgdGhlIFByb2plY3QgRXhwbG9yZXINCi12aWV3IHRvIGhpZGUgcHJvamVjdHMsIGZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIHNlZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5maWx0ZXJzPGluZGV4dGVybT5Qcm9qZWN0IEV4cGxvcmVyIHZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPnZpZXdzPGluZGV4dGVybT5Qcm9qZWN0IEV4cGxvcmVyIGZpbHRlcnM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPGNvbmJvZHkgb3V0cHV0Y2xhc3M9ImlkX2NvbmJvZHkiPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4NCi08cD5UbyBlbmFibGUgb3IgZGlzYWJsZSBmaWx0ZXJzLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjxvbD4NCi08bGk+T3BlbiB0aGUgU2VsZWN0IENvbW1vbiBOYXZpZ2F0b3IgRmlsdGVycyB3aW5kb3cgYnkgc2VsZWN0aW5nIDx1aWNvbnRyb2w+Q3VzdG9taXplDQotVmlldy4uLjwvdWljb250cm9sPiBmcm9tIHRoZSBkcm9wLWRvd24gbWVudSBhdCB0aGUgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUNCi12aWV3LjwvbGk+DQotPGxpPk9uIHRoZSA8dWljb250cm9sPkZpbHRlcnM8L3VpY29udHJvbD4gdGFiLCBzZWxlY3QgdGhlIGNoZWNrIGJveGVzIG5leHQNCi10byB0aGUgZmlsdGVycyB5b3Ugd2FudCB0byBlbmFibGUuIEZvciBleGFtcGxlLCB3aGVuIHRoZSA8dWljb250cm9sPkNsb3NlZA0KLSBwcm9qZWN0czwvdWljb250cm9sPiBmaWx0ZXIgaXMgZW5hYmxlZCwgY2xvc2VkIHByb2plY3RzIGFyZSBub3Qgc2hvd24gaW4NCi10aGUgIFByb2plY3QgRXhwbG9yZXIgdmlldy4gT3RoZXIgZmlsdGVycyBjYW4gaGlkZSBlbXB0eSBwYWNrYWdlcywgbm9uLWphdmENCi1maWxlcywgYW5kIGZpbGVzIHdpdGggbmFtZXMgZW5kaW5nIGluICIuY2xhc3MiLjwvbGk+DQotPGxpPk9uIHRoZSBBdmFpbGFibGUgRXh0ZW5zaW9ucyBhbmQgRmlsdGVycyB0YWIsIHRoZSBmaWx0ZXJzIHdvcmsgaW4gdGhlIG9wcG9zaXRlDQotd2F5OiB0aGUgc2VsZWN0ZWQgY2hlY2sgYm94ZXMgZGVzY3JpYmUgdGhlIHByb2plY3RzLCBmb2xkZXJzLCBhbmQgZmlsZXMgdGhhdA0KLWFyZSBzaG93biBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LiBGb3IgZXhhbXBsZSwgaWYgeW91IGNsZWFyIHRoZSBjaGVja2JveA0KLW5leHQgdG8gPHVpY29udHJvbD5KMkVFIERlcGxveW1lbnQgRGVzY3JpcHRvcnM8L3VpY29udHJvbD4sIHRoZSBkZXBsb3ltZW50DQotZGVzY3JpcHRvcnMgYXJlIGhpZGRlbiBmcm9tIGVhY2ggcHJvamVjdCBpbiB0aGUgdmlldy48L2xpPg0KLTwvb2w+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nqdmlld2ZpbHRlcnMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2Nqdmlld2ZpbHRlcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxYmJhMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9janZpZXdmaWx0ZXJzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJGaWx0ZXJzIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBmaWx0ZXIgdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyB0byBoaWRlIHByb2plY3RzLCBmb2xkZXJzLCBvciBmaWxlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0byBzZWUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gZmlsdGVyIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgdG8gaGlkZSBwcm9qZWN0cywgZm9sZGVycywgb3IgZmlsZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gc2VlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImZpbHRlcnMsIFByb2plY3QgRXhwbG9yZXIgdmlldywgdmlld3MsIFByb2plY3QgRXhwbG9yZXIgZmlsdGVycyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImZpbHRlcnMsIFByb2plY3QgRXhwbG9yZXIgdmlldywgdmlld3MsIFByb2plY3QgRXhwbG9yZXIgZmlsdGVycyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2p2aWV3ZmlsdGVycyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkZpbHRlcnMgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2p2aWV3ZmlsdGVycyI+PGEgbmFtZT0iY2p2aWV3ZmlsdGVycyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+RmlsdGVycyBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3PC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX2NvbmJvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gZmlsdGVyIHRoZSBQcm9qZWN0IEV4cGxvcmVyCi12aWV3IHRvIGhpZGUgcHJvamVjdHMsIGZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIHNlZS48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxkaXYgY2xhc3M9InAiPlRvIGVuYWJsZSBvciBkaXNhYmxlIGZpbHRlcnMsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PG9sPgotPGxpPk9wZW4gdGhlIFNlbGVjdCBDb21tb24gTmF2aWdhdG9yIEZpbHRlcnMgd2luZG93IGJ5IHNlbGVjdGluZyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DdXN0b21pemUKLVZpZXcuLi48L3NwYW4+IGZyb20gdGhlIGRyb3AtZG93biBtZW51IGF0IHRoZSB0b3AgcmlnaHQgY29ybmVyIG9mIHRoZQotdmlldy48L2xpPgotCi08bGk+T24gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbHRlcnM8L3NwYW4+IHRhYiwgc2VsZWN0IHRoZSBjaGVjayBib3hlcyBuZXh0Ci10byB0aGUgZmlsdGVycyB5b3Ugd2FudCB0byBlbmFibGUuIEZvciBleGFtcGxlLCB3aGVuIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DbG9zZWQKLSBwcm9qZWN0czwvc3Bhbj4gZmlsdGVyIGlzIGVuYWJsZWQsIGNsb3NlZCBwcm9qZWN0cyBhcmUgbm90IHNob3duIGluCi10aGUgIFByb2plY3QgRXhwbG9yZXIgdmlldy4gT3RoZXIgZmlsdGVycyBjYW4gaGlkZSBlbXB0eSBwYWNrYWdlcywgbm9uLWphdmEKLWZpbGVzLCBhbmQgZmlsZXMgd2l0aCBuYW1lcyBlbmRpbmcgaW4gIi5jbGFzcyIuPC9saT4KLQotPGxpPk9uIHRoZSBBdmFpbGFibGUgRXh0ZW5zaW9ucyBhbmQgRmlsdGVycyB0YWIsIHRoZSBmaWx0ZXJzIHdvcmsgaW4gdGhlIG9wcG9zaXRlCi13YXk6IHRoZSBzZWxlY3RlZCBjaGVjayBib3hlcyBkZXNjcmliZSB0aGUgcHJvamVjdHMsIGZvbGRlcnMsIGFuZCBmaWxlcyB0aGF0Ci1hcmUgc2hvd24gaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBjbGVhciB0aGUgY2hlY2tib3gKLW5leHQgdG8gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SjJFRSBEZXBsb3ltZW50IERlc2NyaXB0b3JzPC9zcGFuPiwgdGhlIGRlcGxveW1lbnQKLWRlc2NyaXB0b3JzIGFyZSBoaWRkZW4gZnJvbSBlYWNoIHByb2plY3QgaW4gdGhlIHZpZXcuPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotCi08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY3R5cGVzb2Zhbm5vLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jdHlwZXNvZmFubm8uZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyODhiZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9jdHlwZXNvZmFubm8uZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiINCi0gImNvbmNlcHQuZHRkIj4NCi08Y29uY2VwdCBpZD0iY2phdmFlZTUiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+VHlwZXMgb2YgYW5ub3RhdGlvbnM8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+PHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgNSBkZWZpbmVzIGEgbnVtYmVyIG9mIHR5cGVzIG9yIGdyb3Vwcw0KLW9mIGFubm90YXRpb25zLCBkZWZpbmVkIGluIGEgbnVtYmVyIG9mIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IFNwZWNpZmljYXRpb24gUmVxdWVzdHMgKEpTUnMpLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkphdmEgRUUgNTxpbmRleHRlcm0+YW5ub3RhdGlvbnM8aW5kZXh0ZXJtPnR5cGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5IG91dHB1dGNsYXNzPSJpZF9jb25ib2R5Ij4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+DQotPHA+PHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFDQotNSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgYW5ub3RhdGlvbnM6PC9wPg0KLTx1bD4NCi08bGk+SlNSIDI1MDogQ29tbW9uIGFubm90YXRpb25zPGI+PC9iPjwvbGk+DQotPGxpPkpTUi0yMjA6IEVKQiAzLjAgYW5ub3RhdGlvbnM8L2xpPg0KLTxsaT5KU1ItMTgxOiBXZWIgU2VydmljZXMgYW5ub3RhdGlvbnM8L2xpPg0KLTxsaT5KU1ItMjIwOiBKYXZhIFBlcnNpc3RlbmNlIEFQSSBhbm5vdGF0aW9uczwvbGk+DQotPGxpPkpTUi0yMjI6IEpheEIgYW5ub3RhdGlvbnM8L2xpPg0KLTxsaT5KU1ItMjI0OiBXUzIgYW5ub3RhdGlvbnM8L2xpPg0KLTwvdWw+DQotPHA+Rm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgNS4wLCBzZWUgdGhlIG9mZmljaWFsIHNwZWNpZmljYXRpb246IDx4cmVmDQotaHJlZj0iaHR0cDovL2pjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0yNDQiIHNjb3BlPSJleHRlcm5hbCI+SlNSIDI0NDogPHRtIHRtY2xhc3M9InNwZWNpYWwiDQotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gUGxhdGZvcm0sDQotRW50ZXJwcmlzZSBFZGl0aW9uIDUgKDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIDUpIFNwZWNpZmljYXRpb248L3hyZWY+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL2N0eXBlc29mYW5uby5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY3R5cGVzb2Zhbm5vLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzYyM2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvY3R5cGVzb2Zhbm5vLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJUeXBlcyBvZiBhbm5vdGF0aW9ucyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJKYXZhIEVFIDUgZGVmaW5lcyBhIG51bWJlciBvZiB0eXBlcyBvciBncm91cHMgb2YgYW5ub3RhdGlvbnMsIGRlZmluZWQgaW4gYSBudW1iZXIgb2YgSmF2YSBTcGVjaWZpY2F0aW9uIFJlcXVlc3RzIChKU1JzKS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSmF2YSBFRSA1IGRlZmluZXMgYSBudW1iZXIgb2YgdHlwZXMgb3IgZ3JvdXBzIG9mIGFubm90YXRpb25zLCBkZWZpbmVkIGluIGEgbnVtYmVyIG9mIEphdmEgU3BlY2lmaWNhdGlvbiBSZXF1ZXN0cyAoSlNScykuIiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSA1LCBhbm5vdGF0aW9ucywgdHlwZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKYXZhIEVFIDUsIGFubm90YXRpb25zLCB0eXBlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90ZGVmaW5pbmdhbm5vdGF0aW9ucy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNqYXZhZWU1IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VHlwZXMgb2YgYW5ub3RhdGlvbnM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqYXZhZWU1Ij48YSBuYW1lPSJjamF2YWVlNSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+VHlwZXMgb2YgYW5ub3RhdGlvbnM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfY29uYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+SmF2YeKEoiBFRSA1IGRlZmluZXMgYSBudW1iZXIgb2YgdHlwZXMgb3IgZ3JvdXBzCi1vZiBhbm5vdGF0aW9ucywgZGVmaW5lZCBpbiBhIG51bWJlciBvZiBKYXZhIFNwZWNpZmljYXRpb24gUmVxdWVzdHMgKEpTUnMpLjwvcD4KLQotPHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLQotPHA+SmF2YSBFRQotNSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgYW5ub3RhdGlvbnM6PC9wPgotCi08dWw+Ci08bGk+SlNSIDI1MDogQ29tbW9uIGFubm90YXRpb25zPHN0cm9uZyAvPjwvbGk+Ci0KLTxsaT5KU1ItMjIwOiBFSkIgMy4wIGFubm90YXRpb25zPC9saT4KLQotPGxpPkpTUi0xODE6IFdlYiBTZXJ2aWNlcyBhbm5vdGF0aW9uczwvbGk+Ci0KLTxsaT5KU1ItMjIwOiBKYXZhIFBlcnNpc3RlbmNlIEFQSSBhbm5vdGF0aW9uczwvbGk+Ci0KLTxsaT5KU1ItMjIyOiBKYXhCIGFubm90YXRpb25zPC9saT4KLQotPGxpPkpTUi0yMjQ6IFdTMiBhbm5vdGF0aW9uczwvbGk+Ci0KLTwvdWw+Ci0KLTxwPkZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIEphdmEgRUUgNS4wLCBzZWUgdGhlIG9mZmljaWFsIHNwZWNpZmljYXRpb246IDxhIGhyZWY9Imh0dHA6Ly9qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MjQ0IiB0YXJnZXQ9Il9ibGFuayI+SlNSIDI0NDogSmF2YSBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIDUgKEphdmEgRUUgNSkgU3BlY2lmaWNhdGlvbjwvYT48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy90ZGVmaW5pbmdhbm5vdGF0aW9ucy5odG1sIiB0aXRsZT0iWW91IGNhbiB1c2UgdGhlIEBJbnRlcmZhY2UgYW5ub3RhdGlvbiB0byBkZWZpbmUgeW91ciBvd24gYW5ub3RhdGlvbiBkZWZpbml0aW9uLiI+RGVmaW5pbmcgYW5kIHVzaW5nIGFubm90YXRpb25zPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3BoLWltcG9ydGV4cG9ydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtaW1wb3J0ZXhwb3J0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzM2MzOWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtaW1wb3J0ZXhwb3J0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhRE9DVFlQRSB0b3BpYyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUb3BpYy8vRU4iDQotICJ0b3BpYy5kdGQiPg0KLTx0b3BpYyBpZD0icGgtaW1wb3J0ZXhwb3J0IiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkltcG9ydGluZyBhbmQgZXhwb3J0aW5nIHByb2plY3RzIGFuZCBmaWxlczwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGVzZSB0b3BpY3MgY292ZXIgaG93IHRvIGltcG9ydCBmaWxlcw0KLWFuZCBwcm9qZWN0cyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGV4cG9ydCBmaWxlcyBhbmQgcHJvamVjdHMgdG8gZGlzay48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxib2R5IG91dHB1dGNsYXNzPSJpZF9ib2R5Ij4NCi08cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPg0KLTwvYm9keT4NCi08L3RvcGljPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3BoLWltcG9ydGV4cG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtaW1wb3J0ZXhwb3J0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNTBlZGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtaW1wb3J0ZXhwb3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idG9waWMiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgcHJvamVjdHMgYW5kIGZpbGVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZXNlIHRvcGljcyBjb3ZlciBob3cgdG8gaW1wb3J0IGZpbGVzIGFuZCBwcm9qZWN0cyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGV4cG9ydCBmaWxlcyBhbmQgcHJvamVjdHMgdG8gZGlzay4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlc2UgdG9waWNzIGNvdmVyIGhvdyB0byBpbXBvcnQgZmlsZXMgYW5kIHByb2plY3RzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZXhwb3J0IGZpbGVzIGFuZCBwcm9qZWN0cyB0byBkaXNrLiIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3BoLXByb2plY3RzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amV4cGFwcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGpleHBlYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqZXhwcmFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amltcGVhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGppbXBhcHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqaW1wcmFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53ZWJ0b29scy5kb2MudXNlci90b3BpY3MvdHdpbXB3YXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndlYnRvb2xzLmRvYy51c2VyL3RvcGljcy90d2NyZXdhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3QuZWpiLmRvYy51c2VyL3RvcGljcy90ZWltcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3QuZWpiLmRvYy51c2VyL3RvcGljcy90ZWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2pjaXJjbGUuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqY2lyY2xlYi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InBoLWltcG9ydGV4cG9ydCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkltcG9ydGluZyBhbmQgZXhwb3J0aW5nIHByb2plY3RzIGFuZCBmaWxlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0icGgtaW1wb3J0ZXhwb3J0Ij48YSBuYW1lPSJwaC1pbXBvcnRleHBvcnQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkltcG9ydGluZyBhbmQgZXhwb3J0aW5nIHByb2plY3RzIGFuZCBmaWxlczwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF9ib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGVzZSB0b3BpY3MgY292ZXIgaG93IHRvIGltcG9ydCBmaWxlcwotYW5kIHByb2plY3RzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZXhwb3J0IGZpbGVzIGFuZCBwcm9qZWN0cyB0byBkaXNrLjwvcD4KLQotPHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLQotPHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGpleHBhcHAuaHRtbCI+RXhwb3J0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvc3Ryb25nPjxiciAvPgotWW91IGNhbiBleHBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYXMgYSBKQVIgZmlsZS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGpleHBlYXIuaHRtbCI+RXhwb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gaW50byBhbiBFQVIgZmlsZTwvYT48L3N0cm9uZz48YnIgLz4KLUVudGVycHJpc2UgYXBwbGljYXRpb25zIGFyZSBkZXBsb3llZCBpbiB0aGUgZm9ybSBvZiBhbiBFQVIgZmlsZS4gVXNlIHRoZSBFeHBvcnQgd2l6YXJkIHRvIGV4cG9ydCBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgaW50byBhbiBFQVIgZmlsZSBmb3IgZGVwbG95bWVudC48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGpleHByYXIuaHRtbCI+RXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1Zb3UgY2FuIGV4cG9ydCBhIGNvbm5lY3RvciBwcm9qZWN0IHRvIGEgUkFSIGZpbGUgaW4gcHJlcGFyYXRpb24gZm9yIGRlcGxveWluZyBpdCB0byBhIHNlcnZlci48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGppbXBlYXIuaHRtbCI+SW1wb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gRUFSIGZpbGU8L2E+PC9zdHJvbmc+PGJyIC8+Ci1FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIEVBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGJ5IGltcG9ydGluZyBpdCBmcm9tIGEgZGVwbG95ZWQgRUFSIGZpbGUuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3RqaW1wYXBwLmh0bWwiPkltcG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgSkFSIGZpbGU8L2E+PC9zdHJvbmc+PGJyIC8+Ci1BcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgYXJlIGRlcGxveWVkIGFzIEpBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgdGhhdCBoYXMgYmVlbiBkZXBsb3llZCBpbnRvIGEgSkFSIGZpbGUgYnkgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3RqaW1wcmFyLmh0bWwiPkltcG9ydGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IFJBUiBmaWxlPC9hPjwvc3Ryb25nPjxiciAvPgotQ29ubmVjdG9yIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIFJBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYSBjb25uZWN0b3IgcHJvamVjdCBieSBpbXBvcnRpbmcgYSBkZXBsb3llZCBSQVIgZmlsZS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud2VidG9vbHMuZG9jLnVzZXIvdG9waWNzL3R3aW1wd2FyLmh0bWwiPkltcG9ydGluZyBXZWIgYXJjaGl2ZSAoV0FSKSBmaWxlczwvYT48L3N0cm9uZz48YnIgLz4KLTwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53ZWJ0b29scy5kb2MudXNlci90b3BpY3MvdHdjcmV3YXIuaHRtbCI+RXhwb3J0aW5nIFdlYiBBcmNoaXZlIChXQVIpIGZpbGVzPC9hPjwvc3Ryb25nPjxiciAvPgotPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LmVqYi5kb2MudXNlci90b3BpY3MvdGVpbXAuaHRtbCI+SW1wb3J0aW5nIEVKQiBKQVIgZmlsZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci08L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3QuZWpiLmRvYy51c2VyL3RvcGljcy90ZWV4cC5odG1sIj5FeHBvcnRpbmcgRUpCIHByb2plY3RzIHRvIEVKQiBKQVIgZmlsZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci08L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvY2pjaXJjbGUuaHRtbCI+Q3ljbGljYWwgZGVwZW5kZW5jaWVzIGJldHdlZW4gSmF2YSBFRSBtb2R1bGVzPC9hPjwvc3Ryb25nPjxiciAvPgotQSBjeWNsaWNhbCBkZXBlbmRlbmN5IGJldHdlZW4gdHdvIG9yIG1vcmUgbW9kdWxlcyBpbiBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIG1vc3QgY29tbW9ubHkgb2NjdXJzIHdoZW4gcHJvamVjdHMgYXJlIGltcG9ydGVkIGZyb20gb3V0c2lkZSB0aGUgV29ya2JlbmNoLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90amNpcmNsZWIuaHRtbCI+Q29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgYW4gRUFSIGlzIGltcG9ydGVkPC9hPjwvc3Ryb25nPjxiciAvPgotWW91IGNhbiByZXNvbHZlIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvcGgtcHJvamVjdHMuaHRtbCIgdGl0bGU9IlRoZSB3b3JrYmVuY2ggY2FuIHdvcmsgd2l0aCBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBwcm9qZWN0cy4gVGhlIGZvbGxvd2luZyB0b3BpY3MgY292ZXIgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHNvbWUgb2YgdGhlIHR5cGVzIG9mIHByb2plY3RzIHJlbGF0ZWQgdG8gSjJFRSBkZXZlbG9wbWVudC4iPldvcmtpbmcgd2l0aCBwcm9qZWN0czwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1qMmVlYXBwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1qMmVlYXBwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNmI0ZWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtajJlZWFwcC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0b3BpYyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUb3BpYy8vRU4iDQotICJ0b3BpYy5kdGQiPg0KLTx0b3BpYyBpZD0icGgtajJlZWFwcCIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5KYXZhIEVFIGFwcGxpY2F0aW9uczwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGVzZSB0b3BpY3MgZGVhbCB3aXRoIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFbnRlcnByaXNlDQotRWRpdGlvbiAoSmF2YSBFRSkuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Ym9keSBvdXRwdXRjbGFzcz0iaWRfYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2JvZHk+DQotPC90b3BpYz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1qMmVlYXBwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1qMmVlYXBwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhY2YzZmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtajJlZWFwcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRvcGljIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkphdmEgRUUgYXBwbGljYXRpb25zIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZXNlIHRvcGljcyBkZWFsIHdpdGggdGhlIEphdmEgRW50ZXJwcmlzZSBFZGl0aW9uIChKYXZhIEVFKS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlc2UgdG9waWNzIGRlYWwgd2l0aCB0aGUgSmF2YSBFbnRlcnByaXNlIEVkaXRpb24gKEphdmEgRUUpLiIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXZhZWU1Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamFyY2guaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqcGVycy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2p2aWV3Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZpZXdmaWx0ZXJzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9waC1wcm9qZWN0cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGp2YWwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3BoLXJlZi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InBoLWoyZWVhcHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5KYXZhIEVFIGFwcGxpY2F0aW9uczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0icGgtajJlZWFwcCI+PGEgbmFtZT0icGgtajJlZWFwcCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+SmF2YSBFRSBhcHBsaWNhdGlvbnM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhlc2UgdG9waWNzIGRlYWwgd2l0aCB0aGUgSmF2YeKEoiBFbnRlcnByaXNlCi1FZGl0aW9uIChKYXZhIEVFKS48L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXZhZWU1Lmh0bWwiPkRldmVsb3BpbmcgSmF2YSBFRSA1IEFwcGxpY2F0aW9uczwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBKYXZhIEVFIDUgcHJvZ3JhbW1pbmcgbW9kZWwgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBKYXZhIGFwcGxpY2F0aW9ucy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvY2phcmNoLmh0bWwiPkoyRUUgYXJjaGl0ZWN0dXJlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIEphdmEgMiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSBwcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL2NqcGVycy5odG1sIj5KYXZhIEVFIHBlcnNwZWN0aXZlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIEphdmEgRUUgcGVyc3BlY3RpdmUgaW5jbHVkZXMgd29ya2JlbmNoIHZpZXdzIHRoYXQgeW91IGNhbiB1c2Ugd2hlbiBkZXZlbG9waW5nIHJlc291cmNlcyBmb3IgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMsIEVKQiBtb2R1bGVzLCBXZWIgbW9kdWxlcywgYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZXMsIGFuZCBjb25uZWN0b3IgcHJvamVjdHMgb3IgbW9kdWxlcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvY2p2aWV3Lmh0bWwiPlByb2plY3QgRXhwbG9yZXIgdmlldyBpbiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZTwvYT48L3N0cm9uZz48YnIgLz4KLVdoaWxlIGRldmVsb3BpbmcgSjJFRSBhcHBsaWNhdGlvbnMgaW4gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUsIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgaXMgeW91ciBtYWluIHZpZXcgb2YgeW91ciBKMkVFIHByb2plY3RzIGFuZCByZXNvdXJjZXMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3Rqdmlld2ZpbHRlcnMuaHRtbCI+RmlsdGVyaW5nIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXc8L2E+PC9zdHJvbmc+PGJyIC8+Ci1Zb3UgY2FuIGZpbHRlciB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IHRvIGhpZGUgcHJvamVjdHMsIGZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIHNlZS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvcGgtcHJvamVjdHMuaHRtbCI+V29ya2luZyB3aXRoIHByb2plY3RzPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIHdvcmtiZW5jaCBjYW4gd29yayB3aXRoIG1hbnkgZGlmZmVyZW50IHR5cGVzIG9mIHByb2plY3RzLiBUaGUgZm9sbG93aW5nIHRvcGljcyBjb3ZlciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgc29tZSBvZiB0aGUgdHlwZXMgb2YgcHJvamVjdHMgcmVsYXRlZCB0byBKMkVFIGRldmVsb3BtZW50LjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbC5odG1sIj5WYWxpZGF0aW5nIGNvZGUgaW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgd29ya2JlbmNoIGluY2x1ZGVzIHZhbGlkYXRvcnMgdGhhdCBjaGVjayBjZXJ0YWluIGZpbGVzIGluIHlvdXIgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb2R1bGUgcHJvamVjdHMgZm9yIGVycm9ycy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvcGgtcmVmLmh0bWwiPlJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIG1hdGVyaWFsIG9uIEoyRUUgaXMgYXZhaWxhYmxlOjwvbGk+Ci08L3VsPgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1wcm9qZWN0cy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtcHJvamVjdHMuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1NzJmYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1wcm9qZWN0cy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IURPQ1RZUEUgdG9waWMgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVG9waWMvL0VOIg0KLSAidG9waWMuZHRkIj4NCi08dG9waWMgaWQ9InBocHJvamVjdHMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+V29ya2luZyB3aXRoIHByb2plY3RzPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoZSB3b3JrYmVuY2ggY2FuIHdvcmsgd2l0aCBtYW55IGRpZmZlcmVudA0KLXR5cGVzIG9mIHByb2plY3RzLiBUaGUgZm9sbG93aW5nIHRvcGljcyBjb3ZlciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgc29tZSBvZg0KLXRoZSB0eXBlcyBvZiBwcm9qZWN0cyByZWxhdGVkIHRvIEoyRUUgZGV2ZWxvcG1lbnQuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Ym9keSBvdXRwdXRjbGFzcz0iaWRfYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2JvZHk+DQotPC90b3BpYz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1wcm9qZWN0cy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtcHJvamVjdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjODYxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1wcm9qZWN0cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRvcGljIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9Ildvcmtpbmcgd2l0aCBwcm9qZWN0cyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgd29ya2JlbmNoIGNhbiB3b3JrIHdpdGggbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgcHJvamVjdHMuIFRoZSBmb2xsb3dpbmcgdG9waWNzIGNvdmVyIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBzb21lIG9mIHRoZSB0eXBlcyBvZiBwcm9qZWN0cyByZWxhdGVkIHRvIEoyRUUgZGV2ZWxvcG1lbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSB3b3JrYmVuY2ggY2FuIHdvcmsgd2l0aCBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBwcm9qZWN0cy4gVGhlIGZvbGxvd2luZyB0b3BpY3MgY292ZXIgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHNvbWUgb2YgdGhlIHR5cGVzIG9mIHByb2plY3RzIHJlbGF0ZWQgdG8gSjJFRSBkZXZlbG9wbWVudC4iIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9waC1qMmVlYXBwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXBwY2xpcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGplYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGpyYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdGFyZ2V0c2VydmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jZmFjZXRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9waC1pbXBvcnRleHBvcnQuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJwaHByb2plY3RzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V29ya2luZyB3aXRoIHByb2plY3RzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJwaHByb2plY3RzIj48YSBuYW1lPSJwaHByb2plY3RzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5Xb3JraW5nIHdpdGggcHJvamVjdHM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhlIHdvcmtiZW5jaCBjYW4gd29yayB3aXRoIG1hbnkgZGlmZmVyZW50Ci10eXBlcyBvZiBwcm9qZWN0cy4gVGhlIGZvbGxvd2luZyB0b3BpY3MgY292ZXIgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHNvbWUgb2YKLXRoZSB0eXBlcyBvZiBwcm9qZWN0cyByZWxhdGVkIHRvIEoyRUUgZGV2ZWxvcG1lbnQuPC9wPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotCi08cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0czwvYT48L3N0cm9uZz48YnIgLz4KLUFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCB0aWVzIHRvZ2V0aGVyIHRoZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gZGVwbG95IGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy9jamFwcGNsaXByb2ouaHRtbCI+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPC9hPjwvc3Ryb25nPjxiciAvPgotQXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zIHNvIHRoZSBwcm9qZWN0IGNhbiBiZW5lZml0IGZyb20gYSBzZXJ2ZXIncyB0b29scy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGplYXIuaHRtbCI+Q3JlYXRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0PC9hPjwvc3Ryb25nPjxiciAvPgotVXNpbmcgdGhlIHdpemFyZCB0byBjcmVhdGUgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGFsbG93cyB5b3UgdG8gcGFja2FnZSBtYW55IHdlYiBhcHBsaWNhdGlvbnMgYW5kIG1vZHVsZXMgaW4gYSBwcm9qZWN0IGFuZCBkZXBsb3kgdGhlc2UgbW9kdWxlcyBhcyBhIEoyRUUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbi48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGphcHBwcm9qLmh0bWwiPkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvc3Ryb25nPjxiciAvPgotWW91IGNhbiB1c2UgYSB3aXphcmQgdG8gY3JlYXRlIGEgbmV3IGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGFuZCBhZGQgaXQgdG8gYSBuZXcgb3IgZXhpc3RpbmcgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90anJhci5odG1sIj5DcmVhdGluZyBhIGNvbm5lY3RvciBwcm9qZWN0PC9hPjwvc3Ryb25nPjxiciAvPgotQSBjb25uZWN0b3IgaXMgYSBKMkVFIHN0YW5kYXJkIGV4dGVuc2lvbiBtZWNoYW5pc20gZm9yIGNvbnRhaW5lcnMgdG8gcHJvdmlkZSBjb25uZWN0aXZpdHkgdG8gZW50ZXJwcmlzZSBpbmZvcm1hdGlvbiBzeXN0ZW1zIChFSVNzKS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdGp0YXJnZXRzZXJ2ZXIuaHRtbCI+U3BlY2lmeWluZyB0YXJnZXQgc2VydmVycyBmb3IgSjJFRSBwcm9qZWN0czwvYT48L3N0cm9uZz48YnIgLz4KLVdoZW4geW91IGRldmVsb3AgSjJFRSBhcHBsaWNhdGlvbnMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgc2VydmVyIHJ1bnRpbWUgZW52aXJvbm1lbnRzIGZvciB5b3VyIEoyRUUgcHJvamVjdHMuIFRoZSB0YXJnZXQgc2VydmVyIGlzIHNwZWNpZmllZCBkdXJpbmcgcHJvamVjdCBjcmVhdGlvbiBhbmQgaW1wb3J0LCBhbmQgaXQgY2FuIGJlIGNoYW5nZWQgaW4gdGhlIHByb2plY3QgcHJvcGVydGllcy4gVGhlIHRhcmdldCBzZXJ2ZXIgc2V0dGluZyBpcyB0aGUgZGVmYXVsdCBtZWNoYW5pc20gZm9yIHNldHRpbmcgdGhlIGNsYXNzIHBhdGggZm9yIEoyRUUgcHJvamVjdHMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL2NmYWNldHMuaHRtbCI+UHJvamVjdCBmYWNldHM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1GYWNldHMgZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzIGZvciBKYXZhIEVFIHByb2plY3RzIGFuZCBhcmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb24uPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3BoLWltcG9ydGV4cG9ydC5odG1sIj5JbXBvcnRpbmcgYW5kIGV4cG9ydGluZyBwcm9qZWN0cyBhbmQgZmlsZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGVzZSB0b3BpY3MgY292ZXIgaG93IHRvIGltcG9ydCBmaWxlcyBhbmQgcHJvamVjdHMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBleHBvcnQgZmlsZXMgYW5kIHByb2plY3RzIHRvIGRpc2suPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvcGgtajJlZWFwcC5odG1sIiB0aXRsZT0iVGhlc2UgdG9waWNzIGRlYWwgd2l0aCB0aGUgSmF2YSBFbnRlcnByaXNlIEVkaXRpb24gKEphdmEgRUUpLiI+SmF2YSBFRSBhcHBsaWNhdGlvbnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcGgtcmVmLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1yZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFmOGM4Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1yZWYuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCFET0NUWVBFIHRvcGljIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRvcGljLy9FTiINCi0gInRvcGljLmR0ZCI+DQotPHRvcGljIGlkPSJwaC1yZWYiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+UmVmZXJlbmNlPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIG1hdGVyaWFsIG9uDQotSjJFRSBpcyBhdmFpbGFibGU6PC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08Ym9keSBvdXRwdXRjbGFzcz0iaWRfYm9keSI+DQotPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPg0KLTxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD4NCi08L2JvZHk+DQotPC90b3BpYz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9waC1yZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3BoLXJlZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDY5ZTk4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3BoLXJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRvcGljIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgZm9sbG93aW5nIHJlZmVyZW5jZSBtYXRlcmlhbCBvbiBKMkVFIGlzIGF2YWlsYWJsZToiIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGZvbGxvd2luZyByZWZlcmVuY2UgbWF0ZXJpYWwgb24gSjJFRSBpcyBhdmFpbGFibGU6IiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcGgtajJlZWFwcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcnZhbGlkYXRvcnMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J2YWxlcnIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3JqbGltaXRjdXJyZW50Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icGgtcmVmIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UmVmZXJlbmNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJwaC1yZWYiPjxhIG5hbWU9InBoLXJlZiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+UmVmZXJlbmNlPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX2JvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIG1hdGVyaWFsIG9uCi1KMkVFIGlzIGF2YWlsYWJsZTo8L3A+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLTxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J2YWxpZGF0b3JzLmh0bWwiPkoyRUUgVmFsaWRhdG9yczwvYT48L3N0cm9uZz48YnIgLz4KLVRoaXMgdGFibGUgbGlzdHMgdGhlIHZhbGlkYXRvcnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZGlmZmVyZW50IHByb2plY3QgdHlwZXMgYW5kIGdpdmVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB2YWxpZGF0b3IuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J2YWxlcnIuaHRtbCI+Q29tbW9uIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBzb2x1dGlvbnM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGlzIHRhYmxlIGxpc3RzIHRoZSBjb21tb24gZXJyb3IgbWVzc2FnZXMgeW91IG1heSBlbmNvdW50ZXIgd2hlbiB5b3UgdmFsaWRhdGUgeW91ciBwcm9qZWN0cy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvcmpsaW1pdGN1cnJlbnQuaHRtbCI+TGltaXRhdGlvbnMgb2YgSjJFRSBkZXZlbG9wbWVudCB0b29sczwvYT48L3N0cm9uZz48YnIgLz4KLVRoaXMgdG9waWMgb3V0bGluZXMgY3VycmVudCBrbm93biBsaW1pdGF0aW9ucyBhbmQgcmVzdHJpY3Rpb25zIGZvciBKMkVFIHRvb2xpbmcuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvcGgtajJlZWFwcC5odG1sIiB0aXRsZT0iVGhlc2UgdG9waWNzIGRlYWwgd2l0aCB0aGUgSmF2YSBFbnRlcnByaXNlIEVkaXRpb24gKEphdmEgRUUpLiI+SmF2YSBFRSBhcHBsaWNhdGlvbnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcmpsaW1pdGN1cnJlbnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3JqbGltaXRjdXJyZW50LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYmFkMDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcmpsaW1pdGN1cnJlbnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJyamxpbWl0Y3VycmVudCIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5MaW1pdGF0aW9ucyBvZiBKMkVFIGRldmVsb3BtZW50IHRvb2xzPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoaXMgdG9waWMgb3V0bGluZXMgY3VycmVudCBrbm93biBsaW1pdGF0aW9ucw0KLWFuZCByZXN0cmljdGlvbnMgZm9yIEoyRUUgdG9vbGluZy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5KMkVFPGluZGV4dGVybT50b29sIGxpbWl0YXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5IG91dHB1dGNsYXNzPSJpZF9yZWZib2R5Ij4NCi08c2VjdGlvbiBvdXRwdXRjbGFzcz0iaWRfc3BhY2VzTGltaXRhdGlvbiI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPjx0aXRsZT5TcGFjZXMNCi1ub3Qgc3VwcG9ydGVkIGluIEpBUiBVUklzIHdpdGhpbiBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uPC90aXRsZT5TcGFjZXMgYXJlDQotbm90IHN1cHBvcnRlZCBpbiB0aGUgVVJJIGZvciBtb2R1bGVzIG9yIHV0aWxpdHkgSkFSIGZpbGVzIGluIGFuIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbi4gVGhlICJDbGFzcy1QYXRoOiIgYXR0cmlidXRlIG9mIGEgTUFOSUZFU1QuTUYgZmlsZSBpbiBhIEpBUiBmaWxlDQotb3IgbW9kdWxlIGlzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgcmVsYXRpdmUgcGF0aHMgd2l0aGluIGFuIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbi4gQSBKQVIgZmlsZSB3b3VsZCBub3QgYmUgYWJsZSB0byByZWZlcmVuY2UgYW5vdGhlciBKQVIgZmlsZSBpbg0KLXRoZSBFQVIgaWYgdGhlIFVSSSBvZiB0aGUgcmVmZXJlbmNlZCBKQVIgZmlsZSBjb250YWluZWQgc3BhY2VzLjwvc2VjdGlvbj4NCi08c2VjdGlvbiBvdXRwdXRjbGFzcz0iaWRfRUFSREJDU0xpbWl0YXRpb24iPjx0aXRsZT5FbnRlcnByaXNlIGFwcGxpY2F0aW9uDQotcHJvamVjdCBuYW1lcyBzaG91bGQgbm90IGNvbnRhaW4gREJDUyBjaGFyYWN0ZXJzPC90aXRsZT48cCBpZD0ibGltaXRhdGlvbl9lYXJfZGJjcyI+V2hlbg0KLXlvdSBjcmVhdGUgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkbw0KLW5vdCBnaXZlIGl0IGEgbmFtZSB0aGF0IGNvbnRhaW5zIGRvdWJsZS1ieXRlIGNoYXJhY3RlciBzZXQgKERCQ1MpIGNoYXJhY3RlcnMuPC9wPjwvc2VjdGlvbj4NCi08c2VjdGlvbiBvdXRwdXRjbGFzcz0iaWRfdXRpbGl0eUpBUkxpbWl0YXRpb24iPjx0aXRsZT48dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBidWlsZA0KLXBhdGggdXBkYXRlcyB3aGVuIHJlbW92aW5nIHRoZSBkZXBlbmRlbmN5IG9uIGEgVXRpbGl0eSBKQVIgZmlsZTwvdGl0bGU+V2hlbg0KLXJlbW92aW5nIHRoZSBkZXBlbmRlbmN5IG9uIGEgVXRpbGl0eSBKQVIsIHRoZSBjb3JyZXNwb25kaW5nIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHByb2plY3QNCi13aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYnVpbGQgcGF0aCBvbmx5IGlmIHRoZSBkZXBlbmRlbnQgSkFSDQotaXMgc3RpbGwgcmVmZXJlbmNlZCBieSB0aGUgRUFSIHByb2plY3QuIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBjcmVhdGUgYQ0KLUoyRUUgMS4zIFdlYiBwcm9qZWN0IGFuZCBFQVIgYWxvbmcgd2l0aCB0aGUgSlVuaXQgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRXhhbXBsZSBwcm9qZWN0LiBOZXh0LCBhZGQgdGhlIEpVbml0DQotcHJvamVjdCBhcyBhIFV0aWxpdHkgSkFSIGluIHRoZSBFQVIsIHRoZW4gYWRkIEpVbml0IGFzIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiDQotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gSkFSDQotRGVwZW5kZW5jeSBvZiB0aGUgV2ViIHByb2plY3QuIElmIHlvdSB0aGVuIHdhbnRlZCB0byByZW1vdmUgdGhlIGRlcGVuZGVuY3kNCi1iZXR3ZWVuIEpVbml0IGFuZCB0aGUgV2ViIHByb2plY3QsIHJlbW92ZSB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gSkFSIERlcGVuZGVuY3kgZnJvbSB0aGUgV2ViIHByb2plY3QNCi1maXJzdCwgdGhlbiByZW1vdmUgdGhlIFV0aWxpdHkgSkFSIGZyb20gdGhlIEVBUi4gRm9sbG93IHRoaXMgb3JkZXIgdG8gZW5zdXJlDQotdGhhdCB0aGlzIHdvcmtzIGNvcnJlY3RseS48L3NlY3Rpb24+DQotPHNlY3Rpb24gb3V0cHV0Y2xhc3M9ImlkX0pBUmRlcExpbWl0YXRpb24iPjx0aXRsZT48dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBKQVIgRGVwZW5kZW5jaWVzIHBhZ2UgZmFpbHMgdG8gdXBkYXRlIDx0bQ0KLXRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJ1aWxkDQotcGF0aDwvdGl0bGU+VGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEpBUiBEZXBlbmRlbmNpZXMgcGFnZSBpcyBub3Qgc3luY2hyb25pemVkIHdpdGgNCi10aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJ1aWxkDQotcGF0aCBwYWdlIGluIHRoZSBwcm9qZWN0IHByb3BlcnRpZXMgZGlhbG9nLiBUaGVyZWZvcmUsIGEgY2hhbmdlIGFwcGxpZWQgaW4NCi1vbmUgbWF5IG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhlIG90aGVyIHdpdGhpbiB0aGUgc2FtZSBkaWFsb2cgc2Vzc2lvbi4gVGhlcmUNCi1hcmUgYWxzbyBzb21lIGluc3RhbmNlcyB3aGVyZSBmbGlwcGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBwYWdlcyB3aWxsDQotY2F1c2UgdGhlIHVwZGF0ZSBmcm9tIG9uZSB0byBjYW5jZWwgb3V0IHRoZSB1cGRhdGUgZnJvbSBhbm90aGVyIHdoZW4gdGhlIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4gYnV0dG9uDQotaXMgY2xpY2tlZCBvciBpZiB0aGUgPHVpY29udHJvbD5BcHBseTwvdWljb250cm9sPiBidXR0b24gaXMgY2xpY2tlZCBwcmlvcg0KLXRvIHRoZSA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+IGJ1dHRvbi4gVHlwaWNhbGx5IHRoaXMgd2lsbCBhcHBlYXIgYXMgaWYNCi1hIEpBUiBkZXBlbmRlbmN5IHdhcyBhZGRlZCwgYnV0IHRoZSBwcm9qZWN0IGRpZCBub3QgZ2V0IGFkZGVkIHRvIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBidWlsZA0KLXBhdGguIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHJlb3BlbiB0aGUgcHJvcGVydGllcyBkaWFsb2dzLCBzd2l0Y2ggdG8gdGhlIEpBUg0KLWRlcGVuZGVuY3kgcGFnZSwgY2xlYXIgYW5kIHJlLXNlbGVjdCB0aGUgZGVwZW5kZW50IEpBUiBmaWxlcywgdGhlbiBjbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+Ljwvc2VjdGlvbj4NCi08c2VjdGlvbiBvdXRwdXRjbGFzcz0iaWRfbG9jYXRpb25MaW1pdGF0aW9uIj48dGl0bGU+J0ludmFsaWQgcHJvamVjdCBkZXNjcmlwdGlvbicNCi1lcnJvciB3aGVuIHVzaW5nIGEgbm9uLWRlZmF1bHQgcHJvamVjdCBsb2NhdGlvbiBmb3IgYSBuZXcgSjJFRSBwcm9qZWN0PC90aXRsZT5XaGVuDQoteW91IGNyZWF0ZSBhIG5ldyBKMkVFIHByb2plY3QgKGluY2x1ZGluZyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiwgRHluYW1pYyBXZWIsDQotRUpCLCBhcHBsaWNhdGlvbiBjbGllbnQsIGFuZCBjb25uZWN0b3IgcHJvamVjdHMpLCB5b3UgY2Fubm90IHVzZSBhIHByb2plY3QNCi1sb2NhdGlvbiB0aGF0IGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIHByb2plY3QgaW4gdGhlIHdvcmtiZW5jaC4gSWYgeW91DQotY2hvb3NlIGEgcHJvamVjdCBsb2NhdGlvbiB0aGF0IGlzIHVzZWQgYnkgYW5vdGhlciBwcm9qZWN0LCB0aGUgd2l6YXJkIGRpc3BsYXlzDQotYW4gIkludmFsaWQgcHJvamVjdCBkZXNjcmlwdGlvbiIgZXJyb3IgZGlhbG9nIG9yIG1lc3NhZ2UuIElmIGFmdGVyIHlvdSByZWNlaXZlDQotdGhpcyBtZXNzYWdlIHlvdSB0aGVuIHNlbGVjdCBhIHZhbGlkIHByb2plY3QgbG9jYXRpb24gYnkgY2xpY2tpbmcgdGhlIEJyb3dzZQ0KLWJ1dHRvbiwgdGhlIHByb2plY3QgY3JlYXRpb24gd2lsbCBzdGlsbCBub3QgZmluaXNoLiBUaGUgd29ya2Fyb3VuZCBpcyB0byBjbGljaw0KLUNhbmNlbCBhbmQgcmVvcGVuIHRoZSBwcm9qZWN0IGNyZWF0aW9uIHdpemFyZC48L3NlY3Rpb24+DQotPGV4YW1wbGUgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9leGFtcGxlPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9yamxpbWl0Y3VycmVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcmpsaW1pdGN1cnJlbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ0NmJhYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9yamxpbWl0Y3VycmVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJMaW1pdGF0aW9ucyBvZiBKMkVFIGRldmVsb3BtZW50IHRvb2xzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoaXMgdG9waWMgb3V0bGluZXMgY3VycmVudCBrbm93biBsaW1pdGF0aW9ucyBhbmQgcmVzdHJpY3Rpb25zIGZvciBKMkVFIHRvb2xpbmcuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgdG9waWMgb3V0bGluZXMgY3VycmVudCBrbm93biBsaW1pdGF0aW9ucyBhbmQgcmVzdHJpY3Rpb25zIGZvciBKMkVFIHRvb2xpbmcuIiAvPgotPG1ldGEgY29udGVudD0iSjJFRSwgdG9vbCBsaW1pdGF0aW9ucyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkoyRUUsIHRvb2wgbGltaXRhdGlvbnMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InJqbGltaXRjdXJyZW50IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+TGltaXRhdGlvbnMgb2YgSjJFRSBkZXZlbG9wbWVudCB0b29sczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0icmpsaW1pdGN1cnJlbnQiPjxhIG5hbWU9InJqbGltaXRjdXJyZW50Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5MaW1pdGF0aW9ucyBvZiBKMkVFIGRldmVsb3BtZW50IHRvb2xzPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3JlZmJvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoaXMgdG9waWMgb3V0bGluZXMgY3VycmVudCBrbm93biBsaW1pdGF0aW9ucwotYW5kIHJlc3RyaWN0aW9ucyBmb3IgSjJFRSB0b29saW5nLjwvcD4KLQotPGRpdiBjbGFzcz0iaWRfc3BhY2VzTGltaXRhdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlNwYWNlcwotbm90IHN1cHBvcnRlZCBpbiBKQVIgVVJJcyB3aXRoaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbjwvaDQ+PHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLVNwYWNlcyBhcmUKLW5vdCBzdXBwb3J0ZWQgaW4gdGhlIFVSSSBmb3IgbW9kdWxlcyBvciB1dGlsaXR5IEpBUiBmaWxlcyBpbiBhbiBlbnRlcnByaXNlCi1hcHBsaWNhdGlvbi4gVGhlICJDbGFzcy1QYXRoOiIgYXR0cmlidXRlIG9mIGEgTUFOSUZFU1QuTUYgZmlsZSBpbiBhIEpBUiBmaWxlCi1vciBtb2R1bGUgaXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiByZWxhdGl2ZSBwYXRocyB3aXRoaW4gYW4gZW50ZXJwcmlzZQotYXBwbGljYXRpb24uIEEgSkFSIGZpbGUgd291bGQgbm90IGJlIGFibGUgdG8gcmVmZXJlbmNlIGFub3RoZXIgSkFSIGZpbGUgaW4KLXRoZSBFQVIgaWYgdGhlIFVSSSBvZiB0aGUgcmVmZXJlbmNlZCBKQVIgZmlsZSBjb250YWluZWQgc3BhY2VzLjwvZGl2PgotCi08ZGl2IGNsYXNzPSJpZF9FQVJEQkNTTGltaXRhdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkVudGVycHJpc2UgYXBwbGljYXRpb24KLXByb2plY3QgbmFtZXMgc2hvdWxkIG5vdCBjb250YWluIERCQ1MgY2hhcmFjdGVyczwvaDQ+PHAgaWQ9InJqbGltaXRjdXJyZW50X19saW1pdGF0aW9uX2Vhcl9kYmNzIj48YSBuYW1lPSJyamxpbWl0Y3VycmVudF9fbGltaXRhdGlvbl9lYXJfZGJjcyI+PCEtLSAtLT48L2E+V2hlbgoteW91IGNyZWF0ZSBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvCi1ub3QgZ2l2ZSBpdCBhIG5hbWUgdGhhdCBjb250YWlucyBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgc2V0IChEQkNTKSBjaGFyYWN0ZXJzLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJpZF91dGlsaXR5SkFSTGltaXRhdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkphdmHihKIgYnVpbGQKLXBhdGggdXBkYXRlcyB3aGVuIHJlbW92aW5nIHRoZSBkZXBlbmRlbmN5IG9uIGEgVXRpbGl0eSBKQVIgZmlsZTwvaDQ+V2hlbgotcmVtb3ZpbmcgdGhlIGRlcGVuZGVuY3kgb24gYSBVdGlsaXR5IEpBUiwgdGhlIGNvcnJlc3BvbmRpbmcgSmF2YSBwcm9qZWN0Ci13aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgSmF2YSBidWlsZCBwYXRoIG9ubHkgaWYgdGhlIGRlcGVuZGVudCBKQVIKLWlzIHN0aWxsIHJlZmVyZW5jZWQgYnkgdGhlIEVBUiBwcm9qZWN0LiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgY3JlYXRlIGEKLUoyRUUgMS4zIFdlYiBwcm9qZWN0IGFuZCBFQVIgYWxvbmcgd2l0aCB0aGUgSlVuaXQgSmF2YSBFeGFtcGxlIHByb2plY3QuIE5leHQsIGFkZCB0aGUgSlVuaXQKLXByb2plY3QgYXMgYSBVdGlsaXR5IEpBUiBpbiB0aGUgRUFSLCB0aGVuIGFkZCBKVW5pdCBhcyBhIEphdmEgSkFSCi1EZXBlbmRlbmN5IG9mIHRoZSBXZWIgcHJvamVjdC4gSWYgeW91IHRoZW4gd2FudGVkIHRvIHJlbW92ZSB0aGUgZGVwZW5kZW5jeQotYmV0d2VlbiBKVW5pdCBhbmQgdGhlIFdlYiBwcm9qZWN0LCByZW1vdmUgdGhlIEphdmEgSkFSIERlcGVuZGVuY3kgZnJvbSB0aGUgV2ViIHByb2plY3QKLWZpcnN0LCB0aGVuIHJlbW92ZSB0aGUgVXRpbGl0eSBKQVIgZnJvbSB0aGUgRUFSLiBGb2xsb3cgdGhpcyBvcmRlciB0byBlbnN1cmUKLXRoYXQgdGhpcyB3b3JrcyBjb3JyZWN0bHkuPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImlkX0pBUmRlcExpbWl0YXRpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5KYXZhIEpBUiBEZXBlbmRlbmNpZXMgcGFnZSBmYWlscyB0byB1cGRhdGUgSmF2YSBidWlsZAotcGF0aDwvaDQ+VGhlIEphdmEgSkFSIERlcGVuZGVuY2llcyBwYWdlIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAotdGhlIEphdmEgYnVpbGQKLXBhdGggcGFnZSBpbiB0aGUgcHJvamVjdCBwcm9wZXJ0aWVzIGRpYWxvZy4gVGhlcmVmb3JlLCBhIGNoYW5nZSBhcHBsaWVkIGluCi1vbmUgbWF5IG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhlIG90aGVyIHdpdGhpbiB0aGUgc2FtZSBkaWFsb2cgc2Vzc2lvbi4gVGhlcmUKLWFyZSBhbHNvIHNvbWUgaW5zdGFuY2VzIHdoZXJlIGZsaXBwaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIHBhZ2VzIHdpbGwKLWNhdXNlIHRoZSB1cGRhdGUgZnJvbSBvbmUgdG8gY2FuY2VsIG91dCB0aGUgdXBkYXRlIGZyb20gYW5vdGhlciB3aGVuIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4gYnV0dG9uCi1pcyBjbGlja2VkIG9yIGlmIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYnV0dG9uIGlzIGNsaWNrZWQgcHJpb3IKLXRvIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4gYnV0dG9uLiBUeXBpY2FsbHkgdGhpcyB3aWxsIGFwcGVhciBhcyBpZgotYSBKQVIgZGVwZW5kZW5jeSB3YXMgYWRkZWQsIGJ1dCB0aGUgcHJvamVjdCBkaWQgbm90IGdldCBhZGRlZCB0byB0aGUgSmF2YSBidWlsZAotcGF0aC4gVGhlIHdvcmthcm91bmQgaXMgdG8gcmVvcGVuIHRoZSBwcm9wZXJ0aWVzIGRpYWxvZ3MsIHN3aXRjaCB0byB0aGUgSkFSCi1kZXBlbmRlbmN5IHBhZ2UsIGNsZWFyIGFuZCByZS1zZWxlY3QgdGhlIGRlcGVuZGVudCBKQVIgZmlsZXMsIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T0s8L3NwYW4+LjwvZGl2PgotCi08ZGl2IGNsYXNzPSJpZF9sb2NhdGlvbkxpbWl0YXRpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj4nSW52YWxpZCBwcm9qZWN0IGRlc2NyaXB0aW9uJwotZXJyb3Igd2hlbiB1c2luZyBhIG5vbi1kZWZhdWx0IHByb2plY3QgbG9jYXRpb24gZm9yIGEgbmV3IEoyRUUgcHJvamVjdDwvaDQ+V2hlbgoteW91IGNyZWF0ZSBhIG5ldyBKMkVFIHByb2plY3QgKGluY2x1ZGluZyBKYXZhLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLCBEeW5hbWljIFdlYiwKLUVKQiwgYXBwbGljYXRpb24gY2xpZW50LCBhbmQgY29ubmVjdG9yIHByb2plY3RzKSwgeW91IGNhbm5vdCB1c2UgYSBwcm9qZWN0Ci1sb2NhdGlvbiB0aGF0IGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIHByb2plY3QgaW4gdGhlIHdvcmtiZW5jaC4gSWYgeW91Ci1jaG9vc2UgYSBwcm9qZWN0IGxvY2F0aW9uIHRoYXQgaXMgdXNlZCBieSBhbm90aGVyIHByb2plY3QsIHRoZSB3aXphcmQgZGlzcGxheXMKLWFuICJJbnZhbGlkIHByb2plY3QgZGVzY3JpcHRpb24iIGVycm9yIGRpYWxvZyBvciBtZXNzYWdlLiBJZiBhZnRlciB5b3UgcmVjZWl2ZQotdGhpcyBtZXNzYWdlIHlvdSB0aGVuIHNlbGVjdCBhIHZhbGlkIHByb2plY3QgbG9jYXRpb24gYnkgY2xpY2tpbmcgdGhlIEJyb3dzZQotYnV0dG9uLCB0aGUgcHJvamVjdCBjcmVhdGlvbiB3aWxsIHN0aWxsIG5vdCBmaW5pc2guIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGNsaWNrCi1DYW5jZWwgYW5kIHJlb3BlbiB0aGUgcHJvamVjdCBjcmVhdGlvbiB3aXphcmQuPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLQotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3J0dW5ldmFsaWRhdC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcnR1bmV2YWxpZGF0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNGYyZGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcnR1bmV2YWxpZGF0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0icnR1bmV2YWxpZGF0IiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5UdW5pbmcgdmFsaWRhdG9yczwvdGl0bGU+DQotPHNob3J0ZGVzYz5XaGV0aGVyIG9yIG5vdCBhIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRlcGVuZHMNCi1vbiB0aGUgZmlsdGVycyB0aGF0IGFyZSBpbiBwbGFjZSBmb3IgdGhhdCB2YWxpZGF0b3IuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+Y29kZSB2YWxpZGF0aW9uPGluZGV4dGVybT50dW5pbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPnZhbGlkYXRpb248aW5kZXh0ZXJtPnR1bmluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48cD5XaGVuIGEgdmFsaWRhdG9yIGlzIGZpcnN0IGRldmVsb3BlZCwgdGhlIGltcGxlbWVudGVyIG9mIHRoZSB2YWxpZGF0b3INCi1kZWZpbmVzIGEgZGVmYXVsdCBzZXQgb2YgZmlsdGVycy4gVGhlc2UgZmlsdGVycyBtYXkgYmUgYmFzZWQgb246PHVsPg0KLTxsaT5maWxlIGV4dGVuc2lvbnM8L2xpPg0KLTxsaT5mb2xkZXIgb2YgZmlsZSBuYW1lczwvbGk+DQotPGxpPnByb2plY3QgbmF0dXJlczwvbGk+DQotPGxpPnByb2plY3QgZmFjZXRzPC9saT4NCi08bGk+Y29udGVudCB0eXBlczwvbGk+DQotPC91bD5UaHJvdWdoIHRoZSBWYWxpZGF0aW9uIEZpbHRlcnMgZGlhbG9nLCB5b3UgYXJlIGFibGUgdG8gZnVydGhlciB0dW5lIHRoZXNlDQotc2V0dGluZ3MuTm9ybWFsbHkgeW91IHdvdWxkIHNpbXBseSBrZWVwIHRoZSBkZWZhdWx0cywgaG93ZXZlciB0d28gcmVhc29ucw0KLXdoeSB5b3UgbWF5IHdhbnQgdG8gdHVuZSB2YWxpZGF0aW9uIGFyZTo8dWw+DQotPGxpPlBlcmZvcm1hbmNlOiBpZiB5b3UgaGF2ZSBhIHZlcnkgbGFyZ2Ugd29ya3NwYWNlLCB5b3UgY291bGQgcmVkdWNlIHRoZQ0KLWFtb3VudCBvZiB2YWxpZGF0aW9uLjwvbGk+DQotPGxpPk5vbiBzdGFuZGFyZCBjb252ZW50aW9uczogaWYgeW91IHVzZSBhICBub24gc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb24NCi0oZm9yIGV4YW1wbGUgc3RvcmVzIFhNTCBpbiBmaWxlcyB3aXRoIGFuIC5hY21lLXhtbCBleHRlbnNpb24pLCB5b3UgY291bGQgc3RpbGwNCi1lbmFibGUgdGhlIGFwcHJvcHJpYXRlIHZhbGlkYXRvcnMgdG8gcnVuIGFnYWluc3QgdGhvc2UgZmlsZXMuPC9saT4NCi08L3VsPllvdSBjYW4gYWNjZXNzIHRoaXMgZGlhbG9nIGJ5IGNsaWNraW5nIDxtZW51Y2FzY2FkZT48dWljb250cm9sPldpbmRvdzwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+UHJlZmVyZW5jZXM8L3VpY29udHJvbD48dWljb250cm9sPlZhbGlkYXRpb248L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQNCi10aGVuIGNsaWNraW5nIDx1aWNvbnRyb2w+U2V0dGluZ3M8L3VpY29udHJvbD4gYmVzaWRlIGVhY2ggdmFsaWRhdG9yLjwvcD48cD5GaWx0ZXJzDQotYXJlIHN0b3JlZCBpbiBncm91cHMuIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgZ3JvdXBzOiBJbmNsdWRlIGdyb3VwcyBhbmQgRXhjbHVkZQ0KLWdyb3Vwcy4gWW91IGNhbiBoYXZlIGFzIG1hbnkgSW5jbHVkZSBncm91cHMgYXMgeW91IGxpa2UuIEZpbHRlcnMgaW5zaWRlIG9mDQotYW4gSW5jbHVkZSBncm91cCBjYXVzZSByZXNvdXJjZXMgdG8gYmUgdmFsaWRhdGVkLiBJZiBhbnkgcnVsZSBtYXRjaGVzIHRoZW4NCi10aGUgZW50aXJlIGdyb3VwIG1hdGNoZXMuIEluc2lkZSBvZiBhIGdyb3VwIHRoZSBmaWx0ZXIgcnVsZXMgYXJlIE9S4oCZZCB0b2dldGhlci4NCi1Ib3dldmVyIGluZGl2aWR1YWwgSW5jbHVkZSBncm91cHMgYXJlIEFOROKAmWVkIHRvZ2V0aGVyLiBZb3UgY2FuIGhhdmUgb25lIEV4Y2x1ZGUNCi1ncm91cC4gSWYgYW55IG9mIGl0cyBmaWx0ZXIgcnVsZXMgbWF0Y2gsIHRoZW4gdGhlIHJlc291cmNlIGlzIGV4Y2x1ZGVkLiBFeGNsdXNpb24NCi10YWtlcyBwcmVjZWRlbmNlIG92ZXIgaW5jbHVzaW9uLjwvcD48L3NlY3Rpb24+DQotPGV4YW1wbGU+PHA+VGhlc2UgcnVsZXMgYXJlIGlsbHVzdHJhdGVkIHdpdGggdGhpcyBoeXBvdGhldGljYWwgZXhhbXBsZTo8aW1hZ2UNCi1ocmVmPSIuLi9pbWFnZXMvdmFsaWRhdGVmaWx0ZXJzLmpwZyIgcGxhY2VtZW50PSJicmVhayI+PGFsdD5zY3JlZW4gY2FwdHVyZQ0KLW9mIHRoZSB2YWxpZGF0aW9uIGZpbHRlcnMgcGFuZWwgc2hvd2luZyBpbmNsdWRlIGFuZCBleGNsdWRlIGdyb3VwczwvYWx0PjwvaW1hZ2U+PHVsPg0KLTxsaT5JZiB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIGRpc2FibGVkIGZvbGRlciwgaXQgd2lsbCBiZSBleGNsdWRlZCBiZWNhdXNlDQotZXhjbHVzaW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBldmVyeXRoaW5nIGVsc2UuPC9saT4NCi08bGk+SWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGhhdmUgdGhlIEpTUCBzb3VyY2UgY29udGVudCB0eXBlLCBhbmQgaXQgZG9lcw0KLW5vdCBoYXZlIHRoZSBKU1AgZnJhZ21lbnQgc291cmNlIGNvbnRlbnQgdHlwZSwgYW5kIGl0IGRvZXMgbm90IGhhdmUgYSBmaWxlDQotZXh0ZW5zaW9uIG9mIC5qc3Agb3IgLmpzcGYgdGhlbiBpdCB3aWxsIGJlIGV4Y2x1ZGVkIGJlY2F1c2Ugbm9uZSBvZiB0aGUgcnVsZXMNCi1pbiB0aGUgZmlyc3QgZ3JvdXAgbWF0Y2hlZC48L2xpPg0KLTxsaT5JZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBtb2R1bGUgY29yZSBuYXR1cmUgdGhlbiBpdCB3aWxsIGJlIGV4Y2x1ZGVkDQotYmVjYXVzZSB0aGUgc2luZ2xlIHJ1bGUgaW4gdGhlIHNlY29uZCBncm91cCBkaWQgbm90IG1hdGNoLjwvbGk+DQotPGxpPk90aGVyd2lzZSB0aGUgcmVzb3VyY2Ugd2lsbCBiZSB2YWxpZGF0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIHZhbGlkYXRvci48L2xpPg0KLTwvdWw+VG8gYWRkIGEgcnVsZSB0byBhIGdyb3VwLCBzZWxlY3QgdGhlIGdyb3VwIG9uIHRoZSBsZWZ0LCBhbmQgY2xpY2sgPHVpY29udHJvbD5BZGQNCi1SdWxlPC91aWNvbnRyb2w+LjwvcD48L2V4YW1wbGU+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3J0dW5ldmFsaWRhdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MzMxNTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJUdW5pbmcgdmFsaWRhdG9ycyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXaGV0aGVyIG9yIG5vdCBhIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRlcGVuZHMgb24gdGhlIGZpbHRlcnMgdGhhdCBhcmUgaW4gcGxhY2UgZm9yIHRoYXQgdmFsaWRhdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXaGV0aGVyIG9yIG5vdCBhIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRlcGVuZHMgb24gdGhlIGZpbHRlcnMgdGhhdCBhcmUgaW4gcGxhY2UgZm9yIHRoYXQgdmFsaWRhdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvZGUgdmFsaWRhdGlvbiwgdHVuaW5nLCB2YWxpZGF0aW9uIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iY29kZSB2YWxpZGF0aW9uLCB0dW5pbmcsIHZhbGlkYXRpb24iIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGp2YWxkaXNhYmxlLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZhbGdsb2JhbHByZWYuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsbWFudWFsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZhbHNlbGVjdC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InJ0dW5ldmFsaWRhdCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlR1bmluZyB2YWxpZGF0b3JzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJydHVuZXZhbGlkYXQiPjxhIG5hbWU9InJ0dW5ldmFsaWRhdCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VHVuaW5nIHZhbGlkYXRvcnM8L2gxPgotCi0KLQotPGRpdj48cD5XaGV0aGVyIG9yIG5vdCBhIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRlcGVuZHMKLW9uIHRoZSBmaWx0ZXJzIHRoYXQgYXJlIGluIHBsYWNlIGZvciB0aGF0IHZhbGlkYXRvci48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InAiPldoZW4gYSB2YWxpZGF0b3IgaXMgZmlyc3QgZGV2ZWxvcGVkLCB0aGUgaW1wbGVtZW50ZXIgb2YgdGhlIHZhbGlkYXRvcgotZGVmaW5lcyBhIGRlZmF1bHQgc2V0IG9mIGZpbHRlcnMuIFRoZXNlIGZpbHRlcnMgbWF5IGJlIGJhc2VkIG9uOjx1bD4KLTxsaT5maWxlIGV4dGVuc2lvbnM8L2xpPgotCi08bGk+Zm9sZGVyIG9mIGZpbGUgbmFtZXM8L2xpPgotCi08bGk+cHJvamVjdCBuYXR1cmVzPC9saT4KLQotPGxpPnByb2plY3QgZmFjZXRzPC9saT4KLQotPGxpPmNvbnRlbnQgdHlwZXM8L2xpPgotCi08L3VsPgotVGhyb3VnaCB0aGUgVmFsaWRhdGlvbiBGaWx0ZXJzIGRpYWxvZywgeW91IGFyZSBhYmxlIHRvIGZ1cnRoZXIgdHVuZSB0aGVzZQotc2V0dGluZ3MuTm9ybWFsbHkgeW91IHdvdWxkIHNpbXBseSBrZWVwIHRoZSBkZWZhdWx0cywgaG93ZXZlciB0d28gcmVhc29ucwotd2h5IHlvdSBtYXkgd2FudCB0byB0dW5lIHZhbGlkYXRpb24gYXJlOjx1bD4KLTxsaT5QZXJmb3JtYW5jZTogaWYgeW91IGhhdmUgYSB2ZXJ5IGxhcmdlIHdvcmtzcGFjZSwgeW91IGNvdWxkIHJlZHVjZSB0aGUKLWFtb3VudCBvZiB2YWxpZGF0aW9uLjwvbGk+Ci0KLTxsaT5Ob24gc3RhbmRhcmQgY29udmVudGlvbnM6IGlmIHlvdSB1c2UgYSAgbm9uIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uCi0oZm9yIGV4YW1wbGUgc3RvcmVzIFhNTCBpbiBmaWxlcyB3aXRoIGFuIC5hY21lLXhtbCBleHRlbnNpb24pLCB5b3UgY291bGQgc3RpbGwKLWVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgdmFsaWRhdG9ycyB0byBydW4gYWdhaW5zdCB0aG9zZSBmaWxlcy48L2xpPgotCi08L3VsPgotWW91IGNhbiBhY2Nlc3MgdGhpcyBkaWFsb2cgYnkgY2xpY2tpbmcgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3c8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVmZXJlbmNlczwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5WYWxpZGF0aW9uPC9zcGFuPjwvc3Bhbj4gYW5kCi10aGVuIGNsaWNraW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNldHRpbmdzPC9zcGFuPiBiZXNpZGUgZWFjaCB2YWxpZGF0b3IuPC9kaXY+Ci08cD5GaWx0ZXJzCi1hcmUgc3RvcmVkIGluIGdyb3Vwcy4gVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBncm91cHM6IEluY2x1ZGUgZ3JvdXBzIGFuZCBFeGNsdWRlCi1ncm91cHMuIFlvdSBjYW4gaGF2ZSBhcyBtYW55IEluY2x1ZGUgZ3JvdXBzIGFzIHlvdSBsaWtlLiBGaWx0ZXJzIGluc2lkZSBvZgotYW4gSW5jbHVkZSBncm91cCBjYXVzZSByZXNvdXJjZXMgdG8gYmUgdmFsaWRhdGVkLiBJZiBhbnkgcnVsZSBtYXRjaGVzIHRoZW4KLXRoZSBlbnRpcmUgZ3JvdXAgbWF0Y2hlcy4gSW5zaWRlIG9mIGEgZ3JvdXAgdGhlIGZpbHRlciBydWxlcyBhcmUgT1LigJlkIHRvZ2V0aGVyLgotSG93ZXZlciBpbmRpdmlkdWFsIEluY2x1ZGUgZ3JvdXBzIGFyZSBBTkTigJllZCB0b2dldGhlci4gWW91IGNhbiBoYXZlIG9uZSBFeGNsdWRlCi1ncm91cC4gSWYgYW55IG9mIGl0cyBmaWx0ZXIgcnVsZXMgbWF0Y2gsIHRoZW4gdGhlIHJlc291cmNlIGlzIGV4Y2x1ZGVkLiBFeGNsdXNpb24KLXRha2VzIHByZWNlZGVuY2Ugb3ZlciBpbmNsdXNpb24uPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPjxkaXYgY2xhc3M9InAiPlRoZXNlIHJ1bGVzIGFyZSBpbGx1c3RyYXRlZCB3aXRoIHRoaXMgaHlwb3RoZXRpY2FsIGV4YW1wbGU6PGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy92YWxpZGF0ZWZpbHRlcnMuanBnIiBhbHQ9InNjcmVlbiBjYXB0dXJlJiMxMDtvZiB0aGUgdmFsaWRhdGlvbiBmaWx0ZXJzIHBhbmVsIHNob3dpbmcgaW5jbHVkZSBhbmQgZXhjbHVkZSBncm91cHMiIC8+PGJyIC8+PHVsPgotPGxpPklmIHRoZSByZXNvdXJjZSBpcyBpbiB0aGUgZGlzYWJsZWQgZm9sZGVyLCBpdCB3aWxsIGJlIGV4Y2x1ZGVkIGJlY2F1c2UKLWV4Y2x1c2lvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZXZlcnl0aGluZyBlbHNlLjwvbGk+Ci0KLTxsaT5JZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgaGF2ZSB0aGUgSlNQIHNvdXJjZSBjb250ZW50IHR5cGUsIGFuZCBpdCBkb2VzCi1ub3QgaGF2ZSB0aGUgSlNQIGZyYWdtZW50IHNvdXJjZSBjb250ZW50IHR5cGUsIGFuZCBpdCBkb2VzIG5vdCBoYXZlIGEgZmlsZQotZXh0ZW5zaW9uIG9mIC5qc3Agb3IgLmpzcGYgdGhlbiBpdCB3aWxsIGJlIGV4Y2x1ZGVkIGJlY2F1c2Ugbm9uZSBvZiB0aGUgcnVsZXMKLWluIHRoZSBmaXJzdCBncm91cCBtYXRjaGVkLjwvbGk+Ci0KLTxsaT5JZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBtb2R1bGUgY29yZSBuYXR1cmUgdGhlbiBpdCB3aWxsIGJlIGV4Y2x1ZGVkCi1iZWNhdXNlIHRoZSBzaW5nbGUgcnVsZSBpbiB0aGUgc2Vjb25kIGdyb3VwIGRpZCBub3QgbWF0Y2guPC9saT4KLQotPGxpPk90aGVyd2lzZSB0aGUgcmVzb3VyY2Ugd2lsbCBiZSB2YWxpZGF0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIHZhbGlkYXRvci48L2xpPgotCi08L3VsPgotVG8gYWRkIGEgcnVsZSB0byBhIGdyb3VwLCBzZWxlY3QgdGhlIGdyb3VwIG9uIHRoZSBsZWZ0LCBhbmQgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkCi1SdWxlPC9zcGFuPi48L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbGRpc2FibGUuaHRtbCIgdGl0bGU9IllvdSBjYW4gZGlzYWJsZSBvbmUgb3IgbW9yZSB2YWxpZGF0b3JzIGluZGl2aWR1YWxseSBvciBkaXNhYmxlIHZhbGlkYXRpb24gZW50aXJlbHkuIEFsc28sIHlvdSBjYW4gc2V0IHZhbGlkYXRpb24gc2V0dGluZ3MgZm9yIHlvdXIgZW50aXJlIHdvcmtzcGFjZSBhbmQgZm9yIGluZGl2aWR1YWwgcHJvamVjdHMuIj5EaXNhYmxpbmcgdmFsaWRhdGlvbjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqdmFsZ2xvYmFscHJlZi5odG1sIiB0aXRsZT0iRm9yIGEgZ2l2ZW4gcHJvamVjdCwgeW91IGNhbiBvdmVycmlkZSB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMuIj5PdmVycmlkaW5nIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGp2YWxtYW51YWwuaHRtbCIgdGl0bGU9IldoZW4geW91IHJ1biBhIG1hbnVhbCB2YWxpZGF0aW9uLCBhbGwgcmVzb3VyY2VzIGluIHRoZSBzZWxlY3RlZCBwcm9qZWN0IGFyZSB2YWxpZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWxpZGF0aW9uIHNldHRpbmdzLiI+TWFudWFsbHkgdmFsaWRhdGluZyBjb2RlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGp2YWxzZWxlY3QuaHRtbCIgdGl0bGU9IllvdSBjYW4gc2VsZWN0IHNwZWNpZmljIHZhbGlkYXRvcnMgdG8gcnVuIGR1cmluZyBtYW51YWwgYW5kIGJ1aWxkIGNvZGUgdmFsaWRhdGlvbi4gWW91IGNhbiBzZXQgZWFjaCB2YWxpZGF0b3IgdG8gcnVuIG9uIG1hbnVhbCB2YWxpZGF0aW9uLCBidWlsZCB2YWxpZGF0aW9uLCBib3RoLCBvciBuZWl0aGVyLiI+U2VsZWN0aW5nIGNvZGUgdmFsaWRhdG9yczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsZXJyLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsZXJyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YzE0ZGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcnZhbGVyci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJydmFsZXJyIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkNvbW1vbiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgc29sdXRpb25zPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoaXMgdGFibGUgbGlzdHMgdGhlIGNvbW1vbiBlcnJvciBtZXNzYWdlczw/UHViIENhcmV0Pz4NCi15b3UgbWF5IGVuY291bnRlciB3aGVuIHlvdSB2YWxpZGF0ZSB5b3VyIHByb2plY3RzLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmNvZGUgdmFsaWRhdGlvbjxpbmRleHRlcm0+ZXJyb3Igc29sdXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT52YWxpZGF0aW9uPGluZGV4dGVybT5lcnJvciBzb2x1dGlvbnM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHJlZmJvZHkgb3V0cHV0Y2xhc3M9ImlkX3JlZmJvZHkiPg0KLTxleGFtcGxlIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvZXhhbXBsZT4NCi08dGFibGUgZnJhbWU9ImFsbCI+DQotPHRncm91cCBjb2xzPSIzIiBjb2xzZXA9IjEiIHJvd3NlcD0iMSI+PGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjYwKiIvPg0KLTxjb2xzcGVjIGNvbG5hbWU9ImNvbDIiIGNvbHdpZHRoPSI3MioiLz48Y29sc3BlYyBjb2xuYW1lPSJjb2wzIiBjb2x3aWR0aD0iMTY0KiIvPg0KLTx0aGVhZD4NCi08cm93IG91dHB1dGNsYXNzPSJpZF90YWJsZUhlYWRSb3ciPg0KLTxlbnRyeT5NZXNzYWdlIHByZWZpeDwvZW50cnk+DQotPGVudHJ5Pk1lc3NhZ2U8L2VudHJ5Pg0KLTxlbnRyeT5FeHBsYW5hdGlvbjwvZW50cnk+DQotPC9yb3c+DQotPC90aGVhZD4NCi08dGJvZHk+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfYXBwY2xpZW50VmFsaWRhdG9yIj4NCi08ZW50cnkgbmFtZWVuZD0iY29sMyIgbmFtZXN0PSJjb2wxIj48dWljb250cm9sPkFwcGxpY2F0aW9uIENsaWVudCB2YWxpZGF0b3I8L3VpY29udHJvbD48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0NIS0oxMDAwIj4NCi08ZW50cnkgY29sbmFtZT0iY29sMSI+Q0hLSjEwMDA8L2VudHJ5Pg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5WYWxpZGF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBjbGllbnQgZmlsZQ0KLWlzIG5vdCB2YWxpZC4gRW5zdXJlIHRoYXQgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciBpcyB2YWxpZC48L2VudHJ5Pg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wzIj5UaGUgYXBwbGljYXRpb24tY2xpZW50LnhtbCBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuIFRoZQ0KLXByb2plY3QgbWV0YWRhdGEgY2Fubm90IGJlIGluaXRpYWxpemVkIGZyb20gdGhlIGFwcGxpY2F0aW9uLWNsaWVudC54bWwgZmlsZS4NCi0gIDxvbD4NCi08bGk+RW5zdXJlIHRoZSBmb2xsb3dpbmc6ICA8dWw+DQotPGxpPnRoYXQgdGhlIE1FVEEtSU5GIGZvbGRlciBleGlzdHMgaW4gdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9saT4NCi08bGk+dGhhdCBNRVRBLUlORiBjb250YWlucyB0aGUgYXBwbGljYXRpb24tY2xpZW50LnhtbCBmaWxlPC9saT4NCi08bGk+dGhhdCBNRVRBLUlORiBpcyBpbiB0aGUgcHJvamVjdCdzIGNsYXNzcGF0aC48L2xpPg0KLTwvdWw+ICA8L2xpPg0KLTxsaT5WYWxpZGF0ZSB0aGUgc3ludGF4IG9mIHRoZSBhcHBsaWNhdGlvbi1jbGllbnQueG1sIGZpbGU6IGluIHRoZSBOYXZpZ2F0b3INCi12aWV3LCBoaWdobGlnaHQgdGhlIGFwcGxpY2F0aW9uLWNsaWVudC54bWwgZmlsZSwgcmlnaHQtY2xpY2ssIGFuZCBzZWxlY3QgPHVpY29udHJvbD5WYWxpZGF0ZQ0KLVhNTCBmaWxlPC91aWNvbnRyb2w+LjwvbGk+DQotPGxpPklmIGJvdGggMSkgYW5kIDIpIGFyZSBva2F5LCBjbG9zZSB0aGUgcHJvamVjdCwgcmVvcGVuIHRoZSBwcm9qZWN0LCBhbmQNCi1yZWJ1aWxkIHRoZSBwcm9qZWN0LiBUaGUgcHJvamVjdCBtZXRhZGF0YSB3aWxsIHJlZnJlc2guPC9saT4NCi08L29sPiA8L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0VBUlZhbGlkYXRvciI+DQotPGVudHJ5IG5hbWVlbmQ9ImNvbDMiIG5hbWVzdD0iY29sMSI+PHVpY29udHJvbD5FQVIgdmFsaWRhdG9yPC91aWNvbnRyb2w+PC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9DSEtKMTAwMSI+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkNIS0oxMDAxPC9lbnRyeT4NCi08ZW50cnkgY29sbmFtZT0iY29sMiI+VGhlIEVBUiBwcm9qZWN0IHswfSBpcyBpbnZhbGlkLjwvZW50cnk+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDMiPlRoZSBhcHBsaWNhdGlvbi54bWwgZmlsZSBjYW5ub3QgYmUgbG9hZGVkLiBUaGUgcHJvamVjdA0KLW1ldGFkYXRhIGNhbm5vdCBiZSBpbml0aWFsaXplZCBmcm9tIHRoZSBhcHBsaWNhdGlvbi54bWwgZmlsZS4gIDxvbD4NCi08bGk+RW5zdXJlIHRoZSBmb2xsb3dpbmc6ICA8dWw+DQotPGxpPnRoYXQgdGhlIE1FVEEtSU5GIGZvbGRlciBleGlzdHMgaW4gdGhlIEVBUiBwcm9qZWN0PC9saT4NCi08bGk+dGhhdCBNRVRBLUlORiBjb250YWlucyA8Y29kZXBoPmFwcGxpY2F0aW9uLnhtbDwvY29kZXBoPjwvbGk+DQotPGxpPnRoYXQgTUVUQS1JTkYgaXMgaW4gdGhlIHByb2plY3QncyBjbGFzc3BhdGguPC9saT4NCi08L3VsPiAgPC9saT4NCi08bGk+VmFsaWRhdGUgdGhlIHN5bnRheCBvZiB0aGUgYXBwbGljYXRpb24ueG1sIGZpbGU6IGluIHRoZSBOYXZpZ2F0b3IgdmlldywNCi1oaWdobGlnaHQgdGhlIGFwcGxpY2F0aW9uLnhtbCBmaWxlLCByaWdodC1jbGljaywgYW5kIHNlbGVjdCA8dWljb250cm9sPlZhbGlkYXRlDQotWE1MIGZpbGU8L3VpY29udHJvbD4uPC9saT4NCi08bGk+SWYgYm90aCAxKSBhbmQgMikgYXJlIG9rYXksIGNsb3NlIHRoZSBwcm9qZWN0LCByZW9wZW4gdGhlIHByb2plY3QsIGFuZA0KLXJlYnVpbGQgdGhlIHByb2plY3QuIFRoZSBwcm9qZWN0IG1ldGFkYXRhIHdpbGwgcmVmcmVzaC48L2xpPg0KLTwvb2w+PC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9FSkJWYWxpZGF0b3IiPg0KLTxlbnRyeSBuYW1lZW5kPSJjb2wzIiBuYW1lc3Q9ImNvbDEiPjx1aWNvbnRyb2w+RUpCIHZhbGlkYXRvcjwvdWljb250cm9sPjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfQ0hLSjIwMTkiPg0KLTxlbnRyeT5DSEtKMjAxOTwvZW50cnk+DQotPGVudHJ5PlRoZSB7MH0ga2V5IGNsYXNzIG11c3QgYmUgc2VyaWFsaXphYmxlIGF0IHJ1bnRpbWUuIDwvZW50cnk+DQotPGVudHJ5IG1vcmVyb3dzPSIyIj5UaGUgRUpCIGlzIGNvbXBsaWFudCB3aXRoIHRoZSBFSkIgc3BlY2lmaWNhdGlvbi4gVGhpcw0KLW1lc3NhZ2UgaXMgYSB3YXJuaW5nIHRoYXQgcHJvYmxlbXMgbWF5IG9jY3VyLiBUaGUgd2FybmluZyBhcHBlYXJzIHdoZW4gYSB0eXBlDQotbmVlZHMgdG8gYmUgc2VyaWFsaXphYmxlIGF0IHJ1bnRpbWUgYW5kIHdoZW4gc2VyaWFsaXphYmlsaXR5IGNhbm5vdCBiZSB2ZXJpZmllZA0KLWF0IGNvbXBpbGUtdGltZS4gQSB0eXBlIGlzIHNlcmlhbGl6YWJsZSBpZiwgYXQgcnVudGltZSwgaXQgaXMgYSBwcmltaXRpdmUNCi10eXBlLCBhIHByaW1pdGl2ZSBhcnJheSwgYSByZW1vdGUgb2JqZWN0LCBvciBpZiBpdCBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlLg0KLVRoaXMgbWVzc2FnZSBmbGFncyBqYXZhLmxhbmcuT2JqZWN0IGFuZCBpdCBjYW5ub3QgYmUgZGlzYWJsZWQuIFlvdSBjYW4gZWl0aGVyDQotbWFrZSB0aGUgb2JqZWN0IHNlcmlhbGl6YWJsZSBhdCBjb21waWxlLXRpbWUgb3IgaWdub3JlIHRoZSB3YXJuaW5nLiA8L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0NIS0oyNDEyIj4NCi08ZW50cnk+Q0hLSjI0MTI8L2VudHJ5Pg0KLTxlbnRyeT5UaGUgcmV0dXJuIHR5cGUgbXVzdCBiZSBzZXJpYWxpemFibGUgYXQgcnVudGltZS4gPC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9DSEtKMjQxMyI+DQotPGVudHJ5PkNIS0oyNDEzPC9lbnRyeT4NCi08ZW50cnk+QXJndW1lbnQgezF9IG9mIHswfSBtdXN0IGJlIHNlcmlhbGl6YWJsZSBhdCBydW50aW1lLjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfQ0hLSjIxMDIiPg0KLTxlbnRyeT5DSEtKMjEwMjwvZW50cnk+DQotPGVudHJ5PkVpdGhlciBhIGZpbmRlciBkZXNjcmlwdG9yLCBvciBhIG1hdGNoaW5nIGN1c3RvbSBmaW5kZXIgbWV0aG9kIG9uIHRoZQ0KLXswfSBjbGFzcywgbXVzdCBiZSBkZWZpbmVkLjwvZW50cnk+DQotPGVudHJ5PkEgZmluZGVyIGRlc2NyaXB0b3IgbXVzdCBleGlzdCBmb3IgZXZlcnkgZmluZGVyIG1ldGhvZC4gPC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9DSEtKMjg3MyI+DQotPGVudHJ5PkNIS0oyODczPC9lbnRyeT4NCi08ZW50cnk+TWlncmF0ZSB0aGlzIGJlYW4ncyBkYXRhc291cmNlIGJpbmRpbmcgdG8gYSBDTVAgQ29ubmVjdGlvbiBGYWN0b3J5DQotYmluZGluZy48L2VudHJ5Pg0KLTxlbnRyeT48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0NIS0oyODc0Ij4NCi08ZW50cnk+Q0hLSjI4NzQ8L2VudHJ5Pg0KLTxlbnRyeT5NaWdyYXRlIHRoaXMgRUpCIG1vZHVsZSdzIGRlZmF1bHQgZGF0YXNvdXJjZSBiaW5kaW5nIHRvIGEgZGVmYXVsdCBDTVANCi1Db25uZWN0aW9uIEZhY3RvcnkgYmluZGluZy48L2VudHJ5Pg0KLTxlbnRyeT48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0NIS0oyODc1RSI+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkNIS0oyODc1RSAgICAgICA8L2VudHJ5Pg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj4mbHQ7ZWpiLWNsaWVudC1qYXI+IHswfSBtdXN0IGV4aXN0IGluIGV2ZXJ5IEVBUiBmaWxlDQotdGhhdCBjb250YWlucyB0aGlzIEVKQiBtb2R1bGUuPC9lbnRyeT4NCi08ZW50cnkgY29sbmFtZT0iY29sMyI+SWYgPGNvZGVwaD4mbHQ7ZWpiLWNsaWVudC1qYXI+PC9jb2RlcGg+IGlzIHNwZWNpZmllZA0KLWluIDxmaWxlcGF0aD5lamItamFyLnhtbDwvZmlsZXBhdGg+LCBhIGNvcnJlc3BvbmRpbmcgRUpCIGNsaWVudCBwcm9qZWN0IG11c3QNCi1jb250YWluIHRoZSBob21lIGFuZCByZW1vdGUgaW50ZXJmYWNlcyBhbmQgYW55IG90aGVyIHR5cGVzIHRoYXQgYSBjbGllbnQgd2lsbA0KLW5lZWQuIElmIHRoZXNlIHR5cGVzIGFyZSBhbGwgY29udGFpbmVkIGluIGEgc2luZ2xlIEVKQiBwcm9qZWN0LCBkZWxldGUgdGhlIDxjb2RlcGg+Jmx0O2VqYi1jbGllbnQtamFyPjwvY29kZXBoPiBsaW5lDQotaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvci4gT3RoZXJ3aXNlLCBlbnN1cmUgdGhhdCB0aGUgRUpCIGNsaWVudCBwcm9qZWN0DQotZXhpc3RzLCBpcyBvcGVuLCBhbmQgaXMgYSBwcm9qZWN0IHV0aWxpdHkgSkFSIGluIGV2ZXJ5IEVBUiB0aGF0IHVzZXMgdGhpcw0KLUVKQiBwcm9qZWN0IGFzIGEgbW9kdWxlLjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfQ0hLSjI5MDUiPg0KLTxlbnRyeT5DSEtKMjkwNTwvZW50cnk+DQotPGVudHJ5PlRoZSBFSkIgdmFsaWRhdG9yIGRpZCBub3QgcnVuIGJlY2F1c2UgZWpiLWphci54bWwgY291bGQgbm90IGJlIGxvYWRlZC4NCi1SdW4gdGhlIFhNTCB2YWxpZGF0b3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9lbnRyeT4NCi08ZW50cnk+Q0hLSjI5MDUgbWVhbnMgdGhhdCB0aGUgcHJvamVjdCdzIG1ldGFkYXRhIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZA0KLWZyb20gZWpiLWphci54bWwuIDxvbD4NCi08bGk+RW5zdXJlIHRoZSBmb2xsb3dpbmc6ICA8dWw+DQotPGxpPnRoYXQgdGhlIE1FVEEtSU5GIGZvbGRlciBleGlzdHMgaW4gdGhlIEVKQiBwcm9qZWN0PC9saT4NCi08bGk+dGhhdCBNRVRBLUlORiBjb250YWlucyBlamItamFyLnhtbDwvbGk+DQotPGxpPnRoYXQgTUVUQS1JTkYgaXMgaW4gdGhlIHByb2plY3QncyBjbGFzc3BhdGguPC9saT4NCi08L3VsPiAgPC9saT4NCi08bGk+VmFsaWRhdGUgdGhlIHN5bnRheCBvZiB0aGUgZWpiLWphci54bWwgZmlsZTogaW4gdGhlIE5hdmlnYXRvciB2aWV3LCBoaWdobGlnaHQNCi10aGUgZWpiLWphci54bWwgZmlsZSwgcmlnaHQtY2xpY2ssIGFuZCBzZWxlY3QgPHVpY29udHJvbD5WYWxpZGF0ZSBYTUwgZmlsZTwvdWljb250cm9sPi48L2xpPg0KLTxsaT5JZiBib3RoIDEpIGFuZCAyKSBhcmUgb2theSwgY2xvc2UgdGhlIHByb2plY3QsIHJlb3BlbiB0aGUgcHJvamVjdCwgYW5kDQotcmVidWlsZCB0aGUgcHJvamVjdC4gVGhlIHByb2plY3QgbWV0YWRhdGEgd2lsbCByZWZyZXNoLjwvbGk+DQotPC9vbD48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0pTUFZhbGlkYXRvciI+DQotPGVudHJ5IG5hbWVlbmQ9ImNvbDMiIG5hbWVzdD0iY29sMSI+PHVpY29udHJvbD5KU1AgdmFsaWRhdG9yPC91aWNvbnRyb2w+PC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9JV0FXMDQ4MiI+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPklXQVcwNDgyPC9lbnRyeT4NCi08ZW50cnkgY29sbmFtZT0iY29sMiI+Tm8gdmFsaWQgSnNwVHJhbnNsYXRvcjwvZW50cnk+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDMiPlRoZXJlIGlzIGEgcGF0aCBwcm9ibGVtIHdpdGggdGhlIHByb2plY3Q7IHRoZSBKU1AgVmFsaWRhdG9yDQotbmVlZHMgYWNjZXNzIHRvIHRoZSBXQVMgcnVudGltZSBjb2RlLiBJZiBJV0FXMDQ4MkUgYXBwZWFycyBvbiBhbGwgd2ViIHByb2plY3RzLA0KLWNoZWNrIHRoZSBWYXJpYWJsZSBvciBKUkUgcGF0aDogICA8b2w+DQotPGxpPkNoZWNrIHRoZSBnbG9iYWwgcHJlZmVyZW5jZXMgKDx1aWNvbnRyb2w+V2luZG93ID4gUHJlZmVyZW5jZXMgPiBKYXZhID5JbnN0YWxsZWQNCi1KUkVzPC91aWNvbnRyb2w+KSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2F0aW9uIGZvciB0aGUgSlJFIGlzIHBvaW50aW5nDQotdG8gYSB2YWxpZCBKUkUgZGlyZWN0b3J5LiAgPC9saT4NCi08bGk+RW5zdXJlIHRoYXQgdGhlIGNsYXNzcGF0aCB2YXJpYWJsZXMgKDx1aWNvbnRyb2w+V2luZG93ID4gUHJlZmVyZW5jZXMgPg0KLUphdmEgPiBDbGFzc3BhdGggVmFyaWFibGVzPC91aWNvbnRyb2w+KSBhcmUgc2V0IGNvcnJlY3RseS48L2xpPg0KLTwvb2w+IDwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfV0FSVmFsaWRhdG9yIj4NCi08ZW50cnkgbmFtZWVuZD0iY29sMyIgbmFtZXN0PSJjb2wxIj48dWljb250cm9sPldBUiB2YWxpZGF0b3I8L3VpY29udHJvbD48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0NIS0ozMDA4Ij4NCi08ZW50cnkgY29sbmFtZT0iY29sMSI+Q0hLSjMwMDg8L2VudHJ5Pg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5NaXNzaW5nIG9yIGludmFsaWQgV0FSIGZpbGUuPC9lbnRyeT4NCi08ZW50cnkgY29sbmFtZT0iY29sMyI+VGhlIHdlYi54bWwgZmlsZSBjYW5ub3QgYmUgbG9hZGVkLiBUaGUgcHJvamVjdCBtZXRhZGF0YQ0KLWNhbm5vdCBiZSBpbml0aWFsaXplZCBmcm9tIHRoZSB3ZWIueG1sIGZpbGUuICAgPG9sPg0KLTxsaT5FbnN1cmUgdGhlIGZvbGxvd2luZzogIDx1bD4NCi08bGk+dGhhdCB0aGUgV0VCLUlORiBmb2xkZXIgZXhpc3RzIGluIHRoZSB3ZWIgcHJvamVjdDwvbGk+DQotPGxpPnRoYXQgV0VCLUlORiBjb250YWlucyB0aGUgd2ViLnhtbCBmaWxlPC9saT4NCi08bGk+dGhhdCBXRUItSU5GIGlzIGluIHRoZSBwcm9qZWN0J3MgY2xhc3NwYXRoLjwvbGk+DQotPC91bD4gIDwvbGk+DQotPGxpPlZhbGlkYXRlIHRoZSBzeW50YXggb2YgdGhlIHdlYi54bWwgZmlsZTogaW4gdGhlIE5hdmlnYXRvciB2aWV3LCBoaWdobGlnaHQNCi10aGUgd2ViLnhtbCBmaWxlLCByaWdodC1jbGljaywgYW5kIHNlbGVjdCA8dWljb250cm9sPlZhbGlkYXRlIFhNTCBmaWxlPC91aWNvbnRyb2w+LjwvbGk+DQotPGxpPklmIGJvdGggMSkgYW5kIDIpIGFyZSBva2F5LCBjbG9zZSB0aGUgcHJvamVjdCwgcmVvcGVuIHRoZSBwcm9qZWN0LCBhbmQNCi1yZWJ1aWxkIHRoZSBwcm9qZWN0LiBUaGUgcHJvamVjdCBtZXRhZGF0YSB3aWxsIHJlZnJlc2guPC9saT4NCi08L29sPjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfWE1MVmFsaWRhdG9yIj4NCi08ZW50cnkgbmFtZWVuZD0iY29sMyIgbmFtZXN0PSJjb2wxIj48dWljb250cm9sPlhNTCB2YWxpZGF0b3I8L3VpY29udHJvbD48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3c+DQotPGVudHJ5PiA8L2VudHJ5Pg0KLTxlbnRyeT5UaGUgY29udGVudCBvZiBlbGVtZW50IHR5cGUgImVqYi1qYXIiIGlzIGluY29tcGxldGUsIGl0IG11c3QgbWF0Y2gNCi0iKGRlc2NyaXB0aW9uPyxkaXNwbGF5LW5hbWU/LHNtYWxsLWljb24/LGxhcmdlLWljb24/LGVudGVycHJpc2UtYmVhbnMsYXNzZW1ibHktZGVzY3JpcHRvcj8sZWpiLWNsaWVudC1qYXI/KSIuPC9lbnRyeT4NCi08ZW50cnk+VGhlIEVKQiAxLjEgYW5kIDIuMCBzcGVjaWZpY2F0aW9ucyBtYW5kYXRlIHRoYXQgYXQgbGVhc3Qgb25lIGVudGVycHJpc2UNCi1iZWFuIG11c3QgZXhpc3QgaW4gYW4gRUpCIC5qYXIgZmlsZS4gVGhpcyBlcnJvciBtZXNzYWdlIGlzIG5vcm1hbCBkdXJpbmcgZGV2ZWxvcG1lbnQNCi1vZiBFSkIgLmphciBmaWxlcyBhbmQgY2FuIGJlIGlnbm9yZWQgdW50aWwgeW91IHBlcmZvcm0gYSBwcm9kdWN0aW9uIGFjdGlvbiwNCi1zdWNoIGFzIGV4cG9ydGluZyBvciBkZXBsb3lpbmcgY29kZS4gRGVmaW5lIGF0IGxlYXN0IG9uZSBlbnRlcnByaXNlIGJlYW4gaW4NCi10aGUgcHJvamVjdC48L2VudHJ5Pg0KLTwvcm93Pg0KLTwvdGJvZHk+DQotPC90Z3JvdXA+DQotPC90YWJsZT4NCi08ZXhhbXBsZSBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L2V4YW1wbGU+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KLTw/UHViICowMDAwMDA4ODgzPz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsZXJyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsZXJyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZDMwY2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvcnZhbGVyci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ29tbW9uIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBzb2x1dGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgY29tbW9uIGVycm9yIG1lc3NhZ2VzIHlvdSBtYXkgZW5jb3VudGVyIHdoZW4geW91IHZhbGlkYXRlIHlvdXIgcHJvamVjdHMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGNvbW1vbiBlcnJvciBtZXNzYWdlcyB5b3UgbWF5IGVuY291bnRlciB3aGVuIHlvdSB2YWxpZGF0ZSB5b3VyIHByb2plY3RzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvZGUgdmFsaWRhdGlvbiwgZXJyb3Igc29sdXRpb25zLCB2YWxpZGF0aW9uIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iY29kZSB2YWxpZGF0aW9uLCBlcnJvciBzb2x1dGlvbnMsIHZhbGlkYXRpb24iIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcnZhbGlkYXRvcnMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icnZhbGVyciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNvbW1vbiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgc29sdXRpb25zPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJydmFsZXJyIj48YSBuYW1lPSJydmFsZXJyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5Db21tb24gdmFsaWRhdGlvbiBlcnJvcnMgYW5kIHNvbHV0aW9uczwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF9yZWZib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGlzIHRhYmxlIGxpc3RzIHRoZSBjb21tb24gZXJyb3IgbWVzc2FnZXMKLXlvdSBtYXkgZW5jb3VudGVyIHdoZW4geW91IHZhbGlkYXRlIHlvdXIgcHJvamVjdHMuPC9wPgotCi08ZGl2IGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0KLQotPGRpdiBjbGFzcz0idGFibGVub2JvcmRlciI+PHRhYmxlIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0IiBmcmFtZT0iYm9yZGVyIiBib3JkZXI9IjEiIHJ1bGVzPSJhbGwiPgotCi08dGhlYWQgYWxpZ249ImxlZnQiPgotPHRyIGNsYXNzPSJpZF90YWJsZUhlYWRSb3ciPgotPHRoIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAuMjcwMjcwMjcwMjcwMjclIiBpZD0iTjEwMDc4Ij5NZXNzYWdlIHByZWZpeDwvdGg+Ci0KLTx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjI0LjMyNDMyNDMyNDMyNDMyNiUiIGlkPSJOMTAwN0YiPk1lc3NhZ2U8L3RoPgotCi08dGggdmFsaWduPSJ0b3AiIHdpZHRoPSI1NS40MDU0MDU0MDU0MDU0JSIgaWQ9Ik4xMDA4NiI+RXhwbGFuYXRpb248L3RoPgotCi08L3RyPgotCi08L3RoZWFkPgotCi08dGJvZHk+Ci08dHIgY2xhc3M9ImlkX2FwcGNsaWVudFZhbGlkYXRvciI+Ci08dGQgY29sc3Bhbj0iMyIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDA3OCBOMTAwN0YgTjEwMDg2ICI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbGljYXRpb24gQ2xpZW50IHZhbGlkYXRvcjwvc3Bhbj48L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0NIS0oxMDAwIj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwLjI3MDI3MDI3MDI3MDI3JSIgaGVhZGVycz0iTjEwMDc4ICI+Q0hLSjEwMDA8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNC4zMjQzMjQzMjQzMjQzMjYlIiBoZWFkZXJzPSJOMTAwN0YgIj5WYWxpZGF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBjbGllbnQgZmlsZQotaXMgbm90IHZhbGlkLiBFbnN1cmUgdGhhdCB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yIGlzIHZhbGlkLjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjU1LjQwNTQwNTQwNTQwNTQlIiBoZWFkZXJzPSJOMTAwODYgIj5UaGUgYXBwbGljYXRpb24tY2xpZW50LnhtbCBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuIFRoZQotcHJvamVjdCBtZXRhZGF0YSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgYXBwbGljYXRpb24tY2xpZW50LnhtbCBmaWxlLgotICA8b2w+Ci08bGk+RW5zdXJlIHRoZSBmb2xsb3dpbmc6ICA8dWw+Ci08bGk+dGhhdCB0aGUgTUVUQS1JTkYgZm9sZGVyIGV4aXN0cyBpbiB0aGUgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Q8L2xpPgotCi08bGk+dGhhdCBNRVRBLUlORiBjb250YWlucyB0aGUgYXBwbGljYXRpb24tY2xpZW50LnhtbCBmaWxlPC9saT4KLQotPGxpPnRoYXQgTUVUQS1JTkYgaXMgaW4gdGhlIHByb2plY3QncyBjbGFzc3BhdGguPC9saT4KLQotPC91bD4KLSAgPC9saT4KLQotPGxpPlZhbGlkYXRlIHRoZSBzeW50YXggb2YgdGhlIGFwcGxpY2F0aW9uLWNsaWVudC54bWwgZmlsZTogaW4gdGhlIE5hdmlnYXRvcgotdmlldywgaGlnaGxpZ2h0IHRoZSBhcHBsaWNhdGlvbi1jbGllbnQueG1sIGZpbGUsIHJpZ2h0LWNsaWNrLCBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlZhbGlkYXRlCi1YTUwgZmlsZTwvc3Bhbj4uPC9saT4KLQotPGxpPklmIGJvdGggMSkgYW5kIDIpIGFyZSBva2F5LCBjbG9zZSB0aGUgcHJvamVjdCwgcmVvcGVuIHRoZSBwcm9qZWN0LCBhbmQKLXJlYnVpbGQgdGhlIHByb2plY3QuIFRoZSBwcm9qZWN0IG1ldGFkYXRhIHdpbGwgcmVmcmVzaC48L2xpPgotCi08L29sPgotIDwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfRUFSVmFsaWRhdG9yIj4KLTx0ZCBjb2xzcGFuPSIzIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMDc4IE4xMDA3RiBOMTAwODYgIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5FQVIgdmFsaWRhdG9yPC9zcGFuPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfQ0hLSjEwMDEiPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAuMjcwMjcwMjcwMjcwMjclIiBoZWFkZXJzPSJOMTAwNzggIj5DSEtKMTAwMTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI0LjMyNDMyNDMyNDMyNDMyNiUiIGhlYWRlcnM9Ik4xMDA3RiAiPlRoZSBFQVIgcHJvamVjdCB7MH0gaXMgaW52YWxpZC48L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1NS40MDU0MDU0MDU0MDU0JSIgaGVhZGVycz0iTjEwMDg2ICI+VGhlIGFwcGxpY2F0aW9uLnhtbCBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuIFRoZSBwcm9qZWN0Ci1tZXRhZGF0YSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgYXBwbGljYXRpb24ueG1sIGZpbGUuICA8b2w+Ci08bGk+RW5zdXJlIHRoZSBmb2xsb3dpbmc6ICA8dWw+Ci08bGk+dGhhdCB0aGUgTUVUQS1JTkYgZm9sZGVyIGV4aXN0cyBpbiB0aGUgRUFSIHByb2plY3Q8L2xpPgotCi08bGk+dGhhdCBNRVRBLUlORiBjb250YWlucyA8c2FtcCBjbGFzcz0iY29kZXBoIj5hcHBsaWNhdGlvbi54bWw8L3NhbXA+PC9saT4KLQotPGxpPnRoYXQgTUVUQS1JTkYgaXMgaW4gdGhlIHByb2plY3QncyBjbGFzc3BhdGguPC9saT4KLQotPC91bD4KLSAgPC9saT4KLQotPGxpPlZhbGlkYXRlIHRoZSBzeW50YXggb2YgdGhlIGFwcGxpY2F0aW9uLnhtbCBmaWxlOiBpbiB0aGUgTmF2aWdhdG9yIHZpZXcsCi1oaWdobGlnaHQgdGhlIGFwcGxpY2F0aW9uLnhtbCBmaWxlLCByaWdodC1jbGljaywgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5WYWxpZGF0ZQotWE1MIGZpbGU8L3NwYW4+LjwvbGk+Ci0KLTxsaT5JZiBib3RoIDEpIGFuZCAyKSBhcmUgb2theSwgY2xvc2UgdGhlIHByb2plY3QsIHJlb3BlbiB0aGUgcHJvamVjdCwgYW5kCi1yZWJ1aWxkIHRoZSBwcm9qZWN0LiBUaGUgcHJvamVjdCBtZXRhZGF0YSB3aWxsIHJlZnJlc2guPC9saT4KLQotPC9vbD4KLTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfRUpCVmFsaWRhdG9yIj4KLTx0ZCBjb2xzcGFuPSIzIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMDc4IE4xMDA3RiBOMTAwODYgIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5FSkIgdmFsaWRhdG9yPC9zcGFuPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfQ0hLSjIwMTkiPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAuMjcwMjcwMjcwMjcwMjclIiBoZWFkZXJzPSJOMTAwNzggIj5DSEtKMjAxOTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI0LjMyNDMyNDMyNDMyNDMyNiUiIGhlYWRlcnM9Ik4xMDA3RiAiPlRoZSB7MH0ga2V5IGNsYXNzIG11c3QgYmUgc2VyaWFsaXphYmxlIGF0IHJ1bnRpbWUuIDwvdGQ+Ci0KLTx0ZCByb3dzcGFuPSIzIiB2YWxpZ249InRvcCIgd2lkdGg9IjU1LjQwNTQwNTQwNTQwNTQlIiBoZWFkZXJzPSJOMTAwODYgIj5UaGUgRUpCIGlzIGNvbXBsaWFudCB3aXRoIHRoZSBFSkIgc3BlY2lmaWNhdGlvbi4gVGhpcwotbWVzc2FnZSBpcyBhIHdhcm5pbmcgdGhhdCBwcm9ibGVtcyBtYXkgb2NjdXIuIFRoZSB3YXJuaW5nIGFwcGVhcnMgd2hlbiBhIHR5cGUKLW5lZWRzIHRvIGJlIHNlcmlhbGl6YWJsZSBhdCBydW50aW1lIGFuZCB3aGVuIHNlcmlhbGl6YWJpbGl0eSBjYW5ub3QgYmUgdmVyaWZpZWQKLWF0IGNvbXBpbGUtdGltZS4gQSB0eXBlIGlzIHNlcmlhbGl6YWJsZSBpZiwgYXQgcnVudGltZSwgaXQgaXMgYSBwcmltaXRpdmUKLXR5cGUsIGEgcHJpbWl0aXZlIGFycmF5LCBhIHJlbW90ZSBvYmplY3QsIG9yIGlmIGl0IGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUuCi1UaGlzIG1lc3NhZ2UgZmxhZ3MgamF2YS5sYW5nLk9iamVjdCBhbmQgaXQgY2Fubm90IGJlIGRpc2FibGVkLiBZb3UgY2FuIGVpdGhlcgotbWFrZSB0aGUgb2JqZWN0IHNlcmlhbGl6YWJsZSBhdCBjb21waWxlLXRpbWUgb3IgaWdub3JlIHRoZSB3YXJuaW5nLiA8L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0NIS0oyNDEyIj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwLjI3MDI3MDI3MDI3MDI3JSIgaGVhZGVycz0iTjEwMDc4ICI+Q0hLSjI0MTI8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNC4zMjQzMjQzMjQzMjQzMjYlIiBoZWFkZXJzPSJOMTAwN0YgIj5UaGUgcmV0dXJuIHR5cGUgbXVzdCBiZSBzZXJpYWxpemFibGUgYXQgcnVudGltZS4gPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9DSEtKMjQxMyI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMC4yNzAyNzAyNzAyNzAyNyUiIGhlYWRlcnM9Ik4xMDA3OCAiPkNIS0oyNDEzPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjQuMzI0MzI0MzI0MzI0MzI2JSIgaGVhZGVycz0iTjEwMDdGICI+QXJndW1lbnQgezF9IG9mIHswfSBtdXN0IGJlIHNlcmlhbGl6YWJsZSBhdCBydW50aW1lLjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfQ0hLSjIxMDIiPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAuMjcwMjcwMjcwMjcwMjclIiBoZWFkZXJzPSJOMTAwNzggIj5DSEtKMjEwMjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI0LjMyNDMyNDMyNDMyNDMyNiUiIGhlYWRlcnM9Ik4xMDA3RiAiPkVpdGhlciBhIGZpbmRlciBkZXNjcmlwdG9yLCBvciBhIG1hdGNoaW5nIGN1c3RvbSBmaW5kZXIgbWV0aG9kIG9uIHRoZQotezB9IGNsYXNzLCBtdXN0IGJlIGRlZmluZWQuPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTUuNDA1NDA1NDA1NDA1NCUiIGhlYWRlcnM9Ik4xMDA4NiAiPkEgZmluZGVyIGRlc2NyaXB0b3IgbXVzdCBleGlzdCBmb3IgZXZlcnkgZmluZGVyIG1ldGhvZC4gPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9DSEtKMjg3MyI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMC4yNzAyNzAyNzAyNzAyNyUiIGhlYWRlcnM9Ik4xMDA3OCAiPkNIS0oyODczPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjQuMzI0MzI0MzI0MzI0MzI2JSIgaGVhZGVycz0iTjEwMDdGICI+TWlncmF0ZSB0aGlzIGJlYW4ncyBkYXRhc291cmNlIGJpbmRpbmcgdG8gYSBDTVAgQ29ubmVjdGlvbiBGYWN0b3J5Ci1iaW5kaW5nLjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjU1LjQwNTQwNTQwNTQwNTQlIiBoZWFkZXJzPSJOMTAwODYgIj4mbmJzcDs8L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0NIS0oyODc0Ij4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwLjI3MDI3MDI3MDI3MDI3JSIgaGVhZGVycz0iTjEwMDc4ICI+Q0hLSjI4NzQ8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNC4zMjQzMjQzMjQzMjQzMjYlIiBoZWFkZXJzPSJOMTAwN0YgIj5NaWdyYXRlIHRoaXMgRUpCIG1vZHVsZSdzIGRlZmF1bHQgZGF0YXNvdXJjZSBiaW5kaW5nIHRvIGEgZGVmYXVsdCBDTVAKLUNvbm5lY3Rpb24gRmFjdG9yeSBiaW5kaW5nLjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjU1LjQwNTQwNTQwNTQwNTQlIiBoZWFkZXJzPSJOMTAwODYgIj4mbmJzcDs8L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0NIS0oyODc1RSI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMC4yNzAyNzAyNzAyNzAyNyUiIGhlYWRlcnM9Ik4xMDA3OCAiPkNIS0oyODc1RSAgICAgICA8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNC4zMjQzMjQzMjQzMjQzMjYlIiBoZWFkZXJzPSJOMTAwN0YgIj4mbHQ7ZWpiLWNsaWVudC1qYXImZ3Q7IHswfSBtdXN0IGV4aXN0IGluIGV2ZXJ5IEVBUiBmaWxlCi10aGF0IGNvbnRhaW5zIHRoaXMgRUpCIG1vZHVsZS48L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1NS40MDU0MDU0MDU0MDU0JSIgaGVhZGVycz0iTjEwMDg2ICI+SWYgPHNhbXAgY2xhc3M9ImNvZGVwaCI+Jmx0O2VqYi1jbGllbnQtamFyJmd0Ozwvc2FtcD4gaXMgc3BlY2lmaWVkCi1pbiA8c3BhbiBjbGFzcz0iZmlsZXBhdGgiPmVqYi1qYXIueG1sPC9zcGFuPiwgYSBjb3JyZXNwb25kaW5nIEVKQiBjbGllbnQgcHJvamVjdCBtdXN0Ci1jb250YWluIHRoZSBob21lIGFuZCByZW1vdGUgaW50ZXJmYWNlcyBhbmQgYW55IG90aGVyIHR5cGVzIHRoYXQgYSBjbGllbnQgd2lsbAotbmVlZC4gSWYgdGhlc2UgdHlwZXMgYXJlIGFsbCBjb250YWluZWQgaW4gYSBzaW5nbGUgRUpCIHByb2plY3QsIGRlbGV0ZSB0aGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+Jmx0O2VqYi1jbGllbnQtamFyJmd0Ozwvc2FtcD4gbGluZQotaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvci4gT3RoZXJ3aXNlLCBlbnN1cmUgdGhhdCB0aGUgRUpCIGNsaWVudCBwcm9qZWN0Ci1leGlzdHMsIGlzIG9wZW4sIGFuZCBpcyBhIHByb2plY3QgdXRpbGl0eSBKQVIgaW4gZXZlcnkgRUFSIHRoYXQgdXNlcyB0aGlzCi1FSkIgcHJvamVjdCBhcyBhIG1vZHVsZS48L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0NIS0oyOTA1Ij4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwLjI3MDI3MDI3MDI3MDI3JSIgaGVhZGVycz0iTjEwMDc4ICI+Q0hLSjI5MDU8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNC4zMjQzMjQzMjQzMjQzMjYlIiBoZWFkZXJzPSJOMTAwN0YgIj5UaGUgRUpCIHZhbGlkYXRvciBkaWQgbm90IHJ1biBiZWNhdXNlIGVqYi1qYXIueG1sIGNvdWxkIG5vdCBiZSBsb2FkZWQuCi1SdW4gdGhlIFhNTCB2YWxpZGF0b3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTUuNDA1NDA1NDA1NDA1NCUiIGhlYWRlcnM9Ik4xMDA4NiAiPkNIS0oyOTA1IG1lYW5zIHRoYXQgdGhlIHByb2plY3QncyBtZXRhZGF0YSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQKLWZyb20gZWpiLWphci54bWwuIDxvbD4KLTxsaT5FbnN1cmUgdGhlIGZvbGxvd2luZzogIDx1bD4KLTxsaT50aGF0IHRoZSBNRVRBLUlORiBmb2xkZXIgZXhpc3RzIGluIHRoZSBFSkIgcHJvamVjdDwvbGk+Ci0KLTxsaT50aGF0IE1FVEEtSU5GIGNvbnRhaW5zIGVqYi1qYXIueG1sPC9saT4KLQotPGxpPnRoYXQgTUVUQS1JTkYgaXMgaW4gdGhlIHByb2plY3QncyBjbGFzc3BhdGguPC9saT4KLQotPC91bD4KLSAgPC9saT4KLQotPGxpPlZhbGlkYXRlIHRoZSBzeW50YXggb2YgdGhlIGVqYi1qYXIueG1sIGZpbGU6IGluIHRoZSBOYXZpZ2F0b3IgdmlldywgaGlnaGxpZ2h0Ci10aGUgZWpiLWphci54bWwgZmlsZSwgcmlnaHQtY2xpY2ssIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VmFsaWRhdGUgWE1MIGZpbGU8L3NwYW4+LjwvbGk+Ci0KLTxsaT5JZiBib3RoIDEpIGFuZCAyKSBhcmUgb2theSwgY2xvc2UgdGhlIHByb2plY3QsIHJlb3BlbiB0aGUgcHJvamVjdCwgYW5kCi1yZWJ1aWxkIHRoZSBwcm9qZWN0LiBUaGUgcHJvamVjdCBtZXRhZGF0YSB3aWxsIHJlZnJlc2guPC9saT4KLQotPC9vbD4KLTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfSlNQVmFsaWRhdG9yIj4KLTx0ZCBjb2xzcGFuPSIzIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMDc4IE4xMDA3RiBOMTAwODYgIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5KU1AgdmFsaWRhdG9yPC9zcGFuPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfSVdBVzA0ODIiPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAuMjcwMjcwMjcwMjcwMjclIiBoZWFkZXJzPSJOMTAwNzggIj5JV0FXMDQ4MjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI0LjMyNDMyNDMyNDMyNDMyNiUiIGhlYWRlcnM9Ik4xMDA3RiAiPk5vIHZhbGlkIEpzcFRyYW5zbGF0b3I8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1NS40MDU0MDU0MDU0MDU0JSIgaGVhZGVycz0iTjEwMDg2ICI+VGhlcmUgaXMgYSBwYXRoIHByb2JsZW0gd2l0aCB0aGUgcHJvamVjdDsgdGhlIEpTUCBWYWxpZGF0b3IKLW5lZWRzIGFjY2VzcyB0byB0aGUgV0FTIHJ1bnRpbWUgY29kZS4gSWYgSVdBVzA0ODJFIGFwcGVhcnMgb24gYWxsIHdlYiBwcm9qZWN0cywKLWNoZWNrIHRoZSBWYXJpYWJsZSBvciBKUkUgcGF0aDogICA8b2w+Ci08bGk+Q2hlY2sgdGhlIGdsb2JhbCBwcmVmZXJlbmNlcyAoPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2luZG93ICZndDsgUHJlZmVyZW5jZXMgJmd0OyBKYXZhICZndDtJbnN0YWxsZWQKLUpSRXM8L3NwYW4+KSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2F0aW9uIGZvciB0aGUgSlJFIGlzIHBvaW50aW5nCi10byBhIHZhbGlkIEpSRSBkaXJlY3RvcnkuICA8L2xpPgotCi08bGk+RW5zdXJlIHRoYXQgdGhlIGNsYXNzcGF0aCB2YXJpYWJsZXMgKDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IFByZWZlcmVuY2VzICZndDsKLUphdmEgJmd0OyBDbGFzc3BhdGggVmFyaWFibGVzPC9zcGFuPikgYXJlIHNldCBjb3JyZWN0bHkuPC9saT4KLQotPC9vbD4KLSA8L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX1dBUlZhbGlkYXRvciI+Ci08dGQgY29sc3Bhbj0iMyIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDA3OCBOMTAwN0YgTjEwMDg2ICI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+V0FSIHZhbGlkYXRvcjwvc3Bhbj48L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0NIS0ozMDA4Ij4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwLjI3MDI3MDI3MDI3MDI3JSIgaGVhZGVycz0iTjEwMDc4ICI+Q0hLSjMwMDg8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNC4zMjQzMjQzMjQzMjQzMjYlIiBoZWFkZXJzPSJOMTAwN0YgIj5NaXNzaW5nIG9yIGludmFsaWQgV0FSIGZpbGUuPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTUuNDA1NDA1NDA1NDA1NCUiIGhlYWRlcnM9Ik4xMDA4NiAiPlRoZSB3ZWIueG1sIGZpbGUgY2Fubm90IGJlIGxvYWRlZC4gVGhlIHByb2plY3QgbWV0YWRhdGEKLWNhbm5vdCBiZSBpbml0aWFsaXplZCBmcm9tIHRoZSB3ZWIueG1sIGZpbGUuICAgPG9sPgotPGxpPkVuc3VyZSB0aGUgZm9sbG93aW5nOiAgPHVsPgotPGxpPnRoYXQgdGhlIFdFQi1JTkYgZm9sZGVyIGV4aXN0cyBpbiB0aGUgd2ViIHByb2plY3Q8L2xpPgotCi08bGk+dGhhdCBXRUItSU5GIGNvbnRhaW5zIHRoZSB3ZWIueG1sIGZpbGU8L2xpPgotCi08bGk+dGhhdCBXRUItSU5GIGlzIGluIHRoZSBwcm9qZWN0J3MgY2xhc3NwYXRoLjwvbGk+Ci0KLTwvdWw+Ci0gIDwvbGk+Ci0KLTxsaT5WYWxpZGF0ZSB0aGUgc3ludGF4IG9mIHRoZSB3ZWIueG1sIGZpbGU6IGluIHRoZSBOYXZpZ2F0b3IgdmlldywgaGlnaGxpZ2h0Ci10aGUgd2ViLnhtbCBmaWxlLCByaWdodC1jbGljaywgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5WYWxpZGF0ZSBYTUwgZmlsZTwvc3Bhbj4uPC9saT4KLQotPGxpPklmIGJvdGggMSkgYW5kIDIpIGFyZSBva2F5LCBjbG9zZSB0aGUgcHJvamVjdCwgcmVvcGVuIHRoZSBwcm9qZWN0LCBhbmQKLXJlYnVpbGQgdGhlIHByb2plY3QuIFRoZSBwcm9qZWN0IG1ldGFkYXRhIHdpbGwgcmVmcmVzaC48L2xpPgotCi08L29sPgotPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9YTUxWYWxpZGF0b3IiPgotPHRkIGNvbHNwYW49IjMiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwNzggTjEwMDdGIE4xMDA4NiAiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlhNTCB2YWxpZGF0b3I8L3NwYW4+PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAuMjcwMjcwMjcwMjcwMjclIiBoZWFkZXJzPSJOMTAwNzggIj4gPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjQuMzI0MzI0MzI0MzI0MzI2JSIgaGVhZGVycz0iTjEwMDdGICI+VGhlIGNvbnRlbnQgb2YgZWxlbWVudCB0eXBlICJlamItamFyIiBpcyBpbmNvbXBsZXRlLCBpdCBtdXN0IG1hdGNoCi0iKGRlc2NyaXB0aW9uPyxkaXNwbGF5LW5hbWU/LHNtYWxsLWljb24/LGxhcmdlLWljb24/LGVudGVycHJpc2UtYmVhbnMsYXNzZW1ibHktZGVzY3JpcHRvcj8sZWpiLWNsaWVudC1qYXI/KSIuPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTUuNDA1NDA1NDA1NDA1NCUiIGhlYWRlcnM9Ik4xMDA4NiAiPlRoZSBFSkIgMS4xIGFuZCAyLjAgc3BlY2lmaWNhdGlvbnMgbWFuZGF0ZSB0aGF0IGF0IGxlYXN0IG9uZSBlbnRlcnByaXNlCi1iZWFuIG11c3QgZXhpc3QgaW4gYW4gRUpCIC5qYXIgZmlsZS4gVGhpcyBlcnJvciBtZXNzYWdlIGlzIG5vcm1hbCBkdXJpbmcgZGV2ZWxvcG1lbnQKLW9mIEVKQiAuamFyIGZpbGVzIGFuZCBjYW4gYmUgaWdub3JlZCB1bnRpbCB5b3UgcGVyZm9ybSBhIHByb2R1Y3Rpb24gYWN0aW9uLAotc3VjaCBhcyBleHBvcnRpbmcgb3IgZGVwbG95aW5nIGNvZGUuIERlZmluZSBhdCBsZWFzdCBvbmUgZW50ZXJwcmlzZSBiZWFuIGluCi10aGUgcHJvamVjdC48L3RkPgotCi08L3RyPgotCi08L3Rib2R5PgotCi08L3RhYmxlPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGp2YWwuaHRtbCIgdGl0bGU9IlRoZSB3b3JrYmVuY2ggaW5jbHVkZXMgdmFsaWRhdG9ycyB0aGF0IGNoZWNrIGNlcnRhaW4gZmlsZXMgaW4geW91ciBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIG1vZHVsZSBwcm9qZWN0cyBmb3IgZXJyb3JzLiI+VmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWxyZWYiPjxzdHJvbmc+UmVsYXRlZCByZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3J2YWxpZGF0b3JzLmh0bWwiIHRpdGxlPSJUaGlzIHRhYmxlIGxpc3RzIHRoZSB2YWxpZGF0b3JzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGRpZmZlcmVudCBwcm9qZWN0IHR5cGVzIGFuZCBnaXZlcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggdmFsaWRhdG9yLiI+SjJFRSBWYWxpZGF0b3JzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3J2YWxpZGF0b3JzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsaWRhdG9ycy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWJkZDdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3J2YWxpZGF0b3JzLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiINCi0gInJlZmVyZW5jZS5kdGQiPg0KLTxyZWZlcmVuY2UgaWQ9InJ2YWxpZGF0b3JzIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkoyRUUgVmFsaWRhdG9yczwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGlzIHRhYmxlIGxpc3RzIHRoZSB2YWxpZGF0b3JzIHRoYXQNCi1hcmUgYXZhaWxhYmxlIGZvciB0aGUgZGlmZmVyZW50IHByb2plY3QgdHlwZXMgYW5kIGdpdmVzIGEgYnJpZWYgZGVzY3JpcHRpb24NCi1vZiBlYWNoIHZhbGlkYXRvci48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT52YWxpZGF0aW9uPGluZGV4dGVybT5KMkVFIHZhbGlkYXRvcnM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPmNvZGUgdmFsaWRhdGlvbjxpbmRleHRlcm0+SjJFRSB2YWxpZGF0b3JzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5IG91dHB1dGNsYXNzPSJpZF9yZWZib2R5Ij4NCi08ZXhhbXBsZSBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L2V4YW1wbGU+DQotPHRhYmxlIGZyYW1lPSJhbGwiPg0KLTx0Z3JvdXAgY29scz0iMiIgY29sc2VwPSIxIiByb3dzZXA9IjEiPjxjb2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSI1MCoiLz4NCi08Y29sc3BlYyBjb2xuYW1lPSJjb2wyIiBjb2x3aWR0aD0iNTAqIi8+DQotPHRoZWFkPg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX3RvcHJvdyI+DQotPGVudHJ5PlZhbGlkYXRvciBuYW1lPC9lbnRyeT4NCi08ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5Pg0KLTwvcm93Pg0KLTwvdGhlYWQ+DQotPHRib2R5Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX2FwcGNsaWVudFZhbGlkYXRvciI+DQotPGVudHJ5IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+QXBwbGljYXRpb24gQ2xpZW50IFZhbGlkYXRvcjwvZW50cnk+DQotPGVudHJ5IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+VGhlIEFwcGxpY2F0aW9uIENsaWVudCBWYWxpZGF0b3IgdmFsaWRhdGVzDQotdGhlIGZvbGxvd2luZyBBcHBsaWNhdGlvbiBDbGllbnQgcHJvamVjdCByZXNvdXJjZXM6ICAgPHVsPg0KLTxsaT5EZXBsb3ltZW50IGRlc2NyaXB0b3IgKGFwcGxpY2F0aW9uLWNsaWVudC54bWwpPC9saT4NCi08bGk+RUpCIHJlZmVyZW5jZXM8L2xpPg0KLTxsaT5SZXNvdXJjZSByZWZlcmVuY2VzPC9saT4NCi08L3VsPjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfY29ubmVjdG9yVmFsaWRhdG9yIj4NCi08ZW50cnkgY29sbmFtZT0iY29sMSI+Q29ubmVjdG9yIFZhbGlkYXRvcjwvZW50cnk+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPlRoZSBDb25uZWN0b3IgdmFsaWRhdG9yIGNoZWNrcyBmb3IgaW52YWxpZCBKMkVFIHNwZWNpZmljYXRpb24NCi1sZXZlbHMgaW4gY29ubmVjdG9yIHByb2plY3RzLjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfRFREVmFsaWRhdG9yIj4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5EVEQgVmFsaWRhdG9yPC9lbnRyeT4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5UaGUgRFREIHZhbGlkYXRvciBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlDQotY3VycmVudCBzdGF0ZSBvZiBhIERURCBpcyBzZW1hbnRpY2FsbHkgdmFsaWQuIFhNTCBmaWxlcyBhcmUgdmFsaWRhdGVkIGFjY29yZGluZw0KLXRvIHRoZSBYTUwgc3BlY2lmaWNhdGlvbiA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLXhtbC0yMDAwMTAwNiINCi1zY29wZT0iZXh0ZXJuYWwiPiBFeHRlbnNpYmxlIE1hcmt1cCBMYW5ndWFnZSAoWE1MKSAxLjA8ZGVzYz48L2Rlc2M+PC94cmVmPiBmcm9tDQotdGhlIFczQyBXZWIgc2l0ZS4gQXMgd2VsbCwgdGhlIERURCB2YWxpZGF0b3IgY2hlY2tzIGZvciBlcnJvcnMgc3VjaCBhcyByZWZlcmVuY2VzDQotdG8gZW50aXRpZXMgYW5kIGVsZW1lbnRzIHRoYXQgZG8gbm90IGV4aXN0LjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfRUFSVmFsaWRhdG9yIj4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5FQVIgVmFsaWRhdG9yPC9lbnRyeT4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5UaGUgRUFSIFZhbGlkYXRvciB2YWxpZGF0ZXMgdGhlIGZvbGxvd2luZzoNCi0gPHVsPg0KLTxsaT5FQVIgZGVwbG95bWVudCBkZXNjcmlwdG9yIChhcHBsaWNhdGlvbi54bWwpPC9saT4NCi08bGk+RUpCIHJlZmVyZW5jZXMgb2YgYWxsIG1vZHVsZSBwcm9qZWN0cyBpbiB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0PC9saT4NCi08bGk+U2VjdXJpdHkgcm9sZXM8L2xpPg0KLTxsaT5SZXNvdXJjZSByZWZlcmVuY2VzPC9saT4NCi08bGk+TWFuaWZlc3QgZmlsZXMgZm9yIGFsbCBjb250YWluZWQgb3IgcmVmZXJlbmNlZCBtb2R1bGVzIGFuZCB1dGlsaXR5IEpBUg0KLWZpbGVzPC9saT4NCi08bGk+VGFyZ2V0IHNlcnZlciBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYW5kDQotYW55IHV0aWxpdHkgYW5kIG1vZHVsZSBwcm9qZWN0czwvbGk+DQotPGxpPkV4aXN0ZW5jZSBvZiBwcm9qZWN0cyBmb3IgZWFjaCBtb2R1bGUgZGVmaW5lZCBpbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uPC9saT4NCi08L3VsPiAgPHA+Tm90ZSB0aGF0IHRoZSBFQVIgVmFsaWRhdG9yIG9ubHkgZW5zdXJlcyB0aGUgdmFsaWRpdHkgYW5kIGRlcGVuZGVuY3kNCi1vZiB0aGUgbW9kdWxlIHByb2plY3RzIHdpdGggcmVzcGVjdCB0byB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LjwvcD48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0VKQlZhbGlkYXRvciI+DQotPGVudHJ5IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+RUpCIFZhbGlkYXRvcjwvZW50cnk+DQotPGVudHJ5IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+VGhlIEVKQiBWYWxpZGF0b3IgdmVyaWZpZXMgdGhhdCBlbnRlcnByaXNlDQotYmVhbnMgY29udGFpbmVkIGluIGFuIEVKQiBwcm9qZWN0IGNvbXBseSB3aXRoIHRoZSBTdW4gRW50ZXJwcmlzZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmFCZWFucyI+SmF2YUJlYW5zPC90bT4gU3BlY2lmaWNhdGlvbnMNCi0oMS4xLCAyLjAsIGFuZCAyLjEpLCBkZXBlbmRpbmcgb24gdGhlIGxldmVsIG9mIHRoZSBiZWFuLiBDb2RlIHZhbGlkYXRpb24gZm9yDQotdGhlIEVKQiAxLjAgc3BlY2lmaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBTcGVjaWZpY2FsbHksIHRoZSBFSkIgVmFsaWRhdG9yDQotdmFsaWRhdGVzIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzOiA8dWw+DQotPGxpPjx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiAuY2xhc3MNCi1maWxlcyB0aGF0IGFyZSBtZW1iZXJzIG9mIGFuIGVudGVycHJpc2UgYmVhbiAoaG9tZSBpbnRlcmZhY2UsIHJlbW90ZSBpbnRlcmZhY2UsDQotZW50ZXJwcmlzZSBiZWFuIGNsYXNzLCBhbmQsIGlmIHRoZSBiZWFuIGlzIGFuIGVudGl0eSBiZWFuLCB0aGUga2V5IGNsYXNzKTwvbGk+DQotPGxpPmVqYi1qYXIueG1sPC9saT4NCi08L3VsPjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfRUxWYWxpZGF0b3IiPg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5FTCBTeW50YXggVmFsaWRhdG9yPC9lbnRyeT4NCi08ZW50cnkgY29sbmFtZT0iY29sMiI+PC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9IVE1MVmFsaWRhdG9yIj4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5IVE1MIFN5bnRheCBWYWxpZGF0b3I8L2VudHJ5Pg0KLTxlbnRyeSBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPlRoZSBIVE1MIFN5bnRheCBWYWxpZGF0b3IgdmFsaWRhdGVzIEhUTUwNCi1iYXNpYyBzeW50YXggYW5kIEhUTUwgRFREIGNvbXBsaWFuY2UgaW4gdGhlIGZvbGxvd2luZyBXZWIgcHJvamVjdCByZXNvdXJjZXM6DQotIDx1bD4NCi08bGk+SFRNTCBmaWxlczwvbGk+DQotPGxpPkpTUCBmaWxlczwvbGk+DQotPC91bD48L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX0pTUFZhbGlkYXRvciI+DQotPGVudHJ5IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+SlNQIFN5bnRheCBWYWxpZGF0b3I8L2VudHJ5Pg0KLTxlbnRyeSBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPlRoZSBKU1AgU3ludGF4IFZhbGlkYXRvciB2YWxpZGF0ZXMgSlNQIGZpbGVzDQotaW4gYSBwcm9qZWN0IGJ5IHRyYW5zbGF0aW5nIHRoZW0gaW50byB0aGUgY29ycmVzcG9uZGluZyA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjb2RlDQotYW5kIHRoZW4gY2hlY2tpbmcgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNvZGUgZm9yIGNvbXBpbGUgZXJyb3JzLjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfV0FSVmFsaWRhdG9yIj4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5XYXIgVmFsaWRhdG9yPC9lbnRyeT4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5UaGUgV2FyIFZhbGlkYXRvciB2YWxpZGF0ZXMgdGhlIGZvbGxvd2luZw0KLXdlYiBwcm9qZWN0IHJlc291cmNlczogICA8dWw+DQotPGxpPkRlcGxveW1lbnQgZGVzY3JpcHRvciAod2ViLnhtbCk8L2xpPg0KLTxsaT5TZXJ2bGV0czwvbGk+DQotPGxpPlNlY3VyaXR5IHJvbGVzPC9saT4NCi08bGk+U2VydmxldCAmYW1wOyBzZXJ2bGV0IG1hcHBpbmdzPC9saT4NCi08bGk+RUpCIHJlZmVyZW5jZXM8L2xpPg0KLTwvdWw+PC9lbnRyeT4NCi08L3Jvdz4NCi08cm93IG91dHB1dGNsYXNzPSJpZF9XU0RMVmFsaWRhdG9yIj4NCi08ZW50cnkgY29sbmFtZT0iY29sMSI+V1NETCBWYWxpZGF0b3I8L2VudHJ5Pg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5UaGUgV1NETCB2YWxpZGF0b3IgY2hlY2tzIHRoZSBmb2xsb3dpbmcgaW4gV1NETCBmaWxlczogPHVsPg0KLTxsaT5YTUwgc3ludGF4PC9saT4NCi08bGk+WE1MIFNjaGVtYSB0eXBlcyBpbiB0aGUgJmx0O3R5cGVzPiBzZWN0aW9uPC9saT4NCi08bGk+UmVmZXJlbnRpYWwgaW50ZWdyaXR5IG9mIHRoZSB2YXJpb3VzIGNvbnN0cnVjdHMgaW4gV1NETCA8L2xpPg0KLTwvdWw+VGhlIHZhbGlkYXRvciBhbHNvIGluY2x1ZGVzIGFuIGV4dGVuc2lvbiBwb2ludCB0byBhbGxvdyBvdGhlciB2YWxpZGF0b3JzDQotdG8gYmUgcGx1Z2dlZCBpbnRvIHRoZSBXU0RMIHZhbGlkYXRpb24gdG8gcHJvdmlkZSBhZGRpdGlvbmFsIHZlcmlmaWNhdGlvbg0KLW9mIHRoZSBXU0RMIGZpbGUuIFRocm91Z2ggdGhpcyBtZWNoYW5pc20sIGludGVyb3BlcmFiaWxpdHkgaXMgY2hlY2tlZCBieSB2YWxpZGF0aW5nDQotYSBXU0RMIGZpbGUgYWdhaW5zdCBXUy1JIFByb2ZpbGVzLiA8L2VudHJ5Pg0KLTwvcm93Pg0KLTxyb3cgb3V0cHV0Y2xhc3M9ImlkX1dTSVZhbGlkYXRvciI+DQotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTLUkgTWVzc2FnZSBWYWxpZGF0b3I8L2VudHJ5Pg0KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5XUy1JIE1lc3NhZ2UgdmFsaWRhdG9yIGNoZWNrcyBTT0FQIG1lc3NhZ2VzIGFnYWluc3QNCi1XUy1JIFByb2ZpbGVzLiBBIHVzZXIgY2FuIGNhcHR1cmUgYW5kIHZlcmlmeSBTT0FQIG1lc3NhZ2VzIHVzaW5nIHRoZSBUQ1AvSVANCi1Nb25pdG9yLiBUaGUgdmFsaWRhdG9yIGNoZWNrcyBhIG1lc3NhZ2UgbG9nIHRoYXQgaXMgc2F2ZWQgYXMgYSBwcm9qZWN0IHJlc291cmNlDQotKC53c2ltc2cpLiBUaGUgbG9nIGNvbmZvcm1zIHRvIGEgZm9ybWF0IGFzIHNwZWNpZmllZCBieSBXUy1JLjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfWE1MU2NoZW1hVmFsaWRhdG9yIj4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5YTUwgU2NoZW1hIFZhbGlkYXRvcjwvZW50cnk+DQotPGVudHJ5IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+VGhlIFhNTCBzY2hlbWEgdmFsaWRhdG9yIGRldGVybWluZXMgd2hldGhlcg0KLXRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIFhNTCBzY2hlbWEgZmlsZSBpcyBzZW1hbnRpY2FsbHkgdmFsaWQuIFhNTCBzY2hlbWFzDQotYXJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiA8eHJlZiBmb3JtYXQ9Imh0bWwiDQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvIiBzY29wZT0ibG9jYWwiPiBYTUwgU2NoZW1hIFBhcnQgMToNCi1TdHJ1Y3R1cmVzPGRlc2M+PC9kZXNjPjwveHJlZj4gZnJvbSB0aGUgVzNDIFdlYiBzaXRlLjwvZW50cnk+DQotPC9yb3c+DQotPHJvdyBvdXRwdXRjbGFzcz0iaWRfWE1MVmFsaWRhdG9yIj4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5YTUwgVmFsaWRhdG9yPC9lbnRyeT4NCi08ZW50cnkgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5UaGUgWE1MIHZhbGlkYXRvciBlbnN1cmVzIHRoYXQgYW4gWE1MIGZpbGUNCi1pcyB3ZWxsLWZvcm1lZC4gSXQgYWxzbyB2ZXJpZmllcyBpZiBhbiBYTUwgZmlsZSBpcyB2YWxpZCAtIHRoYXQgaXMsIGl0IGZvbGxvd3MNCi10aGUgY29uc3RyYWludHMgZXN0YWJsaXNoZWQgaW4gdGhlIERURCBvciBYTUwgc2NoZW1hIHRoZSBYTUwgZmlsZSBpcyBhc3NvY2lhdGVkDQotd2l0aC48L2VudHJ5Pg0KLTwvcm93Pg0KLTwvdGJvZHk+DQotPC90Z3JvdXA+DQotPC90YWJsZT4NCi08ZXhhbXBsZSBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L2V4YW1wbGU+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3J2YWxpZGF0b3JzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy9ydmFsaWRhdG9ycy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmRlNzgzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3J2YWxpZGF0b3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJKMkVFIFZhbGlkYXRvcnMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgdmFsaWRhdG9ycyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoZSBkaWZmZXJlbnQgcHJvamVjdCB0eXBlcyBhbmQgZ2l2ZXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHZhbGlkYXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgdmFsaWRhdG9ycyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoZSBkaWZmZXJlbnQgcHJvamVjdCB0eXBlcyBhbmQgZ2l2ZXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHZhbGlkYXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJ2YWxpZGF0aW9uLCBKMkVFIHZhbGlkYXRvcnMsIGNvZGUgdmFsaWRhdGlvbiIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InZhbGlkYXRpb24sIEoyRUUgdmFsaWRhdG9ycywgY29kZSB2YWxpZGF0aW9uIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J2YWxlcnIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icnZhbGlkYXRvcnMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5KMkVFIFZhbGlkYXRvcnM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InJ2YWxpZGF0b3JzIj48YSBuYW1lPSJydmFsaWRhdG9ycyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+SjJFRSBWYWxpZGF0b3JzPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3JlZmJvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoaXMgdGFibGUgbGlzdHMgdGhlIHZhbGlkYXRvcnMgdGhhdAotYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGRpZmZlcmVudCBwcm9qZWN0IHR5cGVzIGFuZCBnaXZlcyBhIGJyaWVmIGRlc2NyaXB0aW9uCi1vZiBlYWNoIHZhbGlkYXRvci48L3A+Ci0KLTxkaXYgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLQotCi08ZGl2IGNsYXNzPSJ0YWJsZW5vYm9yZGVyIj48dGFibGUgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiIGZyYW1lPSJib3JkZXIiIGJvcmRlcj0iMSIgcnVsZXM9ImFsbCI+Ci0KLTx0aGVhZCBhbGlnbj0ibGVmdCI+Ci08dHIgY2xhc3M9ImlkX3RvcHJvdyI+Ci08dGggdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGlkPSJOMTAwNzMiPlZhbGlkYXRvciBuYW1lPC90aD4KLQotPHRoIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBpZD0iTjEwMDdBIj5EZXNjcmlwdGlvbjwvdGg+Ci0KLTwvdHI+Ci0KLTwvdGhlYWQ+Ci0KLTx0Ym9keT4KLTx0ciBjbGFzcz0iaWRfYXBwY2xpZW50VmFsaWRhdG9yIj4KLTx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3MyAiPkFwcGxpY2F0aW9uIENsaWVudCBWYWxpZGF0b3I8L3RkPgotCi08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwN0EgIj5UaGUgQXBwbGljYXRpb24gQ2xpZW50IFZhbGlkYXRvciB2YWxpZGF0ZXMKLXRoZSBmb2xsb3dpbmcgQXBwbGljYXRpb24gQ2xpZW50IHByb2plY3QgcmVzb3VyY2VzOiAgIDx1bD4KLTxsaT5EZXBsb3ltZW50IGRlc2NyaXB0b3IgKGFwcGxpY2F0aW9uLWNsaWVudC54bWwpPC9saT4KLQotPGxpPkVKQiByZWZlcmVuY2VzPC9saT4KLQotPGxpPlJlc291cmNlIHJlZmVyZW5jZXM8L2xpPgotCi08L3VsPgotPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9jb25uZWN0b3JWYWxpZGF0b3IiPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwNzMgIj5Db25uZWN0b3IgVmFsaWRhdG9yPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwN0EgIj5UaGUgQ29ubmVjdG9yIHZhbGlkYXRvciBjaGVja3MgZm9yIGludmFsaWQgSjJFRSBzcGVjaWZpY2F0aW9uCi1sZXZlbHMgaW4gY29ubmVjdG9yIHByb2plY3RzLjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfRFREVmFsaWRhdG9yIj4KLTx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3MyAiPkRURCBWYWxpZGF0b3I8L3RkPgotCi08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwN0EgIj5UaGUgRFREIHZhbGlkYXRvciBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlCi1jdXJyZW50IHN0YXRlIG9mIGEgRFREIGlzIHNlbWFudGljYWxseSB2YWxpZC4gWE1MIGZpbGVzIGFyZSB2YWxpZGF0ZWQgYWNjb3JkaW5nCi10byB0aGUgWE1MIHNwZWNpZmljYXRpb24gPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMteG1sLTIwMDAxMDA2IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IiI+RXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UgKFhNTCkgMS4wPC9hPiBmcm9tCi10aGUgVzNDIFdlYiBzaXRlLiBBcyB3ZWxsLCB0aGUgRFREIHZhbGlkYXRvciBjaGVja3MgZm9yIGVycm9ycyBzdWNoIGFzIHJlZmVyZW5jZXMKLXRvIGVudGl0aWVzIGFuZCBlbGVtZW50cyB0aGF0IGRvIG5vdCBleGlzdC48L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX0VBUlZhbGlkYXRvciI+Ci08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwNzMgIj5FQVIgVmFsaWRhdG9yPC90ZD4KLQotPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDdBICI+VGhlIEVBUiBWYWxpZGF0b3IgdmFsaWRhdGVzIHRoZSBmb2xsb3dpbmc6Ci0gPHVsPgotPGxpPkVBUiBkZXBsb3ltZW50IGRlc2NyaXB0b3IgKGFwcGxpY2F0aW9uLnhtbCk8L2xpPgotCi08bGk+RUpCIHJlZmVyZW5jZXMgb2YgYWxsIG1vZHVsZSBwcm9qZWN0cyBpbiB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0PC9saT4KLQotPGxpPlNlY3VyaXR5IHJvbGVzPC9saT4KLQotPGxpPlJlc291cmNlIHJlZmVyZW5jZXM8L2xpPgotCi08bGk+TWFuaWZlc3QgZmlsZXMgZm9yIGFsbCBjb250YWluZWQgb3IgcmVmZXJlbmNlZCBtb2R1bGVzIGFuZCB1dGlsaXR5IEpBUgotZmlsZXM8L2xpPgotCi08bGk+VGFyZ2V0IHNlcnZlciBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYW5kCi1hbnkgdXRpbGl0eSBhbmQgbW9kdWxlIHByb2plY3RzPC9saT4KLQotPGxpPkV4aXN0ZW5jZSBvZiBwcm9qZWN0cyBmb3IgZWFjaCBtb2R1bGUgZGVmaW5lZCBpbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uPC9saT4KLQotPC91bD4KLSAgPHA+Tm90ZSB0aGF0IHRoZSBFQVIgVmFsaWRhdG9yIG9ubHkgZW5zdXJlcyB0aGUgdmFsaWRpdHkgYW5kIGRlcGVuZGVuY3kKLW9mIHRoZSBtb2R1bGUgcHJvamVjdHMgd2l0aCByZXNwZWN0IHRvIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QuPC9wPgotPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9FSkJWYWxpZGF0b3IiPgotPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDczICI+RUpCIFZhbGlkYXRvcjwvdGQ+Ci0KLTx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3QSAiPlRoZSBFSkIgVmFsaWRhdG9yIHZlcmlmaWVzIHRoYXQgZW50ZXJwcmlzZQotYmVhbnMgY29udGFpbmVkIGluIGFuIEVKQiBwcm9qZWN0IGNvbXBseSB3aXRoIHRoZSBTdW4gRW50ZXJwcmlzZSBKYXZhQmVhbnPihKIgU3BlY2lmaWNhdGlvbnMKLSgxLjEsIDIuMCwgYW5kIDIuMSksIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgdGhlIGJlYW4uIENvZGUgdmFsaWRhdGlvbiBmb3IKLXRoZSBFSkIgMS4wIHNwZWNpZmljYXRpb24gaXMgbm90IHN1cHBvcnRlZC4gU3BlY2lmaWNhbGx5LCB0aGUgRUpCIFZhbGlkYXRvcgotdmFsaWRhdGVzIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzOiA8dWw+Ci08bGk+SmF2YeKEoiAuY2xhc3MKLWZpbGVzIHRoYXQgYXJlIG1lbWJlcnMgb2YgYW4gZW50ZXJwcmlzZSBiZWFuIChob21lIGludGVyZmFjZSwgcmVtb3RlIGludGVyZmFjZSwKLWVudGVycHJpc2UgYmVhbiBjbGFzcywgYW5kLCBpZiB0aGUgYmVhbiBpcyBhbiBlbnRpdHkgYmVhbiwgdGhlIGtleSBjbGFzcyk8L2xpPgotCi08bGk+ZWpiLWphci54bWw8L2xpPgotCi08L3VsPgotPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9FTFZhbGlkYXRvciI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3MyAiPkVMIFN5bnRheCBWYWxpZGF0b3I8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3QSAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfSFRNTFZhbGlkYXRvciI+Ci08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwNzMgIj5IVE1MIFN5bnRheCBWYWxpZGF0b3I8L3RkPgotCi08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwN0EgIj5UaGUgSFRNTCBTeW50YXggVmFsaWRhdG9yIHZhbGlkYXRlcyBIVE1MCi1iYXNpYyBzeW50YXggYW5kIEhUTUwgRFREIGNvbXBsaWFuY2UgaW4gdGhlIGZvbGxvd2luZyBXZWIgcHJvamVjdCByZXNvdXJjZXM6Ci0gPHVsPgotPGxpPkhUTUwgZmlsZXM8L2xpPgotCi08bGk+SlNQIGZpbGVzPC9saT4KLQotPC91bD4KLTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0ciBjbGFzcz0iaWRfSlNQVmFsaWRhdG9yIj4KLTx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3MyAiPkpTUCBTeW50YXggVmFsaWRhdG9yPC90ZD4KLQotPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDdBICI+VGhlIEpTUCBTeW50YXggVmFsaWRhdG9yIHZhbGlkYXRlcyBKU1AgZmlsZXMKLWluIGEgcHJvamVjdCBieSB0cmFuc2xhdGluZyB0aGVtIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgSmF2YSBjb2RlCi1hbmQgdGhlbiBjaGVja2luZyB0aGUgSmF2YSBjb2RlIGZvciBjb21waWxlIGVycm9ycy48L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX1dBUlZhbGlkYXRvciI+Ci08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwNzMgIj5XYXIgVmFsaWRhdG9yPC90ZD4KLQotPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDdBICI+VGhlIFdhciBWYWxpZGF0b3IgdmFsaWRhdGVzIHRoZSBmb2xsb3dpbmcKLXdlYiBwcm9qZWN0IHJlc291cmNlczogICA8dWw+Ci08bGk+RGVwbG95bWVudCBkZXNjcmlwdG9yICh3ZWIueG1sKTwvbGk+Ci0KLTxsaT5TZXJ2bGV0czwvbGk+Ci0KLTxsaT5TZWN1cml0eSByb2xlczwvbGk+Ci0KLTxsaT5TZXJ2bGV0ICZhbXA7IHNlcnZsZXQgbWFwcGluZ3M8L2xpPgotCi08bGk+RUpCIHJlZmVyZW5jZXM8L2xpPgotCi08L3VsPgotPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9XU0RMVmFsaWRhdG9yIj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDczICI+V1NETCBWYWxpZGF0b3I8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3QSAiPlRoZSBXU0RMIHZhbGlkYXRvciBjaGVja3MgdGhlIGZvbGxvd2luZyBpbiBXU0RMIGZpbGVzOiA8dWw+Ci08bGk+WE1MIHN5bnRheDwvbGk+Ci0KLTxsaT5YTUwgU2NoZW1hIHR5cGVzIGluIHRoZSAmbHQ7dHlwZXMmZ3Q7IHNlY3Rpb248L2xpPgotCi08bGk+UmVmZXJlbnRpYWwgaW50ZWdyaXR5IG9mIHRoZSB2YXJpb3VzIGNvbnN0cnVjdHMgaW4gV1NETCA8L2xpPgotCi08L3VsPgotVGhlIHZhbGlkYXRvciBhbHNvIGluY2x1ZGVzIGFuIGV4dGVuc2lvbiBwb2ludCB0byBhbGxvdyBvdGhlciB2YWxpZGF0b3JzCi10byBiZSBwbHVnZ2VkIGludG8gdGhlIFdTREwgdmFsaWRhdGlvbiB0byBwcm92aWRlIGFkZGl0aW9uYWwgdmVyaWZpY2F0aW9uCi1vZiB0aGUgV1NETCBmaWxlLiBUaHJvdWdoIHRoaXMgbWVjaGFuaXNtLCBpbnRlcm9wZXJhYmlsaXR5IGlzIGNoZWNrZWQgYnkgdmFsaWRhdGluZwotYSBXU0RMIGZpbGUgYWdhaW5zdCBXUy1JIFByb2ZpbGVzLiA8L3RkPgotCi08L3RyPgotCi08dHIgY2xhc3M9ImlkX1dTSVZhbGlkYXRvciI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3MyAiPldTLUkgTWVzc2FnZSBWYWxpZGF0b3I8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3QSAiPldTLUkgTWVzc2FnZSB2YWxpZGF0b3IgY2hlY2tzIFNPQVAgbWVzc2FnZXMgYWdhaW5zdAotV1MtSSBQcm9maWxlcy4gQSB1c2VyIGNhbiBjYXB0dXJlIGFuZCB2ZXJpZnkgU09BUCBtZXNzYWdlcyB1c2luZyB0aGUgVENQL0lQCi1Nb25pdG9yLiBUaGUgdmFsaWRhdG9yIGNoZWNrcyBhIG1lc3NhZ2UgbG9nIHRoYXQgaXMgc2F2ZWQgYXMgYSBwcm9qZWN0IHJlc291cmNlCi0oLndzaW1zZykuIFRoZSBsb2cgY29uZm9ybXMgdG8gYSBmb3JtYXQgYXMgc3BlY2lmaWVkIGJ5IFdTLUkuPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9YTUxTY2hlbWFWYWxpZGF0b3IiPgotPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDczICI+WE1MIFNjaGVtYSBWYWxpZGF0b3I8L3RkPgotCi08dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBoZWFkZXJzPSJOMTAwN0EgIj5UaGUgWE1MIHNjaGVtYSB2YWxpZGF0b3IgZGV0ZXJtaW5lcyB3aGV0aGVyCi10aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBYTUwgc2NoZW1hIGZpbGUgaXMgc2VtYW50aWNhbGx5IHZhbGlkLiBYTUwgc2NoZW1hcwotYXJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8iIHRpdGxlPSIiPlhNTCBTY2hlbWEgUGFydCAxOiBTdHJ1Y3R1cmVzPC9hPiBmcm9tIHRoZSBXM0MgV2ViIHNpdGUuPC90ZD4KLQotPC90cj4KLQotPHRyIGNsYXNzPSJpZF9YTUxWYWxpZGF0b3IiPgotPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgaGVhZGVycz0iTjEwMDczICI+WE1MIFZhbGlkYXRvcjwvdGQ+Ci0KLTx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGhlYWRlcnM9Ik4xMDA3QSAiPlRoZSBYTUwgdmFsaWRhdG9yIGVuc3VyZXMgdGhhdCBhbiBYTUwgZmlsZQotaXMgd2VsbC1mb3JtZWQuIEl0IGFsc28gdmVyaWZpZXMgaWYgYW4gWE1MIGZpbGUgaXMgdmFsaWQgLSB0aGF0IGlzLCBpdCBmb2xsb3dzCi10aGUgY29uc3RyYWludHMgZXN0YWJsaXNoZWQgaW4gdGhlIERURCBvciBYTUwgc2NoZW1hIHRoZSBYTUwgZmlsZSBpcyBhc3NvY2lhdGVkCi13aXRoLjwvdGQ+Ci0KLTwvdHI+Ci0KLTwvdGJvZHk+Ci0KLTwvdGFibGU+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbC5odG1sIiB0aXRsZT0iVGhlIHdvcmtiZW5jaCBpbmNsdWRlcyB2YWxpZGF0b3JzIHRoYXQgY2hlY2sgY2VydGFpbiBmaWxlcyBpbiB5b3VyIGVudGVycHJpc2UgYXBwbGljYXRpb24gbW9kdWxlIHByb2plY3RzIGZvciBlcnJvcnMuIj5WYWxpZGF0aW5nIGNvZGUgaW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHJlZiI+PHN0cm9uZz5SZWxhdGVkIHJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvcnZhbGVyci5odG1sIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgY29tbW9uIGVycm9yIG1lc3NhZ2VzIHlvdSBtYXkgZW5jb3VudGVyIHdoZW4geW91IHZhbGlkYXRlIHlvdXIgcHJvamVjdHMuIj5Db21tb24gdmFsaWRhdGlvbiBlcnJvcnMgYW5kIHNvbHV0aW9uczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90YWRkaW5nZmFjZXQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RhZGRpbmdmYWNldC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWRhNDlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RhZGRpbmdmYWNldC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAidGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0YWRkaW5nZmFjZXQiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+QWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3Q8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+VGhpcyB0b3BpYyBleHBsYWlucyBob3cgdG8gYWRkIGEgZmFjZXQNCi10byBhbiBleGlzdGluZyBwcm9qZWN0IGluIHlvdXIgd29ya3NwYWNlLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPnByb2plY3RzPGluZGV4dGVybT5mYWNldHM8aW5kZXh0ZXJtPmFkZGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+SmF2YSBFRTxpbmRleHRlcm0+YWRkaW5nIHByb2plY3QgZmFjZXRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keSBvdXRwdXRjbGFzcz0iaWRfdGFza2JvZHkiPg0KLTxjb250ZXh0IG91dHB1dGNsYXNzPSJpZF9jb250ZXh0Ij48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+PHANCi1jb25yZWY9ImNmYWNldHMuZGl0YSNjZmFjZXRzL2Fib3V0ZmFjZXQiPjwvcD4gPHA+TmV3IHByb2plY3RzIGdlbmVyYWxseSBoYXZlDQotZmFjZXRzIGFkZGVkIHRvIHRoZW0gd2hlbiB0aGV5IGFyZSBjcmVhdGVkLiBUbyBhZGQgYW5vdGhlciBmYWNldCB0byBhIHByb2plY3QNCi10aGF0IGFscmVhZHkgZXhpc3RzLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IG9mIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSBwZXJzcGVjdGl2ZSwgcmlnaHQtY2xpY2sgdGhlIHByb2plY3QNCi1hbmQgdGhlbiBzZWxlY3QgPHVpY29udHJvbD5Qcm9wZXJ0aWVzPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5Qcm9qZWN0IEZhY2V0czwvdWljb250cm9sPiBwYWdlIGluIHRoZSBpbg0KLXRoZSBQcm9wZXJ0aWVzIHdpbmRvdy48L2NtZD48aW5mbz5UaGlzIHBhZ2UgbGlzdHMgdGhlIGZhY2V0cyBpbiB0aGUgcHJvamVjdA0KLWFuZCB0aGVpciB2ZXJzaW9ucy48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5Nb2RpZnkgUHJvamVjdDwvdWljb250cm9sPiBhbmQgc2VsZWN0IHRoZSBjaGVjaw0KLWJveGVzIG5leHQgdG8gdGhlIGZhY2V0cyB5b3Ugd2FudCB0aGUgcHJvamVjdCB0byBoYXZlLjwvY21kPjxpbmZvPjxwPk9ubHkNCi10aGUgZmFjZXRzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgcHJvamVjdCBhcmUgbGlzdGVkOjx1bD4NCi08bGk+VGhlIGxpc3Qgb2YgcnVudGltZXMgc2VsZWN0ZWQgZm9yIHRoZSBwcm9qZWN0IGxpbWl0cyB0aGUgZmFjZXRzIHNob3duDQotaW4gdGhlIGxpc3QuIE9ubHkgdGhlIGZhY2V0cyBjb21wYXRpYmxlIHdpdGggYWxsIHNlbGVjdGVkIHRhcmdldCBydW50aW1lcw0KLWFyZSBzaG93bi48L2xpPg0KLTxsaT5UaGUgY3VycmVudGx5IHNlbGVjdGVkIGZhY2V0cyBhbmQgdGhlaXIgdmVyc2lvbiBudW1iZXJzIGxpbWl0IHRoZSBvdGhlcg0KLWZhY2V0cyBzaG93biBpbiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcm9qZWN0IGNvbnRhaW5zIHRoZSBEeW5hbWljDQotV2ViIE1vZHVsZSBmYWNldCwgdGhlIEVKQiBNb2R1bGUgZmFjZXQgaXMgbm90IGxpc3RlZCBiZWNhdXNlIHRoZXNlIHR3byBmYWNldHMNCi1jYW5ub3QgYmUgaW4gdGhlIHNhbWUgcHJvamVjdC48L2xpPg0KLTwvdWw+WW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgYW5kIGxpbWl0YXRpb25zIGZvciBlYWNoDQotZmFjZXQgYnkgcmlnaHQtY2xpY2tpbmcgdGhlIGZhY2V0IG5hbWUgYW5kIHRoZW4gY2xpY2tpbmcgPHVpY29udHJvbD5TaG93IENvbnN0cmFpbnRzPC91aWNvbnRyb2w+LjwvcD48cD5Zb3UNCi1jYW4gYWxzbyBjaG9vc2UgYSBwcmVzZXQgY29tYmluYXRpb24gb2YgZmFjZXRzIGZyb20gdGhlIDx1aWNvbnRyb2w+UHJlc2V0czwvdWljb250cm9sPiBsaXN0LjwvcD48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2hvb3NlIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBmYWNldCBieSBjbGlja2luZyB0aGUgY3VycmVudCB2ZXJzaW9uDQotbnVtYmVyIGFuZCBzZWxlY3RpbmcgdGhlIHZlcnNpb24gbnVtYmVyIHlvdSB3YW50IGZyb20gdGhlIGRyb3AtZG93biBsaXN0LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5UbyByZW1vdmUgYSBmYWNldCwgY2xlYXIgaXRzIGNoZWNrIGJveC48L2NtZD4NCi08aW5mbz5Ob3QgYWxsIGZhY2V0cyBjYW4gYmUgcmVtb3ZlZC48L2luZm8+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPklmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBwcm9qZWN0IHNvIGl0IHdpbGwNCi1iZSBjb21wYXRpYmxlIHdpdGggb25lIG9yIG1vcmUgcnVudGltZXMsIGNsaWNrIG9uIHRoZSBSdW50aW1lcyB0YWIgYW5kIHNlbGVjdA0KLXRoZSBydW50aW1lcyB0aGF0IHlvdSB3YW50IHRoZSBwcm9qZWN0IHRvIGJlIGNvbXBhdGlibGUgd2l0aC48L2NtZD48aW5mbz5Gb3INCi1tb3JlIGluZm9ybWF0aW9uIG9uIHJ1bnRpbWVzLCBzZWUgPHhyZWYgaHJlZj0idGp0YXJnZXRzZXJ2ZXIuZGl0YSI+PC94cmVmPi48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4gdG8gZXhpdCB0aGUgTW9kaWZ5IEZhY2V0ZWQNCi1Qcm9qZWN0IGRpYWxvZyBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxwb3N0cmVxIG91dHB1dGNsYXNzPSJpZF9wb3N0cmVxIj48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+PC9wb3N0cmVxPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RhZGRpbmdmYWNldC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGFkZGluZ2ZhY2V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTNkMTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGFkZGluZ2ZhY2V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3QiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyB0b3BpYyBleHBsYWlucyBob3cgdG8gYWRkIGEgZmFjZXQgdG8gYW4gZXhpc3RpbmcgcHJvamVjdCBpbiB5b3VyIHdvcmtzcGFjZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyB0b3BpYyBleHBsYWlucyBob3cgdG8gYWRkIGEgZmFjZXQgdG8gYW4gZXhpc3RpbmcgcHJvamVjdCBpbiB5b3VyIHdvcmtzcGFjZS4iIC8+Ci08bWV0YSBjb250ZW50PSJwcm9qZWN0cywgZmFjZXRzLCBhZGRpbmcsIEphdmEgRUUsIGFkZGluZyBwcm9qZWN0IGZhY2V0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InByb2plY3RzLCBmYWNldHMsIGFkZGluZywgSmF2YSBFRSwgYWRkaW5nIHByb2plY3QgZmFjZXRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RjaGFuZ2VmYWNldC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRpbmdmYWNldCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIGZhY2V0IHRvIGEgSmF2YSBFRSBwcm9qZWN0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YWRkaW5nZmFjZXQiPjxhIG5hbWU9InRhZGRpbmdmYWNldCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+QWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3Q8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfdGFza2JvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoaXMgdG9waWMgZXhwbGFpbnMgaG93IHRvIGFkZCBhIGZhY2V0Ci10byBhbiBleGlzdGluZyBwcm9qZWN0IGluIHlvdXIgd29ya3NwYWNlLjwvcD4KLQotPGRpdiBjbGFzcz0iaWRfY29udGV4dCI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLTxwPldoZW4geW91IGFkZCBhIGZhY2V0IHRvIGEgcHJvamVjdCwgdGhhdCBwcm9qZWN0IGlzIGNvbmZpZ3VyZWQKLXRvIHBlcmZvcm0gYSBjZXJ0YWluIHRhc2ssIGZ1bGZpbGwgY2VydGFpbiByZXF1aXJlbWVudHMsIG9yIGhhdmUgY2VydGFpbiBjaGFyYWN0ZXJpc3RpY3MuCi1Gb3IgZXhhbXBsZSwgdGhlIEVBUiBmYWNldCBzZXRzIHVwIGEgcHJvamVjdCB0byBmdW5jdGlvbiBhcyBhbiBlbnRlcnByaXNlCi1hcHBsaWNhdGlvbiBieSBhZGRpbmcgYSBkZXBsb3ltZW50IGRlc2NyaXB0b3IgYW5kIHNldHRpbmcgdXAgdGhlIHByb2plY3QncwotY2xhc3NwYXRoLjwvcD4KLSA8cD5OZXcgcHJvamVjdHMgZ2VuZXJhbGx5IGhhdmUKLWZhY2V0cyBhZGRlZCB0byB0aGVtIHdoZW4gdGhleSBhcmUgY3JlYXRlZC4gVG8gYWRkIGFub3RoZXIgZmFjZXQgdG8gYSBwcm9qZWN0Ci10aGF0IGFscmVhZHkgZXhpc3RzLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyBvZiB0aGUgSmF2YeKEoiBFRSBwZXJzcGVjdGl2ZSwgcmlnaHQtY2xpY2sgdGhlIHByb2plY3QKLWFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9wZXJ0aWVzPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByb2plY3QgRmFjZXRzPC9zcGFuPiBwYWdlIGluIHRoZSBpbgotdGhlIFByb3BlcnRpZXMgd2luZG93Ljwvc3Bhbj4gVGhpcyBwYWdlIGxpc3RzIHRoZSBmYWNldHMgaW4gdGhlIHByb2plY3QKLWFuZCB0aGVpciB2ZXJzaW9ucy48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk1vZGlmeSBQcm9qZWN0PC9zcGFuPiBhbmQgc2VsZWN0IHRoZSBjaGVjawotYm94ZXMgbmV4dCB0byB0aGUgZmFjZXRzIHlvdSB3YW50IHRoZSBwcm9qZWN0IHRvIGhhdmUuPC9zcGFuPiA8ZGl2IGNsYXNzPSJwIj5Pbmx5Ci10aGUgZmFjZXRzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgcHJvamVjdCBhcmUgbGlzdGVkOjx1bD4KLTxsaT5UaGUgbGlzdCBvZiBydW50aW1lcyBzZWxlY3RlZCBmb3IgdGhlIHByb2plY3QgbGltaXRzIHRoZSBmYWNldHMgc2hvd24KLWluIHRoZSBsaXN0LiBPbmx5IHRoZSBmYWNldHMgY29tcGF0aWJsZSB3aXRoIGFsbCBzZWxlY3RlZCB0YXJnZXQgcnVudGltZXMKLWFyZSBzaG93bi48L2xpPgotCi08bGk+VGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmYWNldHMgYW5kIHRoZWlyIHZlcnNpb24gbnVtYmVycyBsaW1pdCB0aGUgb3RoZXIKLWZhY2V0cyBzaG93biBpbiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcm9qZWN0IGNvbnRhaW5zIHRoZSBEeW5hbWljCi1XZWIgTW9kdWxlIGZhY2V0LCB0aGUgRUpCIE1vZHVsZSBmYWNldCBpcyBub3QgbGlzdGVkIGJlY2F1c2UgdGhlc2UgdHdvIGZhY2V0cwotY2Fubm90IGJlIGluIHRoZSBzYW1lIHByb2plY3QuPC9saT4KLQotPC91bD4KLVlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGFuZCBsaW1pdGF0aW9ucyBmb3IgZWFjaAotZmFjZXQgYnkgcmlnaHQtY2xpY2tpbmcgdGhlIGZhY2V0IG5hbWUgYW5kIHRoZW4gY2xpY2tpbmcgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2hvdyBDb25zdHJhaW50czwvc3Bhbj4uPC9kaXY+Ci08cD5Zb3UKLWNhbiBhbHNvIGNob29zZSBhIHByZXNldCBjb21iaW5hdGlvbiBvZiBmYWNldHMgZnJvbSB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlc2V0czwvc3Bhbj4gbGlzdC48L3A+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2hvb3NlIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBmYWNldCBieSBjbGlja2luZyB0aGUgY3VycmVudCB2ZXJzaW9uCi1udW1iZXIgYW5kIHNlbGVjdGluZyB0aGUgdmVyc2lvbiBudW1iZXIgeW91IHdhbnQgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QuPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5UbyByZW1vdmUgYSBmYWNldCwgY2xlYXIgaXRzIGNoZWNrIGJveC48L3NwYW4+Ci0gTm90IGFsbCBmYWNldHMgY2FuIGJlIHJlbW92ZWQuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5JZiB5b3Ugd2FudCB0byBsaW1pdCB0aGUgcHJvamVjdCBzbyBpdCB3aWxsCi1iZSBjb21wYXRpYmxlIHdpdGggb25lIG9yIG1vcmUgcnVudGltZXMsIGNsaWNrIG9uIHRoZSBSdW50aW1lcyB0YWIgYW5kIHNlbGVjdAotdGhlIHJ1bnRpbWVzIHRoYXQgeW91IHdhbnQgdGhlIHByb2plY3QgdG8gYmUgY29tcGF0aWJsZSB3aXRoLjwvc3Bhbj4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIHJ1bnRpbWVzLCBzZWUgPGEgaHJlZj0idGp0YXJnZXRzZXJ2ZXIuaHRtbCIgdGl0bGU9IldoZW4geW91IGRldmVsb3AgSjJFRSBhcHBsaWNhdGlvbnMsJiMxMDt5b3UgY2FuIHNwZWNpZnkgdGhlIHNlcnZlciBydW50aW1lIGVudmlyb25tZW50cyBmb3IgeW91ciBKMkVFIHByb2plY3RzLiBUaGUmIzEwO3RhcmdldCBzZXJ2ZXIgaXMgc3BlY2lmaWVkIGR1cmluZyBwcm9qZWN0IGNyZWF0aW9uIGFuZCBpbXBvcnQsIGFuZCBpdCBjYW4mIzEwO2JlIGNoYW5nZWQgaW4gdGhlIHByb2plY3QgcHJvcGVydGllcy4gVGhlIHRhcmdldCBzZXJ2ZXIgc2V0dGluZyBpcyB0aGUgZGVmYXVsdCYjMTA7bWVjaGFuaXNtIGZvciBzZXR0aW5nIHRoZSBjbGFzcyBwYXRoIGZvciBKMkVFIHByb2plY3RzLiI+U3BlY2lmeWluZyB0YXJnZXQgc2VydmVycyBmb3IgSjJFRSBwcm9qZWN0czwvYT4uCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4gdG8gZXhpdCB0aGUgTW9kaWZ5IEZhY2V0ZWQKLVByb2plY3QgZGlhbG9nIGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0iaWRfcG9zdHJlcSI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWxjb25jZXB0cyI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9jZmFjZXRzLmh0bWwiIHRpdGxlPSJGYWNldHMgZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzIGZvciBKYXZhIEVFIHByb2plY3RzIGFuZCBhcmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb24uIj5Qcm9qZWN0IGZhY2V0czwvYT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGNoYW5nZWphdmFsZXZlbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjaGFuZ2UgdGhlIHZlcnNpb24gb2YgSmF2YSB1c2VkIGluIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgSmF2YSBmYWNldC4iPkNoYW5naW5nIHRoZSBKYXZhIGNvbXBpbGVyIHZlcnNpb24gZm9yIGEgSmF2YSBFRSBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGNoYW5nZWZhY2V0Lmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0IGluIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGVkaXRpbmcgdGhlIGZhY2V0cyBmb3IgdGhlIHByb2plY3QuIj5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0PC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RjaGFuZ2VmYWNldC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGNoYW5nZWZhY2V0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjI0NGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGNoYW5nZWZhY2V0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRjaGFuZ2VmYWNldCIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0PC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gY2hhbmdlIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQNCi1pbiBhIEphdmEgRUUgcHJvamVjdCBieSBlZGl0aW5nIHRoZSBmYWNldHMgZm9yIHRoZSBwcm9qZWN0Ljwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmZhY2V0czxpbmRleHRlcm0+Y2hhbmdpbmcgdmVyc2lvbnM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPkphdmEgRUU8aW5kZXh0ZXJtPmNoYW5naW5nIGZhY2V0IHZlcnNpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5wcm9qZWN0czxpbmRleHRlcm0+Y2hhbmdpbmcgZmFjZXQgdmVyc2lvbnM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+Q2hhbmdpbmcNCi10aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNvbXBpbGVyDQotdmVyc2lvbiBvZiBhIEphdmEgRUUgcHJvamVjdCBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgPHVpY29udHJvbD5KYXZhPC91aWNvbnRyb2w+IGZhY2V0Lg0KLUZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPHhyZWYgaHJlZj0idGNoYW5nZWphdmFsZXZlbC5kaXRhIj48L3hyZWY+LjwvcD48cD5Ubw0KLWNoYW5nZSB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0IGluIHlvdXIgcHJvamVjdCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyBvZiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgcGVyc3BlY3RpdmUsIHJpZ2h0LWNsaWNrIHRoZSBwcm9qZWN0DQotYW5kIHRoZW4gc2VsZWN0IDx1aWNvbnRyb2w+UHJvcGVydGllczwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIDx1aWNvbnRyb2w+UHJvamVjdCBGYWNldHM8L3VpY29udHJvbD4gcGFnZSBpbiB0aGUgaW4NCi10aGUgUHJvcGVydGllcyB3aW5kb3cuPC9jbWQ+PGluZm8+IFRoaXMgcGFnZSBsaXN0cyB0aGUgZmFjZXRzIGluIHRoZSBwcm9qZWN0DQotYW5kIHRoZWlyIHZlcnNpb25zLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPk1vZGlmeSBQcm9qZWN0PC91aWNvbnRyb2w+IGFuZCBjbGljayB0aGUgZmFjZXQNCi15b3Ugd2FudCB0byBjaGFuZ2UuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSB2ZXJzaW9uIG9mIHRoZSBmYWNldCBmcm9tIHRoZSBkcm9wLWRvd24gYm94IG5leHQgdG8NCi10aGUgZmFjZXQncyBuYW1lLjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+IHRvIGNsb3NlIHRoZSBNb2RpZnkgRmFjZXRlZA0KLVByb2plY3Qgd2luZG93IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGNoYW5nZWZhY2V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90Y2hhbmdlZmFjZXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5NjIzMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90Y2hhbmdlZmFjZXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNoYW5naW5nIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBjaGFuZ2UgdGhlIHZlcnNpb24gb2YgYSBmYWNldCBpbiBhIEphdmEgRUUgcHJvamVjdCBieSBlZGl0aW5nIHRoZSBmYWNldHMgZm9yIHRoZSBwcm9qZWN0LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0IGluIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGVkaXRpbmcgdGhlIGZhY2V0cyBmb3IgdGhlIHByb2plY3QuIiAvPgotPG1ldGEgY29udGVudD0iZmFjZXRzLCBjaGFuZ2luZyB2ZXJzaW9ucywgSmF2YSBFRSwgY2hhbmdpbmcgZmFjZXQgdmVyc2lvbnMsIHByb2plY3RzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iZmFjZXRzLCBjaGFuZ2luZyB2ZXJzaW9ucywgSmF2YSBFRSwgY2hhbmdpbmcgZmFjZXQgdmVyc2lvbnMsIHByb2plY3RzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RhZGRpbmdmYWNldC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGNoYW5nZWphdmFsZXZlbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjaGFuZ2VmYWNldCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNoYW5naW5nIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjaGFuZ2VmYWNldCI+PGEgbmFtZT0idGNoYW5nZWZhY2V0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0PC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBhIGZhY2V0Ci1pbiBhIEphdmEgRUUgcHJvamVjdCBieSBlZGl0aW5nIHRoZSBmYWNldHMgZm9yIHRoZSBwcm9qZWN0LjwvcD4KLQotPGRpdiBjbGFzcz0iaWRfY29udGV4dCI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLSA8cD5DaGFuZ2luZwotdGhlIEphdmHihKIgY29tcGlsZXIKLXZlcnNpb24gb2YgYSBKYXZhIEVFIHByb2plY3QgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIHZlcnNpb24gb2YgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkphdmE8L3NwYW4+IGZhY2V0LgotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSJ0Y2hhbmdlamF2YWxldmVsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBKYXZhIHVzZWQmIzEwO2luIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgSmF2YSBmYWNldC4iPkNoYW5naW5nIHRoZSBKYXZhIGNvbXBpbGVyIHZlcnNpb24gZm9yIGEgSmF2YSBFRSBwcm9qZWN0PC9hPi48L3A+Ci08cD5UbwotY2hhbmdlIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQgaW4geW91ciBwcm9qZWN0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldyBvZiB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSwgcmlnaHQtY2xpY2sgdGhlIHByb2plY3QKLWFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9wZXJ0aWVzPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByb2plY3QgRmFjZXRzPC9zcGFuPiBwYWdlIGluIHRoZSBpbgotdGhlIFByb3BlcnRpZXMgd2luZG93Ljwvc3Bhbj4gIFRoaXMgcGFnZSBsaXN0cyB0aGUgZmFjZXRzIGluIHRoZSBwcm9qZWN0Ci1hbmQgdGhlaXIgdmVyc2lvbnMuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Nb2RpZnkgUHJvamVjdDwvc3Bhbj4gYW5kIGNsaWNrIHRoZSBmYWNldAoteW91IHdhbnQgdG8gY2hhbmdlLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgdmVyc2lvbiBvZiB0aGUgZmFjZXQgZnJvbSB0aGUgZHJvcC1kb3duIGJveCBuZXh0IHRvCi10aGUgZmFjZXQncyBuYW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4gdG8gY2xvc2UgdGhlIE1vZGlmeSBGYWNldGVkCi1Qcm9qZWN0IHdpbmRvdyBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsY29uY2VwdHMiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiB0aXRsZT0iRmFjZXRzIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cyBmb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiI+UHJvamVjdCBmYWNldHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RhZGRpbmdmYWNldC5odG1sIiB0aXRsZT0iVGhpcyB0b3BpYyBleHBsYWlucyBob3cgdG8gYWRkIGEgZmFjZXQgdG8gYW4gZXhpc3RpbmcgcHJvamVjdCBpbiB5b3VyIHdvcmtzcGFjZS4iPkFkZGluZyBhIGZhY2V0IHRvIGEgSmF2YSBFRSBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGNoYW5nZWphdmFsZXZlbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjaGFuZ2UgdGhlIHZlcnNpb24gb2YgSmF2YSB1c2VkIGluIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgSmF2YSBmYWNldC4iPkNoYW5naW5nIHRoZSBKYXZhIGNvbXBpbGVyIHZlcnNpb24gZm9yIGEgSmF2YSBFRSBwcm9qZWN0PC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg1ZTk5ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90Y2hhbmdlamF2YWxldmVsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRjaGFuZ2VqYXZhbGV2ZWwiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+Q2hhbmdpbmcgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNvbXBpbGVyIHZlcnNpb24gZm9yIGEgSmF2YSBFRSBwcm9qZWN0PC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gY2hhbmdlIHRoZSB2ZXJzaW9uIG9mIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHVzZWQNCi1pbiBhIEphdmEgRUUgcHJvamVjdCBieSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIDx1aWNvbnRyb2w+SmF2YTwvdWljb250cm9sPiBmYWNldC48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5KYXZhIEVFPGluZGV4dGVybT5wcm9qZWN0IGNvbXBpbGVyIGxldmVsPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5wcm9qZWN0czxpbmRleHRlcm0+SmF2YSBjb21waWxlciBsZXZlbDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHkgb3V0cHV0Y2xhc3M9ImlkX3Rhc2tib2R5Ij4NCi08Y29udGV4dCBvdXRwdXRjbGFzcz0iaWRfY29udGV4dCI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPiA8cD5UaGUgPHVpY29udHJvbD5KYXZhPC91aWNvbnRyb2w+IGZhY2V0DQotYXBwbGllcyBvbmx5IHRvIEoyRUUgcHJvamVjdHMuIFRvIHNldCB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY29tcGlsZXIgbGV2ZWwgb2YgYSBub24tSmF2YSBFRSBwcm9qZWN0LA0KLXN1Y2ggYXMgYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm9qZWN0LCBzZWUgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qZHQuZG9jLnVzZXIvcmVmZXJlbmNlL3JlZi1wcm9wZXJ0aWVzLWNvbXBpbGVyLmh0bSINCi1zY29wZT0icGVlciI+SmF2YSBDb21waWxlcjwveHJlZj4uPC9wPjxwPlRvIGNoYW5nZSB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiDQotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY29tcGlsZXINCi12ZXJzaW9uLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IG9mIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSBwZXJzcGVjdGl2ZSwgcmlnaHQtY2xpY2sgdGhlIHByb2plY3QNCi1hbmQgdGhlbiBzZWxlY3QgPHVpY29udHJvbD5Qcm9wZXJ0aWVzPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5Qcm9qZWN0IEZhY2V0czwvdWljb250cm9sPiBwYWdlIGluIHRoZSBpbg0KLXRoZSBQcm9wZXJ0aWVzIHdpbmRvdy48L2NtZD48aW5mbz4gVGhpcyBwYWdlIGxpc3RzIHRoZSBmYWNldHMgaW4gdGhlIHByb2plY3QNCi1hbmQgdGhlaXIgdmVyc2lvbnMuPC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+TW9kaWZ5IFByb2plY3Q8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+RG91YmxlIGNsaWNrIHRoZSB2ZXJzaW9uIG51bWJlciBuZXh0IHRvIHRoZTx1aWNvbnRyb2w+SmF2YTwvdWljb250cm9sPiBmYWNldA0KLXRvIHNlbGVjdCBhIGRpZmZlcmVudCBsZXZlbCBvZiA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjb21waWxlci48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPiB0byBjbG9zZSB0aGUgTW9kaWZ5IEZhY2V0ZWQNCi1Qcm9qZWN0IHdpbmRvdyBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxwb3N0cmVxIG91dHB1dGNsYXNzPSJpZF9wb3N0cmVxIj48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+PC9wb3N0cmVxPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RjaGFuZ2VqYXZhbGV2ZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RkOWQ0ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90Y2hhbmdlamF2YWxldmVsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDaGFuZ2luZyB0aGUgSmF2YSBjb21waWxlciB2ZXJzaW9uIGZvciBhIEphdmEgRUUgcHJvamVjdCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJZb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBKYXZhIHVzZWQgaW4gYSBKYXZhIEVFIHByb2plY3QgYnkgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBKYXZhIGZhY2V0LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBKYXZhIHVzZWQgaW4gYSBKYXZhIEVFIHByb2plY3QgYnkgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBKYXZhIGZhY2V0LiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkphdmEgRUUsIHByb2plY3QgY29tcGlsZXIgbGV2ZWwsIHByb2plY3RzLCBKYXZhIGNvbXBpbGVyIGxldmVsIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSwgcHJvamVjdCBjb21waWxlciBsZXZlbCwgcHJvamVjdHMsIEphdmEgY29tcGlsZXIgbGV2ZWwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGFkZGluZ2ZhY2V0Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90Y2hhbmdlZmFjZXQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NmYWNldHMuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y2hhbmdlamF2YWxldmVsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q2hhbmdpbmcgdGhlIEphdmEgY29tcGlsZXIgdmVyc2lvbiBmb3IgYSBKYXZhIEVFIHByb2plY3Q8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjaGFuZ2VqYXZhbGV2ZWwiPjxhIG5hbWU9InRjaGFuZ2VqYXZhbGV2ZWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkNoYW5naW5nIHRoZSBKYXZhIGNvbXBpbGVyIHZlcnNpb24gZm9yIGEgSmF2YSBFRSBwcm9qZWN0PC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBKYXZh4oSiIHVzZWQKLWluIGEgSmF2YSBFRSBwcm9qZWN0IGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SmF2YTwvc3Bhbj4gZmFjZXQuPC9wPgotCi08ZGl2IGNsYXNzPSJpZF9jb250ZXh0Ij48cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPlRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KYXZhPC9zcGFuPiBmYWNldAotYXBwbGllcyBvbmx5IHRvIEoyRUUgcHJvamVjdHMuIFRvIHNldCB0aGUgSmF2YSBjb21waWxlciBsZXZlbCBvZiBhIG5vbi1KYXZhIEVFIHByb2plY3QsCi1zdWNoIGFzIGEgSmF2YSBwcm9qZWN0LCBzZWUgPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuamR0LmRvYy51c2VyL3JlZmVyZW5jZS9yZWYtcHJvcGVydGllcy1jb21waWxlci5odG0iPkphdmEgQ29tcGlsZXI8L2E+LjwvcD4KLTxwPlRvIGNoYW5nZSB0aGUgSmF2YSBjb21waWxlcgotdmVyc2lvbiwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgb2YgdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUsIHJpZ2h0LWNsaWNrIHRoZSBwcm9qZWN0Ci1hbmQgdGhlbiBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvcGVydGllczwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9qZWN0IEZhY2V0czwvc3Bhbj4gcGFnZSBpbiB0aGUgaW4KLXRoZSBQcm9wZXJ0aWVzIHdpbmRvdy48L3NwYW4+ICBUaGlzIHBhZ2UgbGlzdHMgdGhlIGZhY2V0cyBpbiB0aGUgcHJvamVjdAotYW5kIHRoZWlyIHZlcnNpb25zLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TW9kaWZ5IFByb2plY3Q8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkRvdWJsZSBjbGljayB0aGUgdmVyc2lvbiBudW1iZXIgbmV4dCB0byB0aGU8c3BhbiBjbGFzcz0idWljb250cm9sIj5KYXZhPC9zcGFuPiBmYWNldAotdG8gc2VsZWN0IGEgZGlmZmVyZW50IGxldmVsIG9mIEphdmEgY29tcGlsZXIuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPiB0byBjbG9zZSB0aGUgTW9kaWZ5IEZhY2V0ZWQKLVByb2plY3Qgd2luZG93IGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0iaWRfcG9zdHJlcSI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWxjb25jZXB0cyI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9jZmFjZXRzLmh0bWwiIHRpdGxlPSJGYWNldHMgZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzIGZvciBKYXZhIEVFIHByb2plY3RzIGFuZCBhcmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb24uIj5Qcm9qZWN0IGZhY2V0czwvYT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGFkZGluZ2ZhY2V0Lmh0bWwiIHRpdGxlPSJUaGlzIHRvcGljIGV4cGxhaW5zIGhvdyB0byBhZGQgYSBmYWNldCB0byBhbiBleGlzdGluZyBwcm9qZWN0IGluIHlvdXIgd29ya3NwYWNlLiI+QWRkaW5nIGEgZmFjZXQgdG8gYSBKYXZhIEVFIHByb2plY3Q8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90Y2hhbmdlZmFjZXQuaHRtbCIgdGl0bGU9IllvdSBjYW4gY2hhbmdlIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQgaW4gYSBKYXZhIEVFIHByb2plY3QgYnkgZWRpdGluZyB0aGUgZmFjZXRzIGZvciB0aGUgcHJvamVjdC4iPkNoYW5naW5nIHRoZSB2ZXJzaW9uIG9mIGEgZmFjZXQ8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RkZWZpbmluZ2Fubm90YXRpb25zLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNGY2YjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGppbXBlYXIiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+RGVmaW5pbmcgYW5kIHVzaW5nIGFubm90YXRpb25zPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gdXNlIHRoZSBASW50ZXJmYWNlIGFubm90YXRpb24NCi10byBkZWZpbmUgeW91ciBvd24gYW5ub3RhdGlvbiBkZWZpbml0aW9uLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkphdmEgRUUgNTxpbmRleHRlcm0+YW5ub3RhdGlvbnM8L2luZGV4dGVybT48aW5kZXh0ZXJtPmRlZmluaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keSBvdXRwdXRjbGFzcz0iaWRfdGFza2JvZHkiPg0KLTxjb250ZXh0IG91dHB1dGNsYXNzPSJpZF9jb250ZXh0Ij4gPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPjxwPjxiPkRlZmluaW5nDQoteW91ciBvd24gYW5ub3RhdGlvbnM8L2I+PC9wPjwvY29udGV4dD4NCi08c3RlcHM+DQotPHN0ZXA+PGNtZD5Vc2UgdGhlIEBJbnRlcmZhY2UgYW5ub3RhdGlvbiB0byBkZWZpbmUgeW91ciBvd24gYW5ub3RhdGlvbiBkZWZpbml0aW9uOjwvY21kPg0KLTxpbmZvPjxwPjx1bD4NCi08bGk+QW5ub3RhdGlvbiBkZWZpbml0aW9ucyByZXNlbWJsZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnM8L2xpPg0KLTxsaT5Bbm5vdGF0aW9uIG1ldGhvZCBkZWNsYXJhdGlvbnMgaGF2ZSBuZWl0aGVyIHBhcmFtZXRlcnMgbm9yIDxjb2RlcGg+dGhyb3dzPC9jb2RlcGg+IGNsYXVzZXMsDQotYW5kIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50czo8dWw+DQotPGxpPnByaW1pdGl2ZXM8L2xpPg0KLTxsaT5TdHJpbmc8L2xpPg0KLTxsaT5DbGFzczwvbGk+DQotPGxpPmVudW08L2xpPg0KLTxsaT5hcnJheSBvZiB0aGUgYWJvdmUgdHlwZXM8L2xpPg0KLTwvdWw+PC9saT4NCi08bGk+TWV0aG9kcyBtYXkgaGF2ZSBkZWZhdWx0IHZhbHVlczwvbGk+DQotPC91bD48L3A+PHA+PGNvZGVibG9jaz5wdWJsaWMgQGludGVyZmFjZSBDcmVhdGVkQnl7DQotICAgICBTdHJpbmcgbmFtZSgpOw0KLSAgICAgU3RyaW5nIGRhdGUoKTsNCi0gICAgIGJvb2xlYW4gY29udHJhY3RvcigpIGRlZmF1bHQgZmFsc2U7DQotfSAgICAgICAgICA8L2NvZGVibG9jaz48Y29kZWJsb2NrPkBDcmVhdGVkQnkobmFtZSA9ICJNYXJ5IFNtaXRoIixkYXRlPSIwMi8wMi8yMDA4Iik7DQotcHVibGljIGNsYXNzIE15Q2xhc3N7Li4uLn0gICAgICAgICA8L2NvZGVibG9jaz48L3A+PC9pbmZvPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxwb3N0cmVxIG91dHB1dGNsYXNzPSJpZF9wb3N0cmVxIj48cD48Yj5NZXRhLWFubm90YXRpb25zPC9iPjogTWV0YS1hbm5vdGF0aW9ucw0KLShhbm5vdGF0aW9ucyBvZiBhbm5vdGF0aW9ucykgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyBhbiBhbm5vdGF0aW9uDQotc2hvdWxkIGJlIHVzZWQ6PHVsPg0KLTxsaT5AVGFyZ2V0PHVsPg0KLTxsaT5SZXN0cmljdHMgdGhlIHVzZSBvZiBhbiBhbm5vdGF0aW9uPC9saT4NCi08bGk+U2luZ2xlIGFyZ3VtZW50IG11c3QgYmUgZnJvbSBFbnVtIEVsZW1lbnRUeXBlIDx1bD4NCi08bGk+e1RZUEUsIEZJRUxELE1FVEhPRCwgUEFSQU1FVEVSLCBDT05TVFJVQ1RPUiwgTE9DQUxfVkFSSUFCTEUsIEFOTk9UQVRJT05fVFlQRX08L2xpPg0KLTwvdWw+PC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkBSZXRlbnRpb248dWw+DQotPGxpPkluZGljYXRlcyB3aGVyZSB0aGUgYW5ub3RhdGlvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJldGFpbmVkPC9saT4NCi08bGk+U2luZ2xlIGFyZ3VtZW50IG11c3QgYmUgZnJvbSBFbnVtIFJldGVudGlvblBvbGljeTx1bD4NCi08bGk+e1NPVVJDRSwgQ0xBU1MsIFJVTlRJTUV9PC9saT4NCi08L3VsPjwvbGk+DQotPC91bD48L2xpPg0KLTxsaT5ARG9jdW1lbnRlZDx1bD4NCi08bGk+TWFya2VyIGZvciBhbm5vdGF0aW9ucyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiBKYXZhZG9jPC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkBJbmhlcml0ZWQ8dWw+DQotPGxpPm1hcmtlciBmb3IgVHlwZSBhbm5vdGF0aW9ucyB0aGF0IGFyZSB0byBiZSBpbmhlcml0ZWQgYnkgc3VidHlwZXM8L2xpPg0KLTwvdWw+PC9saT4NCi08L3VsPjxiPk90aGVyIGJ1aWx0LWluIGFubm90YXRpb25zPC9iPjogPHVsPg0KLTxsaT5AT3ZlcnJpZGVzPHVsPg0KLTxsaT5BcHBsaWVkIHRvIGEgbWV0aG9kPC9saT4NCi08bGk+SW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIHNob3VsZCBnZW5lcmF0ZSBhbiBlcnJvciBpZiB0aGUgbWV0aG9kIGRvZXMNCi1ub3QgYWN0dWFsbHkgb3ZlcnJpZGUgYSBzdXBlcmNsYXNzIG1ldGhvZC48L2xpPg0KLTwvdWw+PC9saT4NCi08bGk+QERlcHJlY2F0ZWQ8dWw+DQotPGxpPkFwcGxpZWQgdG8gYSBtZXRob2Q8L2xpPg0KLTxsaT5JbmRpY2F0ZXMgdGhhdCB0aGUgY29tcGlsZXIgc2hvdWxkIGdlbmVyYXRlIGEgd2FybmluZyB3aGVuIHRoZSBtZXRob2QNCi1pcyB1c2VkIGV4dGVybmFsbHk8L2xpPg0KLTwvdWw+PC9saT4NCi08bGk+QFN1cHByZXNzV2FybmluZ3M8dWw+DQotPGxpPkFwcGxpZXMgdG8gYSB0eXBlIG9yIGEgbWV0aG9kPC9saT4NCi08bGk+SW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIHNob3VsZCBzdXByZXNzIHdhcm5pbmdzIGZvciB0aGF0IGVsZW1lbnQgYW5kDQotYWxsIHN1YmVsZW1lbnRzPHA+PGNvZGVibG9jaz5ARGVwcmVjYXRlZA0KLXB1YmxpYyB2b2lkIG9sZE1ldGhvZCgpIHsuLi59DQotDQotQCBTdXByZXNzV2FybmluZ3MNCi1wdWJsaWMgdm9pZCB5ZXNJa25vd0l1c2VEZXByZWNhdGVkTWV0aG9kcygpIHsuLi59PC9jb2RlYmxvY2s+PC9wPjwvbGk+DQotPC91bD48L2xpPg0KLTwvdWw+PC9wPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RkZWZpbmluZ2Fubm90YXRpb25zLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTVjZTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGRlZmluaW5nYW5ub3RhdGlvbnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJEZWZpbmluZyBhbmQgdXNpbmcgYW5ub3RhdGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiB1c2UgdGhlIEBJbnRlcmZhY2UgYW5ub3RhdGlvbiB0byBkZWZpbmUgeW91ciBvd24gYW5ub3RhdGlvbiBkZWZpbml0aW9uLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIHVzZSB0aGUgQEludGVyZmFjZSBhbm5vdGF0aW9uIHRvIGRlZmluZSB5b3VyIG93biBhbm5vdGF0aW9uIGRlZmluaXRpb24uIiAvPgotPG1ldGEgY29udGVudD0iSmF2YSBFRSA1LCBhbm5vdGF0aW9ucywgZGVmaW5pbmciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKYXZhIEVFIDUsIGFubm90YXRpb25zLCBkZWZpbmluZyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jYW5ub3RhdGlvbnMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2N0eXBlc29mYW5uby5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqaW1wZWFyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RGVmaW5pbmcgYW5kIHVzaW5nIGFubm90YXRpb25zPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0amltcGVhciI+PGEgbmFtZT0idGppbXBlYXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkRlZmluaW5nIGFuZCB1c2luZyBhbm5vdGF0aW9uczwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF90YXNrYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+WW91IGNhbiB1c2UgdGhlIEBJbnRlcmZhY2UgYW5ub3RhdGlvbgotdG8gZGVmaW5lIHlvdXIgb3duIGFubm90YXRpb24gZGVmaW5pdGlvbi48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotPHA+PHN0cm9uZz5EZWZpbmluZwoteW91ciBvd24gYW5ub3RhdGlvbnM8L3N0cm9uZz48L3A+Ci08L2Rpdj4KLQotCi08ZGl2IGNsYXNzPSJwIj48c3Bhbj5Vc2UgdGhlIEBJbnRlcmZhY2UgYW5ub3RhdGlvbiB0byBkZWZpbmUgeW91ciBvd24gYW5ub3RhdGlvbiBkZWZpbml0aW9uOjwvc3Bhbj4KLSA8ZGl2IGNsYXNzPSJwIj48dWw+Ci08bGk+QW5ub3RhdGlvbiBkZWZpbml0aW9ucyByZXNlbWJsZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnM8L2xpPgotCi08bGk+QW5ub3RhdGlvbiBtZXRob2QgZGVjbGFyYXRpb25zIGhhdmUgbmVpdGhlciBwYXJhbWV0ZXJzIG5vciA8c2FtcCBjbGFzcz0iY29kZXBoIj50aHJvd3M8L3NhbXA+IGNsYXVzZXMsCi1hbmQgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOjx1bD4KLTxsaT5wcmltaXRpdmVzPC9saT4KLQotPGxpPlN0cmluZzwvbGk+Ci0KLTxsaT5DbGFzczwvbGk+Ci0KLTxsaT5lbnVtPC9saT4KLQotPGxpPmFycmF5IG9mIHRoZSBhYm92ZSB0eXBlczwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+TWV0aG9kcyBtYXkgaGF2ZSBkZWZhdWx0IHZhbHVlczwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InAiPjxwcmU+cHVibGljIEBpbnRlcmZhY2UgQ3JlYXRlZEJ5ewotICAgICBTdHJpbmcgbmFtZSgpOwotICAgICBTdHJpbmcgZGF0ZSgpOwotICAgICBib29sZWFuIGNvbnRyYWN0b3IoKSBkZWZhdWx0IGZhbHNlOwotfSAgICAgICAgICA8L3ByZT4KLTxwcmU+QENyZWF0ZWRCeShuYW1lID0gIk1hcnkgU21pdGgiLGRhdGU9IjAyLzAyLzIwMDgiKTsKLXB1YmxpYyBjbGFzcyBNeUNsYXNzey4uLi59ICAgICAgICAgPC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxkaXYgY2xhc3M9InAiPjxzdHJvbmc+TWV0YS1hbm5vdGF0aW9uczwvc3Ryb25nPjogTWV0YS1hbm5vdGF0aW9ucwotKGFubm90YXRpb25zIG9mIGFubm90YXRpb25zKSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IGFuIGFubm90YXRpb24KLXNob3VsZCBiZSB1c2VkOjx1bD4KLTxsaT5AVGFyZ2V0PHVsPgotPGxpPlJlc3RyaWN0cyB0aGUgdXNlIG9mIGFuIGFubm90YXRpb248L2xpPgotCi08bGk+U2luZ2xlIGFyZ3VtZW50IG11c3QgYmUgZnJvbSBFbnVtIEVsZW1lbnRUeXBlIDx1bD4KLTxsaT57VFlQRSwgRklFTEQsTUVUSE9ELCBQQVJBTUVURVIsIENPTlNUUlVDVE9SLCBMT0NBTF9WQVJJQUJMRSwgQU5OT1RBVElPTl9UWVBFfTwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkBSZXRlbnRpb248dWw+Ci08bGk+SW5kaWNhdGVzIHdoZXJlIHRoZSBhbm5vdGF0aW9uIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0YWluZWQ8L2xpPgotCi08bGk+U2luZ2xlIGFyZ3VtZW50IG11c3QgYmUgZnJvbSBFbnVtIFJldGVudGlvblBvbGljeTx1bD4KLTxsaT57U09VUkNFLCBDTEFTUywgUlVOVElNRX08L2xpPgotCi08L3VsPgotPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5ARG9jdW1lbnRlZDx1bD4KLTxsaT5NYXJrZXIgZm9yIGFubm90YXRpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIEphdmFkb2M8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkBJbmhlcml0ZWQ8dWw+Ci08bGk+bWFya2VyIGZvciBUeXBlIGFubm90YXRpb25zIHRoYXQgYXJlIHRvIGJlIGluaGVyaXRlZCBieSBzdWJ0eXBlczwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08L3VsPgotPHN0cm9uZz5PdGhlciBidWlsdC1pbiBhbm5vdGF0aW9uczwvc3Ryb25nPjogPHVsPgotPGxpPkBPdmVycmlkZXM8dWw+Ci08bGk+QXBwbGllZCB0byBhIG1ldGhvZDwvbGk+Ci0KLTxsaT5JbmRpY2F0ZXMgdGhhdCB0aGUgY29tcGlsZXIgc2hvdWxkIGdlbmVyYXRlIGFuIGVycm9yIGlmIHRoZSBtZXRob2QgZG9lcwotbm90IGFjdHVhbGx5IG92ZXJyaWRlIGEgc3VwZXJjbGFzcyBtZXRob2QuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5ARGVwcmVjYXRlZDx1bD4KLTxsaT5BcHBsaWVkIHRvIGEgbWV0aG9kPC9saT4KLQotPGxpPkluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBzaG91bGQgZ2VuZXJhdGUgYSB3YXJuaW5nIHdoZW4gdGhlIG1ldGhvZAotaXMgdXNlZCBleHRlcm5hbGx5PC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5AU3VwcHJlc3NXYXJuaW5nczx1bD4KLTxsaT5BcHBsaWVzIHRvIGEgdHlwZSBvciBhIG1ldGhvZDwvbGk+Ci0KLTxsaT5JbmRpY2F0ZXMgdGhhdCB0aGUgY29tcGlsZXIgc2hvdWxkIHN1cHJlc3Mgd2FybmluZ3MgZm9yIHRoYXQgZWxlbWVudCBhbmQKLWFsbCBzdWJlbGVtZW50czxkaXYgY2xhc3M9InAiPjxwcmU+QERlcHJlY2F0ZWQKLXB1YmxpYyB2b2lkIG9sZE1ldGhvZCgpIHsuLi59Ci0KLUAgU3VwcmVzc1dhcm5pbmdzCi1wdWJsaWMgdm9pZCB5ZXNJa25vd0l1c2VEZXByZWNhdGVkTWV0aG9kcygpIHsuLi59PC9wcmU+Ci08L2Rpdj4KLTwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08L3VsPgotPC9kaXY+Ci08cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL2N0eXBlc29mYW5uby5odG1sIj5UeXBlcyBvZiBhbm5vdGF0aW9uczwvYT48L3N0cm9uZz48YnIgLz4KLUphdmEgRUUgNSBkZWZpbmVzIGEgbnVtYmVyIG9mIHR5cGVzIG9yIGdyb3VwcyBvZiBhbm5vdGF0aW9ucywgZGVmaW5lZCBpbiBhIG51bWJlciBvZiBKYXZhIFNwZWNpZmljYXRpb24gUmVxdWVzdHMgKEpTUnMpLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2Nhbm5vdGF0aW9ucy5odG1sIiB0aXRsZT0iVGhlIGdvYWwgb2YgSmF2YSBFRSA1IHBsYXRmb3JtIGRldmVsb3BtZW50IGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgYXJ0aWZhY3RzIHRoYXQgeW91IGhhdmUgdG8gY3JlYXRlIGFuZCBtYWludGFpbiwgdGhlcmVieSBzaW1wbGlmeWluZyB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4gSmF2YSBFRSA1IHN1cHBvcnRzIHRoZSBpbmplY3Rpb24gb2YgYW5ub3RhdGlvbnMgaW50byB5b3VyIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHlvdSBjYW4gZW1iZWQgcmVzb3VyY2VzLCBkZXBlbmRlbmNpZXMsIHNlcnZpY2VzLCBhbmQgbGlmZS1jeWNsZSBub3RpZmljYXRpb25zIGluIHlvdXIgc291cmNlIGNvZGUsIHdpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIHRoZXNlIGFydGlmYWN0cyBlbHNld2hlcmUuIj5KYXZhIEVFIDUgc3VwcG9ydCBmb3IgYW5ub3RhdGlvbnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGphcHBwcm9qLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amFwcHByb2ouZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzOTYwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amFwcHByb2ouZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGphcHBwcm9qIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gdXNlIGEgd2l6YXJkIHRvIGNyZWF0ZSBhIG5ldw0KLWFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGFuZCBhZGQgaXQgdG8gYSBuZXcgb3IgZXhpc3RpbmcgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbg0KLXByb2plY3QuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+YXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPGluZGV4dGVybT5jcmVhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHkgb3V0cHV0Y2xhc3M9ImlkX3Rhc2tib2R5Ij4NCi08Y29udGV4dCBvdXRwdXRjbGFzcz0iaWRfY29udGV4dCI+IDxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+QXBwbGljYXRpb24NCi1jbGllbnQgcHJvamVjdHMgY29udGFpbiB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZXMNCi1hbmQgcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zLiBBbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdA0KLWlzIGRlcGxveWVkIGFzIGEgSkFSIGZpbGUuPC9wPjxwPkxpa2UgdGhlIG90aGVyIHR5cGVzIG9mIHByb2plY3RzLCBhcHBsaWNhdGlvbg0KLWNsaWVudCBwcm9qZWN0cyBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBwcm9qZWN0IGZhY2V0cywgd2hpY2ggcmVwcmVzZW50IHVuaXRzDQotb2YgZnVuY3Rpb25hbGl0eSBpbiB0aGUgcHJvamVjdC4gQSBuZXcgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Qgc2hvdWxkIGhhdmUNCi10aGUgQXBwbGljYXRpb24gQ2xpZW50IG1vZHVsZSBmYWNldC4gRGVwZW5kaW5nIG9uIHdoYXQgeW91IHdhbnQgdG8gdXNlIHRoZQ0KLXByb2plY3QgZm9yLCB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIG90aGVyIGZhY2V0cyBmb3IgdGhlIHByb2plY3QuPC9wPjxwPlRvDQotY3JlYXRlIGEgSjJFRSBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIHBlcnNwZWN0aXZlLCBjbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5OZXc8L3VpY29udHJvbD48dWljb250cm9sPlByb2plY3Q8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgTmV3IFByb2plY3QgV2l6YXJkLCBzZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+SmF2YQ0KLUVFPC91aWNvbnRyb2w+PHVpY29udHJvbD5BcHBsaWNhdGlvbiBDbGllbnQgUHJvamVjdDwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZA0KLWNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5Qcm9qZWN0IE5hbWU8L3VpY29udHJvbD4gZmllbGQsIHR5cGUgYSBuYW1lIGZvcg0KLXRoZSBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdC4gPC9jbWQ+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPlRvIGNoYW5nZSB0aGUgZGVmYXVsdCBwcm9qZWN0IGxvY2F0aW9uLCBjbGVhcg0KLXRoZSA8dWljb250cm9sPlVzZSBkZWZhdWx0PC91aWNvbnRyb2w+IGNoZWNrIGJveCB1bmRlciA8dWljb250cm9sPlByb2plY3QNCi1jb250ZW50czwvdWljb250cm9sPiBhbmQgc2VsZWN0IGEgbmV3IGxvY2F0aW9uIHdpdGggdGhlIDx1aWNvbnRyb2w+QnJvd3NlPC91aWNvbnRyb2w+IGJ1dHRvbi48L2NtZD4NCi08aW5mbz5JZiB5b3Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IHByb2plY3QgbG9jYXRpb24gdGhhdCBpcyBhbHJlYWR5IGJlaW5nDQotdXNlZCBieSBhbm90aGVyIHByb2plY3QsIHRoZSBwcm9qZWN0IGNyZWF0aW9uIHdpbGwgZmFpbC48bm90ZT5JZiB5b3UgdHlwZQ0KLWEgbmV3IEVBUiBwcm9qZWN0IG5hbWUsIHRoZSBFQVIgcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24NCi13aXRoIHRoZSBsb3dlc3QgY29tcGF0aWJsZSBKYXZhIEVFIHZlcnNpb24gYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgdGhlIHByb2plY3QNCi1iZWluZyBjcmVhdGVkLiBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHZlcnNpb24gb3IgYSBkaWZmZXJlbnQgbG9jYXRpb24NCi1mb3IgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24sIHlvdSBtdXN0IHVzZSB0aGUgTmV3IEVudGVycHJpc2UgQXBwbGljYXRpb24NCi1Qcm9qZWN0IHdpemFyZC48L25vdGU+PC9pbmZvPjwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5UbyBhZGQgdGhlIG5ldyBwcm9qZWN0IHRvIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24NCi1wcm9qZWN0LCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+QWRkIHByb2plY3QgdG8gYW4gRUFSPC91aWNvbnRyb2w+IGNoZWNrIGJveA0KLWFuZCBzZWxlY3QgYSBwcm9qZWN0IGluIHRoZSA8dWljb250cm9sPkVBUiBQcm9qZWN0IE5hbWU8L3VpY29udHJvbD4gbGlzdC48L2NtZD4NCi08aW5mbz5JZiB5b3UgY2hvb3NlIHRvIGFkZCB0aGUgcHJvamVjdCB0byBhbiBleGlzdGluZyBFQVIgcHJvamVjdCwgdGhlIDx1aWNvbnRyb2w+VGFyZ2V0DQotcnVudGltZTwvdWljb250cm9sPiBmaWVsZCBiZWNvbWVzIGRpc2FibGVkIGJlY2F1c2UgdGhlIHRhcmdldCBydW50aW1lIGZvcg0KLXRoZSBuZXcgcHJvamVjdCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIEVBUiBwcm9qZWN0LjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5UYXJnZXQgcnVudGltZTwvdWljb250cm9sPiBmaWVsZCwgc2VsZWN0IHRoZQ0KLXRhcmdldCBydW50aW1lIGZvciB0aGUgcHJvamVjdC48L2NtZD48L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+VG8gdXNlIGEgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIGZvciB5b3VyDQotcHJvamVjdCwgc2VsZWN0IGEgY29uZmlndXJhdGlvbiBpbiB0aGUgPHVpY29udHJvbD5Db25maWd1cmF0aW9uczwvdWljb250cm9sPiBsaXN0Lg0KLVlvdSBjYW4gY2xpY2sgdGhlIDx1aWNvbnRyb2w+TW9kaWZ5PC91aWNvbnRyb2w+IGJ1dHRvbiB0byBkbyB0aGUgZm9sbG93aW5nOjwvY21kPg0KLTxpbmZvPjx1bD4NCi08bGk+Q3VzdG9taXplIHByb2plY3QgZmFjZXRzLiBTZWxlY3QgdGhlIGNoZWNrIGJveGVzIG5leHQgdG8gdGhlIGZhY2V0cyB5b3UNCi13YW50IHRoZSBwcm9qZWN0IHRvIGhhdmUgYW5kIHNlbGVjdCBhIHZlcnNpb24gbnVtYmVyIGZvciBlYWNoIGZhY2V0LiBTZWxlY3QNCi1hIGZhY2V0IG5hbWUgdG8gc2VlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBmYWNldCBpbiB0aGUgPHVpY29udHJvbD5EZXRhaWxzPC91aWNvbnRyb2w+IHRhYi4NCi1Zb3UgY2FuIGFsc28gY2hvb3NlIGEgcHJlc2V0IGNvbWJpbmF0aW9uIG9mIGZhY2V0cyBmcm9tIHRoZSA8dWljb250cm9sPkNvbmZpZ3VyYXRpb25zPC91aWNvbnRyb2w+IGxpc3QuPC9saT4NCi08bGk+TGltaXQgeW91ciBwcm9qZWN0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbmUgb3IgbW9yZSBydW50aW1lcy4gQ2xpY2sgdGhlIDx1aWNvbnRyb2w+U2hvdw0KLVJ1bnRpbWVzPC91aWNvbnRyb2w+IHRhYiBhbmQgc2VsZWN0IHRoZSBydW50aW1lcyB0aGF0IHlvdSB3YW50IHRoZSBwcm9qZWN0DQotdG8gYmUgY29tcGF0aWJsZSB3aXRoLiA8L2xpPg0KLTwvdWw+Q2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5Tb3VyY2UgRm9sZGVyPC91aWNvbnRyb2w+IGZpZWxkLCBlbnRlciB0aGUgbmFtZQ0KLW9mIHRoZSBmb2xkZXIgdG8gdXNlIGZvciBzb3VyY2UgY29kZS4gPC9jbWQ+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPlRvIGNyZWF0ZSBhIGRlZmF1bHQgY2xhc3MgZm9yIHRoZSBtb2R1bGUsDQotc2VsZWN0IHRoZSA8dWljb250cm9sPkNyZWF0ZSBhIGRlZmF1bHQgTWFpbiBjbGFzczwvdWljb250cm9sPiBjaGVjayBib3guPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGphcHBwcm9qLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amFwcHByb2ouaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc2ODgwMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amFwcHByb2ouaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJZb3UgY2FuIHVzZSBhIHdpemFyZCB0byBjcmVhdGUgYSBuZXcgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYW5kIGFkZCBpdCB0byBhIG5ldyBvciBleGlzdGluZyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gdXNlIGEgd2l6YXJkIHRvIGNyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBhbmQgYWRkIGl0IHRvIGEgbmV3IG9yIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4iIC8+Ci08bWV0YSBjb250ZW50PSJhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMsIGNyZWF0aW5nIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iYXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzLCBjcmVhdGluZyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amV4cGFwcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGppbXBhcHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2phcHBjbGlwcm9qLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NmYWNldHMuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0amFwcHByb2oiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGphcHBwcm9qIj48YSBuYW1lPSJ0amFwcHByb2oiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIHVzZSBhIHdpemFyZCB0byBjcmVhdGUgYSBuZXcKLWFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGFuZCBhZGQgaXQgdG8gYSBuZXcgb3IgZXhpc3RpbmcgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbgotcHJvamVjdC48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPkFwcGxpY2F0aW9uCi1jbGllbnQgcHJvamVjdHMgY29udGFpbiB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZXMKLWFuZCBwcm9ncmFtcyB0aGF0IHJ1biBvbiBuZXR3b3JrZWQgY2xpZW50IHN5c3RlbXMuIEFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0Ci1pcyBkZXBsb3llZCBhcyBhIEpBUiBmaWxlLjwvcD4KLTxwPkxpa2UgdGhlIG90aGVyIHR5cGVzIG9mIHByb2plY3RzLCBhcHBsaWNhdGlvbgotY2xpZW50IHByb2plY3RzIGNhbiBjb250YWluIG9uZSBvciBtb3JlIHByb2plY3QgZmFjZXRzLCB3aGljaCByZXByZXNlbnQgdW5pdHMKLW9mIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHByb2plY3QuIEEgbmV3IGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHNob3VsZCBoYXZlCi10aGUgQXBwbGljYXRpb24gQ2xpZW50IG1vZHVsZSBmYWNldC4gRGVwZW5kaW5nIG9uIHdoYXQgeW91IHdhbnQgdG8gdXNlIHRoZQotcHJvamVjdCBmb3IsIHlvdSBtYXkgd2FudCB0byBlbmFibGUgb3RoZXIgZmFjZXRzIGZvciB0aGUgcHJvamVjdC48L3A+Ci08cD5UbwotY3JlYXRlIGEgSjJFRSBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBKYXZh4oSiIEVFIHBlcnNwZWN0aXZlLCBjbGljayA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGU8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXc8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvamVjdDwvc3Bhbj48L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIE5ldyBQcm9qZWN0IFdpemFyZCwgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+SmF2YQotRUU8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbGljYXRpb24gQ2xpZW50IFByb2plY3Q8L3NwYW4+PC9zcGFuPiBhbmQKLWNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9qZWN0IE5hbWU8L3NwYW4+IGZpZWxkLCB0eXBlIGEgbmFtZSBmb3IKLXRoZSBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdC4gPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+VG8gY2hhbmdlIHRoZSBkZWZhdWx0IHByb2plY3QgbG9jYXRpb24sIGNsZWFyCi10aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VXNlIGRlZmF1bHQ8L3NwYW4+IGNoZWNrIGJveCB1bmRlciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9qZWN0Ci1jb250ZW50czwvc3Bhbj4gYW5kIHNlbGVjdCBhIG5ldyBsb2NhdGlvbiB3aXRoIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Ccm93c2U8L3NwYW4+IGJ1dHRvbi48L3NwYW4+Ci0gSWYgeW91IHNwZWNpZnkgYSBub24tZGVmYXVsdCBwcm9qZWN0IGxvY2F0aW9uIHRoYXQgaXMgYWxyZWFkeSBiZWluZwotdXNlZCBieSBhbm90aGVyIHByb2plY3QsIHRoZSBwcm9qZWN0IGNyZWF0aW9uIHdpbGwgZmFpbC48ZGl2IGNsYXNzPSJub3RlIj48c3BhbiBjbGFzcz0ibm90ZXRpdGxlIj5Ob3RlOjwvc3Bhbj4gSWYgeW91IHR5cGUKLWEgbmV3IEVBUiBwcm9qZWN0IG5hbWUsIHRoZSBFQVIgcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLXdpdGggdGhlIGxvd2VzdCBjb21wYXRpYmxlIEphdmEgRUUgdmVyc2lvbiBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdAotYmVpbmcgY3JlYXRlZC4gSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9yIGEgZGlmZmVyZW50IGxvY2F0aW9uCi1mb3IgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24sIHlvdSBtdXN0IHVzZSB0aGUgTmV3IEVudGVycHJpc2UgQXBwbGljYXRpb24KLVByb2plY3Qgd2l6YXJkLjwvZGl2PgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5UbyBhZGQgdGhlIG5ldyBwcm9qZWN0IHRvIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24KLXByb2plY3QsIHNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHByb2plY3QgdG8gYW4gRUFSPC9zcGFuPiBjaGVjayBib3gKLWFuZCBzZWxlY3QgYSBwcm9qZWN0IGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FQVIgUHJvamVjdCBOYW1lPC9zcGFuPiBsaXN0Ljwvc3Bhbj4KLSBJZiB5b3UgY2hvb3NlIHRvIGFkZCB0aGUgcHJvamVjdCB0byBhbiBleGlzdGluZyBFQVIgcHJvamVjdCwgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhcmdldAotcnVudGltZTwvc3Bhbj4gZmllbGQgYmVjb21lcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSB0YXJnZXQgcnVudGltZSBmb3IKLXRoZSBuZXcgcHJvamVjdCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIEVBUiBwcm9qZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhcmdldCBydW50aW1lPC9zcGFuPiBmaWVsZCwgc2VsZWN0IHRoZQotdGFyZ2V0IHJ1bnRpbWUgZm9yIHRoZSBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPlRvIHVzZSBhIHByZWRlZmluZWQgY29uZmlndXJhdGlvbiBmb3IgeW91cgotcHJvamVjdCwgc2VsZWN0IGEgY29uZmlndXJhdGlvbiBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29uZmlndXJhdGlvbnM8L3NwYW4+IGxpc3QuCi1Zb3UgY2FuIGNsaWNrIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Nb2RpZnk8L3NwYW4+IGJ1dHRvbiB0byBkbyB0aGUgZm9sbG93aW5nOjwvc3Bhbj4KLSA8dWw+Ci08bGk+Q3VzdG9taXplIHByb2plY3QgZmFjZXRzLiBTZWxlY3QgdGhlIGNoZWNrIGJveGVzIG5leHQgdG8gdGhlIGZhY2V0cyB5b3UKLXdhbnQgdGhlIHByb2plY3QgdG8gaGF2ZSBhbmQgc2VsZWN0IGEgdmVyc2lvbiBudW1iZXIgZm9yIGVhY2ggZmFjZXQuIFNlbGVjdAotYSBmYWNldCBuYW1lIHRvIHNlZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgZmFjZXQgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRldGFpbHM8L3NwYW4+IHRhYi4KLVlvdSBjYW4gYWxzbyBjaG9vc2UgYSBwcmVzZXQgY29tYmluYXRpb24gb2YgZmFjZXRzIGZyb20gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkNvbmZpZ3VyYXRpb25zPC9zcGFuPiBsaXN0LjwvbGk+Ci0KLTxsaT5MaW1pdCB5b3VyIHByb2plY3QgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9uZSBvciBtb3JlIHJ1bnRpbWVzLiBDbGljayB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2hvdwotUnVudGltZXM8L3NwYW4+IHRhYiBhbmQgc2VsZWN0IHRoZSBydW50aW1lcyB0aGF0IHlvdSB3YW50IHRoZSBwcm9qZWN0Ci10byBiZSBjb21wYXRpYmxlIHdpdGguIDwvbGk+Ci0KLTwvdWw+Ci1DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Tb3VyY2UgRm9sZGVyPC9zcGFuPiBmaWVsZCwgZW50ZXIgdGhlIG5hbWUKLW9mIHRoZSBmb2xkZXIgdG8gdXNlIGZvciBzb3VyY2UgY29kZS4gPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+VG8gY3JlYXRlIGEgZGVmYXVsdCBjbGFzcyBmb3IgdGhlIG1vZHVsZSwKLXNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3JlYXRlIGEgZGVmYXVsdCBNYWluIGNsYXNzPC9zcGFuPiBjaGVjayBib3guPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiB0aXRsZT0iVGhlIEphdmEgMiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSBwcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIj5KMkVFIGFyY2hpdGVjdHVyZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXBwY2xpcHJvai5odG1sIiB0aXRsZT0iQXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGNvbnRhaW4gcHJvZ3JhbXMgdGhhdCBydW4gb24gbmV0d29ya2VkIGNsaWVudCBzeXN0ZW1zIHNvIHRoZSBwcm9qZWN0IGNhbiBiZW5lZml0IGZyb20gYSBzZXJ2ZXIncyB0b29scy4iPkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0czwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiB0aXRsZT0iQW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRpZXMgdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiB0aXRsZT0iRmFjZXRzIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cyBmb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiI+UHJvamVjdCBmYWNldHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqZXhwYXBwLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGV4cG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBhcyBhIEpBUiBmaWxlLiI+RXhwb3J0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGppbXBhcHAuaHRtbCIgdGl0bGU9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBhcmUgZGVwbG95ZWQgYXMgSkFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCB0aGF0IGhhcyBiZWVuIGRlcGxveWVkIGludG8gYSBKQVIgZmlsZSBieSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC4iPkltcG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgSkFSIGZpbGU8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpjaXJjbGViLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amNpcmNsZWIuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyMDAzZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amNpcmNsZWIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGpjaXJjbGViIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkNvcnJlY3RpbmcgY3ljbGljYWwgZGVwZW5kZW5jaWVzIGFmdGVyIGFuIEVBUg0KLWlzIGltcG9ydGVkPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gcmVzb2x2ZSBjeWNsaWNhbCBkZXBlbmRlbmNpZXMNCi1hZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+ZGVwZW5kZW5jaWVzPGluZGV4dGVybT5jb3JyZWN0aW5nIGN5Y2xpY2FsPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5FQVIgZmlsZXM8aW5kZXh0ZXJtPmNvcnJlY3RpbmcgY3ljbGljYWwgZGVwZW5kZW5jaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5wcm9qZWN0czxpbmRleHRlcm0+Y29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+QQ0KLWN5Y2xpY2FsIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gb3IgbW9yZSBtb2R1bGVzIGluIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24NCi1tb3N0IGNvbW1vbmx5IG9jY3VycyB3aGVuIHByb2plY3RzIGFyZSBpbXBvcnRlZCBmcm9tIG91dHNpZGUgdGhlIHdvcmtiZW5jaC4NCi1XaGVuIGEgY3ljbGUgZXhpc3RzIGJldHdlZW4gdHdvIG9yIG1vcmUgbW9kdWxlcyBpbiBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLA0KLXRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYnVpbGRlcg0KLWNhbm5vdCBhY2N1cmF0ZWx5IGNvbXB1dGUgdGhlIGJ1aWxkIG9yZGVyIG9mIHRoZSBwcm9qZWN0cy4gRnVsbCBidWlsZHMgZmFpbA0KLXVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIG9yIHJlcXVpcmUgc2V2ZXJhbCBpbnZvY2F0aW9ucy48L3A+PHA+VGhlcmVmb3JlLCB0aGUNCi1iZXN0IHByYWN0aWNlIGlzIHRvIG9yZ2FuaXplIHlvdXIgcHJvamVjdHMgb3IgbW9kdWxlcyBpbnRvIGNvbXBvbmVudHMuIFRoaXMNCi1hbGxvd3MgeW91ciBtb2R1bGUgZGVwZW5kZW5jaWVzIHRvIGZ1bmN0aW9uIGFzIGEgdHJlZSBpbnN0ZWFkIG9mIGEgY3ljbGUgZGlhZ3JhbS4NCi1UaGlzIHByYWN0aWNlIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBwcm9kdWNpbmcgYSBiZXR0ZXIgZmFjdG9yZWQgYW5kIGxheWVyZWQNCi1hcHBsaWNhdGlvbi48L3A+PHA+VG8gcmVvcmdhbml6ZSB5b3VyIHByb2plY3QgdG8gY29ycmVjdCBjeWNsaWNhbCBkZXBlbmRlbmNpZXMsDQotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+SWRlbnRpZnkgYWxsIHRoZSBjbGFzc2VzIHdpdGhpbiB0aGUgSkFSIGZpbGVzIHRoYXQgaGF2ZSBjeWNsaWNhbA0KLWRlcGVuZGVuY2llcyBhbmQgbW92ZSB0aG9zZSBjbGFzc2VzIGludG8gYSBjb21tb24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcHJvamVjdCBvciBKQVIgZmlsZS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5Vc2UgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24gZWRpdG9yIHRvIG1hcCB1dGlsaXR5IEpBUiBmaWxlcw0KLXRvIHRoZSBjb21tb24gcHJvamVjdHMuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Rm9yIGVhY2ggbW9kdWxlIG9mIHRoZSBKQVIgaW4gdGhlIGFwcGxpY2F0aW9uLCB1c2UgdGhlIEpBUiBkZXBlbmRlbmN5DQotZWRpdG9yIG9yIHByb3BlcnRpZXMgcGFnZSB0byBzZXQgZGVwZW5kZW5jaWVzIG9ubHkgdG8gdGhlIEpBUiBmaWxlcyB0aGF0IGFyZQ0KLXRydWx5IHJlcXVpcmVkLjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxwb3N0cmVxIG91dHB1dGNsYXNzPSJpZF9wb3N0cmVxIj48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+PC9wb3N0cmVxPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqY2lyY2xlYi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpjaXJjbGViLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNGQwNDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpjaXJjbGViLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDb3JyZWN0aW5nIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiByZXNvbHZlIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gcmVzb2x2ZSBjeWNsaWNhbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgYW4gRUFSIGlzIGltcG9ydGVkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImRlcGVuZGVuY2llcywgY29ycmVjdGluZyBjeWNsaWNhbCwgRUFSIGZpbGVzLCBjb3JyZWN0aW5nIGN5Y2xpY2FsIGRlcGVuZGVuY2llcywgcHJvamVjdHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJkZXBlbmRlbmNpZXMsIGNvcnJlY3RpbmcgY3ljbGljYWwsIEVBUiBmaWxlcywgY29ycmVjdGluZyBjeWNsaWNhbCBkZXBlbmRlbmNpZXMsIHByb2plY3RzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqaW1wZWFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamNpcmNsZS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqY2lyY2xlYiIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNvcnJlY3RpbmcgY3ljbGljYWwgZGVwZW5kZW5jaWVzIGFmdGVyIGFuIEVBUgotaXMgaW1wb3J0ZWQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRqY2lyY2xlYiI+PGEgbmFtZT0idGpjaXJjbGViIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5Db3JyZWN0aW5nIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIKLWlzIGltcG9ydGVkPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIHJlc29sdmUgY3ljbGljYWwgZGVwZW5kZW5jaWVzCi1hZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQuPC9wPgotCi08ZGl2IGNsYXNzPSJpZF9jb250ZXh0Ij48cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPkEKLWN5Y2xpY2FsIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gb3IgbW9yZSBtb2R1bGVzIGluIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24KLW1vc3QgY29tbW9ubHkgb2NjdXJzIHdoZW4gcHJvamVjdHMgYXJlIGltcG9ydGVkIGZyb20gb3V0c2lkZSB0aGUgd29ya2JlbmNoLgotV2hlbiBhIGN5Y2xlIGV4aXN0cyBiZXR3ZWVuIHR3byBvciBtb3JlIG1vZHVsZXMgaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiwKLXRoZSBKYXZh4oSiIGJ1aWxkZXIKLWNhbm5vdCBhY2N1cmF0ZWx5IGNvbXB1dGUgdGhlIGJ1aWxkIG9yZGVyIG9mIHRoZSBwcm9qZWN0cy4gRnVsbCBidWlsZHMgZmFpbAotdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgb3IgcmVxdWlyZSBzZXZlcmFsIGludm9jYXRpb25zLjwvcD4KLTxwPlRoZXJlZm9yZSwgdGhlCi1iZXN0IHByYWN0aWNlIGlzIHRvIG9yZ2FuaXplIHlvdXIgcHJvamVjdHMgb3IgbW9kdWxlcyBpbnRvIGNvbXBvbmVudHMuIFRoaXMKLWFsbG93cyB5b3VyIG1vZHVsZSBkZXBlbmRlbmNpZXMgdG8gZnVuY3Rpb24gYXMgYSB0cmVlIGluc3RlYWQgb2YgYSBjeWNsZSBkaWFncmFtLgotVGhpcyBwcmFjdGljZSBoYXMgdGhlIGFkZGVkIGJlbmVmaXQgb2YgcHJvZHVjaW5nIGEgYmV0dGVyIGZhY3RvcmVkIGFuZCBsYXllcmVkCi1hcHBsaWNhdGlvbi48L3A+Ci08cD5UbyByZW9yZ2FuaXplIHlvdXIgcHJvamVjdCB0byBjb3JyZWN0IGN5Y2xpY2FsIGRlcGVuZGVuY2llcywKLWNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbCBjbGFzcz0iaWRfc3RlcHMiPgotPGxpPjxzcGFuPklkZW50aWZ5IGFsbCB0aGUgY2xhc3NlcyB3aXRoaW4gdGhlIEpBUiBmaWxlcyB0aGF0IGhhdmUgY3ljbGljYWwKLWRlcGVuZGVuY2llcyBhbmQgbW92ZSB0aG9zZSBjbGFzc2VzIGludG8gYSBjb21tb24gSmF2YSBwcm9qZWN0IG9yIEpBUiBmaWxlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VXNlIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIGVkaXRvciB0byBtYXAgdXRpbGl0eSBKQVIgZmlsZXMKLXRvIHRoZSBjb21tb24gcHJvamVjdHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5Gb3IgZWFjaCBtb2R1bGUgb2YgdGhlIEpBUiBpbiB0aGUgYXBwbGljYXRpb24sIHVzZSB0aGUgSkFSIGRlcGVuZGVuY3kKLWVkaXRvciBvciBwcm9wZXJ0aWVzIHBhZ2UgdG8gc2V0IGRlcGVuZGVuY2llcyBvbmx5IHRvIHRoZSBKQVIgZmlsZXMgdGhhdCBhcmUKLXRydWx5IHJlcXVpcmVkLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqY2lyY2xlLmh0bWwiIHRpdGxlPSJBIGN5Y2xpY2FsIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gb3IgbW9yZSBtb2R1bGVzIGluIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gbW9zdCBjb21tb25seSBvY2N1cnMgd2hlbiBwcm9qZWN0cyBhcmUgaW1wb3J0ZWQgZnJvbSBvdXRzaWRlIHRoZSBXb3JrYmVuY2guIj5DeWNsaWNhbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBKYXZhIEVFIG1vZHVsZXM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqaW1wZWFyLmh0bWwiIHRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIEVBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGJ5IGltcG9ydGluZyBpdCBmcm9tIGEgZGVwbG95ZWQgRUFSIGZpbGUuIj5JbXBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBFQVIgZmlsZTwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amVhci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGplYXIuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5ZjYzMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amVhci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAidGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0amVhciIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5DcmVhdGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3Q8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+VXNpbmcgdGhlIHdpemFyZCB0byBjcmVhdGUgYW4gZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9uIHByb2plY3QgYWxsb3dzIHlvdSB0byBwYWNrYWdlIG1hbnkgd2ViIGFwcGxpY2F0aW9ucyBhbmQgbW9kdWxlcw0KLWluIGEgcHJvamVjdCBhbmQgZGVwbG95IHRoZXNlIG1vZHVsZXMgYXMgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+ZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnM8aW5kZXh0ZXJtPnByb2plY3RzPGluZGV4dGVybT5jcmVhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+SjJFRTxpbmRleHRlcm0+ZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0czxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+RW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9uIHByb2plY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9ucyBhbmQgY2FuIGNvbnRhaW4gYSBjb21iaW5hdGlvbiBvZiBXZWIgbW9kdWxlcywgSkFSIGZpbGVzLCBjb25uZWN0b3INCi1tb2R1bGVzLCBFSkIgbW9kdWxlcywgYW5kIGFwcGxpY2F0aW9uIGNsaWVudCBtb2R1bGVzLiBBbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uDQotcHJvamVjdCBpcyBkZXBsb3llZCBpbiB0aGUgZm9ybSBvZiBhbiBFQVIgZmlsZSwgYW5kIGlzIHRoZXJlZm9yZSBzb21ldGltZXMNCi1yZWZlcnJlZCB0byBhcyBhbiBFQVIgcHJvamVjdC4gVGhlIG1vZHVsZXMgaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0DQotYXJlIG1hcHBlZCB0byBvdGhlciBKMkVFIHByb2plY3RzLiBUaGUgbWFwcGluZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gbWV0YWRhdGENCi1maWxlcyB3aXRoaW4gdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4gVGhlIG1ldGFkYXRhIGZpbGVzIGFyZSB1c2VkDQotZm9yIGV4cG9ydGluZyB0aGUgcHJvamVjdCB0byBhbiBFQVIgZmlsZSBhbmQgZm9yIHJ1bm5pbmcgdGhlIHByb2plY3Qgb24gdGhlDQotc2VydmVyLjwvcD48cD5MaWtlIHRoZSBvdGhlciB0eXBlcyBvZiBwcm9qZWN0cywgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cw0KLWNhbiBjb250YWluIG9uZSBvciBtb3JlIHByb2plY3QgZmFjZXRzLCB3aGljaCByZXByZXNlbnQgdW5pdHMgb2YgZnVuY3Rpb25hbGl0eQ0KLWluIHRoZSBwcm9qZWN0LiBUbyBiZSBkZXBsb3llZCBhcyBhbiBFQVIgZmlsZSwgdGhlIG5ldyBwcm9qZWN0IG11c3QgaGF2ZSB0aGUNCi1FQVIgZmFjZXQuIERlcGVuZGluZyBvbiB3aGF0IHlvdSB3YW50IHRvIHVzZSB0aGUgcHJvamVjdCBmb3IsIHlvdSBtYXkgd2FudA0KLXRvIGVuYWJsZSBvdGhlciBmYWNldHMgZm9yIHRoZSBwcm9qZWN0LjwvcD48cCBjb25yZWY9InJqbGltaXRjdXJyZW50LmRpdGEjcmpsaW1pdGN1cnJlbnQvbGltaXRhdGlvbl9lYXJfZGJjcyI+PC9wPjxwPlRvDQotY3JlYXRlIGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4NCi08c3RlcHMgb3V0cHV0Y2xhc3M9ImlkX3N0ZXBzIj4NCi08c3RlcD48Y21kPkluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSBwZXJzcGVjdGl2ZSwgY2xpY2sgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+TmV3PC91aWNvbnRyb2w+PHVpY29udHJvbD5Qcm9qZWN0PC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIE5ldyBQcm9qZWN0IFdpemFyZCwgc2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPkoyRUU8L3VpY29udHJvbD4NCi08dWljb250cm9sPkVudGVycHJpc2UgQXBwbGljYXRpb24gUHJvamVjdDwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZCBjbGljayA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+UHJvamVjdCBOYW1lPC91aWNvbnRyb2w+IGZpZWxkLCB0eXBlIGEgbmFtZSBmb3INCi10aGUgbmV3IHByb2plY3QuIDwvY21kPjwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5UbyBjaGFuZ2UgdGhlIGRlZmF1bHQgcHJvamVjdCBsb2NhdGlvbiwgY2xlYXINCi10aGUgPHVpY29udHJvbD5Vc2UgZGVmYXVsdDwvdWljb250cm9sPiBjaGVjayBib3ggdW5kZXIgPHVpY29udHJvbD5Qcm9qZWN0DQotY29udGVudHM8L3VpY29udHJvbD4gYW5kIHNlbGVjdCBhIG5ldyBsb2NhdGlvbiB3aXRoIHRoZSA8dWljb250cm9sPkJyb3dzZTwvdWljb250cm9sPiBidXR0b24uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+VGFyZ2V0IHJ1bnRpbWU8L3VpY29udHJvbD4gZmllbGQsIHNlbGVjdCB0aGUNCi10YXJnZXQgcnVudGltZSBmb3IgdGhlIHByb2plY3QuPC9jbWQ+PGluZm8+WW91IGNhbiBjbGljayB0aGUgPHVpY29udHJvbD5OZXc8L3VpY29udHJvbD4gYnV0dG9uDQotdG8gY3JlYXRlIGEgbmV3IHJ1bnRpbWUgZm9yIHRoZSBwcm9qZWN0IHRvIHVzZS48L2luZm8+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPlRvIHVzZSBhIHByZWRlZmluZWQgY29uZmlndXJhdGlvbiBmb3IgeW91cg0KLXByb2plY3QsIHNlbGVjdCBhIGNvbmZpZ3VyYXRpb24gaW4gdGhlIDx1aWNvbnRyb2w+Q29uZmlndXJhdGlvbjwvdWljb250cm9sPiBsaXN0Lg0KLVlvdSBjYW4gY2xpY2sgdGhlIDx1aWNvbnRyb2w+TW9kaWZ5PC91aWNvbnRyb2w+IGJ1dHRvbiB0byBkbyB0aGUgZm9sbG93aW5nOjwvY21kPg0KLTxpbmZvPjx1bD4NCi08bGk+Q3VzdG9taXplIHByb2plY3QgZmFjZXRzLiBTZWxlY3QgdGhlIGNoZWNrIGJveGVzIG5leHQgdG8gdGhlIGZhY2V0cyB5b3UNCi13YW50IHRoZSBwcm9qZWN0IHRvIGhhdmUgYW5kIHNlbGVjdCBhIHZlcnNpb24gbnVtYmVyIGZvciBlYWNoIGZhY2V0LiBTZWxlY3QNCi1hIGZhY2V0IG5hbWUgdG8gc2VlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBmYWNldCBpbiB0aGUgPHVpY29udHJvbD5EZXRhaWxzPC91aWNvbnRyb2w+IHRhYi4NCi1Zb3UgY2FuIGFsc28gY2hvb3NlIGEgcHJlc2V0IGNvbWJpbmF0aW9uIG9mIGZhY2V0cyBmcm9tIHRoZSA8dWljb250cm9sPkNvbmZpZ3VyYXRpb25zPC91aWNvbnRyb2w+IGxpc3QuPC9saT4NCi08bGk+TGltaXQgeW91ciBwcm9qZWN0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbmUgb3IgbW9yZSBydW50aW1lcy4gQ2xpY2sgdGhlIDx1aWNvbnRyb2w+U2hvdw0KLVJ1bnRpbWVzPC91aWNvbnRyb2w+IHRhYiBhbmQgc2VsZWN0IHRoZSBydW50aW1lcyB0aGF0IHlvdSB3YW50IHRoZSBwcm9qZWN0DQotdG8gYmUgY29tcGF0aWJsZSB3aXRoLiA8L2xpPg0KLTwvdWw+Q2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbiB0aGUgSjJFRSBNb2R1bGVzIHRvIEFkZCB0byB0aGUgRUFSIHBhZ2Ugb2YgdGhlIHdpemFyZCwgc2VsZWN0DQotdGhlIGV4aXN0aW5nIG1vZHVsZXMgdGhhdCB5b3Ugd2FudCB0byBhZGQgdG8gdGhlIG5ldyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uDQotcHJvamVjdC48L2NtZD48L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+VG8gY3JlYXRlIG5ldyBtb2R1bGVzIHRvIGFkZCB0byB0aGUgcHJvamVjdCwNCi1jbGljayB0aGUgPHVpY29udHJvbD5OZXcgTW9kdWxlPC91aWNvbnRyb2w+IGJ1dHRvbiB0byBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzo8L2NtZD4NCi08Y2hvaWNldGFibGUga2V5Y29sPSIwIj4NCi08Y2hyb3c+PGNob3B0aW9uPkNyZWF0aW5nIG9uZSBtb2R1bGU8L2Nob3B0aW9uPjxjaGRlc2M+Q2xlYXIgdGhlIDx1aWNvbnRyb2w+Q3JlYXRlDQotZGVmYXVsdCBtb2R1bGVzPC91aWNvbnRyb2w+IGNoZWNrIGJveCwgc2VsZWN0IHRoZSB0eXBlIG9mIG1vZHVsZSB5b3Ugd2FudA0KLXRvIGNyZWF0ZSwgY2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+IGFuZCBmb2xsb3cgdGhlIE5ldyBQcm9qZWN0IHdpemFyZA0KLWZvciB0aGF0IHR5cGUgb2YgcHJvamVjdC48L2NoZGVzYz48L2Nocm93Pg0KLTxjaHJvdz48Y2hvcHRpb24+Q3JlYXRpbmcgdHdvIG9yIG1vcmUgbW9kdWxlczwvY2hvcHRpb24+PGNoZGVzYz5TZWxlY3QgdGhlIDx1aWNvbnRyb2w+Q3JlYXRlDQotZGVmYXVsdCBtb2R1bGVzPC91aWNvbnRyb2w+IGNoZWNrIGJveCwgc2VsZWN0IHRoZSBjaGVjayBib3hlcyBmb3IgZWFjaCB0eXBlDQotb2YgcHJvamVjdCB5b3Ugd2FudCB0byBjcmVhdGUsIGFuZCBjbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NoZGVzYz4NCi08L2Nocm93Pg0KLTwvY2hvaWNldGFibGU+DQotPGluZm8+WW91IGNhbiBlbnRlciBhIG5hbWUgZm9yIGVhY2ggbW9kdWxlLiBFYWNoIG9mIHRoZXNlIG1vZHVsZXMgd2lsbCBoYXZlDQotdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoYXQgdHlwZSBvZiBwcm9qZWN0IGFuZCB0aGV5IHdpbGwgaGF2ZSB0aGUgc2FtZQ0KLXNlcnZlciB0YXJnZXQgYXMgdGhlIG5ldyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cG9zdHJlcSBvdXRwdXRjbGFzcz0iaWRfcG9zdHJlcSI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amVhci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGplYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4MGRhMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amVhci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJVc2luZyB0aGUgd2l6YXJkIHRvIGNyZWF0ZSBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYWxsb3dzIHlvdSB0byBwYWNrYWdlIG1hbnkgd2ViIGFwcGxpY2F0aW9ucyBhbmQgbW9kdWxlcyBpbiBhIHByb2plY3QgYW5kIGRlcGxveSB0aGVzZSBtb2R1bGVzIGFzIGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgd2l6YXJkIHRvIGNyZWF0ZSBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYWxsb3dzIHlvdSB0byBwYWNrYWdlIG1hbnkgd2ViIGFwcGxpY2F0aW9ucyBhbmQgbW9kdWxlcyBpbiBhIHByb2plY3QgYW5kIGRlcGxveSB0aGVzZSBtb2R1bGVzIGFzIGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVudGVycHJpc2UgYXBwbGljYXRpb25zLCBwcm9qZWN0cywgY3JlYXRpbmcsIEoyRUUsIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJlbnRlcnByaXNlIGFwcGxpY2F0aW9ucywgcHJvamVjdHMsIGNyZWF0aW5nLCBKMkVFLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqaW1wZWFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amV4cGVhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2phcmNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqZWFyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0amVhciI+PGEgbmFtZT0idGplYXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkNyZWF0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdDwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF90YXNrYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+VXNpbmcgdGhlIHdpemFyZCB0byBjcmVhdGUgYW4gZW50ZXJwcmlzZQotYXBwbGljYXRpb24gcHJvamVjdCBhbGxvd3MgeW91IHRvIHBhY2thZ2UgbWFueSB3ZWIgYXBwbGljYXRpb25zIGFuZCBtb2R1bGVzCi1pbiBhIHByb2plY3QgYW5kIGRlcGxveSB0aGVzZSBtb2R1bGVzIGFzIGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLjwvcD4KLQotPGRpdiBjbGFzcz0iaWRfY29udGV4dCI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLSA8cD5FbnRlcnByaXNlCi1hcHBsaWNhdGlvbiBwcm9qZWN0cyBjb250YWluIHJlZmVyZW5jZXMgdG8gdGhlIHJlc291cmNlcyBuZWVkZWQgZm9yIGVudGVycHJpc2UKLWFwcGxpY2F0aW9ucyBhbmQgY2FuIGNvbnRhaW4gYSBjb21iaW5hdGlvbiBvZiBXZWIgbW9kdWxlcywgSkFSIGZpbGVzLCBjb25uZWN0b3IKLW1vZHVsZXMsIEVKQiBtb2R1bGVzLCBhbmQgYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZXMuIEFuIGVudGVycHJpc2UgYXBwbGljYXRpb24KLXByb2plY3QgaXMgZGVwbG95ZWQgaW4gdGhlIGZvcm0gb2YgYW4gRUFSIGZpbGUsIGFuZCBpcyB0aGVyZWZvcmUgc29tZXRpbWVzCi1yZWZlcnJlZCB0byBhcyBhbiBFQVIgcHJvamVjdC4gVGhlIG1vZHVsZXMgaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0Ci1hcmUgbWFwcGVkIHRvIG90aGVyIEoyRUUgcHJvamVjdHMuIFRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBtZXRhZGF0YQotZmlsZXMgd2l0aGluIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QuIFRoZSBtZXRhZGF0YSBmaWxlcyBhcmUgdXNlZAotZm9yIGV4cG9ydGluZyB0aGUgcHJvamVjdCB0byBhbiBFQVIgZmlsZSBhbmQgZm9yIHJ1bm5pbmcgdGhlIHByb2plY3Qgb24gdGhlCi1zZXJ2ZXIuPC9wPgotPHA+TGlrZSB0aGUgb3RoZXIgdHlwZXMgb2YgcHJvamVjdHMsIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMKLWNhbiBjb250YWluIG9uZSBvciBtb3JlIHByb2plY3QgZmFjZXRzLCB3aGljaCByZXByZXNlbnQgdW5pdHMgb2YgZnVuY3Rpb25hbGl0eQotaW4gdGhlIHByb2plY3QuIFRvIGJlIGRlcGxveWVkIGFzIGFuIEVBUiBmaWxlLCB0aGUgbmV3IHByb2plY3QgbXVzdCBoYXZlIHRoZQotRUFSIGZhY2V0LiBEZXBlbmRpbmcgb24gd2hhdCB5b3Ugd2FudCB0byB1c2UgdGhlIHByb2plY3QgZm9yLCB5b3UgbWF5IHdhbnQKLXRvIGVuYWJsZSBvdGhlciBmYWNldHMgZm9yIHRoZSBwcm9qZWN0LjwvcD4KLTxwPldoZW4KLXlvdSBjcmVhdGUgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkbwotbm90IGdpdmUgaXQgYSBuYW1lIHRoYXQgY29udGFpbnMgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIHNldCAoREJDUykgY2hhcmFjdGVycy48L3A+Ci08cD5UbwotY3JlYXRlIGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbCBjbGFzcz0iaWRfc3RlcHMiPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgSmF2YeKEoiBFRSBwZXJzcGVjdGl2ZSwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV3PC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByb2plY3Q8L3NwYW4+PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBOZXcgUHJvamVjdCBXaXphcmQsIHNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkoyRUU8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FbnRlcnByaXNlIEFwcGxpY2F0aW9uIFByb2plY3Q8L3NwYW4+PC9zcGFuPiBhbmQgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvamVjdCBOYW1lPC9zcGFuPiBmaWVsZCwgdHlwZSBhIG5hbWUgZm9yCi10aGUgbmV3IHByb2plY3QuIDwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPlRvIGNoYW5nZSB0aGUgZGVmYXVsdCBwcm9qZWN0IGxvY2F0aW9uLCBjbGVhcgotdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVzZSBkZWZhdWx0PC9zcGFuPiBjaGVjayBib3ggdW5kZXIgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvamVjdAotY29udGVudHM8L3NwYW4+IGFuZCBzZWxlY3QgYSBuZXcgbG9jYXRpb24gd2l0aCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnJvd3NlPC9zcGFuPiBidXR0b24uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VGFyZ2V0IHJ1bnRpbWU8L3NwYW4+IGZpZWxkLCBzZWxlY3QgdGhlCi10YXJnZXQgcnVudGltZSBmb3IgdGhlIHByb2plY3QuPC9zcGFuPiBZb3UgY2FuIGNsaWNrIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXc8L3NwYW4+IGJ1dHRvbgotdG8gY3JlYXRlIGEgbmV3IHJ1bnRpbWUgZm9yIHRoZSBwcm9qZWN0IHRvIHVzZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPlRvIHVzZSBhIHByZWRlZmluZWQgY29uZmlndXJhdGlvbiBmb3IgeW91cgotcHJvamVjdCwgc2VsZWN0IGEgY29uZmlndXJhdGlvbiBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29uZmlndXJhdGlvbjwvc3Bhbj4gbGlzdC4KLVlvdSBjYW4gY2xpY2sgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk1vZGlmeTwvc3Bhbj4gYnV0dG9uIHRvIGRvIHRoZSBmb2xsb3dpbmc6PC9zcGFuPgotIDx1bD4KLTxsaT5DdXN0b21pemUgcHJvamVjdCBmYWNldHMuIFNlbGVjdCB0aGUgY2hlY2sgYm94ZXMgbmV4dCB0byB0aGUgZmFjZXRzIHlvdQotd2FudCB0aGUgcHJvamVjdCB0byBoYXZlIGFuZCBzZWxlY3QgYSB2ZXJzaW9uIG51bWJlciBmb3IgZWFjaCBmYWNldC4gU2VsZWN0Ci1hIGZhY2V0IG5hbWUgdG8gc2VlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBmYWNldCBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGV0YWlsczwvc3Bhbj4gdGFiLgotWW91IGNhbiBhbHNvIGNob29zZSBhIHByZXNldCBjb21iaW5hdGlvbiBvZiBmYWNldHMgZnJvbSB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29uZmlndXJhdGlvbnM8L3NwYW4+IGxpc3QuPC9saT4KLQotPGxpPkxpbWl0IHlvdXIgcHJvamVjdCB0byBiZSBjb21wYXRpYmxlIHdpdGggb25lIG9yIG1vcmUgcnVudGltZXMuIENsaWNrIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93Ci1SdW50aW1lczwvc3Bhbj4gdGFiIGFuZCBzZWxlY3QgdGhlIHJ1bnRpbWVzIHRoYXQgeW91IHdhbnQgdGhlIHByb2plY3QKLXRvIGJlIGNvbXBhdGlibGUgd2l0aC4gPC9saT4KLQotPC91bD4KLUNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T24gdGhlIEoyRUUgTW9kdWxlcyB0byBBZGQgdG8gdGhlIEVBUiBwYWdlIG9mIHRoZSB3aXphcmQsIHNlbGVjdAotdGhlIGV4aXN0aW5nIG1vZHVsZXMgdGhhdCB5b3Ugd2FudCB0byBhZGQgdG8gdGhlIG5ldyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uCi1wcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPlRvIGNyZWF0ZSBuZXcgbW9kdWxlcyB0byBhZGQgdG8gdGhlIHByb2plY3QsCi1jbGljayB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV3IE1vZHVsZTwvc3Bhbj4gYnV0dG9uIHRvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOjwvc3Bhbj4KLQotPHRhYmxlIGNsYXNzPSJjaG9pY2V0YWJsZWJvcmRlciIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiIHJ1bGVzPSJyb3dzIiBmcmFtZT0iaHNpZGVzIiBib3JkZXI9IjEiPgotPHRoZWFkPjx0cj48dGggdmFsaWduPSJib3R0b20iIGlkPSJOMTAxNkMtb3B0aW9uIiBhbGlnbj0ibGVmdCI+T3B0aW9uPC90aD4KLTx0aCB2YWxpZ249ImJvdHRvbSIgaWQ9Ik4xMDE2Qy1kZXNjIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD4KLTx0Ym9keT4KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDE2Qy1vcHRpb24iIGlkPSJOMTAxNzYiPkNyZWF0aW5nIG9uZSBtb2R1bGU8L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxNkMtZGVzYyBOMTAxNzYiPkNsZWFyIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DcmVhdGUKLWRlZmF1bHQgbW9kdWxlczwvc3Bhbj4gY2hlY2sgYm94LCBzZWxlY3QgdGhlIHR5cGUgb2YgbW9kdWxlIHlvdSB3YW50Ci10byBjcmVhdGUsIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+IGFuZCBmb2xsb3cgdGhlIE5ldyBQcm9qZWN0IHdpemFyZAotZm9yIHRoYXQgdHlwZSBvZiBwcm9qZWN0LjwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxNkMtb3B0aW9uIiBpZD0iTjEwMTkxIj5DcmVhdGluZyB0d28gb3IgbW9yZSBtb2R1bGVzPC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMTZDLWRlc2MgTjEwMTkxIj5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkNyZWF0ZQotZGVmYXVsdCBtb2R1bGVzPC9zcGFuPiBjaGVjayBib3gsIHNlbGVjdCB0aGUgY2hlY2sgYm94ZXMgZm9yIGVhY2ggdHlwZQotb2YgcHJvamVjdCB5b3Ugd2FudCB0byBjcmVhdGUsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LjwvdGQ+Ci0KLTwvdHI+Ci0KLTwvdGJvZHk+PC90YWJsZT4KLQotIFlvdSBjYW4gZW50ZXIgYSBuYW1lIGZvciBlYWNoIG1vZHVsZS4gRWFjaCBvZiB0aGVzZSBtb2R1bGVzIHdpbGwgaGF2ZQotdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoYXQgdHlwZSBvZiBwcm9qZWN0IGFuZCB0aGV5IHdpbGwgaGF2ZSB0aGUgc2FtZQotc2VydmVyIHRhcmdldCBhcyB0aGUgbmV3IGVudGVycHJpc2UgYXBwbGljYXRpb24uPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiB0aXRsZT0iVGhlIEphdmEgMiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSBwcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIj5KMkVFIGFyY2hpdGVjdHVyZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiB0aXRsZT0iQW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRpZXMgdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2ZhY2V0cy5odG1sIiB0aXRsZT0iRmFjZXRzIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cyBmb3IgSmF2YSBFRSBwcm9qZWN0cyBhbmQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiI+UHJvamVjdCBmYWNldHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqaW1wZWFyLmh0bWwiIHRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIEVBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGJ5IGltcG9ydGluZyBpdCBmcm9tIGEgZGVwbG95ZWQgRUFSIGZpbGUuIj5JbXBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBFQVIgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqZXhwZWFyLmh0bWwiIHRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9ucyBhcmUgZGVwbG95ZWQgaW4gdGhlIGZvcm0gb2YgYW4gRUFSIGZpbGUuIFVzZSB0aGUgRXhwb3J0IHdpemFyZCB0byBleHBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGludG8gYW4gRUFSIGZpbGUgZm9yIGRlcGxveW1lbnQuIj5FeHBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBpbnRvIGFuIEVBUiBmaWxlPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwYXBwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cGFwcC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTk1MTliLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwYXBwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRqZXhwYXBwIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkV4cG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdDwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIGV4cG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQNCi1wcm9qZWN0IGFzIGEgSkFSIGZpbGUuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+YXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPGluZGV4dGVybT5leHBvcnRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+VG8NCi1leHBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgZnJvbSB0aGUgd29ya2JlbmNoLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nDQotc3RlcHM6PC9wPjwvY29udGV4dD4NCi08c3RlcHMgb3V0cHV0Y2xhc3M9ImlkX3N0ZXBzIj4NCi08c3RlcD48Y21kPkluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSBwZXJzcGVjdGl2ZSwgY2xpY2sgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+RXhwb3J0PC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+VW5kZXIgPHVpY29udHJvbD5TZWxlY3QgYW4gZXhwb3J0IGRlc3RpbmF0aW9uPC91aWNvbnRyb2w+LCBjbGljayA8bWVudWNhc2NhZGU+DQotPHVpY29udHJvbD5KMkVFPC91aWNvbnRyb2w+PHVpY29udHJvbD5BcHAgQ2xpZW50IEpBUiBmaWxlPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4sDQotYW5kIHRoZW4gY2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPkFwcGxpY2F0aW9uIENsaWVudCBwcm9qZWN0PC91aWNvbnRyb2w+IGxpc3QsDQotc2VsZWN0IHRoZSBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCB5b3Ugd2FudCB0byBleHBvcnQuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+RGVzdGluYXRpb248L3VpY29udHJvbD4gZmllbGQsIGVudGVyIHRoZSBmdWxsDQotcGF0aCBhbmQgSkFSIGZpbGUgbmFtZSB3aGVyZSB5b3Ugd2FudCB0byBleHBvcnQgdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5UbyBleHBvcnQgc291cmNlIGZpbGVzLCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+RXhwb3J0DQotc291cmNlIGZpbGVzPC91aWNvbnRyb2w+IGNoZWNrIGJveC48L2NtZD48L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+SWYgeW91IGFyZSBleHBvcnRpbmcgdG8gYW4gZXhpc3RpbmcgSkFSIGZpbGUNCi1hbmQgeW91IGRvIG5vdCB3YW50IHRvIGJlIHdhcm5lZCBhYm91dCBvdmVyd3JpdGluZyBpdCwgc2VsZWN0IHRoZSA8dWljb250cm9sPk92ZXJ3cml0ZQ0KLWV4aXN0aW5nIGZpbGU8L3VpY29udHJvbD4gY2hlY2sgYm94LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxwb3N0cmVxIG91dHB1dGNsYXNzPSJpZF9wb3N0cmVxIj48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+PC9wb3N0cmVxPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwYXBwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cGFwcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2YyYmY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwYXBwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFeHBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBleHBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYXMgYSBKQVIgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBleHBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgYXMgYSBKQVIgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMsIGV4cG9ydGluZyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cywgZXhwb3J0aW5nIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqYXBwcHJvai5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGppbXBhcHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2phcHBjbGlwcm9qLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGpleHBhcHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FeHBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Q8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRqZXhwYXBwIj48YSBuYW1lPSJ0amV4cGFwcCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+RXhwb3J0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIGV4cG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQKLXByb2plY3QgYXMgYSBKQVIgZmlsZS48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPjxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0gPHA+VG8KLWV4cG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBmcm9tIHRoZSB3b3JrYmVuY2gsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaT48c3Bhbj5JbiB0aGUgSmF2YeKEoiBFRSBwZXJzcGVjdGl2ZSwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RXhwb3J0PC9zcGFuPjwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5VbmRlciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZWxlY3QgYW4gZXhwb3J0IGRlc3RpbmF0aW9uPC9zcGFuPiwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkoyRUU8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwIENsaWVudCBKQVIgZmlsZTwvc3Bhbj48L3NwYW4+LAotYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbGljYXRpb24gQ2xpZW50IHByb2plY3Q8L3NwYW4+IGxpc3QsCi1zZWxlY3QgdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHlvdSB3YW50IHRvIGV4cG9ydC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXN0aW5hdGlvbjwvc3Bhbj4gZmllbGQsIGVudGVyIHRoZSBmdWxsCi1wYXRoIGFuZCBKQVIgZmlsZSBuYW1lIHdoZXJlIHlvdSB3YW50IHRvIGV4cG9ydCB0aGUgYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPlRvIGV4cG9ydCBzb3VyY2UgZmlsZXMsIHNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RXhwb3J0Ci1zb3VyY2UgZmlsZXM8L3NwYW4+IGNoZWNrIGJveC48L3NwYW4+PC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPklmIHlvdSBhcmUgZXhwb3J0aW5nIHRvIGFuIGV4aXN0aW5nIEpBUiBmaWxlCi1hbmQgeW91IGRvIG5vdCB3YW50IHRvIGJlIHdhcm5lZCBhYm91dCBvdmVyd3JpdGluZyBpdCwgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdmVyd3JpdGUKLWV4aXN0aW5nIGZpbGU8L3NwYW4+IGNoZWNrIGJveC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsY29uY2VwdHMiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2phcmNoLmh0bWwiIHRpdGxlPSJUaGUgSmF2YSAyIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpIHByb3ZpZGVzIGEgc3RhbmRhcmQgZm9yIGRldmVsb3BpbmcgbXVsdGl0aWVyLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4iPkoyRUUgYXJjaGl0ZWN0dXJlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2phcHBjbGlwcm9qLmh0bWwiIHRpdGxlPSJBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgY29udGFpbiBwcm9ncmFtcyB0aGF0IHJ1biBvbiBuZXR3b3JrZWQgY2xpZW50IHN5c3RlbXMgc28gdGhlIHByb2plY3QgY2FuIGJlbmVmaXQgZnJvbSBhIHNlcnZlcidzIHRvb2xzLiI+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amFwcHByb2ouaHRtbCIgdGl0bGU9IllvdSBjYW4gdXNlIGEgd2l6YXJkIHRvIGNyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBhbmQgYWRkIGl0IHRvIGEgbmV3IG9yIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4iPkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGppbXBhcHAuaHRtbCIgdGl0bGU9IkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBhcmUgZGVwbG95ZWQgYXMgSkFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhbiBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCB0aGF0IGhhcyBiZWVuIGRlcGxveWVkIGludG8gYSBKQVIgZmlsZSBieSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC4iPkltcG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgSkFSIGZpbGU8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHBlYXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwZWFyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MWU1YjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHBlYXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGpleHBlYXIiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+RXhwb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gaW50byBhbg0KLUVBUiBmaWxlPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPkVudGVycHJpc2UgYXBwbGljYXRpb25zIGFyZSBkZXBsb3llZA0KLWluIHRoZSBmb3JtIG9mIGFuIEVBUiBmaWxlLiBVc2UgdGhlIEV4cG9ydCB3aXphcmQgdG8gZXhwb3J0IGFuIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbiBwcm9qZWN0IGludG8gYW4gRUFSIGZpbGUgZm9yIGRlcGxveW1lbnQuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+RUFSPGluZGV4dGVybT5maWxlczxpbmRleHRlcm0+ZXhwb3J0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5lbnRlcnByaXNlIGFwcGxpY2F0aW9uczxpbmRleHRlcm0+cHJvamVjdHM8aW5kZXh0ZXJtPmV4cG9ydGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHkgb3V0cHV0Y2xhc3M9ImlkX3Rhc2tib2R5Ij4NCi08Y29udGV4dCBvdXRwdXRjbGFzcz0iaWRfY29udGV4dCI+IDxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+VG8NCi1leHBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGludG8gYW4gRUFSIGZpbGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcNCi1zdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIHBlcnNwZWN0aXZlLCBjbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5FeHBvcnQ8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5VbmRlciA8dWljb250cm9sPlNlbGVjdCBhbiBleHBvcnQgZGVzdGluYXRpb248L3VpY29udHJvbD4sIGNsaWNrIDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPkoyRUU8L3VpY29udHJvbD48dWljb250cm9sPkVBUiBmaWxlPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4sDQotYW5kIHRoZW4gY2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPkVBUiBwcm9qZWN0PC91aWNvbnRyb2w+IGxpc3QsIHNlbGVjdCB0aGUgZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9uIHByb2plY3QgeW91IHdhbnQgdG8gZXhwb3J0LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPkRlc3RpbmF0aW9uPC91aWNvbnRyb2w+IGZpZWxkLCBlbnRlciB0aGUgZnVsbA0KLXBhdGggYW5kIEVBUiBmaWxlIG5hbWUgd2hlcmUgeW91IHdhbnQgdG8gZXhwb3J0IHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uDQotcHJvamVjdCB0aGF0IGlzIHNlbGVjdGVkIGluIHRoZSA8dWljb250cm9sPkVBUiBhcHBsaWNhdGlvbjwvdWljb250cm9sPiBmaWVsZC48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+VG8gZXhwb3J0IHNvdXJjZSBmaWxlcywgc2VsZWN0IHRoZSA8dWljb250cm9sPkV4cG9ydA0KLXNvdXJjZSBmaWxlczwvdWljb250cm9sPiBjaGVjayBib3guPC9jbWQ+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPklmIHlvdSBhcmUgZXhwb3J0aW5nIHRvIGFuIGV4aXN0aW5nIEVBUiBmaWxlDQotYW5kIHlvdSBkbyBub3Qgd2FudCB0byBiZSB3YXJuZWQgYWJvdXQgb3ZlcndyaXRpbmcgaXQsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5PdmVyd3JpdGUNCi1leGlzdGluZyBmaWxlPC91aWNvbnRyb2w+IGNoZWNrIGJveC48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0IG91dHB1dGNsYXNzPSJpZF9yZXN1bHQiPlRoZSB3aXphcmQgZXhwb3J0cyB0aGUgY29udGVudHMgb2YgdGhlIEVBUg0KLXByb2plY3QgdG8gdGhlIHNwZWNpZmllZCBFQVIgZmlsZS4gQWRkaXRpb25hbGx5LCBmb3IgZWFjaCBwcm9qZWN0IHRoYXQgY29ycmVzcG9uZHMNCi10byBhIG1vZHVsZSBvciB1dGlsaXR5IEpBUiBpbiB0aGUgYXBwbGljYXRpb24sIHRoZSBwcm9qZWN0IGNvbnRlbnRzIGFyZSBleHBvcnRlZA0KLWludG8gYSBuZXN0ZWQgbW9kdWxlIG9yIEpBUiBmaWxlIGluIHRoZSBFQVIgZmlsZS4gSWYgYW55IHVuc2F2ZWQgY2hhbmdlcyBleGlzdA0KLW9uIGFueSBvZiB0aGUgZmlsZXMgaW4gYW55IG9mIHRoZSByZWZlcmVuY2VkIHByb2plY3RzLCB5b3UgYXJlIHByb21wdGVkIHRvDQotc2F2ZSB0aGVzZSBmaWxlcyBwcmlvciB0byBleHBvcnQuPC9yZXN1bHQ+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHBlYXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqZXhwZWFyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZTNiZjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHBlYXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkV4cG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIGludG8gYW4gRUFSIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgYXJlIGRlcGxveWVkIGluIHRoZSBmb3JtIG9mIGFuIEVBUiBmaWxlLiBVc2UgdGhlIEV4cG9ydCB3aXphcmQgdG8gZXhwb3J0IGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBpbnRvIGFuIEVBUiBmaWxlIGZvciBkZXBsb3ltZW50LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJFbnRlcnByaXNlIGFwcGxpY2F0aW9ucyBhcmUgZGVwbG95ZWQgaW4gdGhlIGZvcm0gb2YgYW4gRUFSIGZpbGUuIFVzZSB0aGUgRXhwb3J0IHdpemFyZCB0byBleHBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGludG8gYW4gRUFSIGZpbGUgZm9yIGRlcGxveW1lbnQuIiAvPgotPG1ldGEgY29udGVudD0iRUFSLCBmaWxlcywgZXhwb3J0aW5nLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucywgcHJvamVjdHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJFQVIsIGZpbGVzLCBleHBvcnRpbmcsIGVudGVycHJpc2UgYXBwbGljYXRpb25zLCBwcm9qZWN0cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amVhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGppbXBlYXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2plYXJwcm9qLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGpleHBlYXIiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FeHBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBpbnRvIGFuCi1FQVIgZmlsZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGpleHBlYXIiPjxhIG5hbWU9InRqZXhwZWFyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5FeHBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBpbnRvIGFuCi1FQVIgZmlsZTwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF90YXNrYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgYXJlIGRlcGxveWVkCi1pbiB0aGUgZm9ybSBvZiBhbiBFQVIgZmlsZS4gVXNlIHRoZSBFeHBvcnQgd2l6YXJkIHRvIGV4cG9ydCBhbiBlbnRlcnByaXNlCi1hcHBsaWNhdGlvbiBwcm9qZWN0IGludG8gYW4gRUFSIGZpbGUgZm9yIGRlcGxveW1lbnQuPC9wPgotCi08ZGl2IGNsYXNzPSJpZF9jb250ZXh0Ij4gPHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLSA8cD5UbwotZXhwb3J0IGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBpbnRvIGFuIEVBUiBmaWxlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGk+PHNwYW4+SW4gdGhlIEphdmHihKIgRUUgcGVyc3BlY3RpdmUsIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkV4cG9ydDwvc3Bhbj48L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VW5kZXIgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2VsZWN0IGFuIGV4cG9ydCBkZXN0aW5hdGlvbjwvc3Bhbj4sIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5KMkVFPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkVBUiBmaWxlPC9zcGFuPjwvc3Bhbj4sCi1hbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FQVIgcHJvamVjdDwvc3Bhbj4gbGlzdCwgc2VsZWN0IHRoZSBlbnRlcnByaXNlCi1hcHBsaWNhdGlvbiBwcm9qZWN0IHlvdSB3YW50IHRvIGV4cG9ydC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXN0aW5hdGlvbjwvc3Bhbj4gZmllbGQsIGVudGVyIHRoZSBmdWxsCi1wYXRoIGFuZCBFQVIgZmlsZSBuYW1lIHdoZXJlIHlvdSB3YW50IHRvIGV4cG9ydCB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbgotcHJvamVjdCB0aGF0IGlzIHNlbGVjdGVkIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FQVIgYXBwbGljYXRpb248L3NwYW4+IGZpZWxkLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5UbyBleHBvcnQgc291cmNlIGZpbGVzLCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkV4cG9ydAotc291cmNlIGZpbGVzPC9zcGFuPiBjaGVjayBib3guPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5JZiB5b3UgYXJlIGV4cG9ydGluZyB0byBhbiBleGlzdGluZyBFQVIgZmlsZQotYW5kIHlvdSBkbyBub3Qgd2FudCB0byBiZSB3YXJuZWQgYWJvdXQgb3ZlcndyaXRpbmcgaXQsIHNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T3ZlcndyaXRlCi1leGlzdGluZyBmaWxlPC9zcGFuPiBjaGVjayBib3guPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9yZXN1bHQiPlRoZSB3aXphcmQgZXhwb3J0cyB0aGUgY29udGVudHMgb2YgdGhlIEVBUgotcHJvamVjdCB0byB0aGUgc3BlY2lmaWVkIEVBUiBmaWxlLiBBZGRpdGlvbmFsbHksIGZvciBlYWNoIHByb2plY3QgdGhhdCBjb3JyZXNwb25kcwotdG8gYSBtb2R1bGUgb3IgdXRpbGl0eSBKQVIgaW4gdGhlIGFwcGxpY2F0aW9uLCB0aGUgcHJvamVjdCBjb250ZW50cyBhcmUgZXhwb3J0ZWQKLWludG8gYSBuZXN0ZWQgbW9kdWxlIG9yIEpBUiBmaWxlIGluIHRoZSBFQVIgZmlsZS4gSWYgYW55IHVuc2F2ZWQgY2hhbmdlcyBleGlzdAotb24gYW55IG9mIHRoZSBmaWxlcyBpbiBhbnkgb2YgdGhlIHJlZmVyZW5jZWQgcHJvamVjdHMsIHlvdSBhcmUgcHJvbXB0ZWQgdG8KLXNhdmUgdGhlc2UgZmlsZXMgcHJpb3IgdG8gZXhwb3J0LjwvZGl2PgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiB0aXRsZT0iVGhlIEphdmEgMiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSBwcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIj5KMkVFIGFyY2hpdGVjdHVyZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiB0aXRsZT0iQW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRpZXMgdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amVhci5odG1sIiB0aXRsZT0iVXNpbmcgdGhlIHdpemFyZCB0byBjcmVhdGUgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGFsbG93cyB5b3UgdG8gcGFja2FnZSBtYW55IHdlYiBhcHBsaWNhdGlvbnMgYW5kIG1vZHVsZXMgaW4gYSBwcm9qZWN0IGFuZCBkZXBsb3kgdGhlc2UgbW9kdWxlcyBhcyBhIEoyRUUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbi4iPkNyZWF0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqaW1wZWFyLmh0bWwiIHRpdGxlPSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIEVBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGJ5IGltcG9ydGluZyBpdCBmcm9tIGEgZGVwbG95ZWQgRUFSIGZpbGUuIj5JbXBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBFQVIgZmlsZTwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cHJhci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHByYXIuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyNDA1Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cHJhci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAidGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0amV4cHJhciIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5FeHBvcnRpbmcgY29ubmVjdG9yIHByb2plY3RzIHRvIFJBUiBmaWxlczwvdGl0bGU+DQotPHNob3J0ZGVzYyBvdXRwdXRjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIGV4cG9ydCBhIGNvbm5lY3RvciBwcm9qZWN0IHRvDQotYSBSQVIgZmlsZSBpbiBwcmVwYXJhdGlvbiBmb3IgZGVwbG95aW5nIGl0IHRvIGEgc2VydmVyLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmNvbm5lY3RvciBwcm9qZWN0czxpbmRleHRlcm0+ZXhwb3J0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5SQVIgZmlsZXM8aW5kZXh0ZXJtPmV4cG9ydGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHkgb3V0cHV0Y2xhc3M9ImlkX3Rhc2tib2R5Ij4NCi08Y29udGV4dCBvdXRwdXRjbGFzcz0iaWRfY29udGV4dCI+IDxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+VG8NCi1leHBvcnQgdGhlIGNvbnRlbnRzIG9mIGEgY29ubmVjdG9yIHByb2plY3QgdG8gYSBSQVIgZmlsZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZw0KLXN0ZXBzOjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgcGVyc3BlY3RpdmUsIGNsaWNrIDxtZW51Y2FzY2FkZT48dWljb250cm9sPkZpbGU8L3VpY29udHJvbD4NCi08dWljb250cm9sPkV4cG9ydDwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPlVuZGVyIDx1aWNvbnRyb2w+U2VsZWN0IGFuIGV4cG9ydCBkZXN0aW5hdGlvbjwvdWljb250cm9sPiwgY2xpY2sgPG1lbnVjYXNjYWRlPg0KLTx1aWNvbnRyb2w+SjJFRTwvdWljb250cm9sPjx1aWNvbnRyb2w+UkFSIGZpbGU8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiwNCi1hbmQgdGhlbiBjbGljayA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+Q29ubmVjdG9yIHByb2plY3Q8L3VpY29udHJvbD4gbGlzdCwgc2VsZWN0IHRoZQ0KLWNvbm5lY3RvciBwcm9qZWN0IHRvIGV4cG9ydC48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5EZXN0aW5hdGlvbjwvdWljb250cm9sPiBmaWVsZCwgZW50ZXIgdGhlIGZ1bGwNCi1wYXRoIGFuZCBSQVIgZmlsZSBuYW1lIHdoZXJlIHlvdSB3YW50IHRvIGV4cG9ydCB0aGUgY29ubmVjdG9yIHByb2plY3QuPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPlRvIGV4cG9ydCBzb3VyY2UgZmlsZXMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5FeHBvcnQNCi1zb3VyY2UgZmlsZXM8L3VpY29udHJvbD4gY2hlY2sgYm94LjwvY21kPjwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5JZiB5b3UgYXJlIGV4cG9ydGluZyB0byBhbiBleGlzdGluZyBSQVIgZmlsZQ0KLWFuZCB5b3UgZG8gbm90IHdhbnQgdG8gYmUgd2FybmVkIGFib3V0IG92ZXJ3cml0aW5nIGl0LCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+T3ZlcndyaXRlDQotZXhpc3RpbmcgZmlsZTwvdWljb250cm9sPiBjaGVjayBib3guPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PHN0ZXByZXN1bHQgb3V0cHV0Y2xhc3M9ImlkX3Jlc3VsdCI+VGhlDQotd2l6YXJkIGV4cG9ydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBSQVIgcHJvamVjdCB0byB0aGUgc3BlY2lmaWVkIFJBUiBmaWxlLjwvc3RlcHJlc3VsdD4NCi08L3N0ZXA+DQotPC9zdGVwcz4NCi08cG9zdHJlcSBvdXRwdXRjbGFzcz0iaWRfcG9zdHJlcSI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cHJhci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpleHByYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE1MDU5Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amV4cHJhci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBleHBvcnQgYSBjb25uZWN0b3IgcHJvamVjdCB0byBhIFJBUiBmaWxlIGluIHByZXBhcmF0aW9uIGZvciBkZXBsb3lpbmcgaXQgdG8gYSBzZXJ2ZXIuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gZXhwb3J0IGEgY29ubmVjdG9yIHByb2plY3QgdG8gYSBSQVIgZmlsZSBpbiBwcmVwYXJhdGlvbiBmb3IgZGVwbG95aW5nIGl0IHRvIGEgc2VydmVyLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbm5lY3RvciBwcm9qZWN0cywgZXhwb3J0aW5nLCBSQVIgZmlsZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJjb25uZWN0b3IgcHJvamVjdHMsIGV4cG9ydGluZywgUkFSIGZpbGVzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3BoLWltcG9ydGV4cG9ydC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqZXhwcmFyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRqZXhwcmFyIj48YSBuYW1lPSJ0amV4cHJhciI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+RXhwb3J0aW5nIGNvbm5lY3RvciBwcm9qZWN0cyB0byBSQVIgZmlsZXM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfdGFza2JvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gZXhwb3J0IGEgY29ubmVjdG9yIHByb2plY3QgdG8KLWEgUkFSIGZpbGUgaW4gcHJlcGFyYXRpb24gZm9yIGRlcGxveWluZyBpdCB0byBhIHNlcnZlci48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPlRvCi1leHBvcnQgdGhlIGNvbnRlbnRzIG9mIGEgY29ubmVjdG9yIHByb2plY3QgdG8gYSBSQVIgZmlsZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbCBjbGFzcz0iaWRfc3RlcHMiPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgSmF2YeKEoiBFRSBwZXJzcGVjdGl2ZSwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RXhwb3J0PC9zcGFuPjwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VW5kZXIgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2VsZWN0IGFuIGV4cG9ydCBkZXN0aW5hdGlvbjwvc3Bhbj4sIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5KMkVFPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJBUiBmaWxlPC9zcGFuPjwvc3Bhbj4sCi1hbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29ubmVjdG9yIHByb2plY3Q8L3NwYW4+IGxpc3QsIHNlbGVjdCB0aGUKLWNvbm5lY3RvciBwcm9qZWN0IHRvIGV4cG9ydC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVzdGluYXRpb248L3NwYW4+IGZpZWxkLCBlbnRlciB0aGUgZnVsbAotcGF0aCBhbmQgUkFSIGZpbGUgbmFtZSB3aGVyZSB5b3Ugd2FudCB0byBleHBvcnQgdGhlIGNvbm5lY3RvciBwcm9qZWN0Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+VG8gZXhwb3J0IHNvdXJjZSBmaWxlcywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FeHBvcnQKLXNvdXJjZSBmaWxlczwvc3Bhbj4gY2hlY2sgYm94Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPklmIHlvdSBhcmUgZXhwb3J0aW5nIHRvIGFuIGV4aXN0aW5nIFJBUiBmaWxlCi1hbmQgeW91IGRvIG5vdCB3YW50IHRvIGJlIHdhcm5lZCBhYm91dCBvdmVyd3JpdGluZyBpdCwgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdmVyd3JpdGUKLWV4aXN0aW5nIGZpbGU8L3NwYW4+IGNoZWNrIGJveC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj4gVGhlCi13aXphcmQgZXhwb3J0cyB0aGUgY29udGVudHMgb2YgdGhlIFJBUiBwcm9qZWN0IHRvIHRoZSBzcGVjaWZpZWQgUkFSIGZpbGUuCi08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy9waC1pbXBvcnRleHBvcnQuaHRtbCIgdGl0bGU9IlRoZXNlIHRvcGljcyBjb3ZlciBob3cgdG8gaW1wb3J0IGZpbGVzIGFuZCBwcm9qZWN0cyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGV4cG9ydCBmaWxlcyBhbmQgcHJvamVjdHMgdG8gZGlzay4iPkltcG9ydGluZyBhbmQgZXhwb3J0aW5nIHByb2plY3RzIGFuZCBmaWxlczwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amltcGFwcC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBhcHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhhNDdjMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amltcGFwcC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAidGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0amltcGFwcCIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5JbXBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPkFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0cyBhcmUgZGVwbG95ZWQNCi1hcyBKQVIgZmlsZXMuIFlvdSBjYW4gaW1wb3J0IGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHRoYXQgaGFzIGJlZW4gZGVwbG95ZWQNCi1pbnRvIGEgSkFSIGZpbGUgYnkgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+YXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPGluZGV4dGVybT5pbXBvcnRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPiA8cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+IDxwPlRvDQotaW1wb3J0IGFuIGFwcGxpY2F0aW9uIGNsaWVudCBKQVIgZmlsZSB1c2luZyB0aGUgd2l6YXJkLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nDQotc3RlcHM6PC9wPjwvY29udGV4dD4NCi08c3RlcHMgb3V0cHV0Y2xhc3M9ImlkX3N0ZXBzIj4NCi08c3RlcD48Y21kPkluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBFRSBwZXJzcGVjdGl2ZSwgY2xpY2sgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+SW1wb3J0PC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+VW5kZXIgPHVpY29udHJvbD5TZWxlY3QgYW4gaW1wb3J0IHNvdXJjZTwvdWljb250cm9sPiwgY2xpY2sgPG1lbnVjYXNjYWRlPg0KLTx1aWNvbnRyb2w+SjJFRTwvdWljb250cm9sPjx1aWNvbnRyb2w+QXBwIENsaWVudCBKQVIgZmlsZTwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPkFwcGxpY2F0aW9uIENsaWVudCBmaWxlPC91aWNvbnRyb2w+IGZpZWxkLCBlbnRlcg0KLXRoZSBsb2NhdGlvbiBhbmQgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlIHRoYXQgeW91IHdhbnQgdG8NCi1pbXBvcnQuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+QXBwbGljYXRpb24gQ2xpZW50IHByb2plY3Q8L3VpY29udHJvbD4gZmllbGQsDQotdHlwZSBhIG5ldyBwcm9qZWN0IG5hbWUgb3IgYWNjZXB0IHRoZSBkZWZhdWx0IHByb2plY3QgbmFtZS4gPC9jbWQ+PGluZm8+VGhlDQotYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhdGlvbg0KLWNsaWVudCBKQVIgZmlsZSwgYW5kIGl0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGxvY2F0aW9uLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5UYXJnZXQgcnVudGltZTwvdWljb250cm9sPiBkcm9wLWRvd24gbGlzdCwgc2VsZWN0DQotdGhlIGFwcGxpY2F0aW9uIHNlcnZlciB0aGF0IHlvdSB3YW50IHRvIHRhcmdldCBmb3IgeW91ciBkZXZlbG9wbWVudC4gVGhpcw0KLXNlbGVjdGlvbiBhZmZlY3RzIHRoZSBydW4gdGltZSBzZXR0aW5ncyBieSBtb2RpZnlpbmcgdGhlIGNsYXNzIHBhdGggZW50cmllcw0KLWZvciB0aGUgcHJvamVjdC48L2NtZD48L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+VG8gYWRkIHRoZSBuZXcgbW9kdWxlIHRvIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24NCi1wcm9qZWN0LCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+QWRkIHByb2plY3QgdG8gYW4gRUFSPC91aWNvbnRyb2w+IGNoZWNrIGJveA0KLWFuZCB0aGVuIHNlbGVjdCBhbiBleGlzdGluZyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgZnJvbSB0aGUgbGlzdCBvcg0KLWNyZWF0ZSBhIG5ldyBvbmUgYnkgY2xpY2tpbmcgPHVpY29udHJvbD5OZXc8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+PG5vdGU+SWYNCi15b3UgdHlwZSBhIG5ldyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgbmFtZSwgdGhlIGVudGVycHJpc2UgYXBwbGljYXRpb24NCi1wcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiB3aXRoIHRoZSBsb3dlc3QgY29tcGF0aWJsZQ0KLUoyRUUgdmVyc2lvbiBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBiZWluZyBjcmVhdGVkLiBJZiB5b3Ugd2FudA0KLXRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgdmVyc2lvbiBvciBhIGRpZmZlcmVudCBsb2NhdGlvbiBmb3IgdGhlIGVudGVycHJpc2UNCi1hcHBsaWNhdGlvbiwgeW91IG11c3QgdXNlIHRoZSBOZXcgRW50ZXJwcmlzZSBBcHBsaWNhdGlvbiBQcm9qZWN0IHdpemFyZC48L25vdGU+PC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+IHRvIGltcG9ydCB0aGUgYXBwbGljYXRpb24gY2xpZW50DQotSkFSIGZpbGUuPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBhcHAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqaW1wYXBwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYmRiMmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBhcHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkltcG9ydGluZyBhbiBhcHBsaWNhdGlvbiBjbGllbnQgSkFSIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzIGFyZSBkZXBsb3llZCBhcyBKQVIgZmlsZXMuIFlvdSBjYW4gaW1wb3J0IGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHRoYXQgaGFzIGJlZW4gZGVwbG95ZWQgaW50byBhIEpBUiBmaWxlIGJ5IHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgYXJlIGRlcGxveWVkIGFzIEpBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgdGhhdCBoYXMgYmVlbiBkZXBsb3llZCBpbnRvIGEgSkFSIGZpbGUgYnkgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQuIiAvPgotPG1ldGEgY29udGVudD0iYXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzLCBpbXBvcnRpbmciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMsIGltcG9ydGluZyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amFwcHByb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqZXhwYXBwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamFyY2guaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL2NqYXBwY2xpcHJvai5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqaW1wYXBwIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SW1wb3J0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBKQVIgZmlsZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGppbXBhcHAiPjxhIG5hbWU9InRqaW1wYXBwIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5JbXBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5BcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgYXJlIGRlcGxveWVkCi1hcyBKQVIgZmlsZXMuIFlvdSBjYW4gaW1wb3J0IGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHRoYXQgaGFzIGJlZW4gZGVwbG95ZWQKLWludG8gYSBKQVIgZmlsZSBieSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPlRvCi1pbXBvcnQgYW4gYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlIHVzaW5nIHRoZSB3aXphcmQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIEphdmHihKIgRUUgcGVyc3BlY3RpdmUsIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydDwvc3Bhbj48L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlVuZGVyIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlbGVjdCBhbiBpbXBvcnQgc291cmNlPC9zcGFuPiwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkoyRUU8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwIENsaWVudCBKQVIgZmlsZTwvc3Bhbj48L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFwcGxpY2F0aW9uIENsaWVudCBmaWxlPC9zcGFuPiBmaWVsZCwgZW50ZXIKLXRoZSBsb2NhdGlvbiBhbmQgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gY2xpZW50IEpBUiBmaWxlIHRoYXQgeW91IHdhbnQgdG8KLWltcG9ydC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbGljYXRpb24gQ2xpZW50IHByb2plY3Q8L3NwYW4+IGZpZWxkLAotdHlwZSBhIG5ldyBwcm9qZWN0IG5hbWUgb3IgYWNjZXB0IHRoZSBkZWZhdWx0IHByb2plY3QgbmFtZS4gPC9zcGFuPiBUaGUKLWFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgYXBwbGljYXRpb24KLWNsaWVudCBKQVIgZmlsZSwgYW5kIGl0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGxvY2F0aW9uLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhcmdldCBydW50aW1lPC9zcGFuPiBkcm9wLWRvd24gbGlzdCwgc2VsZWN0Ci10aGUgYXBwbGljYXRpb24gc2VydmVyIHRoYXQgeW91IHdhbnQgdG8gdGFyZ2V0IGZvciB5b3VyIGRldmVsb3BtZW50LiBUaGlzCi1zZWxlY3Rpb24gYWZmZWN0cyB0aGUgcnVuIHRpbWUgc2V0dGluZ3MgYnkgbW9kaWZ5aW5nIHRoZSBjbGFzcyBwYXRoIGVudHJpZXMKLWZvciB0aGUgcHJvamVjdC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5UbyBhZGQgdGhlIG5ldyBtb2R1bGUgdG8gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbgotcHJvamVjdCwgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3NwYW4+IGNoZWNrIGJveAotYW5kIHRoZW4gc2VsZWN0IGFuIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBmcm9tIHRoZSBsaXN0IG9yCi1jcmVhdGUgYSBuZXcgb25lIGJ5IGNsaWNraW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4uPC9zcGFuPiA8ZGl2IGNsYXNzPSJub3RlIj48c3BhbiBjbGFzcz0ibm90ZXRpdGxlIj5Ob3RlOjwvc3Bhbj4gSWYKLXlvdSB0eXBlIGEgbmV3IGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBuYW1lLCB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbgotcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24gd2l0aCB0aGUgbG93ZXN0IGNvbXBhdGlibGUKLUoyRUUgdmVyc2lvbiBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBiZWluZyBjcmVhdGVkLiBJZiB5b3Ugd2FudAotdG8gc3BlY2lmeSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9yIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciB0aGUgZW50ZXJwcmlzZQotYXBwbGljYXRpb24sIHlvdSBtdXN0IHVzZSB0aGUgTmV3IEVudGVycHJpc2UgQXBwbGljYXRpb24gUHJvamVjdCB3aXphcmQuPC9kaXY+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPiB0byBpbXBvcnQgdGhlIGFwcGxpY2F0aW9uIGNsaWVudAotSkFSIGZpbGUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsY29uY2VwdHMiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2phcmNoLmh0bWwiIHRpdGxlPSJUaGUgSmF2YSAyIFBsYXRmb3JtLCBFbnRlcnByaXNlIEVkaXRpb24gKEoyRUUpIHByb3ZpZGVzIGEgc3RhbmRhcmQgZm9yIGRldmVsb3BpbmcgbXVsdGl0aWVyLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucy4iPkoyRUUgYXJjaGl0ZWN0dXJlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2phcHBjbGlwcm9qLmh0bWwiIHRpdGxlPSJBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdHMgY29udGFpbiBwcm9ncmFtcyB0aGF0IHJ1biBvbiBuZXR3b3JrZWQgY2xpZW50IHN5c3RlbXMgc28gdGhlIHByb2plY3QgY2FuIGJlbmVmaXQgZnJvbSBhIHNlcnZlcidzIHRvb2xzLiI+QXBwbGljYXRpb24gY2xpZW50IHByb2plY3RzPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amFwcHByb2ouaHRtbCIgdGl0bGU9IllvdSBjYW4gdXNlIGEgd2l6YXJkIHRvIGNyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBhbmQgYWRkIGl0IHRvIGEgbmV3IG9yIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdC4iPkNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGpleHBhcHAuaHRtbCIgdGl0bGU9IllvdSBjYW4gZXhwb3J0IGFuIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IGFzIGEgSkFSIGZpbGUuIj5FeHBvcnRpbmcgYW4gYXBwbGljYXRpb24gY2xpZW50IHByb2plY3Q8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBlYXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqaW1wZWFyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNmM0YWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBlYXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGppbXBlYXIiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+SW1wb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gRUFSIGZpbGU8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cyBhcmUNCi1kZXBsb3llZCBpbnRvIEVBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0DQotYnkgaW1wb3J0aW5nIGl0IGZyb20gYSBkZXBsb3llZCBFQVIgZmlsZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5FQVI8aW5kZXh0ZXJtPmZpbGVzPGluZGV4dGVybT5pbXBvcnRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPmVudGVycHJpc2UgYXBwbGljYXRpb25zPGluZGV4dGVybT5wcm9qZWN0czxpbmRleHRlcm0+aW1wb3J0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keSBvdXRwdXRjbGFzcz0iaWRfdGFza2JvZHkiPg0KLTxjb250ZXh0IG91dHB1dGNsYXNzPSJpZF9jb250ZXh0Ij4gPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPiA8cD5Zb3UNCi1jYW4gYWxzbyBjaG9vc2UgdG8gaW1wb3J0IHV0aWxpdHkgSkFSIGZpbGVzIGFzIHV0aWxpdHkgPHRtIHRtY2xhc3M9InNwZWNpYWwiDQotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcHJvamVjdHMuDQotWW91IGNhbiBhbHNvIHVzZSB0aGUgd2l6YXJkIHRvIGNoYW5nZSB0aGUgbmV3IHByb2plY3QgbmFtZXMgZm9yIHRoZSBFQVIgZmlsZQ0KLWFuZCBtb2R1bGVzIHRoYXQgd2lsbCBiZSBpbXBvcnRlZC48L3A+PHA+VG8gaW1wb3J0IGFuIEVBUiBmaWxlIHVzaW5nIHRoZSB3aXphcmQsDQotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIHBlcnNwZWN0aXZlLCBjbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5JbXBvcnQ8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5VbmRlciA8dWljb250cm9sPlNlbGVjdCBhbiBpbXBvcnQgc291cmNlPC91aWNvbnRyb2w+LCBjbGljayA8bWVudWNhc2NhZGU+DQotPHVpY29udHJvbD5KMkVFPC91aWNvbnRyb2w+PHVpY29udHJvbD5FQVIgZmlsZTwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZA0KLWNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5FQVIgZmlsZTwvdWljb250cm9sPiBmaWVsZCwgZW50ZXIgdGhlIGxvY2F0aW9uDQotYW5kIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBKQVIgZmlsZSB0aGF0IHlvdSB3YW50IHRvIGltcG9ydC4gPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+RUFSIHByb2plY3Q8L3VpY29udHJvbD4gZmllbGQsIGFjY2VwdCB0aGUgZGVmYXVsdA0KLXByb2plY3QgbmFtZSBvciB0eXBlIGEgbmV3IHByb2plY3QgbmFtZS4gPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+VGFyZ2V0IHJ1bnRpbWU8L3VpY29udHJvbD4gZHJvcC1kb3duIGxpc3QsIHNlbGVjdA0KLXRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgdGhhdCB5b3Ugd2FudCB0byB0YXJnZXQgZm9yIHlvdXIgZGV2ZWxvcG1lbnQuPC9jbWQ+DQotPGluZm8+VGhpcyBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgcnVuIHRpbWUgc2V0dGluZ3MgYnkgbW9kaWZ5aW5nIHRoZSBjbGFzcw0KLXBhdGggZW50cmllcyBmb3IgdGhlIHByb2plY3QuIENsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+U2VsZWN0IGFueSB1dGlsaXR5IEpBUiBmaWxlcyBmcm9tIHRoZSBwcm9qZWN0IHRoYXQgeW91IHdhbnQgdG8NCi1pbXBvcnQgYXMgdXRpbGl0eSBwcm9qZWN0cy48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5Nb2R1bGUgUm9vdCBMb2NhdGlvbjwvdWljb250cm9sPiBmaWVsZCwgc3BlY2lmeQ0KLXRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBwcm9qZWN0cyB0aGF0IHdpbGwgYmUgaW1wb3J0ZWQgb3IgY3JlYXRlZA0KLWR1cmluZyBpbXBvcnQsIGFuZCBjbGljayA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+T24gdGhlIEVBUiBNb2R1bGUgYW5kIFV0aWxpdHkgSkFSIFByb2plY3RzIHBhZ2UsIHNlbGVjdCB0aGUgcHJvamVjdHMNCi10aGF0IHlvdSB3YW50IHRvIGltcG9ydCB3aXRoIHRoZSBFQVIgZmlsZS4gWW91IGNhbiBlZGl0IHRoZSBuZXcgcHJvamVjdCBuYW1lDQotZm9yIGVhY2ggbW9kdWxlIGFuZCB1dGlsaXR5IHByb2plY3QgdG8gYmUgaW1wb3J0ZWQuPC9jbWQ+PGluZm8+PC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+IHRvIGltcG9ydCB0aGUgY29udGVudHMgb2YgdGhlDQotRUFSIGZpbGUuPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBlYXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqaW1wZWFyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNzlmMjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXBlYXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJJbXBvcnRpbmcgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBFQVIgZmlsZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJFbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIEVBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IGJ5IGltcG9ydGluZyBpdCBmcm9tIGEgZGVwbG95ZWQgRUFSIGZpbGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdHMgYXJlIGRlcGxveWVkIGludG8gRUFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QgYnkgaW1wb3J0aW5nIGl0IGZyb20gYSBkZXBsb3llZCBFQVIgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJFQVIsIGZpbGVzLCBpbXBvcnRpbmcsIGVudGVycHJpc2UgYXBwbGljYXRpb25zLCBwcm9qZWN0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkVBUiwgZmlsZXMsIGltcG9ydGluZywgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMsIHByb2plY3RzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqZWFyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90amV4cGVhci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2phcmNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqY2lyY2xlYi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2pjaXJjbGUuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0amltcGVhciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0amltcGVhciI+PGEgbmFtZT0idGppbXBlYXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkltcG9ydGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIEVBUiBmaWxlPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzIGFyZQotZGVwbG95ZWQgaW50byBFQVIgZmlsZXMuIFlvdSBjYW4gaW1wb3J0IGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdAotYnkgaW1wb3J0aW5nIGl0IGZyb20gYSBkZXBsb3llZCBFQVIgZmlsZS48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPllvdQotY2FuIGFsc28gY2hvb3NlIHRvIGltcG9ydCB1dGlsaXR5IEpBUiBmaWxlcyBhcyB1dGlsaXR5IEphdmHihKIgcHJvamVjdHMuCi1Zb3UgY2FuIGFsc28gdXNlIHRoZSB3aXphcmQgdG8gY2hhbmdlIHRoZSBuZXcgcHJvamVjdCBuYW1lcyBmb3IgdGhlIEVBUiBmaWxlCi1hbmQgbW9kdWxlcyB0aGF0IHdpbGwgYmUgaW1wb3J0ZWQuPC9wPgotPHA+VG8gaW1wb3J0IGFuIEVBUiBmaWxlIHVzaW5nIHRoZSB3aXphcmQsCi1jb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUsIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydDwvc3Bhbj48L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlVuZGVyIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlbGVjdCBhbiBpbXBvcnQgc291cmNlPC9zcGFuPiwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkoyRUU8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RUFSIGZpbGU8L3NwYW4+PC9zcGFuPiBhbmQKLWNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FQVIgZmlsZTwvc3Bhbj4gZmllbGQsIGVudGVyIHRoZSBsb2NhdGlvbgotYW5kIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBKQVIgZmlsZSB0aGF0IHlvdSB3YW50IHRvIGltcG9ydC4gPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RUFSIHByb2plY3Q8L3NwYW4+IGZpZWxkLCBhY2NlcHQgdGhlIGRlZmF1bHQKLXByb2plY3QgbmFtZSBvciB0eXBlIGEgbmV3IHByb2plY3QgbmFtZS4gPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhcmdldCBydW50aW1lPC9zcGFuPiBkcm9wLWRvd24gbGlzdCwgc2VsZWN0Ci10aGUgYXBwbGljYXRpb24gc2VydmVyIHRoYXQgeW91IHdhbnQgdG8gdGFyZ2V0IGZvciB5b3VyIGRldmVsb3BtZW50Ljwvc3Bhbj4KLSBUaGlzIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBydW4gdGltZSBzZXR0aW5ncyBieSBtb2RpZnlpbmcgdGhlIGNsYXNzCi1wYXRoIGVudHJpZXMgZm9yIHRoZSBwcm9qZWN0LiBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBhbnkgdXRpbGl0eSBKQVIgZmlsZXMgZnJvbSB0aGUgcHJvamVjdCB0aGF0IHlvdSB3YW50IHRvCi1pbXBvcnQgYXMgdXRpbGl0eSBwcm9qZWN0cy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TW9kdWxlIFJvb3QgTG9jYXRpb248L3NwYW4+IGZpZWxkLCBzcGVjaWZ5Ci10aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgcHJvamVjdHMgdGhhdCB3aWxsIGJlIGltcG9ydGVkIG9yIGNyZWF0ZWQKLWR1cmluZyBpbXBvcnQsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5PbiB0aGUgRUFSIE1vZHVsZSBhbmQgVXRpbGl0eSBKQVIgUHJvamVjdHMgcGFnZSwgc2VsZWN0IHRoZSBwcm9qZWN0cwotdGhhdCB5b3Ugd2FudCB0byBpbXBvcnQgd2l0aCB0aGUgRUFSIGZpbGUuIFlvdSBjYW4gZWRpdCB0aGUgbmV3IHByb2plY3QgbmFtZQotZm9yIGVhY2ggbW9kdWxlIGFuZCB1dGlsaXR5IHByb2plY3QgdG8gYmUgaW1wb3J0ZWQuPC9zcGFuPiA8L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4gdG8gaW1wb3J0IHRoZSBjb250ZW50cyBvZiB0aGUKLUVBUiBmaWxlLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbGNvbmNlcHRzIj48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqYXJjaC5odG1sIiB0aXRsZT0iVGhlIEphdmEgMiBQbGF0Zm9ybSwgRW50ZXJwcmlzZSBFZGl0aW9uIChKMkVFKSBwcm92aWRlcyBhIHN0YW5kYXJkIGZvciBkZXZlbG9waW5nIG11bHRpdGllciwgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuIj5KMkVFIGFyY2hpdGVjdHVyZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NqZWFycHJvai5odG1sIiB0aXRsZT0iQW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0IHRpZXMgdG9nZXRoZXIgdGhlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBkZXBsb3kgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2pjaXJjbGUuaHRtbCIgdGl0bGU9IkEgY3ljbGljYWwgZGVwZW5kZW5jeSBiZXR3ZWVuIHR3byBvciBtb3JlIG1vZHVsZXMgaW4gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb3N0IGNvbW1vbmx5IG9jY3VycyB3aGVuIHByb2plY3RzIGFyZSBpbXBvcnRlZCBmcm9tIG91dHNpZGUgdGhlIFdvcmtiZW5jaC4iPkN5Y2xpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIEphdmEgRUUgbW9kdWxlczwvYT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGplYXIuaHRtbCIgdGl0bGU9IlVzaW5nIHRoZSB3aXphcmQgdG8gY3JlYXRlIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBhbGxvd3MgeW91IHRvIHBhY2thZ2UgbWFueSB3ZWIgYXBwbGljYXRpb25zIGFuZCBtb2R1bGVzIGluIGEgcHJvamVjdCBhbmQgZGVwbG95IHRoZXNlIG1vZHVsZXMgYXMgYSBKMkVFIGVudGVycHJpc2UgYXBwbGljYXRpb24uIj5DcmVhdGluZyBhbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3Q8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90amV4cGVhci5odG1sIiB0aXRsZT0iRW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMgYXJlIGRlcGxveWVkIGluIHRoZSBmb3JtIG9mIGFuIEVBUiBmaWxlLiBVc2UgdGhlIEV4cG9ydCB3aXphcmQgdG8gZXhwb3J0IGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCBpbnRvIGFuIEVBUiBmaWxlIGZvciBkZXBsb3ltZW50LiI+RXhwb3J0aW5nIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gaW50byBhbiBFQVIgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqY2lyY2xlYi5odG1sIiB0aXRsZT0iWW91IGNhbiByZXNvbHZlIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQuIj5Db3JyZWN0aW5nIGN5Y2xpY2FsIGRlcGVuZGVuY2llcyBhZnRlciBhbiBFQVIgaXMgaW1wb3J0ZWQ8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXByYXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqaW1wcmFyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOWEyOTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXByYXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGppbXByYXIiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+SW1wb3J0aW5nIGEgY29ubmVjdG9yIHByb2plY3QgUkFSIGZpbGU8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+Q29ubmVjdG9yIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvDQotUkFSIGZpbGVzLiBZb3UgY2FuIGltcG9ydCBhIGNvbm5lY3RvciBwcm9qZWN0IGJ5IGltcG9ydGluZyBhIGRlcGxveWVkIFJBUg0KLWZpbGUuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+Y29ubmVjdG9yIHByb2plY3RzPGluZGV4dGVybT5pbXBvcnRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPlJBUiBmaWxlczxpbmRleHRlcm0+aW1wb3J0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keSBvdXRwdXRjbGFzcz0iaWRfdGFza2JvZHkiPg0KLTxjb250ZXh0IG91dHB1dGNsYXNzPSJpZF9jb250ZXh0Ij48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+IDxwPlRvDQotaW1wb3J0IGEgY29ubmVjdG9yIHByb2plY3QgUkFSIGZpbGUgdXNpbmcgdGhlIHdpemFyZCwgY29tcGxldGUgdGhlIGZvbGxvd2luZw0KLXN0ZXBzOjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gRUUgcGVyc3BlY3RpdmUsIGNsaWNrIDxtZW51Y2FzY2FkZT48dWljb250cm9sPkZpbGU8L3VpY29udHJvbD4NCi08dWljb250cm9sPkltcG9ydDwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPlVuZGVyIDx1aWNvbnRyb2w+U2VsZWN0IGFuIGltcG9ydCBzb3VyY2U8L3VpY29udHJvbD4sIGNsaWNrIDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPkoyRUU8L3VpY29udHJvbD48dWljb250cm9sPlJBUiBmaWxlPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+Q29ubmVjdG9yIGZpbGU8L3VpY29udHJvbD4gZmllbGQsIGVudGVyIHRoZSBmdWxsDQotcGF0aCBhbmQgbmFtZSBvZiB0aGUgY29ubmVjdG9yIFJBUiBmaWxlIHRoYXQgeW91IHdhbnQgdG8gaW1wb3J0LiA8L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5Db25uZWN0b3IgbW9kdWxlPC91aWNvbnRyb2w+IGNvbWJpbmF0aW9uIGJveCwNCi10eXBlIGEgbmV3IHByb2plY3QgbmFtZSBvciBzZWxlY3QgYSBjb25uZWN0b3IgcHJvamVjdCBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdC4gPC9jbWQ+DQotPGluZm8+SWYgeW91IHR5cGUgYSBuZXcgcHJvamVjdCBuYW1lIGluIHRoaXMgZmllbGQsIHRoZSBjb25uZWN0b3IgcHJvamVjdA0KLXdpbGwgYmUgY3JlYXRlZCBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgY29ubmVjdG9yIFJBUiBmaWxlLCBhbmQgaXQgd2lsbA0KLXVzZSB0aGUgZGVmYXVsdCBsb2NhdGlvbi48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+VGFyZ2V0IHJ1bnRpbWU8L3VpY29udHJvbD4gZHJvcC1kb3duIGxpc3QsIHNlbGVjdA0KLXRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgdGhhdCB5b3Ugd2FudCB0byB0YXJnZXQgZm9yIHlvdXIgZGV2ZWxvcG1lbnQuIDwvY21kPg0KLTxpbmZvPlRoaXMgc2VsZWN0aW9uIGFmZmVjdHMgdGhlIHJ1bi10aW1lIHNldHRpbmdzIGJ5IG1vZGlmeWluZyB0aGUgY2xhc3MNCi1wYXRoIGVudHJpZXMgZm9yIHRoZSBwcm9qZWN0LjwvaW5mbz48L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+VG8gYWRkIHRoZSBuZXcgbW9kdWxlIHRvIGFuIGVudGVycHJpc2UgYXBwbGljYXRpb24NCi1wcm9qZWN0LCBzZWxlY3QgdGhlIDx1aWNvbnRyb2w+QWRkIHByb2plY3QgdG8gYW4gRUFSPC91aWNvbnRyb2w+IGNoZWNrIGJveA0KLWFuZCB0aGVuIHNlbGVjdCBhbiBleGlzdGluZyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uICBwcm9qZWN0IGZyb20gdGhlIGxpc3QNCi1vciBjcmVhdGUgYSBuZXcgb25lIGJ5IGNsaWNraW5nIDx1aWNvbnRyb2w+TmV3PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPkVBUiBhcHBsaWNhdGlvbjwvdWljb250cm9sPiBjb21iaW5hdGlvbiBib3gsDQotdHlwZSBhIG5ldyBwcm9qZWN0IG5hbWUgb3Igc2VsZWN0IGFuIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdA0KLWZyb20gdGhlIGRyb3AtZG93biBsaXN0LiBPciwgY2xpY2sgdGhlIDx1aWNvbnRyb2w+TmV3PC91aWNvbnRyb2w+IGJ1dHRvbiB0bw0KLWxhdW5jaCB0aGUgTmV3IEVudGVycHJpc2UgQXBwbGljYXRpb24gUHJvamVjdCB3aXphcmQuPC9jbWQ+PGluZm8+PG5vdGU+SWYNCi15b3UgdHlwZSBhIG5ldyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uICBwcm9qZWN0IG5hbWUsIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uDQotIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHdpdGggdGhlIGxvd2VzdCBjb21wYXRpYmxlDQotSjJFRSB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGJlaW5nIGNyZWF0ZWQuIElmIHlvdSB3YW50DQotdG8gc3BlY2lmeSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9yIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciB0aGUgZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9uLCB5b3UgbXVzdCB1c2UgdGhlIE5ldyBFbnRlcnByaXNlIEFwcGxpY2F0aW9uIFByb2plY3Qgd2l6YXJkLjwvbm90ZT48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4gdG8gaW1wb3J0IHRoZSBjb25uZWN0b3IgUkFSDQotZmlsZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cG9zdHJlcSBvdXRwdXRjbGFzcz0iaWRfcG9zdHJlcSI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amltcHJhci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGppbXByYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyOTJlZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90amltcHJhci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSW1wb3J0aW5nIGEgY29ubmVjdG9yIHByb2plY3QgUkFSIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQ29ubmVjdG9yIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIFJBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYSBjb25uZWN0b3IgcHJvamVjdCBieSBpbXBvcnRpbmcgYSBkZXBsb3llZCBSQVIgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ29ubmVjdG9yIHByb2plY3RzIGFyZSBkZXBsb3llZCBpbnRvIFJBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYSBjb25uZWN0b3IgcHJvamVjdCBieSBpbXBvcnRpbmcgYSBkZXBsb3llZCBSQVIgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJjb25uZWN0b3IgcHJvamVjdHMsIGltcG9ydGluZywgUkFSIGZpbGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iY29ubmVjdG9yIHByb2plY3RzLCBpbXBvcnRpbmcsIFJBUiBmaWxlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9waC1pbXBvcnRleHBvcnQuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0amltcHJhciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkltcG9ydGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IFJBUiBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0amltcHJhciI+PGEgbmFtZT0idGppbXByYXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkltcG9ydGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IFJBUiBmaWxlPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Db25uZWN0b3IgcHJvamVjdHMgYXJlIGRlcGxveWVkIGludG8KLVJBUiBmaWxlcy4gWW91IGNhbiBpbXBvcnQgYSBjb25uZWN0b3IgcHJvamVjdCBieSBpbXBvcnRpbmcgYSBkZXBsb3llZCBSQVIKLWZpbGUuPC9wPgotCi08ZGl2IGNsYXNzPSJpZF9jb250ZXh0Ij48cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPlRvCi1pbXBvcnQgYSBjb25uZWN0b3IgcHJvamVjdCBSQVIgZmlsZSB1c2luZyB0aGUgd2l6YXJkLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBKYXZh4oSiIEVFIHBlcnNwZWN0aXZlLCBjbGljayA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGU8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnQ8L3NwYW4+PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5VbmRlciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZWxlY3QgYW4gaW1wb3J0IHNvdXJjZTwvc3Bhbj4sIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5KMkVFPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJBUiBmaWxlPC9zcGFuPjwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29ubmVjdG9yIGZpbGU8L3NwYW4+IGZpZWxkLCBlbnRlciB0aGUgZnVsbAotcGF0aCBhbmQgbmFtZSBvZiB0aGUgY29ubmVjdG9yIFJBUiBmaWxlIHRoYXQgeW91IHdhbnQgdG8gaW1wb3J0LiA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q29ubmVjdG9yIG1vZHVsZTwvc3Bhbj4gY29tYmluYXRpb24gYm94LAotdHlwZSBhIG5ldyBwcm9qZWN0IG5hbWUgb3Igc2VsZWN0IGEgY29ubmVjdG9yIHByb2plY3QgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QuIDwvc3Bhbj4KLSBJZiB5b3UgdHlwZSBhIG5ldyBwcm9qZWN0IG5hbWUgaW4gdGhpcyBmaWVsZCwgdGhlIGNvbm5lY3RvciBwcm9qZWN0Ci13aWxsIGJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgdGhlIGNvbm5lY3RvciBSQVIgZmlsZSwgYW5kIGl0IHdpbGwKLXVzZSB0aGUgZGVmYXVsdCBsb2NhdGlvbi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UYXJnZXQgcnVudGltZTwvc3Bhbj4gZHJvcC1kb3duIGxpc3QsIHNlbGVjdAotdGhlIGFwcGxpY2F0aW9uIHNlcnZlciB0aGF0IHlvdSB3YW50IHRvIHRhcmdldCBmb3IgeW91ciBkZXZlbG9wbWVudC4gPC9zcGFuPgotIFRoaXMgc2VsZWN0aW9uIGFmZmVjdHMgdGhlIHJ1bi10aW1lIHNldHRpbmdzIGJ5IG1vZGlmeWluZyB0aGUgY2xhc3MKLXBhdGggZW50cmllcyBmb3IgdGhlIHByb2plY3QuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5UbyBhZGQgdGhlIG5ldyBtb2R1bGUgdG8gYW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbgotcHJvamVjdCwgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3NwYW4+IGNoZWNrIGJveAotYW5kIHRoZW4gc2VsZWN0IGFuIGV4aXN0aW5nIGVudGVycHJpc2UgYXBwbGljYXRpb24gIHByb2plY3QgZnJvbSB0aGUgbGlzdAotb3IgY3JlYXRlIGEgbmV3IG9uZSBieSBjbGlja2luZyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXc8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FQVIgYXBwbGljYXRpb248L3NwYW4+IGNvbWJpbmF0aW9uIGJveCwKLXR5cGUgYSBuZXcgcHJvamVjdCBuYW1lIG9yIHNlbGVjdCBhbiBleGlzdGluZyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QKLWZyb20gdGhlIGRyb3AtZG93biBsaXN0LiBPciwgY2xpY2sgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gYnV0dG9uIHRvCi1sYXVuY2ggdGhlIE5ldyBFbnRlcnByaXNlIEFwcGxpY2F0aW9uIFByb2plY3Qgd2l6YXJkLjwvc3Bhbj4gPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IElmCi15b3UgdHlwZSBhIG5ldyBlbnRlcnByaXNlIGFwcGxpY2F0aW9uICBwcm9qZWN0IG5hbWUsIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uCi0gcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24gd2l0aCB0aGUgbG93ZXN0IGNvbXBhdGlibGUKLUoyRUUgdmVyc2lvbiBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBiZWluZyBjcmVhdGVkLiBJZiB5b3Ugd2FudAotdG8gc3BlY2lmeSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9yIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciB0aGUgZW50ZXJwcmlzZQotYXBwbGljYXRpb24sIHlvdSBtdXN0IHVzZSB0aGUgTmV3IEVudGVycHJpc2UgQXBwbGljYXRpb24gUHJvamVjdCB3aXphcmQuPC9kaXY+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPiB0byBpbXBvcnQgdGhlIGNvbm5lY3RvciBSQVIKLWZpbGUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL3BoLWltcG9ydGV4cG9ydC5odG1sIiB0aXRsZT0iVGhlc2UgdG9waWNzIGNvdmVyIGhvdyB0byBpbXBvcnQgZmlsZXMgYW5kIHByb2plY3RzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZXhwb3J0IGZpbGVzIGFuZCBwcm9qZWN0cyB0byBkaXNrLiI+SW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgcHJvamVjdHMgYW5kIGZpbGVzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqcmFyLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anJhci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjEzNjZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqcmFyLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRqcmFyIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkNyZWF0aW5nIGEgY29ubmVjdG9yIHByb2plY3Q8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+QSBjb25uZWN0b3IgaXMgYSBKMkVFIHN0YW5kYXJkIGV4dGVuc2lvbg0KLW1lY2hhbmlzbSBmb3IgY29udGFpbmVycyB0byBwcm92aWRlIGNvbm5lY3Rpdml0eSB0byBlbnRlcnByaXNlIGluZm9ybWF0aW9uDQotc3lzdGVtcyAoRUlTcykuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+Y29ubmVjdG9yIHByb2plY3RzPGluZGV4dGVybT5jcmVhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHkgb3V0cHV0Y2xhc3M9ImlkX3Rhc2tib2R5Ij4NCi08Y29udGV4dCBvdXRwdXRjbGFzcz0iaWRfY29udGV4dCI+IDxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+QQ0KLWNvbm5lY3RvciBpcyBzcGVjaWZpYyB0byBhbiBFSVMgYW5kIGNvbnNpc3RzIG9mIGEgcmVzb3VyY2UgYWRhcHRlciBhbmQgYXBwbGljYXRpb24NCi1kZXZlbG9wbWVudCB0b29scy4gQSByZXNvdXJjZSBhZGFwdGVyIGlzIGEgc3lzdGVtLWxldmVsIHNvZnR3YXJlIGRyaXZlciB0aGF0DQotaXMgdXNlZCBieSBhbiBFSkIgY29udGFpbmVyIG9yIGFuIGFwcGxpY2F0aW9uIGNsaWVudCB0byBjb25uZWN0IHRvIGFuIEVJUy4NCi1Db25uZWN0b3JzIGNvbXBseSB3aXRoIHRoZSBKMkVFIENvbm5lY3RvciBhcmNoaXRlY3R1cmUgKEpDQSkuPC9wPjxwPkxpa2UgdGhlDQotb3RoZXIgdHlwZXMgb2YgcHJvamVjdHMsIGNvbm5lY3RvciBwcm9qZWN0cyBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBwcm9qZWN0DQotZmFjZXRzLCB3aGljaCByZXByZXNlbnQgdW5pdHMgb2YgZnVuY3Rpb25hbGl0eSBpbiB0aGUgcHJvamVjdC4gQSBuZXcgY29ubmVjdG9yDQotcHJvamVjdCBzaG91bGQgaGF2ZSB0aGUgSjJDIE1vZHVsZSBmYWNldC4gRGVwZW5kaW5nIG9uIHdoYXQgeW91IHdhbnQgdG8gdXNlDQotdGhlIHByb2plY3QgZm9yLCB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIG90aGVyIGZhY2V0cyBmb3IgdGhlIHByb2plY3QuPC9wPjxub3RlDQotdHlwZT0icmVzdHJpY3Rpb24iPkoyRUUgMS4yIHNwZWNpZmljYXRpb24gbGV2ZWwgZG9lcyBub3QgaW5jbHVkZSBjb25uZWN0b3INCi1jYXBhYmlsaXR5Ljwvbm90ZT48cD5UbyBjcmVhdGUgYSBuZXcgY29ubmVjdG9yIHByb2plY3QsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcNCi1zdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIg0KLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIHBlcnNwZWN0aXZlLCBjbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5OZXc8L3VpY29udHJvbD48dWljb250cm9sPlByb2plY3Q8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgTmV3IFByb2plY3QgV2l6YXJkLCBzZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+SjJFRTwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+Q29ubmVjdG9yIFByb2plY3Q8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgY2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPlByb2plY3QgTmFtZTwvdWljb250cm9sPiBmaWVsZCwgdHlwZSBhIG5hbWUgZm9yDQotdGhlIGNvbm5lY3RvciBwcm9qZWN0LiA8L2NtZD48L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+VG8gY2hhbmdlIHRoZSBkZWZhdWx0IHByb2plY3QgbG9jYXRpb24sIGNsZWFyDQotdGhlIDx1aWNvbnRyb2w+VXNlIGRlZmF1bHQ8L3VpY29udHJvbD4gY2hlY2sgYm94IHVuZGVyIDx1aWNvbnRyb2w+UHJvamVjdA0KLWNvbnRlbnRzPC91aWNvbnRyb2w+IGFuZCBzZWxlY3QgYSBuZXcgbG9jYXRpb24gd2l0aCB0aGUgPHVpY29udHJvbD5Ccm93c2U8L3VpY29udHJvbD4gYnV0dG9uLjwvY21kPg0KLTxpbmZvPklmIHlvdSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgcHJvamVjdCBsb2NhdGlvbiB0aGF0IGlzIGFscmVhZHkgYmVpbmcNCi11c2VkIGJ5IGFub3RoZXIgcHJvamVjdCwgdGhlIHByb2plY3QgY3JlYXRpb24gd2lsbCBmYWlsLjxub3RlPklmIHlvdSB0eXBlDQotYSBuZXcgRUFSIHByb2plY3QgbmFtZSwgdGhlIEVBUiBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbg0KLXdpdGggdGhlIGxvd2VzdCBjb21wYXRpYmxlIEoyRUUgdmVyc2lvbiBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdA0KLWJlaW5nIGNyZWF0ZWQuIElmIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgdmVyc2lvbiBvciBhIGRpZmZlcmVudCBsb2NhdGlvbg0KLWZvciB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiwgeW91IG11c3QgdXNlIHRoZSBOZXcgRW50ZXJwcmlzZSBBcHBsaWNhdGlvbg0KLVByb2plY3Qgd2l6YXJkLjwvbm90ZT48L2luZm8+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPklmIHlvdSB3YW50IHRvIGFkZCB0aGUgbmV3IHByb2plY3QgdG8gYW4NCi1lbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3QsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3VpY29udHJvbD4gY2hlY2sNCi1ib3ggYW5kIHNlbGVjdCBhIHByb2plY3QgaW4gdGhlIDx1aWNvbnRyb2w+RUFSIFByb2plY3QgTmFtZTwvdWljb250cm9sPiBsaXN0LjwvY21kPg0KLTxpbmZvPklmIHlvdSBjaG9vc2UgdG8gYWRkIHRoZSBwcm9qZWN0IHRvIGFuIGV4aXN0aW5nIEVBUiBwcm9qZWN0LCB0aGUgPHVpY29udHJvbD5UYXJnZXQNCi1ydW50aW1lPC91aWNvbnRyb2w+IGZpZWxkIGJlY29tZXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IHJ1bnRpbWUgZm9yDQotdGhlIG5ldyBwcm9qZWN0IHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgRUFSIHByb2plY3QuPC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSA8dWljb250cm9sPlRhcmdldCBydW50aW1lPC91aWNvbnRyb2w+IGZpZWxkLCBzZWxlY3QgdGhlDQotdGFyZ2V0IHJ1bnRpbWUgZm9yIHRoZSBwcm9qZWN0LjwvY21kPjwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5UbyB1c2UgYSBwcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXINCi1wcm9qZWN0LCBzZWxlY3QgYSBjb25maWd1cmF0aW9uIGluIHRoZSA8dWljb250cm9sPkNvbmZpZ3VyYXRpb248L3VpY29udHJvbD4gbGlzdC4NCi1Zb3UgY2FuIGNsaWNrIHRoZSA8dWljb250cm9sPk1vZGlmeTwvdWljb250cm9sPiBidXR0b24gdG8gZG8gdGhlIGZvbGxvd2luZzo8L2NtZD4NCi08aW5mbz48dWw+DQotPGxpPkN1c3RvbWl6ZSBwcm9qZWN0IGZhY2V0cy4gU2VsZWN0IHRoZSBjaGVjayBib3hlcyBuZXh0IHRvIHRoZSBmYWNldHMgeW91DQotd2FudCB0aGUgcHJvamVjdCB0byBoYXZlIGFuZCBzZWxlY3QgYSB2ZXJzaW9uIG51bWJlciBmb3IgZWFjaCBmYWNldC4gU2VsZWN0DQotYSBmYWNldCBuYW1lIHRvIHNlZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgZmFjZXQgaW4gdGhlIDx1aWNvbnRyb2w+RGV0YWlsczwvdWljb250cm9sPiB0YWIuDQotWW91IGNhbiBhbHNvIGNob29zZSBhIHByZXNldCBjb21iaW5hdGlvbiBvZiBmYWNldHMgZnJvbSB0aGUgPHVpY29udHJvbD5Db25maWd1cmF0aW9uczwvdWljb250cm9sPiBsaXN0LjwvbGk+DQotPGxpPkxpbWl0IHlvdXIgcHJvamVjdCB0byBiZSBjb21wYXRpYmxlIHdpdGggb25lIG9yIG1vcmUgcnVudGltZXMuIENsaWNrIHRoZSA8dWljb250cm9sPlNob3cNCi1SdW50aW1lczwvdWljb250cm9sPiB0YWIgYW5kIHNlbGVjdCB0aGUgcnVudGltZXMgdGhhdCB5b3Ugd2FudCB0aGUgcHJvamVjdA0KLXRvIGJlIGNvbXBhdGlibGUgd2l0aC4gPC9saT4NCi08L3VsPkNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIDx1aWNvbnRyb2w+U291cmNlIEZvbGRlcjwvdWljb250cm9sPiBmaWVsZCwgZW50ZXIgdGhlIG5hbWUNCi1vZiB0aGUgZm9sZGVyIHRvIHVzZSBmb3Igc291cmNlIGNvZGUuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpyYXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqcmFyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjM2Y2YmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGpyYXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIGNvbm5lY3RvciBwcm9qZWN0IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgY29ubmVjdG9yIGlzIGEgSjJFRSBzdGFuZGFyZCBleHRlbnNpb24gbWVjaGFuaXNtIGZvciBjb250YWluZXJzIHRvIHByb3ZpZGUgY29ubmVjdGl2aXR5IHRvIGVudGVycHJpc2UgaW5mb3JtYXRpb24gc3lzdGVtcyAoRUlTcykuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgY29ubmVjdG9yIGlzIGEgSjJFRSBzdGFuZGFyZCBleHRlbnNpb24gbWVjaGFuaXNtIGZvciBjb250YWluZXJzIHRvIHByb3ZpZGUgY29ubmVjdGl2aXR5IHRvIGVudGVycHJpc2UgaW5mb3JtYXRpb24gc3lzdGVtcyAoRUlTcykuIiAvPgotPG1ldGEgY29udGVudD0iY29ubmVjdG9yIHByb2plY3RzLCBjcmVhdGluZyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbm5lY3RvciBwcm9qZWN0cywgY3JlYXRpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2plYXJwcm9qLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jZmFjZXRzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGpyYXIiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhIGNvbm5lY3RvciBwcm9qZWN0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0anJhciI+PGEgbmFtZT0idGpyYXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkNyZWF0aW5nIGEgY29ubmVjdG9yIHByb2plY3Q8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfdGFza2JvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPkEgY29ubmVjdG9yIGlzIGEgSjJFRSBzdGFuZGFyZCBleHRlbnNpb24KLW1lY2hhbmlzbSBmb3IgY29udGFpbmVycyB0byBwcm92aWRlIGNvbm5lY3Rpdml0eSB0byBlbnRlcnByaXNlIGluZm9ybWF0aW9uCi1zeXN0ZW1zIChFSVNzKS48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPkEKLWNvbm5lY3RvciBpcyBzcGVjaWZpYyB0byBhbiBFSVMgYW5kIGNvbnNpc3RzIG9mIGEgcmVzb3VyY2UgYWRhcHRlciBhbmQgYXBwbGljYXRpb24KLWRldmVsb3BtZW50IHRvb2xzLiBBIHJlc291cmNlIGFkYXB0ZXIgaXMgYSBzeXN0ZW0tbGV2ZWwgc29mdHdhcmUgZHJpdmVyIHRoYXQKLWlzIHVzZWQgYnkgYW4gRUpCIGNvbnRhaW5lciBvciBhbiBhcHBsaWNhdGlvbiBjbGllbnQgdG8gY29ubmVjdCB0byBhbiBFSVMuCi1Db25uZWN0b3JzIGNvbXBseSB3aXRoIHRoZSBKMkVFIENvbm5lY3RvciBhcmNoaXRlY3R1cmUgKEpDQSkuPC9wPgotPHA+TGlrZSB0aGUKLW90aGVyIHR5cGVzIG9mIHByb2plY3RzLCBjb25uZWN0b3IgcHJvamVjdHMgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgcHJvamVjdAotZmFjZXRzLCB3aGljaCByZXByZXNlbnQgdW5pdHMgb2YgZnVuY3Rpb25hbGl0eSBpbiB0aGUgcHJvamVjdC4gQSBuZXcgY29ubmVjdG9yCi1wcm9qZWN0IHNob3VsZCBoYXZlIHRoZSBKMkMgTW9kdWxlIGZhY2V0LiBEZXBlbmRpbmcgb24gd2hhdCB5b3Ugd2FudCB0byB1c2UKLXRoZSBwcm9qZWN0IGZvciwgeW91IG1heSB3YW50IHRvIGVuYWJsZSBvdGhlciBmYWNldHMgZm9yIHRoZSBwcm9qZWN0LjwvcD4KLTxkaXYgY2xhc3M9InJlc3RyaWN0aW9uIj48c3BhbiBjbGFzcz0icmVzdHJpY3Rpb250aXRsZSI+UmVzdHJpY3Rpb246PC9zcGFuPiBKMkVFIDEuMiBzcGVjaWZpY2F0aW9uIGxldmVsIGRvZXMgbm90IGluY2x1ZGUgY29ubmVjdG9yCi1jYXBhYmlsaXR5LjwvZGl2PgotPHA+VG8gY3JlYXRlIGEgbmV3IGNvbm5lY3RvciBwcm9qZWN0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBKYXZh4oSiIEVFIHBlcnNwZWN0aXZlLCBjbGljayA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGU8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXc8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvamVjdDwvc3Bhbj48L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIE5ldyBQcm9qZWN0IFdpemFyZCwgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+SjJFRTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkNvbm5lY3RvciBQcm9qZWN0PC9zcGFuPjwvc3Bhbj4gYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByb2plY3QgTmFtZTwvc3Bhbj4gZmllbGQsIHR5cGUgYSBuYW1lIGZvcgotdGhlIGNvbm5lY3RvciBwcm9qZWN0LiA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5UbyBjaGFuZ2UgdGhlIGRlZmF1bHQgcHJvamVjdCBsb2NhdGlvbiwgY2xlYXIKLXRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Vc2UgZGVmYXVsdDwvc3Bhbj4gY2hlY2sgYm94IHVuZGVyIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByb2plY3QKLWNvbnRlbnRzPC9zcGFuPiBhbmQgc2VsZWN0IGEgbmV3IGxvY2F0aW9uIHdpdGggdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJyb3dzZTwvc3Bhbj4gYnV0dG9uLjwvc3Bhbj4KLSBJZiB5b3Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IHByb2plY3QgbG9jYXRpb24gdGhhdCBpcyBhbHJlYWR5IGJlaW5nCi11c2VkIGJ5IGFub3RoZXIgcHJvamVjdCwgdGhlIHByb2plY3QgY3JlYXRpb24gd2lsbCBmYWlsLjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBJZiB5b3UgdHlwZQotYSBuZXcgRUFSIHByb2plY3QgbmFtZSwgdGhlIEVBUiBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotd2l0aCB0aGUgbG93ZXN0IGNvbXBhdGlibGUgSjJFRSB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0Ci1iZWluZyBjcmVhdGVkLiBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHZlcnNpb24gb3IgYSBkaWZmZXJlbnQgbG9jYXRpb24KLWZvciB0aGUgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiwgeW91IG11c3QgdXNlIHRoZSBOZXcgRW50ZXJwcmlzZSBBcHBsaWNhdGlvbgotUHJvamVjdCB3aXphcmQuPC9kaXY+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPklmIHlvdSB3YW50IHRvIGFkZCB0aGUgbmV3IHByb2plY3QgdG8gYW4KLWVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCwgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3NwYW4+IGNoZWNrCi1ib3ggYW5kIHNlbGVjdCBhIHByb2plY3QgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkVBUiBQcm9qZWN0IE5hbWU8L3NwYW4+IGxpc3QuPC9zcGFuPgotIElmIHlvdSBjaG9vc2UgdG8gYWRkIHRoZSBwcm9qZWN0IHRvIGFuIGV4aXN0aW5nIEVBUiBwcm9qZWN0LCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VGFyZ2V0Ci1ydW50aW1lPC9zcGFuPiBmaWVsZCBiZWNvbWVzIGRpc2FibGVkIGJlY2F1c2UgdGhlIHRhcmdldCBydW50aW1lIGZvcgotdGhlIG5ldyBwcm9qZWN0IHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgRUFSIHByb2plY3QuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VGFyZ2V0IHJ1bnRpbWU8L3NwYW4+IGZpZWxkLCBzZWxlY3QgdGhlCi10YXJnZXQgcnVudGltZSBmb3IgdGhlIHByb2plY3QuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+VG8gdXNlIGEgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIGZvciB5b3VyCi1wcm9qZWN0LCBzZWxlY3QgYSBjb25maWd1cmF0aW9uIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db25maWd1cmF0aW9uPC9zcGFuPiBsaXN0LgotWW91IGNhbiBjbGljayB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TW9kaWZ5PC9zcGFuPiBidXR0b24gdG8gZG8gdGhlIGZvbGxvd2luZzo8L3NwYW4+Ci0gPHVsPgotPGxpPkN1c3RvbWl6ZSBwcm9qZWN0IGZhY2V0cy4gU2VsZWN0IHRoZSBjaGVjayBib3hlcyBuZXh0IHRvIHRoZSBmYWNldHMgeW91Ci13YW50IHRoZSBwcm9qZWN0IHRvIGhhdmUgYW5kIHNlbGVjdCBhIHZlcnNpb24gbnVtYmVyIGZvciBlYWNoIGZhY2V0LiBTZWxlY3QKLWEgZmFjZXQgbmFtZSB0byBzZWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IGZhY2V0IGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXRhaWxzPC9zcGFuPiB0YWIuCi1Zb3UgY2FuIGFsc28gY2hvb3NlIGEgcHJlc2V0IGNvbWJpbmF0aW9uIG9mIGZhY2V0cyBmcm9tIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db25maWd1cmF0aW9uczwvc3Bhbj4gbGlzdC48L2xpPgotCi08bGk+TGltaXQgeW91ciBwcm9qZWN0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbmUgb3IgbW9yZSBydW50aW1lcy4gQ2xpY2sgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNob3cKLVJ1bnRpbWVzPC9zcGFuPiB0YWIgYW5kIHNlbGVjdCB0aGUgcnVudGltZXMgdGhhdCB5b3Ugd2FudCB0aGUgcHJvamVjdAotdG8gYmUgY29tcGF0aWJsZSB3aXRoLiA8L2xpPgotCi08L3VsPgotQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U291cmNlIEZvbGRlcjwvc3Bhbj4gZmllbGQsIGVudGVyIHRoZSBuYW1lCi1vZiB0aGUgZm9sZGVyIHRvIHVzZSBmb3Igc291cmNlIGNvZGUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0iaWRfcG9zdHJlcSI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWxjb25jZXB0cyI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9jamVhcnByb2ouaHRtbCIgdGl0bGU9IkFuIGVudGVycHJpc2UgYXBwbGljYXRpb24gcHJvamVjdCB0aWVzIHRvZ2V0aGVyIHRoZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gZGVwbG95IGEgSjJFRSBlbnRlcnByaXNlIGFwcGxpY2F0aW9uLiI+RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0czwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL2NmYWNldHMuaHRtbCIgdGl0bGU9IkZhY2V0cyBkZWZpbmUgY2hhcmFjdGVyaXN0aWNzIGFuZCByZXF1aXJlbWVudHMgZm9yIEphdmEgRUUgcHJvamVjdHMgYW5kIGFyZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbi4iPlByb2plY3QgZmFjZXRzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdGFyZ2V0c2VydmVyLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anRhcmdldHNlcnZlci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2E1MWRkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdGFyZ2V0c2VydmVyLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRqdGFyZ2V0c2VydmVyIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPlNwZWNpZnlpbmcgdGFyZ2V0IHNlcnZlcnMgZm9yIEoyRUUgcHJvamVjdHM8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+V2hlbiB5b3UgZGV2ZWxvcCBKMkVFIGFwcGxpY2F0aW9ucywNCi15b3UgY2FuIHNwZWNpZnkgdGhlIHNlcnZlciBydW50aW1lIGVudmlyb25tZW50cyBmb3IgeW91ciBKMkVFIHByb2plY3RzLiBUaGUNCi10YXJnZXQgc2VydmVyIGlzIHNwZWNpZmllZCBkdXJpbmcgcHJvamVjdCBjcmVhdGlvbiBhbmQgaW1wb3J0LCBhbmQgaXQgY2FuDQotYmUgY2hhbmdlZCBpbiB0aGUgcHJvamVjdCBwcm9wZXJ0aWVzLiBUaGUgdGFyZ2V0IHNlcnZlciBzZXR0aW5nIGlzIHRoZSBkZWZhdWx0DQotbWVjaGFuaXNtIGZvciBzZXR0aW5nIHRoZSBjbGFzcyBwYXRoIGZvciBKMkVFIHByb2plY3RzLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkoyRUU8aW5kZXh0ZXJtPnRhcmdldCBzZXJ2ZXJzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5wcm9qZWN0czxpbmRleHRlcm0+dGFyZ2V0IHNlcnZlcnM8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPnRhcmdldA0KLXNlcnZlcnM8aW5kZXh0ZXJtPkoyRUUgYXBwbGljYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keSBvdXRwdXRjbGFzcz0iaWRfdGFza2JvZHkiPg0KLTxjb250ZXh0IG91dHB1dGNsYXNzPSJpZF9jb250ZXh0Ij48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+IDxwPkluDQotb3JkZXIgdG8gc3VwcG9ydCBkaWZmZXJlbnQgYXBwbGljYXRpb24gc2VydmVycyB0aGF0IHVzZSBkaWZmZXJlbnQgSkRLIGxldmVscw0KLWZvciB0aGVpciA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSINCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBSdW50aW1lIEVudmlyb25tZW50IChKUkUpLCB0aGUgd29ya2JlbmNoIHByb21wdHMNCi15b3UgZm9yIGEgdGFyZ2V0IHNlcnZlciBzZXR0aW5nIGZvciBlYWNoIEoyRUUgcHJvamVjdC4gRm9yIGV4YW1wbGUsIGlmIHlvdQ0KLXdhbnQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZlYXR1cmVzIG9mIEpESyAxLjQuMiwgeW91ciBhcHBsaWNhdGlvbnMgcmVxdWlyZQ0KLWRpZmZlcmVudCBjbGFzcyBwYXRoIGVudHJpZXMgdGhhbiB0aG9zZSB0aGF0IHdlcmUgdXNlZCBpbiBwcmV2aW91cyB2ZXJzaW9ucw0KLW9mIHRoZSB3b3JrYmVuY2guIEJ5IHByb21wdGluZyB5b3UgdG8gc3BlY2lmeSBhIHRhcmdldCBzZXJ2ZXIsIHRoZSB3b3JrYmVuY2gNCi1lbmZvcmNlcyB0aGF0IHByb3BlciBlbnRyaWVzIGFyZSBhZGRlZCBmb3IgcnVubmluZyBvbiB0aGUgc2VydmVyIHlvdSBjaG9vc2UuPC9wPjxwPllvdQ0KLWNhbiBhbHNvIGFkZCBtb3JlIHRoYW4gb25lIHRhcmdldCBzZXJ2ZXIgZm9yIHlvdXIgcHJvamVjdC4gSW4gdGhpcyBjYXNlLCB0aGUNCi13b3JrYmVuY2ggcHJldmVudHMgeW91IGZyb20gYWRkaW5nIGFueSBmYWNldHMgbm90IHN1cHBvcnRlZCBieSBhbGwgb2YgdGhlDQotdGFyZ2V0IHNlcnZlcnMuIElmIHlvdSBhZGQgbW9yZSB0aGFuIG9uZSB0YXJnZXQgc2VydmVyLCBjaG9vc2UgYSBzZXJ2ZXIgdGhhdA0KLXdpbGwgY29udHJpYnV0ZSB0byB0aGUgcHJvamVjdCdzIGNsYXNzIHBhdGggYXMgdGhlIHByaW1hcnkgc2VydmVyLjwvcD48cD5XaGVuDQotdGhlIHByb2plY3QgaXMgY3JlYXRlZCwgdGhlIGNsYXNzIHBhdGggb2YgdGhlIHByb2plY3QgaXMgdXBkYXRlZCB3aXRoIHR3bw0KLWNsYXNzIHBhdGggY29udGFpbmVycy4gT25lIGNvbnRhaW5lciBpcyB0aGUgSkRLIGNvbnRhaW5lciBhbmQgdGhlIG90aGVyIGlzDQotdGhlIHNlcnZlciBjb250YWluZXIuIFRoZSBKREsgY29udGFpbmVyIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMNCi10aGUgSkFSIGZpbGVzIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHRoZSBKREsgdmVyc2lvbi4gVGhlIHNlcnZlciBjb250YWluZXINCi1wb2ludHMgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBtdWx0aXBsZSBwdWJsaWMgSkFSIGZpbGVzIGF2YWlsYWJsZQ0KLWluIHRoZSBzZWxlY3RlZCBzZXJ2ZXIuIFRoZSBwcm9qZWN0IHRoZW4gY29tcGlsZXMgYmFzZWQgb24gdGhlIHJlcXVpcmVkIEpBUg0KLWZpbGVzIGxvY2F0ZWQgaW4gdGhlc2UgZm9sZGVycywgYW5kIHlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBhZGRpbmcNCi1hZGRpdGlvbmFsIEpBUiBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIgZHVyaW5nIGRldmVsb3BtZW50LiBXaGVuIHRoZSBwcm9qZWN0DQotaXMgY29tcGlsZWQsIHRoZSBKQVIgZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBwYXRoLiBZb3UgY2FuIHN0aWxsIGFkZA0KLXlvdXIgb3duIEpBUiBmaWxlcyB0byB0aGUgY2xhc3MgcGF0aC48L3A+PHA+VGhlIHRhcmdldCBydW50aW1lIGVudmlyb25tZW50DQotaXMgc3BlY2lmaWVkIGluIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwgZmlsZSBpbg0KLXRoZSBwcm9qZWN0J3MgLnNldHRpbmdzIGZvbGRlci4gWW91IHNob3VsZCBub3QgZWRpdCB0aGlzIGZpbGUgbWFudWFsbHk7IGluc3RlYWQsDQotdXNlIHRoZSBwcm9wZXJ0aWVzIHdpbmRvdyBhcyBkZXNjcmliZWQgaW4gdGhpcyB0b3BpYy48L3A+PHA+QWxsIEoyRUUgcHJvamVjdA0KLWNyZWF0aW9uIGFuZCBpbXBvcnQgd2l6YXJkcyBwcm9tcHQgeW91IHRvIHNwZWNpZnkgdGhlIHRhcmdldCBzZXJ2ZXIgZm9yIHRoZQ0KLXJlc3VsdGluZyBwcm9qZWN0cy4gVGhlIGxpc3Qgb2YgdGFyZ2V0IHNlcnZlcnMgdGhhdCB5b3UgY2FuIGNob29zZSBmcm9tIGlzDQotZmlsdGVyZWQgYmFzZWQgb24gaW5zdGFsbGVkIHJ1bnRpbWVzLCB0aGUgSjJFRSBsZXZlbCBvZiB0aGUgYXBwbGljYXRpb24sIGFuZA0KLXRoZSBKMkVFIG1vZHVsZSB0eXBlLiBGb3IgZXhhbXBsZSwgZm9yIEVKQiBwcm9qZWN0cyBvbmx5IGFwcGxpY2F0aW9uIHNlcnZlcnMNCi10aGF0IHN1cHBvcnQgRW50ZXJwcmlzZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmFCZWFucyI+SmF2YUJlYW5zPC90bT4gYXJlIGRpc3BsYXllZC4gQWxsIHByb2plY3RzDQotaW5zaWRlIGEgc2luZ2xlIEVBUiBmaWxlIG11c3QgYmUgdGFyZ2V0ZWQgdG8gdGhlIHNhbWUgc2VydmVyLiBJZiB5b3UgY3JlYXRlDQotYSBuZXcgcHJvamVjdCBhbmQgYWRkIGl0IHRvIGFuIGV4aXN0aW5nIEVBUiBwcm9qZWN0IGR1cmluZyBjcmVhdGlvbiwgdGhlIHByb2plY3QNCi1pbmhlcml0cyB0aGUgdGFyZ2V0IHNlcnZlciBzZXR0aW5nIG9mIHRoZSBFQVIgcHJvamVjdC48L3A+PG5vdGU+VXRpbGl0eSA8dG0NCi10bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm9qZWN0cw0KLXRoYXQgYXJlIGFkZGVkIHRvIGFuIGFwcGxpY2F0aW9uIGFyZSB0YXJnZXRlZCB0byB0aGUgc2FtZSB0YXJnZXQgc2VydmVyIGFzDQotdGhlIGFwcGxpY2F0aW9uLiBXZWIgbGlicmFyeSBwcm9qZWN0cyB0aGF0IGFyZSBhZGRlZCB0byBhIFdlYiBwcm9qZWN0IGFyZQ0KLXRhcmdldGVkIHRvIHRoZSBzYW1lIHRhcmdldCBzZXJ2ZXIgYXMgdGhlIFdlYiBwcm9qZWN0Ljwvbm90ZT48cD5UbyBtb2RpZnkNCi10aGUgdGFyZ2V0IHJ1bnRpbWUgYW5kIGRlZmF1bHQgc2VydmVyIGZvciBhbiBleGlzdGluZyBwcm9qZWN0LCBjb21wbGV0ZSB0aGUNCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4NCi08c3RlcHMgb3V0cHV0Y2xhc3M9ImlkX3N0ZXBzIj4NCi08c3RlcD48Y21kPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgb2YgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEVFIHBlcnNwZWN0aXZlLCByaWdodC1jbGljayB0aGUgZW50ZXJwcmlzZQ0KLWFwcGxpY2F0aW9uIG9yIG1vZHVsZSBwcm9qZWN0LCBhbmQgc2VsZWN0IDx1aWNvbnRyb2w+UHJvcGVydGllczwvdWljb250cm9sPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIDx1aWNvbnRyb2w+VGFyZ2V0ZWQgUnVudGltZXM8L3VpY29udHJvbD4gcGFnZSBpbiB0aGUNCi1Qcm9wZXJ0aWVzIGRpYWxvZy48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgPHVpY29udHJvbD5UYXJnZXRlZCBSdW50aW1lczwvdWljb250cm9sPiBsaXN0LCBzZWxlY3QgdGhlDQotY2hlY2sgYm94ZXMgbmV4dCB0byBlYWNoIG9mIHRoZSBydW50aW1lcyB0aGF0IHlvdSB3YW50IHRvIGRldmVsb3AgdGhlIHByb2plY3QNCi1mb3IuIElmIHlvdSBkb24ndCBzZWUgdGhlIHJ1bnRpbWUgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBuZWVkIHRvIGFkZCBpdA0KLXRvIHRoZSBydW50aW1lcyBpbiB0aGUgd29ya2JlbmNoLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDx4cmVmIGZvcm1hdD0iIg0KLWhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuZG9jLnVzZXIvdG9waWNzL3R3aW5zdHByZi5kaXRhIiBzY29wZT0icGVlciI+RGVmaW5pbmcNCi10aGUgaW5zdGFsbGVkIHNlcnZlciBydW50aW1lIGVudmlyb25tZW50czwveHJlZj4uPC9jbWQ+PGluZm8+PG5vdGU+T25seSB0aGUNCi1ydW50aW1lcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb2plY3QncyBmYWNldHMgYXJlIHNob3duLiBZb3UgY2FuIHNlbGVjdCB0aGUgPHVpY29udHJvbD5TaG93DQotYWxsIHJ1bnRpbWVzPC91aWNvbnRyb2w+IGNoZWNrIGJveCB0byBkaXNwbGF5IHRoZSBydW50aW1lcyBub3QgY29tcGF0aWJsZQ0KLXdpdGggdGhlIHByb2plY3QncyBjdXJyZW50IGZhY2V0IGNvbmZpZ3VyYXRpb24uIFRoZXNlIHJ1bnRpbWVzIGFyZSBncmF5ZWQNCi1vdXQuPC9ub3RlPjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5UbyBzZWxlY3QgdGhlIHByaW1hcnkgcnVudGltZSwgY2xpY2sgb24gYSBydW50aW1lIGFuZCB0aGVuIGNsaWNrDQotdGhlIDx1aWNvbnRyb2w+TWFrZSBQcmltYXJ5PC91aWNvbnRyb2w+IGJ1dHRvbi48L2NtZD48aW5mbz5JZiB5b3Ugc2VsZWN0IGFueQ0KLXJ1bnRpbWVzIGZvciB0aGUgcHJvamVjdCwgeW91IG11c3QgbWFrZSBvbmUgb2YgdGhvc2UgcnVudGltZXMgdGhlIHByaW1hcnkNCi1ydW50aW1lIGZvciB0aGUgcHJvamVjdC4gSWYgeW91IHNlbGVjdCBvbmx5IG9uZSBydW50aW1lIGZyb20gdGhlIGxpc3QsIHRoYXQNCi1ydW50aW1lIGlzIGF1dG9tYXRpY2FsbHkgbWFkZSB0aGUgcHJpbWFyeSBydW50aW1lLiBUaGUgcHJpbWFyeSBydW50aW1lIGlzDQotc2hvd24gaW4gYm9sZCB0ZXh0LjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxwb3N0cmVxIG91dHB1dGNsYXNzPSJpZF9wb3N0cmVxIj48cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIj48L3A+PC9wb3N0cmVxPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdGFyZ2V0c2VydmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anRhcmdldHNlcnZlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODFhOWRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdGFyZ2V0c2VydmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU3BlY2lmeWluZyB0YXJnZXQgc2VydmVycyBmb3IgSjJFRSBwcm9qZWN0cyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXaGVuIHlvdSBkZXZlbG9wIEoyRUUgYXBwbGljYXRpb25zLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNlcnZlciBydW50aW1lIGVudmlyb25tZW50cyBmb3IgeW91ciBKMkVFIHByb2plY3RzLiBUaGUgdGFyZ2V0IHNlcnZlciBpcyBzcGVjaWZpZWQgZHVyaW5nIHByb2plY3QgY3JlYXRpb24gYW5kIGltcG9ydCwgYW5kIGl0IGNhbiBiZSBjaGFuZ2VkIGluIHRoZSBwcm9qZWN0IHByb3BlcnRpZXMuIFRoZSB0YXJnZXQgc2VydmVyIHNldHRpbmcgaXMgdGhlIGRlZmF1bHQgbWVjaGFuaXNtIGZvciBzZXR0aW5nIHRoZSBjbGFzcyBwYXRoIGZvciBKMkVFIHByb2plY3RzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXaGVuIHlvdSBkZXZlbG9wIEoyRUUgYXBwbGljYXRpb25zLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNlcnZlciBydW50aW1lIGVudmlyb25tZW50cyBmb3IgeW91ciBKMkVFIHByb2plY3RzLiBUaGUgdGFyZ2V0IHNlcnZlciBpcyBzcGVjaWZpZWQgZHVyaW5nIHByb2plY3QgY3JlYXRpb24gYW5kIGltcG9ydCwgYW5kIGl0IGNhbiBiZSBjaGFuZ2VkIGluIHRoZSBwcm9qZWN0IHByb3BlcnRpZXMuIFRoZSB0YXJnZXQgc2VydmVyIHNldHRpbmcgaXMgdGhlIGRlZmF1bHQgbWVjaGFuaXNtIGZvciBzZXR0aW5nIHRoZSBjbGFzcyBwYXRoIGZvciBKMkVFIHByb2plY3RzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkoyRUUsIHRhcmdldCBzZXJ2ZXJzLCBwcm9qZWN0cywgdGFyZ2V0IHNlcnZlcnMsIEoyRUUgYXBwbGljYXRpb25zIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSjJFRSwgdGFyZ2V0IHNlcnZlcnMsIHByb2plY3RzLCB0YXJnZXQgc2VydmVycywgSjJFRSBhcHBsaWNhdGlvbnMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2phcmNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuZG9jLnVzZXIvdG9waWNzL3R3aW5zdHByZi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqdGFyZ2V0c2VydmVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+U3BlY2lmeWluZyB0YXJnZXQgc2VydmVycyBmb3IgSjJFRSBwcm9qZWN0czwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGp0YXJnZXRzZXJ2ZXIiPjxhIG5hbWU9InRqdGFyZ2V0c2VydmVyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9ImlkX3RpdGxlIj5TcGVjaWZ5aW5nIHRhcmdldCBzZXJ2ZXJzIGZvciBKMkVFIHByb2plY3RzPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5XaGVuIHlvdSBkZXZlbG9wIEoyRUUgYXBwbGljYXRpb25zLAoteW91IGNhbiBzcGVjaWZ5IHRoZSBzZXJ2ZXIgcnVudGltZSBlbnZpcm9ubWVudHMgZm9yIHlvdXIgSjJFRSBwcm9qZWN0cy4gVGhlCi10YXJnZXQgc2VydmVyIGlzIHNwZWNpZmllZCBkdXJpbmcgcHJvamVjdCBjcmVhdGlvbiBhbmQgaW1wb3J0LCBhbmQgaXQgY2FuCi1iZSBjaGFuZ2VkIGluIHRoZSBwcm9qZWN0IHByb3BlcnRpZXMuIFRoZSB0YXJnZXQgc2VydmVyIHNldHRpbmcgaXMgdGhlIGRlZmF1bHQKLW1lY2hhbmlzbSBmb3Igc2V0dGluZyB0aGUgY2xhc3MgcGF0aCBmb3IgSjJFRSBwcm9qZWN0cy48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPjxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0gPHA+SW4KLW9yZGVyIHRvIHN1cHBvcnQgZGlmZmVyZW50IGFwcGxpY2F0aW9uIHNlcnZlcnMgdGhhdCB1c2UgZGlmZmVyZW50IEpESyBsZXZlbHMKLWZvciB0aGVpciBKYXZh4oSiIFJ1bnRpbWUgRW52aXJvbm1lbnQgKEpSRSksIHRoZSB3b3JrYmVuY2ggcHJvbXB0cwoteW91IGZvciBhIHRhcmdldCBzZXJ2ZXIgc2V0dGluZyBmb3IgZWFjaCBKMkVFIHByb2plY3QuIEZvciBleGFtcGxlLCBpZiB5b3UKLXdhbnQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZlYXR1cmVzIG9mIEpESyAxLjQuMiwgeW91ciBhcHBsaWNhdGlvbnMgcmVxdWlyZQotZGlmZmVyZW50IGNsYXNzIHBhdGggZW50cmllcyB0aGFuIHRob3NlIHRoYXQgd2VyZSB1c2VkIGluIHByZXZpb3VzIHZlcnNpb25zCi1vZiB0aGUgd29ya2JlbmNoLiBCeSBwcm9tcHRpbmcgeW91IHRvIHNwZWNpZnkgYSB0YXJnZXQgc2VydmVyLCB0aGUgd29ya2JlbmNoCi1lbmZvcmNlcyB0aGF0IHByb3BlciBlbnRyaWVzIGFyZSBhZGRlZCBmb3IgcnVubmluZyBvbiB0aGUgc2VydmVyIHlvdSBjaG9vc2UuPC9wPgotPHA+WW91Ci1jYW4gYWxzbyBhZGQgbW9yZSB0aGFuIG9uZSB0YXJnZXQgc2VydmVyIGZvciB5b3VyIHByb2plY3QuIEluIHRoaXMgY2FzZSwgdGhlCi13b3JrYmVuY2ggcHJldmVudHMgeW91IGZyb20gYWRkaW5nIGFueSBmYWNldHMgbm90IHN1cHBvcnRlZCBieSBhbGwgb2YgdGhlCi10YXJnZXQgc2VydmVycy4gSWYgeW91IGFkZCBtb3JlIHRoYW4gb25lIHRhcmdldCBzZXJ2ZXIsIGNob29zZSBhIHNlcnZlciB0aGF0Ci13aWxsIGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QncyBjbGFzcyBwYXRoIGFzIHRoZSBwcmltYXJ5IHNlcnZlci48L3A+Ci08cD5XaGVuCi10aGUgcHJvamVjdCBpcyBjcmVhdGVkLCB0aGUgY2xhc3MgcGF0aCBvZiB0aGUgcHJvamVjdCBpcyB1cGRhdGVkIHdpdGggdHdvCi1jbGFzcyBwYXRoIGNvbnRhaW5lcnMuIE9uZSBjb250YWluZXIgaXMgdGhlIEpESyBjb250YWluZXIgYW5kIHRoZSBvdGhlciBpcwotdGhlIHNlcnZlciBjb250YWluZXIuIFRoZSBKREsgY29udGFpbmVyIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMKLXRoZSBKQVIgZmlsZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdGhlIEpESyB2ZXJzaW9uLiBUaGUgc2VydmVyIGNvbnRhaW5lcgotcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgbXVsdGlwbGUgcHVibGljIEpBUiBmaWxlcyBhdmFpbGFibGUKLWluIHRoZSBzZWxlY3RlZCBzZXJ2ZXIuIFRoZSBwcm9qZWN0IHRoZW4gY29tcGlsZXMgYmFzZWQgb24gdGhlIHJlcXVpcmVkIEpBUgotZmlsZXMgbG9jYXRlZCBpbiB0aGVzZSBmb2xkZXJzLCBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFkZGluZwotYWRkaXRpb25hbCBKQVIgZmlsZXMgZnJvbSB0aGUgc2VydmVyIGR1cmluZyBkZXZlbG9wbWVudC4gV2hlbiB0aGUgcHJvamVjdAotaXMgY29tcGlsZWQsIHRoZSBKQVIgZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBwYXRoLiBZb3UgY2FuIHN0aWxsIGFkZAoteW91ciBvd24gSkFSIGZpbGVzIHRvIHRoZSBjbGFzcyBwYXRoLjwvcD4KLTxwPlRoZSB0YXJnZXQgcnVudGltZSBlbnZpcm9ubWVudAotaXMgc3BlY2lmaWVkIGluIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwgZmlsZSBpbgotdGhlIHByb2plY3QncyAuc2V0dGluZ3MgZm9sZGVyLiBZb3Ugc2hvdWxkIG5vdCBlZGl0IHRoaXMgZmlsZSBtYW51YWxseTsgaW5zdGVhZCwKLXVzZSB0aGUgcHJvcGVydGllcyB3aW5kb3cgYXMgZGVzY3JpYmVkIGluIHRoaXMgdG9waWMuPC9wPgotPHA+QWxsIEoyRUUgcHJvamVjdAotY3JlYXRpb24gYW5kIGltcG9ydCB3aXphcmRzIHByb21wdCB5b3UgdG8gc3BlY2lmeSB0aGUgdGFyZ2V0IHNlcnZlciBmb3IgdGhlCi1yZXN1bHRpbmcgcHJvamVjdHMuIFRoZSBsaXN0IG9mIHRhcmdldCBzZXJ2ZXJzIHRoYXQgeW91IGNhbiBjaG9vc2UgZnJvbSBpcwotZmlsdGVyZWQgYmFzZWQgb24gaW5zdGFsbGVkIHJ1bnRpbWVzLCB0aGUgSjJFRSBsZXZlbCBvZiB0aGUgYXBwbGljYXRpb24sIGFuZAotdGhlIEoyRUUgbW9kdWxlIHR5cGUuIEZvciBleGFtcGxlLCBmb3IgRUpCIHByb2plY3RzIG9ubHkgYXBwbGljYXRpb24gc2VydmVycwotdGhhdCBzdXBwb3J0IEVudGVycHJpc2UgSmF2YUJlYW5z4oSiIGFyZSBkaXNwbGF5ZWQuIEFsbCBwcm9qZWN0cwotaW5zaWRlIGEgc2luZ2xlIEVBUiBmaWxlIG11c3QgYmUgdGFyZ2V0ZWQgdG8gdGhlIHNhbWUgc2VydmVyLiBJZiB5b3UgY3JlYXRlCi1hIG5ldyBwcm9qZWN0IGFuZCBhZGQgaXQgdG8gYW4gZXhpc3RpbmcgRUFSIHByb2plY3QgZHVyaW5nIGNyZWF0aW9uLCB0aGUgcHJvamVjdAotaW5oZXJpdHMgdGhlIHRhcmdldCBzZXJ2ZXIgc2V0dGluZyBvZiB0aGUgRUFSIHByb2plY3QuPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IFV0aWxpdHkgSmF2YSBwcm9qZWN0cwotdGhhdCBhcmUgYWRkZWQgdG8gYW4gYXBwbGljYXRpb24gYXJlIHRhcmdldGVkIHRvIHRoZSBzYW1lIHRhcmdldCBzZXJ2ZXIgYXMKLXRoZSBhcHBsaWNhdGlvbi4gV2ViIGxpYnJhcnkgcHJvamVjdHMgdGhhdCBhcmUgYWRkZWQgdG8gYSBXZWIgcHJvamVjdCBhcmUKLXRhcmdldGVkIHRvIHRoZSBzYW1lIHRhcmdldCBzZXJ2ZXIgYXMgdGhlIFdlYiBwcm9qZWN0LjwvZGl2PgotPHA+VG8gbW9kaWZ5Ci10aGUgdGFyZ2V0IHJ1bnRpbWUgYW5kIGRlZmF1bHQgc2VydmVyIGZvciBhbiBleGlzdGluZyBwcm9qZWN0LCBjb21wbGV0ZSB0aGUKLWZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgb2YgdGhlIEphdmEgRUUgcGVyc3BlY3RpdmUsIHJpZ2h0LWNsaWNrIHRoZSBlbnRlcnByaXNlCi1hcHBsaWNhdGlvbiBvciBtb2R1bGUgcHJvamVjdCwgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9wZXJ0aWVzPC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VGFyZ2V0ZWQgUnVudGltZXM8L3NwYW4+IHBhZ2UgaW4gdGhlCi1Qcm9wZXJ0aWVzIGRpYWxvZy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VGFyZ2V0ZWQgUnVudGltZXM8L3NwYW4+IGxpc3QsIHNlbGVjdCB0aGUKLWNoZWNrIGJveGVzIG5leHQgdG8gZWFjaCBvZiB0aGUgcnVudGltZXMgdGhhdCB5b3Ugd2FudCB0byBkZXZlbG9wIHRoZSBwcm9qZWN0Ci1mb3IuIElmIHlvdSBkb24ndCBzZWUgdGhlIHJ1bnRpbWUgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBuZWVkIHRvIGFkZCBpdAotdG8gdGhlIHJ1bnRpbWVzIGluIHRoZSB3b3JrYmVuY2guIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5kb2MudXNlci90b3BpY3MvdHdpbnN0cHJmLmh0bWwiPkRlZmluaW5nIHRoZSBpbnN0YWxsZWQgc2VydmVyIHJ1bnRpbWUgZW52aXJvbm1lbnRzPC9hPi48L3NwYW4+IDxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBPbmx5IHRoZQotcnVudGltZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm9qZWN0J3MgZmFjZXRzIGFyZSBzaG93bi4gWW91IGNhbiBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNob3cKLWFsbCBydW50aW1lczwvc3Bhbj4gY2hlY2sgYm94IHRvIGRpc3BsYXkgdGhlIHJ1bnRpbWVzIG5vdCBjb21wYXRpYmxlCi13aXRoIHRoZSBwcm9qZWN0J3MgY3VycmVudCBmYWNldCBjb25maWd1cmF0aW9uLiBUaGVzZSBydW50aW1lcyBhcmUgZ3JheWVkCi1vdXQuPC9kaXY+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIHNlbGVjdCB0aGUgcHJpbWFyeSBydW50aW1lLCBjbGljayBvbiBhIHJ1bnRpbWUgYW5kIHRoZW4gY2xpY2sKLXRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5NYWtlIFByaW1hcnk8L3NwYW4+IGJ1dHRvbi48L3NwYW4+IElmIHlvdSBzZWxlY3QgYW55Ci1ydW50aW1lcyBmb3IgdGhlIHByb2plY3QsIHlvdSBtdXN0IG1ha2Ugb25lIG9mIHRob3NlIHJ1bnRpbWVzIHRoZSBwcmltYXJ5Ci1ydW50aW1lIGZvciB0aGUgcHJvamVjdC4gSWYgeW91IHNlbGVjdCBvbmx5IG9uZSBydW50aW1lIGZyb20gdGhlIGxpc3QsIHRoYXQKLXJ1bnRpbWUgaXMgYXV0b21hdGljYWxseSBtYWRlIHRoZSBwcmltYXJ5IHJ1bnRpbWUuIFRoZSBwcmltYXJ5IHJ1bnRpbWUgaXMKLXNob3duIGluIGJvbGQgdGV4dC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0iaWRfcG9zdHJlcSI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWxjb25jZXB0cyI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9jamFyY2guaHRtbCIgdGl0bGU9IlRoZSBKYXZhIDIgUGxhdGZvcm0sIEVudGVycHJpc2UgRWRpdGlvbiAoSjJFRSkgcHJvdmlkZXMgYSBzdGFuZGFyZCBmb3IgZGV2ZWxvcGluZyBtdWx0aXRpZXIsIGVudGVycHJpc2UgYXBwbGljYXRpb25zLiI+SjJFRSBhcmNoaXRlY3R1cmU8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbGluZm8iPjxzdHJvbmc+UmVsYXRlZCBpbmZvcm1hdGlvbjwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmRvYy51c2VyL3RvcGljcy90d2luc3RwcmYuaHRtbCI+RGVmaW5pbmcgdGhlIGluc3RhbGxlZCBzZXJ2ZXIgcnVudGltZSBlbnZpcm9ubWVudHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxN2JlODEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGp2YWwiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+VmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPlRoZSB3b3JrYmVuY2ggaW5jbHVkZXMgdmFsaWRhdG9ycyB0aGF0DQotY2hlY2sgY2VydGFpbiBmaWxlcyBpbiB5b3VyIGVudGVycHJpc2UgYXBwbGljYXRpb24gbW9kdWxlIHByb2plY3RzIGZvciBlcnJvcnMuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+YnVpbGQgdmFsaWRhdGlvbjxpbmRleHRlcm0+ZW5hYmxpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPmNvZGUgdmFsaWRhdGlvbjxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPnZhbGlkYXRpb248aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keSBvdXRwdXRjbGFzcz0iaWRfdGFza2JvZHkiPg0KLTxjb250ZXh0IG91dHB1dGNsYXNzPSJpZF9jb250ZXh0Ij4gPHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPiA8cD5CeQ0KLWRlZmF1bHQsIHRoZSB3b3JrYmVuY2ggdmFsaWRhdGVzIHlvdXIgZmlsZXMgYXV0b21hdGljYWxseSBhZnRlciBhbnkgYnVpbGQsDQotaW5jbHVkaW5nIGF1dG9tYXRpYyBidWlsZHMuIFlvdSBjYW4gYWxzbyBiZWdpbiB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIG1hbnVhbGx5DQotd2l0aG91dCBidWlsZGluZy48L3A+PHA+T24gdGhlIHdvcmtiZW5jaCBQcmVmZXJlbmNlcyB3aW5kb3csIHlvdSBjYW4gZW5hYmxlDQotb3IgZGlzYWJsZSB2YWxpZGF0b3JzIHRvIGJlIHVzZWQgb24geW91ciBwcm9qZWN0cy4gQWxzbywgeW91IGNhbiBlbmFibGUgb3INCi1kaXNhYmxlIHZhbGlkYXRvcnMgZm9yIGVhY2ggZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb2R1bGUgcHJvamVjdCBpbmRpdmlkdWFsbHkNCi1vbiB0aGUgUHJvcGVydGllcyBwYWdlIGZvciB0aGF0IHByb2plY3QuPC9wPjxwPkVhY2ggdmFsaWRhdG9yIGNhbiBhcHBseSB0bw0KLWNlcnRhaW4gdHlwZXMgb2YgZmlsZXMsIGNlcnRhaW4gcHJvamVjdCBuYXR1cmVzLCBhbmQgY2VydGFpbiBwcm9qZWN0IGZhY2V0cy4NCi1XaGVuIGEgdmFsaWRhdG9yIGFwcGxpZXMgdG8gYSBwcm9qZWN0IGZhY2V0IG9yIG5hdHVyZSwgdGhlIHdvcmtiZW5jaCB1c2VzDQotdGhhdCB2YWxpZGF0b3Igb25seSBvbiBwcm9qZWN0cyB0aGF0IGhhdmUgdGhhdCBmYWNldCBvciBuYXR1cmUuIExpa2V3aXNlLA0KLW1vc3QgdmFsaWRhdG9ycyBhcHBseSBvbmx5IHRvIGNlcnRhaW4gdHlwZXMgb2YgZmlsZXMsIHNvIHRoZSB3b3JrYmVuY2ggdXNlcw0KLXRob3NlIHZhbGlkYXRvcnMgb25seSBvbiB0aG9zZSB0eXBlcyBvZiBmaWxlcy48L3A+PHA+VG8gdmFsaWRhdGUgeW91ciBmaWxlcywNCi1jb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5DbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5XaW5kb3c8L3VpY29udHJvbD48dWljb250cm9sPlByZWZlcmVuY2VzPC91aWNvbnRyb2w+DQotPC9tZW51Y2FzY2FkZT4gYW5kIHNlbGVjdCA8dWljb250cm9sPlZhbGlkYXRpb248L3VpY29udHJvbD4gaW4gdGhlIGxlZnQgcGFuZS48L2NtZD4NCi08c3RlcHJlc3VsdD5UaGUgVmFsaWRhdGlvbiBwYWdlIG9mIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3cgbGlzdHMgdGhlIHZhbGlkYXRvcnMNCi1hdmFpbGFibGUgaW4geW91ciBwcm9qZWN0IGFuZCB0aGVpciBzZXR0aW5ncy48L3N0ZXByZXN1bHQ+PC9zdGVwPg0KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPlJldmlldyB0aGUgY2hlY2sgYm94IG9wdGlvbnMgYXZhaWxhYmxlIG5lYXINCi10aGUgdG9wIG9mIHRoZSB3aW5kb3cgdG8gY3VzdG9taXplIHlvdXIgdmFsaWRhdGlvbiBzZXR0aW5nczo8L2NtZD4NCi08Y2hvaWNldGFibGU+DQotPGNoaGVhZD48Y2hvcHRpb25oZD5PcHRpb248L2Nob3B0aW9uaGQ+PGNoZGVzY2hkPkRlc2NyaXB0aW9uPC9jaGRlc2NoZD48L2NoaGVhZD4NCi08Y2hyb3c+PGNob3B0aW9uPkFsbG93IHByb2plY3RzIHRvIG92ZXJyaWRlIHRoZXNlIHByZWZlcmVuY2Ugc2V0dGluZ3M8L2Nob3B0aW9uPg0KLTxjaGRlc2M+U2VsZWN0IHRvIHNldCBpbmRpdmlkdWFsIHZhbGlkYXRpb24gc2V0dGluZ3MgZm9yIG9uZSBvciBtb3JlIG9mIHlvdXINCi1wcm9qZWN0cy48L2NoZGVzYz48L2Nocm93Pg0KLTxjaHJvdz48Y2hvcHRpb24+U3VzcGVuZCBhbGwgdmFsaWRhdG9yczwvY2hvcHRpb24+PGNoZGVzYz5TZWxlY3QgdG8gcHJldmVudA0KLXZhbGlkYXRpb24gYXQgdGhlIGdsb2JhbCBsZXZlbC48L2NoZGVzYz48L2Nocm93Pg0KLTxjaHJvdz48Y2hvcHRpb24+U2F2ZSBhbGwgbW9kaWZpZWQgcmVzb3VyY2VzIGF1dG9tYXRpY2FsbHkgcHJpb3IgdG8gdmFsaWRhdGluZzwvY2hvcHRpb24+DQotPGNoZGVzYz5TZWxlY3QgdG8gc2F2ZSByZXNvdXJjZXMgeW91IGhhdmUgbW9kaWZpZWQgYmVmb3JlIHRoZSB2YWxpZGF0aW9uIGJlZ2lucy48L2NoZGVzYz4NCi08L2Nocm93PjxjaHJvdz48Y2hvcHRpb24+U2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBwZXJmb3JtaW5nIG1hbnVhbCB2YWxpZGF0aW9uPC9jaG9wdGlvbj4NCi08Y2hkZXNjPlNlbGVjdCB0byBzaG93IGFuIGluZm9ybWF0aW9uYWwgZGlhbG9nIGFmdGVyIGEgbWFudWFsIHZhbGlkYXRpb24gcmVxdWVzdCBoYXMgY29tcGxldGVkLjwvY2hkZXNjPg0KLTwvY2hyb3c+DQotPC9jaG9pY2V0YWJsZT4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgbGlzdCBvZiB2YWxpZGF0b3JzLCBzZWxlY3QgdGhlIGNoZWNrIGJveGVzIG5leHQgdG8gZWFjaA0KLXZhbGlkYXRvciB5b3Ugd2FudCB0byB1c2UgYXQgdGhlIGdsb2JhbCBsZXZlbC48L2NtZD48aW5mbz5FYWNoIHZhbGlkYXRvciBoYXMNCi1hIGNoZWNrIGJveCB0byBzcGVjaWZ5IHdoZXRoZXIgaXQgaXMgdXNlZCBvbiBtYW51YWwgdmFsaWRhdGlvbiBhbmQvb3Igb24gYnVpbGQNCi12YWxpZGF0aW9uLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5UdW5lIGEgdmFsaWRhdG9yIGJ5IGNsaWNraW5nDQotdGhlIGJ1dHRvbiBpbiB0aGUgPHVpY29udHJvbD5TZXR0aW5nczwvdWljb250cm9sPiBjb2x1bW4uPC9jbWQ+DQotPGluZm8+Tm90IGFsbCB2YWxpZGF0b3JzIGhhdmUgYWRkaXRpb25hbCBzZXR0aW5ncy48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+QmVnaW4gdGhlIHZhbGlkYXRpb24gcHJvY2VzcyBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvY21kPg0KLTxjaG9pY2VzPg0KLTxjaG9pY2U+UmlnaHQtY2xpY2sgYSBwcm9qZWN0IGFuZCBjbGljayA8dWljb250cm9sPlZhbGlkYXRlPC91aWNvbnRyb2w+LjwvY2hvaWNlPg0KLTxjaG9pY2U+U3RhcnQgYSBidWlsZC48L2Nob2ljZT4NCi08L2Nob2ljZXM+DQotPC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdCBvdXRwdXRjbGFzcz0iaWRfcmVzdWx0Ij5BbnkgZXJyPD9QdWIgQ2FyZXQ/Pm9ycyBmb3VuZCBieSB0aGUgdmFsaWRhdG9ycw0KLWFyZSBsaXN0ZWQgaW4gdGhlIFByb2JsZW1zIHZpZXcuPHA+SWYgeW91IHdhbnQgdG8gc2V0IGluZGl2aWR1YWwgdmFsaWRhdGlvbg0KLXNldHRpbmdzIGZvciBvbmUgb3IgbW9yZSBvZiB5b3VyIHByb2plY3RzLCBzZWUgPHhyZWYgaHJlZj0idGp2YWxnbG9iYWxwcmVmLmRpdGEiPjwveHJlZj4gZm9yDQotbW9yZSBpbmZvcm1hdGlvbi48L3A+PC9yZXN1bHQ+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQotPD9QdWIgKjAwMDAwMDM5NDk/Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGFiNmEyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSB3b3JrYmVuY2ggaW5jbHVkZXMgdmFsaWRhdG9ycyB0aGF0IGNoZWNrIGNlcnRhaW4gZmlsZXMgaW4geW91ciBlbnRlcnByaXNlIGFwcGxpY2F0aW9uIG1vZHVsZSBwcm9qZWN0cyBmb3IgZXJyb3JzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgd29ya2JlbmNoIGluY2x1ZGVzIHZhbGlkYXRvcnMgdGhhdCBjaGVjayBjZXJ0YWluIGZpbGVzIGluIHlvdXIgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb2R1bGUgcHJvamVjdHMgZm9yIGVycm9ycy4iIC8+Ci08bWV0YSBjb250ZW50PSJidWlsZCB2YWxpZGF0aW9uLCBlbmFibGluZywgY29kZSB2YWxpZGF0aW9uLCBvdmVydmlldywgdmFsaWRhdGlvbiIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImJ1aWxkIHZhbGlkYXRpb24sIGVuYWJsaW5nLCBjb2RlIHZhbGlkYXRpb24sIG92ZXJ2aWV3LCB2YWxpZGF0aW9uIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J2YWxlcnIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J2YWxpZGF0b3JzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGp2YWwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5WYWxpZGF0aW5nIGNvZGUgaW4gZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRqdmFsIj48YSBuYW1lPSJ0anZhbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJpZF90aXRsZSI+VmFsaWRhdGluZyBjb2RlIGluIGVudGVycHJpc2UgYXBwbGljYXRpb25zPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5UaGUgd29ya2JlbmNoIGluY2x1ZGVzIHZhbGlkYXRvcnMgdGhhdAotY2hlY2sgY2VydGFpbiBmaWxlcyBpbiB5b3VyIGVudGVycHJpc2UgYXBwbGljYXRpb24gbW9kdWxlIHByb2plY3RzIGZvciBlcnJvcnMuPC9wPgotCi08ZGl2IGNsYXNzPSJpZF9jb250ZXh0Ij4gPHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLSA8cD5CeQotZGVmYXVsdCwgdGhlIHdvcmtiZW5jaCB2YWxpZGF0ZXMgeW91ciBmaWxlcyBhdXRvbWF0aWNhbGx5IGFmdGVyIGFueSBidWlsZCwKLWluY2x1ZGluZyBhdXRvbWF0aWMgYnVpbGRzLiBZb3UgY2FuIGFsc28gYmVnaW4gdGhlIHZhbGlkYXRpb24gcHJvY2VzcyBtYW51YWxseQotd2l0aG91dCBidWlsZGluZy48L3A+Ci08cD5PbiB0aGUgd29ya2JlbmNoIFByZWZlcmVuY2VzIHdpbmRvdywgeW91IGNhbiBlbmFibGUKLW9yIGRpc2FibGUgdmFsaWRhdG9ycyB0byBiZSB1c2VkIG9uIHlvdXIgcHJvamVjdHMuIEFsc28sIHlvdSBjYW4gZW5hYmxlIG9yCi1kaXNhYmxlIHZhbGlkYXRvcnMgZm9yIGVhY2ggZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb2R1bGUgcHJvamVjdCBpbmRpdmlkdWFsbHkKLW9uIHRoZSBQcm9wZXJ0aWVzIHBhZ2UgZm9yIHRoYXQgcHJvamVjdC48L3A+Ci08cD5FYWNoIHZhbGlkYXRvciBjYW4gYXBwbHkgdG8KLWNlcnRhaW4gdHlwZXMgb2YgZmlsZXMsIGNlcnRhaW4gcHJvamVjdCBuYXR1cmVzLCBhbmQgY2VydGFpbiBwcm9qZWN0IGZhY2V0cy4KLVdoZW4gYSB2YWxpZGF0b3IgYXBwbGllcyB0byBhIHByb2plY3QgZmFjZXQgb3IgbmF0dXJlLCB0aGUgd29ya2JlbmNoIHVzZXMKLXRoYXQgdmFsaWRhdG9yIG9ubHkgb24gcHJvamVjdHMgdGhhdCBoYXZlIHRoYXQgZmFjZXQgb3IgbmF0dXJlLiBMaWtld2lzZSwKLW1vc3QgdmFsaWRhdG9ycyBhcHBseSBvbmx5IHRvIGNlcnRhaW4gdHlwZXMgb2YgZmlsZXMsIHNvIHRoZSB3b3JrYmVuY2ggdXNlcwotdGhvc2UgdmFsaWRhdG9ycyBvbmx5IG9uIHRob3NlIHR5cGVzIG9mIGZpbGVzLjwvcD4KLTxwPlRvIHZhbGlkYXRlIHlvdXIgZmlsZXMsCi1jb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3c8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlZmVyZW5jZXM8L3NwYW4+Ci08L3NwYW4+IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VmFsaWRhdGlvbjwvc3Bhbj4gaW4gdGhlIGxlZnQgcGFuZS48L3NwYW4+Ci0gVGhlIFZhbGlkYXRpb24gcGFnZSBvZiB0aGUgUHJlZmVyZW5jZXMgd2luZG93IGxpc3RzIHRoZSB2YWxpZGF0b3JzCi1hdmFpbGFibGUgaW4geW91ciBwcm9qZWN0IGFuZCB0aGVpciBzZXR0aW5ncy48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPlJldmlldyB0aGUgY2hlY2sgYm94IG9wdGlvbnMgYXZhaWxhYmxlIG5lYXIKLXRoZSB0b3Agb2YgdGhlIHdpbmRvdyB0byBjdXN0b21pemUgeW91ciB2YWxpZGF0aW9uIHNldHRpbmdzOjwvc3Bhbj4KLQotPHRhYmxlIGNsYXNzPSJjaG9pY2V0YWJsZWJvcmRlciIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiIHJ1bGVzPSJyb3dzIiBmcmFtZT0iaHNpZGVzIiBib3JkZXI9IjEiPgotPHRoZWFkPjx0cj48dGggdmFsaWduPSJib3R0b20iIGlkPSJOMTAwQTktb3B0aW9uIj5PcHRpb248L3RoPgotPHRoIHZhbGlnbj0iYm90dG9tIiBpZD0iTjEwMEE5LWRlc2MiPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+Ci08dGJvZHk+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBBOS1vcHRpb24iIGlkPSJOMTAwQzIiPjxzdHJvbmc+QWxsb3cgcHJvamVjdHMgdG8gb3ZlcnJpZGUgdGhlc2UgcHJlZmVyZW5jZSBzZXR0aW5nczwvc3Ryb25nPjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEE5LWRlc2MgTjEwMEMyIj5TZWxlY3QgdG8gc2V0IGluZGl2aWR1YWwgdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3Igb25lIG9yIG1vcmUgb2YgeW91cgotcHJvamVjdHMuPC90ZD4KLTwvdHI+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBBOS1vcHRpb24iIGlkPSJOMTAwRDIiPjxzdHJvbmc+U3VzcGVuZCBhbGwgdmFsaWRhdG9yczwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBBOS1kZXNjIE4xMDBEMiI+U2VsZWN0IHRvIHByZXZlbnQKLXZhbGlkYXRpb24gYXQgdGhlIGdsb2JhbCBsZXZlbC48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEE5LW9wdGlvbiIgaWQ9Ik4xMDBFMSI+PHN0cm9uZz5TYXZlIGFsbCBtb2RpZmllZCByZXNvdXJjZXMgYXV0b21hdGljYWxseSBwcmlvciB0byB2YWxpZGF0aW5nPC9zdHJvbmc+PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwQTktZGVzYyBOMTAwRTEiPlNlbGVjdCB0byBzYXZlIHJlc291cmNlcyB5b3UgaGF2ZSBtb2RpZmllZCBiZWZvcmUgdGhlIHZhbGlkYXRpb24gYmVnaW5zLjwvdGQ+Ci0KLTwvdHI+Ci08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwQTktb3B0aW9uIiBpZD0iTjEwMEYxIj48c3Ryb25nPlNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gcGVyZm9ybWluZyBtYW51YWwgdmFsaWRhdGlvbjwvc3Ryb25nPjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEE5LWRlc2MgTjEwMEYxIj5TZWxlY3QgdG8gc2hvdyBhbiBpbmZvcm1hdGlvbmFsIGRpYWxvZyBhZnRlciBhIG1hbnVhbCB2YWxpZGF0aW9uIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC48L3RkPgotCi08L3RyPgotCi08L3Rib2R5PjwvdGFibGU+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIGxpc3Qgb2YgdmFsaWRhdG9ycywgc2VsZWN0IHRoZSBjaGVjayBib3hlcyBuZXh0IHRvIGVhY2gKLXZhbGlkYXRvciB5b3Ugd2FudCB0byB1c2UgYXQgdGhlIGdsb2JhbCBsZXZlbC48L3NwYW4+IEVhY2ggdmFsaWRhdG9yIGhhcwotYSBjaGVjayBib3ggdG8gc3BlY2lmeSB3aGV0aGVyIGl0IGlzIHVzZWQgb24gbWFudWFsIHZhbGlkYXRpb24gYW5kL29yIG9uIGJ1aWxkCi12YWxpZGF0aW9uLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHVuZSBhIHZhbGlkYXRvciBieSBjbGlja2luZwotdGhlIGJ1dHRvbiBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2V0dGluZ3M8L3NwYW4+IGNvbHVtbi48L3NwYW4+Ci0gTm90IGFsbCB2YWxpZGF0b3JzIGhhdmUgYWRkaXRpb25hbCBzZXR0aW5ncy48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkJlZ2luIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MgYnkgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kczo8L3NwYW4+Ci08dWw+Ci08bGk+UmlnaHQtY2xpY2sgYSBwcm9qZWN0IGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5WYWxpZGF0ZTwvc3Bhbj4uPC9saT4KLQotPGxpPlN0YXJ0IGEgYnVpbGQuPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0iaWRfcmVzdWx0Ij5BbnkgZXJyb3JzIGZvdW5kIGJ5IHRoZSB2YWxpZGF0b3JzCi1hcmUgbGlzdGVkIGluIHRoZSBQcm9ibGVtcyB2aWV3LjxwPklmIHlvdSB3YW50IHRvIHNldCBpbmRpdmlkdWFsIHZhbGlkYXRpb24KLXNldHRpbmdzIGZvciBvbmUgb3IgbW9yZSBvZiB5b3VyIHByb2plY3RzLCBzZWUgPGEgaHJlZj0idGp2YWxnbG9iYWxwcmVmLmh0bWwiIHRpdGxlPSJGb3IgYSBnaXZlbiBwcm9qZWN0LCB5b3UgY2FuIG92ZXJyaWRlJiMxMDt0aGUgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMuIj5PdmVycmlkaW5nIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzPC9hPiBmb3IKLW1vcmUgaW5mb3JtYXRpb24uPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVscmVmIj48c3Ryb25nPlJlbGF0ZWQgcmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy9ydmFsZXJyLmh0bWwiIHRpdGxlPSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBjb21tb24gZXJyb3IgbWVzc2FnZXMgeW91IG1heSBlbmNvdW50ZXIgd2hlbiB5b3UgdmFsaWRhdGUgeW91ciBwcm9qZWN0cy4iPkNvbW1vbiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgc29sdXRpb25zPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvcnZhbGlkYXRvcnMuaHRtbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIHZhbGlkYXRvcnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZGlmZmVyZW50IHByb2plY3QgdHlwZXMgYW5kIGdpdmVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB2YWxpZGF0b3IuIj5KMkVFIFZhbGlkYXRvcnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxkaXNhYmxlLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZhbGRpc2FibGUuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlM2FhMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZhbGRpc2FibGUuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGp2YWxkaXNhYmxlIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPkRpc2FibGluZyB2YWxpZGF0aW9uPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gZGlzYWJsZSBvbmUgb3IgbW9yZSB2YWxpZGF0b3JzDQotaW5kaXZpZHVhbGx5IG9yIGRpc2FibGUgdmFsaWRhdGlvbiBlbnRpcmVseS4gQWxzbywgeW91IGNhbiBzZXQgdmFsaWRhdGlvbg0KLXNldHRpbmdzIGZvciB5b3VyIGVudGlyZSB3b3Jrc3BhY2UgYW5kIGZvciBpbmRpdmlkdWFsIHByb2plY3RzLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPnZhbGlkYXRpb248aW5kZXh0ZXJtPmRpc2FibGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+Y29kZSB2YWxpZGF0aW9uPGluZGV4dGVybT5kaXNhYmxpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD48cD5Ubw0KLWRpc2FibGUgdmFsaWRhdG9ycyBpbiB5b3VyIHByb2plY3Qgb3Igd29ya3NwYWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5DbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5XaW5kb3c8L3VpY29udHJvbD48dWljb250cm9sPlByZWZlcmVuY2VzPC91aWNvbnRyb2w+DQotPC9tZW51Y2FzY2FkZT4gYW5kIHNlbGVjdCA8dWljb250cm9sPlZhbGlkYXRpb248L3VpY29udHJvbD4gaW4gdGhlIGxlZnQgcGFuZS48L2NtZD4NCi08c3RlcHJlc3VsdD5UaGUgVmFsaWRhdGlvbiBwYWdlIG9mIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3cgbGlzdHMgdGhlIHZhbGlkYXRvcnMNCi1hdmFpbGFibGUgaW4geW91ciBwcm9qZWN0IGFuZCB0aGVpciBzZXR0aW5ncy48L3N0ZXByZXN1bHQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+VG8gZGlzYWJsZSBpbmRpdmlkdWFsIHZhbGlkYXRvcnMsIGNsZWFyIHRoZSBjaGVjayBib3hlcyBuZXh0IHRvDQotZWFjaCB2YWxpZGF0b3IgdGhhdCB5b3Ugd2FudCB0byBkaXNhYmxlLjwvY21kPjxpbmZvPkVhY2ggdmFsaWRhdG9yIGhhcyBhIGNoZWNrDQotYm94IHRvIHNwZWNpZnkgd2hldGhlciBpdCBpcyBlbmFibGVkIGZvciBtYW51YWwgdmFsaWRhdGlvbiBvciBvbiBhIGJ1aWxkLjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+PD9QdWIgQ2FyZXQxPz5Zb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBmb2xsb3dpbmcNCi1jaGVjayBib3ggb3B0aW9ucyBvbiB0aGlzIHBhZ2U6PC9jbWQ+DQotPGNob2ljZXRhYmxlPg0KLTxjaGhlYWQ+PGNob3B0aW9uaGQ+T3B0aW9uPC9jaG9wdGlvbmhkPjxjaGRlc2NoZD5EZXNjcmlwdGlvbjwvY2hkZXNjaGQ+PC9jaGhlYWQ+DQotPGNocm93PjxjaG9wdGlvbj5BbGxvdyBwcm9qZWN0cyB0byBvdmVycmlkZSB0aGVzZSBwcmVmZXJlbmNlIHNldHRpbmdzPC9jaG9wdGlvbj4NCi08Y2hkZXNjPlNlbGVjdCB0byBzZXQgaW5kaXZpZHVhbCB2YWxpZGF0aW9uIHNldHRpbmdzIGZvciBvbmUgb3IgbW9yZSBvZiB5b3VyDQotcHJvamVjdHMuPC9jaGRlc2M+PC9jaHJvdz4NCi08Y2hyb3c+PGNob3B0aW9uPlN1c3BlbmQgYWxsIHZhbGlkYXRvcnM8L2Nob3B0aW9uPjxjaGRlc2M+U2VsZWN0IHRvIHByZXZlbnQNCi12YWxpZGF0aW9uIGF0IHRoZSBnbG9iYWwgbGV2ZWwuIElmIHlvdSBzZWxlY3QgdGhpcyBjaGVjayBib3gsIHlvdSBjYW4gc3RpbGwNCi1lbmFibGUgdmFsaWRhdGlvbiBhdCB0aGUgcHJvamVjdCBsZXZlbC48L2NoZGVzYz48L2Nocm93Pg0KLTwvY2hvaWNldGFibGU+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5PSzwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PklmIHlvdSB3YW50IHRvIHNldCBpbmRpdmlkdWFsIHZhbGlkYXRpb24gc2V0dGluZ3MgZm9yIG9uZSBvciBtb3JlDQotb2YgeW91ciBwcm9qZWN0cywgc2VlIDx4cmVmIGhyZWY9InRqdmFsZ2xvYmFscHJlZi5kaXRhIj48L3hyZWY+PC9yZXN1bHQ+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQotPD9QdWIgKjAwMDAwMDI0NDU/Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsZGlzYWJsZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxkaXNhYmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZmJiOGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxkaXNhYmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRGlzYWJsaW5nIHZhbGlkYXRpb24iIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBkaXNhYmxlIG9uZSBvciBtb3JlIHZhbGlkYXRvcnMgaW5kaXZpZHVhbGx5IG9yIGRpc2FibGUgdmFsaWRhdGlvbiBlbnRpcmVseS4gQWxzbywgeW91IGNhbiBzZXQgdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3IgeW91ciBlbnRpcmUgd29ya3NwYWNlIGFuZCBmb3IgaW5kaXZpZHVhbCBwcm9qZWN0cy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBkaXNhYmxlIG9uZSBvciBtb3JlIHZhbGlkYXRvcnMgaW5kaXZpZHVhbGx5IG9yIGRpc2FibGUgdmFsaWRhdGlvbiBlbnRpcmVseS4gQWxzbywgeW91IGNhbiBzZXQgdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3IgeW91ciBlbnRpcmUgd29ya3NwYWNlIGFuZCBmb3IgaW5kaXZpZHVhbCBwcm9qZWN0cy4iIC8+Ci08bWV0YSBjb250ZW50PSJ2YWxpZGF0aW9uLCBkaXNhYmxpbmcsIGNvZGUgdmFsaWRhdGlvbiIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InZhbGlkYXRpb24sIGRpc2FibGluZywgY29kZSB2YWxpZGF0aW9uIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsZ2xvYmFscHJlZi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGp2YWxtYW51YWwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsc2VsZWN0Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9ydHVuZXZhbGlkYXQuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0anZhbGRpc2FibGUiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EaXNhYmxpbmcgdmFsaWRhdGlvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGp2YWxkaXNhYmxlIj48YSBuYW1lPSJ0anZhbGRpc2FibGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPkRpc2FibGluZyB2YWxpZGF0aW9uPC9oMT4KLQotCi0KLTxkaXYgY2xhc3M9ImlkX3Rhc2tib2R5Ij48cCBjbGFzcz0iaWRfc2hvcnRkZXNjIj5Zb3UgY2FuIGRpc2FibGUgb25lIG9yIG1vcmUgdmFsaWRhdG9ycwotaW5kaXZpZHVhbGx5IG9yIGRpc2FibGUgdmFsaWRhdGlvbiBlbnRpcmVseS4gQWxzbywgeW91IGNhbiBzZXQgdmFsaWRhdGlvbgotc2V0dGluZ3MgZm9yIHlvdXIgZW50aXJlIHdvcmtzcGFjZSBhbmQgZm9yIGluZGl2aWR1YWwgcHJvamVjdHMuPC9wPgotCi08ZGl2IGNsYXNzPSJpZF9jb250ZXh0Ij48cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotPHA+VG8KLWRpc2FibGUgdmFsaWRhdG9ycyBpbiB5b3VyIHByb2plY3Qgb3Igd29ya3NwYWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2wgY2xhc3M9ImlkX3N0ZXBzIj4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3c8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlZmVyZW5jZXM8L3NwYW4+Ci08L3NwYW4+IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VmFsaWRhdGlvbjwvc3Bhbj4gaW4gdGhlIGxlZnQgcGFuZS48L3NwYW4+Ci0gVGhlIFZhbGlkYXRpb24gcGFnZSBvZiB0aGUgUHJlZmVyZW5jZXMgd2luZG93IGxpc3RzIHRoZSB2YWxpZGF0b3JzCi1hdmFpbGFibGUgaW4geW91ciBwcm9qZWN0IGFuZCB0aGVpciBzZXR0aW5ncy48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIGRpc2FibGUgaW5kaXZpZHVhbCB2YWxpZGF0b3JzLCBjbGVhciB0aGUgY2hlY2sgYm94ZXMgbmV4dCB0bwotZWFjaCB2YWxpZGF0b3IgdGhhdCB5b3Ugd2FudCB0byBkaXNhYmxlLjwvc3Bhbj4gRWFjaCB2YWxpZGF0b3IgaGFzIGEgY2hlY2sKLWJveCB0byBzcGVjaWZ5IHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBmb3IgbWFudWFsIHZhbGlkYXRpb24gb3Igb24gYSBidWlsZC4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+WW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgZm9sbG93aW5nCi1jaGVjayBib3ggb3B0aW9ucyBvbiB0aGlzIHBhZ2U6PC9zcGFuPgotCi08dGFibGUgY2xhc3M9ImNob2ljZXRhYmxlYm9yZGVyIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgcnVsZXM9InJvd3MiIGZyYW1lPSJoc2lkZXMiIGJvcmRlcj0iMSI+Ci08dGhlYWQ+PHRyPjx0aCB2YWxpZ249ImJvdHRvbSIgaWQ9Ik4xMDA5RC1vcHRpb24iPk9wdGlvbjwvdGg+Ci08dGggdmFsaWduPSJib3R0b20iIGlkPSJOMTAwOUQtZGVzYyI+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD4KLTx0Ym9keT4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMDlELW9wdGlvbiIgaWQ9Ik4xMDBCNiI+PHN0cm9uZz5BbGxvdyBwcm9qZWN0cyB0byBvdmVycmlkZSB0aGVzZSBwcmVmZXJlbmNlIHNldHRpbmdzPC9zdHJvbmc+PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwOUQtZGVzYyBOMTAwQjYiPlNlbGVjdCB0byBzZXQgaW5kaXZpZHVhbCB2YWxpZGF0aW9uIHNldHRpbmdzIGZvciBvbmUgb3IgbW9yZSBvZiB5b3VyCi1wcm9qZWN0cy48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMDlELW9wdGlvbiIgaWQ9Ik4xMDBDNiI+PHN0cm9uZz5TdXNwZW5kIGFsbCB2YWxpZGF0b3JzPC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMDlELWRlc2MgTjEwMEM2Ij5TZWxlY3QgdG8gcHJldmVudAotdmFsaWRhdGlvbiBhdCB0aGUgZ2xvYmFsIGxldmVsLiBJZiB5b3Ugc2VsZWN0IHRoaXMgY2hlY2sgYm94LCB5b3UgY2FuIHN0aWxsCi1lbmFibGUgdmFsaWRhdGlvbiBhdCB0aGUgcHJvamVjdCBsZXZlbC48L3RkPgotPC90cj4KLQotPC90Ym9keT48L3RhYmxlPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+SWYgeW91IHdhbnQgdG8gc2V0IGluZGl2aWR1YWwgdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3Igb25lIG9yIG1vcmUKLW9mIHlvdXIgcHJvamVjdHMsIHNlZSA8YSBocmVmPSJ0anZhbGdsb2JhbHByZWYuaHRtbCIgdGl0bGU9IkZvciBhIGdpdmVuIHByb2plY3QsIHlvdSBjYW4gb3ZlcnJpZGUmIzEwO3RoZSBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcy4iPk92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXM8L2E+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsdGFza3MiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwiIHRpdGxlPSJGb3IgYSBnaXZlbiBwcm9qZWN0LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcy4iPk92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbG1hbnVhbC5odG1sIiB0aXRsZT0iV2hlbiB5b3UgcnVuIGEgbWFudWFsIHZhbGlkYXRpb24sIGFsbCByZXNvdXJjZXMgaW4gdGhlIHNlbGVjdGVkIHByb2plY3QgYXJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbGlkYXRpb24gc2V0dGluZ3MuIj5NYW51YWxseSB2YWxpZGF0aW5nIGNvZGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbHNlbGVjdC5odG1sIiB0aXRsZT0iWW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgdmFsaWRhdG9ycyB0byBydW4gZHVyaW5nIG1hbnVhbCBhbmQgYnVpbGQgY29kZSB2YWxpZGF0aW9uLiBZb3UgY2FuIHNldCBlYWNoIHZhbGlkYXRvciB0byBydW4gb24gbWFudWFsIHZhbGlkYXRpb24sIGJ1aWxkIHZhbGlkYXRpb24sIGJvdGgsIG9yIG5laXRoZXIuIj5TZWxlY3RpbmcgY29kZSB2YWxpZGF0b3JzPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWxyZWYiPjxzdHJvbmc+UmVsYXRlZCByZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3J0dW5ldmFsaWRhdC5odG1sIiB0aXRsZT0iV2hldGhlciBvciBub3QgYSB2YWxpZGF0b3IgdmFsaWRhdGVzIGEgcGFydGljdWxhciByZXNvdXJjZSBkZXBlbmRzIG9uIHRoZSBmaWx0ZXJzIHRoYXQgYXJlIGluIHBsYWNlIGZvciB0aGF0IHZhbGlkYXRvci4iPlR1bmluZyB2YWxpZGF0b3JzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsZ2xvYmFscHJlZi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDg3ZGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRqdmFsZ2xvYmFscHJlZiIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGUgb3V0cHV0Y2xhc3M9ImlkX3RpdGxlIj5PdmVycmlkaW5nIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPkZvciBhIGdpdmVuIHByb2plY3QsIHlvdSBjYW4gb3ZlcnJpZGUNCi10aGUgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+dmFsaWRhdGlvbjxpbmRleHRlcm0+b3ZlcnJpZGluZyBnbG9iYWwgcHJlZmVyZW5jZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPmNvZGUgdmFsaWRhdGlvbjxpbmRleHRlcm0+b3ZlcnJpZGluZyBnbG9iYWwgcHJlZmVyZW5jZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPiA8cCBvdXRwdXRjbGFzcz0iYW5jaG9yX3RvcGljdG9wIj48L3A+IDxwPlRoZQ0KLWRlZmF1bHQgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcyBhcmUgc3BlY2lmaWVkIGdsb2JhbGx5IG9uIHRoZSBWYWxpZGF0aW9uIHBhZ2UNCi1vZiB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nLiBUbyBhbGxvdyBwcm9qZWN0cyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbGlkYXRpb24NCi1wcmVmZXJlbmNlcywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+V2luZG93PC91aWNvbnRyb2w+PHVpY29udHJvbD5QcmVmZXJlbmNlczwvdWljb250cm9sPg0KLTwvbWVudWNhc2NhZGU+IGFuZCBzZWxlY3QgPHVpY29udHJvbD5WYWxpZGF0aW9uPC91aWNvbnRyb2w+IGluIHRoZSBsZWZ0IHBhbmUuPC9jbWQ+DQotPHN0ZXByZXN1bHQ+VGhlIFZhbGlkYXRpb24gcGFnZSBvZiB0aGUgUHJlZmVyZW5jZXMgd2luZG93IGxpc3RzIHRoZSB2YWxpZGF0b3JzDQotYXZhaWxhYmxlIGluIHlvdXIgcHJvamVjdCBhbmQgdGhlaXIgc2V0dGluZ3MuPC9zdGVwcmVzdWx0Pjwvc3RlcD4NCi08c3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5BbGxvdyBwcm9qZWN0cyB0byBvdmVycmlkZSB0aGVzZSBwcmVmZXJlbmNlDQotc2V0dGluZ3M8L3VpY29udHJvbD4gY2hlY2sgYm94IGFuZCBjbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvY21kPg0KLTxzdGVwcmVzdWx0Pk5vdyBpbmRpdmlkdWFsIHByb2plY3RzIGNhbiBvdmVycmlkZSB0aGUgZ2xvYmFsIHByZWZlcmVuY2VzLjwvc3RlcHJlc3VsdD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayBhIHByb2plY3QgYW5kIHRoZW4gY2xpY2sgPHVpY29udHJvbD5Qcm9wZXJ0aWVzPC91aWNvbnRyb2w+LjwvY21kPjw/UHViIENhcmV0Pz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgbGVmdCBwYW5lIG9mIHRoZSBQcm9wZXJ0aWVzIHdpbmRvdywgY2xpY2sgPHVpY29udHJvbD5WYWxpZGF0aW9uPC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5PdmVycmlkZSB2YWxpZGF0aW9uIHByZWZlcmVuY2VzPC91aWNvbnRyb2w+IGNoZWNrDQotYm94LjwvY21kPjxpbmZvPlRoaXMgY2hlY2sgYm94IGlzIGF2YWlsYWJsZSBvbmx5IGlmIHlvdSBjaGVja2VkIHRoZSA8dWljb250cm9sPkFsbG93DQotcHJvamVjdHMgdG8gb3ZlcnJpZGUgdGhlc2UgcHJlZmVyZW5jZSBzZXR0aW5nczwvdWljb250cm9sPiBjaGVjayBib3ggb24gdGhlDQotd29ya2JlbmNoIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMgcGFnZS48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+VG8gcHJldmVudCB2YWxpZGF0aW9uIGZvciB0aGlzIHByb2plY3QsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5TdXNwZW5kDQotYWxsIHZhbGlkYXRvcnM8L3VpY29udHJvbD4gY2hlY2sgYm94LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSBsaXN0IG9mIHZhbGlkYXRvcnMsIHNlbGVjdCB0aGUgY2hlY2sgYm94ZXMgbmV4dCB0byBlYWNoDQotdmFsaWRhdG9yIHlvdSB3YW50IHRvIHVzZS48L2NtZD48aW5mbz5FYWNoIHZhbGlkYXRvciBoYXMgYSBjaGVjayBib3ggdG8gc3BlY2lmeQ0KLXdoZXRoZXIgaXQgaXMgdXNlZCBvbiBtYW51YWwgdmFsaWRhdGlvbiBvciBvbiBhIGJ1aWxkLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DaG9vc2UgYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIGZvciBhIHZhbGlkYXRvciBieSBjbGlja2luZw0KLXRoZSBidXR0b24gaW4gdGhlIDx1aWNvbnRyb2w+U2V0dGluZ3M8L3VpY29udHJvbD4gY29sdW1uLCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4uPC9jbWQ+DQotPGluZm8+Tm90IGFsbCB2YWxpZGF0b3JzIGhhdmUgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucy48L2luZm8+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQotPD9QdWIgKjAwMDAwMDI4MTY/Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsZ2xvYmFscHJlZi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NDU2MGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJPdmVycmlkaW5nIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkZvciBhIGdpdmVuIHByb2plY3QsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJGb3IgYSBnaXZlbiBwcm9qZWN0LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJ2YWxpZGF0aW9uLCBvdmVycmlkaW5nIGdsb2JhbCBwcmVmZXJlbmNlcywgY29kZSB2YWxpZGF0aW9uIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0idmFsaWRhdGlvbiwgb3ZlcnJpZGluZyBnbG9iYWwgcHJlZmVyZW5jZXMsIGNvZGUgdmFsaWRhdGlvbiIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZhbGRpc2FibGUuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsbWFudWFsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZhbHNlbGVjdC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGp2YWxnbG9iYWxwcmVmIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+T3ZlcnJpZGluZyBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGp2YWxnbG9iYWxwcmVmIj48YSBuYW1lPSJ0anZhbGdsb2JhbHByZWYiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPk92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfdGFza2JvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPkZvciBhIGdpdmVuIHByb2plY3QsIHlvdSBjYW4gb3ZlcnJpZGUKLXRoZSBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcy48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPiA8cCBjbGFzcz0iYW5jaG9yX3RvcGljdG9wIiAvPgotIDxwPlRoZQotZGVmYXVsdCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzIGFyZSBzcGVjaWZpZWQgZ2xvYmFsbHkgb24gdGhlIFZhbGlkYXRpb24gcGFnZQotb2YgdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4gVG8gYWxsb3cgcHJvamVjdHMgdG8gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdCB2YWxpZGF0aW9uCi1wcmVmZXJlbmNlcywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2luZG93PC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByZWZlcmVuY2VzPC9zcGFuPgotPC9zcGFuPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlZhbGlkYXRpb248L3NwYW4+IGluIHRoZSBsZWZ0IHBhbmUuPC9zcGFuPgotIFRoZSBWYWxpZGF0aW9uIHBhZ2Ugb2YgdGhlIFByZWZlcmVuY2VzIHdpbmRvdyBsaXN0cyB0aGUgdmFsaWRhdG9ycwotYXZhaWxhYmxlIGluIHlvdXIgcHJvamVjdCBhbmQgdGhlaXIgc2V0dGluZ3MuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFsbG93IHByb2plY3RzIHRvIG92ZXJyaWRlIHRoZXNlIHByZWZlcmVuY2UKLXNldHRpbmdzPC9zcGFuPiBjaGVjayBib3ggYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L3NwYW4+Ci0gTm93IGluZGl2aWR1YWwgcHJvamVjdHMgY2FuIG92ZXJyaWRlIHRoZSBnbG9iYWwgcHJlZmVyZW5jZXMuCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlJpZ2h0LWNsaWNrIGEgcHJvamVjdCBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm9wZXJ0aWVzPC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBsZWZ0IHBhbmUgb2YgdGhlIFByb3BlcnRpZXMgd2luZG93LCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5WYWxpZGF0aW9uPC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T3ZlcnJpZGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlczwvc3Bhbj4gY2hlY2sKLWJveC48L3NwYW4+IFRoaXMgY2hlY2sgYm94IGlzIGF2YWlsYWJsZSBvbmx5IGlmIHlvdSBjaGVja2VkIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbGxvdwotcHJvamVjdHMgdG8gb3ZlcnJpZGUgdGhlc2UgcHJlZmVyZW5jZSBzZXR0aW5nczwvc3Bhbj4gY2hlY2sgYm94IG9uIHRoZQotd29ya2JlbmNoIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMgcGFnZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIHByZXZlbnQgdmFsaWRhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlN1c3BlbmQKLWFsbCB2YWxpZGF0b3JzPC9zcGFuPiBjaGVjayBib3guPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIGxpc3Qgb2YgdmFsaWRhdG9ycywgc2VsZWN0IHRoZSBjaGVjayBib3hlcyBuZXh0IHRvIGVhY2gKLXZhbGlkYXRvciB5b3Ugd2FudCB0byB1c2UuPC9zcGFuPiBFYWNoIHZhbGlkYXRvciBoYXMgYSBjaGVjayBib3ggdG8gc3BlY2lmeQotd2hldGhlciBpdCBpcyB1c2VkIG9uIG1hbnVhbCB2YWxpZGF0aW9uIG9yIG9uIGEgYnVpbGQuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DaG9vc2UgYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIGZvciBhIHZhbGlkYXRvciBieSBjbGlja2luZwotdGhlIGJ1dHRvbiBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2V0dGluZ3M8L3NwYW4+IGNvbHVtbiwgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4uPC9zcGFuPgotIE5vdCBhbGwgdmFsaWRhdG9ycyBoYXZlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbnMuPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0iaWRfcG9zdHJlcSI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSIgLz4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj48ZGl2IGNsYXNzPSJyZWx0YXNrcyI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbGRpc2FibGUuaHRtbCIgdGl0bGU9IllvdSBjYW4gZGlzYWJsZSBvbmUgb3IgbW9yZSB2YWxpZGF0b3JzIGluZGl2aWR1YWxseSBvciBkaXNhYmxlIHZhbGlkYXRpb24gZW50aXJlbHkuIEFsc28sIHlvdSBjYW4gc2V0IHZhbGlkYXRpb24gc2V0dGluZ3MgZm9yIHlvdXIgZW50aXJlIHdvcmtzcGFjZSBhbmQgZm9yIGluZGl2aWR1YWwgcHJvamVjdHMuIj5EaXNhYmxpbmcgdmFsaWRhdGlvbjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqdmFsbWFudWFsLmh0bWwiIHRpdGxlPSJXaGVuIHlvdSBydW4gYSBtYW51YWwgdmFsaWRhdGlvbiwgYWxsIHJlc291cmNlcyBpbiB0aGUgc2VsZWN0ZWQgcHJvamVjdCBhcmUgdmFsaWRhdGVkIGFjY29yZGluZyB0byB0aGUgdmFsaWRhdGlvbiBzZXR0aW5ncy4iPk1hbnVhbGx5IHZhbGlkYXRpbmcgY29kZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqdmFsc2VsZWN0Lmh0bWwiIHRpdGxlPSJZb3UgY2FuIHNlbGVjdCBzcGVjaWZpYyB2YWxpZGF0b3JzIHRvIHJ1biBkdXJpbmcgbWFudWFsIGFuZCBidWlsZCBjb2RlIHZhbGlkYXRpb24uIFlvdSBjYW4gc2V0IGVhY2ggdmFsaWRhdG9yIHRvIHJ1biBvbiBtYW51YWwgdmFsaWRhdGlvbiwgYnVpbGQgdmFsaWRhdGlvbiwgYm90aCwgb3IgbmVpdGhlci4iPlNlbGVjdGluZyBjb2RlIHZhbGlkYXRvcnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHJlZiI+PHN0cm9uZz5SZWxhdGVkIHJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwiIHRpdGxlPSJXaGV0aGVyIG9yIG5vdCBhIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRlcGVuZHMgb24gdGhlIGZpbHRlcnMgdGhhdCBhcmUgaW4gcGxhY2UgZm9yIHRoYXQgdmFsaWRhdG9yLiI+VHVuaW5nIHZhbGlkYXRvcnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxtYW51YWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsbWFudWFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjgwMGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxtYW51YWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idGp2YWxtYW51YWwiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIG91dHB1dGNsYXNzPSJpZF90aXRsZSI+TWFudWFsbHkgdmFsaWRhdGluZyBjb2RlPC90aXRsZT4NCi08c2hvcnRkZXNjIG91dHB1dGNsYXNzPSJpZF9zaG9ydGRlc2MiPldoZW4geW91IHJ1biBhIG1hbnVhbCB2YWxpZGF0aW9uLCBhbGwNCi1yZXNvdXJjZXMgaW4gdGhlIHNlbGVjdGVkIHByb2plY3QgYXJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbGlkYXRpb24NCi1zZXR0aW5ncy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT52YWxpZGF0aW9uPGluZGV4dGVybT5tYW51YWw8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPmNvZGUNCi12YWxpZGF0aW9uPGluZGV4dGVybT5tYW51YWw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD4gPHA+VGhlDQotdmFsaWRhdG9ycyB1c2VkIGRlcGVuZCBvbiB0aGUgZ2xvYmFsIGFuZCBwcm9qZWN0IHZhbGlkYXRpb24gc2V0dGluZ3MuIFdoZW4NCi15b3UgdmFsaWRhdGUgYSBwcm9qZWN0IG1hbnVhbGx5LCB0aGUgZ2xvYmFsIHNldHRpbmdzIGFyZSB1c2VkIHVubGVzcyBib3RoDQotb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTo8dWw+DQotPGxpPlRoZSA8dWljb250cm9sPkFsbG93IHByb2plY3RzIHRvIG92ZXJyaWRlIHRoZXNlIHByZWZlcmVuY2Ugc2V0dGluZ3M8L3VpY29udHJvbD4gY2hlY2sNCi1ib3ggaXMgc2VsZWN0ZWQgb24gdGhlIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzIHBhZ2UuPC9saT4NCi08bGk+VGhlIDx1aWNvbnRyb2w+T3ZlcnJpZGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlczwvdWljb250cm9sPiBjaGVjayBib3ggaXMNCi1zZWxlY3RlZCBvbiB0aGUgcHJvamVjdCdzIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMgcGFnZS48L2xpPg0KLTwvdWw+PC9wPjxwPldoZXRoZXIgdGhlIHdvcmtiZW5jaCB1c2VzIHRoZSBnbG9iYWwgb3IgcHJvamVjdCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLA0KLW9ubHkgdGhlIHZhbGlkYXRvcnMgc2VsZWN0ZWQgdG8gcnVuIG9uIG1hbnVhbCB2YWxpZGF0aW9uIGFyZSB1c2VkIHdoZW4geW91DQotcnVuIGEgbWFudWFsIHZhbGlkYXRpb24uPC9wPjxwPlRvIG1hbnVhbGx5IGludm9rZSBhbiBpbW1lZGlhdGUgY29kZSB2YWxpZGF0aW9uLA0KLWNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM8P1B1YiBDYXJldD8+OjwvcD48L2NvbnRleHQ+DQotPHN0ZXBzIG91dHB1dGNsYXNzPSJpZF9zdGVwcyI+DQotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHByb2plY3QgdGhhdCB5b3Ugd2FudCB0byB2YWxpZGF0ZS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayB0aGUgcHJvamVjdCBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPlZhbGlkYXRlPC91aWNvbnRyb2w+LjwvY21kPg0KLTxpbmZvPklmIHRoaXMgb3B0aW9uIGlzIG5vdCBhdmFpbGFibGUsIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQgb3IgdGhlcmUgYXJlDQotbm8gdmFsaWRhdG9ycyBlbmFibGVkIGZvciB0aGUgcHJvamVjdC4gVG8gZW5hYmxlIHZhbGlkYXRpb24gYXQgdGhlIGdsb2JhbA0KLWxldmVsLCBzZWUgPHhyZWYgaHJlZj0idGp2YWwuZGl0YSI+PC94cmVmPi4gVG8gZW5hYmxlIHZhbGlkYXRvcnMgZm9yIHRoaXMNCi1wcm9qZWN0LCBzZWUgPHhyZWYgaHJlZj0idGp2YWxnbG9iYWxwcmVmLmRpdGEiPjwveHJlZj4uPC9pbmZvPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxyZXN1bHQgb3V0cHV0Y2xhc3M9ImlkX3Jlc3VsdCI+VGhlIHdvcmtiZW5jaCB2YWxpZGF0ZXMgdGhlIHByb2plY3QgdXNpbmcNCi10aGUgZW5hYmxlZCB2YWxpZGF0b3JzLiBBbnkgZXJyb3JzIGZvdW5kIGJ5IHRoZSB2YWxpZGF0b3JzIGFyZSBsaXN0ZWQgaW4gdGhlDQotUHJvYmxlbXMgdmlldy48L3Jlc3VsdD4NCi08cG9zdHJlcSBvdXRwdXRjbGFzcz0iaWRfcG9zdHJlcSI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCi08P1B1YiAqMDAwMDAwMjI5Nj8+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxtYW51YWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsbWFudWFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YmJmZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxtYW51YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9Ik1hbnVhbGx5IHZhbGlkYXRpbmcgY29kZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXaGVuIHlvdSBydW4gYSBtYW51YWwgdmFsaWRhdGlvbiwgYWxsIHJlc291cmNlcyBpbiB0aGUgc2VsZWN0ZWQgcHJvamVjdCBhcmUgdmFsaWRhdGVkIGFjY29yZGluZyB0byB0aGUgdmFsaWRhdGlvbiBzZXR0aW5ncy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2hlbiB5b3UgcnVuIGEgbWFudWFsIHZhbGlkYXRpb24sIGFsbCByZXNvdXJjZXMgaW4gdGhlIHNlbGVjdGVkIHByb2plY3QgYXJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbGlkYXRpb24gc2V0dGluZ3MuIiAvPgotPG1ldGEgY29udGVudD0idmFsaWRhdGlvbiwgbWFudWFsLCBjb2RlIHZhbGlkYXRpb24iIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJ2YWxpZGF0aW9uLCBtYW51YWwsIGNvZGUgdmFsaWRhdGlvbiIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZhbGRpc2FibGUuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsZ2xvYmFscHJlZi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGp2YWxzZWxlY3QuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3J0dW5ldmFsaWRhdC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRqdmFsbWFudWFsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+TWFudWFsbHkgdmFsaWRhdGluZyBjb2RlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0anZhbG1hbnVhbCI+PGEgbmFtZT0idGp2YWxtYW51YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPk1hbnVhbGx5IHZhbGlkYXRpbmcgY29kZTwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF90YXNrYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+V2hlbiB5b3UgcnVuIGEgbWFudWFsIHZhbGlkYXRpb24sIGFsbAotcmVzb3VyY2VzIGluIHRoZSBzZWxlY3RlZCBwcm9qZWN0IGFyZSB2YWxpZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWxpZGF0aW9uCi1zZXR0aW5ncy48L3A+Ci0KLTxkaXYgY2xhc3M9ImlkX2NvbnRleHQiPjxwIGNsYXNzPSJhbmNob3JfdG9waWN0b3AiIC8+Ci0gPGRpdiBjbGFzcz0icCI+VGhlCi12YWxpZGF0b3JzIHVzZWQgZGVwZW5kIG9uIHRoZSBnbG9iYWwgYW5kIHByb2plY3QgdmFsaWRhdGlvbiBzZXR0aW5ncy4gV2hlbgoteW91IHZhbGlkYXRlIGEgcHJvamVjdCBtYW51YWxseSwgdGhlIGdsb2JhbCBzZXR0aW5ncyBhcmUgdXNlZCB1bmxlc3MgYm90aAotb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTo8dWw+Ci08bGk+VGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFsbG93IHByb2plY3RzIHRvIG92ZXJyaWRlIHRoZXNlIHByZWZlcmVuY2Ugc2V0dGluZ3M8L3NwYW4+IGNoZWNrCi1ib3ggaXMgc2VsZWN0ZWQgb24gdGhlIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzIHBhZ2UuPC9saT4KLQotPGxpPlRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdmVycmlkZSB2YWxpZGF0aW9uIHByZWZlcmVuY2VzPC9zcGFuPiBjaGVjayBib3ggaXMKLXNlbGVjdGVkIG9uIHRoZSBwcm9qZWN0J3MgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcyBwYWdlLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTxwPldoZXRoZXIgdGhlIHdvcmtiZW5jaCB1c2VzIHRoZSBnbG9iYWwgb3IgcHJvamVjdCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLAotb25seSB0aGUgdmFsaWRhdG9ycyBzZWxlY3RlZCB0byBydW4gb24gbWFudWFsIHZhbGlkYXRpb24gYXJlIHVzZWQgd2hlbiB5b3UKLXJ1biBhIG1hbnVhbCB2YWxpZGF0aW9uLjwvcD4KLTxwPlRvIG1hbnVhbGx5IGludm9rZSBhbiBpbW1lZGlhdGUgY29kZSB2YWxpZGF0aW9uLAotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sIGNsYXNzPSJpZF9zdGVwcyI+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgcHJvamVjdCB0aGF0IHlvdSB3YW50IHRvIHZhbGlkYXRlLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlJpZ2h0LWNsaWNrIHRoZSBwcm9qZWN0IGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlZhbGlkYXRlPC9zcGFuPi48L3NwYW4+Ci0gSWYgdGhpcyBvcHRpb24gaXMgbm90IGF2YWlsYWJsZSwgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZCBvciB0aGVyZSBhcmUKLW5vIHZhbGlkYXRvcnMgZW5hYmxlZCBmb3IgdGhlIHByb2plY3QuIFRvIGVuYWJsZSB2YWxpZGF0aW9uIGF0IHRoZSBnbG9iYWwKLWxldmVsLCBzZWUgPGEgaHJlZj0idGp2YWwuaHRtbCIgdGl0bGU9IlRoZSB3b3JrYmVuY2ggaW5jbHVkZXMgdmFsaWRhdG9ycyB0aGF0JiMxMDtjaGVjayBjZXJ0YWluIGZpbGVzIGluIHlvdXIgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBtb2R1bGUgcHJvamVjdHMgZm9yIGVycm9ycy4iPlZhbGlkYXRpbmcgY29kZSBpbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9uczwvYT4uIFRvIGVuYWJsZSB2YWxpZGF0b3JzIGZvciB0aGlzCi1wcm9qZWN0LCBzZWUgPGEgaHJlZj0idGp2YWxnbG9iYWxwcmVmLmh0bWwiIHRpdGxlPSJGb3IgYSBnaXZlbiBwcm9qZWN0LCB5b3UgY2FuIG92ZXJyaWRlJiMxMDt0aGUgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXMuIj5PdmVycmlkaW5nIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzPC9hPi48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJpZF9yZXN1bHQiPlRoZSB3b3JrYmVuY2ggdmFsaWRhdGVzIHRoZSBwcm9qZWN0IHVzaW5nCi10aGUgZW5hYmxlZCB2YWxpZGF0b3JzLiBBbnkgZXJyb3JzIGZvdW5kIGJ5IHRoZSB2YWxpZGF0b3JzIGFyZSBsaXN0ZWQgaW4gdGhlCi1Qcm9ibGVtcyB2aWV3LjwvZGl2PgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqdmFsZGlzYWJsZS5odG1sIiB0aXRsZT0iWW91IGNhbiBkaXNhYmxlIG9uZSBvciBtb3JlIHZhbGlkYXRvcnMgaW5kaXZpZHVhbGx5IG9yIGRpc2FibGUgdmFsaWRhdGlvbiBlbnRpcmVseS4gQWxzbywgeW91IGNhbiBzZXQgdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3IgeW91ciBlbnRpcmUgd29ya3NwYWNlIGFuZCBmb3IgaW5kaXZpZHVhbCBwcm9qZWN0cy4iPkRpc2FibGluZyB2YWxpZGF0aW9uPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwiIHRpdGxlPSJGb3IgYSBnaXZlbiBwcm9qZWN0LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcy4iPk92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbHNlbGVjdC5odG1sIiB0aXRsZT0iWW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgdmFsaWRhdG9ycyB0byBydW4gZHVyaW5nIG1hbnVhbCBhbmQgYnVpbGQgY29kZSB2YWxpZGF0aW9uLiBZb3UgY2FuIHNldCBlYWNoIHZhbGlkYXRvciB0byBydW4gb24gbWFudWFsIHZhbGlkYXRpb24sIGJ1aWxkIHZhbGlkYXRpb24sIGJvdGgsIG9yIG5laXRoZXIuIj5TZWxlY3RpbmcgY29kZSB2YWxpZGF0b3JzPC9hPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWxyZWYiPjxzdHJvbmc+UmVsYXRlZCByZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3J0dW5ldmFsaWRhdC5odG1sIiB0aXRsZT0iV2hldGhlciBvciBub3QgYSB2YWxpZGF0b3IgdmFsaWRhdGVzIGEgcGFydGljdWxhciByZXNvdXJjZSBkZXBlbmRzIG9uIHRoZSBmaWx0ZXJzIHRoYXQgYXJlIGluIHBsYWNlIGZvciB0aGF0IHZhbGlkYXRvci4iPlR1bmluZyB2YWxpZGF0b3JzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsc2VsZWN0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmRvYy51c2VyL3RvcGljcy90anZhbHNlbGVjdC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTVlNWNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsc2VsZWN0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRqdmFsc2VsZWN0IiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZSBvdXRwdXRjbGFzcz0iaWRfdGl0bGUiPlNlbGVjdGluZyBjb2RlIHZhbGlkYXRvcnM8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+WW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgdmFsaWRhdG9ycyB0bw0KLXJ1biBkdXJpbmcgbWFudWFsIGFuZCBidWlsZCBjb2RlIHZhbGlkYXRpb24uIFlvdSBjYW4gc2V0IGVhY2ggdmFsaWRhdG9yIHRvDQotcnVuIG9uIG1hbnVhbCB2YWxpZGF0aW9uLCBidWlsZCB2YWxpZGF0aW9uLCBib3RoLCBvciBuZWl0aGVyLiA8L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT52YWxpZGF0aW9uPGluZGV4dGVybT5zZWxlY3RpbmcgdmFsaWRhdG9yczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+Y29kZSB2YWxpZGF0aW9uPGluZGV4dGVybT5zZWxlY3RpbmcgdmFsaWRhdG9yczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHkgb3V0cHV0Y2xhc3M9ImlkX3Rhc2tib2R5Ij4NCi08Y29udGV4dCBvdXRwdXRjbGFzcz0iaWRfY29udGV4dCI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY3RvcCI+PC9wPjxwPlRvDQotY2hvb3NlIHRoZSB2YWxpZGF0b3JzIHRoYXQgeW91IHdhbnQgdG8gdXNlIGZvciBhIHByb2plY3QsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcNCi1zdGVwczo8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcyBvdXRwdXRjbGFzcz0iaWRfc3RlcHMiPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+V2luZG93PC91aWNvbnRyb2w+PHVpY29udHJvbD5QcmVmZXJlbmNlczwvdWljb250cm9sPg0KLTwvbWVudWNhc2NhZGU+IGFuZCBzZWxlY3QgPHVpY29udHJvbD5WYWxpZGF0aW9uPC91aWNvbnRyb2w+IGluIHRoZSBsZWZ0IHBhbmUuPC9jbWQ+DQotPHN0ZXByZXN1bHQ+VGhlIFZhbGlkYXRpb24gcGFnZSBvZiB0aGUgUHJlZmVyZW5jZXMgd2luZG93IGxpc3RzIHRoZSB2YWxpZGF0b3JzDQotYXZhaWxhYmxlIGluIHlvdXIgcHJvamVjdCBhbmQgdGhlaXIgc2V0dGluZ3MuPC9zdGVwcmVzdWx0Pjwvc3RlcD4NCi08c3RlcD48Y21kPkNsZWFyIHRoZSA8dWljb250cm9sPlN1c3BlbmQgYWxsIHZhbGlkYXRvcnM8L3VpY29udHJvbD4gY2hlY2sgYm94LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD48P1B1YiBDYXJldDE/PklmIHlvdSB3YW50IHRvIHNldCBpbmRpdmlkdWFsDQotdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3Igb25lIG9yIG1vcmUgb2YgeW91ciBwcm9qZWN0cywgc2VsZWN0IHRoZSA8dWljb250cm9sPkFsbG93DQotcHJvamVjdHMgdG8gb3ZlcnJpZGUgdGhlc2UgcHJlZmVyZW5jZSBzZXR0aW5nczwvdWljb250cm9sPiBjaGVjayBib3guPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIGxpc3Qgb2YgdmFsaWRhdG9ycywgc2VsZWN0IHRoZSBjaGVjayBib3hlcyBuZXh0IHRvIGVhY2gNCi12YWxpZGF0b3IgeW91IHdhbnQgdG8gdXNlIGF0IHRoZSBnbG9iYWwgbGV2ZWwuPC9jbWQ+PGluZm8+RWFjaCB2YWxpZGF0b3IgaGFzDQotYSBjaGVjayBib3ggdG8gc3BlY2lmeSB3aGV0aGVyIGl0IGlzIHVzZWQgb24gbWFudWFsIHZhbGlkYXRpb24gb3Igb24gYSBidWlsZC48bm90ZT5JZg0KLXlvdSBkZXNlbGVjdCBhbnkgdmFsaWRhdG9yIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLCBhbnkgbWVzc2FnZXMgYXNzb2NpYXRlZA0KLXdpdGggdGhlIGRlc2VsZWN0ZWQgdmFsaWRhdG9yIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSB0YXNrIGxpc3QsDQotdGhlIG5leHQgdGltZSB5b3UgcGVyZm9ybSBhIGZ1bGwgYnVpbGQuPC9ub3RlPjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5UdW5lIGEgdmFsaWRhdG9yIGJ5IGNsaWNraW5nDQotdGhlIGJ1dHRvbiBpbiB0aGUgPHVpY29udHJvbD5TZXR0aW5nczwvdWljb250cm9sPiBjb2x1bW4uPC9jbWQ+DQotPGluZm8+Tm90IGFsbCB2YWxpZGF0b3JzIGhhdmUgYWRkaXRpb25hbCBzZXR0aW5ncy48L2luZm8+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdD5JZiB5b3Ugd2FudCB0byBzZXQgaW5kaXZpZHVhbCB2YWxpZGF0aW9uIHNldHRpbmdzIGZvciBvbmUgb3IgbW9yZQ0KLW9mIHlvdXIgcHJvamVjdHMsIHNlZSA8eHJlZiBocmVmPSJ0anZhbGdsb2JhbHByZWYuZGl0YSI+PC94cmVmPi4gTGlrZSB0aGUNCi1nbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcywgeW91IGNhbiBzZXQgdmFsaWRhdG9ycyBhdCB0aGUgcHJvamVjdCBsZXZlbA0KLXRvIHJ1biBvbiBtYW51YWwgdmFsaWRhdGlvbiwgYnVpbGQgdmFsaWRhdGlvbiwgYm90aCwgb3IgbmVpdGhlci48L3Jlc3VsdD4NCi08cG9zdHJlcSBvdXRwdXRjbGFzcz0iaWRfcG9zdHJlcSI+PHAgb3V0cHV0Y2xhc3M9ImFuY2hvcl90b3BpY2JvdHRvbSI+PC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCi08P1B1YiAqMDAwMDAwMjY4NT8+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxzZWxlY3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3RqdmFsc2VsZWN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZTRhYTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2YWxzZWxlY3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlNlbGVjdGluZyBjb2RlIHZhbGlkYXRvcnMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgdmFsaWRhdG9ycyB0byBydW4gZHVyaW5nIG1hbnVhbCBhbmQgYnVpbGQgY29kZSB2YWxpZGF0aW9uLiBZb3UgY2FuIHNldCBlYWNoIHZhbGlkYXRvciB0byBydW4gb24gbWFudWFsIHZhbGlkYXRpb24sIGJ1aWxkIHZhbGlkYXRpb24sIGJvdGgsIG9yIG5laXRoZXIuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gc2VsZWN0IHNwZWNpZmljIHZhbGlkYXRvcnMgdG8gcnVuIGR1cmluZyBtYW51YWwgYW5kIGJ1aWxkIGNvZGUgdmFsaWRhdGlvbi4gWW91IGNhbiBzZXQgZWFjaCB2YWxpZGF0b3IgdG8gcnVuIG9uIG1hbnVhbCB2YWxpZGF0aW9uLCBidWlsZCB2YWxpZGF0aW9uLCBib3RoLCBvciBuZWl0aGVyLiIgLz4KLTxtZXRhIGNvbnRlbnQ9InZhbGlkYXRpb24sIHNlbGVjdGluZyB2YWxpZGF0b3JzLCBjb2RlIHZhbGlkYXRpb24iIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJ2YWxpZGF0aW9uLCBzZWxlY3RpbmcgdmFsaWRhdG9ycywgY29kZSB2YWxpZGF0aW9uIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RqdmFsZGlzYWJsZS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90anZhbG1hbnVhbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGp2YWxzZWxlY3QiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZWxlY3RpbmcgY29kZSB2YWxpZGF0b3JzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0anZhbHNlbGVjdCI+PGEgbmFtZT0idGp2YWxzZWxlY3QiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0iaWRfdGl0bGUiPlNlbGVjdGluZyBjb2RlIHZhbGlkYXRvcnM8L2gxPgotCi0KLQotPGRpdiBjbGFzcz0iaWRfdGFza2JvZHkiPjxwIGNsYXNzPSJpZF9zaG9ydGRlc2MiPllvdSBjYW4gc2VsZWN0IHNwZWNpZmljIHZhbGlkYXRvcnMgdG8KLXJ1biBkdXJpbmcgbWFudWFsIGFuZCBidWlsZCBjb2RlIHZhbGlkYXRpb24uIFlvdSBjYW4gc2V0IGVhY2ggdmFsaWRhdG9yIHRvCi1ydW4gb24gbWFudWFsIHZhbGlkYXRpb24sIGJ1aWxkIHZhbGlkYXRpb24sIGJvdGgsIG9yIG5laXRoZXIuIDwvcD4KLQotPGRpdiBjbGFzcz0iaWRfY29udGV4dCI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLTxwPlRvCi1jaG9vc2UgdGhlIHZhbGlkYXRvcnMgdGhhdCB5b3Ugd2FudCB0byB1c2UgZm9yIGEgcHJvamVjdCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbCBjbGFzcz0iaWRfc3RlcHMiPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVmZXJlbmNlczwvc3Bhbj4KLTwvc3Bhbj4gYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5WYWxpZGF0aW9uPC9zcGFuPiBpbiB0aGUgbGVmdCBwYW5lLjwvc3Bhbj4KLSBUaGUgVmFsaWRhdGlvbiBwYWdlIG9mIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3cgbGlzdHMgdGhlIHZhbGlkYXRvcnMKLWF2YWlsYWJsZSBpbiB5b3VyIHByb2plY3QgYW5kIHRoZWlyIHNldHRpbmdzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xlYXIgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlN1c3BlbmQgYWxsIHZhbGlkYXRvcnM8L3NwYW4+IGNoZWNrIGJveC48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPklmIHlvdSB3YW50IHRvIHNldCBpbmRpdmlkdWFsCi12YWxpZGF0aW9uIHNldHRpbmdzIGZvciBvbmUgb3IgbW9yZSBvZiB5b3VyIHByb2plY3RzLCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFsbG93Ci1wcm9qZWN0cyB0byBvdmVycmlkZSB0aGVzZSBwcmVmZXJlbmNlIHNldHRpbmdzPC9zcGFuPiBjaGVjayBib3guPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgbGlzdCBvZiB2YWxpZGF0b3JzLCBzZWxlY3QgdGhlIGNoZWNrIGJveGVzIG5leHQgdG8gZWFjaAotdmFsaWRhdG9yIHlvdSB3YW50IHRvIHVzZSBhdCB0aGUgZ2xvYmFsIGxldmVsLjwvc3Bhbj4gRWFjaCB2YWxpZGF0b3IgaGFzCi1hIGNoZWNrIGJveCB0byBzcGVjaWZ5IHdoZXRoZXIgaXQgaXMgdXNlZCBvbiBtYW51YWwgdmFsaWRhdGlvbiBvciBvbiBhIGJ1aWxkLjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBJZgoteW91IGRlc2VsZWN0IGFueSB2YWxpZGF0b3IgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQsIGFueSBtZXNzYWdlcyBhc3NvY2lhdGVkCi13aXRoIHRoZSBkZXNlbGVjdGVkIHZhbGlkYXRvciB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgdGFzayBsaXN0LAotdGhlIG5leHQgdGltZSB5b3UgcGVyZm9ybSBhIGZ1bGwgYnVpbGQuPC9kaXY+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHVuZSBhIHZhbGlkYXRvciBieSBjbGlja2luZwotdGhlIGJ1dHRvbiBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2V0dGluZ3M8L3NwYW4+IGNvbHVtbi48L3NwYW4+Ci0gTm90IGFsbCB2YWxpZGF0b3JzIGhhdmUgYWRkaXRpb25hbCBzZXR0aW5ncy48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5JZiB5b3Ugd2FudCB0byBzZXQgaW5kaXZpZHVhbCB2YWxpZGF0aW9uIHNldHRpbmdzIGZvciBvbmUgb3IgbW9yZQotb2YgeW91ciBwcm9qZWN0cywgc2VlIDxhIGhyZWY9InRqdmFsZ2xvYmFscHJlZi5odG1sIiB0aXRsZT0iRm9yIGEgZ2l2ZW4gcHJvamVjdCwgeW91IGNhbiBvdmVycmlkZSYjMTA7dGhlIGdsb2JhbCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLiI+T3ZlcnJpZGluZyBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlczwvYT4uIExpa2UgdGhlCi1nbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcywgeW91IGNhbiBzZXQgdmFsaWRhdG9ycyBhdCB0aGUgcHJvamVjdCBsZXZlbAotdG8gcnVuIG9uIG1hbnVhbCB2YWxpZGF0aW9uLCBidWlsZCB2YWxpZGF0aW9uLCBib3RoLCBvciBuZWl0aGVyLjwvZGl2PgotCi08ZGl2IGNsYXNzPSJpZF9wb3N0cmVxIj48cCBjbGFzcz0iYW5jaG9yX3RvcGljYm90dG9tIiAvPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PjxkaXYgY2xhc3M9InJlbHRhc2tzIj48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLTxkaXY+PGEgaHJlZj0iLi4vdG9waWNzL3RqdmFsZGlzYWJsZS5odG1sIiB0aXRsZT0iWW91IGNhbiBkaXNhYmxlIG9uZSBvciBtb3JlIHZhbGlkYXRvcnMgaW5kaXZpZHVhbGx5IG9yIGRpc2FibGUgdmFsaWRhdGlvbiBlbnRpcmVseS4gQWxzbywgeW91IGNhbiBzZXQgdmFsaWRhdGlvbiBzZXR0aW5ncyBmb3IgeW91ciBlbnRpcmUgd29ya3NwYWNlIGFuZCBmb3IgaW5kaXZpZHVhbCBwcm9qZWN0cy4iPkRpc2FibGluZyB2YWxpZGF0aW9uPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvdGp2YWxnbG9iYWxwcmVmLmh0bWwiIHRpdGxlPSJGb3IgYSBnaXZlbiBwcm9qZWN0LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcy4iPk92ZXJyaWRpbmcgZ2xvYmFsIHZhbGlkYXRpb24gcHJlZmVyZW5jZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3RvcGljcy90anZhbG1hbnVhbC5odG1sIiB0aXRsZT0iV2hlbiB5b3UgcnVuIGEgbWFudWFsIHZhbGlkYXRpb24sIGFsbCByZXNvdXJjZXMgaW4gdGhlIHNlbGVjdGVkIHByb2plY3QgYXJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbGlkYXRpb24gc2V0dGluZ3MuIj5NYW51YWxseSB2YWxpZGF0aW5nIGNvZGU8L2E+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlbHJlZiI+PHN0cm9uZz5SZWxhdGVkIHJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvcnR1bmV2YWxpZGF0Lmh0bWwiIHRpdGxlPSJXaGV0aGVyIG9yIG5vdCBhIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRlcGVuZHMgb24gdGhlIGZpbHRlcnMgdGhhdCBhcmUgaW4gcGxhY2UgZm9yIHRoYXQgdmFsaWRhdG9yLiI+VHVuaW5nIHZhbGlkYXRvcnM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2aWV3ZmlsdGVycy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2aWV3ZmlsdGVycy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmJjYzZiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3Rqdmlld2ZpbHRlcnMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0iY2p2aWV3ZmlsdGVyc0NhaXQiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlIGlkPSJpZF90aXRsZSI+RmlsdGVyaW5nIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXc8L3RpdGxlPg0KLTxzaG9ydGRlc2Mgb3V0cHV0Y2xhc3M9ImlkX3Nob3J0ZGVzYyI+WW91IGNhbiBmaWx0ZXIgdGhlIFByb2plY3QgRXhwbG9yZXINCi12aWV3IHRvIGhpZGUgcHJvamVjdHMsIGZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIHNlZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5maWx0ZXJzPGluZGV4dGVybT5Qcm9qZWN0IEV4cGxvcmVyIHZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPnZpZXdzPGluZGV4dGVybT5Qcm9qZWN0IEV4cGxvcmVyIGZpbHRlcnM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPnByb2plY3RzPGluZGV4dGVybT5maWx0ZXJpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5IG91dHB1dGNsYXNzPSJpZF90YXNrYm9keSI+DQotPGNvbnRleHQgb3V0cHV0Y2xhc3M9ImlkX2NvbnRleHQiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWN0b3AiPjwvcD48cD5Ubw0KLWVuYWJsZSBvciBkaXNhYmxlIGZpbHRlcnMsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM8L3A+PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPk9wZW4gdGhlIFNlbGVjdCBDb21tb24gTmF2aWdhdG9yIEZpbHRlcnMgd2luZG93IGJ5IHNlbGVjdGluZyA8dWljb250cm9sPkN1c3RvbWl6ZQ0KLVZpZXcuLi48L3VpY29udHJvbD4gZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUgYXQgdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlDQotdmlldy4gPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+T24gdGhlIDx1aWNvbnRyb2w+RmlsdGVyczwvdWljb250cm9sPiB0YWIsIHNlbGVjdCB0aGUgY2hlY2sgYm94ZXMNCi1uZXh0IHRvIHRoZSBmaWx0ZXJzIHlvdSB3YW50IHRvIGVuYWJsZS48L2NtZD48aW5mbz4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIDx1aWNvbnRyb2w+Q2xvc2VkDQotcHJvamVjdHM8L3VpY29udHJvbD4gZmlsdGVyIGlzIGVuYWJsZWQsIGNsb3NlZCBwcm9qZWN0cyBhcmUgbm90IHNob3duIGluIHRoZQ0KLVByb2plY3QgRXhwbG9yZXIgdmlldy4gT3RoZXIgZmlsdGVycyBjYW4gaGlkZSBlbXB0eSBwYWNrYWdlcywgbm9uLWphdmEgZmlsZXMsDQotYW5kIGZpbGVzIHdpdGggbmFtZXMgZW5kaW5nIGluICIuY2xhc3MiLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbiB0aGUgPHVpY29udHJvbD5Db250ZW50PC91aWNvbnRyb2w+IHRhYiwgdGhlIGZpbHRlcnMgd29yayBpbg0KLXRoZSBvcHBvc2l0ZSB3YXk6IHRoZSBzZWxlY3RlZCBjaGVjayBib3hlcyBkZXNjcmliZSB0aGUgcHJvamVjdHMsIGZvbGRlcnMsDQotYW5kIGZpbGVzIHRoYXQgYXJlIHNob3duIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcuIFNlbGVjdCB0aGUgY2hlY2sgYm94ZXMNCi1uZXh0IHRvIHRoZSBmaWx0ZXJzIHlvdSB3YW50IHRvIGhpZGUuPC9jbWQ+PGluZm8+Rm9yIGV4YW1wbGUsIGlmIHlvdSBjbGVhcg0KLXRoZSBjaGVjayBib3ggbmV4dCB0byA8dWljb250cm9sPkoyRUUgRUpCIERlcGxveW1lbnQgRGVzY3JpcHRvcnM8L3VpY29udHJvbD4sDQotdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgYXJlIGhpZGRlbiBmcm9tIGVhY2ggcHJvamVjdCBpbiB0aGUgdmlldy48L2luZm8+DQotPC9zdGVwPg0KLTwvc3RlcHM+DQotPHBvc3RyZXEgb3V0cHV0Y2xhc3M9ImlkX3Bvc3RyZXEiPjxwIG91dHB1dGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iPjwvcD48L3Bvc3RyZXE+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2aWV3ZmlsdGVycy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlci90b3BpY3MvdGp2aWV3ZmlsdGVycy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjg4ZTMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3Rqdmlld2ZpbHRlcnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkZpbHRlcmluZyBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gZmlsdGVyIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgdG8gaGlkZSBwcm9qZWN0cywgZm9sZGVycywgb3IgZmlsZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gc2VlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGZpbHRlciB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IHRvIGhpZGUgcHJvamVjdHMsIGZvbGRlcnMsIG9yIGZpbGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIHNlZS4iIC8+Ci08bWV0YSBjb250ZW50PSJmaWx0ZXJzLCBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHZpZXdzLCBQcm9qZWN0IEV4cGxvcmVyIGZpbHRlcnMsIHByb2plY3RzLCBmaWx0ZXJpbmciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJmaWx0ZXJzLCBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHZpZXdzLCBQcm9qZWN0IEV4cGxvcmVyIGZpbHRlcnMsIHByb2plY3RzLCBmaWx0ZXJpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2p2aWV3Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2p2aWV3ZmlsdGVyc0NhaXQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5GaWx0ZXJpbmcgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2p2aWV3ZmlsdGVyc0NhaXQiPjxhIG5hbWU9ImNqdmlld2ZpbHRlcnNDYWl0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5GaWx0ZXJpbmcgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldzwvaDE+Ci0KLQotCi08ZGl2IGNsYXNzPSJpZF90YXNrYm9keSI+PHAgY2xhc3M9ImlkX3Nob3J0ZGVzYyI+WW91IGNhbiBmaWx0ZXIgdGhlIFByb2plY3QgRXhwbG9yZXIKLXZpZXcgdG8gaGlkZSBwcm9qZWN0cywgZm9sZGVycywgb3IgZmlsZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gc2VlLjwvcD4KLQotPGRpdiBjbGFzcz0iaWRfY29udGV4dCI+PHAgY2xhc3M9ImFuY2hvcl90b3BpY3RvcCIgLz4KLTxwPlRvCi1lbmFibGUgb3IgZGlzYWJsZSBmaWx0ZXJzLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzPC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T3BlbiB0aGUgU2VsZWN0IENvbW1vbiBOYXZpZ2F0b3IgRmlsdGVycyB3aW5kb3cgYnkgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkN1c3RvbWl6ZQotVmlldy4uLjwvc3Bhbj4gZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUgYXQgdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlCi12aWV3LiA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5PbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsdGVyczwvc3Bhbj4gdGFiLCBzZWxlY3QgdGhlIGNoZWNrIGJveGVzCi1uZXh0IHRvIHRoZSBmaWx0ZXJzIHlvdSB3YW50IHRvIGVuYWJsZS48L3NwYW4+ICBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q2xvc2VkCi1wcm9qZWN0czwvc3Bhbj4gZmlsdGVyIGlzIGVuYWJsZWQsIGNsb3NlZCBwcm9qZWN0cyBhcmUgbm90IHNob3duIGluIHRoZQotUHJvamVjdCBFeHBsb3JlciB2aWV3LiBPdGhlciBmaWx0ZXJzIGNhbiBoaWRlIGVtcHR5IHBhY2thZ2VzLCBub24tamF2YSBmaWxlcywKLWFuZCBmaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLmNsYXNzIi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPk9uIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db250ZW50PC9zcGFuPiB0YWIsIHRoZSBmaWx0ZXJzIHdvcmsgaW4KLXRoZSBvcHBvc2l0ZSB3YXk6IHRoZSBzZWxlY3RlZCBjaGVjayBib3hlcyBkZXNjcmliZSB0aGUgcHJvamVjdHMsIGZvbGRlcnMsCi1hbmQgZmlsZXMgdGhhdCBhcmUgc2hvd24gaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgdmlldy4gU2VsZWN0IHRoZSBjaGVjayBib3hlcwotbmV4dCB0byB0aGUgZmlsdGVycyB5b3Ugd2FudCB0byBoaWRlLjwvc3Bhbj4gRm9yIGV4YW1wbGUsIGlmIHlvdSBjbGVhcgotdGhlIGNoZWNrIGJveCBuZXh0IHRvIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkoyRUUgRUpCIERlcGxveW1lbnQgRGVzY3JpcHRvcnM8L3NwYW4+LAotdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgYXJlIGhpZGRlbiBmcm9tIGVhY2ggcHJvamVjdCBpbiB0aGUgdmlldy4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImlkX3Bvc3RyZXEiPjxwIGNsYXNzPSJhbmNob3JfdG9waWNib3R0b20iIC8+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+PGRpdiBjbGFzcz0icmVsY29uY2VwdHMiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotPGRpdj48YSBocmVmPSIuLi90b3BpY3MvY2p2aWV3Lmh0bWwiIHRpdGxlPSJXaGlsZSBkZXZlbG9waW5nIEoyRUUgYXBwbGljYXRpb25zIGluIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlLCB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IGlzIHlvdXIgbWFpbiB2aWV3IG9mIHlvdXIgSjJFRSBwcm9qZWN0cyBhbmQgcmVzb3VyY2VzLiI+UHJvamVjdCBFeHBsb3JlciB2aWV3IGluIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNWY2MDkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlXzEuMC4wLmphcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmNmYjU1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDc2OTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qc3QuZW50ZXJwcmlzZV91c2VyZG9jLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qc3QuZW50ZXJwcmlzZV91c2VyZG9jLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qc3QuZW50ZXJwcmlzZV91c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGRjYmY1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1KU1QgRW50ZXJwcmlzZSBVc2VyIERvY3VtZW50YXRpb24KLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1KU1QgZW50ZXJwcmlzZSB1c2VyIGRvY3VtZW50YXRpb24KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzhiNWMwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC5lbnRlcnByaXNlX3VzZXJkb2MuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuNC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC5lamIuZG9jLnVzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qc3QuZW50ZXJwcmlzZV91c2VyZG9jLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanN0LmVudGVycHJpc2VfdXNlcmRvYy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qc3QuZW50ZXJwcmlzZV91c2VyZG9jLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8uY2xhc3NwYXRoIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5jbGFzc3BhdGgKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLmNsYXNzcGF0aApyZW5hbWUgdG8gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5jbGFzc3BhdGgKaW5kZXggZjcwNDc2Zi4uMjdkYTdkYiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLmNsYXNzcGF0aAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vLmNsYXNzcGF0aApAQCAtMSw3ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InVpIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iYmVhbmluZm91aSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImJlYW5pbmZvQ29tbW9uIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5jdnNpZ25vcmUgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjgxNzFkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5jdnNpZ25vcmUKQEAgLTAsMCArMSw0IEBACitiaW4KK2J1aWxkLnhtbAorYmluX2JlYW5pbmZvY29tbW9uCitiaW5fdm1fYmVhbmluZm92bQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnByb2plY3QgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vLnByb2plY3QKc2ltaWxhcml0eSBpbmRleCA2NyUKY29weSBmcm9tIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5wcm9qZWN0CmNvcHkgdG8gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5wcm9qZWN0CmluZGV4IDcxYzcwZTAuLmUzY2U3NjkgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5wcm9qZWN0CisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi8ucHJvamVjdApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmplbS51aTwvbmFtZT4KKwk8bmFtZT5vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uPC9uYW1lPgogCTxjb21tZW50PjwvY29tbWVudD4KIAk8cHJvamVjdHM+CiAJPC9wcm9qZWN0cz4KQEAgLTIwLDkgKzIwLDE5IEBACiAJCQk8YXJndW1lbnRzPgogCQkJPC9hcmd1bWVudHM+CiAJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+Y29tLmlibS5ydHAudG9vbHMucm9zZS5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCQk8ZGljdGlvbmFyeT4KKwkJCQkJPGtleT5yb3NlPC9rZXk+CisJCQkJCTx2YWx1ZT48L3ZhbHVlPgorCQkJCTwvZGljdGlvbmFyeT4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KIAk8L2J1aWxkU3BlYz4KIAk8bmF0dXJlcz4KIAkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CiAJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPmNvbS5pYm0ucnRwLnRvb2xzLnJvc2UudG9vbG5hdHVyZTwvbmF0dXJlPgogCTwvbmF0dXJlcz4KIDwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBwbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKcmVuYW1lIHRvIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKaW5kZXggNjNmODBiNS4uNDQ1YjI2MyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTEsMjkyICsxLDI5MSBAQAotI1NhdCBNYXIgMzEgMjI6NTk6NDAgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9lbnVtX2NvbnN0YW50PTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZXhwbGljaXRfY29uc3RydWN0b3JfY2FsbD0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fcXVhbGlmaWVkX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXNzaWdubWVudD0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29uZGl0aW9uYWxfZXhwcmVzc2lvbj04MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZXhwcmVzc2lvbnNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9wYWNrYWdlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmllbGQ9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maXJzdF9jbGFzc19ib2R5X2RlY2xhcmF0aW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfaW1wb3J0cz0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWV0aG9kPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbmV3X2NodW5rPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfcGFja2FnZT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9ZW5kX29mX2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPWVuZF9vZl9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTE1MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfZ3VhcmRpYW5fY2xhdXNlX29uX29uZV9saW5lPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRhdGlvbi5zaXplPTQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2F0X2VuZF9vZl9maWxlX2lmX21pc3Npbmc9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2F0Y2hfaW5fdHJ5X3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Vsc2VfaW5faWZfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2ZpbmFsbHlfaW5fdHJ5X3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV93aGlsZV9pbl9kb19zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X21ldGhvZF9ib2R5PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Nhc2U9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Fubm90YXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5jcmVtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luaXRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9lbGxpcHNpcz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAorI1dlZCBOb3YgMjYgMDA6NTU6MDUgRVNUIDIwMDgKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CiBvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CiBvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CiBvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2Fubm90YXRpb25fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF90aGVuX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5saW5lU3BsaXQ9MTUwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZXhwbGljaXRfY29uc3RydWN0b3JfY2FsbD0xNgogb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5saW5lX2xlbmd0aD0xNTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9iZWZvcmVfcm9vdF90YWdzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tdWx0aXBsZV9maWVsZHM9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Nhc2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9jb25zdGFudD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgogb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj10YWIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV93aGlsZV9pbl9kb19zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRhdGlvbi5zaXplPTQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfZWxsaXBzaXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9lbXB0eV9saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2ltcGxlX2lmX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19zd2l0Y2g9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj0yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTE1MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMworb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5zaXplPTQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9wYWNrYWdlPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2F0X2VuZF9vZl9maWxlX2lmX21pc3Npbmc9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpyZW5hbWUgdG8gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKaW5kZXggNmM4ZTFiYy4uODU1ZTEzNiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMSw0ICsxLDQgQEAKLSNUdWUgRmViIDIxIDEwOjA5OjE5IEVTVCAyMDA2CisjVHVlIEZlYiAyMSAxMDowOToxOCBFU1QgMjAwNgogZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKIGZvcm1hdHRlcl9wcm9maWxlPV9qdmUKIGZvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTEwCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWRjMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNUaHUgSnVuIDE2IDExOjA5OjA4IEVEVCAyMDA1CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorc2VsZmhvc3RpbmcuYmluRXhjbHVkZXM9L29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby9iaW5fdm1fYmVhbmluZm92bQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzA3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24KK0J1bmRsZS1WZXJzaW9uOiAyLjAuMjAwLnF1YWxpZmllcgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8uY29tbW9uLAorIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZQorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5wcm94eS5jb21tb247cmVzb2x1dGlvbjo9b3B0aW9uYWwsCisgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnByb3h5LmNvcmU7cmVzb2x1dGlvbjo9b3B0aW9uYWwKK0J1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKK0J1bmRsZS1EZXNjcmlwdGlvbjogJUJ1bmRsZS1EZXNjcmlwdGlvbi4wCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYWJvdXQuaHRtbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9hYm91dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmY2VlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYWJvdXQuaHRtbApAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+QWJvdXQ8L3RpdGxlPgorCisKKworPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PC9oZWFkPjxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgorIAorPHA+TWF5IDIsIDIwMDY8L3A+CQorPGgzPkxpY2Vuc2U8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSAKK2luZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgCithdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyAKK2JlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKK2FwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyAKK3Byb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQoraW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQKK2FuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT4uPC9wPgorCis8L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vY29tbW9uL0lCYXNlQmVhbkluZm9Db25zdGFudHMuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vY29tbW9uL0lCYXNlQmVhbkluZm9Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjYzYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9iZWFuaW5mby9jb21tb24vSUJhc2VCZWFuSW5mb0NvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMTU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisKKworICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby5jb21tb247CisKKyAKKworLyoqCisgKiBDb25zdGFudHMgZm9yIHRoZSBCYXNlQmVhbkluZm8gZm9yIGFyZ3VtZW50cy4gVGhpcyBjbGFzcyBpcyBjb21tb24gYmV0d2VlbgorICogdGhlIElERSBhbmQgdGhlIHJlbW90ZSB2bSBzbyB0aGF0IHRoZXNlIGNvbnN0YW50cyBjYW4gYmUgdXNlZCBvbiBib3RoIHNpZGVzLgorICogPHA+CisgKiBUaGVzZSBhcmUgY29uc3RhbnRzIHVzZWQgaW4gRmVhdHVyZUF0dHJpYnV0ZXMgYXMga2V5cy4gVGhlIG90aGVyIHNwZWNpYWwKKyAqIGNvbnN0YW50cyB0aGF0IGFyZSBub3Qga2V5cyBpbiBGZWF0dXJlQXR0cmlidXRlcyBhcmUgbGVmdCBpbiBCYXNlQmVhbkluZm8KKyAqIHNpbmNlIHRoZXkgYXJlIG5vdCBuZWVkZWQgb24gYm90aCBzaWRlcy4KKyAqIAorICogQHNpbmNlIDEuMi4wCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSUJhc2VCZWFuSW5mb0NvbnN0YW50cyB7CisKKwkvKioKKwkgKiBJbmRpY2F0b3IgdXNlZCB0byBkZXNjcmliZSBhIGZhY3RvcnkgaW5zdGFudGlhdGlvbiBwYXR0ZXJuLiAKKwkgKiA8cD4KKwkgKiBUaGlzIHdpbGwgYmUgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIEJlYW5EZXNjcmlwdG9yIGZvciB0aGUgZmFjdG9yeSBjbGFzcy4gSXQgd2lsbCBiZSBjb21wbGV0ZSwgaW4gdGhhdCBpZiB0aGlzCisJICogZmFjdG9yeSBpcyBpbmhlcml0ZWQgZnJvbSBhbm90aGVyIGZhY3RvcnksIGl0IG11c3QgY29weSBpbiB0aGUgc3VwZXJjbGFzcydzIGZhY3RvcnkgYXR0cmlidXRlLiBUaGV5IHdvbid0IGJlCisJICogYXV0b21hdGljYWxseSBtZXJnZWQuCisJICogPHA+CisJICogVGhlIGZvcm1hdCBpcyBhbiBPYmplY3RbXVtdLiBUaGUgZmlyc3QgZGltZW5zaW9uIGF0IGluZGV4IHplcm8gaXMgZm9yIHRvb2xraXQgd2lkZSBpbmZvcm1hdGlvbiBhbmQgdGhlbiBpbmRleGVzIG9uZSBhbmQgYmV5b25kIGFyZSBvbmUgZm9yIGVhY2ggY3JlYXRpb24gbWV0aG9kIG5hbWUuIFRoZSBzZWNvbmQgZGltZW5zaW9uIGlzIGZvciBvbmUgZW50cnkKKwkgKiBvZiBjbGFzc3dpZGUgZGF0YSBhbmQgdGhlIHJlc3QgYXJlIHRoZSBkYXRhIGZvciAKKwkgKiBlYWNoIGNyZWF0aW9uIG1ldGhvZC4KKwkgKiA8cD4KKwkgKiBUaGUgZmlyc3QgZW50cnkgYXQgT2JqZWN0WzBdIHdpbGwgYmUgPGNvZGU+e2luaXRTdHJpbmcsIGlzU2hhcmVkLCBvbkZyZWVmb3JtfTwvY29kZT4gd2hlcmU6CisJICogPGRsPgorCSAqIDxkdD5pbml0U3RyaW5nCisJICogPGRkPlRoZSBpbml0IHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgdG9vbGtpdCBpZiBpdCBuZWVkcyBvbmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIGl0IGRvZXNuJ3QKKwkgKiBuZWVkIG9uZSAoaS5lLiBhbGwgc3RhdGljKSBvciBpZiB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBzaG91bGQgYmUgdXNlZC4KKwkgKiBUaGlzIGlzIHVzZWQgd2hlbiBhIGNvbXBvbmVudCBpcyBkcm9wcGVkIGZyb20gdGhlIHBhbGV0dGUgdGhhdCBpcyBmb3IgYSB0b29sa2l0IGNvbXBvbmVudC4KKwkgKiA8ZHQ+aXNTaGFyZWQKKwkgKiA8ZGQ+PGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGVhY2ggY2FsbCB0byB0aGUgY3JlYXRpb24gbWV0aG9kIHNob3VsZCBoYXZlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSB0b29sa2l0LiBUaGlzIG1lYW5zIHRoYXQgdGhlIHRvb2xraXQgbWFuYWdlcyBvbmx5CisJICogb25lIGluc3RhbmNlLiBUaGlzIGlzIG1vcmUgbGlrZSBhIGNvbnRyb2xsZXIgdGhhbiBhIHRvb2xraXQgaW4gdGhpcyBjYXNlLiA8Y29kZT50cnVlPC9jb2RlPiBpZiBpdCBzaG91bGQKKwkgKiB0cnkgdG8gcmV1c2UgdGhlIHRvb2xraXQgb2YgdGhlIHBhcmVudCBpZiBpdCBoYXMgb25lLCAgb3IgYW55IG90aGVyIGZvdW5kIHRvb2xraXQgb2YgdGhlIHNhbWUgdHlwZSwgKGkuZS4gYSBzdWJ0eXBlIHdpbGwgYmUgYWNjZXB0YWJsZSkuICAKKwkgKiBUaGlzIGlzIHVzZWQgd2hlbiBhIGNvbXBvbmVudCBpcyBkcm9wcGVkIGZyb20gdGhlIHBhbGV0dGUgdGhhdCBpcyBmb3IgYSB0b29sa2l0IGNvbXBvbmVudC4KKwkgKiA8ZHQ+b25GcmVlZm9ybQorCSAqIDxkZD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgdG9vbGtpdCBpcyBjcmVhdGVkIHRoYXQgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgZnJlZWZvcm0gc3VyZmFjZSB0byBiZSBzZWxlY3RhYmxlLiBUaGlzIHdvdWxkIGJlIG9mIHVzZQorCSAqIGlmIHRoZSB0b29sa2l0IGhhZCBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSBzZXQuIElmIHRoZSB0b29sa2l0IGhhZCBubyBwcm9wZXJ0aWVzIHRoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGJlIHNlbGVjdGFibGUgYW5kIHNob3VsZAorCSAqIG5vdCBiZSBvbiB0aGUgZnJlZWZvcm0uIFVzZSA8Y29kZT5mYWxzZTwvY29kZT4gaW4gdGhhdCBjYXNlLgorCSAqIDwvZGw+IAorCSAqIDxwPgorCSAqIFRoZSBzZWNvbmQgYW5kIG90aGVyIGVudHJpZXMgb2YgdGhlIGFycmF5IGFyZSBvZiB0aGUgZm9ybWF0OgorCSAqIDxjb2RlPnttZXRob2ROYW1lLCByZXR1cm5lZENsYXNzbmFtZSwgaXNTdGF0aWMsIE9iamVjdFtdLCAuLi59PC9jb2RlPiB3aGVyZToKKwkgKiA8ZGw+CisJICogPGR0Pm1ldGhvZE5hbWUKKwkgKiA8ZGQ+VGhlIG5hbWUgb2YgdGhlIGNyZWF0aW9uIG1ldGhvZCB0aGlzIGVudHJ5IGlzIGZvciAoU3RyaW5nKS4KKwkgKiA8ZHQ+cmV0dXJuZWRDbGFzc25hbWUKKwkgKiA8ZGQ+VGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgaXMgY3JlYXRlZCBhbmQgcmV0dXJuZWQgZnJvbSB0aGUgbWV0aG9kIChTdHJpbmcpLgorCSAqIDxkdD5pc1N0YXRpYworCSAqIDxkZD48Y29kZT5Cb29sZWFuLlRSVUU8L2NvZGU+IGlmIHRoZSBtZXRob2QgaXMgYSBzdGF0aWMgbWV0aG9kLCA8Y29kZT5Cb29sZWFuLkZBTFNFPC9jb2RlPiBpZiBub3QuIAorCSAqIFRoaXMgaXMgdXNlZCB3aGVuIGEgY29tcG9uZW50IGlzIGRyb3BwZWQgZnJvbSB0aGUgcGFsZXR0ZSB0aGF0IGlzIGZvciBhIHRvb2xraXQgY29tcG9uZW50LgorCSAqIDxkdD5PYmplY3RbXQorCSAqIDxkZD5aZXJvIG9yIG1vcmUgYXJyYXlzLiBUaGUgYXJyYXkgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnRpZXMgZm9yIGVhY2ggbWV0aG9kIHNpZ25hdHVyZSB0aGF0IGVhY2gKKwkgKiByZXNwZWN0aXZlIGFyZ3VtZW50IGlzIGZvciwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhhdCBhcmcgaXMgbm90IGEgcHJvcGVydHkuIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFycmF5IGlmIHRoZXJlCisJICogaXMgbW9yZSB0aGFuIG9uZSBmYWN0b3J5IG1ldGhvZCBvZiB0aGUgc2FtZSBuYW1lLCBhbmQgcmV0dXJucyB0aGUgc2FtZSB0eXBlLCBidXQgd2hhdCBpcyBkaWZmZXJlbnQgaXMgb25seSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKwkgKiBJZiB0aGVyZSBpcyBhCisJICogZmFjdG9yeSBtZXRob2QgdGhhdCBoYXMgbm8gcHJvcGVydGllcyBhcyBhcmd1bWVudHMgb3IgaGFzIG5vIGFyZ3VtZW50cywgZG9uJ3QgaW5jbHVkZSBhbiBhcnJheSBmb3IgaXQuIEZvciBleGFtcGxlIGlmIHRoZXJlIHdhcyBvbmx5IG9uZSBmYWN0b3J5IG1ldGhvZCBhbmQgaXQgaGFkIG5vCisJICogYXJndW1lbnRzIHRoZW4gdGhlcmUgd291bGQgbm90IGJlIGFueSBhcnJheXMuCisJICogQ3VycmVudGx5IGNhbm5vdCBoYW5kbGUgd2hlcmUgbW9yZSB0aGFuIG9uZSBtZXRob2QgaGFzIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgYnV0IGRpZmZlcmVudCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50cy4KKwkgKiA8L2RsPgorCSAqIDxwPgorCSAqIEEgZXhhbXBsZSBpczoKKwkgKiA8cHJlPjxjb2RlPgorCSAqIG5ldyBPYmplY3RbXVtdIHsKKwkgKiAgIHsibmV3IGEuYi5jLlRvb2xraXQoXCJBQkNcIikiLCBCb29sZWFuLlRSVUUsIEJvb2xlYW4uRkFMU0V9LAorCSAqICAgeyJjcmVhdGVCdXR0b24iLCAiYS5iLmMuQnV0dG9uIiwgQm9vbGVhbi5GQUxTRSwgbmV3IE9iamVjdFtdIHsicGFyZW50IiwgInRleHQifSwgbmV3IE9iamVjdFtdIHsicGFyZW50In19CisJICogfQorCSAqIDwvY29kZT4KKwkgKiA8L3ByZT4KKwkgKiA8cD4KKwkgKiBUaGlzIGV4YW1wbGUgc2F5cyB0aGF0IHRoaXMgY2xhc3MgaXMgdG9vbGtpdCAoZmFjdG9yeSkuIFRvIGNvbnN0cnVjdCBhbiBpbnN0ZWFkIHVzZSA8Y29kZT4ibmV3IGEuYi5jLlRvb2xraXQoXCJBQkNcIikiPC9jb2RlPiBhbmQgaXQgaXMgc2hhcmVkCisJICogd2l0aCBvdGhlciBvYmplY3RzIGNyZWF0ZWQgZnJvbSB0aGlzIGZhY3RvcnkgaW5zdGFuY2UuIEFsc28sIHRoZSBmYWN0b3J5IG1ldGhvZCBpcyAiY3JlYXRlQnV0dG9uIiwgcmV0dXJucyBhbiAiYS5iLmMuQnV0dG9uIiwgYW5kIGl0IGlzCisJICogbm90IGEgc3RhdGljIGNhbGwgKGkuZS4gdXNlIGEgdG9vbGtpdCBpbnN0YW5jZSB0byBjcmVhdGUgaXQpLiBJdCBoYXMgdHdvIGZvcm1zIG9mIGZhY3RvcnkgbWV0aG9kcy4gT25lIGlzIHR3byBhcmd1bWVudHMgd2hlcmUgdGhlIGZpcnN0CisJICogYXJnIGlzIHRoZSBwYXJlbnQgcHJvcGVydHkgYW5kIHRoZSBzZWNvbmQgYXJnIGlzIHRoZSB0ZXh0IHByb3BlcnR5LiBUaGUgb3RoZXIgZm9ybSBoYXMgb25seSBvbmUgYXJndW1lbnQsIHRoZSBwYXJlbnQgcHJvcGVydHkuCisJICogPHA+CisJICogVGhlIHdheSB0aGlzIGlzIHVzZWQgaW4gYSBwYWxldHRlIGVudHJ5IHRvIGRyb3AgYSBuZXcgb2JqZWN0IHRoYXQgYSB0b29sa2l0IGNhbiBjcmVhdGUgaXMgdG8gaGF2ZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtCisJICogPGNvZGU+e3Rvb2xraXQ6Y2xhc3NuYW1lfS5mYWN0b3J5bWV0aG9kKGFyZ3MpPC9jb2RlPi4gU28gZm9yIHRoZSBhYm92ZSBleGFtcGxlIGl0IHdvdWxkIGJlIDxjb2RlPnt0b29sa2l0OmEuYi5jLlRvb2xraXR9LmNyZWF0ZUJ1dHRvbihwYXJlbnQpPC9jb2RlPi4KKwkgKiBUaGUgY2xhc3NuYW1lIDxiPm11c3Q8L2I+IGJlIGZ1bGx5LXF1YWxpZmllZCBhbmQgaWYgYW4gaW5uZXIgY2xhc3MgaXQgbXVzdCB1c2UgdGhlICIkIiBpbnN0ZWFkIG9mICIuIiBmb3IgdGhlIG5hbWUsIGkuZS4gYS5iLmMuVG9vbGtpdC5Jbm5lckZhY3RvcnkKKwkgKiB3b3VsZCBiZSBhLmIuYy5Ub29sa2l0JElubmVyRmFjdG9yeS4gCisJICogPHA+CisJICogPGI+Tk9URTo8L2I+IFRoaXMgaXMgYW4gRVhQRVJJTUVOVEFMIEFQSSBhbmQgY2FuIGNoYW5nZSBpbiB0aGUgZnV0dXJlIHVudGlsIGNvbW1pdHRlZC4gIAorCSAqICAgCisJICogQHNpbmNlIDEuMi4wCisJICovCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBQ1RPUllfQ1JFQVRJT04gPSAiRkFDVE9SWV9DUkVBVElPTiI7Ly8kTk9OLU5MUy0xJAorCQkKKwkvKioKKwkgKiBDYXRlZ29yeSBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4gQ2F0ZWdvcnkgaXMgYSBwcmUtZGVmaW5lZCBhdHRyaWJ1dGUgbmFtZSB0b28uIFRoYXQgaXMgd2hlcmUgdGhlIGNhdGVnb3J5IGlzIHN0b3JlZCBpbiBhCisJICogZGVzY3JpcHRvci4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWSA9ICJjYXRlZ29yeSI7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiBFbnVtZXJhdGlvbiB2YWx1ZXMgaW5kaWNhdG9yIGZvciBhcHBseSBwcm9wZXJ0eSBhcmd1bWVudHMuIEVudW1lcmF0aW9uIHZhbHVlcyBpcyBhIHByZS1kZWZpbmVkIGF0dHJpYnV0ZSBuYW1lIHRvby4gVGhhdCBpcyB3aGVyZSB0aGUKKwkgKiBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlIHN0b3JlZC4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTlVNRVJBVElPTlZBTFVFUyA9ICJlbnVtZXJhdGlvblZhbHVlcyI7Ly8kTk9OLU5MUy0xJAorCQorCS8vIFRoZSBrZXlzIGZvciBpY29uIGZpbGUgbmFtZXMsIE5PVCBUSEUgamF2YS5hd3QuaWNvbiBrZXkuCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNPTkNPTE9SMTZYMTZVUkwgPSAiSUNPTl9DT0xPUl8xNngxNl9VUkwiOyAvLyROT04tTkxTLTEkCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElDT05DT0xPUjMyWDMyVVJMID0gIklDT05fQ09MT1JfMzJ4MzJfVVJMIjsgLy8kTk9OLU5MUy0xJCAgICAgCS8vIE5vdCB1c2VkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNPTk1PTk8xNlgxNlVSTCA9ICJJQ09OX01PTk9fMTZ4MTZfVVJMIjsgLy8kTk9OLU5MUy0xJCAgICAgICAgCS8vIE5vdCB1c2VkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNPTk1PTk8zMlgzMlVSTCA9ICJJQ09OX01PTk9fMzJ4MzJfVVJMIjsgLy8kTk9OLU5MUy0xJAkJCS8vIE5vdCB1c2VkCisKKworCS8qKgorCSAqIEZlYXR1cmVBdHRyaWJ1dGUga2V5IGZvciBleHBsaWNpdCBwcm9wZXJ0eSBjaGFuZ2VzLiBUaGUgdmFsdWUgaXMgYSBCb29sZWFuLiA8Y29kZT50cnVlPC9jb2RlPgorCSAqIGluZGljYXRlcyB0aGF0IHRoZSBDdXN0b21pemUgQmVhbiBjdXN0b21pemVyIHN1cHBsaWVkIGJ5IHRoZSBCZWFuSW5mbyB3aWxsIGluZGljYXRlIHdoaWNoCisJICogcHJvcGVydGllcyBpdCBoYXMgY2hhbmdlZCB0aHJvdWdoIGZpcmluZyB7QGxpbmsgamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50fSBpbnN0ZWFkIG9mIHRoZSAKKwkgKiBWaXN1YWwgRWRpdG9yIGF1dG9tYXRpY2FsbHkgdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgc2V0IG9mIGNoYW5nZWQgcHJvcGVydGllcy4KKwkgKiA8cD4KKwkgKiBUaGUgZGVmYXVsdCBpZiBub3Qgc2V0IGlzIDxjb2RlPmZhbHNlPC9jb2RlPi4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUExJQ0lUX1BST1BFUlRZX0NIQU5HRSA9ICJFWFBMSUNJVF9QUk9QRVJUWV9DSEFOR0UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBVc2VkIGJ5IFZpc3VhbCBFZGl0b3IgYXMgZmVhdHVyZSBhdHRyaWJ1dGUga2V5L3ZhbHVlIHRvIGluZGljYXRlIHRoYXQgaXQgbXVzdCBjcmVhdGUgYW4gaW1wbGljaXQgc2V0dGluZyBvZiBhIHByb3BlcnR5KHMpLgorCSAqIEZvciBleGFtcGxlIHtAbGluayBqYXZheC5zd2luZy5KRnJhbWUjZ2V0Q29udGVudFBhbmUoKX0uIFRoZXJlIG11c3QgYmUgYSBjb250ZW50IHBhbmUKKwkgKiBzZXQgaW4gdGhlIFZFIG1vZGVsIHNvIHRoYXQgdXNlcnMgY2FuIGRyb3AgdGhlIGNvbXBvbmVudHMgb24gaXQuIFNldHRpbmcgdGhpcyBoZXJlCisJICogbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBjb250ZW50IHBhbmUgZnJvbSB0aGUgSkZyYW1lIHdpbGwgc2hvdyB1cCBpbiB0aGUgZWRpdG9yIHRvIHVzZS4KKwkgKiA8cD4KKwkgKiBUaGlzIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSBpbiB0aGF0IG5vdCBhbGwgcHJvcGVydGllcyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIHNob3cgdXAuCisJICogVGhleSBjYW4gYmUgcXVlcmllZCB3aGVuIG5lZWRlZC4KKwkgKiA8cD4KKwkgKiBUaGUgdmFsdWUgY2FuIGJlIGVpdGhlciBhIHtAbGluayBTdHJpbmd9IGZvciBvbmUgcHJvcGVydHkuIE9yIGl0IGNhbiBiZSBhIHtAbGluayBTdHJpbmdbXX0gZm9yIG1vcmUKKwkgKiB0aGFuIG9uZSBwcm9wZXJ0eS4KKwkgKiAKKwkgKiBAc2luY2UgMS4yLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVSVJFRF9JTVBMSUNJVF9QUk9QRVJUSUVTID0gInJlcXVpcmVkSW1wbGljaXRQcm9wZXJ0aWVzIjsJLy8kTk9OLU5MUy0xJAorCit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9CZWFuUmVjb3JkLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9CZWFuUmVjb3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0YjBkOAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0JlYW5SZWNvcmQuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKworCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvbW1vbjsKKyAKKworLyoqCisgKiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3Igc2VuZGluZyB0aGUgQmVhbkRlc2NyaXB0b3IgaW5mbyBmcm9tCisgKiB0aGUgQmVhbkluZm8gdm0gdG8gdGhlIElERSB2bS4gSXQgaXMgc2VyaWFsaXphYmxlIHNvIHRoYXQgaXQgY2FuCisgKiBiZSBzZXJpYWxpemVkIGZvciB0cmFuc21pc3Npb24uCisgKiA8cD4KKyAqIEl0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBCZWFuRGVzY3JpcHRvci4gCisgKiBAc2luY2UgMS4xLjAKKyAqLworcHVibGljIGNsYXNzIEJlYW5SZWNvcmQgZXh0ZW5kcyBGZWF0dXJlUmVjb3JkIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDExMDU5Nzk5MjA2NjRMOworCQorCXB1YmxpYyBTdHJpbmcgY3VzdG9taXplckNsYXNzTmFtZTsKKwlwdWJsaWMgYm9vbGVhbiBtZXJnZUluaGVyaXRlZFByb3BlcnRpZXM7CisJcHVibGljIGJvb2xlYW4gbWVyZ2VJbmhlcml0ZWRPcGVyYXRpb25zOworCXB1YmxpYyBib29sZWFuIG1lcmdlSW5oZXJpdGVkRXZlbnRzOworCS8qKgorCSAqIE5hbWVzIG9mIHByb3BlcnRpZXMgdGhhdCBhcmUgdG8gbm90IGJlIGluaGVyaXRlZCBpbiBnZXRBbGxQcm9wZXJ0aWVzKCkuIEl0IGlzIHNldCBvbmx5CisJICogaWYgdGhlIGxpc3QgaXMgbm90IHRoZSBmdWxsIGxpc3Qgb2YgaW5oZXJpdGVkIHByb3BlcnRpZXMuCisJICogSWYgYWxsIGluaGVyaXRlZCBvciBtZXJnZUluaGVyaXRlZFByb3BlcnRpZXMgaXMgZmFsc2UsIHRoZW4gdGhlIGZpZWxkIHdpbGwgYmUgPGNvZGU+bnVsbDwvY29kZT4uIFNhdmUgc3BhY2UgdGhhdCB3YXkuCisJICovCisJcHVibGljIFN0cmluZ1tdIG5vdEluaGVyaXRlZFByb3BlcnR5TmFtZXM7CisJLyoqCisJICogTmFtZXMgb2Ygb3BlcmF0aW9ucyB0aGF0IGFyZSB0byBub3QgYmUgaW5oZXJpdGVkIGluIGdldEVBbGxPcGVyYXRpb25zKCkuIEl0IGlzIHNldCBvbmx5CisJICogaWYgdGhlIGxpc3QgaXMgbm90IHRoZSBmdWxsIGxpc3Qgb2YgaW5oZXJpdGVkIG9wZXJhdGlvbnMuIAorCSAqIElmIGFsbCBhcmUgaW5oZXJpdGVkIG9yIGlmIG1lcmdlSW5oZXJpdGVkT3BlcmF0aW9ucyBpcyBmYWxzZSwgdGhlbiB0aGUgZmllbGQgd2lsbCBiZSA8Y29kZT5udWxsPC9jb2RlPi4gU2F2ZSBzcGFjZSB0aGF0IHdheS4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nW10gbm90SW5oZXJpdGVkT3BlcmF0aW9uTmFtZXM7CisJLyoqCisJICogTmFtZXMgb2YgZXZlbnRzIHRoYXQgYXJlIHRvIG5vdCBiZSBpbmhlcml0ZWQgaW4gZ2V0QWxsRXZlbnRzKCkuIEl0IGlzIHNldCBvbmx5CisJICogaWYgdGhlIGxpc3QgaXMgbm90IHRoZSBmdWxsIGxpc3Qgb2YgaW5oZXJpdGVkIGV2ZW50cy4KKwkgKiBJZiBhbGwgYXJlIGluaGVyaXRlZCBvciBpZiBtZXJnZUluaGVyaXRlZEV2ZW50cyBpcyBmYWxzZSwgdGhlbiB0aGUgZmllbGQgd2lsbCBiZSA8Y29kZT5udWxsPC9jb2RlPi4gU2F2ZSBzcGFjZSB0aGF0IHdheS4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nW10gbm90SW5oZXJpdGVkRXZlbnROYW1lczsKKworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vRXZlbnRTZXRSZWNvcmQuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0V2ZW50U2V0UmVjb3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzNTM4MgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0V2ZW50U2V0UmVjb3JkLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisKKworICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb21tb247CisgCisKKy8qKgorICogVGhpcyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHNlbmRpbmcgdGhlIEV2ZW50U2V0RGVzY3JpcHRvciBpbmZvIGZyb20KKyAqIHRoZSBCZWFuSW5mbyB2bSB0byB0aGUgSURFIHZtLiBJdCBpcyBzZXJpYWxpemFibGUgc28gdGhhdCBpdCBjYW4KKyAqIGJlIHNlcmlhbGl6ZWQgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIDxwPgorICogSXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIEV2ZW50U2V0RGVzY3JpcHRvci4gCisgKiBAc2luY2UgMS4xLjAKKyAqLworcHVibGljIGNsYXNzIEV2ZW50U2V0UmVjb3JkIGV4dGVuZHMgRmVhdHVyZVJlY29yZCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTEwNTk4MDc3MzQyMEw7CisJCisJcHVibGljIFJlZmxlY3RNZXRob2RSZWNvcmQgYWRkTGlzdGVuZXJNZXRob2Q7CisJcHVibGljIFN0cmluZyBldmVudEFkYXB0ZXJDbGFzc05hbWU7CisJcHVibGljIE1ldGhvZFJlY29yZFtdIGxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnM7CisJcHVibGljIFN0cmluZyBsaXN0ZW5lclR5cGVOYW1lOworCXB1YmxpYyBSZWZsZWN0TWV0aG9kUmVjb3JkIHJlbW92ZUxpc3RlbmVyTWV0aG9kOworCXB1YmxpYyBib29sZWFuIGluRGVmYXVsdEV2ZW50U2V0OworCXB1YmxpYyBib29sZWFuIHVuaWNhc3Q7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9GZWF0dXJlQXR0cmlidXRlVmFsdWUuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0ZlYXR1cmVBdHRyaWJ1dGVWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MGI1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9GZWF0dXJlQXR0cmlidXRlVmFsdWUuamF2YQpAQCAtMCwwICsxLDc4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5wcm94eS5jb21tb24uTWFwVHlwZXM7CisKKyAKKworLyoqCisgKiBUaGlzIGlzIHRoZSB2YWx1ZSBmb3IgYSBGZWF0dXJlQXR0cmlidXRlLiBJdCB3cmFwcGVycyB0aGUgdHJ1ZSBqYXZhIG9iamVjdC4KKyAqIFVzZSB0aGUgZ2V0T2JqZWN0IG1ldGhvZCB0byBnZXQgdGhlIGphdmEgdmFsdWUuCisgKiA8cD4KKyAqIFdlIGNhbiBvbmx5IHJlcHJlc2VudCBTdHJpbmdzLCBwcmltaXRpdmVzLCBhbmQgYXJyYXlzLiAoUHJpbWl0aXZlcyB3aWxsIGNvbnZlcnRlZAorICogdG8gdGhlaXIgd3JhcHBlciBjbGFzcyAoZS5nLiBMb25nKSwgYW5kIGJ5dGUsIHNob3J0LCBhbmQgaW50IHdpbGwgbW92ZSB1cCB0byBMb25nLAorICogYW5kIGZsb2F0IHdpbGwgbW92ZSB1cCB0byBEb3VibGUpLiAgQW5kIGFueSBraW5kIG9mIHZhbGlkIGFycmF5IG9uIHRoZSBqYXZhIEJlYW5JbmZvIHNpZGUKKyAqIHdpbGwgYmUgY29udmVydGVkIHRvIGFuIE9iamVjdCBhcnJheSBvbiB0aGUgSURFIHNpZGUuIFdlIGRvbid0IGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gYWxsb3cgbW9yZSBjb21wbGV4IG9iamVjdHMgCisgKiBiZWNhdXNlIHRoZSBJREUgbWF5IG5vdCBoYXZlIHRoZSBuZWNlc3NhcnkgY2xhc3NlcyBhdmFpbGFibGUgdG8gaXQgdGhhdCAKKyAqIHRoZSBCZWFuSW5mbyBtYXkgb2YgaGFkIGF2YWlsYWJsZSB0byBpdC4gSW52YWxpZCBvYmplY3RzIHdpbGwgYmUgcmVwcmVzZW50ZWQKKyAqIGJ5IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2Yge0BsaW5rIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb21tb24uSW52YWxpZE9iamVjdH0uCisgKiA8cD4KKyAqIDxiPk5vdGU6PC9iPgorICogQ2xhc3Mgb2JqZWN0cyB0aGF0IGFyZSB2YWx1ZXMgb2YgRmVhdHVyZSBhdHRyaWJ1dGVzIG9uIHRoZSBqYXZhIEJlYW5JbmZvIHNpZGUgd2lsbCBiZQorICogY29udmVydGVkIHRvIHNpbXBsZSBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGNsYXNzbmFtZSB3aGVuIG1vdmVkIHRvIHRoZSBjbGllbnQgKElERSkgc2lkZS4KKyAqIFRoYXQgaXMgYmVjYXVzZSB0aGUgY2xhc3NlcyBwcm9iYWJseSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgb24gdGhlIElERSBzaWRlLCBidXQgY2FuIGJlCisgKiB1c2VkIHRvIHJlY29uc3RydWN0IHRoZSBjbGFzcyB3aGVuIHVzZWQgYmFjayBvbiB0aGUgamF2YSB2bSBzaWRlLiAKKyAqIEBzaW5jZSAxLjEuMAorICovCitwdWJsaWMgY2xhc3MgRmVhdHVyZUF0dHJpYnV0ZVZhbHVlIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKKwkKKwlwcml2YXRlIHRyYW5zaWVudCBPYmplY3QgdmFsdWU7CisJcHJpdmF0ZSB0cmFuc2llbnQgT2JqZWN0IGludGVybmFsVmFsdWU7CisJcHJpdmF0ZSBib29sZWFuIGltcGxpY2l0VmFsdWU7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTEwNTcxNzYzNDg0NEw7CisJCisJLyoqCisJICogQ3JlYXRlIHRoZSB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBpbml0IHN0cmluZy4KKwkgKiA8cD4KKwkgKiBUaGlzIGlzIG5vdCBtZWFudCB0byBiZSB1c2VkIGJ5IGNsaWVudHMuCisJICogQHBhcmFtIGluaXRTdHJpbmcKKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgRmVhdHVyZUF0dHJpYnV0ZVZhbHVlKFN0cmluZyBpbml0U3RyaW5nKSB7CisJCS8vIFVzZSB0aGUgaW5pdCBzdHJpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4gVGhpcyBpcyBvdXIKKwkJLy8gb3duIHNob3J0LWhhbmQgZm9yIHRoaXMuCisJCWlmIChpbml0U3RyaW5nLnN0YXJ0c1dpdGgoSU1QTElDSVQpKSB7CisJCQlzZXRJbXBsaWNpdFZhbHVlKHRydWUpOworCQkJaW5pdFN0cmluZyA9IGluaXRTdHJpbmcuc3Vic3RyaW5nKElNUExJQ0lULmxlbmd0aCgpKTsKKwkJfQorCQl2YWx1ZSA9IHBhcnNlU3RyaW5nKGluaXRTdHJpbmcpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgd2hlbiBjdXN0b21lciB3YW50cyB0byBmbHVmZiBvbmUgdXAuCisJICogCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIEZlYXR1cmVBdHRyaWJ1dGVWYWx1ZSgpIHsKKwkJCisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsdWUuCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIE9iamVjdCBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKwkKKwkvKioKKwkgKiBTZXQgYSB2YWx1ZS4KKwkgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4KKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWx1ZShPYmplY3QgdmFsdWUpIHsKKwkJdGhpcy52YWx1ZSA9IHZhbHVlOworCQl0aGlzLnNldEludGVybmFsVmFsdWUobnVsbCk7CisJfQorCQkKKwkvKioKKwkgKiBTZXQgdGhlIGludGVybmFsIHZhbHVlLgorCSAqIEBwYXJhbSBpbnRlcm5hbFZhbHVlIFRoZSBpbnRlcm5hbFZhbHVlIHRvIHNldC4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbnRlcm5hbFZhbHVlKE9iamVjdCBpbnRlcm5hbFZhbHVlKSB7CisJCXRoaXMuaW50ZXJuYWxWYWx1ZSA9IGludGVybmFsVmFsdWU7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW50ZXJuYWwgdmFsdWUuIEl0IGlzIHRoZSA8Y29kZT52YWx1ZTwvY29kZT4gbWFzc2FnZWQgaW50byBhbiBlYXNpZXIgdG8gdXNlIGZvcm0KKwkgKiBpbiB0aGUgSURFLiBJdCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkIG91dC4gSXQgd2lsbCBub3QgYmUgcmVjb25zdHJ1Y3RlZCBmcm9tIGFuIGluaXQgc3RyaW5nLgorCSAqIDxwPiAKKwkgKiBJdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHVzZWQuIEl0IHdpbGwgYmUgY2xlYXJlZCBpZgorCSAqIGEgbmV3IHZhbHVlIGlzIHNldC4gRm9yIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBpcyBhIGNvbXBsaWNhdGVkIGFycmF5IChiZWNhdXNlIHlvdSBjYW4ndCBoYXZlCisJICogc3BlY2lhbCBjbGFzc2VzIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUgb24gdGhlIEJlYW5JbmZvIHNpZGUpIHRoZSBmaXJzdCB1c2FnZSBvZiB0aGlzIHZhbHVlIGNhbgorCSAqIGJlIHRyYW5zbGF0ZWQgaW50byBhbiBlYXNpZXIgZm9ybSB0byB1c2UsIHN1Y2ggYXMgYSBtYXAuCisJICogCisJICogQHJldHVybiBSZXR1cm5zIHRoZSBpbnRlcm5hbFZhbHVlLgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0SW50ZXJuYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGludGVybmFsVmFsdWU7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKHZhbHVlID09IG51bGwpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwkJU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoMTAwKTsKKwkJaWYgKGlzSW1wbGljaXRWYWx1ZSgpKQorCQkJb3V0LmFwcGVuZChJTVBMSUNJVCk7CisJCW1ha2VTdHJpbmcodmFsdWUsIG91dCk7CisJCXJldHVybiBvdXQudG9TdHJpbmcoKTsKKwl9CisJCisKKwkvKioKKwkgKiBIZWxwZXIgbWV0aG9kIHRvIHRha2UgdGhlIG9iamVjdCBhbmQgdHVybiBpdCBpbnRvIHRoZQorCSAqIHN0cmluZyBmb3JtIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEVNRiBzZXJpYWxpemF0aW9uLgorCSAqIDxwPgorCSAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5LiBJdCBjYW4gYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgCisJICogcHVycG9zZXMgYnkgY2xpZW50cywgYnV0IHRoZXkgd291bGQgbm90IGhhdmUgYW55IHJlYWwKKwkgKiBydW50aW1lIG5lZWQgZm9yIHRoaXMuCisJICogPHA+CisJICogT3V0cHV0IGZvcm1hdCB3b3VsZCBiZSAodGhlcmUgd29uJ3QgYmUgYW55IG5ld2xpbmVzIGluIHRoZSBhY3R1YWwgc3RyaW5nKQorCSAqIDxwcmU+CisJICogICBTdHJpbmc6ICJ6eHZ6eHYiCisJICogICBOdW1iZXI6IG51bWJlcgorCSAqICAgQm9vbGVhbjogdHJ1ZSBvciBmYWxzZQorCSAqICAgQ2hhcmFjdGVyOiAnYycKKwkgKiAgIG51bGw6IG51bGwKKwkgKiAKKwkgKiAgIEFycmF5OiAoYWxsIGFycmF5cyB3aWxsIGJlIHR1cm5lZCBpbnRvIE9iamVjdFtdKQorCSAqICAgICBbZGltXXtlMSwgZTJ9CisJICogICAgIFtkaW0xXVtkaW0yXXtbZGltMWFde2UxLCBlMn0sIFtkaW0yYV17ZTMsIGU0fX0KKwkgKiAgIHdoZXJlIGVuIGFyZSBvYmplY3RzIHRoYXQgZm9sbG93IHRoZSBwYXR0ZXJuIGZvciBzaW5nbGUgb3V0cHV0IGFib3ZlLgorCSAqIAorCSAqICAgQW55IGludmFsaWQgb2JqZWN0IChpLmUuIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2UgaGFuZGxlKSB3aWxsIGJlOgorCSAqICAgICBJTlYKKwkgKiAKKwkgKiAgIEFycmF5cyBvZiBpbnZhbGlkIHR5cGVzIChub3QgT2JqZWN0LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbiwgQ2hhcmFjdGVyLAorCSAqICAgICBvciBwcmltaXRpdmVzKSB3aWxsIGJlIG1hcmtlZCBhcyBJTlYuCisJICogPC9wcmU+CisJICogQHBhcmFtIHZhbHVlCisJICogQHJldHVybiBzZXJpYWxpemVkIGZvcm0gYXMgYSBzdHJpbmcuCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbWFrZVN0cmluZyhPYmplY3QgdmFsdWUpIHsKKwkJU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoMTAwKTsKKwkJbWFrZVN0cmluZyh2YWx1ZSwgb3V0KTsKKwkJcmV0dXJuIG91dC50b1N0cmluZygpOworCX0KKwkJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBRVU9URSA9IFBhdHRlcm4uY29tcGlsZSgiXCIiKTsJLy8gUGF0dGVybiBmb3Igc2VhcmNoaW5nIGZvciBkb3VibGUtcXVvdGUuIE1ha2UgaXQgc3RhdGljIHNvIGRvbid0IHdhc3RlIHRpbWUgY29tcGlsaW5nIGVhY2ggdGltZS4gLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOVUxMID0gIm51bGwiOwkvLyBPdXRwdXQgc3RyaW5nIGZvciBudWxsIC8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5WQUxJRCA9ICJJTlYiOwkvLyBJbnZhbGlkIG9iamVjdCBmbGFnLiAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNUExJQ0lUID0gImltcGxpY2l0LCI7CS8vIEltcGxpY2l0IGZsYWcuIC8vJE5PTi1OTFMtMSQKKwkKKwkvKgorCSAqIFVzZWQgZm9yIHJlY3Vyc2l2ZSBidWlsZGluZyBvZiB0aGUgc3RyaW5nLgorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgbWFrZVN0cmluZyhPYmplY3QgdmFsdWUsIFN0cmluZ0J1ZmZlciBvdXQpIHsKKwkJaWYgKHZhbHVlID09IG51bGwpCisJCQlvdXQuYXBwZW5kKE5VTEwpOworCQllbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIENsYXNzKSB7CisJCQkvLyBTdHJpbmc6ICJzdHJpbmciIG9yICJzdHJpbmdcInN0cmluZ2VuZCIgaWYgc3RyIGluY2x1ZGVkIGEgZG91YmxlLXF1b3RlLgorCQkJb3V0LmFwcGVuZCgnIicpOworCQkJLy8gSWYgY2xhc3MsIHR1cm4gdmFsdWUgaW50byB0aGUgY2xhc3NuYW1lLgorCQkJU3RyaW5nIHN0ciA9IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nID8gKFN0cmluZykgdmFsdWUgOiAoKENsYXNzKSB2YWx1ZSkuZ2V0TmFtZSgpOworCQkJaWYgKHN0ci5pbmRleE9mKCciJykgIT0gLTEpIHsKKwkJCQkvLyBSZXBsYWNlIGRvdWJsZS1xdW90ZSB3aXRoIGVzY2FwZSBkb3VibGUtcXVvdGUgc28gd2UgY2FuIGRpc3RpbnF1aXNoIGl0IGZyb20gdGhlIHRlcm1pbmF0aW5nIGRvdWJsZS1xdW90ZS4KKwkJCQlvdXQuYXBwZW5kKFFVT1RFLm1hdGNoZXIoc3RyKS5yZXBsYWNlQWxsKCJcXFxcXCIiKSk7CS8vIERvbid0IGtub3cgd2h5IHdlIG5lZWQgdGhlIGJhY2stc2xhc2ggdG8gYmUgZG91YmxlZCBmb3IgcmVwbGFjZWFsbCwgYnV0IGl0IGRvZXNuJ3Qgd29yayBvdGhlcndpc2UuIC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZQorCQkJCW91dC5hcHBlbmQoc3RyKTsKKwkJCW91dC5hcHBlbmQoJ1wiJyk7CisJCX0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHsKKwkJCS8vIFdpbGwgZ28gb3V0IGFzIGVpdGhlciBhIGludGVnZXIgbnVtYmVyIG9yIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiAKKwkJCS8vIFdoZW4gcmVhZCBiYWNrIGluIGl0IHdpbGwgYmUgZWl0aGVyIGEgTG9uZyBvciBhIERvdWJsZS4KKwkJCW91dC5hcHBlbmQodmFsdWUpOworCQl9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikgeworCQkJLy8gSXQgd2lsbCBnbyBvdXQgYXMgZWl0aGVyIHRydWUgb3IgZmFsc2UuCisJCQlvdXQuYXBwZW5kKHZhbHVlKTsKKwkJfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENoYXJhY3RlcikgeworCQkJLy8gQ2hhcmFjdGVyOiAnYycgb3IgJ1wnJyBpZiBjaGFyIHdhcyBhIHF1b3RlLgorCQkJb3V0LmFwcGVuZCgnXCcnKTsKKwkJCUNoYXJhY3RlciBjID0gKENoYXJhY3RlcikgdmFsdWU7CisJCQlpZiAoYy5jaGFyVmFsdWUoKSAhPSAnXCcnKQorCQkJCW91dC5hcHBlbmQoYy5jaGFyVmFsdWUoKSk7CisJCQllbHNlCisJCQkJb3V0LmFwcGVuZCgiXFwnIik7IC8vJE5PTi1OTFMtMSQKKwkJCW91dC5hcHBlbmQoJ1wnJyk7CisJCX0gZWxzZSBpZiAodmFsdWUuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpIHsKKwkJCS8vIEhhbmRsZSBhcnJheSBmb3JtYXQuCisJCQlDbGFzcyB0eXBlID0gdmFsdWUuZ2V0Q2xhc3MoKTsKKwkJCS8vIFNlZSBpZiBmaW5hbCB0eXBlIGlzIGEgdmFsaWQgdHlwZS4KKwkJCUNsYXNzIGZ0ID0gdHlwZS5nZXRDb21wb25lbnRUeXBlKCk7CisJCQlpbnQgZGltcyA9IDE7CisJCQl3aGlsZSAoZnQuaXNBcnJheSgpKSB7CisJCQkJZGltcysrOworCQkJCWZ0ID0gZnQuZ2V0Q29tcG9uZW50VHlwZSgpOworCQkJfQorCQkJaWYgKGZ0ID09IE9iamVjdC5jbGFzcyB8fCBmdCA9PSBTdHJpbmcuY2xhc3MgfHwgZnQgPT0gQm9vbGVhbi5jbGFzcyB8fCBmdCA9PSBDaGFyYWN0ZXIuY2xhc3MgfHwgZnQuaXNQcmltaXRpdmUoKSB8fCBOdW1iZXIuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShmdCkpIHsKKwkJCQkvLyBbbGVuZ3RoXVtdW10gey4uLi59CisJCQkJb3V0LmFwcGVuZCgnWycpOworCQkJCWludCBsZW5ndGggPSBBcnJheS5nZXRMZW5ndGgodmFsdWUpOyAKKwkJCQlvdXQuYXBwZW5kKGxlbmd0aCk7CisJCQkJb3V0LmFwcGVuZCgnXScpOworCQkJCXdoaWxlKC0tZGltcyA+IDApIHsKKwkJCQkJb3V0LmFwcGVuZCgiW10iKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQlvdXQuYXBwZW5kKCd7Jyk7CisJCQkJZm9yIChpbnQgaT0wOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGkgIT0gMCkKKwkJCQkJCW91dC5hcHBlbmQoJywnKTsKKwkJCQkJbWFrZVN0cmluZyhBcnJheS5nZXQodmFsdWUsIGkpLCBvdXQpOworCQkJCX0KKwkJCQlvdXQuYXBwZW5kKCd9Jyk7CisJCQl9IGVsc2UKKwkJCQlvdXQuYXBwZW5kKElOVkFMSUQpOwkvLyBBbnkgb3RoZXIga2luZCBvZiBhcnJheSBpcyBpbnZhbGlkLgorCQl9IGVsc2UgeworCQkJb3V0LmFwcGVuZChJTlZBTElEKTsKKwkJfQorCX0KKwkKKwkKKwkvKioKKwkgKiBIZWxwZXIgbWV0aG9kIHRvIHRha2UgdGhlIHN0cmluZyBpbnB1dCBmcm9tIEVNRiBzZXJpYWxpemF0aW9uIGFuZCB0dXJuIGl0CisJICogaW50byBhbiBPYmplY3QuCisJICogPHA+CisJICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkuIEl0IGNhbiBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCAKKwkgKiBwdXJwb3NlcyBieSBjbGllbnRzLCBidXQgdGhleSB3b3VsZCBub3QgaGF2ZSBhbnkgcmVhbAorCSAqIHJ1bnRpbWUgbmVlZCBmb3IgdGhpcy4KKwkgKiA8cD4KKwkgKiBUaGUgb2JqZWN0IHdpbGwgYmUgYW4gb2JqZWN0LCBudWxsLCBvciBhbiBPYmplY3QgYXJyYXkuIEFueSB2YWx1ZQorCSAqIHRoYXQgaXMgaW52YWxpZCB3aWxsIGJlIHNldCB0byB0aGUge0BsaW5rIEludmFsaWRPYmplY3QjSU5TVEFOQ0V9IHN0YXRpYworCSAqIGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBpbnB1dAorCSAqIEByZXR1cm4gb2JqZWN0IGRlY29kZWQgZnJvbSB0aGUgaW5wdXQuCisJICogCisJICogQHNlZSAjbWFrZVN0cmluZyhPYmplY3QpCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBPYmplY3QgcGFyc2VTdHJpbmcoU3RyaW5nIGlucHV0KSB7CisJCXJldHVybiBwYXJzZVN0cmluZyhuZXcgU3RyaW5nUGFyc2VyKGlucHV0KSk7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0cmluZ1BhcnNlciB7CisJCXByaXZhdGUgaW50IG5leHQ9MDsKKwkJcHJpdmF0ZSBpbnQgbGVuZ3RoOworCQlwcml2YXRlIFN0cmluZyBpbnB1dDsKKwkJCisJCXB1YmxpYyBTdHJpbmdQYXJzZXIoU3RyaW5nIGlucHV0KSB7CisJCQl0aGlzLmlucHV0ID0gaW5wdXQ7CisJCQl0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOworCQl9CisJCQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJcmV0dXJuICJTdHJpbmdQYXJzZXI6IFwiIitpbnB1dCsnIic7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQkKKwkJcHVibGljIHZvaWQgc2tpcFdoaXRlc3BhY2UoKSB7CisJCQl3aGlsZShuZXh0IDwgbGVuZ3RoKSB7CisJCQkJaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGlucHV0LmNoYXJBdChuZXh0KyspKSkgeworCQkJCQluZXh0LS07CS8vIFB1dCBpdCBiYWNrIGFzIG5vdCB5ZXQgcmVhZCBzaW5jZSBpdCBpcyBub3Qgd2hpdGVzcGFjZS4KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCQorCQkvKioKKwkJICogUmV0dXJuIHRoZSBuZXh0IGluZGV4CisJCSAqIEByZXR1cm4KKwkJICogCisJCSAqIEBzaW5jZSAxLjEuMAorCQkgKi8KKwkJcHVibGljIGludCBuZXh0SW5kZXgoKSB7CisJCQlyZXR1cm4gbmV4dDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dAorCQkgKiBAcmV0dXJuIGlucHV0IGxlbmd0aAorCQkgKiAKKwkJICogQHNpbmNlIDEuMS4wCisJCSAqLworCQlwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKKwkJCXJldHVybiBsZW5ndGg7CisJCX0KKwkJCisJCQorCQkvKioKKwkJICogUmVhZCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kIGdvIHRvIG5leHQuCisJCSAqIEByZXR1cm4gY3VycmVudCBjaGFyYWN0ZXIKKwkJICogCisJCSAqIEBzaW5jZSAxLjEuMAorCQkgKi8KKwkJcHVibGljIGNoYXIgcmVhZCgpIHsKKwkJCXJldHVybiBuZXh0PGxlbmd0aCA/IGlucHV0LmNoYXJBdChuZXh0KyspIDogMDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEJhY2t1cCB0aGUgcGFyc2VyIG9uZSBjaGFyYWN0ZXIuCisJCSAqIAorCQkgKiAKKwkJICogQHNpbmNlIDEuMS4wCisJCSAqLworCQlwdWJsaWMgdm9pZCBiYWNrdXAoKSB7CisJCQlpZiAoLS1uZXh0IDwgMCkKKwkJCQluZXh0ID0gMDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIFBlZWsgYXQgdGhlIGNoYXIgYXQgdGhlIG5leHQgaW5kZXgsIGJ1dCBkb24ndCBpbmNyZW1lbnQgYWZ0ZXJ3YXJkcy4KKwkJICogQHJldHVybgorCQkgKiAKKwkJICogQHNpbmNlIDEuMS4wCisJCSAqLworCQlwdWJsaWMgY2hhciBwZWVrKCkgeworCQkJcmV0dXJuIG5leHQ8bGVuZ3RoID8gaW5wdXQuY2hhckF0KG5leHQpIDogMDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEhhdmUgd2UgcmVhZCB0aGUgbGFzdCBjaGFyLgorCQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHJlYWQgbGFzdCBjaGFyLgorCQkgKiAKKwkJICogQHNpbmNlIDEuMS4wCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBhdEVuZCgpIHsKKwkJCXJldHVybiBuZXh0Pj1sZW5ndGg7CisJCX0KKwkJCisJCS8qKgorCQkgKiBSZXNldCB0byB0aGUgZ2l2ZW4gbmV4dCBpbmRleC4KKwkJICogQHBhcmFtIG5leHRJbmRleCB0aGUgbmV4dCBpbmRleCB0byBkbyBhIHJlYWQgYXQuCisJCSAqIAorCQkgKiBAc2luY2UgMS4xLjAKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlc2V0KGludCBuZXh0SW5kZXgpIHsKKwkJCWlmIChuZXh0SW5kZXg8PWxlbmd0aCkKKwkJCQluZXh0ID0gbmV4dEluZGV4OworCQkJZWxzZQorCQkJCW5leHQgPSBsZW5ndGg7CisJCX0KKwkJCisJCS8qKgorCQkgKiBTa2lwIHRoZSBuZXh0IG51bWJlciBvZiBjaGFycy4KKwkJICogQHBhcmFtIHNraXAgbnVtYmVyIG9mIGNoYXJzIHRvIHNraXAuCisJCSAqIAorCQkgKiBAc2luY2UgMS4xLjAKKwkJICovCisJCXB1YmxpYyB2b2lkIHNraXAoaW50IHNraXApIHsKKwkJCWlmICgobmV4dCs9c2tpcCkgPiBsZW5ndGgpCisJCQkJbmV4dCA9IGxlbmd0aDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgc3RyaW5nIGlucHV0LgorCQkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgaW5wdXQKKwkJICogCisJCSAqIEBzaW5jZSAxLjEuMAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbnB1dCgpIHsKKwkJCXJldHVybiBpbnB1dDsKKwkJfQorCQkJCQorCX0KKwkKKwkvKgorCSAqIFN0YXJ0aW5nIGEgcGFyc2UgZm9yIGFuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gaW5kZXguCisJICogUmV0dXJuIHRoZSBwYXJzZWQgb2JqZWN0IG9yIEludmFsaWRPYmplY3QgaWYgbm8KKwkgKiBvYmplY3Qgb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHBhcnNpbmcuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IHBhcnNlU3RyaW5nKFN0cmluZ1BhcnNlciBwYXJzZXIpIHsKKwkJcGFyc2VyLnNraXBXaGl0ZXNwYWNlKCk7CisJCWlmICghcGFyc2VyLmF0RW5kKCkpIHsKKwkJCWNoYXIgYyA9IHBhcnNlci5yZWFkKCk7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCQljYXNlICciJzoKKwkJCQkJLy8gU3RhcnQgb2YgYSBxdW90ZWQgc3RyaW5nLiBTY2FuIGZvciBjbG9zaW5nIHF1b3RlLCBpZ25vcmluZyBlc2NhcGVkIHF1b3Rlcy4KKwkJCQkJaW50IHN0YXJ0ID0gcGFyc2VyLm5leHRJbmRleCgpOwkvLyBJbmRleCBvZiBmaXJzdCBjaGFyIGFmdGVyICciJworCQkJCQljaGFyW10gZGVxdW90ZWQgPSBudWxsOwkvLyBVc2VkIGlmIHRoZXJlIGlzIGFuIGVzY2FwZWQgcXVvdGUuIFRoYXQgaXMgdGhlIG9ubHkgdGhpbmcgd2Ugc3VwcG9ydCBlc2NhcGUgb24sIHF1b3Rlcy4KKwkJCQkJaW50IGRlcXVvdGVJbmRleCA9IDA7CisJCQkJCXdoaWxlICghcGFyc2VyLmF0RW5kKCkpIHsKKwkJCQkJCWNoYXIgY2MgPSBwYXJzZXIucmVhZCgpOworCQkJCQkJaWYgKGNjID09ICciJykgeworCQkJCQkJCS8vIElmIHdlIGRpZG4ndCBkZXF1b3RlLCB0aGVuIGp1c3QgZG8gc3Vic3RyaW5nLgorCQkJCQkJCWlmIChkZXF1b3RlZCA9PSBudWxsKQorCQkJCQkJCQlyZXR1cm4gcGFyc2VyLmdldElucHV0KCkuc3Vic3RyaW5nKHN0YXJ0LCBwYXJzZXIubmV4dEluZGV4KCktMSk7CS8vIG5leHQgaXMgY2hhciBhZnRlciAnIicsIHNvIGVuZCBvZiBzdHJpbmcgaW5kZXggaXMgaW5kZXggb2YgJyInCisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCS8vIFdlIGhhdmUgYSBkZXF1b3RlZCBzdHJpbmcuIFNvIHR1cm4gaW50byBhIHN0cmluZy4KKwkJCQkJCQkJLy8gR2F0aGVyIHRoZSBsYXN0IGdyb3VwCisJCQkJCQkJCWludCBlbmROZHggPSBwYXJzZXIubmV4dEluZGV4KCktMTsKKwkJCQkJCQkJcGFyc2VyLmdldElucHV0KCkuZ2V0Q2hhcnMoc3RhcnQsIGVuZE5keCwgZGVxdW90ZWQsIGRlcXVvdGVJbmRleCk7CisJCQkJCQkJCWRlcXVvdGVJbmRleCs9IChlbmROZHgtc3RhcnQpOworCQkJCQkJCQlyZXR1cm4gbmV3IFN0cmluZyhkZXF1b3RlZCwgMCwgZGVxdW90ZUluZGV4KTsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgaWYgKGNjID09ICdcXCcpIHsKKwkJCQkJCQkvLyBXZSBoYWQgYW4gZXNjYXBlLCBzZWUgaWYgbmV4dCBpcyBhIHF1b3RlLiBJZiBpdCBpcyB3ZSBuZWVkIHRvIHN0cmlwIG91dCB0aGUgJ1wnLgorCQkJCQkJCWlmIChwYXJzZXIucGVlaygpID09ICciJykgeworCQkJCQkJCQlpZiAoZGVxdW90ZWQgPT0gbnVsbCkgeworCQkJCQkJCQkJZGVxdW90ZWQgPSBuZXcgY2hhcltwYXJzZXIuZ2V0TGVuZ3RoKCldOworCQkJCQkJCQl9CisJCQkJCQkJCWludCBlbmROZHggPSBwYXJzZXIubmV4dEluZGV4KCktMTsKKwkJCQkJCQkJcGFyc2VyLmdldElucHV0KCkuZ2V0Q2hhcnMoc3RhcnQsIGVuZE5keCwgZGVxdW90ZWQsIGRlcXVvdGVJbmRleCk7CS8vIEdldCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcgJ1wnCisJCQkJCQkJCWRlcXVvdGVJbmRleCs9IChlbmROZHgtc3RhcnQpOworCQkJCQkJCQkvLyBOb3cgYWxzbyBhZGQgaW4gdGhlIGVzY2FwZWQgcXVvdGUuCisJCQkJCQkJCWRlcXVvdGVkW2RlcXVvdGVJbmRleCsrXSA9IHBhcnNlci5yZWFkKCk7CisJCQkJCQkJCXN0YXJ0ID0gcGFyc2VyLm5leHRJbmRleCgpOwkvLyBOZXh0IGdyb3VwIGlzIGZyb20gbmV4dCBpbmRleC4KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7CS8vIElmIHdlIGdvdCBoZXJlLCBpdCBpcyBpbnZhbGlkLgorCQkJCQkKKwkJCQljYXNlICctJzoKKwkJCQljYXNlICcwJzoKKwkJCQljYXNlICcxJzoKKwkJCQljYXNlICcyJzoKKwkJCQljYXNlICczJzoKKwkJCQljYXNlICc0JzoKKwkJCQljYXNlICc1JzoKKwkJCQljYXNlICc2JzoKKwkJCQljYXNlICc3JzoKKwkJCQljYXNlICc4JzoKKwkJCQljYXNlICc5JzoKKwkJCQkJLy8gUG9zc2libGUgbnVtYmVyLgorCQkJCQkvLyBTY2FuIHRvIG5leHQgbm9uLWRpZ2l0LCBvciBub3QgcGFydCBvZiB2YWxpZCBudW1iZXIuCisJCQkJCWJvb2xlYW4gbnVtYmVyQ29tcGxldGUgPSBmYWxzZTsKKwkJCQkJYm9vbGVhbiBmbG9hdFR5cGUgPSBmYWxzZTsKKwkJCQkJYm9vbGVhbiBmb3VuZEUgPSBmYWxzZTsKKwkJCQkJYm9vbGVhbiBmb3VuZEVTaWduID0gZmFsc2U7CisJCQkJCXN0YXJ0ID0gcGFyc2VyLm5leHRJbmRleCgpLTE7CS8vIFdlIHdhbnQgdG8gaW5jbHVkZSB0aGUgc2lnbiBvciBmaXJzdCBkaWdpdCBpbiB0aGUgbnVtYmVyLgorCQkJCQl3aGlsZSAoIXBhcnNlci5hdEVuZCgpICYmICFudW1iZXJDb21wbGV0ZSkgeworCQkJCQkJY2hhciBjYyA9IHBhcnNlci5yZWFkKCk7CisJCQkJCQlzd2l0Y2ggKGNjKSB7CisJCQkJCQkJY2FzZSAnMCc6CisJCQkJCQkJY2FzZSAnMSc6CisJCQkJCQkJY2FzZSAnMic6CisJCQkJCQkJY2FzZSAnMyc6CisJCQkJCQkJY2FzZSAnNCc6CisJCQkJCQkJY2FzZSAnNSc6CisJCQkJCQkJY2FzZSAnNic6CisJCQkJCQkJY2FzZSAnNyc6CisJCQkJCQkJY2FzZSAnOCc6CisJCQkJCQkJY2FzZSAnOSc6CisJCQkJCQkJCWJyZWFrOwkvLyBUaGlzIGlzIGdvb2QsIGdvIG9uLgorCQkJCQkJCWNhc2UgJy4nOgorCQkJCQkJCQlpZiAoZmxvYXRUeXBlKQorCQkJCQkJCQkJcmV0dXJuIEludmFsaWRPYmplY3QuSU5TVEFOQ0U7CS8vIFdlIGFscmVhZHkgZm91bmQgYSAnLicsIHR3byBhcmUgaW52YWxpZC4KKwkJCQkJCQkJZmxvYXRUeXBlID0gdHJ1ZTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAnZSc6CisJCQkJCQkJY2FzZSAnRSc6CisJCQkJCQkJCWlmIChmb3VuZEUpCisJCQkJCQkJCQlyZXR1cm4gSW52YWxpZE9iamVjdC5JTlNUQU5DRTsJLy8gV2UgYWxyZWFkeSBmb3VuZCBhICdlJywgdHdvIGFyZSBpbnZhbGlkLgorCQkJCQkJCQlmb3VuZEUgPSB0cnVlOworCQkJCQkJCQlmbG9hdFR5cGUgPSB0cnVlOwkvLyBBbiAnZScgbWFrZXMgaXQgYSBmbG9hdCwgaWYgbm90IGFscmVhZHkuCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgJysnOgorCQkJCQkJCWNhc2UgJy0nOgorCQkJCQkJCQlpZiAoIWZvdW5kRSB8fCBmb3VuZEVTaWduKSAKKwkJCQkJCQkJCXJldHVybiBJbnZhbGlkT2JqZWN0LklOU1RBTkNFOwkvLyBBICsvLSB3aXRoIG5vICdlJyBmaXJzdCBpcyBpbnZhbGlkLiBPciBtb3JlIHRoYW4gb25lIHNpZ24uCisJCQkJCQkJCWZvdW5kRVNpZ24gPSB0cnVlOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQkvLyBBbnl0aGluZyBlbHNlIGlzIGVuZCBvZiBudW1iZXIuCisJCQkJCQkJCXBhcnNlci5iYWNrdXAoKTsJLy8gQmFjayBpdCB1cCBzbyB0aGF0IG5leHQgcGFyc2Ugd2lsbCBzdGFydCB3aXRoIHRoaXMgY2hhci4KKwkJCQkJCQkJbnVtYmVyQ29tcGxldGUgPSB0cnVlOwkvLyBTbyB3ZSBzdG9wIHNjYW5uaW5nCisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXRyeSB7CisJCQkJCQlpZiAoIWZsb2F0VHlwZSkKKwkJCQkJCQlyZXR1cm4gTG9uZy52YWx1ZU9mKHBhcnNlci5nZXRJbnB1dCgpLnN1YnN0cmluZyhzdGFydCwgcGFyc2VyLm5leHRJbmRleCgpKSk7CisJCQkJCQllbHNlCisJCQkJCQkJcmV0dXJuIERvdWJsZS52YWx1ZU9mKHBhcnNlci5nZXRJbnB1dCgpLnN1YnN0cmluZyhzdGFydCwgcGFyc2VyLm5leHRJbmRleCgpKSk7CisJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCX0KKwkJCQkJYnJlYWs7IC8vIElmIHdlIGdvdCBoZXJlLCBpdCBpcyBpbnZhbGlkLgorCQkJCQkKKwkJCQljYXNlICd0JzoKKwkJCQljYXNlICdUJzoKKwkJCQljYXNlICdmJzoKKwkJCQljYXNlICdGJzoKKwkJCQkJLy8gUG9zc2libGUgYm9vbGVhbi4KKwkJCQkJaWYgKHBhcnNlci5nZXRJbnB1dCgpLnJlZ2lvbk1hdGNoZXModHJ1ZSwgcGFyc2VyLm5leHRJbmRleCgpLTEsICJ0cnVlIiwgMCwgNCkpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJcGFyc2VyLnNraXAoMyk7CS8vIFNraXAgb3ZlciByZXN0IG9mIHN0cmluZy4KKwkJCQkJCXJldHVybiBCb29sZWFuLlRSVUU7CisJCQkJCX0gZWxzZSBpZiAocGFyc2VyLmdldElucHV0KCkucmVnaW9uTWF0Y2hlcyh0cnVlLCBwYXJzZXIubmV4dEluZGV4KCktMSwgImZhbHNlIiwgMCwgNSkpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJcGFyc2VyLnNraXAoNCk7CS8vIFNraXAgb3ZlciByZXN0IG9mIHN0cmluZy4KKwkJCQkJCXJldHVybiBCb29sZWFuLkZBTFNFOwkJCQkJCQorCQkJCQl9CisJCQkJCWJyZWFrOyAvLyBJZiB3ZSBnb3QgaGVyZSwgaXQgaXMgaW52YWxpZC4KKwkJCQkJCisJCQkJY2FzZSAnXCcnOgorCQkJCQkvLyBQb3NzaWJsZSBjaGFyYWN0ZXIKKwkJCQkJY2hhciBjYyA9IHBhcnNlci5yZWFkKCk7CisJCQkJCS8vIFdlIHJlYWxseSBvbmx5IHN1cHBvcnQgJ1xcJyBhbmQgJ1wnJyBhbnl0aGluZyBlbHNlIHdpbGwgYmUgdHJlYXRlZCBhcyBpZ25vcmUgJ1wnIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBoYW5kbGUgZnVsbCBlc2NhcGVzLgorCQkJCQlpZiAoY2MgPT0gJ1xcJykKKwkJCQkJCWNjID0gcGFyc2VyLnJlYWQoKTsJLy8gR2V0IHdoYXQncyBhZnRlciBpdC4KKwkJCQkJZWxzZSBpZiAoY2MgPT0gJ1wnJykKKwkJCQkJCWJyZWFrOwkvLyAnJyBpcyBpbnZhbGlkLgorCQkJCQlpZiAocGFyc2VyLnBlZWsoKSA9PSAnXCcnKSB7CisJCQkJCQkvLyBTbyBuZXh0IGNoYXIgYWZ0ZXIgImNoYXJhY3RlciIgaXMgaXMgYSBxdW90ZS4gVGhpcyBpcyBnb29kLgorCQkJCQkJcGFyc2VyLnJlYWQoKTsJLy8gTm93IGNvbnN1bWUgdGhlIHF1b3RlCisJCQkJCQlyZXR1cm4gbmV3IENoYXJhY3RlcihjYyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7IC8vIElmIHdlIGdvdCBoZXJlLCBpdCBpcyBpbnZhbGlkLgorCQkJCQkKKwkJCQljYXNlICduJzoKKwkJCQkJLy8gUG9zc2libGUgbnVsbC4KKwkJCQkJaWYgKHBhcnNlci5nZXRJbnB1dCgpLnJlZ2lvbk1hdGNoZXMocGFyc2VyLm5leHRJbmRleCgpLTEsICJudWxsIiwgMCwgNCkpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJcGFyc2VyLnNraXAoMyk7CS8vIFNraXAgb3ZlciByZXN0IG9mIHN0cmluZy4KKwkJCQkJCXJldHVybiBudWxsOworCQkJCQl9CisJCQkJCWJyZWFrOyAvLyBJZiB3ZSBnb3QgaGVyZSwgaXQgaXMgaW52YWxpZC4KKwkJCQkJCisJCQkJY2FzZSAnSSc6CisJCQkJCS8vIFBvc3NpYmxlIGludmFsaWQgdmFsdWUuCisJCQkJCWlmIChwYXJzZXIuZ2V0SW5wdXQoKS5yZWdpb25NYXRjaGVzKHBhcnNlci5uZXh0SW5kZXgoKS0xLCBJTlZBTElELCAwLCBJTlZBTElELmxlbmd0aCgpKSkgeworCQkJCQkJcGFyc2VyLnNraXAoSU5WQUxJRC5sZW5ndGgoKS0xKTsJLy8gU2tpcCBvdmVyIHJlc3Qgb2Ygc3RyaW5nLgorCQkJCQkJcmV0dXJuIEludmFsaWRPYmplY3QuSU5TVEFOQ0U7CisJCQkJCX0KKwkJCQkJYnJlYWs7IC8vIElmIHdlIGdvdCBoZXJlLCBpdCBpcyBpbnZhbGlkLgorCQkJCQkKKwkJCQljYXNlICdbJzoKKwkJCQkJLy8gUG9zc2libGUgYXJyYXkuCisJCQkJCS8vIFRoZSBuZXh0IGZpZWxkIHNob3VsZCBiZSBhIG51bWJlciwgc28gd2UnbGwgdXNlIHBhcnNlU3RyaW5nIHRvIGdldCB0aGUgbnVtYmVyLiAKKwkJCQkJT2JqZWN0IHNpemUgPSBwYXJzZVN0cmluZyhwYXJzZXIpOworCQkJCQlpZiAoc2l6ZSBpbnN0YW5jZW9mIExvbmcpIHsKKwkJCQkJCXBhcnNlci5za2lwV2hpdGVzcGFjZSgpOworCQkJCQkJY2MgPSBwYXJzZXIucmVhZCgpOwkvLyBTZSBpZiBuZXh0IGlzICddJworCQkJCQkJaWYgKGNjID09ICddJykgeworCQkJCQkJCS8vIEdvb2QsIHdlbGwtZm9ybWVkIGZpcnN0IGRpbWVuc2lvbgorCQkJCQkJCWludCBkaW0gPSAxOworCQkJCQkJCWJvb2xlYW4gdmFsaWQgPSB0cnVlOworCQkJCQkJCS8vIFNlZSBpZiB0aGVyZSBhcmUgbW9yZSBvZiBqdXN0ICJbXSIuIHRoZSBudW1iZXIgb2YgdGhlbSBpcyB0aGUgZGltLgorCQkJCQkJCXdoaWxlICh0cnVlKSB7CisJCQkJCQkJCXBhcnNlci5za2lwV2hpdGVzcGFjZSgpOworCQkJCQkJCQljYyA9IHBhcnNlci5yZWFkKCk7CisJCQkJCQkJCWlmIChjYyA9PSAnWycpIHsKKwkJCQkJCQkJCXBhcnNlci5za2lwV2hpdGVzcGFjZSgpOworCQkJCQkJCQkJY2MgPSBwYXJzZXIucmVhZCgpOworCQkJCQkJCQkJaWYgKGNjID09ICddJykKKwkJCQkJCQkJCQlkaW0rKzsKKwkJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJCS8vIFRoaXMgaXMgaW52YWxpZC4KKwkJCQkJCQkJCQl2YWxpZCA9IGZhbHNlOworCQkJCQkJCQkJCXBhcnNlci5iYWNrdXAoKTsKKwkJCQkJCQkJCQlicmVhazsJLy8gTm8gbW9yZSBkaW1zLgorCQkJCQkJCQkJfQorCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJcGFyc2VyLmJhY2t1cCgpOworCQkJCQkJCQkJYnJlYWs7CS8vIE5vIG1vcmUgZGltcy4KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlpZiAodmFsaWQpIHsKKwkJCQkJCQkJcGFyc2VyLnNraXBXaGl0ZXNwYWNlKCk7CisJCQkJCQkJCWNjID0gcGFyc2VyLnJlYWQoKTsKKwkJCQkJCQkJaWYgKGNjID09ICd7JykgeworCQkJCQkJCQkJLy8gR29vZCwgd2UncmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgorCQkJCQkJCQkJaW50W10gZGltcyA9IG5ldyBpbnRbZGltXTsKKwkJCQkJCQkJCWludCBsZW4gPSAoKExvbmcpIHNpemUpLmludFZhbHVlKCk7CisJCQkJCQkJCQlkaW1zWzBdID0gbGVuOworCQkJCQkJCQkJT2JqZWN0IGFycmF5ID0gQXJyYXkubmV3SW5zdGFuY2UoT2JqZWN0LmNsYXNzLCBkaW1zKTsKKwkJCQkJCQkJCUFycmF5cy5maWxsKChPYmplY3RbXSkgYXJyYXksIG51bGwpOwkvLyBCZWNhdXNlIG5ld0luc3RhbmNlIHVzZWQgYWJvdmUgZmlsbHMgdGhlIGFycmF5IGNyZWF0ZWQgd2l0aCBlbXB0eSBhcnJheXMgd2hlbiBhIGRpbT4xLgorCQkJCQkJCQkJCisJCQkJCQkJCQkvLyBOb3cgd2Ugc3RhcnQgZmlsbGluZyBpdCBpbi4KKwkJCQkJCQkJCU9iamVjdCBpbnZTZXR0aW5nID0gbnVsbDsJLy8gV2hhdCB3ZSB3aWxsIHVzZSBmb3IgdGhlIGludmFsaWQgc2V0dGluZy4gSWYgdGhpcyBpcyBhIG11bHRpZGltLCB0aGlzIG5lZWRzIHRvIGJlIGFuIGFycmF5LiBXaWxsIG5vdCBjcmVhdGUgaXQgdW50aWwgbmVlZGVkLgorCQkJCQkJCQkJT2JqZWN0IGVudHJ5ID0gcGFyc2VTdHJpbmcocGFyc2VyKTsJLy8gR2V0IHRoZSBmaXJzdCBlbnRyeQorCQkJCQkJCQkJQ2xhc3MgY29tcFR5cGUgPSBhcnJheS5nZXRDbGFzcygpLmdldENvbXBvbmVudFR5cGUoKTsKKwkJCQkJCQkJCWludCBpID0gLTE7CisJCQkJCQkJCQl3aGlsZSAodHJ1ZSkgeworCQkJCQkJCQkJCWlmICgrK2kgPCBsZW4pIHsKKwkJCQkJCQkJCQkJaWYgKGNvbXBUeXBlLmlzSW5zdGFuY2UoZW50cnkpKSB7CisJCQkJCQkJCQkJCQkvLyBHb29kLCBpdCBjYW4gYmUgYXNzaWduZWQuCisJCQkJCQkJCQkJCQlBcnJheS5zZXQoYXJyYXksIGksIGVudHJ5KTsKKwkJCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCQkJCS8vIEJhZC4gTmVlZCB0byBzZXQgaW52YWxpZC4KKwkJCQkJCQkJCQkJCWlmIChpbnZTZXR0aW5nID09IG51bGwpIHsKKwkJCQkJCQkJCQkJCQkvLyBXZSBoYXZlbid0IGNyZWF0ZWQgaXQgeWV0LgorCQkJCQkJCQkJCQkJCWlmIChkaW0gPT0gMSkKKwkJCQkJCQkJCQkJCQkJaW52U2V0dGluZyA9IEludmFsaWRPYmplY3QuSU5TVEFOQ0U7IC8vIEdyZWF0LCBvbmUgZGltZW5zaW9uYWwsIHdlIGNhbiB1c2UgaW52YWxpZCBkaXJlY3RseQorCQkJCQkJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJCQkJCQkvLyBNdWx0aS1kaW0uIE5lZWQgdG8gY3JlYXRlIGEgdmFsaWQgYXJyYXkgdGhhdCB3ZSBjYW4gc2V0LgorCQkJCQkJCQkJCQkJCQlpbnRbXSBpbnZEaW1zID0gbmV3IGludFtkaW0gLSAxXTsKKwkJCQkJCQkJCQkJCQkJQXJyYXlzLmZpbGwoaW52RGltcywgMSk7IC8vIExlbmd0aCBvbmUgYWxsIG9mIHRoZSB3YXkgc28gdGhhdCB0aGUgZmluYWwgY29tcG9uZW50IGNhbiBiZSBpbnZhbGlkIG9iamVjdAorCQkJCQkJCQkJCQkJCQlpbnZTZXR0aW5nID0gQXJyYXkubmV3SW5zdGFuY2UoT2JqZWN0LmNsYXNzLCBpbnZEaW1zKTsKKwkJCQkJCQkJCQkJCQkJT2JqZWN0IGZpbmFsRW50cnkgPSBpbnZTZXR0aW5nOyAvLyBGaW5hbCBhcnJheSAod2l0aCBjb21wb25lbnQgdHlwZSBvZiBqdXN0IE9iamVjdCkuIFN0YXJ0IHdpdGggdGhlIGZ1bGwgYXJyYXkgYW5kIHdvcmsgZG93bi4KKwkJCQkJCQkJCQkJCQkJZm9yIChpbnQgaiA9IGludkRpbXMubGVuZ3RoIC0gMTsgaiA+IDA7IGotLSkgeworCQkJCQkJCQkJCQkJCQkJZmluYWxFbnRyeSA9IEFycmF5LmdldChmaW5hbEVudHJ5LCAwKTsKKwkJCQkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQkJCQlBcnJheS5zZXQoZmluYWxFbnRyeSwgMCwgSW52YWxpZE9iamVjdC5JTlNUQU5DRSk7CisJCQkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQkJQXJyYXkuc2V0KGFycmF5LCBpLCBpbnZTZXR0aW5nKTsKKwkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQkKKwkJCQkJCQkJCQlwYXJzZXIuc2tpcFdoaXRlc3BhY2UoKTsKKwkJCQkJCQkJCQljYyA9IHBhcnNlci5yZWFkKCk7CisJCQkJCQkJCQkJaWYgKGNjID09ICcsJykgeworCQkJCQkJCQkJCQkvLyBHb29kLCBnZXQgbmV4dAorCQkJCQkJCQkJCQllbnRyeSA9IHBhcnNlU3RyaW5nKHBhcnNlcik7CisJCQkJCQkJCQkJfSBlbHNlIGlmIChjYyA9PSAnfScpIHsKKwkJCQkJCQkJCQkJLy8gR29vZCwgcmVhY2hlZCB0aGUgZW5kLgorCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJCQlpZiAoIXBhcnNlci5hdEVuZCgpKSB7CisJCQkJCQkJCQkJCQlwYXJzZXIuYmFja3VwKCk7CisJCQkJCQkJCQkJCQllbnRyeSA9IHBhcnNlU3RyaW5nKHBhcnNlcik7IC8vIFRlY2huaWNhbGx5IHRoaXMgc2hvdWxkIGJlIGludmFsaWQsIGJ1dCB3ZSdsbCBsZXQgYSB3aGl0ZXNwYWNlIGFsc28gZGVub3RlIG5leHQgZW50cnkuCisJCQkJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQkJCQkvLyBJdCdzIHJlYWxseSBzY3Jld2VkIHVwLiBUaGUgc3RyaW5nIGp1c3QgZW5kZWQuIExvZyBpdC4KKwkJCQkJCQkJCQkJCUV4Y2VwdGlvbiBlID0gbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihwYXJzZXIudG9TdHJpbmcoKSk7CisJCQkJCQkJCQkJCQl0cnkgeworCQkJCQkJCQkJCQkJCS8vIFNlZSBpZiBCZWFuaW5mbyBwbHVnaW4gaXMgYXZhaWxhYmxlICh3ZSBhcmUgcnVubmluZyB1bmRlciBlY2xpcHNlKS4gSWYgc28sIHVzZSBpdCwgZWxzZSBqdXN0IHByaW50IHRvIGVycm9yLgorCQkJCQkJCQkJCQkJCS8vIFdlIG1heSBiZSBpbiB0aGUgcmVtb3RlIHZtIGFuZCBzbyBpdCB3b24ndCBiZSBhdmFpbGFibGUuCisJCQkJCQkJCQkJCQkJQ2xhc3MgYmlQbHVnaW5DbGFzcyA9IENsYXNzLmZvck5hbWUoIm9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb3JlLkJlYW5pbmZvUGx1Z2luIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkJCQlNZXRob2QgZ2V0UGx1Z2luID0gYmlQbHVnaW5DbGFzcy5nZXRNZXRob2QoImdldFBsdWdpbiIsIChDbGFzc1tdKSBudWxsKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkJCU1ldGhvZCBnZXRMb2dnZXIgPSBiaVBsdWdpbkNsYXNzLmdldE1ldGhvZCgiZ2V0TG9nZ2VyIiwgKENsYXNzW10pIG51bGwpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkJTWV0aG9kIGxvZyA9IGdldExvZ2dlci5nZXRSZXR1cm5UeXBlKCkuZ2V0TWV0aG9kKCJsb2ciLCBuZXcgQ2xhc3NbXSB7VGhyb3dhYmxlLmNsYXNzLCBMZXZlbC5jbGFzc30pOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkJT2JqZWN0IGJpUGx1Z2luID0gZ2V0UGx1Z2luLmludm9rZShudWxsLCAoT2JqZWN0W10pIG51bGwpOworCQkJCQkJCQkJCQkJCU9iamVjdCBsb2dnZXIgPSBnZXRMb2dnZXIuaW52b2tlKGJpUGx1Z2luLCAoT2JqZWN0W10pIG51bGwpOworCQkJCQkJCQkJCQkJCWxvZy5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W10ge2UsIExldmVsLldBUk5JTkd9KTsKKwkJCQkJCQkJCQkJCQlyZXR1cm4gSW52YWxpZE9iamVjdC5JTlNUQU5DRTsKKwkJCQkJCQkJCQkJCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUxKSB7CisJCQkJCQkJCQkJCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZTEpIHsKKwkJCQkJCQkJCQkJCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZTEpIHsKKwkJCQkJCQkJCQkJCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlMSkgeworCQkJCQkJCQkJCQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlMSkgeworCQkJCQkJCQkJCQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlMSkgeworCQkJCQkJCQkJCQkJfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZTEpIHsKKwkJCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CS8vIE5vdCBpbiBlY2xpcHNlLCBzbyBqdXN0IHByaW50IHN0YWNrIHRyYWNlLgorCQkJCQkJCQkJCQkJcmV0dXJuIEludmFsaWRPYmplY3QuSU5TVEFOQ0U7CisJCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCQkKKwkJCQkJCQkJCXJldHVybiBhcnJheTsKKwkJCQkJCQkJfQorCQkJCQkJCX0JCQkJCQkJCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7IC8vIElmIHdlIGdvdCBoZXJlLCBpdCBpcyBpbnZhbGlkLgorCQkJfQorCQl9CisJCXJldHVybiBJbnZhbGlkT2JqZWN0LklOU1RBTkNFOworCX0KKwkKKwlwcml2YXRlIHZvaWQgd3JpdGVPYmplY3QoT2JqZWN0T3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gV3JpdGUgb3V0IGFueSBoaWRkZW4gc3R1ZmYKKwkJb3V0LmRlZmF1bHRXcml0ZU9iamVjdCgpOworCQl3cml0ZU9iamVjdCh2YWx1ZSwgb3V0KTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIHdyaXRlT2JqZWN0KE9iamVjdCB2YWx1ZSwgT2JqZWN0T3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKHZhbHVlID09IG51bGwpCisJCQlvdXQud3JpdGVPYmplY3QodmFsdWUpOworCQllbHNlIHsKKwkJCWlmICh2YWx1ZSBpbnN0YW5jZW9mIENsYXNzKQorCQkJCW91dC53cml0ZU9iamVjdCgoKENsYXNzKSB2YWx1ZSkuZ2V0TmFtZSgpKTsKKwkJCWVsc2UgaWYgKCF2YWx1ZS5nZXRDbGFzcygpLmlzQXJyYXkoKSkgeworCQkJCWlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4gfHwgdmFsdWUgaW5zdGFuY2VvZiBDaGFyYWN0ZXIpCisJCQkJCW91dC53cml0ZU9iamVjdCh2YWx1ZSk7CisJCQkJZWxzZQorCQkJCQlvdXQud3JpdGVPYmplY3QoSW52YWxpZE9iamVjdC5JTlNUQU5DRSk7CisJCQl9IGVsc2UgeworCQkJCS8vIEFycmF5IGlzIHRyaWNreS4gU2VlIGlmIGl0IGlzIG9uZSB3ZSBjYW4gaGFuZGxlLCBpZiBub3QgdGhlbiBpbnZhbGlkLiAKKwkJCQkvLyBUbyBpbmRpY2F0ZSBhcnJheSwgd2Ugd2lsbCBmaXJzdCB3cml0ZSBvdXQgdGhlIENsYXNzIG9mIHRoZSBDb21wb25lbnQgdHlwZSBvZiB0aGUgYXJyYXkgKGl0IHdpbGwKKwkJCQkvLyBiZSBjb252ZXJ0ZWQgdG8gYmUgT2JqZWN0IG9yIE9iamVjdFtdLi4uKS4KKwkJCQkvLyBUaGlzIHdpbGwgYmUgdGhlIGNsdWUgdGhhdCBhbiBhcnJheSBpcyBjb21pbmcuIENsYXNzIHZhbHVlcyB3aWxsIG5ldmVyCisJCQkJLy8gYmUgcmV0dXJuZWQsIHNvIHRoYXQgaXMgaG93IHdlIGNhbiB0ZWxsIGl0IGlzIGFuIGFycmF5LgorCQkJCS8vIE5vdGU6IFRoZSByZWFzb24gd2UgYXJlIHVzaW5nIHRoZSBjb21wb25lbnQgdHlwZSAoY29udmVydGVkIHRvIE9iamVjdCkgaXMgYmVjYXVzZSB0byByZWNvbnN0cnVjdCBvbiB0aGUgb3RoZXIgc2lkZSB3ZSBuZWVkCisJCQkJLy8gdG8gdXNlIHRoZSBjb21wb25lbnQgdHlwZSBwbHVzIGxlbmd0aCBvZiB0aGUgYXJyYXkncyBmaXJzdCBkaW1lbnNpb24uCisJCQkJLy8gCisJCQkJLy8gV2UgY2FuIG5vdCBqdXN0IHNlcmlhbGl6ZSB0aGUgYXJyYXkgaW4gdGhlIG5vcm1hbCB3YXkgYmVjYXVzZSBpdCBtYXkgY29udGFpbiBpbnZhbGlkIHZhbHVlcywgYW5kIHdlIG5lZWQgdG8gCisJCQkJLy8gaGFuZGxlIHRoYXQuIEFsc28sIGlmIGl0IHdhc24ndCBhbiBPYmplY3QgYXJyYXksIHdlIG5lZWQgdG8gdHVybiBpdCBpbnRvIGFuIG9iamVjdCBhcnJheS4gV2UgbmVlZCBjb25zaXN0ZW5jeQorCQkJCS8vIGluIHRoYXQgaXQgc2hvdWxkIGFsd2F5cyBiZSBhbiBPYmplY3QgYXJyYXkuCisJCQkJLy8gU28gb3V0cHV0IGZvcm1hdCB3aWxsIGJlOgorCQkJCS8vIENsYXNzKGNvbXBvbmVudCB0eXBlKQorCQkJCS8vIGludChzaXplIG9mIGZpcnN0IGRpbWVuc2lvbikKKwkJCQkvLyBPYmplY3QodmFsdWUgb2YgZmlyc3QgZW50cnkpIC0gQWN0dWFsbHkgdXNlIG91dCB3cml0ZU9iamVjdCgpIGZvcm1hdCB0byBhbGxvdyBuZXN0aW5nIG9mIGFycmF5cy4KKwkJCQkvLyBPYmplY3QodmFsdWUgb2Ygc2Vjb25kIGVudHJ5KQorCQkJCS8vIC4uLiB1cCB0byBzaXplIG9mIGRpbWVuc2lvbi4KKwkJCQlDbGFzcyB0eXBlID0gdmFsdWUuZ2V0Q2xhc3MoKTsKKwkJCQkvLyBTZWUgaWYgZmluYWwgdHlwZSBpcyBhIHZhbGlkIHR5cGUuCisJCQkJQ2xhc3MgZnQgPSB0eXBlLmdldENvbXBvbmVudFR5cGUoKTsKKwkJCQlpbnQgZGltcyA9IDE7CisJCQkJd2hpbGUgKGZ0LmlzQXJyYXkoKSkgeworCQkJCQlkaW1zKys7CisJCQkJCWZ0ID0gZnQuZ2V0Q29tcG9uZW50VHlwZSgpOworCQkJCX0KKwkJCQlpZiAoZnQgPT0gT2JqZWN0LmNsYXNzIHx8IGZ0ID09IFN0cmluZy5jbGFzcyB8fCBmdCA9PSBCb29sZWFuLmNsYXNzIHx8IGZ0ID09IENoYXJhY3Rlci5jbGFzcyB8fCBmdC5pc1ByaW1pdGl2ZSgpIHx8IGZ0ID09IENsYXNzLmNsYXNzIHx8IE51bWJlci5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGZ0KSkgeworCQkJCQlTdHJpbmcgam5pVHlwZSA9IGRpbXMgPT0gMSA/ICJqYXZhLmxhbmcuT2JqZWN0IiA6IE1hcFR5cGVzLmdldEpOSVR5cGVOYW1lKCJqYXZhLmxhbmcuT2JqZWN0IiwgZGltcy0xKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXRyeSB7CisJCQkJCQlDbGFzcyBjb21wb25lbnRUeXBlID0gQ2xhc3MuZm9yTmFtZShqbmlUeXBlKTsKKwkJCQkJCW91dC53cml0ZU9iamVjdChjb21wb25lbnRUeXBlKTsKKwkJCQkJCWludCBsZW5ndGggPSBBcnJheS5nZXRMZW5ndGgodmFsdWUpOworCQkJCQkJb3V0LndyaXRlSW50KGxlbmd0aCk7CisJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCQkJCQkJd3JpdGVPYmplY3QoQXJyYXkuZ2V0KHZhbHVlLCBpKSwgb3V0KTsKKwkJCQkJCX0KKwkJCQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIE9iamVjdCBhcnJheXMgYXJlIGFsd2F5cyBhdmFpbGFibGUuCisJCQkJCX0KKwkJCQl9IGVsc2UKKwkJCQkJb3V0LndyaXRlT2JqZWN0KEludmFsaWRPYmplY3QuSU5TVEFOQ0UpOworCQkJfQorCQl9CisJfQorCQorCQorCXByaXZhdGUgdm9pZCByZWFkT2JqZWN0KE9iamVjdElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworCQkvLyBSZWFkIGluIGFueSBoaWRkZW4gc3R1ZmYKKwkJaW4uZGVmYXVsdFJlYWRPYmplY3QoKTsKKwkJCisJCXZhbHVlID0gcmVhZEFjdHVhbE9iamVjdChpbik7CisJfQorCQorCXByaXZhdGUgT2JqZWN0IHJlYWRBY3R1YWxPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisJCU9iamVjdCB2YWwgPSBpbi5yZWFkT2JqZWN0KCk7CisJCWlmICh2YWwgaW5zdGFuY2VvZiBDbGFzcykgeworCQkJLy8gSXQgbXVzdCBiZSBhbiBhcnJheS4gT25seSBDbGFzcyBvYmplY3RzIHRoYXQgY29tZSBpbiBhcmUgQXJyYXlzIG9mIE9iamVjdC4KKwkJCWludCBsZW5ndGggPSBpbi5yZWFkSW50KCk7CisJCQlPYmplY3QgYXJyYXkgPSBBcnJheS5uZXdJbnN0YW5jZSgoQ2xhc3MpIHZhbCwgbGVuZ3RoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCQlBcnJheS5zZXQoYXJyYXksIGksIHJlYWRBY3R1YWxPYmplY3QoaW4pKTsKKwkJCX0KKwkJCXJldHVybiBhcnJheTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gdmFsOwkvLyBJdCBpcyB0aGUgdmFsdWUgaXRzZWxmLgorCX0KKworCQorCS8qKgorCSAqIElzIHRoaXMgRmVhdHVyZUF0dHJpYnV0ZVZhbHVlIGFuIGltcGxpY2l0IHZhbHVlLCBpLmUuIG9uZSB0aGF0IGNhbWUgZnJvbQorCSAqIEJlYW5JbmZvIEludHJvc3BlY3Rpb24gYW5kIG5vdCBmcm9tIGFuIG92ZXJyaWRlIGZpbGUuCisJICogCisJICogQHJldHVybiBSZXR1cm5zIHRoZSBpbXBsaWNpdFZhbHVlLgorCSAqIAorCSAqIEBzaW5jZSAxLjIuMAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzSW1wbGljaXRWYWx1ZSgpIHsKKwkJcmV0dXJuIGltcGxpY2l0VmFsdWU7CisJfQorCisJCisJLyoqCisJICogU2V0IHRoZSBpbXBsaWNpdCB2YWx1ZSBmbGFnLgorCSAqIEBwYXJhbSBpbXBsaWNpdFZhbHVlIFRoZSBpbXBsaWNpdFZhbHVlIHRvIHNldC4KKwkgKiAKKwkgKiBAc2VlICNpc0ltcGxpY2l0VmFsdWUoKQorCSAqIEBzaW5jZSAxLjIuMAorCSAqLworCXB1YmxpYyB2b2lkIHNldEltcGxpY2l0VmFsdWUoYm9vbGVhbiBpbXBsaWNpdFZhbHVlKSB7CisJCXRoaXMuaW1wbGljaXRWYWx1ZSA9IGltcGxpY2l0VmFsdWU7CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vRmVhdHVyZVJlY29yZC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vRmVhdHVyZVJlY29yZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzkyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9GZWF0dXJlUmVjb3JkLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisKKworICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb21tb247CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKKyAKKworLyoqCisgKiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3Igc2VuZGluZyB0aGUgRmVhdHVyZURlc2NyaXB0b3IgaW5mbyBmcm9tCisgKiB0aGUgQmVhbkluZm8gdm0gdG8gdGhlIElERSB2bS4gSXQgaXMgc2VyaWFsaXphYmxlIHNvIHRoYXQgaXQgY2FuCisgKiBiZSBzZXJpYWxpemVkIGZvciB0cmFuc21pc3Npb24uCisgKiA8cD4KKyAqIEl0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBGZWF0dXJlRGVzY3JpcHRvci4gCisgKiBAc2luY2UgMS4xLjAKKyAqLworcHVibGljIGNsYXNzIEZlYXR1cmVSZWNvcmQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTEwNTk3OTI3NjY0OEw7CisJCisJcHVibGljIFN0cmluZyBuYW1lOwkvLyBTb21lIGRlY29yYXRvcnMgdXNlIHRoaXMgYW5kIG90aGVycyBkb24ndC4gRWFjaCBkZWNvcmF0b3IgdHlwZSB3aWxsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgb2YgaW1wb3J0YW5jZS4KKwlwdWJsaWMgU3RyaW5nIGRpc3BsYXlOYW1lOworCXB1YmxpYyBTdHJpbmcgc2hvcnREZXNjcmlwdGlvbjsKKwlwdWJsaWMgU3RyaW5nIGNhdGVnb3J5OworCXB1YmxpYyBib29sZWFuIGV4cGVydDsKKwlwdWJsaWMgYm9vbGVhbiBoaWRkZW47CisJcHVibGljIGJvb2xlYW4gcHJlZmVycmVkOworCXB1YmxpYyBTdHJpbmdbXSBhdHRyaWJ1dGVOYW1lczsKKwlwdWJsaWMgRmVhdHVyZUF0dHJpYnV0ZVZhbHVlW10gYXR0cmlidXRlVmFsdWVzOworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjc0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9JQmVhbkluZm9JbnRyb3NwZWN0aW9uQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uOworIAorCisvKioKKyAqIFRoZXNlIGFyZSBjb25zdGFudHMgbmVlZGVkIGZvciB0cmFuc2ZlcnJpbmcgQmVhbkluZm8gcmVzdWx0cyBmcm9tIHRoZSBCZWFuSW5mbyBWTS4KKyAqIEBzaW5jZSAxLjEuMAorICovCitwdWJsaWMgaW50ZXJmYWNlIElCZWFuSW5mb0ludHJvc3BlY3Rpb25Db25zdGFudHMgeworCQorCS8qKgorCSAqIEludHJvc3BlY3Rpb24gYml0IGZsYWcgaW5kaWNhdGluZyBkbyB0aGUgQmVhbkRlY29yYXRvci4gU2VudCB0byBNb2RlbGluZ0JlYW5JbmZvLmludHJvc3BlY3QgbWV0aG9kLgorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPX0JFQU5fREVDT1IgPSAweDE7CisJCisJLyoqCisJICogSW50cm9zcGVjdGlvbiBiaXQgZmxhZyBpbmRpY2F0aW5nIGRvIHRoZSBQcm9wZXJ0aWVzLiBTZW50IHRvIE1vZGVsaW5nQmVhbkluZm8uaW50cm9zcGVjdCBtZXRob2QuCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9fUFJPUEVSVElFUyA9IDB4MjsKKworCS8qKgorCSAqIEludHJvc3BlY3Rpb24gYml0IGZsYWcgaW5kaWNhdGluZyBkbyB0aGUgTWV0aG9kcy4gU2VudCB0byBNb2RlbGluZ0JlYW5JbmZvLmludHJvc3BlY3QgbWV0aG9kLgorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPX01FVEhPRFMgPSAweDQ7CisKKwkvKioKKwkgKiBJbnRyb3NwZWN0aW9uIGJpdCBmbGFnIGluZGljYXRpbmcgZG8gdGhlIEV2ZW50cy4gU2VudCB0byBNb2RlbGluZ0JlYW5JbmZvLmludHJvc3BlY3QgbWV0aG9kLgorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPX0VWRU5UUyA9IDB4ODsKKworCS8qKgorCSAqIEJlYW5EZWNvcmF0b3Igd2FzIHNlbnQgY29tbWFuZCBpZC4gCisJICogPHA+CisJICogVGhpcyB3aWxsIGJlIHNlbnQgdG8gY2FsbEJhY2soaW50IGlkLCBJbnB1dFN0cmVhbSBpcykuIFRoZSBJbnB1dFN0cmVhbSB3aWxsIGJlIE9iamVjdHMgKHVzZSBPYmplY3RJbnB1dFN0cmVhbSkuIAorCSAqIFRoZSBzdHJlYW0gd2lsbCBiZSBicm9rZW4gaW50byBzZWN0aW9ucy4KKwkgKiBFYWNoIHNlY3Rpb24gd2lsbCBiZSBoZWFkZWQgYnkgdGhlIGNvbW1hbmQgaWQgb2YgdGhhdCBzZWN0aW9uIChlLmcuIEJFQU5fREVDT1JBVE9SX1NFTlQgb3IgUFJPUEVSVFlfREVDT1JBVE9SU19TRU5UKS4KKwkgKiBGb2xsb3dpbmcgdGhlIGNvbW1hbmQgaWQgd2lsbCBiZSB0aGUgdHlwZSBvZiBpbnB1dCBzcGVjaWZpYyBkYXRhLiAKKwkgKiA8cD4KKwkgKiBUaGUgZGF0YSBmb2xsb3dpbmcgdGhlIGNvbW1hbmQgaWQgd2lsbCBiZSBhIEJlYW5SZWNvcmQgZnJvbSB0aGUgT2JqZWN0SW5wdXRTdHJlYW0uCisJICogCisJICogQHNlZSBCZWFuUmVjb3JkCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwucHJveHkuY29yZS5JQ2FsbGJhY2sjY2FsbGVkQmFja1N0cmVhbShpbnQsIElucHV0U3RyZWFtKQorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJFQU5fREVDT1JBVE9SX1NFTlQgPSAxOworCisJLyoqCisJICogUHJvcGVydHlEZWNvcmF0b3JzIHNlbmQgY29tbWFuZCBpZC4KKwkgKiA8cD4KKwkgKiBUaGlzIHdpbGwgYmUgc2VudCB0byBjYWxsQmFjayhpbnQgaWQsIElucHV0U3RyZWFtIGlzKS4gVGhlIElucHV0U3RyZWFtIHdpbGwgYmUgT2JqZWN0cyAodXNlIE9iamVjdElucHV0U3RyZWFtKS4gCisJICogVGhlIHN0cmVhbSB3aWxsIGJlIGJyb2tlbiBpbnRvIHNlY3Rpb25zLgorCSAqIEVhY2ggc2VjdGlvbiB3aWxsIGJlIGhlYWRlZCBieSB0aGUgY29tbWFuZCBpZCBvZiB0aGF0IHNlY3Rpb24gKGUuZy4gQkVBTl9ERUNPUkFUT1JfU0VOVCBvciBQUk9QRVJUWV9ERUNPUkFUT1JTX1NFTlQpLgorCSAqIEZvbGxvd2luZyB0aGUgY29tbWFuZCBpZCB3aWxsIGJlIHRoZSB0eXBlIG9mIGlucHV0IHNwZWNpZmljIGRhdGEuIAorCSAqIDxwPgorCSAqIFRoZSBmaXJzdCBvYmplY3Qgd2lsbCBiZSAgYW4gaW50IGFuZCB3aWxsIGJlIHRoZSBudW1iZXIgb2YgcHJvcGVydGllcyBhbmQgZWFjaCBvYmplY3QgYWZ0ZXIgdGhhdAorCSAqIHdpbGwgYmUgYSBQcm9wZXJ0eVJlY29yZC9JbmRleGVkUHJvcGVydHlSZWNvcmQuIAorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnByb3h5LmNvcmUuSUNhbGxiYWNrI2NhbGxlZEJhY2tTdHJlYW0oaW50LCBJbnB1dFN0cmVhbSkKKwkgKiBAc2VlIFByb3BlcnR5UmVjb3JkCisJICogQHNlZSBJbmRleGVkUHJvcGVydHlSZWNvcmQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9ERUNPUkFUT1JTX1NFTlQgPSAyOworCisJLyoqCisJICogTWV0aG9kRGVjb3JhdG9ycyBzZW5kIGNvbW1hbmQgaWQuCisJICogPHA+CisJICogVGhpcyB3aWxsIGJlIHNlbnQgdG8gY2FsbEJhY2soaW50IGlkLCBJbnB1dFN0cmVhbSBpcykuIFRoZSBJbnB1dFN0cmVhbSB3aWxsIGJlIE9iamVjdHMgKHVzZSBPYmplY3RJbnB1dFN0cmVhbSkuIAorCSAqIFRoZSBzdHJlYW0gd2lsbCBiZSBicm9rZW4gaW50byBzZWN0aW9ucy4KKwkgKiBFYWNoIHNlY3Rpb24gd2lsbCBiZSBoZWFkZWQgYnkgdGhlIGNvbW1hbmQgaWQgb2YgdGhhdCBzZWN0aW9uIChlLmcuIEJFQU5fREVDT1JBVE9SX1NFTlQgb3IgUFJPUEVSVFlfREVDT1JBVE9SU19TRU5UKS4KKwkgKiBGb2xsb3dpbmcgdGhlIGNvbW1hbmQgaWQgd2lsbCBiZSB0aGUgdHlwZSBvZiBpbnB1dCBzcGVjaWZpYyBkYXRhLiAKKwkgKiA8cD4KKwkgKiBUaGUgSW5wdXRTdHJlYW0gd2lsbCBiZSBPYmplY3RzICh1c2UgT2JqZWN0SW5wdXRTdHJlYW0pLgorCSAqIFRoZSBmaXJzdCBvYmplY3Qgd2lsbCBiZSAgYW4gaW50IGFuZCB3aWxsIGJlIHRoZSBudW1iZXIgb2YgbWV0aG9kcyBhbmQgZWFjaCBvYmplY3QgYWZ0ZXIgdGhhdAorCSAqIHdpbGwgYmUgYSBNZXRob2RSZWNvcmQuIAorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnByb3h5LmNvcmUuSUNhbGxiYWNrI2NhbGxlZEJhY2tTdHJlYW0oaW50LCBJbnB1dFN0cmVhbSkKKwkgKiBAc2VlIE1ldGhvZFJlY29yZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1FVEhPRF9ERUNPUkFUT1JTX1NFTlQgPSAzOworCQorCS8qKgorCSAqIEV2ZW50U2V0RGVjb3JhdG9ycyBzZW5kIGNvbW1hbmQgaWQuCisJICogPHA+CisJICogVGhpcyB3aWxsIGJlIHNlbnQgdG8gY2FsbEJhY2soaW50IGlkLCBJbnB1dFN0cmVhbSBpcykuIFRoZSBJbnB1dFN0cmVhbSB3aWxsIGJlIE9iamVjdHMgKHVzZSBPYmplY3RJbnB1dFN0cmVhbSkuIAorCSAqIFRoZSBzdHJlYW0gd2lsbCBiZSBicm9rZW4gaW50byBzZWN0aW9ucy4KKwkgKiBFYWNoIHNlY3Rpb24gd2lsbCBiZSBoZWFkZWQgYnkgdGhlIGNvbW1hbmQgaWQgb2YgdGhhdCBzZWN0aW9uIChlLmcuIEJFQU5fREVDT1JBVE9SX1NFTlQgb3IgUFJPUEVSVFlfREVDT1JBVE9SU19TRU5UKS4KKwkgKiBGb2xsb3dpbmcgdGhlIGNvbW1hbmQgaWQgd2lsbCBiZSB0aGUgdHlwZSBvZiBpbnB1dCBzcGVjaWZpYyBkYXRhLiAKKwkgKiA8cD4KKwkgKiBUaGUgZmlyc3Qgb2JqZWN0IHdpbGwgYmUgIGFuIGludCBhbmQgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIGV2ZW50cyBhbmQgZWFjaCBvYmplY3QgYWZ0ZXIgdGhhdAorCSAqIHdpbGwgYmUgYSBFdmVudFNldFJlY29yZC4gCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwucHJveHkuY29yZS5JQ2FsbGJhY2sjY2FsbGVkQmFja1N0cmVhbShpbnQsIElucHV0U3RyZWFtKQorCSAqIEBzZWUgTWV0aG9kUmVjb3JkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVDT1JBVE9SU19TRU5UID0gNDsKKworCS8qKgorCSAqIERvbmUgc2VuZCBjb21tYW5kIGlkLgorCSAqIDxwPgorCSAqIFRoaXMgd2lsbCBiZSBzZW50IHRvIGNhbGxCYWNrKGludCBpZCwgSW5wdXRTdHJlYW0gaXMpLiBUaGUgSW5wdXRTdHJlYW0gd2lsbCBiZSBPYmplY3RzICh1c2UgT2JqZWN0SW5wdXRTdHJlYW0pLiAKKwkgKiBUaGUgc3RyZWFtIHdpbGwgYmUgYnJva2VuIGludG8gc2VjdGlvbnMuCisJICogRWFjaCBzZWN0aW9uIHdpbGwgYmUgaGVhZGVkIGJ5IHRoZSBjb21tYW5kIGlkIG9mIHRoYXQgc2VjdGlvbiAoZS5nLiBCRUFOX0RFQ09SQVRPUl9TRU5UIG9yIFBST1BFUlRZX0RFQ09SQVRPUlNfU0VOVCkuCisJICogRm9sbG93aW5nIHRoZSBjb21tYW5kIGlkIHdpbGwgYmUgdGhlIHR5cGUgb2YgaW5wdXQgc3BlY2lmaWMgZGF0YS4gCisJICogPHA+CisJICogVGhpcyBjb21tYW5kIGlkIG1lYW5zIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBhbmQgaXQgc2hvdWxkIHJldHVybi4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5wcm94eS5jb3JlLklDYWxsYmFjayNjYWxsZWRCYWNrU3RyZWFtKGludCwgSW5wdXRTdHJlYW0pCisJICogQHNlZSBNZXRob2RSZWNvcmQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET05FID0gNTsKKwkKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0luZGV4ZWRQcm9wZXJ0eVJlY29yZC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vSW5kZXhlZFByb3BlcnR5UmVjb3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkMjkxNgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0luZGV4ZWRQcm9wZXJ0eVJlY29yZC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uOworIAorCisvKioKKyAqIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciBzZW5kaW5nIHRoZSBJbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yIGluZm8gZnJvbQorICogdGhlIEJlYW5JbmZvIHZtIHRvIHRoZSBJREUgdm0uIEl0IGlzIHNlcmlhbGl6YWJsZSBzbyB0aGF0IGl0IGNhbgorICogYmUgc2VyaWFsaXplZCBmb3IgdHJhbnNtaXNzaW9uLgorICogPHA+CisgKiBJdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBvZiB0aGUgSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvci4gCisgKiBAc2luY2UgMS4xLjAKKyAqLworcHVibGljIGNsYXNzIEluZGV4ZWRQcm9wZXJ0eVJlY29yZCBleHRlbmRzIFByb3BlcnR5UmVjb3JkIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMTA1OTgzMjI3OTkwTDsKKwkKKwlwdWJsaWMgUmVmbGVjdE1ldGhvZFJlY29yZCBpbmRleGVkUmVhZE1ldGhvZDsKKwlwdWJsaWMgUmVmbGVjdE1ldGhvZFJlY29yZCBpbmRleGVkV3JpdGVNZXRob2Q7CisJcHVibGljIFN0cmluZyBpbmRleGVkUHJvcGVydHlUeXBlTmFtZTsKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0ludmFsaWRPYmplY3QuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL0ludmFsaWRPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTczMWNlCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vSW52YWxpZE9iamVjdC5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uOworCitpbXBvcnQgamF2YS5pby5PYmplY3RTdHJlYW1FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CisgCisKKy8qKgorICogQW4gaW5kaWNhdG9yIG9iamVjdCBmb3IgaW52YWxpZCBvYmplY3QgdHlwZS4gVGhpcyBpcyB1c2VkIHdpdGggZmVhdHVyZSBhdHRyaWJ1dGUKKyAqIHZhbHVlcyBmcm9tIHRoZSBCZWFuSW5mbyBjbGFzc2VzLiBXZSBjYW4gb25seSBoYW5kbGUgY2VydGFpbiB0eXBlcyB3aGVuIHdlCisgKiBicmluZyB0aGVtIG92ZXIgZnJvbSB0aGUgQmVhbkluZm8gVk0uIFRoYXQgaXMgYmVjYXVzZSB0aGUgY2xhc3NlcyBpbnN0YW50aWF0ZWQKKyAqIGluIHRoZSBCZWFuSW5mbyBjbGFzcyBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbiB0aGUgSURFLiAgU28gYW55IGludmFsaWQgdmFsdWUKKyAqIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhpcyBjbGFzcyBpbnN0YW5jZS4KKyAqIDxwPgorICogVGhpcyBpcyBhIHNpbmdsZXRvbiBjbGFzcy4KKyAqIFRoZXJlIHdpbGwgYmUgb25lIGluc3RhbmNlIChJbnZhbGlkT2JqZWN0LklOU1RBTkNFKSBpbiB0aGUgc3lzdGVtLiBUaGF0IHdheQorICogIj09IiBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvciBpdC4KKyAqIAorICogQHNpbmNlIDEuMS4wCisgKi8KK3B1YmxpYyBjbGFzcyBJbnZhbGlkT2JqZWN0IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKKwkKKwkvKioKKwkgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgSW52YWxpZE9iamVjdC4KKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEludmFsaWRPYmplY3QgSU5TVEFOQ0UgPSBuZXcgSW52YWxpZE9iamVjdCgpOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDExMDU2NDM4MDQzNzBMOworCQorCS8qCisJICogTm9ib2R5IGVsc2Ugc2hvdWxkIGNyZWF0ZSBvbmUgb2YgdGhlc2UuCisJICovCisJcHJpdmF0ZSBJbnZhbGlkT2JqZWN0KCkgeworCX0KKworCXByaXZhdGUgT2JqZWN0IHJlYWRSZXNvbHZlKCkgdGhyb3dzIE9iamVjdFN0cmVhbUV4Y2VwdGlvbiB7CisJCXJldHVybiBJTlNUQU5DRTsKKwl9Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9NZXRob2RSZWNvcmQuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL01ldGhvZFJlY29yZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzdiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9NZXRob2RSZWNvcmQuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKworCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvbW1vbjsKKyAKKworLyoqCisgKiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3Igc2VuZGluZyB0aGUgTWV0aG9kRGVzY3JpcHRvciBpbmZvIGZyb20KKyAqIHRoZSBCZWFuSW5mbyB2bSB0byB0aGUgSURFIHZtLiBJdCBpcyBzZXJpYWxpemFibGUgc28gdGhhdCBpdCBjYW4KKyAqIGJlIHNlcmlhbGl6ZWQgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIDxwPgorICogSXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIE1ldGhvZERlc2NyaXB0b3IuIAorICogQHNpbmNlIDEuMS4wCisgKi8KK3B1YmxpYyBjbGFzcyBNZXRob2RSZWNvcmQgZXh0ZW5kcyBGZWF0dXJlUmVjb3JkIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMTA1OTgyMjEzMTEwTDsKKwkKKwkvKioKKwkgKiBNZXRob2Qgc2lnbmF0dXJlIGZvciB0aGUgbWV0aG9kIHRoaXMgcmVjb3JkIGRlc2NyaWJlcy4KKwkgKi8KKwlwdWJsaWMgUmVmbGVjdE1ldGhvZFJlY29yZCBtZXRob2RGb3JEZXNjcmlwdG9yOworCS8qKgorCSAqIFBhcmFtZXRlciByZWNvcmRzIGFycmF5LiBJdCBtYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlcmUgYXJlbid0IGFueS4KKwkgKi8KKwlwdWJsaWMgUGFyYW1ldGVyUmVjb3JkW10gcGFyYW1ldGVyczsKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL1BhcmFtZXRlclJlY29yZC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vUGFyYW1ldGVyUmVjb3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyZjM3MAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL1BhcmFtZXRlclJlY29yZC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uOworIAorCisvKioKKyAqIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciBzZW5kaW5nIHRoZSBQYXJhbWV0ZXJEZXNjcmlwdG9yIGluZm8gZnJvbQorICogdGhlIEJlYW5JbmZvIHZtIHRvIHRoZSBJREUgdm0uIEl0IGlzIHNlcmlhbGl6YWJsZSBzbyB0aGF0IGl0IGNhbgorICogYmUgc2VyaWFsaXplZCBmb3IgdHJhbnNtaXNzaW9uLgorICogPHA+CisgKiBJdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBvZiB0aGUgUGFyYW1ldGVyRGVzY3JpcHRvci4KKyAqIDxwPgorICogVGhlIG9ubHkgZmllbGQgb2YgaW1wb3J0YW5jZSBpcyB0aGUgbmFtZSwgYW5kIHRoYXQgY29tZXMgZnJvbSBGZWF0dXJlUmVjb3JkLiAKKyAqIEBzaW5jZSAxLjEuMAorICovCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVyUmVjb3JkIGV4dGVuZHMgRmVhdHVyZVJlY29yZCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMTA1OTgyNDM4OTU1TDsKKwkKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL1Byb3BlcnR5UmVjb3JkLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9Qcm9wZXJ0eVJlY29yZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDMyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9Qcm9wZXJ0eVJlY29yZC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uOworIAorCisvKioKKyAqIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciBzZW5kaW5nIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3IgaW5mbyBmcm9tCisgKiB0aGUgQmVhbkluZm8gdm0gdG8gdGhlIElERSB2bS4gSXQgaXMgc2VyaWFsaXphYmxlIHNvIHRoYXQgaXQgY2FuCisgKiBiZSBzZXJpYWxpemVkIGZvciB0cmFuc21pc3Npb24uCisgKiA8cD4KKyAqIEl0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3IuIAorICogQHNpbmNlIDEuMS4wCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9wZXJ0eVJlY29yZCBleHRlbmRzIEZlYXR1cmVSZWNvcmQgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDExMDU5NzkyNzY2NDhMOworCQorCXB1YmxpYyBTdHJpbmcgcHJvcGVydHlFZGl0b3JDbGFzc05hbWU7CisJcHVibGljIFN0cmluZyBwcm9wZXJ0eVR5cGVOYW1lOworCXB1YmxpYyBSZWZsZWN0TWV0aG9kUmVjb3JkIHJlYWRNZXRob2Q7CisJcHVibGljIFJlZmxlY3RNZXRob2RSZWNvcmQgd3JpdGVNZXRob2Q7CisJcHVibGljIFJlZmxlY3RGaWVsZFJlY29yZCBmaWVsZDsKKwlwdWJsaWMgYm9vbGVhbiBib3VuZDsKKwlwdWJsaWMgYm9vbGVhbiBjb25zdHJhaW5lZDsKKwlwdWJsaWMgQm9vbGVhbiBkZXNpZ25UaW1lOworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vUmVmbGVjdEZpZWxkUmVjb3JkLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9SZWZsZWN0RmllbGRSZWNvcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI5ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2JlYW5pbmZvQ29tbW9uL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby9jb21tb24vUmVmbGVjdEZpZWxkUmVjb3JkLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisKKworICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb21tb247CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKKyAKKworLyoqCisgKiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3Igc2VuZGluZyB0aGUgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgaW5mbyBmcm9tCisgKiB0aGUgQmVhbkluZm8gdm0gdG8gdGhlIElERSB2bS4gSXQgaXMgc2VyaWFsaXphYmxlIHNvIHRoYXQgaXQgY2FuCisgKiBiZSBzZXJpYWxpemVkIGZvciB0cmFuc21pc3Npb24uCisgKiA8cD4KKyAqIEl0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZC4gCisgKiBAc2luY2UgMS4xLjAKKyAqLworcHVibGljIGNsYXNzIFJlZmxlY3RGaWVsZFJlY29yZCBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTEwNTk4MTUxMjQ1M0w7CisJCisJcHVibGljIFN0cmluZyBjbGFzc05hbWU7CisJcHVibGljIFN0cmluZyBmaWVsZE5hbWU7CisJcHVibGljIGJvb2xlYW4gcmVhZE9ubHk7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9SZWZsZWN0TWV0aG9kUmVjb3JkLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vYmVhbmluZm9Db21tb24vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL2NvbW1vbi9SZWZsZWN0TWV0aG9kUmVjb3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMTI5MQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9iZWFuaW5mb0NvbW1vbi9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vY29tbW9uL1JlZmxlY3RNZXRob2RSZWNvcmQuamF2YQpAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKworCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvbW1vbjsKKworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworIAorCisvKioKKyAqIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciBzZW5kaW5nIHRoZSBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgaW5mbyBmcm9tCisgKiB0aGUgQmVhbkluZm8gdm0gdG8gdGhlIElERSB2bS4gSXQgaXMgc2VyaWFsaXphYmxlIHNvIHRoYXQgaXQgY2FuCisgKiBiZSBzZXJpYWxpemVkIGZvciB0cmFuc21pc3Npb24uCisgKiA8cD4KKyAqIEl0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuIAorICogQHNpbmNlIDEuMS4wCisgKi8KK3B1YmxpYyBjbGFzcyBSZWZsZWN0TWV0aG9kUmVjb3JkIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMTA1OTgxNTEyNzczTDsKKwkKKwlwdWJsaWMgU3RyaW5nIGNsYXNzTmFtZTsKKwlwdWJsaWMgU3RyaW5nIG1ldGhvZE5hbWU7CisJcHVibGljIFN0cmluZ1tdIHBhcmFtZXRlclR5cGVOYW1lczsJLy8gTWF5YmUgbnVsbCBpZiBubyBwYXJhbWV0ZXJzLgorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYnVpbGQucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9idWlsZC5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2J1aWxkLnByb3BlcnRpZXMKcmVuYW1lIHRvIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI5NmJhMWUuLjQ0ODg0MzAgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0uY29tbW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTEsMjIgKzEsMjAgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAorIwogIyBDb250cmlidXRvcnM6CiAjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKK3NyYy5leGNsdWRlcyA9ICoqLy5jdnNpZ25vcmUKK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKICAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgLm9wdGlvbnMsXAogICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKICAgICAgICAgICAgICAgIC4KLXNyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwKLW91dHB1dC4uID0gYmluLwotc291cmNlLi4gPSB1aS8sXAotICAgICAgICAgICBiZWFuaW5mb3VpLwogamFycy5jb21waWxlLm9yZGVyID0gLgorc3JjLmluY2x1ZGVzID0gYWJvdXQuaHRtbAorc291cmNlLi4gPSBiZWFuaW5mb0NvbW1vbi8KK291dHB1dC4uID0gYmluLworCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vcGx1Z2luLnByb3BlcnRpZXMgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24vcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxNGE3NAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLmNvbW1vbi9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKKyNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb24KK0J1bmRsZS1OYW1lLjAgPSBKRU0gQmVhbmluZm8gQ29tbW9uIEphcgorQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKK0J1bmRsZS1EZXNjcmlwdGlvbi4wID0gVGhpcyBidW5kbGUgaXMgdXNlZCBvbmx5IGFzIGEgamFyIGJ5IHRoZSBvcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8gYnVuZGxlLCBzbyBpdCBzaG91bGQgbmV2ZXIgYmUgInByZS1yZXEnZCIgYnkgb3RoZXJzLCBvbmx5IGJ5IG8uZS5qZW0uYmVhbmluZm8uIE90aGVyIGFkb3B0ZXJzIHdvdWxkIHVzZSBvbmx5IHRoYXQgby5lLmplbS5iZWFuaW5mbyBidW5kbGUuCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8uY2xhc3NwYXRoIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vLmNsYXNzcGF0aApzaW1pbGFyaXR5IGluZGV4IDc4JQpjb3B5IGZyb20gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLmNsYXNzcGF0aApjb3B5IHRvIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLy5jbGFzc3BhdGgKaW5kZXggZjcwNDc2Zi4uMThkODJjNiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLmNsYXNzcGF0aAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS8uY2xhc3NwYXRoCkBAIC0xLDggKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idWkiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJiZWFuaW5mb3VpIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InZtX2JlYW5pbmZvdm0iLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KIDwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnByb2plY3QgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS8ucHJvamVjdApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBwbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8ucHJvamVjdApyZW5hbWUgdG8gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vLnByb2plY3QKaW5kZXggNzFjNzBlMC4uODc3MGIyMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnByb2plY3QKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vLnByb2plY3QKQEAgLTEsNiArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qZW0udWk8L25hbWU+CisJPG5hbWU+b3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtPC9uYW1lPgogCTxjb21tZW50PjwvY29tbWVudD4KIAk8cHJvamVjdHM+CiAJPC9wcm9qZWN0cz4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTk3OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNyBAQAorI1dlZCBOb3YgMjYgMDE6MjM6MDAgRVNUIDIwMDgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA0MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bQorQnVuZGxlLVZlcnNpb246IDIuMC4yMDAucXVhbGlmaWVyCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bSwKKyBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udm07eC1pbnRlcm5hbDo9dHJ1ZQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjAuMjAwLDMuMC4wKSI7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwucHJveHkuY29tbW9uO3Jlc29sdXRpb246PW9wdGlvbmFsCitCdW5kbGUtRGVzY3JpcHRpb246ICVCdW5kbGUtRGVzY3JpcHRpb24uMApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYWJvdXQuaHRtbCBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL2Fib3V0Lmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2Fib3V0Lmh0bWwKcmVuYW1lIHRvIHBsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL2Fib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS9idWlsZC5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzElCmNvcHkgZnJvbSBwbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9idWlsZC5wcm9wZXJ0aWVzCmNvcHkgdG8gcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vYnVpbGQucHJvcGVydGllcwppbmRleCBiOTZiYTFlLi4zNWY4MjI4IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL2J1aWxkLnByb3BlcnRpZXMKQEAgLTEsMjIgKzEsMTkgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAorIwogIyBDb250cmlidXRvcnM6CiAjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKK3NyYy5leGNsdWRlcyA9ICoqLy5jdnNpZ25vcmUKK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKICAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgLm9wdGlvbnMsXAogICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKICAgICAgICAgICAgICAgIC4KIHNyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwKK3NvdXJjZS4uID0gdm1fYmVhbmluZm92bS8KIG91dHB1dC4uID0gYmluLwotc291cmNlLi4gPSB1aS8sXAotICAgICAgICAgICBiZWFuaW5mb3VpLwotamFycy5jb21waWxlLm9yZGVyID0gLgorCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS9wbHVnaW4ucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTEwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKKyNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bQorQnVuZGxlLU5hbWUuMCA9IEpFTSBCZWFuaW5mbyBWTSBKYXIKK0J1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCitCdW5kbGUtRGVzY3JpcHRpb24uMCA9IFRoaXMgYnVuZGxlIGlzIHVzZWQgb25seSBhcyBhIGphciBieSB0aGUgb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvIGJ1bmRsZSwgc28gaXQgc2hvdWxkIG5ldmVyIGJlICJwcmUtcmVxJ2QiIGJ5IG90aGVycywgb25seSBieSBvLmUuamVtLmJlYW5pbmZvLiBFeHRlbmRlcnMgd291bGQgdXNlIG9ubHkgdGhhdCBvLmUuamVtLmJlYW5pbmZvIGJ1bmRsZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9iZWFuaW5mby92bS9CYXNlQmVhbkluZm8uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2JlYW5pbmZvL3ZtL0Jhc2VCZWFuSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWI2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9iZWFuaW5mby92bS9CYXNlQmVhbkluZm8uamF2YQpAQCAtMCwwICsxLDg1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bTsKKworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYXd0LkltYWdlOworaW1wb3J0IGphdmEuYmVhbnMuKjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLmNvbW1vbi5JQmFzZUJlYW5JbmZvQ29uc3RhbnRzOworCisKKy8qKgorICogQSBCYXNlQmVhbkluZm8gdGhhdCBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgQmVhbkluZm9zIHdpdGhpbiB0aGUgSkVNIGVudmlyb25tZW50LgorICogCisgKiBAc2luY2UgMS4xLjAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VCZWFuSW5mbyBleHRlbmRzIFNpbXBsZUJlYW5JbmZvIGltcGxlbWVudHMgSUJhc2VCZWFuSW5mb0NvbnN0YW50cyB7CisKKwkvLyBDb25zdGFudHMgdG8gdXNlIHRvIGNyZWF0ZSBhbGwgZGVzY3JpcHRvcnMgZXRjLgorCXByb3RlY3RlZCBzdGF0aWMgamF2YS51dGlsLlJlc291cmNlQnVuZGxlIFJFU0JVTkRMRSA9IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS5iZWFuaW5mbyIpOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBCb3VuZCBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCT1VORCA9ICJib3VuZCI7Ly8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29uc3RyYWluZWQgaW5kaWNhdG9yIGZvciBhcHBseSBwcm9wZXJ0eSBhcmd1bWVudHMuCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OU1RSQUlORUQgPSAiY29uc3RyYWluZWQiOy8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFByb3BlcnR5IGVkaXRvciBjbGFzcyBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWUVESVRPUkNMQVNTID0gInByb3BlcnR5RWRpdG9yQ2xhc3MiOy8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFJlYWQgTWV0aG9kIGluZGljYXRvciBmb3IgYXBwbHkgcHJvcGVydHkgYXJndW1lbnRzLgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFQURNRVRIT0QgPSAicmVhZE1ldGhvZCI7Ly8kTk9OLU5MUy0xJAorCisJLyoqCisJICogV3JpdGUgbWV0aG9kIGluZGljYXRvciBmb3IgYXBwbHkgcHJvcGVydHkgYXJndW1lbnRzLgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdSSVRFTUVUSE9EID0gIndyaXRlTWV0aG9kIjsvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBEaXNwbGF5bmFtZSBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNQTEFZTkFNRSA9ICJkaXNwbGF5TmFtZSI7Ly8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIEV4cGVydCBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFUlQgPSAiZXhwZXJ0IjsvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBIaWRkZW4gaW5kaWNhdG9yIGZvciBhcHBseSBwcm9wZXJ0eSBhcmd1bWVudHMuCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSElEREVOID0gImhpZGRlbiI7Ly8kTk9OLU5MUy0xJAorCisJLyoqCisJICogUHJlZmVycmVkIGluZGljYXRvciBmb3IgYXBwbHkgcHJvcGVydHkgYXJndW1lbnRzLgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUlJFRCA9ICJwcmVmZXJyZWQiOy8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFNob3J0IGRlc2NyaXB0aW9uIGluZGljYXRvciBmb3IgYXBwbHkgcHJvcGVydHkgYXJndW1lbnRzLgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNIT1JUREVTQ1JJUFRJT04gPSAic2hvcnREZXNjcmlwdGlvbiI7Ly8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ3VzdG9taXplciBjbGFzcyBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDVVNUT01JWkVSQ0xBU1MgPSAiY3VzdG9taXplckNsYXNzIjsvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBJbiBEZWZhdWx0IGV2ZW50c2V0IGluZGljYXRvciBmb3IgYXBwbHkgcHJvcGVydHkgYXJndW1lbnRzLgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOREVGQVVMVEVWRU5UU0VUID0gImluRGVmYXVsdEV2ZW50U2V0IjsvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogVGhpcyBpcyBhIEZlYXR1cmUgQXR0cmlidXRlIEtleS4gV2hlbiB0aGlzIGtleSBleGlzdHMsIHRoZSB2YWx1ZSBpcyBhIGphdmEubGFuZy5yZWZsZWN0LkZpZWxkLiBJdCBtZWFucyB0aGlzIHByb3BlcnR5CisJICogaXMgYSBmaWVsZCBhbmQgbm90IGEgZ2V0dGVyL3NldHRlci4gVGhlIGdldHRlci9zZXR0ZXIgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgcHJvcGVydHkgdHlwZSB3aWxsIGJlIHRoZSB0eXBlIG9mIHRoZSBmaWVsZC4KKwkgKiA8cD4KKwkgKiBBdCB0aGlzIHRpbWUsIGRvIG5vdCB1c2UgZmllbGQgb24gYW4gaW5kZXhlZCBwcm9wZXJ0eS4gVGhpcyBpcyBjdXJyZW50bHkgYW4gdW5kZWZpbmVkIHNpdHVhdGlvbi4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUVMRFBST1BFUlRZID0gImZpZWxkIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogT2JzY3VyZSBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4gT2JzdXJlIGlzIGEgcHJlLWRlZmluZWQgYXR0cmlidXRlIG5hbWUgdG9vLiBUaGF0IGlzIHdoZXJlIHRoZSBvYnNjdXJlIHNldHRpbmcgaXMgc3RvcmVkLgorCSAqIDxwPgorCSAqIE9ic3VyZSBtZWFucyBtb3N0IHVzZXJzIGRvbid0IG5lZWQgaXQuIEluIHRoZSBmdXR1cmUgc3VjaCBmZWF0dXJlcyB3b24ndCBldmVuIGJlIGNhY2hlZCBzbyBhcyB0byByZWR1Y2UgdGhlIGluLW1lbW9yeSBjb3N0cy4gQ3VycmVudGx5IHRoaXMKKwkgKiBmbGFnIGlzIGlnbm9yZWQuCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JTQ1VSRSA9ICJpdmpPYnNjdXJlIjsvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBEZXNpZ24gdGltZSBpbmRpY2F0b3IgZm9yIGFwcGx5IHByb3BlcnR5IGFyZ3VtZW50cy4gRGVzaWduIHRpbWUgaXMgYSBwcmUtZGVmaW5lZCBhdHRyaWJ1dGUgbmFtZSB0b28uIFRoYXQgaXMgd2hlcmUgdGhlIGRlc2lnbiB0aW1lIHNldHRpbmcgaXMKKwkgKiBzdG9yZWQuCisJICogPHA+CisJICogRGVzaWduIHRpbWUgbWVhbnM6CisJICogPHVsPgorCSAqIDxsaT5Ob3Qgc2V0OiBXaWxsIGJlIGEgcHJvcGVydHkgdGhhdCBjYW4gYmUgY29ubmVjdGVkIHRvLCBhbmQgc2hvd3Mgb24gcHJvcGVydHkgc2hlZXQgKGlmIG5vdCBoaWRkZW4pLgorCSAqIDxsaT48Y29kZT50cnVlPC9jb2RlPjogU3BlY2lhbCBwcm9wZXJ0eSAoaXQgd2lsbCBzaG93IG9uIHByb3BlcnR5IHNoZWV0IGlmIG5vdCBoaWRkZW4pLCBidXQgaXQgY2FuJ3QgYmUgY29ubmVjdGVkIHRvLiBVc3VhbGx5IHRoaXMgaXMgYQorCSAqIHByb3BlcnR5IHRoYXQgaXMgZmx1ZmZlZCB1cCBmb3IgdGhlIElERSBwdXJwb3NlcyBidXQgZG9lc24ndCBoYXZlIGEgZ2V0L3NldCBtZXRob2QuIFRoaXMgbWVhbnMgaXQgaXMgYSBwcm9wZXJ0eSBmb3IgZGVzaWduIHRpbWUgYW5kIG5vdCBmb3IKKwkgKiBydW50aW1lLgorCSAqIDxsaT48Y29kZT5mYWxzZTwvY29kZT46IFRoaXMgcHJvcGVydHkgd2lsbCBub3Qgc2hvdyB1cCBvbiBwcm9wZXJ0eSBzaGVldCBidXQgaXQgY2FuIGJlIGNvbm5lY3RlZCB0by4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0lHTlRJTUVQUk9QRVJUWSA9ICJpdmpEZXNpZ25UaW1lUHJvcGVydHkiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogRXZlbnRBZGFwdGVyQ2xhc3MgaW5kaWNhdG9yIGZvciBhcHBseSBwcm9wZXJ0eSBhcmd1bWVudHMuIEV2ZW50IGFkYXB0ZXIgY2xhc3MgaXMgYSBwcmUtZGVmaW5lZCBhdHRyaWJ1dGUgbmFtZSB0b28uIFRoYXQgaXMgd2hlcmUgdGhlIGV2ZW50CisJICogYWRhcHRlciBpcyBzdG9yZWQuCisJICogPHA+CisJICogQWRhcHRlciBjbGFzcyBmb3IgZXZlbnRTZXREZXNjcmlwdG9ycyB0aGF0IHByb3ZpZGUgZGVmYXVsdCBuby1vcCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIG1ldGhvZHMuIEZvciBleGFtcGxlCisJICogPGNvZGU+amF2YS5hd3QuZXZlbnQuV2luZG93TGlzdGVuZXI8L2NvZGU+IGhhcyBhbiBhZGFwdGVyIG9mIDxjb2RlPmphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI8L2NvZGU+LiBXaGF0IGlzIHN0b3JlZCBpcyBhY3R1YWxseSB0aGUKKwkgKiBjbGFzcyBuYW1lLCBub3QgdGhlIGNsYXNzIGl0c2VsZi4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFVkVOVEFEQVBURVJDTEFTUyA9ICJldmVudEFkYXB0ZXJDbGFzcyI7IC8vJE5PTi1OTFMtMSQKKworCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEpWTV8xXzMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIsICIiKS5zdGFydHNXaXRoKCIxLjMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkICAvLyROT04tTkxTLTMkCisJCisJLyoqCisJICogRW1wdHkgYXJncyBsaXN0IGZvciB0aG9zZSBkZXNjcmlwdG9ycyB0aGF0IGRvbid0IGhhdmUgYXJndW1lbnRzLgorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0W10gRU1QVFlfQVJHUyA9IG5ldyBPYmplY3RbMF07CisKKwkvKioKKwkgKiBDYXBpdGFsaXplIHRoZSBzdHJpbmcuIFRoaXMgdXBwZXJjYXNlcyBvbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIuIFNvIGlmIHlvdSBoYXZlIHByb3BlcnR5IG5hbWUgb2YgImFiYyIgaXQgd2lsbCBiZWNvbWUgIkFiYyIuCisJICogCisJICogQHBhcmFtIHMKKwkgKiBAcmV0dXJuIHN0cmluZyB3aXRoIGZpcnN0IGxldHRlciBjYXBpdGFsaXplZC4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjYXBpdGFsaXplKFN0cmluZyBzKSB7CisJCWlmIChzLmxlbmd0aCgpID09IDApIHsgcmV0dXJuIHM7IH0KKwkJY2hhciBjaGFyc1tdID0gcy50b0NoYXJBcnJheSgpOworCQljaGFyc1swXSA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaGFyc1swXSk7CisJCXJldHVybiBuZXcgU3RyaW5nKGNoYXJzKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBCZWFuRGVzY3JpcHRvciBvYmplY3QgZ2l2ZW4gYW4gYXJyYXkgb2Yga2V5d29yZC92YWx1ZSBhcmd1bWVudHMuIFVzZSB0aGUga2V5d29yZHMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzLCBlLmcuIEJPVU5ELCBFWFBFUlQsIGV0Yy4KKwkgKiAKKwkgKiBAcGFyYW0gY2xzCisJICogICAgICAgICAgICBiZWFuIGZvciB3aGljaCB0aGUgYmVhbiBkZXNjcmlwdG9yIGlzIGJlaW5nIGNyZWF0ZWQuCisJICogQHBhcmFtIGFyZ3MKKwkgKiAgICAgICAgICAgIGFyZyBwYWlycywgWzBdIGtleXdvcmQsIFsxXSB2YWx1ZSwgWzJdIGtleXdvcmQsIFszXSB2YWx1ZSwgZXRjLiBvciBudWxsIGlmIG5vIGFyZ3MKKwkgKiBAcmV0dXJuIG5ldyBiZWFuIGRlc2NyaXB0b3IKKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEJlYW5EZXNjcmlwdG9yIGNyZWF0ZUJlYW5EZXNjcmlwdG9yKENsYXNzIGNscywgT2JqZWN0W10gYXJncykgeworCQlDbGFzcyBjdXN0b21pemVyQ2xhc3MgPSBudWxsOworCisJCWlmIChhcmdzICE9IG51bGwpIHsKKwkJCS8qIEZpbmQgdGhlIHNwZWNpZmllZCBjdXN0b21pemVyQ2xhc3MgKi8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMikgeworCQkJCWlmIChDVVNUT01JWkVSQ0xBU1MuZXF1YWxzKGFyZ3NbaV0pKSB7CisJCQkJCWN1c3RvbWl6ZXJDbGFzcyA9IChDbGFzcykgYXJnc1tpICsgMV07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCUJlYW5EZXNjcmlwdG9yIGJkID0gbmV3IEJlYW5EZXNjcmlwdG9yKGNscywgY3VzdG9taXplckNsYXNzKTsKKworCQlpZiAoYXJncyAhPSBudWxsKSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDIpIHsKKwkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgYXJnc1tpXTsKKwkJCQlPYmplY3QgdmFsdWUgPSBhcmdzW2kgKyAxXTsKKwkJCQlzZXRGZWF0dXJlRGVzY3JpcHRvclZhbHVlKGJkLCBrZXksIHZhbHVlKTsKKwkJCX0KKwkJfQkJCisJCXJldHVybiBiZDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBiZWFucyBFdmVudFNldERlc2NyaXB0b3IgZ2l2ZW4gdGhlIGZvbGxvd2luZzoKKwkgKiAKKwkgKiBAcGFyYW0gY2xzCisJICogICAgICAgICAgICBUaGUgYmVhbiBjbGFzcworCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBOYW1lIG9mIGV2ZW50IHNldAorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBhcmcgcGFpcnMsIFswXSBrZXl3b3JkLCBbMV0gdmFsdWUsIFsyXSBrZXl3b3JkLCBbM10gdmFsdWUsIGV0Yy4gb3IgbnVsbCBpZiBubyBhcmdzLgorCSAqIEBwYXJhbSBsbWRzCisJICogICAgICAgICAgICBhcnJheSBvZiBNZXRob2REZXNjcmlwdG9ycyBkZWZpbmluZyB0aGUgbGlzdGVuZXIgbWV0aG9kcworCSAqIEBwYXJhbSBsaXN0ZW5lclR5cGUKKwkgKiAgICAgICAgICAgIHR5cGUgb2YgbGlzdGVuZXIKKwkgKiBAcGFyYW0gYWRkTGlzdGVuZXJOYW1lCisJICogICAgICAgICAgICBhZGQgbGlzdGVuZXIgbWV0aG9kIG5hbWUKKwkgKiBAcGFyYW0gcmVtb3ZlTGlzdGVuZXJOYW1lcmVtb3ZlCisJICogICAgICAgICAgICBsaXN0ZW5lciBtZXRob2QgbmFtZQorCSAqIEByZXR1cm4gbmV3IGV2ZW50IHNldCBkZXNjcmlwdG9yCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBFdmVudFNldERlc2NyaXB0b3IgY3JlYXRlRXZlbnRTZXREZXNjcmlwdG9yKENsYXNzIGNscywgU3RyaW5nIG5hbWUsIE9iamVjdFtdIGFyZ3MsIE1ldGhvZERlc2NyaXB0b3JbXSBsbWRzLCBDbGFzcyBsaXN0ZW5lclR5cGUsCisJCQlTdHJpbmcgYWRkTGlzdGVuZXJOYW1lLCBTdHJpbmcgcmVtb3ZlTGlzdGVuZXJOYW1lKSB7CisJCUV2ZW50U2V0RGVzY3JpcHRvciBlc2QgPSBudWxsOworCQlDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGxpc3RlbmVyVHlwZX07CisJCXRyeSB7CisJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgYWRkTWV0aG9kID0gbnVsbDsKKwkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCByZW1vdmVNZXRob2QgPSBudWxsOworCQkJdHJ5IHsKKwkJCQkvKiBnZXQgYWRkTGlzdGVuZXJNZXRob2Qgd2l0aCBwYXJhbWV0ZXIgdHlwZXMuICovCisJCQkJYWRkTWV0aG9kID0gY2xzLmdldE1ldGhvZChhZGRMaXN0ZW5lck5hbWUsIHBhcmFtVHlwZXMpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGllKSB7CisJCQkJdGhyb3dFcnJvcihpZSwgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFU0JVTkRMRS5nZXRTdHJpbmcoIkNhbm5vdF9nZXRfdGhlX21ldGgxX0VYQ18iKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJbmV3IE9iamVjdFtdIHsgYWRkTGlzdGVuZXJOYW1lfSkpOworCQkJfQorCQkJOworCQkJdHJ5IHsKKwkJCQkvKiBnZXQgcmVtb3ZlTGlzdGVuZXJNZXRob2Qgd2l0aCBwYXJhbWV0ZXIgdHlwZXMuICovCisJCQkJcmVtb3ZlTWV0aG9kID0gY2xzLmdldE1ldGhvZChyZW1vdmVMaXN0ZW5lck5hbWUsIHBhcmFtVHlwZXMpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGllKSB7CisJCQkJdGhyb3dFcnJvcihpZSwgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFU0JVTkRMRS5nZXRTdHJpbmcoIkNhbm5vdF9nZXRfdGhlX21ldGgxX0VYQ18iKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJbmV3IE9iamVjdFtdIHsgcmVtb3ZlTGlzdGVuZXJOYW1lfSkpOworCQkJfQorCQkJOworCisJCQllc2QgPSBuZXcgRXZlbnRTZXREZXNjcmlwdG9yKG5hbWUsIGxpc3RlbmVyVHlwZSwgbG1kcywgYWRkTWV0aG9kLCByZW1vdmVNZXRob2QpOworCQl9IGNhdGNoIChFeGNlcHRpb24gaWUpIHsKKwkJCXRocm93RXJyb3IoaWUsIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LmZvcm1hdChSRVNCVU5ETEUuZ2V0U3RyaW5nKCJDYW5ub3RfY3JlYXRlX3RoZV9FMV9FWENfIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJbmV3IE9iamVjdFtdIHsgbmFtZX0pKTsKKwkJfQorCQk7CisJCWlmIChhcmdzICE9IG51bGwpIHsKKwkJCS8vIHNldCB0aGUgZXZlbnQgc2V0IGRlc2NyaXB0b3IgcHJvcGVydGllcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAyKSB7CisJCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGFyZ3NbaV07CisJCQkJT2JqZWN0IHZhbHVlID0gYXJnc1tpICsgMV07CisJCQkJaWYgKElOREVGQVVMVEVWRU5UU0VULmVxdWFscyhrZXkpKSB7CisJCQkJCWVzZC5zZXRJbkRlZmF1bHRFdmVudFNldCgoKEJvb2xlYW4pIHZhbHVlKS5ib29sZWFuVmFsdWUoKSk7CisJCQkJfSBlbHNlCisJCQkJCXNldEZlYXR1cmVEZXNjcmlwdG9yVmFsdWUoZXNkLCBrZXksIHZhbHVlKTsKKwkJCX0KKwkJfQkJCisJCXJldHVybiBlc2Q7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgYmVhbidzIE1ldGhvZERlc2NyaXB0b3IuCisJICogCisJICogQHBhcmFtIGNscworCSAqICAgICAgICAgICAgY2xhc3Mgb2YgdGhlIG1ldGhvZC4KKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUgbWV0aG9kLgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBhcmcgcGFpcnMsIFswXSBrZXl3b3JkLCBbMV0gdmFsdWUsIFsyXSBrZXl3b3JkLCBbM10gdmFsdWUsIGV0Yy4gb3IgbnVsbCBpZiBubyBhcmdzCisJICogQHBhcmFtIHBhcmFtcworCSAqICAgICAgICAgICAgcGFyYW1ldGVyIGRlc2NyaXB0b3JzIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vIHBhcmFtZXRlciBkZXNjcmlwdG9ycy4KKwkgKiBAcGFyYW0gcGFyYW1UeXBlcworCSAqICAgICAgICAgICAgcGFyYW1ldGVyIHR5cGVzCisJICogQHJldHVybiBuZXcgbWV0aG9kIGRlc2NyaXB0b3IKKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1ldGhvZERlc2NyaXB0b3IgY3JlYXRlTWV0aG9kRGVzY3JpcHRvcihDbGFzcyBjbHMsIFN0cmluZyBuYW1lLCBPYmplY3RbXSBhcmdzLCBQYXJhbWV0ZXJEZXNjcmlwdG9yW10gcGFyYW1zLCBDbGFzc1tdIHBhcmFtVHlwZXMpIHsKKwkJTWV0aG9kRGVzY3JpcHRvciBtZCA9IG51bGw7CisJCXRyeSB7CisJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgYU1ldGhvZCA9IG51bGw7CisJCQl0cnkgeworCQkJCS8qIGdldE1ldGhvZCB3aXRoIHBhcmFtZXRlciB0eXBlcy4gKi8KKwkJCQlhTWV0aG9kID0gY2xzLmdldE1ldGhvZChuYW1lLCBwYXJhbVR5cGVzKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZSkgeworCQkJCXRocm93RXJyb3IoaWUsIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LmZvcm1hdChSRVNCVU5ETEUuZ2V0U3RyaW5nKCJDYW5ub3RfZ2V0X3RoZV9tZXRoMV9FWENfIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJCW5ldyBPYmplY3RbXSB7IG5hbWV9KSk7CisJCQl9CisJCQk7CisJCQlpZiAocGFyYW1zICE9IG51bGwgJiYgcGFyYW1zLmxlbmd0aCA+IDApCisJCQkJbWQgPSBuZXcgTWV0aG9kRGVzY3JpcHRvcihhTWV0aG9kLCBwYXJhbXMpOworCQkJZWxzZQorCQkJCW1kID0gbmV3IE1ldGhvZERlc2NyaXB0b3IoYU1ldGhvZCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZSkgeworCQkJdGhyb3dFcnJvcihpZSwgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFU0JVTkRMRS5nZXRTdHJpbmcoIkNhbm5vdF9jcmVhdGVfTWV0aG9kX0VYQ18iKSwgLy8kTk9OLU5MUy0xJAorCQkJCQluZXcgT2JqZWN0W10geyBuYW1lfSkpOworCQl9CisJCTsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgeworCQkJLy8gc2V0IHRoZSBtZXRob2QgcHJvcGVydGllcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAyKSB7CisJCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGFyZ3NbaV07CisJCQkJT2JqZWN0IHZhbHVlID0gYXJnc1tpICsgMV07CisJCQkJc2V0RmVhdHVyZURlc2NyaXB0b3JWYWx1ZShtZCwga2V5LCB2YWx1ZSk7CisJCQl9CisJCX0JCQorCQlyZXR1cm4gbWQ7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgUHJvcGVydHlEZXNjcmlwdG9yIGNyZWF0ZU90aGVyUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZyBuYW1lLCBDbGFzcyBjbHMpIHRocm93cyBJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIHsKKwkJTWV0aG9kIHJlYWRNZXRob2QgPSBudWxsOworCQlNZXRob2Qgd3JpdGVNZXRob2QgPSBudWxsOworCQlTdHJpbmcgYmFzZSA9IGNhcGl0YWxpemUobmFtZSk7CisJCUNsYXNzW10gcGFyYW1ldGVycyA9IG5ldyBDbGFzc1swXTsKKworCQkvLyBGaXJzdCB3ZSB0cnkgYm9vbGVhbiBhY2Nlc3NvciBwYXR0ZXJuCisJCXRyeSB7CisJCQlyZWFkTWV0aG9kID0gY2xzLmdldE1ldGhvZCgiaXMiICsgYmFzZSwgcGFyYW1ldGVycyk7Ly8kTk9OLU5MUy0xJAorCQl9IGNhdGNoIChFeGNlcHRpb24gZXgxKSB7CisJCX0KKwkJaWYgKHJlYWRNZXRob2QgPT0gbnVsbCkgeworCQkJdHJ5IHsKKwkJCQkvLyBFbHNlIHdlIHRyeSB0aGUgZ2V0IGFjY2Vzc29yIHBhdHRlcm4uCisJCQkJcmVhZE1ldGhvZCA9IGNscy5nZXRNZXRob2QoImdldCIgKyBiYXNlLCBwYXJhbWV0ZXJzKTsvLyROT04tTkxTLTEkCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgyKSB7CisJCQkJLy8gRmluZCBieSBtYXRjaGluZyBtZXRob2RzIG9mIHRoZSBjbGFzcworCQkJCXJlYWRNZXRob2QgPSBmaW5kTWV0aG9kKGNscywgImdldCIgKyBiYXNlLCAwKTsvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlpZiAocmVhZE1ldGhvZCA9PSBudWxsKSB7CisJCQkvLyBGb3Igd3JpdGUtb25seSBwcm9wZXJ0aWVzLCBmaW5kIHRoZSB3cml0ZSBtZXRob2QKKwkJCXdyaXRlTWV0aG9kID0gZmluZE1ldGhvZChjbHMsICJzZXQiICsgYmFzZSwgMSk7Ly8kTk9OLU5MUy0xJAorCQl9IGVsc2UgeworCQkJLy8gSW4gU3VuJ3MgY29kZSwgcmVmbGVjdGlvbiBmYWlscyBpZiB0aGVyZSBhcmUgdHdvCisJCQkvLyBzZXR0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgdGhlIGZpcnN0IHNldHRlciBsb2NhdGVkCisJCQkvLyBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIG9mIHRoZSBnZXR0ZXIuCisJCQkvLyBUaGlzIGZpeGVzIHRoYXQuCisJCQlwYXJhbWV0ZXJzID0gbmV3IENsYXNzWzFdOworCQkJcGFyYW1ldGVyc1swXSA9IHJlYWRNZXRob2QuZ2V0UmV0dXJuVHlwZSgpOworCQkJdHJ5IHsKKwkJCQl3cml0ZU1ldGhvZCA9IGNscy5nZXRNZXRob2QoInNldCIgKyBiYXNlLCBwYXJhbWV0ZXJzKTsvLyROT04tTkxTLTEkCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgzKSB7CisJCQl9CisJCX0KKwkJLy8gY3JlYXRlIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yCisJCWlmICgocmVhZE1ldGhvZCAhPSBudWxsKSB8fCAod3JpdGVNZXRob2QgIT0gbnVsbCkpIHsKKwkJCXJldHVybiBuZXcgUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIHJlYWRNZXRob2QsIHdyaXRlTWV0aG9kKTsKKwkJfSBlbHNlIHsKKwkJCXRocm93IG5ldyBJbnRyb3NwZWN0aW9uRXhjZXB0aW9uKGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LmZvcm1hdChSRVNCVU5ETEUuZ2V0U3RyaW5nKCJDYW5ub3RfZmluZF90aGVfYWNjMV9FWENfIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJbmV3IE9iamVjdFtdIHsgbmFtZX0pKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIGJlYW5zIHBhcmFtZXRlciBkZXNjcmlwdG9yLgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBuYW1lIG9mIHBhcmFtZXRlcgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBhcmcgcGFpcnMsIFswXSBrZXl3b3JkLCBbMV0gdmFsdWUsIFsyXSBrZXl3b3JkLCBbM10gdmFsdWUsIGV0Yy4gb3IgbnVsbCBpZiBubyBhcmdzCisJICogQHJldHVybiBuZXcgcGFyYW1ldGVyIGRlc2NyaXB0b3IKKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFBhcmFtZXRlckRlc2NyaXB0b3IgY3JlYXRlUGFyYW1ldGVyRGVzY3JpcHRvcihTdHJpbmcgbmFtZSwgT2JqZWN0W10gYXJncykgeworCQlQYXJhbWV0ZXJEZXNjcmlwdG9yIHBkID0gbnVsbDsKKwkJdHJ5IHsKKwkJCXBkID0gbmV3IFBhcmFtZXRlckRlc2NyaXB0b3IoKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGllKSB7CisJCQl0aHJvd0Vycm9yKGllLCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVTQlVORExFLmdldFN0cmluZygiQ2Fubm90X2NyZWF0ZV9QYXJhbTFfRVhDXyIpLCAvLyROT04tTkxTLTEkCisJCQkJCW5ldyBPYmplY3RbXSB7IG5hbWV9KSk7CisJCX0KKwkJOworCQkvLyBzZXQgdGhlIG5hbWUKKwkJcGQuc2V0TmFtZShuYW1lKTsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgeworCQkJLy8gc2V0IHRoZSBtZXRob2QgcHJvcGVydGllcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAyKSB7CisJCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGFyZ3NbaV07CisJCQkJT2JqZWN0IHZhbHVlID0gYXJnc1tpICsgMV07CisJCQkJc2V0RmVhdHVyZURlc2NyaXB0b3JWYWx1ZShwZCwga2V5LCB2YWx1ZSk7CisJCQl9CisJCX0JCQorCQlyZXR1cm4gcGQ7CisJfQorCQorCXByaXZhdGUgc3RhdGljIE1ldGhvZCBHRVRDTEFTUzsgCisJCisJc3RhdGljIHsKKwkJdHJ5IHsKKwkJCUdFVENMQVNTID0gT2JqZWN0LmNsYXNzLmdldE1ldGhvZCgiZ2V0Q2xhc3MiLCAoQ2xhc3NbXSkgbnVsbCk7IC8vJE5PTi1OTFMtMSQKKwkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgeworCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeworCQl9CisJfQorCS8qKgorCSAqIENyZWF0ZSBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZGVzY3JpYmluZyBhIGZpZWxkIHByb3BlcnR5LgorCSAqIDxwPgorCSAqIE5vdGU6IFRoaXMgaXMgbm9uLXN0YW5kYXJkLiBUaGUgVkUga25vd3MgaG93IHRvIGhhbmRsZSB0aGlzLCBidXQgYW55IG9uZSBlbHNlIHVzaW5nIEJlYW5JbmZvIHdpbGwgc2VlIHRoaXMgYXMgYSBwcm9wZXJ0eSB3aXRoCisJICogbm8gZ2V0dGVyIG9yIHNldHRlci4KKwkgKiBAcGFyYW0gbmFtZQorCSAqIEBwYXJhbSBmaWVsZAorCSAqIEBwYXJhbSBhcmdzIGFyZyBwYWlycywgWzBdIGtleXdvcmQsIFsxXSB2YWx1ZSwgWzJdIGtleXdvcmQsIFszXSB2YWx1ZSwgZXRjLiBvciBudWxsIGlmIG5vIGFyZ3MKKwkgKiBAcmV0dXJuCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBQcm9wZXJ0eURlc2NyaXB0b3IgY3JlYXRlRmllbGRQcm9wZXJ0eURlc2NyaXB0b3IoU3RyaW5nIG5hbWUsIEZpZWxkIGZpZWxkLCBPYmplY3RbXSBhcmdzKSB7CisJCXRyeSB7CisJCQlQcm9wZXJ0eURlc2NyaXB0b3IgcGQgPSBuZXcgUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIG51bGwsIG51bGwpOworCQkJcGQuc2V0VmFsdWUoRklFTERQUk9QRVJUWSwgZmllbGQpOwkvLyBTZXQgdGhlIGZpZWxkIHByb3BlcnR5IHNvIHdlIGtub3cgaXQgaXMgYSBmaWVsZC4KKwkJCWFwcGx5RmllbGRBcmd1bWVudHMocGQsIGFyZ3MpOworCQkJLy8gTmVlZCB0byBzZXQgaW4gYSBwaG9ueSByZWFkIG1ldGhvZCBiZWNhdXNlIEludHJvc3BlY3RvciB3aWxsIHRocm93IGl0IGF3YXkgb3RoZXJ3aXNlLiBXZSBqdXN0IHVzZSBPYmplY3QuZ2V0Q2xhc3MgZm9yIHRoaXMuCisJCQkvLyBXZSB3aWxsIGlnbm9yZSB0aGUgcHJvcGVydHkgdHlwZSBmb3IgZmllbGRzLiBJZiB1c2VkIG91dHNpZGUgb2YgVkUgdGhlbiBpdCB3aWxsIGxvb2sgbGlrZSBhIGNsYXNzIHByb3BlcnR5LgorCQkJcGQuc2V0UmVhZE1ldGhvZChHRVRDTEFTUyk7CisJCQlyZXR1cm4gcGQ7CisJCX0gY2F0Y2ggKEludHJvc3BlY3Rpb25FeGNlcHRpb24gZSkgeworCQkJdGhyb3dFcnJvcihlLCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVTQlVORExFLmdldFN0cmluZygiQ2Fubm90X2NyZWF0ZV90aGVfUDFfRVhDXyIpLCAvLyROT04tTkxTLTEkCisJCQkJCW5ldyBPYmplY3RbXSB7IG5hbWV9KSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIGJlYW4ncyBwcm9wZXJ0eSBkZXNjcmlwdG9yLgorCSAqIAorCSAqIEBwYXJhbSBjbHMKKwkgKiAgICAgICAgICAgIGNsYXNzIG9mIHdobyBvd25zIHRoZSBwcm9wZXJ0eSAodXN1YWxseSB0aGUgYmVhbikuIEl0IGlzIHVzZWQgdG8gbG9vayB1cCBnZXQvc2V0IG1ldGhvZHMgZm9yIHRoZSBwcm9wZXJ0eS4KKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUgcHJvcGVydHkuIEl0IHdpbGwgdXNlIGdldHtOYW1lfSBhbmQgc2V0e05hbWV9IHRvIGZpbmQgZ2V0L3NldCBtZXRob2RzLgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBhcmcgcGFpcnMsIFswXSBrZXl3b3JkLCBbMV0gdmFsdWUsIFsyXSBrZXl3b3JkLCBbM10gdmFsdWUsIGV0Yy4KKwkgKiBAcmV0dXJuIG5ldyBwcm9wZXJ0eSBkZXNjcmlwdG9yCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHN0YXRpYyBQcm9wZXJ0eURlc2NyaXB0b3IgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKENsYXNzIGNscywgU3RyaW5nIG5hbWUsIE9iamVjdFtdIGFyZ3MpIHsKKwkJUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIENyZWF0ZSBhc3N1bWluZyB0aGF0IHRoZSBnZXR0ZXIvc2V0dGVyIGZvbGxvd3MgcmVmbGVjdGlvbiBwYXR0ZXJucworCQkJcGQgPSBuZXcgUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGNscyk7CisJCX0gY2F0Y2ggKEludHJvc3BlY3Rpb25FeGNlcHRpb24gZSkgeworCQkJLy8gVHJ5IGNyZWF0aW5nIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgcmVhZC1vbmx5LCB3cml0ZS1vbmx5CisJCQkvLyBvciBpZiBTdW4ncyByZWZsZWN0aW9uIGZhaWxzCisJCQl0cnkgeworCQkJCXBkID0gY3JlYXRlT3RoZXJQcm9wZXJ0eURlc2NyaXB0b3IobmFtZSwgY2xzKTsKKwkJCX0gY2F0Y2ggKEludHJvc3BlY3Rpb25FeGNlcHRpb24gaWUpIHsKKwkJCQl0aHJvd0Vycm9yKGllLCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVTQlVORExFLmdldFN0cmluZygiQ2Fubm90X2NyZWF0ZV90aGVfUDFfRVhDXyIpLCAvLyROT04tTkxTLTEkCisJCQkJCQluZXcgT2JqZWN0W10geyBuYW1lfSkpOworCQkJfQorCQl9CisKKwkJYXBwbHlQcm9wZXJ0eUFyZ3VtZW50cyhwZCwgYXJncywgY2xzKTsKKworCQlyZXR1cm4gcGQ7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgUHJvcGVydHlEZXNjcmlwdG9yIGJhc2VkIHVwb24gdGhlIFBEIHNlbnQgaW4uIEl0IHdpbGwgY2xvbmUgdGhlIHNlbnQgaW4gb25lLCBhbmQgYXBwbHkgdGhlIGFyZ3MgdG8gb3ZlcnJpZGUgYW55IHNwZWNpZmljIHNldHRpbmcuCisJICogQ2xhc3MgY2xzIGlzIHVzZWQgZm9yIGZpbmRpbmcgcmVhZC93cml0ZSBtZXRob2RzLCBpZiBhbnkuCisJICogCisJICogVGhpcyBpcyB1c2VkIHdoZW4gd2FudGluZyB0byBvdmVycmlkZSBvbmx5IGEgZmV3IHNwZWNpZmljIHNldHRpbmdzIGZyb20gYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZyb20gdGhlIHN1cGVyIGNsYXNzLgorCSAqIAorCSAqIEBwYXJhbSBmcm9tUERTCisJICogICAgICAgICAgICBUaGUgUHJvcGVydHlEZXNjcmlwdG9yIGFycmF5IHRvIGZpbmQgdGhlIGVudHJ5IHRvIGNsb25lLiBJdCB3aWxsIGJlIGNoYW5nZWQgaW4gcGxhY2UgaW4gdGhlIGFycmF5LgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZmluZCBhbmQgY2xvbmUgYW5kIG92ZXJyaWRlLgorCSAqIEBwYXJhbSBjbHMKKwkgKiAgICAgICAgICAgIFRoZSBjbGFzcyB0byB1c2UgdG8gZmluZCByZWFkL3dyaXRlIG1ldGhvZHMgaW4gYXJncy4gSWYgbm8gcmVhZC93cml0ZSBtZXRob2RzIHNwZWNpZmllZCwgdGhlbiB0aGlzIG1heSBiZSBudWxsLgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBUaGUgYXJndW1lbnRzIHRvIG92ZXJyaWRlIGZyb20gZnJvbVBELiBhcmcgcGFpcnMsIFswXSBrZXl3b3JkLCBbMV0gdmFsdWUsIFsyXSBrZXl3b3JkLCBbM10gdmFsdWUsIGV0Yy4gb3IgbnVsbCBpZiBub25lIHRvIG92ZXJyaWRlCisJICovCisJcHVibGljIHZvaWQgcmVwbGFjZVByb3BlcnR5RGVzY3JpcHRvcihQcm9wZXJ0eURlc2NyaXB0b3JbXSBwZHMsIFN0cmluZyBuYW1lLCBDbGFzcyBjbHMsIE9iamVjdFtdIGFyZ3MpIHsKKwkJUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gbnVsbDsKKwkJaW50IGlQRCA9IGZpbmRQcm9wZXJ0eURlc2NyaXB0b3IocGRzLCBuYW1lKTsKKwkJaWYgKGlQRCA9PSAtMSkKKwkJCXJldHVybjsKKwkJUHJvcGVydHlEZXNjcmlwdG9yIGZyb21QRCA9IHBkc1tpUERdOworCQl0cnkgeworCisJCQlwZCA9IHBkc1tpUERdID0gbmV3IFByb3BlcnR5RGVzY3JpcHRvcihmcm9tUEQuZ2V0TmFtZSgpLCBudWxsLCBudWxsKTsKKwkJfSBjYXRjaCAoSW50cm9zcGVjdGlvbkV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvd0Vycm9yKGUsIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LmZvcm1hdChSRVNCVU5ETEUuZ2V0U3RyaW5nKCJDYW5ub3RfY3JlYXRlX3RoZV9QMV9FWENfIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJbmV3IE9iamVjdFtdIHsgZnJvbVBELmdldE5hbWUoKX0pKTsKKwkJfQorCisJCS8vIE5vdyBjb3B5IG92ZXIgdGhlIGNvbnRlbnRzIG9mIGZyb21QRC4KKwkJY2xvbmVQcm9wZXJ0eVNldHRpbmdzKGZyb21QRCwgcGQpOworCisJCS8vIE5vdyBhcHBseSB0aGUgb3ZlcnJpZGVzCisJCWFwcGx5UHJvcGVydHlBcmd1bWVudHMocGQsIGFyZ3MsIGNscyk7CisJCXJldHVybjsKKwl9CisKKwlwcml2YXRlIHZvaWQgY2xvbmVQcm9wZXJ0eVNldHRpbmdzKFByb3BlcnR5RGVzY3JpcHRvciBmcm9tUEQsIFByb3BlcnR5RGVzY3JpcHRvciBwZCkgeworCQl0cnkgeworCQkJcGQuc2V0UmVhZE1ldGhvZChmcm9tUEQuZ2V0UmVhZE1ldGhvZCgpKTsKKwkJCXBkLnNldFdyaXRlTWV0aG9kKGZyb21QRC5nZXRXcml0ZU1ldGhvZCgpKTsKKwkJCXBkLnNldFByb3BlcnR5RWRpdG9yQ2xhc3MoZnJvbVBELmdldFByb3BlcnR5RWRpdG9yQ2xhc3MoKSk7CisJCQlwZC5zZXRCb3VuZChmcm9tUEQuaXNCb3VuZCgpKTsKKwkJCXBkLnNldENvbnN0cmFpbmVkKGZyb21QRC5pc0NvbnN0cmFpbmVkKCkpOworCQkJY2xvbmVGZWF0dXJlU2V0dGluZ3MoZnJvbVBELCBwZCk7CisJCX0gY2F0Y2ggKEludHJvc3BlY3Rpb25FeGNlcHRpb24gZSkgeworCQkJdGhyb3dFcnJvcihlLCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVTQlVORExFLmdldFN0cmluZygiQ2Fubm90X2NyZWF0ZV90aGVfUDFfRVhDXyIpLCAvLyROT04tTkxTLTEkCisJCQkJCW5ldyBPYmplY3RbXSB7IGZyb21QRC5nZXROYW1lKCl9KSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgY2xvbmVGZWF0dXJlU2V0dGluZ3MoRmVhdHVyZURlc2NyaXB0b3IgZnJvbUZELCBGZWF0dXJlRGVzY3JpcHRvciBmZCkgeworCQlmZC5zZXRFeHBlcnQoZnJvbUZELmlzRXhwZXJ0KCkpOworCQlmZC5zZXRIaWRkZW4oZnJvbUZELmlzSGlkZGVuKCkpOworCQlmZC5zZXRQcmVmZXJyZWQoZnJvbUZELmlzUHJlZmVycmVkKCkpOworCQlmZC5zZXRTaG9ydERlc2NyaXB0aW9uKGZyb21GRC5nZXRTaG9ydERlc2NyaXB0aW9uKCkpOworCQlmZC5zZXREaXNwbGF5TmFtZShmcm9tRkQuZ2V0RGlzcGxheU5hbWUoKSk7CisKKwkJamF2YS51dGlsLkVudW1lcmF0aW9uIGtleXMgPSBmcm9tRkQuYXR0cmlidXRlTmFtZXMoKTsKKwkJd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7CisJCQlPYmplY3QgdmFsdWUgPSBmcm9tRkQuZ2V0VmFsdWUoa2V5KTsKKwkJCWZkLnNldFZhbHVlKGtleSwgdmFsdWUpOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgY29tbW9uIHByb3BlcnR5IGFyZ3VtZW50cyBiZXR3ZWVuIGZpZWxkIGFuZCBzdGFuZGFyZCBwcm9wZXJ0aWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gYXBwbHlDb21tb25Qcm9wZXJ0eUFyZ3VtZW50cyhQcm9wZXJ0eURlc2NyaXB0b3IgcGQsIFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSkgeworCQlpZiAoQk9VTkQuZXF1YWxzKGtleSkpIHsKKwkJCXBkLnNldEJvdW5kKCgoQm9vbGVhbikgdmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKKwkJfSBlbHNlIGlmIChDT05TVFJBSU5FRC5lcXVhbHMoa2V5KSkgeworCQkJcGQuc2V0Q29uc3RyYWluZWQoKChCb29sZWFuKSB2YWx1ZSkuYm9vbGVhblZhbHVlKCkpOworCQl9IGVsc2UgaWYgKFBST1BFUlRZRURJVE9SQ0xBU1MuZXF1YWxzKGtleSkpIHsKKwkJCXBkLnNldFByb3BlcnR5RWRpdG9yQ2xhc3MoKENsYXNzKSB2YWx1ZSk7CisJCX0gZWxzZSBpZiAoRklFTERQUk9QRVJUWS5lcXVhbHMoa2V5KSkKKwkJCXJldHVybiB0cnVlOwkvLyBUaGlzIHNob3VsZCBub3QgYmUgYXBwbGllZCBleGNlcHQgdGhyb3VnaCBjcmVhdGVGaWVsZFByb3BlcnR5LgorCQllbHNlCisJCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiB0cnVlOworCQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGx5UHJvcGVydHlBcmd1bWVudHMoUHJvcGVydHlEZXNjcmlwdG9yIHBkLCBPYmplY3RbXSBhcmdzLCBDbGFzcyBjbHMpIHsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgeworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAyKSB7CisJCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGFyZ3NbaV07CisJCQkJT2JqZWN0IHZhbHVlID0gYXJnc1tpICsgMV07CisJCQkJCisJCQkJaWYgKCFhcHBseUNvbW1vblByb3BlcnR5QXJndW1lbnRzKHBkLCBrZXksIHZhbHVlKSkgeworCQkJCQlpZiAoUkVBRE1FVEhPRC5lcXVhbHMoa2V5KSkgeworCQkJCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSAoU3RyaW5nKSB2YWx1ZTsKKwkJCQkJCU1ldGhvZCBtZXRob2Q7CisJCQkJCQl0cnkgeworCQkJCQkJCW1ldGhvZCA9IGNscy5nZXRNZXRob2QobWV0aG9kTmFtZSwgbmV3IENsYXNzWzBdKTsKKwkJCQkJCQlwZC5zZXRSZWFkTWV0aG9kKG1ldGhvZCk7CisJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJCXRocm93RXJyb3IoZSwgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFU0JVTkRMRS5nZXRTdHJpbmcoInswfV9ub19yZWFkX21ldGhvZF9FWENfIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCW5ldyBPYmplY3RbXSB7IGNscywgbWV0aG9kTmFtZX0pKTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIGlmIChXUklURU1FVEhPRC5lcXVhbHMoa2V5KSkgeworCQkJCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSAoU3RyaW5nKSB2YWx1ZTsKKwkJCQkJCXRyeSB7CisJCQkJCQkJaWYgKG1ldGhvZE5hbWUgPT0gbnVsbCkgeworCQkJCQkJCQlwZC5zZXRXcml0ZU1ldGhvZChudWxsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlNZXRob2QgbWV0aG9kOworCQkJCQkJCQlDbGFzcyB0eXBlID0gcGQuZ2V0UHJvcGVydHlUeXBlKCk7CisJCQkJCQkJCW1ldGhvZCA9IGNscy5nZXRNZXRob2QobWV0aG9kTmFtZSwgbmV3IENsYXNzW10geyB0eXBlfSk7CisJCQkJCQkJCXBkLnNldFdyaXRlTWV0aG9kKG1ldGhvZCk7CisJCQkJCQkJfQorCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQl0aHJvd0Vycm9yKGUsIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LmZvcm1hdChSRVNCVU5ETEUuZ2V0U3RyaW5nKCJ7MH1fbm9fd3JpdGVfbWV0aG9kX0VYQ18iKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJbmV3IE9iamVjdFtdIHsgY2xzLCBtZXRob2ROYW1lfSkpOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gYXJiaXRyYXJ5IHZhbHVlCisJCQkJCQlzZXRGZWF0dXJlRGVzY3JpcHRvclZhbHVlKHBkLCBrZXksIHZhbHVlKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgYXBwbHlGaWVsZEFyZ3VtZW50cyhQcm9wZXJ0eURlc2NyaXB0b3IgcGQsIE9iamVjdFtdIGFyZ3MpIHsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgeworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAyKSB7CisJCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGFyZ3NbaV07CisJCQkJT2JqZWN0IHZhbHVlID0gYXJnc1tpICsgMV07CisKKwkJCQlpZiAoIWFwcGx5Q29tbW9uUHJvcGVydHlBcmd1bWVudHMocGQsIGtleSwgdmFsdWUpKSB7CisJCQkJCWlmIChSRUFETUVUSE9ELmVxdWFscyhrZXkpKSB7CisJCQkJCQkvLyBpZ25vcmVkIGZvciBmaWVsZC4KKwkJCQkJfSBlbHNlIGlmIChXUklURU1FVEhPRC5lcXVhbHMoa2V5KSkgeworCQkJCQkJLy8gaWdub3JlZCBmb3IgZmllbGQuCisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLyBhcmJpdHJhcnkgdmFsdWUKKwkJCQkJCXNldEZlYXR1cmVEZXNjcmlwdG9yVmFsdWUocGQsIGtleSwgdmFsdWUpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CQkKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBtZXRob2QgYnkgY29tcGFyaW5nIChuYW1lICYgcGFyYW1ldGVyIHNpemUpIGFnYWluc3QgdGhlIG1ldGhvZHMgaW4gdGhlIGNsYXNzLiBUaGlzIGlzIGFuIGV4cGVuc2l2ZSBjYWxsIGFuZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmCisJICogZ2V0TWV0aG9kIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVyIHR5cGVzIGNhbid0IGZpbmQgbWV0aG9kLgorCSAqIAorCSAqIEByZXR1cm4gamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kCisJICogQHBhcmFtIGFDbGFzcworCSAqICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzCisJICogQHBhcmFtIG1ldGhvZE5hbWUKKwkgKiAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcKKwkgKiBAcGFyYW0gcGFyYW1ldGVyQ291bnQKKwkgKiAgICAgICAgICAgIGludAorCSAqLworCXB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGZpbmRNZXRob2QoamF2YS5sYW5nLkNsYXNzIGFDbGFzcywgamF2YS5sYW5nLlN0cmluZyBtZXRob2ROYW1lLCBpbnQgcGFyYW1ldGVyQ291bnQpIHsKKwkJdHJ5IHsKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGlzIG1ldGhvZCBhdHRlbXB0cyB0byBmaW5kIGEgbWV0aG9kIGJ5IGdldHRpbmcgYWxsIG1ldGhvZHMgZnJvbSB0aGUgY2xhc3MsIHRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBnZXRNZXRob2QKKwkJCSAqIGNhbm5vdCBmaW5kIHRoZSBtZXRob2QuCisJCQkgKi8KKwkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2RzW10gPSBhQ2xhc3MuZ2V0TWV0aG9kcygpOworCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZHMubGVuZ3RoOyBpbmRleCsrKSB7CisJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG1ldGhvZCA9IG1ldGhvZHNbaW5kZXhdOworCQkJCWlmICgobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IHBhcmFtZXRlckNvdW50KSAmJiAobWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kTmFtZSkpKSB7IHJldHVybiBtZXRob2Q7IH0KKwkJCQk7CisJCQl9CisJCQk7CisJCX0gY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQk7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEZpbmQgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgZ2l2ZW4gbmFtZSBpbiB0aGUgbGlzdC4KKwkgKiAKKwkgKiBAcGFyYW0gcGRzCisJICogICAgICAgICAgICBUaGUgYXJyYXkgb2YgcHJvcGVydHkgZGVzY3JpcHRvcnMgdG8gc2VhcmNoLCBtYXkgYmUgbnVsbC4KKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlIG5hbWUgdG8gc2VhcmNoIGZvci4KKwkgKiBAcmV0dXJuIFRoZSBmb3VuZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIGluZGV4LCBvciAtMSBpZiBub3QgZm91bmQuCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZmluZFByb3BlcnR5RGVzY3JpcHRvcihQcm9wZXJ0eURlc2NyaXB0b3JbXSBwZHMsIFN0cmluZyBuYW1lKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGRzLmxlbmd0aDsgaSsrKSB7CisJCQlpZiAobmFtZS5lcXVhbHMocGRzW2ldLmdldE5hbWUoKSkpCisJCQkJcmV0dXJuIGk7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIAorCSAqIEBzZWUgamF2YS5iZWFucy5CZWFuSW5mbyNnZXREZWZhdWx0RXZlbnRJbmRleCgpCisJICovCisJcHVibGljIGludCBnZXREZWZhdWx0RXZlbnRJbmRleCgpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIAorCSAqIEBzZWUgamF2YS5iZWFucy5CZWFuSW5mbyNnZXREZWZhdWx0UHJvcGVydHlJbmRleCgpCisJICovCisJcHVibGljIGludCBnZXREZWZhdWx0UHJvcGVydHlJbmRleCgpIHsKKwkJcmV0dXJuIC0xOworCX0KKwkKKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqYXZhLmJlYW5zLlNpbXBsZUJlYW5JbmZvI2dldEJlYW5EZXNjcmlwdG9yKCkKKwkgKi8KKwlwdWJsaWMgQmVhbkRlc2NyaXB0b3IgZ2V0QmVhbkRlc2NyaXB0b3IoKSB7CisJCS8vIERlZmF1bHQgaXMgdG8gY3JlYXRlIGFuIGVtcHR5IG9uZS4KKwkJcmV0dXJuIGNyZWF0ZUJlYW5EZXNjcmlwdG9yKGdldEJlYW5DbGFzcygpLCBFTVBUWV9BUkdTKTsKKwl9CisKKwkvKioKKwkgKiBJbXBsZW1lbnRhdGlvbiBmb3IgQmVhbkluZm8uIFRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCByZXR1cm4gdGhlIEJlYW5JbmZvIG9mIHRoZSBzdXBlcmNsYXNzLgorCSAqIAorCSAqIEBzZWUgQmVhbkluZm8jZ2V0QWRkaXRpb25hbEJlYW5JbmZvKCkKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgQmVhbkluZm9bXSBnZXRBZGRpdGlvbmFsQmVhbkluZm8oKSB7CisJCXRyeSB7CisJCQlCZWFuSW5mb1tdIHJlc3VsdCA9IG5ldyBCZWFuSW5mb1tdIHsgSW50cm9zcGVjdG9yLmdldEJlYW5JbmZvKGdldEJlYW5DbGFzcygpLmdldFN1cGVyY2xhc3MoKSl9OworCQkJUHJvcGVydHlEZXNjcmlwdG9yW10gb1BEcyA9IHJlc3VsdFswXS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCk7CisJCQlQcm9wZXJ0eURlc2NyaXB0b3JbXSBuUERzID0gb3ZlcnJpZGVQcm9wZXJ0eURlc2NyaXB0b3JzKG9QRHMpOworCQkJaWYgKG9QRHMgIT0gblBEcykKKwkJCQlyZXN1bHRbMF0gPSBuZXcgT3ZlcnJpZGVQREJlYW5JbmZvKHJlc3VsdFswXSwgblBEcyk7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9IGNhdGNoIChJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiBuZXcgQmVhbkluZm9bMF07CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBPdmVycmlkZVBEQmVhbkluZm8gaW1wbGVtZW50cyBCZWFuSW5mbyB7CisKKwkJcHJpdmF0ZSBCZWFuSW5mbyBvcmlnaW5hbEJlYW5JbmZvOworCisJCXByaXZhdGUgUHJvcGVydHlEZXNjcmlwdG9yW10gb3ZlcnJpZGVQRHM7CisKKwkJcHVibGljIE92ZXJyaWRlUERCZWFuSW5mbyhCZWFuSW5mbyBiaSwgUHJvcGVydHlEZXNjcmlwdG9yW10gcGRzKSB7CisJCQlvcmlnaW5hbEJlYW5JbmZvID0gYmk7CisJCQlvdmVycmlkZVBEcyA9IHBkczsKKwkJfQorCisJCXB1YmxpYyBCZWFuSW5mb1tdIGdldEFkZGl0aW9uYWxCZWFuSW5mbygpIHsKKwkJCXJldHVybiBvcmlnaW5hbEJlYW5JbmZvLmdldEFkZGl0aW9uYWxCZWFuSW5mbygpOworCQl9CisKKwkJcHVibGljIEJlYW5EZXNjcmlwdG9yIGdldEJlYW5EZXNjcmlwdG9yKCkgeworCQkJcmV0dXJuIG9yaWdpbmFsQmVhbkluZm8uZ2V0QmVhbkRlc2NyaXB0b3IoKTsKKwkJfQorCisJCXB1YmxpYyBpbnQgZ2V0RGVmYXVsdEV2ZW50SW5kZXgoKSB7CisJCQlyZXR1cm4gb3JpZ2luYWxCZWFuSW5mby5nZXREZWZhdWx0RXZlbnRJbmRleCgpOworCQl9CisKKwkJcHVibGljIGludCBnZXREZWZhdWx0UHJvcGVydHlJbmRleCgpIHsKKwkJCXJldHVybiBvcmlnaW5hbEJlYW5JbmZvLmdldERlZmF1bHRQcm9wZXJ0eUluZGV4KCk7CisJCX0KKworCQlwdWJsaWMgRXZlbnRTZXREZXNjcmlwdG9yW10gZ2V0RXZlbnRTZXREZXNjcmlwdG9ycygpIHsKKwkJCXJldHVybiBvcmlnaW5hbEJlYW5JbmZvLmdldEV2ZW50U2V0RGVzY3JpcHRvcnMoKTsKKwkJfQorCisJCXB1YmxpYyBJbWFnZSBnZXRJY29uKGludCBpY29uS2luZCkgeworCQkJcmV0dXJuIG9yaWdpbmFsQmVhbkluZm8uZ2V0SWNvbihpY29uS2luZCk7CisJCX0KKworCQlwdWJsaWMgTWV0aG9kRGVzY3JpcHRvcltdIGdldE1ldGhvZERlc2NyaXB0b3JzKCkgeworCQkJcmV0dXJuIG9yaWdpbmFsQmVhbkluZm8uZ2V0TWV0aG9kRGVzY3JpcHRvcnMoKTsKKwkJfQorCisJCXB1YmxpYyBQcm9wZXJ0eURlc2NyaXB0b3JbXSBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCkgeworCQkJcmV0dXJuIG92ZXJyaWRlUERzOworCQl9CisJfQorCisJLyoqCisJICogQWxsb3cgb3ZlcnJpZGVzIHRvIHBhcmVudCBiZWFuaW5mby4gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSB3aXNoIHRvIG92ZXJyaWRlIGFuZCBjaGFuZ2UgYW55IGluaGVyaXRlZCBwcm9wZXJ0aWVzLiBUaGlzCisJICogYWxsb3dzIHJlbW92YWwgb2YgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3IgY2hhbmdlcyBvZiBzcGVjaWZpYyBwcm9wZXJ0aWVzIChzdWNoIGFzIGNoYW5nZSBmcm9tIGhpZGRlbiB0byBub3QgaGlkZGVuKS4KKwkgKiAKKwkgKiBOb3RlOiBJZiB0aGVyZSBhbnkgY2hhbmdlcywgdGhpcyBtdXN0IHJldHVybiBhIERJRkZFUkVOVCBhcnJheS4gSWYgaXQgcmV0dXJucyB0aGUgc2FtZSBhcnJheSwgdGhlbiB0aGUgY2hhbmdlcyB3aWxsIG5vdCBiZSBhY2NlcHRlZC4gSWYganVzdAorCSAqIG92ZXJyaWRpbmcsIHNob3VsZCB1c2UgcGRzLmNsb25lKCkgdG8gZ2V0IHRoZSBuZXcgYXJyYXkgYW5kIHRoZW4gY2hhbmdlIHRoZSBzcGVjaWZpYyBlbnRyaWVzLgorCSAqIAorCSAqIEBwYXJhbSBwZHMKKwkgKiBAcmV0dXJuIFRoZSBuZXcgY2hhbmdlZCBhcnJheSBvciB0aGUgc2FtZSBhcnJheSBpZiBubyBjaGFuZ2VzLgorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eURlc2NyaXB0b3JbXSBvdmVycmlkZVByb3BlcnR5RGVzY3JpcHRvcnMoUHJvcGVydHlEZXNjcmlwdG9yW10gcGRzKSB7CisJCXJldHVybiBwZHM7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBiZWFuIGNsYXNzIHRoaXMgYmVhbmluZm8gaXMgZm9yLiBVc2VkIGJ5IHN1YmNsYXNzZXMgdG8gcXVpY2tseSBnZXQgdGhlIGJlYW4gY2xhc3Mgd2l0aG91dCBoYXZpbmcgdG8gY29kZSBpdCBvdmVyIGFuZCBvdmVyLgorCSAqIAorCSAqIEByZXR1cm4gYmVhbiBjbGFzcyBmb3IgdGhpcyBiZWFuaW5mby4KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgQ2xhc3MgZ2V0QmVhbkNsYXNzKCk7CisKKwkvKioKKwkgKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIGJlYW4gaW5mb3JtYXRpb24gY2xhc3MgdGhyb3dzIGFuIGV4Y2VwdGlvbi4gQnkgZGVmYXVsdCBpdCBwcmludHMgYSBtZXNzYWdlIGFuZCB0aGVuIGEgc3RhY2t0cmFjZSB0byBzeXMgZXJyLgorCSAqIAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIGphdmEubGFuZy5UaHJvd2FibGUKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlTeXN0ZW0uZXJyLnByaW50bG4oUkVTQlVORExFLmdldFN0cmluZygiVU5DQVVHSFRfRVhDXyIpKTsgLy8kTk9OLU5MUy0xJAorCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRGZWF0dXJlRGVzY3JpcHRvclZhbHVlKEZlYXR1cmVEZXNjcmlwdG9yIGZkLCBTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKKwkJaWYgKERJU1BMQVlOQU1FLmVxdWFscyhrZXkpKSB7CisJCQlmZC5zZXREaXNwbGF5TmFtZSgoU3RyaW5nKSB2YWx1ZSk7CisJCX0gZWxzZSBpZiAoRVhQRVJULmVxdWFscyhrZXkpKSB7CisJCQlmZC5zZXRFeHBlcnQoKChCb29sZWFuKSB2YWx1ZSkuYm9vbGVhblZhbHVlKCkpOworCQl9IGVsc2UgaWYgKEhJRERFTi5lcXVhbHMoa2V5KSkgeworCQkJZmQuc2V0SGlkZGVuKCgoQm9vbGVhbikgdmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKKwkJfSBlbHNlIGlmIChQUkVGRVJSRUQuZXF1YWxzKGtleSkpIHsKKwkJCWZkLnNldFByZWZlcnJlZCgoKEJvb2xlYW4pIHZhbHVlKS5ib29sZWFuVmFsdWUoKSk7CisJCQlpZiAoSlZNXzFfMykgeworCQkJCS8vIEJ1ZyBpbiAxLjMgZG9lc24ndCBwcmVzZXJ2ZSB0aGUgcHJlZmVycmVkIGZsYWcsIHNvIHdlIHdpbGwgcHV0IGl0IGludG8gdGhlIGF0dHJpYnV0ZXMgdG9vLgorCQkJCWZkLnNldFZhbHVlKFBSRUZFUlJFRCwgdmFsdWUpOworCQkJfQorCQl9IGVsc2UgaWYgKFNIT1JUREVTQ1JJUFRJT04uZXF1YWxzKGtleSkpIHsKKwkJCWZkLnNldFNob3J0RGVzY3JpcHRpb24oKFN0cmluZykgdmFsdWUpOworCQl9CisJCS8vIE90aGVyd2lzZSBhc3N1bWUgYW4gYXJiaXRyYXJ5LW5hbWVkIHZhbHVlCisJCS8vIEFzc3VtZSB0aGF0IHRoZSBGZWF0dXJlRGVzY3JpcHRvciBwcml2YXRlIGhhc2hUYWJsZVwKKwkJLy8gY29udGFpbnMgb25seSBhcmJpdHJhcnktbmFtZWQgYXR0cmlidXRlcworCQllbHNlIHsKKwkJCWZkLnNldFZhbHVlKGtleSwgdmFsdWUpOworCQl9CisJfQorCisJLyoqCisJICogRmF0YWwgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QuIEJ5IGRlZmF1bHQgaXQgdGhyb3dzIGFuIEVycm9yIGV4Y2VwdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgZXhjZXB0aW9uIGV4Y2VwdGlvbiBtZXNzYWdlIHBsYWNlZCBpbnRvIHRoZSBuZXcgRXJyb3IgdGhyb3duLgorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICBtZXNzYWdlIGFkZGVkIHRvIGV4Y2VwdGlvbiBtZXNzYWdlLiA8Y29kZT5udWxsPC9jb2RlPiBpZiBub3RoaW5nIHRvIGFkZC4KKwkgKiAKKwkgKiBAdGhyb3dzIEVycm9yCisJICogICAgICAgICAgICAgdHVybnMgZXhjZXB0aW9uIGludG8gYW4gRXJyb3IuCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHRocm93RXJyb3IoRXhjZXB0aW9uIGUsIFN0cmluZyBzKSB7CisJCXRocm93IG5ldyBFcnJvcihlLnRvU3RyaW5nKCkgKyAiICIgKyBzKTsvLyROT04tTkxTLTEkCisJfQorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vdm0vYmFzZWJlYW5pbmZvbmxzLnByb3BlcnRpZXMgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9iZWFuaW5mby92bS9iYXNlYmVhbmluZm9ubHMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJhNWE5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vdm0vYmFzZWJlYW5pbmZvbmxzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgJFNvdXJjZTogL2N2c3Jvb3Qvd2VidG9vbHMvamVldG9vbHMubW92ZS93ZWJ0b29scy5qYXZhZWUuZ2l0L3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2JlYW5pbmZvL3ZtL2Jhc2ViZWFuaW5mb25scy5wcm9wZXJ0aWVzLHYgJAorIyAkUmV2aXNpb246IDEuMSAkICAkRGF0ZTogMjAwOC8xMS8yNiAwNjo0MDoyMSAkCisjCisKKworIworIyBQcm9wZXJ0aWVzIGZvciB0aGUgSXZqQmVhbkluZm8KKyMKKworIworIyBJdmpCZWFuSW5mbyBTdHJpbmdzCisjCitDYW5ub3RfZ2V0X3RoZV9tZXRoMV9FWENfID0gSVdBVjAwMTFFIENhbm5vdCBnZXQgdGhlIG1ldGhvZCB7MH0uCitDYW5ub3RfY3JlYXRlX3RoZV9FMV9FWENfID0gSVdBVjAwMTJFIENhbm5vdCBjcmVhdGUgdGhlIEV2ZW50U2V0RGVzY3JpcHRvciBmb3IgezB9LgorQ2Fubm90X2NyZWF0ZV9NZXRob2RfRVhDXyA9IElXQVYwMDEzRSBDYW5ub3QgY3JlYXRlIHRoZSBNZXRob2REZXNjcmlwdG9yIGZvciB7MH0uCitDYW5ub3RfZmluZF90aGVfYWNjMV9FWENfID0gSVdBVjAwMTRFIENhbm5vdCBmaW5kIGF0IGxlYXN0IHRoZSB3cml0ZSBvciByZWFkIGFjY2Vzc29yIGZvciBwcm9wZXJ0eSB7MH0uCitDYW5ub3RfY3JlYXRlX1BhcmFtMV9FWENfID0gSVdBVjAwMTVFIENhbm5vdCBjcmVhdGUgdGhlIFBhcmFtZXRlckRlc2NyaXB0b3IgZm9yIHswfS4KK0Nhbm5vdF9jcmVhdGVfdGhlX1AxICAgICAgPSBDYW5ub3QgY3JlYXRlIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3IgZm9yIHswfS4KK3swfV9ub19yZWFkX21ldGhvZF9FWENfICAgPSBJV0FWMDAxNkUgQ2xhc3MgezB9IGRvZXNuJyd0IGhhdmUgdGhlIHJlcXVlc3RlZCByZWFkIGFjY2Vzc29yIHsxfS4KK3swfV9ub193cml0ZV9tZXRob2RfRVhDXyAgPSBJV0FWMDAxN0UgQ2xhc3MgezB9IGRvZXNuJyd0IGhhdmUgdGhlIHJlcXVlc3RlZCB3cml0ZSBhY2Nlc3NvciB7MX0uCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9iZWFuaW5mby92bS9iZWFuaW5mby5wcm9wZXJ0aWVzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vdm0vYmVhbmluZm8ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmU4ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vdm0vYmVhbmluZm8ucHJvcGVydGllcwpAQCAtMCwwICsxLDMyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAkU291cmNlOiAvY3Zzcm9vdC93ZWJ0b29scy9qZWV0b29scy5tb3ZlL3dlYnRvb2xzLmphdmFlZS5naXQvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vYmVhbmluZm8vdm0vYmVhbmluZm8ucHJvcGVydGllcyx2ICQKKyMgJFJldmlzaW9uOiAxLjEgJCAgJERhdGU6IDIwMDgvMTEvMjYgMDY6NDA6MjEgJAorIworCisKKyMKKyMgUHJvcGVydGllcyBmb3IgdGhlIFZDRSBCZWFuaW5mbworIworCisjCisjIEl2akJlYW5JbmZvIFN0cmluZ3MKKyMKK0Nhbm5vdF9nZXRfdGhlX21ldGgxX0VYQ18gPSBJV0FWMDAwN0UgQ2Fubm90IGdldCB0aGUgbWV0aG9kIHswfS4KK0Nhbm5vdF9jcmVhdGVfdGhlX0UxX0VYQ18gPSBJV0FWMDAwOEUgQ2Fubm90IGNyZWF0ZSB0aGUgRXZlbnRTZXREZXNjcmlwdG9yIGZvciB7MH0uCitDYW5ub3RfY3JlYXRlX01ldGhvZF9FWENfID0gSVdBVjAwMDlFIENhbm5vdCBjcmVhdGUgdGhlIE1ldGhvZERlc2NyaXB0b3IgZm9yIHswfS4KK0Nhbm5vdF9maW5kX3RoZV9hY2MxX0VYQ18gPSBJV0FWMDAxMEUgQ2Fubm90IGZpbmQgYXQgbGVhc3QgdGhlIHdyaXRlIG9yIHJlYWQgYWNjZXNzb3IgZm9yIHByb3BlcnR5IHswfS4KK0Nhbm5vdF9jcmVhdGVfUGFyYW0xX0VYQ18gPSBJV0FWMDE0NkUgQ2Fubm90IGNyZWF0ZSB0aGUgUGFyYW1ldGVyRGVzY3JpcHRvciBmb3IgezB9LgorQ2Fubm90X2NyZWF0ZV90aGVfUDFfRVhDXyA9IElXQVYwMTQ3RSBDYW5ub3QgY3JlYXRlIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3IgZm9yIHswfS4KK3swfV9ub19yZWFkX21ldGhvZF9FWENfICAgPSBJV0FWMDE0OEUgQ2xhc3MgezB9IGRvZXNuJyd0IGhhdmUgdGhlIHJlcXVlc3RlZCByZWFkIGFjY2Vzc29yIHsxfS4KK3swfV9ub193cml0ZV9tZXRob2RfRVhDXyAgPSBJV0FWMDE0OUUgQ2xhc3MgezB9IGRvZXNuJyd0IGhhdmUgdGhlIHJlcXVlc3RlZCB3cml0ZSBhY2Nlc3NvciB7MX0uCitVTkNBVUdIVF9FWENfICAgICAgICAgICAgID0gSVdBVjAxMjNFIC0tLS0tLS0tLSBVTkNBVUdIVCBFWENFUFRJT04gLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9CZWFuRGVzY3JpcHRvckVxdWFsaXR5LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9CZWFuRGVzY3JpcHRvckVxdWFsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5OWRlMgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL0JlYW5EZXNjcmlwdG9yRXF1YWxpdHkuamF2YQpAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby52bTsKKy8qCisKKworICovCisKK2ltcG9ydCBqYXZhLmJlYW5zLio7CisvKioKKyAqIEVxdWFsaXR5IHRlc3RlciBmb3IgQmVhbkRlc2NyaXB0b3JzCisgKi8KK3B1YmxpYyBjbGFzcyBCZWFuRGVzY3JpcHRvckVxdWFsaXR5IGV4dGVuZHMgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSB7CisJc3RhdGljIHZvaWQgSU5JVCgpIHsKKwkJdHJ5IHsKKwkJCU1BUF9FUVVBTElUWS5wdXQoQmVhbkRlc2NyaXB0b3IuY2xhc3MsIChCZWFuRGVzY3JpcHRvckVxdWFsaXR5LmNsYXNzKS5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7QmVhbkRlc2NyaXB0b3IuY2xhc3N9KSk7CisJCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7CisJCX0KKwl9CisJCisJLyoqCisJICogQ29uc3RydWN0b3IgZm9yIEJlYW5EZXNjcmlwdG9yRXF1YWxpdHkuCisJICovCisJcHVibGljIEJlYW5EZXNjcmlwdG9yRXF1YWxpdHkoKSB7CisJCXN1cGVyKCk7CisJfQorCisKKwlwdWJsaWMgQmVhbkRlc2NyaXB0b3JFcXVhbGl0eShCZWFuRGVzY3JpcHRvciBkZXNjcikgeworCQlzdXBlcihkZXNjcik7CisJfQorCQorCS8qKgorCSAqIENhbGN1bGF0ZSB0aGUgaGFzaGNvZGUgZm9yIHRoZSBjdXJyZW50IGZlYXR1cmUsIGFkZCB0aGlzCisJICogdG8gdGhlIGhhc2hjb2RlIHJlY2VpdmVkIGZyb20gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUKKwkgKiBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUuCisJICoKKwkgKiBOT1RFOiBmb3Igc3ViY2xhc3NlcywgaXQgaXMgTUFORElUT1JZIHRoYXQgdGhlIGZpcnN0IGxpbmUgYmU6CisJICogICAgICAgICBpbnQgaGFzaGNvZGUgPSBzdXBlci5jYWxjdWxhdGVIYXNoQ29kZSgpOworCSAqICAgICAgIGFuZCB0aGUgbGFzdCBsaW5lIGJlOgorCSAqICAgICAgICAgcmV0dXJuIGhhc2hjb2RlKjMxICsgKHlvdXIgY2FsY3VsYXRlZCBoYXNoY29kZSBmb3IganVzdCB0aGlzIHN1YmNsYXNzKTsKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGNhbGN1bGF0ZUhhc2hDb2RlKCkgeworCQlpbnQgaGFzaGNvZGUgPSBzdXBlci5jYWxjdWxhdGVIYXNoQ29kZSgpOworCQlCZWFuRGVzY3JpcHRvciBiZCA9IChCZWFuRGVzY3JpcHRvcikgZkZlYXR1cmU7CisJCWludCBoYyA9IGJkLmdldEJlYW5DbGFzcygpLmhhc2hDb2RlKCk7CisJCWlmIChiZC5nZXRDdXN0b21pemVyQ2xhc3MoKSAhPSBudWxsKQorCQkJaGMgKz0gYmQuZ2V0Q3VzdG9taXplckNsYXNzKCkuaGFzaENvZGUoKTsKKwkJCQorCQlyZXR1cm4gaGFzaGNvZGUqMzEgKyBoYzsKKwl9CisJIAorCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisJCWlmIChpZGVudGl0eVRlc3Qob2JqKSkKKwkJCXJldHVybiB0cnVlOworCQlpZiAoIXN1cGVyLmVxdWFscyhvYmopKQorCQkJcmV0dXJuIGZhbHNlOworIAkKKwkJQmVhbkRlc2NyaXB0b3Igb2IgPSAoQmVhbkRlc2NyaXB0b3IpICgoRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSkgb2JqKS5mRmVhdHVyZTsKKwkJQmVhbkRlc2NyaXB0b3IgZmIgPSAoQmVhbkRlc2NyaXB0b3IpIGZGZWF0dXJlOworIAkJCisJCWlmIChvYi5nZXRCZWFuQ2xhc3MoKSAhPSBmYi5nZXRCZWFuQ2xhc3MoKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKG9iLmdldEN1c3RvbWl6ZXJDbGFzcygpICE9IGZiLmdldEN1c3RvbWl6ZXJDbGFzcygpKQorCQkJcmV0dXJuIGZhbHNlOworIAkJCQorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9FdmVudFNldERlc2NyaXB0b3JFcXVhbGl0eS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vRXZlbnRTZXREZXNjcmlwdG9yRXF1YWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTNhYThhCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vRXZlbnRTZXREZXNjcmlwdG9yRXF1YWxpdHkuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udm07CisvKgorCisKKyAqLworCitpbXBvcnQgamF2YS5iZWFucy4qOworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKKy8qKgorICogRXF1YWxpdHkgdGVzdGVyIGZvciBFdmVudFNldERlc2NyaXB0b3JzCisgKi8KK3B1YmxpYyBjbGFzcyBFdmVudFNldERlc2NyaXB0b3JFcXVhbGl0eSBleHRlbmRzIEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkgeworCQorCXN0YXRpYyB2b2lkIElOSVQoKSB7CisJCXRyeSB7CisJCQlNQVBfRVFVQUxJVFkucHV0KEV2ZW50U2V0RGVzY3JpcHRvci5jbGFzcywgKEV2ZW50U2V0RGVzY3JpcHRvckVxdWFsaXR5LmNsYXNzKS5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7RXZlbnRTZXREZXNjcmlwdG9yLmNsYXNzfSkpOworCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeworCQl9CisJfQorCQorCXByaXZhdGUgQXJyYXlMaXN0IGZMaXN0ZW5lck1ldGhvZERlc2NyaXB0b3JzOwkvLyBBcnJheSBvZiBNZXRob2REZXNjcmlwdG9yRXF1YWxpdHkncy4KKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciBmb3IgRXZlbnRTZXREZXNjcmlwdG9yRXF1YWxpdHkuCisJICovCisJcHVibGljIEV2ZW50U2V0RGVzY3JpcHRvckVxdWFsaXR5KCkgeworCQlzdXBlcigpOworCX0KKworCisJcHVibGljIEV2ZW50U2V0RGVzY3JpcHRvckVxdWFsaXR5KEV2ZW50U2V0RGVzY3JpcHRvciBkZXNjcikgeworCQlzdXBlcihkZXNjcik7CisJfQorCQorCS8qKgorCSAqIEEgbmV3IGZlYXR1cmUgaXMgYmVpbmcgc2V0IGludG8gdGhpcyBvYmplY3QsCisJICogY2xlYXIgYW55IGNhY2hlIG1lbWJlcnMgc28gdGhhdCB0aGV5IGNhbiBiZSByZWNvbnN0cnVjdGVkLgorCSAqCisJICogTk9URTogU3ViY2xhc3NlcyAtIHJlbWVtYmVyIHRvIGNhbGwgc3VwZXIuY2xlYXJGZWF0dXJlKCk7CisJICovCisJcHJvdGVjdGVkIHZvaWQgY2xlYXJGZWF0dXJlKCkgeworCQlzdXBlci5jbGVhckZlYXR1cmUoKTsKKwkJZkxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMgPSBudWxsOworCX0KKwkJCisJcHJvdGVjdGVkIEFycmF5TGlzdCBsaXN0ZW5lck1ldGhvZERlc2NyaXB0b3JzKCkgeworCQlpZiAoZkxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJTWV0aG9kRGVzY3JpcHRvcltdIG1kcyA9ICgoRXZlbnRTZXREZXNjcmlwdG9yKSBmRmVhdHVyZSkuZ2V0TGlzdGVuZXJNZXRob2REZXNjcmlwdG9ycygpOworCQkJZkxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMgPSBuZXcgQXJyYXlMaXN0KG1kcy5sZW5ndGgpOworCQkJZm9yIChpbnQgaT0wOyBpPG1kcy5sZW5ndGg7IGkrKykKKwkJCQlmTGlzdGVuZXJNZXRob2REZXNjcmlwdG9ycy5hZGQobmV3IE1ldGhvZERlc2NyaXB0b3JFcXVhbGl0eShtZHNbaV0pKTsKKwkJfQorCQlyZXR1cm4gZkxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnM7CisJfQkKKwkKKwkvKioKKwkgKiBDYWxjdWxhdGUgdGhlIGhhc2hjb2RlIGZvciB0aGUgY3VycmVudCBmZWF0dXJlLCBhZGQgdGhpcworCSAqIHRvIHRoZSBoYXNoY29kZSByZWNlaXZlZCBmcm9tIHN1cGVyLmNhbGN1bGF0ZUhhc2hDb2RlCisJICogYW5kIHJldHVybiB0aGUgbmV3IHZhbHVlLgorCSAqCisJICogTk9URTogZm9yIHN1YmNsYXNzZXMsIGl0IGlzIE1BTkRJVE9SWSB0aGF0IHRoZSBmaXJzdCBsaW5lIGJlOgorCSAqICAgICAgICAgaW50IGhhc2hjb2RlID0gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUoKTsKKwkgKiAgICAgICBhbmQgdGhlIGxhc3QgbGluZSBiZToKKwkgKiAgICAgICAgIHJldHVybiBoYXNoY29kZSozMSArICh5b3VyIGNhbGN1bGF0ZWQgaGFzaGNvZGUgZm9yIGp1c3QgdGhpcyBzdWJjbGFzcyk7CisJICovCisJcHJvdGVjdGVkIGludCBjYWxjdWxhdGVIYXNoQ29kZSgpIHsKKwkJaW50IGhhc2hjb2RlID0gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUoKTsKKwkJRXZlbnRTZXREZXNjcmlwdG9yIGJkID0gKEV2ZW50U2V0RGVzY3JpcHRvcikgZkZlYXR1cmU7CisJCWludCBoYyA9IGJkLmdldEFkZExpc3RlbmVyTWV0aG9kKCkuaGFzaENvZGUoKTsKKwkJTWV0aG9kW10gbWV0aG9kcyA9IGJkLmdldExpc3RlbmVyTWV0aG9kcygpOworCQlpbnQgbWhjID0gMDsKKwkJZm9yIChpbnQgaT0wOyBpPG1ldGhvZHMubGVuZ3RoOyBpKyspCisJCQltaGMgPSBtaGMqMzEgKyBtZXRob2RzW2ldLmhhc2hDb2RlKCk7CisJCWhjICs9IG1oYzsKKwkJaGMgKz0gbGlzdGVuZXJNZXRob2REZXNjcmlwdG9ycygpLmhhc2hDb2RlKCk7CisJCWhjICs9IGJkLmdldExpc3RlbmVyVHlwZSgpLmhhc2hDb2RlKCk7CisJCWhjICs9IGJkLmdldFJlbW92ZUxpc3RlbmVyTWV0aG9kKCkuaGFzaENvZGUoKTsKKwkJaGMgKz0gKGJkLmlzSW5EZWZhdWx0RXZlbnRTZXQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0UpLmhhc2hDb2RlKCk7CisJCWhjICs9IChiZC5pc1VuaWNhc3QoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0UpLmhhc2hDb2RlKCk7CQkKKworCQlyZXR1cm4gaGFzaGNvZGUqMzEgKyBoYzsKKwl9CisKKwkgCisJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKwkJaWYgKGlkZW50aXR5VGVzdChvYmopKQorCQkJcmV0dXJuIHRydWU7CisJCQkKKwkJaWYgKCFzdXBlci5lcXVhbHMob2JqKSkKKyAJCQlyZXR1cm4gZmFsc2U7CisgCQorCQlFdmVudFNldERlc2NyaXB0b3Igb2UgPSAoRXZlbnRTZXREZXNjcmlwdG9yKSAoKEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkpIG9iaikuZkZlYXR1cmU7CisJCUV2ZW50U2V0RGVzY3JpcHRvciBmZSA9IChFdmVudFNldERlc2NyaXB0b3IpIGZGZWF0dXJlOworCQkKKwkJRXZlbnRTZXREZXNjcmlwdG9yRXF1YWxpdHkgb2VlID0gKEV2ZW50U2V0RGVzY3JpcHRvckVxdWFsaXR5KSBvYmo7CisgCQkKKwkJaWYgKCFvZS5nZXRBZGRMaXN0ZW5lck1ldGhvZCgpLmVxdWFscyhmZS5nZXRBZGRMaXN0ZW5lck1ldGhvZCgpKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFqYXZhLnV0aWwuQXJyYXlzLmVxdWFscyhvZS5nZXRMaXN0ZW5lck1ldGhvZHMoKSwgZmUuZ2V0TGlzdGVuZXJNZXRob2RzKCkpKQorCQkJcmV0dXJuIGZhbHNlOwkKKwkJaWYgKG9lLmdldExpc3RlbmVyVHlwZSgpICE9IGZlLmdldExpc3RlbmVyVHlwZSgpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAob2UuZ2V0UmVtb3ZlTGlzdGVuZXJNZXRob2QoKSAhPSBmZS5nZXRSZW1vdmVMaXN0ZW5lck1ldGhvZCgpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAob2UuaXNJbkRlZmF1bHRFdmVudFNldCgpICE9IGZlLmlzSW5EZWZhdWx0RXZlbnRTZXQoKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKG9lLmlzVW5pY2FzdCgpICE9IG9lLmlzVW5pY2FzdCgpKQorCQkJcmV0dXJuIGZhbHNlOworCQkKKwkJaWYgKGZMaXN0ZW5lck1ldGhvZERlc2NyaXB0b3JzICE9IG51bGwgfHwgb2VlLmZMaXN0ZW5lck1ldGhvZERlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCS8vIFdlIGFyZSBpbiBhIE1hcCBsb29rdXAgc2l0dWF0aW9uLCBzbyBvbmUgc2lkZSBoYXMgbGlzdGVuZXIgbWV0aG9kIGVxdWFsaXRpZXMsIHNvIHdlIHdpbGwgY29tcGFyZSB0aGF0IHdheS4KKwkJCWlmICghb2VlLmxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMoKS5lcXVhbHMobGlzdGVuZXJNZXRob2REZXNjcmlwdG9ycygpKSkJCQkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSB7CisJCQkvLyBXZSBhcmUgaW4gdGhlIGJ1aWxkaW5nIHRoZSBsaXN0IHBoYXNlcywgZG9uJ3Qgd2FzdGUgc3BhY2UgYnVpbGRpbmcgZW50aXJlIGxpc3QuCisJCQlNZXRob2REZXNjcmlwdG9yW10gb3VycyA9IGZlLmdldExpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMoKTsKKwkJCU1ldGhvZERlc2NyaXB0b3JbXSB0aGVpcnMgPSBvZS5nZXRMaXN0ZW5lck1ldGhvZERlc2NyaXB0b3JzKCk7CisJCQlpZiAob3Vycy5sZW5ndGggIT0gdGhlaXJzLmxlbmd0aCkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAob3Vycy5sZW5ndGggPiAwKSB7CisJCQkJTWV0aG9kRGVzY3JpcHRvckVxdWFsaXR5IHdvcmtpbmdPdXJzID0gbmV3IE1ldGhvZERlc2NyaXB0b3JFcXVhbGl0eSgpOworCQkJCU1ldGhvZERlc2NyaXB0b3JFcXVhbGl0eSB3b3JraW5nVGhpZXJzID0gbmV3IE1ldGhvZERlc2NyaXB0b3JFcXVhbGl0eSgpOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgb3Vycy5sZW5ndGg7IGkrKykgeworCQkJCQl3b3JraW5nT3Vycy5zZXRGZWF0dXJlKG91cnNbaV0pOworCQkJCQl3b3JraW5nVGhpZXJzLnNldEZlYXR1cmUodGhlaXJzW2ldKTsKKwkJCQkJaWYgKCF3b3JraW5nT3Vycy5lcXVhbHMod29ya2luZ1RoaWVycykpCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQkJCQorCQl9CisJCQkKKwkJcmV0dXJuIHRydWU7CQkJCisJfQorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ODgzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9GZWF0dXJlRGVzY3JpcHRvckVxdWFsaXR5LmphdmEKQEAgLTAsMCArMSwyMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnZtOworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYmVhbnMuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOworLyoqCisgKiBUaGlzIG9iamVjdCBpcyB1c2VkIHRvIHRlc3QgZm9yIHNlbWFudGljIGVxdWFsaXR5IChlcXVhbHMoKSkKKyAqIGJldHdlZW4gZmVhdHVyZSBvYmplY3RzLiBJdCBpcyBuZWVkZWQgYmVjYXVzZSBGZWF0dXJlJ3MgZG9uJ3QKKyAqIHByb3ZpZGUgYSBzZW1hbnRpYyBlcXVhbGl0eSwgb25seSBhbiBpZGVudGl0eSBlcXVhbGl0eS4gTmVlZAorICogc2VtYW50aWMgZXF1YWxpdHkgc28gdGhhdCBrZXlzIGluIG1hcCBjYW4gYmUgZm91bmQgZXF1YWwKKyAqIHNlbWFudGljYWxseS4KKyAqLworCitwdWJsaWMgY2xhc3MgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSB7CisJcHJvdGVjdGVkIEZlYXR1cmVEZXNjcmlwdG9yIGZGZWF0dXJlOworCQorCXByaXZhdGUgSGFzaE1hcCBmVmFsdWVzOwkvLyBUaGUga2V5L3ZhbHVlcyBmb3IgdGhpcyBmZWF0dXJlLiBXZSBncmFiIHRoZW0gb3V0CisJCQkJCQkJCS8vIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHJlLWdldHRpbmcgdGhlbSBmb3IgZXF1YWxpdHkKKwkJCQkJCQkJLy8gY29tcGFyZXMuIFRoaXMgaXMgZG9uZSB0aGUgZmlyc3QgdGltZSBuZWVkZWQgaW4gdGhlIGVxdWFscworCQkJCQkJCQkvLyBzdGF0ZW1lbnQuCisJCQkJCQkJCQorCXByaXZhdGUgaW50IGZIYXNoQ29kZSA9IDA7CS8vIEhhc2hjb2RlIG9mIHRoaXMgZXF1YWxpdHkgb2JqZWN0LiBUaGUgaGFzaGNvZGUgZm9yIHRoZSBmZWF0dXJlIGlzIGV4cGVuc2l2ZQorCQkJCQkvLyBzbyB3ZSB3aWxsIGNhbGN1bGF0ZSBpdCBvbmNlICh0aGUgYXNzdW1wdGlvbiBpcyB0aGF0CisJCQkJCS8vIGZlYXR1cmVzIG9uY2UgY3JlYXRlZCBhcmVuJ3QgY2hhbmdlZCwgd2hpY2ggZm9yIG91cgorCQkJCQkvLyBwdXJwb3NlcyBoZXJlIGluIGJlYW5pbmZvIGxhbmQgaXMgZ29vZCkuCisJCQorCXByb3RlY3RlZCBzdGF0aWMgSGFzaE1hcCBNQVBfRVFVQUxJVFkgPSBuZXcgSGFzaE1hcCgxMCk7CS8vIE1hcCBmcm9tIGRlc2NyaXB0b3IgdG8gZXF1YWxpdHkgdHlwZS4KKwlzdGF0aWMgeworCQl0cnkgeworCQkJTUFQX0VRVUFMSVRZLnB1dChGZWF0dXJlRGVzY3JpcHRvci5jbGFzcywgKEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkuY2xhc3MpLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1tdIHtGZWF0dXJlRGVzY3JpcHRvci5jbGFzc30pKTsKKwkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKKwkJfQorCQkvLyBOZWVkIHRvIHNldCB1cCB0aGUgb3RoZXJzLgorCQlCZWFuRGVzY3JpcHRvckVxdWFsaXR5LklOSVQoKTsKKwkJRXZlbnRTZXREZXNjcmlwdG9yRXF1YWxpdHkuSU5JVCgpOwkJCisJCUluZGV4ZWRQcm9wZXJ0eURlc2NyaXB0b3JFcXVhbGl0eS5JTklUKCk7CisJCU1ldGhvZERlc2NyaXB0b3JFcXVhbGl0eS5JTklUKCk7CQkKKwkJUGFyYW1ldGVyRGVzY3JpcHRvckVxdWFsaXR5LklOSVQoKTsKKwl9CisJCQkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGRlc2NyaXB0b3IgZXF1YWxpdHkgZm9yIHRoaXMgb2JqZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSBjcmVhdGVFcXVhbGl0eShGZWF0dXJlRGVzY3JpcHRvciBkZXNjcikgeworCQl0cnkgeworCQkJcmV0dXJuIChGZWF0dXJlRGVzY3JpcHRvckVxdWFsaXR5KSAoKENvbnN0cnVjdG9yKSBNQVBfRVFVQUxJVFkuZ2V0KGRlc2NyLmdldENsYXNzKCkpKS5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W10ge2Rlc2NyfSk7CisJCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgeworCQl9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKKwkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXJldHVybiBudWxsOworCX0KKwkJCisJcHVibGljIEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkoKSB7CisJfQorCQorCS8qKgorCSAqIE5PVEU6IEV2ZXJ5IHN1YmNsYXNzIG5lZWRzIHRvIGltcGxlbWVudCBhbiBvdmVycmlkZSBmb3IgdGhlIG1ldGhvZHM6CisJICogICAgICAgY2FsY3VsYXRlSGFzaENvZGUKKwkgKiAgICAgICBlcXVhbHMKKwkgKiAgICAgICBjbGVhckZlYXR1cmUgLSBpZiBpdCBoYXMgYW55IGNhY2hlIHZhbHVlcworCSAqLworCQkJCQkKKwlwdWJsaWMgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eShGZWF0dXJlRGVzY3JpcHRvciBmZWF0dXJlKSB7CisJCXNldEZlYXR1cmUoZmVhdHVyZSk7CisJfQorCQorCXB1YmxpYyBmaW5hbCB2b2lkIHNldEZlYXR1cmUoRmVhdHVyZURlc2NyaXB0b3IgZmVhdHVyZSkgeworCQljbGVhckZlYXR1cmUoKTsKKwkJZkZlYXR1cmUgPSBmZWF0dXJlOworCX0KKwkKKwkvKioKKwkgKiBBIG5ldyBmZWF0dXJlIGlzIGJlaW5nIHNldCBpbnRvIHRoaXMgb2JqZWN0LAorCSAqIGNsZWFyIGFueSBjYWNoZSBtZW1iZXJzIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVjb25zdHJ1Y3RlZC4KKwkgKgorCSAqIE5PVEU6IFN1YmNsYXNzZXMgLSByZW1lbWJlciB0byBjYWxsIHN1cGVyLmNsZWFyRmVhdHVyZSgpOworCSAqLworCXByb3RlY3RlZCB2b2lkIGNsZWFyRmVhdHVyZSgpIHsKKwkJZlZhbHVlcyA9IG51bGw7CisJCWZIYXNoQ29kZSA9IDA7CisJfQorCQorCXB1YmxpYyBmaW5hbCBpbnQgaGFzaENvZGUoKSB7CisJCWlmIChmSGFzaENvZGUgPT0gMCkKKwkJCWZIYXNoQ29kZSA9IGNhbGN1bGF0ZUhhc2hDb2RlKCk7CisJCXJldHVybiBmSGFzaENvZGU7CisJfQorCisJcHJvdGVjdGVkIGZpbmFsIEhhc2hNYXAgdmFsdWVzKCkgeworCQlpZiAoZlZhbHVlcyA9PSBudWxsKSB7CisJCQlmVmFsdWVzID0gbmV3IEhhc2hNYXAoNSk7CisJCQkKKwkJCUVudW1lcmF0aW9uIGtleXMgPSBmRmVhdHVyZS5hdHRyaWJ1dGVOYW1lcygpOworCQkJd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykga2V5cy5uZXh0RWxlbWVudCgpOworCQkJCWZWYWx1ZXMucHV0KGtleSwgZkZlYXR1cmUuZ2V0VmFsdWUoa2V5KSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZWYWx1ZXM7CisJfQorCQorCS8qKgorCSAqIENhbGN1bGF0ZSB0aGUgaGFzaGNvZGUgZm9yIHRoZSBjdXJyZW50IGZlYXR1cmUsIGFkZCB0aGlzCisJICogdG8gdGhlIGhhc2hjb2RlIHJlY2VpdmVkIGZyb20gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUKKwkgKiBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUuCisJICoKKwkgKiBOT1RFOiBmb3Igc3ViY2xhc3NlcywgaXQgaXMgTUFORElUT1JZIHRoYXQgdGhlIGZpcnN0IGxpbmUgYmU6CisJICogICAgICAgICBpbnQgaGFzaGNvZGUgPSBzdXBlci5jYWxjdWxhdGVIYXNoQ29kZSgpOworCSAqICAgICAgIGFuZCB0aGUgbGFzdCBsaW5lIGJlOgorCSAqICAgICAgICAgcmV0dXJuIGhhc2hjb2RlKjMxICsgKHlvdXIgY2FsY3VsYXRlZCBoYXNoY29kZSBmb3IganVzdCB0aGlzIHN1YmNsYXNzKTsKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGNhbGN1bGF0ZUhhc2hDb2RlKCkgeworCQlpbnQgaGFzaGNvZGUgPSAwOworCQlpZiAoZkZlYXR1cmUuZ2V0TmFtZSgpICE9IG51bGwpCisJCQloYXNoY29kZSArPSBmRmVhdHVyZS5nZXROYW1lKCkuaGFzaENvZGUoKTsKKwkJCQorCQlpZiAoZkZlYXR1cmUuZ2V0RGlzcGxheU5hbWUoKSAhPSBmRmVhdHVyZS5nZXROYW1lKCkpCisJCQloYXNoY29kZSArPSBmRmVhdHVyZS5nZXREaXNwbGF5TmFtZSgpLmhhc2hDb2RlKCk7CisJCWlmIChmRmVhdHVyZS5nZXRTaG9ydERlc2NyaXB0aW9uKCkgIT0gZkZlYXR1cmUuZ2V0RGlzcGxheU5hbWUoKSkKKwkJCWhhc2hjb2RlICs9IGZGZWF0dXJlLmdldFNob3J0RGVzY3JpcHRpb24oKS5oYXNoQ29kZSgpOwkJCQorCQkJCisJCWhhc2hjb2RlICs9IChmRmVhdHVyZS5pc0V4cGVydCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRSkuaGFzaENvZGUoKTsKKwkJaGFzaGNvZGUgKz0gKGZGZWF0dXJlLmlzSGlkZGVuKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFKS5oYXNoQ29kZSgpOwkJCisJCWhhc2hjb2RlICs9IChmRmVhdHVyZS5pc1ByZWZlcnJlZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRSkuaGFzaENvZGUoKTsKKwkJCisJCWhhc2hjb2RlICs9IHZhbHVlcygpLmhhc2hDb2RlKCk7CisJCXJldHVybiBoYXNoY29kZTsKKwl9CisJCisJLyoqCisJICogZXF1YWxzOiBTZWUgaWYgdGhpcyBpcyBlcXVhbCBzZW1hbnRpY2FsbHkuCisJICoKKwkgKiBOT1RFOiBFdmVyeSBzdWJjbGFzcyBuZWVkcyB0byBpbXBsZW1lbnQgdGhpcyBhbmQKKwkgKiAgICAgICB0aGUgZmlyc3QgZmV3IGxpbmVzIHNob3VsZCBiZToKKwkgKiAgICAgICAgIGlmIChpZGVudGl0eVRlc3QoKSkKKwkgKiAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICogICAgICAgICBpZiAoIXN1cGVyLmVxdWFscyhvYmopKQorCSAqICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICovCisJIAorCSBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworCQlpZiAoaWRlbnRpdHlUZXN0KG9iaikpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJaWYgKCEob2JqIGluc3RhbmNlb2YgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCQkKKwkJRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSBvZmUgPSAoRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSkgb2JqOwkgCQkKKwkgCUZlYXR1cmVEZXNjcmlwdG9yIG9mID0gb2ZlLmZGZWF0dXJlOworCSAJCQorCSAJaWYgKGZGZWF0dXJlLmdldENsYXNzKCkgIT0gb2YuZ2V0Q2xhc3MoKSkKKwkgCQlyZXR1cm4gZmFsc2U7CisJIAkJCisJIAlpZiAoIWZGZWF0dXJlLmdldE5hbWUoKS5lcXVhbHMob2YuZ2V0TmFtZSgpKSkKKwkgCQlyZXR1cm4gZmFsc2U7CisJIAlpZiAoIWZGZWF0dXJlLmdldERpc3BsYXlOYW1lKCkuZXF1YWxzKG9mLmdldERpc3BsYXlOYW1lKCkpKQorCSAJCXJldHVybiBmYWxzZTsKKwkgCWlmICghZkZlYXR1cmUuZ2V0U2hvcnREZXNjcmlwdGlvbigpLmVxdWFscyhvZi5nZXRTaG9ydERlc2NyaXB0aW9uKCkpKQorCSAJCXJldHVybiBmYWxzZTsJIAorCSAJaWYgKGZGZWF0dXJlLmlzRXhwZXJ0KCkgIT0gb2YuaXNFeHBlcnQoKSB8fAorCQkgCQlmRmVhdHVyZS5pc0hpZGRlbigpICE9IG9mLmlzSGlkZGVuKCkgfHwKKwkJIAkJZkZlYXR1cmUuaXNQcmVmZXJyZWQoKSAhPSBvZi5pc1ByZWZlcnJlZCgpKQorCSAJCXJldHVybiBmYWxzZTsKKwkgCQorCQlpZiAoIXZhbHVlcygpLmVxdWFscyhvZmUudmFsdWVzKCkpKQorCQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwkgfQorCSAKKwkgLyoKKwkgICogSWRlbnRpdHkgdGVzdDogVGVzdHMgZm9yIHF1aWNrIGlkZW50aXR5IG9mCisJICAqIGRlc2NyaXB0b3JzLiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlbiAKKwkgICogbm8gb3RoZXIgdGVzdHMgcmVxdWlyZWQuCisJICAqLworCSBwcm90ZWN0ZWQgYm9vbGVhbiBpZGVudGl0eVRlc3QoT2JqZWN0IG9iaikgeworCSAJaWYgKCEob2JqIGluc3RhbmNlb2YgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSkpCisJIAkJcmV0dXJuIGZhbHNlOworCSAJaWYgKHRoaXMgPT0gb2JqKQorCSAJCXJldHVybiB0cnVlOworCisJIAlpZiAoKChGZWF0dXJlRGVzY3JpcHRvckVxdWFsaXR5KSBvYmopLmZGZWF0dXJlID09IGZGZWF0dXJlKQorCSAJCXJldHVybiB0cnVlOworCSAJCQorCSAJcmV0dXJuIGZhbHNlOwkgCQorCSB9CQorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9JbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yRXF1YWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEwMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5LmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udm07CisvKgorCisKKyAqLworCitpbXBvcnQgamF2YS5iZWFucy4qOworLyoqCisgKiBJbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yIGVxdWFsaXR5IHRlc3RlcgorICovCitwdWJsaWMgY2xhc3MgSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5IGV4dGVuZHMgUHJvcGVydHlEZXNjcmlwdG9yRXF1YWxpdHkgeworCisJc3RhdGljIHZvaWQgSU5JVCgpIHsKKwkJdHJ5IHsKKwkJCU1BUF9FUVVBTElUWS5wdXQoSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvci5jbGFzcywgKEluZGV4ZWRQcm9wZXJ0eURlc2NyaXB0b3JFcXVhbGl0eS5jbGFzcykuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzW10ge1Byb3BlcnR5RGVzY3JpcHRvci5jbGFzc30pKTsKKwkJCU1BUF9FUVVBTElUWS5wdXQoUHJvcGVydHlEZXNjcmlwdG9yLmNsYXNzLCAoSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5LmNsYXNzKS5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7UHJvcGVydHlEZXNjcmlwdG9yLmNsYXNzfSkpOworCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeworCQl9CisJfQkKKwkKKwlwdWJsaWMgSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5KCkgeworCX0KKwkKKwlwdWJsaWMgSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5KFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcikgeworCQlzdXBlcihkZXNjcik7CisJfQkKKwkvKioKKwkgKiBDYWxjdWxhdGUgdGhlIGhhc2hjb2RlIGZvciB0aGUgY3VycmVudCBmZWF0dXJlLCBhZGQgdGhpcworCSAqIHRvIHRoZSBoYXNoY29kZSByZWNlaXZlZCBmcm9tIHN1cGVyLmNhbGN1bGF0ZUhhc2hDb2RlCisJICogYW5kIHJldHVybiB0aGUgbmV3IHZhbHVlLgorCSAqCisJICogTk9URTogZm9yIHN1YmNsYXNzZXMsIGl0IGlzIE1BTkRJVE9SWSB0aGF0IHRoZSBmaXJzdCBsaW5lIGJlOgorCSAqICAgICAgICAgaW50IGhhc2hjb2RlID0gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUoKTsKKwkgKiAgICAgICBhbmQgdGhlIGxhc3QgbGluZSBiZToKKwkgKiAgICAgICAgIHJldHVybiBoYXNoY29kZSozMSArICh5b3VyIGNhbGN1bGF0ZWQgaGFzaGNvZGUgZm9yIGp1c3QgdGhpcyBzdWJjbGFzcyk7CisJICovCisJcHJvdGVjdGVkIGludCBjYWxjdWxhdGVIYXNoQ29kZSgpIHsKKwkJaW50IGhhc2hjb2RlID0gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUoKTsKKwkJaWYgKGZGZWF0dXJlIGluc3RhbmNlb2YgSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvcikgeworCQkJSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvciBwZCA9IChJbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yKSBmRmVhdHVyZTsKKwkJCQorCQkJaW50IGhjID0gcGQuZ2V0SW5kZXhlZFByb3BlcnR5VHlwZSgpLmhhc2hDb2RlKCk7CisJCisJCQlpZiAocGQuZ2V0SW5kZXhlZFJlYWRNZXRob2QoKSAhPSBudWxsKQorCQkJCWhjICs9IHBkLmdldEluZGV4ZWRSZWFkTWV0aG9kKCkuaGFzaENvZGUoKTsKKwkJCWlmIChwZC5nZXRJbmRleGVkV3JpdGVNZXRob2QoKSAhPSBudWxsKQorCQkJCWhjICs9IHBkLmdldEluZGV4ZWRXcml0ZU1ldGhvZCgpLmhhc2hDb2RlKCk7CisJCQlyZXR1cm4gaGFzaGNvZGUqMzEgKyBoYzsKKwkJfSBlbHNlCisJCQlyZXR1cm4gaGFzaGNvZGU7CisJfQorCisJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKwkJaWYgKCEob2JqIGluc3RhbmNlb2YgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmIChpZGVudGl0eVRlc3Qob2JqKSkKKwkJCXJldHVybiB0cnVlOworCQlpZiAoZkZlYXR1cmUuZ2V0Q2xhc3MoKSAhPSAoKEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkpIG9iaikuZkZlYXR1cmUuZ2V0Q2xhc3MoKSkKKwkJCXJldHVybiBmYWxzZTsJLy8gSWYgdGhleSBhcmVuJ3QgYm90aCBQcm9wZXJ0eURlc2NpcHRvcnMgb3IgSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvcnMsIHRoZW4gdGhleSBkb24ndCBtYXRjaC4KKwkJaWYgKCFzdXBlci5lcXVhbHMob2JqKSkKKwkJCXJldHVybiBmYWxzZTsKKyAJCisJCWlmIChmRmVhdHVyZSBpbnN0YW5jZW9mIEluZGV4ZWRQcm9wZXJ0eURlc2NyaXB0b3IpIHsKKwkJCUluZGV4ZWRQcm9wZXJ0eURlc2NyaXB0b3Igb3AgPSAoSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvcikgKChGZWF0dXJlRGVzY3JpcHRvckVxdWFsaXR5KSBvYmopLmZGZWF0dXJlOworCQkJSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvciBmcCA9IChJbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yKSBmRmVhdHVyZTsKKworCQkJaWYgKG9wLmdldEluZGV4ZWRQcm9wZXJ0eVR5cGUoKSAhPSBmcC5nZXRJbmRleGVkUHJvcGVydHlUeXBlKCkpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJaWYgKG9wLmdldEluZGV4ZWRSZWFkTWV0aG9kKCkgIT0gZnAuZ2V0SW5kZXhlZFJlYWRNZXRob2QoKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAob3AuZ2V0SW5kZXhlZFdyaXRlTWV0aG9kKCkgIT0gZnAuZ2V0SW5kZXhlZFdyaXRlTWV0aG9kKCkpCisJCQkJcmV0dXJuIGZhbHNlOyAKKwkJfQkJCQkJCQkJCQkJCQkKKwkJCQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKworCQorCit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9NZXRob2REZXNjcmlwdG9yRXF1YWxpdHkuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01ldGhvZERlc2NyaXB0b3JFcXVhbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjE1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9NZXRob2REZXNjcmlwdG9yRXF1YWxpdHkuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udm07CisvKgorCisKKyAqLworCitpbXBvcnQgamF2YS5iZWFucy4qOworaW1wb3J0IGphdmEudXRpbC4qOworLyoqCisgKiBFcXVhbGl0eSB0ZXN0ZXIgZm9yIE1ldGhvZERlc2NyaXB0b3JzCisgKi8KK3B1YmxpYyBjbGFzcyBNZXRob2REZXNjcmlwdG9yRXF1YWxpdHkgZXh0ZW5kcyBGZWF0dXJlRGVzY3JpcHRvckVxdWFsaXR5IHsKKwkKKwlzdGF0aWMgdm9pZCBJTklUKCkgeworCQl0cnkgeworCQkJTUFQX0VRVUFMSVRZLnB1dChNZXRob2REZXNjcmlwdG9yLmNsYXNzLCAoTWV0aG9kRGVzY3JpcHRvckVxdWFsaXR5LmNsYXNzKS5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7TWV0aG9kRGVzY3JpcHRvci5jbGFzc30pKTsKKwkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKKwkJfQorCX0JCisJCisJcHJpdmF0ZSBBcnJheUxpc3QgZlBhcmFtZXRlckRlc2NyaXB0b3JzOwkvLyBBcnJheSBvZiBQYXJhbWV0ZXJEZXNjcmlwdG9yRXF1YWxpdHkncy4KKwkKKwlwdWJsaWMgTWV0aG9kRGVzY3JpcHRvckVxdWFsaXR5KCkgeworCX0KKwkKKwlwdWJsaWMgTWV0aG9kRGVzY3JpcHRvckVxdWFsaXR5KE1ldGhvZERlc2NyaXB0b3IgZGVzY3IpIHsKKwkJc3VwZXIoZGVzY3IpOworCX0KKwkKKwkvKioKKwkgKiBBIG5ldyBmZWF0dXJlIGlzIGJlaW5nIHNldCBpbnRvIHRoaXMgb2JqZWN0LAorCSAqIGNsZWFyIGFueSBjYWNoZSBtZW1iZXJzIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVjb25zdHJ1Y3RlZC4KKwkgKgorCSAqIE5PVEU6IFN1YmNsYXNzZXMgLSByZW1lbWJlciB0byBjYWxsIHN1cGVyLmNsZWFyRmVhdHVyZSgpOworCSAqLworCXByb3RlY3RlZCB2b2lkIGNsZWFyRmVhdHVyZSgpIHsKKwkJc3VwZXIuY2xlYXJGZWF0dXJlKCk7CisJCWZQYXJhbWV0ZXJEZXNjcmlwdG9ycyA9IG51bGw7CisJfQkKKwkKKwlwcm90ZWN0ZWQgQXJyYXlMaXN0IHBhcmFtZXRlckRlc2NyaXB0b3JzKCkgeworCQlpZiAoZlBhcmFtZXRlckRlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCVBhcmFtZXRlckRlc2NyaXB0b3JbXSBwZHMgPSAoKE1ldGhvZERlc2NyaXB0b3IpIGZGZWF0dXJlKS5nZXRQYXJhbWV0ZXJEZXNjcmlwdG9ycygpOworCQkJaWYgKHBkcyAhPSBudWxsKSB7CQkJCisJCQkJZlBhcmFtZXRlckRlc2NyaXB0b3JzID0gbmV3IEFycmF5TGlzdChwZHMubGVuZ3RoKTsKKwkJCQlmb3IgKGludCBpPTA7IGk8cGRzLmxlbmd0aDsgaSsrKQorCQkJCQlmUGFyYW1ldGVyRGVzY3JpcHRvcnMuYWRkKG5ldyBQYXJhbWV0ZXJEZXNjcmlwdG9yRXF1YWxpdHkocGRzW2ldKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZQYXJhbWV0ZXJEZXNjcmlwdG9yczsKKwl9CisJLyoqCisJICogQ2FsY3VsYXRlIHRoZSBoYXNoY29kZSBmb3IgdGhlIGN1cnJlbnQgZmVhdHVyZSwgYWRkIHRoaXMKKwkgKiB0byB0aGUgaGFzaGNvZGUgcmVjZWl2ZWQgZnJvbSBzdXBlci5jYWxjdWxhdGVIYXNoQ29kZQorCSAqIGFuZCByZXR1cm4gdGhlIG5ldyB2YWx1ZS4KKwkgKgorCSAqIE5PVEU6IGZvciBzdWJjbGFzc2VzLCBpdCBpcyBNQU5ESVRPUlkgdGhhdCB0aGUgZmlyc3QgbGluZSBiZToKKwkgKiAgICAgICAgIGludCBoYXNoY29kZSA9IHN1cGVyLmNhbGN1bGF0ZUhhc2hDb2RlKCk7CisJICogICAgICAgYW5kIHRoZSBsYXN0IGxpbmUgYmU6CisJICogICAgICAgICByZXR1cm4gaGFzaGNvZGUqMzEgKyAoeW91ciBjYWxjdWxhdGVkIGhhc2hjb2RlIGZvciBqdXN0IHRoaXMgc3ViY2xhc3MpOworCSAqLworCXByb3RlY3RlZCBpbnQgY2FsY3VsYXRlSGFzaENvZGUoKSB7CisJCWludCBoYXNoY29kZSA9IHN1cGVyLmNhbGN1bGF0ZUhhc2hDb2RlKCk7CisJCU1ldGhvZERlc2NyaXB0b3IgYmQgPSAoTWV0aG9kRGVzY3JpcHRvcikgZkZlYXR1cmU7CisJCWludCBoYyA9IGJkLmdldE1ldGhvZCgpLmhhc2hDb2RlKCk7CisJCWlmIChwYXJhbWV0ZXJEZXNjcmlwdG9ycygpICE9IG51bGwpCisJCQloYyArPSBwYXJhbWV0ZXJEZXNjcmlwdG9ycygpLmhhc2hDb2RlKCk7IAorCisJCXJldHVybiBoYXNoY29kZSozMSArIGhjOworCX0KKworCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisJCWlmIChpZGVudGl0eVRlc3Qob2JqKSkKKwkJCXJldHVybiB0cnVlOworCQkJCisJCWlmICghc3VwZXIuZXF1YWxzKG9iaikpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJTWV0aG9kRGVzY3JpcHRvckVxdWFsaXR5IG9lbSA9IChNZXRob2REZXNjcmlwdG9yRXF1YWxpdHkpIG9iajsKKwkJTWV0aG9kRGVzY3JpcHRvciBvbSA9IChNZXRob2REZXNjcmlwdG9yKSBvZW0uZkZlYXR1cmU7CisJCU1ldGhvZERlc2NyaXB0b3IgZm0gPSAoTWV0aG9kRGVzY3JpcHRvcikgZkZlYXR1cmU7CisgCQkKKwkJaWYgKGZtLmdldE1ldGhvZCgpICE9IG9tLmdldE1ldGhvZCgpKQorCQkJcmV0dXJuIGZhbHNlOworCQkJCQorCQlpZiAoZlBhcmFtZXRlckRlc2NyaXB0b3JzICE9IG51bGwgfHwgb2VtLmZQYXJhbWV0ZXJEZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQkvLyBXZSBhcmUgaW4gYSBNYXAgbG9va3VwIHNpdHVhdGlvbiwgc28gb25lIHNpZGUgaGFzIGxpc3RlbmVyIG1ldGhvZCBlcXVhbGl0aWVzLCBzbyB3ZSB3aWxsIGNvbXBhcmUgdGhhdCB3YXkuCisJCQlpZiAocGFyYW1ldGVyRGVzY3JpcHRvcnMoKSA9PSBudWxsKQorCQkJCWlmICgoKE1ldGhvZERlc2NyaXB0b3JFcXVhbGl0eSkgb2JqKS5wYXJhbWV0ZXJEZXNjcmlwdG9ycygpICE9IG51bGwpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQllbHNlIDsKKwkJCWVsc2UKKwkJCQlpZiAoIXBhcmFtZXRlckRlc2NyaXB0b3JzKCkuZXF1YWxzKCgoTWV0aG9kRGVzY3JpcHRvckVxdWFsaXR5KSBvYmopLnBhcmFtZXRlckRlc2NyaXB0b3JzKCkpKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSB7CisJCQkvLyBXZSBhcmUgaW4gdGhlIGJ1aWxkaW5nIHRoZSBsaXN0IHBoYXNlcywgZG9uJ3Qgd2FzdGUgc3BhY2UgYnVpbGRpbmcgZW50aXJlIGxpc3QuCisJCQlQYXJhbWV0ZXJEZXNjcmlwdG9yW10gb3VycyA9IGZtLmdldFBhcmFtZXRlckRlc2NyaXB0b3JzKCk7CisJCQlQYXJhbWV0ZXJEZXNjcmlwdG9yW10gdGhlaXJzID0gb20uZ2V0UGFyYW1ldGVyRGVzY3JpcHRvcnMoKTsKKwkJCWlmIChvdXJzID09IHRoZWlycykKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWVsc2UgaWYgKG91cnMgPT0gbnVsbCkKKwkJCQlpZiAodGhlaXJzICE9IG51bGwpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQllbHNlCisJCQkJCTsKKwkJCWVsc2UgaWYgKHRoZWlycyA9PSBudWxsKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWVsc2UgaWYgKG91cnMubGVuZ3RoICE9IHRoZWlycy5sZW5ndGgpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJZWxzZSBpZiAob3Vycy5sZW5ndGggPiAwKSB7CisJCQkJUGFyYW1ldGVyRGVzY3JpcHRvckVxdWFsaXR5IHdvcmtpbmdPdXJzID0gbmV3IFBhcmFtZXRlckRlc2NyaXB0b3JFcXVhbGl0eSgpOworCQkJCVBhcmFtZXRlckRlc2NyaXB0b3JFcXVhbGl0eSB3b3JraW5nVGhpZXJzID0gbmV3IFBhcmFtZXRlckRlc2NyaXB0b3JFcXVhbGl0eSgpOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgb3Vycy5sZW5ndGg7IGkrKykgeworCQkJCQl3b3JraW5nT3Vycy5zZXRGZWF0dXJlKG91cnNbaV0pOworCQkJCQl3b3JraW5nVGhpZXJzLnNldEZlYXR1cmUodGhlaXJzW2ldKTsKKwkJCQkJaWYgKCF3b3JraW5nT3Vycy5lcXVhbHMod29ya2luZ1RoaWVycykpCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQkJCQorCQl9CisJCQkJCisgCQkJCisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01vZGVsaW5nQmVhbkluZm8uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01vZGVsaW5nQmVhbkluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ0NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vTW9kZWxpbmdCZWFuSW5mby5qYXZhCkBAIC0wLDAgKzEsODYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby52bTsKKworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYmVhbnMuKjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8uY29tbW9uLklCYXNlQmVhbkluZm9Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtLkJhc2VCZWFuSW5mbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29tbW9uLio7CitpbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnByb3h5LmNvbW1vbi4qOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIGJlYW5pbmZvIGNsYXNzIHRoYXQgaXMgY3JlYXRlZCB3aGVuIGJlYW5pbmZvIG1vZGVsaW5nIGludHJvc3BlY3RzIGEgYmVhbi4gSXRzIHB1cnBvc2UgaXMgdG8gZ2F0aGVyIHRvZ2V0aGVyIGFuZCBhbmFseXplIHRoZQorICogYmVhbmluZm8uIEZvciBleGFtcGxlLCBpdCBjaGVja3Mgd2l0aCB0aGUgc3VwZXJ0eXBlIGJlYW5pbmZvIHRvIHNlZSBpZiBhbGwgb2YgdGhlIHN1cGVydHlwZSdzIGRlc2NyaXB0b3JzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIElmIHRoZXkgYXJlLAorICogdGhlbiBpdCBrbm93cyB0aGF0IGl0IGRvZXMgYSBzdHJhaWdodCBpbmhlcml0YW5jZSBvZiB0aGUgc3VwZXJ0eXBlJ3MgZGVzY3JpcHRvcnMsIGFuZCB0aG9zZSBkZXNjcmlwdG9ycyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiBUaGlzIG1ha2VzIGl0CisgKiBlYXNpZXIgb24gdGhlIG1vZGVsIHNpZGUgc28gdGhhdCB0aGVyZSBpc24ndCBhIGdyZWF0IHByb2xpZmVyYXRpb24gb2YgZGVzY3JpcHRvcnMgYWxsIGRlc2NyaWJpbmcgdGhlIHNhbWUgcHJvcGVydGllcy4gSW4gdGhhdCBjYXNlIHRoZXkgY2FuIGJlCisgKiBtZXJnZWQgZnJvbSB0aGUgc3VwZXJ0eXBlIG1vZGVsLiBJZiBzb21lIGFyZSBub3QgZm91bmQsIHRoZW4gdGhhdCBtZWFucyB0aGlzIGJlYW5pbmZvIGlzIHRyeWluZyB0byBoaWRlIHNvbWUgb2YgdGhlbSwgYW5kIGluIHRoYXQgY2FzZSB0aGlzIGlzIHRoZQorICogZGVmaW5pdGl2ZSBsaXN0IGFuZCBpbmhlcml0YW5jZSBzaG91bGRuJ3QgYmUgdXNlZCBvbiB0aGUgbW9kZWwgc2lkZS4gSG93ZXZlciwgZm9yIHRob3NlIGZlYXR1cmVzIHdoaWNoIGFyZSBlc3NlbnRpYWxseSB0aGUgaW5oZXJpdGVkIGZlYXR1cmUgKGkuZS4KKyAqIHRoZSBCZWFuSW5mbyBzaW1wbHkgZmlsdGVyZWQgb3V0IHNvbWUgaW5oZXJpdGVkIGJ1dCBub3QgYWxsKSwgdGhleSB3aWxsIGJlIHJldHVybmFibGUgKGJ5IG5hbWUpLiBUaGUgSURFIHNpZGUgd2lsbCB0YWtlIHRoZXNlIHRoYXQgYXJlICJpbmhlcml0ZWQiCisgKiBhbmQgd2lsbCByZXR1cm4gdGhlIGFjdHVhbCBzdHJ1Y3R1cmVkIGZlYXR1cmUgZnJvbSB0aGUgaW5oZXJpdGVkIGNsYXNzLgorICogCisgKiBUaGUgdGVzdCBmb3Igc2VlaW5nIGlmIHRoZSBzdXBlciBmZWF0dXJlIGlzIGluY2x1ZGVkIGluIHRoZSBiZWFuaW5mbyBpcyBmaXJzdCB0byBzZWUgaWYgdGhlIHRoZSBmZWF0dXJlIGlzIGluIHRoZSBiZWFuaW5mbyBieSBuYW1lLCBpZiBpdCBpcyB0aGVuCisgKiBpdCBpcyBtYXJrZWQgYXMgaW5jbHVkZWQuIFRoZW4gYSBjaGVjayBpcyBtYWRlIG9uIGVxdWFsaXR5LCBpZiB0aGV5IGFyZSBlcXVhbCwgdGhlbiB0aGUgZmVhdHVyZSBpcyByZW1vdmVkIGZyb20gdGhlIGJlYW5pbmZvIGxpc3QsIGJ1dCB0aGUgbWVyZ2UKKyAqIGZsYWcgaXMgc3RpbGwgbGVmdCBvbiwgYW5kIHJlbW92ZWQgaW5oZXJpdGVkIGZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgaW5oZXJpdGVkIGZlYXR1cmVzLiBJZiBhbGwgaW5oZXJpdGVkIGZlYXR1cmVzIGFyZSBmb3VuZCwgdGhpcyBsaXN0IGlzCisgKiBjbGVhcmVkIGFuZCBmbGFnIGlzIHNldCB3aGljaCBzaW1wbHkgc2F5cyBtZXJnZSBhbGwgaW5oZXJpdGVkLiBUaGlzIGFsbG93cyBtZXJnaW5nIHRvIG9jY3VyIGJ1dCBpdCBhbHNvIGFsbG93cyBvdmVycmlkZXMgdG8gb2NjdXIuCisgKiAKKyAqIE5vdGU6IFRlc3QgZm9yIGlkZW50aXR5IGlzIGRpZmZlcmVudCBiZXR3ZWVuIEpESyAxLjUgYW5kIGFib3ZlIGFuZCBiZWxvdy4gMS41IGFuZCBhYm92ZSwgd2UgY2FuIHVzZSBhY3R1YWwgZXF1YWxzKCkgYmVjYXVzZSB0aGUgc2FtZSBkZXNjcmlwdG9yIGlzCisgKiByZXR1cm5lZCBmcm9tIGluaGVyaXRlZCBmZWF0dXJlcy4gSW4gMS4zLCBjbG9uZXMgd2VyZSBhbHdheXMgcmV0dXJuZWQgYW5kIGVxdWFscygpIHdvdWxkIGFuc3dlciBmYWxzZSwgc28gd2UgbmVlZCB0byBjcmVhdGUgYSBzcGVjaWFsIGVxdWFsaXR5CisgKiBkZXNjcmlwdG9yIHdoaWNoIHR1cm5zIHRoZSBlcXVhbHMoKSBpbnRvIG9uZSB0aGF0IGNhbiB0ZXN0IGNsb25lcyBmb3Igc2VtYW50aWMgZXF1YWxpdHkuIFNlZSBKYXZhIEJ1ZyBJRCM0OTk2NjczIFRoZSBwcm9ibGVtIHdhcyBzdXBwb3NlZCB0byBiZQorICogZml4ZWQgaW4gMS40IGJ1dCBpdCB3YXMgbm90IGZpeGVkLiBPcmlnaW5hbGx5IGEgbmV3IGNsb25lIHdhcyBjcmVhdGVkIGVhY2ggdGltZSBhIGJlYW5pbmZvIHdhcyByZXF1ZXN0ZWQuIFRoYXQgaXMgbm8gbG9uZ2VyIGRvbmUgaW4gMS40LCBidXQgdGhlCisgKiBwcm9jZXNzaW5nIHRvIGNyZWF0ZSB0aGUgb3JpZ2luYWwgYmVhbmluZm8gZG9lcyBhIGNsb25lIGFjY2lkZW50bHkgdW5kZXIgdGhlIGNvdmVycy4gTG9va2luZyBhdCAxLjUgaXQgbG9va3MgdGhpcyB3YXMgZml4ZWQsIGJ1dCBpdCBoYXNuJ3QgYmVlbgorICogdGVzdGVkIGhlcmUgeWV0LgorICovCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNb2RlbGluZ0JlYW5JbmZvIGltcGxlbWVudHMgSUNhbGxiYWNrIHsKKworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gUFJFMTU7CisJc3RhdGljIHsKKwkJU3RyaW5nIHZlcnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCVBSRTE1ID0gdmVyc2lvbi5zdGFydHNXaXRoKCIxLiIpOyAvLyROT04tTkxTLTEkCisJCWlmIChQUkUxNSkgeworCQkJLy8gQ29udGludWUgdG8gY2hlY2ssIGdldCB0aGUgcmV2aXNpb24uCisJCQlpbnQgcmV2aXNpb24gPSAwOworCQkJaWYgKHZlcnNpb24ubGVuZ3RoKCkgPiAyKSB7CisJCQkJaW50IHJldkVuZCA9IHZlcnNpb24uaW5kZXhPZignLicsIDIpOworCQkJCXJldmlzaW9uID0gdmVyc2lvbi5sZW5ndGgoKSA+IDIgPyBJbnRlZ2VyLnBhcnNlSW50KHJldkVuZCAhPSAtMSA/IHZlcnNpb24uc3Vic3RyaW5nKDIsIHJldkVuZCkgOiB2ZXJzaW9uLnN1YnN0cmluZygyKSkgOiAwOworCQkJCVBSRTE1ID0gcmV2aXNpb24gPCA1OworCQkJfQorCQl9CisJfQorCisJc3RhdGljIGNsYXNzIEZlYXR1cmVFcXVhbGl0eVNldCBleHRlbmRzIEhhc2hTZXQgeworCisJCS8qKgorCQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgorCQkgKiAKKwkJICogQHNpbmNlIDEuMS4wCisJCSAqLworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMzc0NDc3Njc0MDYwNDMyODMyNEw7CisJCXByaXZhdGUgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSB3b3JraW5nS2V5OworCisJCXB1YmxpYyBGZWF0dXJlRXF1YWxpdHlTZXQoTGlzdCBmZWF0dXJlcykgeworCQkJc3VwZXIoZmVhdHVyZXMuc2l6ZSgpKTsKKwkJCS8vIEdldCBmaXJzdCBmZWF0dXJlIHRvIGZpcXVyZSBvdXQgdHlwZSBvZiB3b3JraW5nIGtleS4gVGhpcyB3aWxsIG5vdCBiZSByZWVudHJhbnQuCisJCQl3b3JraW5nS2V5ID0gRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eS5jcmVhdGVFcXVhbGl0eSgoRmVhdHVyZURlc2NyaXB0b3IpIGZlYXR1cmVzLmdldCgwKSk7CisJCQl0aGlzLmFkZEFsbChmZWF0dXJlcyk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLnV0aWwuQ29sbGVjdGlvbiNhZGQoT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKSB7CisJCQlyZXR1cm4gc3VwZXIuYWRkKEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkuY3JlYXRlRXF1YWxpdHkoKEZlYXR1cmVEZXNjcmlwdG9yKSBvKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLnV0aWwuQ29sbGVjdGlvbiNjb250YWlucyhPYmplY3QpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBjb250YWlucyhPYmplY3QgbykgeworCQkJd29ya2luZ0tleS5zZXRGZWF0dXJlKChGZWF0dXJlRGVzY3JpcHRvcikgbyk7CisJCQlyZXR1cm4gc3VwZXIuY29udGFpbnMod29ya2luZ0tleSk7CisJCX0KKworCX0KKworCS8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIGluZGljYXRlIGlmIHRoZSBzdXBlciBpbmZvIHNob3VsZCBiZSBtZXJnZWQKKwkvLyBpbiBvbiB0aGUgbW9kZWwgc2lkZS4gbm8gbWVyZ2UgbWVhbnMgdGhlcmUgd2VyZSBubyBpbmhlcml0ZWQgbWV0aG9kcyBhdCBhbGwuIFNvIHRoZQorCS8vIGJlYW5pbmZvIHByZXNlbnRlZCBpcyBkZWZpbml0aXZlLiBJZiBtZXJnZSwgdGhlbiBnZXQuLi5EZXNjcmlwdG9ycyB3aWxsIHJldHVybiBqdXN0CisJLy8gdGhlIG9uZXMgZm9yIHRoaXMgbGV2ZWwsIGFuZCBnZXRTdXBlci4uLkRlc2NyaXB0b3JzIHdpbGwgcmV0dXJuIHRoZSBpbmhlcml0ZWQgb25lcy4KKwkvLyBUaG91Z2ggaW4gdGhpcyBjYXNlLCBpZiB0aGUgcmV0dXJuZWQgc3VwZXIgbGlzdCBpcyBudWxsLCB0aGVuIHRoYXQgbWVhbnMgdXNlIEFMTCBvZgorCS8vIHRoZSBpbmhlcml0ZWQgb25lcy4KKwkvLyBUaGUgc3VwZXIgbGlzdCByZXR1cm5zIHNpbXBseSB0aGUgbmFtZXMsIGRvbid0IG5lZWQgdG8gaGF2ZSB0aGUgZnVsbCBkZXNjcmlwdG9ycyBpbiB0aGF0IGNhc2UuCisJcHJvdGVjdGVkIGJvb2xlYW4gZk1lcmdlSW5oZXJpdGVkRXZlbnRzID0gZmFsc2UsIGZNZXJnZUluaGVyaXRlZE1ldGhvZHMgPSBmYWxzZSwgZk1lcmdlSW5oZXJpdGVkUHJvcGVydGllcyA9IGZhbHNlOworCisJcHJvdGVjdGVkIGZpbmFsIEJlYW5JbmZvIGZUYXJnZXRCZWFuSW5mbzsgLy8gVGhlIGJlYW5pbmZvIGJlaW5nIG1vZGVsZWQuCisKKwkvLyBMb2NhbCBkZXNjcmlwdG9ycworCXByb3RlY3RlZCBFdmVudFNldERlc2NyaXB0b3JbXSBmRXZlbnRTZXRzOworCisJcHJvdGVjdGVkIE1ldGhvZERlc2NyaXB0b3JbXSBmTWV0aG9kczsKKworCXByb3RlY3RlZCBQcm9wZXJ0eURlc2NyaXB0b3JbXSBmUHJvcGVydGllczsKKworCS8vIE5vdCBpbmhlcml0ZWQgZGVzY3JpcHRvciBuYW1lcywgd2lsbCBiZSBudWxsIGlmIG5vIG1lcmdlIG9yIGlmIG1lcmdlIGFsbC4gVGhpcyBpcyBsaXN0IG9mIG5hbWVzIHRvIE5PVCBtZXJnZS4gSXQgaXMgdXN1YWxseSBzaG9ydGVyIHRoYW4gdGhlIGxpc3QgdG8gbWVyZ2UgZnJvbSBzdXBlci4KKworCS8vIE1ldGhvZHMgYXJlIHNwZWNpYWwuIFlvdSBjYW4gaGF2ZSBkdXBsaWNhdGVzLCBzbyBuYW1lIGlzIG5vdCBzdWZmaWNpZW50LgorCS8vIFNvIGZvciBtZXRob2RzLAorCS8vIHdpbGwgdXNlIGFuIGFycmF5IG9mIFN0cmluZ3Mgd2hlcmU6CisJLy8gICBGb3IgZWFjaCBvbmUgdGhlIGZ1bGwgc2lnbmF0dXJlCisJLy8gICB3aWxsIGJlIGluIHRoZSBsaXN0LCBlLmcuICJuYW1lOm1ldGhvZE5hbWUoYXJndHlwZSwuLi4iIHdoZXJlIGFyZ3R5cGUgaXMgdGhlIGZ1bGx5cXVhbGlmaWVkCisJLy8gICBjbGFzc25hbWUgKHVzaW5nICIuIiBub3RhdGlvbiBmb3IgaW5uZXIgY2xhc3NlcyksIGFuZCB1c2luZyBmb3JtYXQgImphdmEubGFuZy5TdHJpbmdbXSIgZm9yCisJLy8gICBhcnJheXMuCisJLy8KKwkvLyBUaGlzIGlzIGJlY2F1c2UgZXZlbiBpZiB0aGVyZSBhcmUgbm8gZHVwbGljYXRlcywgaXQgd2lsbCB0YWtlIGxlc3MgdGltZS9zcGFjZSB0byBzaW1wbHkgY3JlYXRlIHRoZSBlbnRyaWVzCisJLy8gdGhlbiBpdCB3b3VsZCB0byBjcmVhdGUgYSBzZXQgdG8gc2VlIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVzIGFuZCB0aGVuIGNyZWF0ZSB0aGUgZmluYWwgYXJyYXkuCisJcHJvdGVjdGVkIFN0cmluZ1tdIGZOb3RJbmhlcml0ZWRFdmVudFNldHM7CisKKwlwcm90ZWN0ZWQgU3RyaW5nW10gZk5vdEluaGVyaXRlZE1ldGhvZHM7CisKKwlwcm90ZWN0ZWQgU3RyaW5nW10gZk5vdEluaGVyaXRlZFByb3BlcnRpZXM7CisJCisJcHJvdGVjdGVkIGludCBkb0ZsYWdzOworCisJLyoqCisJICogTWV0aG9kIHVzZWQgdG8gZG8gaW50cm9zcGVjdGlvbiBhbmQgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBNb2RlbGluZ0JlYW5JbmZvCisJICogCisJICogVGhpcyB3aWxsIGFsd2F5cyBpbnRyb3NwZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgTW9kZWxpbmdCZWFuSW5mbyBpbnRyb3NwZWN0KENsYXNzIGludHJvc3BlY3RDbGFzcywgaW50IGRvRmxhZ3MpIHRocm93cyBJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIHsKKwkJcmV0dXJuIGludHJvc3BlY3QoaW50cm9zcGVjdENsYXNzLCB0cnVlLCBkb0ZsYWdzKTsKKwl9CisKKwkvKioKKwkgKiBNZXRob2QgdXNlZCB0byBkbyBpbnRyb3NwZWN0aW9uIGFuZCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIE1vZGVsaW5nQmVhbkluZm8KKwkgKiAKKwkgKiBpbnRyb3NwZWN0SWZOb0JlYW5JbmZvOiBJZiB0aGlzIGlzIHRydWUsIHRoZW4gaWYgbm8gZXhwbGljaXQgYmVhbmluZm8gd2FzIGZvdW5kIGZvciB0aGlzIGNsYXNzLCB0aGVuIGludHJvc3BlY3Rpb24gd2lsbCBiZSBkb25lIGFueXdheS4gVGhlCisJICogSW50cm9zcGVjdG9yIHdpbGwgdXNlIHJlZmxlY3Rpb24gZm9yIGxvY2FsIG1ldGhvZHMvZXZlbnRzL3Byb3BlcnRpZXMgb2YgdGhpcyBjbGFzcyBhbmQgdGhlbiBhZGQgaW4gdGhlIHJlc3VsdHMgb2YgdGhlIHN1cGVyY2xhc3MgaW50cm9zcGVjdGlvbi4KKwkgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiBpZiB0aGUgZXhwbGljaXQgYmVhbmluZm8gaXMgbm90IGZvdW5kLCB0aGVuIG5vIGludHJvc3BlY3Rpb24gd2lsbCBiZSBkb25lIGFuZCBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCisJICovCisJcHVibGljIHN0YXRpYyBNb2RlbGluZ0JlYW5JbmZvIGludHJvc3BlY3QoQ2xhc3MgaW50cm9zcGVjdENsYXNzLCBib29sZWFuIGludHJvc3BlY3RJZk5vQmVhbkluZm8sIGludCBkb0ZsYWdzKSB0aHJvd3MgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbiB7CisJCWlmICghQmVhbnMuaXNEZXNpZ25UaW1lKCkpCisJCQlCZWFucy5zZXREZXNpZ25UaW1lKHRydWUpOwkvLyBTaW5jZSB0aGlzIGEgamVtIGJlYW5pbmZvIHNwZWNpZmljIHZtLCB3ZSBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkIGRlc2lnbiB0aW1lLgorCQlpZiAoIWludHJvc3BlY3RJZk5vQmVhbkluZm8pIHsKKwkJCS8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIGJlYW5pbmZvIGlzIGV4cGxpY2l0bHkgc3VwcGxpZWQuCisJCQkvLyBJZiBub3QsIHRoZW4gd2UgcmV0dXJuIG51bGwuCisJCQkvLyBUaGUgY2hlY2tzIHdpbGwgYmUgdGhlIHNhbWUgdGhhdCBJbnRyb3NwZWN0b3Igd2lsbCB1c2UuCisKKwkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKwkJCS8vIDEuIElzIHRoZXJlIGEgQmVhbkluZm8gY2xhc3MgaW4gdGhlIHNhbWUgcGFja2FnZQorCQkJaWYgKCFjbGFzc0V4aXN0cyhpbnRyb3NwZWN0Q2xhc3MuZ2V0TmFtZSgpICsgIkJlYW5JbmZvIiwgaW50cm9zcGVjdENsYXNzKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gMi4gSXMgdGhpcyBjbGFzcyBhIEJlYW5JbmZvIGNsYXNzIGZvciBpdHNlbGYuCisJCQkJaWYgKCEoQmVhbkluZm8uY2xhc3MpLmlzQXNzaWduYWJsZUZyb20oaW50cm9zcGVjdENsYXNzKSkgeworCQkJCQkvLyAzLiBDYW4gdGhpcyBjbGFzcyBiZSBmb3VuZCBpbiB0aGUgQmVhbmluZm8gc2VhcmNocGF0aC4KKwkJCQkJU3RyaW5nW10gc2VhcmNoUGF0aCA9IEludHJvc3BlY3Rvci5nZXRCZWFuSW5mb1NlYXJjaFBhdGgoKTsKKwkJCQkJaW50IHN0YXJ0Q2xhc3NuYW1lID0gaW50cm9zcGVjdENsYXNzLmdldE5hbWUoKS5sYXN0SW5kZXhPZigiLiIpICsgMTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgYmlOYW1lID0gIi4iICsgaW50cm9zcGVjdENsYXNzLmdldE5hbWUoKS5zdWJzdHJpbmcoc3RhcnRDbGFzc25hbWUpICsgIkJlYW5JbmZvIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VhcmNoUGF0aC5sZW5ndGg7IGkrKykgeworCQkJCQkJaWYgKGNsYXNzRXhpc3RzKHNlYXJjaFBhdGhbaV0gKyBiaU5hbWUsIGludHJvc3BlY3RDbGFzcykpIHsKKwkJCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJfSBlbHNlCisJCQkJZm91bmQgPSB0cnVlOworCisJCQlpZiAoIWZvdW5kKQorCQkJCXJldHVybiBudWxsOworCQl9CisKKwkJQmVhbkluZm8gYkluZm8gPSBJbnRyb3NwZWN0b3IuZ2V0QmVhbkluZm8oaW50cm9zcGVjdENsYXNzKTsKKwkJQ2xhc3Mgc3VwZXJDbGFzcyA9IGludHJvc3BlY3RDbGFzcy5nZXRTdXBlcmNsYXNzKCk7CisKKwkJaWYgKHN1cGVyQ2xhc3MgPT0gbnVsbCkKKwkJCXJldHVybiBQUkUxNSA/IChNb2RlbGluZ0JlYW5JbmZvKSBuZXcgTW9kZWxpbmdCZWFuSW5mb1ByZTE1KGJJbmZvLCBkb0ZsYWdzKSA6IG5ldyBNb2RlbGluZ0JlYW5JbmZvMTUoYkluZm8sIGRvRmxhZ3MpOworCQllbHNlCisJCQlyZXR1cm4gUFJFMTUgPyAoTW9kZWxpbmdCZWFuSW5mbykgbmV3IE1vZGVsaW5nQmVhbkluZm9QcmUxNShiSW5mbywgSW50cm9zcGVjdG9yLmdldEJlYW5JbmZvKHN1cGVyQ2xhc3MpLCBkb0ZsYWdzKSA6IG5ldyBNb2RlbGluZ0JlYW5JbmZvMTUoYkluZm8sCisJCQkJCUludHJvc3BlY3Rvci5nZXRCZWFuSW5mbyhzdXBlckNsYXNzKSwgZG9GbGFncyk7CisJfQorCisJLyoqCisJICogU2VlIGlmIHRoaXMgY2xhc3MgZXhpc3RzLCBmaXJzdCBpbiB0aGUgY2xhc3MgbG9hZGVyIG9mIHRoZSBzZW50IGNsYXNzLCB0aGVuIGluIHRoZSBzeXN0ZW0gbG9hZGVyLCB0aGVuIHRoZSBib290c3RyYXAgbG9hZGVyLCBhbmQgZmluYWxseSB0aGUKKwkgKiBjdXJyZW50IHRocmVhZCBjb250ZXh0IGNsYXNzIGxvYWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gY2xhc3NFeGlzdHMoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3MgZnJvbUNsYXNzKSB7CisJCWlmIChmcm9tQ2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKQorCQkJdHJ5IHsKKwkJCQlmcm9tQ2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJfQorCQlpZiAoQ2xhc3NMb2FkZXIuZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKSAhPSBudWxsKQorCQkJdHJ5IHsKKwkJCQlDbGFzc0xvYWRlci5nZXRTeXN0ZW1DbGFzc0xvYWRlcigpLmxvYWRDbGFzcyhjbGFzc05hbWUpOworCQkJCXJldHVybiB0cnVlOworCQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQl9CisJCXRyeSB7CisJCQlDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCX0KKworCQl0cnkgeworCQkJLy8gVXNlIHRoZSBjbGFzc2xvYWRlciBmcm9tIHRoZSBjdXJyZW50IFRocmVhZC4KKwkJCUNsYXNzTG9hZGVyIGNsID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKKwkJCWNsLmxvYWRDbGFzcyhjbGFzc05hbWUpOworCQkJcmV0dXJuIHRydWU7CisJCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCisJfQorCisJLyoqCisJICogVXNlZCBvbmx5IGZvciBPYmplY3Qgc2luY2UgdGhhdCBpcyB0aGUgb25seSBiZWFuIHRoYXQgZG9lc24ndCBoYXZlIGEgc3VwZXJjbGFzcy4gU3VwZXJjbGFzcyBiZWFuaW5mbyByZXF1aXJlZCBmb3IgYWxsIG90aGVyIGNsYXNzZXMuIElmIHRoaXMgaXMKKwkgKiBjb25zdHJ1Y3RlZCB0aGVuIHRoaXMgbWVhbnMgbm8gbWVyZ2UgYW5kIHRoZSBsaXN0IGlzIGRlZmluaXRpdmUuCisJICovCisJcHJvdGVjdGVkIE1vZGVsaW5nQmVhbkluZm8oQmVhbkluZm8gYmVhbkluZm8sIGludCBkb0ZsYWdzKSB7CisJCWZUYXJnZXRCZWFuSW5mbyA9IGJlYW5JbmZvOworCQl0aGlzLmRvRmxhZ3MgPSBkb0ZsYWdzOworCX0KKworCXByb3RlY3RlZCBNb2RlbGluZ0JlYW5JbmZvKEJlYW5JbmZvIGJlYW5JbmZvLCBCZWFuSW5mbyBzdXBlckJlYW5JbmZvLCBpbnQgZG9GbGFncykgeworCQl0aGlzKGJlYW5JbmZvLCBkb0ZsYWdzKTsKKworCQkvLyBOb3cgZ28gdGhyb3VnaCB0aGUgYmVhbmluZm8gdG8gZGV0ZXJtaW5lIHRoZSBtZXJnZSBzdGF0ZS4KKwkJLy8gVGhlIGRlZmF1bHQgaXMgbm8gbWVyZ2UuCisKKwkJaWYgKChkb0ZsYWdzICYgSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5ET19FVkVOVFMpICE9IDApIHsKKwkJCUxpc3QgZnVsbCA9IGFkZEFsbChiZWFuSW5mby5nZXRFdmVudFNldERlc2NyaXB0b3JzKCkpOworCQkJTGlzdCBpbmhlcml0ZWQgPSBhZGRBbGwoc3VwZXJCZWFuSW5mby5nZXRFdmVudFNldERlc2NyaXB0b3JzKCkpOworCisJCQlmTWVyZ2VJbmhlcml0ZWRFdmVudHMgPSBzdHJpcExpc3QoZnVsbCwgaW5oZXJpdGVkKTsKKwkJCWlmIChmTWVyZ2VJbmhlcml0ZWRFdmVudHMpIHsKKwkJCQlpZiAoIWZ1bGwuaXNFbXB0eSgpKQorCQkJCQlmRXZlbnRTZXRzID0gKEV2ZW50U2V0RGVzY3JpcHRvcltdKSBmdWxsLnRvQXJyYXkobmV3IEV2ZW50U2V0RGVzY3JpcHRvcltmdWxsLnNpemUoKV0pOworCQkJCWlmICghaW5oZXJpdGVkLmlzRW1wdHkoKSkKKwkJCQkJY3JlYXRlRXZlbnRBcnJheShpbmhlcml0ZWQpOyAvLyBUaGlzIGlzIGFjdHVhbGx5IGEgbGlzdCBvZiB0aG9zZSBOT1QgaW5oZXJpdGVkLgorCQkJfQorCQl9CisKKwkJaWYgKChkb0ZsYWdzICYgSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5ET19NRVRIT0RTKSAhPSAwKSB7CisJCQlMaXN0IGZ1bGwgPSBhZGRBbGwoYmVhbkluZm8uZ2V0TWV0aG9kRGVzY3JpcHRvcnMoKSk7CisJCQlMaXN0IGluaGVyaXRlZCA9IGFkZEFsbChzdXBlckJlYW5JbmZvLmdldE1ldGhvZERlc2NyaXB0b3JzKCkpOworCisJCQlmTWVyZ2VJbmhlcml0ZWRNZXRob2RzID0gc3RyaXBMaXN0KGZ1bGwsIGluaGVyaXRlZCk7CisJCQlpZiAoZk1lcmdlSW5oZXJpdGVkTWV0aG9kcykgeworCQkJCWlmICghZnVsbC5pc0VtcHR5KCkpCisJCQkJCWZNZXRob2RzID0gKE1ldGhvZERlc2NyaXB0b3JbXSkgZnVsbC50b0FycmF5KG5ldyBNZXRob2REZXNjcmlwdG9yW2Z1bGwuc2l6ZSgpXSk7CisJCQkJaWYgKCFpbmhlcml0ZWQuaXNFbXB0eSgpKQorCQkJCQljcmVhdGVNZXRob2RFbnRyaWVzKGluaGVyaXRlZCk7IC8vIFRoaXMgaXMgYWN0dWFsbHkgYSBsaXN0IG9mIHRob3NlIE5PVCBpbmhlcml0ZWQuCisJCQl9CisJCX0KKworCQlpZiAoKGRvRmxhZ3MgJiBJQmVhbkluZm9JbnRyb3NwZWN0aW9uQ29uc3RhbnRzLkRPX1BST1BFUlRJRVMpICE9IDApIHsKKwkJCUxpc3QgZnVsbCA9IGFkZEFsbChiZWFuSW5mby5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCkpOworCQkJTGlzdCBpbmhlcml0ZWQgPSBhZGRBbGwoc3VwZXJCZWFuSW5mby5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCkpOworCisJCQlmTWVyZ2VJbmhlcml0ZWRQcm9wZXJ0aWVzID0gc3RyaXBMaXN0KGZ1bGwsIGluaGVyaXRlZCk7CisJCQlpZiAoZk1lcmdlSW5oZXJpdGVkUHJvcGVydGllcykgeworCQkJCWlmICghZnVsbC5pc0VtcHR5KCkpCisJCQkJCWZQcm9wZXJ0aWVzID0gKFByb3BlcnR5RGVzY3JpcHRvcltdKSBmdWxsLnRvQXJyYXkobmV3IFByb3BlcnR5RGVzY3JpcHRvcltmdWxsLnNpemUoKV0pOworCQkJCWlmICghaW5oZXJpdGVkLmlzRW1wdHkoKSkKKwkJCQkJY3JlYXRlUHJvcGVydHlBcnJheShpbmhlcml0ZWQpOyAvLyBUaGlzIGlzIGFjdHVhbGx5IGEgbGlzdCBvZiB0aG9zZSBOT1QgaW5oZXJpdGVkLgorCQkJfQorCQl9CisJfQorCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXZlbnRBcnJheShMaXN0IGZlYXR1cmVzKSB7CisJCWZOb3RJbmhlcml0ZWRFdmVudFNldHMgPSBjcmVhdGVEZXNjcmlwdG9yTmFtZXMoZmVhdHVyZXMpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZU1ldGhvZEVudHJpZXMoTGlzdCBmZWF0dXJlcykgeworCQlpbnQgcyA9IGZlYXR1cmVzLnNpemUoKTsKKwkJZk5vdEluaGVyaXRlZE1ldGhvZHMgPSBuZXcgU3RyaW5nW3NdOworCQlmb3IgKGludCBpID0gMDsgaSA8IHM7IGkrKykgeworCQkJZk5vdEluaGVyaXRlZE1ldGhvZHNbaV0gPSBsb25nTmFtZSgoTWV0aG9kRGVzY3JpcHRvcikgZmVhdHVyZXMuZ2V0KGkpKTsKKwkJfQorCX0KKworCXByb3RlY3RlZCBTdHJpbmcgbG9uZ05hbWUoTWV0aG9kRGVzY3JpcHRvciBtZCkgeworCQlTdHJpbmcgbiA9IG1kLmdldE5hbWUoKTsKKwkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihuLmxlbmd0aCgpICsgMjApOworCQlzYi5hcHBlbmQobik7CisJCXNiLmFwcGVuZCgnOicpOworCQlNZXRob2QgbSA9IG1kLmdldE1ldGhvZCgpOworCQlzYi5hcHBlbmQobS5nZXROYW1lKCkpOworCQlzYi5hcHBlbmQoJygnKTsKKwkJQ2xhc3NbXSBwYXJtcyA9IG0uZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBwYXJtcy5sZW5ndGg7IGorKykgeworCQkJaWYgKGogPiAwKQorCQkJCXNiLmFwcGVuZCgnLCcpOworCQkJaWYgKCFwYXJtc1tqXS5pc0FycmF5KCkpCisJCQkJc2IuYXBwZW5kKHBhcm1zW2pdLmdldE5hbWUoKS5yZXBsYWNlKCckJywgJy4nKSk7CisJCQllbHNlIHsKKwkJCQlDbGFzcyBmaW5hbFR5cGUgPSBwYXJtc1tqXS5nZXRDb21wb25lbnRUeXBlKCk7CisJCQkJaW50IGluc3J0ID0gc2IubGVuZ3RoKCk7CisJCQkJd2hpbGUgKGZpbmFsVHlwZS5pc0FycmF5KCkpIHsKKwkJCQkJc2IuYXBwZW5kKCJbXSIpOyAvLyROT04tTkxTLTEkCisJCQkJCWZpbmFsVHlwZSA9IGZpbmFsVHlwZS5nZXRDb21wb25lbnRUeXBlKCk7CisJCQkJfQorCQkJCXNiLmluc2VydChpbnNydCwgZmluYWxUeXBlLmdldE5hbWUoKS5yZXBsYWNlKCckJywgJy4nKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvcGVydHlBcnJheShMaXN0IGZlYXR1cmVzKSB7CisJCWZOb3RJbmhlcml0ZWRQcm9wZXJ0aWVzID0gY3JlYXRlRGVzY3JpcHRvck5hbWVzKGZlYXR1cmVzKTsKKwl9CisKKwlwcm90ZWN0ZWQgU3RyaW5nW10gY3JlYXRlRGVzY3JpcHRvck5hbWVzKExpc3QgZmVhdHVyZXMpIHsKKwkJU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tmZWF0dXJlcy5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgeworCQkJcmVzdWx0W2ldID0gKChGZWF0dXJlRGVzY3JpcHRvcikgZmVhdHVyZXMuZ2V0KGkpKS5nZXROYW1lKCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlwcm90ZWN0ZWQgTGlzdCBhZGRBbGwoT2JqZWN0W10gc2V0KSB7CisJCWlmIChzZXQgIT0gbnVsbCkgeworCQkJQXJyYXlMaXN0IGwgPSBuZXcgQXJyYXlMaXN0KHNldC5sZW5ndGgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHsKKwkJCQlsLmFkZChzZXRbaV0pOworCQkJfQorCQkJcmV0dXJuIGw7CisJCX0gZWxzZQorCQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7CisJfQorCisJLyoqCisJICogSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZW4gYWxsIG9mIHRoZSBzdXBlciBjbGFzcydzIGV2ZW50cyBzaG91bGQgYmUgbWVyZ2VkIGluLiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBldmVudHMgcmV0dXJuZWQgYXJlIGl0LCB0aGVyZSBhcmUKKwkgKiBubyBvdGhlcnMuCisJICovCisJcHVibGljIGJvb2xlYW4gaXNNZXJnZUluaGVyaXRlZEV2ZW50cygpIHsKKwkJcmV0dXJuIGZNZXJnZUluaGVyaXRlZEV2ZW50czsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlbiBhbGwgb2YgdGhlIHN1cGVyIGNsYXNzJ3MgbWV0aG9kcyBzaG91bGQgYmUgbWVyZ2VkIGluLiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBtZXRob2RzIHJldHVybmVkIGFyZSBpdCwgdGhlcmUKKwkgKiBhcmUgbm8gb3RoZXJzLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTWVyZ2VJbmhlcml0ZWRNZXRob2RzKCkgeworCQlyZXR1cm4gZk1lcmdlSW5oZXJpdGVkTWV0aG9kczsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlbiBhbGwgb2YgdGhlIHN1cGVyIGNsYXNzJ3MgcHJvcGVydGllcyBzaG91bGQgYmUgbWVyZ2VkIGluLiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBwcm9wZXJ0aWVzIHJldHVybmVkIGFyZSBpdCwKKwkgKiB0aGVyZSBhcmUgbm8gb3RoZXJzLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTWVyZ2VJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgeworCQlyZXR1cm4gZk1lcmdlSW5oZXJpdGVkUHJvcGVydGllczsKKwl9CisKKwlwdWJsaWMgQmVhbkluZm9bXSBnZXRBZGRpdGlvbmFsQmVhbkluZm8oKSB7CisJCXJldHVybiBmVGFyZ2V0QmVhbkluZm8uZ2V0QWRkaXRpb25hbEJlYW5JbmZvKCk7CisJfQorCisJcHVibGljIEJlYW5EZXNjcmlwdG9yIGdldEJlYW5EZXNjcmlwdG9yKCkgeworCQlyZXR1cm4gZlRhcmdldEJlYW5JbmZvLmdldEJlYW5EZXNjcmlwdG9yKCk7CisJfQorCisJcHVibGljIEV2ZW50U2V0RGVzY3JpcHRvcltdIGdldEV2ZW50U2V0RGVzY3JpcHRvcnMoKSB7CisJCXJldHVybiBmTWVyZ2VJbmhlcml0ZWRFdmVudHMgPyBmRXZlbnRTZXRzIDogZlRhcmdldEJlYW5JbmZvLmdldEV2ZW50U2V0RGVzY3JpcHRvcnMoKTsKKwl9CisKKwlwdWJsaWMgamF2YS5hd3QuSW1hZ2UgZ2V0SWNvbihpbnQgaWNvbktpbmQpIHsKKwkJcmV0dXJuIGZUYXJnZXRCZWFuSW5mby5nZXRJY29uKGljb25LaW5kKTsKKwl9CisKKwlwdWJsaWMgTWV0aG9kRGVzY3JpcHRvcltdIGdldE1ldGhvZERlc2NyaXB0b3JzKCkgeworCQlyZXR1cm4gZk1lcmdlSW5oZXJpdGVkTWV0aG9kcyA/IGZNZXRob2RzIDogZlRhcmdldEJlYW5JbmZvLmdldE1ldGhvZERlc2NyaXB0b3JzKCk7CisJfQorCisJcHVibGljIFByb3BlcnR5RGVzY3JpcHRvcltdIGdldFByb3BlcnR5RGVzY3JpcHRvcnMoKSB7CisJCXJldHVybiBmTWVyZ2VJbmhlcml0ZWRQcm9wZXJ0aWVzID8gZlByb3BlcnRpZXMgOiBmVGFyZ2V0QmVhbkluZm8uZ2V0UHJvcGVydHlEZXNjcmlwdG9ycygpOworCX0KKworCXB1YmxpYyBTdHJpbmdbXSBnZXROb3RJbmhlcml0ZWRFdmVudFNldERlc2NyaXB0b3JzKCkgeworCQlyZXR1cm4gZk5vdEluaGVyaXRlZEV2ZW50U2V0czsKKwl9CisKKwlwdWJsaWMgU3RyaW5nW10gZ2V0Tm90SW5oZXJpdGVkTWV0aG9kRGVzY3JpcHRvcnMoKSB7CisJCXJldHVybiBmTm90SW5oZXJpdGVkTWV0aG9kczsKKwl9CisKKwlwdWJsaWMgU3RyaW5nW10gZ2V0Tm90SW5oZXJpdGVkUHJvcGVydHlEZXNjcmlwdG9ycygpIHsKKwkJcmV0dXJuIGZOb3RJbmhlcml0ZWRQcm9wZXJ0aWVzOworCX0KKworCXByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZUtleShGZWF0dXJlRGVzY3JpcHRvciBmZWF0dXJlKSB7CisJCXJldHVybiBmZWF0dXJlIGluc3RhbmNlb2YgTWV0aG9kRGVzY3JpcHRvciA/IGxvbmdOYW1lKChNZXRob2REZXNjcmlwdG9yKSBmZWF0dXJlKSA6IGZlYXR1cmUuZ2V0TmFtZSgpOworCX0KKworCS8qCisJICogU3RyaXAgdGhlIGxpc3QgZG93biB1c2luZyB0aGUgRXF1YWxpdHkgb2JqZWN0cy4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzdHJpcExpc3QoTGlzdCBmdWxsTGlzdCwgTGlzdCBpbmhlcml0ZWRMaXN0KSB7CisJCS8vIFRoZSBwcm9jZXNzIGlzIHRvIGNyZWF0ZSBhIGJvb2xlYW4gbGlzdCBtaXJyb3JpbmcgdGhlIGluaGVyaXRlZExpc3QuCisJCS8vIFRoaXMgYm9vbGVhbiBsaXN0IGluZGljYXRlcyBpZiB0aGUgY29ycmVzcG9uZGluZyAoYnkgaW5kZXgpCisJCS8vIGVudHJ5IGZyb20gdGhlIGluaGVyaXRlZExpc3QgaXMgdG8gYmUgcmV0YWluZWQgaW4gdGhlIGZpbmFsIGNvbXB1dGVkCisJCS8vIGxpc3QuCisJCS8vCisJCS8vIEEgSGFzaG1hcCBpcyBjcmVhdGVkIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkS2V5IGZyb20gdGhlIGluaGVyaXRlZExpc3QKKwkJLy8gYW5kIHRoZSB2YWx1ZSBpcyB0aGUgaW5kZXggaW50byB0aGUgaW5oZXJpdGVkTGlzdC4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBxdWlja2x5IGRldGVybWluZSBpZiB0aGUKKwkJLy8gZW50cnkgaXMgbWF0Y2hpbmcuCisJCS8vCisJCS8vIFRoZW4gdGhlIGZ1bGxMaXN0IHdpbGwgYmUgc3RlcHBlZCB0aHJvdWdoIGFuZCBzZWUgaWYgdGhlcmUgaXMKKwkJLy8gYW4gZW50cnkgaW4gdGhlIEhhc2htYXAgZm9yIGl0LiBJZiB0aGVyZSBpcyBhbiBlbnRyeSwgdGhlbgorCQkvLyB0aGUgZW50cnkgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQgaXMgc2VtYW50aWNhbGx5IGVxdWFsLgorCQkvLyBJZiBpdCBpcywgdGhlbiB0aGUgYm9vbGVhbiBsaXN0IGVudHJ5IGlzIG1hcmtlZCBzbyB0aGF0CisJCS8vIHRoZSBpbmhlcml0ZWRMaXN0IGVudHJ5IHdpbGwgYmUgcmV0YWluZWQsIHRoZSBmdWxsTGlzdCBlbnRyeSByZW1vdmVkIGFuZCB0aGUgY291bnRlcgorCQkvLyBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluaGVyaXRlZExpc3QgY29weSBpcyBpbmNyZW1lbnRlZC4KKwkJLy8gSWYgdGhleSBhcmVuJ3Qgc2VtYW50aWNhbGx5IGVxdWFsLCB0aGVuIHdlIGtub3cgdGhhdCB0aGlzIGlzCisJCS8vIGFuIG92ZXJyaWRlLiBJbiB0aGF0IGNhc2UsIHRoZSBmdWxsTGlzdCBlbnRyeSBpcyBrZXB0LCB0aGUgaW5oZXJpdGVkTGlzdAorCQkvLyBlbnRyeSBpcyBub3QgcmV0YWluZWQsIGJ1dCB3ZSBkb24ndCBwcmV2ZW50IG1lcmdlIGxhdGVyLgorCQkvLworCQkvLyBJZiB0aGUgZnVsbExpc3QgZW50cnkgaXMgbm90IGZvdW5kIGluIHRoZSBIYXNoTWFwLCB0aGVuIHdlIGtub3cgaXQgaXMgbm90CisJCS8vIGZyb20gdGhlIGluaGVyaXRlZExpc3QsIHNvIGl0IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGZ1bGxMaXN0LgorCQkvLworCQkvLyBJZiB3ZSBnZXQgYWxsIG9mIHRoZSB3YXkgdGhyb3VnaCwgdGhlbiB3ZSBrbm93IHRoYXQgd2hhdCBpcyBsZWZ0CisJCS8vIGluIGZ1bGxMaXN0IGlzIGp1c3QgdGhpcyBsZXZlbC4KKwkJLy8KKwkJLy8gV2hlbiB3ZSByZXR1cm4gd2Uga25vdyB0aGF0CisJCS8vICAgYSkgZnVsbExpc3QgaGFzIG9ubHkgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIGZvdW5kIGF0IHRoZSBsb2NhbCBsZXZlbAorCQkvLyAgIGIpIGluaGVyaXRlZExpc3QgaWYgbm90IGVtcHR5IGNvbnRhaW5zIHRoZSBvbmVzIGZyb20gc3VwZXIgdGhhdCBTSE9VTEQgTk9UIGJlIGluaGVyaXRlZC4KKwkJLy8gICAgICBJZiBpdCBpcyBlbXB0eSwgdGhlbiBpZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZW4gQUxMIHNob3VsZCBiZSBpbmhlcml0ZWQsCisJCS8vICAgICAgb3IgaWYgdGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSwgdGhlbiBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHdlIGFyZW4ndCBtZXJnaW5nIGFueS4KKwkJLy8KKwkJLy8gQWxsIG9mIHRoaXMgaXMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBsaXN0IGNhbgorCQkvLyBnZXQgcXVpdGUgbGFyZ2UgKHdoaWNoIGl0IGRvZXMgZm9yIGphdmF4LnN3aW5nKSBhbmQgdGhhdAorCQkvLyBhIHNpbXBsZSBuLXNxdWFyZWQgb3JkZXIgc2VhcmNoIHdvdWxkIGJlIHRvbyBzbG93LgorCisJCWlmIChmdWxsTGlzdC5pc0VtcHR5KCkpIHsKKwkJCXJldHVybiBmYWxzZTsgLy8gVGhlcmUgYXJlIG5vbmUgaW4gdGhlIGZ1bGwgbGlzdCwgc28gdGhlcmUgc2hvdWxkIGJlIG5vbmUsIGFuZCBkb24ndCBtZXJnZS4KKwkJfSBlbHNlIGlmIChpbmhlcml0ZWRMaXN0LmlzRW1wdHkoKSkKKwkJCXJldHVybiBmYWxzZTsgLy8gVGhlcmUgYXJlIG5vIGluaGVyaXRlZExpc3QgZmVhdHVyZXMsIHNvIHRyZWF0IGFzIG5vIG1lcmdlLgorCisJCS8vIFdlIGhhdmUgc29tZSBmZWF0dXJlcyBhbmQgc29tZSBpbmhlcml0ZWRMaXN0IGZlYXR1cmVzLCBzbyB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGxpc3RzLgorCisJCS8vIENyZWF0ZSBhIHdvcmtpbmcgY29weSBvZiB0aGUgRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSBmb3IgZnVsbExpc3QgYW5kIHN0cmlwTGlzdCBhbmQganVzdCByZXVzZSB0aGVtCisJCUZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkgd29ya2luZ1N0cmlwID0gRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eS5jcmVhdGVFcXVhbGl0eSgoRmVhdHVyZURlc2NyaXB0b3IpIGluaGVyaXRlZExpc3QuZ2V0KDApKTsKKwkJRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSB3b3JraW5nRnVsbCA9IEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkuY3JlYXRlRXF1YWxpdHkoKEZlYXR1cmVEZXNjcmlwdG9yKSBmdWxsTGlzdC5nZXQoMCkpOworCisJCWludCBpbmhlcml0ZWRTaXplID0gaW5oZXJpdGVkTGlzdC5zaXplKCk7CisJCWJvb2xlYW5bXSBjb3B5ID0gbmV3IGJvb2xlYW5baW5oZXJpdGVkU2l6ZV07CisKKwkJSGFzaE1hcCBpbmhlcml0ZWRNYXAgPSBuZXcgSGFzaE1hcChpbmhlcml0ZWRTaXplKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmhlcml0ZWRTaXplOyBpKyspIHsKKwkJCUZlYXR1cmVEZXNjcmlwdG9yIGYgPSAoRmVhdHVyZURlc2NyaXB0b3IpIGluaGVyaXRlZExpc3QuZ2V0KGkpOworCQkJU3RyaW5nIGtleSA9IGNvbXB1dGVLZXkoZik7CisJCQlPYmplY3QgdmFsdWUgPSBpbmhlcml0ZWRNYXAuZ2V0KGtleSk7CisJCQlpZiAodmFsdWUgPT0gbnVsbCkKKwkJCQlpbmhlcml0ZWRNYXAucHV0KGtleSwgbmV3IEludGVnZXIoaSkpOworCQkJZWxzZSB7CisJCQkJLy8gU2hvdWxkbid0IG9jY3VyLgorCQkJfQorCisJCX0KKworCQkvLyBXaGVuIHdlIGFyZSBkb25lIHdpdGggdGhpcyBwcm9jZXNzaW5nLCBpbmhlcml0ZWRMaXN0IHdpbGwgY29udGFpbiB0aGUgc3VwZXIgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQsIGFuZCBmdWxsIGxpc3Qgd2lsbCBjb250YWluIG9ubHkgdGhlIGxvY2FscworCQkvLyAodGhvc2UgZGVmaW5lZCBhdCB0aGlzIGNsYXNzIGxldmVsKS47CisJCWludCBpbmhlcml0ZWRSZXRhaW5lZCA9IDA7CisJCUl0ZXJhdG9yIGZ1bGxJdHIgPSBmdWxsTGlzdC5pdGVyYXRvcigpOworCQkvLyBDb250aW51ZSB3aGlsZSB3ZSd2ZSByZXRhaW5lZCBsZXNzIHRoYW4gdGhlIGZ1bGwgc3VwZXIgYW1vdW50LiBJZiB3ZSd2ZSByZXRhaW5lZCBhbGwgb2YgdGhlIGluaGVyaXRlZExpc3QsIHRoZXJlIGlzIG5vCisJCS8vIG5lZWQgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGUgZnVsbExpc3QgYmVjYXVzZSB0aGVyZSBjYW4ndCBwb3NzaWJseSBiZSBhbnkgaW5oZXJpdGVkTGlzdCBlbnRyaWVzIGxlZnQgdG8gZmluZC4KKwkJd2hpbGUgKGluaGVyaXRlZFJldGFpbmVkIDwgaW5oZXJpdGVkU2l6ZSAmJiBmdWxsSXRyLmhhc05leHQoKSkgeworCQkJRmVhdHVyZURlc2NyaXB0b3IgZiA9IChGZWF0dXJlRGVzY3JpcHRvcikgZnVsbEl0ci5uZXh0KCk7CisJCQlib29sZWFuIGZvdW5kRnVsbCA9IGZhbHNlOworCQkJT2JqZWN0IGluZGV4ID0gaW5oZXJpdGVkTWFwLmdldChjb21wdXRlS2V5KGYpKTsKKwkJCWlmIChpbmRleCAhPSBudWxsKSB7CisJCQkJd29ya2luZ0Z1bGwuc2V0RmVhdHVyZShmKTsKKwkJCQlpbnQgbmR4ID0gKChJbnRlZ2VyKSBpbmRleCkuaW50VmFsdWUoKTsKKwkJCQl3b3JraW5nU3RyaXAuc2V0RmVhdHVyZSgoRmVhdHVyZURlc2NyaXB0b3IpIGluaGVyaXRlZExpc3QuZ2V0KG5keCkpOworCQkJCWlmICh3b3JraW5nRnVsbC5lcXVhbHMod29ya2luZ1N0cmlwKSkgeworCQkJCQkvLyBUaGV5IGFyZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsLCBzbyByZXRhaW4gaW4gdGhlIGluaGVyaXRlZExpc3QuCisJCQkJCWNvcHlbbmR4XSA9IHRydWU7CisJCQkJCWZvdW5kRnVsbCA9IHRydWU7CisJCQkJCWluaGVyaXRlZFJldGFpbmVkKys7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZm91bmRGdWxsKSB7CisJCQkJLy8gV2UgZm91bmQgdGhlIGluaGVyaXRlZExpc3QgZW50cnkgc2VtYW50aWNhbGx5IGVxdWFsIGluIHRoZSBmdWxsIGxpc3Qgc29tZXdoZXJlLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgZnVsbCBlbnRyeS4KKwkJCQlmdWxsSXRyLnJlbW92ZSgpOworCQkJfQorCQl9CisKKwkJaWYgKGluaGVyaXRlZFJldGFpbmVkID09IGluaGVyaXRlZFNpemUpIHsKKwkJCWluaGVyaXRlZExpc3QuY2xlYXIoKTsgLy8gQWxsIHdlcmUgZm91bmQgaW4gaW5oZXJpdGVkTGlzdCwgc28ganVzdCBjbGVhciB0aGUgaW5oZXJpdGVkTGlzdCBhbmQgcmV0dXJuIGp1c3Qgd2hhdCB3YXMgbGVmdCBpbiB0aGUgZm91bmQuCisJCQkJCQkJCSAgIC8vIFRob3NlIGluIGZ1bGwgZm91bmQgaW4gc3VwZXIgaGFkIGJlZW4gcmVtb3ZlZCBmcm9tIGZ1bGwgZHVyaW5nIHRoZSBwcm9jZXNzaW5nLgorCQkJcmV0dXJuIHRydWU7IC8vIFdlIG1lcmdlIHdpdGggYWxsIGluaGVyaXRlZC4gCisJCX0gZWxzZQlpZiAoaW5oZXJpdGVkUmV0YWluZWQgIT0gMCkgeworCQkJLy8gU29tZSB3ZXJlIHJldGFpbmVkLCB0YWtlIG91dCBvZiB0aGUgbGlzdCB0aG9zZSB0aGF0IHdlcmUgcmV0YWluZWQuCisJCQkvLyBXaGVuIGRvbmUgdGhlIGxpc3Qgd2lsbCBjb250YWluIHRob3NlIHRoYXQgc2hvdWxkIGJlIGRyb3BwZWQgZnJvbSB0aGUgaW5oZXJpdGVkIGxpc3QuCisJCQkvLyBXZSBzdGFydCBmcm9tIGVuZCBiZWNhdXNlIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIG1vdmVkIG92ZXJhbGwgd2lsbCBiZSBsZXNzIHRoYW4gaWYgd2Ugc3RhcnRlZCBmcm9tIHRoZSBmcm9udC4KKwkJCWZvciAoTGlzdEl0ZXJhdG9yIGl0ciA9IGluaGVyaXRlZExpc3QubGlzdEl0ZXJhdG9yKGluaGVyaXRlZExpc3Quc2l6ZSgpKTsgaXRyLmhhc1ByZXZpb3VzKCk7KSB7CisJCQkJaW50IGkgPSBpdHIucHJldmlvdXNJbmRleCgpOworCQkJCWl0ci5wcmV2aW91cygpOwkvLyBUbyBiYWNrIHVwIHRoZSBpdHIgc28gdGhhdCByZW1vdmUgY2FuIHJlbW92ZSBpdC4gV2UgYWN0dWFsbHkgZG9uJ3QgY2FyZSB3aGF0IHRoZSB2YWx1ZSBpcy4KKwkJCQlpZiAoY29weVtpXSkKKwkJCQkJaXRyLnJlbW92ZSgpOworCQkJfQorCQkJcmV0dXJuIHRydWU7CS8vIFdlIG1lcmdlLCBhbmQgdGhlIGxpc3QgaXMgbm90IGVtcHR5IGJ1dCBpdCBkaWQgaGF2ZSBzb21lIHJlbW92ZWQsIHNvIHdlIGxlYXZlIHRoZSBsaXN0IGFsb25lLiBUaG9zZSBhcmUgbm90IGluaGVyaXRlZC4KKwkJfSBlbHNlCisJCQlyZXR1cm4gZmFsc2U7CS8vIEFsbCB3ZXJlIHJlbW92ZWQgKHJldGFpbmVkID09IDApLiBOb25lIHdlcmUgcmV0YWluZWQuIFNvIHdlIGp1c3QgZG9uJ3QgZG8gYSBtZXJnZS4gVGhlIGxpc3Qgd2lsbCBiZSBpZ25vcmVkLgorCX0KKworCS8vIFRoZSBtb2RlbGluZyBiZWFuaW5mbyBpcyBhbHNvIHVzZWQgdG8gc2VuZCBpdHNlbGYgYmFjayBpbiBzZXJpYWxpemVkIG1vZGUgYXMgYSBjYWxsYmFjay4KKworCXByaXZhdGUgSVZNQ2FsbGJhY2tTZXJ2ZXIgdm1TZXJ2ZXI7CisKKwlwcml2YXRlIGludCBjYWxsYmFja0lEOworCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwucHJveHkuY29tbW9uLklDYWxsYmFjayNpbml0aWFsaXplQ2FsbGJhY2sob3JnLmVjbGlwc2UuamVtLmludGVybmFsLnByb3h5LmNvbW1vbi5JVk1TZXJ2ZXIsIGludCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplQ2FsbGJhY2soSVZNQ2FsbGJhY2tTZXJ2ZXIgdm1TZXJ2ZXIsIGludCBjYWxsYmFja0lEKSB7CisJCXRoaXMudm1TZXJ2ZXIgPSB2bVNlcnZlcjsKKwkJdGhpcy5jYWxsYmFja0lEID0gY2FsbGJhY2tJRDsKKwl9CisJCisJcHVibGljIHZvaWQgc2VuZCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29tbWFuZEV4Y2VwdGlvbiB7CisJCWlmIChkb0ZsYWdzICE9IDApIHsKKwkJCU9iamVjdE91dHB1dFN0cmVhbSBzdHJlYW0gPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKHZtU2VydmVyLnJlcXVlc3RTdHJlYW0oY2FsbGJhY2tJRCwgMCkpOworCQkJaWYgKChkb0ZsYWdzICYgSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5ET19CRUFOX0RFQ09SKSAhPSAwKQorCQkJCXNlbmRCZWFuRGVjb3JhdG9yKHN0cmVhbSk7CisJCQlpZiAoKGRvRmxhZ3MgJiBJQmVhbkluZm9JbnRyb3NwZWN0aW9uQ29uc3RhbnRzLkRPX1BST1BFUlRJRVMpICE9IDApCisJCQkJc2VuZFByb3BlcnR5RGVjb3JhdG9ycyhzdHJlYW0pOworCQkJaWYgKChkb0ZsYWdzICYgSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5ET19NRVRIT0RTKSAhPSAwKQorCQkJCXNlbmRNZXRob2REZWNvcmF0b3JzKHN0cmVhbSk7CisJCQlpZiAoKGRvRmxhZ3MgJiBJQmVhbkluZm9JbnRyb3NwZWN0aW9uQ29uc3RhbnRzLkRPX0VWRU5UUykgIT0gMCkKKwkJCQlzZW5kRXZlbnREZWNvcmF0b3JzKHN0cmVhbSk7CisJCQlzdHJlYW0ud3JpdGVJbnQoSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5ET05FKTsKKwkJCXN0cmVhbS5jbG9zZSgpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbGVkIGJ5IElERSB0byBzZW5kIHRoZSBiZWFuIGRlY29yYXRvciBpbmZvcm1hdGlvbiBiYWNrIHRocm91Z2ggdGhlIGNhbGxiYWNrLgorCSAqIEB0aHJvd3MgQ29tbWFuZEV4Y2VwdGlvbgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAKKwkgKiBAc2luY2UgMS4xLjAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZW5kQmVhbkRlY29yYXRvcihPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvbW1hbmRFeGNlcHRpb24geworCQlCZWFuUmVjb3JkIGJyID0gbmV3IEJlYW5SZWNvcmQoKTsKKwkJQmVhbkRlc2NyaXB0b3IgYmQgPSBnZXRCZWFuRGVzY3JpcHRvcigpOworCisJCWlmIChiZCAhPSBudWxsKSB7CisJCQlici5jdXN0b21pemVyQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKGJkLmdldEN1c3RvbWl6ZXJDbGFzcygpKTsKKwkJCWJyLm1lcmdlSW5oZXJpdGVkUHJvcGVydGllcyA9IGlzTWVyZ2VJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisJCQlici5tZXJnZUluaGVyaXRlZE9wZXJhdGlvbnMgPSBpc01lcmdlSW5oZXJpdGVkTWV0aG9kcygpOworCQkJYnIubWVyZ2VJbmhlcml0ZWRFdmVudHMgPSBpc01lcmdlSW5oZXJpdGVkRXZlbnRzKCk7CisJCQlici5ub3RJbmhlcml0ZWRQcm9wZXJ0eU5hbWVzID0gZ2V0Tm90SW5oZXJpdGVkUHJvcGVydHlEZXNjcmlwdG9ycygpOworCQkJYnIubm90SW5oZXJpdGVkT3BlcmF0aW9uTmFtZXMgPSBnZXROb3RJbmhlcml0ZWRNZXRob2REZXNjcmlwdG9ycygpOworCQkJYnIubm90SW5oZXJpdGVkRXZlbnROYW1lcyA9IGdldE5vdEluaGVyaXRlZEV2ZW50U2V0RGVzY3JpcHRvcnMoKTsKKwkJCWZpbGwoYmQsIGJyLCBCRUFOX1JFQ09SRF9UWVBFKTsKKwkJfQorCQlzdHJlYW0ud3JpdGVJbnQoSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5CRUFOX0RFQ09SQVRPUl9TRU5UKTsKKwkJc3RyZWFtLndyaXRlT2JqZWN0KGJyKTsKKwl9CisKKwkvKioKKwkgKiBDYWxsZWQgYnkgSURFIHRvIHNlbmQgdGhlIHByb3BlcnR5IGRlY29yYXRvcnMgaW5mb3JtYXRpb24gYmFjayB0aHJvdWdoIHRoZSBjYWxsYmFjay4KKwkgKiAKKwkgKiBAdGhyb3dzIENvbW1hbmRFeGNlcHRpb24KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHZvaWQgc2VuZFByb3BlcnR5RGVjb3JhdG9ycyhPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvbW1hbmRFeGNlcHRpb24geworCQlQcm9wZXJ0eURlc2NyaXB0b3JbXSBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycygpOworCQlpZiAocHJvcGVydGllcyAhPSBudWxsICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkgeworCQkJLy8gTm93IHN0YXJ0IHdyaXRpbmcgdGhlIHJlY29yZHMuCisJCQlzdHJlYW0ud3JpdGVJbnQoSUJlYW5JbmZvSW50cm9zcGVjdGlvbkNvbnN0YW50cy5QUk9QRVJUWV9ERUNPUkFUT1JTX1NFTlQpOworCQkJc3RyZWFtLndyaXRlSW50KHByb3BlcnRpZXMubGVuZ3RoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykgeworCQkJCVByb3BlcnR5RGVzY3JpcHRvciBwZCA9IHByb3BlcnRpZXNbaV07CisJCQkJLy8gTXVjaCBvZiB0aGUgdHdvIHR5cGVzIGFyZSBjb21tb24sIHNvIGlmIGluZGV4ZWQsIGZpbGwgaW4gdGhlIGluZGV4IHBhcnQgYW5kIHRoZW4gcGFzcyBvbiB0byBwcm9wZXJ0eSBwYXJ0LgorCQkJCVByb3BlcnR5UmVjb3JkIHVzZXByID0gbnVsbDsKKwkJCQlpbnQgdXNlVHlwZSA9IDA7CisJCQkJaWYgKHBkLmdldENsYXNzKCkgPT0gSW5kZXhlZFByb3BlcnR5RGVzY3JpcHRvci5jbGFzcykgeworCQkJCQlJbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yIGlwZCA9IChJbmRleGVkUHJvcGVydHlEZXNjcmlwdG9yKSBwZDsKKwkJCQkJSW5kZXhlZFByb3BlcnR5UmVjb3JkIGlwciA9IG5ldyBJbmRleGVkUHJvcGVydHlSZWNvcmQoKTsKKwkJCQkJdXNlcHIgPSBpcHI7CisJCQkJCXVzZVR5cGUgPSBJTkRFWEVEUFJPUEVSVFlfUkVDT1JEX1RZUEU7CisJCQkJCWlwci5pbmRleGVkUmVhZE1ldGhvZCA9IGdldFJlZmxlY3RlZE1ldGhvZFJlY29yZChpcGQuZ2V0SW5kZXhlZFJlYWRNZXRob2QoKSk7CisJCQkJCWlwci5pbmRleGVkV3JpdGVNZXRob2QgPSBnZXRSZWZsZWN0ZWRNZXRob2RSZWNvcmQoaXBkLmdldEluZGV4ZWRXcml0ZU1ldGhvZCgpKTsKKwkJCQkJaXByLmluZGV4ZWRQcm9wZXJ0eVR5cGVOYW1lID0gZ2V0Q2xhc3NOYW1lKGlwZC5nZXRJbmRleGVkUHJvcGVydHlUeXBlKCkpOworCQkJCX0gZWxzZSB7CisJCQkJCXVzZXByID0gbmV3IFByb3BlcnR5UmVjb3JkKCk7CisJCQkJCXVzZVR5cGUgPSBQUk9QRVJUWV9SRUNPUkRfVFlQRTsKKwkJCQl9CisJCQkJdXNlcHIucHJvcGVydHlFZGl0b3JDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocGQuZ2V0UHJvcGVydHlFZGl0b3JDbGFzcygpKTsKKwkJCQl1c2Vwci5wcm9wZXJ0eVR5cGVOYW1lID0gZ2V0Q2xhc3NOYW1lKHBkLmdldFByb3BlcnR5VHlwZSgpKTsKKwkJCQl1c2Vwci5yZWFkTWV0aG9kID0gZ2V0UmVmbGVjdGVkTWV0aG9kUmVjb3JkKHBkLmdldFJlYWRNZXRob2QoKSk7CisJCQkJdXNlcHIud3JpdGVNZXRob2QgPSBnZXRSZWZsZWN0ZWRNZXRob2RSZWNvcmQoKHBkLmdldFdyaXRlTWV0aG9kKCkpKTsKKwkJCQl1c2Vwci5ib3VuZCA9IHBkLmlzQm91bmQoKTsKKwkJCQl1c2Vwci5jb25zdHJhaW5lZCA9IHBkLmlzQ29uc3RyYWluZWQoKTsKKwkJCQl1c2Vwci5kZXNpZ25UaW1lID0gbnVsbDsKKwkJCQl1c2Vwci5maWVsZCA9IG51bGw7CisJCQkJZmlsbChwZCwgdXNlcHIsIHVzZVR5cGUpOworCQkJCXN0cmVhbS53cml0ZU9iamVjdCh1c2Vwcik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxsZWQgYnkgSURFIHRvIHNlbmQgdGhlIG1ldGhvZCBkZWNvcmF0b3JzIGluZm9ybWF0aW9uIGJhY2sgdGhyb3VnaCB0aGUgY2FsbGJhY2suCisJICogCisJICogQHRocm93cyBDb21tYW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXB1YmxpYyB2b2lkIHNlbmRNZXRob2REZWNvcmF0b3JzKE9iamVjdE91dHB1dFN0cmVhbSBzdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29tbWFuZEV4Y2VwdGlvbiB7CisJCU1ldGhvZERlc2NyaXB0b3JbXSBtZXRob2RzID0gZ2V0TWV0aG9kRGVzY3JpcHRvcnMoKTsKKwkJaWYgKG1ldGhvZHMgIT0gbnVsbCAmJiBtZXRob2RzLmxlbmd0aCA+IDApIHsKKwkJCS8vIE5vdyBzdGFydCB3cml0aW5nIHRoZSByZWNvcmRzLgorCQkJc3RyZWFtLndyaXRlSW50KElCZWFuSW5mb0ludHJvc3BlY3Rpb25Db25zdGFudHMuTUVUSE9EX0RFQ09SQVRPUlNfU0VOVCk7CisJCQlzdHJlYW0ud3JpdGVJbnQobWV0aG9kcy5sZW5ndGgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CisJCQkJTWV0aG9kUmVjb3JkIG1yID0gbmV3IE1ldGhvZFJlY29yZCgpOworCQkJCWZpbGwobXIsIG1ldGhvZHNbaV0pOworCQkJCXN0cmVhbS53cml0ZU9iamVjdChtcik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBGaWxsIGluIGEgTWV0aG9kUmVjb3JkIGZyb20gdGhlIE1ldGhvZERlc2NyaXB0b3IuCisJICogQHBhcmFtIG1yCisJICogQHBhcmFtIG1kCisJICogCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHJvdGVjdGVkIHZvaWQgZmlsbChNZXRob2RSZWNvcmQgbXIsIE1ldGhvZERlc2NyaXB0b3IgbWQpIHsKKwkJbXIubWV0aG9kRm9yRGVzY3JpcHRvciA9IGdldFJlZmxlY3RlZE1ldGhvZFJlY29yZChtZC5nZXRNZXRob2QoKSk7CisJCVBhcmFtZXRlckRlc2NyaXB0b3JbXSBwYXJtcyA9IG1kLmdldFBhcmFtZXRlckRlc2NyaXB0b3JzKCk7CisJCWlmIChwYXJtcyA9PSBudWxsKQorCQkJbXIucGFyYW1ldGVycyA9IG51bGw7CisJCWVsc2UgeworCQkJbXIucGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJSZWNvcmRbcGFybXMubGVuZ3RoXTsKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgcGFybXMubGVuZ3RoOyBqKyspIHsKKwkJCQlQYXJhbWV0ZXJSZWNvcmQgcHIgPSBuZXcgUGFyYW1ldGVyUmVjb3JkKCk7CisJCQkJZmlsbChwYXJtc1tqXSwgcHIsIFBBUkFNRVRFUl9SRUNPUkRfVFlQRSk7CisJCQkJbXIucGFyYW1ldGVyc1tqXSA9IHByOworCQkJfQorCQl9CisJCWZpbGwobWQsIG1yLCBNRVRIT0RfUkVDT1JEX1RZUEUpOworCX0KKworCS8qKgorCSAqIENhbGxlZCBieSBJREUgdG8gc2VuZCB0aGUgZXZlbnQgc2V0IGRlY29yYXRvcnMgaW5mb3JtYXRpb24gYmFjayB0aHJvdWdoIHRoZSBjYWxsYmFjay4KKwkgKiAKKwkgKiBAdGhyb3dzIENvbW1hbmRFeGNlcHRpb24KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogQHNpbmNlIDEuMS4wCisJICovCisJcHVibGljIHZvaWQgc2VuZEV2ZW50RGVjb3JhdG9ycyhPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtICkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb21tYW5kRXhjZXB0aW9uIHsKKwkJRXZlbnRTZXREZXNjcmlwdG9yW10gZXZlbnRzID0gZ2V0RXZlbnRTZXREZXNjcmlwdG9ycygpOworCQlpZiAoZXZlbnRzICE9IG51bGwgJiYgZXZlbnRzLmxlbmd0aCA+IDApIHsKKwkJCS8vIE5vdyBzdGFydCB3cml0aW5nIHRoZSByZWNvcmRzLgorCQkJc3RyZWFtLndyaXRlSW50KElCZWFuSW5mb0ludHJvc3BlY3Rpb25Db25zdGFudHMuRVZFTlRfREVDT1JBVE9SU19TRU5UKTsKKwkJCXN0cmVhbS53cml0ZUludChldmVudHMubGVuZ3RoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJRXZlbnRTZXREZXNjcmlwdG9yIGVkID0gZXZlbnRzW2ldOworCQkJCUV2ZW50U2V0UmVjb3JkIGVyID0gbmV3IEV2ZW50U2V0UmVjb3JkKCk7CisJCQkJZXIuYWRkTGlzdGVuZXJNZXRob2QgPSBnZXRSZWZsZWN0ZWRNZXRob2RSZWNvcmQoZWQuZ2V0QWRkTGlzdGVuZXJNZXRob2QoKSk7CisJCQkJTWV0aG9kRGVzY3JpcHRvcltdIG1kcyA9IGVkLmdldExpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMoKTsKKwkJCQlpZiAobWRzID09IG51bGwpCisJCQkJCWVyLmxpc3RlbmVyTWV0aG9kRGVzY3JpcHRvcnMgPSBudWxsOworCQkJCWVsc2UgeworCQkJCQllci5saXN0ZW5lck1ldGhvZERlc2NyaXB0b3JzID0gbmV3IE1ldGhvZFJlY29yZFttZHMubGVuZ3RoXTsKKwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtZHMubGVuZ3RoOyBqKyspIHsKKwkJCQkJCWZpbGwoZXIubGlzdGVuZXJNZXRob2REZXNjcmlwdG9yc1tqXSA9IG5ldyBNZXRob2RSZWNvcmQoKSwgbWRzW2pdKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllci5saXN0ZW5lclR5cGVOYW1lID0gZ2V0Q2xhc3NOYW1lKGVkLmdldExpc3RlbmVyVHlwZSgpKTsKKwkJCQllci5yZW1vdmVMaXN0ZW5lck1ldGhvZCA9IGdldFJlZmxlY3RlZE1ldGhvZFJlY29yZChlZC5nZXRSZW1vdmVMaXN0ZW5lck1ldGhvZCgpKTsKKwkJCQllci5pbkRlZmF1bHRFdmVudFNldCA9IGVkLmlzSW5EZWZhdWx0RXZlbnRTZXQoKTsKKwkJCQllci51bmljYXN0ID0gZWQuaXNVbmljYXN0KCk7CisJCQkJZXIuZXZlbnRBZGFwdGVyQ2xhc3NOYW1lID0gbnVsbDsKKwkJCQlmaWxsKGVkLCBlciwgRVZFTlRTRVRfUkVDT1JEX1RZUEUpOworCQkJCXN0cmVhbS53cml0ZU9iamVjdChlcik7CisJCQl9CisJCX0KKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBCRUFOX1JFQ09SRF9UWVBFID0gMDsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1JFQ09SRF9UWVBFID0gMTsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOREVYRURQUk9QRVJUWV9SRUNPUkRfVFlQRSA9IDI7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUVUSE9EX1JFQ09SRF9UWVBFID0gMzsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBQQVJBTUVURVJfUkVDT1JEX1RZUEUgPSA0OworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVWRU5UU0VUX1JFQ09SRF9UWVBFID0gNTsKKworCS8qKgorCSAqIEZpbGwgaW4gdGhlIHNwZWNpYWwgYXR0ci92YWx1ZXMgZm9yIHRoZSBnaXZlbiByZWNvcmQgdHlwZS4gVGhlIGRlZmF1bHQgaGFuZGxlcyB0aGUgc3RhbmRhcmQgb25lcy4KKwkgKiAKKwkgKiBAcGFyYW0gcmVjb3JkCisJICogQHBhcmFtIGRlc2NyCisJICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUKKwkgKiBAcGFyYW0gcmVjb3JkVHlwZQorCSAqICAgICAgICAgICAgdHlwZSBvZiByZWNvcmQgdWx0aW1hdGVseSBiZWluZyBwcm9jZXNzZWQuCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGF0dHJpYnV0ZSBpcyBhIHNwZWNpYWwgb25lIGFuZCBwcm9jZXNzZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3Qgc3BlY2lhbCBhbmQgc2hvdWxkIGJlIGFkZGVkIHRvCisJICogICAgICAgICBhdHRyaWJ1dGVzIGxpc3QgdHJhbnNmZXJyZWQgdG8gSURFLgorCSAqIAorCSAqIEBzZWUgTW9kZWxpbmdCZWFuSW5mbyNQUk9QRVJUWV9SRUNPUkRfVFlQRQorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGZpbGxGcm9tQXR0cmlidXRlcyhGZWF0dXJlUmVjb3JkIHJlY29yZCwgRmVhdHVyZURlc2NyaXB0b3IgZGVzY3IsIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBpbnQgcmVjb3JkVHlwZSkgeworCQlzd2l0Y2ggKHJlY29yZFR5cGUpIHsKKwkJCWNhc2UgSU5ERVhFRFBST1BFUlRZX1JFQ09SRF9UWVBFOgorCQkJY2FzZSBQUk9QRVJUWV9SRUNPUkRfVFlQRToKKwkJCQlpZiAoQmFzZUJlYW5JbmZvLkRFU0lHTlRJTUVQUk9QRVJUWS5lcXVhbHMoYXR0cmlidXRlTmFtZSkpIHsKKwkJCQkJKChQcm9wZXJ0eVJlY29yZCkgcmVjb3JkKS5kZXNpZ25UaW1lID0gKEJvb2xlYW4pIGRlc2NyLmdldFZhbHVlKGF0dHJpYnV0ZU5hbWUpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9IGVsc2UgaWYgKEJhc2VCZWFuSW5mby5GSUVMRFBST1BFUlRZLmVxdWFscyhhdHRyaWJ1dGVOYW1lKSkgeworCQkJCQlGaWVsZCBmID0gKEZpZWxkKSBkZXNjci5nZXRWYWx1ZShhdHRyaWJ1dGVOYW1lKTsKKwkJCQkJLy8gV2UgaGF2ZSBhIGZpZWxkLCBzZXQgdGhlIHByb3BlcnR5IHR5cGUgdG8gdGhpcyBzaW5jZSB3ZSBjb3VsZG4ndCBjb3JyZWN0bHkgY3JlYXRlIHRoaXMgb3RoZXJ3aXNlLgorCQkJCQlQcm9wZXJ0eVJlY29yZCBwciA9IChQcm9wZXJ0eVJlY29yZCkgcmVjb3JkOworCQkJCQlwci5wcm9wZXJ0eVR5cGVOYW1lID0gZ2V0Q2xhc3NOYW1lKGYuZ2V0VHlwZSgpKTsKKwkJCQkJcHIuZmllbGQgPSBnZXRSZWZsZWN0ZWRGaWVsZFJlY29yZChmKTsKKwkJCQkJcHIucmVhZE1ldGhvZCA9IG51bGw7CS8vIE5lZWQgdG8gd2lwZSBvdXQgb3VyIGR1bW15LgorCQkJCQlwci53cml0ZU1ldGhvZCA9IG51bGw7CS8vIE9yIGlmIGl0IHNldCwgbm90IHZhbGlkIGZvciBhIGZpZWxkLgorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEVWRU5UU0VUX1JFQ09SRF9UWVBFOgorCQkJCWlmIChCYXNlQmVhbkluZm8uRVZFTlRBREFQVEVSQ0xBU1MuZXF1YWxzKGF0dHJpYnV0ZU5hbWUpKSB7CisJCQkJCSgoRXZlbnRTZXRSZWNvcmQpIHJlY29yZCkuZXZlbnRBZGFwdGVyQ2xhc3NOYW1lID0gKFN0cmluZykgZGVzY3IuZ2V0VmFsdWUoYXR0cmlidXRlTmFtZSk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7IC8vIERpZG4ndCBoYW5kbGUgaXQuCisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEZpbGwgaW4gdGhlIGZlYXR1cmUgcG9ydGlvbiBvZiB0aGUgRGVzY3JpcHRvciBpbnRvIHRoZSByZWNvcmQuIFdlIGNhbiBiZSByZXVzaW5nIHNvbWUgcmVjb3JkcyAoc28gd2UgZG9uJ3Qga2VlcCBhbGxvY2F0aW5nIHdoZW4gbm90IG5lZWRlZCksIHNvCisJICogd2Ugd2lsbCBudWxsIG91dCB1bnNldCBmaWVsZHMuCisJICogCisJICogQHBhcmFtIGRlc2NyCisJICogQHBhcmFtIHJlY29yZAorCSAqIEBwYXJhbSByZWNvcmRUeXBlCisJICogICAgICAgICAgICB0eXBlIG9mIHJlY29yZCB1bHRpbWF0ZWx5IGJlaW5nIHByb2Nlc3NlZC4gVXNlZCBmb3IgZmlsbEZyb21BdHRyaWJ1dGVzLgorCSAqIAorCSAqIEBzZWUgTW9kZWxpbmdCZWFuSW5mbyNQUk9QRVJUWV9SRUNPUkRfVFlQRQorCSAqIEBzaW5jZSAxLjEuMAorCSAqLworCXByb3RlY3RlZCB2b2lkIGZpbGwoRmVhdHVyZURlc2NyaXB0b3IgZGVzY3IsIEZlYXR1cmVSZWNvcmQgcmVjb3JkLCBpbnQgcmVjb3JkVHlwZSkgeworCQlyZWNvcmQubmFtZSA9IGRlc2NyLmdldE5hbWUoKTsKKwkJU3RyaW5nIGRuID0gZGVzY3IuZ2V0RGlzcGxheU5hbWUoKTsKKwkJaWYgKCFyZWNvcmQubmFtZS5lcXVhbHMoZG4pKQorCQkJcmVjb3JkLmRpc3BsYXlOYW1lID0gZG47IC8vIGRpc3BsYXkgbmFtZSByZXR1cm5zIG5hbWUgaWYgZGlzcGxheSBuYW1lIG5vdCBzZXQuIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBpdCBpZiBpZGVudGljYWwuIChOb3RlIHNvbWUgQmVhbmluZm9zIGFyZSBzZXR0aW5nIGRpc3BsYXluYW1lIHRoZSBzYW1lIHRleHQgYnV0IG5vdCBzYW1lIHN0cmluZykuCisJCWVsc2UKKwkJCXJlY29yZC5kaXNwbGF5TmFtZSA9IG51bGw7CisJCVN0cmluZyBzaGQgPSBkZXNjci5nZXRTaG9ydERlc2NyaXB0aW9uKCk7CisJCWlmICghZG4uZXF1YWxzKHNoZCkpCisJCQlyZWNvcmQuc2hvcnREZXNjcmlwdGlvbiA9IHNoZDsgLy8gc2hvcnQgZGVzY3JpcHRpb24gcmV0dXJucyBkaXNwbGF5bmFtZSBpZiBzaG9ydCBkZXNjcmlwdGlvbiBub3Qgc2V0LiBXZSBkb24ndCB3YW50IHRvIHNlbmQgaXQgaWYKKwkJCQkJCQkJCQkgICAvLyBpZGVudGljYWwuCisJCWVsc2UKKwkJCXJlY29yZC5zaG9ydERlc2NyaXB0aW9uID0gbnVsbDsKKwkJcmVjb3JkLmV4cGVydCA9IGRlc2NyLmlzRXhwZXJ0KCk7CisJCXJlY29yZC5oaWRkZW4gPSBkZXNjci5pc0hpZGRlbigpOworCQlyZWNvcmQucHJlZmVycmVkID0gZGVzY3IuaXNQcmVmZXJyZWQoKTsKKwkJcmVjb3JkLmNhdGVnb3J5ID0gbnVsbDsgLy8gQ2xlYXIgb3V0IGluIGNhc2Ugbm90IHNldC4KKwkJRW51bWVyYXRpb24gYXR0cnMgPSBkZXNjci5hdHRyaWJ1dGVOYW1lcygpOworCQlpZiAoYXR0cnMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCS8vIFdlIGRvbid0IGhhdmUgYSB3YXkgb2Yga25vd2luZyBob3cgbWFueSB0aGVyZSBhcmUgYWhlYWQgb2YgdGltZSwgc28gd2Ugd2lsbCBidWlsZCBpbnRvIGxpc3RzIGFuZCB0aGVuIHR1cm4gaW50byBhcnJheXMgYXQgdGhlIGVuZC4KKwkJCUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisJCQlMaXN0IHZhbHVlcyA9IG5ldyBBcnJheUxpc3QoKTsKKwkJCXdoaWxlIChhdHRycy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJCVN0cmluZyBhdHRyTmFtZSA9IChTdHJpbmcpIGF0dHJzLm5leHRFbGVtZW50KCk7CisJCQkJaWYgKGF0dHJOYW1lLmVxdWFscyhJQmFzZUJlYW5JbmZvQ29uc3RhbnRzLkNBVEVHT1JZKSkKKwkJCQkJcmVjb3JkLmNhdGVnb3J5ID0gKFN0cmluZykgZGVzY3IuZ2V0VmFsdWUoSUJhc2VCZWFuSW5mb0NvbnN0YW50cy5DQVRFR09SWSk7CisJCQkJZWxzZSBpZiAoYXR0ck5hbWUuZXF1YWxzKEJhc2VCZWFuSW5mby5QUkVGRVJSRUQpKSB7CisJCQkJCS8vIEEgYnVnIGluIEphdmEgMS4zLCBkb2luZyBzZXRQcmVmZXJyZWQgd2FzIGxvc3QuIFNvIGZvciB0aG9zZSBhbHNvIHN0b3JlZCBpdCBpbiBhdHRyaWJ1dGVzLiBTbyBpZiBzZXQgaGVyZSwgdGhlbiB1c2UgaXQuCisJCQkJCXJlY29yZC5wcmVmZXJyZWQgPSAoKEJvb2xlYW4pIGRlc2NyLmdldFZhbHVlKEJhc2VCZWFuSW5mby5QUkVGRVJSRUQpKS5ib29sZWFuVmFsdWUoKTsKKwkJCQl9IGVsc2UgaWYgKCFmaWxsRnJvbUF0dHJpYnV0ZXMocmVjb3JkLCBkZXNjciwgYXR0ck5hbWUsIHJlY29yZFR5cGUpKSB7CisJCQkJCS8vIEp1c3QgY29weSBhY2Nyb3NzLiBGaWxsZnJvbUF0dHJpYnV0ZXMgZGlkbid0IGhhbmRsZSBpdC4KKwkJCQkJRmVhdHVyZUF0dHJpYnV0ZVZhbHVlIGZ2ID0gbmV3IEZlYXR1cmVBdHRyaWJ1dGVWYWx1ZSgpOworCQkJCQlmdi5zZXRWYWx1ZShkZXNjci5nZXRWYWx1ZShhdHRyTmFtZSkpOworCQkJCQluYW1lcy5hZGQoYXR0ck5hbWUpOworCQkJCQl2YWx1ZXMuYWRkKGZ2KTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIW5hbWVzLmlzRW1wdHkoKSkgeworCQkJCXJlY29yZC5hdHRyaWJ1dGVOYW1lcyA9IChTdHJpbmdbXSkgbmFtZXMudG9BcnJheShuZXcgU3RyaW5nW25hbWVzLnNpemUoKV0pOworCQkJCXJlY29yZC5hdHRyaWJ1dGVWYWx1ZXMgPSAoRmVhdHVyZUF0dHJpYnV0ZVZhbHVlW10pIHZhbHVlcy50b0FycmF5KG5ldyBGZWF0dXJlQXR0cmlidXRlVmFsdWVbdmFsdWVzLnNpemUoKV0pOworCQkJfSBlbHNlIHsKKwkJCQlyZWNvcmQuYXR0cmlidXRlTmFtZXMgPSBudWxsOworCQkJCXJlY29yZC5hdHRyaWJ1dGVWYWx1ZXMgPSBudWxsOworCQkJfQorCQl9IGVsc2UgeworCQkJcmVjb3JkLmF0dHJpYnV0ZU5hbWVzID0gbnVsbDsKKwkJCXJlY29yZC5hdHRyaWJ1dGVWYWx1ZXMgPSBudWxsOworCQl9CisKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgY2xhc3NuYW1lIGZyb20gdGhlIGNsYXNzLiBJZiBjbGFzc3MgaXMgbnVsbCwgdGhlbiB0aGlzIHJldHVybiBudWxsLgorCSAqLworCXByaXZhdGUgU3RyaW5nIGdldENsYXNzTmFtZShDbGFzcyBjbGFzc3MpIHsKKwkJcmV0dXJuIGNsYXNzcyAhPSBudWxsID8gY2xhc3NzLmdldE5hbWUoKSA6IG51bGw7CisJfQorCisJcHJpdmF0ZSBSZWZsZWN0TWV0aG9kUmVjb3JkIGdldFJlZmxlY3RlZE1ldGhvZFJlY29yZChNZXRob2QgbWV0aG9kKSB7CisJCWlmIChtZXRob2QgIT0gbnVsbCkgeworCQkJUmVmbGVjdE1ldGhvZFJlY29yZCBybXIgPSBuZXcgUmVmbGVjdE1ldGhvZFJlY29yZCgpOworCQkJcm1yLmNsYXNzTmFtZSA9IGdldENsYXNzTmFtZShtZXRob2QuZ2V0RGVjbGFyaW5nQ2xhc3MoKSk7CisJCQlybXIubWV0aG9kTmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7CisJCQlDbGFzc1tdIHBhcm1UeXBlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworCQkJaWYgKHBhcm1UeXBlcy5sZW5ndGggPiAwKSB7CisJCQkJcm1yLnBhcmFtZXRlclR5cGVOYW1lcyA9IG5ldyBTdHJpbmdbcGFybVR5cGVzLmxlbmd0aF07CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJtVHlwZXMubGVuZ3RoOyBpKyspIHsKKwkJCQkJcm1yLnBhcmFtZXRlclR5cGVOYW1lc1tpXSA9IGdldENsYXNzTmFtZShwYXJtVHlwZXNbaV0pOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBybXI7CisJCX0gZWxzZQorCQkJcmV0dXJuIG51bGw7CisJfQorCQorCXByaXZhdGUgUmVmbGVjdEZpZWxkUmVjb3JkIGdldFJlZmxlY3RlZEZpZWxkUmVjb3JkKEZpZWxkIGZpZWxkKSB7CisJCWlmIChmaWVsZCAhPSBudWxsKSB7CisJCQlSZWZsZWN0RmllbGRSZWNvcmQgcmYgPSBuZXcgUmVmbGVjdEZpZWxkUmVjb3JkKCk7CisJCQlyZi5jbGFzc05hbWUgPSBnZXRDbGFzc05hbWUoZmllbGQuZ2V0RGVjbGFyaW5nQ2xhc3MoKSk7CisJCQlyZi5maWVsZE5hbWUgPSBmaWVsZC5nZXROYW1lKCk7CisJCQlyZi5yZWFkT25seSA9IE1vZGlmaWVyLmlzRmluYWwoZmllbGQuZ2V0TW9kaWZpZXJzKCkpOworCQkJcmV0dXJuIHJmOworCQl9IGVsc2UKKwkJCXJldHVybiBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01vZGVsaW5nQmVhbkluZm8xNS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vTW9kZWxpbmdCZWFuSW5mbzE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkMmNiNgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01vZGVsaW5nQmVhbkluZm8xNS5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnZtOworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYmVhbnMuQmVhbkluZm87CisKKy8qKgorICogVGhpcyB3YXMgc3VwcG9zZWQgdG8gZm9yIDEuNCBvciBhYm92ZSB3aGVyZSBpdCBjYW4gdXNlIGlkZW50aXR5CisgKiB0byB0ZXN0IGZvciBpbmhlcml0ZWQgZmVhdHVyZXMsIGJ1dCBpdCBzdGlsbCBpcyBub3QgY29ycmVjdAorICogaW4gMS40LiBTZWUgdGhlIGhlYWRlciBjb21tZW50cyBpbiBNb2RlbGluZ0JlYW5JbmZvLgorICogQHNlZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udm0uTW9kZWxpbmdCZWFuSW5mbworICovCitwdWJsaWMgY2xhc3MgTW9kZWxpbmdCZWFuSW5mbzE1IGV4dGVuZHMgTW9kZWxpbmdCZWFuSW5mbyB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciBmb3IgTW9kZWxpbmdCZWFuSW5mbzE1LgorCSAqIEBwYXJhbSBiZWFuSW5mbworCSAqLworCXB1YmxpYyBNb2RlbGluZ0JlYW5JbmZvMTUoQmVhbkluZm8gYmVhbkluZm8sIGludCBkb0ZsYWdzKSB7CisJCXN1cGVyKGJlYW5JbmZvLCBkb0ZsYWdzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciBmb3IgTW9kZWxpbmdCZWFuSW5mbzE1LgorCSAqIEBwYXJhbSBiZWFuSW5mbworCSAqIEBwYXJhbSBzdXBlckJlYW5JbmZvCisJICovCisJcHVibGljIE1vZGVsaW5nQmVhbkluZm8xNShCZWFuSW5mbyBiZWFuSW5mbywgQmVhbkluZm8gc3VwZXJCZWFuSW5mbywgaW50IGRvRmxhZ3MpIHsKKwkJc3VwZXIoYmVhbkluZm8sIHN1cGVyQmVhbkluZm8sIGRvRmxhZ3MpOworCX0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01vZGVsaW5nQmVhbkluZm9QcmUxNS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vTW9kZWxpbmdCZWFuSW5mb1ByZTE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyZDg1YwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL01vZGVsaW5nQmVhbkluZm9QcmUxNS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnZtOworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYmVhbnMuQmVhbkluZm87CisKKy8qKgorICogVGhpcyBpcyB0aGUgbW9kZWxpbmcgQmVhbkluZm8gZm9yIFByZS1KREsgMS40LgorICovCitwdWJsaWMgY2xhc3MgTW9kZWxpbmdCZWFuSW5mb1ByZTE1IGV4dGVuZHMgTW9kZWxpbmdCZWFuSW5mbyB7CisKKwlwdWJsaWMgTW9kZWxpbmdCZWFuSW5mb1ByZTE1KEJlYW5JbmZvIGJlYW5JbmZvLCBpbnQgZG9GbGFncykgeworCQlzdXBlcihiZWFuSW5mbywgZG9GbGFncyk7CisJfQorCisJcHVibGljIE1vZGVsaW5nQmVhbkluZm9QcmUxNShCZWFuSW5mbyBiZWFuSW5mbywgQmVhbkluZm8gc3VwZXJCZWFuSW5mbywgaW50IGRvRmxhZ3MpIHsKKwkJc3VwZXIoYmVhbkluZm8sIHN1cGVyQmVhbkluZm8sIGRvRmxhZ3MpOworCX0KK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL1BhcmFtZXRlckRlc2NyaXB0b3JFcXVhbGl0eS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8udm0vdm1fYmVhbmluZm92bS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdm0vUGFyYW1ldGVyRGVzY3JpcHRvckVxdWFsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwOWZjZAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL1BhcmFtZXRlckRlc2NyaXB0b3JFcXVhbGl0eS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnZtOworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYmVhbnMuKjsKKy8qKgorICogUGFyYW1ldGVyRGVzY3JpcHRvciBlcXVhbGl0eSB0ZXN0ZXIKKyAqLworcHVibGljIGNsYXNzIFBhcmFtZXRlckRlc2NyaXB0b3JFcXVhbGl0eSBleHRlbmRzIEZlYXR1cmVEZXNjcmlwdG9yRXF1YWxpdHkgeworCQorCXN0YXRpYyB2b2lkIElOSVQoKSB7CisJCXRyeSB7CisJCQlNQVBfRVFVQUxJVFkucHV0KFBhcmFtZXRlckRlc2NyaXB0b3IuY2xhc3MsIChQYXJhbWV0ZXJEZXNjcmlwdG9yRXF1YWxpdHkuY2xhc3MpLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1tdIHtQYXJhbWV0ZXJEZXNjcmlwdG9yLmNsYXNzfSkpOworCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeworCQl9CisJfQkKKwkKKwlwdWJsaWMgUGFyYW1ldGVyRGVzY3JpcHRvckVxdWFsaXR5KCkgeworCX0KKwkKKwlwdWJsaWMgUGFyYW1ldGVyRGVzY3JpcHRvckVxdWFsaXR5KFBhcmFtZXRlckRlc2NyaXB0b3IgZGVzY3IpIHsKKwkJc3VwZXIoZGVzY3IpOworCX0JCisKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLmJlYW5pbmZvLnZtL3ZtX2JlYW5pbmZvdm0vb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3ZtL1Byb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9Qcm9wZXJ0eURlc2NyaXB0b3JFcXVhbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDVlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS5iZWFuaW5mby52bS92bV9iZWFuaW5mb3ZtL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby92bS9Qcm9wZXJ0eURlc2NyaXB0b3JFcXVhbGl0eS5qYXZhCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnZtOworLyoKKworCisgKi8KKworaW1wb3J0IGphdmEuYmVhbnMuKjsKKy8qKgorICogUHJvcGVydHlEZXNjcmlwdG9yIGVxdWFsaXR5IHRlc3RlcgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yRXF1YWxpdHkgZXh0ZW5kcyBGZWF0dXJlRGVzY3JpcHRvckVxdWFsaXR5IHsJCisJCisJcHVibGljIFByb3BlcnR5RGVzY3JpcHRvckVxdWFsaXR5KCkgeworCX0KKwkKKwlwdWJsaWMgUHJvcGVydHlEZXNjcmlwdG9yRXF1YWxpdHkoUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyKSB7CisJCXN1cGVyKGRlc2NyKTsKKwl9CQorCS8qKgorCSAqIENhbGN1bGF0ZSB0aGUgaGFzaGNvZGUgZm9yIHRoZSBjdXJyZW50IGZlYXR1cmUsIGFkZCB0aGlzCisJICogdG8gdGhlIGhhc2hjb2RlIHJlY2VpdmVkIGZyb20gc3VwZXIuY2FsY3VsYXRlSGFzaENvZGUKKwkgKiBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUuCisJICoKKwkgKiBOT1RFOiBmb3Igc3ViY2xhc3NlcywgaXQgaXMgTUFORElUT1JZIHRoYXQgdGhlIGZpcnN0IGxpbmUgYmU6CisJICogICAgICAgICBpbnQgaGFzaGNvZGUgPSBzdXBlci5jYWxjdWxhdGVIYXNoQ29kZSgpOworCSAqICAgICAgIGFuZCB0aGUgbGFzdCBsaW5lIGJlOgorCSAqICAgICAgICAgcmV0dXJuIGhhc2hjb2RlKjMxICsgKHlvdXIgY2FsY3VsYXRlZCBoYXNoY29kZSBmb3IganVzdCB0aGlzIHN1YmNsYXNzKTsKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGNhbGN1bGF0ZUhhc2hDb2RlKCkgeworCQlpbnQgaGFzaGNvZGUgPSBzdXBlci5jYWxjdWxhdGVIYXNoQ29kZSgpOworCQlQcm9wZXJ0eURlc2NyaXB0b3IgcGQgPSAoUHJvcGVydHlEZXNjcmlwdG9yKSBmRmVhdHVyZTsKKwkJaW50IGhjID0gMDsKKwkJaWYgKHBkLmdldFByb3BlcnR5RWRpdG9yQ2xhc3MoKSAhPSBudWxsKQorCQkJaGMgKz0gcGQuZ2V0UHJvcGVydHlFZGl0b3JDbGFzcygpLmhhc2hDb2RlKCk7CisJCWlmIChwZC5nZXRQcm9wZXJ0eVR5cGUoKSAhPSBudWxsKQorCQkJaGMgKz0gcGQuZ2V0UHJvcGVydHlUeXBlKCkuaGFzaENvZGUoKTsKKwkJaWYgKHBkLmdldFJlYWRNZXRob2QoKSAhPSBudWxsKQorCQkJaGMgKz0gcGQuZ2V0UmVhZE1ldGhvZCgpLmhhc2hDb2RlKCk7CisJCWlmIChwZC5nZXRXcml0ZU1ldGhvZCgpICE9IG51bGwpCisJCQloYyArPSBwZC5nZXRXcml0ZU1ldGhvZCgpLmhhc2hDb2RlKCk7CisJCQkKKwkJaGMgKz0gKHBkLmlzQm91bmQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0UpLmhhc2hDb2RlKCk7CisJCWhjICs9IChwZC5pc0NvbnN0cmFpbmVkKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFKS5oYXNoQ29kZSgpOwkJCisJCQkJCQkKKwkJcmV0dXJuIGhhc2hjb2RlKjMxICsgaGM7CisJfQorCisJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKwkJaWYgKGlkZW50aXR5VGVzdChvYmopKQorCQkJcmV0dXJuIHRydWU7CisJCQkKKwkJaWYgKCFzdXBlci5lcXVhbHMob2JqKSkKKwkJCXJldHVybiBmYWxzZTsKKyAJCisJCVByb3BlcnR5RGVzY3JpcHRvciBvcCA9IChQcm9wZXJ0eURlc2NyaXB0b3IpICgoRmVhdHVyZURlc2NyaXB0b3JFcXVhbGl0eSkgb2JqKS5mRmVhdHVyZTsKKwkJUHJvcGVydHlEZXNjcmlwdG9yIGZwID0gKFByb3BlcnR5RGVzY3JpcHRvcikgZkZlYXR1cmU7CisgCQkKKwkJaWYgKG9wLmdldFByb3BlcnR5RWRpdG9yQ2xhc3MoKSAhPSBmcC5nZXRQcm9wZXJ0eUVkaXRvckNsYXNzKCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmIChvcC5nZXRSZWFkTWV0aG9kKCkgIT0gZnAuZ2V0UmVhZE1ldGhvZCgpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAob3AuZ2V0V3JpdGVNZXRob2QoKSAhPSBmcC5nZXRXcml0ZU1ldGhvZCgpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAob3AuaXNCb3VuZCgpICE9IGZwLmlzQm91bmQoKSkKKwkJCXJldHVybiBmYWxzZTsJCQkJCisJCWlmIChvcC5pc0NvbnN0cmFpbmVkKCkgIT0gZnAuaXNDb25zdHJhaW5lZCgpKQorCQkJcmV0dXJuIGZhbHNlOwkJCQkJCQkJCQkJCQkJCisJCQkKKwkJcmV0dXJuIHRydWU7CisJfQorCisKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5jdnNpZ25vcmUgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWE3MTRiLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi1qYXZhQ29tcGlsZXIuLi5hcmdzCi1AZG90Ci1vcmcuZWNsaXBzZS5qZW0udWlfMi4wLjEwMC4yMDA4MDYwMzEzMDQuamFyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS8ub3B0aW9ucyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5vcHRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2UwNzQwLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5vcHRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vcmcuZWNsaXBzZS5qZW0udWkvZGVidWcvbG9ndHJhY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamVtLnVpL2RlYnVnL2xvZ3RyYWNlZmlsZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZW0udWkvZGVidWcvbG9nbGV2ZWw9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTYwNTQ4Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBBcHIgMTUgMjE6MTU6MzYgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjZTJmZS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZW0udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDIuMC4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkuY29yZS5KRU1VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpLAotIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5jb3JlLAotIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5wcm94eSwKLSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkucHJveHkucmVtb3RlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS5iZWFuaW5mbztidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnByb3h5O2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuZGVidWcudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotICBvcmcuZWNsaXBzZS51aS5lZGl0b3JzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQklMaXN0RWxlbWVudFNvcnRlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQklMaXN0RWxlbWVudFNvcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDU0NTQ3Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JJTGlzdEVsZW1lbnRTb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotLyoKLQotCi0gKi8KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb3JlLkJlYW5pbmZvRW50cnk7Ci0KLS8qKgotICogU29ydGVyIGZvciBzb3J0aW5nIEJQQmVhbmluZm9MaXN0RWxlbWVudHMgd2l0aGluIHRoZSBtYWluIGxpc3QuCi0gKiAKLSAqIEB2ZXJzaW9uIAkxLjAKLSAqIEBhdXRob3IKLSAqLwotcHVibGljIGNsYXNzIEJJTGlzdEVsZW1lbnRTb3J0ZXIgZXh0ZW5kcyBWaWV3ZXJTb3J0ZXIgewotCQotCS8qCi0JICogQHNlZSBWaWV3ZXJTb3J0ZXIjY2F0ZWdvcnkoT2JqZWN0KQotCSAqLwotCXB1YmxpYyBpbnQgY2F0ZWdvcnkoT2JqZWN0IG9iaikgewotCQlpZiAob2JqIGluc3RhbmNlb2YgQlBCZWFuaW5mb0xpc3RFbGVtZW50KSB7Ci0JCQlCUEJlYW5pbmZvTGlzdEVsZW1lbnQgZWxlbWVudCA9IChCUEJlYW5pbmZvTGlzdEVsZW1lbnQpIG9iajsKLQkJCQotCQkJc3dpdGNoICgoKEJlYW5pbmZvRW50cnkpIGVsZW1lbnQuZ2V0RW50cnkoKSkuZ2V0S2luZCgpKSB7Ci0JCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfTElCUkFSWToKLQkJCQlyZXR1cm4gNDsKLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9QUk9KRUNUOgotCQkJCXJldHVybiAxOwotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1NPVVJDRToKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9WQVJJQUJMRToKLQkJCQlyZXR1cm4gMzsKLQkJCWNhc2UgQmVhbmluZm9FbnRyeS5CSUVfUExVR0lOOgotCQkJCXJldHVybiA1OwotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX0NPTlRBSU5FUjoKLQkJCQlyZXR1cm4gMjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gc3VwZXIuY2F0ZWdvcnkob2JqKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgVmlld2VyU29ydGVyI2NvbXBhcmUoKQotCSAqLwkKLQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpIHsKLQkJaW50IGNhdDEgPSBjYXRlZ29yeShlMSk7Ci0JCWludCBjYXQyID0gY2F0ZWdvcnkoZTIpOwotCQotCQlpZiAoY2F0MSAhPSBjYXQyKQotCQkJcmV0dXJuIGNhdDEgLSBjYXQyOwotCQkJCi0JCWlmICgoZTEgaW5zdGFuY2VvZiBCUEJlYW5pbmZvTGlzdEVsZW1lbnQpICYmIChlMiBpbnN0YW5jZW9mIEJQQmVhbmluZm9MaXN0RWxlbWVudCkpIHsKLQkJCUJlYW5pbmZvRW50cnkgcDEgPSAoQmVhbmluZm9FbnRyeSkgKChCUEJlYW5pbmZvTGlzdEVsZW1lbnQpIGUxKS5nZXRFbnRyeSgpOwotCQkJQmVhbmluZm9FbnRyeSBwMiA9IChCZWFuaW5mb0VudHJ5KSAoKEJQQmVhbmluZm9MaXN0RWxlbWVudCkgZTIpLmdldEVudHJ5KCk7Ci0JCQkKLQkJCS8vIENvbXBhcmUgcGF0aHMKLQkJCXJldHVybiBwMS5nZXRQYXRoKCkudG9TdHJpbmcoKS5jb21wYXJlVG8ocDIuZ2V0UGF0aCgpLnRvU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybiBzdXBlci5jb21wYXJlKHZpZXdlciwgZTEsIGUyKTsKLQl9CQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQlBCZWFuaW5mb0xpc3RFbGVtZW50LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CUEJlYW5pbmZvTGlzdEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJkMTI1OS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CUEJlYW5pbmZvTGlzdEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotLyoKLQotCi0gKi8KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb3JlLkJlYW5pbmZvRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvcmUuU2VhcmNocGF0aEVudHJ5OwotCi0vKioKLSAqIEB2ZXJzaW9uIAkxLjAKLSAqIEBhdXRob3IKLSAqLwotcHVibGljIGNsYXNzIEJQQmVhbmluZm9MaXN0RWxlbWVudCBleHRlbmRzIEJQTGlzdEVsZW1lbnQgewotCi0JQlBTZWFyY2hMaXN0RWxlbWVudFtdIHNlYXJjaHBhdGhzOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBCUEJlYW5pbmZvTGlzdEVsZW1lbnQuCi0JICogVGhlIHNlYXJjaFBhdGhzIGlzIHRoZSBpbml0aWFsIGxpc3QsIGl0IGlzIGFzc3VtZWQgdGhhdAotCSAqIHRoZSBiZWFuaW5mb0VudHJ5IGhhcyB0aGVzZSBzZWFyY2hwYXRocyBpbiB0aGVtIHRvby4KLQkgKi8KLQlwdWJsaWMgQlBCZWFuaW5mb0xpc3RFbGVtZW50KEJlYW5pbmZvRW50cnkgZW50cnksIEJQU2VhcmNoTGlzdEVsZW1lbnRbXSBzZWFyY2hwYXRocywgYm9vbGVhbiBtaXNzaW5nKSB7Ci0JCXN1cGVyKGVudHJ5LCBtaXNzaW5nKTsKLQkJdGhpcy5zZWFyY2hwYXRocyA9IHNlYXJjaHBhdGhzICE9IG51bGwgPyBzZWFyY2hwYXRocyA6IG5ldyBCUFNlYXJjaExpc3RFbGVtZW50WzBdOwotCX0KLQotCS8qKgotCSAqIE1hcmsgdGhlIGVudHJ5IGFzIGV4cG9ydGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEV4cG9ydGVkKGJvb2xlYW4gZXhwb3J0ZWQpIHsKLQkJKChCZWFuaW5mb0VudHJ5KSBlbnRyeSkuc2V0SXNFeHBvcnRlZChleHBvcnRlZCk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIEJQTGlzdEVsZW1lbnQjY2FuRXhwb3J0QmVDaGFuZ2VkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBjYW5FeHBvcnRCZUNoYW5nZWQoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogQHNlZSBCUExpc3RFbGVtZW50I2lzRXhwb3J0ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRXhwb3J0ZWQoKSB7Ci0JCXJldHVybiAoKEJlYW5pbmZvRW50cnkpIGVudHJ5KS5pc0V4cG9ydGVkKCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybiB0aGUgY3VycmVudCBsaXN0IG9mIFNlYXJjaHBhdGhzIGZvciB0aGlzIEJlYW5pbmZvIEVsZW1lbnQuCi0JICovCi0JcHVibGljIEJQU2VhcmNoTGlzdEVsZW1lbnRbXSBnZXRTZWFyY2hwYXRocygpIHsKLQkJcmV0dXJuIHNlYXJjaHBhdGhzOwotCX0KLQkKLQkvKioKLQkgKiBTZXQgdGhlIG5ldyBsaXN0LiBUaGlzIHdpbGwgdXBkYXRlIHRoZSBiZWFuaW5mbyBlbnRyeSB0b28uCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VhcmNocGF0aHMoQlBTZWFyY2hMaXN0RWxlbWVudFtdIHNlYXJjaHBhdGhzKSB7Ci0JCXRoaXMuc2VhcmNocGF0aHMgPSBzZWFyY2hwYXRoczsKLQkJCi0JCVNlYXJjaHBhdGhFbnRyeVtdIHNwRW50cmllcyA9IG5ldyBTZWFyY2hwYXRoRW50cnlbc2VhcmNocGF0aHMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZWFyY2hwYXRocy5sZW5ndGg7IGkrKykgewotCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBicHMgPSBzZWFyY2hwYXRoc1tpXTsKLQkJCXNwRW50cmllc1tpXSA9IChTZWFyY2hwYXRoRW50cnkpIGJwcy5nZXRFbnRyeSgpOwotCQl9Ci0JCQotCQkoKEJlYW5pbmZvRW50cnkpIGVudHJ5KS5zZXRTZWFyY2hQYXRocyhzcEVudHJpZXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JQTGlzdEVsZW1lbnQuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JQTGlzdEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1ZWUxNi4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CUExpc3RFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLS8qCi0KLQotICovCi0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb3JlLklCZWFuaW5mb3NEb2NFbnRyeTsKLS8qKgotICogQSBCYXNlIExpc3RFbGVtZW50IChpLmUuIGVsZW1lbnQgaW4gYSBsaXN0IHZpZXdlcikgZm9yCi0gKiBhIEJlYW5JbmZvIFNlYXJjaCBQYXRoIEVudHJ5LgotICovCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCUExpc3RFbGVtZW50IGV4dGVuZHMgT2JqZWN0IHsKLQlwcm90ZWN0ZWQgSUJlYW5pbmZvc0RvY0VudHJ5IGVudHJ5OwotCXByb3RlY3RlZCBib29sZWFuIG1pc3Npbmc7IC8vIExpYnJhcnkvZm9sZGVyL2NsYXNzcGF0aCBlbnRyeSBmb3IgdGhpcyBlbnRyeSBjb3VsZCBub3QgYmUgZm91bmQuCi0KLQlwdWJsaWMgQlBMaXN0RWxlbWVudChJQmVhbmluZm9zRG9jRW50cnkgZW50cnksIGJvb2xlYW4gbWlzc2luZykgewotCQl0aGlzLmVudHJ5ID0gZW50cnk7Ci0JCXRoaXMubWlzc2luZyA9IG1pc3Npbmc7Ci0JfQotCi0JcHVibGljIElCZWFuaW5mb3NEb2NFbnRyeSBnZXRFbnRyeSgpIHsKLQkJcmV0dXJuIGVudHJ5OwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTWlzc2luZygpIHsKLQkJcmV0dXJuIG1pc3Npbmc7Ci0JfQotCi0JLyoqCi0JICogQ2VydGFpbiBlbnRyaWVzIGNhbm5vdCBoYXZlIHRoZWlyIGV4cG9ydCBzdGF0dXMgY2hhbmdlZC4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBjYW5FeHBvcnRCZUNoYW5nZWQoKTsKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoaXMgZW50cnkgaXMgZXhwb3J0ZWQuCi0JICovCi0JcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNFeHBvcnRlZCgpOwotCi0JLyoqCi0JICogSWYgZXhwb3J0IGNhbiBiZSBjaGFuZ2VkLCBjaGFuZ2UgaXQuCi0JICovCi0JcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RXhwb3J0ZWQoYm9vbGVhbiBleHBvcnRlZCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JQU2VhcmNoTGlzdEVsZW1lbnQuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JQU2VhcmNoTGlzdEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNhZTM2My4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CUFNlYXJjaExpc3RFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLS8qCi0KLQotICovCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29yZS5TZWFyY2hwYXRoRW50cnk7Ci0KLS8qKgotICogQHZlcnNpb24gCTEuMAotICogQGF1dGhvcgotICovCi1wdWJsaWMgY2xhc3MgQlBTZWFyY2hMaXN0RWxlbWVudCBleHRlbmRzIEJQTGlzdEVsZW1lbnQgewotCi0JcHJvdGVjdGVkIGJvb2xlYW4gZXhwb3J0ZWQ7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gcGFja2FnZU1pc3Npbmc7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEJQU2VhcmNoTGlzdEVsZW1lbnQuCi0JICogQHBhcmFtIGVudHJ5Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcGFyYW0gaW5NaXNzaW5nCi0JICovCi0JcHVibGljIEJQU2VhcmNoTGlzdEVsZW1lbnQoCi0JCVNlYXJjaHBhdGhFbnRyeSBlbnRyeSwKLQkJYm9vbGVhbiBtaXNzaW5nLAotCQlib29sZWFuIHBhY2thZ2VNaXNzaW5nLAotCQlib29sZWFuIGV4cG9ydGVkKSB7Ci0JCXN1cGVyKGVudHJ5LCBtaXNzaW5nKTsKLQotCQl0aGlzLnBhY2thZ2VNaXNzaW5nID0gcGFja2FnZU1pc3Npbmc7Ci0JCXRoaXMuZXhwb3J0ZWQgPSBleHBvcnRlZDsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgQlBMaXN0RWxlbWVudCNjYW5FeHBvcnRCZUNoYW5nZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGNhbkV4cG9ydEJlQ2hhbmdlZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogQHNlZSBCUExpc3RFbGVtZW50I2lzRXhwb3J0ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRXhwb3J0ZWQoKSB7Ci0JCXJldHVybiBleHBvcnRlZDsKLQl9Ci0KLQkvKioKLQkgKiBJcyB0aGUgcGFja2FnZSBtaXNzaW5nLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzUGFja2FnZU1pc3NpbmcoKSB7Ci0JCXJldHVybiBwYWNrYWdlTWlzc2luZzsKLQl9Ci0JCi0JLyoKLQkgKiBAc2VlIEJQTGlzdEVsZW1lbnQjc2V0RXhwb3J0ZWQoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFeHBvcnRlZChib29sZWFuIGV4cG9ydGVkKSB7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CZWFuSW5mb1VJTWVzc2FnZXMuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JlYW5JbmZvVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjk5OWRhLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JlYW5JbmZvVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBCZWFuSW5mb1VJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aS5tZXNzYWdlcyI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBCZWFuSW5mb1VJTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlYXJjaFBhdGhEaWFsb2dfQ2hvb3NlUGFja2FnZXM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU2VhcmNoUGF0aERpYWxvZ19SZW1vdmU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU2VhcmNoUGF0aERpYWxvZ19EZXNjX0xhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlYXJjaFBhdGhEaWFsb2dfTW9kaWZ5U2VhcmNoUGF0aHM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU2VhcmNoUGF0aERpYWxvZ19Ob3RFZGl0YWJsZV9JTkZPXzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTZWFyY2hQYXRoRGlhbG9nX1BhY2thZ2VQcmVzZW50X0lORk9fOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlYXJjaFBhdGhEaWFsb2dfSW5wdXREaWFsb2dfVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU2VhcmNoUGF0aERpYWxvZ19JbnB1dERpYWxvZ19NZXNzYWdlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5JbmZvUGF0aHNCbG9ja19FeHBvcnRBbGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbkluZm9QYXRoc0Jsb2NrX1VuZXhwb3J0QWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5JbmZvUGF0aHNCbG9ja19QYWdlX1RhYl9QYWNrYWdlczsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb1BhdGhzQmxvY2tfUGFnZV9UYWJfQ2xhc3NlczsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkRm9sZGVyczsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkSkFSczsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkRXh0ZXJuYWxKQVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbkluZm9zV29ya2Jvb2tQYWdlX0FkZFZhcmlhYmxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5JbmZvc1dvcmtib29rUGFnZV9BZGRQcm9qZWN0czsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfTW9kaWZ5UGF0aHM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbkluZm9zV29ya2Jvb2tQYWdlX1JlbW92ZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfTGlzdF9UZXh0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5JbmZvc1dvcmtib29rUGFnZV9TZWxlY3Rpb25EaWFsb2dfQ2xhc3Nlc19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX0pBUnNfVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbkluZm9zV29ya2Jvb2tQYWdlX1NlbGVjdGlvbkRpYWxvZ19KQVJzX01lc3NhZ2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbkluZm9zV29ya2Jvb2tQYWdlX1NlbGVjdGlvbkRpYWxvZ19FeHRKQVJzX1RleHQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbkluZm9zV29ya2Jvb2tQYWdlX1NlbGVjdGlvbkRpYWxvZ19Qcm9qZWN0c19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX0NsYXNzZXNfUHJvbXB0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5JbmZvc1dvcmtib29rUGFnZV9TZWxlY3Rpb25EaWFsb2dfUHJvamVjdHNfUHJvbXB0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhY2thZ2VzV29ya2Jvb2tfQ2hvb3NlUGFja2FnZXM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFja2FnZXNXb3JrYm9va19DaG9vc2VEZWZpbmVkUGF0aHM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFja2FnZXNXb3JrYm9va19SZW1vdmU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFja2FnZXNXb3JrYm9va19MYWJlbFRleHQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFja2FnZXNXb3JrYm9va19TZWxlY3Rpb25EaWFsb2dfRGVmaW5lZFBhdGhzX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhY2thZ2VzV29ya2Jvb2tfU2VsZWN0aW9uRGlhbG9nX0RlZmluZWRQYXRoc19NZXNzYWdlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExhYmVsUHJvdmlkZXJfTGlicmFyeV9Gb2xkZXI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTGFiZWxQcm92aWRlcl9MaWJyYXJ5X19QYXRoTGFzdFNlZ21lbnRfUGF0aFJlbGF0aXZlXzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMYWJlbFByb3ZpZGVyX0xpYnJhcnlfX1BhdGhMYXN0U2VnbWVudF9QYXRoRXhjZXB0TGFzdF87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTGFiZWxQcm92aWRlcl9WYXJpYWJsZV9fbmFtZV9QYXRoT1NTdHJpbmdfOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExhYmVsUHJvdmlkZXJfX3BhY2thZ2VOYW1lX1BhdGhfOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfdmFyaWFibGVfbGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVmFyaWFibGVTZWxlY3Rpb25CbG9ja192YXJpYWJsZV9idXR0b247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVmFyaWFibGVTZWxlY3Rpb25CbG9ja19leHRlbnNpb25fbGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVmFyaWFibGVTZWxlY3Rpb25CbG9ja19leHRlbnNpb25fYnV0dG9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfZnVsbHBhdGhfbGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVmFyaWFibGVTZWxlY3Rpb25CbG9ja19lcnJvcl9lbnRlcm5hbWVfRVJST1JfOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfZXJyb3JfbmFtZW5vdGV4aXN0c19FUlJPUl87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVmFyaWFibGVTZWxlY3Rpb25CbG9ja19lcnJvcl9wYXRoZXhpc3RzX0VSUk9SXzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBWYXJpYWJsZVNlbGVjdGlvbkJsb2NrX2Vycm9yX2ludmFsaWRleHRlbnNpb25fRVJST1JfOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfd2FybmluZ19wYXRobm90ZXhpc3RzX1dBUk5fOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfRXh0SmFyRGlhbG9nX3RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvX1VJX19lcnJvcnRpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvX1VJX19lcnJvcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuaW5mb1Byb3BlcnRpZXNQYWdlX0lORk9fX25vamF2YXByb2plY3Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbmluZm9Qcm9wZXJ0aWVzUGFnZV9JTkZPX19jbG9zZWRwcm9qZWN0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvUGF0aHNCbG9ja19VSV9fZW5hYmxlYmVhbmluZm87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZWFyY2hwYXRoX2xhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF91cF9idXR0b247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZWFyY2hwYXRoX2Rvd25fYnV0dG9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF9yZW1vdmVfYnV0dG9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VyYWNocGF0aF90YWJfb3JkZXI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbmluZm9QYXRoc0Jsb2NrX1dBUk5fX3NlYXJjaHBhdGhfbWlzc2luZ19wYXRoX2Zvcm1hdDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3NlYXJjaHBhdGhfb3BlcmF0aW9uZGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19hZGRzZWFyY2hwYXRoX3RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvUGF0aHNCbG9ja19VSV9fYWRkc2VhcmNocGF0aF9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3dhcm5pbmdfRW50cnlNaXNzaW5nOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF9hZGRfYnV0dG9uOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQmVhbkluZm9VSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFeGNlcHRpb25IYW5kbGVyX2Vycm9yZGlhbG9nX21zZ19zZWVsb2c7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQmVhbmluZm9FbnRyeVNlYXJjaHBhdGhEaWFsb2cuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JlYW5pbmZvRW50cnlTZWFyY2hwYXRoRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYmMxNDMuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQmVhbmluZm9FbnRyeVNlYXJjaHBhdGhEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLS8qCi0KLQotICovCi0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb3JlLkJlYW5pbmZvRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvcmUuU2VhcmNocGF0aEVudHJ5OwotCi0vKioKLSAqIFRoaXMgZGlhbG9nIGlzIHVzZWQgdG8gZGlzcGxheSBhbmQgbW9kaWZ5IHRoZSBzZWFyY2ggcGF0aAotICogd2l0aGluIGEgQmVhbmluZm9FbnRyeS4KLSAqIEB2ZXJzaW9uIAkxLjAKLSAqIEBhdXRob3IKLSAqLwotcHVibGljIGNsYXNzIEJlYW5pbmZvRW50cnlTZWFyY2hwYXRoRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQlwcm90ZWN0ZWQgQlBCZWFuaW5mb0xpc3RFbGVtZW50IGluZm9FbGVtZW50OwotCXByb3RlY3RlZCBJSmF2YVByb2plY3QgalByb2plY3Q7Ci0JLy9wcm90ZWN0ZWQgTGlzdERpYWxvZ0ZpZWxkIGxpc3RGaWVsZDsKLQkKLQlwcml2YXRlIENvbXBvc2l0ZSB0b3A7Ci0JcHJpdmF0ZSBUYWJsZSB0YWJsZTsKLQlwcml2YXRlIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOwotCXByaXZhdGUgTGFiZWwgbGFiZWw7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgYnV0dG9uc0JhcjsKLQlwcml2YXRlIEJ1dHRvbiB1cGJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBkb3duQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIGNob29zZVBhY2thZ2VzQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbjsKLQlwcml2YXRlIExpc3QgdGFibGVFbGVtZW50czsKLQlwcml2YXRlIGJvb2xlYW4gZW5hYmxlZCA9IHRydWU7Ci0KLQlwdWJsaWMgQmVhbmluZm9FbnRyeVNlYXJjaHBhdGhEaWFsb2coCi0JCVNoZWxsIHBhcmVudFNoZWxsLAotCQlCUEJlYW5pbmZvTGlzdEVsZW1lbnQgaW5mb0VsZW1lbnQsCi0JCUlKYXZhUHJvamVjdCBqUHJvamVjdCkgewotCQlzdXBlcihwYXJlbnRTaGVsbCk7Ci0KLQkJdGhpcy5pbmZvRWxlbWVudCA9IGluZm9FbGVtZW50OwotCQl0aGlzLmpQcm9qZWN0ID0galByb2plY3Q7Ci0JCXRoaXMudGFibGVFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbChTaGVsbCBuZXdTaGVsbCkgewotCQlzdXBlci5jb25maWd1cmVTaGVsbChuZXdTaGVsbCk7Ci0JCW5ld1NoZWxsLnNldFRleHQoCi0JCQlNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQlCZWFuSW5mb1VJTWVzc2FnZXMuU2VhcmNoUGF0aERpYWxvZ19Nb2RpZnlTZWFyY2hQYXRocywgCi0JCQkJbmV3IE9iamVjdFtdIHsgaW5mb0VsZW1lbnQuZ2V0RW50cnkoKS5nZXRQYXRoKCkudG9TdHJpbmcoKX0pKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdG9wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJdG9wLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQl0b3Auc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKSk7Ci0JCQotCQlsYWJlbCA9IG5ldyBMYWJlbCh0b3AsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuU2VhcmNoUGF0aERpYWxvZ19EZXNjX0xhYmVsKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJCi0JCWNyZWF0ZVRhYmxlKCk7Ci0JCWNyZWF0ZUJ1dHRvbnNCYXIoKTsKLQotCQl1cGRhdGVQYWNrYWdlc0xpc3QoKTsKLQkJCi0JCXVwZGF0ZUJ1dHRvbnMoKTsKLQotCQlyZXR1cm4gdG9wOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRhYmxlCQotCSAqCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRhYmxlKCkgewotCQlHcmlkRGF0YSBncmlkRGF0YTEgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YSgpOwotCQlncmlkRGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudCA9IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEuRklMTDsKLQkJZ3JpZERhdGExLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTEudmVydGljYWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCXRhYmxlID0gbmV3IFRhYmxlKHRvcCwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0JCXRhYmxlLnNldExheW91dERhdGEoZ3JpZERhdGExKTsKLQkJdGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJdXBkYXRlQnV0dG9ucygpOwotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQl3aWRnZXRTZWxlY3RlZChlKTsKLQkJCX0KLQkJfSk7Ci0JCXRhYmxlVmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJLy90YWJsZVZpZXdlci5zZXRTb3J0ZXIobmV3IEJJTGlzdEVsZW1lbnRTb3J0ZXIoKSk7Ci0JCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQXJyYXlDb250ZW50UHJvdmlkZXIoKSk7Ci0JCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IFNlYXJjaFBhdGhMaXN0TGFiZWxQcm92aWRlcihqUHJvamVjdCkpOwotCQl0YWJsZVZpZXdlci5zZXRJbnB1dCh0YWJsZUVsZW1lbnRzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBidXR0b25zQmFyCQotCSAqCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUJ1dHRvbnNCYXIoKSB7Ci0JCVJvd0xheW91dCByb3dMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7Ci0JCXJvd0xheW91dC50eXBlID0gb3JnLmVjbGlwc2Uuc3d0LlNXVC5WRVJUSUNBTDsKLQkJcm93TGF5b3V0Lm1hcmdpbkxlZnQgPSAzOwotCQlyb3dMYXlvdXQuZmlsbCA9IHRydWU7Ci0JCUdyaWREYXRhIGdyaWREYXRhMiA9IG5ldyBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhKCk7Ci0JCWdyaWREYXRhMi5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0JCWdyaWREYXRhMi52ZXJ0aWNhbEFsaWdubWVudCA9IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEuRklMTDsKLQkJZ3JpZERhdGEyLmhvcml6b250YWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkJFR0lOTklORzsKLQkJYnV0dG9uc0JhciA9IG5ldyBDb21wb3NpdGUodG9wLCBTV1QuTk9ORSk7Ci0JCWJ1dHRvbnNCYXIuc2V0TGF5b3V0RGF0YShncmlkRGF0YTIpOwotCQlidXR0b25zQmFyLnNldExheW91dChyb3dMYXlvdXQpOwotCQl1cGJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uc0JhciwgU1dULk5PTkUpOwotCQl1cGJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3NlYXJjaHBhdGhfdXBfYnV0dG9uKTsKLQkJdXBidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlMaXN0IHNlbGVjdGVkID0gQmVhbmluZm9QYXRoc0Jsb2NrLmdldFNlbGVjdGVkTGlzdCh0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJSXRlcmF0b3Igc2VsSXRyID0gc2VsZWN0ZWQuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoc2VsSXRyLmhhc05leHQoKSkgewotCQkJCQlPYmplY3QgZWxlbWVudCA9IHNlbEl0ci5uZXh0KCk7Ci0JCQkJCWludCBvbGRJbmRleCA9IHRhYmxlRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTsKLQkJCQkJaWYob2xkSW5kZXg+MCl7Ci0JCQkJCQl0YWJsZUVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTsKLQkJCQkJCXRhYmxlRWxlbWVudHMuYWRkKC0tb2xkSW5kZXgsIGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCQlwYWdlQ2hhbmdlZCgpOwotCQkJfQotCQl9KTsKLQkJZG93bkJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uc0JhciwgU1dULk5PTkUpOwotCQlkb3duQnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF9kb3duX2J1dHRvbik7Ci0JCWRvd25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCUxpc3Qgc2VsZWN0ZWQgPSBCZWFuaW5mb1BhdGhzQmxvY2suZ2V0U2VsZWN0ZWRMaXN0KHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJCQlJdGVyYXRvciBzZWxJdHIgPSBzZWxlY3RlZC5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChzZWxJdHIuaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBlbGVtZW50ID0gc2VsSXRyLm5leHQoKTsKLQkJCQkJaW50IG9sZEluZGV4ID0gdGFibGVFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpOwotCQkJCQlpZihvbGRJbmRleDwodGFibGVFbGVtZW50cy5zaXplKCktMSkpewotCQkJCQkJdGFibGVFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7Ci0JCQkJCQl0YWJsZUVsZW1lbnRzLmFkZCgrK29sZEluZGV4LCBlbGVtZW50KTsKLQkJCQkJfQotCQkJCX0KLQkJCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JCQkJcGFnZUNoYW5nZWQoKTsKLQkJCX0KLQkJfSk7Ci0JCW5ldyBMYWJlbChidXR0b25zQmFyLCBTV1QuTk9ORSk7Ci0JCWNob29zZVBhY2thZ2VzQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25zQmFyLCBTV1QuTk9ORSk7Ci0JCWNob29zZVBhY2thZ2VzQnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLlNlYXJjaFBhdGhEaWFsb2dfQ2hvb3NlUGFja2FnZXMpOwotCQljaG9vc2VQYWNrYWdlc0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJZmluYWwgTGlzdCBlbGVtZW50c1RvQWRkID0gY2hvb3NlUGFja2FnZXMoKTsKLQkJCQlpZiAoZWxlbWVudHNUb0FkZCAhPSBudWxsICYmICFlbGVtZW50c1RvQWRkLmlzRW1wdHkoKSkgewotCQkJCQl0YWJsZUVsZW1lbnRzLmFkZEFsbChlbGVtZW50c1RvQWRkKTsKLQkJCQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCQkJCQl0YWJsZS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlbGVtZW50c1RvQWRkKSk7Ci0JCQkJCQl9OwotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQluZXcgTGFiZWwoYnV0dG9uc0JhciwgU1dULk5PTkUpOwotCQlyZW1vdmVCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJcmVtb3ZlQnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLlNlYXJjaFBhdGhEaWFsb2dfUmVtb3ZlKTsKLQkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlMaXN0IHNlbGVjdGVkID0gQmVhbmluZm9QYXRoc0Jsb2NrLmdldFNlbGVjdGVkTGlzdCh0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJdGFibGVFbGVtZW50cy5yZW1vdmVBbGwoc2VsZWN0ZWQpOwotCQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCQlwYWdlQ2hhbmdlZCgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlZCgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVCdXR0b25zKCkgewotCQlpZih0b3AhPW51bGwgJiYgIXRvcC5pc0Rpc3Bvc2VkKCkpewotCQkJdXBidXR0b24uc2V0RW5hYmxlZChlbmFibGVkICYmIGNhbk1vdmVVcCgpKTsKLQkJCWRvd25CdXR0b24uc2V0RW5hYmxlZChlbmFibGVkICYmIGNhbk1vdmVEb3duKCkpOwotCQkJcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLQkJCWNob29zZVBhY2thZ2VzQnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGNhbk1vdmVEb3duKCkgewotCQlpbnRbXSBpbmRjPSB0YWJsZS5nZXRTZWxlY3Rpb25JbmRpY2VzKCk7Ci0JCWludCBrPSB0YWJsZUVsZW1lbnRzLnNpemUoKSAtIDE7Ci0JCWZvciAoaW50IGk9IGluZGMubGVuZ3RoIC0gMTsgaSA+PSAwIDsgaS0tLCBrLS0pIHsKLQkJCWlmIChpbmRjW2ldICE9IGspIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNhbk1vdmVVcCgpIHsKLQkJaW50W10gaW5kYz0gdGFibGUuZ2V0U2VsZWN0aW9uSW5kaWNlcygpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgaW5kYy5sZW5ndGg7IGkrKykgewotCQkJaWYgKGluZGNbaV0gIT0gaSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlUGFja2FnZXNMaXN0KCkgewotCQlpZiAoaW5mb0VsZW1lbnQuZ2V0RW50cnkoKS5nZXRLaW5kKCkgPT0gQmVhbmluZm9FbnRyeS5CSUVfUExVR0lOKSB7Ci0JCQkvLyBXZSBkb24ndCBhbGxvdyB0aGVzZSB0byBiZSB1cGRhdGVkLiBUaGV5IHNob3VsZCBvbmx5IGJlIHVzZWQgdGhyb3VnaAotCQkJLy8gcmVnaXN0ZXJlZCBtZWNoYW5pc21zIGFuZCB3ZSB3b24ndCBiZSBzaG93aW5nIHRoZW0gaGVyZSBub3JtYWxseS4KLQkJCWxhYmVsLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLlNlYXJjaFBhdGhEaWFsb2dfTm90RWRpdGFibGVfSU5GT18pOyAKLQkJCXVwZGF0ZUVuYWJsZWRTdGF0ZShmYWxzZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdGFibGVFbGVtZW50cy5jbGVhcigpOwotCQl0YWJsZUVsZW1lbnRzLmFkZEFsbChBcnJheXMuYXNMaXN0KGluZm9FbGVtZW50LmdldFNlYXJjaHBhdGhzKCkpKTsKLQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoYm9vbGVhbiBiKSB7Ci0JCWVuYWJsZWQgPSBiOwotCQlpZih0b3AhPW51bGwgJiYgIXRvcC5pc0Rpc3Bvc2VkKCkpewotCQkJbGFiZWwuc2V0RW5hYmxlZChlbmFibGVkKTsKLQkJCXRhYmxlLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCQl1cGRhdGVCdXR0b25zKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCWlmICh0YWJsZS5pc0VuYWJsZWQoKSkgewotCQkJLy8gSWYgdGhlIGZpZWxkIGlzIG5vdCBlbmFibGVkLCB0aGVuIHRoZXJlIGlzIG5vIHVwZGF0ZSB0byBwZXJmb3JtLiBXZSBkb24ndAotCQkJLy8gd2FudCB0byBhY2NpZGVudGlhbGx5IHdpcGUgb3V0IHRoZSBzZWFyY2ggcGF0aHMgaW4gdGhpcyBjYXNlLgotCi0JCQkvLyBPdmVycmlkZSB0byBwdXQgdGhlIGxpc3Qgb2YgZWxlbWVudHMgYmFjayBpbnRvIHRoZSBCUEJlYW5pbmZvTGlzdEVsZW1lbnQKLQkJCS8vIFVudGlsIHRoZW4gdGhleSBhcmVuJ3QgYWN0dWFsbHkgdXBkYXRlZC4KLQkJCWluZm9FbGVtZW50LnNldFNlYXJjaHBhdGhzKAotCQkJCShCUFNlYXJjaExpc3RFbGVtZW50W10pIHRhYmxlRWxlbWVudHMudG9BcnJheShuZXcgQlBTZWFyY2hMaXN0RWxlbWVudFt0YWJsZUVsZW1lbnRzLnNpemUoKV0pKTsKLQkJfQotCQlzdXBlci5va1ByZXNzZWQoKTsKLQl9Ci0KLQkvKioKLQkgKiBDaG9vc2UgdGhlIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBzZWFyY2ggcGF0aC4KLQkgKi8KLQlwcml2YXRlIExpc3QgY2hvb3NlUGFja2FnZXMoKSB7Ci0KLQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSByb290cyA9IGdldEJlYW5pbmZvUm9vdHMoKTsKLQkJTGlzdCBuZXdQYWNrYWdlTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmIChyb290cyAhPSBudWxsKSB7Ci0JCQkvLyBJdCdzIHdpdGhpbiB0aGUgd29ya3NwYWNlLCBzbyB3ZSBjYW4gZ2V0IHRoZSByb290cyBhbmQgcGFja2FnZXMuCi0JCQlJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBQYWNrYWdlc1dvcmtib29rUGFnZS5DaG9vc2VQYWNrYWdlc1NlbGVjdGlvblZhbGlkYXRvcigpOwotCi0JCQkvLyBTaG93IHVwIHRvIHRoZSBwYWNrYWdlIGZyYWdtZW50LCBkb24ndCBzaG93IGFueSBjb250ZW50cyBvZiBpdC4KLQkJCUNsYXNzW10gYWNjZXB0ZWRDbGFzc2VzID0gbmV3IENsYXNzW10geyBJUGFja2FnZUZyYWdtZW50Um9vdC5jbGFzcywgSVBhY2thZ2VGcmFnbWVudC5jbGFzcyB9OwotCQkJT2JqZWN0W10gcmVqZWN0ZWRGcmFnbWVudHMgPSBnZXRGaWx0ZXJlZEV4aXN0aW5nRW50cmllcyhyb290cyk7Ci0KLQkJCS8vIE9ubHkgc2hvdyBwYWNrYWdlIGZyYWdtZW50cyB0aGF0IGhhdmUgY2hpbGRyZW4gKGkuZS4gdGhlcmUgY2xhc3NlcyBpbiBpdCwgbm90IGludGVyZXN0ZWQKLQkJCS8vIGluIGludGVybWVkaWF0ZSBvbmVzIHRoYXQgaGF2ZSBubyBjbGFzc2VzIGRlZmluZWQgaW4gdGhlbS4gVGhvc2UgYXJlIGZpbHRlcmVkIG91dC4KLQkJCVR5cGVkVmlld2VyRmlsdGVyIGZpbHRlciA9IG5ldyBUeXBlZFZpZXdlckZpbHRlcihhY2NlcHRlZENsYXNzZXMsIHJlamVjdGVkRnJhZ21lbnRzKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LCBPYmplY3QgZWxlbWVudCkgewotCQkJCQlpZiAoc3VwZXIuc2VsZWN0KHZpZXdlciwgcGFyZW50RWxlbWVudCwgZWxlbWVudCkpIHsKLQkJCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVBhY2thZ2VGcmFnbWVudCkgewotCQkJCQkJCUlQYWNrYWdlRnJhZ21lbnQgcGtnID0gKElQYWNrYWdlRnJhZ21lbnQpIGVsZW1lbnQ7Ci0JCQkJCQkJdHJ5IHsKLQkJCQkJCQkJcmV0dXJuIHBrZy5oYXNDaGlsZHJlbigpOwotCQkJCQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJfQotCQkJCQkJCXJldHVybiBmYWxzZTsKLQkJCQkJCX0gZWxzZQotCQkJCQkJCXJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9OwotCi0JCQlJVHJlZUNvbnRlbnRQcm92aWRlciBwcm92aWRlciA9IG5ldyBQYWNrYWdlT25seUNvbnRlbnRQcm92aWRlcigpOwotCi0JCQlJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyID0gbmV3IEphdmFFbGVtZW50TGFiZWxQcm92aWRlcihKYXZhRWxlbWVudExhYmVsUHJvdmlkZXIuU0hPV19ERUZBVUxUKTsKLQkJCUVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9Ci0JCQkJbmV3IEVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nKGdldFNoZWxsKCksIGxhYmVsUHJvdmlkZXIsIHByb3ZpZGVyKTsKLQkJCWRpYWxvZy5zZXRUaXRsZShCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19hZGRzZWFyY2hwYXRoX3RpdGxlKTsgCi0KLQkJCWRpYWxvZy5zZXRWYWxpZGF0b3IodmFsaWRhdG9yKTsKLQkJCWRpYWxvZy5zZXRNZXNzYWdlKEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX2FkZHNlYXJjaHBhdGhfZGVzY3JpcHRpb24pOyAKLQkJCWRpYWxvZy5hZGRGaWx0ZXIoZmlsdGVyKTsKLQkJCWRpYWxvZy5zZXRJbnB1dChBcnJheXMuYXNMaXN0KGdldEJlYW5pbmZvUm9vdHMoKSkpOwotCi0JCQlpZiAoZGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlPYmplY3RbXSBlbGVtZW50cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCW5ld1BhY2thZ2VOYW1lcy5hZGQoKChJUGFja2FnZUZyYWdtZW50KSBlbGVtZW50c1tpXSkuZ2V0RWxlbWVudE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJLy8gSXQncyBub3Qgd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkJCWZpbmFsIExpc3QgZXhpc3RpbmdQYWNrYWdlbmFtZXMgPSBnZXRGaWx0ZXJlZEV4aXN0aW5nRW50cmllcygpOwotCQkJSUlucHV0VmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBJSW5wdXRWYWxpZGF0b3IoKSB7Ci0JCQkJcHVibGljIFN0cmluZyBpc1ZhbGlkKFN0cmluZyBuZXdUZXh0KSB7Ci0JCQkJCWlmIChleGlzdGluZ1BhY2thZ2VuYW1lcy5jb250YWlucyhuZXdUZXh0KSkKLQkJCQkJCXJldHVybiBCZWFuSW5mb1VJTWVzc2FnZXMuU2VhcmNoUGF0aERpYWxvZ19QYWNrYWdlUHJlc2VudF9JTkZPXzsgCi0JCQkJCQkKLQkJCQkJSVN0YXR1cyBzdGF0dXMgPSBKYXZhQ29udmVudGlvbnMudmFsaWRhdGVQYWNrYWdlTmFtZShuZXdUZXh0KTsKLQkJCQkJcmV0dXJuIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0sgPyBudWxsIDogc3RhdHVzLmdldE1lc3NhZ2UoKTsKLQkJCQl9Ci0JCQl9OwotCQkJSW5wdXREaWFsb2cgZGlhbG9nID0gbmV3IElucHV0RGlhbG9nKGdldFNoZWxsKCksIEJlYW5JbmZvVUlNZXNzYWdlcy5TZWFyY2hQYXRoRGlhbG9nX0lucHV0RGlhbG9nX1RpdGxlLCBCZWFuSW5mb1VJTWVzc2FnZXMuU2VhcmNoUGF0aERpYWxvZ19JbnB1dERpYWxvZ19NZXNzYWdlLCBudWxsLCB2YWxpZGF0b3IpOyAKLQkJCWlmIChkaWFsb2cub3BlbigpID09IFdpbmRvdy5PSykKLQkJCQluZXdQYWNrYWdlTmFtZXMuYWRkKGRpYWxvZy5nZXRWYWx1ZSgpKTsKLQkJfQotCi0JCWlmIChuZXdQYWNrYWdlTmFtZXMuc2l6ZSgpID09IDApCi0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQotCQlMaXN0IG5ld0VsZW1lbnRzID0gbmV3IEFycmF5TGlzdChuZXdQYWNrYWdlTmFtZXMuc2l6ZSgpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdQYWNrYWdlTmFtZXMuc2l6ZSgpOyBpKyspCi0JCQluZXdFbGVtZW50cy5hZGQoCi0JCQkJbmV3IEJQU2VhcmNoTGlzdEVsZW1lbnQobmV3IFNlYXJjaHBhdGhFbnRyeSgoU3RyaW5nKSBuZXdQYWNrYWdlTmFtZXMuZ2V0KGkpKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkpOwotCQlyZXR1cm4gbmV3RWxlbWVudHM7Ci0JfQotCS8qKgotCSAqIFJldHVybiB0aGUgcGFja2FnZWZyYWdtZW50IHJvb3RzIGZvciB0aGUgZ2l2ZW4gYmVhbmluZm8gZW50cnkuCi0JICogUmV0dXJuIG51bGwgaWYgaXQgY2FuIGJlIGhhbmRsZWQgKGkuZS4gbm90IGluIGEgcHJvamVjdCBzb21lIHdoZXJlKS4KLQkgKi8KLQlwcm90ZWN0ZWQgSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBnZXRCZWFuaW5mb1Jvb3RzKCkgewotCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIHJvb3RzID0gbnVsbDsKLQkJaWYgKGluZm9FbGVtZW50LmdldEVudHJ5KCkuZ2V0S2luZCgpICE9IEJlYW5pbmZvRW50cnkuQklFX1BMVUdJTikgewotCQkJSUNsYXNzcGF0aEVudHJ5IHJlc29sdmVkID0gSmF2YUNvcmUuZ2V0UmVzb2x2ZWRDbGFzc3BhdGhFbnRyeSgoKEJlYW5pbmZvRW50cnkpIGluZm9FbGVtZW50LmdldEVudHJ5KCkpLmdldENsYXNzcGF0aEVudHJ5KCkpOwotCQkJSVJlc291cmNlIHJlcyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihyZXNvbHZlZC5nZXRQYXRoKCkpOwotCQkJaWYgKHJlcyAhPSBudWxsICYmIHJlcy5leGlzdHMoKSkgewotCQkJCWlmIChyZXMgaW5zdGFuY2VvZiBJUHJvamVjdCkgewotCQkJCQkvLyBJdCBpcyBhIHByb2plY3QgaXRzZWxmLgotCQkJCQlJSmF2YVByb2plY3QganAgPSAoSUphdmFQcm9qZWN0KSBKYXZhQ29yZS5jcmVhdGUocmVzKTsKLQkJCQkJdHJ5IHsKLQkJCQkJCWlmIChqcCAhPSBudWxsKQotCQkJCQkJCXJvb3RzID0ganAuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoKTsgLy8gQWxsIG9mIHRoZSByb290cyBpbiB0aGUgcHJvamVjdCBhcmUgYXBwbGljYWJsZS4KLQkJCQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vIEl0IGlzIHdpdGhpbiBhbm90aGVyIHByb2plY3QKLQkJCQkJSVByb2plY3QgY29udGFpbmluZ1Byb2plY3QgPSByZXMuZ2V0UHJvamVjdCgpOwotCQkJCQlJSmF2YVByb2plY3QganAgPSBKYXZhQ29yZS5jcmVhdGUoY29udGFpbmluZ1Byb2plY3QpOwotCQkJCQlpZiAoanAgIT0gbnVsbCkgewotCQkJCQkJLy8gVGhlIHJvb3RzIGlmIHRoaXMgaXMgaW4gdGhlIGNsYXNzcGF0aCBvZiB0aGlzIHByb2plY3QKLQkJCQkJCXRyeSB7Ci0JCQkJCQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGpwLmZpbmRQYWNrYWdlRnJhZ21lbnRSb290KHJlc29sdmVkLmdldFBhdGgoKSk7Ci0JCQkJCQkJaWYgKHJvb3QgIT0gbnVsbCkKLQkJCQkJCQkJcm9vdHMgPSBuZXcgSVBhY2thZ2VGcmFnbWVudFJvb3RbXSB7IHJvb3QgfTsKLQkJCQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJvb3RzOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB0aGUgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYWxyZWFkeSBhcmUgaW4gdGhlIHNlYXJjaCBwYXRoCi0JICogc28gdGhhdCB0aGV5IGRvbid0IHNob3cgdXAgaW4gdGhlIGxpc3QuCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdFtdIGdldEZpbHRlcmVkRXhpc3RpbmdFbnRyaWVzKElQYWNrYWdlRnJhZ21lbnRSb290W10gcm9vdHMpIHsKLQkJTGlzdCBlbnRyaWVzID0gdGFibGVFbGVtZW50czsKLQkJTGlzdCBmcmFnbWVudHMgPSBuZXcgQXJyYXlMaXN0KGVudHJpZXMuc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaXRyID0gZW50cmllcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRyLmhhc05leHQoKSkgewotCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBlbGVtID0gKEJQU2VhcmNoTGlzdEVsZW1lbnQpIGl0ci5uZXh0KCk7Ci0JCQlmcmFnbWVudHMuYWRkQWxsKGdldFBhY2thZ2VzKGVsZW0sIHJvb3RzKSk7Ci0JCX0KLQkJcmV0dXJuIGZyYWdtZW50cy50b0FycmF5KCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybiB0aGUgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYWxyZWFkeSBhcmUgaW4gdGhlIHNlYXJjaCBwYXRoCi0JICogc28gdGhhdCB0aGV5IGRvbid0IHNob3cgdXAgaW4gdGhlIGxpc3QuIFRoaXMgb25lIGlzIGp1c3QgdGhlIHBhY2thZ2UgbmFtZXMuCi0JICovCi0JcHJvdGVjdGVkIExpc3QgZ2V0RmlsdGVyZWRFeGlzdGluZ0VudHJpZXMoKSB7Ci0JCUxpc3QgZW50cmllcyA9IHRhYmxlRWxlbWVudHM7Ci0JCUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KGVudHJpZXMuc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaXRyID0gZW50cmllcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRyLmhhc05leHQoKSkgewotCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBlbGVtID0gKEJQU2VhcmNoTGlzdEVsZW1lbnQpIGl0ci5uZXh0KCk7Ci0JCQluYW1lcy5hZGQoKChTZWFyY2hwYXRoRW50cnkpIGVsZW0uZ2V0RW50cnkoKSkuZ2V0UGFja2FnZSgpKTsKLQkJfQotCQlyZXR1cm4gbmFtZXM7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0UGFja2FnZXMoQlBTZWFyY2hMaXN0RWxlbWVudCBlbGVtZW50LCBJUGFja2FnZUZyYWdtZW50Um9vdFtdIHJvb3RzKSB7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9ICgoU2VhcmNocGF0aEVudHJ5KSBlbGVtZW50LmdldEVudHJ5KCkpLmdldFBhY2thZ2UoKTsKLQkJaWYgKHBhY2thZ2VOYW1lID09IG51bGwpCi0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQotCQl0cnkgewotCQkJTGlzdCBwYWNrYWdlcyA9IG5ldyBBcnJheUxpc3QoMTApOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByb290cy5sZW5ndGg7IGkrKykgewotCQkJCUlKYXZhRWxlbWVudFtdIHBmcyA9IHJvb3RzW2ldLmdldENoaWxkcmVuKCk7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBwZnMubGVuZ3RoOyBqKyspCi0JCQkJCWlmIChwZnNbal0uZ2V0RWxlbWVudFR5cGUoKSA9PSBJSmF2YUVsZW1lbnQuUEFDS0FHRV9GUkFHTUVOVAotCQkJCQkJJiYgcGZzW2pdLmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKHBhY2thZ2VOYW1lKSkgewotCQkJCQkJcGFja2FnZXMuYWRkKHBmc1tqXSk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJfQotCQkJcmV0dXJuIHBhY2thZ2VzOwotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JlYW5pbmZvUGF0aHNCbG9jay5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQmVhbmluZm9QYXRoc0Jsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZTkyNzguLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQmVhbmluZm9QYXRoc0Jsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotCi0KLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udWk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLklTaGFyZWRJbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmFkYXB0ZXJzLkJlYW5pbmZvTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby5jb3JlLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLmNvcmUuSkVNVUlQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBCZWFuaW5mb1BhdGhzQmxvY2sgewotCi0JLy9wcml2YXRlIFNoZWxsIHNTaGVsbDEgPSBudWxsOyAgLy8gIEBqdmU6ZGVjbC1pbmRleD0wOnZpc3VhbC1jb25zdHJhaW50PSI0MCwxOSIKLQlwcml2YXRlIENvbXBvc2l0ZSB0b3AgPSBudWxsOwotCXByaXZhdGUgVGFiRm9sZGVyIHRhYkZvbGRlciA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gZW5hYmxlQmVhbmluZm9DaGVja2JveCA9IG51bGw7Ci0JcHJpdmF0ZSBQYWNrYWdlc1dvcmtib29rUGFnZSBwYWNrYWdlc1dvcmtib29rUGFnZTIgPSBudWxsOwotCXByaXZhdGUgU2VhcmNocGF0aE9yZGVyaW5nV29ya2Jvb2tQYWdlIHNlYXJjaHBhdGhPcmRlcmluZ1dvcmtib29rUGFnZTIgPSBudWxsOwotCXByaXZhdGUgQmVhbmluZm9zV29ya2Jvb2tQYWdlIGJlYW5pbmZvc1Byb3BlcnR5UGFnZTIgPSBudWxsOwotCXByaXZhdGUgQ29udHJvbCBwYWNrYWdlc1BhZ2VDb250cm9sID0gbnVsbDsKLQlwcml2YXRlIENvbnRyb2wgc2VhcmNocGF0aFBhZ2VDb250cm9sID0gbnVsbDsKLQlwcml2YXRlIENvbnRyb2wgYmVhbmluZm9zUGFnZUNvbnRyb2wgPSBudWxsOwotCXByaXZhdGUgSW1hZ2UgcGFja2FnZXNUYWJJbWFnZTsKLQlwcml2YXRlIEltYWdlIGJlYW5pbmZvc1RhYkltYWdlOwotCXByaXZhdGUgSW1hZ2Ugc2VhcmNoUGF0aFRhYkltYWdlOwotCS8vIC4uLnVpCi0JCi0JcHJpdmF0ZSBJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2VSb290OwotCXByaXZhdGUgSVN0YXR1c0NoYW5nZUxpc3RlbmVyIHN0YXR1c0NoYW5nZUxpc3RlbmVyOwotCXByaXZhdGUgSUJ1aWxkU2VhcmNoUGFnZSBjdXJyZW50UGFnZTsKLQlwcml2YXRlIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdDsKLQlwcml2YXRlIGJvb2xlYW4gZW5hYmxlQmVhbmluZm8gPSB0cnVlOwotCQotCXB1YmxpYyBCZWFuaW5mb1BhdGhzQmxvY2soSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlUm9vdCwgSVN0YXR1c0NoYW5nZUxpc3RlbmVyIHN0YXR1c0NoYW5nZUxpc3RlbmVyKXsKLQkJdGhpcy53b3Jrc3BhY2VSb290ID0gd29ya3NwYWNlUm9vdDsKLQkJdGhpcy5zdGF0dXNDaGFuZ2VMaXN0ZW5lciA9IHN0YXR1c0NoYW5nZUxpc3RlbmVyOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0RW5hYmxlQmVhbmluZm8oYm9vbGVhbiBlbmFibGUpewotCQllbmFibGVCZWFuaW5mbyA9IGVuYWJsZTsKLQkJaWYoZW5hYmxlQmVhbmluZm9DaGVja2JveCE9bnVsbCAmJiAhZW5hYmxlQmVhbmluZm9DaGVja2JveC5pc0Rpc3Bvc2VkKCkpCi0JCQllbmFibGVCZWFuaW5mb0NoZWNrYm94LnNldFNlbGVjdGlvbihlbmFibGUpOwotCX0KLQkKLS8vCS8qKgotLy8JICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgc1NoZWxsMQkKLS8vCSAqCi0vLwkgKi8KLS8vCXByaXZhdGUgdm9pZCBjcmVhdGVTU2hlbGwxKCkgewotLy8JCXNTaGVsbDEgPSBuZXcgU2hlbGwoKTsKLS8vCQlzU2hlbGwxLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLS8vCQljcmVhdGVUb3AoKTsKLS8vCQlzU2hlbGwxLnNldFNpemUobmV3IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludCg0MDMsMjg5KSk7Ci0vLwl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0b3AJCi0JICoKLQkgKi8KLQlwdWJsaWMgQ29udHJvbCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdG9wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJdG9wLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQkJY3JlYXRlVGFiRm9sZGVyKCk7Ci0JCWVuYWJsZUJlYW5pbmZvQ2hlY2tib3ggPSBuZXcgQnV0dG9uKHRvcCwgU1dULkNIRUNLKTsKLQkJZW5hYmxlQmVhbmluZm9DaGVja2JveC5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX2VuYWJsZWJlYW5pbmZvKTsKLQkJZW5hYmxlQmVhbmluZm9DaGVja2JveC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWVuYWJsZUJlYW5pbmZvID0gZW5hYmxlQmVhbmluZm9DaGVja2JveC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlwYWNrYWdlc1dvcmtib29rUGFnZTIuc2V0QmVhbmluZm9FbmFibGVkKGVuYWJsZUJlYW5pbmZvKTsKLQkJCQliZWFuaW5mb3NQcm9wZXJ0eVBhZ2UyLnNldEJlYW5pbmZvRW5hYmxlZChlbmFibGVCZWFuaW5mbyk7Ci0JCQkJc2VhcmNocGF0aE9yZGVyaW5nV29ya2Jvb2tQYWdlMi5zZXRCZWFuaW5mb0VuYWJsZWQoZW5hYmxlQmVhbmluZm8pOwotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXdpZGdldFNlbGVjdGVkKGUpOwotCQkJfQotCQl9KTsKLQkJZW5hYmxlQmVhbmluZm9DaGVja2JveC5zZXRTZWxlY3Rpb24oZW5hYmxlQmVhbmluZm8pOwotCQlpZihqYXZhUHJvamVjdCE9bnVsbCl7Ci0JCQlnZXRQYWNrYWdlc1BhZ2UoKS5pbml0KGphdmFQcm9qZWN0KTsKLQkJCWdldEJlYW5pbmZvc1BhZ2UoKS5pbml0KGphdmFQcm9qZWN0KTsKLQkJCWdldFNlYXJjaHBhdGhPcmRlcmluZ1BhZ2UoKS5pbml0KGphdmFQcm9qZWN0KTsKLQkJfQotCQlyZXR1cm4gdG9wOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRhYkZvbGRlcgkKLQkgKgotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVUYWJGb2xkZXIoKSB7Ci0JCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEoKTsKLQkJZ3JpZERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEuRklMTDsKLQkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0JCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLQkJZ3JpZERhdGEudmVydGljYWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCXRhYkZvbGRlciA9IG5ldyBUYWJGb2xkZXIodG9wLCBTV1QuTk9ORSk7Ci0JCXRhYkZvbGRlci5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLQkJY3JlYXRlUGFja2FnZXNXb3JrYm9va1BhZ2UyKCk7Ci0JCWNyZWF0ZUJlYW5pbmZvc1Byb3BlcnR5UGFnZTIoKTsKLQkJY3JlYXRlU2VhcmNocGF0aE9yZGVyaW5nV29ya2Jvb2tQYWdlMigpOwotCQl0YWJGb2xkZXIuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXRhYkNoYW5nZWQoZS5pdGVtKTsKLQkJCX0KLQkJfSk7Ci0JCQkJCi0JCVRhYkl0ZW0gdGFiSXRlbSA9IG5ldyBUYWJJdGVtKHRhYkZvbGRlciwgU1dULk5PTkUpOwotCQl0YWJJdGVtLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5JbmZvUGF0aHNCbG9ja19QYWdlX1RhYl9QYWNrYWdlcyk7Ci0JCXRhYkl0ZW0uc2V0SW1hZ2UoZ2V0UGFja2FnZXNUYWJJbWFnZSgpKTsKLQkJdGFiSXRlbS5zZXRDb250cm9sKHBhY2thZ2VzUGFnZUNvbnRyb2wpOwotCQlUYWJJdGVtIHRhYkl0ZW0xID0gbmV3IFRhYkl0ZW0odGFiRm9sZGVyLCBTV1QuTk9ORSk7Ci0JCXRhYkl0ZW0xLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5JbmZvUGF0aHNCbG9ja19QYWdlX1RhYl9DbGFzc2VzKTsKLQkJdGFiSXRlbTEuc2V0SW1hZ2UoZ2V0QmVhbmluZm9zVGFiSW1hZ2UoKSk7Ci0JCXRhYkl0ZW0xLnNldENvbnRyb2woYmVhbmluZm9zUGFnZUNvbnRyb2wpOwotCQlUYWJJdGVtIHRhYkl0ZW0yID0gbmV3IFRhYkl0ZW0odGFiRm9sZGVyLCBTV1QuTk9ORSk7Ci0JCXRhYkl0ZW0yLnNldEltYWdlKGdldFNlYXJjaFBhdGhUYWJJbWFnZSgpKTsKLQkJdGFiSXRlbTIuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZXJhY2hwYXRoX3RhYl9vcmRlcik7Ci0JCXRhYkl0ZW0yLnNldENvbnRyb2woc2VhcmNocGF0aFBhZ2VDb250cm9sKTsKLQkJdGFiRm9sZGVyLnNldFNlbGVjdGlvbigyKTsKLQl9Ci0KLQlwcml2YXRlIEltYWdlIGdldFNlYXJjaFBhdGhUYWJJbWFnZSgpIHsKLQkJaWYoc2VhcmNoUGF0aFRhYkltYWdlPT1udWxsKQotCQkJc2VhcmNoUGF0aFRhYkltYWdlID0gSkVNVUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKRU1VSVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgImljb25zL2NwX29yZGVyX29iai5naWYiKS5jcmVhdGVJbWFnZSgpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBzZWFyY2hQYXRoVGFiSW1hZ2U7Ci0JfQotCi0JcHJpdmF0ZSBJbWFnZSBnZXRQYWNrYWdlc1RhYkltYWdlKCkgewotCQlpZihwYWNrYWdlc1RhYkltYWdlPT1udWxsKQotCQkJcGFja2FnZXNUYWJJbWFnZSA9IEphdmFVSS5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX1BBQ0tBR0UpOwotCQlyZXR1cm4gcGFja2FnZXNUYWJJbWFnZTsKLQl9Ci0JCi0JcHJpdmF0ZSBJbWFnZSBnZXRCZWFuaW5mb3NUYWJJbWFnZSgpewotCQlpZihiZWFuaW5mb3NUYWJJbWFnZT09bnVsbCl7Ci0JCQlVUkwgaW1hZ2VVUkwgPSBGaWxlTG9jYXRvci5maW5kKEpFTVVJUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiaWNvbnMvamF2YWJlYW4uZ2lmIiksIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoaW1hZ2VVUkwgIT0gbnVsbCkgCi0JCQkJYmVhbmluZm9zVGFiSW1hZ2UgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCkuY3JlYXRlSW1hZ2UoKTsKLQkJCWVsc2UKLQkJCQliZWFuaW5mb3NUYWJJbWFnZSA9IEltYWdlRGVzY3JpcHRvci5nZXRNaXNzaW5nSW1hZ2VEZXNjcmlwdG9yKCkuY3JlYXRlSW1hZ2UoKTsKLQkJfQotCQlyZXR1cm4gYmVhbmluZm9zVGFiSW1hZ2U7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgcGFja2FnZXNXb3JrYm9va1BhZ2UyCQotCSAqCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVBhY2thZ2VzV29ya2Jvb2tQYWdlMigpIHsKLQkJcGFja2FnZXNQYWdlQ29udHJvbCA9IGdldFBhY2thZ2VzUGFnZSgpLmNyZWF0ZUNvbnRyb2wodGFiRm9sZGVyKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBzZWFyY2hwYXRoT3JkZXJpbmdXb3JrYm9va1BhZ2UyCQotCSAqCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVNlYXJjaHBhdGhPcmRlcmluZ1dvcmtib29rUGFnZTIoKSB7Ci0JCXNlYXJjaHBhdGhQYWdlQ29udHJvbCA9IGdldFNlYXJjaHBhdGhPcmRlcmluZ1BhZ2UoKS5jcmVhdGVDb250cm9sKHRhYkZvbGRlcik7Ci0JCXNlYXJjaHBhdGhQYWdlQ29udHJvbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQgZSkgewotCQkJCWlmKHNlYXJjaFBhdGhUYWJJbWFnZSE9bnVsbCl7Ci0JCQkJCWlmKCFzZWFyY2hQYXRoVGFiSW1hZ2UuaXNEaXNwb3NlZCgpKQotCQkJCQkJc2VhcmNoUGF0aFRhYkltYWdlLmRpc3Bvc2UoKTsKLQkJCQkJc2VhcmNoUGF0aFRhYkltYWdlPW51bGw7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBiZWFuaW5mb3NQcm9wZXJ0eVBhZ2UyCQotCSAqCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUJlYW5pbmZvc1Byb3BlcnR5UGFnZTIoKSB7Ci0JCWJlYW5pbmZvc1BhZ2VDb250cm9sID0gZ2V0QmVhbmluZm9zUGFnZSgpLmNyZWF0ZUNvbnRyb2wodGFiRm9sZGVyKTsKLQkJYmVhbmluZm9zUGFnZUNvbnRyb2wuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50IGUpIHsKLQkJCQlpZihiZWFuaW5mb3NUYWJJbWFnZSE9bnVsbCl7Ci0JCQkJCWlmKCFiZWFuaW5mb3NUYWJJbWFnZS5pc0Rpc3Bvc2VkKCkpCi0JCQkJCQliZWFuaW5mb3NUYWJJbWFnZS5kaXNwb3NlKCk7Ci0JCQkJCWJlYW5pbmZvc1RhYkltYWdlPW51bGw7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQl9Ci0KLQlQYWNrYWdlc1dvcmtib29rUGFnZSBnZXRQYWNrYWdlc1BhZ2UoKXsKLQkJaWYocGFja2FnZXNXb3JrYm9va1BhZ2UyPT1udWxsKQotCQkJcGFja2FnZXNXb3JrYm9va1BhZ2UyID0gbmV3IFBhY2thZ2VzV29ya2Jvb2tQYWdlKHdvcmtzcGFjZVJvb3QsIHRoaXMpOwotCQlyZXR1cm4gcGFja2FnZXNXb3JrYm9va1BhZ2UyOwotCX0KLQkKLQlCZWFuaW5mb3NXb3JrYm9va1BhZ2UgZ2V0QmVhbmluZm9zUGFnZSgpewotCQlpZihiZWFuaW5mb3NQcm9wZXJ0eVBhZ2UyPT1udWxsKQotCQkJYmVhbmluZm9zUHJvcGVydHlQYWdlMiA9IG5ldyBCZWFuaW5mb3NXb3JrYm9va1BhZ2Uod29ya3NwYWNlUm9vdCwgdGhpcyk7Ci0JCXJldHVybiBiZWFuaW5mb3NQcm9wZXJ0eVBhZ2UyOwotCX0KLQkKLQlTZWFyY2hwYXRoT3JkZXJpbmdXb3JrYm9va1BhZ2UgZ2V0U2VhcmNocGF0aE9yZGVyaW5nUGFnZSgpewotCQlpZihzZWFyY2hwYXRoT3JkZXJpbmdXb3JrYm9va1BhZ2UyPT1udWxsKQotCQkJc2VhcmNocGF0aE9yZGVyaW5nV29ya2Jvb2tQYWdlMiA9IG5ldyBTZWFyY2hwYXRoT3JkZXJpbmdXb3JrYm9va1BhZ2UodGhpcyk7Ci0JCXJldHVybiBzZWFyY2hwYXRoT3JkZXJpbmdXb3JrYm9va1BhZ2UyOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgdGFiQ2hhbmdlZChXaWRnZXQgd2lkZ2V0KSB7Ci0JCWlmICh3aWRnZXQgaW5zdGFuY2VvZiBUYWJJdGVtKSB7Ci0JCQlJQnVpbGRTZWFyY2hQYWdlIG5ld1BhZ2UgPSAoSUJ1aWxkU2VhcmNoUGFnZSkgKChUYWJJdGVtKSB3aWRnZXQpLmdldERhdGEoKTsKLQkJCWlmIChjdXJyZW50UGFnZSAhPSBudWxsKSB7Ci0JCQkJTGlzdCBzZWxlY3Rpb24gPSBjdXJyZW50UGFnZS5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKLQkJCQkJbmV3UGFnZS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLQkJCQl9Ci0JCQl9Ci0JCQljdXJyZW50UGFnZSA9IG5ld1BhZ2U7Ci0JCX0KLQl9CQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBydW5uYWJsZSB0aGF0IHNldHMgdGhlIGNvbmZpZ3VyZWQgYnVpbGQgcGF0aHMuCi0JICovCi0JcHVibGljIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBnZXRSdW5uYWJsZSgpIHsKLQkJZmluYWwgYm9vbGVhbiB3YW50TmF0dXJlID0gZW5hYmxlQmVhbmluZm87Ci0JCWZpbmFsIExpc3Qgc2VhcmNoUGF0aEVudHJpZXMgPSB3YW50TmF0dXJlID8gZ2V0U2VhcmNocGF0aE9yZGVyaW5nUGFnZSgpLmdldEVsZW1lbnRzKCkgOiBudWxsOwotCi0JCXJldHVybiBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gewotCQkJCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCQkJfQotCQkJCW1vbml0b3IuYmVnaW5UYXNrKAotCQkJCQlCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZWFyY2hwYXRoX29wZXJhdGlvbmRlc2NyaXB0aW9uLCAKLQkJCQkJMTApOwotCQkJCXRyeSB7Ci0JCQkJCXNldEJlYW5pbmZvU2VhcmNocGF0aCh3YW50TmF0dXJlLCBzZWFyY2hQYXRoRW50cmllcywgbW9uaXRvcik7Ci0JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCXRocm93IG5ldyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKGUpOwotCQkJCX0gZmluYWxseSB7Ci0JCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0QmVhbmluZm9TZWFyY2hwYXRoKAotCQkJYm9vbGVhbiB3YW50TmF0dXJlLAotCQkJTGlzdCBzZWFyY2hQYXRoRW50cmllcywKLQkJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQotCQlpZiAod2FudE5hdHVyZSkgewotCQkJLy8gY3JlYXRlIGJlYW5pbmZvIG5hdHVyZQotCQkJaWYgKCFqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCkuaGFzTmF0dXJlKEJlYW5pbmZvTmF0dXJlLk5BVFVSRV9JRCkpIHsKLQkJCQlhZGROYXR1cmVJRFRvUHJvamVjdChqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCksIEJlYW5pbmZvTmF0dXJlLk5BVFVSRV9JRCwgbW9uaXRvcik7Ci0JCQl9Ci0KLQkJCUJlYW5pbmZvTmF0dXJlIG5hdHVyZSA9IEJlYW5pbmZvTmF0dXJlLmdldFJ1bnRpbWUoamF2YVByb2plY3QuZ2V0UHJvamVjdCgpKTsKLQkJCS8vIE5vdyBidWlsZC9zZXQgdGhlIHNlYXJjaCBwYXRoLgotCQkJaWYgKHNlYXJjaFBhdGhFbnRyaWVzLnNpemUoKSA+IDApIHsKLQkJCQlJQmVhbmluZm9zRG9jRW50cnlbXSBzcGFycmF5ID0gbmV3IElCZWFuaW5mb3NEb2NFbnRyeVtzZWFyY2hQYXRoRW50cmllcy5zaXplKCldOwotCQkJCUl0ZXJhdG9yIGl0ciA9IHNlYXJjaFBhdGhFbnRyaWVzLml0ZXJhdG9yKCk7Ci0JCQkJaW50IGkgPSAwOwotCQkJCXdoaWxlIChpdHIuaGFzTmV4dCgpKSB7Ci0JCQkJCUJQTGlzdEVsZW1lbnQgZWxlbSA9IChCUExpc3RFbGVtZW50KSBpdHIubmV4dCgpOwotCQkJCQlzcGFycmF5W2krK10gPSBlbGVtLmdldEVudHJ5KCk7Ci0JCQkJfQotCQkJCW5hdHVyZS5zZXRTZWFyY2hQYXRoKG5ldyBCZWFuaW5mb3NEb2Moc3BhcnJheSksIG1vbml0b3IpOwotCQkJfSBlbHNlCi0JCQkJbmF0dXJlLnNldFNlYXJjaFBhdGgobnVsbCwgbW9uaXRvcik7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBSZW1vdmUgdGhlIG5hdHVyZSwgbm8gbG9uZ2VyIHdhbnRlZC4KLQkJCXJlbW92ZU5hdHVyZUlERnJvbVByb2plY3QoamF2YVByb2plY3QuZ2V0UHJvamVjdCgpLCBCZWFuaW5mb05hdHVyZS5OQVRVUkVfSUQsIG1vbml0b3IpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhlIGNsYXNzcGF0aCBmb3IgdGhlIGdpdmVuIHByb2plY3QuIE11bHRpcGxlIGNhbGxzIHRvIGluaXQgYXJlIGFsbG93ZWQsCi0JICogYnV0IGFsbCBleGlzdGluZyBzZXR0aW5ncyB3aWxsIGJlIGNsZWFyZWQgYW5kIHJlcGxhY2UgYnkgdGhlIGdpdmVuIG9yIGRlZmF1bHQgcGF0aHMuCi0JICogQHBhcmFtIHByb2plY3QgVGhlIGphdmEgcHJvamVjdCB0byBjb25maWd1cmUuCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJSmF2YVByb2plY3QganByb2plY3QpIHsKLQkJdGhpcy5qYXZhUHJvamVjdCA9IGpwcm9qZWN0OwotCQkvL1RPRE86IGxhYmVsUHJvdmlkZXIuc2V0SmF2YVByb2plY3QoanByb2plY3QpOwotCi0JCXRyeSB7Ci0JCQkvLyBJZiB3ZSBoYXZlIGEgY29uZmlnIGZpbGUsIHdlIHdpbGwgYXNzdW1lIHdlIGhhdmUgYSBuYXR1cmUuIEl0IHdpbGwgYWRkIGl0IGF1dG9tYXRpY2FsbHkKLQkJCS8vIHdoZW4gd2UgYXNrIGZvciB0aGUgaW5mb3JtYXRpb24uIEV2ZW4gaWYgd2UgZGlkbid0IGhhdmUgdGhlIG5hdHVyZSwgYXMgc29vbiBhcyBzb21lb25lCi0JCQkvLyBhc2tzIGZvciBpdCwgd2Ugd291bGQgY3JlYXRlIGl0IGFueWhvdywgYW5kIGl0IHdvdWxkIHVzZSB0aGUgZXhpc3RpbmcgY29uZmlnIGZpbGUuCi0JCQkvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY29uZmlnIGZpbGUsIHdlIGNvdWxkIGhhdmUgdGhlIG5hdHVyZSwgc28gd2Ugd2lsbCBjaGVjayBmb3IgdGhhdCB0b28uCi0JCQlib29sZWFuIGhhdmVDb25maWdGaWxlID0ganByb2plY3QuZ2V0UHJvamVjdCgpLmdldEZpbGUoQmVhbmluZm9OYXR1cmUuUF9CRUFOSU5GT19TRUFSQ0hfUEFUSCkuZXhpc3RzKCk7Ci0JCQlib29sZWFuIGhhdmVOYXR1cmUgPSBqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCkuaGFzTmF0dXJlKEJlYW5pbmZvTmF0dXJlLk5BVFVSRV9JRCk7Ci0JCQllbmFibGVCZWFuaW5mbyA9IGhhdmVDb25maWdGaWxlIHx8IGhhdmVOYXR1cmU7Ci0JCQlpZiAoaGF2ZU5hdHVyZSB8fCBoYXZlQ29uZmlnRmlsZSkgewotCQkJCUJlYW5pbmZvc0RvYyBkb2MgPSBCZWFuaW5mb05hdHVyZS5nZXRSdW50aW1lKGphdmFQcm9qZWN0LmdldFByb2plY3QoKSkuZ2V0U2VhcmNoUGF0aCgpOwotCQkJCUlDbGFzc3BhdGhFbnRyeVtdIHJhdyA9IGphdmFQcm9qZWN0LmdldFJhd0NsYXNzcGF0aCgpOwotCi0JCQkJTGlzdCBuZXdTZWFyY2hwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCWlmIChkb2MgIT0gbnVsbCkgewotCQkJCQlJQmVhbmluZm9zRG9jRW50cnlbXSBzcCA9IGRvYy5nZXRTZWFyY2hwYXRoKCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc3AubGVuZ3RoOyBpKyspIHsKLQkJCQkJCUlCZWFuaW5mb3NEb2NFbnRyeSBjdXJyID0gc3BbaV07Ci0JCQkJCQlib29sZWFuIGlzTWlzc2luZyA9IGZhbHNlOwotCQkJCQkJQlBMaXN0RWxlbWVudCBlbGVtID0gbnVsbDsKLQkJCQkJCWlmIChjdXJyIGluc3RhbmNlb2YgQmVhbmluZm9FbnRyeSkgewotCQkJCQkJCUJlYW5pbmZvRW50cnkgYmUgPSAoQmVhbmluZm9FbnRyeSkgY3VycjsKLQotCQkJCQkJCS8vIGdldCB0aGUgcmVzb3VyY2UsIHRoaXMgdGVsbHMgaWYgdGhlIGJlYW5pbmZvcyBleGlzdCBvciBub3QuCi0JCQkJCQkJT2JqZWN0W10gcGF0aHMgPSBiZS5nZXRDbGFzc3BhdGgoamF2YVByb2plY3QpOwotCQkJCQkJCWlmIChwYXRocyAhPSBudWxsICYmIHBhdGhzLmxlbmd0aCA+IDApIHsKLQkJCQkJCQkJZm9yIChpbnQgaiA9IDA7ICFpc01pc3NpbmcgJiYgaiA8IHBhdGhzLmxlbmd0aDsgaisrKSB7Ci0JCQkJCQkJCQlPYmplY3QgcGF0aCA9IHBhdGhzW2pdOwotCQkJCQkJCQkJaWYgKHBhdGggaW5zdGFuY2VvZiBJUHJvamVjdCkKLQkJCQkJCQkJCQlpc01pc3NpbmcgPSAhKChJUHJvamVjdCkgcGF0aCkuZXhpc3RzKCk7Ci0JCQkJCQkJCQllbHNlIGlmIChwYXRoIGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0JCQkJCQkJCQkJRmlsZSBmID0gbmV3IEZpbGUoKFN0cmluZykgcGF0aCk7Ci0JCQkJCQkJCQkJaXNNaXNzaW5nID0gIWYuZXhpc3RzKCk7Ci0JCQkJCQkJCQl9IGVsc2UgaWYgKHBhdGggaW5zdGFuY2VvZiBJUGF0aCkgewotCQkJCQkJCQkJCWlzTWlzc2luZyA9IHRydWU7CS8vIFBsdWdpbnMgYXJlIGludmFsaWQgaW4gQmVhbmluZm9Db25maWcuIFRoZXkgb25seSBhcHBseSB3aXRoaW4gY29udHJpYnV0aW9ucy4KLQkJCQkJCQkJCX0gZWxzZQotCQkJCQkJCQkJCWlzTWlzc2luZyA9IHRydWU7IC8vIEludmFsaWQsIHNvIGlzTWlzc2luZy4KLQkJCQkJCQkJfQkJCQkJCQkJCi0JCQkJCQkJfSBlbHNlCi0JCQkJCQkJCWlzTWlzc2luZyA9IHRydWU7Ci0KLQkJCQkJCQllbGVtID0gbmV3IEJQQmVhbmluZm9MaXN0RWxlbWVudChiZSwgZ2V0SW5pdGlhbFNlYXJjaHBhdGhzKGJlKSwgaXNNaXNzaW5nKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLy8gU2VhcmNocGF0aCBlbnRyeSwgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByYXcgY2xhc3NwYXRoIGVudHJ5IHRoYXQgaXQgaXMgZm9yLgotCQkJCQkJCWJvb2xlYW4gaXNFeHBvcnRlZCA9IGZhbHNlOwotCQkJCQkJCWJvb2xlYW4gaXNQYWNrYWdlTWlzc2luZyA9IHRydWU7Ci0JCQkJCQkJaXNNaXNzaW5nID0gdHJ1ZTsJLy8gSW5pdGlhbGx5IG1pc3NpbmcgdW50aWwgd2UgZmluZCBpdC4KLQkJCQkJCQlTZWFyY2hwYXRoRW50cnkgY2UgPSAoU2VhcmNocGF0aEVudHJ5KSBjdXJyOwotCQkJCQkJCWludCBraW5kID0gY2UuZ2V0S2luZCgpOwotCQkJCQkJCUlQYXRoIHBhdGggPSBjZS5nZXRQYXRoKCk7Ci0JCQkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCByYXcubGVuZ3RoOyBqKyspIHsKLQkJCQkJCQkJaWYgKHJhd1tqXS5nZXRFbnRyeUtpbmQoKSA9PSBraW5kICYmIHJhd1tqXS5nZXRQYXRoKCkuZXF1YWxzKHBhdGgpKSB7Ci0JCQkJCQkJCQlpc01pc3NpbmcgPSBmYWxzZTsKLQkJCQkJCQkJCWlzRXhwb3J0ZWQgPSByYXdbal0uaXNFeHBvcnRlZCgpIHx8IHJhd1tqXS5nZXRFbnRyeUtpbmQoKSA9PSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1NPVVJDRTsKLQkJCQkJCQkJCVN0cmluZyBwYWNrYWdlTmFtZSA9IGNlLmdldFBhY2thZ2UoKTsKLQkJCQkJCQkJCWlmIChwYWNrYWdlTmFtZSAhPSBudWxsKSB7Ci0JCQkJCQkJCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSByb290cyA9IGphdmFQcm9qZWN0LmZpbmRQYWNrYWdlRnJhZ21lbnRSb290cyhyYXdbal0pOwotCQkJCQkJCQkJCWZvciAoaW50IGsgPSAwOyBrIDwgcm9vdHMubGVuZ3RoOyBrKyspIHsKLQkJCQkJCQkJCQkJSVBhY2thZ2VGcmFnbWVudFJvb3QgaXJvb3QgPSByb290c1trXTsKLQkJCQkJCQkJCQkJaWYgKGlyb290LmdldFBhY2thZ2VGcmFnbWVudChwYWNrYWdlTmFtZSkuZXhpc3RzKCkpIHsKLQkJCQkJCQkJCQkJCWlzUGFja2FnZU1pc3NpbmcgPSBmYWxzZTsKLQkJCQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfSBlbHNlCi0JCQkJCQkJCQkJaXNQYWNrYWdlTWlzc2luZyA9IGZhbHNlOwotCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQkJZWxlbSA9IG5ldyBCUFNlYXJjaExpc3RFbGVtZW50KGNlLCBpc01pc3NpbmcsIGlzUGFja2FnZU1pc3NpbmcsIGlzRXhwb3J0ZWQpOwotCQkJCQkJfQotCi0JCQkJCQluZXdTZWFyY2hwYXRoLmFkZChlbGVtKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCS8vIGluaXRzIHRoZSBkaWFsb2cgZmllbGQKLQkJCQlzZXRTZWFyY2hPcmRlckVsZW1lbnRzKG5ld1NlYXJjaHBhdGgpOwotCi0JCQkJaWYgKGdldFBhY2thZ2VzUGFnZSgpICE9IG51bGwpIHsKLQkJCQkJZ2V0UGFja2FnZXNQYWdlKCkuaW5pdChqYXZhUHJvamVjdCk7Ci0JCQkJCWdldEJlYW5pbmZvc1BhZ2UoKS5pbml0KGphdmFQcm9qZWN0KTsKLQkJCQkJZ2V0U2VhcmNocGF0aE9yZGVyaW5nUGFnZSgpLmluaXQoamF2YVByb2plY3QpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gTm8gbmF0dXJlLCBkaXNhYmxlLAotCQkJCXNldEVuYWJsZUJlYW5pbmZvKGZhbHNlKTsKLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCXNldEVuYWJsZUJlYW5pbmZvKGZhbHNlKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlzZXRFbmFibGVCZWFuaW5mbyhmYWxzZSk7Ci0JCX0KLQotLy8JCWxpc3RlbkZvckNsYXNzcGF0aENoYW5nZSgpOwotCQlkb1N0YXR1c0xpbmVVcGRhdGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGRzIGEgbmF0dXJlIHRvIGEgcHJvamVjdAotCSAqLwotCXByaXZhdGUgdm9pZCBhZGROYXR1cmVJRFRvUHJvamVjdChJUHJvamVjdCBwcm9qLCBTdHJpbmcgbmF0dXJlSWQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gcHJvai5nZXREZXNjcmlwdGlvbigpOwotCQlTdHJpbmdbXSBwcmV2TmF0dXJlcyA9IGRlc2NyaXB0aW9uLmdldE5hdHVyZUlkcygpOwotCQlTdHJpbmdbXSBuZXdOYXR1cmVzID0gbmV3IFN0cmluZ1twcmV2TmF0dXJlcy5sZW5ndGggKyAxXTsKLQkJU3lzdGVtLmFycmF5Y29weShwcmV2TmF0dXJlcywgMCwgbmV3TmF0dXJlcywgMCwgcHJldk5hdHVyZXMubGVuZ3RoKTsKLQkJbmV3TmF0dXJlc1twcmV2TmF0dXJlcy5sZW5ndGhdID0gbmF0dXJlSWQ7Ci0JCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuZXdOYXR1cmVzKTsKLQkJcHJvai5zZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbiwgbW9uaXRvcik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlbW92ZU5hdHVyZUlERnJvbVByb2plY3QoSVByb2plY3QgcHJvaiwgU3RyaW5nIG5hdHVyZUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IHByb2ouZ2V0RGVzY3JpcHRpb24oKTsKLQkJU3RyaW5nW10gcHJldk5hdHVyZXMgPSBkZXNjcmlwdGlvbi5nZXROYXR1cmVJZHMoKTsKLQkJaW50IGluZHggPSAtMTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2TmF0dXJlcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKHByZXZOYXR1cmVzW2ldLmVxdWFscyhuYXR1cmVJZCkpIHsKLQkJCQlpbmR4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoaW5keCA9PSAtMSkKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBuZXdOYXR1cmVzID0gbmV3IFN0cmluZ1twcmV2TmF0dXJlcy5sZW5ndGggLSAxXTsKLQkJaWYgKG5ld05hdHVyZXMubGVuZ3RoICE9IDApIHsKLQkJCVN5c3RlbS5hcnJheWNvcHkocHJldk5hdHVyZXMsIDAsIG5ld05hdHVyZXMsIDAsIGluZHgpOwotCQkJaWYgKGluZHggPCBuZXdOYXR1cmVzLmxlbmd0aCkKLQkJCQlTeXN0ZW0uYXJyYXljb3B5KHByZXZOYXR1cmVzLCBpbmR4ICsgMSwgbmV3TmF0dXJlcywgaW5keCwgbmV3TmF0dXJlcy5sZW5ndGggLSBpbmR4KTsKLQkJfQotCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmV3TmF0dXJlcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24sIG1vbml0b3IpOwotCX0KLQkKLQl2b2lkIGRvU3RhdHVzTGluZVVwZGF0ZSgpIHsKLQkJc3RhdHVzQ2hhbmdlTGlzdGVuZXIuc3RhdHVzQ2hhbmdlZChnZXRTZWFyY2hwYXRoT3JkZXJpbmdQYWdlKCkuZ2V0U3RhdHVzKCkpOwotCX0KLQkKLQkvKgotCSAqIHNlYXJjaE9yZGVyIGRpYWxvZyBtdXN0IG5ldmVyIGhhdmUgYWxsIG9mIGVsZW1lbnRzIHNldAotCSAqIGRpcmVjdGx5LiBNdXN0IGNvbWUgdGhyb3VnaCBoZXJlIGZpcnN0IHNvIHRoYXQgd2UgY2FuCi0JICogbWFrZSBzdXJlIHVwZGF0ZXMgb2NjdXIgaW4gY29ycmVjdCBzZXF1ZW5jZSwgZWxzZQotCSAqIHdlIHdpbGwgd2luZCB1cCB3aXRoIGVudHJpZXMgYmVpbmcgbWFya2VkIGFzIHVuZXhwb3J0ZWQKLQkgKiB3aGVuIHRoZXkgcmVhbGx5IGFyZSBleHBvcnRlZC4gCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VhcmNoT3JkZXJFbGVtZW50cyhMaXN0IG5ld0VsZW1lbnRzKSB7Ci0JCUFycmF5TGlzdCBleHBvcnRlZEVudHJpZXMgPSBuZXcgQXJyYXlMaXN0KG5ld0VsZW1lbnRzLnNpemUoKSk7Ci0JCWZvciAoSXRlcmF0b3IgaXRlciA9IG5ld0VsZW1lbnRzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJQlBMaXN0RWxlbWVudCBlbGVtZW50ID0gKEJQTGlzdEVsZW1lbnQpIGl0ZXIubmV4dCgpOwotCQkJaWYgKGVsZW1lbnQuaXNFeHBvcnRlZCgpKQotCQkJCWV4cG9ydGVkRW50cmllcy5hZGQoZWxlbWVudCk7Ci0JCX0KLQkJCi0JCWdldFNlYXJjaHBhdGhPcmRlcmluZ1BhZ2UoKS5zZXRFbGVtZW50cyhuZXdFbGVtZW50cyk7Ci0JCWdldFNlYXJjaHBhdGhPcmRlcmluZ1BhZ2UoKS5zZXRDaGVja2VkRWxlbWVudHMoZXhwb3J0ZWRFbnRyaWVzKTsKLQl9Ci0JCi0JLyoKLQkgKiBDcmVhdGUgdGhlIFNlYXJjaHBhdGggZWxlbWVudHMgZm9yIGEgQmVhbmluZm9FbGVtZW50LgotCSAqIFJldHVybiBudWxsIGlmIG5vdCB0byB1cGRhdGUuCi0JICovCi0JcHJpdmF0ZSBCUFNlYXJjaExpc3RFbGVtZW50W10gZ2V0SW5pdGlhbFNlYXJjaHBhdGhzKEJlYW5pbmZvRW50cnkgaW5mb0VudHJ5KSB7Ci0KLQkJLy8gV2UgY2FuIG9ubHkgdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgcGFja2FnZXMgd2l0aGluIGJlYW5pbmZvcyB0aGF0IGFyZSAKLQkJLy8gbG9jYXRlZCB3aXRoaW4gYSBwcm9qZWN0IG9uIHRoZSBkZXNrdG9wLiBPdGhlcndpc2Ugd2UgY2FuJ3QgZmluZCBvdXQgd2hhdAotCQkvLyBwYWNrYWdlcyBhcmUgaW4gdGhlbS4KLQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSByb290cyA9IG51bGw7Ci0KLQkJaWYgKGluZm9FbnRyeS5nZXRLaW5kKCkgIT0gQmVhbmluZm9FbnRyeS5CSUVfUExVR0lOKSB7Ci0JCQlJQ2xhc3NwYXRoRW50cnkgcmVzb2x2ZWQgPSBKYXZhQ29yZS5nZXRSZXNvbHZlZENsYXNzcGF0aEVudHJ5KGluZm9FbnRyeS5nZXRDbGFzc3BhdGhFbnRyeSgpKTsKLQkJCUlSZXNvdXJjZSByZXMgPSB3b3Jrc3BhY2VSb290LmZpbmRNZW1iZXIocmVzb2x2ZWQuZ2V0UGF0aCgpKTsKLQkJCWlmIChyZXMgIT0gbnVsbCAmJiByZXMuZXhpc3RzKCkpIHsKLQkJCQlpZiAocmVzIGluc3RhbmNlb2YgSVByb2plY3QpIHsKLQkJCQkJLy8gSXQgaXMgYSBwcm9qZWN0IGl0c2VsZi4KLQkJCQkJSUphdmFQcm9qZWN0IGpwID0gKElKYXZhUHJvamVjdCkgSmF2YUNvcmUuY3JlYXRlKHJlcyk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlpZiAoanAgIT0gbnVsbCkKLQkJCQkJCQlyb290cyA9IGpwLmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKCk7IC8vIEFsbCBvZiB0aGUgcm9vdHMgaW4gdGhlIHByb2plY3QgYXJlIGFwcGxpY2FibGUuCi0JCQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQkvLyBJdCBpcyB3aXRoaW4gYW5vdGhlciBwcm9qZWN0Ci0JCQkJCUlQcm9qZWN0IGNvbnRhaW5pbmdQcm9qZWN0ID0gcmVzLmdldFByb2plY3QoKTsKLQkJCQkJSUphdmFQcm9qZWN0IGpwID0gSmF2YUNvcmUuY3JlYXRlKGNvbnRhaW5pbmdQcm9qZWN0KTsKLQkJCQkJaWYgKGpwICE9IG51bGwpIHsKLQkJCQkJCS8vIFRoZSByb290cyBpZiB0aGlzIGlzIGluIHRoZSBjbGFzc3BhdGggb2YgdGhpcyBwcm9qZWN0Ci0JCQkJCQl0cnkgewotCQkJCQkJCUlQYWNrYWdlRnJhZ21lbnRSb290IHJvb3QgPSBqcC5maW5kUGFja2FnZUZyYWdtZW50Um9vdChyZXNvbHZlZC5nZXRQYXRoKCkpOwotCQkJCQkJCWlmIChyb290ICE9IG51bGwpCi0JCQkJCQkJCXJvb3RzID0gbmV3IElQYWNrYWdlRnJhZ21lbnRSb290W10geyByb290IH07Ci0JCQkJCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJU2VhcmNocGF0aEVudHJ5W10gZW50cmllcyA9IGluZm9FbnRyeS5nZXRTZWFyY2hQYXRocygpOwotCQlCUFNlYXJjaExpc3RFbGVtZW50W10gcGFja2FnZUVsZW1lbnRzID0gbmV3IEJQU2VhcmNoTGlzdEVsZW1lbnRbZW50cmllcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsKLQkJCWkgPCBlbnRyaWVzLmxlbmd0aDsKLQkJCWkrKykgeyAvLyBTZWFyY2hwYXRoIGVudHJ5LCBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJhdyBjbGFzc3BhdGggZW50cnkgdGhhdCBpdCBpcyBmb3IuCi0JCQlib29sZWFuIGlzUGFja2FnZU1pc3NpbmcgPSByb290cyAhPSBudWxsOwotCQkJLy8gSWYgcm9vdHMgaXMgbnVsbCwgdGhlbiB0aGUgcGFja2FnZSBpc24ndCBtaXNzaW5nIGJlY2F1c2Ugd2UgY2FuJ3QgdGVzdCBmb3IgaXQuCi0JCQlTZWFyY2hwYXRoRW50cnkgY2UgPSBlbnRyaWVzW2ldOwotCQkJaWYgKHJvb3RzICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgcGFja2FnZU5hbWUgPSBjZS5nZXRQYWNrYWdlKCk7Ci0JCQkJZm9yIChpbnQgayA9IDA7IGsgPCByb290cy5sZW5ndGg7IGsrKykgewotCQkJCQlJUGFja2FnZUZyYWdtZW50Um9vdCBpcm9vdCA9IHJvb3RzW2tdOwotCQkJCQlpZiAoaXJvb3QuZ2V0UGFja2FnZUZyYWdtZW50KHBhY2thZ2VOYW1lKS5leGlzdHMoKSkgewotCQkJCQkJaXNQYWNrYWdlTWlzc2luZyA9IGZhbHNlOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlwYWNrYWdlRWxlbWVudHNbaV0gPSBuZXcgQlBTZWFyY2hMaXN0RWxlbWVudChjZSwgZmFsc2UsIGlzUGFja2FnZU1pc3NpbmcsIGZhbHNlKTsKLQkJfQotCi0JCXJldHVybiBwYWNrYWdlRWxlbWVudHM7Ci0JfQotCQotCQotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRTZWxlY3RlZExpc3QoSVNlbGVjdGlvbiBzZWxlY3Rpb24pewotCQlMaXN0IHNlbGVjdGVkTGlzdCA9IG51bGw7Ci0JCWlmKHNlbGVjdGlvbiE9bnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbil7Ci0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQlzZWxlY3RlZExpc3QgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3Qoc3RydWN0dXJlZFNlbGVjdGlvbi50b0FycmF5KCkpKTsKLQkJfQotCQlyZXR1cm4gc2VsZWN0ZWRMaXN0OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0JlYW5pbmZvRW5hYmxlZCgpewotCQlyZXR1cm4gZW5hYmxlQmVhbmluZm87Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQmVhbmluZm9zUHJvcGVydHlQYWdlLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CZWFuaW5mb3NQcm9wZXJ0eVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk1MGNhOC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CZWFuaW5mb3NQcm9wZXJ0eVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLS8qCi0KLQotICovCi0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeURlbGVnYXRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkuY29yZS5KRU1VSVBsdWdpbjsKLQotLyoqCi0gKiBQcm9wZXJ0eSBwYWdlIGZvciBjb25maWd1cmluZyBCZWFuaW5mbyBwYXRoCi0gKi8KLXB1YmxpYyBjbGFzcyBCZWFuaW5mb3NQcm9wZXJ0eVBhZ2UgZXh0ZW5kcyBQcm9wZXJ0eVBhZ2UgaW1wbGVtZW50cyBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgewotCQkKLQkvKioKLQkgKiBBcHBsaWVzIHRoZSBzdGF0dXMgdG8gdGhlIHN0YXR1cyBsaW5lIG9mIGEgZGlhbG9nIHBhZ2UuCi0JICoKLQkgKiBAcGFyYW0gcGFnZSB0aGUgZGlhbG9nIHBhZ2UKLQkgKiBAcGFyYW0gc3RhdHVzIHRoZSBzdGF0dXMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYXBwbHlUb1N0YXR1c0xpbmUoRGlhbG9nUGFnZSBwYWdlLCBJU3RhdHVzIHN0YXR1cykgewotCQlTdHJpbmcgbWVzc2FnZT0gc3RhdHVzLmdldE1lc3NhZ2UoKTsKLQkJc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkgewotCQkJY2FzZSBJU3RhdHVzLk9LOgotCQkJCXBhZ2Uuc2V0TWVzc2FnZShtZXNzYWdlLCBJTWVzc2FnZVByb3ZpZGVyLk5PTkUpOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJU3RhdHVzLldBUk5JTkc6Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuV0FSTklORyk7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElTdGF0dXMuSU5GTzoKLQkJCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5JTkZPUk1BVElPTik7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApIHsKLQkJCQkJbWVzc2FnZT0gbnVsbDsKLQkJCQl9Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG51bGwpOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBCZWFuaW5mb1BhdGhzQmxvY2sgZkJ1aWxkUGF0aHNCbG9jazsKLQlwcml2YXRlIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyOwotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQkKLQkvKgotCSAqIEBzZWUgUHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udHJvbChDb21wb3NpdGUpCi0JICovCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotLy8gd2hlbiB3ZSBnZXQgaGVscCB3b3JraW5nLgotLy8JCVdvcmtiZW5jaEhlbHAuc2V0SGVscChwYXJlbnQsIG5ldyBEaWFsb2dQYWdlQ29udGV4dENvbXB1dGVyKHRoaXMsIElKYXZhSGVscENvbnRleHRJZHMuQlVJTERfUEFUSF9QUk9QRVJUWV9QQUdFKSk7Ci0KLQkJLy8gZW5zdXJlIHRoZSBwYWdlIGhhcyBubyBzcGVjaWFsIGJ1dHRvbnMKLQkJbm9EZWZhdWx0QW5kQXBwbHlCdXR0b24oKTsJCQotCQkKLQkJcHJvamVjdD0gZ2V0UHJvamVjdCgpOwotCQlpZiAocHJvamVjdCA9PSBudWxsIHx8ICFpc0phdmFQcm9qZWN0KHByb2plY3QpKSB7Ci0JCQlyZXR1cm4gY3JlYXRlV2l0aG91dEphdmEocGFyZW50KTsKLQkJfSBlbHNlIGlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJcmV0dXJuIGNyZWF0ZUZvckNsb3NlZFByb2plY3QocGFyZW50KTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBjcmVhdGVXaXRoSmF2YShwYXJlbnQpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIENvbnRlbnQgZm9yIHZhbGlkIHByb2plY3RzLgotCSAqLwotCXByaXZhdGUgQ29udHJvbCBjcmVhdGVXaXRoSmF2YShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3Q9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZCdWlsZFBhdGhzQmxvY2s9IG5ldyBCZWFuaW5mb1BhdGhzQmxvY2socm9vdCwgdGhpcyk7Ci0JCWZpbmFsIElKYXZhUHJvamVjdCBqcHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJZkJ1aWxkUGF0aHNCbG9jay5pbml0KGpwcm9qZWN0KTsKLQkJZmluYWwgSVBhdGggY2xhc3NwYXRoZmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiLmNsYXNzcGF0aCIpLmdldEZ1bGxQYXRoKCk7IC8vJE5PTi1OTFMtMSQKLQkJbGlzdGVuZXIgPSBuZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkKLQkJCS8qIChub24tSmF2YWRvYykKLQkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIjcmVzb3VyY2VDaGFuZ2VkKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50KQotCQkJICovCi0JCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZkJ1aWxkUGF0aHNCbG9jayAhPSBudWxsKSB7Ci0JCQkJCWlmIChldmVudC5nZXREZWx0YSgpLmZpbmRNZW1iZXIoY2xhc3NwYXRoZmlsZSkgIT0gbnVsbCkKLQkJCQkJCWdldENvbnRyb2woKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsJLy8gQ2FuIGJlIGNhbGxlZCBvdXRzaWRlIG9mIGRpc3BsYXkgbG9vcAotCQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQkJZkJ1aWxkUGF0aHNCbG9jay5pbml0KGpwcm9qZWN0KTsKLQkJCQkJCQl9Ci0JCQkJCQl9KTsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0JCXByb2plY3QuZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOwotCi0JCXJldHVybiBmQnVpbGRQYXRoc0Jsb2NrLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBDb250ZW50IGZvciBub24tSmF2YSBwcm9qZWN0cy4KLQkgKi8JCi0JcHJpdmF0ZSBDb250cm9sIGNyZWF0ZVdpdGhvdXRKYXZhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJTGFiZWwgbGFiZWw9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5MRUZUKTsKLQkJbGFiZWwuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9Qcm9wZXJ0aWVzUGFnZV9JTkZPX19ub2phdmFwcm9qZWN0KTsgCi0JCQotCQlmQnVpbGRQYXRoc0Jsb2NrPSBudWxsOwotCQlzZXRWYWxpZCh0cnVlKTsKLQkJcmV0dXJuIGxhYmVsOwotCX0KLQotCS8qKgotCSAqIENvbnRlbnQgZm9yIGNsb3NlZCBwcm9qZWN0cy4KLQkgKi8JCQotCXByaXZhdGUgQ29udHJvbCBjcmVhdGVGb3JDbG9zZWRQcm9qZWN0KENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJTGFiZWwgbGFiZWw9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5MRUZUKTsKLQkJbGFiZWwuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9Qcm9wZXJ0aWVzUGFnZV9JTkZPX19jbG9zZWRwcm9qZWN0KTsgCi0JCQotCQlmQnVpbGRQYXRoc0Jsb2NrPSBudWxsOwotCQlzZXRWYWxpZCh0cnVlKTsKLQkJcmV0dXJuIGxhYmVsOwotCX0KLQkKLQlwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCUlBZGFwdGFibGUgYWRhcHRhYmxlPSBnZXRFbGVtZW50KCk7Ci0JCWlmIChhZGFwdGFibGUgIT0gbnVsbCkgewotCQkJSUphdmFFbGVtZW50IGVsZW09IChJSmF2YUVsZW1lbnQpIGFkYXB0YWJsZS5nZXRBZGFwdGVyKElKYXZhRWxlbWVudC5jbGFzcyk7Ci0JCQlpZiAoZWxlbSBpbnN0YW5jZW9mIElKYXZhUHJvamVjdCkgewotCQkJCXJldHVybiAoKElKYXZhUHJvamVjdCkgZWxlbSkuZ2V0UHJvamVjdCgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNKYXZhUHJvamVjdChJUHJvamVjdCBwcm9qKSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gcHJvai5oYXNOYXR1cmUoSmF2YUNvcmUuTkFUVVJFX0lEKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlKRU1VSVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRMb2dnZXIoKS5sb2coZS5nZXRTdGF0dXMoKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0JCi0JCi0JLyoKLQkgKiBAc2VlIElQcmVmZXJlbmNlUGFnZSNwZXJmb3JtT2sKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSB7Ci0JCWlmIChmQnVpbGRQYXRoc0Jsb2NrICE9IG51bGwpIHsKLQkJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZT0gZkJ1aWxkUGF0aHNCbG9jay5nZXRSdW5uYWJsZSgpOwotCi0JCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3A9IG5ldyBXb3Jrc3BhY2VNb2RpZnlEZWxlZ2F0aW5nT3BlcmF0aW9uKHJ1bm5hYmxlKTsKLQkJCVNoZWxsIHNoZWxsPSBnZXRDb250cm9sKCkuZ2V0U2hlbGwoKTsKLQkJCXRyeSB7Ci0JCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcCk7Ci0JCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCQlTdHJpbmcgdGl0bGU9IEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb19VSV9fZXJyb3J0aXRsZTsgCi0JCQkJU3RyaW5nIG1lc3NhZ2U9IEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb19VSV9fZXJyb3I7IAotCQkJCUV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlKGUsIHNoZWxsLCB0aXRsZSwgbWVzc2FnZSk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCS8vIGNhbmNlbGxlZAotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyoqCi0JICogQHNlZSBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIjc3RhdHVzQ2hhbmdlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXR1c0NoYW5nZWQoSVN0YXR1cyBzdGF0dXMpIHsKLQkJc2V0VmFsaWQoIXN0YXR1cy5tYXRjaGVzKElTdGF0dXMuRVJST1IpKTsKLQkJYXBwbHlUb1N0YXR1c0xpbmUodGhpcywgc3RhdHVzKTsKLQl9Ci0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKGxpc3RlbmVyICE9IG51bGwpCi0JCQlwcm9qZWN0LmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIpOwotCQlsaXN0ZW5lciA9IG51bGw7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9CZWFuaW5mb3NXb3JrYm9va1BhZ2UuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JlYW5pbmZvc1dvcmtib29rUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmFhODg0Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0JlYW5pbmZvc1dvcmtib29rUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLkJ1aWxkUGF0aERpYWxvZ0FjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlN0YXR1c0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29yZS5CZWFuaW5mb0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5jb3JlLkpFTVVJUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgQmVhbmluZm9zV29ya2Jvb2tQYWdlIGltcGxlbWVudHMgSUJ1aWxkU2VhcmNoUGFnZXsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESUFMT0dTVE9SRV9MQVNUVkFSSUFCTEUgPSBKRU1VSVBsdWdpbi5QSV9CRUFOSU5GT19VSSArICIubGFzdHZhciI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvLyBhIGRpYWxvZyB0byBjaG9vc2UgYSB2YXJpYWJsZQotCXByaXZhdGUgY2xhc3MgVmFyaWFibGVTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBTdGF0dXNEaWFsb2cgaW1wbGVtZW50cyBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgewkKLQkJcHJpdmF0ZSBWYXJpYWJsZVNlbGVjdGlvbkJsb2NrIGZWYXJpYWJsZVNlbGVjdGlvbkJsb2NrOwotCQlJRGlhbG9nU2V0dGluZ3MgZGlhbG9nU2V0dGluZ3M9IEpFTVVJUGx1Z2luLmdldFBsdWdpbigpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JCQkJCi0JCXB1YmxpYyBWYXJpYWJsZVNlbGVjdGlvbkRpYWxvZyhTaGVsbCBwYXJlbnQsIExpc3QgZXhpc3RpbmdQYXRocykgewotCQkJc3VwZXIocGFyZW50KTsKLQkJCXNldFRpdGxlKCJOZXcgVmFyaWFibGUgQ2xhc3NwYXRoIEVudHJ5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBpbml0VmFyPSBkaWFsb2dTZXR0aW5ncy5nZXQoRElBTE9HU1RPUkVfTEFTVFZBUklBQkxFKTsKLQkJCWZWYXJpYWJsZVNlbGVjdGlvbkJsb2NrPSBuZXcgVmFyaWFibGVTZWxlY3Rpb25CbG9jayh0aGlzLCBleGlzdGluZ1BhdGhzLCBudWxsLCBpbml0VmFyLCBmYWxzZSk7Ci0JCX0KLQkJCi0JCS8qCi0JCSAqIEBzZWUgV2luZG93cyNjb25maWd1cmVTaGVsbAotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpIHsKLQkJCXN1cGVyLmNvbmZpZ3VyZVNoZWxsKG5ld1NoZWxsKTsKLS8vCQkJV29ya2JlbmNoSGVscC5zZXRIZWxwKG5ld1NoZWxsLCBJSmF2YUhlbHBDb250ZXh0SWRzLlZBUklBQkxFX1NFTEVDVElPTl9ESUFMT0cpOwotCQl9CQkKLQotCQkvKgotCQkgKiBAc2VlIFN0YXR1c0RpYWxvZyNjcmVhdGVEaWFsb2dBcmVhKCkKLQkJICovCQkJCQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGU9IChDb21wb3NpdGUpc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJCQkKLQkJCUxhYmVsIG1lc3NhZ2U9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5XUkFQKTsKLQkJCW1lc3NhZ2Uuc2V0VGV4dCgiTmV3IFZhcmlhYmxlIENsYXNzcGF0aCBFbnRyeSIpOyAvLyROT04tTkxTLTEkCi0JCQltZXNzYWdlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOwkKLQkJCQkJCQotCQkJQ29udHJvbCBpbm5lcj0gZlZhcmlhYmxlU2VsZWN0aW9uQmxvY2suY3JlYXRlQ29udHJvbChjb21wb3NpdGUpOwotCQkJaW5uZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0JCQotCQkvKgotCQkgKiBAc2VlIERpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJZGlhbG9nU2V0dGluZ3MucHV0KERJQUxPR1NUT1JFX0xBU1RWQVJJQUJMRSwgZ2V0VmFyaWFibGUoKS5zZWdtZW50KDApKTsKLQkJCXN1cGVyLm9rUHJlc3NlZCgpOwotCQl9CQotCi0JCS8qCi0JCSAqIEBzZWUgSVN0YXR1c0NoYW5nZUxpc3RlbmVyI3N0YXR1c0NoYW5nZWQoKQotCQkgKi8JCQkKLQkJcHVibGljIHZvaWQgc3RhdHVzQ2hhbmdlZChJU3RhdHVzIHN0YXR1cykgewotCQkJdXBkYXRlU3RhdHVzKHN0YXR1cyk7Ci0JCX0KLQkJCi0JCXB1YmxpYyBJUGF0aCBnZXRWYXJpYWJsZSgpIHsKLQkJCXJldHVybiBmVmFyaWFibGVTZWxlY3Rpb25CbG9jay5nZXRWYXJpYWJsZVBhdGgoKTsKLQkJfQkJCi0JfQotCi0JCi0JLy9jb250cm9scwotCXByaXZhdGUgQ29tcG9zaXRlIGphdmFQcm9qZWN0c0NvbXBvc2l0ZSA9IG51bGw7Ci0JcHJpdmF0ZSBMYWJlbCBsYWJlbCA9IG51bGw7Ci0JcHJpdmF0ZSBUYWJsZSB0YWJsZSA9IG51bGw7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgYnV0dG9uc0JhciA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gYWRkRm9sZGVyc2J1dHRvbiA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gYWRkSmFyc0J1dHRvbiA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gYWRkRXh0SmFyc0J1dHRvbiA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gYWRkVmFyaWFibGVCdXR0b24gPSBudWxsOwotCXByaXZhdGUgQnV0dG9uIGFkZFByb2plY3RCdXR0b24gPSBudWxsOwotCXByaXZhdGUgQnV0dG9uIG1vZGlmeVBhdGhzQnV0dG9uID0gbnVsbDsKLQlwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b24gPSBudWxsOwotCXByaXZhdGUgTGFiZWwgc3BhY2VyMiA9IG51bGw7Ci0JcHJpdmF0ZSBMYWJlbCBzcGFjZXIxID0gbnVsbDsKLQkvLyAuLiBjb250cm9scwotCXByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7Ci0JCi0JcHJpdmF0ZSBCZWFuaW5mb1BhdGhzQmxvY2sgYmVhbmluZm9QYXRoc0Jsb2NrOwotCXByaXZhdGUgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0OwotCXByaXZhdGUgTGlzdCBiZWFuaW5mb3NMaXN0OwotCXByaXZhdGUgSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlUm9vdDsKLQlwcml2YXRlIElDbGFzc3BhdGhFbnRyeVtdIHJlc29sdmVkTGlzdDsKLQlwcml2YXRlIElDbGFzc3BhdGhFbnRyeVtdIHJhd0xpc3Q7Ci0JcHJpdmF0ZSBTZWFyY2hQYXRoTGlzdExhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcjsKLQotCXB1YmxpYyBCZWFuaW5mb3NXb3JrYm9va1BhZ2UoSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlUm9vdCwgQmVhbmluZm9QYXRoc0Jsb2NrIGJlYW5pbmZvUGF0aHNCbG9jaykgewotCQl0aGlzLndvcmtzcGFjZVJvb3QgPSB3b3Jrc3BhY2VSb290OwotCQl0aGlzLmJlYW5pbmZvUGF0aHNCbG9jayA9IGJlYW5pbmZvUGF0aHNCbG9jazsKLQkJdGhpcy5sYWJlbFByb3ZpZGVyID0gbmV3IFNlYXJjaFBhdGhMaXN0TGFiZWxQcm92aWRlcigpOwotCQl0aGlzLmJlYW5pbmZvc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmKHNwYWNlcjE9PW51bGwgfHwgc3BhY2VyMj09bnVsbCl7Ci0JCQkvLyBqdXN0IGhhdmUgU09NRSByZWFkIGFjY2VzcwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgamF2YVByb2plY3RzQ29tcG9zaXRlCQotCSAqCi0JICovCi0JcHVibGljIENvbnRyb2wgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEoKTsKLQkJZ3JpZERhdGEuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlqYXZhUHJvamVjdHNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlqYXZhUHJvamVjdHNDb21wb3NpdGUuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOwotCQlsYWJlbCA9IG5ldyBMYWJlbChqYXZhUHJvamVjdHNDb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbkluZm9zV29ya2Jvb2tQYWdlX0xpc3RfVGV4dCk7Ci0JCWxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGEpOwotCQljcmVhdGVUYWJsZSgpOwotCQljcmVhdGVCdXR0b25zQmFyKCk7Ci0JCXVwZGF0ZUVuYWJsZWRTdGF0ZXMoKTsKLQkJcmV0dXJuIGphdmFQcm9qZWN0c0NvbXBvc2l0ZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0YWJsZQkKLQkgKgotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVUYWJsZSgpIHsKLQkJR3JpZERhdGEgZ3JpZERhdGExID0gbmV3IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEoKTsKLQkJZ3JpZERhdGExLmhvcml6b250YWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCWdyaWREYXRhMS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLQkJZ3JpZERhdGExLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLQkJZ3JpZERhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YS5GSUxMOwotCQl0YWJsZSA9IG5ldyBUYWJsZShqYXZhUHJvamVjdHNDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuTVVMVEkgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotCQl0YWJsZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMSk7Ci0JCXRhYmxlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXVwZGF0ZUJ1dHRvbnMoKTsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0JCQl9Ci0JCX0pOwotCQl0YWJsZVZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCXRhYmxlVmlld2VyLnNldFNvcnRlcihuZXcgQklMaXN0RWxlbWVudFNvcnRlcigpKTsKLQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsKLQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihsYWJlbFByb3ZpZGVyKTsKLQkJdGFibGVWaWV3ZXIuc2V0SW5wdXQoYmVhbmluZm9zTGlzdCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgYnV0dG9uc0JhcgkKLQkgKgotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVCdXR0b25zQmFyKCkgewotCQlSb3dMYXlvdXQgcm93TGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOwotCQlyb3dMYXlvdXQudHlwZSA9IG9yZy5lY2xpcHNlLnN3dC5TV1QuVkVSVElDQUw7Ci0JCXJvd0xheW91dC5tYXJnaW5MZWZ0ID0gMzsKLQkJcm93TGF5b3V0LmZpbGwgPSB0cnVlOwotCQlHcmlkRGF0YSBncmlkRGF0YTIgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YSgpOwotCQlncmlkRGF0YTIuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTIudmVydGljYWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YS5CRUdJTk5JTkc7Ci0JCWJ1dHRvbnNCYXIgPSBuZXcgQ29tcG9zaXRlKGphdmFQcm9qZWN0c0NvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQlidXR0b25zQmFyLnNldExheW91dERhdGEoZ3JpZERhdGEyKTsKLQkJYnV0dG9uc0Jhci5zZXRMYXlvdXQocm93TGF5b3V0KTsKLQkJYWRkRm9sZGVyc2J1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uc0JhciwgU1dULk5PTkUpOwotCQlhZGRGb2xkZXJzYnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5JbmZvc1dvcmtib29rUGFnZV9BZGRGb2xkZXJzKTsKLQkJYWRkRm9sZGVyc2J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJTGlzdCBiZWFuaW5mb0VudHJpZXMgPSBjaG9vc2VDbGFzc0NvbnRhaW5lcnMoKTsKLQkJCQlhZGRUb0JlYW5pbmZvc0xpc3QoYmVhbmluZm9FbnRyaWVzKTsKLQkJCX0KLQkJfSk7Ci0JCWFkZEphcnNCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJYWRkSmFyc0J1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkSkFScyk7Ci0JCWFkZEphcnNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCUxpc3QgYmVhbmluZm9FbnRyaWVzID0gY2hvb3NlSmFyRmlsZXMoKTsKLQkJCQlhZGRUb0JlYW5pbmZvc0xpc3QoYmVhbmluZm9FbnRyaWVzKTsKLQkJCX0KLQkJfSk7Ci0JCWFkZEV4dEphcnNCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJYWRkRXh0SmFyc0J1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkRXh0ZXJuYWxKQVIpOwotCQlhZGRFeHRKYXJzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlMaXN0IGJlYW5pbmZvRW50cmllcyA9IGNob29zZUV4dEphckZpbGVzKCk7Ci0JCQkJYWRkVG9CZWFuaW5mb3NMaXN0KGJlYW5pbmZvRW50cmllcyk7Ci0JCQl9Ci0JCX0pOwotCQlhZGRWYXJpYWJsZUJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uc0JhciwgU1dULk5PTkUpOwotCQlhZGRWYXJpYWJsZUJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkVmFyaWFibGUpOwotCQlhZGRWYXJpYWJsZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJTGlzdCBiZWFuaW5mb0VudHJpZXMgPSBjaG9vc2VWYXJpYWJsZUVudHJpZXMoKTsKLQkJCQlhZGRUb0JlYW5pbmZvc0xpc3QoYmVhbmluZm9FbnRyaWVzKTsKLQkJCX0KLQkJfSk7Ci0JCWFkZFByb2plY3RCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJYWRkUHJvamVjdEJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfQWRkUHJvamVjdHMpOwotCQlhZGRQcm9qZWN0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlMaXN0IGJlYW5pbmZvRW50cmllcyA9IGNob29zZVByb2plY3RzKCk7Ci0JCQkJYWRkVG9CZWFuaW5mb3NMaXN0KGJlYW5pbmZvRW50cmllcyk7Ci0JCQl9Ci0JCX0pOwotCQlzcGFjZXIxID0gbmV3IExhYmVsKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJbW9kaWZ5UGF0aHNCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJbW9kaWZ5UGF0aHNCdXR0b24uc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbkluZm9zV29ya2Jvb2tQYWdlX01vZGlmeVBhdGhzKTsKLQkJbW9kaWZ5UGF0aHNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCW1vZGlmeVNlYXJjaFBhdGhzKCk7Ci0JCQl9Ci0JCX0pOwotCQlzcGFjZXIyID0gbmV3IExhYmVsKGJ1dHRvbnNCYXIsIFNXVC5OT05FKTsKLQkJcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25zQmFyLCBTV1QuTk9ORSk7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfUmVtb3ZlKTsKLQkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlMaXN0IHNlbGVjdGVkID0gQmVhbmluZm9QYXRoc0Jsb2NrLmdldFNlbGVjdGVkTGlzdCh0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJYmVhbmluZm9zTGlzdC5yZW1vdmVBbGwoc2VsZWN0ZWQpOwotCQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCQlwYWdlQ2hhbmdlZCgpOwotCQkJfQotCQl9KTsKLQl9Ci0JCi0JcHJpdmF0ZSBMaXN0IGNob29zZVZhcmlhYmxlRW50cmllcygpIHsKLQkJLy8gUmVtb3ZlIGV4aXN0aW5nIHZhcmlhYmxlIGVudHJpZXMgaW4gYm90aCB0aGUgY2xhc3NwYXRoIGFuZCB0aGUgYmVhbmluZm9wYXRocy4KLQkJLy8gRG9uJ3Qgd2FudCBjbGFzc3BhdGggb25lcyBiZWNhdXNlIHRoZXkgc2hvdWxkIGJlIG9mIGJlZW4gc2VsZWN0ZWQgaW4gdGhlIHNlYXJjaCBwYXRocyBwYWdlLgotCQlBcnJheUxpc3QgZXhpc3RpbmdQYXRocz0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgcmF3TGlzdC5sZW5ndGg7IGkrKykgewotCQkJaWYgKHJhd0xpc3RbaV0uZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9WQVJJQUJMRSkgewotCQkJCWV4aXN0aW5nUGF0aHMuYWRkKHJhd0xpc3RbaV0uZ2V0UGF0aCgpKTsKLQkJCX0KLQkJfQotCQkKLQkJTGlzdCBvdXJzID0gYmVhbmluZm9zTGlzdDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvdXJzLnNpemUoKTsgaSsrKSB7Ci0JCQlCUEJlYW5pbmZvTGlzdEVsZW1lbnQgYnBiID0gKEJQQmVhbmluZm9MaXN0RWxlbWVudCkgb3Vycy5nZXQoaSk7Ci0JCQlpZiAoYnBiLmdldEVudHJ5KCkuZ2V0S2luZCgpID09IElDbGFzc3BhdGhFbnRyeS5DUEVfVkFSSUFCTEUpCi0JCQkJZXhpc3RpbmdQYXRocy5hZGQoYnBiLmdldEVudHJ5KCkuZ2V0UGF0aCgpKTsKLQkJfQotCQkKLQkJVmFyaWFibGVTZWxlY3Rpb25EaWFsb2cgZGlhbG9nPSBuZXcgVmFyaWFibGVTZWxlY3Rpb25EaWFsb2coYWRkVmFyaWFibGVCdXR0b24uZ2V0U2hlbGwoKSwgZXhpc3RpbmdQYXRocyk7Ci0JCWlmIChkaWFsb2cub3BlbigpID09IFdpbmRvdy5PSykgewotCQkJSVBhdGggcGF0aD0gZGlhbG9nLmdldFZhcmlhYmxlKCk7Ci0JCQlJQ2xhc3NwYXRoRW50cnkgY3BlID0gSmF2YUNvcmUubmV3VmFyaWFibGVFbnRyeShwYXRoLCBudWxsLCBudWxsKTsKLQkJCUlQYXRoIHJlc29sdmVkUGF0aD0gSmF2YUNvcmUuZ2V0UmVzb2x2ZWRWYXJpYWJsZVBhdGgocGF0aCk7Ci0JCQlib29sZWFuIGlzTWlzc2luZyA9IHJlc29sdmVkUGF0aCA9PSBudWxsIHx8ICFyZXNvbHZlZFBhdGgudG9GaWxlKCkuaXNGaWxlKCk7Ci0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChuZXcgQlBCZWFuaW5mb0xpc3RFbGVtZW50KG5ldyBCZWFuaW5mb0VudHJ5KGNwZSwgbnVsbCwgdHJ1ZSksIG51bGwsIGlzTWlzc2luZykpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0JCi0JCi0JcHJpdmF0ZSBMaXN0IGNob29zZUphckZpbGVzKCkgewotCQlJUGF0aFtdIGphclBhdGhzID0gQnVpbGRQYXRoRGlhbG9nQWNjZXNzLmNob29zZUpBUkVudHJpZXMoYWRkSmFyc0J1dHRvbi5nZXRTaGVsbCgpLCBqYXZhUHJvamVjdC5nZXRQYXRoKCksIGdldFVzZWRKQVJGaWxlcygpKTsKLQkJaWYgKGphclBhdGhzIT1udWxsKSB7Ci0JCQlMaXN0IHJlcz0gbmV3IEFycmF5TGlzdChqYXJQYXRocy5sZW5ndGgpOwotCQkJZm9yIChpbnQgaT0gMDsgaSA8IGphclBhdGhzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJQlBCZWFuaW5mb0xpc3RFbGVtZW50IG5ld0d1eSA9IG5ld0JQQmVhbmluZm9MaXN0RWxlbWVudEZyb21GdWxscGF0aChqYXJQYXRoc1tpXSk7Ci0JCQkJaWYgKG5ld0d1eSAhPSBudWxsKQotCQkJCQlyZXMuYWRkKG5ld0d1eSk7Ci0JCQl9Ci0JCQlyZXR1cm4gcmVzOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgTGlzdCBjaG9vc2VFeHRKYXJGaWxlcygpIHsKLQkJSVBhdGhbXSBleHRKQVJQYXRocyA9IEJ1aWxkUGF0aERpYWxvZ0FjY2Vzcy5jaG9vc2VFeHRlcm5hbEpBUkVudHJpZXMoYWRkRXh0SmFyc0J1dHRvbi5nZXRTaGVsbCgpKTsKLQkJTGlzdCBlbGVtcyA9IG51bGw7Ci0JCWlmKGV4dEpBUlBhdGhzIT1udWxsKXsKLQkJCWVsZW1zID0gbmV3IEFycmF5TGlzdChleHRKQVJQYXRocy5sZW5ndGgpOwotCQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4dEpBUlBhdGhzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJQlBCZWFuaW5mb0xpc3RFbGVtZW50IG5ld0d1eSA9IG5ld0JQQmVhbmluZm9MaXN0RWxlbWVudChleHRKQVJQYXRoc1tpXSk7Ci0JCQkJaWYgKG5ld0d1eSAhPSBudWxsKQotCQkJCQllbGVtcy5hZGQobmV3R3V5KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZWxlbXM7Ci0JfQotCi0JcHJpdmF0ZSBCUEJlYW5pbmZvTGlzdEVsZW1lbnQgbmV3QlBCZWFuaW5mb0xpc3RFbGVtZW50KElQYXRoIHBhdGgpIHsKLQkJLy8gQ3JlYXRlIGZvciBhbiBleHRlcm5hbCwgaWYgbm90IGFscmVhZHkgdXNlZCBpbiBlaXRoZXIgY2xhc3NwYXRoIG9yIGJlYW5pbmZvIHBhdGguCi0JCS8vIFRoZXNlIGNhbid0IGJlIHByZS1zZWxlY3RlZCBvdXQgbGlrZSBmb3IgdGhlIG90aGVyIGNob29zZSBkaWFsb2dzLgotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlc29sdmVkTGlzdC5sZW5ndGg7IGkrKykgewotCQkJSUNsYXNzcGF0aEVudHJ5IGNwZSA9IHJlc29sdmVkTGlzdFtpXTsKLQkJCWlmIChjcGUgIT0gbnVsbCAmJiBjcGUuZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZICYmIGNwZS5nZXRQYXRoKCkuZXF1YWxzKHBhdGgpKQotCQkJCXJldHVybiBudWxsOwkvLyBBbHJlYWR5IGV4aXN0cy4KLQkJfQotCQkKLQkJLy8gTm93IHNlZSBpZiBvbmUgb2Ygb3Vycy4KLQkJTGlzdCBvdXJzID0gYmVhbmluZm9zTGlzdDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvdXJzLnNpemUoKTsgaSsrKSB7Ci0JCQlCUEJlYW5pbmZvTGlzdEVsZW1lbnQgYnBiID0gKEJQQmVhbmluZm9MaXN0RWxlbWVudCkgb3Vycy5nZXQoaSk7Ci0JCQlpZiAoYnBiLmdldEVudHJ5KCkuZ2V0S2luZCgpID09IElDbGFzc3BhdGhFbnRyeS5DUEVfTElCUkFSWSAmJiBicGIuZ2V0RW50cnkoKS5nZXRQYXRoKCkuZXF1YWxzKHBhdGgpKQotCQkJCXJldHVybiBudWxsOwkvLyBBbHJlYWR5IGV4aXN0cwotCQl9Ci0JCQotCQlJQ2xhc3NwYXRoRW50cnkgY3BlID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KHBhdGgsIG51bGwsIG51bGwpOwotCQlCZWFuaW5mb0VudHJ5IGJpZSA9IG5ldyBCZWFuaW5mb0VudHJ5KGNwZSwgbnVsbCwgdHJ1ZSk7Ci0JCXJldHVybiBuZXcgQlBCZWFuaW5mb0xpc3RFbGVtZW50KGJpZSwgbnVsbCwgZmFsc2UpOwotCX0KLQkKLQotCXByaXZhdGUgSVBhdGhbXSBnZXRVc2VkSkFSRmlsZXMoKSB7Ci0JCS8vIEphcnMgdXNlZCBieSBib3RoIHRoZSBjbGFzc3BhdGggYW5kIHRoZSBiZWFuaW5mbyBzZWFyY2ggcGF0aC4KLQkJLy8gRG9uJ3Qgd2FudCBqYXJzIHVzZWQgYnkgY2xhc3NwYXRoIGJlY2F1c2UgdGhvc2Ugd291bGQgdGhlbiBiZQotCQkvLyBpbiB0aGUgYnVpbGRwYXRoIGFuZCB1c2VyIHdvdWxkIHNlbGVjdCBwYXRocyB0aHJvdWdoIHRoZSBzZWFyY2ggcGF0aCBwYWdlLgotCQlBcnJheUxpc3QgcmVzPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGk9IDA7IGkgPCByZXNvbHZlZExpc3QubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChyZXNvbHZlZExpc3RbaV0gIT0gbnVsbCAmJiByZXNvbHZlZExpc3RbaV0uZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZKSB7Ci0JCQkJSVBhdGggcGF0aCA9IHJlc29sdmVkTGlzdFtpXS5nZXRQYXRoKCk7Ci0JCQkJSVJlc291cmNlIHJlc291cmNlPSB3b3Jrc3BhY2VSb290LmZpbmRNZW1iZXIocGF0aCk7Ci0JCQkJaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0JCQkJCXJlcy5hZGQocGF0aCk7Ci0JCQl9Ci0JCX0KLQotCQlMaXN0IGJpbGlzdD0gYmVhbmluZm9zTGlzdDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGJpbGlzdC5zaXplKCk7IGkrKykgewotCQkJQlBMaXN0RWxlbWVudCBlbGVtPSAoQlBMaXN0RWxlbWVudCliaWxpc3QuZ2V0KGkpOwotCQkJaWYgKGVsZW0uZ2V0RW50cnkoKS5nZXRLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZKSB7Ci0JCQkJSVBhdGggcGF0aCA9IGVsZW0uZ2V0RW50cnkoKS5nZXRQYXRoKCk7Ci0JCQkJSVJlc291cmNlIHJlc291cmNlPSB3b3Jrc3BhY2VSb290LmZpbmRNZW1iZXIocGF0aCk7Ci0JCQkJaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0JCQkJCXJlcy5hZGQocGF0aCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJUGF0aFtdKSByZXMudG9BcnJheShuZXcgSVBhdGhbcmVzLnNpemUoKV0pOwotCX0JCi0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgQlBMaXN0RWxlbWVudCBmb3IgdGhlIGdpdmVuIG9iamVjdC4KLQkgKi8KLQlwcml2YXRlIEJQQmVhbmluZm9MaXN0RWxlbWVudCBuZXdCUEJlYW5pbmZvTGlzdEVsZW1lbnQoSVJlc291cmNlIGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkgewotCQkJcmV0dXJuIG5ld0JQQmVhbmluZm9MaXN0RWxlbWVudEZyb21GdWxscGF0aChlbGVtZW50LmdldEZ1bGxQYXRoKCkpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgQlBMaXN0RWxlbWVudCBmb3IgdGhlIGdpdmVuIG9iamVjdC4KLQkgKiBAc2luY2UgMS4yLjAKLQkgKi8KLQlwcml2YXRlIEJQQmVhbmluZm9MaXN0RWxlbWVudCBuZXdCUEJlYW5pbmZvTGlzdEVsZW1lbnRGcm9tRnVsbHBhdGgoSVBhdGggZnVsbFBhdGgpIHsKLQkJaWYoZnVsbFBhdGghPW51bGwpewotCQkJSUNsYXNzcGF0aEVudHJ5IGNwZSA9IEphdmFDb3JlLm5ld0xpYnJhcnlFbnRyeShmdWxsUGF0aCwgbnVsbCwgbnVsbCk7Ci0JCQlCZWFuaW5mb0VudHJ5IGJpZSA9IG5ldyBCZWFuaW5mb0VudHJ5KGNwZSwgbnVsbCwgdHJ1ZSk7Ci0JCQlyZXR1cm4gbmV3IEJQQmVhbmluZm9MaXN0RWxlbWVudChiaWUsIG51bGwsIGZhbHNlKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIExpc3QgY2hvb3NlQ2xhc3NDb250YWluZXJzKCkgewkKLQkJQ2xhc3NbXSBhY2NlcHRlZENsYXNzZXM9IG5ldyBDbGFzc1tdIHsgSUZvbGRlci5jbGFzcyB9OwotCQlJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yIHZhbGlkYXRvcj0gbmV3IFR5cGVkRWxlbWVudFNlbGVjdGlvblZhbGlkYXRvcihhY2NlcHRlZENsYXNzZXMsIHRydWUpOwotCQkJCi0JCWFjY2VwdGVkQ2xhc3Nlcz0gbmV3IENsYXNzW10geyBJUHJvamVjdC5jbGFzcywgSUZvbGRlci5jbGFzcyB9OwotCi0JCVZpZXdlckZpbHRlciBmaWx0ZXI9IG5ldyBUeXBlZFZpZXdlckZpbHRlcihhY2NlcHRlZENsYXNzZXMsIGdldFVzZWRDb250YWluZXJzKCkpOwkKLQkJCQotCQlJTGFiZWxQcm92aWRlciBscD0gbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKTsKLQkJSVRyZWVDb250ZW50UHJvdmlkZXIgY3A9IG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKTsKLQotCQlFbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2c9IG5ldyBFbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZyhhZGRGb2xkZXJzYnV0dG9uLmdldFNoZWxsKCksIGxwLCBjcCk7Ci0JCWRpYWxvZy5zZXRWYWxpZGF0b3IodmFsaWRhdG9yKTsKLQkJZGlhbG9nLnNldFRpdGxlKEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX0NsYXNzZXNfVGl0bGUpOyAKLQkJZGlhbG9nLnNldE1lc3NhZ2UoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5JbmZvc1dvcmtib29rUGFnZV9TZWxlY3Rpb25EaWFsb2dfQ2xhc3Nlc19Qcm9tcHQpOyAgCi0JCWRpYWxvZy5hZGRGaWx0ZXIoZmlsdGVyKTsKLQkJZGlhbG9nLnNldElucHV0KHdvcmtzcGFjZVJvb3QpOwotCQlkaWFsb2cuc2V0SW5pdGlhbFNlbGVjdGlvbihqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCkpOwotCQkKLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlPYmplY3RbXSBlbGVtZW50cz0gZGlhbG9nLmdldFJlc3VsdCgpOwotCQkJTGlzdCByZXM9IG5ldyBBcnJheUxpc3QoZWxlbWVudHMubGVuZ3RoKTsKLQkJCWZvciAoaW50IGk9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJCUJQQmVhbmluZm9MaXN0RWxlbWVudCBuZXdHdXkgPSBuZXdCUEJlYW5pbmZvTGlzdEVsZW1lbnQoKElSZXNvdXJjZSkgZWxlbWVudHNbaV0pOwotCQkJCWlmIChuZXdHdXkgIT0gbnVsbCkKLQkJCQkJcmVzLmFkZChuZXdHdXkpOwotCQkJfQotCQkJcmV0dXJuIHJlczsKLQkJfQotCQlyZXR1cm4gbnVsbDsJCQotCX0KLQkKLQlwcml2YXRlIElDb250YWluZXJbXSBnZXRVc2VkQ29udGFpbmVycygpIHsKLQkJLy8gQ29udGFpbmVycyB1c2VkIGJ5IGJvdGggdGhlIGNsYXNzcGF0aCBhbmQgdGhlIGJlYW5pbmZvIHNlYXJjaCBwYXRoLgotCQkvLyBEb24ndCB3YW50IGNvbnRhaW5lcnMgdXNlZCBieSBjbGFzc3BhdGggYmVjYXVzZSB0aG9zZSB3b3VsZCB0aGVuIGJlCi0JCS8vIGluIHRoZSBidWlsZHBhdGggYW5kIHVzZXIgd291bGQgc2VsZWN0IHBhdGhzIHRocm91Z2ggdGhlIHNlYXJjaCBwYXRoIHBhZ2UuCi0JCUFycmF5TGlzdCByZXM9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlQYXRoIG91dHB1dExvY2F0aW9uPSBqYXZhUHJvamVjdC5nZXRPdXRwdXRMb2NhdGlvbigpOwotCQkJaWYgKG91dHB1dExvY2F0aW9uICE9IG51bGwpIHsKLQkJCQlJUmVzb3VyY2UgcmVzb3VyY2U9IHdvcmtzcGFjZVJvb3QuZmluZE1lbWJlcihvdXRwdXRMb2NhdGlvbik7Ci0JCQkJaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikgewotCQkJCQlyZXMuYWRkKHJlc291cmNlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUgaXQgaGVyZSwganVzdCBsb2cKLQkJCUpFTVVJUGx1Z2luLmdldFBsdWdpbigpLmdldExvZ2dlcigpLmxvZyhlLmdldFN0YXR1cygpKTsKLQkJfQotCQkJCi0JCWZvciAoaW50IGk9IDA7IGkgPCByZXNvbHZlZExpc3QubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChyZXNvbHZlZExpc3RbaV0gIT0gbnVsbCAmJiByZXNvbHZlZExpc3RbaV0uZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9TT1VSQ0UpIHsKLQkJCQlJUmVzb3VyY2UgcmVzb3VyY2U9IHdvcmtzcGFjZVJvb3QuZmluZE1lbWJlcihyZXNvbHZlZExpc3RbaV0uZ2V0UGF0aCgpKTsKLQkJCQlpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJQ29udGFpbmVyKSB7Ci0JCQkJCXJlcy5hZGQocmVzb3VyY2UpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCUxpc3QgYmlsaXN0PSBiZWFuaW5mb3NMaXN0OwotCQlmb3IgKGludCBpPSAwOyBpIDwgYmlsaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQlCUExpc3RFbGVtZW50IGVsZW09IChCUExpc3RFbGVtZW50KWJpbGlzdC5nZXQoaSk7Ci0JCQlpZiAoZWxlbS5nZXRFbnRyeSgpLmdldEtpbmQoKSA9PSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1NPVVJDRSkgewotCQkJCUlSZXNvdXJjZSByZXNvdXJjZT0gd29ya3NwYWNlUm9vdC5maW5kTWVtYmVyKGVsZW0uZ2V0RW50cnkoKS5nZXRQYXRoKCkpOwotCQkJCXJlcy5hZGQocmVzb3VyY2UpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoSUNvbnRhaW5lcltdKSByZXMudG9BcnJheShuZXcgSUNvbnRhaW5lcltyZXMuc2l6ZSgpXSk7Ci0JfQotCQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9CZWFuaW5mb3NMaXN0KGZpbmFsIExpc3QgdG9BZGQpewotCQlpZiAoYmVhbmluZm9zTGlzdCAhPSBudWxsICYmIHRvQWRkIT1udWxsKSB7Ci0JCQliZWFuaW5mb3NMaXN0LmFkZEFsbCh0b0FkZCk7Ci0JCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JCQl0YWJsZS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJdGFibGVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRvQWRkKSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQlwYWdlQ2hhbmdlZCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwYWdlQ2hhbmdlZCgpIHsKLQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCS8vIGFscmVhZHkgaW5pdGlhbGl6ZWQKLQkJCXVwZGF0ZVNlYXJjaHBhdGhMaXN0KCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlU2VhcmNocGF0aExpc3QoKSB7Ci0JCUxpc3Qgc2VhcmNoZWxlbWVudHMgPSBiZWFuaW5mb1BhdGhzQmxvY2suZ2V0U2VhcmNocGF0aE9yZGVyaW5nUGFnZSgpLmdldEVsZW1lbnRzKCk7Ci0KLQkJTGlzdCBiZWFuaW5mb2VsZW1lbnRzID0gbmV3IEFycmF5TGlzdChiZWFuaW5mb3NMaXN0KTsKLQotCQlib29sZWFuIGNoYW5nZURvbmUgPSBmYWxzZTsKLQkJLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgc2VhcmNoIHBhdGggYW5kIHJlbW92ZSBhbnkgQmVhbmluZm8gbGlzdCBlbGVtZW50cyB0aGF0Ci0JCS8vIGFyZSBub3QgaW4gdGhpcyBwYWdlcyBiZWFuaW5mb3MgbGlzdC4KLQkJZm9yIChMaXN0SXRlcmF0b3Igc3BpdHIgPSBzZWFyY2hlbGVtZW50cy5saXN0SXRlcmF0b3Ioc2VhcmNoZWxlbWVudHMuc2l6ZSgpKTsKLQkJCXNwaXRyLmhhc1ByZXZpb3VzKCk7Ci0JCQkpIHsKLQkJCUJQTGlzdEVsZW1lbnQgZWxlbWVudCA9IChCUExpc3RFbGVtZW50KSBzcGl0ci5wcmV2aW91cygpOwotCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCUEJlYW5pbmZvTGlzdEVsZW1lbnQgJiYgIWJlYW5pbmZvZWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpKSB7Ci0JCQkJLy8gU2VhcmNoIGVsZW1lbnQgYW5kIG5vdCBmb3VuZCBpbiBwYWNrYWdlcyBsaXN0IHNvIHJlbW92ZSBpdCBmcm9tIHNlYXJjaHBhdGggbGlzdC4KLQkJCQlzcGl0ci5yZW1vdmUoKTsKLQkJCQljaGFuZ2VEb25lID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQkvLyBBbnkgbGVmdCBvdmVyIGluIGJlYW5pbmZvcyBsaXN0IGFyZSBuZXcgYW5kIG5lZWQgdG8gYmUgYWRkZWQuCi0JCXNlYXJjaGVsZW1lbnRzLmFkZEFsbChiZWFuaW5mb2VsZW1lbnRzKTsKLQkJY2hhbmdlRG9uZSA9IGNoYW5nZURvbmUgfHwgIWJlYW5pbmZvZWxlbWVudHMuaXNFbXB0eSgpOwotCi0JCWlmIChjaGFuZ2VEb25lKQotCQkJYmVhbmluZm9QYXRoc0Jsb2NrLnNldFNlYXJjaE9yZGVyRWxlbWVudHMoc2VhcmNoZWxlbWVudHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KXsKLQkJdGhpcy5qYXZhUHJvamVjdCA9IGphdmFQcm9qZWN0OwotCQlsYWJlbFByb3ZpZGVyLnNldEphdmFQcm9qZWN0KHRoaXMuamF2YVByb2plY3QpOwotCQl0cnkgewotCQkJcmF3TGlzdCA9IHRoaXMuamF2YVByb2plY3QuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCQlyZXNvbHZlZExpc3QgPSBuZXcgSUNsYXNzcGF0aEVudHJ5W3Jhd0xpc3QubGVuZ3RoXTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmF3TGlzdC5sZW5ndGg7IGkrKykgewotCQkJCXJlc29sdmVkTGlzdFtpXSA9IEphdmFDb3JlLmdldFJlc29sdmVkQ2xhc3NwYXRoRW50cnkocmF3TGlzdFtpXSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQlyYXdMaXN0ID0gcmVzb2x2ZWRMaXN0ID0gbmV3IElDbGFzc3BhdGhFbnRyeVswXTsKLQkJfQotCQl1cGRhdGVCZWFuaW5mb3NMaXN0KCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZUJlYW5pbmZvc0xpc3QoKSB7Ci0JCUxpc3Qgc3BlbGVtZW50cyA9IGJlYW5pbmZvUGF0aHNCbG9jay5nZXRTZWFyY2hwYXRoT3JkZXJpbmdQYWdlKCkuZ2V0RWxlbWVudHMoKTsKLQotCQlMaXN0IGJpRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KHNwZWxlbWVudHMuc2l6ZSgpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzcGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7Ci0JCQlCUExpc3RFbGVtZW50IHNwZSA9IChCUExpc3RFbGVtZW50KSBzcGVsZW1lbnRzLmdldChpKTsKLQkJCWlmIChzcGUgaW5zdGFuY2VvZiBCUEJlYW5pbmZvTGlzdEVsZW1lbnQpIHsKLQkJCQliaUVsZW1lbnRzLmFkZChzcGUpOwotCQkJfQotCQl9Ci0JCWJlYW5pbmZvc0xpc3QuY2xlYXIoKTsKLQkJYmVhbmluZm9zTGlzdC5hZGRBbGwoYmlFbGVtZW50cyk7Ci0JCWlmKHRhYmxlVmlld2VyIT1udWxsICYmICF0YWJsZS5pc0Rpc3Bvc2VkKCkpCi0JCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0U2VsZWN0aW9uKCkgewotCQlpZih0YWJsZVZpZXdlciE9bnVsbCkKLQkJCXJldHVybiBCZWFuaW5mb1BhdGhzQmxvY2suZ2V0U2VsZWN0ZWRMaXN0KHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKExpc3Qgc2VsZWN0aW9uKSB7Ci0JCWlmKHRhYmxlVmlld2VyIT1udWxsKQotCQkJdGFibGVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbikpOwotCX0KLQotCQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUJ1dHRvbnMoKXsKLQkJTGlzdCBzZWxlY3RlZCA9IEJlYW5pbmZvUGF0aHNCbG9jay5nZXRTZWxlY3RlZExpc3QodGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOwotCQlhZGRFeHRKYXJzQnV0dG9uLnNldEVuYWJsZWQoYmVhbmluZm9QYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCQlhZGRGb2xkZXJzYnV0dG9uLnNldEVuYWJsZWQoYmVhbmluZm9QYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCQlhZGRKYXJzQnV0dG9uLnNldEVuYWJsZWQoYmVhbmluZm9QYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCQlhZGRQcm9qZWN0QnV0dG9uLnNldEVuYWJsZWQoYmVhbmluZm9QYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCQlhZGRWYXJpYWJsZUJ1dHRvbi5zZXRFbmFibGVkKGJlYW5pbmZvUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJCi0JCXJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKHNlbGVjdGVkIT1udWxsICYmIHNlbGVjdGVkLnNpemUoKT4wICYmIGJlYW5pbmZvUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJbW9kaWZ5UGF0aHNCdXR0b24uc2V0RW5hYmxlZChzZWxlY3RlZCE9bnVsbCAmJiBzZWxlY3RlZC5zaXplKCk9PTEgJiYgYmVhbmluZm9QYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCX0KLQkKLQlwcml2YXRlIExpc3QgY2hvb3NlUHJvamVjdHMoKSB7CQotCQlDbGFzc1tdIGFjY2VwdGVkQ2xhc3Nlcz0gbmV3IENsYXNzW10geyBJSmF2YVByb2plY3QuY2xhc3MgfTsKLQkJSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvciB2YWxpZGF0b3I9IG5ldyBUeXBlZEVsZW1lbnRTZWxlY3Rpb25WYWxpZGF0b3IoYWNjZXB0ZWRDbGFzc2VzLCB0cnVlKTsKLQotCQlMaXN0IGFsbFByb2plY3RzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWFsbFByb2plY3RzID0gbmV3IEFycmF5TGlzdChBcnJheXMuYXNMaXN0KGphdmFQcm9qZWN0LmdldEphdmFNb2RlbCgpLmdldENoaWxkcmVuKCkpKTsKLQkJfSBjYXRjaChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJYWxsUHJvamVjdHMgPSBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCQl9Ci0JCWFsbFByb2plY3RzLnJlbW92ZUFsbChnZXRVc2VkUHJvamVjdHMoKSk7Ci0JCQkKLQkJSUxhYmVsUHJvdmlkZXIgbHA9IG5ldyBKYXZhRWxlbWVudExhYmVsUHJvdmlkZXIoSmF2YUVsZW1lbnRMYWJlbFByb3ZpZGVyLlNIT1dfREVGQVVMVCk7Ci0KLQkJRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2cgZGlhbG9nPSBuZXcgRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2coYWRkUHJvamVjdEJ1dHRvbi5nZXRTaGVsbCgpLCBscCk7Ci0JCWRpYWxvZy5zZXRWYWxpZGF0b3IodmFsaWRhdG9yKTsKLQkJZGlhbG9nLnNldFRpdGxlKEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX1Byb2plY3RzX1RpdGxlKTsgCi0JCWRpYWxvZy5zZXRNZXNzYWdlKEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX1Byb2plY3RzX1Byb21wdCk7IAotCQlkaWFsb2cuc2V0RWxlbWVudHMoYWxsUHJvamVjdHMudG9BcnJheSgpKTsKLQkJCi0JCWlmIChkaWFsb2cub3BlbigpID09IFdpbmRvdy5PSykgewotCQkJT2JqZWN0W10gZWxlbWVudHM9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCUxpc3QgcmVzPSBuZXcgQXJyYXlMaXN0KGVsZW1lbnRzLmxlbmd0aCk7Ci0JCQlmb3IgKGludCBpPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQlJQ2xhc3NwYXRoRW50cnkgY3BlID0gSmF2YUNvcmUubmV3UHJvamVjdEVudHJ5KCgoSUphdmFQcm9qZWN0KSBlbGVtZW50c1tpXSkuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCkuZ2V0RnVsbFBhdGgoKSk7Ci0JCQkJCUJlYW5pbmZvRW50cnkgYmllID0gbmV3IEJlYW5pbmZvRW50cnkoY3BlLCBudWxsLCB0cnVlKTsKLQkJCQkJcmVzLmFkZChuZXcgQlBCZWFuaW5mb0xpc3RFbGVtZW50KGJpZSwgbnVsbCwgZmFsc2UpKTsKLQkJCQl9IGNhdGNoKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHJlczsKLQkJfQotCQlyZXR1cm4gbnVsbDsJCQotCX0KLQkKLQlwcml2YXRlIExpc3QgZ2V0VXNlZFByb2plY3RzKCkgewotCQkvLyBQcm9qZWN0cyB1c2VkIGJ5IGJvdGggdGhlIGNsYXNzcGF0aCBhbmQgdGhlIGJlYW5pbmZvIHNlYXJjaCBwYXRoLgotCQkvLyBEb24ndCB3YW50IHByb2plY3RzIHVzZWQgYnkgY2xhc3NwYXRoIGJlY2F1c2UgdGhvc2Ugd291bGQgdGhlbiBiZQotCQkvLyBpbiB0aGUgYnVpbGRwYXRoIGFuZCB1c2VyIHdvdWxkIHNlbGVjdCBwYXRocyB0aHJvdWdoIHRoZSBzZWFyY2ggcGF0aCBwYWdlLgotCQlBcnJheUxpc3QgcmVzPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXJlcy5hZGQoamF2YVByb2plY3QpOwkvLyBQbHVzIG91ciBvd24gcHJvamVjdCBpcyB1c2VkLgotCQlJSmF2YU1vZGVsIGptb2RlbCA9IGphdmFQcm9qZWN0LmdldEphdmFNb2RlbCgpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgcmVzb2x2ZWRMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAocmVzb2x2ZWRMaXN0W2ldICE9IG51bGwgJiYgcmVzb2x2ZWRMaXN0W2ldLmdldEVudHJ5S2luZCgpID09IElDbGFzc3BhdGhFbnRyeS5DUEVfUFJPSkVDVCkgewotCQkJCXJlcy5hZGQoam1vZGVsLmdldEphdmFQcm9qZWN0KHJlc29sdmVkTGlzdFtpXS5nZXRQYXRoKCkuc2VnbWVudCgwKSkpOwotCQkJfQotCQl9Ci0KLQkJTGlzdCBiaWxpc3Q9IGJlYW5pbmZvc0xpc3Q7Ci0JCWZvciAoaW50IGk9IDA7IGkgPCBiaWxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCUJQTGlzdEVsZW1lbnQgZWxlbT0gKEJQTGlzdEVsZW1lbnQpYmlsaXN0LmdldChpKTsKLQkJCWlmIChlbGVtLmdldEVudHJ5KCkuZ2V0S2luZCgpID09IElDbGFzc3BhdGhFbnRyeS5DUEVfUFJPSkVDVCkgCi0JCQkJcmVzLmFkZChqbW9kZWwuZ2V0SmF2YVByb2plY3QoZWxlbS5nZXRFbnRyeSgpLmdldFBhdGgoKS5zZWdtZW50KDApKSk7CQkJCi0JCX0KLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbW9kaWZ5U2VhcmNoUGF0aHMoKSB7Ci0JCS8vIEJyaW5nIHVwIHRoZSBkaWFsb2cgZm9yIG1vZGlmeWluZyBzZWFyY2ggcGF0aHMgb2YgYSBwYXJ0aWN1bGFyIGJlYW5pbmZvIGVudHJ5LgotCQlCUEJlYW5pbmZvTGlzdEVsZW1lbnQgZWxlbSA9IChCUEJlYW5pbmZvTGlzdEVsZW1lbnQpICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwkvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUsIGJ1dHRvbiBub3QgZW5hYmxlZCBpZiBub25lIG9yIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQuCi0JCUJlYW5pbmZvRW50cnlTZWFyY2hwYXRoRGlhbG9nIGRpYWxvZyA9IG5ldyBCZWFuaW5mb0VudHJ5U2VhcmNocGF0aERpYWxvZyhtb2RpZnlQYXRoc0J1dHRvbi5nZXRTaGVsbCgpLCBlbGVtLCBqYXZhUHJvamVjdCk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZXMoKXsKLQkJdXBkYXRlQnV0dG9ucygpOwotCQl0YWJsZS5zZXRFbmFibGVkKGJlYW5pbmZvUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJbGFiZWwuc2V0RW5hYmxlZChiZWFuaW5mb1BhdGhzQmxvY2suaXNCZWFuaW5mb0VuYWJsZWQoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEJlYW5pbmZvRW5hYmxlZChib29sZWFuIGVuYWJsZSkgewotCQlpZihqYXZhUHJvamVjdHNDb21wb3NpdGUhPW51bGwgJiYgIWphdmFQcm9qZWN0c0NvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpeyAKLQkJCS8vIHVpIHBvcHVsYXRlZAotCQkJdXBkYXRlRW5hYmxlZFN0YXRlcygpOwotCQl9Ci0JfQotCi19ICAvLyAgQGp2ZTpkZWNsLWluZGV4PTA6dmlzdWFsLWNvbnN0cmFpbnQ9IjEwLDEwIgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvRXhjZXB0aW9uSGFuZGxlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvRXhjZXB0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjkzNWQyLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0V4Y2VwdGlvbkhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkVycm9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5jb3JlLkpFTVVJUGx1Z2luOwotIAotLyoqCi0gKiAKLSAqIAotICogQHNpbmNlIDEuMi4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGNlcHRpb25IYW5kbGVyIHsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogQHBhcmFtIHNoZWxsCi0JICogQHBhcmFtIHRpdGxlCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAKLQkgKiBAc2luY2UgMS4yLjAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgaGFuZGxlKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSwgU2hlbGwgc2hlbGwsIFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJVGhyb3dhYmxlIHRhcmdldD0gZS5nZXRUYXJnZXRFeGNlcHRpb24oKTsKLQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIENvcmVFeGNlcHRpb24pIHsKLQkJCWhhbmRsZSgoQ29yZUV4Y2VwdGlvbil0YXJnZXQsIHNoZWxsLCB0aXRsZSwgbWVzc2FnZSk7Ci0JCX0gZWxzZSB7Ci0JCQlKRU1VSVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRMb2dnZXIoKS5sb2coZSk7Ci0JCQlpZiAoZS5nZXRNZXNzYWdlKCkgIT0gbnVsbCAmJiBlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApIHsKLQkJCQlkaXNwbGF5TWVzc2FnZURpYWxvZyhlLCBlLmdldE1lc3NhZ2UoKSwgc2hlbGwsIHRpdGxlLCBtZXNzYWdlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGlzcGxheU1lc3NhZ2VEaWFsb2coZSwgdGFyZ2V0LmdldE1lc3NhZ2UoKSwgc2hlbGwsIHRpdGxlLCBtZXNzYWdlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgaGFuZGxlKENvcmVFeGNlcHRpb24gZSwgU2hlbGwgc2hlbGwsIFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJSkVNVUlQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0TG9nZ2VyKCkubG9nKGUpOwotCQlJU3RhdHVzIHN0YXR1cz0gZS5nZXRTdGF0dXMoKTsKLQkJaWYgKHN0YXR1cyAhPSBudWxsKSB7Ci0JCQlFcnJvckRpYWxvZy5vcGVuRXJyb3Ioc2hlbGwsIHRpdGxlLCBtZXNzYWdlLCBzdGF0dXMpOwotCQl9IGVsc2UgewotCQkJZGlzcGxheU1lc3NhZ2VEaWFsb2coZSwgZS5nZXRNZXNzYWdlKCksIHNoZWxsLCB0aXRsZSwgbWVzc2FnZSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBkaXNwbGF5TWVzc2FnZURpYWxvZyhUaHJvd2FibGUgdCwgU3RyaW5nIGV4Y2VwdGlvbk1lc3NhZ2UsIFNoZWxsIHNoZWxsLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCVN0cmluZ1dyaXRlciBtc2c9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotCQkJbXNnLndyaXRlKG1lc3NhZ2UpOwotCQkJbXNnLndyaXRlKCJcblxuIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlpZiAoZXhjZXB0aW9uTWVzc2FnZSA9PSBudWxsIHx8IGV4Y2VwdGlvbk1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkKLQkJCW1zZy53cml0ZShCZWFuSW5mb1VJTWVzc2FnZXMuRXhjZXB0aW9uSGFuZGxlcl9lcnJvcmRpYWxvZ19tc2dfc2VlbG9nKTsgCi0JCWVsc2UKLQkJCW1zZy53cml0ZShleGNlcHRpb25NZXNzYWdlKTsKLQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Ioc2hlbGwsIHRpdGxlLCBtc2cudG9TdHJpbmcoKSk7CQkJCi0JfQkKLQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvSUJ1aWxkU2VhcmNoUGFnZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvSUJ1aWxkU2VhcmNoUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjY2NzBiLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL0lCdWlsZFNlYXJjaFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElCdWlsZFNlYXJjaFBhZ2UgewotCi0JcHVibGljIExpc3QgZ2V0U2VsZWN0aW9uKCk7Ci0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKExpc3Qgc2VsZWN0aW9uKTsKLQlwdWJsaWMgdm9pZCBzZXRCZWFuaW5mb0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzZmNlNS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotIAotLyoqCi0gKiBTdGF0dXMgY2hhbmdlIGxpc3RlbmVyCi0gKiAKLSAqIEBzaW5jZSAxLjIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTdGF0dXNDaGFuZ2VMaXN0ZW5lciB7Ci0JCi0JLyoqCi0JICogTm90aWZpZXMgdGhpcyBsaXN0ZW5lciB0aGF0IHRoZSBnaXZlbiBzdGF0dXMgaGFzIGNoYW5nZWQuCi0JICogCi0JICogQHBhcmFtCXN0YXR1cwl0aGUgbmV3IHN0YXR1cwotCSAqLwotCXZvaWQgc3RhdHVzQ2hhbmdlZChJU3RhdHVzIHN0YXR1cyk7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9JbWFnZURpc3Bvc2VyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9JbWFnZURpc3Bvc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4OTFmZjcuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvSW1hZ2VEaXNwb3Nlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci0gCi0vKioKLSAqIAotICogCi0gKiBAc2luY2UgMS4yLjAKLSAqLwotcHVibGljIGNsYXNzIEltYWdlRGlzcG9zZXIgaW1wbGVtZW50cyBEaXNwb3NlTGlzdGVuZXIgewotCQotCXByaXZhdGUgSW1hZ2VbXSBmSW1hZ2VzOwotCQkKLQlwdWJsaWMgSW1hZ2VEaXNwb3NlcihJbWFnZSBpbWFnZSkgewotCQl0aGlzKG5ldyBJbWFnZVtdIHsgaW1hZ2UgfSk7Ci0JfQotCQotCXB1YmxpYyBJbWFnZURpc3Bvc2VyKEltYWdlW10gaW1hZ2VzKSB7Ci0JCUFzc2VydC5pc05vdE51bGwoaW1hZ2VzKTsKLQkJZkltYWdlcz0gaW1hZ2VzOwkJCi0JfQotCQotCS8qCi0JICogQHNlZSBXaWRnZXRMaXN0ZW5lciN3aWRnZXREaXNwb3NlZAotCSAqLwotCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKERpc3Bvc2VFdmVudCBlKSB7Ci0JCWlmIChmSW1hZ2VzICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGk9IDA7IGkgPCBmSW1hZ2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJZkltYWdlc1tpXS5kaXNwb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvT3ZlcmxheUNvbXBvc2l0ZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvT3ZlcmxheUNvbXBvc2l0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTQwYmY0Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL092ZXJsYXlDb21wb3NpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogIENyZWF0ZWQgQXByIDI3LCAyMDA1IGJ5IEdpbGkgTWVuZGVsCi0gKiAKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5Db21wb3NpdGVJbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci0gCi0vL1RPRE86ICBUaGlzIGNsYXNzIHdhcyBkcm9wcGVkIGluIDMuMSBNNyBmcm9tIG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm1pc2MKLS8vICAgICAgIFdlIG1hZGUgIGxvY2FsIGNvcHkgZm9yIHRoZSB0aW1lIGJlaW5nLiAgTmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGlzIGZpbGUKLS8vICAgICAgIGZvciB1cyBnaXZlbiB0aGF0IHRoZSBPdmVybGF5SWNvbiAocmVwbGFjZW1lbnQpIGlzIGludGVybmFsCi1wdWJsaWMgY2xhc3MgT3ZlcmxheUNvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZUltYWdlRGVzY3JpcHRvciB7Ci0KLSAgICBwcml2YXRlIEltYWdlRGF0YSBiYWNrZ3JvdW5kSW1hZ2U7Ci0KLSAgICBwcml2YXRlIEltYWdlRGF0YSBsZWZ0SW1hZ2U7Ci0KLSAgICBwcml2YXRlIEltYWdlRGF0YSByaWdodEltYWdlOwotCi0gICAgcHJpdmF0ZSBJbWFnZURhdGEgdG9wSW1hZ2U7Ci0KLSAgICBwcml2YXRlIEltYWdlRGF0YSBib3R0b21JbWFnZTsKLQotICAgIHByaXZhdGUgTGlzdCBmb3JlZ3JvdW5kSW1hZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgLyoqCi0gICAgICoJQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAgICovCi0gICAgcHVibGljIE92ZXJsYXlDb21wb3NpdGUoSW1hZ2VEYXRhIGJhY2tncm91bmQpIHsKLSAgICAgICAgYmFja2dyb3VuZEltYWdlID0gYmFja2dyb3VuZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKglBZGQgdGhlIHBhc3NlZCBpbWFnZSB0byB0aGlzIGRlc2NyaXB0b3IncyBjb2xsZWN0aW9uIG9mIGltYWdlcyB0byAKLSAgICAgKiBiZSBjb21wb3NlZCB0b2dldGhlciB0byBjcmVhdGUgYW4gaW1hZ2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkRm9yZWdyb3VuZEltYWdlKEltYWdlRGF0YSBpbWFnZSkgewotICAgICAgICBmb3JlZ3JvdW5kSW1hZ2VzLmFkZChpbWFnZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICpTdXBlcmltcG9zZSBzZWxmJ3MgaW1hZ2VzIHdpdGhpbiB0aGUgZ2l2ZW4gYm91bmRzIGJ5IG1lYW5zIG9mICNkcmF3SW1hZ2UKLSAgICAgKgotICAgICAqQHNlZSBDb21wb3NpdGVJbWFnZSNkcmF3SW1hZ2UoSW1hZ2VEYXRhIHNyYyxpbnQgb3gsaW50IG95KQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGRyYXdDb21wb3NpdGVJbWFnZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgLy9kcmF3IGJhY2tncm91bmQKLSAgICAgICAgZHJhd0ltYWdlKGJhY2tncm91bmRJbWFnZSwgZ2V0TGVmdEJvdW5kKCksIGdldFRvcEJvdW5kKCkpOwotCi0gICAgICAgIC8vZHJhdyBmb3JlZ3JvdW5kIGltYWdlcwotICAgICAgICBJdGVyYXRvciBlID0gZm9yZWdyb3VuZEltYWdlcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoZS5oYXNOZXh0KCkpCi0gICAgICAgICAgICBkcmF3SW1hZ2UoKChJbWFnZURhdGEpIGUubmV4dCgpKSwgZ2V0TGVmdEJvdW5kKCksIGdldFRvcEJvdW5kKCkpOwotCi0gICAgICAgIC8vZHJhdyBleHRlbnNpb25zCi0gICAgICAgIGlmICh0b3BJbWFnZSAhPSBudWxsKQotICAgICAgICAgICAgZHJhd0ltYWdlKHRvcEltYWdlLCBnZXRMZWZ0Qm91bmQoKSwgMCk7Ci0gICAgICAgIGlmIChib3R0b21JbWFnZSAhPSBudWxsKQotICAgICAgICAgICAgZHJhd0ltYWdlKGJvdHRvbUltYWdlLCBnZXRMZWZ0Qm91bmQoKSwgaGVpZ2h0IC0gYm90dG9tSW1hZ2UuaGVpZ2h0KTsKLSAgICAgICAgaWYgKGxlZnRJbWFnZSAhPSBudWxsKQotICAgICAgICAgICAgZHJhd0ltYWdlKGxlZnRJbWFnZSwgMCwgZ2V0VG9wQm91bmQoKSk7Ci0gICAgICAgIGlmIChyaWdodEltYWdlICE9IG51bGwpCi0gICAgICAgICAgICBkcmF3SW1hZ2UocmlnaHRJbWFnZSwgd2lkdGggLSByaWdodEltYWdlLndpZHRoLCBnZXRUb3BCb3VuZCgpKTsKLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgT2JqZWN0I2VxdWFscwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgT3ZlcmxheUNvbXBvc2l0ZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBPdmVybGF5Q29tcG9zaXRlIG90aGVyID0gKE92ZXJsYXlDb21wb3NpdGUpIG87Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFscyhiYWNrZ3JvdW5kSW1hZ2UsIG90aGVyLmJhY2tncm91bmRJbWFnZSkKLSAgICAgICAgICAgICAgICAmJiBlcXVhbHMobGVmdEltYWdlLCBvdGhlci5sZWZ0SW1hZ2UpCi0gICAgICAgICAgICAgICAgJiYgZXF1YWxzKHJpZ2h0SW1hZ2UsIG90aGVyLnJpZ2h0SW1hZ2UpCi0gICAgICAgICAgICAgICAgJiYgZXF1YWxzKHRvcEltYWdlLCBvdGhlci50b3BJbWFnZSkKLSAgICAgICAgICAgICAgICAmJiBlcXVhbHMoYm90dG9tSW1hZ2UsIG90aGVyLmJvdHRvbUltYWdlKQotICAgICAgICAgICAgICAgICYmIGVxdWFscyhmb3JlZ3JvdW5kSW1hZ2VzLCBvdGhlci5mb3JlZ3JvdW5kSW1hZ2VzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcml2YXRlIHV0aWxpdHkgZm9yIGNvbXBhcmluZyB0d28gcG9zc2libHktbnVsbCBvYmplY3RzLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLSAgICAgICAgcmV0dXJuIG8xID09IG51bGwgPyBvMiA9PSBudWxsIDogbzEuZXF1YWxzKG8yKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKglBbnN3ZXIgdGhlIGxlZnQtbW9zdCBjb29yZGluYXRlIHRoYXQgdGhlIG1haW4gaW1hZ2UgY2FuIGRyYXcgdG8KLSAgICAgKgotICAgICAqCUByZXR1cm4gaW50Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIGludCBnZXRMZWZ0Qm91bmQoKSB7Ci0gICAgICAgIGlmIChsZWZ0SW1hZ2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIHJldHVybiBsZWZ0SW1hZ2Uud2lkdGg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoJQW5zd2VyIHNlbGYncyBzaXplLCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaXplIG9mIHRoZSBpbml0aWFsbHktCi0gICAgICoJcHJvdmlkZWQgYmFzZS1sZXZlbCBpbWFnZQotICAgICAqLwotICAgIHByb3RlY3RlZCBQb2ludCBnZXRTaXplKCkgewotICAgICAgICAvL3N0YXJ0IHdpdGggYmFzaWMgc2l6ZQotICAgICAgICBQb2ludCBzaXplID0gbmV3IFBvaW50KGJhY2tncm91bmRJbWFnZS53aWR0aCwgYmFja2dyb3VuZEltYWdlLmhlaWdodCk7Ci0KLSAgICAgICAgLy9vdmVybGF5cyBtYXkgaW5jcmVhc2Ugc2l6ZS4KLSAgICAgICAgaWYgKHRvcEltYWdlICE9IG51bGwpCi0gICAgICAgICAgICBzaXplLnkgKz0gdG9wSW1hZ2UuaGVpZ2h0OwotCi0gICAgICAgIGlmIChib3R0b21JbWFnZSAhPSBudWxsKQotICAgICAgICAgICAgc2l6ZS55ICs9IGJvdHRvbUltYWdlLmhlaWdodDsKLQotICAgICAgICBpZiAobGVmdEltYWdlICE9IG51bGwpCi0gICAgICAgICAgICBzaXplLnggKz0gbGVmdEltYWdlLndpZHRoOwotCi0gICAgICAgIGlmIChyaWdodEltYWdlICE9IG51bGwpCi0gICAgICAgICAgICBzaXplLnggKz0gcmlnaHRJbWFnZS53aWR0aDsKLQotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKglBbnN3ZXIgdGhlIHRvcC1tb3N0IGNvb3JkaW5hdGUgdGhhdCB0aGUgbWFpbiBpbWFnZSBjYW4gZHJhdyB0bwotICAgICAqCi0gICAgICoJQHJldHVybiBpbnQKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgaW50IGdldFRvcEJvdW5kKCkgewotICAgICAgICBpZiAodG9wSW1hZ2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIHJldHVybiB0b3BJbWFnZS5oZWlnaHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBPYmplY3QjaGFzaENvZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gaGFzaENvZGUoYmFja2dyb3VuZEltYWdlKSArIGhhc2hDb2RlKGxlZnRJbWFnZSkKLSAgICAgICAgICAgICAgICArIGhhc2hDb2RlKHJpZ2h0SW1hZ2UpICsgaGFzaENvZGUodG9wSW1hZ2UpCi0gICAgICAgICAgICAgICAgKyBoYXNoQ29kZShib3R0b21JbWFnZSkgKyBoYXNoQ29kZShmb3JlZ3JvdW5kSW1hZ2VzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcml2YXRlIHV0aWxpdHkgZm9yIGdldHRpbmcgdGhlIGhhc2hDb2RlIGZvciBhbgotICAgICAqIG9iamVjdCB0aGF0IG1heSBiZSBudWxsLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IGhhc2hDb2RlKE9iamVjdCBvKSB7Ci0gICAgICAgIHJldHVybiBvID09IG51bGwgPyAwIDogby5oYXNoQ29kZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqICBTZXQgdGhlIGltYWdlIHRvIGJlIGRyYXduIGJlbG93IHRoZSBwcmltYXJ5IG92ZXJsYXkgcmVnaW9uLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEJvdHRvbUV4dGVuc2lvbihJbWFnZURhdGEgdmFsdWUpIHsKLSAgICAgICAgYm90dG9tSW1hZ2UgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiAgU2V0IHRoZSBpbWFnZSB0byBiZSBkcmF3biB0byB0aGUgbGVmdCBvZiB0aGUgcHJpbWFyeSBvdmVybGF5IHJlZ2lvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRMZWZ0RXh0ZW5zaW9uKEltYWdlRGF0YSB2YWx1ZSkgewotICAgICAgICBsZWZ0SW1hZ2UgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiAgU2V0IHRoZSBpbWFnZSB0byBiZSBkcmF3biB0byB0aGUgcmlnaHQgb2YgdGhlIHByaW1hcnkgb3ZlcmxheSByZWdpb24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UmlnaHRFeHRlbnNpb24oSW1hZ2VEYXRhIHZhbHVlKSB7Ci0gICAgICAgIHJpZ2h0SW1hZ2UgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiAgU2V0IHRoZSBpbWFnZSB0byBiZSBkcmF3biBhYm92ZSB0aGUgcHJpbWFyeSBvdmVybGF5IHJlZ2lvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUb3BFeHRlbnNpb24oSW1hZ2VEYXRhIHZhbHVlKSB7Ci0gICAgICAgIHRvcEltYWdlID0gdmFsdWU7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9QYWNrYWdlT25seUNvbnRlbnRQcm92aWRlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvUGFja2FnZU9ubHlDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI4NjkwZi4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9QYWNrYWdlT25seUNvbnRlbnRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udWk7Ci0vKgotCi0KLSAqLwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuU3RhbmRhcmRKYXZhRWxlbWVudENvbnRlbnRQcm92aWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnQ7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0vKioKLSAqIEEgY29udGVudCBwcm92aWRlciB3aGljaCB3aWxsIG9ubHkgZ28gZG93biB0byB0aGUgcGFja2FnZSBsZXZlbCwKLSAqIGl0IHdvbid0IGV4cGxvcmUgZnVydGhlci4gVGhlIGFkdmFudGFnZSBvZiB0aGlzIGlzIHNvIHRoYXQgcGx1cyBzaWducyAoJysnKQotICogd29uJ3Qgc2hvdyB1cCBvbiBwYWNrYWdlcy4gVGhlIEZpbHRlciB0ZWNobmlxdWUgY291bGQgYmUgdXNlZCB0byBub3QKLSAqIHNob3cgdGhlIGNoaWxkcmVuLCBidXQgdGhpcyBzdGlsbCBzaG93cyB0aGUgcGx1cyBzaWduLgotICoKLSAqIEFsc28sIGlmIHRoZSBlbGVtZW50IGlzIGEgamF2YS51dGlsLkxpc3QsIHRoZW4gdGhhdCBsaXN0IHdpbGwgYmUgcmV0dXJuZWQKLSAqIGFzIHRoZSBjaGlsZHJlbi4gVGhpcyBhbGxvd3MgZm9yIGEgcm9vdCB0byBiZSBjb21wb3NlZCBpbnN0ZWFkIG9mIGJlaW5nCi0gKiBvbmUgb2YgdGhlIHN0YW5kYXJkIEphdmEgRWxlbWVudHMuCi0gKi8KLQotcHVibGljIGNsYXNzIFBhY2thZ2VPbmx5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgU3RhbmRhcmRKYXZhRWxlbWVudENvbnRlbnRQcm92aWRlciB7Ci0JCi0JLyoqCi0JICogSWYgdGhlIGVsZW1lbnQgaXMgYSBsaXN0LCByZXR1cm4gdGhlIGl0ZXJhdG9yIG9uIGl0LgotCSAqIEVsc2Ugc2VuZCBpdCB1cCB0aGUgY2hhaW4uCi0JICovCi0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgTGlzdCkKLQkJCXJldHVybiAoKExpc3QpIGVsZW1lbnQpLnRvQXJyYXkoKTsKLQkJcmV0dXJuIHN1cGVyLmdldENoaWxkcmVuKGVsZW1lbnQpOwotCX0KLQkKLQkvKioKLQkgKiBJZiB0aGUgZWxlbWVudCBpcyBhIGxpc3QgYW5kIGl0IGlzIG5vdCBlbXB0eSwgaXQgaGFzIGNoaWxkcmVuLAotCSAqIGlmIGl0IGlzIGEgSVBhY2thZ2VGcmFnbWVudCBpdCBkb2VzIG5vdCwKLQkgKiBlbHNlIHNlbmQgaXQgdXAgdGhlIGNoYWluLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgTGlzdCkKLQkJCXJldHVybiAhKChMaXN0KSBlbGVtZW50KS5pc0VtcHR5KCk7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVBhY2thZ2VGcmFnbWVudCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHN1cGVyLmhhc0NoaWxkcmVuKGVsZW1lbnQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1BhY2thZ2VzV29ya2Jvb2tQYWdlLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9QYWNrYWdlc1dvcmtib29rUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2JkZGIyLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1BhY2thZ2VzV29ya2Jvb2tQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhRWxlbWVudExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvcmUuU2VhcmNocGF0aEVudHJ5OwotCi1wdWJsaWMgY2xhc3MgUGFja2FnZXNXb3JrYm9va1BhZ2UgaW1wbGVtZW50cyBJQnVpbGRTZWFyY2hQYWdlIHsKLQkKLQkvKioKLQkgKiBWYWxpZGF0b3IgZm9yIHRoaXMgd29ya2Jvb2sgcGFnZSB0byB2ZXJpZnkgdGhlIHNlbGVjdGlvbnMgb24gQ2hvb3NlIHBhZ2UuCi0JICogQHZlcnNpb24gCTEuMAotCSAqIEBhdXRob3IKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGNsYXNzIENob29zZVBhY2thZ2VzU2VsZWN0aW9uVmFsaWRhdG9yIGltcGxlbWVudHMgSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvciB7Ci0KLQkJcHJpdmF0ZSBJU3RhdHVzIGZnRXJyb3JTdGF0dXMgPSBTdGF0dXNIZWxwZXIuRVJST1JfU1RBVFVTOyAvLyROT04tTkxTLTEkCi0JCXByaXZhdGUgSVN0YXR1cyBmZ09LU3RhdHVzID0gU3RhdHVzSGVscGVyLk9LX1NUQVRVUzsKLQotCQlwdWJsaWMgQ2hvb3NlUGFja2FnZXNTZWxlY3Rpb25WYWxpZGF0b3IoKSB7Ci0JCX0KLQotCQkvKgotCQkgKiBAc2VlIElTZWxlY3Rpb25WYWxpZGF0b3IjdmFsaWRhdGUoT2JqZWN0KQotCQkgKi8KLQkJcHVibGljIElTdGF0dXMgdmFsaWRhdGUoT2JqZWN0W10gc2VsZWN0aW9uKSB7Ci0JCQlpZiAoaXNWYWxpZChzZWxlY3Rpb24pKSB7Ci0JCQkJcmV0dXJuIGZnT0tTdGF0dXM7Ci0JCQl9Ci0JCQlyZXR1cm4gZmdFcnJvclN0YXR1czsKLQkJfQotCi0JCXByaXZhdGUgYm9vbGVhbiBpc1ZhbGlkKE9iamVjdFtdIHNlbGVjdGlvbikgewotCQkJaWYgKHNlbGVjdGlvbi5sZW5ndGggPT0gMCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKHNlbGVjdGlvbltpXSBpbnN0YW5jZW9mIElQYWNrYWdlRnJhZ21lbnQpCi0JCQkJCWNvbnRpbnVlOyAvLyBGcmFnbWVudHMgYXJlIGFsd2F5cyB2YWxpZAotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCX0KLQotCQotCXByaXZhdGUgTGFiZWwgbGFiZWwgPSBudWxsOwotCXByaXZhdGUgVGFibGUgdGFibGUgPSBudWxsOwotCXByaXZhdGUgQ29tcG9zaXRlIGJ1dHRvbkJhciA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gY2hvb3NlUGFja2FnZXNCdXR0b24gPSBudWxsOwotCXByaXZhdGUgQnV0dG9uIGNob29zZURlZlBhdGhzQnV0dG9uID0gbnVsbDsKLQlwcml2YXRlIExhYmVsIHNwYWNlcjEgPSBudWxsOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbiA9IG51bGw7Ci0JLy8gLi4uIHVpCi0JCi0JcHJpdmF0ZSBJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBudWxsOwotCXByaXZhdGUgU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPSBudWxsOwotCXByaXZhdGUgQmVhbmluZm9QYXRoc0Jsb2NrIGJlYW5pbmZvc1BhdGhzQmxvY2sgPSBudWxsOwotCXByaXZhdGUgSVBhY2thZ2VGcmFnbWVudFJvb3RbXVtdIHJvb3RzUGVyUmF3RW50cnk7Ci0JcHJpdmF0ZSBJQ2xhc3NwYXRoRW50cnlbXSByYXdMaXN0OwotCXByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBMaXN0IHBhY2thZ2VzTGlzdCA9IG51bGw7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgdG9wOwotCi0JcHVibGljIFBhY2thZ2VzV29ya2Jvb2tQYWdlKElXb3Jrc3BhY2VSb290IHdvcmtzcGFjZVJvb3QsIEJlYW5pbmZvUGF0aHNCbG9jayBiZWFuaW5mb3NQYXRoc0Jsb2NrKSB7Ci0JCXRoaXMuYmVhbmluZm9zUGF0aHNCbG9jayA9IGJlYW5pbmZvc1BhdGhzQmxvY2s7Ci0JCXRoaXMucGFja2FnZXNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl0aGlzLmxhYmVsUHJvdmlkZXIgPSBuZXcgU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyKCk7Ci0JfQotCi0JcHVibGljIENvbnRyb2wgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KXsKLQkJdG9wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YSgpOwotCQlncmlkRGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCXRvcC5zZXRMYXlvdXQoZ3JpZExheW91dCk7Ci0JCWxhYmVsID0gbmV3IExhYmVsKHRvcCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5QYWNrYWdlc1dvcmtib29rX0xhYmVsVGV4dCk7Ci0JCWxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGEpOwotCQljcmVhdGVUYWJsZSgpOwotCQljcmVhdGVCdXR0b25CYXIoKTsKLQkJdG9wLnNldFNpemUobmV3IFBvaW50KDMwMCwgMjAwKSk7Ci0JCXVwZGF0ZUVuYWJsZWRTdGF0ZXMoKTsKLQkJaWYoc3BhY2VyMT09bnVsbCl7Ci0JCQkvL1RPRE86IAotCQl9Ci0JCXJldHVybiB0b3A7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGFibGUJCi0JICoKLQkgKi8KLQlwcml2YXRlIHZvaWQgY3JlYXRlVGFibGUoKSB7Ci0JCUdyaWREYXRhIGdyaWREYXRhMSA9IG5ldyBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhKCk7Ci0JCWdyaWREYXRhMS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0JCWdyaWREYXRhMS52ZXJ0aWNhbEFsaWdubWVudCA9IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEuRklMTDsKLQkJZ3JpZERhdGExLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudCA9IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEuRklMTDsKLQkJdGFibGUgPSBuZXcgVGFibGUodG9wLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShncmlkRGF0YTEpOwotCQl0YWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXVwZGF0ZUJ1dHRvbnMoKTsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQl3aWRnZXRTZWxlY3RlZChlKTsKLQkJCX0KLQkJfSk7Ci0JCXRhYmxlVmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihsYWJlbFByb3ZpZGVyKTsKLQkJdGFibGVWaWV3ZXIuc2V0U29ydGVyKG5ldyBTUExpc3RFbGVtZW50U29ydGVyKCkpOwotCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFycmF5Q29udGVudFByb3ZpZGVyKCkpOwotCQl0YWJsZVZpZXdlci5zZXRJbnB1dChwYWNrYWdlc0xpc3QpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGJ1dHRvbkJhcgkKLQkgKgotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVCdXR0b25CYXIoKSB7Ci0JCVJvd0xheW91dCByb3dMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7Ci0JCXJvd0xheW91dC50eXBlID0gb3JnLmVjbGlwc2Uuc3d0LlNXVC5WRVJUSUNBTDsKLQkJcm93TGF5b3V0LmZpbGwgPSB0cnVlOwotCQlHcmlkRGF0YSBncmlkRGF0YTIgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YSgpOwotCQlncmlkRGF0YTIuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTIudmVydGljYWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YS5CRUdJTk5JTkc7Ci0JCWJ1dHRvbkJhciA9IG5ldyBDb21wb3NpdGUodG9wLCBTV1QuTk9ORSk7Ci0JCWJ1dHRvbkJhci5zZXRMYXlvdXREYXRhKGdyaWREYXRhMik7Ci0JCWJ1dHRvbkJhci5zZXRMYXlvdXQocm93TGF5b3V0KTsKLQkJY2hvb3NlUGFja2FnZXNCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkJhciwgU1dULk5PTkUpOwotCQljaG9vc2VQYWNrYWdlc0J1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5QYWNrYWdlc1dvcmtib29rX0Nob29zZVBhY2thZ2VzKTsKLQkJY2hvb3NlUGFja2FnZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWZpbmFsIExpc3QgZWxlbWVudHNUb0FkZCA9IGNob29zZVBhY2thZ2VzKCk7Ci0JCQkJYWRkVG9QYWNrYWdlc0xpc3QoZWxlbWVudHNUb0FkZCk7Ci0JCQl9Ci0JCX0pOwotCQljaG9vc2VEZWZQYXRoc0J1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQmFyLCBTV1QuTk9ORSk7Ci0JCWNob29zZURlZlBhdGhzQnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLlBhY2thZ2VzV29ya2Jvb2tfQ2hvb3NlRGVmaW5lZFBhdGhzKTsKLQkJY2hvb3NlRGVmUGF0aHNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCUxpc3QgZWxlbWVudHNUb0FkZCA9IGNob29zZURlZmluZWQoKTsKLQkJCQlhZGRUb1BhY2thZ2VzTGlzdChlbGVtZW50c1RvQWRkKTsKLQkJCX0KLQkJfSk7Ci0JCXNwYWNlcjEgPSBuZXcgTGFiZWwoYnV0dG9uQmFyLCBTV1QuTk9ORSk7Ci0JCXJlbW92ZUJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQmFyLCBTV1QuTk9ORSk7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5QYWNrYWdlc1dvcmtib29rX1JlbW92ZSk7Ci0JCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJTGlzdCBzZWxlY3RlZCA9IEJlYW5pbmZvUGF0aHNCbG9jay5nZXRTZWxlY3RlZExpc3QodGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCXBhY2thZ2VzTGlzdC5yZW1vdmVBbGwoc2VsZWN0ZWQpOwotCQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCQlwYWdlQ2hhbmdlZCgpOwotCQkJfQotCQl9KTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFkZFRvUGFja2FnZXNMaXN0KGZpbmFsIExpc3QgdG9BZGQpewotCQlpZiAodG9BZGQgIT0gbnVsbCAmJiAhdG9BZGQuaXNFbXB0eSgpKSB7Ci0JCQlwYWNrYWdlc0xpc3QuYWRkQWxsKHRvQWRkKTsKLQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCXRhYmxlLmdldERpc3BsYXkoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCl7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQl0YWJsZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odG9BZGQpKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCXBhZ2VDaGFuZ2VkKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElKYXZhUHJvamVjdCBqcHJvamVjdCkgewotCQlqYXZhUHJvamVjdCA9IGpwcm9qZWN0OwotCQlsYWJlbFByb3ZpZGVyLnNldEphdmFQcm9qZWN0KGpwcm9qZWN0KTsKLQkJdHJ5IHsKLQkJCXJhd0xpc3QgPSBqYXZhUHJvamVjdC5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJCXJvb3RzUGVyUmF3RW50cnkgPSBuZXcgSVBhY2thZ2VGcmFnbWVudFJvb3RbcmF3TGlzdC5sZW5ndGhdW107Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJhd0xpc3QubGVuZ3RoOyBpKyspIHsKLQkJCQlyb290c1BlclJhd0VudHJ5W2ldID0gamF2YVByb2plY3QuZmluZFBhY2thZ2VGcmFnbWVudFJvb3RzKHJhd0xpc3RbaV0pOwotCQkJfQkJCi0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQlyYXdMaXN0ID0gbmV3IElDbGFzc3BhdGhFbnRyeVswXTsKLQkJCXJvb3RzUGVyUmF3RW50cnkgPSBuZXcgSVBhY2thZ2VGcmFnbWVudFJvb3RbMF1bXTsKLQkJfQotCQl1cGRhdGVQYWNrYWdlc0xpc3QoKTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRTZWxlY3Rpb24oKSB7Ci0JCXJldHVybiBCZWFuaW5mb1BhdGhzQmxvY2suZ2V0U2VsZWN0ZWRMaXN0KHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oTGlzdCBzZWxlY3Rpb24pIHsKLQkJdGFibGVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbikpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgdXBkYXRlUGFja2FnZXNMaXN0KCkgewotCQlMaXN0IHNwZWxlbWVudHMgPSBiZWFuaW5mb3NQYXRoc0Jsb2NrLmdldFNlYXJjaHBhdGhPcmRlcmluZ1BhZ2UoKS5nZXRFbGVtZW50cygpOwotCi0JCUxpc3QgcGFja2FnZUVsZW1lbnRzID0gbmV3IEFycmF5TGlzdChzcGVsZW1lbnRzLnNpemUoKSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc3BlbGVtZW50cy5zaXplKCk7IGkrKykgewotCQkJQlBMaXN0RWxlbWVudCBzcGUgPSAoQlBMaXN0RWxlbWVudCkgc3BlbGVtZW50cy5nZXQoaSk7Ci0JCQlpZiAoc3BlIGluc3RhbmNlb2YgQlBTZWFyY2hMaXN0RWxlbWVudCkgewotCQkJCXBhY2thZ2VFbGVtZW50cy5hZGQoc3BlKTsKLQkJCX0KLQkJfQotCQlwYWNrYWdlc0xpc3QuY2xlYXIoKTsKLQkJcGFja2FnZXNMaXN0LmFkZEFsbChwYWNrYWdlRWxlbWVudHMpOwotCQlpZih0YWJsZVZpZXdlciE9bnVsbCAmJiAhdGFibGUuaXNEaXNwb3NlZCgpKQotCQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCX0KLQotCS8qKgotCSAqIENob29zZSB0aGUgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHNlYXJjaCBwYXRoLgotCSAqLwotCXByaXZhdGUgTGlzdCBjaG9vc2VQYWNrYWdlcygpIHsKLQotCQlJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBDaG9vc2VQYWNrYWdlc1NlbGVjdGlvblZhbGlkYXRvcigpOwotCi0JCS8vIFNob3cgdXAgdG8gdGhlIHBhY2thZ2UgZnJhZ21lbnQsIGRvbid0IHNob3cgYW55IGNvbnRlbnRzIG9mIGl0LgotCQlDbGFzc1tdIGFjY2VwdGVkQ2xhc3NlcyA9Ci0JCQluZXcgQ2xhc3NbXSB7IElKYXZhUHJvamVjdC5jbGFzcywgSVBhY2thZ2VGcmFnbWVudFJvb3QuY2xhc3MsIElQYWNrYWdlRnJhZ21lbnQuY2xhc3MgfTsKLQkJT2JqZWN0W10gcmVqZWN0ZWRGcmFnbWVudHMgPSBnZXRGaWx0ZXJlZEV4aXN0aW5nRW50cmllcygpOwotCi0JCS8vIE9ubHkgc2hvdyBwYWNrYWdlIGZyYWdtZW50cyB0aGF0IGhhdmUgY2hpbGRyZW4gKGkuZS4gdGhlcmUgY2xhc3NlcyBpbiBpdCwgbm90IGludGVyZXN0ZWQKLQkJLy8gaW4gaW50ZXJtZWRpYXRlIG9uZXMgdGhhdCBoYXZlIG5vIGNsYXNzZXMgZGVmaW5lZCBpbiB0aGVtLiBUaG9zZSBhcmUgZmlsdGVyZWQgb3V0LgotCQlUeXBlZFZpZXdlckZpbHRlciBmaWx0ZXIgPSBuZXcgVHlwZWRWaWV3ZXJGaWx0ZXIoYWNjZXB0ZWRDbGFzc2VzLCByZWplY3RlZEZyYWdtZW50cykgewotCQkJcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LCBPYmplY3QgZWxlbWVudCkgewotCQkJCWlmIChzdXBlci5zZWxlY3Qodmlld2VyLCBwYXJlbnRFbGVtZW50LCBlbGVtZW50KSkgewotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElQYWNrYWdlRnJhZ21lbnQpIHsKLQkJCQkJCUlQYWNrYWdlRnJhZ21lbnQgcGtnID0gKElQYWNrYWdlRnJhZ21lbnQpIGVsZW1lbnQ7Ci0JCQkJCQl0cnkgewotCQkJCQkJCXJldHVybiBwa2cuaGFzQ2hpbGRyZW4oKTsKLQkJCQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQl9Ci0JCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJCX0gZWxzZQotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfTsKLQotCQlJVHJlZUNvbnRlbnRQcm92aWRlciBwcm92aWRlciA9IG5ldyBQYWNrYWdlT25seUNvbnRlbnRQcm92aWRlcigpOwotCi0JCUlMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPSBuZXcgSmF2YUVsZW1lbnRMYWJlbFByb3ZpZGVyKEphdmFFbGVtZW50TGFiZWxQcm92aWRlci5TSE9XX0RFRkFVTFQpOwotCQlFbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPQotCQkJbmV3IEVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nKHRvcC5nZXRTaGVsbCgpLCBsYWJlbFByb3ZpZGVyLCBwcm92aWRlcik7Ci0JCWRpYWxvZy5zZXRUaXRsZShCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19hZGRzZWFyY2hwYXRoX3RpdGxlKTsKLQotCQlkaWFsb2cuc2V0VmFsaWRhdG9yKHZhbGlkYXRvcik7Ci0JCWRpYWxvZy5zZXRNZXNzYWdlKEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX2FkZHNlYXJjaHBhdGhfZGVzY3JpcHRpb24pOwotCQlkaWFsb2cuYWRkRmlsdGVyKGZpbHRlcik7Ci0JCWRpYWxvZy5zZXRJbnB1dChqYXZhUHJvamVjdCk7Ci0KLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlPYmplY3RbXSBlbGVtZW50cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCUxpc3QgbmV3RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KGVsZW1lbnRzLmxlbmd0aCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJQlBMaXN0RWxlbWVudCBuZXdHdXkgPSBuZXdCUExpc3RFbGVtZW50KGVsZW1lbnRzW2ldKTsKLQkJCQlpZiAobmV3R3V5ICE9IG51bGwpCi0JCQkJCW5ld0VsZW1lbnRzLmFkZChuZXdHdXkpOwotCQkJfQotCQkJcmV0dXJuIG5ld0VsZW1lbnRzOwotCQl9Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBCUExpc3RFbGVtZW50IGZvciB0aGUgZ2l2ZW4gb2JqZWN0LgotCSAqLwotCXByb3RlY3RlZCBCUExpc3RFbGVtZW50IG5ld0JQTGlzdEVsZW1lbnQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJU2VhcmNocGF0aEVudHJ5IHNlID0gbnVsbDsKLQkJYm9vbGVhbiBpc0V4cG9ydGVkID0gZmFsc2U7Ci0JCUlQYWNrYWdlRnJhZ21lbnQgZnJhZyA9IChJUGFja2FnZUZyYWdtZW50KSBlbGVtZW50OwotCQkvLyBOZWVkIHRvIGZpbmQgY29ycmVzcG9uZGluZyByYXcgY2xhc3MgcGF0aCBlbnRyeS4KLQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IChJUGFja2FnZUZyYWdtZW50Um9vdCkgZnJhZy5nZXRQYXJlbnQoKTsgLy8gR2V0IGZyYWcgcm9vdC4KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByb290c1BlclJhd0VudHJ5Lmxlbmd0aDsgaSsrKSB7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IHJvb3RzUGVyUmF3RW50cnlbaV0ubGVuZ3RoOyBqKyspIHsKLQkJCQlpZiAocm9vdHNQZXJSYXdFbnRyeVtpXVtqXS5lcXVhbHMocm9vdCkpIHsKLQkJCQkJaXNFeHBvcnRlZCA9IHJhd0xpc3RbaV0uaXNFeHBvcnRlZCgpIHx8IHJhd0xpc3RbaV0uZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9TT1VSQ0U7Ci0JCQkJCXNlID0gbmV3IFNlYXJjaHBhdGhFbnRyeShyYXdMaXN0W2ldLmdldEVudHJ5S2luZCgpLCByYXdMaXN0W2ldLmdldFBhdGgoKSwgZnJhZy5nZXRFbGVtZW50TmFtZSgpKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG5ldyBCUFNlYXJjaExpc3RFbGVtZW50KHNlLCBmYWxzZSwgZmFsc2UsIGlzRXhwb3J0ZWQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB0aGUgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYWxyZWFkeSBhcmUgaW4gdGhlIHNlYXJjaCBwYXRoCi0JICogc28gdGhhdCB0aGV5IGRvbid0IHNob3cgdXAgaW4gdGhlIGxpc3QuCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdFtdIGdldEZpbHRlcmVkRXhpc3RpbmdFbnRyaWVzKCkgewotCQl0cnkgewotCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSByb290cyA9IGphdmFQcm9qZWN0LmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKCk7Ci0JCQlMaXN0IGVudHJpZXMgPSBwYWNrYWdlc0xpc3Q7Ci0JCQlMaXN0IGZyYWdtZW50cyA9IG5ldyBBcnJheUxpc3QoZW50cmllcy5zaXplKCkpOwotCQkJSXRlcmF0b3IgaXRyID0gZW50cmllcy5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ci5oYXNOZXh0KCkpIHsKLQkJCQlCUExpc3RFbGVtZW50IGVsZW0gPSAoQlBMaXN0RWxlbWVudCkgaXRyLm5leHQoKTsKLQkJCQlpZiAoZWxlbSBpbnN0YW5jZW9mIEJQU2VhcmNoTGlzdEVsZW1lbnQpIHsKLQkJCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBic2UgPSAoQlBTZWFyY2hMaXN0RWxlbWVudCkgZWxlbTsKLQkJCQkJZnJhZ21lbnRzLmFkZEFsbChnZXRQYWNrYWdlcyhic2UsIHJvb3RzKSk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGZyYWdtZW50cy50b0FycmF5KCk7Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotCQotCS8qKgotCSAqIEZpbmQgdGhlIHBhY2thZ2UgZnJhZ21lbnRzIGZvciB0aGlzIHBhY2thZ2UgZW50cnkuCi0JICovCi0JcHJvdGVjdGVkIExpc3QgZ2V0UGFja2FnZXMoQlBTZWFyY2hMaXN0RWxlbWVudCBlbGVtZW50LCBJUGFja2FnZUZyYWdtZW50Um9vdFtdIHJvb3RzKSB7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9ICgoU2VhcmNocGF0aEVudHJ5KSBlbGVtZW50LmdldEVudHJ5KCkpLmdldFBhY2thZ2UoKTsKLQkJaWYgKHBhY2thZ2VOYW1lID09IG51bGwpCi0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQotCQl0cnkgewotCQkJTGlzdCBwYWNrYWdlcyA9IG5ldyBBcnJheUxpc3QoMTApOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByb290cy5sZW5ndGg7IGkrKykgewotCQkJCUlKYXZhRWxlbWVudFtdIHBmcyA9IHJvb3RzW2ldLmdldENoaWxkcmVuKCk7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBwZnMubGVuZ3RoOyBqKyspCi0JCQkJCWlmIChwZnNbal0uZ2V0RWxlbWVudFR5cGUoKSA9PSBJSmF2YUVsZW1lbnQuUEFDS0FHRV9GUkFHTUVOVAotCQkJCQkJJiYgcGZzW2pdLmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKHBhY2thZ2VOYW1lKSkgewotCQkJCQkJcGFja2FnZXMuYWRkKHBmc1tqXSk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJfQotCQkJcmV0dXJuIHBhY2thZ2VzOwotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCX0KLQkvKioKLQkgKiBDaG9vc2UgdGhlIHByZS1kZWZpbmVkIHNlYXJjaCBwYXRocyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgc2VhcmNoIHBhdGguCi0JICovCi0JcHJpdmF0ZSBMaXN0IGNob29zZURlZmluZWQoKSB7Ci0KLQkJLy8gQ3VycmVudCBwcmUtZGVmaW5lZCBvbmVzIGFyZSBvbmx5IHByZS1yZXFlZCBwcm9qZWN0cy4KLQkJLy8gVGhlIGxpc3Qgb2YgaW5wdXRzIHdpbGwgbm90IGNvbnRhaW4gYW55IGFscmVhZHkgaW4gdGhlIHBhdGguCi0JCS8vIFdlIHdpbGwgY3JlYXRlIHRoZW0gaGVyZSBhbmQgaWYgbm90IHNlbGVjdGVkIHRoZXkgd2lsbCB0aHJvd24gYXdheS4KLQkJLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBhcmUgbm90IHZlcnkgbWFueSBhbmQgb3VyIFNlYXJjaFBhdGhMaXN0TGFiZWxQcm92aWRlciBkb2VzCi0JCS8vIGEgZ29vZCBqb2Igb2Ygc2hvd2luZyB0aGVtLiBPdGhlcndpc2Ugd2Ugd291bGQgbmVlZCB0byBjb21lIHVwIHdpdGggb25lIHRoYXQgY2FuIHNob3cKLQkJLy8gSUphdmFQcm9qZWN0cyB3aGVuIHdlIGdldCB0aGVtLgotCQlMaXN0IGlucHV0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGlzdCBjdXJyZW50TGlzdCA9IHBhY2thZ2VzTGlzdDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByYXdMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAocmF3TGlzdFtpXS5nZXRFbnRyeUtpbmQoKSA9PSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1BST0pFQ1QpIHsKLQkJCQlib29sZWFuIGV4aXN0cyA9IGZhbHNlOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgY3VycmVudExpc3Quc2l6ZSgpOyBqKyspIHsKLQkJCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBic2UgPSAoQlBTZWFyY2hMaXN0RWxlbWVudCkgY3VycmVudExpc3QuZ2V0KGopOwotCQkJCQlpZiAoYnNlLmdldEVudHJ5KCkuZ2V0S2luZCgpID09IElDbGFzc3BhdGhFbnRyeS5DUEVfUFJPSkVDVCAmJiByYXdMaXN0W2ldLmdldFBhdGgoKS5lcXVhbHMoYnNlLmdldEVudHJ5KCkuZ2V0UGF0aCgpKSkgewotCQkJCQkJZXhpc3RzID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCWlmICghZXhpc3RzKQotCQkJCQlpbnB1dHMuYWRkKG5ldyBCUFNlYXJjaExpc3RFbGVtZW50KG5ldyBTZWFyY2hwYXRoRW50cnkoSUNsYXNzcGF0aEVudHJ5LkNQRV9QUk9KRUNULCByYXdMaXN0W2ldLmdldFBhdGgoKSwgbnVsbCksIGZhbHNlLCBmYWxzZSwgcmF3TGlzdFtpXS5pc0V4cG9ydGVkKCkpKTsKLQkJCX0KLQkJfQotCQkKLQkJSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcjEgPSBuZXcgU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyKGphdmFQcm9qZWN0KTsKLQkJRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0KLQkJCW5ldyBFbGVtZW50TGlzdFNlbGVjdGlvbkRpYWxvZyh0b3AuZ2V0U2hlbGwoKSwgbGFiZWxQcm92aWRlcjEpOwotCQlkaWFsb2cuc2V0VGl0bGUoQmVhbkluZm9VSU1lc3NhZ2VzLlBhY2thZ2VzV29ya2Jvb2tfU2VsZWN0aW9uRGlhbG9nX0RlZmluZWRQYXRoc19UaXRsZSk7IAotCi0JCWRpYWxvZy5zZXRNZXNzYWdlKEJlYW5JbmZvVUlNZXNzYWdlcy5QYWNrYWdlc1dvcmtib29rX1NlbGVjdGlvbkRpYWxvZ19EZWZpbmVkUGF0aHNfTWVzc2FnZSk7IAotCQlkaWFsb2cuc2V0RWxlbWVudHMoaW5wdXRzLnRvQXJyYXkoKSk7Ci0KLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKQotCQkJcmV0dXJuIEFycmF5cy5hc0xpc3QoZGlhbG9nLmdldFJlc3VsdCgpKTsKLQkJZWxzZQotCQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlQnV0dG9ucygpewotCQljaG9vc2VEZWZQYXRoc0J1dHRvbi5zZXRFbmFibGVkKGJlYW5pbmZvc1BhdGhzQmxvY2suaXNCZWFuaW5mb0VuYWJsZWQoKSk7Ci0JCWNob29zZVBhY2thZ2VzQnV0dG9uLnNldEVuYWJsZWQoYmVhbmluZm9zUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJCi0JCUxpc3Qgc2VsZWN0ZWQgPSBCZWFuaW5mb1BhdGhzQmxvY2suZ2V0U2VsZWN0ZWRMaXN0KHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoc2VsZWN0ZWQhPW51bGwgJiYgc2VsZWN0ZWQuc2l6ZSgpPjAgJiYgYmVhbmluZm9zUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogU29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgcGFnZSBjaGFuZ2VkIC0gcGVyZm9ybSB1cGRhdGUuCi0JICogCi0JICogQHNpbmNlIDEuMi4wCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZWQoKXsKLQkJdXBkYXRlU2VhcmNocGF0aExpc3QoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVNlYXJjaHBhdGhMaXN0KCkgewotCQlMaXN0IHNlYXJjaGVsZW1lbnRzID0gYmVhbmluZm9zUGF0aHNCbG9jay5nZXRTZWFyY2hwYXRoT3JkZXJpbmdQYWdlKCkuZ2V0RWxlbWVudHMoKTsKLQotCQlMaXN0IHBhY2thZ2VlbGVtZW50cyA9IHBhY2thZ2VzTGlzdDsKLQotCQlib29sZWFuIGNoYW5nZURvbmUgPSBmYWxzZTsKLQkJLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgc2VhcmNoIHBhdGggYW5kIHJlbW92ZSBhbnkgU2VhcmNoTGlzdEVsZW1lbnRzIHRoYXQgYXJlCi0JCS8vIG5vdCBpbiB0aGUgc2VhcmNoIHBhY2thZ2VzIGxpc3QgZnJvbSB0aGlzIHBhZ2UuCi0JCWZvciAoTGlzdEl0ZXJhdG9yIHNwaXRyID0gc2VhcmNoZWxlbWVudHMubGlzdEl0ZXJhdG9yKHNlYXJjaGVsZW1lbnRzLnNpemUoKSk7Ci0JCQlzcGl0ci5oYXNQcmV2aW91cygpOwotCQkJKSB7Ci0JCQlCUExpc3RFbGVtZW50IGVsZW1lbnQgPSAoQlBMaXN0RWxlbWVudCkgc3BpdHIucHJldmlvdXMoKTsKLQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgQlBTZWFyY2hMaXN0RWxlbWVudCAmJiAhcGFja2FnZWVsZW1lbnRzLnJlbW92ZShlbGVtZW50KSkgewotCQkJCS8vIFNlYXJjaCBlbGVtZW50IGFuZCBub3QgZm91bmQgaW4gcGFja2FnZXMgbGlzdCBzbyByZW1vdmUgaXQgZnJvbSBzZWFyY2hwYXRoIGxpc3QuCi0JCQkJc3BpdHIucmVtb3ZlKCk7Ci0JCQkJY2hhbmdlRG9uZSA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJLy8gQW55IGxlZnQgb3ZlciBpbiBwYWNrYWdlcyBsaXN0IGFyZSBuZXcgYW5kIG5lZWQgdG8gYmUgYWRkZWQuCi0JCXNlYXJjaGVsZW1lbnRzLmFkZEFsbChwYWNrYWdlZWxlbWVudHMpOwotCQljaGFuZ2VEb25lID0gY2hhbmdlRG9uZSB8fCAhcGFja2FnZWVsZW1lbnRzLmlzRW1wdHkoKTsKLQotCQlpZiAoY2hhbmdlRG9uZSkKLQkJCWJlYW5pbmZvc1BhdGhzQmxvY2suc2V0U2VhcmNoT3JkZXJFbGVtZW50cyhzZWFyY2hlbGVtZW50cyk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlcygpewotCQl1cGRhdGVCdXR0b25zKCk7Ci0JCXRhYmxlLnNldEVuYWJsZWQoYmVhbmluZm9zUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJbGFiZWwuc2V0RW5hYmxlZChiZWFuaW5mb3NQYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRCZWFuaW5mb0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLQkJaWYodG9wIT1udWxsICYmICF0b3AuaXNEaXNwb3NlZCgpKQotCQkJdXBkYXRlRW5hYmxlZFN0YXRlcygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1NQTGlzdEVsZW1lbnRTb3J0ZXIuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1NQTGlzdEVsZW1lbnRTb3J0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxNDcwNS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9TUExpc3RFbGVtZW50U29ydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aTsKLS8qCi0KLQotICovCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJTb3J0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8uY29yZS5TZWFyY2hwYXRoRW50cnk7Ci0KLS8qKgotICogU29ydGVyIGZvciBzb3J0aW5nIEJQU2VhcmNoTGlzdEVsZW1lbnRzIHdpdGhpbiB0aGUgbWFpbiBsaXN0LgotICogSXQgaXMgbm90IHRvIGJlIHVzZWQgb24gZWxlbWVudHMgd2l0aGluIGEgc3BlY2lmaWMgYmVhbmluZm8gZW50cnkuCi0gKiAKLSAqIEB2ZXJzaW9uIAkxLjAKLSAqIEBhdXRob3IKLSAqLwotcHVibGljIGNsYXNzIFNQTGlzdEVsZW1lbnRTb3J0ZXIgZXh0ZW5kcyBWaWV3ZXJTb3J0ZXIgewotCQotCS8qCi0JICogQHNlZSBWaWV3ZXJTb3J0ZXIjY2F0ZWdvcnkoT2JqZWN0KQotCSAqLwotCXB1YmxpYyBpbnQgY2F0ZWdvcnkoT2JqZWN0IG9iaikgewotCQlpZiAob2JqIGluc3RhbmNlb2YgQlBTZWFyY2hMaXN0RWxlbWVudCkgewotCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBlbGVtZW50ID0gKEJQU2VhcmNoTGlzdEVsZW1lbnQpIG9iajsKLQkJCQotCQkJc3dpdGNoICgoKFNlYXJjaHBhdGhFbnRyeSkgZWxlbWVudC5nZXRFbnRyeSgpKS5nZXRLaW5kKCkpIHsKLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZOgotCQkJCXJldHVybiA0OwotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1BST0pFQ1Q6Ci0JCQkJcmV0dXJuIDE7Ci0JCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfU09VUkNFOgotCQkJCXJldHVybiAwOwotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1ZBUklBQkxFOgotCQkJCXJldHVybiAzOwotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX0NPTlRBSU5FUjoKLQkJCQlyZXR1cm4gMjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gc3VwZXIuY2F0ZWdvcnkob2JqKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgVmlld2VyU29ydGVyI2NvbXBhcmUoKQotCSAqLwkKLQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpIHsKLQkJaW50IGNhdDEgPSBjYXRlZ29yeShlMSk7Ci0JCWludCBjYXQyID0gY2F0ZWdvcnkoZTIpOwotCQotCQlpZiAoY2F0MSAhPSBjYXQyKQotCQkJcmV0dXJuIGNhdDEgLSBjYXQyOwotCQkJCi0JCWlmICgoZTEgaW5zdGFuY2VvZiBCUFNlYXJjaExpc3RFbGVtZW50KSAmJiAoZTIgaW5zdGFuY2VvZiBCUFNlYXJjaExpc3RFbGVtZW50KSkgewotCQkJU2VhcmNocGF0aEVudHJ5IHAxID0gKFNlYXJjaHBhdGhFbnRyeSkgKChCUFNlYXJjaExpc3RFbGVtZW50KSBlMSkuZ2V0RW50cnkoKTsKLQkJCVNlYXJjaHBhdGhFbnRyeSBwMiA9IChTZWFyY2hwYXRoRW50cnkpICgoQlBTZWFyY2hMaXN0RWxlbWVudCkgZTIpLmdldEVudHJ5KCk7Ci0JCQkKLQkJCS8vIENvbXBhcmUgZmlyc3Qgd2l0aGluIHBhdGgsIHRoZW4gcGFja2FnZXMgd2l0aGluIGVhY2ggcGF0aC4KLQkJCWludCBjID0gcDEuZ2V0UGF0aCgpLnRvU3RyaW5nKCkuY29tcGFyZVRvKHAyLmdldFBhdGgoKS50b1N0cmluZygpKTsKLQkJCWlmIChjID09IDApIHsKLQkJCQkvLyBXaXRoaW4gc2FtZSBwYXRoLCBzbyBub3cgc29ydCBieSBwYWNrYWdlLCBpZiB0aGVyZSBhcmUgYW55LgotCQkJCVN0cmluZyBwa2cxID0gcDEuZ2V0UGFja2FnZSgpOwotCQkJCVN0cmluZyBwa2cyID0gcDIuZ2V0UGFja2FnZSgpOwotCQkJCWlmIChwa2cxID09IG51bGwpCi0JCQkJCXBrZzEgPSAiIjsJLy8gRm9yIG51bGwsIHVzZSBhbiBlbXB0eSBzdHJpbmcgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChwa2cyID09IG51bGwpCi0JCQkJCXBrZzIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCXJldHVybiBwa2cxLmNvbXBhcmVUbyhwa2cyKTsKLQkJCX0gZWxzZQotCQkJCXJldHVybiBjOwkvLyBQYXRocyBhcmUgbm90IGVxdWFsLCBzbyBzb3J0IHZpYSBwYXRoLgotCQl9Ci0JCXJldHVybiBzdXBlci5jb21wYXJlKHZpZXdlciwgZTEsIGUyKTsKLQl9CQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9TZWFyY2hQYXRoTGlzdExhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxNTM2OC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9TZWFyY2hQYXRoTGlzdExhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotLyoKLQotCi0gKi8KLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLmNvcmUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkuY29yZS5KRU1VSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIFNlYXJjaFBhdGhMaXN0TGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgewotCi0JSVdvcmtzcGFjZVJvb3QgZlJvb3Q7Ci0JSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0OwotCi0JLy8gU2hhcmVkIGltYWdlcwotCXByaXZhdGUgSW1hZ2UgZkphckljb24sIGZFeHRKYXJJY29uOwotCXByaXZhdGUgSW1hZ2UgZkZvbGRlckltYWdlLCBmUHJvamVjdEltYWdlLCBmVmFyaWFibGVJbWFnZSwgZkxpYnJhcnlJbWFnZTsKLQlwcml2YXRlIEltYWdlIGZNaXNzaW5nSmFySW1hZ2UsIGZNaXNzaW5nVmFyaWFibGVJbWFnZTsKLQlwcml2YXRlIEltYWdlIGZNaXNzaW5nRm9sZGVySW1hZ2UsIGZNaXNzaW5nUHJvamVjdEltYWdlOwotCXByaXZhdGUgSW1hZ2UgZlBhY2thZ2VJbWFnZTsKLQotCS8vIExvY2FsIGltYWdlcywgd2lsbCBiZSBkaXNwb3NlZC4KLQlwcml2YXRlIEltYWdlIGZQbHVnaW5JbWFnZTsKLQlwcml2YXRlIEltYWdlIGZCZWFuSW1hZ2U7Ci0JcHJpdmF0ZSBJbWFnZSBmTWlzc2luZ1BhY2thZ2VJbWFnZTsKLQlwcml2YXRlIEltYWdlIGZCbGFua0ltYWdlOwotCXByaXZhdGUgSW1hZ2UgZk1pc3NpbmdMaWJyYXJ5SW1hZ2U7Ci0JcHJpdmF0ZSBIYXNoTWFwIGZCZWFuZWRJbWFnZXMgPSBuZXcgSGFzaE1hcCgpOyAvLyBLZXkgb2YgaW1hZ2UgdG8gYSBjb21wb3NpdGUgd2l0aCBhIGJlYW4gYXR0YWNoZWQKLQlwcml2YXRlIEhhc2hNYXAgZlBhY2thZ2VkSW1hZ2VzID0gbmV3IEhhc2hNYXAoKTsKLQlwcml2YXRlIEhhc2hNYXAgZk1pc3NpbmdQYWNrYWdlZEltYWdlcyA9IG5ldyBIYXNoTWFwKCk7Ci0JcHJpdmF0ZSBIYXNoTWFwIGZOb3JtYWxJbWFnZXMgPSBuZXcgSGFzaE1hcCgpOwkvLyBOZWVkIHRvIGNvbXBvc2l0ZSBub3JtYWwgaW1hZ2VzIHcvYmxhbmsgc28gdGhhdCB0aGV5IGFyZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBjb21wb3NpdGVkIG9uZXMuCi0JLy8gS2V5IG9mIGltYWdlIHRvIGEgY29tcG9zaXRlIHdpdGggYSBwYWNrYWdlIGF0dGFjaGVkCi0KLQlwdWJsaWMgU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQkKLQlwcm90ZWN0ZWQgSW1hZ2UgZ2V0V2FybmluZ092ZXJsYXlJbWFnZShJbWFnZSBpbWFnZSl7Ci0JCUltYWdlRGVzY3JpcHRvciBkZWNvcmF0ZWRJbWFnZURlc2NyaXB0b3IgPSAKLQkJCW5ldyBKYXZhRWxlbWVudEltYWdlRGVzY3JpcHRvcigKLQkJCQkJSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21JbWFnZShpbWFnZSksCi0JCQkJCUphdmFFbGVtZW50SW1hZ2VEZXNjcmlwdG9yLldBUk5JTkcsIAotCQkJCQluZXcgUG9pbnQoMTYsMTYpKTsKLQkJcmV0dXJuIGRlY29yYXRlZEltYWdlRGVzY3JpcHRvci5jcmVhdGVJbWFnZSgpOwotCX0KLQkKLQlwdWJsaWMgU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyKElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCkgewotCQl0aGlzLmphdmFQcm9qZWN0ID0gamF2YVByb2plY3Q7Ci0JCQotCQlmUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCUlTaGFyZWRJbWFnZXMgamR0U2hhcmVkSW1hZ2VzID0gSmF2YVVJLmdldFNoYXJlZEltYWdlcygpOwotCi0JCWZKYXJJY29uID0gamR0U2hhcmVkSW1hZ2VzLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSkFSKTsKLQkJZkV4dEphckljb24gPSBqZHRTaGFyZWRJbWFnZXMuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19FWFRFUk5BTF9BUkNISVZFKTsKLQkJZkZvbGRlckltYWdlID0gamR0U2hhcmVkSW1hZ2VzLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfUEFDS0ZSQUdfUk9PVCk7Ci0KLQkJZlZhcmlhYmxlSW1hZ2UgPSBqZHRTaGFyZWRJbWFnZXMuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19DTEFTU1BBVEhfVkFSX0VOVFJZKTsKLQkJCi0JCWZMaWJyYXJ5SW1hZ2UgPSBqZHRTaGFyZWRJbWFnZXMuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19MSUJSQVJZKTsKLQotCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JCWZQcm9qZWN0SW1hZ2UgPSB3b3JrYmVuY2guZ2V0U2hhcmVkSW1hZ2VzKCkuZ2V0SW1hZ2UoSURFLlNoYXJlZEltYWdlcy5JTUdfT0JKX1BST0pFQ1QpOwotCi0JCWZNaXNzaW5nSmFySW1hZ2UgPSBnZXRXYXJuaW5nT3ZlcmxheUltYWdlKGpkdFNoYXJlZEltYWdlcy5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0pBUikpOwotCQlmTWlzc2luZ1ZhcmlhYmxlSW1hZ2UgPSBnZXRXYXJuaW5nT3ZlcmxheUltYWdlKGpkdFNoYXJlZEltYWdlcy5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0NMQVNTUEFUSF9WQVJfRU5UUlkpKTsKLQkJZk1pc3NpbmdGb2xkZXJJbWFnZSA9IGdldFdhcm5pbmdPdmVybGF5SW1hZ2UoamR0U2hhcmVkSW1hZ2VzLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfUEFDS0ZSQUdfUk9PVCkpOwotCQlmTWlzc2luZ1Byb2plY3RJbWFnZSA9IHdvcmtiZW5jaC5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJREUuU2hhcmVkSW1hZ2VzLklNR19PQkpfUFJPSkVDVF9DTE9TRUQpOwotCi0JCWZQYWNrYWdlSW1hZ2UgPSBqZHRTaGFyZWRJbWFnZXMuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19QQUNLQUdFKTsKLQotCQlSZWN0YW5nbGUgciA9IGZMaWJyYXJ5SW1hZ2UuZ2V0Qm91bmRzKCk7Ci0JCVBvaW50IHMgPSBuZXcgUG9pbnQoci53aWR0aCwgci5oZWlnaHQpOwotCQlKYXZhRWxlbWVudEltYWdlRGVzY3JpcHRvciBqZWQgPSBuZXcgSmF2YUVsZW1lbnRJbWFnZURlc2NyaXB0b3IoamR0U2hhcmVkSW1hZ2VzLmdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0xJQlJBUlkpLCAgSmF2YUVsZW1lbnRJbWFnZURlc2NyaXB0b3IuV0FSTklORywgcyk7Ci0JCWZNaXNzaW5nTGlicmFyeUltYWdlID0gamVkLmNyZWF0ZUltYWdlKCk7Ci0JCUJ1bmRsZSBidW5kbGUgPSBKRU1VSVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKTsKLQkJVVJMIHVybCA9IEZpbGVMb2NhdG9yLmZpbmQoYnVuZGxlLCBuZXcgUGF0aCgiaWNvbnMvcGx1Z2luX29iai5naWYiKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHVybCAhPSBudWxsKQotCQkJZlBsdWdpbkltYWdlID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwodXJsKS5jcmVhdGVJbWFnZSgpOwotCQllbHNlCi0JCQlmUGx1Z2luSW1hZ2UgPSBJbWFnZURlc2NyaXB0b3IuZ2V0TWlzc2luZ0ltYWdlRGVzY3JpcHRvcigpLmNyZWF0ZUltYWdlKCk7Ci0KLQkJdXJsID0gRmlsZUxvY2F0b3IuZmluZChidW5kbGUsIG5ldyBQYXRoKCJpY29ucy9qYXZhYmVhbi5naWYiKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHVybCAhPSBudWxsKQotCQkJZkJlYW5JbWFnZSA9IEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKHVybCkuY3JlYXRlSW1hZ2UoKTsKLQkJZWxzZQotCQkJZkJlYW5JbWFnZSA9IEltYWdlRGVzY3JpcHRvci5nZXRNaXNzaW5nSW1hZ2VEZXNjcmlwdG9yKCkuY3JlYXRlSW1hZ2UoKTsKLQotCQl1cmwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSwgbmV3IFBhdGgoImljb25zL3BhY2thZ2Vfb2JqX21pc3NpbmcuZ2lmIiksIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCWlmICh1cmwgIT0gbnVsbCkKLQkJCWZNaXNzaW5nUGFja2FnZUltYWdlID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwodXJsKS5jcmVhdGVJbWFnZSgpOwotCQllbHNlCi0JCQlmTWlzc2luZ1BhY2thZ2VJbWFnZSA9IEltYWdlRGVzY3JpcHRvci5nZXRNaXNzaW5nSW1hZ2VEZXNjcmlwdG9yKCkuY3JlYXRlSW1hZ2UoKTsKLQotCQl1cmwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSwgbmV3IFBhdGgoImljb25zL2JsYW5rLmdpZiIpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAodXJsICE9IG51bGwpCi0JCQlmQmxhbmtJbWFnZSA9IEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKHVybCkuY3JlYXRlSW1hZ2UoKTsKLQkJZWxzZQotCQkJZkJsYW5rSW1hZ2UgPSBJbWFnZURlc2NyaXB0b3IuZ2V0TWlzc2luZ0ltYWdlRGVzY3JpcHRvcigpLmNyZWF0ZUltYWdlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVByb2plY3QoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KSB7Ci0JCXRoaXMuamF2YVByb2plY3QgPSBqYXZhUHJvamVjdDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgQlBMaXN0RWxlbWVudCkgewotCQkJQlBMaXN0RWxlbWVudCBicGVudHJ5ID0gKEJQTGlzdEVsZW1lbnQpIGVsZW1lbnQ7Ci0JCQlJQmVhbmluZm9zRG9jRW50cnkgZG9jRW50cnkgPSBicGVudHJ5LmdldEVudHJ5KCk7Ci0JCQlJUGF0aCBwYXRoID0gZG9jRW50cnkuZ2V0UGF0aCgpOwotCQkJU3RyaW5nIHBhdGhTdHJpbmcgPSBudWxsOwotCQkJc3dpdGNoIChkb2NFbnRyeS5nZXRLaW5kKCkpIHsKLQkJCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfTElCUkFSWSA6Ci0JCQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IGZSb290LmZpbmRNZW1iZXIocGF0aCk7Ci0JCQkJCWlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIpIHsKLQkJCQkJCXBhdGhTdHJpbmcgPQotCQkJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KEJlYW5JbmZvVUlNZXNzYWdlcy5MYWJlbFByb3ZpZGVyX0xpYnJhcnlfRm9sZGVyLCBuZXcgT2JqZWN0W10geyBwYXRoLm1ha2VSZWxhdGl2ZSgpLnRvU3RyaW5nKCl9KTsgCi0JCQkJCX0gZWxzZSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSkgewotCQkJCQkJaWYgKFZhcmlhYmxlU2VsZWN0aW9uQmxvY2suaXNBcmNoaXZlUGF0aChwYXRoKSkgewotCQkJCQkJCS8vIEludGVybmFsIGxpYnJhcnkKLQkJCQkJCQlTdHJpbmdbXSBhcmdzID0KLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcGF0aC5sYXN0U2VnbWVudCgpLCBwYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKS5tYWtlUmVsYXRpdmUoKS50b1N0cmluZygpfTsKLQkJCQkJCQlwYXRoU3RyaW5nID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoQmVhbkluZm9VSU1lc3NhZ2VzLkxhYmVsUHJvdmlkZXJfTGlicmFyeV9fUGF0aExhc3RTZWdtZW50X1BhdGhSZWxhdGl2ZV8sIGFyZ3MpOyAKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWlmIChWYXJpYWJsZVNlbGVjdGlvbkJsb2NrLmlzQXJjaGl2ZVBhdGgocGF0aCkpIHsKLQkJCQkJCQkvLyBFeHRlcm5hbCBsaWJyYXJ5Ci0JCQkJCQkJU3RyaW5nW10gYXJncyA9Ci0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHBhdGgubGFzdFNlZ21lbnQoKSwgcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSkudG9TdHJpbmcoKX07Ci0JCQkJCQkJcGF0aFN0cmluZyA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KEJlYW5JbmZvVUlNZXNzYWdlcy5MYWJlbFByb3ZpZGVyX0xpYnJhcnlfX1BhdGhMYXN0U2VnbWVudF9QYXRoRXhjZXB0TGFzdF8sIGFyZ3MpOyAKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLy8gc2hvdWxkIG5vdCBjb21lIGhlcmUKLQkJCQkJCQlwYXRoU3RyaW5nID0gcGF0aC5tYWtlUmVsYXRpdmUoKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1ZBUklBQkxFIDoKLQkJCQkJU3RyaW5nIG5hbWUgPSBwYXRoLm1ha2VSZWxhdGl2ZSgpLnRvU3RyaW5nKCk7Ci0JCQkJCUlQYXRoIGVudHJ5UGF0aCA9IEphdmFDb3JlLmdldENsYXNzcGF0aFZhcmlhYmxlKHBhdGguc2VnbWVudCgwKSk7Ci0JCQkJCWlmIChlbnRyeVBhdGggIT0gbnVsbCkKLQkJCQkJCXBhdGhTdHJpbmcgPQotCQkJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQkJCQlCZWFuSW5mb1VJTWVzc2FnZXMuTGFiZWxQcm92aWRlcl9WYXJpYWJsZV9fbmFtZV9QYXRoT1NTdHJpbmdfLCAKLQkJCQkJCQkJbmV3IE9iamVjdFtdIHsgbmFtZSwgZW50cnlQYXRoLmFwcGVuZChwYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoMSkpLnRvT1NTdHJpbmcoKX0pOwotCQkJCQllbHNlCi0JCQkJCQlwYXRoU3RyaW5nID0gbmFtZTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfQ09OVEFJTkVSOgotCQkJCQl0cnkgewotCQkJCQkJSUNsYXNzcGF0aENvbnRhaW5lciBjID0gSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKHBhdGgsIGphdmFQcm9qZWN0KTsKLQkJCQkJCWlmIChjICE9IG51bGwpIHsKLQkJCQkJCQlwYXRoU3RyaW5nID0gYy5nZXREZXNjcmlwdGlvbigpOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJCQl9Ci0JCQkJCXBhdGhTdHJpbmcgPSBwYXRoLnRvU3RyaW5nKCk7Ci0JCQkJCWJyZWFrOwotCQkJCQkKLQkJCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfUFJPSkVDVCA6Ci0JCQkJCXBhdGhTdHJpbmcgPSBwYXRoLnRvU3RyaW5nKCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1NPVVJDRSA6Ci0JCQkJCXBhdGhTdHJpbmcgPSBwYXRoLm1ha2VSZWxhdGl2ZSgpLnRvU3RyaW5nKCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBCZWFuaW5mb0VudHJ5LkJJRV9QTFVHSU4gOgotCQkJCQlwYXRoU3RyaW5nID0gcGF0aC50b1N0cmluZygpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0IDoKLQkJCQkJLy8gbm8gcGF0aCwgc28gcHJvYmFibHkgYSBzZWFyY2ggZW50cnkgd2l0aGluIGEgYmVhbmluZm8gZW50cnkuCi0JCQl9Ci0KLQkJCWlmIChkb2NFbnRyeSBpbnN0YW5jZW9mIFNlYXJjaHBhdGhFbnRyeSkgewotCQkJCS8vIFRoZXJlIGNvdWxkIGJlIGEgcGFja2FnZSBpbnZvbHZlZCB0b28gaWYgdGhpcyBpcyBub3QgYSBwcm9qZWN0IG9yIHJlZ2lzdGVyZWQgdmFyIGVudHJ5Ci0JCQkJU3RyaW5nIHBhY2thZ2VOYW1lID0gKChTZWFyY2hwYXRoRW50cnkpIGRvY0VudHJ5KS5nZXRQYWNrYWdlKCk7Ci0JCQkJaWYgKHBhY2thZ2VOYW1lICE9IG51bGwgJiYgcGFja2FnZU5hbWUubGVuZ3RoKCkgPiAwKQotCQkJCQlpZiAocGF0aFN0cmluZyAhPSBudWxsKQotCQkJCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KEJlYW5JbmZvVUlNZXNzYWdlcy5MYWJlbFByb3ZpZGVyX19wYWNrYWdlTmFtZV9QYXRoXywgbmV3IE9iamVjdFtdIHsgcGFja2FnZU5hbWUsIHBhdGhTdHJpbmcgfSk7IAotCQkJCQllbHNlCi0JCQkJCQlyZXR1cm4gcGFja2FnZU5hbWU7Ci0JCQl9Ci0KLQkJCWlmIChwYXRoU3RyaW5nICE9IG51bGwpCi0JCQkJcmV0dXJuIHBhdGhTdHJpbmc7Ci0JCQllbHNlCi0JCQkJcmV0dXJuICI/IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiBzdXBlci5nZXRUZXh0KGVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewotCQlJbWFnZSByZXR1cm5lZEltYWdlID0gbnVsbDsKLQkJYm9vbGVhbiBpbWFnZUlzTm9ybWFsID0gdHJ1ZTsJLy8gV2hldGhlciB0aGlzIGlzIGEgbm9ybWFsIHNpemVkIGltYWdlICh3aGljaCB3aWxsIG5lZWQgY29tcG9zaXRpbmcgd2l0aCBibGFuaykKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCUExpc3RFbGVtZW50KSB7Ci0JCQlCUExpc3RFbGVtZW50IGJwZW50cnkgPSAoQlBMaXN0RWxlbWVudCkgZWxlbWVudDsKLQkJCUlCZWFuaW5mb3NEb2NFbnRyeSBkb2NFbnRyeSA9IGJwZW50cnkuZ2V0RW50cnkoKTsKLQkJCUlQYXRoIHBhdGggPSBkb2NFbnRyeS5nZXRQYXRoKCk7Ci0JCQlJbWFnZSBwYXRoSW1hZ2UgPSBudWxsOwotCQkJc3dpdGNoIChkb2NFbnRyeS5nZXRLaW5kKCkpIHsKLQkJCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfU09VUkNFIDoKLQkJCQkJaWYgKCFicGVudHJ5LmlzTWlzc2luZygpKQotCQkJCQkJcGF0aEltYWdlID0gZkZvbGRlckltYWdlOwotCQkJCQllbHNlCi0JCQkJCQlwYXRoSW1hZ2UgPSBmTWlzc2luZ0ZvbGRlckltYWdlOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZIDoKLQkJCQkJaWYgKCFicGVudHJ5LmlzTWlzc2luZygpKSB7Ci0JCQkJCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBmUm9vdC5maW5kTWVtYmVyKHBhdGgpOwotCQkJCQkJaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikKLQkJCQkJCQlwYXRoSW1hZ2UgPSBmRm9sZGVySW1hZ2U7Ci0JCQkJCQllbHNlIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotCQkJCQkJCXBhdGhJbWFnZSA9IGZKYXJJY29uOwotCQkJCQkJZWxzZQotCQkJCQkJCXBhdGhJbWFnZSA9IGZFeHRKYXJJY29uOwotCQkJCQl9IGVsc2UKLQkJCQkJCXBhdGhJbWFnZSA9IGZNaXNzaW5nSmFySW1hZ2U7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1BST0pFQ1QgOgotCQkJCQlpZiAoIWJwZW50cnkuaXNNaXNzaW5nKCkpCi0JCQkJCQlwYXRoSW1hZ2UgPSBmUHJvamVjdEltYWdlOwotCQkJCQllbHNlCi0JCQkJCQlwYXRoSW1hZ2UgPSBmTWlzc2luZ1Byb2plY3RJbWFnZTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfVkFSSUFCTEUgOgotCQkJCQlpZiAoIWJwZW50cnkuaXNNaXNzaW5nKCkpCi0JCQkJCQlwYXRoSW1hZ2UgPSBmVmFyaWFibGVJbWFnZTsKLQkJCQkJZWxzZQotCQkJCQkJcGF0aEltYWdlID0gZk1pc3NpbmdWYXJpYWJsZUltYWdlOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9DT05UQUlORVI6Ci0JCQkJCWlmICghYnBlbnRyeS5pc01pc3NpbmcoKSkKLQkJCQkJCXBhdGhJbWFnZSA9IGZMaWJyYXJ5SW1hZ2U7Ci0JCQkJCWVsc2UKLQkJCQkJCXBhdGhJbWFnZSA9IGZNaXNzaW5nTGlicmFyeUltYWdlOwotCQkJCQlicmVhazsJCQkJCi0JCQkJCQotCQkJCWNhc2UgQmVhbmluZm9FbnRyeS5CSUVfUExVR0lOOgotCQkJCQlwYXRoSW1hZ2UgPSBmUGx1Z2luSW1hZ2U7Ci0JCQkJCWJyZWFrOwotCQkJCQkKLQkJCQlkZWZhdWx0IDoKLQkJCQkJLy8gcHJvYmFibHkgYSBzZWFyY2hlbnRyeSB1bmRlciBiZWFuaW5mbyBlbnRyeSwgbm8gcGF0aCBpY29uIHRvIGRlY29yYXRlLgotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKGJwZW50cnkgaW5zdGFuY2VvZiBCUFNlYXJjaExpc3RFbGVtZW50KSB7Ci0JCQkJU2VhcmNocGF0aEVudHJ5IHNlID0gKFNlYXJjaHBhdGhFbnRyeSkgZG9jRW50cnk7Ci0JCQkJQlBTZWFyY2hMaXN0RWxlbWVudCBicHNlID0gKEJQU2VhcmNoTGlzdEVsZW1lbnQpIGJwZW50cnk7Ci0JCQkJaWYgKHNlLmdldFBhY2thZ2UoKSAhPSBudWxsKSB7Ci0JCQkJCWlmIChwYXRoSW1hZ2UgIT0gbnVsbCkgewotCQkJCQkJaWYgKCFicHNlLmlzUGFja2FnZU1pc3NpbmcoKSkgewotCQkJCQkJCS8vIE5lZWQgdG8gZGVjb3JhdGUgd2l0aCBhIHBhY2thZ2Ugc3ltYm9sLgotCQkJCQkJCWltYWdlSXNOb3JtYWwgPSBmYWxzZTsKLQkJCQkJCQlyZXR1cm5lZEltYWdlID0gKEltYWdlKSBmUGFja2FnZWRJbWFnZXMuZ2V0KHBhdGhJbWFnZSk7IC8vIFNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIGltYWdlCi0JCQkJCQkJaWYgKHJldHVybmVkSW1hZ2UgPT0gbnVsbCkgewotCQkJCQkJCQlPdmVybGF5Q29tcG9zaXRlIG9jID0gbmV3IE92ZXJsYXlDb21wb3NpdGUocGF0aEltYWdlLmdldEltYWdlRGF0YSgpKTsKLQkJCQkJCQkJb2Muc2V0UmlnaHRFeHRlbnNpb24oZlBhY2thZ2VJbWFnZS5nZXRJbWFnZURhdGEoKSk7Ci0JCQkJCQkJCXJldHVybmVkSW1hZ2UgPSBvYy5jcmVhdGVJbWFnZSgpOwotCQkJCQkJCQlmUGFja2FnZWRJbWFnZXMucHV0KHBhdGhJbWFnZSwgcmV0dXJuZWRJbWFnZSk7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvLyBOZWVkIHRvIGRlY29yYXRlIHdpdGggYSBtaXNzaW5nIHBhY2thZ2Ugc3ltYm9sLgotCQkJCQkJCWltYWdlSXNOb3JtYWwgPSBmYWxzZTsKLQkJCQkJCQlyZXR1cm5lZEltYWdlID0gKEltYWdlKSBmTWlzc2luZ1BhY2thZ2VkSW1hZ2VzLmdldChwYXRoSW1hZ2UpOyAvLyBTZWUgaWYgd2UndmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBpbWFnZQotCQkJCQkJCWlmIChyZXR1cm5lZEltYWdlID09IG51bGwpIHsKLQkJCQkJCQkJT3ZlcmxheUNvbXBvc2l0ZSBvYyA9IG5ldyBPdmVybGF5Q29tcG9zaXRlKHBhdGhJbWFnZS5nZXRJbWFnZURhdGEoKSk7Ci0JCQkJCQkJCW9jLnNldFJpZ2h0RXh0ZW5zaW9uKGZNaXNzaW5nUGFja2FnZUltYWdlLmdldEltYWdlRGF0YSgpKTsKLQkJCQkJCQkJcmV0dXJuZWRJbWFnZSA9IG9jLmNyZWF0ZUltYWdlKCk7Ci0JCQkJCQkJCWZNaXNzaW5nUGFja2FnZWRJbWFnZXMucHV0KHBhdGhJbWFnZSwgcmV0dXJuZWRJbWFnZSk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCQkKLQkJCQlpZiAocGF0aEltYWdlID09IG51bGwgJiYgcmV0dXJuZWRJbWFnZSA9PSBudWxsKQotCQkJCQlpZiAoIWJwc2UuaXNQYWNrYWdlTWlzc2luZygpKQotCQkJCQkJcmV0dXJuZWRJbWFnZSA9IGZQYWNrYWdlSW1hZ2U7IC8vIEp1c3QgYSBwYWNrYWdlIGltYWdlCi0JCQkJCWVsc2UKLQkJCQkJCXJldHVybmVkSW1hZ2UgPSBmTWlzc2luZ1BhY2thZ2VJbWFnZTsJLy8gSnVzdCB0aGUgbWlzc2luZyBwYWNrYWdlIGltYWdlLgotCQkJCWVsc2UgaWYgKHJldHVybmVkSW1hZ2UgPT0gbnVsbCkKLQkJCQkJcmV0dXJuZWRJbWFnZSA9IHBhdGhJbWFnZTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHBhdGhJbWFnZSAhPSBudWxsKSB7Ci0JCQkJCS8vIEl0IGlzIGEgYmVhbmluZm8gZW50cnksIG5lZWQgdG8gZGVjb3JhdGUgd2l0aCB0aGUgYmVhbi4KLQkJCQkJaW1hZ2VJc05vcm1hbCA9IGZhbHNlOwotCQkJCQlyZXR1cm5lZEltYWdlID0gKEltYWdlKSBmQmVhbmVkSW1hZ2VzLmdldChwYXRoSW1hZ2UpOyAvLyBTZWUgaWYgd2UndmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBpbWFnZQotCQkJCQlpZiAocmV0dXJuZWRJbWFnZSA9PSBudWxsKSB7Ci0JCQkJCQlPdmVybGF5Q29tcG9zaXRlIG9jID0gbmV3IE92ZXJsYXlDb21wb3NpdGUocGF0aEltYWdlLmdldEltYWdlRGF0YSgpKTsKLQkJCQkJCW9jLnNldFJpZ2h0RXh0ZW5zaW9uKGZCZWFuSW1hZ2UuZ2V0SW1hZ2VEYXRhKCkpOwotCQkJCQkJcmV0dXJuZWRJbWFnZSA9IG9jLmNyZWF0ZUltYWdlKCk7Ci0JCQkJCQlmQmVhbmVkSW1hZ2VzLnB1dChwYXRoSW1hZ2UsIHJldHVybmVkSW1hZ2UpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChyZXR1cm5lZEltYWdlID09IG51bGwpCi0JCQkJCXJldHVybmVkSW1hZ2UgPSBmQmVhbkltYWdlOyAvLyBTaG91bGRuJ3Qgb2NjdXIuCi0JCQl9Ci0JCX0KLQkJCi0JCWlmIChpbWFnZUlzTm9ybWFsICYmIHJldHVybmVkSW1hZ2UgIT0gbnVsbCkgewotCQkJLy8gV2UgbmVlZCB0byBjb21wb3NpdGUgaXQgd2l0aCBibGFuayBzbyB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSB0aGUgc2FtZSBzaXplCi0JCQkvLyBhcyBjb21wb3NpdGVkIGltYWdlcy4gSWYgdGhpcyBpc24ndCBkb25lLCB0aGUgdmlld2VyIHdpbGwgc3RyZXRjaCB0aGUgaW1hZ2UKLQkJCS8vIHRvIG1hdGNoIHRoZSBzYW1lIHNpemUgYXMgdGhlIGNvbXBvc2l0ZWQgaW1hZ2VzIGFuZCB0aGluZ3Mgd2lsbCBsb29rIGF3ZWZ1bC4KLQkJCUltYWdlIG5ld1JldHVybmVkID0gKEltYWdlKSBmTm9ybWFsSW1hZ2VzLmdldChyZXR1cm5lZEltYWdlKTsKLQkJCWlmIChuZXdSZXR1cm5lZCA9PSBudWxsKSB7Ci0JCQkJT3ZlcmxheUNvbXBvc2l0ZSBvYyA9IG5ldyBPdmVybGF5Q29tcG9zaXRlKHJldHVybmVkSW1hZ2UuZ2V0SW1hZ2VEYXRhKCkpOwotCQkJCW9jLnNldFJpZ2h0RXh0ZW5zaW9uKGZCbGFua0ltYWdlLmdldEltYWdlRGF0YSgpKTsKLQkJCQluZXdSZXR1cm5lZCA9IG9jLmNyZWF0ZUltYWdlKCk7Ci0JCQkJZk5vcm1hbEltYWdlcy5wdXQocmV0dXJuZWRJbWFnZSwgbmV3UmV0dXJuZWQpOwotCQkJfQotCQkJcmV0dXJuZWRJbWFnZSA9IG5ld1JldHVybmVkOwotCQl9Ci0JCXJldHVybiByZXR1cm5lZEltYWdlOwotCX0KLQotCS8qCi0JICogQHNlZSBJQmFzZUxhYmVsUHJvdmlkZXIjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCi0JCWZQbHVnaW5JbWFnZS5kaXNwb3NlKCk7Ci0JCWZCZWFuSW1hZ2UuZGlzcG9zZSgpOwotCQlmTWlzc2luZ1BhY2thZ2VJbWFnZS5kaXNwb3NlKCk7Ci0JCWZCbGFua0ltYWdlLmRpc3Bvc2UoKTsKLQkJZk1pc3NpbmdMaWJyYXJ5SW1hZ2UuZGlzcG9zZSgpOwotCQlmb3IgKEl0ZXJhdG9yIGl0ciA9IGZCZWFuZWRJbWFnZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXRyLmhhc05leHQoKTspIHsKLQkJCSgoSW1hZ2UpIGl0ci5uZXh0KCkpLmRpc3Bvc2UoKTsKLQkJfQotCQlmb3IgKEl0ZXJhdG9yIGl0ciA9IGZQYWNrYWdlZEltYWdlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOykgewotCQkJKChJbWFnZSkgaXRyLm5leHQoKSkuZGlzcG9zZSgpOwotCQl9Ci0JCWZvciAoSXRlcmF0b3IgaXRyID0gZk1pc3NpbmdQYWNrYWdlZEltYWdlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOykgewotCQkJKChJbWFnZSkgaXRyLm5leHQoKSkuZGlzcG9zZSgpOwotCQl9Ci0JCWZvciAoSXRlcmF0b3IgaXRyID0gZk5vcm1hbEltYWdlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOykgewotCQkJKChJbWFnZSkgaXRyLm5leHQoKSkuZGlzcG9zZSgpOwotCQl9CQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1NlYXJjaHBhdGhPcmRlcmluZ1dvcmtib29rUGFnZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvU2VhcmNocGF0aE9yZGVyaW5nV29ya2Jvb2tQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MDE0NmEuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvU2VhcmNocGF0aE9yZGVyaW5nV29ya2Jvb2tQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLmNvcmUuSkVNVUlQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBTZWFyY2hwYXRoT3JkZXJpbmdXb3JrYm9va1BhZ2UgaW1wbGVtZW50cyBJQnVpbGRTZWFyY2hQYWdlewotCi0JcHJpdmF0ZSBMYWJlbCBsYWJlbCA9IG51bGw7Ci0JcHJpdmF0ZSBUYWJsZSB0YWJsZSA9IG51bGw7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgYnV0dG9uQmFyID0gbnVsbDsKLQlwcml2YXRlIEJ1dHRvbiB1cEJ1dHRvbiA9IG51bGw7Ci0JcHJpdmF0ZSBCdXR0b24gZG93bkJ1dHRvbiA9IG51bGw7Ci0JcHJpdmF0ZSBMYWJlbCBzcGFjZXIxID0gbnVsbDsKLQlwcml2YXRlIEJ1dHRvbiBleHBvcnRBbGxCdXR0b24gPSBudWxsOwotCXByaXZhdGUgQnV0dG9uIHVuRXhwb3J0QWxsQnV0dG9uID0gbnVsbDsKLQlwcml2YXRlIElTdGF0dXMgc3RhdHVzOwotCXByaXZhdGUgYm9vbGVhbiBpblVwZGF0ZTsKLQlwcml2YXRlIEJlYW5pbmZvUGF0aHNCbG9jayBiZWFuaW5mb1BhdGhzQmxvY2s7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgdG9wOwotCXByaXZhdGUgQ2hlY2tib3hUYWJsZVZpZXdlciB0YWJsZVZpZXdlcj1udWxsOwotCXByaXZhdGUgU2VhcmNoUGF0aExpc3RMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXI7Ci0KLQlwcml2YXRlIExpc3QgZWxlbWVudHM7Ci0JcHJpdmF0ZSBMaXN0IHNlbGVjdGVkOwotCXByaXZhdGUgTGlzdCBjaGVja2VkOwotCi0JcHVibGljIFNlYXJjaHBhdGhPcmRlcmluZ1dvcmtib29rUGFnZShCZWFuaW5mb1BhdGhzQmxvY2sgYmVhbmluZm9QYXRoc0Jsb2NrKSB7Ci0JCXRoaXMuYmVhbmluZm9QYXRoc0Jsb2NrID0gYmVhbmluZm9QYXRoc0Jsb2NrOwotCQl0aGlzLnN0YXR1cyA9IFN0YXR1c0hlbHBlci5PS19TVEFUVVM7Ci0JCXRoaXMubGFiZWxQcm92aWRlciA9IG5ldyBTZWFyY2hQYXRoTGlzdExhYmVsUHJvdmlkZXIoKTsKLQkJdGhpcy5lbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQlwdWJsaWMgQ29udHJvbCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpewotCQl0b3AgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhKCk7Ci0JCWdyaWREYXRhLmhvcml6b250YWxTcGFuID0gMjsKLQkJR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMjsKLQkJbGFiZWwgPSBuZXcgTGFiZWwodG9wLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF9sYWJlbCk7Ci0JCWxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGEpOwotCQljcmVhdGVUYWJsZSgpOwotCQl0b3Auc2V0TGF5b3V0KGdyaWRMYXlvdXQpOwotCQljcmVhdGVCdXR0b25CYXIoKTsKLQkJdG9wLnNldFNpemUobmV3IFBvaW50KDMwMCwgMjAwKSk7Ci0JCXVwZGF0ZUVuYWJsZWRTdGF0ZXMoKTsKLQkJaWYoc3BhY2VyMT09bnVsbCl7Ci0JCQkvL1RPRE8KLQkJfQotCQlyZXR1cm4gdG9wOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRhYmxlCQotCSAqCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRhYmxlKCkgewotCQlHcmlkRGF0YSBncmlkRGF0YTEgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YSgpOwotCQlncmlkRGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudCA9IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGEuRklMTDsKLQkJZ3JpZERhdGExLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTEudmVydGljYWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCXRhYmxlID0gbmV3IFRhYmxlKHRvcCwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5DSEVDSyB8IFNXVC5GVUxMX1NFTEVDVElPTik7Ci0JCXRhYmxlLnNldExheW91dERhdGEoZ3JpZERhdGExKTsKLQkJdGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJc2V0U2VsZWN0aW9uKEJlYW5pbmZvUGF0aHNCbG9jay5nZXRTZWxlY3RlZExpc3QodGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpKTsKLQkJCQl1cGRhdGVCdXR0b25zKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXdpZGdldFNlbGVjdGVkKGUpOwotCQkJfQotCQl9KTsKLQkJdGFibGVWaWV3ZXIgPSBuZXcgQ2hlY2tib3hUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQXJyYXlDb250ZW50UHJvdmlkZXIoKSk7Ci0JCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobGFiZWxQcm92aWRlcik7Ci0JCXRhYmxlVmlld2VyLnNldElucHV0KGVsZW1lbnRzKTsKLQkJaWYoZ2V0U2VsZWN0aW9uKCkhPW51bGwpCi0JCQl0YWJsZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpKTsKLQkJaWYoY2hlY2tlZCE9bnVsbCkKLQkJCXRhYmxlVmlld2VyLnNldENoZWNrZWRFbGVtZW50cyhjaGVja2VkLnRvQXJyYXkoKSk7Ci0JCXRhYmxlVmlld2VyLmFkZENoZWNrU3RhdGVMaXN0ZW5lcihuZXcgSUNoZWNrU3RhdGVMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgY2hlY2tTdGF0ZUNoYW5nZWQoQ2hlY2tTdGF0ZUNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCXBhZ2VDaGFuZ2VkKCk7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbXBvc2l0ZQkKLQkgKgotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVCdXR0b25CYXIoKSB7Ci0JCVJvd0xheW91dCByb3dMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7Ci0JCXJvd0xheW91dC50eXBlID0gb3JnLmVjbGlwc2Uuc3d0LlNXVC5WRVJUSUNBTDsKLQkJcm93TGF5b3V0LmZpbGwgPSB0cnVlOwotCQlHcmlkRGF0YSBncmlkRGF0YTIgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YSgpOwotCQlncmlkRGF0YTIuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQlncmlkRGF0YTIudmVydGljYWxBbGlnbm1lbnQgPSBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhLkZJTEw7Ci0JCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YS5CRUdJTk5JTkc7Ci0JCWJ1dHRvbkJhciA9IG5ldyBDb21wb3NpdGUodG9wLCBTV1QuTk9ORSk7Ci0JCWJ1dHRvbkJhci5zZXRMYXlvdXREYXRhKGdyaWREYXRhMik7Ci0JCWJ1dHRvbkJhci5zZXRMYXlvdXQocm93TGF5b3V0KTsKLQkJdXBCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkJhciwgU1dULk5PTkUpOwotCQl1cEJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3NlYXJjaHBhdGhfdXBfYnV0dG9uKTsKLQkJdXBCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlJdGVyYXRvciBzZWxJdHIgPSBnZXRTZWxlY3Rpb24oKS5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChzZWxJdHIuaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBlbGVtZW50ID0gc2VsSXRyLm5leHQoKTsKLQkJCQkJaW50IG9sZEluZGV4ID0gZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTsKLQkJCQkJaWYob2xkSW5kZXg+MCl7Ci0JCQkJCQllbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7Ci0JCQkJCQllbGVtZW50cy5hZGQoLS1vbGRJbmRleCwgZWxlbWVudCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCQkJCXBhZ2VDaGFuZ2VkKCk7Ci0JCQl9Ci0JCX0pOwotCQlkb3duQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25CYXIsIFNXVC5OT05FKTsKLQkJZG93bkJ1dHRvbi5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3NlYXJjaHBhdGhfZG93bl9idXR0b24pOwotCQlkb3duQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJSXRlcmF0b3Igc2VsSXRyID0gZ2V0U2VsZWN0aW9uKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoc2VsSXRyLmhhc05leHQoKSkgewotCQkJCQlPYmplY3QgZWxlbWVudCA9IHNlbEl0ci5uZXh0KCk7Ci0JCQkJCWludCBvbGRJbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7Ci0JCQkJCWlmKG9sZEluZGV4PChlbGVtZW50cy5zaXplKCktMSkpewotCQkJCQkJZWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpOwotCQkJCQkJZWxlbWVudHMuYWRkKCsrb2xkSW5kZXgsIGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCQlwYWdlQ2hhbmdlZCgpOwotCQkJfQotCQl9KTsKLQkJc3BhY2VyMSA9IG5ldyBMYWJlbChidXR0b25CYXIsIFNXVC5OT05FKTsKLQkJZXhwb3J0QWxsQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25CYXIsIFNXVC5OT05FKTsKLQkJZXhwb3J0QWxsQnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5JbmZvUGF0aHNCbG9ja19FeHBvcnRBbGwpOwotCQlleHBvcnRBbGxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlzZXRDaGVja2VkRWxlbWVudHMoZ2V0RWxlbWVudHMoKSk7Ci0JCQl9Ci0JCX0pOwotCQl1bkV4cG9ydEFsbEJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQmFyLCBTV1QuTk9ORSk7Ci0JCXVuRXhwb3J0QWxsQnV0dG9uLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLkJlYW5JbmZvUGF0aHNCbG9ja19VbmV4cG9ydEFsbCk7Ci0JCXVuRXhwb3J0QWxsQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJc2V0Q2hlY2tlZEVsZW1lbnRzKG51bGwpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRFbGVtZW50cygpIHsKLQkJcmV0dXJuIG5ldyBBcnJheUxpc3QoZWxlbWVudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRFbGVtZW50cyhMaXN0IGVsZW1lbnRzKXsKLQkJdGhpcy5lbGVtZW50cy5jbGVhcigpOwotCQl0aGlzLmVsZW1lbnRzLmFkZEFsbChlbGVtZW50cyk7Ci0JCWlmKHRhYmxlVmlld2VyIT1udWxsKXsKLQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJCXVwZGF0ZUJ1dHRvbnMoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KSB7Ci0JCWxhYmVsUHJvdmlkZXIuc2V0SmF2YVByb2plY3QoamF2YVByb2plY3QpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENoZWNrZWRFbGVtZW50cyhMaXN0IGV4cG9ydGVkRW50cmllcykgewotCQl0aGlzLmNoZWNrZWQgPSBleHBvcnRlZEVudHJpZXM7Ci0JCWlmKHRhYmxlVmlld2VyIT1udWxsICYmICF0YWJsZS5pc0Rpc3Bvc2VkKCkpewotCQkJdGFibGVWaWV3ZXIuc2V0Q2hlY2tlZEVsZW1lbnRzKGNoZWNrZWQhPW51bGwgPyBjaGVja2VkLnRvQXJyYXkoKSA6IG5ldyBPYmplY3RbMF0pOwotCQkJdXBkYXRlQnV0dG9ucygpOwotCQl9Ci0JCXBhZ2VDaGFuZ2VkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDaGVja2VkKEJQTGlzdEVsZW1lbnQgY3VyckVsZW1lbnQpIHsKLQkJaWYodGFibGVWaWV3ZXIhPW51bGwpewotCQkJcmV0dXJuIHRhYmxlVmlld2VyLmdldENoZWNrZWQoY3VyckVsZW1lbnQpOwotCQl9Ci0JCXJldHVybiBjaGVja2VkIT1udWxsICYmIGNoZWNrZWQuY29udGFpbnMoY3VyckVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldFNlbGVjdGlvbigpIHsKLQkJcmV0dXJuIHNlbGVjdGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihMaXN0IHNlbGVjdGlvbikgewotCQl0aGlzLnNlbGVjdGVkID0gc2VsZWN0aW9uOwotCQlpZih0YWJsZVZpZXdlciE9bnVsbCAmJiAhdGFibGUuaXNEaXNwb3NlZCgpKXsKLQkJCXRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb24hPW51bGw/c2VsZWN0aW9uIDogbmV3IEFycmF5TGlzdCgpKSk7Ci0JCQl1cGRhdGVCdXR0b25zKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgcGFnZUNoYW5nZWQoKXsKLQkJdXBkYXRlU2VhcmNoUGF0aFN0YXR1cygpOwotCQliZWFuaW5mb1BhdGhzQmxvY2suZG9TdGF0dXNMaW5lVXBkYXRlKCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUJ1dHRvbnMoKXsKLQkJdXBCdXR0b24uc2V0RW5hYmxlZChjYW5Nb3ZlVXAoKSAmJiBiZWFuaW5mb1BhdGhzQmxvY2suaXNCZWFuaW5mb0VuYWJsZWQoKSk7Ci0JCWRvd25CdXR0b24uc2V0RW5hYmxlZChjYW5Nb3ZlRG93bigpICYmIGJlYW5pbmZvUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJZXhwb3J0QWxsQnV0dG9uLnNldEVuYWJsZWQoZWxlbWVudHMhPW51bGwgJiYgYmVhbmluZm9QYXRoc0Jsb2NrLmlzQmVhbmluZm9FbmFibGVkKCkpOwotCQl1bkV4cG9ydEFsbEJ1dHRvbi5zZXRFbmFibGVkKGVsZW1lbnRzIT1udWxsICYmIGJlYW5pbmZvUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGNhbk1vdmVEb3duKCkgewotCQlpbnRbXSBpbmRjPSB0YWJsZS5nZXRTZWxlY3Rpb25JbmRpY2VzKCk7Ci0JCWludCBrPSBlbGVtZW50cy5zaXplKCkgLSAxOwotCQlmb3IgKGludCBpPSBpbmRjLmxlbmd0aCAtIDE7IGkgPj0gMCA7IGktLSwgay0tKSB7Ci0JCQlpZiAoaW5kY1tpXSAhPSBrKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBjYW5Nb3ZlVXAoKSB7Ci0JCWludFtdIGluZGM9IHRhYmxlLmdldFNlbGVjdGlvbkluZGljZXMoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGluZGMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChpbmRjW2ldICE9IGkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGVzIHRoZSBzZWFyY2ggcGF0aC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlU2VhcmNoUGF0aFN0YXR1cygpIHsKLQkJaWYgKGluVXBkYXRlKQotCQkJcmV0dXJuOwotCQl0cnkgewotCQkJaW5VcGRhdGUgPSB0cnVlOwotCi0JCQlzdGF0dXMgPSBTdGF0dXNIZWxwZXIuT0tfU1RBVFVTOwotCi0JCQlMaXN0IGVsZW1lbnRzID0gZ2V0RWxlbWVudHMoKTsKLQotCQkJYm9vbGVhbiBlbnRyeU1pc3NpbmcgPSBmYWxzZTsKLQotCQkJLy8gQmVjYXVzZSBvZiBidWcgaW4gc2V0Y2hlY2tlZFdpdGhvdXRVcGRhdGUsIHdoaWNoIHNldHMgdG8gdHJ1ZSBubyBtYXR0ZXIgd2hhdCB0aGUgc3RhdGUgaXMsIHdlIG5lZWQKLQkJCS8vIHRvIGFjY3VtdWxhdGUgdGhlIGNoZWNrZWQgZWxlbWVudHMgYW5kIHJlLXNldCB0aGVtIGFnYWluIGFmdGVyIHRoaXMgc28gdGhhdCB0aGV5IHdpbGwgYmUgY29ycmVjdC4JCi0JCQlBcnJheUxpc3QgZXhwb3J0ZWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCWZvciAoSXRlcmF0b3IgZW50cmllcyA9IGVsZW1lbnRzLml0ZXJhdG9yKCk7IGVudHJpZXMuaGFzTmV4dCgpOykgewotCQkJCUJQTGlzdEVsZW1lbnQgY3VyckVsZW1lbnQgPSAoQlBMaXN0RWxlbWVudCkgZW50cmllcy5uZXh0KCk7Ci0KLQkJCQlib29sZWFuIGlzQ2hlY2tlZCA9IGlzQ2hlY2tlZChjdXJyRWxlbWVudCk7Ci0JCQkJaWYgKGN1cnJFbGVtZW50LmNhbkV4cG9ydEJlQ2hhbmdlZCgpKSB7Ci0JCQkJCWlmIChpc0NoZWNrZWQpCi0JCQkJCQlleHBvcnRlZC5hZGQoY3VyckVsZW1lbnQpOwotCQkJCQljdXJyRWxlbWVudC5zZXRFeHBvcnRlZChpc0NoZWNrZWQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vCQkJCWZTZWFyY2hPcmRlci5zZXRDaGVja2VkV2l0aG91dFVwZGF0ZShjdXJyRWxlbWVudCwgY3VyckVsZW1lbnQuaXNFeHBvcnRlZCgpKTsKLQkJCQkJaWYgKGN1cnJFbGVtZW50LmlzRXhwb3J0ZWQoKSkKLQkJCQkJCWV4cG9ydGVkLmFkZChjdXJyRWxlbWVudCk7Ci0JCQkJfQotCi0JCQkJZW50cnlNaXNzaW5nID0gZW50cnlNaXNzaW5nIHx8IGN1cnJFbGVtZW50LmlzTWlzc2luZygpOwotCQkJfQotCi0JCQkvLyBOb3cgcmVzZXQgdGhlIGNoZWNrZWQgc3RhdGVzLCBkdWUgdG8gYnVnCi0JCQlzZXRDaGVja2VkRWxlbWVudHMoZXhwb3J0ZWQpOwotCi0JCQlpZiAoZW50cnlNaXNzaW5nKSB7Ci0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIAotCQkJCQkJSkVNVUlQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCi0JCQkJCQlJU3RhdHVzLldBUk5JTkcsCi0JCQkJCQlCZWFuSW5mb1VJTWVzc2FnZXMuQmVhbmluZm9QYXRoc0Jsb2NrX1VJX193YXJuaW5nX0VudHJ5TWlzc2luZywKLQkJCQkJCW51bGwpOyAKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCWluVXBkYXRlID0gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSB7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QmVhbmluZm9FbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0JCWlmKHRvcCE9bnVsbCAmJiAhdG9wLmlzRGlzcG9zZWQoKSkKLQkJCXVwZGF0ZUVuYWJsZWRTdGF0ZXMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlcygpIHsKLQkJdXBkYXRlQnV0dG9ucygpOwotCQl0YWJsZS5zZXRFbmFibGVkKGJlYW5pbmZvUGF0aHNCbG9jay5pc0JlYW5pbmZvRW5hYmxlZCgpKTsKLQkJbGFiZWwuc2V0RW5hYmxlZChiZWFuaW5mb1BhdGhzQmxvY2suaXNCZWFuaW5mb0VuYWJsZWQoKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9TdGF0dXNIZWxwZXIuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1N0YXR1c0hlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjIzNDQyLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1N0YXR1c0hlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5jb3JlLkpFTVVJUGx1Z2luOwotIAotCi1wdWJsaWMgY2xhc3MgU3RhdHVzSGVscGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgSVN0YXR1cyBPS19TVEFUVVMgPSBjcmVhdGVTdGF0dXMoSVN0YXR1cy5PSywgIiIpOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBJU3RhdHVzIEVSUk9SX1NUQVRVUyA9IGNyZWF0ZVN0YXR1cyhJU3RhdHVzLkVSUk9SLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgc3RhdHVzIHdpdGggdGhlIHByb3ZpZGVkIHNldmVyaXR5IGFuZCBtZXNzYWdlCi0JICogCi0JICogQHBhcmFtIHNldmVyaXR5Ci0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiBAcmV0dXJuCi0JICogCi0JICogQHNpbmNlIDEuMi4wCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNyZWF0ZVN0YXR1cyhpbnQgc2V2ZXJpdHksIFN0cmluZyBtZXNzYWdlKXsKLQkJcmV0dXJuIG5ldyBTdGF0dXMoc2V2ZXJpdHksIAotCQkJCUpFTVVJUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLCAKLQkJCQlzZXZlcml0eSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRmluZHMgdGhlIG1vc3Qgc2V2ZXJlIHN0YXR1cyBmcm9tIGEgYXJyYXkgb2Ygc3RhdGkuCi0JICogQW4gZXJyb3IgaXMgbW9yZSBzZXZlcmUgdGhhbiBhIHdhcm5pbmcsIGFuZCBhIHdhcm5pbmcgaXMgbW9yZSBzZXZlcmUKLQkgKiB0aGFuIG9rLgotCSAqIAotCSAqIEBwYXJhbSBzdGF0dXMKLQkgKiBAcmV0dXJuCi0JICogCi0JICogQHNpbmNlIDEuMi4wCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGdldE1vc3RTZXZlcmUoSVN0YXR1c1tdIHN0YXR1cykgewotCQlJU3RhdHVzIG1heD0gbnVsbDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IHN0YXR1cy5sZW5ndGg7IGkrKykgewotCQkJSVN0YXR1cyBjdXJyPSBzdGF0dXNbaV07Ci0JCQlpZiAoY3Vyci5tYXRjaGVzKElTdGF0dXMuRVJST1IpKSB7Ci0JCQkJcmV0dXJuIGN1cnI7Ci0JCQl9Ci0JCQlpZiAobWF4ID09IG51bGwgfHwgY3Vyci5nZXRTZXZlcml0eSgpID4gbWF4LmdldFNldmVyaXR5KCkpIHsKLQkJCQltYXg9IGN1cnI7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG1heDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1R5cGVkRWxlbWVudFNlbGVjdGlvblZhbGlkYXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvVHlwZWRFbGVtZW50U2VsZWN0aW9uVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZjMxN2MuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvVHlwZWRFbGVtZW50U2VsZWN0aW9uVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotCi0KLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yOwotIAotCi1wdWJsaWMgY2xhc3MgVHlwZWRFbGVtZW50U2VsZWN0aW9uVmFsaWRhdG9yIGltcGxlbWVudHMgSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvciB7Ci0KLQlwcml2YXRlIElTdGF0dXMgZmdFcnJvclN0YXR1cz0gU3RhdHVzSGVscGVyLkVSUk9SX1NUQVRVUzsgCi0JcHJpdmF0ZSBJU3RhdHVzIGZnT0tTdGF0dXM9IFN0YXR1c0hlbHBlci5PS19TVEFUVVM7Ci0KLQlwcml2YXRlIENsYXNzW10gZkFjY2VwdGVkVHlwZXM7Ci0JcHJpdmF0ZSBib29sZWFuIGZBbGxvd011bHRpcGxlU2VsZWN0aW9uOwotCXByaXZhdGUgQ29sbGVjdGlvbiBmUmVqZWN0ZWRFbGVtZW50czsKLQkKLQkvKioKLQkgKiBAcGFyYW0gYWNjZXB0ZWRUeXBlcyBUaGUgdHlwZXMgYWNjZXB0ZWQgYnkgdGhlIHZhbGlkYXRvcgotCSAqIEBwYXJhbSBhbGxvd011bHRpcGxlU2VsZWN0aW9uIElmIHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiwgdGhlIHZhbGlkYXRvcgotCSAqIGFsbG93cyBtdWx0aXBsZSBzZWxlY3Rpb24uCi0JICovCi0JcHVibGljIFR5cGVkRWxlbWVudFNlbGVjdGlvblZhbGlkYXRvcihDbGFzc1tdIGFjY2VwdGVkVHlwZXMsIGJvb2xlYW4gYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikgewotCQl0aGlzKGFjY2VwdGVkVHlwZXMsIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24sIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gYWNjZXB0ZWRUeXBlcyBUaGUgdHlwZXMgYWNjZXB0ZWQgYnkgdGhlIHZhbGlkYXRvcgotCSAqIEBwYXJhbSBhbGxvd011bHRpcGxlU2VsZWN0aW9uIElmIHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiwgdGhlIHZhbGlkYXRvcgotCSAqIGFsbG93cyBtdWx0aXBsZSBzZWxlY3Rpb24uCi0JICogQHBhcmFtIHJlamVjdGVkRWxlbWVudHMgQSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBhY2NlcHRlZAotCSAqLwotCXB1YmxpYyBUeXBlZEVsZW1lbnRTZWxlY3Rpb25WYWxpZGF0b3IoQ2xhc3NbXSBhY2NlcHRlZFR5cGVzLCBib29sZWFuIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24sIENvbGxlY3Rpb24gcmVqZWN0ZWRFbGVtZW50cykgewotCQlBc3NlcnQuaXNOb3ROdWxsKGFjY2VwdGVkVHlwZXMpOwotCQlmQWNjZXB0ZWRUeXBlcz0gYWNjZXB0ZWRUeXBlczsKLQkJZkFsbG93TXVsdGlwbGVTZWxlY3Rpb249IGFsbG93TXVsdGlwbGVTZWxlY3Rpb247Ci0JCWZSZWplY3RlZEVsZW1lbnRzPSByZWplY3RlZEVsZW1lbnRzOwotCX0JCi0JCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVNlbGVjdGlvblZhbGlkYXRvciNpc1ZhbGlkKGphdmEubGFuZy5PYmplY3QpCi0JICovCi0JcHVibGljIElTdGF0dXMgdmFsaWRhdGUoT2JqZWN0W10gZWxlbWVudHMpIHsKLQkJaWYgKGlzVmFsaWQoZWxlbWVudHMpKSB7Ci0JCQlyZXR1cm4gZmdPS1N0YXR1czsKLQkJfQotCQlyZXR1cm4gZmdFcnJvclN0YXR1czsKLQl9CQotCi0JcHJpdmF0ZSBib29sZWFuIGlzT2ZBY2NlcHRlZFR5cGUoT2JqZWN0IG8pIHsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGZBY2NlcHRlZFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoZkFjY2VwdGVkVHlwZXNbaV0uaXNJbnN0YW5jZShvKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzUmVqZWN0ZWRFbGVtZW50KE9iamVjdCBlbGVtKSB7Ci0JCXJldHVybiAoZlJlamVjdGVkRWxlbWVudHMgIT0gbnVsbCkgJiYgZlJlamVjdGVkRWxlbWVudHMuY29udGFpbnMoZWxlbSk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzU2VsZWN0ZWRWYWxpZChPYmplY3QgZWxlbSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzVmFsaWQoT2JqZWN0W10gc2VsZWN0aW9uKSB7Ci0JCWlmIChzZWxlY3Rpb24ubGVuZ3RoID09IDApIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKCFmQWxsb3dNdWx0aXBsZVNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoICE9IDEpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJZm9yIChpbnQgaT0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykgewotCQkJT2JqZWN0IG89IHNlbGVjdGlvbltpXTsJCi0JCQlpZiAoIWlzT2ZBY2NlcHRlZFR5cGUobykgfHwgaXNSZWplY3RlZEVsZW1lbnQobykgfHwgIWlzU2VsZWN0ZWRWYWxpZChvKSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9UeXBlZFZpZXdlckZpbHRlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvVHlwZWRWaWV3ZXJGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiMTQwNi4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9UeXBlZFZpZXdlckZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci0gCi0KLXB1YmxpYyBjbGFzcyBUeXBlZFZpZXdlckZpbHRlciBleHRlbmRzIFZpZXdlckZpbHRlciB7Ci0JcHJpdmF0ZSBDbGFzc1tdIGFjY2VwdGVkQ2xhc3NlczsKLQlwcml2YXRlIE9iamVjdFtdIHJlamVjdGVkRnJhZ21lbnRzOwotCQotCXB1YmxpYyBUeXBlZFZpZXdlckZpbHRlcihDbGFzc1tdIGFjY2VwdGVkQ2xhc3NlcywgT2JqZWN0W10gcmVqZWN0ZWRGcmFnbWVudHMpIHsKLQkJdGhpcy5hY2NlcHRlZENsYXNzZXMgPSBhY2NlcHRlZENsYXNzZXM7Ci0JCXRoaXMucmVqZWN0ZWRGcmFnbWVudHMgPSByZWplY3RlZEZyYWdtZW50czsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzZWxlY3QoVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudEVsZW1lbnQsIE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChyZWplY3RlZEZyYWdtZW50cyAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpPSAwOyBpIDwgcmVqZWN0ZWRGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoZWxlbWVudC5lcXVhbHMocmVqZWN0ZWRGcmFnbWVudHNbaV0pKSB7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IGFjY2VwdGVkQ2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKGFjY2VwdGVkQ2xhc3Nlc1tpXS5pc0luc3RhbmNlKGVsZW1lbnQpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1ZhcmlhYmxlU2VsZWN0aW9uQmxvY2suamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL1ZhcmlhYmxlU2VsZWN0aW9uQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE0N2I5NC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9iZWFuaW5mb3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC9iZWFuaW5mby91aS9WYXJpYWJsZVNlbGVjdGlvbkJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLkJ1aWxkUGF0aERpYWxvZ0FjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0vKgotCi0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFyaWFibGVTZWxlY3Rpb25CbG9jayB7Ci0JCi0JCi0JcHJpdmF0ZSBMaXN0IGZFeGlzdGluZ1BhdGhzOwotCQotCXByaXZhdGUgTGFiZWwgdmFyaWFibGVGaWVsZExhYmVsOwotCXByaXZhdGUgVGV4dCB2YXJpYWJsZUZpZWxkVGV4dDsKLQlwcml2YXRlIEJ1dHRvbiB2YXJpYWJsZUZpZWxkQnV0dG9uOwotCXByaXZhdGUgU3RyaW5nIHZhcmlhYmxlRmllbGRUZXh0Q29udGVudDsKLQkKLQlwcml2YXRlIExhYmVsIGV4dGVuc2lvbkZpZWxkTGFiZWw7Ci0JcHJpdmF0ZSBUZXh0IGV4dGVuc2lvbkZpZWxkVGV4dDsKLQlwcml2YXRlIEJ1dHRvbiBleHRlbnNpb25GaWVsZEJ1dHRvbjsKLQlwcml2YXRlIFN0cmluZyBleHRlbnNpb25GaWVsZFRleHRDb250ZW50OwotCQotCXByaXZhdGUgQ0xhYmVsIGZGdWxsUGF0aDsKLQkKLQlwcml2YXRlIElTdGF0dXMgZlZhcmlhYmxlU3RhdHVzOwotCXByaXZhdGUgSVN0YXR1cyBmRXhpc3RzU3RhdHVzOwotCXByaXZhdGUgSVN0YXR1cyBmRXh0ZW5zaW9uU3RhdHVzOwotCQotCXByaXZhdGUgU3RyaW5nIGZWYXJpYWJsZTsKLQlwcml2YXRlIElTdGF0dXNDaGFuZ2VMaXN0ZW5lciBmQ29udGV4dDsKLQkKLQlwcml2YXRlIGJvb2xlYW4gZklzRW1wdHlBbGxvd2VkOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBWYXJpYWJsZVNlbGVjdGlvbkJsb2NrCi0JICovCi0JcHVibGljIFZhcmlhYmxlU2VsZWN0aW9uQmxvY2soSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGNvbnRleHQsIExpc3QgZXhpc3RpbmdQYXRocywgSVBhdGggdmFyUGF0aCwgU3RyaW5nIGxhc3RWYXJTZWxlY3Rpb24sIGJvb2xlYW4gZW1wdHlBbGxvd2VkKSB7CQotCQlmQ29udGV4dD0gY29udGV4dDsKLQkJZkV4aXN0aW5nUGF0aHM9IGV4aXN0aW5nUGF0aHM7Ci0JCWZJc0VtcHR5QWxsb3dlZD0gZW1wdHlBbGxvd2VkOwotCQlmRXhpc3RzU3RhdHVzPSBTdGF0dXNIZWxwZXIuT0tfU1RBVFVTOwotCQkKLQkJLy9WYXJpYWJsZVNlbGVjdGlvbkFkYXB0ZXIgYWRhcHRlcj0gbmV3IFZhcmlhYmxlU2VsZWN0aW9uQWRhcHRlcigpOwotCi0JCWlmICh2YXJQYXRoICE9IG51bGwpIHsKLQkJCXZhcmlhYmxlRmllbGRUZXh0Q29udGVudCA9IHZhclBhdGguc2VnbWVudCgwKTsKLQkJCWV4dGVuc2lvbkZpZWxkVGV4dENvbnRlbnQgPSB2YXJQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoMSkudG9TdHJpbmcoKTsKLQkJfSBlbHNlIHsKLQkJCXZhcmlhYmxlRmllbGRUZXh0Q29udGVudCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlleHRlbnNpb25GaWVsZFRleHRDb250ZW50ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQl1cGRhdGVGdWxsVGV4dEZpZWxkKCk7Ci0JCWZWYXJpYWJsZVN0YXR1cz0gdmFyaWFibGVVcGRhdGVkKCk7Ci0JCWZFeHRlbnNpb25TdGF0dXM9ZXh0ZW5zaW9uVXBkYXRlZCgpOwotCX0KLQkKLQlwdWJsaWMgSVBhdGggZ2V0VmFyaWFibGVQYXRoKCkgewotCQlpZiAoZlZhcmlhYmxlICE9IG51bGwpIHsKLQkJCXJldHVybiBuZXcgUGF0aChmVmFyaWFibGUpLmFwcGVuZChleHRlbnNpb25GaWVsZFRleHRDb250ZW50KTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIElQYXRoIGdldFJlc29sdmVkUGF0aCgpIHsKLQkJaWYgKGZWYXJpYWJsZSAhPSBudWxsKSB7Ci0JCQlJUGF0aCBlbnRyeVBhdGg9IEphdmFDb3JlLmdldENsYXNzcGF0aFZhcmlhYmxlKGZWYXJpYWJsZSk7Ci0JCQlpZiAoZW50cnlQYXRoICE9IG51bGwpIHsKLQkJCQlyZXR1cm4gZW50cnlQYXRoLmFwcGVuZChleHRlbnNpb25GaWVsZFRleHRDb250ZW50KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9CQotCQkJCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoRGlzcGxheSBkaXNwbGF5KSB7Ci0JCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCXZhcmlhYmxlRmllbGRUZXh0LnNldEZvY3VzKCk7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCQotCXB1YmxpYyBDb250cm9sIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgaW5uZXI9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWlubmVyLnNldExheW91dChuZXcgR3JpZExheW91dCgzLCBmYWxzZSkpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQlpbm5lci5zZXRMYXlvdXREYXRhKGdkKTsKLQkJCi0JCXZhcmlhYmxlRmllbGRMYWJlbCA9IG5ldyBMYWJlbChpbm5lciwgU1dULk5PTkUpOwotCQl2YXJpYWJsZUZpZWxkTGFiZWwuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja192YXJpYWJsZV9sYWJlbCk7Ci0JCXZhcmlhYmxlRmllbGRMYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKLQkJdmFyaWFibGVGaWVsZFRleHQgPSBuZXcgVGV4dChpbm5lciwgU1dULkJPUkRFUnxTV1QuU0lOR0xFKTsKLQkJdmFyaWFibGVGaWVsZFRleHQuc2V0VGV4dCh2YXJpYWJsZUZpZWxkVGV4dENvbnRlbnQpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZC53aWR0aEhpbnQgPSAyMDA7Ci0JCXZhcmlhYmxlRmllbGRUZXh0LnNldExheW91dERhdGEoZ2QpOwotCQl2YXJpYWJsZUZpZWxkVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJCXZhcmlhYmxlRmllbGRUZXh0Q29udGVudCA9IHZhcmlhYmxlRmllbGRUZXh0LmdldFRleHQoKTsKLQkJCQlmVmFyaWFibGVTdGF0dXMgPSB2YXJpYWJsZVVwZGF0ZWQoKTsKLQkJCQlmRXhpc3RzU3RhdHVzPSBnZXRFeGlzdHNTdGF0dXMoKTsKLQkJCQl1cGRhdGVGdWxsVGV4dEZpZWxkKCk7Ci0JCQkJZkNvbnRleHQuc3RhdHVzQ2hhbmdlZChTdGF0dXNIZWxwZXIuZ2V0TW9zdFNldmVyZShuZXcgSVN0YXR1c1tdIHsgZlZhcmlhYmxlU3RhdHVzLCBmRXh0ZW5zaW9uU3RhdHVzLCBmRXhpc3RzU3RhdHVzIH0pKTsKLQkJCX0KLQkJfSk7Ci0JCXZhcmlhYmxlRmllbGRCdXR0b24gPSBuZXcgQnV0dG9uKGlubmVyLCBTV1QuUFVTSCk7Ci0JCXZhcmlhYmxlRmllbGRCdXR0b24uc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja192YXJpYWJsZV9idXR0b24pOwotCQl2YXJpYWJsZUZpZWxkQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOwotCQl2YXJpYWJsZUZpZWxkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJU3RyaW5nIHZhcmlhYmxlPSBjaG9vc2VWYXJpYWJsZSgpOwotCQkJCWlmICh2YXJpYWJsZSAhPSBudWxsKSB7Ci0JCQkJCXZhcmlhYmxlRmllbGRUZXh0LnNldFRleHQodmFyaWFibGUpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCQotCQlleHRlbnNpb25GaWVsZExhYmVsID0gbmV3IExhYmVsKGlubmVyLCBTV1QuTk9ORSk7Ci0JCWV4dGVuc2lvbkZpZWxkTGFiZWwuc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja19leHRlbnNpb25fbGFiZWwpOwotCQlleHRlbnNpb25GaWVsZExhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOwotCQlleHRlbnNpb25GaWVsZFRleHQgPSBuZXcgVGV4dChpbm5lciwgU1dULkJPUkRFUnxTV1QuU0lOR0xFKTsKLQkJZXh0ZW5zaW9uRmllbGRUZXh0LnNldFRleHQodmFyaWFibGVGaWVsZFRleHRDb250ZW50KTsKLQkJZXh0ZW5zaW9uRmllbGRUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCQlleHRlbnNpb25GaWVsZFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCQlleHRlbnNpb25GaWVsZFRleHRDb250ZW50ID0gZXh0ZW5zaW9uRmllbGRUZXh0LmdldFRleHQoKTsKLQkJCQlmRXh0ZW5zaW9uU3RhdHVzPSBleHRlbnNpb25VcGRhdGVkKCk7Ci0JCQkJZkV4aXN0c1N0YXR1cz0gZ2V0RXhpc3RzU3RhdHVzKCk7Ci0JCQkJdXBkYXRlRnVsbFRleHRGaWVsZCgpOwotCQkJCWZDb250ZXh0LnN0YXR1c0NoYW5nZWQoU3RhdHVzSGVscGVyLmdldE1vc3RTZXZlcmUobmV3IElTdGF0dXNbXSB7IGZWYXJpYWJsZVN0YXR1cywgZkV4dGVuc2lvblN0YXR1cywgZkV4aXN0c1N0YXR1cyB9KSk7Ci0JCQl9Ci0JCX0pOwotCQlleHRlbnNpb25GaWVsZEJ1dHRvbiA9IG5ldyBCdXR0b24oaW5uZXIsIFNXVC5QVVNIKTsKLQkJZXh0ZW5zaW9uRmllbGRCdXR0b24uc2V0VGV4dChCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja19leHRlbnNpb25fYnV0dG9uKTsKLQkJZXh0ZW5zaW9uRmllbGRCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0JCWV4dGVuc2lvbkZpZWxkQnV0dG9uLnNldEVuYWJsZWQoZlZhcmlhYmxlIT1udWxsKTsKLQkJZXh0ZW5zaW9uRmllbGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlJUGF0aCBmaWxlUGF0aD0gY2hvb3NlRXh0SmFyKCk7Ci0JCQkJaWYgKGZpbGVQYXRoICE9IG51bGwpIHsKLQkJCQkJZXh0ZW5zaW9uRmllbGRUZXh0LnNldFRleHQoZmlsZVBhdGgudG9TdHJpbmcoKSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJCi0JCUxhYmVsIGxhYmVsPSBuZXcgTGFiZWwoaW5uZXIsIFNXVC5MRUZUKTsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0JCWxhYmVsLnNldFRleHQoQmVhbkluZm9VSU1lc3NhZ2VzLlZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfZnVsbHBhdGhfbGFiZWwpOyAKLQkJCi0JCWZGdWxsUGF0aD0gbmV3IENMYWJlbChpbm5lciwgU1dULk5PTkUpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotCQlnZC5ob3Jpem9udGFsU3Bhbj0yOwotCQlmRnVsbFBhdGguc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQotCQl1cGRhdGVGdWxsVGV4dEZpZWxkKCk7Ci0JCQotCQlzZXRGb2N1cyhwYXJlbnQuZ2V0RGlzcGxheSgpKTsKLQkJCi0JCXJldHVybiBpbm5lcjsKLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgdmFyaWFibGVVcGRhdGVkKCkgewotCQlmVmFyaWFibGU9IG51bGw7Ci0JCQotCQlJU3RhdHVzIHN0YXR1cz0gU3RhdHVzSGVscGVyLk9LX1NUQVRVUzsKLQkJCi0JCVN0cmluZyBuYW1lID0gdmFyaWFibGVGaWVsZFRleHRDb250ZW50OwotCQlpZiAobmFtZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlpZiAoIWZJc0VtcHR5QWxsb3dlZCkgewotCQkJCXN0YXR1cyA9IFN0YXR1c0hlbHBlci5jcmVhdGVTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQmVhbkluZm9VSU1lc3NhZ2VzLlZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfZXJyb3JfZW50ZXJuYW1lX0VSUk9SXyk7IAotCQkJfSBlbHNlIHsKLQkJCQlmVmFyaWFibGU9ICIiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0gZWxzZSBpZiAoSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoVmFyaWFibGUobmFtZSkgPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzSGVscGVyLmNyZWF0ZVN0YXR1cyhJU3RhdHVzLkVSUk9SLCBCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja19lcnJvcl9uYW1lbm90ZXhpc3RzX0VSUk9SXyk7IAotCQl9IGVsc2UgewotCQkJZlZhcmlhYmxlPSBuYW1lOwotCQl9Ci0JCWlmKGV4dGVuc2lvbkZpZWxkQnV0dG9uIT1udWxsKQotCQkJZXh0ZW5zaW9uRmllbGRCdXR0b24uc2V0RW5hYmxlZChmVmFyaWFibGUgIT0gbnVsbCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotCXByaXZhdGUgSVN0YXR1cyBleHRlbnNpb25VcGRhdGVkKCkgewotCQlJU3RhdHVzIHN0YXR1cz0gU3RhdHVzSGVscGVyLk9LX1NUQVRVUzsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IGV4dGVuc2lvbkZpZWxkVGV4dENvbnRlbnQ7Ci0JCWlmIChleHRlbnNpb24ubGVuZ3RoKCkgPiAwICYmICFQYXRoLlJPT1QuaXNWYWxpZFBhdGgoZXh0ZW5zaW9uKSkgewotCQkJc3RhdHVzID0gU3RhdHVzSGVscGVyLmNyZWF0ZVN0YXR1cyhJU3RhdHVzLkVSUk9SLCBCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja19lcnJvcl9pbnZhbGlkZXh0ZW5zaW9uX0VSUk9SXyk7IAotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQkKLQlwcml2YXRlIElTdGF0dXMgZ2V0RXhpc3RzU3RhdHVzKCkgewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c0hlbHBlci5PS19TVEFUVVM7Ci0JCUlQYXRoIHBhdGg9IGdldFJlc29sdmVkUGF0aCgpOwotCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQlpZiAoZmluZFBhdGgocGF0aCkpIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNIZWxwZXIuY3JlYXRlU3RhdHVzKElTdGF0dXMuRVJST1IsICBCZWFuSW5mb1VJTWVzc2FnZXMuVmFyaWFibGVTZWxlY3Rpb25CbG9ja19lcnJvcl9wYXRoZXhpc3RzX0VSUk9SXyk7IAotCQkJfSBlbHNlIGlmICghcGF0aC50b0ZpbGUoKS5pc0ZpbGUoKSkgewotCQkJCXN0YXR1cyA9IFN0YXR1c0hlbHBlci5jcmVhdGVTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCAgQmVhbkluZm9VSU1lc3NhZ2VzLlZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfd2FybmluZ19wYXRobm90ZXhpc3RzX1dBUk5fKTsgCi0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNIZWxwZXIuY3JlYXRlU3RhdHVzKElTdGF0dXMuV0FSTklORywgIEJlYW5JbmZvVUlNZXNzYWdlcy5WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX3dhcm5pbmdfcGF0aG5vdGV4aXN0c19XQVJOXyk7IAotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBmaW5kUGF0aChJUGF0aCBwYXRoKSB7Ci0JCWZvciAoaW50IGk9IGZFeGlzdGluZ1BhdGhzLnNpemUoKSAtMTsgaSA+PTA7IGktLSkgewotCQkJSVBhdGggY3Vycj0gKElQYXRoKSBmRXhpc3RpbmdQYXRocy5nZXQoaSk7Ci0JCQlpZiAoY3Vyci5lcXVhbHMocGF0aCkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQkKLQotCXByaXZhdGUgdm9pZCB1cGRhdGVGdWxsVGV4dEZpZWxkKCkgewotCQlpZiAoZkZ1bGxQYXRoICE9IG51bGwgJiYgIWZGdWxsUGF0aC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCUlQYXRoIHJlc29sdmVkUGF0aD0gZ2V0UmVzb2x2ZWRQYXRoKCk7Ci0JCQlpZiAocmVzb2x2ZWRQYXRoICE9IG51bGwpIHsKLQkJCQlmRnVsbFBhdGguc2V0VGV4dChyZXNvbHZlZFBhdGgudG9PU1N0cmluZygpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZkZ1bGxQYXRoLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJaWYgKGZGdWxsUGF0aCAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gZkZ1bGxQYXRoLmdldFNoZWxsKCk7Ci0JCX0KLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQl9CQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0FyY2hpdmVQYXRoKElQYXRoIHBhdGgpewotCQlmaW5hbCBTdHJpbmdbXSBhcmNoaXZlRXh0ZW5zaW9ucyA9IHsiamFyIiwgInppcCJ9OyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJU3RyaW5nIGV4dD0gcGF0aC5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCWlmIChleHQgIT0gbnVsbCAmJiBleHQubGVuZ3RoKCkgIT0gMCkgewotCQkJZm9yIChpbnQgaT0gMDsgaSA8IGFyY2hpdmVFeHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKGV4dC5lcXVhbHNJZ25vcmVDYXNlKGFyY2hpdmVFeHRlbnNpb25zW2ldKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIElQYXRoIGNob29zZUV4dEphcigpIHsKLQkJU3RyaW5nIGxhc3RVc2VkUGF0aD0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJSVBhdGggZW50cnlQYXRoPSBnZXRSZXNvbHZlZFBhdGgoKTsKLQkJaWYgKGVudHJ5UGF0aCAhPSBudWxsKSB7Ci0JCQlpZiAoaXNBcmNoaXZlUGF0aChlbnRyeVBhdGgpKSB7Ci0JCQkJbGFzdFVzZWRQYXRoPSBlbnRyeVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLnRvT1NTdHJpbmcoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbGFzdFVzZWRQYXRoPSBlbnRyeVBhdGgudG9PU1N0cmluZygpOwotCQkJfQotCQl9Ci0JCQotCQlGaWxlRGlhbG9nIGRpYWxvZz0gbmV3IEZpbGVEaWFsb2coZ2V0U2hlbGwoKSwgU1dULlNJTkdMRSk7Ci0JCWRpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKG5ldyBTdHJpbmdbXSB7IiouamFyOyouemlwIn0pOyAvLyROT04tTkxTLTEkCi0JCWRpYWxvZy5zZXRGaWx0ZXJQYXRoKGxhc3RVc2VkUGF0aCk7Ci0JCWRpYWxvZy5zZXRUZXh0KEJlYW5JbmZvVUlNZXNzYWdlcy5WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX0V4dEphckRpYWxvZ190aXRsZSk7IAotCQlTdHJpbmcgcmVzPSBkaWFsb2cub3BlbigpOwotCQlpZiAocmVzID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCUlQYXRoIHJlc1BhdGg9IG5ldyBQYXRoKHJlcykubWFrZUFic29sdXRlKCk7Ci0JCUlQYXRoIHZhclBhdGg9IEphdmFDb3JlLmdldENsYXNzcGF0aFZhcmlhYmxlKGZWYXJpYWJsZSk7Ci0JCQotCQlpZiAoIXZhclBhdGguaXNQcmVmaXhPZihyZXNQYXRoKSkgewotCQkJcmV0dXJuIG5ldyBQYXRoKHJlc1BhdGgubGFzdFNlZ21lbnQoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gcmVzUGF0aC5yZW1vdmVGaXJzdFNlZ21lbnRzKHZhclBhdGguc2VnbWVudENvdW50KCkpLnNldERldmljZShudWxsKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGNob29zZVZhcmlhYmxlKCkgewotCQlJUGF0aFtdIHZhclBhdGhzID0gQnVpbGRQYXRoRGlhbG9nQWNjZXNzLmNob29zZVZhcmlhYmxlRW50cmllcyh2YXJpYWJsZUZpZWxkQnV0dG9uLmdldFNoZWxsKCksIG5ldyBJUGF0aFswXSk7Ci0JCVN0cmluZyB2YXJpYWJsZSA9IG51bGw7Ci0JCWlmKHZhclBhdGhzIT1udWxsICYmIHZhclBhdGhzLmxlbmd0aD4wKXsKLQkJCXZhcmlhYmxlID0gdmFyUGF0aHNbMF0udG9TdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gdmFyaWFibGU7Ci0JfQotCQkKLQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvbWVzc2FnZXMucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2JlYW5pbmZvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL2JlYW5pbmZvL3VpL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YWUxN2QuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAkU291cmNlOiAvY3Zzcm9vdC93ZWJ0b29scy9qZWV0b29scy5tb3ZlL3dlYnRvb2xzLmphdmFlZS5naXQvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvYmVhbmluZm91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvYmVhbmluZm8vdWkvQXR0aWMvbWVzc2FnZXMucHJvcGVydGllcyx2ICQKLSMgJFJldmlzaW9uOiAxLjYgJCAgJERhdGU6IDIwMDUvMTIvMTQgMTk6MDY6MTMgJAotIwotCi0KLVNlYXJjaFBhdGhEaWFsb2dfQ2hvb3NlUGFja2FnZXMgICAgICAgICAgICAgICAgICAgICAgICAgPSAmQ2hvb3NlIFBhY2thZ2VzCi1TZWFyY2hQYXRoRGlhbG9nX1JlbW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJlJlbW92ZQotU2VhcmNoUGF0aERpYWxvZ19EZXNjX0xhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZNb2RpZnkgc2VhcmNoIHBhdGggb2YgcGFja2FnZXMgd2l0aGluIHRoaXMgQmVhbkluZm8gY2xhc3NlcyBKQVIvZm9sZGVyCi1TZWFyY2hQYXRoRGlhbG9nX01vZGlmeVNlYXJjaFBhdGhzICAgICAgICAgICAgICAgICAgICAgID0gTW9kaWZ5IFNlYXJjaCBQYXRocyAtIHswfQotU2VhcmNoUGF0aERpYWxvZ19Ob3RFZGl0YWJsZV9JTkZPXyAgICAgICAgICAgICAgICAgICAgICA9IElXQVYwMDc1SSBQbHVnaW4gdHlwZSBCZWFuSW5mbyBjbGFzc2VzIGxvY2F0aW9ucyBhcmUgbm90IGVkaXRhYmxlCi1TZWFyY2hQYXRoRGlhbG9nX1BhY2thZ2VQcmVzZW50X0lORk9fICAgICAgICAgICAgICAgICAgID0gSVdBVjAwNzZJIFBhY2thZ2UgYWxyZWFkeSBpbiB0aGUgc2VhcmNoIHBhdGgKLVNlYXJjaFBhdGhEaWFsb2dfSW5wdXREaWFsb2dfVGl0bGUgICAgICAgICAgICAgICAgICAgICAgPSBQYWNrYWdlCi1TZWFyY2hQYXRoRGlhbG9nX0lucHV0RGlhbG9nX01lc3NhZ2UgICAgICAgICAgICAgICAgICAgID0gJkVudGVyIGEgcGFja2FnZToKLUJlYW5JbmZvUGF0aHNCbG9ja19FeHBvcnRBbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBFJnhwb3J0IGFsbAotQmVhbkluZm9QYXRoc0Jsb2NrX1VuZXhwb3J0QWxsICAgICAgICAgICAgICAgICAgICAgICAgICA9IFUmbmV4cG9ydCBhbGwKLUJlYW5JbmZvUGF0aHNCbG9ja19QYWdlX1RhYl9QYWNrYWdlcyAgICAgICAgICAgICAgICAgICAgPSAmUGFja2FnZXMKLUJlYW5JbmZvUGF0aHNCbG9ja19QYWdlX1RhYl9DbGFzc2VzICAgICAgICAgICAgICAgICAgICAgPSAmQmVhbkluZm8gY2xhc3NlcwotQmVhbkluZm9zV29ya2Jvb2tQYWdlX0FkZEZvbGRlcnMgICAgICAgICAgICAgICAgICAgICAgICA9ICZBZGQgRm9sZGVycwotQmVhbkluZm9zV29ya2Jvb2tQYWdlX0FkZEpBUnMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEFkZCAmSkFScwotQmVhbkluZm9zV29ya2Jvb2tQYWdlX0FkZEV4dGVybmFsSkFSICAgICAgICAgICAgICAgICAgICA9IEFkZCBFJnh0ZXJuYWwgSkFScwotQmVhbkluZm9zV29ya2Jvb2tQYWdlX0FkZFZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICA9IEFkZCAmVmFyaWFibGUKLUJlYW5JbmZvc1dvcmtib29rUGFnZV9BZGRQcm9qZWN0cyAgICAgICAgICAgICAgICAgICAgICAgPSBBZGQgUHJvamVjJnRzCi1CZWFuSW5mb3NXb3JrYm9va1BhZ2VfTW9kaWZ5UGF0aHMgICAgICAgICAgICAgICAgICAgICAgID0gJk1vZGlmeSBQYXRocwotQmVhbkluZm9zV29ya2Jvb2tQYWdlX1JlbW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZSZW1vdmUKLUJlYW5JbmZvc1dvcmtib29rUGFnZV9MaXN0X1RleHQgICAgICAgICAgICAgICAgICAgICAgICAgPSAmQ2hvb3NlIGxvY2F0aW9ucyBvZiBCZWFuSW5mbyBjbGFzc2VzIChCZWFuSW5mbyBjbGFzc2VzIGxvY2F0aW9ucyBub3QgaW4gY3VycmVudCBwcm9qZWN0KQotQmVhbkluZm9zV29ya2Jvb2tQYWdlX1NlbGVjdGlvbkRpYWxvZ19DbGFzc2VzX1RpdGxlICAgICA9IEJlYW5JbmZvIENsYXNzIEZvbGRlcnMgU2VsZWN0aW9uCi1CZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX0pBUnNfVGl0bGUgICAgICAgID0gSkFSIFNlbGVjdGlvbgotQmVhbkluZm9zV29ya2Jvb2tQYWdlX1NlbGVjdGlvbkRpYWxvZ19KQVJzX01lc3NhZ2UgICAgICA9ICZDaG9vc2UgSkFScyB0byBiZSBhZGRlZCBhcyBCZWFuSW5mbyBjbGFzc2VzIEpBUnMKLUJlYW5JbmZvc1dvcmtib29rUGFnZV9TZWxlY3Rpb25EaWFsb2dfRXh0SkFSc19UZXh0ICAgICAgPSBKQVIgU2VsZWN0aW9uCi1CZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX1Byb2plY3RzX1RpdGxlICAgID0gQmVhbkluZm8gUHJvamVjdHMgU2VsZWN0aW9uCi1CZWFuSW5mb3NXb3JrYm9va1BhZ2VfU2VsZWN0aW9uRGlhbG9nX0NsYXNzZXNfUHJvbXB0ICAgID0gJkNob29zZSBmb2xkZXJzIHRvIGJlIGFkZGVkIGFzIEJlYW5JbmZvIGNsYXNzZXMgZm9sZGVycy4KLUJlYW5JbmZvc1dvcmtib29rUGFnZV9TZWxlY3Rpb25EaWFsb2dfUHJvamVjdHNfUHJvbXB0ICAgPSAmQ2hvb3NlIHByb2plY3RzIHRvIGJlIGFkZGVkIGFzIEJlYW5JbmZvIHByb2plY3RzLgotUGFja2FnZXNXb3JrYm9va19DaG9vc2VQYWNrYWdlcyAgICAgICAgICAgICAgICAgICAgICAgICA9ICZDaG9vc2UgcGFja2FnZXMKLVBhY2thZ2VzV29ya2Jvb2tfQ2hvb3NlRGVmaW5lZFBhdGhzICAgICAgICAgICAgICAgICAgICAgPSBDaG9vc2UgJmRlZmluZWQgcGF0aHMKLVBhY2thZ2VzV29ya2Jvb2tfUmVtb3ZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmUmVtb3ZlCi1QYWNrYWdlc1dvcmtib29rX0xhYmVsVGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQ2hvb3NlIEJlYW5JbmZvICZwYWNrYWdlcyBmcm9tIHRoZSBjbGFzcyBwYXRoCi1QYWNrYWdlc1dvcmtib29rX1NlbGVjdGlvbkRpYWxvZ19EZWZpbmVkUGF0aHNfVGl0bGUgICAgID0gQ2hvb3NlIERlZmluZWQgUGF0aHMKLVBhY2thZ2VzV29ya2Jvb2tfU2VsZWN0aW9uRGlhbG9nX0RlZmluZWRQYXRoc19NZXNzYWdlICAgPSBDaG9vc2UgdGhlIHByZS1kZWZpbmVkIHBhdGhzIHRvIGFkZCB0byB0aGUgc2VhcmNoIHBhdGgKLUxhYmVsUHJvdmlkZXJfTGlicmFyeV9Gb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB7MH0gKGNsYXNzIGZvbGRlcikKLUxhYmVsUHJvdmlkZXJfTGlicmFyeV9fUGF0aExhc3RTZWdtZW50X1BhdGhSZWxhdGl2ZV8gICAgPSB7MH0gLSB7MX0KLUxhYmVsUHJvdmlkZXJfTGlicmFyeV9fUGF0aExhc3RTZWdtZW50X1BhdGhFeGNlcHRMYXN0XyAgPSB7MH0gLSB7MX0KLUxhYmVsUHJvdmlkZXJfVmFyaWFibGVfX25hbWVfUGF0aE9TU3RyaW5nXyAgICAgICAgICAgICAgPSB7MH0gLSB7MX0KLUxhYmVsUHJvdmlkZXJfX3BhY2thZ2VOYW1lX1BhdGhfICAgICAgICAgICAgICAgICAgICAgICAgPSB7MH06IHsxfQotCi1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX3ZhcmlhYmxlX2xhYmVsICAgICAgICAgICAgICAgICAgID0gJlZhcmlhYmxlIE5hbWU6Ci1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX3ZhcmlhYmxlX2J1dHRvbiAgICAgICAgICAgICAgICAgID0gJkJyb3dzZS4uLgotVmFyaWFibGVTZWxlY3Rpb25CbG9ja19leHRlbnNpb25fbGFiZWwgICAgICAgICAgICAgICAgICA9IFBhdGggRSZ4dGVuc2lvbjoKLVZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfZXh0ZW5zaW9uX2J1dHRvbiAgICAgICAgICAgICAgICAgPSBCcm8md3NlLi4uCi1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX2Z1bGxwYXRoX2xhYmVsICAgICAgICAgICAgICAgICAgID0gUmVzb2x2ZWQgUGF0aDoKLQotVmFyaWFibGVTZWxlY3Rpb25CbG9ja19lcnJvcl9lbnRlcm5hbWVfRVJST1JfICAgICAgICAgICA9IElXQVYwMDc3RSBWYXJpYWJsZSBuYW1lIG11c3QgYmUgZW50ZXJlZC4KLVZhcmlhYmxlU2VsZWN0aW9uQmxvY2tfZXJyb3JfbmFtZW5vdGV4aXN0c19FUlJPUl8gICAgICAgPSBJV0FWMDA3OEUgVmFyaWFibGUgZG9lcyBub3QgZXhpc3QuCi1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX2Vycm9yX3BhdGhleGlzdHNfRVJST1JfICAgICAgICAgID0gSVdBVjAwNzlFIENsYXNzIHBhdGggZW50cnkgYWxyZWFkeSBleGlzdHMuCi1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX2Vycm9yX2ludmFsaWRleHRlbnNpb25fRVJST1JfICAgID0gSVdBVjAwODBFIEV4dGVuc2lvbiBpcyBub3QgYSB2YWxpZCBwYXRoLgotCi1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX3dhcm5pbmdfcGF0aG5vdGV4aXN0c19XQVJOXyAgICAgID0gSVdBVjAwODFXIFJlc29sdmVkIHBhdGggaXMgbm90IGFuIGV4aXN0aW5nIEpBUiBmaWxlLgotCi1WYXJpYWJsZVNlbGVjdGlvbkJsb2NrX0V4dEphckRpYWxvZ190aXRsZSAgICAgICAgICAgICAgID0gSkFSIFNlbGVjdGlvbgotCi0KLQotCi0jCi0jIFByb3BlcnRpZXMgZm9yIHRoZSBjb20uaWJtLmV0b29scy5iZWFuaW5mby51aSBwbHVnaW4KLSMKLQotIyBUaGlzIHNob3dzIHVwIGFzIHRoZSB0aXRsZSBvZiBhIG1lc3NhZ2UgZGlhbG9nCi1CZWFuaW5mb19VSV9fZXJyb3J0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRXJyb3IKLQotQmVhbmluZm9fVUlfX2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEVycm9yIHdoaWxlIHNldHRpbmcgQmVhbkluZm8gY29uZmlndXJhdGlvbi4KLQotQmVhbmluZm9Qcm9wZXJ0aWVzUGFnZV9JTkZPX19ub2phdmFwcm9qZWN0ICAgICAgICAgICAgICA9IElXQVYwMDE5SSBCZWFuSW5mbyBpcyBvbmx5IGFwcGxpY2FibGUgdG8gSmF2YSBwcm9qZWN0cy4KLUJlYW5pbmZvUHJvcGVydGllc1BhZ2VfSU5GT19fY2xvc2VkcHJvamVjdCAgICAgICAgICAgICAgPSBJV0FWMDAyMEkgQmVhbkluZm8gaXMgbm90IGF2YWlsYWJsZSBmb3IgYSBjbG9zZWQgcHJvamVjdC4KLQotIyBUaGlzIGlzIGEgY2hlY2tib3ggb24gYSBwcmVmZXJlbmNlIHBhZ2UuIFRoZSBsYWJlbCBpcyB0byBpbmRpY2F0ZSB3aGV0aGVyIGludHJvc3BlY3Rpb24gaXMgZW5hYmxlZCB0byBydW4gb3Igbm90LgotQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19lbmFibGViZWFuaW5mbyAgICAgICAgICAgICAgICAgICA9ICZFbmFibGUgQmVhbkluZm8gSW50cm9zcGVjdGlvbiBvbiB0aGlzIFByb2plY3QKLQotIyBUaGlzIGlzIGEgaGVhZGVyIGxpbmUgZm9yIGEgcGFnZSBvZiBwcmVmZXJlbmNlcy4KLUJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF9sYWJlbCAgICAgICAgICAgICAgICAgPSBCdWlsZCBCZWFuSW5mbyAmc2VhcmNoIHBhdGggb3JkZXIgYW5kIGV4cG9ydGVkIGVudHJpZXM6XG4oRXhwb3J0ZWQgZW50cmllcyBhcmUgY29udHJpYnV0ZWQgdG8gZGVwZW5kZW50IHByb2plY3RzKQotQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZWFyY2hwYXRoX3VwX2J1dHRvbiAgICAgICAgICAgICA9ICZVcAotQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZWFyY2hwYXRoX2Rvd25fYnV0dG9uICAgICAgICAgICA9ICZEb3duCi1CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3NlYXJjaHBhdGhfcmVtb3ZlX2J1dHRvbiAgICAgICAgID0gJlJlbW92ZQotQmVhbmluZm9QYXRoc0Jsb2NrX1VJX19zZXJhY2hwYXRoX3RhYl9vcmRlciAgICAgICAgICAgICA9ICZPcmRlciBhbmQgRXhwb3J0Ci0KLUJlYW5pbmZvUGF0aHNCbG9ja19VSV9fd2FybmluZ19FbnRyeU1pc3NpbmcgICAgICAgICAgICAgPSBQcm9qZWN0IGNsYXNzIHBhdGggZW50cmllcywgb3IgQmVhbkluZm8gY2xhc3MgZmlsZXMgYXJlIG1pc3NpbmcuCi0KLSMgezB9IHdpbGwgYmUgdGhlIHBhY2thZ2UgbmFtZSwgZS5nLiBqYXZhLmxhbmcKLUJlYW5pbmZvUGF0aHNCbG9ja19XQVJOX19zZWFyY2hwYXRoX21pc3NpbmdfcGF0aF9mb3JtYXQgPSBJV0FWMDAyMVcgezB9IC0gUGFja2FnZSBwYXRoIG5vdCBmb3VuZC4KLQotIyBUaGlzIGlzIGEgbWVzc2FnZSBvbiBhIHByb2dyZXNzIGRpYWxvZy4KLUJlYW5pbmZvUGF0aHNCbG9ja19VSV9fc2VhcmNocGF0aF9vcGVyYXRpb25kZXNjcmlwdGlvbiAgPSBTZXR0aW5nIEJlYW5JbmZvIHNlYXJjaCBwYXRocy4uLgotCi1CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX2FkZHNlYXJjaHBhdGhfdGl0bGUgICAgICAgICAgICAgID0gU2VsZWN0IFBhY2thZ2VzCi1CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX2FkZHNlYXJjaHBhdGhfZGVzY3JpcHRpb24gICAgICAgID0gJlNlbGVjdCBwYWNrYWdlcyB0byBhZGQgdG8gc2VhcmNoIHBhdGg6Ci0KLUJlYW5pbmZvUGF0aHNCbG9ja19VSV9fd2FybmluZ19FbnRyeU1pc3NpbmcgICAgICAgICAgICAgPSBQcm9qZWN0IGNsYXNzIHBhdGggZW50cmllcywgb3IgQmVhbkluZm8gY2xhc3MgZmlsZXMgYXJlIG1pc3NpbmcuCi1CZWFuaW5mb1BhdGhzQmxvY2tfVUlfX3NlYXJjaHBhdGhfYWRkX2J1dHRvbiAgICAgICAgICAgID0gQWRkIFBhY2thZ2UuLi4KLUV4Y2VwdGlvbkhhbmRsZXJfZXJyb3JkaWFsb2dfbXNnX3NlZWxvZz1TZWUgZXJyb3IgbG9nIGZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9ibGFuay5naWYgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9ibGFuay5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjlkMDIuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvaWNvbnMvYmxhbmsuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvaWNvbnMvY3Bfb3JkZXJfb2JqLmdpZiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2NwX29yZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZmE0Y2UuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvaWNvbnMvY3Bfb3JkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9ydW5fZXhjLmdpZiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9ydW5fZXhjLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNDEwMi4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9mdWxsL2N0b29sMTYvcnVuX2V4Yy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9mdWxsL29iajE2L2ZpbGVfb2JqLmdpZiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjExNjFhLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vcnVuX3dpei5naWYgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9mdWxsL3dpemJhbi9ydW5fd2l6LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNiZDQ2Mi4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9mdWxsL3dpemJhbi9ydW5fd2l6LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2phdmFiZWFuLmdpZiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL2phdmFiZWFuLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4NTI2MS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9qYXZhYmVhbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9wYWNrYWdlX29ial9taXNzaW5nLmdpZiBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL3BhY2thZ2Vfb2JqX21pc3NpbmcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGQ3ZTIwLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL2ljb25zL3BhY2thZ2Vfb2JqX21pc3NpbmcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvaWNvbnMvcGx1Z2luX29iai5naWYgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9wbHVnaW5fb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5M2RmNC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9pY29ucy9wbHVnaW5fb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNWZiNWUuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAkU291cmNlOiAvY3Zzcm9vdC93ZWJ0b29scy9qZWV0b29scy5tb3ZlL3dlYnRvb2xzLmphdmFlZS5naXQvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvQXR0aWMvcGx1Z2luLnByb3BlcnRpZXMsdiAkCi0jICRSZXZpc2lvbjogMS40ICQgICREYXRlOiAyMDA1LzA4LzI0IDIxOjA3OjEyICQKLSMKLQotCi1wbHVnaW5OYW1lPUphdmEgRU1GIE1vZGVsIFVJCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwotCi1wcm94eUxhdW5jaEdyb3VwLmxhYmVsPVByb3h5Ci0KLUFjdGlvblNldC5wcm94eVRvb2xzPVByb3h5IFRvb2xzCi1BY3Rpb25TZXQucHJveHlUb29scy5EZXNjcmlwdGlvbj1BY3Rpb25zIGZvciB3b3JraW5nIHdpdGggUHJveHkgYW5kIFByb3h5IExhdW5jaGVycy4KLUFjdGlvbi5wcm94eUxhdW5jaD1Qcm94eS4uLgotQWN0aW9uLnByb3h5TGF1bmNoVGlwPVByb3h5IExhdW5jaCBNYW5hZ2VyCi1BY3Rpb24uc2VsZWN0RGVmYXVsdD1TZWxlY3QgRGVmYXVsdCBQcm94eSBDb25maWd1cmF0aW9uLi4uCi1BY3Rpb24uc2VsZWN0RGVmYXVsdFRpcD1TZWxlY3QgZGVmYXVsdCBmb3IgezB9LgotTWVudS5ydW49JlJ1bgotCi1FZGl0b3JzLk92ZXJyaWRlRWRpdG9yID0gT3ZlcnJpZGUgRWRpdG9yCi0KLSMgVGhpcyBpcyB0aGUgdGl0bGUgb2YgdGhlIFByb3BlcnRpZXMgcGFnZSBmb3Igc2V0dGluZyBwcm9wZXJ0aWVzIG9mIEJlYW5JbmZvIHBhdGhzLgotQmVhbmluZm9QYXRoX1RpdGxlX1VJXyA9IEJlYW5JbmZvIFBhdGgKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3BsdWdpbi54bWwgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNThhNjFlLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEdyb3VwcyI+Ci0gICAgICA8bGF1bmNoR3JvdXAKLSAgICAgICAgICAgIGxhYmVsPSIlcHJveHlMYXVuY2hHcm91cC5sYWJlbCIKLSAgICAgICAgICAgIGJhbm5lckltYWdlPSJpY29ucy9mdWxsL3dpemJhbi9ydW5fd2l6LmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qZW0ucHJveHkiCi0gICAgICAgICAgICBpbWFnZT0iaWNvbnMvZnVsbC9jdG9vbDE2L3J1bl9leGMuZ2lmIgotICAgICAgICAgICAgbW9kZT0icnVuIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmplbS5wcm94eSI+Ci0gICAgICA8L2xhdW5jaEdyb3VwPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblR5cGVJbWFnZXMiPgotICAgICAgPGxhdW5jaENvbmZpZ3VyYXRpb25UeXBlSW1hZ2UKLSAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3Rvb2wxNi9ydW5fZXhjLmdpZiIKLSAgICAgICAgICAgIGNvbmZpZ1R5cGVJRD0ib3JnLmVjbGlwc2UuamVtLnByb3h5LkxvY2FsUHJveHlMYXVuY2hDb25maWd1cmF0aW9uVHlwZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZW0ucHJveHkubGF1bmNoQ29uZmlndXJhdGlvblR5cGVJbWFnZS5sb2NhbFByb3h5Ij4KLSAgICAgIDwvbGF1bmNoQ29uZmlndXJhdGlvblR5cGVJbWFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cHMiPgotICAgICAgPGxhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cAotICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuamVtLnByb3h5LkxvY2FsUHJveHlMYXVuY2hDb25maWd1cmF0aW9uVHlwZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkucHJveHkucmVtb3RlLkxvY2FsTGF1bmNoVGFiR3JvdXAiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamVtLnVpLnJlbW90ZS5Mb2NhbExhdW5jaFRhYkdyb3VwMSI+Ci0gICAgICA8L2xhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldHMiPgotICAgICAgPGFjdGlvblNldAotICAgICAgICAgICAgbGFiZWw9IiVBY3Rpb25TZXQucHJveHlUb29scyIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlQWN0aW9uU2V0LnByb3h5VG9vbHMuRGVzY3JpcHRpb24iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamVtLnVpLlByb3h5VG9vbHNTZXQiPgotICAgICAgICAgPG1lbnUKLSAgICAgICAgICAgICAgIGxhYmVsPSIlTWVudS5ydW4iCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkucnVuIj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkucHJveHkuUHJveHlMYXVuY2hUb29sYmFyRGVsZWdhdGUiCi0gICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N0b29sMTYvcnVuX2V4Yy5naWYiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamVtLnVpLnByb3h5LlByb3h5TGF1bmNoVG9vbGJhckRlbGVnYXRlQWN0aW9uIgotICAgICAgICAgICAgICAgbGFiZWw9IiVBY3Rpb24ucHJveHlMYXVuY2giCi0gICAgICAgICAgICAgICBzdHlsZT0icHVsbGRvd24iCi0gICAgICAgICAgICAgICB0b29sYmFyUGF0aD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0L3Byb3h5TGF1bmNoIgotICAgICAgICAgICAgICAgdG9vbHRpcD0iJUFjdGlvbi5wcm94eUxhdW5jaFRpcCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQWN0aW9uLnNlbGVjdERlZmF1bHQiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLnByb3h5LlNlbGVjdERlZmF1bHRDb25maWd1cmF0aW9uQWN0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UudWkucnVuLyIKLSAgICAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamVtLnVpLnByb3h5LlNlbGVjdERlZmF1bHRNZW51RGVsZWdhdGVBY3Rpb24iPgotICAgICAgICAgICAgPGVuYWJsZW1lbnQ+Ci0gICAgICAgICAgICAgICA8b3I+Ci0gICAgICAgICAgICAgICAgICA8b2JqZWN0Q2xhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ij4KLSAgICAgICAgICAgICAgICAgIDwvb2JqZWN0Q2xhc3M+Ci0gICAgICAgICAgICAgICAgICA8b2JqZWN0Q2xhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9Im9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCI+Ci0gICAgICAgICAgICAgICAgICA8L29iamVjdENsYXNzPgotICAgICAgICAgICAgICAgPC9vcj4KLSAgICAgICAgICAgIDwvZW5hYmxlbWVudD4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBY3Rpb24ucHJveHlMYXVuY2giCi0gICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N0b29sMTYvcnVuX2V4Yy5naWYiCi0gICAgICAgICAgICAgICB0b29sdGlwPSIlQWN0aW9uLnByb3h5TGF1bmNoVGlwIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5wcm94eS5Qcm94eUxhdW5jaE1lbnVEZWxlZ2F0ZSIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS51aS5ydW4vIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmplbS51aS5wcm94eS5Qcm94eUxhdW5jaE1lbnVEZWxlZ2F0ZUFjdGlvbiI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvYWN0aW9uU2V0PgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamVtLnVpLnNlbGVjdC5kZWZhdWx0Lm9iamVjdGNvbnRpYnV0aW9uIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQWN0aW9uLnNlbGVjdERlZmF1bHQiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLnByb3h5LlNlbGVjdERlZmF1bHRDb25maWd1cmF0aW9uQWN0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmplbS51aS5zZWxlY3Qub2JqZWN0LmFjdGlvbiI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgIDx2aXNpYmlsaXR5PgotICAgICAgICAgICAgPG9iamVjdFN0YXRlCi0gICAgICAgICAgICAgICAgICBuYW1lPSJwZXJzaXN0ZW50UHJvcGVydHkiCi0gICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuamVtLnByb3h5LnByb3h5TGF1bmNoQ29uZmlndXJhdGlvbiI+Ci0gICAgICAgICAgICA8L29iamVjdFN0YXRlPgotICAgICAgICAgPC92aXNpYmlsaXR5PgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcm9wZXJ0eVBhZ2VzIj4KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiCi0gICAgICAgICAgICBuYW1lPSIlQmVhbmluZm9QYXRoX1RpdGxlX1VJXyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwuYmVhbmluZm8udWkuQmVhbmluZm9zUHJvcGVydHlQYWdlIgotICAgICAgICAgICAgaWQ9IkJlYW5pbmZvUHJvcGVydGllc1BhZ2UiPgotICAgICAgICAgPGZpbHRlcgotICAgICAgICAgICAgICAgbmFtZT0ibmF0dXJlIgotICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmUiPgotICAgICAgICAgPC9maWx0ZXI+Ci0gICAgICA8L3BhZ2U+Ci0gICAgICA8cGFnZQotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCIKLSAgICAgICAgICAgIG5hbWU9IiVCZWFuaW5mb1BhdGhfVGl0bGVfVUlfIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5iZWFuaW5mby51aS5CZWFuaW5mb3NQcm9wZXJ0eVBhZ2UiCi0gICAgICAgICAgICBpZD0iQmVhbmluZm9Qcm9wZXJ0aWVzUGFnZSI+Ci0gICAgICAgICA8ZmlsdGVyCi0gICAgICAgICAgICAgICBuYW1lPSJuYXR1cmUiCi0gICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSI+Ci0gICAgICAgICA8L2ZpbHRlcj4KLSAgICAgIDwvcGFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgotICAgICAgPGVkaXRvcgotICAgICAgICAgICAgbmFtZT0iJUVkaXRvcnMuT3ZlcnJpZGVFZGl0b3IiCi0gICAgICAgICAgICBleHRlbnNpb25zPSJvdmVycmlkZSIKLSAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMudGV4dC5UZXh0RWRpdG9yIgotICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy50ZXh0LlRleHRFZGl0b3JBY3Rpb25Db250cmlidXRvciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZW0uYmVhbmluZm8uT3ZlcnJpZGVFZGl0b3IiPgotICAgICAgPC9lZGl0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qZW0udXRpbC51aVRlc3RlciI+Ci0gICAgICA8dWlUZXN0ZXIgY2xhc3NOYW1lPSJvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkuY29yZS5VSVRlc3RlciIvPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL2NvcmUvSkVNVUlQbHVnaW4uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9jb3JlL0pFTVVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNWIyNzEuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL2NvcmUvSkVNVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5jb3JlOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmxvZ2dlci5wcm94eS5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwubG9nZ2VyLnByb3h5cmVuZGVyLkVjbGlwc2VMb2dnZXI7Ci0KLSAKLS8qKgotICogCi0gKiBAc2luY2UgMS4wLjAKLSAqLwotcHVibGljIGNsYXNzIEpFTVVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBKRU1VSVBsdWdpbiBQTFVHSU47Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElfQkVBTklORk9fVUkgPSAib3JnLmVjbGlwc2UuamVtLmludGVybmFsLmJlYW5pbmZvLnVpIjsJLy8gS2V5IGZvciBkaWFsb2cgc2V0dGluZ3MuCSAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQHBhcmFtIGRlc2NyaXB0b3IKLQkgKiAKLQkgKiBAc2luY2UgMS4wLjAKLQkgKi8KLQlwdWJsaWMgSkVNVUlQbHVnaW4oKSB7Ci0JCVBMVUdJTiA9IHRoaXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybiB0aGUgcGx1Z2luLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAc2luY2UgMS4wLjAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpFTVVJUGx1Z2luIGdldFBsdWdpbigpIHsKLQkJcmV0dXJuIFBMVUdJTjsKLQl9Ci0JCi0JcHJpdmF0ZSBMb2dnZXIgbG9nZ2VyOwotCXB1YmxpYyBMb2dnZXIgZ2V0TG9nZ2VyKCkgewotCQlpZiAobG9nZ2VyID09IG51bGwpCi0JCQlsb2dnZXIgPSBFY2xpcHNlTG9nZ2VyLmdldEVjbGlwc2VMb2dnZXIodGhpcyk7Ci0JCXJldHVybiBsb2dnZXI7Ci0JfQkKLQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL2NvcmUvVUlUZXN0ZXIuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9jb3JlL1VJVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDJjYjQuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL2NvcmUvVUlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLSAKLQotLyoqCi0gKiBUZXN0cyBpZiBVSSBpcyBhY3RpdmUsIGFuZCBpZiBpdCBpcywgaXQgd2lsbCByZXR1cm4gdHJ1ZS4KLSAqIEBzaW5jZSAxLjIuMQotICovCi1wdWJsaWMgY2xhc3MgVUlUZXN0ZXIgaW1wbGVtZW50cyBvcmcuZWNsaXBzZS5qZW0udXRpbC5VSVRlc3RlciB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZW0udXRpbC5VSVRlc3RlciNpc0N1cnJlbnRDb250ZXh0VUkoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQ3VycmVudENvbnRleHRVSSgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvUHJveHlMYXVuY2hNZW51RGVsZWdhdGUuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9Qcm94eUxhdW5jaE1lbnVEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDI0Mzc0Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9Qcm94eUxhdW5jaE1lbnVEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLnByb3h5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuYWN0aW9ucy5PcGVuTGF1bmNoRGlhbG9nQWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnByb3h5LmNvcmUuSVByb3h5Q29uc3RhbnRzOwotIAotLyoqCi0gKiBNZW51IGRlbGVnYXRlIHRvIGxhdW5jaCB0aGUgUHJveHkgTGF1bmNoIE1hbmFnZXIuCi0gKiBAc2luY2UgMS4wLjAKLSAqLwotcHVibGljIGNsYXNzIFByb3h5TGF1bmNoTWVudURlbGVnYXRlIGV4dGVuZHMgT3BlbkxhdW5jaERpYWxvZ0FjdGlvbiB7Ci0JCi0JcHVibGljIFByb3h5TGF1bmNoTWVudURlbGVnYXRlKCkgewotCQlzdXBlcihJUHJveHlDb25zdGFudHMuSURfUFJPWFlfTEFVTkNIX0dST1VQKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9Qcm94eUxhdW5jaFRvb2xiYXJEZWxlZ2F0ZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L1Byb3h5TGF1bmNoVG9vbGJhckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMzAxYzkuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L1Byb3h5TGF1bmNoVG9vbGJhckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLQotCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLnByb3h5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93UHVsbGRvd25EZWxlZ2F0ZTI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkuY29yZS5KRU1VSVBsdWdpbjsKLSAKLS8qKgotICogVGhlIHRvb2xiYXIgZGVsZWdhdGUgZm9yIHByb3h5IGxhdW5jaC4KLSAqIEBzaW5jZSAxLjAuMAotICovCi1wdWJsaWMgY2xhc3MgUHJveHlMYXVuY2hUb29sYmFyRGVsZWdhdGUgaW1wbGVtZW50cyBJV29ya2JlbmNoV2luZG93UHVsbGRvd25EZWxlZ2F0ZTIgewotCi0JcHJpdmF0ZSBNZW51IG1lbnU7Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd1B1bGxkb3duRGVsZWdhdGUyI2dldE1lbnUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudSkKLQkgKi8KLQlwdWJsaWMgTWVudSBnZXRNZW51KE1lbnUgcGFyZW50KSB7Ci0JCXNldE1lbnUobmV3IE1lbnUocGFyZW50KSk7Ci0JCWZpbGxNZW51KG1lbnUpOwotCQlyZXR1cm4gbWVudTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldE1lbnUoTWVudSBtZW51KSB7Ci0JCWlmICh0aGlzLm1lbnUgIT0gbnVsbCkgewotCQkJdGhpcy5tZW51LmRpc3Bvc2UoKTsKLQkJfQotCQl0aGlzLm1lbnUgPSBtZW51OwotCX0JCi0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93UHVsbGRvd25EZWxlZ2F0ZSNnZXRNZW51KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wpCi0JICovCi0JcHVibGljIE1lbnUgZ2V0TWVudShDb250cm9sIHBhcmVudCkgewotCQlzZXRNZW51KG5ldyBNZW51KHBhcmVudCkpOwotCQlmaWxsTWVudShtZW51KTsKLQkJcmV0dXJuIG1lbnU7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBmaWxsTWVudShNZW51IG1lbnUpIHsKLQkJYWRkVG9NZW51KG1lbnUsIHByb3h5TGF1bmNoRGVsZWdhdGUsIC0xKTsJCi0JCWFkZFRvTWVudShtZW51LCBzZWxlY3REZWxlZ2F0ZSwgLTEpOwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIHRoZSBnaXZlbiBhY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBtZW51IHdpdGggYW4gYWNjZWxlcmF0b3Igc3BlY2lmaWVkCi0JICogYnkgdGhlIGdpdmVuIG51bWJlci4KLQkgKiAKLQkgKiBAcGFyYW0gbWVudSB0aGUgbWVudSB0byBhZGQgdGhlIGFjdGlvbiB0bwotCSAqIEBwYXJhbSBhY3Rpb24gdGhlIGFjdGlvbiB0byBhZGQKLQkgKiBAcGFyYW0gYWNjZWxlcmF0b3IgdGhlIG51bWJlciB0aGF0IHNob3VsZCBhcHBlYXIgYXMgYW4gYWNjZWxlcmF0b3IKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUb01lbnUoTWVudSBtZW51LCBJQWN0aW9uIGFjdGlvbiwgaW50IGFjY2VsZXJhdG9yKSB7Ci0JCVN0cmluZ0J1ZmZlciBsYWJlbD0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpZiAoYWNjZWxlcmF0b3IgPj0gMCAmJiBhY2NlbGVyYXRvciA8IDEwKSB7Ci0JCQkvL2FkZCB0aGUgbnVtZXJpY2FsIGFjY2VsZXJhdG9yCi0JCQlsYWJlbC5hcHBlbmQoJyYnKTsKLQkJCWxhYmVsLmFwcGVuZChhY2NlbGVyYXRvcik7Ci0JCQlsYWJlbC5hcHBlbmQoJyAnKTsKLQkJfQotCQlsYWJlbC5hcHBlbmQoYWN0aW9uLmdldFRleHQoKSk7Ci0JCWFjdGlvbi5zZXRUZXh0KGxhYmVsLnRvU3RyaW5nKCkpOwotCQlBY3Rpb25Db250cmlidXRpb25JdGVtIGl0ZW09IG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JCWl0ZW0uZmlsbChtZW51LCAtMSk7Ci0JfQkKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzZXRNZW51KG51bGwpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3cpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykgewotCQlzZWxlY3REZWxlZ2F0ZS5pbml0KHdpbmRvdyk7Ci0JfQotCi0JcHJvdGVjdGVkIFNlbGVjdERlZmF1bHRDb25maWd1cmF0aW9uQWN0aW9uRGVsZWdhdGUgc2VsZWN0RGVsZWdhdGUgPSBuZXcgU2VsZWN0RGVmYXVsdENvbmZpZ3VyYXRpb25BY3Rpb25EZWxlZ2F0ZSgpOwotCXByb3RlY3RlZCBQcm94eUxhdW5jaE1lbnVEZWxlZ2F0ZSBwcm94eUxhdW5jaERlbGVnYXRlID0gbmV3IFByb3h5TGF1bmNoTWVudURlbGVnYXRlKCk7Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJaWYgKHNlbGVjdERlbGVnYXRlLmlzRW5hYmxlZCgpKQotCQkJc2VsZWN0RGVsZWdhdGUucnVuKGFjdGlvbik7Ci0JCWVsc2UKLQkJCXByb3h5TGF1bmNoRGVsZWdhdGUucnVuKGFjdGlvbik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJc2VsZWN0RGVsZWdhdGUuc2VsZWN0aW9uQ2hhbmdlZChudWxsLCBzZWxlY3Rpb24pOwotCQlpZiAoc2VsZWN0RGVsZWdhdGUuaXNFbmFibGVkKCkpCi0JCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoc2VsZWN0RGVsZWdhdGUuZ2V0VG9vbFRpcFRleHQoKSk7Ci0JCWVsc2UKLQkJCWFjdGlvbi5zZXRUb29sVGlwVGV4dChQbGF0Zm9ybS5nZXRSZXNvdXJjZVN0cmluZyhKRU1VSVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIiVBY3Rpb24ucHJveHlMYXVuY2hUaXAiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L1Byb3h5VUlNZXNzYWdlcy5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L1Byb3h5VUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmVkODFlLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9Qcm94eVVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkucHJveHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgUHJveHlVSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkucHJveHkubWVzc2FnZXMiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgUHJveHlVSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTZWxlY3RfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU2VsZWN0X21lc3NhZ2U7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBQcm94eVVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvU2VsZWN0RGVmYXVsdENvbmZpZ3VyYXRpb25BY3Rpb25EZWxlZ2F0ZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L1NlbGVjdERlZmF1bHRDb25maWd1cmF0aW9uQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzYTg0OC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvU2VsZWN0RGVmYXVsdENvbmZpZ3VyYXRpb25BY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLQotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5wcm94eTsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVUlUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JRGVidWdVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkVycm9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5DaGVja2VkVHJlZVNlbGVjdGlvbkRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC5wcm94eS5jb3JlLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLmNvcmUuSkVNVUlQbHVnaW47Ci0gCi0vKioKLSAqIAotICogQHNpbmNlIDEuMC4wCi0gKi8KLXB1YmxpYyBjbGFzcyBTZWxlY3REZWZhdWx0Q29uZmlndXJhdGlvbkFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlLCBJT2JqZWN0QWN0aW9uRGVsZWdhdGUgewotCQotCi0JLyoqCi0JICogSGVscGVyIHRvIGdldCBzaW5nbGUgc2VsZWN0ZWQgamF2YSBwcm9qZWN0IG91dCBvZiBzZWxlY3Rpb24uCi0JICogVXNlZCBieSBQcm94eUxhdW5jaFRvb2xiYXJEZWxlZ2F0ZSB0b28uCi0JICogCi0JICogQHBhcmFtIHNlbGVjdGlvbgotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAc2luY2UgMS4wLjAKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIElKYXZhUHJvamVjdCBnZXRTZWxlY3RlZEphdmFQcm9qZWN0KElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWlmIChzZWxlY3Rpb24uaXNFbXB0eSgpIHx8ICEoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHx8ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuc2l6ZSgpID4gMSkKLQkJCXJldHVybiBudWxsOwkvLyBDYW4ndCBoYW5kbGUgaXQuCi0JCWVsc2UgewotCQkJT2JqZWN0IHNlbCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQlpZiAoc2VsIGluc3RhbmNlb2YgSVByb2plY3QgJiYgKChJUHJvamVjdCkgc2VsKS5pc09wZW4oKSkgewotCQkJCXJldHVybiBKYXZhQ29yZS5jcmVhdGUoKElQcm9qZWN0KSBzZWwpOwkvLyBXaWxsIHJldHVybiBudWxsIGlmIG5vdCBleGlzdC4KLQkJCX0gZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgSUphdmFQcm9qZWN0ICYmICgoSUphdmFQcm9qZWN0KSBzZWwpLmlzT3BlbigpKQotCQkJCXJldHVybiAoSUphdmFQcm9qZWN0KSBzZWw7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogCi0JICogCi0JICogQHNpbmNlIDEuMC4wCi0JICovCi0JcHVibGljIFNlbGVjdERlZmF1bHRDb25maWd1cmF0aW9uQWN0aW9uRGVsZWdhdGUoKSB7Ci0JCXN1cGVyKFBsYXRmb3JtLmdldFJlc291cmNlU3RyaW5nKEpFTVVJUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAiJUFjdGlvbi5zZWxlY3REZWZhdWx0IikpOyAvLyROT04tTkxTLTEkCi0JCXNldEVuYWJsZWQoZmFsc2UpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCX0KLQotCXByaXZhdGUgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3c7Ci0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7Ci0JCXRoaXMud2luZG93ID0gd2luZG93OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4oKQotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJc2VsZWN0RGlhbG9nKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7Ci0JCXJ1bigpOwotCX0JCi0KLQlwcm90ZWN0ZWQgSUphdmFQcm9qZWN0IGphdmFwcm9qZWN0OwotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJamF2YXByb2plY3QgPSBnZXRTZWxlY3RlZEphdmFQcm9qZWN0KHNlbGVjdGlvbik7Ci0JCXRyeSB7Ci0JCQlzZXRFbmFibGVkKAotCQkJCWphdmFwcm9qZWN0ICE9IG51bGwKLQkJCQkJJiYgamF2YXByb2plY3QuZ2V0UHJvamVjdCgpLmdldFBlcnNpc3RlbnRQcm9wZXJ0eShQcm94eVBsdWdpbi5QUk9QRVJUWV9MQVVOQ0hfQ09ORklHVVJBVElPTikgIT0gbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzZXRFbmFibGVkKGZhbHNlKTsJLy8gU29tZSBlcnJvciwgc28gbm90IGVuYWJsZWQuCi0JCX0KLQkJaWYgKGFjdGlvbiAhPSBudWxsKQkJCQotCQkJYWN0aW9uLnNldEVuYWJsZWQoaXNFbmFibGVkKCkpOwotCQlpZiAoamF2YXByb2plY3QgIT0gbnVsbCkKLQkJCXNldFRvb2xUaXBUZXh0KE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFBsYXRmb3JtLmdldFJlc291cmNlU3RyaW5nKEpFTVVJUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAiJUFjdGlvbi5zZWxlY3REZWZhdWx0VGlwIiksIG5ldyBPYmplY3RbXSB7amF2YXByb2plY3QuZ2V0RWxlbWVudE5hbWUoKX0pKTsgLy8kTk9OLU5MUy0xJAotCQllbHNlCi0JCQlzZXRUb29sVGlwVGV4dChnZXRUZXh0KCkpOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBFTVBUWSA9IG5ldyBPYmplY3RbMF07Ci0JcHJvdGVjdGVkIHZvaWQgc2VsZWN0RGlhbG9nKCkgewotCQl0cnkgewotCQkJSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlciA9IERlYnVnVUlUb29scy5uZXdEZWJ1Z01vZGVsUHJlc2VudGF0aW9uKCk7Ci0JCQkKLQkJCUNoZWNrZWRUcmVlU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IG5ldyBDaGVja2VkVHJlZVNlbGVjdGlvbkRpYWxvZyh3aW5kb3cuZ2V0U2hlbGwoKSwgbGFiZWxQcm92aWRlciwgbmV3IElUcmVlQ29udGVudFByb3ZpZGVyKCkgewotCQkJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkgewotCQkJCQlyZXR1cm4gRU1QVFk7Ci0JCQkJfQotCi0JCQkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpIHsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQotCQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCQkJCWlmIChpbnB1dEVsZW1lbnQgIT0gbnVsbCAmJiBpbnB1dEVsZW1lbnQgaW5zdGFuY2VvZiBPYmplY3RbXSkKLQkJCQkJCXJldHVybiAoT2JqZWN0W10pIGlucHV0RWxlbWVudDsKLQkJCQkJZWxzZSAKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JCQkJfQotCQkJfSkgewotCQkJCXByb3RlY3RlZCBDaGVja2JveFRyZWVWaWV3ZXIgY3JlYXRlVHJlZVZpZXdlcihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQkJCWZpbmFsIENoZWNrYm94VHJlZVZpZXdlciB0cmVlVmlld2VyID0gc3VwZXIuY3JlYXRlVHJlZVZpZXdlcihwYXJlbnQpOwotCQkJCQl0cmVlVmlld2VyLmFkZENoZWNrU3RhdGVMaXN0ZW5lcihuZXcgSUNoZWNrU3RhdGVMaXN0ZW5lcigpIHsKLQkJCQkJCWJvb2xlYW4gcHJvY2Vzc2luZ0NoZWNrID0gZmFsc2U7Ci0JCQkJCQlwdWJsaWMgdm9pZCBjaGVja1N0YXRlQ2hhbmdlZChDaGVja1N0YXRlQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJCQkJaWYgKCFwcm9jZXNzaW5nQ2hlY2spIHsKLQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCXByb2Nlc3NpbmdDaGVjayA9IHRydWU7Ci0JCQkJCQkJCQlpZiAoZXZlbnQuZ2V0Q2hlY2tlZCgpKSB7Ci0JCQkJCQkJCQkJLy8gV2UgYXJlIGNoZWNraW5nIHNvbWV0aGluZywgbWFrZSBzdXJlIG9sZCBvbmUgdW5jaGVja2VkLgotCQkJCQkJCQkJCU9iamVjdFtdIGNoZWNrZWQgPSB0cmVlVmlld2VyLmdldENoZWNrZWRFbGVtZW50cygpOwotCQkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hlY2tlZC5sZW5ndGg7IGkrKykgewotCQkJCQkJCQkJCQlpZiAoY2hlY2tlZFtpXSAhPSBldmVudC5nZXRFbGVtZW50KCkpCi0JCQkJCQkJCQkJCQl0cmVlVmlld2VyLnNldENoZWNrZWQoY2hlY2tlZFtpXSwgZmFsc2UpOwotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJfSBmaW5hbGx5IHsKLQkJCQkJCQkJCXByb2Nlc3NpbmdDaGVjayA9IGZhbHNlOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCi0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCQlyZXR1cm4gdHJlZVZpZXdlcjsKLQkJCQl9Ci0JCQkJCi0JCQkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTZWxlY3Rpb25CdXR0b25zKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKLQkJCQkJcmV0dXJuIG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7CS8vIFdlIGRvbid0IHdhbnQgc2VsZWN0aW9uIGJ1dHRvbnMgc2luY2Ugb25seSBvbmUgY2FuIGJlIHNlbGVjdGVkIGF0IGEgdGltZS4KLQkJCQl9Ci0JCQl9OwotCQkJZGlhbG9nLnNldFRpdGxlKFByb3h5VUlNZXNzYWdlcy5TZWxlY3RfdGl0bGUpOyAKLQkJCWRpYWxvZy5zZXRNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFByb3h5VUlNZXNzYWdlcy5TZWxlY3RfbWVzc2FnZSwgbmV3IE9iamVjdFtdIHsgamF2YXByb2plY3QuZ2V0RWxlbWVudE5hbWUoKX0pKTsgCi0KLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uW10gY29uZmlncyA9IERlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMYXVuY2hNYW5hZ2VyKCkuZ2V0TGF1bmNoQ29uZmlndXJhdGlvbnMoKTsKLQkJCUxpc3QgY29uZmlnc0xpc3QgPSBuZXcgQXJyYXlMaXN0KGNvbmZpZ3MubGVuZ3RoKzEpOwotCQkJU3RyaW5nIGpwTmFtZSA9IGphdmFwcm9qZWN0LmdldEVsZW1lbnROYW1lKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ3MubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoSVByb3h5Q29uc3RhbnRzLklEX1BST1hZX0xBVU5DSF9HUk9VUC5lcXVhbHMoY29uZmlnc1tpXS5nZXRDYXRlZ29yeSgpKSAmJiAhY29uZmlnc1tpXS5nZXRBdHRyaWJ1dGUoSURlYnVnVUlDb25zdGFudHMuQVRUUl9QUklWQVRFLCBmYWxzZSkgJiYganBOYW1lLmVxdWFscyhjb25maWdzW2ldLmdldEF0dHJpYnV0ZShJSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9KRUNUX05BTUUsICIiKSkpIC8vJE5PTi1OTFMtMSQKLQkJCQkJY29uZmlnc0xpc3QuYWRkKGNvbmZpZ3NbaV0pOwotCQkJfQotCQkJY29uZmlncyA9IChJTGF1bmNoQ29uZmlndXJhdGlvbltdKSBjb25maWdzTGlzdC50b0FycmF5KG5ldyBJTGF1bmNoQ29uZmlndXJhdGlvbltjb25maWdzTGlzdC5zaXplKCldKTsKLQkJCWRpYWxvZy5zZXRJbnB1dChjb25maWdzKTsKLQotCQkJU3RyaW5nIGxhdW5jaE5hbWUgPSBqYXZhcHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0UGVyc2lzdGVudFByb3BlcnR5KFByb3h5UGx1Z2luLlBST1BFUlRZX0xBVU5DSF9DT05GSUdVUkFUSU9OKTsKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZyA9IG51bGw7Ci0JCQlpZiAobGF1bmNoTmFtZSAhPSBudWxsKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWdzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCWlmIChjb25maWdzW2ldLmdldE5hbWUoKS5lcXVhbHMobGF1bmNoTmFtZSkpIHsKLQkJCQkJCWNvbmZpZyA9IGNvbmZpZ3NbaV07Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoY29uZmlnICE9IG51bGwpIHsKLQkJCQkJZGlhbG9nLnNldEluaXRpYWxTZWxlY3Rpb25zKG5ldyBPYmplY3RbXSB7IGNvbmZpZyB9KTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoZGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQljb25maWcgPSAoSUxhdW5jaENvbmZpZ3VyYXRpb24pIGRpYWxvZy5nZXRGaXJzdFJlc3VsdCgpOwotCQkJCWlmIChjb25maWcgIT0gbnVsbCkKLQkJCQkJamF2YXByb2plY3QuZ2V0UHJvamVjdCgpLnNldFBlcnNpc3RlbnRQcm9wZXJ0eShQcm94eVBsdWdpbi5QUk9QRVJUWV9MQVVOQ0hfQ09ORklHVVJBVElPTiwgY29uZmlnLmdldE5hbWUoKSk7Ci0JCQkJZWxzZQotCQkJCQlqYXZhcHJvamVjdC5nZXRQcm9qZWN0KCkuc2V0UGVyc2lzdGVudFByb3BlcnR5KFByb3h5UGx1Z2luLlBST1BFUlRZX0xBVU5DSF9DT05GSUdVUkFUSU9OLCBQcm94eUxhdW5jaFN1cHBvcnQuTk9UX1NFVCk7Ci0JCQl9IAotCQkJCi0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHdpbmRvdy5nZXRTaGVsbCgpLCBudWxsLCBudWxsLCBlLmdldFN0YXR1cygpKTsKLQkJCVByb3h5UGx1Z2luLmdldFBsdWdpbigpLmdldExvZ2dlcigpLmxvZyhlLCBMZXZlbC5XQVJOSU5HKTsKLQkJfQkJCQkJCi0JCQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JT2JqZWN0QWN0aW9uRGVsZWdhdGUjc2V0QWN0aXZlUGFydChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlUGFydChJQWN0aW9uIGFjdGlvbiwgSVdvcmtiZW5jaFBhcnQgdGFyZ2V0UGFydCkgewotCQkvLyBUaGlzIGlzIGNhbGxlZCBpbnN0ZWFkIG9mIGluaXQoV29ya2JlbmNoV2luZG93KSB3aGVuIHRoaXMgaXMgb24gcG9wdXAgbWVudS4KLQkJd2luZG93ID0gdGFyZ2V0UGFydC5nZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvbWVzc2FnZXMucHJvcGVydGllcyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODgyOGUwLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgJFNvdXJjZTogL2N2c3Jvb3Qvd2VidG9vbHMvamVldG9vbHMubW92ZS93ZWJ0b29scy5qYXZhZWUuZ2l0L3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9BdHRpYy9tZXNzYWdlcy5wcm9wZXJ0aWVzLHYgJAotIyAkUmV2aXNpb246IDEuNSAkICAkRGF0ZTogMjAwNS8wOC8yNCAyMTowNzoxMiAkCi0jCi0KLVNlbGVjdF90aXRsZT1TZWxlY3QgRGVmYXVsdAotU2VsZWN0X21lc3NhZ2U9U2VsZWN0IGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgcHJvamVjdCAiezB9IjoKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9yZW1vdGUvTG9jYWxMYXVuY2hQcm9qZWN0VGFiLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvcmVtb3RlL0xvY2FsTGF1bmNoUHJvamVjdFRhYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzMyMzZlLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9yZW1vdGUvTG9jYWxMYXVuY2hQcm9qZWN0VGFiLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotCi0KLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwudWkucHJveHkucmVtb3RlOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25zLkphdmFMYXVuY2hUYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFFbGVtZW50TGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkVsZW1lbnRMaXN0U2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uaW50ZXJuYWwucHJveHkuY29yZS5Qcm94eVBsdWdpbjsKLSAKLS8qKgotICogCi0gKiBAc2luY2UgMS4wLjAKLSAqLwotcHVibGljIGNsYXNzIExvY2FsTGF1bmNoUHJvamVjdFRhYiBleHRlbmRzIEphdmFMYXVuY2hUYWIgewotCQkKLQkvLyBQcm9qZWN0IFVJIHdpZGdldHMKLQlwcm90ZWN0ZWQgTGFiZWwgZlByb2pMYWJlbDsKLQlwcm90ZWN0ZWQgVGV4dCBmUHJvalRleHQ7Ci0JcHJvdGVjdGVkIEJ1dHRvbiBmUHJvakJ1dHRvbjsKLQkJCQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIjY3JlYXRlQ29udHJvbChDb21wb3NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUZvbnQgZm9udCA9IHBhcmVudC5nZXRGb250KCk7Ci0JCQotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCXNldENvbnRyb2woY29tcCk7Ci0JCUdyaWRMYXlvdXQgdG9wTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJY29tcC5zZXRMYXlvdXQodG9wTGF5b3V0KTsJCQotCQlHcmlkRGF0YSBnZDsKLQkJCi0JCWNyZWF0ZVZlcnRpY2FsU3BhY2VyKGNvbXAsIDEpOwotCQkKLQkJQ29tcG9zaXRlIHByb2pDb21wID0gbmV3IENvbXBvc2l0ZShjb21wLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgcHJvakxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXByb2pMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCXByb2pMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJcHJvakxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCXByb2pDb21wLnNldExheW91dChwcm9qTGF5b3V0KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJcHJvakNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXByb2pDb21wLnNldEZvbnQoZm9udCk7Ci0JCQotCQlmUHJvakxhYmVsID0gbmV3IExhYmVsKHByb2pDb21wLCBTV1QuTk9ORSk7Ci0JCWZQcm9qTGFiZWwuc2V0VGV4dChQcm94eVJlbW90ZVVJTWVzc2FnZXMuTG9jYWxMYXVuY2hQcm9qZWN0VGFiX1Byb2plY3QpOyAKLQkJZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlmUHJvakxhYmVsLnNldExheW91dERhdGEoZ2QpOwotCQlmUHJvakxhYmVsLnNldEZvbnQoZm9udCk7Ci0JCQotCQlmUHJvalRleHQgPSBuZXcgVGV4dChwcm9qQ29tcCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlmUHJvalRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWZQcm9qVGV4dC5zZXRGb250KGZvbnQpOwotCQlmUHJvalRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldnQpIHsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJZlByb2pCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKHByb2pDb21wLCBQcm94eVJlbW90ZVVJTWVzc2FnZXMuTG9jYWxMYXVuY2hQcm9qZWN0VGFiX0Jyb3dzZSwgbnVsbCk7IAotCQlmUHJvakJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotCQkJCWhhbmRsZVByb2plY3RCdXR0b25TZWxlY3RlZCgpOwotCQkJfQotCQl9KTsKLQkJCQkKLQl9Ci0JCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIjaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0JCXN1cGVyLmluaXRpYWxpemVGcm9tKGNvbmZpZyk7Ci0JCXVwZGF0ZVByb2plY3RGcm9tQ29uZmlnKGNvbmZpZyk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2plY3RGcm9tQ29uZmlnKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZykgewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl0cnkgewotCQkJcHJvamVjdE5hbWUgPSBjb25maWcuZ2V0QXR0cmlidXRlKElKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BST0pFQ1RfTkFNRSwgIiIpOwkgLy8kTk9OLU5MUy0xJAotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQlQcm94eVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRMb2dnZXIoKS5sb2coY2UpOwotCQl9Ci0JCWZQcm9qVGV4dC5zZXRUZXh0KHByb2plY3ROYW1lKTsKLQl9Ci0JCQkKLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmRlYnVnLnVpLklMYXVuY2hDb25maWd1cmF0aW9uVGFiI3BlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5KQotCSAqLwotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZykgewotCQljb25maWcuc2V0QXR0cmlidXRlKElKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BST0pFQ1RfTkFNRSwgZlByb2pUZXh0LmdldFRleHQoKSk7CQkKLQl9Ci0JCQkKLQkvKioKLQkgKiBTaG93IGEgZGlhbG9nIHRoYXQgbGV0cyB0aGUgdXNlciBzZWxlY3QgYSBwcm9qZWN0LiAgVGhpcyBpbiB0dXJuIHByb3ZpZGVzCi0JICogY29udGV4dCBmb3IgdGhlIG1haW4gdHlwZSwgYWxsb3dpbmcgdGhlIHVzZXIgdG8ga2V5IGEgbWFpbiB0eXBlIG5hbWUsIG9yCi0JICogY29uc3RyYWluaW5nIHRoZSBzZWFyY2ggZm9yIG1haW4gdHlwZXMgdG8gdGhlIHNwZWNpZmllZCBwcm9qZWN0LgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGhhbmRsZVByb2plY3RCdXR0b25TZWxlY3RlZCgpIHsKLQkJSUphdmFQcm9qZWN0IHByb2plY3QgPSBjaG9vc2VKYXZhUHJvamVjdCgpOwotCQlpZiAocHJvamVjdCA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3QuZ2V0RWxlbWVudE5hbWUoKTsKLQkJZlByb2pUZXh0LnNldFRleHQocHJvamVjdE5hbWUpOwkJCi0JfQotCQotCS8qKgotCSAqIFJlYWxpemUgYSBKYXZhIFByb2plY3Qgc2VsZWN0aW9uIGRpYWxvZyBhbmQgcmV0dXJuIHRoZSBmaXJzdCBzZWxlY3RlZCBwcm9qZWN0LAotCSAqIG9yIG51bGwgaWYgdGhlcmUgd2FzIG5vbmUuCi0JICovCi0JcHJvdGVjdGVkIElKYXZhUHJvamVjdCBjaG9vc2VKYXZhUHJvamVjdCgpIHsKLQkJSUphdmFQcm9qZWN0W10gcHJvamVjdHM7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0cz0gSmF2YUNvcmUuY3JlYXRlKGdldFdvcmtzcGFjZVJvb3QoKSkuZ2V0SmF2YVByb2plY3RzKCk7Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQlQcm94eVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRMb2dnZXIoKS5sb2coZSk7Ci0JCQlwcm9qZWN0cz0gbmV3IElKYXZhUHJvamVjdFswXTsKLQkJfQotCQkKLQkJSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcj0gbmV3IEphdmFFbGVtZW50TGFiZWxQcm92aWRlcihKYXZhRWxlbWVudExhYmVsUHJvdmlkZXIuU0hPV19ERUZBVUxUKTsKLQkJRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2cgZGlhbG9nPSBuZXcgRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2coZ2V0U2hlbGwoKSwgbGFiZWxQcm92aWRlcik7Ci0JCWRpYWxvZy5zZXRUaXRsZShQcm94eVJlbW90ZVVJTWVzc2FnZXMuTG9jYWxMYXVuY2hQcm9qZWN0VGFiX1Byb2plY3RfU2VsZWN0aW9uKTsgCi0JCWRpYWxvZy5zZXRNZXNzYWdlKFByb3h5UmVtb3RlVUlNZXNzYWdlcy5Mb2NhbExhdW5jaFByb2plY3RUYWJfQ2hvb3NlUHJvamVjdCk7IAotCQlkaWFsb2cuc2V0RWxlbWVudHMocHJvamVjdHMpOwotCQkKLQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gZ2V0SmF2YVByb2plY3QoKTsKLQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCWRpYWxvZy5zZXRJbml0aWFsU2VsZWN0aW9ucyhuZXcgT2JqZWN0W10geyBqYXZhUHJvamVjdCB9KTsKLQkJfQotCQlpZiAoZGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spIHsJCQkKLQkJCXJldHVybiAoSUphdmFQcm9qZWN0KSBkaWFsb2cuZ2V0Rmlyc3RSZXN1bHQoKTsKLQkJfQkJCQotCQlyZXR1cm4gbnVsbDsJCQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm4gdGhlIElKYXZhUHJvamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9qZWN0IG5hbWUgaW4gdGhlIHByb2plY3QgbmFtZQotCSAqIHRleHQgZmllbGQsIG9yIG51bGwgaWYgdGhlIHRleHQgZG9lcyBub3QgbWF0Y2ggYSBwcm9qZWN0IG5hbWUuCi0JICovCi0JcHJvdGVjdGVkIElKYXZhUHJvamVjdCBnZXRKYXZhUHJvamVjdCgpIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gZlByb2pUZXh0LmdldFRleHQoKS50cmltKCk7Ci0JCWlmIChwcm9qZWN0TmFtZS5sZW5ndGgoKSA8IDEpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBnZXRKYXZhTW9kZWwoKS5nZXRKYXZhUHJvamVjdChwcm9qZWN0TmFtZSk7CQkKLQl9Ci0JCi0JLyoqCi0JICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGdldCB0aGUgd29ya3NwYWNlIHJvb3QuCi0JICovCi0JcHJpdmF0ZSBJV29ya3NwYWNlUm9vdCBnZXRXb3Jrc3BhY2VSb290KCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGdldCBhY2Nlc3MgdG8gdGhlIGphdmEgbW9kZWwuCi0JICovCi0JcHJpdmF0ZSBJSmF2YU1vZGVsIGdldEphdmFNb2RlbCgpIHsKLQkJcmV0dXJuIEphdmFDb3JlLmNyZWF0ZShnZXRXb3Jrc3BhY2VSb290KCkpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIjaXNWYWxpZChJTGF1bmNoQ29uZmlndXJhdGlvbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZykgewotCQkKLQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQlzZXRNZXNzYWdlKG51bGwpOwotCQkKLQkJU3RyaW5nIG5hbWUgPSBmUHJvalRleHQuZ2V0VGV4dCgpLnRyaW0oKTsKLQkJaWYgKG5hbWUubGVuZ3RoKCkgPiAwKSB7Ci0JCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJCUlTdGF0dXMgc3RhdHVzID0gd29ya3NwYWNlLnZhbGlkYXRlTmFtZShuYW1lLCBJUmVzb3VyY2UuUFJPSkVDVCk7Ci0JCQlpZiAoc3RhdHVzLmlzT0soKSkgewotCQkJCUlQcm9qZWN0IHByb2plY3Q9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFByb3h5UmVtb3RlVUlNZXNzYWdlcy5Mb2NhbExhdW5jaFByb2plY3RUYWJfUHJvamVjdE5vdEV4aXN0X0VSUk9SXywgbmV3IFN0cmluZ1tdIHtuYW1lfSkpOyAKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFByb3h5UmVtb3RlVUlNZXNzYWdlcy5Mb2NhbExhdW5jaFByb2plY3RUYWJfUHJvamVjdE5vdE9wZW5fRVJST1JfLCBuZXcgU3RyaW5nW10ge25hbWV9KSk7IAotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZUZvcm1hdC5mb3JtYXQoUHJveHlSZW1vdGVVSU1lc3NhZ2VzLkxvY2FsTGF1bmNoUHJvamVjdFRhYl9Qcm9qZWN0VmFsaWRhdGVFcnJvcl9FUlJPUl8sIG5ldyBTdHJpbmdbXXtzdGF0dXMuZ2V0TWVzc2FnZSgpfSkpOyAKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsJLy8gS2x1ZGdlLiBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIHNvIHRoYXQgIlJ1biIgYnV0dG9uIGlzIG5ldmVyIGVuYWJsZWQuIFdlIGNhbid0IGxhdW5jaCB0aGVzZSBjb25maWd1cmF0aW9ucyB1c2luZyB0aGUgc3RhbmRhcmQgd2F5LiBPbmx5IHRocm91Z2ggUHJveHlMYXVuY2hTdXBwb3J0LgotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIjc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZykgewotCQlJSmF2YUVsZW1lbnQgamF2YUVsZW1lbnQgPSBnZXRDb250ZXh0KCk7Ci0JCWlmIChqYXZhRWxlbWVudCAhPSBudWxsKSB7Ci0JCQlpbml0aWFsaXplSmF2YVByb2plY3QoamF2YUVsZW1lbnQsIGNvbmZpZyk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBXZSBzZXQgZW1wdHkgYXR0cmlidXRlcyBmb3IgcHJvamVjdCBzbyB0aGF0IHdoZW4gb25lIGNvbmZpZyBpcwotCQkJLy8gY29tcGFyZWQgdG8gYW5vdGhlciwgdGhlIGV4aXN0ZW5jZSBvZiBlbXB0eSBhdHRyaWJ1dGVzIGRvZXNuJ3QgY2F1c2UgYW4KLQkJCS8vIGluY29ycmVjdCByZXN1bHQgKHRoZSBwZXJmb3JtQXBwbHkoKSBtZXRob2QgY2FuIHJlc3VsdCBpbiBlbXB0eSB2YWx1ZXMKLQkJCS8vIGZvciB0aGVzZSBhdHRyaWJ1dGVzIGJlaW5nIHNldCBvbiBhIGNvbmZpZyBpZiB0aGVyZSBpcyBub3RoaW5nIGluIHRoZQotCQkJLy8gY29ycmVzcG9uZGluZyB0ZXh0IGJveGVzKQotCQkJY29uZmlnLnNldEF0dHJpYnV0ZShJSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9KRUNUX05BTUUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoQ29uZmlndXJhdGlvblRhYiNnZXROYW1lKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBQcm94eVJlbW90ZVVJTWVzc2FnZXMuTG9jYWxMYXVuY2hQcm9qZWN0VGFiX25hbWU7IAotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIjZ2V0SW1hZ2UoKQotCSAqLwotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuZ2V0SW1hZ2UoSURFLlNoYXJlZEltYWdlcy5JTUdfT0JKX1BST0pFQ1QpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9yZW1vdGUvTG9jYWxMYXVuY2hUYWJHcm91cC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L3JlbW90ZS9Mb2NhbExhdW5jaFRhYkdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNjJmMmMuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L3JlbW90ZS9Mb2NhbExhdW5jaFRhYkdyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogJFJDU2ZpbGU6IExvY2FsTGF1bmNoVGFiR3JvdXAuamF2YSx2ICQgJFJldmlzaW9uOiAxLjUgJCAkRGF0ZTogMjAwNS8wOC8yNCAyMTowNzoxMiAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLnByb3h5LnJlbW90ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuc291cmNlbG9va3VwLlNvdXJjZUxvb2t1cFRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvbnMuKjsKLQotLyoqCi0gKiBMYXVuY2ggVGFiIEdyb3VwIGZvciB0aGUgTG9jYWwgTGF1bmNoIG9mIGEgUmVtb3RlIFByb3h5IENvbmZpZ3VyYXRpb24uCi0gKiAKLSAqIEBzaW5jZSAxLjAuMAotICovCi1wdWJsaWMgY2xhc3MgTG9jYWxMYXVuY2hUYWJHcm91cCBleHRlbmRzIEFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgSmF2YSBhcHBsZXQgdGFiIGdyb3VwLgotCSAqLwotCXB1YmxpYyBMb2NhbExhdW5jaFRhYkdyb3VwKCkgewotCX0KLQotCS8qCi0JICogQHNlZSBJTGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwI2NyZWF0ZVRhYnMoSUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVUYWJzKElMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nIGRpYWxvZywgU3RyaW5nIG1vZGUpIHsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB0YWJzID0KLQkJCW5ldyBJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIHsKLQkJCQluZXcgTG9jYWxMYXVuY2hQcm9qZWN0VGFiKCksCi0JCQkJbmV3IEphdmFBcmd1bWVudHNUYWIoKSwKLQkJCQluZXcgSmF2YUpSRVRhYigpLAotCQkJCW5ldyBKYXZhQ2xhc3NwYXRoVGFiKCksCi0JCQkJbmV3IFNvdXJjZUxvb2t1cFRhYigpLAkvLyBUT0RPIE5lZWQgdG8gc2VlIHdoeSBTb3VyY2VMb29rdXBUYWIgZGlkbid0IHdvcmsuIFVudGlsIHRoZW4gdXNlIHRoaXMuCi0JCQkJbmV3IEVudmlyb25tZW50VGFiKCksCi0JCQkJbmV3IENvbW1vblRhYigpfTsKLQkJc2V0VGFicyh0YWJzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9yZW1vdGUvUHJveHlSZW1vdGVVSU1lc3NhZ2VzLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvcmVtb3RlL1Byb3h5UmVtb3RlVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjIxMjZjLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9yZW1vdGUvUHJveHlSZW1vdGVVSU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamVtLmludGVybmFsLnVpLnByb3h5LnJlbW90ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBQcm94eVJlbW90ZVVJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmplbS5pbnRlcm5hbC51aS5wcm94eS5yZW1vdGUubWVzc2FnZXMiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgUHJveHlSZW1vdGVVSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMb2NhbExhdW5jaFByb2plY3RUYWJfbmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMb2NhbExhdW5jaFByb2plY3RUYWJfUHJvamVjdDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMb2NhbExhdW5jaFByb2plY3RUYWJfQnJvd3NlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExvY2FsTGF1bmNoUHJvamVjdFRhYl9Qcm9qZWN0X1NlbGVjdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMb2NhbExhdW5jaFByb2plY3RUYWJfQ2hvb3NlUHJvamVjdDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMb2NhbExhdW5jaFByb2plY3RUYWJfUHJvamVjdE5vdEV4aXN0X0VSUk9SXzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMb2NhbExhdW5jaFByb2plY3RUYWJfUHJvamVjdE5vdE9wZW5fRVJST1JfOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExvY2FsTGF1bmNoUHJvamVjdFRhYl9Qcm9qZWN0VmFsaWRhdGVFcnJvcl9FUlJPUl87Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBQcm94eVJlbW90ZVVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvcmVtb3RlL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9wbHVnaW5zL29yZy5lY2xpcHNlLmplbS51aS91aS9vcmcvZWNsaXBzZS9qZW0vaW50ZXJuYWwvdWkvcHJveHkvcmVtb3RlL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Y2EwMTIuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qZW0udWkvdWkvb3JnL2VjbGlwc2UvamVtL2ludGVybmFsL3VpL3Byb3h5L3JlbW90ZS9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgJFNvdXJjZTogL2N2c3Jvb3Qvd2VidG9vbHMvamVldG9vbHMubW92ZS93ZWJ0b29scy5qYXZhZWUuZ2l0L3BsdWdpbnMvb3JnLmVjbGlwc2UuamVtLnVpL3VpL29yZy9lY2xpcHNlL2plbS9pbnRlcm5hbC91aS9wcm94eS9yZW1vdGUvQXR0aWMvbWVzc2FnZXMucHJvcGVydGllcyx2ICQKLSMgJFJldmlzaW9uOiAxLjggJCAgJERhdGU6IDIwMDUvMDgvMjQgMjE6MDc6MTIgJAotIwotCi1Mb2NhbExhdW5jaFByb2plY3RUYWJfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgID0gJlByb2plY3QKLUxvY2FsTGF1bmNoUHJvamVjdFRhYl9Qcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgPSAmUHJvamVjdAotTG9jYWxMYXVuY2hQcm9qZWN0VGFiX0Jyb3dzZSAgICAgICAgICAgICAgICAgICAgICA9ICZCcm93c2UuLi4KLUxvY2FsTGF1bmNoUHJvamVjdFRhYl9Qcm9qZWN0X1NlbGVjdGlvbiAgICAgICAgICAgPSBQcm9qZWN0IFNlbGVjdGlvbgotTG9jYWxMYXVuY2hQcm9qZWN0VGFiX0Nob29zZVByb2plY3QgICAgICAgICAgICAgICA9IENob29zZSBhICZwcm9qZWN0IHRvIGZvciB0aGUgbGF1bmNoOgotTG9jYWxMYXVuY2hQcm9qZWN0VGFiX1Byb2plY3ROb3RFeGlzdF9FUlJPUl8gICAgICA9IElXQVYwMTc0RSBQcm9qZWN0ICJ7MH0iIGRvZXNuJyd0IGV4aXN0LgotTG9jYWxMYXVuY2hQcm9qZWN0VGFiX1Byb2plY3ROb3RPcGVuX0VSUk9SXyAgICAgICA9IElXQVYwMTc1RSBQcm9qZWN0ICJ7MH0iIGlzIG5vdCBvcGVuLgotTG9jYWxMYXVuY2hQcm9qZWN0VGFiX1Byb2plY3RWYWxpZGF0ZUVycm9yX0VSUk9SXyA9IElXQVYwMTc2RSBQcm9qZWN0IHZhbGlkYXRpb24gZXJyb3IuIE1zZyBpcyAiezB9LiIK