# Name: oui_cookie v1.0.0-beta2 # Set, read, reset or delete cookies # Author: Nicolas Morand # URL: http://github.com/NicolasGraph # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the "Install plugin" box: # ..................................................................... YToxMzp7czo0OiJuYW1lIjtzOjEwOiJvdWlfY29va2llIjtzOjc6InZlcnNpb24iO3M6MTE6 IjEuMC4wLWJldGEyIjtzOjY6ImF1dGhvciI7czoxNDoiTmljb2xhcyBNb3JhbmQiO3M6MTA6 ImF1dGhvcl91cmkiO3M6MzA6Imh0dHA6Ly9naXRodWIuY29tL05pY29sYXNHcmFwaCI7czox MToiZGVzY3JpcHRpb24iO3M6MzQ6IlNldCwgcmVhZCwgcmVzZXQgb3IgZGVsZXRlIGNvb2tp ZXMiO3M6NDoiaGVscCI7czoxMDEzMDoiPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLnR4cC1s YXlvdXQtdGV4dGJveCB7IG1heC13aWR0aDogMTAwJTsgfQo8L3N0eWxlPgo8c2NyaXB0Pgog ICQoIGZ1bmN0aW9uKCkgewogICAgJCggIiN0YWJzIiApLnRhYnMoKS5yZW1vdmVDbGFzcygn dWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwnKS5hZGRDbGFzcygg InVpLXRhYnMtdmVydGljYWwiICk7CiAgICAkKCcuc3dpdGNoZXItbGlzdCcpLnJlbW92ZUNs YXNzKCd1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFk ZXIgdWktY29ybmVyLWFsbCcpOwogICAgJCgnLnN3aXRjaGVyLWxpc3QgbGknKS5yZW1vdmVD bGFzcygndWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wJyk7CiAgICAkKCcub3B0aW9u c19ncm91cCcpLnJlbW92ZUNsYXNzKCd1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90 dG9tJyk7CiAgfSApOwo8L3NjcmlwdD4KPGRpdiBpZD0idGFicyIgY2xhc3M9InR4cC1sYXlv dXQiPgo8ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0LTFjb2wiPgoKPGgxIGNsYXNzPSJ0eHAtaGVh ZGluZyI+b3VpX2Nvb2tpZTwvaDE+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idHhwLWxheW91dC00 Y29sLWFsdCIgaWQ9Im91aV9jb29raWVfc3dpdGNoZXIiIHJvbGU9InJlZ2lvbiI+CjxzZWN0 aW9uIGNsYXNzPSJ0eHAtZGV0YWlscyIgaWQ9ImFsbF9vcHRpb25zIiBhcmlhLWxhYmVsbGVk Ynk9ImFsbF9vcHRpb25zLWxhYmVsIj4KCjxoMyBpZD0iYWxsX29wdGlvbnMtbGFiZWwiPlRh YmxlIG9mIGNvbnRlbnRzPC9oMz4KCjxkaXYgcm9sZT0iZ3JvdXAiPgoKPHVsIGNsYXNzPSJz d2l0Y2hlci1saXN0Ij4KCTxsaT48YSBocmVmPSIjYmFzaWNzIj5CYXNpY3M8L2E+PC9saT4K CTxsaT48YSBocmVmPSIjdGFncyI+VGFnczwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNleGFt cGxlcyI+RXhhbXBsZXM8L2E+PC9saT4KCTxsaT48YSBocmVmPSIjY3JlZGl0cyI+Q3JlZGl0 cy9jaGFuZ2Vsb2c8L2E+PC9saT4KPC91bD4KCjwvZGl2Pgo8L3NlY3Rpb24+Cgo8cD48YSBj bGFzcz0ibmF2bGluayIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL05pY29sYXNHcmFwaC9v dWlfY29va2llIj5Db250cmlidXRlPC9hPiA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iaHR0 cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjcj9jbWQ9X3MteGNsaWNrJmFtcDto b3N0ZWRfYnV0dG9uX2lkPVBSRUhYM01aTVhFVU4iPkRvbmF0ZTwvYT4gPGEgY2xhc3M9Im5h dmxpbmsiIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0Ij5Ud2VldDwv YT48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idHhwLWxheW91dC00Y29sLTJzcGFuIj4KPHNl Y3Rpb24gaWQ9ImJhc2ljcyIgY2xhc3M9Im9wdGlvbnNfZ3JvdXAiPgoKPGgyPkJhc2ljczwv aDI+Cgo8cD5TZXQsIGNoZWNrLCByZWFkLCByZXNldCBvciBkZWxldGUgY29va2llcyBtYW51 YWxseSBvciB0aHJvdWdoIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiB2YXJpYWJs ZXMuPC9wPgoKPHAgY2xhc3M9ImFsZXJ0LWJsb2NrIHdhcm5pbmciPjxzcGFuIGNsYXNzPSJ1 aS1pY29uIHVpLWljb24tYWxlcnQiPi48L3NwYW4+IEFjY29yZGluZyB0byB0aGUgRVUgbGVn aXNsYXRpb24geW91IG11c3Qgd2FybiB5b3VyIHVzZXJzIGlmIHlvdXIgd2Vic2l0ZSBzZXQg Y29va2llcy48L3A+Cgo8aDI+UGx1Z2luIHJlcXVpcmVtZW50czwvaDI+Cgo8cD5vdWlfY29v a2llJiM4MjE3O3MgbWluaW11bSByZXF1aXJlbWVudHM6PC9wPgoKPHVsPgoJPGxpPjxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vIj5UZXh0cGF0dGVybiA8c3BhbiBjbGFzcz0i Y2FwcyI+Q01TPC9zcGFuPjwvYT4gNC42Ky48L2xpPgo8L3VsPgoKPGgyPkluc3RhbGxhdGlv bjwvaDI+Cgo8aDM+RnJvbSB0aGUgYWRtaW4gaW50ZXJmYWNlPC9oMz4KCjxvbD4KCTxsaT48 YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTmljb2xhc0dyYXBoL291aV9jb29raWUvcmVs ZWFzZXMiPkRvd25sb2FkPC9hPiB0aGUgY29tcGlsZWQgcGx1Z2luIGZpbGUgb3IgdGhlIHNv dXJjZSB0byBjb21waWxlIGEgY3VzdG9taXplZCBmaWxlLjwvbGk+Cgk8bGk+UGFzdGUgdGhl IGNvbnRlbnQgb2YgdGhlIGNvbXBpbGVkIHBsdWdpbiBmaWxlIHVuZGVyIHRoZSA8YSBocmVm PSI/ZXZlbnQ9cGx1Z2luIj5BZG1pbiAmZ3Q7IFBsdWdpbnM8L2E+IHRhYiBhbmQgY2xpY2sg dGhlIDxlbT5VcGxvYWQ8L2VtPiBidXR0b24uPC9saT4KCTxsaT5Db25maXJtIHRoZSBwbHVn aW4gaW5zdGFsbCBieSBjbGlja2luZyB0aGUgPGVtPkluc3RhbGw8L2VtPiBidXR0b24gb24g dGhlIHBsdWdpbiBwcmV2aWV3IHBhZ2UuPC9saT4KCTxsaT5FbmFibGUgdGhlIHBsdWdpbi48 L2xpPgo8L29sPgoKPGgzPlZpYSBDb21wb3NlcjwvaDM+Cgo8cD5BZnRlciA8YSBocmVmPSJo dHRwczovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDAtaW50cm8ubWQlRTIlODAlQTYiPmluc3Rh bGxpbmcgQ29tcG9zZXI8L2E+PC9wPgoKPG9sPgoJPGxpPlRhcmdldCB5b3VyIHByb2plY3Qg ZGlyZWN0b3J5OjxiciAvPgo8Y29kZT4kIGNkIC9wYXRoL3RvL3lvdXIvdGV4dHBhdHRlcm4v aW5zdGFsbGF0aW9uL2RpcjwvY29kZT48L2xpPgoJPGxpPklmIGl0JiM4MjE3O3Mgbm90IGFs cmVhZHkgZG9uZSwgbG9jayB5b3VyIHZlcnNpb24gb2YgVHhwOjxiciAvPgo8Y29kZT4kIGNv bXBvc2VyIHJlcXVpcmUgdGV4dHBhdHRlcm4vbG9jazo0LjYuMjwvY29kZT4sIHdoZXJlIDxj b2RlPjQuNi4yPC9jb2RlPiBpcyB0aGUgVHhwIHZlcnNpb24gaW4gdXNlLjwvbGk+Cgk8bGk+ SW5zdGFsbCBvdWlfY29va2llOjxiciAvPgo8Y29kZT4kIGNvbXBvc2VyIHJlcXVpcmUgb3Vp L291aV9jb29raWU8L2NvZGU+PC9saT4KPC9vbD4KCjxoMj5VcGRhdGU8L2gyPgoKPGgzPkZy b20gdGhlIGFkbWluIGludGVyZmFjZTwvaDM+Cgo8b2w+Cgk8bGk+Rm9sbG93IHRoZSBpbnN0 YWxsYXRpb24gaW5zdHJ1Y3Rpb24gYWJvdmUuPC9saT4KPC9vbD4KCjxoMz5WaWEgQ29tcG9z ZXI8L2gzPgoKPHByZT48Y29kZT4kIGNvbXBvc2VyIHVwZGF0ZSBvdWkvb3VpX2Nvb2tpZTwv Y29kZT48L3ByZT4KCjxoMj5Vbmluc3RhbGw8L2gyPgoKPGgzPkZyb20gdGhlIGFkbWluIGlu dGVyZmFjZTwvaDM+Cgo8b2w+Cgk8bGk+Q2hlY2sgdGhlIGJveCBvbiB0aGUgbGVmdCBvZiB0 aGUgcGx1Z2luIHJvdyB1bmRlciB0aGUgPGEgaHJlZj0iP2V2ZW50PXBsdWdpbiI+QWRtaW4g Jmd0OyBQbHVnaW5zPC9hPi48L2xpPgoJPGxpPm9wZW4gdGhlIHNlbGVjdCBsaXN0IGF0IHRo ZSBib3R0b20gb2YgdGhlIHBsdWdpbnMgdGFibGUgYW5kIGNob29zZSA8ZW0+RGVsZXRlPC9l bT4uPC9saT4KCTxsaT5jb25maXJtIHRoZSBwbHVnaW4gZGVsZXRpb24uPC9saT4KPC9vbD4K CjxoMz5WaWEgQ29tcG9zZXI8L2gzPgoKPHByZT48Y29kZT4kIGNvbXBvc2VyIHJlbW92ZSBv dWkvb3VpX2Nvb2tpZTwvY29kZT48L3ByZT4KCjwvc2VjdGlvbj4KPHNlY3Rpb24gaWQ9InRh Z3MiIGNsYXNzPSJvcHRpb25zX2dyb3VwIj4KCjxoMj5UYWdzPC9oMj4KCjxoMyBpZD0ib3Vp X2Nvb2tpZSI+b3VpX2Nvb2tpZTwvaDM+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6b3VpX2Nvb2tp ZSBuYW1lPSZxdW90O+KApiZxdW90OyAvJmd0OzwvY29kZT48L3ByZT4KCjxwPm9yPC9wPgoK PHByZT48Y29kZT4mbHQ7dHhwOm91aV9jb29raWUgbmFtZT0mcXVvdDvigKYmcXVvdDsmZ3Q7 CiAgICBb4oCmXQombHQ7L3R4cDpvdWlfY29va2llJmd0OzwvY29kZT48L3ByZT4KCjxoND5B dHRyaWJ1dGVzPC9oND4KCjxoNT5SZXF1aXJlZDwvaDU+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+bmFt ZTwvY29kZT48L2R0PgoJPGRkPjxwPlRoZSBjb29raWUgKGFuZCA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRUUDwvc3Bhbj4gdmFyaWFibGUpIG5hbWUgeW91IHdhbnQgdG8gdXNlLiBJZiBubyBv dGhlciBhdHRpYnV0ZXMgYXJlIGRlZmluZWQsIHRoZSB0YWcgd2lsbCByZWFkIGFuZCBkaXNw bGF5IHRoZSByZWxhdGVkIHZhbHVlLjxiciAvPgo8c3Ryb25nPkRlZmF1bHQ6PC9zdHJvbmc+ IG5vbmU8L3A+PC9kZD4KPC9kbD4KCjxoNT5NYW51YWxseSBzZXQgYSBjb29raWU8L2g1PgoK PGRsPgoJPGR0Pjxjb2RlPnZhbHVlPC9jb2RlPjwvZHQ+Cgk8ZGQ+PHA+QSB2YWx1ZSB0byBt YW51YWxseSBzZXQgdGhlIG5hbWVkIGNvb2tpZS48YnIgLz4KWW91IGNhbiBhbHNvIHNldCB0 aGUgY29va2llIHZhbHVlIGJ5IHVzaW5nIGEgY29udGluZXIgdGFnIGxpa2UgeW91IHdvdWxk IGZvciBhIHZhcmlhYmxlLjxiciAvPgo8c3Ryb25nPkRlZmF1bHQ6PC9zdHJvbmc+IG5vbmU8 L3A+PC9kZD4KPC9kbD4KCjxoNT5TZXQgYSBjb29raWUgdGhyb3VnaCBhIDxzcGFuIGNsYXNz PSJjYXBzIj5IVFRQPC9zcGFuPiB2YXJpYWJsZTwvaDU+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+dmFs dWVzPC9jb2RlPjwvZHQ+Cgk8ZGQ+PHA+QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhY2Nl cHRlZCB2YWx1ZXMgZm9yIHRoZSB1cmwgdmFyaWFibGUgYW5kIGl0cyBjb29raWUuPGJyIC8+ CjxzdHJvbmc+RGVmYXVsdDo8L3N0cm9uZz4gbm9uZTwvcD48L2RkPgoJPGR0Pjxjb2RlPmRl ZmF1bHQ8L2NvZGU+PC9kdD4KCTxkZD48cD5BIGRlZmF1bHQgdmFsdWUuPGJyIC8+CklmIHNl dCwgdGhlIHBsdWdpbiBjb25kaXRpb25hbCB0YWcgd2lsbCBhbHdheXMgYmUgdHJ1ZSBpZiBu b3QgY2hlY2sgYWdhaW5zdCBhIGRlZmluZWQgdmFsdWUuPGJyIC8+CjxzdHJvbmc+RGVmYXVs dDo8L3N0cm9uZz4gbm9uZTwvcD48L2RkPgo8L2RsPgoKPGg1Pk9wdGlvbmFsIGNvb2tpZSBz ZXR0aW5nczwvaDU+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9kdD4KCTxk ZD48cD5UaGUgZHVyYXRpb24gb2YgdGhlIGNvb2tpZS48YnIgLz4KPHN0cm9uZz5EZWZhdWx0 Ojwvc3Ryb25nPiArMSBkYXk8YnIgLz4KPHN0cm9uZz5WYWxpZDo8L3N0cm9uZz4gQSA8YSBo cmVmPSJodHRwOi8vcGhwLm5ldC9tYW51YWwvZnIvZnVuY3Rpb24uc3RydG90aW1lLnBocCI+ c3RydG90aW1lPC9hPiB2YWx1ZTwvcD48L2RkPgo8L2RsPgoKPGg1PkRlbGV0ZSBhIGNvb2tp ZTwvaDU+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+ZGVsZXRlPC9jb2RlPjwvZHQ+Cgk8ZGQ+PHA+SWYg c2V0IHRvIDxjb2RlPjE8L2NvZGU+IHRoaXMgYXR0cmlidXRlIHdpbGwgZGVsZXRlIHRoZSBu YW1lZCBjb29raWUuPGJyIC8+CjxzdHJvbmc+RGVmYXVsdDo8L3N0cm9uZz4gPGNvZGU+MDwv Y29kZT48YnIgLz4KPHN0cm9uZz5WYWxpZDo8L3N0cm9uZz4gPGNvZGU+MDwvY29kZT4gb3Ig PGNvZGU+MTwvY29kZT48L3A+PC9kZD4KPC9kbD4KCjxoMyBpZD0ib3VpX2Nvb2tpZSI+b3Vp X2lmX2Nvb2tpZTwvaDM+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6b3VpX2lmX2Nvb2tpZSBuYW1l PSZxdW90O+KApiZxdW90OyZndDsKICAgIFvigKZdCiZsdDt0eHA6ZWxzZSAvJmd0OwogICAg W+KApl0KJmx0Oy90eHA6b3VpX2lmX2Nvb2tpZSZndDs8L2NvZGU+PC9wcmU+Cgo8cD5UaGlz IHRhZyBjaGVja3MgdGhlIHN0YXR1cyBvciB0aGUgdmFsdWUgb2YgdGhlIGNvb2tpZSAoYW5k L29yIHRoZSByZWxhdGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiB2YXJpYWJs ZSkgZGVmaW5lZCBieSB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlLjwvcD4KCjxo ND5BdHRyaWJ1dGVzPC9oND4KCjxoNT5SZXF1aXJlZDwvaDU+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+ bmFtZTwvY29kZT4qPC9kdD4KCTxkZD48cD5UaGUgY29va2llIChhbmQgPHNwYW4gY2xhc3M9 ImNhcHMiPkhUVFA8L3NwYW4+IHZhcmlhYmxlKSBuYW1lIHlvdSB3YW50IHRvIHVzZS48YnIg Lz4KPHN0cm9uZz5EZWZhdWx0Ojwvc3Ryb25nPiBub25lPC9wPjwvZGQ+CjwvZGw+Cgo8aDU+ T3B0aW9uYWw8L2g1PgoKPGRsPgoJPGR0Pjxjb2RlPnZhbHVlPC9jb2RlPjwvZHQ+Cgk8ZGQ+ PHA+QSB2YWx1ZSB0byBjaGVjayBhZ2FpbnN0IHRoZSBjb29raWUgKGFuZC9vciB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPkhUVFA8L3NwYW4+IHZhcmlhYmxlKSB2YWx1ZS48YnIgLz4KPHN0 cm9uZz5EZWZhdWx0Ojwvc3Ryb25nPiBub25lPC9wPjwvZGQ+CjwvZGw+Cgo8L3NlY3Rpb24+ CjxzZWN0aW9uIGlkPSJleGFtcGxlcyIgY2xhc3M9Im9wdGlvbnNfZ3JvdXAiPgoKPGgyPkV4 YW1wbGVzPC9oMj4KCjxoMyBpZD0ic29ydF9ieSI+RnJvbnQgZW5kIGFydGljbGVzIHNvcnRp bmc8L2gzPgoKPHA+TGlzdCB0aGUgc29ydCBvcHRpb25zIHlvdSB3YW50IHRvIHVzZTo8L3A+ Cgo8cHJlPjxjb2RlPiZsdDtzZWxlY3Qgb25jaGFuZ2U9JnF1b3Q7d2luZG93LmxvY2F0aW9u LmhyZWY9dGhpcy52YWx1ZSZxdW90OyZndDsKICAgICZsdDtvcHRpb24gdmFsdWU9JnF1b3Q7 JnF1b3Q7IGRpc2FibGVkIHNlbGVjdGVkJmd0O1NvcnQgYnkmbHQ7L29wdGlvbiZndDsKICAg ICZsdDtvcHRpb24gdmFsdWU9JnF1b3Q7P3NvcnRfYnk9Y3VzdG9tXzEmcXVvdDsmZ3Q7U2l6 ZSZsdDsvb3B0aW9uJmd0OwogICAgJmx0O29wdGlvbiB2YWx1ZT0mcXVvdDs/c29ydF9ieT1j dXN0b21fMiZxdW90OyZndDtXZWlnaHQmbHQ7L29wdGlvbiZndDsKJmx0Oy9zZWxlY3QmZ3Q7 PC9jb2RlPjwvcHJlPgoKPHA+VGhlbiwgY2F0Y2ggdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5I VFRQPC9zcGFuPiB2YXJpYWJsZSBzZW50IGJ5IHRoaXMgbGlzdCB0byBzdG9yZSBpdCAodXNl ZnVsIHRvIGtlZXAgdGhlIHNvcnQgb3JkZXIgcGFnZXMgYWZ0ZXIgcGFnZXMpLjwvcD4KCjxw cmU+PGNvZGU+Jmx0O3R4cDpvdWlfY29va2llIG5hbWU9JnF1b3Q7c29ydF9ieSZxdW90OyB2 YWx1ZXM9JnF1b3Q7Y3VzdG9tXzEsIGN1c3RvbV8yJnF1b3Q7IGRlZmF1bHQ9JnF1b3Q7Y3Vz dG9tXzEmcXVvdDsgLyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5Ob3cgdXNlIHRoZSBuZXcgdmFs dWUgYXMgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5zb3J0PC9jb2RlPiBhdHRyaWJ1dGUgb2Yg eW91ciBhcnRpY2xlIHRhZy48L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6YXJ0aWNsZSBzb3J0 PSYjMzk7Jmx0O3R4cDpvdWlfY29va2llIG5hbWU9JnF1b3Q7c29ydF9ieSZxdW90OyAvJmd0 OyYjMzk7IC8mZ3Q7PC9jb2RlPjwvcHJlPgoKPGgzIGlkPSJsYXN0X3ZpZXdlZCI+TGFzdCB2 aWV3ZWQgYXJ0aWNsZTwvaDM+Cgo8cD5TdG9yZSB0aGUgY3VycmVudCBhcnRpY2xlIGlkIGlu IGEgY29va2llOjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDppZl9pbmRpdmlkdWFsX2FydGlj bGUmZ3Q7CiAgICAmbHQ7dHhwOm91aV9jb29raWUgbmFtZT0mcXVvdDtsYXN0X2FydGljbGUm cXVvdDsgdmFsdWU9JiMzOTsmbHQ7dHhwOmFydGljbGVfaWQgLyZndDsmIzM5OyAvJmd0Owom bHQ7L3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7PC9jb2RlPjwvcHJlPgoKPHA+Tm93 LCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIGFueXdoZXJlIHlvdSB3YW50IHRvIGRpc3BsYXkg dGhlIGxhc3Qgdmlld2VkIGFydGljbGUuPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOmlmX2Nv b2tpZSBuYW1lPSZxdW90O2xhc3RfYXJ0aWNsZSZxdW90OyZndDsKICAgICZsdDt0eHA6YXJ0 aWNsZV9jdXN0b20gaWQ9JiMzOTsmbHQ7dHhwOm91aV9jb29raWUgbmFtZT0mcXVvdDtsYXN0 X2FydGljbGUmcXVvdDsgLyZndDsmIzM5OyAvJmd0OwombHQ7L3R4cDppZl9jb29raWUmZ3Q7 PC9jb2RlPjwvcHJlPgoKPGgzIGlkPSJldV9jb29raWVzIj5FVSBjb29raWVzIFdhcm5pbmc8 L2gzPgoKPHByZT48Y29kZT4mbHQ7dHhwOm91aV9jb29raWUgbmFtZT0mcXVvdDthY2NlcHRf Y29va2llcyZxdW90OyB2YWx1ZXM9JnF1b3Q7eWVzJnF1b3Q7IC8mZ3Q7CgombHQ7dHhwOm91 aV9pZl9jb29raWUgbmFtZT0mcXVvdDthY2NlcHRfY29va2llcyZxdW90OyZndDsKJmx0O3R4 cDplbHNlIC8mZ3Q7CiAgICBUaGlzIHdlYnNpdGUgdXNlcyBjb29raWVzLiAmbHQ7YSBocmVm PSZxdW90Oz9hY2NlcHRfY29va2llcz15ZXMmcXVvdDsmZ3Q7SSBhY2NlcHQhJmx0Oy9hJmd0 OwombHQ7L3R4cDpvdWlfaWZfY29va2llJmd0OzwvY29kZT48L3ByZT4KCjwvc2VjdGlvbj4K PHNlY3Rpb24gaWQ9ImNyZWRpdHMiIGNsYXNzPSJvcHRpb25zX2dyb3VwIj4KCjxoMj5BdXRo b3I8L2gyPgoKPHA+PGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9OaWNvbGFzR3JhcGgi Pk5pY29sYXMgTW9yYW5kPC9hPjxiciAvPgo8ZW0+VGhhbmsgeW91IHRvIHRoZSBUZXh0cGF0 dGVybiBjb21tdW5pdHkgYW5kIHRoZSBjb3JlIHRlYW0uPC9lbT48L3A+Cgo8aDI+TGljZW5z ZTwvaDI+Cgo8cD5UaGlzIHBsdWdpbiBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgPGEgaHJl Zj0iaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC5m ci5odG1sIj48c3BhbiBjbGFzcz0iY2FwcyI+R1BMPC9zcGFuPi0yPC9hPi48L3A+Cgo8cD5U aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yPGJyIC8+Cm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5HTlU8L3NwYW4+IEdlbmVyYWwgUHVibGljIExpY2Vuc2U8YnIgLz4KYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDI8YnIgLz4Kb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uPC9wPgoKPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsPGJyIC8+CmJ1dCA8c3BhbiBjbGFzcz0i Y2FwcyI+V0lUSE9VVDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNhcHMiPkFOWTwvc3Bhbj4gPHNw YW4gY2xhc3M9ImNhcHMiPldBUlJBTlRZPC9zcGFuPjsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mPGJyIC8+CjxzcGFuIGNsYXNzPSJjYXBzIj5NRVJDSEFOVEFCSUxJ VFk8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5GSVRORVNTPC9zcGFuPiA8c3BhbiBj bGFzcz0iY2FwcyI+Rk9SPC9zcGFuPiBBIDxzcGFuIGNsYXNzPSJjYXBzIj5QQVJUSUNVTEFS PC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+UFVSUE9TRTwvc3Bhbj4uICBTZWUgdGhlPGJy IC8+CjxzcGFuIGNsYXNzPSJjYXBzIj5HTlU8L3NwYW4+IEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy48L3A+Cgo8aDI+Q2hhbmdlbG9nPC9oMj4KCjx1bD4KCTxs aT48c3Ryb25nPjEuMC4wLWJldGEyPC9zdHJvbmc+ICgyMDE3LTA1LTI4KQoJPHVsPgoJCTxs aT5Ecm9wcyBUeHAgNC41IHN1cHBvcnQ7PC9saT4KCQk8bGk+QWRkcyA8YSBocmVmPSJodHRw czovL2dldGNvbXBvc2VyLm9yZy8iPkNvbXBvc2VyPC9hPiBzdXBwb3J0IGZvciA8YSBocmVm PSJodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGV4dHBhdHRlcm4vaW5zdGFsbGVy Ij50ZXh0cGF0dGVybi9pbnN0YWxsZXI8L2E+LjwvbGk+Cgk8L3VsPjwvbGk+Cgk8bGk+PHN0 cm9uZz4wLjIuMzwvc3Ryb25nPiAoMjAxNi0wNi0yMSkKCTx1bD4KCQk8bGk+Q29kZSByZXdy aXRlOzwvbGk+CgkJPGxpPm1hbnVhbCBjb29raWUgc2V0dGluZyBhZGRlZDs8L2xpPgoJCTxs aT48Y29kZT5kaXNwbGF5PC9jb2RlPiBhdHRyaWJ1dGUgcmVtb3ZlZCAoc2V0dGluZyBhbmQg cmVhZGluZyBhcmUgbm93IHNlcGFyYXRlZCk7PC9saT4KCQk8bGk+ZGVsZXRpb24gcHJvY2Vz cyBjaGFuZ2VkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8bGk+PHN0cm9uZz4wLjEuMzwvc3Ryb25n PiAoMjAxNi0wNS0yOSkKCTx1bD4KCQk8bGk+aW1wcm92ZXMgY29uZGl0aW9uYWwgdGFnIHJl c3VsdHM7PC9saT4KCQk8bGk+PGNvZGU+ZGVsZXRlPC9jb2RlPiBhdHRyaWJ1dGUgdW5zZXQg YnkgZGVmYXVsdCAoYnV0IGFueSBub25lIHZhbGlkIHZhbHVlIGZvciBhIGRlZmluZWQgPHNw YW4gY2xhc3M9ImNhcHMiPkhUVFA8L3NwYW4+IHZhcmlhYmxlIHdpbGwgZGVsZXRlIHRoZSBy ZWxhdGVkIGNvb2tpZSkuPC9saT4KCTwvdWw+PC9saT4KCTxsaT48c3Ryb25nPjAuMS4yPC9z dHJvbmc+ICgyMDE2LTA1LTI2KTwvbGk+CjwvdWw+Cgo8L3NlY3Rpb24+CjwvZGl2Pgo8L2Rp dj4iO3M6NDoiY29kZSI7czo0MTE0OiIKCi8qCiAqIG91aV9jb29raWUgLSBTZXQsIGNoZWNr LCByZWFkLCByZXNldCBvciBkZWxldGUgY29va2llcwogKiAgICAgICAgICAgICAgbWFudWFs bHkgb3IgdGhyb3VnaCBIVFRQIHZhcmlhYmxlcy4KICoKICogaHR0cHM6Ly9naXRodWIuY29t L05pY29sYXNHcmFwaC9vdWlfY29va2llCiAqCiAqIENvcHlyaWdodCAoQykgMjAxNiBOaWNv bGFzIE1vcmFuZAogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBvdWlfY29va2llLgogKgog KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCiAqIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw LTEzMDEsIFVTQS4KICovCgojIC0tLSBCRUdJTiBQTFVHSU4gQ09ERSAtLS0KVHhwOjpnZXQo J1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKQogICAgLT5yZWdpc3Rlcignb3VpX2Nvb2tp ZScpCiAgICAtPnJlZ2lzdGVyKCdvdWlfaWZfY29va2llJyk7CgovKioKICogUmVhZHMgYSBI VFRQIHZhcmlhYmxlLCBjaGVja3MgaXRzIHZhbHVlLAogKiByZXR1cm5zIGl0IGFuZCBzdG9y ZXMgaXQgaW4gYSBjb29raWUuCiAqLwpmdW5jdGlvbiBvdWlfY29va2llKCRhdHRzLCAkdGhp bmcgPSBudWxsKQp7CiAgICBnbG9iYWwgJG91aV9jb29raWVzOwoKICAgIGV4dHJhY3QobEF0 dHMoYXJyYXkoCiAgICAgICAgJ25hbWUnICAgICA9PiAnJywKICAgICAgICAndmFsdWUnICAg ID0+ICcnLAogICAgICAgICd2YWx1ZXMnICAgPT4gJycsCiAgICAgICAgJ2RlZmF1bHQnICA9 PiAnJywKICAgICAgICAnZHVyYXRpb24nID0+ICcrMSBkYXknLAogICAgICAgICdkZWxldGUn ICAgPT4gJzAnLAogICAgKSwgJGF0dHMpKTsKCiAgICBpZiAoJG5hbWUpIHsKICAgICAgICAk Y3MgPSBjcygkbmFtZSk7CiAgICB9IGVsc2UgewogICAgICAgIHRyaWdnZXJfZXJyb3IoJ291 aV9jb29raWUgcmVxdWlyZXMgYW4gIm5hbWUiIGF0dHJpYnV0ZS4nKTsKICAgICAgICByZXR1 cm47CiAgICB9CgogICAgJG91aV9jb29raWVzID86ICRvdWlfY29va2llcyA9IGFycmF5KCk7 CgogICAgaWYgKCR0aGluZykgewogICAgICAgIC8vIE1hbnVhbGx5IHNldCBhIGNvb2tpZS4K ICAgICAgICAkdGhpbmcgPSBwYXJzZSgkdGhpbmcpOwogICAgICAgIHNldGNvb2tpZSgkbmFt ZSwgJHRoaW5nLCBzdHJ0b3RpbWUoJGR1cmF0aW9uKSwgJy8nKTsKICAgICAgICAkb3VpX2Nv b2tpZXNbJG5hbWVdID0gJHRoaW5nOwogICAgICAgIHJldHVybjsKICAgIH0gZWxzZWlmICgk dmFsdWUpIHsKICAgICAgICAvLyBNYW51YWxseSBzZXQgYSBjb29raWUuCiAgICAgICAgc2V0 Y29va2llKCRuYW1lLCAkdmFsdWUsIHN0cnRvdGltZSgkZHVyYXRpb24pLCAnLycpOwogICAg ICAgICRvdWlfY29va2llc1skbmFtZV0gPSAkdmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAg fSBlbHNlaWYgKCR2YWx1ZXMpIHsKICAgICAgICAvLyBTZXQgYSBjb29raWUgdGhyb3VnaCBI VFRQIHZhcmlhYmxlcy4KICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRo ZSBuYW1lZCBIVFRQIHZhcmlhYmxlIG9yIGNvb2tpZQogICAgICAgICRncHMgPSBzdHJ2YWwo Z3BzKCRuYW1lKSk7CgogICAgICAgIGlmIChpbl9saXN0KCRncHMsICR2YWx1ZXMsICRkZWxp bSA9ICcsJykpIHsKICAgICAgICAgICAgLy9UaGUgSFRUUCB2YXJpYWJsZSBpcyBzZXQgdG8g b25lIG9mIHRoZSB2YWxpZCAndmFsdWVzJy4KICAgICAgICAgICAgc2V0Y29va2llKCRuYW1l LCAkZ3BzLCBzdHJ0b3RpbWUoJGR1cmF0aW9uKSwgJy8nKTsKICAgICAgICAgICAgJG91aV9j b29raWVzWyRuYW1lXSA9ICRncHM7CiAgICAgICAgfSBlbHNlaWYgKCRjcykgewogICAgICAg ICAgICAvLyBUaGUgY29va2llIGlzIGFscmVkeSBzZXQuCiAgICAgICAgICAgICRvdWlfY29v a2llc1skbmFtZV0gPSAkY3M7CiAgICAgICAgfSBlbHNlaWYgKCRkZWZhdWx0KSB7CiAgICAg ICAgICAgIC8vIERlZmF1bHQgc2V0dGluZy4KICAgICAgICAgICAgc2V0Y29va2llKCRuYW1l LCAkZGVmYXVsdCwgc3RydG90aW1lKCRkdXJhdGlvbiksICcvJyk7CiAgICAgICAgICAgICRv dWlfY29va2llc1skbmFtZV0gPSAkZGVmYXVsdDsKICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAvLyBFbHNlPwogICAgICAgICAgICAkb3VpX2Nvb2tpZXNbJG5hbWVdID0gZmFsc2U7 CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gZWxzZWlmICgkZGVsZXRlKSB7CiAg ICAgICAgLy8gRGVsZXRpb24uCiAgICAgICAgc2V0Y29va2llKCRuYW1lLCAnJywgLTEsICcv Jyk7CiAgICAgICAgJG91aV9jb29raWVzWyRuYW1lXSA9IGZhbHNlOwogICAgICAgIHJldHVy bjsKICAgIH0gZWxzZWlmIChpc3NldCgkb3VpX2Nvb2tpZXNbJG5hbWVdKSAmJiAkb3VpX2Nv b2tpZXNbJG5hbWVdKSB7CiAgICAgICAgLy8gUmVhZGluZyBmcm9tIHRoZSByZWxhdGVkIHZh cmlhYmxlIGlmIGl0IGV4aXN0cyBhbmQgaXMgbm90IGZhbHNl4oCmCiAgICAgICAgcmV0dXJu ICRvdWlfY29va2llc1skbmFtZV07CiAgICB9IGVsc2VpZiAoJGNzKSB7CiAgICAgICAgLy8g 4oCmb3IsIGZyb20gdGhlIGNvb2tpZSBpdHNlbGYuCiAgICAgICAgcmV0dXJuICRjczsKICAg IH0KfQoKLyoqCiAqIENoZWNrcyB0aGUgc3RhdHVzIG9yIHRoZSB2YWx1ZSBvZiBhIEhUVFAg dmFyaWFibGUgb3IgYSBjb29raWUuCiAqLwpmdW5jdGlvbiBvdWlfaWZfY29va2llKCRhdHRz LCAkdGhpbmcgPSBudWxsKQp7CiAgICBnbG9iYWwgJG91aV9jb29raWVzOwoKICAgIGV4dHJh Y3QobEF0dHMoYXJyYXkoCiAgICAgICAgJ25hbWUnICA9PiAnJywKICAgICAgICAndmFsdWUn ID0+ICcnLAogICAgKSwgJGF0dHMpKTsKCiAgICBpZiAoJG5hbWUpIHsKICAgICAgICAkY3Mg PSBjcygkbmFtZSk7CiAgICB9IGVsc2UgewogICAgICAgIHRyaWdnZXJfZXJyb3IoJ291aV9j b29raWUgcmVxdWlyZXMgYSBuYW1lIGF0dHJpYnV0ZS4nKTsKICAgICAgICByZXR1cm47CiAg ICB9CgogICAgaWYgKGlzc2V0KCRvdWlfY29va2llc1skbmFtZV0pKSB7CiAgICAgICAgLy8g VGhlIGNvb2tpZSBzZXR0aW5nIG9yIGRlbGV0aW9uIGlzIGluIHByb2Nlc3MKICAgICAgICBp ZiAoJG91aV9jb29raWVzWyRuYW1lXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJG91dCA9 IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvdXQgPSAkdmFsdWUgPyAo JHZhbHVlID09PSAkb3VpX2Nvb2tpZXNbJG5hbWVdID8gdHJ1ZSA6IGZhbHNlKSA6IHRydWU7 CiAgICAgICAgfQogICAgfSBlbHNlaWYgKCRjcykgewogICAgICAgIC8vIFRoZSBjb29raWUg YWxyZWFkeSBleGlzdHMuCiAgICAgICAgJG91dCA9ICR2YWx1ZSA/ICgkdmFsdWUgPT09ICRj cyA/IHRydWUgOiBmYWxzZSkgOiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBObyBj b29raWUgc2V0IG5vciBpbiBzZXR0aW5nCiAgICAgICAgJG91dCA9IGZhbHNlOwogICAgfQog ICAgcmV0dXJuIHBhcnNlKCR0aGluZywgJG91dCk7Cn0KIjtzOjQ6InR5cGUiO3M6MToiMCI7 czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6ODoidGV4dHBhY2si O3M6MDoiIjtzOjE1OiJhbGxvd19odG1sX2hlbHAiO2k6MTtzOjM6Im1kNSI7czozMjoiOTdi NzEzYmI3ZWM2YTYyMmIwMGE1YmI4MDBiMTU1ZGIiO30=