# adi_menu v0.11 # Section hierarchy, section menu and breadcrumb trail # Adi Gilbert # http://www.greatoceanmedia.com.au/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjg6ImFkaV9tZW51IjtzOjc6InZlcnNpb24iO3M6NDoiMC4x MSI7czo2OiJhdXRob3IiO3M6MTE6IkFkaSBHaWxiZXJ0IjtzOjEwOiJhdXRob3JfdXJpIjtz OjM0OiJodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvIjtzOjExOiJkZXNjcmlw dGlvbiI7czo1MjoiU2VjdGlvbiBoaWVyYXJjaHksIHNlY3Rpb24gbWVudSBhbmQgYnJlYWRj cnVtYiB0cmFpbCI7czo0OiJ0eXBlIjtpOjE7czo0OiJoZWxwIjtzOjIwNjA1OiIJPGgxPjxz dHJvbmc+YWRpX21lbnU8L3N0cm9uZz4gJiM4MjExOyBTZWN0aW9uIGhpZXJhcmNoeSwgc2Vj dGlvbiBtZW51IGFuZCBicmVhZGNydW1iIHRyYWlsPC9oMT4KCgk8cD5UaGlzIHBsdWdpbiBw cm92aWRlczo8L3A+CgoJPHVsPgoJCTxsaT5hIG5ldyB0YWIgdW5kZXIgUHJlc2VudGF0aW9u LCB0byBzZXQgdXAgdGhlIHNlY3Rpb24gaGllcmFyY2h5PC9saT4KCQk8bGk+dHdvIG5ldyB0 YWdzOgoJPHVsPgoJCTxsaT48Y29kZT4mbHQ7dHhwOmFkaV9tZW51IC8mZ3Q7PC9jb2RlPiB0 byBvdXRwdXQgdGhlIHNlY3Rpb24gbWVudSBtYXJrdXA8L2xpPgoJCTxsaT48Y29kZT4mbHQ7 dHhwOmFkaV9tZW51X2JyZWFkY3J1bWIgLyZndDs8L2NvZGU+IHRvIG91dHB1dCBhIGJyZWFk Y3J1bWIgdHJhaWw8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8aDI+PHN0cm9uZz5JbnN0 YWxsYXRpb248L3N0cm9uZz48L2gyPgoKCTxwPjxlbT5JbnN0YWxsYXRpb24gb2YgPHN0cm9u Zz5hZGlfbWVudTwvc3Ryb25nPiB3aWxsIGFkZCBzb21lIGNvbHVtbnMgdG8geW91ciBUZXh0 cGF0dGVybiBkYXRhYmFzZS4gIFRoZXNlIGNvbHVtbnMgYXJlIG5hbWVkIHdpdGggYW4gJiM4 MjIwO2FkaV9tZW51JiM4MjIxOyBwcmVmaXggc28gc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0 aCBhbnl0aGluZyBlbHNlLiAgVGhhdCBzYWlkLCBpZiB5b3UgYXJlIG9mIGEgY2F1dGlvdXMg ZnJhbWUgb2YgbWluZCB0aGVuIEkgY2FuIHRob3JvdWdobHkgcmVjb21tZW5kIDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMDM5NSI+ cnNzX2FkbWluX2RiX21hbmFnZXI8L2E+IHRvIGRvIGRhdGFiYXNlIGJhY2t1cHMgYmVmb3Jl IGluc3RhbGxhdGlvbi48L2VtPjwvcD4KCgk8cD5PbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFs bGVkIGFuZCBhY3RpdmF0ZWQsIGdvIHRvIHRoZSA8c3Ryb25nPmFkaV9tZW51PC9zdHJvbmc+ IHRhYiB1bmRlciBQcmVzZW50YXRpb24sIHNlbGVjdCBJbnN0YWxsIGFuZCBjbGljayB0aGUg JiM4MjIwO0RvIGFkbWluJiM4MjIxOyBidXR0b24uIEhlcmUgeW91IHdpbGwgZmluZCBhbiBV bmluc3RhbGwgb3B0aW9uIGFzIHdlbGwuPC9wPgoKCTxwPk5leHQsIHNlbGVjdCB0aGUgSW1w b3J0IG9wdGlvbiBpZiB5b3Ugd2FudCB0byBjb3B5IHNlY3Rpb24gcGFyZW50IHNldHRpbmdz IGZyb20gPHN0cm9uZz5jbmtfc2VjdGlvbl90cmVlPC9zdHJvbmc+LjwvcD4KCgk8cD5Bc3Np Z24gcGFyZW50cywgc29ydCBvcmRlciBldGMgYW5kIGFkZCB0aGUgPGNvZGU+Jmx0O3R4cDph ZGlfbWVudSAvJmd0OzwvY29kZT4gJmFtcDsgPGNvZGU+Jmx0O3R4cDphZGlfbWVudV9icmVh ZGNydW1iIC8mZ3Q7PC9jb2RlPiB0YWdzIHRvIHlvdXIgcGFnZXMgb3IgZm9ybXMuPC9wPgoK CTxwPlN0eWxlIHRoZSBtZW51IHVzaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+ LjwvcD4KCgk8aDI+PHN0cm9uZz5BZG1pbiB0YWI8L3N0cm9uZz48L2gyPgoKCTxwPlVzZXJz IHdpdGggc3VmZmljaWVudCBwcml2aWxlZ2VzIHdpbGwgc2VlIHRoZSA8c3Ryb25nPmFkaV9t ZW51PC9zdHJvbmc+IGFkbWluIHRhYiwgdW5kZXIgUHJlc2VudGF0aW9uLiAgVGhpcyBwcm92 aWRlczo8L3A+CgoJPHVsPgoJCTxsaT5TZWN0aW9uIGhpZXJhcmNoeSAmIzgyMTE7IGNhbiBi ZSBjcmVhdGVkIGJ5IGFzc2lnbmluZyBwYXJlbnRzPC9saT4KCQk8bGk+U2VjdGlvbiBleGNs dXNpb24gJiM4MjExOyBkZWZpbmUgd2hpY2ggc2VjdGlvbnMgc2hvdWxkIGJlIHBlcm1hbmVu dGx5IGV4Y2x1ZGVkIGZyb20gdGhlIHJlbmRlcmVkIHNlY3Rpb24gbWVudSAoc2VjdGlvbnMg Y2FuIGFsc28gYmUgZXhjbHVkZWQgdXNpbmcgYSA8Y29kZT4mbHQ7dHhwOmFkaV9tZW51IC8m Z3Q7PC9jb2RlPiB0YWcgYXR0cmlidXRlKTwvbGk+CgkJPGxpPlNvcnRpbmcgJiM4MjExOyBz cGVjaWZ5IGEgY3VzdG9tIHNvcnQgb3JkZXIsIGlmIHJlcXVpcmVkPC9saT4KCQk8bGk+Q2xv bmluZyAmIzgyMTE7IHNwZWNpZnkgdGhhdCBhIHNlY3Rpb24gbXVzdCBhcHBlYXIgYXMgYSBj aGlsZCBpbiBpdHMgb3duIHN1YnNlY3Rpb24gbGlzdCAobW9yZSBvbiB0aGF0IGJlbG93KTwv bGk+CgkJPGxpPkFkbWluIGZ1bmN0aW9ucyAmIzgyMTE7IGluc3RhbGwsIHVuaW5zdGFsbCBh bmQgaW1wb3J0PC9saT4KCQk8bGk+QSBzdW1tYXJ5IG9mIHRoZSBjb25maWd1cmVkIHNlY3Rp b24gaGllcmFyY2h5PC9saT4KCTwvdWw+CgoJPHA+VG9vbHRpcHMgYXJlIGF2YWlsYWJsZSBo ZXJlICYjODIxMTsganVzdCBob3ZlciBvdmVyIGFueXRoaW5nIHdpdGggYSBkYXNoZWQgdW5k ZXJsaW5lLjwvcD4KCgk8aDI+PHN0cm9uZz5BcnRpY2xlczwvc3Ryb25nPjwvaDI+CgoJPHA+ Tm90ZSB0aGF0IGEgZm9ybSBjYWxsZWQgPGk+YWRpX21lbnVfYXJ0aWNsZXM8L2k+IHdpbGwg YmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4geW91IGluc3RhbGwgPHN0cm9uZz5hZGlf bWVudTwvc3Ryb25nPi4gSWYgdGhpcyBmb3JtIGdldHMgZGVsZXRlZCwgc2ltcGx5IGdvIHRv IHRoZSA8c3Ryb25nPmFkaV9tZW51PC9zdHJvbmc+IHRhYiAmYW1wOyBpdCB3aWxsIGJlIGNy ZWF0ZWQgYWdhaW4uIEFsdGVybmF0aXZlbHksIGlmIHRoaXMgZm9ybSBoYXMgYmVlbiBjaGFu Z2VkIGFuZCB5b3Ugd2FudCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0LCBkZWxldGUgaXQg JmFtcDsgZ28gdG8gdGhlIDxzdHJvbmc+YWRpX21lbnU8L3N0cm9uZz4gdGFiLjwvcD4KCgk8 cD5UaGUgc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0OzwvY29k ZT4gdGFnIGlzIHVzZWQgdG8gbGlzdCB0aGUgYXJ0aWNsZXMgaW4gdGhlIHNlY3Rpb24gbWVu dSAod2hlbiA8Y29kZT5hcnRpY2xlcz0mcXVvdDsxJnF1b3Q7PC9jb2RlPikgdXNpbmcgdGhl IDxpPmFkaV9tZW51X2FydGljbGVzPC9pPiBmb3JtLiBBcnRpY2xlcyBhcHBlYXIgPGVtPmFm dGVyPC9lbT4gc2VjdGlvbnMgaW4gdGhlIHNhbWUgbGV2ZWwuPC9wPgoKCTxwPlRvIGFsdGVy IHRoZSB3YXkgdGhhdCB0aGUgYXJ0aWNsZXMgYXJlIGxpc3RlZCwgdXNlIHRoZSA8Y29kZT5h cnRpY2xlX2F0dHI8L2NvZGU+IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHN0YW5kYXJkIDxjb2Rl PiZsdDt0eHA6YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+IGF0dHJpYnV0ZXMuIFNlZSBi ZWxvdyBmb3IgZGV0YWlscy48L3A+CgoJPGgyPjxzdHJvbmc+U3ViLW1lbnVzPC9zdHJvbmc+ PC9oMj4KCgk8cD5JZiByZXF1aXJlZCwgPHN0cm9uZz5hZGlfbWVudTwvc3Ryb25nPiBjYW4g YmUgdXNlZCBtb3JlIHRoYW4gb25jZSBvbiBhIHBhZ2UuIEZvciBleGFtcGxlLCB0byByZW5k ZXIgYSBzdWItbWVudSBzZXBhcmF0ZWx5IGZyb20gYSB0b3AtbGV2ZWwgbWVudSB5b3UgY291 bGQgdXNlOjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDphZGlfbWVudSBtZW51X2lkPSZxdW90 O3RvcCZxdW90OyBpbmNsdWRlX2NoaWxkcmVuPSZxdW90OzAmcXVvdDsgYWN0aXZlX2FuY2Vz dG9ycz0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6YWRpX21lbnUgbWVudV9pZD0mcXVv dDtzdWImcXVvdDsgc3ViX21lbnVfbGV2ZWw9JnF1b3Q7MiZxdW90OyAvJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPHA+Rm9yIHRocmVlIHRpZXJzIG9mIG1lbnVzOjwvcD4KCjxwcmU+PGNvZGU+ Jmx0O3R4cDphZGlfbWVudSBtZW51X2lkPSZxdW90O3RvcCZxdW90OyBpbmNsdWRlX2NoaWxk cmVuPSZxdW90OzAmcXVvdDsgYWN0aXZlX2FuY2VzdG9ycz0mcXVvdDsxJnF1b3Q7IC8mZ3Q7 CiZsdDt0eHA6YWRpX21lbnUgbWVudV9pZD0mcXVvdDtzdWImcXVvdDsgc3ViX21lbnVfbGV2 ZWw9JnF1b3Q7MiZxdW90OyBpbmNsdWRlX2NoaWxkcmVuPSZxdW90OzAmcXVvdDsgYWN0aXZl X2FuY2VzdG9ycz0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6YWRpX21lbnUgbWVudV9p ZD0mcXVvdDtzdWJzdWImcXVvdDsgc3ViX21lbnVfbGV2ZWw9JnF1b3Q7MyZxdW90OyAvJmd0 Owo8L2NvZGU+PC9wcmU+CgoJPHA+Tm90ZXM6PC9wPgoKCTx1bD4KCQk8bGk+Zm9yIHN0eWxp bmcgcHVycG9zZXMsIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT5tZW51X2lkPC9jb2RlPiBhdHRy aWJ1dGUgdG8gc2V0IHVuaXF1ZSBJRCYjODIxNztzIG9uIHRoZSBtZW51IDxjb2RlPiZsdDt1 bCZndDs8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+c3ViX21lbnVfbGV2ZWw8L2NvZGU+IGlz IHNlY3Rpb24tc2Vuc2l0aXZlLCBzbyBzdWItbWVudXMgYXJlIGJhc2VkIG9uIHRoZSBjdXJy ZW50bHkgYWN0aXZlIHNlY3Rpb248L2xpPgoJCTxsaT5vbiB0aGUgdXBwZXIgbGV2ZWxzLCA8 Y29kZT5pbmNsdWRlX2NoaWxkcmVuPSZxdW90OzAmcXVvdDs8L2NvZGU+IHByZXZlbnRzIGNo aWxkIHNlY3Rpb25zIGZyb20gYmVpbmcgcmVuZGVyZWQ8L2xpPgoJCTxsaT5vbiB0aGUgbG93 ZXN0IHN1Yi1tZW51LCBhbGwgY2hpbGRyZW4gJmFtcDsgZ3JhbmRjaGlsZHJlbiBhcmUgcmVu ZGVyZWQgKHVubGVzcyBhdHRyaWJ1dGVzIHNwZWNpZnkgb3RoZXJ3aXNlKTwvbGk+CgkJPGxp Pjxjb2RlPmFjdGl2ZV9hbmNlc3RvcnM9JnF1b3Q7MSZxdW90OzwvY29kZT4gZW5hYmxlcyB0 aGUgJiM4MjIwO2FjdGl2ZV9jbGFzcyYjODIyMTsgb24gdGhlIHVwcGVyIGxldmVsczwvbGk+ Cgk8L3VsPgoKCTxwPlRoZSBvcmlnaW5hbCBtZXRob2Qgb2YgcmVuZGVyaW5nIHN1Yi1tZW51 cywgd2hpY2ggb25seSByZWFsbHkgd29ya2VkIGZvciBzZWNvbmQgbGV2ZWwgc3ViLW1lbnVz LCBoYXMgYmVlbiBkZXByZWNhdGVkLiBIb3dldmVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJp bGl0eSwgPGVtPnRoZSBhc3NvY2lhdGVkIGF0dHJpYnV0ZXMgYW5kIGZ1bmN0aW9uYWxpdHkg PHN0cm9uZz53aWxsPC9zdHJvbmc+IGJlIG1haW50YWluZWQuPC9lbT4gU2VlIDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yNzc3OCI+ dGhlIGZvcnVtPC9hPiBmb3IgZGV0YWlscy48L3A+CgoJPGgyPjxzdHJvbmc+U3BlYWtpbmcg QmxvY2tzPC9zdHJvbmc+PC9oMj4KCgk8cD5BIDxhIGhyZWY9Imh0dHA6Ly93d3cuc21hc2hp bmdtYWdhemluZS5jb20vMjAwOC8wMi8yNi9uYXZpZ2F0aW9uLW1lbnVzLXRyZW5kcy1hbmQt ZXhhbXBsZXMvIj5zcGVha2luZyBibG9jazwvYT4gaXMgc29tZSBhZGRpdGlvbmFsIGluZm9y bWF0aW9uIGFkZGVkIHRvIG1lbnUgaXRlbXMgdG8gZW5oYW5jZSB1c2FiaWxpdHkuIFdoZW4g eW91IHN3aXRjaCBvbiBzcGVha2luZyBibG9ja3MgaW4gPHN0cm9uZz5hZGlfbWVudTwvc3Ry b25nPiAoPGNvZGU+c3BlYWtpbmdfYmxvY2s9JnF1b3Q7MSZxdW90OzwvY29kZT4pLCBlYWNo IHNlY3Rpb24mIzgyMTc7cyBzdGlja3kgYXJ0aWNsZSBleGNlcnB0IGlzIGFkZGVkIGludG8g dGhlIG1lbnUsIGVuY2xvc2VkIHdpdGhpbiBhIDxjb2RlPiZsdDtzcGFuJmd0Oy4uLiZsdDsv c3BhbiZndDs8L2NvZGU+IGluc2lkZSB0aGUgPGNvZGU+Jmx0O2EmZ3Q7Li4uJmx0Oy9hJmd0 OzwvY29kZT4gbGluay48L3A+CgoJPHA+Tm90ZSB0aGF0IGJlY2F1c2UgPGNvZGU+Jmx0O2Em Z3Q7PC9jb2RlPiBpcyBieSBkZWZhdWx0IGFuIGlubGluZSBlbGVtZW50LCBibG9jayBlbGVt ZW50cyBzdWNoIGFzIDxjb2RlPiZsdDtwJmd0OzwvY29kZT4gYXJlIG5vdCBhbGxvd2VkIHdp dGhpbi4gPGVtPkNvbnNlcXVlbnRseSB5b3Ugc2hvdWxkIDxhIGhyZWY9Imh0dHA6Ly90eHB0 aXBzLmNvbS90dXJuLW9mZi10ZXh0aWxlLWluLXlvdXItYXJ0aWNsZSI+dHVybiBvZmYgVGV4 dGlsZTwvYT4gaW4gdGhlIGV4Y2VycHQ8L2VtPi48L3A+CgoJPHA+SW4gVGV4dHBhdHRlcm4g dmVyc2lvbnMgNC4wLjcgJmFtcDsgYWJvdmUsIHRoZSBkZWZhdWx0IHNwZWFraW5nIGJsb2Nr IGZvcm0gY29udGFpbnMgPGNvZGU+Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7PC9jb2RlPiwgYW5k IGRvZXMgbm90IG5lZWQgdG8gYmUgYWRkZWQgbWFudWFsbHkuIElmIHlvdSB3YW50IHRvIG91 dHB1dCBtb3JlIHRoYW4ganVzdCB0aGUgc3RpY2t5IGFydGljbGUgZXhjZXJwdCwgZm9yIGV4 YW1wbGUgdG8gaW5jbHVkZSBhbiBpbWFnZSwgdGhlbiBjcmVhdGUgYSBuZXcgZm9ybSBjb250 YWluaW5nIHRoZSByZXF1aXJlZCB0YWdzIGFuZCB1c2UgdGhlIDxjb2RlPnNwZWFraW5nX2Js b2NrX2Zvcm08L2NvZGU+IGF0dHJpYnV0ZS48L3A+CgoJPHA+Rm9yIG9sZGVyIHZlcnNpb25z IG9mIFRleHRwYXR0ZXJuLCB0byBlbXVsYXRlIHRoZSBhYm92ZSBkZWZhdWx0IGJlaGF2aW91 ciwgeW91IHNob3VsZCBjcmVhdGUgYSBuZXcgYXJ0aWNsZSBmb3JtIGFuZCB1c2UgdGhlIDxj b2RlPnNwZWFraW5nX2Jsb2NrX2Zvcm08L2NvZGU+IGF0dHJpYnV0ZSBpbiB0aGUgPHN0cm9u Zz5hZGlfbWVudTwvc3Ryb25nPiB0YWcuPC9wPgoKCTxoMj48c3Ryb25nPmFkaV9tZW51ICYj ODIxMTsgdGFnIHVzYWdlPC9zdHJvbmc+PC9oMj4KCgk8cD5QbGFjZSB0aGUgPGNvZGU+Jmx0 O3R4cDphZGlfbWVudSAvJmd0OzwvY29kZT4gdGFnIHdoZXJldmVyIHlvdSB3YW50IHRoZSBt ZW51IHRvIGFwcGVhci48L3A+CgoJPGgyPjxzdHJvbmc+YWRpX21lbnUgJiM4MjExOyB0YWcg YXR0cmlidXRlczwvc3Ryb25nPjwvaDI+CgoJPHA+PGNvZGU+Y2xhc3M9JnF1b3Q7Y2xhc3Mg bmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBjbGFzcyBhcHBsaWVkIHRvIHRoZSB0b3Ag bGV2ZWwgPGNvZGU+Jmx0O3VsJmd0OzwvY29kZT4uIERlZmF1bHQgPSAmIzgyMjA7c2VjdGlv bl9saXN0JiM4MjIxOy48L3A+CgoJPHA+PGNvZGU+bWVudV9pZD0mcXVvdDtpZCBuYW1lJnF1 b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHRoZSBJRCB0byBiZSB1c2VkIG9uIHRoZSB0b3AgbGV2 ZWwgPGNvZGU+Jmx0O3VsJmd0OzwvY29kZT4uICBEZWZhdWx0ID0gJiM4MjIwO21haW5tZW51 JiM4MjIxOy48L3A+CgoJPHA+PGNvZGU+YWN0aXZlX2NsYXNzPSZxdW90O2NsYXNzIG5hbWUm cXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gY2xhc3MgYXBwbGllZCB0byB0aGUgYWN0aXZlIHNl Y3Rpb24gbGluay4gRGVmYXVsdCA9ICYjODIyMDthY3RpdmVfY2xhc3MmIzgyMjE7LjwvcD4K Cgk8cD48Y29kZT5hY3RpdmVfbGlfY2xhc3M9JnF1b3Q7Y2xhc3MgbmFtZSZxdW90OzwvY29k ZT48L3A+CgoJPHA+LSBjbGFzcyBhcHBsaWVkIHRvIHRoZSBhY3RpdmUgc2VjdGlvbiA8Y29k ZT4mbHQ7bGkmZ3Q7PC9jb2RlPiBlbGVtZW50LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsg KG5vIGNsYXNzKS48L3A+CgoJPHA+PGNvZGU+YWN0aXZlX3BhcmVudD0mcXVvdDtib29sZWFu JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBpbW1lZGlh dGUgcGFyZW50IG9mIHRoZSBhY3RpdmUgc2VjdGlvbiBzaG91bGQgYmUgbWFkZSAmIzgyMjA7 YWN0aXZlJiM4MjIxOyBhbHNvLiBEZWZhdWx0ID0gJiM4MjIwOzAmIzgyMjE7IChObykuIElm IHN3aXRjaGVkIG9uIHRoZW4gPGNvZGU+YWN0aXZlX2NsYXNzPC9jb2RlPiB3aWxsIGJlIGFw cGxpZWQgdG8gdGhlIHBhcmVudCYjODIxNztzIHNlY3Rpb24gbGluayBhbmQsIGlmIGRlZmlu ZWQsIDxjb2RlPmFjdGl2ZV9saV9jbGFzczwvY29kZT4gd2lsbCBiZSBhcHBsaWVkIHRvIHRo ZSBwYXJlbnQmIzgyMTc7cyA8Y29kZT4mbHQ7bGkmZ3Q7PC9jb2RlPi48L3A+CgoJPHA+PGNv ZGU+YWN0aXZlX2FuY2VzdG9ycz0mcXVvdDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8 cD4tIHNwZWNpZmllcyB3aGV0aGVyIGFsbCBhbmNlc3RvcnMgb2YgdGhlIGFjdGl2ZSBzZWN0 aW9uIHNob3VsZCBiZSBtYWRlICYjODIyMDthY3RpdmUmIzgyMjE7LiBEZWZhdWx0ID0gJiM4 MjIwOzAmIzgyMjE7IChObykuIElmIHN3aXRjaGVkIG9uIHRoZW4gPGNvZGU+YWN0aXZlX2Ns YXNzPC9jb2RlPiB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGFuY2VzdG9yJiM4MjE3O3Mgc2Vj dGlvbiBsaW5rIGFuZCwgaWYgZGVmaW5lZCwgPGNvZGU+YWN0aXZlX2xpX2NsYXNzPC9jb2Rl PiB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGFuY2VzdG9yJiM4MjE3O3MgPGNvZGU+Jmx0O2xp Jmd0OzwvY29kZT4uIDxlbT5Ob3RlIHRoYXQgcGFyZW50cyBhcmUgYW5jZXN0b3JzIHRvbywg c28gPGNvZGU+YWN0aXZlX3BhcmVudD0mcXVvdDsxJnF1b3Q7IGFjdGl2ZV9hbmNlc3RvcnM9 JnF1b3Q7MSZxdW90OzwvY29kZT4gaXMgdGhlIHNhbWUgYXMgPGNvZGU+YWN0aXZlX2FuY2Vz dG9ycz0mcXVvdDsxJnF1b3Q7PC9jb2RlPjwvZW0+LjwvcD4KCgk8cD48Y29kZT5wYXJlbnRf Y2xhc3M9JnF1b3Q7Y2xhc3MgbmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgY2xh c3MgdG8gYmUgdXNlZCBvbiBzZWN0aW9uIDxjb2RlPiZsdDtsaSZndDs8L2NvZGU+IHRoYXQg YXJlIHBhcmVudHMuIERlZmF1bHQgPSAmIzgyMjA7bWVudXBhcmVudCYjODIyMTsuPC9wPgoK CTxwPjxjb2RlPmxpbmtfc3Bhbj0mcXVvdDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8 cD4tIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250ZW50cyBvZiB0aGUgbGlua3Mgc2hvdWxk IGJlIHdyYXBwZWQgaW4gYSBzcGFuLCBpLmUuIDxjb2RlPiZsdDthJmd0OyZsdDtzcGFuJmd0 Oy4uLiZsdDsvc3BhbiZndDsmbHQ7L2EmZ3Q7PC9jb2RlPi4gRGVmYXVsdCA9ICYjODIyMDsw JiM4MjIxOyAoTm8pLjwvcD4KCgk8cD48Y29kZT5saXN0X2lkPSZxdW90O2Jvb2xlYW4mcXVv dDs8L2NvZGU+PC9wPgoKCTxwPi0gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIDxjb2RlPiZsdDts aSZndDs8L2NvZGU+IGVsZW1lbnRzIHNob3VsZCBoYXZlIHVuaXF1ZSBJRHMgYXBwbGllZC4g SURzIGFyZSBiYXNlZCBvbiB0aGUgc2VjdGlvbiBuYW1lcy4gRGVmYXVsdCA9ICYjODIyMDsw JiM4MjIxOyAoTm8pLiBOb3RlIHRoYXQgY2xvbmVkIHNlY3Rpb24gSURzIHdpbGwgaGF2ZSBh IHN1ZmZpeCBvZiAmIzgyMjA7X2Nsb25lJiM4MjIxOyBhZGRlZC48L3A+CgoJPHA+PGNvZGU+ bGlzdF9pZF9wcmVmaXg9JnF1b3Q7dGV4dCZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUg cHJlZml4IHRvIGJlIHVzZWQgZm9yIHRoZSA8Y29kZT4mbHQ7bGkmZ3Q7PC9jb2RlPiBJRHMu IERlZmF1bHQgPSAmIzgyMjA7bWVudV8mIzgyMjE7LjwvcD4KCgk8cD48Y29kZT5saXN0X3Nw YW49JnF1b3Q7Ym9vbGVhbiZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBzcGVjaWZpZXMgd2hl dGhlciB0aGUgY29udGVudHMgb2YgdGhlIDxjb2RlPiZsdDtsaSZndDs8L2NvZGU+IHNob3Vs ZCBiZSB3cmFwcGVkIGluIGEgc3BhbiwgaS5lLiA8Y29kZT4mbHQ7bGkmZ3Q7Jmx0O3NwYW4m Z3Q7Jmx0O2EmZ3Q7Li4uJmx0Oy9hJmd0OyZsdDsvc3BhbiZndDsmbHQ7L2xpJmd0OzwvY29k ZT4uIERlZmF1bHQgPSAmIzgyMjA7MCYjODIyMTsgKE5vKS48L3A+CgoJPHA+PGNvZGU+bGlz dF9wcmVmaXg9JnF1b3Q7c3RyaW5nJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHN0cmluZyB0 byBiZSB1c2VkIGFzIGEgcHJlZml4LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vIHBy ZWZpeCkuIDxlbT5Ob3RlOiBwcmVmaXggaXMgaW5zZXJ0ZWQgd2l0aGluIGl0cyBvd24gPGNv ZGU+Jmx0O3NwYW4mZ3Q7PC9jb2RlPiAoYW5kIDxjb2RlPmNsYXNzPC9jb2RlPik8L2VtPi4g Rm9yIGV4YW1wbGU6PGJyIC8+Cjxjb2RlPiZsdDtsaSZndDsmbHQ7c3BhbiBjbGFzcz0mcXVv dDttZW51X3ByZWZpeCZxdW90OyZndDtQUkVGSVgmbHQ7L3NwYW4mZ3Q7Jmx0O2EmZ3Q7Li4u Jmx0Oy9hJmd0OyZsdDsvbGkmZ3Q7PC9jb2RlPjxiciAvPgpJZiA8Y29kZT5saW5rX3NwYW48 L2NvZGU+IGFuZCA8Y29kZT5saXN0X3NwYW48L2NvZGU+IGFyZSBhbHNvIHN3aXRjaGVkIG9u LCB0aGVuIHRoZSBtYXJrdXAgYmVjb21lczo8YnIgLz4KPGNvZGU+Jmx0O2xpJmd0OyZsdDtz cGFuJmd0OyZsdDtzcGFuIGNsYXNzPSZxdW90O21lbnVfcHJlZml4JnF1b3Q7Jmd0O1BSRUZJ WCZsdDsvc3BhbiZndDsmbHQ7YSZndDsmbHQ7c3BhbiZndDsuLi4mbHQ7L3NwYW4mZ3Q7Jmx0 Oy9hJmd0OyZsdDsvc3BhbiZndDsmbHQ7L2xpJmd0OzwvY29kZT48YnIgLz4KPGVtPlVzZSBp biBjb25qdW5jdGlvbiB3aXRoIDxjb2RlPmZpcnN0X2NsYXNzPC9jb2RlPiBhdHRyaWJ1dGUg dG8gdHVybiBwcmVmaXggaW50byBhIHNlcGFyYXRvci48L2VtPjwvcD4KCgk8cD48Y29kZT5w cmVmaXhfY2xhc3M9JnF1b3Q7Y2xhc3MgbmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBj bGFzcyBhZGRlZCB0byB0aGUgbGlzdCBwcmVmaXggPGNvZGU+Jmx0O3NwYW4mZ3Q7Li4uJmx0 Oy9zcGFuJmd0OzwvY29kZT4uIERlZmF1bHQgPSAmIzgyMjA7bWVudV9wcmVmaXgmIzgyMjE7 LjwvcD4KCgk8cD48Y29kZT5maXJzdF9jbGFzcz0mcXVvdDtjbGFzcyBuYW1lJnF1b3Q7PC9j b2RlPjwvcD4KCgk8cD4tIHRoZSBjbGFzcyB0byBiZSB1c2VkIG9uIHRoZSA8ZW0+Zmlyc3Q8 L2VtPiBzZWN0aW9uIDxjb2RlPiZsdDtsaSZndDs8L2NvZGU+IHdpdGhpbiBhIDxjb2RlPiZs dDt1bCZndDs8L2NvZGU+LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vIGNsYXNzKS4g PGVtPk5vdGUgdGhhdCB0aGlzIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIGZpcnN0IHNlY3Rp b24gb2YgZXZlcnkgbGV2ZWwgb2YgdGhlIG1lbnUuPC9lbT48L3A+CgoJPHA+PGNvZGU+bGFz dF9jbGFzcz0mcXVvdDtjbGFzcyBuYW1lJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHRoZSBj bGFzcyB0byBiZSB1c2VkIG9uIHRoZSA8ZW0+bGFzdDwvZW0+IHNlY3Rpb24gPGNvZGU+Jmx0 O2xpJmd0OzwvY29kZT4gd2l0aGluIGEgPGNvZGU+Jmx0O3VsJmd0OzwvY29kZT4uIERlZmF1 bHQgPSAmIzgyMjA7JiM4MjIxOyAobm8gY2xhc3MpLiA8ZW0+Tm90ZSB0aGF0IHRoaXMgY2xh c3MgaXMgYXBwbGllZCB0byB0aGUgbGFzdCBzZWN0aW9uIG9mIGV2ZXJ5IGxldmVsIG9mIHRo ZSBtZW51LjwvZW0+PC9wPgoKCTxwPjxjb2RlPmluY2x1ZGVfZGVmYXVsdD0mcXVvdDtib29s ZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGluY2x1ZGUgJiM4MjE2O2RlZmF1bHQmIzgy MTc7IHNlY3Rpb24gaW4gbWVudSBvciBub3QuIERlZmF1bHQgPSAmIzgyMjA7MSYjODIyMTsg KFllcykuPC9wPgoKCTxwPjxjb2RlPmRlZmF1bHRfdGl0bGU9JnF1b3Q7dGV4dCZxdW90Ozwv Y29kZT48L3A+CgoJPHA+LSB0aXRsZSB0byBiZSB1c2VkIGZvciBkZWZhdWx0IHNlY3Rpb24u IERlZmF1bHQgPSAmIzgyMjA7SG9tZSYjODIyMTsuPC9wPgoKCTxwPjxjb2RlPmVzY2FwZT0m cXVvdDtodG1sJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGVzY2FwZSA8c3BhbiBjbGFzcz0i Y2FwcyI+SFRNTDwvc3Bhbj4gZW50aXRpZXMgaW4gc2VjdGlvbiB0aXRsZXMuIERlZmF1bHQg PSAmIzgyMjA7aHRtbCYjODIyMTsgKGVzY2FwZSBhbGwgYXBwbGljYWJsZSBjaGFyYWN0ZXJz KS4gIFVzZSBlc2NhcGU9JiM4MjIwO2h0bWxzcGVjaWFsJiM4MjIxOyB0byBvbmx5IGNvbnZl cnQgJmFtcDssICYjODIyMDssICYjODIxNjssICZsdDssICZndDs7IG9yIGVzY2FwZT0mIzgy MjE7JiM4MjIwOyB0byBzd2l0Y2ggb2ZmLjwvcD4KCgk8cD48Y29kZT5kZWZhdWx0X2ZpcnN0 PSZxdW90O2Jvb2xlYW4mcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gc3BlY2lmaWVzIHdoZXRo ZXIgdGhlIGRlZmF1bHQgc2VjdGlvbiBzaG91bGQgYmUgbGlzdGVkIGZpcnN0LiBEZWZhdWx0 ID0gJiM4MjIwOzEmIzgyMjE7IChZZXMpLjwvcD4KCgk8cD48Y29kZT5leGNsdWRlPSZxdW90 O3NlY3Rpb24gbGlzdCZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBjb21tYSBzZXBhcmF0ZWQg bGlzdCBvZiBzZWN0aW9ucyB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBtZW51LiBEZWZhdWx0 ID0gbm9uZS4gPGVtPlVzZSBpZiB5b3Ugd2FudCB0byBleGNsdWRlIHNlY3Rpb25zIG92ZXIg YW5kIGFib3ZlIHdoYXQgaGFzIGFscmVhZHkgYmVlbiBleGNsdWRlZCBpbiB0aGUgYWRpX21l bnUgYWRtaW4gdGFiLjwvZW0+PC9wPgoKCTxwPjxjb2RlPnNlY3Rpb25zPSZxdW90O3NlY3Rp b24gbGlzdCZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBv ZiBzZWN0aW9ucyAoJmFtcDsgdGhlaXIgY2hpbGRyZW4pIHRvIGJlIGluY2x1ZGVkIGluIG1l bnUuIERlZmF1bHQgPSBhbGwuPC9wPgoKCTxwPjxjb2RlPmluY2x1ZGVfY3VycmVudD0mcXVv dDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHNwZWNpZmllcyB3aGV0aGVyIHRo ZSBjdXJyZW50IHNlY3Rpb24gc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBzZWN0aW9ucyBsaXN0 LiBEZWZhdWx0ID0gJiM4MjIwOzAmIzgyMjE7IChObykuICBOb3RlIHRoYXQgaWYgdGhlIDxj b2RlPnNlY3Rpb25zPC9jb2RlPiBhdHRyaWJ1dGUgaXMgZW1wdHkgdGhlbiA8Y29kZT5pbmNs dWRlX2N1cnJlbnQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gd2lsbCByZXN1bHQgaW4gPGVtPm9u bHk8L2VtPiB0aGUgY3VycmVudCBzZWN0aW9uICgmYW1wOyBwb3NzaWJseSBpdHMgY2hpbGRy ZW4pIGJlaW5nIG91dHB1dC48L3A+CgoJPHA+PGNvZGU+aW5jbHVkZV9jaGlsZHJlbj0mcXVv dDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHNwZWNpZmllcyB3aGV0aGVyIGNo aWxkcmVuIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbWVudS4gRGVmYXVsdCA9ICYjODIy MDsxJiM4MjIxOyAoWWVzKS48L3A+CgoJPHA+PGNvZGU+aW5jbHVkZV9wYXJlbnQ9JnF1b3Q7 Ym9vbGVhbiZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBzcGVjaWZpZXMgd2hldGhlciB0b3Ag bGV2ZWwgc2VjdGlvbnMgYXJlIG91dHB1dC4gRGVmYXVsdCA9ICYjODIyMDsxJiM4MjIxOyAo WWVzKS4gPGVtPlVzZSBpZiB5b3Ugd2FudCB0byBvdXRwdXQgdGhlIGNoaWxkcmVuIG9mIGEg c2VjdGlvbiBidXQgbm90IHRoZSBwYXJlbnQgc2VjdGlvbiBpdHNlbGYuPC9lbT4gQ2hpbGRs ZXNzIHRvcCBsZXZlbCBzZWN0aW9ucyBhcmUgbm90IG91dHB1dCBpbiB0aGlzIGNhc2UgZWl0 aGVyIChzZWUgPGNvZGU+aW5jbHVkZV9jaGlsZGxlc3M8L2NvZGU+IGF0dHJpYnV0ZSkuPC9w PgoKCTxwPjxjb2RlPmluY2x1ZGVfY2hpbGRsZXNzPSZxdW90O2Jvb2xlYW4mcXVvdDs8L2Nv ZGU+PC9wPgoKCTxwPi0gb3ZlcnJpZGVzIHRoZSA8Y29kZT5pbmNsdWRlX3BhcmVudDwvY29k ZT4gYXR0cmlidXRlIGZvciBjaGlsZGxlc3MgdG9wIGxldmVsIHNlY3Rpb25zLiBEZWZhdWx0 ID0gJiM4MjIwOzAmIzgyMjE7IChObykuIDxlbT5Vc2UgaWYgeW91IHdhbnQgdG8gb3V0cHV0 IHNlY3Rpb25zIHRoYXQgaGF2ZSBubyBjaGlsZHJlbiBhbG9uZyB3aXRoIHRoZSBjaGlsZHJl biBvZiBvdGhlciBzZWN0aW9ucy48L2VtPjwvcD4KCgk8cD48Y29kZT5zdWJfbWVudV9sZXZl bD0mcXVvdDtsZXZlbCZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgc3ViLW1lbnUgbGV2 ZWwgdG8gYmUgb3V0cHV0LCB3aGVyZSAmIzgyMjA7bGV2ZWwmIzgyMjE7IGlzIDIgb3IgbW9y ZS4gRGVmYXVsdD0mIzgyMjA7MCYjODIyMTsgKGNvbXBsZXRlIG1lbnUgZ2VuZXJhdGVkKS4g VGhpcyBhdHRyaWJ1dGUgaXMgc2VjdGlvbi1zZW5zaXRpdmUsIHNvIHN1Yi1tZW51cyBhcmUg YmFzZWQgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VjdGlvbi4gPGVtPk5vdGUgdGhhdCB0 aGUgZmlyc3Qgc3ViLW1lbnUgaXMgbGV2ZWwgMi48L2VtPjwvcD4KCgk8cD48Y29kZT5zb3J0 PSZxdW90O3NvcnQgdmFsdWVzJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHRoZSBzb3J0IG1l dGhvZCB0byBiZSB1c2VkIGZvciBzZWN0aW9ucy4gRGVmYXVsdCA9IGRhdGFiYXNlIG9yZGVy IChpLmUuIHRoZSBvcmRlciBpbiB3aGljaCBzZWN0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgYWRk ZWQpLiBPdGhlciBvcHRpb25zOiAmIzgyMjA7bmFtZSYjODIyMTsgJiM4MjExOyBhbHBoYWJl dGljYWwgb3JkZXI7ICYjODIyMDthZGlfbWVudV9zb3J0JiM4MjIxOyAmIzgyMTE7IHVzZSBv cmRlciBzcGVjaWZpZWQgaW4gYWRtaW4gdGFiOyAmIzgyMjA7YWRpX21lbnVfc29ydCwgbmFt ZSYjODIyMTsgJiM4MjExOyB1c2Ugc29ydCBvcmRlciwgdGhlbiBpZiBzYW1lIHVzZSBhbHBo YWJldGljYWwgb3JkZXIuPC9wPgoKCTxwPjxjb2RlPmNsb25lX3RpdGxlPSZxdW90O3RleHQm cXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gdGhlIGRlZmF1bHQgdGl0bGUgdG8gYmUgdXNlZCBm b3IgY2xvbmVkIHNlY3Rpb25zLCBpZiBubyB0aXRsZSBoYXMgYmVlbiBzcGVjaWZpZWQgaW4g dGhlIGFkbWluIHRhYi4gRGVmYXVsdCA9ICYjODIyMDtTdW1tYXJ5JiM4MjIxOy48L3A+CgoJ PHA+PGNvZGU+c3VwcHJlc3NfdXJsPSZxdW90O21vZGUmcXVvdDs8L2NvZGU+PC9wPgoKCTxw Pi0gc3VwcHJlc3MgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG9mIHRoZSA8 Y29kZT5ocmVmPC9jb2RlPiBhdHRyaWJ1dGUgaW4gYSBwYXJlbnQgc2VjdGlvbiBsaW5rIChp LmUuIHNldCBpdCB0byAmIzgyMjA7IyYjODIyMTspLiBTZXQgdG8gJiM4MjIwO2FsbCYjODIy MTsgdG8gc3VwcHJlc3MgYWxsIHBhcmVudCBzZWN0aW9uIGxpbmtzIG9yICYjODIyMDt0b3Am IzgyMjE7IHRvIHN1cHByZXNzIHRvcC1sZXZlbCBwYXJlbnQgc2VjdGlvbiBsaW5rcyBvbmx5 LiBEZWZhdWx0PSAmIzgyMjA7JiM4MjIxOyAoZG8gbm90IHN1cHByZXNzKS48L3A+CgoJPHA+ PGNvZGU+c3BlYWtpbmdfYmxvY2s9JnF1b3Q7Ym9vbGVhbiZxdW90OzwvY29kZT48L3A+CgoJ PHA+LSBlbmFibGVzIHNwZWFraW5nIGJsb2Nrcy4gRGVmYXVsdCA9ICYjODIyMDswJiM4MjIx OyAobm8gc3BlYWtpbmcgYmxvY2tzKS4gQnkgZGVmYXVsdCwgc3BlYWtpbmcgYmxvY2tzIGFy ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgc2VjdGlvbiYjODIxNztzIDxlbT5zdGlja3k8L2VtPiBh cnRpY2xlIGV4Y2VycHQuPC9wPgoKCTxwPjxjb2RlPnNwZWFraW5nX2Jsb2NrX2Zvcm09JnF1 b3Q7Zm9ybSBuYW1lJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGFsdGVybmF0aXZlIGZvcm0g dG8gYmUgdXNlZCBmb3IgdGhlIHNwZWFraW5nIGJsb2NrLiBEZWZhdWx0ID0gJiM4MjIwOyYj ODIyMTsgKG5vbmUpLiA8ZW0+Tm90ZSB0aGF0IGZvciBUZXh0cGF0dGVybiB2ZXJzaW9ucyA0 LjAuNyAmYW1wOyBhYm92ZSwgdGhpcyBhdHRyaWJ1dGUgaXMgb3B0aW9uYWwgKHRoZSBkZWZh dWx0IGZvcm0gY29udGFpbnM6IDxjb2RlPiZsdDt0eHA6ZXhjZXJwdCAvJmd0OzwvY29kZT4p LiBGb3Igb2xkZXIgdmVyc2lvbnMsIHRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVkICZhbXA7 IG11c3QgcmVmZXJlbmNlIGFuIGV4aXN0aW5nIGFydGljbGUgZm9ybS48L2VtPjwvcD4KCgk8 cD48Y29kZT5sYWJlbD0mcXVvdDt0ZXh0JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHNvbWUg dGV4dCB0byBwcmVjZWRlIHRoZSBtZW51LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5v IGxhYmVsKS4gPGVtPklmIHRoZXJlIGlzIG5vIG1lbnUgdG8gb3V0cHV0IHRoZW4gbm8gbGFi ZWwgaXMgZ2VuZXJhdGVkLjwvZW0+PC9wPgoKCTxwPjxjb2RlPmxhYmVsdGFnPSZxdW90O3Rh ZyZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgKFgpSFRNTCB0YWcgKHdpdGhvdXQgJiM4 MjE2OyZsdDsmZ3Q7JiM4MjE3OyBicmFja2V0cykgdG8gd3JhcCBhcm91bmQgdGhlIGxhYmVs LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vIHRhZykuPC9wPgoKCTxwPjxjb2RlPmxh YmVsX2NsYXNzPSZxdW90O2NsYXNzIG5hbWUmcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gdGhl IGNsYXNzIHRvIGJlIHVzZWQgb24gdGhlIGxhYmVsJiM4MjE3O3MgdGFnLiAgRGVmYXVsdCA9 ICYjODIyMDttZW51X2xhYmVsJiM4MjIxOy48L3A+CgoJPHA+PGNvZGU+bGFiZWxfaWQ9JnF1 b3Q7aWQgbmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgSUQgdG8gYmUgdXNlZCBv biB0aGUgbGFiZWwmIzgyMTc7cyB0YWcuICBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5v bmUpLjwvcD4KCgk8cD48Y29kZT53cmFwdGFnPSZxdW90O3RhZyZxdW90OzwvY29kZT48L3A+ CgoJPHA+LSB0aGUgKFgpSFRNTCB0YWcgKHdpdGhvdXQgJiM4MjE2OyZsdDsmZ3Q7JiM4MjE3 OyBicmFja2V0cykgdG8gd3JhcCBhcm91bmQgdGhlIHdob2xlIG1lbnUgKGluY2x1ZGluZyB0 aGUgbGFiZWwpLiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vIHRhZykuIDxlbT5JZiB0 aGVyZSBpcyBubyBtZW51IHRvIG91dHB1dCB0aGVuIG5vIHdyYXB0YWcgaXMgZ2VuZXJhdGVk LjwvZW0+PC9wPgoKCTxwPjxjb2RlPndyYXB0YWdfY2xhc3M9JnF1b3Q7Y2xhc3MgbmFtZSZx dW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgY2xhc3MgdG8gYmUgdXNlZCBvbiB0aGUgd3Jh cHRhZy4gIERlZmF1bHQgPSAmIzgyMjA7bWVudV93cmFwcGVyJiM4MjIxOy48L3A+CgoJPHA+ PGNvZGU+d3JhcHRhZ19pZD0mcXVvdDtpZCBuYW1lJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4t IHRoZSBJRCB0byBiZSB1c2VkIG9uIHRoZSB3cmFwdGFnLiAgRGVmYXVsdCA9ICYjODIyMDsm IzgyMjE7IChub25lKS48L3A+CgoJPHA+PGNvZGU+YXJ0aWNsZXM9JnF1b3Q7Ym9vbGVhbiZx dW90OzwvY29kZT48L3A+CgoJPHA+LSBzcGVjaWZpZXMgd2hldGhlciBhcnRpY2xlcyBzaG91 bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG1lbnUuIERlZmF1bHQgPSAmIzgyMjA7MCYjODIyMTsg KE5vKS48L3A+CgoJPHA+PGNvZGU+YXJ0aWNsZV9hdHRyPSYjMzk7YXJ0aWNsZV9jdXN0b20g YXR0cmlidXRlcyYjMzk7PC9jb2RlPjwvcD4KCgk8cD4tIGEgbGlzdCBvZiA8Y29kZT4mbHQ7 dHhwOmFydGljbGVfY3VzdG9tIC8mZ3Q7PC9jb2RlPiBhdHRyaWJ1dGVzLCBzZXBhcmF0ZWQg Ynkgc3BhY2VzLCBmb3IgY29udHJvbGxpbmcgdGhlIGFwcGVhcmFuY2Ugb2YgYXJ0aWNsZXMu IERlZmF1bHQgPSAmIzgyMTY7JiM4MjE3OyAoaS5lLiA8Y29kZT4mbHQ7dHhwOmFydGljbGVf Y3VzdG9tIC8mZ3Q7PC9jb2RlPiBkZWZhdWx0cykuIDxzdHJvbmc+Tm90ZSB0aGUgdXNlIG9m IHNpbmdsZSBxdW90ZXM8L3N0cm9uZz4uPGJyIC8+CkZvciBleGFtcGxlOiA8Y29kZT5hcnRp Y2xlX2F0dHI9JiMzOTtzb3J0PSZxdW90O1RpdGxlJnF1b3Q7IGxpbWl0PSZxdW90OzIwJnF1 b3Q7JiMzOTs8L2NvZGU+LjwvcD4KCgk8cD48Y29kZT5hcnRpY2xlX2luY2x1ZGU9JnF1b3Q7 c2VjdGlvbiBsaXN0JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGNvbW1hIHNlcGFyYXRlZCBs aXN0IG9mIHNlY3Rpb25zIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFydGljbGVzIGluY2x1ZGVk IGluIHRoZSBtZW51LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKGFsbCkuPC9wPgoKCTxw Pjxjb2RlPmFydGljbGVfZXhjbHVkZT0mcXVvdDtzZWN0aW9uIGxpc3QmcXVvdDs8L2NvZGU+ PC9wPgoKCTxwPi0gY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc2VjdGlvbnMgdGhhdCB3b24m IzgyMTc7dCBoYXZlIHRoZWlyIGFydGljbGVzIGluY2x1ZGVkIGluIHRoZSBtZW51LiBEZWZh dWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vbmUpLjwvcD4KCgk8cD48Y29kZT5hY3RpdmVfYXJ0 aWNsZXNfb25seT0mcXVvdDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHNldCBp ZiB5b3Ugd2FudCBhcnRpY2xlcyBsaXN0ZWQgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNl Y3Rpb24gb25seS4gRGVmYXVsdCA9ICYjODIyMDswJiM4MjIxOyAoYXJ0aWNsZXMgaW4gYWxs IHNlY3Rpb25zIGxpc3RlZCkuPC9wPgoKCTxwPjxlbT5Ob3RlOiBUaGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgYXBwbGllZCB0byBhcnRpY2xlIGxpbmtzIGluIHRo ZSByZW5kZXJlZCBtZW51IGRlZmF1bHRzIHRvICYjODIyMDttZW51X2FydGljbGUmIzgyMjE7 IGJ1dCBjYW4gYmUgY2hhbmdlZCBieSBlZGl0aW5nIHRoZSA8c3Ryb25nPmFkaV9tZW51X2Fy dGljbGVzPC9zdHJvbmc+IGZvcm0uPC9lbT48L3A+CgoJPGgyPjxzdHJvbmc+YWRpX21lbnVf YnJlYWRjcnVtYiAmIzgyMTE7IHRhZyB1c2FnZTwvc3Ryb25nPjwvaDI+CgoJPHA+UGxhY2Ug dGhlIDxjb2RlPiZsdDt0eHA6YWRpX21lbnVfYnJlYWRjcnVtYiAvJmd0OzwvY29kZT4gdGFn IHdoZXJldmVyIHlvdSB3YW50IHRoZSBicmVhZGNydW1icyB0byBhcHBlYXIuPC9wPgoKCTxo Mj48c3Ryb25nPmFkaV9tZW51X2JyZWFkY3J1bWIgJiM4MjExOyB0YWcgYXR0cmlidXRlczwv c3Ryb25nPjwvaDI+CgoJPHA+PGNvZGU+bGFiZWw9JnF1b3Q7dGV4dCZxdW90OzwvY29kZT48 L3A+CgoJPHA+LSB0aGUgdGV4dCB0byBwcmVjZWRlIHRoZSBicmVhZGNydW1iIHRyYWlsIG91 dHB1dC4gRGVmYXVsdCA9ICYjODIyMDtZb3UgYXJlIGhlcmU6ICYjODIyMDsuPC9wPgoKCTxw Pjxjb2RlPnNlcGFyYXRvcj0mcXVvdDt0ZXh0JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHRo ZSB0ZXh0IHRvIHVzZSBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBjcnVtYnMuIERlZmF1 bHQgPSAmIzgyMjA7ICYjMTg3OyAmIzgyMjA7LjwvcD4KCgk8cD48Y29kZT50aXRsZT0mcXVv dDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHNwZWNpZmllcyB3aGV0aGVyIHRo ZSBzZWN0aW9uIHRpdGxlcyBzaG91bGQgYmUgdXNlZC4gRGVmYXVsdCA9ICYjODIyMDsxJiM4 MjIxOyAoWWVzKS48L3A+CgoJPHA+PGNvZGU+bGluaz0mcXVvdDtib29sZWFuJnF1b3Q7PC9j b2RlPjwvcD4KCgk8cD4tIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZWN0aW9ucyBzaG91bGQg bGlua3Mgb3Igbm90LiBEZWZhdWx0ID0gJiM4MjIwOzEmIzgyMjE7IChZZXMpLjwvcD4KCgk8 cD48Y29kZT5saW5rY2xhc3M9JnF1b3Q7Y2xhc3MgbmFtZSZxdW90OzwvY29kZT48L3A+CgoJ PHA+LSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgYXNzaWduZWQg dG8gdGhlIGJyZWFkY3J1bWIgbGlua3MuIERlZmF1bHQgPSYjODIyMDtub2xpbmUmIzgyMjE7 LjwvcD4KCgk8cD48Y29kZT5saW5rX2xhc3Q9JnF1b3Q7Ym9vbGVhbiZxdW90OzwvY29kZT48 L3A+CgoJPHA+LSBzcGVjaWZpZXMgd2hldGhlciB0aGUgbGFzdCBzZWN0aW9uIGNydW1iIGlu IGxpc3QgKGkuZS4gdGhlIGN1cnJlbnQgc2VjdGlvbikgc2hvdWxkIGJlIGEgbGluayBvciBu b3QuIE9ubHkgYXBwbGllcyBpbiBhcnRpY2xlIGxpc3QgbW9kZS4gRGVmYXVsdCA9ICYjODIy MDswJiM4MjIxOyAoTm8pLjwvcD4KCgk8cD48Y29kZT5pbmNsdWRlX2RlZmF1bHQ9JnF1b3Q7 Ym9vbGVhbiZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBzcGVjaWZpZXMgd2hldGhlciB0aGUg JiM4MjE2O2RlZmF1bHQmIzgyMTc7IHNlY3Rpb24gc2hvdWxkIGJlIG91dHB1dC4gRGVmYXVs dCA9ICYjODIyMDsxJiM4MjIxOyAoWWVzKS48L3A+CgoJPHA+PGNvZGU+ZGVmYXVsdF90aXRs ZT0mcXVvdDt0ZXh0JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIHRoZSB0aXRsZSB0byBiZSB1 c2VkIGZvciB0aGUgJiM4MjE2O2RlZmF1bHQmIzgyMTc7IHNlY3Rpb24uIERlZmF1bHQgPSAm IzgyMjA7SG9tZSYjODIyMTs8L3A+CgoJPHA+PGNvZGU+ZXNjYXBlPSZxdW90O2h0bWwmcXVv dDs8L2NvZGU+PC9wPgoKCTxwPi0gZXNjYXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9z cGFuPiBlbnRpdGllcyBpbiBzZWN0aW9uIHRpdGxlcy4gRGVmYXVsdCA9ICYjODIyMDtodG1s JiM4MjIxOyAoZXNjYXBlIGFsbCBhcHBsaWNhYmxlIGNoYXJhY3RlcnMpLiAgVXNlIGVzY2Fw ZT0mIzgyMjA7aHRtbHNwZWNpYWwmIzgyMjE7IHRvIG9ubHkgY29udmVydCAmYW1wOywgJiM4 MjIwOywgJiM4MjE2OywgJmx0OywgJmd0Ozsgb3IgZXNjYXBlPSYjODIyMTsmIzgyMjA7IHRv IHN3aXRjaCBvZmYuPC9wPgoKCTxoMz48c3Ryb25nPkJyZWFkY3J1bWIgdHJhaWwgZXhhbXBs ZTwvc3Ryb25nPjwvaDM+CgoJPHA+VG8gb3V0cHV0IGEgYnJlYWRjcnVtYiB0cmFpbCwgaW5j bHVkaW5nIHRoZSBhcnRpY2xlJiM4MjE3O3MgdGl0bGUsIHRyeSB0aGUgZm9sbG93aW5nOjwv cD4KCjxwcmU+PGNvZGU+Jmx0O2RpdiBpZD0mcXVvdDticmVhZGNydW1iJnF1b3Q7Jmd0Owom bHQ7dHhwOmFkaV9tZW51X2JyZWFkY3J1bWIgLyZndDsKJmx0O3R4cDppZl9pbmRpdmlkdWFs X2FydGljbGUmZ3Q7JmFtcDsjMTg3OyZhbXA7IzE2MDsmbHQ7dHhwOnRpdGxlLyZndDsmbHQ7 L3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7CiZsdDsvZGl2Jmd0Owo8L2NvZGU+PC9w cmU+CgoJPGgyIGNsYXNzPSJhZGlfZXh0cmFzIj48c3Ryb25nPkFkZGl0aW9uYWwgaW5mb3Jt YXRpb248L3N0cm9uZz48L2gyPgoKCTxwIGNsYXNzPSJhZGlfZXh0cmFzIj5TdXBwb3J0IGFu ZCBmdXJ0aGVyIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSA8YSBocmVm PSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9Mjc3Nzgi PlRleHRwYXR0ZXJuIHN1cHBvcnQgZm9ydW08L2E+LiBBIGNvcHkgb2YgdGhpcyBoZWxwIGlz IGFsc28gYXZhaWxhYmxlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNv bS5hdS90eHAvP3BsdWdpbj1hZGlfbWVudSI+b25saW5lPC9hPi4gIE1vcmUgYWRpX3BsdWdp bnMgY2FuIGJlIGZvdW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNv bS5hdS90eHAvIj5oZXJlPC9hPi48L3A+IjtzOjQ6ImNvZGUiO3M6NTE0ODA6IgovKgoJYWRp X21lbnUgLSBTZWN0aW9uIGhpZXJhcmNoeSwgc2VjdGlvbiBtZW51IGFuZCBicmVhZGNydW1i IHRyYWlsCgoJV3JpdHRlbiBieSBBZGkgR2lsYmVydAoKCVJlbGVhc2VkIHVuZGVyIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQoKCVZlcnNpb24gaGlzdG9yeToKCTAuMTEJLSBu ZXcgYWRpX21lbnUgYXR0cmlidXRlczogJ3dyYXB0YWcnLCAnd3JhcHRhZ19pZCcsICd3cmFw dGFnX2NsYXNzJwoJCQktIGVuaGFuY2VtZW50OiBzZWN0aW9ucyBhdHRyaWJ1dGUgbm93IG92 ZXJyaWRlcyBhZG1pbiBleGNsdWRlZCBzZWN0aW9ucwoJMC4xMAktIGVuaGFuY2VtZW50OiBz cGVha2luZyBibG9ja3MKCQkJLSBuZXcgYWRpX21lbnUgYXR0cmlidXRlczogJ3NwZWFraW5n X2Jsb2NrJyAmICdzcGVha2luZ19ibG9ja19mb3JtJwoJCQktIG5ldyBhZGlfbWVudSBhdHRy aWJ1dGVzOiAnbGFiZWwnLCAnbGFiZWx0YWcnLCAnbGFiZWxfY2xhc3MnLCAnbGFiZWxfaWQn CgkJCS0gZml4OiBlbXB0eSA8dWw+PC91bD4gb3V0cHV0IGZvciBzZWN0aW9uLWxlc3Mgc3Vi LW1lbnVzCgkwLjkuMgktIGZpeDogc3RhdGljIHNlY3Rpb25zIChzZWRfc2VjdGlvbl9maWVs ZHMpIHZpc2libGUgdG8gbm9uLVB1Ymxpc2hlciB1c2VycyBpbiBXcml0ZSB0YWIgKHRoYW5r cyBEaWRqZWUpCgkJCS0gZml4OiBzZWN0aW9ucyB3aXRoIGNsb25lcyB3cm9uZ2x5IGluZGVu dGVkIGluIFdyaXRlIHRhYiBzZWN0aW9uIHBvcHVwCgkwLjkuMQktIGZpeDogYWNjZW50ZWQg Y2hhcmFjdGVycyBnZXR0aW5nIGVzY2FwZWQgaW4gYWRtaW4gKGZvciBqcGR1cG9udCkKCQkJ LSBlbmhhbmNlbWVudDogbmV3ICdlc2NhcGUnIGF0dHJpYnV0ZSBvcHRpb246IGh0bWxzcGVj aWFsCgkwLjkJCS0gbmV3IGFkaV9tZW51IGF0dHJpYnV0ZTogJ3N1Yl9tZW51X2xldmVsJyAo Zm9yIGVtZXJhbGQpCgkJCS0gZml4OiBzZWxlY3RlZCBzZWN0aW9uIGluIFdyaXRlIHRhYiBj aGFuZ2VzIHRvIGZpcnN0IHNlY3Rpb24gaW4gbGlzdCBhZnRlciBzYXZpbmcgbmV3IGFydGlj bGUKCTAuOC4xCS0gZml4OiBzdWItbWVudXMgbm90IGJlaW5nIGdlbmVyYXRlZCBwcm9wZXJs eQoJCQktIGZpeDogc3VwcHJlc3NlZCBvdXRwdXQgb2YgJ2lkPSIiJyAmICdjbGFzcz0iIicg aW4gdG9wIGxldmVsIDx1bD4gd2hlbiBtZW51X2lkPSIiICYgY2xhc3M9IiIKCTAuOAkJLSBl bmhhbmNlbWVudDogc2VjdGlvbiBoaWVyYXJjaHkgaW4gV3JpdGUgdGFiIHNlY3Rpb24gcG9w dXAKCQkJLSBuZXcgYWRpX21lbnUgYXR0cmlidXRlczogJ2ZpcnN0X2NsYXNzJyAmICdsYXN0 X2NsYXNzJyAoZm9yIHJlbm9iaXJkKQoJCQktIG5ldyBhZGlfbWVudSBhdHRyaWJ1dGVzOiAn bGlzdF9wcmVmaXgnICYgJ3ByZWZpeF9jbGFzcycgKGZvciBudWJpYW4pCgkJCS0gbmV3IGFk aV9tZW51IGF0dHJpYnV0ZTogc3VwcHJlc3NfdXJsIChmb3IgcmVub2JpcmQpCgkJCS0gZW5o YW5jZW1lbnQ6IGFkaV9tZW51ICYgYWRpX21lbnVfYnJlYWRjcnVtYiB0YWdzIG5vdyBvdXRw dXQgZXJyb3IgbWVzc2FnZSBpZiBhZGlfbWVudSBub3QgaW5zdGFsbGVkCgkJCS0gZml4OiBN eVNRTCB2NCBlcnJvcnMgaW4gYWRpX21lbnUgYWRtaW4gKGZvciBkZWJlZ3JheSkKCQkJCS0g dXNlZCAnVElOWUlOVCgxKSBERUZBVUxUIDAnIGluc3RlYWQgb2YgJ0JPT0xFQU4gREVGQVVM VCBGQUxTRScKCQkJCS0gd2hlcmUgY2xhdXNlICcxPTEnIGluc3RlYWQgb2YgJ1RSVUUnCgkJ CS0gZml4OiBsb29wIGRldGVjdGlvbiBmYWlsdXJlIHdpdGggQS0+Qi0+Qy0+QiBzdWItbG9v cHMKCQkJLSBvcHRpbWlzYXRpb246IHJlbW92ZWQgc2VjdGlvbl9saXN0WyduYW1lJ10gJiAk aGllcmFyY2h5WyduYW1lJ10gYXJyYXkgZWxlbWVudHMKCQkJLSBhcnRpY2xlcyBlbmhhbmNl bWVudCAoYmV0YSkgbmV3IGF0dHJpYnV0ZXM6ICdhcnRpY2xlX2NsYXNzJywgJ2FydGljbGVf cG9zaXRpb24nLCAnYXJ0aWNsZV9zb3J0JwoJMC43CQktIG5ldyBhZGlfbWVudSAmIGFkaV9t ZW51X2JyZWFkY3J1bWIgYXR0cmlidXRlOiAnZXNjYXBlJwoJCQktIG5ldyBhZGlfbWVudSBh dHRyaWJ1dGU6ICdhY3RpdmVfYW5jZXN0b3JzJyAoZm9yIERpZGplZSkKCQkJLSBmaXg6IGFk aV9tZW51IGFkbWluIGhpZXJhcmNoeSBzdW1tYXJ5IG5vdyBzaG93cyBjaGlsZHJlbiBhZ2Fp bgoJCQktIGZpeDogbm8gbG9uZ2VyIGdldCBkb3VibGUgcm93IG9mIGFkbWluIHBhZ2UgdGFi cyBiZWZvcmUgYWRpX21lbnUgaW5zdGFsbGVkCgkwLjYJCS0gZW5oYW5jZW1lbnQ6IGFydGlj bGUgY2FwYWJpbGl0eSBhZGRlZAoJCQktIG5ldyBhZGlfbWVudSBhdHRyaWJ1dGVzOiAnYXJ0 aWNsZXMnLCAnYXJ0aWNsZV9hdHRyJywgJ2FydGljbGVfaW5jbHVkZScsICdhcnRpY2xlX2V4 Y2x1ZGUnCgkJCS0gbmV3IGFkaV9tZW51IGF0dHJpYnV0ZXM6ICdpbmNsdWRlX2NoaWxkcmVu JywgJ2luY2x1ZGVfY3VycmVudCcgJiAnYWN0aXZlX3BhcmVudCcgKGZvciBtYWNUaWdlcnMp CgkJCS0gbmV3IGFkaV9tZW51IGF0dHJpYnV0ZTogJ2FjdGl2ZV9hcnRpY2xlc19vbmx5JyAo Zm9yIEZpcmVGdXNpb24pCgkJCS0gbmV3IGFkaV9tZW51IGF0dHJpYnV0ZTogJ2xpc3Rfc3Bh bicgKHNJRlIgc3VwcG9ydCwgZm9yIExhc3NlIEd5cm4pCgkJCS0gY29kZSBvcHRpbWlzYXRp b25zICh0aGFua3MgdG8gbmV0LWNhcnZlcikKCTAuNQkJLSBmaXg6IGFkaV9tZW51IGVycm9y cyBpZiAnZGVmYXVsdCcgc2VjdGlvbiBleGNsdWRlZCAodGhhbmtzIFVsaSkKCQkJLSBmaXg6 IGFkaV9tZW51IHRhYiBzZWN0aW9uIGhpZXJhcmNoeSB3b3VsZCBnZW5lcmF0ZSBsb3RzIG9m IGVycm9ycyBpZiBhZGlfbWVudSBub3QgaW5zdGFsbGVkCgkJCS0gZW5oYW5jZW1lbnQ6IHNl Y3Rpb25zIGF0dHJpYnV0ZSBmdW5jdGlvbmFsaXR5IGltcHJvdmVkIChmb3IgU2kgJiBmcmVp c2Nod2ltbWVuKQoJCQkJLSBjaGlsZHJlbiBub3cgb3V0cHV0IGF1dG9tYXRpY2FsbHkKCQkJ CS0gbmV3IHRhZ3MgJ2luY2x1ZGVfcGFyZW50JyAmICdpbmNsdWRlX2NoaWxkbGVzcycKCTAu NAkJLSBlbmhhbmNlbWVudDogYWRpX2JyZWFkY3J1bWIgdGFnIGF0dHJpYnV0ZSAnbGlua19s YXN0JyAtIGxhc3Qgc2VjdGlvbiBjcnVtYiBpbiBsaXN0IGRpc3BsYXllZCBpbiBwbGFpbiB0 ZXh0IChub3cgdGhlIGRlZmF1bHQgYmVoYXZpb3VyKQoJCQktIGZpeDogYWRpX21lbnVfYnJl YWRjcnVtYiBlcnJvciB3aGVuIHZpc2l0aW5nIHNlY3Rpb25zL3BhZ2VzIHRoYXQgZG9uJ3Qg ZXhpc3Qgd2hlbiBpbiBjbGVhbiBVUkwgbW9kZQoJCQktIGZpeDogYWRpX21lbnVfYnJlYWRj cnVtYiBkaXNwbGF5ZWQgZGVmYXVsdCBzZWN0aW9uIGFzIGxpbmsgcmVnYXJkbGVzcyBvZiAn bGluaycgYXR0cmlidXRlIHNldHRpbmcKCTAuMwkJLSBlbmhhbmNlbWVudDogbmV3IGFkaV9t ZW51IHRhZyBhdHRyaWJ1dGUgJ2xpbmtfc3BhbicgLSB3cmFwIDxzcGFuPi4uLjwvc3Bhbj4g YXJvdW5kIGNvbnRlbnRzIG9mIGxpbmtzCgkJCS0gZW5oYW5jZW1lbnQ6IG5ldyBhZGlfbWVu dSB0YWcgYXR0cmlidXRlcyAnbGlzdF9pZCcgJiAnbGlzdF9pZF9wcmVmaXgnIC0gb3V0cHV0 IHVuaXF1ZSBJRHMgdG8gPGxpPiBlbGVtZW50cwoJCQktIGVuaGFuY2VtZW50OiBuZXcgYWRp X21lbnUgdGFnIGF0dHJpYnV0ZSAnYWN0aXZlX2xpX2NsYXNzJyAtIG91dHB1dCBjbGFzcyBv biBhY3RpdmUgPGxpPgoJCQktIGVuaGFuY2VtZW50OiBhZGlfbWVudSBhZG1pbiBub3cgZGlz cGxheXMgc3VtbWFyeSBvZiBjb25maWd1cmVkIHNlY3Rpb24gaGllcmFyY2h5CgkJCS0gbW9k aWZpY2F0aW9uOiBhZGlfYnJlYWRjcnVtYiB0YWcgYXR0cmlidXRlICdzZXAnIGRlcHJlY2F0 ZWQgZm9yICdzZXBhcmF0b3InCgkwLjIJCS0gZml4OiBhZGlfbWVudV9icmVhZGNydW1iIGVy cm9yIHdoZW4gdmlzaXRpbmcgcGFnZXMgdGhhdCBhcmUgZXhjbHVkZWQgaW4gYWRpX21lbnUg YWRtaW4KCQkJLSBmaXg6IGFkaV9tZW51X2JyZWFkY3J1bWIgbm93IGNvcGVzIHdpdGggc2Vj dGlvbiBsb29wcywgZXJyb3IgbWVzc2FnZSBvdXRwdXQKCQkJLSBmaXg6IGFkaV9tZW51IHRh ZyBjYW4gbm93IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2Ugb24gYSBwYWdlCgkJCS0gZW5oYW5j ZW1lbnQ6IGFkaV9tZW51IGFkbWluIHNlY3Rpb24gbG9vcCB3YXJuaW5nIG1lc3NhZ2UKCQkJ LSBlbmhhbmNlbWVudDogYWRpX21lbnUgYWRtaW4gbm93IGRpc3BsYXlzIHNlY3Rpb25zIGlu IGFscGhhYmV0aWNhbCBvcmRlcgoJMC4xCQktIGluaXRpYWwgcmVsZWFzZQoKKi8KCmdsb2Jh bCAkYXJ0aWNsZV9mb3JtLCRhbGxfc3FsX2ZpZWxkcywkc2VkX3NmX2luc3RhbGxlZDsKCiRh cnRpY2xlX2Zvcm0gPSAnYWRpX21lbnVfYXJ0aWNsZXMnOwokYWxsX3NxbF9maWVsZHMgPSAn bmFtZSwgdGl0bGUsIGFkaV9tZW51X3BhcmVudCwgYWRpX21lbnVfdGl0bGUsIGFkaV9tZW51 X2V4Y2x1ZGUsIGFkaV9tZW51X2Nsb25lLCBhZGlfbWVudV9zb3J0JzsgLy8gZWxzZSB0YWcg ZXJyb3IKJHNlZF9zZl9pbnN0YWxsZWQgPSBzYWZlX3JvdygidmVyc2lvbiIsInR4cF9wbHVn aW4iLCJzdGF0dXMgPSAxIEFORCBuYW1lPSdzZWRfc2VjdGlvbl9maWVsZHMnIik7CgppZiAo QHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7CgkkbXlldmVudCA9ICdhZGlfbWVudV9hZG1p bic7CgkkbXl0YWIgPSAnYWRpX21lbnUnOwoKCS8vIHNldCB0aGUgcHJpdmlsZWdlIGxldmVs cwoJYWRkX3ByaXZzKCRteWV2ZW50LCAnMSwyLDMsNicpOwoKCS8vIGFkZCBuZXcgdGFiIHVu ZGVyICdQcmVzZW50YXRpb24nCglyZWdpc3Rlcl90YWIoInByZXNlbnRhdGlvbiIsICRteWV2 ZW50LCAkbXl0YWIpOwoKCXJlZ2lzdGVyX2NhbGxiYWNrKCJhZGlfbWVudV9hZG1pbiIsICRt eWV2ZW50KTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdhZGlfbWVudV9hcnRpY2xlX3RhYicsICdh cnRpY2xlJywgJycsIDEpOwoKfQoKZnVuY3Rpb24gYWRpX21lbnVfYWRtaW4oJGV2ZW50LCAk c3RlcCkgewovLyBhZGlfbWVudSBhZG1pbiBhY3Rpb24hCglnbG9iYWwgJGFsbF9zcWxfZmll bGRzLCRwcmVmcywkc2VkX3NmX2luc3RhbGxlZDsKCgkkZGVidWcgPSAwOyAvLyBkaXNwbGF5 IGFkbWluIGRlYnVnIGluZm8KCgkvLyB0b29sdGlwIGhlbHAgaW5mb3JtYXRpb24KCSRoWydz ZSddID0gIlRoZSBUWFAgc2VjdGlvbiBuYW1lLCBzZXQgaW4gU2VjdGlvbnMgdGFiIjsKCSRo Wyd0aSddID0gIlRoZSBUWFAgc2VjdGlvbiB0aXRsZSwgc2V0IGluIFNlY3Rpb25zIHRhYiI7 CgkkaFsnZXgnXSA9ICJUaWNrIGlmIHRoZSBzZWN0aW9uIHNob3VsZCBiZSBleGNsdWRlZCBi eSBkZWZhdWx0IGZyb20gdGhlIG1lbnUiOwoJJGhbJ3BhJ10gPSAiVGhlIHNlY3Rpb24ncyBw YXJlbnQiOwoJJGhbJ3NvJ10gPSAiVGhlIHNlY3Rpb24ncyBzb3J0IG9yZGVyIG51bWJlciI7 CgkkaFsnY2gnXSA9ICJUaWNrIGlmIHRoZSBzZWN0aW9uIHNob3VsZCBiZSBjbG9uZWQgaW4g aXRzIG93biBzdWJtZW51IjsKCSRoWydjdCddID0gIlVzZWQgYXMgdGhlIHNlY3Rpb24ncyB0 aXRsZSBpZiBpdCdzIGNsb25lZCI7CgkkaFsnaW4nXSA9ICJJbnN0YWxsIGFkaV9tZW51IjsK CSRoWyd1biddID0gIlVuaW5zdGFsbCBhZGlfbWVudSI7CgkkaFsnaW0nXSA9ICJJbXBvcnQg cGFyZW50IHNldHRpbmdzIGZyb20gY25rX3NlY3Rpb25fdHJlZSAoaW5zdGFsbCBhZGlfbWVu dSBmaXJzdCkiOwoKCSRpbnN0YWxsZWQgPSBhZGlfbWVudV9pbnN0YWxsZWQoJycpOwoKCSRz b21ldGhpbmcgPSBwcygic29tZXRoaW5nIik7CgkkcmVzID0gRkFMU0U7CgoJaWYgKCRpbnN0 YWxsZWQpIHsKCQlpZiAoJHNvbWV0aGluZyA9PSAidW5pbnN0YWxsIikgewoJCQlyZXF1aXJl X3ByaXZzKCdwbHVnaW4nKTsKCQkJJHJlcyA9IGFkaV9tZW51X3VuaW5zdGFsbCgpOwoJCQlp ZiAoJHJlcykKCSAgIAkJCXBhZ2V0b3AoImFkaV9tZW51IGFkbWluIiwgImFkaV9tZW51OiB1 bmluc3RhbGwgc3VjY2Vzc2Z1bCIpOwoJCQllbHNlCgkgICAJCQlwYWdldG9wKCJhZGlfbWVu dSBhZG1pbiIsICJhZGlfbWVudTogdW5pbnN0YWxsIG5vdCBzdWNjZXNzZnVsIik7CgkJCSRp bnN0YWxsZWQgPSBhZGlfbWVudV9pbnN0YWxsZWQoJycpOwoJCX0KCQllbHNlIGlmICgkc29t ZXRoaW5nID09ICJpbnN0YWxsIikgewoJCQlyZXF1aXJlX3ByaXZzKCdwbHVnaW4nKTsKCQkJ cGFnZXRvcCgiYWRpX21lbnUgYWRtaW4iLCAiYWRpX21lbnU6IGFscmVhZHkgaW5zdGFsbGVk Iik7CgkJfQoJCWVsc2UgaWYgKCRzb21ldGhpbmcgPT0gImltcG9ydCIpIHsKCQkJJHJlcyA9 IGFkaV9tZW51X2ltcG9ydCgpOwoJICAgCQkkcmVzID8gcGFnZXRvcCgiYWRpX21lbnUgYWRt aW4iLCAiYWRpX21lbnU6IGltcG9ydCBzdWNjZXNzZnVsIikgOgoJCQkJcGFnZXRvcCgiYWRp X21lbnUgYWRtaW4iLCAiYWRpX21lbnU6IGltcG9ydCBmYWlsZWQiKTsKCQl9CgkJZWxzZSBp ZiAoJHN0ZXAgPT0gInVwZGF0ZSIpIHsKCSAgIAkJcGFnZXRvcCgiYWRpX21lbnUgYWRtaW4i LCAiYWRpX21lbnU6IHVwZGF0ZWQiKTsKCQkJCWlmICgkZGVidWcpIHsKCQkJCQllY2hvICI8 YnIvPlBhcmVudDogIjsKCQkJCQlwcmludF9yKHBzKCdwYXJlbnQnKSk7CgkJCQkJZWNobyAi PGJyLz5BbHQgdGl0bGU6ICI7CgkJCQkJcHJpbnRfcihwcygnYWx0X3RpdGxlJykpOwoJCQkJ CWVjaG8gIjxici8+RXhjbHVkZTogIjsKCQkJCQlwcmludF9yKHBzKCdleGNsdWRlJykpOwoJ CQkJCWVjaG8gIjxici8+Q2xvbmU6ICI7CgkJCQkJcHJpbnRfcihwcygnY2xvbmUnKSk7CgkJ CQkJZWNobyAiPGJyLz5Tb3J0OiAiOwoJCQkJCXByaW50X3IocHMoJ3NvcnQnKSk7CgkJCQl9 CgkJCQkkcGFyZW50ID0gcHMoJ3BhcmVudCcpOwoJCQkJJGFsdF90aXRsZSA9IHBzKCdhbHRf dGl0bGUnKTsKCQkJCSRleGNsdWRlID0gcHMoJ2V4Y2x1ZGUnKTsKCQkJCSRjbG9uZSA9IHBz KCdjbG9uZScpOwoJCQkJJHNvcnQgPSBwcygnc29ydCcpOwoJCQkJJHNlY3Rpb25zID0gYWRp X21lbnVfZ2V0X3NlY3Rpb25zKCk7CgkJCQlhZGlfbWVudV91cGRhdGUoJHNlY3Rpb25zLCRw YXJlbnQsJGFsdF90aXRsZSwkZXhjbHVkZSwkY2xvbmUsJHNvcnQpOwoJCX0KCQllbHNlIGlm ICgkc3RlcCA9PSAiYWRtaW4iKQoJCSAgIAlwYWdldG9wKCJhZGlfbWVudSBhZG1pbiIsICJh ZGlfbWVudTogbm8gYWRtaW4gb3B0aW9uIHNlbGVjdGVkIik7CgkJZWxzZSAvLyBkbyBub3Ro aW5nCgkJICAgCXBhZ2V0b3AoImFkaV9tZW51IGFkbWluIiwgIiIpOwoJfQoJZWxzZSB7IC8v IG5vdCBpbnN0YWxsZWQKCQlpZiAoJHNvbWV0aGluZyA9PSAiaW5zdGFsbCIpIHsKCQkJcmVx dWlyZV9wcml2cygncGx1Z2luJyk7CgkJCSRyZXMgPSBhZGlfbWVudV9pbnN0YWxsKCk7CgkJ CWlmICgkcmVzKQoJICAgIAkJcGFnZXRvcCgiYWRpX21lbnUgYWRtaW4iLCAiYWRpX21lbnU6 IGluc3RhbGwgc3VjY2Vzc2Z1bCIpOwoJCQllbHNlCgkgICAgCQlwYWdldG9wKCJhZGlfbWVu dSBhZG1pbiIsICJhZGlfbWVudTogaW5zdGFsbCBub3Qgc3VjY2Vzc2Z1bCIpOwoJCQkkaW5z dGFsbGVkID0gYWRpX21lbnVfaW5zdGFsbGVkKCcnKTsKCQl9CgkJZWxzZQoJCQlwYWdldG9w KCJhZGlfbWVudSBhZG1pbiIsICJhZGlfbWVudTogbXVzdCBiZSBpbnN0YWxsZWQgZmlyc3Qi KTsKCX0KCglpZiAoJGluc3RhbGxlZCkgewoJCWFkaV9tZW51X2FkZF9mb3JtKCk7CgkJJGRi X3NlY3Rpb25zID0gYWRpX21lbnVfZ2V0X3NlY3Rpb25zKCk7CgkJaWYgKCRkZWJ1ZykgewoJ CQllY2hvICdWRVJTSU9OUzonOwoJCQllY2hvICc8cHJlPic7CgkJCSR2ZXJzaW9uID0gc2Fm ZV9maWVsZCgidmVyc2lvbiIsICJ0eHBfcGx1Z2luIiwgIm5hbWU9J2FkaV9tZW51JyIpOwoJ CQllY2hvICdhZGlfbWVudTogJy4oZW1wdHkoJHZlcnNpb24pPydub3QgaW5zdGFsbGVkJzok dmVyc2lvbi4nIGluc3RhbGxlZCcpLic8YnIvPic7CgkJCWVjaG8gJ1RYUDogJy4kcHJlZnNb J3ZlcnNpb24nXS4nPGJyLz4nOwoJCQllY2hvICdQSFA6ICcucGhwdmVyc2lvbigpLic8YnIv Pic7CgkJCWVjaG8gJ015U1FMOiAnLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpOwoJCQllY2hv ICc8L3ByZT48aHIvPic7CgkJCWVjaG8gJ0RBVEFCQVNFOic7CgkJCWRtcCgkZGJfc2VjdGlv bnMpOwoJCQllY2hvICc8aHIvPic7CgkJCWVjaG8gJ1NFQ1RJT04gTEVWRUxTOic7CgkJCWds b2JhbCAkc29ydDsKCQkJLy8kc29ydCA9ICduYW1lJzsgLy8gcmVxdWlyZWQgYnkgYWRpX21l bnVfc2VjdGlvbl9saXN0KCkKCQkJJHNlY3Rpb25fbGlzdCA9IGFkaV9tZW51X3NlY3Rpb25f bGlzdChUUlVFKTsKCQkJJGhpZXJhcmNoeSA9IGFkaV9tZW51X2hpZXJhcmNoeSgkc2VjdGlv bl9saXN0LCcnLDApOwoJCQkkc2VjdGlvbl9sZXZlbHMgPSBhZGlfbWVudV9zZWN0aW9uX2xl dmVscygkaGllcmFyY2h5LDEpOyAvLyB0b3AgbGV2ZWwgPSAxLCBldGMKCQkJZG1wKCRzZWN0 aW9uX2xldmVscyk7CgkJCWVjaG8gJzxoci8+JzsKCQkJZWNobyAnUFJFRlM6JzsKCQkJZG1w KCRwcmVmcyk7CgkJCWVjaG8gJzxoci8+JzsKCQkJaWYgKCRzZWRfc2ZfaW5zdGFsbGVkKSB7 CgkJCQlwcmludCAnc2VkX3NlY3Rpb25fZmllbGRzIHYnLiRzZWRfc2ZfaW5zdGFsbGVkWyd2 ZXJzaW9uJ10uJyBpcyBpbnN0YWxsZWQgJiBhY3RpdmUnOwoJCQkJZWNobyAnPGhyLz4nOwoJ CQl9CgkJfQoJCS8vIGNoZWNrIGZvciBzZWN0aW9uIGxvb3BzCgkJJG91dCA9ICIiOwoJCWZv cmVhY2ggKCRkYl9zZWN0aW9ucyBhcyAkaW5kZXggPT4gJHNlY3Rpb24pCgkJCWlmIChhZGlf bWVudV9sb29wX2NoZWNrKCRkYl9zZWN0aW9ucywkc2VjdGlvblsnYWRpX21lbnVfcGFyZW50 J10sYXJyYXkoKSkpCgkJCQkkb3V0IC49ICIgIi4kaW5kZXg7CgkJaWYgKCRvdXQpIHsKCQkJ ZWNobyB0YWcoCgkJCQknPHN0cm9uZyBzdHlsZT0iY29sb3I6I2IyMjIyMiI+KiogV0FSTklO RzogU2VjdGlvbiBsb29wcyBmb3VuZCAoY2hlY2s6ICcuJG91dC4nKSAqKjwvc3Ryb25nPics CgkJCQknZGl2JywKCQkJCScgc3R5bGU9Im1hcmdpbjoxZW07IHRleHQtYWxpZ246Y2VudGVy IicKCQkJKTsKCQl9CgkJZWNobyBmb3JtKAoJCQlzdGFydFRhYmxlKCdsaXN0JykuCgkJCXRy KAoJCQkJaGNlbGwoYWRpX21lbnVfdGlwKCJTZWN0aW9uIiwkaFsnc2UnXSkpLgoJCQkJaGNl bGwoYWRpX21lbnVfdGlwKCJUaXRsZSIsJGhbJ3RpJ10pKS4KCQkJCWhjZWxsKGFkaV9tZW51 X3RpcCgiRXhjbHVkZT8iLCRoWydleCddKSkuCgkJCQloY2VsbChhZGlfbWVudV90aXAoIlBh cmVudCIsJGhbJ3BhJ10pKS4KCQkJCWhjZWxsKGFkaV9tZW51X3RpcCgiU29ydCBvcmRlciIs JGhbJ3NvJ10pKS4KCQkJCWhjZWxsKGFkaV9tZW51X3RpcCgiQ2xvbmU/IiwkaFsnY2gnXSkp LgoJCQkJaGNlbGwoYWRpX21lbnVfdGlwKCJDbG9uZSB0aXRsZSIsJGhbJ2N0J10pKQoJCQkp LgoJCQkvLyc8dGZvb3Qgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQiPjx0cj48dGQ+U2VjdGlv bjwvdGQ+PHRkPlRpdGxlPC90ZD48dGQ+RXhjbHVkZT88L3RkPjx0ZD5QYXJlbnQ8L3RkPjx0 ZD5Tb3J0IG9yZGVyPC90ZD48dGQ+Q2xvbmU/PC90ZD48dGQ+Q2xvbmUgdGl0bGU8L3RkPjwv dHI+PC90Zm9vdD4nLgoJCQlhZGlfbWVudV9kaXNwbGF5X3NldHRpbmdzKCRkYl9zZWN0aW9u cykuCgkJCWVuZFRhYmxlKCkuCgkJCXRhZygKCQkJCWZJbnB1dCgic3VibWl0IiwgInVwZGF0 ZSIsICJVcGRhdGUiLCAic21hbGxlcmJveCIpLgoJCQkJZUlucHV0KCJhZGlfbWVudV9hZG1p biIpLnNJbnB1dCgidXBkYXRlIiksCgkJCQknZGl2JywKCQkJCScgc3R5bGU9Im1hcmdpbi10 b3A6MmVtOyB0ZXh0LWFsaWduOmNlbnRlciInCgkJCSkKCQkpOwoJfQoKCWlmICgkZGVidWcp IGVjaG8gIjxoci8+RXZlbnQ6ICIuJGV2ZW50LiI8YnIvPlN0ZXA6ICIuJHN0ZXAuIjxici8+ U29tZXRoaW5nOiAiLiRzb21ldGhpbmcuJzxoci8+JzsKCiAgICBlY2hvIGZvcm0oCgkJdGFn KCJBZG1pbmlzdHJhdGlvbiIsImgzIikuCgkJZ3JhZigKCQkJIiAiLmFkaV9tZW51X3RpcCgi SW5zdGFsbCIsJGhbJ2luJ10pLgoJCQlmSW5wdXQoInJhZGlvIiwgInNvbWV0aGluZyIsICJp bnN0YWxsIiwgImVkaXQiLCAiIiwgIiIsICIyMCIsICIxIikuCgkJCSIgIi5hZGlfbWVudV90 aXAoIlVuaW5zdGFsbCIsJGhbJ3VuJ10pLgogICAgICAgIAlmSW5wdXQoInJhZGlvIiwgInNv bWV0aGluZyIsICJ1bmluc3RhbGwiLCAiZWRpdCIsICIiLCAiIiwgIjIwIiwgIjEiKS4KCQkJ IiAiLmFkaV9tZW51X3RpcCgiSW1wb3J0IiwkaFsnaW0nXSkuCiAgICAgICAgCWZJbnB1dCgi cmFkaW8iLCAic29tZXRoaW5nIiwgImltcG9ydCIsICJlZGl0IiwgIiIsICIiLCAiMjAiLCAi MSIpLgoJCQkiICIuCiAgICAgICAgCWZJbnB1dCgic3VibWl0IiwgImRvX3NvbWV0aGluZyIs ICJEbyBhZG1pbiIsICJzbWFsbGVyYm94IiwiIiwncmV0dXJuIHZlcmlmeShcJycuZ1R4dCgn YXJlX3lvdV9zdXJlJykuJ1wnKScpCgkJKS4KICAgICAgICBlSW5wdXQoImFkaV9tZW51X2Fk bWluIikuc0lucHV0KCJhZG1pbiIpCgkJLCJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9w OjNlbSIKCSk7CgoJZ2xvYmFsICRzZWN0aW9ucywkZXhjbHVkZSwkc29ydCwkZGVmYXVsdF9m aXJzdCwkaW5jbHVkZV9jaGlsZHJlbiwkZGVmYXVsdF90aXRsZSwkbWVudV9pZCwkZXNjYXBl OwoJaWYgKCRpbnN0YWxsZWQpIHsgLy8gb3V0cHV0IGhpZXJhcmNoeSBzdW1tYXJ5CgkJJHNl Y3Rpb25zPSRleGNsdWRlPSIiOwoJCSRzb3J0PSJOVUxMIjsKCQkkZGVmYXVsdF9maXJzdD0i MSI7CgkJJGluY2x1ZGVfY2hpbGRyZW49IjEiOwoJCSRtZW51X2lkID0gIm1haW5tZW51IjsK CQkkZXNjYXBlID0gJ2h0bWxzcGVjaWFsJzsKCQkkc2VjdGlvbl9saXN0ID0gYWRpX21lbnVf c2VjdGlvbl9saXN0KEZBTFNFKTsKCQkkaGllcmFyY2h5ID0gYWRpX21lbnVfaGllcmFyY2h5 KCRzZWN0aW9uX2xpc3QsJycsMCk7CgkJJG91dCA9IGFkaV9tZW51X21hcmt1cCgkaGllcmFy Y2h5LDApOwoJCWVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjEwZW0iPic7CgkJZWNo byB0YWcoIlN1bW1hcnkiLCJoMyIsJyBzdHlsZT0ibWFyZ2luLXRvcDoyZW0iJyk7CgkJZWNo byB0YWcoIlRoZSBhYm92ZSBjb25maWd1cmF0aW9uIHdpbGwgZ2VuZXJhdGUgdGhlIGZvbGxv d2luZyBzZWN0aW9uIGhpZXJhcmNoeSAoc3ViamVjdCB0byBhZGlfbWVudSB0YWcgYXR0cmli dXRlcyk6IiwicCIpOwoJCWZvcmVhY2ggKCRvdXQgYXMgJGluZGV4ID0+ICR2YWx1ZSkKCQkJ cHJpbnQgJG91dFskaW5kZXhdOwoJCWVjaG8gJzwvZGl2Pic7Cgl9Cn0KCmZ1bmN0aW9uIGFk aV9tZW51X3RpcCgkdGVybSwkaGVscCkgewovLyByZXR1cm4gdGhlIHN1cHBsaWVkIHRpcCBz dXJyb3VuZGVkIGJ5IG1hcmt1cAoJcmV0dXJuICc8ZGZuJy4KCQknIHRpdGxlPSInLiRoZWxw LiciJy4KCQknIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJy4KCQkn PicuCgkJJHRlcm0uCgkJJzwvZGZuPic7Cn0KCmZ1bmN0aW9uIGFkaV9tZW51X2NvbHVtbl9m b3VuZCgkY29sdW1uKSB7Ci8vIGNoZWNrIGZvciBwcmVzZW5jZSBvZiBzdXBwbGllZCBjb2x1 bW4gaW4gdHhwX3NlY3Rpb24gdGFibGUKCSRycyA9IHNhZmVfcXVlcnkoJ1NFTEVDVCAqIEZS T00gJy5zYWZlX3BmeCgndHhwX3NlY3Rpb24nKSk7CgkkYSA9IG5leHRSb3coJHJzKTsKCXJl dHVybiBhcnJheV9rZXlfZXhpc3RzKCRjb2x1bW4sICRhKTsKfQoKZnVuY3Rpb24gYWRpX21l bnVfaW5zdGFsbGVkKCkgewovLyBpZiAnYWRpX21lbnVfcGFyZW50JyBjb2x1bW4gcHJlc2Vu dCB0aGVuIGFzc3VtZSBhZGlfbWVudSBpcyBpbnN0YWxsZWQKCXJldHVybihhZGlfbWVudV9j b2x1bW5fZm91bmQoJ2FkaV9tZW51X3BhcmVudCcpKTsKfQoKZnVuY3Rpb24gYWRpX21lbnVf aW1wb3J0KCkgewovLyBpbXBvcnQgcGFyZW50IHNldHRpbmdzIGZyb20gJ3BhcmVudCcgY29s dW1uIC0gYXMgdXNlZCBpbiBjbmtfc2VjdGlvbl90cmVlCglpZiAoYWRpX21lbnVfY29sdW1u X2ZvdW5kKCdwYXJlbnQnKSkgeyAvLyAncGFyZW50JyBjb2x1bW4gcHJlc2VudAoJCSRzcWxf ZmllbGRzID0gIm5hbWUscGFyZW50IjsKCQkkc3FsX3RhYmxlcyA9IHNhZmVfcGZ4KCd0eHBf c2VjdGlvbicpOwoJCSRycyA9IHNhZmVfcXVlcnkoIlNFTEVDVCAiLiRzcWxfZmllbGRzLiIg RlJPTSAiLiRzcWxfdGFibGVzKTsKCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQkJ ZXh0cmFjdCgkYSk7CgkJCSRpbXBvcnRbJG5hbWVdID0gJGE7CgkJfQoJCWZvcmVhY2ggKCRp bXBvcnQgYXMgJGluZGV4ID0+ICRzZWN0aW9uKSB7CgkJCQkkd2hlcmUgPSAnbmFtZT0iJy4k aW5kZXguJyInOwoJCQkJJGltcG9ydFskaW5kZXhdWydwYXJlbnQnXSA9PSAnZGVmYXVsdCcg PyAvLyBkb24ndCB3YW50ICdkZWZhdWx0JyBhcyBhIHBhcmVudAoJCQkJCSRzZXQgPSAnYWRp X21lbnVfcGFyZW50PSIiJyA6CgkJCQkJJHNldCA9ICdhZGlfbWVudV9wYXJlbnQ9IicuJGlt cG9ydFskaW5kZXhdWydwYXJlbnQnXS4nIic7CgkJCQlzYWZlX3VwZGF0ZSgndHhwX3NlY3Rp b24nLCAkc2V0LCAkd2hlcmUsICRkZWJ1Zz0nJyk7CgkJfQoJCXJldHVybiBUUlVFOwoJfQoJ ZWxzZQoJCXJldHVybiBGQUxTRTsKfQoKZnVuY3Rpb24gYWRpX21lbnVfZGlzcGxheV9zZXR0 aW5ncygkc2VjdGlvbnMpIHsKLy8gZ2VuZXJhdGUgc2VjdGlvbidzIHRhYmxlIHJvdyBpbiBh ZG1pbiBzZXR0aW5ncyB0YWJsZQoJJG91dCA9ICcnOwoJZm9yZWFjaCAoJHNlY3Rpb25zIGFz ICRpbmRleCA9PiAkc2VjdGlvbikgewoJCSR0aXRsZSA9ICRzZWN0aW9uWyd0aXRsZSddOwoJ CSRwYXJlbnQgPSAkc2VjdGlvblsnYWRpX21lbnVfcGFyZW50J107CgkJJGFsdF90aXRsZSA9 ICRzZWN0aW9uWydhZGlfbWVudV90aXRsZSddOwoJCSRleGNsdWRlID0gJHNlY3Rpb25bJ2Fk aV9tZW51X2V4Y2x1ZGUnXTsKCQkkY2xvbmUgPSAkc2VjdGlvblsnYWRpX21lbnVfY2xvbmUn XTsKCQkkc29ydCA9ICRzZWN0aW9uWydhZGlfbWVudV9zb3J0J107CgkJJG91dCAuPSB0cigK CQkJdGRhKCRpbmRleCkuCgkJCXRkYShodG1sc3BlY2lhbGNoYXJzKCR0aXRsZSkpLgoJCQl0 ZGEoY2hlY2tib3goImV4Y2x1ZGVbJGluZGV4XSIsICIxIiwgJGV4Y2x1ZGUpLCcgc3R5bGU9 InRleHQtYWxpZ246Y2VudGVyIicpLgoJCQl0ZGEoYWRpX21lbnVfc2VjdGlvbl9wb3B1cCgi cGFyZW50WyRpbmRleF0iLCRwYXJlbnQpKS4KCQkJdGRhKGZpbnB1dCgidGV4dCIsInNvcnRb JGluZGV4XSIsJHNvcnQsJycsJycsJycsNCksJyBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIi JykuCgkJCXRkYShjaGVja2JveCgiY2xvbmVbJGluZGV4XSIsICIxIiwgJGNsb25lKSwnIHN0 eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciInKS4KCQkJdGRhKGZpbnB1dCgidGV4dCIsImFsdF90 aXRsZVskaW5kZXhdIiwkYWx0X3RpdGxlKSkKCQkpOwoJfQoJcmV0dXJuICRvdXQ7Cn0KCmZ1 bmN0aW9uIGFkaV9tZW51X3NlY3Rpb25fcG9wdXAoJHNlbGVjdF9uYW1lLCR2YWx1ZSkgewov LyBnZW5lcmF0ZSBzZWN0aW9uIHBvcHVwIGxpc3QgZm9yIGFkbWluIHNldHRpbmdzIHRhYmxl CgkvLyB3aGVyZSAnVFJVRScgbm90IHN1cHBvcnRlZCBvbiBNeVNRTCA0LjAuMjcgKE9LIGlu IE15U1FMIDUrKSwgc28gdXNlIDE9MQoJJHJzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhw X3NlY3Rpb24nLCAnMT0xJyk7CglpZiAoJHJzKQoJCXJldHVybiBzZWxlY3RJbnB1dCgkc2Vs ZWN0X25hbWUsICRycywgJHZhbHVlLCBUUlVFKTsKCXJldHVybiBmYWxzZTsKfQoKZnVuY3Rp b24gYWRpX21lbnVfdXBkYXRlKCRzZWN0aW9ucywkcGFyZW50LCRhbHRfdGl0bGUsJGV4Y2x1 ZGUsJGNsb25lLCRzb3J0KSB7Ci8vIHVwZGF0ZSB0eHBfc2VjdGlvbiB0YWJsZSBpbiBkYXRh YmFzZQoJZm9yZWFjaCAoJHNlY3Rpb25zIGFzICRpbmRleCA9PiAkc2VjdGlvbikgewoJCSR3 aGVyZSA9ICduYW1lPSInLiRpbmRleC4nIic7CgkJJHNldCA9ICdhZGlfbWVudV9wYXJlbnQ9 IicuJHBhcmVudFskaW5kZXhdLiciJzsKCQlzYWZlX3VwZGF0ZSgndHhwX3NlY3Rpb24nLCAk c2V0LCAkd2hlcmUsICRkZWJ1Zz0nJyk7CgkJJHNldCA9ICdhZGlfbWVudV90aXRsZT0iJy4k YWx0X3RpdGxlWyRpbmRleF0uJyInOwoJCXNhZmVfdXBkYXRlKCd0eHBfc2VjdGlvbicsICRz ZXQsICR3aGVyZSwgJGRlYnVnPScnKTsKCQllbXB0eSgkZXhjbHVkZVskaW5kZXhdKSA/ICRz ZXQgPSAnYWRpX21lbnVfZXhjbHVkZT0iMCInIDogJHNldCA9ICdhZGlfbWVudV9leGNsdWRl PSIxIic7CgkJc2FmZV91cGRhdGUoJ3R4cF9zZWN0aW9uJywgJHNldCwgJHdoZXJlLCAkZGVi dWc9JycpOwoJCWVtcHR5KCRjbG9uZVskaW5kZXhdKSA/ICRzZXQgPSAnYWRpX21lbnVfY2xv bmU9IjAiJyA6ICRzZXQgPSAnYWRpX21lbnVfY2xvbmU9IjEiJzsKCQlzYWZlX3VwZGF0ZSgi dHhwX3NlY3Rpb24iLCAkc2V0LCAkd2hlcmUsICRkZWJ1Zz0nJyk7CgkJJHNldCA9ICdhZGlf bWVudV9zb3J0PSInLiRzb3J0WyRpbmRleF0uJyInOwoJCXNhZmVfdXBkYXRlKCd0eHBfc2Vj dGlvbicsICRzZXQsICR3aGVyZSwgJGRlYnVnPScnKTsKCX0KfQoKZnVuY3Rpb24gYWRpX21l bnVfaW5zdGFsbCgpIHsKLy8gYWRkIGFkaV9tZW51J3MgY29sdW1ucyB0byB0eHBfc2VjdGlv biB0YWJsZQoJLy8gbm90ZTogVElOWUlOVCgxKSBERUZBVUxUIDAgPSBCT09MRUFOIERFRkFV TFQgRkFMU0UKCXJldHVybiBzYWZlX3F1ZXJ5KCJBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCJ0 eHBfc2VjdGlvbiIpLiIgQUREIGFkaV9tZW51X3BhcmVudCBWQVJDSEFSKDEyOCkgREVGQVVM VCAnJzsiKQoJCSYmIHNhZmVfcXVlcnkoIkFMVEVSIFRBQkxFICIuc2FmZV9wZngoInR4cF9z ZWN0aW9uIikuIiBBREQgYWRpX21lbnVfdGl0bGUgVkFSQ0hBUigxMjgpIERFRkFVTFQgJyc7 IikKCQkmJiBzYWZlX3F1ZXJ5KCJBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCJ0eHBfc2VjdGlv biIpLiIgQUREIGFkaV9tZW51X2V4Y2x1ZGUgVElOWUlOVCgxKSBERUZBVUxUIDAgTk9UIE5V TEw7IikKCQkmJiBzYWZlX3F1ZXJ5KCJBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCJ0eHBfc2Vj dGlvbiIpLiIgQUREIGFkaV9tZW51X2Nsb25lIFRJTllJTlQoMSkgREVGQVVMVCAwIE5PVCBO VUxMOyIpCgkJJiYgc2FmZV9xdWVyeSgiQUxURVIgVEFCTEUgIi5zYWZlX3BmeCgidHhwX3Nl Y3Rpb24iKS4iIEFERCBhZGlfbWVudV9zb3J0IFRJTllJTlQoMykgVU5TSUdORUQgREVGQVVM VCAwIE5PVCBOVUxMOyIpOwp9CgpmdW5jdGlvbiBhZGlfbWVudV91bmluc3RhbGwoKSB7Ci8v IHJlbW92ZSBhZGlfbWVudSdzIGNvbHVtbnMgZnJvbSB0eHBfc2VjdGlvbiB0YWJsZQoJcmV0 dXJuIHNhZmVfcXVlcnkoIkFMVEVSIFRBQkxFICIuc2FmZV9wZngoInR4cF9zZWN0aW9uIiku IiBEUk9QIENPTFVNTiBhZGlfbWVudV9wYXJlbnQ7IikKCQkmJiBzYWZlX3F1ZXJ5KCJBTFRF UiBUQUJMRSAiLnNhZmVfcGZ4KCJ0eHBfc2VjdGlvbiIpLiIgRFJPUCBDT0xVTU4gYWRpX21l bnVfdGl0bGU7IikKCQkmJiBzYWZlX3F1ZXJ5KCJBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCJ0 eHBfc2VjdGlvbiIpLiIgRFJPUCBDT0xVTU4gYWRpX21lbnVfZXhjbHVkZTsiKQoJCSYmIHNh ZmVfcXVlcnkoIkFMVEVSIFRBQkxFICIuc2FmZV9wZngoInR4cF9zZWN0aW9uIikuIiBEUk9Q IENPTFVNTiBhZGlfbWVudV9jbG9uZTsiKQoJCSYmIHNhZmVfcXVlcnkoIkFMVEVSIFRBQkxF ICIuc2FmZV9wZngoInR4cF9zZWN0aW9uIikuIiBEUk9QIENPTFVNTiBhZGlfbWVudV9zb3J0 OyIpOwp9CgpmdW5jdGlvbiBhZGlfbWVudV9hZGRfZm9ybSgpIHsKLy8gYWRkIGFkaV9tZW51 J3MgYXJ0aWNsZSBmb3JtCglnbG9iYWwgJGFydGljbGVfZm9ybTsKCWlmICghc2FmZV9maWVs ZCgnbmFtZScsICd0eHBfZm9ybScsICJuYW1lPSciLiRhcnRpY2xlX2Zvcm0uIiciKSkgewoJ CSRmb3JtID0gPDw8RU9GCjxsaSBjbGFzcz0ibWVudV9hcnRpY2xlIj48dHhwOnBlcm1saW5r Pjx0eHA6dGl0bGUvPjwvdHhwOnBlcm1saW5rPjwvbGk+CkVPRjsKCQlzYWZlX2luc2VydCgn dHhwX2Zvcm0nLAoJCQkibmFtZT0nIi4kYXJ0aWNsZV9mb3JtLiInLAoJCQl0eXBlPSdhcnRp Y2xlJywKCQkJRm9ybT0nIi5kb1NsYXNoKCRmb3JtKS4iJyIpOwoJfQp9CgpmdW5jdGlvbiBh ZGlfbWVudV9nZXRfc2VjdGlvbnMoKSB7Ci8vIGdldCBzZWN0aW9uIGluZm9ybWF0aW9uIGZy b20gdHhwX3NlY3Rpb24gdGFibGUgaW4gZGF0YWJhc2UKCWdsb2JhbCAkYWxsX3NxbF9maWVs ZHM7Cgkkc3FsX3RhYmxlcyA9IHNhZmVfcGZ4KCd0eHBfc2VjdGlvbicpOwoJJHJzID0gc2Fm ZV9xdWVyeSgiU0VMRUNUICIuJGFsbF9zcWxfZmllbGRzLiIgRlJPTSAiLiRzcWxfdGFibGVz LiIgT1JERVIgQlkgbmFtZSIpOwoJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJZXh0 cmFjdCgkYSk7IC8vIHNldCAnbmFtZScsJ3RpdGxlJywncGFyZW50JyBldGMgaW4gJGEKCQkk b3V0WyRuYW1lXSA9ICRhOwoJfQoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIGFkaV9tZW51 X2xvb3BfY2hlY2soJHNlY3Rpb25fbGlzdCwkcGFyZW50LCRhbmNlc3RvcnMpIHsKLy8gY2hl Y2sgZm9yIHNlY3Rpb24gcGFyZW50L2NoaWxkIGxvb3BzCglpZiAoZW1wdHkoJHBhcmVudCkp IC8vIG5vIG1vcmUgYW5jZXN0b3JzCgkJcmV0dXJuIEZBTFNFOwoJZWxzZSB7CgkJaWYgKGFy cmF5X2tleV9leGlzdHMoJHBhcmVudCwkYW5jZXN0b3JzKSkgLy8gbG9vcCBmb3VuZAoJCQly ZXR1cm4gVFJVRTsKCQllbHNlIHsKCQkJJGFuY2VzdG9yc1skcGFyZW50XT0nJzsgLy8gYWRk IHBhcmVudCB0byBsaXN0IG9mIGFuY2VzdG9ycwoJCQlyZXR1cm4gYWRpX21lbnVfbG9vcF9j aGVjaygkc2VjdGlvbl9saXN0LCRzZWN0aW9uX2xpc3RbJHBhcmVudF1bJ2FkaV9tZW51X3Bh cmVudCddLCRhbmNlc3RvcnMpOwoJCX0KCX0KfQoKZnVuY3Rpb24gYWRpX21lbnVfc2VjdGlv bl9saXN0KCRpZ25vcmVfZXhjbHVkZSkgewovLyBjcmVhdGUgbGlzdCBvZiByZXF1aXJlZCBz ZWN0aW9ucwoJZ2xvYmFsICRleGNsdWRlLCRzb3J0LCRkZWZhdWx0X2ZpcnN0LCRkZWZhdWx0 X3RpdGxlLCRzZWN0aW9uczsKCWlmIChlbXB0eSgkc29ydCkpICRzb3J0ID0gJ25hbWUnOyAv LyBkZWZhdWx0IHNvcnQgbWV0aG9kCgkkc3FsX2ZpZWxkcyA9ICduYW1lLHRpdGxlLGFkaV9t ZW51X3BhcmVudCxhZGlfbWVudV9jbG9uZSxhZGlfbWVudV90aXRsZSxhZGlfbWVudV9zb3J0 JzsKCWlmICgkc2VjdGlvbnMpIHsgLy8gZXhwbGljaXQgbGlzdCBvZiBpbmNsdWRlZCBzZWN0 aW9ucyB3aGljaCBzaG91bGQgb3ZlcnJpZGUgYWRtaW4gZXhjbHVkZWQgc2VjdGlvbnMKCQkk aW5jbHVkZV9vcHRpb24gPSBkb19saXN0KCRzZWN0aW9ucyk7CgkJJGluY2x1ZGVfb3B0aW9u ID0gam9pbigiJywnIiwgZG9TbGFzaCgkaW5jbHVkZV9vcHRpb24pKTsKCQkkaW5jbHVkZV9v cHRpb24gPSAiT1IgbmFtZSBJTiAoJyRpbmNsdWRlX29wdGlvbicpIjsKCX0KCWVsc2UKCQkk aW5jbHVkZV9vcHRpb24gPSAnJzsKCWlmICgkZXhjbHVkZSkgewoJCSRleGNsdWRlID0gZG9f bGlzdCgkZXhjbHVkZSk7CgkJJGV4Y2x1ZGUgPSBqb2luKCInLCciLCBkb1NsYXNoKCRleGNs dWRlKSk7CgkJJGV4Y2x1ZGUgPSAiQU5EIG5hbWUgTk9UIElOICgnJGV4Y2x1ZGUnKSI7Cgl9 CgkkaWdub3JlX2V4Y2x1ZGUgPwoJCSRleGNsdWRlX29wdGlvbiA9ICIxPTEiIDogLy8gZHVt bXkvZmlsbGVyIFdIRVJFIGNvbmRpdGlvbgoJCSRleGNsdWRlX29wdGlvbiA9ICJhZGlfbWVu dV9leGNsdWRlID0gMCI7CglpZiAoJGluY2x1ZGVfb3B0aW9uKQoJCSRleGNsdWRlX29wdGlv biA9ICcoJy4kZXhjbHVkZV9vcHRpb24uJyAnLiRpbmNsdWRlX29wdGlvbi4nKSc7CgkkcnMg PSBzYWZlX3Jvd3Nfc3RhcnQoJHNxbF9maWVsZHMsICd0eHBfc2VjdGlvbicsICIkZXhjbHVk ZV9vcHRpb24gJGV4Y2x1ZGUgb3JkZXIgYnkgIi4kc29ydCk7CglpZiAoJHJzKSB7CgkJJHNl Y3Rpb25fbGlzdCA9IGFycmF5KCk7CgkJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJ CWV4dHJhY3QoJGEpOyAvLyBzZXRzICduYW1lJywndGl0bGUnLCdhZGlfbWVudV9wYXJlbnQn IGV0YyBpbiAkYQoJCQkkYVsndXJsJ10gPSBwYWdlbGlua3VybChhcnJheSgncycgPT4gJG5h bWUpKTsgLy8gYWRkIHVybCB0byAkYQoJCQl1bnNldCgkYVsnbmFtZSddKTsgLy8gcmVtb3Zl ICduYW1lJyBlbGVtZW50IChuYW1lIHVzZWQgYXMgaW5kZXggaW4gJHNlY3Rpb25fbGlzdCkK CQkJJHNlY3Rpb25fbGlzdFskbmFtZV0gPSAkYTsKCQl9CgkJaWYgKGFycmF5X2tleV9leGlz dHMoJ2RlZmF1bHQnLCRzZWN0aW9uX2xpc3QpKSB7IC8vIGRlZmF1bHQgc2VjdGlvbiBpbmNs dWRlZCBpbiBtZW51CgkJCWlmICgkc2VjdGlvbl9saXN0ICYmICRkZWZhdWx0X3RpdGxlKSAv LyBzZXQgZGVmYXVsdCBzZWN0aW9uIHRpdGxlCgkJCQkkc2VjdGlvbl9saXN0WydkZWZhdWx0 J11bJ3RpdGxlJ10gPSAkZGVmYXVsdF90aXRsZTsKCQkJaWYgKCRzZWN0aW9uX2xpc3QgJiYg JGRlZmF1bHRfZmlyc3QpIHsgLy8gc2hpZnQgZGVmYXVsdCBzZWN0aW9uIHRvIGJlZ2lubmlu ZwoJCQkJJHJlbWVtYmVyWydkZWZhdWx0J10gPSAkc2VjdGlvbl9saXN0WydkZWZhdWx0J107 IC8vIHJlbWVtYmVyICdkZWZhdWx0JyBlbGVtZW50CgkJCQl1bnNldCgkc2VjdGlvbl9saXN0 WydkZWZhdWx0J10pOyAvLyByZW1vdmUgJ2RlZmF1bHQnIGVsZW1lbnQKCQkJCSRzZWN0aW9u X2xpc3QgPSBhcnJheV9tZXJnZSgkcmVtZW1iZXIsICRzZWN0aW9uX2xpc3QpOyAvLyBqb2lu IHRvZ2V0aGVyLCAnZGVmYXVsdCcgbm93IGF0IGJlZ2lubmluZwoJCQl9CgkJfQoJCXJldHVy biAkc2VjdGlvbl9saXN0OwoJfQp9CgpmdW5jdGlvbiBhZGlfbWVudV9hcnRpY2xlX3RhYigp IHsKLy8gdGhlIG1hZ2ljIHRoYXQgZ2V0cyBhZGlfbWVudSdzIHNlY3Rpb24gcG9wdXAgaW50 byB0aGUgc3RhbmRhcmQgQXJ0aWNsZS9Xcml0ZSB0YWIKCWlmIChhZGlfbWVudV9pbnN0YWxs ZWQoKSkKCQlvYl9zdGFydCgnYWRpX21lbnVfYXJ0aWNsZV9pbmplY3QnKTsKfQoKZnVuY3Rp b24gYWRpX21lbnVfYXJ0aWNsZV9pbmplY3QoJGJ1ZmZlcikgewovLyBtb3JlIG1hZ2ljIHRo YXQgZ2V0cyBhZGlfbWVudSdzIHNlY3Rpb24gcG9wdXAgaW50byB0aGUgc3RhbmRhcmQgQXJ0 aWNsZS9Xcml0ZSB0YWIKCWdsb2JhbCAkREI7CglpZighaXNzZXQoJERCKSkgJERCID0gbmV3 IGRiOwoJJHBhdHRlcm4gPSAnI25hbWU9IlNlY3Rpb24iLio8L3NlbGVjdD4jc1UnOwoJJGlu c2VydCA9ICdhZGlfbWVudV9hcnRpY2xlX3NlY3Rpb25fcG9wdXAnOwoJJGJ1ZmZlciA9IHBy ZWdfcmVwbGFjZV9jYWxsYmFjaygkcGF0dGVybiwgJGluc2VydCwgJGJ1ZmZlcik7Cglwcmlu dCAnPicuJEdMT0JBTFNbJ0lEJ10uJzwnOwoJcmV0dXJuICRidWZmZXI7Cn0KCmZ1bmN0aW9u IGFkaV9tZW51X3NlY3Rpb25faW5kZW50KCRsZXZlbCkgewovLyBjcmVhdGUgaW5kZW50IGZv ciBzZWN0aW9uIGluIHBvcHVwCgkkbGV2ZWwgLT0gMTsKCWlmICgkbGV2ZWwpCgkJZm9yICgk eD0xOyAkeCA8PSAkbGV2ZWw7ICR4KyspCgkJCSRvdXQgLj0iJm5ic3A7Jm5ic3A7IjsKCXJl dHVybiAkb3V0Owp9CgpmdW5jdGlvbiBhZGlfbWVudV9hcnRpY2xlX3NlY3Rpb25fcG9wdXAo KSB7Ci8vIGdlbmVyYXRlIG1hcmt1cCBmb3Igc2VjdGlvbiBwb3B1cCBtZW51IGZvciBBcnRp Y2xlL1dyaXRlIHRhYgoJZ2xvYmFsICRzb3J0LCRzdGVwLCRzZWRfc2ZfaW5zdGFsbGVkOwoJ JHNlY3Rpb25fbGlzdCA9IGFkaV9tZW51X3NlY3Rpb25fbGlzdChUUlVFKTsKCSRoaWVyYXJj aHkgPSBhZGlfbWVudV9oaWVyYXJjaHkoJHNlY3Rpb25fbGlzdCwnJywwKTsKCSRzZWN0aW9u X2xldmVscyA9IGFkaV9tZW51X3NlY3Rpb25fbGV2ZWxzKCRoaWVyYXJjaHksMSk7IC8vIHRv cCBsZXZlbCA9IDEsIGV0YwoJaWYgKCRzdGVwID09ICdlZGl0JykgeyAvLyBlZGl0aW5nIGV4 aXN0aW5nICgkc3RlcCA9IEdFVCB2YXIpIG9yIGNyZWF0aW5nIG5ldyBhcnRpY2xlICgkc3Rl cCA9IFBPU1QgdmFyKQoJCWlmICghZW1wdHkoJEdMT0JBTFNbJ0lEJ10pKSAvLyBuZXdseS1z YXZlZCBhcnRpY2xlLCBnZXQgc2VjdGlvbiBmcm9tIFBPU1QgdmFycwoJCQkkc2VsZWN0X3Nl Y3Rpb24gPSBncHMoJ1NlY3Rpb24nKTsKCQllbHNlIHsgLy8gZXhpc3RpbmcgYXJ0aWNsZSwg Z2V0IElEIGZyb20gR0VUIHZhcnMgJiBzZWN0aW9uIGZyb20gZGF0YWJhc2UKCQkJJGFydGlj bGVfaWQgPSBncHMoJ0lEJyk7CgkJCSRzZWxlY3Rfc2VjdGlvbiA9IHNhZmVfZmllbGQoInNl Y3Rpb24iLCAidGV4dHBhdHRlcm4iLCJpZD0iLiRhcnRpY2xlX2lkKTsKCQl9Cgl9CgllbHNl IC8vIGVtcHR5IGFydGljbGUKCQkkc2VsZWN0X3NlY3Rpb24gPSBnZXREZWZhdWx0U2VjdGlv bigpOyAvLyBkZWZhdWx0IHNlY3Rpb24gZm9yIGFydGljbGVzIChkZWZpbmVkIGluIFNlY3Rp b25zIHRhYikKCSRvdXQgPSAnbmFtZT0iU2VjdGlvbiIgY2xhc3M9Imxpc3QiPic7Cglmb3Jl YWNoICgkc2VjdGlvbl9sZXZlbHMgYXMgJG5hbWUgPT4gJGxldmVsKSB7IC8vIGNyZWF0ZSBp bmRlbnRlZCBzZWN0aW9uIHBvcHVwIGxpc3QKCQlpZiAoJHNlZF9zZl9pbnN0YWxsZWQpIHsg Ly8gc2VkX3NlY3Rpb25zX2ZpZWxkcyBpbnN0YWxsZWQgJiBhY3RpdmUgc28gY2hlY2sgaWYg c3RhdGljIHNlY3Rpb24KCQkJJGRhdGEgPSBfc2VkX3NmX2dldF9kYXRhKCRuYW1lKTsKCQkJ JGRhdGFfYXJyYXkgPSBzZWRfbGliX2V4dHJhY3RfbmFtZV92YWx1ZV9wYWlycygkZGF0YSk7 CgkJCWlmIChpc3NldCgkZGF0YV9hcnJheVsnc3MnXSkpCgkJCQkkc3MgPSAkZGF0YV9hcnJh eVsnc3MnXTsgLy8gMCBvciAxIGZyb20gcHJlZnMKCQkJZWxzZQoJCQkJJHNzID0gMDsgLy8g bm90IGZvdW5kIGluIHByZWZzCgkJCWlmICgkc3MpIC8vIHN0YXRpYyBzZWN0aW9uIGFjY29y ZGluZyB0byBzZWRfc2VjdGlvbl9maWVsZHMKCQkJCWlmICghaGFzX3ByaXZzKCdzZWRfc2Yu c3RhdGljX3NlY3Rpb25zJykpIC8vIG9ubHkgUHVibGlzaGVyIHNob3VsZCBzZWUgc3RhdGlj IHNlY3Rpb25zCgkJCQkJY29udGludWU7IC8vIG9taXQgZnJvbSBzZWN0aW9uIHNlbGVjdCBs aXN0CgkJfQoJCXN0cmNhc2VjbXAoJG5hbWUsICRzZWxlY3Rfc2VjdGlvbikgPT0gMCA/CgkJ CSRzZWxlY3RlZCA9ICdzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6CgkJCSRzZWxlY3RlZCA9ICcn OwoJCSRvdXQgLj0gJzxvcHRpb24gdmFsdWU9IicuJG5hbWUuJyInLgoJCQkkc2VsZWN0ZWQu Jz4nLgoJCQlhZGlfbWVudV9zZWN0aW9uX2luZGVudCgkbGV2ZWwpLgoJCQkkbmFtZS4KCQkJ Jzwvb3B0aW9uPic7Cgl9Cgkkb3V0IC49ICc8L3NlbGVjdD4nOwoJcmV0dXJuICRvdXQ7Cn0K CmZ1bmN0aW9uIGFkaV9tZW51X3NlY3Rpb25fbGV2ZWxzKCRoaWVyYXJjaHksJGxldmVsKSB7 Ci8vIGNyZWF0ZSBsaXN0LCBpbmRleGVkIGJ5IHNlY3Rpb24sIG9mIGxldmVsIGluIGhpZXJh cmNoeSAodG9wID0gMSBldGMuKSAtIHVzZWQgaW4gYWRtaW4gZm9yIHBvcHVwCglzdGF0aWMg JHNlY3Rpb25fbGV2ZWxzOwoJZm9yZWFjaCAoJGhpZXJhcmNoeSBhcyAkaW5kZXggPT4gJHNl Y3Rpb24pCgkJaWYgKCEkc2VjdGlvblsnY2xvbmUnXSkgeyAvLyBpZ25vcmUgY2xvbmVzCgkJ CSRzZWN0aW9uX2xldmVsc1skaW5kZXhdID0gJGxldmVsOyAvLyBzZXQgbGV2ZWwgaW4gYXJy YXksIGluZGV4ZWQgYnkgc2VjdGlvbiBuYW1lCgkJCWFkaV9tZW51X3NlY3Rpb25fbGV2ZWxz KCRzZWN0aW9uWydjaGlsZCddLCRsZXZlbCsxKTsKCQl9CglyZXR1cm4gJHNlY3Rpb25fbGV2 ZWxzOwp9CgpmdW5jdGlvbiBhZGlfbWVudV9icmVhZGNydW1iKCRhdHRzKSB7Ci8vIDx0eHA6 YWRpX21lbnVfYnJlYWRjcnVtYiAvPiB0YWcKCWdsb2JhbCAkczsgLy8gdGhlIGN1cnJlbnQg c2VjdGlvbgoJZ2xvYmFsICRsYWJlbCwkc2VwYXJhdG9yLCRzZXAsJHRpdGxlLCRsaW5rLCRs aW5rY2xhc3MsJGluY2x1ZGVfZGVmYXVsdDsKCWdsb2JhbCAkc2VjdGlvbnMsJGV4Y2x1ZGUs JHNvcnQsJGRlZmF1bHRfZmlyc3QsJGRlZmF1bHRfdGl0bGUsJGluY2x1ZGVfZGVmYXVsdCwk bGlua19sYXN0LCRlc2NhcGU7Cgkkc2VjdGlvbnM9JGV4Y2x1ZGU9IiI7Cgkkc29ydD0iTlVM TCI7CgkkZGVmYXVsdF9maXJzdD0kaW5jbHVkZV9kZWZhdWx0PSIxIjsKCglleHRyYWN0KGxB dHRzKGFycmF5KAoJCSdsYWJlbCcJCQkJPT4gJ1lvdSBhcmUgaGVyZTogJywJLy8gc3RyaW5n IHRvIHByZXBlbmQgdG8gdGhlIG91dHB1dAoJCSdzZXBhcmF0b3InCQkJPT4gJyAmIzE4Nzsg JywJCQkvLyBzdHJpbmcgdG8gYmUgdXNlZCBhcyB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3Ig KGRlZmF1bHQ6ID4+KQoJCSdzZXAnCQkJCT0+ICcnLAkJCQkJLy8gZGVwcmVjYXRlZCAtIHNl ZSAnc2VwYXJhdG9yJwoJCSd0aXRsZScJCQkJPT4gJzEnLAkJCQkJLy8gZGlzcGxheSBzZWN0 aW9uIHRpdGxlcyBvciBub3QKCQknbGluaycJCQkJPT4gJzEnLAkJCQkJLy8gb3V0cHV0IHNl Y3Rpb25zIGFzIGxpbmtzIG9yIG5vdAoJCSdsaW5rY2xhc3MnCQkJPT4gJ25vbGluZScsCQkJ Ly8gY2xhc3MgZm9yIGJyZWFkY3J1bWIgbGlua3MKCQknbGlua19sYXN0JwkJCT0+ICcwJywJ CQkJCS8vIGRpc3BsYXkgbGFzdCBzZWN0aW9uIGNydW1iIGFzIGxpbmsgb3Igbm90CgkJJ2lu Y2x1ZGVfZGVmYXVsdCcJPT4gJzEnLAkJCQkJLy8gaW5jbHVkZSAnZGVmYXVsdCcgc2VjdGlv biBvciBub3QKCQknZGVmYXVsdF90aXRsZScJCT0+ICdIb21lJywJCQkJLy8gdGl0bGUgZm9y ICdkZWZhdWx0JyBzZWN0aW9uCgkJJ2VzY2FwZScJCQk9PiAnaHRtbCcsCQkJCS8vIGVzY2Fw ZSBIVE1MIGVudGl0aWVzIGluIHNlY3Rpb24gdGl0bGVzCgkpLCAkYXR0cykpOwoKCWlmICgh YWRpX21lbnVfaW5zdGFsbGVkKCkpIHJldHVybiAiPGVtPmFkaV9tZW51IG5vdCBpbnN0YWxs ZWQhPC9lbT4iOwoJJGRlZmF1bHRfdGl0bGUgPSB0cmltKCRkZWZhdWx0X3RpdGxlKTsKCWlm ICgkc2VwKSAkc2VwYXJhdG9yID0gJHNlcDsgLy8gZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ3Nl cCcsIHVzZSAnc2VwYXJhdG9yJyBpbnN0ZWFkCgoJZnVuY3Rpb24gYWRpX21lbnVfbGluZWFn ZSgkc2VjdGlvbl9saXN0LCRjaGlsZCkgewoJLy8gZGV0ZXJtaW5lIHRoZSBhbmNlc3RyeQoJ CWdsb2JhbCAkbGlua2NsYXNzLCRsYWJlbCwkdGl0bGUsJGluY2x1ZGVfZGVmYXVsdCwkc2Vw YXJhdG9yLCRzLCRsaW5rLCRsaW5rX2xhc3QsJGVzY2FwZTsKCQlnbG9iYWwgJGlzX2FydGlj bGVfbGlzdDsgLy8gVFhQIGdsb2JhbCB2YXJpYWJsZQoJCXN0YXRpYyAkY291bnQgPSAwOyAv LyBsb29wIGNvdW50ZXIKCQkkb3V0ID0gYXJyYXkoKTsKCQlpZiAoIWFycmF5X2tleV9leGlz dHMoJGNoaWxkLCAkc2VjdGlvbl9saXN0KSkgeyAvLyBib21iIG91dCBpZiBzZWN0aW9uIG5v dCBmb3VuZAoJCQkkb3V0W10gPSAnPyc7CgkJCXJldHVybiAkb3V0OwoJCX0KCQlpZiAoJHMg PT0gJGNoaWxkKSAkY291bnQrKzsKCQlpZiAoJGNvdW50ID4gMSkgeyAvLyBib21iIG91dCBp ZiBsb29wIGZvdW5kCgkJCSRvdXRbXSA9ICJXYXJuaW5nLCBzZWN0aW9uIGxvb3AgZm91bmQ6 ICI7CgkJCXJldHVybiAkb3V0OwoJCX0KCQlpZiAoJHNlY3Rpb25fbGlzdFskY2hpbGRdWydh ZGlfbWVudV9wYXJlbnQnXSkgLy8gaGFzIHBhcmVudAoJCQkkb3V0ID0gYXJyYXlfbWVyZ2Uo JG91dCxhZGlfbWVudV9saW5lYWdlKCRzZWN0aW9uX2xpc3QsJHNlY3Rpb25fbGlzdFskY2hp bGRdWydhZGlfbWVudV9wYXJlbnQnXSkpOwoJCWVsc2UgeyAvLyB0b3Agb2YgdGhlIGZvb2Qg Y2hhaW4KCQkJaWYgKCgkaW5jbHVkZV9kZWZhdWx0KSAmJiAoJGNoaWxkICE9ICdkZWZhdWx0 JykpIC8vIGlmIChpbmNsdWRlIGRlZmF1bHQpIEFORCAobm90IGF0ICdkZWZhdWx0JyB5ZXQp CgkJCQkkb3V0ID0gYXJyYXlfbWVyZ2UoJG91dCxhZGlfbWVudV9saW5lYWdlKCRzZWN0aW9u X2xpc3QsJ2RlZmF1bHQnKSk7IC8vIGRvIGV4dHJhLCAnZGVmYXVsdCcgaXRlcmF0aW9uCgkJ CWVsc2UKCQkJCSRvdXRbXSA9ICRsYWJlbDsgLy8gYWRkIHRoZSAiWW91IGFyZSBoZXJlIiBi aXQKCQl9CgkJJHRpdGxlID8gLy8gb3V0cHV0IHNlY3Rpb24ncyB0aXRsZSBvciBub3QKCQkJ JGNydW1iID0gJHNlY3Rpb25fbGlzdFskY2hpbGRdWyd0aXRsZSddIDoKCQkJJGNydW1iID0g JGNoaWxkOwoJCSRjcnVtYiA9IGFkaV9tZW51X2h0bWxlbnRpdGllcygkY3J1bWIpOwoJCWlm ICgoJHMgPT0gJGNoaWxkKSAmJiAoISRsaW5rX2xhc3QpICYmICgkaXNfYXJ0aWNsZV9saXN0 KSkgLy8gaWYgKGxhc3QgYnJlYWRjcnVtYikgQU5EIChsaW5rX2xhc3Q9MCkgQU5EIChub3Qg c2luZ2xlIGFydGljbGUpLCBzd2l0Y2ggb2ZmIGxpbmsgbW9kZQoJCQkkbGluayA9IEZBTFNF OwoJCSRsaW5rID8gLy8gb3V0cHV0IHNlY3Rpb24gYXMgYSBsaW5rIG9yIG5vdAoJCQkkb3V0 W10gPSB0YWcoJGNydW1iLCdhJywnIGNsYXNzPSInLiRsaW5rY2xhc3MuJyIgaHJlZj0iJy4k c2VjdGlvbl9saXN0WyRjaGlsZF1bJ3VybCddLiciJykgOgoJCQkkb3V0W10gPSAkY3J1bWI7 CgkJaWYgKCRzICE9ICRjaGlsZCkgJG91dFtdID0gJHNlcGFyYXRvcjsgLy8gYWRkIHNlcGFy YXRvciBpZiBub3QgbGFzdCBjcnVtYgoJCXJldHVybiAkb3V0OwoJfQoKCS8qIGFkaV9tZW51 X2JyZWFkY3J1bWIgLSBtYWluIHByb2NlZHVyZSAqLwoJJHNlY3Rpb25fbGlzdCA9IGFkaV9t ZW51X3NlY3Rpb25fbGlzdChUUlVFKTsKCSRvdXQgPSBhZGlfbWVudV9saW5lYWdlKCRzZWN0 aW9uX2xpc3QsJHMpOwoJcmV0dXJuIGpvaW4oJG91dCk7Cn0KCmZ1bmN0aW9uIGFkaV9tZW51 X2dldF9hcnRpY2xlX2F0dHIoJGFydGljbGVfYXR0cikgewovLyBwYXJzZSBhcnRpY2xlX2F0 dHIgYW5kIHJldHVybiBsaXN0LCBpbmRleGVkIGJ5IGF0dHJpYnV0ZSBuYW1lCi8vIGUuZy4g YXJ0aWNsZV9hdHRyPSd0aW1lPSJhbnkiIGxpbWl0PSI1IicKLy8gVEhFUkUgTVVTVCBCRSBB IEJFVFRFUiBXQVkhCgkkYXR0cl9saXN0ID0gcHJlZ19yZXBsYWNlKCIjKFthLXpfXSs9KSMi LCAiLFxcMSIsICRhcnRpY2xlX2F0dHIpIC4gIiwiOyAvLyBjcmVhdGVzIGUuZy4gJyx0aW1l PSJhbnkiLGxpbWl0PSI1IicKCSRhdHRyX2xpc3QgPSB0cmltKCRhdHRyX2xpc3QsJywnKTsg Ly8gc3RyaXAgZXh0cmFuZW91cyBjb21tYXMKCSRhdHRyX2xpc3QgPSBleHBsb2RlKCcsJywk YXR0cl9saXN0KTsgLy8gY29udmVydCB0byBhcnJheQoJJGF0dHJpYnV0ZXMgPSBhcnJheSgp OwoJZm9yZWFjaCAoJGF0dHJfbGlzdCBhcyAkaW5kZXggPT4gJGF0dHIpIHsKCQkkYSA9IGV4 cGxvZGUoJz0nLCRhdHRyKTsKCQlpZiAoY291bnQoJGEpID09IDIpIHsgLy8gc2FmZXR5IHZh bHZlCgkJCSRhdHRyaWJ1dGUgPSB0cmltKCRhWzBdKTsgLy8gcmVtb3ZlIHdoaXRlc3BhY2UK CQkJJHZhbHVlID0gdHJpbSgkYVsxXSk7IC8vIHJlbW92ZSB3aGl0ZXNwYWNlCgkJCSR2YWx1 ZSA9IHRyaW0oJHZhbHVlLCciJyk7IC8vIHJlbW92ZSBkb3VibGUgcXVvdGVzCgkJCSRhdHRy aWJ1dGVzWyRhdHRyaWJ1dGVdID0gJHZhbHVlOwoJCX0KCX0KCXJldHVybiAkYXR0cmlidXRl czsKfQoKZnVuY3Rpb24gYWRpX21lbnVfZ2V0X2FydGljbGVzKCRzZWN0aW9uX2FydGljbGVf bGlzdCkgewovLyBjcmVhdGUgbGlzdCBvZiBhcnRpY2xlcyBmcm9tIGRhdGFiYXNlLCBpbmRl eGVkIGJ5IHNlY3Rpb24gJiBzdWItaW5kZXhlZCBieSBhcnRpY2xlIGlkCi8vIG5vdGU6IGFy dGljbGUgaWQgaW5kZXggcHJlZml4ZWQgd2l0aCAiYWRpX21lbnVfIgovLyBzb3J0IHZhbHVl IHRha2VuIGZyb20gYXJ0aWNsZV9zb3J0IGF0dHJpYnV0ZQovLyBtdWNoIGNvZGUgdGFrZW4g ZnJvbSBwdWJsaXNoLnBocCBkb0FydGljbGVzKCkKCWdsb2JhbCAkYXJ0aWNsZV9saXN0LCRh cnRpY2xlX3NvcnQsJGFydGljbGVfYXR0cjsKCSRhcnRpY2xlX2xpc3QgPSBhcnJheSgpOwoJ JGF0dHJpYnV0ZXMgPSBhZGlfbWVudV9nZXRfYXJ0aWNsZV9hdHRyKCRhcnRpY2xlX2F0dHIp OwoJLy8gc2V0IGRlZmF1bHRzCgkkdGltZSA9ICIgYW5kIFBvc3RlZCA8PSBub3coKSI7Cgkk bGltaXQgPSAxMDsKCS8vIGFuYWx5c2UgYXJ0aWNsZSBhdHRyaWJ1dGVzCglmb3JlYWNoICgk YXR0cmlidXRlcyBhcyAkYXR0cmlidXRlID0+ICR2YWx1ZSkgewoJCXN3aXRjaCAoJGF0dHJp YnV0ZSkgewoJCQljYXNlICd0aW1lJzoKCQkJCXN3aXRjaCAoJHZhbHVlKSB7CgkJCQkJY2Fz ZSAnYW55JzoKCQkJCQkJJHRpbWUgPSAiIjsgYnJlYWs7CgkJCQkJY2FzZSAnZnV0dXJlJzoK CQkJCQkJJHRpbWUgPSAiIGFuZCBQb3N0ZWQgPiBub3coKSI7IGJyZWFrOwoJCQkJfQoJCQkJ YnJlYWs7CgkJCWNhc2UgJ2xpbWl0JzoKCQkJCWlmICghZW1wdHkoJHZhbHVlKSkgJGxpbWl0 ID0gJHZhbHVlOyBicmVhazsKCQl9Cgl9CgkvLyByZXRyaWV2ZSBhcnRpY2xlcyBmcm9tIGRh dGFiYXNlCglmb3JlYWNoICgkc2VjdGlvbl9hcnRpY2xlX2xpc3QgYXMgJGluZGV4ID0+ICR0 aGlzX3NlY3Rpb24pIHsKCQkkc2VjdGlvbiA9ICghJHRoaXNfc2VjdGlvbikgICA/ICcnIDog IiBhbmQgU2VjdGlvbiBJTiAoJyIuam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCR0aGlz X3NlY3Rpb24pKSkuIicpIjsKCQkvLyBjcmVhdGUgc29tZSBibGFua3Mgd2hlcmUgYXJ0aWNs ZSBhdHRyaWJ1dGVzIHNob3VsZCBiZQoJCSRzdGF0dXNxPSRzZWFyY2g9JGlkPSRjYXRlZ29y eT0kZXhjZXJwdGVkPSRtb250aD0kYXV0aG9yPSRrZXl3b3Jkcz0kY3VzdG9tPSRmcm9udHBh Z2U9Jyc7CgkJLy8gc2V0IHVwIFdIRVJFIGNsYXVzZQoJCSR3aGVyZSA9ICIxPTEiIC4gJHN0 YXR1c3EgLiAkdGltZSAuICRzZWFyY2ggLiAkaWQgLiAkY2F0ZWdvcnkgLiAkc2VjdGlvbiAu ICRleGNlcnB0ZWQgLiAkbW9udGggLiAkYXV0aG9yIC4gJGtleXdvcmRzIC4gJGN1c3RvbSAu ICRmcm9udHBhZ2U7CgkJJG1hdGNoID0gJyc7CgkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCJJ RCxUaXRsZSxQb3N0ZWQsU2VjdGlvbiIuJG1hdGNoLCd0ZXh0cGF0dGVybicsCgkJCSR3aGVy ZS4nIG9yZGVyIGJ5ICcuZG9TbGFzaCgkYXJ0aWNsZV9zb3J0KS4nIGxpbWl0ICcuaW50dmFs KCRsaW1pdCkpOwoJCXdoaWxlKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJCSRpZCA9ICdhZGlf bWVudV8nLiRhWydJRCddOyAvLyBjb252ZXJ0IHRvIHN0cmluZyAmIGFkZCB1bmlxdWUgcHJl Zml4IChpLmUuIElEIDIzIGJlY29tZXMgYWRpX21lbnVfMjMpCgkJCSRhcnRpY2xlX2xpc3Rb JHRoaXNfc2VjdGlvbl1bJGlkXVsndGl0bGUnXSA9ICRhWydUaXRsZSddOwoJCQkkYXJ0aWNs ZV9saXN0WyR0aGlzX3NlY3Rpb25dWyRpZF1bJ3VybCddID0gcGVybWxpbmt1cmwoJGEpOwoJ CQkkYXJ0aWNsZV9saXN0WyR0aGlzX3NlY3Rpb25dWyRpZF1bJ3NlY3Rpb24nXSA9IEZBTFNF OyAvLyBUUlVFPXNlY3Rpb24sIEZBTFNFPWFydGljbGUKCQkJJGFydGljbGVfbGlzdFskdGhp c19zZWN0aW9uXVskaWRdWydzb3J0J10gPSByYW5kKCk7IC8vIFRISVMgV0lMTCBUQUtFIFNP UlQgTlVNQkVSIEZST00gU09NRVdIRVJFIEVMU0UgRVZFTlRVQUxMWQoJCQkkYXJ0aWNsZV9s aXN0WyR0aGlzX3NlY3Rpb25dWyRpZF1bJ2Nsb25lJ10gPSBGQUxTRTsgLy8gZHVtbXkgZmls bGVyCgkJCSRhcnRpY2xlX2xpc3RbJHRoaXNfc2VjdGlvbl1bJGlkXVsncGFyZW50J10gPSAn JzsgLy8gZHVtbXkgZmlsbGVyCgkJCSRhcnRpY2xlX2xpc3RbJHRoaXNfc2VjdGlvbl1bJGlk XVsnY2hpbGQnXSA9IGFycmF5KCk7IC8vIGR1bW15IGZpbGxlcgoJCX0KCX0KCXJldHVybiAk YXJ0aWNsZV9saXN0Owp9CgpmdW5jdGlvbiBhZGlfbWVudV9zcGVha2luZ19ibG9jaygkbmFt ZSkgewovLyByZXRyaWV2ZSBzcGVjaWZpZWQgc2VjdGlvbidzIHN0aWNreSBhcnRpY2xlIGV4 Y2VycHQgZm9yIHRoZSBzcGVha2luZyBibG9jawoJZ2xvYmFsICRzcGVha2luZ19ibG9ja19m b3JtOwoJJHNiX3RhZ19hdHRyID0gJ3NlY3Rpb249IicuJG5hbWUuJyIgc3RhdHVzPSJzdGlj a3kiJzsKCWlmICgkc3BlYWtpbmdfYmxvY2tfZm9ybSkgLy8gdXNlIHNwZWNpZmllZCBmb3Jt CgkJJHNiX2FydGljbGVfdGFnID0gJzx0eHA6YXJ0aWNsZV9jdXN0b20gJy4kc2JfdGFnX2F0 dHIuJyBmb3JtPSInLiRzcGVha2luZ19ibG9ja19mb3JtLiciLz4nOwoJZWxzZSAvLyB1c2Ug ZGVmYXVsdCBmb3JtCgkJJHNiX2FydGljbGVfdGFnID0gJzx0eHA6YXJ0aWNsZV9jdXN0b20g Jy4kc2JfdGFnX2F0dHIuJz48dHhwOmV4Y2VycHQgLz48L3R4cDphcnRpY2xlX2N1c3RvbT4n OwoJJHNiX3RleHQgPSB0cmltKHBhcnNlKCRzYl9hcnRpY2xlX3RhZykpOwoJaWYgKCRzYl90 ZXh0KSAvLyBkb24ndCB3YW50IGVtcHR5IHNwYW5zCgkJcmV0dXJuICc8c3BhbiBjbGFzcz0i c3BlYWtpbmdfYmxvY2siPicuJHNiX3RleHQuJzwvc3Bhbj4nOwp9CgpmdW5jdGlvbiBhZGlf bWVudV9zb3J0X2hpZXJhcmNoeSgkYSwgJGIpIHsKLy8gY29tcGFyaXNvbiBmdW5jdGlvbiBm b3IgdWFzb3J0KCkKCWdsb2JhbCAkc29ydDsKCSR0aGlzX3NvcnQgPSAkc29ydDsgLy8gZG9u J3QgbWVzcyB3aXRoIGdsb2JhbCAkc29ydCEKCSRyZXZlcnNlID0gcHJlZ19tYXRjaCgiLyBk ZXNjL2kiLCR0aGlzX3NvcnQpOwoJJHRoaXNfc29ydCA9IHByZWdfcmVwbGFjZSgiLyBhc2Mv aSIsIiIsJHRoaXNfc29ydCk7IC8vIHJlbW92ZSAiIGFzYyIgTVVMVElQTEUgU1BBQ0VTISEh CgkkdGhpc19zb3J0ID0gcHJlZ19yZXBsYWNlKCIvIGRlc2MvaSIsIiIsJHRoaXNfc29ydCk7 IC8vIHJlbW92ZSAiIGRlc2MiIE1VTFRJUExFIFNQQUNFUyEhIQoJaWYgKHN0cmNhc2VjbXAo JHRoaXNfc29ydCwndGl0bGUnKSA9PSAwKQogICAgCSRyZXZlcnNlID8KCQkJJHJlcyA9IHN0 cmNtcCgkYlsidGl0bGUiXSwgJGFbInRpdGxlIl0pIDoKCQkJJHJlcyA9IHN0cmNtcCgkYVsi dGl0bGUiXSwgJGJbInRpdGxlIl0pOwoJZWxzZSBpZiAoc3RyY2FzZWNtcCgkdGhpc19zb3J0 LCdhZGlfbWVudV9zb3J0JykgPT0gMCkKICAgIAkkcmVzID0gc3RyY21wKCRhWyJzb3J0Il0s ICRiWyJzb3J0Il0pOwoJZWxzZSAvLyBubyBzb3J0IChpLmUuIGRhdGFiYXNlIG9yZGVyKQog ICAgCSRyZXMgPSAwOwoJcmV0dXJuICRyZXM7Cn0KCmZ1bmN0aW9uIGFkaV9tZW51X2hpZXJh cmNoeSgkc2VjdGlvbl9saXN0LCR0aGlzX3NlY3Rpb24sJGNsb25lKSB7Ci8vIGNyZWF0ZSAk aGllcmFyY2h5LCBpbmRleGVkIGJ5IHNlY3Rpb24vYXJ0aWNsZSBJRCwgdXNpbmcgaW5mb3Jt YXRpb24gZnJvbSAkc2VjdGlvbl9saXN0CglnbG9iYWwgJGNsb25lX3RpdGxlLCR0ZXN0LCRh cnRpY2xlX2xpc3QsJGFydGljbGVfcG9zaXRpb24sJGRlZmF1bHRfZmlyc3Q7CgkkaGllcmFy Y2h5ID0gYXJyYXkoKTsKCWlmICgoJGFydGljbGVfcG9zaXRpb24gPT0gJ2JlZm9yZScpICYm ICR0ZXN0KSB7IC8vIGluc2VydCBhcnRpY2xlcwoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCR0 aGlzX3NlY3Rpb24sJGFydGljbGVfbGlzdCkpCgkJCSRoaWVyYXJjaHkgPSAkYXJ0aWNsZV9s aXN0WyR0aGlzX3NlY3Rpb25dOwoJfQoJaWYgKCRjbG9uZSkgeyAvLyBjbG9uZSBwYXJlbnQg YXMgaXRzIGNoaWxkCgkJJGhpZXJhcmNoeVskdGhpc19zZWN0aW9uXVsndGl0bGUnXSA9CgkJ CSRzZWN0aW9uX2xpc3RbJHRoaXNfc2VjdGlvbl1bJ2FkaV9tZW51X3RpdGxlJ10gPwoJCQkJ JHNlY3Rpb25fbGlzdFskdGhpc19zZWN0aW9uXVsnYWRpX21lbnVfdGl0bGUnXSA6CgkJCQkk Y2xvbmVfdGl0bGU7IC8vIHVzZSBkZWZhdWx0IGNsb25lIHRpdGxlCgkJJGhpZXJhcmNoeVsk dGhpc19zZWN0aW9uXVsndXJsJ10gPSAkc2VjdGlvbl9saXN0WyR0aGlzX3NlY3Rpb25dWyd1 cmwnXTsKCQkkaGllcmFyY2h5WyR0aGlzX3NlY3Rpb25dWydzZWN0aW9uJ10gPSBUUlVFOyAv LyBJJ20gYSBzZWN0aW9uCgkJJGhpZXJhcmNoeVskdGhpc19zZWN0aW9uXVsnc29ydCddID0g cmFuZCgpOyAvLyBzb3J0IG51bWJlcgoJCSRoaWVyYXJjaHlbJHRoaXNfc2VjdGlvbl1bJ2Ns b25lJ10gPSBUUlVFOyAvLyBJJ20gYSBjbG9uZQoJCSRoaWVyYXJjaHlbJHRoaXNfc2VjdGlv bl1bJ3BhcmVudCddID0gJHRoaXNfc2VjdGlvbjsKCQkkaGllcmFyY2h5WyR0aGlzX3NlY3Rp b25dWydjaGlsZCddID0gYXJyYXkoKTsgLy8gdGhhdCdzIGVub3VnaCBpbmJyZWVkaW5nCgl9 Cglmb3JlYWNoICgkc2VjdGlvbl9saXN0IGFzICRpbmRleCA9PiAkc2VjdGlvbikgeyAvLyBm aW5kIGNoaWxkcmVuCgkJaWYgKCRzZWN0aW9uWydhZGlfbWVudV9wYXJlbnQnXSA9PSAkdGhp c19zZWN0aW9uKSB7CgkJCSRoaWVyYXJjaHlbJGluZGV4XVsndGl0bGUnXSA9ICRzZWN0aW9u Wyd0aXRsZSddOwoJCQkkaGllcmFyY2h5WyRpbmRleF1bJ3VybCddID0gJHNlY3Rpb25bJ3Vy bCddOwoJCQkkaGllcmFyY2h5WyRpbmRleF1bJ3NlY3Rpb24nXSA9IFRSVUU7IC8vIEknbSBh IHNlY3Rpb24KCQkJJGhpZXJhcmNoeVskaW5kZXhdWydzb3J0J10gPSAkc2VjdGlvblsnYWRp X21lbnVfc29ydCddOyAvLyBhZGlfbWVudSBhZG1pbiBzb3J0IG9yZGVyCgkJCSRoaWVyYXJj aHlbJGluZGV4XVsnY2xvbmUnXSA9IEZBTFNFOyAvLyBJJ20gbm90IGEgY2xvbmUKCQkJJGhp ZXJhcmNoeVskaW5kZXhdWydwYXJlbnQnXSA9ICRzZWN0aW9uWydhZGlfbWVudV9wYXJlbnQn XTsKCQkJJGhpZXJhcmNoeVskaW5kZXhdWydjaGlsZCddID0gYWRpX21lbnVfaGllcmFyY2h5 KCRzZWN0aW9uX2xpc3QsJGluZGV4LCRzZWN0aW9uWydhZGlfbWVudV9jbG9uZSddKTsKCQl9 Cgl9CgkvLyBpbnNlcnQgYXJ0aWNsZXMgQUZURVIgaWY6ICJhZnRlciIgT1IgImRvdmV0YWls IiBPUiBub3QgImJlZm9yZSIgKGkuZS4gZGVmYXVsdCB0byBhZnRlcikKCWlmICgoKCRhcnRp Y2xlX3Bvc2l0aW9uID09ICdhZnRlcicpIHx8ICgkYXJ0aWNsZV9wb3NpdGlvbiA9PSAnZG92 ZXRhaWwnKSB8fCAoISgkYXJ0aWNsZV9wb3NpdGlvbiA9PSAnYmVmb3JlJykpKSAmJiAkdGVz dCkgewoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCR0aGlzX3NlY3Rpb24sJGFydGljbGVfbGlz dCkpCgkJCSRoaWVyYXJjaHkgPSBhcnJheV9tZXJnZSgkaGllcmFyY2h5LCRhcnRpY2xlX2xp c3RbJHRoaXNfc2VjdGlvbl0pOwoJCWlmICgkYXJ0aWNsZV9wb3NpdGlvbiA9PSAnZG92ZXRh aWwnKSB7IC8vIHNvcnQgY3VycmVudCBsZXZlbCBvZiBoaWVyYXJjaHkgKHNlY3Rpb25zIEFO RCBhcnRpY2xlcykKCQkJdWFzb3J0KCRoaWVyYXJjaHksICJhZGlfbWVudV9zb3J0X2hpZXJh cmNoeSIpOwoJCQlpZiAoJGRlZmF1bHRfZmlyc3QpIHsgLy8gcmVzdG9yZSBkZWZhdWx0IHNl Y3Rpb24gdG8gaXRzIHJpZ2h0ZnVsIHBsYWNlCgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygn ZGVmYXVsdCcsJGhpZXJhcmNoeSkpIHsgLy8gZGVmYXVsdCBzZWN0aW9uIGluIGN1cnJlbnQg bGV2ZWwKCQkJCQkkcmVtZW1iZXJbJ2RlZmF1bHQnXSA9ICRoaWVyYXJjaHlbJ2RlZmF1bHQn XTsgLy8gcmVtZW1iZXIgJ2RlZmF1bHQnIGVsZW1lbnQKCQkJCQl1bnNldCgkaGllcmFyY2h5 WydkZWZhdWx0J10pOyAvLyByZW1vdmUgJ2RlZmF1bHQnIGVsZW1lbnQKCQkJCQkkaGllcmFy Y2h5ID0gYXJyYXlfbWVyZ2UoJHJlbWVtYmVyLCAkaGllcmFyY2h5KTsgLy8gam9pbiB0b2dl dGhlciwgJ2RlZmF1bHQnIG5vdyBhdCBiZWdpbm5pbmcKCQkJCX0KCQkJfQoJCX0KCX0KCXJl dHVybiAkaGllcmFyY2h5Owp9CgpmdW5jdGlvbiBhZGlfbWVudV9wcnVuZSgkb2xkX2hpZXJh cmNoeSwkaW5jbHVkZV9saXN0KSB7Ci8vIHJlbW92ZSBzZWN0aW9ucyBmcm9tIHRoZSBoaWVy YXJjaHkgdGhhdCBhcmUgbm90IG9uIHRoZSBpbmNsdWRlIGxpc3QgKCsgaW5jbHVkZV9wYXJl bnQgJiBpbmNsdWRlX2NoaWxkbGVzcykKCWdsb2JhbCAkaW5jbHVkZV9wYXJlbnQsJGluY2x1 ZGVfY2hpbGRsZXNzOwoJJGhpZXJhcmNoeSA9IGFycmF5KCk7Cglmb3JlYWNoICgkb2xkX2hp ZXJhcmNoeSBhcyAkaW5kZXggPT4gJHNlY3Rpb24pIHsKCQlpZiAoYXJyYXlfc2VhcmNoKCRp bmRleCwgJGluY2x1ZGVfbGlzdCkgIT09IEZBTFNFKSB7IC8vIGNvcHkgc2VjdGlvbi9jaGls ZHJlbiBidXQgbG9vayBubyBmdXJ0aGVyCgkJCWlmICghZW1wdHkoJHNlY3Rpb25bJ2NoaWxk J10pICYmICghJGluY2x1ZGVfcGFyZW50KSkgLy8gY29weSBjaGlsZHJlbiBvbmx5CgkJCQkk aGllcmFyY2h5ICs9ICRzZWN0aW9uWydjaGlsZCddOwoJCQllbHNlIGlmICgoJGluY2x1ZGVf cGFyZW50KSB8fCAoJGluY2x1ZGVfY2hpbGRsZXNzKSkgLy8gY29weSBzZWN0aW9uICgmIGNo aWxkcmVuKQoJCQkJJGhpZXJhcmNoeVskaW5kZXhdID0gJHNlY3Rpb247CgkJfQoJCWVsc2Ug aWYgKCFlbXB0eSgkc2VjdGlvblsnY2hpbGQnXSkpIC8vIGRlbHZlIGRlZXBlciBpbnRvIGhp ZXJhcmNoeQoJCQkkaGllcmFyY2h5ICs9IGFkaV9tZW51X3BydW5lKCRzZWN0aW9uWydjaGls ZCddLCRpbmNsdWRlX2xpc3QpOwoJfQoJcmV0dXJuICRoaWVyYXJjaHk7Cn0KCmZ1bmN0aW9u IGFkaV9tZW51X2Rlc2NlbmRlbnRzKCRoaWVyYXJjaHksJHBhcmVudCkgewovLyBjcmVhdGUg bGlzdCBvZiBkZXNjZW5kZW50cywgaW5kZXhlZCBieSBzZWN0aW9uL2FydGljbGUgSUQKCWds b2JhbCAkZGVzY2VuZGVudF9saXN0OwoJZm9yZWFjaCAoJGhpZXJhcmNoeSBhcyAkaW5kZXgg PT4gJHNlY3Rpb24pIHsKCQkvLyBhZGQgY2hpbGQgdG8gcGFyZW50J3MgbGlzdAoJCSRkZXNj ZW5kZW50X2xpc3RbJHBhcmVudF1bXSA9ICRpbmRleDsKCQlpZiAoJHNlY3Rpb25bJ2NoaWxk J10pIHsgLy8gZm91bmQgc29tZSBncmFuZGNoaWxkcmVuCgkJCS8vIGZvbGxvdyB0aGUgZmFt aWx5IHRyZWUKCQkJYWRpX21lbnVfZGVzY2VuZGVudHMoJHNlY3Rpb25bJ2NoaWxkJ10sJGlu ZGV4KTsKCQkJLy8gYWRkIGNoaWxkJ3MgZGVzY2VuZGVudHMgdG8gcGFyZW50J3MgbGlzdAoJ CQkkZGVzY2VuZGVudF9saXN0WyRwYXJlbnRdID0gYXJyYXlfbWVyZ2UoJGRlc2NlbmRlbnRf bGlzdFskcGFyZW50XSwkZGVzY2VuZGVudF9saXN0WyRpbmRleF0pOwoJCX0KCQllbHNlIC8v IGNyZWF0ZSBlbXB0eSBsaXN0IGZvciB0aGUgY2hpbGRsZXNzCgkJCSRkZXNjZW5kZW50X2xp c3RbJGluZGV4XSA9IGFycmF5KCk7Cgl9CglyZXR1cm4gJGRlc2NlbmRlbnRfbGlzdDsKfQoK ZnVuY3Rpb24gYWRpX21lbnVfZmluZF9hbmNlc3RvcigkbGV2ZWwpIHsKCWdsb2JhbCAkZGVz Y2VuZGVudF9saXN0LCRzZWN0aW9uX2xldmVscywkcywkZGVidWc7CgkkZm91bmQgPSAnJzsK CWZvcmVhY2ggKCRkZXNjZW5kZW50X2xpc3QgYXMgJGluZGV4ID0+ICRsaXN0KSB7CgkJJGlu ZGV4ID09ICdhZGlfbWVudV9yb290JyA/IC8vIHNwZWNpYWwgY2FzZQoJCQkkdGhpc19sZXZl bCA9IDAgOgoJCQkkdGhpc19sZXZlbCA9ICRzZWN0aW9uX2xldmVsc1skaW5kZXhdOwoJCWlm IChhcnJheV9zZWFyY2goJHMsJGxpc3QpICE9PSBGQUxTRSkgewoJCQlpZiAoJGxldmVsID09 ICR0aGlzX2xldmVsKSB7CgkJCQkkZm91bmQgPSAkaW5kZXg7CgkJCX0KCQl9Cgl9CglyZXR1 cm4gJGZvdW5kOwp9CgpmdW5jdGlvbiBhZGlfbWVudV9tYXJrdXAoJGhpZXJhcmNoeSwkbGV2 ZWwpIHsKLy8gb3V0cHV0IDx1bD4vPGxpPiBtYXJrdXAgZnJvbSBnaXZlbiAkaGllcmFyY2h5 CglnbG9iYWwgJG1lbnVfaWQsJHBhcmVudF9jbGFzcywkYWN0aXZlX2NsYXNzLCRzLCRjbGFz cywkbGlua19zcGFuLCRsaXN0X2lkLCRsaXN0X2lkX3ByZWZpeCwkYWN0aXZlX2xpX2NsYXNz LCRhcnRpY2xlcywkaW5jbHVkZV9jaGlsZHJlbiwkYWN0aXZlX3BhcmVudCwkbGlzdF9zcGFu LCRhY3RpdmVfYW5jZXN0b3JzLCRkZXNjZW5kZW50X2xpc3QsJGZpcnN0X2NsYXNzLCRsYXN0 X2NsYXNzLCRsaXN0X3ByZWZpeCwkcHJlZml4X2NsYXNzLCRzdXBwcmVzc191cmwsJHRlc3Qs JGFydGljbGVfY2xhc3MsJHByZXRleHQsJGFjdGl2ZV9hcnRpY2xlX2NsYXNzLCRzcGVha2lu Z19ibG9jaywkbGFiZWwsJGxhYmVsdGFnLCRsYWJlbF9jbGFzcywkbGFiZWxfaWQ7Cgkkb3V0 ID0gYXJyYXkoKTsKCSRjc3NfaWQgPSAkY3NzX2NsYXNzID0gJyc7CglpZiAoISRsZXZlbCkg eyAvLyBzZXQgSFRNTCBJRCAmIENTUyBjbGFzcyBvbiB0b3AgbGV2ZWwgPHVsPiBvbmx5CgkJ aWYgKCRtZW51X2lkKSAkY3NzX2lkID0gJyBpZD0iJy4kbWVudV9pZC4nIic7CgkJaWYgKCRj bGFzcykgJGNzc19jbGFzcyA9ICcgY2xhc3M9IicuJGNsYXNzLiciJzsKCQlpZiAoKCRsYWJl bCkgJiYgIWVtcHR5KCRoaWVyYXJjaHkpKQoJCQkkbGFiZWx0YWcgPwoJCQkJJG91dFtdID0g ZG9UYWcoJGxhYmVsLCRsYWJlbHRhZywkbGFiZWxfY2xhc3MsJycsJGxhYmVsX2lkKSA6CgkJ CQkkb3V0W10gPSAkbGFiZWw7Cgl9CglpZiAoIWVtcHR5KCRoaWVyYXJjaHkpKSAvLyBzdXBw cmVzcyA8dWw+IGlmIGVtcHR5IGhpZXJhcmNoeQoJCSRvdXRbXSA9ICc8dWwnLiRjc3NfaWQu JGNzc19jbGFzcy4nPic7CgkvLyBnZXQgbGlzdCBvZiBzZWN0aW9uIG5hbWVzIGZyb20gJGhp ZXJhcmNoeSBhbmQgZGV0ZXJtaW5lIGZpcnN0ICYgbGFzdAoJJGtleXMgPSBhcnJheV9rZXlz KCRoaWVyYXJjaHkpOwoJJGZpcnN0X3NlY3Rpb24gPSByZXNldCgka2V5cyk7CgkkbGFzdF9z ZWN0aW9uID0gZW5kKCRrZXlzKTsKCWZvcmVhY2ggKCRoaWVyYXJjaHkgYXMgJGluZGV4ID0+ ICRzZWN0aW9uKSB7CgkJJHBhcmVudCA9ICFlbXB0eSgkaGllcmFyY2h5WyRpbmRleF1bJ2No aWxkJ10pOwoJCSRsaV9jbGFzc19saXN0ID0gJyc7CgkJaWYgKCRwYXJlbnQgJiYgJGluY2x1 ZGVfY2hpbGRyZW4pICAvLyBub3QgYSBwYXJlbnQgaWYgbm90IGluY2x1ZGluZyB0aGUgY2hp bGRyZW4KCQkJJGxpX2NsYXNzX2xpc3QgLj0gJyAnLiRwYXJlbnRfY2xhc3M7CgkJJGFjdGl2 ZV9hcnRpY2xlID0gRkFMU0U7CgkJaWYgKCEkc2VjdGlvblsnc2VjdGlvbiddKSB7IC8vICRz ZWN0aW9uIGlzIGFjdHVhbGx5IGFuIGFydGljbGUKCQkJJGxpX2NsYXNzX2xpc3QgLj0gJyAn LiRhcnRpY2xlX2NsYXNzOwoJCQkkYXJ0aWNsZV9pZCA9IHByZWdfcmVwbGFjZSgnL2FkaV9t ZW51Xy8nLCcnLCRpbmRleCk7CgkJCSRhY3RpdmVfYXJ0aWNsZSA9ICgkYXJ0aWNsZV9pZCA9 PSAkcHJldGV4dFsnaWQnXSk7CgkJfQoJCSR0aXRsZSA9IGFkaV9tZW51X2h0bWxlbnRpdGll cygkaGllcmFyY2h5WyRpbmRleF1bJ3RpdGxlJ10pOwoJCSR1cmwgPSAkaGllcmFyY2h5WyRp bmRleF1bJ3VybCddOyAvLyBhbHRob3VnaCBVUkwgbWF5IGdldCBzdXBwcmVzc2VkIGxhdGVy IC4uLgoJCSRjbG9uZSA9ICRoaWVyYXJjaHlbJGluZGV4XVsnY2xvbmUnXTsKCQkkZmlyc3Qg PSAoJGluZGV4ID09ICRmaXJzdF9zZWN0aW9uKSAmJiAkZmlyc3RfY2xhc3M7IC8vIG9ubHkg ZmxhZyBmaXJzdCBzZWN0aW9uIGlmIHJlcXVpcmVkCgkJJGxhc3QgPSAoJGluZGV4ID09ICRs YXN0X3NlY3Rpb24pICYmICRsYXN0X2NsYXNzOyAvLyBvbmx5IGZsYWcgbGFzdCBzZWN0aW9u IGlmIHJlcXVpcmVkCgkJJGxpbmtfc3BhbiA/CgkJCSRsaW5rX2NvbnRlbnQgPSAnPHNwYW4+ Jy4kdGl0bGUuJzwvc3Bhbj4nIDoKCQkJJGxpbmtfY29udGVudCA9ICR0aXRsZTsKCQlpZiAo JHNwZWFraW5nX2Jsb2NrKQoJCQkkbGlua19jb250ZW50ID0gJGxpbmtfY29udGVudC5hZGlf bWVudV9zcGVha2luZ19ibG9jaygkaW5kZXgpOwoJCSRjbG9uZSA/IC8vIHNlY3Rpb24gaXMg YSBjbG9uZSwgc28gbWFrZSBJRCB1bmlxdWUKCQkJJGNsb25lX3N1ZmZpeCA9ICdfY2xvbmUn IDoKCQkJJGNsb25lX3N1ZmZpeCA9ICcnOwoJCSRsaXN0X2lkID8KCQkJJGxpX2lkID0gJyBp ZD0iJy4kbGlzdF9pZF9wcmVmaXguJGluZGV4LiRjbG9uZV9zdWZmaXguJyInIDoKCQkJJGxp X2lkID0gJyc7CgkJLy8gZGV0ZXJtaW5lIGFjdGl2ZSA8bGk+IGNsYXNzCgkJJGFjdGl2ZV9s aSA9ICgkYWN0aXZlX2xpX2NsYXNzICYmIChzdHJjYXNlY21wKCRzLCAkaW5kZXgpID09IDAp KTsgLy8gdGhpcyBpcyB0aGUgYWN0aXZlIHNlY3Rpb24KCQkkYWN0aXZlX2xpID0gJGFjdGl2 ZV9saSB8fCAoJGFjdGl2ZV9saV9jbGFzcyAmJiAkYWN0aXZlX3BhcmVudCAmJiBhcnJheV9r ZXlfZXhpc3RzKCRzLCRoaWVyYXJjaHlbJGluZGV4XVsnY2hpbGQnXSkpOyAvLyBwYXJlbnQg b2YgYWN0aXZlIHNlY3Rpb24KCQkkYWN0aXZlX2xpID0gJGFjdGl2ZV9saSB8fCAoJGFjdGl2 ZV9saV9jbGFzcyAmJiAkYWN0aXZlX2FuY2VzdG9ycyAmJiAoYXJyYXlfc2VhcmNoKCRzLCRk ZXNjZW5kZW50X2xpc3RbJGluZGV4XSkgIT09IEZBTFNFKSk7IC8vIGFuY2VzdG9yIG9mIGFj dGl2ZSBzZWN0aW9uCgkJJGFjdGl2ZV9saSA9ICRhY3RpdmVfbGkgfHwgKCRhY3RpdmVfbGlf Y2xhc3MgJiYgJGFjdGl2ZV9hcnRpY2xlKTsgLy8gYWN0aXZlIGFydGljbGUKCQlpZiAoJGFj dGl2ZV9saSkgJGxpX2NsYXNzX2xpc3QgLj0gJyAnLiRhY3RpdmVfbGlfY2xhc3M7CgkJLy9p ZiAoJGhpZXJhcmNoeVskaW5kZXhdWydzZWN0aW9uJ10pICRsaV9jbGFzc19saXN0IC49ICcg c2VjdGlvbl9jbGFzcyc7IC8vIFRlc3RpbmcgLi4uIHRlc3RpbmcKCQkkYXJ0aWNsZV9saXN0 ID0gJyc7CgkJJGFydGljbGVfcGFyZW50ID0gRkFMU0U7IC8vIE5PVCBORUVERUQgSU4gTkVX IFNZU1RFTTogJFBBUkVOVCBXT1JLUyBGT1IgU0VDVElPTiAmIEFSVElDTEUgUEFSRU5UUwoJ CWlmICghJHBhcmVudCAmJiAkYXJ0aWNsZXMgJiYgISR0ZXN0KSAvLyBub3QgYSBzZWN0aW9u IHBhcmVudCBzbyBjaGVjayBmb3IgYXJ0aWNsZXMgaW4gYWR2YW5jZQoJCQlpZiAoISRjbG9u ZSkgeyAvLyBidXQgZG9uJ3Qgd2FudCBkdXBsaWNhdGVzCgkJCQkkYXJ0aWNsZV9saXN0ID0g YWRpX21lbnVfYXJ0aWNsZXMoJGluZGV4LCd1bCcpOwoJCQkJaWYgKCRhcnRpY2xlX2xpc3Qg IT0gIiIpIHsgLy8gYXJ0aWNsZXMgZm91bmQsIHNvIGFkZCBwYXJlbnQgY2xhc3MgKGkuZS4g YXJ0aWNsZSBwYXJlbnQpCgkJCQkJJGxpX2NsYXNzX2xpc3QgLj0gJyAnLiRwYXJlbnRfY2xh c3M7CgkJCQkJJGFydGljbGVfcGFyZW50ID0gVFJVRTsKCQkJCX0KCQkJfQoJCS8vIE5FRUQg TkVXIFdBWSBPRiBJREVOVElGWUlORyBBUlRJQ0xFIFBBUkVOVCEhCgkJaWYgKCRwYXJlbnQg fHwgJGFydGljbGVfcGFyZW50KSAvLyBzdXBwcmVzcyBVUkwgb24gcGFyZW50cyBvbmx5CgkJ CXN3aXRjaCAoJHN1cHByZXNzX3VybCkgewoJCQkJY2FzZSAnYWxsJzoKCQkJCQkkdXJsID0g JyMnOyBicmVhazsKCQkJCWNhc2UgJ3RvcCc6CgkJCQkJaWYgKCEkbGV2ZWwpICR1cmwgPSAn Iyc7IGJyZWFrOwoJCQkJLypjYXNlICdzZWN0aW9uJzoKCQkJCQlpZiAoJHBhcmVudCkgJHVy bCA9ICcjJzsgYnJlYWs7CgkJCQljYXNlICdhcnRpY2xlJzoKCQkJCQlpZiAoJGFydGljbGVf cGFyZW50KSAkdXJsID0gJyMnOyBicmVhazsqLwoJCQkJZGVmYXVsdDoKCQkJCQkvKiBkbyBu b3RoaW5nICovIGJyZWFrOwoJCQl9CgkJaWYgKCRmaXJzdCkgJGxpX2NsYXNzX2xpc3QgLj0g JyAnLiRmaXJzdF9jbGFzczsKCQlpZiAoJGxhc3QpICRsaV9jbGFzc19saXN0IC49ICcgJy4k bGFzdF9jbGFzczsKCQkkbGlfY2xhc3NfbGlzdCA/CgkJCSRjc3NfY2xhc3MgPSAnIGNsYXNz PSInLnRyaW0oJGxpX2NsYXNzX2xpc3QpLiciJyA6CgkJCSRjc3NfY2xhc3MgPSAnJzsKCQkk b3V0W10gPSAnPGxpJy4kbGlfaWQuJGNzc19jbGFzcy4nPic7CgkJLy8gZGV0ZXJtaW5lIGFj dGl2ZSA8YT4gY2xhc3MKCQkkYWN0aXZlID0gKCRhY3RpdmVfY2xhc3MgJiYgKDAgPT0gc3Ry Y2FzZWNtcCgkcywgJGluZGV4KSkpOyAvLyB0aGlzIGlzIHRoZSBhY3RpdmUgc2VjdGlvbgoJ CSRhY3RpdmUgPSAkYWN0aXZlIHx8ICgkYWN0aXZlX2NsYXNzICYmICRhY3RpdmVfcGFyZW50 ICYmIGFycmF5X2tleV9leGlzdHMoJHMsJGhpZXJhcmNoeVskaW5kZXhdWydjaGlsZCddKSk7 IC8vIHBhcmVudCBvZiBhY3RpdmUgc2VjdGlvbgoJCSRhY3RpdmUgPSAkYWN0aXZlIHx8ICgk YWN0aXZlX2NsYXNzICYmICRhY3RpdmVfYW5jZXN0b3JzICYmIChhcnJheV9zZWFyY2goJHMs JGRlc2NlbmRlbnRfbGlzdFskaW5kZXhdKSAhPT0gRkFMU0UpKTsgLy8gYW5jZXN0b3Igb2Yg YWN0aXZlIHNlY3Rpb24KCQkkYWN0aXZlID0gJGFjdGl2ZSB8fCAoJGFjdGl2ZV9jbGFzcyAm JiAkYWN0aXZlX2FydGljbGUpOyAvLyBhY3RpdmUgYXJ0aWNsZQoJCWlmICgkbGlzdF9zcGFu KSAkb3V0W10gPSAnPHNwYW4+JzsKCQlpZiAoJGxpc3RfcHJlZml4KSAkb3V0W10gPSAnPHNw YW4gY2xhc3M9IicuJHByZWZpeF9jbGFzcy4nIj4nLiRsaXN0X3ByZWZpeC4nPC9zcGFuPic7 CgkJJG91dFtdID0gdGFnKCRsaW5rX2NvbnRlbnQsJ2EnLCgkYWN0aXZlID8gJyBjbGFzcz0i Jy4kYWN0aXZlX2NsYXNzLiciJyA6ICcnKS4nIGhyZWY9IicuJHVybC4nIicpOwoJCWlmICgk bGlzdF9zcGFuKSAkb3V0W10gPSAnPC9zcGFuPic7CgkJaWYgKCRwYXJlbnQgJiYgJGluY2x1 ZGVfY2hpbGRyZW4pIC8vIGZpbmQgdGhlIGtpZHMgKGJ1dCBvbmx5IGlmIGluY2x1ZGVfY2hp bGRyZW49MSkKCQkJJG91dCA9IGFycmF5X21lcmdlKCRvdXQsYWRpX21lbnVfbWFya3VwKCRo aWVyYXJjaHlbJGluZGV4XVsnY2hpbGQnXSwkbGV2ZWwrMSkpOwoJCWVsc2UgaWYgKCRhcnRp Y2xlcyAmJiAhJHRlc3QpIC8vIG5vdCBhIHNlY3Rpb24gcGFyZW50IGJ1dCBhbiBhcnRpY2xl IHBhcmVudCBzbyBpbnNlcnQgYXJ0aWNsZXMgaGVyZQoJCQkkb3V0W10gPSAkYXJ0aWNsZV9s aXN0OwoJCSRvdXRbXSA9ICI8L2xpPiI7Cgl9CglpZiAoaXNzZXQoJGluZGV4KSAmJiAkYXJ0 aWNsZXMgJiYgISR0ZXN0KQoJLy8gYWJvdmUgY29uZGl0aW9uIHByZXZlbnRzIHRhZyBlcnJv cnMgd2l0aCBhdHRyaWJ1dGUgY29tYmluYXRpb25zIHRoYXQgcmVzdWx0IGluIG5vIHNlY3Rp b25zIGUuZy46CgkvLyAgIGluY2x1ZGVfcGFyZW50PSIwIiAmJiBzZWN0aW9ucz0iYWxsIGNo aWxkbGVzcyIgT1IKCS8vICAgc2VjdGlvbnM9Imxpc3QiICYmIGV4Y2x1ZGU9InNhbWUgbGlz dCIKCQlpZiAoJGhpZXJhcmNoeVskaW5kZXhdWydwYXJlbnQnXSAhPSAnJykgLy8gbGFzdCBz aWJsaW5nIHdhcyBhIGNoaWxkLCBzbyBjaGVjayBmb3IgcGFyZW50J3MgYXJ0aWNsZXMgaGVy ZQoJCQkkb3V0W10gPSBhZGlfbWVudV9hcnRpY2xlcygkaGllcmFyY2h5WyRpbmRleF1bJ3Bh cmVudCddLCcnKTsKCWlmICghZW1wdHkoJGhpZXJhcmNoeSkpIC8vIHN1cHByZXNzIDx1bD4g aWYgZW1wdHkgaGllcmFyY2h5CgkJJG91dFtdID0gIjwvdWw+IjsKCXJldHVybiAkb3V0Owp9 CgpmdW5jdGlvbiBhZGlfbWVudV9hcnRpY2xlcygkc2VjdGlvbiwkd3JhcHRhZykgewovLyBn ZW5lcmF0ZSBsaXN0IG9mIGFydGljbGVzL21hcmt1cCB1c2luZyA8dHhwOmFydGljbGVfY3Vz dG9tIC8+CglnbG9iYWwgJHMsJGFydGljbGVzLCRhcnRpY2xlX2F0dHIsJGFydGljbGVfZm9y bSwkc2VjdGlvbl9hcnRpY2xlX2xpc3QsJGFjdGl2ZV9hcnRpY2xlc19vbmx5OwoJaWYgKEB0 eHBpbnRlcmZhY2UgIT0gJ2FkbWluJykgeyAvLyBhcnRpY2xlcyBub3QgcmVsZXZlbnQgaW4g YWRtaW4gaW50ZXJmYWNlCgkJJGFsbG93ZWQgPSBhcnJheV9zZWFyY2goJHNlY3Rpb24sICRz ZWN0aW9uX2FydGljbGVfbGlzdCkgIT09IEZBTFNFOyAvLyBjaGVjayBpZiBhcnRpY2xlcyBh bGxvd2VkCgkJaWYgKCRhY3RpdmVfYXJ0aWNsZXNfb25seSkgLy8gdGhlbiBvbmx5IGFsbG93 IGFydGljbGVzIGlmIHNlY3Rpb24gaXMgYWN0aXZlCgkJCSRhbGxvd2VkICY9ICgkc2VjdGlv biA9PSAkcyk7CgkJaWYgKCEkYWxsb3dlZCkgcmV0dXJuICcnOwoJCSRhcnRpY2xlX2F0dHIg PT0gJycgPwoJCQkkYXR0ciA9ICcnIDoKCQkJJGF0dHIgPSAnICcuJGFydGljbGVfYXR0cjsK CQkkYXJ0aWNsZV9saXN0ID0gdHJpbShwYXJzZSgnPHR4cDphcnRpY2xlX2N1c3RvbSBzZWN0 aW9uPSInLiRzZWN0aW9uLiciJy4kYXR0ci4nIGZvcm09IicuJGFydGljbGVfZm9ybS4nIiAv PicpKTsKCQlpZiAoJGFydGljbGVfbGlzdCA9PSAiIikKCQkJcmV0dXJuICcnOwoJCWVsc2Ug Ly8gYXJ0aWNsZXMgZm91bmQKCQkJaWYgKCR3cmFwdGFnID09ICIiKQoJCQkJcmV0dXJuICRh cnRpY2xlX2xpc3Q7CgkJCWVsc2UKCQkJCXJldHVybiB0YWcoJGFydGljbGVfbGlzdCwkd3Jh cHRhZywnJyk7Cgl9Cn0KCmZ1bmN0aW9uIGFkaV9tZW51X3RyaW1fdmFsdWUoJiR2YWx1ZSkg ewovLyBhcnJheV93YWxrKCkgY2FsbGJhY2sgZnVuY3Rpb24KICAgICR2YWx1ZSA9IHRyaW0o JHZhbHVlKTsKfQoKZnVuY3Rpb24gYWRpX21lbnVfYXJyYXlfc3VidHJhY3QoJGFycmF5MSwk YXJyYXkyKSB7Ci8vIHZhbHVlcyBpbiBhcnJheTIgdGhhdCBhcmUgbm90IGluIGFycmF5MSBh cmUgcmVtb3ZlZAoJJG5ldyA9IGFycmF5KCk7CgkkY291bnQxID0gY291bnQoJGFycmF5MSk7 CgkkY291bnQyID0gY291bnQoJGFycmF5Mik7Cglmb3JlYWNoICgkYXJyYXkxIGFzICRpbmRl eDEgPT4gJHZhbHVlMSkgewoJCSRmb3VuZCA9IEZBTFNFOwoJCWZvcmVhY2ggKCRhcnJheTIg YXMgJGluZGV4MiA9PiAkdmFsdWUyKSB7CgkJCSRmb3VuZCA9ICR2YWx1ZTEgPT0gJHZhbHVl MjsKCQkJaWYgKCRmb3VuZCkgYnJlYWs7CgkJfQoJCSRmb3VuZCA/ICRmb3VuZCA9IEZBTFNF IDogJG5ld1tdID0gJHZhbHVlMTsKCX0KCXJldHVybiAkbmV3Owp9CgpmdW5jdGlvbiBhZGlf bWVudV9odG1sZW50aXRpZXMoJHN0cmluZykgewovLyBlc2NhcGUgc3VwcGxpZWQgc3RyaW5n IHVzaW5nOgovLyAJaHRtbGVudGl0aWVzIChBTEwgc3BlY2lhbCBjaGFyYWN0ZXJzIHRyYW5z bGF0ZWQpCi8vCW9yIGh0bWxzcGVjaWFsY2hhcnMgKG9ubHkgJiAiICcgPCA+IHRyYW5zbGF0 ZWQpCglnbG9iYWwgJGVzY2FwZTsKCWlmICgkZXNjYXBlID09ICdodG1sJykgJHN0cmluZyA9 IGh0bWxlbnRpdGllcygkc3RyaW5nKTsKCWlmICgkZXNjYXBlID09ICdodG1sc3BlY2lhbCcp ICRzdHJpbmcgPSBodG1sc3BlY2lhbGNoYXJzKCRzdHJpbmcpOwoJcmV0dXJuICRzdHJpbmc7 Cn0KCmZ1bmN0aW9uIGFkaV9tZW51KCRhdHRzKSB7Ci8vIDx0eHA6YWRpX21lbnUgLz4gdGFn CglnbG9iYWwgJHByZWZzLCRhbGxfc3FsX2ZpZWxkcywkcywkb3V0LCRzb3J0LCRtZW51X2lk LCRwYXJlbnRfY2xhc3MsJGFjdGl2ZV9jbGFzcywkZXhjbHVkZSwkc2VjdGlvbnMsJGluY2x1 ZGVfcGFyZW50LCRpbmNsdWRlX2NoaWxkbGVzcywkZGVmYXVsdF90aXRsZSwkZGVmYXVsdF9m aXJzdCwkY2xvbmVfdGl0bGUsJGNsYXNzLCRsaW5rX3NwYW4sJGxpc3RfaWQsJGxpc3RfaWRf cHJlZml4LCRhY3RpdmVfbGlfY2xhc3MsJGFydGljbGVzLCRhcnRpY2xlX2F0dHIsJHNlY3Rp b25fYXJ0aWNsZV9saXN0LCRpbmNsdWRlX2NoaWxkcmVuLCRhY3RpdmVfcGFyZW50LCRhY3Rp dmVfYXJ0aWNsZXNfb25seSwkbGlzdF9zcGFuLCRlc2NhcGUsJGFjdGl2ZV9hbmNlc3RvcnMs JGRlc2NlbmRlbnRfbGlzdCwkZmlyc3RfY2xhc3MsJGxhc3RfY2xhc3MsJGxpc3RfcHJlZml4 LCRwcmVmaXhfY2xhc3MsJHN1cHByZXNzX3VybCwkdGVzdCwkYXJ0aWNsZV9saXN0LCRhcnRp Y2xlX2NsYXNzLCRhcnRpY2xlX3Bvc2l0aW9uLCRhY3RpdmVfYXJ0aWNsZV9jbGFzcywkYXJ0 aWNsZV9zb3J0LCRjaGlsZHJlbl9vbmx5LCRzZWN0aW9uX2xldmVscywkc3BlYWtpbmdfYmxv Y2ssJHNwZWFraW5nX2Jsb2NrX2Zvcm0sJGxhYmVsLCRsYWJlbHRhZywkbGFiZWxfY2xhc3Ms JGxhYmVsX2lkOwoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2FjdGl2ZV9jbGFzcycJCT0+ ICdhY3RpdmVfY2xhc3MnLAkvLyBDU1MgY2xhc3MgZm9yIGN1cnJlbnQgc2VjdGlvbiAoPGE+ KQoJCSdhY3RpdmVfbGlfY2xhc3MnCT0+ICcnLAkJCQkvLyBDU1MgY2xhc3MgZm9yIGN1cnJl bnQgc2VjdGlvbiAoPGxpPikKCQknYWN0aXZlX3BhcmVudCcJCT0+ICcwJywJCQkJLy8gc2V0 IGFjdGl2ZSBjbGFzcyBvbiBwYXJlbnQgb2YgY3VycmVudCBzZWN0aW9uCgkJJ2FjdGl2ZV9h bmNlc3RvcnMnCT0+ICcwJywJCQkJLy8gc2V0IGFjdGl2ZSBjbGFzcyBvbiBhbGwgYW5jZXN0 b3JzIG9mIGN1cnJlbnQgc2VjdGlvbgoJCSdjbGFzcycJCQkJPT4gJ3NlY3Rpb25fbGlzdCcs CS8vIENTUyBjbGFzcyBmb3IgdG9wIGxldmVsIDx1bD4KCQknaW5jbHVkZV9kZWZhdWx0Jwk9 PiAnMScsCQkJCS8vIGluY2x1ZGUgJ2RlZmF1bHQnIHNlY3Rpb24KCQknZGVmYXVsdF90aXRs ZScJCT0+ICdIb21lJywJCQkvLyB0aXRsZSBmb3IgJ2RlZmF1bHQnIHNlY3Rpb24KCQknZXNj YXBlJwkJCT0+ICdodG1sJywJCQkvLyBlc2NhcGUgSFRNTCBlbnRpdGllcyBpbiBzZWN0aW9u IHRpdGxlcwoJCSdleGNsdWRlJwkJCT0+ICcnLAkJCQkvLyBsaXN0IG9mIHNlY3Rpb25zIHRv IGJlIGV4Y2x1ZGVkCgkJJ3NlY3Rpb25zJwkJCT0+ICcnLAkJCQkvLyBleGNsdXNpdmUgbGlz dCBvZiBzZWN0aW9ucyAoZGVmYXVsdCA9IGFsbCkKCQknaW5jbHVkZV9jdXJyZW50Jwk9PiAn MCcsCQkJCS8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgc2VjdGlvbiAodXNlZCB3aXRoIHNlY3Rp b25zPSIuLi4iKQoJCSdpbmNsdWRlX3BhcmVudCcJPT4gJzEnLAkJCQkvLyBvdXRwdXQgcGFy ZW50IG9mIGluY2x1ZGVkIHNlY3Rpb25zJyBjaGlsZHJlbgoJCSdpbmNsdWRlX2NoaWxkcmVu Jwk9PiAnMScsCQkJCS8vIG91dHB1dCBjaGlsZHJlbiBhcyB3ZWxsIGFzIHBhcmVudHMKCQkn aW5jbHVkZV9jaGlsZGxlc3MnCT0+ICcwJywJCQkJLy8gb3V0cHV0IGNoaWxkbGVzcyBzZWN0 aW9uCgkJLy8nY2hpbGRyZW5fb25seScJCT0+ICcwJywJCQkJLy8gdXNlZCBpbnRlcm5hbGx5 IChpZiB1c2VkIGFzIGF0dHJpYnV0ZSA9IGluY2x1ZGVfcGFyZW50PSIwIikKCQknc3ViX21l bnVfbGV2ZWwnCT0+ICcwJywJCQkJLy8gdGhlIGxldmVsIG9mIHRoZSBzdWItbWVudSB0byBv dXRwdXQKCQknc29ydCcJCQkJPT4gJycsCQkJCS8vIHNlY3Rpb24gc29ydCAoZGVmYXVsdD1k YXRhYmFzZSBvcmRlcikKCQknbWVudV9pZCcJCQk9PiAnbWFpbm1lbnUnLAkJLy8gQ1NTIElE IGZvciB0b3AgbGV2ZWwgPHVsPgoJCSdwYXJlbnRfY2xhc3MnCQk9PiAnbWVudXBhcmVudCcs CS8vIENTUyBjbGFzcyBmb3IgcGFyZW50IDxsaT4KCQknZGVmYXVsdF9maXJzdCcJCT0+ICcx JywJCQkJLy8gc2VjdGlvbiAnZGVmYXVsdCcgdG8gYmUgbGlzdGVkIGZpcnN0CgkJJ2Nsb25l X3RpdGxlJwkJPT4gJ1N1bW1hcnknLAkJLy8gZGVmYXVsdCB0aXRsZSBvZiBjaGlsZCBjbG9u ZQoJCSdsaW5rX3NwYW4nCQkJPT4gJzAnLAkJCQkvLyA8c3Bhbj4gY29udGVudHMgb2YgbGlu ayBvciBub3QKCQknbGlzdF9pZCcJCQk9PiAnMCcsCQkJCS8vIG91dHB1dCA8bGk+IElEcyBv ciBub3QKCQknbGlzdF9pZF9wcmVmaXgnCT0+ICdtZW51XycsCQkJLy8gPGxpPiBJRCBwcmVm aXgKCQknbGlzdF9zcGFuJwkJCT0+ICcwJywJCQkJLy8gPHNwYW4+IGNvbnRlbnRzIG9mIDxs aT4gb3Igbm90CgkJJ2ZpcnN0X2NsYXNzJwkJPT4gJycsCQkJCS8vIENTUyBjbGFzcyBvbiBm aXJzdCA8bGk+IG9mIGxpc3QKCQknbGFzdF9jbGFzcycJCT0+ICcnLAkJCQkvLyBDU1MgY2xh c3Mgb24gbGFzdCA8bGk+IG9mIGxpc3QKCQknbGlzdF9wcmVmaXgnCQk9PiAnJywJCQkJLy8g cHJlZml4IGFkZGVkIHRvIG1lbnUgbGlzdCBpdGVtcwoJCSdwcmVmaXhfY2xhc3MnCQk9PiAn bWVudV9wcmVmaXgnLAkvLyBjbGFzcyBhZGRlZCB0byA8c3Bhbj4gYXJvdW5kIHByZWZpeGVz CgkJJ3N1cHByZXNzX3VybCcJCT0+ICcwJywJCQkJLy8gc2V0IFVSTCB0byAiIyIgb24gc2Vj dGlvbiBsaW5rcwoJCSdzcGVha2luZ19ibG9jaycJPT4gJzAnLAkJCQkvLyBlbmFibGUgPHNw YW4+c3BlYWtpbmcgLi4uIGJsb2NrPC9zcGFuPgoJCSdzcGVha2luZ19ibG9ja19mb3JtJyA9 PiAnJywJCQkvLyBhbHRlcm5hdGl2ZSBmb3JtIGZvciBzcGVha2luZyBibG9jawoJCSd3cmFw dGFnJwkJCT0+ICcnLAkJCQkvLyB3cmFwIGEgdGFnIGFyb3VuZCA8dWw+CgkJJ3dyYXB0YWdf Y2xhc3MnCQk9PiAnbWVudV93cmFwcGVyJywJLy8gY2xhc3MgZm9yIHdyYXB0YWcKCQknd3Jh cHRhZ19pZCcJCT0+ICcnLAkJCQkvLyBpZCBmb3Igd3JhcHRhZwoJCSdsYWJlbCcJCQkJPT4g JycsCQkJCS8vIGxhYmVsIHN0cmluZyB0byBwcmVjZWRlIG1lbnUKCQknbGFiZWx0YWcnCQkJ PT4gJycsCQkJCS8vIHRhZyB0byB3cmFwIGFyb3VuZCBsYWJlbAoJCSdsYWJlbF9jbGFzcycJ CT0+ICdtZW51X2xhYmVsJywJLy8gQ1NTIGNsYXNzIGZvciBsYWJlbCdzIHRhZwoJCSdsYWJl bF9pZCcJCQk9PiAnJywJCQkJLy8gSFRNTCBJRCBmb3IgbGFiZWwncyB0YWcKCQknYXJ0aWNs ZXMnCQkJPT4gJzAnLAkJCQkvLyBpbmNsdWRlIGFydGljbGVzIGluIG1lbnUKCQknYXJ0aWNs ZV9jbGFzcycJCT0+ICdtZW51X2FydGljbGUnLAkvLyBDU1MgY2xhc3Mgb24gPGxpPiBjb250 YWluaW5nIGFydGljbGUgbGluawoJCSdhcnRpY2xlX2F0dHInCQk9PiAnJywJCQkJLy8gY29t bWEgc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBhcnRpY2xlX2N1c3RvbSBhdHRyaWJ1 dGVzCgkJJ2FydGljbGVfZXhjbHVkZScJPT4gJycsCQkJCS8vIGxpc3Qgb2Ygc2VjdGlvbnMg bm90IHRvIGhhdmUgYXJ0aWNsZXMKCQknYXJ0aWNsZV9pbmNsdWRlJwk9PiAnJywJCQkJLy8g ZXhjbHVzaXZlIGxpc3Qgb2Ygc2VjdGlvbnMgdG8gaGF2ZSBhcnRpY2xlcyAoZGVmYXVsdCA9 IGFsbCkKCQknYXJ0aWNsZV9wb3NpdGlvbicJPT4gJ2FmdGVyJywJCQkvLyB3aGVyZSB0byBw bGFjZSBhcnRpY2xlczogYmVmb3JlLCBhZnRlciBvciBkb3ZldGFpbCB3aXRoIHNlY3Rpb25z CgkJJ2FydGljbGVfc29ydCcJCT0+ICcnLAkJCQkvLyBhcnRpY2xlIHNvcnQgKGRlZmF1bHQ9 ZGF0YWJhc2Ugb3JkZXIpCgkJJ2FjdGl2ZV9hcnRpY2xlc19vbmx5Jwk9PiAnJywJCQkvLyBs aXN0IGFydGljbGVzIGluIHRoZSBjdXJyZW50IGFjdGl2ZSBzZWN0aW9uIG9ubHkKCQkndGVz dCcJCQkJPT4gJzAnLAoJCSdkZWJ1ZycJCQkJPT4gJzAnCgkpLCAkYXR0cykpOwoKCWlmICgh YWRpX21lbnVfaW5zdGFsbGVkKCkpIHJldHVybiAiPGVtPmFkaV9tZW51IG5vdCBpbnN0YWxs ZWQhPC9lbT4iOwoJLy8gdGlkeSB1cCBzdXBwbGllZCBhdHRyaWJ1dGUgdmFsdWVzCglpZiAo JHN1Yl9tZW51X2xldmVsID09ICIxIikgLy8gc3dpdGNoIHRvIHN0YW5kYXJkIG1vZGUKCQkk c3ViX21lbnVfbGV2ZWwgPSAwOwoJLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlc2Nh cGluZyBkZWZhdWx0IHRpdGxlIGJlY2F1c2UgaXQncyBzdG9yZWQgaW4gJHNlY3Rpb25fbGlz dCAmIHByb2Nlc3NlZCBsYXRlcgoJJGNsb25lX3RpdGxlID0gdHJpbSgkY2xvbmVfdGl0bGUp OwoJaWYgKGVtcHR5KCRjbG9uZV90aXRsZSkpIC8vIGRvbid0IHdhbnQgaXQgdG8gYmUgZW1w dHkKCQkkY2xvbmVfdGl0bGUgPSAnU3VtbWFyeSc7CgkvLyBzZWN0aW9uIHNvcnQKCSRzb3J0 ID0gdHJpbSgkc29ydCk7IC8vIE15U1FMIGVycm9yIGlmIHNvcnQgPSAiICIKCWVtcHR5KCRz b3J0KSA/ICRzb3J0ID0gJ05VTEwnIDogJHNvcnQgPSBkb1NsYXNoKCRzb3J0KTsgLy8gPSBk YXRhYmFzZSBvcmRlciBieSBkZWZhdWx0CgkvLyBhcnRpY2xlIHNvcnQKCSRhcnRpY2xlX3Nv cnQgPSB0cmltKCRhcnRpY2xlX3NvcnQpOyAvLyBNeVNRTCBlcnJvciBpZiBzb3J0ID0gIiAi CgllbXB0eSgkYXJ0aWNsZV9zb3J0KSA/ICRhcnRpY2xlX3NvcnQgPSAnTlVMTCcgOiAkYXJ0 aWNsZV9zb3J0ID0gZG9TbGFzaCgkYXJ0aWNsZV9zb3J0KTsgLy8gPSBkYXRhYmFzZSBvcmRl ciBieSBkZWZhdWx0CgoJLy8gZ2V0IHNlY3Rpb24gaW5mbyBmcm9tIGRhdGFiYXNlICh1c2Vz ICRzZWN0aW9ucyAmICRleGNsdWRlIGF0dHJpYnV0ZXMgYXQgdGhpcyBwb2ludCkKCSRzZWN0 aW9uX2xpc3QgPSBhZGlfbWVudV9zZWN0aW9uX2xpc3QoRkFMU0UpOwoKCS8vIHNldCB1cCBy ZXF1aXJlZCBzZWN0aW9ucyBmb3IgbGF0ZXIgcHJvY2Vzc2luZyBpbiBoaWVyYXJjaHkKCSRz ZWN0aW9ucyA9IHRyaW0oJHNlY3Rpb25zKTsKCWlmICgkaW5jbHVkZV9jdXJyZW50KSB7IC8v IGFkZCBjdXJyZW50IHNlY3Rpb24gdG8gbGlzdAoJCWVtcHR5KCRzZWN0aW9ucykgPyAkc2Vj dGlvbnMgPSAkcyA6ICRzZWN0aW9ucyA9ICRzZWN0aW9ucy4iLCRzIjsKCQkvLyBhZGQgY3Vy cmVudCBzZWN0aW9uJ3MgcGFyZW50IHRvIGxpc3QgKG90aGVyd2lzZSB3b24ndCBnZXQgc2li bGluZ3Mgd2hlbiBjaGlsZCBpcyBjdXJyZW50KQoJCWlmICghZW1wdHkoJHNlY3Rpb25fbGlz dFskc11bJ2FkaV9tZW51X3BhcmVudCddKSkKCQkJJHNlY3Rpb25zID0gJHNlY3Rpb25zLics Jy4kc2VjdGlvbl9saXN0WyRzXVsnYWRpX21lbnVfcGFyZW50J107Cgl9CglpZiAoIWVtcHR5 KCRzZWN0aW9ucykpIHsgLy8gc3BlY2lmaWMgc2VjdGlvbnMgKCYgdGhlaXIgY2hpbGRyZW4p IHNlbGVjdGVkCgkJJGluY2x1ZGVfbGlzdCA9IGV4cGxvZGUoIiwiLCRzZWN0aW9ucyk7CgkJ YXJyYXlfd2FsaygkaW5jbHVkZV9saXN0LCAnYWRpX21lbnVfdHJpbV92YWx1ZScpOyAvLyB0 cmltIHNwYWNlcyBhcm91bmQgc2VjdGlvbiBuYW1lcyBpbiBhcnJheQoJfQoJaWYgKCEkaW5j bHVkZV9kZWZhdWx0KSAvLyBhZGQgZGVmYXVsdCB0byBleGNsdWRlIGxpc3QKCQllbXB0eSgk ZXhjbHVkZSkgPyAkZXhjbHVkZSA9ICJkZWZhdWx0IiA6ICRleGNsdWRlIC49ICIsZGVmYXVs dCI7CgoJLy8gZG8gYXJ0aWNsZXMgYml0CglpZiAoJGFydGljbGVzKSB7CgkJLy8gc2VjdGlv bnMgdGhhdCBhcmUgYWxsb3dlZCBhcnRpY2xlcwoJCWlmIChlbXB0eSgkYXJ0aWNsZV9pbmNs dWRlKSkKCQkJJHNlY3Rpb25fYXJ0aWNsZV9pbmNsdWRlID0gYXJyYXlfa2V5cygkc2VjdGlv bl9saXN0KTsgLy8gYWxsIHNlY3Rpb25zCgkJZWxzZSB7CgkJCSRzZWN0aW9uX2FydGljbGVf aW5jbHVkZSA9IGV4cGxvZGUoIiwiLCRhcnRpY2xlX2luY2x1ZGUpOwoJCQlhcnJheV93YWxr KCRzZWN0aW9uX2FydGljbGVfaW5jbHVkZSwgJ2FkaV9tZW51X3RyaW1fdmFsdWUnKTsgLy8g dHJpbSBzcGFjZXMgYXJvdW5kIHNlY3Rpb24gbmFtZXMgaW4gYXJyYXkKCQl9CgkJLy8gc2Vj dGlvbnMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgYXJ0aWNsZXMKCQlpZiAoZW1wdHkoJGFydGlj bGVfZXhjbHVkZSkpCgkJCSRzZWN0aW9uX2FydGljbGVfZXhjbHVkZSA9IGFycmF5KCk7CgkJ ZWxzZSB7CgkJCSRzZWN0aW9uX2FydGljbGVfZXhjbHVkZSA9IGV4cGxvZGUoIiwiLCRhcnRp Y2xlX2V4Y2x1ZGUpOwoJCQlhcnJheV93YWxrKCRzZWN0aW9uX2FydGljbGVfZXhjbHVkZSwg J2FkaV9tZW51X3RyaW1fdmFsdWUnKTsgLy8gdHJpbSBzcGFjZXMgYXJvdW5kIHNlY3Rpb24g bmFtZXMgaW4gYXJyYXkKCQl9CgkJLy8gc2VjdGlvbnNfYXJ0aWNsZV9saXN0ID0gc2VjdGlv bl9hcnRpY2xlX2luY2x1ZGUgbWludXMgc2VjdGlvbl9hcnRpY2xlX2V4Y2x1ZGUKCQkkc2Vj dGlvbl9hcnRpY2xlX2xpc3QgPSBhZGlfbWVudV9hcnJheV9zdWJ0cmFjdCgkc2VjdGlvbl9h cnRpY2xlX2luY2x1ZGUsJHNlY3Rpb25fYXJ0aWNsZV9leGNsdWRlKTsKCQlpZiAoJHRlc3Qp ICRhcnRpY2xlX2xpc3QgPSBhZGlfbWVudV9nZXRfYXJ0aWNsZXMoJHNlY3Rpb25fYXJ0aWNs ZV9saXN0KTsKCQllbHNlICRhcnRpY2xlX2xpc3QgPSBhcnJheSgpOwoJfQoKCS8vIHNldCB1 cCBoaWVyYXJjaHkKCSRoaWVyYXJjaHkgPSAkb3JpZ2luYWxfaGllcmFyY2h5ID0gYWRpX21l bnVfaGllcmFyY2h5KCRzZWN0aW9uX2xpc3QsJycsMCk7CgoJLy8gZGVzY2VuZGVudCBsaXN0 CgkkZGVzY2VuZGVudF9saXN0ID0gYXJyYXkoKTsKCSRkZXNjZW5kZW50X2xpc3QgPSBhZGlf bWVudV9kZXNjZW5kZW50cygkaGllcmFyY2h5LCdhZGlfbWVudV9yb290Jyk7CgoJLy8gc3Vi LW1lbnVzCglpZiAoJHN1Yl9tZW51X2xldmVsKSB7CgkJJHNlY3Rpb25fbGV2ZWxzID0gYWRp X21lbnVfc2VjdGlvbl9sZXZlbHMoJGhpZXJhcmNoeSwxKTsgLy8gdG9wIGxldmVsID0gMSwg ZXRjCgkJLy8gVEhSRUUgc3ViLW1lbnUgc2NlbmFyaW9zCgkJaWYgKCRzZWN0aW9uX2xldmVs c1skc10gPT0gJHN1Yl9tZW51X2xldmVsKSB7IC8vIE9ORTogY3VycmVudCBzZWN0aW9uIGF0 IHJlcXVpcmVkIGxldmVsCgkJCSRpbmNsdWRlX2xpc3RbXSA9ICRzZWN0aW9uX2xpc3RbJHNd WydhZGlfbWVudV9wYXJlbnQnXTsgLy8gYWRkIGN1cnJlbnQncyBwYXJlbnQgdG8gbGlzdCB0 byBnZXQgc2libGluZ3MKCQkJJGNoaWxkcmVuX29ubHkgPSAiMSI7IC8vIGJ1dCBkb24ndCB3 YW50IGN1cnJlbnQgc2VjdGlvbidzIHBhcmVudCBpdHNlbGYKCQl9CgkJaWYgKCRzZWN0aW9u X2xldmVsc1skc10gPT0gKCRzdWJfbWVudV9sZXZlbCAtIDEpKSB7IC8vIFRXTzogY3VycmVu dCBzZWN0aW9ucycgY2hpbGRyZW4gYXQgcmVxdWlyZWQgbGV2ZWwKCQkJJGluY2x1ZGVfbGlz dFtdID0gJHM7IC8vIGFkZCBjdXJyZW50IHNlY3Rpb24gdG8gbGlzdCB0byBnZXQgY2hpbGRy ZW4KCQkJJGNoaWxkcmVuX29ubHkgPSAiMSI7IC8vIGJ1dCBkb24ndCB3YW50IGN1cnJlbnQg c2VjdGlvbiBpdHNlbGYKCQl9CgkJZWxzZSB7IC8vIFRIUkVFOiB0aGVyZSdyZSBhbmNlc3Rv cnMgYXQgcmVxdWlyZWQgbGV2ZWwKCQkJJGFuY2VzdG9yID0gYWRpX21lbnVfZmluZF9hbmNl c3Rvcigkc3ViX21lbnVfbGV2ZWwpOwoJCQlpZiAoIWVtcHR5KCRhbmNlc3RvcikpIHsKCQkJ CS8vIGFkZCBhbmNlc3RvcidzIHBhcmVudCB0byBsaXN0IHRvIGdldCBzaWJsaW5ncwoJCQkJ JGluY2x1ZGVfbGlzdFtdID0gJHNlY3Rpb25fbGlzdFthZGlfbWVudV9maW5kX2FuY2VzdG9y KCRzdWJfbWVudV9sZXZlbCldWydhZGlfbWVudV9wYXJlbnQnXTsKCQkJCSRjaGlsZHJlbl9v bmx5ID0gIjEiOyAvLyBkb24ndCB3YW50IGFuY2VzdG9yJ3MgcGFyZW50IGl0c2VsZgoJCQl9 CgkJCWVsc2UKCQkJCSRpbmNsdWRlX2xpc3RbXSA9IGFycmF5KCk7CgkJfQoJfQoKCS8vIHBy dW5lICYgbWFzc2FnZSBoaWVyYXJjaHkKCWlmIChlbXB0eSgkc2VjdGlvbnMpICYmICEkaW5j bHVkZV9wYXJlbnQpIC8vIG1ha2UgdXAgbGlzdCBvZiB0b3AgbGV2ZWwgc2VjdGlvbnMgKCYg Y2F0ZXIgZm9yIG9sZCBzdWItbWVudSBtb2RlKQoJCSRpbmNsdWRlX2xpc3QgPSBhcnJheV9r ZXlzKCRoaWVyYXJjaHkpOwoJaWYgKGlzc2V0KCRpbmNsdWRlX2xpc3QpKSB7IC8vIHBydW5l IGhpZXJhcmNoeQoJCWlmICgkY2hpbGRyZW5fb25seSkgJGluY2x1ZGVfcGFyZW50ID0gIjAi OwoJCSRoaWVyYXJjaHkgPSBhZGlfbWVudV9wcnVuZSgkaGllcmFyY2h5LCRpbmNsdWRlX2xp c3QpOwoJfQoKCS8vIERFQlVHCglpZiAoJGRlYnVnKSB7CgkJZWNobyAiU0VDVElPTlMgRlJP TSBEQVRBQkFTRSAoYWxsKTxici8+IjsKCQlkbXAoYWRpX21lbnVfZ2V0X3NlY3Rpb25zKCkp OwoJCWVjaG8gIlNFQ1RJT04gSU5DTFVERSBMSVNUIChhbGwgaWYgZW1wdHkpPGJyLz4iOwoJ CWlmIChpc3NldCgkaW5jbHVkZV9saXN0KSkgZG1wKCRpbmNsdWRlX2xpc3QpOyBlbHNlIGVj aG8gIjxici8+IjsKCQllY2hvICJTRUNUSU9OIEVYQ0xVREUgTElTVCAobm9uZSBpZiBlbXB0 eSk8YnIvPiI7CgkJaWYgKGlzc2V0KCRleGNsdWRlKSkgZG1wKCRleGNsdWRlKTsgZWxzZSBl Y2hvICI8YnIvPiI7CgkJZWNobyAiU0VDVElPTiBMSVNUPGJyLz4iOwoJCWRtcCgkc2VjdGlv bl9saXN0KTsKCQlpZiAoJGFydGljbGVzKSB7CgkJCWVjaG8gIlNFQ1RJT04gQVJUSUNMRSBJ TkNMVURFIExJU1Q8YnIvPiI7CgkJCWRtcCgkc2VjdGlvbl9hcnRpY2xlX2luY2x1ZGUpOwoJ CQllY2hvICJTRUNUSU9OIEFSVElDTEUgRVhDTFVERSBMSVNUPGJyLz4iOwoJCQlkbXAoJHNl Y3Rpb25fYXJ0aWNsZV9leGNsdWRlKTsKCQkJZWNobyAiU0VDVElPTiBBUlRJQ0xFIExJU1Qg KGluY2x1ZGUgbWludXMgZXhjbHVkZSk8YnIvPiI7CgkJCWRtcCgkc2VjdGlvbl9hcnRpY2xl X2xpc3QpOwoJCQlpZiAoJHRlc3QpIGVjaG8gIkFSVElDTEUgTElTVDxici8+IjsKCQkJaWYg KCR0ZXN0KSBkbXAoJGFydGljbGVfbGlzdCk7CgkJfQoJCWVsc2UKCQkJZWNobyAnKEFSVElD TEUgTU9ERSBOT1QgU0VMRUNURUQpPGJyLz48YnIvPic7CgkJZWNobyAiT1JJR0lOQUwgSElF UkFSQ0hZPGJyLz4iOwoJCWRtcCgkb3JpZ2luYWxfaGllcmFyY2h5KTsKCQlpZiAoaXNzZXQo JGluY2x1ZGVfbGlzdCkpIHsKCQkJZWNobyAiUFJVTkVEIEhJRVJBUkNIWTxici8+IjsKCQkJ ZG1wKCRoaWVyYXJjaHkpOwoJCX0KCQllbHNlCgkJCWVjaG8gJyhISUVSQVJDSFkgTk9UIFBS VU5FRCk8YnIvPjxici8+JzsKCQlpZiAoaXNzZXQoJHNlY3Rpb25fbGV2ZWxzKSkgewoJCQll Y2hvICJTRUNUSU9OIExFVkVMUzxici8+IjsKCQkJZG1wKCRzZWN0aW9uX2xldmVscyk7CgkJ fQoJCWVjaG8gIkRFU0NFTkRFTlQgTElTVDxici8+IjsKCQlkbXAoJGRlc2NlbmRlbnRfbGlz dCk7CgkJZWNobyAiVkFSSU9VUzxici8+PHByZT4iOwoJCWVjaG8gIkN1cnJlbnQgc2VjdGlv biA9ICRzPGJyLz4iOwoJCWVjaG8gIkN1cnJlbnQgc2VjdGlvbidzIGxldmVsID0gJHNlY3Rp b25fbGV2ZWxzWyRzXTxici8+IjsKCQllY2hvICc8L3ByZT4nOwoJCWVjaG8gIlNVUFBMSUVE IEFUVFJJQlVURVM8YnIvPiI7CgkJZG1wKCRhdHRzKTsKCQllY2hvICJBUlRJQ0xFIEFUVFJJ QlVURVM8YnIvPiI7CgkJZG1wKGFkaV9tZW51X2dldF9hcnRpY2xlX2F0dHIoJGFydGljbGVf YXR0cikpOwoJCWVjaG8gIlZFUlNJT05TPGJyLz4iOwoJCWVjaG8gJzxwcmU+JzsKCQkkdmVy c2lvbiA9IHNhZmVfZmllbGQoInZlcnNpb24iLCAidHhwX3BsdWdpbiIsICJuYW1lPSdhZGlf bWVudSciKTsKCQkkc3RhdHVzID0gc2FmZV9maWVsZCgic3RhdHVzIiwgInR4cF9wbHVnaW4i LCAibmFtZT0nYWRpX2NhdF9tZW51JyIpOy8vPz8/Pz8/Pz8/Pz8/CgkJZWNobyBfX0ZVTkNU SU9OX18uJzogJy4oZW1wdHkoJHZlcnNpb24pPydub3QgaW5zdGFsbGVkJzokdmVyc2lvbi4o JHN0YXR1cz8nIChhY3RpdmUpJzonIChub3QgYWN0aXZlKScpKS4nPGJyLz4nOwoJCWVjaG8g J1RYUDogJy4kcHJlZnNbJ3ZlcnNpb24nXS4nPGJyLz4nOwoJCWVjaG8gJ1BIUDogJy5waHB2 ZXJzaW9uKCkuJzxici8+JzsKCQllY2hvICdNeVNRTDogJy5teXNxbF9nZXRfc2VydmVyX2lu Zm8oKTsKCQllY2hvICc8L3ByZT4nOwoJfQoKCS8vIGdlbmVyYXRlIG1hcmt1cAoJJG91dCA9 IGFkaV9tZW51X21hcmt1cCgkaGllcmFyY2h5LDApOwoJJG91dCA9IHRyaW0oam9pbigkb3V0 KSk7CglpZiAoJG91dCAmJiAkd3JhcHRhZykgeyAvLyBhZGQgd3JhcHRhZyBzdHVmZgoJCSR3 cmFwX2F0dHIgPSAnJzsKCQlpZiAoJHdyYXB0YWdfaWQpICR3cmFwX2F0dHIgLj0gJyBpZD0i Jy4kd3JhcHRhZ19pZC4nIic7CgkJaWYgKCR3cmFwdGFnX2NsYXNzKSAkd3JhcF9hdHRyIC49 ICcgY2xhc3M9IicuJHdyYXB0YWdfY2xhc3MuJyInOwoJCSRvdXQgPSB0YWcoJG91dCwkd3Jh cHRhZywkd3JhcF9hdHRyKTsKCX0KCgkvLyBvdXRwdXQgbWFya3VwIHRvIHBhZ2UKCXJldHVy biAkb3V0Owp9CiI7czo4OiJoZWxwX3JhdyI7czoxNDg1MDoiaDEuICphZGlfbWVudSogLSBT ZWN0aW9uIGhpZXJhcmNoeSwgc2VjdGlvbiBtZW51IGFuZCBicmVhZGNydW1iIHRyYWlsCgpU aGlzIHBsdWdpbiBwcm92aWRlczoKCiogYSBuZXcgdGFiIHVuZGVyIFByZXNlbnRhdGlvbiwg dG8gc2V0IHVwIHRoZSBzZWN0aW9uIGhpZXJhcmNoeQoqIHR3byBuZXcgdGFnczoKKiogQDx0 eHA6YWRpX21lbnUgLz5AIHRvIG91dHB1dCB0aGUgc2VjdGlvbiBtZW51IG1hcmt1cAoqKiBA PHR4cDphZGlfbWVudV9icmVhZGNydW1iIC8+QCB0byBvdXRwdXQgYSBicmVhZGNydW1iIHRy YWlsCgpoMi4gKkluc3RhbGxhdGlvbioKCl9JbnN0YWxsYXRpb24gb2YgKmFkaV9tZW51KiB3 aWxsIGFkZCBzb21lIGNvbHVtbnMgdG8geW91ciBUZXh0cGF0dGVybiBkYXRhYmFzZS4gIFRo ZXNlIGNvbHVtbnMgYXJlIG5hbWVkIHdpdGggYW4gImFkaV9tZW51IiBwcmVmaXggc28gc2hv dWxkIG5vdCBpbnRlcmZlcmUgd2l0aCBhbnl0aGluZyBlbHNlLiAgVGhhdCBzYWlkLCBpZiB5 b3UgYXJlIG9mIGEgY2F1dGlvdXMgZnJhbWUgb2YgbWluZCB0aGVuIEkgY2FuIHRob3JvdWdo bHkgcmVjb21tZW5kICJyc3NfYWRtaW5fZGJfbWFuYWdlciI6aHR0cDovL2ZvcnVtLnRleHRw YXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEwMzk1IHRvIGRvIGRhdGFiYXNlIGJhY2t1 cHMgYmVmb3JlIGluc3RhbGxhdGlvbi5fCgpPbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVk IGFuZCBhY3RpdmF0ZWQsIGdvIHRvIHRoZSAqYWRpX21lbnUqIHRhYiB1bmRlciBQcmVzZW50 YXRpb24sIHNlbGVjdCBJbnN0YWxsIGFuZCBjbGljayB0aGUgIkRvIGFkbWluIiBidXR0b24u IEhlcmUgeW91IHdpbGwgZmluZCBhbiBVbmluc3RhbGwgb3B0aW9uIGFzIHdlbGwuCgpOZXh0 LCBzZWxlY3QgdGhlIEltcG9ydCBvcHRpb24gaWYgeW91IHdhbnQgdG8gY29weSBzZWN0aW9u IHBhcmVudCBzZXR0aW5ncyBmcm9tICpjbmtfc2VjdGlvbl90cmVlKi4KCkFzc2lnbiBwYXJl bnRzLCBzb3J0IG9yZGVyIGV0YyBhbmQgYWRkIHRoZSBAPHR4cDphZGlfbWVudSAvPkAgJiBA PHR4cDphZGlfbWVudV9icmVhZGNydW1iIC8+QCB0YWdzIHRvIHlvdXIgcGFnZXMgb3IgZm9y bXMuCgpTdHlsZSB0aGUgbWVudSB1c2luZyBDU1MuCgpoMi4gKkFkbWluIHRhYioKClVzZXJz IHdpdGggc3VmZmljaWVudCBwcml2aWxlZ2VzIHdpbGwgc2VlIHRoZSAqYWRpX21lbnUqIGFk bWluIHRhYiwgdW5kZXIgUHJlc2VudGF0aW9uLiAgVGhpcyBwcm92aWRlczoKCiogU2VjdGlv biBoaWVyYXJjaHkgLSBjYW4gYmUgY3JlYXRlZCBieSBhc3NpZ25pbmcgcGFyZW50cwoqIFNl Y3Rpb24gZXhjbHVzaW9uIC0gZGVmaW5lIHdoaWNoIHNlY3Rpb25zIHNob3VsZCBiZSBwZXJt YW5lbnRseSBleGNsdWRlZCBmcm9tIHRoZSByZW5kZXJlZCBzZWN0aW9uIG1lbnUgKHNlY3Rp b25zIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIHVzaW5nIGEgQDx0eHA6YWRpX21lbnUgLz5AIHRh ZyBhdHRyaWJ1dGUpCiogU29ydGluZyAtIHNwZWNpZnkgYSBjdXN0b20gc29ydCBvcmRlciwg aWYgcmVxdWlyZWQKKiBDbG9uaW5nIC0gc3BlY2lmeSB0aGF0IGEgc2VjdGlvbiBtdXN0IGFw cGVhciBhcyBhIGNoaWxkIGluIGl0cyBvd24gc3Vic2VjdGlvbiBsaXN0IChtb3JlIG9uIHRo YXQgYmVsb3cpCiogQWRtaW4gZnVuY3Rpb25zIC0gaW5zdGFsbCwgdW5pbnN0YWxsIGFuZCBp bXBvcnQKKiBBIHN1bW1hcnkgb2YgdGhlIGNvbmZpZ3VyZWQgc2VjdGlvbiBoaWVyYXJjaHkK ClRvb2x0aXBzIGFyZSBhdmFpbGFibGUgaGVyZSAtIGp1c3QgaG92ZXIgb3ZlciBhbnl0aGlu ZyB3aXRoIGEgZGFzaGVkIHVuZGVybGluZS4KCmgyLiAqQXJ0aWNsZXMqCgpOb3RlIHRoYXQg YSBmb3JtIGNhbGxlZCBfX2FkaV9tZW51X2FydGljbGVzX18gd2lsbCBiZSBhdXRvbWF0aWNh bGx5IGNyZWF0ZWQgd2hlbiB5b3UgaW5zdGFsbCAqYWRpX21lbnUqLiBJZiB0aGlzIGZvcm0g Z2V0cyBkZWxldGVkLCBzaW1wbHkgZ28gdG8gdGhlICphZGlfbWVudSogdGFiICYgaXQgd2ls bCBiZSBjcmVhdGVkIGFnYWluLiBBbHRlcm5hdGl2ZWx5LCBpZiB0aGlzIGZvcm0gaGFzIGJl ZW4gY2hhbmdlZCBhbmQgeW91IHdhbnQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCwgZGVs ZXRlIGl0ICYgZ28gdG8gdGhlICphZGlfbWVudSogdGFiLgoKVGhlIHN0YW5kYXJkIEA8dHhw OmFydGljbGVfY3VzdG9tIC8+QCB0YWcgaXMgdXNlZCB0byBsaXN0IHRoZSBhcnRpY2xlcyBp biB0aGUgc2VjdGlvbiBtZW51ICh3aGVuIEBhcnRpY2xlcz0iMSJAKSB1c2luZyB0aGUgX19h ZGlfbWVudV9hcnRpY2xlc19fIGZvcm0uIEFydGljbGVzIGFwcGVhciBfYWZ0ZXJfIHNlY3Rp b25zIGluIHRoZSBzYW1lIGxldmVsLgoKVG8gYWx0ZXIgdGhlIHdheSB0aGF0IHRoZSBhcnRp Y2xlcyBhcmUgbGlzdGVkLCB1c2UgdGhlIEBhcnRpY2xlX2F0dHJAIGF0dHJpYnV0ZSB0byBz cGVjaWZ5IHN0YW5kYXJkIEA8dHhwOmFydGljbGVfY3VzdG9tIC8+QCBhdHRyaWJ1dGVzLiBT ZWUgYmVsb3cgZm9yIGRldGFpbHMuCgpoMi4gKlN1Yi1tZW51cyoKCklmIHJlcXVpcmVkLCAq YWRpX21lbnUqIGNhbiBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlIG9uIGEgcGFnZS4gRm9yIGV4 YW1wbGUsIHRvIHJlbmRlciBhIHN1Yi1tZW51IHNlcGFyYXRlbHkgZnJvbSBhIHRvcC1sZXZl bCBtZW51IHlvdSBjb3VsZCB1c2U6CgpiYy4gPHR4cDphZGlfbWVudSBtZW51X2lkPSJ0b3Ai IGluY2x1ZGVfY2hpbGRyZW49IjAiIGFjdGl2ZV9hbmNlc3RvcnM9IjEiIC8+Cjx0eHA6YWRp X21lbnUgbWVudV9pZD0ic3ViIiBzdWJfbWVudV9sZXZlbD0iMiIgLz4KCkZvciB0aHJlZSB0 aWVycyBvZiBtZW51czoKCmJjLiA8dHhwOmFkaV9tZW51IG1lbnVfaWQ9InRvcCIgaW5jbHVk ZV9jaGlsZHJlbj0iMCIgYWN0aXZlX2FuY2VzdG9ycz0iMSIgLz4KPHR4cDphZGlfbWVudSBt ZW51X2lkPSJzdWIiIHN1Yl9tZW51X2xldmVsPSIyIiBpbmNsdWRlX2NoaWxkcmVuPSIwIiBh Y3RpdmVfYW5jZXN0b3JzPSIxIiAvPgo8dHhwOmFkaV9tZW51IG1lbnVfaWQ9InN1YnN1YiIg c3ViX21lbnVfbGV2ZWw9IjMiIC8+CgpOb3RlczoKCiogZm9yIHN0eWxpbmcgcHVycG9zZXMs IHlvdSBjYW4gdXNlIHRoZSBAbWVudV9pZEAgYXR0cmlidXRlIHRvIHNldCB1bmlxdWUgSUQn cyBvbiB0aGUgbWVudSBAPHVsPkAKKiBAc3ViX21lbnVfbGV2ZWxAIGlzIHNlY3Rpb24tc2Vu c2l0aXZlLCBzbyBzdWItbWVudXMgYXJlIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgYWN0aXZl IHNlY3Rpb24KKiBvbiB0aGUgdXBwZXIgbGV2ZWxzLCBAaW5jbHVkZV9jaGlsZHJlbj0iMCJA IHByZXZlbnRzIGNoaWxkIHNlY3Rpb25zIGZyb20gYmVpbmcgcmVuZGVyZWQKKiBvbiB0aGUg bG93ZXN0IHN1Yi1tZW51LCBhbGwgY2hpbGRyZW4gJiBncmFuZGNoaWxkcmVuIGFyZSByZW5k ZXJlZCAodW5sZXNzIGF0dHJpYnV0ZXMgc3BlY2lmeSBvdGhlcndpc2UpCiogQGFjdGl2ZV9h bmNlc3RvcnM9IjEiQCBlbmFibGVzIHRoZSAiYWN0aXZlX2NsYXNzIiBvbiB0aGUgdXBwZXIg bGV2ZWxzCgpUaGUgb3JpZ2luYWwgbWV0aG9kIG9mIHJlbmRlcmluZyBzdWItbWVudXMsIHdo aWNoIG9ubHkgcmVhbGx5IHdvcmtlZCBmb3Igc2Vjb25kIGxldmVsIHN1Yi1tZW51cywgaGFz IGJlZW4gZGVwcmVjYXRlZC4gSG93ZXZlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHks IF90aGUgYXNzb2NpYXRlZCBhdHRyaWJ1dGVzIGFuZCBmdW5jdGlvbmFsaXR5ICp3aWxsKiBi ZSBtYWludGFpbmVkLl8gU2VlICJ0aGUgZm9ydW0iOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVy bi5jb20vdmlld3RvcGljLnBocD9pZD0yNzc3OCBmb3IgZGV0YWlscy4KCmgyLiAqU3BlYWtp bmcgQmxvY2tzKgoKQSAic3BlYWtpbmcgYmxvY2siOmh0dHA6Ly93d3cuc21hc2hpbmdtYWdh emluZS5jb20vMjAwOC8wMi8yNi9uYXZpZ2F0aW9uLW1lbnVzLXRyZW5kcy1hbmQtZXhhbXBs ZXMvIGlzIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhZGRlZCB0byBtZW51IGl0ZW1z IHRvIGVuaGFuY2UgdXNhYmlsaXR5LiBXaGVuIHlvdSBzd2l0Y2ggb24gc3BlYWtpbmcgYmxv Y2tzIGluICphZGlfbWVudSogKEBzcGVha2luZ19ibG9jaz0iMSJAKSwgZWFjaCBzZWN0aW9u J3Mgc3RpY2t5IGFydGljbGUgZXhjZXJwdCBpcyBhZGRlZCBpbnRvIHRoZSBtZW51LCBlbmNs b3NlZCB3aXRoaW4gYSBAPHNwYW4+Li4uPC9zcGFuPkAgaW5zaWRlIHRoZSBAPGE+Li4uPC9h PkAgbGluay4KCk5vdGUgdGhhdCBiZWNhdXNlIEA8YT5AIGlzIGJ5IGRlZmF1bHQgYW4gaW5s aW5lIGVsZW1lbnQsIGJsb2NrIGVsZW1lbnRzIHN1Y2ggYXMgQDxwPkAgYXJlIG5vdCBhbGxv d2VkIHdpdGhpbi4gX0NvbnNlcXVlbnRseSB5b3Ugc2hvdWxkICJ0dXJuIG9mZiBUZXh0aWxl IjpodHRwOi8vdHhwdGlwcy5jb20vdHVybi1vZmYtdGV4dGlsZS1pbi15b3VyLWFydGljbGUg aW4gdGhlIGV4Y2VycHRfLgoKSW4gVGV4dHBhdHRlcm4gdmVyc2lvbnMgNC4wLjcgJiBhYm92 ZSwgdGhlIGRlZmF1bHQgc3BlYWtpbmcgYmxvY2sgZm9ybSBjb250YWlucyBAPHR4cDpleGNl cnB0IC8+QCwgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgYWRkZWQgbWFudWFsbHkuIElmIHlv dSB3YW50IHRvIG91dHB1dCBtb3JlIHRoYW4ganVzdCB0aGUgc3RpY2t5IGFydGljbGUgZXhj ZXJwdCwgZm9yIGV4YW1wbGUgdG8gaW5jbHVkZSBhbiBpbWFnZSwgdGhlbiBjcmVhdGUgYSBu ZXcgZm9ybSBjb250YWluaW5nIHRoZSByZXF1aXJlZCB0YWdzIGFuZCB1c2UgdGhlIEBzcGVh a2luZ19ibG9ja19mb3JtQCBhdHRyaWJ1dGUuCgpGb3Igb2xkZXIgdmVyc2lvbnMgb2YgVGV4 dHBhdHRlcm4sIHRvIGVtdWxhdGUgdGhlIGFib3ZlIGRlZmF1bHQgYmVoYXZpb3VyLCB5b3Ug c2hvdWxkIGNyZWF0ZSBhIG5ldyBhcnRpY2xlIGZvcm0gYW5kIHVzZSB0aGUgQHNwZWFraW5n X2Jsb2NrX2Zvcm1AIGF0dHJpYnV0ZSBpbiB0aGUgKmFkaV9tZW51KiB0YWcuCgpoMi4gKmFk aV9tZW51IC0gdGFnIHVzYWdlKgoKUGxhY2UgdGhlIEA8dHhwOmFkaV9tZW51IC8+QCB0YWcg d2hlcmV2ZXIgeW91IHdhbnQgdGhlIG1lbnUgdG8gYXBwZWFyLgoKaDIuICphZGlfbWVudSAt IHRhZyBhdHRyaWJ1dGVzKgoKQGNsYXNzPSJjbGFzcyBuYW1lIkAKCi0gY2xhc3MgYXBwbGll ZCB0byB0aGUgdG9wIGxldmVsIEA8dWw+QC4gRGVmYXVsdCA9ICJzZWN0aW9uX2xpc3QiLgoK QG1lbnVfaWQ9ImlkIG5hbWUiQAoKLSB0aGUgSUQgdG8gYmUgdXNlZCBvbiB0aGUgdG9wIGxl dmVsIEA8dWw+QC4gIERlZmF1bHQgPSAibWFpbm1lbnUiLgoKQGFjdGl2ZV9jbGFzcz0iY2xh c3MgbmFtZSJACgotIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGFjdGl2ZSBzZWN0aW9uIGxpbmsu IERlZmF1bHQgPSAiYWN0aXZlX2NsYXNzIi4KCkBhY3RpdmVfbGlfY2xhc3M9ImNsYXNzIG5h bWUiQAoKLSBjbGFzcyBhcHBsaWVkIHRvIHRoZSBhY3RpdmUgc2VjdGlvbiBAPGxpPkAgZWxl bWVudC4gRGVmYXVsdCA9ICIiIChubyBjbGFzcykuCgpAYWN0aXZlX3BhcmVudD0iYm9vbGVh biJACgotIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBpbW1lZGlhdGUgcGFyZW50IG9mIHRoZSBh Y3RpdmUgc2VjdGlvbiBzaG91bGQgYmUgbWFkZSAiYWN0aXZlIiBhbHNvLiBEZWZhdWx0ID0g IjAiIChObykuIElmIHN3aXRjaGVkIG9uIHRoZW4gQGFjdGl2ZV9jbGFzc0Agd2lsbCBiZSBh cHBsaWVkIHRvIHRoZSBwYXJlbnQncyBzZWN0aW9uIGxpbmsgYW5kLCBpZiBkZWZpbmVkLCBA YWN0aXZlX2xpX2NsYXNzQCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBhcmVudCdzIEA8bGk+ QC4KCkBhY3RpdmVfYW5jZXN0b3JzPSJib29sZWFuIkAKCi0gc3BlY2lmaWVzIHdoZXRoZXIg YWxsIGFuY2VzdG9ycyBvZiB0aGUgYWN0aXZlIHNlY3Rpb24gc2hvdWxkIGJlIG1hZGUgImFj dGl2ZSIuIERlZmF1bHQgPSAiMCIgKE5vKS4gSWYgc3dpdGNoZWQgb24gdGhlbiBAYWN0aXZl X2NsYXNzQCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGFuY2VzdG9yJ3Mgc2VjdGlvbiBsaW5r IGFuZCwgaWYgZGVmaW5lZCwgQGFjdGl2ZV9saV9jbGFzc0Agd2lsbCBiZSBhcHBsaWVkIHRv IHRoZSBhbmNlc3RvcidzIEA8bGk+QC4gX05vdGUgdGhhdCBwYXJlbnRzIGFyZSBhbmNlc3Rv cnMgdG9vLCBzbyBAYWN0aXZlX3BhcmVudD0iMSIgYWN0aXZlX2FuY2VzdG9ycz0iMSJAIGlz IHRoZSBzYW1lIGFzIEBhY3RpdmVfYW5jZXN0b3JzPSIxIkBfLgoKQHBhcmVudF9jbGFzcz0i Y2xhc3MgbmFtZSJACgotIHRoZSBjbGFzcyB0byBiZSB1c2VkIG9uIHNlY3Rpb24gQDxsaT5A IHRoYXQgYXJlIHBhcmVudHMuIERlZmF1bHQgPSAibWVudXBhcmVudCIuCgpAbGlua19zcGFu PSJib29sZWFuIkAKCi0gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBs aW5rcyBzaG91bGQgYmUgd3JhcHBlZCBpbiBhIHNwYW4sIGkuZS4gQDxhPjxzcGFuPi4uLjwv c3Bhbj48L2E+QC4gRGVmYXVsdCA9ICIwIiAoTm8pLgoKQGxpc3RfaWQ9ImJvb2xlYW4iQAoK LSBzcGVjaWZpZXMgd2hldGhlciB0aGUgQDxsaT5AIGVsZW1lbnRzIHNob3VsZCBoYXZlIHVu aXF1ZSBJRHMgYXBwbGllZC4gSURzIGFyZSBiYXNlZCBvbiB0aGUgc2VjdGlvbiBuYW1lcy4g RGVmYXVsdCA9ICIwIiAoTm8pLiBOb3RlIHRoYXQgY2xvbmVkIHNlY3Rpb24gSURzIHdpbGwg aGF2ZSBhIHN1ZmZpeCBvZiAiX2Nsb25lIiBhZGRlZC4KCkBsaXN0X2lkX3ByZWZpeD0idGV4 dCJACgotIHRoZSBwcmVmaXggdG8gYmUgdXNlZCBmb3IgdGhlIEA8bGk+QCBJRHMuIERlZmF1 bHQgPSAibWVudV8iLgoKQGxpc3Rfc3Bhbj0iYm9vbGVhbiJACgotIHNwZWNpZmllcyB3aGV0 aGVyIHRoZSBjb250ZW50cyBvZiB0aGUgQDxsaT5AIHNob3VsZCBiZSB3cmFwcGVkIGluIGEg c3BhbiwgaS5lLiBAPGxpPjxzcGFuPjxhPi4uLjwvYT48L3NwYW4+PC9saT5ALiBEZWZhdWx0 ID0gIjAiIChObykuCgpAbGlzdF9wcmVmaXg9InN0cmluZyJACgotIHN0cmluZyB0byBiZSB1 c2VkIGFzIGEgcHJlZml4LiBEZWZhdWx0ID0gIiIgKG5vIHByZWZpeCkuIF9Ob3RlOiBwcmVm aXggaXMgaW5zZXJ0ZWQgd2l0aGluIGl0cyBvd24gQDxzcGFuPkAgKGFuZCBAY2xhc3NAKV8u IEZvciBleGFtcGxlOgpAPGxpPjxzcGFuIGNsYXNzPSJtZW51X3ByZWZpeCI+UFJFRklYPC9z cGFuPjxhPi4uLjwvYT48L2xpPkAKSWYgQGxpbmtfc3BhbkAgYW5kIEBsaXN0X3NwYW5AIGFy ZSBhbHNvIHN3aXRjaGVkIG9uLCB0aGVuIHRoZSBtYXJrdXAgYmVjb21lczoKQDxsaT48c3Bh bj48c3BhbiBjbGFzcz0ibWVudV9wcmVmaXgiPlBSRUZJWDwvc3Bhbj48YT48c3Bhbj4uLi48 L3NwYW4+PC9hPjwvc3Bhbj48L2xpPkAKX1VzZSBpbiBjb25qdW5jdGlvbiB3aXRoIEBmaXJz dF9jbGFzc0AgYXR0cmlidXRlIHRvIHR1cm4gcHJlZml4IGludG8gYSBzZXBhcmF0b3IuXwoK QHByZWZpeF9jbGFzcz0iY2xhc3MgbmFtZSJACgotIGNsYXNzIGFkZGVkIHRvIHRoZSBsaXN0 IHByZWZpeCBAPHNwYW4+Li4uPC9zcGFuPkAuIERlZmF1bHQgPSAibWVudV9wcmVmaXgiLgoK QGZpcnN0X2NsYXNzPSJjbGFzcyBuYW1lIkAKCi0gdGhlIGNsYXNzIHRvIGJlIHVzZWQgb24g dGhlIF9maXJzdF8gc2VjdGlvbiBAPGxpPkAgd2l0aGluIGEgQDx1bD5ALiBEZWZhdWx0ID0g IiIgKG5vIGNsYXNzKS4gX05vdGUgdGhhdCB0aGlzIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhl IGZpcnN0IHNlY3Rpb24gb2YgZXZlcnkgbGV2ZWwgb2YgdGhlIG1lbnUuXwoKQGxhc3RfY2xh c3M9ImNsYXNzIG5hbWUiQAoKLSB0aGUgY2xhc3MgdG8gYmUgdXNlZCBvbiB0aGUgX2xhc3Rf IHNlY3Rpb24gQDxsaT5AIHdpdGhpbiBhIEA8dWw+QC4gRGVmYXVsdCA9ICIiIChubyBjbGFz cykuIF9Ob3RlIHRoYXQgdGhpcyBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSBsYXN0IHNlY3Rp b24gb2YgZXZlcnkgbGV2ZWwgb2YgdGhlIG1lbnUuXwoKQGluY2x1ZGVfZGVmYXVsdD0iYm9v bGVhbiJACgotIGluY2x1ZGUgJ2RlZmF1bHQnIHNlY3Rpb24gaW4gbWVudSBvciBub3QuIERl ZmF1bHQgPSAiMSIgKFllcykuCgpAZGVmYXVsdF90aXRsZT0idGV4dCJACgotIHRpdGxlIHRv IGJlIHVzZWQgZm9yIGRlZmF1bHQgc2VjdGlvbi4gRGVmYXVsdCA9ICJIb21lIi4KCkBlc2Nh cGU9Imh0bWwiQAoKLSBlc2NhcGUgSFRNTCBlbnRpdGllcyBpbiBzZWN0aW9uIHRpdGxlcy4g RGVmYXVsdCA9ICJodG1sIiAoZXNjYXBlIGFsbCBhcHBsaWNhYmxlIGNoYXJhY3RlcnMpLiAg VXNlIGVzY2FwZT0iaHRtbHNwZWNpYWwiIHRvIG9ubHkgY29udmVydCAmLCAiLCAnLCA8LCA+ OyBvciBlc2NhcGU9IiIgdG8gc3dpdGNoIG9mZi4KCkBkZWZhdWx0X2ZpcnN0PSJib29sZWFu IkAKCi0gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRlZmF1bHQgc2VjdGlvbiBzaG91bGQgYmUg bGlzdGVkIGZpcnN0LiBEZWZhdWx0ID0gIjEiIChZZXMpLgoKQGV4Y2x1ZGU9InNlY3Rpb24g bGlzdCJACgotIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHNlY3Rpb25zIHRvIGJlIGV4Y2x1 ZGVkIGZyb20gdGhlIG1lbnUuIERlZmF1bHQgPSBub25lLiBfVXNlIGlmIHlvdSB3YW50IHRv IGV4Y2x1ZGUgc2VjdGlvbnMgb3ZlciBhbmQgYWJvdmUgd2hhdCBoYXMgYWxyZWFkeSBiZWVu IGV4Y2x1ZGVkIGluIHRoZSBhZGlfbWVudSBhZG1pbiB0YWIuXwoKQHNlY3Rpb25zPSJzZWN0 aW9uIGxpc3QiQAoKLSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzZWN0aW9ucyAoJiB0aGVp ciBjaGlsZHJlbikgdG8gYmUgaW5jbHVkZWQgaW4gbWVudS4gRGVmYXVsdCA9IGFsbC4KCkBp bmNsdWRlX2N1cnJlbnQ9ImJvb2xlYW4iQAoKLSBzcGVjaWZpZXMgd2hldGhlciB0aGUgY3Vy cmVudCBzZWN0aW9uIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgc2VjdGlvbnMgbGlzdC4gRGVm YXVsdCA9ICIwIiAoTm8pLiAgTm90ZSB0aGF0IGlmIHRoZSBAc2VjdGlvbnNAIGF0dHJpYnV0 ZSBpcyBlbXB0eSB0aGVuIEBpbmNsdWRlX2N1cnJlbnQ9IjEiQCB3aWxsIHJlc3VsdCBpbiBf b25seV8gdGhlIGN1cnJlbnQgc2VjdGlvbiAoJiBwb3NzaWJseSBpdHMgY2hpbGRyZW4pIGJl aW5nIG91dHB1dC4KCkBpbmNsdWRlX2NoaWxkcmVuPSJib29sZWFuIkAKCi0gc3BlY2lmaWVz IHdoZXRoZXIgY2hpbGRyZW4gc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtZW51LiBEZWZh dWx0ID0gIjEiIChZZXMpLgoKQGluY2x1ZGVfcGFyZW50PSJib29sZWFuIkAKCi0gc3BlY2lm aWVzIHdoZXRoZXIgdG9wIGxldmVsIHNlY3Rpb25zIGFyZSBvdXRwdXQuIERlZmF1bHQgPSAi MSIgKFllcykuIF9Vc2UgaWYgeW91IHdhbnQgdG8gb3V0cHV0IHRoZSBjaGlsZHJlbiBvZiBh IHNlY3Rpb24gYnV0IG5vdCB0aGUgcGFyZW50IHNlY3Rpb24gaXRzZWxmLl8gQ2hpbGRsZXNz IHRvcCBsZXZlbCBzZWN0aW9ucyBhcmUgbm90IG91dHB1dCBpbiB0aGlzIGNhc2UgZWl0aGVy IChzZWUgQGluY2x1ZGVfY2hpbGRsZXNzQCBhdHRyaWJ1dGUpLgoKQGluY2x1ZGVfY2hpbGRs ZXNzPSJib29sZWFuIkAKCi0gb3ZlcnJpZGVzIHRoZSBAaW5jbHVkZV9wYXJlbnRAIGF0dHJp YnV0ZSBmb3IgY2hpbGRsZXNzIHRvcCBsZXZlbCBzZWN0aW9ucy4gRGVmYXVsdCA9ICIwIiAo Tm8pLiBfVXNlIGlmIHlvdSB3YW50IHRvIG91dHB1dCBzZWN0aW9ucyB0aGF0IGhhdmUgbm8g Y2hpbGRyZW4gYWxvbmcgd2l0aCB0aGUgY2hpbGRyZW4gb2Ygb3RoZXIgc2VjdGlvbnMuXwoK QHN1Yl9tZW51X2xldmVsPSJsZXZlbCJACgotIHRoZSBzdWItbWVudSBsZXZlbCB0byBiZSBv dXRwdXQsIHdoZXJlICJsZXZlbCIgaXMgMiBvciBtb3JlLiBEZWZhdWx0PSIwIiAoY29tcGxl dGUgbWVudSBnZW5lcmF0ZWQpLiBUaGlzIGF0dHJpYnV0ZSBpcyBzZWN0aW9uLXNlbnNpdGl2 ZSwgc28gc3ViLW1lbnVzIGFyZSBiYXNlZCBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWN0 aW9uLiBfTm90ZSB0aGF0IHRoZSBmaXJzdCBzdWItbWVudSBpcyBsZXZlbCAyLl8KCkBzb3J0 PSJzb3J0IHZhbHVlcyJACgotIHRoZSBzb3J0IG1ldGhvZCB0byBiZSB1c2VkIGZvciBzZWN0 aW9ucy4gRGVmYXVsdCA9IGRhdGFiYXNlIG9yZGVyIChpLmUuIHRoZSBvcmRlciBpbiB3aGlj aCBzZWN0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgYWRkZWQpLiBPdGhlciBvcHRpb25zOiAibmFt ZSIgLSBhbHBoYWJldGljYWwgb3JkZXI7ICJhZGlfbWVudV9zb3J0IiAtIHVzZSBvcmRlciBz cGVjaWZpZWQgaW4gYWRtaW4gdGFiOyAiYWRpX21lbnVfc29ydCwgbmFtZSIgLSB1c2Ugc29y dCBvcmRlciwgdGhlbiBpZiBzYW1lIHVzZSBhbHBoYWJldGljYWwgb3JkZXIuCgpAY2xvbmVf dGl0bGU9InRleHQiQAoKLSB0aGUgZGVmYXVsdCB0aXRsZSB0byBiZSB1c2VkIGZvciBjbG9u ZWQgc2VjdGlvbnMsIGlmIG5vIHRpdGxlIGhhcyBiZWVuIHNwZWNpZmllZCBpbiB0aGUgYWRt aW4gdGFiLiBEZWZhdWx0ID0gIlN1bW1hcnkiLgoKQHN1cHByZXNzX3VybD0ibW9kZSJACgot IHN1cHByZXNzIHRoZSBVUkwgb2YgdGhlIEBocmVmQCBhdHRyaWJ1dGUgaW4gYSBwYXJlbnQg c2VjdGlvbiBsaW5rIChpLmUuIHNldCBpdCB0byAiIyIpLiBTZXQgdG8gImFsbCIgdG8gc3Vw cHJlc3MgYWxsIHBhcmVudCBzZWN0aW9uIGxpbmtzIG9yICJ0b3AiIHRvIHN1cHByZXNzIHRv cC1sZXZlbCBwYXJlbnQgc2VjdGlvbiBsaW5rcyBvbmx5LiBEZWZhdWx0PSAiIiAoZG8gbm90 IHN1cHByZXNzKS4KCkBzcGVha2luZ19ibG9jaz0iYm9vbGVhbiJACgotIGVuYWJsZXMgc3Bl YWtpbmcgYmxvY2tzLiBEZWZhdWx0ID0gIjAiIChubyBzcGVha2luZyBibG9ja3MpLiBCeSBk ZWZhdWx0LCBzcGVha2luZyBibG9ja3MgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzZWN0aW9u J3MgX3N0aWNreV8gYXJ0aWNsZSBleGNlcnB0LgoKQHNwZWFraW5nX2Jsb2NrX2Zvcm09ImZv cm0gbmFtZSJACgotIGFsdGVybmF0aXZlIGZvcm0gdG8gYmUgdXNlZCBmb3IgdGhlIHNwZWFr aW5nIGJsb2NrLiBEZWZhdWx0ID0gIiIgKG5vbmUpLiBfTm90ZSB0aGF0IGZvciBUZXh0cGF0 dGVybiB2ZXJzaW9ucyA0LjAuNyAmIGFib3ZlLCB0aGlzIGF0dHJpYnV0ZSBpcyBvcHRpb25h bCAodGhlIGRlZmF1bHQgZm9ybSBjb250YWluczogQDx0eHA6ZXhjZXJwdCAvPkApLiBGb3Ig b2xkZXIgdmVyc2lvbnMsIHRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVkICYgbXVzdCByZWZl cmVuY2UgYW4gZXhpc3RpbmcgYXJ0aWNsZSBmb3JtLl8KCkBsYWJlbD0idGV4dCJACgotIHNv bWUgdGV4dCB0byBwcmVjZWRlIHRoZSBtZW51LiBEZWZhdWx0ID0gIiIgKG5vIGxhYmVsKS4g X0lmIHRoZXJlIGlzIG5vIG1lbnUgdG8gb3V0cHV0IHRoZW4gbm8gbGFiZWwgaXMgZ2VuZXJh dGVkLl8KCkBsYWJlbHRhZz0idGFnIkAKCi0gdGhlIChYKUhUTUwgdGFnICh3aXRob3V0ICc8 PicgYnJhY2tldHMpIHRvIHdyYXAgYXJvdW5kIHRoZSBsYWJlbC4gRGVmYXVsdCA9ICIiIChu byB0YWcpLgoKQGxhYmVsX2NsYXNzPSJjbGFzcyBuYW1lIkAKCi0gdGhlIGNsYXNzIHRvIGJl IHVzZWQgb24gdGhlIGxhYmVsJ3MgdGFnLiAgRGVmYXVsdCA9ICJtZW51X2xhYmVsIi4KCkBs YWJlbF9pZD0iaWQgbmFtZSJACgotIHRoZSBJRCB0byBiZSB1c2VkIG9uIHRoZSBsYWJlbCdz IHRhZy4gIERlZmF1bHQgPSAiIiAobm9uZSkuCgpAd3JhcHRhZz0idGFnIkAKCi0gdGhlIChY KUhUTUwgdGFnICh3aXRob3V0ICc8PicgYnJhY2tldHMpIHRvIHdyYXAgYXJvdW5kIHRoZSB3 aG9sZSBtZW51IChpbmNsdWRpbmcgdGhlIGxhYmVsKS4gRGVmYXVsdCA9ICIiIChubyB0YWcp LiBfSWYgdGhlcmUgaXMgbm8gbWVudSB0byBvdXRwdXQgdGhlbiBubyB3cmFwdGFnIGlzIGdl bmVyYXRlZC5fCgpAd3JhcHRhZ19jbGFzcz0iY2xhc3MgbmFtZSJACgotIHRoZSBjbGFzcyB0 byBiZSB1c2VkIG9uIHRoZSB3cmFwdGFnLiAgRGVmYXVsdCA9ICJtZW51X3dyYXBwZXIiLgoK QHdyYXB0YWdfaWQ9ImlkIG5hbWUiQAoKLSB0aGUgSUQgdG8gYmUgdXNlZCBvbiB0aGUgd3Jh cHRhZy4gIERlZmF1bHQgPSAiIiAobm9uZSkuCgpAYXJ0aWNsZXM9ImJvb2xlYW4iQAoKLSBz cGVjaWZpZXMgd2hldGhlciBhcnRpY2xlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG1l bnUuIERlZmF1bHQgPSAiMCIgKE5vKS4KCkBhcnRpY2xlX2F0dHI9J2FydGljbGVfY3VzdG9t IGF0dHJpYnV0ZXMnQAoKLSBhIGxpc3Qgb2YgQDx0eHA6YXJ0aWNsZV9jdXN0b20gLz5AIGF0 dHJpYnV0ZXMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIGZvciBjb250cm9sbGluZyB0aGUgYXBw ZWFyYW5jZSBvZiBhcnRpY2xlcy4gRGVmYXVsdCA9ICcnIChpLmUuIEA8dHhwOmFydGljbGVf Y3VzdG9tIC8+QCBkZWZhdWx0cykuICpOb3RlIHRoZSB1c2Ugb2Ygc2luZ2xlIHF1b3Rlcyou CkZvciBleGFtcGxlOiBAYXJ0aWNsZV9hdHRyPSdzb3J0PSJUaXRsZSIgbGltaXQ9IjIwIidA LgoKQGFydGljbGVfaW5jbHVkZT0ic2VjdGlvbiBsaXN0IkAKCi0gY29tbWEgc2VwYXJhdGVk IGxpc3Qgb2Ygc2VjdGlvbnMgdGhhdCB3aWxsIGhhdmUgdGhlaXIgYXJ0aWNsZXMgaW5jbHVk ZWQgaW4gdGhlIG1lbnUuIERlZmF1bHQgPSAiIiAoYWxsKS4KCkBhcnRpY2xlX2V4Y2x1ZGU9 InNlY3Rpb24gbGlzdCJACgotIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHNlY3Rpb25zIHRo YXQgd29uJ3QgaGF2ZSB0aGVpciBhcnRpY2xlcyBpbmNsdWRlZCBpbiB0aGUgbWVudS4gRGVm YXVsdCA9ICIiIChub25lKS4KCkBhY3RpdmVfYXJ0aWNsZXNfb25seT0iYm9vbGVhbiJACgot IHNldCBpZiB5b3Ugd2FudCBhcnRpY2xlcyBsaXN0ZWQgZm9yIHRoZSBjdXJyZW50bHkgYWN0 aXZlIHNlY3Rpb24gb25seS4gRGVmYXVsdCA9ICIwIiAoYXJ0aWNsZXMgaW4gYWxsIHNlY3Rp b25zIGxpc3RlZCkuCgpfTm90ZTogVGhlIENTUyBjbGFzcyBhcHBsaWVkIHRvIGFydGljbGUg bGlua3MgaW4gdGhlIHJlbmRlcmVkIG1lbnUgZGVmYXVsdHMgdG8gIm1lbnVfYXJ0aWNsZSIg YnV0IGNhbiBiZSBjaGFuZ2VkIGJ5IGVkaXRpbmcgdGhlICphZGlfbWVudV9hcnRpY2xlcyog Zm9ybS5fCgpoMi4gKmFkaV9tZW51X2JyZWFkY3J1bWIgLSB0YWcgdXNhZ2UqCgpQbGFjZSB0 aGUgQDx0eHA6YWRpX21lbnVfYnJlYWRjcnVtYiAvPkAgdGFnIHdoZXJldmVyIHlvdSB3YW50 IHRoZSBicmVhZGNydW1icyB0byBhcHBlYXIuCgpoMi4gKmFkaV9tZW51X2JyZWFkY3J1bWIg LSB0YWcgYXR0cmlidXRlcyoKCkBsYWJlbD0idGV4dCJACgotIHRoZSB0ZXh0IHRvIHByZWNl ZGUgdGhlIGJyZWFkY3J1bWIgdHJhaWwgb3V0cHV0LiBEZWZhdWx0ID0gIllvdSBhcmUgaGVy ZTogIi4KCkBzZXBhcmF0b3I9InRleHQiQAoKLSB0aGUgdGV4dCB0byB1c2UgYXMgYSBzZXBh cmF0b3IgYmV0d2VlbiB0aGUgY3J1bWJzLiBEZWZhdWx0ID0gIiAmIzE4NzsgIi4KCkB0aXRs ZT0iYm9vbGVhbiJACgotIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZWN0aW9uIHRpdGxlcyBz aG91bGQgYmUgdXNlZC4gRGVmYXVsdCA9ICIxIiAoWWVzKS4KCkBsaW5rPSJib29sZWFuIkAK Ci0gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNlY3Rpb25zIHNob3VsZCBsaW5rcyBvciBub3Qu IERlZmF1bHQgPSAiMSIgKFllcykuCgpAbGlua2NsYXNzPSJjbGFzcyBuYW1lIkAKCi0gdGhl IENTUyBjbGFzcyBhc3NpZ25lZCB0byB0aGUgYnJlYWRjcnVtYiBsaW5rcy4gRGVmYXVsdCA9 Im5vbGluZSIuCgpAbGlua19sYXN0PSJib29sZWFuIkAKCi0gc3BlY2lmaWVzIHdoZXRoZXIg dGhlIGxhc3Qgc2VjdGlvbiBjcnVtYiBpbiBsaXN0IChpLmUuIHRoZSBjdXJyZW50IHNlY3Rp b24pIHNob3VsZCBiZSBhIGxpbmsgb3Igbm90LiBPbmx5IGFwcGxpZXMgaW4gYXJ0aWNsZSBs aXN0IG1vZGUuIERlZmF1bHQgPSAiMCIgKE5vKS4KCkBpbmNsdWRlX2RlZmF1bHQ9ImJvb2xl YW4iQAoKLSBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ2RlZmF1bHQnIHNlY3Rpb24gc2hvdWxk IGJlIG91dHB1dC4gRGVmYXVsdCA9ICIxIiAoWWVzKS4KCkBkZWZhdWx0X3RpdGxlPSJ0ZXh0 IkAKCi0gdGhlIHRpdGxlIHRvIGJlIHVzZWQgZm9yIHRoZSAnZGVmYXVsdCcgc2VjdGlvbi4g RGVmYXVsdCA9ICJIb21lIgoKQGVzY2FwZT0iaHRtbCJACgotIGVzY2FwZSBIVE1MIGVudGl0 aWVzIGluIHNlY3Rpb24gdGl0bGVzLiBEZWZhdWx0ID0gImh0bWwiIChlc2NhcGUgYWxsIGFw cGxpY2FibGUgY2hhcmFjdGVycykuICBVc2UgZXNjYXBlPSJodG1sc3BlY2lhbCIgdG8gb25s eSBjb252ZXJ0ICYsICIsICcsIDwsID47IG9yIGVzY2FwZT0iIiB0byBzd2l0Y2ggb2ZmLgoK aDMuICpCcmVhZGNydW1iIHRyYWlsIGV4YW1wbGUqCgpUbyBvdXRwdXQgYSBicmVhZGNydW1i IHRyYWlsLCBpbmNsdWRpbmcgdGhlIGFydGljbGUncyB0aXRsZSwgdHJ5IHRoZSBmb2xsb3dp bmc6CgpiYy4gPGRpdiBpZD0iYnJlYWRjcnVtYiI+Cjx0eHA6YWRpX21lbnVfYnJlYWRjcnVt YiAvPgo8dHhwOmlmX2luZGl2aWR1YWxfYXJ0aWNsZT4mIzE4NzsmIzE2MDs8dHhwOnRpdGxl Lz48L3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGU+CjwvZGl2PgoKaDIoYWRpX2V4dHJhcyku ICpBZGRpdGlvbmFsIGluZm9ybWF0aW9uKgoKcChhZGlfZXh0cmFzKS4gU3VwcG9ydCBhbmQg ZnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgIlRleHRwYXR0 ZXJuIHN1cHBvcnQgZm9ydW0iOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3Rv cGljLnBocD9pZD0yNzc3OC4gQSBjb3B5IG9mIHRoaXMgaGVscCBpcyBhbHNvIGF2YWlsYWJs ZSAib25saW5lIjpodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvdHhwLz9wbHVn aW49YWRpX21lbnUuICBNb3JlIGFkaV9wbHVnaW5zIGNhbiBiZSBmb3VuZCAiaGVyZSI6aHR0 cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3R4cC8uIjtzOjM6Im1kNSI7czozMjoi OTcyMWNmNmMxMmJhMmEwZDcyNmQ3MWMyNmI3MGZhZmQiO30=