PGh0bWw+PGhlYWQ+PCEtLSBDb3B5cmlnaHQgMjAwNyBBYXJvbiBXaW5kc29yCiAgICAgCiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgogICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCiAgICAKICAtLT4KPHRpdGxlPkJvb3N0IEdyYXBoIExpYnJhcnk6IGlzX2t1cmF0b3dza2lfc3ViZ3JhcGg8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGFsaW5rPSIjZmYwMDAwIiAKICAgICAgYmdjb2xvcj0iI2ZmZmZmZiIgCiAgICAgIGxpbms9IiMwMDAwZWUiIAogICAgICB0ZXh0PSIjMDAwMDAwIiAKICAgICAgdmxpbms9IiM1NTFhOGIiPiAKPGltZyBzcmM9Ii4uLy4uLy4uL2Jvb3N0LnBuZyIgYWx0PSJDKysgQm9vc3QiIGhlaWdodD0iODYiIHdpZHRoPSIyNzciPiAKCjxiciBjbGVhcj0iIj4KCjxoMT48dHQ+aXNfa3VyYXRvd3NraV9zdWJncmFwaDwvdHQ+PC9oMT4KCjxwcmU+dGVtcGxhdGUgJmx0O3R5cGVuYW1lIEdyYXBoLCB0eXBlbmFtZSBGb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIFZlcnRleEluZGV4TWFwJmd0Owpib29sIGlzX2t1cmF0b3dza2lfc3ViZ3JhcGgoY29uc3QgR3JhcGgmYW1wOyBnLCBGb3J3YXJkSXRlcmF0b3IgYmVnaW4sIEZvcndhcmRJdGVyYXRvciBlbmQsIFZlcnRleEluZGV4TWFwIHZtKQo8L3ByZT4KCjxwPgoKPHR0PmlzX2t1cmF0b3dza2lfc3ViZ3JhcGgoZywgYmVnaW4sIGVuZCk8L3R0PiByZXR1cm5zIDx0dD50cnVlPC90dD4gZXhhY3RseSAKd2hlbiB0aGUgc2VxdWVuY2Ugb2YgZWRnZXMgZGVmaW5lZCBieSB0aGUgcmFuZ2UgPHR0PltiZWdpbiwgZW5kKTwvdHQ+IGZvcm1zIGEgCjxhIGhyZWY9Ii4vcGxhbmFyX2dyYXBocy5odG1sI2t1cmF0b3dza2lzdWJncmFwaHMiPiBLdXJhdG93c2tpIHN1YmdyYXBoPC9hPiBpbiAKdGhlIGdyYXBoIDx0dD5nPC90dD4uIElmIHlvdSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuIGFyYml0cmFyeSBncmFwaCBoYXMgYSAKPGk+SzxzdWI+NTwvc3ViPjwvaT4gb3IgPGk+SzxzdWI+MywzPC9zdWI+PC9pPiBtaW5vciwgIHlvdSBzaG91bGQgdXNlIHRoZSAKZnVuY3Rpb24gPHR0PjxhIGhyZWY9ImJveWVyX215cnZvbGQuaHRtbCI+Ym95ZXJfbXlydm9sZF9wbGFuYXJpdHlfdGVzdDwvYT48L3R0Pgp0byBpc29sYXRlIHN1Y2ggYSBtaW5vciBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24uIDx0dD5pc19rdXJhdG93c2tpX3N1YmdyYXBoCjwvdHQ+IGV4aXN0cyB0byBhaWQgaW4gdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uIG9mIHRoZSBmdW5jdGlvbiAKPHR0PmJveWVyX215cnZvbGRfcGxhbmFyaXR5X3Rlc3Q8L3R0PiwgYW5kIGZvciB0aGF0IHJlYXNvbiwgaXQgZXhwZWN0cyBpdHMgCmlucHV0IHRvIGJlIGEgcmVzdHJpY3RlZCBzZXQgb2YgZWRnZXMgZm9ybWluZyBhIEt1cmF0b3dza2kgc3ViZ3JhcGgsIGFzIApkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93Lgo8cD4KPHR0PmlzX2t1cmF0b3dza2lfc3ViZ3JhcGg8L3R0PiBjcmVhdGVzIGEgdGVtcG9yYXJ5IGdyYXBoIG91dCBvZiB0aGUgc2VxdWVuY2UgCm9mIGVkZ2VzIGdpdmVuIGFuZCByZXBlYXRlZGx5IGNvbnRyYWN0cyBlZGdlcyB1bnRpbCBpdCBlbmRzIHVwIHdpdGggYSBncmFwaCAKd2l0aCBlaXRoZXIgYWxsIGVkZ2VzIG9mIGRlZ3JlZSAzIG9yIGFsbCBlZGdlcyBvZiBkZWdyZWUgNC4gVGhlIGZpbmFsIApjb250cmFjdGVkIGdyYXBoIGlzIHRoZW4gY2hlY2tlZCBhZ2FpbnN0IDxpPks8c3ViPjU8L3N1Yj48L2k+IG9yCjxpPks8c3ViPjMsMzwvc3ViPjwvaT4gdXNpbmcgdGhlIEJvb3N0IEdyYXBoIExpYnJhcnkncyAKPGEgaHJlZj0iaXNvbW9ycGhpc20uaHRtbCI+aXNvbW9ycGhpc208L2E+CmZ1bmN0aW9uLiBUaGUgY29udHJhY3Rpb24gcHJvY2VzcyBzdGFydHMgYnkgY2hvb3NpbmcgZWRnZXMgYWRqYWNlbnQgdG8gYSB2ZXJ0ZXgKb2YgZGVncmVlIDEgYW5kIGNvbnRyYWN0aW5nIHRob3NlLiBXaGVuIG5vbmUgYXJlIGxlZnQsIGl0IG1vdmVzIG9uIHRvIGVkZ2VzIAphZGphY2VudCB0byBhIHZlcnRleCBvZiBkZWdyZWUgMi4gSWYgb25seSBkZWdyZWUgMyB2ZXJ0aWNlcyBhcmUgbGVmdCBhZnRlciB0aGlzCnN0YWdlLCB0aGUgZ3JhcGggaXMgY2hlY2tlZCBhZ2FpbnN0IDxpPks8c3ViPjMsMzwvc3ViPjwvaT4uIE90aGVyd2lzZSwgaWYgCnRoZXJlJ3MgYXQgbGVhc3Qgb25lIGRlZ3JlZSA0IHZlcnRleCwgZWRnZXMgYWRqYWNlbnQgdG8gZGVncmVlIDMgdmVydGljZXMgYXJlIApjb250cmFjdGVkIGFzIG5lZWVkZWQgYW5kIHRoZSBmaW5hbCBncmFwaCBpcyBjb21wYXJlZCB0byA8aT5LPHN1Yj41PC9zdWI+PC9pPi4KPHA+CkluIG9yZGVyIGZvciB0aGlzIHByb2Nlc3MgdG8gYmUgZGV0ZXJtaW5pc3RpYywgd2UgbWFrZSB0aGUgZm9sbG93aW5nIHR3byAKcmVzdHJpY3Rpb25zIG9uIHRoZSBpbnB1dCBncmFwaCBnaXZlbiB0byA8dHQ+aXNfa3VyYXRvd3NraV9zdWJncmFwaDwvdHQ+Ogo8b2w+CjxsaT5ObyBlZGdlIGNvbnRyYWN0aW9uIG5lZWRlZCB0byBwcm9kdWNlIGEga3VyYXRvd3NraSBzdWJncmFwaCByZXN1bHRzIGluIAptdWx0aXBsZSBlZGdlcyBiZXR3ZWVuIHRoZSBzYW1lIHBhaXIgb2YgdmVydGljZXMgKE5vIGVkZ2UgPGk+e2EsYn08L2k+IHdpbGwgYmUgCmNvbnRyYWN0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBjb250cmFjdGlvbiBwcm9jZXNzIGlmIDxpPmE8L2k+IGFuZCA8aT5iPC9pPiAKc2hhcmUgYSBjb21tb24gbmVpZ2hib3IuKQo8L2xpPjxsaT5JZiB0aGUgZ3JhcGggY29udHJhY3RzIHRvIGEgPGk+SzxzdWI+NTwvc3ViPjwvaT4sIG9uY2UgdGhlIGdyYXBoIGhhcyAKYmVlbiBjb250cmFjdGVkIHRvIG9ubHkgdmVydGljZXMgb2YgZGVncmVlIGF0IGxlYXN0IDMsIG5vIGN5Y2xlcyBleGlzdCB0aGF0IApjb250YWluIHNvbGVseSBkZWdyZWUgMyB2ZXJ0aWNlcy4KPC9saT48L29sPgpUaGUgc2Vjb25kIHJlc3RyaWN0aW9uIGlzIG5lZWRlZCBib3RoIHRvIGRpc2NyaW1pbmF0ZSBiZXR3ZWVuIHRhcmdldGluZyBhIAo8aT5LPHN1Yj41PC9zdWI+PC9pPiBvciBhIDxpPks8c3ViPjMsMzwvc3ViPjwvaT4gYW5kIHRvIGRldGVybWluc3RpY2FsbHkgCmNvbnRyYWN0IHRoZSB2ZXJ0aWNlcyBvZiBkZWdyZWUgNCBvbmNlIHRoZSA8aT5LPHN1Yj41PC9zdWI+PC9pPiBoYXMgYmVlbiAKdGFyZ2V0ZWQuIFRoZSBLdXJhdG93c2tpIHN1YmdyYXBoIG91dHB1dCBieSB0aGUgZnVuY3Rpb24gPHR0Pgo8YSBocmVmPSJib3llcl9teXJ2b2xkLmh0bWwiPmJveWVyX215cnZvbGRfcGxhbmFyaXR5X3Rlc3Q8L2E+PC90dD4gaXMgCmd1YXJhbnRlZWQgdG8gbWVldCBib3RoIG9mIHRoZSBhYm92ZSByZXF1aXJlbWVudHMuCgoKPGgzPkNvbXBsZXhpdHk8L2gzPgoKT24gYSBncmFwaCB3aXRoIDxpPm48L2k+IHZlcnRpY2VzLCB0aGlzIGZ1bmN0aW9uIHJ1bnMgaW4gdGltZSA8aT5PKG4pPC9pPi4KCjxoMz5XaGVyZSBEZWZpbmVkPC9oMz4KCjxwPgo8YSBocmVmPSIuLi8uLi8uLi9ib29zdC9ncmFwaC9pc19rdXJhdG93c2tpX3N1YmdyYXBoLmhwcCI+Cjx0dD5ib29zdC9ncmFwaC9pc19rdXJhdG93c2tpX3N1YmdyYXBoLmhwcDwvdHQ+CjwvYT4KCjwvcD48aDM+UGFyYW1ldGVyczwvaDM+CgpJTjogPHR0PkdyYXBoJmFtcDsgZzwvdHQ+Cgo8YmxvY2txdW90ZT4KQW4gdW5kaXJlY3RlZCBncmFwaCB3aXRoIG5vIHNlbGYtbG9vcHMgb3IgcGFyYWxsZWwgZWRnZXMuIFRoZSBncmFwaCB0eXBlIG11c3QgCmJlIGEgbW9kZWwgb2YgPGEgaHJlZj0iVmVydGV4TGlzdEdyYXBoLmh0bWwiPlZlcnRleCBMaXN0IEdyYXBoPC9hPi4KPC9ibG9ja3F1b3RlPgoKSU46IDx0dD5Gb3J3YXJkSXRlcmF0b3I8L3R0PiAKCjxibG9ja3F1b3RlPgpBIEZvcndhcmRJdGVyYXRvciB3aXRoIHZhbHVlX3R5cGUgCjx0dD5ncmFwaF90cmFpdHMmbHQ7R3JhcGgmZ3Q7OjplZGdlX2Rlc2NyaXB0b3I8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKSU46IDx0dD5WZXJ0ZXhJbmRleE1hcCB2bTwvdHQ+Cgo8YmxvY2txdW90ZT4KQSA8YSBocmVmPSIuLi8uLi9wcm9wZXJ0eV9tYXAvZG9jL1JlYWRhYmxlUHJvcGVydHlNYXAuaHRtbCI+UmVhZGFibGUgUHJvcGVydHkgTWFwCjwvYT4gdGhhdCBtYXBzIHZlcnRpY2VzIGZyb20gPHR0Pmc8L3R0PiB0byBkaXN0aW5jdCBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgCjx0dD5bMCwgbnVtX3ZlcnRpY2VzKGcpICk8L3R0Pjxicj4KPGI+RGVmYXVsdDwvYj46IDx0dD5nZXQodmVydGV4X2luZGV4LGcpPC90dD48YnI+CjwvYmxvY2txdW90ZT4KCgo8aDM+RXhhbXBsZTwvaDM+Cgo8cD4KPGEgaHJlZj0iLi4vZXhhbXBsZS9rdXJhdG93c2tpX3N1YmdyYXBoLmNwcCI+Cjx0dD5leGFtcGxlcy9rdXJhdG93c2tpX3N1YmdyYXBoLmNwcDwvdHQ+CjwvYT4KCjwvcD48aDM+U2VlIEFsc288L2gzPgoKPHA+CjxhIGhyZWY9InBsYW5hcl9ncmFwaHMuaHRtbCI+UGxhbmFyIEdyYXBocyBpbiB0aGUgQm9vc3QgR3JhcGggTGlicmFyeTwvYT4KCgo8YnI+CjwvcD48aHI+CkNvcHlyaWdodCCpIDIwMDcgQWFyb24gV2luZHNvciAoPGEgaHJlZj0ibWFpbHRvOmFhcm9uLndpbmRzb3JAZ21haWwuY29tIj4KYWFyb24ud2luZHNvckBnbWFpbC5jb208L2E+KQogCjwvYm9keT48L2h0bWw+Cg==