Return-Path: Delivered-To: apmail-jakarta-ant-dev-archive@jakarta.apache.org Received: (qmail 63816 invoked by uid 500); 28 Apr 2001 01:23:14 -0000 Mailing-List: contact ant-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk Reply-To: ant-dev@jakarta.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list ant-dev@jakarta.apache.org Received: (qmail 63803 invoked from network); 28 Apr 2001 01:23:14 -0000 Subject: RE: Foreach task... MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C0CF81.CAD9361C" Date: Fri, 27 Apr 2001 20:23:12 -0500 Message-ID: <3B2485FD3A5C2A418C6BDD2F43E02413016E55@dmi-exch.demandsolutions.com> X-MimeOLE: Produced By Microsoft Exchange V6.0.4417.0 X-MS-Has-Attach: content-class: urn:content-classes:message X-MS-TNEF-Correlator: Thread-Topic: Foreach task... Thread-Index: AcDPKKdDOwvxiHktSeeaJLaHOnidCgAWINWg From: "Chris Greenlee" To: X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N This is a multi-part message in MIME format. ------_=_NextPart_001_01C0CF81.CAD9361C Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I needed the foreach task, but I needed it to behave a little more like . So I added a "type" attribute to it that works like 's. I've included the updated file and docs in case anyone would like them. Thanks, Tim, for coding it in the first place! It was a great help in getting our automated building/testing going. Cheers, Chris Greenlee ------_=_NextPart_001_01C0CF81.CAD9361C Content-Type: application/octet-stream; name="ForeachTask.java" Content-Transfer-Encoding: base64 Content-Description: ForeachTask.java Content-Disposition: attachment; filename="ForeachTask.java" LyoNCiogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQ0KKg0KKiBDb3B5 cmlnaHQgKGMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0 cw0KKiByZXNlcnZlZC4NCioNCiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQoqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKiBhcmUgbWV0Og0K Kg0KKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodA0KKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQoqDQoqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQoqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0K KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlDQoqICAgIGRpc3RyaWJ1dGlvbi4NCioNCiogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50 YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmDQoqICAgIGFueSwgbXVz dCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVnZW1lbnQ6DQoqICAgICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQ0KKiAgICAgICAgQXBhY2hl IFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiINCiogICAgQWx0 ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVnZW1lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUg aXRzZWxmLA0KKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWdl bWVudHMgbm9ybWFsbHkgYXBwZWFyLg0KKg0KKiA0LiBUaGUgbmFtZXMgIlRoZSBKYWthcnRhIFBy b2plY3QiLCAiQW50IiwgYW5kICJBcGFjaGUgU29mdHdhcmUNCiogICAgRm91bmRhdGlvbiIgbXVz dCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZA0KKiAg ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuDQoqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUu b3JnLg0KKg0KKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiQXBhY2hlIg0KKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4NCiogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBh Y2hlIEdyb3VwLg0KKg0KKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQg QU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEDQoqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTDQoqIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQoqIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1INCiog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLA0KKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UDQoqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YNCiogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORA0KKiBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwN CiogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkgT1VUDQoqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKiBTVUNIIERBTUFHRS4NCiogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N CioNCiogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBt YWRlIGJ5IG1hbnkNCiogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdh cmUgRm91bmRhdGlvbi4gIEZvciBtb3JlDQoqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29m dHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQ0KKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4u DQoqLw0KDQpwYWNrYWdlIG9yZy5hcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLm9wdGlvbmFsOw0K DQppbXBvcnQgamF2YS5pby5GaWxlOw0KaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsNCmlt cG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOw0KaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7DQppbXBv cnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247DQppbXBvcnQgb3JnLmFwYWNo ZS50b29scy5hbnQuRGlyZWN0b3J5U2Nhbm5lcjsNCmltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFu dC5Qcm9qZWN0Ow0KaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7DQppbXBvcnQgb3Jn LmFwYWNoZS50b29scy5hbnQudGFza2RlZnMuQ2FsbFRhcmdldDsNCmltcG9ydCBvcmcuYXBhY2hl LnRvb2xzLmFudC50YXNrZGVmcy5Qcm9wZXJ0eTsNCmltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFu dC50eXBlcy5FbnVtZXJhdGVkQXR0cmlidXRlOw0KaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50 LnR5cGVzLkZpbGVTZXQ7DQoNCi8qKg0KICogQ2FsbCBhIHRhcmdldCBmb3JlYWNoIGVudHJ5IGlu IGEgc2V0IG9mIHBhcmFtZXRlcnMgYmFzZWQgb24gYSBmaWxlc2V0Lg0KICogIDxwcmU+DQogKiAg ICA8dGFyZ2V0IG5hbWU9InRhcmdldDEiPg0KICogICAgICA8Zm9yZWFjaCB0YXJnZXQ9InRhcmdl dDIiPg0KICogICAgICAgIDxwYXJhbSBuYW1lPSJwYXJhbTEiPg0KICogICAgICAgICAgICA8Zmls ZXNldCByZWZpZD0iZnNldDEiLz4NCiAqICAgICAgICA8L3BhcmFtPg0KICogICAgICAgIDxwYXJh bSBuYW1lPSJwYXJhbTIiPg0KICogICAgICAgICAgPGl0ZW0gdmFsdWU9ImphciIgLz4NCiAqICAg ICAgICAgIDxpdGVtIHZhbHVlPSJ6aXAiIC8+DQogKiAgICAgICAgPC9wYXJhbT4NCiAqICAgICAg IDwvZm9yZWFjaD4NCiAqICAgIDwvdGFyZ2V0Pg0KICoNCiAqICAgIDx0YXJnZXQgbmFtZT0idGFy Z2V0MiI+DQogKiAgICAgIDxlY2hvIG1lc3NhZ2U9InByb3AgaXMgJHtwYXJhbTF9LiR7cGFyYW0y fSIgLz4NCiAqICAgIDwvdGFyZ2V0Pg0KICogPC9wcmU+DQogKiA8YnI+DQogKiBSZWFsbHkgdGhp cyBqdXN0IGEgd3JhcHBlciBhcm91bmQgIkFudENhbGwiDQogKiA8YnI+DQogKiBBZGRlZCBhICJ0 eXBlIiBhdHRyaWJ1dGUgdGhhdCB3b3JrcyBwcmVjaXNlbHkgbGlrZSBpdHMgZXF1aXZhbGVudA0K ICogaW4gPGNvZGU+RXhlY3V0ZU9uPC9jb2RlPi4gIEl0IGFsbG93cyB0aGUgdXNlcg0KICogdG8g c3BlY2lmeSB3aGV0aGVyIGRpcmVjdG9yaWVzLCBmaWxlcywgb3IgYm90aCBkaXJlY3RvcmllcyBh bmQgZmlsZXMNCiAqIGZyb20gdGhlIGZpbGVzZXRzIGFyZSBpbmNsdWRlZCBhcyBlbnRyaWVzIGlu IHRoZSBwYXJhbWV0ZXIgc2V0Lg0KICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86dHB2QHNwYW1j b3AubmV0Ij5UaW0gVmVybnVtPC9hPg0KICovDQpwdWJsaWMgY2xhc3MgRm9yZWFjaFRhc2sgZXh0 ZW5kcyBUYXNrIHsNCg0KCS8qKiBEZWZhdWx0cyB0byAiZmlsZSIuICovDQogICAgcHJvdGVjdGVk IFN0cmluZyB0eXBlID0gImZpbGUiOw0KDQogICAgcHJpdmF0ZSBTdHJpbmcgc3ViVGFyZ2V0Ow0K ICAgIHByaXZhdGUgVmVjdG9yIHBhcmFtczsNCiAgICBwcml2YXRlIEhhc2h0YWJsZSBwcm9wZXJ0 aWVzOw0KDQogICAgLyoqDQogICAgICogRW51bWVyYXRlZCBhdHRyaWJ1dGUgd2l0aCB0aGUgdmFs dWVzICJmaWxlIiwgImRpciIgYW5kICJib3RoIg0KICAgICAqIGZvciB0aGUgdHlwZSBhdHRyaWJ1 dGUuDQogICAgICovDQogICAgcHVibGljIHN0YXRpYyBjbGFzcyBGaWxlRGlyQm90aCBleHRlbmRz IEVudW1lcmF0ZWRBdHRyaWJ1dGUgew0KICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VmFsdWVz KCkgew0KICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7DQogICAgICAgICAgICAgICAg ImZpbGUiLCAiZGlyIiwgImJvdGgiDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgfQ0K DQogICAgLyoqDQogICAgICogSW5uZXIgY2xhc3Mgc3RvcmVzIDxpdGVtPnMgd2l0aCA8cGFyYW0+ IGxpc3RzDQogICAgICovDQogICAgcHVibGljIGNsYXNzIFBhcmFtSXRlbSB7DQoNCiAgICAgICAg cHJpdmF0ZSBTdHJpbmcgdmFsdWU7DQoNCiAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3Ry aW5nIHZhbHVlKSB7DQogICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7DQogICAgICAgIH0N Cg0KICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgew0KICAgICAgICAgICAgcmV0dXJu IHRoaXMudmFsdWU7DQogICAgICAgIH0NCg0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIElubmVy IGNsYXNzIHN0b3JlcyBzZXRzIG9mIDxwYXJhbT5zLg0KICAgICAqIEl0IGNhbiBob2xkIDxmaWxl c2V0PnMgb3IgPGl0ZW0+cyBvciBib3RoLg0KICAgICAqLw0KICAgIHB1YmxpYyBjbGFzcyBQYXJh bVNldCB7DQoNCiAgICAgICAgcHJpdmF0ZSBWZWN0b3IgZmlsZXNldHM7DQogICAgICAgIHByaXZh dGUgVmVjdG9yIGl0ZW1zOw0KICAgICAgICBwcml2YXRlIFN0cmluZyBuYW1lOw0KDQogICAgICAg IHB1YmxpYyBQYXJhbVNldCgpIHsNCiAgICAgICAgICAgIGZpbGVzZXRzID0gbmV3IFZlY3Rvcigp Ow0KICAgICAgICAgICAgaXRlbXMgPSBuZXcgVmVjdG9yKCk7DQogICAgICAgIH0NCg0KICAgICAg ICBwdWJsaWMgdm9pZCBhZGRGaWxlc2V0KEZpbGVTZXQgZmlsZXNldCkgew0KICAgICAgICAgICAg ZmlsZXNldHMuYWRkRWxlbWVudChmaWxlc2V0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHB1Ymxp YyBQYXJhbUl0ZW0gY3JlYXRlSXRlbSgpIHsNCiAgICAgICAgICAgIFBhcmFtSXRlbSBpdGVtID0g bmV3IFBhcmFtSXRlbSgpOw0KICAgICAgICAgICAgaXRlbXMuYWRkRWxlbWVudChpdGVtKTsNCiAg ICAgICAgICAgIHJldHVybiBpdGVtOw0KICAgICAgICB9DQoNCiAgICAgICAgcHVibGljIHZvaWQg c2V0TmFtZShTdHJpbmcgbmFtZSkgew0KICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsNCiAg ICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsNCiAgICAgICAgICAg IHJldHVybiBuYW1lOw0KICAgICAgICB9DQoNCiAgICAgICAgcHVibGljIEVudW1lcmF0aW9uIGdl dFZhbHVlcyhQcm9qZWN0IHByb2plY3QpIHsNCg0KICAgICAgICAgICAgLyogQXMgYW4gYXJiaXRy YXJ5IHJ1bGUsIHRoaXMgd2lsbCByZXR1cm4gZmlsZXNldHMgZmlyc3QsDQogICAgICAgICAgICBh bmQgdGhlbiA8aXRlbT5zLiBUaGUgb3JkZXJpbmcgb2YgdGhlIGJ1aWxkZmlsZSBpcw0KICAgICAg ICAgICAgbm90IGd1YXJhbnRlZWQuICovDQoNCiAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSBu ZXcgVmVjdG9yKCk7DQoNCiAgICAgICAgICAgIEVudW1lcmF0aW9uIGVudW0gPSBmaWxlc2V0cy5l bGVtZW50cygpOw0KICAgICAgICAgICAgd2hpbGUgKGVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsN Cg0KICAgICAgICAgICAgICAgIEZpbGVTZXQgZmlsZVNldCAgICAgICAgICA9IChGaWxlU2V0KWVu dW0ubmV4dEVsZW1lbnQoKTsNCiAgICAgICAgICAgICAgICBGaWxlIGJhc2UgICAgICAgICAgICAg ICAgPSBmaWxlU2V0LmdldERpcihwcm9qZWN0KTsNCiAgICAgICAgICAgICAgICBEaXJlY3RvcnlT Y2FubmVyIHNjYW5uZXIgPSBmaWxlU2V0LmdldERpcmVjdG9yeVNjYW5uZXIocHJvamVjdCk7DQoN CiAgICAgICAgICAgICAgICBpZiAoISAiZGlyIi5lcXVhbHModHlwZSkpIHsNCiAgICAgICAgICAg ICAgICAgICAgU3RyaW5nW10gZmlsZXMgPSBnZXRGaWxlcyhiYXNlLCBzY2FubmVyKTsNCiAgICAg ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykgew0K ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFkZEVsZW1lbnQoZmlsZXNbal0pOw0KICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg aWYgKCEgImZpbGUiLmVxdWFscyh0eXBlKSkgew0KICAgICAgICAgICAgICAgICAgICBTdHJpbmdb XSBkaXJzID0gZ2V0RGlycyhiYXNlLCBzY2FubmVyKTsNCiAgICAgICAgICAgICAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBkaXJzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZXMuYWRkRWxlbWVudChkaXJzW2pdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBlbnVtID0g aXRlbXMuZWxlbWVudHMoKTsNCiAgICAgICAgICAgIHdoaWxlIChlbnVtLmhhc01vcmVFbGVtZW50 cygpKSB7DQoNCiAgICAgICAgICAgICAgICBQYXJhbUl0ZW0gaXRlbSA9IChQYXJhbUl0ZW0pZW51 bS5uZXh0RWxlbWVudCgpOw0KICAgICAgICAgICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KGl0ZW0u Z2V0VmFsdWUoKSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMu ZWxlbWVudHMoKTsNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIEZvcmVhY2hUYXNr KCkgew0KICAgICAgICBwYXJhbXMgPSBuZXcgVmVjdG9yKCk7DQogICAgICAgIHByb3BlcnRpZXMg PSBuZXcgSGFzaHRhYmxlKCk7DQogICAgfQ0KDQogICAgcHVibGljIHZvaWQgaW5pdCgpIHsNCiAg ICB9DQoNCiAgICBwcml2YXRlIHZvaWQgYnVpbGRQcm9wZXJ0eShTdHJpbmcgcHJvcE5hbWUsIFN0 cmluZyBwcm9wVmFsdWUpIHsNCiAgICAgICAgcHJvcGVydGllcy5wdXQocHJvcE5hbWUsIHByb3BW YWx1ZSk7DQogICAgfQ0KDQogICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGVUYXJnZXQoKSB7DQoNCiAg ICAgICAgLyogVGhlICJjYWxsZWUiIGhhcyB0byBiZSBjcmVhdGVkIGVhY2ggdGltZSBpbiBvcmRl ciB0byBtYWtlDQogICAgICAgIHRoZSBwcm9wZXJ0aWVzIG11dGFibGUuICovDQoNCiAgICAgICAg Q2FsbFRhcmdldCBjYWxsZWU7DQogICAgICAgIGNhbGxlZSA9IChDYWxsVGFyZ2V0KXByb2plY3Qu Y3JlYXRlVGFzaygiYW50Y2FsbCIpOw0KICAgICAgICBjYWxsZWUuaW5pdCgpOw0KDQogICAgICAg IGNhbGxlZS5zZXRUYXJnZXQoc3ViVGFyZ2V0KTsNCg0KICAgICAgICBFbnVtZXJhdGlvbiBrZXlz ID0gcHJvcGVydGllcy5rZXlzKCk7DQogICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50 cygpKSB7DQoNCiAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1l bnQoKTsNCiAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKXByb3BlcnRpZXMuZ2V0KGtl eSk7DQoNCiAgICAgICAgICAgIFByb3BlcnR5IHByb3AgPSBjYWxsZWUuY3JlYXRlUGFyYW0oKTsN CiAgICAgICAgICAgIHByb3Auc2V0TmFtZShrZXkpOw0KICAgICAgICAgICAgcHJvcC5zZXRWYWx1 ZSh2YWwpOw0KICAgICAgICB9DQoNCiAgICAgICAgY2FsbGVlLmV4ZWN1dGUoKTsNCiAgICB9DQoN CiAgICAvKioNCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJlY3Vyc2l2ZWx5IGl0ZXJh dGUgdGhyb3VnaA0KICAgICAqIGVhY2ggcGFyYW1ldGVyIHNldC4NCiAgICAgKiBJdCBlbmRzIHVw IGJlaW5nIHNvbWV0aGluZyBsaWtlOg0KICAgICAqIDxwcmU+DQogICAgICAqICAgIGZvciggaT0w OyBpPCBwYXJhbXNbMF0uc2l6ZSA7IGkrKyApDQogICAgICAqICAgICAgIGZvciggaj0wOyBqIDwg cGFyYW1zWzFdLnNpemUgOyBqKysgKQ0KICAgICAgKiAgICAgICAgICBmb3IoIGs9MDsgayA8IHBh cmFtc1syXS5zaXplIDsgaysrICkNCiAgICAgICogICAgICAgICAgICAgZXhlY3V0ZVRhcmdldCgg cGFyYW1zWzBdW2ldLCBwYXJhbXNbMV1bal0gLCBwYXJhbXNbMl1ba10gKSA7DQogICAgICAqIDwv cHJlPg0KICAgICAqLw0KICAgIHByaXZhdGUgdm9pZCBleGVjdXRlUGFyYW1ldGVycyhpbnQgcGFy YW1OdW1iZXIpIHsNCiAgICAgICAgaWYgKHBhcmFtTnVtYmVyID09IHBhcmFtcy5zaXplKCkpIHsN Cg0KICAgICAgICAgICAgZXhlY3V0ZVRhcmdldCgpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAg ICAgICAgUGFyYW1TZXQgcGFyYW1TZXQgPSAoUGFyYW1TZXQpcGFyYW1zLmVsZW1lbnRBdChwYXJh bU51bWJlcik7DQoNCiAgICAgICAgICAgIEVudW1lcmF0aW9uIHZhbHVlcyA9IHBhcmFtU2V0Lmdl dFZhbHVlcyhwcm9qZWN0KTsNCiAgICAgICAgICAgIHdoaWxlICh2YWx1ZXMuaGFzTW9yZUVsZW1l bnRzKCkpIHsNCg0KICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKXZhbHVlcy5u ZXh0RWxlbWVudCgpOw0KICAgICAgICAgICAgICAgIGJ1aWxkUHJvcGVydHkocGFyYW1TZXQuZ2V0 TmFtZSgpLCB2YWwpOw0KDQogICAgICAgICAgICAgICAgZXhlY3V0ZVBhcmFtZXRlcnMocGFyYW1O dW1iZXIgKyAxKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1Ymxp YyB2b2lkIGV4ZWN1dGUoKSB7DQoNCiAgICAgICAgaWYgKHN1YlRhcmdldCA9PSBudWxsKSB7DQog ICAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIkF0dHJpYnV0ZSB0YXJnZXQgaXMg cmVxdWlyZWQuIiwgbG9jYXRpb24pOw0KICAgICAgICB9DQoNCiAgICAgICAgZXhlY3V0ZVBhcmFt ZXRlcnMoMCk7DQogICAgfQ0KDQogICAgcHVibGljIFBhcmFtU2V0IGNyZWF0ZVBhcmFtKCkgew0K ICAgICAgICBQYXJhbVNldCBwYXJhbSA9IG5ldyBQYXJhbVNldCgpOw0KICAgICAgICBwYXJhbXMu YWRkRWxlbWVudChwYXJhbSk7DQogICAgICAgIHJldHVybiBwYXJhbTsNCiAgICB9DQoNCiAgICBw dWJsaWMgdm9pZCBzZXRUYXJnZXQoU3RyaW5nIHRhcmdldCkgew0KICAgICAgICBzdWJUYXJnZXQg PSB0YXJnZXQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGZp bGVzIGZyb20gdGhpcyBEaXJlY3RvcnlTY2FubmVyIHRoYXQgc2hvdWxkDQogICAgICogYmUgaW5j bHVkZWQgb24gdGhlIGNvbW1hbmQgbGluZS4NCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgU3RyaW5n W10gZ2V0RmlsZXMoRmlsZSBiYXNlZGlyLCBEaXJlY3RvcnlTY2FubmVyIGRzKSB7DQogICAgICAg IHJldHVybiBkcy5nZXRJbmNsdWRlZEZpbGVzKCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog UmV0dXJuIHRoZSBsaXN0IG9mIERpcmVjdG9yaWVzIGZyb20gdGhpcyBEaXJlY3RvcnlTY2FubmVy IHRoYXQNCiAgICAgKiBzaG91bGQgYmUgaW5jbHVkZWQgb24gdGhlIGNvbW1hbmQgbGluZS4NCiAg ICAgKi8NCiAgICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0RGlycyhGaWxlIGJhc2VkaXIsIERpcmVj dG9yeVNjYW5uZXIgZHMpIHsNCiAgICAgICAgcmV0dXJuIGRzLmdldEluY2x1ZGVkRGlyZWN0b3Jp ZXMoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTaGFsbCB0aGUgY29tbWFuZCB3b3JrIG9u bHkgb24gZmlsZXMsIGRpcmVjdG9yaWVzIG9yIGJvdGg/DQogICAgICovDQogICAgcHVibGljIHZv aWQgc2V0VHlwZShGaWxlRGlyQm90aCB0eXBlKSB7DQogICAgICAgIHRoaXMudHlwZSA9IHR5cGUu Z2V0VmFsdWUoKTsNCiAgICB9DQoNCn0NCg0K ------_=_NextPart_001_01C0CF81.CAD9361C Content-Type: text/html; name="foreach.html" Content-Transfer-Encoding: base64 Content-Description: foreach.html Content-Disposition: attachment; filename="foreach.html" PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29u dGVudD0iZW4tdXMiPg0KPHRpdGxlPkFudCBVc2VyIE1hbnVhbDwvdGl0bGU+DQo8L2hlYWQ+DQoN Cjxib2R5Pg0KDQo8aDI+PGEgbmFtZT0iZm9yZWFjaCI+Rm9yZWFjaDwvYT48L2gyPg0KPGgzPkRl c2NyaXB0aW9uPC9oMz4NCjxwPkl0ZXJhdGVzIG92ZXIgYSBzZXQgb2YgcGFyYW1ldGVycyB0byBj YWxsIGFub3RoZXIgdGFyZ2V0IHdpdGhpbiB0aGUgc2FtZSBidWlsZC1maWxlLjwvcD4NCjxwPlRo ZSBzZXQgb2YgcGFyYW1ldGVycyBhcmUgam9pbmVkIHRvIGZvcm0gYSBjYXJ0ZXNpYW4gcHJvZHVj dCwgYW5kIHRoZSBzcGVjaWZpZWQNCiAgIHRhcmdldCBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBl bGVtZW50IGluIHRoZSByZXN1bHRpbmcgc2V0LjwvcD4NCg0KPGgzPlBhcmFtZXRlcnM8L2gzPg0K PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4NCiAgPHRy Pg0KICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+DQogICAgPHRkIHZh bGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVy IiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAg IDx0ZCB2YWxpZ249InRvcCI+dGFyZ2V0PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0 YXJnZXQgdG8gZXhlY3V0ZS48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRl ciI+WWVzPC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCI+dHlwZTwv dGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIj5PbmUgb2YgPGk+ZmlsZTwvaT4sIDxpPmRpcjwvaT4g b3IgPGk+Ym90aDwvaT4uIElmIHNldCB0byA8aT5maWxlPC9pPiwgb25seSB0aGUgbmFtZXMgb2Yg cGxhaW4gZmlsZXMgd2lsbCBiZSBzZW50IHRvIHRoZSBjb21tYW5kLiBJZiBzZXQgdG8gPGk+ZGly PC9pPiwgb25seSB0aGUgbmFtZXMgb2YgZGlyZWN0b3JpZXMgYXJlIGNvbnNpZGVyZWQuPC90ZD4N CiAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vLCBpZiBvbWl0dGVkIGRlZmF1 bHQgaXMgPGk+ZmlsZTwvaT48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjxoMz5QYXJhbWV0ZXJz IHNwZWNpZmllZCBhcyBuZXN0ZWQgZWxlbWVudHM8L2gzPg0KPGg0PnBhcmFtPC9oND4NCjxwPlNw ZWNpZmllcyB0aGUgcHJvcGVydGllcyB0byBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIHNwZWNpZmll ZCB0YXJnZXQuPC9wPg0KPHA+RWFjaCAmbHQ7cGFyYW0mZ3Q7IGZvcm1zIGEgc2V0IG9mIHBhcmFt ZXRlcnMgd2l0aCBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lPC9wPg0KPHA+VGhlIGVsZW1lbnRzIGlu IHRoZSBwYXJhbWV0ZXIgc2V0IGNhbiBiZSB0YWtlbiBmcm9tIGVpdGhlciBhDQo8YSBocmVmPSIu Li9Db3JlVHlwZXMvZmlsZXNldC5odG1sIj5maWxlc2V0PC9hPiBvciBhIGxpc3Qgb2YgJmx0O2l0 ZW0mZ3Q7IGVsZW1lbnRzLg0KSWYgdGhlIGVsZW1lbnRzIGFyZSB0YWtlbiBmcm9tIGEgZmlsZXNl dCwgdGhlIDxpPnR5cGU8L2k+IGF0dHJpYnV0ZSAgb2YgJmx0O2ZvcmVhY2gmZ3Q7DQpkZXRlcm1p bmVzIHdoZXRoZXIgZmlsZXMsIGRpcmVjdG9yaWVzLCBvciBib3RoIGZpbGVzIGFuZCBkaXJlY3Rv cmllcyBmcm9tDQp0aGUgZmlsZXNldCBhcmUgaW5jbHVkZWQuPC9wPg0KDQo8aDM+RXhhbXBsZXM8 L2gzPg0KPHByZT4NCiAgJmx0O3RhcmdldCBuYW1lPSZxdW90O2RlZmF1bHQmcXVvdDsmZ3Q7DQog ICAgJmx0O2ZvcmVhY2ggdGFyZ2V0PSZxdW90O2NvbXByZXNzJnF1b3Q7Jmd0Ow0KICAgICAgJmx0 O3BhcmFtIG5hbWU9JnF1b3Q7cHJvZ3JhbSZxdW90OyZndDsNCiAgICAgICAgJmx0O2l0ZW0gdmFs dWU9JnF1b3Q7Y29tcHJlc3MmcXVvdDsvPg0KICAgICAgICAmbHQ7aXRlbSB2YWx1ZT0mcXVvdDtn emlwJnF1b3Q7Lz4NCiAgICAgICZsdDsvcGFyYW0mZ3Q7DQogICAgICAmbHQ7cGFyYW0gbmFtZT0m cXVvdDtmaWxlJnF1b3Q7Jmd0Ow0KICAgICAgICAmbHQ7ZmlsZXNldCBkaXI9JnF1b3Q7LiZxdW90 OyBpbmNsdWRlcz0mcXVvdDsqKi8qLnRhciZxdW90Oy8+DQogICAgICAmbHQ7L3BhcmFtJmd0Ow0K ICAgICZsdDsvZm9yZWFjaCZndDsNCiAgJmx0Oy90YXJnZXQmZ3Q7DQoNCiAgJmx0O3RhcmdldCBu YW1lPSZxdW90O2NvbXByZXNzJnF1b3Q7Jmd0Ow0KICAgICZsdDtleGVjIGV4ZWN1dGFibGU9JnF1 b3Q7JHtwcm9ncmFtfSZxdW90OyZndDsNCiAgICAgICZsdDthcmcgZmlsZT0mcXVvdDske2ZpbGV9 JnF1b3Q7LyZndDsNCiAgICAmbHQ7L2V4ZWMmZ3Q7DQogICZsdDsvdGFyZ2V0Jmd0Ow0KPC9wcmU+ DQo8cD5XaWxsIHBhc3MgZWFjaCAmcXVvdDt0YXImcXVvdDsgZmlsZSB0aHJvdWdoIGJvdGggJnF1 b3Q7Y29tcHJlc3MmcXVvdDsgYW5kICZxdW90O2d6aXAmcXVvdDs8L3A+DQo8cHJlPg0KICAmbHQ7 dGFyZ2V0IG5hbWU9JnF1b3Q7ZGVmYXVsdCZxdW90OyZndDsNCiAgICAmbHQ7Zm9yZWFjaCB0YXJn ZXQ9JnF1b3Q7emlwLWRpcnMmcXVvdDsgdHlwZT0mcXVvdDtkaXImcXVvdDsmZ3Q7DQogICAgICAm bHQ7cGFyYW0gbmFtZT0mcXVvdDtzcmMtZGlyJnF1b3Q7Jmd0Ow0KICAgICAgICAmbHQ7ZmlsZXNl dCBkaXI9JnF1b3Q7LiZxdW90OyBpbmNsdWRlcz0mcXVvdDsqJnF1b3Q7Lz4NCiAgICAgICZsdDsv cGFyYW0mZ3Q7DQogICAgJmx0Oy9mb3JlYWNoJmd0Ow0KICAmbHQ7L3RhcmdldCZndDsNCg0KICAm bHQ7dGFyZ2V0IG5hbWU9JnF1b3Q7emlwLWRpcnMmcXVvdDsmZ3Q7DQogICAgJmx0O3ppcCB6aXBm aWxlPSZxdW90OyR7c3JjLWRpcn0uemlwJnF1b3Q7ICZndDsNCiAgICAgICZsdDt6aXBmaWxlc2V0 IGRpcj0mcXVvdDske3NyYy1kaXJ9JnF1b3Q7IHByZWZpeD0mcXVvdDske3NyYy1kaXJ9JnF1b3Q7 LyZndDsNCiAgICAmbHQ7L2V4ZWMmZ3Q7DQogICZsdDsvdGFyZ2V0Jmd0Ow0KPC9wcmU+DQo8cD5X aWxsIGNyZWF0ZSBvbmUgemlwIGFyY2hpdmUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBl dmVyeSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEZpbGVzIHdpdGhp biB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBpZ25vcmVkLjwvcD4NCjxocj4NCjxwIGFs aWduPSJjZW50ZXIiPkNvcHlyaWdodCAmY29weTsgMjAwMCwyMDAxIEFwYWNoZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLiBBbGwgcmlnaHRzDQpSZXNlcnZlZC48L3A+DQoNCjwvYm9keT4NCjwvaHRtbD4N Cg0K ------_=_NextPart_001_01C0CF81.CAD9361C--