<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>Orm</name>
	<version>0.2.2</version>
  <mincmsversion>1.11.0</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPm1vcmUgaW5mb3JtYXRpb25zIG9uIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbSZlZ3JhdmU7dHJlIHV0aWxpcyZlYWN1dGU7IHBvdXIgc3AmZWFjdXRlO2NpZmllciBkYW5zIHF1ZWxsZSBsYW5ndWUgYWZmaWNoZXIgbGUgbW9kdWxlIGRhbnMgbGEgcGFydGllIHB1YmxpcXVlLiBDZSBwYXJhbSZlZ3JhdmU7dHJlIG4mIzAzOTtlc3QgcGFzIHN1cHBvcnQmZWFjdXRlOyBvdSB1dGlsZSBwb3VyIHRvdXMgbGVzIG1vZHVsZXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBLZXZpbiBEYW5lemlzIChha2EgQmVzcykgJmx0O2NvbnRhY3QgYXQgZnVyaWUgcG9pbnQgYmUmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4yLjI8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz5zZWUgY2hhbmdlbG9nIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjxiciAvPg==]]></about>
	<description><![CDATA[This module implements a small ORM layer for other modules]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKGlzc2V0KCRwYXJhbXNbJ2RlbGV0ZUxvZyddKSl7CglpZihmaWxlX2V4aXN0cyhPcm1UcmFjZTo6Z2V0TG9nRmlsZSgpKSl7CgkJdW5saW5rKE9ybVRyYWNlOjpnZXRMb2dGaWxlKCkpOwoJfQoJT3JtVHJhY2U6OmluZm8oIlJlaW5pdGlhdGUgdGhlIGxvZyBmaWxlIik7Cn0gZWxzZWlmIChpc3NldCgkcGFyYW1zWydkZWxldGVDYWNoZSddKSl7CgoJJGNhY2hlID0gT3JtQ2FjaGU6OmdldEluc3RhbmNlKCk7CgkkY2FjaGUtPmNsZWFyQ2FjaGUoKTsKCU9ybVRyYWNlOjppbmZvKCJSZWluaXRpYXRlIHRoZSBjYWNoZSBjb250ZW50Iik7Cn0gZWxzZSBpZiAoaXNzZXQoJHBhcmFtc1snbGV2ZWwnXSkgfHwgaXNzZXQoJHBhcmFtc1snY2FjaGUnXSkgKXsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsb2dsZXZlbCcsICRwYXJhbXNbJ2xldmVsJ10pOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhY2hlVHlwZScsICRwYXJhbXNbJ2NhY2hlJ10pOwoJCgkvL1dlIHJlbG9hZCB0aGUgY2FjaGUgYW55d2F5CgkkY2FjaGUgPSBPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKTsKCSRjYWNoZS0+Y2xlYXJDYWNoZSgpOwoJCglPcm1UcmFjZTo6aW5mbygiSW5pdGlhdGUgdGhlIGNhY2hlIGNvbnRlbnQiKTsKfQoKJHRoaXMtPnJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJyk7CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKLy9DT05TVEFOVEVTCiRpdGVtc0xvZyA9IGFycmF5KCJERUJVRyI9Pk9ybVRyYWNlOjokREVCVUcsICJJTkZPIj0+T3JtVHJhY2U6OiRJTkZPLCJXQVJOIj0+T3JtVHJhY2U6OiRXQVJOLCJFUlJPUiI9Pk9ybVRyYWNlOjokRVJST1IpOwokaXRlbXNDYWNoZSA9IGFycmF5KCJOT05FIj0+T3JtQ2FjaGU6OiROT05FLCAiU0NSSVBUIj0+T3JtQ2FjaGU6OiRTQ1JJUFQpOwoKJGN1cnJlbnRMZXZlbExvZyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb2dsZXZlbCcsIE9ybVRyYWNlOjokSU5GTyk7CiRjdXJyZW50VHlwZUNhY2hlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhY2hlVHlwZScsIE9ybUNhY2hlOjokTk9ORSk7CgovL0luaXRpYXRlIHRoZSBmaWxlIG9mIGxvZwppZighZmlsZV9leGlzdHMoT3JtVHJhY2U6OmdldExvZ0ZpbGUoKSkpewoJT3JtVHJhY2U6OmluZm8oIkluaXRpYXRlIHRoZSBsb2cgZmlsZSIpOzsKfQoKJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwokc21hcnR5LT5hc3NpZ24oImlkIiwkaWQpOwokc21hcnR5LT5hc3NpZ24oImZvcm1zdGFydCIsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZG1pbl9zYXZlJykpOwokc21hcnR5LT5hc3NpZ24oInN1Ym1pdCIsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLCAnU2F2ZSBQcmVmcycpKTsKJHNtYXJ0eS0+YXNzaWduKCJkZWxldGVMb2ciLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVsZXRlTG9nJywgJ0NsZWFuIExvZ3MnKSk7CiRzbWFydHktPmFzc2lnbigiZGVsZXRlQ2FjaGUiLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVsZXRlQ2FjaGUnLCAnQ2xlYW4gQ2FjaGUnKSk7CiRzbWFydHktPmFzc2lnbigic2VsZWN0TG9nIiwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24gKCRpZCwgJ2xldmVsJywgJGl0ZW1zTG9nLCAtMSwgJGN1cnJlbnRMZXZlbExvZykpOwokc21hcnR5LT5hc3NpZ24oInNlbGVjdENhY2hlIiwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24gKCRpZCwgJ2NhY2hlJywgJGl0ZW1zQ2FjaGUsIC0xLCAkY3VycmVudFR5cGVDYWNoZSkpOwoKJHNtYXJ0eS0+YXNzaWduKCJ1cmxMb2ciLCBPcm1UcmFjZTo6Z2V0TG9nVXJsKCkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbi50cGwnKTsKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NpbXBsZSBPcm0nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICcnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSB1bmluc3RhbGxlZCwgYnllICEiJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHk/IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgc21hbGwgT1JNIGxheWVyIGZvciBvdGhlciBtb2R1bGVzJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJ3NlZSBjaGFuZ2Vsb2cgOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmVzc3Rpb2xsZS9vcm0tbXMiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2dpdGh1Yi5jb20vYmVzc3Rpb2xsZS9vcm0tbXM8L2E+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+bW9yZSBpbmZvcm1hdGlvbnMgb24gOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmVzc3Rpb2xsZS9vcm0tbXMiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2dpdGh1Yi5jb20vYmVzc3Rpb2xsZS9vcm0tbXM8L2E+PC9wPgonOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.MyAutoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBhdXRvbG9hZCBzeXN0ZW0gdGhhdCB3aWxsIG1lbW9yaXplIGFsbCB0aGUgZW50aXRpZXMgdXNlZCBieSBhbGwgdGhlIG1vZHVsZXMKICoKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwogCiAvKioKICogU3RhdGljIENsYXNzIG1hbmFnaW5nIGVudGl0aWVzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uCiAqCVRoZSBtYWluIHVzZSBpcyB0byBub3QgcmVkZWNsYXJhdGUgWCBpbnN0YW5jZXMgb2Ygc2FtZSBjbGFzc2VzIGlmIGl0J3Mgbm90IG5lY2Vzc2FyeS4KICogQWxsIG1vZHVsZXMgaGF2ZSB0aGVpciBvd24gbmFtZXNwYWNlIHRvIGF2b2lkIHNoYXJpbmcgZW50aXRpZXMgYmV0d2VlbiB0d28gbW9kdWxlcwogKgogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCmZpbmFsIGNsYXNzIE15QXV0b2xvYWQKewoJcHJpdmF0ZSBzdGF0aWMgJGluc3RhbmNlczsKCQoJLyoqCgkgKiBQcml2YXRlIGNvbnN0cnVjdG9yCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpe30JCgkKCS8qKgoJICogRnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBlbnRpdGllcyB0aGVtLXNlbGYgZHVyaW5nIHRoZWlyIF9jb25zdHJ1Y3QoKSBmdW5jdGlvbgoJICogaXQgd2lsbCBzdG9jayBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5IChpZiBub3QgYWxyZWFkeSBleGlzdGluZykgaW4gaGlzIG1lbW9yeQogICAgICogCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkKCSAqLwoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBhZGRJbnN0YW5jZSgkbmFtZXNwYWNlLCBPcm1FbnRpdHkgJGluc3RhbmNlKQoJewkKCQkkbmFtZXNwYWNlID0gc3RydG9sb3dlcigkbmFtZXNwYWNlKTsKCQkkbmFtZSA9IHN0cnRvbG93ZXIoJGluc3RhbmNlLT5nZXROYW1lKCkpOwoJCQkJCgkJaWYoIU15QXV0b2xvYWQ6OmlzVmFsaWRlTmFtZXNwYWNlKCRuYW1lc3BhY2UpKXsKCQkJc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXSA9IGFycmF5KCk7CgkJfQoJCQkJCgkJaWYoaXNzZXQoc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskbmFtZV0pKSB7CgkJCU9ybVRyYWNlOjpkZWJ1ZygiSW5zdGFuY2UgIi4kbmFtZS4iIGFscmVhZHkgaW4gbWVtb3J5LiIpOwoJCQlyZXR1cm47CgkJfQoJCQoJCU9ybVRyYWNlOjpkZWJ1ZygiQWRkaW5nIHRoZSBpbnN0YW5jZSAiLiRuYW1lLiIgaW50byB0aGUgbmFtZXNwYWNlICIuJG5hbWVzcGFjZSk7CgkJc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskbmFtZV0gPSAkaW5zdGFuY2U7Cgl9CgkKCS8qKgoJICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIGVudGl0eSBmcm9tIHRoZSBtZW1vcnkuIEVhY2ggaW5zdGFuY2UgaXMgYSBjbG9uZSB0byBhdm9pZCB1c2luZwoJICogdGhlIHNhbWUgb2JqZWN0IAogICAgICogCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkKCSAqCgkgKiBAcmV0dXJuIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiBlbnRpdHkKCSAqLwoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKQoJewoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOwoJCSRpbnN0YW5jZU5hbWUgPSBzdHJ0b2xvd2VyKCRpbnN0YW5jZU5hbWUpOwoJCWlmKCFNeUF1dG9sb2FkOjppc1ZhbGlkZU5hbWVzcGFjZSgkbmFtZXNwYWNlKSl7CgkJCU9ybVRyYWNlOjplcnJvcigiVGhlIG5hbWVzcGFjZSAnJG5hbWVzcGFjZScgZG9lc24ndCBleGlzdGUgaW50byB0aGUgT3JtIFN5c3RlbSIpOwoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgbmFtZXNwYWNlICckbmFtZXNwYWNlJyBkb2Vzbid0IGV4aXN0ZSBpbnRvIHRoZSBPcm0gU3lzdGVtIik7CgkJfQoJCQoJCU9ybVRyYWNlOjpkZWJ1ZygiQXNraW5nIGFuIGluc3RhbmNlIG9mICIuJGluc3RhbmNlTmFtZS4gIiBmb3IgbmFtZXNwYWNlICIuJG5hbWVzcGFjZSk7CgkJaWYoTXlBdXRvbG9hZDo6aGFzSW5zdGFuY2UoJG5hbWVzcGFjZSwgJGluc3RhbmNlTmFtZSkpCgkJewoJCQlPcm1UcmFjZTo6ZGVidWcoIkluc3RhbmNlICIuJGluc3RhbmNlTmFtZS4iIHJldHVybmVkLiIpOwoJCQlyZXR1cm4gY2xvbmUgc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskaW5zdGFuY2VOYW1lXTsKCQl9CgkJCgkJT3JtVHJhY2U6OmVycm9yKCJObyBpbnN0YW5jZSAkaW5zdGFuY2VOYW1lIGZvdW5kIGluIG1lbW9yeSBmb3IgbmFtZXNwYWNlICIuJG5hbWVzcGFjZSk7CgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm8gaW5zdGFuY2UgJGluc3RhbmNlTmFtZSBmb3VuZCBpbiBtZW1vcnkgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOwoJfQoJCgkvKioKCSAqIFJldHVybiB0cnVlIGlmIHRoZSBpbnN0YW5jZSBleGlzdHMgaW4gdGhlIG1lbW9yeSBmb3IgdGhlIHNhbWUgbmFtZXNwYWNlCiAgICAgKiAKCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUKCSAqIEBwYXJhbSBzdHJpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQoJICoKCSAqIEByZXR1cm4gQm9vbGVhbiBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzCgkgKi8KCXB1YmxpYyBmaW5hbCBzdGF0aWMgZnVuY3Rpb24gaGFzSW5zdGFuY2UoJG5hbWVzcGFjZSwgJGluc3RhbmNlTmFtZSl7CgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7CgkJJGluc3RhbmNlTmFtZSA9IHN0cnRvbG93ZXIoJGluc3RhbmNlTmFtZSk7CgkJCgkJaWYoTXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSkpewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCQoJCXJldHVybiBpc3NldChzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRpbnN0YW5jZU5hbWVdKTsKCX0KCQoJLyoqCgkgKiBSZXR1cm4gYWxsIHRoZSBpbnN0YW5jZXMgb2YgYWxsIHRoZSBlbnRpdGllcyBmcm9tIGEgc2luZ2xlIG5hbWVzcGFjZQogICAgICogCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkKCSAqCgkgKiBAcmV0dXJuIGFycmF5PE9ybUVudGl0eT4gYW4gYXJyYXkgb2YgYWxsIHRoZSBlbnRpdGllcwoJICovCglwdWJsaWMgZmluYWwgc3RhdGljIGZ1bmN0aW9uIGdldEFsbEluc3RhbmNlcygkbmFtZXNwYWNlKQoJewoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOwoJCWlmKCFNeUF1dG9sb2FkOjppc1ZhbGlkZU5hbWVzcGFjZSgkbmFtZXNwYWNlKSl7CgkJCU9ybVRyYWNlOjplcnJvcigiVGhlIG5hbWVzcGFjZSAnJG5hbWVzcGFjZScgZG9lc24ndCBleGlzdGUgaW50byB0aGUgT3JtIFN5c3RlbSIpOwoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgbmFtZXNwYWNlICckbmFtZXNwYWNlJyBkb2Vzbid0IGV4aXN0ZSBpbnRvIHRoZSBPcm0gU3lzdGVtIik7CgkJfQoJCQoJCXJldHVybiBzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdOwoJfQoJCgkvKioKCSAqIFJldG91cm5lIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBpcyBrbm93biBpbiBtZW1vcnkKICAgICAqIAoJICogQHBhcmFtIG5hbWVzcGFjZSBuYW1lc3BhY2Ugb2YgdGhlIGVudGl0eSdzIG1vZHVsZQoJICoKCSAqIEByZXR1cm4gQm9vbGVhbiBpZiB0aGUgbmFtZXNwYWNlIGV4aXN0cwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRlTmFtZXNwYWNlKCRuYW1lc3BhY2UpIHsKCQlyZXR1cm4gaXNzZXQoc2VsZjo6JGluc3RhbmNlc1tzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpXSk7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmCache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aGljaCBwcm92aWRlIGFuIGdsb2JhbCBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgY2FjaGluZyBzeXN0ZW1zCiAqCiAqIEBzaW5jZSAwLjIuMAogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KCgovKioKICoKICogIFN0YXRpYyBjbGFzc2VzIHVzZWQgdG8gcHJvdmlkZSBsaXN0IG9mIHNpZ25hdHVyZSBmb3IgYWxsIHRoZSBjYWNoaW5nIHN5c3RlbXMKICoKICogIEV4YW1wbGUgOiAKICogIDxjb2RlPgogKiAgCS8vQ2FsbCB0byBjbXNtcyB0byBnZXQgdGhlIGRhdGFiYXNlIGNvbm5lY3RvcgogKiAgCSRkYiA9IGNtc21zKCktPkdldERiKCk7CiAqICAgICAgJGNhY2hlSW5zdGFuY2UgPSBPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKTsKICogIAkKICogIAkvL0RlZmluZXMgYSBuZXcgQ3VzdG9tZXIgZW50aXR5CiAqICAJJGVudGl0eSA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCdteU1vZHVsZScsICdjdXN0b21lcicpOwogKiAgCQogKiAgCS8vU2VsZWN0IGFsbCBDdXN0b21lcnMKICogIAkkcXVlcnlTZWxlY3QgPSAnU2VsZWN0ICogRlJPTSAnLiRlbnRpdHktPmdldERibmFtZSgpOwogKiAgCQogKiAgCS8vSWYgdGhlIGNhY2hpbmcgc3lzdGVtIGFscmVhZHkga25vdyB0aGUgYW5zd2VyIDogd2UgcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkKICogIAlpZigkY2FjaGVJbnN0YW5jZS0+aXNDYWNoZSgkcXVlcnlTZWxlY3QpKSB7CiAqICAJCXJldHVybiAkY2FjaGVJbnN0YW5jZS0+Z2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0KTsKICogIAl9CiAqICAJCiAqICAJLy9TbyB3ZSBuZWVkIHRvIGV4ZWN1dGUgdGhlIHF1ZXJ5CiAqICAJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTZWxlY3QpOwogKiAgCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciEiKTt9CiAqICAJCiAqICAJJGVudGl0eXMgPSBhcnJheSgpOwogKiAgCXdoaWxlICgkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkgewogKiAgCQkkZW50aXR5c1tdID0gT3JtQ29yZTo6cm93VG9FbnRpdHkoJGVudGl0eSwgJHJvdyk7CiAqICAJfQogKiAgCQogKiAgCS8vRG9uJ3QgZm9yZ2V0IHRvIHB1c2ggdGhlIHJlc3VsdCBpbnRvIHRoZSBjYWNoaW5nIHN5c3RlbSBmb3IgdGhlIG5leHQgY2FsbAogKiAgCSRjYWNoZUluc3RhbmNlLT5zZXRDYWNoZSgkcXVlcnlTZWxlY3QsIG51bGwsICRlbnRpdHlzKTsKIAogKiAgCXJldHVybiAkZW50aXR5czsKICoJPC9jb2RlPgogKgogKiBAc2luY2UgMC4yLjAKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCmFic3RyYWN0IGNsYXNzIE9ybUNhY2hlIHsJCgoJcHVibGljIHN0YXRpYyAkTk9ORSA9IDA7CglwdWJsaWMgc3RhdGljICRTQ1JJUFQgPSAxOwoJCQoJLyoqCgkgKiBQcml2YXRlIGNvbnN0cnVjdG9yCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgkKCS8qKgoJICogV2lsbCByZXR1cm4gYSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2FjaGUuCgkgKgoJICogQHBhcmFtIG1peGVkIG5vdCByZXF1aXJlZCA6IHRoZSB0eXBlIG9mIGNhY2hlLiBCeSBkZWZhdWx0IGl0IHdpbGwgdGFrZSB0aGUgdHlwZSBvZiBjYWNoZSBkZWZpbmVkIGFzIGRlZmF1bHQgaW50byBDbXNNYWRlU2ltcGxlCgkgKgoJICogQHJldHVybiBhbiBpbnN0YW5jZSBvZiBDYWNoZS4KCSAqKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoJHR5cGVDYWNoZSA9IG51bGwpewoJCQoJCWlmKCR0eXBlQ2FjaGUgPT0gbnVsbCl7CgkJCSRvcm0gPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCktPmdldF9tb2R1bGVfaW5zdGFuY2UoJ09ybScpOwoJCQkkdHlwZUNhY2hlID0gJG9ybS0+R2V0UHJlZmVyZW5jZSgnY2FjaGVUeXBlJywgT3JtQ2FjaGU6OiROT05FKTsKCQl9CgkJCgkJc3dpdGNoKCR0eXBlQ2FjaGUpewoJCQljYXNlIE9ybUNhY2hlOjokTk9ORToKCQkJCXJldHVybiBPcm1DYWNoZU5vbmU6OmdldE15T3duSW5zdGFuY2UoKTsKCQkJCWJyZWFrOwoJCQljYXNlIE9ybUNhY2hlOjokU0NSSVBUOgoJCQkJcmV0dXJuIE9ybUNhY2hlU2NyaXB0OjpnZXRNeU93bkluc3RhbmNlKCk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCU9ybVRyYWNlOjplcnJvcigiVHlwZSBvZiBDYWNoZSAjeyR0eXBlQ2FjaGV9IGlzIG5vdCBhIHZhbGlkIFR5cGUgb2YgQ2FjaGUiKTsKCQkJCWV4aXQgLTE7CgkJfQoJfQoJCQkKCS8qKgoJICoJU2V0IHRoZSBjYWNoZSBmb3IgYSBzcWwgcmVxdWVzdCwgaXRzIHBhcmFtZXRlcnMgYW5kIG9mIGNvdXJzZSB0aGUgcmVzdWx0CiAgICAgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwKCSAqIEBwYXJhbSBvYmplY3QgdGhlIHJlc3VsdAoJICovCglwdWJsaWMgYWJzdHJhY3QgZnVuY3Rpb24gc2V0Q2FjaGUoJHNxbCwgJHBhcmFtcyA9IG51bGwsICR2YWx1ZSk7CgkKCS8qKgoJICogUXVlcnlpbmcgdGhlIGNhY2hlIGZvciBhIHNxbCByZXF1ZXN0IGFuZCBpdHMgcGFyYW1ldGVycwogICAgICogCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkKCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsCgkgKgoJICogQHJldHVybiBvYmplY3QgdGhlIHJlc3VsdAoJICovCglwdWJsaWMgYWJzdHJhY3QgZnVuY3Rpb24gZ2V0Q2FjaGUoJHNxbCwgJHBhcmFtcyA9IG51bGwpOwoKCS8qKgoJICogUmV0dXJuIHRydWUgaWYgYSBjYWNoZSBleGlzdCBmb3IgYSBzcWwgcmVxdWVzdCBhbmQgaXRzIHBhcmFtZXRlcnMKICAgICAqIAoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5CgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbAoJICoKCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBjYWNoZSBleGlzdHMKCSAqLwkKCXB1YmxpYyBhYnN0cmFjdCBmdW5jdGlvbiBpc0NhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKTsKCgkvKioKCSAqIEVtcHR5IHRoZSBjYWNoZS4gVmVyeSBpbXBvcnRhbnQgaWYgYmV0d2VlbiAyIHF1ZXJ5aW5nLCB0aGUgc3lzdGVtIG1heSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBzb21lIGRhdGEgaW4gdGhlIGRhdGFiYXNlCgkgKiAgSW4gdGhlIE9ybSBzeXN0ZW0sIHdlIGFsd2F5cyBkcm9wIHRoZSBjYWNoZSBpbiB0aGUgaW5zZXJ0L2RlbGV0ZS91cGRhdGUgZnVuY3Rpb24uCgkgKi8JCglwdWJsaWMgYWJzdHJhY3QgZnVuY3Rpb24gY2xlYXJDYWNoZSgpOwoKCS8qKgoJICogUmV0dXJuIGEgdW5pcXVlIGhhc2ggZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzCgkgKiAgdGhpcyBoYXNoIGlzIHVzZWQgdG8gRGVmaW5lcyBhIHVuaXF1ZSBlbnRyeSBpbnRvIHRoZSBjYWNoZQogICAgICogCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkKCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsCgkgKgoJICogQHJldHVybiBzdHJpbmcgdGhlIGhhc2gKCSAqLwkKCXB1YmxpYyBmdW5jdGlvbiBoYXNoKCRzcWwsICRwYXJhbXMgPSBudWxsKSB7CgkJaWYoJHBhcmFtcyA9PSBudWxsKXsKCQkJJHBhcmFtcyA9ICIiOwoJCX0KCQkKCQkkcCA9IHNlcmlhbGl6ZSgkcGFyYW1zKTsKCgkJcmV0dXJuIG1kNSgkc3FsLiRwKTsKCX0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmCacheNone.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aWNoIHByb3ZpZGUgYW4gZHVtbXkgY2FjaGluZyBzeXN0ZW0KICoKICogQHNpbmNlIDAuMi4wCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwoKCi8qKgogKgogKiAgU3RhdGljIGNsYXNzZSB1c2VkIHRvIHByb3ZpZGUgYSB6ZXJvLWNhY2hpbmcgc3lzdGVtLiAKICogICBJdCdzIGEgc2ltcGxlIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBzaWduYXR1cmUgb2YgY2FjaGluZwogKiAgIHdpY2ggd2lsbCBhbHdheXMgc2F5IHRoYXQgdGhlcmUgaXMgbm8gY2FjaGUgYXZhaWxhYmxlLCBmb3JjaW5nIAogKiAgIHByb2Nlc3Npbmcgb2YgZXZlcnkgcXVlcmllcwogKgogKiBAc2luY2UgMC4yLjAKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCmNsYXNzIE9ybUNhY2hlTm9uZSBleHRlbmRzIE9ybUNhY2hlewkKCQoJcHJpdmF0ZSBzdGF0aWMgJGluc3RhbmNlOwoJCQoJLyoqCgkgKiBQcml2YXRlIGNvbnN0cnVjdG9yCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TXlPd25JbnN0YW5jZSgpewoJCWlmKHNlbGY6OiRpbnN0YW5jZSA9PSBudWxsKXsKCQkJc2VsZjo6JGluc3RhbmNlID0gbmV3IE9ybUNhY2hlTm9uZSgpOwoJCX0KCQlyZXR1cm4gc2VsZjo6JGluc3RhbmNlOwoJfQoJCQkKCS8qKgoJICoJU2V0IHRoZSBjYWNoZSBmb3IgYSBzcWwgcmVxdWVzdCwgaXRzIHBhcmFtZXRlcnMgYW5kIG9mIGNvdXJzZSB0aGUgcmVzdWx0CiAgICAgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwKCSAqIEBwYXJhbSBvYmplY3QgdGhlIHJlc3VsdAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Q2FjaGUoJHNxbCwgJHBhcmFtcyA9IG51bGwsICR2YWx1ZSkgewkJCgkJLy9ObyBwcm9jZXNzaW5nCQkKCX0KCQoJLyoqCgkgKiBRdWVyeWluZyB0aGUgY2FjaGUgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzCiAgICAgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwKCSAqCgkgKiBAcmV0dXJuIG9iamVjdCB0aGUgcmVzdWx0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCkgewoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogUmV0dXJuIHRydWUgaWYgYSBjYWNoZSBleGlzdCBmb3IgYSBzcWwgcmVxdWVzdCBhbmQgaXRzIHBhcmFtZXRlcnMKICAgICAqIAoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5CgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbAoJICoKCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBjYWNoZSBleGlzdHMKCSAqLwkKCXB1YmxpYyBmdW5jdGlvbiBpc0NhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogRW1wdHkgdGhlIGNhY2hlLiBWZXJ5IGltcG9ydGFudCBpZiBiZXR3ZWVuIDIgcXVlcnlpbmcsIHRoZSBzeXN0ZW0gbWF5IGluc2VydC9kZWxldGUvdXBkYXRlIHNvbWUgZGF0YSBpbiB0aGUgZGF0YWJhc2UKCSAqICBJbiB0aGUgT3JtIHN5c3RlbSwgd2UgYWx3YXlzIGRyb3AgdGhlIGNhY2hlIGluIHRoZSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBmdW5jdGlvbi4KCSAqLwkKCXB1YmxpYyBmdW5jdGlvbiBjbGVhckNhY2hlKCl7CgkJLy9ObyBwcm9jZXNzaW5nCQoJfQoKCS8qKgoJICogUmV0dXJuIGEgdW5pcXVlIGhhc2ggZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzCgkgKiAgdGhpcyBoYXNoIGlzIHVzZWQgdG8gRGVmaW5lcyBhIHVuaXF1ZSBlbnRyeSBpbnRvIHRoZSBjYWNoZQogICAgICogCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkKCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsCgkgKgoJICogQHJldHVybiBzdHJpbmcgdGhlIGhhc2gKCSAqLwkKCXB1YmxpYyBmdW5jdGlvbiBoYXNoKCRzcWwsICRwYXJhbXMgPSBudWxsKSB7CgkJLy9ObyBwcm9jZXNzaW5nCQoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmCacheScript.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aWNoIHByb3ZpZGUgYSBtaW5pIGNhY2hpbmcgc3lzdGVtIG9mIE9ybSB0byBhdm9pZCBtdWx0aXBsZXMgc3FsIHJlcXVlc3RzCiAqCiAqIEBzaW5jZSAwLjIuMAogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KCi8qKgogKgogKiAgU3RhdGljIGNsYXNzZSB1c2VkIHRvIHByb3ZpZGUgYSB2ZXJ5IHNpbXBsZSBjYWNoaW5nIHN5c3RlbS4gWW91IGNhbiBwdXNoIHRoZSByZXN1bHQgb2YgYSByZXF1ZXN0IGludG8gaXQgYW5kIGFza2luZyBsYXRlcgogKgl0byBjb2xsZWN0IHRoZSByZXN1bHQuCiAqCiAqICBFeGFtcGxlIDogCiAqICA8Y29kZT4KICogIAkvL0NhbGwgdG8gY21zbXMgdG8gZ2V0IHRoZSBkYXRhYmFzZSBjb25uZWN0b3IKICogIAkkZGIgPSBjbXNtcygpLT5HZXREYigpOwogKiAgCQogKiAgCS8vRGVmaW5lcyBhIG5ldyBDdXN0b21lciBlbnRpdHkKICogIAkkZW50aXR5ID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJ215TW9kdWxlJywgJ2N1c3RvbWVyJyk7CiAqICAJCiAqICAJLy9TZWxlY3QgYWxsIEN1c3RvbWVycwogKiAgCSRxdWVyeVNlbGVjdCA9ICdTZWxlY3QgKiBGUk9NICcuJGVudGl0eS0+Z2V0RGJuYW1lKCk7CiAqICAJCiAqICAJLy9JZiB0aGUgY2FjaGluZyBzeXN0ZW0gYWxyZWFkeSBrbm93IHRoZSBhbnN3ZXIgOiB3ZSByZXR1cm4gdGhlIHJlc3VsdCBpbW1lZGlhdGVseQogKiAgCWlmKE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5pc0NhY2hlKCRxdWVyeVNlbGVjdCkpIHsKICogIAkJcmV0dXJuIE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5nZXRDYWNoZSgkcXVlcnlTZWxlY3QpOwogKiAgCX0KICogIAkKICogIAkvL1NvIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgcXVlcnkKICogIAkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVNlbGVjdCk7CiAqICAJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yISIpO30KICogIAkKICogIAkkZW50aXR5cyA9IGFycmF5KCk7CiAqICAJd2hpbGUgKCRyb3cgPSAkcmVzdWx0LT5GZXRjaFJvdygpKSB7CiAqICAJCSRlbnRpdHlzW10gPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkZW50aXR5LCAkcm93KTsKICogIAl9CiAqICAJCiAqICAJLy9Eb24ndCBmb3JnZXQgdG8gcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hpbmcgc3lzdGVtIGZvciB0aGUgbmV4dCBjYWxsCiAqICAJT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPnNldENhY2hlKCRxdWVyeVNlbGVjdCwgbnVsbCwgJGVudGl0eXMpOwogCiAqICAJcmV0dXJuICRlbnRpdHlzOwogKgk8L2NvZGU+CiAqCiAqICBUaGUgY2FjaGUgaXMgb25seSBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IGNhbGwgb2YgdGhlIHBocCBzY3JpcHQgCiAqICBBbmQgd2lsbCBiZSB1bmF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbC4KICoKICoKICogQHNpbmNlIDAuMi4wCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwpjbGFzcyBPcm1DYWNoZVNjcmlwdCBleHRlbmRzIE9ybUNhY2hlIHsJCgkKCXByaXZhdGUgc3RhdGljICRpbnN0YW5jZTsKCXByaXZhdGUgc3RhdGljICRjYWNoZTsKCQkKCS8qKgoJICogUHJpdmF0ZSBjb25zdHJ1Y3RvcgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CgkJc2VsZjo6JGNhY2hlID0gYXJyYXkoKTsKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRNeU93bkluc3RhbmNlKCl7CgkJaWYoc2VsZjo6JGluc3RhbmNlID09IG51bGwpewoJCQlzZWxmOjokaW5zdGFuY2UgPSBuZXcgT3JtQ2FjaGVTY3JpcHQoKTsKCQl9CgkJcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsKCX0KCQoJLyoqCgkgKglTZXQgdGhlIGNhY2hlIGZvciBhIHNxbCByZXF1ZXN0LCBpdHMgcGFyYW1ldGVycyBhbmQgb2YgY291cnNlIHRoZSByZXN1bHQKICAgICAqIAoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5CgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbAoJICogQHBhcmFtIG9iamVjdCB0aGUgcmVzdWx0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCwgJHZhbHVlKSB7CQkKCQlzZWxmOjokY2FjaGVbc2VsZjo6aGFzaCgkc3FsLCRwYXJhbXMpXSA9ICR2YWx1ZTsKCQkKCX0KCQoJLyoqCgkgKiBRdWVyeWluZyB0aGUgY2FjaGUgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzCiAgICAgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwKCSAqCgkgKiBAcmV0dXJuIG9iamVjdCB0aGUgcmVzdWx0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCkgewoJCWlmKHNlbGY6OmlzQ2FjaGUoJHNxbCwgJHBhcmFtcykpIHsKCQkJcmV0dXJuIHNlbGY6OiRjYWNoZVtzZWxmOjpoYXNoKCRzcWwsJHBhcmFtcyldOwoJCX0KCQkKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIFJldHVybiB0cnVlIGlmIGEgY2FjaGUgZXhpc3QgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzCiAgICAgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwKCSAqCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY2FjaGUgZXhpc3RzCgkgKi8JCglwdWJsaWMgZnVuY3Rpb24gaXNDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCkgewoJCXJldHVybiBhcnJheV9LRVlfZXhpc3RzKHNlbGY6Omhhc2goJHNxbCwkcGFyYW1zKSxzZWxmOjokY2FjaGUpOwoJfQoKCS8qKgoJICogRW1wdHkgdGhlIGNhY2hlLiBWZXJ5IGltcG9ydGFudCBpZiBiZXR3ZWVuIDIgcXVlcnlpbmcsIHRoZSBzeXN0ZW0gbWF5IGluc2VydC9kZWxldGUvdXBkYXRlIHNvbWUgZGF0YSBpbiB0aGUgZGF0YWJhc2UKCSAqICBJbiB0aGUgT3JtIHN5c3RlbSwgd2UgYWx3YXlzIGRyb3AgdGhlIGNhY2hlIGluIHRoZSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBmdW5jdGlvbi4KCSAqLwkKCXB1YmxpYyBmdW5jdGlvbiBjbGVhckNhY2hlKCkgewoJCXNlbGY6OiRjYWNoZSA9IGFycmF5KCk7Cgl9Cgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmCAST.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IHR5cGUgZm9yIHRoZSBmaWVsZCBpbnRvIGRhdGFiYXNlCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KCgovKioKICogQ2xhc3MgRGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgZmllbGQsIGluIGVudGl0eSBidXQgYWxzbyBpbiBkYXRhYmFzZQogKiAKICogIE9ybUNBU1Q6OiRTVFJJTkcgYSBzaW1wbGUgc3RyaW5nCiAqICBPcm1DQVNUOjokQlVGRkVSIGEgZmllbGQgd2l0aCBubyBsaW1pdCBvZiBzaXplIChleGNlcHQgdGhlIG15c3FsIG5hdHVyYWwgbGltaXQpCiAqCiAqICBPcm1DQVNUOjokSU5URUdFUiBhbiBpbnRlZ2VyCiAqICBPcm1DQVNUOjokTlVNRVJJQyBhIGZpZWxkIGZvciBhIHJlYWwgbnVtYmVyIChlZyA6IHdpdGggY29tYSkKICogIE9ybUNBU1Q6OiRET1VCTEUgYSBmaWVsZCBmb3IgYmlnIG51bWJlcgogKiAKICogIE9ybUNBU1Q6OiREQVRFIGEgZmllbGQgZGF0ZQogKiAgT3JtQ0FTVDo6JFRJTUUgYSBmaWVsZCB0aW1lCiAqICBPcm1DQVNUOjokVFMgYSBmaWVsZCB0aW1lc3RhbXAKICogIE9ybUNBU1Q6OiREQVRFVElNRSBhIGZpZWxkIGRhdGVUaW1lCiAqICBPcm1DQVNUOjokVVVJRCBhIGZpZWxkIFVVSUQKICoKICogIE9ybUNBU1Q6OiROT05FIGEgVHJhbnNpYW50IGZpZWxkIDogd29uJ3QgYmUgcGVyc2lzdCBpbnRvIGRhdGFiYXNlCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiovCmNsYXNzIE9ybUNBU1QKewoJcHVibGljIHN0YXRpYyAkU1RSSU5HID0gMDsKCXB1YmxpYyBzdGF0aWMgJEJVRkZFUiA9IDE7CgkKCXB1YmxpYyBzdGF0aWMgJElOVEVHRVIgPSAyOwoJcHVibGljIHN0YXRpYyAkTlVNRVJJQyA9IDM7CglwdWJsaWMgc3RhdGljICRET1VCTEUgPSA0OwoJCglwdWJsaWMgc3RhdGljICREQVRFID0gNTsKCXB1YmxpYyBzdGF0aWMgJFRJTUUgPSA2OwoJcHVibGljIHN0YXRpYyAkVFMgPSA3OwoJcHVibGljIHN0YXRpYyAkREFURVRJTUUgPSA4OwoJCglwdWJsaWMgc3RhdGljICRVVUlEID0gOTsKCQkgIAoJcHVibGljIHN0YXRpYyAkTk9ORSA9IDk5Owp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmCore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1Db3JlCiAqIAogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCiAKIAovKioKICogTWFpbiBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBDbXNtYWRlc2ltcGxlIG5hdGl2ZXMgZnVuY3Rpb24gYW5kIHRoZSBuZWNlc3NpdHkgZm9yIHRoZSBPcm0gZnVuY3Rpb25zCiAqICAgCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiovCmNsYXNzIE9ybUNvcmUgeyAgCiAgICAvKioKICAgICogUHJvdGVjdGVkIGNvbnN0cnVjdG9yCiAgICAqICAgICAKICAgICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQogICAgICAKICAgIC8qKgogICAgKiB0cmFuc2Zvcm1zIHRoZSBlbnRpdHkncyBzdHJ1Y3R1cmUgaW50byBhZG9kYiBpbmZvcm1hdGlvbnMgCiAgICAqICAgICAgICAgCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgdGhlIGVudGl0eQogICAgKiBAcmV0dXJuIHRoZSBhZG9kYiBpbmZvcm1hdGlvbnMKICAgICovCglwcml2YXRlIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRGaWVsZHNUb0hxbChPcm1FbnRpdHkgJiRlbnRpdHkpIHsgICAgCgkJJGhxbCA9ICcnOwoKCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHktPmdldEZpZWxkcygpOwoKCQkvL0ZvciBlYWNoIEZpZWxkIGNvbnRhaW5lZCBpbiB0aGUgZW50aXR5CgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpIHsKCQkJLy9XZSBkb24ndCBjcmVhdGUgdGhlIEZpZWxkIHdoaWNoIGFyZSBsaW5rcyBleHRlcm5hbHMgb24gYXNzb2NpYXRpdmUgdGFibGVzCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgewoJCQkJY29udGludWU7CgkJCX0JCgkJCQoJCQkvL1dlIGRvbid0IGNyZWF0ZSB0aGUgdHJhbnNpZW50IEZpZWxkcyAKCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JE5PTkUpIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQlpZighZW1wdHkoJGhxbCkpIHsKCQkJCSRocWwgLj0gJyAsICc7CgkJCX0KCgkJCSRocWwgLj0gJyAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgJzsKCQkJJHNpemUgPSAkZmllbGQtPmdldFNpemUoKSAhPSAiIiA/ICIgKCIuJGZpZWxkLT5nZXRTaXplKCkuIikgIiA6ICIiOwoJCQlzd2l0Y2goJGZpZWxkLT5nZXRUeXBlKCkpIHsKCQkJCWNhc2UgT3JtQ0FTVDo6JFNUUklORyA6ICRocWwgLj0gJ0MnLiRzaXplOyBicmVhazsKCgkJCQljYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogJGhxbCAuPSAnSScuJHNpemU7IGJyZWFrOwoKCQkJCWNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiAkaHFsIC49ICdOJy4kc2l6ZTsgYnJlYWs7CgoJCQkJY2FzZSBPcm1DQVNUOjokRE9VQkxFIDogJGhxbCAuPSAnRicuJHNpemU7IGJyZWFrOwoKCQkJCWNhc2UgT3JtQ0FTVDo6JEJVRkZFUiA6ICRocWwgLj0gJ1gnOyBicmVhazsKCgkJCQljYXNlIE9ybUNBU1Q6OiREQVRFIDogJGhxbCAuPSAnRCc7IGJyZWFrOwoKCQkJCWNhc2UgT3JtQ0FTVDo6JFRJTUUgOiAkaHFsIC49ICdUJzsgYnJlYWs7ICAgCgoJCQkJY2FzZSBPcm1DQVNUOjokVVVJRCA6ICRocWwgLj0gJ0MgKDM2KSAnOyBicmVhazsgICAKCgkJCQljYXNlIE9ybUNBU1Q6OiRUUyA6ICRocWwgLj0gJ0kgKDEwKSAnOyBicmVhazsgLy93b3JrYXJvdW5kIGZvciB0aGUgcmVhbCB0aW1lc3RhbXAgbWlzc2luZyBpbiBBRE9EQkxJVEUKCgkJCQljYXNlIE9ybUNBU1Q6OiREQVRFVElNRSA6ICRocWwgLj0gQ01TX0FET0RCX0RUOyBicmVhazsgICAKCQkJfQoJCQkKCQkJLy9NYW5hZ2UgdGhlIGRlZmF1bHQgdmFsdWUKCQkJaWYoJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSAhPSBudWxsKXsKCQkJCWlmKCRmaWVsZC0+Z2V0VHlwZSgpID09IE9ybUNBU1Q6OiRTVFJJTkcgfHwgJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JEJVRkZFUikgewoJCQkJCSRocWwgLj0gIiAgREVGQVVMVCAnIi5zdHJfcmVwbGFjZSgiJyIsICInJyIsJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSkuIicgIjsKCQkJCX0gZWxzZSB7CgkJCQkJJGhxbCAuPSAiICBERUZBVUxUICIuJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKS4iICI7CgkJCQl9CgkJCQkKCQkJfQoKCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgewoJCQkJaWYoJGVudGl0eS0+aXNBdXRvaW5jcmVtZW50KCkpIHsKCQkJCQkkaHFsIC49ICcgS0VZIEFVVE8nOwoJCQkJfSBlbHNlIHsKCQkJCQkkaHFsIC49ICcgS0VZICc7CgkJCQl9CgkJCX0KCQkJCQoJCX0KCQoJCU9ybVRyYWNlOjppbmZvKCRocWwpOwoKCQlyZXR1cm4gJGhxbDsKCX0KCQogICAgLyoqCiAgICAqIENyZWF0ZSBhIHRhYmxlIGludG8gRGF0YWJhc2UgZnJvbSB0aGUgc3RydWN0dXJlIG9mIGFuIE9ybUVudGl0eQogICAgKiAgV2lsbCBhbHNvIGNyZWF0ZSB0aGUgc2VxdWVuY2UgaWYgaXQncyBuZWVkZWQKICAgICogIAogICAgKiAgIGV4YW1wbGUgd2l0aCBhIEN1c3RvbWVyIGVudGl0eSA6IAogICAgKiA8Y29kZT4KICAgICogCiAgICAqIGNsYXNzIEN1c3RvbWVyIGV4dGVuZHMgT3JtRW50aXR5CiAgICAqIHsKICAgICogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgICogICAgewogICAgKiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICogICAgICAgIAogICAgKiAgICAgICAgJHRoaXMtPmFkZChuZXcgT3JtRmllbGQoJ2N1c3RvbWVyX2lkJyAgCgkqCQkJLCBPcm1DQVNUOjokSU5URUdFUgoJKgkJCSwgbnVsbAoJKgkJCSwgbnVsbAoJKgkJCSwgT3JtS0VZOjokUEsgCgkqCQkJKSk7CiAgICAqIAogICAgKiAgICAgICAgJHRoaXMtPmFkZChuZXcgT3JtRmllbGQoJ25hbWUnCiAgICAqICAgICAgICAJLCBPcm1DQVNUOjokU1RSSU5HIAogICAgKiAgICAgICAgCSwgMzIKICAgICogICAgICAgIAkpKTsKICAgICogCiAgICAqICAgICAgICAkdGhpcy0+YWRkKG5ldyBPcm1GaWVsZCgnbGFzdG5hbWUnCiAgICAqICAgICAgICAJLCBPcm1DQVNUOjokU1RSSU5HCiAgICAqICAgICAgICAJLCAzMgoJKgkJCSwgdHJ1ZSAgLy8gSXMgbnVsbGFibGUKICAgICogICAgICAgIAkpKTsKICAgICogICAgfQogICAgKiB9CiAgICAqIDwvY29kZT4KICAgICogCiAgICAqICBUaGUgYmVzdCB3YXkgdG8gY3JlYXRlIGl0cyB0YWJsZSBpbnRvIHRoZSBkYXRhYmFzZSA6IAogICAgKiAKICAgICogPGNvZGU+CiAgICAqICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7CiAgICAqICAgT3JtQ29yZTo6Y3JlYXRlVGFibGUoJGN1c3RvbWVyKTsKICAgICogPC9jb2RlPgogICAgKiAKICAgICogIFRoZSBmdW5jdGlvbiB3aWxsIGFsc28gdHJ5IHRvIHBvcHVsYXRlIHRoZSB0YWJsZSB3aXRoIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gaW5pdFRhYmxlKCkgaWYgaXQncyBkZWZpbmUgaW50byB0aGUgZW50aXR5IGNsYXNzLgogICAgKiAKCSogQHBhcmFtIE9ybSB0aGUgbW9kdWxlIHdoaWNoIGV4dGVuZHMgdGhlIE9ybSBtb2R1bGUKICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5CiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjcmVhdGVUYWJsZShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgewoJCgkJJGhxbCA9IE9ybUNvcmU6OmdldEZpZWxkc1RvSHFsKCRlbnRpdHlQYXJhbSk7CgkJJHJlc3VsdCA9IE9ybURiOjpjcmVhdGVUYWJsZSgkZW50aXR5UGFyYW0tPmdldERibmFtZSgpLCAkaHFsKTsKCQkJCQoJCS8vSWYgbmVjZXNzYXJ5LCBpdCB3aWxsIGNyZWF0ZSBhIHNlcXVlbmNlIG9uIHRoZSB0YWJsZS4KCQlpZigkZW50aXR5UGFyYW0tPmdldFNlcW5hbWUoKSAhPSBudWxsKXsKCQkJT3JtRGI6OmNyZWF0ZVNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsKCQl9CgkJCgkJLy9XZSBtYW5hZ2UgdGhlICgidW5pcXVlIikgaW5kZXhlcwoJCSRpbmRleGVzID0gJGVudGl0eVBhcmFtLT5nZXRJbmRleGVzKCk7CgoJCS8vRm9yIGVhY2ggRmllbGQgY29udGFpbmVkIGluIHRoZSBlbnRpdHkKCQlmb3JlYWNoKCRpbmRleGVzIGFzICRpbmRleCkgewoJCQkkcmVzdWx0ID0gT3JtRGI6OmNyZWF0ZUluZGV4KCRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCksICRpbmRleFsnZmllbGRzJ10sICRpbmRleFsndW5pcXVlJ10pOwoJCX0KCgkJLy9XZSBpbml0aWF0ZSB0aGUgdGFibGUuCgkJJGVudGl0eVBhcmFtLT5pbml0VGFibGUoKTsKCX0KICAgIAogICAgLyoqCiAgICAqIERyb3AgdGhlIHRhYmxlIGZvciB0aGUgT3JtRW50aXR5IGluIHBhcmFtZXRlcnMKICAgICogIFdpbGwgYWxzbyBkcm9wIHRoZSBzZXF1ZW5jZSBpZiBpdCdzIG5lZWRlZAogICAgKiAKICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5CiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkcm9wVGFibGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsKCgkJT3JtRGI6OmRyb3BUYWJsZSgkZW50aXR5UGFyYW0tPmdldERibmFtZSgpKTsKCgkJLy9JZiBuZWNlc3NhcnksIGl0IHdpbGwgZGVsZXRlIGEgc2VxdWVuY2Ugb24gdGhlIHRhYmxlLgoJCWlmKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpICE9IG51bGwpewoJCQlPcm1EYjo6ZHJvcFNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsKCQl9Cgl9ICAKICAKICAgIC8qKgogICAgKiBXaWxsIGVkaXQgdGhlIHRhYmxlIG9mIHRoZSBPcm1FbnRpdHkgaW4gcGFyYW1ldGVycyB3aXRoIHRoZSBTUUwgcXVlcnkgaW4gcGFyYW1ldGVycwogICAgKiAKICAgICogICBleGFtcGxlIDogaWYgeW91IG5lZWQgdG8gZG8gCiAgICAqIAogICAgKiA8Y29kZT4gICAgICAgIAogICAgKiAgIEFMVEVSIFRBQkxFIGAgdGFibGUgb2YgdGhlIEN1c3RvbWVyIGVudGl0eSBgIEFERCBgbmV3Q29sdW1uYCBJTlQgTk9UIE5VTEwgCiAgICAqICAgQUxURVIgVEFCTEUgYCB0YWJsZSBvZiB0aGUgQ3VzdG9tZXIgZW50aXR5IGAgRFJPUCBgb2xkQ29sdW1uYCAKICAgICogPC9jb2RlPgogICAgKiAKICAgICogIHRoZSBjb2RlIG11c3QgYmUgOgogICAgKiAKICAgICogPGNvZGU+CiAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOwogICAgKiAgICAgICBPcm1Db3JlOjphbHRlclRhYmxlKCRjdXN0b21lciwgIkFERCBgbmV3Q29sdW1uYCBJTlQgTk9UIE5VTEwiKTsKICAgICogICAgICAgT3JtQ29yZTo6YWx0ZXJUYWJsZSgkY3VzdG9tZXIsICJEUk9QIGBvbGRDb2x1bW5gIik7CiAgICAqIDwvY29kZT4KICAgICogICAKICAgICogCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBTUUwgcXVlcnkKICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGFsdGVyVGFibGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRzcWwpIHsJCgkJJHF1ZXJ5QWx0ZXIgPSAiQUxURVIgVEFCTEUgIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLiIgIi4kc3FsOyAgICAKCQkKCQkvL0V4ZWN1dGlvbgoJCSRyZXN1bHQgPSBPcm1EYjo6ZXhlY3V0ZSgkcXVlcnlBbHRlciwKCQkJCQkJCQkJbnVsbCwKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjphbHRlclRhYmxlKE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSwgeyRzcWx9KSIpOwoJfQogICAgCiAgICAvKioKICAgICAqIEluc2VydCBkYXRhIGludG8gZGF0YWJhc2UuCiAgICAgKiAKICAgICAqIEV4YW1wbGUgZm9yIGEgbmV3IEN1c3RvbWVyIDogY3VzdG9tZXJfaWQsIG5hbWUsIGxhc3ROYW1lIChvcHRpb25hbCkgCiAgICAgKiAgIAogICAgICogPGNvZGU+CiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICAqICAgICAgIAogICAgICogICAgICAgJGN1c3RvbWVyLT5zZXQoJ25hbWUnLCdEdXJhbnQnKTsKICAgICAqICAgICAgICRjdXN0b21lci0+c2V0KCdsYXN0TmFtZSc9PidKb2huJyk7CiAgICAgKiAKICAgICAqICAgICAgIE9ybUNvcmU6Omluc2VydEVudGl0eSgkY3VzdG9tZXIpOwogICAgICogPC9jb2RlPgoJICoKCSAqIFlvdSBjb3VsZCBhbHNvIGNvZGUgZm9yIHRoZSBsYXN0IGxpbmUgOiAkY3VzdG9tZXItPnNhdmUoKTsgIGl0IHdpbGwgYXV0b21hdGljYWxseSAKICAgICAqIAogICAgICogSW1wb3J0YW50IDogeW91IG11c3Qgbm90IHNldCB0aGUgcHJpbWFyeUtleSB2YWx1ZS4gSXQgd2lsbCBiZSBjYWxjdWxhdGUgYnkgdGhlIHN5c3RlbSBpdC1zZWxmCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkKCSAqCiAgICAgKiBAcmV0dXJuIHRoZSBlbnRpdHkgc2F2ZWQgd2l0aCBpdHMgbmV3IG5ldyBJZCAoY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkKICAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBpbnNlcnRFbnRpdHkoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsKCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOwoJCSR2YWx1ZXMgPSAkZW50aXR5UGFyYW0tPmdldFZhbHVlcygpOwoJCSRpbmRleGVzID0gJGVudGl0eVBhcmFtLT5nZXRJbmRleGVzKCk7CgoJCSRxdWVyeUluc2VydCA9ICdJTlNFUlQgSU5UTyAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyAoJXMpIHZhbHVlcyAoJXMpJzsKCgkJJHN0cjEgPSAiIjsKCQkkc3RyMiA9ICIiOwoKCQkkcGFyYW1zID0gYXJyYXkoKTsKCQkJICAgCgkJLy9BbGwgdGhlIHJlcXVpcmVkIHZhbHVlcyBtdXN0IGJlIHByZXNlbnQKCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkKCQl7CgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgewoJCQkJY29udGludWU7CgkJCX0KCQkJCQkJCgkJCS8vV2UgZG9uJ3QgaW5zZXJ0IHRoZSB0cmFuc2llbnQgRmllbGRzIAoJCQlpZigkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokTk9ORSkgewoJCQkJY29udGludWU7CgkJCX0KCQkJCgkJCWlmKCFlbXB0eSgkc3RyMSkpIHsKCQkJCSRzdHIxIC49ICcsJzsKCQkJCSRzdHIyIC49ICcsJzsKCQkJfQoJCQkkc3RyMSAuPSAnICcuJGZpZWxkLT5nZXROYW1lKCkuJyAnOwoJCQkkc3RyMiAuPSAnPyc7CgkJCQoJCQlpZigkZmllbGQtPmlzUHJpbWFyeUtFWSgpKSB7CgkJCQlpZighZW1wdHkoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSB7CgkJCQkJaWYoJGVudGl0eVBhcmFtLT5pc0F1dG9pbmNyZW1lbnQoKSl7CgkJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ1ByaW1hcnkgS2V5ICcuJGZpZWxkLT5nZXROYW1lKCkuJyBjYW5cJ3QgYmUgc2V0dGVkIGR1cmluZyBpbnNlcnQgb3BlcmF0aW9uIGZvciBPcm1FbnRpdHknLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpKTsKCQkJCQl9CgkJCQl9IGVsc2UgaWYoISRlbnRpdHlQYXJhbS0+aXNBdXRvaW5jcmVtZW50KCkpewoJCQkJCSRuZXdJZCA9IE9ybURiOjpnZW5JRCgkZW50aXR5UGFyYW0tPmdldFNlcW5hbWUoKSk7CgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAkbmV3SWQ7CgkJCQkJJGVudGl0eVBhcmFtLT5zZXQoJGZpZWxkLT5nZXROYW1lKCksICRuZXdJZCk7CgkJCQl9IGVsc2V7CgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAwOwoJCQkJCSRlbnRpdHlQYXJhbS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLCAwKTsKCQkJCX0KCQkJfQoJCQkKCQkJLy9FbXB0eSBGaWVsZCB0aGF0IHNob3VsZG4ndCBiZSAhCgkJCWlmKCEkZmllbGQtPmlzTnVsbGFibGUoKSAmJiAhaXNzZXQoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSB7CgkJCQkvL0V4Y2VwdGlvbiA6IGlmIHRoZSBmaWVsZCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB3ZSBzZXQgaXQgbWFudWFsbHkKCQkJCWlmKCFpc19udWxsKCRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkpKXsKCQkJCQkkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSA9ICRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCk7CgkJCQl9IGVsc2UgewoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgT3JtRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgY2FuXCd0IGJlIG51bGwnKTsKCQkJCX0KCQkJfQoJCQkKCQkJLy8gQ29udHJvbCBVVUlEIHR5cGUKCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFVVSUQgJiYgIWVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSl7CgkJCQkkcGF0dGVybiA9ICIvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pIjsKCQkJCWlmKCFwcmVnX21hdGNoKCRwYXR0ZXJuLCAkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSkpewoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgT3JtRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgZG9lc25cJ3QgbWF0Y2ggdGhlIFVVSUQgcGF0dGVybiA6ICcuJHBhdHRlcm4pOwoJCQkJfQoJCQl9CgkJCQoJCQkKCQkJJHZhbCA9IG51bGw7CgkJCWlmKGlzc2V0KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkKCQkJewoJCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0sICRmaWVsZC0+Z2V0VHlwZSgpKTsKCQkJfSBlbHNlIHsKCQkJCSRwYXJhbXNbXSA9IG51bGw7CgkJCX0KCQl9CgkJCgkJLy9jb250cm9sIHVuaXF1ZW5lc3Mgb24gdW5pcXVlIEZpZWxkCgkJZm9yZWFjaCgkaW5kZXhlcyBhcyAkaW5kZXgpewoJCQlpZighJGluZGV4Wyd1bmlxdWUnXSl7CgkJCQljb250aW51ZTsKCQkJfQoJCQkKCQkJJHF1ZXJ5ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFIDEgJzsKCQkJJGFycmF5RmluZCA9IGFycmF5KCk7CgkJCSRtc2dFcnJvciA9ICd7JzsKCQkJJGlzRmlyc3QgPSB0cnVlOwoJCQlmb3JlYWNoKCRpbmRleFsnZmllbGRzJ10gYXMgJGVsdCl7CgkJCQlpZighJGlzRmlyc3QpewoJCQkJCSRtc2dFcnJvciAuPScsJzsKCQkJCX0KCQkJCWlmKGVtcHR5KCR2YWx1ZXNbJGVsdF0pKXsKCQkJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbHQgLiAnIElTIE5VTEwgJzsKCQkJCX0gZWxzZSB7CgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyA9ID8gJzsKCQkJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbHRdOwoJCQkJfQoJCQkJJG1zZ0Vycm9yIC49ICIgeyRlbHR9ID0geyR2YWx1ZXNbJGVsdF19ICI7CgkJCX0KCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZW50aXR5UGFyYW0tPmdldFBrKCktPmdldE5hbWUoKSAuICcgIT0gPyAnOwoJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpXTsJCQkKCQkJJG1zZ0Vycm9yIC49ICd9JzsKCQkJCgkJCS8vRXhlY3V0aW9uCgkJCSRyZXN1bHQgPSBPcm1EYjo6Z2V0T25lKCRxdWVyeSwKCQkJCQkJCQkJJGFycmF5RmluZCwKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyB1bmljaXR5IGNvbnRyb2wgaW4gT3JtQ29yZTo6aW5zZXJ0RW50aXR5KE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSkiKTsKCQkKCQkJaWYoJHJlc3VsdCAhPSAwKXsKCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFuIEVudGl0eSB7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9IHdpdGggdGhlIHNhbWUgZmllbGRzICh7JG1zZ0Vycm9yfSkgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UiKTsKCQkJfQoJCX0KCQkKCQkvL0V4ZWN1dGlvbgoJCSRyZXN1bHQgPSBPcm1EYjo6ZXhlY3V0ZShzcHJpbnRmKCRxdWVyeUluc2VydCwgJHN0cjEsICRzdHIyKSwKCQkJCQkJCQkJJHBhcmFtcywKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjppbnNlcnRFbnRpdHkoT3JtRW50aXR5ICZ7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9KSIpOwoJCQoKCS8qCWlmKCRlbnRpdHlQYXJhbS0+aXNJbmRleGFibGUoKSkgeyAgCgkJCU9ybUluZGV4aW5nOjpBZGRXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgT3JtQ29yZTo6ZmluZEJ5SWQoJGVudGl0eVBhcmFtLCRhcnJheUtFWVswXSkpOwoJCX0qLwoJCQoJCS8vZW1wdHkgY2FjaGUKCQlPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+Y2xlYXJDYWNoZSgpOwoJCQoJCS8vR2V0IHRoZSBsYXN0IElkIGluc2VydGVkCgkJaWYoZW1wdHkoJHZhbHVlc1skZW50aXR5UGFyYW0tPmdldFBrKCktPmdldE5hbWUoKV0pICYmICRlbnRpdHlQYXJhbS0+aXNBdXRvaW5jcmVtZW50KCkpewoJCQkkbmV3SWQgPSBPcm1EYjo6Z2V0T25lKCJTRUxFQ1QgTEFTVF9JTlNFUlRfSUQoKSIpOwoJCQkkZW50aXR5UGFyYW0tPnNldCgkZW50aXR5UGFyYW0tPmdldFBrKCktPmdldE5hbWUoKSwgJG5ld0lkKTsKCQl9CgkJCgkJcmV0dXJuICRlbnRpdHlQYXJhbTsKCgl9CgkKICAgIC8qKgogICAgICogIFVwZGF0ZSBkYXRhIGludG8gZGF0YWJhc2UuIFRoZSB0aGlyZCBwYXJhbWV0ZXIgbXVzdCBmb2xsb3cgdGhpcyBzY2hlbWUKICAgICAqIAogICAgICogRXhhbXBsZSBmb3IgYSBuZXcgQ3VzdG9tZXIgOiAKICAgICAqIAogICAgICogPGNvZGU+CiAgICAgKiAgICAgICAkbXlBcnJheSA9IGFycmF5KCk7CiAgICAgKiAgICAgICAkbXlBcnJheVtdID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MSwgJ2xhc3ROYW1lJz0+bnVsbCwgJ25hbWUnPT4nRHVwb250Jyk7ICAgIDwtLSB1cGRhdGUgTmFtZSB2YWx1ZSwgZXJhc2UgbGFzdE5hbWUgdmFsdWUgaW4gZGF0YWJhc2UKICAgICAqICAgICAgICRteUFycmF5W10gPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4yLCAnbmFtZSc9PidEdXJhbnQnKTsgICAgICAgICAgICAgICAgICAgICAgPC0tIHVwZGF0ZSBOYW1lIHZhbHVlCiAgICAgKiAgICAgICAkbXlBcnJheVtdID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MywgJ2xhc3ROYW1lJz0+J0pvaG4nLCAnbmFtZSc9PidEb2UnKTsgICAgIDwtLSB1cGRhdGUgTmFtZSB2YWx1ZSBhbmQgbGFzdE5hbWUgdmFsdWUKICAgICAqIAogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7CiAgICAgKiAgICAgICAKICAgICAqICAgICAgICRjdXN0b21lciA9IE9ybUNvcmU6OmZpbmRCeUlkKCRjdXN0b21lciwgMSk7CiAgICAgKiAgICAgICAkY3VzdG9tZXItPnNldCgnbGFzdE5hbWUnPT4nTmV3TGFzdE5hbWUnKTsKICAgICAqIAogICAgICogICAgICAgT3JtQ29yZTo6dXBkYXRlRW50aXR5KCRjdXN0b21lcik7CiAgICAgKiA8L2NvZGU+CiAgICAgKiAJIAogICAgICogWW91IGNvdWxkIGFsc28gY29kZSBmb3IgdGhlIGxhc3QgbGluZSA6ICRjdXN0b21lci0+c2F2ZSgpOyAgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IAoJICoKICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQoJICoKCSAqIEByZXR1cm4gdGhlIGVudGl0eSBzYXZlZCB3aXRoIGl0cyBuZXcgSWQgKGN1c3RvbWVyX2lkIGluIG15IGV4YW1wbGUpCiAgICAgKi8JCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHVwZGF0ZUVudGl0eShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgewoKCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7CgkJJHZhbHVlcyA9ICRlbnRpdHlQYXJhbS0+Z2V0VmFsdWVzKCk7CgkJJGluZGV4ZXMgPSAkZW50aXR5UGFyYW0tPmdldEluZGV4ZXMoKTsKCgkJJHN0ciA9ICIiOwoJCSR3aGVyZSA9ICcnOwoJCSRwYXJhbXMgPSBhcnJheSgpOwoJCSRoYXNLZXkgPSBmYWxzZTsKCQkgIAoJCS8vQWxsIHRoZSByZXF1aXJlZCB2YWx1ZXMgbXVzdCBiZSBwcmVzZW50CgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpIHsKCQkKCQkJLy9XZSBkb24ndCB1cGRhdGUgdGhlIHRyYW5zaWVudCBGaWVsZHMgCgkJCWlmKCRmaWVsZC0+Z2V0VHlwZSgpID09IE9ybUNBU1Q6OiROT05FKSB7CgkJCQljb250aW51ZTsKCQkJfQoKCQkJLy9pZiB0aGUgZmllbGQgaXMgZW1wdHkgYW5kIHdlIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHdlIHNldCBpdCBtYW51YWxseQoJCQlpZihlbXB0eSgkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSkgJiYgJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSAhPSBudWxsKXsKCQkJCSR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldID0gJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKTsKCQkJfSAKCQkKCQkJLy9JZiBpdCdzIG5vdCBzZXQKCQkJaWYoaXNfbnVsbCgoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSkgewoJCQkKCQkJCS8vSWYgaXQncyBhIHByaW1hcnlLZXkgd2UgdGhyb3cgYSBleGNlcHRpb24KCQkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpIHsKCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCd0aGUgcHJpbWFyeUtleSAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgaXMgbWlzc2luZyBmb3IgdGhlIGVudGl0eSA6ICcuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkpOwoJCQkJfQoJCQkJCgkJCQkvL2FuIGVtcHR5IGFzc29jaWF0aXZlIGZpZWxkIDogbm8gcHJvYmxlbSwgd2UgY2FuIHBhc3MKCQkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJCgkJCQkvL0lmIGl0J3MgYSBubyBudWxsYWJsZSBmaWVsZCB3ZSB0aHJvdyBhIGV4Y2VwdGlvbgoJCQkJaWYoISRmaWVsZC0+aXNOdWxsYWJsZSgpKSB7CgkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigndGhlIGZpZWxkICcuJGZpZWxkLT5nZXROYW1lKCkuJyBvZiBFbnRpdHkgICcuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkuJyBjYW5cJ3QgYmUgbnVsbCcpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJLy8gQ29udHJvbCBVVUlEIHR5cGUKCQkJCWlmKCRmaWVsZC0+Z2V0VHlwZSgpID09IE9ybUNBU1Q6OiRVVUlEKXsKCQkJCQkkcGF0dGVybiA9ICcvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pJzsKCQkJCQkKCQkJCQlpZighcHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKXsKCQkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigndGhlIGZpZWxkICcuJGZpZWxkLT5nZXROYW1lKCkuJyBvZiBFbnRpdHkgICcuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkuJyBkb2VzblwndCBtYXRjaCB0aGUgVVVJRCBwYXR0ZXJuIDogJy4kcGF0dGVybik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkKCQkJCgkJCS8vSWYgaXQncyBhIHByaW1hcnlLZXkKCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgewoJCQkJJHdoZXJlID0gJyBXSEVSRSAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgPSA/JzsKCQkJCSRoYXNLZXkgPSB0cnVlOwoJCQkJJGtleVZhbHVlID0gJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV07CgkJCX0KCgkJCWlmKCFlbXB0eSgkc3RyKSkgewoJCQkgICRzdHIgLj0gJywnOwoJCQl9CgoJCQkkc3RyIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nID0gPyAnOwoKCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0sICRmaWVsZC0+Z2V0VHlwZSgpKTsKCgkJfQoJCQoJCS8vY29udHJvbCB1bmlxdWVuZXNzIG9uIHVuaXF1ZSBGaWVsZAoJCWZvcmVhY2goJGluZGV4ZXMgYXMgJGluZGV4KXsKCQkJaWYoISRpbmRleFsndW5pcXVlJ10pewoJCQkJY29udGludWU7CgkJCX0KCQkJCgkJCSRxdWVyeSA9ICdTRUxFQ1QgQ09VTlQoKikgRlJPTSAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyBXSEVSRSAxICc7CgkJCSRhcnJheUZpbmQgPSBhcnJheSgpOwoJCQkkbXNnRXJyb3IgPSAneyc7CgkJCSRpc0ZpcnN0ID0gdHJ1ZTsKCQkJZm9yZWFjaCgkaW5kZXhbJ2ZpZWxkcyddIGFzICRlbHQpewoJCQkJaWYoISRpc0ZpcnN0KXsKCQkJCQkkbXNnRXJyb3IgLj0nLCc7CgkJCQl9CgkJCQlpZihlbXB0eSgkdmFsdWVzWyRlbHRdKSl7CgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyBJUyBOVUxMICc7CgkJCQl9IGVsc2UgewoJCQkJCSRxdWVyeSAuPSAnIEFORCAnIC4gJGVsdCAuICcgPSA/ICc7CgkJCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZWx0XTsKCQkJCX0KCQkJCSRtc2dFcnJvciAuPSAiIHskZWx0fSA9IHskdmFsdWVzWyRlbHRdfSAiOwoJCQl9CgkJCSRxdWVyeSAuPSAnIEFORCAnIC4gJGVudGl0eVBhcmFtLT5nZXRQaygpLT5nZXROYW1lKCkgLiAnICE9ID8gJzsKCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZW50aXR5UGFyYW0tPmdldFBrKCktPmdldE5hbWUoKV07CQkJCgkJCSRtc2dFcnJvciAuPSAnfSc7CgkJCQoJCQkvL0V4ZWN1dGlvbgoJCQkkcmVzdWx0ID0gT3JtRGI6OmdldE9uZSgkcXVlcnksCgkJCQkJCQkJCSRhcnJheUZpbmQsCgkJCQkJCQkJCSJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sIGluIE9ybUNvcmU6OnVwZGF0ZUVudGl0eShPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0pIik7CgkJCgkJCWlmKCRyZXN1bHQgIT0gMCl7CgkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhbiBFbnRpdHkgeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSB3aXRoIHRoZSBzYW1lIGZpZWxkcyAoeyRtc2dFcnJvcn0pIGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlIik7CgkJCX0KCQl9CgoJCWlmKCRoYXNLZXkpIHsKCQkJJHBhcmFtc1tdID0gJGtleVZhbHVlOwoJCX0KCgkJJHF1ZXJ5VXBkYXRlID0gJ1VQREFURSAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyBTRVQgJy4kc3RyLiR3aGVyZTsKCQoJCS8vRXhlY3V0aW9uCgkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeVVwZGF0ZSwKCQkJCQkJCQkJJHBhcmFtcywKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjp1cGRhdGVFbnRpdHkoT3JtRW50aXR5ICZ7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9KSIpOwoJCQoJCS8qaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKSB7ICAKCQkJT3JtSW5kZXhpbmc6OlVwZGF0ZVdvcmRzKCRlbnRpdHlQYXJhbS0+Z2V0TW9kdWxlTmFtZSgpLCAkZW50aXR5UGFyYW0pOwoJCX0qLwoJCQoJCS8vZW1wdHkgY2FjaGUKCQlPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+Y2xlYXJDYWNoZSgpOwoJCQoJCXJldHVybiAkZW50aXR5UGFyYW07Cgl9CiAgCiAgICAvKioKICAgICogRGVsZXRlIGluZm9ybWF0aW9uIGludG8gZGF0YWJhc2UKICAgICogICAKICAgICogRXhhbXBsZSBmb3IgYSBzaW5nbGUgZGVsZXRpb24gOiAKICAgICogCiAgICAqIDxjb2RlPgogICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICogCiAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCRjdXN0b21lciwgYXJyYXkoMSk7CiAgICAqIDwvY29kZT4KICAgICogCiAgICAqICBFeGFtcGxlIGZvciBtdWx0aXBsZSBkZWxldGlvbiA6IAogICAgKiAKICAgICogPGNvZGU+CiAgICAqICAgICAgICRteUFycmF5ID0gYXJyYXkoKTsKICAgICogICAgICAgJG15QXJyYXlbXSA9IDE7CiAgICAqICAgICAgICRteUFycmF5W10gPSAyOwogICAgKiAgICAgICAkbXlBcnJheVtdID0gMzsKICAgICogCiAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOwogICAgKiAKICAgICogICAgICAgT3JtQ29yZTo6ZGVsZXRlQnlJZHMoJGN1c3RvbWVyLCAkbXlBcnJheSk7CiAgICAqIDwvY29kZT4KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICAgIAogICAgKiBAcGFyYW0gYXJyYXkgYWxsIHRoZSBpZHMgdG8gZGVsZXRlICgkY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkKICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRlbGV0ZUJ5SWRzKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkaWRzKSB7CgoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsKCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpCgkJewoJCSAgaWYoISRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpCgkJICB7IAoJCQljb250aW51ZTsKCQkgIH0KCQkgICR0eXBlID0gJGZpZWxkLT5nZXRUeXBlKCk7CgkJICAkbmFtZSA9ICRmaWVsZC0+Z2V0TmFtZSgpOwoJCX0gIAoKCQkkd2hlcmUgPSAnJzsKCQlmb3JlYWNoKCRpZHMgYXMgJHNpZCkKCQl7CgkJICBpZighZW1wdHkoJHdoZXJlKSkKCQkgIHsKCQkJJHdoZXJlIC49ICcgT1IgJzsKCQkgIH0KCQkgIAoJCSAgJHdoZXJlIC49ICRuYW1lLicgPSA/JzsKCQkgICRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRzaWQsICR0eXBlKTsgIAoJCX0KCgoJCSRxdWVyeURlbGV0ZSA9ICdERUxFVEUgRlJPTSAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyBXSEVSRSAnLiR3aGVyZTsKCgkJLy9FeGVjdXRpb24KCQkkcmVzdWx0ID0gT3JtRGI6OmV4ZWN1dGUoJHF1ZXJ5RGVsZXRlLAoJCQkJCQkJCQkkcGFyYW1zLAoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmRlbGV0ZUVudGl0eShPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0pIik7CgkJCQkJCQkJCQoJCQoKCQlpZigkZW50aXR5UGFyYW0tPmlzSW5kZXhhYmxlKCkpCgkJeyAgCgkJICAvLyAkbW9kb3BzID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOwoJCSAgLy8gaWYobWV0aG9kX2V4aXN0cygkbW9kb3BzLCJHZXRTZWFyY2hNb2R1bGUiKSkKCQkgIC8vIHsKCQkJLy8gT3JtSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kb3BzLT5HZXRTZWFyY2hNb2R1bGUoKSk7CgkJICAvLyB9IGVsc2UKCQkgIC8vIHsKCQkJLy8gZGllKCJrbyIpOwoJCSAgLy8gfQoJCSAgZm9yZWFjaCgkaWRzIGFzICRzaWQpCgkJICB7CgkJCU9ybUluZGV4aW5nOjpEZWxldGVXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgJGVudGl0eVBhcmFtLCAkc2lkKTsKCQkgIH0KCQkgIAoJCX0KCQkKCQkvL2VtcHR5IGNhY2hlCgkJT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmNsZWFyQ2FjaGUoKTsKCX0KICAgCiAgICAvKioKICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIGZyb20gdGhlIHRhYmxlIG9mIHRoZSBlbnRpdHkgaW4gUGFyYW1ldGVycwogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICAgIAoJKiAKICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBmcm9tIHRoZSB0YWJsZSAgIAogICAgKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gY291bnRBbGwoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsKCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NFTEVDVCBjb3VudCgqKSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsKCQkKCQkvL0V4ZWN1dGlvbgoJCSRyZXN1bHQgPSBPcm1EYjo6Z2V0T25lKCRxdWVyeVNlbGVjdCwKCQkJCQkJCQkJbnVsbCwKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpjb3VudEFsbChPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0pIik7CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CiAgCiAgICAvKioKICAgICogUmV0dXJucyBhbGwgdGhlIG9jY3VycmVuY2VzIGZyb20gdGhlIHRhYmxlIG9mIHRoZSBlbnRpdHkgaW4gUGFyYW1ldGVycwogICAgKiAKICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICAKCSoKICAgICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGxpc3Qgb2YgRW50aXRpZXMgZm91bmQKICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGZpbmRBbGwoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sIE9ybU9yZGVyQnkgJiRvcmRlckJ5PW51bGwsIE9ybUxpbWl0ICYkbGltaXQgPSBudWxsKSB7CgoJCSRxdWVyeVNlbGVjdCA9ICdTRUxFQ1QgKiBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsKCgkJLy8gT3JkZXIgQnkgCgkJaWYoJG9yZGVyQnkgIT0gbnVsbCkgewoJCQkkcXVlcnlTZWxlY3QgLj0gJG9yZGVyQnktPmdldE9yZGVyQnkoKTsKCQl9CgkJZWxzZSBpZigkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCkgIT0gbnVsbCkgewoJCQkkcXVlcnlTZWxlY3QgLj0gJGVudGl0eVBhcmFtLT5nZXREZWZhdWx0T3JkZXJCeSgpLT5nZXRPcmRlckJ5KCk7CgkJfQoJCQkJCgkJaWYoJGxpbWl0ICE9IG51bGwpIHsKCQkJJHF1ZXJ5U2VsZWN0IC49ICRsaW1pdC0+Z2V0TGltaXQoKTsKCQl9CgkJCgkJLy9JZiBpdCdzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCB3ZSByZXR1cm4gdGhlIHJlc3VsdAoJCWlmKE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5pc0NhY2hlKCRxdWVyeVNlbGVjdCkpIHsKCQkJJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmdldENhY2hlKCRxdWVyeVNlbGVjdCk7CgkJfSBlbHNlIHsKCQkJLy9FeGVjdXRpb24KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeVNlbGVjdCwKCQkJCQkJCQkJbnVsbCwKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpmaW5kQWxsKE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSkiKTsKCgkJCSRlbnRpdGllcyA9IE9ybUNvcmU6Ol9wcm9jZXNzQXJyYXlFbnRpdHkoJGVudGl0eVBhcmFtLCAkcmVzdWx0KTsKCQkJCgkJCS8vV2UgcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hlIGJlZm9yZSByZXR1cm4gaXQKCQkJT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPnNldENhY2hlKCRxdWVyeVNlbGVjdCwgbnVsbCwgJGVudGl0aWVzKTsKCQl9CgkJCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkZW50aXRpZXMpOwoJfQoJCgkvKioKCSAqIElubmVyIGZ1bmN0aW9uIHRvIGZhY3Rvcml6ZSBzb21lIGNvZGUgZm9yIGVhY2ggImZpbmQqIiBmdW5jdGlvbnMKCSAqICBJdCB3aWxsIHJldHJpZXZlIGFsbCB0aGUgaW5mb3JtYXRpb25zIG9uIHRoZSBBSydzIEZpZWxkCgkgKgogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICAKCSAqIEBwYXJhbSByZXN1bHRRdWVyeSB0aGUgcmV0dXJuZWQgdmFsdWUgb2Ygc3FsIGV4ZWN1dGlvbgoJICoKICAgICAqIEByZXR1cm4gYXJyYXk8T3JtRW50aXR5PiBsaXN0IG9mIEVudGl0aWVzIHBvcHVsYXRlIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbnMgb24gQUsncyBGaWVsZAoJICoqLwoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gX3Byb2Nlc3NBcnJheUVudGl0eShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJHJlc3VsdFF1ZXJ5LCBPcm1PcmRlckJ5ICYkb3JkZXJCeT1udWxsKSB7CgoJCSRlbnRpdHlzID0gYXJyYXkoKTsKCQl3aGlsZSAoJHJvdyA9ICRyZXN1bHRRdWVyeS0+RmV0Y2hSb3coKSkgewoJCSAgJGFuRW50aXR5ID0gT3JtQ29yZTo6cm93VG9FbnRpdHkoJGVudGl0eVBhcmFtLCAkcm93KTsKCQkgICRlbnRpdHlzWyRhbkVudGl0eS0+Z2V0KCRhbkVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKV0gPSAkYW5FbnRpdHk7CgkJfQoJCQkJCgkJLy9UZXN0IHRoZSBwcmVzZW5jZSBvZiAkQUsKCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7CgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpIHsKCQkgIGlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgewoJCQkKCQkJLy9Jbml0aWF0ZSB0aGUgZmllbGQgYXNzb2NpYXRlIHdpdGggYW4gZW1wdHkgYXJyYXkuCgkJCWZvcmVhY2goYXJyYXlfa2V5cygkZW50aXR5cykgYXMgJGtleSl7CgkJCQkkZW50aXR5c1ska2V5XS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLCBhcnJheSgpKTsKCQkJfQoJCSAgCgkJCWxpc3QoJGVudGl0eUFzc29jTmFtZSwgJGZpZWxkQXNzb2NpYXRlTmFtZSkgPSBleHBsb2RlKCIuIiwgJGZpZWxkLT5nZXRLRVlOYW1lKCkpOwoJCQkkZW50aXR5QXNzb2MgPSBuZXcgJGVudGl0eUFzc29jTmFtZSgpOwoJCQkKCQkJJHF1ZXJ5QWRkID0gJ1NFTEVDVCAqIEZST00gJy4kZW50aXR5QXNzb2MtPmdldERibmFtZSgpLicgV0hFUkUgJy4kZmllbGRBc3NvY2lhdGVOYW1lLicgSU4gKCcuaW1wbG9kZSgnLCcsYXJyYXlfa2V5cygkZW50aXR5cykpLicpJzsKCQkKCQkJLy8gT3JkZXIgQnkgCgkJCWlmKCRvcmRlckJ5ICE9IG51bGwpIHsKCQkJCSRxdWVyeUFkZCAuPSAkb3JkZXJCeS0+Z2V0T3JkZXJCeSgpOwoJCQl9CgkJCWVsc2UgaWYoJGVudGl0eVBhcmFtLT5nZXREZWZhdWx0T3JkZXJCeSgpICE9IG51bGwpIHsKCQkJCSRxdWVyeUFkZCAuPSAkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCktPmdldE9yZGVyQnkoKTsKCQkJfQoJCQkKCQkJLy9FeGVjdXRpb24KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeUFkZCwKCQkJCQkJCQkJbnVsbCwKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyByZXF1ZXN0IHRvIGdldCBhc3NvY2lhdGl2ZSBlbnRpdHkgJGVudGl0eUFzc29jTmFtZSIpOwoJCQkKCQkJd2hpbGUgKCRyb3dBc3NvY2lhdGUgPSAkcmVzdWx0LT5GZXRjaFJvdygpKSB7CgkJCQkkYXJyYXlJZEVudGl0aWVzRGVzdCA9ICRlbnRpdHlzWyRyb3dBc3NvY2lhdGVbJGZpZWxkQXNzb2NpYXRlTmFtZV1dLT5nZXQoJGZpZWxkLT5nZXROYW1lKCkpOwoJCQkJJGFycmF5SWRFbnRpdGllc0Rlc3RbXSA9ICRyb3dBc3NvY2lhdGVbJGVudGl0eUFzc29jLT5nZXRQaygpLT5nZXROYW1lKCldOwoJCQkJJGVudGl0eXNbJHJvd0Fzc29jaWF0ZVskZmllbGRBc3NvY2lhdGVOYW1lXV0tPnNldCgkZmllbGQtPmdldE5hbWUoKSwkYXJyYXlJZEVudGl0aWVzRGVzdCk7CgkJCX0KCQkgIH0gCgkJfQoJCQoJCXJldHVybiAkZW50aXR5czsKCX0KICAKCS8qKgoJKiBSZXR1cm4gYSBPcm1FbnRpdHkgZnJvbSBpdHMgSWQKCSogCgkqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgCgkqIEBwYXJhbSBpbnQgdGhlIElkIHRvIGZpbmQKCSogQHJldHVybiBPcm1FbnRpdHkgdGhlIE9ybUVudGl0eSBmb3VuZCBvciBOVUxMCgkqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBmaW5kQnlJZChPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkKSB7CgkJJGxpc3RlID0gT3JtQ29yZTo6ZmluZEJ5SWRzKCRlbnRpdHlQYXJhbSwgYXJyYXkoJGlkKSk7CgkJCgkJaWYoIWlzc2V0KCRsaXN0ZVswXSkpewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJCgkJcmV0dXJuICRsaXN0ZVswXTsKCX0KICAKCS8qKgoJKiBSZXR1cm4gRW50aXRpZXMgZnJvbSB0aGVpciBJZHMKCSogCgkqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgCgkqIEBwYXJhbSBhcnJheSBsaXN0IG9mIHRoZSBJZHMgdG8gZmluZAoJKgoJKiBAcmV0dXJuIGFycmF5PE9ybUVudGl0eT4gbGlzdCBvZiBFbnRpdGllcyBmb3VuZAoJKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZmluZEJ5SWRzKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkaWRzLCBPcm1PcmRlckJ5ICYkb3JkZXJCeT1udWxsKSB7CgkJaWYoY291bnQoJGlkcykgPT0gMCkKCQkgIHJldHVybiBhcnJheSgpOwoJCQkKCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7CgkJJHdoZXJlID0gIiI7CgkJCQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKSB7CgkJICBpZighJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgeyAKCQkJY29udGludWU7CgkJICB9CgkJICAKCQkgIGZvcmVhY2goJGlkcyBhcyAkaWQpIHsKCQkJaWYoIWVtcHR5KCR3aGVyZSkpIHsKCQkJICAkd2hlcmUgLj0gJyBPUiAnOwoJCQl9CgkJCQkgIAoJCQkkd2hlcmUgLj0gJGZpZWxkLT5nZXROYW1lKCkuJyA9ID8nOwoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkaWQsICRmaWVsZC0+Z2V0VHlwZSgpKTsKCQkgIH0KCQl9CgoJCSRxdWVyeVNlbGVjdCA9ICdTRUxFQ1QgKiBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFICcuJHdoZXJlOwoJCQoJCS8vIE9yZGVyIEJ5IAoJCWlmKCRvcmRlckJ5ICE9IG51bGwpIHsKCQkJJHF1ZXJ5U2VsZWN0IC49ICRvcmRlckJ5LT5nZXRPcmRlckJ5KCk7CgkJfQoJCWVsc2UgaWYoJGVudGl0eVBhcmFtLT5nZXREZWZhdWx0T3JkZXJCeSgpICE9IG51bGwpIHsKCQkJJHF1ZXJ5U2VsZWN0IC49ICRlbnRpdHlQYXJhbS0+Z2V0RGVmYXVsdE9yZGVyQnkoKS0+Z2V0T3JkZXJCeSgpOwoJCX0KCQkKCQkvL0lmIGl0J3MgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHdlIHJldHVybiB0aGUgcmVzdWx0CgkJaWYoT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmlzQ2FjaGUoJHF1ZXJ5U2VsZWN0LCAkcGFyYW1zKSkgewoJCSAgJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmdldENhY2hlKCRxdWVyeVNlbGVjdCwkcGFyYW1zKTsKCQl9IGVsc2UgewoJCQkKCQkJLy9FeGVjdXRpb24KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeVNlbGVjdCwKCQkJCQkJCQkJJHBhcmFtcywKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpmaW5kQnlJZHMoT3JtRW50aXR5ICZ7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9LCAiLnByaW50X3IoJGlkcywgdHJ1ZSkuIikiKTsKCQkKCQkJJGVudGl0aWVzID0gT3JtQ29yZTo6X3Byb2Nlc3NBcnJheUVudGl0eSgkZW50aXR5UGFyYW0sICRyZXN1bHQpOwoJCQkKCQkJLy9XZSBwdXNoIHRoZSByZXN1bHQgaW50byB0aGUgY2FjaGUgYmVmb3JlIHJldHVybiBpdAoJCQlPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+c2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0LCBudWxsLCAkZW50aXRpZXMpOwoJCX0KCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkZW50aXRpZXMpOwoJfQogIAogICAgLyoqCiAgICAgKiBBbGxvdyBzZWFyY2ggYSBsaXN0IG9mIE9ybUVudGl0eSBmcm9tIGEgbGlzdCBvZiBPcm1Dcml0ZXJpYQogICAgICogCiAgICAgKiBFeGFtcGxlIDogZmluZCB0aGUgY3VzdG9tZXJzIHdpdGggbGFzdE5hbWUgJ1JvZ2VyJyAobm8gY2Fzc2Ugc2Vuc2l0aXZlKQogICAgICogCiAgICAgKiAgPGNvZGU+CiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICAqIAogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOwogICAgICogICAgICAgJGV4YW1wbGUtPmFkZENyaXRlcmlhKCdsYXN0TmFtZScsIE9ybVR5cGVDcml0ZXJpYTo6JEVRLCBhcnJheSgncm9nZXInKSwgdHJ1ZSk7CiAgICAgKiAKICAgICAqICAgICAgIE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJGN1c3RvbWVyLCAkZXhhbXBsZSk7CiAgICAgKiA8L2NvZGU+CiAgICAgKiAKICAgICAqICBFeGFtcGxlIDogZmluZCB0aGUgY3VzdG9tZXJzIHdpdGggSWQgPj0gOTAKICAgICAqIAogICAgICogPGNvZGU+CiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICAqIAogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOwogICAgICogICAgICAgJGV4YW1wbGUtPmFkZENyaXRlcmlhKCdjdXN0b21lcl9pZCcsIE9ybVR5cGVDcml0ZXJpYTo6JEdURSwgYXJyYXkoOTApKTsKICAgICAqIAogICAgICogICAgICAgT3JtQ29yZTo6ZmluZEJ5RXhhbXBsZSgkY3VzdG9tZXIsICRleGFtcGxlKTsKICAgICAqIDwvY29kZT4KICAgICAqIAogICAgICogTk9URSA6IEVRID0+IDxiPkVRPC9iPnVhbHMsIEdURSA9PiA8Yj5HPC9iPnJlYXRlciA8Yj5UPC9iPmhhbiBvciA8Yj5FPC9iPnF1YWxzCiAgICAgKiAKICAgICAqIE5PVEUgMiA6IHlvdSBjYW4gYWRkIGFzIG1hbnkgQ3JpdGVyaWFzIGFzIHlvdSB3YW50IGluIGFuIEV4YW1wbGUgT2JqZWN0CiAgICAgKiAKICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQogICAgICogQHBhcmFtIE9ybUV4YW1wbGUgdGhlIE9iamVjdCBPcm1FeGFtcGxlIHdpdGggc29tZSBDcml0ZXJpYXMgaW5zaWRlCiAgICAgKiAKICAgICAqIEBzZWUgT3JtRXhhbXBsZQogICAgICogQHNlZSBPcm1UeXBlQ3JpdGVyaWEKICAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBmaW5kQnlFeGFtcGxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCBPcm1FeGFtcGxlICRleGFtcGxlLCBPcm1PcmRlckJ5ICYkb3JkZXJCeSA9IG51bGwsIE9ybUxpbWl0ICYkbGltaXQgPSBudWxsLCAkY29uZGl0aW9uID0gJ0FORCcpIHsKCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7CgoJCSRjcml0ZXJpYXMgPSAkZXhhbXBsZS0+Z2V0Q3JpdGVyaWFzKCk7CgkJJHNlbGVjdCA9ICJTRUxFQ1QgKiBGUk9NICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFIDEgJzsKCQkkaHFsID0gIiI7CgkJJHBhcmFtcyA9IGFycmF5KCk7CgkJCgkJZm9yZWFjaCgkY3JpdGVyaWFzIGFzICRjcml0ZXJpYSkgewoJCSBpZigkbGlzdGVGaWVsZFskY3JpdGVyaWEtPmZpZWxkbmFtZV0gPT0gbnVsbCkKCQkgewoJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRmllbGQgJyIuJGNyaXRlcmlhLT5maWVsZG5hbWUuIicgbm90IGRlZmluZWQgaW4gZW50aXR5ICciLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLiInIHdoaWxlIHlvdSdyZSBzZWFyY2hpbmcgb24gaXQiKTsKCQkgfQoJCSAkZmlsdGVyVHlwZSA9ICRsaXN0ZUZpZWxkWyRjcml0ZXJpYS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpOwoJCQoJCQkJCQkvLzEgcGFyYW1ldGVyCgkJIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEVRIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5FUQoJCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokR1QgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokR1RFCgkJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVEUKCQkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFRk9SRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRBRlRFUgoJCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTElLRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTElLRSkgewoJCQkJJHZhbCA9ICRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMF07CgkJCQkKCQkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCR2YWwsICRmaWx0ZXJUeXBlKTsKCQkJCSRocWwgLj0gIiB7JGNvbmRpdGlvbn0gIi4kY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYS4nID8gJzsKCQkJCWNvbnRpbnVlOwoJCSB9CgkJCgkJCQkJCS8vMCBwYXJhbWV0ZXIKCQkgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTlVMTCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTlVMTCkgewoJCQkJJGhxbCAuPSAiIHskY29uZGl0aW9ufSAiLiRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhOwoJCQkJY29udGludWU7CgkJIH0KCQkKCQkJCQkJLy8yIHBhcmFtZXRlcnMKCQkgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokQkVUV0VFTikgewoJCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXSwgJGZpbHRlclR5cGUpOwoJCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVsxXSwgJGZpbHRlclR5cGUpOwoJCQkJJGhxbCAuPSAiIHskY29uZGl0aW9ufSAiLiRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyBBTkQgPyc7CgkJCQljb250aW51ZTsKCQkgfQoJCQoJCQkJLy8gTiBwYXJhbWV0ZXJzCgkJIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JElOIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5JTikgewoJCQkJaWYoaXNfYXJyYXkoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYSkgJiYgY291bnQoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYSkgPiAwKSB7CgkJCQkJCSRocWwgLj0gIiB7JGNvbmRpdGlvbn0gKCAiOwoJCQkJCQkkc2Vjb25kID0gZmFsc2U7CgkJCQkJCWZvcmVhY2goJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYSBhcyAkcGFyYW0pIHsKCQkJCQkJIGlmKCRzZWNvbmQpIHsKCQkJCQkJCQkkaHFsIC49ICcgT1IgJzsKCQkJCQkJIH0KCQkJCQkJCgkJCQkJCSAkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkcGFyYW0sICRmaWx0ZXJUeXBlKTsKCQkJCQkJICRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuT3JtVHlwZUNyaXRlcmlhOjokRVEuJyA/ICc7CgkJCQkJCQoJCQkJCQkgJHNlY29uZCA9IHRydWU7CgkJCQkJCX0KCQkJCQkJJGhxbCAuPSAnICknOwoJCQkJfQoJCQkJY29udGludWU7CgkJIH0KCQkKCQkgLy9PdGhlciBjYXNlcwoJCSBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRFTVBUWSkgewoJCQkJJGhxbCAuPSAiIHskY29uZGl0aW9ufSAoICIuJGNyaXRlcmlhLT5maWVsZG5hbWUgLicgaXMgbnVsbCB8fCAnIC4gJGNyaXRlcmlhLT5maWVsZG5hbWUgLiAiPSAnJykiOwoJCQkJY29udGludWU7CgkJIH0KCQkgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkVNUFRZKSB7CgkJCQkkaHFsIC49ICIgeyRjb25kaXRpb259ICggIi4kY3JpdGVyaWEtPmZpZWxkbmFtZSAuJyBpcyBub3QgbnVsbCAmJiAnIC4gJGNyaXRlcmlhLT5maWVsZG5hbWUgLiAiIT0gJycpIjsKCQkJCWNvbnRpbnVlOwoJCSB9CgkJCQkJCQkJCQkKCQkgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIE9ybUNyaXRlcmlhICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhIGlzIG5vdCBtYW5hZ2UiKTsKCQl9CgkJCQkKCQkvLyBPcmRlciBCeQoJCWlmKCRvcmRlckJ5ICE9IG51bGwpIHsKCQkJCSRocWwgLj0gJG9yZGVyQnktPmdldE9yZGVyQnkoKTsKCQl9CgkJZWxzZSBpZigkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCkgIT0gbnVsbCkgewoJCQkJJGhxbCAuPSAkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCktPmdldE9yZGVyQnkoKTsKCQl9ICAgICAgICAgICAgICAgIAoJCQoJCWlmKCRsaW1pdCAhPSBudWxsKSB7CgkJCQkkaHFsIC49ICRsaW1pdC0+Z2V0TGltaXQoKTsKCQl9CgoJCSRxdWVyeUV4YW1wbGUgPSAkc2VsZWN0LiRocWw7CgkJCgkJLy9JZiBpdCdzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCB3ZSByZXR1cm4gdGhlIHJlc3VsdAoJCWlmKE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5pc0NhY2hlKCRxdWVyeUV4YW1wbGUsICRwYXJhbXMpKSB7CgkJCQkkZW50aXRpZXMgPSBPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0Q2FjaGUoJHF1ZXJ5RXhhbXBsZSwkcGFyYW1zKTsKCQl9IGVsc2UgewoJCQkJLy9FeGVjdXRpb24KCQkJCSRyZXN1bHQgPSBPcm1EYjo6ZXhlY3V0ZSgkcXVlcnlFeGFtcGxlLAoJCQkJCQkJCQkJJHBhcmFtcywKCQkJCQkJCQkJCSJEYXRhYmFzZSBlcnJvciBkdXJpbmcgT3JtQ29yZTo6ZmluZEJ5RXhhbXBsZShPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0sICwgT3JtRXhhbXBsZSBcJGV4YW1wbGUpIik7CgoJCQkJT3JtVHJhY2U6OmRlYnVnKCJmaW5kQnlFeGFtcGxlIDogIi4kcmVzdWx0LT5SZWNvcmRDb3VudCgpLiIgcmVzdWx0YXQocykiKTsKCQkJCQoJCQkJJGVudGl0aWVzID0gT3JtQ29yZTo6X3Byb2Nlc3NBcnJheUVudGl0eSgkZW50aXR5UGFyYW0sICRyZXN1bHQpOwoJCQkJCgkJCQkvL1dlIHB1c2ggdGhlIHJlc3VsdCBpbnRvIHRoZSBjYWNoZSBiZWZvcmUgcmV0dXJuIGl0CgkJCQlPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+c2V0Q2FjaGUoJHF1ZXJ5RXhhbXBsZSwgbnVsbCwgJGVudGl0aWVzKTsKCQl9CgoJCXJldHVybiBhcnJheV92YWx1ZXMoJGVudGl0aWVzKTsKCgl9CiAgIAoJLyoqCiAgICAgKiBBbGxvdyBkZWxldGUgYSBsaXN0IG9mIE9ybUVudGl0eSBmcm9tIGEgbGlzdCBvZiBPcm1Dcml0ZXJpYQogICAgICogCiAgICAgKiBFeGFtcGxlIDogZGVsZXRlIHRoZSBjdXN0b21lcnMgd2l0aCBsYXN0TmFtZSAnUm9nZXInIChubyBjYXNzZSBzZW5zaXRpdmUpCiAgICAgKiAKICAgICAqICA8Y29kZT4KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOwogICAgICogCiAgICAgKiAgICAgICAkZXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlKCk7CiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2xhc3ROYW1lJywgT3JtVHlwZUNyaXRlcmlhOjokRVEsIGFycmF5KCdyb2dlcicpLCB0cnVlKTsKICAgICAqIAogICAgICogICAgICAgT3JtQ29yZTo6ZGVsZXRlQnlFeGFtcGxlKCRjdXN0b21lciwgJGV4YW1wbGUpOwogICAgICogPC9jb2RlPgogICAgICogCiAgICAgKiAgRXhhbXBsZSA6IGRlbGV0ZSB0aGUgY3VzdG9tZXJzIHdpdGggSWQgPj0gOTAKICAgICAqIAogICAgICogPGNvZGU+CiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICAqIAogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOwogICAgICogICAgICAgJGV4YW1wbGUtPmFkZENyaXRlcmlhKCdjdXN0b21lcl9pZCcsIE9ybVR5cGVDcml0ZXJpYTo6JEdURSwgYXJyYXkoOTApKTsKICAgICAqIAogICAgICogICAgICAgT3JtQ29yZTo6ZGVsZXRlQnlFeGFtcGxlKCRjdXN0b21lciwgJGV4YW1wbGUpOwogICAgICogPC9jb2RlPgogICAgICogCiAgICAgKiBOT1RFIDogRVEgPT4gPGI+RVE8L2I+dWFscywgR1RFID0+IDxiPkc8L2I+cmVhdGVyIDxiPlQ8L2I+aGFuIG9yIDxiPkU8L2I+cXVhbHMKICAgICAqIAogICAgICogTk9URSAyIDogeW91IGNhbiBhZGQgYXMgbWFueSBDcml0ZXJpYXMgYXMgeW91IHdhbnQgaW4gYW4gT3JtRXhhbXBsZSBPYmplY3QKICAgICAqIAogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5CiAgICAgKiBAcGFyYW0gT3JtRXhhbXBsZSB0aGUgT2JqZWN0IE9ybUV4YW1wbGUgd2l0aCBzb21lIENyaXRlcmlhcyBpbnNpZGUKICAgICAqIAogICAgICogQHNlZSBPcm1FeGFtcGxlCiAgICAgKiBAc2VlIE9ybVR5cGVDcml0ZXJpYQogICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRlbGV0ZUJ5RXhhbXBsZShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgT3JtRXhhbXBsZSAkT3JtRXhhbXBsZSwgJGNvbmRpdGlvbiA9ICdBTkQnKSB7CgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOwoKCQkkY3JpdGVyaWFzID0gJE9ybUV4YW1wbGUtPmdldENyaXRlcmlhcygpOwoJCSRkZWxldGUgPSAiZGVsZXRlIGZyb20gIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOwoJCSRocWwgPSAiIjsKCQkkcGFyYW1zID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRjcml0ZXJpYXMgYXMgJGNyaXRlcmlhKQoJCXsKCQkgIGlmKCFlbXB0eSgkaHFsKSkKCQkgIHsKCQkJJGhxbCAuPSAiIHskY29uZGl0aW9ufSAiOwoJCSAgfQoJCSAgCgkJICBpZihlbXB0eSgkaHFsKSkKCQkgIHsKCQkJJGhxbCAuPSAnIFdIRVJFICc7CgkJICB9CgoJCSAgJGZpbHRlclR5cGUgPSAkbGlzdGVGaWVsZFskY3JpdGVyaWEtPmZpZWxkbmFtZV0tPmdldFR5cGUoKTsKCQkgIAoJCQkJLy8gMSBwYXJhbcOodHJlICAKCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEVRIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5FUSAKCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokR1QgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokR1RFIAoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVEUgCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFRk9SRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRBRlRFUgoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMSUtFIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5MSUtFKQoJCSAgeyAgCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMF0sICRmaWx0ZXJUeXBlKTsgCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEuJyA/ICc7CgkJCWNvbnRpbnVlOwoJCSAgfQoJCSAgCgkJCQkvLyAwIHBhcmFtw6h0cmUKCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5VTEwgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTk5VTEwpCgkJICB7ICAKCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYTsKCQkJY29udGludWU7CgkJICB9CgkJICAKCQkJCS8vIDIgcGFyYW3DqHRyZXMgIAoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokQkVUV0VFTikKCQkgIHsgIAoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhWzBdLCAkZmlsdGVyVHlwZSk7IAoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhWzFdLCAkZmlsdGVyVHlwZSk7IAoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyBBTkQgPyc7CgkJCWNvbnRpbnVlOwoJCSAgfQoJCQkJCgkJCQkvLyBOIHBhcmFtw6h0cmVzCgkJCQlpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRJTiB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROSU4pCgkJCQl7CgkJCQkJJGhxbCAuPSAnICggJzsKCQkJCQkkc2Vjb25kID0gZmFsc2U7IAoJCQkJCWZvcmVhY2goJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYSBhcyAkcGFyYW0pCgkJCQkJewoJCQkJCQlpZigkc2Vjb25kKQoJCQkJCQl7CgkJCQkJCQkkaHFsIC49ICcgT1IgJzsKCQkJCQkJfQoJCQkJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkcGFyYW0sICRmaWx0ZXJUeXBlKTsgCgkJCQkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuT3JtVHlwZUNyaXRlcmlhOjokRVEuJyA/ICc7CgkJCQkJCQoJCQkJCQkkc2Vjb25kID0gdHJ1ZTsKCQkJCQl9CgkJCQkJJGhxbCAuPSAnICknOwoJCQkJCWNvbnRpbnVlOwoJCQkJfSAgICAgICAgICAgICAgICAgICAgICAgIAoJCSAgCgkJICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJMZSBPcm1Dcml0ZXJpYSAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSBuJ2VzdCBwYXMgZW5jb3JlIHByaXMgZW4gY2hhcmdlIik7CgkJfQoJCSRxdWVyeUV4YW1wbGUgPSAkZGVsZXRlLiRocWw7CgkJCQkJCQkJCQkKCQkvL0V4ZWN1dGlvbgoJCSRyZXN1bHQgPSBPcm1EYjo6ZXhlY3V0ZSgkcXVlcnlFeGFtcGxlLAoJCQkJCQkJCQkkcGFyYW1zLAoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmRlbGV0ZUJ5RXhhbXBsZShPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0sICwgT3JtRXhhbXBsZSBcJGV4YW1wbGUpIik7Cgl9CiAgICAgIAogICAgLyoqCiAgICAgKiBUcmFuc2Zvcm1zIGFuIGFycmF5IG9mIHZhbHVlIGludG8gYSBlbnRpcmUgT3JtRW50aXR5LiBUaGUgYXJyYXkgbXVzdCBmYWxsb3cgdGhpcyBzY2hlbWUKICAgICAqIAogICAgICogRXhhbXBsZSA6CiAgICAgKiAKICAgICAqIDxjb2RlPgogICAgICogICAgICAgJG15QXJyYXkxID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MSwgJ25hbWUnPT4nRHVwb250Jyk7ICAgICAgIAogICAgICogICAgICAgJG15QXJyYXkyID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MiwgJ25hbWUnPT4nRHVyYW5kJywgJ2xhc3ROYW1lJz0+J0pvZScpOyAgICAgICAKICAgICAqICAgCiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsKICAgICAqIAogICAgICogICAgICAgJGN1c3RvbWVyMSA9IE9ybUNvcmU6OnJvd1RvRW50aXR5KCRjdXN0b21lciwgJG15QXJyYXkxKTsKICAgICAqICAgICAgICRjdXN0b21lcjIgPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkY3VzdG9tZXIsICRteUFycmF5Mik7CiAgICAgKiAKICAgICAqICAgICAgIGVjaG8gJGN1c3RvbWVyMS0+Z2V0KCdsYXN0TmFtZScpOyAvL3JldHVybiBudWxsCiAgICAgKiAgICAgICBlY2hvICRjdXN0b21lcjItPmdldCgnbGFzdE5hbWUnKTsgLy9yZXR1cm4gSm9lCiAgICAgKiAKICAgICAqIDwvY29kZT4KICAgICAqICAgICAgICAgCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkKICAgICAqIEBwYXJhbSBhcnJheSB0aGUgbGlzdCB3aXRoIHRoZSBkYXRhCiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiByb3dUb0VudGl0eSAoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRyb3cpIHsKCgkJT3JtVHJhY2U6OmRlYnVnKCJyb3dUb0VudGl0eSA6ICIucHJpbnRfcigkcm93LHRydWUpKTsKCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7CgoJCSRuZXdFbnRpdHkgPSBjbG9uZSAkZW50aXR5UGFyYW07CgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpCgkJewoJCSAgaWYoISRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkKCQkgIHsKCQkJJG5ld0VudGl0eS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLE9ybUNvcmU6OmRiVmFsdWVUb0ZpZWxkKCRyb3dbJGZpZWxkLT5nZXROYW1lKCldLCAkZmllbGQtPmdldFR5cGUoKSkpOwoJCSAgfSAKCQl9CgkJcmV0dXJuICRuZXdFbnRpdHk7ICAKCX0KICAKICAgIC8qKgogICAgICogVHJhbnNmb3JtIGEgUEhQIHZhbHVlIGludG8gYSBTUUwgdmFsdWUKICAgICAqIAogICAgICogQHBhcmFtIG1peGVkIHRoZSBQSFAgdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgQ0FTVCB2YWx1ZQogICAgICogCiAgICAgKiBAc2VlIE9ybUNBU1QKICAgICAqLwoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gRmllbGRUb0RCVmFsdWUoJGRhdGEsICR0eXBlKSB7CgkJaWYoaXNfbnVsbCgkZGF0YSkpewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJCgkJc3dpdGNoKCR0eXBlKSB7CgkJICBjYXNlIE9ybUNBU1Q6OiRTVFJJTkcgOiByZXR1cm4gJGRhdGE7CgkJICBjYXNlIE9ybUNBU1Q6OiRET1VCTEUgOiByZXR1cm4gJGRhdGE7CgkJICBjYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogcmV0dXJuICRkYXRhOwoJCSAgY2FzZSBPcm1DQVNUOjokTlVNRVJJQyA6IHJldHVybiAkZGF0YTsKCQkgIGNhc2UgT3JtQ0FTVDo6JEJVRkZFUiA6IHJldHVybiAkZGF0YTsKCQkgIGNhc2UgT3JtQ0FTVDo6JFVVSUQgOiByZXR1cm4gJGRhdGE7CgkJICAKCQkgIGNhc2UgT3JtQ0FTVDo6JERBVEUgOiByZXR1cm4gc3RyX3JlcGxhY2UoIiciLCAiIiwgY21zbXMoKS0+R2V0RGIoKS0+REJEYXRlKCRkYXRhKSk7ICAgICAgIAoJCSAgY2FzZSBPcm1DQVNUOjokVElNRSA6IHJldHVybiBzdHJfcmVwbGFjZSgiJyIsICIiLCBjbXNtcygpLT5HZXREYigpLT5EQlRpbWVTdGFtcCgkZGF0YSkpOyAgIAkgIAoJCSAgY2FzZSBPcm1DQVNUOjokREFURVRJTUUgOiByZXR1cm4gZGF0ZSgiWS1tLWQgSDppOnMiLCRkYXRhKTsgCgkJICBjYXNlIE9ybUNBU1Q6OiRUUyA6IHJldHVybiAkZGF0YTsKCQl9Cgl9CiAgCiAgICAvKioKICAgICAqIFRyYW5zZm9ybSBhIFNRTCB2YWx1ZSBpbnRvIGEgUEhQIHZhbHVlCiAgICAgKiAKICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgU1FMIHZhbHVlIAogICAgICogQHBhcmFtIG1peGVkIHRoZSBDQVNUIHZhbHVlCiAgICAgKiAKICAgICAqIEBzZWUgT3JtQ0FTVAogICAgICovCglwcml2YXRlIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkYlZhbHVlVG9GaWVsZCgkZGF0YSwgJHR5cGUpIHsKCQlzd2l0Y2goJHR5cGUpIHsKCQkgIGNhc2UgT3JtQ0FTVDo6JFNUUklORyA6IHJldHVybiAkZGF0YTsJCSAgCgkJICBjYXNlIE9ybUNBU1Q6OiRET1VCTEUgOiByZXR1cm4gJGRhdGE7CgkJICBjYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogcmV0dXJuICRkYXRhOwkJICAKCQkgIGNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiByZXR1cm4gJGRhdGE7CQkgIAoJCSAgY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogcmV0dXJuICRkYXRhOwkJICAJCQoJCSAgY2FzZSBPcm1DQVNUOjokVVVJRCA6IHJldHVybiAkZGF0YTsKCQkgIAoJCSAgY2FzZSBPcm1DQVNUOjokREFURSA6IHJldHVybiBjbXNtcygpLT5HZXREYigpLT5Vbml4RGF0ZSgkZGF0YSk7CgkJICBjYXNlIE9ybUNBU1Q6OiRUSU1FIDogcmV0dXJuICRkYXRhOwoJCSAgY2FzZSBPcm1DQVNUOjokREFURVRJTUUgOiByZXR1cm4gc3RydG90aW1lKCRkYXRhKTsgIAoJCSAgY2FzZSBPcm1DQVNUOjokVFMgOiByZXR1cm4gJGRhdGE7CgoJCX0KCX0KICAKICAgIC8qKgogICAgICogVmVyaWZ5IGluIGFsbCB0eXBlIG9mIGVudGl0aWVzIGlmIGFueW9uZSBzdGlsbCBoYXMgYSBsaW5rIHdpdGggdGhlIE9ybUVudGl0eSBwYXNzZWQgaW4gcGFyYW1ldGVycyAoRm9yZWlnbktFeSBhbmQgQXNzb2NpYXRlS2V5KQogICAgICogCiAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBkZWxldGUqIGZ1bmN0aW9ucyB0byBhdm9pZCBvcnBoYW5zIGRhdGEgaW4gZGF0YWJhc2UKICAgICAqIAoJICogQHBhcmFtIE9ybSB0aGUgbW9kdWxlIHdoaWNoIGV4dGVuZHMgdGhlIE9ybSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5CiAgICAgKiBAcGFyYW0gbWl4ZWQgdGhlIGlkIG9mIHRoZSBPcm1FbnRpdHkgdG8gdmVyaWZ5CgkgKgoJICogQHJldHVybiBhIG1lc3NhZ2UgaWYgYSBsaW5rIGlzIHN0aWxsIHByZXNlbnQuIG5vdGhpbmcgaWYgdGhlIGludGVncml0eSBpcyBvawogICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHZlcmlmSW50ZWdyaXR5KE9ybUVudGl0eSAmJGVudGl0eSwgJHNpZCkgewoJCSRsaXN0ZUVudGl0eXMgPSBNeUF1dG9sb2FkOjpnZXRBbGxJbnN0YW5jZXMoJGVudGl0eS0+Z2V0TW9kdWxlTmFtZSgpKTsKCgkJZm9yZWFjaCgkbGlzdGVFbnRpdHlzIGFzICRrZXk9PiRhbkVudGl0eSkgewoJCSAgaWYoJGFuRW50aXR5IGluc3RhbmNlT2YgT3JtRW50aXR5QXNzb2NpYXRpb24pCgkJCWNvbnRpbnVlOwoJCQkKCQkgIGZvcmVhY2goJGFuRW50aXR5LT5nZXRGaWVsZHMoKSBhcyAkZmllbGQpIHsKCQkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKSB7CgkJCSAgY29udGludWU7CgkJCX0KCQkJCgkJCWlmKCRmaWVsZC0+Z2V0S0VZTmFtZSgpICE9IG51bGwpIHsKCQkJICAkdmFscyA9IGV4cGxvZGUoJy4nLCRmaWVsZC0+Z2V0S0VZTmFtZSgpLDIpOwoJCQkgIAoJCQkgIGlmKHN0cnRvbG93ZXIgKCR2YWxzWzBdKSA9PSBzdHJ0b2xvd2VyICgkZW50aXR5LT5nZXROYW1lKCkpKSAgewoJCQkJJE9ybUV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOwoJCQkJJE9ybUV4YW1wbGUtPmFkZENyaXRlcmlhKCRmaWVsZC0+Z2V0TmFtZSgpLCBPcm1UeXBlQ3JpdGVyaWE6OiRFUSwgYXJyYXkoJHNpZCkpOwoJCQkJJGVudGl0eXMgPSBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRhbkVudGl0eSwgJE9ybUV4YW1wbGUpOwoJCQkJaWYoY291bnQoJGVudGl0eXMpID4gMCkKCQkJCXsKCQkJCSAgcmV0dXJuICJMYSBsaWduZSAmYWdyYXZlOyBzdXBwcmltZXIgZXN0IGVuY29yZSB1dGlsaXMmZWFjdXRlO2UgcGFyICZsYXF1bzsgIi4kYW5FbnRpdHktPmdldE5hbWUoKS4iICZyYXF1bzsiOwoJCQkJfQoJCQkgIH0KCQkJfQoJCSAgfQoJCX0KCgkJcmV0dXJuOwoKCX0KICAKCS8qKgoJICogV2lsbCByZXR1cm4gYSBVVUlEIDogYSB1bmlxdWUgaWRlbnRpZmllcgoJICogQHNpbmNlIDAuMC4yCgkgKi8KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCl7CgoJCS8vRXhlY3V0aW9uCgkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCdTRUxFQ1QgVVVJRCgpIEFTIHV1aWQ7JywKCQkJCQkJCQkJbnVsbCwKCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpnZW5lcmF0ZVVVSUQoKSIpOwoKCQkkcm93PSRyZXN1bHQtPkZldGNoUm93KCk7CgoJCXJldHVybiAkcm93Wyd1dWlkJ107Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmCriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIE9ybUNyaXRlcmlhIGNsYXNzCiAqIAogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCiAKIAoKLyoqCiAqIEJhY2tib25lIGZvciBPcm1Dcml0ZXJpYSBpbnRvIHRoZSBPcm0gc3lzdGVtCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KLypmaW5hbCAqL2NsYXNzIE9ybUNyaXRlcmlhCnsKCS8qKgoJICogTmFtZSBvZiB0aGUgZmllbGQgCgkgKi8KCXB1YmxpYyAkZmllbGRuYW1lOwoJCgkvKioKCSAqIFR5cGUgb2YgQ3JpdGVyaWEKCSAqLwoJcHVibGljICR0eXBlQ3JpdGVyaWE7CgkKCS8qKgoJICogUGFyYW1ldGVycyBmb3IgdGhlIHR5cGUgb2YgQ3JpdGVyaWEKCSAqLwoJcHVibGljICRwYXJhbXNDcml0ZXJpYTsKCQoJLyoqCgkgKiBCb29sZWFuIGlmIHdlIG11c3QgaWdub3JlIGNhc2UKCSAqLwoJcHVibGljICRpZ25vcmVDYXNlOwoJCiAgICAvKioKICAgICogUHVibGljIENvbnN0cnVjdG9yCiAgICAqIAogICAgKiBAcGFyYW0gc3RyaW5nIE5hbWUgb2YgdGhlIGZpZWxkIAogICAgKiBAcGFyYW0gT3JtVHlwZUNyaXRlcmlhIFR5cGUgb2YgQ3JpdGVyaWEKICAgICogQHBhcmFtIGFycmF5IGFsbCB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgcGFyYW1ldGVyICR0eXBlQ3JpdGVyaWEKICAgICogQHBhcmFtIGJvb2xlYW4gW09wdGlvbmFsXSBpZiB3ZSBtdXN0IGlnbm9yZSB0aGUgY2FzZSAoYXplIGVxdWFscyBBWkUpIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiCiAgICAqCgkqIEByZXR1cm4gT3JtQ3JpdGVyaWEgYSBDcml0ZXJpYQoJKgoJKiBAc2VlIE9ybVR5cGVDcml0ZXJpYQogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmllbGRuYW1lLCAkdHlwZUNyaXRlcmlhLCAkcGFyYW1zQ3JpdGVyaWEsICRpZ25vcmVDYXNlID0gZmFsc2UpCgl7CgkJJHRoaXMtPmZpZWxkbmFtZSA9ICRmaWVsZG5hbWU7CgkJJHRoaXMtPnR5cGVDcml0ZXJpYSA9ICR0eXBlQ3JpdGVyaWE7CgkJJHRoaXMtPnBhcmFtc0NyaXRlcmlhID0gJHBhcmFtc0NyaXRlcmlhOwoJCSR0aGlzLT5pZ25vcmVDYXNlID0gJGlnbm9yZUNhc2U7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmDb.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1EYgogKiAKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwogCiAKLyoqCiAqIEludGVyZmFjZSBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgb2YgdGhlIE9ybSBmcmFtZXdvcmsgYW5kIEFkb2RiCiAqICAgCiAqIEBzaW5jZSAwLjEuMgogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiovCmNsYXNzIE9ybURiIHsgIAoKCXByaXZhdGUgc3RhdGljICRkYjsKCXByaXZhdGUgc3RhdGljICRkaWN0OwoJCglwcml2YXRlIHN0YXRpYyAkdGFib3B0YXJyYXkgPSBhcnJheSggJ215c3FsJyA9PiAnRU5HSU5FIE15SVNBTSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsKCXByaXZhdGUgc3RhdGljICRpZHhvcHRhcnJheVVuaXF1ZSA9IGFycmF5KCdVTklRVUUnKTsKCiAgICAvKioKICAgICogUHJvdGVjdGVkIGNvbnN0cnVjdG9yICAgIAogICAgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgkKCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaW5pdCgpewoJCWlmKE9ybURiOjokZGIgIT0gbnVsbCl7CgkJCXJldHVybjsKCQl9CgkJT3JtRGI6OiRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJT3JtRGI6OiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoIE9ybURiOjokZGIgKTsKCX0KICAgICAgCiAgICAvKioKICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiZXhlY3V0ZSIgZnVuY3Rpb24gYW5kIGFkZCBsb2dzIG9mIGV2ZXJ5dGhpbmcKICAgICogICAgICAgICAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIFF1ZXJ5CiAgICAqIEBwYXJhbSBhcnJheSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIG9yIG51bGwKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSBvZiBlcnJvciB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIHJlc3VsdAoJKgoJKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiBpZiB0aGUgcXVlcnkgZmFpbGVkCiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBleGVjdXRlKCRxdWVyeSwgJHBhcmFtZXRlcnMgPSBudWxsLCAkZXJyb3JNc2cgPSAiRGF0YWJhc2UgZXJyb3IiKSB7CgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7CgkJT3JtRGI6OmluaXQoKTsKCQlPcm1UcmFjZTo6ZGVidWcoJHF1ZXJ5KTsKCQlpZigkcGFyYW1ldGVycyAhPSBudWxsKXsKCQkJT3JtVHJhY2U6OmRlYnVnKCIgPiBQYXJhbWV0ZXJzIDogIi5wcmludF9yKCRwYXJhbWV0ZXJzLCB0cnVlKSk7CgkJfQoJCSRyZXN1bHQgPSBPcm1EYjo6JGRiLT5FeGVjdXRlKCRxdWVyeSwgJHBhcmFtZXRlcnMpOwoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7CgkJCU9ybVRyYWNlOjplcnJvcigkZXJyb3JNc2cpOwoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IE15c3FsIHNhaWQgOiAiLk9ybURiOjokZGItPkVycm9yTXNnKCkpOwoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IFRoZSBRdWVyeSB3YXMgOiAiLiRxdWVyeSk7CgkJCWlmKCRwYXJhbWV0ZXJzICE9IG51bGwpewoJCQkJT3JtVHJhY2U6OmVycm9yKCIgPiBUaGUgUGFyYW1ldGVycyB3YXMgOiAiLnByaW50X3IoJHBhcmFtZXRlcnMsIHRydWUpKTsKCQkJfQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvck1zZyk7CgkJfQoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQkKCQoJIC8qKgogICAgKiB3aWxsIGV4ZWN1dGUgdGhlIEFkb2RiICJHZXRPbmUiIGZ1bmN0aW9uIGFuZCBhZGQgbG9ncyBvZiBldmVyeXRoaW5nCiAgICAqICAgICAgICAgCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBRdWVyeQogICAgKiBAcGFyYW0gYXJyYXkgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBvciBudWxsCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG1lc3NhZ2Ugb2YgZXJyb3IgdG8gZGlzcGxheSB0byB0aGUgdXNlcgogICAgKiBAcmV0dXJuIHRoZSBhZG9kYiByZXN1bHQKCSoKCSogQGV4Y2VwdGlvbiBFeGNlcHRpb24gaWYgdGhlIHF1ZXJ5IGZhaWxlZAogICAgKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0T25lKCRxdWVyeSwgJHBhcmFtZXRlcnMgPSBudWxsLCAkZXJyb3JNc2cgPSAiRGF0YWJhc2UgZXJyb3IiKSB7CgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7CgkJT3JtRGI6OmluaXQoKTsKCQlPcm1UcmFjZTo6ZGVidWcoJHF1ZXJ5KTsKCQlpZigkcGFyYW1ldGVycyAhPSBudWxsKXsKCQkJT3JtVHJhY2U6OmRlYnVnKCIgPiBQYXJhbWV0ZXJzIDogIi5wcmludF9yKCRwYXJhbWV0ZXJzLCB0cnVlKSk7CgkJfQoJCSRyZXN1bHQgPSBPcm1EYjo6JGRiLT5HZXRPbmUoJHF1ZXJ5LCAkcGFyYW1ldGVycyk7CgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsKCQkJT3JtVHJhY2U6OmVycm9yKCRlcnJvck1zZyk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gTXlzcWwgc2FpZCA6ICIuT3JtRGI6OiRkYi0+RXJyb3JNc2coKSk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIFF1ZXJ5IHdhcyA6ICIuJHF1ZXJ5KTsKCQkJaWYoJHBhcmFtZXRlcnMgIT0gbnVsbCl7CgkJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IFRoZSBQYXJhbWV0ZXJzIHdhcyA6ICIucHJpbnRfcigkcGFyYW1ldGVycywgdHJ1ZSkpOwoJCQl9CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yTXNnKTsKCQl9CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CQoJCgkgLyoqCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkdlbklEIiBmdW5jdGlvbiBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZwogICAgKiAgICAgICAgIAogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSB0YWJsZSB1c2VkIGZvciBzZXF1ZW5jZSAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSBvZiBlcnJvciB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIHJlc3VsdAoJKgoJKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiBpZiB0aGUgcXVlcnkgZmFpbGVkCiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZW5JRCgkc2VxbmFtZSwgJGVycm9yTXNnID0gIkRhdGFiYXNlIGVycm9yIikgewoJCS8vQmUgc3VyZSB3ZSBpbml0aWF0ZSB0aGUgZGIgY29ubmVjdG9yOwoJCU9ybURiOjppbml0KCk7CgkJCgkJT3JtVHJhY2U6OmRlYnVnKCJnZW4gSWQoeyRzZXFuYW1lfSkiKTsKCQkkcmVzdWx0ID0gT3JtRGI6OiRkYi0+R2VuSUQoJHNlcW5hbWUpOwoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7CgkJCU9ybVRyYWNlOjplcnJvcigkZXJyb3JNc2cpOwoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IE15c3FsIHNhaWQgOiAiLk9ybURiOjokZGItPkVycm9yTXNnKCkpOwoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IFRoZSBHZW5JZCB3YXMgbWFkZSBvbiA6ICIuJHNlcW5hbWUpOwoKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3JNc2cpOwoJCX0KCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0JCgkKCSAvKioKICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiQ3JlYXRlVGFibGVTUUwiIGZ1bmN0aW9uIGFuZCBhZGQgbG9ncyBvZiBldmVyeXRoaW5nCiAgICAqICAgICAgICAgCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHRhYmxlIHVzZWQgZm9yIHNlcXVlbmNlIAogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBocWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpZWxkcwogICAgKiBAcmV0dXJuIHRoZSBhZG9kYiByZXN1bHQKCSoKCSogQGV4Y2VwdGlvbiBFeGNlcHRpb24gaWYgdGhlIHF1ZXJ5IGZhaWxlZAogICAgKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gY3JlYXRlVGFibGUoJHRhYmxlTmFtZSwgJGhxbCkgewoJCS8vQmUgc3VyZSB3ZSBpbml0aWF0ZSB0aGUgZGIgY29ubmVjdG9yOwoJCU9ybURiOjppbml0KCk7CgkJCgkJT3JtVHJhY2U6OmRlYnVnKCJjcmVhdGVUYWJsZSh7JHRhYmxlTmFtZX0sIHskaHFsfSkiKTsKCQkKCQkkc3FsYXJyYXkgPSBPcm1EYjo6JGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCR0YWJsZU5hbWUsIAoJCQkJCQkJCQkJCQkkaHFsLAoJCQkJCQkJCQkJCQlPcm1EYjo6JHRhYm9wdGFycmF5KTsKCQkJCQkJCQkJCQkJCgkJJHJlc3VsdCA9IE9ybURiOjokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsKCQkJT3JtVHJhY2U6OmVycm9yKCRlcnJvck1zZyk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gTXlzcWwgc2FpZCA6ICIuT3JtRGI6OiRkYi0+RXJyb3JNc2coKSk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIENyZWF0ZVRhYmxlIHdhcyBtYWRlIG9uIDogeyR0YWJsZU5hbWV9IHdpdGggeyRocWx9IHBhcmFtZXRlcnMiKTsKCgkJCXRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yTXNnKTsKCQl9CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkvKioKICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiRHJvcFRhYmxlU1FMIiBmdW5jdGlvbiBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZwogICAgKiAgICAgICAgIAogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSB0YWJsZSB1c2VkIGZvciBzZXF1ZW5jZSAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgaHFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWVsZHMKICAgICogQHJldHVybiB0aGUgYWRvZGIgcmVzdWx0CgkqCgkqIEBleGNlcHRpb24gRXhjZXB0aW9uIGlmIHRoZSBxdWVyeSBmYWlsZWQKICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRyb3BUYWJsZSgkdGFibGVOYW1lKSB7CgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7CgkJT3JtRGI6OmluaXQoKTsKCQkKCQlPcm1UcmFjZTo6ZGVidWcoImRyb3BUYWJsZSh7JHRhYmxlTmFtZX0pIik7CgkJCgkJJHNxbGFycmF5ID0gT3JtRGI6OiRkaWN0LT5Ecm9wVGFibGVTUUwoJHRhYmxlTmFtZSk7CgkJJHJlc3VsdCA9IE9ybURiOjokZGljdC0+ZXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsKCQkJT3JtVHJhY2U6OmVycm9yKCRlcnJvck1zZyk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gTXlzcWwgc2FpZCA6ICIuT3JtRGI6OiRkYi0+RXJyb3JNc2coKSk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIERyb3BUYWJsZSB3YXMgbWFkZSBvbiA6IHskdGFibGVOYW1lfSIpOwoKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3JNc2cpOwoJCX0KCQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLyoqCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkNyZWF0ZVNlcXVlbmNlIiBmdW5jdGlvbiBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZwogICAgKiAgICAgICAgIAogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSB0YWJsZSB1c2VkIGZvciBzZXF1ZW5jZSAKICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGNyZWF0ZVNlcXVlbmNlKCRzZXFOYW1lKXsKCQkvL0JlIHN1cmUgd2UgaW5pdGlhdGUgdGhlIGRiIGNvbm5lY3RvcjsKCQlPcm1EYjo6aW5pdCgpOwoJCQoJCU9ybVRyYWNlOjpkZWJ1ZygiY3JlYXRlU2VxdWVuY2UoeyRzZXFOYW1lfSkiKTsKCQkKCQlPcm1EYjo6JGRiLT5DcmVhdGVTZXF1ZW5jZSgkc2VxTmFtZSk7Cgl9CgkKCS8qKgogICAgKiB3aWxsIGV4ZWN1dGUgdGhlIEFkb2RiICJEcm9wU2VxdWVuY2UiIGZ1bmN0aW9uIGFuZCBhZGQgbG9ncyBvZiBldmVyeXRoaW5nCiAgICAqICAgICAgICAgCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHRhYmxlIHVzZWQgZm9yIHNlcXVlbmNlIAogICAgKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZHJvcFNlcXVlbmNlKCRzZXFOYW1lKXsKCQkvL0JlIHN1cmUgd2UgaW5pdGlhdGUgdGhlIGRiIGNvbm5lY3RvcjsKCQlPcm1EYjo6aW5pdCgpOwoJCQoJCU9ybVRyYWNlOjpkZWJ1ZygiZHJvcFNlcXVlbmNlKHskc2VxTmFtZX0pIik7CgkJCgkJT3JtRGI6OiRkYi0+RHJvcFNlcXVlbmNlKCRzZXFOYW1lKTsKCQkKCX0KCQoJLyoqCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkNyZWF0ZUluZGV4U1FMIiBmdW5jdGlvbiB3aXRoIG9yIHdpdGhvdXQgVU5JUVVFIHBhcmFtZXRlciBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZwogICAgKiAgICAgICAgIAogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSB0YWJsZSB1c2VkIGZvciBzZXF1ZW5jZSAKICAgICogQHBhcmFtIG1peGVkIHRoZSBsaXN0IG9mIHRoZSBGaWVsZE5hbWUgKGFycmF5KSBvciBhIHNpbmdsZSBmaWVsZE5hbWUgKFN0cmluZykKICAgICogQHBhcmFtIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgaW5kZXggbXVzdCBiZSBVTklRVUUKICAgICogQHJldHVybiB0aGUgYWRvZGIgcmVzdWx0CgkqCgkqIEBleGNlcHRpb24gRXhjZXB0aW9uIGlmIHRoZSBxdWVyeSBmYWlsZWQKICAgICovCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGNyZWF0ZUluZGV4KCR0YWJsZU5hbWUsICRsaXN0RmllbGRzLCAkaXNVbmlxdWUgPSBmYWxzZSl7CgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7CgkJT3JtRGI6OmluaXQoKTsKCQkKCQlPcm1UcmFjZTo6ZGVidWcoImNyZWF0ZUluZGV4KHskdGFibGVOYW1lfSwgeyIuaW1wbG9kZSgnLCcsJGxpc3RGaWVsZHMpLiJ9LCB7JGlzVW5pcXVlfSkiKTsKCQkJCQoJCS8vQ2FzZSA6IHVuaXF1ZSBpbmRleCBvbiBtYW55IGZpZWxkcwoJCWlmKGlzX2FycmF5KCRsaXN0RmllbGRzKSkgewoJCQkkaWR4ZmxkcyA9IGltcGxvZGUoJywnLCAkbGlzdEZpZWxkcyk7CgkJCSRtZDUgPSBtZDUoc2VyaWFsaXplKCRsaXN0RmllbGRzKSk7CgkJfSBlbHNlIHsKCQkJJGlkeGZsZHMgPSAkbGlzdEZpZWxkczsKCQkJJG1kNSA9IG1kNSgkbGlzdEZpZWxkcyk7CgkJfQoJCWlmKCRpc1VuaXF1ZSl7CgkJCSRzcWxhcnJheSA9IE9ybURiOjokZGljdC0+Q3JlYXRlSW5kZXhTUUwoJG1kNSwgJHRhYmxlTmFtZSwgJGlkeGZsZHMsIE9ybURiOjokaWR4b3B0YXJyYXlVbmlxdWUpOwoJCX0gZWxzZSB7CgkJCSRzcWxhcnJheSA9IE9ybURiOjokZGljdC0+Q3JlYXRlSW5kZXhTUUwoJG1kNSwgJHRhYmxlTmFtZSwgJGlkeGZsZHMpOwoJCQkvL2RpZShpbXBsb2RlKCIsIiwkc3FsYXJyYXkpKTsKCQl9CgkJCgkJJHJlc3VsdCA9IE9ybURiOjokZGljdC0+ZXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsKCQkJT3JtVHJhY2U6OmVycm9yKCRlcnJvck1zZyk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gTXlzcWwgc2FpZCA6ICIuT3JtRGI6OiRkYi0+RXJyb3JNc2coKSk7CgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIGNyZWF0ZUluZGV4IHdhcyBtYWRlIG9uIDogeyR0YWJsZU5hbWV9IHdpdGggdGhlIGZpZWxkcyA6IHskbGlzdEZpZWxkc30iKTsKCgkJCXRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yTXNnKTsKCQl9CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkKCQoJCgkKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1FbnRpdHkKICoKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwogCi8qKgogKiBBYnN0cmFjdCBDbGFzc2VzIGRlc2NyaWJpbmcgdGhlIGZyYW1lIG9mIGFuIE9ybUVudGl0eSBpbnRvIE9ybQogKgogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCmFic3RyYWN0IGNsYXNzIE9ybUVudGl0eQp7CgkvKioKCSAqIFN0cmluZyA6IE5hbWUgb2YgdGhlIG1vZHVsZSB0aGF0IGN1cnJlbnRseSB1c2UgdGhpcyBlbnRpdHkKCSAqICovCglwcml2YXRlICRtb2R1bGVOYW1lOwoJCgkvKioKCSAqIFN0cmluZyA6IHRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBlbnRpdHkKCSAqICovCglwcm90ZWN0ZWQgJG5hbWU7CgoJLyoqCgkgKiBTdHJpbmcgOiB0aGUgbmFtZSBvZiB0aGUgdGFibGUgaW4gZGF0YWJhc2UKCSAqICovCglwcml2YXRlICRkYm5hbWU7CgkKCS8qKgoJICogU3RyaW5nIDogbmFtZSBvZiB0aGUgc2VxdWVuY2UgbGlua2VkIHRvIHRoZSB0YWJsZSBpbiB0aGUgZGF0YWJhc2UuIE1heSBiZSBOdWxsCgkgKiAqLwoJcHJpdmF0ZSAkc2VxbmFtZTsKCQoJLyoqCgkgKiBsaXN0IDogZmllbGRzIG1ha2luZyB1cCB0aGUgZW50aXR5CgkgKiAqLwoJcHJpdmF0ZSAkZmllbGRzID0gYXJyYXkoKTsKCQoJLyoqCgkgKiBsaXN0IDogdmFsdWVzIG9mIGVhY2ggZmllbGRzCgkgKiAqLwoJcHJpdmF0ZSAkdmFsdWVzID0gYXJyYXkoKTsKCQoJLyoqCgkgKiBTdHJpbmcgOiBOYW1lIG9mIHRoZSBmaWVsZCB3aWNoIHdpbGwgYmUgdXNlZCBhcyBhIHByaW1hcnlLZXkKCSAqICovCglwcml2YXRlICRwazsKCQoJLyoqCgkgKiBCb29sZWFuIDogaWYgdHJ1ZSB0aGUgZnJhbWV3b3JrIHdpbGwgdHJ5IHRvIHVzZSB0aGUgaW5uZXIgYXV0b2luY3JlbWVudCBvZiBNeXNxbCBpbnN0ZWFkIGdlbmVyYXRlIGEgbmV3IHRhYmxlIHh4eF9zZXEgbGlrZSB1c3VhbAoJICovCglwcml2YXRlICRhdXRvaW5jcmVtZW50ID0gZmFsc2U7CgkKCS8qKgoJICogQXJyYXksIGNvbnRhaW5zIGFsbCB0aGUgaW5kZXhlcyBvZiB0aGUgRW50aXR5LgoJICoqLwkgCglwcml2YXRlICRpbmRleGVzID0gYXJyYXkoKTsKCQoJLyoqCgkgKiBPcm1PcmRlckJ5IDogaWYgdHJ1ZSB0aGUgZnJhbWV3b3JrIHdpbGwgdHJ5IHRvIHVzZSB0aGUgaW5uZXIgYXV0b2luY3JlbWVudCBvZiBNeXNxbCBpbnN0ZWFkIGdlbmVyYXRlIGEgbmV3IHRhYmxlIHh4eF9zZXEgbGlrZSB1c3VhbAoJICovCglwcml2YXRlICRkZWZhdWx0T3JkZXJCeTsKCQoJLyoqCgkgKiBTdHJpbmcgOiBjb25zdGFudCwgc3VmZml4IGZvciB0aGUgc2VxdWVuY2UgbmFtZSBpbnRvIHRoZSBkYXRhYmFzZQoJICogKi8KCXB1YmxpYyBzdGF0aWMgJF9DT05TVF9TRVEgPSAnX3NlcSc7CgkvKioKCSAqIFN0cmluZyA6IGNvbnN0YW50LCBzdWZmaXggdXNlZCB0byBuYW1lZCB0aGUgdGFibGUgaW50byBkYXRhYmFzZSBmb3IgYSBtb2R1bGUKCSAqICovCglwdWJsaWMgc3RhdGljICRfQ09OU1RfTU9EID0gJ21vZHVsZSc7CgkKCQoJCiAgICAvKioKICAgICAqIGNvbnN0cnVjdG9yIHByb3RlY3RlZCB0byBhdm9pZCBhIGRpcmVjdCBpbnN0YW50aWF0aW9uIGxpa2UgIm5ldyBPcm1FbnRpdHkoKSIKICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aG8gY2FsbGluZyB0aGlzIG1ldGhvZCAoc28gbm90ICJPcm0iKQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5CiAgICAgKiBAcGFyYW0gc3RyaW5nIFtvcHRpb25hbF0gUHJlZml4IHRvIHVzZSBpbnRvIGRhdGFiYXNlIGZvciB0YWJsZS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBtb2R1bGUKICAgICAqIEBwYXJhbSBzdHJpbmcgW29wdGlvbmFsXSBUaGUgbmFtZSBvZiB0YWJsZSBmb3IgdGhpcyBlbnRpdHkuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgZW50aXR5CiAgICAgKgogICAgICogQHJldHVybiBPcm1FbnRpdHkgdGhlIGVudGl0eSBhcyBhIG5ldyBpbnN0YW5jZQogICAgICogCiAgICAgKiBAc2VlIE15QXV0b2xvYWQKICAgICAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVOYW1lLCAkbmFtZSwgJHByZWZpeGUgPSBudWxsLCAkZGJOYW1lID0gbnVsbCkgewoJCSR0aGlzLT5tb2R1bGVOYW1lID0gc3RydG9sb3dlcigkbW9kdWxlTmFtZSk7CgkJJHRoaXMtPm5hbWUgPSBzdHJ0b2xvd2VyKCRuYW1lKTsKCQkKCQlpZihNeUF1dG9sb2FkOjpoYXNJbnN0YW5jZSgkdGhpcy0+bW9kdWxlTmFtZSwkdGhpcy0+bmFtZSkpewoJCQkJJGluc3RhbmNlID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPm1vZHVsZU5hbWUsJHRoaXMtPm5hbWUpOwoJCQkJcmV0dXJuICBjbG9uZSAkaW5zdGFuY2U7CiAgICAgICAgfSAKCQkKCQkkdGhpcy0+ZGJuYW1lID0gJHRoaXMtPm5hbWU7CgkJaWYoIWVtcHR5KCRkYk5hbWUpKSB7CgkJCSR0aGlzLT5kYm5hbWUgPSBzdHJ0b2xvd2VyKCRkYk5hbWUpOwoJCX0KCQkKCQlpZihlbXB0eSgkcHJlZml4ZSkpIHsKCQkJJHByZWZpeGUgPSAkdGhpcy0+bW9kdWxlTmFtZTsKCQl9IGVsc2UgewoJCQkkcHJlZml4ZSA9IHN0cnRvbG93ZXIoJHByZWZpeGUpOwoJCX0KCQkKCQkkdGhpcy0+ZGJuYW1lID0gY21zX2RiX3ByZWZpeCgpLk9ybUVudGl0eTo6JF9DT05TVF9NT0QuJ18nLiRwcmVmaXhlLidfJy4kdGhpcy0+ZGJuYW1lOwoJCQoJCS8vIFdlIGFkZCBhbiBpbnN0YW5jZSBvZiBvdXItc2VyZiBpbnRvIHRoZSBhdXRvbG9hZAoJCU15QXV0b2xvYWQ6OmFkZEluc3RhbmNlKCR0aGlzLT5tb2R1bGVOYW1lLCR0aGlzKTsKCX0KCQogICAgLyoqCiAgICAqICBDYW4gYmUgb3ZlcnJpZGUuIExldCB5b3Ugc3BlY2lmeSBob3cgeW91ciB0YWJsZSBtdXN0IGJlIHBvcHVsYXRlZCAKICAgICogYWZ0ZXIgeW91IGFza2VkIHRvIGNyZWF0ZSB0aGUgdGFibGUgb2YgeW91ciBFbnRpdHkKICAgICovCglwdWJsaWMgZnVuY3Rpb24gaW5pdFRhYmxlKCl7fQogICAgCQogICAgLyoqCiAgICAqIEFkZCBhIG5ldyBGaWVsZCBpbnRvIHRoZSBsaXN0IG9mIEZpZWxkcwogICAgKiAKICAgICogQHBhcmFtIE9ybUZpZWxkIHRoZSBvYmplY3QgRmllbGQgdG8gYWRkCgkqIAoJKiBAZXhjZXB0aW9uIE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uIGlmIHdlIHRyeSB0byB1c2UgbW9yZSB0aGFuIGEgc2luZ2xlIFByaW1hcnlLZXkgaW4gdGhlIGVudGl0eQogICAgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBhZGQoT3JtRmllbGQgJG5ld0ZpZWxkKSB7CgkJJHRoaXMtPmZpZWxkc1skbmV3RmllbGQtPmdldE5hbWUoKV0gPSAkbmV3RmllbGQ7CgoJCS8vQWRkIGEgc2VxdWVuY2Ugb24gdGhlIGtleXMKCQlpZigkbmV3RmllbGQtPmlzUHJpbWFyeUtFWSgpKSB7CgkJCWlmKCR0aGlzLT5wayAhPSBudWxsKQoJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCJPcm0gZG9lc24ndCBzdXBwb3J0IG11bHRpLVByaW1hcnktS2V5IGludG8gdGhlIEVudGl0eSAiLiR0aGlzLT5uYW1lKTsKCQkJCQoJCQkkdGhpcy0+cGsgPSAkbmV3RmllbGQtPmdldE5hbWUoKTsKCQkJaWYoISR0aGlzLT5pc0F1dG9pbmNyZW1lbnQoKSkgeyAvLyBubyBzZXF1ZW5jZSBpZiBhdXRvaW5jcmVtZW50IHVzZWQKICAgICAgICAgICAgICAgICR0aGlzLT5zZXFuYW1lID0gJHRoaXMtPmRibmFtZS5Pcm1FbnRpdHk6OiRfQ09OU1RfU0VROwogICAgICAgICAgICB9CgkJfQoJfQoJCiAgICAvKioKICAgICogUmV0dXJuIHRoZSBQcmltYXJ5S2V5IEZpZWxkCiAgICAqIAogICAgKiBAcmV0dXJuIE9ybUZpZWxkIHRoZSBQcmltYXJ5S2V5IEZpZWxkCiAgICAqIEBleGNlcHRpb24gT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIFByaW1hcnlLZXkgRmllbGQKICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGsoKSB7CgkJaWYoJHRoaXMtPnBrID09IG51bGwpCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBlbnRpdHkgeyR0aGlzLT5nZXROYW1lKCl9IGRvZXNuJ3QgaGF2ZSBhbnkgUHJpbWFyeS1LZXkiKTsKCQkKCQlyZXR1cm4gJHRoaXMtPmZpZWxkc1skdGhpcy0+cGtdOwoJfQoJCiAgICAvKioKICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIEZpZWxkcwogICAgKiAKICAgICogQHJldHVybiBhcnJheTxGaWVsZD4gYW4gYXJyYXkgd2l0aCBhbGwgdGhlIEZpZWxkcwogICAgKiAKICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRzKCkgewoJCXJldHVybiAkdGhpcy0+ZmllbGRzOwoJfQoJCiAgICAvKioKICAgICogcmV0dXJuIGEgRmllbGQgYnkgbmFtZQogICAgKiAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgZmllbGQgbmFtZQogICAgKiBAcmV0dXJuIE9ybUZpZWxkIHRoZSBGaWVsZAogICAgKiAKICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3QgZm9yIHRoZSBuYW1lCiAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkQnlOYW1lKCRmaWVsZE5hbWUpIHsKCQkKCQlpZihlbXB0eSgkZmllbGROYW1lKSl7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBmdW5jdGlvbiBnZXRGaWVsZEJ5TmFtZShcJGZpZWxkTmFtZSkgZG9lc24ndCBhY2NlcHQgYSBudWxsIHBhcmFtZXRlciAoZW50aXR5IDogeyR0aGlzLT5nZXROYW1lKCl9KSIpOwoJCX0KCQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPmZpZWxkcykpewoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGdW5jdGlvbiBnZXRGaWVsZEJ5TmFtZShcJGZpZWxkTmFtZSkgOiBUaGUgZmllbGQgeyRmaWVsZE5hbWV9IGRvZXNuJ3QgZXhpc3QgaW50byB0aGUgZW50aXR5IHskdGhpcy0+Z2V0TmFtZSgpfSIpOwoJCX0KCQkKCQlyZXR1cm4gJHRoaXMtPmZpZWxkc1skZmllbGROYW1lXTsKCQkKCX0KCQogICAgLyoqCiAgICAqIFJldHVybiB0cnVlIGlmIGEgRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQogICAgKiAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZQogICAgKiBAcmV0dXJuIEJvb2xlYW4gaWYgZXhpc3RzCiAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGlzRmllbGRCeU5hbWVFeGlzdHMoJG5hbWUpIHsKCQlyZXR1cm4gaXNzZXQoJHRoaXMtPmZpZWxkc1skbmFtZV0pOwoJfQoJCiAgICAvKioKICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpbnRvIHRoZSBkYXRhYmFzZQogICAgKiAKICAgICogQHJldHVybiBzdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGludG8gdGhlIGRhdGFiYXNlCiAgICAqIAogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXREYm5hbWUoKSB7CgkJcmV0dXJuICR0aGlzLT5kYm5hbWU7Cgl9CgkKICAgIC8qKgogICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGVudGl0eQogICAgKiAKICAgICogQHJldHVybiBzdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGVudGl0eQogICAgKiAKICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIHsKCQlyZXR1cm4gJHRoaXMtPm5hbWU7Cgl9CgkKCS8qKgoJICogIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtb2R1bGUKCSAqICAKCSAqICBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtb2R1bGUuCgkgKiovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kdWxlTmFtZSgpIHsKCQlyZXR1cm4gJHRoaXMtPm1vZHVsZU5hbWU7Cgl9CgkKICAgIC8qKgogICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNlcXVlbmNlIChpZiBleGlzdHMpCiAgICAqIAogICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgc2VxdWVuY2Ugb3IgTlVMTAogICAgKiAKICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VxbmFtZSgpIHsKCQlpZihlbXB0eSgkdGhpcy0+c2VxbmFtZSkpCgkJCXJldHVybiBudWxsOwoJCQoJCXJldHVybiAkdGhpcy0+c2VxbmFtZTsKCX0KCQogICAgLyoqCiAgICAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGEgRmllbGQgYnkgdGhlIG5hbWUgCiAgICAqIAkKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgRmllbGQKICAgICogQHJldHVybiBtaXhlZCB0aGUgdmFsdWUgZm9yIHRoZSBmaWVsZAogICAgKiAKICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXQoJGZpZWxkTmFtZSkgewoJCQoJCWlmKGVtcHR5KCRmaWVsZE5hbWUpKXsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGZ1bmN0aW9uIGdldChcJGZpZWxkTmFtZSkgZG9lc24ndCBhY2NlcHQgYSBudWxsIHBhcmFtZXRlciAoZW50aXR5IDogeyR0aGlzLT5nZXROYW1lKCl9KSIpOwoJCX0KCQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPmZpZWxkcykpewoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGdW5jdGlvbiBnZXQoXCRmaWVsZE5hbWUpIDogVGhlIGZpZWxkIHskZmllbGROYW1lfSBkb2Vzbid0IGV4aXN0IGludG8gdGhlIGVudGl0eSB7JHRoaXMtPmdldE5hbWUoKX0iKTsKCQl9CgkJCgkJaWYoIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkTmFtZSwkdGhpcy0+dmFsdWVzKSl7CgkJCXJldHVybiBudWxsOwoJCX0KCQkKCQlyZXR1cm4gJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXTsKCX0KCQogICAvKioKICAgICogU2V0IGEgdmFsdWUgdG8gYSBGaWVsZAogICAgKiAgICAgCiAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIEZpZWxkCiAgICAqIEBwYXJhbSBtaXhlZCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBGaWVsZAogICAgKiAKICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXQoJGZpZWxkTmFtZSwkdmFsdWUpIHsKCQkKCQlpZihlbXB0eSgkZmllbGROYW1lKSl7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBmdW5jdGlvbiBzZXQoXCRmaWVsZE5hbWUpIGRvZXNuJ3QgYWNjZXB0IGEgbnVsbCBwYXJhbWV0ZXIgKGVudGl0eSA6IHskdGhpcy0+Z2V0TmFtZSgpfSkiKTsKCQl9CgkKCQlpZighYXJyYXlfS0VZX2V4aXN0cygkZmllbGROYW1lLCR0aGlzLT5maWVsZHMpKXsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRnVuY3Rpb24gc2V0KFwkZmllbGROYW1lKSA6IFRoZSBmaWVsZCB7JGZpZWxkTmFtZX0gZG9lc24ndCBleGlzdCBpbnRvIHRoZSBlbnRpdHkgeyR0aGlzLT5nZXROYW1lKCl9Iik7CgkJfQoJCQoJCSR0aGlzLT52YWx1ZXNbJGZpZWxkTmFtZV0gPSAkdmFsdWU7Cgl9CgkKICAgIC8qKgogICAgKiBSZXR1cm4gdGhlIHZhbHVlcyBmb3IgYWxsIHRoZSBGaWVsZHMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIAogICAgKiAgKiBrZXkgPSBuYW1lIG9mIHRoZSBGaWVsZCwgYW5kIAogICAgKiAgKiB2YWx1ZSA9IGl0cyB2YWx1ZQogICAgKiAKICAgICogQHJldHVybiBhcnJheSBhbiBhc3NvY2lhdGl2ZSBhcnJheQogICAgKiAKICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVzKCkgewoJCXJldHVybiAkdGhpcy0+dmFsdWVzOwoJfQoJCQoJLyoqCgkgKiBTaG9ydGN1dCB0byBzYXZlIHRoZSBlbnRpdHkuIGlmIHRoZSBwcmltYXJ5S2V5IGlzIHNldHRlZCwgaXQgd2lsbCBiZSBhbiB1cGRhdGUgb3BlcmF0aW9uLCBlbHNlIGFuIGluc2VydC4KCSAqCgkgKiBAcmV0dXJuIHRoZSBlbnRpdHkgc2F2ZWQgd2l0aCBpdHMgbmV3IG5ldyBJZCAoY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkgaWYgaXQncyBhbiBpbnNlcnRpb24KCSAqKi8KCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCl7CgkJaWYoJHRoaXMtPnBrID09IG51bGwpIHsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigieW91IGNhbid0IHNhdmUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgUHJpbWFyeS1LZXkiKTsKCQl9CgkKCQlpZigkdGhpcy0+Z2V0KCR0aGlzLT5waykgPT0gbnVsbCkgewoJCQlyZXR1cm4gT3JtQ29yZTo6aW5zZXJ0RW50aXR5KCR0aGlzKTsKCQl9IGVsc2UgewoJCQkvL1RyeSB0byBmaW5kIGlmIGl0J3MgYW4gdXBkYXRlIG9yIGluc2VydCB3aXRoIGFscmVhZHkgYW4gSWQKCQkJaWYoT3JtQ29yZTo6ZmluZEJ5SWQoJHRoaXMsICR0aGlzLT5nZXQoJHRoaXMtPnBrKSkgPT0gbnVsbCkgewoJCQkJcmV0dXJuIE9ybUNvcmU6Omluc2VydEVudGl0eSgkdGhpcyk7CgkJCX0KCQkJCgkJCXJldHVybiBPcm1Db3JlOjp1cGRhdGVFbnRpdHkoJHRoaXMpOwoJCX0KCX0KCQoJLyoqCgkgKiBTaG9ydGN1dCB0byBkZWxldGUgdGhlIGVudGl0eQoJICoqLwoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgpewoJCWlmKCR0aGlzLT5wayA9PSBudWxsKSB7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInlvdSBjYW4ndCBkZWxldGUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgUHJpbWFyeS1LZXkiKTsKCQl9CgkJCgkJaWYoJHRoaXMtPmdldCgkdGhpcy0+cGspID09IG51bGwpIHsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigieW91IGNhbid0IGRlbGV0ZSB0aGUgZW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGJlY2F1c2UgaXRzIFByaW1hcnktS2V5IGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWUiKTsKCQl9CgkJCgkJT3JtQ29yZTo6ZGVsZXRlQnlJZHMoJHRoaXMsIGFycmF5KCR0aGlzLT5nZXQoJHRoaXMtPnBrKSkpOwoJfQoJCiAgICAvKioKICAgICogQ2FuIGJlIG92ZXJyaWRkZW4gTGV0IHlvdSBtb2RpZnkgc29tZSBkYXRhIGp1c3QgYmVmb3JlIHNhdmluZyB0aGUgZGF0YSBpbnRvIHRoZSBkYXRhdGFibGUuCiAgICAqIAogICAgKiBAcGFyYW0gYXJyYXkgYWxsIHRoZSB2YWx1ZXMgdG8gcHJvY2VzcwogICAgKiBAcGFyYW0gYXJyYXkgbW9yZSBwYXJhbWV0ZXJzIGlmIHlvdSBuZWVkLCBpZiB5b3Ugd2FudAogICAgKiAKICAgICogQHJldHVybiBtaXhlZCB0byBkZWZpbmUKICAgICovCglwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlRm9yU2F2ZSgkcm93cywgJGFyZ3MgPSBudWxsKXsKCQoJCXJldHVybiAkcm93czsKCX0KCQoJLyoqCgkgKiBDYWxsIHRoZSBjb21wYXJlVG8gZnVuY3Rpb24gaW50byB5b3VyIEVudGl0eSB0byBzb3J0IHRoZSBFbnRpdGllcy4KCSAqIFRvIGFjdGl2YXRlIHRoaXMgZnVuY3Rpb25hbGl0eSwgVGhlIEVudGl0eSBtdXN0IGltcGxlbWVudCBJU29ydGFibGUgSW50ZXJmYWNlLgoJICoKCSAqIEV4YW1wbGUgb2YgZnVuY3Rpb24gY29tcGFyZVRvKCkgaW4gYSBDdXN0b21lciBFbnRpdHkKCSAqICA8Y29kZT4KCSAqICAgICAgIAoJICoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wYXJlVG8oT3JtRW50aXR5ICRlbnRpdHkxLCBPcm1FbnRpdHkgJGVudGl0eTIpCgkgKgl7CgkgKgkJJGNvbXBhcmUgPSBzdHJjbXAoJGVudGl0eTEtPmdldCgnbmFtZScpLCAkZW50aXR5Mi0+Z2V0KCduYW1lJykpOwoJICogICAgICAJcmV0dXJuICRjb21wYXJlOwoJICoJfQoJICogCgkgKiAgPC9jb2RlPgoJICoKCSAqIEBwYXJhbSBhcnJheTxPcm1FbnRpdHk+IHRoZSBsaXN0IG9mIEVudGl0eSB0byBzb3J0CgkgKgoJICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IHRoZSBsaXN0IG9mIEVudGl0eSBncmFjZWZ1bGx5IHNvcnRlZAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnQoYXJyYXkgJGFycmF5KSB7CgoJCXVzb3J0KCRhcnJheSwgYXJyYXkoZ2V0X2NhbGxlZF9jbGFzcygpLCAiY29tcGFyZVRvIikpOwoJCgkJcmV0dXJuICRhcnJheTsKCX0KCQoJLyoqCgkgKiBNYXkgYmUgb3ZlcnJpZGUgaW4geW91ciBFbnRpdHkncyBkZWZpbml0aW9uIHRvIGFsbG93IFNlYXJjaCBtb2R1bGUgaW5kZXhpbmcgeW91ciBlbnRpdGllcydzIGRhdGEKCSAqIAoJICogRXhhbXBsZSBvZiBmdW5jdGlvbiBpc0luZGV4YWJsZSgpIGluIGEgQ3VzdG9tZXIgRW50aXR5CgkgKiAgCgkgKiAgPGNvZGU+CgkgKiAgICAgICAKCSAqCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNJbmRleGFibGUoKQoJICoJewoJICoJCXJldHVybiB0aGlzLT5nZXRbJ2lzQWN0aXZhdGVkJ107CgkgKgl9CgkgKiAKCSAqICA8L2NvZGU+CgkgKiovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSW5kZXhhYmxlKCl7CgkJcmV0dXJuIGZhbHNlOwoJfQoJCgkvKioKICAgICogZ2V0dGVyIGZvciBhdXRvaW5jcmVtZW50CiAgICAqIAogICAgKiBAcmV0dXJuIHRydWUgb2YgdGhlIEZpZWxkIGlzIGF1dG9pbmNyZW1lbnQKICAgICovCglwdWJsaWMgZnVuY3Rpb24gSXNBdXRvaW5jcmVtZW50KCkgewoJCXJldHVybiAkdGhpcy0+YXV0b2luY3JlbWVudDsKCX0KCQoJLyoqCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQoJICogICAgPT4gdGhlIGZpZWxkIG11c3QgYmUgYXV0by1pbmNyZW1lbnRhbAoJICoqLwoJcHVibGljIGZ1bmN0aW9uIGdhcm5pc2hBdXRvaW5jcmVtZW50KCl7CgkJCgkJaWYoJHRoaXMtPmdldFBrKCkgPT0gbnVsbCB8fCAkdGhpcy0+Z2V0UGsoKS0+Z2V0VHlwZSgpICE9IE9ybUNBU1Q6OiRJTlRFR0VSKXsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGRvbid0IGhhdmUgYW55IElOVEVHRVIgUEsgYW5kIHNvIGNhbid0IGJlIGRlZmluZWQgYXV0b2luY3JlbWVudCIpOwoJCX0KCQkkdGhpcy0+YXV0b2luY3JlbWVudCA9IHRydWU7CgkJCgkJLy9SZW1vdmUgYW55IHNlcSB0aGF0IGNvdWxkIGJlIGFkZCBiZWZvcmUKICAgICAgICAkdGhpcy0+c2VxbmFtZSA9IG51bGw7Cgl9CgkKCS8qKgoJICogUmV0dXJuIAoJICogQHJldHVybiBhcnJheSA6IHRoZSBsaXN0IG9mIGNvdXBsZSBvZiB1bmlxdWUgaW5kZXgKCSAqKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRJbmRleGVzKCkgewoJCXJldHVybiAkdGhpcy0+aW5kZXhlczsKCX0KCQoJLyoqCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQoJICogICAgPT4gdGhlIGZpZWxkIGhhdmUgb25lIG9yIG1hbnkgKFVuaXF1ZT8pIEluZGV4ZSBvbiBvbmUgb3IgbWFueSBjb2x1bW5zLgoJICoKCSAqICBleGFtcGxlIDogCgkgKiAgPGNvZGU+CgkgKiAgICAgbXlFbnRpdHktPmFkZEluZGV4ZXMoJ2ZpZWxkMScsdHJ1ZSk7CgkgKiAgICAgbXlFbnRpdHktPmFkZEluZGV4ZXMoYXJyYXkoJ2ZpZWxkMicsICdmaWVsZDMnKSk7CgkgKiAgPGNvZGU+CgkgKiAgd2lsbCBjcmVhdGUgMSB1bmlxdWUgaW5kZXggb24gZmllbGQxIGFuZCAxIGluZGV4IG9uIGZpZWxkMixmaWVsZDMKCSAqCgkgKiBAcGFyYW0gbWl4ZWQgT25lIChzdHJpbmcpIG9yIG1hbnkgKGFycmF5KSBuYW1lIG9mIGZpZWxkIHRvIGJlIGluZGV4aW5nCgkgKiBAcGFyYW0gYm9vbGVhbiBpZiB0aGUgaW5kZXggbXVzdCBiZSBVTklRVUUgKGRlZmF1bHQgPSBmYWxzZSkgCgkgKgoJICoqLwoJcHVibGljIGZ1bmN0aW9uIGFkZEluZGV4ZXMoJGZpZWxkTmFtZXMsICRpc1VuaXF1ZT1mYWxzZSl7CgkJCgkJaWYoIWlzX2FycmF5KCRmaWVsZE5hbWVzKSl7CgkJCSRmaWVsZE5hbWVzID0gYXJyYXkoJGZpZWxkTmFtZXMpOwoJCX0KCQkKCQkvL1Rlc3QgdGhlIGV4aXN0ZW5jZSBvZiBlYWNoIG1lbWJlcgoJCWZvcmVhY2goJGZpZWxkTmFtZXMgYXMgJGZpZWxkTmFtZSl7CgkJCWlmKCEkdGhpcy0+aXNGaWVsZEJ5TmFtZUV4aXN0cygkZmllbGROYW1lKSl7CgkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhZGRJbmRleGVzKFwkZmllbGROYW1lcywgXCRpc1VuaXF1ZT1mYWxzZSkgOiB7JGZpZWxkTmFtZXN9IGlzIG5vdCBhIGV4aXN0aW5nIEZpZWxkIG9mIHRoZSBFbnRpdHkgeyR0aGlzLT5nZXROYW1lKCl9Iik7CgkJCX0KCQl9CgkKCQkkdGhpcy0+aW5kZXhlc1tdID0gYXJyYXkoJ2ZpZWxkcycgPT4gJGZpZWxkTmFtZXMsICd1bmlxdWUnID0+ICRpc1VuaXF1ZSk7Cgl9CgkKCS8qKgoJICogVGhpcyBmdW5jdGlvbiB3aWxsIGxldCB5b3UgZGVmaW5lIHNvbWUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgeW91ciBFbnRpdHkKCSAqICAgID0+IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmaWVsZCBpcyAuLi4KCSAqCgkgKiAgZXggOiBteUVudGl0eS0+Z2FybmlzaERlZmF1bHRWYWx1ZSgnZmllbGQxJywgJ3NvbWUgdGV4dCcpCgkgKgoJICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgRmllbGQKCSAqIEBwYXJhbSBNaXhlZCB0aGUgZGVmYXVsdCB2YWx1ZS4KCSAqCgkgKiovCglwdWJsaWMgZnVuY3Rpb24gZ2FybmlzaERlZmF1bHRWYWx1ZSgkZmllbGROYW1lLCRkZWZhdWx0VmFsdWUpewoJCWlmKCEkdGhpcy0+aXNGaWVsZEJ5TmFtZUV4aXN0cygkZmllbGROYW1lKSl7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdhcm5pc2hEZWZhdWx0KCkgb25seSBhY2NlcHQgdmFsaWQgRmllbGQgYnV0ICIuJGZpZWxkTmFtZS4iIGlzIG5vdCBhIGV4aXN0aW5nIEZpZWxkIGluIHRoZSBFbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpKTsKCQl9CgkJCgkJLy9mb3JiaWQgYSBkZWZhdWx0IHZhbHVlIG9uIGEgbnVsbGFibGUgZmllbGQgQmVjYXVzZSBpdCdzIG1ha2Ugbm8gc2Vuc2UKCQlpZigkdGhpcy0+Z2V0RmllbGRCeU5hbWUoJGZpZWxkTmFtZSktPmlzTnVsbGFibGUoKSl7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiRmaWVsZE5hbWUuIiBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGNhbid0IGFjY2VwdCBhIGRlZmF1bHQgdmFsdWUgYmVjYXVzZSBpdCdzIHNldHRlZCBOdWxsYWJsZSIpOwoJCX0KCQkKCQkkdGhpcy0+Z2V0RmllbGRCeU5hbWUoJGZpZWxkTmFtZSktPnNldERlZmF1bHRWYWx1ZSgkZGVmYXVsdFZhbHVlKTsKCQkKCX0KCQoJLyoqCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQoJICogICAgPT4gdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpcyAuLi4KCSAqCgkgKiAgZXggOiBteUVudGl0eS0+Z2FybmlzaERlZmF1bHRPcmRlckJ5KG5ldyBPcm1PcmRlckJ5KCktPmFkZEFzYygnZmllbGQxJyktPmFkZERlc2MoJ2ZpZWxkMicpKQoJICoKCSAqIEBwYXJhbSBPcm1vcmRlckJ5IHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIuCgkgKgoJICoqLwoJcHVibGljIGZ1bmN0aW9uIGdhcm5pc2hEZWZhdWx0T3JkZXJCeShPcm1PcmRlckJ5ICRkZWZhdWx0T3JkZXJCeSl7CgkJZm9yZWFjaCgkZGVmYXVsdE9yZGVyQnkgYXMgJGZpZWxkTmFtZSA9PiAkdmFsdWUpIHsKCQkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRmaWVsZE5hbWUpKXsKCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdhcm5pc2hEZWZhdWx0T3JkZXJCeSgpIG9ubHkgYWNjZXB0IHZhbGlkIEZpZWxkIGJ1dCAiLiRmaWVsZE5hbWUuIiBpcyBub3QgYSBleGlzdGluZyBGaWVsZCBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKSk7CgkJCX0KCQl9CgkJJHRoaXMtPmRlZmF1bHRPcmRlckJ5ID0gJGRlZmF1bHRPcmRlckJ5OwoJfQoJCgkvKioKCSAqIFJldHVybiAKCSAqIEByZXR1cm4gT3JtT3JkZXJCeSA6IGRlZmF1bHQgT3JtT3JkZXJCeQoJICoqLwoJcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRPcmRlckJ5KCkgewoJCXJldHVybiAkdGhpcy0+ZGVmYXVsdE9yZGVyQnk7Cgl9CgkKCQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmEntityAssociation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIE9ybUVudGl0eUFzc29jaWF0aW9uIENsYXNzIHdoaWNoIGV4dGVuZHMgT3JtRW50aXR5IGNsYXNzCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KIAovKioKICogQWJzdHJhY3QgQ2xhc3Mgd2hpY2ggZGVzY3JpYmVzIHRoZSBwcm9wZXJ0aWVzIGZvciBhbiBBc3NvY2lhdGl2ZSBFbnRpdHkKICogICAgCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KYWJzdHJhY3QgY2xhc3MgT3JtRW50aXR5QXNzb2NpYXRpb24gZXh0ZW5kcyBPcm1FbnRpdHkgCnsKCXByaXZhdGUgJG5iRmllbGQgPSAwOwoKICAgIC8qKgogICAgICogY29uc3RydWN0b3IgcHJvdGVjdGVkIHRvIGF2b2lkIGEgZGlyZWN0IGluc3RhbmNpYXRpb24gbGlrZSAibmV3IE9ybUVudGl0eUFzc29jaWF0aW9uKCkiCiAgICAgKiBFYWNoIHRpbWUgYSBlbnRpdHkgaXMgY29uc3RydWN0ZWQsIHdlIHBsYWNlIGEgY29weSBpbnRvIHRoZSBhdXRvbG9hZGVyLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hvIGNhbGxpbmcgdGhpcyBtZXRob2QgKHNvIG5vdCAiT3JtIikKICAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIGVudGl0eQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlCiAgICAgKiBAcGFyYW0gc3RyaW5nIFtvcHRpb25hbF0gVGhlIG5hbWUgb2YgdGFibGUgZm9yIHRoaXMgZW50aXR5LiBJZiBub3Qgc2V0dGVkLCBpdCB3aWxsIHVzZSB0aGUgbmFtZSBvZiB5b3VyIGVudGl0eQogICAgICoKICAgICAqIEByZXR1cm4gT3JtRW50aXR5QXNzb2NpYXRpb24gdGhlIGVudGl0eSBhcyBhIG5ldyBpbnN0YW5jZQogICAgICogCiAgICAgKiBAc2VlIE15QXV0b2xvYWQKICAgICAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVOYW1lLCAkbmFtZSwkcHJlZml4ZSA9IG51bGwsICRkYk5hbWUgPSBudWxsKQoJewoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSwgJGRiTmFtZSk7Cgl9CgkKICAgIC8qKgogICAgKiBBZGQgYSBuZXcgRmllbGQKICAgICogCiAgICAqIEN1cnJlbnRseSwgdGhlIE9ybSBTeXN0ZW0gZG9lbid0IGFsbG93IG1vcmUgdGhhbiB0d28gRmllbGQgZm9yIGFuIEVudGl0eUFzc29jaWF0aW9uCiAgICAqIAogICAgKiBAcGFyYW0gT3JtRmllbGQgdGhlIEZpZWxkIHRvIGFkZC4KCSoKCSogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiB3ZSB0cnkgdG8gdXNlIG1vcmUgdGhhbiB0d28gRmllbGRzIGluIHRoZSBlbnRpdHkKICAgICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkKE9ybUZpZWxkICRuZXdGaWVsZCkKCXsKCQkkdGhpcy0+bmJGaWVsZCArKzsKCQkKCQlpZigkdGhpcy0+bmJGaWVsZCA+IDIpCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAoIkl0J3MgaW1wb3NzaWJsZSB0byB1c2UgbW9yZSB0aGFuIHR3byBGaWVsZCBpbiB0aGUgRW50aXR5QXNzb2NpYXRpb24gIi4gJHRoaXMtPmdldE5hbWUoKSk7CgkJCQkKCQlwYXJlbnQ6OmFkZCgkbmV3RmllbGQpOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmExample.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIE9ybUV4YW1wbGUgQ2xhc3MKICoKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwogCiAKLyoqCiAqIFJlcHJlc2VudHMgYSBncm91cCBvZiBkaWZmZXJlbnRzIE9ybUNyaXRlcmlhIChDcml0ZXJpYXMpIHRvIHByb2Nlc3MgYSBzZWFyY2ggIkJ5IEV4YW1wbGUiIG9uIGEgT3JtRW50aXR5IGluIERhdGFiYXNlCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KZmluYWwgY2xhc3MgT3JtRXhhbXBsZSAKewoJcHJpdmF0ZSAkQ3JpdGVyaWFzID0gYXJyYXkoKTsKCQogICAgLyoqCiAgICAqIFB1YmxpYyBDb25zdHJ1Y3RvcgogICAgKiAKICAgICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQoJewoJfQoJCiAgICAKICAgIC8qKgogICAgKiBBZGQgYSBuZXcgQ3JpdGVyaWEgb24gdGhlIGV4aXN0aW5nIGxpc3QKICAgICogCiAgICAqIEBwYXJhbSBzdHJpbmcgTmFtZSBvZiB0aGUgZmllbGQgCiAgICAqIEBwYXJhbSBPcm1UeXBlQ3JpdGVyaWEgVHlwZSBvZiBDcml0ZXJpYQogICAgKiBAcGFyYW0gYXJyYXkgYWxsIHRoZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBwYXJhbWV0ZXIgJHR5cGVDcml0ZXJpYQogICAgKiBAcGFyYW0gYm9vbGVhbiBbT3B0aW9ubmFsXSBpZiB3ZSBtdXN0IGlnbm9yZSB0aGUgY2FzZSAoYXplIGVxdWFscyBBWkUpIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiCiAgICAqIAogICAgKiBAc2VlIE9ybVR5cGVDcml0ZXJpYQogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBhZGRDcml0ZXJpYSgkZmllbGRuYW1lLCAkdHlwZUNyaXRlcmlhLCAkcGFyYW1zQ3JpdGVyaWEsICRpZ25vcmVDYXNlID0gZmFsc2UpCgl7CgkJaWYoIWlzX2FycmF5KCRwYXJhbXNDcml0ZXJpYSkpCgkJewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJ0aGUgcGFyYW1ldGVyIFwkcGFyYW1zQ3JpdGVyaWEgZm9yIHRoZSBDcml0ZXJpYSBvZiB0aGUgRmllbGQgWyIuJGZpZWxkbmFtZS4iXSBtdXN0IGJlIGFuIGFycmF5Iik7CgkJfQoJCQoJCSR0aGlzLT5Dcml0ZXJpYXNbXSA9IG5ldyBPcm1Dcml0ZXJpYSgkZmllbGRuYW1lLCAkdHlwZUNyaXRlcmlhLCAkcGFyYW1zQ3JpdGVyaWEsICRpZ25vcmVDYXNlKTsKCX0KCiAgICAvKioKICAgICogUmV0dXJuIGFsbCB0aGUgQ3JpdGVyaWFzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBFeGFtcGxlIE9iamVjdAogICAgKiAKICAgICogQHJldHVybiBhcnJheTxDcml0ZXJpYT4gdGhlIGxpc3Qgb2YgQ3JpdGVyaWFzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBFeGFtcGxlIE9iamVjdAogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDcml0ZXJpYXMoKXsKCQlyZXR1cm4gJHRoaXMtPkNyaXRlcmlhczsKCX0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmField.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1GaWVsZAogKgogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCiAKLyoqCiAqICAgUmVwcmVzZW50IGEgT3JtRW50aXR5J3MgZmllbGQgd2l0aCBhbGwgaXRzIHByb3BlcnRpZXMKICoKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwpjbGFzcyBPcm1GaWVsZCAKewoJLyoqCgkgKiBUaGUgKHVuaXF1ZSkgbmFtZSBvZiB0aGUgZmllbGQKCSAqLwoJcHJpdmF0ZSAkbmFtZTsKCQoJLyoqCgkgKiBUaGUgT3JtQ0FTVCB2YWx1ZSBvZiB0aGUgZmllbGQKCSAqLwoJcHJpdmF0ZSAkdHlwZTsKCQoJLyoqCgkgKiBUaGUgbWF4IHNpemUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbCBpZiAkdHlwZSBpcyBEYXRlLCBUaW1lLCBCdWZmZXIsIE5vbmUgLi4uCgkgKi8KCXByaXZhdGUgJHNpemU7CgkKCS8qKgoJICogQm9vbGVhbiA6IHRydWUgaWYgdGhlIHZhbHVlIG1heSBiZSBOVUxMCgkgKi8KCXByaXZhdGUgJG51bGxhYmxlOwoJCgkvKioKCSAqIHRoZSBPcm1LRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbAoJICovCglwcml2YXRlICRLRVk7CgkKCS8qKgoJICogdGhlIG5hbWUgb2YgdGhlIGtleS4gT25seSB1c2VkIGZvciBGb3JlaWduS2V5IGFuZCBBc3NvY2lhdGVLZXkKCSAqLwoJcHJpdmF0ZSAkS0VZTmFtZTsKCQoJLyoqCgkgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gTm90IHVzZWQgYnkgZGVmYXVsdC4KCSAqKi8KCXByaXZhdGUgJGRlZmF1bHRWYWx1ZTsKCQogICAgLyoqCiAgICAqIHB1YmxpYyBjb25zdHJ1Y3RvcgogICAgKiAJCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlICh1bmlxdWUpIG5hbWUgb2YgdGhlIGZpZWxkCiAgICAqIEBwYXJhbSBPcm1DQVNUIFRoZSBPcm1DQVNUIHZhbHVlIG9mIHRoZSBmaWVsZCBleGFtcGxlIDogT3JtT3JtQ0FTVDo6JElOVEVHRVIKICAgICogQHBhcmFtIGludCBUaGUgbWF4IHNpemUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbCBpZiAkdHlwZSBpcyBEYXRlLCBUaW1lLCBCdWZmZXIsIE5vbmUgLi4uCiAgICAqIEBwYXJhbSB0cnVlIGlmIHRoZSB2YWx1ZSBtYXkgYmUgTlVMTC4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZQogICAgKiBAcGFyYW0gT3JtS0VZIHRoZSBLRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbCBleGFtcGxlOiBPcm1LRVk6OiRQSyBmb3IgYSBwcmltYXJ5IGtleQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBrZXkuIE9ubHkgdXNlZCBmb3IgRm9yZWlnbktleSBhbmQgQXNzb2NpYXRlS2V5IGV4YW1wbGUgOiAiQ3VzdG9tZXIuY3VzdG9tZXJfaWQiIGluIHRoZSBmaWVsZCAiY3VzdG9tZXIiIG9mIGFuIGVudGl0eSAiT3JkZXIiLgogICAgKiAKICAgICogQHJldHVybiBPcm1GaWVsZCB0aGUgRmllbGQgT2JqZWN0CiAgICAqIAogICAgKiAKICAgICogQHNlZSBPcm1DQVNUCiAgICAqIEBzZWUgT3JtS0VZCgkqIEBzZWUgT3JtRW50aXR5CiAgICAqIAogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmllbGRuYW1lLCAkY2FzdCwgJHNpemUgPSBudWxsLCAkbnVsbGFibGUgPSBmYWxzZSwgJEtFWSA9IG51bGwsICRLRVlOYW1lPW51bGwpIHsKCQoJCWlmKGVtcHR5KCRLRVkpICYmICFlbXB0eSgkS0VZTmFtZSkpIHsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdJbXBvc3NpYmxlIHRvIHNwZWNpZnkgYSBrZXlOYW1lIHBhcmFtZXRlciBmb3IgdGhlIGZpZWxkICcuJGZpZWxkbmFtZS4nIGlmIHRoZSBrZXkgaXMgbm90ICRGSyBvciAkQUsnKTsKCQl9CgkJaWYoJEtFWSA9PSBPcm1LRVk6OiRQSyAmJiAhZW1wdHkoJEtFWU5hbWUpKSB7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignSW1wb3NzaWJsZSB0byBzcGVjaWZ5IGEga2V5TmFtZSBwYXJhbWV0ZXIgZm9yIHRoZSBmaWVsZCAnLiRmaWVsZG5hbWUuJyBpZiB0aGUga2V5IGlzIG5vdCAkRksgb3IgJEFLJyk7CgkJfQoJCWlmKCgkS0VZID09IE9ybUtFWTo6JEZLIHx8ICRLRVkgPT0gT3JtS0VZOjokQUspICYmIGVtcHR5KCRLRVlOYW1lKSkgewoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24oJyRGSyBrZXkgb3IgJEFLIGtleSBmb3IgdGhlIGZpZWxkICcuJGZpZWxkbmFtZS4nIG5lZWQgYSBrZXlOYW1lJyk7CgkJfQoJCQoJCWlmKCgkY2FzdCA9PSBPcm1DQVNUOjokREFURSB8fCAkY2FzdCA9PSBPcm1DQVNUOjokQlVGRkVSIHx8ICRjYXN0ID09IE9ybUNBU1Q6OiRUSU1FCgkJCQl8fCAkY2FzdCA9PSBPcm1DQVNUOjokREFURVRJTUUgfHwgJGNhc3QgPT0gT3JtQ0FTVDo6JFRTIHx8ICRjYXN0ID09IE9ybUNBU1Q6OiRVVUlEIAoJCQkJfHwgJGNhc3QgPT0gT3JtQ0FTVDo6JE5PTkUpICYmICFlbXB0eSgkc2l6ZSkpIHsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdUaGUgZmllbGQgJy4kZmllbGRuYW1lLicgbXVzdCBub3QgaGF2ZSBzaXplIHZhbHVlIGJlY2F1c2Ugb2YgaXRzIG93biBPcm1DQVNUJyk7CgkJfQoJCWlmKCgkY2FzdCA9PSBPcm1DQVNUOjokU1RSSU5HKSAmJiBlbXB0eSgkc2l6ZSkpIHsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdUaGUgZmllbGQgJy4kZmllbGRuYW1lLicgbXVzdCBoYXZlIHNpemUgdmFsdWUgYmVjYXVzZSBvZiBpdHMgb3duIE9ybUNBU1QnKTsKCQl9CgkJCgoJCWlmKCRudWxsYWJsZSA9PSBudWxsKSB7CgkJCSRudWxsYWJsZSA9IGZhbHNlOwoJCX0KCQkJCgkJJHRoaXMtPm5hbWUgCT0gJGZpZWxkbmFtZTsKCQkkdGhpcy0+dHlwZSAJPSAkY2FzdDsKCQkkdGhpcy0+c2l6ZSAJPSAkc2l6ZTsKCQkkdGhpcy0+bnVsbGFibGUgPSAkbnVsbGFibGU7CgkJJHRoaXMtPktFWSAJCT0gJEtFWTsKCQkkdGhpcy0+S0VZTmFtZSAJPSAkS0VZTmFtZTsKCX0KCQoKICAgIC8qKgogICAgKiBnZXR0ZXIgZm9yIG5hbWUKICAgICogCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSAodW5pcXVlKSBuYW1lIG9mIEZpZWxkCiAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQoJe3JldHVybiAkdGhpcy0+bmFtZTt9CgogICAgLyoqCiAgICAqIGdldHRlciBmb3IgdHlwZQogICAgKiAKICAgICogQHJldHVybiBzdHJpbmcgdGhlIENBU1QgdmFsdWUgb2YgRmllbGQKICAgICogCiAgICAqIEBzZWUgT3JtQ0FTVAogICAgKiAKICAgICovCQoJcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQoJe3JldHVybiAkdGhpcy0+dHlwZTt9CgkKICAgLyoqCiAgICAqIGdldHRlciBmb3Igc2l6ZQogICAgKiAKICAgICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgRmllbGQKICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCgl7cmV0dXJuICR0aGlzLT5zaXplO30KCiAgIC8qKgogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkUEsKICAgICogCiAgICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIEZpZWxkIGhhcyBhICRQSwogICAgKi8JCglwdWJsaWMgZnVuY3Rpb24gaXNQcmltYXJ5S0VZKCkKCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRQSzt9CgogICAvKioKICAgICogcmV0dXJuIHRydWUgaWYgRmllbGQgaGFzIGEgJEZLCiAgICAqIAogICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkRksKICAgICovICAgIAkKCXB1YmxpYyBmdW5jdGlvbiBpc0ZvcmVpZ25LRVkoKQoJe3JldHVybiAkdGhpcy0+S0VZID09IE9ybUtFWTo6JEZLO30KCiAgIC8qKgogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkQUsKICAgICogCiAgICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIEZpZWxkIGhhcyBhICRBSwogICAgKi8gICAgCQoJcHVibGljIGZ1bmN0aW9uIGlzQXNzb2NpYXRlS0VZKCkKCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRBSzt9CgkKICAgIC8qKgogICAgKiBnZXR0ZXIgZm9yIGtleU5hbWUKICAgICogCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBrZXlOYW1lIG9mIEZpZWxkCiAgICAqIAogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRLRVlOYW1lKCkKCXtyZXR1cm4gJHRoaXMtPktFWU5hbWU7fQoJCiAgICAvKioKICAgICogZ2V0dGVyIGZvciBudWxsYWJsZSAKICAgICogCiAgICAqIEByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBpcyBvcHRpb25hbCBpbiBkYXRhYmFzZQogICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc051bGxhYmxlKCkKCXtyZXR1cm4gJHRoaXMtPm51bGxhYmxlO30KCQogICAgLyoqCiAgICAqIGdldHRlciBmb3IgZGVmYXVsdFZhbHVlCiAgICAqIAogICAgKiBAcmV0dXJuIG1peGVkIHRoZSBkZWZhdWx0IHZhbHVlIG9mIEZpZWxkCiAgICAqIAogICAgKi8JCglwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkKCXtyZXR1cm4gJHRoaXMtPmRlZmF1bHRWYWx1ZTt9CgkKICAgLyoqCiAgICAqIHNldHRlciBmb3IgZGVmYXVsdFZhbHVlCiAgICAqIAogICAgKiBAcGFyYW0gbWl4ZWQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgRmllbGQKICAgICogCiAgICAqLwkKCXB1YmxpYyBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUoJGRlZmF1bHRWYWx1ZSl7CgkJaWYoJHRoaXMtPnR5cGUgPT0gT3JtQ0FTVDo6JEJVRkZFUil7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiR0aGlzLT5uYW1lLiIgb2YgdHlwZSBCVUZGRVIgY2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgIik7CgkJfQoJCSR0aGlzLT5kZWZhdWx0VmFsdWUgPSAkZGVmYXVsdFZhbHVlOwoJfQoJCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmIllegalArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIC8qKgogKiBDb250YWlucyB0aGUgY2xhc3MgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KIAoKLyoqCiAqIENsYXNzZSBleHRlbmRzIEV4Y2VwdGlvbiwgdXNlZCB3aGVuIHRoZSBwYXJhbWV0ZXJzIGlzIG5vdCB0aGUgb25lIGV4cGVjdGVkCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiovCmNsYXNzIE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbXNnPU5VTEwsICRjb2RlPTApCiAgICB7cGFyZW50OjpfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSk7fQp9CgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmIllegalConfigurationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIC8qKgogKiBDb250YWlucyB0aGUgY2xhc3MgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAqCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KIAoKLyoqCiAqIENsYXNzZSBleHRlbmRzIEV4Y2VwdGlvbiwgdXNlZCB3aGVuIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgRW50aXRpZXMgaXNuJ3QgY29ycmVjdAogKgogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQoqLwpjbGFzcyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiAgewogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZz1OVUxMLCAkY29kZT0wKQogICAge3BhcmVudDo6X19jb25zdHJ1Y3QoJG1zZywgJGNvZGUpO30KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmKEY.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBmb3IgdGhlIGRpZmZlcmVudCBkYXRhYmFzZSBrZXkKICogCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KCi8qKgogKiBDbGFzcyBkZWZpbmVzIHRoZSBkaWZmZXJlbnRzIGtleXMgdXNlZCBpbiB0aGUgT3JtIHN5c3RlbQogKiAKICogIE9ybUtFWTo6JFBLIGRlZmluZXMgYSBwcmltYXJ5IGtleQogKiAgT3JtS0VZOjokRksgZGVmaW5lcyBhIGZvcmVpZ24ga2V5IDogYSBsaW5rIGJldHdlZW4gMiBlbnRpdGllcyAwLDEtPm4gCiAqICBPcm1LRVk6OiRBSyBkZWZpbmVzIGFuIGFzc29jaWF0ZSBrZXkgOiBhIGxpbmsgYmV0d2VlbiAyIGVudGl0aWVzIHRoYXQgbmVlZGluZyBhIHRoaXJkIHRhYmxlCiAqIAogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQoqLwpjbGFzcyBPcm1LRVkKewoJcHVibGljIHN0YXRpYyAkUEsgPSAweDk5MDE7IC8vIFByaW1hcnkgS0VZCglwdWJsaWMgc3RhdGljICRGSyA9IDB4OTkwMjsgLy8gRm9yZWlnbiBLRVkgYSBsaW5rIGJldHdlZW4gMiBlbnRpdGllcyAwLDEtPm4KCXB1YmxpYyBzdGF0aWMgJEFLID0gMHg5OTAzOyAvLyBBc3NvY2lhdGUgS0VZIGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgbi0+biB0aGF0IG5lZWRpbmcgYSB0aGlyZCB0YWJsZQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmLimit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgU3FsIExJTUlUCiAqCiAqIEBzaW5jZSAwLjIuMAogKiBAYXV0aG9yIEhlcmlxdWV0CiAqIEBwYWNrYWdlIE9ybQogKiovCgoKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgU3FsIExJTUlUCiAqIAogKiBAc2luY2UgMC4yLjAKICogQGF1dGhvciBIZXJpcXVldAogKiBAcGFja2FnZSBPcm0KKi8KY2xhc3MgT3JtTGltaXQKewkKCXByaXZhdGUgJG9mZnNldCA9IDA7Cglwcml2YXRlICRyb3dfY291bnQgPSAwOwoKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCRvZmZzZXQ9MCwgJHJvd19jb3VudD0wKSB7CgkJJHRoaXMtPm9mZnNldCA9ICRvZmZzZXQ7CgkJJHRoaXMtPnJvd19jb3VudCA9ICRyb3dfY291bnQ7Cgl9CgkKICAgLyoqCiAgICAqIHJldHVybiB0aGUgTElNSVQgY2xhdXNlCiAgICAqIAogICAgKiBAcmV0dXJuIHRoZSBMSU1JVCBjbGF1c2UKICAgICovICAgICAgCglmdW5jdGlvbiBnZXRMaW1pdCgpCXsKCQlpZigkdGhpcy0+b2Zmc2V0ID09IDAgJiYgJHRoaXMtPnJvd19jb3VudCA9PSAwKSB7IC8vIG5vIGxpbWl0IHNldAoJCQlyZXR1cm4gJyc7CgkJfQoJCQoJCWlmKCR0aGlzLT5vZmZzZXQgPCAwKSB7CgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgb2Zmc2V0IHZhbHVlOiB7JHRoaXMtPm9mZnNldH0uIE11c3QgYmUgPj0gMCIpOwoJCX0KCQkKCQlpZigkdGhpcy0+cm93X2NvdW50IDw9IDApIHsKCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCByb3dfY291bnQgdmFsdWU6IHskdGhpcy0+cm93X2NvdW50fS4gTXVzdCBiZSA+IDAiKTsKCQl9CgkJCgkJJGxpbWl0ID0gJyBMSU1JVCAnOwoJCQoJCWlmKCR0aGlzLT5vZmZzZXQgPSAwKSB7CgkJCSRsaW1pdC49ICR0aGlzLT5vZmZzZXQ7CgkJfQoJCQoJCSRsaW1pdC49ICcgJy4kdGhpcy0+cm93X2NvdW50OwoJCQoJCXJldHVybiAkbGltaXQ7Cgl9CgkKICAgLyoqCiAgICAqIFNldCBvZmZzZXQKICAgICogCiAgICAqLwoJZnVuY3Rpb24gc2V0T2Zmc2V0KCRvZmZzZXQpIHsKCQkkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKCX0KCQogICAvKioKICAgICogU2V0IHJvd19jb3VudAogICAgKiAKICAgICovCglmdW5jdGlvbiBzZXRSb3dDb3VudCgkcm93X2NvdW50KSB7CgkJJHRoaXMtPnJvd19jb3VudCA9ICRyb3dfY291bnQ7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmOrderBy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgU3FsIHNvcnRpbmcgb2YgdGhlIEVudGl0eQogKgogKiBAc2luY2UgMC4yLjAKICogQGF1dGhvciBIZXJpcXVldAogKiBAcGFja2FnZSBPcm0KICoqLwoKCi8qKgogKiBDb250YWlucyB0aGUgY2xhc3Mgd2hpY2ggd2lsbCBtYW5hZ2UgdGhlIFNxbCBzb3J0aW5nIG9mIHRoZSBFbnRpdHkKICogCiAqICBPcm1DQVNUOjokREVTQyAKICoKICogQHNpbmNlIDAuMi4wCiAqIEBhdXRob3IgSGVyaXF1ZXQKICogQHBhY2thZ2UgT3JtCiovCmNsYXNzIE9ybU9yZGVyQnkKewoJcHJpdmF0ZSAkb3JkZXJzID0gYXJyYXkoKTsKCglwdWJsaWMgc3RhdGljICRBU0MgPSAnQVNDJzsKCXB1YmxpYyBzdGF0aWMgJERFU0MgPSAnREVTQyc7CgkKCS8qKgogICAgKiBwdWJsaWMgY29uc3RydWN0b3IKICAgICogCQogICAgKiBAcGFyYW0gYXJyYXkgJG9yZGVycyBhbiBoYXNoIHdpdGggb3JkZXIgYnkgZGVmaW5pdGlvbnMKCSovCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb3JkZXJzPWFycmF5KCkpIHsKCQlmb3JlYWNoKCRvcmRlcnMgYXMgJGZpZWxkID0+ICRvcmRlcikgewoJCQlpZigkb3JkZXIgPT0gT3JtT3JkZXJCeTo6JEFTQykgewoJCQkJJHRoaXMtPmFkZEFzYygkZmllbGQpOwoJCQl9CgkJCWVsc2UgaWYoJG9yZGVyID09IE9ybU9yZGVyQnk6OiRERVNDKSB7CgkJCQkkdGhpcy0+YWRkRGVzYygkZmllbGQpOwkJCQoJCQl9CgkJCWVsc2UgewoJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBvcmRlciBmb3IgT1JERVIgQlk6IHskb3JkZXJ9LiIpOwoJCQl9CgkJfQoJfQoJCiAgIC8qKgogICAgKiByZXR1cm4gT1JERVIgQlkgY2xhdXNlCiAgICAqIAogICAgKiBAcmV0dXJuIE9SREVSIEJZIGNsYXVzZQogICAgKi8gICAgICAKCWZ1bmN0aW9uIGdldE9yZGVyQnkoKQl7CgkJJG9yZGVyYnkgPSAnIE9SREVSIEJZICc7CgkJCgkJaWYoY291bnQoJHRoaXMtPm9yZGVycykgPT0gMCkgewoJCQlyZXR1cm4gJyc7CgkJfQoJCQoJCSRpPTE7CgkJZm9yZWFjaCgkdGhpcy0+b3JkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQoJCQkkb3JkZXJieSAuPSAoJGkrKz4xPycsJzonJykuJyAnLiRrZXkuJyAnLiR2YWx1ZTsKCQl9CgkJCgkJcmV0dXJuICRvcmRlcmJ5OwoJfQoJCiAgIC8qKgogICAgKiBBZGQgYSBuZXcgZmllbGQgaW4gb3JkZXIgYnk6IERFU0MKICAgICogCiAgICAqLwoJZnVuY3Rpb24gYWRkQXNjKCRmaWVsZCkgewoJCSR0aGlzLT5vcmRlcnMgPSBhcnJheV9tZXJnZSgkdGhpcy0+b3JkZXJzLCBhcnJheSgkZmllbGQgPT4gJycpKTsgLy8gQVNDIG5vdCBtYW5kYXRvcnkKCX0KCQogICAvKioKICAgICogQWRkIGEgbmV3IGZpZWxkIGluIG9yZGVyIGJ5OiBERVNDCiAgICAqIAogICAgKi8KCWZ1bmN0aW9uIGFkZERlc2MoJGZpZWxkKSB7CgkJJHRoaXMtPm9yZGVycyA9IGFycmF5X21lcmdlKCR0aGlzLT5vcmRlcnMsIGFycmF5KCRmaWVsZCA9PiBPcm1PcmRlckJ5OjokREVTQykpOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmTrace.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIGFsbCB0aGUgZGVidWcgc3lzdGVtLgogKgogKiBAc2luY2UgMC4wLjEKICogQGF1dGhvciBCZXNzCiAqIEBwYWNrYWdlIE9ybQogKiovCgovKioKICogIEFsbG93IGRpc3BsYXkgc3RhY2t0cmFjZSBhbmQgb3RoZXIgaW5mb3JtYXRpb25zIGluIGEgY29uc29sZSBvciBvbiB0aGUgcGFnZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICogIGV4YW1wbGUKICogIDxjb2RlPgogKiAgICAgICAgICBPcm1UcmFjZTo6ZGVidWcoJ2kgYW0gaGVyZSAhJyk7CiAqICAgICAgICAgIE9ybVRyYWNlOjppbmZvKCdwcm9jZXNzIGZpbmlzaGVkJyk7CiAqICAgICAgICAgIE9ybVRyYWNlOjp3YXJuKCdCZSBjYXJmdWxsIDogdG9vIG11Y2ggcmVzdWx0cyB3aWxsIGJlIGRpc3BsYXllZCcpOwogKiAgICAgICAgICBPcm1UcmFjZTo6ZXJyb3IoJ291cHMgaG91c3Rvbiwgd2UgaGF2ZSBnb3QgYSBwcm9ibGVtLi4uIDooICcpOwogKiAgPC9jb2RlPgogKiAKICogdGhlIHByb3BlcnR5ICRsZXZlbCBvZiB0aGlzIGNsYXNzIGRlZmluZXMgdGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlcyB0byBkaXNwbGF5aW5nCiAqICBTbyBhIGxldmVsIG9mICJXQVJOIiB3aWxsIG9ubHkgZGlzcGxheSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcwogKiAgQnkgZGVmYXVsdCB0aGUgbGV2ZWwgaXMgc2V0dGVkIHRvIFdBUk4KICoKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLyAgIAogCmZpbmFsIGNsYXNzIE9ybVRyYWNlCnsKCXB1YmxpYyBzdGF0aWMgJERFQlVHID0gMDsKCXB1YmxpYyBzdGF0aWMgJElORk8gPSAxOwoJcHVibGljIHN0YXRpYyAkV0FSTiA9IDI7CglwdWJsaWMgc3RhdGljICRFUlJPUiA9IDM7CgkKCXByb3RlY3RlZCBzdGF0aWMgJGxvZ0ZpbGU7Cglwcm90ZWN0ZWQgc3RhdGljICRsb2dVcmw7CgkKCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKCX0KCgkvKioKICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBERUJVRyBsZXZlbAogICAgKiAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5CiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBkZWJ1ZygkbXNnKSB7CQoJCXNlbGY6OmlubmVyV3JpdGVyKE9ybVRyYWNlOjokREVCVUcsICdkZWJ1ZycsICRtc2cpOwoJfQoKICAgIC8qKgogICAgKiBEaXNwbGF5IGEgbWVzc2FnZSB3aXRoIElORk8gbGV2ZWwKICAgICogCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheQogICAgKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gaW5mbygkbXNnKSB7CQoJCXNlbGY6OmlubmVyV3JpdGVyKE9ybVRyYWNlOjokSU5GTywgJ2luZm8nLCAkbXNnKTsKCX0gCgogICAgLyoqCiAgICAqIERpc3BsYXkgYSBtZXNzYWdlIHdpdGggV0FSTiBsZXZlbAogICAgKiAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5CiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiB3YXJuKCRtc2cpIHsJCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRXQVJOLCAnd2FybicsICRtc2cpOwoJfSAKCiAgICAvKioKICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBFUlJPUiBsZXZlbAogICAgKiAKICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5CiAgICAqLwoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBlcnJvcigkbXNnKSB7CQoJCXNlbGY6OmlubmVyV3JpdGVyKE9ybVRyYWNlOjokRVJST1IsICdlcnJvcicsICRtc2cpOwoJfQoJCgkvKioKCSAqIFdpbGwgcmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBsb2cgZmlsZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBwYXRoIG9mIHRoZSBsb2cgZmlsZQoJICoqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRMb2dGaWxlKCl7CgkJaWYoc2VsZjo6JGxvZ0ZpbGUgPT0gbnVsbCl7CgkJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCQkJc2VsZjo6JGxvZ0ZpbGUgPSAkY29uZmlnWydyb290X3BhdGgnXS4nL3RtcC9jYWNoZS9vcm0ubG9nJzsKCQl9CgkJcmV0dXJuIHNlbGY6OiRsb2dGaWxlOwoJfQoJCgkvKioKCSAqIFdpbGwgcmV0dXJuIHRoZSB1cmwgb2YgdGhlIGxvZyBmaWxlCgkgKgoJICogQHJldHVybiBzdHJpbmcgdGhlIHVybCBvZiB0aGUgbG9nIGZpbGUKCSAqKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0TG9nVXJsKCl7CgkJaWYoc2VsZjo6JGxvZ1VybCA9PSBudWxsKXsKCQkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoJCQlzZWxmOjokbG9nVXJsID0gJGNvbmZpZ1sncm9vdF91cmwnXS4nL3RtcC9jYWNoZS9vcm0ubG9nJzsKCQl9CgkJcmV0dXJuIHNlbGY6OiRsb2dVcmw7Cgl9CgkKCS8qKgoJICogRG8gYWxsIHRoZSBzdWZmIGJlaGluZAoJICoKCSAqIEBwYXJhbSBzdHJpbmcgdGhlIGxldmVsIG9mIG1lc3NhZ2UuCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBjc3MgY2xhc3MgdG8gZGlzcGxheSB0aGUgImlubGluZSIgbWVzc2FnZQoJICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5CgkgKi8KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGlubmVyV3JpdGVyKCRsZXZlbCwgJGNzc0NsYXNzLCAkbXNnKXsKCQkkb3JtID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpLT5nZXRfbW9kdWxlX2luc3RhbmNlKCdPcm0nKTsKCgkJaWYoJG9ybS0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UcmFjZTo6JElORk8pID4gJGxldmVsKSB7cmV0dXJuO30KCQkKCQkkY29udGVudCA9IGRhdGUoJ1ktbS1kIEg6aTpzJywgdGltZSgpKS4iIC0gWyRjc3NDbGFzc10gLSAkbXNnIFxuIjsKCS8vCSRjb250ZW50ID0gdXRmOF9lbmNvZGUoJGNvbnRlbnQpOwoJCQkJCgkJLy9pbiBmaWxlIGxvZwoJCWZpbGVfcHV0X2NvbnRlbnRzKHNlbGY6OmdldExvZ0ZpbGUoKSAsJGNvbnRlbnQsIEZJTEVfQVBQRU5EICk7CgoJCS8vSW4gcGhwIGxvZwoJCWVycm9yX2xvZygkbXNnKTsKCX0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmTypeCriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHRoZSBPcm1UeXBlQ3JpdGVyaWEgY2xhc3MKICogCiAqIEBzaW5jZSAwLjAuMQogKiBAYXV0aG9yIEJlc3MKICogQHBhY2thZ2UgT3JtCiAqKi8KIAoKLyoqCiAqIEVudW0gZm9yIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgT3JtVHlwZUNyaXRlcmlhCiAqIAogKiAKICogQHNpbmNlIDAuMC4xCiAqIEBhdXRob3IgQmVzcwogKiBAcGFja2FnZSBPcm0KICoqLwpjbGFzcyBPcm1UeXBlQ3JpdGVyaWEKewogICAgLyoqCiAgICAqIElzIGVxdWFscyB0bwogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRFUSA9ICcgPSAnOwogICAgCiAgICAvKioKICAgICogSXMgZGlmZmVyZW50IE9mCiAgICAqIAogICAgKiBAdmFyIHN0cmluZwogICAgKi8KCXB1YmxpYyBzdGF0aWMgJE5FUSA9ICcgIT0gJzsKICAgIAogICAgLyoqCiAgICAqIGlzIHN0cmljdGx5IGdyZWF0ZXIgIHRoYW4KICAgICogCiAgICAqIEB2YXIgc3RyaW5nCiAgICAqLwoJcHVibGljIHN0YXRpYyAkR1QgPSAnID4gJzsKICAgIAogICAgLyoqCiAgICAqIGlzIGdyZWF0ZXIgIG9yIGVxdWFscyB0bwogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRHVEUgPSAnID49ICc7CiAgICAKICAgIC8qKgogICAgKiBpcyBzdHJpY3RseSBsZXNzZXIgdGhhbgogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRMVCA9ICcgPCAnOwogICAgCiAgICAvKioKICAgICogaXMgbGVzc2VyIG9yIGVxdWFscyB0bwogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRMVEUgPSAnIDw9ICc7CgkKCS8qKgogICAgKiBpcyBOVUxMIG9yIGlzIEVtcHR5CiAgICAqIAogICAgKiBAdmFyIHN0cmluZwogICAgKi8KCXB1YmxpYyBzdGF0aWMgJEVNUFRZID0gJ2lzIGVtcHR5KCknOwoJCiAgICAvKioKICAgICogaXMgTm90IE5VTEwgYW5kIGlzIE5vdCBFbXB0eQogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRORU1QVFkgPSAnaXMgbm90IGVtcHR5KCknOwogICAgCiAgICAvKioKICAgICogaXMgTlVMTAogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICROVUxMID0gJyBpcyBudWxsICc7CiAgICAKICAgIC8qKgogICAgKiBpcyBOb3QgTlVMTAogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICROTlVMTCA9ICcgaXMgbm90IG51bGwnOwogICAgCiAgICAvKioKICAgICogaXMgYmVmb3JlIChhIERhdGUpCiAgICAqIAogICAgKiBAdmFyIHN0cmluZwogICAgKi8KCXB1YmxpYyBzdGF0aWMgJEJFRk9SRSA9ICcgYmVmb3JlICc7CiAgICAKICAgIC8qKgogICAgKiBpcyBhZnRlciAoYSBEYXRlKQogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRBRlRFUiA9ICcgYWZ0ZXIgJzsKICAgIAogICAgLyoqCiAgICAqIGlzIGJldHdlZW4gKGEgRGF0ZSkKICAgICogCiAgICAqIEB2YXIgc3RyaW5nCiAgICAqLwoJcHVibGljIHN0YXRpYyAkQkVUV0VFTiA9ICcgYmV0d2VlbiAnOwogICAgIAogICAgLyoqCiAgICAqIGlzIGNvbnRhaW5lZCBpbnRvIHRoZSBhcnJheQogICAgKiAKICAgICogLyFcIG5lZWQgYXQgbGFzdCAyIHZhbHVlcyBpbiB0aGUgYXJyYXkKICAgICogCiAgICAqIEB2YXIgc3RyaW5nCiAgICAqLwoJcHVibGljIHN0YXRpYyAkSU4gPSAnaW4gKCVhKSc7CiAgICAKICAgIC8qKgogICAgKiBpcyBub3QgY29udGFpbmVkIGludG8gdGhlIGFycmF5CiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgKiAvIVwgbmVlZCBhdCBsYXN0IDIgdmFsdWVzIGluIHRoZSBhcnJheQogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICROSU4gPSAnbm90IGluICglYSknOwogICAgCiAgICAvKioKICAgICogY29udGFpbnMgdGhlIHN0cmluZwogICAgKiAKICAgICogLyFcIGRvbid0IGZvcmdldCB0byBhZGQgdGhlIHdpbGRjYXJkICclJwogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICRMSUtFID0gJyBsaWtlICc7CiAgICAKICAgIC8qKgogICAgKiBkb2Vzbid0IGNvbnRhaW4gdGhlIHN0cmluZwogICAgKiAKICAgICogLyFcIGRvbid0IGZvcmdldCB0byBhZGQgdGhlIHdpbGRjYXJkICclJwogICAgKiAKICAgICogQHZhciBzdHJpbmcKICAgICovCglwdWJsaWMgc3RhdGljICROTElLRSA9ICcgbm90IGxpa2UgJzsKfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.OrmUtils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbnRhaW5zIHV0aWxpdGllcwogKgogKiBAc2luY2UgMC4zLjAKICogQGF1dGhvciBIZXJpcXVldAogKiBAcGFja2FnZSBPcm0KICoqLwoKCi8qKgogKiBDbGFzcyBjb250YWlucyBzb21lIHV0aWxpdGllcwogKiAKICogQHNpbmNlIDAuMy4wCiAqIEBhdXRob3IgSGVyaXF1ZXQKICogQHBhY2thZ2UgT3JtCiovCmNsYXNzIE9ybVV0aWxzCnsKCS8qCgkqIEFzc2lnbnMgYWxsIGFycmF5IHZhbHVlcyB0byB0aGUgZW50aXR5LCAKCSogZXNwZWNpYWxseSBmb3IgaGVscGluZyB0aGUgZGV2ZWxvcHBlciB0byBhc3NpZ24gYWxsIGZvcm0gdmFyaWFibGVzIHRvIHRoZSBlbnRpdHksIAoJKiBvciB0byBsb2FkIGFuIGVudGl0eSB3aXRoIGEgT3JtRGI6OmV4ZWN1dGUgY3VzdG9tIHF1ZXJ5CgkqIEJlIGNhcmVmdWxsIHdpdGggdGhpcyBmdW5jdGlvbgoJKiAKCSogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICAKCSogQHBhcmFtIGRhdGEgYXJyYXkgaGFzaHRhYmxlCgkqLyAKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXJyYXlUb0VudGl0eShPcm1FbnRpdHkgJiRlbnRpdHksICYkZGF0YSkgewoJCWZvcmVhY2goJGVudGl0eS0+Z2V0RmllbGRzKCkgYXMgJGZpZWxkKSB7CgkJCWlmKGlzc2V0KCRkYXRhWyRmaWVsZC0+Z2V0TmFtZSgpXSkpIHsKCQkJCSRlbnRpdHktPnNldCgkZmllbGQtPmdldE5hbWUoKSwgJGRhdGFbJGZpZWxkLT5nZXROYW1lKCldKTsKCQkJfQoJCX0KCX0KfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwppZiggIWNsYXNzX2V4aXN0cygiT3JtVHJhY2UiKSkgewoJcmVxdWlyZV9vbmNlKCRjb25maWdbJ3Jvb3RfcGF0aCddLicvbW9kdWxlcy9Pcm0vbGliL2NsYXNzLk9ybVRyYWNlLnBocCcpOwp9CmlmKCAhY2xhc3NfZXhpc3RzKCJPcm1DYWNoZSIpKSB7CglyZXF1aXJlX29uY2UoJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy9tb2R1bGVzL09ybS9saWIvY2xhc3MuT3JtQ2FjaGUucGhwJyk7Cn0KCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsb2dsZXZlbCcsIE9ybVRyYWNlOjokSU5GTyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjYWNoZVR5cGUnLCBPcm1DYWNoZTo6JE5PTkUpOwoKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZV9Pcm0nLCAnTWFuYWdlIE9ybScpOwoKJHRoaXMtPkF1ZGl0KCAwLCAKCSAgICAgICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgCgkgICAgICAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywgJHRoaXMtPkdldFZlcnNpb24oKSkgKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2xvZ2xldmVsJyk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdjYWNoZVR5cGUnKTsKCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNYW5hZ2VfT3JtJyk7CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKCmlmKCB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sICcwLjIuMicpIDwgMCApIHsKCSR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2VfT3JtJywgJ01hbmFnZSBPcm0nKTsKfQoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/Orm.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCS8qKgoJKiBDbGFzcyBvZiBjbXNtYWRlc2ltcGxlJ3MgQVBJLiBVc2VkIHRvIG1ha2UgYSBsaW5rIGJldHdlZW4gdGhlIEFQSSBvZiBDbXNNYWRlU2ltcGxlIGFuZCBvdGhlciBtb2R1bGVzJwoJKgoJKiBAc2luY2UgMC4wLjEKCSogQGF1dGhvciBCZXNzCgkqIEBwYWNrYWdlIE9ybQoJKiovCgoJLyoqCgkqIFRoZSBDbGFzcyBPcm0gZGVmaW5lIHRoZSBtb2R1bGUgT3JtIGFuZCBhbGxvdyBoYXZpbmcgYWxsIHRoZSBvcm0gZnVuY3Rpb25hbGl0aWVzIGludG8gYW5vdGhlciBtb2R1bGUKCSoKCSogQHNpbmNlIDAuMC4xCgkqIEBhdXRob3IgQmVzcwoJKiBAcGFja2FnZSBjbXNtcwoJKi8KY2xhc3MgT3JtIGV4dGVuZHMgQ01TTW9kdWxlIHsKCglmdW5jdGlvbiBHZXROYW1lKCkgewoJCXJldHVybiAnT3JtJzsKCX0KCglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKCX0KCglmdW5jdGlvbiBHZXRWZXJzaW9uKCkgewoJCXJldHVybiAnMC4yLjInOwoJfQogIAoJZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKIAl7CiAgICAJcmV0dXJuIGFycmF5KCk7Cgl9CgoJZnVuY3Rpb24gR2V0SGVscCgpIHsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKCX0KCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7CgkJcmV0dXJuICdLZXZpbiBEYW5lemlzIChha2EgQmVzcyknOwoJfQoKCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgewoJCXJldHVybiAnY29udGFjdCBhdCBmdXJpZSBwb2ludCBiZSc7Cgl9CgoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgewoJCXJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7Cgl9CgoJZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7Cgl9CgoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7CgkJcmV0dXJuICIxLjExLjAiOwoJfQoKCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgewoJCXJldHVybiBmYWxzZTsKCX0KCglmdW5jdGlvbiBIYXNBZG1pbigpIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7CgkJcmV0dXJuICdleHRlbnNpb25zJzsKCX0KCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7CgkJcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZV9Pcm0nKTsKCX0KCglmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7Cgl9CgoJZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkgewoJfQoKCWZ1bmN0aW9uIEFsbG93U21hcnR5Q2FjaGluZygpIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsKCSAgcmV0dXJuIGZhbHNlOwoJfQoJCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwoJfQoKCWZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwoJfQoKCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7Cgl9ICAKCQoJZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkbXNnKSB7CgkJZWNobyAiPGgzPiIuJG1zZy4iPC9oMz4iOwoJfSAKCQkgCglwcml2YXRlIGZ1bmN0aW9uIEdldE15TW9kdWxlUGF0aCgpIHsKCQlyZXR1cm4gcGFyZW50OjpHZXRNb2R1bGVQYXRoKCk7CQkKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2NhbigpewoJCQkJCgkJLy9XZSdyZSBsaXN0aW5nIHRoZSBjbGFzcyBkZWNsYXJlZCBpbnRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGNoaWxkIG1vZHVsZQoJCSRkaXIgPSBjbXNfam9pbl9wYXRoKHBhcmVudDo6R2V0TW9kdWxlUGF0aCgpLCdsaWInKTsKCQkKCQkkbGlzdGVbJ2VudGl0aWVzJ10gPSBhcnJheSgpOwoJCSRsaXN0ZVsnYXNzb2NpYXRlJ10gPSBhcnJheSgpOwoJCQoJCSRvYmplY3RzID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXIpKTsKCQlmb3JlYWNoKCRvYmplY3RzIGFzICRuYW1lID0+ICRvYmplY3QpewoJCQlpZihzdHJpcG9zKCRuYW1lLCAnY2xhc3MuZW50aXR5LicpICE9PSBGQUxTRSl7CQkJCgkJCQkkY2xhc3NuYW1lID0gc3Vic3RyKCRvYmplY3QtPmdldEZpbGVOYW1lKCkgLCAxMyAsc3RybGVuKCRvYmplY3QtPmdldEZpbGVOYW1lKCkpIC0gNCAtIDEzKTsKCQkJCSRsaXN0ZVsnZW50aXRpZXMnXVtdID0gYXJyYXkoJ2ZpbGVuYW1lJz0+JG5hbWUsICdiYXNlbmFtZSc9PiRvYmplY3QtPmdldEZpbGVOYW1lKCksICdjbGFzc25hbWUnPT4kY2xhc3NuYW1lKTsKCQkJfSBlbHNlaWYoc3RyaXBvcygkbmFtZSwgJ2NsYXNzLmFzc29jLicpICE9PSBGQUxTRSkgewoJCQkJJGNsYXNzbmFtZSA9IHN1YnN0cigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpICwgMTIgLHN0cmxlbigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpKSAtIDQgLSAxMik7CgkJCQkkbGlzdGVbJ2Fzc29jaWF0ZSddW10gPSBhcnJheSgnZmlsZW5hbWUnPT4kbmFtZSwgJ2Jhc2VuYW1lJz0+JG9iamVjdC0+Z2V0RmlsZU5hbWUoKSwgJ2NsYXNzbmFtZSc9PiRjbGFzc25hbWUpOwoJCQl9IGVsc2UgewoJCQl9CgkJfQoJCQoJCWZvcmVhY2goJGxpc3RlWydlbnRpdGllcyddIGFzICRlbGVtZW50KSB7CgkJCSRjbGFzc05hbWUgPSAkZWxlbWVudFsnY2xhc3NuYW1lJ107CgkJCSRmaWxlbmFtZSA9ICRlbGVtZW50WydmaWxlbmFtZSddOwoJCQlpZighY2xhc3NfZXhpc3RzKCRjbGFzc05hbWUpKXsKCQkJT3JtVHJhY2U6OmRlYnVnKCJpbXBvcnRpbmcgRW50aXR5ICIuJGNsYXNzTmFtZS4iIGludG8gdGhlIG1vZHVsZSAiLiR0aGlzLT5nZXROYW1lKCkpOwoJCQlyZXF1aXJlX29uY2UoJGZpbGVuYW1lKTsJCQkKCQkJJGVudGl0eSA9IG5ldyAkY2xhc3NOYW1lKCk7CgkJfQoJCX0KCQlmb3JlYWNoKCRsaXN0ZVsnYXNzb2NpYXRlJ10gYXMgJGVsZW1lbnQpIHsKCQkJJGNsYXNzTmFtZSA9ICRlbGVtZW50WydjbGFzc25hbWUnXTsKCQkJJGZpbGVuYW1lID0gJGVsZW1lbnRbJ2ZpbGVuYW1lJ107CgkJCWlmKCFjbGFzc19leGlzdHMoJGNsYXNzTmFtZSkpewoJCQlPcm1UcmFjZTo6ZGVidWcoImltcG9ydGluZyBBc3NvY2lhdGUgRW50aXR5ICIuJGNsYXNzTmFtZS4iIGludG8gdGhlIG1vZHVsZSAiLiR0aGlzLT5nZXROYW1lKCkpOwoJCQlyZXF1aXJlX29uY2UoJGZpbGVuYW1lKTsKCQkJJGVudGl0eSA9IG5ldyAkY2xhc3NOYW1lKCk7CgkJfQoJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gYXV0b2xvYWRfZnJhbWV3b3JrKCRjbGFzc25hbWUpewoJCSRPcm0gPSBuZXcgT3JtKCk7CgkJJHBhdGggPSAkT3JtLT5HZXRNeU1vZHVsZVBhdGgoKTsKCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJsaWIiLCJjbGFzcy4iLiRjbGFzc25hbWUuIi5waHAiKTsKCQkKCQlpZihmaWxlX2V4aXN0cygkZm4pKXsKCQkJcmVxdWlyZV9vbmNlKCRmbik7CgkJCXJldHVybjsKCQl9IAoJfQoJCgkvKioKCSAqIFNob3J0Y3V0IHRvIGNhbGwgYWxsIHRoZSBpbnN0YW5jZXMgZm9yIGEgc2luZ2xlIG1vZHVsZQoJICoKCSAqIEByZXR1cm4gTGlzdDxPcm1FbnRpdHk+IHRoZSBlbnRpdGllcyBmb3IgdGhlIGN1cnJlbnQgcGFyZW50J3MgbmFtZXNwYWNlCgkgKiovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsSW5zdGFuY2VzKCl7CgkJcmV0dXJuIE15QXV0b2xvYWQ6OmdldEFsbEluc3RhbmNlcyhwYXJlbnQ6OkdldE5hbWUoKSk7Cgl9CgkvKgoJcHVibGljIGZ1bmN0aW9uIGF1dG9sb2FkX2NsYXNzZXNfYWRkb24oJGNsYXNzbmFtZSl7CgkJT3JtVHJhY2U6OmRlYnVnKCImbmJzcDsmbmJzcDsmbmJzcDskY2xhc3NuYW1lIik7CgkJCgkJJHBhdGggPSAkdGhpcy0+R2V0TXlNb2R1bGVQYXRoKCk7CgkJCgkJJGZuID0gbnVsbDsKCSAgIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkhUTUxfRklFTEQiKSAhPT0gRkFMU0UpCgkgICB7CgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuYWRkLmZpZWxkaHRtbC5waHAiKTsKCSAgIH0gZWxzZSBpZihzdHJpcG9zKCRjbGFzc25hbWUsICJTRUFSQ0hfRklFTEQiKSAhPT0gRkFMU0UpCgkgICB7CgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuYWRkLnNlYXJjaGZpZWxkLnBocCIpOwoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJRUxEXyIpICE9PSBGQUxTRSkKCSAgIHsKCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuZmllbGRzc3lzdGVtLnBocCIpOwoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJTFRSRV8iKSAhPT0gRkFMU0UpCgkgICB7CgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuYWRkLmZpbHRyZS5waHAiKTsKCSAgIH0KCSAgIAoJICAgaWYoJGZuICE9IG51bGwpCgkgICB7CgkJCU9ybVRyYWNlOjpkZWJ1ZyggImltcG9ydCBkJ3VuIGFkZG9uIGR1IHByb2pldCAiLiR0aGlzLT5nZXROYW1lKCkuIjogJGZuIik7CgkgICAKCQkJaWYoZmlsZV9leGlzdHMoJGZuKSl7CgkJCQlyZXF1aXJlX29uY2UoJGZuKTsKCQkJfQoJCX0KCX0qLwoJLyoKCWZ1bmN0aW9uIFNlYXJjaFJlaW5kZXgoJiRtb2R1bGUgPSBudWxsKSB7CgkJLy9PbiDDqXZpdGUgZGUgcydhdXRvLWluZGV4ZXIuCgkJaWYoJHRoaXMtPmdldE5hbWUoKSA9PSAnTW1tZnMnKQoJCQlyZXR1cm47CQkKCQkJCgkJLy8gT3JtSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kdWxlKTsKCQlPcm1JbmRleGluZzo6U2VhcmNoUmVpbmRleCgkdGhpcy0+Z2V0TmFtZSgpKTsKCX0qLwoKCS8qKgoJICogQXBwZWzDqWUgcGFyIFNlYXJjaCBwb3VyIGFmZmljaGVyIHVuIHLDqXN1bHRhdAoJICovLyoKCWZ1bmN0aW9uIFNlYXJjaFJlc3VsdCgkcmV0dXJuaWQsICRlbnRpdHlJZCwgJGF0dHIgPSAnJykgewkKCQkvL09uIG5lIHJldG91cm5lIHJpZW4gZGUgTW1tZnMgZGUgdG91dGUgbWFuacOocmUKCQlpZigkdGhpcy0+Z2V0TmFtZSgpID09ICdNbW1mcycpCgkJCXJldHVybjsJCgkJCgkJcmV0dXJuIE9ybUluZGV4aW5nOjpTZWFyY2hSZXN1bHQoJHRoaXMsICRpZCwgJHJldHVybmlkLCAkZW50aXR5SWQsICRhdHRyKTsKCX0qLwoKfSAKPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoJbGFiZWwuaGVscHsKCQkKCX0KCQoJZGl2LmxlZnR7CgkgICAgZmxvYXQ6IGxlZnQ7CgkJdGV4dC1hbGlnbjogY2VudGVyOwoJCXdpZHRoOiA1MHB4OwoJfQoJCglkaXYucmlnaHR7CgkJYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjQ0NDQ0NDOwoJCWZsb2F0OiBsZWZ0OwoJCXBhZGRpbmctbGVmdDogNXB4OwoJfQo8L3N0eWxlPgoKCnskZm9ybXN0YXJ0fQo8ZGl2IGNsYXNzPSdsaW5lJz4KCTxoMz5TZWxlY3QgdGhlIHR5cGUgT2YgQ2FjaGU8L2gzPgoJPGRpdiBjbGFzcz0nbGVmdCc+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUlFVWxFUVZSWWhiMlhhM0NVMVJuSEgrdHRwcTBqVmt4bjJpOGRlOU5xbGFtdHREaUNlRUhyV0dzZDIrazQ2clJUblhhY3FneGFvTFVpbFpzaG1rQ1dCQklnMlNRa0lSQUMwdHdESk5uTmJuYXp0K3o5K3U0bXU3bVFHN0RaRUhMLzlVTVdocUFrZ2pOOVp2NmZ6anZuK2Ivbm5OL3puQ015TjI1SXk4bGJtcm0vZUV1V3VzeVJwVDRZelM0OHhKZFJsdnBnTkV0ZDVzamNYN3dsTFNkdnFZamNJTmNRTjZyeVNsS3ppdzVSVkZGRFphTUJ2ZDFQbTFzaDBoY25mUHJjdklyMHhXbHpLK2p0ZmlvYkRSUlYxSkJkZUFoVlhrbXFpTnk0VVBLYk12T0tqeGNjcWNMa0R1UHQ3TU1kNmNVVjdzR3BkT05VdW5HRXV1YlZ4ZTljNFI3Y2tWNjhuWDIwQjZJVUhLa2lNNi80dUlqY05KK0IyN0lMeTdCNE9qQjdPakM1dzdTNWxLOGtrenVNMlJQQjR1a2d1N0FNRWJsdFBnTjNxZkpMVUxvSDBaamRhTXh1dEJZUFdxdVhsbXVVMXVwRmEvRmNta2ZwSGtTVlg0S0kzRFdmZ1JSVlhnbm5weUFZNjZmSjZLUk9hNkZlWjZWQlo2VkJiK1BFQW1yUTIyalFXYW5YV2FuVFdtZ3lPZ25HK2prL0JUa0hEaU1pS2ZNYnlDK2gwV0JqY0dTTWtRa1lHQjRqRU8zREdZaWh0M25SbUZ6elNtL3o0Z3pFQ0VUN0dCaWVuZVAwdVJFYURiYUxLN0NBQVhVcDFhZGFxV3pVb3pFNWNBYWpSUHZQMFhzbVFXSmltdUh4YVliSHBvbVBUYzNSOE5qc1dHSjhtdDR6Q2FMOVozR0dvbWpOVHFvYlc2bHBOS0JTbHk1c1lGZCtDYlZOQm1vMVJ1cTFaazdxclRRYUhHaE5idlJXUDIyT0VGWlBCdzUvREk5eUdtKzRIMmVnRzV1M0U3TkxvZFVXb01Yc29jbm81RlNyallZV0MzV2FOdXFhMjFEbGZ3a0RxcnhpNnBxTjFHbmJPS0d6MEdob24xMWFxeGVqUFlqRkhhYmRGOFVWN01ZYjdzTVg2Y2NkNnNIdWoySDFSR2h6aE5EYmZHak1IaHFOVGs2MnRsT250VkNyTWJNanIyeEJBNHMzcHUyb1BWQlJUWDJMaVpONkswMUcrd0lHQnVZYWNJYlIyeFdhYlJGT21rUFVHd05VNnp3VVY3V3labXYyVVJGWlBKK0JSUitsN2F3cUtxK2s4RWdWdGMxR05DWW5MUllQaG5ZL0pxZUN6UlBCN28vaER2WGdpL1RqN3hqRW8vVGlDSFJoODNYUzV1ckVwSzFEVVMwanFGcE9VTFdTMEs0blVMS2VSTWwrbXVEdVp3bmtQRTl3MzRzRTgxNUNSRzZaWXlBanQ1Q3VnVGdsUjJ2WXVhK1lQWVdIS1R2ZXdHZjFPaG9OZGpRbU56WnZKOTd3YVFLZGd3U2paL0JGK25DRmV0RGJBcHd5K1RBZXkyS281VU9ZOURMUms4bEViM1pTS2lhSFNoa2ZQSVl2NTNrT3JsdStYcTRvVEl2VGM5Vm9UVTc2NDZQRStzNWljUWVvMTdSeCtMOG5LRGhjU2NHaFNvcktxeW1wcUtYa1dEMEhqelZRWEZGSFVYa05CWWRyVUI4NWlTYjNUVVlDK3hqdnpTZmV0cEs0NlNuaXBpZUpXNTVoWmtJaFd2RUN4b3huUWlKeWo0aDhmYzRoek1oVlU5TmtvTHFwbFJhTEM0L1NSZmZRTVAzeFVjNVB3Y2prckJJVE15UW1wcE9hWVdSaWhwRXBHQUdDQmE4d2VmWVVJNzUzaU51ZUkyNzdMWEhyYzR6MTdDZmhmeC8zcm1kWTg3dDdYMHVlaDYvTk1aQ2VxNmEyMlVpdHhraERpemw1RUIyMG1OMjAydnlZbkNHc25rNGMvaTQ4U3Q5bEdFWXh1enZSdWZyd3EzNE9vMmFHMjMvRHNQMGxoaDIvSitGNmhZbWhNanJMZjAzRDVoV25ST1J1RWJuMWN4aG01S2hudWIwT0RDMitMa3phRTRTTG5tZHlxSUtFOHc4a1hDK1RjTDNNaGNnR0V1Ni80bEt0NHR0MzNyeFVSRzZYTDdnbkxINS9TMXJ0Z2FNMTFPdXVGY011TFA1ZXJGVjdPRjMvT3VQZGFZeTRYMlhFOHlmT2UvL0NXTWRhbE5MbjJQL1dRenRGNUx0eWxiYTg2TjliUDYwNlVGNTFWUXl0VjhIUUh1akdFdWpEV3JxV3MrYTFqSFg4aS9QKzF6bnZmNFBSNEJ0RWo3K0FiZnVqdEtldndKNnhBa2ZHWXpneUg4ZVY5UlR1M1U5ZnduRlJXdFpldWdhSEtUbGFlMVVNbmNIdXoyT29uTWJrRzhDKzUwVkdReHU1b0t4bU5QVDNwTjVrY2lDZnFhRjhwcytvbVQ2cmhuZ2gwK2VLQ0JZOWkyNzc4cFBKTFpIRjI3TnkwWnJueDdEd1NneVAxRkZVWGtmK1VRM09qKzludXY5REptUHZNaEY5ai9IT05ZeUYzK2FDOGhZWGxMY1pDNy9OZU1kcXhpS3I4ZTFmUmRXR2g1dEY1TUdMOVNBbE5TdjMrakNjbkVYUXNmVnVsUHhsaFBJZkpaRC9HTjY5SzVnZXJtYXNheHNYT3Y3QmVHdzk0OUYxZVBjOVJlVUhEMnRFNUdjeWUwbTVTVVFrWmZ1dTNPdkQwQmZEN0lsaWNQZWljL2JTYU85RFUxbEVxT2h4bU9saHJITWRFOTBiR1BHOWgydjNTcmE5ZXM5V0VWbVNyQVdYTHFzcHFhcWM2OFp3dGh1R2FiVXJOTGZIYU52OUVrUEdOY3ljTzhoVTMzOFlEYXlqZmNjeVBuN3RSMXRFNUY0UnVlTktHbEpTZCtWUTAyeTQxQTBYTm5CRk4zUW90Tm9WdEFZejFrMTNNeE92WUdid0V5NkUxbVBPZUpUVVY3Ky9XVVIrbk56ek9WVlFST1N1OXpkdGE5NjVWMDFOczRIbU5nY2FreE9kMWZ1RkdQbzdCZ2gwWHRZTnZSMllYQkZhWFRFTTVadng3UGtWakpVeUh2a0FhL292MmZqaCt1YmtuMzloY2trT1BQRG1tdlVIdCszY3pjNjlCUlFjK296S0V6cnF0U2JhZlRGY29XNjhrWDVDMFNFaVBjTjA5Q1pRdXM3ZzZ4akFyZlRTSHVpbFN1L0htdkVJUThiVlRQU2s0VWhmd2o5WC83a2tlZHJ2dUZweVNlN0huU0p5bjRnc1gvSGtxcmYrOXM2N3BSOXMyeDdaK0hGNi81YU1YV3hPVjdFNVBaTk42WmxzK3ZReXBhdjRLR00zRzNia2tmSEp4dkgyN1Q4aFd2MEsrclJmOUQ5eDN6Zi9LQ0wzaThpM3JsWUJMNDhiUmVRYk1udDErcDZJL0ZSRWxvckljaEZaS1NKUExLQlZGV3QvVUcvN1pBbTZyUThNaXNnanlYbHVreS94TkxzOGJoQ1JtNU5tN3BCWlhGSVcwcTIzeWcrdG55N0JrUHBnUWtTV2ljaDNaTGJNWHRNRDlhdkU3VEs3YWc4bGs5LzgvMHA4TVc0UmtVVkpYVlB5L3dFc2JoQklmS1l2OWdBQUFBQkpSVTVFcmtKZ2dnPT0nIC8+PC9kaXY+Cgk8ZGl2IGNsYXNzPSdyaWdodCc+CgkJeyRzZWxlY3RDYWNoZX17JGRlbGV0ZUNhY2hlfTxsYWJlbCBmb3I9J3skaWR9Y2FjaGUnIGNsYXNzPSdoZWxwJyAvPkxlYXJuIG1vcmUgYWJvdXQgdGhlc2Ugb3B0aW9ucyBvbiA8YSBocmVmPScjJyB0YXJnZXQ9J19ibGFuayc+dGhlIHdpa2k8L2E+LjwvbGFiZWw+Cgk8YnIvPgoJeyRzdWJtaXR9Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9J2NsZWFyJz48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsaW5lJz4KCTxoMz5TZWxlY3QgdGhlIGxldmVsIG9mIG1lc3NhZ2UgaW50byB0aGUgY29uc29sZTwvaDM+Cgk8ZGl2IGNsYXNzPSdsZWZ0Jz48aW1nIHNyYz0nZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBSDRFbEVRVlJZaGJXWHlXOGI1eG5HQmVUVVN3OXREMTNjQmdpQ0pJS3ozSk1BQVpJQVFSRGtIOGk1NktGb0RrRUR1eGFDSm9jQUNaRFdzSkVpaG8zQXNtVFpwaGFLdEMxYm9wWllJalZhS0hIZlJFbWtSSTdJSVlmYmtKd1pjb2JMcndkYmdoemJNVk9nSC9BY3Z0UHorNzduZmQ5dnBxL3Y0ZlhNbTIrKythZDMzMzMzdWYrSFhuLzk5V2Y3K3ZxZTZYdlM2dS92LzkyRkN4ZEdQUjVQNUlHaUQzUzA5M3E5VVovUEYvSDVmSkZBSUJBTkJvUFJZREFZQ1lWQ2tWQW9GQTJGUXRGd09Cd0poOE9QN0M5ZHVqVCsybXV2L2VHSkFLKysrdXFKR3pkdUNJbEVndU5LSnBQczdlMlJTcVZJcDlPSW9rZ21reUdielNKSkVybGNqbncrVHo2ZlI1WmxDb1hDWTJXMVdsZjcrL3VmZlRyQTdpNkozVjBTaVFSN2UzdnM3KzgvMXZqUThOQzBXQ3hTS3BVb2xVcVV5K1VmcTlzN1FDSkIwbktkL2VzanBDNS9qeGlKSUg1N2pzeklNSmx2dmtZVTA5eWV1azBvRk1UcjlUQTdOMHNrRWlFUThPUDFlaEJGRVkvWGc5Zm5aVmxZcGxxdFVxMVd1NU9UazcwQkpKTko5dTlNa2I0emhUZ3lSQ1lZSkhOOUJHbnBIcmtiSXlRU3U4ek56K0YwTGhHTlJuRTZsL0Q3L1FnckFqNi9qMlF5eWNhR20zWDNPdXZyYXlpS2dxcXEyTzMycHdOWUxCYmg4TW9QRGc0ZXV1NUNvWEIwdlpWS2hXcTFTcTFXbzE2dm82b3FtcWFoYVJxNnJxUHJPbzFHNHlIZHZIbno2UUJqWTJQQ2NmTmNMb2NzeTBmNVZpb1ZGRVY1eFBqUXNObHNZaGpHNDlUdEdlRGc0SURNL0N6Uy9DeTUyN2NvaWlLeWRZeml2SVBTeEJpVlNvVzE5VlZ5K1J5cGRJcHdPRVJlenBQTDU4aEtXZXIxK3YzaVRlM2o5WG1vMSt1WXB0a2J3UGo0dUpETlpwSHVUcEc3ZlJONVlveHlNa25oMmpDVnBVVktnOTl6a0RuZzd2UWRuQzRuT3pzN0xDN2V3Ky8zNFZwMnN1NWVKNVhheDczaFptMXRGYS9QUTdQWm9OMXVjK3ZXcmQ0QWNya2NzaWhTeW1ZcEozWlJKSW1hbEVXVlpUUlpQc3E2VnF1aEtBcmxjaGxkMTZuWDYraTZqbUVZTkpzTm1zMEd4V0tSVnF0RnA5UHBIVUNXNWFPOHE5VXE5WG9kVGRNZXl0ZzBUVnF0RnExV2kzYTdUYnZkcHRQcC9KUzZQUUZNVEV3SXhXS1JvczlIT1JoQVdWMUJxMWFwclFwbzBTanEyZ3FHWWJDenMzMTA2a0pCUmxWVkdvMEd1cTVqbWdheWZMOXJZckVvalVhRGRydmRPMEM1WEtZNGZZZnlMVHNWbXhWTlRLTU1YNkh1bUVhNStCMkZRb0c1K1ZsVzExYUpSaU00SERNRWdnRmNMaWVDc016Ky9oNmJuazNXM2V1NFhFNFVwWUpwbXIyMW9kVnFGU3FWQ3RWMGl2cUJpTG9kcDFFcTBkamZ3NUJsRERHTnJ1dElra1NoVUtCU3FTQkpFcFZLaFh3K1I2bFVvbHF0SWtsWk1wa01vaWlpcWlxNnJ2Y09jSmk3cnV1UFpINDg2M2E3VGF2VndqUk5ETU00aWtEVE5PcjErcEVlekl4dVQ1UFFack1KdFZvTk5aTkJ6MGswVXZ1WWhrRXpuY0lzRlRIRk5KMU9oMkt4ZUdSNk9CRVB1MEpSRkNSSlFwSWtSRkZFbHVYZUh5T2J6U2FvcWtwMXprRnQrZzcxbVR1WXBSSzFhOE5vTTNlcGZ2Y3RpcUl3NDVnaEVQQVRpMFdabTU4bEVQQ3pzcnFDeStVa3ZoMW5XWERoZEMweFBqRkdQQjRubjgvMzloemJiRFpCMHpTMFdCUTlIa056TFdGSVdSb2I2eGpKQkEydmg0cFNJYllWWTJzclJpS3hpOGZyWVhzN2p0Zm5KUndPczcyOWpjZXppZHU5enJLd3pOYldGcUlvTWpZMjFodkE0VEI1WE82SG1UZWJUVlJWcFZxdFVpNlhLUlFLU0pMRXdjRUJxVlNLWkRMSnpzNE84WGljZUR6Tzl2WjIxMkt4OUFiUWFEUXdWQlZUMHpEcjlmc0ZwMm0wR2cyTWFwVm1zNG1pS0VmbStYeWVUQ1pET3AwbWtVZ1FpOFh3ZXIyc3JhMnh0TFNFSUFpc3JxNTJyMTY5Mmh0QXM5bEVkUzZpM1Z0QWRVelRLcGRReDBkUkhYZFJoaTZqS0FyM0ZuOGdGb3ZpOFhxWW1abG1jM01UcDlPSnd6SER3c0lDbzZNV2hvZUgrUGZaZnpFK1BvN2RidWZTcFV0UEI3RGI3WUpoR0dnYmJuVDNPdXJNWFZyNVBOcjBGTHJmUzlWdUpaUE5NTDl3LzRNa0dBd3dPK3RnY1dtUlNkc2tZK09qWEw5K2pmUG56L0hWMTEveCtSZi81UHo1OHd3TkRYVysvUExMdVpkZmZ2bVBQUUdZaGtITE5Ha2JCcDFXaTVaaFlEYWJORlNWZXIxT3VWeEdsbVhFQTVGRUlrRTRITWJsY21HMzI3RllMSXlQajJPejJaaWZuKzh1TEN4MEwxeTRFSHJycmJmK2N1TEVpVi8wQlBDNDRqTU1BMTNYcWRWcVI5bUxvc2pPemc0Ykd4dE1UMDh6T0RqSTJ0b2FwbWxTTHBlN1BwK3ZjL255NWRBYmI3eng1K2VmZi82WFR6US9EbUNhSm8yZGJacTdPelQ5WHRxNmp1NWVSNDlHcUFvdUZFWEI3L2VSVHFlSlJDTUlLd0lMQ3d0WUxCYk9uVHZINXVZbXBWS0pRQ0RRdlhyMTZ0WTc3N3p6MTVNblQvN3FKODEvREtEK3NJRG1tRWFidVV1clhLSTZNa1J0MWtIcFArZEpwMU5NVGs0dzQ1aGhaVVhnMnZVUlJxNk44TTIvdnVHTEx6N0hIL0FUQ0FTNm82T2plMisvL2ZiZlhucnBwVjgvMWZ6SEFJWXNZeFlMR0lsZFd1VXl6ZFErRFNsTExiRkxvU0NUU093UzI0b1JDQVpZV2xwa2FtcUtpeGN2Y3ZiczJhN2I3ZTVPVEV5a1B2amdnOU05bmZ4eEFNZHJvTjF1UHpSOEZFV2hVQ2lReVdSSUpwTUVBZ0htNXVZWUhoN3VYcmx5cFRzeE1iSDMvdnZ2Ly8yRkYxNzRUYy9tVHdEb2RqcWQ3ckVpN0dxYTFqMVdoTjEwT3QzZDJ0cENFQVRzZG50M2NIQnc3OE1QUC96SHlaTW5mL3V6elB2Njd2K2NmdlRSUjk4TkRBeFlQL3ZzczBjME1EQmdIUmdZc0o0NWM4WjY1c3daNituVHA2Mm5UcDJ5ZnZycHA5WlBQdm5FK3ZISEgxdmZlKys5VXkrKytPTHZmN2I1Zy9WTWYzLy9zNis4OHNwei82dCtWdVo5ZlgzL0JYUHlwUnZTRFk0NkFBQUFBRWxGVGtTdVFtQ0MnIC8+PC9kaXY+Cgk8ZGl2IGNsYXNzPSdyaWdodCc+CgkJeyRzZWxlY3RMb2d9eyRkZWxldGVMb2d9PGxhYmVsIGZvcj0neyRpZH1sZXZlbCcgY2xhc3M9J2hlbHAnIC8+TGVhcm4gbW9yZSBhYm91dCB0aGVzZSBvcHRpb25zIG9uIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcy93aWtpL2xvZy1tYW5hZ2VtZW50JyB0YXJnZXQ9J19ibGFuayc+dGhlIHdpa2k8L2E+LjwvbGFiZWw+Cgk8YnIvPgoJeyRzdWJtaXR9Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9J2NsZWFyJz48L2Rpdj4KPC9kaXY+Cgo8L2Zvcm0+Cgo8aHIvPnsqCjx1bD48bGk+PGI+REVCVUcgOjwvYj4gRXZlcnl0aGluZyB3aWxsIGJlIHdyb3RlLiBFVkVSWVRISU5HICE8L2xpPgo8bGk+PGI+SU5GTyA6PC9iPiB0aGUgZGVmYXVsdCB2YWx1ZS4gR3JlYXQgZm9yIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC48L2xpPgo8bGk+PGI+V0FSTiA6PC9iPiB3aWxsIGJlIGRpc3BsYXllZCA6IHRoZSBlcnJvcnMgYW5kIHRoZSB3YXJuaW5ncy48L2xpPgo8bGk+PGI+RVJST1IgOjwvYj4gIHdpbGwgYmUgZGlzcGxheWVkIDogdGhlIGVycm9ycy48L2xpPjwvdWw+Cjx1bD48bGk+PGI+Tk9ORSA6PC9iPiB3ZSB3b24ndCB1c2UgY2FjaGluZyBzeXN0ZW0gOiBHcmVhdCBkdXJpbmcgeW91ciBkZXZlbG9wbWVudDwvbGk+CjxsaT48Yj5DQUxMIDo8L2I+IHRoZSBmcmFtZXdvcmsgd2lsbCB0cnkgdG8gcmVtZW1iZXIgdGhlIGxhc3QgcmVzZWFyY2ggYnV0IG9ubHkgZm9yIHRoZSBjdXJyZW50IGNhbGwgb2YgUEhQLjwvbGk+PC91bD4qfQoKPHByZSBpZD0nb3V0cHV0Jz48L3ByZT4Ke2xpdGVyYWx9CjxzY3JpcHQ+CgpmdW5jdGlvbiBkb1VwZGF0ZSgpIHsKJC5hamF4KHt0eXBlOiAiR0VUIiwgdXJsIDogInsvbGl0ZXJhbH17JHVybExvZ317bGl0ZXJhbH0iLCBjYWNoZTpmYWxzZSwKICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiA0KSB7CiAgICAgICAgICAgICAgICAvLyBEYXRhIGFyZSBhc3N1bWVkIHRvIGJlIGluIEhUTUwgZm9ybWF0CiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gc29tZXRoaW5nIGxpa2UgPHAvPiBpbiBjYXNlIG9mIG5vIHVwZGF0ZXMKICAgICAgICAgICAgICAgICQoIiNvdXRwdXQiKS50ZXh0KGRhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0VGltZW91dCgiZG9VcGRhdGUoKSIsIDIwMDApOwogICAgICAgICAgIH19KTsKICAKfQoKc2V0VGltZW91dCgiZG9VcGRhdGUoKSIsIDIwMDApOwo8L3NjcmlwdD57L2xpdGVyYWx9]]></data>
	</file>
</module>
