<?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>PageBlocks</name>
	<version>0.1.5</version>
  <mincmsversion>1.0-beta4</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkFsbG93cyB1bmxpbWl0ZWQgYmxvY2tzIG9mIENvbnRlbnQgdG8gYmUgYXR0YWNoZWQgdG8gcGFnZXMgYW5kIGVkaXRlZCBpbmRpdmlkdWFsbHk8L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5QdXQgdGhpcyBpcyBpbiB5b3VyIHBhZ2Ugb3IgdGVtcGxhdGU6PC9wPgo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0ncGFnZWJsb2Nrcyd9PC9wcmU+CjxoMz5FeGFtcGxlIG9mIHVzZTogSm9iIExpc3RpbmdzPC9oMz4KPG9sPgo8bGk+Q3JlYXRlIGEgIkVtcGxveW1lbnQgT3Bwb3J0dW5pdGllcyIgcGFnZS48L2xpPgo8bGk+R28gdG8gQ29udGVudCDCuyBQYWdlIEJsb2NrczwvbGk+CjxsaT5DbGljayBvbiB0aGUgdGVtcGxhdGVzIHRhYi48L2xpPgo8bGk+Q2xpY2sgIkFkZCBUZW1wbGF0ZSI8L2xpPgo8bGk+UGFzdGUgaW4gYSB0ZW1wbGF0ZS4gTWF5YmUgc29tZXRoaW5nIGxpa2UgdGhpczoKQ29kZToKPHByZT4KSm9iIFRpdGxlOiB7JHRpdGxlfQpXb3JrIEV4cGVyaWVuY2UgcmVxdWlyZWQ6IHtjb250ZW50IGJsb2NrPSJXb3JrRXhwZXJpZW5jZSJ9CkRldGFpbGVkIERlc2NyaXB0aW9uOiB7Y29udGVudCBibG9jaz0iRGV0YWlsZWREZXNjcmlwdGlvbiJ9ClBlcnNvbiB0byBDb250YWN0OiB7Y29udGVudCBibG9jaz0iQ29udGFjdFBlcnNvbiIgb25lbGluZT0idHJ1ZSJ9ClRoaXMgam9iIHBvc3Rpbmcgd2FzIGxhc3QgbW9kaWZpZWQ6IHskbW9kaWZpZWR9CmV0Yy4uLgo8L3ByZT48cD48Yj5OT1RFOiBUaGUgbmFtZSBvZiB0aGUgYmxvY2sgbXVzdCBOT1QgQ09OVEFJTiBTUEFDRVMgKGl0IGRvZXMgbm90IHNlZW0gdG8gd29yaykhIDspPC9iPjwvcD48L2xpPgo8bGk+R28gYmFjayB0byBDb250ZW50IMK7IFBhZ2UgQmxvY2tzPC9saT4KPGxpPk5leHQgdG8geW91ciAiRW1wbG95bWVudCBPcHBvcnR1bml0aWVzIiBwYWdlIGNsaWNrICJBZGQgQmxvY2siLjwvbGk+CjxsaT5DaG9vc2UgdGhlIHRlbXBsYXRlIHlvdSBhZGRlZCBlYXJsaWVyIGFuZCBhbGwgdGhlIHtjb250ZW50IGJsb2NrPSJibG9jayBuYW1lIn0gd2lsbCBzaG93IHVwIGFzIGlucHV0IGZpZWxkcy48L2xpPgo8bGk+UmVwZWF0IHN0ZXAgOCBmb3IgZWFjaCBqb2IuPC9saT4KPC9vbD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LTIwMDcsIEVsaWphaCBMb2ZncmVuIDxhIGhyZWY9Im1haWx0bzplbGlqYWhsb2ZncmVuQGVsaWphaGxvZmdyZW4uY29tIj4mbHQ7ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcGFnZV9pZD0iIiAtIDxiPk92ZXItcmlkZXMgdGhlIHBhZ2UgaWQgdXNlZCB0byBkaXNwbGF5IHRoZSBibG9ja3MuPC9iPiBVc2luZyB0aGlzIHBhcmFtZXRlciwgeW91IGNhbiBtYWtlIGJsb2NrcyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0aGUgcGFnZSB0byBkaXNwbGF5IG9uIGFueSBvdGhlciBwYWdlLjxwPjxiPkV4YW1wbGUgKGlmIHlvdXIgcGFnZSBpZCB3YXMgMTUpOjwvYj48L3A+PHByZT57Y21zX21vZHVsZSBtb2R1bGU9J3BhZ2VibG9ja3MnIHBhZ2VfaWQ9JzE1J308L3ByZT48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IG51bWJlcj0iMTAiIC0gCjxoND5TaG93IGEgY2VydGFpbiBudW1iZXIgb2YgcmVjZW50bHkgdXBkYXRlZCBibG9ja3M8L2g0PgoJIDxwPllvdSBjYW4gc2hvdyBhIGxpc3Qgb2YgYSBjZXJ0YWluIG51bWJlciBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPiA8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0ncGFnZWJsb2NrcycgYWN0aW9uPSdyZWNlbnRseV91cGRhdGVkJyBudW1iZXI9JzE1J30KPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBhY3Rpb249ImRlZmF1bHQiIC0gCjxoND5TaG93IGxpc3Qgb2YgcmVjZW50bHkgdXBkYXRlZCBibG9ja3M8L2g0PgoJIDxwPllvdSBjYW4gc2hvdyBhIGxpc3Qgb2YgdXBkYXRlZCBibG9ja3MgYnkgY2FsbGluZyBQYWdlQmxvY2tzIGxpa2UgdGhpczo8L3ByZT4KPHByZT57Y21zX21vZHVsZSBtb2R1bGU9J3BhZ2VibG9ja3MnIGFjdGlvbj0ncmVjZW50bHlfdXBkYXRlZCd9PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
	<about>PGJyIC8+QXV0aG9yOiBFbGlqYWggTG9mZ3JlbiAmbHQ7ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAwLjEuNTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KPGxpPlZlcnNpb24gMC4xLCBKdWx5IDIwMDYgKGVsaWphaGxvZmdyZW4pLiAKICA8dWw+CiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+CiAgPC91bD4KPC9saT48YnIgLz4=</about>
	<description>Allows unlimited blocks of Content to be attached to pages and edited individually.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addblockcontent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAojCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiNUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiNHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKI2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiNGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiMKIyRJZDogYWN0aW9uLmFkZGJsb2NrY29udGVudC5waHAgMTc1IDIwMDctMDMtMTMgMTc6MDY6MjZaIGVsaWphaGxvZmdyZW4gJAppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRDTVNfQURNSU5fUEFHRT0xOwoKcmVxdWlyZV9vbmNlKCIuLi9pbmNsdWRlLnBocCIpOwoKY2hlY2tfbG9naW4oKTsKJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKJHRoZW1lT2JqZWN0ID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddOwpyZXF1aXJlX29uY2UoZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSkgLiAnLy4uL2xpYi94YWpheC94YWpheC5pbmMucGhwJyk7CiR4YWpheCA9IG5ldyB4YWpheCgpOwokeGFqYXgtPnJlZ2lzdGVyRnVuY3Rpb24oJ2FqYXhwcmV2aWV3Jyk7CgokeGFqYXgtPnByb2Nlc3NSZXF1ZXN0cygpOwokaGVhZHRleHQgPSAkeGFqYXgtPmdldEphdmFzY3JpcHQoJy4uL2xpYi94YWpheCcpLiJcbiI7CgppZiAoaXNzZXQoJF9QT1NUWyJjYW5jZWwiXSkpCnsKJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnYmxvY2tzJyk7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7Cgp9CgokdG1wZm5hbWUgPSAnJzsKCiRlcnJvciA9IEZBTFNFOwoKJGZpcnN0dGltZSA9ICIxIjsgI0ZsYWcgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCB0cnlpbmcgdG8gZmlsbCBwYXJhbXMgb24gdGhlIGZpcnN0IGRpc3BsYXkKaWYgKGlzc2V0KCRfUE9TVFsiZmlyc3R0aW1lIl0pKSAkZmlyc3R0aW1lID0gJF9QT1NUWyJmaXJzdHRpbWUiXTsKCiRwcmV2aWV3ID0gZmFsc2U7CmlmIChpc3NldCgkX1BPU1RbInByZXZpZXdidXR0b24iXSkpICRwcmV2aWV3ID0gdHJ1ZTsKCiRzdWJtaXQgPSBmYWxzZTsKaWYgKGlzc2V0KCRfUE9TVFsic3VibWl0YnV0dG9uIl0pKSAkc3VibWl0ID0gdHJ1ZTsKCiRhcHBseSA9IGZhbHNlOwppZiAoaXNzZXQoJF9QT1NUWyJhcHBseWJ1dHRvbiJdKSkgJGFwcGx5ID0gdHJ1ZTsKCiRwYXJlbnRfaWQgPSAtMTsKaWYgKGlzc2V0KCRfR0VUWyJwYXJlbnRfaWQiXSkpICRwYXJlbnRfaWQgPSAkX0dFVFsicGFyZW50X2lkIl07CgokY29udGVudG9iaiA9ICcnOwoKZnVuY3Rpb24gYWpheHByZXZpZXcoJHBhcmFtcykKewoJZ2xvYmFsICRnQ21zOwoJJGNvbmZpZyA9JiAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgoJJGNvbnRlbnRvYmogPSAnJzsKCWlmIChpc3NldCgkcGFyYW1zWyJzZXJpYWxpemVkX2NvbnRlbnQiXSkgJiYgJHBhcmFtc1sic2VyaWFsaXplZF9jb250ZW50Il0gIT0gJycpCgl7CgkJJGNvbnRlbnRvYmogPSBVbnNlcmlhbGl6ZU9iamVjdCgkcGFyYW1zWyJzZXJpYWxpemVkX2NvbnRlbnQiXSk7CgkJJGNvbnRlbnRfdHlwZSA9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddOwoJCWlmIChzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGVudG9iaikpICE9IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSkpCgkJewoJCQljb3B5Y29udGVudG9iaigkY29udGVudG9iaiwgJGNvbnRlbnRfdHlwZSwgJHBhcmFtcyk7CgkJfQoJfQoJZWxzZQoJewoJCSRjb250ZW50X3R5cGUgPSAkcGFyYW1zWydjb250ZW50X3R5cGUnXTsKCQkkY29udGVudG9iaiA9IG5ldyAkY29udGVudF90eXBlOwoJfQoJdXBkYXRlY29udGVudG9iaigkY29udGVudG9iaiwgdHJ1ZSwgJHBhcmFtcyk7CgkkdG1wZm5hbWUgPSBjcmVhdGV0bXBmbmFtZSgkY29udGVudG9iaik7CgkkdXJsID0gJGNvbmZpZ1sicm9vdF91cmwiXS4nL3ByZXZpZXcucGhwP3RtcGZpbGU9Jy51cmxlbmNvZGUoYmFzZW5hbWUoJHRtcGZuYW1lKSk7CgkKCSRvYmpSZXNwb25zZSA9IG5ldyB4YWpheFJlc3BvbnNlKCk7Cgkkb2JqUmVzcG9uc2UtPmFkZEFzc2lnbigicHJldmlld2ZyYW1lIiwgInNyYyIsICR1cmwpOwoJJG9ialJlc3BvbnNlLT5hZGRBc3NpZ24oInNlcmlhbGl6ZWRfY29udGVudCIsICJ2YWx1ZSIsIFNlcmlhbGl6ZU9iamVjdCgkY29udGVudG9iaikpOwoJJGNvdW50ID0gMDsKCWZvcmVhY2ggKCRjb250ZW50b2JqLT5UYWJOYW1lcygpIGFzICR0YWJuYW1lKQoJewoJCSRvYmpSZXNwb25zZS0+YWRkU2NyaXB0KCJFbGVtZW50LnJlbW92ZUNsYXNzTmFtZSgnZWRpdGFiIi4kY291bnQuIicsICdhY3RpdmUnKTtFbGVtZW50LnJlbW92ZUNsYXNzTmFtZSgnZWRpdGFiIi4kY291bnQuIl9jJywgJ2FjdGl2ZScpOyQoJ2VkaXRhYiIuJGNvdW50LiJfYycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Iik7CgkJJGNvdW50Kys7Cgl9Cgkkb2JqUmVzcG9uc2UtPmFkZFNjcmlwdCgiRWxlbWVudC5hZGRDbGFzc05hbWUoJ2VkaXR0YWJwcmV2aWV3JywgJ2FjdGl2ZScpO0VsZW1lbnQuYWRkQ2xhc3NOYW1lKCdlZGl0dGFicHJldmlld19jJywgJ2FjdGl2ZScpOyQoJ2VkaXR0YWJwcmV2aWV3X2MnKS5zdHlsZS5kaXNwbGF5ID0gJyc7Iik7CglyZXR1cm4gJG9ialJlc3BvbnNlLT5nZXRYTUwoKTsKfQoKZnVuY3Rpb24gdXBkYXRlY29udGVudG9iaigmJGNvbnRlbnRvYmosICRwcmV2aWV3LCAkcGFyYW1zID0gbnVsbCkKewoJaWYgKCRwYXJhbXMgPT0gbnVsbCkKCQkkcGFyYW1zID0gJF9QT1NUOwoKCSR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CgkkYWRtaW5hY2Nlc3MgPSBjaGVja19vd25lcnNoaXAoJHVzZXJpZCwgJGNvbnRlbnRvYmotPklkKCkpIHx8IGNoZWNrX3Blcm1pc3Npb24oJHVzZXJpZCwgJ01vZGlmeSBBbnkgUGFnZScpOwoJCQoJI0ZpbGwgY29udGVudG9iaiB3aXRoIHBhcmFtZXRlcnMKCSRjb250ZW50b2JqLT5GaWxsUGFyYW1zKCRwYXJhbXMpOwoJaWYgKCRwcmV2aWV3KQoJewoJCSRlcnJvciA9ICRjb250ZW50b2JqLT5WYWxpZGF0ZURhdGEoKTsKCX0KCglpZiAoaXNzZXQoJHBhcmFtc1sib3duZXJpZCJdKSkKCXsKCQkkY29udGVudG9iai0+U2V0T3duZXIoJHBhcmFtc1sib3duZXJpZCJdKTsKCX0KCgkkY29udGVudG9iai0+U2V0TGFzdE1vZGlmaWVkQnkoJHVzZXJpZCk7CgoJI0ZpbGwgQWRkaXRpb25hbCBFZGl0b3JzIChraW5kIG9mIGtsdWRneSkKCWlmIChpc3NldCgkcGFyYW1zWyJhZGRpdGlvbmFsX2VkaXRvcnMiXSkpCgl7CgkJJGFkZHRhcnJheSA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHBhcmFtc1siYWRkaXRpb25hbF9lZGl0b3JzIl0gYXMgJGFkZHRfdXNlcl9pZCkKCQl7CgkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJfQoJCSRjb250ZW50b2JqLT5TZXRBZGRpdGlvbmFsRWRpdG9ycygkYWRkdGFycmF5KTsKCX0KCWVsc2UgaWYgKCRhZG1pbmFjY2VzcykKCXsKCQkkY29udGVudG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoYXJyYXkoKSk7Cgl9Cn0KCmZ1bmN0aW9uIGNvcHljb250ZW50b2JqKCYkY29udGVudG9iaiwgJGNvbnRlbnRfdHlwZSwgJHBhcmFtcyA9IG51bGwpCnsKCWlmICgkcGFyYW1zID09IG51bGwpCgkJJHBhcmFtcyA9ICRfUE9TVDsKCSRjb250ZW50b2JqLT5GaWxsUGFyYW1zKCRwYXJhbXMpOwoJJG5ld2NvbnRlbnR0eXBlID0gc3RydG9sb3dlcigkY29udGVudF90eXBlKTsKCSR0bXBvYmogPSBuZXcgJG5ld2NvbnRlbnR0eXBlOwoJJHRtcG9iai0+U2V0SWQoJGNvbnRlbnRvYmotPklkKCkpOwoJJHRtcG9iai0+U2V0TmFtZSgkY29udGVudG9iai0+TmFtZSgpKTsKCSR0bXBvYmotPlNldE1lbnVUZXh0KCRjb250ZW50b2JqLT5NZW51VGV4dCgpKTsKCSR0bXBvYmotPlNldFRlbXBsYXRlSWQoJGNvbnRlbnRvYmotPlRlbXBsYXRlSWQoKSk7CgkkdG1wb2JqLT5TZXRQYXJlbnRJZCgkY29udGVudG9iai0+UGFyZW50SWQoKSk7CgkkdG1wb2JqLT5TZXRPbGRQYXJlbnRJZCgkY29udGVudG9iai0+T2xkUGFyZW50SWQoKSk7CgkkdG1wb2JqLT5TZXRBbGlhcygkY29udGVudG9iai0+QWxpYXMoKSk7CgkkdG1wb2JqLT5TZXRPd25lcigkY29udGVudG9iai0+T3duZXIoKSk7CgkkdG1wb2JqLT5TZXRBY3RpdmUoJGNvbnRlbnRvYmotPkFjdGl2ZSgpKTsKCSR0bXBvYmotPlNldEl0ZW1PcmRlcigkY29udGVudG9iai0+SXRlbU9yZGVyKCkpOwoJJHRtcG9iai0+U2V0T2xkSXRlbU9yZGVyKCRjb250ZW50b2JqLT5PbGRJdGVtT3JkZXIoKSk7CgkkdG1wb2JqLT5TZXRTaG93SW5NZW51KCRjb250ZW50b2JqLT5TaG93SW5NZW51KCkpOwoJLy9Tb21lIGNvbnRlbnQgdHlwZXMgZGVmYXVsdCB0byBmYWxzZSBmb3IgYSByZWFzb24uLi4gZG9uJ3Qgb3ZlcnJpZGUgaXQKCWlmICghKCEkdG1wb2JqLT5tQ2FjaGFibGUgJiYgJGNvbnRlbnRvYmotPkNhY2hhYmxlKCkpKQoJCSR0bXBvYmotPlNldENhY2hhYmxlKCRjb250ZW50b2JqLT5DYWNoYWJsZSgpKTsKCSR0bXBvYmotPlNldEhpZXJhcmNoeSgkY29udGVudG9iai0+SGllcmFyY2h5KCkpOwoJJHRtcG9iai0+U2V0TGFzdE1vZGlmaWVkQnkoJGNvbnRlbnRvYmotPkxhc3RNb2RpZmllZEJ5KCkpOwoJJHRtcG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoJGNvbnRlbnRvYmotPkdldEFkZGl0aW9uYWxFZGl0b3JzKCkpOwoJJGNvbnRlbnRvYmogPSAkdG1wb2JqOwp9CgpmdW5jdGlvbiBjcmVhdGV0bXBmbmFtZSgmJGNvbnRlbnRvYmopCnsKCWdsb2JhbCAkZ0NtczsKCSRjb25maWcgPSYgJGdDbXMtPkdldENvbmZpZygpOwoKCSRkYXRhWyJjb250ZW50X2lkIl0gPSAkY29udGVudG9iai0+SWQoKTsKCSRkYXRhWyJ0aXRsZSJdID0gJGNvbnRlbnRvYmotPk5hbWUoKTsKCSRkYXRhWyJtZW51dGV4dCJdID0gJGNvbnRlbnRvYmotPk1lbnVUZXh0KCk7CgkkZGF0YVsiY29udGVudCJdID0gJGNvbnRlbnRvYmotPlNob3coKTsKCSRkYXRhWyJ0ZW1wbGF0ZV9pZCJdID0gJGNvbnRlbnRvYmotPlRlbXBsYXRlSWQoKTsKCSRkYXRhWyJoaWVyYXJjaHkiXSA9ICRjb250ZW50b2JqLT5IaWVyYXJjaHkoKTsKCQoJJHRlbXBsYXRlb2JqID0gVGVtcGxhdGVPcGVyYXRpb25zOjpMb2FkVGVtcGxhdGVCeUlkKCRjb250ZW50b2JqLT5UZW1wbGF0ZUlkKCkpOwoJJGRhdGFbJ3RlbXBsYXRlJ10gPSAkdGVtcGxhdGVvYmotPmNvbnRlbnQ7CgoJJHN0eWxlc2hlZXRvYmogPSBnZXRfc3R5bGVzaGVldCgkY29udGVudG9iai0+VGVtcGxhdGVJZCgpKTsKCSRkYXRhWydlbmNvZGluZyddID0gJHN0eWxlc2hlZXRvYmpbJ2VuY29kaW5nJ107CgkvLyAkZGF0YVsnc3R5bGVzaGVldCddID0gJHN0eWxlc2hlZXRvYmpbJ3N0eWxlc2hlZXQnXTsKCgkkdG1wZm5hbWUgPSAnJzsKCWlmIChpc193cml0YWJsZSgkY29uZmlnWyJwcmV2aWV3c19wYXRoIl0pKQoJewoJCSR0bXBmbmFtZSA9IHRlbXBuYW0oJGNvbmZpZ1sicHJldmlld3NfcGF0aCJdLCAiY21zcHJldmlldyIpOwoJfQoJZWxzZQoJewoJCSR0bXBmbmFtZSA9IHRlbXBuYW0oVE1QX0NBQ0hFX0xPQ0FUSU9OLCAiY21zcHJldmlldyIpOwoJfQoJJGhhbmRsZSA9IGZvcGVuKCR0bXBmbmFtZSwgInciKTsKCWZ3cml0ZSgkaGFuZGxlLCBzZXJpYWxpemUoJGRhdGEpKTsKCWZjbG9zZSgkaGFuZGxlKTsKCQoJcmV0dXJuICR0bXBmbmFtZTsKfQoKI0dldCBjdXJyZW50IHVzZXJpZCBhbmQgbWFrZSBzdXJlIHRoZXkgaGF2ZSBwZXJtaXNzaW9uIHRvIGFkZCBzb21ldGhpbmcKJGFjY2VzcyA9IGNoZWNrX3Blcm1pc3Npb24oJHVzZXJpZCwgJ0FkZCBQYWdlcycpOwoKI0dldCBhIGxpc3Qgb2YgY29udGVudCB0eXBlcyBhbmQgcGljayBhIGRlZmF1bHQgaWYgbmVjZXNzYXJ5CiRleGlzdGluZ3R5cGVzID0gQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpOwokY29udGVudF90eXBlID0gIiI7CmlmIChpc3NldCgkX1BPU1RbImNvbnRlbnRfdHlwZSJdKSkKewoJJGNvbnRlbnRfdHlwZSA9ICRfUE9TVFsiY29udGVudF90eXBlIl07Cn0KZWxzZQp7CglpZiAoaXNzZXQoJGV4aXN0aW5ndHlwZXMpICYmIGNvdW50KCRleGlzdGluZ3R5cGVzKSA+IDApCgl7CgkgIC8vCSAgJGNvbnRlbnRfdHlwZSA9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddOwoJICAkY29udGVudF90eXBlID0gJ1RleHQnOwoJfQoJZWxzZQoJewoJCSRlcnJvciA9ICJObyBjb250ZW50IHR5cGVzIGxvYWRlZCEiOwoJfQp9CgokY29udGVudG9iaiA9ICIiOwppZiAoaXNzZXQoJF9QT1NUWyJzZXJpYWxpemVkX2NvbnRlbnQiXSkpCnsKCSRjb250ZW50b2JqID0gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkX1BPU1RbInNlcmlhbGl6ZWRfY29udGVudCJdKSk7CglpZiAoc3RydG9sb3dlcihnZXRfY2xhc3MoJGNvbnRlbnRvYmopKSAhPSAkY29udGVudF90eXBlKQoJewoJCSNGaWxsIHVwIHRoZSBleGlzdGluZyBvYmplY3Qgd2l0aCB2YWx1ZXMgaW4gZm9ybQoJCSNDcmVhdGUgbmV3IG9iamVjdAoJCSNDb3B5IGltcG9ydGFudCBmaWVsZHMgdG8gbmV3IG9iamVjdAoJCSNQdXQgbmV3IG9iamVjdCBvbiB0b3Agb2Ygb2xkIG9uCgkJY29weWNvbnRlbnRvYmooJGNvbnRlbnRvYmosICRjb250ZW50X3R5cGUpOwoJfQp9CmVsc2UKewoJJGNvbnRlbnRvYmogPSBuZXcgJGNvbnRlbnRfdHlwZTsKCSRjb250ZW50b2JqLT5TZXRPd25lcigkdXNlcmlkKTsKCSRjb250ZW50b2JqLT5TZXRBY3RpdmUoVHJ1ZSk7CgkkY29udGVudG9iai0+U2V0U2hvd0luTWVudShUcnVlKTsKCSRjb250ZW50b2JqLT5TZXRMYXN0TW9kaWZpZWRCeSgkdXNlcmlkKTsKCWlmICgkcGFyZW50X2lkIT0tMSkgJGNvbnRlbnRvYmotPlNldFBhcmVudElkKCRwYXJlbnRfaWQpOwp9CgppZiAoJGFjY2VzcykKewoJaWYgKCRzdWJtaXQgfHwgJGFwcGx5KQoJewoJCSNGaWxsIGNvbnRlbnRvYmogd2l0aCBwYXJhbWV0ZXJzCgkJJGNvbnRlbnRvYmotPkZpbGxQYXJhbXMoJF9QT1NUKTsKCQkkY29udGVudG9iai0+bVBhcmVudFBhZ2VJZCA9ICRwYXJhbXNbJ3BhcmVudF9wYWdlX2lkJ107CgkJJGNvbnRlbnRvYmotPlNldE93bmVyKCR1c2VyaWQpOwoKCQkjRmlsbCBBZGRpdGlvbmFsIEVkaXRvcnMgKGtpbmQgb2Yga2x1ZGd5KQoJCWlmIChpc3NldCgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdKSkKCQl7CgkJCSRhZGR0YXJyYXkgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdIGFzICRhZGR0X3VzZXJfaWQpCgkJCXsKCQkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJCX0KCQkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRhZGR0YXJyYXkpOwoJCX0KCgkJJGVycm9yID0gJGNvbnRlbnRvYmotPlZhbGlkYXRlRGF0YSgpOwoJCWlmICgkZXJyb3IgPT09IEZBTFNFKQoJCXsKCQkJJGNvbnRlbnRvYmotPlNhdmUoKTsKCQkJQmxvY2tDb250ZW50TWFuYWdlcjo6U2V0QWxsSGllcmFyY2h5UG9zaXRpb25zKCk7CgkJCS8vVXBkYXRlIHNlYXJjaCBpbmRleAoJCQkkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnU2VhcmNoJyk7CgkJCWlmICgkbW9kdWxlICE9IEZBTFNFKQoJCQkgIHsKCQkJICAgICRtb2R1bGUtPkFkZFdvcmRzKCR0aGlzLT5HZXROYW1lKCksICRjb250ZW50b2JqLT5JZCgpLCAnYmxvY2snLCAkY29udGVudG9iai0+TmFtZSgpIC4gJyAnIC4kY29udGVudG9iai0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpKTsKCQkJICB9CgkJCWlmICgkc3VibWl0KQoJCQl7CgkJCQlhdWRpdCgkY29udGVudG9iai0+SWQoKSwgJGNvbnRlbnRvYmotPk5hbWUoKSwgJ0FkZGVkIENvbnRlbnQnKTsKCQkJCSRyZWRpcmVjdF9vbl9hZGQgPSAoaXNzZXQoJHBhcmFtc1sncmVkaXJlY3Rfb25fYWRkJ10pID8gJHBhcmFtc1sncmVkaXJlY3Rfb25fYWRkJ10gOiAwKTsKCQkJCWlmICgxID09ICRyZWRpcmVjdF9vbl9hZGQpCgkJCQl7CgkJCQkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ2Jsb2NrX2FkZGVkJywgJ2FjdGl2ZV90YWInID0+ICdibG9ja3MnLCAnY29sJyA9PiAwLCAnY29udGVudF9pZCcgPT4gJGNvbnRlbnRvYmotPm1QYXJlbnRQYWdlSWQpOwoJCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHBhcmFtcyA9IGFycmF5KCdwYXJlbnRfcGFnZV9pZCcgPT4gJF9QT1NUWydwYXJlbnRfcGFnZV9pZCddLCAnbW9kdWxlX21lc3NhZ2UnID0+ICR0aGlzLT5MYW5nKCdibG9ja19hZGRlZCcpKTsKCQkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnYWRkYmxvY2tjb250ZW50JywgJycsICRwYXJhbXMpOwoJCQkJfQoKCQkJfQoJCX0KCX0KCWVsc2UgaWYgKCRmaXJzdHRpbWUgPT0gIjAiKSAjRWl0aGVyIHdlJ3JlIGEgcHJldmlldyBvciBhIHRlbXBsYXRlIHBvc3RiYWNrCgl7CgkJJGNvbnRlbnRvYmotPkZpbGxQYXJhbXMoJF9QT1NUKTsKCQlpZiAoJHByZXZpZXcpICNJZiBwcmV2aWV3LCBjaGVjayBmb3IgZXJyb3JzLi4uCgkJewoJCQkkZXJyb3IgPSAkY29udGVudG9iai0+VmFsaWRhdGVEYXRhKCk7CgkJfQoJCWlmIChpc3NldCgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdKSkKCQl7CgkJCSRhZGR0YXJyYXkgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdIGFzICRhZGR0X3VzZXJfaWQpCgkJCXsKCQkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJCX0KCQkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRhZGR0YXJyYXkpOwoJCX0KCX0KCWVsc2UKCXsKCQkkZmlyc3R0aW1lID0gIjAiOwoJfQp9CgppZiAoISRhY2Nlc3MpCnsKCWVjaG8gIjxkaXYgY2xhc3M9XCJwYWdlZXJyb3Jjb250YWluZXIgcGFnZW92ZXJmbG93XCI+PHAgY2xhc3M9XCJwYWdlZXJyb3JcIj4iLmxhbmcoJ25vYWNjZXNzdG8nLGFycmF5KGxhbmcoJ2FkZGNvbnRlbnQnKSkpLiI8L3A+PC9kaXY+IjsKfQplbHNlCnsKI0dldCBhIGxpc3Qgb2YgY29udGVudF90eXBlcyBhbmQgYnVpbGQgdGhlIGRyb3Bkb3duIHRvIHNlbGVjdCBvbmUKJHR5cGVzZHJvcGRvd24gPSAnPHNlbGVjdCBuYW1lPSJjb250ZW50X3R5cGUiIG9uY2hhbmdlPSJkb2N1bWVudC5jb250ZW50Zm9ybS5zdWJtaXQoKSIgY2xhc3M9InN0YW5kYXJkIj4nOwpmb3JlYWNoICgkZXhpc3Rpbmd0eXBlcyBhcyAkb25ldHlwZT0+JG5hbWUpCnsKICAkdHlwZXNkcm9wZG93biAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRvbmV0eXBlXCIiOwogIGlmICgkb25ldHlwZSA9PSBzdHJ0b2xvd2VyKCRjb250ZW50X3R5cGUpKQogICAgewogICAgICAkdHlwZXNkcm9wZG93biAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCIgJzsKICAgIH0KICAkdHlwZXNkcm9wZG93biAuPSAiPiIuKCRuYW1lKS4iPC9vcHRpb24+IjsKfQokdHlwZXNkcm9wZG93biAuPSAiPC9zZWxlY3Q+IjsKCmlmIChGQUxTRSA9PSBlbXB0eSgkZXJyb3IpKQp7CgllY2hvICR0aGVtZU9iamVjdC0+U2hvd0Vycm9ycygkZXJyb3IpOwp9CmVsc2UgaWYgKCRwcmV2aWV3KQp7CgkkdG1wZm5hbWUgPSBjcmVhdGV0bXBmbmFtZSgkY29udGVudG9iaik7Cgo/PgoKPCEtLQo8ZGl2IGNsYXNzPSJwYWdlY29udGFpbmVyIj4KCTxwIGNsYXNzPSJwYWdlaGVhZGVyIj48P3BocCBlY2hvIGxhbmcoJ3ByZXZpZXcnKT8+PC9wPgoJPGlmcmFtZSBuYW1lPSJwcmV2aWV3ZnJhbWUiIGNsYXNzPSJwcmV2aWV3IiBzcmM9Ijw/cGhwIGVjaG8gJGNvbmZpZ1sicm9vdF91cmwiXSA/Pi9wcmV2aWV3LnBocD90bXBmaWxlPTw/cGhwIGVjaG8gdXJsZW5jb2RlKGJhc2VuYW1lKCR0bXBmbmFtZSkpPz4iPjwvaWZyYW1lPgo8L2Rpdj4KLS0+Cjw/cGhwCn0KCiMkY29udGVudGFycmF5ID0gJGNvbnRlbnRvYmotPkVkaXRBc0FycmF5KHRydWUsIDApOwojJGNvbnRlbnRhcnJheTIgPSAkY29udGVudG9iai0+RWRpdEFzQXJyYXkodHJ1ZSwgMSk7CgokdGFibmFtZXMgPSAkY29udGVudG9iai0+VGFiTmFtZXMoKTsKCj8+CgoJPGRpdiBpZD0icGFnZV90YWJzIj4KCQk8P3BocAoJCSRjb3VudCA9IDA7CgoJCSNXZSBoYXZlIHByZXZpZXcsIGJ1dCBubyB0YWJzCgkJaWYgKGNvdW50KCR0YWJuYW1lcykgPT0gMCkKCQl7CgkJCT8+CgkJCTxkaXYgaWQ9ImVkaXRhYjAiIGNsYXNzPSJhY3RpdmUiPjw/cGhwIGVjaG8gbGFuZygnY29udGVudCcpPz48L2Rpdj4KCQkJPD9waHAKCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCAoJHRhYm5hbWVzIGFzICRvbmV0YWIpCgkJCXsKCQkJCT8+CgkJCQk8ZGl2IGlkPSJlZGl0YWI8P3BocCBlY2hvICRjb3VudD8+Ij48P3BocCBlY2hvICRvbmV0YWI/PjwvZGl2PgoJCQkJPD9waHAKCQkJCSRjb3VudCsrOwoJCQl9CgkJfQoKCQlpZiAoJGNvbnRlbnRvYmotPm1QcmV2aWV3KQoJCXsKCQkJZWNobyAnPGRpdiBpZD0iZWRpdHRhYnByZXZpZXciJy4oJHRtcGZuYW1lIT0nJz8nIGNsYXNzPSJhY3RpdmUiJzonJykuJyBvbmNsaWNrPSIjI0lOTElORVNVQk1JVFNUVUZGR09FU0hFUkUjI3hhamF4X2FqYXhwcmV2aWV3KHhhamF4LmdldEZvcm1WYWx1ZXMoXCdjb250ZW50Zm9ybVwnKSk7cmV0dXJuIGZhbHNlOyI+Jy5sYW5nKCdwcmV2aWV3JykuJzwvZGl2Pic7CgkJfQoJCT8+Cgk8L2Rpdj4KCTxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+Cgk8P3BocAoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyIgbmFtZT0iY29udGVudGZvcm0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGlkPSJjb250ZW50Zm9ybSIjI0ZPUk1TVUJNSVRTVFVGRkdPRVNIRVJFIyM+JzsKCSA/PgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9InNlcmlhbGl6ZWRfY29udGVudCIgbmFtZT0ic2VyaWFsaXplZF9jb250ZW50IiB2YWx1ZT0iPD9waHAgZWNobyBTZXJpYWxpemVPYmplY3QoJGNvbnRlbnRvYmopOyA/PiIgLz4JCQkKCTxkaXYgaWQ9InBhZ2VfY29udGVudCI+CgkJPD9waHAKCQkKCQkkc3VibWl0X2J1dHRvbnMgPSAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPic7CgkJJHN1Ym1pdF9idXR0b25zIC49ICcgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0YnV0dG9uIiB2YWx1ZT0iJy5sYW5nKCdzdWJtaXQnKS4nIiBjbGFzcz0icGFnZWJ1dHRvbiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvbmhvdmVyXCciIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvblwnIiAvPic7CgkJaWYgKGlzc2V0KCRjb250ZW50b2JqLT5tUHJldmlldykgJiYgJGNvbnRlbnRvYmotPm1QcmV2aWV3ID09IHRydWUpIHsKCQkJJHN1Ym1pdF9idXR0b25zIC49ICcgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0icHJldmlld2J1dHRvbiIgdmFsdWU9IicubGFuZygncHJldmlldycpLiciIGNsYXNzPSJwYWdlYnV0dG9uIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uaG92ZXJcJyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uXCciIG9uY2xpY2s9IiMjSU5MSU5FU1VCTUlUU1RVRkZHT0VTSEVSRSMjeGFqYXhfYWpheHByZXZpZXcoeGFqYXguZ2V0Rm9ybVZhbHVlcyhcJ2NvbnRlbnRmb3JtXCcpKTtyZXR1cm4gZmFsc2U7IiAvPic7CgkJfQoJCSRzdWJtaXRfYnV0dG9ucyAuPSAnIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImNhbmNlbCIgdmFsdWU9IicubGFuZygnY2FuY2VsJykuJyIgY2xhc3M9InBhZ2VidXR0b24iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ3BhZ2VidXR0b25ob3ZlclwnIiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJ3BhZ2VidXR0b25cJyIgLz4nOwoJCQoJCSRudW1iZXJvZnRhYnMgPSBjb3VudCgkdGFibmFtZXMpOwoJCSRzaG93dGFicyA9IDE7CgkJaWYgKCRudW1iZXJvZnRhYnMgPT0gMCkKCQl7CgkJCSRudW1iZXJvZnRhYnMgPSAxOwoJCQkkc2hvd3RhYnMgPSAxOwoJCX0KCQlmb3IgKCRjdXJyZW50dGFiID0gMDsgJGN1cnJlbnR0YWIgPCAkbnVtYmVyb2Z0YWJzOyAkY3VycmVudHRhYisrKQoJCXsKCQkJaWYgKCRzaG93dGFicyA9PSAxKQoJCQl7CgkJCQk/PjxkaXYgaWQ9ImVkaXRhYjw/cGhwIGVjaG8gJGN1cnJlbnR0YWIgPz5fYyI+PD9waHAKCQkJfQoJCQlpZiAoJGN1cnJlbnR0YWIgPT0gMCkKCQkJewoJCQkJZWNobyAkc3VibWl0X2J1dHRvbnM7CgkJCQk/PgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8cCBjbGFzcz0icGFnZXRleHQiPjw/cGhwIGVjaG8gbGFuZygnY29udGVudHR5cGUnKTsgPz46PC9wPgoJCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjw/cGhwIGVjaG8gJHR5cGVzZHJvcGRvd247ID8+PC9wPgoJCQkJPC9kaXY+CgkJCQk8P3BocAoJCQl9CgkJCSRjb250ZW50YXJyYXkgPSAkY29udGVudG9iai0+RWRpdEFzQXJyYXkodHJ1ZSwgJGN1cnJlbnR0YWIsICRhY2Nlc3MpOwoJCQlmb3IoJGk9MDskaTxjb3VudCgkY29udGVudGFycmF5KTskaSsrKQoJCQl7CgkJCQk/PgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8cCBjbGFzcz0icGFnZXRleHQiPjw/cGhwIGVjaG8gJGNvbnRlbnRhcnJheVskaV1bMF07ID8+PC9wPgoJCQkJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+PD9waHAgZWNobyAkY29udGVudGFycmF5WyRpXVsxXTsgPz48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPD9waHAKCQkJfQoJCQllY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaXJzdHRpbWUiIHZhbHVlPSIwIiAvPic7CgkJCQkJPz4KCQkJCTwvcD4KCQkJPC9kaXY+CgkJCTxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+CgkJPC9kaXY+CgkJPD9waHAKCQl9CgkJaWYgKCRjb250ZW50b2JqLT5tUHJldmlldykKCQl7CgkJCWVjaG8gJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+PGRpdiBpZD0iZWRpdHRhYnByZXZpZXdfYyInLigkdG1wZm5hbWUhPScnPycgY2xhc3M9ImFjdGl2ZSInOicnKS4nPic7CgkJCQk/PgoJCQkJCTxpZnJhbWUgbmFtZT0icHJldmlld2ZyYW1lIiBjbGFzcz0icHJldmlldyIgaWQ9InByZXZpZXdmcmFtZSI8P3BocCBpZiAoJHRtcGZuYW1lICE9ICcnKSB7ID8+IHNyYz0iPD9waHAgZWNobyAkY29uZmlnWyJyb290X3VybCJdID8+L3ByZXZpZXcucGhwP3RtcGZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoYmFzZW5hbWUoJHRtcGZuYW1lKSk/PiI8P3BocCB9ID8+PjwvaWZyYW1lPgoJCQkJPD9waHAKCQkJZWNobyAnPC9kaXY+PC9kaXY+JzsKCQkJZWNobyAnPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4nOwoJCX0KCQllY2hvICc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+TGFuZygncmVkaXJlY3Rfb25fYWRkJykuJzwvcCc7CgkJZWNobyAnPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3JlZGlyZWN0X29uX2FkZCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZWRpcmVjdF9vbl9hZGQnLCAxKSkuJzwvZGl2PjwvZGl2Pic7CgoJCWVjaG8gJHN1Ym1pdF9idXR0b25zOwoJCT8+Cgk8L2Rpdj4KCTwvZm9ybT4KPD9waHAKCn0KCiMgdmltOnRzPTQgc3c9NCBub2V0Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7Cmdsb2JhbCAkZ0NtczsKCiRzaG93X3RvYyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaG93dG9jJywgMSk7CmlmIChGQUxTRSA9PSBlbXB0eSgkcGFyYW1zWydwYWdlX2lkJ10pKQp7CgkkcGFnZV9pZCA9ICRwYXJhbXNbJ3BhZ2VfaWQnXTsKfQplbHNlCnsKCS8vIElmIHBhZ2VfaWQgd2FzIG5vdCBvdmVyLXJpZGRlbiwgdGhlbiB1c2UgY3VycmVudCBwYWdlIGlkLgoJJHBhZ2VfaWQgPSAkZ0Ntcy0+dmFyaWFibGVzWydjb250ZW50X2lkJ107Cn0KCmZ1bmN0aW9uIHNob3dfdG9jX2NoaWxkKCYkdG9jLCAkcGFyZW50X2lkKQp7Cgkkb3V0cHV0ID0gJzx1bD4nOwoJZm9yZWFjaCAoJHRvY1skcGFyZW50X2lkXSAgQVMgJGtleSA9PiAkdmFsdWUpCgl7CgkJJG91dHB1dCAuPSAnPGxpPicuJHZhbHVlWydvdXRwdXQnXTsKCQlpZiAoRkFMU0UgPT0gZW1wdHkoJHRvY1skdmFsdWVbJ2lkJ11dKSkKCQl7CgkJCSRvdXRwdXQgLj0gc2hvd190b2NfY2hpbGQoJHRvYywgJHZhbHVlWydpZCddKTsKCQl9CgkJJG91dHB1dCAuPSAnPC9saT4nOwoJfQoJJG91dHB1dCAuPSAnPC91bD4nOwoJcmV0dXJuICRvdXRwdXQ7Cn0KCiRoaWVyTWFuYWdlciA9ICZCbG9ja0NvbnRlbnRNYW5hZ2VyOjpHZXRBbGxDb250ZW50QXNIaWVyYXJjaHkoZmFsc2UpOwoKJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgcGFyZW50X3BhZ2VfaWQgPSAiLiRwYWdlX2lkLiIgQU5EIGFjdGl2ZSA9IDEgT1JERVIgQlkgaGllcmFyY2h5IjsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwokb3V0cHV0ID0gJyc7CmlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKewogICAgd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgl7CgkJCgkJJGNoaWxkX25vZGUgPSYgJGhpZXJNYW5hZ2VyLT5nZXROb2RlQnlJZCgkcm93Wydjb250ZW50X2lkJ10pOwoJCSRjb250ZW50ID0gJGNoaWxkX25vZGUtPmdldENvbnRlbnQoKTsKCQlpZiAoJGNvbnRlbnQtPkFjdGl2ZSgpKQoJCXsKCQkJCS8vIGxvYWQgcHJvcHMgbWFudWFsbHksIGJlY3Vhc2UgR2V0SGllcmFyY2h5TWFuYWdlcigpIGRvZW5zJ3QgbG9hZCB0aGVtCgkJCSRjb250ZW50LT5tUHJvcGVydGllcy0+TG9hZCgkY29udGVudC0+SWQoKSk7CgkJCWlmICgxID09ICRzaG93X3RvYykKCQkJewoJCQkJJHRvY1skY29udGVudC0+UGFyZW50SWQoKV1bXSA9IGFycmF5KCdvdXRwdXQnID0+ICc8YSBocmVmPSInLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLicjJy4kY29udGVudC0+QWxpYXMoKS4nIj4nLiRjb250ZW50LT5tTmFtZS4nPC9hPicsICdpZCcgPT4gJGNvbnRlbnQtPklkKCkpOwoJCQl9CgkJCSRvdXRwdXQgLj0gJGNvbnRlbnQtPlNob3coKTsKCQl9Cgl9CgkKCWlmICgxID09ICRzaG93X3RvYykKCXsKCQkkdG9jX291dHB1dCA9ICc8aDI+Jy4kdGhpcy0+TGFuZygnY29udGVudHMnKS4nPC9oMj4nOwoJCQkvLyBUYWJsZSBvZiBDb250ZW50cwoJCSR0b2Nfb3V0cHV0IC49IHNob3dfdG9jX2NoaWxkKCR0b2MsIC0xKTsKCX0KCWVsc2UKCXsKCQkkdG9jX291dHB1dCA9ICcnOwoJfQoJCgllY2hvICR0b2Nfb3V0cHV0LiRvdXRwdXQ7Cn0KCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CmlmICghICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBQYWdlQmxvY2tzJykpCiAgewogICAgJHRoaXMtPlNob3dFcnJvcigkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwogICAgZGllKCk7CiAgfQokY29uZmlnID0mICRnQ21zLT5HZXRDb25maWcoKTsKJHRoZW1lT2JqZWN0ID0mICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXTsKCmZ1bmN0aW9uIHRvZ2dsZWV4cGFuZCgkY29udGVudGlkLCAkY29sbGFwc2UgPSBmYWxzZSwgJiRtb2RfaW5zdGFuY2UpCnsKCSRvcGVuZWRBcnJheT1hcnJheSgpOwoJaWYgKCRtb2RfaW5zdGFuY2UtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywnJykgIT0gJycpCgl7CgkJJHRtcCAgPSBleHBsb2RlKCcuJywkbW9kX2luc3RhbmNlLT5HZXRQcmVmZXJlbmNlKCdjb2xsYXBzZScsJycpKTsKCQlmb3JlYWNoICgkdG1wIGFzICR0aGlzQ29sKQoJCXsKCQkJJGNvbGluZCA9IHN1YnN0cigkdGhpc0NvbCwwLHN0cnBvcygkdGhpc0NvbCwnPScpKTsKCQkJJG9wZW5lZEFycmF5WyRjb2xpbmRdID0gMTsKCQl9Cgl9CglpZiAoJGNvbGxhcHNlKQoJewoJCSRvcGVuZWRBcnJheVskY29udGVudGlkXSA9IDA7Cgl9CgllbHNlCgl7CgkJJG9wZW5lZEFycmF5WyRjb250ZW50aWRdID0gMTsKCX0KCSRjcyA9ICcnOwoJZm9yZWFjaCAoJG9wZW5lZEFycmF5IGFzICRrZXk9PiR2YWwpCgl7CgkJaWYgKCR2YWwgPT0gMSkKCQl7CgkJCSRjcyAuPSAka2V5Lic9MS4nOwoJCX0KCX0KCSRtb2RfaW5zdGFuY2UtPlNldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywgJGNzKTsKfQoKZnVuY3Rpb24gZXhwYW5kYWxsKCYkbW9kX2luc3RhbmNlKQp7CglnbG9iYWwgJGdDbXM7CgkkY29udGVudG9wcyA9JiAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKCSRhbGwgPSAkY29udGVudG9wcy0+R2V0QWxsQ29udGVudChmYWxzZSk7CgkkY3MgPSAnJzsKCWZvcmVhY2ggKCRhbGwgYXMgJHRoaXNpdGVtKQoJewoJICAvL2lmICgkdGhpc2l0ZW0tPkhhc0NoaWxkcmVuKCkpCgkgIC8vCQl7CgkJCSRjcyAuPSAkdGhpc2l0ZW0tPklkKCkuJz0xLic7CgkJCS8vCX0KCX0KCSRtb2RfaW5zdGFuY2UtPlNldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywgJGNzKTsKfQoKZnVuY3Rpb24gY29sbGFwc2VhbGwoJiRtb2RfaW5zdGFuY2UpCnsKCSRtb2RfaW5zdGFuY2UtPlNldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywgJycpOwp9CgpmdW5jdGlvbiBkZWxldGVjb250ZW50KCRjb250ZW50aWQsICYkbW9kX2luc3RhbmNlKQp7CgkkdXNlcmlkID0gZ2V0X3VzZXJpZCgpOwoJJGFjY2VzcyA9IGNoZWNrX3Blcm1pc3Npb24oJHVzZXJpZCwgJ1JlbW92ZSBQYWdlcycpOwoJCglnbG9iYWwgJGdDbXM7CgkvLyAkaGllck1hbmFnZXIgPSYgJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKCSRoaWVyTWFuYWdlciA9ICZCbG9ja0NvbnRlbnRNYW5hZ2VyOjpHZXRBbGxDb250ZW50QXNIaWVyYXJjaHkoZmFsc2UpOwoJaWYgKCRhY2Nlc3MpCgl7CgkJJG5vZGUgPSAmJGhpZXJNYW5hZ2VyLT5nZXROb2RlQnlJZCgkY29udGVudGlkKTsKCQlpZiAoJG5vZGUpCgkJewoJCQkkY29udGVudG9iaiA9JiAkbm9kZS0+Z2V0Q29udGVudCgpOwoJCQkkY2hpbGRjb3VudCA9IDA7CgkJCSRwYXJlbnRpZCA9IC0xOwoJCQlpZiAoaXNzZXQoJG5vZGUtPnBhcmVudE5vZGUpKQoJCQl7CgkJCQkkcGFyZW50ID0mICRub2RlLT5wYXJlbnROb2RlOwoJCQkJaWYgKGlzc2V0KCRwYXJlbnQpKQoJCQkJewoJCQkJCSRwYXJlbnRDb250ZW50ID0mICRwYXJlbnQtPmdldENvbnRlbnQoKTsKCQkJCQlpZiAoaXNzZXQoJHBhcmVudENvbnRlbnQpKQoJCQkJCXsKCQkJCQkJJHBhcmVudGlkID0gJHBhcmVudENvbnRlbnQtPklkKCk7CgkJCQkJCSRjaGlsZGNvdW50ID0gJHBhcmVudC0+Z2V0Q2hpbGRyZW5Db3VudCgpOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYgKCRjb250ZW50b2JqKQoJCQl7CgkJCQkkdGl0bGUgPSAkY29udGVudG9iai0+TmFtZSgpOwoJCgkJCQkjQ2hlY2sgZm9yIGNoaWxkcmVuCgkJCQlpZiAoJGNvbnRlbnRvYmotPkhhc0NoaWxkcmVuKCkpCgkJCQl7CgkJCQkJJF9HRVRbJ2Vycm9yJ10gPSAnZXJyb3JjaGlsZGNvbnRlbnQnOwoJCQkJfQoJCgkJCQkjQ2hlY2sgZm9yIGRlZmF1bHQKCQkJCWlmICgkY29udGVudG9iai0+RGVmYXVsdENvbnRlbnQoKSkKCQkJCXsKCQkJCQkkX0dFVFsnZXJyb3InXSA9ICdlcnJvcmRlZmF1bHRwYWdlJzsKCQkJCX0KCQkJCgkJCQkkdGl0bGUgPSAkY29udGVudG9iai0+TmFtZSgpOwoJCQkJJGNvbnRlbnRvYmotPkRlbGV0ZSgpOwoJCQkJQmxvY2tDb250ZW50TWFuYWdlcjo6U2V0QWxsSGllcmFyY2h5UG9zaXRpb25zKCk7CgkJCQkvL1VwZGF0ZSBzZWFyY2ggaW5kZXgKCQkJCSRtb2R1bGUgPSYgJG1vZF9pbnN0YW5jZS0+R2V0TW9kdWxlSW5zdGFuY2UoJ1NlYXJjaCcpOwoJCQkJaWYgKCRtb2R1bGUgIT0gRkFMU0UpCgkJCQkgIHsKCQkJCSAgICAkbW9kdWxlLT5EZWxldGVXb3JkcygkbW9kX2luc3RhbmNlLT5HZXROYW1lKCksICRjb250ZW50aWQsICdibG9jaycpOwoJCQkJICB9CgkJCQkKCQkJCSNTZWUgaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGlsZC4uLiBpZiBzbywgcmVtb3ZlCgkJCQkjdGhlIGV4cGFuZCBmb3IgaXQKCQkJCWlmICgkY2hpbGRjb3VudCA9PSAxICYmICRwYXJlbnRpZCA+IC0xKQoJCQkJewoJCQkJICB0b2dnbGVleHBhbmQoJHBhcmVudGlkLCB0cnVlLCAkbW9kX2luc3RhbmNlKTsKCQkJCX0KCQkJCQoJCQkJI0RvIHRoZSBzYW1lIHdpdGggdGhpcyBwYWdlIGFzIHdlbGwKCQkJCXRvZ2dsZWV4cGFuZCgkY29udGVudGlkLCB0cnVlLCAkbW9kX2luc3RhbmNlKTsKCQkJCQoJCQkJYXVkaXQoJGNvbnRlbnRpZCwgJHRpdGxlLCAnRGVsZXRlZCBDb250ZW50Jyk7CgkJCQkKCQkJCUJsb2NrQ29udGVudE1hbmFnZXI6OkNsZWFyQ2FjaGUoKTsKCQkJCgkJCQkkX0dFVFsnbWVzc2FnZSddID0gJ2NvbnRlbnRkZWxldGVkJzsKCQkJfQoJCX0KCX0KfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2RlbGV0ZWNvbnRlbnQnXSkpCiAgewogICAgZGVsZXRlY29udGVudCgkcGFyYW1zWydkZWxldGVjb250ZW50J10sICR0aGlzKTsKICAgICRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICdibG9ja19kZWxldGVkJywgJ2FjdGl2ZV90YWInID0+ICdibG9ja3MnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwogIH0KCmlmIChpc3NldCgkcGFyYW1zWydjb2wnXSkgJiYgaXNzZXQoJHBhcmFtc1snY29udGVudF9pZCddKSkKewogIHRvZ2dsZWV4cGFuZCgkcGFyYW1zWydjb250ZW50X2lkJ10sICRwYXJhbXNbJ2NvbCddPT0nMSc/dHJ1ZTpmYWxzZSwgJHRoaXMpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snZXhwYW5kYWxsJ10pKQp7CglleHBhbmRhbGwoJHRoaXMpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snY29sbGFwc2VhbGwnXSkpCnsKCWNvbGxhcHNlYWxsKCR0aGlzKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CiRhY3RpdmVfdGFiID0gaXNzZXQoJHBhcmFtc1snYWN0aXZlX3RhYiddKSA/ICRwYXJhbXNbJ2FjdGl2ZV90YWInXSA6IEZBTFNFOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2Jsb2NrcycsICR0aGlzLT5MYW5nKCdibG9ja3MnKSwgKCdibG9ja3MnID09ICRhY3RpdmVfdGFiKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigndGVtcGxhdGVzJywkdGhpcy0+TGFuZygndGVtcGxhdGVzJyksICgndGVtcGxhdGVzJyA9PSAkYWN0aXZlX3RhYikpOwppZigkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKQogIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignb3B0aW9ucycsICR0aGlzLT5MYW5nKCdvcHRpb25zJyksICgnb3B0aW9ucycgPT0gJGFjdGl2ZV90YWIpKTsKICB9CmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKCiAgICAgICAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdibG9ja3MnLCAkcGFyYW1zKTsKCnJlcXVpcmUoY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwgJ2xpYicsICdzbGxpc3RzJywnU0xMaXN0cy5jbGFzcy5waHAnKSk7CiRzb3J0YWJsZUxpc3RzID0gbmV3IFNMTGlzdHMoICRjb25maWdbInJvb3RfdXJsIl0uJy9saWIvc2NyaXB0YWN1bG91cycpOwoKCi8vIEdldCBsaXN0IG9mIGV4cGFuZGVkIHBhZ2VzCiR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CiR0aGlzLT5vcGVuZWRBcnJheT1hcnJheSgpOwppZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywgJycpICE9ICcnKQogIHsKICAgICR0bXAgID0gZXhwbG9kZSgnLicsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlJykpOwogICAgZm9yZWFjaCAoJHRtcCBhcyAkdGhpc0NvbCkKICAgICAgewoJJGNvbGluZCA9IHN1YnN0cigkdGhpc0NvbCwwLHN0cnBvcygkdGhpc0NvbCwnPScpKTsKCSR0aGlzLT5vcGVuZWRBcnJheVskY29saW5kXSA9IDE7CiAgICAgIH0KICB9CgovLyBibG9ja3MKLy8gZWNobyAnPGgyPkJsb2NrczwvaDI+JzsKJGhpZXJNYW5hZ2VyID0gJkJsb2NrQ29udGVudE1hbmFnZXI6OkdldEFsbENvbnRlbnRBc0hpZXJhcmNoeShmYWxzZSk7CiRoaWVyYXJjaHkgPSAmJGhpZXJNYW5hZ2VyLT5nZXRSb290Tm9kZSgpOwoKaWYgKCRoaWVyYXJjaHktPmhhc0NoaWxkcmVuKCkpCiAgewogICAgJGxpc3RBcnJheSA9IGFycmF5KCk7CiAgICAkb3V0cHV0ID0gJyc7CiAgICAkdGhpcy0+bUlkID0gJGlkOwogICAgJHRoaXMtPm1SZXR1cm5pZCA9ICRyZXR1cm5pZDsKCWZvcmVhY2ggKCRoaWVyYXJjaHktPmdldENoaWxkcmVuKCkgYXMgJGNoaWxkKQoJewoJICAkdGhpcy0+c2hvd19oX2Jsb2NrcygkY2hpbGQsICRzb3J0YWJsZUxpc3RzLCAkbGlzdEFycmF5KTsKCX0KICB9CgovLyBwcmludF9yKCR0aGlzLT5tUGFnZUJsb2NrUGFyZW50cyk7CgovLyBlY2hvICc8aDI+UGFnZXM8L2gyPic7Ci8vIFBhZ2VzCmVjaG8gJzxkaXYgY2xhc3M9InBhZ2Vjb250YWluZXIiPjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+JzsKJGNvbnRlbnRvcHMgPSYgJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiRoaWVyTWFuYWdlciA9ICRjb250ZW50b3BzLT5HZXRBbGxDb250ZW50QXNIaWVyYXJjaHkoZmFsc2UpOwokaGllcmFyY2h5ID0gJiRoaWVyTWFuYWdlci0+Z2V0Um9vdE5vZGUoKTsKCmlmICgkaGllcmFyY2h5LT5oYXNDaGlsZHJlbigpKQogIHsKICAgICRsaXN0QXJyYXkgPSBhcnJheSgpOwogICAgJHRoaXMtPm1JZCA9ICRpZDsKICAgICR0aGlzLT5tUmV0dXJuaWQgPSAkcmV0dXJuaWQ7CiAgICAkb3V0cHV0ID0gJzx1bD4nOwogICAgZm9yZWFjaCAoJGhpZXJhcmNoeS0+Z2V0Q2hpbGRyZW4oKSBhcyAkY2hpbGQpCiAgICAgIHsKCSR0aGlzLT5zaG93X2goJGNoaWxkLCAkc29ydGFibGVMaXN0cywgJGxpc3RBcnJheSwgJG91dHB1dCk7CgkKICAgICAgfQogICAgJG91dHB1dCAuPSAnPC91bD4nOwogICAgaWYoIWlzc2V0KCRfUE9TVFsnc29ydGFibGVMaXN0c1N1Ym1pdHRlZCddKSkKICAgICAgewoJZWNobyAkb3V0cHV0OwogICAgICB9CiAgfQoKaWYoaXNzZXQoJF9QT1NUWydzb3J0YWJsZUxpc3RzU3VibWl0dGVkJ10pKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgJG9yZGVyX2NoYW5nZWQgPSBGQUxTRTsKICAgIGZvcmVhY2ggKCRsaXN0QXJyYXlbJ3BhZ2VwYXJlbnRzJ10gQVMgJHBhcmVudF9pZCA9PiAkb3JkZXIpCiAgICAgIHsKCSRvcmRlckFycmF5ID0gU0xMaXN0czo6Z2V0T3JkZXJBcnJheSgkX1BPU1RbJG9yZGVyXSwgJ3BhcmVudCcuJHBhcmVudF9pZCk7Cglmb3JlYWNoKCRvcmRlckFycmF5IGFzICRpdGVtKQoJICB7CgkgICAgJG9yZGVyX2NoYW5nZWQgPSBUUlVFOwoJICAgICRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGl0ZW1fb3JkZXIgPSA/IFdIRVJFIGNvbnRlbnRfaWQgPSA/JzsKCSAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaXRlbVsnb3JkZXInXSwgJGl0ZW1bJ2VsZW1lbnQnXSkpOwoJICB9CiAgICAgIH0KICAKICAgIGlmIChUUlVFID09ICRvcmRlcl9jaGFuZ2VkKSB7CiAgICAgIEJsb2NrQ29udGVudE1hbmFnZXI6OlNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpOwogICAgICBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDbGVhckNhY2hlKCk7CiAgICAgICRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICdvcmRlcl91cGRhdGVkJywgJ2FjdGl2ZV90YWInID0+ICdibG9ja3MnKTsKICAgICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJZWNobyAnTm90aGluZyB3YXMgcmVvcmRlcmQnOwogICAgICB9CgogICAgZm9yZWFjaCAoJGxpc3RBcnJheVsnYmxvY2twYXJlbnRzJ10gQVMgJHBhcmVudF9pZCA9PiAkb3JkZXIpCiAgICAgIHsKCSRvcmRlckFycmF5ID0gU0xMaXN0czo6Z2V0T3JkZXJBcnJheSgkX1BPU1RbJG9yZGVyXSwgJ2Jsb2NrcGFyZW50Jy4kcGFyZW50X2lkKTsKCWZvcmVhY2goJG9yZGVyQXJyYXkgYXMgJGl0ZW0pCgkgIHsKCSAgICAkb3JkZXJfY2hhbmdlZCA9IFRSVUU7CgkgICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBTRVQgaXRlbV9vcmRlciA9ID8gV0hFUkUgY29udGVudF9pZCA9ID8nOwoJICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpdGVtWydvcmRlciddLCAkaXRlbVsnZWxlbWVudCddKSk7CgkgIH0KICAgICAgfQogIAogICAgaWYgKFRSVUUgPT0gJG9yZGVyX2NoYW5nZWQpIHsKICAgICAgQmxvY2tDb250ZW50TWFuYWdlcjo6U2V0QWxsSGllcmFyY2h5UG9zaXRpb25zKCk7CiAgICAgIEJsb2NrQ29udGVudE1hbmFnZXI6OkNsZWFyQ2FjaGUoKTsKICAgICAgJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ29yZGVyX3VwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ2Jsb2NrcycpOwogICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgllY2hvICdOb3RoaW5nIHdhcyByZW9yZGVyZCc7CiAgICAgIH0KICB9CgoKLy8gJHNvcnRhYmxlTGlzdHMtPmRlYnVnID0gdHJ1ZTsKZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoyZW07Ij4nOwokc29ydGFibGVMaXN0cy0+cHJpbnRUb3BKUygpOwokc29ydGFibGVMaXN0cy0+cHJpbnRGb3JtKCdtb2R1bGVpbnRlcmZhY2UucGhwP21vZHVsZT1QYWdlQmxvY2tzJywgJ3Bvc3QnLCAnU3VibWl0JywgJ2J1dHRvbicpOwokc29ydGFibGVMaXN0cy0+cHJpbnRCb3R0b21KUygpOyAgICAKCgplY2hvICc8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjJlbTsgbWFyZ2luLXRvcDoyZW07Ij4nOwokZXhwYW5kYWxsSW1nID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9leHBhbmRhbGwuZ2lmJywgbGFuZygnZXhwYW5kYWxsJyksJycsJycsJ3N5c3RlbWljb24nKTsKZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICAkZXhwYW5kYWxsSW1nLCBhcnJheSgnZXhwYW5kYWxsJyA9PiAxKSk7CmVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAgbGFuZygnZXhwYW5kYWxsJyksIGFycmF5KCdleHBhbmRhbGwnID0+IDEpKTsKZWNobyAnPC9zcGFuPic7CgplY2hvICc8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjJlbSI+JzsKJGNvbnRyYWN0YWxsSW1nID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9jb250cmFjdGFsbC5naWYnLCBsYW5nKCdjb250cmFjdGFsbCcpLCcnLCcnLCdzeXN0ZW1pY29uJyk7CmVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAgJGNvbnRyYWN0YWxsSW1nLCBhcnJheSgnY29sbGFwc2VhbGwnID0+IDEpKTsKZWNobyAnICcuJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAgbGFuZygnY29udHJhY3RhbGwnKSwgYXJyYXkoJ2NvbGxhcHNlYWxsJyA9PiAxKSk7CmVjaG8gJzwvc3Bhbj4nOwogICBlY2hvICc8L2Rpdj4nOwplY2hvICc8L2Rpdj48L2Rpdj4nOwoKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYigndGVtcGxhdGVzJywgJHBhcmFtcyk7CiR0ZW1wbGF0ZXMgPSBhcnJheSgpOwokdGVtcGxhdGVzMiA9IGFycmF5KCk7CiRkYnRlbXBsYXRlcyA9ICR0aGlzLT5MaXN0VGVtcGxhdGVzICgpOwokcm93Y2xhc3MgPSAncm93MSc7CmZvcmVhY2ggKCRkYnRlbXBsYXRlcyBhcyAkdGVtcGxhdGUpCnsKCSRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsKCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJJG9uZXJvdy0+bmFtZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJHRlbXBsYXRlLCBhcnJheSgndGVtcGxhdGVuYW1lJz0+JHRlbXBsYXRlKSk7Cgkkb25lcm93LT5lZGl0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0X3RlbXBsYXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RlbXBsYXRlbmFtZScgPT4gJHRlbXBsYXRlKSk7CglpZiAoJHRlbXBsYXRlIT0nZGVmYXVsdCcpCgl7CgkJJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZXRlbXBsYXRlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlX3RlbXBsYXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RlbXBsYXRlbmFtZScgPT4gJHRlbXBsYXRlKSwgJHRoaXMtPkxhbmcoJ3JlYWxseV9kZWxldGVfdGVtcGxhdGUnKSk7Cgl9IGVsc2UgewoJCSRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAnJzsKCX0KCSR0ZW1wbGF0ZXMyWyR0ZW1wbGF0ZV09JHRlbXBsYXRlOwoJJHRlbXBsYXRlc1tdID0gJG9uZXJvdzsKCSgkcm93Y2xhc3M9PSJyb3cxIj8kcm93Y2xhc3M9InJvdzIiOiRyb3djbGFzcz0icm93MSIpOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdpdGVtcycsICR0ZW1wbGF0ZXMpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZW5hbWV0ZXh0JywgJHRoaXMtPkxhbmcoJ3RlbXBsYXRlbmFtZXRleHQnKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0dGVtcGxhdGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0dGVtcGxhdGUnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0ZW1wbGF0ZWxpc3QudHBsJyk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKQp7CgllY2hvICR0aGlzLT5TdGFydFRhYignb3B0aW9ucycsICRwYXJhbXMpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0dGVtcGxhdGV0ZXh0JywgJHRoaXMtPkxhbmcoJ2RlZmF1bHRfdGVtcGxhdGUnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHR0ZW1wbGF0ZWlucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnZGVmYXVsdHRlbXBsYXRlJywgJHRlbXBsYXRlczIsIC0xLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdHRlbXBsYXRlJywnJykpKTsKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzaG93dG9jdGV4dCcsICR0aGlzLT5MYW5nKCdzaG93dG9jJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzaG93dG9jaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzaG93dG9jJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Nob3d0b2MnLCAxKSkpOwoKCSR0aGlzLT5zbWFydHktPmFzc2lnbigncmVkaXJlY3Rfb25fYWRkX3RleHQnLCAkdGhpcy0+TGFuZygncmVkaXJlY3Rfb25fYWRkJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdyZWRpcmVjdF9vbl9hZGRfaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdyZWRpcmVjdF9vbl9hZGQnLCAxLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVkaXJlY3Rfb25fYWRkJywgMSkpKTsKCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKCgllY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAndXBkYXRlb3B0aW9ucycpOwoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdvcHRpb25zLnRwbCcpOwoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.deletetemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpIA0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOw0KaWYoISAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnVXNlIFBhZ2VCbG9ja3MnICkgKSBleGl0Ow0KDQokdGVtcGxhdGVuYW1lID0gKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlbmFtZSddKSA/ICRwYXJhbXNbJ3RlbXBsYXRlbmFtZSddIDogJycpOw0KJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCR0ZW1wbGF0ZW5hbWUpOw0KJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ3RlbXBsYXRlX2RlbGV0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOw0KJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.editblockcontent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAojCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiNUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiNHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKI2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiNGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiMKIyRJZDogYWN0aW9uLmVkaXRibG9ja2NvbnRlbnQucGhwIDE3NCAyMDA3LTAzLTEzIDE1OjU1OjE5WiBlbGlqYWhsb2ZncmVuICQKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRDTVNfQURNSU5fUEFHRT0xOwoKcmVxdWlyZV9vbmNlKCIuLi9pbmNsdWRlLnBocCIpOwoKY2hlY2tfbG9naW4oKTsKJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKJGRiID0mICRnQ21zLT5HZXREYigpOwoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpIC4gJy8uLi9saWIveGFqYXgveGFqYXguaW5jLnBocCcpOwokeGFqYXggPSBuZXcgeGFqYXgoKTsKJHhhamF4LT5yZWdpc3RlckZ1bmN0aW9uKCdhamF4cHJldmlldycpOwoKJHhhamF4LT5wcm9jZXNzUmVxdWVzdHMoKTsKJGhlYWR0ZXh0ID0gJHhhamF4LT5nZXRKYXZhc2NyaXB0KCcuLi9saWIveGFqYXgnKS4iXG4iOwoKaWYgKGlzc2V0KCRfUE9TVFsiY2FuY2VsIl0pKQogIHsKICAgICRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ2Jsb2NrcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsKICB9CgokZXJyb3IgPSBGQUxTRTsKCiRjb250ZW50X2lkID0gIiI7CmlmIChpc3NldCgkcGFyYW1zWyJjb250ZW50X2lkIl0pKSAkY29udGVudF9pZCA9ICRwYXJhbXNbImNvbnRlbnRfaWQiXTsKCiRwYWdlbGlzdF9pZCA9ICIxIjsKaWYgKGlzc2V0KCRfUkVRVUVTVFsicGFnZSJdKSkgJHBhZ2VsaXN0X2lkID0gJF9SRVFVRVNUWyJwYWdlIl07CgokcHJldmlldyA9IGZhbHNlOwppZiAoaXNzZXQoJF9QT1NUWyJwcmV2aWV3YnV0dG9uIl0pKSAkcHJldmlldyA9IHRydWU7Cgokc3VibWl0ID0gZmFsc2U7CmlmIChpc3NldCgkX1BPU1RbInN1Ym1pdGJ1dHRvbiJdKSkgJHN1Ym1pdCA9IHRydWU7CgokYXBwbHkgPSBmYWxzZTsKaWYgKGlzc2V0KCRfUE9TVFsiYXBwbHlidXR0b24iXSkpICRhcHBseSA9IHRydWU7CgppZiAoJHByZXZpZXcgfHwgJGFwcGx5KQp7CgkkQ01TX0VYQ0xVREVfRlJPTV9SRUNFTlQ9MTsKfQoKZnVuY3Rpb24gYWpheHByZXZpZXcoJHBhcmFtcykKewoJZ2xvYmFsICRnQ21zOwoJJGNvbmZpZyA9JiAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgoJJGNvbnRlbnRvYmogPSBVbnNlcmlhbGl6ZU9iamVjdCgkcGFyYW1zWyJzZXJpYWxpemVkX2NvbnRlbnQiXSk7CgkkY29udGVudF90eXBlID0gJHBhcmFtc1snY29udGVudF90eXBlJ107CglpZiAoc3RydG9sb3dlcihnZXRfY2xhc3MoJGNvbnRlbnRvYmopKSAhPSBzdHJ0b2xvd2VyKCRjb250ZW50X3R5cGUpKQoJewoJCWNvcHljb250ZW50b2JqKCRjb250ZW50b2JqLCAkY29udGVudF90eXBlLCAkcGFyYW1zKTsKCX0KCXVwZGF0ZWNvbnRlbnRvYmooJGNvbnRlbnRvYmosIHRydWUsICRwYXJhbXMpOwoJJHRtcGZuYW1lID0gY3JlYXRldG1wZm5hbWUoJGNvbnRlbnRvYmopOwoJJHVybCA9ICRjb25maWdbInJvb3RfdXJsIl0uJy9wcmV2aWV3LnBocD90bXBmaWxlPScudXJsZW5jb2RlKGJhc2VuYW1lKCR0bXBmbmFtZSkpOwoJCgkkb2JqUmVzcG9uc2UgPSBuZXcgeGFqYXhSZXNwb25zZSgpOwoJJG9ialJlc3BvbnNlLT5hZGRBc3NpZ24oInByZXZpZXdmcmFtZSIsICJzcmMiLCAkdXJsKTsKCSRvYmpSZXNwb25zZS0+YWRkQXNzaWduKCJzZXJpYWxpemVkX2NvbnRlbnQiLCAidmFsdWUiLCBTZXJpYWxpemVPYmplY3QoJGNvbnRlbnRvYmopKTsKCSRjb3VudCA9IDA7Cglmb3JlYWNoICgkY29udGVudG9iai0+VGFiTmFtZXMoKSBhcyAkdGFibmFtZSkKCXsKCQkkb2JqUmVzcG9uc2UtPmFkZFNjcmlwdCgiRWxlbWVudC5yZW1vdmVDbGFzc05hbWUoJ2VkaXRhYiIuJGNvdW50LiInLCAnYWN0aXZlJyk7RWxlbWVudC5yZW1vdmVDbGFzc05hbWUoJ2VkaXRhYiIuJGNvdW50LiJfYycsICdhY3RpdmUnKTskKCdlZGl0YWIiLiRjb3VudC4iX2MnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyIpOwoJCSRjb3VudCsrOwoJfQoJJG9ialJlc3BvbnNlLT5hZGRTY3JpcHQoIkVsZW1lbnQuYWRkQ2xhc3NOYW1lKCdlZGl0dGFicHJldmlldycsICdhY3RpdmUnKTtFbGVtZW50LmFkZENsYXNzTmFtZSgnZWRpdHRhYnByZXZpZXdfYycsICdhY3RpdmUnKTskKCdlZGl0dGFicHJldmlld19jJykuc3R5bGUuZGlzcGxheSA9ICcnOyIpOwoJcmV0dXJuICRvYmpSZXNwb25zZS0+Z2V0WE1MKCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZWNvbnRlbnRvYmooJiRjb250ZW50b2JqLCAkcHJldmlldywgJHBhcmFtcyA9IG51bGwpCnsKCWlmICgkcGFyYW1zID09IG51bGwpCgkJJHBhcmFtcyA9ICRfUE9TVDsKCgkkdXNlcmlkID0gZ2V0X3VzZXJpZCgpOwoJJGFkbWluYWNjZXNzID0gY2hlY2tfb3duZXJzaGlwKCR1c2VyaWQsICRjb250ZW50b2JqLT5JZCgpKSB8fCBjaGVja19wZXJtaXNzaW9uKCR1c2VyaWQsICdNb2RpZnkgQW55IFBhZ2UnKTsKCQkKCSNGaWxsIGNvbnRlbnRvYmogd2l0aCBwYXJhbWV0ZXJzCgkkY29udGVudG9iai0+RmlsbFBhcmFtcygkcGFyYW1zKTsKCWlmICgkcHJldmlldykKCXsKCQkkZXJyb3IgPSAkY29udGVudG9iai0+VmFsaWRhdGVEYXRhKCk7Cgl9CgoJaWYgKGlzc2V0KCRwYXJhbXNbIm93bmVyaWQiXSkpCgl7CgkJJGNvbnRlbnRvYmotPlNldE93bmVyKCRwYXJhbXNbIm93bmVyaWQiXSk7Cgl9CgoJJGNvbnRlbnRvYmotPlNldExhc3RNb2RpZmllZEJ5KCR1c2VyaWQpOwoKCSNGaWxsIEFkZGl0aW9uYWwgRWRpdG9ycyAoa2luZCBvZiBrbHVkZ3kpCglpZiAoaXNzZXQoJHBhcmFtc1siYWRkaXRpb25hbF9lZGl0b3JzIl0pKQoJewoJCSRhZGR0YXJyYXkgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRwYXJhbXNbImFkZGl0aW9uYWxfZWRpdG9ycyJdIGFzICRhZGR0X3VzZXJfaWQpCgkJewoJCQkkYWRkdGFycmF5W10gPSAkYWRkdF91c2VyX2lkOwoJCX0KCQkkY29udGVudG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoJGFkZHRhcnJheSk7Cgl9CgllbHNlIGlmICgkYWRtaW5hY2Nlc3MpCgl7CgkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKGFycmF5KCkpOwoJfQp9CgpmdW5jdGlvbiBjb3B5Y29udGVudG9iaigmJGNvbnRlbnRvYmosICRjb250ZW50X3R5cGUsICRwYXJhbXMgPSBudWxsKQp7CglpZiAoJHBhcmFtcyA9PSBudWxsKQoJCSRwYXJhbXMgPSAkX1BPU1Q7CgkkY29udGVudG9iai0+RmlsbFBhcmFtcygkcGFyYW1zKTsKCSRuZXdjb250ZW50dHlwZSA9IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSk7CgkkdG1wb2JqID0gbmV3ICRuZXdjb250ZW50dHlwZTsKCSR0bXBvYmotPlNldElkKCRjb250ZW50b2JqLT5JZCgpKTsKCSR0bXBvYmotPlNldE5hbWUoJGNvbnRlbnRvYmotPk5hbWUoKSk7CgkkdG1wb2JqLT5TZXRNZW51VGV4dCgkY29udGVudG9iai0+TWVudVRleHQoKSk7CgkkdG1wb2JqLT5TZXRUZW1wbGF0ZUlkKCRjb250ZW50b2JqLT5UZW1wbGF0ZUlkKCkpOwoJJHRtcG9iai0+U2V0UGFyZW50SWQoJGNvbnRlbnRvYmotPlBhcmVudElkKCkpOwoJJHRtcG9iai0+U2V0T2xkUGFyZW50SWQoJGNvbnRlbnRvYmotPk9sZFBhcmVudElkKCkpOwoJJHRtcG9iai0+U2V0QWxpYXMoJGNvbnRlbnRvYmotPkFsaWFzKCkpOwoJJHRtcG9iai0+U2V0T3duZXIoJGNvbnRlbnRvYmotPk93bmVyKCkpOwoJJHRtcG9iai0+U2V0QWN0aXZlKCRjb250ZW50b2JqLT5BY3RpdmUoKSk7CgkkdG1wb2JqLT5TZXRJdGVtT3JkZXIoJGNvbnRlbnRvYmotPkl0ZW1PcmRlcigpKTsKCSR0bXBvYmotPlNldE9sZEl0ZW1PcmRlcigkY29udGVudG9iai0+T2xkSXRlbU9yZGVyKCkpOwoJJHRtcG9iai0+U2V0U2hvd0luTWVudSgkY29udGVudG9iai0+U2hvd0luTWVudSgpKTsKCS8vU29tZSBjb250ZW50IHR5cGVzIGRlZmF1bHQgdG8gZmFsc2UgZm9yIGEgcmVhc29uLi4uIGRvbid0IG92ZXJyaWRlIGl0CglpZiAoISghJHRtcG9iai0+bUNhY2hhYmxlICYmICRjb250ZW50b2JqLT5DYWNoYWJsZSgpKSkKCQkkdG1wb2JqLT5TZXRDYWNoYWJsZSgkY29udGVudG9iai0+Q2FjaGFibGUoKSk7CgkkdG1wb2JqLT5TZXRIaWVyYXJjaHkoJGNvbnRlbnRvYmotPkhpZXJhcmNoeSgpKTsKCSR0bXBvYmotPlNldExhc3RNb2RpZmllZEJ5KCRjb250ZW50b2JqLT5MYXN0TW9kaWZpZWRCeSgpKTsKCSR0bXBvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRjb250ZW50b2JqLT5HZXRBZGRpdGlvbmFsRWRpdG9ycygpKTsKCSRjb250ZW50b2JqID0gJHRtcG9iajsKfQoKZnVuY3Rpb24gY3JlYXRldG1wZm5hbWUoJiRjb250ZW50b2JqKQp7CglnbG9iYWwgJGdDbXM7CgkkY29uZmlnID0mICRnQ21zLT5HZXRDb25maWcoKTsKCgkkZGF0YVsiY29udGVudF9pZCJdID0gJGNvbnRlbnRvYmotPklkKCk7CgkkZGF0YVsidGl0bGUiXSA9ICRjb250ZW50b2JqLT5OYW1lKCk7CgkkZGF0YVsibWVudXRleHQiXSA9ICRjb250ZW50b2JqLT5NZW51VGV4dCgpOwoJJGRhdGFbImNvbnRlbnQiXSA9ICRjb250ZW50b2JqLT5TaG93KCk7CgkkZGF0YVsidGVtcGxhdGVfaWQiXSA9ICRjb250ZW50b2JqLT5UZW1wbGF0ZUlkKCk7CgkkZGF0YVsiaGllcmFyY2h5Il0gPSAkY29udGVudG9iai0+SGllcmFyY2h5KCk7CgkKCSR0ZW1wbGF0ZW9iaiA9IFRlbXBsYXRlT3BlcmF0aW9uczo6TG9hZFRlbXBsYXRlQnlJZCgkY29udGVudG9iai0+VGVtcGxhdGVJZCgpKTsKCSRkYXRhWyd0ZW1wbGF0ZSddID0gJHRlbXBsYXRlb2JqLT5jb250ZW50OwoKCSRzdHlsZXNoZWV0b2JqID0gZ2V0X3N0eWxlc2hlZXQoJGNvbnRlbnRvYmotPlRlbXBsYXRlSWQoKSk7CgkkZGF0YVsnZW5jb2RpbmcnXSA9ICRzdHlsZXNoZWV0b2JqWydlbmNvZGluZyddOwoJLy8gJGRhdGFbJ3N0eWxlc2hlZXQnXSA9ICRzdHlsZXNoZWV0b2JqWydzdHlsZXNoZWV0J107CgoJJHRtcGZuYW1lID0gJyc7CglpZiAoaXNfd3JpdGFibGUoJGNvbmZpZ1sicHJldmlld3NfcGF0aCJdKSkKCXsKCQkkdG1wZm5hbWUgPSB0ZW1wbmFtKCRjb25maWdbInByZXZpZXdzX3BhdGgiXSwgImNtc3ByZXZpZXciKTsKCX0KCWVsc2UKCXsKCQkkdG1wZm5hbWUgPSB0ZW1wbmFtKFRNUF9DQUNIRV9MT0NBVElPTiwgImNtc3ByZXZpZXciKTsKCX0KCSRoYW5kbGUgPSBmb3BlbigkdG1wZm5hbWUsICJ3Iik7Cglmd3JpdGUoJGhhbmRsZSwgc2VyaWFsaXplKCRkYXRhKSk7CglmY2xvc2UoJGhhbmRsZSk7CgkKCXJldHVybiAkdG1wZm5hbWU7Cn0KCiNHZXQgYSBsaXN0IG9mIGNvbnRlbnQgdHlwZXMgYW5kIHBpY2sgYSBkZWZhdWx0IGlmIG5lY2Vzc2FyeQokZXhpc3Rpbmd0eXBlcyA9IEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKTsKJGNvbnRlbnRfdHlwZSA9ICIiOwppZiAoaXNzZXQoJF9QT1NUWyJjb250ZW50X3R5cGUiXSkpCnsKCSRjb250ZW50X3R5cGUgPSAkX1BPU1RbImNvbnRlbnRfdHlwZSJdOwp9CmVsc2UKewoJaWYgKGlzc2V0KCRleGlzdGluZ3R5cGVzKSAmJiBjb3VudCgkZXhpc3Rpbmd0eXBlcykgPiAwKQoJewoJCSRjb250ZW50X3R5cGUgPSAnY29udGVudCc7Cgl9CgllbHNlCgl7CgkJJGVycm9yID0gIjxwPk5vIGNvbnRlbnQgdHlwZXMgbG9hZGVkITwvcD4iOwkKCX0KfQoKJGNvbnRlbnRvYmogPSAiIjsKaWYgKGlzc2V0KCRfUE9TVFsic2VyaWFsaXplZF9jb250ZW50Il0pKQp7CgkkY29udGVudG9iaiA9IFVuc2VyaWFsaXplT2JqZWN0KCRfUE9TVFsic2VyaWFsaXplZF9jb250ZW50Il0pOwoJaWYgKHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCRjb250ZW50b2JqKSkgIT0gc3RydG9sb3dlcigkY29udGVudF90eXBlKSkKCXsKCQkjRmlsbCB1cCB0aGUgZXhpc3Rpbmcgb2JqZWN0IHdpdGggdmFsdWVzIGluIGZvcm0KCQkjQ3JlYXRlIG5ldyBvYmplY3QKCQkjQ29weSBpbXBvcnRhbnQgZmllbGRzIHRvIG5ldyBvYmplY3QKCQkjUHV0IG5ldyBvYmplY3Qgb24gdG9wIG9mIG9sZCBvbmUKCQljb3B5Y29udGVudG9iaigkY29udGVudG9iaiwgJGNvbnRlbnRfdHlwZSk7Cgl9Cn0KCiNHZXQgY3VycmVudCB1c2VyaWQgYW5kIG1ha2Ugc3VyZSB0aGV5IGhhdmUgcGVybWlzc2lvbiB0byBhZGQgc29tZXRoaW5nCiR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CiRhY2Nlc3MgPSBjaGVja19vd25lcnNoaXAoJHVzZXJpZCwgJGNvbnRlbnRfaWQpIHx8IGNoZWNrX3Blcm1pc3Npb24oJHVzZXJpZCwgJ01vZGlmeSBBbnkgUGFnZScpOwokYWRtaW5hY2Nlc3MgPSAkYWNjZXNzOwppZiAoISRhY2Nlc3MpCnsKCSRhY2Nlc3MgPSBjaGVja19hdXRob3JzaGlwKCR1c2VyaWQsICRjb250ZW50X2lkKTsKfQoKaWYgKCRhY2Nlc3MpCnsKCWlmICgkc3VibWl0IHx8ICRhcHBseSkKCXsKCQkjRmlsbCBjb250ZW50b2JqIHdpdGggcGFyYW1ldGVycwoJCSRjb250ZW50b2JqLT5GaWxsUGFyYW1zKCRfUE9TVCk7CgoJCS8vIElmIGEgbmV3IHBhZ2Ugd2FzIGNob3NlbiBmb3IgdGhpcyBwYWdlCgkJaWYgKCRjb250ZW50b2JqLT5tUGFyZW50UGFnZUlkICE9ICRfUE9TVFsncGFyZW50X3BhZ2VfaWQnXSkKCQl7CgkJCWRlYnVnX2J1ZmZlcignUGFnZSBCbG9jayBpcyBtb3ZpbmcgdG8gYSBuZXcgcGFnZScgLiBfX0xJTkVfXyk7CgkJCS8vIFVwZGF0ZSBwYWdlIHdpdGggbmV3IHBhcmVudCBwYWdlCgkJCSRjb250ZW50b2JqLT5tUGFyZW50UGFnZUlkID0gJF9QT1NUWydwYXJlbnRfcGFnZV9pZCddOwoJCQkvLyBEb24ndCBtYWtlIGl0IGEgY2hpbGQgcGFnZSBzbyBpdCBkb2Vzbid0IGdldCBvcnBoYW5lZAoJCQkvLyBKdXN0IG1ha2UgaXQgdG9wIGxldmVsCgkJCSRjb250ZW50b2JqLT5tUGFyZW50SWQgPSAtMTsKCgkJCS8vIE1ha2Ugc3VyZSBhbGwgY2hpbGRyZW4gc3RheSBvbiB0aGUgc2FtZSBwYWdlCgkJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIHBhcmVudF9wYWdlX2lkID0gPyBXSEVSRSBwYXJlbnRfaWQgPSA/IjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoCgkJCQkkX1BPU1RbJ3BhcmVudF9wYWdlX2lkJ10sCgkJCQkkY29udGVudG9iai0+SWQoKQoJCQkJKSk7CgoJCQkKCQl9CgoJCSRlcnJvciA9ICRjb250ZW50b2JqLT5WYWxpZGF0ZURhdGEoKTsKCgkJaWYgKGlzc2V0KCRfUE9TVFsib3duZXJpZCJdKSkKCQl7CgkJCSRjb250ZW50b2JqLT5TZXRPd25lcigkX1BPU1RbIm93bmVyaWQiXSk7CgkJfQoKCQkjRmlsbCBBZGRpdGlvbmFsIEVkaXRvcnMgKGtpbmQgb2Yga2x1ZGd5KQoJCWlmIChpc3NldCgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdKSkKCQl7CgkJCSRhZGR0YXJyYXkgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdIGFzICRhZGR0X3VzZXJfaWQpCgkJCXsKCQkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJCX0KCQkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRhZGR0YXJyYXkpOwoJCX0KCQllbHNlIGlmICgkYWRtaW5hY2Nlc3MpCgkJewoJCQkkY29udGVudG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoYXJyYXkoKSk7CgkJfQoKCQlpZiAoJGVycm9yID09PSBGQUxTRSkKCQl7CgkJCSRjb250ZW50b2JqLT5TYXZlKCk7CgkJCUJsb2NrQ29udGVudE1hbmFnZXI6OlNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpOwoJCQkvL1VwZGF0ZSBzZWFyY2ggaW5kZXgKCQkJJG1vZHVsZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1NlYXJjaCcpOwoJCQlpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCQkJICB7CgkJCSAgICAkbW9kdWxlLT5BZGRXb3JkcygkdGhpcy0+R2V0TmFtZSgpLCAkY29udGVudG9iai0+SWQoKSwgJ2Jsb2NrJywgJGNvbnRlbnRvYmotPk5hbWUoKSAuICcgJyAuJGNvbnRlbnRvYmotPkdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnRfZW4nKSk7CgkJCSAgfQoJCQlpZiAoJHN1Ym1pdCkKCQkJewoJCQkJYXVkaXQoJGNvbnRlbnRvYmotPklkKCksICRjb250ZW50b2JqLT5OYW1lKCksICdFZGl0ZWQgQ29udGVudCcpOwoJCQkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ2Jsb2NrX3VwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ2Jsb2NrcycpOwoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsKCQkJfQoJCX0KCX0KCWVsc2UgaWYgKCRjb250ZW50X2lkICE9IC0xICYmICEkcHJldmlldyAmJiBzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGVudG9iaikpICE9IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSkpCgl7CgkJJGNvbnRlbnRvYmogPSBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpMb2FkQ29udGVudEZyb21JZCgkY29udGVudF9pZCk7CgkJJGNvbnRlbnRfdHlwZSA9ICRjb250ZW50b2JqLT5UeXBlKCk7CgkJJGNvbnRlbnRvYmotPlNldExhc3RNb2RpZmllZEJ5KCR1c2VyaWQpOwoJfQoJZWxzZQoJewoJCXVwZGF0ZWNvbnRlbnRvYmooJGNvbnRlbnRvYmosICRwcmV2aWV3KTsKCX0KfQoKaWYgKHN0cmxlbigkY29udGVudG9iai0+TmFtZSgpKSA+IDApCnsKCSRDTVNfQURNSU5fU1VCVElUTEUgPSAkY29udGVudG9iai0+TmFtZSgpOwp9CgppbmNsdWRlX29uY2UoImhlYWRlci5waHAiKTsKCiR0bXBmbmFtZSA9ICcnOwoKaWYgKCEkYWNjZXNzKQp7CgllY2hvICI8ZGl2IGNsYXNzPVwicGFnZWVycm9yY29udGFpbmVyXCI+PHAgY2xhc3M9XCJwYWdlZXJyb3JcIj4iLmxhbmcoJ25vYWNjZXNzdG8nLGFycmF5KGxhbmcoJ2VkaXRwYWdlJykpKS4iPC9wPjwvZGl2PiI7Cn0KZWxzZQp7CgkjR2V0IGEgbGlzdCBvZiBjb250ZW50X3R5cGVzIGFuZCBidWlsZCB0aGUgZHJvcGRvd24gdG8gc2VsZWN0IG9uZQoJJHR5cGVzZHJvcGRvd24gPSAnPHNlbGVjdCBuYW1lPSJjb250ZW50X3R5cGUiIG9uY2hhbmdlPSJkb2N1bWVudC5jb250ZW50Zm9ybS5zdWJtaXQoKSIgY2xhc3M9InN0YW5kYXJkIj4nOwoJZm9yZWFjaCAoJGV4aXN0aW5ndHlwZXMgYXMgJG9uZXR5cGU9PiRuYW1lKQoJewoJCSR0eXBlc2Ryb3Bkb3duIC49ICI8b3B0aW9uIHZhbHVlPVwiJG9uZXR5cGVcIiI7CgkJaWYgKCRvbmV0eXBlID09ICRjb250ZW50X3R5cGUpCgkJewoJCQkkdHlwZXNkcm9wZG93biAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOwoJCX0KCQkkdHlwZXNkcm9wZG93biAuPSAiPiIuJG5hbWUuIjwvb3B0aW9uPiI7Cgl9CgkkdHlwZXNkcm9wZG93biAuPSAiPC9zZWxlY3Q+IjsKCglpZiAoRkFMU0UgPT0gZW1wdHkoJGVycm9yKSkKCXsKICAgIAllY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7Cgl9CgllbHNlIGlmICgkcHJldmlldykKCXsKCQkkdG1wZm5hbWUgPSBjcmVhdGV0bXBmbmFtZSgkY29udGVudG9iaik7Cgk/PgoKPD9waHAKCn0KCiMkY29udGVudGFycmF5ID0gJGNvbnRlbnRvYmotPkVkaXRBc0FycmF5KHRydWUsIDAsICRhZG1pbmFjY2Vzcyk7CiMkY29udGVudGFycmF5MiA9ICRjb250ZW50b2JqLT5FZGl0QXNBcnJheSh0cnVlLCAxLCAkYWRtaW5hY2Nlc3MpOwoKJHRhYm5hbWVzID0gJGNvbnRlbnRvYmotPlRhYk5hbWVzKCk7Cgo/PgoKCTxkaXYgaWQ9InBhZ2VfdGFicyIgc3R5bGU9IndpZHRoOjEwMCU7Ij4KCQk8P3BocAoJCSRjb3VudCA9IDA7CgoJCSNXZSBoYXZlIHByZXZpZXcsIGJ1dCBubyB0YWJzCgkJaWYgKGNvdW50KCR0YWJuYW1lcykgPT0gMCkKCQl7CgkJCT8+CgkJCTxkaXYgaWQ9ImVkaXRhYjAiPjw/cGhwIGVjaG8gbGFuZygnY29udGVudCcpPz48L2Rpdj4KCQkJPD9waHAKCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCAoJHRhYm5hbWVzIGFzICRvbmV0YWIpCgkJCXsKCQkJCT8+CgkJCQk8ZGl2IGlkPSJlZGl0YWI8P3BocCBlY2hvICRjb3VudD8+Ij48P3BocCBlY2hvICRvbmV0YWI/PjwvZGl2PgoJCQkJPD9waHAKCQkJCSRjb3VudCsrOwoJCQl9CgkJfQoJCQoJCSNNYWtlIGEgcHJldmlldyB0YWIKCQlpZiAoJGNvbnRlbnRvYmotPm1QcmV2aWV3KQoJCXsKCQkJZWNobyAnPGRpdiBpZD0iZWRpdHRhYnByZXZpZXciJy4oJHRtcGZuYW1lIT0nJz8nIGNsYXNzPSJhY3RpdmUiJzonJykuJyBvbmNsaWNrPSIjI0lOTElORVNVQk1JVFNUVUZGR09FU0hFUkUjI3hhamF4X2FqYXhwcmV2aWV3KHhhamF4LmdldEZvcm1WYWx1ZXMoXCdjb250ZW50Zm9ybVwnKSk7cmV0dXJuIGZhbHNlOyI+Jy5sYW5nKCdwcmV2aWV3JykuJzwvZGl2Pic7CgkJfQoKCQkKCQllY2hvICc8L2Rpdj4nOwoJCWVjaG8gJzxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+JzsKCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJjb250ZW50Zm9ybSIgaWQ9ImNvbnRlbnRmb3JtIiMjRk9STVNVQk1JVFNUVUZGR09FU0hFUkUjIz4nOwo/Pgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ic2VyaWFsaXplZF9jb250ZW50IiBuYW1lPSJzZXJpYWxpemVkX2NvbnRlbnQiIHZhbHVlPSI8P3BocCBlY2hvIFNlcmlhbGl6ZU9iamVjdCgkY29udGVudG9iaik7ID8+IiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb250ZW50X2lkIiB2YWx1ZT0iPD9waHAgZWNobyAkY29udGVudF9pZD8+IiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0iPD9waHAgZWNobyAkcGFnZWxpc3RfaWQ7ID8+IiAvPgo8ZGl2IGlkPSJwYWdlX2NvbnRlbnQiPgo8P3BocAokc3VibWl0X2J1dHRvbnMgPSAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CjxwIGNsYXNzPSJwYWdlaW5wdXQiPgogPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0YnV0dG9uIiB2YWx1ZT0iJy5sYW5nKCdzdWJtaXQnKS4nIiBjbGFzcz0icGFnZWJ1dHRvbiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvbmhvdmVyXCciIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvblwnIiB0aXRsZT0iJy5sYW5nKCdzdWJtaXRkZXNjcmlwdGlvbicpLiciIC8+JzsKaWYgKGlzc2V0KCRjb250ZW50b2JqLT5tUHJldmlldykgJiYgJGNvbnRlbnRvYmotPm1QcmV2aWV3ID09IHRydWUpCiAgewogICAgJHN1Ym1pdF9idXR0b25zIC49ICcgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0icHJldmlld2J1dHRvbiIgdmFsdWU9IicubGFuZygncHJldmlldycpLiciIGNsYXNzPSJwYWdlYnV0dG9uIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uaG92ZXJcJyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uXCciIHRpdGxlPSInLmxhbmcoJ3ByZXZpZXdkZXNjcmlwdGlvbicpLiciIG9uY2xpY2s9IiMjSU5MSU5FU1VCTUlUU1RVRkZHT0VTSEVSRSMjeGFqYXhfYWpheHByZXZpZXcoeGFqYXguZ2V0Rm9ybVZhbHVlcyhcJ2NvbnRlbnRmb3JtXCcpKTtyZXR1cm4gZmFsc2U7IiAvPic7CiAgfQokc3VibWl0X2J1dHRvbnMgLj0gJyA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJjYW5jZWwiIHZhbHVlPSInLmxhbmcoJ2NhbmNlbCcpLiciIGNsYXNzPSJwYWdlYnV0dG9uIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycubGFuZygnY29uZmlybWNhbmNlbCcpLidcJyk7IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uaG92ZXJcJyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uXCciIHRpdGxlPSInLmxhbmcoJ2NhbmNlbGRlc2NyaXB0aW9uJykuJyIgLz4nOwokc3VibWl0X2J1dHRvbnMgLj0gJyA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhcHBseWJ1dHRvbiIgdmFsdWU9IicubGFuZygnYXBwbHknKS4nIiBjbGFzcz0icGFnZWJ1dHRvbiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvbmhvdmVyXCciIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvblwnIiB0aXRsZT0iJy5sYW5nKCdhcHBseWRlc2NyaXB0aW9uJykuJyIgLz4KPC9wPgo8L2Rpdj4nOwovL2VjaG8gJHN1Ym1pdF9idXR0b25zOwoJCSRudW1iZXJvZnRhYnMgPSBjb3VudCgkdGFibmFtZXMpOwoJCSRzaG93dGFicyA9IDE7CgkJaWYgKCRudW1iZXJvZnRhYnMgPT0gMCkKCQl7CgkJCSRudW1iZXJvZnRhYnMgPSAxOwoJCQkkc2hvd3RhYnMgPSAxOwoJCX0KCQlmb3IgKCRjdXJyZW50dGFiID0gMDsgJGN1cnJlbnR0YWIgPCAkbnVtYmVyb2Z0YWJzOyAkY3VycmVudHRhYisrKQoJCXsKCQkJaWYgKCRzaG93dGFicyA9PSAxKQoJCQl7CgkJCQk/PjxkaXYgaWQ9ImVkaXRhYjw/cGhwIGVjaG8gJGN1cnJlbnR0YWIgPz5fYyI+PD9waHAKCQkJfQoJCQlpZiAoJGN1cnJlbnR0YWIgPT0gMCkKCQkJewoJCQkJZWNobyAkc3VibWl0X2J1dHRvbnM7CgkJCQk/PgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8cCBjbGFzcz0icGFnZXRleHQiPjw/cGhwIGVjaG8gbGFuZygnY29udGVudHR5cGUnKTsgPz46PC9wPgoJCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjw/cGhwIGVjaG8gJHR5cGVzZHJvcGRvd247ID8+PC9wPgoJCQkJPC9kaXY+CgkJCQk8P3BocAoJCQl9CgkJCSRjb250ZW50YXJyYXkgPSAkY29udGVudG9iai0+RWRpdEFzQXJyYXkoZmFsc2UsICRjdXJyZW50dGFiLCAkYWRtaW5hY2Nlc3MpOwoJCQlmb3IoJGk9MDskaTxjb3VudCgkY29udGVudGFycmF5KTskaSsrKQoJCQl7CgkJCQk/PgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8cCBjbGFzcz0icGFnZXRleHQiPjw/cGhwIGVjaG8gJGNvbnRlbnRhcnJheVskaV1bMF07ID8+PC9wPgoJCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjw/cGhwIGVjaG8gJGNvbnRlbnRhcnJheVskaV1bMV07ID8+PC9wPgoJCQkJPC9kaXY+CgkJCQk8P3BocAoJCQl9CgkJCT8+CgkJCTxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+CgkJPC9kaXY+CgkJPD9waHAKCQl9CgkJaWYgKCRjb250ZW50b2JqLT5tUHJldmlldykKCQl7CgkJCWVjaG8gJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+PGRpdiBpZD0iZWRpdHRhYnByZXZpZXdfYyInLigkdG1wZm5hbWUhPScnPycgY2xhc3M9ImFjdGl2ZSInOicnKS4nPic7CgkJCQk/PgoJCQkJCTxpZnJhbWUgbmFtZT0icHJldmlld2ZyYW1lIiBjbGFzcz0icHJldmlldyIgaWQ9InByZXZpZXdmcmFtZSI8P3BocCBpZiAoJHRtcGZuYW1lICE9ICcnKSB7ID8+IHNyYz0iPD9waHAgZWNobyAkY29uZmlnWyJyb290X3VybCJdID8+L3ByZXZpZXcucGhwP3RtcGZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoYmFzZW5hbWUoJHRtcGZuYW1lKSk/PiI8P3BocCB9ID8+PjwvaWZyYW1lPgoJCQkJPD9waHAKCQkJZWNobyAnPC9kaXY+PC9kaXY+JzsKCQkJZWNobyAnPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4nOwoJCX0KCQllY2hvICRzdWJtaXRfYnV0dG9uczsKCQk/PgoJPC9kaXY+Cgk8L2Zvcm0+Cjw/cGhwCgp9CgojIHZpbTp0cz00IHN3PTQgbm9ldAo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpIA0KICB7DQoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJyk7DQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7DQogIH0NCmlmKCEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ1VzZSBQYWdlQmxvY2tzJyApICkgZXhpdDsNCiR0aGVtZU9iamVjdCA9ICYkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ107DQokdGVtcGxhdGVuYW1lID0gKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlbmFtZSddKSA/ICRwYXJhbXNbJ3RlbXBsYXRlbmFtZSddIDogJycpOw0KJG5ld3RlbXBsYXRlbmFtZSA9IChpc3NldCgkcGFyYW1zWyduZXd0ZW1wbGF0ZW5hbWUnXSkgPyAkcGFyYW1zWyduZXd0ZW1wbGF0ZW5hbWUnXSA6ICcnKTsNCiR0ZW1wbGF0ZWNvbnRlbnQgPSAoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10pID8gJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10gOiAnJyk7DQoNCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgfHwgaXNzZXQoJHBhcmFtc1snYXBwbHknXSkpDQp7DQoJaWYgKCRuZXd0ZW1wbGF0ZW5hbWUgIT0gIiIpDQoJew0KCQkkZXJyb3IgPSBmYWxzZTsNCgkJaWYgKCRuZXd0ZW1wbGF0ZW5hbWUgIT0gJHRlbXBsYXRlbmFtZSkNCgkJew0KCQkJaWYgKCR0aGlzLT5HZXRUZW1wbGF0ZSgkbmV3dGVtcGxhdGVuYW1lKSAhPSAnJykNCgkJCXsNCgkJCQkkdGhlbWVPYmplY3QgPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ107DQoJCQkJZWNobyAkdGhlbWVPYmplY3QtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9ydGVtcGxhdGVuYW1lZXhpc3RzJykpOw0KCQkJCSRuZXd0ZW1wbGF0ZW5hbWUgPSAkdGVtcGxhdGVuYW1lOw0KCQkJCSRlcnJvciA9IHRydWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gU2VlbXMgYXMgdGhvdWdoIHRoaXMgbGluZSB3YXMgY2F1c2luZyBhZGRpbmcgYSB0ZW1wbGF0ZSANCgkJCQkvLyAgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSB0aGF0IGFscmVhZHkgZXhpc3RlZA0KCQkJCS8vICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgkdGVtcGxhdGVuYW1lKTsNCgkJCX0NCgkJfQ0KCQkNCgkJaWYgKCEkZXJyb3IpDQoJCXsNCgkJCSR0aGlzLT5TZXRUZW1wbGF0ZSgkbmV3dGVtcGxhdGVuYW1lLCAkdGVtcGxhdGVjb250ZW50KTsNCgkJCWlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpDQoJCQl7DQoJCQkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ3RlbXBsYXRlc2F2ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOw0KCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOw0KCQkJfSBlbHNlIHsNCgkJCQkkdGVtcGxhdGVuYW1lID0gJG5ld3RlbXBsYXRlbmFtZTsNCgkJCX0NCgkJfQ0KDQoJfQ0KCWVsc2UNCgl7DQoJCWVjaG8gJHRoaXMtPmxhbmcoJ25vbmFtZScpOw0KCX0NCn0NCmVsc2UNCgkkdGVtcGxhdGVjb250ZW50ID0gJHRoaXMtPkdldFRlbXBsYXRlKCR0ZW1wbGF0ZW5hbWUpOw0KDQplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsNCmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigndGVtcGxhdGUnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZScpKTsNCmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignaGVscCcsJHRoaXMtPkxhbmcoJ3RlbXBsYXRlX2hlbHAnKSk7DQplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7DQplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsNCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJ0ZW1wbGF0ZSIpOw0KDQplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkKTsNCg0KZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAndGVtcGxhdGVuYW1lJywgJHRlbXBsYXRlbmFtZSk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignbmFtZXRleHQnLCAkdGhpcy0+TGFuZygnbmFtZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignbmFtZWlucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICduZXd0ZW1wbGF0ZW5hbWUnLCAkdGVtcGxhdGVuYW1lLCAzMCwgMjU1KSk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignY29udGVudHRleHQnLCAkdGhpcy0+TGFuZygndGVtcGxhdGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbnRlbnRpbnB1dCcsICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJGlkLCAkdGVtcGxhdGVjb250ZW50LCAndGVtcGxhdGVjb250ZW50JywgJycsICcnLCAnJywgJycsICc4MCcsICcyMCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOw0KDQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXR0ZW1wbGF0ZS50cGwnKTsNCg0KZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOw0KZWNobyAkdGhpcy0+RW5kVGFiKCk7DQplY2hvICR0aGlzLT5TdGFydFRhYigiaGVscCIpOw0KZWNobyAkdGhpcy0+TGFuZygnaGVscF90ZW1wbGF0ZScpOw0KZWNobyAkdGhpcy0+RW5kVGFiKCk7DQplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7DQo/Pg0KDQoNCg0K]]></data>
	</file>
	<file>
	  <filename>/action.recently_updated.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgogIGlmKGVtcHR5KCRwYXJhbXNbJ251bWJlciddKSkKICAgIHsKICAgICAgJG51bWJlciA9IDEwOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgJG51bWJlciA9ICRwYXJhbXNbJ251bWJlciddOwogICAgfQoKJG91dHB1dCA9ICc8dWw+JzsKZ2xvYmFsICRnQ21zOwovLyAkaG0gPSYgJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKLy8gJGhpZXJNYW5hZ2VyID0gJkJsb2NrQ29udGVudE1hbmFnZXI6OkdldEFsbENvbnRlbnRBc0hpZXJhcmNoeShmYWxzZSk7Ci8vICRibG9ja19obSA9ICYkaGllck1hbmFnZXItPmdldFJvb3ROb2RlKCk7CiRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwokZGIgPSAmJGdDbXMtPmRiOwovLyBHZXQgbGlzdCBvZiBtb3N0IHJlY2VudGx5IHVwZGF0ZWQgcGFnZXMgZXhjbHVkaW5nIHRoZSBob21lIHBhZ2UKJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSB0eXBlPSd0ZXh0JyBBTkQgYWN0aXZlID0gMSBPUkRFUiBCWSBtb2RpZmllZF9kYXRlIERFU0MgTElNSVQgIi4kbnVtYmVyOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CmlmKCAhJGRicmVzdWx0ICkKewogICAgZWNobyAnREIgZXJyb3I6ICcuICRkYi0+RXJyb3JNc2coKS4iPGJyLz4iOwp9CndoaWxlICgkZGJyZXN1bHQgJiYgJGJsb2NrID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQp7CiAgICAkY3Vybm9kZSA9JiAkaG0tPmdldE5vZGVCeUlkKCRibG9ja1sncGFyZW50X3BhZ2VfaWQnXSk7CiAgICAkY3VyY29udGVudCA9JiAkY3Vybm9kZS0+R2V0Q29udGVudCgpOwogICAgJG91dHB1dCAuPSAnPGxpPic7CiAgICAkb3V0cHV0IC49ICc8YSBocmVmPSInLiRjdXJjb250ZW50LT5HZXRVUkwoKS4nIycuJGJsb2NrWydjb250ZW50X2FsaWFzJ10uJyI+Jy4kYmxvY2tbJ2NvbnRlbnRfbmFtZSddLic8L2E+JzsKICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkYmxvY2tbJ3RpdGxlYXR0cmlidXRlJ10pKQogICAgICB7Cgkkb3V0cHV0IC49ICc8YnIgLz4nOwoJJG91dHB1dCAuPSAkYmxvY2tbJ3RpdGxlYXR0cmlidXRlJ107CiAgICAgIH0KICAgICRvdXRwdXQgLj0gJzxiciAvPic7CiAgICAkb3V0cHV0IC49ICR0aGlzLT5MYW5nKCdtb2RpZmllZCcpLic6ICcgLiRibG9ja1snbW9kaWZpZWRfZGF0ZSddOwogICAgJG91dHB1dCAuPSAnPC9saT4nOwp9CiRvdXRwdXQgLj0gJzwvdWw+JzsKZWNobyAkb3V0cHV0OwoKPz4gCg==]]></data>
	</file>
	<file>
	  <filename>/action.updateoptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgKSApCnsKICByZXR1cm47Cn0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHR0ZW1wbGF0ZScsICRwYXJhbXNbJ2RlZmF1bHR0ZW1wbGF0ZSddKTsKJHNob3d0b2MgPSAoaXNzZXQoJHBhcmFtc1snc2hvd3RvYyddKSA/ICRwYXJhbXNbJ3Nob3d0b2MnXSA6IDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2hvd3RvYycsICRzaG93dG9jKTsKJHJlZGlyZWN0X29uX2FkZCA9IChpc3NldCgkcGFyYW1zWydyZWRpcmVjdF9vbl9hZGQnXSkgPyAkcGFyYW1zWydyZWRpcmVjdF9vbl9hZGQnXSA6IDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgncmVkaXJlY3Rfb25fYWRkJywgJHJlZGlyZWN0X29uX2FkZCk7CiRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICdvcHRpb25zX3VwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ29wdGlvbnMnKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/classes/class.ImageText.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgSW1hZ2VUZXh0IGV4dGVuZHMgQ01TTW9kdWxlQmxvY2tDb250ZW50VHlwZQp7CglmdW5jdGlvbiBNb2R1bGVOYW1lKCkKCXsKCSAgcmV0dXJuICdQYWdlQmxvY2tzJzsKCX0KCgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGNvbmZpZyA9ICYkZ0Ntcy0+R2V0Q29uZmlnKCk7CgkJJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc191cmwnXTsKCQkkb3V0cHV0ID0gJzxwPjxpbWcgc3JjPSInLiRjb25maWdbJ2ltYWdlX3VwbG9hZHNfdXJsJ10uJy8nLiAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnaW1hZ2UnKTsKCQkkb3V0cHV0IC49ICciIHN0eWxlPSJmbG9hdDonLiR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdvcmllbnRhdGlvbicpLiciIGFsdD0iIiAvPic7CgkJJG91dHB1dCAuPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpIC4gJzxwPic7CgkJcmV0dXJuICRvdXRwdXQ7Cgl9CgoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQoJewoJCSR0aGlzLT5tUHJvcGVydGllcy0+QWRkKCJzdHJpbmciLCAiY29udGVudF9lbiIpOyAvL0ZvciBsYXRlciBsYW5ndWFnZSBzdXBwb3J0CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5BZGQoInN0cmluZyIsICJpbWFnZSIpOyAvL0ZvciBsYXRlciBsYW5ndWFnZSBzdXBwb3J0CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5BZGQoInN0cmluZyIsICJvcmllbnRhdGlvbiIpOyAvL0ZvciBsYXRlciBsYW5ndWFnZSBzdXBwb3J0CgoJCSNUdXJuIG9uIHByZXZpZXcKLy8JCSR0aGlzLT5tUHJldmlldyA9IHRydWU7Cgl9CgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gRWRpdEFzQXJyYXkoJGFkZGluZyA9IGZhbHNlLCAkdGFiID0gMCwgJHNob3dhZG1pbiA9IGZhbHNlKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkY29uZmlnID0gJiRnQ21zLT5HZXRDb25maWcoKTsKCgkJJHJldCA9IGFycmF5KCk7CgkJZ2xvYmFsICRpZDsKCQkkbW9kX3BhcmFtcyA9IEdldE1vZHVsZVBhcmFtZXRlcnMoJGlkKTsKCQkkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJCSRyZXRbXT0gYXJyYXkobGFuZygncGFyZW50JykuJzonLCBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDcmVhdGVIaWVyYXJjaHlEcm9wZG93bigkdGhpcy0+bUlkLCAkdGhpcy0+bVBhcmVudElkLCAncGFyZW50X2lkJywgJG1vZF9wYXJhbXNbJ3BhcmVudF9wYWdlX2lkJ10pKTsKCQkkcmV0W109IGFycmF5KGxhbmcoJ2FjdGl2ZScpLic6JywnPGlucHV0IGNsYXNzPSJwYWdlY2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhY3RpdmUiJy4oJHRoaXMtPm1BY3RpdmU/JyBjaGVja2VkPSJjaGVja2VkIic6JycpLicgLz4nKTsKCQkkcmV0W109IGFycmF5KGxhbmcoJ2NvbnRlbnQnKS4nOicsY3JlYXRlX3RleHRhcmVhKHRydWUsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50X2VuJyksICdjb250ZW50X2VuJykpOwoJCSRyZXRbXT0gYXJyYXkoJHRoaXMtPkxhbmcoJ29yaWVudGF0aW9uJykuJzonLCAkbW9kdWxlLT5DcmVhdGVJbnB1dERyb3Bkb3duKCcnLCAnb3JpZW50YXRpb24nLCBhcnJheSggJ0xlZnQnID0+ICdsZWZ0JywgJ1JpZ2h0JyA9PiAncmlnaHQnKSwgLTEsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdvcmllbnRhdGlvbicpKSk7CgkJCi8qCiAgCQkvLyBJIHdhbnRlZCB0byB1c2UgdGhlIEltYWdlTWFuYWdlciBmb3IgdGhpcyBwdXJwb3NlLAogIAkJLy8gYnV0IGNvdWxkbid0IGdldCB0aGlzIHRvIHdvcmsgeWV0CiAgCQlyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy8uLi8uLi8uLi9saWIvZmlsZW1hbmFnZXIvSW1hZ2VNYW5hZ2VyL2NvbmZpZy5pbmMucGhwJyk7CiAgICAgICAgcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvLi4vLi4vLi4vbGliL2ZpbGVtYW5hZ2VyL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ltYWdlTWFuYWdlci5waHAnKTsKCQkkaW0gPSBuZXcgSW1hZ2VNYW5hZ2VyKCRJTUNvbmZpZyk7CgkJdmFyX2R1bXAoJGltLT5nZXRGaWxlcygneWJsb2Nrcy8nKSk7CgkJJHJldFtdPSBhcnJheShsYW5nKCdmaWxlJykuJzonLCIiKTsKKi8KCgkJJGlucHV0X2RpciA9ICRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddIC4gJy8nOwoJCSRpbWFnZXMgPSBhcnJheSgpOwoJCWlmIChpc19kaXIoJGlucHV0X2RpcikgJiYgJGRoID0gb3BlbmRpcigkaW5wdXRfZGlyKSkgewoJCQl3aGlsZSAoKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlCgkJCQkJCSYmICRmaWxlbmFtZSkgewoJCQkJaWYgKCRmaWxlbmFtZT09Jy4nKSBjb250aW51ZTsKCQkJCWlmICgkZmlsZW5hbWU9PScuLicpIGNvbnRpbnVlOwoJCQkJaWYgKHN1YnN0cigkZmlsZW5hbWUsMCw2KSA9PSAndGh1bWJfJykgY29udGludWU7CgkJCQkkZXh0ZW5zaW9uID0gc3Vic3RyKCRmaWxlbmFtZSwtMyk7CgkJCQlpZiAoJGV4dGVuc2lvbiA9PSAncG5nJwoJCQkJCQl8fCAkZXh0ZW5zaW9uID09ICdqcGcnCgkJCQkJCXx8ICRleHRlbnNpb24gPT0gJ2dpZicpIHsKCQkJCQkkdGh1bWJuYW1lID0gJ3RodW1iXycuJGZpbGVuYW1lOwoJCQkJCSRpbWFnZXNbJGZpbGVuYW1lXSA9ICRmaWxlbmFtZTsKCQkJCX0KCQkJfQoJCQljbG9zZWRpcigkZGgpOwoJCX0KCQkkcmV0W109IGFycmF5KCR0aGlzLT5MYW5nKCdpbWFnZScpLic6JywgJG1vZHVsZS0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJ2ltYWdlJywgJGltYWdlcywgLTEsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdpbWFnZScpKSk7CgoJCXJldHVybiAkcmV0OwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFZhbGlkYXRlRGF0YSgpCgl7CgkJJGVycm9ycyA9IGFycmF5KCk7CgkJCS8qCgkJaWYgKCR0aGlzLT5tUGFyZW50SWQgPT0gLTEpCgkJewoJCQkkZXJyb3JzW109IGxhbmcoJ25vZmllbGRnaXZlbicsYXJyYXkobGFuZygncGFyZW50JykpKTsKCQkJJHJlc3VsdCA9IGZhbHNlOwoJCX0KCQkJKi8KCQlyZXR1cm4gKGNvdW50KCRlcnJvcnMpID4gMCA/ICRlcnJvcnMgOiBmYWxzZSk7Cgl9CgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gRmlsbFBhcmFtcygkcGFyYW1zKQoJewoJCWlmIChpc3NldCgkcGFyYW1zKSkKCQl7CgkJCSRwYXJhbWV0ZXJzID0gYXJyYXkoJ2NvbnRlbnRfZW4nLCAnb3JpZW50YXRpb24nLCAnaW1hZ2UnKTsKCQkJZm9yZWFjaCAoJHBhcmFtZXRlcnMgYXMgJG9uZXBhcmFtKQoJCQl7CgkJCQlpZiAoaXNzZXQoJHBhcmFtc1skb25lcGFyYW1dKSkKCQkJCXsKCQkJCQkkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkb25lcGFyYW0sICRwYXJhbXNbJG9uZXBhcmFtXSk7CgkJCQl9CgkJCX0KCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCQkJewoJCQkJaWYgKCR0aGlzLT5tUGFyZW50SWQgIT0gJHBhcmFtc1sncGFyZW50X2lkJ10pCgkJCQl7CgkJCQkJJHRoaXMtPm1IaWVyYXJjaHkgPSAnJzsKCQkJCQkkdGhpcy0+bUl0ZW1PcmRlciA9IC0xOwoJCQkJfQoJCQkJJHRoaXMtPm1QYXJlbnRJZCA9ICRwYXJhbXNbJ3BhcmVudF9pZCddOwoJCQkJCS8vCQkgIGRpZSgkdGhpcy0+bVBhcmVudElkKTsKCQkJfQkKCQkJJHRoaXMtPm1OYW1lID0gc3Vic3RyKCRwYXJhbXNbJ2NvbnRlbnRfZW4nXSwgMCwgMzApIC4gJ1suLl0nOwoJCQkkdGhpcy0+bVNob3dJbk1lbnUgPSBmYWxzZTsKCSAgICAgIAoJCQlpZiAoaXNzZXQoJHBhcmFtc1snYWN0aXZlJ10pKQoJCQl7CgkJCQkkdGhpcy0+bUFjdGl2ZSA9IHRydWU7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+bUFjdGl2ZSA9IGZhbHNlOwoJCQl9CgoJCQkvLyBUT0RPCgkJCSR0aGlzLT5tQ2FjaGFibGUgPSBmYWxzZTsKCQl9Cgl9CgoKCS8qIG92ZXJyaWRlICovCglmdW5jdGlvbiBGcmllbmRseU5hbWUoKQoJewoJICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ltYWdldGV4dCcpOwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFdhbnRzQ2hpbGRyZW4oKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCS8qIG92ZXJyaWRlICovCiAgICBmdW5jdGlvbiBIYXNVc2FibGVMaW5rKCkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/classes/class.PageBlocksContent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyAoYykyMDA0IGJ5IFRlZCBLdWxwICh0ZWRrdWxwQHVzZXJzLnNmLm5ldCkKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL2Ntc21hZGVzaW1wbGUub3JnCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgQlVUIHdpdGhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQojCiMkSWQ6IENvbnRlbnQuaW5jLnBocCAzNDY1IDIwMDYtMTAtMDkgMTQ6MDQ6NDdaIGRpdHRtYW5uICQKCmNsYXNzIFBhZ2VCbG9ja3NDb250ZW50IGV4dGVuZHMgQ01TTW9kdWxlQ29udGVudFR5cGUKewogICAgdmFyICRhZGRpdGlvbmFsQ29udGVudEJsb2NrczsKICAgIHZhciAkYWRkdENvbnRlbnRCbG9ja3NMb2FkZWQ7CgkKICAgIGZ1bmN0aW9uIENvbnRlbnQoKQogICAgewoJJHRoaXMtPkNvbnRlbnRCYXNlKCk7CgkkdGhpcy0+bVByb3BlcnRpZXMtPlNldEFsbG93ZWRQcm9wZXJ0eU5hbWVzKGFycmF5KCdjb250ZW50X2VuJykpOwoJJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzID0gYXJyYXkoKTsKCSR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9IGZhbHNlOwogICAgfQoJCiAgICBmdW5jdGlvbiBGcmllbmRseU5hbWUoKQogICAgewoJcmV0dXJuICdQYWdlQmxvY2tzIENvbnRlbnQnOwogICAgfQoKICAgIGZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQogICAgewoJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5BZGQoInN0cmluZyIsICJjb250ZW50X2VuIik7IC8vRm9yIGxhdGVyIGxhbmd1YWdlIHN1cHBvcnQKCgkjVHVybiBvbiBwcmV2aWV3CgkkdGhpcy0+bVByZXZpZXcgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogVXNlIHRoZSBSZWFkeUZvckVkaXQgY2FsbGJhY2sgdG8gZ2V0IHRoZSBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzIGxvYWRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gUmVhZHlGb3JFZGl0KCkKICAgIHsKCSR0aGlzLT5HZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldFRhYkRlZmluaXRpb25zKCkKICAgIHsKCXJldHVybiBhcnJheSgnQmFzaWMnLCAnQWR2YW5jZWQnKTsKCSNyZXR1cm4gYXJyYXkoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBGaWxsUGFyYW1zKCRwYXJhbXMpCiAgICB7CglnbG9iYWwgJGdDbXM7CgkkY29uZmlnID0gJGdDbXMtPmNvbmZpZzsKCglpZiAoaXNzZXQoJHBhcmFtcykpCgl7CgkgICAgJHBhcmFtZXRlcnMgPSBhcnJheSgnY29udGVudF9lbicpOwoKCSAgICAvL3BpY2sgdXAgdGhlIHRlbXBsYXRlIGlkIGJlZm9yZSB3ZSBkbyBwYXJhbWV0ZXJzCgkgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pKQoJICAgIHsKCQlpZiAoJHRoaXMtPm1UZW1wbGF0ZUlkICE9ICRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pCgkJewoJCSAgICAkdGhpcy0+YWRkdENvbnRlbnRCbG9ja3NMb2FkZWQgPSBmYWxzZTsKCQl9CgkJJHRoaXMtPm1UZW1wbGF0ZUlkID0gJHBhcmFtc1sndGVtcGxhdGVfaWQnXTsKCSAgICB9CgoJICAgIC8vIGFkZCBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzCgkgICAgJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7CgkgICAgZm9yZWFjaCgkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3MgYXMgJGJsb2NrTmFtZSA9PiAkYmxvY2tOYW1lSWQpCgkgICAgewoJCSRwYXJhbWV0ZXJzW10gPSAkYmxvY2tOYW1lSWRbJ2lkJ107CgkgICAgfQoJCQkKCSAgICBmb3JlYWNoICgkcGFyYW1ldGVycyBhcyAkb25lcGFyYW0pCgkgICAgewoJCWlmIChpc3NldCgkcGFyYW1zWyRvbmVwYXJhbV0pKQoJCXsKCQkgICAgJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtLCAkcGFyYW1zWyRvbmVwYXJhbV0pOwoJCX0KCSAgICB9CgkgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3RpdGxlJ10pKQoJICAgIHsKCQkkdGhpcy0+bU5hbWUgPSAkcGFyYW1zWyd0aXRsZSddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1snbWV0YWRhdGEnXSkpCgkgICAgewoJCSR0aGlzLT5tTWV0YWRhdGEgPSAkcGFyYW1zWydtZXRhZGF0YSddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1snYWNjZXNza2V5J10pKQoJICAgIHsKCQkkdGhpcy0+bUFjY2Vzc0tleSA9ICRwYXJhbXNbJ2FjY2Vzc2tleSddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1sndGl0bGVhdHRyaWJ1dGUnXSkpCgkgICAgewoJCSR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUgPSAkcGFyYW1zWyd0aXRsZWF0dHJpYnV0ZSddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1sndGFiaW5kZXgnXSkpCgkgICAgewoJCSR0aGlzLT5tVGFiSW5kZXggPSAkcGFyYW1zWyd0YWJpbmRleCddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1snbWVudXRleHQnXSkpCgkgICAgewoJCSR0aGlzLT5tTWVudVRleHQgPSAkcGFyYW1zWydtZW51dGV4dCddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1snYWxpYXMnXSkpCgkgICAgewoJCSR0aGlzLT5TZXRBbGlhcyh0cmltKCRwYXJhbXNbJ2FsaWFzJ10pKTsKCSAgICB9CgkgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCSAgICB7CgkJaWYgKCR0aGlzLT5tUGFyZW50SWQgIT0gJHBhcmFtc1sncGFyZW50X2lkJ10pCgkJewoJCSAgICAkdGhpcy0+bUhpZXJhcmNoeSA9ICcnOwoJCSAgICAkdGhpcy0+bUl0ZW1PcmRlciA9IC0xOwoJCX0KCQkkdGhpcy0+bVBhcmVudElkID0gJHBhcmFtc1sncGFyZW50X2lkJ107CgkgICAgfQoJICAgIGlmIChpc3NldCgkcGFyYW1zWydhY3RpdmUnXSkpCgkgICAgewoJCSR0aGlzLT5tQWN0aXZlID0gdHJ1ZTsKCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCQkkdGhpcy0+bUFjdGl2ZSA9IGZhbHNlOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1snc2hvd2lubWVudSddKSkKCSAgICB7CgkJJHRoaXMtPm1TaG93SW5NZW51ID0gdHJ1ZTsKCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCQkkdGhpcy0+bVNob3dJbk1lbnUgPSBmYWxzZTsKCSAgICB9CgkgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2NhY2hhYmxlJ10pKQoJICAgIHsKCQkkdGhpcy0+bUNhY2hhYmxlID0gdHJ1ZTsKCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCQkkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7CgkgICAgfQoJfQogICAgfQoKICAgIGZ1bmN0aW9uIFNob3coJHBhcmFtID0gJ2NvbnRlbnRfZW4nKQogICAgewoJLy8gY2hlY2sgZm9yIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MKCSR0aGlzLT5HZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpOwoJCglyZXR1cm4gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJHBhcmFtKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJc0RlZmF1bHRQb3NzaWJsZSgpCiAgICB7CglyZXR1cm4gVFJVRTsKICAgIH0KCiAgICBmdW5jdGlvbiBUYWJOYW1lcygpCiAgICB7CglyZXR1cm4gYXJyYXkobGFuZygnbWFpbicpLCBsYW5nKCdvcHRpb25zJykpOwogICAgfQoKICAgIGZ1bmN0aW9uIEVkaXRBc0FycmF5KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkKICAgIHsKCWdsb2JhbCAkZ0NtczsKCWdsb2JhbCAkaWQ7CglnbG9iYWwgJHJldHVybmlkOwoJCQoJCSRtb2R1bGUgPSAnUGFnZUJsb2Nrcyc7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyRtb2R1bGVdKSAmJgoJCSRnQ21zLT5tb2R1bGVzWyRtb2R1bGVdWydpbnN0YWxsZWQnXSA9PSB0cnVlICYmCgkJJGdDbXMtPm1vZHVsZXNbJG1vZHVsZV1bJ2FjdGl2ZSddID09IHRydWUpCgkJewoJCSRtb2R1bGUgPSYgICRnQ21zLT5tb2R1bGVzWyRtb2R1bGVdWydvYmplY3QnXTsKCQl9CgkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoJJHRoZW1lT2JqZWN0ID0mICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXTsKCSR0ZW1wbGF0ZW9wcyA9JiAkZ0Ntcy0+R2V0VGVtcGxhdGVPcGVyYXRpb25zKCk7CgkkcmV0ID0gYXJyYXkoKTsKCSRzdHlsZXNoZWV0ID0gJyc7CglpZiAoJHRoaXMtPlRlbXBsYXRlSWQoKSA+IDApCgl7CgkgICAgJHN0eWxlc2hlZXQgPSAnLi4vc3R5bGVzaGVldC5waHA/dGVtcGxhdGVpZD0nLiR0aGlzLT5UZW1wbGF0ZUlkKCk7Cgl9CgllbHNlCgl7CgkgICAgJGRlZmF1bHR0ZW1wbGF0ZSA9ICR0ZW1wbGF0ZW9wcy0+TG9hZERlZmF1bHRUZW1wbGF0ZSgpOwoJICAgIGlmIChpc3NldCgkZGVmYXVsdHRlbXBsYXRlKSkKCSAgICB7CgkJJHRoaXMtPm1UZW1wbGF0ZUlkID0gJGRlZmF1bHR0ZW1wbGF0ZS0+aWQ7CgkJJHN0eWxlc2hlZXQgPSAnLi4vc3R5bGVzaGVldC5waHA/dGVtcGxhdGVpZD0nLiR0aGlzLT5UZW1wbGF0ZUlkKCk7CgkgICAgfQoJfQoJaWYgKCR0YWIgPT0gMCkKCXsKCSAgICAkcmV0W109IGFycmF5KGxhbmcoJ3RpdGxlJykuJzonLCc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHZhbHVlPSInLmNtc19odG1sZW50aXRpZXMoJHRoaXMtPm1OYW1lKS4nIiAvPicpOwoJICAgICRyZXRbXT0gYXJyYXkobGFuZygnbWVudXRleHQnKS4nOicsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtZW51dGV4dCIgdmFsdWU9IicuY21zX2h0bWxlbnRpdGllcygkdGhpcy0+bU1lbnVUZXh0KS4nIiAvPicpOwoJICAgIGlmIChjaGVja19wZXJtaXNzaW9uKGdldF91c2VyaWQoKSwgJ01vZGlmeSBQYWdlIFN0cnVjdHVyZScpIHx8ICgkYWRkaW5nID09IHRydWUgJiYgY2hlY2tfcGVybWlzc2lvbihnZXRfdXNlcmlkKCksICdBZGQgUGFnZXMnKSkpCiAgICAgICAgewoJCQkkY29udGVudG9wcyA9JiAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKICAgICAgICAgICAgJHJldFtdPSBhcnJheShsYW5nKCdwYXJlbnQnKS4nOicsJGNvbnRlbnRvcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCR0aGlzLT5tSWQsICR0aGlzLT5tUGFyZW50SWQpKTsKICAgICAgICB9CgkgICAgJGFkZGl0aW9uYWxjYWxsID0gJyc7CgkgICAgZm9yZWFjaCgkZ0Ntcy0+bW9kdWxlcyBhcyAka2V5PT4kdmFsdWUpCgkgICAgewoJCWlmIChnZXRfcHJlZmVyZW5jZShnZXRfdXNlcmlkKCksICd3eXNpd3lnJykhPSIiICYmIAoJCSAgICAkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnaW5zdGFsbGVkJ10gPT0gdHJ1ZSAmJgoJCSAgICAkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnYWN0aXZlJ10gPT0gdHJ1ZSAmJgoJCSAgICAkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnb2JqZWN0J10tPklzV1lTSVdZRygpICYmCgkJICAgICRnQ21zLT5tb2R1bGVzWyRrZXldWydvYmplY3QnXS0+R2V0TmFtZSgpPT1nZXRfcHJlZmVyZW5jZShnZXRfdXNlcmlkKCksICd3eXNpd3lnJykpCgkJewoJCSAgICAkYWRkaXRpb25hbGNhbGwgPSAkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnb2JqZWN0J10tPldZU0lXWUdQYWdlRm9ybVN1Ym1pdCgpOwoJCX0KCSAgICB9CgkJCQoJICAgICRyZXRbXT0gYXJyYXkobGFuZygndGVtcGxhdGUnKS4nOicsICR0ZW1wbGF0ZW9wcy0+VGVtcGxhdGVEcm9wZG93bigndGVtcGxhdGVfaWQnLCAkdGhpcy0+bVRlbXBsYXRlSWQsICdvbmNoYW5nZT0iZG9jdW1lbnQuY29udGVudGZvcm0uc3VibWl0KCkiJykpOwoKCgoKCgoKCgoKJG91dHB1dCA9ICcnOwpyZXF1aXJlKGNtc19qb2luX3BhdGgoZGlybmFtZShfX0ZJTEVfXyksICcuLicgLCAnbGliJywgJ3NsbGlzdHMnLCdTTExpc3RzLmNsYXNzLnBocCcpKTsKJHNvcnRhYmxlTGlzdHMgPSBuZXcgU0xMaXN0cyggJGNvbmZpZ1sicm9vdF91cmwiXS4nL2xpYi9zY3JpcHRhY3Vsb3VzJyk7CgoKLy8gR2V0IGxpc3Qgb2YgZXhwYW5kZWQgcGFnZXMKJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKJG1vZHVsZS0+b3BlbmVkQXJyYXk9YXJyYXkoKTsKaWYgKCRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywgJycpICE9ICcnKQogIHsKICAgICR0bXAgID0gZXhwbG9kZSgnLicsJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnKSk7CiAgICBmb3JlYWNoICgkdG1wIGFzICRtb2R1bGVDb2wpCiAgICAgIHsKCSRjb2xpbmQgPSBzdWJzdHIoJG1vZHVsZUNvbCwwLHN0cnBvcygkbW9kdWxlQ29sLCc9JykpOwoJJG1vZHVsZS0+b3BlbmVkQXJyYXlbJGNvbGluZF0gPSAxOwogICAgICB9CiAgfQoKLy8gYmxvY2tzCi8vICRvdXRwdXQgLj0gICc8aDI+QmxvY2tzPC9oMj4nOwokaGllck1hbmFnZXIgPSAmQmxvY2tDb250ZW50TWFuYWdlcjo6R2V0QWxsQ29udGVudEFzSGllcmFyY2h5KGZhbHNlKTsKCgovL0NIQU5HRSBUSElTIFRPIEpVU1QgR0VUIFRIRSBOT0RFIE9GIFRIRSBDVVJSRU5UIFBBR0UgQkVJTkcgRURJVEVEISEhISEKICRoaWVyYXJjaHkgPSAmJGhpZXJNYW5hZ2VyLT5nZXRSb290Tm9kZSgpOwovLyRoaWVyYXJjaHkgPSAmJGhpZXJNYW5hZ2VyLT5nZXROb2RlQnlJZCgkdGhpcy0+SWQoKSk7CgkJLy8gJG5vZGUgPSYgJGhtLT5nZXROb2RlQnlJZCgkdGhpcy0+UGFyZW50SWQoKSk7CgoKaWYgKCRoaWVyYXJjaHktPmhhc0NoaWxkcmVuKCkpCiAgewogICAgJGxpc3RBcnJheSA9IGFycmF5KCk7CiAgICAkb3V0cHV0ID0gJyc7CiAgICAkbW9kdWxlLT5tSWQgPSAkaWQ7CiAgICAkbW9kdWxlLT5tUmV0dXJuaWQgPSAkcmV0dXJuaWQ7Cglmb3JlYWNoICgkaGllcmFyY2h5LT5nZXRDaGlsZHJlbigpIGFzICRjaGlsZCkKCXsKCSAgJG1vZHVsZS0+c2hvd19oX2Jsb2NrcygkY2hpbGQsICRzb3J0YWJsZUxpc3RzLCAkbGlzdEFycmF5KTsKCX0KICB9CgovLyBwcmludF9yKCRtb2R1bGUtPm1QYWdlQmxvY2tQYXJlbnRzKTsKCi8vIGVjaG8gICAnPGgyPlBhZ2VzPC9oMj4nOwovLyBQYWdlcwplY2hvICAgJzxkaXYgY2xhc3M9InBhZ2Vjb250YWluZXIiPjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+JzsKJGNvbnRlbnRvcHMgPSYgJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiRoaWVyTWFuYWdlciA9ICRjb250ZW50b3BzLT5HZXRBbGxDb250ZW50QXNIaWVyYXJjaHkoZmFsc2UpOwovLyAkaGllcmFyY2h5ID0gJiRoaWVyTWFuYWdlci0+Z2V0Um9vdE5vZGUoKTsKJGhpZXJhcmNoeSA9ICYkaGllck1hbmFnZXItPmdldE5vZGVCeUlkKCRfR0VUWydjb250ZW50X2lkJ10pOwokbW9kdWxlLT5zaG93X2goJGhpZXJhcmNoeSwgJHNvcnRhYmxlTGlzdHMsICRsaXN0QXJyYXksICRvdXRwdXQpOwoJCmlmICgkaGllcmFyY2h5LT5oYXNDaGlsZHJlbigpKQogIHsKICAgICRsaXN0QXJyYXkgPSBhcnJheSgpOwogICAgJG1vZHVsZS0+bUlkID0gJGlkOwogICAgJG1vZHVsZS0+bVJldHVybmlkID0gJHJldHVybmlkOwogICAgJG91dHB1dCA9ICc8dWw+JzsKICAgIGZvcmVhY2ggKCRoaWVyYXJjaHktPmdldENoaWxkcmVuKCkgYXMgJGNoaWxkKQogICAgICB7CgkkbW9kdWxlLT5zaG93X2goJGNoaWxkLCAkc29ydGFibGVMaXN0cywgJGxpc3RBcnJheSwgJG91dHB1dCk7CgkKICAgICAgfQogICAgZWNobyAgJzwvdWw+JzsKICAgIGlmKCFpc3NldCgkX1BPU1RbJ3NvcnRhYmxlTGlzdHNTdWJtaXR0ZWQnXSkpCiAgICAgIHsKCWVjaG8gICAkb3V0cHV0OwogICAgICB9CiAgfQoKaWYoaXNzZXQoJF9QT1NUWydzb3J0YWJsZUxpc3RzU3VibWl0dGVkJ10pKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgJG9yZGVyX2NoYW5nZWQgPSBGQUxTRTsKICAgIGZvcmVhY2ggKCRsaXN0QXJyYXlbJ3BhZ2VwYXJlbnRzJ10gQVMgJHBhcmVudF9pZCA9PiAkb3JkZXIpCiAgICAgIHsKCSRvcmRlckFycmF5ID0gU0xMaXN0czo6Z2V0T3JkZXJBcnJheSgkX1BPU1RbJG9yZGVyXSwgJ3BhcmVudCcuJHBhcmVudF9pZCk7Cglmb3JlYWNoKCRvcmRlckFycmF5IGFzICRpdGVtKQoJICB7CgkgICAgJG9yZGVyX2NoYW5nZWQgPSBUUlVFOwoJICAgICRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGl0ZW1fb3JkZXIgPSA/IFdIRVJFIGNvbnRlbnRfaWQgPSA/JzsKCSAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaXRlbVsnb3JkZXInXSwgJGl0ZW1bJ2VsZW1lbnQnXSkpOwoJICB9CiAgICAgIH0KICAKICAgIGlmIChUUlVFID09ICRvcmRlcl9jaGFuZ2VkKSB7CiAgICAgIEJsb2NrQ29udGVudE1hbmFnZXI6OlNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpOwogICAgICBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDbGVhckNhY2hlKCk7CiAgICAgICRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICdvcmRlcl91cGRhdGVkJywgJ2FjdGl2ZV90YWInID0+ICdibG9ja3MnKTsKICAgICAgJG1vZHVsZS0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgllY2hvICAgJ05vdGhpbmcgd2FzIHJlb3JkZXJkJzsKICAgICAgfQoKICAgIGZvcmVhY2ggKCRsaXN0QXJyYXlbJ2Jsb2NrcGFyZW50cyddIEFTICRwYXJlbnRfaWQgPT4gJG9yZGVyKQogICAgICB7Cgkkb3JkZXJBcnJheSA9IFNMTGlzdHM6OmdldE9yZGVyQXJyYXkoJF9QT1NUWyRvcmRlcl0sICdibG9ja3BhcmVudCcuJHBhcmVudF9pZCk7Cglmb3JlYWNoKCRvcmRlckFycmF5IGFzICRpdGVtKQoJICB7CgkgICAgJG9yZGVyX2NoYW5nZWQgPSBUUlVFOwoJICAgICRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGl0ZW1fb3JkZXIgPSA/IFdIRVJFIGNvbnRlbnRfaWQgPSA/JzsKCSAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaXRlbVsnb3JkZXInXSwgJGl0ZW1bJ2VsZW1lbnQnXSkpOwoJICB9CiAgICAgIH0KICAKICAgIGlmIChUUlVFID09ICRvcmRlcl9jaGFuZ2VkKSB7CiAgICAgIEJsb2NrQ29udGVudE1hbmFnZXI6OlNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpOwogICAgICBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDbGVhckNhY2hlKCk7CiAgICAgICRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICdvcmRlcl91cGRhdGVkJywgJ2FjdGl2ZV90YWInID0+ICdibG9ja3MnKTsKICAgICAgJG1vZHVsZS0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgllY2hvICAgJ05vdGhpbmcgd2FzIHJlb3JkZXJkJzsKICAgICAgfQogIH0KCgovLyAkc29ydGFibGVMaXN0cy0+ZGVidWcgPSB0cnVlOwplY2hvICAgJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MmVtOyI+JzsKJHNvcnRhYmxlTGlzdHMtPnByaW50VG9wSlMoKTsKJHNvcnRhYmxlTGlzdHMtPnByaW50Rm9ybSgnbW9kdWxlaW50ZXJmYWNlLnBocD9tb2R1bGU9UGFnZUJsb2NrcycsICdwb3N0JywgJ1N1Ym1pdCcsICdidXR0b24nKTsKJHNvcnRhYmxlTGlzdHMtPnByaW50Qm90dG9tSlMoKTsgICAgCiAgIGVjaG8gICAnPC9kaXY+JzsKZWNobyAgICc8L2Rpdj48L2Rpdj4nOwogJHJldFtdPSBhcnJheSgnUGFnZSBCbG9ja3M6JywgJG91dHB1dCk7CgoKCgkgICAgJHJldFtdPSBhcnJheShsYW5nKCdjb250ZW50JykuJzonLGNyZWF0ZV90ZXh0YXJlYSh0cnVlLCAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpLCAnY29udGVudF9lbicsICcnLCAnY29udGVudF9lbicsICcnLCAkc3R5bGVzaGVldCkpOwoKCSAgICAvLyBhZGQgYWRkaXRpb25hbCBjb250ZW50IGJsb2NrcyBpZiByZXF1aXJlZAoJICAgICR0aGlzLT5HZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpOyAvLyB0aGlzIGlzIG5lZWRlZCBhcyB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGdldCBhIGNhbGwgdG8gb3VyIGNsYXNzIHdoZW4gZWRpdGluZy4KCSAgICBmb3JlYWNoKCR0aGlzLT5hZGRpdGlvbmFsQ29udGVudEJsb2NrcyBhcyAkYmxvY2tOYW1lID0+ICRibG9ja05hbWVJZCkKCSAgICB7CgkJaWYgKCRibG9ja05hbWVJZFsnb25lbGluZSddID09ICd0cnVlJykKCQl7CgkJICAgICRyZXRbXT0gYXJyYXkodWN3b3JkcygkYmxvY2tOYW1lKS4nOicsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSInLiRibG9ja05hbWVJZFsnaWQnXS4nIiB2YWx1ZT0iJy4kdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tOYW1lSWRbJ2lkJ10pLiciIC8+Jyk7CgkJfQoJCWVsc2UKCQl7CgkJICAgICRyZXRbXT0gYXJyYXkodWN3b3JkcygkYmxvY2tOYW1lKS4nOicsY3JlYXRlX3RleHRhcmVhKCgkYmxvY2tOYW1lSWRbJ3VzZXd5c2l3eWcnXSA9PSAnZmFsc2UnP2ZhbHNlOnRydWUpLCAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tOYW1lSWRbJ2lkJ10pLCAkYmxvY2tOYW1lSWRbJ2lkJ10sICcnLCAkYmxvY2tOYW1lSWRbJ2lkJ10sICcnLCAkc3R5bGVzaGVldCkpOwoJCX0KCSAgICB9Cgl9CglpZiAoJHRhYiA9PSAxKQoJewoJICAgICRyZXRbXT0gYXJyYXkobGFuZygnYWN0aXZlJykuJzonLCc8aW5wdXQgY2xhc3M9InBhZ2VjaGVja2JveCIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImFjdGl2ZSInLigkdGhpcy0+bUFjdGl2ZT8nIGNoZWNrZWQ9ImNoZWNrZWQiJzonJykuJyAvPicpOwoJICAgICRyZXRbXT0gYXJyYXkobGFuZygnc2hvd2lubWVudScpLic6JywnPGlucHV0IGNsYXNzPSJwYWdlY2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzaG93aW5tZW51IicuKCR0aGlzLT5tU2hvd0luTWVudT8nIGNoZWNrZWQ9ImNoZWNrZWQiJzonJykuJyAvPicpOwoJICAgICRyZXRbXT0gYXJyYXkobGFuZygnY2FjaGFibGUnKS4nOicsJzxpbnB1dCBjbGFzcz0icGFnZWNoZWNrYm94IiB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2FjaGFibGUiJy4oJHRoaXMtPm1DYWNoYWJsZT8nIGNoZWNrZWQ9ImNoZWNrZWQiJzonJykuJyAvPicpOwoJICAgICRyZXRbXT0gYXJyYXkobGFuZygncGFnZWFsaWFzJykuJzonLCc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWxpYXMiIHZhbHVlPSInLiR0aGlzLT5tQWxpYXMuJyIgLz4nKTsKCSAgICAkcmV0W109IGFycmF5KGxhbmcoJ21ldGFkYXRhJykuJzonLGNyZWF0ZV90ZXh0YXJlYShmYWxzZSwgJHRoaXMtPk1ldGFkYXRhKCksICdtZXRhZGF0YScsICdwYWdlc21hbGx0ZXh0YXJlYScsICdtZXRhZGF0YScsICcnLCAnJywgJzgwJywgJzYnKSk7CgoJICAgICRyZXRbXT0gYXJyYXkobGFuZygndGl0bGVhdHRyaWJ1dGUnKS4nOicsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZWF0dHJpYnV0ZSIgbWF4bGVuZ3RoPSIyNTUiIHNpemU9IjgwIiB2YWx1ZT0iJy5jbXNfaHRtbGVudGl0aWVzKCR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUpLiciIC8+Jyk7CgkgICAgJHJldFtdPSBhcnJheShsYW5nKCd0YWJpbmRleCcpLic6JywnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRhYmluZGV4IiBtYXhsZW5ndGg9IjEwIiB2YWx1ZT0iJy5jbXNfaHRtbGVudGl0aWVzKCR0aGlzLT5tVGFiSW5kZXgpLiciIC8+Jyk7CgkgICAgJHJldFtdPSBhcnJheShsYW5nKCdhY2Nlc3NrZXknKS4nOicsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhY2Nlc3NrZXkiIG1heGxlbmd0aD0iNSIgdmFsdWU9IicuY21zX2h0bWxlbnRpdGllcygkdGhpcy0+bUFjY2Vzc0tleSkuJyIgLz4nKTsKCgkgICAgaWYgKCEkYWRkaW5nICYmICRzaG93YWRtaW4pCgkgICAgewoJCQkkdXNlcm9wcyA9JiAkZ0Ntcy0+R2V0VXNlck9wZXJhdGlvbnMoKTsKCQkJJHJldFtdPSBhcnJheShsYW5nKCdvd25lcicpLic6JywgJHVzZXJvcHMtPkdlbmVyYXRlRHJvcGRvd24oJHRoaXMtPk93bmVyKCkpKTsKCSAgICB9CgoJICAgIGlmICgkYWRkaW5nIHx8ICRzaG93YWRtaW4pCgkgICAgewoJCSRyZXRbXT0gJHRoaXMtPlNob3dBZGRpdGlvbmFsRWRpdG9ycygpOwoJICAgIH0KCX0KCXJldHVybiAkcmV0OwogICAgfQoKCiAgICBmdW5jdGlvbiBWYWxpZGF0ZURhdGEoKQogICAgewoJJGVycm9ycyA9IGFycmF5KCk7CgoJaWYgKCR0aGlzLT5tTmFtZSA9PSAnJykKCXsKCSAgICBpZiAoJHRoaXMtPm1NZW51VGV4dCAhPSAnJykKCSAgICB7CgkJJHRoaXMtPm1OYW1lID0gJHRoaXMtPm1NZW51VGV4dDsKCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCQkkZXJyb3JzW109IGxhbmcoJ25vZmllbGRnaXZlbicsYXJyYXkobGFuZygndGl0bGUnKSkpOwoJCSRyZXN1bHQgPSBmYWxzZTsKCSAgICB9Cgl9CgoJaWYgKCR0aGlzLT5tTWVudVRleHQgPT0gJycpCgl7CgkgICAgaWYgKCR0aGlzLT5tTmFtZSAhPSAnJykKCSAgICB7CgkJJHRoaXMtPm1NZW51VGV4dCA9ICR0aGlzLT5tTmFtZTsKCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCQkkZXJyb3JzW109bGFuZygnbm9maWVsZGdpdmVuJyxhcnJheShsYW5nKCdtZW51dGV4dCcpKSk7CgkJJHJlc3VsdCA9IGZhbHNlOwoJICAgIH0KCX0KCQkKCWlmICgkdGhpcy0+bUFsaWFzICE9ICR0aGlzLT5tT2xkQWxpYXMgfHwgJHRoaXMtPm1BbGlhcyA9PSAnJykgI1Nob3VsZCBvbmx5IGJlIGVtcHR5IGlmIGF1dG8gYWxpYXMgaXMgZmFsc2UKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGNvbnRlbnRvcHMgPSYgJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CgkgICAgJGVycm9yID0gJGNvbnRlbnRvcHMtPkNoZWNrQWxpYXNFcnJvcigkdGhpcy0+bUFsaWFzLCAkdGhpcy0+bUlkKTsKCSAgICBpZiAoJGVycm9yICE9PSBGQUxTRSkKCSAgICB7CgkJJGVycm9yc1tdPSAkZXJyb3I7CgkJJHJlc3VsdCA9IGZhbHNlOwoJICAgIH0KCX0KCglpZiAoJHRoaXMtPm1UZW1wbGF0ZUlkID09ICcnKQoJewoJICAgICRlcnJvcnNbXT0gbGFuZygnbm9maWVsZGdpdmVuJyxhcnJheShsYW5nKCd0ZW1wbGF0ZScpKSk7CgkgICAgJHJlc3VsdCA9IGZhbHNlOwoJfQoKCWlmICgkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpID09ICcnKQoJewoJICAgICRlcnJvcnNbXT0gbGFuZygnbm9maWVsZGdpdmVuJyxhcnJheShsYW5nKCdjb250ZW50JykpKTsKCSAgICAkcmVzdWx0ID0gZmFsc2U7Cgl9CgoJcmV0dXJuIChjb3VudCgkZXJyb3JzKSA+IDA/JGVycm9yczpGQUxTRSk7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0QWRkaXRpb25hbENvbnRlbnRCbG9ja3MoKQogICAgewoJJHJlc3VsdCA9IGZhbHNlOwoJZ2xvYmFsICRnQ21zOwoJJHRlbXBsYXRlb3BzID0mICRnQ21zLT5HZXRUZW1wbGF0ZU9wZXJhdGlvbnMoKTsKCWlmICgkdGhpcy0+YWRkdENvbnRlbnRCbG9ja3NMb2FkZWQgPT0gZmFsc2UpCgl7CgkgICAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzID0gYXJyYXkoKTsKCSAgICBpZiAoJHRoaXMtPlRlbXBsYXRlSWQoKSAmJiAkdGhpcy0+VGVtcGxhdGVJZCgpID4gLTEpCgkgICAgewoJCSR0ZW1wbGF0ZSA9ICR0ZW1wbGF0ZW9wcy0+TG9hZFRlbXBsYXRlQnlJRCgkdGhpcy0+VGVtcGxhdGVJZCgpKTsgLyogQHZhciAkdGVtcGxhdGUgVGVtcGxhdGUgKi8KCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCQkkdGVtcGxhdGUgPSAkdGVtcGxhdGVvcHMtPkxvYWREZWZhdWx0VGVtcGxhdGUoKTsKCSAgICB9CgkgICAgaWYoJHRlbXBsYXRlICE9PSBmYWxzZSkKCSAgICB7CgkJJGNvbnRlbnQgPSAkdGVtcGxhdGUtPmNvbnRlbnQ7CgkJCQkKCQkkcGF0dGVybiA9ICcve2NvbnRlbnQoW159XSopfS8nOwoJCSRwYXR0ZXJuMiA9ICcvKFthLXpBLXowLTldKik9WyJcJ10oW14iXCddKylbIlwnXS8nOwoJCSRtYXRjaGVzID0gYXJyYXkoKTsKCQkkcmVzdWx0ID0gcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sICRjb250ZW50LCAkbWF0Y2hlcyk7CgkJaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkKCQl7CgkJICAgIGZvcmVhY2ggKCRtYXRjaGVzWzFdIGFzICR3aG9sZXRhZykKCQkgICAgewoJCQkkbW9yZW1hdGNoZXMgPSBhcnJheSgpOwoJCQkkcmVzdWx0MiA9IHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuMiwgJHdob2xldGFnLCAkbW9yZW1hdGNoZXMpOwoJCQlpZiAoJHJlc3VsdDIpCgkJCXsKCQkJICAgICRrZXl2YWwgPSBhcnJheSgpOwoJCQkgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG1vcmVtYXRjaGVzWzFdKTsgJGkrKykKCQkJICAgIHsKCQkJCSRrZXl2YWxbJG1vcmVtYXRjaGVzWzFdWyRpXV0gPSAkbW9yZW1hdGNoZXNbMl1bJGldOwoJCQkgICAgfQoKCQkJICAgICRpZCA9ICcnOwoJCQkgICAgJG5hbWUgPSAnJzsKCQkJICAgICR1c2V3eXNpd3lnID0gJ3RydWUnOwoJCQkgICAgJG9uZWxpbmUgPSAnZmFsc2UnOwoKCQkJICAgIGZvcmVhY2ggKCRrZXl2YWwgYXMgJGtleT0+JHZhbCkKCQkJICAgIHsKCQkJCXN3aXRjaCgka2V5KQoJCQkJewoJCQkJICAgIGNhc2UgJ2Jsb2NrJzoKCQkJCQkkaWQgPSBzdHJfcmVwbGFjZSgnICcsICdfJywgJHZhbCk7CgkJCQkJJG5hbWUgPSAkdmFsOwoKCQkJCQlpZighYXJyYXlfa2V5X2V4aXN0cygkdmFsLCAkdGhpcy0+bVByb3BlcnRpZXMtPm1Qcm9wZXJ0eVR5cGVzKSkKCQkJCQl7CgkJCQkJICAgICR0aGlzLT5tUHJvcGVydGllcy0+QWRkKCJzdHJpbmciLCAkaWQpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCSAgICBjYXNlICd3eXNpd3lnJzoKCQkJCQkkdXNld3lzaXd5ZyA9ICR2YWw7CgkJCQkJYnJlYWs7CgkJCQkgICAgY2FzZSAnb25lbGluZSc6CgkJCQkJJG9uZWxpbmUgPSAkdmFsOwoJCQkJCWJyZWFrOwoJCQkJICAgIGRlZmF1bHQ6CgkJCQkJYnJlYWs7CgkJCQl9CgkJCSAgICB9CgoJCQkgICAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsnaWQnXSA9ICRpZDsKCQkJICAgICR0aGlzLT5hZGRpdGlvbmFsQ29udGVudEJsb2Nrc1skbmFtZV1bJ3VzZXd5c2l3eWcnXSA9ICR1c2V3eXNpd3lnOwoJCQkgICAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsnb25lbGluZSddID0gJG9uZWxpbmU7CgkJCQkJCgkJCX0KCQkgICAgfQoKCQkgICAgLy8gZm9yY2UgYSBsb2FkIAoJCSAgICAkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgoJCSAgICAkcmVzdWx0ID0gdHJ1ZTsKCQl9CgkgICAgfQoJICAgICR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9IHRydWU7Cgl9CglyZXR1cm4gJHJlc3VsdDsKICAgIH0KCQogICAgZnVuY3Rpb24gQ29udGVudFByZVJlbmRlcigkdHBsX3NvdXJjZSkKICAgIHsKCS8vIGNoZWNrIGZvciBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzCgkkdGhpcy0+R2V0QWRkaXRpb25hbENvbnRlbnRCbG9ja3MoKTsKCglyZXR1cm4gJHRwbF9zb3VyY2U7CiAgICB9Cn0KCiMgdmltOnRzPTQgc3c9NCBub2V0Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/classes/class.Text.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgVGV4dCBleHRlbmRzIENNU01vZHVsZUJsb2NrQ29udGVudFR5cGUKewoJZnVuY3Rpb24gTW9kdWxlTmFtZSgpCgl7CgkgIHJldHVybiAnUGFnZUJsb2Nrcyc7Cgl9CgoJdmFyICRhZGRpdGlvbmFsQ29udGVudEJsb2NrczsKCXZhciAkYWRkdENvbnRlbnRCbG9ja3NMb2FkZWQ7CgkKCWZ1bmN0aW9uIFRleHQoKQoJewoJCSR0aGlzLT5CbG9ja0NvbnRlbnRCYXNlKCk7CgkJJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzID0gYXJyYXkoKTsKCQkkdGhpcy0+YWRkdENvbnRlbnRCbG9ja3NMb2FkZWQgPSBmYWxzZTsKCX0KCgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKCXsKCSAgZ2xvYmFsICRnQ21zOwoJICAkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJICBpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCSAgICB7CgkgICAgICAkdGVtcGxhdGVfZGF0YSA9ICRtb2R1bGUtPkdldFRlbXBsYXRlKCR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCd0ZW1wbGF0ZScpKTsKCSAgICB9CgkgIC8vICR0ZW1wbGF0ZV9kYXRhID0gJzxoMiBpZD0ie2NvbnRlbnQgYmxvY2s9Im5hbWUiIG9uZWxpbmU9InRydWUifSI+e2NvbnRlbnR9PC9oMj4nOwoJICAKCSAgJHBhdHRlcm4gPSAnL3tjb250ZW50KFtefV0qKX0vJzsKCSAgJHBhdHRlcm4yID0gJy8oW2EtekEtejAtOV0qKT1bIlwnXShbXiJcJ10rKVsiXCddLyc7CgkgICRtYXRjaGVzID0gYXJyYXkoKTsKCSAgJHJlc3VsdCA9IHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkdGVtcGxhdGVfZGF0YSwgJG1hdGNoZXMpOwoJICAKCSAgaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkKCSAgICB7CgkgICAgICBmb3JlYWNoICgkbWF0Y2hlc1sxXSBhcyAkd2hvbGV0YWcpCgkJewoJCSAgJG1vcmVtYXRjaGVzID0gYXJyYXkoKTsKCQkgICRyZXN1bHQyID0gcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4yLCAkd2hvbGV0YWcsICRtb3JlbWF0Y2hlcyk7CgkJICBpZiAoJHJlc3VsdDIpCgkJICAgIHsKCQkgICAgICAka2V5dmFsID0gYXJyYXkoKTsKCQkgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkbW9yZW1hdGNoZXNbMV0pOyAkaSsrKQoJCQl7CgkJCSAgJGtleXZhbFskbW9yZW1hdGNoZXNbMV1bJGldXSA9ICRtb3JlbWF0Y2hlc1syXVskaV07CgkJCX0KCQkgICAgICAKCQkgICAgICAkaWQgPSAnJzsKCQkgICAgICAkbmFtZSA9ICcnOwoJCSAgICAgICR1c2V3eXNpd3lnID0gJ3RydWUnOwoJCSAgICAgICRvbmVsaW5lID0gJ2ZhbHNlJzsKCQkgICAgICAKCQkgICAgICBmb3JlYWNoICgka2V5dmFsIGFzICRrZXk9PiR2YWwpCgkJCXsKCQkJICBzd2l0Y2goJGtleSkKCQkJICAgIHsKCQkJICAgIGNhc2UgJ2Jsb2NrJzoKCQkJICAgICAgJGlkID0gc3RyX3JlcGxhY2UoJyAnLCAnXycsICR2YWwpOwoJCQkgICAgICAkbmFtZSA9ICR2YWw7CgkJCSAgICAgIAoJCQkgICAgICAvLyAgYnJlYWs7CgkJCSAgICBjYXNlICd3eXNpd3lnJzoKCQkJICAgICAgJHVzZXd5c2l3eWcgPSAkdmFsOwoJCQkgICAgICAKCQkJICAgICAgLy8JCQkJICAgIGJyZWFrOwoJCQkgICAgY2FzZSAnb25lbGluZSc6CgkJCSAgICAgICRvbmVsaW5lID0gJHZhbDsKCQkJICAgICAgCgkJCSAgICAgIC8vIGJyZWFrOwoJCQkgICAgZGVmYXVsdDoKCQkJICAgICAgLy8JCQkJICAgIGJyZWFrOwoJCQkgICAgfQoJCQl9CgkJICAgICAgCgkJICAgICAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsnaWQnXSA9ICRpZDsKCQkgICAgICAkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3NbJG5hbWVdWyd1c2V3eXNpd3lnJ10gPSAkdXNld3lzaXd5ZzsKCQkgICAgICAkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3NbJG5hbWVdWydvbmVsaW5lJ10gPSAkb25lbGluZTsKCQkgICAgICAkdGVtcGxhdGVfZGF0YSA9IHN0cl9yZXBsYWNlKCd7Y29udGVudCBibG9jaz0iJy4kaWQuJyJ9JywgICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRpZCksICR0ZW1wbGF0ZV9kYXRhKTsKCQkgICAgICAkdGVtcGxhdGVfZGF0YSA9IHN0cl9yZXBsYWNlKCd7Y29udGVudCBibG9jaz0iJy4kaWQuJyIgb25lbGluZT0idHJ1ZSJ9JywgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGlkKSwgJHRlbXBsYXRlX2RhdGEpOwoJCSAgICAKCQkgICAgfQoJCX0KCSAgICAgIAoJICAgIH0KCSAgJHRlbXBsYXRlX2RhdGEgPSBzdHJfcmVwbGFjZSgne2NvbnRlbnR9JywgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnRfZW4nKSwgJHRlbXBsYXRlX2RhdGEpOwoJICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignbW9kaWZpZWQnLCAkdGhpcy0+R2V0TW9kaWZpZWREYXRlKCkpOwoJICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignYWxpYXMnLCAkdGhpcy0+QWxpYXMoKSk7CgkgICRtb2R1bGUtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5tTmFtZSk7CiAgCSAgJG1vZHVsZS0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VibG9ja19pZCcsICR0aGlzLT5JZCgpKTsKCSAgJHRlbXBsYXRlX2RhdGEgPSAkbW9kdWxlLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdGVtcGxhdGVfZGF0YSk7CgoJICAgIHJldHVybiAkdGVtcGxhdGVfZGF0YTsKCSAgLy8gIGRpZSgkdGVtcGxhdGVfZGF0YSk7Cgl9CgkKCS8qIG92ZXJyaWRlICovCglmdW5jdGlvbiBTZXRQcm9wZXJ0aWVzKCkKCXsKCQkkdGhpcy0+bVByb3BlcnRpZXMtPkFkZCgic3RyaW5nIiwgImNvbnRlbnRfZW4iKTsgLy9Gb3IgbGF0ZXIgbGFuZ3VhZ2Ugc3VwcG9ydAoJCSR0aGlzLT5tUHJvcGVydGllcy0+QWRkKCJzdHJpbmciLCAidGVtcGxhdGUiKTsKCgoJCSNUdXJuIG9uIHByZXZpZXcKLy8JCSR0aGlzLT5tUHJldmlldyA9IHRydWU7Cgl9CgkvKioKCSAqIFVzZSB0aGUgUmVhZHlGb3JFZGl0IGNhbGxiYWNrIHRvIGdldCB0aGUgYWRkaXRpb25hbCBjb250ZW50IGJsb2NrcyBsb2FkZWQuCgkgKi8KCWZ1bmN0aW9uIFJlYWR5Rm9yRWRpdCgpCgl7CgkJJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7Cgl9CgkvKgoJZnVuY3Rpb24gR2V0TW9kdWxlSW5zdGFuY2UoJG1vZHVsZSkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyRtb2R1bGVdKSAmJgoJCSAgICAkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlXVsnaW5zdGFsbGVkJ10gPT0gdHJ1ZSAmJgoJCSAgICAkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlXVsnYWN0aXZlJ10gPT0gdHJ1ZSkKCQkgIHsKCQkgICAgcmV0dXJuICAkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlXVsnb2JqZWN0J107CgkJICB9Cgl9CgkqLwoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIEVkaXRBc0FycmF5KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkKCXsKCQlnbG9iYWwgJGlkOwoJCWdsb2JhbCAkZ0NtczsKIAkJJG1vZHVsZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1BhZ2VCbG9ja3MnKTsKCQkvLyAkY29uZmlnID0gJGdDbXMtPmNvbmZpZzsKCQkkY29udGVudG9wcyA9JiAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKCgkJJHJldCA9IGFycmF5KCk7CgkJJHJldFtdPSBhcnJheShsYW5nKCd0aXRsZScpLic6JywnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiB2YWx1ZT0iJy5jbXNfaHRtbGVudGl0aWVzKCR0aGlzLT5tTmFtZSkuJyIgLz4nKTsKCQkkcmV0W109IGFycmF5KCR0aGlzLT5MYW5nKCdhbGlhcycpLic6JywnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFsaWFzIiB2YWx1ZT0iJy4kdGhpcy0+bUFsaWFzLiciIC8+Jyk7CgoJCSRtb2RfcGFyYW1zID0gR2V0TW9kdWxlUGFyYW1ldGVycygkaWQpOwoKCQlhcnJheV9wdXNoKCRyZXQsYXJyYXkoJG1vZHVsZS0+TGFuZygncGFyZW50X3BhZ2UnKS4nOicsJGNvbnRlbnRvcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKDAsICRtb2RfcGFyYW1zWydwYXJlbnRfcGFnZV9pZCddLCAncGFyZW50X3BhZ2VfaWQnKSkpOwoJCQkkcmV0W109IGFycmF5KCRtb2R1bGUtPkxhbmcoJ3RleHRfcGFyZW50X2Jsb2NrJykuJzonLCBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDcmVhdGVIaWVyYXJjaHlEcm9wZG93bigkdGhpcy0+bUlkLCAkdGhpcy0+bVBhcmVudElkLCAncGFyZW50X2lkJywgJG1vZF9wYXJhbXNbJ3BhcmVudF9wYWdlX2lkJ10pKTsKCQkkcmV0W109IGFycmF5KGxhbmcoJ2FjdGl2ZScpLic6JywnPGlucHV0IGNsYXNzPSJwYWdlY2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhY3RpdmUiJy4oJHRoaXMtPm1BY3RpdmU/JyBjaGVja2VkPSJjaGVja2VkIic6JycpLicgLz4nKTsKCgoJICAvLyBHZXQgdGVtcGxhdGVzCgkgICRtb2R1bGUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdQYWdlQmxvY2tzJyk7CgkgIGlmICgkbW9kdWxlICE9IEZBTFNFKQoJICAgIHsKCSAgICAgICRkYnRlbXBsYXRlcyA9ICRtb2R1bGUtPkxpc3RUZW1wbGF0ZXMgKCk7CgkgICAgfQoJICAKCSAgJHRlbXBsYXRlX2Ryb3Bkb3duID0gJzxzZWxlY3QgbmFtZT0idGVtcGxhdGUiIG9uY2hhbmdlPSJkb2N1bWVudC5jb250ZW50Zm9ybS5zdWJtaXQoKSI+JzsKCSAgZm9yZWFjaCAoJGRidGVtcGxhdGVzIEFTICRrZXkgPT4gJHRlbXBsYXRlX25hbWUpCgkgICAgewoJICAgICAgaWYgKFRSVUUgPT0gZW1wdHkoJHRoaXMtPm1UZW1wbGF0ZSkpCgkJewoJCSAgJHRoaXMtPm1UZW1wbGF0ZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCd0ZW1wbGF0ZScpOwoJCX0KCSAgICAgIGlmIChUUlVFID09IGVtcHR5KCR0aGlzLT5tVGVtcGxhdGUpKQoJCXsKCQkgICRtb2R1bGUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdQYWdlQmxvY2tzJyk7CgkJICBpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCQkgICAgewoJCSAgICAgICR0aGlzLT5tVGVtcGxhdGUgPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0dGVtcGxhdGUnKTsKCQkgICAgfQoJCX0gCgkgICAgICAkdGVtcGxhdGVfZHJvcGRvd24gLj0gJzxvcHRpb24gdmFsdWU9IicuJHRlbXBsYXRlX25hbWUuJyInOwoJICAgICAgaWYgKCR0aGlzLT5tVGVtcGxhdGUgPT0gJHRlbXBsYXRlX25hbWUpCgkJewoJCSAgJHRlbXBsYXRlX2Ryb3Bkb3duIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJfQoJICAgICAgJHRlbXBsYXRlX2Ryb3Bkb3duIC49ICc+Jy4kdGVtcGxhdGVfbmFtZS4nPC9vcHRpb24+JzsKCSAgICB9CgkgICR0ZW1wbGF0ZV9kcm9wZG93biAuPSAnPC9zZWxlY3Q+JzsKCSAgJHJldFtdPSBhcnJheShsYW5nKCd0ZW1wbGF0ZScpLic6JywkdGVtcGxhdGVfZHJvcGRvd24sICd0ZW1wbGF0ZV9pZCcpOwoJICAkcmV0W109IGFycmF5KGxhbmcoJ2NvbnRlbnQnKS4nOicsIGNyZWF0ZV90ZXh0YXJlYSh0cnVlLCAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpLCAnY29udGVudF9lbicpKTsKCSAgLy8gYWRkIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MgaWYgcmVxdWlyZWQKCSAgJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7IC8vIHRoaXMgaXMgbmVlZGVkIGFzIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGEgY2FsbCB0byBvdXIgY2xhc3Mgd2hlbiBlZGl0aW5nLgoJICBmb3JlYWNoKCR0aGlzLT5hZGRpdGlvbmFsQ29udGVudEJsb2NrcyBhcyAkYmxvY2tOYW1lID0+ICRibG9ja05hbWVJZCkKCSAgICB7CgkgICAgICBpZiAoJGJsb2NrTmFtZUlkWydvbmVsaW5lJ10gPT0gJ3RydWUnKQoJCXsKCQkgICRyZXRbXT0gYXJyYXkodWN3b3JkcygkYmxvY2tOYW1lKS4nOicsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSInLiRibG9ja05hbWVJZFsnaWQnXS4nIiB2YWx1ZT0iJy4kdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tOYW1lSWRbJ2lkJ10pLiciIC8+Jyk7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgICRzdHlsZXNoZWV0ID0gJyc7CgkJICAkcmV0W109IGFycmF5KHVjd29yZHMoJGJsb2NrTmFtZSkuJzonLGNyZWF0ZV90ZXh0YXJlYSgoJGJsb2NrTmFtZUlkWyd1c2V3eXNpd3lnJ10gPT0gJ2ZhbHNlJz9mYWxzZTp0cnVlKSwgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGJsb2NrTmFtZUlkWydpZCddKSwgJGJsb2NrTmFtZUlkWydpZCddLCAnJywgJGJsb2NrTmFtZUlkWydpZCddLCAnJywgJHN0eWxlc2hlZXQpKTsKCQl9CgkgICAgfQoJICByZXR1cm4gJHJldDsKCX0KCS8qIG92ZXJyaWRlICovCglmdW5jdGlvbiBWYWxpZGF0ZURhdGEoKQoJewoJCSRlcnJvcnMgPSBhcnJheSgpOwoJCS8qCgkJaWYgKCR0aGlzLT5tUGFyZW50SWQgPT0gLTEpCgkJewoJCQkkZXJyb3JzW109IGxhbmcoJ25vZmllbGRnaXZlbicsYXJyYXkobGFuZygncGFyZW50JykpKTsKCQkJJHJlc3VsdCA9IGZhbHNlOwoJCX0KCQkqLwoJCWlmICgkdGhpcy0+bVRlbXBsYXRlID09ICcnKQoJCXsKCQkJJGVycm9yc1tdPSBsYW5nKCdub2ZpZWxkZ2l2ZW4nLGFycmF5KGxhbmcoJ3RlbXBsYXRlJykpKTsKCQkJJHJlc3VsdCA9IGZhbHNlOwoJCX0KCgkJcmV0dXJuIChjb3VudCgkZXJyb3JzKSA+IDAgPyAkZXJyb3JzIDogZmFsc2UpOwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIEZpbGxQYXJhbXMoJHBhcmFtcykKCXsKCSAgaWYgKGlzc2V0KCRwYXJhbXMpKQoJICAgIHsKCSAgICAgIC8vIE5PVEUhIFRIaXMgY29kZSBIQVMgdG8gY29tZSBCRUZPUkUgJiBBRlRFUiAkdGhpcy0+R2V0QWRkaXRpb25hbENvbnRlbnRCbG9ja3MoKTsKCSAgICAgICR0aGVfcGFyYW1ldGVycyA9IGFycmF5KCdjb250ZW50X2VuJywgJ3RlbXBsYXRlJyk7CgkgICAgICAkc2V0dGluZ3MgPSAnJzsKCSAgICAgIGZvcmVhY2ggKCR0aGVfcGFyYW1ldGVycyBhcyAkb25lcGFyYW0pCgkJewoJCSAgaWYgKGlzc2V0KCRwYXJhbXNbJG9uZXBhcmFtXSkpCgkJICAgIHsKCQkgICAgICAkc2V0dGluZ3MgLj0gJ1NldHRpbmc6Jy4kb25lcGFyYW0uJyB0byAnLiRwYXJhbXNbJG9uZXBhcmFtXTsgCgkJICAgICAgJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtLCAkcGFyYW1zWyRvbmVwYXJhbV0pOwoJCSAgICB9CgkJfQoJICAgICAgCgkgICAgICBpZiAoaXNzZXQoJHBhcmFtc1sncGFyZW50X2lkJ10pKQoJCXsKCQkgIGlmICgkdGhpcy0+bVBhcmVudElkICE9ICRwYXJhbXNbJ3BhcmVudF9pZCddKQoJCSAgICB7CgkJICAgICAgJHRoaXMtPm1IaWVyYXJjaHkgPSAnJzsKCQkgICAgICAkdGhpcy0+bUl0ZW1PcmRlciA9IC0xOwoJCSAgICB9CgkJICAkdGhpcy0+bVBhcmVudElkID0gJHBhcmFtc1sncGFyZW50X2lkJ107CgkJICAvLwkJICBkaWUoJHRoaXMtPm1QYXJlbnRJZCk7CgkJfQoJICAgICAgLy8gRW5kIGJlZm9yZSBhbmQgYWZ0ZXIKCSAgICAgIAoJICAKCSAgICAgICR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9IGZhbHNlOwoJICAgICAgaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKQoJCXsKCQkgICR0aGlzLT5tVGVtcGxhdGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZSddOwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICAvLyBJZiB0aGUgaXMgYSBuZXcgYmxvY2sgYW5kIHRoZSB0ZW1wbGF0ZSBoYXMgbm90IGJlZW4gc2V0LCB1c2UgdGhlIGRlZmF1bHQKCQkgICRtb2R1bGUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdQYWdlQmxvY2tzJyk7CgkJICBpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCQkgICAgewoJCSAgICAgICR0aGlzLT5tVGVtcGxhdGUgPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0dGVtcGxhdGUnKTsKCQkgICAgfQoJCX0KCSAgICAgIC8vIGFkZCBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzCgkgICAgICAkdGhpcy0+R2V0QWRkaXRpb25hbENvbnRlbnRCbG9ja3MoKTsKCSAgICAgIGZvcmVhY2goJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzIGFzICRibG9ja05hbWUgPT4gJGJsb2NrTmFtZUlkKQoJCXsKCQkgICRwYXJhbWV0ZXJzW10gPSAkYmxvY2tOYW1lSWRbJ2lkJ107CgkJfQoJICAgICAgaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbWV0ZXJzKSkKCQl7CgkJICBmb3JlYWNoICgkcGFyYW1ldGVycyBhcyAkb25lcGFyYW0pCgkJICAgIHsKCQkgICAgICBpZiAoaXNzZXQoJHBhcmFtc1skb25lcGFyYW1dKSkKCQkJewoJCQkgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCRvbmVwYXJhbSwgJHBhcmFtc1skb25lcGFyYW1dKTsKCQkJfQoJCSAgICB9CgkJfQoKCgkgICAgICAvLyBNYXliZSB0aGlzIGlzIG9ubHkgbmVlZGVkIGFmdGVyIEFkZGl0aW9uYWwgQ29udGVudCBibG9ja3M/CgkgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3RpdGxlJ10pKQoJICAgIHsKCSAgICAgICR0aGlzLT5tTmFtZSA9ICRwYXJhbXNbJ3RpdGxlJ107CgkgICAgfQoJICAgIGlmIChlbXB0eSgkcGFyYW1zWydhbGlhcyddKSkKCSAgICB7CgkgICAgICAkdGhpcy0+bUFsaWFzID0gcHJlZ19yZXBsYWNlKCIvW15cdy1dKy8iLCAiLSIsICR0aGlzLT5tTmFtZSk7CgkgICAgfQoJCWVsc2UKCQl7CgkJJHRoaXMtPm1BbGlhcyA9ICAkcGFyYW1zWydhbGlhcyddOwoJCX0JICAgIAoKCSAgICAgIC8vIE5PVEUhIFRIaXMgY29kZSBIQVMgdG8gY29tZSBCRUZPUkUgJiBBRlRFUiAkdGhpcy0+R2V0QWRkaXRpb25hbENvbnRlbnRCbG9ja3MoKTsKCSAgICAgICR0aGVfcGFyYW1ldGVycyA9IGFycmF5KCdjb250ZW50X2VuJywgJ3RlbXBsYXRlJyk7CgkgICAgICAkc2V0dGluZ3MgPSAnJzsKCSAgICAgIGZvcmVhY2ggKCR0aGVfcGFyYW1ldGVycyBhcyAkb25lcGFyYW0pCgkJewoJCSAgaWYgKGlzc2V0KCRwYXJhbXNbJG9uZXBhcmFtXSkpCgkJICAgIHsKCQkgICAgICAkc2V0dGluZ3MgLj0gJ1NldHRpbmc6Jy4kb25lcGFyYW0uJyB0byAnLiRwYXJhbXNbJG9uZXBhcmFtXTsgCgkJICAgICAgJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtLCAkcGFyYW1zWyRvbmVwYXJhbV0pOwoJCSAgICB9CgkJfQoJICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCQl7CgkJICBpZiAoJHRoaXMtPm1QYXJlbnRJZCAhPSAkcGFyYW1zWydwYXJlbnRfaWQnXSkKCQkgICAgewoJCSAgICAgICR0aGlzLT5tSGllcmFyY2h5ID0gJyc7CgkJICAgICAgJHRoaXMtPm1JdGVtT3JkZXIgPSAtMTsKCQkgICAgfQoJCSAgJHRoaXMtPm1QYXJlbnRJZCA9ICRwYXJhbXNbJ3BhcmVudF9pZCddOwoJCSAgLy8JCSAgZGllKCR0aGlzLT5tUGFyZW50SWQpOwoJCX0KCSAgICAgIC8vIEVuZCBiZWZvcmUgYW5kIGFmdGVyCgoJICAgICAgaWYgKFRSVUUgPT0gZW1wdHkoJHBhcmFtc1sndGl0bGUnXSkpCgkJewoJCSAgaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbXNbJ2NvbnRlbnRfZW4nXSkpCgkJICAgIHsKCQkgICAgICAkdGhpcy0+bU5hbWUgPSBzdWJzdHIoJHBhcmFtc1snY29udGVudF9lbiddLCAwLCAzMCkgLiAnLi4uJzsKCQkgICAgfQoJCSAgZWxzZQoJCSAgICB7CgkJICAgICAgJHRoaXMtPm1OYW1lID0gJyc7CgkJICAgIH0KCQl9CgkgICAgICAkdGhpcy0+bVNob3dJbk1lbnUgPSBmYWxzZTsKCSAgICAgIAoJICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZSddKSkKCQl7CgkJICAkdGhpcy0+bUFjdGl2ZSA9IHRydWU7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgICR0aGlzLT5tQWN0aXZlID0gZmFsc2U7CgkJfQoJICAgICAgCgkgICAgICAvLyBUT0RPCgkgICAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7CgkgICAgfQoJfQoJCgoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIEZyaWVuZGx5TmFtZSgpCgl7CgkgIHJldHVybiAkdGhpcy0+TGFuZygndGV4dCcpOwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFdhbnRzQ2hpbGRyZW4oKQoJewoJCXJldHVybiB0cnVlOwoJfQoJLyogb3ZlcnJpZGUgKi8KICAgIGZ1bmN0aW9uIEhhc1VzYWJsZUxpbmsoKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCglmdW5jdGlvbiBHZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpCgl7CgkgICRyZXN1bHQgPSBmYWxzZTsKCSAgaWYgKCR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9PSBmYWxzZSkKCSAgICB7CgkgICAgICAkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3MgPSBhcnJheSgpOwoJICAgICAgJG1vZHVsZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1BhZ2VCbG9ja3MnKTsKCSAgICAgIGlmICgkbW9kdWxlICE9IEZBTFNFKQoJCXsKCQkgICR0ZW1wbGF0ZV9uYW1lID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3RlbXBsYXRlJyk7IAoJCSAgaWYgKFRSVUUgPT0gZW1wdHkoJHRlbXBsYXRlX25hbWUpKQoJCSAgICB7CgkJICAgICAgaWYgKCRtb2R1bGUgIT0gRkFMU0UpCgkJCXsKCQkJICAkdGVtcGxhdGVfbmFtZSA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHR0ZW1wbGF0ZScpOwoJCQl9CgkJICAgIH0KCQkgICRjb250ZW50ID0gJG1vZHVsZS0+R2V0VGVtcGxhdGUoJHRlbXBsYXRlX25hbWUpOwoJCX0KCSAgICAgICRwYXR0ZXJuID0gJy97Y29udGVudChbXn1dKil9Lyc7CgkgICAgICAkcGF0dGVybjIgPSAnLyhbYS16QS16MC05XSopPVsiXCddKFteIlwnXSspWyJcJ10vJzsKCSAgICAgICRtYXRjaGVzID0gYXJyYXkoKTsKCSAgICAgICRyZXN1bHQgPSBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJGNvbnRlbnQsICRtYXRjaGVzKTsKCSAgICAgIAoJICAgICAgaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkKCQl7CgkJICBmb3JlYWNoICgkbWF0Y2hlc1sxXSBhcyAkd2hvbGV0YWcpCgkJICAgIHsKCQkgICAgICAkbW9yZW1hdGNoZXMgPSBhcnJheSgpOwoJCSAgICAgICRyZXN1bHQyID0gcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4yLCAkd2hvbGV0YWcsICRtb3JlbWF0Y2hlcyk7CgkJICAgICAgaWYgKCRyZXN1bHQyKQoJCQl7CgkJCSAgJGtleXZhbCA9IGFycmF5KCk7CgkJCSAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG1vcmVtYXRjaGVzWzFdKTsgJGkrKykKCQkJICAgIHsKCQkJICAgICAgJGtleXZhbFskbW9yZW1hdGNoZXNbMV1bJGldXSA9ICRtb3JlbWF0Y2hlc1syXVskaV07CgkJCSAgICB9CgkJCSAgCgkJCSAgJGlkID0gJyc7CgkJCSAgJG5hbWUgPSAnJzsKCQkJICAkdXNld3lzaXd5ZyA9ICd0cnVlJzsKCQkJICAkb25lbGluZSA9ICdmYWxzZSc7CgkJCSAgCgkJCSAgZm9yZWFjaCAoJGtleXZhbCBhcyAka2V5PT4kdmFsKQoJCQkgICAgewoJCQkgICAgICBzd2l0Y2goJGtleSkKCQkJCXsKCQkJCWNhc2UgJ2Jsb2NrJzoKCQkJCSAgJGlkID0gc3RyX3JlcGxhY2UoJyAnLCAnXycsICR2YWwpOwoJCQkJICAkbmFtZSA9ICR2YWw7CgkJCQkgIAoJCQkJICBpZighYXJyYXlfa2V5X2V4aXN0cygkdmFsLCAkdGhpcy0+bVByb3BlcnRpZXMtPm1Qcm9wZXJ0eVR5cGVzKSkKCQkJCSAgICB7CgkJCQkgICAgICAkdGhpcy0+bVByb3BlcnRpZXMtPkFkZCgic3RyaW5nIiwgJGlkKTsKCQkJCSAgICB9CgkJCQkgIAoJCQkJICBicmVhazsKCQkJCWNhc2UgJ3d5c2l3eWcnOgoJCQkJICAkdXNld3lzaXd5ZyA9ICR2YWw7CgkJCQkgIAoJCQkJICBicmVhazsKCQkJCWNhc2UgJ29uZWxpbmUnOgoJCQkJICAkb25lbGluZSA9ICR2YWw7CgkJCQkgIAoJCQkJICBicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkgIGJyZWFrOwoJCQkJfQoJCQkgICAgfQoJCQkgIAoJCQkgICR0aGlzLT5hZGRpdGlvbmFsQ29udGVudEJsb2Nrc1skbmFtZV1bJ2lkJ10gPSAkaWQ7CgkJCSAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsndXNld3lzaXd5ZyddID0gJHVzZXd5c2l3eWc7CgkJCSAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsnb25lbGluZSddID0gJG9uZWxpbmU7CgkJCSAgCgkJCX0KCQkgICAgfQoJCSAgCgkJICAvLyBmb3JjZSBhIGxvYWQgCgkJICAkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJICAKCQkgICRyZXN1bHQgPSB0cnVlOwoJCX0KCSAgICAgICR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9IHRydWU7CgkgICAgfQoJICByZXR1cm4gJHJlc3VsdDsKCX0KCQoJZnVuY3Rpb24gQ29udGVudFByZVJlbmRlcigkdHBsX3NvdXJjZSkKCXsKCSAgLy8gY2hlY2sgZm9yIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MKCSAgJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7CgkgIAoJICByZXR1cm4gJHRwbF9zb3VyY2U7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAOe+AB07NgROLZEPCz4+PtMCAjZHRI4lFUVFRfUEBP8AACloIpA0JlFRUVJSUktXU1NTU1VVVVZWVldXV0xpGlhYWFlZWbUzM1tbW1xcXF1dXS2GEwCXM19fX9U1AGBgYGFhYWJiYmNjYwGfNGdnZ2tra/I1NW5ubj+QRXR0dHV1dXZ2dnh4eHd6eTSrLPZRAHx8fJZxcdtVVbN4CIODg4SEhIKIg4eHh4iIiP1XV4mJie1fX9pwOoqKirGPCIuLi4yMjP9sAI2NjY+Pj5GRkf91AJKSkpOTk/9mZpSUlJWVlZaWlv9qapeXl13INpiYmJmZmeaPAZqamuqFMpubm/9xcZycnJ2dnWbNM/+JAJ6enp+fn6CgoKGhof56em3SNqOjo6SkpKWlpaampnDWPKenp+WRe/WcFaioqP+EhKmpqaqpqKqqqqurq6ysrK2tra+vr/+qALGxsbKysv+RkbOzs7S0tLW1tLW1tbe3t4jfY/+3ALq6uru7u7y8vL29vYbtU76+vv/CAL+/v8DAwIvwVsPBwcLCwsPDw8TExMjIyMnJydzDw8vLy/7YAY/ypc7OztDQ0NHR0dPT09TU0//nANXV1aT/e9bW1tnZ2dvb29zc3N3d3d7e3t/f3+Dg4P/7AOHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQBCgD/ACwAAAAAIAAgAAAI/gD/CRxIsKDBgwgTKlz4Lw4YMhDFSJxIUQwZMDYiMTzjq6PHjx178eKVy5ecF6MWvvHFa5cuXLds2aJFS1YsWK9crbq1x8OlhWx86coF01YtWrNs4nTVSpWtOx4qLVwjtOjMmrJwvmrFymmdqAs5wrSgA0bSm2X07GC1KlUtOhwyLSTja1EMNFSWLMgqhVIgOFgKoaIVJ0IdRooSPTplUIyvLnPwHqEiwMynRn8BM5rVJoqkR48g4flBqmAYXwlK4MVBYEIPOJjhEAFiJ9aaPr6I4vI1wlBBMKgTpCbQgtAYDXDgAFluB1YaOrqYspoVok5BLr4QCDfgyNKfMV5a/kBZ7sLOKzJydHFdNQuEdYLYqxBIMCGPd/AiZBDpwELUKzFx5MLWKrJ88N5AWvgSiyYGTHDFFYQ0sUF+BqhRiiiugPHGLauokkosBhZkhS+w4HTCg1dsMGEBk5BCSiitfOEGLh6iEgsHBwpUhS85uWJHC16kKEIANZQyiiigsMIFG7akgsopr2SQ4z9T+OIKU6toosAYGwBg4ZGhgLLKFmvY8qQpr2Aw5RO+rFcjCw60OMoooYTSiSpZpEHLKaaU4soFUzrhy4CqPHlKKUbSGSYnqVghBi2mmEJKK4AWpEQvHRbKZymkzFmnJ51sksoUYcjCqSisVDAlE7w4iUqf6Z2KEiaonGySSSlVgCFLrKxQMGURQuWSS0yx5NRKKx06aYotQWghy5ygqCLBlDTM4EMOOdzAQxJJIOGtEeCCKwQJkaAia7SGFQSKFSqgkMIKDfCRiCGGDDKIIID40Qcfm5iLpCeqQDDlP6mE4oknpQzxii+3HHXWUqeIgiQonaTywMAFJWHKLKt0iMqrkpIi8az9XryQEaXIokqhZ3KqKK2bnMIAxgQNgYrKTh6a6Kyc1JpJKg3QPBATkeCClCxKXYllsqtsMoDQAmFiwgcZVG311Vd7cAAHhzDESR90hC322GTXgYgoAgUEADs=]]></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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1BhZ2UgQmxvY2tzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQmUgc3VyZSB0byBzZXQgIlVzZSBQYWdlQmxvY2tzIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUuJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBbGwgUGFnZSBCbG9ja3MgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIFBhZ2VCbG9ja3MgaXMgbm93IHVuaW5zdGFsbGVkJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHk/IFlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgUGFnZUJsb2NrcyBhbmQgZGVsZXRlIEFMTCB5b3VyIHBhZ2UgYmxvY2tzPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsZSBQcmVmZXJlbmNlcyc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bGUgQWRtaW4gUGFuZWwnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBbGxvd3MgdW5saW1pdGVkIGJsb2NrcyBvZiBDb250ZW50IHRvIGJlIGF0dGFjaGVkIHRvIHBhZ2VzIGFuZCBlZGl0ZWQgaW5kaXZpZHVhbGx5Lic7CiRsYW5nWydibG9ja3MnXSA9ICdCbG9ja3MnOwokbGFuZ1sndGVtcGxhdGVzJ10gPSAnVGVtcGxhdGVzJzsKJGxhbmdbJ2FkZHRlbXBsYXRlJ10gPSAnQWRkIFRlbXBsYXRlJzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdUZW1wbGF0ZSBOYW1lJzsKJGxhbmdbJ3RlbXBsYXRlc2F2ZWQnXSA9ICdUaGUgdGVtcGxhdGUgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ29yZGVyX3VwZGF0ZWQnXSA9ICdCbG9ja3Mgd2VyZSBzdWNjZXNzZnVsbHkgcmVvcmRlcmVkJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdTaG93IFRhYmxlIG9mIENvbnRlbnRzJzsKJGxhbmdbJ2NvbnRlbnRzJ10gPSAnQ29udGVudHMnOwokbGFuZ1snZGVsZXRldGVtcGxhdGUnXSA9ICdEZWxldGUgVGVtcGxhdGUnOwokbGFuZ1snZGVsZXRldGVtcGxhdGUnXSA9ICdEZWxldGUgVGVtcGxhdGUnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTmFtZSAobnVtYmVycywgbGV0dGVycywgYW5kIGRhc2hlcyBvbmx5LCBubyBzcGFjZXMpJzsKJGxhbmdbJ29wdGlvbnNfdXBkYXRlZCddID0gJ1VwZGF0ZWQgb3B0aW9ucyB3ZXJlIHN1Y2Nlc3NmdWxseSBzYXZlZC4nOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZSddID0gJ0RlZmF1bHQgdGVtcGxhdGUnOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ1RpdGxlJzsKJGxhbmdbJ3RleHRfcGFyZW50X3BhZ2UnXSA9ICdBdHRhY2ggdG8gVGhpcyBQYWdlJzsKJGxhbmdbJ3JlZGlyZWN0X29uX2FkZCddID0gJ1JlZGlyZWN0IGJhY2sgdG8gdGhlIFBhZ2UgQmxvY2tzIGxpc3QgYWZ0ZXIgYWRkaW5nIG5ldyBvbmUgKGluc3RlYWQgb2YgYWxsb3dpbmcgYW5vdGhlciBvbmUgdG8gYmUgYWRkZWQpJzsKJGxhbmdbJ3RleHRfY29udGVudCddID0gJ0NvbnRlbnQnOwokbGFuZ1sndGV4dF90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3RleHRfcGFyZW50X2Jsb2NrJ10gPSAnUGFyZW50IEJsb2NrJzsKJGxhbmdbJ2hpZXJhcmNoeV9lcnJvciddID0gJ0Vycm9yOiBUaGVyZSBpcyBhIG1ham9yIGVycm9yIHdpdGggaGllcmFyY2h5Lic7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdDcmVhdGlvbiBEYXRlJzsKJGxhbmdbJ3RleHRfbW9kaWZ5ZGF0ZSddID0gJ01vZGlmaWVkJzsKJGxhbmdbJ2hlbHBfcGFnZV9pZCddID0gJzxiPk92ZXItcmlkZXMgdGhlIHBhZ2UgaWQgdXNlZCB0byBkaXNwbGF5IHRoZSBibG9ja3MuPC9iPiBVc2luZyB0aGlzIHBhcmFtZXRlciwgeW91IGNhbiBtYWtlIGJsb2NrcyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0aGUgcGFnZSB0byBkaXNwbGF5IG9uIGFueSBvdGhlciBwYWdlLjxwPjxiPkV4YW1wbGUgKGlmIHlvdXIgcGFnZSBpZCB3YXMgMTUpOjwvYj48L3A+PHByZT57Y21zX21vZHVsZSBtb2R1bGU9XCdwYWdlYmxvY2tzXCcgcGFnZV9pZD1cJzE1XCd9PC9wcmU+JzsKJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKJGxhbmdbJ25vYmxvY2tzJ10gPSAnWW91IGhhdmUgbm90IGFkZGVkIGFueSBibG9ja3MgeWV0Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0FkZCBCbG9jayc7CiRsYW5nWydlZGl0X3RlbXBsYXRlJ10gPSAnRWRpdCBUZW1wbGF0ZSc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdEZWxldGUgVGVtcGxhdGUnOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV90ZW1wbGF0ZSddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8nOwokbGFuZ1snYmxvY2tfYWRkZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ2Jsb2NrX3VwZGF0ZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ2Jsb2NrX2RlbGV0ZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLic7CiRsYW5nWydkZWxldGVfYmxvY2snXSA9ICdEZWxldGUgYmxvY2suJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcGFnZSBibG9jaz8nOwokbGFuZ1snaW1hZ2V0ZXh0J10gPSAnSW1hZ2UgVGV4dCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWydvcHRpb25zJ10gPSAnT3B0aW9ucyc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZW1wbGF0ZV9oZWxwJ10gPSAnVGVtcGxhdGUgSGVscCc7CiRsYW5nWydhbGlhcyddID0gJ0FsaWFzICh1c2VkIGZvciBsaW5raW5nIHRvIHRoZSBibG9jayknOwokbGFuZ1snbW9kaWZpZWQnXSA9ICdNb2RpZmllZCc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ29yaWVudGF0aW9uJ10gPSAnT3JpZW50YXRpb24nOwokbGFuZ1sncGFyZW50X3BhZ2UnXSA9ICdQYXJlbnQgUGFnZSc7CiRsYW5nWydoZWxwX3RlbXBsYXRlJ10gPSAnCjxoMj5UZW1wbGF0ZSB2YXJpYWJsZXM8L2gyPgo8dWw+CjxsaT48Yj57JHBhZ2VibG9ja19pZH08L2I+IC0gQ29udGVudCBpZCBvZiBibG9jazwvbGk+CjxsaT48Yj57JGFsaWFzfTwvYj4gLSBBbGlhcyBvZiBibG9jazwvbGk+CjxsaT48Yj57JHRpdGxlfTwvYj4gLSBUaXRsZSBvZiBibG9jazwvbGk+CjxsaT48Yj57JG1vZGlmaWVkfTwvYj4gLSBMYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIGJsb2NrPGxpPgo8L3VsPgo8aDI+QWRkaW5nIGZpZWxkcyB0byBibG9ja3M8L2gyPgpZb3UgY2FuIGFkZCBmaWVsZHMgdG8gcGFnZWJsb2NrcyB0aGUgc2FtZSB3YXkgeW91IGFkZCB0aGVtIHRvIHBhZ2VzLiBGb3IgZXhhbXBsZSBhZGQgc29tZXRoaW5nIGxpa2UgdGhpcyB0byB5b3VyIFBhZ2VCbG9ja3MgdGVtcGxhdGU6CjxwcmU+e2NvbnRlbnQgYmxvY2s9IkFub3RoZXIgRmllbGQiIG9uZWxpbmU9InRydWUifTwvcHJlPgonOwokbGFuZ1sndGVtcGxhdGVfZGVsZXRlZCddID0gJ1RoZSB0ZW1wbGF0ZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMC4xLCBKdWx5IDIwMDYgKGVsaWphaGxvZmdyZW4pLiAKICA8dWw+CiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+CiAgPC91bD4KPC9saT4nOwokbGFuZ1snaGVscF9hY3Rpb24nXSA9ICcKPGg0PlNob3cgbGlzdCBvZiByZWNlbnRseSB1cGRhdGVkIGJsb2NrczwvaDQ+CgkgPHA+WW91IGNhbiBzaG93IGEgbGlzdCBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPgo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT1cJ3BhZ2VibG9ja3NcJyBhY3Rpb249XCdyZWNlbnRseV91cGRhdGVkXCd9JzsKJGxhbmdbJ2hlbHBfbnVtYmVyJ10gPSAnCjxoND5TaG93IGEgY2VydGFpbiBudW1iZXIgb2YgcmVjZW50bHkgdXBkYXRlZCBibG9ja3M8L2g0PgoJIDxwPllvdSBjYW4gc2hvdyBhIGxpc3Qgb2YgYSBjZXJ0YWluIG51bWJlciBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPiA8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT1cJ3BhZ2VibG9ja3NcJyBhY3Rpb249XCdyZWNlbnRseV91cGRhdGVkXCcgbnVtYmVyPVwnMTVcJ30KJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlB1dCB0aGlzIGlzIGluIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTo8L3A+CjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPVwncGFnZWJsb2Nrc1wnfTwvcHJlPgo8aDM+RXhhbXBsZSBvZiB1c2U6IEpvYiBMaXN0aW5nczwvaDM+CjxvbD4KPGxpPkNyZWF0ZSBhICJFbXBsb3ltZW50IE9wcG9ydHVuaXRpZXMiIHBhZ2UuPC9saT4KPGxpPkdvIHRvIENvbnRlbnQgwrsgUGFnZSBCbG9ja3M8L2xpPgo8bGk+Q2xpY2sgb24gdGhlIHRlbXBsYXRlcyB0YWIuPC9saT4KPGxpPkNsaWNrICJBZGQgVGVtcGxhdGUiPC9saT4KPGxpPlBhc3RlIGluIGEgdGVtcGxhdGUuIE1heWJlIHNvbWV0aGluZyBsaWtlIHRoaXM6CkNvZGU6CjxwcmU+CkpvYiBUaXRsZTogeyR0aXRsZX0KV29yayBFeHBlcmllbmNlIHJlcXVpcmVkOiB7Y29udGVudCBibG9jaz0iV29ya0V4cGVyaWVuY2UifQpEZXRhaWxlZCBEZXNjcmlwdGlvbjoge2NvbnRlbnQgYmxvY2s9IkRldGFpbGVkRGVzY3JpcHRpb24ifQpQZXJzb24gdG8gQ29udGFjdDoge2NvbnRlbnQgYmxvY2s9IkNvbnRhY3RQZXJzb24iIG9uZWxpbmU9InRydWUifQpUaGlzIGpvYiBwb3N0aW5nIHdhcyBsYXN0IG1vZGlmaWVkOiB7JG1vZGlmaWVkfQpldGMuLi4KPC9wcmU+PHA+PGI+Tk9URTogVGhlIG5hbWUgb2YgdGhlIGJsb2NrIG11c3QgTk9UIENPTlRBSU4gU1BBQ0VTIChpdCBkb2VzIG5vdCBzZWVtIHRvIHdvcmspISA7KTwvYj48L3A+PC9saT4KPGxpPkdvIGJhY2sgdG8gQ29udGVudCDCuyBQYWdlIEJsb2NrczwvbGk+CjxsaT5OZXh0IHRvIHlvdXIgIkVtcGxveW1lbnQgT3Bwb3J0dW5pdGllcyIgcGFnZSBjbGljayAiQWRkIEJsb2NrIi48L2xpPgo8bGk+Q2hvb3NlIHRoZSB0ZW1wbGF0ZSB5b3UgYWRkZWQgZWFybGllciBhbmQgYWxsIHRoZSB7Y29udGVudCBibG9jaz0iYmxvY2sgbmFtZSJ9IHdpbGwgc2hvdyB1cCBhcyBpbnB1dCBmaWVsZHMuPC9saT4KPGxpPlJlcGVhdCBzdGVwIDggZm9yIGVhY2ggam9iLjwvbGk+Cjwvb2w+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5EaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNi0yMDA3LCBFbGlqYWggTG9mZ3JlbiA8YSBocmVmPSJtYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSI+Jmx0O2VsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgonOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/cs_CZ.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1N0ciZhYWN1dGU7bmtvdiZlYWN1dGU7IGJsb2t5JzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgYnlsIG5haW5zdGFsb3YmYWFjdXRlO24uIFprb250cm9sdWp0ZSBwxZlpxZlhemVuJmlhY3V0ZTsgcMWZJmlhY3V0ZTtzbHUmc2Nhcm9uO24mZWFjdXRlO2hvIG9wciZhYWN1dGU7dm7Em24maWFjdXRlOy4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1Ymc2Nhcm9uO2VjaG55IHN0ciZhYWN1dGU7bmtvdiZlYWN1dGU7IGJsb2t5IGJ5bHkgb2RlYnImYWFjdXRlO255IGEgU3RyJmFhY3V0ZTtua292JmVhY3V0ZTsgYmxva3kgYnlseSBvZGluc3RhbG92JmFhY3V0ZTtueS4nOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gWW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCBQYWdlQmxvY2tzIGFuZCBkZWxldGUgQUxMIHlvdXIgcGFnZSBibG9ja3M/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWwgb2RpbnN0YWxvdiZhYWN1dGU7bi4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnplICVzIG5haW5zdGFsb3YmYWFjdXRlO24uJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ05hc3RhdmVuJmlhY3V0ZTsgbW9kdWx1IGFrdHVhbGl6b3YmYWFjdXRlO255Lic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOwokbGFuZ1snZXJyb3InXSA9ICdDaHliYSEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTmFzdGF2ZW4maWFjdXRlOyBtb2R1bHUnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnQWRtaW5pc3RyYcSNbiZpYWN1dGU7IHBhbmVsIG1vZHVsdSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1Vtb8W+xYh1amUga2Ugc3RyJmFhY3V0ZTtuayZhYWN1dGU7bSBwxZlpcG9qaXQgbmVvbWV6ZW4mZWFjdXRlOyBtbm/FvnN0diZpYWN1dGU7IGJsb2vFrywga3RlciZlYWN1dGU7IG1vaG91IGImeWFjdXRlO3QgZWRpdG92JmFhY3V0ZTtueSBuZXomYWFjdXRlO3Zpc2xlLic7CiRsYW5nWydibG9ja3MnXSA9ICdCbG9ja3knOwokbGFuZ1sndGVtcGxhdGVzJ10gPSAnJlNjYXJvbjthYmxvbnknOwokbGFuZ1snYWRkdGVtcGxhdGUnXSA9ICdQxZlpZGF0ICZzY2Fyb247YWJsb251JzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdKbSZlYWN1dGU7bm8gJnNjYXJvbjthYmxvbnknOwokbGFuZ1sndGVtcGxhdGVzYXZlZCddID0gJyZTY2Fyb247YWJsb25hIGJ5bGEgJnVhY3V0ZTtzcMSbJnNjYXJvbjtuxJsgdWxvxb5lbmEgZG8gZGF0YWImYWFjdXRlO3plLic7CiRsYW5nWydvcmRlcl91cGRhdGVkJ10gPSAnQmxva3kgYnlseSAmdWFjdXRlO3NwxJsmc2Nhcm9uO27EmyBwxZllc2t1cGVueSc7CiRsYW5nWydzaG93dG9jJ10gPSAnVWsmYWFjdXRlO3phdCBvYnNhaCc7CiRsYW5nWydjb250ZW50cyddID0gJ09ic2FoJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnU21hemF0ICZzY2Fyb247YWJsb251JzsKJGxhbmdbJ3RleHRfbmFtZSddID0gJ05hbWUgKG51bWJlcnMsIGxldHRlcnMsIGFuZCBkYXNoZXMgb25seSwgbm8gc3BhY2VzKSc7CiRsYW5nWydvcHRpb25zX3VwZGF0ZWQnXSA9ICdVcGRhdGVkIG9wdGlvbnMgd2VyZSBzdWNjZXNzZnVsbHkgc2F2ZWQuJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGUnXSA9ICdEZWZhdWx0IHRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfdGl0bGUnXSA9ICdUaXRsZSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9wYWdlJ10gPSAnQXR0YWNoIHRvIFRoaXMgUGFnZSc7CiRsYW5nWyd0ZXh0X2NvbnRlbnQnXSA9ICdDb250ZW50JzsKJGxhbmdbJ3RleHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9ibG9jayddID0gJ1BhcmVudCBCbG9jayc7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdDcmVhdGlvbiBEYXRlJzsKJGxhbmdbJ3RleHRfbW9kaWZ5ZGF0ZSddID0gJ01vZGlmaWVkJzsKJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKJGxhbmdbJ25vYmxvY2tzJ10gPSAnWW91IGhhdmUgbm90IGFkZGVkIGFueSBibG9ja3MgeWV0Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0FkZCBCbG9jayc7CiRsYW5nWydlZGl0X3RlbXBsYXRlJ10gPSAnRWRpdCBUZW1wbGF0ZSc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdEZWxldGUgVGVtcGxhdGUnOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV90ZW1wbGF0ZSddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8nOwokbGFuZ1snYmxvY2tfYWRkZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ2Jsb2NrX3VwZGF0ZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ2Jsb2NrX2RlbGV0ZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLic7CiRsYW5nWydkZWxldGVfYmxvY2snXSA9ICdEZWxldGUgYmxvY2suJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcGFnZSBibG9jaz8nOwokbGFuZ1snaW1hZ2V0ZXh0J10gPSAnSW1hZ2UgVGV4dCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWydvcHRpb25zJ10gPSAnT3B0aW9ucyc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZW1wbGF0ZV9oZWxwJ10gPSAnVGVtcGxhdGUgSGVscCc7CiRsYW5nWydhbGlhcyddID0gJ0FsaWFzICh1c2VkIGZvciBsaW5raW5nIHRvIHRoZSBibG9jayknOwokbGFuZ1snbW9kaWZpZWQnXSA9ICdNb2RpZmllZCc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ29yaWVudGF0aW9uJ10gPSAnT3JpZW50YXRpb24nOwokbGFuZ1snaGVscF90ZW1wbGF0ZSddID0gJzxoMj5UZW1wbGF0ZSB2YXJpYWJsZXM8L2gyPg0KPHVsPg0KPGxpPjxiPnskYWxpYXN9PC9iPiAtIEFsaWFzIG9mIGJsb2NrPC9saT4NCjxsaT48Yj57JHRpdGxlfTwvYj4gLSBUaXRsZSBvZiBibG9jazwvbGk+DQo8bGk+PGI+eyRtb2RpZmllZH08L2I+IC0gTGFzdCBtb2RpZmljYXRpb24gZGF0ZSBvZiBibG9jazxsaT4NCjwvdWw+DQo8aDI+QWRkaW5nIGZpZWxkcyB0byBibG9ja3M8L2gyPg0KWW91IGNhbiBhZGQgZmllbGRzIHRvIHBhZ2VibG9ja3MgdGhlIHNhbWUgd2F5IHlvdSBhZGQgdGhlbSB0byBwYWdlcy4gRm9yIGV4YW1wbGUgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciBQYWdlQmxvY2tzIHRlbXBsYXRlOg0KPHByZT57Y29udGVudCBibG9jaz0mcXVvdDtBbm90aGVyIEZpZWxkJnF1b3Q7IG9uZWxpbmU9JnF1b3Q7dHJ1ZSZxdW90O308L3ByZT4NCic7CiRsYW5nWyd0ZW1wbGF0ZV9kZWxldGVkJ10gPSAnVGhlIHRlbXBsYXRlIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZC4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPlZlcnNpb24gMC4xLCBKdWx5IDIwMDYgKGVsaWphaGxvZmdyZW4pLiANCiAgPHVsPg0KICAgIDxsaT5Jbml0aWFsIHJlbGVhc2UuPC9saT4NCiAgPC91bD4NCjwvbGk+JzsKJGxhbmdbJ2hlbHBfYWN0aW9uJ10gPSAnPGg0PlNob3cgbGlzdCBvZiByZWNlbnRseSB1cGRhdGVkIGJsb2NrczwvaDQ+DQoJIDxwPllvdSBjYW4gc2hvdyBhIGxpc3Qgb2YgdXBkYXRlZCBibG9ja3MgYnkgY2FsbGluZyBQYWdlQmxvY2tzIGxpa2UgdGhpczo8L3ByZT4NCjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTsgYWN0aW9uPSYjMDM5O3JlY2VudGx5X3VwZGF0ZWQmIzAzOTt9JzsKJGxhbmdbJ2hlbHBfbnVtYmVyJ10gPSAnPGg0PlNob3cgYSBjZXJ0YWluIG51bWJlciBvZiByZWNlbnRseSB1cGRhdGVkIGJsb2NrczwvaDQ+DQoJIDxwPllvdSBjYW4gc2hvdyBhIGxpc3Qgb2YgYSBjZXJ0YWluIG51bWJlciBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPiA8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0mIzAzOTtwYWdlYmxvY2tzJiMwMzk7IGFjdGlvbj0mIzAzOTtyZWNlbnRseV91cGRhdGVkJiMwMzk7IG51bWJlcj0mIzAzOTsxNSYjMDM5O30NCic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5BbGxvd3MgdW5saW1pdGVkIGJsb2NrcyBvZiBDb250ZW50IHRvIGJlIGF0dGFjaGVkIHRvIHBhZ2VzIGFuZCBlZGl0ZWQgaW5kaXZpZHVhbGx5PC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5QdXQgdGhpcyBpcyBpbiB5b3VyIHBhZ2Ugb3IgdGVtcGxhdGU6PC9wPg0KPHByZT57Y21zX21vZHVsZSBtb2R1bGU9JiMwMzk7cGFnZWJsb2NrcyYjMDM5O308L3ByZT4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5EaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcmcXVvdDs+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0DQpvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+DQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LCBFbGlqYWggTG9mZ3JlbiA8YSBocmVmPSZxdW90O21haWx0bzplbGlqYWhsb2ZncmVuQGVsaWphaGxvZmdyZW4uY29tJnF1b3Q7PjxlbGlqYWhsb2ZncmVuQGVsaWphaGxvZmdyZW4uY29tPjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTE2MDc0NDg2Mi4yLjIudXRtY2NuPShyZWZlcnJhbCl8dXRtY3NyPWZvcnVtLmNtc21hZGVzaW1wbGUub3JnfHV0bWNjdD0vaW5kZXgucGhwL3RvcGljLDE2NzgubmV3Lmh0bWx8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTIxNjU1NDg1NC4xMTYwNzQxNzExLjExNjQwMTk1OTguMTE2OTY2MTM4OS45JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/et_EE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0xlaGVrJnV1bWw7bGplIEJsb2tpZCc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLCBlLmcuLCBCZSBzdXJlIHRvIHNldCAmcXVvdDtVc2UgUGFnZUJsb2NrcyZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBbGwgUGFnZSBCbG9ja3MgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIFBhZ2VCbG9ja3MgaXMgbm93IHVuaW5zdGFsbGVkJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHk/IFlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgUGFnZUJsb2NrcyBhbmQgZGVsZXRlIEFMTCB5b3VyIHBhZ2UgYmxvY2tzPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnVmlnYSEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0FsbG93cyB1bmxpbWl0ZWQgYmxvY2tzIG9mIENvbnRlbnQgdG8gYmUgYXR0YWNoZWQgdG8gcGFnZXMgYW5kIGVkaXRlZCBpbmRpdmlkdWFsbHkuJzsKJGxhbmdbJ2Jsb2NrcyddID0gJ0Jsb2tpZCc7CiRsYW5nWyd0ZW1wbGF0ZXMnXSA9ICdUZW1wbGF0ZXMnOwokbGFuZ1snYWRkdGVtcGxhdGUnXSA9ICdMaXNhIFRlbXBsYXRlJzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdUZW1wbGF0ZSBOYW1lJzsKJGxhbmdbJ3RlbXBsYXRlc2F2ZWQnXSA9ICdUaGUgdGVtcGxhdGUgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdTaG93IFRhYmxlIG9mIENvbnRlbnRzJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnRGVsZXRlIFRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfbmFtZSddID0gJ05hbWUgKG51bWJlcnMsIGxldHRlcnMsIGFuZCBkYXNoZXMgb25seSwgbm8gc3BhY2VzKSc7CiRsYW5nWydvcHRpb25zX3VwZGF0ZWQnXSA9ICdVcGRhdGVkIG9wdGlvbnMgd2VyZSBzdWNjZXNzZnVsbHkgc2F2ZWQuJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGUnXSA9ICdEZWZhdWx0IHRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfdGl0bGUnXSA9ICdQZWFsa2lyaSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9wYWdlJ10gPSAnQXR0YWNoIHRvIFRoaXMgUGFnZSc7CiRsYW5nWyd0ZXh0X2NvbnRlbnQnXSA9ICdTaXN1JzsKJGxhbmdbJ3RleHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9ibG9jayddID0gJ1BhcmVudCBCbG9jayc7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdDcmVhdGlvbiBEYXRlJzsKJGxhbmdbJ3RleHRfbW9kaWZ5ZGF0ZSddID0gJ011dWRldHVkJzsKJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKJGxhbmdbJ25vYmxvY2tzJ10gPSAnWW91IGhhdmUgbm90IGFkZGVkIGFueSBibG9ja3MgeWV0Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0xpc2EgQmxva2snOwokbGFuZ1snZWRpdF90ZW1wbGF0ZSddID0gJ0VkaXQgVGVtcGxhdGUnOwokbGFuZ1snZGVsZXRlX3RlbXBsYXRlJ10gPSAnRGVsZXRlIFRlbXBsYXRlJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfdGVtcGxhdGUnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdGVtcGxhdGU/JzsKJGxhbmdbJ2Jsb2NrX2FkZGVkJ10gPSAnVGhlIGJsb2NrIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGRhdGFiYXNlLic7CiRsYW5nWydibG9ja191cGRhdGVkJ10gPSAnVGhlIGJsb2NrIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgdG8gdGhlIGRhdGFiYXNlLic7CiRsYW5nWydvcHRpb25zJ10gPSAnVmFsaWt1ZCc7CiRsYW5nWydzdWJtaXQnXSA9ICdTYWFkYSc7CiRsYW5nWyduYW1lJ10gPSAnTmltaSc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3RlbXBsYXRlX2hlbHAnXSA9ICdUZW1wbGF0ZSBIZWxwJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdUaGUgdGVtcGxhdGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAwLjEsIEp1bHkgMjAwNiAoZWxpamFobG9mZ3JlbikuIA0KICA8dWw+DQogICAgPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPg0KICA8L3VsPg0KPC9saT4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+UHV0IHRoaXMgaXMgaW4geW91ciBwYWdlIG9yIHRlbXBsYXRlOjwvcD4NCjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTt9PC9wcmU+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+RGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE1MjQ2NDg1MDcuMTE1Mzc0MjA0NS4xMTUzOTI2NDc4LjExNTM5OTM5NjUuOSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjExNTM5OTM5NjUuOS44LnV0bWNjbj0ob3JnYW5pYyl8dXRtY3NyPWdvb2dsZXx1dG1jdHI9Y21zIG1hZGUgc2ltcGxlfHV0bWNtZD1vcmdhbmljJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0Jsb2NzIGRlIFBhZ2VzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVmV1aWxsZXogdm91cyBhc3N1cmVyIGRlIGQmZWFjdXRlO2ZpbmlyIGxhIHBlcm1pc3Npb24gJnF1b3Q7VXNlIFBhZ2VCbG9ja3MmcXVvdDsgcG91ciB1dGlsaXNlciBjZSBtb2R1bGUmbmJzcDshJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUb3VzIGxlcyBibG9jcyBvbnQgJmVhY3V0ZTt0JmVhY3V0ZTsgc3VwcHJpbSZlYWN1dGU7cyBldCBsZSBtb2R1bGUgQmxvY3MgZGUgUGFnZXMgKFBhZ2VCbG9ja3MpIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgZCZlYWN1dGU7c2luc3RhbGwmZWFjdXRlOyc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnVnJhaW1lbnQ/ICZFY2lyYzt0ZXMtdm91cyBzJnVjaXJjO3IgcXVlIHZvdXMgZCZlYWN1dGU7c2lyZXogZCZlYWN1dGU7c2luc3RhbGxlciBsZSBtb2R1bGUgUGFnZUJsb2NrcyBldCBzdXBwcmltZXIgVE9VUyBsZXMgYmxvY3MgZGUgY29udGVudT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdMZSBtb2R1bGUgYSAmZWFjdXRlO3QmZWFjdXRlOyBkJmVhY3V0ZTtzaW5zdGFsbCZlYWN1dGU7JzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ0xhIHZlcnNpb24gJXMgYSAmZWFjdXRlO3QmZWFjdXRlOyBpbnN0YWxsJmVhY3V0ZTtlLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdMZXMgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBkdSBtb2R1bGUgb250ICZlYWN1dGU7dCZlYWN1dGU7IG1pc2VzICZhZ3JhdmU7IGpvdXInOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjJmVncmF2ZTtzIHJlZnVzJmVhY3V0ZTsuIFZldWlsbGV6IHYmZWFjdXRlO3JpZmllciB2b3MgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyZXVyJm5ic3A7JzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTGUgbW9kdWxlIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgbWlzICZhZ3JhdmU7IGpvdXIgJmFncmF2ZTsgbGEgdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnUHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBkdSBtb2R1bGUnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb24gZHUgbW9kdWxlJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnUGVybWV0ICZhZ3JhdmU7IHVuIG5vbWJyZSBpbGxpbWl0JmVhY3V0ZTsgZGUgYmxvY3MgZGUgY29udGVudSBkJiMwMzk7JmVjaXJjO3RyZSBhdHRhY2gmZWFjdXRlO3MgYXV4IHBhZ2VzIGV0ICZlYWN1dGU7ZGl0JmVhY3V0ZTtzIGluZGl2aWR1ZWxsZW1lbnQuJzsKJGxhbmdbJ2Jsb2NrcyddID0gJ0Jsb2NzJzsKJGxhbmdbJ3RlbXBsYXRlcyddID0gJ0dhYmFyaXRzJzsKJGxhbmdbJ2FkZHRlbXBsYXRlJ10gPSAnQWpvdXRlciB1biBnYWJhcml0JzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdOb20gZHUgZ2FiYXJpdCc7CiRsYW5nWyd0ZW1wbGF0ZXNhdmVkJ10gPSAnQ2UgZ2FiYXJpdCBhICZlYWN1dGU7dCZlYWN1dGU7IHNhdXZlZ2FyZCZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cyBkYW5zIGxhIGJhc2UgZGUgZG9ubiZlYWN1dGU7ZXMuJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdBZmZpY2hlciBsYSB0YWJsZSBkZXMgbWF0aSZlZ3JhdmU7cmVzJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnU3VwcHJpbWVyIGxlIGdhYmFyaXQnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTm9tIChjaGlmZnJlcywgbGV0dHJlcywgZXQgdGlyZXRzIHNldWxlbWVudCwgcGFzIGQmIzAzOTtlc3BhY2VzKSc7CiRsYW5nWydvcHRpb25zX3VwZGF0ZWQnXSA9ICdMZXMgb3B0aW9ucyBvbnQgJmVhY3V0ZTt0JmVhY3V0ZTsgbWlzZXMgJmFncmF2ZTsgam91ci4nOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZSddID0gJ0dhYmFyaXQgcGFyIGQmZWFjdXRlO2ZhdXQnOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ1RpdHJlJzsKJGxhbmdbJ3RleHRfcGFyZW50X3BhZ2UnXSA9ICdBdHRhY2hlciAmYWdyYXZlOyBjZXR0ZSBwYWdlJzsKJGxhbmdbJ3RleHRfY29udGVudCddID0gJ0NvbnRlbnUnOwokbGFuZ1sndGV4dF90ZW1wbGF0ZSddID0gJ0dhYmFyaXQnOwokbGFuZ1sndGV4dF9wYXJlbnRfYmxvY2snXSA9ICdCbG9jIHBhcmVudCc7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdEYXRlIGRlIGNyJmVhY3V0ZTthdGlvbic7CiRsYW5nWyd0ZXh0X21vZGlmeWRhdGUnXSA9ICdNb2RpZmkmZWFjdXRlOyc7CiRsYW5nWydub25lJ10gPSAnQXVjdW4nOwokbGFuZ1snbm9ibG9ja3MnXSA9ICdWb3VzIG4mIzAzOTthdmV6IHBhcyBham91dCZlYWN1dGU7IGRlIGJsb2MgcG91ciBsZSBtb21lbnQnOwokbGFuZ1snYWRkYmxvY2snXSA9ICdBam91dGVyIHVuIGJsb2MnOwokbGFuZ1snZWRpdF90ZW1wbGF0ZSddID0gJyZFYWN1dGU7ZGl0ZXIgdW4gYmxvYyc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdTdXBwcmltZXIgbGUgZ2FiYXJpdCc7CiRsYW5nWydyZWFsbHlfZGVsZXRlX3RlbXBsYXRlJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7ciBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBnYWJhcml0Pyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0xlIGJsb2MgYSAmZWFjdXRlO3QmZWFjdXRlOyBham91dCZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cyBkYW5zIGxhIGJhc2UgZGUgZG9ubiZlYWN1dGU7ZXMuJzsKJGxhbmdbJ2Jsb2NrX3VwZGF0ZWQnXSA9ICdMZSBibG9jIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgc2F1dmVnYXJkJmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzIGRhbnMgbGEgYmFzZSBkZSBkb25uJmVhY3V0ZTtlcy4nOwokbGFuZ1snYmxvY2tfZGVsZXRlZCddID0gJ0NlIGJsb2MgYSAmZWFjdXRlO3QmZWFjdXRlOyBzdXBwcmltJmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzJzsKJGxhbmdbJ2RlbGV0ZV9ibG9jayddID0gJ1N1cHByaW1lciBsZSBibG9jJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICcmRWNpcmM7dGVzLXZvdXMgcyZ1Y2lyYztyIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGJsb2M/JzsKJGxhbmdbJ29yZGVyX3VwZGF0ZWQnXSA9ICdMJiMwMzk7b3JkcmUgZGVzIGJsb2NzIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgbWlzICZhZ3JhdmU7IGpvdXInOwokbGFuZ1snb3B0aW9ucyddID0gJ09wdGlvbnMnOwokbGFuZ1snc3VibWl0J10gPSAnU291bWV0dHJlJzsKJGxhbmdbJ25hbWUnXSA9ICdOb20nOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdHYWJhcml0JzsKJGxhbmdbJ3RlbXBsYXRlX2hlbHAnXSA9ICdBaWRlIGdhYmFyaXRzJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdDZSBnYWJhcml0IGEgJmVhY3V0ZTt0JmVhY3V0ZTsgc3VwcHJpbSZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cy4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPlZlcnNpb24gMC4xLCBqdWlsbGV0IDIwMDYgKGVsaWphaGxvZmdyZW4pLiANCiAgPHVsPg0KICAgIDxsaT5WZXJzaW9uIGluaXRpYWxlLjwvbGk+DQogIDwvdWw+DQo8L2xpPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPlF1ZSBmYWl0IGNlIG1vZHVsZT88L2gzPg0KPHA+TGUgbW9kdWxlIEJsb2NzIGRlIFBhZ2VzIChQYWdlQmxvY2tzKSBwZXJtZXQgJmFncmF2ZTsgdW4gbm9tYnJlIGlsbGltaXQmZWFjdXRlOyBkZSBibG9jcyBkZSBjb250ZW51IGQmIzAzOTsmZWNpcmM7dHJlIGF0dGFjaCZlYWN1dGU7cyBhdXggcGFnZXMgZXQgJmVhY3V0ZTtkaXQmZWFjdXRlO3MgaW5kaXZpZHVlbGxlbWVudC48L3A+DQo8aDM+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXI/PC9oMz4NCjxwPklucyZlYWN1dGU7cmV6IGNlY2kgZGFucyB2b3MgcGFnZXMgb3UgZ2FiYXJpdHMmbmJzcDs6PC9wPg0KPHByZT57Y21zX21vZHVsZSBtb2R1bGU9JiMwMzk7cGFnZWJsb2NrcyYjMDM5O308L3ByZT4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPkNlIG1vZHVsZSBuZSBjb250aWVudCBhdWN1biBzdXBwb3J0IGNvbW1lcmNpYWwuIENlcGVuZGFudCwgY2VzIHJlc3NvdXJjZXMgc29udCBkaXNwb25pYmxlcyBwb3VyIHZvdXMgYWlkZXI6PC9wPg0KPHVsPg0KPGxpPkRlcyBkaXNjdXNzaW9ucyAmYWdyYXZlOyBwcm9wb3MgZGUgY2UgbW9kdWxlIHBldXZlbnQgc2UgdHJvdXZlciBzdXIgbGVzIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7IHRhcmdldD0mcXVvdDtfYmxhbmsmcXVvdDs+Rm9ydW1zIENNUyBNYWRlIFNpbXBsZSA8L2E+LjwvbGk+DQo8bGk+RXQgZW5maW4sIHZvdXMgcG91dmV6IHJlbmNvbnRyZXIgdW4gY2VydGFpbiBzdWNjJmVncmF2ZTtzIGVuIGVudm95YW50IHVuIGVtYWlsIGRpcmVjdGVtZW50ICZhZ3JhdmU7IGwmIzAzOTthdXRldXIuPC9saT4gPC91bD4NCjxwPkNvbmZvcm0mZWFjdXRlO21lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBHUEwsIGNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyB0ZWwgcXVlbC4gVmV1aWxsZXogdm91cyByJmVhY3V0ZTtmJmVhY3V0ZTtyZXIgZGlyZWN0ZW1lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBwb3VyIHRvdXQgYXZpcyBkZSBub24gcmVzcG9uc2FiaWxpdCZlYWN1dGU7LjwvcD4NCg0KPGgzPkNvcHlyaWdodCBldCBMaWNlbmNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBUb3VzIGRyb2l0cyByJmVhY3V0ZTtzZXJ2JmVhY3V0ZTtzLjwvcD4NCjxwPkNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyBzb3VzIGxhIGxpY2VuY2UgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDsgdGFyZ2V0PSZxdW90O19ibGFuayZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBWb3VzIGRldmV6IGFnciZlYWN1dGU7ZXIgYXV4IHRlcm1lcyBkZSBjZXR0ZSBsaWNlbmNlIHBvdXIgcG91dm9pciB1dGlsaXNlciBjZSBtb2R1bGUuPC9wPg0KJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuNDQxNzc1NjczLjExNDk5MTQzMTUuMTE1NDc5MDU0MS4xMTU0OTE5Mjk2LjM3JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTE1NDc5MDU0MS4zNi4xNC51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9d2lraS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/hu_HU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ09sZGFsJmVhY3V0ZTtwJmlhY3V0ZTt0xZEgZG9ib3pvayc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLCBlLmcuLCBCZSBzdXJlIHRvIHNldCAmcXVvdDtVc2UgUGFnZUJsb2NrcyZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNaW5kZW4gZG9ib3p0IGxldmV0dCZ1dW1sO25rLCBhIG1vZHVsIGVsIGxldHQgdCZhYWN1dGU7dm9sJmlhY3V0ZTt0dmEnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1ZhbCZvYWN1dGU7YmFuPyBUJmVhY3V0ZTtueWxlZyBlbHQmYWFjdXRlO3ZvbCZpYWN1dGU7dG9kIGEgUGFnZUJsb2Nrcy10IGxzIHQmb3VtbDtyJm91bWw7bHN6IG1pbmRlbiBkb2JvenQgYXogb2xkYWxyJm9hY3V0ZTtsPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ0EgbW9kdWwgZWwgbGV0dCB0JmFhY3V0ZTt2b2wmaWFjdXRlO3R2YS4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnQXogaW5zdGFsbCZhYWN1dGU7bHQgbW9kdWwgdmVyemkmb2FjdXRlO2phICVzLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdBIG1vZHVsIGplbGxlbXrFkWl0IGZyaXNzJmlhY3V0ZTt0ZXR0JnV1bWw7ay4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQSBob3p6JmFhY3V0ZTtmJmVhY3V0ZTtyJmVhY3V0ZTtzIG1lZ3RhZ2FkdmEuIEsmZWFjdXRlO3JlbSwgZWxsZW7FkXJpenplIGEgam9nb3N1bHRzJmFhY3V0ZTtnb2thdC4nOwokbGFuZ1snZXJyb3InXSA9ICdIaWJhISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ0EgbW9kdWx0IGZyaXNzJmlhY3V0ZTt0ZXR0JnV1bWw7ayBhKHopICVzIHZlcnppJm9hY3V0ZTtyYS4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWwgcHJlZmVyZW5jaSZhYWN1dGU7ayc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bCBBZG1pbmlzenRyJmFhY3V0ZTtjaSZvYWN1dGU7cyBQYW5lbCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0xlaGV0xZF2JmVhY3V0ZTsgdGVzemkgayZ1dW1sO2wmb3VtbDtuYiZvdW1sO3rFkSB0YXJ0YWxtJnVhY3V0ZTsgZG9ib3pvayBlbGhlbHlleiZlYWN1dGU7cyZlYWN1dGU7dCAmZWFjdXRlO3Mgc3plcmtlc3p0JmVhY3V0ZTtzJmVhY3V0ZTt0Lic7CiRsYW5nWydibG9ja3MnXSA9ICdEb2Jvem9rJzsKJGxhbmdbJ3RlbXBsYXRlcyddID0gJ1NhYmxvbm9rJzsKJGxhbmdbJ2FkZHRlbXBsYXRlJ10gPSAnU2FibG9uIGhvenomYWFjdXRlO2FkJmFhY3V0ZTtzYSc7CiRsYW5nWyd0ZW1wbGF0ZW5hbWV0ZXh0J10gPSAnU2FibG9uIG5ldmUnOwokbGFuZ1sndGVtcGxhdGVzYXZlZCddID0gJ0Egc2FibG9udCBzaWtlcmVzZW4gbWVudGV0dCZ1dW1sO25rIGF6IGFkYXRiJmFhY3V0ZTt6aXNiYS4nOwokbGFuZ1snb3JkZXJfdXBkYXRlZCddID0gJ0EgZG9ib3pva2F0IHNpa2VyZXNlbiAmdWFjdXRlO2pyYXN6JmFhY3V0ZTttb3p0dWsnOwokbGFuZ1snc2hvd3RvYyddID0gJ1RhcnRhbG9tamVneXomZWFjdXRlO2sgbXV0YXQmYWFjdXRlO3NhJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnU2FibG9uIHQmb3VtbDtybCZlYWN1dGU7c2UnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTiZlYWN1dGU7diAoc3omYWFjdXRlO21vaywgYmV0xbFrICZlYWN1dGU7cyBrJm91bWw7dMWRamVsZWsgc3omb2FjdXRlO2smb3VtbDt6IG4mZWFjdXRlO2xrJnV1bWw7bCknOwokbGFuZ1snb3B0aW9uc191cGRhdGVkJ10gPSAnQSBmcmlzcyZpYWN1dGU7dGV0dCBvcGNpJm9hY3V0ZTtrYXQgc2lrZXJlc2VuIG1lbnRldHQmdXVtbDtrLic7CiRsYW5nWydkZWZhdWx0X3RlbXBsYXRlJ10gPSAnQWxhcCZlYWN1dGU7cnRlbG1lemV0dCBzYWJsb24nOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ0MmaWFjdXRlO20nOwokbGFuZ1sndGV4dF9wYXJlbnRfcGFnZSddID0gJ0NzYXRvbCZhYWN1dGU7cyBlaGhleiBheiBvbGRhbGhveic7CiRsYW5nWyd0ZXh0X2NvbnRlbnQnXSA9ICdUYXJ0YWxvbSc7CiRsYW5nWyd0ZXh0X3RlbXBsYXRlJ10gPSAnU2FibG9uJzsKJGxhbmdbJ3RleHRfcGFyZW50X2Jsb2NrJ10gPSAnU3omdXVtbDtsxZEgZG9ib3onOwokbGFuZ1sndGV4dF9jcmVhdGVkYXRlJ10gPSAnTCZlYWN1dGU7dHJlaG96JmFhY3V0ZTtzIGQmYWFjdXRlO3R1bWEnOwokbGFuZ1sndGV4dF9tb2RpZnlkYXRlJ10gPSAnTSZvYWN1dGU7ZG9zJmlhY3V0ZTt0b3R0JzsKJGxhbmdbJ25vbmUnXSA9ICdOaW5jcyc7CiRsYW5nWydub2Jsb2NrcyddID0gJ00mZWFjdXRlO2cgbmVtIGFkb3R0IGhvenomYWFjdXRlOyBlZ3kgZG9ib3p0IHNlbSwgxZBybmFneSAmVWFjdXRlO3IhJzsKJGxhbmdbJ2FkZGJsb2NrJ10gPSAnRG9ib3ogaG96eiZhYWN1dGU7YWQmYWFjdXRlO3NhJzsKJGxhbmdbJ2VkaXRfdGVtcGxhdGUnXSA9ICdTYWJsb24gc3plcmtlc3p0JmVhY3V0ZTtzZSc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdTYWJsb24gdCZvdW1sO3JsJmVhY3V0ZTtzZSc7CiRsYW5nWydyZWFsbHlfZGVsZXRlX3RlbXBsYXRlJ10gPSAnQml6dG9zYW4gdCZvdW1sO3JsJm91bWw7ZCBlenQgYSBzYWJsb250Pyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0EgZG9ib3p0IHNpa2VyZXNlbiBob3p6JmFhY3V0ZTthZHR1ayBheiBhZGF0YiZhYWN1dGU7emlzaG96Lic7CiRsYW5nWydibG9ja191cGRhdGVkJ10gPSAnQSBkb2JvenQgc2lrZXJlc2VuIG1lbnRldHQmdXVtbDtrIGF6IGFkYXRiJmFhY3V0ZTt6aXNiYS4nOwokbGFuZ1snYmxvY2tfZGVsZXRlZCddID0gJ0EgZG9ib3p0IHNpa2VyZXNlbiB0Jm91bWw7ciZvdW1sO2x0JnV1bWw7ay4nOwokbGFuZ1snZGVsZXRlX2Jsb2NrJ10gPSAnRG9ib3ogdCZvdW1sO3JsJmVhY3V0ZTtzZS4nOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV9ibG9jayddID0gJ0JpenRvc2FuIHQmb3VtbDtybCZvdW1sO2QgZXp0IGEgZG9ib3p0Pyc7CiRsYW5nWydpbWFnZXRleHQnXSA9ICdLJmVhY3V0ZTtwaGV6IHRhcnRveiZvYWN1dGU7IHN6Jm91bWw7dmVnJzsKJGxhbmdbJ3RleHQnXSA9ICdTeiZvdW1sO3ZlZyc7CiRsYW5nWydvcHRpb25zJ10gPSAnT3BjaSZvYWN1dGU7ayc7CiRsYW5nWydzdWJtaXQnXSA9ICdFbGsmdXVtbDtsZCc7CiRsYW5nWyduYW1lJ10gPSAnTiZlYWN1dGU7dic7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1NhYmxvbic7CiRsYW5nWyd0ZW1wbGF0ZV9oZWxwJ10gPSAnU2FibG9uIHMmdWFjdXRlO2cmb2FjdXRlOyc7CiRsYW5nWydoZWxwX3RlbXBsYXRlJ10gPSAnPGgyPlRlbXBsYXRlIHZhcmlhYmxlczwvaDI+DQo8dWw+DQo8bGk+PGI+eyRhbGlhc308L2I+IC0gQWxpYXMgb2YgYmxvY2s8L2xpPg0KPGxpPjxiPnskdGl0bGV9PC9iPiAtIFRpdGxlIG9mIGJsb2NrPC9saT4NCjxsaT48Yj57JG1vZGlmaWVkfTwvYj4gLSBMYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIGJsb2NrPGxpPg0KPC91bD4NCjxoMj5BZGRpbmcgZmllbGRzIHRvIGJsb2NrczwvaDI+DQpZb3UgY2FuIGFkZCBmaWVsZHMgdG8gcGFnZWJsb2NrcyB0aGUgc2FtZSB3YXkgeW91IGFkZCB0aGVtIHRvIHBhZ2VzLiBGb3IgZXhhbXBsZSBhZGQgc29tZXRoaW5nIGxpa2UgdGhpcyB0byB5b3VyIFBhZ2VCbG9ja3MgdGVtcGxhdGU6DQo8cHJlPntjb250ZW50IGJsb2NrPSZxdW90O0Fub3RoZXIgRmllbGQmcXVvdDsgb25lbGluZT0mcXVvdDt0cnVlJnF1b3Q7fTwvcHJlPg0KJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdBIHNhYmxvbnQgc2lrZXJlc2VuIHQmb3VtbDtyJm91bWw7bHQmdXVtbDtrLic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAwLjEsIEp1bHkgMjAwNiAoZWxpamFobG9mZ3JlbikuIA0KICA8dWw+DQogICAgPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPg0KICA8L3VsPg0KPC9saT4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+UHV0IHRoaXMgaXMgaW4geW91ciBwYWdlIG9yIHRlbXBsYXRlOjwvcD4NCjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTt9PC9wcmU+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+RGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjExNTM3NzM0NzcuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjExNzI2OTAxOTEuMTE1Mzc3MzQ3Ny4xMTU1MTA0NjYwLjExNTUzNjY2MTEuNSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1BhZ2UgQmxvY2tzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTWVzc2FnZ2lvIFBvc3QgSW5zdGFsbGF6aW9uZTogYXNzaWN1cmF0ZXZpIGRpIGltcG9zdGFyZSBpIHBlcm1lc3NpICZxdW90O3VzYSBQYWdlQmxvY2tzJnF1b3Q7IHBlciB1dGlsaXp6YXJlIHF1ZXN0byBtb2R1bG8hJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUdXR0aSBpIEJsb2NjaGkgZGkgUGFnaW5hIHNvbm8gc3RhdGkgcmltb3NzaSBlIGlsIG1vZHVsbyBvcmEgJmVncmF2ZTsgZGlzaW5zdGFsbGF0byc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnU2lldGUgc2ljdXJpPyBWb2xldGUgZGF2dmVybyBkaXNpbnN0YWxsYXJlIFBhZ2VCbG9ja3MgZSBjYW5jZWxsYXJlIFRVVFRJIGkgYmxvY2NoaSBkaSBwYWdpbmE/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxvIGRpc2luc3RhbGxhdG8uJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsbyB2ZXJzaW9uZSAlcyBpbnN0YWxsYXRhLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdQcmVmZXJlbnplIGRlbCBtb2R1bG8gYWdnaW9ybmF0ZS4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzbyBuZWdhdG8uIENvbnRyb2xsYXRlIGkgdm9zdHJpIHBlcm1lc3NpLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yZSEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bG8gYWdnaW9ybmF0byBhbGxhIHZlcnNpb25lICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdQcmVmZXJlbnplIGRlbCBNb2R1bG8nOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFubmVsbG8gZGkgQW1taW5pc3RyYXppb25lIGRlbCBNb2R1bG8nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdQZXJtZXR0ZSBkaSBhbGxlZ2FyZSBhbGxlIHBhZ2luZSBlIG1vZGlmaWNhcmUgaW5kaXZpZHVhbG1lbnRlIHVuIG51bWVybyBpbGxpbWl0YXRvIGRpIGJsb2NjaGkgZGkgQ29udGVudXRvLic7CiRsYW5nWydibG9ja3MnXSA9ICdCbG9jY2hpJzsKJGxhbmdbJ3RlbXBsYXRlcyddID0gJ01vZGVsbGknOwokbGFuZ1snYWRkdGVtcGxhdGUnXSA9ICdBZ2dpdW5naSBNb2RlbGxvJzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdOb21lIE1vZGVsbG8nOwokbGFuZ1sndGVtcGxhdGVzYXZlZCddID0gJ0lsIE1vZGVsbG8gJmVncmF2ZTsgc3RhdG8gc2FsdmF0byBjb24gc3VjY2Vzc28gbmVsIGRhdGFiYXNlJzsKJGxhbmdbJ29yZGVyX3VwZGF0ZWQnXSA9ICdJIEJsb2NjaGkgc29ubyBzdGF0aSByaW9wcmRpbmF0aSBjb24gc3VjY2Vzc28nOwokbGFuZ1snc2hvd3RvYyddID0gJ01vc3RyYSBUYWJlbGxhIGRlaSBDb250ZW51dGknOwokbGFuZ1snY29udGVudHMnXSA9ICdDb250ZW51dGknOwokbGFuZ1snZGVsZXRldGVtcGxhdGUnXSA9ICdDYW5jZWxsYSBNb2RlbGxvJzsKJGxhbmdbJ3RleHRfbmFtZSddID0gJ05vbWUgKG51bWVyaSwgbGV0dGVyZSBlIHRyYXR0aSBzb2x0YW50bywgbmVzc3VubyBzcGF6aW8pJzsKJGxhbmdbJ29wdGlvbnNfdXBkYXRlZCddID0gJ0xlIG9wemlvbmkgYWdnaW9ybmF0ZSBzb25vIHN0YXRlIHNhbHZhdGUgY29uIHN1Y2Nlc3NvLic7CiRsYW5nWydkZWZhdWx0X3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBkaSBkZWZhdWx0JzsKJGxhbmdbJ3RleHRfdGl0bGUnXSA9ICdUaXRvbG8nOwokbGFuZ1sndGV4dF9wYXJlbnRfcGFnZSddID0gJ0FsbGVnYSBhIHF1ZXN0YSBwYWdpbmEnOwokbGFuZ1sndGV4dF9jb250ZW50J10gPSAnQ29udGVudXRvJzsKJGxhbmdbJ3RleHRfdGVtcGxhdGUnXSA9ICdNb2RlbGxvJzsKJGxhbmdbJ3RleHRfcGFyZW50X2Jsb2NrJ10gPSAnQmxvY2NvIHN1cGVyaW9yZSAoZ2VuaXRvcmUpJzsKJGxhbmdbJ3RleHRfY3JlYXRlZGF0ZSddID0gJ0RhdGEgZGkgY3JlYXppb25lJzsKJGxhbmdbJ3RleHRfbW9kaWZ5ZGF0ZSddID0gJ01vZGlmaWNhdG8nOwokbGFuZ1snbm9uZSddID0gJ05lc3N1bm8nOwokbGFuZ1snbm9ibG9ja3MnXSA9ICdOb24gYXZldGUgYW5jb3JhIGFnZ2l1bnRvIG5lc3N1biBibG9jY28nOwokbGFuZ1snYWRkYmxvY2snXSA9ICdBZ2dpdW5naSBCbG9jY28nOwokbGFuZ1snZWRpdF90ZW1wbGF0ZSddID0gJ01vZGlmaWNhIE1vZGVsbG8nOwokbGFuZ1snZGVsZXRlX3RlbXBsYXRlJ10gPSAnQ2FuY2VsbGEgTW9kZWxsbyc7CiRsYW5nWydyZWFsbHlfZGVsZXRlX3RlbXBsYXRlJ10gPSAnU2lldGUgc2ljdXJpIGRpIHZvbGVyZSBjYW5jZWxsYXJlIHF1ZXN0byBtb2RlbGxvPyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0lsIGJsb2NjbyAmZWdyYXZlOyBzdGF0byBhZ2dpdW50byBhbCBkYXRhYmFzZSBjb24gc3VjY2Vzc28uJzsKJGxhbmdbJ2Jsb2NrX3VwZGF0ZWQnXSA9ICdJbCBibG9jY28gJmVncmF2ZTsgc3RhdG8gc2FsdmF0byBzdWwgZGF0YWJhc2UgY29uIHN1Y2Nlc3NvJzsKJGxhbmdbJ2Jsb2NrX2RlbGV0ZWQnXSA9ICdJbCBibG9jY28gJmVncmF2ZTsgc3RhdG8gY2FuY2VsbGF0byBjb24gc3VjY2Vzc28uJzsKJGxhbmdbJ2RlbGV0ZV9ibG9jayddID0gJ0NhbmNlbGxhIGJsb2Njbyc7CiRsYW5nWydyZWFsbHlfZGVsZXRlX2Jsb2NrJ10gPSAnU2lldGUgc2ljdXJpIGRpIHZvbGVyZSBjYW5jZWxsYXJlIHF1ZXN0byBibG9jY28gZGkgcGFnaW5hPyc7CiRsYW5nWydpbWFnZXRleHQnXSA9ICdUZXN0byBkZWxsJiMwMzk7aW1tYWdpbmUnOwokbGFuZ1sndGV4dCddID0gJ1Rlc3RvJzsKJGxhbmdbJ29wdGlvbnMnXSA9ICdPcHppb25pJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ0ludmlhJzsKJGxhbmdbJ25hbWUnXSA9ICdOb21lJzsKJGxhbmdbJ3RlbXBsYXRlJ10gPSAnTW9kZWxsbyc7CiRsYW5nWyd0ZW1wbGF0ZV9oZWxwJ10gPSAnQWl1dG8gc3VpIE1vZGVsbGknOwokbGFuZ1snYWxpYXMnXSA9ICdBbGlhcyAodXRpbGl6emF0byBwZXIgcmljaGlhbWFyZSBpbCBibG9jY28pJzsKJGxhbmdbJ21vZGlmaWVkJ10gPSAnTW9kaWZpY2F0byc7CiRsYW5nWydpbWFnZSddID0gJ0ltbWFnaW5lJzsKJGxhbmdbJ29yaWVudGF0aW9uJ10gPSAnT3JpZW50YW1lbnRvJzsKJGxhbmdbJ2hlbHBfdGVtcGxhdGUnXSA9ICc8aDI+VmFyaWFiaWxpIGRlbCBNb2RlbGxvPC9oMj4NCjx1bD4NCjxsaT48Yj57JGFsaWFzfTwvYj4gLSBBbGlhcyBkZWwgYmxvY2NvPC9saT4NCjxsaT48Yj57JHRpdGxlfTwvYj4gLSBUaXRvbG8gZGVsIGJsb2NjbzwvbGk+DQo8bGk+PGI+eyRtb2RpZmllZH08L2I+IC0gRGF0YSBkZWxsJiMwMzk7dWx0aW1hIG1vZGlmaWNhIGFsIGJsb2NjbzxsaT4NCjwvdWw+DQo8aDI+Q2FtcGkgYWdnaXVudGl2aSBkZWwgYmxvY2NvPC9oMj4NClBvdGV0ZSBhZ2dpdW5nZXJlIGNhbXBpIGFsIGJsb2NjbyBkaSBwYWdpbmEgbmVsbG8gc3Rlc3NvIG1vZG8gaW4gY3VpIGxpIGFnZ2l1bmdldGUgYWxsZSBub3JtYWxpIHBhZ2luZS4gUGVyIGVzZW1waW8sIGFnZ2l1bmdlcmUgcXVhbGNvc2EgZGkgcXVlc3RvIHRpcG8gYWwgdm9zdHJvIE1vZGVsbG8gZGkgQmxvb2NvIGRpIFBhZ2luYToNCjxwcmU+e2NvbnRlbnQgYmxvY2s9JnF1b3Q7QWx0cm8gQ2FtcG8mcXVvdDsgb25lbGluZT0mcXVvdDt0cnVlJnF1b3Q7fTwvcHJlPg0KJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdJbCBtb2RlbGxvICZlZ3JhdmU7IHN0YXRvIGNhbmNlbGxhdG8gY29uIHN1Y2Nlc3NvJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzaW9uIDAuMSwgSnVseSAyMDA2IChlbGlqYWhsb2ZncmVuKS4gDQogIDx1bD4NCiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+DQogIDwvdWw+DQo8L2xpPic7CiRsYW5nWydoZWxwX2FjdGlvbiddID0gJzxoND5Nb3N0cmEgbCYjMDM5O2VsZW5jbyBkZWkgYmxvY2NoaSBhZ2dpb3JuYXRpIGRpIHJlY2VudGU8L2g0Pg0KCSA8cD5Qb3RldGUgdmlzdWFsaXp6YXJlIHVuIGVsZW5jbyBkZWkgYmxvY2NoaSBhZ2dpb3JuYXRpIHJpY2hpYW1hbmRvIGlsIG1vZHVsbyBQYWdlQmxvY2tzIGluIHF1ZXN0byBtb2RvOjwvcHJlPg0KPHByZT57Y21zX21vZHVsZSBtb2R1bGU9JiMwMzk7cGFnZWJsb2NrcyYjMDM5OyBhY3Rpb249JiMwMzk7cmVjZW50bHlfdXBkYXRlZCYjMDM5O30nOwokbGFuZ1snaGVscF9udW1iZXInXSA9ICc8aDQ+TW9zdHJhIHVuIG51bWVybyBkZWZpbml0byBkaSBibG9jY2hpIGFnZ2lvcm5hdGkgZGkgcmVjZW50ZTwvaDQ+DQoJIDxwPlBvdGV0ZSB2aXN1YWxpenphcmUgdW4gZWxlbmNvIGRpIHVuIG51bWVybyBkZWZpbml0byBkaSBibG9jY2hpIGFnZ2lvcm5hdGkgcmljaGlhbWFuZG8gaWwgbW9kdWxvIFBhZ2VCbG9ja3MgaW4gcXVlc3RvIG1vZG86PC9wcmU+IDxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTsgYWN0aW9uPSYjMDM5O3JlY2VudGx5X3VwZGF0ZWQmIzAzOTsgbnVtYmVyPSYjMDM5OzE1JiMwMzk7fQ0KJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+Q29zYSBGYT88L2gzPg0KPHA+UGVybWV0dGUgZGkgYWxsZWdhcmUgYWxsYSBwYWdpbmEgZSBtb2RpZmljYXJlIGluZGl2aWR1YWxtZW50ZSB1biBudW1lcm8gaWxsaW1pdGF0byBkaSBibG9jY2hpIGRpIENvbnRlbnV0bzwvcD4NCjxoMz5Db21lIHNpIHVzYT88L2gzPg0KPHA+SW5zZXJpdGUgcXVlc3RvIGNvZGljZSBuZWxsYSB2b3N0cmEgcGFnaW5hIG8gbW9kZWxsbzo8L3A+DQo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0mIzAzOTtwYWdlYmxvY2tzJiMwMzk7fTwvcHJlPg0KPGgzPkFzc2lzdGVuemE8L2gzPg0KPHA+UXVlc3RvIG1vZHVsbyBub24gcHJldmVkZSBhc3Npc3RlbnphIGNvbW1lcmNpYWxlLiBUdXR0YXZpYSBjaSBzb25vIGRpdmVyc2Ugcmlzb3JzZSBkaXNwb25pYmlsaSBwZXIgYWl1dGFydmk6PC9wPg0KPHVsPg0KPGxpPkRpc2N1c3Npb25pIHN1IHF1ZXN0byBtb2R1bG8gcG9zc29ubyBlc3NlcmUgdHJvdmF0ZSBuZWwgPGEgaHJlZj0mcXVvdDtodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcmcXVvdDs+Q01TIE1hZGUgU2ltcGxlIEZvcnVtPC9hPi48L2xpPg0KPGxpPkluZmluZSwgcG90cmVzdGUgYXZlcmUgcXVhbGNoZSBwb3NzaWJpbGl0JmFncmF2ZTsgaW52aWFuZG8gdW4mIzAzOTtlLW1haWwgZGlyZXR0YW1lbnRlLjwvbGk+ICANCjwvdWw+DQo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQNCm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDYsIEVsaWphaCBMb2ZncmVuIDxhIGhyZWY9JnF1b3Q7bWFpbHRvOmVsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20mcXVvdDs+PGVsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20+PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMJnF1b3Q7PkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQonOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMTYwNDA2NTQ5LjUuNC51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9ZGV2LmNtc21hZGVzaW1wbGUub3JnfHV0bWNjdD0vc29mdHdhcmVtYXAvdHJvdmVfbGlzdC5waHB8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMjEyMzI5OTIyMi4xMTYwMTI3NjU3LjExNjQzNjYwMjEuMTE2NDczMTI2Ny4xNyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NpZGUgYmxva2tlcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0V0dGVyIGluc3RhbGxlcmluZ3MgbWVsZGluZy4gIEh1c2sgJmFyaW5nOyBzZXR0ZSAmcXVvdDtCcnVrIFBhZ2VCbG9ja3MmcXVvdDsgcmV0dGlnaGV0ZXIgZm9yICZhcmluZzsgYmVueXR0ZSBkZW5uZSBtb2R1bGVuISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWxsZSBTaWRlIGJsb2trZXIgaGFyIGJsaXR0IGZqZXJuZXQgb2cgU2lkZUJsb2trZXIgZXIgbiZhcmluZzsgYXZpbnN0YWxsZXJ0JzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdWaXJrZWxpZz8gRXIgZHUgc2lra2VyIHAmYXJpbmc7IGF0IGR1IHZpbCBhdmluc3RhbGxlcmUgU2lkZUJsb2trZXIgb2cgc2xldHRlIEFMTEUgZGluZSBzaWRlIGJsb2trZXI/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWwgYXZpbnN0YWxsZXJ0Lic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bCB2ZXJzam9uICVzIGluc3RhbGxlcnQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsIGlubnN0aWxsaW5nZXIgb3BwZGF0ZXJ0Lic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdUaWxnYW5nIG5la3RldC4gVmVubmxpZ3N0IHNqZWtrIGRpbmUgcmV0dGlnaGV0ZXIuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRmVpbCEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bCBvcHBncmFkZXJ0IHRpbCB2ZXJzam9uICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bCBpbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsIEFkbWluaXN0cmFzam9uc3BhbmVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGlsbGF0ZXIgdWJlZ3JlbnNlZGUgYmxva2tlciBtZWQgaW5uaG9sZCAmYXJpbmc7IGJsaSBrb2JsZXQgdGlsIHNpZGVyIG9nIHJlZGlnZXJlcyBpbmRpdmlkdWVsdC4nOwokbGFuZ1snYmxvY2tzJ10gPSAnQmxva2tlcic7CiRsYW5nWyd0ZW1wbGF0ZXMnXSA9ICdNYWxlcic7CiRsYW5nWydhZGR0ZW1wbGF0ZSddID0gJ0xlZ2cgdGlsIG1hbCc7CiRsYW5nWyd0ZW1wbGF0ZW5hbWV0ZXh0J10gPSAnTWFsbmF2bic7CiRsYW5nWyd0ZW1wbGF0ZXNhdmVkJ10gPSAnTWFsZW4gYmxlIGxhZ3JldCBpIGRhdGFiYXNlbi4nOwokbGFuZ1snb3JkZXJfdXBkYXRlZCddID0gJ0Jsb2trIHJla2tlZiZvc2xhc2g7bGdlIGJsZSBvcHBkYXRlcnQuJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdWaXMgSW5uaG9sZHNmb3J0ZWduZWxzZSc7CiRsYW5nWydjb250ZW50cyddID0gJ0lubmhvbGQnOwokbGFuZ1snZGVsZXRldGVtcGxhdGUnXSA9ICdTbGV0dCBtYWwnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTmF2biAoa3VuIG51bW1lciwgYm9rc3RhdmVyIG9nIGJpbmRlc3RyZWssIGluZ2VuIG1lbGxvbXJvbSknOwokbGFuZ1snb3B0aW9uc191cGRhdGVkJ10gPSAnT3BwZGF0ZXJ0ZSB2YWxnIGJsZSBsYWdyZXQuJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGUnXSA9ICdTdGFuZGFyZCBtYWwnOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ1RpdHRlbCc7CiRsYW5nWyd0ZXh0X3BhcmVudF9wYWdlJ10gPSAnS29ibGUgdGlsIGRlbm5lIHNpZGVuJzsKJGxhbmdbJ3JlZGlyZWN0X29uX2FkZCddID0gJ09tZGlycmlnZXIgdGlsYmFrZSB0aWwgLVNpZGUgQmxpb2trZXIgbGlzdGVuIGV0dGVyIGVuIGhhciBsYWd0IHRpbCBueSBlbiAoaSBzdGVkZXQgZm9yICZhcmluZzsgdGlsbGF0ZSBlbiBueSBlbiAmYXJpbmc7IGJsaSBvcHByZXR0ZXQpJzsKJGxhbmdbJ3RleHRfY29udGVudCddID0gJ0lubmhvbGQnOwokbGFuZ1sndGV4dF90ZW1wbGF0ZSddID0gJ01hbCc7CiRsYW5nWyd0ZXh0X3BhcmVudF9ibG9jayddID0gJ0ZvcmVsZHJlIGJsb2trJzsKJGxhbmdbJ2hpZXJhcmNoeV9lcnJvciddID0gJ0ZlaWw6IERldCBlciBlbiB2ZXNlbnRsaWcgZmVpbCBtZWQgaGllcmFya2lldC4nOwokbGFuZ1sndGV4dF9jcmVhdGVkYXRlJ10gPSAnT3BwcmV0dGVsc2UgZGF0byc7CiRsYW5nWyd0ZXh0X21vZGlmeWRhdGUnXSA9ICdFbmRyZXQnOwokbGFuZ1snaGVscF9wYWdlX2lkJ10gPSAnPGI+T3ZlcnN0eXJlciBwYWdlIGlkIGJydWt0IGZvciAmYXJpbmc7IHZpc2UgYmxva2tlbmUuPC9iPiBWZWQgJmFyaW5nOyBicnVrZSBkZW5uZSBwYXJhbWV0ZXIga2FuIGR1IGYmYXJpbmc7IGJsb2trZXIgc29tIGVyIGtvYmxldCB0aWwgJmVhY3V0ZTtuIHNpZGUgdGlsICZhcmluZzsgdmlzZXMgcCZhcmluZzsgZW5odmVyIGFubmVuIHNpZGUuPHA+PGI+RWtzZW1wZWwgcCZhcmluZzsgdGFnZyAob20gZGluIHNpZGVJRCBlciAxNSk6PC9iPjwvcD48cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0mIzAzOTtwYWdlYmxvY2tzJiMwMzk7IHBhZ2VfaWQ9JiMwMzk7MTUmIzAzOTt9PC9wcmU+JzsKJGxhbmdbJ25vbmUnXSA9ICdJbmdlbic7CiRsYW5nWydub2Jsb2NrcyddID0gJ0R1IGhhciBpa2tlIGxhZ3QgdGlsIG5vZW4gYmxva2tlciBlbm4mYXJpbmc7Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0xlZ2cgdGlsIGJsb2trJzsKJGxhbmdbJ2VkaXRfdGVtcGxhdGUnXSA9ICdSZWRpZ2VyIG1hbCc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdTbGV0dCBtYWwnOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV90ZW1wbGF0ZSddID0gJ0VyIGR1IHNpa2tlciBwJmFyaW5nOyBkdSB2aWwgc2xldHRlIGRlbm5lIG1hbGVuPyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0Jsb2trZW4gYmxlIGxhZ3QgdGlsIGRhdGFiYXNlbi4nOwokbGFuZ1snYmxvY2tfdXBkYXRlZCddID0gJ0Jsb2trZW4gYmxlIHZlbGx5a2tldCBsYWdyZXQgaSBkYXRhYmFzZW4uJzsKJGxhbmdbJ2Jsb2NrX2RlbGV0ZWQnXSA9ICdCbG9ra2VuIGJsZSBzbGV0dGV0Lic7CiRsYW5nWydkZWxldGVfYmxvY2snXSA9ICdEZWxldGUgYmxvY2suU2xldHQgYmxva2suJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICdFciBkdSBzaWtrZXIgcCZhcmluZzsgZHUgdmlsIHNsZXR0dGUgZGVubmUgc2lkZWJsb2trZW4/JzsKJGxhbmdbJ2ltYWdldGV4dCddID0gJ0JpbGRlIFRla3N0JzsKJGxhbmdbJ3RleHQnXSA9ICdUZWtzdCc7CiRsYW5nWydvcHRpb25zJ10gPSAnVmFsZyc7CiRsYW5nWydzdWJtaXQnXSA9ICdVdGYmb3NsYXNoO3InOwokbGFuZ1snbmFtZSddID0gJ05hdm4nOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdNYWwnOwokbGFuZ1sndGVtcGxhdGVfaGVscCddID0gJ01hbCBoamVscCc7CiRsYW5nWydhbGlhcyddID0gJ0FsaWFzIChicnVrZXMgZm9yICZhcmluZzsgbGlua2UgdGlsIGJsb2trZW4pJzsKJGxhbmdbJ21vZGlmaWVkJ10gPSAnRW5kcmV0JzsKJGxhbmdbJ2ltYWdlJ10gPSAnQmlsZGUnOwokbGFuZ1snb3JpZW50YXRpb24nXSA9ICdSZXRuaW5nJzsKJGxhbmdbJ3BhcmVudF9wYWdlJ10gPSAnRm9yZWxkcmUgc2lkZSc7CiRsYW5nWydoZWxwX3RlbXBsYXRlJ10gPSAnPGgyPk1hbCB2YXJpYWJsZXI8L2gyPg0KPHVsPg0KPGxpPjxiPnskYWxpYXN9PC9iPiAtIEFsaWFzIGZvciBibG9ra2VuPC9saT4NCjxsaT48Yj57JHRpdGxlfTwvYj4gLSBUaXR0ZWwgZm9yIGJsb2trZW48L2xpPg0KPGxpPjxiPnskbW9kaWZpZWR9PC9iPiAtIERhdG8gZm9yIHNpc3RlIGVuZHJpbmcgYXYgYmxva2tlbjxsaT4NCjwvdWw+DQo8aDI+JkFyaW5nOyBsZWdnZSB0aWwgZmVsdGVyIHRpbCBibG9ra2VuZTwvaDI+DQpEdSBrYW4gbGVnZ2UgdGlsIGZlbHRlciB0aWwgc2lkZWJsb2trZW5lIHAmYXJpbmc7IHNhbW1lIG0mYXJpbmc7dGUgc29tIGR1IGxlZ2dlciBkZW0gdGlsIHNpZGVyLiBGb3IgZWtzZW1wZWwga2FuIGR1IGxlZ2dlIHRpbCBub2Ugc29tIGRldHRlIHRpbCBkaW4gU2lkZUJsb2trIG1hbDoNCjxwcmU+e2NvbnRlbnQgYmxvY2s9JnF1b3Q7QW5vdGhlciBGaWVsZCZxdW90OyBvbmVsaW5lPSZxdW90O3RydWUmcXVvdDt9PC9wcmU+DQonOwokbGFuZ1sndGVtcGxhdGVfZGVsZXRlZCddID0gJ01hbGVuIGJsZSBzbGV0dGV0Lic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2pvbiAwLjEsIEp1bGkgMjAwNiAoZWxpamFobG9mZ3JlbikuIA0KICA8dWw+DQogICAgPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPg0KICA8L3VsPg0KPC9saT4nOwokbGFuZ1snaGVscF9hY3Rpb24nXSA9ICc8aDQ+U2hvdyBsaXN0IG9mIHJlY2VudGx5IHVwZGF0ZWQgYmxvY2tzPC9oND4NCgkgPHA+WW91IGNhbiBzaG93IGEgbGlzdCBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPg0KPHByZT57Y21zX21vZHVsZSBtb2R1bGU9JiMwMzk7cGFnZWJsb2NrcyYjMDM5OyBhY3Rpb249JiMwMzk7cmVjZW50bHlfdXBkYXRlZCYjMDM5O30nOwokbGFuZ1snaGVscF9udW1iZXInXSA9ICc8aDQ+U2hvdyBhIGNlcnRhaW4gbnVtYmVyIG9mIHJlY2VudGx5IHVwZGF0ZWQgYmxvY2tzPC9oND4NCgkgPHA+WW91IGNhbiBzaG93IGEgbGlzdCBvZiBhIGNlcnRhaW4gbnVtYmVyIG9mIHVwZGF0ZWQgYmxvY2tzIGJ5IGNhbGxpbmcgUGFnZUJsb2NrcyBsaWtlIHRoaXM6PC9wcmU+IDxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTsgYWN0aW9uPSYjMDM5O3JlY2VudGx5X3VwZGF0ZWQmIzAzOTsgbnVtYmVyPSYjMDM5OzE1JiMwMzk7fQ0KJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPkFsbG93cyB1bmxpbWl0ZWQgYmxvY2tzIG9mIENvbnRlbnQgdG8gYmUgYXR0YWNoZWQgdG8gcGFnZXMgYW5kIGVkaXRlZCBpbmRpdmlkdWFsbHk8L3A+DQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPlB1dCB0aGlzIGlzIGluIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTo8L3A+DQo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0mIzAzOTtwYWdlYmxvY2tzJiMwMzk7fTwvcHJlPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZxdW90O2h0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyZxdW90Oz5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICANCjwvdWw+DQo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQNCm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDYsIEVsaWphaCBMb2ZncmVuIDxhIGhyZWY9JnF1b3Q7bWFpbHRvOmVsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20mcXVvdDs+PGVsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20+PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMJnF1b3Q7PkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQonOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/blockcontent.functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAojCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiNUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiNHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKI2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiNGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiMKIyRJZDogYmxvY2tjb250ZW50LmZ1bmN0aW9ucy5waHAgMTMwIDIwMDYtMDgtMTAgMTg6MjM6MjBaIGVsaWphaGxvZmdyZW4gJAoKLyoqCiAqIEhhbmRsZXMgY29udGVudCByZWxhdGVkIGZ1bmN0aW9ucwogKgogKiBAcGFja2FnZSBDTVMKICovCiRzb3J0ZWRfc2VjdGlvbnMgPSBhcnJheSgpOwokc29ydGVkX2NvbnRlbnQgPSBhcnJheSgpOwoKZnVuY3Rpb24gZG9fYmxvY2tfY3Jvc3NfcmVmZXJlbmNlKCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSwgJGNvbnRlbnQpCnsKCWdsb2JhbCAkZ0NtczsKCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQoJLy9EZWxldGUgb2xkIG9uZXMgZnJvbSB0aGUgZGF0YWJhc2UKCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgcGFyZW50X3R5cGUgPSA/JzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSkpOwoJCgkvL0RvIGdsb2JhbCBjb250ZW50IGJsb2NrcwoJJG1hdGNoZXMgPSBhcnJheSgpOwoJcHJlZ19tYXRjaF9hbGwoJy9ceyg/Omh0bWxfYmxvYnxnbG9iYWxfY29udGVudCkuKj9uYW1lPVsiXCddKFteIl0rKVsiXCddLio/XH0vJywgJGNvbnRlbnQsICRtYXRjaGVzKTsKCWlmIChpc3NldCgkbWF0Y2hlc1sxXSkpCgl7CgkJJHNlbHF1ZXJ5ID0gJ1NFTEVDVCBodG1sYmxvYl9pZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidodG1sYmxvYnMgV0hFUkUgaHRtbGJsb2JfbmFtZSA9ID8nOwoJCSRpbnNxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgKHBhcmVudF9pZCwgcGFyZW50X3R5cGUsIGNoaWxkX2lkLCBjaGlsZF90eXBlLCBjcmVhdGVfZGF0ZSwgbW9kaWZpZWRfZGF0ZSkKCQkJCQkJVkFMVUVTICg/LD8sPyxcJ2dsb2JhbF9jb250ZW50XCcsJy4kZGItPkRCVGltZVN0YW1wKHRpbWUoKSkuJywnLiRkYi0+REJUaW1lU3RhbXAodGltZSgpKS4nKSc7CgkJZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJG5hbWUpCgkJewoJCQkkcmVzdWx0ID0gJiRkYi0+RXhlY3V0ZSgkc2VscXVlcnksIGFycmF5KCRuYW1lKSk7CgkJCXdoaWxlICgkcmVzdWx0ICYmICEkcmVzdWx0LT5FT0YpCgkJCXsKCQkJCSRkYi0+RXhlY3V0ZSgkaW5zcXVlcnksIGFycmF5KCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSwgJHJlc3VsdC0+ZmllbGRzWydodG1sYmxvYl9pZCddKSk7CgkJCQkkcmVzdWx0LT5Nb3ZlTmV4dCgpOwoJCQl9CgkJfQoJfQp9CgpmdW5jdGlvbiByZW1vdmVfYmxvY2tfY3Jvc3NfcmVmZXJlbmNlcygkcGFyZW50X2lkLCAkcGFyZW50X3R5cGUpCnsKCWdsb2JhbCAkZ0NtczsKCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQoJLy9EZWxldGUgb2xkIG9uZXMgZnJvbSB0aGUgZGF0YWJhc2UKCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgcGFyZW50X3R5cGUgPSA/JzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSkpOwp9CgojIHZpbTp0cz00IHN3PTQgbm9ldAo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/class.blockcontent.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlCiMgKGMpMjAwNCBieSBUZWQgS3VscCAodGVka3VscEB1c2Vycy5zZi5uZXQpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLm9yZwojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIEJVVCB3aXRoT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwojJElkOiBjbGFzcy5ibG9ja2NvbnRlbnQuaW5jLnBocCAxNzQgMjAwNy0wMy0xMyAxNTo1NToxOVogZWxpamFobG9mZ3JlbiAkCgovKioKICogVGhpcyBmaWxlIHJlc3BlY3QgdGhlIFBIUCBDb2RpbmcgU3RhbmRhcmRzIDogaHR0cDovL2FsbHRhc2tzLm5ldC9jb2RlL3BocF9jb2Rpbmdfc3RhbmRhcmQuaHRtbAogKi8KCi8qKgogKiBHZW5lcmljIGNvbnRlbnQgY2xhc3MuCiAqCiAqIEFzIGZvciBzb21lIHRyZWF0bWVudCB3ZSBkb24ndCBuZWVkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZW50CiAqIHdlIGxvYWQgdGhlbSBvbmx5IHdoZW4gcmVxdWlyZWQuIEhvd2V2ZXIsIGVhY2ggZnVuY3Rpb24gd2hpY2ggbWFrZXMgdXNlCiAqIG9mIGV4dHJhIHByb3BlcnRpZXMgc2hvdWxkIGZpcnN0IHRlc3QgaWYgdGhlIHByb3BlcnRpZXMgb2JqZWN0IGV4aXN0LgogKgogKiBAc2luY2UJCTAuOAogKiBAcGFja2FnZQkJQ01TCiAqLwpjbGFzcyBCbG9ja0NvbnRlbnRCYXNlCnsKCS8qKgoJICogVGhlIHVuaXF1ZSBJRCBpZGVudGlmaWVyIG9mIHRoZSBlbGVtZW50CgkgKiBJbnRlZ2VyCgkgKi8KCXZhciAkbUlkOwoKCS8qKgoJICogVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgKGxpa2UgYSBmaWxlbmFtZSkKCSAqIFN0cmluZwoJICovCgkgdmFyICRtTmFtZTsKCgkvKioKCSAqIFRoZSB0eXBlIG9mIGNvbnRlbnQgKHBhZ2UsIHVybCwgZXRjLi4pCgkgKiBTdHJpbmcKCSAqLwoJdmFyICRtVHlwZTsKCgkvKioKCSAqIFRoZSBvd25lciBvZiB0aGUgY29udGVudAoJICogSW50ZWdlcgoJICovCgl2YXIgJG1Pd25lcjsKCgkvKioKCSAqIFRoZSBwcm9wZXJ0aWVzIHBhcnQgb2YgdGhlIGNvbnRlbnQuIFRoaXMgaXMgYW4gb2JqZWN0IG9mIHRoZSBnb29kIHR5cGUuCgkgKiBJdCBzaG91bGQgY29udGFpbiBhbGwgdHJlYXRtZW50cyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29udGVudAoJICovCgkgdmFyICRtUHJvcGVydGllczsKCgkvKioKCSAqIFRoZSBJRCBvZiB0aGUgcGFyZW50LCAwIGlmIG5vbmUKCSAqIEludGVnZXIKCSAqLwoJdmFyICRtUGFyZW50SWQ7CgoJLyoqCgkgKiBUaGUgb2xkIHBhcmVudCBpZC4uLiBvbmx5IHVzZWQgb24gdXBkYXRlCgkgKi8KCXZhciAkbU9sZFBhcmVudElkOwoKCS8qKgoJICogVGhpcyBpcyB1c2VkIHRvbyBvZnRlbiB0byBub3QgYmUgcGFydCBvZiB0aGUgYmFzZSBjbGFzcwoJICovCgl2YXIgJG1UZW1wbGF0ZUlkOwoKCS8qKgoJICogVGhlIGl0ZW0gb3JkZXIgb2YgdGhlIGNvbnRlbnQgaW4gaGlzIGxldmVsCgkgKiBJbnRlZ2VyCgkgKi8KCXZhciAkbUl0ZW1PcmRlcjsKCgkvKioKCSAqIFRoZSBvbGQgaXRlbSBvcmRlci4uLiBvbmx5IHVzZWQgb24gdXBkYXRlCgkgKi8KCXZhciAkbU9sZEl0ZW1PcmRlcjsKCgkvKioKCSAqIFRoZSBtZXRhZGF0YSAoaGVhZCB0YWdzKSBmaXIgdGhpcyBjb250ZW50CgkgKi8KCXZhciAkbU1ldGFkYXRhOwoKCXZhciAkbVRpdGxlQXR0cmlidXRlOwoJdmFyICRtQWNjZXNzS2V5OwoJdmFyICRtVGFiSW5kZXg7CgoJLyoqCgkgKiBUaGUgZnVsbCBoaWVyYXJjaHkgb2YgdGhlIGNvbnRlbnQKCSAqIFN0cmluZyBvZiB0aGUgZm9ybSA6IDEuNC4zCgkgKi8KCXZhciAkbUhpZXJhcmNoeTsKCgkvKioKCSAqIFRoZSBmdWxsIGhpZXJhcmNoeSBvZiB0aGUgY29udGVudCBpZHMKCSAqIFN0cmluZyBvZiB0aGUgZm9ybSA6IDEuNC4zCgkgKi8KICAgIHZhciAkbUlkSGllcmFyY2h5OwoKCS8qKgoJICogVGhlIGZ1bGwgcGF0aCB0aHJvdWdoIHRoZSBoaWVyYXJjaHkKCSAqIFN0cmluZyBvZiB0aGUgZm9ybSA6IHBhcmVudC9wYXJlbnQvY2hpbGQKCSAqLwogICAgdmFyICRtSGllcmFyY2h5UGF0aDsKCgkvKioKCSAqIFdoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIG1lbnUKCSAqLwoJdmFyICRtTWVudVRleHQ7CgoJLyoqCgkgKiBJcyB0aGUgY29udGVudCBhY3RpdmUgPwoJICogSW50ZWdlciA6IDAgLyAxCgkgKi8KCXZhciAkbUFjdGl2ZTsKCgkvKioKCSAqIEFsaWFzIG9mIHRoZSBjb250ZW50CgkgKi8KCXZhciAkbUFsaWFzOwoKCXZhciAkbU9sZEFsaWFzOwoKCS8qKgoJICogQ2FjaGFibGU/CgkgKi8KCXZhciAkbUNhY2hhYmxlOwoKCS8qKgoJICogRG9lcyB0aGlzIGNvbnRlbnQgaGF2ZSBhIHByZXZpZXcgZnVuY3Rpb24/CgkgKi8KCXZhciAkbVByZXZpZXc7CgoJLyoqCgkgKiBTaG91bGQgaXQgc2hvdyB1cCBpbiB0aGUgbWVudT8KCSAqLwoJdmFyICRtU2hvd0luTWVudTsKCgkvKioKCSAqIElzIHRoaXMgcGFnZSB0aGUgZGVmYXVsdD8KCSAqLwoJdmFyICRtRGVmYXVsdENvbnRlbnQ7CgkKCS8qKgoJICogV2hhdCB0eXBlIG9mIG1hcmt1cCBpcyB0aHM/ICBIVE1MIGlzIHRoZSBkZWZhdWx0CgkgKi8KCXZhciAkbU1hcmt1cDsKCgkvKioKCSAqIExhc3QgdXNlciB0byBtb2RpZnkgdGhpcyBjb250ZW50CgkgKi8KCXZhciAkbUxhc3RNb2RpZmllZEJ5OwoKCS8qKgoJICogQ3JlYXRpb24gZGF0ZQoJICogRGF0ZQoJICovCgl2YXIgJG1DcmVhdGlvbkRhdGU7CgoJLyoqCgkgKiBNb2RpZmljYXRpb24gZGF0ZQoJICogRGF0ZQoJICovCgl2YXIgJG1Nb2RpZmllZERhdGU7CgoJdmFyICRtQWRkaXRpb25hbEVkaXRvcnM7CgkKCXZhciAkbVJlYWR5Rm9yRWRpdDsKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgkvKiBDb25zdHJ1Y3RvciByZWxhdGVkCQkJCQkJCQkJCQkJCSovCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8qKgoJICogR2VuZXJpYyBjb25zdHJ1Y3Rvci4gUnVucyB0aGUgU2V0SW5pdGlhbFZhbHVlcyBmdWN0aW9uLgoJICovCglmdW5jdGlvbiBCbG9ja0NvbnRlbnRCYXNlKCkKCXsKCQkkdGhpcy0+U2V0SW5pdGlhbFZhbHVlcygpOwoJCSR0aGlzLT5TZXRQcm9wZXJ0aWVzKCk7CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzTG9hZGVkID0gZmFsc2U7CgkJJHRoaXMtPm1SZWFkeUZvckVkaXQgPSBmYWxzZTsKCX0KCgkvKioKCSAqIFNldHMgb2JqZWN0IHRvIHNvbWUgc2FuZSBpbml0aWFsIHZhbHVlcwoJICovCglmdW5jdGlvbiBTZXRJbml0aWFsVmFsdWVzKCkKCXsKCQkkdGhpcy0+bUlkCQkJCT0gLTEgOwoJCSR0aGlzLT5tTmFtZQkJCT0gIiIgOwoJCSR0aGlzLT5tQWxpYXMJCQk9ICIiIDsKCQkkdGhpcy0+bU9sZEFsaWFzCQk9ICIiIDsKCQkkdGhpcy0+bVR5cGUJCQk9IHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCR0aGlzKSkgOwoJCSR0aGlzLT5tT3duZXIJCQk9IC0xIDsKCQkkdGhpcy0+bVByb3BlcnRpZXMJCT0gbmV3IEJsb2NrQ29udGVudFByb3BlcnRpZXMoKTsKCQkkdGhpcy0+bVBhcmVudElkCQk9IC0xIDsKCQkkdGhpcy0+bU9sZFBhcmVudElkCQk9IC0xIDsKCQkkdGhpcy0+bVRlbXBsYXRlSWQJCT0gLTEgOwoJCSR0aGlzLT5tSXRlbU9yZGVyCQk9IC0xIDsKCQkkdGhpcy0+bU9sZEl0ZW1PcmRlcgk9IC0xIDsKCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5CT0gLTEgOwoJCSR0aGlzLT5tSGllcmFyY2h5CQk9ICIiIDsKCQkkdGhpcy0+bUlkSGllcmFyY2h5CQk9ICIiIDsKCQkkdGhpcy0+bUhpZXJhcmNoeVBhdGgJPSAiIiA7CgkJJHRoaXMtPm1NZXRhZGF0YQkJPSAiIiA7CgkJJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZQk9ICIiIDsKCQkkdGhpcy0+bUFjY2Vzc0tleQkJPSAiIiA7CgkJJHRoaXMtPm1UYWJJbmRleAkJPSAiIiA7CgkJJHRoaXMtPm1BY3RpdmUJCQk9IGZhbHNlIDsKCQkkdGhpcy0+bURlZmF1bHRDb250ZW50CT0gZmFsc2UgOwoJCSR0aGlzLT5tU2hvd0luTWVudQkJPSBmYWxzZSA7CgkJJHRoaXMtPm1DYWNoYWJsZQkJPSB0cnVlOwoJCSR0aGlzLT5tTWVudVRleHQJCT0gIiIgOwoJCSR0aGlzLT5tQ3JlYXRpb25EYXRlCT0gIiIgOwoJCSR0aGlzLT5tTW9kaWZpZWREYXRlCT0gIiIgOwoJCSR0aGlzLT5tUHJldmlldyAgICAgICAgID0gZmFsc2UgOwoJCSR0aGlzLT5tTWFya3VwCQkJPSAnaHRtbCcgOwoJCSR0aGlzLT5tQ2hpbGRDb3VudCAgICAgID0gMDsKCQkkdGhpcy0+bVBhcmVudFBhZ2VJZCA9IC0xOwoJfQoKCS8qKgoJICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBzZXQgdGhlaXIgcHJvcGVydHkgdHlwZXMgdXNpbmcgYSBsb3QKCSAqIG9mIG1Qcm9wZXJ0aWVzLkFkZCBzdGF0ZW1lbnRzCgkgKi8KCWZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQoJewoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgkvKiBGdW5jdGlvbnMgZ2l2aW5nIGFjY2VzcyB0byBuZWVkZWQgZWxlbWVudHMgb2YgdGhlIGNvbnRlbnQJCQkqLwoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgkvKioKCSAqIFJldHVybnMgdGhlIElECgkgKi8KCWZ1bmN0aW9uIElkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1JZDsKCX0KCglmdW5jdGlvbiBTZXRJZCgkaWQpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1JZCA9ICRpZDsKCX0KCgkvKioKCSAqIFJldHVybnMgYSBmcmllbmRseSBuYW1lIGZvciB0aGlzIGNvbnRlbnQgdHlwZQoJICovCglmdW5jdGlvbiBGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAnJzsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIE5hbWUKCSAqLwoJZnVuY3Rpb24gTmFtZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5tTmFtZTsKCX0KCglmdW5jdGlvbiBTZXROYW1lKCRuYW1lKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tTmFtZSA9ICRuYW1lOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgQWxpYXMKCSAqLwoJZnVuY3Rpb24gQWxpYXMoKQoJewoJCXJldHVybiAkdGhpcy0+bUFsaWFzOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgVHlwZQoJICovCglmdW5jdGlvbiBUeXBlKCkKCXsKCQlyZXR1cm4gc3RydG9sb3dlcigkdGhpcy0+bVR5cGUpOwoJfQoKCWZ1bmN0aW9uIFNldFR5cGUoJHR5cGUpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1UeXBlID0gc3RydG9sb3dlcigkdHlwZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBPd25lcgoJICovCglmdW5jdGlvbiBPd25lcigpCgl7CgkJcmV0dXJuICR0aGlzLT5tT3duZXI7Cgl9CgoJZnVuY3Rpb24gU2V0T3duZXIoJG93bmVyKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tT3duZXIgPSAkb3duZXI7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBNZXRhZGF0YQoJICovCglmdW5jdGlvbiBNZXRhZGF0YSgpCgl7CgkJcmV0dXJuICR0aGlzLT5tTWV0YWRhdGE7Cgl9CgoJZnVuY3Rpb24gU2V0TWV0YWRhdGEoJG1ldGFkYXRhKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tTWV0YWRhdGEgPSAkbWV0YWRhdGE7Cgl9CgoJZnVuY3Rpb24gVGFiSW5kZXgoKQoJewoJCXJldHVybiAkdGhpcy0+bVRhYkluZGV4OwoJfQoKCWZ1bmN0aW9uIFNldFRhYkluZGV4KCR0YWJpbmRleCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bVRhYkluZGV4ID0gJHRhYmluZGV4OwoJfQoKCWZ1bmN0aW9uIFRpdGxlQXR0cmlidXRlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZTsKCX0KCglmdW5jdGlvbiBHZXRDcmVhdGlvbkRhdGUoKQoJewoJCXJldHVybiAkdGhpcy0+bUNyZWF0aW9uRGF0ZTsKCX0KCQoJZnVuY3Rpb24gR2V0TW9kaWZpZWREYXRlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1Nb2RpZmllZERhdGU7Cgl9CgoJZnVuY3Rpb24gU2V0VGl0bGVBdHRyaWJ1dGUoJHRpdGxlYXR0cmlidXRlKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUgPSAkdGl0bGVhdHRyaWJ1dGU7Cgl9CgoJZnVuY3Rpb24gQWNjZXNzS2V5KCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1BY2Nlc3NLZXk7Cgl9CgoJZnVuY3Rpb24gU2V0QWNjZXNzS2V5KCRhY2Nlc3NrZXkpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1BY2Nlc3NLZXkgPSAkYWNjZXNza2V5OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgUGFyZW50SWQKCSAqLwoJZnVuY3Rpb24gUGFyZW50SWQoKQoJewoJCXJldHVybiAkdGhpcy0+bVBhcmVudElkOwoJfQoJCgkvKioKCSAqIFJldHVybnMgdGhlIFBhcmVudCBQYWdlIElkCgkgKi8KCWZ1bmN0aW9uIFBhcmVudFBhZ2VJZCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tUGFyZW50UGFnZUlkOwoJfQoKCWZ1bmN0aW9uIFNldFBhcmVudElkKCRwYXJlbnRpZCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bVBhcmVudElkID0gJHBhcmVudGlkOwoJfQoKCWZ1bmN0aW9uIE9sZFBhcmVudElkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1PbGRQYXJlbnRJZDsKCX0KCglmdW5jdGlvbiBTZXRPbGRQYXJlbnRJZCgkcGFyZW50aWQpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1PbGRQYXJlbnRJZCA9ICRwYXJlbnRpZDsKCX0KCglmdW5jdGlvbiBUZW1wbGF0ZUlkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1UZW1wbGF0ZUlkOwoJfQoKCWZ1bmN0aW9uIFNldFRlbXBsYXRlSWQoJHRlbXBsYXRlaWQpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1UZW1wbGF0ZUlkID0gJHRlbXBsYXRlaWQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBJdGVtT3JkZXIKCSAqLwoJZnVuY3Rpb24gSXRlbU9yZGVyKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1JdGVtT3JkZXI7Cgl9CgoJZnVuY3Rpb24gU2V0SXRlbU9yZGVyKCRpdGVtb3JkZXIpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1JdGVtT3JkZXIgPSAkaXRlbW9yZGVyOwoJfQoKCWZ1bmN0aW9uIE9sZEl0ZW1PcmRlcigpCgl7CgkJcmV0dXJuICR0aGlzLT5tT2xkSXRlbU9yZGVyOwoJfQoKCWZ1bmN0aW9uIFNldE9sZEl0ZW1PcmRlcigkaXRlbW9yZGVyKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tT2xkSXRlbU9yZGVyID0gJGl0ZW1vcmRlcjsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIEhpZXJhcmNoeQoJICovCglmdW5jdGlvbiBIaWVyYXJjaHkoKQoJewoJCXJldHVybiBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDcmVhdGVGcmllbmRseUhpZXJhcmNoeVBvc2l0aW9uKCR0aGlzLT5tSGllcmFyY2h5KTsKCX0KCglmdW5jdGlvbiBTZXRIaWVyYXJjaHkoJGhpZXJhcmNoeSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUhpZXJhcmNoeSA9ICRoaWVyYXJjaHk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBIaWVyYXJjaHkKCSAqLwoJZnVuY3Rpb24gSWRIaWVyYXJjaHkoKQoJewoJCXJldHVybiAkdGhpcy0+bUlkSGllcmFyY2h5OwoJfQoKCWZ1bmN0aW9uIFNldElkSGllcmFyY2h5KCRpZGhpZXJhcmNoeSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUlkSGllcmFyY2h5ID0gJGlkaGllcmFyY2h5OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgSGllcmFyY2h5CgkgKi8KCWZ1bmN0aW9uIEhpZXJhcmNoeVBhdGgoKQoJewoJCXJldHVybiAkdGhpcy0+bUhpZXJhcmNoeVBhdGg7Cgl9CgoJZnVuY3Rpb24gU2V0SGllcmFyY2h5UGF0aCgkaGllcmFyY2h5cGF0aCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUhpZXJhcmNoeVBhdGggPSAkaGllcmFyY2h5cGF0aDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIEFjdGl2ZSBzdGF0ZQoJICovCglmdW5jdGlvbiBBY3RpdmUoKQoJewoJCXJldHVybiAkdGhpcy0+bUFjdGl2ZTsKCX0KCglmdW5jdGlvbiBTZXRBY3RpdmUoJGFjdGl2ZSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUFjdGl2ZSA9ICRhY3RpdmU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHdoZXRoZXIgaXQgc2hvdWxkIHNob3cgaW4gdGhlIG1lbnUKCSAqLwoJZnVuY3Rpb24gU2hvd0luTWVudSgpCgl7CgkJcmV0dXJuICR0aGlzLT5tU2hvd0luTWVudTsKCX0KCglmdW5jdGlvbiBTZXRTaG93SW5NZW51KCRzaG93aW5tZW51KQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tU2hvd0luTWVudSA9ICRzaG93aW5tZW51OwoJfQoKCS8qKgoJICogUmV0dXJucyBpZiB0aGUgcGFnZSBpcyB0aGUgZGVmYXVsdAoJICovCglmdW5jdGlvbiBEZWZhdWx0Q29udGVudCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tRGVmYXVsdENvbnRlbnQ7Cgl9CgoJZnVuY3Rpb24gU2V0RGVmYXVsdENvbnRlbnQoJGRlZmF1bHRjb250ZW50KQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tRGVmYXVsdENvbnRlbnQgPSAkZGVmYXVsdGNvbnRlbnQ7Cgl9CgoJZnVuY3Rpb24gQ2FjaGFibGUoKQoJewoJCXJldHVybiAkdGhpcy0+bUNhY2hhYmxlOwoJfQoKCWZ1bmN0aW9uIFNldENhY2hhYmxlKCRjYWNoYWJsZSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUNhY2hhYmxlID0gJGNhY2hhYmxlOwoJfQoJCglmdW5jdGlvbiBNYXJrdXAoKQoJewoJCXJldHVybiAkdGhpcy0+bU1hcmt1cDsKCX0KCglmdW5jdGlvbiBTZXRNYXJrdXAoJG1hcmt1cCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bU1hcmt1cCA9ICRtYXJrdXA7Cgl9CgoJZnVuY3Rpb24gTGFzdE1vZGlmaWVkQnkoKQoJewoJCXJldHVybiAkdGhpcy0+bUxhc3RNb2RpZmllZEJ5OwoJfQoKCWZ1bmN0aW9uIFNldExhc3RNb2RpZmllZEJ5KCRsYXN0bW9kaWZpZWRieSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5ID0gJGxhc3Rtb2RpZmllZGJ5OwoJfQoJCglmdW5jdGlvbiBTZXRBbGlhcygkYWxpYXMpCiAgICB7CiAgICAgICAgJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CiAgICAgICAgZ2xvYmFsICRnQ21zOwoKICAgICAgICAkdG9sb3dlciA9IGZhbHNlOwoKICAgICAgICBpZiAoJGFsaWFzID09ICcnKQogICAgICAgIHsKICAgICAgICAgICAgJGFsaWFzID0gdHJpbSgkdGhpcy0+bU1lbnVUZXh0KTsKICAgICAgICAgICAgJHRvbG93ZXIgPSB0cnVlOwoJCQkkYWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRhbGlhcywgJHRvbG93ZXIpOwoJCQkvLyBNYWtlIHN1cmUgYXV0by1nZW5lcmF0ZWQgbmV3IGFsaWFzIGlzIG5vdCBhbHJlYWR5IGluIHVzZSBvbiBhIGRpZmZlcmVudCBwYWdlLCBpZiBpdCBkb2VzLCBhZGQgIi0yIiB0byB0aGUgYWxpYXMKCQkJJGVycm9yID0gQEJsb2NrQ29udGVudE1hbmFnZXI6OkNoZWNrQWxpYXNFcnJvcigkYWxpYXMpOwoJCQlpZiAoJGVycm9yICE9PSBGQUxTRSkKCQkJICB7CgkJCSAgICBpZiAoRkFMU0UgPT0gZW1wdHkoJGFsaWFzKSkKCQkJICAgICAgewoJCQkJJGFsaWFzX251bV9hZGQgPSAyOwoJCQkJLy8gSWYgYSAnLTInIHZlcnNpb24gb2YgdGhlIGFsaWFzIGFscmVhZHkgZXhpc3RzCgkJCQkkdXNlciA9IFVzZXJPcGVyYXRpb25zOjpMb2FkVXNlckJ5SUQoJHRoaXMtPm1Pd25lcik7CgkJCQkvLyBDaGVjayB0aGUgJy0zJyB2ZXJzaW9uIGV0Yy4KCQkJCXdoaWxlIChAQmxvY2tDb250ZW50TWFuYWdlcjo6Q2hlY2tBbGlhc0Vycm9yKCRhbGlhcy4nLScuJHVzZXItPnVzZXJuYW1lLictJy4kYWxpYXNfbnVtX2FkZCkgIT09IEZBTFNFKQoJCQkJICB7CgkJCQkgICAgJGFsaWFzX251bV9hZGQrKzsKCQkJCSAgfQoJCQkJJGFsaWFzIC49ICctJy4kdXNlci0+dXNlcm5hbWUuJy0nLiRhbGlhc19udW1fYWRkOwoJCQkgICAgICB9CgkJCSAgICBlbHNlCgkJCSAgICAgIHsKCQkJCSRhbGlhcyA9ICcnOwoJCQkgICAgICB9CgkJCSAgfQogICAgICAgIH0KCgkJLyoKICAgICAgICAvLyByZXBsYWNlbWVudC5waHAgaXMgZW5jb2RlZCB1dGYtOCBhbmQgbXVzdCBiZSB0aGUgZmlyc3QgbW9kaWZpY2F0aW9uIG9mIGFsaWFzCiAgICAgICAgaW5jbHVkZShkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKSAuICcvcmVwbGFjZW1lbnQucGhwJyk7CiAgICAgICAgJGFsaWFzID0gc3RyX3JlcGxhY2UoJHRvcmVwbGFjZSwgJHJlcGxhY2VtZW50LCAkYWxpYXMpOwogICAgICAgIAogICAgICAgIC8vIGxvd2VyY2FzZSBvbmx5IG9uIGVtcHR5IGFsaWFzZXMKICAgICAgICBpZiAoJHRvbG93ZXIgPT0gMSkKCQl7CiAgICAgICAgICAgICRhbGlhcyA9IHN0cnRvbG93ZXIoJGFsaWFzKTsKCQl9CiAgICAgICAgICAgIAogICAgICAgICRhbGlhcyA9IHByZWdfcmVwbGFjZSgiL1teXHctXSsvIiwgIl8iLCAkYWxpYXMpOwogICAgICAgICRhbGlhcyA9IHRyaW0oJGFsaWFzLCAnXycpOwoJCSovCgogICAgICAgICR0aGlzLT5tQWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRhbGlhcywgJHRvbG93ZXIpOwogICAgfSAKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSBtZW51IHRleHQgZm9yIHRoaXMgY29udGVudAoJICovCglmdW5jdGlvbiBNZW51VGV4dCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tTWVudVRleHQ7Cgl9CgoJZnVuY3Rpb24gU2V0TWVudVRleHQoJG1lbnV0ZXh0KQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tTWVudVRleHQgPSAkbWVudXRleHQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIG51bWJlciBvZiBpbW1lZGlhdGUgY2hpbGQtY29udGVudCBpdGVtcyBvZiB0aGlzIGNvbnRlbnQKCSAqLwoJZnVuY3Rpb24gQ2hpbGRDb3VudCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tQ2hpbGRDb3VudDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHByb3BlcnRpZXMKCSAqLwoJZnVuY3Rpb24gUHJvcGVydGllcygpCgl7CgkJZGVidWdfYnVmZmVyKCdwcm9wZXJ0aWVzIGNhbGxlZCcpOwoJCWlmICgkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPT0gZmFsc2UpCgkJewoJCQkkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJCSR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CgkJfQoJCXJldHVybiAkdGhpcy0+bVByb3BlcnRpZXM7Cgl9CgoJZnVuY3Rpb24gSGFzUHJvcGVydHkoJG5hbWUpCgl7CgkJcmV0dXJuICR0aGlzLT5tUHJvcGVydGllcy0+SGFzUHJvcGVydHkoJG5hbWUpOwoJfQoKCWZ1bmN0aW9uIEdldFByb3BlcnR5VmFsdWUoJG5hbWUpCgl7CgkJaWYgKCR0aGlzLT5tUHJvcGVydGllcy0+SGFzUHJvcGVydHkoJG5hbWUpKQoJCXsKCQkJaWYgKCR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKCQkJewoJCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5Mb2FkKCR0aGlzLT5tSWQpOwoJCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzTG9hZGVkID0gdHJ1ZTsKCQkJfQoJCQlyZXR1cm4gJHRoaXMtPm1Qcm9wZXJ0aWVzLT5HZXRWYWx1ZSgkbmFtZSk7CgkJfQoJCXJldHVybiAnJzsKCX0KCglmdW5jdGlvbiBTZXRQcm9wZXJ0eVZhbHVlKCRuYW1lLCAkdmFsdWUpCgl7CgkJZGVidWdfYnVmZmVyKCdzZXRwcm9wZXJ0eXZhbHVlIGNhbGxlZCcpOwoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCWlmICgkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPT0gZmFsc2UpCgkJewoJCQkkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJCSR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CgkJfQoJCSR0aGlzLT5tUHJvcGVydGllcy0+U2V0VmFsdWUoJG5hbWUsICR2YWx1ZSk7Cgl9CgkKCS8qKgoJICogRnVuY3Rpb24gY29udGVudCB0eXBlcyB0byB1c2UgdG8gc2F5IHdoZXRoZXIgb3Igbm90IHRoZXkgc2hvdWxkIHNob3cKCSAqIHVwIGluIGxpc3RzIHdoZXJlIHBhcmVudHMgb2YgY29udGVudCBhcmUgc2V0LiAgVGhpcyB3aWxsIGRlZmF1bHQgdG8gdHJ1ZSwKCSAqIGJ1dCBzaG91bGQgYmUgdXNlZCBpbiBjYXNlcyBsaWtlIFNlcGFyYXRvciB3aGVyZSB5b3UgZG9uJ3Qgd2FudCBpdCB0byAKCSAqIGhhdmUgYW55IGNoaWxkcmVuLgoJICogCgkgKiBAc2luY2UgMC4xMQoJICovCglmdW5jdGlvbiBXYW50c0NoaWxkcmVuKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBHZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpCgl7Cgl9CgoJLyoqCgkgKiBTaG91bGQgdGhpcyBsaW5rIGJlIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgd2hlcmUgYSBsaW5rIGlzIHRoZSBvbmx5CgkgKiB1c2VmdWwgb3V0cHV0PyAgKExpa2UgbmV4dC9wcmV2aW91cyBsaW5rcyBpbiBjbXNfc2VsZmxpbmssIGZvciBleGFtcGxlKQoJICovCglmdW5jdGlvbiBIYXNVc2FibGVMaW5rKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJLyogVGhlIHJlc3QJCQkJCQkJCQkJCQkJCQkJKi8KCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJLyoqCgkgKiBUaGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGFueSB0aGluZ3MgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIGNvbnRlbnQgaXMKCSAqIGVkaXRlZC4KCSAqLwoJZnVuY3Rpb24gUmVhZHlGb3JFZGl0KCkKCXsKCX0KCglmdW5jdGlvbiBEb1JlYWR5Rm9yRWRpdCgpCgl7CgkJaWYgKCR0aGlzLT5tUmVhZHlGb3JFZGl0ID09IGZhbHNlKQoJCXsKCQkJJHRoaXMtPlJlYWR5Rm9yRWRpdCgpOwoJCQkkdGhpcy0+bVJlYWR5Rm9yRWRpdCA9IHRydWU7CgkJfQoJfQoKCS8qKgoJICogTG9hZCB0aGUgY29udGVudCBvZiB0aGUgb2JqZWN0IGZyb20gYW4gSUQKCSAqCgkgKiBAcGFyYW0gJGlkCQkJCXRoZSBJRCBvZiB0aGUgZWxlbWVudAoJICogQHBhcmFtICRsb2FkUHJvcGVydGllcwl3aGV0aGVyIHRvIGxvYWQgb3Igbm90IHRoZSBwcm9wZXJ0aWVzCgkgKgoJICogQHJldHVybnMgYm9vbAkJCUlmIGl0IGZhaWxzLCB0aGUgb2JqZWN0IGNvbWVzIGJhY2sgdG8gaW5pdGlhbCB2YWx1ZXMgYW5kIHJldHVybnMgRkFMU0UKCSAqCQkJCQkJCUlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCBpdCByZXR1cm5zIFRSVUUKCSAqLwoJZnVuY3Rpb24gTG9hZEZyb21JZCgkaWQsICRsb2FkUHJvcGVydGllcyA9IGZhbHNlKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQlpZiAoLTEgPCAkaWQpCgkJewoJCQkkcXVlcnkJCT0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkcm93CQk9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWQpKTsKCgkJCWlmICgkcm93ICYmICEkcm93LT5FT0YpCgkJCXsKCQkJCSR0aGlzLT5tSWQJCQkJPSAkcm93LT5maWVsZHNbImNvbnRlbnRfaWQiXTsKCQkJCSR0aGlzLT5tTmFtZQkJCT0gJHJvdy0+ZmllbGRzWyJjb250ZW50X25hbWUiXTsKCQkJCSR0aGlzLT5tQWxpYXMJCQk9ICRyb3ctPmZpZWxkc1siY29udGVudF9hbGlhcyJdOwoJCQkJJHRoaXMtPm1PbGRBbGlhcwkJPSAkcm93LT5maWVsZHNbImNvbnRlbnRfYWxpYXMiXTsKCQkJCSR0aGlzLT5tVHlwZQkJCT0gc3RydG9sb3dlcigkcm93LT5maWVsZHNbInR5cGUiXSk7CgkJCQkkdGhpcy0+bU93bmVyCQkJPSAkcm93LT5maWVsZHNbIm93bmVyX2lkIl07CgkJCQkjJHRoaXMtPm1Qcm9wZXJ0aWVzCQk9IG5ldyBDb250ZW50UHJvcGVydGllcygpOwoJCQkJJHRoaXMtPm1QYXJlbnRJZAkJPSAkcm93LT5maWVsZHNbInBhcmVudF9pZCJdOwoJCQkJJHRoaXMtPm1PbGRQYXJlbnRJZAkJPSAkcm93LT5maWVsZHNbInBhcmVudF9pZCJdOwoJCQkJJHRoaXMtPm1UZW1wbGF0ZUlkCQk9ICRyb3ctPmZpZWxkc1sidGVtcGxhdGVfaWQiXTsKCQkJCSR0aGlzLT5tSXRlbU9yZGVyCQk9ICRyb3ctPmZpZWxkc1siaXRlbV9vcmRlciJdOwoJCQkJJHRoaXMtPm1PbGRJdGVtT3JkZXIJPSAkcm93LT5maWVsZHNbIml0ZW1fb3JkZXIiXTsKCQkJCSR0aGlzLT5tTWV0YWRhdGEJCT0gJHJvdy0+ZmllbGRzWydtZXRhZGF0YSddOwoJCQkJJHRoaXMtPm1IaWVyYXJjaHkJCT0gJHJvdy0+ZmllbGRzWyJoaWVyYXJjaHkiXTsKCQkJCSR0aGlzLT5tSWRIaWVyYXJjaHkJCT0gJHJvdy0+ZmllbGRzWyJpZF9oaWVyYXJjaHkiXTsKCQkJCSR0aGlzLT5tSGllcmFyY2h5UGF0aAk9ICRyb3ctPmZpZWxkc1siaGllcmFyY2h5X3BhdGgiXTsKCQkJCSR0aGlzLT5tUHJvcGVydGllcy0+bVByb3BlcnR5TmFtZXMgPSBleHBsb2RlKCcsJywkcm93LT5maWVsZHNbInByb3BfbmFtZXMiXSk7CgkJCQkkdGhpcy0+bU1lbnVUZXh0CQk9ICRyb3ctPmZpZWxkc1snbWVudV90ZXh0J107CgkJCQkkdGhpcy0+bU1hcmt1cAkJCT0gJHJvdy0+ZmllbGRzWydtYXJrdXAnXTsKCQkJCSR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUJPSAkcm93LT5maWVsZHNbJ3RpdGxlYXR0cmlidXRlJ107CgkJCQkkdGhpcy0+bUFjY2Vzc0tleQkJPSAkcm93LT5maWVsZHNbJ2FjY2Vzc2tleSddOwoJCQkJJHRoaXMtPm1UYWJJbmRleAkJPSAkcm93LT5maWVsZHNbJ3RhYmluZGV4J107CgkJCQkkdGhpcy0+bUFjdGl2ZQkJCT0gKCRyb3ctPmZpZWxkc1siYWN0aXZlIl0gPT0gMT90cnVlOmZhbHNlKTsKCQkJCSR0aGlzLT5tRGVmYXVsdENvbnRlbnQJPSAoJHJvdy0+ZmllbGRzWyJkZWZhdWx0X2NvbnRlbnQiXSA9PSAxP3RydWU6ZmFsc2UpOwoJCQkJJHRoaXMtPm1TaG93SW5NZW51CQk9ICgkcm93LT5maWVsZHNbInNob3dfaW5fbWVudSJdID09IDE/dHJ1ZTpmYWxzZSk7CgkJCQkkdGhpcy0+bUNhY2hhYmxlCQk9ICgkcm93LT5maWVsZHNbImNhY2hhYmxlIl0gPT0gMT90cnVlOmZhbHNlKTsKCQkJCSR0aGlzLT5tTGFzdE1vZGlmaWVkQnkJPSAkcm93LT5maWVsZHNbImxhc3RfbW9kaWZpZWRfYnkiXTsKCQkJCSR0aGlzLT5tQ3JlYXRpb25EYXRlCT0gJHJvdy0+ZmllbGRzWyJjcmVhdGVfZGF0ZSJdOwoJCQkJJHRoaXMtPm1Nb2RpZmllZERhdGUJPSAkcm93LT5maWVsZHNbIm1vZGlmaWVkX2RhdGUiXTsKCQkJCSR0aGlzLT5tUGFyZW50UGFnZUlkCT0gJHJvdy0+ZmllbGRzWyJwYXJlbnRfcGFnZV9pZCJdOwoKCQkJCSRyZXN1bHQgPSB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCXsKCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgcmV0cmlldmUgY29udGVudCBmcm9tIGRiPC9wPlxuIjsKCQkJCX0KCQkJfQoKCQkJaWYgKCRyZXN1bHQgJiYgJGxvYWRQcm9wZXJ0aWVzKQoJCQl7CgkJCQlpZiAoJHRoaXMtPm1Qcm9wZXJ0aWVzTG9hZGVkID09IGZhbHNlKQoJCQkJewoJCQkJCWRlYnVnX2J1ZmZlcigibG9hZCBmcm9tIGlkIGlzIGxvYWRpbmcgcHJvcGVydGllcyIpOwoJCQkJCSR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsKCQkJCQkkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPSB0cnVlOwoJCQkJfQoKCQkJCWlmIChOVUxMID09ICR0aGlzLT5tUHJvcGVydGllcykKCQkJCXsKCQkJCQkkcmVzdWx0ID0gZmFsc2U7CgoJCQkJCSMgZGVidWcgbW9kZQoJCQkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCgkJCQkJewoJCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+Q291bGQgbm90IGxvYWQgcHJvcGVydGllcyBmb3IgY29udGVudDwvcD5cbiI7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlpZiAoZmFsc2UgPT0gJHJlc3VsdCkKCQkJewoJCQkJJHRoaXMtPlNldEluaXRpYWxWYWx1ZXMoKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkjIGRlYnVnIG1vZGUKCQkJaWYgKCRjb25maWdbImRlYnVnIl0gPT0gdHJ1ZSkKCQkJewoJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5UaGUgaWQgd2Fzbid0IHZhbGlkIDogJGlkPC9wPlxuIjsKCQkJfQoJCX0KCgkJJHRoaXMtPkxvYWQoKTsKCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJLyoqCgkgKiBMb2FkIHRoZSBjb250ZW50IG9mIHRoZSBvYmplY3QgZnJvbSBhbiBhcnJheQoJICoKCSAqIFRoZXJlIGlzIG5vIGNoZWNrIG9uIHRoZSBkYXRhIHByb3ZpZGVkLCBiZWNhdXNlIHRoaXMgaXMgdGhlIGpvYiBvZgoJICogVmFsaWRhdGVEYXRhCgkgKgoJICogQHJldHVybnMJYm9vbAkJCUlmIGl0IGZhaWxzLCB0aGUgb2JqZWN0IGNvbWVzIGJhY2sgdG8gaW5pdGlhbCB2YWx1ZXMgYW5kIHJldHVybnMgRkFMU0UKCSAqCQkJCQkJCUlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCBpdCByZXR1cm5zIFRSVUUKCSAqLwoJZnVuY3Rpb24gTG9hZEZyb21EYXRhKCRkYXRhLCAkbG9hZFByb3BlcnRpZXMgPSBmYWxzZSkKCXsKCQlnbG9iYWwgJGNvbmZpZywgJGRlYnVnX2Vycm9yczsKCgkJJHJlc3VsdCA9IHRydWU7CgoJCSR0aGlzLT5tSWQJCQkJPSAkZGF0YVsiY29udGVudF9pZCJdOwoJCSR0aGlzLT5tTmFtZQkJCT0gJGRhdGFbImNvbnRlbnRfbmFtZSJdOwoJCSR0aGlzLT5tQWxpYXMJCQk9ICRkYXRhWyJjb250ZW50X2FsaWFzIl07CgkJJHRoaXMtPm1PbGRBbGlhcwkJPSAkZGF0YVsiY29udGVudF9hbGlhcyJdOwoJCSR0aGlzLT5tVHlwZQkJCT0gc3RydG9sb3dlcigkZGF0YVsidHlwZSJdKTsKCQkkdGhpcy0+bU93bmVyCQkJPSAkZGF0YVsib3duZXJfaWQiXTsKCQkjJHRoaXMtPm1Qcm9wZXJ0aWVzCQk9IG5ldyBDb250ZW50UHJvcGVydGllcygpOwoJCSR0aGlzLT5tUGFyZW50SWQJCT0gJGRhdGFbInBhcmVudF9pZCJdOwoJCSR0aGlzLT5tT2xkUGFyZW50SWQJCT0gJGRhdGFbInBhcmVudF9pZCJdOwoJCSR0aGlzLT5tVGVtcGxhdGVJZAkJPSAkZGF0YVsidGVtcGxhdGVfaWQiXTsKCQkkdGhpcy0+bUl0ZW1PcmRlcgkJPSAkZGF0YVsiaXRlbV9vcmRlciJdOwoJCSR0aGlzLT5tT2xkSXRlbU9yZGVyCT0gJGRhdGFbIml0ZW1fb3JkZXIiXTsKCQkkdGhpcy0+bU1ldGFkYXRhCQk9ICRkYXRhWydtZXRhZGF0YSddOwoJCSR0aGlzLT5tSGllcmFyY2h5CQk9ICRkYXRhWyJoaWVyYXJjaHkiXTsKCQkkdGhpcy0+bUlkSGllcmFyY2h5CQk9ICRkYXRhWyJpZF9oaWVyYXJjaHkiXTsKCQkkdGhpcy0+bUhpZXJhcmNoeVBhdGgJPSAkZGF0YVsiaGllcmFyY2h5X3BhdGgiXTsKCQkkdGhpcy0+bVByb3BlcnRpZXMtPm1Qcm9wZXJ0eU5hbWVzID0gZXhwbG9kZSgnLCcsJGRhdGFbInByb3BfbmFtZXMiXSk7CgkJJHRoaXMtPm1NZW51VGV4dAkJPSAkZGF0YVsnbWVudV90ZXh0J107CgkJJHRoaXMtPm1NYXJrdXAJCQk9ICRkYXRhWydtYXJrdXAnXTsKCQkkdGhpcy0+bVRpdGxlQXR0cmlidXRlCT0gJGRhdGFbJ3RpdGxlYXR0cmlidXRlJ107CgkJJHRoaXMtPm1BY2Nlc3NLZXkJCT0gJGRhdGFbJ2FjY2Vzc2tleSddOwoJCSR0aGlzLT5tVGFiSW5kZXgJCT0gJGRhdGFbJ3RhYmluZGV4J107CgkJJHRoaXMtPm1EZWZhdWx0Q29udGVudAk9ICgkZGF0YVsiZGVmYXVsdF9jb250ZW50Il0gPT0gMT90cnVlOmZhbHNlKTsKCQkkdGhpcy0+bUFjdGl2ZQkJCT0gKCRkYXRhWyJhY3RpdmUiXSA9PSAxP3RydWU6ZmFsc2UpOwoJCSR0aGlzLT5tU2hvd0luTWVudQkJPSAoJGRhdGFbInNob3dfaW5fbWVudSJdID09IDE/dHJ1ZTpmYWxzZSk7CgkJJHRoaXMtPm1DYWNoYWJsZQkJPSAoJGRhdGFbImNhY2hhYmxlIl0gPT0gMT90cnVlOmZhbHNlKTsKCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5CT0gJGRhdGFbImxhc3RfbW9kaWZpZWRfYnkiXTsKCQkkdGhpcy0+bUNyZWF0aW9uRGF0ZQk9ICRkYXRhWyJjcmVhdGVfZGF0ZSJdOwoJCSR0aGlzLT5tTW9kaWZpZWREYXRlCT0gJGRhdGFbIm1vZGlmaWVkX2RhdGUiXTsKCQkkdGhpcy0+bVBhcmVudFBhZ2VJZAk9ICRkYXRhWyJwYXJlbnRfcGFnZV9pZCJdOwoJCWlmICgkbG9hZFByb3BlcnRpZXMgPT0gdHJ1ZSkKCQl7CgkJCSMkdGhpcy0+bVByb3BlcnRpZXMgPSBDb250ZW50TWFuYWdlcjo6TG9hZFByb3BlcnRpZXNGcm9tRGF0YShzdHJ0b2xvd2VyKCR0aGlzLT5tVHlwZSksICRkYXRhKTsKCQkJaWYgKCR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKCQkJewoJCQkJZGVidWdfYnVmZmVyKCJsb2FkIGZyb20gZGF0YSBpcyBsb2FkaW5nIHByb3BlcnRpZXMiKTsKCQkJCSR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsKCQkJCSR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CgkJCX0KCgkJCWlmIChOVUxMID09ICR0aGlzLT5tUHJvcGVydGllcykKCQkJewoJCQkJJHJlc3VsdCA9IGZhbHNlOwoKCQkJCSMgZGVidWcgbW9kZQoJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCXsKCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgbG9hZCBwcm9wZXJ0aWVzIGZvciBjb250ZW50PC9wPlxuIjsKCQkJCX0KCQkJfQoJCX0KCgkJaWYgKGZhbHNlID09ICRyZXN1bHQpCgkJewoJCQkkdGhpcy0+U2V0SW5pdGlhbFZhbHVlcygpOwoJCX0KCgkJJHRoaXMtPkxvYWQoKTsKCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJLyoqCgkgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgY29udGVudCB0eXBlcyB0byB1c2UgdG8gcHJlbG9hZCBjb250ZW50IG9yIG90aGVyIHRoaW5ncyBpZiBuZWNlc3NhcnkuICBUaGlzCgkgKiBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIHByb3BlcnRpZXMgYXJlIGxvYWRlZC4KCSAqLwoJZnVuY3Rpb24gTG9hZCgpCgl7Cgl9CgoJLyoqCgkgKiBTYXZlIG9yIHVwZGF0ZSB0aGUgY29udGVudAoJICovCgkjIDpUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gc29tZXRoaW5nCglmdW5jdGlvbiBTYXZlKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJZm9yZWFjaCgkZ0Ntcy0+bW9kdWxlcyBhcyAka2V5PT4kdmFsdWUpCgkJewoJCQlpZiAoJGdDbXMtPm1vZHVsZXNbJGtleV1bJ2luc3RhbGxlZCddID09IHRydWUgJiYKCQkJCSRnQ21zLT5tb2R1bGVzWyRrZXldWydhY3RpdmUnXSA9PSB0cnVlKQoJCQl7CgkJCQkkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnb2JqZWN0J10tPkNvbnRlbnRFZGl0UHJlKCR0aGlzKTsKCQkJfQoJCX0KCQkKCQlFdmVudHM6OlNlbmRFdmVudCgnQ29yZScsICdDb250ZW50RWRpdFByZScsIGFycmF5KCdjb250ZW50JyA9PiAmJHRoaXMpKTsKCgkJaWYgKCR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKCQl7CgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBpcyBsb2FkaW5nIHByb3BlcnRpZXMnKTsKCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5Mb2FkKCR0aGlzLT5tSWQpOwoJCQkkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPSB0cnVlOwoJCX0KCgkJaWYgKC0xIDwgJHRoaXMtPm1JZCkKCQl7CgkJCSR0aGlzLT5VcGRhdGUoKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPkluc2VydCgpOwoJCX0KCQkKCQlmb3JlYWNoKCRnQ21zLT5tb2R1bGVzIGFzICRrZXk9PiR2YWx1ZSkKCQl7CQkKCQkJaWYgKCRnQ21zLT5tb2R1bGVzWyRrZXldWydpbnN0YWxsZWQnXSA9PSB0cnVlICYmCgkJCQkkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnYWN0aXZlJ10gPT0gdHJ1ZSkKCQkJewoJCQkJJGdDbXMtPm1vZHVsZXNbJGtleV1bJ29iamVjdCddLT5Db250ZW50RWRpdFBvc3QoJHRoaXMpOwoJCQl9CgkJfQoJCQoJCUV2ZW50czo6U2VuZEV2ZW50KCdDb3JlJywgJ0NvbnRlbnRFZGl0UG9zdCcsIGFycmF5KCdjb250ZW50JyA9PiAmJHRoaXMpKTsKCQkKCX0KCgkvKioKCSAqIFVwZGF0ZSB0aGUgY29udGVudAoJICogV2UgY2FuIG5vdGljZSwgdGhhdCBvbmx5IGEgZmV3IHRoaW5ncyBhcmUgdXBkYXRlZAoJICogV2UgZG8gbm90IGNhcmUgYWJvdXQgaGllcmFyY2h5IGZvciBleGFtcGxlLiBUaGlzIGlzIGJlY2F1c2UgaGllcmFyY2h5LAoJICogb3JkZXIgb3IgcGFyZW50cyBtYW5hZ2VtZW50IGlzIHRoZSBqb2Igb2YgdGhlIGNvbnRlbnQgbWFuYWdlci4KCSAqIFJlbWVtYmVyIHRoYXQgYSBjb250ZW50IGlzIGxpa2UgYSBmaWxlLCBhbmQgYSBmaWxlIGRvbid0IGtub3cgd2hlcmUgaXQgaXMKCSAqIG9uIHRoZSBkaXNrLCBpdCBvbmx5IGtub3dzIGl0cyBvd24gY29udGVudC4gSXQncyB0aGUgc2FtZSBoZXJlLgoJICovCgkjIDpUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gc29tZXRoaW5nCglmdW5jdGlvbiBVcGRhdGUoKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQkjRmlndXJlIG91dCB0aGUgaXRlbV9vcmRlciAoaWYgbmVjZXNzYXJ5KQoJCWlmICgkdGhpcy0+bUl0ZW1PcmRlciA8IDEpCgkJewoJCQkkcXVlcnkgPSAiU0VMRUNUICIuJGRiLT5JZk51bGwoJ21heChpdGVtX29yZGVyKScsJzAnKS4iIGFzIG5ld19vcmRlciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIHBhcmVudF9pZCA9ID8iOwoJCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgkdGhpcy0+bVBhcmVudElkKSk7CgoJCQlpZiAoJHJvdykKCQkJewoJCQkJaWYgKCRyb3dbJ25ld19vcmRlciddIDwgMSkKCQkJCXsKCQkJCQkkdGhpcy0+bUl0ZW1PcmRlciA9IDE7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHRoaXMtPm1JdGVtT3JkZXIgPSAkcm93WyduZXdfb3JkZXInXSArIDE7CgkJCQl9CgkJCX0KCQl9CgoJCSR0aGlzLT5tTW9kaWZpZWREYXRlID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGNvbnRlbnRfbmFtZSA9ID8sIG93bmVyX2lkID0gPywgdHlwZSA9ID8sIHRlbXBsYXRlX2lkID0gPywgcGFyZW50X2lkID0gPywgYWN0aXZlID0gPywgZGVmYXVsdF9jb250ZW50ID0gPywgc2hvd19pbl9tZW51ID0gPywgY2FjaGFibGUgPSA/LCBtZW51X3RleHQgPSA/LCBjb250ZW50X2FsaWFzID0gPywgbWV0YWRhdGEgPSA/LCB0aXRsZWF0dHJpYnV0ZSA9ID8sIGFjY2Vzc2tleSA9ID8sIHRhYmluZGV4ID0gPywgbW9kaWZpZWRfZGF0ZSA9ID8sIGl0ZW1fb3JkZXIgPSA/LCBtYXJrdXAgPSA/LCBsYXN0X21vZGlmaWVkX2J5ID0gPywgcGFyZW50X3BhZ2VfaWQgPSA/IFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgKCQkJJHRoaXMtPm1OYW1lLAoJCQkkdGhpcy0+bU93bmVyLAoJCQlzdHJ0b2xvd2VyKCR0aGlzLT5tVHlwZSksCgkJCSR0aGlzLT5tVGVtcGxhdGVJZCwKCQkJJHRoaXMtPm1QYXJlbnRJZCwKCQkJKCR0aGlzLT5tQWN0aXZlPT10cnVlPzE6MCksCgkJCSgkdGhpcy0+bURlZmF1bHRDb250ZW50PT10cnVlPzE6MCksCgkJCSgkdGhpcy0+bVNob3dJbk1lbnU9PXRydWU/MTowKSwKCQkJKCR0aGlzLT5tQ2FjaGFibGU9PXRydWU/MTowKSwKCQkJJHRoaXMtPm1NZW51VGV4dCwKCQkJJHRoaXMtPm1BbGlhcywKCQkJJHRoaXMtPm1NZXRhZGF0YSwKCQkJJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZSwKCQkJJHRoaXMtPm1BY2Nlc3NLZXksCgkJCSR0aGlzLT5tVGFiSW5kZXgsCgkJCSR0aGlzLT5tTW9kaWZpZWREYXRlLAoJCQkkdGhpcy0+bUl0ZW1PcmRlciwKCQkJJHRoaXMtPm1NYXJrdXAsCgkJCSR0aGlzLT5tTGFzdE1vZGlmaWVkQnksCgkJCSR0aGlzLT5tUGFyZW50UGFnZUlkLAoJCQkkdGhpcy0+bUlkCgkJCSkpOwoKCQlpZiAoISRkYnJlc3VsdCkKCQl7CgkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCgkJCXsKCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+RXJyb3IgdXBkYXRpbmcgY29udGVudDwvcD5cbiI7CgkJCX0KCQl9CgoJCWlmICgkdGhpcy0+bU9sZFBhcmVudElkICE9ICR0aGlzLT5tUGFyZW50SWQpCgkJewoJCQlkZWJ1Z19idWZmZXIoJ1VwZGF0aW5nIG9yZGVyIGJlY2F1c2UgcGFyZW50IGlkIGNoYW5nZWQgJyAuIF9fTElORV9fKTsKCQkJI0ZpeCB0aGUgaXRlbV9vcmRlciBpZiBuZWNlc3NhcnkKCQkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxIFdIRVJFIHBhcmVudF9pZCA9ID8gQU5EIGl0ZW1fb3JkZXIgPiA/IjsKCQkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0aGlzLT5tT2xkUGFyZW50SWQsJHRoaXMtPm1PbGRJdGVtT3JkZXIpKTsKCQkJJHRoaXMtPm1PbGRQYXJlbnRJZCA9ICR0aGlzLT5tUGFyZW50SWQ7CgkJCSR0aGlzLT5tT2xkSXRlbU9yZGVyID0gJHRoaXMtPm1JdGVtT3JkZXI7CgkJfQoKCQlpZiAoaXNzZXQoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycykpCgkJewoJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuImFkZGl0aW9uYWxfdXNlcnMgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdGhpcy0+SWQoKSkpOwoKCQkJZm9yZWFjaCAoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycyBhcyAkb25lZWRpdG9yKQoJCQl7CgkJCQkkbmV3X2FkZHRfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4iYWRkaXRpb25hbF91c2Vyc19zZXEiKTsKCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4iYWRkaXRpb25hbF91c2VycyAoYWRkaXRpb25hbF91c2Vyc19pZCwgdXNlcl9pZCwgY29udGVudF9pZCkgVkFMVUVTICg/LD8sPykiOwoJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5ld19hZGR0X2lkLCAkb25lZWRpdG9yLCAkdGhpcy0+SWQoKSkpOwoJCQl9CgkJfQoKCQlpZiAoTlVMTCAhPSAkdGhpcy0+bVByb3BlcnRpZXMpCgkJewoJCQkjIDpUT0RPOiBUaGVyZSBtaWdodCBiZSBzb21lIGVycm9yIGNoZWNraW5nIHRoZXJlCgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBmcm9tICcgLiBfX0xJTkVfXyk7CgkJCSR0aGlzLT5tUHJvcGVydGllcy0+U2F2ZSgkdGhpcy0+bUlkKTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJewoJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5FcnJvciB1cGRhdGluZyA6IHRoZSBjb250ZW50IGhhcyBubyBwcm9wZXJ0aWVzPC9wPlxuIjsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEluc2VydCB0aGUgY29udGVudCBpbiB0aGUgZGIKCSAqLwoJIyA6VE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHNvbWV0aGluZwoJIyA6VE9ETzogVGFrZSBjYXJlIGJvdXQgaGllcmFyY2h5IGhlcmUsIGl0IGhhcyBubyB2YWx1ZSAhCgkjIDpUT0RPOiBGaWd1cmUgb3V0IHByb3BlciBpdGVtX29yZGVyCglmdW5jdGlvbiBJbnNlcnQoKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQkjRmlndXJlIG91dCB0aGUgaXRlbV9vcmRlcgoJCWlmICgkdGhpcy0+bUl0ZW1PcmRlciA8IDEpCgkJewoJCQkkcXVlcnkgPSAiU0VMRUNUIG1heChpdGVtX29yZGVyKSBhcyBuZXdfb3JkZXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBwYXJlbnRfaWQgPSA/IjsKCQkJJHJvdyA9ICYkZGItPkdldHJvdygkcXVlcnksIGFycmF5KCR0aGlzLT5tUGFyZW50SWQpKTsKCgkJCWlmICgkcm93KQoJCQl7CgkJCQlpZiAoJHJvd1snbmV3X29yZGVyJ10gPCAxKQoJCQkJewoJCQkJCSR0aGlzLT5tSXRlbU9yZGVyID0gMTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkdGhpcy0+bUl0ZW1PcmRlciA9ICRyb3dbJ25ld19vcmRlciddICsgMTsKCQkJCX0KCQkJfQoJCX0KCgkJJG5ld2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuImNvbnRlbnRfc2VxIik7CgkJJHRoaXMtPm1JZCA9ICRuZXdpZDsKCgkJJHRoaXMtPm1Nb2RpZmllZERhdGUgPSAkdGhpcy0+bUNyZWF0aW9uRGF0ZSA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwoKCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi4kY29uZmlnWyJkYl9wcmVmaXgiXS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCAoY29udGVudF9pZCwgY29udGVudF9uYW1lLCBjb250ZW50X2FsaWFzLCB0eXBlLCBvd25lcl9pZCwgcGFyZW50X2lkLCB0ZW1wbGF0ZV9pZCwgaXRlbV9vcmRlciwgaGllcmFyY2h5LCBpZF9oaWVyYXJjaHksIGFjdGl2ZSwgZGVmYXVsdF9jb250ZW50LCBzaG93X2luX21lbnUsIGNhY2hhYmxlLCBtZW51X3RleHQsIG1hcmt1cCwgbWV0YWRhdGEsIHRpdGxlYXR0cmlidXRlLCBhY2Nlc3NrZXksIHRhYmluZGV4LCBsYXN0X21vZGlmaWVkX2J5LCBjcmVhdGVfZGF0ZSwgbW9kaWZpZWRfZGF0ZSwgcGFyZW50X3BhZ2VfaWQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pIjsKCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoCgkJCSRuZXdpZCwKCQkJJHRoaXMtPm1OYW1lLAoJCQkkdGhpcy0+bUFsaWFzLAoJCQlzdHJ0b2xvd2VyKCR0aGlzLT5tVHlwZSksCgkJCSR0aGlzLT5tT3duZXIsCgkJCSR0aGlzLT5tUGFyZW50SWQsCgkJCSR0aGlzLT5tVGVtcGxhdGVJZCwKCQkJJHRoaXMtPm1JdGVtT3JkZXIsCgkJCSR0aGlzLT5tSGllcmFyY2h5LAoJCQkkdGhpcy0+bUlkSGllcmFyY2h5LAoJCQkoJHRoaXMtPm1BY3RpdmU9PXRydWU/MTowKSwKCQkJKCR0aGlzLT5tRGVmYXVsdENvbnRlbnQ9PXRydWU/MTowKSwKCQkJKCR0aGlzLT5tU2hvd0luTWVudT09dHJ1ZT8xOjApLAoJCQkoJHRoaXMtPm1DYWNoYWJsZT09dHJ1ZT8xOjApLAoJCQkkdGhpcy0+bU1lbnVUZXh0LAoJCQkkdGhpcy0+bU1hcmt1cCwKCQkJJHRoaXMtPm1NZXRhZGF0YSwKCQkJJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZSwKCQkJJHRoaXMtPm1BY2Nlc3NLZXksCgkJCSR0aGlzLT5tVGFiSW5kZXgsCgkJCSR0aGlzLT5tTGFzdE1vZGlmaWVkQnksCgkJCSR0aGlzLT5tTW9kaWZpZWREYXRlLAoJCQkkdGhpcy0+bUNyZWF0aW9uRGF0ZSwKCQkJJHRoaXMtPm1QYXJlbnRQYWdlSWQKCQkJKSk7CgoJCWlmICghICRkYnJlc3VsdCkKCQl7CgkJCWlmICgkY29uZmlnWyJkZWJ1ZyJdID09IHRydWUpCgkJCXsKCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+RXJyb3IgaW5zZXJ0aW5nIGNvbnRlbnQ8L3A+XG4iOwoJCQl9CgkJfQoKCQlpZiAoTlVMTCAhPSAkdGhpcy0+bVByb3BlcnRpZXMpCgkJewoJCQkjIDpUT0RPOiBUaGVyZSBtaWdodCBiZSBzb21lIGVycm9yIGNoZWNraW5nIHRoZXJlCgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBmcm9tICcgLiBfX0xJTkVfXyk7CgkJCSR0aGlzLT5tUHJvcGVydGllcy0+U2F2ZSgkbmV3aWQpOwoJCX0KCQllbHNlCgkJewoJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQl7CgkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkVycm9yIGluc2VydGluZyA6IHRoZSBjb250ZW50IGhhcyBubyBwcm9wZXJ0aWVzPC9wPlxuIjsKCQkJfQoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycykpCgkJewoJCQlmb3JlYWNoICgkdGhpcy0+bUFkZGl0aW9uYWxFZGl0b3JzIGFzICRvbmVlZGl0b3IpCgkJCXsKCQkJCSRuZXdfYWRkdF9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJhZGRpdGlvbmFsX3VzZXJzX3NlcSIpOwoJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJhZGRpdGlvbmFsX3VzZXJzIChhZGRpdGlvbmFsX3VzZXJzX2lkLCB1c2VyX2lkLCBjb250ZW50X2lkKSBWQUxVRVMgKD8sPyw/KSI7CgkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbmV3X2FkZHRfaWQsICRvbmVlZGl0b3IsICR0aGlzLT5JZCgpKSk7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBUZXN0IGlmIHRoZSBhcnJheSBnaXZlbiBjb250YWlucyB2YWxpZCBkYXRhIGZvciB0aGUgb2JqZWN0CgkgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgdGhhdCBubyBjb21wdWxzb3J5IGFyZ3VtZW50CgkgKiBoYXMgYmVlbiBmb3Jnb3R0ZW4gYnkgdGhlIHVzZXIKCSAqCgkgKiBXZSBkbyBub3QgY2hlY2sgdGhlIElkIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG5vIElkIChuZXcgY29udGVudCkKCSAqIFRoYXQncyB1cCB0byBTYXZlIHRvIGNoZWNrIHRoaXMuCgkgKgoJICogQHJldHVybnMJRkFMU0UgaWYgZGF0YSBpcyBvaywgYW5kIGFuIGFycmF5IG9mIGludmFsaWQgcGFyYW1ldGVycyBlbHNlCgkgKi8KCWZ1bmN0aW9uIFZhbGlkYXRlRGF0YSgpCgl7CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJICogRGVsZXRlIHRoZSBjb250ZW50CgkgKi8KCSMgOlRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBzb21ldGhpbmcKCWZ1bmN0aW9uIERlbGV0ZSgpCgl7CgkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CgkJLyoKCQlmb3JlYWNoKCRnQ21zLT5tb2R1bGVzIGFzICRrZXk9PiR2YWx1ZSkKCQl7CgkJCWlmICgkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnaW5zdGFsbGVkJ10gPT0gdHJ1ZSAmJgoJCQkJJGdDbXMtPm1vZHVsZXNbJGtleV1bJ2FjdGl2ZSddID09IHRydWUpCgkJCXsKCQkJCSRnQ21zLT5tb2R1bGVzWyRrZXldWydvYmplY3QnXS0+Q29udGVudERlbGV0ZVByZSgkdGhpcyk7CgkJCX0KCQl9CgkJCgkJRXZlbnRzOjpTZW5kRXZlbnQoJ0NvcmUnLCAnQ29udGVudERlbGV0ZVByZScsIGFycmF5KCdjb250ZW50JyA9PiAmJHRoaXMpKTsKCQkqLwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQlpZiAoLTEgPiAkdGhpcy0+bUlkKQoJCXsKCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJewoJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgZGVsZXRlIGNvbnRlbnQgOiBpbnZhbGlkIElkPC9wPlxuIjsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkcXVlcnkJCT0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJJGRicmVzdWx0CT0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoaXMtPm1JZCkpOwoKCQkJaWYgKCEgJGRicmVzdWx0KQoJCQl7CgkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQkJewoJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkVycm9yIGRlbGV0aW5nIGNvbnRlbnQ8L3A+XG4iOwoJCQkJfQoJCQl9CgkJCQoJCQkjRml4IHRoZSBpdGVtX29yZGVyIGlmIG5lY2Vzc2FyeQoJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciAtIDEgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgaXRlbV9vcmRlciA+ID8iOwoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+UGFyZW50SWQoKSwkdGhpcy0+SXRlbU9yZGVyKCkpKTsKCQkJCgkJCSNSZW1vdmUgdGhlIGNyb3NzIHJlZmVyZW5jZXMKCQkJcmVtb3ZlX2Jsb2NrX2Nyb3NzX3JlZmVyZW5jZXMoJHRoaXMtPm1JZCwgJ2NvbnRlbnQnKTsKCQkJCgkJCSRjYWNoZWZpbGVuYW1lID0gVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gJy9ibG9ja2NvbnRlbnRjYWNoZS5waHAnOwoJCQlAdW5saW5rKCRjYWNoZWZpbGVuYW1lKTsKCgkJCWlmIChOVUxMICE9ICR0aGlzLT5tUHJvcGVydGllcykKCQkJewoJCQkJIyA6VE9ETzogVGhlcmUgbWlnaHQgYmUgc29tZSBlcnJvciBjaGVja2luZyB0aGVyZQoJCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5EZWxldGUoJHRoaXMtPm1JZCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQkJewoJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkVycm9yIGRlbGV0aW5nIDogdGhlIGNvbnRlbnQgaGFzIG5vIHByb3BlcnRpZXM8L3A+XG4iOwoJCQkJfQoJCQl9CgkJfQoJCQoJCWZvcmVhY2goJGdDbXMtPm1vZHVsZXMgYXMgJGtleT0+JHZhbHVlKQoJCXsKCQkJaWYgKCRnQ21zLT5tb2R1bGVzWyRrZXldWydpbnN0YWxsZWQnXSA9PSB0cnVlICYmCgkJCQkkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnYWN0aXZlJ10gPT0gdHJ1ZSkKCQkJewoJCQkJJGdDbXMtPm1vZHVsZXNbJGtleV1bJ29iamVjdCddLT5Db250ZW50RGVsZXRlUG9zdCgkdGhpcyk7CgkJCX0KCQl9CgkJCgkJRXZlbnRzOjpTZW5kRXZlbnQoJ0NvcmUnLCAnQ29udGVudERlbGV0ZVBvc3QnLCBhcnJheSgnY29udGVudCcgPT4gJiR0aGlzKSk7Cgl9CgoJLyoqCgkgKiBGdW5jdGlvbiBmb3IgdGhlIHN1YmNsYXNzIHRvIHBhcnNlIG91dCBkYXRhIGZvciBpdCdzIHBhcmFtZXRlcnMgKHVzdWFsbHkgZnJvbSAkX1BPU1QpCgkgKi8KCWZ1bmN0aW9uIEZpbGxQYXJhbXMoJHBhcmFtcykKCXsKCX0KCgkvKioKCSAqIEZ1bmN0aW9uIGZvciBjb250ZW50IHR5cGVzIHRvIG92ZXJyaWRlIHRvIHNldCB0aGVpciBwcm9wZXIgZ2VuZXJhdGVkIFVSTAoJICovCglmdW5jdGlvbiBHZXRVUkwoJHJld3JpdGUgPSB0cnVlKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkY29uZmlnID0gJiRnQ21zLT5HZXRDb25maWcoKTsKCQkkdXJsID0gIiI7CgkJJGFsaWFzID0gKCR0aGlzLT5tQWxpYXMgIT0gJyc/JHRoaXMtPm1BbGlhczokdGhpcy0+bUlkKTsKCQlpZiAoJGNvbmZpZ1siYXNzdW1lX21vZF9yZXdyaXRlIl0gJiYgJHJld3JpdGUgPT0gdHJ1ZSkKCQl7CgkJCWlmICgkY29uZmlnWyd1c2VfaGllcmFyY2h5J10gPT0gdHJ1ZSkKCQkJCSR1cmwgPSAkY29uZmlnWyJyb290X3VybCJdLiAnLycgLiAkdGhpcy0+SGllcmFyY2h5UGF0aCgpIC4gKGlzc2V0KCRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ10pPyRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ106Jy5odG1sJyk7CgkJCWVsc2UKCQkJCSR1cmwgPSAkY29uZmlnWyJyb290X3VybCJdLiAnLycgLiAkYWxpYXMgLiAoaXNzZXQoJGNvbmZpZ1sncGFnZV9leHRlbnNpb24nXSk/JGNvbmZpZ1sncGFnZV9leHRlbnNpb24nXTonLmh0bWwnKTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKGlzc2V0KCRfU0VSVkVSWydQSFBfU0VMRiddKSAmJiAkY29uZmlnWydpbnRlcm5hbF9wcmV0dHlfdXJscyddID09IHRydWUpCgkJCXsKCQkJCWlmICgkY29uZmlnWyd1c2VfaGllcmFyY2h5J10gPT0gdHJ1ZSkKCQkJCQkkdXJsID0gJGNvbmZpZ1sicm9vdF91cmwiXSAuICcvaW5kZXgucGhwLycgLiAkdGhpcy0+SGllcmFyY2h5UGF0aCgpIC4gKGlzc2V0KCRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ10pPyRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ106Jy5odG1sJyk7CgkJCQllbHNlCgkJCQkJJHVybCA9ICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnL2luZGV4LnBocC8nIC4gJGFsaWFzIC4gKGlzc2V0KCRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ10pPyRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ106Jy5odG1sJyk7CgkJCX0KCQkJZWxzZQoJCQkJJHVybCA9ICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnL2luZGV4LnBocD8nIC4gJGNvbmZpZ1sicXVlcnlfdmFyIl0gLiAnPScgLiAkYWxpYXM7CgkJfQoJCXJldHVybiAkdXJsOwoJfQoKCS8qCglmdW5jdGlvbiBNYWtlSGllcmFyY2h5VVJMKCRleHQ9JycpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoKCQkkcGF0aCA9ICcvJyAuICR0aGlzLT5BbGlhcygpOwoKCQkkbm9kZSA9JiAkaG0tPmdldE5vZGVCeUlkKCR0aGlzLT5QYXJlbnRJZCgpKTsKCQlpZihpc3NldCgkbm9kZSkpCgkJewoJCQkkY29udGVudCA9JiAkbm9kZS0+R2V0Q29udGVudCgpOwoJCQlpZiAoaXNzZXQoJGNvbnRlbnQpKQoJCQl7CgkJCQkkcGF0aCA9ICcvJyAuICRjb250ZW50LT5IaWVyYXJjaHlQYXRoKCk7CgkJCX0KCQl9CgoJCSRyZXN1bHQgPSAkcGF0aDsKCgkJaWYgKCRleHQgIT0gJycpCgkJCSRyZXN1bHQgPSAkcGF0aCAuICRleHQ7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoJKi8KCgkvKioKCSAqIFNob3cgdGhlIGNvbnRlbnQKCSAqLwoJZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKCXsKCQkjIDpUT0RPOgoJCXJldHVybiAiPHRyPjx0ZD5TaG93IE5vdCBEZWZpbmVkPC90ZD48L3RyPiI7Cgl9CgkKCS8qKgoJKiBhbGxvdyB0aGUgY29udGVudCBtb2R1bGUgdG8gaGFuZGxlIGN1c3RvbSB0YWdzLiBUeXBpY2FsbHkgdXNlZCBmb3IgcGFyYW1ldGVycyBpbiB7Y29udGVudH0gdGFncwoJKi8KCWZ1bmN0aW9uIENvbnRlbnRQcmVSZW5kZXIoJHRwbF9zb3VyY2UpCgl7CgkJcmV0dXJuICR0cGxfc291cmNlOwoJfQoKCS8qKgoJICogUmV0dXJucyBhIGxpc3Qgb2YgdGFiIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBhZGRpbmcgb3IgZWRpdGluZyB0aGlzIHR5cGUgb2YgY29udGVudAoJICovCglmdW5jdGlvbiBHZXRUYWJEZWZpbml0aW9ucygpCgl7CgkJcmV0dXJuIGFycmF5KCk7Cgl9CgkKCS8qKgoJICogUmV0dXJucyB0aGUgdGFiIG5hbWVzIHVzZWQgaW4gdGhlIGFkZCBhbmQgZWRpdCBjb250ZW50IHBhZ2UuICBJZiBpdCdzIGFuIGVtcHR5IGFycmF5LCB0aGVuCgkgKiB0aGUgdGFicyB3b24ndCBzaG93IGF0IGFsbC4KCSAqLwoJZnVuY3Rpb24gVGFiTmFtZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCS8qKgoJICogU2hvdyB0aGUgQWx0ZXJuYXRlIEVkaXQgaW50ZXJmYWNlCgkgKi8KCWZ1bmN0aW9uIEVkaXRBc0FycmF5KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkKCXsKCQkjIDpUT0RPOgoJCXJldHVybiBhcnJheShhcnJheSgnRXJyb3InLCdFZGl0IE5vdCBEZWZpbmVkIScpKTsKCX0KCgoJLyoqCgkgKiBTaG93IHRoZSBFZGl0IGludGVyZmFjZQoJICovCglmdW5jdGlvbiBFZGl0KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkKCXsKICAgICAgICAkdGV4dCA9ICcnOwogICAgICAgICR2YWwgPSAkdGhpcy0+RWRpdEFzQXJyYXkoJGFkZGluZywgJHRhYiwgJHNob3dhZG1pbik7CiAgICAgICAgZm9yZWFjaCAoJHZhbCBhcyAkdGhpc1JvdykKICAgICAgICAgICAgewogICAgICAgICAgICAkdGV4dCAuPSAnPHRyPjx0aD4nLiR0aGlzUm93WzBdLic8L3RoPjx0ZD4nLiR0aGlzUm93WzFdLic8L3RkPjwvdHI+JzsKICAgICAgICAgICAgJHRleHQgLj0gIlxuIjsKICAgICAgICAgICAgfQoJCXJldHVybiAkdGV4dDsKCgl9CgoJLyoqCgkgKiBTaG93IHRoZSBBZHZhbmNlZCBFZGl0IGludGVyZmFjZQoJICovCglmdW5jdGlvbiBBZHZhbmNlZEVkaXQoJGFkZGluZyA9IGZhbHNlKQoJewoJCSMgOlRPRE86CgkJcmV0dXJuICI8dHI+PHRkPkFkdmFuY2VkIEVkaXQgTm90IERlZmluZWQ8L3RkPjwvdHI+IjsKCX0KCgkvKioKCSAqIFNob3cgSGVscAoJICovCglmdW5jdGlvbiBIZWxwKCkKCXsKCQkjIDpUT0RPOgoJCXJldHVybiAiPHRyPjx0ZD5IZWxwIE5vdCBEZWZpbmVkPC90ZD48L3RyPiI7Cgl9CgoJLyoqCgkgKiBEb2VzIHRoaXMgaGF2ZSBjaGlsZHJlbj8KCSAqLwoJZnVuY3Rpb24gSGFzQ2hpbGRyZW4oKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBwYXJlbnRfaWQgPSA/IjsKCQkkcm93ID0gJiRkYi0+R2V0cm93KCRxdWVyeSwgYXJyYXkoJHRoaXMtPm1JZCkpOwoKCQlpZiAoJHJvdykKCQl7CgkJCSRyZXN1bHQgPSB0cnVlOwoJCX0KCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJZnVuY3Rpb24gR2V0QWRkaXRpb25hbEVkaXRvcnMoKQoJewoJCWlmICghaXNzZXQoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycykpCgkJewoJCQlnbG9iYWwgJGdDbXM7CgkJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJCSR0aGlzLT5tQWRkaXRpb25hbEVkaXRvcnMgPSBhcnJheSgpOwoKCQkJJHF1ZXJ5ID0gIlNFTEVDVCB1c2VyX2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuImFkZGl0aW9uYWxfdXNlcnMgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkZGJyZXN1bHQgPSAmJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+bUlkKSk7CgoJCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQkJewoJCQkJJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9yc1tdID0gJGRicmVzdWx0LT5maWVsZHNbJ3VzZXJfaWQnXTsKCQkJCSRkYnJlc3VsdC0+TW92ZU5leHQoKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9yczsKCX0KCglmdW5jdGlvbiBTZXRBZGRpdGlvbmFsRWRpdG9ycygkZWRpdG9yYXJyYXkpCgl7CgkJJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycyA9ICRlZGl0b3JhcnJheTsKCX0KCglmdW5jdGlvbiBTaG93QWRkaXRpb25hbEVkaXRvcnMoKQoJewoJCSRyZXQgPSBhcnJheSgpOwoKCQkkcmV0W10gPSBsYW5nKCdhZGRpdGlvbmFsZWRpdG9ycycpOwoJCSR0ZXh0ID0gJzxzZWxlY3QgbmFtZT0iYWRkaXRpb25hbF9lZGl0b3JzW10iIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iNSI+JzsKCgkJJGFsbHVzZXJzID0gVXNlck9wZXJhdGlvbnM6OkxvYWRVc2VycygpOwoJCSRhZGR0ZWRpdG9ycyA9ICR0aGlzLT5HZXRBZGRpdGlvbmFsRWRpdG9ycygpOwoJCWZvcmVhY2ggKCRhbGx1c2VycyBhcyAkb25ldXNlcikKCQl7CgkJCWlmICgkb25ldXNlci0+aWQgIT0gJHRoaXMtPk93bmVyKCkpCgkJCXsKCQkJCSR0ZXh0IC49ICc8b3B0aW9uIHZhbHVlPSInLiRvbmV1c2VyLT5pZC4nIic7CgkJCQlpZiAoaW5fYXJyYXkoJG9uZXVzZXItPmlkLCAkYWRkdGVkaXRvcnMpKQoJCQkJewoJCQkJCSR0ZXh0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJCQl9CgkJCQkkdGV4dCAuPSAnPicuJG9uZXVzZXItPnVzZXJuYW1lLic8L29wdGlvbj4nOwoJCQl9CgkJfQoKCQkkdGV4dCAuPSAnPC9zZWxlY3Q+JzsKICAgICAgICAkcmV0W10gPSAkdGV4dDsKCQlyZXR1cm4gJHJldDsKCX0KCglmdW5jdGlvbiBJc0RlZmF1bHRQb3NzaWJsZSgpCgl7CgkJcmV0dXJuIEZBTFNFOwoJfQkKfQoKLyoqCiAqIENsYXNzIHRvIHJlcHJlc2VudCBjb250ZW50IHByb3BlcnRpZXMuICBUaGVzZSBhcmUgcHJldHR5IG11Y2gKICogc2VwYXJhdGUgYmVpbmdzIHRoYXQgZ2V0IHVzZWQgYnkgYSBjb250ZW50IG9iamVjdCBpbnN0YW5jZS4KICoKICogQHNpbmNlCQkwLjgKICogQHBhY2thZ2UJCUNNUwogKi8KY2xhc3MgQmxvY2tDb250ZW50UHJvcGVydGllcwp7Cgl2YXIgJG1Qcm9wZXJ0eU5hbWVzOwoJdmFyICRtUHJvcGVydHlUeXBlczsKCXZhciAkbVByb3BlcnR5VmFsdWVzOwoKCS8qKgoJICogR2VuZXJpYyBjb25zdHJ1Y3Rvci4gUnVucyB0aGUgU2V0SW5pdGlhbFZhbHVlcyBmdWN0aW9uLgoJICovCglmdW5jdGlvbiBCbG9ja0NvbnRlbnRQcm9wZXJ0aWVzKCkKCXsKCQkkdGhpcy0+U2V0SW5pdGlhbFZhbHVlcygpOwoJfQoKCS8qKgoJICogU2V0cyBvYmplY3QgdG8gc29tZSBzYW5lIGluaXRpYWwgdmFsdWVzCgkgKi8KCWZ1bmN0aW9uIFNldEluaXRpYWxWYWx1ZXMoKQoJewoJCSR0aGlzLT5tUHJvcGVydHlOYW1lcyA9IGFycmF5KCk7CgkJJHRoaXMtPm1Qcm9wZXJ0eVR5cGVzID0gYXJyYXkoKTsKCQkkdGhpcy0+bVByb3BlcnR5VmFsdWVzID0gYXJyYXkoKTsKCX0KCglmdW5jdGlvbiBIYXNQcm9wZXJ0eSgkbmFtZSkKCXsKCQkjZGVidWdfYnVmZmVyKCR0aGlzLT5tUHJvcGVydHlOYW1lcyk7CgkJaWYgKCFpc3NldCgkdGhpcy0+bVByb3BlcnR5TmFtZXMpKQoJCQkkdGhpcy0+bVByb3BlcnR5TmFtZXMgPSBhcnJheSgpOwoJCXJldHVybiBpbl9hcnJheSgkbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKTsKCX0KCglmdW5jdGlvbiBBZGQoJHR5cGUsICRuYW1lLCAkZGVmYXVsdHZhbHVlPScnKQoJewoJCS8vSGFuZGxlIG5hbWVzIHNlcGFyYXRlbHkKCQlpZiAoIWluX2FycmF5KCRuYW1lLCAkdGhpcy0+bVByb3BlcnR5TmFtZXMpKQoJCXsKCQkJJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzW10gPSAkbmFtZTsKCQl9CgkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+bVByb3BlcnR5VmFsdWVzKSkKCQl7CgkJCSR0aGlzLT5tUHJvcGVydHlUeXBlc1skbmFtZV0gPSAkdHlwZTsKCQkJJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlc1skbmFtZV0gPSAkZGVmYXVsdHZhbHVlOwoJCX0KCX0KCglmdW5jdGlvbiBHZXRWYWx1ZSgkbmFtZSkKCXsKCQlpZiAoaW5fYXJyYXkoJG5hbWUsICR0aGlzLT5tUHJvcGVydHlOYW1lcykpCgkJewoJCQlpZiAoY291bnQoJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcykgPiAwKQoJCQl7CgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcykpCgkJCQl7CgkJCQkJcmV0dXJuICR0aGlzLT5tUHJvcGVydHlWYWx1ZXNbJG5hbWVdOwoJCQkJfQoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIFNldFZhbHVlKCRuYW1lLCAkdmFsdWUpCgl7CgkJaWYgKGNvdW50KCR0aGlzLT5tUHJvcGVydHlWYWx1ZXMpID4gMCkKCQl7CgkJCWlmIChpbl9hcnJheSgkbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKSkKCQkJewoJCQkJJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlc1skbmFtZV0gPSAkdmFsdWU7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gTG9hZCgkY29udGVudF9pZCkKCXsKCQlkZWJ1Z19idWZmZXIoJ2xvYWQgcHJvcGVydGllcyBjYWxsZWQnKTsKCQlpZiAoY291bnQoJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKSA+IDApCgkJewoJCQlnbG9iYWwgJGdDbXMsICRjb25maWcsICRzcWxfcXVlcmllcywgJGRlYnVnX2Vycm9yczsKCQkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkJJHF1ZXJ5CQk9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJJGRicmVzdWx0CT0gJiRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRjb250ZW50X2lkKSk7CgoJCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQkJewoJCQkJJHByb3BfbmFtZSA9ICRkYnJlc3VsdC0+ZmllbGRzWydwcm9wX25hbWUnXTsKCQkJCWlmICghaW5fYXJyYXkoJHByb3BfbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKSkKCQkJCXsKCQkJCQkkdGhpcy0+bVByb3BlcnR5TmFtZXNbXSA9ICRwcm9wX25hbWU7CgkJCQl9CgkJCQkkdGhpcy0+bVByb3BlcnR5VHlwZXNbJHByb3BfbmFtZV0gPSAkZGJyZXN1bHQtPmZpZWxkc1sndHlwZSddOwoJCQkJJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlc1skcHJvcF9uYW1lXSA9ICRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50J107CgkJCQkkZGJyZXN1bHQtPk1vdmVOZXh0KCk7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gU2F2ZSgkY29udGVudF9pZCkKCXsKCQlpZiAoY291bnQoJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcykgPiAwKQoJCXsKCQkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CgkJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJICAgICRkZWxxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wcyB3aGVyZSBjb250ZW50X2lkPT8gYW5kIHByb3BfbmFtZT0/IjsKCQkJJGluc3F1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIChjb250ZW50X2lkLCB0eXBlLCBwcm9wX25hbWUsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIGNvbnRlbnQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykiOwoJCQkKCQkJJGNvbmNhdCA9ICcnOwoKCQkJZm9yZWFjaCAoJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcyBhcyAka2V5PT4kdmFsdWUpCgkJCXsKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkZGVscXVlcnksIGFycmF5KCRjb250ZW50X2lkLCRrZXkpKTsJCQkKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkaW5zcXVlcnksIGFycmF5KAoJCQkJCSRjb250ZW50X2lkLAoJCQkJCSR0aGlzLT5tUHJvcGVydHlUeXBlc1ska2V5XSwKCQkJCQkka2V5LAoJCQkJCScnLAoJCQkJCScnLAoJCQkJCScnLAoJCQkJCSR0aGlzLT5tUHJvcGVydHlWYWx1ZXNbJGtleV0sCgkJCQkJKSk7CgkJCQkJCgkJCQkkY29uY2F0IC49ICR0aGlzLT5tUHJvcGVydHlWYWx1ZXNbJGtleV07CgoJCQkJIyBkZWJ1ZyBtb2RlCgkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQkJewoJCQkJCSRzcWxfcXVlcmllcyAuPSAiPHA+JGRlbHF1ZXJ5PC9wPlxuPHA+JGluc3F1ZXJ5PC9wPlxuIjsKCQkJCX0KCgkJCQlpZiAoISAkZGJyZXN1bHQpCgkJCQl7CgkJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCQl7CgkJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5FcnJvciB1cGRhdGluZyBjb250ZW50IHByb3BlcnR5PC9wPlxuIjsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCWlmICgkY29uY2F0ICE9ICcnKQoJCQl7CgkJCQlkb19ibG9ja19jcm9zc19yZWZlcmVuY2UoJGNvbnRlbnRfaWQsICdjb250ZW50JywgJGNvbmNhdCk7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gRGVsZXRlKCRjb250ZW50X2lkKQoJewoJCWlmIChjb3VudCgkdGhpcy0+bVByb3BlcnR5VmFsdWVzKSA+IDApCgkJewoJCQlnbG9iYWwgJGdDbXMsICRjb25maWcsICRzcWxfcXVlcmllcywgJGRlYnVnX2Vycm9yczsKCQkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbnRlbnRfaWQpKTsKCQl9Cgl9Cn0KCi8qKgogKiBDbGFzcyBmb3Igc3RhdGljIG1ldGhvZHMgcmVsYXRlZCB0byBjb250ZW50CiAqCiAqIEBzaW5jZQkJMC44CiAqIEBwYWNrYWdlCQlDTVMKICovCmNsYXNzIEJsb2NrQ29udGVudE1hbmFnZXIKewoJLyoqCgkgKiBEZXRlcm1pbmUgcHJvcGVyIHR5cGUgb2Ygb2JqZWN0LCBsb2FkIGl0IGFuZCByZXR1cm4gaXQKCSAqLwoJZnVuY3Rpb24gJkxvYWRDb250ZW50RnJvbUlkKCRpZCwkbG9hZHByb3BzPXRydWUpCgl7CgkJJHJlc3VsdCA9IEZBTFNFOwoKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBjb250ZW50X2lkID0gPyI7CgkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRpZCkpOwoJCWlmICgkcm93KQoJCXsKCQkJI01ha2Ugc3VyZSB0aGUgdHlwZSBleGlzdHMuICBJZiBzbywgaW5zdGFudGlhdGUgYW5kIGxvYWQKCQkJaWYgKGluX2FycmF5KCRyb3dbJ3R5cGUnXSwgYXJyYXlfa2V5cyhAQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpKSkpCgkJCXsKCQkJCSRjbGFzc3R5cGUgPSBzdHJ0b2xvd2VyKCRyb3dbJ3R5cGUnXSk7CgkJCQkkY29udGVudG9iaiA9IG5ldyAkY2xhc3N0eXBlOyAKCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJHJvdyxmYWxzZSk7CgoJCQkJcmV0dXJuICRjb250ZW50b2JqOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcmV0dXJuICRyZXN1bHQ7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoKCWZ1bmN0aW9uICZMb2FkQ29udGVudEZyb21BbGlhcygkYWxpYXMsICRvbmx5X2FjdGl2ZSA9IGZhbHNlKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgoJCSRyb3cgPSAnJzsKCgkJaWYgKGlzX251bWVyaWMoJGFsaWFzKSAmJiBzdHJwb3MoJGFsaWFzLCcuJykgPT09IEZBTFNFICYmIHN0cnBvcygkYWxpYXMsJywnKSA9PT0gRkFMU0UpIC8vRml4IGZvciBwb3N0Z3JlcwoJCXsKCQkJLy8kcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4iY29udGVudCBXSEVSRSBjb250ZW50X2lkID0gPyBPUiBjb250ZW50X2FsaWFzID0gPyI7CgkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJaWYgKCRvbmx5X2FjdGl2ZSA9PSB0cnVlKQoJCQl7CgkJCQkkcXVlcnkgLj0gIiBBTkQgYWN0aXZlID0gMSI7CgkJCX0KCQkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRhbGlhcywkYWxpYXMpKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9hbGlhcyA9ID8iOwoJCQlpZiAoJG9ubHlfYWN0aXZlID09IHRydWUpCgkJCXsKCQkJCSRxdWVyeSAuPSAiIEFORCBhY3RpdmUgPSAxIjsKCQkJfQoJCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJGFsaWFzKSk7CgkJfQoKCQlpZiAoJHJvdykKCQl7CgkJCSNNYWtlIHN1cmUgdGhlIHR5cGUgZXhpc3RzLiAgSWYgc28sIGluc3RhbnRpYXRlIGFuZCBsb2FkCgkJCWlmIChpbl9hcnJheSgkcm93Wyd0eXBlJ10sIGFycmF5X2tleXMoQEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKSkpKQoJCQl7CgkJCQkkY2xhc3N0eXBlID0gc3RydG9sb3dlcigkcm93Wyd0eXBlJ10pOwoJCQkJJGNvbnRlbnRvYmogPSBuZXcgJGNsYXNzdHlwZTsKCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJHJvdyx0cnVlKTsKCQkJCXJldHVybiAkY29udGVudG9iajsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiBGQUxTRTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gRkFMU0U7CgkJfQoJfQoKICAvKioKCSAqIExvYWQgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCBmcm9tIGEgbGlzdCBvZiBJRAoJICogUHJpdmF0ZSBtZXRob2QuCgkgKiBAcGFyYW0gJGlkcwlhcnJheSBvZiBlbGVtZW50IGlkcwoJICogQHBhcmFtICRsb2FkUHJvcGVydGllcwl3aGV0aGVyIHRvIGxvYWQgb3Igbm90IHRoZSBwcm9wZXJ0aWVzCgkgKgoJICogQHJldHVybnMgYXJyYXkgb2YgY29udGVudCBvYmplY3RzIChlbXB0eSBpZiBub3QgZm91bmQpCgkgKi8KCS8qcHJpdmF0ZSovIGZ1bmN0aW9uICZMb2FkTXVsdGlwbGVGcm9tSWQoJGlkcywgJGxvYWRQcm9wZXJ0aWVzID0gZmFsc2UpCgl7CgkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CiAgICAkY3B0ID0gY291bnQoJGlkcyk7CiAgICAkY29udGVudHM9YXJyYXkoKTsKCQlpZiAoJGNwdD09MCkgcmV0dXJuICRjb250ZW50czsKICAgICRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKICAgICRpZF9saXN0ID0gJygnOwogICAgZm9yICgkaT0wOyRpPCRjcHQ7JGkrKykgewogICAgICAkaWRfbGlzdCAuPSAkaWRzWyRpXTsKICAgICAgaWYgKCRpPCRjcHQtMSkgJGlkX2xpc3QgLj0gJywnOwogICAgfQogICAgJGlkX2xpc3QgLj0gJyknOwogICAgaWYgKCRpZF9saXN0PT0nKCknKSByZXR1cm4gJGNvbnRlbnRzOwoKCQkkcmVzdWx0ID0gZmFsc2U7CgkJJHF1ZXJ5CQk9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgSU4gJGlkX2xpc3QiOwoJCSRyb3dzCQk9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCgkJaWYgKCRyb3dzKQoJCXsKCQkJd2hpbGUgKGlzc2V0KCRyb3dzKSAmJiAkcm93ID0gJiRyb3dzLT5GZXRjaFJvdygpKQoJCQl7CgkJCSAgaWYgKGluX2FycmF5KCRyb3dbJ3R5cGUnXSwgYXJyYXlfa2V5cyhAQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpKSkpIHsKCQkJCQkkY2xhc3N0eXBlID0gc3RydG9sb3dlcigkcm93Wyd0eXBlJ10pOwoJCQkJCSRjb250ZW50b2JqID0gbmV3ICRjbGFzc3R5cGU7IAoJCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJHJvdyxmYWxzZSk7CgkJCQkJJGNvbnRlbnRzW109JGNvbnRlbnRvYmo7CgkJCQkJJHJlc3VsdCA9IHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJCWlmICghJHJlc3VsdCkKCQkJewoJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCXsKCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgcmV0cmlldmUgY29udGVudCBmcm9tIGRiPC9wPlxuIjsKCQkJCX0KCQkJfQoKCQkJaWYgKCRyZXN1bHQgJiYgJGxvYWRQcm9wZXJ0aWVzKQoJCQl7CgkJCQlmb3JlYWNoICgkY29udGVudHMgYXMgJGNvbnRlbnQpIHsKCQkJCSAgaWYgKCRjb250ZW50LT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKICAJCQkJewogIAkJCQkJZGVidWdfYnVmZmVyKCJsb2FkIGZyb20gaWQgaXMgbG9hZGluZyBwcm9wZXJ0aWVzIik7CiAgCQkJCQkkY29udGVudC0+bVByb3BlcnRpZXMtPkxvYWQoJGNvbnRlbnQtPm1JZCk7CiAgCQkJCQkkY29udGVudC0+bVByb3BlcnRpZXNMb2FkZWQgPSB0cnVlOwogIAkJCQl9CiAgCiAgCQkJCWlmIChOVUxMID09ICRjb250ZW50LT5tUHJvcGVydGllcykKICAJCQkJewogIAkJCQkJJHJlc3VsdCA9IGZhbHNlOwogIAogIAkJCQkJIyBkZWJ1ZyBtb2RlCiAgCQkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQogIAkJCQkJewogIAkJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQogIAkJCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkNvdWxkIG5vdCBsb2FkIHByb3BlcnRpZXMgZm9yIGNvbnRlbnQ8L3A+XG4iOwogIAkJCQkJfQogIAkJCQl9CgkJCQl9CgkJCX0KICAgIAogICAgZm9yZWFjaCAoJGNvbnRlbnRzIGFzICRjb250ZW50KSB7CiAgICAgCQkkY29udGVudC0+TG9hZCgpOwogICAgfQoKCQlyZXR1cm4gJGNvbnRlbnRzOwoJfQoJCgkvKioKCSAqIExvYWQgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCBmcm9tIGEgbGlzdCBvZiBhbGlhc2VzCgkgKiBQcml2YXRlIG1ldGhvZC4KCSAqIEBwYXJhbSAkaWRzCWFycmF5IG9mIGVsZW1lbnQgaWRzCgkgKiBQcml2YXRlIG1ldGhvZAoJICoKCSAqIEBwYXJhbSAkYWxpcwkJCQl0aGUgYWxpYXMgb2YgdGhlIGVsZW1lbnQKCSAqIEBwYXJhbSAkbG9hZFByb3BlcnRpZXMJd2hldGhlciB0byBsb2FkIG9yIG5vdCB0aGUgcHJvcGVydGllcwoJICoKCSAqIEByZXR1cm5zIGFycmF5IG9mIGNvbnRlbnQgb2JqZWN0cyAoZW1wdHkgaWYgbm90IGZvdW5kKQoJICovCgkvKnByaXZhdGUqL2Z1bmN0aW9uICZMb2FkTXVsdGlwbGVGcm9tQWxpYXMoJGlkcywgJGxvYWRQcm9wZXJ0aWVzID0gZmFsc2UpCgl7CgkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CiAgICAkY3B0ID0gY291bnQoJGlkcyk7CiAgICAkY29udGVudHM9YXJyYXkoKTsKCQlpZiAoJGNwdD09MCkgcmV0dXJuICRjb250ZW50czsKICAgICRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKICAgICRpZF9saXN0ID0gJygnOwogICAgZm9yICgkaT0wOyRpPCRjcHQ7JGkrKykgewogICAgICAkaWRfbGlzdCAuPSAiJyIuJGlkc1skaV0uIiciOwogICAgICBpZiAoJGk8JGNwdC0xKSAkaWRfbGlzdCAuPSAnLCc7CiAgICB9CiAgICAkaWRfbGlzdCAuPSAnKSc7CiAgICBpZiAoJGlkX2xpc3Q9PScoKScpIHJldHVybiAkY29udGVudHM7CgkJJHJlc3VsdCA9IGZhbHNlOwoJCSRxdWVyeQkJPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBjb250ZW50X2FsaWFzIElOICRpZF9saXN0IjsKCQkkcm93cwkJPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgoJCQl3aGlsZSAoaXNzZXQoJHJvd3MpICYmICRyb3c9JiRyb3dzLT5GZXRjaFJvdygpKQoJCQl7CgkJCQkjTWFrZSBzdXJlIHRoZSB0eXBlIGV4aXN0cy4gIElmIHNvLCBpbnN0YW50aWF0ZSBhbmQgbG9hZAoJCQkgIGlmIChpbl9hcnJheSgkcm93Wyd0eXBlJ10sIGFycmF5X2tleXMoQEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKSkpKSB7CiAgCQkJCSRjbGFzc3R5cGUgPSBzdHJ0b2xvd2VyKCRyb3dbJ3R5cGUnXSk7CiAgCQkJCSRjb250ZW50b2JqID0gbmV3ICRjbGFzc3R5cGU7IAogIAkJCQkkY29udGVudG9iai0+TG9hZEZyb21EYXRhKCRyb3csZmFsc2UpOwogICAgICAgICAgJGNvbnRlbnRzW109JGNvbnRlbnRvYmo7CiAgCQkJCSRyZXN1bHQgPSB0cnVlOwogICAgICAgIH0KCQkJfQoJCQlpZiAoISRyZXN1bHQpCgkJCXsKCQkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCgkJCQl7CgkJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+Q291bGQgbm90IHJldHJpZXZlIGNvbnRlbnQgZnJvbSBkYjwvcD5cbiI7CgkJCQl9CgkJCX0KCgkJCWlmICgkcmVzdWx0ICYmICRsb2FkUHJvcGVydGllcykKCQkJewoJCQkJZm9yZWFjaCAoJGNvbnRlbnRzIGFzICRjb250ZW50KSB7CiAgICAgICAgICBpZiAoJGNvbnRlbnQtPm1Qcm9wZXJ0aWVzTG9hZGVkID09IGZhbHNlKQogIAkJCQl7CiAgCQkJCQlkZWJ1Z19idWZmZXIoImxvYWQgZnJvbSBpZCBpcyBsb2FkaW5nIHByb3BlcnRpZXMiKTsKICAJCQkJCSRjb250ZW50LT5tUHJvcGVydGllcy0+TG9hZCgkY29udGVudC0+bUlkKTsKICAJCQkJCSRjb250ZW50LT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CiAgCQkJCX0KICAKICAJCQkJaWYgKE5VTEwgPT0gJGNvbnRlbnQtPm1Qcm9wZXJ0aWVzKQogIAkJCQl7CiAgCQkJCQkkcmVzdWx0ID0gZmFsc2U7CiAgCiAgCQkJCQkjIGRlYnVnIG1vZGUKICAJCQkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCiAgCQkJCQl7CiAgCQkJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCiAgCQkJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+Q291bGQgbm90IGxvYWQgcHJvcGVydGllcyBmb3IgY29udGVudDwvcD5cbiI7CiAgCQkJCQl9CiAgCQkJCX0KCQkJCX0KCQkJfQogICAgCiAgICBmb3JlYWNoICgkY29udGVudHMgYXMgJGNvbnRlbnQpIHsKICAgICAJCSRjb250ZW50LT5Mb2FkKCk7CiAgICB9CgoJCXJldHVybiAkY29udGVudHM7Cgl9CgoKCS8qKgoJICogRGlzcGxheSBjb250ZW50CgkgKi8KCWZ1bmN0aW9uIERpc3BsYXlDb250ZW50KCRjb250ZW50KQoJewoJCS8vVGhpcyBzaG91bGQgYmUgc3RyYWlnaHQgZm9yd2FyZCwgc2luY2UgdGhlIGNvbnRlbnQgd2lsbCBwcmV0dHkgbXVjaCBkZXRlcm1pbmUgaG93IGl0IGlzIGRpc3BsYXllZAoJCSRjb250ZW50LT5TaG93KCk7Cgl9CgoJLyoqCgkgKiBEZXRlcm1pbmUgaWYgY29udGVudCBzaG91bGQgYmUgbG9hZGVkIGZyb20gY2FjaGUKCSAqLwoJZnVuY3Rpb24gSXNDYWNoZWQoJGlkKQoJewoJfQoKCWZ1bmN0aW9uICYgR2V0RGVmYXVsdENvbnRlbnQoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSYgJGdDbXMtPkdldERiKCk7CgoJCSRyZXN1bHQgPSAtMTsKCgkJJHF1ZXJ5ID0gIlNFTEVDVCBjb250ZW50X2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgZGVmYXVsdF9jb250ZW50ID0gMSI7CgkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnkpOwoJCWlmICgkcm93KQoJCXsKCQkJJHJlc3VsdCA9ICRyb3dbJ2NvbnRlbnRfaWQnXTsKCQl9CgkJZWxzZQoJCXsKCQkJI0p1c3QgZ2V0IHNvbWV0aGluZy4uLgoJCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCI7CgkJCSRyb3cgPSAmJGRiLT5HZXRSb3coJHF1ZXJ5KTsKCQkJaWYgKCRyb3cpCgkJCXsKCQkJCSRyZXN1bHQgPSAkcm93Wydjb250ZW50X2lkJ107CgkJCX0KCQl9CgoJCXJldHVybiAkcmVzdWx0OwoKCQkvKgoJCSNDaGFuY2VzIGFyZSB0aGF0IHRoaXMgaXMgY2FjaGVkIGFscmVhZHkKCQkkYWxsY29udGVudCA9IEBDb250ZW50TWFuYWdlcjo6R2V0QWxsQ29udGVudCgpOwoKCQlmb3JlYWNoICgkYWxsY29udGVudCBhcyAkb25laXRlbSkKCQl7CgkJCWlmICgkb25laXRlbS0+RGVmYXVsdENvbnRlbnQoKSA9PSB0cnVlKQoJCQl7CgkJCQlyZXR1cm4gJG9uZWl0ZW0tPklkKCk7CgkJCX0KCQl9CgoJCSNKdXN0IGdldCBzb21ldGhpbmcuLi4uCgkJcmV0dXJuICRhbGxjb250ZW50WzBdLT5JZCgpOwoJCSovCgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgaGFzaCBvZiB2YWxpZCBjb250ZW50IHR5cGVzIChjbGFzc2VzIHRoYXQgZXh0ZW5kIENvbnRlbnRCYXNlKQoJICogVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3b3VsZCBiZSBzYXZlZCBpbnRvIHRoZSBkYWJhc2UuICBUaGUKCSAqIHZhbHVlIHdvdWxkIGJlIHRoZSB0ZXh0IHJldHVybmVkIGJ5IHRoZSB0eXBlJ3MgRnJpZW5kbHlOYW1lKCkgbWV0aG9kLgoJICovCglmdW5jdGlvbiAmIExpc3RDb250ZW50VHlwZXMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCgkJaWYgKGlzc2V0KCRnQ21zLT52YXJpYWJsZXNbJ2Jsb2NrY29udGVudHR5cGVzJ10pKQoJCXsKCQkJJHZhcmlhYmxlcyA9JiAkZ0Ntcy0+dmFyaWFibGVzOwoJCQlyZXR1cm4gJHZhcmlhYmxlc1snYmxvY2tjb250ZW50dHlwZXMnXTsKCQl9CgoJCSRyZXN1bHQgPSBhcnJheSgpOwoKCQlmb3JlYWNoIChnZXRfZGVjbGFyZWRfY2xhc3NlcygpIGFzICRvbmVjbGFzcykKCQl7CgkJCWlmIChzdHJ0b2xvd2VyKGdldF9wYXJlbnRfY2xhc3MoJG9uZWNsYXNzKSkgPT0gJ2Jsb2NrY29udGVudGJhc2UnIHx8IHN0cnRvbG93ZXIoZ2V0X3BhcmVudF9jbGFzcygkb25lY2xhc3MpKSA9PSAnY21zbW9kdWxlYmxvY2tjb250ZW50dHlwZScpCgkJCXsKCQkJCWlmIChzdHJ0b2xvd2VyKCRvbmVjbGFzcykgIT0gJ2Ntc21vZHVsZWJsb2NrY29udGVudHR5cGUnKQoJCQkJewoJCQkJCSNhcnJheV9wdXNoKCRyZXN1bHQsIHN0cnRvbG93ZXIoJG9uZWNsYXNzKSk7CgkJCQkJJHRtcG9iaiA9IG5ldyAkb25lY2xhc3M7CgkJCQkJJHJlc3VsdFtzdHJ0b2xvd2VyKCRvbmVjbGFzcyldID0gJHRtcG9iai0+RnJpZW5kbHlOYW1lKCk7CgkJCQl9CgkJCX0KCQl9CgoJCSR2YXJpYWJsZXMgPSYgJGdDbXMtPnZhcmlhYmxlczsKCQkkdmFyaWFibGVzWydibG9ja2NvbnRlbnR0eXBlcyddID0mICRyZXN1bHQ7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCS8qKgoJICogVXBkYXRlcyB0aGUgaGllcmFyY2h5IHBvc2l0aW9uIG9mIG9uZSBpdGVtCgkgKi8KCWZ1bmN0aW9uIFNldEhpZXJhcmNoeVBvc2l0aW9uKCRjb250ZW50aWQpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCgkJJGN1cnJlbnRfaGllcmFyY2h5X3Bvc2l0aW9uID0gJyc7CgkJJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uID0gJyc7CgkJJGN1cnJlbnRfaGllcmFyY2h5X3BhdGggPSAnJzsKCQkkY3VycmVudF9wYXJlbnRfaWQgPSAkY29udGVudGlkOwoJCSRjb3VudCA9IDA7CgoJCXdoaWxlICgkY3VycmVudF9wYXJlbnRfaWQgPiAtMSkKCQl7CgkJCSRxdWVyeSA9ICJTRUxFQ1QgaXRlbV9vcmRlciwgcGFyZW50X2lkLCBjb250ZW50X2FsaWFzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJGN1cnJlbnRfcGFyZW50X2lkKSk7CgkJCWlmICgkcm93KQoJCQl7CgkJCQkkY3VycmVudF9oaWVyYXJjaHlfcG9zaXRpb24gPSBzdHJfcGFkKCRyb3dbJ2l0ZW1fb3JkZXInXSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpIC4gIi4iIC4gJGN1cnJlbnRfaGllcmFyY2h5X3Bvc2l0aW9uOwoJCQkJJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uID0gJGN1cnJlbnRfcGFyZW50X2lkIC4gJy4nIC4gJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uOwoJCQkJJGN1cnJlbnRfaGllcmFyY2h5X3BhdGggPSAkcm93Wydjb250ZW50X2FsaWFzJ10gLiAnLycgLiAkY3VycmVudF9oaWVyYXJjaHlfcGF0aDsKCQkJCSRjdXJyZW50X3BhcmVudF9pZCA9ICRyb3dbJ3BhcmVudF9pZCddOwoJCQkJJGNvdW50Kys7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkY3VycmVudF9wYXJlbnRfaWQgPSAwOwoJCQl9CgkJfQoKCQlpZiAoc3RybGVuKCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbikgPiAwKQoJCXsKCQkJJGN1cnJlbnRfaGllcmFyY2h5X3Bvc2l0aW9uID0gc3Vic3RyKCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbiwgMCwgc3RybGVuKCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbikgLSAxKTsKCQl9CgkJaWYgKHN0cmxlbigkY3VycmVudF9pZF9oaWVyYXJjaHlfcG9zaXRpb24pID4gMCkKCQl7CgkJCSRjdXJyZW50X2lkX2hpZXJhcmNoeV9wb3NpdGlvbiA9IHN1YnN0cigkY3VycmVudF9pZF9oaWVyYXJjaHlfcG9zaXRpb24sIDAsIHN0cmxlbigkY3VycmVudF9pZF9oaWVyYXJjaHlfcG9zaXRpb24pIC0gMSk7CgkJfQoJCWlmIChzdHJsZW4oJGN1cnJlbnRfaGllcmFyY2h5X3BhdGgpID4gMCkKCQl7CgkJCSRjdXJyZW50X2hpZXJhcmNoeV9wYXRoID0gc3Vic3RyKCRjdXJyZW50X2hpZXJhcmNoeV9wYXRoLCAwLCBzdHJsZW4oJGN1cnJlbnRfaGllcmFyY2h5X3BhdGgpIC0gMSk7CgkJfQoKCQkkcXVlcnkgPSAiU0VMRUNUIHByb3BfbmFtZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkkcHJvcF9uYW1lX2FycmF5ID0gJGRiLT5HZXRDb2woJHF1ZXJ5LCBhcnJheSgkY29udGVudGlkKSk7CgoJCWRlYnVnX2J1ZmZlcihhcnJheSgkY3VycmVudF9oaWVyYXJjaHlfcG9zaXRpb24sICRjdXJyZW50X2lkX2hpZXJhcmNoeV9wb3NpdGlvbiwgaW1wbG9kZSgnLCcsICRwcm9wX25hbWVfYXJyYXkpLCAkY29udGVudGlkKSk7CgoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGhpZXJhcmNoeSA9ID8sIGlkX2hpZXJhcmNoeSA9ID8sIGhpZXJhcmNoeV9wYXRoID0gPywgcHJvcF9uYW1lcyA9ID8gV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbiwgJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uLCAkY3VycmVudF9oaWVyYXJjaHlfcGF0aCwgaW1wbG9kZSgnLCcsICRwcm9wX25hbWVfYXJyYXkpLCAkY29udGVudGlkKSk7Cgl9CgoJLyoqCgkgKiBVcGRhdGVzIHRoZSBoaWVyYXJjaHkgcG9zaXRpb24gb2YgYWxsIGl0ZW1zCgkgKi8KCWZ1bmN0aW9uIFNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9ICRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCI7CgkJJGRicmVzdWx0ID0gJiRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQl7CgkJCUJsb2NrQ29udGVudE1hbmFnZXI6OlNldEhpZXJhcmNoeVBvc2l0aW9uKCRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50X2lkJ10pOwoJCQkkZGJyZXN1bHQtPk1vdmVOZXh0KCk7CgkJfQoJfQoJCglmdW5jdGlvbiAmR2V0QWxsQ29udGVudEFzSGllcmFyY2h5KCRsb2FkcHJvcHMsICRvbmx5ZXhwYW5kZWQ9bnVsbCkKCXsKCQlkZWJ1Z19idWZmZXIoJycsICdzdGFydGluZyB0cmVlJyk7CgkJCgkJcmVxdWlyZV9vbmNlKGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpLicvLi4vVHJlZS9CbG9ja1RyZWUucGhwJyk7CgkJCgkJJG5vZGVzID0gYXJyYXkoKTsKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoJCQoJCSRjYWNoZWZpbGVuYW1lID0gVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gJy9ibG9ja2NvbnRlbnRjYWNoZS5waHAnOwoJCSR1c2VjYWNoZSA9IHRydWU7CgkJaWYgKGlzc2V0KCRvbmx5ZXhwYW5kZWQpIHx8IGlzc2V0KCRDTVNfQURNSU5fUEFHRSkpCgkJewoJCQkjJHVzZWNhY2hlID0gZmFsc2U7CgkJfQoJCQoJCSRsb2FkZWRjYWNoZSA9IGZhbHNlOwoKCQlpZiAoJHVzZWNhY2hlKQoJCXsKCQkJaWYgKGlzc2V0KCRnQ21zLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10pICYmIGZpbGVfZXhpc3RzKCRjYWNoZWZpbGVuYW1lKSkKCQkJewoJCQkJJHBhZ2VpbmZvID0mICRnQ21zLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ107CgkJCQkKCQkJCWlmIChpc3NldCgkcGFnZWluZm8tPmNvbnRlbnRfbGFzdF9tb2RpZmllZF9kYXRlKSAmJiAkcGFnZWluZm8tPmNvbnRlbnRfbGFzdF9tb2RpZmllZF9kYXRlIDwgZmlsZW10aW1lKCRjYWNoZWZpbGVuYW1lKSkKCQkJCXsKCQkJCQlkZWJ1Z19idWZmZXIoJ2NvbnRlbnQgY2FjaGUgZmlsZSBleGlzdHMuLi4gZmlsZTogJyAuIGZpbGVtdGltZSgkY2FjaGVmaWxlbmFtZSkgLiAnIGNvbnRlbnQ6JyAuIAkkcGFnZWluZm8tPmNvbnRlbnRfbGFzdF9tb2RpZmllZF9kYXRlKTsKCQkJCQlkZWJ1Z19idWZmZXIoJ2ZpbGUgbmVlZHMgbG9hZGluZycpOwoKCQkJCQkkaGFuZGxlID0gZm9wZW4oJGNhY2hlZmlsZW5hbWUsICJyIik7CgkJCQkJJGRhdGEgPSBmcmVhZCgkaGFuZGxlLCBmaWxlc2l6ZSgkY2FjaGVmaWxlbmFtZSkpOwoJCQkJCWZjbG9zZSgkaGFuZGxlKTsKCgkJCQkJJHRyZWUgPSB1bnNlcmlhbGl6ZShzdWJzdHIoJGRhdGEsIDE2KSk7CgoJCQkJCSMkdmFyaWFibGVzID0mICRnQ21zLT52YXJpYWJsZXM7CgkJCQkJIyR2YXJpYWJsZXNbJ2NvbnRlbnRjYWNoZSddID0mICR0cmVlOwoJCQkJCWlmIChzdHJ0b2xvd2VyKGdldF9jbGFzcygkdHJlZSkpID09ICd0cmVlJykKCQkJCQkJJGxvYWRlZGNhY2hlID0gdHJ1ZTsKCQkJCQllbHNlCgkJCQkJCSRsb2FkZWRjYWNoZSA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoKCQlpZiAoISRsb2FkZWRjYWNoZSkKCQl7CgkJCSRxdWVyeSA9ICJTRUxFQ1QgaWRfaGllcmFyY2h5IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgT1JERVIgQlkgaGllcmFyY2h5IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCQoJCQlpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCgkJCXsKCQkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQkJewoJCQkJCSRub2Rlc1tdID0gJHJvd1snaWRfaGllcmFyY2h5J107CgkJCQl9CgkJCX0KCgkJCSR0cmVlID0gJm5ldyBCbG9ja1RyZWUoKTsKCQkJZGVidWdfYnVmZmVyKCcnLCAnU3RhcnQgTG9hZGluZyBDaGlsZHJlbiBpbnRvIFRyZWUnKTsKCQkJJHRyZWUgPSAmQmxvY2tUcmVlOjpjcmVhdGVGcm9tTGlzdCgkbm9kZXMsICcuJyk7CgkJCWRlYnVnX2J1ZmZlcignJywgJ0VuZCBMb2FkaW5nIENoaWxkcmVuIGludG8gVHJlZScpOwoJCX0KCgkJaWYgKCEkbG9hZGVkY2FjaGUgJiYgJHVzZWNhY2hlKQoJCXsKCQkJZGVidWdfYnVmZmVyKCJTZXJpYWxpemluZy4uLiIpOwoJCQkkaGFuZGxlID0gZm9wZW4oJGNhY2hlZmlsZW5hbWUsICJ3Iik7CgkJCWZ3cml0ZSgkaGFuZGxlLCAnPD9waHAgcmV0dXJuOyA/Picuc2VyaWFsaXplKCR0cmVlKSk7CgkJCWZjbG9zZSgkaGFuZGxlKTsKCQl9CgkJCgkJQmxvY2tDb250ZW50TWFuYWdlcjo6TG9hZENoaWxkcmVuSW50b1RyZWUoLTEsICR0cmVlKTsKCQkKCQlkZWJ1Z19idWZmZXIoJycsICdlbmRpbmcgdHJlZScpOwoJCQoJCXJldHVybiAkdHJlZTsKCX0KCQoJZnVuY3Rpb24gTG9hZENoaWxkcmVuSW50b1RyZWUoJGlkLCAmJHRyZWUsICRsb2FkcHJvcHMgPSBmYWxzZSkKCXsJCgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgcGFyZW50X2lkID0gIi4kaWQuIiBPUkRFUiBCWSBoaWVyYXJjaHkiOwoJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQkKCQlpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApCgkJewoJCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJewoJCQkJI01ha2Ugc3VyZSB0aGUgdHlwZSBleGlzdHMuICBJZiBzbywgaW5zdGFudGlhdGUgYW5kIGxvYWQKCQkJCWlmIChpbl9hcnJheSgkcm93Wyd0eXBlJ10sIGFycmF5X2tleXMoQEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKSkpKQoJCQkJewoJCQkJCSRjb250ZW50b2JqID0gJm5ldyAkcm93Wyd0eXBlJ107CgkJCQkJJGNvbnRlbnRvYmotPkxvYWRGcm9tRGF0YSgkcm93LCAkbG9hZHByb3BzKTsKCQkJCQkkY29udGVudGNhY2hlID0mICR0cmVlLT5jb250ZW50OwoJCQkJCSRpZCA9ICRyb3dbJ2NvbnRlbnRfaWQnXTsKCQkJCQkkY29udGVudGNhY2hlWyRpZF0gPSYgJGNvbnRlbnRvYmo7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiAgU2V0cyB0aGUgZGVmYXVsdCBjb250ZW50IGFzIGlkCgkgKi8gICAKCWZ1bmN0aW9uIFNldERlZmF1bHRDb250ZW50KCRpZCkgewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCBjb250ZW50X2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgZGVmYXVsdF9jb250ZW50PTEiOwoJCSRvbGRfaWQgPSAkZGItPkdldE9uZSgkcXVlcnkpOwoJCWlmIChpc3NldCgkb2xkX2lkKSkgewoJCQkkb25lID0gbmV3IENvbnRlbnQoKTsKCQkJJG9uZS0+TG9hZEZyb21JZCgkb2xkX2lkKTsKCQkJJG9uZS0+U2V0RGVmYXVsdENvbnRlbnQoZmFsc2UpOwoJCQlkZWJ1Z19idWZmZXIoJ3NhdmUgZnJvbSAnIC4gX19MSU5FX18pOwoJCQkkb25lLT5TYXZlKCk7CgkJfQoJCSRvbmUgPSBuZXcgQ29udGVudCgpOwoJCSRvbmUtPkxvYWRGcm9tSWQoJGlkKTsKCQkkb25lLT5TZXREZWZhdWx0Q29udGVudCh0cnVlKTsKCQlkZWJ1Z19idWZmZXIoJ3NhdmUgZnJvbSAnIC4gX19MSU5FX18pOwoJCSRvbmUtPlNhdmUoKTsKCX0KCglmdW5jdGlvbiAmR2V0QWxsQ29udGVudCgkbG9hZHByb3BzPXRydWUpCgl7CgkJZGVidWdfYnVmZmVyKCdnZXQgYWxsIGNvbnRlbnQuLi4nKTsKCgkJZ2xvYmFsICRnQ21zOwoKCQkkY29udGVudGNhY2hlID0gYXJyYXkoKTsKCgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IE9SREVSIEJZIGhpZXJhcmNoeSI7CgkJJGRicmVzdWx0ID0gJiRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKCQkkbWFwID0gYXJyYXkoKTsKCQkkY291bnQgPSAwOwoKCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQl7CgkJCSNNYWtlIHN1cmUgdGhlIHR5cGUgZXhpc3RzLiAgSWYgc28sIGluc3RhbnRpYXRlIGFuZCBsb2FkCgkJCWlmIChpbl9hcnJheSgkZGJyZXN1bHQtPmZpZWxkc1sndHlwZSddLCBhcnJheV9rZXlzKEBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpMaXN0Q29udGVudFR5cGVzKCkpKSkKCQkJewoJCQkJJGNvbnRlbnRvYmogPSBuZXcgJGRicmVzdWx0LT5maWVsZHNbJ3R5cGUnXTsKCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJGRicmVzdWx0LT5GZXRjaFJvdygpLCBmYWxzZSk7CgkJCQkkbWFwWyRjb250ZW50b2JqLT5JZCgpXSA9ICRjb3VudDsKCQkJCSRjb250ZW50Y2FjaGVbXSA9ICRjb250ZW50b2JqOwoJCQkJJGNvdW50Kys7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkZGJyZXN1bHQtPk1vdmVOZXh0KCk7CgkJCX0KCQl9CgoJCWZvciAoJGk9MDskaTwkY291bnQ7JGkrKykKCQl7CgkJCWlmICgkY29udGVudGNhY2hlWyRpXS0+UGFyZW50SWQoKSAhPSAtMSAmJiBpc3NldCgkbWFwWyRjb250ZW50Y2FjaGVbJGldLT5QYXJlbnRJZCgpXSkpCgkJCXsKCQkJICAkY29udGVudGNhY2hlWyRtYXBbJGNvbnRlbnRjYWNoZVskaV0tPlBhcmVudElkKCldXS0+bUNoaWxkQ291bnQrKzsKCQkJfQoJCX0KCgkJcmV0dXJuICRjb250ZW50Y2FjaGU7Cgl9CgoJZnVuY3Rpb24gQ3JlYXRlSGllcmFyY2h5RHJvcGRvd24oJGN1cnJlbnQgPSAnJywgJHBhcmVudCA9ICcnLCAkbmFtZSA9ICdwYXJlbnRfaWQnLCAkcGFyZW50X3BhZ2VfaWQpCgl7CgkJJHJlc3VsdCA9ICcnOwoKCQkkYWxsY29udGVudCA9IEJsb2NrQ29udGVudE1hbmFnZXI6OkdldEFsbENvbnRlbnQoKTsKCgkJaWYgKCRhbGxjb250ZW50ICE9PSBGQUxTRSAmJiBjb3VudCgkYWxsY29udGVudCkgPiAwKQoJCXsKCQkJJHJlc3VsdCAuPSAnPHNlbGVjdCBuYW1lPSInLiRuYW1lLiciPic7CgkJCSRyZXN1bHQgLj0gJzxvcHRpb24gdmFsdWU9Ii0xIj5Ob25lPC9vcHRpb24+JzsKCgkJCSRjdXJoaWVyYXJjaHkgPSAnJzsKCgkJCWZvcmVhY2ggKCRhbGxjb250ZW50IGFzICRvbmUpCgkJCXsKCQkJCWlmICgkb25lLT5JZCgpID09ICRjdXJyZW50KQoJCQkJewojR3JhYiBoaWVyYXJjaHkganVzdCBpbiBjYXNlIHdlIG5lZWQgdG8gY2hlY2sgY2hpbGRyZW4KIyh3aGljaCB3aWxsIGFsd2F5cyBiZSBhZnRlcikKCQkJCQkkY3VyaGllcmFyY2h5ID0gJG9uZS0+SGllcmFyY2h5KCk7CgojVGhlbiBqdW1wIG91dC4gIFdlIGRvbid0IHdhbnQgb3Vyc2VsdmVzIGluIHRoZSBsaXN0LgoJCQkJCWNvbnRpbnVlOwoJCQkJfQojSWYgaXQncyBhIGNoaWxkIG9mIHRoZSBjdXJyZW50LCB3ZSBkb24ndCB3YW50IHRvIHNob3cgaXQgYXMgaXQKI2NvdWxkIGNhdXNlIGEgZGVhZGxvY2suCgkJCQlpZiAoJGN1cmhpZXJhcmNoeSAhPSAnJyAmJiBzdHJzdHIoJG9uZS0+SGllcmFyY2h5KCkgLiAnLicsICRjdXJoaWVyYXJjaHkgLiAnLicpID09ICRvbmUtPkhpZXJhcmNoeSgpIC4gJy4nKQoJCQkJewoJCQkJCWNvbnRpbnVlOwoJCQkJfQojRG9uJ3QgaW5jbHVkZSBjb250ZW50IHR5cGVzIHRoYXQgZG8gbm90IHdhbnQgY2hpbGRyZW4gZWl0aGVyLi4uCgkJCQlpZiAoJG9uZS0+V2FudHNDaGlsZHJlbigpID09IHRydWUgJiYgJG9uZS0+UGFyZW50UGFnZUlkKCkgPT0gJHBhcmVudF9wYWdlX2lkKQoJCQkJLy8JaWYgKCRvbmUtPldhbnRzQ2hpbGRyZW4oKSA9PSB0cnVlKQoJCQkJewoJCQkJCSRyZXN1bHQgLj0gJzxvcHRpb24gdmFsdWU9IicuJG9uZS0+SWQoKS4nIic7CgojU2VsZWN0IGN1cnJlbnQgcGFyZW50IGlmIGl0IGV4aXN0cwoJCQkJCWlmICgkb25lLT5JZCgpID09ICRwYXJlbnQpCgkJCQkJewoJCQkJCQkkcmVzdWx0IC49ICcgc2VsZWN0ZWQ9InRydWUiJzsKCQkJCQl9CgoJCQkJCSRyZXN1bHQgLj0gJz4nLiRvbmUtPkhpZXJhcmNoeSgpLicuIC0gJy4kb25lLT5OYW1lKCkuJzwvb3B0aW9uPic7CgkJCQl9CgkJCX0KCgkJCSRyZXN1bHQgLj0gJzwvc2VsZWN0Pic7CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCgoJLy8gZnVuY3Rpb24gdG8gZ2V0IHRoZSBpZCBvZiB0aGUgZGVmYXVsdCBwYWdlCglmdW5jdGlvbiBHZXREZWZhdWx0UGFnZUlEKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBkZWZhdWx0X2NvbnRlbnQgPSAxIjsKCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSk7CgkJaWYgKCEkcm93KQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gJHJvd1snY29udGVudF9pZCddOwoJfQoKCgkvLyBmdW5jdGlvbiB0byBtYXAgYW4gYWxpYXMgdG8gYSBwYWdlIGlkCgkvLyByZXR1cm5zIGZhbHNlIGlmIG5vdGhpbmcgY291bmQgYmUgZm91bmQuCglmdW5jdGlvbiBHZXRQYWdlSURGcm9tQWxpYXMoICRhbGlhcyApCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJaWYgKGlzX251bWVyaWMoJGFsaWFzKSAmJiBzdHJwb3MoJGFsaWFzLCcuJykgPT0gRkFMU0UgJiYgc3RycG9zKCRhbGlhcywnLCcpID09IEZBTFNFKQoJCXsKCQkJcmV0dXJuICRhbGlhczsKCQl9CgoJCSRwYXJhbXMgPSBhcnJheSgkYWxpYXMpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfYWxpYXMgPSA/IjsKCQkkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCAkcGFyYW1zKTsKCgkJaWYgKCEkcm93KQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gJHJvd1snY29udGVudF9pZCddOwoJfQoJCglmdW5jdGlvbiBHZXRQYWdlSURGcm9tSGllcmFyY2h5KCRwb3NpdGlvbikKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBoaWVyYXJjaHkgPSA/IjsKCQkkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCBhcnJheShCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDcmVhdGVVbmZyaWVuZGx5SGllcmFyY2h5UG9zaXRpb24oJHBvc2l0aW9uKSkpOwoKCQlpZiAoISRyb3cpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiAkcm93Wydjb250ZW50X2lkJ107Cgl9CgoKCS8vIGZ1bmN0aW9uIHRvIG1hcCBhbiBhbGlhcyB0byBhIHBhZ2UgaWQKCS8vIHJldHVybnMgZmFsc2UgaWYgbm90aGluZyBjb3VuZCBiZSBmb3VuZC4KCWZ1bmN0aW9uIEdldFBhZ2VBbGlhc0Zyb21JRCggJGlkICkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQlpZiAoIWlzX251bWVyaWMoJGlkKSAmJiBzdHJwb3MoJGlkLCcuJykgPT0gVFJVRSAmJiBzdHJwb3MoJGlkLCcsJykgPT0gVFJVRSkKCQl7CgkJCXJldHVybiAkaWQ7CgkJfQoKCQkkcGFyYW1zID0gYXJyYXkoJGlkKTsKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBjb250ZW50X2lkID0gPyI7CgkJJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSwgJHBhcmFtcyk7CgoJCWlmICggISRyb3cgKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gJHJvd1snY29udGVudF9hbGlhcyddOwoJfQoKCglmdW5jdGlvbiBDaGVja0FsaWFzRXJyb3IoJGFsaWFzLCAkY29udGVudF9pZCA9IC0xKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgoJCSRlcnJvciA9IEZBTFNFOwoKCQlpZiAocHJlZ19tYXRjaCgnL15cZCskLycsICRhbGlhcykpCgkJewoJCQkkZXJyb3IgPSBsYW5nKCdhbGlhc25vdGFuaW50ZWdlcicpOwoJCX0KCQllbHNlIGlmICghcHJlZ19tYXRjaCgnL15bXC1cX1x3XSskLycsICRhbGlhcykpCgkJewoJCQkkZXJyb3IgPSBsYW5nKCdhbGlhc211c3RiZWxldHRlcnNhbmRudW1iZXJzJyk7CgkJfQoJCWVsc2UKCQl7CgkJCSRwYXJhbXMgPSBhcnJheSgkYWxpYXMpOwoJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBjb250ZW50X2FsaWFzID0gPyI7CgkJCWlmICgkY29udGVudF9pZCA+IC0xKQoJCQl7CgkJCQkkcXVlcnkgLj0gIiBBTkQgY29udGVudF9pZCAhPSA/IjsKCQkJCSRwYXJhbXNbXSA9ICRjb250ZW50X2lkOwoJCQl9CgkJCSRyb3cgPSAmJGRiLT5HZXRSb3coJHF1ZXJ5LCAkcGFyYW1zKTsKCgkJCWlmICgkcm93KQoJCQl7CgkJCQkkZXJyb3IgPSBsYW5nKCdhbGlhc2FscmVhZHl1c2VkJyk7CgkJCX0KCQl9CgoJCXJldHVybiAkZXJyb3I7Cgl9CgkKCWZ1bmN0aW9uIENsZWFyQ2FjaGUoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkc21hcnR5ID0mICRnQ21zLT5HZXRTbWFydHkoKTsKCQkKCQkkc21hcnR5LT5jbGVhcl9hbGxfY2FjaGUoKTsKCQkkc21hcnR5LT5jbGVhcl9jb21waWxlZF90cGwoKTsKCgkJaWYgKGlzX2ZpbGUoVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gJy9jb250ZW50Y2FjaGUucGhwJykpCgkJewoJCQl1bmxpbmsoVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gJy9jb250ZW50Y2FjaGUucGhwJyk7CgkJfQoJfQoKCWZ1bmN0aW9uIENyZWF0ZUZyaWVuZGx5SGllcmFyY2h5UG9zaXRpb24oJHBvc2l0aW9uKQoJewojQ2hhbmdlIHBhZGRlZCBudW1iZXJzIGJhY2sgaW50byB1c2VyLWZyaWVuZGx5IHZhbHVlcwoJCSR0bXAgPSAnJzsKCQkkbGV2ZWxzID0gc3BsaXQoJ1wuJywgJHBvc2l0aW9uKTsKCQlmb3JlYWNoICgkbGV2ZWxzIGFzICRvbmVsZXZlbCkKCQl7CgkJCSR0bXAgLj0gbHRyaW0oJG9uZWxldmVsLCAnMCcpIC4gJy4nOwoJCX0KCQkkdG1wID0gcnRyaW0oJHRtcCwgJy4nKTsKCQlyZXR1cm4gJHRtcDsKCX0KCglmdW5jdGlvbiBDcmVhdGVVbmZyaWVuZGx5SGllcmFyY2h5UG9zaXRpb24oJHBvc2l0aW9uKQoJewojQ2hhbmdlIHVzZXItZnJpZW5kbHkgdmFsdWVzIGludG8gcGFkZGVkIG51bWJlcnMKCQkkdG1wID0gJyc7CgkJJGxldmVscyA9IHNwbGl0KCdcLicsICRwb3NpdGlvbik7CgkJZm9yZWFjaCAoJGxldmVscyBhcyAkb25lbGV2ZWwpCgkJewoJCQkkdG1wIC49IHN0cl9wYWQoJG9uZWxldmVsLCA1LCAnMCcsIFNUUl9QQURfTEVGVCkgLiAnLic7CgkJfQoJCSR0bXAgPSBydHJpbSgkdG1wLCAnLicpOwoJCXJldHVybiAkdG1wOwoJfQoJCn0KCiMgdmltOnRzPTQgc3c9NCBub2V0Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/classes/class.blockmodule.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCnJlcXVpcmVfb25jZSAnY2xhc3MuYmxvY2tjb250ZW50LmluYy5waHAnOwovKioKICogQ2xhc3MgdGhhdCBtb2R1bGUgZGVmaW5lZCBjb250ZW50IHR5cGVzIG11c3QgZXh0ZW5kLgogKgogKiBAc2luY2UJCTAuOQogKiBAcGFja2FnZQkJQ01TCiAqLwpjbGFzcyBDTVNNb2R1bGVCbG9ja0NvbnRlbnRUeXBlIGV4dGVuZHMgQmxvY2tDb250ZW50QmFzZQp7CgkvL1doYXQgbW9kdWxlIGRvIEkgYmVsb25nIHRvPyAgKG5lZWRlZCBmb3IgdGhpbmdzIGxpa2UgTGFuZyB0byB3b3JrIHJpZ2h0KQoJZnVuY3Rpb24gTW9kdWxlTmFtZSgpCgl7CgkJcmV0dXJuICcnOwoJfQoKCglmdW5jdGlvbiBMYW5nKCRuYW1lLCAkcGFyYW1zPWFycmF5KCkpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRjbXNtb2R1bGVzID0gJiRnQ21zLT5tb2R1bGVzOwoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCR0aGlzLT5Nb2R1bGVOYW1lKCksICRjbXNtb2R1bGVzKSkKCQl7CgkJCXJldHVybiAkY21zbW9kdWxlc1skdGhpcy0+TW9kdWxlTmFtZSgpXVsnb2JqZWN0J10tPkxhbmcoJG5hbWUsICRwYXJhbXMpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJ01vZHVsZU5hbWUoKSBub3QgZGVmaW5lZCBwcm9wZXJseSc7CgkJfQogICAgICAgIH0KCgoJLyoKCSAqIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBtb2R1bGUgdGhpcyBjb250ZW50IHR5cGUgYmVsb25ncyB0bwoJICoKCSAqLwoJZnVuY3Rpb24gR2V0TW9kdWxlSW5zdGFuY2UoKSAKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGNtc21vZHVsZXMgPSAmJGdDbXMtPm1vZHVsZXM7CgkJaWYgKGFycmF5X2tleV9leGlzdHMoJHRoaXMtPk1vZHVsZU5hbWUoKSwgJGNtc21vZHVsZXMpKQoJCXsKCQkJcmV0dXJuICRjbXNtb2R1bGVzWyR0aGlzLT5Nb2R1bGVOYW1lKCldWydvYmplY3QnXTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICdNb2R1bGVOYW1lKCkgbm90IGRlZmluZWQgcHJvcGVybHknOwoJCX0KCX0KCn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/sllists/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/sllists/SLLists.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQoqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIFBIUCB3cmFwcGVyIGFyb3VuZCB0aGUgc2NyaXB0YWN1bG91cyBqYXZhc2NyaXB0IGxpYnJhcmllcyBjcmVhdGVkIGJ5DQoqIFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cy8pLg0KKg0KKiBTTExpc3RzIHdhcyBjcmVhdGVkIGJ5IEdyZWcgTmV1c3RhZXR0ZXIgaW4gMjAwNSBhbmQgbWF5IGJlIHVzZWQgZm9yIGZyZWUgYnkgYW55b25lIGZvciBhbnkgcHVycG9zZS4gIEp1c3Qga2VlcCBteSBuYW1lIGluIGhlcmUgcGxlYXNlIGFuZA0KKiBnaXZlIG1lIGNyZWRpdCBpZiB5b3UgbGlrZSwgYnV0IGdpdmUgVGhvbWFzIGFsbCB0aGUgcmVhbCBjcmVkaXQhDQoqLw0KY2xhc3MgU0xMaXN0cyB7DQoNCgl2YXIgJGxpc3RzID0gYXJyYXkoKTsNCgl2YXIgJGpzUGF0aDsNCgl2YXIgJGRlYnVnID0gZmFsc2U7DQoJDQoJZnVuY3Rpb24gU0xMaXN0cygkanNQYXRoKSB7DQoJCSR0aGlzLT5qc1BhdGggPSAkanNQYXRoOw0KCX0NCgkNCglmdW5jdGlvbiBhZGRMaXN0KCRsaXN0LCAkaW5wdXQsICR0YWcgPSAnbGknLCAkYWRkaXRpb25hbE9wdGlvbnMgPSAnJykgew0KCQlpZiAoJGFkZGl0aW9uYWxPcHRpb25zICE9ICcnKSAkYWRkaXRpb25hbE9wdGlvbnMgPSAnLCcuJGFkZGl0aW9uYWxPcHRpb25zOw0KCQkkdGhpcy0+bGlzdHNbXSA9IGFycmF5KCJsaXN0IiA9PiAkbGlzdCwgImlucHV0IiA9PiAkaW5wdXQsICJ0YWciID0+ICR0YWcsICJhZGRpdGlvbmFsT3B0aW9ucyIgPT4gJGFkZGl0aW9uYWxPcHRpb25zKTsNCgl9DQoJDQoJZnVuY3Rpb24gcHJpbnRUb3BKUygpIHsNCgkJPz4NCgkJPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gJHRoaXMtPmpzUGF0aDs/Pi9wcm90b3R5cGUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSI8P3BocCBlY2hvICR0aGlzLT5qc1BhdGg7Pz4vc2NyaXB0YWN1bG91cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQoJCQlmdW5jdGlvbiBwb3B1bGF0ZUhpZGRlblZhcnMoKSB7DQoJCQkJPD9waHANCgkJCQlmb3JlYWNoKCR0aGlzLT5saXN0cyBhcyAkbGlzdCkgew0KCQkJCQk/Pg0KCQkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnPD9waHAgZWNobyAkbGlzdFsnaW5wdXQnXTs/PicpLnZhbHVlID0gU29ydGFibGUuc2VyaWFsaXplKCc8P3BocCBlY2hvICRsaXN0WydsaXN0J107Pz4nKTsNCgkJCQkJPD9waHANCgkJCQl9DQoJCQkJPz4NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJCS8vLS0+DQoJCTwvc2NyaXB0Pg0KCQk8P3BocA0KCX0NCgkNCglmdW5jdGlvbiBwcmludEJvdHRvbUpzKCkgew0KCQk/Pg0KCQkgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJLy8gPCFbQ0RBVEFbDQoJCQk8P3BocA0KCQkJZm9yZWFjaCgkdGhpcy0+bGlzdHMgYXMgJGxpc3QpIHsNCgkJCQk/Pg0KCQkJCVNvcnRhYmxlLmNyZWF0ZSgnPD9waHAgZWNobyAkbGlzdFsnbGlzdCddOz8+Jyx7dGFnOic8P3BocCBlY2hvICRsaXN0Wyd0YWcnXTs/Pic8P3BocCBlY2hvICRsaXN0WydhZGRpdGlvbmFsT3B0aW9ucyddOz8+fSk7DQoJCQkJPD9waHANCgkJCX0NCgkJCT8+DQoJCQkvLyBdXT4NCgkJIDwvc2NyaXB0Pg0KCQk8P3BocA0KCX0NCgkNCglmdW5jdGlvbiBwcmludEhpZGRlbklucHV0cygpIHsNCgkJJGlucHV0VHlwZSA9ICgkdGhpcy0+ZGVidWcpID8gJ3RleHQnIDogJ2hpZGRlbic7DQoNCgkJZm9yZWFjaCgkdGhpcy0+bGlzdHMgYXMgJGxpc3QpIHsNCgkJCWlmICgkdGhpcy0+ZGVidWcpIGVjaG8gJzxicj4nLiRsaXN0WydpbnB1dCddLic6ICc7DQoJCQk/Pg0KCQkJPGlucHV0IHR5cGU9Ijw/cGhwIGVjaG8gJGlucHV0VHlwZTs/PiIgbmFtZT0iPD9waHAgZWNobyAkbGlzdFsnaW5wdXQnXTs/PiIgaWQ9Ijw/cGhwIGVjaG8gJGxpc3RbJ2lucHV0J107Pz4iIHNpemU9IjYwIiAvPg0KCQkJPD9waHANCgkJfQ0KCQlpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICc8YnI+JzsNCgl9DQoJDQoJZnVuY3Rpb24gcHJpbnRGb3JtKCRhY3Rpb24sICRtZXRob2QgPSAncG9zdCcsICRzdWJtaXRUZXh0ID0gJ1N1Ym1pdCcsICRzdWJtaXRDbGFzcyA9ICcnLCRmb3JtTmFtZSA9ICdzb3J0YWJsZUxpc3RGb3JtJykgew0KCQk/Pg0KCQk8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJGFjdGlvbjs/PiIgbWV0aG9kPSI8P3BocCBlY2hvICRtZXRob2Q7Pz4iIG9uc3VibWl0PSJwb3B1bGF0ZUhpZGRlblZhcnMoKTsiIG5hbWU9Ijw/cGhwIGVjaG8gJGZvcm1OYW1lOz8+IiBpZD0iPD9waHAgZWNobyAkZm9ybU5hbWU7Pz4iPg0KCQkJPD9waHAgJHRoaXMtPnByaW50SGlkZGVuSW5wdXRzKCk7Pz4NCgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNvcnRhYmxlTGlzdHNTdWJtaXR0ZWQiIHZhbHVlPSJ0cnVlIiAvPg0KCQkJPD9waHANCgkJCWlmICgkdGhpcy0+ZGVidWcpIHsNCgkJCQk/PjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJWaWV3IFNlcmlhbGl6ZWQgTGlzdHMiIGNsYXNzPSI8P3BocCBlY2hvICRzdWJtaXRDbGFzczs/PiIgb25jbGljaz0icG9wdWxhdGVIaWRkZW5WYXJzKCk7IiAvPjxicj48P3BocA0KCQkJfQ0KCQkJPz4NCgkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI8P3BocCBlY2hvICRzdWJtaXRUZXh0Oz8+IiBjbGFzcz0iPD9waHAgZWNobyAkc3VibWl0Q2xhc3M7Pz4iIC8+DQoJCTwvZm9ybT4NCgkJPD9waHANCgl9DQoJDQoJZnVuY3Rpb24gZ2V0T3JkZXJBcnJheSgkaW5wdXQsJGxpc3RuYW1lLCRpdGVtS2V5TmFtZSA9ICdlbGVtZW50Jywkb3JkZXJLZXlOYW1lID0gJ29yZGVyJykgew0KCQlwYXJzZV9zdHIoJGlucHV0LCRpbnB1dEFycmF5KTsNCgkJJGlucHV0QXJyYXkgPSAkaW5wdXRBcnJheVskbGlzdG5hbWVdOw0KCQkkb3JkZXJBcnJheSA9IGFycmF5KCk7DQoJCWZvcigkaT0wOyRpPGNvdW50KCRpbnB1dEFycmF5KTskaSsrKSB7DQoJCQkkb3JkZXJBcnJheVtdID0gYXJyYXkoJGl0ZW1LZXlOYW1lID0+ICRpbnB1dEFycmF5WyRpXSwgJG9yZGVyS2V5TmFtZSA9PiAkaSArMSk7DQoJCX0NCgkJcmV0dXJuICRvcmRlckFycmF5Ow0KCX0NCg0KfQ==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyBWZXJzaW9uOiAkSWQ6IG1ldGhvZC5pbnN0YWxsLnBocCAxNjkgMjAwNy0wMi0yNSAwNjo0NDoxM1ogZWxpamFobG9mZ3JlbiAkCiMgTWV0aG9kOiBJbnN0YWxsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7CiRkYl9wcmVmaXggPSBjbXNfZGJfcHJlZml4KCk7CgkJCgllY2hvICI8cD5DcmVhdGluZyBjb250ZW50IHRhYmxlLi4uIjsKCgkkZGJkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRmbGRzID0gIgoJCWNvbnRlbnRfaWQgSSBLRVksCgkJY29udGVudF9uYW1lIEMoMjU1KSwKCQl0eXBlIEMoMjUpLAoJCW93bmVyX2lkIEksCgkJcGFyZW50X2lkIEksCgkJdGVtcGxhdGVfaWQgSSwKCQlpdGVtX29yZGVyIEksCgkJaGllcmFyY2h5IEMoMjU1KSwKCQlkZWZhdWx0X2NvbnRlbnQgSTEsCgkJbWVudV90ZXh0IEMoMjU1KSwKCQljb250ZW50X2FsaWFzIEMoMjU1KSwKCQlzaG93X2luX21lbnUgSTEsCgkJY29sbGFwc2VkIEkxLAoJCW1hcmt1cCBDKDI1KSwKCQlhY3RpdmUgSTEsCgkJY2FjaGFibGUgSTEsCgkJaWRfaGllcmFyY2h5IEMoMjU1KSwKCQloaWVyYXJjaHlfcGF0aCBYLAoJCXByb3BfbmFtZXMgWCwKCQltZXRhZGF0YSBYLAoJCXRpdGxlYXR0cmlidXRlIEMoMjU1KSwKCQl0YWJpbmRleCBDKDEwKSwKCQlhY2Nlc3NrZXkgQyg1KSwKCQlsYXN0X21vZGlmaWVkX2J5IEksCgkJY3JlYXRlX2RhdGUgRFQsCgkJbW9kaWZpZWRfZGF0ZSBEVCwKCQlwYXJlbnRfcGFnZV9pZCBJCgkiOwoJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCSRzcWxhcnJheSA9ICRkYmRpY3QtPkNyZWF0ZVRhYmxlU1FMKCRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkYmRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCSRkYi0+RXhlY3V0ZSgiQUxURVIgVEFCTEUgIi4kZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IEFERCBJTkRFWCAoY29udGVudF9hbGlhcywgYWN0aXZlKSIpOwoJJGRiLT5FeGVjdXRlKCJBTFRFUiBUQUJMRSAiLiRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgQUREIElOREVYIChkZWZhdWx0X2NvbnRlbnQpIik7CgkkZGItPkV4ZWN1dGUoIkFMVEVSIFRBQkxFICIuJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBBREQgSU5ERVggKHBhcmVudF9pZCkiKTsKCgllY2hvICJbZG9uZV08L3A+IjsKCgllY2hvICI8cD5DcmVhdGluZyBjb250ZW50X3Byb3BzIHRhYmxlLi4uIjsKCgkkZGJkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRmbGRzID0gIgoJCWNvbnRlbnRfaWQgSSwKCQl0eXBlIEMoMjUpLAoJCXByb3BfbmFtZSBDKDI1NSksCgkJcGFyYW0xIEMoMjU1KSwKCQlwYXJhbTIgQygyNTUpLAoJCXBhcmFtMyBDKDI1NSksCgkJY29udGVudCBYLAoJCWNyZWF0ZV9kYXRlIERULAoJCW1vZGlmaWVkX2RhdGUgRFQKCSI7CgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoJJHNxbGFycmF5ID0gJGRiZGljdC0+Q3JlYXRlVGFibGVTUUwoJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRiZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJJGRiLT5FeGVjdXRlKCJBTFRFUiBUQUJMRSAiLiRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnRfcHJvcHMgQUREIElOREVYIChjb250ZW50X2lkKSIpOwoKCWVjaG8gIltkb25lXTwvcD4iOwoKCWVjaG8gIjxwPkFkZGluZyBjcm9zc3JlZiB0YWJsZS4uLiI7CgoJJGRiZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkkZmxkcyA9ICcKCQljaGlsZF90eXBlIEMoMTAwKSwKCQljaGlsZF9pZCBJLAoJCXBhcmVudF90eXBlIEMoMTAwKSwKCQlwYXJlbnRfaWQgSSwKCQljcmVhdGVfZGF0ZSBEVCwKCQltb2RpZmllZF9kYXRlIERUCgknOwoKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGJkaWN0LT5DcmVhdGVUYWJsZVNRTCgkZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jcm9zc3JlZiIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRiZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJJGRiLT5FeGVjdXRlKCJBTFRFUiBUQUJMRSAiLiRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2Nyb3NzcmVmIEFERCBJTkRFWCAoY2hpbGRfdHlwZSwgY2hpbGRfaWQpIik7CgkkZGItPkV4ZWN1dGUoIkFMVEVSIFRBQkxFICIuJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgQUREIElOREVYIChwYXJlbnRfdHlwZSwgcGFyZW50X2lkKSIpOwoKCWVjaG8gJ1tkb25lXTwvcD4nOwoKLy8gQ3JlYXRlIFNlcXVlbmNlcwokZGItPkNyZWF0ZVNlcXVlbmNlKCRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnRfc2VxIik7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wc19zZXEiKTsKCi8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1VzZSBQYWdlQmxvY2tzJywgJ1VzZSBQYWdlQmxvY2tzJyk7CgovLyBjcmVhdGUgYSBwcmVmZXJlbmNlCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0dGVtcGxhdGUnLCAnZGVmYXVsdCcpOwoKCi8vIEluc3RhbGwgdGVtcGxhdGVzCiR0aGlzLT5TZXRUZW1wbGF0ZSgnZGVmYXVsdCcsICR0aGlzLT5HZXRUZW1wbGF0ZUZyb21GaWxlKCdkZWZhdWx0JykpOwokdGhpcy0+U2V0VGVtcGxhdGUoJ2hlYWRpbmcyJywgJHRoaXMtPkdldFRlbXBsYXRlRnJvbUZpbGUoJ2hlYWRpbmcyJykpOwokdGhpcy0+U2V0VGVtcGxhdGUoJ2hlYWRpbmczJywgJHRoaXMtPkdldFRlbXBsYXRlRnJvbUZpbGUoJ2hlYWRpbmczJykpOwokdGhpcy0+U2V0VGVtcGxhdGUoJ2xpbmsnLCAkdGhpcy0+R2V0VGVtcGxhdGVGcm9tRmlsZSgnbGluaycpKTsKCQkvLyByZWdpc3RlciBhbiBldmVudCB0aGF0IHRoZSBTa2VsZXRvbiB3aWxsIGlzc3VlLiBPdGhlciBtb2R1bGVzCgkJLy8gb3IgdXNlciB0YWdzIHdpbGwgYmUgYWJsZSB0byBzdWJzY3JpYmUgdG8gdGhpcyBldmVudCwgYW5kIHRyaWdnZXIKCQkvLyBvdGhlciBhY3Rpb25zIHdoZW4gaXQgZ2V0cyBjYWxsZWQuCi8vCQkkdGhpcy0+Q3JlYXRlRXZlbnQoICdPblNrZWxldG9uUHJlZmVyZW5jZUNoYW5nZScgKTsKCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyBWZXJzaW9uOiAkSWQ6IG1ldGhvZC51bmluc3RhbGwucGhwIDE2NCAyMDA2LTEyLTE5IDAxOjUxOjUyWiBlbGlqYWhsb2ZncmVuICQKIyBNZXRob2Q6IFVuaW5zdGFsbAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcGFnZWJsb2Nrcy8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBUeXBpY2FsIERhdGFiYXNlIFJlbW92YWwKJGRiID0gJiR0aGlzLT5jbXMtPmRiOwoKLy8gcmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZQokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wcyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2Nyb3NzcmVmIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyByZW1vdmUgdGhlIHNlcXVlbmNlcwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3NlcSIgKTsKJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wc19zZXEiICk7CgovLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgUGFnZUJsb2NrcycpOwoKLy9yZW1vdmUgdGhlIHRlbXBsYXRlcwokdGVtcGxhdGVzID0gJHRoaXMtPkxpc3RUZW1wbGF0ZXMoKTsKZm9yZWFjaCAoJHRlbXBsYXRlcyBhcyAkdGVtcGxhdGUpCnsKICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHRlbXBsYXRlKTsKfQoKLy8gcmVtb3ZlIHRoZSBwcmVmcwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZGVmYXVsdHRlbXBsYXRlJyk7CQkKCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyBWZXJzaW9uOiAkSWQ6IG1ldGhvZC51cGdyYWRlLnBocCAxMzAgMjAwNi0wOC0xMCAxODoyMzoyMFogZWxpamFobG9mZ3JlbiAkCiMgTWV0aG9kOiBVcGdyYWRlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9wYWdlYmxvY2tzLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQogIHsKICBjYXNlICcwLjEtc3ZuJzoKICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2NrcyIsICJibG9ja19vcmRlciBDKDUwKSIpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjEuMS1zdm4nOwogIGNhc2UgJzAuMS4xLXN2bic6CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3MiLCAicGFyZW50X2Jsb2NrIEkgREVGQVVMVCAwIik7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkY3VycmVudF92ZXJzaW9uID0gJzAuMS4yLXN2bic7CiAgY2FzZSAnMC4xLjItc3ZuJzoKICAgIC8vIG15c3FsLXNwZWNpZmljLCBidXQgaWdub3JlZCBieSBvdGhlciBkYXRhYmFzZQogICAgJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsgCiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAKICAgIC8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgogICAgJGZsZHMgPSAiCgkJCWZpZWxkX2lkIEkgS0VZLAogICAgICAgICAgICAgICAgICAgICAgICBibG9ja19pZCBDKDUwKSwKCQkJbmFtZSBDKDI1NSksCgkJCWNvbnRlbnQgWAoJCQkiOwoKICAgIC8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2ZpZWxkcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgCiAgICAvLyBjcmVhdGUgYSBzZXF1ZW5jZQogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2ZpZWxkc19zZXEiKTsKICAgIAogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjEuMy1zdm4nOwogICAgCiAgY2FzZSAnMC4xLjMtc3ZuJzoKICAgIC8vIHVwZ3JhZGUgaGVyZQogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjEuNC1zdm4nOwogICAgCiAgICBicmVhazsKICB9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/PageBlocks.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyAkSWQ6IFBhZ2VCbG9ja3MubW9kdWxlLnBocCAxNzkgMjAwNy0wMy0yNCAxODo1NTo1MFogZWxpamFobG9mZ3JlbiAkCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3BhZ2VibG9ja3MvCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpyZXF1aXJlX29uY2UoICdsaWIvYmxvY2tjb250ZW50LmZ1bmN0aW9ucy5waHAnKTsKcmVxdWlyZV9vbmNlKCAnbGliL2NsYXNzZXMvY2xhc3MuYmxvY2tjb250ZW50LmluYy5waHAnKTsKcmVxdWlyZV9vbmNlKCAnbGliL2NsYXNzZXMvY2xhc3MuYmxvY2ttb2R1bGUuaW5jLnBocCcpOwpyZXF1aXJlX29uY2UoICdjbGFzc2VzL2NsYXNzLkltYWdlVGV4dC5waHAnKTsKcmVxdWlyZV9vbmNlKCAnY2xhc3Nlcy9jbGFzcy5UZXh0LnBocCcpOwovLyByZXF1aXJlX29uY2UoICdjbGFzc2VzL2NsYXNzLlBhZ2VCbG9ja3NDb250ZW50LnBocCcpOwoKCmNsYXNzIFBhZ2VCbG9ja3MgZXh0ZW5kcyBDTVNNb2R1bGUKewogIAogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnUGFnZUJsb2Nrcyc7CiAgfQoKICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgfQoKICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzAuMS41JzsKICB9CiAgCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQogIAogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICdFbGlqYWggTG9mZ3Jlbic7CiAgfQogIAogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ2VsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20nOwogIH0KICAKICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfQoKICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQogIAogIGZ1bmN0aW9uIEhhc0FkbWluKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICdjb250ZW50JzsKICB9CgoKICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgfQoKCiAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIFBhZ2VCbG9ja3MnKTsKICB9CiAgCiAgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICB7CiAgICByZXR1cm4gYXJyYXkoKTsKICB9CgogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMC1iZXRhNCc7CiAgfQoJCiAgZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpCiAgewoJCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYWN0aW9uJywgJ2RlZmF1bHQnLCAkdGhpcy0+bGFuZygnaGVscF9hY3Rpb24nKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbnVtYmVyJywgMTAsICR0aGlzLT5sYW5nKCdoZWxwX251bWJlcicpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdwYWdlX2lkJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhZ2VfaWQnKSk7CgkJLyoKCQkvLyBGb3Igdmlld2luZyBhIHBpY3R1cmUKCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL3NrZWxldG9uXC8oP1A8bnVtZXJpY19wYXJhbV9uYW1lPlswLTldKylcLyg/UDxzdHJpbmdfcGFyYW1fbmFtZT5bYS16QS1aXSspXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKSQvJywgCmFycmF5KCdhY3Rpb24nPT4nZGVmYXVsdCcpKTsKCgkJLy8gbm93LCBhbnkgdXJsIHRoYXQgbG9va3MgbGlrZToKCQkvLyAgICAvc2tlbGV0b24vMy9mb28vNQoJCS8vIHdpbGwgY2FsbCB0aGUgZGVmYXVsdCBhY3Rpb24sIHdpdGg6CgkJLy8gICAgIHBhcmFtc1snbnVtZXJpY19wYXJhbV9uYW1lJ10gc2V0IHRvIDMKCQkvLyAgICAgcGFyYW1zWydzdHJpbmdfcGFyYW1fbmFtZSddIHNldCB0byAiZm9vIgoJCS8vICAgIGFuZCByZXR1cm5pZCBzZXQgdG8gNQoJCQoJKi8KCQkvLyBSZWdpc3RlciBjb250ZW50IHR5cGUKCQkkdGhpcy0+UmVnaXN0ZXJDb250ZW50VHlwZSgnUGFnZUJsb2Nrc0NvbnRlbnQnLCBkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xhc3NlcycgIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjbGFzcy5QYWdlQmxvY2tzQ29udGVudC5waHAnLCAkdGhpcy0+R2V0RnJpZW5kbHlOYW1lKCkpOwoKCX0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEV2ZW50RGVzY3JpcHRpb24oKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIHdoYXQKICAgdGhhdCBldmVudCBkb2VzLiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRFdmVudERlc2NyaXB0aW9uICggJGV2ZW50bmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9pbmZvXycuJGV2ZW50bmFtZSApOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEV2ZW50SGVscCgpCiAgIElmIHlvdXIgbW9kdWxlIGNhbiBjcmVhdGUgZXZlbnRzLCB5b3Ugd2lsbCBuZWVkCiAgIHRvIHByb3ZpZGUgdGhlIEFQSSB3aXRoIGRvY3VtZW50YXRpb24gb2YgaG93IHRvCiAgIHVzZSB0aGUgZXZlbnQuIFRoaXMgbWV0aG9kIHdyYXBzIHVwIGEgc2ltcGxlCiAgIHJldHVybiBvZiB0aGUgbG9jYWxpemVkIGRlc2NyaXB0aW9uLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEV2ZW50SGVscCAoICRldmVudG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaGVscF8nLiRldmVudG5hbWUgKTsKICB9CgogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwogIH0KICAKICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7CiAgfQogIAogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOwogIH0KCiAgLyoqCiAgICogR2VuZXJhdGVzIGEgdGFibGUgb2YgY29udGVudHMgYmFzZWQgb24gaGVhZGluZyB0YWdzIHRoYXQgaGF2ZSBpZHMKICAgKiBAZXhhbXBsZTogPGgyIGlkPSJwYWNrYWdlcyI+UGFja2FnZXM8L2gyPgogICAqLwogIC8qCiAgZnVuY3Rpb24gZ2V0X3RhYmxlX29mX2NvbnRlbnRzKCRwYWdlX2NvbnRlbnRzKQogIHsKICAgIC8vIEdlbmVyYXRlIHRhYmxlIG9mIGNvbnRlbnRzCiAgICBwcmVnX21hdGNoX2FsbCgiLzxoKFtbOmRpZ2l0Ol1dKVtbOnNwYWNlOl1daWQ9XCIoW2Etei0wLTldKylcIj4oLiopPFwvaFswLTldPi9pIiwgJHBhZ2VfY29udGVudHMsICRtYXRjaCk7CiAgICBpZiAoRkFMU0UgPT0gZW1wdHkoJG1hdGNoWzBdKSkKICAgICAgewoJJGNvbnRlbnRzICA9ICI8aDI+Q29udGVudHM8L2gyPlxuIjsKCSRjb250ZW50cyAuPSAiPHVsPlxuIjsKCWZvcmVhY2ggKCRtYXRjaFswXSBhcyAka2V5ID0+ICR2YWx1ZSkKCSAgewoJICAgIGlmICgyID09ICRtYXRjaFsxXVska2V5XSkKCSAgICAgIHsKCQkkY29udGVudHMgLj0gJyc7CgkgICAgICB9CgkgICAgZWxzZQoJICAgICAgewoJCSRjb250ZW50cyAuPSAnICAgICAgICAnOwoJICAgICAgfQoJICAgICRjb250ZW50cyAuPSAnPGxpPjxhIGhyZWY9IicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyMnLiRtYXRjaFsyXVska2V5XS4nIj4nLiRtYXRjaFszXVska2V5XS4nPC9hPic7CgkgICAgLy8gU3RhcnQgYSBuZXcgc3ViLWxpc3QgaWYgdGhpcyBpdGVtIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UganVzdCBlbmQgdGhlIGxpc3QgaXRlbQoJICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkbWF0Y2hbMV1bJGtleSArIDFdKSAmJiAkbWF0Y2hbMV1bJGtleSArIDFdID09ICRtYXRjaFsxXVska2V5XSArIDEpCgkgICAgICB7CgkJJGNvbnRlbnRzIC49ICJcbiAgICA8dWw+XG4iOwoJCSR1bmNsb3NlZF9saXN0ID0gVFJVRTsKCSAgICAgIH0KCSAgICBlbHNlCgkgICAgICB7CgkJJGNvbnRlbnRzIC49ICI8L2xpPlxuIjsKCSAgICAgIH0KCSAgICAvLyBJZiB0aGUgbmV4dCBpdGVtIGlzIGhpZ2hlciBsZXZlbCB0aGVuIGNsb3NlIHRoaXMgbGlzdCBpdGVtIChJLkUuIGN1cnJlbnQgaXRlbSBpcyBoMyBhbmQgbmV4dCBpcyBoMgoJICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkbWF0Y2hbMV1bJGtleSArIDFdKSAmJiAkbWF0Y2hbMV1bJGtleSArIDFdID09ICRtYXRjaFsxXVska2V5XSAtIDEpCgkgICAgICB7CgkJJGNvbnRlbnRzIC49ICIgICAgPC91bD5cbjwvbGk+XG4iOwoJCSR1bmNsb3NlZF9saXN0ID0gRkFMU0U7CgkgICAgICB9CgkgIH0KCWlmIChGQUxTRSA9PSBlbXB0eSgkdW5jbG9zZWRfbGlzdCkpCgkgIHsKCSAgICAkY29udGVudHMgLj0gIiAgICA8L3VsPlxuPC9saT5cbiI7CgkgIH0KCSRjb250ZW50cyAuPSAiPC91bD5cbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJGNvbnRlbnRzID0gJyc7CiAgICAgIH0KICAgIHJldHVybiAkY29udGVudHM7CiAgfQogICovCgogIGZ1bmN0aW9uIHNob3dfaCgmJHJvb3QsICYkc29ydGFibGVMaXN0cywgJiRsaXN0QXJyYXksICYkb3V0cHV0LCAkc2hvd19jaGlsZHJlbiA9IFRSVUUsICRzaG93X3BhZ2VfaGVhZGVyID0gVFJVRSkKICB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkdGhlbWVPYmplY3QgPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ107CiAgICAkZWRpdEltZyA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCBsYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKTsgICAgCiAgICAkaWQgPSAkdGhpcy0+bUlkOwogICAgJHJldHVybmlkID0gJHRoaXMtPm1SZXR1cm5pZDsKICAgICRjb250ZW50ID0gJiRyb290LT5nZXRDb250ZW50KCk7CiAgICBpZiAoVFJVRSA9PSAkc2hvd19wYWdlX2hlYWRlcikKICAgICAgewoJaWYgKEZBTFNFID09IGVtcHR5KCR0aGlzLT5tUGFnZUJsb2NrUGFyZW50c1skY29udGVudC0+bUlkXSkgfHwgJHJvb3QtPmdldENoaWxkcmVuQ291bnQoKT4wKQoJICB7CgkgICAgJG91dHB1dCAuPSAnPGxpPicuIlxuIjsKCSAgICAkZXhwYW5kSW1nID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9leHBhbmQuZ2lmJywgbGFuZygnZXhwYW5kJyksJycsJycsJ3N5c3RlbWljb24nKTsKCSAgICAkY29udHJhY3RJbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2NvbnRyYWN0LmdpZicsIGxhbmcoJ2NvbnRyYWN0JyksJycsJycsJ3N5c3RlbWljb24nKTsKCSAgICBpZiAoVFJVRSA9PSBlbXB0eSgkdGhpcy0+b3BlbmVkQXJyYXlbJGNvbnRlbnQtPm1JZF0pKQoJICAgICAgewoJCSRvdXRwdXQgLj0gICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgICRleHBhbmRJbWcsIGFycmF5KCdjb2wnID0+IDAsICdjb250ZW50X2lkJyA9PiAkY29udGVudC0+SWQoKSkpOwoJICAgICAgfQoJICAgIGVsc2UKCSAgICAgIHsKCQkkb3V0cHV0IC49ICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICAkY29udHJhY3RJbWcsIGFycmF5KCdjb2wnID0+IDEsICdjb250ZW50X2lkJyA9PiAkY29udGVudC0+SWQoKSkpOwoJICAgICAgfQoJICB9CgllbHNlCgkgIHsKCSAgICAkb3V0cHV0IC49ICc8bGkgc3R5bGU9InBhZGRpbmctbGVmdDoxMnB4Ij4nLiJcbiI7CgkgIH0KCSRvdXRwdXQgLj0gICRjb250ZW50LT5IaWVyYXJjaHkoKS4nICc7Cgkkdmlld0ltZyA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdmlldy5naWYnLCBsYW5nKCd2aWV3JyksJycsJycsJ3N5c3RlbWljb24nKTsKCSRvdXRwdXQgLj0gJyA8YSBocmVmPSInLiRjb250ZW50LT5HZXRVUkwoKS4nIj4nLiR2aWV3SW1nLic8L2E+ICc7Cgkkb3V0cHV0IC49ICcgPGEgaHJlZj0iZWRpdGNvbnRlbnQucGhwP2NvbnRlbnRfaWQ9Jy4kY29udGVudC0+bUlkLiciPicuJGVkaXRJbWcuJzwvYT4gJzsKCSRvdXRwdXQgLj0gJyA8YSBocmVmPSJlZGl0Y29udGVudC5waHA/Y29udGVudF9pZD0nLiRjb250ZW50LT5tSWQuJyI+Jy4kY29udGVudC0+bU5hbWUuJzwvYT4gJzsKCWlmICgnQ29udGVudCcgPT0gJGNvbnRlbnQtPkZyaWVuZGx5TmFtZSgpKQoJICB7CgkgICAgJG91dHB1dCAuPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRibG9ja2NvbnRlbnQnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGRibG9jaycpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdwYXJlbnRfcGFnZV9pZCcgPT4gJGNvbnRlbnQtPm1JZCksICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRibG9ja2NvbnRlbnQnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGRibG9jaycpLCBhcnJheSgncGFyZW50X3BhZ2VfaWQnID0+ICRjb250ZW50LT5tSWQpLCAnJywgZmFsc2UsIGZhbHNlLCAnJyk7CgkgIH0KICAgICAgfQogICAgaWYgKEZBTFNFID09IGVtcHR5KCR0aGlzLT5tUGFnZUJsb2NrUGFyZW50c1skY29udGVudC0+bUlkXVstMV0pICYmIEZBTFNFID09IGVtcHR5KCR0aGlzLT5vcGVuZWRBcnJheVskY29udGVudC0+bUlkXSkpCiAgICAgIHsKCSRvdXRwdXQgLj0gJzx1bCBpZD0icGFyZW50Jy4kY29udGVudC0+bUlkLiciIGNsYXNzPSJzb3J0YWJsZUxpc3QiPic7Cgkkb3V0cHV0IC49ICR0aGlzLT5zaG93X2NoaWxkcmVuKCRjb250ZW50LT5tSWQsIC0xLCAkc29ydGFibGVMaXN0cywgJGxpc3RBcnJheSk7Cgkkc29ydGFibGVMaXN0cy0+YWRkTGlzdCgncGFyZW50Jy4kY29udGVudC0+bUlkLCdwYXJlbnQnLiRjb250ZW50LT5tSWQuJ0xpc3RPcmRlcicpOwoJJGxpc3RBcnJheVsncGFnZXBhcmVudHMnXVskY29udGVudC0+bUlkXSA9ICdwYXJlbnQnLiRjb250ZW50LT5tSWQuJ0xpc3RPcmRlcic7Cgkkb3V0cHV0IC49ICc8L3VsPic7CiAgICAgIH0KICAgIAogICAgaWYgKFRSVUUgPT0gJHNob3dfY2hpbGRyZW4gJiYgJHJvb3QtPmdldENoaWxkcmVuQ291bnQoKT4wICYmIEZBTFNFID09IGVtcHR5KCR0aGlzLT5vcGVuZWRBcnJheVskY29udGVudC0+bUlkXSkpCiAgICAgIHsKCSRvdXRwdXQgLj0gJzx1bCBjbGFzcz0icGFnZXMiPicuIlxuIjsKCSRjaGlsZHJlbiA9ICYkcm9vdC0+Z2V0Q2hpbGRyZW4oKTsKCWZvcmVhY2ggKCRjaGlsZHJlbiBhcyAkY2hpbGQpCgkgIHsKCSAgICAkdGhpcy0+c2hvd19oKCRjaGlsZCwgJHNvcnRhYmxlTGlzdHMsICRsaXN0QXJyYXksICRvdXRwdXQpOwoJICB9Cgkkb3V0cHV0IC49ICI8L3VsPlxuIjsKCSRvdXRwdXQgLj0gJzwvbGk+JzsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJaWYgKFRSVUUgPT0gJHNob3dfcGFnZV9oZWFkZXIpCgkgIHsJCgkgICAgJG91dHB1dCAuPSAiPC9saT5cbiI7CgkgIH0KICAgICAgfQogIH0KCiAgZnVuY3Rpb24gc2hvd19oX2Jsb2NrcygmJHJvb3QsICYkc29ydGFibGVMaXN0cywgJiRsaXN0QXJyYXkpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGlkID0gJHRoaXMtPm1JZDsKICAgICR0aGVtZU9iamVjdCA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXTsJICAKICAgICRyZXR1cm5pZCA9ICR0aGlzLT5tUmV0dXJuaWQ7CiAgICAkb3V0cHV0ID0gJyc7CiAgICAkY29udGVudCA9ICYkcm9vdC0+Z2V0Q29udGVudCgpOwogICAgaWYgKEZBTFNFID09IGVtcHR5KCRjb250ZW50KSkKCXsKCSRvdXRwdXQgLj0gJzxsaSBpZD0iaXRlbV8nLiRjb250ZW50LT5JZCgpLiciPicuIlxuIjsKCS8vICRvdXRwdXQgLj0gICRjb250ZW50LT5IaWVyYXJjaHkoKTsKCQoJLy8gJG91dHB1dCAuPSAnIFBhcmVudCBQYWdlOiAnLiRjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCdwYXJlbnRfcGFnZV9pZCcpOwoJJGVkaXRJbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgbGFuZygnZWRpdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyk7ICAgCgkkb3V0cHV0IC49ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRibG9ja2NvbnRlbnQnLCAkcmV0dXJuaWQsICRlZGl0SW1nLCBhcnJheSgncGFyZW50X3BhZ2VfaWQnID0+ICRjb250ZW50LT5QYXJlbnRQYWdlSWQoKSwgJ2NvbnRlbnRfaWQnID0+ICRjb250ZW50LT5tSWQpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykuJyAnOwoJJG91dHB1dCAuPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0YmxvY2tjb250ZW50JywgJHJldHVybmlkLCAkY29udGVudC0+bU5hbWUsIGFycmF5KCdwYXJlbnRfcGFnZV9pZCcgPT4gJGNvbnRlbnQtPlBhcmVudFBhZ2VJZCgpLCdjb250ZW50X2lkJyA9PiAkY29udGVudC0+bUlkKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpOwoJLy8gJG91dHB1dCAuPSAnIDxhIGhyZWY9ImVkaXRjb250ZW50LnBocD9jb250ZW50X2lkPScuJGNvbnRlbnQtPm1JZC4nIj4nLiRjb250ZW50LT5tTmFtZS4nPC9hPiAnOwoJJG91dHB1dCAuPSAnICgnLiRjb250ZW50LT5GcmllbmRseU5hbWUoKS4nKSAnOwoJLy8gICRvdXRwdXQgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkYmxvY2tjb250ZW50JywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYWRkYmxvY2snKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgncGFyZW50X2lkJyA9PiAkY29udGVudC0+bUlkKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4nICcuICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZGJsb2NrY29udGVudCcsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FkZGJsb2NrJyksIGFycmF5KCdwYXJlbnRfaWQnID0+ICRjb250ZW50LT5tSWQpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpOwoJCglpZiAoJHJvb3QtPmdldENoaWxkcmVuQ291bnQoKT4wKQoJewoJCS8vCSRvdXRwdXQgLj0gJ3dlIGhhdmUgY2hpbGRyZW4gaGVyZSc7CgkJLy8gICAgICAkc29ydGFibGVMaXN0cy0+YWRkTGlzdCgncGFyZW50Jy4kY29udGVudC0+bUlkLCdwYXJlbnQnLiRjb250ZW50LT5tSWQuJ0xpc3RPcmRlcicpOwoJCS8vICAgICAgJGxpc3RBcnJheVskY29udGVudC0+bUlkXSA9ICdwYXJlbnQnLiRjb250ZW50LT5tSWQuJ0xpc3RPcmRlcic7CgkJJG91dHB1dCAuPSAnPHVsIGNsYXNzPSJwYWdlcyI+Jy4iXG4iOwoJCQoJCSRjaGlsZHJlbiA9ICYkcm9vdC0+Z2V0Q2hpbGRyZW4oKTsKCQlmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGNoaWxkKQoJCXsKCQkvLyAkb3V0cHV0IC49ICdzZnNkZnMnOwoJCSR0aGlzLT5zaG93X2hfYmxvY2tzKCRjaGlsZCwgJHNvcnRhYmxlTGlzdHMsICRsaXN0QXJyYXkpOwoJCS8vICAkb3V0cHV0IC49ICdzZnNkZnMnOwoJCX0KCQkKCQkkb3V0cHV0IC49ICI8L3VsPlxuIjsKCX0KCWVsc2UgCgl7CgkJJGRlbGV0ZUltZyA9ICcgJy4kdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCBsYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpOwoJCSRvdXRwdXQgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAgJGRlbGV0ZUltZywgYXJyYXkoJ2RlbGV0ZWNvbnRlbnQnID0+ICRjb250ZW50LT5tSWQpKTsKCQkkb3V0cHV0IC49ICI8L2xpPlxuIjsKCX0KCSR0aGlzLT5tUGFnZUJsb2NrUGFyZW50c1skY29udGVudC0+UGFyZW50UGFnZUlkKCldWyRjb250ZW50LT5QYXJlbnRJZCgpXVtdID0gYXJyYXkoJ291dHB1dCcgPT4gJG91dHB1dCwgJ2lkJyA9PiAkY29udGVudC0+SWQoKSk7Cgl9CgllbHNlCgl7CgkJZWNobyAkdGhlbWVPYmplY3QtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2hpZXJhcmNoeV9lcnJvcicpKTsKCX0KICB9CiAgCiBmdW5jdGlvbiBzaG93X2NoaWxkcmVuKCRjb250ZW50X2lkLCAkaWQsICYkc29ydGFibGVMaXN0cywgJiRsaXN0QXJyYXkpIAkgCiAgIHsgCSAKICAgICAkb3V0cHV0ID0gJyc7IAkgCiAgICAgZm9yZWFjaCAoJHRoaXMtPm1QYWdlQmxvY2tQYXJlbnRzWyRjb250ZW50X2lkXVskaWRdICBBUyAka2V5ID0+ICR2YWx1ZSkgCSAKICAgICAgICAgICB7IAkgCiAgICAgICAgICAgICAkb3V0cHV0IC49ICR2YWx1ZVsnb3V0cHV0J107IAkgCiAgICAgICAgICAgICBpZiAoRkFMU0UgPT0gZW1wdHkoJHRoaXMtPm1QYWdlQmxvY2tQYXJlbnRzWyRjb250ZW50X2lkXVskdmFsdWVbJ2lkJ11dKSkgCSAKICAgICAgICAgICAgICAgeyAJIAogICAgICAgICAgICAgICAgICRzb3J0YWJsZUxpc3RzLT5hZGRMaXN0KCdibG9ja3BhcmVudCcuJHZhbHVlWydpZCddLCdibG9ja3BhcmVudCcuJHZhbHVlWydpZCddLidMaXN0T3JkZXInKTsgCSAKICAgICAgICAgICAgICAgICAkbGlzdEFycmF5WydibG9ja3BhcmVudHMnXVskdmFsdWVbJ2lkJ11dID0gJ2Jsb2NrcGFyZW50Jy4kdmFsdWVbJ2lkJ10uJ0xpc3RPcmRlcic7IAkgCiAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAnPHVsIGlkPSJibG9ja3BhcmVudCcuJHZhbHVlWydpZCddLiciIGNsYXNzPSJzb3J0YWJsZUxpc3QiPic7IAkgCiAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAkdGhpcy0+c2hvd19jaGlsZHJlbigkY29udGVudF9pZCwgJHZhbHVlWydpZCddLCAkc29ydGFibGVMaXN0cywgJGxpc3RBcnJheSk7IAkgCiAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAnPC91bD4nOyAJIAogICAgICAgICAgICAgICB9IAkgCiAgICAgICAgICAgfSAJIAogICAgICAgICByZXR1cm4gJG91dHB1dDsgCSAKICAgfSAJIAogIAkgCiAgZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpCiAgewogICAgcmV0dXJuICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgp1bC5yb290X2Jsb2NrcyBsaSB7CgliYWNrZ3JvdW5kLWNvbG9yOiAgI2ZmZmZmZjsKfQp1bC5jaGlsZF9ibG9ja3MgbGkgewoJYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYwp9CnVsLnBhZ2VzIGxpIHsKIGxpc3Qtc3R5bGU6bm9uZTsKfQo8L3N0eWxlPgonOwogIH0KCiAgZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCRyZXR1cm5pZCwgJGJsb2NrX2lkLCAkYXR0ciA9ICcnKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICBpZiAoJGF0dHIgPT0gJ2Jsb2NrJykKICAgICAgewoJJGRiID0mICR0aGlzLT5HZXREYigpOwoJJHEgPSAiU0VMRUNUIGNvbnRlbnRfbmFtZSxwYXJlbnRfcGFnZV9pZCxjb250ZW50X2FsaWFzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkYmxvY2tfaWQgKSApOwoJaWYgKCRkYnJlc3VsdCkKCSAgewoJICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJICAKCQkgIC8vMCBwb3NpdGlvbiBpcyB0aGUgcHJlZml4IGRpc3BsYXllZCBpbiB0aGUgbGlzdCByZXN1bHRzLgoJCSAgJHJlc3VsdFswXSA9ICR0aGlzLT5HZXRGcmllbmRseU5hbWUoKTsKCQkgIAoJCSAgLy8xIHBvc2l0aW9uIGlzIHRoZSB0aXRsZQoJCSAgJHJlc3VsdFsxXSA9ICRyb3dbJ2NvbnRlbnRfbmFtZSddOwoJCSAgCgkJICAvLzIgcG9zaXRpb24gaXMgdGhlIFVSTCB0byB0aGUgdGl0bGUuCgkJICAvLyAkcHJldHR5dXJsID0gJ3BhZ2VibG9ja3MvJyAuICRibG9ja19pZDsKCQkgICRjdXJub2RlID0mICRobS0+Z2V0Tm9kZUJ5SWQoJHJvd1sncGFyZW50X3BhZ2VfaWQnXSk7CgkJICAkY3VyY29udGVudCA9JiAkY3Vybm9kZS0+R2V0Q29udGVudCgpOwoJCSAgJHJlc3VsdFsyXSA9ICRjdXJjb250ZW50LT5HZXRVUkwoKS4nIycuJHJvd1snY29udGVudF9hbGlhcyddOwoJCSAgLy8gJHJlc3VsdFsyXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCdjbnRudDAxJywgJ2RldGFpbCcsICRyZXR1cm5pZCwgJycsIGFycmF5KCdhcnRpY2xlaWQnID0+ICRhcnRpY2xlaWQpICwnIycuJHJvd1snbmFtZSddLCB0cnVlLCBmYWxzZSwgJycsIHRydWUsICRwcmV0dHl1cmwpOwoJCX0KCSAgICB9CgkgIAoJICByZXR1cm4gJHJlc3VsdDsKCX0KfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/addblock.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgl7JGlucHV0X2hpZGRlbl9wYWdlX2lkfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPip7JHRleHRfdGl0bGV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0dGl0bGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0X25hbWV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0bmFtZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHRfY29udGVudH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRjb250ZW50fTwvcD4KCTwvZGl2PgogICAgICAgIHskYWRkaXRpb25hbF9ibG9ja3N9Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0X3BhcmVudF9ibG9ja306PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcGFyZW50X2Jsb2NrfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGV4dF90ZW1wbGF0ZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGVtcGxhdGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+CntpZiAkbWVzc2FnZSE9Jyd9PHA+eyRtZXNzYWdlfTwvcD57L2lmfQp7JHN0YXJ0Zm9ybX0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3NpbmdfbG91ZGx5fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zaW5nX2xvdWRseX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/default.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iYmxvY2siIGlkPSJ7JGFsaWFzfSI+e2NvbnRlbnR9PC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/editblock.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KnskdGV4dF90aXRsZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXR0aXRsZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHRfbmFtZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRuYW1lfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGV4dF9jb250ZW50fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dGNvbnRlbnR9PC9wPgoJPC9kaXY+CiAgICAgICAgeyRhZGRpdGlvbmFsX2Jsb2Nrc30KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHRfcGFyZW50X2Jsb2NrfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wYXJlbnRfYmxvY2t9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0X3RlbXBsYXRlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90ZW1wbGF0ZX08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRjcmVhdGVkYXRldGV4dH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRjcmVhdGVkYXRlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kaWZ5ZGF0ZXRleHR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0bW9kaWZ5ZGF0ZX08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KiB7JG5hbWV0ZXh0fTo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbmFtZWlucHV0fTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY29udGVudHRleHR9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjb250ZW50aW5wdXR9PC9wPg0KCTwvZGl2Pg0KDQoJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4NCgk8L2Rpdj4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/heading2.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyIGlkPSJ7JGFsaWFzfSI+eyR0aXRsZX08L2gyPgp7Y29udGVudH0=]]></data>
	</file>
	<file>
	  <filename>/templates/heading3.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzIGlkPSJ7JGFsaWFzfSI+eyR0aXRsZX08L2gzPgo8cD5Nb2RpZmllZDogeyRtb2RpZmllZH08L3A+Cntjb250ZW50fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/link.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0ieyRhbGlhc30iPgo8YSBocmVmPSJ7Y29udGVudCBibG9jaz0iVVJMIiBvbmVsaW5lPSJ0cnVlIn0iPnskdGl0bGV9PC9hPiAtIEFkZGVkOiB7JG1vZGlmaWVkfQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/options.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRkZWZhdWx0dGVtcGxhdGV0ZXh0fTo8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRkZWZhdWx0dGVtcGxhdGVpbnB1dH08L3A+DQogICAgICAgIDwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRzaG93dG9jdGV4dH06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHNob3d0b2NpbnB1dH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHJlZGlyZWN0X29uX2FkZF90ZXh0fTo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskcmVkaXJlY3Rfb25fYWRkX2lucHV0fTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPg0KCTwvZGl2Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/templatelist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgk8dGhlYWQ+DQoJCTx0cj4NCgkJCTx0aD57JHRlbXBsYXRlbmFtZXRleHR9PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJPC90cj4NCgk8L3RoZWFkPg0KCTx0Ym9keT4NCgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQ0KCQk8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9JzsiPg0KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPg0KCQkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4NCgkJPC90cj4NCgl7L2ZvcmVhY2h9DQoJPC90Ym9keT4NCjwvdGFibGU+DQoNCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4NCgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQo8L2Rpdj4NCg==]]></data>
	</file>
	<file>
	  <filename>/Tree/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/Tree/BlockTree.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCBSaWNoYXJkIEhleWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCAgICB8Ci8vIHwgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zICAgIHwKLy8gfCBhcmUgbWV0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIHwKLy8gfCAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICAgfAovLyB8IG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgICB8Ci8vIHwgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIHwKLy8gfCAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24ufAovLyB8IG8gVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgICAgICB8Ci8vIHwgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gIHwKLy8gfCAgIHBlcm1pc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAgIHwKLy8gfCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCAgICAgfAovLyB8IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiB8Ci8vIHwgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgIHwKLy8gfCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgfAovLyB8IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgICAgICB8Ci8vIHwgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIHwKLy8gfCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgfAovLyB8IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgICB8Ci8vIHwgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIHwKLy8gfCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgfAovLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBBdXRob3I6IFJpY2hhcmQgSGV5ZXMgPHJpY2hhcmRAcGhwZ3VydS5vcmc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgovKioKKiBBbiBPTyB0cmVlIGNsYXNzIGJhc2VkIG9uIHZhcmlvdXMgdGhpbmdzLCBpbmNsdWRpbmcgdGhlIE1TIHRyZWV2aWV3IGNvbnRyb2wKKiBJZiB5b3UgdXNlIHRoaXMgY2xhc3MgYW5kIHdpc2ggdG8gc2hvdyB5b3VyIGFwcHJlY2lhdGlvbiB0aGVuIHZpc2l0IG15Ciogd2lzaGxpc3QgaGVyZTogICBodHRwOi8vd3d3LmFtYXpvbi5jby51ay9leGVjL29iaWRvcy93aXNobGlzdC9TOEgyVU9HTVBaSzYKKgoqIFN0cnVjdHVyZSBvZiBvbmUgb2YgdGhlc2UgdHJlZXM6CioKKiAgVHJlZSBPYmplY3QKKiAgICB8CiogICAgKy0gVHJlZV9Ob2RlQ29sbGVjdGlvbiBvYmplY3QgKG5vZGVzIHByb3BlcnR5KQoqICAgICAgICAgIHwKKiAgICAgICAgICArLSBBcnJheSBvZiBUcmVlX05vZGUgb2JqZWN0cyAobm9kZXMgcHJvcGVydHkpCioKKiBVc2FnZToKKiAgICR0cmVlID0gJm5ldyBUcmVlKCk7CiogICAkbm9kZSAgPSAmJHRyZWUtPm5vZGVzLT5hZGROb2RlKG5ldyBUcmVlX05vZGUoJzEnKSk7CiogICAkbm9kZTIgPSAmJHRyZWUtPm5vZGVzLT5hZGROb2RlKG5ldyBUcmVlX05vZGUoJzInKSk7CiogICAkbm9kZTMgPSAmJHRyZWUtPm5vZGVzLT5hZGROb2RlKG5ldyBUcmVlX05vZGUoJzMnKSk7CiogICAkbm9kZTQgPSAmJG5vZGUzLT5ub2Rlcy0+YWRkTm9kZShuZXcgVHJlZV9Ob2RlKCczXzEnKSk7CiogICAkdHJlZS0+bm9kZXMtPnJlbW92ZU5vZGVBdCgwKTsKKiAgIHByaW50X3IoJHRyZWUpOwoqIAoqIFRoZSBkYXRhIGZvciBhIG5vZGUgaXMgc3VwcGxpZWQgYnkgZ2l2aW5nIGl0IGFzIHRoZSBhcmd1bWVudCB0byB0aGUgVHJlZV9Ob2RlCiogY29uc3RydWN0b3IuIFlvdSBjYW4gcmV0cmVpdmUgdGhlIGRhdGEgYnkgdXNpbmcgYSBub2RlcyBnZXRUYWcoKSBtZXRob2QsIGFuZCBhbHRlcgoqIGl0IHVzaW5nIHRoZSBzZXRUYWcoKSBtZXRob2QuCioKKiBQdWJsaWMgbWV0aG9kcyBmb3IgVHJlZSBjbGFzczoKKiAgIGhhc0NoaWxkcmVuKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIHRyZWUgaGFzIGNoaWxkIG5vZGVzIG9yIG5vdAoqICAgJmNyZWF0ZUZyb21MaXN0KGFycmF5IGRhdGEgWywgc3RyaW5nIHNlcGFyYXRvcl0pICAgICAgICAgKHN0YXRpYykgUmV0dXJucyBhIHRyZWUgc3RydWN0dXJlIGNyZWF0ZSBmcm9tIHRoZSBzdXBwbGllZCBsaXN0CiogICAmY3JlYXRlRnJvbU15U1FMKGFycmF5ICRwYXJhbXMpICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljKSBSZXR1cm5zIGEgdHJlZSBzdHJ1Y3R1cmUgY3JlYXRlZCB1c2luZyBhIGNvbW1vbiBEQiBzdG9yYWdlIHRlY2huaXF1ZQoqICAgJmNyZWF0ZUZyb21YTUxUcmVlKG9iamVjdCAkeG1sVHJlZSBbLCBib29sICRpZ25vcmVSb290XSkgKHN0YXRpYykgUmV0dXJucyBhIHRyZWUgc3RydWN0dXJlIGNyZWF0ZWQgdXNpbmcgYW4gUEVBUjo6WE1MX1RyZWUgb2JqZWN0CiogICAmbWVyZ2Uob2JqZWN0ICYkdHJlZSBbLCAuLi5dKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZXMgdHdvIG9yIG1vcmUgVHJlZS9UcmVlX05vZGUgb2JqZWN0cy4gQ2FuIGJlIHVzZWQgc3RhdGljYWxseSBvciBub3QuCioKKiBQdWJsaWMgbWV0aG9kcyBmb3IgVHJlZV9Ob2RlIGNsYXNzOgoqICAgc2V0VGFnKG1peGVkIHRhZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSB0YWcgZGF0YQoqICAgZ2V0VGFnKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgdGhlIHRhZyBkYXRhCiogICAmcHJldlNpYmxpbmcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgc2libGluZyBub2RlCiogICAmbmV4dFNpYmxpbmcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgbmV4dCBzaWJsaW5nIG5vZGUKKiAgIHJlbW92ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB0aGlzIG5vZGUgZnJvbSB0aGUgY29sbGVjdGlvbgoqICAgJmdldFRyZWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBlbmNvbXBhc3NpbmcgVHJlZSBvYmplY3QKKiAgICZnZXRQYXJlbnQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcGFyZW50IFRyZWVfTm9kZSBvYmplY3QgaWYgYW55CiogICBoYXNDaGlsZHJlbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIG5vZGUgaGFzIGNoaWxkIG5vZGVzIG9yIG5vdAoqICAgZGVwdGgoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGlzIG5vZGUgaW4gdGhlIHRyZWUgKHplcm8gYmFzZWQpCiogICBpc0NoaWxkT2YoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIGdpdmVuIG5vZGUvdHJlZQoqICAgbW92ZVRvKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlcyB0aGlzIG5vZGUgdG8gYmUgYSBjaGlsZCBvZiB0aGUgZ2l2ZW4gbm9kZS90cmVlCiogICBjb3B5VG8oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcGllcyB0aGlzIG5vZGUgdG8gYSBuZXcgY2hpbGQgb2YgdGhlIGdpdmVuIG5vZGUvdHJlZQoqICAgCiogUHVibGljIHZhcmlhYmxlcyBmb3IgVHJlZV9Ob2RlIGNsYXNzOgoqICAgJG5vZGVzCioKKiBQdWJsaWMgbWV0aG9kcyBmb3IgVHJlZV9Ob2RlQ29sbGVjdGlvbiBjbGFzczoKKiAgICZhZGROb2RlKFRyZWVfTm9kZSBub2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHMgYSBub2RlIHRvIHRoZSBjb2xsZWN0aW9uCiogICAmZmlyc3ROb2RlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGNvbGxlY3Rpb24KKiAgICZsYXN0Tm9kZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBub2RlIGluIHRoZSBjb2xsZWN0aW9uCiogICAmcmVtb3ZlTm9kZUF0KGludCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBub2RlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggKG5vZGVzIGFyZSByZS1vcmRlcmVkKQoqICAgcmVtb3ZlTm9kZShUcmVlX05vZGUgbm9kZSBbLCBib29sZWFuIHNlYXJjaF0pICAgICAgUmVtb3ZlcyB0aGUgZ2l2ZW4gbm9kZSAobm9kZXMgYXJlIHJlLW9yZGVyZWQpCiogICBpbmRleE9mKFRyZWVfTm9kZSBub2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBub2RlCiogICBnZXROb2RlQ291bnQoW2Jvb2xlYW4gcmVjdXJzZV0pICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgY29sbGVjdGlvbiwgb3B0aW9uYWxseSByZWN1cnNpbmcKKiAgIGdldEZsYXRMaXN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJpZXZlcyBhbiBpbmRleGVkIGFycmF5IG9mIHRoZSBub2RlcyBmcm9tIHRvcCB0byBib3R0b20sIGxlZnQgdG8gcmlnaHQKKiAgIHRyYXZlcnNlKGNhbGxiYWNrIGZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgIFRyYXZlcnNlcyB0aGUgdHJlZSBzdXBwbHkgZWFjaCBub2RlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgoqICAgc2VhcmNoKG1peGVkIHNlYXJjaERhdGEgWywgYm9vbCBzdHJpY3RdKSAgICAgICAgICAgQmFzaWMgc2VhcmNoIGZ1bmN0aW9uIGZvciBzZWFyY2hpbmcgdGhlIFRyZWVzJyAidGFnIiBkYXRhCiogICBtb3ZlVG8oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlcyB0aGUgbm9kZXMgaW4gdGhpcyBjb2xsZWN0aW9uIHRvIHRoZSBnaXZlbiBub2RlL3RyZWUKKiAgIGNvcHlUbygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcGllcyB0aGUgbm9kZXMgaW4gdGhpcyBjb2xsZWN0aW9uIHRvIHRoZSBnaXZlbiBub2RlL3RyZWUKKi8KCmNsYXNzIEJsb2NrVHJlZQp7CiAgICAvKioKICAgICogVUlEIGNvdW50ZXIKICAgICogQHZhciBpbnRlZ2VyCiAgICAqLwogICAgdmFyICR1aWRDb3VudGVyOwogICAgCiAgICAvKioKICAgICogQ2hpbGQgbm9kZXMKICAgICogQHZhciBvYmplY3QKICAgICovCiAgICB2YXIgJG5vZGVzOwoKCS8qKgoJKiBDb250ZW50IGhhc2gKCSogQHZhciBhcnJheQoJKi8KCXZhciAkY29udGVudDsKCiAgICAvKioKICAgICogQ29uc3RydWN0b3IKICAgICovCiAgICBmdW5jdGlvbiBCbG9ja1RyZWUoKQogICAgewogICAgICAgICR0aGlzLT5ub2RlcyA9IG5ldyBCbG9ja1RyZWVfTm9kZUNvbGxlY3Rpb24oJHRoaXMpOwogICAgICAgICR0aGlzLT51aWRDb3VudGVyID0gMDsKCQkkdGhpcy0+Y29udGVudCA9IGFycmF5KCk7CiAgICB9CgoJZnVuY3Rpb24gJmdldFJvb3ROb2RlKCkKCXsKCQlyZXR1cm4gJHRoaXM7Cgl9CgkKCWZ1bmN0aW9uIGdldENoaWxkcmVuQ291bnQoKQoJewoJCXJldHVybiBjb3VudCgkdGhpcy0+bm9kZXMtPm5vZGVzKTsKCX0KCQoJZnVuY3Rpb24gJmdldE5vZGVCeUlEKCRpZCkKCXsKCQkkcmVzdWx0ID0gbnVsbDsKCQlpZiAoJGlkKQoJCXsKCQkJZGVidWdfYnVmZmVyKCdzdGFydCBmaW5kTm9kZUJ5VGFnJyk7CgkJCSRyZWYgPSBudWxsOwoJCQkkcmVzdWx0ID0mICR0aGlzLT5maW5kTm9kZUJ5VGFnKCRpZCwgJHJlZik7CgkJCWRlYnVnX2J1ZmZlcignZW5kIGZpbmROb2RlQnlUYWcnKTsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uICZzdXJlR2V0Tm9kZUJ5SUQoJGlkKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0Tm9kZUJ5SUQoJGlkKTsKCX0KCQoJZnVuY3Rpb24gJmdldE5vZGVCeUFsaWFzKCRhbGlhcykKCXsKCQkkcmVzdWx0ID0gbnVsbDsKCQkkaWQgPSBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoJGFsaWFzKTsKCQlpZiAoJGlkKQoJCXsKCQkJJHJlc3VsdCA9JiAkdGhpcy0+Z2V0Tm9kZUJ5SWQoJGlkKTsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uICZzdXJlR2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKTsKCX0KCQoJZnVuY3Rpb24gJmdldE5vZGVCeUhpZXJhcmNoeSgkcG9zaXRpb24pCgl7CgkJJHJlc3VsdCA9IG51bGw7CgkJJGlkID0gQmxvY2tDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUhpZXJhcmNoeSgkcG9zaXRpb24pOwoJCWlmICgkaWQpCgkJewoJCQkkcmVzdWx0ID0mICR0aGlzLT5nZXROb2RlQnlJZCgkaWQpOwoJCX0KCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLyoqCiAgICAqIFJldHVybnMgdHJ1ZS9mYWxzZSBhcyB0byB3aGV0aGVyIHRoaXMgbm9kZQoJKiBoYXMgYW55IGNoaWxkIG5vZGVzIG9yIG5vdC4KCSoKCSogQHJldHVybiBib29sIEFueSBjaGlsZCBub2RlcyBvciBub3QKICAgICovCglmdW5jdGlvbiBoYXNDaGlsZHJlbigpCgl7CgkJcmV0dXJuICFlbXB0eSgkdGhpcy0+bm9kZXMtPm5vZGVzKTsKCX0KCQoJLyoqCgkqIFJldHVybnMgYWxsIHRoZSBjaGlsZCBub2RlcyBmb3IgdGhpcwoJKiBub2RlLgoJKgoJKiBAcmV0dXJuIGFycmF5IEFsbCBvZiB0aGUgY2hpbGQgbm9kZXMKCSovCglmdW5jdGlvbiAmZ2V0Q2hpbGRyZW4oKQoJewoJCXJldHVybiAkdGhpcy0+bm9kZXMtPm5vZGVzOwoJfQoJCglmdW5jdGlvbiAmZ2V0RmxhdExpc3QoKQoJewoJCXJldHVybiAkdGhpcy0+bm9kZXMtPmdldEZsYXRMaXN0KCk7Cgl9CglmdW5jdGlvbiAmZ2V0RmxhdHRlbmVkQ2hpbGRyZW4oKQoJewoJCXJldHVybiAkdGhpcy0+bm9kZXMtPmdldEZsYXRMaXN0KCk7Cgl9CgkKCS8qKgoJKiBSZXR1cm5zIGEgbm9kZSBhbnl3aGVyZSBpbiB0aGUgdHJlZSBnaXZlbiBhIHRhZyBuYW1lLgoJKiBBIG51bGwgaXMgcmV0dXJuZWQgaWYgdGhlIG5vZGUgaXNuJ3QgZm91bmQuCgkqIAoJKiBAcmV0dXJuIG9iamVjdCBUaGUgZm91bmQgbm9kZQoJKi8KCWZ1bmN0aW9uICZmaW5kTm9kZUJ5VGFnKCR0YWduYW1lLCAmJGNvbCkKCXsKCQlpZiAoJGNvbCA9PSBudWxsKQoJCQkkY29sID0gJHRoaXM7CgkJCgkJJHJlc3VsdCA9IG51bGw7CgkJCgkJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGNvbC0+bm9kZXMtPm5vZGVzKTsgJGkrKykKCQl7CgkJCWlmICgkY29sLT5ub2Rlcy0+bm9kZXNbJGldLT5nZXRUYWcoKSA9PSAkdGFnbmFtZSkKCQkJCXJldHVybiAkY29sLT5ub2Rlcy0+bm9kZXNbJGldOwoJCQkkcmVzdWx0ID0mICR0aGlzLT5maW5kTm9kZUJ5VGFnKCR0YWduYW1lLCAkY29sLT5ub2Rlcy0+bm9kZXNbJGldKTsKCQkJaWYgKCRyZXN1bHQpCgkJCQlicmVhazsKCQl9CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CiAgICAKICAgIC8qKgogICAgKiBDcmVhdGVzIGEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIGxpc3Qgb2YgaXRlbXMuCiAgICAqIEl0ZW1zIG11c3QgYmUgc2VwYXJhdGVkIHVzaW5nIHRoZSBzdXBwbGllZCBzZXBhcmF0b3IuCiAgICAqIEVnOiAgICBhcnJheSgnZm9vJywKICAgICogICAgICAgICAgICAgICdmb28vYmFyJywKICAgICogICAgICAgICAgICAgICdmb28vYmFyL2plbGxvJywKICAgICogICAgICAgICAgICAgICdmb28vYmFyL2plbGxvMicsCiAgICAqICAgICAgICAgICAgICAnZm9vL2JhcjIvamVsbG8nKQogICAgKgogICAgKiBXb3VsZCBjcmVhdGUgYSBzdHJ1Y3R1cmUgdGh1czoKICAgICogICBmb28KICAgICogICAgKy1iYXIKICAgICogICAgfCAgKy1qZWxsbwogICAgKiAgICB8ICArLWplbGxvMgogICAgKiAgICArLWJhcjIKICAgICogICAgICAgKy1qZWxsbwogICAgKiAKICAgICogRXhhbXBsZSBjb2RlOgogICAgKiAgICRsaXN0ID0gYXJyYXkoJ0Zvby9CYXIvYmxhYXQnLCAnRm9vJywgJ0Zvby9CYXInLCAnRm9vL0Jhci9KZWxsbycsICdGb28vQmFyL0plbGxvMicsICdGb28vQmFyMi9KZWxsby9KZWxsbzInKTsKICAgICogICAkdHJlZSA9IFRyZWU6OmNyZWF0ZUZyb21MaXN0KCRsaXN0KTsKICAgICoKICAgICogQHBhcmFtICBhcnJheSAgJGRhdGEgICAgICBUaGUgbGlzdCBhcyBhbiBpbmRleGVkIGFycmF5CiAgICAqIEBwYXJhbSAgc3RyaW5nICRzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciB0byB1c2UKICAgICogQHJldHVybiBvYmplY3QgICAgICAgICAgICBBIHRyZWUgc3RydWN0dXJlIChUcmVlIG9iamVjdCkKICAgICovCiAgICBmdW5jdGlvbiAmY3JlYXRlRnJvbUxpc3QoJGRhdGEsICRzZXBhcmF0b3IgPSAnLycpCiAgICB7CiAgICAgICAgJG5vZGVMaXN0ID0gYXJyYXkoKTsKICAgICAgICAkdHJlZSAgICAgPSYgbmV3IEJsb2NrVHJlZSgpOwoKICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCRkYXRhKTsgJGkrKykgewogICAgICAgICAgICAkcGF0aFBhcnRzID0gZXhwbG9kZSgkc2VwYXJhdG9yLCAkZGF0YVskaV0pOwoKICAgICAgICAgICAgLy8gSWYgb25seSBvbmUgcGFydCB0aGVuIGFkZCBpdCBhcyBhIHJvb3Qgbm9kZSBpZgogICAgICAgICAgICAvLyBpdCdzIG5vdCBhbHJlYWR5IHByZXNlbnQuCiAgICAgICAgICAgIGlmIChjb3VudCgkcGF0aFBhcnRzKSA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRub2RlTGlzdFskcGF0aFBhcnRzWzBdXSkpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG5vZGVMaXN0WyRwYXRoUGFydHNbMF1dID0gJm5ldyBCbG9ja1RyZWVfTm9kZShhcnJheSgkcGF0aFBhcnRzWzBdLCAkZGF0YVskaV0pKTsKICAgICAgICAgICAgICAgICAgICAkdHJlZS0+bm9kZXMtPmFkZE5vZGUoJG5vZGVMaXN0WyRwYXRoUGFydHNbMF1dKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcnRzIG1lYW5zIGVhY2ggcGFydC9wYXJlbnQgY29tYmluYXRpb24KICAgICAgICAgICAgLy8gbmVlZHMgY2hlY2tpbmcgdG8gc2VlIGlmIGl0IG5lZWRzIGFkZGluZy4KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHRyZWU7CgogICAgICAgICAgICAgICAgZm9yICgkaj0wOyAkajxjb3VudCgkcGF0aFBhcnRzKTsgJGorKykgewogICAgICAgICAgICAgICAgICAgICRjdXJyZW50UGF0aCA9IGltcGxvZGUoJHNlcGFyYXRvciwgYXJyYXlfc2xpY2UoJHBhdGhQYXJ0cywgMCwgJGogKyAxKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkbm9kZUxpc3RbJGN1cnJlbnRQYXRoXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHBhcmVudCBvYmplY3QgdG8gYmUgdGhlIGV4aXN0aW5nIG5vZGUKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudE9iaiA9ICYkbm9kZUxpc3RbJGN1cnJlbnRQYXRoXTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGVMaXN0WyRjdXJyZW50UGF0aF0gPSAmbmV3IEJsb2NrVHJlZV9Ob2RlKGFycmF5KCRwYXRoUGFydHNbJGpdLCAkY3VycmVudFBhdGgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHBhcmVudCBvYmplY3QgdG8gYmUgdGhlIG5ldyBub2RlCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHBhcmVudE9iai0+bm9kZXMtPmFkZE5vZGUoJG5vZGVMaXN0WyRjdXJyZW50UGF0aF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJHRyZWU7CiAgICB9CgogICAgCiAgICAvKioKICAgICogTWVyZ2VzIHR3byBvciBtb3JlIHRyZWUgc3RydWN0dXJlcyBpbnRvIG9uZS4gQ2FuIHRha2UgZWl0aGVyIAogICAgKiBUcmVlIG9iamVjdHMgb3IgVHJlZV9Ob2RlIG9iamVjdHMgYXMgYXJndW1lbnRzIHRvIG1lcmdlLiBUaGlzIG1lcmdlCiAgICAqIHNpbXBseSBtZWFucyB0aGUgbm9kZXMgZnJvbSB0aGUgc2Vjb25kKyBhcmd1bWVudChzKSBhcmUgYWRkZWQgdG8KICAgICogdGhlIGZpcnN0LgogICAgKgogICAgKiBAcGFyYW0gb2JqZWN0ICR0cmVlIFRoZSBUcmVlL1RyZWVfTm9kZSBvYmplY3QgdG8gbWVyZ2Ugc3Vic2VxdWVudAogICAgKiAgICAgICAgICAgICAgICAgICAgIFRyZWUvVHJlZV9Ob2RlIG9iamVjdHMgd2l0aC4KICAgICogQHBhcmFtIC4uLiAgICAgICAgICBBbnkgbnVtYmVyIG9mIFRyZWUgb3IgVHJlZV9Ob2RlIG9iamVjdHMgdG8gYmUgbWVyZ2VkCiAgICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQuCiAgICAqIEByZXR1cm4gb2JqZWN0ICAgICAgUmVzdWx0aW5nIG1lcmdlZCBUcmVlL1RyZWVfTm9kZSBvYmplY3QKICAgICovCiAgICBmdW5jdGlvbiAmbWVyZ2UoJiR0cmVlKQogICAgewogICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgIGFycmF5X3NoaWZ0KCRhcmdzKTsKCiAgICAgICAgZm9yICgkaT0wOyAkaTxjb3VudCgkYXJncyk7ICRpKyspIHsKICAgICAgICAgICAgZm9yICgkaj0wOyAkajxjb3VudCgkYXJnc1skaV0tPm5vZGVzLT5ub2Rlcyk7ICRqKyspIHsKICAgICAgICAgICAgICAgICR0cmVlLT5ub2Rlcy0+YWRkTm9kZSgkYXJnc1skaV0tPm5vZGVzLT5ub2Rlc1skal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkdHJlZTsKICAgIH0KfQoKCi8qKgoqIEEgbm9kZSBjbGFzcyB0byBjb21wbGVtZW50IHRoZSBhYm92ZQoqIHRyZWUgY2xhc3MKKi8KY2xhc3MgQmxvY2tUcmVlX05vZGUKewogICAgLyoqCiAgICAqIFRoZSBkYXRhIHRoYXQgdGhpcyBub2RlIGhvbGRzCiAgICAqIEB2YXIgbWl4ZWQKICAgICovCiAgICB2YXIgJHRhZzsKCiAgICAvKioKICAgICogUGFyZW50IG5vZGUKICAgICogQHZhciBvYmplY3QKICAgICovCiAgICB2YXIgJHBhcmVudDsKICAgIAogICAgLyoqCiAgICAqIFRoZSBtYXN0ZXIgVHJlZSBvYmplY3QKICAgICogQHZhciBvYmplY3QKICAgICovCiAgICB2YXIgJHRyZWU7CiAgICAKICAgIC8qKgogICAgKiBUaGUgbm9kZXMgY29sbGVjdGlvbgogICAgKiBAdmFyIG9iamVjdAogICAgKi8KICAgIHZhciAkbm9kZXM7CgogICAgLyoqCiAgICAqIENvbnN0cnVjdG9yCiAgICAqCiAgICAqIEBwYXJhbSBtaXhlZCAkdGFnIFRoZSBkYXRhIHRoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMKICAgICovCiAgICBmdW5jdGlvbiBCbG9ja1RyZWVfTm9kZSgkdGFnID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cGFyZW50ID0gbnVsbDsKICAgICAgICAkdGhpcy0+bm9kZXMgID0gbmV3IEJsb2NrVHJlZV9Ob2RlQ29sbGVjdGlvbigkdGhpcyk7CgogICAgICAgIGlmICghaXNfbnVsbCgkdGFnKSkgewogICAgICAgICAgICAkdGhpcy0+dGFnID0gJHRhZzsKICAgICAgICB9CiAgICB9CgoJLyoqCgkqIEdldHMgdGhlIHVuZGVybHlpbmcgY29udGVudCBvZiB0aGlzIG5vZGUKCSovCglmdW5jdGlvbiAmZ2V0Q29udGVudCgpCgl7CgkJLy9UT0RPOiBMb29rdXAgbm9kZSBpbiB0cmVlJ3MgbGlzdAoJCS8vICAgICAgUHVsbCBpdCBmcm9tIHRoZSBkYiBpZiBpdCdzIG5vdCBsb2FkZWQgYWxyZWFkeQoJCS8vICAgICAgTG90cyBvZiByb29tIGZvciBvcHRpbWl6YXRpb24gaGVyZQoJCSRjb250ZW50ID0gbnVsbDsKCQkKCQkkdHJlZSA9JiAkdGhpcy0+Z2V0VHJlZSgpOwoJCWlmIChpc3NldCgkdHJlZS0+Y29udGVudFskdGhpcy0+Z2V0VGFnKCldKSkKCQl7CgkJCSRjb250ZW50ID0mICR0cmVlLT5jb250ZW50WyR0aGlzLT5nZXRUYWcoKV07CgkJfQoJCWVsc2UKCQl7CgkJCS8vQmFzaWMgb25lLiAgSnVzdCB0cnkgdG8gbG9hZCBpdCBzZXBhcmF0ZWx5CgkJCS8vaW50byBvdXIgbGlzdC4gIEdldCB0aGUgcHJvcHMsIHNpbmNlIGEgb25lIHRpbWVyCgkJCS8vd2lsbCBwcm9iYWJseSBoYXZlIHNvbWUgcHJvcGVydHkgc2hvd24KCQkJJGNvbnRlbnQgPSYgQmxvY2tDb250ZW50TWFuYWdlcjo6TG9hZENvbnRlbnRGcm9tSWQoJHRoaXMtPmdldFRhZygpLCB0cnVlKTsKCQkJJHRyZWUtPmNvbnRlbnRbJHRoaXMtPmdldFRhZygpXSA9JiAkY29udGVudDsKCQl9CgkJcmV0dXJuICRjb250ZW50OwoJfQogICAgCiAgICAvKioKICAgICogU2V0cyB0aGUgdGFnIGRhdGEKICAgICoKICAgICogQHBhcmFtIG1peGVkICR0YWcgVGhlIGRhdGEgdG8gc2V0IHRoZSB0YWcgdG8KICAgICovCiAgICBmdW5jdGlvbiBzZXRUYWcoJHRhZykKICAgIHsKICAgICAgICAkdGhpcy0+dGFnID0gJHRhZzsKICAgIH0KICAgIAogICAgLyoqCiAgICAqIFJldHVybnMgdGhlIHRhZyBkYXRhCiAgICAqCiAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHRhZyBkYXRhCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0VGFnKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRhZ1swXTsKICAgIH0KCiAgICAvKioKICAgICogU2V0cyB0aGUgbm9kZXMgVUlECiAgICAqIAogICAgKiBAcGFyYW0gaW50ZWdlciAkdWlkIFRoZSBVSUQKICAgICovCiAgICBmdW5jdGlvbiBzZXRVSUQoJiR1aWQpCiAgICB7CiAgICAgICAgJHRoaXMtPnVpZCA9ICsrJHVpZDsKCiAgICAgICAgLy8gU2V0IHVpZCBmb3IgY2hpbGQgbm9kZXMKICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCR0aGlzLT5ub2Rlcy0+bm9kZXMpOyAkaSsrKSB7CiAgICAgICAgICAgICR0aGlzLT5ub2Rlcy0+bm9kZXNbJGldLT5zZXRVSUQoJHVpZCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBub2RlIFVJRAogICAgKiAKICAgICogQHJldHVybiBpbnRlZ2VyIFRoZSBVSUQKICAgICovCiAgICBmdW5jdGlvbiBnZXRVSUQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dWlkOwogICAgfQoKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBjaGlsZCBub2RlIGluIHRoZSBwYXJlbnRzIG5vZGUgYXJyYXksCiAgICAqIG9yIG51bGwgaWYgdGhpcyBub2RlIGlzIHRoZSBmaXJzdC4KICAgICoKICAgICogQHJldHVybiBvYmplY3QgQSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIG5vZGUgaW4gdGhlIHBhcmVudAogICAgKiAgICAgICAgICAgICAgICBub2RlIGNvbGxlY3Rpb24KICAgICovCiAgICBmdW5jdGlvbiAmcHJldlNpYmxpbmcoKQogICAgewogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPnBhcmVudCkpIHsKICAgICAgICAgICAgJHBhcmVudE9iaiA9ICYkdGhpcy0+cGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHRoaXMtPnRyZWU7CiAgICAgICAgfQoKICAgICAgICAkbXlJbmRleCA9ICRwYXJlbnRPYmotPm5vZGVzLT5pbmRleE9mKCR0aGlzKTsKCiAgICAgICAgaWYgKCRteUluZGV4ID4gMCkgewogICAgICAgICAgICByZXR1cm4gJHBhcmVudE9iai0+bm9kZXMtPm5vZGVzWyRteUluZGV4IC0gMV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICogUmV0dXJucyB0aGUgbmV4dCBjaGlsZCBub2RlIGluIHRoZSBwYXJlbnRzIG5vZGUgYXJyYXksCiAgICAqIG9yIG51bGwgaWYgdGhpcyBub2RlIGlzIHRoZSBsYXN0LgogICAgKgogICAgKiBAcmV0dXJuIG9iamVjdCBBIHJlZmVyZW5jZSB0byB0aGUgbmV4dCBub2RlIGluIHRoZSBwYXJlbnQKICAgICogICAgICAgICAgICAgICAgbm9kZSBjb2xsZWN0aW9uLgogICAgKi8KICAgIGZ1bmN0aW9uICZuZXh0U2libGluZygpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+cGFyZW50KSkgewogICAgICAgICAgICAkcGFyZW50T2JqID0gJiR0aGlzLT5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhcmVudE9iaiA9ICYkdGhpcy0+dHJlZTsKICAgICAgICB9CgogICAgICAgICRteUluZGV4ID0gJHBhcmVudE9iai0+bm9kZXMtPmluZGV4T2YoJHRoaXMpOwoKICAgICAgICBpZiAoJG15SW5kZXggPCAoJHBhcmVudE9iai0+bm9kZXMtPmdldE5vZGVDb3VudCgpIC0gMSkpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXJlbnRPYmotPm5vZGVzLT5ub2Rlc1skbXlJbmRleCArIDFdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgoJZnVuY3Rpb24gZ2V0U2libGluZ0NvdW50KCkKCXsKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5wYXJlbnQpKSB7CiAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHRoaXMtPnBhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGFyZW50T2JqID0gJiR0aGlzLT50cmVlOwogICAgICAgIH0KCQkKCQlyZXR1cm4gJHBhcmVudE9iai0+bm9kZXMtPmdldE5vZGVDb3VudCgpOwoJfQogICAgCiAgICAvKioKICAgICogUmVtb3ZlcyB0aGlzIG5vZGUgZnJvbSBpdHMnIHBhcmVudC4gSWYgdGhpcwogICAgKiBub2RlIGhhcyBubyBwYXJlbnQgKGllIGl0cyBub3QgYmVlbiBhZGRlZCB0bwogICAgKiBhIFRyZWUgb3IgVHJlZV9Ob2RlIG9iamVjdCkgdGhlbiB0aGlzIG1ldGhvZAogICAgKiB3aWxsIGRvIG5vdGhpbmcuCiAgICAqLwogICAgZnVuY3Rpb24gcmVtb3ZlKCkKICAgIHsKICAgICAgICBpZiAoIWlzX251bGwoJHRoaXMtPnBhcmVudCkpIHsKICAgICAgICAgICAgJHRoaXMtPnBhcmVudC0+bm9kZXMtPnJlbW92ZU5vZGUoJHRoaXMpOwogICAgICAgIH0gZWxzZWlmICghaXNfbnVsbCgkdGhpcy0+dHJlZSkpIHsKCQkJJHRoaXMtPnRyZWUtPm5vZGVzLT5yZW1vdmVOb2RlKCR0aGlzKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQogICAgfQoKICAgIC8qKgogICAgKiBTZXRzIHRoZSBtYXN0ZXIgVHJlZSBvYmplY3QgZm9yIHRoaXMKICAgICogbm9kZS4KICAgICoKICAgICogQHBhcmFtIG9iamVjdCAkdHJlZSBUaGUgVHJlZSBvYmplY3QgcmVmZXJlbmNlCiAgICAqLwogICAgZnVuY3Rpb24gc2V0VHJlZSgmJHRyZWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnRyZWUgPSAmJHRyZWU7CgogICAgICAgIC8vIFNldCB0cmVlIGZvciBjaGlsZCBub2RlcwogICAgICAgIGZvciAoJGk9MDsgJGk8Y291bnQoJHRoaXMtPm5vZGVzLT5ub2Rlcyk7ICRpKyspIHsKICAgICAgICAgICAgJHRoaXMtPm5vZGVzLT5ub2Rlc1skaV0tPnNldFRyZWUoJHRyZWUpOwogICAgICAgIH0KICAgIH0KCQoJLyoqCiAgICAqIFJldHVybnMgdGhlIHRyZWUgb2JqZWN0IHdoaWNoIHRoaXMgbm9kZSBpcyBhdHRhY2hlZAoJKiB0byAoaWYgYW55KS4KCSoKCSogQHJldHVybiBvYmplY3QgVGhlIGVuY29tcGFzc2luZyBUcmVlIG9iamVjdAogICAgKi8KCWZ1bmN0aW9uICZnZXRUcmVlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPnRyZWU7Cgl9CgogICAgLyoqCiAgICAqIFNldHMgdGhlIHBhcmVudCBub2RlIG9mIHRoZSBub2RlLgogICAgKgogICAgKiBAcGFyYW0gb2JqZWN0ICRub2RlIFRoZSBwYXJlbnQgbm9kZQogICAgKi8KICAgIGZ1bmN0aW9uIHNldFBhcmVudCgmJG5vZGUpCiAgICB7CiAgICAgICAgJHRoaXMtPnBhcmVudCA9ICYkbm9kZTsKICAgIH0KCQoJLyoqCiAgICAqIFJldHVybnMgdGhlIHBhcmVudCBub2RlIGlmIGFueQoJKgoJKiBAcmV0dXJuIG9iamVjdCBUaGUgcGFyZW50IFRyZWVfTm9kZSBvYmplY3QKICAgICovCglmdW5jdGlvbiAmZ2V0UGFyZW50KCkKCXsKCQlyZXR1cm4gJHRoaXMtPnBhcmVudDsKCX0KCQoJLyoqCiAgICAqIFJldHVybnMgdGhlIHBhcmVudCBub2RlIGlmIGFueSAtLSBiYWNrd2FyZHMgY29tcGF0aWJsZQoJKiB3aXRoIHRoZSBvbGQgaGllcmFyY2h5IG1hbmFnZXIgY29kZS4KCSoKCSogQHJldHVybiBvYmplY3QgVGhlIHBhcmVudCBUcmVlX05vZGUgb2JqZWN0CiAgICAqLwoJZnVuY3Rpb24gJmdldFBhcmVudE5vZGUoKQoJewoJCXJldHVybiAkdGhpcy0+cGFyZW50OwoJfQoJCgkvKioKICAgICogUmV0dXJucyB0cnVlL2ZhbHNlIGFzIHRvIHdoZXRoZXIgdGhpcyBub2RlCgkqIGhhcyBhbnkgY2hpbGQgbm9kZXMgb3Igbm90LgoJKgoJKiBAcmV0dXJuIGJvb2wgQW55IGNoaWxkIG5vZGVzIG9yIG5vdAogICAgKi8KCWZ1bmN0aW9uIGhhc0NoaWxkcmVuKCkKCXsKCQlyZXR1cm4gIWVtcHR5KCR0aGlzLT5ub2Rlcy0+bm9kZXMpOwoJfQoJCgkvKioKCSogUmV0dXJucyBhbGwgdGhlIGNoaWxkIG5vZGVzIGZvciB0aGlzCgkqIG5vZGUuCgkqCgkqIEByZXR1cm4gYXJyYXkgQWxsIG9mIHRoZSBjaGlsZCBub2RlcwoJKi8KCWZ1bmN0aW9uICZnZXRDaGlsZHJlbigpCgl7CgkJLy9UT0RPOiBXcml0ZSBhIGJpdCBoZXJlIHRoYXQgcHVsbHMgYmFjayBhbGwKCQkvL2NoaWxkcmVuIGluIG9uZSBzaG90IGlmIHRoZXkncmUgbm90IGFscmVhZHkgbG9hZGVkCgkJaWYgKCR0aGlzLT5oYXNDaGlsZHJlbigpKSB7CgkJCSRub2RlID0mICR0aGlzLT5ub2Rlcy0+bm9kZXNbMF07CgkJCSRjaGVja2lkID0gJG5vZGUtPmdldFRhZygpOwoJCQkkdHJlZSA9JiAkdGhpcy0+Z2V0VHJlZSgpOwoJCQlpZiAoIWlzc2V0KCR0cmVlLT5jb250ZW50WyRjaGVja2lkXSkpIHsKCQkJCUJsb2NrQ29udGVudE1hbmFnZXI6OkxvYWRDaGlsZHJlbkludG9UcmVlKCR0aGlzLT5nZXRUYWcoKSwgJHRoaXMtPnRyZWUpOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+bm9kZXMtPm5vZGVzOwoJfQoJCglmdW5jdGlvbiBnZXRDaGlsZHJlbkNvdW50KCkKCXsKCQlyZXR1cm4gY291bnQoJHRoaXMtPm5vZGVzLT5ub2Rlcyk7Cgl9CgkKCS8qKgogICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBpbiB0aGUgdHJlZSBvZiB0aGlzIG5vZGUKCSogVGhpcyBpcyBhIHplcm8gYmFzZWQgaW5kaWNhdG9yLCBzbyByb290IG5vZGVzCgkqIHdpbGwgaGF2ZSBhIGRlcHRoIG9mIDAgKHplcm8pLgoJKgoJKiBAcmV0dXJuIGludGVnZXIgVGhlIGRlcHRoIG9mIHRoZSBub2RlCiAgICAqLwoJZnVuY3Rpb24gZGVwdGgoKQoJewoJCSRkZXB0aCA9IDA7CgkJJGN1cnJMZXZlbCA9ICYkdGhpczsKCgkJd2hpbGUgKCRjdXJyTGV2ZWwtPnBhcmVudCkgewoJCQkkZGVwdGgrKzsKCQkJJGN1cnJMZXZlbCA9ICYkY3VyckxldmVsLT5wYXJlbnQ7CgkJfQoJCQoJCXJldHVybiAkZGVwdGg7Cgl9CgkKCS8qKgoJKiBSZXR1cm5zIHRoZSBkZXB0aCBpbiB0aGUgdHJlZS4gIFRoaXMgaXMgdG8gbWFrZSB0aGlzIGJhY2t3YXJkcwoJKiBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCBoaWVyYXJjaHkgbWFuYWdlci4KCSoKCSogQHJldHVybiBpbnRlZ2VyIFRoZSBkZXB0aCBvZiB0aGUgbm9kZS4KCSovCglmdW5jdGlvbiBnZXRMZXZlbCgpCgl7CgkJcmV0dXJuICR0aGlzLT5kZXB0aCgpOwoJfQoJCgkvKioKICAgICogUmV0dXJucyB0cnVlL2ZhbHNlIGFzIHRvIHdoZXRoZXIgdGhpcyBub2RlIGlzIGEgY2hpbGQKCSogb2YgdGhlIGdpdmVuIG5vZGUuCgkqCgkqIEBwYXJhbSAgb2JqZWN0ICRwYXJlbnQgVGhlIHN1c3BlY3RlZCBwYXJlbnQgVHJlZV9Ob2RlIG9iamVjdAoJKiBAcmV0dXJuIGJvb2wgICAgICAgICAgIFdoZXRoZXIgdGhpcyBub2RlIGlzIGEgY2hpbGQgb2YgdGhlIHN1c3BlY3RlZCBwYXJlbnQKICAgICovCglmdW5jdGlvbiBpc0NoaWxkT2YoJHBhcmVudCkKCXsKCQlyZXR1cm4gJHRoaXMtPnBhcmVudC0+dWlkID09PSAkcGFyZW50LT51aWQ7Cgl9CgkKCS8qKgogICAgKiBNb3ZlcyB0aGlzIG5vZGUgdG8gYSBuZXcgcGFyZW50LiBBbGwgY2hpbGQgbm9kZXMgd2lsbAoJKiBiZSByZXRhaW5lZC4KCSoKCSogQHBhcmFtIG9iamVjdCAkbmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IFRyZWVfTm9kZSBvciBUcmVlIG9iamVjdAogICAgKi8KCWZ1bmN0aW9uIG1vdmVUbygmJG5ld1BhcmVudCkKCXsKCQkvLyBTb21ld2hhdCBuYXN0eSBjb2RlCgkJJG5ld1BhcmVudC0+bm9kZXMtPm5vZGVzW10gPSAmJHRoaXM7CgoJCWlmICgkdGhpcy0+cGFyZW50KSB7CgkJCXVuc2V0KCR0aGlzLT5wYXJlbnQtPm5vZGVzLT5ub2Rlc1skdGhpcy0+cGFyZW50LT5ub2Rlcy0+aW5kZXhPZigkdGhpcyldKTsKCQkJJHRoaXMtPnBhcmVudC0+bm9kZXMtPm5vZGVzID0gYXJyYXlfdmFsdWVzKCR0aGlzLT5wYXJlbnQtPm5vZGVzLT5ub2Rlcyk7CgkJfSBlbHNlIHsKCQkJdW5zZXQoJHRoaXMtPnRyZWUtPm5vZGVzLT5ub2Rlc1skdGhpcy0+dHJlZS0+bm9kZXMtPmluZGV4T2YoJHRoaXMpXSk7CgkJCSR0aGlzLT50cmVlLT5ub2Rlcy0+bm9kZXMgPSBhcnJheV92YWx1ZXMoJHRoaXMtPnRyZWUtPm5vZGVzLT5ub2Rlcyk7CgkJfQoKCQlpZiAoc3RyY2FzZWNtcChnZXRfY2xhc3MoJG5ld1BhcmVudCksICdUcmVlX05vZGUnKSA9PSAwKSB7CgkJCSR0aGlzLT5wYXJlbnQgPSAmJG5ld1BhcmVudDsKCQl9IGVsc2UgewoJCQl1bnNldCgkdGhpcy0+cGFyZW50KTsKCQl9Cgl9CgkKCS8qKgogICAgKiBDb3BpZXMgdGhpcyBub2RlIHRvIGEgbmV3IHBhcmVudC4gVGhpcyBjb3BpZXMgdGhlIG5vZGUKCSogdG8gdGhlIG5ldyBwYXJlbnQgbm9kZS90cmVlIGFuZCBhbGwgaXRzIGNoaWxkIG5vZGVzIChpZQoJKiBhIGRlZXAgY29weSkuIFRlY2huaWNhbGx5LCBuZXcgbm9kZXMgYXJlIGNyZWF0ZWQgd2l0aCBjb3BpZXMKCSogb2YgdGhlIHRhZyBkYXRhLCBzaW5jZSB0aGlzIGlzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKCSogdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcyBjb3B5aW5nLgoJKgoJKiBAcGFyYW0gIG9iamVjdCAkbmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IFRyZWVfTm9kZSBvciBUcmVlIG9iamVjdAoJKiBAcmV0dXJuIG9iamVjdCAgICAgICAgICAgIFRoZSBuZXcgbm9kZQogICAgKi8KCWZ1bmN0aW9uICZjb3B5VG8oJiRuZXdQYXJlbnQpCgl7CgkJJG5ld05vZGUgPSAmJG5ld1BhcmVudC0+bm9kZXMtPmFkZE5vZGUobmV3IFRyZWVfbm9kZSgkdGhpcy0+Z2V0VGFnKCkpKTsKCgkJZm9yICgkaT0wOyAkaTxjb3VudCgkdGhpcy0+bm9kZXMtPm5vZGVzKTsgJGkrKykgewoJCQkkdGhpcy0+bm9kZXMtPm5vZGVzWyRpXS0+Y29weVRvKCRuZXdOb2RlKTsKCQl9CgkJCgkJcmV0dXJuICRuZXdOb2RlOwoJfQp9CgovKioKKiBBIGNsYXNzIHRvIHJlcHJlc2VudCBhIGNvbGxlY3Rpb24gb2YgY2hpbGQgbm9kZXMKKi8KY2xhc3MgIEJsb2NrVHJlZV9Ob2RlQ29sbGVjdGlvbgp7CiAgICAvKioKICAgICogQW4gYXJyYXkgb2YgY2hpbGQgbm9kZXMKICAgICogQHZhciBhcnJheQogICAgKi8KICAgIHZhciAkbm9kZXM7CiAgICAKICAgIC8qKgogICAgKiBUaGUgY29udGFpbmluZyBub2RlL3RyZWUgb2JqZWN0CiAgICAqIEB2YXIgb2JqZWN0CiAgICAqLwogICAgdmFyICRjb250YWluZXI7CiAgICAKICAgIC8qKgogICAgKiBXaGV0aGVyIHRoZSBjb250YWluZXIgaXMgYSB0cmVlIG9iamVjdCBvciBub3QKICAgICogQHZhciBib29sZWFuCiAgICAqLwogICAgdmFyICRjb250YWluZXJJc1RyZWU7CiAgICAKICAgIC8qKgogICAgKiBXaGV0aGVyIHRoZSBjb250YWluZXIgaXMgYSB0cmVlIG5vZGUgb2JqZWN0IG9yIG5vdAogICAgKiBAdmFyIGJvb2xlYW4KICAgICovCiAgICB2YXIgJGNvbnRhaW5lcklzTm9kZTsKCQoJLyoqCiAgICAqIFRlbXBvcmFyeSBob2xkZXIgZm9yIHRoZSBmb3VuZCBub2RlIHVzZWQgaW4gdGhlCgkqIHNlYXJjaCBmdW5jdGlvbi4KCSogQHZhciBvYmplY3QKICAgICovCgl2YXIgJHNlYXJjaEZvdW5kTm9kZTsKCiAgICAvKioKICAgICogQ29uc3RydWN0b3IKICAgICovCiAgICBmdW5jdGlvbiBCbG9ja1RyZWVfTm9kZUNvbGxlY3Rpb24oJiRjb250YWluZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPm5vZGVzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyID0gJiRjb250YWluZXI7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcklzVHJlZSA9IChzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGFpbmVyKSkgPT0gJ3RyZWUnKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVySXNOb2RlID0gKHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCRjb250YWluZXIpKSA9PSAndHJlZV9ub2RlJyk7CiAgICB9CgogICAgLyoqCiAgICAqIEFkZHMgYSBub2RlIHRvIHRoaXMgbm9kZQogICAgKgogICAgKiBAcGFyYW0gIG9iamVjdCAkbm9kZSBUaGUgVHJlZV9Ob2RlIG9iamVjdAogICAgKiBAcmV0dXJuIG9iamVjdCAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbmV3IG5vZGUgaW5zaWRlIHRoZSB0cmVlCiAgICAqLwogICAgZnVuY3Rpb24gJmFkZE5vZGUoJiRub2RlKQogICAgewogICAgICAgIC8vIENvbnRhaW5lciBpcyBhIG5vZGUKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5lcklzTm9kZSkgewogICAgICAgICAgICAkbm9kZS0+c2V0UGFyZW50KCR0aGlzLT5jb250YWluZXIpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+Y29udGFpbmVyLT50cmVlKSkgewogICAgICAgICAgICAgICAgJG5vZGUtPnNldFRyZWUoJHRoaXMtPmNvbnRhaW5lci0+dHJlZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghZW1wdHkoJHRoaXMtPmNvbnRhaW5lci0+dWlkKSkgewogICAgICAgICAgICAgICAgJG5vZGUtPnNldFVJRCgkdGhpcy0+Y29udGFpbmVyLT50cmVlLT51aWRDb3VudGVyKTsKICAgICAgICAgICAgfQoKICAgICAgICAvLyBDb250YWluZXIgaXMgYSB0cmVlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5vZGUtPnNldFRyZWUoJHRoaXMtPmNvbnRhaW5lcik7CiAgICAgICAgICAgICRub2RlLT5zZXRVSUQoJHRoaXMtPmNvbnRhaW5lci0+dWlkQ291bnRlcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bm9kZXNbXSA9ICYkbm9kZTsKCiAgICAgICAgcmV0dXJuICRub2RlOwogICAgfQoKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBub2RlIGluIHRoaXMgcGFydGljdWxhciBjb2xsZWN0aW9uCiAgICAqCiAgICAqIEByZXR1cm4gb2JqZWN0IFRoZSBmaXJzdCBub2RlLiBOVUxMIGlmIG5vIG5vZGVzLgogICAgKi8KICAgIGZ1bmN0aW9uICZmaXJzdE5vZGUoKQogICAgewogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm5vZGVzKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm5vZGVzWzBdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGxhc3Qgbm9kZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29sbGVjdGlvbgogICAgKgogICAgKiBAcmV0dXJuIG9iamVjdCBUaGUgbGFzdCBub2RlLiBOVUxMIGlmIG5vIG5vZGVzLgogICAgKi8KICAgIGZ1bmN0aW9uICZsYXN0Tm9kZSgpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+bm9kZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bm9kZXNbY291bnQoJHRoaXMtPm5vZGVzKSAtIDFdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGNoaWxkIG5vZGVzIGFycmF5IGF0IHRoZQogICAgKiBzcGVjaWZpZWQgKHplcm8gYmFzZWQpIGluZGV4LgogICAgKgogICAgKiBAcGFybSAgIGludGVnZXIgJGluZGV4IFRoZSBpbmRleCB0byByZW1vdmUKICAgICogQHJldHVybiBvYmplY3QgICAgICAgICBUaGUgbm9kZSB0aGF0IHdhcyByZW1vdmVkLCBvciBudWxsCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhpcyBpbmRleCBkaWQgbm90IGV4aXN0CiAgICAqLwogICAgZnVuY3Rpb24gJnJlbW92ZU5vZGVBdCgkaW5kZXgpCiAgICB7CiAgICAgICAgJG5vZGUgPSBudWxsOwogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm5vZGVzWyRpbmRleF0pKSB7CiAgICAgICAgICAgICRub2RlID0gJiR0aGlzLT5ub2Rlc1skaW5kZXhdOwoKICAgICAgICAgICAgLy8gVW5zZXQgcGFyZW50LCB0cmVlIGFuZCB1aWQgdmFsdWVzCiAgICAgICAgICAgIHVuc2V0KCRub2RlLT51aWQpOwogICAgICAgICAgICB1bnNldCgkbm9kZS0+cGFyZW50KTsKICAgICAgICAgICAgdW5zZXQoJG5vZGUtPnRyZWUpOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+bm9kZXNbJGluZGV4XSk7CiAgICAgICAgICAgICR0aGlzLT5ub2RlcyA9IGFycmF5X3ZhbHVlcygkdGhpcy0+bm9kZXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRub2RlOwogICAgfQogICAgCiAgICAvKioKICAgICogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgY2hpbGQgbm9kZXMgYXJyYXkgYnkgdXNpbmcKICAgICogdGhlIHVuaXF1ZSBJRCBzdG9yZWQgaW4gZWFjaCBpbnN0YW5jZQogICAgKgogICAgKiBAcGFyYW0gIG9iamVjdCAkbm9kZSAgIFRoZSBub2RlIHRvIHJlbW92ZQogICAgKiBAcGFyYW0gIGJvb2wgICAkc2VhcmNoIFdoZXRoZXIgdG8gc2VhcmNoIGNoaWxkIG5vZGVzCiAgICAqIEByZXR1cm4gYm9vbCAgICAgICAgICAgVHJ1ZS9GYWxzZQogICAgKi8KICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUoJiRub2RlLCAkc2VhcmNoID0gZmFsc2UpCiAgICB7CiAgICAgICAgZm9yICgkaT0wOyAkaTxjb3VudCgkdGhpcy0+bm9kZXMpOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bm9kZXNbJGldLT5nZXRVSUQoKSA9PSAkbm9kZS0+Z2V0VUlEKCkpIHsKCiAgICAgICAgICAgICAgICAvLyBVbnNldCBwYXJlbnQsIHRyZWUgYW5kIHVpZCB2YWx1ZXMKICAgICAgICAgICAgICAgIHVuc2V0KCRub2RlLT51aWQpOwogICAgICAgICAgICAgICAgdW5zZXQoJG5vZGUtPnBhcmVudCk7CiAgICAgICAgICAgICAgICB1bnNldCgkbm9kZS0+dHJlZSk7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+bm9kZXNbJGldKTsKICAgICAgICAgICAgICAgICR0aGlzLT5ub2RlcyA9IEBhcnJheV92YWx1ZXMoJHRoaXMtPm5vZGVzKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9IGVsc2VpZiAoJHNlYXJjaCBBTkQgIWVtcHR5KCR0aGlzLT5ub2Rlc1skaV0tPm5vZGVzKSkgewogICAgICAgICAgICAgICAgJHNlYXJjaE5vZGVzW10gPSAkaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJHNlYXJjaCBBTkQgIWVtcHR5KCRzZWFyY2hOb2RlcykpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHNlYXJjaE5vZGVzIGFzICRpbmRleCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5ub2Rlc1skaW5kZXhdLT5yZW1vdmVOb2RlKCRub2RlLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBpbmRleCBpbiB0aGUgbm9kZXMgYXJyYXkgYXQgd2hpY2gKICAgICogdGhlIGdpdmVuIG5vZGUgcmVzaWRlcy4gVXNlZCBpbiB0aGUgcHJldi9uZXh0IFNpYmxpbmcKICAgICogbWV0aG9kcy4KICAgICoKICAgICogQHBhcmFtICBvYmplY3QgJG5vZGUgVGhlIG5vZGUgdG8gcmV0dXJuIHRoZSBpbmRleCBvZgogICAgKiBAcmV0dXJuIGludGVnZXIgICAgICBUaGUgaW5kZXggb2YgdGhlIG5vZGUgb3IgbnVsbCBpZgogICAgKiAgICAgICAgICAgICAgICAgICAgICBub3QgZm91bmQuCiAgICAqLwogICAgZnVuY3Rpb24gaW5kZXhPZigkbm9kZSkKICAgIHsKICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCR0aGlzLT5ub2Rlcyk7ICRpKyspIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5ub2Rlc1skaV0tPmdldFVJRCgpID09ICRub2RlLT5nZXRVSUQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICAvKioKICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzIGluIHRoaXMgbm9kZS90cmVlLgogICAgKiBPcHRpb25hbGx5IHNlYXJjaGVzIHRoZSB0cmVlIGFuZCByZXR1cm5zIHRoZSBjdW11bGF0aXZlIGNvdW50LgogICAgKgogICAgKiBAcGFyYW0gIGJvb2wgICAgJHNlYXJjaCBTZWFyY2ggdHJlZSBmb3Igbm9kZWNvdW50IHRvbwogICAgKiBAcmV0dXJuIGludGVnZXIgICAgICAgICBUaGUgbnVtYmVyIG9mIG5vZGVzIGZvdW5kCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0Tm9kZUNvdW50KCRzZWFyY2ggPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJHNlYXJjaCkgewogICAgICAgICAgICAkY291bnQgPSBjb3VudCgkdGhpcy0+bm9kZXMpOwogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCR0aGlzLT5ub2Rlcyk7ICRpKyspIHsKICAgICAgICAgICAgICAgICRjb3VudCArPSAkdGhpcy0+bm9kZXNbJGldLT5ub2Rlcy0+Z2V0Tm9kZUNvdW50KHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gJGNvdW50OwogICAgICAgIH0gZWxzZSB7CgkgICAgCSRjb3VudCA9IGNvdW50KCR0aGlzLT5ub2Rlcyk7CiAgICAgICAgICAgIHJldHVybiAkY291bnQ7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICogUmV0dXJucyBhIGZsYXQgbGlzdCBvZiB0aGUgbm9kZSBjb2xsZWN0aW9uLiBUaGlzIGFycmF5IGNvbnRhaW5zIHJlZmVyZW5jZXMKCSogdG8gdGhlIG5vZGVzLgogICAgKgogICAgKiBAcmV0dXJuIGFycmF5IEZsYXQgbGlzdCBvZiB0aGUgbm9kZXMgZnJvbSB0b3AgdG8gYm90dG9tLCBsZWZ0IHRvIHJpZ2h0LgogICAgKi8KICAgIGZ1bmN0aW9uICZnZXRGbGF0TGlzdCgpCiAgICB7CiAgICAgICAgJHJldHVybiA9IGFycmF5KCk7CgoJCWZvciAoJGk9MDsgJGk8Y291bnQoJHRoaXMtPm5vZGVzKTsgJGkrKykgewoJCQkkcmV0dXJuW10gPSAmJHRoaXMtPm5vZGVzWyRpXTsKCQkJCgkJCWlmICghZW1wdHkoJHRoaXMtPm5vZGVzWyRpXS0+bm9kZXMpKSB7CgkJCQkkcmV0dXJuID0gYXJyYXlfbWVyZ2UoJHJldHVybiwgJHRoaXMtPm5vZGVzWyRpXS0+bm9kZXMtPmdldEZsYXRMaXN0KCkpOwoJCQl9CgkJfQogICAgICAgIAogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQogICAgCiAgICAvKioKICAgICogVHJhdmVyc2VzIHRoZSBub2RlIGNvbGxlY3Rpb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0byBlYWNoIGFuZCBldmVyeSBub2RlLgogICAgKiBUaGUgZnVuY3Rpb24gbmFtZSBnaXZlbiAodGhvdWdoIHRoaXMgY2FuIGJlIGFueXRoaW5nIHlvdSBjYW4gc3VwcGx5IHRvIAogICAgKiBjYWxsX3VzZXJfZnVuYygpLCBub3QganVzdCBhIG5hbWUpIHNob3VsZCB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50IHdoaWNoIGlzIHRoZQogICAgKiBub2RlIG9iamVjdCAoVHJlZV9Ob2RlIGNsYXNzKS4gWW91IGNhbiB0aGVuIGFjY2VzcyB0aGUgbm9kZXMgZGF0YSBieSB1c2luZwogICAgKiB0aGUgZ2V0VGFnKCkgbWV0aG9kLiBUaGUgdHJhdmVyc2FsIGdvZXMgZnJvbSB0b3AgdG8gYm90dG9tLCBsZWZ0IHRvIHJpZ2h0CiAgICAqIChpZSBzYW1lIG9yZGVyIGFzIHdoYXQgeW91IGdldCBmcm9tIGdldEZsYXRMaXN0KCkpLgogICAgKgogICAgKiAqKiBUaGUgbm9kZSBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiEgKioKICAgICoKICAgICogQHBhcmFtIGNhbGxiYWNrICRmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdXNlCiAgICAqLwogICAgZnVuY3Rpb24gdHJhdmVyc2UoJGZ1bmN0aW9uKQogICAgewogICAgICAgIGZvciAoJGk9MDsgJGk8Y291bnQoJHRoaXMtPm5vZGVzKTsgJGkrKykgewogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkZnVuY3Rpb24sIGFycmF5KCYkdGhpcy0+bm9kZXNbJGldKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBSZWN1cnNlCiAgICAgICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm5vZGVzWyRpXSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5ub2Rlc1skaV0tPm5vZGVzLT50cmF2ZXJzZSgkZnVuY3Rpb24pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoJCgkvKioKICAgICogU2VhcmNoZXMgdGhlIG5vZGUgY29sbGVjdGlvbiBmb3IgYSBub2RlIHdpdGggYSB0YWcgbWF0Y2hpbmcKCSogd2hhdCB5b3Ugc3VwcGx5LiBUaGlzIGlzIGEgc2ltcGx5ICJ0YWcgPT0geW91ciBkYXRhIiBjb21wYXJpc29uLCAoPT09IGlmIHN0cmljdCBvcHRpb24gaXMgYXBwbGllZCkKCSogYW5kIG1vcmUgYWR2YW5jZWQgY29tcGFyaXNvbnMgY2FuIGJlIG1hZGUgdXNpbmcgdGhlIHRyYXZlcnNlKCkgbWV0aG9kLgoJKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiBub3RoaW5nIGlzIGZvdW5kLCBhbmQgYSByZWZlcmVuY2UgdG8gdGhlCgkqIGZpcnN0IGZvdW5kIG5vZGUgaWYgYSBtYXRjaCBpcyBtYWRlLgoJKgoJKiBAcGFyYW0gIG1peGVkICRkYXRhICAgRGF0YSB0byB0cnkgdG8gZmluZCBhbmQgbWF0Y2gKCSogQHBhcmFtICBtaXhlZCAkc3RyaWN0IFdoZXRoZXIgdG8gdXNlID09PSBvciBzaW1wbHkgPT0gdG8gY29tcGFyZQoJKiBAcmV0dXJuIG1peGVkICAgICAgICAgTnVsbCBpZiBubyBtYXRjaCwgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IGZvdW5kIG5vZGUKCSogICAgICAgICAgICAgICAgICAgICAgIGlmIGEgbWF0Y2ggaXMgbWFkZS4KICAgICovCglmdW5jdGlvbiAmc2VhcmNoKCYkZGF0YSwgJHN0cmljdCA9IGZhbHNlKQoJewoJCXN0YXRpYyAkc2VhcmNoRGF0YTsKCQlzdGF0aWMgJGNvbXBhcmlzb25UeXBlOwoJCQoJCSRyZXN1bHQgPSBudWxsOwoKCQlpZiAoaXNfb2JqZWN0KCRkYXRhKSBBTkQgc3RyY2FzZWNtcChnZXRfY2xhc3MoJGRhdGEpLCAnQmxvY2tUcmVlX05vZGUnKSA9PSAwKSB7CgkJCS8vIEluc2lkZSB0cmF2ZXJzaW9uCgkJCWlmIChlbXB0eSgkdGhpcy0+c2VhcmNoRm91bmROb2RlKSBBTkQgKCRjb21wYXJpc29uVHlwZSA/ICgkZGF0YS0+Z2V0VGFnKCkgPT09ICRzZWFyY2hEYXRhKSA6ICgkZGF0YS0+Z2V0VGFnKCkgPT0gJHNlYXJjaERhdGEpKSkgewoJCQkJJHRoaXMtPnNlYXJjaEZvdW5kTm9kZSA9ICYkZGF0YTsKCQkJfQoJCQlyZXR1cm4gJHJlc3VsdDsKCgkJfSBlbHNlIHsKCQkJLy8gU3RhcnQgdHJhdmVyc2luZwoJCQkkc2VhcmNoRGF0YSAgICAgPSAkZGF0YTsKCQkJJGNvbXBhcmlzb25UeXBlID0gJHN0cmljdDsKCQkJCgkJCSR0aGlzLT50cmF2ZXJzZShhcnJheSgmJHRoaXMsICdzZWFyY2gnKSk7CgkJfQoKCQlpZiAoIWVtcHR5KCR0aGlzLT5zZWFyY2hGb3VuZE5vZGUpKSB7CgkJCSRub2RlID0gJiR0aGlzLT5zZWFyY2hGb3VuZE5vZGU7CgkJCXVuc2V0KCR0aGlzLT5zZWFyY2hGb3VuZE5vZGUpOwoJCQlyZXR1cm4gJG5vZGU7CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLyoqCiAgICAqIE1vdmVzIHRoZSBub2RlcyBpbiB0aGlzIGNvbGxlY3Rpb24gKG5vdCB0aGUgY29sbGVjdGlvbiBpdHNlbGYpCgkqIHRvIHRoZSBnaXZlbiBuZXcgcGFyZW50LgoJKgoJKiBAcGFyYW0gb2JqZWN0ICRuZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgVHJlZV9Ob2RlIG9yIFRyZWUgb2JqZWN0CiAgICAqLwoJZnVuY3Rpb24gbW92ZVRvKCYkbmV3UGFyZW50KQoJewoJCXdoaWxlICghZW1wdHkoJHRoaXMtPm5vZGVzKSkgewoJCQkkdGhpcy0+bm9kZXNbMF0tPm1vdmVUbygkbmV3UGFyZW50KTsKCQl9Cgl9CgkKCS8qKgogICAgKiBDb3BpZXMgdGhlIG5vZGVzIGluIHRoaXMgY29sbGVjdGlvbiAobm90IHRoZSBjb2xsZWN0aW9uIGl0c2VsZikKCSogdG8gdGhlIGdpdmVuIG5ldyBwYXJlbnQuCgkqCgkqIEBwYXJhbSBvYmplY3QgJG5ld1BhcmVudCBUaGUgbmV3IHBhcmVudCBUcmVlX05vZGUgb3IgVHJlZSBvYmplY3QKICAgICovCglmdW5jdGlvbiBjb3B5VG8oJiRuZXdQYXJlbnQpCgl7CgkJZm9yICgkaT0wOyAkaTxjb3VudCgkdGhpcy0+bm9kZXMpOyAkaSsrKSB7CgkJCSR0aGlzLT5ub2Rlc1skaV0tPmNvcHlUbygkbmV3UGFyZW50KTsKCQl9Cgl9Cn0KPz4K]]></data>
	</file>
</module>
