PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8IS0tIENvbnRlbnQgU3R5bGVzaGVldCBmb3IgU2l0ZSAtLT4KCiAgICAgICAgCjwhLS0gc3RhcnQgdGhlIHByb2Nlc3NpbmcgLS0+CiAgICA8aHRtbD4KICAgIDwhLS0gR0VORVJBVEVEIEZJTEUsIERPIE5PVCBFRElULCBFRElUIFRIRSBYTUwgRklMRSBJTiB4ZG9jcyBJTlNURUFEISAtLT4KICAgIDxoZWFkPgogICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIi8+CiAgCiAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJhdXRob3IiIHZhbHVlPSJDb25vciBNYWNOZWlsbCI+CiAgPG1ldGEgbmFtZT0iZW1haWwiIHZhbHVlPSIiPgogICAgICAgIAogICAgICA8dGl0bGU+QXBhY2hlIEFudCAtIEhhdmluZyBQcm9ibGVtcz88L3RpdGxlPgogICAgPC9oZWFkPgogIAogICAgPGJvZHkgYmdjb2xvcj0iI2ZmZmZmZiIgdGV4dD0iIzAwMDAwMCIgbGluaz0iIzUyNUQ3NiI+ICAgIAogICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiPgogICAgICAgIDwhLS0gVE9QIElNQUdFIC0tPgogICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+CiAgICA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnIj48aW1nIHNyYz0iaW1hZ2VzL2pha2FydGEtbG9nby5naWYiIGJvcmRlcj0iMCIvPjwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNkbWFnYXppbmUuY29tIj48aW1nIHNyYz0iaW1hZ2VzL3NkbV9wcm9kdWN0aXZpdHlfYXdhcmQuZ2lmIiBib3JkZXI9IjAiIGhlaWdodD0iNzUiIHdpZHRoPSIxMzUiLz48L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgPGEgaHJlZj0iaHR0cDovL3d3dy5qYXZhd29ybGQuY29tIj48aW1nIHNyYz0iaW1hZ2VzL2p3X2VjX2xvZ29fd2lubmVyMjAwMi5naWYiIGJvcmRlcj0iMCIgaGVpZ2h0PSI4NSIgd2lkdGg9IjIzMCIvPjwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249InJpZ2h0Ij4KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2FudC8iPjxpbWcgc3JjPSIuL2ltYWdlcy9hbnRfbG9nb19sYXJnZS5naWYiIGFsdD0iQXBhY2hlIEFudCIgYm9yZGVyPSIwIi8+PC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgogICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjQiPgogICAgICAgIDx0cj48dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgICA8aHIgbm9zaGFkZT0iIiBzaXplPSIxIi8+CiAgICAgICAgPC90ZD48L3RyPgogICAgICAgIAogICAgICAgIDx0cj4KICAgICAgICAgIDwhLS0gTEVGVCBTSURFIE5BVklHQVRJT04gLS0+CiAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkFwYWNoZSBBbnQ8L3N0cm9uZz48L3A+CiAgICA8dWw+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iLi9pbmRleC5odG1sIj5Gcm9udCBQYWdlPC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iLi9hbnRuZXdzLmh0bWwiPk5ld3M8L2E+CiAgPC9saT4KICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIuL21hbnVhbC9pbmRleC5odG1sIj5Eb2N1bWVudGF0aW9uPC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iLi9wcm9qZWN0cy5odG1sIj5SZWxhdGVkIFByb2plY3RzPC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iLi9leHRlcm5hbC5odG1sIj5FeHRlcm5hbCBUb29scyBhbmQgVGFza3M8L2E+CiAgPC9saT4KICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIuL3Jlc291cmNlcy5odG1sIj5SZXNvdXJjZXM8L2E+CiAgPC9saT4KICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIuL2ZhcS5odG1sIj5BbnQgRkFRPC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iLi9wcm9ibGVtcy5odG1sIj5IYXZpbmcgUHJvYmxlbXM/PC9hPgogIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPHA+PHN0cm9uZz5Eb3dubG9hZDwvc3Ryb25nPjwvcD4KICAgIDx1bD4KICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3NpdGUvYmluaW5kZXguaHRtbCI+QmluYXJpZXM8L2E+CiAgPC9saT4KICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3NpdGUvc291cmNlaW5kZXguaHRtbCI+U291cmNlIENvZGU8L2E+CiAgPC9saT4KICAgICAgICA8L3VsPgogICAgICA8cD48c3Ryb25nPkpha2FydGE8L3N0cm9uZz48L3A+CiAgICA8dWw+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zaXRlL25ld3MuaHRtbCI+TmV3cyAmIFN0YXR1czwvYT4KICA8L2xpPgogICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc2l0ZS9taXNzaW9uLmh0bWwiPk1pc3Npb248L2E+CiAgPC9saT4KICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3NpdGUvZ3VpZGVsaW5lcy5odG1sIj5HdWlkZWxpbmVzIE5vdGVzPC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zaXRlL2ZhcXMuaHRtbCI+RkFRczwvYT4KICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDxwPjxzdHJvbmc+R2V0IEludm9sdmVkPC9zdHJvbmc+PC9wPgogICAgPHVsPgogICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc2l0ZS9nZXRpbnZvbHZlZC5odG1sIj5PdmVydmlldzwvYT4KICA8L2xpPgogICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc2l0ZS9jdnNpbmRleC5odG1sIj5DVlMgUmVwb3NpdG9yaWVzPC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zaXRlL21haWwuaHRtbCI+TWFpbGluZyBMaXN0czwvYT4KICA8L2xpPgogICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc2l0ZS9saWJyYXJ5Lmh0bWwiPlJlZmVyZW5jZSBMaWJyYXJ5PC9hPgogIDwvbGk+CiAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BbnQiPkJ1ZyBEYXRhYmFzZTwvYT4KICA8L2xpPgogICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy9idWd6aWxsYS9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9QW50JmJ1Z19zZXZlcml0eT1FbmhhbmNlbWVudCI+RW5oYW5jZW1lbnQgUmVxdWVzdHM8L2E+CiAgPC9saT4KICAgICAgICA8L3VsPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CiAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+PHRkIGJnY29sb3I9IiM1MjVENzYiPgogICAgICA8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICA8YSBuYW1lPSJIYXZpbmcgUHJvYmxlbXM/Ij48c3Ryb25nPkhhdmluZyBQcm9ibGVtcz88L3N0cm9uZz48L2E+CiAgICAgIDwvZm9udD4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICBUaGlzIHBhZ2UgZGV0YWlscyBzb21lIHN0ZXBzIHlvdSBjYW4gdGFrZSB0byB0cnkgYW5kIHJlc29sdmUKICAgICAgICAgICBhbnkgcHJvYmxlbXMgeW91IG1heSBiZSBoYXZpbmcgd2l0aCBBbnQuIElmIHlvdSBmaW5kIHlvdSBjYW4ndAogICAgICAgICAgIHJlc29sdmUgdGhlIHByb2JsZW0sIHRoZW4gdGhpcyBwYWdlIHdpbGwgaGVscCB5b3UgY29sbGVjdCBzb21lIG9mCiAgICAgICAgICAgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIHRvIHByb3ZpZGUgaW4gYSBidWcgcmVwb3J0LiBUaGlzIGluZm9ybWF0aW9uCiAgICAgICAgICAgd2lsbCBoZWxwIHRoZSBBbnQgZGV2ZWxvcGVycyB1bmRlcnN0YW5kIGFuZCByZXNvbHZlIHRoZSBwcm9ibGVtLgogICAgICAgICAgIE9mIGNvdXJzZSwgbm90IGFsbCB0aGUgc3RlcHMgaGVyZSB3aWxsIG1ha2Ugc2Vuc2UgZm9yIGV2ZXJ5IHByb2JsZW0KICAgICAgICAgICB5b3UgbWF5IGVuY291bnRlciAtIHRoZXNlIGFyZSBqdXN0IHNvbWUgc3VnZ2VzdGlvbnMgdG8gcG9pbnQKICAgICAgICAgICB5b3UgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj48dGQgYmdjb2xvcj0iIzgyOERBNiI+CiAgICAgIDxmb250IGNvbG9yPSIjZmZmZmZmIiBmYWNlPSJhcmlhbCxoZWx2ZXRpY2Esc2Fuc2VyaWYiPgogICAgICAgIDxhIG5hbWU9IlJlYWQgdGhlIE1hbnVhbCI+PHN0cm9uZz5SZWFkIHRoZSBNYW51YWw8L3N0cm9uZz48L2E+CiAgICAgIDwvZm9udD4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgVGhlIGZpcnN0IHN0ZXAgdG8gdGFrZSB3aGVuIHlvdSBoYXZlIGEgcHJvYmxlbSB3aXRoIEFudCBpcyB0byByZWFkCiAgICAgICAgICAgIHRoZSA8YSBocmVmPSJtYW51YWwvaW5kZXguaHRtbCI+bWFudWFsPC9hPiBlbnRyeSBmb3IgdGhlIHRhc2sgb3IKICAgICAgICAgICAgY29uY2VwdCB0aGF0IGlzIGdpdmluZyB5b3UgdHJvdWJsZS4gSW4gcGFydGljdWxhciwgY2hlY2sgdGhlCiAgICAgICAgICAgIG1lYW5pbmcgb2YgYSB0YXNrJ3MgYXR0cmlidXRlcyBhbmQgbmVzdGVkIGVsZW1lbnRzLiBQZXJoYXBzIGFuCiAgICAgICAgICAgIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgdGhhdCB3b3VsZCBwcm92aWRlIHRoZSBiZWhhdmlvciB5b3UgcmVxdWlyZS4KICAgICAgICAgICAgSWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGUgbWFudWFsIGl0c2VsZiwgeW91IGNhbiBzdWJtaXQgYQogICAgICAgICAgICBkb2N1bWVudGF0aW9uIGJ1ZyByZXBvcnQgKHNlZSBiZWxvdykgdG8gaGVscCB1cyBpbXByb3ZlIHRoZSBBbnQKICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgIDwvdGQ+PC90cj4KICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+PHRkIGJnY29sb3I9IiM4MjhEQTYiPgogICAgICA8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICA8YSBuYW1lPSJFeGFtaW5lIERlYnVnIE91dHB1dCI+PHN0cm9uZz5FeGFtaW5lIERlYnVnIE91dHB1dDwvc3Ryb25nPjwvYT4KICAgICAgPC9mb250PgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD4KICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3UncmUgc3RpbGwgaGF2aW5nIGEgcHJvYmxlbSwgdGhlIG5leHQgc3RlcCBpcyB0byB0cnkgYW5kCiAgICAgICAgICAgIGdhdGhlciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgQW50IGlzIGRvaW5nLgogICAgICAgICAgICBUcnkgcnVubmluZyBBbnQgd2l0aCB0aGUgPGNvZGU+dmVyYm9zZTwvY29kZT4gZmxhZzoKICAgICAgICAgICAgPGJyIC8+PGJyIC8+CiAgICAgICAgICAgIDxmb250IGZhY2U9InZlcmRhbmEiIHNpemU9Ii0xIj5hbnQgLXZlcmJvc2U8L2ZvbnQ+CiAgICAgICAgICAgIDxiciAvPjxiciAvPgogICAgICAgICAgICBvcgogICAgICAgICAgICA8YnIgLz48YnIgLz4KICAgICAgICAgICAgPGZvbnQgZmFjZT0idmVyZGFuYSIgc2l6ZT0iLTEiPmFudCAtdjwvZm9udD4KICAgICAgICAgICAgPGJyIC8+PGJyIC8+CiAgICAgICAgICAgCiAgICAgICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIG91dHB1dCB0aGF0IHN0YXJ0cyBsaWtlIHRoZSBmb2xsb3dpbmc6PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNhMGRkZjAiIGNvbHNwYW49IiIgcm93c3Bhbj0iIiAKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgIDxmb250IGNvbG9yPSIjMDAwMDAwIiBzaXplPSItMSIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICAgIApBbnQgdmVyc2lvbiAxLjQuMSBjb21waWxlZCBvbiBPY3RvYmVyIDExIDIwMDE8YnIgLz4KQnVpbGRmaWxlOiBidWlsZC54bWw8YnIgLz4KRGV0ZWN0ZWQgSmF2YSB2ZXJzaW9uOiAxLjMgaW46IEQ6XHVzclxsb2NhbFxqYXZhXGpkazEzXGpyZTxiciAvPgpEZXRlY3RlZCBPUzogV2luZG93cyBOVDxiciAvPgpwYXJzaW5nIGJ1aWxkZmlsZSBEOlxhbnRcYnVpbGQueG1sCndpdGggVVJJID0gZmlsZTpEOi9hbnQvYnVpbGQueG1sPGJyIC8+ClByb2plY3QgYmFzZSBkaXIgc2V0IHRvOiBEOlxhbnQ8YnIgLz4KoKBbcHJvcGVydHldIExvYWRpbmcgRW52aXJvbm1lbnQgZW52LjxiciAvPgqgoFtwcm9wZXJ0eV0gTG9hZGluZyBEOlxhbnRcY29uZi5wcm9wZXJ0aWVzPGJyIC8+CkJ1aWxkIHNlcXVlbmNlIGZvciB0YXJnZXQgJ2RlYnVnJyBpcyBbZGVidWddPGJyIC8+CkNvbXBsZXRlIGJ1aWxkIHNlcXVlbmNlIGlzIFtkZWJ1ZywgZ2Vuc3JjLCBjb21waWxlLCBqYXIsIHRlc3RdPGJyIC8+Ci4gLiAuPGJyIC8+CgogICAgICAgIDwvZm9udD4KICA8L3RkPgogICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhYmxlIHRvIHNlZSBmcm9tIHRoZSB0cmFjZSBtb3JlIGFib3V0IHdoYXQgQW50CiAgICAgICAgICAgICAgaXMgZG9pbmcgYW5kIHdoeSBpdCdzIHRha2luZyBhIHBhcnRpY3VsYXIgY291cnNlIG9mIGFjdGlvbi4KICAgICAgICAgICAgICBJZiB5b3UgbmVlZCBldmVuIG1vcmUgaW5mb3JtYXRpb24sIHlvdSBjYW4gdXNlIHRoZQogICAgICAgICAgICAgIDxub2JyPjxjb2RlPi1kZWJ1ZzwvY29kZT48L25vYnI+IGZsYWcgcmF0aGVyIHRoYW4KICAgICAgICAgICAgICA8bm9icj48Y29kZT4tdmVyYm9zZTwvY29kZT48L25vYnI+LgogICAgICAgICAgICAgIFRoaXMgd2lsbCBnZW5lcmFsbHkgcHJvZHVjZSBzbyBtdWNoCiAgICAgICAgICAgICAgb3V0cHV0IHRoYXQgeW91IG1heSB3YW50IHRvIHNhdmUgdGhlIG91dHB1dCB0byBhIGZpbGUgYW5kCiAgICAgICAgICAgICAgYW5hbHl6ZSBpdCBpbiBhbiBlZGl0b3IuIFlvdSBjYW4gc2F2ZSB0aGUgb3V0cHV0IHVzaW5nIHRoZQogICAgICAgICAgICAgIDxub2JyPjxjb2RlPi1sb2dmaWxlICZsdDtmaWxlbmFtZSZndDs8L2NvZGU+PC9ub2JyPiBmbGFnLCBvcgogICAgICAgICAgICAgIHVzaW5nIHJlZGlyZWN0aW9uLgogICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGFsbCB0aGlzIGRlYnVnIGluZm9ybWF0aW9uLCBob3cgY2FuIHlvdSB1c2UgaXQKICAgICAgICAgICAgICB0byBzb2x2ZSB5b3VyIHByb2JsZW0/ICBUaGF0IHdpbGwgZGVwZW5kIG9uIHRoZSB0YXNrIGluIHF1ZXN0aW9uCiAgICAgICAgICAgICAgYW5kIHRoZSBuYXR1cmUgb2YgeW91ciBwcm9ibGVtLiBFYWNoIHRhc2sgbG9ncyBkaWZmZXJlbnQgYXNwZWN0cwogICAgICAgICAgICAgIG9mIGl0cyBvcGVyYXRpb24sIGJ1dCBpdCBzaG91bGQgZ2l2ZSB5b3UgYW4gaWRlYSBvZiB3aGF0IGlzIGdvaW5nCiAgICAgICAgICAgICAgb24uIEZvciBleGFtcGxlLCB0aGUgPGNvZGU+Jmx0O2phdmFjJmd0OzwvY29kZT4gdGFzayBsb2dzIHRoZQogICAgICAgICAgICAgIHJlYXNvbnMgd2h5IGl0CiAgICAgICAgICAgICAgY2hvb3NlcyB0byBjb21waWxlIHBhcnRpY3VsYXIgY2xhc3MgZmlsZXMgYW5kIG5vdCBvdGhlcnMsIGFsb25nCiAgICAgICAgICAgICAgd2l0aCB3aGljaCBjb21waWxlciBpdCBpcyB1c2luZyBhbmQgdGhlIGFyZ3VtZW50cyBpdCB3aWxsIHBhc3MKICAgICAgICAgICAgICB0byB0aGF0IGNvbXBpbGVyLiBUaGUgZm9sbG93aW5nIHBhcnRpYWwgdHJhY2Ugc2hvd3Mgd2h5CiAgICAgICAgICAgICAgPGNvZGU+Jmx0O2phdmFjJmd0OzwvY29kZT4gaXMgYWRkaW5nIG9uZSBjbGFzcyBmaWxlIGJ1dAogICAgICAgICAgICAgIHNraXBwaW5nIGFub3RoZXIuCiAgICAgICAgICAgICAgVGhpcyBpcyBmb2xsb3dlZCBieSB3aGljaCBjb21waWxlciBpdCB3aWxsIGJlIHVzaW5nLCB0aGUKICAgICAgICAgICAgICBhcmd1bWVudHMgdGhhdCB3aWxsIGdldCBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLAogICAgICAgICAgICAgIGFuZCBhIGxpc3Qgb2YgYWxsIHRoZSBjbGFzcyBmaWxlcyB0byBiZSBjb21waWxlZC4gCiAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNhMGRkZjAiIGNvbHNwYW49IiIgcm93c3Bhbj0iIiAKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgIDxmb250IGNvbG9yPSIjMDAwMDAwIiBzaXplPSItMSIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICAgIApbamF2YWNdIFRlc3QuamF2YSBvbWl0dGVkIGFzIEQ6XGNsYXNzZXNcVGVzdC5jbGFzcyBpcyB1cCB0byBkYXRlLjxiciAvPgpbamF2YWNdIFVuc2V0LmphdmEgYWRkZWQgYXMgRDpcY2xhc3Nlc1xVbnNldC5jbGFzcyBpcyBvdXRkYXRlZC48YnIgLz4KW2phdmFjXSBDb21waWxpbmcgMSBzb3VyY2UgZmlsZSB0byBEOlxjbGFzc2VzPGJyIC8+CltqYXZhY10gVXNpbmcgY2xhc3NpYyBjb21waWxlcjxiciAvPgpbamF2YWNdIENvbXBpbGF0aW9uIGFyZ3M6IC1kIEQ6XGNsYXNzZXMgLWNsYXNzcGF0aCBEOlxjbGFzc2VzOzxiciAvPgpEOlxqZGsxMThcY2xhc3Nlcy56aXA7IC1zb3VyY2VwYXRoIEQ6XHNyY1xqYXZhIC1nOm5vbmU8YnIgLz4KW2phdmFjXSBGaWxlIHRvIGJlIGNvbXBpbGVkOjxiciAvPgpEOlxzcmNcamF2YVxVbnNldC5qYXZhPGJyIC8+CgogICAgICAgIDwvZm9udD4KICA8L3RkPgogICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSW4gbWFueSBjYXNlcywgQW50IHRhc2tzIGFyZSB3cmFwcGVycyBhcm91bmQgT1MgY29tbWFuZHMgb3IKICAgICAgICAgICAgICBvdGhlciBKYXZhIGNsYXNzZXMuIEluIGRlYnVnIG1vZGUsIG1hbnkgb2YgdGhlc2UgdGFza3Mgd2lsbAogICAgICAgICAgICAgIHByaW50IG91dCB0aGUgZXF1aXZhbGVudCBjb21tYW5kIGxpbmUsIGFzIHRoZQogICAgICAgICAgICAgIDxjb2RlPiZsdDtqYXZhYyZndDs8L2NvZGU+IHRhc2sKICAgICAgICAgICAgICBvdXRwdXQgZG9lcy4gSWYgeW91IGFyZSBoYXZpbmcgYSBwcm9ibGVtLCBpdCBpcyBvZnRlbiB1c2VmdWwgdG8KICAgICAgICAgICAgICBydW4gdGhlIGNvbW1hbmQgZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBpbiB0aGUgc2FtZSB3YXkKICAgICAgICAgICAgICBBbnQgaXMgcnVubmluZyBpdCwgYW5kIHNlZSBpZiB0aGUgcHJvYmxlbSBvY2N1cnMgZnJvbSB0aGVyZQogICAgICAgICAgICAgIGFzIHdlbGwuIFRoZSBwcm9ibGVtIG1heSBiZSBpbiB0aGUgY29tbWFuZCB0aGF0IGlzIGJlaW5nIHJ1biwKICAgICAgICAgICAgICBvciBpdCBtYXkgYmUgaW4gdGhlIHdheSB0aGUgQW50IHRhc2sgaXMgcnVubmluZyB0aGUgY29tbWFuZC4KICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZSBlZmZlY3Qgb2YgY2hhbmdpbmcgYXR0cmlidXRlIHZhbHVlcyBvbiB0aGUKICAgICAgICAgICAgICBnZW5lcmF0ZWQgY29tbWFuZCBsaW5lLiBUaGlzIGNhbiBoZWxwIHlvdSB0byB1bmRlcnN0YW5kIHdoZXRoZXIKICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IGF0dHJpYnV0ZXMgYW5kIHZhbHVlcy4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgIDwvdGQ+PC90cj4KICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+PHRkIGJnY29sb3I9IiM4MjhEQTYiPgogICAgICA8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICA8YSBuYW1lPSJIYXMgSXQgQmVlbiBGaXhlZD8iPjxzdHJvbmc+SGFzIEl0IEJlZW4gRml4ZWQ/PC9zdHJvbmc+PC9hPgogICAgICA8L2ZvbnQ+CiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPgogICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIEFmdGVyIGV4YW1pbmluZyB0aGUgZGVidWcgb3V0cHV0LCBpZiB5b3Ugc3RpbGwgYmVsaWV2ZSB0aGF0IHRoZQogICAgICAgICAgICBwcm9ibGVtIHlvdSBhcmUgaGF2aW5nIGlzIGNhdXNlZCBieSBBbnQsIGNoYW5jZXMgYXJlIHRoYXQgc29tZW9uZQogICAgICAgICAgICBlbHNlIG1heSBoYXZlIGFscmVhZHkgZW5jb3VudGVyZWQgdGhpcyBwcm9ibGVtLCBhbmQgcGVyaGFwcyBpdCBoYXMKICAgICAgICAgICAgYmVlbiBmaXhlZC4gVGhlIG5leHQgc3RlcCwgdGhlcmVmb3JlLCBtYXkgYmUgdG8gdHJ5IGEgbmlnaHRseSBidWlsZAogICAgICAgICAgICBvZiBBbnQgdG8gc2VlIGlmIHRoZSBwcm9ibGVtIGhhcyBiZWVuIGZpeGVkLiBOaWdodGx5IGJ1aWxkcyBmb3IgQW50CiAgICAgICAgICAgIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L2pha2FydGEvamFrYXJ0YS1hbnQvbmlnaHRseS8iPgogICAgICAgICAgICBKYWthcnRhIHdlYiBzaXRlPC9hPi4gV2hpbGUgQW50IG5pZ2h0bHkgYnVpbGRzIGFyZSB0eXBpY2FsbHkgcXVpdGUKICAgICAgICAgICAgc3RhYmxlIGFuZCBhcmUgdXNlZCBieQogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9qYWthcnRhL2d1bXAvbGF0ZXN0LyI+R3VtcDwvYT4KICAgICAgICAgICAgdG8gYnVpbGQgbWFueSBvdGhlciBKYWthcnRhIHByb2plY3RzLCB0aGVzZSBidWlsZHMgc2hvdWxkCiAgICAgICAgICAgIG5vbmV0aGVsZXNzIGJlIHRyZWF0ZWQgYXMgZXhwZXJpbWVudGFsLiBOb3RlIHRoYXQgbmlnaHRseSBidWlsZHMKICAgICAgICAgICAgZG8gbm90IGJ1aWxkIG1hbnkgb2YgdGhlIG9wdGlvbmFsIHRhc2tzIHRoZSBjb21lIHdpdGggQW50LgogICAgICAgICAgICBBIHNuYXBzaG90IG9mIHRoZXNlIG9wdGlvbmFsIHRhc2tzIGlzIG9jY2FzaW9uYWxseSB1cGxvYWRlZCB0bwogICAgICAgICAgICB0aGUgbmlnaHRseSBkb3dubG9hZAogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9qYWthcnRhL2pha2FydGEtYW50L25pZ2h0bHkvb3B0aW9uYWwvIj4KICAgICAgICAgICAgYXJlYTwvYT4uIEhvd2V2ZXIsIGV2ZW4gdGhpcyBzbmFwc2hvdCBkb2VzIG5vdCBjb250YWluIGV2ZXJ5CiAgICAgICAgICAgIG9wdGlvbmFsIHRhc2suCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgIDwvdGQ+PC90cj4KICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+PHRkIGJnY29sb3I9IiM4MjhEQTYiPgogICAgICA8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICA8YSBuYW1lPSJIYXMgSXQgQmVlbiBSZXBvcnRlZD8iPjxzdHJvbmc+SGFzIEl0IEJlZW4gUmVwb3J0ZWQ/PC9zdHJvbmc+PC9hPgogICAgICA8L2ZvbnQ+CiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPgogICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHRoZSBjdXJyZW50IG5pZ2h0bHkgYnVpbGQgZG9lc24ndCByZXNvbHZlIHlvdXIgcHJvYmxlbSwgaXQgaXMKICAgICAgICAgICAgcG9zc2libGUgdGhhdCBzb21lb25lIGVsc2UgaGFzIHJlcG9ydGVkIHRoZSBpc3N1ZS4gSXQgaXMgdGltZSB0bwogICAgICAgICAgICBsb29rIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vbmFnb3lhLmFwYWNoZS5vcmcvYnVnemlsbGEvIj4KICAgICAgICAgICAgQXBhY2hlIEJ1ZyBEYXRhYmFzZTwvYT4uICBUaGlzIHN5c3RlbSBpcyBlYXN5IHRvIHVzZSwgYW5kIGl0IHdpbGwKICAgICAgICAgICAgbGV0IHlvdSBzZWFyY2ggdGhlIDxhIGhyZWY9Imh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPVVOQ09ORklSTUVEJmFtcDtidWdfc3RhdHVzPU5FVyZhbXA7YnVnX3N0YXR1cz1BU1NJR05FRCZhbXA7YnVnX3N0YXR1cz1SRU9QRU5FRCZhbXA7ZW1haWwxPSZhbXA7ZW1haWx0eXBlMT1zdWJzdHJpbmcmYW1wO2VtYWlsYXNzaWduZWRfdG8xPTEmYW1wO2VtYWlsMj0mYW1wO2VtYWlsdHlwZTI9c3Vic3RyaW5nJmFtcDtlbWFpbHJlcG9ydGVyMj0xJmFtcDtidWdpZHR5cGU9aW5jbHVkZSZhbXA7YnVnX2lkPSZhbXA7Y2hhbmdlZGluPSZhbXA7dm90ZXM9JmFtcDtjaGZpZWxkZnJvbT0mYW1wO2NoZmllbGR0bz1Ob3cmYW1wO2NoZmllbGR2YWx1ZT0mYW1wO3Byb2R1Y3Q9QW50JmFtcDtzaG9ydF9kZXNjPSZhbXA7c2hvcnRfZGVzY190eXBlPXN1YnN0cmluZyZhbXA7bG9uZ19kZXNjPSZhbXA7bG9uZ19kZXNjX3R5cGU9c3Vic3RyaW5nJmFtcDtidWdfZmlsZV9sb2M9JmFtcDtidWdfZmlsZV9sb2NfdHlwZT1zdWJzdHJpbmcmYW1wO2tleXdvcmRzPSZhbXA7a2V5d29yZHNfdHlwZT1hbnl3b3JkcyZhbXA7ZmllbGQwLTAtMD1ub29wJmFtcDt0eXBlMC0wLTA9bm9vcCZhbXA7dmFsdWUwLTAtMD0mYW1wO29yZGVyPWJ1Z3MuYnVnX2lkIj4KICAgICAgICAgICAgY3VycmVudGx5IG9wZW48L2E+IGFuZCByZXNvbHZlZCBidWdzIHRvIHNlZSBpZiB5b3VyIHByb2JsZW0gaGFzCiAgICAgICAgICAgIGFscmVhZHkgYmVlbiByZXBvcnRlZC4gSWYgeW91ciBwcm9ibGVtIGhhcyBiZWVuIHJlcG9ydGVkLCB5b3UgY2FuCiAgICAgICAgICAgIHNlZSB3aGV0aGVyIGFueSBvZiB0aGUgZGV2ZWxvcGVycyBoYXZlIGNvbW1lbnRlZCwgc3VnZ2VzdGluZwogICAgICAgICAgICB3b3JrYXJvdW5kcywgb3IgdGhlIHJlYXNvbiBmb3IgdGhlIGJ1ZywgZXRjLiBPciB5b3UgbWF5IGhhdmUKICAgICAgICAgICAgaW5mb3JtYXRpb24gdG8gYWRkIChzZWUgYWJvdXQgY3JlYXRpbmcgYW5kIG1vZGlmeWluZyBidWcgcmVwb3J0cwogICAgICAgICAgICBiZWxvdyksIGluIHdoaWNoIGNhc2UsIGdvIHJpZ2h0IGFoZWFkIGFuZCBhZGQgdGhlIGluZm9ybWF0aW9uLgogICAgICAgICAgICBJZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgeW91IG1heSBqdXN0IHdhbnQKICAgICAgICAgICAgdG8gdm90ZSBmb3IgdGhpcyBidWcsIGFuZCBwZXJoYXBzCiAgICAgICAgICAgIGFkZCB5b3Vyc2VsZiB0byB0aGUgPGNvZGU+Q0M8L2NvZGU+IGxpc3QgdG8gZm9sbG93IHRoZSBwcm9ncmVzcwogICAgICAgICAgICBvZiB0aGlzIGJ1Zy4KICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgIDwvdGQ+PC90cj4KICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+PHRkIGJnY29sb3I9IiM4MjhEQTYiPgogICAgICA8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iYXJpYWwsaGVsdmV0aWNhLHNhbnNlcmlmIj4KICAgICAgICA8YSBuYW1lPSJGaWxpbmcgYSBCdWcgUmVwb3J0Ij48c3Ryb25nPkZpbGluZyBhIEJ1ZyBSZXBvcnQ8L3N0cm9uZz48L2E+CiAgICAgIDwvZm9udD4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgQnkgdGhpcyB0aW1lLCB5b3UgbWF5IGhhdmUgZGVjaWRlZCB0aGF0IHRoZXJlIGlzIGFuIHVucmVwb3J0ZWQKICAgICAgICAgICAgYnVnIGluIEFudC4gWW91IGhhdmUgYSBmZXcgY2hvaWNlcyBhdCB0aGlzIHBvaW50LiBZb3UgY2FuIHNlbmQKICAgICAgICAgICAgYW4gZW1haWwgdG8gdGhlIDxub2JyPjxjb2RlPmFudC11c2VyPC9jb2RlPjwvbm9icj4gbWFpbGluZyBsaXN0CiAgICAgICAgICAgIHRvIHNlZSBpZgogICAgICAgICAgICBvdGhlcnMgaGF2ZSBlbmNvdW50ZXJlZCB5b3VyIGlzc3VlIGFuZCBmaW5kIG91dCBob3cgdGhleSBtYXkKICAgICAgICAgICAgaGF2ZSB3b3JrZWQgYXJvdW5kIGl0LiBJZiBhZnRlciBzb21lIGRpc2N1c3Npb24sIHlvdSBmZWVsIGl0CiAgICAgICAgICAgIGlzIHRpbWUgdG8gY3JlYXRlCiAgICAgICAgICAgIGEgYnVnIHJlcG9ydCwgdGhpcyBpcyBhIHNpbXBsZSBvcGVyYXRpb24gaW4gdGhlIGJ1ZyBkYXRhYmFzZS4KICAgICAgICAgICAgUGxlYXNlIHRyeSB0byBwcm92aWRlIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgaW4gb3JkZXIKICAgICAgICAgICAgdG8gYXNzaXN0IHRoZSBkZXZlbG9wZXJzIGluIHJlc29sdmluZyB0aGUgYnVnLiBQbGVhc2UgdHJ5IHRvIGVudGVyCiAgICAgICAgICAgIGNvcnJlY3QgdmFsdWVzIGZvciB0aGUgdmFyaW91cyBpbnB1dHMgd2hlbiBjcmVhdGluZyB0aGUgYnVnLCBzdWNoCiAgICAgICAgICAgIGFzIHdoaWNoIHZlcnNpb24gb2YgQW50IHlvdSBhcmUgcnVubmluZywgYW5kIG9uIHdoaWNoIHBsYXRmb3JtLAogICAgICAgICAgICBldGMuIE9uY2UgdGhlIGJ1ZyBpcyBjcmVhdGVkLCB5b3UgY2FuIGFsc28gYWRkIGF0dGFjaG1lbnRzIHRvCiAgICAgICAgICAgIHRoZSBidWcgcmVwb3J0LiAKICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiAKICAgICAgICAgICAgV2hhdCBpbmZvcm1hdGlvbiBzaG91bGQgeW91IGluY2x1ZGUgaW4geW91ciBidWcgcmVwb3J0PyBUaGUKICAgICAgICAgICAgZWFzaWVzdCBidWdzIHRvIGZpeCBhcmUgdGhvc2UgdGhhdCBhcmUgbW9zdCBlYXNpbHkgcmVwcm9kdWNpYmxlLAogICAgICAgICAgICBzbyBpdCBpcyByZWFsbHkgaGVscGZ1bCBpZiB5b3UgY2FuIHByb2R1Y2UgYSBzbWFsbCB0ZXN0IGNhc2UgdGhhdAogICAgICAgICAgICBleGhpYml0cyB0aGUgcHJvYmxlbS4gSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgYXR0YWNoIHRoZSBidWlsZCBmaWxlCiAgICAgICAgICAgIGFuZCBhbnkgb3RoZXIgZmlsZXMgbmVjZXNzYXJ5IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSwgcHJvYmFibHkKICAgICAgICAgICAgcGFja2VkIHRvZ2V0aGVyIGluIGFuIGFyY2hpdmUuIElmIHlvdSBjYW4ndCBwcm9kdWNlIGEgdGVzdCBjYXNlLAogICAgICAgICAgICB5b3Ugc2hvdWxkIHRyeSB0byBpbmNsdWRlIGEgc25pcHBldCBmcm9tIHlvdXIgYnVpbGQgZmlsZSBhbmQgdGhlCiAgICAgICAgICAgIHJlbGV2YW50IHNlY3Rpb25zIGZyb20gdGhlIHZlcmJvc2Ugb3IgZGVidWcgb3V0cHV0IGZyb20gQW50LiBUcnkKICAgICAgICAgICAgdG8gaW5jbHVkZSB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIHdoZXJlIEFudCBzdGF0ZXMgdGhlIHZlcnNpb24sCiAgICAgICAgICAgIHRoZSBPUyBhbmQgVk0gaW5mb3JtYXRpb24sIGV0Yy4gQXMgZGVidWcgb3V0cHV0IGlzIGxpa2VseSB0byBiZQogICAgICAgICAgICB2ZXJ5IGxhcmdlLCBpdCdzIGJlc3QgdG8gcmVtb3ZlIGFueSBvdXRwdXQgdGhhdCBpcyBub3QKICAgICAgICAgICAgcmVsZXZhbnQuIE9uY2UgdGhlIGJ1ZyBpcyBlbnRlcmVkIGludG8gdGhlIGJ1ZyBkYXRhYmFzZSwgeW91CiAgICAgICAgICAgIHdpbGwgYmUga2VwdCBpbmZvcm1lZCBieSBlbWFpbCBhYm91dCBwcm9ncmVzcyBvbiB0aGUgYnVnLiBJZgogICAgICAgICAgICB5b3UgcmVjZWl2ZSBlbWFpbCBhc2tpbmcgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHBsZWFzZSB0cnkgdG8KICAgICAgICAgICAgcmVzcG9uZCwgYXMgaXQgd2lsbCBhaWQgaW4gdGhlIHJlc29sdXRpb24gb2YgeW91ciBidWcuCiAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICA8L3RkPjwvdHI+CiAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPgogICAgPHRyPjx0ZCBiZ2NvbG9yPSIjODI4REE2Ij4KICAgICAgPGZvbnQgY29sb3I9IiNmZmZmZmYiIGZhY2U9ImFyaWFsLGhlbHZldGljYSxzYW5zZXJpZiI+CiAgICAgICAgPGEgbmFtZT0iQXNraW5nIGZvciBhbiBFbmhhbmNlbWVudCI+PHN0cm9uZz5Bc2tpbmcgZm9yIGFuIEVuaGFuY2VtZW50PC9zdHJvbmc+PC9hPgogICAgICA8L2ZvbnQ+CiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPgogICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIFNvbWV0aW1lcywgeW91IG1heSBmaW5kIHRoYXQgQW50IGp1c3QgZG9lc24ndCBkbyB3aGF0IHlvdSBuZWVkIGl0CiAgICAgICAgICAgIHRvLiBJdCBpc24ndCBhIGJ1ZywgYXMgc3VjaCwgc2luY2UgQW50IGlzIHdvcmtpbmcgdGhlIHdheSBpdCBpcwogICAgICAgICAgICBzdXBwb3NlZCB0byB3b3JrLiBQZXJoYXBzIGl0IGlzIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IGZvcgogICAgICAgICAgICBhIHRhc2sgdGhhdCBoYXNuJ3QgYmVlbiB0aG91Z2h0IG9mIHlldCwgb3IgbWF5YmUgYSBjb21wbGV0ZWx5IG5ldwogICAgICAgICAgICB0YXNrLiBGb3IgdGhlc2Ugc2l0dWF0aW9ucywgeW91IHdpbGwKICAgICAgICAgICAgd2FudCB0byByYWlzZSBhbiA8aT5lbmhhbmNlbWVudCByZXF1ZXN0PC9pPi4gRW5oYW5jZW1lbnQgcmVxdWVzdHMKICAgICAgICAgICAgYXJlIG1hbmFnZWQgdXNpbmcgdGhlIHNhbWUgQXBhY2hlIEJ1ZyBEYXRhYmFzZSBkZXNjcmliZWQgYWJvdmUuCiAgICAgICAgICAgIFRoZXNlIGFyZSBqdXN0IGEgZGlmZmVyZW50IHR5cGUgb2YgYnVnIHJlcG9ydC4gSWYgeW91IGxvb2sgaW4gdGhlCiAgICAgICAgICAgIGJ1ZyBkYXRhYmFzZSwgeW91IHdpbGwgc2VlIHRoYXQgb25lIG9mIHRoZSBzZXZlcml0eSBzZXR0aW5ncyBmb3IKICAgICAgICAgICAgYSBidWcgaXMgIkVuaGFuY2VtZW50Ii4gSnVzdCBmaWxsIHRoZSBidWcgcmVwb3J0IGluLAogICAgICAgICAgICBzZXQgdGhlIHNldmVyaXR5IG9mIHRoZSBidWcgdG8gIkVuaGFuY2VtZW50IiwgYW5kIAogICAgICAgICAgICBzdGF0ZSBpbiB0aGUgZGVzY3JpcHRpb24gaG93IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgQW50IGVuaGFuY2VkLgogICAgICAgICAgICBBZ2FpbiwgeW91IHNob3VsZCBmaXJzdCBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcKICAgICAgICAgICAgZW5oYW5jbWVudCByZXF1ZXN0cyB0aGF0IGNvdmVyIHlvdXIgbmVlZHMuIElmIHNvLCBqdXN0IGFkZCB5b3VyCiAgICAgICAgICAgIHZvdGUgdG8gdGhlc2UuCiAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICA8L3RkPjwvdHI+CiAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPgogICAgPHRyPjx0ZCBiZ2NvbG9yPSIjODI4REE2Ij4KICAgICAgPGZvbnQgY29sb3I9IiNmZmZmZmYiIGZhY2U9ImFyaWFsLGhlbHZldGljYSxzYW5zZXJpZiI+CiAgICAgICAgPGEgbmFtZT0iRml4aW5nIHRoZSBCdWciPjxzdHJvbmc+Rml4aW5nIHRoZSBCdWc8L3N0cm9uZz48L2E+CiAgICAgIDwvZm9udD4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgSWYgeW91IGFyZW4ndCBzYXRpc2ZpZWQgd2l0aCBqdXN0IGZpbGluZyBhIGJ1ZyByZXBvcnQsIHlvdSBjYW4KICAgICAgICAgICAgdHJ5IHRvIGZpbmQgdGhlIGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBwcm92aWRlIGEgZml4IHlvdXJzZWxmLgogICAgICAgICAgICBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyBieSB3b3JraW5nIHdpdGggdGhlIGxhdGVzdCBjb2RlIGZyb20gQ1ZTLgogICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHdvcmsgd2l0aCB0aGUgc291cmNlIGNvZGUgYXZhaWxhYmxlIGZyb20gdGhlCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvYnVpbGRzL2pha2FydGEtYW50L3JlbGVhc2UvdjEuNC4xL3NyYy8iPgogICAgICAgICAgICBzb3VyY2UgZGlzdHJpYnV0aW9uczwvYT4uIElmIHlvdQogICAgICAgICAgICBhcmUgZ29pbmcgdG8gdGFja2xlIHRoZSBwcm9ibGVtIGF0IHRoaXMgbGV2ZWwsIHlvdSBtYXkgd2FudCB0bwogICAgICAgICAgICBkaXNjdXNzIHNvbWUgZGV0YWlscyBmaXJzdCBvbiB0aGUgPG5vYnI+PGNvZGU+YW50LWRldjwvY29kZT48L25vYnI+CiAgICAgICAgICAgIG1haWxpbmcgbGlzdC4gT25jZSB5b3UgaGF2ZSBhIGZpeCBmb3IgdGhlIHByb2JsZW0sIHlvdSBtYXkgc3VibWl0CiAgICAgICAgICAgIHRoZSBmaXggYXMgYSA8aT5wYXRjaDwvaT4gdG8gZWl0aGVyIHRoZQogICAgICAgICAgICA8bm9icj48Y29kZT5hbnQtZGV2PC9jb2RlPjwvbm9icj4gbWFpbGluZwogICAgICAgICAgICBsaXN0LCBvciBlbnRlciB0aGUgYnVnIGRhdGFiYXNlIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgYXR0YWNoIHRoZQogICAgICAgICAgICBwYXRjaCB0byB0aGUgYnVnIHJlcG9ydC4gVXNpbmcgdGhlIGJ1ZyBkYXRhYmFzZSBoYXMgdGhlIGFkdmFudGFnZQogICAgICAgICAgICBvZiBiZWluZyBhYmxlIHRvIHRyYWNrIHRoZSBwcm9ncmVzcyBvZiB5b3VyIHBhdGNoLgogICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgcGF0Y2ggdG8gc3VibWl0IGFuZCBhcmUgc2VuZGluZyBpdCB0byB0aGUKICAgICAgICAgICAgPG5vYnI+PGNvZGU+YW50LWRldjwvY29kZT48L25vYnI+IG1haWxpbmcgbGlzdCwKICAgICAgICAgICAgcHJlZml4ICJbUEFUQ0hdIgogICAgICAgICAgICB0byB5b3VyIG1lc3NhZ2Ugc3ViamVjdC4gUGxlYXNlIGluY2x1ZGUgYW55IHJlbGV2YW50IGJ1ZyBudW1iZXJzLgogICAgICAgICAgICBQYXRjaCBmaWxlcyBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIHRoZSA8bm9icj48Y29kZT4tdTwvY29kZT48L25vYnI+CiAgICAgICAgICAgIG9wdGlvbiBvZiB0aGUKICAgICAgICAgICAgPGNvZGU+ZGlmZjwvY29kZT4gb3IgPGNvZGU+Y3ZzIGRpZmY8L2NvZGU+IGNvbW1hbmQuIEZvcgogICAgICAgICAgICBleGFtcGxlOjxiciAvPjxiciAvPgogICAgICAgICAgICA8Zm9udCBmYWNlPSJ2ZXJkYW5hIiBzaXplPSItMSI+CiAgICAgICAgICAgIGRpZmYgLXUgSmF2YWMuamF2YS5vcmlnIEphdmFjLmphdmEgJmd0OyBqYXZhYy5kaWZmczxiciAvPjxiciAvPgogICAgICAgICAgICA8L2ZvbnQ+CiAgICAgICAgICAgIG9yLCBpZiB5b3UgaGF2ZSBzb3VyY2UgZnJvbSBDVlM6PGJyIC8+PGJyIC8+CiAgICAgICAgICAgIDxmb250IGZhY2U9InZlcmRhbmEiIHNpemU9Ii0xIj4KICAgICAgICAgICAgY3ZzIGRpZmYgLXUgSmF2YWMuamF2YSAmZ3Q7IGphdmFjLmRpZmZzPGJyIC8+PGJyIC8+CiAgICAgICAgICAgIDwvZm9udD4KICAgICAgICAgICAKICAgICAgICAgICBOb3RlOiBZb3Ugc2hvdWxkIGdpdmUgeW91ciBwYXRjaCBmaWxlcyBtZWFuaW5nZnVsIG5hbWVzLiAKICAgICAgICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciBmb3IgZGV2ZWxvcGVycyB3aG8gbmVlZCB0byBhcHBseSBhIG51bWJlcgogICAgICAgICAgIG9mIGRpZmZlcmVudCBwYXRjaCBmaWxlcy4KICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgPC90ZD48L3RyPgogIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgPC90ZD48L3RyPgogIDwvdGFibGU+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgoKICAgICAgICA8IS0tIEZPT1RFUiAtLT4KICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjIiPgogICAgICAgICAgPGhyIG5vc2hhZGU9IiIgc2l6ZT0iMSIvPgogICAgICAgIDwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjIiPgogICAgICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj48Zm9udCBjb2xvcj0iIzUyNUQ3NiIgc2l6ZT0iLTEiPjxlbT4KICAgICAgICAgIENvcHlyaWdodCAmIzE2OTsgMjAwMC0yMDAyLCBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgogICAgICAgICAgPC9lbT48L2ZvbnQ+PC9kaXY+CiAgICAgICAgPC90ZD48L3RyPgogICAgICA8L3RhYmxlPgogICAgPC9ib2R5PgogIDwvaHRtbD4KPCEtLSBlbmQgdGhlIHByb2Nlc3NpbmcgLS0+CgoKCgo=