Re: [Xplanner-devel] task hours calculations
Brought to you by:
jacmorel
From: Jacques M. <jac...@gm...> - 2006-04-13 03:05:17
|
TWFyaW8sCgpKdXN0IHNlbmQgbWUgdGhlIGZpbGVzLgpJIGNhbm5vdCBwcm9taXNlIGFueXRoaW5n IHNvb24gc2luY2UgSSBhbSB2ZXJ5IGJ1c3kgYXQgd29yayBhbmQgcmVsZWFzaW5nCjAuNyBpcyBt eSB0b3AgcHJpb3JpdHkuCldoZXJlIGlzIHlvdXIganNwIGZvciB5b3VyIHRlbXBsYXRlPwoKSmFj cXVlcwoKT24gNC8xMC8wNiwgTWFyaW8gUmFzZ2FkbyA8aXNjLm1yYXNnYWRvQGdtYWlsLmNvbT4g d3JvdGU6Cj4KPiBIaSBqYWNxdWVzLCBpIHVzZSB4cGxhbm5lciA3YjQsIGpkayAxLjQsIHRvbWNh dCA1LjAuMjgsIG9uIG15ZWNsaXBzZSB1c2luZwo+IGFudCwgSSBkbyBhIGxpbmsgdG8gdGVtcGxh dGVzLCBob3cgd2Ugc2UgaW4gdGhlIGRvY3VtZW50IHRoYXQgaSBnb2luZyB0byBzZWUKPiB5b3Us IGkgZG8gY2xpY2sgdG8gdGVtcGxhdGVzIGFuZCBzZW5kIHRvIHBhZ2Ugb2YgdGVtcGxhdGVzLCB3 aGVyZSB5b3UgY2FuCj4gc2VlIGFsbCB0aGUgdGVtcGxhdGVzIG9mIHRhc2tzLCBoZXJlLCB0aGUg dGVtcGxhdGVzIHdhcyBhZGQgaW4gdGhlIGRhdGFiYXNlLAo+IHdoZW4gaSBpbnRlbnQgYWRkIGZy b20gdGhlIHBhZ2UsICBzZW5kbWUgdG8gYWRkVGVtcGxhdGVzLCBXaGVuIGkgaW50ZW50IHRvCj4g Y3JlYXRlIGEgbmV3IHRlbXBsYXRlIHNlbmRtZToKPgo+Cj4gamF2YS5sYW5nLk51bGxQb2ludGVy RXhjZXB0aW9uCj4gCW9yZy5hcGFjaGUuanNwLldFQl8wMDJkSU5GLmpzcC5jb21tb24uZXJyb3Jf anNwLl9qc3BTZXJ2aWNlKGVycm9yX2pzcC5qYXZhOjE0MCkKPiAJb3JnLmFwYWNoZS5qYXNwZXIu cnVudGltZS5IdHRwSnNwQmFzZS5zZXJ2aWNlKEh0dHBKc3BCYXNlLmphdmE6OTQpCj4gCWphdmF4 LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldC5zZXJ2aWNlKEh0dHBTZXJ2bGV0LmphdmE6ODAyKQo+ IAlvcmcuYXBhY2hlLmphc3Blci5zZXJ2bGV0LkpzcFNlcnZsZXRXcmFwcGVyLnNlcnZpY2UoSnNw U2VydmxldFdyYXBwZXIuamF2YTozMjQpCj4gCW9yZy5hcGFjaGUuamFzcGVyLnNlcnZsZXQuSnNw U2VydmxldC5zZXJ2aWNlSnNwRmlsZShKc3BTZXJ2bGV0LmphdmE6MjkyKQo+IAlvcmcuYXBhY2hl Lmphc3Blci5zZXJ2bGV0LkpzcFNlcnZsZXQuc2VydmljZShKc3BTZXJ2bGV0LmphdmE6MjM2KQo+ IAlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQuc2VydmljZShIdHRwU2VydmxldC5qYXZh OjgwMikKPiAJb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLlJlcXVlc3RQcm9jZXNzb3IuZG9Gb3J3 YXJkKFJlcXVlc3RQcm9jZXNzb3IuamF2YToxMDY5KQo+IAlvcmcuYXBhY2hlLnN0cnV0cy50aWxl cy5UaWxlc1JlcXVlc3RQcm9jZXNzb3IuZG9Gb3J3YXJkKFRpbGVzUmVxdWVzdFByb2Nlc3Nvci5q YXZhOjI3NCkKPiAJb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLlJlcXVlc3RQcm9jZXNzb3IucHJv Y2Vzc0ZvcndhcmRDb25maWcoUmVxdWVzdFByb2Nlc3Nvci5qYXZhOjQ1NSkKPiAJb3JnLmFwYWNo ZS5zdHJ1dHMudGlsZXMuVGlsZXNSZXF1ZXN0UHJvY2Vzc29yLnByb2Nlc3NGb3J3YXJkQ29uZmln KFRpbGVzUmVxdWVzdFByb2Nlc3Nvci5qYXZhOjMyMCkKPiAJb3JnLmFwYWNoZS5zdHJ1dHMuYWN0 aW9uLlJlcXVlc3RQcm9jZXNzb3IucHJvY2VzcyhSZXF1ZXN0UHJvY2Vzc29yLmphdmE6Mjc5KQo+ IAlvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uU2VydmxldC5wcm9jZXNzKEFjdGlvblNl cnZsZXQuamF2YToxNDgyKQo+IAlvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uU2Vydmxl dC5kb1Bvc3QoQWN0aW9uU2VydmxldC5qYXZhOjUyNSkKPiAJamF2YXguc2VydmxldC5odHRwLkh0 dHBTZXJ2bGV0LnNlcnZpY2UoSHR0cFNlcnZsZXQuamF2YTo3MDkpCj4gCWphdmF4LnNlcnZsZXQu aHR0cC5IdHRwU2VydmxldC5zZXJ2aWNlKEh0dHBTZXJ2bGV0LmphdmE6ODAyKQo+IAljb20udGVj aG5vZXRpYy54cGxhbm5lci5maWx0ZXJzLlJlcXVlc3RDaGFyYWN0ZXJFbmNvZGluZ0ZpbHRlci5k b0ZpbHRlcihSZXF1ZXN0Q2hhcmFjdGVyRW5jb2RpbmdGaWx0ZXIuamF2YTozNykKPiAJY29tLnRl Y2hub2V0aWMueHBsYW5uZXIuc2VjdXJpdHkuZmlsdGVyLkFic3RyYWN0U2VjdXJpdHlGaWx0ZXIu ZG9GaWx0ZXIoQWJzdHJhY3RTZWN1cml0eUZpbHRlci5qYXZhOjUxKQo+IAljb20udGVjaG5vZXRp Yy54cGxhbm5lci5maWx0ZXJzLlNlcnZsZXRSZXF1ZXN0RmlsdGVyLmRvRmlsdGVyKFNlcnZsZXRS ZXF1ZXN0RmlsdGVyLmphdmE6MjQpCj4gCWNvbS50ZWNobm9ldGljLnhwbGFubmVyLmRiLmhpYmVy bmF0ZS5IaWJlcm5hdGVTZXNzaW9uRmlsdGVyLmRvRmlsdGVyKEhpYmVybmF0ZVNlc3Npb25GaWx0 ZXIuamF2YTo0MikKPiAJb3JnLnNwcmluZ2ZyYW1ld29yay5vcm0uaGliZXJuYXRlLnN1cHBvcnQu T3BlblNlc3Npb25JblZpZXdGaWx0ZXIuZG9GaWx0ZXJJbnRlcm5hbChPcGVuU2Vzc2lvbkluVmll d0ZpbHRlci5qYXZhOjE3NCkKPiAJb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuZmlsdGVyLk9uY2VQ ZXJSZXF1ZXN0RmlsdGVyLmRvRmlsdGVyKE9uY2VQZXJSZXF1ZXN0RmlsdGVyLmphdmE6NzYpCj4g YW5kIGRlYnVnZ2VkIHRoZSBhcGxpY2F0aW9uIGkgZm91ZCB0aGUgZXJyb3IgaW4gdGhlIG1vbWVu dCB3aGVuIHlvdSBjcmVhdGUgdGhlIG9iamVjdCBpbiB0aGUgY2xhc3MgRWRpdE9iamVjdEFjdGlv biBpbiB0aGUgbWV0aG9kIGNyZWF0ZU9qZWN0ICBpbiB0aGUgbGluZSBpbnQKPgo+IHNhdmVkT2Jq ZWN0SWQgPSBvYmplY3RSZXBvc2l0b3J5Lmluc2VydChvYmplY3QpOwo+Cj4gaSBhZGQgaW4gdGhl IHN0cnV0c2NvbmZpZy54bWwKPgo+IDxmb3JtLWJlYW4gbmFtZT0KPiAiZWRpdC9wbGFudGlsbGEi IHR5cGU9ImNvbS50ZWNobm9ldGljLnhwbGFubmVyLmZvcm1zLlBsYW50aWxsYUVkaXRvckZvcm0i Cj4gLz4KPgo+IHRoYXQgaGVscG1lIHRvIGNyZWF0ZSB0ZW1wbGF0ZXMgbyBpbiBzcGFuaXNoIHBs YW50aWxsYQo+Cj4gdG9vIGFkZAo+Cj4gPAo+IGZvcndhcmQgbmFtZT0idmlldy9wbGFudGlsbGEi IHBhdGg9Ii9XRUItSU5GL2pzcC92aWV3L3BsYW50aWxsYS5qc3AiLz4KPgo+IHRoYXQgaGVscG1l IHRvIHZpZXcgdGVtcGxhdGVzIG9yIGluIHRoaXMgY2FzZSBpbiBzcGFuaXNoIHBsYW50aWxsYXMu Cj4KPiB0b28gYWRkCj4KPiA8Cj4gZm9yd2FyZCBuYW1lPSJlZGl0L3BsYW50aWxsYSIgcGF0aD0i L1dFQi1JTkYvanNwL2VkaXQvZWRpdFBsYW50aWxsYS5qc3AiCj4gLz4KPgo+IHRvbyBhZGQgdGhp cywgaSBkb250IGtub3cgd2h5IERpc3BhdGNoRm9yd2FyZCwgYnV0IGl0IGZ1bnRpb24gZ29vZC4K Pgo+Cj4KPiAvLy8vLy8vLy8vLy8KPgo+IDxhY3Rpb24gcGF0aD0KPiAiL3ZpZXcvcGxhbnRpbGxh IiBwYXJhbWV0ZXI9InZpZXcvcGxhbnRpbGxhIgo+Cj4gdHlwZQo+ID0iY29tLnRlY2hub2V0aWMu eHBsYW5uZXIuYWN0aW9ucy5EaXNwYXRjaEZvcndhcmQiPgo+Cj4KPgo+Cj4gPGJlYW4+Cj4KPgo+ Cj4gPHByb3BlcnR5IG5hbWU9ImF1dGhvcml6YXRpb25SZXF1aXJlZCI+Cj4gPHZhbHVlPmZhbHNl PC92YWx1ZQo+ID4KPgo+Cj4KPiA8L3Byb3BlcnR5Pgo+Cj4KPgo+Cj4gPC9iZWFuPgo+Cj4KPgo+ IDwvYWN0aW9uCj4gPgo+Cj4gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K Pgo+IGFubmQgdGhpcwo+Cj4gPAo+IGFjdGlvbiBwYXRoPSIvZWRpdC9wbGFudGlsbGEiCj4gbmFt ZT0iZWRpdC9wbGFudGlsbGEiIGlucHV0PSIvV0VCLUlORi9qc3AvZWRpdC9lZGl0UGxhbnRpbGxh LmpzcCIKPiB0eXBlPSJjb20udGVjaG5vZXRpYy54cGxhbm5lci5hY3Rpb25zLkVkaXRQbGFudGls bGFBY3Rpb24iPgo+Cj4gPGJlYW4+Cj4KPiA8Cj4gcHJvcGVydHkgbmFtZT0ibWV0YVJlcG9zaXRv cnkiPgo+Cj4KPiA8cmVmIGJlYW49Im1ldGFSZXBvc2l0b3J5Ij48Lwo+IHJlZj4KPgo+IDwvcHJv cGVydHkKPiA+Cj4KPiA8cHJvcGVydHkgbmFtZT0KPiAidHlwZSI+Cj4KPiA8dmFsdWU+Y29tLnRl Y2hub2V0aWMueHBsYW5uZXIuZG9tYWluLlBsYW50aWxsYTwvdmFsdWU+Cj4KPgo+IDwvcHJvcGVy dHk+Cj4KPiA8L2JlYW4KPiA+Cj4KPiA8L2FjdGlvbj4KPgo+ICAgaSBkb24ndCBrbm93IHdoYXQg Y2xhc3MgdXNlIGluIHRoZSBFZGl0UGxhbnRpbGxhQWN0aW9uKHBsYW50aWxsYSBpcyB0aGUKPiB0 cmFkdWN0aW9uIG9mIHRlbXBsYXRlKSwKPgo+Cj4KPiBwYWNrYWdlIGNvbS50ZWNobm9ldGljLnhw bGFubmVyLmFjdGlvbnM7Cj4KPiBpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0 UmVxdWVzdDsKPiBpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7 Cj4KPiBpbXBvcnQgbmV0LnNmLmhpYmVybmF0ZS5TZXNzaW9uOwo+Cj4gaW1wb3J0IG9yZy5hcGFj aGUuc3RydXRzLmFjdGlvbi5BY3Rpb25Gb3JtOwo+IGltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5h Y3Rpb24uQWN0aW9uRm9yd2FyZDsKPiBpbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFj dGlvbk1hcHBpbmc7Cj4KPiBpbXBvcnQgY29tLnRlY2hub2V0aWMueHBsYW5uZXIuZG9tYWluLkl0 ZXJhdGlvbjsKPiBpbXBvcnQgY29tLnRlY2hub2V0aWMueHBsYW5uZXIuZG9tYWluLlBsYW50aWxs YTsKPiBpbXBvcnQgY29tLnRlY2hub2V0aWMueHBsYW5uZXIuZG9tYWluLlVzZXJTdG9yeTsKPiBp bXBvcnQgY29tLnRlY2hub2V0aWMueHBsYW5uZXIuZG9tYWluLnJlcG9zaXRvcnkuT2JqZWN0UmVw b3NpdG9yeSA7Cj4gaW1wb3J0IGNvbS50ZWNobm9ldGljLnhwbGFubmVyLmZvcm1zLkFic3RyYWN0 RWRpdG9yRm9ybTsKPiBpbXBvcnQgY29tLnRlY2hub2V0aWMueHBsYW5uZXIuZm9ybXMuUGxhbnRp bGxhRWRpdG9yRm9ybTsKPiBpbXBvcnQgY29tLnRlY2hub2V0aWMueHBsYW5uZXIuZm9ybXMuVGFz a0VkaXRvckZvcm07Cj4KPgo+IHB1YmxpYyBjbGFzcyBFZGl0UGxhbnRpbGxhQWN0aW9uIGV4dGVu ZHMgRWRpdE9iamVjdEFjdGlvbiB7Cj4gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElP Tl9LRVkgPSAiYWN0aW9uIjsKPgo+ICAgICAgcHJvdGVjdGVkIEFjdGlvbkZvcndhcmQgZG9FeGVj dXRlKEFjdGlvbk1hcHBpbmcgYWN0aW9uTWFwcGluZywKPiBBY3Rpb25Gb3JtIGFjdGlvbkZvcm0s IEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlCj4gcmVwbHkp IHRocm93cyBFeGNlcHRpb24gewo+ICAgICAgICAgUGxhbnRpbGxhRWRpdG9yRm9ybSBmb3JtID0g KFBsYW50aWxsYUVkaXRvckZvcm0pYWN0aW9uRm9ybTsKPiAgICAgICAgIEFjdGlvbkZvcndhcmQg Zm9yd2FyZCA9IHN1cGVyLmRvRXhlY3V0ZShhY3Rpb25NYXBwaW5nLCBhY3Rpb25Gb3JtLAo+IHJl cXVlc3QsIHJlcGx5KTsKPiAgICAgICAgIHJldHVybiBmb3J3YXJkOwo+ICAgICB9Cj4KPiAvKnBy b3RlY3RlZCB2b2lkIHBvcHVsYXRlRm9ybShBYnN0cmFjdEVkaXRvckZvcm0gZm9ybSwgQWN0aW9u TWFwcGluZwo+IGFjdGlvbk1hcHBpbmcsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB0aHJv d3MgRXhjZXB0aW9uCj4gewo+IHN1cGVyLnBvcHVsYXRlRm9ybShmb3JtLCBhY3Rpb25NYXBwaW5n LCByZXF1ZXN0KTsKPiBpZiAoZm9ybS5nZXRPaWQoKSA9PSBudWxsKQo+IHsKPiBQbGFudGlsbGFF ZGl0b3JGb3JtIHBsYW50aWxsYUZvcm0gPSAoUGxhbnRpbGxhRWRpdG9yRm9ybSkgZm9ybTsKPiBm b3JtLnNldE9pZChyZXF1ZXN0LmdldFBhcmFtZXRlcihBQ1RJT05fS0VZKSk7Cj4KPiAvL2ludCBp dGVyYXRpb25JZCA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImZrZXki KSk7Cj4gLy9wbGFudGlsbGFGb3JtLnNldERpc3Bvc2l0aW9uTmFtZShpdGVyYXRpb24uZGV0ZXJt aW5lTmV3U3RvcnlEaXNwb3NpdGlvbgo+ICgpLmdldE5hbWUoKSk7Cj4gfQo+IH0qLwo+Cj4KPgo+ IH0KPgo+Cj4KPiBpIGRvbu+/vXQga25vdyB3aGF0IG1ldGhvZCB1c2UuCj4KPiB0aGlzIGlzIG1p IFBsYW50aWxsYUVkaXRvckZvcm06Cj4KPiBhY2thZ2UgY29tLnRlY2hub2V0aWMueHBsYW5uZXIu Zm9ybXM7Cj4KPiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Cj4gaW1wb3J0IGphdmEudXRp bC5IYXNoU2V0Owo+Cj4gcHVibGljIGNsYXNzIFBsYW50aWxsYUVkaXRvckZvcm0gZXh0ZW5kcyBB YnN0cmFjdEVkaXRvckZvcm0gewo+ICBwcml2YXRlIFN0cmluZyBuYW1lOwo+ICBwcml2YXRlIFN0 cmluZyBkZXNjcmlwdGlvbjsKPiAgcHJpdmF0ZSBDb2xsZWN0aW9uIHRhcmVhcyA9IG5ldyBIYXNo U2V0KCk7Cj4KPgo+Cj4gIHB1YmxpYyBDb2xsZWN0aW9uIGdldFRhcmVhcygpIHsKPiAgIHJldHVy biB0YXJlYXM7Cj4gIH0KPiAgcHVibGljIHZvaWQgc2V0VGFyZWFzKENvbGxlY3Rpb24gdGFyZWFz KSB7Cj4gICB0aGlzLnRhcmVhcyA9IHRhcmVhczsKPiAgfQo+Cj4gIHB1YmxpYyBTdHJpbmcgZ2V0 RGVzY3JpcHRpb24oKSB7Cj4gICByZXR1cm4gZGVzY3JpcHRpb247Cj4gIH0KPiAgcHVibGljIHZv aWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Cj4gICB0aGlzLmRlc2NyaXB0 aW9uID0gZGVzY3JpcHRpb247Cj4gIH0KPiAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewo+ICAg cmV0dXJuIG5hbWU7Cj4gIH0KPiAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewo+ ICAgdGhpcy5uYW1lID0gbmFtZTsKPiAgfQo+ICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgewo+ ICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Ygo+ICAgcmV0dXJuIG51bGw7Cj4g IH0KPgo+IH0KPgo+IHRoYWtzLiBJIHdvdWxkIGxpa2UgdGhhdCB5b3UgaGVscG1lIGJlY2F1c2Ug aW0gbG9zdC4gU29ycnkgaWYgaSBkb27vv710Cj4gd3JpdGUgZ29vZCwgYnV0IGltIGEgbWV4aWNh biBwZW9wbGUsIGFuZCB0aGUgZW5nbGlzaCBub3QgaXMgdGhlIGZpcnN0Cj4gbGFuZ3VhZ2UuCj4K PiB0aGFua3MgamFjcXVlcy4KPgo+Cj4KPgo+Cj4KPgo+Cj4KPgo+Cj4gT24gNC83LzA2LCBKYWNx dWVzIE1vcmVsIDxqYWNtb3JlbEBnbWFpbC5jb20+IHdyb3RlOgo+ID4KPiA+IE1hcmlvLAo+ID4K PiA+IFlvdSBuZWVkIHRvIGhlbHAgbWUgd2l0aCBtb3JlIGluZm9ybWF0aW9uIGhlcmUuIEdpdmUg bWUgc29tZSBjb250ZXh0Ogo+ID4gVmVyc2lvbiBvZiB4cGxhbm5lcgo+ID4gSkRLIHZlcnNpb24K PiA+IFNlcnZsZXQgY29udGFpbmVyIHZlcnNpb24KPiA+IFdoYXQgeW91IGFyZSBkb2luZyB0byBi dWlsZD8KPiA+IFdoYXQgaXMgdGhlIG91dHB1dD8KPiA+Cj4gPiBUaGFua3MKPiA+Cj4gPgo+ID4g SmFjcXVlcwo+ID4KPiA+Cj4gPgo+ID4gT24gNC83LzA2LCBNYXJpbyBSYXNnYWRvIDxpc2MubXJh c2dhZG9AZ21haWwuY29tID4gd3JvdGU6Cj4gPiA+Cj4gPiA+ICBIaSBqYWNxdWVzLCBpIGhhdmUg c29tZSBxdWVzdGlvbnMsIHdoZW4gaSBuZWVkcyB0ZW1wbGF0ZXMgb2YgdGFza3MsIGkKPiA+ID4g Y3JlYXRlIHR3byBjbGFzZXMgdGVtcGxhdGUgYW5kIHRlbXBsYXRlX3Rhc2tzLCBpIGJ1aWxkIHR3 byB0YWJsZXMsIHRlbXBsYXRlCj4gPiA+IGFuZCB0ZW1wbGF0ZXNfdGFza3Mgd2l0aCBoaXMgdGVt cGxhdGUueG1sICBhbmQgdGVtcGxhdGVzX3Rhc2tzLnhtbAo+ID4gPiBhbmQsIGltIHByb3Zpbmcg b25seSB3aXRoIHRlbXBsYXRlIHNvLCBpIGJ1aWxkIHRlbXBsYXRlYWN0aW9uIGFuZAo+ID4gPiB0 ZW1wbGF0ZWZyb20gYW5kIHVwZGF0ZSB0aGUgc3RydXRzY29uZmlnLCBhbmQgd2hlbiBpIHRyeSB0 byBydW4gdGhlCj4gPiA+IGFwbGljYXRpb24gaSBoYXZlIGEgZXJyb3IuIENsYXNzIG5vdCBmb3Vu ZCwgc29tZSBwZW9ibGUgaGVscCBtZSwgYW5kIHRlbGwgbWUKPiA+ID4gd2hlcmUgaSBoYXZlIHRv IHB1dCB0aGUgY2xhc3Nlcywgd2hlcmUgY29uZmlndXJlLgo+ID4gPiB0aGFua3MuCj4gPiA+Cj4g PiA+Cj4gPiA+Cj4gPiA+Cj4gPiA+IE9uIDQvNi8wNiwgSmFtZXMgQmVhcmQgPGphbWVzLmJlYXJk QGdtYWlsLmNvbSA+IHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4gIEhhZCBhbm90aGVyIGlkZWEgdGhv dWdoLiAgVGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgYXR0YWNoZWQgZ3JhcGgKPiA+ID4gPiBJ J2QgZmluZCBxdWl0ZSB1c2VmdWwuICBCb3RoIHNpZGVzIGFyZSBzb3J0YWJsZS4gIFRoaW5rIGl0 IG1pZ2h0IGJlCj4gPiA+ID4gaW50ZXJlc3RpbmcgZW5vdWdoIHRvIHJlbGVhc2UgaW50byB0aGUg d2lsZD8KPiA+ID4gPgo+ID4gPiA+Cj4gPiA+ID4gIEkndmUgc2luY2UgcmVhbGlzZWQgdGhhdCB0 aGUgYXR0YWNobWVudCBtaWdodCBoYXZlIGJlZW4gc3RyaXBwZWQgYnkKPiA+ID4gPiB0aGUgbGlz dC4gIEhlcmUncyBhIFVSTCBpbnN0ZWFkOgo+ID4gPiA+Cj4gPiA+ID4gaHR0cDovL3d3dy51c2Vy cy5vbi5uZXQvfmphbWVzLmJlYXJkL3hwbGFubmVyL3hwbGFubmVyLW5ldy5wbmc8aHR0cDovL3d3 dy51c2Vycy5vbi5uZXQvJTdFamFtZXMuYmVhcmQveHBsYW5uZXIveHBsYW5uZXItbmV3LnBuZz4K PiA+ID4gPgo+ID4gPiA+Cj4gPiA+ID4KPiA+ID4gPiBPbiA0LzYvMDYsIEphbWVzIEJlYXJkIDxq YW1lcy5iZWFyZEBnbWFpbC5jb20gPiB3cm90ZToKPiA+ID4gPiA+Cj4gPiA+ID4gPiBIaSBKYWNx dWVzLAo+ID4gPiA+ID4KPiA+ID4gPiA+ICAgIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UuICBXaGVu IHlvdSBzYXkgYSBmaXJzdCBjbGFzcwo+ID4gPiA+ID4gPiA+IHJlcHJlc2VudGF0aW9uLCBhcmUg eW91IHJlZmVycmluZyB0byBhIGRpZmZlcmVudCBjbGFzcyBvZiBvYmplY3Q/ICBBCj4gPiA+ID4g PiA+ID4gc3ViY2xhc3Mgb2YgVGFzayBwZXJoYXBzPwo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+IE1vc3QgbGlrZWx5IGl0IHdpbGwgYmUgY3Jvc3NjdXR0aW5nLiBJdGVyYXRp b24sIFN0b3J5LCBUYXNrIGFuZAo+ID4gPiA+ID4gPiBpbiB0aGUgZnV0dXJlIFJlbGVhc2UsIEZl YXR1cmUgYWxsIHNoYXJlIHRoZSBzYW1lIGNhcmFjdGVyaXN0aWM6IHRoZXkgaGF2ZSBhCj4gPiA+ ID4gPiA+IGJ1ZGdldGVkIHdvcmssIGFuIGVzdGltYXRlZCB3b3JrIChib3RoIGhhdmUgYSBiYXNl bGluZSBhbmQgYSBsYXRlc3QgdmFsdWUpLAo+ID4gPiA+ID4gPiBhbiBhY3R1YWwgd29yayBhbmQg YSByZW1haW5pbmcgd29yay4gVGhleSBhbHNvIGhhdmUgYSBtZWFzdXJlIG9mIHNjb3BlCj4gPiA+ ID4gPiA+IGNoYW5nZTogYWRkZWQvcG9zdHBvbmVkIHdvcmsuIFRoZXkgaGF2ZSBhIHN0YXR1cyAo Y29tcGxldGVkLCBvbmdvaW5nLAo+ID4gPiA+ID4gPiBmdXR1cmUpLgo+ID4gPiA+ID4gPiBFYWNo IG1heSBoYXZlIGl0cyBvd24gdW5pdCBhbmQgdGhleSBoYXZlIHJvbGx1cCBjYXBhYmlsaXRpZXMg b2YKPiA+ID4gPiA+ID4gdGhlIGNvbnRhaW5lZCBlbGVtZW50cy4KPiA+ID4gPiA+ID4KPiA+ID4g PiA+Cj4gPiA+ID4gPiBDb250YWluaW5nIHRhc2tzIHdpdGhpbiBzdG9yaWVzIHdpdGhpbiByZWxl YXNlcyBtYWtlcyBzZW5zZS4gIEJ1dAo+ID4gPiA+ID4gaWYgd2UncmUgdGFsa2luZyBhYm91dCAi c3BsaXR0aW5nIiBhIHRhc2sgYmV0d2VlbiB0d28gaXRlcmF0aW9ucywgdGhlbiB0aGUKPiA+ID4g PiA+IGNvbnRhaW5tZW50IGNvbmNlcHQgc2VlbXMgdG8gYnJlYWsgZG93biBmb3IgdGFza3MgYW5k IGl0ZXJhdGlvbnMuCj4gPiA+ID4gPgo+ID4gPiA+ID4gV291bGQgaXQgYmUgbW9yZSBmbGV4aWJs ZSBmb3IgdXMgdG8gY29uc2lkZXIgaXRlcmF0aW9ucyBhcwo+ID4gPiA+ID4gb3J0aG9nb25hbCB0 byB0YXNrcywgc3RvcmllcyBhbmQgcmVsZWFzZXM/ICBJbiBvdGhlciB3b3JkcywgdG8gdGhpbmsg b2YgdGhlCj4gPiA+ID4gPiB0YXNrcy9zdG9yaWVzL3JlbGVhc2VzIGFzIGNvbmNyZXRlIHRoaW5n cyB0aGF0IGdldCBkZWxpdmVyZWQsIGFuZCBpdGVyYXRpb25zCj4gPiA+ID4gPiBzaW1wbHkgYXMg YSBtZWFucyB0byBtYXJrIHRoZSBwYXNzYWdlIG9mIGNodW5rcyBvZiB0aW1lLgo+ID4gPiA+ID4K PiA+ID4gPiA+IFRha2luZyB0aGF0IGFwcHJvYWNoLCB0aGUgYXRvbWljIHVuaXQgb2YgImRlbGl2 ZXJhYmlsaXR5IiAodGhlCj4gPiA+ID4gPiB0YXNrKSBnZXRzIHNjaGVkdWxlZCB0byBiZSBjb21w bGV0ZWQgZHVyaW5nIGFuIGl0ZXJhdGlvbiwgYnV0IGlzIG5ldmVyCj4gPiA+ID4gPiBjb25zaWRl cmVkIGFzIGEgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIGl0ZXJhdGlvbi4KPiA+ID4gPiA+Cj4gPiA+ ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+ID4gICBOZXh0IHN0ZXA6IGRlY2lkaW5nIHdoaWNoIG9m IHRoZSBlaWdodGVlbiBnZXR0ZXJzIGl0IHRoZSBvbmUgSQo+ID4gPiA+ID4gPiA+IHdhbnQgZm9y IG15IG5ldyByZXBvcnQgOikKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IFdoaWNoLCBieSB0 aGUgd2F5LCBpcyBnb2luZyB0byBiZSBhIG1ldHJpYyBvZiBhY3R1YWwgd29yawo+ID4gPiA+ID4g PiA+IHJlbWFpbmluZyBmb3IgZWFjaCBkZXZlbG9wZXIgdG8gZG8uICBIYW5keSBmb3Igc2VlaW5n IGF0IGEgZ2xhbmNlIHdobyBoYXMKPiA+ID4gPiA+ID4gPiB0aGUgbW9zdCBob3VycyB0byBjaHVn IHRocm91Z2guICBBcyB0aGUgaXRlcmF0aW9uIHByb2dyZXNzZXMgdGhpcyBjYW4gZGlmZmVyCj4g PiA+ID4gPiA+ID4gcXVpdGUgYSBiaXQgZnJvbSB0aGUgbnVtYmVyIG9mIGhvdXJzIGVhY2ggZGV2 ZWxvcGVyIGFjY2VwdGVkLgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IERv ZXNuJ3QgdGhlIGl0ZXJhdGlvbiBtZXRyaWNzIGdpdmUgeW91IHRoYXQgYWxyZWFkeT8gVGhlIG9u bHkKPiA+ID4gPiA+ID4gdGhpbmcgbWlzc2luZyBpcyB0aGUgYW1vdW50IG9mIGhvdXJzIHJlbWFp bmluZyBpbiBob3Vycy4gWW91IG9ubHkgZ2V0IGFuCj4gPiA+ID4gPiA+IGVtcHR5IHByb2dyZXNz IGJhciB0aGF0IGdpdmUgeW91IGEgZmVlbCBvZiBob3cgbXVjaCBpcyByZW1haW5pbmcgYnV0IGRv ZXMKPiA+ID4gPiA+ID4gbm90IGdpdmUgeW91IHRoZSB0cnVlIG51bWJlci4gU2luY2UgaXQgd2Fz IGEgY29tcGxhaW50IEkgaGFkIHRvZGF5LCBJIHdlbnQKPiA+ID4gPiA+ID4gYWhlYWQgYW5kIHF1 aWNrbHkgYWRkIHRoZSBjb2x1bW4uIEkgaGF2ZW4ndCBjaGVja2VkIGluIHlldCBzaW5jZSB3ZSBz ZWVtIHRvCj4gPiA+ID4gPiA+IGhhdmUgc29tZSBoaWJlcm5hdGUgc2Vzc2lvbiBwcm9ibGVtIHdp dGggWE1MIGludGVyZmFjZSBvbiB0aGUgSEVBRC4gSSB3aWxsCj4gPiA+ID4gPiA+IGxldCB5b3Ug a25vdyB3aGVuIGl0IGlzLiBJIGNyZWF0ZWQgYW4gaXNzdWUgZm9yIHRoaXMgaW4gSklSQSAoCj4g PiA+ID4gPiA+IGh0dHA6Ly9qaXJhLmNvZGVoYXVzLm9yZy9icm93c2UvWFBSLTMwMCkuCj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhlIGRhdGEgaXMgdGhlcmUsIGJ1dCBpdCB0YWtl cyBzb21lIG9jdWxhciBneW1uYXN0aWNzIHRvCj4gPiA+ID4gPiBkZXRlcm1pbmUgd2hpY2ggZGV2 ZWxvcGVycyBtaWdodCBiZSBvdmVybHkgYnVyZGVuZWQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gSGFk IGFub3RoZXIgaWRlYSB0aG91Z2guICBUaGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBhdHRhY2hl ZAo+ID4gPiA+ID4gZ3JhcGggSSdkIGZpbmQgcXVpdGUgdXNlZnVsLiAgQm90aCBzaWRlcyBhcmUg c29ydGFibGUuICBUaGluayBpdCBtaWdodCBiZQo+ID4gPiA+ID4gaW50ZXJlc3RpbmcgZW5vdWdo IHRvIHJlbGVhc2UgaW50byB0aGUgd2lsZD8KPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGFua3MKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBKYW1lcwo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiAgICBP biA0LzMvMDYsIEphY3F1ZXMgTW9yZWwgPGphY21vcmVsQGdtYWlsLmNvbSA+IHdyb3RlOgo+ID4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IEphbWVzLAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4gPiA+IFlvdSBhcmUgbG9va2luZyBhdCBhIHByZXR0eSB1Z2x5IHBpZWNlIG9mIGNvZGUg SSBhbSBhZnJhaWQKPiA+ID4gPiA+ID4gPiA+IDstKAo+ID4gPiA+ID4gPiA+ID4gV2UgcG9zdHBv bmVkIHRoZSByZWZhY3RvcmluZyB0b28gbG9uZyBhbmQgd2UgaGF2ZSBhIG1lc3Mgb24KPiA+ID4g PiA+ID4gPiA+IG91ciBoYW5kLiBXZSBhZGRlZCBhbiBpc3N1ZSB0byBiZSByZWZhY3RvciB0aGlz IGluIHRoZSBuZXh0IHJlbGVhc2UuCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gVGhl IHBvc3Rwb25pbmcgaXMgYSB2ZXJ5IGdvb2QgcXVlc3Rpb24uIEhvd2V2ZXIgaXQgY29tZXMKPiA+ ID4gPiA+ID4gPiA+IGRvd24gdG8gdGhlIGZhY3QgdGhhdCB3ZSBkb24ndCBoYXZlIGEgZmlyc3Qg Y2xhc3MgcmVwcmVzZW50YXRpb24gb2YKPiA+ID4gPiA+ID4gPiA+IGNvbnRpbnVlZCB0YXNrcy9z dG9yaWVzLiBMZWF2aW5nIHRoZSBjb250aW51ZWQgc3RvcnkvdGFzayBhcyBpcywgaXMganVzdCBh Cj4gPiA+ID4gPiA+ID4gPiBwb29yIG1hbidzIHdheSB0byBzaG93IHRoYXQgdGhlc2UgdGFza3Mv c3RvcmllcyB3ZXJlIG5vdCBjb21wbGV0ZWQuIElkZWFsbHkKPiA+ID4gPiA+ID4gPiA+IHdlIHNo b3VsZCByZXByZXNlbnQgdGhlIGFtb3VudCBvZiBzbGlwcGFnZSBpbiBhbGwgdmlldyBhbmQgaGF2 ZSB0aGUKPiA+ID4gPiA+ID4gPiA+IHN0b3J5L3Rhc2sgY29tcGxldGVkLgo+ID4gPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gPiA+IERvZXMgdGhhdCBtYWtlIHNlbnNlPwo+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBKYWNxdWVzCj4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IE9uIDQvMS8wNiwgSmFtZXMgQmVhcmQgPGph bWVzLmJlYXJkQGdtYWlsLmNvbSA+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+ID4gPiBIaSBhbGwsCj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IEknbSB0 cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb24gYWxsIHRoZSBkaWZmZXJlbnQgImhvdXJzIgo+ID4gPiA+ ID4gPiA+ID4gPiBjYWxjdWxhdGlvbnMgYXZhaWxhYmxlIG9uIGEgVGFzayAoMTggYXQgbGFzdCBj b3VudCkuICBTbyBJIGNhbiBzdGFydCB3aXRoIGEKPiA+ID4gPiA+ID4gPiA+ID4gZ29vZCBmb3Vu ZGF0aW9uLCBjYW4gc29tZW9uZSBwbGVhc2UgcmV2aWV3IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhl IGZvdXIKPiA+ID4gPiA+ID4gPiA+ID4gcGllY2VzIG9mIFRhc2sgc3RhdGUgdXNlZCB0byBjYWxj dWxhdGUgdGhlIGZpZ3VyZXM/Cj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IHRp bWVFbnRyaWVzCj4gPiA+ID4gPiA+ID4gPiA+IEEgY29sbGVjdGlvbiBvZiB0aGUgYWN0dWFsIGNo dW5rcyBvZiB0aW1lIHNwZW50IG9uIHRoaXMKPiA+ID4gPiA+ID4gPiA+ID4gdGFzay4gIEJ1aWxk cyB1cCBhcyB3b3JrIG9uIHRoZSB0YXNrIHByb2dyZXNzZXMuCj4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+IGVzdGltYXRlZE9yaWdpbmFsSG91cnMKPiA+ID4gPiA+ID4gPiA+ID4g VGhlIG9yaWdpbmFsIGVzdGltYXRlIGZvciB0aGlzIHRhc2suICBPbmNlIHNldCwgY2FuJ3QgYmUK PiA+ID4gPiA+ID4gPiA+ID4gY2hhbmdlZCByaWdodD8gIElmIHRoYXQncyB0aGUgY2FzZSwgc2hv dWxkIHRoZSBzZXR0ZXIgYmUgY2hhbmdlZCB0byBub3QKPiA+ID4gPiA+ID4gPiA+ID4gYWxsb3cg YW4gZXhpc3RpbmcgdmFsdWUgdG8gYmUgb3ZlcndyaXR0ZW4/Cj4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+IGVzdGltYXRlZEhvdXJzCj4gPiA+ID4gPiA+ID4gPiA+IFRoZSBjdXJy ZW50IGVzdGltYXRlIGZvciB0aGlzIHRhc2suICBDYW4gdmFyeSB1cCBvciBkb3duCj4gPiA+ID4g PiA+ID4gPiA+IGFzIHRoZSB0YXNrIHByb2dyZXNzZXMuCj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ID4gPiA+IHBvc3Rwb25lZEhvdXJzCj4gPiA+ID4gPiA+ID4gPiA+IEknbSBhIGJpdCBm dXp6eSBvbiBwb3N0cG9uaW5nLiAgTG9va2luZyBhdCB0aGUgY29kZSwgaXQKPiA+ID4gPiA+ID4g PiA+ID4gc2VlbXMgdGhhdCBwb3N0cG9uaW5nIGEgdGFzayBzZXRzIHBvc3Rwb25lZCBob3VycyB0 byByZW1haW5pbmcgaG91cnMsIGJ1dAo+ID4gPiA+ID4gPiA+ID4gPiBsZWF2ZXMgcmVtYWluaW5n IGhvdXJzIGFzIGlzLiAgVGhhdCBzZWVtZWQgdG8gYmUgZG91YmxpbmcgdXAgdW50aWwgSSBub3Rp Y2VkCj4gPiA+ID4gPiA+ID4gPiA+IHRoYXQgZ2V0UmVtYWluaW5nSG91cnMgc3VidHJhY3RzIGFu eSBwb3N0cG9uZWQgaG91cnMgd2hlbiBkb2luZyBpdHMKPiA+ID4gPiA+ID4gPiA+ID4gY2FsY3Vs YXRpb24uICBTZWVtcyBhIGN1cmlvdXMgYXBwcm9hY2ggdGhvdWdoLgo+ID4gPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+ID4gPiBDYW4gc29tZW9uZSBwbGVhc2UgZXhwbGFpbiB0aGUgcmVhc29u IHdoeSBwb3N0cG9uaW5nIGEKPiA+ID4gPiA+ID4gPiA+ID4gdGFzayAod2hpY2ggSSdtIGludGVy cHJldGluZyBhcyBtb3ZpbmcgdGhlIHJlbWFpbmRlciBvZiBhIHRhc2sgdG8gYW5vdGhlcgo+ID4g PiA+ID4gPiA+ID4gPiB0YXNrIG9uIGEgZGlmZmVyZW50IGl0ZXJhdGlvbikgZG9lc24ndCBlZmZl Y3RpdmVseSBjb21wbGV0ZSB0aGUgdGFzayBpbiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gY3VycmVu dCBpdGVyYXRpb24/Cj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IEluIG90aGVy IHdvcmRzLCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgdGhhdCB0aGUgImZyb20iIHRhc2sKPiA+ID4g PiA+ID4gPiA+ID4gdG8gaGF2ZSB0aGUgcG9zdHBvbmVkIGhvdXJzIHJlY29yZGVkIGZvciB0aGUg c2FrZSBvZiBtZXRyaWMgY2FsY3VsYXRpb25zLAo+ID4gPiA+ID4gPiA+ID4gPiBidXQgYmUgb3Ro ZXJ3aXNlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW55IG90aGVyIGNvbXBsZXRlZCB0YXNrLgo+ ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBUaGFua3MKPiA+ID4gPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gPiA+ID4gSmFtZXMKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4KPiA+ID4K PiA+Cj4K |