# mem_simple_form v0.3 # Store a form to a table. # Michael Manfre # http://manfre.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE1OiJtZW1fc2ltcGxlX2Zvcm0iO3M6NzoidmVyc2lvbiI7 czozOiIwLjMiO3M6NjoiYXV0aG9yIjtzOjE0OiJNaWNoYWVsIE1hbmZyZSI7czoxMDoiYXV0 aG9yX3VyaSI7czoxODoiaHR0cDovL21hbmZyZS5uZXQvIjtzOjExOiJkZXNjcmlwdGlvbiI7 czoyNDoiU3RvcmUgYSBmb3JtIHRvIGEgdGFibGUuIjtzOjQ6InR5cGUiO2k6MDtzOjQ6Imhl bHAiO3M6NTE3MjoiCTxoMSBjbGFzcz0idGl0bGUiPm1lbV9zaW1wbGVfZm9ybSBwbHVnaW48 L2gxPgoKCTxoMiBjbGFzcz0ic2VjdGlvbiBzdW1tYXJ5Ij5TdW1tYXJ5PC9oMj4KCgk8cD5U aGlzIHBsdWdpbiBhbGxvd3MgZm9yIGEgc2l0ZSBvd25lciB0byBoYXZlIGEgZm9ybSBhY2Nl cHQgaW5wdXQgYW5kIHN0b3JlIHRoZSBkYXRhIGluIGFuIGV4aXN0aW5nIHRhYmxlLiBCYXNp YyBwcm9jZXNzaW5nIGNhbiBiZSBkb25lIHRvPGJyIC8+CnRoZSBkYXRhIGJlZm9yZSB3cml0 aW5nIHRvIHRoZSB0YWJsZS48L3A+CgoJPHA+VGhpcyBwbHVnaW4gcmVxdWlyZXMgbWVtX2Zv cm0uPC9wPgoKCTxwPlRoaXMgcGx1Z2luIGhhcyA8c3BhbiBjbGFzcz0iY2FwcyI+TUxQPC9z cGFuPiBzdXBwb3J0LjwvcD4KCgk8aDIgY2xhc3M9InNlY3Rpb24gY29udGFjdCI+QXV0aG9y IENvbnRhY3Q8L2gyPgoKCTxwPjxhIGhyZWY9Im1haWx0bzptbWFuZnJlQGdtYWlsLmNvbT9z dWJqZWN0PVRleHRwYXR0ZXJuJTIwbWVtX3NpbXBsZV9mb3JtJTIwcGx1Z2luIj5NaWNoYWVs IE1hbmZyZTwvYT48YnIgLz4KPGEgaHJlZj0iaHR0cDovL21hbmZyZS5uZXQiPmh0dHA6Ly9t YW5mcmUubmV0PC9hPjwvcD4KCgk8aDIgY2xhc3M9InNlY3Rpb24gbGljZW5zZSI+TGljZW5z ZTwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9 Imh0dHA6Ly93d3cuZnNmLm9yZy9saWNlbnNpbmcvbGljZW5zZXMvaW5mby9HUEx2Mi5odG1s Ij5HUEx2MjwvYT4uPC9wPgoKCTxoMiBjbGFzcz0ic2VjdGlvbiBpbnN0YWxsYXRpb24iPklu c3RhbGxhdGlvbjwvaDI+CgoJPHA+Tm8gZXh0cmEgaW5zdGFsbGF0aW9uIHN0ZXBzPC9wPgoK CTxoMiBjbGFzcz0ic2VjdGlvbiB0YWdzIj5UYWdzPC9oMj4KCgk8dWw+CgkJPGxpPjxhIGhy ZWY9IiNtZW1fc2ltcGxlX2Zvcm0iPm1lbV9zaW1wbGVfZm9ybTwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjbWVtX3NpbXBsZV9pZl9wcyI+bWVtX3NpbXBsZV9pZl9wczwvYT48L2xpPgoJ CTxsaT48YSBocmVmPSIjbWVtX3NpbXBsZV9wcyI+bWVtX3NpbXBsZV9wczwvYT48L2xpPgoJ PC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9zaW1wbGVfZm9ybSI+bWVtX3NpbXBs ZV9mb3JtPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPlRoaXMgdGFnIHdpbGwgb3V0 cHV0IGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBmb3JtLiBUaGUgPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGZvcm0gZmllbGQgbmFtZXMgbXVzdCBmb2xsb3cg dGhlIHBhdHRlcm4gJiM4MjIwO0A8dHlwZT5fPG5hbWU+PGNvZGU+JnF1b3Q7LCB3aGVyZSA8 L2NvZGU+PHR5cGU+PGNvZGU+IGlzIGEgdmFsdWUgZnJvbQoJdGhlIGJlbG93IHR5cGUgbGlz dC4gVGhlIGRhdGFiYXNlIHRhYmxlJiMzOTtzIGZpZWxkIG5hbWUgbXVzdCBtYXRjaCA8L2Nv ZGU+PG5hbWU+QCBleGFjdGx5IChjYXNlIHNlbnNpdGl2ZSkuPC9wPgoKCTxwIGNsYXNzPSJ0 YWctc3VtbWFyeSI+Rm9ybSBUeXBlczoKCTx1bD4KCQk8bGk+bm93ICYjODIxMTsgTXlTUUwg JiM4MjIwOzxhY3JvbnltIHRpdGxlPSIiPjxzcGFuIGNsYXNzPSJjYXBzIj5OT1c8L3NwYW4+ PC9hY3JvbnltPiYjODIyMTsgZnVuY3Rpb24uIFVzZSB3aXRoIG1lbV9mb3JtX3NlY3JldCBv ciBtZW1fZm9ybV9oaWRkZW4uPC9saT4KCQk8bGk+cGFzc3dvcmQgJiM4MjExOyBNeVNRTCAm IzgyMjA7PGFjcm9ueW0gdGl0bGU9IiI+PHNwYW4gY2xhc3M9ImNhcHMiPlBBU1NXT1JEPC9z cGFuPjwvYWNyb255bT4mIzgyMjE7IGZ1bmN0aW9uPC9saT4KCQk8bGk+b2xkcGFzc3dvcmQg JiM4MjExOyBNeVNRTCAmIzgyMjA7PHNwYW4gY2xhc3M9ImNhcHMiPk9MRDwvc3Bhbj5fUEFT U1dPUkQoKSYjODIyMTsgZnVuY3Rpb248L2xpPgoJCTxsaT5tZDUgJiM4MjExOyBNeVNRTCAm IzgyMjA7PGFjcm9ueW0gdGl0bGU9IiI+TUQ1PC9hY3JvbnltPiYjODIyMTsgZnVuY3Rpb248 L2xpPgoJCTxsaT5zaGExICYjODIxMTsgTXlTUUwgJiM4MjIwOzxhY3JvbnltIHRpdGxlPSIi PlNIQTE8L2Fjcm9ueW0+JiM4MjIxOyBmdW5jdGlvbjwvbGk+CgkJPGxpPnJhbmQgJiM4MjEx OyBNeVNRTCAmIzgyMjA7PGFjcm9ueW0gdGl0bGU9IiI+PHNwYW4gY2xhc3M9ImNhcHMiPlJB TkQ8L3NwYW4+PC9hY3JvbnltPiYjODIyMTsgZnVuY3Rpb24uIFVzZSB3aXRoIG1lbV9mb3Jt X3NlY3JldCBvciBtZW1fZm9ybV9oaWRkZW4uPC9saT4KCQk8bGk+dGV4dGlsZSAmIzgyMTE7 IFRleHRpbGUgcGFyc2UgZmllbGQ8L2xpPgoJCTxsaT5ubDJiciAmIzgyMTE7IENvbnZlcnQg bmV3bGluZXMgdG8gYnIgdGFnczwvbGk+CgkJPGxpPnJhbmR1aWQgJiM4MjExOyBHZW5lcmF0 ZSBhIHJhbmRvbSB1bmlxdWUgaWQgKG1kNSBoYXNoKS4gVXNlIHdpdGggbWVtX2Zvcm1fc2Vj cmV0IG9yIG1lbV9mb3JtX2hpZGRlbi48L2xpPgoJCTxsaT5sb3dlciAmIzgyMTE7IENvbnZl cnQgdG8gbG93ZXIgY2FzZTwvbGk+CgkJPGxpPnVwcGVyICYjODIxMTsgQ29udmVydCB0byB1 cHBlciBjYXNlPC9saT4KCQk8bGk+YmFzZTY0ZW5jb2RlICYjODIxMTsgQmFzZTY0IGVuY29k ZTwvbGk+CgkJPGxpPmJhc2U2NGRlY29kZSAmIzgyMTE7IEJhc2U2NCBkZWNvZGU8L2xpPgoJ CTxsaT5zdHJpbmcgJiM4MjExOyBObyBwcm9jZXNzaW5nPC9saT4KCQk8bGk+aW50ICYjODIx MTsgRmllbGQgY29udGFpbnMgYSBudW1lcmljIHZhbHVlPC9saT4KCTwvdWw+PC9wPgoKCTx1 bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnRhYmxlPC9z cGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IE5hbWUgb2YgdGhl IHRhYmxlIHRvIGluc2VydCBkYXRhIG9uIGEgc3VjY2Vzc2Z1bCBmb3JtIHN1Ym1pc3Npb24u PC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0 cy1uYW1lIj5pZF9maWVsZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5n PC9zcGFuPiBJZiBzcGVjaWZpZWQsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGZp ZWxkIHRoYXQgaXMgYSA8c3BhbiBjbGFzcz0iY2FwcyI+UFJJTUFSWTwvc3Bhbj4gPHNwYW4g Y2xhc3M9ImNhcHMiPktFWTwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVOSVFVRTwv c3Bhbj4gPHNwYW4gY2xhc3M9ImNhcHMiPklOREVYPC9zcGFuPi4gVGhpcyBhbGxvd3MgdXBk YXRlcyBpZiBhIHJlY29yZCB3aXRoIGEgbWF0Y2hpbmcgSUQgYWxyZWFkeSBleGlzdHMuPC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1u YW1lIj5pZF9pbnNlcnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPmludDwvc3Bh bj4gSWYgJiM4MjIwOzEmIzgyMjE7LCB0aGUgSUQgZmllbGQgd2lsbCBiZSBpbnNlcnRlZC91 cGRhdGVkLiBPdGhlcndpc2UsIHRoZSBmaWVsZCBpcyBhc3N1bWVkIHRvIGJlIGF1dG8gZ2Vu ZXJhdGVkIGJ5IHRoZSBkYXRhYmFzZS48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmlnbm9yZV9maWVsZHM8L3NwYW4+IDxz cGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gQSBjb21tYSBzZXBhcmF0ZWQg c3RyaW5nIG9mIGZpZWxkIG5hbWVzIChpbmNsdWRpbmcgcHJlZml4ZXMpIHRoYXQgd2lsbCBu b3QgYmUgd3JpdHRlbiB0byB0aGUgdGFibGUuIFRoZXNlIGFyZSBoYW5keSBmb3IgVG9TIGNo ZWNrYm94ZXMgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5DQVBUQ0hBPC9zcGFuPnMuPC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1l Ij5mb3JtPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IE5h bWUgb2YgZm9ybSB0aGF0IGNvbnRhaW5zIHRoZSBtZW1fc2ltcGxlX2Zvcm0gZm9ybSB0YWdz LjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dHMtbmFtZSI+c3VjY2Vzc19mb3JtPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5z dHJpbmc8L3NwYW4+IE5hbWUgb2YgdGhlIGZvcm0gdGhhdCB3aWxsIGJlIHNob3duIGFmdGVy IGEgc3VjY2Vzc2Z1bCBwb3N0LjwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFnIiBpZD0i bWVtX3NpbXBsZV9pZl9wcyI+bWVtX3NpbXBsZV9pZl9wczwvaDM+CgoJPHAgY2xhc3M9InRh Zy1zdW1tYXJ5Ij5Db25kaXRpb25hbCB0YWcgdGhhdCBjaGVja3MgdG8gc2VlIGlmIGEgPHNw YW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGZpZWxkIHdhcyBwb3N0ZWQsIG9yIGlmIGl0 IGhhcyBhIHNwZWNpZmljIHZhbHVlLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5uYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10 eXBlIj5zdHJpbmc8L3NwYW4+IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBmaWVs ZCBuYW1lIHBvc3RlZCB3aXRoIHRoZSBmb3JtLjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJh dHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+ZXF1YWw8L3NwYW4+IDxzcGFu IGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gVmFsdWUgdG8gY29tcGFyZSBhZ2Fp bnN0IHRoZSB2YWx1ZSBvZiBuYW1lLiBJZiBub3Qgc3BlY2lmaWVkLCB0YWcgY2hlY2tzIHRv IHNlZSBpZiBmb3JtIHBvc3RlZCB2YXJpYWJsZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gZmllbGQgbmFtZS48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1l bV9zaW1wbGVfcHMiPm1lbV9zaW1wbGVfcHM8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFy eSI+VGhpcyB0YWcgd2lsbCBvdXRwdXQgdGhlIHZhbHVlIG9mIHRoZSBwb3N0ZWQgPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGZvcm0gZmllbGQuPC9wPgoKCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPm5hbWU8L3NwYW4+IDxzcGFu IGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IGZpZWxkIG5hbWUgcG9zdGVkIHdpdGggdGhlIGZvcm0uPC9saT4KCTwvdWw+ IjtzOjQ6ImNvZGUiO3M6NjI5ODoiCgoKCi8vIE1MUApnbG9iYWwgJG1lbV9zaW1wbGVfbGFu ZzsKaWYgKCFpc19hcnJheSgkbWVtX3NpbXBsZV9sYW5nKSkKewoJJG1lbV9zaW1wbGVfbGFu ZyA9IGFycmF5KAoJCSd0YWJsZV9uYW1lX3JlcXVpcmVkJwk9PiAnWW91IG11c3QgcHJvdmlk ZSBhIHRhYmxlIG5hbWUgYXMgYW4gYXR0cmlidXRlIHRvIG1lbV9zaW1wbGVfZm9ybScsCgkJ J2Zvcm1fc3VibWl0X2ZhaWxlZCcJPT4gJ1RoZSBmb3JtIHN1Ym1pc3Npb24gZmFpbGVkJywK CQknbm9fZmllbGRzX3JlY2VpdmVkJwk9PiAnTm8gZGF0YSBzdWJtaXR0ZWQgd2l0aCBmb3Jt LicsCgkJJ2F0dHJpYnV0ZV9taXNzaW5nJwkJPT4gJ1JlcXVpcmVkIGF0dHJpYnV0ZSB7bmFt ZX0gbm90IHByb3ZpZGVkJywKCSk7Cn0KZGVmaW5lKCAnTUVNX1NJTVBMRV9QUkVGSVgnICwg J21lbV9zZWxmJyApOwoKcmVnaXN0ZXJfY2FsbGJhY2soICdtZW1fc2ltcGxlX2VudW1lcmF0 ZV9zdHJpbmdzJyAsICdsMTBuLmVudW1lcmF0ZV9zdHJpbmdzJyApOwpmdW5jdGlvbiBtZW1f c2ltcGxlX2VudW1lcmF0ZV9zdHJpbmdzKCRldmVudCAsICRzdGVwPScnICwgJHByZT0wKQp7 CglnbG9iYWwgJG1lbV9zaW1wbGVfbGFuZzsKCSRyID0gYXJyYXkJKAoJCQkJJ293bmVyJwkJ PT4gJ21lbV9zaW1wbGVfZm9ybScsCQkJIwlDaGFuZ2UgdG8geW91ciBwbHVnaW4ncyBuYW1l CgkJCQkncHJlZml4Jwk9PiBNRU1fU0lNUExFX1BSRUZJWCwJCQkJIwlJdHMgdW5pcXVlIHN0 cmluZyBwcmVmaXgKCQkJCSdsYW5nJwkJPT4gJ2VuLWdiJywJCQkJCQkjCVRoZSBsYW5ndWFn ZSBvZiB0aGUgaW5pdGlhbCBzdHJpbmdzLgoJCQkJJ2V2ZW50JwkJPT4gJ3B1YmxpYycsCQkJ CQkjCXB1YmxpYy9hZG1pbi9jb21tb24gPSB3aGljaCBpbnRlcmZhY2UgdGhlIHN0cmluZ3Mg d2lsbCBiZSBsb2FkZWQgaW50bwoJCQkJJ3N0cmluZ3MnCT0+ICRtZW1fc2ltcGxlX2xhbmcs CQkJCSMJVGhlIHN0cmluZ3MgdGhlbXNlbHZlcy4KCQkJCSk7CglyZXR1cm4gJHI7Cn0KZnVu Y3Rpb24gbWVtX3NpbXBsZV9nVHh0KCR3aGF0LCRhcmdzID0gYXJyYXkoKSkKewoJZ2xvYmFs ICRtZW1fc2ltcGxlX2xhbmcsICR0ZXh0YXJyYXk7CgoJJGtleSA9IHN0cnRvbG93ZXIoIE1F TV9TSU1QTEVfUFJFRklYIC4gJy0nIC4gJHdoYXQgKTsKCglpZiAoaXNzZXQoJHRleHRhcnJh eVska2V5XSkpCgl7CgkJJHN0ciA9ICR0ZXh0YXJyYXlbJGtleV07Cgl9CgllbHNlCgl7CgkJ JGtleSA9IHN0cnRvbG93ZXIoJHdoYXQpOwoKCQlpZiAoaXNzZXQoJG1lbV9zaW1wbGVfbGFu Z1ska2V5XSkpCgkJCSRzdHIgPSAkbWVtX3NpbXBsZV9sYW5nWyRrZXldOwoJCWVsc2VpZiAo aXNzZXQoJHRleHRhcnJheVska2V5XSkpCgkJCSRzdHIgPSAkdGV4dGFycmF5WyRrZXldOwoJ CWVsc2UKCQkJJHN0ciA9ICR3aGF0OwoJfQoKCWlmKCAhZW1wdHkoJGFyZ3MpICkKCQkkc3Ry ID0gc3RydHIoICRzdHIgLCAkYXJncyApOwoKCXJldHVybiAkc3RyOwp9CgoKcmVxdWlyZV9w bHVnaW4oJ21lbV9mb3JtJyk7CgoKZnVuY3Rpb24gbWVtX3NpbXBsZV9mb3JtKCRhdHRzLCAk dGhpbmc9JycpCnsKICAgICRhdHRzID0gbEF0dHMoYXJyYXkoCiAgICAgICAgJ3R5cGUnICA9 PiAgJ21lbV9zaW1wbGVfZm9ybScsCiAgICAgICAgJ3RhYmxlJyA9PiAgZmFsc2UsCiAgICAg ICAgJ2lkX2ZpZWxkJyAgPT4gZmFsc2UsCiAgICAgICAgJ2lkX2luc2VydCcJPT4gZmFsc2Us CiAgICAgICAgJ2lnbm9yZV9maWVsZHMnCT0+IGZhbHNlLAogICAgICAgICdmb3JtJwk9PiAn JywKICAgICAgICAnc3VjY2Vzc19mb3JtJwk9PiBmYWxzZSwKICAgICksJGF0dHMsMCk7Cgog ICAgaWYgKGVtcHR5KCRhdHRzWyd0YWJsZSddKSkKICAgICAgICB0cmlnZ2VyX2Vycm9yKGdU eHQoJ2F0dHJpYnV0ZV9yZXF1aXJlZCcsIGFycmF5KCd7YXR0fScgPT4gJ3RhYmxlJykpKTsK CgkJaWYgKCFlbXB0eSgkYXR0c1snZm9ybSddKSkgewoJCQkkdGhpbmcgPSBmZXRjaF9mb3Jt KCRhdHRzWydmb3JtJ10pOwoJCQl1bnNldCgkYXR0c1snZm9ybSddKTsKCQl9CgoJCWZvcmVh Y2goYXJyYXkoJ3RhYmxlJywnaWRfZmllbGQnLCdpZF9pbnNlcnQnLCdpZ25vcmVfZmllbGRz Jywnc3VjY2Vzc19mb3JtJykgYXMgJGEpIHsKCQkJJHRoaW5nIC49ICc8dHhwOm1lbV9mb3Jt X3NlY3JldCBuYW1lPSJtZW1fc2ltcGxlXycuJGEuJyIgdmFsdWU9IicuJGF0dHNbJGFdLici IC8+JzsKCQkJdW5zZXQoJGF0dHNbJGFdKTsKCQl9CgogICAgcmV0dXJuIG1lbV9mb3JtKCRh dHRzLCAkdGhpbmcpOwp9CgoKcmVnaXN0ZXJfY2FsbGJhY2soJ21lbV9zaW1wbGVfZm9ybV9z dWJtaXR0ZWQnLCAnbWVtX2Zvcm0uc3VibWl0Jyk7CmZ1bmN0aW9uIG1lbV9zaW1wbGVfZm9y bV9zdWJtaXR0ZWQoKQp7CglnbG9iYWwgJG1lbV9mb3JtX3R5cGUsICRtZW1fZm9ybV92YWx1 ZXMsICRwcm9kdWN0aW9uX3N0YXR1czsKCglpZiAoJG1lbV9mb3JtX3R5cGUgIT09ICdtZW1f c2ltcGxlX2Zvcm0nKQoJCXJldHVybjsKCiAgJHRhYmxlID0gQCRtZW1fZm9ybV92YWx1ZXNb J21lbV9zaW1wbGVfdGFibGUnXTsKCiAgaWYgKGVtcHR5KCR0YWJsZSkpCiAgewogIAl0cmln Z2VyX2Vycm9yKG1lbV9zaW1wbGVfZ1R4dCgndGFibGVfbmFtZV9yZXF1aXJlZCcpKTsKICAg ICAgLy8gdGFibGUgbmFtZSByZXF1aXJlZAogICAgICByZXR1cm47CiAgfQoKCSRpZF9maWVs ZCA9IEAkbWVtX2Zvcm1fdmFsdWVzWydtZW1fc2ltcGxlX2lkX2ZpZWxkJ107CgkkaWRfaW5z ZXJ0ID0gQCRtZW1fZm9ybV92YWx1ZXNbJ21lbV9zaW1wbGVfaWRfaW5zZXJ0J107CgoJJGln bm9yZV9maWVsZHMgPSBAJG1lbV9mb3JtX3ZhbHVlc1snbWVtX3NpbXBsZV9pZ25vcmVfZmll bGRzJ107CgkkaWdub3JlX2ZpZWxkcyA9IGVtcHR5KCRpZ25vcmVfZmllbGRzKSA/IGFycmF5 KCkgOiBzcGxpdCgnLCcsICRpZ25vcmVfZmllbGRzKTsKCSRpZ25vcmVfZmllbGRzX25hbWVz ID0gYXJyYXlfdmFsdWVzKCRpZ25vcmVfZmllbGRzKTsKCSRpZ25vcmVfZmllbGRzX25hbWVz W10gPSAnbWVtX2Zvcm1fc3VibWl0JzsKCgkkdGV4dGlsZSA9IGZhbHNlOwogICRmaWVsZHMg PSBhcnJheSgpOwoKICAkaWQgPSBmYWxzZTsKCglmb3JlYWNoKCRtZW1fZm9ybV92YWx1ZXMg YXMgJGs9PiR2KQoJewoJCQkvLyBza2lwIHBsdWdpbiBjb25maWcgdmFsdWVzIGFuZCBpZ25v cmFibGUgZmllbGRzCgkJCWlmIChzdHJuY21wKCRrLCAnbWVtX3NpbXBsZV8nLCAxMSkgPT0g MCB8fCBpbl9hcnJheSgkaywgJGlnbm9yZV9maWVsZHNfbmFtZXMpICkKCQkJewoJCQkJY29u dGludWU7CgkJCX0KCgkgICAgLy8gc3BsaXQgdGhlIHR5cGUgZnJvbSBuYW1lLiBpbnRfbnVt YmVyX3ZhbHVlID09PiBpbnQsIG51bWJlcl92YWx1ZQoJICAgIGxpc3QoJHR5cGUsICRuYW1l KSA9IHNwbGl0KCdfJywgJGssIDIpOwoKCQkJaWYgKCR0eXBlID09ICdpbnQnKQoJCQkJJGZv cm1hdCA9ICIlcyA9ICVkIjsKCQkJZWxzZQoJCQl7CgkJCQkvLyBzdGFuZGFyZCBzdHJpbmcg Zm9ybWF0CgkJCQkkZm9ybWF0ID0gIiVzID0gJyVzJyI7CgoJCQkJLy8gbXlzcWwgZnVuY3Rp b25zCgkJCQkkZnVuY3MgPSBhcnJheSgKCQkJCQkJCQkJJ25vdycgPT4gIk5PVygpIiwKCQkJ CQkJCQkJJ3Bhc3N3b3JkJyA9PiAiUEFTU1dPUkQoJyVzJykiLAoJCQkJCQkJCQknb2xkcGFz c3dvcmQnID0+ICJPTERfUEFTU1dPUkQoJyVzJykiLAoJCQkJCQkJCQknbWQ1JyA9PiAiTUQ1 KCclcycpIiwKCQkJCQkJCQkJJ3NoYTEnID0+ICJTSEExKCclcycpIiwKCQkJCQkJCQkJJ3Jh bmQnID0+ICdSQU5EKCknLAoJCQkJCQkJCSk7CgoJCQkJaWYgKGFycmF5X2tleV9leGlzdHMo JHR5cGUsICRmdW5jcykpCgkJCQl7CgkJCQkJJGZvcm1hdCA9ICIlcyA9ICIgLiAkZnVuY3Nb JHR5cGVdOwoJCQkJfQoJCQkJZWxzZSBpZiAoJHR5cGUgPT0gJ3RleHRpbGUnKQoJCQkJewoJ CQkJCWlmICghJHRleHRpbGUpCgkJCQkJewoJCQkJCQkvLyBsb2FkIHRleHRpbGUgc2luZ2xl dG9uCgkJCQkJCWluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7 CgkJCQkJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKCQkJCQl9CgoJCQkJCSR2ID0gJHRl eHRpbGUtPlRleHRpbGVUaGlzKCR2KTsKCQkJCX0KCQkJCWVsc2UgaWYgKCR0eXBlID09ICdu bDJicicpCgkJCQkJJHYgPSBubDJicih0cmltKCR2KSk7CgkJCQllbHNlIGlmICgkdHlwZSA9 PSAndXJsdGl0bGUnKQoJCQkJCSR2ID0gc3RyaXBTcGFjZSgkdiwxKTsKCQkJCWVsc2UgaWYg KCR0eXBlID09ICdyYW5kdWlkJykKCQkJCQkkdiA9IG1kNSh1bmlxaWQocmFuZCgpLHRydWUp KTsKCQkJCWVsc2UgaWYgKCR0eXBlID09ICdsb3dlcicpCgkJCQkJJHYgPSBzdHJ0b2xvd2Vy KCR2KTsKCQkJCWVsc2UgaWYgKCR0eXBlID09ICd1cHBlcicpCgkJCQkJJHYgPSBzdHJ0b3Vw cGVyKCR2KTsKCQkJCWVsc2UgaWYgKCR0eXBlID09ICdiYXNlNjRlbmNvZGUnKQoJCQkJCSR2 ID0gYmFzZTY0X2VuY29kZSgkdik7CgkJCQllbHNlIGlmICgkdHlwZSA9PSAnYmFzZTY0ZGVj b2RlJykKCQkJCQkkdiA9IGJhc2U2NF9kZWNvZGUoJHYpOwoJCQl9CgoJCQkvLyBzdG9yZSB0 aGUgcHJvY2Vzc2VkIHZhbHVlIHNvIG90aGVycyBjYW4gYWNjZXNzCgkJCSRfUE9TVFska10g PSAkdjsKCiAgICAgICRzID0gc3ByaW50ZigkZm9ybWF0LCBkb1NsYXNoKCRuYW1lKSwgZG9T bGFzaCgkdikpOwoKCSAgICBpZiAoJGlkX2ZpZWxkID09ICRuYW1lICYmICEkaWRfaW5zZXJ0 KQoJICAgIHsKCSAgICAgICAgJGlkID0gJHM7CgkgICAgICAgIC8vIGRvbid0IHVwZGF0ZSBp ZCBmaWVsZAoJICAgICAgICBjb250aW51ZTsKCSAgICB9CgogICAgICAgICRmaWVsZHNbXSA9 ICRzOwoJfQoKCWlmICghZW1wdHkoJGZpZWxkcykpCgl7CiAgICAgICAgJGluc2VydCA9IGVt cHR5KCRpZCk7CgogICAJICAgIGlmICgkaW5zZXJ0KQogICAJICAgIHsKICAgCSAgICAgICAg JHJzID0gc2FmZV9pbnNlcnQoIGRvU2xhc2goJHRhYmxlKSwgam9pbignLCAnLCRmaWVsZHMp ICk7CiAgIAkgICAgfQogICAJICAgIGVsc2UKICAgCSAgICB7CiAgIAkgICAgICAgICRycyA9 IHNhZmVfdXBzZXJ0KCBkb1NsYXNoKCR0YWJsZSksIGpvaW4oJywgJywkZmllbGRzKSwgJGlk ICk7CiAgIAkgICAgfQoKICAgCSAgICBpZiAoJHJzKQogICAJICAgIHsKICAgCSAgICAgICAg Ly8geWF5CiAgIAkgICAgICAgICRmb3JtID0gQCRtZW1fZm9ybV92YWx1ZXNbJ21lbV9zaW1w bGVfc3VjY2Vzc19mb3JtJ107CiAgIAkgICAgICAgIGlmICghZW1wdHkoJGZvcm0pKQogICAJ ICAgICAgICB7CiAgIAkgICAgICAgIAkkZm9ybSA9IEBmZXRjaF9mb3JtKCRmb3JtKTsKCiAg IAkgICAgICAgIAlpZiAoIWVtcHR5KCRmb3JtKSkKICAgCSAgICAgICAgCQlyZXR1cm4gcGFy c2UoJGZvcm0pOwogICAJICAgICAgICB9CiAgIAkgICAgfQogICAJICAgIGVsc2UKICAgCSAg ICB7CiAgIAkgICAgICAgIC8vIGJvbwogICAJICAgICAgICBpZiAoJHByb2R1Y3Rpb25fc3Rh dHVzICE9ICdsaXZlJykKCSAgIAkgICAgICAgIHRyaWdnZXJfZXJyb3IoJ0ZhaWxlZCB0byBz dG9yZSBkYXRhIHRvIHRhYmxlLiAnIC4gbXlzcWxfZXJyb3IoJHJzKSk7CgogICAJICAgICAg ICByZXR1cm4gbWVtX3NpbXBsZV9nVHh0KCdmb3JtX3N1Ym1pdF9mYWlsZWQnKTsKICAgCSAg ICB9Cgl9CgllbHNlCgl7CgkgICAgcmV0dXJuIG1lbV9zaW1wbGVfZ1R4dCgnbm9fZmllbGRz X3JlY2VpdmVkJyk7Cgl9Cn0KCmZ1bmN0aW9uIG1lbV9zaW1wbGVfcHMoJGF0dHMsJHRoaW5n PScnKQp7CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSduYW1lJwk9PglmYWxzZSwKCSksJGF0 dHMpKTsKCglpZiAoIWVtcHR5KCRuYW1lKSkKCXsKCQkJJG4gPSBncHMoJG5hbWUpOwoJCQlp ZiAoIWVtcHR5KCRuKSkKCQkJCXJldHVybiAkbjsKCX0KCXJldHVybiAnJzsKfQoKZnVuY3Rp b24gbWVtX3NpbXBsZV9pZl9wcygkYXR0cywgJHRoaW5nPScnKQp7CglleHRyYWN0KGxBdHRz KGFycmF5KAoJCSduYW1lJwk9PglmYWxzZSwKCQknZXF1YWwnCT0+CWZhbHNlLAoJKSwkYXR0 cykpOwoKCWlmICgkbmFtZSA9PT0gZmFsc2UpCgkJdHJpZ2dlcl9lcnJvcihnVHh0KCdhdHRy aWJ1dGVfbWlzc2luZycsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSkpOwoKCWlmICgkZXF1 YWwgPT09IGZhbHNlKQoJCSRjb25kaXRpb24gPSBpc3NldCgkX1BPU1RbJG5hbWVdKTsKCWVs c2UKCQkkY29uZGl0aW9uID0gKGdwcygnbmFtZScpID09ICRlcXVhbCk7CgkkdGhpbmcgPSBF dmFsRWxzZSgkdGhpbmcsICRjb25kaXRpb24pOwoKCXJldHVybiBwYXJzZSgkdGhpbmcpOwp9 CiI7czo4OiJoZWxwX3JhdyI7czozMzE5OiJoMSh0aXRsZSkuIG1lbV9zaW1wbGVfZm9ybSBw bHVnaW4KCmgyKHNlY3Rpb24gc3VtbWFyeSkuIFN1bW1hcnkKCnAuIFRoaXMgcGx1Z2luIGFs bG93cyBmb3IgYSBzaXRlIG93bmVyIHRvIGhhdmUgYSBmb3JtIGFjY2VwdCBpbnB1dCBhbmQg c3RvcmUgdGhlIGRhdGEgaW4gYW4gZXhpc3RpbmcgdGFibGUuIEJhc2ljIHByb2Nlc3Npbmcg Y2FuIGJlIGRvbmUgdG8KdGhlIGRhdGEgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIHRhYmxlLgoK cC4gVGhpcyBwbHVnaW4gcmVxdWlyZXMgbWVtX2Zvcm0uCgpwLiBUaGlzIHBsdWdpbiBoYXMg TUxQIHN1cHBvcnQuCgpoMihzZWN0aW9uIGNvbnRhY3QpLiBBdXRob3IgQ29udGFjdAoKIk1p Y2hhZWwgTWFuZnJlIjptYWlsdG86bW1hbmZyZUBnbWFpbC5jb20/c3ViamVjdD1UZXh0cGF0 dGVybiUyMG1lbV9zaW1wbGVfZm9ybSUyMHBsdWdpbgoiaHR0cDovL21hbmZyZS5uZXQiOmh0 dHA6Ly9tYW5mcmUubmV0CgpoMihzZWN0aW9uIGxpY2Vuc2UpLiBMaWNlbnNlCgpwLiBUaGlz IHBsdWdpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgIkdQTHYyIjpodHRwOi8vd3d3LmZzZi5v cmcvbGljZW5zaW5nL2xpY2Vuc2VzL2luZm8vR1BMdjIuaHRtbC4KCmgyKHNlY3Rpb24gaW5z dGFsbGF0aW9uKS4gSW5zdGFsbGF0aW9uCgpwLiBObyBleHRyYSBpbnN0YWxsYXRpb24gc3Rl cHMKCmgyKHNlY3Rpb24gdGFncykuIFRhZ3MKCiogIm1lbV9zaW1wbGVfZm9ybSI6I21lbV9z aW1wbGVfZm9ybQoqICJtZW1fc2ltcGxlX2lmX3BzIjojbWVtX3NpbXBsZV9pZl9wcwoqICJt ZW1fc2ltcGxlX3BzIjojbWVtX3NpbXBsZV9wcwoKaDModGFnI21lbV9zaW1wbGVfZm9ybSku IG1lbV9zaW1wbGVfZm9ybQoKcCh0YWctc3VtbWFyeSkuIFRoaXMgdGFnIHdpbGwgb3V0cHV0 IGFuIEhUTUwgZm9ybS4gVGhlIEhUTUwgZm9ybSBmaWVsZCBuYW1lcyBtdXN0IGZvbGxvdyB0 aGUgcGF0dGVybiAiQDx0eXBlPl88bmFtZT5AIiwgd2hlcmUgQDx0eXBlPkAgaXMgYSB2YWx1 ZSBmcm9tCgl0aGUgYmVsb3cgdHlwZSBsaXN0LiBUaGUgZGF0YWJhc2UgdGFibGUncyBmaWVs ZCBuYW1lIG11c3QgbWF0Y2ggQDxuYW1lPkAgZXhhY3RseSAoY2FzZSBzZW5zaXRpdmUpLgoK cCh0YWctc3VtbWFyeSkuIEZvcm0gVHlwZXM6Ciogbm93IC0gTXlTUUwgIk5PVygpIiBmdW5j dGlvbi4gVXNlIHdpdGggbWVtX2Zvcm1fc2VjcmV0IG9yIG1lbV9mb3JtX2hpZGRlbi4KKiBw YXNzd29yZCAtIE15U1FMICJQQVNTV09SRCgpIiBmdW5jdGlvbgoqIG9sZHBhc3N3b3JkIC0g TXlTUUwgIk9MRF9QQVNTV09SRCgpIiBmdW5jdGlvbgoqIG1kNSAtIE15U1FMICJNRDUoKSIg ZnVuY3Rpb24KKiBzaGExIC0gTXlTUUwgIlNIQTEoKSIgZnVuY3Rpb24KKiByYW5kIC0gTXlT UUwgIlJBTkQoKSIgZnVuY3Rpb24uIFVzZSB3aXRoIG1lbV9mb3JtX3NlY3JldCBvciBtZW1f Zm9ybV9oaWRkZW4uCiogdGV4dGlsZSAtIFRleHRpbGUgcGFyc2UgZmllbGQKKiBubDJiciAt IENvbnZlcnQgbmV3bGluZXMgdG8gYnIgdGFncwoqIHJhbmR1aWQgLSBHZW5lcmF0ZSBhIHJh bmRvbSB1bmlxdWUgaWQgKG1kNSBoYXNoKS4gVXNlIHdpdGggbWVtX2Zvcm1fc2VjcmV0IG9y IG1lbV9mb3JtX2hpZGRlbi4KKiBsb3dlciAtIENvbnZlcnQgdG8gbG93ZXIgY2FzZQoqIHVw cGVyIC0gQ29udmVydCB0byB1cHBlciBjYXNlCiogYmFzZTY0ZW5jb2RlIC0gQmFzZTY0IGVu Y29kZQoqIGJhc2U2NGRlY29kZSAtIEJhc2U2NCBkZWNvZGUKKiBzdHJpbmcgLSBObyBwcm9j ZXNzaW5nCiogaW50IC0gRmllbGQgY29udGFpbnMgYSBudW1lcmljIHZhbHVlCgoqKGF0dHMp ICUoYXR0cy1uYW1lKXRhYmxlJSAlKGF0dHMtdHlwZSlzdHJpbmclIE5hbWUgb2YgdGhlIHRh YmxlIHRvIGluc2VydCBkYXRhIG9uIGEgc3VjY2Vzc2Z1bCBmb3JtIHN1Ym1pc3Npb24uCioo YXR0cykgJShhdHRzLW5hbWUpaWRfZmllbGQlICUoYXR0cy10eXBlKXN0cmluZyUgSWYgc3Bl Y2lmaWVkLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBmaWVsZCB0aGF0IGlzIGEg UFJJTUFSWSBLRVkgb3IgVU5JUVVFIElOREVYLiBUaGlzIGFsbG93cyB1cGRhdGVzIGlmIGEg cmVjb3JkIHdpdGggYSBtYXRjaGluZyBJRCBhbHJlYWR5IGV4aXN0cy4KKihhdHRzKSAlKGF0 dHMtbmFtZSlpZF9pbnNlcnQlICUoYXR0cy10eXBlKWludCUgSWYgIjEiLCB0aGUgSUQgZmll bGQgd2lsbCBiZSBpbnNlcnRlZC91cGRhdGVkLiBPdGhlcndpc2UsIHRoZSBmaWVsZCBpcyBh c3N1bWVkIHRvIGJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBkYXRhYmFzZS4KKihhdHRzKSAl KGF0dHMtbmFtZSlpZ25vcmVfZmllbGRzJSAlKGF0dHMtdHlwZSlzdHJpbmclIEEgY29tbWEg c2VwYXJhdGVkIHN0cmluZyBvZiBmaWVsZCBuYW1lcyAoaW5jbHVkaW5nIHByZWZpeGVzKSB0 aGF0IHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHRhYmxlLiBUaGVzZSBhcmUgaGFuZHkg Zm9yIFRvUyBjaGVja2JveGVzIGFuZCBDQVBUQ0hBcy4KKihhdHRzKSAlKGF0dHMtbmFtZSlm b3JtJSAlKGF0dHMtdHlwZSlzdHJpbmclIE5hbWUgb2YgZm9ybSB0aGF0IGNvbnRhaW5zIHRo ZSBtZW1fc2ltcGxlX2Zvcm0gZm9ybSB0YWdzLgoqKGF0dHMpICUoYXR0cy1uYW1lKXN1Y2Nl c3NfZm9ybSUgJShhdHRzLXR5cGUpc3RyaW5nJSBOYW1lIG9mIHRoZSBmb3JtIHRoYXQgd2ls bCBiZSBzaG93biBhZnRlciBhIHN1Y2Nlc3NmdWwgcG9zdC4KCmgzKHRhZyNtZW1fc2ltcGxl X2lmX3BzKS4gbWVtX3NpbXBsZV9pZl9wcwoKcCh0YWctc3VtbWFyeSkuIENvbmRpdGlvbmFs IHRhZyB0aGF0IGNoZWNrcyB0byBzZWUgaWYgYSBIVE1MIGZpZWxkIHdhcyBwb3N0ZWQsIG9y IGlmIGl0IGhhcyBhIHNwZWNpZmljIHZhbHVlLgoKKihhdHRzKSAlKGF0dHMtbmFtZSluYW1l JSAlKGF0dHMtdHlwZSlzdHJpbmclIEhUTUwgZmllbGQgbmFtZSBwb3N0ZWQgd2l0aCB0aGUg Zm9ybS4KKihhdHRzKSAlKGF0dHMtbmFtZSllcXVhbCUgJShhdHRzLXR5cGUpc3RyaW5nJSBW YWx1ZSB0byBjb21wYXJlIGFnYWluc3QgdGhlIHZhbHVlIG9mIG5hbWUuIElmIG5vdCBzcGVj aWZpZWQsIHRhZyBjaGVja3MgdG8gc2VlIGlmIGZvcm0gcG9zdGVkIHZhcmlhYmxlIEhUTUwg ZmllbGQgbmFtZS4KCmgzKHRhZyNtZW1fc2ltcGxlX3BzKS4gbWVtX3NpbXBsZV9wcwoKcCh0 YWctc3VtbWFyeSkuIFRoaXMgdGFnIHdpbGwgb3V0cHV0IHRoZSB2YWx1ZSBvZiB0aGUgcG9z dGVkIEhUTUwgZm9ybSBmaWVsZC4KCiooYXR0cykgJShhdHRzLW5hbWUpbmFtZSUgJShhdHRz LXR5cGUpc3RyaW5nJSBIVE1MIGZpZWxkIG5hbWUgcG9zdGVkIHdpdGggdGhlIGZvcm0uIjtz OjM6Im1kNSI7czozMjoiZGU3N2JhYWE2YWIwOWJhY2JhY2YxMDZjZmVmZDA1MWEiO30=