ZGlmZiAtLWdpdCBhL2xpYi9lcmwvTWFrZWZpbGUgYi9saWIvZXJsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmM4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK01PRFVMRVMgPSBsaWIgIyByZWxlYXNlCisKK2FsbCBjbGVhbjoKKwlAZm9yIGRpciBpbiAkKE1PRFVMRVMpOyBkbyBcCisJCShjZCAkJGRpcjsgJHtNQUtFfSAkQCk7IFwKKwkJaWYgWyAiJCQ/IiAtbmUgIjAiIF07IHRoZW4gRVJST1I9JCQ/OyBlY2hvICJFcnJvciBDb2RlICQkRVJST1IiOyBleGl0ICQkRVJST1I7IGZpOyBcCisJZG9uZQorCitkb2NzOgorCShjZCBsaWI7ICR7TUFLRX0gJEApOyBcCisJaWYgWyAiJCQ/IiAtbmUgIjAiIF07IHRoZW4gRVJST1I9JCQ/OyBlY2hvICJFcnJvciBDb2RlICQkRVJST1IiOyBleGl0ICQkRVJST1I7IGZpOyAKKworaW5zdGFsbDoKKwllY2hvIE5PIE9QCmRpZmYgLS1naXQgYS9saWIvZXJsL1JFQURNRSBiL2xpYi9lcmwvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MjExYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL1JFQURNRQpAQCAtMCwwICsxLDY4IEBACitNdWNoIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgdG9waWNzIGNhbiBiZSBmb3VuZCBhdCB3d3cuZXJsd2FyZS5vcmcKKworCitCdWlsZGluZyB0aGUgdHJlZQorPT09PT09PT09PT09PT09PT0KKworVG8gYnVpbGQsIHR5cGUgbWFrZSwgaXQgc2hvdWxkIGFsbCB3b3JrIGZyb20gdGhlcmUuIAorCitOT1RFKiogaWYgeW91ciBzeXN0ZW0gaGFzIGVybGFuZyBpbnN0YWxsZWQgaW4gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiAvdXNyL2xvY2FsL2xpYi9lcmxhbmcKK3RoZW4geW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBFUkxfUlVOX1RPUCB0byB0aGF0IGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUKK2lmIHlvdSBoYXZlIGVybGFuZyBpbnN0YWxsZWQgaW4gL2hvbWUvamRvZS9lcmxhbmcgdGhlbiB5b3Ugc2hvdWxkIAorZXhwb3J0IEVSTF9SVU5fVE9QPS9ob21lL2pkb2UvZXJsYW5nCisKKworQ3JlYXRpbmcgYSBuZXcgYXBwbGljYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgbmV3IGFwcGxpY2F0aW9uIGNhbiBiZSBjcmVhdGVkIGJ5IHVzaW5nIHRoZSBhcHBnZW4gdXRpbGl0eSBpbiBvdHAvdG9vbHMvdXRpbGl0aWVzLgorVGhpcyB1dGlsaXR5IHdpbGwgY3JlYXRlIGEgYmFzaWMgT1RQIGFwcCBmcmFtZXdvcmsgdW5kZXIgdGhlIG90cC9saWIgZGlyZWN0b3J5IGFuZAorYW4gT1RQIHJlbGVhc2UgdW5kZXIgdGhlIG90cC9yZWxlYXNlIGRpcmVjdG9yeS4gIAorCit1c2FnZTogYXBwZ2VuIDxhcHBuYW1lPiA8cHJlZml4PiAKKworQXBwbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB5b3Ugd291bGQgbGlrZSB0byBjcmVhdGUuICBUaGUgcHJlZml4IGlzIAordXN1YWxseSB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgYXBwbmFtZS4gIFRoaXMgcHJlZml4IGlzIHRvIGF2b2lkIG5hbWUKK2NsYXNoZXMgYmV0d2VlbiBhcHBsaWNhdGlvbnMgaW5jbHVkZWQgaW4gYSByZWxlYXNlIChFcmxhbmcgZG9lcyBub3QgaGF2ZSBwYWNrYWdlcykuCisKK2V4YW1wbGUgdXNhZ2U6IGFwcGdlbiBteV9hcHAgbWEKKword2hpY2ggcmVzdWx0cyBpbiAKKworb3RwL2xpYi9teV9hcHAgJiBvdHAvcmVsZWFzZS9teV9hcHBfcmVsCisKK1J1bm5pbmcgYSByZWxlYXNlCis9PT09PT09PT09PT09PT09PQorCitZb3VyIHJlbGVhc2Ugc2hvdWxkIGNvbnRhaW4gYWxsIHRoYXQgeW91IG5lZWQgdG8gcnVuIHlvdXIgYXBwbGljYXRpb24uICBJZiB5b3VyIGFwcGxpY2F0aW9uCitkZXBlbmRzIG9uIGFueSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgc3VwcGxpZWQgb3V0c2lkZSBvZiB0aGlzIGJ1aWxkIHRyZWUgb3IgT1RQIGl0c2VsZiB0aGVuCit0aGV5IG1heSBiZSBhZGRlZCB0byB0aGUgPGFwcG5hbWU+X3JlbC5yZWwuc3JjIGZpbGUuICBJZiB0aGUgZXh0cmEgYXBwbGljYXRpb25zIGFyZSBwcmVzZW50CitpbiB0aGlzIGJ1aWxkIHRyZWUgdGhlbiB0aGV5IHdpbGwgYmUgZm91bmQgYnkgdGhlIG1ha2UgcHJvY2VzcyBhbmQgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIAorcmVsZWFzZS4KKworVG8gcnVuIGEgcmVsZWFzZSB0aGVyZSBhcmUgdHdvIG9wdGlvbnM6ICJsb2NhbCIgYW5kIGluc3RhbGxlZC4gVGhlIGxvY2FsIHZlcnNpb24gY2FuIGJlIGZvdW5kCitpbiB0aGUgb3RwL3JlbGVhc2UvPGFwcG5hbWU+X3JlbC9sb2NhbCBkaXJlY3Rvcnkgd2hpY2ggaXMgYWRkZWQgYnkgdGhlIG1ha2UgcHJvY2Vzcy4gIFRoaXMgCitzaG91bGQgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gcnVuIHlvdXIgcmVsZWFzZSBpbnRlcmFjdGl2ZWx5IHZpYSBhbiBFcmxhbmcgc2hlbGwuCitUbyBydW4gYSByZWxlYXNlIGluIGxvY2FsIG1vZGUgY2QgaW50byB0aGUgImxvY2FsIiBkaXJlY3RvcnkgYW5kIHJ1biA8YXBwbmFtZT5fcmVsLnNoLgorCitUaGUgc2Vjb25kIHdheSB0byBydW4gYSByZWxlYXNlIGlzIHRvIGluc3RhbGwgaXQgYW5kIHJ1biBpdCBhcyBhIGRhZW1vbi4gIFRoaXMgaXMgdXNlZCBmb3IgCithcHBsaWNhdGlvbnMgaW4gYSBwcm9kdWN0aW9uIHNldHRpbmcuICBUbyBkbyB0aGlzIHlvdSBuZWVkIHRvIGZpcnN0IHJ1biBtYWtlICYgbWFrZSBpbnN0YWxsCitmcm9tIHRoZSA8YXBwbmFtZT5fcmVsIGRpcmVjdG9yeS4gIFRoaXMgd2lsbCBwbGFjZSBhIGNvbXBsZXRlIHByb2R1Y3Rpb24gcmVhZHkgdmVyc2lvbmVkIAorcmVsZWFzZSBpbiB0aGUgL3Vzci9sb2NhbC9saWIvIGRpcmVjdG9yeSB1bmRlciA8YXBwbmFtZT5fcmVsLiAgVG8gcnVuIGFuIGluc3RhbGxlZCByZWxlYXNlCitjZCB0byAvdXNyL2xvY2FsL2xpYi88YXBwbmFtZT5fcmVsL3JlbGVhc2UvPHJlbF92c24+IGFuZCBydW4gPGFwcG5hbWU+X3JlbC5zaC4gIAorCitJbiB0aGUgY2FzZSB3aGVyZSB5b3Ugd2FudCB0byBjcmVhdGUgYSBwcm9kdWN0aW9uIHJlYWR5IHJlbGVhc2Ugb24gb25lIG1hY2hpbmUgYW5kIHRoZW4gZGVwbG95IGl0CitvbiBtdWx0aXBsZSBpZGVudGljYWwgbWFjaGluZXMgeW91IG1heSBjcmVhdGUgYSBwcm9kdWN0aW9uIHRhciBhcmNoaXZlLiAgVG8gZG8gdGhpcyBydW4gCittYWtlICYgbWFrZSB0YXIgZnJvbSB0aGUgb3RwL3JlbGVhc2UvPGFwcG5hbWU+X3JlbC8gZGlyZWN0b3J5LiBUaGlzIHdpbGwgY3JlYXRlIGEgdGFyIGZpbGUgY29uYXRhaW5pbmcgCit0aGUgcmVsZWFzZSBuYW1lIGFuZCB2ZXJzaW9uIG51bWJlciBpbiB0aGUgZmlsZSBuYW1lLiAgVGhpcyB0YXIgY2FuIGJlIHNoaXBwZWQgdG8gaXRzIGRlc3RpbmF0aW9uIGFuZCAKK3VudGFycmVkLiAgV2l0aGluIHRoZSB1bnRhcnJlZCBkaXJlY3RvcnkgdGhlcmUgaXMgYSBzaGVsbCBzY3JpcHQgZW50aXRsZWQgaW5zdGFsbC5zaC4gIFJ1bm5pbmcgdGhpcworc2NyaXB0IHdpbGwgaW5zdGFsbCB0aGUgcmVsZWFzZSBieSBkZWZhdWx0IGluIC91c3IvbG9jYWwvbGliLzxhcHBuYW1lPl9yZWwuICBBbiBvcHRpb25hbCBhcmd1bWVudAorY2FuIGJlIHByb3ZpZGVkIHRoYXQgd2lsbCBkaXJlY3QgdGhlIGluc3RhbGxhdGlvbiB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisKK0V4YW1wbGUgaW5zdGFsbC5zaCAvb3B0L2xpYiAKKworVGhpcyB3aWxsIGluc3RhbGwgdGhlIHJlbGVhc2UgaW4gL29wdC9saWIvPGFwcG5hbWU+X3JlbAorICAKKworIAorCmRpZmYgLS1naXQgYS9saWIvZXJsL2J1aWxkL2JlYW12ZXIgYi9saWIvZXJsL2J1aWxkL2JlYW12ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0NDhiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvYnVpbGQvYmVhbXZlcgpAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKworIyBlcmx3YXJlU3lzOiBvdHAvYnVpbGQvYmVhbXZlcix2IDEuMSAyMDAyLzAyLzE0IDExOjQ1OjIwIGhhbCBFeHAgJAorCisjIHVzYWdlOiBiZWFtdmVyIDxiZWFtX2ZpbGU+CisjCisjIGlmIHRoZXJlJ3MgYSB1c2FibGUgLXZzbigpIGF0dHJpYnV0ZSwgcHJpbnQgaXQgYW5kIGV4aXQgd2l0aCBzdGF0dXMgMAorIyBvdGhlcndpc2UsIHByaW50IG5vdGhpbmcgYW5kIGV4aXQgd2l0aCBzdGF0dXMgMQorCisjIEZyb20gdGhlIEVybGFuZyBzaGVsbDoKKyMKKyMgNT4gY29kZTp3aGljaChhY2NhX2luZXRzKS4KKyMgIi9ob21lL21hcnRpbi93b3JrL290cC9yZWxlYXNlcy88YXBwPi8uLi8uLi9hY2NhL2ViaW4vPGFwcD4uYmVhbSIKKyMgCisjIDg+IGJlYW1fbGliOnZlcnNpb24oY29kZTp3aGljaCg8YXBwPikpLgorIyB7b2ssezxhcHA+LFsnJElkOiBiZWFtdmVyLHYgMS4xLjEuMSAyMDAzLzA2LzEzIDIxOjQzOjIxIG1sb2dhbiBFeHAgJCAnXX19CisKKyMgVE1QRklMRSBsb29rcyBsaWtlIHRoaXM6CisjCisjIGlvOmZvcm1hdCgiaGVsbG8gfnB+biIsCisjICAgYmVhbV9saWI6dmVyc2lvbigiL2hvbWUvaGFsL3dvcmsvb3RwL2FjY2EvZWJpbi9hY2NhX2luZXRzLmJlYW0iKV0pLgorCitUTVBGSUxFPS90bXAvYmVhbXZlci4kJAorCisjIGV4aXQgd2l0aCBmYWlsdXJlIGlmIHdlIGNhbid0IHJlYWQgdGhlIGZpbGUKK3Rlc3QgLWYgIiQxIiB8fCBleGl0IDEKK0JFQU1GSUxFPVwiJDFcIgorCitjYXQgPiAkVE1QRklMRSA8PF9FT0YKK2lvOmZvcm1hdCgifnB+biIsCisgIFtiZWFtX2xpYjp2ZXJzaW9uKCRCRUFNRklMRSldKS4KK19FT0YKKworIyBiZWFtX3Jlc3VsdCBpcyB7b2sse01vZHVsZV9uYW1lLCBCZWFtX3ZlcnNpb259IG9yIHtlcnJvcixiZWFtX2xpYix7UmVhc29ufX0KK2JlYW1fcmVzdWx0PWBlcmwgLW5vc2hlbGwgXAorICAtcyBmaWxlIGV2YWwgJFRNUEZJTEUgXAorICAtcyBlcmxhbmcgaGFsdGAKKworcm0gLWYgJFRNUEZJTEUKKworIyBzZWQgcmVnZXhlczoKKyMgICByZW1vdmUgYnJhY2tldHMgYW5kIGFueXRoaW5nIG91dHNpZGUgdGhlbQorIyAgIHJlbW92ZSBxdW90ZXMgYW5kIGFueXRoaW5nIG91dHNpZGUgdGhlbQorIyAgIHJlbW92ZSBhcG9zdHJvcGhlcyBhbmQgYW55dGhpbmcgb3V0c2lkZSB0aGVtCisjICAgcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcworCitjYXNlICRiZWFtX3Jlc3VsdCBpbgorXHtvayopCisgIGVjaG8gJGJlYW1fcmVzdWx0IHwgc2VkIC1lICdzLy4qXFtcKC4qXCldLiovXDEvJyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8uKlwiXCguKlwpXCIuKi9cMS8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInMvLipcJ1woLipcKVwnLiovXDEvIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyAqJC8vJyAtZSAncy9eICovLycKKyAgZXhpdCAwCisgIDs7CisqKQorICBleGl0IDEKKyAgOzsKK2VzYWMKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9idWlsZC9idWlsZHRhcmdldHMubWsgYi9saWIvZXJsL2J1aWxkL2J1aWxkdGFyZ2V0cy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQwYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9idWlsZC9idWlsZHRhcmdldHMubWsKQEAgLTAsMCArMSwxNCBAQAorRUJJTj0uLi9lYmluCitFTVVMQVRPUj1iZWFtCisKK0VSTENfV0ZMQUdTID0gLVcKK0VSTEMgPSBlcmxjICQoRVJMQ19XRkxBR1MpICQoRVJMQ19GTEFHUykKK0VSTCA9IGVybCAtYm9vdCBzdGFydF9jbGVhbgorRVNSQyA9IC4KKworJChFQklOKS8lLmJlYW06ICQoRVNSQykvJS5lcmwKKwkkKEVSTEMpICQoRVJMX0ZMQUdTKSAkKEVSTF9DT01QSUxFX0ZMQUdTKSAtbyQoRUJJTikgJDwKKworLmVybC5iZWFtOgorCSQoRVJMQykgJChFUkxfRkxBR1MpICQoRVJMX0NPTVBJTEVfRkxBR1MpIC1vJChkaXIgJEApICQ8CisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvYnVpbGQvY29sb3JzLm1rIGIvbGliL2VybC9idWlsZC9jb2xvcnMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2OWM0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvYnVpbGQvY29sb3JzLm1rCkBAIC0wLDAgKzEsMjQgQEAKKyMgQ29sb3JzIHRvIGFzc2lzdCB2aXN1YWwgaW5zcGVjdGlvbiBvZiBtYWtlIG91dHB1dC4KKworIyBDb2xvcnMKK0xHUkFZPSQkJ1xlWzA7MzdtJworREdSQVk9JCQnXGVbMTszMG0nCitMR1JFRU49JCQnXGVbMTszMm0nCitMQkxVRT0kJCdcZVsxOzM0bScKK0xDWUFOPSQkJ1xlWzE7MzZtJworTFBVUlBMRT0kJCdcZVsxOzM1bScKK0xSRUQ9JCQnXGVbMTszMW0nCitOT19DT0xPUj0kJCdcZVswbScKK0RFRkFVTFQ9JCQnXGVbMG0nCitCTEFDSz0kJCdcZVswOzMwbScKK0JMVUU9JCQnXGVbMDszNG0nCitHUkVFTj0kJCdcZVswOzMybScKK0NZQU49JCQnXGVbMDszNm0nCitSRUQ9JCQnXGVbMDszMW0nCitQVVJQTEU9JCQnXGVbMDszNW0nCitCUk9XTj0kJCdcZVswOzMzbScKK1lFTExPVz0kJCdcZVsxOzMzbScKK1dISVRFPSQkJ1xlWzE7MzdtJworCitCT0xEPSQkJ1xlWzE7MzdtJworT0ZGPSQkJ1xlWzBtJwpkaWZmIC0tZ2l0IGEvbGliL2VybC9idWlsZC9kb2NzLm1rIGIvbGliL2VybC9idWlsZC9kb2NzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjczNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2J1aWxkL2RvY3MubWsKQEAgLTAsMCArMSwxMiBAQAorRURPQ19QQVRIPS4uLy4uLy4uL3Rvb2xzL3V0aWxpdGllcworCisjc2luZ2xlIHBsYWNlIHRvIGluY2x1ZGUgZG9jcyBmcm9tLgorZG9jczoKKwlAbWtkaXIgLXAgLi4vZG9jCisJQGVjaG8gLW4gJCR7TVlfQkxVRTotJChCTFVFKX07IFwKKwkkKEVET0NfUEFUSCkvZWRvYyAkKEFQUF9OQU1FKTsgXAorCWlmIFsgJCQ/IC1lcSAwIF07IHRoZW4gXAorCQllY2hvICQke01ZX0xSRUQ6LSQoTFJFRCl9IiQkZCBEb2MgRmFpbGVkIjsgXAorCWZpOyBcCisJZWNobyAtbiAkKE9GRikkKE5PX0NPTE9SKQkKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9idWlsZC9taW1lLnR5cGVzIGIvbGliL2VybC9idWlsZC9taW1lLnR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZTNjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2J1aWxkL21pbWUudHlwZXMKQEAgLTAsMCArMSw5OCBAQAorCithcHBsaWNhdGlvbi9hY3RpdmVtZXNzYWdlCithcHBsaWNhdGlvbi9hbmRyZXctaW5zZXQKK2FwcGxpY2F0aW9uL2FwcGxlZmlsZQorYXBwbGljYXRpb24vYXRvbWljbWFpbAorYXBwbGljYXRpb24vZGNhLXJmdAorYXBwbGljYXRpb24vZGVjLWR4CithcHBsaWNhdGlvbi9tYWMtYmluaGV4NDAJaHF4CithcHBsaWNhdGlvbi9tYWMtY29tcGFjdHBybwljcHQKK2FwcGxpY2F0aW9uL21hY3dyaXRlaWkKK2FwcGxpY2F0aW9uL21zd29yZAkJZG9jCithcHBsaWNhdGlvbi9uZXdzLW1lc3NhZ2UtaWQKK2FwcGxpY2F0aW9uL25ld3MtdHJhbnNtaXNzaW9uCithcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0JYmluIGRtcyBsaGEgbHpoIGV4ZSBjbGFzcworYXBwbGljYXRpb24vb2RhCQkJb2RhCithcHBsaWNhdGlvbi9wZGYJCQlwZGYKK2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQJCWFpIGVwcyBwcworYXBwbGljYXRpb24vcG93ZXJwb2ludAkJcHB0CithcHBsaWNhdGlvbi9yZW1vdGUtcHJpbnRpbmcKK2FwcGxpY2F0aW9uL3J0ZgkJCXJ0ZgorYXBwbGljYXRpb24vc2xhdGUKK2FwcGxpY2F0aW9uL3dpdGEKK2FwcGxpY2F0aW9uL3dvcmRwZXJmZWN0NS4xCithcHBsaWNhdGlvbi94LWJjcGlvCQliY3BpbworYXBwbGljYXRpb24veC1jZGxpbmsJCXZjZAorYXBwbGljYXRpb24veC1jb21wcmVzcwkJWgorYXBwbGljYXRpb24veC1jcGlvCQljcGlvCithcHBsaWNhdGlvbi94LWNzaAkJY3NoCithcHBsaWNhdGlvbi94LWRpcmVjdG9yCQlkY3IgZGlyIGR4cgorYXBwbGljYXRpb24veC1kdmkJCWR2aQorYXBwbGljYXRpb24veC1ndGFyCQlndGFyCithcHBsaWNhdGlvbi94LWd6aXAJCWd6CithcHBsaWNhdGlvbi94LWhkZgkJaGRmCithcHBsaWNhdGlvbi94LWh0dHBkLWNnaQkJY2dpCithcHBsaWNhdGlvbi94LWtvYW4JCXNrcCBza2Qgc2t0IHNrbQorYXBwbGljYXRpb24veC1sYXRleAkJbGF0ZXgKK2FwcGxpY2F0aW9uL3gtbWlmCQltaWYKK2FwcGxpY2F0aW9uL3gtbmV0Y2RmCQluYyBjZGYKK2FwcGxpY2F0aW9uL3gtc2gJCXNoCithcHBsaWNhdGlvbi94LXNoYXIJCXNoYXIKK2FwcGxpY2F0aW9uL3gtc3R1ZmZpdAkJc2l0CithcHBsaWNhdGlvbi94LXN2NGNwaW8JCXN2NGNwaW8KK2FwcGxpY2F0aW9uL3gtc3Y0Y3JjCQlzdjRjcmMKK2FwcGxpY2F0aW9uL3gtdGFyCQl0YXIKK2FwcGxpY2F0aW9uL3gtdGNsCQl0Y2wKK2FwcGxpY2F0aW9uL3gtdGV4CQl0ZXgKK2FwcGxpY2F0aW9uL3gtdGV4aW5mbwkJdGV4aW5mbyB0ZXhpCithcHBsaWNhdGlvbi94LXRyb2ZmCQl0IHRyIHJvZmYKK2FwcGxpY2F0aW9uL3gtdHJvZmYtbWFuCQltYW4KK2FwcGxpY2F0aW9uL3gtdHJvZmYtbWUJCW1lCithcHBsaWNhdGlvbi94LXRyb2ZmLW1zCQltcworYXBwbGljYXRpb24veC11c3RhcgkJdXN0YXIKK2FwcGxpY2F0aW9uL3gtd2Fpcy1zb3VyY2UJc3JjCithcHBsaWNhdGlvbi96aXAJCQl6aXAKK2F1ZGlvL2Jhc2ljCQkJYXUgc25kCithdWRpby9tcGVnCQkJbXBnYSBtcDIKK2F1ZGlvL3gtYWlmZgkJCWFpZiBhaWZmIGFpZmMKK2F1ZGlvL3gtcG4tcmVhbGF1ZGlvCQlyYW0KK2F1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbglycG0KK2F1ZGlvL3gtcmVhbGF1ZGlvCQlyYQorYXVkaW8veC13YXYJCQl3YXYKK2NoZW1pY2FsL3gtcGRiCQkJcGRiIHh5egoraW1hZ2UvZ2lmCQkJZ2lmCitpbWFnZS9pZWYJCQlpZWYKK2ltYWdlL2pwZWcJCQlqcGVnIGpwZyBqcGUKK2ltYWdlL3BuZwkJCXBuZworaW1hZ2UvdGlmZgkJCXRpZmYgdGlmCitpbWFnZS94LWNtdS1yYXN0ZXIJCXJhcworaW1hZ2UveC1wb3J0YWJsZS1hbnltYXAJCXBubQoraW1hZ2UveC1wb3J0YWJsZS1iaXRtYXAJCXBibQoraW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwCXBnbQoraW1hZ2UveC1wb3J0YWJsZS1waXhtYXAJCXBwbQoraW1hZ2UveC1yZ2IJCQlyZ2IKK2ltYWdlL3gteGJpdG1hcAkJCXhibQoraW1hZ2UveC14cGl4bWFwCQkJeHBtCitpbWFnZS94LXh3aW5kb3dkdW1wCQl4d2QKK21lc3NhZ2UvZXh0ZXJuYWwtYm9keQorbWVzc2FnZS9uZXdzCittZXNzYWdlL3BhcnRpYWwKK21lc3NhZ2UvcmZjODIyCittdWx0aXBhcnQvYWx0ZXJuYXRpdmUKK211bHRpcGFydC9hcHBsZWRvdWJsZQorbXVsdGlwYXJ0L2RpZ2VzdAorbXVsdGlwYXJ0L21peGVkCittdWx0aXBhcnQvcGFyYWxsZWwKK3RleHQvaHRtbAkJCWh0bWwgaHRtCit0ZXh0L3gtc2VydmVyLXBhcnNlZC1odG1sCXNodG1sCit0ZXh0L3BsYWluCQkJdHh0Cit0ZXh0L3JpY2h0ZXh0CQkJcnR4Cit0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzCXRzdgordGV4dC94LXNldGV4dAkJCWV0eAordGV4dC94LXNnbWwJCQlzZ21sIHNnbQordmlkZW8vbXBlZwkJCW1wZWcgbXBnIG1wZQordmlkZW8vcXVpY2t0aW1lCQkJcXQgbW92Cit2aWRlby94LW1zdmlkZW8JCQlhdmkKK3ZpZGVvL3gtc2dpLW1vdmllCQltb3ZpZQoreC1jb25mZXJlbmNlL3gtY29vbHRhbGsJCWljZQoreC13b3JsZC94LXZybWwJCQl3cmwgdnJtbApkaWZmIC0tZ2l0IGEvbGliL2VybC9idWlsZC9vdHAubWsgYi9saWIvZXJsL2J1aWxkL290cC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkzZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9idWlsZC9vdHAubWsKQEAgLTAsMCArMSwxNDYgQEAKKyMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjICRJZDogb3RwLm1rLHYgMS40IDIwMDQvMDcvMDEgMTQ6NTc6MTAgdGZlZSBFeHAgJAorIyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworIyBvdHAubWsKKyMgLSB0byBiZSBpbmNsdWRlZCBpbiBhbGwgT1RQIE1ha2VmaWxlcworIyBpbnN0YWxsZWQgdG8gL3Vzci9sb2NhbC9pbmNsdWRlL2VybGFuZy9vdHAubWsKKworIyBnbWFrZSBsb29rcyBpbiAvdXNyL2xvY2FsL2luY2x1ZGUgLSB0aGF0J3MgaGFyZC1jb2RlZAorIyB1c2VycyBvZiB0aGlzIGZpbGUgd2lsbCB1c2UKKyMgaW5jbHVkZSBlcmxhbmcvdG9wLm1rCisKKyMgbW9zdCBpbnRlcmZhY2UgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQgdG8gJEVSTF9SVU5fVE9QL2FwcC12c24vaW5jbHVkZS8qLmhybAorCisjIGdyb3VwIG93bmVyIGZvciBsaWJyYXJ5L2luY2x1ZGUgZGlyZWN0b3JpZXMKK0VSTEFOR0RFVl9HUk9VUD1lcmxhbmdkZXYKKworIyBFUkxfVE9QIGlzIHJvb3Qgb2YgRXJsYW5nIHNvdXJjZSB0cmVlCisjIEVSTF9SVU5fVE9QIGlzIHJvb3Qgb2YgRXJsYW5nIHRhcmdldCB0cmVlIChzb21lIEVyaWNzc29uIE1ha2VmaWxlcyB1c2UgJFJPT1QpCisjIEVSTEFOR19PVFAgaXMgdGFyZ2V0IHJvb3QgZm9yIEVybGFuZyBjb2RlIAorIyAtIHNlZSBzYXNsL3N5c3Rvb2xzIHJlZmVyZW5jZSBtYW51YWwgcGFnZTsgZ3JlcCAiVEVTVCIKKworIyBPU19UWVBFIGlzIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgTGludXgsIFNDT19TViwgU3VuT1MuIAorT1NfVFlQRT0ke3NoZWxsIHVuYW1lfQorCisjIE1IT1NUIGlzIHRoZSBob3N0IHdoZXJlIHRoaXMgTWFrZWZpbGUgcnVucy4KK01IT1NUPSR7c2hlbGwgaG9zdG5hbWUgLXN9CitFUkxfQ09NUElMRV9GTEFHUys9LVcwCisKKyMgVGhlIGxvY2F0aW9uIG9mIHRoZSBlcmxhbmcgcnVudGltZSBzeXN0ZW0uCitpZm5kZWYgRVJMX1JVTl9UT1AKK0VSTF9SVU5fVE9QPS91c3IvbG9jYWwvbGliL2VybGFuZworZW5kaWYKKworCisjIEVkaXQgdG8gcmVmbGVjdCBsb2NhbCBlbnZpcm9ubWVudC4KKyMgaWZlcSAoJHtPU19UWVBFfSxMaW51eCkKKyMgRVJMX1JVTl9UT1A9L3Vzci9sb2NhbC9saWIvZXJsYW5nCisjICBOb3RlKiBFUkxfUlVOX1RPUCBjYW4gYmUgZGV0ZXJtaW5lZCBieSBzdGFydGluZyBhbiAKKyMgICAgICAgIGVybGFuZyBzaGVsbCBhbmQgdHlwaW5nIGNvZGU6cm9vdF9kaXIoKS4KKyMgRVJMX1RPUD1hIHN5bWJvbGljIGxpbmsgdG8gdGhlIGFjdHVhbCBzb3VyY2UgdG9wLCB3aGljaCBjaGFuZ2VzIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCisjICBOb3RlKiBFUkxfVE9QIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGVybGFuZyAKKyMgICAgICAgIHNvdXJjZSBmaWxlcyByZXNpZGUuIE1ha2Ugc3VyZSB0byBydW4gLi9jb25maWd1cmUgdGhlcmUuIAorIyBUQVJHRVQ9aTY4Ni1wYy1saW51eC1nbnUKKyMgIE5vdGUqIFRhcmdldCBjYW4gYmUgZm91bmQgaW4gJEVSTF9UT1AvZXJ0cworIyBlbmRpZgorCisjIFNlZSBhYm92ZSBmb3IgZGlyZWN0aW9ucy4KK2lmZXEgKCR7T1NfVFlQRX0sTGludXgpCitFUkxfVE9QPS9vcHQvT1RQX1NSQworVEFSR0VUPWk2ODYtcGMtbGludXgtZ251CitlbmRpZgorCitFUkxBTkdfT1RQPS91c3IvbG9jYWwvZXJsYW5nL290cAorVkFSX09UUD0vdmFyL290cAorCisKKyMgQWxpYXNlcyBmb3IgY29tbW9uIGJpbmFyaWVzCisjIE5vdGUgLSBDRkxBR1MgaXMgbW9kaWZpZWQgaW4gZXJsYW5nLmNvbmYKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdW5PUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmZXEgKCR7T1NfVFlQRX0sU3VuT1MpCisKKyAgICBDQz1nY2MKKyAgICBDWFg9ZysrCisgICAgQVI9L3Vzci9jY3MvYmluL2FyCisgICAgQVJGTEFHUz0tcnYKKyAgICBDWFhGTEFHUys9JHtDRkxBR1N9IC1JL3Vzci9pbmNsdWRlL2crKworICAgIExEPS91c3IvY2NzL2Jpbi9sZAorICAgIFJBTkxJQj0vdXNyL2Njcy9iaW4vcmFubGliCisKK0NGTEFHUys9LVdhbGwgLXBlZGFudGljIC1hbnNpIC1PIAorQ09SRT0qLmNvcmUKK2VuZGlmCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRnJlZUJTRAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmZXEgKCR7T1NfVFlQRX0sRnJlZUJTRCkKKworICBpZmRlZiBMSU5VWEJJTgorICAgIENPTVBBVF9MSU5VWD0vY29tcGF0L2xpbnV4CisgICAgQ0M9JHtDT01QQVRfTElOVVh9L3Vzci9iaW4vZ2NjCisgICAgQ1hYPSR7Q09NUEFUX0xJTlVYfS91c3IvYmluL2crKworICAgIEFSPSR7Q09NUEFUX0xJTlVYfS91c3IvYmluL2FyCisgICAgQVJGTEFHUz0tcnYKKyAgICBDWFhGTEFHUys9LWZoYW5kbGUtZXhjZXB0aW9ucyAke0NGTEFHU30gLUkke0NPTVBBVF9MSU5VWH0vdXNyL2luY2x1ZGUvZysrCisgICAgTEQ9JHtDT01QQVRfTElOVVh9L3Vzci9iaW4vbGQKKyAgICBSQU5MSUI9JHtDT01QQVRfTElOVVh9L3Vzci9iaW4vcmFubGliCisJQlJBTkRFTEY9YnJhbmRlbGYgLXQgTGludXgKKyAgZWxzZQorICAgIENDPWdjYworICAgIENYWD1nKysKKyAgICBBUj0vdXNyL2Jpbi9hcgorICAgIEFSRkxBR1M9LXJ2CisgICAgQ1hYRkxBR1MrPS1maGFuZGxlLWV4Y2VwdGlvbnMgJHtDRkxBR1N9IC1JL3Vzci9pbmNsdWRlL2crKworICAgIExEPS91c3IvYmluL2xkCisgICAgUkFOTElCPS91c3IvYmluL3JhbmxpYgorCUJSQU5ERUxGPUB0cnVlCisKKyAgICBpZmRlZiBVU0VTX1BUSFJFQURTCisgICAgICBDRkxBR1MrPS1EX1RIUkVBRF9TQUZFCisgICAgICBMREZMQUdTKz0tbGNfcgorCisJICAjIC1wdGhyZWFkIGZsYWcgZm9yIDMuMCsKKwkgIGlmbmVxICgke3NoZWxsIHVuYW1lIC1yIHwgY3V0IC1kLiAtZjF9LDIpCisJCUNGTEFHUys9LXB0aHJlYWQKKwkgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKKworQ0ZMQUdTKz0tV2FsbCAtcGVkYW50aWMgLWFuc2kgLU8gLURGUkVFQlNECitDT1JFPSouY29yZQorZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3BlbkJTRAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmZXEgKCR7T1NfVFlQRX0sT3BlbkJTRCkKKworICAgIENDPWdjYworICAgIENYWD1nKysKKyAgICBBUj0vdXNyL2Jpbi9hcgorICAgIEFSRkxBR1M9LXJ2CisgICAgQ1hYRkxBR1MrPSR7Q0ZMQUdTfSAtSS91c3IvaW5jbHVkZS9nKysKKyAgICBMRD0vdXNyL2Jpbi9sZAorICAgIFJBTkxJQj0vdXNyL2Jpbi9yYW5saWIKKworICAgIGlmZGVmIFVTRVNfUFRIUkVBRFMKKyAgICAgIENGTEFHUys9LURfVEhSRUFEX1NBRkUKKyAgICAgIExERkxBR1MrPS1sY19yCisKKwkgICMgLXB0aHJlYWQgZmxhZyBmb3IgMy4wKworCSAgaWZuZXEgKCR7c2hlbGwgdW5hbWUgLXIgfCBjdXQgLWQuIC1mMX0sMikKKwkJQ0ZMQUdTKz0tcHRocmVhZAorCSAgZW5kaWYKKyAgICBlbmRpZgorCitDRkxBR1MrPS1XYWxsIC1wZWRhbnRpYyAtYW5zaSAtTyAtRE9QRU5CU0QKK0NPUkU9Ki5jb3JlCitlbmRpZgorCmRpZmYgLS1naXQgYS9saWIvZXJsL2J1aWxkL290cF9zdWJkaXIubWsgYi9saWIvZXJsL2J1aWxkL290cF9zdWJkaXIubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzMzk2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvYnVpbGQvb3RwX3N1YmRpci5tawpAQCAtMCwwICsxLDg1IEBACisjIENvbW1lbnQgYnkgdGZlZSAyMDA0LTA3LTAxCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRoaXMgZmlsZSBpcyBhIG1vZCBvZiB0aGUgc3RvY2sgT1RQIG9uZS4KKyMgVGhlIGNoYW5nZSBhbGxvd3MgbWFrZSB0byBzdG9wIHdoZW4gYSBjb21waWxlIGVycm9yIG9jY3Vycy4KKyMgVGhpcyBmaWxlIG5lZWRzIHRvIGdvIGludG8gdHdvIHBsYWNlczoKKyMgICAgIC91c3IvbG9jYWwvaW5jbHVkZS9lcmxhbmcKKyMgICAgIC9vcHQvT1RQX1NSQy9tYWtlCisjCisjIHdoZXJlIE9UUF9TUkMgaXMgYSBzeW1ib2xpYyBsaW5rIHRvIGEgcGVlciBkaXJlY3RvcnkgY29udGFpbmluZworIyB0aGUgb3RwIHNvdXJjZSwgZS5nLiBvdHBfc3JjX1I5Qy0yLgorIworIyBBZnRlciBpbnN0YWxsaW5nIE9UUCwgcnVubmluZyBzdWRvIG1ha2UgaW5zdGFsbCBpbiBvdHAvYnVpbGQKKyMgd2lsbCBwdXNoIHRoaXMgZmlsZSBvdXQgdG8gdGhlIHR3byBwbGFjZXMgbGlzdGVkIGFib3ZlLgorIworIyBUaGUgbW9kIGludm9sdmVzIHNldHRpbmcgdGhlIHNoZWxsIHZhcmlhYmxlICRzaG9ydF9jaXJjdWl0LCB3aGljaCB3ZQorIyBpbnRyb2R1Y2UgLSBpZSBpdCBpcyBub3QgaW4gdGhlIHN0b2NrIGZpbGUuIFRoaXMgdmFyaWFibGUgaXMgdGVzdGVkCisjIHRvIGFmZmVjdCBleGVjdXRpb24gZmxvdyBhbmQgaXMgYWxzbyByZXR1cm5lZCB0byBhZmZlY3QgdGhlIGZsb3cgaW4KKyMgdGhlIGNhbGxpbmcgc2NyaXB0ICh0aGlzIG9uZSkuIFRoZSBsYXR0ZXIgc3RlcCBpcyBuZWNlc3NhcnkgYmVjYXVzZQorIyBvZiB0aGUgcmVjdXJzaW9uIGludm9sdmVkLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjIGBgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgRXJsYW5nIFB1YmxpYyBMaWNlbnNlLAorIyBWZXJzaW9uIDEuMSwgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorIyBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlCisjIEVybGFuZyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgaXQgY2FuIGJlCisjIHJldHJpZXZlZCB2aWEgdGhlIHdvcmxkIHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZXJsYW5nLm9yZy8uCisjIAorIyBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisjIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKKyMgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMgCisjIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBFcmljc3NvbiBVdHZlY2tsaW5ncyBBQi4KKyMgUG9ydGlvbnMgY3JlYXRlZCBieSBFcmljc3NvbiBhcmUgQ29weXJpZ2h0IDE5OTksIEVyaWNzc29uIFV0dmVja2xpbmdzCisjIEFCLiBBbGwgUmlnaHRzIFJlc2VydmVkLicnCisjIAorIyAgICAgJElkOiBvdHBfc3ViZGlyLm1rLHYgMS41IDIwMDQvMDcvMTIgMTU6MTI6MjMgamVpbmhvcm4gRXhwICQKKyMKKyMKKyMgTWFrZSBpbmNsdWRlIGZpbGUgZm9yIG90cAorCisuUEhPTlk6IGRlYnVnIG9wdCByZWxlYXNlIGRvY3MgcmVsZWFzZV9kb2NzIHRlc3RzIHJlbGVhc2VfdGVzdHMgXAorCWNsZWFuIGRlcGVuZAorCisjCisjIFRhcmdldHMgdGhhdCBkb24ndCBhZmZlY3QgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcmllcworIworZGVidWcgb3B0IHJlbGVhc2UgZG9jcyByZWxlYXNlX2RvY3MgdGVzdHMgcmVsZWFzZV90ZXN0cyBjbGVhbiBkZXBlbmQ6IHByZXBhcmUKKwlAc2V0IC1lIDsJCQkJCQkJXAorCWFwcF9wd2Q9YHB3ZGAgOwkJCQkJCQlcCisJaWYgdGVzdCAtZiB2c24ubWs7IHRoZW4JCQkJCQlcCisJICAgIGVjaG8gIj09PSBFbnRlcmluZyBhcHBsaWNhdGlvbiIgYGJhc2VuYW1lICQkYXBwX3B3ZGAgOwlcCisJZmkgOwkJCQkJCQkJXAorCWNhc2UgIiQoTUFLRSkiIGluICpjbGVhcm1ha2UqKSB0ZmxhZz0iLVQiOzsgKikgdGZsYWc9IiI7OyBlc2FjOwlcCisJc2hvcnRfY2lyY3VpdD0wIDsJCQkJCQlcCisJZm9yIGQgaW4gJChTVUJfRElSRUNUT1JJRVMpOyBkbwkJCQkJXAorCSAgICBpZiBbWyAkJHNob3J0X2NpcmN1aXQgPSAwIF1dOyB0aGVuCQkJCVwKKwkJaWYgdGVzdCAtZiAkJGQvU0tJUCA7IHRoZW4JCQkJXAorCQkgICAgZWNobyAiPT09IFNraXBwaW5nIHN1YmRpciAkJGQsIHJlYXNvbjoiIDsJCVwKKwkJICAgIGNhdCAkJGQvU0tJUCA7CQkJCQlcCisJCSAgICBlY2hvICI9PT0iIDsJCQkJCVwKKwkJZWxzZQkJCQkJCQlcCisJCSAgICBpZiB0ZXN0ICEgLWQgJCRkIDsgdGhlbgkJCQlcCisJCQllY2hvICI9PT0gU2tpcHBpbmcgc3ViZGlyICQkZCwgaXQgaXMgbWlzc2luZyIgOwlcCisJCSAgICBlbHNlCQkJCQkJXAorCQkJeGZsYWc9IiIgOwkJCQkJXAorCQkJaWYgdGVzdCAtZiAkJGQvaWdub3JlX2NvbmZpZ19yZWNvcmQuaW5mOyB0aGVuCVwKKwkJCSAgICB4ZmxhZz0kJHRmbGFnIDsJCQkJXAorCQkJZmkgOwkJCQkJCVwKKwkJCShjZCAkJGQgJiYgJChNQUtFKSAkJHhmbGFnICRAKSA7CQlcCisJCQlpZiBbWyAkJD8gIT0gMCBdXTsgdGhlbgkJCQlcCisJCQkgICAgc2hvcnRfY2lyY3VpdD0xIDsJCQkJXAorCQkJZmkgOwkJCQkJCVwKKwkJICAgIGZpIDsJCQkJCQlcCisJCWZpIDsJCQkJCQkJXAorCSAgICBmaSA7CQkJCQkJCVwKKwlkb25lIDsJCQkJCQkJCVwKKwlpZiB0ZXN0IC1mIHZzbi5tazsgdGhlbgkJCQkJCVwKKwkgICAgZWNobyAiPT09IExlYXZpbmcgYXBwbGljYXRpb24iIGBiYXNlbmFtZSAkJGFwcF9wd2RgIDsJXAorCWZpIDsJCQkJCQkJCVwKKwlleGl0ICQkc2hvcnRfY2lyY3VpdAorCitwcmVwYXJlOgorCWVjaG8KZGlmZiAtLWdpdCBhL2xpYi9lcmwvYnVpbGQvcmF3X3Rlc3QubWsgYi9saWIvZXJsL2J1aWxkL3Jhd190ZXN0Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWNmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2J1aWxkL3Jhd190ZXN0Lm1rCkBAIC0wLDAgKzEsMjkgQEAKKyMgZm9yIHRlc3RpbmcgZXJsYW5nIGZpbGVzIGRpcmVjdGx5LiBUaGUgc2V0IHVwIGZvciBhCisjIHRoaXMgdHlwZSBvZiB0ZXN0IHdvdWxkIGJlIAorIyBmaWxlcyB0byB0ZXN0IHJlc2lkZSBpbiBsaWIvPGFwcF9uYW1lPi9zcmMgYW5kIHRoZSB0ZXN0IGZpbGVzIHdoaWNoIGFyZSAKKyMganVzdCBwbGFpbiBlcmxhbmcgY29kZSByZXNpZGUgaW4gbGliLzxhcHBfbmFtZT4vdGVzdAorIworIyBUaGlzIGNvbG9yIGNvZGVzIGVtaXR0ZWQgd2hpbGUgdGhlIHRlc3RzIHJ1biBhc3N1bWUgdGhhdCB5b3UgYXJlIHVzaW5nCisjIGEgd2hpdGUtb24tYmxhY2sgZGlzcGxheSBzY2hlbWEuIElmIG5vdCwgZS5nLiBpZiB5b3UgdXNlIGEgd2hpdGUKKyMgYmFja2dyb3VuZCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcmVhZCB0aGUgIldISVRFIiB0ZXh0LgorIyBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc3VwcGx5aW5nIHlvdXIgb3duICJ3aGl0ZSIgY29sb3IsCisjIHdoaWNoIG1heSBpbiBmYWN0IGJlIGJsYWNrISBZb3UgZG8gdGhpcyBieSBkZWZpbmluZyBhbiBlbnZpcm9ubWVudAorIyB2YXJpYWJsZSBuYW1lZCAiTVlfV0hJVEUiIGFuZCBzZXR0aW5nIGl0IHRvICQnXGVbMDszMG0nICh3aGljaCBpcworIyBzaW1wbHkgYmFzaCdzIHdheSBvZiBzcGVjaWZ5aW5nICJFc2NhcGUgWyAwIDsgMyAwIG0iKS4KKyMgU2ltaWxhcmx5LCB5b3UgY2FuIHNldCB5b3VyIHZlcnNpb25zIG9mIHRoZSBzdGFuZGFyZCBjb2xvcnMKKyMgZm91bmQgaW4gY29sb3JzLm1rLgorCit0ZXN0OgorCUBURVNUX01PRFVMRVM9YGxzICpfdGVzdC5lcmxgOyBcCisJdHJhcCAiZWNobyAkKE9GRikkKE5PX0NPTE9SKTsgZXhpdCAxOyIgMSAyIDMgNjsgXAorCWZvciBkIGluICQkVEVTVF9NT0RVTEVTOyBkbyBcCisJCWVjaG8gJCR7TVlfR1JFRU46LSQoR1JFRU4pfSJUZXN0aW5nIEZpbGUgJCRkIiAkJHtNWV9XSElURTotJChXSElURSl9OyBcCisJCWVjaG8gLW4gJCR7TVlfQkxVRTotJChCTFVFKX07IFwKKwkJZXJsIC1uYW1lICQoQVBQX05BTUUpICQoVEVTVF9MSUJTKSBcCisJCS1zIGBiYXNlbmFtZSAkJGQgLmVybGAgYWxsIC1zIGluaXQgc3RvcCAtbm9zaGVsbDsgXAorCQlpZiBbICQkPyAtbmUgMCBdOyB0aGVuIFwKKwkJCWVjaG8gJCR7TVlfTFJFRDotJChMUkVEKX0iJCRkIFRlc3QgRmFpbGVkIjsgXAorCQlmaTsgXAorCQllY2hvIC1uICQoT0ZGKSQoTk9fQ09MT1IpOyBcCisgICAgICAgIGRvbmUgIAorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi9NYWtlZmlsZSBiL2xpYi9lcmwvbGliL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2JmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlIC4uL2J1aWxkL2NvbG9ycy5taworCitNT0RVTEVTPSQoc2hlbGwgbHMgLiB8IGdyZXAgIlteKE1ha2VmaWxlKV0iKQorCithbGwgY2xlYW4gZG9jczoKKwlAZm9yIGRpciBpbiAkKE1PRFVMRVMpOyBkbyBcCisJCShjZCAkJGRpcjsgaWYgWyAtZSAiU0tJUCIgXTsgdGhlbiAgZWNobyAkJHtNWV9MUkVEOi0kKExSRUQpfSJza2lwcGluZyBcIm1ha2UgJEBcIiBmb3IgJCRkaXIiOyBlbHNlICR7TUFLRX0gJEA7IGZpKTsgXAorCQlpZiBbICIkJD8iIC1uZSAiMCIgXTsgdGhlbiBFUlJPUj0kJD87IGVjaG8gIkVycm9yIENvZGUgJCRFUlJPUiI7IGV4aXQgJCRFUlJPUjsgZmk7IFwKKwkJZWNobyAtbiAkKE9GRikkKE5PX0NPTE9SKTsgXAorCWRvbmUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9DT1BZSU5HIGIvbGliL2VybC9saWIvdGhyaWZ0L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5ZjIxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9DT1BZSU5HCkBAIC0wLDAgKzEsMjQgQEAKK1RocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDIwMDYtIEZhY2Vib29rLCBJbmMuIAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9IRUFERVIgYi9saWIvZXJsL2xpYi90aHJpZnQvSEVBREVSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDNlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvSEVBREVSCkBAIC0wLDAgKzEsNiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L0xJQ0VOU0UgYi9saWIvZXJsL2xpYi90aHJpZnQvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzlmMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L0xJQ0VOU0UKQEAgLTAsMCArMSwyNCBAQAorVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMjAwNi0gRmFjZWJvb2ssIEluYy4gCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L01ha2VmaWxlIGIvbGliL2VybC9saWIvdGhyaWZ0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMmM4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitNT0RVTEVTID0gXAorCXNyYworCithbGwgY2xlYW4gZG9jczoKKwlmb3IgZGlyIGluICQoTU9EVUxFUyk7IGRvIFwKKwkJKGNkICQkZGlyOyAke01BS0V9ICRAKTsgXAorCWRvbmUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9SRUFETUUgYi9saWIvZXJsL2xpYi90aHJpZnQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMmZkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvUkVBRE1FCkBAIC0wLDAgKzEsMzkgQEAKK1lNTVYKK2VtYWlsIGNwaXJvQGZhY2Vib29rLmNvbQorLS0KKworVE8gU1RBUlQgQSBTRVJWRVI6CisKKyQgY2QgbGliL2VybC9saWIvdGhyaWZ0LworJCBjZCB0dXRvcmlhbAorJCB0aHJpZnQgLWNwcCAtamF2YSAtcHkgLXBocCAtcmIgLXBlcmwgLWVybCAteHNkIC1yIHR1dG9yaWFsLnRocmlmdAorJCBjZCAuLgorJCBtYWtlCiskIC4vc2VydmVyLnNoCis+IFBpZCA9IHNlcnZlcjpzdGFydCgpLgorICAqKiBHQVpFIElOIEFNQVpFTUVOVCAqKgorPiBzZXJ2ZXI6c3RvcChQaWQpLgorCitOT1RFUzoKKworZ2V0L3NldCBuZXZlciBtZWFucyBwcm9jZXNzIGRpY3Rpb25hcnkKKwordEV4ZWNwdGlvbnMgYW5kIHQqRmFjdG9yeXMgYXJlIHN0cmFpZ2h0ICJuZXciIC0tIGUuZy4gVEYgPSB0VHJhbnNwb3J0RmFjdG9yeTpuZXcoKQorZXZlcnl0aGluZyBlbHNlIGlzIHN0YXJ0X25ldyAoaS5lLiBnZW5fc2VydmVyOnN0YXJ0X2xpbmspIC0tIHRoaXMgc3Bhd25zIGEgcHJvY2VzcyBhbmQgcmV0dXJucyBhIHBpZAorCitub3RhYmxlIGNoYW5nZSBmcm9tIHRoZSBSdWJ5OgoraW4gdCpTZXJ2ZXI6bmV3LCB0aGUgcGFyYW1ldGVycyBub3cgaW5jbHVkZSBhIGhhbmRsZXIsIGkuZS4gdGhlIGdlbmVyYXRlZCBtb2R1bGUgbmFtZS4gIEZvciBleGFtcGxlIGlmIHlvdXIgaW50ZXJmYWNlIGlzIGNhbGxlZCBjYWxjdWxhdG9yLCB0aGVuIHRvIHNwYXduIGEgVFNpbXBsZVNlcnZlciB0cnk6IG9vcDpzdGFydF9uZXcodFNpbXBsZVNlcnZlciwgW2NhbGN1bGF0b3IsIGNhbGN1bGF0b3JIYW5kbGVyLCBUcmFuc3BvcnQsIFRGXSkKKwordEVybFByb2Nlc3NvciBpcyBhIHNoaW0gYXJvdW5kIHRoZSBnZW5lcmF0ZWQgY29kZSAod2hpY2ggaXMgbm90IGFjdHVhbGx5IGEgZ2VuX3NlcnZlcikuICBPZiBjb3Vyc2UgdEVybFByb2Nlc3NvciBpc24ndCBhIGdlbl9zZXJ2ZXIgZWl0aGVyIC4uLiB0aHJpZnRfb29wX3NlcnZlciBpcyBhIHNoaW0gdG8gbWFrZSBvdXIgIlRocmlmdCBvYmplY3RzIiBnZW5fc2VydmVycy4gIE1heWJlIHdlIHNob3VsZCByZW1vdmUgc29tZSBsYXllcnM/CisKK1VzZSB0RXJsU2VydmVyIGFuZCB0RXJsQWNjZXB0b3IuICB0U2ltcGxlU2VydmVyIGFuZCB0U2VydmVyU29ja2V0IGFyZSBpbmNvbXBhdGlibGUgYnkgZGVzaWduIC4uLiB0aGUgY2FsbCB0cmFjZSBpcyBzcGFzdGljIGFjcm9zcyB0aGUgcHJvY2VzcyB0cmVlLiAgdEVybFNlcnZlciBhbmQgdEVybEFjY2VwdG9yIGZvbGxvdyB0aGUgc2FtZSBtb2RlbCBhcyBpc2VydmU6IAorICogdGhlIHRvcCBsZXZlbCBjb2RlIHNwYXducyBhIHRFcmxTZXJ2ZXIsIHdoaWNoIGxpc3RlbnMgb24gYSBzb2NrZXQKKyAqIGEgdEVybEFjY2VwdG9yIGlzIHNwYXduZWQgYW5kIGNhbGxzIGFjY2VwdCgpIG9uIHRoZSBsaXN0ZW5pbmcgc29ja2V0CisgKiB3aGVuIGFjY2VwdCgpIGZpbmlzaGVzLCB0aGUgdEVybEFjY2VwdG9yIAorICAgKiB0ZWxscyB0aGUgdEVybFNlcnZlciB0byBzcGF3biBhIG5ldyBhY2NlcHRvcgorICAgKiBoYW5kbGVzIHRoZSByZXF1ZXN0cyBieSBzcGF3bmluZyBhIHByb2Nlc3NvciwgYSB0cmFuc3BvcnQsIGFuZCBhIHByb3RvY29sCisgKiAodGhlIHRyaWNreSBwYXJ0KSB3aGVuIHRoZSBzb2NrZXQgY2xvc2VzLCB0aGUgcHJvdG9jb2wgZXhpdHMsIHNvOgorICAgKiB0aGUgdHJhbnNwb3J0IGV4aXRzIGJlY2F1c2UgaXQncyB0aGUgb25lIGNhbGxlciBvZiB0aGUgcHJvdG9jb2wKKyAgICogbGlrZXdpc2UsIHRoZSBwcm9jZXNzb3IgZXhpdHMgYmVjYXVzZSBpdCdzIHRoZSBjYWxsZXIgb2YgdGhlIHRyYW5zcG9ydAorICAgKiB0aGUgdEVybEFjY2VwdG9yIHRyYXBzIHRoZSBwcm90b2NvbCdzIGV4aXQgYW5kIGV4aXRzIHdpdGggYW4gYWNjZXB0b3JfZG9uZQorICAgKiB0aGUgdEVybFNlcnZlciBzZWVzIHRoYXQgdGhlIGFjY2VwdG9yIGV4aXRlZCBhbmQgZG9lcyBub3RoaW5nIHNpbmNlIHRoZXJlIGlzIGFscmVhZHkgYW5vdGhlciBhY2NlcHRvciBhY2NlcHQoKWluZyBvbiB0aGUgbGlzdGVuIHNvY2tldApkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L1RPRE8gYi9saWIvZXJsL2xpYi90aHJpZnQvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE4NzBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L1RPRE8KQEAgLTAsMCArMSwxMCBAQAordHV0b3JpYWwgY2xpZW50CisKK2ZpbmQgVE9ETyhjcGlybylzCittYWtlIGFsbCBtZXRob2RzIGVmZmVjdGZ1bCwgcmVtb3ZlIHRoZSBzcGVjaWFsIGNhc2luZyAob3B0aW9uYWxseSwgaW1wbGVtZW50IG1vbmFkcyBmb3IgRXJsYW5nKQorCitpbmhlcml0YW5jZQorCit0ZXN0IHN1aXRlcworCit1bmRpc2d1c3RpZnkgY29kZWdlbgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvb29wLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL29vcC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4ZTFjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL29vcC5ocmwKQEAgLTAsMCArMSwyNiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLWRlZmluZShDTEFTUyhPYmopLCBlbGVtZW50KDEsIE9iaikpLgorCistZGVmaW5lKERFRklORV9BVFRSKEF0dHIpLCBhdHRyKFRoaXMsIGdldCwgQXR0ciwgX1ZhbHVlKSAtPiBUaGlzIz9NT0RVTEUuQXR0cjsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKFRoaXMsIHNldCwgQXR0ciwgVmFsdWUpICAtPiBUaGlzIz9NT0RVTEV7QXR0cj1WYWx1ZX0KKykuCisJICAgICAgIAorJSUlIHN0YXRpYzogdXNlIG9ubHkgaWYgeW91J3JlIHN1cmUgVGhpcyBpcyBjbGFzcyA/TU9EVUxFIGFuZCBub3QgYSBzdXBlci9zdWJjbGFzcworLWRlZmluZShBVFRSKEF0dHIpLCBUaGlzIz9NT0RVTEUuQXR0cikuCisKKyUlJSBjb252ZW5pZW5jZSBmb3IgaW1wbGVtZW50aW5nIGluc3BlY3QvMQorJSUlIGUuZy4gLT4gImZvbz01IgorLWRlZmluZShGT1JNQVRfQVRUUihBdHRyKSwgICAgIAorCWlvX2xpYjp3cml0ZV9hdG9tKEF0dHIpICsrICI9IiArKyBpb19saWI6cHJpbnQoP0FUVFIoQXR0cikpCispLgorCisKKy1kZWZpbmUoQVRUUl9EVU1NWSwgCisJYXR0cihkdW1teSwgZHVtbXksIGR1bW15LCBkdW1teSkgLT4KKwkgICAgICAgdGhyb3coZHVtbXlfYXR0cl91c2VkKQorKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzY4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsCkBAIC0wLDAgKzEsMTAgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1kZWZpbmUoVkVSU0lPTl9NQVNLLCAxNiNGRkZGMDAwMCkuCistZGVmaW5lKFZFUlNJT05fMSwgMTYjODAwMTAwMDApLgorCistcmVjb3JkKHRCaW5hcnlQcm90b2NvbCwge3N1cGVyfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2xGYWN0b3J5LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbEZhY3RvcnkuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NjkzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2xGYWN0b3J5LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodEJpbmFyeVByb3RvY29sRmFjdG9yeSwge3N1cGVyfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2wuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQyZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sLmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFByb3RvY29sLCB7dHJhbnN9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3Byb3RvY29sL3RQcm90b2NvbEV4Y2VwdGlvbi5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZTcyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsCkBAIC0wLDAgKzEsMTUgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX1VOS05PV04sIDApLgorLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fSU5WQUxJRF9EQVRBLCAxKS4KKy1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX05FR0FUSVZFX1NJWkUsIDIpLgorLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fU0laRV9MSU1JVCwgMykuCistZGVmaW5lKHRQcm90b2NvbEV4Y2VwdGlvbl9CQURfVkVSU0lPTiwgNCkuCisKKy1yZWNvcmQodFByb3RvY29sRXhjZXB0aW9uLCB7c3VwZXIsIHR5cGV9KS4KKworCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2xGYWN0b3J5LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3Byb3RvY29sL3RQcm90b2NvbEZhY3RvcnkuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzdmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2xGYWN0b3J5LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFByb3RvY29sRmFjdG9yeSwge30pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RFcmxTZXJ2ZXIuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RFcmxTZXJ2ZXIuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjY5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9zZXJ2ZXIvdEVybFNlcnZlci5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRFcmxTZXJ2ZXIsIHtzdXBlciwgYWNjZXB0b3IsIGxpc3RlblNvY2tldCwgcG9ydH0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RTZXJ2ZXIuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RTZXJ2ZXIuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMmExMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9zZXJ2ZXIvdFNlcnZlci5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRTZXJ2ZXIsIHtoYW5kbGVyLCBwcm9jZXNzb3IsIHNlcnZlclRyYW5zcG9ydCwgdHJhbnNwb3J0RmFjdG9yeSwgcHJvdG9jb2xGYWN0b3J5fSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9zZXJ2ZXIvdFNpbXBsZVNlcnZlci5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9zZXJ2ZXIvdFNpbXBsZVNlcnZlci5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExNWQwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3NlcnZlci90U2ltcGxlU2VydmVyLmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFNpbXBsZVNlcnZlciwge3N1cGVyfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90QXBwbGljYXRpb25FeGNlcHRpb24uaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmYxNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybApAQCAtMCwwICsxLDE1IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCislIFRBcHBsaWNhdGlvbkV4Y2VwdGlvbgorLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fVU5LTk9XTiwgMCkuCistZGVmaW5lKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbl9VTktOT1dOX01FVEhPRCwgMSkuCistZGVmaW5lKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbl9JTlZBTElEX01FU1NBR0VfVFlQRSwgMikuCistZGVmaW5lKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbl9XUk9OR19NRVRIT0RfTkFNRSwgMykuCistZGVmaW5lKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbl9CQURfU0VRVUVOQ0VfSUQsIDQpLgorLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fTUlTU0lOR19SRVNVTFQsIDUpLgorCistcmVjb3JkKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbiwge3N1cGVyLCB0eXBlfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90RXJsUHJvY2Vzc29yLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RFcmxQcm9jZXNzb3IuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YjkxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90RXJsUHJvY2Vzc29yLmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodEVybFByb2Nlc3Nvciwge3N1cGVyLCBnZW5lcmF0ZWRQcm9jZXNzb3IsIGhhbmRsZXJ9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RFeGNlcHRpb24uaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdEV4Y2VwdGlvbi5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4YTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RFeGNlcHRpb24uaHJsCkBAIC0wLDAgKzEsNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0RXhjZXB0aW9uLCB7bWVzc2FnZX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdFByb2Nlc3Nvci5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90UHJvY2Vzc29yLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDEzOGNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdFByb2Nlc3Nvci5ocmwKQEAgLTAsMCArMSw4IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRQcm9jZXNzb3IsIHt9KS4KKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdGhyaWZ0LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RocmlmdC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZmQzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RocmlmdC5ocmwKQEAgLTAsMCArMSwxMDAgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKyUgbG9jYWwgKHNhbWUgcHJvY2VzcykKKy1kZWZpbmUoTDAoTWV0aG9kKSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbXSkpLgorLWRlZmluZShMMShNZXRob2QsIEFyZzEpLCBvb3A6Y2FsbChUaGlzLCBNZXRob2QsIFtBcmcxXSkpLgorLWRlZmluZShMMihNZXRob2QsIEFyZzEsIEFyZzIpLCBvb3A6Y2FsbChUaGlzLCBNZXRob2QsIFtBcmcxLCBBcmcyXSkpLgorLWRlZmluZShMMyhNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMpLCBvb3A6Y2FsbChUaGlzLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczXSkpLgorLWRlZmluZShMNChNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCBvb3A6Y2FsbChUaGlzLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0XSkpLgorLWRlZmluZShMNShNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCBvb3A6Y2FsbChUaGlzLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1XSkpLgorLWRlZmluZShMNihNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpLCBvb3A6Y2FsbChUaGlzLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2XSkpLgorCislIGxvY2FsIChzYW1lIHByb2Nlc3MpLCBidXQgbm90IFRoaXMgKGUuZy4gdCpGYWN0b3J5KQorLWRlZmluZShGMChPYmosIE1ldGhvZCksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbXSkpLgorLWRlZmluZShGMShPYmosIE1ldGhvZCwgQXJnMSksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMV0pKS4KKy1kZWZpbmUoRjIoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzJdKSkuCistZGVmaW5lKEYzKE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczKSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczXSkpLgorLWRlZmluZShGNChPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNF0pKS4KKy1kZWZpbmUoRjUoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzVdKSkuCistZGVmaW5lKEY2KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2XSkpLgorCislIHJlbW90ZSAoZGlmZmVyZW50IHByb2Nlc3MpCistZGVmaW5lKFJUMChTZXJ2ZXJSZWYsIE1ldGhvZCwgVGltZW91dCksIGdlbl9zZXJ2ZXI6Y2FsbChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtdfSwgVGltZW91dCkpLgorLWRlZmluZShSVDEoU2VydmVyUmVmLCBNZXRob2QsIFRpbWVvdXQsIEFyZzEpLCBnZW5fc2VydmVyOmNhbGwoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMV19LCBUaW1lb3V0KSkuCistZGVmaW5lKFJUMihTZXJ2ZXJSZWYsIE1ldGhvZCwgVGltZW91dCwgQXJnMSwgQXJnMiksIGdlbl9zZXJ2ZXI6Y2FsbChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyXX0sIFRpbWVvdXQpKS4KKy1kZWZpbmUoUlQzKFNlcnZlclJlZiwgTWV0aG9kLCBUaW1lb3V0LCBBcmcxLCBBcmcyLCBBcmczKSwgZ2VuX3NlcnZlcjpjYWxsKFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzNdfSwgVGltZW91dCkpLgorLWRlZmluZShSVDQoU2VydmVyUmVmLCBNZXRob2QsIFRpbWVvdXQsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCBnZW5fc2VydmVyOmNhbGwoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNF19LCBUaW1lb3V0KSkuCistZGVmaW5lKFJUNShTZXJ2ZXJSZWYsIE1ldGhvZCwgVGltZW91dCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSksIGdlbl9zZXJ2ZXI6Y2FsbChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1XX0sIFRpbWVvdXQpKS4KKy1kZWZpbmUoUlQ2KFNlcnZlclJlZiwgTWV0aG9kLCBUaW1lb3V0LCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSwgZ2VuX3NlcnZlcjpjYWxsKFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzZdfSwgVGltZW91dCkpLgorCislIHJlbW90ZSAoZGlmZmVyZW50IHByb2Nlc3MpLCBkZWZhdWx0IHRpbWVvdXQKKy1kZWZpbmUoREVGQVVMVF9USU1FT1VULCA1MDAwKS4KKy1kZWZpbmUoUjAoU2VydmVyUmVmLCBNZXRob2QpLCA/UlQwKFNlcnZlclJlZiwgTWV0aG9kLCA/REVGQVVMVF9USU1FT1VUKSkuCistZGVmaW5lKFIxKFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxKSwgP1JUMShTZXJ2ZXJSZWYsIE1ldGhvZCwgP0RFRkFVTFRfVElNRU9VVCwgQXJnMSkpLgorLWRlZmluZShSMihTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiksID9SVDIoU2VydmVyUmVmLCBNZXRob2QsID9ERUZBVUxUX1RJTUVPVVQsIEFyZzEsIEFyZzIpKS4KKy1kZWZpbmUoUjMoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMpLCA/UlQzKFNlcnZlclJlZiwgTWV0aG9kLCA/REVGQVVMVF9USU1FT1VULCBBcmcxLCBBcmcyLCBBcmczKSkuCistZGVmaW5lKFI0KFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgP1JUNChTZXJ2ZXJSZWYsIE1ldGhvZCwgP0RFRkFVTFRfVElNRU9VVCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCkpLgorLWRlZmluZShSNShTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSksID9SVDUoU2VydmVyUmVmLCBNZXRob2QsID9ERUZBVUxUX1RJTUVPVVQsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpKS4KKy1kZWZpbmUoUjYoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpLCA/UlQ2KFNlcnZlclJlZiwgTWV0aG9kLCA/REVGQVVMVF9USU1FT1VULCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSkuCisKKyUgcmVtb3RlIChkaWZmZXJlbnQgcHJvY2VzcyksIGNhc3QKKy1kZWZpbmUoQzAoU2VydmVyUmVmLCBNZXRob2QpLCBnZW5fc2VydmVyOmNhc3QoU2VydmVyUmVmLCB7TWV0aG9kLCBbXX0pKS4KKy1kZWZpbmUoQzEoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEpLCBnZW5fc2VydmVyOmNhc3QoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMV19KSkuCistZGVmaW5lKEMyKFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxLCBBcmcyKSwgZ2VuX3NlcnZlcjpjYXN0KFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzEsIEFyZzJdfSkpLgorLWRlZmluZShDMyhTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMyksIGdlbl9zZXJ2ZXI6Y2FzdChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczXX0pKS4KKy1kZWZpbmUoQzQoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCBnZW5fc2VydmVyOmNhc3QoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNF19KSkuCistZGVmaW5lKEM1KFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSwgZ2VuX3NlcnZlcjpjYXN0KFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzVdfSkpLgorLWRlZmluZShDNihTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiksIGdlbl9zZXJ2ZXI6Y2FzdChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2XX0pKS4KKworJSBzcGF3biBuZXcgc2VydmVyCislJSAtZGVmaW5lKE5FVyhDbGFzcywgQXJncyksIAkJCQkJCSAgICAgICAgJSUKKyUlIAlnZW5fc2VydmVyOnN0YXJ0X2xpbmsodGhyaWZ0X29vcF9zZXJ2ZXIsIHtDbGFzcywgQXJnc30sIFtdKSkuCSAgICAgICAgJSUKKyUlIG1vdmVkIHRvIG9vcDpzdGFydF9uZXcvMgorCislIG9sZAorJSUgLWRlZmluZShNMChPYmosIE1ldGhvZCksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbXSkpLgkJCQkJCQkJCQkgICAgICUlCislJSAtZGVmaW5lKE0xKE9iaiwgTWV0aG9kLCBBcmcxKSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxXSkpLgkJCQkJCQkJICAgICAlJQorJSUgLWRlZmluZShNMihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMSwgQXJnMl0pKS4JCQkJCQkJICAgICAlJQorJSUgLWRlZmluZShNMyhPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMyksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnM10pKS4JCQkJCSAgICAgJSUKKyUlIC1kZWZpbmUoTTQoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzRdKSkuCQkJCSAgICAgJSUKKyUlIC1kZWZpbmUoTTUoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzVdKSkuCQkgICAgICUlCislJSAtZGVmaW5lKE02KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2XSkpLgkgICAgICUlCisKKyUlJSBpbXBsaWNpdCBjYWxsOiBvbGQKKworJSUgLWRlZmluZShNMChPYmosIE1ldGhvZCksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmopKSkuCQkJCQkJCQkJCSAlJQorJSUgLWRlZmluZShNMShPYmosIE1ldGhvZCwgQXJnMSksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEpKSkuCQkJCQkJCQkJICUlCislJSAtZGVmaW5lKE0yKE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyKSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMikpKS4JCQkJCQkJICUlCislJSAtZGVmaW5lKE0zKE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczKSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMiwgQXJnMykpKS4JCQkJCQkgJSUKKyUlIC1kZWZpbmUoTTQoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSkpLgkJCQkgJSUKKyUlIC1kZWZpbmUoTTUoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSkpLgkJCSAlJQorJSUgLWRlZmluZShNNihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpKSkuCSAlJQorCislJSBUVHlwZQorLWRlZmluZSh0VHlwZV9TVE9QLCAwKS4KKy1kZWZpbmUodFR5cGVfVk9JRCwgMSkuCistZGVmaW5lKHRUeXBlX0JPT0wsIDIpLgorLWRlZmluZSh0VHlwZV9CWVRFLCAzKS4KKy1kZWZpbmUodFR5cGVfRE9VQkxFLCA0KS4KKy1kZWZpbmUodFR5cGVfSTE2LCA2KS4KKy1kZWZpbmUodFR5cGVfSTMyLCA4KS4KKy1kZWZpbmUodFR5cGVfSTY0LCAxMCkuCistZGVmaW5lKHRUeXBlX1NUUklORywgMTEpLgorLWRlZmluZSh0VHlwZV9TVFJVQ1QsIDEyKS4KKy1kZWZpbmUodFR5cGVfTUFQLCAxMykuCistZGVmaW5lKHRUeXBlX1NFVCwgMTQpLgorLWRlZmluZSh0VHlwZV9MSVNULCAxNSkuCisKKyUgdG1lc3NhZ2V0eXBlCistZGVmaW5lKHRNZXNzYWdlVHlwZV9DQUxMLCAxKS4KKy1kZWZpbmUodE1lc3NhZ2VUeXBlX1JFUExZLCAyKS4KKy1kZWZpbmUodE1lc3NhZ2VUeXBlX0VYQ0VQVElPTiwgMykuCisKKyUgVFByb2Nlc3NvcgorJSA/CisKKyUgLWluY2x1ZGUoInRBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwiKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNzM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuaHJsCkBAIC0wLDAgKzEsNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0QnVmZmVyZWRUcmFuc3BvcnQsIHtzdXBlciwgdHJhbnNwb3J0LCB3YnVmfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0RmFjdG9yeS5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0RmFjdG9yeS5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E0Y2RjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodEJ1ZmZlcmVkVHJhbnNwb3J0RmFjdG9yeSwge3N1cGVyfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEVybEFjY2VwdG9yLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90RXJsQWNjZXB0b3IuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2ZlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEVybEFjY2VwdG9yLmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodEVybEFjY2VwdG9yLCB7c3VwZXIsIHNlcnZlclBpZCwgdHJhbnNwb3J0RmFjdG9yeSwgcHJvdG9jb2xGYWN0b3J5fSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjMjVhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFNlcnZlclNvY2tldCwge3N1cGVyLCBwb3J0LCBoYW5kbGV9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdiYmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RTZXJ2ZXJUcmFuc3BvcnQuaHJsCkBAIC0wLDAgKzEsNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0U2VydmVyVHJhbnNwb3J0LCB7fSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNvY2tldC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNvY2tldC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxN2Q1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90U29ja2V0LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFNvY2tldCwge3N1cGVyLCBob3N0LCBwb3J0LCBoYW5kbGV9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90VHJhbnNwb3J0LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90VHJhbnNwb3J0LmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTg5NDEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RUcmFuc3BvcnQuaHJsCkBAIC0wLDAgKzEsNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0VHJhbnNwb3J0LCB7fSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2MGFhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybApAQCAtMCwwICsxLDEzIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fVU5LTk9XTiwgMCkuCistZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fTk9UX09QRU4sIDEpLgorLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX0FMUkVBRFlfT1BFTiwgMikuCistZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fVElNRURfT1VULCAzKS4KKy1kZWZpbmUodFRyYW5zcG9ydEV4Y2VwdGlvbl9FTkRfT0ZfRklMRSwgNCkuCisKKy1yZWNvcmQodFRyYW5zcG9ydEV4Y2VwdGlvbiwge3N1cGVyLCB0eXBlfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFRyYW5zcG9ydEZhY3RvcnkuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg4MTQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFRyYW5zcG9ydEZhY3RvcnksIHt9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zZXJ2ZXIuc2ggYi9saWIvZXJsL2xpYi90aHJpZnQvc2VydmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMmMwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc2VydmVyLnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitlY2hvICJDb21waWxpbmcgdXNlci8gYW5kIHR1dG9yaWFsL2dlbi1lcmwvLi4uIgorbWtkaXIgZWJpbi11c2VyCitlcmxjIC1JIGluY2x1ZGUgLUkgdHV0b3JpYWwvZ2VuLWVybCAtbyBlYmluLXVzZXIgdXNlci8qLmVybCB0dXRvcmlhbC9nZW4tZXJsLyouZXJsICYmCitlcmwgLXBhIGViaW4gLXBhIGViaW4tdXNlciAtcyBhcHBsaWNhdGlvbiBzdGFydCB0aHJpZnQgIyAtcyBuaCBzdGFydApkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9NYWtlZmlsZSBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzNTJjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTIgQEAKKyMgJElkOiBNYWtlZmlsZSx2IDEuMyAyMDA0LzA4LzEzIDE2OjM1OjU5IG1sb2dhbiBFeHAgJAorIworaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9vdHAubWsKK2luY2x1ZGUgLi4vLi4vLi4vYnVpbGQvY29sb3JzLm1rCitpbmNsdWRlIC4uLy4uLy4uL2J1aWxkL2J1aWxkdGFyZ2V0cy5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwbGljYXRpb24gdmVyc2lvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2luY2x1ZGUgLi4vdnNuLm1rCitBUFBfTkFNRT10aHJpZnQKK1BGWD10aHJpZnQKK1ZTTj0kKFRIUklGVF9WU04pCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnN0YWxsIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uCisjIFdBUk5JTkc6IElOU1RBTExfRElSIHRoZSBjb21tYW5kIHRvIGluc3RhbGwgYSBkaXJlY3RvcnkuCisjICAgICAgICAgIElOU1RBTExfRFNUIGlzIHRoZSB0YXJnZXQgZGlyZWN0b3J5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU1RBTExfRFNUID0gJChFUkxBTkdfT1RQKS9saWIvJChBUFBfTkFNRSktJChWU04pCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUYXJnZXQgU3BlY3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK01PRFVMRVMgPSAkKHNoZWxsIGZpbmQgLW5hbWUgXCouZXJsIHwgc2VkIHM6XlxcLi86OiB8IHNlZCBzL1xcLmVybC8vKQorTU9EVUxFU19TVFJJTkdfTElTVCA9ICQoc2hlbGwgZmluZCAtbmFtZSBcKi5lcmwgfCBzZWQgczpeXFwuLzpcIjogfCBzZWQgcy9cXC5lcmwvXCIsLykKKworSFJMX0ZJTEVTPQorSU5URVJOQUxfSFJMX0ZJTEVTPSAkKEFQUF9OQU1FKS5ocmwKK0VSTF9GSUxFUz0gJChNT0RVTEVTOiU9JS5lcmwpCitET0NfRklMRVM9JChFUkxfRklMRVMpCisKK0FQUF9GSUxFPSAkKEFQUF9OQU1FKS5hcHAKK0FQUFVQX0ZJTEU9ICQoQVBQX05BTUUpLmFwcHVwCisKK0FQUF9TUkM9ICQoQVBQX0ZJTEUpLnNyYworQVBQVVBfU1JDPSAkKEFQUFVQX0ZJTEUpLnNyYworCitBUFBfVEFSR0VUPSAkKEVCSU4pLyQoQVBQX0ZJTEUpCitBUFBVUF9UQVJHRVQ9ICQoRUJJTikvJChBUFBVUF9GSUxFKQorCitCRUFNUz0gJChNT0RVTEVTOiU9JChFQklOKS8lLiQoRU1VTEFUT1IpKQorVEFSR0VUX0ZJTEVTPSAkKEJFQU1TKSAkKEFQUF9UQVJHRVQpICQoQVBQVVBfVEFSR0VUKQorCitXRUJfVEFSR0VUPS92YXIveWF3cy93d3cvJChBUFBfTkFNRSkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZMQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRVJMX0ZMQUdTICs9CitFUkxfQ09NUElMRV9GTEFHUyArPSAtSS4uL2luY2x1ZGUgLUkuLi8uLi9mc2xpYi9pbmNsdWRlIC1JLi4vLi4vc3lzdGVtX3N0YXR1cy9pbmNsdWRlIAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGFyZ2V0cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FsbCBkZWJ1ZyBvcHQ6ICQoRUJJTikgJChUQVJHRVRfRklMRVMpIAorCisjJChFQklOKS9ybV9sb2dnZXIuYmVhbTogJChBUFBfTkFNRSkuaHJsCitpbmNsdWRlIC4uLy4uLy4uL2J1aWxkL2RvY3MubWsKKworIyBOb3RlOiBJbiB0aGUgb3Blbi1zb3VyY2UgYnVpbGQgY2xlYW4gbXVzdCBub3QgZGVzdHJveSB0aGUgcHJlbG9hZGVkCisjIGJlYW0gZmlsZXMuCitjbGVhbjoKKwlybSAtZiAkKFRBUkdFVF9GSUxFUykKKwlybSAtZiBjb3JlCisJcm0gLXJmICQoRUJJTikKKwlybSAtcmYgKmh0bWwKKworJChFQklOKToKKwlta2RpciAkKEVCSU4pCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTcGVjaWFsIEJ1aWxkIFRhcmdldHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiskKEFQUF9UQVJHRVQpOiAkKEFQUF9TUkMpIC4uL3Zzbi5tayAkKEJFQU1TKQorCXNlZCAtZSAnczslVlNOJTskKFZTTik7JyBcCisJCS1lICdzOyVQRlglOyQoUEZYKTsnIFwKKwkJLWUgJ3M7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTsnIFwKKwkJLWUgJ3M7JU1PRFVMRVMlOyVNT0RVTEVTJSQoTU9EVUxFU19TVFJJTkdfTElTVCk7JyBcCisJCSQ8ID4gJDwiLnRtcCIgCisJc2VkIC1lICdzLyVNT0RVTEVTJVwoLipcKSwvXDEvJyBcCisJCSQ8Ii50bXAiID4gJEAgCisJcm0gJDwiLnRtcCIKKworCiskKEFQUFVQX1RBUkdFVCk6ICQoQVBQVVBfU1JDKSAuLi92c24ubWsKKwlzZWQgLWUgJ3M7JVZTTiU7JChWU04pOycgJDwgPiAkQAorCiskKFdFQl9UQVJHRVQpOiAuLi9tYXJrdXAvKiAKKwlybSAtcmYgJChXRUJfVEFSR0VUKSAKKwlta2RpciAkKFdFQl9UQVJHRVQpIAorCWNwIC1yIC4uL21hcmt1cC8gJChXRUJfVEFSR0VUKQorCWNwIC1yIC4uL3NraW5zLyAkKFdFQl9UQVJHRVQpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnN0YWxsIFRhcmdldAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitpbnN0YWxsOiBhbGwgJChXRUJfVEFSR0VUKQorIwkkKElOU1RBTExfRElSKSAkKElOU1RBTExfRFNUKS9zcmMKKyMJJChJTlNUQUxMX0RBVEEpICQoRVJMX0ZJTEVTKSAkKElOU1RBTExfRFNUKS9zcmMKKyMJJChJTlNUQUxMX0RBVEEpICQoSU5URVJOQUxfSFJMX0ZJTEVTKSAkKElOU1RBTExfRFNUKS9zcmMKKyMJJChJTlNUQUxMX0RJUikgJChJTlNUQUxMX0RTVCkvaW5jbHVkZQorIwkkKElOU1RBTExfREFUQSkgJChIUkxfRklMRVMpICQoSU5TVEFMTF9EU1QpL2luY2x1ZGUKKyMJJChJTlNUQUxMX0RJUikgJChJTlNUQUxMX0RTVCkvZWJpbgorIwkkKElOU1RBTExfREFUQSkgJChUQVJHRVRfRklMRVMpICQoSU5TVEFMTF9EU1QpL2ViaW4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvb29wLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvb29wLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjZmMzRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9vb3AuZXJsCkBAIC0wLDAgKzEsMTQ2IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKG9vcCkuCisKKy1leHBvcnQoW2dldC8yLCBzZXQvMywgY2FsbC8yLCBjYWxsLzMsIGluc3BlY3QvMSwgc3RhcnRfbmV3LzJdKS4KKy1leHBvcnQoW2JlaGF2aW91cl9pbmZvLzFdKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworJSUlCislJSUgYmVoYXZpb3IgZGVmaW5pdGlvbgorJSUlCisKK2JlaGF2aW91cl9pbmZvKGNhbGxiYWNrcykgLT4gCisgICAgWyAKKyAgICAgIHthdHRyLCA0fSwgCisgICAgICB7c3VwZXIsIDB9IAorICAgIF07CitiZWhhdmlvdXJfaW5mbyhfKSAtPiAKKyAgICB1bmRlZmluZWQuCisKKyUlCisKKy1kZWZpbmUoVFJJRUQsIGxpc3RzOnJldmVyc2UoW1RyeU1vZHVsZXxUcmllZFJldl0pKS4KKworJSUgbm8gc3VwZXIgYXR0ciBkZWZpbmVkCistZGVmaW5lKE5PU1VQRVJPQkosIGV4aXQoe21pc3NpbmdfYXR0cl9zdXBlciwge2luc3BlY3QoT2JqKSwgP1RSSUVEfX0pKS4KKworLWRlZmluZShOT01FVEhPRCwgZXhpdCh7bWlzc2luZ19tZXRob2QsIHtNZXRob2QsIGluc3BlY3QoT2JqKSwgdGwoQXJncyksID9UUklFRH19KSkuCisKKy1kZWZpbmUoTk9BVFRSLCBleGl0KHttaXNzaW5nX2F0dHIsIHtoZCh0bChBcmdzKSksIGluc3BlY3QoRmlyc3RPYmopLCA/VFJJRUR9fSkpLgorCistZGVmaW5lKE5PQVRUUl9TRVQsIGV4aXQoe21pc3NpbmdfYXR0ciwge0ZpZWxkLCBpbnNwZWN0KE9iaiksICIuLiIgJSUgVE9ETzogZ2l2ZSBhIGJhY2t0cmFjZQorCQkJfX0pKS4KKworCislJSUgZ2V0KE9iaiwgRmllbGQpIC0+IHRlcm0oKQorJSUlIGxvb2tzIHVwIEZpZWxkIGluIE9iaiBvciBpdHMgYW5jZXN0b3Igb2JqZWN0cworCitnZXQoT2JqLCBGaWVsZCkgLT4KKyAgICBjYWxsKE9iaiwgYXR0ciwgW2dldCwgRmllbGQsIGdldF0pLgorCitzZXQoT2JqLCBGaWVsZCwgVmFsdWUpIC0+ICUlIFRPRE86IGNvdWxkIGJlIHRhaWwtcmVjdXJzaXZlCisgICAgTW9kdWxlID0gP0NMQVNTKE9iaiksCisgICAgdHJ5CisJTW9kdWxlOmF0dHIoT2JqLCBzZXQsIEZpZWxkLCBWYWx1ZSkKKyAgICBjYXRjaAorCWVycm9yOktpbmQgd2hlbiBLaW5kID09IHVuZGVmOyBLaW5kID09IGZ1bmN0aW9uX2NsYXVzZSAtPgorCSAgICBjYXNlIGdldF9zdXBlcm9iamVjdChPYmopIG9mCisJCXsgb2ssIFN1cGVyb2JqIH0gLT4KKwkJICAgIFN1cGVyMSA9IHNldChTdXBlcm9iaiwgRmllbGQsIFZhbHVlKSwKKwkJICAgIHRyeQorCQkJTW9kdWxlOmF0dHIoT2JqLCBzZXQsIHN1cGVyLCBTdXBlcjEpCisJCSAgICBjYXRjaCAlJSBUT0RPKGNwaXJvKTogcmVtb3ZlIGNoZWNrCisJCQlYIC0+IGV4aXQoe2J1cm5zYXVjZSwgWH0pCisJCSAgICBlbmQ7CisJCW5vbmUgLT4KKwkJICAgID9OT0FUVFJfU0VUCisJICAgIGVuZAorICAgIGVuZC4KKyAgICAKKworJSUlIEMrKyAgICAgICAgICAgICAgICAgICA8LT4gRXJsYW5nCislJSUgY2xhc3NlcyAgICAgICAgICAgICAgICAgICBtb2R1bGVzCislJSUgICBjbGFzcyBiIDogcHVibGljIGEgICAgICAgIGE6c3VwZXIoKSAtPiBiLgorJSUlICAgCisKK2dldF9zdXBlcm9iamVjdChPYmopIC0+CisgICAgdHJ5CisJe29rLCAoP0NMQVNTKE9iaikpOmF0dHIoT2JqLCBnZXQsIHN1cGVyLCBnZXQpfQorICAgIGNhdGNoCisJZXJyb3I6S2luZCB3aGVuIEtpbmQgPT0gdW5kZWY7IEtpbmQgPT0gZnVuY3Rpb25fY2xhdXNlIC0+CisJICAgIG5vbmUKKyAgICBlbmQuCisKK2NhbGwoT2JqLCBNZXRob2QsIEFyZ3NQcm9wZXIpIC0+CisgICAgJSUgaW86Zm9ybWF0KCJjYWxsIGNhbGxlZDogT2JqPX5wIE1ldGhvZD1+cCBBcmdzUHJvcGVyPX5wfm4iLCBbb29wOmluc3BlY3QoT2JqKSwgTWV0aG9kLCBBcmdzUHJvcGVyXSksCisgICAgQXJncyA9IFtPYmp8QXJnc1Byb3Blcl0sICUlIHByZXBlbmQgVGhpcyB0byBhcmdzCisgICAgVHJ5TW9kdWxlID0gP0NMQVNTKE9iaiksCisgICAgY2FsbF9sb29wKE9iaiwgTWV0aG9kLCBBcmdzLCBUcnlNb2R1bGUsIFtdLCBPYmopLgorCitjYWxsKE9iaiwgTWV0aG9kKSAtPiAKKyAgICBjYWxsKE9iaiwgTWV0aG9kLCBbXSkuCisKK2NhbGxfbG9vcChPYmosIE1ldGhvZCwgQXJncywgVHJ5TW9kdWxlLCBUcmllZFJldiwgRmlyc3RPYmopIC0+CisgICAgdHJ5CisJJSUgaW86Zm9ybWF0KCJjYWxsX2xvb3B+biB+cH5uIH5wfm4gfnB+biB+cH5uIH5uIiwgW09iaiwgTWV0aG9kLCBBcmdzLCBUcnlNb2R1bGVdKSwKKwlhcHBseShUcnlNb2R1bGUsIE1ldGhvZCwgQXJncykKKyAgICBjYXRjaAorCWVycm9yOktpbmQgd2hlbiBLaW5kID09IHVuZGVmOyBLaW5kID09IGZ1bmN0aW9uX2NsYXVzZSAtPgorCSAgICBjYXNlIHsgVHJ5TW9kdWxlOnN1cGVyKCksIE1ldGhvZCB9IG9mIAorCQl7IG5vbmUsIGF0dHIgfSAtPgorCQkgICAgP05PQVRUUjsKKwkJCisJCXsgbm9uZSwgXyB9IC0+IAorCQkgICAgP05PTUVUSE9EOworCQkKKwkJeyBTdXBlcmNsYXNzLCBhdHRyIH0gLT4gCisJCSAgICAlJSBsb29rIGZvciBhdHRycyBpbiB0aGUgInN1cGVyIG9iamVjdCIKKwkJICAgIAorCQkgICAgY2FzZSBnZXRfc3VwZXJvYmplY3QoT2JqKSBvZgorCQkJe29rLCBTdXBlcm9ian0gd2hlbiAoVHJ5TW9kdWxlID09ID9DTEFTUyhPYmopKSAtPiAKKwkJCSAgICAlJSByZXBsYWNlIFRoaXMgd2l0aCBTdXBlcm9iagorCQkJICAgIE5ld0FyZ3MgPSBbU3VwZXJvYmp8dGwoQXJncyldLCAKKwkJCSAgICBjYWxsX2xvb3AoU3VwZXJvYmosIE1ldGhvZCwgTmV3QXJncywgCisJCQkJICAgICAgU3VwZXJjbGFzcywgW1RyeU1vZHVsZXxUcmllZFJldl0sIEZpcnN0T2JqKTsKKwkJCQorCQkJe29rLCBfU3VwZXJvYmp9IC0+ICUgZmFpbGVkIGd1YXJkIFRPRE8oY3Bpcm8pOiByZW1vdmVtZQorCQkJICAgIGV4aXQob2hfbm9lcyk7CisJCQkKKwkJCW5vbmUgICAgLT4gP05PU1VQRVJPQkoKKwkJICAgIGVuZDsKKwkJCisJCXsgU3VwZXJDbGFzcywgXyB9IC0+CisJCSAgICBjYWxsX2xvb3AoT2JqLCBNZXRob2QsIEFyZ3MsIAorCQkJICAgICAgU3VwZXJDbGFzcywgW1RyeU1vZHVsZXxUcmllZFJldl0sIEZpcnN0T2JqKQorCSAgICBlbmQKKyAgICBlbmQuCisgICAgCitpbnNwZWN0KE9iaikgLT4KKyAgICBEZWVwTGlzdCA9IGluc3BlY3RfbG9vcChPYmosICIjPCIpLAorICAgIGxpc3RzOmZsYXR0ZW4oRGVlcExpc3QpLgorCitpbnNwZWN0X2xvb3AoT2JqLCBTdHIpIC0+CisgICAgTmV3ID0gCisJYXRvbV90b19saXN0KD9DTEFTUyhPYmopKSArKworCSI6ICIgKysKKwkoP0NMQVNTKE9iaikpOmluc3BlY3QoT2JqKSwKKyAgICAKKyAgICBjYXNlIGdldF9zdXBlcm9iamVjdChPYmopIG9mCisJeyBvaywgU3VwZXJvYmogfSAtPgorCSAgICBpbnNwZWN0X2xvb3AoU3VwZXJvYmosIFN0ciArKyBOZXcgKysgIiB8ICIpOworCW5vbmUgLT4KKwkgICAgU3RyICsrIE5ldyArKyAiPiIKKyAgICBlbmQuCisgICAgCislJSBUT0RPOiB2b2lkcyB0YWtlIG9ubHkgb2sgYXMgcmV0dXJuPyAKK3N0YXJ0X25ldyhDbGFzcywgQXJncykgLT4KKyAgICBjYXNlIGdlbl9zZXJ2ZXI6c3RhcnRfbGluayh0aHJpZnRfb29wX3NlcnZlciwge0NsYXNzLCBBcmdzfSwgW10pIG9mCisJe29rLCBQaWR9IC0+CisJICAgIFBpZAorICAgIGVuZC4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ1Mjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuZXJsCkBAIC0wLDAgKzEsMjE0IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRCaW5hcnlQcm90b2NvbCkuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgicHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoWworICBuZXcvMSwKKworICB3cml0ZU1lc3NhZ2VCZWdpbi80LAorICB3cml0ZUZpZWxkQmVnaW4vNCwgd3JpdGVGaWVsZFN0b3AvMSwKKyAgd3JpdGVNYXBCZWdpbi80LAorICB3cml0ZUxpc3RCZWdpbi8zLAorICB3cml0ZVNldEJlZ2luLzMsCisKKyAgd3JpdGVCb29sLzIsIHdyaXRlQnl0ZS8yLCB3cml0ZUkxNi8yLCB3cml0ZUkzMi8yLCAKKyAgd3JpdGVJNjQvMiwgd3JpdGVEb3VibGUvMiwgd3JpdGVTdHJpbmcvMiwgCisKKyAgcmVhZE1lc3NhZ2VCZWdpbi8xLCAKKyAgcmVhZEZpZWxkQmVnaW4vMSwgCisgIHJlYWRNYXBCZWdpbi8xLCAKKyAgcmVhZExpc3RCZWdpbi8xLCAKKyAgcmVhZFNldEJlZ2luLzEsIAorCisgIHJlYWRCb29sLzEsIHJlYWRCeXRlLzEsIHJlYWRJMTYvMSwgcmVhZEkzMi8xLCAKKyAgcmVhZEk2NC8xLCByZWFkRG91YmxlLzEsIHJlYWRTdHJpbmcvMQorXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0UHJvdG9jb2wuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoX1RoaXMpIC0+CisgICAgIiIuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoVHJhbnMpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KFRyYW5zKSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlcn0uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCit3cml0ZU1lc3NhZ2VCZWdpbihUaGlzLCBOYW1lLCBUeXBlLCBTZXFpZCkgLT4KKyAgICA/TDEod3JpdGVJMzIsID9WRVJTSU9OXzEgYm9yIFR5cGUpLAorICAgID9MMSh3cml0ZVN0cmluZywgTmFtZSksCisgICAgP0wxKHdyaXRlSTMyLCBTZXFpZCksCisgICAgb2suCisKK3dyaXRlRmllbGRCZWdpbihUaGlzLCBfTmFtZSwgVHlwZSwgSWQpIC0+CisgICAgP0wxKHdyaXRlQnl0ZSwgVHlwZSksCisgICAgP0wxKHdyaXRlSTE2LCBJZCksCisgICAgb2suCisKK3dyaXRlRmllbGRTdG9wKFRoaXMpIC0+CisgICAgP0wxKHdyaXRlQnl0ZSwgP3RUeXBlX1NUT1ApLAorICAgIG9rLgorCit3cml0ZU1hcEJlZ2luKFRoaXMsIEt0eXBlLCBWdHlwZSwgU2l6ZSkgLT4KKyAgICA/TDEod3JpdGVCeXRlLCBLdHlwZSksCisgICAgP0wxKHdyaXRlQnl0ZSwgVnR5cGUpLAorICAgID9MMSh3cml0ZUkzMiwgU2l6ZSksCisgICAgb2suCisKK3dyaXRlTGlzdEJlZ2luKFRoaXMsIEV0eXBlLCBTaXplKSAtPgorICAgID9MMSh3cml0ZUJ5dGUsIEV0eXBlKSwKKyAgICA/TDEod3JpdGVJMzIsIFNpemUpLAorICAgIG9rLgorCit3cml0ZVNldEJlZ2luKFRoaXMsIEV0eXBlLCBTaXplKSAtPgorICAgID9MMSh3cml0ZUJ5dGUsIEV0eXBlKSwKKyAgICA/TDEod3JpdGVJMzIsIFNpemUpLAorICAgIG9rLgorCislCisKK3dyaXRlQm9vbChUaGlzLCBCb29sKSAtPgorICAgIGNhc2UgQm9vbCBvZiAKKwl0cnVlICAtPiA/TDEod3JpdGVCeXRlLCAxKTsKKwlmYWxzZSAtPiA/TDEod3JpdGVCeXRlLCAwKQorICAgIGVuZC4KKword3JpdGVCeXRlKFRoaXMsIEJ5dGUpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA/UjEoVHJhbnMsIHdyaXRlLCBiaW5hcnlfdG9fbGlzdCg8PEJ5dGU6OC9iaWc+PikpLgorCit3cml0ZUkxNihUaGlzLCBJMTYpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA/UjEoVHJhbnMsIHdyaXRlLCBiaW5hcnlfdG9fbGlzdCg8PEkxNjoxNi9iaWc+PikpLgorCit3cml0ZUkzMihUaGlzLCBJMzIpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA/UjEoVHJhbnMsIHdyaXRlLCBiaW5hcnlfdG9fbGlzdCg8PEkzMjozMi9iaWc+PikpLgorCit3cml0ZUk2NChUaGlzLCBJNjQpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA/UjEoVHJhbnMsIHdyaXRlLCBiaW5hcnlfdG9fbGlzdCg8PEk2NDo2NC9iaWc+PikpLgorCit3cml0ZURvdWJsZShUaGlzLCBEb3VibGUpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA/UjEoVHJhbnMsIHdyaXRlLCBiaW5hcnlfdG9fbGlzdCg8PERvdWJsZTo2NC9iaWc+PikpLgorCit3cml0ZVN0cmluZyhUaGlzLCBTdHIpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA/TDEod3JpdGVJMzIsIGxlbmd0aChTdHIpKSwKKyAgICA/UjEoVHJhbnMsIHdyaXRlLCBTdHIpLgorCislCisKK3JlYWRNZXNzYWdlQmVnaW4oVGhpcykgLT4KKyAgICBWZXJzaW9uID0gP0wwKHJlYWRJMzIpLAorICAgIGlmIAorCShWZXJzaW9uIGJhbmQgP1ZFUlNJT05fTUFTSykgLz0gP1ZFUlNJT05fMSAtPgorCSAgICB0aHJvdyh0UHJvdG9jb2xFeGNlcHRpb246bmV3KD90UHJvdG9jb2xFeGNlcHRpb25fQkFEX1ZFUlNJT04sCisJCQkJCSAiTWlzc2luZyB2ZXJzaW9uIGlkZW50aWZpZXIiKSk7CisJdHJ1ZSAtPiBvaworICAgIGVuZCwKKyAgICBUeXBlID0gVmVyc2lvbiBiYW5kIDE2IzAwMDAwMGZmLAorICAgIE5hbWUgID0gP0wwKHJlYWRTdHJpbmcpLAorICAgIFNlcWlkID0gP0wwKHJlYWRJMzIpLAorICAgIHsgTmFtZSwgVHlwZSwgU2VxaWQgfS4KKworcmVhZEZpZWxkQmVnaW4oVGhpcykgLT4KKyAgICBUeXBlID0gP0wwKHJlYWRCeXRlKSwKKyAgICBjYXNlIFR5cGUgb2YgCisJP3RUeXBlX1NUT1AgLT4KKwkgICAgeyBuaWwsIFR5cGUsIDAgfTsgJSBXQVRDSAorCV8gLT4KKwkgICAgSWQgPSA/TDAocmVhZEkxNiksCisJICAgIHsgbmlsLCBUeXBlLCBJZCB9CisgICAgZW5kLgorCityZWFkTWFwQmVnaW4oVGhpcykgLT4KKyAgICBLdHlwZSA9ID9MMChyZWFkQnl0ZSksCisgICAgVnR5cGUgPSA/TDAocmVhZEJ5dGUpLAorICAgIFNpemUgID0gP0wwKHJlYWRJMzIpLAorICAgIHsgS3R5cGUsIFZ0eXBlLCBTaXplIH0uCisKK3JlYWRMaXN0QmVnaW4oVGhpcykgLT4KKyAgICBFdHlwZSA9ID9MMChyZWFkQnl0ZSksCisgICAgU2l6ZSAgPSA/TDAocmVhZEkzMiksCisgICAgeyBFdHlwZSwgU2l6ZSB9LgorCityZWFkU2V0QmVnaW4oVGhpcykgLT4KKyAgICBFdHlwZSA9ID9MMChyZWFkQnl0ZSksCisgICAgU2l6ZSAgPSA/TDAocmVhZEkzMiksCisgICAgeyBFdHlwZSwgU2l6ZSB9LgorCislCisKK3JlYWRCb29sKFRoaXMpIC0+CisgICAgQnl0ZSA9ID9MMChyZWFkQnl0ZSksCisgICAgKEJ5dGUgLz0gMCkuCisKK3JlYWRCeXRlKFRoaXMpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA8PFZhbDo4L2ludGVnZXItc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/UjEoVHJhbnMsIHJlYWRBbGwsIDEpLAorICAgIFZhbC4KKworcmVhZEkxNihUaGlzKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgPDxWYWw6MTYvaW50ZWdlci1zaWduZWQtYmlnLCBfL2JpbmFyeT4+ICA9ID9SMShUcmFucywgcmVhZEFsbCwgMiksCisgICAgVmFsLgorCityZWFkSTMyKFRoaXMpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA8PFZhbDozMi9pbnRlZ2VyLXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP1IxKFRyYW5zLCByZWFkQWxsLCA0KSwKKyAgICBWYWwuCisKK3JlYWRJNjQoVGhpcykgLT4KKyAgICBUcmFucyA9IG9vcDpnZXQoVGhpcywgdHJhbnMpLAorICAgIDw8VmFsOjY0L2ludGVnZXItc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/UjEoVHJhbnMsIHJlYWRBbGwsIDgpLAorICAgIFZhbC4KKworcmVhZERvdWJsZShUaGlzKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgPDxWYWw6NjQvZmxvYXQtc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/UjEoVHJhbnMsIHJlYWRBbGwsIDgpLAorICAgIFZhbC4KKworcmVhZFN0cmluZyhUaGlzKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgU3ogICAgPSA/TDAocmVhZEkzMiksCisgICAgYmluYXJ5X3RvX2xpc3QoP1IxKFRyYW5zLCByZWFkQWxsLCBTeikpLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2xGYWN0b3J5LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3ZmE1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5lcmwKQEAgLTAsMCArMSw1NyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0QmluYXJ5UHJvdG9jb2xGYWN0b3J5KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJwcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsIikuCistaW5jbHVkZSgicHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBnZXRQcm90b2NvbC8yXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0UHJvdG9jb2xGYWN0b3J5LgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KF9UaGlzKSAtPgorICAgICIiLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KCkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoKSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlcn0uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCitnZXRQcm90b2NvbChfVGhpcywgVHJhbnMpIC0+CisgICAgb29wOnN0YXJ0X25ldyh0QmluYXJ5UHJvdG9jb2wsIFtUcmFuc10pLgorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbC5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdFByb3RvY29sLmVybApAQCAtMCwwICsxLDIxNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0UHJvdG9jb2wpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RQcm90b2NvbC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKyUlIC1leHBvcnQoW2ludGVyZmFjZS8xXSkuCSAgCSAgICAgICAgICAgICAlJQorCistZXhwb3J0KFsKKyAgbmV3LzEsCisgIHNraXAvMiwKKworICB3cml0ZU1lc3NhZ2VCZWdpbi80LCB3cml0ZU1lc3NhZ2VFbmQvMSwKKyAgd3JpdGVTdHJ1Y3RCZWdpbi8yLCB3cml0ZVN0cnVjdEVuZC8xLAorICB3cml0ZUZpZWxkQmVnaW4vNCwgd3JpdGVGaWVsZEVuZC8xLCB3cml0ZUZpZWxkU3RvcC8xLAorICB3cml0ZU1hcEJlZ2luLzQsIHdyaXRlTWFwRW5kLzEsCisgIHdyaXRlTGlzdEJlZ2luLzMsIHdyaXRlTGlzdEVuZC8xLAorICB3cml0ZVNldEJlZ2luLzMsIHdyaXRlU2V0RW5kLzEsCisKKyAgd3JpdGVCb29sLzIsIHdyaXRlQnl0ZS8yLCB3cml0ZUkxNi8yLCB3cml0ZUkzMi8yLCAKKyAgd3JpdGVJNjQvMiwgd3JpdGVEb3VibGUvMiwgd3JpdGVTdHJpbmcvMiwgCisKKyAgcmVhZE1lc3NhZ2VCZWdpbi8xLCByZWFkTWVzc2FnZUVuZC8xLCAKKyAgcmVhZFN0cnVjdEJlZ2luLzEsIHJlYWRTdHJ1Y3RFbmQvMSwgCisgIHJlYWRGaWVsZEJlZ2luLzEsIHJlYWRGaWVsZEVuZC8xLAorICByZWFkTWFwQmVnaW4vMSwgcmVhZE1hcEVuZC8xLAorICByZWFkTGlzdEJlZ2luLzEsIHJlYWRMaXN0RW5kLzEsCisgIHJlYWRTZXRCZWdpbi8xLCByZWFkU2V0RW5kLzEsCisKKyAgcmVhZEJvb2wvMSwgcmVhZEJ5dGUvMSwgcmVhZEkxNi8xLCByZWFkSTMyLzEsIAorICByZWFkSTY0LzEsIHJlYWREb3VibGUvMSwgcmVhZFN0cmluZy8xCitdKS4KKworJSUlCislJSUgc2VydmVyIGludGVyZmFjZQorJSUlCisKKyUlICUlJSBtb2R1bGVzIHdlIGNhbiBpbnN0YW50aWF0ZSBmcm9tIHRoZSBzZXJ2ZXIJICAgICAgICUlCislJSBpbnRlcmZhY2Uoc3ViY2xhc3NlcykgLT4gCQkJCSAgICAgICAlJQorJSUgICAgIFsJCQkJCQkgICAgICAgJSUKKyUlICAgICAgdEJpbmFyeVByb3RvY29sCQkJCQkgICAgICAgJSUKKyUlICAgICBdOwkJCQkJCSAgICAgICAlJQorJSUgCQkJCQkJCSAgICAgICAlJQorJSUgJSUlIHN5bmNocm9ub3VzIGNhbGxzIHRvIHBhc3MJCQkgICAgICAgJSUKKyUlIGludGVyZmFjZShjYWxsKSAtPiAJCQkJCSAgICAgICAlJQorJSUgICAgIFsJCQkJCQkgICAgICAgJSUKKyUlICAgICAgc2tpcCwJCQkJCQkgICAgICAgJSUKKyUlICAgICAgCQkJCQkJICAgICAgICUlCislJSAgICAgIHdyaXRlTWVzc2FnZUJlZ2luLCB3cml0ZU1lc3NhZ2VFbmQsCQkgICAgICAgJSUKKyUlICAgICAgd3JpdGVTdHJ1Y3RCZWdpbiwgd3JpdGVTdHJ1Y3RFbmQsCQkgICAgICAgJSUKKyUlICAgICAgd3JpdGVGaWVsZEJlZ2luLCB3cml0ZUZpZWxkRW5kLCB3cml0ZUZpZWxkU3RvcCwJICAgICAgICUlCislJSAgICAgIHdyaXRlTWFwQmVnaW4sIHdyaXRlTWFwRW5kLAkJCSAgICAgICAlJQorJSUgICAgICB3cml0ZUxpc3RCZWdpbiwgd3JpdGVMaXN0RW5kLAkJCSAgICAgICAlJQorJSUgICAgICB3cml0ZVNldEJlZ2luLCB3cml0ZVNldEVuZCwJCQkgICAgICAgJSUKKyUlICAgICAgCQkJCQkJICAgICAgICUlCislJSAgICAgIHdyaXRlQm9vbCwgd3JpdGVCeXRlLCB3cml0ZUkxNiwgd3JpdGVJMzIsIAkgICAgICAgJSUKKyUlICAgICAgd3JpdGVJNjQsIHdyaXRlRG91YmxlLCB3cml0ZVN0cmluZywgCQkgICAgICAgJSUKKyUlICAgICAgCQkJCQkJICAgICAgICUlCislJSAgICAgIHJlYWRNZXNzYWdlQmVnaW4sIHJlYWRNZXNzYWdlRW5kLCAJCSAgICAgICAlJQorJSUgICAgICByZWFkU3RydWN0QmVnaW4sIHJlYWRTdHJ1Y3RFbmQsIAkJICAgICAgICUlCislJSAgICAgIHJlYWRGaWVsZEJlZ2luLCByZWFkRmllbGRFbmQsCQkJICAgICAgICUlCislJSAgICAgIHJlYWRNYXBCZWdpbiwgcmVhZE1hcEVuZCwJCQkgICAgICAgJSUKKyUlICAgICAgcmVhZExpc3RCZWdpbiwgcmVhZExpc3RFbmQsCQkJICAgICAgICUlCislJSAgICAgIHJlYWRTZXRCZWdpbiwgcmVhZFNldEVuZCwJCQkgICAgICAgJSUKKyUlICAgICAgCQkJCQkJICAgICAgICUlCislJSAgICAgIHJlYWRCb29sLCByZWFkQnl0ZSwgcmVhZEkxNiwgcmVhZEkzMiwgCQkgICAgICAgJSUKKyUlICAgICAgcmVhZEk2NCwgcmVhZERvdWJsZSwgcmVhZFN0cmluZwkJCSAgICAgICAlJQorJSUgICAgIF07CQkJCQkJICAgICAgICUlCislJSAJCQkJCQkJICAgICAgICUlCislJSAlJSUgYXN5bmNocm9ub3VzIGNhc3RzIHRvIHBhc3MJCQkgICAgICAgJSUKKyUlIGludGVyZmFjZShjYXN0KSAtPgkJCQkJICAgICAgICUlCislJSAgICAgW10uCQkJCQkJICAgICAgICUlCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIodHJhbnMpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICBub25lLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KFRoaXMpIC0+CisgICAgP0ZPUk1BVF9BVFRSKHRyYW5zKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhUcmFucykgLT4KKyAgICAjP01PRFVMRXt0cmFucz1UcmFuc30uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCit3cml0ZU1lc3NhZ2VCZWdpbihfVGhpcywgX05hbWUsIF9UeXBlLCBfU2VxaWQpIC0+IG9rLgord3JpdGVNZXNzYWdlRW5kKF9UaGlzKSAtPiBvay4KK3dyaXRlU3RydWN0QmVnaW4oX1RoaXMsIF9OYW1lKSAtPiBvay4KK3dyaXRlU3RydWN0RW5kKF9UaGlzKSAtPiBvay4KK3dyaXRlRmllbGRCZWdpbihfVGhpcywgX05hbWUsIF9UeXBlLCBfSWQpIC0+IG9rLgord3JpdGVGaWVsZEVuZChfVGhpcykgLT4gb2suCit3cml0ZUZpZWxkU3RvcChfVGhpcykgLT4gb2suCit3cml0ZU1hcEJlZ2luKF9UaGlzLCBfS3R5cGUsIF9WdHlwZSwgX1NpemUpIC0+IG9rLgord3JpdGVNYXBFbmQoX1RoaXMpIC0+IG9rLgord3JpdGVMaXN0QmVnaW4oX1RoaXMsIF9FdHlwZSwgX1NpemUpIC0+IG9rLgord3JpdGVMaXN0RW5kKF9UaGlzKSAtPiBvay4KK3dyaXRlU2V0QmVnaW4oX1RoaXMsIF9FdHlwZSwgX1NpemUpIC0+IG9rLgord3JpdGVTZXRFbmQoX1RoaXMpIC0+IG9rLgorCit3cml0ZUJvb2woX1RoaXMsIF9WYWx1ZSkgLT4gb2suCit3cml0ZUJ5dGUoX1RoaXMsIF9WYWx1ZSkgLT4gb2suCit3cml0ZUkxNihfVGhpcywgX1ZhbHVlKSAtPiBvay4KK3dyaXRlSTMyKF9UaGlzLCBfVmFsdWUpIC0+IG9rLgord3JpdGVJNjQoX1RoaXMsIF9WYWx1ZSkgLT4gb2suCit3cml0ZURvdWJsZShfVGhpcywgX1ZhbHVlKSAtPiBvay4KK3dyaXRlU3RyaW5nKF9UaGlzLCBfVmFsdWUpIC0+IG9rLgorCityZWFkTWVzc2FnZUJlZ2luKF9UaGlzKSAtPiBvay4KK3JlYWRNZXNzYWdlRW5kKF9UaGlzKSAtPiBvay4KK3JlYWRTdHJ1Y3RCZWdpbihfVGhpcykgLT4gb2suCityZWFkU3RydWN0RW5kKF9UaGlzKSAtPiBvay4KK3JlYWRGaWVsZEJlZ2luKF9UaGlzKSAtPiBvay4KK3JlYWRGaWVsZEVuZChfVGhpcykgLT4gb2suCityZWFkTWFwQmVnaW4oX1RoaXMpIC0+IG9rLgorcmVhZE1hcEVuZChfVGhpcykgLT4gb2suCityZWFkTGlzdEJlZ2luKF9UaGlzKSAtPiBvay4KK3JlYWRMaXN0RW5kKF9UaGlzKSAtPiBvay4KK3JlYWRTZXRCZWdpbihfVGhpcykgLT4gb2suCityZWFkU2V0RW5kKF9UaGlzKSAtPiBvay4KKworcmVhZEJvb2woX1RoaXMpIC0+IG9rLgorcmVhZEJ5dGUoX1RoaXMpIC0+IG9rLgorcmVhZEkxNihfVGhpcykgLT4gb2suCityZWFkSTMyKF9UaGlzKSAtPiBvay4KK3JlYWRJNjQoX1RoaXMpIC0+IG9rLgorcmVhZERvdWJsZShfVGhpcykgLT4gb2suCityZWFkU3RyaW5nKF9UaGlzKSAtPiBvay4KKworc2tpcChUaGlzLCBUeXBlKSAtPgorICAgIGNhc2UgVHlwZSBvZiAKKwk/dFR5cGVfU1RPUCAgIC0+IG5pbDsgJSBXQVRDSAorCT90VHlwZV9CT09MICAgLT4gP0wwKHJlYWRCb29sKTsKKwk/dFR5cGVfQllURSAgIC0+ID9MMChyZWFkQnl0ZSk7CisJP3RUeXBlX0kxNiAgICAtPiA/TDAocmVhZEkxNik7CisJP3RUeXBlX0kzMiAgICAtPiA/TDAocmVhZEkzMik7CisJP3RUeXBlX0k2NCAgICAtPiA/TDAocmVhZEk2NCk7CisJP3RUeXBlX0RPVUJMRSAtPiA/TDAocmVhZERvdWJsZSk7CisJP3RUeXBlX1NUUklORyAtPiA/TDAocmVhZFN0cmluZyk7CisKKwk/dFR5cGVfU1RSVUNUIC0+IAorCSAgICA/TDAocmVhZFN0cnVjdEJlZ2luKSwKKwkgICAgc2tpcF9zdHJ1Y3RfbG9vcChUaGlzKSwKKworCSAgICAlJSBjcGlybzogdGhpcyBpc24ndCBoZXJlIGluIHRoZSBvcmlnaW5hbCB0cHJvdG9jb2wucmIsIGJ1dCBpIHRoaW5rIGl0J3MgYSBidWcKKwkgICAgP0wwKHJlYWRTdHJ1Y3RFbmQpOworCisJP3RUeXBlX01BUCAtPgorCSAgICB7S3R5cGUsIFZ0eXBlLCBTaXplfSA9ID9MMChyZWFkTWFwQmVnaW4pLAorCSAgICBza2lwX21hcF9yZXBlYXQoVGhpcywgS3R5cGUsIFZ0eXBlLCBTaXplKSwKKwkgICAgP0wwKHJlYWRNYXBFbmQpOworCisJP3RUeXBlX1NFVCAtPiAKKwkgICAge0V0eXBlLCBTaXplfSA9ID9MMChyZWFkU2V0QmVnaW4pLAorCSAgICBza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFNpemUpLAorCSAgICA/TDAocmVhZFNldEVuZCk7CisKKwk/dFR5cGVfTElTVCAtPgorCSAgICB7RXR5cGUsIFNpemV9ID0gP0wwKHJlYWRMaXN0QmVnaW4pLAorCSAgICBza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFNpemUpLCAlIFtzaWNdIHNraXBwaW5nIHNhbWUgYXMgZm9yIFNFVAorCSAgICA/TDAocmVhZExpc3RFbmQpCisgICAgZW5kLgorCitza2lwX3N0cnVjdF9sb29wKFRoaXMpIC0+CisgICAgeyBfTmFtZSwgVHlwZSwgX0lkIH0gPSA/TDAocmVhZEZpZWxkQmVnaW4pLAorICAgIGlmCisJVHlwZSA9PSA/dFR5cGVfU1RPUCAtPgorCSAgICBvazsKKwkKKwl0cnVlIC0+CisJICAgID9MMShza2lwLCBUeXBlKSwKKwkgICAgP0wwKHJlYWRGaWVsZEVuZCksCisKKwkgICAgJSUgY3Bpcm86IHRoaXMgaXMgaGVyZSBpbiBvcmlnaW5hbCB0cHJvdG9jb2wucmIsIGJ1dCBpIHRoaW5rIGl0J3MgYSBidWcKKwkgICAgJSA/TDAocmVhZFN0cnVjdEVuZCksCisJICAgIHNraXBfc3RydWN0X2xvb3AoVGhpcykKKyAgICBlbmQuCisgICAgICAgCitza2lwX21hcF9yZXBlYXQoVGhpcywgS3R5cGUsIFZ0eXBlLCBUaW1lcykgLT4KKyAgICA/TDEoc2tpcCwgS3R5cGUpLAorICAgID9MMShza2lwLCBWdHlwZSksCisgICAgc2tpcF9tYXBfcmVwZWF0KFRoaXMsIEt0eXBlLCBWdHlwZSwgVGltZXMtMSkuCisKK3NraXBfc2V0X3JlcGVhdChUaGlzLCBFdHlwZSwgVGltZXMpIC0+CisgICAgP0wxKHNraXAsIEV0eXBlKSwKKyAgICBza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFRpbWVzLTEpLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjZhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbEV4Y2VwdGlvbi5lcmwKQEAgLTAsMCArMSw1OCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0UHJvdG9jb2xFeGNlcHRpb24pLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RQcm90b2NvbEV4Y2VwdGlvbi5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBuZXcvMSwgbmV3LzJdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcik7Cis/REVGSU5FX0FUVFIodHlwZSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRFeGNlcHRpb24uCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIodHlwZSkuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoVHlwZSwgTWVzc2FnZSkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoTWVzc2FnZSksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXIsIHR5cGU9VHlwZX0uCisKK25ldygpIC0+CisgICAgbmV3KD90UHJvdG9jb2xFeGNlcHRpb25fVU5LTk9XTiwgdW5kZWZpbmVkKS4KK25ldyhUeXBlKSAtPgorICAgIG5ldyhUeXBlLCB1bmRlZmluZWQpLgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdFByb3RvY29sRmFjdG9yeS5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbEZhY3RvcnkuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTcyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbEZhY3RvcnkuZXJsCkBAIC0wLDAgKzEsNTQgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodFByb3RvY29sRmFjdG9yeSkuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgicHJvdG9jb2wvdFByb3RvY29sRmFjdG9yeS5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBnZXRQcm90b2NvbC8yXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/QVRUUl9EVU1NWS4KKworJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgbm9uZS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChfVGhpcykgLT4KKyAgICAiIi4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldygpIC0+CisgICAgIz9NT0RVTEV7fS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2dldFByb3RvY29sKFRoaXMsIFRyYW5zKSAtPgorICAgIG5pbC4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RFcmxTZXJ2ZXIuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9zZXJ2ZXIvdEVybFNlcnZlci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5NDcwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RFcmxTZXJ2ZXIuZXJsCkBAIC0wLDAgKzEsMTEyIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRFcmxTZXJ2ZXIpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybCIpLgorLWluY2x1ZGUoInNlcnZlci90RXJsU2VydmVyLmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzYsIG5ldy81LCBuZXcvNCwgZWZmZWN0ZnVsX3NlcnZlLzEsIGVmZmVjdGZ1bF9uZXdfYWNjZXB0b3IvMSwgY2F0Y2hlcy8zXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpOworP0RFRklORV9BVFRSKGFjY2VwdG9yKTsKKz9ERUZJTkVfQVRUUihsaXN0ZW5Tb2NrZXQpOworP0RFRklORV9BVFRSKHBvcnQpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0U2VydmVyLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KFRoaXMpIC0+CisgICAgP0ZPUk1BVF9BVFRSKGFjY2VwdG9yKSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKGxpc3RlblNvY2tldCkgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihwb3J0KS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhQb3J0LCBIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgUHJvdG9jb2xGYWN0b3J5KSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgUHJvdG9jb2xGYWN0b3J5KSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlciwgcG9ydD1Qb3J0LCBsaXN0ZW5Tb2NrZXQ9bmlsLCBhY2NlcHRvcj1uaWx9LgorCituZXcoUG9ydCwgSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQpIC0+CisgICAgbmV3KFBvcnQsIEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBuaWwsIG5pbCkuCisKK25ldyhQb3J0LCBIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSkgLT4KKyAgICBuZXcoUG9ydCwgSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnksIG5pbCkuCisKKyUgbGlzdGVuU29ja2V0LCBhY2NlcHRvciwgcG9ydAorCitlZmZlY3RmdWxfc2VydmUoVGhpcykgLT4KKyAgICBQb3J0ID0gb29wOmdldChUaGlzLCBwb3J0KSwKKworICAgIE9wdGlvbnMgPSBbYmluYXJ5LCB7cGFja2V0LCAwfSwge2FjdGl2ZSwgZmFsc2V9XSwKKworICAgICUlIGxpc3RlbgorICAgIGNhc2UgZ2VuX3RjcDpsaXN0ZW4oUG9ydCwgT3B0aW9ucykgb2YgCisJe29rLCBMaXN0ZW5Tb2NrZXR9IC0+CisKKwkgICAgVGhpczEgPSBvb3A6c2V0KFRoaXMsIGxpc3RlblNvY2tldCwgTGlzdGVuU29ja2V0KSwKKworCSAgICAlJSBzcGF3biBhY2NlcHRvcgorCSAgICB7X0FjY2VwdG9yLCBUaGlzMn0gPSBlZmZlY3RmdWxfbmV3X2FjY2VwdG9yKFRoaXMxKSwKKworCSAgICB7b2ssIFRoaXMyfQorICAgIGVuZC4KKworZWZmZWN0ZnVsX25ld19hY2NlcHRvcihUaGlzKSAtPgorICAgIExpc3RlblNvY2tldCA9IG9vcDpnZXQoVGhpcywgbGlzdGVuU29ja2V0KSwKKyAgICBQcm9jZXNzb3IgICAgPSBvb3A6Z2V0KFRoaXMsIHByb2Nlc3NvciksICUlIGNwaXJvOiBnZW5lcmF0ZWQgcHJvY2Vzc29yLCBub3QgdGhlICJhY3R1YWwiIHByb2Nlc3NvcgorICAgIEhhbmRsZXIgICAgICA9IG9vcDpnZXQoVGhpcywgaGFuZGxlciksCisKKyAgICBURiA9IG9vcDpnZXQoVGhpcywgdHJhbnNwb3J0RmFjdG9yeSksCisgICAgUEYgPSBvb3A6Z2V0KFRoaXMsIHByb3RvY29sRmFjdG9yeSksCisKKyAgICB0RXJsQWNjZXB0b3IgPSBvb3A6Z2V0KFRoaXMsIHNlcnZlclRyYW5zcG9ydCksICUlIGNwaXJvOiBvbmx5IHN1cHBvcnRlZCBTZXJ2ZXJUcmFuc3BvcnQKKworICAgIFNlcnZlclBpZCA9IHNlbGYoKSwKKyAgICBBY2NlcHRvciAgPSBvb3A6c3RhcnRfbmV3KHRFcmxBY2NlcHRvciwgW1NlcnZlclBpZCwgVEYsIFBGXSksCisgICAgP0MzKEFjY2VwdG9yLCBhY2NlcHQsIExpc3RlblNvY2tldCwgUHJvY2Vzc29yLCBIYW5kbGVyKSwKKworICAgIFRoaXMxID0gb29wOnNldChUaGlzLCBhY2NlcHRvciwgQWNjZXB0b3IpLAorCisgICAge0FjY2VwdG9yLCBUaGlzMX0uCisKK2NhdGNoZXMoVGhpcywgUGlkLCBhY2NlcHRvcl9kb25lKSAtPgorICAgIG9rLgorCislJSAlJSBUaGUgY3VycmVudCBhY2NlcHRvciBoYXMgZGllZCwgd2FpdCBhIGxpdHRsZSBhbmQgdHJ5IGFnYWluCQkJCQkJICAgICAgICUlCislJSBoYW5kbGVfaW5mbyh7J0VYSVQnLCBQaWQsIF9BYm5vcm1hbH0sICNzdGF0ZXthY2NlcHRvcj1QaWR9ID0gU3RhdGUpIC0+CQkJCQkgICAgICAgJSUKKyUlICAgICB0aW1lcjpzbGVlcCgyMDAwKSwJCQkJCQkJCQkJCSAgICAgICAlJQorJSUgICAgIGlzZXJ2ZV9zb2NrZXQ6c3RhcnRfbGluayhzZWxmKCksIFN0YXRlI3N0YXRlLmxpc3Rlbl9zb2NrZXQsIFN0YXRlI3N0YXRlLnBvcnQpLAkJCQkgICAgICAgJSUKKyUlICAgICB7bm9yZXBseSxTdGF0ZX07CQkJCQkJCQkJCQkJICAgICAgICUlCisKKyUlIHRlcm1pbmF0ZShSZWFzb24sIFN0YXRlKSAtPgkJCQkJCQkJCQkJICAgICAgICUlCislJSAgICAgZXJyb3JfbG9nZ2VyOmluZm9fbXNnKCAiVGVybWluYXRpbmcgZXJyb3I6IH5wfm4iLCBbUmVhc29uXSksICUgYWRkZWQJCQkJCSAgICAgICAlJQorJSUgICAgIGdlbl90Y3A6Y2xvc2UoU3RhdGUjc3RhdGUubGlzdGVuX3NvY2tldCksCQkJCQkJCQkgICAgICAgJSUKKyUlICAgICBvay4JCQkJCQkJCQkJCQkJICAgICAgICUlCislJSAJCQkJCQkJCQkJCQkJCSAgICAgICAlJQpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9zZXJ2ZXIvdFNlcnZlci5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3NlcnZlci90U2VydmVyLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FlZjIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9zZXJ2ZXIvdFNlcnZlci5lcmwKQEAgLTAsMCArMSw4MSBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0U2VydmVyKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJzZXJ2ZXIvdFNlcnZlci5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEZhY3RvcnkuaHJsIikuCistaW5jbHVkZSgicHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy81LCBuZXcvNCwgbmV3LzMsIHNlcnZlLzFdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihoYW5kbGVyKTsKKz9ERUZJTkVfQVRUUihwcm9jZXNzb3IpOworP0RFRklORV9BVFRSKHNlcnZlclRyYW5zcG9ydCk7Cis/REVGSU5FX0FUVFIodHJhbnNwb3J0RmFjdG9yeSk7Cis/REVGSU5FX0FUVFIocHJvdG9jb2xGYWN0b3J5KS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgbm9uZS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihoYW5kbGVyKSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKHByb2Nlc3NvcikgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihzZXJ2ZXJUcmFuc3BvcnQpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIodHJhbnNwb3J0RmFjdG9yeSkgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihwcm90b2NvbEZhY3RvcnkpLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBUcmFuc3BvcnRGYWN0b3J5LCBQcm90b2NvbEZhY3RvcnkpIC0+CisgICAgIz9NT0RVTEV7aGFuZGxlcj1IYW5kbGVyLCBwcm9jZXNzb3I9UHJvY2Vzc29yLCBzZXJ2ZXJUcmFuc3BvcnQ9U2VydmVyVHJhbnNwb3J0LAorCisJICAgICAlJSBtdWNoIGFkbyBhYm91dCBub3RoaW5nIGJ1dAorCSAgICAgJSUgc3ViY2xhc3NlcyBwYXNzIG5pbCB0b28KKwkgICAgIHRyYW5zcG9ydEZhY3RvcnkgPSAKKwkgICAgIGNhc2UgVHJhbnNwb3J0RmFjdG9yeSBvZgorCQkgbmlsIC0+IHRUcmFuc3BvcnRGYWN0b3J5Om5ldygpOworCQkgXyAgIC0+IFRyYW5zcG9ydEZhY3RvcnkKKwkgICAgIGVuZCwKKwkgICAgIAorCSAgICAgcHJvdG9jb2xGYWN0b3J5ID0gCisJICAgICBjYXNlIFByb3RvY29sRmFjdG9yeSBvZgorCQkgbmlsIC0+IHRCaW5hcnlQcm90b2NvbEZhY3Rvcnk6bmV3KCk7CisJCSBfICAgLT4gUHJvdG9jb2xGYWN0b3J5CisJICAgICBlbmQgICAgIAorfS4KKworbmV3KEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0KSAtPgorICAgIG5ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgbmlsLCBuaWwpLgorCituZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnkpIC0+CisgICAgbmV3KEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBUcmFuc3BvcnRGYWN0b3J5LCBuaWwpLgorCitzZXJ2ZShfVGhpcykgLT4KKyAgICBvay4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RTaW1wbGVTZXJ2ZXIuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9zZXJ2ZXIvdFNpbXBsZVNlcnZlci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0NTdjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RTaW1wbGVTZXJ2ZXIuZXJsCkBAIC0wLDAgKzEsMTA2IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRTaW1wbGVTZXJ2ZXIpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybCIpLgorLWluY2x1ZGUoInNlcnZlci90U2ltcGxlU2VydmVyLmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzUsIG5ldy80LCBuZXcvMywgc2VydmUvMV0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFNlcnZlci4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChfVGhpcykgLT4KKyAgICAiIi4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgUHJvdG9jb2xGYWN0b3J5KSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgUHJvdG9jb2xGYWN0b3J5KSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlcn0uCisKK25ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCkgLT4KKyAgICBuZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIG5pbCwgbmlsKS4KKworbmV3KEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBUcmFuc3BvcnRGYWN0b3J5KSAtPgorICAgIG5ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgbmlsKS4KKworJQorCitzZXJ2ZShUaGlzKSAtPgorICAgIFNUID0gb29wOmdldChUaGlzLCBzZXJ2ZXJUcmFuc3BvcnQpLAorICAgID9SMChTVCwgZWZmZWN0ZnVsX2xpc3RlbiksCisKKyAgICBzZXJ2ZV9sb29wKFRoaXMpLgorCitzZXJ2ZV9sb29wKFRoaXMpIC0+CisgICAgaW86Zm9ybWF0KCJ+bnJlYWR5Ln5uIiwgW10pLAorCisgICAgU1QgICAgID0gb29wOmdldChUaGlzLCBzZXJ2ZXJUcmFuc3BvcnQpLAorICAgIENsaWVudCA9ID9SVDAoU1QsIGFjY2VwdCwgaW5maW5pdHkpLAorCisgICAgVEYgICAgID0gb29wOmdldChUaGlzLCB0cmFuc3BvcnRGYWN0b3J5KSwKKyAgICBUcmFucyAgPSA/RjEoVEYsIGdldFRyYW5zcG9ydCwgQ2xpZW50KSwgJSUgY3Bpcm86IE9QQVFVRSEhIFRyYW5zID0gQ2xpZW50CisKKyAgICBQRiAgICAgPSBvb3A6Z2V0KFRoaXMsIHByb3RvY29sRmFjdG9yeSksCisgICAgUHJvdCAgID0gP0YxKFBGLCBnZXRQcm90b2NvbCwgVHJhbnMpLCAlJSBjcGlybzogT1BBUVVFISEgUHJvdCA9IHN0YXJ0X25ldyh0QmluYXJ5UHJvdG9jb2wsIFtUcmFuc10pCisKKyAgICBpbzpmb3JtYXQoImNsaWVudCBhY2NlcHQoKWVkfm4iLCBbXSksCisKKyAgICBzZXJ2ZV9sb29wX2xvb3AoVGhpcywgUHJvdCksICUgZ2lnZ2xlIGxvb3A/CisKKyAgICA/UjAoVHJhbnMsIGVmZmVjdGZ1bF9jbG9zZSksCisKKyAgICBzZXJ2ZV9sb29wKFRoaXMpLgorICAgIAorc2VydmVfbG9vcF9sb29wKFRoaXMsIFByb3QpIC0+CisgICAgTmV4dCA9IAorCXRyeQorCSAgICBIYW5kbGVyICAgPSBvb3A6Z2V0KFRoaXMsIGhhbmRsZXIpLAorCSAgICBQcm9jZXNzb3IgPSBvb3A6Z2V0KFRoaXMsIHByb2Nlc3NvciksCisJICAgIFZhbCA9IGFwcGx5KFByb2Nlc3NvciwgcHJvY2VzcywgW0hhbmRsZXIsIFByb3QsIFByb3RdKSwgJSUgVE9ETyhjcGlybyk6IG1ha2UgcHJvY2Vzc29yIGEgZ2VuX3NlcnZlciBpbnN0YW5jZQorCSAgICBpbzpmb3JtYXQoInJlcXVlc3QgcHJvY2Vzc2VkOiBydj1+cH5uIiwgW1ZhbF0pLAorCSAgICBsb29wCisJY2F0Y2ggCisJICAgICUlIFRPRE8oY3Bpcm8pIGNhc2Ugd2hlbiBpc19yZWNvcmQoLi4uKSB0byBwaWNrIG91dCBvdXIgZXhjZXB0aW9uCisJICAgICUlIHJlY29yZHMgdnMuIG5vcm1hbCBlcmxhbmcgdGhyb3dzCisJICAgIEUgd2hlbiBpc19yZWNvcmQoRSwgdFRyYW5zcG9ydEV4Y2VwdGlvbikgLT4KKwkJaW86Zm9ybWF0KCJ0VHJhbnNwb3J0RXhjZXB0aW9uIChub3JtYWwtaXNoPyl+biIsIFtdKSwKKwkJY2xvc2U7CisJICAgIEYgLT4KKwkJaW86Zm9ybWF0KCJFWENFUFRJT046IH5wfm4iLCBbRl0pLAorCQljbG9zZQorCWVuZCwKKyAgICBjYXNlIE5leHQgb2YgCisJbG9vcCAtPiBzZXJ2ZV9sb29wX2xvb3AoVGhpcywgUHJvdCk7CisJY2xvc2UgLT4gb2sKKyAgICBlbmQuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4YjljOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmVybApAQCAtMCwwICsxLDExNSBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0QXBwbGljYXRpb25FeGNlcHRpb24pLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwiKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBuZXcvMSwgbmV3LzIsIHJlYWQvMiwgd3JpdGUvMl0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKTsKKz9ERUZJTkVfQVRUUih0eXBlKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKworJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0RXhjZXB0aW9uLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KFRoaXMpIC0+CisgICAgP0ZPUk1BVF9BVFRSKHR5cGUpLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KFR5cGUsIE1lc3NhZ2UpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KE1lc3NhZ2UpLAorICAgICM/TU9EVUxFe3N1cGVyPVN1cGVyLCB0eXBlPVR5cGV9LgorCituZXcoKSAgICAgLT4gbmV3KD90QXBwbGljYXRpb25FeGNlcHRpb25fVU5LTk9XTiwgdW5kZWZpbmVkKS4KK25ldyhUeXBlKSAtPiBuZXcoVHlwZSwgdW5kZWZpbmVkKS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK3JlYWQoVGhpcywgSXByb3QpIC0+CisgICAgP1IwKElwcm90LCByZWFkU3RydWN0QmVnaW4pLAorICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCksCisgICAgP1IwKElwcm90LCByZWFkU3RydWN0RW5kKSwKKyAgICBvay4KKworcmVhZF93aGlsZV9sb29wKFRoaXMsIElwcm90KSAtPgorICAgIHtfRm5hbWUsIEZ0eXBlLCBGaWR9ID0gP1IwKElwcm90LCByZWFkRmllbGRCZWdpbiksCisKKyAgICBpZiAKKwlGdHlwZSA9PSA/dFR5cGVfU1RPUCAtPgorCSAgICBvazsKKworCShGaWQgPT0gMSkgYW5kIChGdHlwZSA9PSA/dFR5cGVfU1RSSU5HKSAtPgorCSAgICBNZXNzYWdlMSA9ID9SMChJcHJvdCwgcmVhZFN0cmluZyksCisJICAgIFRoaXMxID0gb29wOnNldChUaGlzLCBtZXNzYWdlLCBNZXNzYWdlMSksCisJICAgID9SMChJcHJvdCwgcmVhZEZpZWxkRW5kKSwKKwkgICAgcmVhZF93aGlsZV9sb29wKFRoaXMxLCBJcHJvdCk7CisKKwlGaWQgPT0gMSAtPgorCSAgICA/UjAoSXByb3QsIHNraXApLAorCSAgICA/UjAoSXByb3QsIHJlYWRGaWVsZEVuZCksCisJICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCk7CisKKwkoRmlkID09IDIpIGFuZCAoRnR5cGUgPT0gP3RUeXBlX0kzMikgLT4KKwkgICAgVHlwZTEgPSA/UjAoSXByb3QsIHJlYWRJMzIpLAorCSAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgdHlwZSwgVHlwZTEpLAorCSAgICA/UjAoSXByb3QsIHJlYWRGaWVsZEVuZCksCisJICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzMSwgSXByb3QpOworCisgICAgICAgIHRydWUgLT4gCisJICAgID9SMChJcHJvdCwgc2tpcCksCisJICAgID9SMChJcHJvdCwgcmVhZEZpZWxkRW5kKSwKKwkgICAgcmVhZF93aGlsZV9sb29wKFRoaXMsIElwcm90KQorICAgIGVuZC4KKword3JpdGUoVGhpcywgT3Byb3QpIC0+CQorICAgID9SMShPcHJvdCwgd3JpdGVTdHJ1Y3RCZWdpbiwgInRBcHBsaWNhdGlvbkV4Y2VwdGlvbiIpLAorICAgIE1lc3NhZ2UgPSBvb3A6Z2V0KFRoaXMsIG1lc3NhZ2UpLAorICAgIFR5cGUgICAgPSBvb3A6Z2V0KFRoaXMsIHR5cGUpLAorCisgICAgaWYJTWVzc2FnZSAvPSB1bmRlZmluZWQgLT4KKwkgICAgP1IzKE9wcm90LCB3cml0ZUZpZWxkQmVnaW4sICJtZXNzYWdlIiwgP3RUeXBlX1NUUklORywgMSksCisJICAgID9SMShPcHJvdCwgd3JpdGVTdHJpbmcsIE1lc3NhZ2UpLAorCSAgICA/UjAoT3Byb3QsIHdyaXRlRmllbGRFbmQpOworICAgICAgICB0cnVlIC0+IG9rCisgICAgZW5kLAorCisgICAgaWYgIFR5cGUgLz0gdW5kZWZpbmVkIC0+IAorCSAgICA/UjMoT3Byb3QsIHdyaXRlRmllbGRCZWdpbiwgInR5cGUiLCA/dFR5cGVfSTMyLCAyKSwKKwkgICAgP1IxKE9wcm90LCB3cml0ZUkzMiwgVHlwZSksCisJICAgID9SMChPcHJvdCwgd3JpdGVGaWVsZEVuZCk7CisgICAgICAgIHRydWUgLT4gb2sKKyAgICBlbmQsCisKKyAgICA/UjAoT3Byb3QsIHdyaXRlRmllbGRTdG9wKSwKKyAgICA/UjAoT3Byb3QsIHdyaXRlU3RydWN0RW5kKSwKKyAgICBvay4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdEVybFByb2Nlc3Nvci5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RFcmxQcm9jZXNzb3IuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWVmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RFcmxQcm9jZXNzb3IuZXJsCkBAIC0wLDAgKzEsNjIgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodEVybFByb2Nlc3NvcikuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCistaW5jbHVkZSgidEVybFByb2Nlc3Nvci5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8yLCBwcm9jZXNzLzNdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcik7Cis/REVGSU5FX0FUVFIoZ2VuZXJhdGVkUHJvY2Vzc29yKTsKKz9ERUZJTkVfQVRUUihoYW5kbGVyKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFByb2Nlc3Nvci4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihnZW5lcmF0ZWRQcm9jZXNzb3IpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIoaGFuZGxlcikuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoR1AsIEhhbmRsZXIpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KCksCisgICAgIz9NT0RVTEV7c3VwZXIgPSBTdXBlciwgZ2VuZXJhdGVkUHJvY2Vzc29yID0gR1AsIGhhbmRsZXIgPSBIYW5kbGVyfS4KKworJSUgcHJvY2Vzc29yIGlzIGdlbmVyYXRlZCBjb2RlCislJSBoYW5kbGVyIGlzIHVzZXIgY29kZQorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworcHJvY2VzcyhUaGlzLCBJcHJvdCwgT3Byb3QpIC0+CisgICAgR1AgICAgICA9IG9vcDpnZXQoVGhpcywgZ2VuZXJhdGVkUHJvY2Vzc29yKSwKKyAgICBIYW5kbGVyID0gb29wOmdldChUaGlzLCBoYW5kbGVyKSwKKyAgICAKKyAgICBhcHBseShHUCwgcHJvY2VzcywgW0hhbmRsZXIsIElwcm90LCBPcHJvdF0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90RXhjZXB0aW9uLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdEV4Y2VwdGlvbi5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVjNGM5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdEV4Y2VwdGlvbi5lcmwKQEAgLTAsMCArMSw1MCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0RXhjZXB0aW9uKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0RXhjZXB0aW9uLmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzFdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihtZXNzYWdlKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgbm9uZS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihtZXNzYWdlKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhNZXNzYWdlKSAtPgorICAgICM/TU9EVUxFe21lc3NhZ2U9TWVzc2FnZX0uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RQcm9jZXNzb3IuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90UHJvY2Vzc29yLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM3NDhhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90UHJvY2Vzc29yLmVybApAQCAtMCwwICsxLDUwIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRQcm9jZXNzb3IpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRQcm9jZXNzb3IuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMF0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0FUVFJfRFVNTVkuCisKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIG5vbmUuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoX1RoaXMpIC0+CisgICAgIiIuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoKSAtPgorICAgICM/TU9EVUxFe30uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RocmlmdC5hcHAuc3JjIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90aHJpZnQuYXBwLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzI5MjZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90aHJpZnQuYXBwLnNyYwpAQCAtMCwwICsxLDQxIEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQore2FwcGxpY2F0aW9uLCAlQVBQX05BTUUlLAorIFsKKyAgJSBBIHF1aWNrIGRlc2NyaXB0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi4KKyAge2Rlc2NyaXB0aW9uLCAiVGhyaWZ0IGJpbmRpbmdzIn0sCisKKyAgJSBUaGUgdmVyc2lvbiBvZiB0aGUgYXBwbGljYXRvbgorICB7dnNuLCAiJVZTTiUifSwKKworICAlIEFsbCBtb2R1bGVzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAKKyAge21vZHVsZXMsCisgICBbCisJJU1PRFVMRVMlCisgICBdfSwKKworICAlIEFsbCBvZiB0aGUgcmVnaXN0ZXJlZCBuYW1lcyB0aGUgYXBwbGljYXRpb24gdXNlcy4gVGhpcyBjYW4gYmUgaWdub3JlZC4KKyAge3JlZ2lzdGVyZWQsIFtdfSwKKworICAlIEFwcGxpY2F0aW9ucyB0aGF0IGFyZSB0byBiZSBzdGFydGVkIHByaW9yIHRvIHRoaXMgb25lLiBUaGlzIGNhbiBiZSBpZ25vcmVkCisgICUgbGVhdmUgaXQgYWxvbmUgdW5sZXNzIHlvdSB1bmRlcnN0YW5kIGl0IHdlbGwgYW5kIGxldCB0aGUgLnJlbCBmaWxlcyBpbiAKKyAgJSB5b3VyIHJlbGVhc2UgaGFuZGxlIHRoaXMuIAorICB7YXBwbGljYXRpb25zLAorICAgWworICAgIGtlcm5lbCwgCisgICAgc3RkbGliCisgICBdfSwKKworICAlIE9UUCBhcHBsaWNhdGlvbiBsb2FkZXIgd2lsbCBsb2FkLCBidXQgbm90IHN0YXJ0LCBpbmNsdWRlZCBhcHBzLiBBZ2FpbgorICAlIHRoaXMgY2FuIGJlIGlnbm9yZWQgYXMgd2VsbC4gIFRvIGxvYWQgYnV0IG5vdCBzdGFydCBhbiBhcHBsaWNhdGlvbiBpdAorICAlIGlzIGVhc2llciB0byBpbmNsdWRlIGl0IGluIHRoZSAucmVsIGZpbGUgZm9sbG93ZWQgYnkgdGhlIGF0b20gJ25vbmUnCisgIHtpbmNsdWRlZF9hcHBsaWNhdGlvbnMsIFtdfSwKKworICAlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBzaW1pbGFyIHRvIHRob3NlIGluIHRoZSBjb25maWcgZmlsZSBzcGVjaWZpZWQKKyAgJSBvbiB0aGUgY29tbWFuZCBsaW5lLiBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdhczpnZXRfZW52CisgIHtlbnYsIFtdfSwKKworICAlIFRoZSBNb2R1bGUgYW5kIEFyZ3MgdXNlZCB0byBzdGFydCB0aGlzIGFwcGxpY2F0aW9uLgorICB7bW9kLCB7JUFQUF9OQU1FJSwgW119fQorIF0KK30uCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0LmFwcHVwLnNyYyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0LmFwcHVwLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NGE2MzgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90aHJpZnQuYXBwdXAuc3JjCkBAIC0wLDAgKzEgQEAKK3siJVZTTiUiLFtdLFtdfS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0X29vcF9zZXJ2ZXIuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90aHJpZnRfb29wX3NlcnZlci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjOTEyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0X29vcF9zZXJ2ZXIuZXJsCkBAIC0wLDAgKzEsMjEzIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCislJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSUgQGRvYyAgCislJSUgQGVuZAorJSUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW1vZHVsZSh0aHJpZnRfb29wX3NlcnZlcikuCisKKy1iZWhhdmlvdXIoZ2VuX3NlcnZlcikuCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBJbmNsdWRlIGZpbGVzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBFeHRlcm5hbCBleHBvcnRzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZXhwb3J0KFsKKwkgc3RhcnRfbGluay8wLAorCSBzdG9wLzAKKwkgXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIGdlbl9zZXJ2ZXIgY2FsbGJhY2tzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZXhwb3J0KFtpbml0LzEsIGhhbmRsZV9jYWxsLzMsIGhhbmRsZV9jYXN0LzIsIGhhbmRsZV9pbmZvLzIsIHRlcm1pbmF0ZS8yLCBjb2RlX2NoYW5nZS8zXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIHJlY29yZCBkZWZpbml0aW9ucworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBtYWNybyBkZWZpbml0aW9ucworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWRlZmluZShTRVJWRVIsID9NT0RVTEUpLgorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSBFeHRlcm5hbCBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEBkb2MgU3RhcnRzIHRoZSBzZXJ2ZXIuCislJSBAc3BlYyBzdGFydF9saW5rKCkgLT4ge29rLCBwaWQoKX0gfCB7ZXJyb3IsIFJlYXNvbn0KKyUlIEBlbmQKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXJ0X2xpbmsoKSAtPgorICAgIGdlbl9zZXJ2ZXI6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSwgW10pLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBAZG9jIFN0b3BzIHRoZSBzZXJ2ZXIuCislJSBAc3BlYyBzdG9wKCkgLT4gb2sKKyUlIEBlbmQKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0b3AoKSAtPgorICAgIGdlbl9zZXJ2ZXI6Y2FzdCg/U0VSVkVSLCBzdG9wKS4KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgU2VydmVyIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaW5pdC8xCislJSBEZXNjcmlwdGlvbjogSW5pdGlhdGVzIHRoZSBzZXJ2ZXIKKyUlIFJldHVybnM6IHtvaywgU3RhdGV9ICAgICAgICAgIHwKKyUlICAgICAgICAgIHtvaywgU3RhdGUsIFRpbWVvdXR9IHwKKyUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgIHwKKyUlICAgICAgICAgIHtzdG9wLCBSZWFzb259CislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3VucGFyZW50aChBcmdzKSAtPgorICAgIEFyZ3MuCisKK2luaXQoe0NsYXNzLCBBcmdzfSkgLT4KKyAgICBwcm9jZXNzX2ZsYWcodHJhcF9leGl0LCB0cnVlKSwKKyAgICBpZiAKKwl0cnVlIC0+ICUgbGlzdHM6bWVtYmVyKENsYXNzLCBDbGFzczppbnRlcmZhY2Uoc3ViY2xhc3NlcykpIC0+CisJICAgIGlvOmZvcm1hdCgib29wX3NlcnZlciBpbml0OiB+cCA6PSB+cDpuZXcofnApfm4iLCBbc2VsZigpLCBDbGFzcywgdW5wYXJlbnRoKEFyZ3MpXSksCisJICAgIFN0YXRlID0gYXBwbHkoQ2xhc3MsIG5ldywgQXJncyksICUgVE9ETyhjcGlybyk6IHRyeSBjYXRjaD8KKwkgICAgaW86Zm9ybWF0KCIgICAgICAgICAgICAgID0+fnB+biIsIFtvb3A6aW5zcGVjdChTdGF0ZSldKSwKKwkgICAge29rLCBTdGF0ZX0KKworCSUlIHRydWUgLT4JCQkgICAgICAgJSUKKwklJSAgICAge3N0b3AsIGludmFsaWRfc3ViY2xhc3N9CSAgICAgICAlJQorICAgIGVuZDsKK2luaXQoXykgLT4KKyAgICB7c3RvcCwgaW52YWxpZF9wYXJhbXN9LgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaGFuZGxlX2NhbGwvMworJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGNhbGwgbWVzc2FnZXMKKyUlIFJldHVybnM6IHtyZXBseSwgUmVwbHksIFN0YXRlfSAgICAgICAgICB8CislJSAgICAgICAgICB7cmVwbHksIFJlcGx5LCBTdGF0ZSwgVGltZW91dH0gfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlfSAgICAgICAgICAgICAgIHwKKyUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gICAgICB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBSZXBseSwgU3RhdGV9ICAgfCAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaGFuZGxlX2NhbGwoUmVxdWVzdCwgRnJvbSwgU3RhdGUpIC0+CisgICAgaGFuZGxlX2VpdGhlcihjYWxsLCBSZXF1ZXN0LCBGcm9tLCBTdGF0ZSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiBoYW5kbGVfY2FzdC8yCislJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgY2FzdCBtZXNzYWdlcworJSUgUmV0dXJuczoge25vcmVwbHksIFN0YXRlfSAgICAgICAgICB8CislJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9IHwKKyUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hhbmRsZV9jYXN0KHN0b3AsIFN0YXRlKSAtPgorICAgIHtzdG9wLCBub3JtYWwsIFN0YXRlfTsKKworaGFuZGxlX2Nhc3Qoe01ldGhvZCwgQXJnc30sIFN0YXRlKSAtPgorICAgIGhhbmRsZV9laXRoZXIoY2FzdCwge01ldGhvZCwgQXJnc30sIHVuZGVmaW5lZCwgU3RhdGUpLgorCistZGVmaW5lKFJFUExZKFZhbHVlLCBTdGF0ZSksCisJY2FzZSBUeXBlIG9mIAorCSAgICBjYWxsIC0+IHtyZXBseSwgVmFsdWUsIFN0YXRlfTsKKwkgICAgY2FzdCAtPiB7bm9yZXBseSwgU3RhdGV9IAorCWVuZAorKS4gCisKK2hhbmRsZV9laXRoZXIoVHlwZSwgUmVxdWVzdCwgRnJvbSwgU3RhdGUpIC0+CisgICAgJSUgaW86Zm9ybWF0KCJ+cDogfnB+biIsIFs/U0VSVkVSLCBvb3A6aW5zcGVjdChTdGF0ZSldKSwgICAgCisgICAgJSUgaW86Zm9ybWF0KCIgICAgaGFuZGxlX2NhbGwoUmVxdWVzdD1+cCwgRnJvbT1+cCwgU3RhdGUpfm4iLCBbUmVxdWVzdCwgRnJvbV0pLAorCisgICAgY2FzZSBSZXF1ZXN0IG9mIAorCXtnZXQsIFtGaWVsZF19IC0+CisJICAgIFZhbHVlID0gb29wOmdldChTdGF0ZSwgRmllbGQpLAorCSAgICA/UkVQTFkoVmFsdWUsIFN0YXRlKTsKKworCXtzZXQsIFtGaWVsZCwgVmFsdWVdfSAtPgorCSAgICBTdGF0ZTEgPSBvb3A6c2V0KFN0YXRlLCBGaWVsZCwgVmFsdWUpLAorCSAgICA/UkVQTFkoVmFsdWUsIFN0YXRlMSk7CisKKwl7TWV0aG9kLCBBcmdzfSAtPgorCSAgICBoYW5kbGVfbWV0aG9kKFR5cGUsIFN0YXRlLCBNZXRob2QsIEFyZ3MpOworCisJXyAtPgorCSAgICBpbzpmb3JtYXQoIiAgICBFUlJPUjogUmVxdWVzdCA9IH5wIG5vbWF0Y2gge01ldGhvZCwgQXJnc31+biIsIFtSZXF1ZXN0XSksCisJICAgICUlIHtzdG9wLCBzZXJ2ZXJfZXJyb3IsIFN0YXRlfSAKKwkgICAge3JlcGx5LCBzZXJ2ZXJfZXJyb3IsIFN0YXRlfQorICAgIGVuZC4KKworaGFuZGxlX21ldGhvZChUeXBlLCBTdGF0ZSwgTWV0aG9kLCBBcmdzKSAtPgorICAgICUlIGlzIGFuIGVmZmVjdGZ1bCBjYWxsPworICAgIElzX2VmZmVjdGZ1bCA9IGxpc3RzOnByZWZpeCgiZWZmZWN0ZnVsXyIsIGF0b21fdG9fbGlzdChNZXRob2QpKSwKKyAgICBDYWxsICAgICAgICAgPSBvb3A6Y2FsbChTdGF0ZSwgTWV0aG9kLCBBcmdzKSwKKyAgICAKKyAgICAlJSBUT0RPKGNwaXJvKTogbWF5YmUgYWRkIGVycm9yIGhhbmRsaW5nIGhlcmU/ID0gY2F0Y2ggb29wOmNhbGw/CisgICAgCisgICAgY2FzZSB7SXNfZWZmZWN0ZnVsLCBDYWxsfSBvZiAKKwl7dHJ1ZSwge1JldHZhbCwgU3RhdGUxfX0gLT4KKwkgICAgP1JFUExZKFJldHZhbCwgU3RhdGUxKTsKKwkKKwl7dHJ1ZSwgX01hbGZvcm1lZFJldHVybn0gLT4KKwkgICAgJSUgVE9ETyhjcGlybyk6IGJhZCBtYXRjaCAtLSByZW1vdmUgd2hlbiB3ZSdyZSBkb25lIGNvbnZlcnRpbmcKKwkgICAgaW86Zm9ybWF0KCIgICAgRVJST1I6IG9vcDpjYWxsKGVmZmVjdGZ1bF8qLC4uLC4uKSBtYWxmb3JtZWQgcmV0dXJuIHZhbHVlIH5wfm4iLCAKKwkJICAgICAgW19NYWxmb3JtZWRSZXR1cm5dKSwKKwkgICAgJSUge3N0b3AsIHNlcnZlcl9lcnJvciwgU3RhdGV9IAorCSAgICB7bm9yZXBseSwgU3RhdGV9OworCQorCXtmYWxzZSwgUmV0dmFsfSAtPgorCSAgICA/UkVQTFkoUmV0dmFsLCBTdGF0ZSkKKyAgICBlbmQuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiBoYW5kbGVfaW5mby8yCislJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgYWxsIG5vbiBjYWxsL2Nhc3QgbWVzc2FnZXMKKyUlIFJldHVybnM6IHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGFuZGxlX2luZm8oeydFWElUJywgUGlkLCBFeGNlcHR9ID0gQWxsLCBTdGF0ZSkgLT4KKyAgICBjYXNlIGNhdGNoIG9vcDpjYWxsKFN0YXRlLCBjYXRjaGVzLCBbUGlkLCBFeGNlcHRdKSBvZgorCXsnRVhJVCcsIE1NfSB3aGVuIGVsZW1lbnQoMSxNTSkgPT0gbWlzc2luZ19tZXRob2QgLT4KKwkgICAgaW86Zm9ybWF0KCJVTkhBTkRMRUQgfnAgYnkgfnAhfm4iLCBbQWxsLCBzZWxmKCldKSwKKwkgICAgJSUgbm90IGNhdWdodAorCSAgICB7c3RvcCwgQWxsLCBTdGF0ZX07CisJX0lzQ2F1Z2h0IC0+CisJICAgICUlIGNhdWdodCBhbmQgaGFuZGxlZAorCSAgICB7bm9yZXBseSwgU3RhdGV9CisgICAgZW5kOworCQoraGFuZGxlX2luZm8oSW5mbywgU3RhdGUpIC0+CisgICAgaW86Zm9ybWF0KCJ+cCBpbmZvRUQhOiB+cH5uIiwgW3NlbGYoKSwgSW5mb10pLAorICAgIHtub3JlcGx5LCBTdGF0ZX0uCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiB0ZXJtaW5hdGUvMgorJSUgRGVzY3JpcHRpb246IFNodXRkb3duIHRoZSBzZXJ2ZXIKKyUlIFJldHVybnM6IGFueSAoaWdub3JlZCBieSBnZW5fc2VydmVyKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+CisgICAgaW86Zm9ybWF0KCJ+cCB0ZXJtaW5hdGVkITogfnB+biIsIFtzZWxmKCksIFJlYXNvbl0pLAorICAgIG9rLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jOiBjb2RlX2NoYW5nZS8zCislJSBQdXJwb3NlOiBDb252ZXJ0IHByb2Nlc3Mgc3RhdGUgd2hlbiBjb2RlIGlzIGNoYW5nZWQKKyUlIFJldHVybnM6IHtvaywgTmV3U3RhdGV9CisgJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29kZV9jaGFuZ2UoT2xkVnNuLCBTdGF0ZSwgRXh0cmEpIC0+CisgICAge29rLCBTdGF0ZX0uCisKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlJSBJbnRlcm5hbCBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDlmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuZXJsCkBAIC0wLDAgKzEsODQgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodEJ1ZmZlcmVkVHJhbnNwb3J0KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzEsIGlzT3Blbi8xLCBvcGVuLzEsIGNsb3NlLzEsIHJlYWQvMiwgZWZmZWN0ZnVsX3dyaXRlLzIsIGVmZmVjdGZ1bF9mbHVzaC8xXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpOworP0RFRklORV9BVFRSKHRyYW5zcG9ydCk7Cis/REVGSU5FX0FUVFIod2J1ZikuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRUcmFuc3BvcnQuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIodHJhbnNwb3J0KSArKworICAgID9GT1JNQVRfQVRUUih3YnVmKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhUcmFuc3BvcnQpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KCksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXIsIHRyYW5zcG9ydD1UcmFuc3BvcnQsIHdidWY9IiJ9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworaXNPcGVuKFRoaXMpIC0+CisgICAgVHJhbnNwb3J0ID0gb29wOmdldChUaGlzLCB0cmFuc3BvcnQpLAorICAgID9SMChUcmFuc3BvcnQsIGlzT3BlbikuCisKK29wZW4oVGhpcykgLT4KKyAgICBUcmFuc3BvcnQgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zcG9ydCksCisgICAgP1IwKFRyYW5zcG9ydCwgb3BlbikuCisKK2Nsb3NlKFRoaXMpIC0+CisgICAgVHJhbnNwb3J0ID0gb29wOmdldChUaGlzLCB0cmFuc3BvcnQpLAorICAgID9SMChUcmFuc3BvcnQsIGNsb3NlKS4KKworcmVhZChUaGlzLCBTeikgLT4KKyAgICBUcmFuc3BvcnQgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zcG9ydCksCisgICAgP1IxKFRyYW5zcG9ydCwgcmVhZCwgU3opLgorCitlZmZlY3RmdWxfd3JpdGUoVGhpcywgQnVmKSAtPiAlIGJlIHN1cmUgdG8gcmViaW5kIFRoaXMgdG8gdGhlIHJldHZhbAorICAgIFdidWYgPSBvb3A6Z2V0KFRoaXMsIHdidWYpLAorICAgIFRoaXMxID0gb29wOnNldChUaGlzLCB3YnVmLCBXYnVmKytCdWYpLCAlIFRPRE86ICsrIGVmZmljaWVuY3k/CisgICAge29rLCBUaGlzMX0uCisKK2VmZmVjdGZ1bF9mbHVzaChUaGlzKSAtPgorICAgIFdidWYgPSBvb3A6Z2V0KFRoaXMsIHdidWYpLAorICAgIFRyYW5zcG9ydCA9IG9vcDpnZXQoVGhpcywgdHJhbnNwb3J0KSwgICAgCisgICAgP1IxKFRyYW5zcG9ydCwgZWZmZWN0ZnVsX3dyaXRlLCBXYnVmKSwKKyAgICA/UjAoVHJhbnNwb3J0LCBlZmZlY3RmdWxfZmx1c2gpLAorICAgIFRoaXMxID0gb29wOnNldChUaGlzLCB3YnVmLCAiIiksCisgICAge29rLCBUaGlzMX0uCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydEZhY3RvcnkuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDZhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5LmVybApAQCAtMCwwICsxLDU0IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRCdWZmZXJlZFRyYW5zcG9ydEZhY3RvcnkpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydEZhY3RvcnkuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgZ2V0VHJhbnNwb3J0LzJdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9BVFRSX0RVTU1ZLgorCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0VHJhbnNwb3J0RmFjdG9yeS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChfVGhpcykgLT4KKyAgICAiIi4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldygpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KCksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXJ9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworZ2V0VHJhbnNwb3J0KF9UaGlzLCBUcmFucykgLT4KKyAgICBnZW5fc2VydmVyOnN0YXJ0X2xpbmsodEJ1ZmZlcmVkVHJhbnNwb3J0LCB7bmV3LCBbVHJhbnNdfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90RXJsQWNjZXB0b3IuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEVybEFjY2VwdG9yLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDA2MjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEVybEFjY2VwdG9yLmVybApAQCAtMCwwICsxLDIyNiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0RXJsQWNjZXB0b3IpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFNlcnZlclNvY2tldC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdEVybEFjY2VwdG9yLmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzMsIGFjY2VwdC80XSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpOworP0RFRklORV9BVFRSKHNlcnZlclBpZCk7Cis/REVGSU5FX0FUVFIodHJhbnNwb3J0RmFjdG9yeSk7Cis/REVGSU5FX0FUVFIocHJvdG9jb2xGYWN0b3J5KS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFNlcnZlclRyYW5zcG9ydC4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihzZXJ2ZXJQaWQpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIodHJhbnNwb3J0RmFjdG9yeSkgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihwcm90b2NvbEZhY3RvcnkpLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KFNlcnZlclBpZCwgVEYsIFBGKSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldygpLAorICAgICM/TU9EVUxFe3N1cGVyID0gU3VwZXIsIAorCSAgICAgc2VydmVyUGlkID0gU2VydmVyUGlkLAorCSAgICAgdHJhbnNwb3J0RmFjdG9yeSA9IFRGLAorCSAgICAgcHJvdG9jb2xGYWN0b3J5ID0gUEYKKwkgICAgfS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2FjY2VwdChUaGlzLCBMaXN0ZW5Tb2NrZXQsIEdQLCBIYW5kbGVyKSAtPgorICAgIGlvOmZvcm1hdCgiYWNjZXB0b3Igc3RhcnRlZH5uIixbXSksCisgICAgCisgICAgU2VydmVyUGlkID0gb29wOmdldChUaGlzLCBzZXJ2ZXJQaWQpLAorICAgIAorICAgIGNhc2UgY2F0Y2ggZ2VuX3RjcDphY2NlcHQoTGlzdGVuU29ja2V0KSBvZgorCXtvaywgU29ja2V0fSAtPgorCSAgICAKKwkgICAgP0MwKFNlcnZlclBpZCwgZWZmZWN0ZnVsX25ld19hY2NlcHRvciksICUlIGNhc3QgdG8gY3JlYXRlIG5ldyBhY2NlcHRvcgorCisJICAgICUlIHN0YXJ0X25ldyh0U29ja2V0LCBbXSkKKwkgICAgQ2xpZW50ID0gb29wOnN0YXJ0X25ldyh0U29ja2V0LCBbXSksCisJICAgID9SMShDbGllbnQsIGVmZmVjdGZ1bF9zZXRIYW5kbGUsIFNvY2tldCksICUlIFRPRE8oY3Bpcm8pOiBzaG91bGQgd2UganVzdCBsZXQgdGhpcyBiZSBhIHBhcmFtIHRvIHRoZSBjb25zdHJ1Y3Rvcj8KKworCSAgICAlJSBjcGlybzogT1BBUVVFISEgVHJhbnMgPSBDbGllbnQKKwkgICAgVEYgICAgICA9IG9vcDpnZXQoVGhpcywgdHJhbnNwb3J0RmFjdG9yeSksCisJICAgIFRyYW5zICAgPSA/RjEoVEYsIGdldFRyYW5zcG9ydCwgQ2xpZW50KSwgCisKKwkgICAgJSUgY3Bpcm86IE9QQVFVRSEhIFByb3QgPSBzdGFydF9uZXcodEJpbmFyeVByb3RvY29sLCBbVHJhbnNdKQorCSAgICBQRiAgICAgID0gb29wOmdldChUaGlzLCBwcm90b2NvbEZhY3RvcnkpLAorCSAgICBQcm90ICAgID0gP0YxKFBGLCBnZXRQcm90b2NvbCwgVHJhbnMpLCAKKworCSAgICAlJSBzdGFydF9uZXcoLCAuLi4pCisJICAgIFByb2Nlc3NvciA9IG9vcDpzdGFydF9uZXcodEVybFByb2Nlc3NvciwgW0dQLCBIYW5kbGVyXSksICUlIFRPRE8KKworCSAgICByZWNlaXZlX2xvb3AoVGhpcywgUHJvY2Vzc29yLCBQcm90LCBQcm90KSwKKwkgICAgCisJICAgIGV4aXQoYWNjZXB0b3JfZG9uZSk7ICUlIFRPRE8oY3Bpcm8pOiBncmFjZT8KKworCUVsc2UgLT4KKwkgICAgUiA9IGxpc3RzOmZsYXR0ZW4oCisJICAgICAgaW9fbGliOmZvcm1hdCgiYWNjZXB0KCkgZmFpbGVkOiB+cCIsIFtFbHNlXSkpLAorICAgIAorCSAgICBleGl0KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KFIpKQorICAgIGVuZC4KKworcmVjZWl2ZV9sb29wKFRoaXMsIFByb2Nlc3NvciwgSXByb3QsIE9wcm90KSAtPgorICAgIGNhc2UgY2F0Y2ggP1IyKFByb2Nlc3NvciwgcHJvY2VzcywgSXByb3QsIE9wcm90KSBvZiAKKwl7J0VYSVQnLCBYfSAtPiAKKwkgICAgaW86Zm9ybWF0KCJBY2NlcHRvcjogd2UgZ290dGEgfnB+biIsIFtYXSk7CisKKwlWYWx1ZSAtPgorCSAgICBpbzpmb3JtYXQoInJlcXVlc3QgcHJvY2Vzc2VkOiBydj1+cH5uIiwgW1ZhbHVlXSksCisJICAgIHJlY2VpdmVfbG9vcChUaGlzLCBQcm9jZXNzb3IsIElwcm90LCBPcHJvdCkKKyAgICBlbmQuCisKKyUlJQorJSUlIGVycm9yIGhhbmRsZXJzCislJSUKKworJSUgZW5kCisKKyUlJSBvbGQgY29kZXoKKworJSUgZWZmZWN0ZnVsX2xpc3RlbihUaGlzKSAtPgkJCQkJCQkJICAgICAgICAlJQorJSUgICAgIFBvcnQgPSBvb3A6Z2V0KFRoaXMsIHBvcnQpLAkJCQkJCQkgICAgICAgICUlCislJSAgICAgT3B0aW9ucyA9IFtiaW5hcnksIHtwYWNrZXQsIDB9LCB7YWN0aXZlLCBmYWxzZX1dLCAlIHdhcyBbXQkJCSAgICAgICAgJSUKKyUlIAkJCQkJCQkJCQkJICAgICAgICAlJQorJSUgICAgIGNhc2UgZ2VuX3RjcDpsaXN0ZW4oUG9ydCwgT3B0aW9ucykgb2YgCQkJCQkJICAgICAgICAlJQorJSUgCXtvaywgTGlzdGVuU29ja2V0fSAtPgkJCQkJCQkJICAgICAgICAlJQorJSUgCSAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgaGFuZGxlLCBMaXN0ZW5Tb2NrZXQpLAkJCQkgICAgICAgICUlCislJSAJICAgIHtvaywgVGhpczF9CQkJCQkJCQkJICAgICAgICAlJQorJSUgICAgIAkJCQkJCQkJCQkJICAgICAgICAlJQorJSUgCSUge2Vycm9yLCBffSAtPiAJCQkJCQkJCSAgICAgICAgJSUKKyUlIAklIFRPRE86IG5vIGVycm9yIGhhbmRsaW5nIGluIFJ1YnkgdmVyc2lvbj8JCQkJCSAgICAgICAgJSUKKyUlICAgICBlbmQuCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkJCQkJCQkJCQkJICAgICAgICAlJQorJSUgYWNjZXB0KFRoaXMpIC0+CQkJCQkJCQkJICAgICAgICAlJQorJSUgICAgIGNhc2Ugb29wOmdldChUaGlzLCBoYW5kbGUpIG9mIAkJCQkJCQkgICAgICAgICUlCislJSAJbmlsIC0+CQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkgICAgbmlsOyAlIGNwaXJvOiBzaWMgdGhlIFJ1YnkgY29kZQkJCQkJCSAgICAgICAgJSUKKyUlIAkJCQkJCQkJCQkJICAgICAgICAlJQorJSUgCUhhbmRsZSAtPgkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkgICAgY2FzZSBnZW5fdGNwOmFjY2VwdChIYW5kbGUpIG9mCQkJCQkJICAgICAgICAlJQorJSUgCQl7b2ssIFNvY2t9IC0+CQkJCQkJCQkgICAgICAgICUlCislJSAJCSAgICBUcmFucyA9IG9vcDpzdGFydF9uZXcodFNvY2tldCwgW10pLAkJCQkJICAgICAgICAlJQorJSUgCQkgICAgP1IxKFRyYW5zLCBlZmZlY3RmdWxfc2V0SGFuZGxlLCBTb2NrKSwJCQkJICAgICAgICAlJQorJSUgCQkgICAgVHJhbnMJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkgICAgICAgICUge2Vycm9yLCBffSAtPiAJCQkJCQkJICAgICAgICAlJQorJSUgICAgICAgICAgICAgICAgICUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPwkJCQkgICAgICAgICUlCislJSAJICAgIGVuZAkJCQkJCQkJCQkgICAgICAgICUlCislJSAgICAgZW5kLgkJCQkJCQkJCQkgICAgICAgICUlCislJSAJCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIGVmZmVjdGZ1bF9jbG9zZShUaGlzKSAtPgkJCQkJCQkJICAgICAgICAlJQorJSUgICAgIGNhc2Ugb29wOmdldChUaGlzLCBoYW5kbGUpIG9mIAkJCQkJCQkgICAgICAgICUlCislJSAJbmlsIC0+CQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkgICAge25pbCwgVGhpc307CQkJCQkJCQkgICAgICAgICUlCislJSAJSGFuZGxlIC0+CQkJCQkJCQkJICAgICAgICAlJQorJSUgCSAgICBjYXNlIGdlbl90Y3A6Y2xvc2UoSGFuZGxlKSBvZiAJCQkJCQkgICAgICAgICUlCislJSAJCW9rIC0+CQkJCQkJCQkJICAgICAgICAlJQorJSUgCQkgICAge29rLCBUaGlzfSAlIGNwaXJvOiBzaWMgdGhlIFJ1YnkgdmVyc2lvbjogZG9uJ3Qgc2V0IGhhbmRsZSB0byBuaWwJICAgICAgICAlJQorJSUgCSAgICAgICAgJSB7ZXJyb3IsIF99IC0+IAkJCQkJCQkgICAgICAgICUlCislJSAgICAgICAgICAgICAgICAgJSBUT0RPOiBubyBlcnJvciBoYW5kbGluZyBpbiBSdWJ5IHZlcnNpb24/CQkJCSAgICAgICAgJSUKKyUlIAkgICAgZW5kCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICBlbmQuCQkJCQkJCQkJCSAgICAgICAgJSUKKworCislJSUgdGVoIGlzZXJ2ZXoKKworJSUgLW1vZHVsZShpc2VydmVfc29ja2V0KS4JCQkJCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKyUlIC1leHBvcnQoW3N0YXJ0X2xpbmsvM10pLgkJCQkJCQkJCQkJICUlCislJSAJCQkJCQkJCQkJCQkJCSAlJQorJSUgLWV4cG9ydChbaW5pdC8xXSkuCQkJCQkJCQkJCQkJICUlCislJSAtaW5jbHVkZSgiaXNlcnZlLmhybCIpLgkJCQkJCQkJCQkJICUlCislJSAJCQkJCQkJCQkJCQkJCSAlJQorJSUgJVRFU1QJCQkJCQkJCQkJCQkJICUlCislJSAtZXhwb3J0KFtoYW5kbGVfZ2V0LzJdKS4JCQkJCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKyUlIC1kZWZpbmUobm90X2ltcGxlbWVudGVkXzUwMSwgIkhUVFAvMS4xIDUwMSBOb3QgSW1wbGVtZW50ZWRcclxuXHJcbiIpLgkJCQkJICUlCislJSAtZGVmaW5lKGZvcmJpZGRlbl80MDMsICJIVFRQLzEuMSA0MDMgRm9yYmlkZGVuXHJcblxyXG4iKS4JCQkJCQkJICUlCislJSAtZGVmaW5lKG5vdF9mb3VuZF80MDQsICJIVFRQLzEuMSA0MDQgTm90IEZvdW5kXHJcblxyXG4iKS4JCQkJCQkJICUlCislJSAJCQkJCQkJCQkJCQkJCSAlJQorJSUgLXJlY29yZChjLCAge3NvY2ssCQkJCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgcG9ydCwJCQkJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICBwZWVyX2FkZHIsCQkJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICBwZWVyX3BvcnQJCQkJCQkJCQkJCSAlJQorJSUgCSAgICAgfSkuCQkJCQkJCQkJCQkJICUlCislJSAJCQkJCQkJCQkJCQkJCSAlJQorJSUgLWRlZmluZShzZXJ2ZXJfaWRsZV90aW1lb3V0LCAzMCoxMDAwKS4JCQkJCQkJCQkgJSUKKyUlIAkJCQkJCQkJCQkJCQkJICUlCislJSBzdGFydF9saW5rKExpc3RlblBpZCwgTGlzdGVuU29ja2V0LCBMaXN0ZW5Qb3J0KSAtPgkJCQkJCQkJICUlCislJSAgICAgcHJvY19saWI6c3Bhd25fbGluayg/TU9EVUxFLCBpbml0LCBbe0xpc3RlblBpZCwgTGlzdGVuU29ja2V0LCBMaXN0ZW5Qb3J0fV0pLgkJCQkgJSUKKyUlIAkJCQkJCQkJCQkJCQkJICUlCisKKyAgCislJSBpbml0KHtMaXN0ZW5fcGlkLCBMaXN0ZW5fc29ja2V0LCBMaXN0ZW5Qb3J0fSkgLT4JCQkJCQkJCSAlJQorJSUgICAgICUgZXJyb3JfbG9nZ2VyOmluZm9fbXNnKCJTb2NrZXQgU3RhcnRlZH5uIiksCQkJCQkJCQkgJSUKKyUlICAgICBjYXNlIGNhdGNoIGdlbl90Y3A6YWNjZXB0KExpc3Rlbl9zb2NrZXQpIG9mCQkJCQkJCQkgJSUKKyUlIAl7b2ssIFNvY2tldH0gLT4JCQkJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICUlIFNlbmQgdGhlIGNhc3QgbWVzc2FnZSB0byB0aGUgbGlzdGVuZXIgcHJvY2VzcyB0byBjcmVhdGUgYSBuZXcgYWNjZXB0b3IJCQkgJSUKKyUlIAkgICAgaXNlcnZlX3NlcnZlcjpjcmVhdGUoTGlzdGVuX3BpZCwgc2VsZigpKSwJCQkJCQkJCSAlJQorJSUgCSAgICB7b2ssIHtBZGRyLCBQb3J0fX0gPSBpbmV0OnBlZXJuYW1lKFNvY2tldCksCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgIENvbm4gPSAjY3tzb2NrID0gU29ja2V0LAkJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTGlzdGVuUG9ydCwJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICAgICAgICAgICBwZWVyX2FkZHIgPSBBZGRyLAkJCQkJCQkJCSAlJQorJSUgICAgICAgICAgICAgICAgICAgICAgIHBlZXJfcG9ydCA9IFBvcnR9LAkJCQkJCQkJCSAlJQorJSUgCSAgICByZXF1ZXN0KENvbm4sICNyZXF7fSk7ICUlIEp1bXAgdG8gc3RhdGUgJ3JlcXVlc3QnCQkJCQkJCSAlJQorJSUgCUVsc2UgLT4JCQkJCQkJCQkJCQkJICUlCislJSAJICAgIGVycm9yX2xvZ2dlcjplcnJvcl9yZXBvcnQoW3thcHBsaWNhdGlvbiwgaXNlcnZlfSwJCQkJCQkJICUlCislJSAJCQkJICAgICAgICJBY2NlcHQgZmFpbGVkIGVycm9yIiwJCQkJCQkJICUlCislJSAJCQkJICAgICAgIGlvX2xpYjpmb3JtYXQoIn5wIixbRWxzZV0pXSksCQkJCQkJICUlCislJSAJICAgIGV4aXQoe2Vycm9yLCBhY2NlcHRfZmFpbGVkfSkJCQkJCQkJCQkgJSUKKyUlICAgICBlbmQuCQkJCQkJCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKworJSUgcmVxdWVzdChDb25uLCBSZXEpIC0+CQkJCQkJCQkJCQkgJSUKKyUlICAgICBjYXNlIGdlbl90Y3A6cmVjdihDb25uI2Muc29jaywgMCwgP3NlcnZlcl9pZGxlX3RpbWVvdXQpIG9mCQkJCQkJICUlCislJSAgICAgICAgIHtvaywge2h0dHBfcmVxdWVzdCxNZXRob2QsUGF0aCxWZXJzaW9ufX0gLT4JCQkJCQkJCSAlJQorJSUgICAgICAgICAgICAgaGVhZGVycyhDb25uLCBSZXEjcmVxe3ZzbiA9IFZlcnNpb24sCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBNZXRob2QsCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBQYXRofSwgW10pOwkJCQkJCQkJICUlCislJSAgICAgICAgIHtlcnJvciwge2h0dHBfZXJyb3IsICJcclxuIn19IC0+CQkJCQkJCQkJICUlCislJSAJICAgIHJlcXVlc3QoQ29ubiwgUmVxKTsJCQkJCQkJCQkJCSAlJQorJSUgCXtlcnJvciwge2h0dHBfZXJyb3IsICJcbiJ9fSAtPgkJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgIHJlcXVlc3QoQ29ubiwgUmVxKTsJCQkJCQkJCQkJICUlCislJSAgICAgICAgIHt0Y3BfY2xvc2VkLCBfUG9ydH0gLT4JCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICBlcnJvcl9sb2dnZXI6aW5mb19tc2coIkNsb3NlZCBjb25uZWN0aW9uOiB+cCB+cH5uIiwgW0Nvbm4jYy5wZWVyX2FkZHIsIENvbm4jYy5wZWVyX3BvcnRdKSwJICUlCislJSAgICAgICAgICAgICBleGl0KG5vcm1hbCk7CQkJCQkJCQkJCQkgJSUKKyUlIAlfT3RoZXIgLT4JCQkJCQkJCQkJCQkgJSUKKyUlIAkgICAgZXhpdChub3JtYWwpCQkJCQkJCQkJCQkgJSUKKyUlICAgICBlbmQuCQkJCQkJCQkJCQkJCSAlJQorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2JmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmVybApAQCAtMCwwICsxLDk2IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRTZXJ2ZXJTb2NrZXQpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFNlcnZlclNvY2tldC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8xLCBlZmZlY3RmdWxfbGlzdGVuLzEsIGFjY2VwdC8xLCBlZmZlY3RmdWxfY2xvc2UvMV0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKTsKKz9ERUZJTkVfQVRUUihwb3J0KTsKKz9ERUZJTkVfQVRUUihoYW5kbGUpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0U2VydmVyVHJhbnNwb3J0LgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KFRoaXMpIC0+CisgICAgP0ZPUk1BVF9BVFRSKHBvcnQpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIoaGFuZGxlKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhQb3J0KSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldygpLAorICAgICM/TU9EVUxFe3N1cGVyID0gU3VwZXIsIHBvcnQgPSBQb3J0LCBoYW5kbGUgPSBuaWx9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworZWZmZWN0ZnVsX2xpc3RlbihUaGlzKSAtPgorICAgIFBvcnQgPSBvb3A6Z2V0KFRoaXMsIHBvcnQpLAorICAgIE9wdGlvbnMgPSBbYmluYXJ5LCB7cGFja2V0LCAwfSwge2FjdGl2ZSwgZmFsc2V9XSwgJSB3YXMgW10KKworICAgIGNhc2UgZ2VuX3RjcDpsaXN0ZW4oUG9ydCwgT3B0aW9ucykgb2YgCisJe29rLCBMaXN0ZW5Tb2NrZXR9IC0+CisJICAgIFRoaXMxID0gb29wOnNldChUaGlzLCBoYW5kbGUsIExpc3RlblNvY2tldCksCisJICAgIHtvaywgVGhpczF9CisgICAgCisJJSB7ZXJyb3IsIF99IC0+IAorCSUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPworICAgIGVuZC4KKworYWNjZXB0KFRoaXMpIC0+CisgICAgY2FzZSBvb3A6Z2V0KFRoaXMsIGhhbmRsZSkgb2YgCisJbmlsIC0+CisJICAgIG5pbDsgJSBjcGlybzogc2ljIHRoZSBSdWJ5IGNvZGUKKworCUhhbmRsZSAtPgorCSAgICBjYXNlIGdlbl90Y3A6YWNjZXB0KEhhbmRsZSkgb2YKKwkJe29rLCBTb2NrfSAtPgorCQkgICAgVHJhbnMgPSBvb3A6c3RhcnRfbmV3KHRTb2NrZXQsIFtdKSwKKwkJICAgID9SMShUcmFucywgZWZmZWN0ZnVsX3NldEhhbmRsZSwgU29jayksCisJCSAgICBUcmFucworCSAgICAgICAgJSB7ZXJyb3IsIF99IC0+IAorICAgICAgICAgICAgICAgICUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPworCSAgICBlbmQKKyAgICBlbmQuCisKK2VmZmVjdGZ1bF9jbG9zZShUaGlzKSAtPgorICAgIGNhc2Ugb29wOmdldChUaGlzLCBoYW5kbGUpIG9mIAorCW5pbCAtPgorCSAgICB7bmlsLCBUaGlzfTsKKwlIYW5kbGUgLT4KKwkgICAgY2FzZSBnZW5fdGNwOmNsb3NlKEhhbmRsZSkgb2YgCisJCW9rIC0+CisJCSAgICB7b2ssIFRoaXN9ICUgY3Bpcm86IHNpYyB0aGUgUnVieSB2ZXJzaW9uOiBkb24ndCBzZXQgaGFuZGxlIHRvIG5pbAorCSAgICAgICAgJSB7ZXJyb3IsIF99IC0+IAorICAgICAgICAgICAgICAgICUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPworCSAgICBlbmQKKyAgICBlbmQuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RTZXJ2ZXJUcmFuc3BvcnQuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzljY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmVybApAQCAtMCwwICsxLDUyIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRTZXJ2ZXJUcmFuc3BvcnQpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzBdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9BVFRSX0RVTU1ZLgorCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICBub25lLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KF9UaGlzKSAtPgorICAgICIiLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KCkgLT4KKyAgICAjP01PRFVMRXt9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworZ2V0VHJhbnNwb3J0KF9UaGlzLCBUcmFucykgLT4KKyAgICBUcmFucy4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RTb2NrZXQuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFNvY2tldC5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjMDY2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RTb2NrZXQuZXJsCkBAIC0wLDAgKzEsMTI2IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRTb2NrZXQpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybCIpLgorJSAtaW5jbHVkZSgidHJhbnNwb3J0L3RUcmFuc3BvcnQuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RTb2NrZXQuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgbmV3LzEsIG5ldy8yLCAKKwkgZWZmZWN0ZnVsX3NldEhhbmRsZS8yLCBlZmZlY3RmdWxfb3Blbi8xLCAKKwkgaXNPcGVuLzEsIHdyaXRlLzIsIHJlYWQvMiwgZWZmZWN0ZnVsX2Nsb3NlLzFdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcik7Cis/REVGSU5FX0FUVFIoaG9zdCk7Cis/REVGSU5FX0FUVFIocG9ydCk7Cis/REVGSU5FX0FUVFIoaGFuZGxlKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFRyYW5zcG9ydC4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihob3N0KSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKHBvcnQpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIoaGFuZGxlKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhIb3N0LCBQb3J0KSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldygpLAorICAgICM/TU9EVUxFe3N1cGVyPVN1cGVyLCBob3N0PUhvc3QsIHBvcnQ9UG9ydCwgaGFuZGxlPW5pbH0uCisKK25ldyhIb3N0KSAtPgorICAgIG5ldyhIb3N0LCA5MDkwKS4KKworbmV3KCkgLT4KKyAgICBuZXcoImxvY2FsaG9zdCIsIDkwOTApLgorICAgIAorJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2VmZmVjdGZ1bF9zZXRIYW5kbGUoVGhpcywgSGFuZGxlKSAtPgorICAgIHtvaywgb29wOnNldChUaGlzLCBoYW5kbGUsIEhhbmRsZSl9LgorCitlZmZlY3RmdWxfb3BlbihUaGlzKSAtPiAKKyAgICBIb3N0ID0gb29wOmdldChUaGlzLCBob3N0KSwKKyAgICBQb3J0ID0gb29wOmdldChUaGlzLCBwb3J0KSwKKyAgICBPcHRpb25zID0gW10sCisKKyAgICBjYXNlIGdlbl90Y3A6Y29ubmVjdChIb3N0LCBQb3J0LCBPcHRpb25zKSBvZgorCXtlcnJvciwgX30gLT4KKwkgICAgZXhpdCh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldygKKwkJICAgP3RUcmFuc3BvcnRFeGNlcHRpb25fTk9UX09QRU4sCisJCSAgICJDb3VsZCBub3QgY29ubmVjdCB0byAiICsrIEhvc3QgKysgIjoiICsrIFBvcnQpCisJCSApOworCXtvaywgU29ja2V0fSAtPgorCSAgICB7b2ssIG9vcDpzZXQoVGhpcywgaGFuZGxlLCBTb2NrZXQpfQorICAgIGVuZC4KKworaXNPcGVuKFRoaXMpIC0+CisgICAgb29wOmdldChUaGlzLCBoYW5kbGUpIC89IG5pbC4KKword3JpdGUoVGhpcywgU3RyKSAtPgorICAgIEhhbmRsZSA9IG9vcDpnZXQoVGhpcywgaGFuZGxlKSwKKyAgICBWYWwgPSBnZW5fdGNwOnNlbmQoSGFuZGxlLCBTdHIpLAorCisgICAgJSUgaW86Zm9ybWF0KCJXUklURSB8fnB8KH5wKX5uIiwgW1N0cixWYWxdKSwKKyAgICAKKyAgICBjYXNlIFZhbCBvZgorCXtlcnJvciwgX30gLT4KKwkgICAgdGhyb3codFRyYW5zcG9ydEV4Y2VwdGlvbjpuZXcoP3RUcmFuc3BvcnRFeGNlcHRpb25fTk9UX09QRU4sICJpbiB3cml0ZSIpKTsKKwlvayAtPgorCSAgICBvaworICAgIGVuZC4KKworcmVhZChUaGlzLCBTeikgLT4KKyAgICBIYW5kbGUgPSBvb3A6Z2V0KFRoaXMsIGhhbmRsZSksCisgICAgY2FzZSBnZW5fdGNwOnJlY3YoSGFuZGxlLCBTeikgb2YKKwl7b2ssIFtdfSAtPgorCSAgICBIb3N0ID0gb29wOmdldChUaGlzLCBob3N0KSwKKwkgICAgUG9ydCA9IG9vcDpnZXQoVGhpcywgcG9ydCksCisJICAgIHRocm93KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX1VOS05PV04sICJUU29ja2V0OiBDb3VsZCBub3QgcmVhZCAiICsrIFN6ICsrICJieXRlcyBmcm9tICIgKysgSG9zdCArKyAiOiIgKysgUG9ydCkpOworCXtvaywgRGF0YX0gLT4KKwkgICAgRGF0YTsKKwl7ZXJyb3IsIEVycm9yfSAtPgorCSAgICBpbzpmb3JtYXQoImluIHRTb2NrZXQ6cmVhZC8yOiBnZW5fdGNwOnJlY3YofnAsIH5wKSA9PiB7ZXJyb3IsIH5wfX5uIiwKKwkJICAgICAgW0hhbmRsZSwgU3osIEVycm9yXSksCisJICAgIGV4aXQodFRyYW5zcG9ydEV4Y2VwdGlvbjpuZXcoP3RUcmFuc3BvcnRFeGNlcHRpb25fTk9UX09QRU4sICJpbiB0U29ja2V0OnJlYWQvMjogZ2VuX3RjcDpyZWN2IikpCisJZW5kLgorCSAgICAKK2VmZmVjdGZ1bF9jbG9zZShUaGlzKSAtPgorICAgIGNhc2Ugb29wOmdldChUaGlzLCBoYW5kbGUpIG9mCisJbmlsIC0+CisJICAgIHtvaywgVGhpc307CisJSGFuZGxlIC0+IAorCSAgICBnZW5fdGNwOmNsb3NlKEhhbmRsZSksCisJICAgIHtvaywgb29wOnNldChUaGlzLCBoYW5kbGUsIG5pbCl9CisgICAgZW5kLgorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RUcmFuc3BvcnQuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWE2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0LmVybApAQCAtMCwwICsxLDg2IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRUcmFuc3BvcnQpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0LmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzAsIGlzT3Blbi8xLCBvcGVuLzEsIGNsb3NlLzEsIHJlYWQvMiwgcmVhZEFsbC8yLCBlZmZlY3RmdWxfd3JpdGUvMiwgZWZmZWN0ZnVsX2ZsdXNoLzFdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9BVFRSX0RVTU1ZLgorCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICBub25lLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KF9UaGlzKSAtPgorICAgICIiLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KCkgLT4KKyAgICAjP01PRFVMRXt9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworCisKK2lzT3BlbihfVGhpcykgLT4gbmlsLgorb3BlbihfVGhpcykgLT4gbmlsLgorY2xvc2UoX1RoaXMpIC0+IG5pbC4KK3JlYWQoX1RoaXMsIF9TeikgLT4gbmlsLgorCityZWFkQWxsKFRoaXMsIFN6KSAtPgorICAgIHJlYWRBbGxfbG9vcChUaGlzLCBTeiwgIiIsIDApLgorCityZWFkQWxsX2xvb3AoVGhpcywgU3osIEJ1ZmYsIEhhdmUpIC0+CisgICAgaWYgCisJSGF2ZSA8IFN6IC0+CisJICAgIENodW5rID0gP0wxKHJlYWQsIFN6IC0gSGF2ZSksCisKKwkgICAgJSUgbWFuIGdlbl90Y3A6CisJICAgICUlIGV4YWN0bHkgTGVuZ3RoIGJ5dGVzIGFyZSByZXR1cm5lZCwgb3IgYW4gZXJyb3I7IAorCSAgICAlJSBwb3NzaWJseSBkaXNjYXJkaW5nIGxlc3MgdGhhbiBMZW5ndGggYnl0ZXMgb2YgZGF0YSB3aGVuIAorCSAgICAlJSB0aGUgc29ja2V0IGdldHMgY2xvc2VkIGZyb20gdGhlIG90aGVyIHNpZGUuCisKKwkgICAgJSUgaW86Zm9ybWF0KCJSRUFEIHx+cHx+biIsIFtDaHVua10pLAorCisJICAgIEhhdmUxID0gSGF2ZSArIChTei1IYXZlKSwgJSBsZW5ndGgoQ2h1bmspCisJICAgIEJ1ZmYxID0gQnVmZiArKyBDaHVuaywgJSBUT0RPOiArKyBlZmZpY2llbmN5PworCSAgICByZWFkQWxsX2xvb3AoVGhpcywgU3osIEJ1ZmYxLCBIYXZlMSk7CisJdHJ1ZSAtPgorCSAgICBCdWZmCisgICAgZW5kLgorCitlZmZlY3RmdWxfd3JpdGUoVGhpcywgX0J1ZikgLT4KKyAgICB7bmlsLCBUaGlzfS4KKworZWZmZWN0ZnVsX2ZsdXNoKFRoaXMpIC0+CisgICAge25pbCwgVGhpc30uCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTdhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmVybApAQCAtMCwwICsxLDU4IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRUcmFuc3BvcnRFeGNlcHRpb24pLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzAsIG5ldy8xLCBuZXcvMl0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKTsKKz9ERUZJTkVfQVRUUih0eXBlKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdEV4Y2VwdGlvbi4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUih0eXBlKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhUeXBlLCBNZXNzYWdlKSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldyhNZXNzYWdlKSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlciwgdHlwZT1UeXBlfS4KKworbmV3KCkgLT4KKyAgICBuZXcoP3RUcmFuc3BvcnRFeGNlcHRpb25fVU5LTk9XTiwgdW5kZWZpbmVkKS4KK25ldyhUeXBlKSAtPgorICAgIG5ldyhUeXBlLCB1bmRlZmluZWQpLgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzhjYTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFRyYW5zcG9ydEZhY3RvcnkuZXJsCkBAIC0wLDAgKzEsNTIgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodFRyYW5zcG9ydEZhY3RvcnkpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0RmFjdG9yeS5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBnZXRUcmFuc3BvcnQvMl0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0FUVFJfRFVNTVkuCisKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIG5vbmUuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoX1RoaXMpIC0+CisgICAgIiIuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoKSAtPgorICAgICM/TU9EVUxFe30uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCitnZXRUcmFuc3BvcnQoX1RoaXMsIFRyYW5zKSAtPgorICAgIFRyYW5zLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3R1dG9yaWFsIGIvbGliL2VybC9saWIvdGhyaWZ0L3R1dG9yaWFsCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjk3MjBhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvdHV0b3JpYWwKQEAgLTAsMCArMSBAQAorLi4vLi4vLi4vLi4vdHV0b3JpYWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvdXNlciBiL2xpYi9lcmwvbGliL3RocmlmdC91c2VyCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmE1YWFjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvdXNlcgpAQCAtMCwwICsxIEBACisuLi8uLi8uLi8uLi90dXRvcmlhbC9lcmwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvdnNuLm1rIGIvbGliL2VybC9saWIvdGhyaWZ0L3Zzbi5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWI0MDAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3Zzbi5tawpAQCAtMCwwICsxIEBACitUSFJJRlRfVlNOPTAuMQpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWNlbmNlLnR4dCBiL2xpYi9lcmwvbGljZW5jZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlMjk5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGljZW5jZS50eHQKQEAgLTAsMCArMSwyMCBAQAorVHVlIE9jdCAyNCAxMjoyODo0NCBDRFQgMjAwNgorCitDb3B5cmlnaHQgKGMpIDwyMDA2PiA8TWFydGluIEouIExvZ2FuLCBFcmx3YXJlPiAKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKK29mIHRoaXMgc29mdHdhcmUgKE9UUCBCYXNlLCBmc2xpYiwgRy5BLlMpICBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIAordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCAKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIAorSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIAorSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIAorT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIAorT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvTWFrZWZpbGUgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyNzRjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlIC4uL2J1aWxkL2NvbG9ycy5taworCitNT0RVTEVTPSQoc2hlbGwgbHMgLiB8IGdyZXAgIlteKE1ha2VmaWxlKV0iKQorCithbGwgY2xlYW46CisJQGZvciBkaXIgaW4gJChNT0RVTEVTKTsgZG8gXAorCQkoY2QgJCRkaXI7IGlmIFsgLWUgIlNLSVAiIF07IHRoZW4gIGVjaG8gJCR7TVlfTFJFRDotJChMUkVEKX0ic2tpcHBpbmcgXCJtYWtlICRAXCIgZm9yICQkZGlyIjsgZWxzZSAke01BS0V9ICRAOyBmaSk7IFwKKwkJaWYgWyAiJCQ/IiAtbmUgIjAiIF07IHRoZW4gRVJST1I9JCQ/OyBlY2hvICJFcnJvciBDb2RlICQkRVJST1IiOyBleGl0ICQkRVJST1I7IGZpOyBcCisJCWVjaG8gLW4gJChPRkYpJChOT19DT0xPUik7IFwKKwlkb25lCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9NYWtlZmlsZSBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkMzU5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9NYWtlZmlsZQpAQCAtMCwwICsxLDI5OCBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2UgZmlsZSBmb3IgY3JlYXRpbmcgYW4gb3RwIHJlbGVhc2UuIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMjCisjIEJhc2VuYW1lIG9mIHRoaXMgcmVsZWFzZS4KKyMjCitSRUxTPSQoc2hlbGwgYmFzZW5hbWUgYHB3ZGApCitBUFBfTkFNRT0kKHNoZWxsIGVjaG8gJChSRUxTKSB8IHNlZCBzL19yZWwkJC8vKQorCitpbmNsdWRlIC4uLy4uL2J1aWxkL290cC5taworCitpbmNsdWRlIC4vdnNuLm1rCisKKyNpbmNsdWRlICQoRVJMX1RPUCkvbWFrZS90YXJnZXQubWsKKyNpbmNsdWRlICQoRVJMX1RPUCkvbWFrZS8kKFRBUkdFVCkvb3RwLm1rCisKK1VTUl9MSUJQQVRIPS4uLy4uL2xpYgorSU5TVEFMTF9ESVI9L3Vzci9sb2NhbC9saWIKK0FCU19VU0VSX0xJQlBBVEg9JChzaGVsbCBjZCAuLi8uLi9saWI7cHdkKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ1JFQVRFIERJUiBTVFJVQ1RVUkUgSEVSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hURE9DUz0kKHdpbGRjYXJkICQoQUJTX1VTRVJfTElCUEFUSCkvJChBUFBfTkFNRSkvaHRkb2NzLyouaHRtbCkgXAorCSQod2lsZGNhcmQgJChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3MvKi5odG0pIFwKKwkkKHdpbGRjYXJkICQoQUJTX1VTRVJfTElCUEFUSCkvJChBUFBfTkFNRSkvaHRkb2NzLyoueWF3cykKK0JVSUxEX0ZJTEVTPWZzX2Jvb3Rfc21pdGhlLmJlYW0gZnNfbGlzdHMuYmVhbSBmc19saWIuYmVhbQorCitMT0NBTF9ESVI9bG9jYWwKKyNMT0NBTF9ESVI9JChzaGVsbCBjYXQgJChSRUxTKS5yZWwuc3JjIHxncmVwIC1tIDEgJyQoQVBQX05BTUUpJyB8YXdrIC1GICciJyAne3ByaW50ZiAiJXMtJXMiLCAkJDIsJCQ0fScpCisKK0RJUl9TVFJVQ1RVUkU9IFwKKwkkKExPQ0FMX0RJUikgXAorCSQoTE9DQUxfRElSKS9sb2cvJChSRUxfVlNOKSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzIAorCitQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkU9IFwKKwkkKFJFTFMpIFwKKwkkKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKSBcCisJJChSRUxTKS9zdGFnZSBcCisJJChSRUxTKS9sb2cvJChSRUxfVlNOKSBcCisJJChSRUxTKS92YXIvJChSRUxfVlNOKSBcCisJJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcyBcCisJJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvY29uZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NDUklQVF9BTkRfQk9PVF9GSUxFUz0gXAorCSQoUkVMUykuc2NyaXB0IFwKKwkkKFJFTFMpLmJvb3QKKworTE9DQUxfU0NSSVBUX0FORF9CT09UX0ZJTEVTPSBcCisJJChMT0NBTF9ESVIpLyQoUkVMUykuc2NyaXB0IFwKKwkkKExPQ0FMX0RJUikvJChSRUxTKS5ib290CisKK0xPQ0FMX0hUVFBfQ09ORj0gXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmYgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi9taW1lLnR5cGVzICAKKworUFJPRFVDVElPTl9IVFRQX0NPTkY9IFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlcyAgCisKK0xPQ0FMX1RBUkdFVF9GSUxFUz0kKExPQ0FMX0hUVFBfQ09ORikgJChMT0NBTF9ESVIpLyQoUkVMUykuY29uZmlnICQoTE9DQUxfU0NSSVBUX0FORF9CT09UX0ZJTEVTKQorCitMT0NBTF9UQVJHRVRTPSQoTE9DQUxfRElSKS8kKFJFTFMpLnNoIHZzbml0ICQoTE9DQUxfVEFSR0VUX0ZJTEVTKSAKKworUFJPRFVDVElPTl9UQVJHRVRTPSQoUkVMUykvYnVpbGQvJChSRUxfVlNOKSBcCisJICAgICAgICAgICAkKFJFTFMpL2xpYiBcCisgICAgICAgICAgICAgICAgICAgJChSRUxTKS9zdGFnZS8kKFJFTFMpLnJlbC5zcmMgXAorCSAgICAgICAgICAgJChSRUxTKS9zdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmMgXAorCSAgICAgICAgICAgJChSRUxTKS9zdGFnZS95YXdzLmNvbmYuc3JjIFwKKwkJICAgJChSRUxTKS9zdGFnZS8kKFJFTFMpLnNoLnNyYyAgXAorCQkgICAkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MgXAorCQkgICAkKFJFTFMpL2luc3RhbGwuc2ggXAorCQkgICAkKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKS9jbGVhbl9yZWxlYXNlIAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FsbCBkZWJ1ZyBvcHQgaW5zdHIgc2NyaXB0OiAgJChESVJfU1RSVUNUVVJFKSAkKExPQ0FMX1RBUkdFVFMpICQoUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFKSAkKFBST0RVQ1RJT05fVEFSR0VUUykKKwlAZWNobyAkKEhURE9DUykKKworaW5zdGFsbDogIHN0YWdlCisKK3RhcjogJChSRUxTKS0kKExPQ0FUSU9OKS0kKFJFTF9WU04pLnRnegorCiskKERJUl9TVFJVQ1RVUkUpOgorCW1rZGlyIC1wICRACisKKyQoUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFKToKKwlta2RpciAtcCAkQAorCQorY2xlYW46CisJJChSTSkgJChSRUxfU0NSSVBUUykgJChUQVJHRVRfRklMRVMpCisJJChSTSkgLXIgJChMT0NBTF9ESVIpICQoUFJPRE5fRElSKQorCSQoUk0pICQoUkVMUykucmVsCisJJChSTSkgLXIgJChSRUxTKQorCSQoUk0pICQoUkVMUykqLnRnegorCSQoUk0pICQoUkVMUykucmVsLnNyYy50bXAKKwkkKFJNKSAkKFNDUklQVF9BTkRfQk9PVF9GSUxFUykKKworZG9jczoKKwkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUQVJHRVRTIEZPUiBMT0NBTCBNT0RFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBzdGFydHVwIHNjcmlwdCBmb3IgbG9jYWwgbW9kZQorJChMT0NBTF9ESVIpLyQoUkVMUykuc2g6IAorCUBlY2hvICcjIS9iaW4vc2gnID4gJEAKKwlAZWNobyAiY2QgJChDVVJESVIpLyQoTE9DQUxfRElSKSIgPj4gJEAKKwlAZWNobyAiZXJsIC1uYW1lICQke1VTRVJ9XyQoUkVMUykgLWJvb3QgJChSRUxTKSAtY29uZmlnICQoUkVMUykuY29uZmlnIFwkJEAiID4+ICRACisJY2htb2QgK3ggJEAKKwlAZWNobworCUBlY2hvICI9PT09IFN0YXJ0IGxvY2FsIG5vZGUgd2l0aCBcInNoICRAXCIgPT09PSIKKwlAZWNobworCisjIENyZWF0ZSB0aGUgY29uZmlnIGZpbGUgZm9yIGxvY2FsIG1vZGUuCiskKExPQ0FMX0RJUikvJChSRUxTKS5jb25maWc6ICQoUkVMUykuY29uZmlnLnNyYworCXNlZCAtZSAnczslTE9HX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS9sb2cvJChSRUxfVlNOKTsnIFwKKwkgICAgLWUgJ3M7JVZBUl9PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTik7JyBcCisgICAgICAgICAgICAtZSAnczslUkVMUyU7JChSRUxTKTtnJyBcCisgICAgICAgICAgICAtZSAnczslSE9NRSU7JChIT01FKTtnJyBcCisgICAgICAgICAgICAtZSAnczslQlJPQURDQVNUX0FERFJFU1MlOyQoQlJPQURDQVNUX0FERFJFU1MpO2cnIFwKKyAgICAgICAgICAgIC1lICdzOyVDT05UQUNUX05PREUlOyQoQ09OVEFDVF9OT0RFKTtnJyBcCisJICAgIC1lICJzOyVIT1NUTkFNRSU7YGhvc3RuYW1lIC0tbG9uZ2A7IiBcCisgICAgICAgICAgICAtZSAnczslQVBQX05BTUUlOyQoQVBQX05BTUUpOycgXAorCSAgICAtZSAnczslQVBQX1ZFUlNJT04lOyQoQVBQX1ZFUlNJT04pO2cnIFwKKyAgICAgICAgICAgICAkPCA+ICRACisKKyMgQ3JlYXRlIHRoZSBodHRwZCBjb25mIGZpbGUgZm9yIGxvY2FsIG1vZGUuCiskKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mOiB5YXdzLmNvbmYuc3JjCisJc2VkIC1lICdzOyVWQVJfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pOycgXAorCSAgICAtZSAnczslTE9HX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS9sb2cvJChSRUxfVlNOKTsnIFwKKwkgICAgLWUgJ3M7JUhURE9DX1JPT1QlOyQoQUJTX1VTRVJfTElCUEFUSCkvJChBUFBfTkFNRSkvaHRkb2NzOycgXAorICAgICAgICAgICAgLWUgJ3M7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVSRUxTJTskKFJFTFMpOycgXAorICAgICAgICAgICAgLWUgJ3M7JVVTRVIlOyQoVVNFUik7JyBcCisJICAgIC1lICdzOyVIVERPQ19ST09UJTskKEFCU19VU0VSX0xJQlBBVEgpOycgXAorICAgICAgICAgICAgLWUgJ3M7JU1IT1NUJTskKE1IT1NUKTsnIFwKKyAgICAgICAgICAgICQ8ID4gJEAKKworIyBDcmVhdGUgdGhlIGNvbmZpZyBmaWxlIGZvciBsb2NhbCBtb2RlLgordnNuaXQ6ICQoUkVMUykucmVsLnNyYyAKKwlzZWQgLWUgJ3M7JVJFTF9WU04lOyQoUkVMX1ZTTik7JyBcCisJICAgICAgICQ8ID4gJDwudG1wCisKKyMgQ3JlYXRlIGFuZCBwb3NpdGlvbiBzY3JpcHQgYW5kIGJvb3QgZmlsZXMgZm9yIGxvY2FsIG1vZGUuCiskKExPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUyk6IAorCUAgZXJsIC1weiAkKFVTUl9MSUJQQVRIKS9mc2xpYi9lYmluIFwKKwkgICAgICAtbm9zaGVsbCBcCisJICAgICAgLXMgZnNfbGliIHNfYXBwbHkgZnNfYm9vdF9zbWl0aGUgbWFrZV9zY3JpcHRfYW5kX2Jvb3QgIltcIiQoRVJMX1JVTl9UT1ApLypcIiwgIFwiJChVU1JfTElCUEFUSClcIl0uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkJChiYXNlbmFtZSBgcHdkYCkiLnJlbC5zcmMudG1wXCIuICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltsb2NhbF0uICIgXAorCSAgICAgIC1zIGluaXQgc3RvcAorCWNwICQoU0NSSVBUX0FORF9CT09UX0ZJTEVTKSAkKExPQ0FMX0RJUikvIAorCiskKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlczogLi4vLi4vYnVpbGQvbWltZS50eXBlcworCWNwICQ8ICRACisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUQVJHRVRTIEZPUiBQUk9EVUNUSU9OIE1PREUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJChSRUxTKS9saWI6IAorCSMgRm9yIHNvbWUgcmVhc29uIHRoaXMgd2lsbCBub3QgaGFwcGVuIGlmIGFkZGVkIHRvIFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRQorCW1rZGlyICRACisJQCBlcmwgLXB6ICQoUkVMUykvYnVpbGQvJChSRUxfVlNOKSBcCisJICAgICAgLW5vc2hlbGwgXAorCSAgICAgIC1zIGZzX2xpYiBzX2FwcGx5IGZzX2Jvb3Rfc21pdGhlIHN0YWdlX2Zyb21fcmVsc3JjICJbXCIkKFVTUl9MSUJQQVRIKVwiXS4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJCQoYmFzZW5hbWUgYHB3ZGApIi5yZWwuc3JjXCIuICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRAXCIiLiAiIFwKKwkgICAgICAtcyBpbml0IHN0b3AKKworIyBNb3ZlIHRoZSBodGRvY3MgZnJvbSB0aGUgbG9jYWwgYXBwcyB0byB0aGUgcHJvZHVjdGlvbiBodGRvYyByb290IGRpcmVjdG9yeS4KKyQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcy86ICQoSFRET0NTKQorCUBta2RpciAtcCAkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3M7IFwKKwlmb3IgeCBpbiAkKEhURE9DUyk7ZG8gXAorIAkJY3AgICQkeCAkQDsgXAorCWRvbmUKKworIyBzdGFydHVwIHNjcmlwdCBmb3IgcHJvZHVjdGlvbiBtb2RlCiskKFJFTFMpL3N0YWdlLyQoUkVMUykuc2guc3JjOiAKKwlAZWNobyAnIyEvYmluL3NoJyA+ICRACisJQGVjaG8gImNkICVJTlNUQUxMX0RJUiUvJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikiID4+ICRACisJQGVjaG8gImVybCAtbmFtZSAkKFJFTFMpIC1ib290ICQoUkVMUykgLWNvbmZpZyAkKFJFTFMpLmNvbmZpZyAtZGV0YWNoZWQgXCQkQCIgPj4gJEAKKwljaG1vZCAreCAkQAorCiskKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTik6ICAkKFVTUl9MSUJQQVRIKS9mc2xpYi9lYmluCisJbWtkaXIgLXAgJChSRUxTKS9idWlsZC8kKFJFTF9WU04pIAorCWNwICQ8L2ZzX2Jvb3Rfc21pdGhlLmJlYW0gJEAKKwljcCAkPC9mc19saWIuYmVhbSAkQAorCWNwICQ8L2ZzX2xpc3RzLmJlYW0gJEAKKworJChSRUxTKS9zdGFnZS8kKFJFTFMpLnJlbC5zcmM6ICQoUkVMUykucmVsLnNyYy50bXAKKwljcCAkPCAkQAorCiskKFJFTFMpL3N0YWdlLyQoUkVMUykuY29uZmlnLnNyYzogJChSRUxTKS5jb25maWcuc3JjCisJY3AgJDwgJEAKKworJChSRUxTKS9zdGFnZS95YXdzLmNvbmYuc3JjOiB5YXdzLmNvbmYuc3JjCisJY3AgJDwgJEAKKworJChSRUxTKS9pbnN0YWxsLnNoOiAKKwlAZWNobyAnIyEvYmluL3NoJyA+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiaWYgWyBcJCQjIC1lcSAxIF07dGhlbiIgPj4gJEAKKwlAZWNobyAiICAgIElOU1RBTExfRElSPVwkJDE7IiA+PiAkQAorCUBlY2hvICJlbHNlIiA+PiAkQAorCUBlY2hvICIgICAgSU5TVEFMTF9ESVI9JChJTlNUQUxMX0RJUik7IiA+PiAkQAorCUBlY2hvICJmaSIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJmdW5jdGlvbiBtdW5nZSgpIHsiID4+ICRACisJQGVjaG8gIiAgICBzZWQgLWUgXCJzOyVMT0dfT1RQJTtcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL2xvZy8kKFJFTF9WU04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVZBUl9PVFAlO1wkJElOU1RBTExfRElSLyQoUkVMUykvdmFyLyQoUkVMX1ZTTik7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslUkVMUyU7JChSRUxTKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVSRUxfVlNOJTskKFJFTF9WU04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVVTRVIlOyQkVVNFUjtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVIVERPQ19ST09UJTtcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3M7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslTUhPU1QlO1xgaG9zdG5hbWVcYDtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVCUk9BRENBU1RfQUREUkVTUyU7JChCUk9BRENBU1RfQUREUkVTUyk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslSU5TVEFMTF9ESVIlO1wkJElOU1RBTExfRElSO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUNPTlRBQ1RfTk9ERSU7JChDT05UQUNUX05PREUpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUhPU1ROQU1FJTtcYGhvc3RuYW1lIC0tbG9uZ1xgO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVBUFBfVkVSU0lPTiU7JChBUFBfVkVSU0lPTik7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICcgICAgICAgICQkMSA+ICQkMicgPj4gJEAKKwlAZWNobyAifSIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS95YXdzLmNvbmYuc3JjIHZhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZjsiID4+ICRACisJQGVjaG8gIm11bmdlIHN0YWdlLyQoUkVMUykuY29uZmlnLnNyYyByZWxlYXNlLyQoUkVMX1ZTTikvJChSRUxTKS5jb25maWc7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLnNoLnNyYyByZWxlYXNlLyQoUkVMX1ZTTikvJChSRUxTKS5zaDsiID4+ICRACisJQGVjaG8gIm11bmdlIHN0YWdlLyQoUkVMUykucmVsLnNyYyByZWxlYXNlLyQoUkVMX1ZTTikvJChSRUxTKS5yZWw7IiA+PiAkQAorCUBlY2hvICJjaG1vZCAreCByZWxlYXNlLyQoUkVMX1ZTTikvJChSRUxTKS5zaDsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiY2QgLi47IiA+PiAkQAorCUBlY2hvICJmaW5kICQoUkVMUykgfCBjcGlvIC1vID4gXCQkSU5TVEFMTF9ESVIvJChSRUxTKS5jcGlvOyIgPj4gJEAKKwlAZWNobyAiY2QgLTsiID4+ICRACisJQGVjaG8gImNkIFwkJElOU1RBTExfRElSOyAiID4+ICRACisJQGVjaG8gImVjaG8gLW4gXCJVbnBhY2tlZDogXCIiID4+ICRACisJQGVjaG8gImNwaW8gLXVpZCA8ICQoUkVMUykuY3BpbzsiID4+ICRACisJQGVjaG8gInJtICQoUkVMUykuY3BpbzsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiZWNobyBcInB3ZCBpcyBcYHB3ZFxgXCI7IiA+PiAkQAorCUBlY2hvICJjZCAkKFJFTFMpOyIgPj4gJEAKKwlAZWNobyAiIGVybCAtcHogYnVpbGQvJChSRUxfVlNOKSBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgLW5vc2hlbGwgXFwiID4+ICRACisJQGVjaG8gLW4gIiAgICAgIC1zIGZzX2xpYiBzX2FwcGx5IGZzX2Jvb3Rfc21pdGhlIG1ha2Vfc2NyaXB0X2FuZF9ib290IFwiW1xcXCIkKEVSTF9SVU5fVE9QKS8qXFxcIiwgIFxcXCJsaWIvXFxcIl0uIFwiICIgPj4gJEAKKwlAZWNobyAtbiAgICAgICAgIlwiXFxcInN0YWdlLyQkKGJhc2VuYW1lIGBwd2RgKS5yZWwuc3JjXFxcIi4gXCIgIiA+PiAkQAorCUBlY2hvIC1uICAgICAgICAiXCJbbG9jYWxdLiBcIiAiID4+ICRACisJQGVjaG8gICAgICAgICAgICItcyBpbml0IHN0b3AgfCBlZ3JlcCAnKnRlcm1pbmF0ZSp8RVJST1InIiA+PiAkQAorCUBlY2hvICJpZiBbIFwkJD8gLWVxIDAgXTsgdGhlbiIgPj4gJEAKKwlAZWNobyAiZWNobyBcIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XCI7IiA+PiAkQAorCUBlY2hvICJlY2hvIFwiU1RBR0UgRkFJTFVSRSBcJCQ/ICAtIFNpbGVuY2UgdGhlIGRpc2NvcmQuXCI7IiA+PiAkQAorCUBlY2hvICJlY2hvIFwiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cIjsiID4+ICRACisJQGVjaG8gImV4aXQgMTsiID4+ICRACisJQGVjaG8gImZpIiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gIm12ICQoUkVMUykucmVsICQoUkVMUykuc2NyaXB0ICQoUkVMUykuYm9vdCByZWxlYXNlLyQoUkVMX1ZTTik7IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gInJtIC1yIHN0YWdlOyIgPj4gJEAKKwlAZWNobyAicm0gLXIgYnVpbGQ7IiA+PiAkQAorCUBlY2hvICJjZCAtOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJjaGdycCAtUiBlcnRzICQoUkVMUyk7ICIgPj4gJEAKKwlAZWNobyAiY2htb2QgLVIgNzc1ICQoUkVMUyk7ICIgPj4gJEAKKwlAZWNobyAiY2QgLSIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJybSAtZiAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsiID4+ICRACisJQGVjaG8gImxuIC1zIFwkJElOU1RBTExfRElSLyQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2ggL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7IiA+PiAkQAorCUBlY2hvICJjaGdycCAtUiBlcnRzIC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyAiID4+ICRACisJQGVjaG8gImNobW9kIC1SIDc3NSAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsgIiA+PiAkQAorCUBlY2hvICJybSBcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL2luc3RhbGwuc2g7IiA+PiAkQAorCUBlY2hvICJlY2hvIC1uICQkJ1xlWzA7MzJtJyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIiQoQVBQX05BTUUpIGluc3RhbGxhdGlvbiB0byBcJCRJTlNUQUxMX0RJUiBjb21wbGV0ZS5cIiIgPj4gJEAKKwlAZWNobyAiZWNobyAtbiAkJCdcZVswbSciID4+ICRACisJY2htb2QgK3ggJEAKKwkJCisKK3N0YWdlOiAkKFJFTFMpCisJY2QgJChSRUxTKTsgXAorCS4vaW5zdGFsbC5zaDsgXAorCWNkIC0KKworJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi9taW1lLnR5cGVzOiAuLi8uLi9idWlsZC9taW1lLnR5cGVzCisJY3AgJDwgJEAKKworJChSRUxTKS0kKExPQ0FUSU9OKS0kKFJFTF9WU04pLnRnejogJChSRUxTKQorCXRhciAtemN2ZiAkQCAkPAorCiskKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKS9jbGVhbl9yZWxlYXNlOiAuLi8uLi90b29scy91dGlsaXRpZXMvY2xlYW5fcmVsZWFzZQorCWNwICQ8ICRACisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3RocmlmdF9yZWwuY29uZmlnIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvbG9jYWwvdGhyaWZ0X3JlbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwOTFlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3RocmlmdF9yZWwuY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKKyUlJSAtKi0gbW9kZTplcmxhbmcgLSotCislJSUgUGFyYW1ldGVyIHNldHRpbmdzIGZvciBhcHBzIG9uIHRocmlmdAorJSUlIFdhcm5pbmcgLSB0aGlzIGNvbmZpZyBmaWxlICptdXN0KiBlbmQgd2l0aCA8ZG90Pjx3aGl0ZXNwYWNlPgorCislJSB3cml0ZSBsb2cgZmlsZXMgdG8gc2FzbF9kaXIKK1sKKyB7c2FzbCwKKyAgWworICAge3Nhc2xfZXJyb3JfbG9nZ2VyLCB7ZmlsZSwgIi9kYXRhL3VzZXJzL2NwaXJvL3RocmlmdC90cnVuay9saWIvZXJsL3JlbGVhc2UvdGhyaWZ0X3JlbC9sb2NhbC9sb2cvMS4wL3Nhc2xfbG9nIn19CisgIF19LAorCisKKyB7Z2FzLAorICBbCisgICB7bW9kX3NwZWNzLCBbe2Vsd3JhcCwge2ZzX2Vsd3JhcF9oLCBzdGFydF9saW5rfX1dfSwKKworICAgJSBlbHdyYXAgY29uZmlnLgorICAge2Vycl9sb2csICIvZGF0YS91c2Vycy9jcGlyby90aHJpZnQvdHJ1bmsvbGliL2VybC9yZWxlYXNlL3RocmlmdF9yZWwvbG9jYWwvbG9nLzEuMC9lcnJfbG9nIn0sCisgICB7ZXJyX2xvZ193cmFwX2luZm8sIHt7ZXJyLDUwMDAwMDAsMTB9LHtzYXNsLDUwMDAwMDAsMTB9fX0sIAorICAge2Vycl9sb2dfdHR5LCB0cnVlfSAlIExvZyB0byB0aGUgc2NyZWVuCisgICBdfSwKKworIHt0aHJpZnQsCisgIFsKKyAgXX0KK10uIApkaWZmIC0tZ2l0IGEvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvbG9jYWwvdGhyaWZ0X3JlbC5zaCBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3RocmlmdF9yZWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDMwYTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3RocmlmdF9yZWwuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2NkIC9kYXRhL3VzZXJzL2NwaXJvL3RocmlmdC90cnVuay9saWIvZXJsL3JlbGVhc2UvdGhyaWZ0X3JlbC9sb2NhbAorZXJsIC1uYW1lIGNwaXJvX3RocmlmdF9yZWwgLWJvb3QgdGhyaWZ0X3JlbCAtY29uZmlnIHRocmlmdF9yZWwuY29uZmlnICRACmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC92YXIvMS4wL3d3dy9jb25mL21pbWUudHlwZXMgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC92YXIvMS4wL3d3dy9jb25mL21pbWUudHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlM2MwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3Zhci8xLjAvd3d3L2NvbmYvbWltZS50eXBlcwpAQCAtMCwwICsxLDk4IEBACisKK2FwcGxpY2F0aW9uL2FjdGl2ZW1lc3NhZ2UKK2FwcGxpY2F0aW9uL2FuZHJldy1pbnNldAorYXBwbGljYXRpb24vYXBwbGVmaWxlCithcHBsaWNhdGlvbi9hdG9taWNtYWlsCithcHBsaWNhdGlvbi9kY2EtcmZ0CithcHBsaWNhdGlvbi9kZWMtZHgKK2FwcGxpY2F0aW9uL21hYy1iaW5oZXg0MAlocXgKK2FwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvCWNwdAorYXBwbGljYXRpb24vbWFjd3JpdGVpaQorYXBwbGljYXRpb24vbXN3b3JkCQlkb2MKK2FwcGxpY2F0aW9uL25ld3MtbWVzc2FnZS1pZAorYXBwbGljYXRpb24vbmV3cy10cmFuc21pc3Npb24KK2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQliaW4gZG1zIGxoYSBsemggZXhlIGNsYXNzCithcHBsaWNhdGlvbi9vZGEJCQlvZGEKK2FwcGxpY2F0aW9uL3BkZgkJCXBkZgorYXBwbGljYXRpb24vcG9zdHNjcmlwdAkJYWkgZXBzIHBzCithcHBsaWNhdGlvbi9wb3dlcnBvaW50CQlwcHQKK2FwcGxpY2F0aW9uL3JlbW90ZS1wcmludGluZworYXBwbGljYXRpb24vcnRmCQkJcnRmCithcHBsaWNhdGlvbi9zbGF0ZQorYXBwbGljYXRpb24vd2l0YQorYXBwbGljYXRpb24vd29yZHBlcmZlY3Q1LjEKK2FwcGxpY2F0aW9uL3gtYmNwaW8JCWJjcGlvCithcHBsaWNhdGlvbi94LWNkbGluawkJdmNkCithcHBsaWNhdGlvbi94LWNvbXByZXNzCQlaCithcHBsaWNhdGlvbi94LWNwaW8JCWNwaW8KK2FwcGxpY2F0aW9uL3gtY3NoCQljc2gKK2FwcGxpY2F0aW9uL3gtZGlyZWN0b3IJCWRjciBkaXIgZHhyCithcHBsaWNhdGlvbi94LWR2aQkJZHZpCithcHBsaWNhdGlvbi94LWd0YXIJCWd0YXIKK2FwcGxpY2F0aW9uL3gtZ3ppcAkJZ3oKK2FwcGxpY2F0aW9uL3gtaGRmCQloZGYKK2FwcGxpY2F0aW9uL3gtaHR0cGQtY2dpCQljZ2kKK2FwcGxpY2F0aW9uL3gta29hbgkJc2twIHNrZCBza3Qgc2ttCithcHBsaWNhdGlvbi94LWxhdGV4CQlsYXRleAorYXBwbGljYXRpb24veC1taWYJCW1pZgorYXBwbGljYXRpb24veC1uZXRjZGYJCW5jIGNkZgorYXBwbGljYXRpb24veC1zaAkJc2gKK2FwcGxpY2F0aW9uL3gtc2hhcgkJc2hhcgorYXBwbGljYXRpb24veC1zdHVmZml0CQlzaXQKK2FwcGxpY2F0aW9uL3gtc3Y0Y3BpbwkJc3Y0Y3BpbworYXBwbGljYXRpb24veC1zdjRjcmMJCXN2NGNyYworYXBwbGljYXRpb24veC10YXIJCXRhcgorYXBwbGljYXRpb24veC10Y2wJCXRjbAorYXBwbGljYXRpb24veC10ZXgJCXRleAorYXBwbGljYXRpb24veC10ZXhpbmZvCQl0ZXhpbmZvIHRleGkKK2FwcGxpY2F0aW9uL3gtdHJvZmYJCXQgdHIgcm9mZgorYXBwbGljYXRpb24veC10cm9mZi1tYW4JCW1hbgorYXBwbGljYXRpb24veC10cm9mZi1tZQkJbWUKK2FwcGxpY2F0aW9uL3gtdHJvZmYtbXMJCW1zCithcHBsaWNhdGlvbi94LXVzdGFyCQl1c3RhcgorYXBwbGljYXRpb24veC13YWlzLXNvdXJjZQlzcmMKK2FwcGxpY2F0aW9uL3ppcAkJCXppcAorYXVkaW8vYmFzaWMJCQlhdSBzbmQKK2F1ZGlvL21wZWcJCQltcGdhIG1wMgorYXVkaW8veC1haWZmCQkJYWlmIGFpZmYgYWlmYworYXVkaW8veC1wbi1yZWFsYXVkaW8JCXJhbQorYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luCXJwbQorYXVkaW8veC1yZWFsYXVkaW8JCXJhCithdWRpby94LXdhdgkJCXdhdgorY2hlbWljYWwveC1wZGIJCQlwZGIgeHl6CitpbWFnZS9naWYJCQlnaWYKK2ltYWdlL2llZgkJCWllZgoraW1hZ2UvanBlZwkJCWpwZWcganBnIGpwZQoraW1hZ2UvcG5nCQkJcG5nCitpbWFnZS90aWZmCQkJdGlmZiB0aWYKK2ltYWdlL3gtY211LXJhc3RlcgkJcmFzCitpbWFnZS94LXBvcnRhYmxlLWFueW1hcAkJcG5tCitpbWFnZS94LXBvcnRhYmxlLWJpdG1hcAkJcGJtCitpbWFnZS94LXBvcnRhYmxlLWdyYXltYXAJcGdtCitpbWFnZS94LXBvcnRhYmxlLXBpeG1hcAkJcHBtCitpbWFnZS94LXJnYgkJCXJnYgoraW1hZ2UveC14Yml0bWFwCQkJeGJtCitpbWFnZS94LXhwaXhtYXAJCQl4cG0KK2ltYWdlL3gteHdpbmRvd2R1bXAJCXh3ZAorbWVzc2FnZS9leHRlcm5hbC1ib2R5CittZXNzYWdlL25ld3MKK21lc3NhZ2UvcGFydGlhbAorbWVzc2FnZS9yZmM4MjIKK211bHRpcGFydC9hbHRlcm5hdGl2ZQorbXVsdGlwYXJ0L2FwcGxlZG91YmxlCittdWx0aXBhcnQvZGlnZXN0CittdWx0aXBhcnQvbWl4ZWQKK211bHRpcGFydC9wYXJhbGxlbAordGV4dC9odG1sCQkJaHRtbCBodG0KK3RleHQveC1zZXJ2ZXItcGFyc2VkLWh0bWwJc2h0bWwKK3RleHQvcGxhaW4JCQl0eHQKK3RleHQvcmljaHRleHQJCQlydHgKK3RleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMJdHN2Cit0ZXh0L3gtc2V0ZXh0CQkJZXR4Cit0ZXh0L3gtc2dtbAkJCXNnbWwgc2dtCit2aWRlby9tcGVnCQkJbXBlZyBtcGcgbXBlCit2aWRlby9xdWlja3RpbWUJCQlxdCBtb3YKK3ZpZGVvL3gtbXN2aWRlbwkJCWF2aQordmlkZW8veC1zZ2ktbW92aWUJCW1vdmllCit4LWNvbmZlcmVuY2UveC1jb29sdGFsawkJaWNlCit4LXdvcmxkL3gtdnJtbAkJCXdybCB2cm1sCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC92YXIvMS4wL3d3dy9jb25mL3lhd3MuY29uZiBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3Zhci8xLjAvd3d3L2NvbmYveWF3cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTdhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC92YXIvMS4wL3d3dy9jb25mL3lhd3MuY29uZgpAQCAtMCwwICsxLDE2NiBAQAorCisjIGNvbmYgZm9yIHlhd3MKKworCisjIGZpcnN0IHdlIGhhdmUgYSBzZXQgb2YgZ2xvYmFscworIyBUaGF0IGFwcGx5IHRvIGFsbCB2aXJ0dWFsIHNlcnZlcnMKKworCisjIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgbG9nZmlsZXMgZm9yCisjIGFsbCB2aXJ0dWFsIHNlcnZlcnMgd2lsbCBiZSB3cml0dGVuCisKK2xvZ2RpciA9IC92YXIvbG9nL3lhd3MKKworIyBUaGlzIHRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IHdoZXJlIGFkZGl0aW9uYWwKKyMgYmVhbSBjb2RlIGNhbiBiZSBwbGFjZWQuIFRoZSBkYWVtb24gd2lsbCBhZGQgdGhpcworIyBkaXJlY3RvcnkgdG8gaXRzIHNlYXJjaCBwYXRoCisKK2ViaW5fZGlyID0gL3Zhci95YXdzL2ViaW4KKworCisjIFRoaXMgaXMgYSBkaXJlY3Rvcnkgd2hlcmUgYXBwbGljYXRpb24gc3BlY2lmaWMgLmhybAorIyBmaWxlcyBjYW4gYmUgcGxhY2VkLiBhcHBsaWNhdGlvbiBzcGVjaWZpZyAueWF3cyBjb2RlIGNhbgorIyB0aGVuIGluY2x1ZGUgdGhlc2UgLmhybCBmaWxlcworCitpbmNsdWRlX2RpciA9IC92YXIveWF3cy9pbmNsdWRlCisKKworCisKKworIyBUaGlzIGlzIGEgZGVidWcgdmFyaWFibGUsIHBvc3NpYmxlIHZhbHVlcyBhcmUgaHR0cCB8IHRyYWZmaWMgfCBmYWxzZQorIyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUgdHJhY2UgKHBvc3NpYmx5IHRvIHRoZSB0dHkpIHdoaWxlCisjIGludm9raW5nIHlhd3MgZnJvbSB0aGUgc2hlbGwgYXMgaW4KKyMgeWF3cyAtaSAtVCAteCAoc2VlIG1hbiB5YXdzKQorCit0cmFjZSA9IGZhbHNlCisKKworCisKKworIyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHlhd3Mgc3RhcnQgYWRkaXRpb25hbCAKKyMgYXBwbGljYXRpb24gc3BlY2lmaWMgY29kZSBhdCBzdGFydHVwCisjIAorIyBydW5tb2QgPSBteW1vZHVsZQorCisKKyMgQnkgZGVmYXVsdCB5YXdzIHdpbGwgY29weSB0aGUgZXJsYW5nIGVycm9yX2xvZyBhbmQKKyMgZW5kIHdyaXRlIGl0IHRvIGEgd3JhcCBsb2cgY2FsbGVkIHJlcG9ydC5sb2cgKGluIHRoZSBsb2dkaXIpCisjIHRoaXMgZmVhdHVyZSBjYW4gYmUgdHVybmVkIG9mZi4gVGhpcyB3b3VsZCB0eXBpY2FsbHkKKyMgYmUgdGhlIGNhc2Ugd2hlbiB5YXdzIHJ1bnMgd2l0aGluIGFub3RoZXIgbGFyZ2VyIGFwcAorCitjb3B5X2Vycm9yX2xvZyA9IHRydWUKKworCisjIExvZ3MgYXJlIHdyYXAgbG9ncworCitsb2dfd3JhcF9zaXplID0gMTAwMDAwMAorCisKKyMgUG9zc2libHkgcmVzb2x2ZSBhbGwgaG9zdG5hbWVzIGluIGxvZ2ZpbGVzIHNvIHdlYmFsaXplcgorIyBjYW4gcHJvZHVjZSB0aGUgbmljZSBnZW9ncmFwaHkgcGllY2hhcnQKKworbG9nX3Jlc29sdmVfaG9zdG5hbWUgPSBmYWxzZQorCisKKworIyBmYWlsIGNvbXBsZXRlbHkgb3Igbm90IGlmIHlhd3MgZmFpbHMgCisjIHRvIGJpbmQgYSBsaXN0ZW4gc29ja2V0CitmYWlsX29uX2JpbmRfZXJyID0gdHJ1ZQorCisKKworIyBJZiB5YXdzIGlzIHN0YXJ0ZWQgYXMgcm9vdCwgaXQgY2FuLCBvbmNlIGl0IGhhcyBvcGVuZWQKKyMgYWxsIHJlbGV2YW50IHNvY2tldHMgZm9yIGxpc3RlbmluZywgY2hhbmdlIHRoZSB1aWQgdG8gYSAKKyMgdXNlciB3aXRoIGxvd2VyIGFjY2Vzc3JpZ2h0cyB0aGFuIHJvb3QgCisKKyMgdXNlcm5hbWUgPSBub2JvZHkKKworCisjIElmIEhUVFAgYXV0aCBpcyB1c2VkLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgc3BlY2lmaWMKKyMgYXV0aCBsb2cuCisKK2F1dGhfbG9nID0gdHJ1ZQorCisKKyMgV2hlbiB3ZSdyZSBydW5uaW5nIG11bHRpcGxlIHlhd3Mgc3lzdGVtcyBvbiB0aGUgc2FtZSAKKyMgaG9zdCwgd2UgbmVlZCB0byBnaXZlIGVhY2ggeWF3cyBzeXN0ZW0gYW4gaW5kaXZpZHVhbAorIyBuYW1lLiBZYXdzIHdpbGwgd3JpdGUgYSBudW1iZXIgb2YgcnVudGltZSBmaWxlcyB1bmRlcgorIyAvdG1wL3lhd3MvJHtpZH0KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXMgImRlZmF1bHQiCisKKworIyBpZCA9IG15bmFtZQorCisKKyMgZWFybGllciB2ZXJzaW9ucyBvZiBZYXdzIHBpY2tlZCB0aGUgZmlyc3QgdmlydHVhbCBob3N0CisjIGluIGEgbGlzdCBvZiBob3N0cyB3aXRoIHRoZSBzYW1lIElQL1BPUlQgd2hlbiB0aGUgSG9zdDoKKyMgaGVhZGVyIGRvZXNuJ3QgbWF0Y2ggYW55IG5hbWUgb24gYW55IEhvc3QKKyMgVGhpcyBpcyBvZnRlbiBuaWNlIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIGJ1dCBub3QKKyMgYWNjZXB0YWJsZSBpbiByZWFsIGxpdmUgaG9zdGluZyBzY2VuYXJpb3MKKworcGlja19maXJzdF92aXJ0aG9zdF9vbl9ub21hdGNoID0gdHJ1ZQorCisKKyMgQWxsIHVuaWNlcyBhcmUgYnJva2VuIHNpbmNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGJpbmQgdG8KKyMgYSBwcml2aWxlZ2VkIHBvcnQgKDwgMTAyNCkgdW5sZXNzIHVpZD09MAorIyBUaGVyZSBpcyBhIGNvbnRyaWIgaW4ganVuZ2VybCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSBieSBtZWFucyAKKyMgb2YgYW4gZXh0ZXJuYWwgc2V0dWlkIHJvb3QgcHJvZ3JhbW0gY2FsbGVkIGZkc3J2IHRvIGxpc3RlbiB0bworIyB0byBwcml2aWxlZ2VkIHBvcnQuCisjIElmIHdlIHVzZSB0aGlzIGZlYXR1cmUsIGl0IHJlcXVpcmVzIGZkc3J2IHRvIGJlIHByb3Blcmx5IGluc3RhbGxlZC4KKyMgRG9lc24ndCB5ZXQgd29yayB3aXRoIFNTTC4KKwordXNlX2Zkc3J2ID0gZmFsc2UKKworCisKKworIyBlbmQgdGhlbiBhIHNldCBvZiB2aXJ0dWFsIHNlcnZlcnMKKyMgRmlyc3QgdHdvIHZpcnRob3N0ZWQgc2VydmVycyBvbiB0aGUgc2FtZSBJUCAoMC4wLjAuMCkKKyMgaW4gdGhpcyBjYXNlLCBidXQgYW4gZXhwbGljaXQgSVAgY2FuIGJlIGdpdmVuIGFzIHdlbGwKKworPHNlcnZlciBjb3JlLm1hcnRpbmpsb2dhbi5jb20+CisJcG9ydCA9IDgwCisJbGlzdGVuID0gMC4wLjAuMAorCWRvY3Jvb3QgPSAvdmFyL3lhd3Mvd3d3CisJYXJnX3Jld3JpdGVfbW9kID0gcHdyX2FyZ19yZXdyaXRlX21vZAorCWFwcG1vZHMgPSA8cHdyLCBwd3JfbWFpbl9jb250cm9sbGVyX2FwcG1vZD4KKzwvc2VydmVyPgorCis8c2VydmVyIGxvY2FsaG9zdD4KKwlwb3J0ID0gODAKKwlsaXN0ZW4gPSAwLjAuMC4wCisJZG9jcm9vdCA9IC90bXAKKwlkaXJfbGlzdGluZ3MgPSB0cnVlCisJZGF2ID0gdHJ1ZQorCTxhdXRoPgorCQlyZWFsbSA9IGZvb2JhcgorCQlkaXIgPSAvCisJCXVzZXIgPSBmb286YmFyCisJCXVzZXIgPSBiYXo6YmFyCisJPC9hdXRoPgorPC9zZXJ2ZXI+CisKKworCisjIEFuZCB0aGVuIGFuIHNzbCBzZXJ2ZXIKKworPHNlcnZlciBjb3JlLm1hcnRpbmpsb2dhbi5jb20+CisJcG9ydCA9IDQ0MworCWRvY3Jvb3QgPSAvdG1wCisJbGlzdGVuID0gMC4wLjAuMAorCWRpcl9saXN0aW5ncyA9IHRydWUKKwk8c3NsPiAgCisJICAgICAgICBrZXlmaWxlID0gL3Vzci9sb2NhbC95YXdzL2V0Yy95YXdzLWtleS5wZW0KKwkgICAgICAgIGNlcnRmaWxlID0gL3Vzci9sb2NhbC95YXdzL2V0Yy95YXdzLWNlcnQucGVtCisJPC9zc2w+Cis8L3NlcnZlcj4KKwkJCQkKKwkKKworCisKKworCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwuY29uZmlnLnNyYyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwuY29uZmlnLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNzAxYzVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5jb25maWcuc3JjCkBAIC0wLDAgKzEsMjYgQEAKKyUlJSAtKi0gbW9kZTplcmxhbmcgLSotCislJSUgUGFyYW1ldGVyIHNldHRpbmdzIGZvciBhcHBzIG9uICVBUFBfTkFNRSUKKyUlJSBXYXJuaW5nIC0gdGhpcyBjb25maWcgZmlsZSAqbXVzdCogZW5kIHdpdGggPGRvdD48d2hpdGVzcGFjZT4KKworJSUgd3JpdGUgbG9nIGZpbGVzIHRvIHNhc2xfZGlyCitbCisge3Nhc2wsCisgIFsKKyAgIHtzYXNsX2Vycm9yX2xvZ2dlciwge2ZpbGUsICIlTE9HX09UUCUvc2FzbF9sb2cifX0KKyAgXX0sCisKKworIHtnYXMsCisgIFsKKyAgIHttb2Rfc3BlY3MsIFt7ZWx3cmFwLCB7ZnNfZWx3cmFwX2gsIHN0YXJ0X2xpbmt9fV19LAorCisgICAlIGVsd3JhcCBjb25maWcuCisgICB7ZXJyX2xvZywgIiVMT0dfT1RQJS9lcnJfbG9nIn0sCisgICB7ZXJyX2xvZ193cmFwX2luZm8sIHt7ZXJyLDUwMDAwMDAsMTB9LHtzYXNsLDUwMDAwMDAsMTB9fX0sIAorICAge2Vycl9sb2dfdHR5LCB0cnVlfSAlIExvZyB0byB0aGUgc2NyZWVuCisgICBdfSwKKworIHslQVBQX05BTUUlLAorICBbCisgIF19CitdLiAKZGlmZiAtLWdpdCBhL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwucmVsLnNyYyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwucmVsLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFkMjQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5yZWwuc3JjCkBAIC0wLDAgKzEsMTQgQEAKKyUlJSAtKi0gbW9kZTplcmxhbmcgLSotCit7cmVsZWFzZSwgCisgeyJ0aHJpZnRfcmVsIiwgIiVSRUxfVlNOJSJ9LAorIGVydHMsCisgWworICBrZXJuZWwsCisgIHN0ZGxpYiwKKyAgc2FzbCwKKyAgZnNsaWIsCisgIGdhcywKKyAgdGhyaWZ0CisgXQorfS4gCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwucmVsLnNyYy50bXAgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMudG1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzRmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMudG1wCkBAIC0wLDAgKzEsMTQgQEAKKyUlJSAtKi0gbW9kZTplcmxhbmcgLSotCit7cmVsZWFzZSwgCisgeyJ0aHJpZnRfcmVsIiwgIjEuMCJ9LAorIGVydHMsCisgWworICBrZXJuZWwsCisgIHN0ZGxpYiwKKyAgc2FzbCwKKyAgZnNsaWIsCisgIGdhcywKKyAgdGhyaWZ0CisgXQorfS4gCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3Zzbi5tayBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3Zzbi5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYWM4ZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvdnNuLm1rCkBAIC0wLDAgKzEgQEAKK1JFTF9WU049MS4wCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC95YXdzLmNvbmYuc3JjIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwveWF3cy5jb25mLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODU3YWFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwveWF3cy5jb25mLnNyYwpAQCAtMCwwICsxLDE2NiBAQAorCisjIGNvbmYgZm9yIHlhd3MKKworCisjIGZpcnN0IHdlIGhhdmUgYSBzZXQgb2YgZ2xvYmFscworIyBUaGF0IGFwcGx5IHRvIGFsbCB2aXJ0dWFsIHNlcnZlcnMKKworCisjIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgbG9nZmlsZXMgZm9yCisjIGFsbCB2aXJ0dWFsIHNlcnZlcnMgd2lsbCBiZSB3cml0dGVuCisKK2xvZ2RpciA9IC92YXIvbG9nL3lhd3MKKworIyBUaGlzIHRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IHdoZXJlIGFkZGl0aW9uYWwKKyMgYmVhbSBjb2RlIGNhbiBiZSBwbGFjZWQuIFRoZSBkYWVtb24gd2lsbCBhZGQgdGhpcworIyBkaXJlY3RvcnkgdG8gaXRzIHNlYXJjaCBwYXRoCisKK2ViaW5fZGlyID0gL3Zhci95YXdzL2ViaW4KKworCisjIFRoaXMgaXMgYSBkaXJlY3Rvcnkgd2hlcmUgYXBwbGljYXRpb24gc3BlY2lmaWMgLmhybAorIyBmaWxlcyBjYW4gYmUgcGxhY2VkLiBhcHBsaWNhdGlvbiBzcGVjaWZpZyAueWF3cyBjb2RlIGNhbgorIyB0aGVuIGluY2x1ZGUgdGhlc2UgLmhybCBmaWxlcworCitpbmNsdWRlX2RpciA9IC92YXIveWF3cy9pbmNsdWRlCisKKworCisKKworIyBUaGlzIGlzIGEgZGVidWcgdmFyaWFibGUsIHBvc3NpYmxlIHZhbHVlcyBhcmUgaHR0cCB8IHRyYWZmaWMgfCBmYWxzZQorIyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUgdHJhY2UgKHBvc3NpYmx5IHRvIHRoZSB0dHkpIHdoaWxlCisjIGludm9raW5nIHlhd3MgZnJvbSB0aGUgc2hlbGwgYXMgaW4KKyMgeWF3cyAtaSAtVCAteCAoc2VlIG1hbiB5YXdzKQorCit0cmFjZSA9IGZhbHNlCisKKworCisKKworIyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHlhd3Mgc3RhcnQgYWRkaXRpb25hbCAKKyMgYXBwbGljYXRpb24gc3BlY2lmaWMgY29kZSBhdCBzdGFydHVwCisjIAorIyBydW5tb2QgPSBteW1vZHVsZQorCisKKyMgQnkgZGVmYXVsdCB5YXdzIHdpbGwgY29weSB0aGUgZXJsYW5nIGVycm9yX2xvZyBhbmQKKyMgZW5kIHdyaXRlIGl0IHRvIGEgd3JhcCBsb2cgY2FsbGVkIHJlcG9ydC5sb2cgKGluIHRoZSBsb2dkaXIpCisjIHRoaXMgZmVhdHVyZSBjYW4gYmUgdHVybmVkIG9mZi4gVGhpcyB3b3VsZCB0eXBpY2FsbHkKKyMgYmUgdGhlIGNhc2Ugd2hlbiB5YXdzIHJ1bnMgd2l0aGluIGFub3RoZXIgbGFyZ2VyIGFwcAorCitjb3B5X2Vycm9yX2xvZyA9IHRydWUKKworCisjIExvZ3MgYXJlIHdyYXAgbG9ncworCitsb2dfd3JhcF9zaXplID0gMTAwMDAwMAorCisKKyMgUG9zc2libHkgcmVzb2x2ZSBhbGwgaG9zdG5hbWVzIGluIGxvZ2ZpbGVzIHNvIHdlYmFsaXplcgorIyBjYW4gcHJvZHVjZSB0aGUgbmljZSBnZW9ncmFwaHkgcGllY2hhcnQKKworbG9nX3Jlc29sdmVfaG9zdG5hbWUgPSBmYWxzZQorCisKKworIyBmYWlsIGNvbXBsZXRlbHkgb3Igbm90IGlmIHlhd3MgZmFpbHMgCisjIHRvIGJpbmQgYSBsaXN0ZW4gc29ja2V0CitmYWlsX29uX2JpbmRfZXJyID0gdHJ1ZQorCisKKworIyBJZiB5YXdzIGlzIHN0YXJ0ZWQgYXMgcm9vdCwgaXQgY2FuLCBvbmNlIGl0IGhhcyBvcGVuZWQKKyMgYWxsIHJlbGV2YW50IHNvY2tldHMgZm9yIGxpc3RlbmluZywgY2hhbmdlIHRoZSB1aWQgdG8gYSAKKyMgdXNlciB3aXRoIGxvd2VyIGFjY2Vzc3JpZ2h0cyB0aGFuIHJvb3QgCisKKyMgdXNlcm5hbWUgPSBub2JvZHkKKworCisjIElmIEhUVFAgYXV0aCBpcyB1c2VkLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgc3BlY2lmaWMKKyMgYXV0aCBsb2cuCisKK2F1dGhfbG9nID0gdHJ1ZQorCisKKyMgV2hlbiB3ZSdyZSBydW5uaW5nIG11bHRpcGxlIHlhd3Mgc3lzdGVtcyBvbiB0aGUgc2FtZSAKKyMgaG9zdCwgd2UgbmVlZCB0byBnaXZlIGVhY2ggeWF3cyBzeXN0ZW0gYW4gaW5kaXZpZHVhbAorIyBuYW1lLiBZYXdzIHdpbGwgd3JpdGUgYSBudW1iZXIgb2YgcnVudGltZSBmaWxlcyB1bmRlcgorIyAvdG1wL3lhd3MvJHtpZH0KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXMgImRlZmF1bHQiCisKKworIyBpZCA9IG15bmFtZQorCisKKyMgZWFybGllciB2ZXJzaW9ucyBvZiBZYXdzIHBpY2tlZCB0aGUgZmlyc3QgdmlydHVhbCBob3N0CisjIGluIGEgbGlzdCBvZiBob3N0cyB3aXRoIHRoZSBzYW1lIElQL1BPUlQgd2hlbiB0aGUgSG9zdDoKKyMgaGVhZGVyIGRvZXNuJ3QgbWF0Y2ggYW55IG5hbWUgb24gYW55IEhvc3QKKyMgVGhpcyBpcyBvZnRlbiBuaWNlIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIGJ1dCBub3QKKyMgYWNjZXB0YWJsZSBpbiByZWFsIGxpdmUgaG9zdGluZyBzY2VuYXJpb3MKKworcGlja19maXJzdF92aXJ0aG9zdF9vbl9ub21hdGNoID0gdHJ1ZQorCisKKyMgQWxsIHVuaWNlcyBhcmUgYnJva2VuIHNpbmNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGJpbmQgdG8KKyMgYSBwcml2aWxlZ2VkIHBvcnQgKDwgMTAyNCkgdW5sZXNzIHVpZD09MAorIyBUaGVyZSBpcyBhIGNvbnRyaWIgaW4ganVuZ2VybCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSBieSBtZWFucyAKKyMgb2YgYW4gZXh0ZXJuYWwgc2V0dWlkIHJvb3QgcHJvZ3JhbW0gY2FsbGVkIGZkc3J2IHRvIGxpc3RlbiB0bworIyB0byBwcml2aWxlZ2VkIHBvcnQuCisjIElmIHdlIHVzZSB0aGlzIGZlYXR1cmUsIGl0IHJlcXVpcmVzIGZkc3J2IHRvIGJlIHByb3Blcmx5IGluc3RhbGxlZC4KKyMgRG9lc24ndCB5ZXQgd29yayB3aXRoIFNTTC4KKwordXNlX2Zkc3J2ID0gZmFsc2UKKworCisKKworIyBlbmQgdGhlbiBhIHNldCBvZiB2aXJ0dWFsIHNlcnZlcnMKKyMgRmlyc3QgdHdvIHZpcnRob3N0ZWQgc2VydmVycyBvbiB0aGUgc2FtZSBJUCAoMC4wLjAuMCkKKyMgaW4gdGhpcyBjYXNlLCBidXQgYW4gZXhwbGljaXQgSVAgY2FuIGJlIGdpdmVuIGFzIHdlbGwKKworPHNlcnZlciBjb3JlLm1hcnRpbmpsb2dhbi5jb20+CisJcG9ydCA9IDgwCisJbGlzdGVuID0gMC4wLjAuMAorCWRvY3Jvb3QgPSAvdmFyL3lhd3Mvd3d3CisJYXJnX3Jld3JpdGVfbW9kID0gcHdyX2FyZ19yZXdyaXRlX21vZAorCWFwcG1vZHMgPSA8cHdyLCBwd3JfbWFpbl9jb250cm9sbGVyX2FwcG1vZD4KKzwvc2VydmVyPgorCis8c2VydmVyIGxvY2FsaG9zdD4KKwlwb3J0ID0gODAKKwlsaXN0ZW4gPSAwLjAuMC4wCisJZG9jcm9vdCA9IC90bXAKKwlkaXJfbGlzdGluZ3MgPSB0cnVlCisJZGF2ID0gdHJ1ZQorCTxhdXRoPgorCQlyZWFsbSA9IGZvb2JhcgorCQlkaXIgPSAvCisJCXVzZXIgPSBmb286YmFyCisJCXVzZXIgPSBiYXo6YmFyCisJPC9hdXRoPgorPC9zZXJ2ZXI+CisKKworCisjIEFuZCB0aGVuIGFuIHNzbCBzZXJ2ZXIKKworPHNlcnZlciBjb3JlLm1hcnRpbmpsb2dhbi5jb20+CisJcG9ydCA9IDQ0MworCWRvY3Jvb3QgPSAvdG1wCisJbGlzdGVuID0gMC4wLjAuMAorCWRpcl9saXN0aW5ncyA9IHRydWUKKwk8c3NsPiAgCisJICAgICAgICBrZXlmaWxlID0gL3Vzci9sb2NhbC95YXdzL2V0Yy95YXdzLWtleS5wZW0KKwkgICAgICAgIGNlcnRmaWxlID0gL3Vzci9sb2NhbC95YXdzL2V0Yy95YXdzLWNlcnQucGVtCisJPC9zc2w+Cis8L3NlcnZlcj4KKwkJCQkKKwkKKworCisKKworCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5lcmwgYi9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODJhZjczLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5lcmwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLW1vZHVsZSh0QmluYXJ5UHJvdG9jb2wpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmhybCIpLgotLWluY2x1ZGUoInRocmlmdC9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsIikuCi0KLS1leHBvcnQoWwotICBuZXcvMSwKLSAgdHJhbnMvMSwKLSAgc2tpcC8yLAotCi0gIHdyaXRlTWVzc2FnZUJlZ2luLzQsIHdyaXRlTWVzc2FnZUVuZC8xLAotICB3cml0ZVN0cnVjdEJlZ2luLzIsIHdyaXRlU3RydWN0RW5kLzEsCi0gIHdyaXRlRmllbGRCZWdpbi80LCB3cml0ZUZpZWxkRW5kLzEsIHdyaXRlRmllbGRTdG9wLzEsCi0gIHdyaXRlTWFwQmVnaW4vNCwgd3JpdGVNYXBFbmQvMSwKLSAgd3JpdGVMaXN0QmVnaW4vMywgd3JpdGVMaXN0RW5kLzEsCi0gIHdyaXRlU2V0QmVnaW4vMywgd3JpdGVTZXRFbmQvMSwKLQotICB3cml0ZUJvb2wvMiwgd3JpdGVCeXRlLzIsIHdyaXRlSTE2LzIsIHdyaXRlSTMyLzIsIAotICB3cml0ZUk2NC8yLCB3cml0ZURvdWJsZS8yLCB3cml0ZVN0cmluZy8yLCAKLQotICByZWFkTWVzc2FnZUJlZ2luLzEsIHJlYWRNZXNzYWdlRW5kLzEsIAotICByZWFkU3RydWN0QmVnaW4vMSwgcmVhZFN0cnVjdEVuZC8xLCAKLSAgcmVhZEZpZWxkQmVnaW4vMSwgcmVhZEZpZWxkRW5kLzEsCi0gIHJlYWRNYXBCZWdpbi8xLCByZWFkTWFwRW5kLzEsCi0gIHJlYWRMaXN0QmVnaW4vMSwgcmVhZExpc3RFbmQvMSwKLSAgcmVhZFNldEJlZ2luLzEsIHJlYWRTZXRFbmQvMSwKLQotICByZWFkQm9vbC8xLCByZWFkQnl0ZS8xLCByZWFkSTE2LzEsIHJlYWRJMzIvMSwgCi0gIHJlYWRJNjQvMSwgcmVhZERvdWJsZS8xLCByZWFkU3RyaW5nLzEKLV0pLgotCi1uZXcoVHJhbnMpIC0+Ci0gICAgI3RCaW5hcnlQcm90b2NvbHt0cmFucz1UcmFuc30uCi0KLXRyYW5zKFRoaXMpIC0+ICUgYWNjZXNzb3IKLSAgICA/QVRUUih0cmFucykuCi0KLXNraXAoVGhpcywgVHlwZSkgLT4KLSAgICB0UHJvdG9jb2w6c2tpcChUaGlzLCBUeXBlKS4KLQotd3JpdGVNZXNzYWdlQmVnaW4oVGhpcywgTmFtZSwgVHlwZSwgU2VxaWQpIC0+Ci0gICAgd3JpdGVJMzIoVGhpcywgP1ZFUlNJT05fMSBib3IgVHlwZSksCi0gICAgd3JpdGVTdHJpbmcoVGhpcywgTmFtZSksCi0gICAgd3JpdGVJMzIoVGhpcywgU2VxaWQpLgotCi13cml0ZU1lc3NhZ2VFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi13cml0ZVN0cnVjdEJlZ2luKFRoaXMsIE5hbWUpIC0+Ci0gICAgVGhpcywgTmFtZSwgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotd3JpdGVTdHJ1Y3RFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi13cml0ZUZpZWxkQmVnaW4oVGhpcywgTmFtZSwgVHlwZSwgSWQpIC0+Ci0gICAgTmFtZSwKLSAgICB3cml0ZUJ5dGUoVGhpcywgVHlwZSksCi0gICAgd3JpdGVJMTYoVGhpcywgSWQpLgotCi13cml0ZUZpZWxkRW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotd3JpdGVGaWVsZFN0b3AoVGhpcykgLT4KLSAgICB3cml0ZUJ5dGUoVGhpcywgP3RUeXBlX1NUT1ApLgotCi13cml0ZU1hcEJlZ2luKFRoaXMsIEt0eXBlLCBWdHlwZSwgU2l6ZSkgLT4KLSAgICB3cml0ZUJ5dGUoVGhpcywgS3R5cGUpLAotICAgIHdyaXRlQnl0ZShUaGlzLCBWdHlwZSksCi0gICAgd3JpdGVJMzIoVGhpcywgU2l6ZSkuCi0KLXdyaXRlTWFwRW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotd3JpdGVMaXN0QmVnaW4oVGhpcywgRXR5cGUsIFNpemUpIC0+Ci0gICAgd3JpdGVCeXRlKFRoaXMsIEV0eXBlKSwKLSAgICB3cml0ZUkzMihUaGlzLCBTaXplKS4KLQotd3JpdGVMaXN0RW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotd3JpdGVTZXRCZWdpbihUaGlzLCBFdHlwZSwgU2l6ZSkgLT4KLSAgICB3cml0ZUJ5dGUoVGhpcywgRXR5cGUpLAotICAgIHdyaXRlSTMyKFRoaXMsIFNpemUpLgotCi13cml0ZVNldEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLSUKLQotd3JpdGVCb29sKFRoaXMsIEJvb2wpIC0+Ci0gICAgaWYgQm9vbCAtPiAlIHRydWUKLQkgICAgd3JpdGVCeXRlKFRoaXMsIDEpOwotICAgICAgIHRydWUgLT4gJSBmYWxzZQotCSAgICB3cml0ZUJ5dGUoVGhpcywgMCkKLSAgICBlbmQuCi0KLXdyaXRlQnl0ZShUaGlzLCBCeXRlKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgP00xKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxCeXRlOjgvYmlnPj4pKS4KLQotd3JpdGVJMTYoVGhpcywgSTE2KSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgP00xKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxJMTY6MTYvYmlnPj4pKS4KLQotd3JpdGVJMzIoVGhpcywgSTMyKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgP00xKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxJMzI6MzIvYmlnPj4pKS4KLQotd3JpdGVJNjQoVGhpcywgSTY0KSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgP00xKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxJNjQ6NjQvYmlnPj4pKS4KLQotd3JpdGVEb3VibGUoVGhpcywgIERvdWJsZSkgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgID9NMShUcmFucywgd3JpdGUsIGJpbmFyeV90b19saXN0KDw8RG91YmxlOjY0L2JpZz4+KSkuCi0KLXdyaXRlU3RyaW5nKFRoaXMsIFN0cikgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgIHdyaXRlSTMyKFRoaXMsIGxlbmd0aChTdHIpKSwKLSAgICA/TTEoVHJhbnMsIHdyaXRlLCBTdHIpLgotCi0lCi0KLXJlYWRNZXNzYWdlQmVnaW4oVGhpcykgLT4KLSAgICBWZXJzaW9uID0gcmVhZEkzMihUaGlzKSwKLSAgICBpZiAKLQkoVmVyc2lvbiBiYW5kID9WRVJTSU9OX01BU0spIC89ID9WRVJTSU9OXzEgLT4KLQkgICAgdGhyb3codFByb3RvY29sRXhjZXB0aW9uOm5ldyg/dFByb3RvY29sRXhjZXB0aW9uX0JBRF9WRVJTSU9OLAotCQkJCQkgIk1pc3NpbmcgdmVyc2lvbiBpZGVudGlmaWVyIikpOwotCXRydWUgLT4gb2sKLSAgICBlbmQsCi0gICAgVHlwZSA9IFZlcnNpb24gYmFuZCAxNiMwMDAwMDBmZiwKLSAgICBOYW1lICA9IHJlYWRTdHJpbmcoVGhpcyksCi0gICAgU2VxaWQgPSByZWFkSTMyKFRoaXMpLAotICAgIHsgTmFtZSwgVHlwZSwgU2VxaWQgfS4KLQotcmVhZE1lc3NhZ2VFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi1yZWFkU3RydWN0QmVnaW4oVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi1yZWFkU3RydWN0RW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotcmVhZEZpZWxkQmVnaW4oVGhpcykgLT4KLSAgICBUeXBlID0gcmVhZEJ5dGUoVGhpcyksCi0gICAgaWYgVHlwZSA9PSA/dFR5cGVfU1RPUCAtPgotCSAgICB7IG5pbCwgVHlwZSwgMCB9OyAlIFdBVENICi0gICAgICAgdHJ1ZSAtPgotCSAgICBJZCA9IHJlYWRJMTYoVGhpcyksCi0JICAgIHsgbmlsLCBUeXBlLCBJZCB9Ci0gICAgZW5kLgotCi1yZWFkRmllbGRFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi1yZWFkTWFwQmVnaW4oVGhpcykgLT4KLSAgICBLdHlwZSA9IHJlYWRCeXRlKFRoaXMpLAotICAgIFZ0eXBlID0gcmVhZEJ5dGUoVGhpcyksCi0gICAgU2l6ZSAgPSByZWFkSTMyKFRoaXMpLAotICAgIHsgS3R5cGUsIFZ0eXBlLCBTaXplIH0uCi0KLXJlYWRNYXBFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi1yZWFkTGlzdEJlZ2luKFRoaXMpIC0+Ci0gICAgRXR5cGUgPSByZWFkQnl0ZShUaGlzKSwKLSAgICBTaXplICA9IHJlYWRJMzIoVGhpcyksCi0gICAgeyBFdHlwZSwgU2l6ZSB9LgotCi1yZWFkTGlzdEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLXJlYWRTZXRCZWdpbihUaGlzKSAtPgotICAgIEV0eXBlID0gcmVhZEJ5dGUoVGhpcyksCi0gICAgU2l6ZSAgPSByZWFkSTMyKFRoaXMpLAotICAgIHsgRXR5cGUsIFNpemUgfS4KLQotcmVhZFNldEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLSUgV0FUQ0ggZXZlcnl0aGluZyAuLi4gd2hvIGtub3dzIHdoYXQgb2YgdGhpcyB3aWxsIHdvcmsKLQotcmVhZEJvb2woVGhpcykgLT4KLSAgICBCeXRlID0gcmVhZEJ5dGUoVGhpcyksCi0gICAgKEJ5dGUgLz0gMCkuCi0KLXJlYWRCeXRlKFRoaXMpIC0+Ci0gICAgVHJhbnMgPSBUaGlzI3RCaW5hcnlQcm90b2NvbC50cmFucywKLSAgICA8PFZhbDo4L2ludGVnZXItc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/TTEoVHJhbnMsIHJlYWRBbGwsIDEpLAotICAgIFZhbC4KLQotcmVhZEkxNihUaGlzKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgPDxWYWw6MTYvaW50ZWdlci1zaWduZWQtYmlnLCBfL2JpbmFyeT4+ICA9ID9NMShUcmFucywgcmVhZEFsbCwgMiksCi0gICAgVmFsLgotCi1yZWFkSTMyKFRoaXMpIC0+Ci0gICAgVHJhbnMgPSBUaGlzI3RCaW5hcnlQcm90b2NvbC50cmFucywKLSAgICA8PFZhbDozMi9pbnRlZ2VyLXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP00xKFRyYW5zLCByZWFkQWxsLCA0KSwKLSAgICBWYWwuCi0KLXJlYWRJNjQoVGhpcykgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgIDw8VmFsOjY0L2ludGVnZXItc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/TTEoVHJhbnMsIHJlYWRBbGwsIDgpLAotICAgIFZhbC4KLQotcmVhZERvdWJsZShUaGlzKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgPDxWYWw6NjQvZmxvYXQtc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/TTEoVHJhbnMsIHJlYWRBbGwsIDgpLAotICAgIFZhbC4KLQotcmVhZFN0cmluZyhUaGlzKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgU3ogICAgPSByZWFkSTMyKFRoaXMpLAotICAgIGJpbmFyeV90b19saXN0KD9NMShUcmFucywgcmVhZEFsbCwgU3opKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmQ0ODM2Li4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLS1kZWZpbmUoVkVSU0lPTl9NQVNLLCAxNiNGRkZGMDAwMCkuCi0tZGVmaW5lKFZFUlNJT05fMSwgMTYjODAwMTAwMDApLgotLXJlY29yZCh0QmluYXJ5UHJvdG9jb2wsIHt0cmFuc30pLgotCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2wuZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2Y2ExMS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2wuZXJsCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLW1vZHVsZSh0UHJvdG9jb2wpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvcHJvdG9jb2wvdFByb3RvY29sLmhybCIpLgotCi0tZXhwb3J0KFtuZXcvMSwgc2tpcC8yXSkuCi0KLXNraXBfc3RydWN0X2xvb3AoVGhpcykgLT4KLSAgICB7IE5hbWUsIFR5cGUsIElkIH0gPSA/TTAoVGhpcywgcmVhZEZpZWxkQmVnaW4pLAotICAgIE5hbWUsIElkLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIGlmCi0JVHlwZSA9PSA/dFR5cGVfU1RPUCAtPgotCSAgICBvazsKLQl0cnVlIC0+Ci0JICAgIHNraXAoVGhpcywgVHlwZSksCi0JICAgID9NMChUaGlzLCByZWFkRmllbGRFbmQpLAotCi0JICAgICUlIHRoaXMgaXMgaGVyZSBpbiBvcmlnaW5hbCB0cHJvdG9jb2wucmIsIGJ1dCBpIHRoaW5rIGl0J3MgYSBidWcKLQkgICAgJSA/TTAoVGhpcywgcmVhZFN0cnVjdEVuZCksCi0JICAgIHNraXBfc3RydWN0X2xvb3AoVGhpcykKLSAgICBlbmQuCi0gICAgICAgCi1za2lwX21hcF9yZXBlYXQoVGhpcywgS3R5cGUsIFZ0eXBlLCBUaW1lcykgLT4KLSAgICBza2lwKFRoaXMsIEt0eXBlKSwKLSAgICBza2lwKFRoaXMsIFZ0eXBlKSwKLSAgICBza2lwX21hcF9yZXBlYXQoVGhpcywgS3R5cGUsIFZ0eXBlLCBUaW1lcy0xKS4KLQotc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBUaW1lcykgLT4KLSAgICBza2lwKFRoaXMsIEV0eXBlKSwKLSAgICBza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFRpbWVzLTEpLgotCi1uZXcoVHJhbnMpIC0+Ci0gICAgI3RQcm90b2NvbHt0cmFucz1UcmFuc30uCi0KLXNraXAoVGhpcywgVHlwZSkgLT4KLSAgICBjYXNlIFR5cGUgb2YgCi0JP3RUeXBlX1NUT1AgICAtPiBuaWw7ICUgV0FUQ0gKLQk/dFR5cGVfQk9PTCAgIC0+ID9NMChUaGlzLCByZWFkQm9vbCk7Ci0JP3RUeXBlX0JZVEUgICAtPiA/TTAoVGhpcywgcmVhZEJ5dGUpOwotCT90VHlwZV9JMTYgICAgLT4gP00wKFRoaXMsIHJlYWRJMTYpOwotCT90VHlwZV9JMzIgICAgLT4gP00wKFRoaXMsIHJlYWRJMzIpOwotCT90VHlwZV9JNjQgICAgLT4gP00wKFRoaXMsIHJlYWRJNjQpOwotCT90VHlwZV9ET1VCTEUgLT4gP00wKFRoaXMsIHJlYWREb3VibGUpOwotCT90VHlwZV9TVFJJTkcgLT4gP00wKFRoaXMsIHJlYWRTdHJpbmcpOwotCi0JP3RUeXBlX1NUUlVDVCAtPiAKLQkgICAgP00wKFRoaXMsIHJlYWRTdHJ1Y3RCZWdpbiksCi0JICAgIHNraXBfc3RydWN0X2xvb3AoVGhpcyksCi0KLQkgICAgJSUgdGhpcyBpc24ndCBoZXJlIGluIHRoZSBvcmlnaW5hbCB0cHJvdG9jb2wucmIsIGJ1dCBpIHRoaW5rIGl0J3MgYSBidWcKLQkgICAgP00wKFRoaXMsIHJlYWRTdHJ1Y3RFbmQpOwotCi0JP3RUeXBlX01BUCAtPgotCSAgICB7S3R5cGUsIFZ0eXBlLCBTaXplfSA9ID9NMChUaGlzLCByZWFkTWFwQmVnaW4pLAotCSAgICBza2lwX21hcF9yZXBlYXQoVGhpcywgS3R5cGUsIFZ0eXBlLCBTaXplKSwKLQkgICAgP00wKFRoaXMsIHJlYWRNYXBFbmQpOwotCi0JP3RUeXBlX1NFVCAtPiAKLQkgICAge0V0eXBlLCBTaXplfSA9ID9NMChUaGlzLCByZWFkU2V0QmVnaW4pLAotCSAgICBza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFNpemUpLAotCSAgICA/TTAoVGhpcywgcmVhZFNldEVuZCk7Ci0KLQk/dFR5cGVfTElTVCAtPgotCSAgICB7RXR5cGUsIFNpemV9ID0gP00wKFRoaXMsIHJlYWRMaXN0QmVnaW4pLAotCSAgICBza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFNpemUpLCAlIFtzaWNdIHNraXBwaW5nIHNhbWUgYXMgZm9yIFNFVAotCSAgICA/TTAoVGhpcywgcmVhZExpc3RFbmQpCi0gICAgZW5kLgotCi0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RQcm90b2NvbC5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2wuaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mzg1MTI0Li4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RQcm90b2NvbC5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0tcmVjb3JkKHRQcm90b2NvbCwge3RyYW5zfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhYTQ4YS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uZXJsCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0tbW9kdWxlKHRQcm90b2NvbEV4Y2VwdGlvbikuCi0taW5jbHVkZSgidFByb3RvY29sRXhjZXB0aW9uLmhybCIpLgotLWV4cG9ydChbbmV3LzIsIG5ldy8xLCBuZXcvMF0pLgotCi1uZXcoVHlwZSwgTWVzc2FnZSkgLT4KLSAgICAjdFByb3RvY29sRXhjZXB0aW9ue3R5cGU9VHlwZSwgbWVzc2FnZT1NZXNzYWdlfS4KLQotbmV3KFR5cGUpIC0+IG5ldyhUeXBlLCBuaWwpLgotbmV3KCkgICAgIC0+IG5ldyg/dFByb3RvY29sRXhjZXB0aW9uX1VOS05PV04sIG5pbCkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsIGIvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiZjNhYy4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0tcmVjb3JkKHRQcm90b2NvbEV4Y2VwdGlvbiwge21lc3NhZ2UsIHR5cGV9KS4KLQotLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fVU5LTk9XTiwgMCkuCi0tZGVmaW5lKHRQcm90b2NvbEV4Y2VwdGlvbl9JTlZBTElEX0RBVEEsIDEpLgotLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fTkVHQVRJVkVfU0laRSwgMikuCi0tZGVmaW5lKHRQcm90b2NvbEV4Y2VwdGlvbl9TSVpFX0xJTUlULCAzKS4KLS1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX0JBRF9WRVJTSU9OLCA0KS4KLQpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2Uvc2VydmVyL3RTZXJ2ZXIuZXJsIGIvbGliL2VybC9zcmMtbG9vc2Uvc2VydmVyL3RTZXJ2ZXIuZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMxODJlLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3NlcnZlci90U2VydmVyLmVybAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS1tb2R1bGUodFNlcnZlcikuCi0KLS1pbmNsdWRlKCJ0aHJpZnQvdGhyaWZ0LmhybCIpLgotLWluY2x1ZGUoInRocmlmdC9wcm90b2NvbC90UHJvdG9jb2wuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwiKS4KLSUgLWluY2x1ZGUoInRocmlmdC90cmFuc3BvcnQvdFRyYW5zcG9ydC5ocmwiKS4KLS1pbmNsdWRlKCJ0U2VydmVyLmhybCIpLgotCi0tZXhwb3J0KFtuZXcvMywgc2VydmUvMV0pLgotCi0lIG5vdyBwcm9jZXNzb3IgaXMgdGhlIG1vZHVsZSB3aXRoIHByb2Nlc3NfKiwgbm90IGFuIG9iamVjdAotCi1uZXcoUHJvY2Vzc29yTW9kdWxlLCBIYW5kbGVyTW9kdWxlLCBTZXJ2ZXJUcmFuc3BvcnQpIC0+Ci0gICAgI3RTZXJ2ZXJ7cHJvY2Vzc29yTW9kdWxlPVByb2Nlc3Nvck1vZHVsZSwgCi0JICAgICBoYW5kbGVyTW9kdWxlPUhhbmRsZXJNb2R1bGUsCi0JICAgICBzZXJ2ZXJUcmFuc3BvcnQ9U2VydmVyVHJhbnNwb3J0fS4KLQotc2VydmVyVHJhbnNwb3J0KFRoaXMpIC0+Ci0gICAgVGhpcyN0U2VydmVyLnNlcnZlclRyYW5zcG9ydC4KLQotc2VydmUoVGhpcykgLT4KLSAgICBTVDEgPSA/TTAoc2VydmVyVHJhbnNwb3J0KFRoaXMpLCBsaXN0ZW5fTVVUQUJMRSksCi0gICAgVGhpczEgPSBUaGlzI3RTZXJ2ZXJ7c2VydmVyVHJhbnNwb3J0PVNUMX0sCi0gICAgc2VydmVfbG9vcChUaGlzMSkuCi0KLXByb2Nlc3Nvck1vZHVsZShUaGlzKSAtPgotICAgIFRoaXMjdFNlcnZlci5wcm9jZXNzb3JNb2R1bGUuCi0KLWhhbmRsZXJNb2R1bGUoVGhpcykgLT4KLSAgICBUaGlzI3RTZXJ2ZXIuaGFuZGxlck1vZHVsZS4KLQotc2VydmVfbG9vcChUaGlzKSAtPgotICAgIGlvOmZvcm1hdCgifm5yZWFkeS5+biIsIFtdKSwKLSAgICBDbGllbnQgPSA/TTAoc2VydmVyVHJhbnNwb3J0KFRoaXMpLCBhY2NlcHRfTVVUQUJMRSksCi0gICAgVGhpczEgID0gVGhpcyN0U2VydmVye3NlcnZlclRyYW5zcG9ydD1DbGllbnR9LAotCi0gICAgVHJhbnMgID0gQ2xpZW50LCAlIGZhY3RvcnkKLSAgICBQcm90ICAgPSB0QmluYXJ5UHJvdG9jb2w6bmV3KFRyYW5zKSwKLSAgICBzZXJ2ZV9sb29wX2xvb3AoVGhpczEsIFByb3QpLCAlIGdpZ2dsZSBsb29wPwotICAgID9NMChUcmFucywgY2xvc2VfTVVUQUJMRSksICUgZG9uJ3QgImFzc2lnbiIgLi4uIGRpc2NhcmQKLSAgICBzZXJ2ZV9sb29wKFRoaXMpLgotICAgIAotc2VydmVfbG9vcF9sb29wKFRoaXMsIFByb3QpIC0+Ci0gICAgTmV4dCA9IHRyeQotCVZhbCA9IChwcm9jZXNzb3JNb2R1bGUoVGhpcykpOnByb2Nlc3MoaGFuZGxlck1vZHVsZShUaGlzKSwgUHJvdCwgUHJvdCksCi0JaW86Zm9ybWF0KCJyZXF1ZXN0IHByb2Nlc3NlZDogcnY9fnB+biIsIFtWYWxdKSwKLQlsb29wCi0gICAgY2F0Y2ggCi0JJSUgVE9ETyhjcGlybykgY2FzZSB3aGVuIGlzX3JlY29yZCguLi4pIHRvIHBpY2sgb3V0IG91ciBleGNlcHRpb24KLQklJSByZWNvcmRzIHZzLiBub3JtYWwgZXJsYW5nIHRocm93cwotCXt0VHJhbnNwb3J0RXhjZXB0aW9uLF8sX30gLT4KLQkgICAgaW86Zm9ybWF0KCJ0VHJhbnNwb3J0RXhjZXB0aW9uIChub3JtYWwtaXNoPyl+biIsIFtdKSwKLQkgICAgY2xvc2U7Ci0JRSAtPgotCSAgICBpbzpmb3JtYXQoIkVYQ0VQVElPTjogfnB+biIsIFtFXSksCi0JICAgIGNsb3NlCi0gICAgZW5kLAotICAgIGNhc2UgTmV4dCBvZiAKLQlsb29wIC0+IHNlcnZlX2xvb3BfbG9vcChUaGlzLCBQcm90KTsKLQljbG9zZSAtPiBvawotICAgIGVuZC4KLQpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2Uvc2VydmVyL3RTZXJ2ZXIuaHJsIGIvbGliL2VybC9zcmMtbG9vc2Uvc2VydmVyL3RTZXJ2ZXIuaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2RhMDI5Li4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3NlcnZlci90U2VydmVyLmhybAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS1yZWNvcmQodFNlcnZlciwge3Byb2Nlc3Nvck1vZHVsZSwgaGFuZGxlck1vZHVsZSwgc2VydmVyVHJhbnNwb3J0fSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90QXBwbGljYXRpb25FeGNlcHRpb24uZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0NTNhMy4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90QXBwbGljYXRpb25FeGNlcHRpb24uZXJsCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLW1vZHVsZSh0QXBwbGljYXRpb25FeGNlcHRpb24pLgotCi0taW5jbHVkZSgidGhyaWZ0LmhybCIpLgotJSAtaW5jbHVkZSgidEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybCIpLgotCi0tZXhwb3J0KFtuZXcvMCwgbmV3LzEsIG5ldy8yLCByZWFkLzIsIHdyaXRlLzJdKS4KLQotbmV3KFR5cGUsIE1lc3NhZ2UpIC0+Ci0gICAgI3RBcHBsaWNhdGlvbkV4Y2VwdGlvbnt0eXBlPVR5cGUsIG1lc3NhZ2U9TWVzc2FnZX0uCi0KLW5ldygpICAgICAtPiBuZXcoP3RBcHBsaWNhdGlvbkV4Y2VwdGlvbl9VTktOT1dOLCBuaWwpLiAlIFdBVENICi1uZXcoVHlwZSkgLT4gbmV3KFR5cGUsIG5pbCkuICUgV0FUQ0gKLQotcmVhZChUaGlzLCBJcHJvdCkgLT4KLSAgICA/TTAoSXByb3QsIHJlYWRTdHJ1Y3RCZWdpbiksCi0gICAgcmVhZF93aGlsZV9sb29wKFRoaXMsIElwcm90KSwKLSAgICA/TTAoSXByb3QsIHJlYWRTdHJ1Y3RFbmQpLAotICAgIFRoaXMuCi0KLXJlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCkgLT4KLSAgICB7XywgRnR5cGUsIEZpZH0gPSA/TTAoSXByb3QsIHJlYWRGaWVsZEJlZ2luKSwgJSBmaWVsZCA9IHtmbmFtZSwgZnR5cGUsIGZpZH0KLQotICAgIGlmIAotCUZ0eXBlID09ID90VHlwZV9TVE9QIC0+Ci0JICAgIFRoaXM7Ci0JKEZpZCA9PSAxKSBhbmQgKEZ0eXBlID09ID90VHlwZV9TVFJJTkcpIC0+Ci0JICAgIFRoaXMxID0gVGhpcyN0QXBwbGljYXRpb25FeGNlcHRpb257bWVzc2FnZT0/TTAoSXByb3QsIHJlYWRTdHJpbmcpfSwKLQkgICAgP00wKElwcm90LCByZWFkRmllbGRFbmQpLAotCSAgICByZWFkX3doaWxlX2xvb3AoVGhpczEsIElwcm90KTsKLQotCUZpZCA9PSAxIC0+Ci0JICAgID9NMChJcHJvdCwgc2tpcCksCi0JICAgID9NMChJcHJvdCwgcmVhZEZpZWxkRW5kKSwKLQkgICAgcmVhZF93aGlsZV9sb29wKFRoaXMsIElwcm90KTsKLQotCShGaWQgPT0gMikgYW5kIChGdHlwZSA9PSA/dFR5cGVfSTMyKSAtPgotCSAgICBUaGlzMSA9IFRoaXMjdEFwcGxpY2F0aW9uRXhjZXB0aW9ue3R5cGU9P00wKElwcm90LCByZWFkSTMyKX0sCi0JICAgID9NMChJcHJvdCwgcmVhZEZpZWxkRW5kKSwKLQkgICAgcmVhZF93aGlsZV9sb29wKFRoaXMxLCBJcHJvdCk7Ci0KLSAgICAgICAgdHJ1ZSAtPiAKLQkgICAgP00wKElwcm90LCBza2lwKSwKLQkgICAgP00wKElwcm90LCByZWFkRmllbGRFbmQpLAotCSAgICByZWFkX3doaWxlX2xvb3AoVGhpcywgSXByb3QpCi0gICAgZW5kLgotCi13cml0ZShUaGlzLCBPcHJvdCkgLT4JCi0gICAgP00xKE9wcm90LCB3cml0ZVN0cnVjdEJlZ2luLCAidEFwcGxpY2F0aW9uRXhjZXB0aW9uIiksCi0gICAgTWVzc2FnZSA9IFRoaXMjdEFwcGxpY2F0aW9uRXhjZXB0aW9uLm1lc3NhZ2UsCi0gICAgVHlwZSA9IFRoaXMjdEFwcGxpY2F0aW9uRXhjZXB0aW9uLnR5cGUsCi0gICAgaWYJTWVzc2FnZSAvPSB1bmRlZmluZWQgLT4KLQkgICAgP00zKE9wcm90LCB3cml0ZUZpZWxkQmVnaW4sICJtZXNzYWdlIiwgP3RUeXBlX1NUUklORywgMSksCi0JICAgID9NMShPcHJvdCwgd3JpdGVTdHJpbmcsIE1lc3NhZ2UpLAotCSAgICA/TTAoT3Byb3QsIHdyaXRlRmllbGRFbmQpOwotICAgICAgICB0cnVlIC0+IG9rCi0gICAgZW5kLAotICAgIGlmICBUeXBlIC89IHVuZGVmaW5lZCAtPiAKLQkgICAgP00zKE9wcm90LCB3cml0ZUZpZWxkQmVnaW4sICJ0eXBlIiwgP3RUeXBlX0kzMiwgMiksCi0JICAgID9NMShPcHJvdCwgd3JpdGVJMzIsIFR5cGUpLAotCSAgICA/TTAoT3Byb3QsIHdyaXRlRmllbGRFbmQpOwotICAgICAgICB0cnVlIC0+IG9rCi0gICAgZW5kLAotICAgID9NMChPcHJvdCwgd3JpdGVGaWVsZFN0b3ApLAotICAgID9NMChPcHJvdCwgd3JpdGVTdHJ1Y3RFbmQpLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMWY0MDEuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotJSBUQXBwbGljYXRpb25FeGNlcHRpb24KLS1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX1VOS05PV04sIDApLgotLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fVU5LTk9XTl9NRVRIT0QsIDEpLgotLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fSU5WQUxJRF9NRVNTQUdFX1RZUEUsIDIpLgotLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fV1JPTkdfTUVUSE9EX05BTUUsIDMpLgotLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fQkFEX1NFUVVFTkNFX0lELCA0KS4KLS1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX01JU1NJTkdfUkVTVUxULCA1KS4KLQotLXJlY29yZCh0QXBwbGljYXRpb25FeGNlcHRpb24sIHttZXNzYWdlLCB0eXBlPT90QXBwbGljYXRpb25FeGNlcHRpb25fVU5LTk9XTn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdEV4Y2VwdGlvbi5lcmwgYi9saWIvZXJsL3NyYy1sb29zZS90RXhjZXB0aW9uLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E0YTllOC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90RXhjZXB0aW9uLmVybAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotLW1vZHVsZSh0RXhjZXB0aW9uKS4KLS1pbmNsdWRlKCJ0RXhjZXB0aW9uLmhybCIpLgotLWV4cG9ydChbbmV3LzBdKS4KLQotbmV3KCkgLT4KLSAgICAjdEV4Y2VwdGlvbnt9LgotCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90RXhjZXB0aW9uLmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RFeGNlcHRpb24uaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjEwNTUxLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RFeGNlcHRpb24uaHJsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLXJlY29yZCh0RXhjZXB0aW9uLCB7bWVzc2FnZX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdGhyaWZ0LmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RocmlmdC5ocmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NWQ2MWMuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdGhyaWZ0LmhybAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS1kZWZpbmUoQ0xBU1MoT2JqKSwgZWxlbWVudCgxLE9iaikpLgotCi0tZGVmaW5lKE0wKE9iaiwgTWV0aG9kKSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaikpKS4KLS1kZWZpbmUoTTEoT2JqLCBNZXRob2QsIEFyZzEpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxKSkpLgotLWRlZmluZShNMihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIpKSkuCi0tZGVmaW5lKE0zKE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczKSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMiwgQXJnMykpKS4KLS1kZWZpbmUoTTQoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSkpLgotLWRlZmluZShNNShPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpKSkuCi0tZGVmaW5lKE02KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNikpKS4KLQotLWRlZmluZShBVFRSKFgpLCBUaGlzIz9NT0RVTEUuWCkuCi0KLSUlIFRUeXBlCi0tZGVmaW5lKHRUeXBlX1NUT1AsIDApLgotLWRlZmluZSh0VHlwZV9WT0lELCAxKS4KLS1kZWZpbmUodFR5cGVfQk9PTCwgMikuCi0tZGVmaW5lKHRUeXBlX0JZVEUsIDMpLgotLWRlZmluZSh0VHlwZV9ET1VCTEUsIDQpLgotLWRlZmluZSh0VHlwZV9JMTYsIDYpLgotLWRlZmluZSh0VHlwZV9JMzIsIDgpLgotLWRlZmluZSh0VHlwZV9JNjQsIDEwKS4KLS1kZWZpbmUodFR5cGVfU1RSSU5HLCAxMSkuCi0tZGVmaW5lKHRUeXBlX1NUUlVDVCwgMTIpLgotLWRlZmluZSh0VHlwZV9NQVAsIDEzKS4KLS1kZWZpbmUodFR5cGVfU0VULCAxNCkuCi0tZGVmaW5lKHRUeXBlX0xJU1QsIDE1KS4KLQotJSB0bWVzc2FnZXR5cGUKLS1kZWZpbmUodE1lc3NhZ2VUeXBlX0NBTEwsIDEpLgotLWRlZmluZSh0TWVzc2FnZVR5cGVfUkVQTFksIDIpLgotLWRlZmluZSh0TWVzc2FnZVR5cGVfRVhDRVBUSU9OLCAzKS4KLQotJSBUUHJvY2Vzc29yCi0lID8KLQotLWluY2x1ZGUoInRocmlmdC90QXBwbGljYXRpb25FeGNlcHRpb24uaHJsIikuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2M4MDlkLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuZXJsCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLW1vZHVsZSh0QnVmZmVyZWRUcmFuc3BvcnQpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5ocmwiKS4KLQotLWV4cG9ydChbbmV3LzEsIGlzT3Blbi8xLCBvcGVuLzEsIGNsb3NlLzEsIHJlYWQvMiwgd3JpdGVfTVVUQUJMRS8yLCBmbHVzaF9NVVRBQkxFLzFdKS4KLQotbmV3KFRyYW5zcG9ydCkgLT4KLSAgICAjdEJ1ZmZlcmVkVHJhbnNwb3J0e3RyYW5zcG9ydD1UcmFuc3BvcnQsIHdidWY9IiJ9LgotCi10cmFuc3BvcnQoVGhpcykgLT4gJSBsb2NhbCBhY2Nlc3NvcgotICAgIFRoaXMjdEJ1ZmZlcmVkVHJhbnNwb3J0LnRyYW5zcG9ydC4KLQotaXNPcGVuKFRoaXMpIC0+Ci0gICAgP00wKHRyYW5zcG9ydChUaGlzKSwgaXNPcGVuKS4KLQotb3BlbihUaGlzKSAtPgotICAgID9NMCh0cmFuc3BvcnQoVGhpcyksIG9wZW4pLgotCi1jbG9zZShUaGlzKSAtPgotICAgID9NMCh0cmFuc3BvcnQoVGhpcyksIGNsb3NlKS4KLQotcmVhZChUaGlzLCBTeikgLT4KLSAgICA/TTEodHJhbnNwb3J0KFRoaXMpLCByZWFkLCBTeikuCi0KLXdyaXRlX01VVEFCTEUoVGhpcywgQnVmKSAtPiAlIGJlIHN1cmUgdG8gcmViaW5kIFRoaXMgdG8gdGhlIHJldHZhbAotICAgIFdidWYgPSBUaGlzI3RCdWZmZXJlZFRyYW5zcG9ydC53YnVmLAotICAgIFRoaXMjdEJ1ZmZlcmVkVHJhbnNwb3J0e3didWY9V2J1ZisrQnVmfS4gJSBUT0RPOiArKyBlZmZpY2llbmN5PwotCi1mbHVzaF9NVVRBQkxFKFRoaXMpIC0+ICUgYmUgc3VyZSB0byByZWJpbmQgVGhpcyB0byB0aGUgcmV0dmFsCi0gICAgV2J1ZiA9IFRoaXMjdEJ1ZmZlcmVkVHJhbnNwb3J0LndidWYsCi0gICAgP00xKHRyYW5zcG9ydChUaGlzKSwgd3JpdGUsIFdidWYpLAotICAgID9NMCh0cmFuc3BvcnQoVGhpcyksIGZsdXNoKSwKLSAgICBUaGlzI3RCdWZmZXJlZFRyYW5zcG9ydHt3YnVmPSIifS4gJSBUT0RPOiArKyBlZmZpY2llbmN5PwpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhkNzFlMS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmhybAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS1yZWNvcmQodEJ1ZmZlcmVkVHJhbnNwb3J0LCB7dHJhbnNwb3J0LCB3YnVmfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5lcmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOWFmNmUuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuZXJsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLW1vZHVsZSh0U2VydmVyU29ja2V0KS4KLS1pbmNsdWRlKCJ0U2VydmVyU29ja2V0LmhybCIpLgotCi0tZXhwb3J0KFtuZXcvMSwgbGlzdGVuX01VVEFCTEUvMSwgYWNjZXB0X01VVEFCTEUvMSwgY2xvc2UvMV0pLgotCi1uZXcoUG9ydCkgLT4KLSAgICAjdFNlcnZlclNvY2tldHtwb3J0PVBvcnQsIGhhbmRsZT1uaWx9LgotCi1saXN0ZW5fTVVUQUJMRShUaGlzKSAtPgotICAgIFBvcnQgPSBUaGlzI3RTZXJ2ZXJTb2NrZXQucG9ydCwKLSAgICBPcHRpb25zID0gW2JpbmFyeSwge3BhY2tldCwgMH0sIHthY3RpdmUsIGZhbHNlfV0sICUgd2FzIFtdCi0KLSAgICBjYXNlIGdlbl90Y3A6bGlzdGVuKFBvcnQsIE9wdGlvbnMpIG9mIAotCXtvaywgTGlzdGVuU29ja2V0fSAtPgotCSAgICBUaGlzI3RTZXJ2ZXJTb2NrZXR7aGFuZGxlPUxpc3RlblNvY2tldH0KLQklIHtlcnJvciwgX30gLT4gCi0JJSBUT0RPOiBubyBlcnJvciBoYW5kbGluZyBpbiBSdWJ5IHZlcnNpb24/Ci0gICAgZW5kLgotCi1hY2NlcHRfTVVUQUJMRShUaGlzKSAtPgotICAgIGlmIAotCVRoaXMjdFNlcnZlclNvY2tldC5oYW5kbGUgLz0gbmlsIC0+Ci0JICAgIGNhc2UgZ2VuX3RjcDphY2NlcHQoVGhpcyN0U2VydmVyU29ja2V0LmhhbmRsZSkgb2YKLQkJe29rLCBTb2NrZXR9IC0+Ci0JCSAgICB0U29ja2V0OnNldEhhbmRsZV9NVVRBQkxFKCB0U29ja2V0Om5ldygpLCBTb2NrZXQgKQotCSAgICAgICAgJSB7ZXJyb3IsIF99IC0+IAotICAgICAgICAgICAgICAgICUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPwotCSAgICBlbmQ7Ci0JdHJ1ZSAtPgotCSAgICBuaWwKLSAgICBlbmQuCi0KLWNsb3NlKFRoaXMpIC0+Ci0gICAgaWYgCi0gCVRoaXMjdFNlcnZlclNvY2tldC5oYW5kbGUgLz0gbmlsIC0+Ci0JICAgIGNhc2UgZ2VuX3RjcDpjbG9zZShUaGlzI3RTZXJ2ZXJTb2NrZXQuaGFuZGxlKSBvZiAKLQkJb2sgLT4KLQkJICAgIG9rCi0JICAgICAgICAlIHtlcnJvciwgX30gLT4gCi0gICAgICAgICAgICAgICAgJSBUT0RPOiBubyBlcnJvciBoYW5kbGluZyBpbiBSdWJ5IHZlcnNpb24/Ci0JICAgIGVuZDsKLQl0cnVlIC0+Ci0JICAgIG9rCi0gICAgZW5kLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuaHJsIGIvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVkMzIwLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmhybAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS1yZWNvcmQodFNlcnZlclNvY2tldCwge3BvcnQsIGhhbmRsZX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTb2NrZXQuZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTb2NrZXQuZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTBjM2I5Li4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U29ja2V0LmVybAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS1tb2R1bGUodFNvY2tldCkuCi0KLS1pbmNsdWRlKCJ0aHJpZnQvdGhyaWZ0LmhybCIpLgotLWluY2x1ZGUoInRocmlmdC90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwiKS4KLSUgLWluY2x1ZGUoInRocmlmdC90cmFuc3BvcnQvdFRyYW5zcG9ydC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RTb2NrZXQuaHJsIikuCi0KLS1leHBvcnQoW25ldy8wLCBuZXcvMSwgbmV3LzIsIHNldEhhbmRsZV9NVVRBQkxFLzIsIG9wZW5fTVVUQUJMRS8xLCBpc09wZW4vMSwgd3JpdGUvMiwgcmVhZC8yLCBjbG9zZV9NVVRBQkxFLzEsIHJlYWRBbGwvMl0pLgotCi1uZXcoSG9zdCwgUG9ydCkgLT4KLSAgICAjdFNvY2tldHtob3N0PUhvc3QsIHBvcnQ9UG9ydCwgaGFuZGxlPW5pbH0uICUgV0FUQ0gKLQotbmV3KCkgICAgIC0+IG5ldygibG9jYWxob3N0IiwgOTA5MCkuCi1uZXcoSG9zdCkgLT4gbmV3KEhvc3QsIDkwOTApLgotICAgIAotc2V0SGFuZGxlX01VVEFCTEUoVGhpcywgSGFuZGxlKSAtPgotICAgIFRoaXMjdFNvY2tldHtoYW5kbGU9SGFuZGxlfS4KLQotb3Blbl9NVVRBQkxFKFRoaXMpIC0+IAotICAgIEhvc3QgPSBUaGlzI3RTb2NrZXQuaG9zdCwKLSAgICBQb3J0ID0gVGhpcyN0U29ja2V0LnBvcnQsCi0gICAgT3B0aW9ucyA9IFtdLAotCi0gICAgY2FzZSBnZW5fdGNwOmNvbm5lY3QoSG9zdCwgUG9ydCwgT3B0aW9ucykgb2YKLQl7ZXJyb3IsIF99IC0+Ci0JICAgIHRocm93KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KAotCQkgICAgP3RUcmFuc3BvcnRFeGNlcHRpb25fTk9UX09QRU4sCi0JCSAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gIiArKyBIb3N0ICsrICI6IiArKyBQb3J0KQotCQkgKSwKLQkgICAge2Vycm9yLCBUaGlzfTsgJSBjcGlybyBub3QgcmVhY2hlZD8KLQl7b2ssIFNvY2tldH0gLT4KLQkgICAge29rLCBUaGlzI3RTb2NrZXR7aGFuZGxlPVNvY2tldH19Ci0gICAgZW5kLgotCi1oYW5kbGUoVGhpcykgLT4KLSAgICBUaGlzI3RTb2NrZXQuaGFuZGxlLgotCi1pc09wZW4oVGhpcykgLT4KLSAgICBoYW5kbGUoVGhpcykgLz0gbmlsLgotCi13cml0ZShUaGlzLCBTdHIpIC0+Ci0gICAgVmFsID0gZ2VuX3RjcDpzZW5kKGhhbmRsZShUaGlzKSwgU3RyKSwKLQotICAgICUlIGlvOmZvcm1hdCgiV1JJVEUgfH5wfCh+cCl+biIsIFtTdHIsVmFsXSksCi0gICAgCi0gICAgY2FzZSBWYWwgb2YKLQl7ZXJyb3IsIF99IC0+Ci0JICAgIHRocm93KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLCAiaW4gd3JpdGUiKSk7Ci0Jb2sgLT4KLQkgICAgb2sKLSAgICBlbmQuCi0KLXJlYWQoVGhpcywgU3opIC0+Ci0gICAgY2FzZSBnZW5fdGNwOnJlY3YoaGFuZGxlKFRoaXMpLCBTeikgb2YKLQl7b2ssIFtdfSAtPgotCSAgICB7IEhvc3QsIFBvcnQgfSA9IHsgVGhpcyN0U29ja2V0Lmhvc3QsIFRoaXMjdFNvY2tldC5wb3J0IH0sCi0JICAgIHRocm93KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX1VOS05PV04sICJUU29ja2V0OiBDb3VsZCBub3QgcmVhZCAiICsrIFN6ICsrICJieXRlcyBmcm9tICIgKysgSG9zdCArKyAiOiIgKysgUG9ydCkpOwotCXtvaywgRGF0YX0gLT4KLQkgICAgRGF0YTsKLQl7ZXJyb3IsIEVycm9yfSAtPgotCSAgICBpbzpmb3JtYXQoImluIHRTb2NrZXQ6cmVhZC8yOiBnZW5fdGNwOnJlY3YofnAsIH5wKSA9PiB7ZXJyb3IsIH5wfX5uIiwKLQkJICAgICAgW2hhbmRsZShUaGlzKSwgU3osIEVycm9yXSksCi0JICAgIHRocm93KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLCAiaW4gdFNvY2tldDpyZWFkLzI6IGdlbl90Y3A6cmVjdiIpKQotCWVuZC4KLQkgICAgCi1jbG9zZV9NVVRBQkxFKFRoaXMpIC0+Ci0gICAgaWYKLQlUaGlzI3RTb2NrZXQuaGFuZGxlID09IG5pbCAtPgotCSAgICBUaGlzOwotCXRydWUgLT4KLQkgICAgZ2VuX3RjcDpjbG9zZShoYW5kbGUoVGhpcykpLAotCSAgICBUaGlzI3RTb2NrZXR7aGFuZGxlPW5pbH0KLSAgICBlbmQuCi0KLXJlYWRBbGwoVGhpcywgU3opIC0+Ci0gICAgcmVhZEFsbF9sb29wKFRoaXMsIFN6LCAiIiwgMCkuCi0KLXJlYWRBbGxfbG9vcChUaGlzLCBTeiwgQnVmZiwgSGF2ZSkgLT4KLSAgICBpZiAKLQlIYXZlIDwgU3ogLT4KLQkgICAgQ2h1bmsgPSA/TTEoVGhpcywgcmVhZCwgU3ogLSBIYXZlKSwKLQotCSAgICAlJSBtYW4gZ2VuX3RjcDoKLQkgICAgJSUgZXhhY3RseSBMZW5ndGggYnl0ZXMgYXJlIHJldHVybmVkLCBvciBhbiBlcnJvcjsgCi0JICAgICUlIHBvc3NpYmx5IGRpc2NhcmRpbmcgbGVzcyB0aGFuIExlbmd0aCBieXRlcyBvZiBkYXRhIHdoZW4gCi0JICAgICUlIHRoZSBzb2NrZXQgZ2V0cyBjbG9zZWQgZnJvbSB0aGUgb3RoZXIgc2lkZS4KLQotCSAgICAlJSBpbzpmb3JtYXQoIlJFQUQgfH5wfH5uIiwgW0NodW5rXSksCi0KLQkgICAgSGF2ZTEgPSBIYXZlICsgKFN6LUhhdmUpLCAlIGxlbmd0aChDaHVuaykKLQkgICAgQnVmZjEgPSBCdWZmICsrIENodW5rLCAlIFRPRE86ICsrIGVmZmljaWVuY3k/Ci0JICAgIHJlYWRBbGxfbG9vcChUaGlzLCBTeiwgQnVmZjEsIEhhdmUxKTsKLQl0cnVlIC0+Ci0JICAgIEJ1ZmYKLSAgICBlbmQuCi0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U29ja2V0LmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U29ja2V0LmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMxY2MyMC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNvY2tldC5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0tcmVjb3JkKHRTb2NrZXQsIHtob3N0LCBwb3J0LCBoYW5kbGV9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90VHJhbnNwb3J0LmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90VHJhbnNwb3J0LmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiNzIyOC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydC5lcmwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLS1tb2R1bGUodFRyYW5zcG9ydCkuCi0KLS1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsIikuCi0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxYmIyMC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5lcmwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0tbW9kdWxlKHRUcmFuc3BvcnRFeGNlcHRpb24pLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsIikuCi0KLS1leHBvcnQoW25ldy8wLCBuZXcvMSwgbmV3LzIsIG1lc3NhZ2UvMV0pLgotCi1uZXcoVHlwZSwgTWVzc2FnZSkgLT4KLSAgICAjdFRyYW5zcG9ydEV4Y2VwdGlvbnt0eXBlID0gVHlwZSwgbWVzc2FnZSA9IE1lc3NhZ2V9LgotCi1uZXcoKSAgICAgLT4gbmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX1VOS05PV04sIG5pbCkuICUgV0FUQ0gKLW5ldyhUeXBlKSAtPiBuZXcoVHlwZSwgbmlsKS4gJSBXQVRDSAotCi1tZXNzYWdlKFRoaXMpIC0+Ci0gICAgP0FUVFIobWVzc2FnZSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODU1NGIuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0tZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fVU5LTk9XTiwgMCkuCi0tZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fTk9UX09QRU4sIDEpLgotLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX0FMUkVBRFlfT1BFTiwgMikuCi0tZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fVElNRURfT1VULCAzKS4KLS1kZWZpbmUodFRyYW5zcG9ydEV4Y2VwdGlvbl9FTkRfT0ZfRklMRSwgNCkuCi0KLS1yZWNvcmQodFRyYW5zcG9ydEV4Y2VwdGlvbiwge3R5cGUsIG1lc3NhZ2V9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvdGhyaWZ0IGIvbGliL2VybC90aHJpZnQKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDFhYjRjNWMuLjAwMDAwMDAKLS0tIGEvbGliL2VybC90aHJpZnQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1zcmMtbG9vc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL01ha2VmaWxlIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjJjOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK01PRFVMRVMgPSBcCisJc3JjCisKK2FsbCBjbGVhbiBkb2NzOgorCWZvciBkaXIgaW4gJChNT0RVTEVTKTsgZG8gXAorCQkoY2QgJCRkaXI7ICR7TUFLRX0gJEApOyBcCisJZG9uZQpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9pbmNsdWRlL2JsYW5rX2FwcC5ocmwgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL2luY2x1ZGUvYmxhbmtfYXBwLmhybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9pbmNsdWRlL2JsYW5rX2FwcC5ocmwKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL01ha2VmaWxlIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTNiMDZmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEyIEBACisjICRJZDogTWFrZWZpbGUsdiAxLjMgMjAwNC8wOC8xMyAxNjozNTo1OSBtbG9nYW4gRXhwICQKKyMKK2luY2x1ZGUgLi4vLi4vLi4vYnVpbGQvb3RwLm1rCitpbmNsdWRlIC4uLy4uLy4uL2J1aWxkL2NvbG9ycy5taworaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9idWlsZHRhcmdldHMubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGxpY2F0aW9uIHZlcnNpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlIC4uL3Zzbi5taworQVBQX05BTUU9JSVBUFBfTkFNRSUlCitQRlg9JSVQRlglJQorVlNOPSQoJSVBUFBfTkFNRV9VUFBFUl9DQVNFJSVfVlNOKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW5zdGFsbCBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbgorIyBXQVJOSU5HOiBJTlNUQUxMX0RJUiB0aGUgY29tbWFuZCB0byBpbnN0YWxsIGEgZGlyZWN0b3J5LgorIyAgICAgICAgICBJTlNUQUxMX0RTVCBpcyB0aGUgdGFyZ2V0IGRpcmVjdG9yeQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNUQUxMX0RTVCA9ICQoRVJMQU5HX09UUCkvbGliLyQoQVBQX05BTUUpLSQoVlNOKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGFyZ2V0IFNwZWNzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitNT0RVTEVTID0gJChzaGVsbCBscyAqLmVybCB8IHNlZCBzLy5lcmwvLykKK01PRFVMRVNfQ09NTUEgPSAkKHNoZWxsIGxzICouZXJsIHwgc2VkIHMvXFwuZXJsLywvKQorCitIUkxfRklMRVM9CitJTlRFUk5BTF9IUkxfRklMRVM9ICQoQVBQX05BTUUpLmhybAorRVJMX0ZJTEVTPSAkKE1PRFVMRVM6JT0lLmVybCkKK0RPQ19GSUxFUz0kKEVSTF9GSUxFUykKKworQVBQX0ZJTEU9ICQoQVBQX05BTUUpLmFwcAorQVBQVVBfRklMRT0gJChBUFBfTkFNRSkuYXBwdXAKKworQVBQX1NSQz0gJChBUFBfRklMRSkuc3JjCitBUFBVUF9TUkM9ICQoQVBQVVBfRklMRSkuc3JjCisKK0FQUF9UQVJHRVQ9ICQoRUJJTikvJChBUFBfRklMRSkKK0FQUFVQX1RBUkdFVD0gJChFQklOKS8kKEFQUFVQX0ZJTEUpCisKK0JFQU1TPSAkKE1PRFVMRVM6JT0kKEVCSU4pLyUuJChFTVVMQVRPUikpCitUQVJHRVRfRklMRVM9ICQoQkVBTVMpICQoQVBQX1RBUkdFVCkgJChBUFBVUF9UQVJHRVQpCisKK1dFQl9UQVJHRVQ9L3Zhci95YXdzL3d3dy8kKEFQUF9OQU1FKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRkxBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFUkxfRkxBR1MgKz0KK0VSTF9DT01QSUxFX0ZMQUdTICs9IC1JLi4vaW5jbHVkZSAtSS4uLy4uL2ZzbGliL2luY2x1ZGUgLUkuLi8uLi9zeXN0ZW1fc3RhdHVzL2luY2x1ZGUgCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUYXJnZXRzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWxsIGRlYnVnIG9wdDogJChFQklOKSAkKFRBUkdFVF9GSUxFUykgCisKKyMkKEVCSU4pL3JtX2xvZ2dlci5iZWFtOiAkKEFQUF9OQU1FKS5ocmwKK2luY2x1ZGUgLi4vLi4vLi4vYnVpbGQvZG9jcy5taworCisjIE5vdGU6IEluIHRoZSBvcGVuLXNvdXJjZSBidWlsZCBjbGVhbiBtdXN0IG5vdCBkZXN0cm95IHRoZSBwcmVsb2FkZWQKKyMgYmVhbSBmaWxlcy4KK2NsZWFuOgorCXJtIC1mICQoVEFSR0VUX0ZJTEVTKQorCXJtIC1mIGNvcmUKKwlybSAtcmYgJChFQklOKQorCXJtIC1yZiAqaHRtbAorCiskKEVCSU4pOgorCW1rZGlyICQoRUJJTikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNwZWNpYWwgQnVpbGQgVGFyZ2V0cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyQoQVBQX1RBUkdFVCk6ICQoQVBQX1NSQykgLi4vdnNuLm1rICQoQkVBTVMpCisJc2VkIC1lICdzOyVWU04lOyQoVlNOKTsnIFwKKwkJLWUgJ3M7JVBGWCU7JChQRlgpOycgXAorCQktZSAnczslQVBQX05BTUUlOyQoQVBQX05BTUUpOycgXAorCQktZSAnczslTU9EVUxFUyU7JU1PRFVMRVMlJChNT0RVTEVTX0NPTU1BKTsnIFwKKwkJJDwgPiAkPCIudG1wIiAKKwlzZWQgLWUgJ3MvJU1PRFVMRVMlXCguKlwpLC9cMS8nIFwKKwkJJDwiLnRtcCIgPiAkQCAKKwlybSAkPCIudG1wIgorCisKKyQoQVBQVVBfVEFSR0VUKTogJChBUFBVUF9TUkMpIC4uL3Zzbi5taworCXNlZCAtZSAnczslVlNOJTskKFZTTik7JyAkPCA+ICRACisKKyQoV0VCX1RBUkdFVCk6IC4uL21hcmt1cC8qIAorCXJtIC1yZiAkKFdFQl9UQVJHRVQpIAorCW1rZGlyICQoV0VCX1RBUkdFVCkgCisJY3AgLXIgLi4vbWFya3VwLyAkKFdFQl9UQVJHRVQpCisJY3AgLXIgLi4vc2tpbnMvICQoV0VCX1RBUkdFVCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluc3RhbGwgVGFyZ2V0CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK2luc3RhbGw6IGFsbCAkKFdFQl9UQVJHRVQpCisjCSQoSU5TVEFMTF9ESVIpICQoSU5TVEFMTF9EU1QpL3NyYworIwkkKElOU1RBTExfREFUQSkgJChFUkxfRklMRVMpICQoSU5TVEFMTF9EU1QpL3NyYworIwkkKElOU1RBTExfREFUQSkgJChJTlRFUk5BTF9IUkxfRklMRVMpICQoSU5TVEFMTF9EU1QpL3NyYworIwkkKElOU1RBTExfRElSKSAkKElOU1RBTExfRFNUKS9pbmNsdWRlCisjCSQoSU5TVEFMTF9EQVRBKSAkKEhSTF9GSUxFUykgJChJTlNUQUxMX0RTVCkvaW5jbHVkZQorIwkkKElOU1RBTExfRElSKSAkKElOU1RBTExfRFNUKS9lYmluCisjCSQoSU5TVEFMTF9EQVRBKSAkKFRBUkdFVF9GSUxFUykgJChJTlNUQUxMX0RTVCkvZWJpbgpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmFfc2VydmVyLmVybCBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JhX3NlcnZlci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWE5OGYxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JhX3NlcnZlci5lcmwKQEAgLTAsMCArMSwxMjQgQEAKKyUlJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlJSBAZG9jICAKKyUlJSBAZW5kCislJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbW9kdWxlKCUlUEZYJSVfc2VydmVyKS4KKworLWJlaGF2aW91cihnZW5fc2VydmVyKS4KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEluY2x1ZGUgZmlsZXMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1pbmNsdWRlKCIlJUFQUF9OQU1FJSUuaHJsIikuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEV4dGVybmFsIGV4cG9ydHMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1leHBvcnQoWworCSBzdGFydF9saW5rLzAsCisJIHN0b3AvMAorCSBdKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgZ2VuX3NlcnZlciBjYWxsYmFja3MKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1leHBvcnQoW2luaXQvMSwgaGFuZGxlX2NhbGwvMywgaGFuZGxlX2Nhc3QvMiwgaGFuZGxlX2luZm8vMiwgdGVybWluYXRlLzIsIGNvZGVfY2hhbmdlLzNdKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgcmVjb3JkIGRlZmluaXRpb25zCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistcmVjb3JkKHN0YXRlLCB7fSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIG1hY3JvIGRlZmluaXRpb25zCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuCisKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlIEV4dGVybmFsIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgQGRvYyBTdGFydHMgdGhlIHNlcnZlci4KKyUlIEBzcGVjIHN0YXJ0X2xpbmsoKSAtPiB7b2ssIHBpZCgpfSB8IHtlcnJvciwgUmVhc29ufQorJSUgQGVuZAorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhcnRfbGluaygpIC0+CisgICAgZ2VuX3NlcnZlcjpzdGFydF9saW5rKHtsb2NhbCwgP1NFUlZFUn0sID9NT0RVTEUsIFtdLCBbXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEBkb2MgU3RvcHMgdGhlIHNlcnZlci4KKyUlIEBzcGVjIHN0b3AoKSAtPiBvaworJSUgQGVuZAorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RvcCgpIC0+CisgICAgZ2VuX3NlcnZlcjpjYXN0KD9TRVJWRVIsIHN0b3ApLgorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSBTZXJ2ZXIgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiBpbml0LzEKKyUlIERlc2NyaXB0aW9uOiBJbml0aWF0ZXMgdGhlIHNlcnZlcgorJSUgUmV0dXJuczoge29rLCBTdGF0ZX0gICAgICAgICAgfAorJSUgICAgICAgICAge29rLCBTdGF0ZSwgVGltZW91dH0gfAorJSUgICAgICAgICAgaWdub3JlICAgICAgICAgICAgICAgfAorJSUgICAgICAgICAge3N0b3AsIFJlYXNvbn0KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luaXQoW10pIC0+CisgICAge29rLCAjc3RhdGV7fX0uCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiBoYW5kbGVfY2FsbC8zCislJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgY2FsbCBtZXNzYWdlcworJSUgUmV0dXJuczoge3JlcGx5LCBSZXBseSwgU3RhdGV9ICAgICAgICAgIHwKKyUlICAgICAgICAgIHtyZXBseSwgUmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8CislJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgICAgICAgfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSAgICAgIHwKKyUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFJlcGx5LCBTdGF0ZX0gICB8ICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpCislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGFuZGxlX2NhbGwoUmVxdWVzdCwgRnJvbSwgU3RhdGUpIC0+CisgICAgUmVwbHkgPSBvaywKKyAgICB7cmVwbHksIFJlcGx5LCBTdGF0ZX0uCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiBoYW5kbGVfY2FzdC8yCislJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgY2FzdCBtZXNzYWdlcworJSUgUmV0dXJuczoge25vcmVwbHksIFN0YXRlfSAgICAgICAgICB8CislJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9IHwKKyUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitoYW5kbGVfY2FzdChzdG9wLCBTdGF0ZSkgLT4KKyAgICB7c3RvcCwgbm9ybWFsLCBTdGF0ZX07CitoYW5kbGVfY2FzdChNc2csIFN0YXRlKSAtPgorICAgIHtub3JlcGx5LCBTdGF0ZX0uCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiBoYW5kbGVfaW5mby8yCislJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgYWxsIG5vbiBjYWxsL2Nhc3QgbWVzc2FnZXMKKyUlIFJldHVybnM6IHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGFuZGxlX2luZm8oSW5mbywgU3RhdGUpIC0+CisgICAge25vcmVwbHksIFN0YXRlfS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRnVuY3Rpb246IHRlcm1pbmF0ZS8yCislJSBEZXNjcmlwdGlvbjogU2h1dGRvd24gdGhlIHNlcnZlcgorJSUgUmV0dXJuczogYW55IChpZ25vcmVkIGJ5IGdlbl9zZXJ2ZXIpCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4KKyAgICBvay4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRnVuYzogY29kZV9jaGFuZ2UvMworJSUgUHVycG9zZTogQ29udmVydCBwcm9jZXNzIHN0YXRlIHdoZW4gY29kZSBpcyBjaGFuZ2VkCislJSBSZXR1cm5zOiB7b2ssIE5ld1N0YXRlfQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29kZV9jaGFuZ2UoT2xkVnNuLCBTdGF0ZSwgRXh0cmEpIC0+CisgICAge29rLCBTdGF0ZX0uCisKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlJSBJbnRlcm5hbCBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JhX3N1cC5lcmwgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9iYV9zdXAuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1ZjQ4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9iYV9zdXAuZXJsCkBAIC0wLDAgKzEsNzQgQEAKKyUlJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlJSBAZG9jICAKKyUlJSBAZW5kCislJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbW9kdWxlKCUlUEZYJSVfc3VwKS4KKworLWJlaGF2aW91cihzdXBlcnZpc29yKS4KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEluY2x1ZGUgZmlsZXMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRXh0ZXJuYWwgZXhwb3J0cworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWV4cG9ydChbCisJIHN0YXJ0X2xpbmsvMQorICAgICAgICBdKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgSW50ZXJuYWwgZXhwb3J0cworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWV4cG9ydChbCisJIGluaXQvMQorICAgICAgICBdKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgTWFjcm9zCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIFJlY29yZHMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgRXh0ZXJuYWwgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBAZG9jIFN0YXJ0cyB0aGUgc3VwZXJ2aXNvci4KKyUlIEBzcGVjIHN0YXJ0X2xpbmsoU3RhcnRBcmdzKSAtPiB7b2ssIHBpZCgpfSB8IEVycm9yCislJSBAZW5kCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGFydF9saW5rKFN0YXJ0QXJncykgLT4KKyAgICBzdXBlcnZpc29yOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgP01PRFVMRSwgW10pLgorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSBTZXJ2ZXIgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jOiBpbml0LzEKKyUlIFJldHVybnM6IHtvaywgIHtTdXBGbGFncywgIFtDaGlsZFNwZWNdfX0gfAorJSUgICAgICAgICAgaWdub3JlICAgICAgICAgICAgICAgICAgICAgICAgICB8CislJSAgICAgICAgICB7ZXJyb3IsIFJlYXNvbn0gICAKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luaXQoW10pIC0+CisgICAgUmVzdGFydFN0cmF0ZWd5ICAgID0gb25lX2Zvcl9vbmUsCisgICAgTWF4UmVzdGFydHMgICAgICAgID0gMTAwMCwKKyAgICBNYXhUaW1lQmV0UmVzdGFydHMgPSAzNjAwLAorICAgIAorICAgIFN1cEZsYWdzID0ge1Jlc3RhcnRTdHJhdGVneSwgTWF4UmVzdGFydHMsIE1heFRpbWVCZXRSZXN0YXJ0c30sCisgICAgCisgICAgQ2hpbGRTcGVjcyA9CisJWworCSB7JSVQRlglJV9zZXJ2ZXIsCisJICB7JSVQRlglJV9zZXJ2ZXIsIHN0YXJ0X2xpbmssIFtdfSwKKwkgIHBlcm1hbmVudCwKKwkgIDEwMDAsCisJICB3b3JrZXIsCisJICBbJSVQRlglJV9zZXJ2ZXJdfQorCSBdLAorICAgIHtvayx7U3VwRmxhZ3MsIENoaWxkU3BlY3N9fS4KKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlIEludGVybmFsIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmxhbmtfYXBwLmFwcC5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9ibGFua19hcHAuYXBwLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMTUxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmxhbmtfYXBwLmFwcC5zcmMKQEAgLTAsMCArMSw0MSBAQAorJSUlIC0qLSBtb2RlOmVybGFuZyAtKi0KK3thcHBsaWNhdGlvbiwgJUFQUF9OQU1FJSwKKyBbCisgICUgQSBxdWljayBkZXNjcmlwdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uCisgIHtkZXNjcmlwdGlvbiwgIkFuIEVybGFuZyBBcHBsaWNhdGlvbi4ifSwKKworICAlIFRoZSB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhdG9uCisgIHt2c24sICIlVlNOJSJ9LAorCisgICUgQWxsIG1vZHVsZXMgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uIAorICB7bW9kdWxlcywKKyAgIFsKKwklTU9EVUxFUyUKKyAgIF19LAorCisgICUgQWxsIG9mIHRoZSByZWdpc3RlcmVkIG5hbWVzIHRoZSBhcHBsaWNhdGlvbiB1c2VzLiBUaGlzIGNhbiBiZSBpZ25vcmVkLgorICB7cmVnaXN0ZXJlZCwgW119LAorCisgICUgQXBwbGljYXRpb25zIHRoYXQgYXJlIHRvIGJlIHN0YXJ0ZWQgcHJpb3IgdG8gdGhpcyBvbmUuIFRoaXMgY2FuIGJlIGlnbm9yZWQKKyAgJSBsZWF2ZSBpdCBhbG9uZSB1bmxlc3MgeW91IHVuZGVyc3RhbmQgaXQgd2VsbCBhbmQgbGV0IHRoZSAucmVsIGZpbGVzIGluIAorICAlIHlvdXIgcmVsZWFzZSBoYW5kbGUgdGhpcy4gCisgIHthcHBsaWNhdGlvbnMsCisgICBbCisgICAga2VybmVsLCAKKyAgICBzdGRsaWIKKyAgIF19LAorCisgICUgT1RQIGFwcGxpY2F0aW9uIGxvYWRlciB3aWxsIGxvYWQsIGJ1dCBub3Qgc3RhcnQsIGluY2x1ZGVkIGFwcHMuIEFnYWluCisgICUgdGhpcyBjYW4gYmUgaWdub3JlZCBhcyB3ZWxsLiAgVG8gbG9hZCBidXQgbm90IHN0YXJ0IGFuIGFwcGxpY2F0aW9uIGl0CisgICUgaXMgZWFzaWVyIHRvIGluY2x1ZGUgaXQgaW4gdGhlIC5yZWwgZmlsZSBmb2xsb3dlZCBieSB0aGUgYXRvbSAnbm9uZScKKyAge2luY2x1ZGVkX2FwcGxpY2F0aW9ucywgW119LAorCisgICUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHNpbWlsYXIgdG8gdGhvc2UgaW4gdGhlIGNvbmZpZyBmaWxlIHNwZWNpZmllZAorICAlIG9uIHRoZSBjb21tYW5kIGxpbmUuIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2FzOmdldF9lbnYKKyAge2VudiwgW119LAorCisgICUgVGhlIE1vZHVsZSBhbmQgQXJncyB1c2VkIHRvIHN0YXJ0IHRoaXMgYXBwbGljYXRpb24uCisgIHttb2QsIHslQVBQX05BTUUlLCBbXX19CisgXQorfS4KKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmxhbmtfYXBwLmFwcHVwLnNyYyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5hcHB1cC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTRhNjM4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5hcHB1cC5zcmMKQEAgLTAsMCArMSBAQAoreyIlVlNOJSIsW10sW119LgpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmxhbmtfYXBwLmVybCBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5lcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGRiNmZlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5lcmwKQEAgLTAsMCArMSw2MyBAQAorJSUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUlIEBkb2MgIAorJSUlIEBlbmQKKyUlJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tb2R1bGUoJSVBUFBfTkFNRSUlKS4KKworLWJlaGF2aW91cihhcHBsaWNhdGlvbikuCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBJbmNsdWRlIGZpbGVzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistaW5jbHVkZSgiJSVBUFBfTkFNRSUlLmhybCIpLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBFeHRlcm5hbCBleHBvcnRzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZXhwb3J0KFsKKwkgc3RhcnQvMiwKKwkgc2h1dGRvd24vMCwKKwkgc3RvcC8xCisJIF0pLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBNYWNyb3MKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgUmVjb3JkcworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSBFeHRlcm5hbCBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEBkb2MgVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbiBlcmxhbmcgYXBwbGljYXRpb24uCislJSBAc3BlYyBzdGFydChUeXBlLCBTdGFydEFyZ3MpIC0+IHtvaywgUGlkfSB8IHtvaywgUGlkLCBTdGF0ZX0gfCB7ZXJyb3IsIFJlYXNvbn0KKyUlIEBlbmQKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXJ0KFR5cGUsIFN0YXJ0QXJncykgLT4KKyAgICBjYXNlICUlUEZYJSVfc3VwOnN0YXJ0X2xpbmsoU3RhcnRBcmdzKSBvZgorCXtvaywgUGlkfSAtPiAKKwkgICAge29rLCBQaWR9OworCUVycm9yIC0+CisJICAgIEVycm9yCisgICAgZW5kLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBAZG9jIENhbGxlZCB0byBzaHVkb3duIHRoZSAlJUFQUF9OQU1FJSUgYXBwbGljYXRpb24uCislJSBAc3BlYyBzaHV0ZG93bigpIC0+IG9rIAorJSUgQGVuZAorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2h1dGRvd24oKSAtPgorICAgIGFwcGxpY2F0aW9uOnN0b3AoJSVBUFBfTkFNRSUlKS4KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgSW50ZXJuYWwgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIENhbGxlZCB1cG9uIHRoZSB0ZXJtaW50aW9uIG9mIGFuIGFwcGxpY2F0aW9uLgorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RvcChTdGF0ZSkgLT4KKyAgICBvay4KKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC92c24ubWsgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3Zzbi5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YmExNzRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC92c24ubWsKQEAgLTAsMCArMSBAQAorJSVBUFBfTkFNRV9VUFBFUl9DQVNFJSVfVlNOPTEuMApkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvTWFrZWZpbGUgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDM1OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvTWFrZWZpbGUKQEAgLTAsMCArMSwyOTggQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIGZpbGUgZm9yIGNyZWF0aW5nIGFuIG90cCByZWxlYXNlLiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIworIyBCYXNlbmFtZSBvZiB0aGlzIHJlbGVhc2UuCisjIworUkVMUz0kKHNoZWxsIGJhc2VuYW1lIGBwd2RgKQorQVBQX05BTUU9JChzaGVsbCBlY2hvICQoUkVMUykgfCBzZWQgcy9fcmVsJCQvLykKKworaW5jbHVkZSAuLi8uLi9idWlsZC9vdHAubWsKKworaW5jbHVkZSAuL3Zzbi5taworCisjaW5jbHVkZSAkKEVSTF9UT1ApL21ha2UvdGFyZ2V0Lm1rCisjaW5jbHVkZSAkKEVSTF9UT1ApL21ha2UvJChUQVJHRVQpL290cC5taworCitVU1JfTElCUEFUSD0uLi8uLi9saWIKK0lOU1RBTExfRElSPS91c3IvbG9jYWwvbGliCitBQlNfVVNFUl9MSUJQQVRIPSQoc2hlbGwgY2QgLi4vLi4vbGliO3B3ZCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENSRUFURSBESVIgU1RSVUNUVVJFIEhFUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIVERPQ1M9JCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLmh0bWwpIFwKKwkkKHdpbGRjYXJkICQoQUJTX1VTRVJfTElCUEFUSCkvJChBUFBfTkFNRSkvaHRkb2NzLyouaHRtKSBcCisJJCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLnlhd3MpCitCVUlMRF9GSUxFUz1mc19ib290X3NtaXRoZS5iZWFtIGZzX2xpc3RzLmJlYW0gZnNfbGliLmJlYW0KKworTE9DQUxfRElSPWxvY2FsCisjTE9DQUxfRElSPSQoc2hlbGwgY2F0ICQoUkVMUykucmVsLnNyYyB8Z3JlcCAtbSAxICckKEFQUF9OQU1FKScgfGF3ayAtRiAnIicgJ3twcmludGYgIiVzLSVzIiwgJCQyLCQkNH0nKQorCitESVJfU1RSVUNUVVJFPSBcCisJJChMT0NBTF9ESVIpIFwKKwkkKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTikgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcyAKKworUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFPSBcCisJJChSRUxTKSBcCisJJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvc3RhZ2UgXAorCSQoUkVMUykvbG9nLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3IFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTQ1JJUFRfQU5EX0JPT1RfRklMRVM9IFwKKwkkKFJFTFMpLnNjcmlwdCBcCisJJChSRUxTKS5ib290CisKK0xPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUz0gXAorCSQoTE9DQUxfRElSKS8kKFJFTFMpLnNjcmlwdCBcCisJJChMT0NBTF9ESVIpLyQoUkVMUykuYm9vdAorCitMT0NBTF9IVFRQX0NPTkY9IFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlcyAgCisKK1BST0RVQ1RJT05fSFRUUF9DT05GPSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXMgIAorCitMT0NBTF9UQVJHRVRfRklMRVM9JChMT0NBTF9IVFRQX0NPTkYpICQoTE9DQUxfRElSKS8kKFJFTFMpLmNvbmZpZyAkKExPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUykKKworTE9DQUxfVEFSR0VUUz0kKExPQ0FMX0RJUikvJChSRUxTKS5zaCB2c25pdCAkKExPQ0FMX1RBUkdFVF9GSUxFUykgCisKK1BST0RVQ1RJT05fVEFSR0VUUz0kKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgXAorCSAgICAgICAgICAgJChSRUxTKS9saWIgXAorICAgICAgICAgICAgICAgICAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5yZWwuc3JjIFwKKwkgICAgICAgICAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjIFwKKwkgICAgICAgICAgICQoUkVMUykvc3RhZ2UveWF3cy5jb25mLnNyYyBcCisJCSAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5zaC5zcmMgIFwKKwkJICAgJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzIFwKKwkJICAgJChSRUxTKS9pbnN0YWxsLnNoIFwKKwkJICAgJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvY2xlYW5fcmVsZWFzZSAKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbGwgZGVidWcgb3B0IGluc3RyIHNjcmlwdDogICQoRElSX1NUUlVDVFVSRSkgJChMT0NBTF9UQVJHRVRTKSAkKFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRSkgJChQUk9EVUNUSU9OX1RBUkdFVFMpCisJQGVjaG8gJChIVERPQ1MpCisKK2luc3RhbGw6ICBzdGFnZQorCit0YXI6ICQoUkVMUyktJChMT0NBVElPTiktJChSRUxfVlNOKS50Z3oKKworJChESVJfU1RSVUNUVVJFKToKKwlta2RpciAtcCAkQAorCiskKFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRSk6CisJbWtkaXIgLXAgJEAKKwkKK2NsZWFuOgorCSQoUk0pICQoUkVMX1NDUklQVFMpICQoVEFSR0VUX0ZJTEVTKQorCSQoUk0pIC1yICQoTE9DQUxfRElSKSAkKFBST0ROX0RJUikKKwkkKFJNKSAkKFJFTFMpLnJlbAorCSQoUk0pIC1yICQoUkVMUykKKwkkKFJNKSAkKFJFTFMpKi50Z3oKKwkkKFJNKSAkKFJFTFMpLnJlbC5zcmMudG1wCisJJChSTSkgJChTQ1JJUFRfQU5EX0JPT1RfRklMRVMpCisKK2RvY3M6CisJCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUyBGT1IgTE9DQUwgTU9ERQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIGxvY2FsIG1vZGUKKyQoTE9DQUxfRElSKS8kKFJFTFMpLnNoOiAKKwlAZWNobyAnIyEvYmluL3NoJyA+ICRACisJQGVjaG8gImNkICQoQ1VSRElSKS8kKExPQ0FMX0RJUikiID4+ICRACisJQGVjaG8gImVybCAtbmFtZSAkJHtVU0VSfV8kKFJFTFMpIC1ib290ICQoUkVMUykgLWNvbmZpZyAkKFJFTFMpLmNvbmZpZyBcJCRAIiA+PiAkQAorCWNobW9kICt4ICRACisJQGVjaG8KKwlAZWNobyAiPT09PSBTdGFydCBsb2NhbCBub2RlIHdpdGggXCJzaCAkQFwiID09PT0iCisJQGVjaG8KKworIyBDcmVhdGUgdGhlIGNvbmZpZyBmaWxlIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9ESVIpLyQoUkVMUykuY29uZmlnOiAkKFJFTFMpLmNvbmZpZy5zcmMKKwlzZWQgLWUgJ3M7JUxPR19PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVWQVJfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pOycgXAorICAgICAgICAgICAgLWUgJ3M7JVJFTFMlOyQoUkVMUyk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUhPTUUlOyQoSE9NRSk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUJST0FEQ0FTVF9BRERSRVNTJTskKEJST0FEQ0FTVF9BRERSRVNTKTtnJyBcCisgICAgICAgICAgICAtZSAnczslQ09OVEFDVF9OT0RFJTskKENPTlRBQ1RfTk9ERSk7ZycgXAorCSAgICAtZSAiczslSE9TVE5BTUUlO2Bob3N0bmFtZSAtLWxvbmdgOyIgXAorICAgICAgICAgICAgLWUgJ3M7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTsnIFwKKwkgICAgLWUgJ3M7JUFQUF9WRVJTSU9OJTskKEFQUF9WRVJTSU9OKTtnJyBcCisgICAgICAgICAgICAgJDwgPiAkQAorCisjIENyZWF0ZSB0aGUgaHR0cGQgY29uZiBmaWxlIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZjogeWF3cy5jb25mLnNyYworCXNlZCAtZSAnczslVkFSX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKTsnIFwKKwkgICAgLWUgJ3M7JUxPR19PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVIVERPQ19ST09UJTskKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jczsnIFwKKyAgICAgICAgICAgIC1lICdzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7JyBcCisgICAgICAgICAgICAtZSAnczslUkVMUyU7JChSRUxTKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVVU0VSJTskKFVTRVIpOycgXAorCSAgICAtZSAnczslSFRET0NfUk9PVCU7JChBQlNfVVNFUl9MSUJQQVRIKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVNSE9TVCU7JChNSE9TVCk7JyBcCisgICAgICAgICAgICAkPCA+ICRACisKKyMgQ3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgbG9jYWwgbW9kZS4KK3Zzbml0OiAkKFJFTFMpLnJlbC5zcmMgCisJc2VkIC1lICdzOyVSRUxfVlNOJTskKFJFTF9WU04pOycgXAorCSAgICAgICAkPCA+ICQ8LnRtcAorCisjIENyZWF0ZSBhbmQgcG9zaXRpb24gc2NyaXB0IGFuZCBib290IGZpbGVzIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVMpOiAKKwlAIGVybCAtcHogJChVU1JfTElCUEFUSCkvZnNsaWIvZWJpbiBcCisJICAgICAgLW5vc2hlbGwgXAorCSAgICAgIC1zIGZzX2xpYiBzX2FwcGx5IGZzX2Jvb3Rfc21pdGhlIG1ha2Vfc2NyaXB0X2FuZF9ib290ICJbXCIkKEVSTF9SVU5fVE9QKS8qXCIsICBcIiQoVVNSX0xJQlBBVEgpXCJdLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJCQoYmFzZW5hbWUgYHB3ZGApIi5yZWwuc3JjLnRtcFwiLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbbG9jYWxdLiAiIFwKKwkgICAgICAtcyBpbml0IHN0b3AKKwljcCAkKFNDUklQVF9BTkRfQk9PVF9GSUxFUykgJChMT0NBTF9ESVIpLyAKKworJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXM6IC4uLy4uL2J1aWxkL21pbWUudHlwZXMKKwljcCAkPCAkQAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUyBGT1IgUFJPRFVDVElPTiBNT0RFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQoUkVMUykvbGliOiAKKwkjIEZvciBzb21lIHJlYXNvbiB0aGlzIHdpbGwgbm90IGhhcHBlbiBpZiBhZGRlZCB0byBQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUKKwlta2RpciAkQAorCUAgZXJsIC1weiAkKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgXAorCSAgICAgIC1ub3NoZWxsIFwKKwkgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBzdGFnZV9mcm9tX3JlbHNyYyAiW1wiJChVU1JfTElCUEFUSClcIl0uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiQkKGJhc2VuYW1lIGBwd2RgKSIucmVsLnNyY1wiLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkQFwiIi4gIiBcCisJICAgICAgLXMgaW5pdCBzdG9wCisKKyMgTW92ZSB0aGUgaHRkb2NzIGZyb20gdGhlIGxvY2FsIGFwcHMgdG8gdGhlIHByb2R1Y3Rpb24gaHRkb2Mgcm9vdCBkaXJlY3RvcnkuCiskKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MvOiAkKEhURE9DUykKKwlAbWtkaXIgLXAgJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzOyBcCisJZm9yIHggaW4gJChIVERPQ1MpO2RvIFwKKyAJCWNwICAkJHggJEA7IFwKKwlkb25lCisKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIHByb2R1Y3Rpb24gbW9kZQorJChSRUxTKS9zdGFnZS8kKFJFTFMpLnNoLnNyYzogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICJjZCAlSU5TVEFMTF9ESVIlLyQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pIiA+PiAkQAorCUBlY2hvICJlcmwgLW5hbWUgJChSRUxTKSAtYm9vdCAkKFJFTFMpIC1jb25maWcgJChSRUxTKS5jb25maWcgLWRldGFjaGVkIFwkJEAiID4+ICRACisJY2htb2QgK3ggJEAKKworJChSRUxTKS9idWlsZC8kKFJFTF9WU04pOiAgJChVU1JfTElCUEFUSCkvZnNsaWIvZWJpbgorCW1rZGlyIC1wICQoUkVMUykvYnVpbGQvJChSRUxfVlNOKSAKKwljcCAkPC9mc19ib290X3NtaXRoZS5iZWFtICRACisJY3AgJDwvZnNfbGliLmJlYW0gJEAKKwljcCAkPC9mc19saXN0cy5iZWFtICRACisKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5yZWwuc3JjOiAkKFJFTFMpLnJlbC5zcmMudG1wCisJY3AgJDwgJEAKKworJChSRUxTKS9zdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmM6ICQoUkVMUykuY29uZmlnLnNyYworCWNwICQ8ICRACisKKyQoUkVMUykvc3RhZ2UveWF3cy5jb25mLnNyYzogeWF3cy5jb25mLnNyYworCWNwICQ8ICRACisKKyQoUkVMUykvaW5zdGFsbC5zaDogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImlmIFsgXCQkIyAtZXEgMSBdO3RoZW4iID4+ICRACisJQGVjaG8gIiAgICBJTlNUQUxMX0RJUj1cJCQxOyIgPj4gJEAKKwlAZWNobyAiZWxzZSIgPj4gJEAKKwlAZWNobyAiICAgIElOU1RBTExfRElSPSQoSU5TVEFMTF9ESVIpOyIgPj4gJEAKKwlAZWNobyAiZmkiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiZnVuY3Rpb24gbXVuZ2UoKSB7IiA+PiAkQAorCUBlY2hvICIgICAgc2VkIC1lIFwiczslTE9HX09UUCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS9sb2cvJChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVWQVJfT1RQJTtcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3Zhci8kKFJFTF9WU04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVJFTFMlOyQoUkVMUyk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslUkVMX1ZTTiU7JChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVVU0VSJTskJFVTRVI7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslSFRET0NfUk9PVCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JU1IT1NUJTtcYGhvc3RuYW1lXGA7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQlJPQURDQVNUX0FERFJFU1MlOyQoQlJPQURDQVNUX0FERFJFU1MpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUlOU1RBTExfRElSJTtcJCRJTlNUQUxMX0RJUjtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVDT05UQUNUX05PREUlOyQoQ09OVEFDVF9OT0RFKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVIT1NUTkFNRSU7XGBob3N0bmFtZSAtLWxvbmdcYDtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQVBQX1ZFUlNJT04lOyQoQVBQX1ZFUlNJT04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAnICAgICAgICAkJDEgPiAkJDInID4+ICRACisJQGVjaG8gIn0iID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UveWF3cy5jb25mLnNyYyB2YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmY7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuY29uZmlnOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5zaC5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2g7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLnJlbC5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykucmVsOyIgPj4gJEAKKwlAZWNobyAiY2htb2QgK3ggcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2g7IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImNkIC4uOyIgPj4gJEAKKwlAZWNobyAiZmluZCAkKFJFTFMpIHwgY3BpbyAtbyA+IFwkJElOU1RBTExfRElSLyQoUkVMUykuY3BpbzsiID4+ICRACisJQGVjaG8gImNkIC07IiA+PiAkQAorCUBlY2hvICJjZCBcJCRJTlNUQUxMX0RJUjsgIiA+PiAkQAorCUBlY2hvICJlY2hvIC1uIFwiVW5wYWNrZWQ6IFwiIiA+PiAkQAorCUBlY2hvICJjcGlvIC11aWQgPCAkKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICJybSAkKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImVjaG8gXCJwd2QgaXMgXGBwd2RcYFwiOyIgPj4gJEAKKwlAZWNobyAiY2QgJChSRUxTKTsiID4+ICRACisJQGVjaG8gIiBlcmwgLXB6IGJ1aWxkLyQoUkVMX1ZTTikgXFwiID4+ICRACisJQGVjaG8gIiAgICAgIC1ub3NoZWxsIFxcIiA+PiAkQAorCUBlY2hvIC1uICIgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBtYWtlX3NjcmlwdF9hbmRfYm9vdCBcIltcXFwiJChFUkxfUlVOX1RPUCkvKlxcXCIsICBcXFwibGliL1xcXCJdLiBcIiAiID4+ICRACisJQGVjaG8gLW4gICAgICAgICJcIlxcXCJzdGFnZS8kJChiYXNlbmFtZSBgcHdkYCkucmVsLnNyY1xcXCIuIFwiICIgPj4gJEAKKwlAZWNobyAtbiAgICAgICAgIlwiW2xvY2FsXS4gXCIgIiA+PiAkQAorCUBlY2hvICAgICAgICAgICAiLXMgaW5pdCBzdG9wIHwgZWdyZXAgJyp0ZXJtaW5hdGUqfEVSUk9SJyIgPj4gJEAKKwlAZWNobyAiaWYgWyBcJCQ/IC1lcSAwIF07IHRoZW4iID4+ICRACisJQGVjaG8gImVjaG8gXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVwiOyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIlNUQUdFIEZBSUxVUkUgXCQkPyAgLSBTaWxlbmNlIHRoZSBkaXNjb3JkLlwiOyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XCI7IiA+PiAkQAorCUBlY2hvICJleGl0IDE7IiA+PiAkQAorCUBlY2hvICJmaSIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJtdiAkKFJFTFMpLnJlbCAkKFJFTFMpLnNjcmlwdCAkKFJFTFMpLmJvb3QgcmVsZWFzZS8kKFJFTF9WU04pOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJybSAtciBzdGFnZTsiID4+ICRACisJQGVjaG8gInJtIC1yIGJ1aWxkOyIgPj4gJEAKKwlAZWNobyAiY2QgLTsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiY2hncnAgLVIgZXJ0cyAkKFJFTFMpOyAiID4+ICRACisJQGVjaG8gImNobW9kIC1SIDc3NSAkKFJFTFMpOyAiID4+ICRACisJQGVjaG8gImNkIC0iID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAicm0gLWYgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7IiA+PiAkQAorCUBlY2hvICJsbiAtcyBcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoIC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyIgPj4gJEAKKwlAZWNobyAiY2hncnAgLVIgZXJ0cyAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsgIiA+PiAkQAorCUBlY2hvICJjaG1vZCAtUiA3NzUgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7ICIgPj4gJEAKKwlAZWNobyAicm0gXCQkSU5TVEFMTF9ESVIvJChSRUxTKS9pbnN0YWxsLnNoOyIgPj4gJEAKKwlAZWNobyAiZWNobyAtbiAkJCdcZVswOzMybSciID4+ICRACisJQGVjaG8gImVjaG8gXCIkKEFQUF9OQU1FKSBpbnN0YWxsYXRpb24gdG8gXCQkSU5TVEFMTF9ESVIgY29tcGxldGUuXCIiID4+ICRACisJQGVjaG8gImVjaG8gLW4gJCQnXGVbMG0nIiA+PiAkQAorCWNobW9kICt4ICRACisJCQorCitzdGFnZTogJChSRUxTKQorCWNkICQoUkVMUyk7IFwKKwkuL2luc3RhbGwuc2g7IFwKKwljZCAtCisKKyQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlczogLi4vLi4vYnVpbGQvbWltZS50eXBlcworCWNwICQ8ICRACisKKyQoUkVMUyktJChMT0NBVElPTiktJChSRUxfVlNOKS50Z3o6ICQoUkVMUykKKwl0YXIgLXpjdmYgJEAgJDwKKworJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvY2xlYW5fcmVsZWFzZTogLi4vLi4vdG9vbHMvdXRpbGl0aWVzL2NsZWFuX3JlbGVhc2UKKwljcCAkPCAkQAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9ibGFua19hcHBfcmVsLmNvbmZpZy5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9ibGFua19hcHBfcmVsLmNvbmZpZy5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzcwMWM1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL2JsYW5rX2FwcF9yZWwuY29uZmlnLnNyYwpAQCAtMCwwICsxLDI2IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQorJSUlIFBhcmFtZXRlciBzZXR0aW5ncyBmb3IgYXBwcyBvbiAlQVBQX05BTUUlCislJSUgV2FybmluZyAtIHRoaXMgY29uZmlnIGZpbGUgKm11c3QqIGVuZCB3aXRoIDxkb3Q+PHdoaXRlc3BhY2U+CisKKyUlIHdyaXRlIGxvZyBmaWxlcyB0byBzYXNsX2RpcgorWworIHtzYXNsLAorICBbCisgICB7c2FzbF9lcnJvcl9sb2dnZXIsIHtmaWxlLCAiJUxPR19PVFAlL3Nhc2xfbG9nIn19CisgIF19LAorCisKKyB7Z2FzLAorICBbCisgICB7bW9kX3NwZWNzLCBbe2Vsd3JhcCwge2ZzX2Vsd3JhcF9oLCBzdGFydF9saW5rfX1dfSwKKworICAgJSBlbHdyYXAgY29uZmlnLgorICAge2Vycl9sb2csICIlTE9HX09UUCUvZXJyX2xvZyJ9LAorICAge2Vycl9sb2dfd3JhcF9pbmZvLCB7e2Vyciw1MDAwMDAwLDEwfSx7c2FzbCw1MDAwMDAwLDEwfX19LCAKKyAgIHtlcnJfbG9nX3R0eSwgdHJ1ZX0gJSBMb2cgdG8gdGhlIHNjcmVlbgorICAgXX0sCisKKyB7JUFQUF9OQU1FJSwKKyAgWworICBdfQorXS4gCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9ibGFua19hcHBfcmVsLnJlbC5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9ibGFua19hcHBfcmVsLnJlbC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjY5NTc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL2JsYW5rX2FwcF9yZWwucmVsLnNyYwpAQCAtMCwwICsxLDE0IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQore3JlbGVhc2UsIAorIHsiJSVBUFBfTkFNRSUlX3JlbCIsICIlUkVMX1ZTTiUifSwKKyBlcnRzLAorIFsKKyAga2VybmVsLAorICBzdGRsaWIsCisgIHNhc2wsCisgIGZzbGliLAorICBnYXMsCisgICUlQVBQX05BTUUlJQorIF0KK30uIAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC92c24ubWsgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC92c24ubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFjOGUwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL3Zzbi5tawpAQCAtMCwwICsxIEBACitSRUxfVlNOPTEuMApkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwveWF3cy5jb25mLnNyYyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL3lhd3MuY29uZi5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1N2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL3lhd3MuY29uZi5zcmMKQEAgLTAsMCArMSwxNjYgQEAKKworIyBjb25mIGZvciB5YXdzCisKKworIyBmaXJzdCB3ZSBoYXZlIGEgc2V0IG9mIGdsb2JhbHMKKyMgVGhhdCBhcHBseSB0byBhbGwgdmlydHVhbCBzZXJ2ZXJzCisKKworIyBUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxvZ2ZpbGVzIGZvcgorIyBhbGwgdmlydHVhbCBzZXJ2ZXJzIHdpbGwgYmUgd3JpdHRlbgorCitsb2dkaXIgPSAvdmFyL2xvZy95YXdzCisKKyMgVGhpcyB0aGUgcGF0aCB0byBhIGRpcmVjdG9yeSB3aGVyZSBhZGRpdGlvbmFsCisjIGJlYW0gY29kZSBjYW4gYmUgcGxhY2VkLiBUaGUgZGFlbW9uIHdpbGwgYWRkIHRoaXMKKyMgZGlyZWN0b3J5IHRvIGl0cyBzZWFyY2ggcGF0aAorCitlYmluX2RpciA9IC92YXIveWF3cy9lYmluCisKKworIyBUaGlzIGlzIGEgZGlyZWN0b3J5IHdoZXJlIGFwcGxpY2F0aW9uIHNwZWNpZmljIC5ocmwKKyMgZmlsZXMgY2FuIGJlIHBsYWNlZC4gYXBwbGljYXRpb24gc3BlY2lmaWcgLnlhd3MgY29kZSBjYW4KKyMgdGhlbiBpbmNsdWRlIHRoZXNlIC5ocmwgZmlsZXMKKworaW5jbHVkZV9kaXIgPSAvdmFyL3lhd3MvaW5jbHVkZQorCisKKworCisKKyMgVGhpcyBpcyBhIGRlYnVnIHZhcmlhYmxlLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGh0dHAgfCB0cmFmZmljIHwgZmFsc2UKKyMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIHRyYWNlIChwb3NzaWJseSB0byB0aGUgdHR5KSB3aGlsZQorIyBpbnZva2luZyB5YXdzIGZyb20gdGhlIHNoZWxsIGFzIGluCisjIHlhd3MgLWkgLVQgLXggKHNlZSBtYW4geWF3cykKKwordHJhY2UgPSBmYWxzZQorCisKKworCisKKyMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB5YXdzIHN0YXJ0IGFkZGl0aW9uYWwgCisjIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgYXQgc3RhcnR1cAorIyAKKyMgcnVubW9kID0gbXltb2R1bGUKKworCisjIEJ5IGRlZmF1bHQgeWF3cyB3aWxsIGNvcHkgdGhlIGVybGFuZyBlcnJvcl9sb2cgYW5kCisjIGVuZCB3cml0ZSBpdCB0byBhIHdyYXAgbG9nIGNhbGxlZCByZXBvcnQubG9nIChpbiB0aGUgbG9nZGlyKQorIyB0aGlzIGZlYXR1cmUgY2FuIGJlIHR1cm5lZCBvZmYuIFRoaXMgd291bGQgdHlwaWNhbGx5CisjIGJlIHRoZSBjYXNlIHdoZW4geWF3cyBydW5zIHdpdGhpbiBhbm90aGVyIGxhcmdlciBhcHAKKworY29weV9lcnJvcl9sb2cgPSB0cnVlCisKKworIyBMb2dzIGFyZSB3cmFwIGxvZ3MKKworbG9nX3dyYXBfc2l6ZSA9IDEwMDAwMDAKKworCisjIFBvc3NpYmx5IHJlc29sdmUgYWxsIGhvc3RuYW1lcyBpbiBsb2dmaWxlcyBzbyB3ZWJhbGl6ZXIKKyMgY2FuIHByb2R1Y2UgdGhlIG5pY2UgZ2VvZ3JhcGh5IHBpZWNoYXJ0CisKK2xvZ19yZXNvbHZlX2hvc3RuYW1lID0gZmFsc2UKKworCisKKyMgZmFpbCBjb21wbGV0ZWx5IG9yIG5vdCBpZiB5YXdzIGZhaWxzIAorIyB0byBiaW5kIGEgbGlzdGVuIHNvY2tldAorZmFpbF9vbl9iaW5kX2VyciA9IHRydWUKKworCisKKyMgSWYgeWF3cyBpcyBzdGFydGVkIGFzIHJvb3QsIGl0IGNhbiwgb25jZSBpdCBoYXMgb3BlbmVkCisjIGFsbCByZWxldmFudCBzb2NrZXRzIGZvciBsaXN0ZW5pbmcsIGNoYW5nZSB0aGUgdWlkIHRvIGEgCisjIHVzZXIgd2l0aCBsb3dlciBhY2Nlc3NyaWdodHMgdGhhbiByb290IAorCisjIHVzZXJuYW1lID0gbm9ib2R5CisKKworIyBJZiBIVFRQIGF1dGggaXMgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIHNwZWNpZmljCisjIGF1dGggbG9nLgorCithdXRoX2xvZyA9IHRydWUKKworCisjIFdoZW4gd2UncmUgcnVubmluZyBtdWx0aXBsZSB5YXdzIHN5c3RlbXMgb24gdGhlIHNhbWUgCisjIGhvc3QsIHdlIG5lZWQgdG8gZ2l2ZSBlYWNoIHlhd3Mgc3lzdGVtIGFuIGluZGl2aWR1YWwKKyMgbmFtZS4gWWF3cyB3aWxsIHdyaXRlIGEgbnVtYmVyIG9mIHJ1bnRpbWUgZmlsZXMgdW5kZXIKKyMgL3RtcC95YXdzLyR7aWR9CisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJkZWZhdWx0IgorCisKKyMgaWQgPSBteW5hbWUKKworCisjIGVhcmxpZXIgdmVyc2lvbnMgb2YgWWF3cyBwaWNrZWQgdGhlIGZpcnN0IHZpcnR1YWwgaG9zdAorIyBpbiBhIGxpc3Qgb2YgaG9zdHMgd2l0aCB0aGUgc2FtZSBJUC9QT1JUIHdoZW4gdGhlIEhvc3Q6CisjIGhlYWRlciBkb2Vzbid0IG1hdGNoIGFueSBuYW1lIG9uIGFueSBIb3N0CisjIFRoaXMgaXMgb2Z0ZW4gbmljZSBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBidXQgbm90CisjIGFjY2VwdGFibGUgaW4gcmVhbCBsaXZlIGhvc3Rpbmcgc2NlbmFyaW9zCisKK3BpY2tfZmlyc3RfdmlydGhvc3Rfb25fbm9tYXRjaCA9IHRydWUKKworCisjIEFsbCB1bmljZXMgYXJlIGJyb2tlbiBzaW5jZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBiaW5kIHRvCisjIGEgcHJpdmlsZWdlZCBwb3J0ICg8IDEwMjQpIHVubGVzcyB1aWQ9PTAKKyMgVGhlcmUgaXMgYSBjb250cmliIGluIGp1bmdlcmwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgYnkgbWVhbnMgCisjIG9mIGFuIGV4dGVybmFsIHNldHVpZCByb290IHByb2dyYW1tIGNhbGxlZCBmZHNydiB0byBsaXN0ZW4gdG8KKyMgdG8gcHJpdmlsZWdlZCBwb3J0LgorIyBJZiB3ZSB1c2UgdGhpcyBmZWF0dXJlLCBpdCByZXF1aXJlcyBmZHNydiB0byBiZSBwcm9wZXJseSBpbnN0YWxsZWQuCisjIERvZXNuJ3QgeWV0IHdvcmsgd2l0aCBTU0wuCisKK3VzZV9mZHNydiA9IGZhbHNlCisKKworCisKKyMgZW5kIHRoZW4gYSBzZXQgb2YgdmlydHVhbCBzZXJ2ZXJzCisjIEZpcnN0IHR3byB2aXJ0aG9zdGVkIHNlcnZlcnMgb24gdGhlIHNhbWUgSVAgKDAuMC4wLjApCisjIGluIHRoaXMgY2FzZSwgYnV0IGFuIGV4cGxpY2l0IElQIGNhbiBiZSBnaXZlbiBhcyB3ZWxsCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA4MAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkb2Nyb290ID0gL3Zhci95YXdzL3d3dworCWFyZ19yZXdyaXRlX21vZCA9IHB3cl9hcmdfcmV3cml0ZV9tb2QKKwlhcHBtb2RzID0gPHB3ciwgcHdyX21haW5fY29udHJvbGxlcl9hcHBtb2Q+Cis8L3NlcnZlcj4KKworPHNlcnZlciBsb2NhbGhvc3Q+CisJcG9ydCA9IDgwCisJbGlzdGVuID0gMC4wLjAuMAorCWRvY3Jvb3QgPSAvdG1wCisJZGlyX2xpc3RpbmdzID0gdHJ1ZQorCWRhdiA9IHRydWUKKwk8YXV0aD4KKwkJcmVhbG0gPSBmb29iYXIKKwkJZGlyID0gLworCQl1c2VyID0gZm9vOmJhcgorCQl1c2VyID0gYmF6OmJhcgorCTwvYXV0aD4KKzwvc2VydmVyPgorCisKKworIyBBbmQgdGhlbiBhbiBzc2wgc2VydmVyCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA0NDMKKwlkb2Nyb290ID0gL3RtcAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkaXJfbGlzdGluZ3MgPSB0cnVlCisJPHNzbD4gIAorCSAgICAgICAga2V5ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1rZXkucGVtCisJICAgICAgICBjZXJ0ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1jZXJ0LnBlbQorCTwvc3NsPgorPC9zZXJ2ZXI+CisJCQkJCisJCisKKworCisKKworCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vcmVuYW1lLnNoIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3JlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjA3N2MyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3JlbmFtZS5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworaWYgWyAkIyAtZXEgMyBdOyB0aGVuCisJT0xEX1BSRUZJWD0kMQorCU5FV19QUkVGSVg9JDIKKwlGSUxFTkFNRT0kMworCU5FV19GSUxFTkFNRT0kKGVjaG8gJEZJTEVOQU1FIHwgc2VkIC1lICJzLyRPTERfUFJFRklYLyRORVdfUFJFRklYLyIpCisJZWNobyAibW92aW5nICRGSUxFTkFNRSB0byAkTkVXX0ZJTEVOQU1FIgorCW12ICRGSUxFTkFNRSAkTkVXX0ZJTEVOQU1FCisJZXhpdCAwOworZmkKKworCitpZiBbICQjIC1lcSAyIF07IHRoZW4KKwl3aGlsZSByZWFkIGxpbmU7IAorCWRvIAorCQlPTERfUFJFRklYPSQxCisJCU5FV19QUkVGSVg9JDIKKwkJTkVXX0ZJTEVOQU1FPSQoZWNobyAke2xpbmV9IHwgc2VkIC1lICJzLyRPTERfUFJFRklYLyRORVdfUFJFRklYLyIpCisJCWVjaG8gIm1vdmluZyAke2xpbmV9IHRvICRORVdfRklMRU5BTUUiCisJCW12ICR7bGluZX0gJE5FV19GSUxFTkFNRQorCWRvbmUKKwlleGl0IDAKK2ZpCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9zdWJzdGl0dXRlLnNoIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3N1YnN0aXR1dGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTMwNWI3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9zdWJzdGl0dXRlLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorCisKK2lmIFsgJCMgLWx0IDIgXTsgdGhlbgorCWVjaG8gInVzYWdlOiBzdWJzdGl0dXRlLnNoIDx2YXJpYWJsZSB0byByZXBsYWNlPiA8dmFsdWUgdG8gcmVwbGFjZSB3aXRoPiA8ZmlsZW5hbWUgfCBTVERJTj4iCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1lcSAzIF07IHRoZW4KKwlWQVJJQUJMRT0kMQorCVZBTFVFPSQyCisJRklMRU5BTUU9JDMKKwkKKwllY2hvICJyZXBsYWNpbmcgJFZBUklBQkxFIHdpdGggJFZBTFVFIGluICRGSUxFTkFNRSIKKwlzZWQgLWUgInMvJFZBUklBQkxFLyRWQUxVRS8iICRGSUxFTkFNRSA+ICIkRklMRU5BTUUiX3RtcCAKKwltdiAiJEZJTEVOQU1FIl90bXAgJEZJTEVOQU1FCisJZXhpdCAwCitmaQorCitpZiBbICQjIC1lcSAyIF07IHRoZW4KKyAgICB3aGlsZSByZWFkIGxpbmU7IAorICAgIGRvCisJCVZBUklBQkxFPSQxCisJCVZBTFVFPSQyCisJCUZJTEVOQU1FPSR7bGluZX0KKwkKKwkJZWNobyAicmVwbGFjaW5nICRWQVJJQUJMRSB3aXRoICRWQUxVRSBpbiAkRklMRU5BTUUiCisJCXNlZCAtZSAicy8kVkFSSUFCTEUvJFZBTFVFLyIgJEZJTEVOQU1FID4gIiRGSUxFTkFNRSJfdG1wIAorCQltdiAiJEZJTEVOQU1FIl90bXAgJEZJTEVOQU1FCisgICAgZG9uZQorICAgIGV4aXQgMAorZmkKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvTWFrZWZpbGUgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDM1OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvTWFrZWZpbGUKQEAgLTAsMCArMSwyOTggQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIGZpbGUgZm9yIGNyZWF0aW5nIGFuIG90cCByZWxlYXNlLiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIworIyBCYXNlbmFtZSBvZiB0aGlzIHJlbGVhc2UuCisjIworUkVMUz0kKHNoZWxsIGJhc2VuYW1lIGBwd2RgKQorQVBQX05BTUU9JChzaGVsbCBlY2hvICQoUkVMUykgfCBzZWQgcy9fcmVsJCQvLykKKworaW5jbHVkZSAuLi8uLi9idWlsZC9vdHAubWsKKworaW5jbHVkZSAuL3Zzbi5taworCisjaW5jbHVkZSAkKEVSTF9UT1ApL21ha2UvdGFyZ2V0Lm1rCisjaW5jbHVkZSAkKEVSTF9UT1ApL21ha2UvJChUQVJHRVQpL290cC5taworCitVU1JfTElCUEFUSD0uLi8uLi9saWIKK0lOU1RBTExfRElSPS91c3IvbG9jYWwvbGliCitBQlNfVVNFUl9MSUJQQVRIPSQoc2hlbGwgY2QgLi4vLi4vbGliO3B3ZCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENSRUFURSBESVIgU1RSVUNUVVJFIEhFUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIVERPQ1M9JCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLmh0bWwpIFwKKwkkKHdpbGRjYXJkICQoQUJTX1VTRVJfTElCUEFUSCkvJChBUFBfTkFNRSkvaHRkb2NzLyouaHRtKSBcCisJJCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLnlhd3MpCitCVUlMRF9GSUxFUz1mc19ib290X3NtaXRoZS5iZWFtIGZzX2xpc3RzLmJlYW0gZnNfbGliLmJlYW0KKworTE9DQUxfRElSPWxvY2FsCisjTE9DQUxfRElSPSQoc2hlbGwgY2F0ICQoUkVMUykucmVsLnNyYyB8Z3JlcCAtbSAxICckKEFQUF9OQU1FKScgfGF3ayAtRiAnIicgJ3twcmludGYgIiVzLSVzIiwgJCQyLCQkNH0nKQorCitESVJfU1RSVUNUVVJFPSBcCisJJChMT0NBTF9ESVIpIFwKKwkkKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTikgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcyAKKworUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFPSBcCisJJChSRUxTKSBcCisJJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvc3RhZ2UgXAorCSQoUkVMUykvbG9nLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3IFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTQ1JJUFRfQU5EX0JPT1RfRklMRVM9IFwKKwkkKFJFTFMpLnNjcmlwdCBcCisJJChSRUxTKS5ib290CisKK0xPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUz0gXAorCSQoTE9DQUxfRElSKS8kKFJFTFMpLnNjcmlwdCBcCisJJChMT0NBTF9ESVIpLyQoUkVMUykuYm9vdAorCitMT0NBTF9IVFRQX0NPTkY9IFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlcyAgCisKK1BST0RVQ1RJT05fSFRUUF9DT05GPSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXMgIAorCitMT0NBTF9UQVJHRVRfRklMRVM9JChMT0NBTF9IVFRQX0NPTkYpICQoTE9DQUxfRElSKS8kKFJFTFMpLmNvbmZpZyAkKExPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUykKKworTE9DQUxfVEFSR0VUUz0kKExPQ0FMX0RJUikvJChSRUxTKS5zaCB2c25pdCAkKExPQ0FMX1RBUkdFVF9GSUxFUykgCisKK1BST0RVQ1RJT05fVEFSR0VUUz0kKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgXAorCSAgICAgICAgICAgJChSRUxTKS9saWIgXAorICAgICAgICAgICAgICAgICAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5yZWwuc3JjIFwKKwkgICAgICAgICAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjIFwKKwkgICAgICAgICAgICQoUkVMUykvc3RhZ2UveWF3cy5jb25mLnNyYyBcCisJCSAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5zaC5zcmMgIFwKKwkJICAgJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzIFwKKwkJICAgJChSRUxTKS9pbnN0YWxsLnNoIFwKKwkJICAgJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvY2xlYW5fcmVsZWFzZSAKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbGwgZGVidWcgb3B0IGluc3RyIHNjcmlwdDogICQoRElSX1NUUlVDVFVSRSkgJChMT0NBTF9UQVJHRVRTKSAkKFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRSkgJChQUk9EVUNUSU9OX1RBUkdFVFMpCisJQGVjaG8gJChIVERPQ1MpCisKK2luc3RhbGw6ICBzdGFnZQorCit0YXI6ICQoUkVMUyktJChMT0NBVElPTiktJChSRUxfVlNOKS50Z3oKKworJChESVJfU1RSVUNUVVJFKToKKwlta2RpciAtcCAkQAorCiskKFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRSk6CisJbWtkaXIgLXAgJEAKKwkKK2NsZWFuOgorCSQoUk0pICQoUkVMX1NDUklQVFMpICQoVEFSR0VUX0ZJTEVTKQorCSQoUk0pIC1yICQoTE9DQUxfRElSKSAkKFBST0ROX0RJUikKKwkkKFJNKSAkKFJFTFMpLnJlbAorCSQoUk0pIC1yICQoUkVMUykKKwkkKFJNKSAkKFJFTFMpKi50Z3oKKwkkKFJNKSAkKFJFTFMpLnJlbC5zcmMudG1wCisJJChSTSkgJChTQ1JJUFRfQU5EX0JPT1RfRklMRVMpCisKK2RvY3M6CisJCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUyBGT1IgTE9DQUwgTU9ERQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIGxvY2FsIG1vZGUKKyQoTE9DQUxfRElSKS8kKFJFTFMpLnNoOiAKKwlAZWNobyAnIyEvYmluL3NoJyA+ICRACisJQGVjaG8gImNkICQoQ1VSRElSKS8kKExPQ0FMX0RJUikiID4+ICRACisJQGVjaG8gImVybCAtbmFtZSAkJHtVU0VSfV8kKFJFTFMpIC1ib290ICQoUkVMUykgLWNvbmZpZyAkKFJFTFMpLmNvbmZpZyBcJCRAIiA+PiAkQAorCWNobW9kICt4ICRACisJQGVjaG8KKwlAZWNobyAiPT09PSBTdGFydCBsb2NhbCBub2RlIHdpdGggXCJzaCAkQFwiID09PT0iCisJQGVjaG8KKworIyBDcmVhdGUgdGhlIGNvbmZpZyBmaWxlIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9ESVIpLyQoUkVMUykuY29uZmlnOiAkKFJFTFMpLmNvbmZpZy5zcmMKKwlzZWQgLWUgJ3M7JUxPR19PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVWQVJfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pOycgXAorICAgICAgICAgICAgLWUgJ3M7JVJFTFMlOyQoUkVMUyk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUhPTUUlOyQoSE9NRSk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUJST0FEQ0FTVF9BRERSRVNTJTskKEJST0FEQ0FTVF9BRERSRVNTKTtnJyBcCisgICAgICAgICAgICAtZSAnczslQ09OVEFDVF9OT0RFJTskKENPTlRBQ1RfTk9ERSk7ZycgXAorCSAgICAtZSAiczslSE9TVE5BTUUlO2Bob3N0bmFtZSAtLWxvbmdgOyIgXAorICAgICAgICAgICAgLWUgJ3M7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTsnIFwKKwkgICAgLWUgJ3M7JUFQUF9WRVJTSU9OJTskKEFQUF9WRVJTSU9OKTtnJyBcCisgICAgICAgICAgICAgJDwgPiAkQAorCisjIENyZWF0ZSB0aGUgaHR0cGQgY29uZiBmaWxlIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZjogeWF3cy5jb25mLnNyYworCXNlZCAtZSAnczslVkFSX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKTsnIFwKKwkgICAgLWUgJ3M7JUxPR19PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVIVERPQ19ST09UJTskKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jczsnIFwKKyAgICAgICAgICAgIC1lICdzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7JyBcCisgICAgICAgICAgICAtZSAnczslUkVMUyU7JChSRUxTKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVVU0VSJTskKFVTRVIpOycgXAorCSAgICAtZSAnczslSFRET0NfUk9PVCU7JChBQlNfVVNFUl9MSUJQQVRIKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVNSE9TVCU7JChNSE9TVCk7JyBcCisgICAgICAgICAgICAkPCA+ICRACisKKyMgQ3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgbG9jYWwgbW9kZS4KK3Zzbml0OiAkKFJFTFMpLnJlbC5zcmMgCisJc2VkIC1lICdzOyVSRUxfVlNOJTskKFJFTF9WU04pOycgXAorCSAgICAgICAkPCA+ICQ8LnRtcAorCisjIENyZWF0ZSBhbmQgcG9zaXRpb24gc2NyaXB0IGFuZCBib290IGZpbGVzIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVMpOiAKKwlAIGVybCAtcHogJChVU1JfTElCUEFUSCkvZnNsaWIvZWJpbiBcCisJICAgICAgLW5vc2hlbGwgXAorCSAgICAgIC1zIGZzX2xpYiBzX2FwcGx5IGZzX2Jvb3Rfc21pdGhlIG1ha2Vfc2NyaXB0X2FuZF9ib290ICJbXCIkKEVSTF9SVU5fVE9QKS8qXCIsICBcIiQoVVNSX0xJQlBBVEgpXCJdLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJCQoYmFzZW5hbWUgYHB3ZGApIi5yZWwuc3JjLnRtcFwiLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbbG9jYWxdLiAiIFwKKwkgICAgICAtcyBpbml0IHN0b3AKKwljcCAkKFNDUklQVF9BTkRfQk9PVF9GSUxFUykgJChMT0NBTF9ESVIpLyAKKworJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXM6IC4uLy4uL2J1aWxkL21pbWUudHlwZXMKKwljcCAkPCAkQAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUyBGT1IgUFJPRFVDVElPTiBNT0RFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQoUkVMUykvbGliOiAKKwkjIEZvciBzb21lIHJlYXNvbiB0aGlzIHdpbGwgbm90IGhhcHBlbiBpZiBhZGRlZCB0byBQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUKKwlta2RpciAkQAorCUAgZXJsIC1weiAkKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgXAorCSAgICAgIC1ub3NoZWxsIFwKKwkgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBzdGFnZV9mcm9tX3JlbHNyYyAiW1wiJChVU1JfTElCUEFUSClcIl0uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiQkKGJhc2VuYW1lIGBwd2RgKSIucmVsLnNyY1wiLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkQFwiIi4gIiBcCisJICAgICAgLXMgaW5pdCBzdG9wCisKKyMgTW92ZSB0aGUgaHRkb2NzIGZyb20gdGhlIGxvY2FsIGFwcHMgdG8gdGhlIHByb2R1Y3Rpb24gaHRkb2Mgcm9vdCBkaXJlY3RvcnkuCiskKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MvOiAkKEhURE9DUykKKwlAbWtkaXIgLXAgJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzOyBcCisJZm9yIHggaW4gJChIVERPQ1MpO2RvIFwKKyAJCWNwICAkJHggJEA7IFwKKwlkb25lCisKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIHByb2R1Y3Rpb24gbW9kZQorJChSRUxTKS9zdGFnZS8kKFJFTFMpLnNoLnNyYzogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICJjZCAlSU5TVEFMTF9ESVIlLyQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pIiA+PiAkQAorCUBlY2hvICJlcmwgLW5hbWUgJChSRUxTKSAtYm9vdCAkKFJFTFMpIC1jb25maWcgJChSRUxTKS5jb25maWcgLWRldGFjaGVkIFwkJEAiID4+ICRACisJY2htb2QgK3ggJEAKKworJChSRUxTKS9idWlsZC8kKFJFTF9WU04pOiAgJChVU1JfTElCUEFUSCkvZnNsaWIvZWJpbgorCW1rZGlyIC1wICQoUkVMUykvYnVpbGQvJChSRUxfVlNOKSAKKwljcCAkPC9mc19ib290X3NtaXRoZS5iZWFtICRACisJY3AgJDwvZnNfbGliLmJlYW0gJEAKKwljcCAkPC9mc19saXN0cy5iZWFtICRACisKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5yZWwuc3JjOiAkKFJFTFMpLnJlbC5zcmMudG1wCisJY3AgJDwgJEAKKworJChSRUxTKS9zdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmM6ICQoUkVMUykuY29uZmlnLnNyYworCWNwICQ8ICRACisKKyQoUkVMUykvc3RhZ2UveWF3cy5jb25mLnNyYzogeWF3cy5jb25mLnNyYworCWNwICQ8ICRACisKKyQoUkVMUykvaW5zdGFsbC5zaDogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImlmIFsgXCQkIyAtZXEgMSBdO3RoZW4iID4+ICRACisJQGVjaG8gIiAgICBJTlNUQUxMX0RJUj1cJCQxOyIgPj4gJEAKKwlAZWNobyAiZWxzZSIgPj4gJEAKKwlAZWNobyAiICAgIElOU1RBTExfRElSPSQoSU5TVEFMTF9ESVIpOyIgPj4gJEAKKwlAZWNobyAiZmkiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiZnVuY3Rpb24gbXVuZ2UoKSB7IiA+PiAkQAorCUBlY2hvICIgICAgc2VkIC1lIFwiczslTE9HX09UUCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS9sb2cvJChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVWQVJfT1RQJTtcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3Zhci8kKFJFTF9WU04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVJFTFMlOyQoUkVMUyk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslUkVMX1ZTTiU7JChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVVU0VSJTskJFVTRVI7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslSFRET0NfUk9PVCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JU1IT1NUJTtcYGhvc3RuYW1lXGA7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQlJPQURDQVNUX0FERFJFU1MlOyQoQlJPQURDQVNUX0FERFJFU1MpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUlOU1RBTExfRElSJTtcJCRJTlNUQUxMX0RJUjtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVDT05UQUNUX05PREUlOyQoQ09OVEFDVF9OT0RFKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVIT1NUTkFNRSU7XGBob3N0bmFtZSAtLWxvbmdcYDtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQVBQX1ZFUlNJT04lOyQoQVBQX1ZFUlNJT04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAnICAgICAgICAkJDEgPiAkJDInID4+ICRACisJQGVjaG8gIn0iID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UveWF3cy5jb25mLnNyYyB2YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmY7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuY29uZmlnOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5zaC5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2g7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLnJlbC5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykucmVsOyIgPj4gJEAKKwlAZWNobyAiY2htb2QgK3ggcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2g7IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImNkIC4uOyIgPj4gJEAKKwlAZWNobyAiZmluZCAkKFJFTFMpIHwgY3BpbyAtbyA+IFwkJElOU1RBTExfRElSLyQoUkVMUykuY3BpbzsiID4+ICRACisJQGVjaG8gImNkIC07IiA+PiAkQAorCUBlY2hvICJjZCBcJCRJTlNUQUxMX0RJUjsgIiA+PiAkQAorCUBlY2hvICJlY2hvIC1uIFwiVW5wYWNrZWQ6IFwiIiA+PiAkQAorCUBlY2hvICJjcGlvIC11aWQgPCAkKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICJybSAkKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImVjaG8gXCJwd2QgaXMgXGBwd2RcYFwiOyIgPj4gJEAKKwlAZWNobyAiY2QgJChSRUxTKTsiID4+ICRACisJQGVjaG8gIiBlcmwgLXB6IGJ1aWxkLyQoUkVMX1ZTTikgXFwiID4+ICRACisJQGVjaG8gIiAgICAgIC1ub3NoZWxsIFxcIiA+PiAkQAorCUBlY2hvIC1uICIgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBtYWtlX3NjcmlwdF9hbmRfYm9vdCBcIltcXFwiJChFUkxfUlVOX1RPUCkvKlxcXCIsICBcXFwibGliL1xcXCJdLiBcIiAiID4+ICRACisJQGVjaG8gLW4gICAgICAgICJcIlxcXCJzdGFnZS8kJChiYXNlbmFtZSBgcHdkYCkucmVsLnNyY1xcXCIuIFwiICIgPj4gJEAKKwlAZWNobyAtbiAgICAgICAgIlwiW2xvY2FsXS4gXCIgIiA+PiAkQAorCUBlY2hvICAgICAgICAgICAiLXMgaW5pdCBzdG9wIHwgZWdyZXAgJyp0ZXJtaW5hdGUqfEVSUk9SJyIgPj4gJEAKKwlAZWNobyAiaWYgWyBcJCQ/IC1lcSAwIF07IHRoZW4iID4+ICRACisJQGVjaG8gImVjaG8gXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVwiOyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIlNUQUdFIEZBSUxVUkUgXCQkPyAgLSBTaWxlbmNlIHRoZSBkaXNjb3JkLlwiOyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XCI7IiA+PiAkQAorCUBlY2hvICJleGl0IDE7IiA+PiAkQAorCUBlY2hvICJmaSIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJtdiAkKFJFTFMpLnJlbCAkKFJFTFMpLnNjcmlwdCAkKFJFTFMpLmJvb3QgcmVsZWFzZS8kKFJFTF9WU04pOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJybSAtciBzdGFnZTsiID4+ICRACisJQGVjaG8gInJtIC1yIGJ1aWxkOyIgPj4gJEAKKwlAZWNobyAiY2QgLTsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiY2hncnAgLVIgZXJ0cyAkKFJFTFMpOyAiID4+ICRACisJQGVjaG8gImNobW9kIC1SIDc3NSAkKFJFTFMpOyAiID4+ICRACisJQGVjaG8gImNkIC0iID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAicm0gLWYgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7IiA+PiAkQAorCUBlY2hvICJsbiAtcyBcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoIC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyIgPj4gJEAKKwlAZWNobyAiY2hncnAgLVIgZXJ0cyAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsgIiA+PiAkQAorCUBlY2hvICJjaG1vZCAtUiA3NzUgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7ICIgPj4gJEAKKwlAZWNobyAicm0gXCQkSU5TVEFMTF9ESVIvJChSRUxTKS9pbnN0YWxsLnNoOyIgPj4gJEAKKwlAZWNobyAiZWNobyAtbiAkJCdcZVswOzMybSciID4+ICRACisJQGVjaG8gImVjaG8gXCIkKEFQUF9OQU1FKSBpbnN0YWxsYXRpb24gdG8gXCQkSU5TVEFMTF9ESVIgY29tcGxldGUuXCIiID4+ICRACisJQGVjaG8gImVjaG8gLW4gJCQnXGVbMG0nIiA+PiAkQAorCWNobW9kICt4ICRACisJCQorCitzdGFnZTogJChSRUxTKQorCWNkICQoUkVMUyk7IFwKKwkuL2luc3RhbGwuc2g7IFwKKwljZCAtCisKKyQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlczogLi4vLi4vYnVpbGQvbWltZS50eXBlcworCWNwICQ8ICRACisKKyQoUkVMUyktJChMT0NBVElPTiktJChSRUxfVlNOKS50Z3o6ICQoUkVMUykKKwl0YXIgLXpjdmYgJEAgJDwKKworJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvY2xlYW5fcmVsZWFzZTogLi4vLi4vdG9vbHMvdXRpbGl0aWVzL2NsZWFuX3JlbGVhc2UKKwljcCAkPCAkQAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC90aHJpZnRfcmVsLmNvbmZpZy5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC90aHJpZnRfcmVsLmNvbmZpZy5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzcwMWM1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL3RocmlmdF9yZWwuY29uZmlnLnNyYwpAQCAtMCwwICsxLDI2IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQorJSUlIFBhcmFtZXRlciBzZXR0aW5ncyBmb3IgYXBwcyBvbiAlQVBQX05BTUUlCislJSUgV2FybmluZyAtIHRoaXMgY29uZmlnIGZpbGUgKm11c3QqIGVuZCB3aXRoIDxkb3Q+PHdoaXRlc3BhY2U+CisKKyUlIHdyaXRlIGxvZyBmaWxlcyB0byBzYXNsX2RpcgorWworIHtzYXNsLAorICBbCisgICB7c2FzbF9lcnJvcl9sb2dnZXIsIHtmaWxlLCAiJUxPR19PVFAlL3Nhc2xfbG9nIn19CisgIF19LAorCisKKyB7Z2FzLAorICBbCisgICB7bW9kX3NwZWNzLCBbe2Vsd3JhcCwge2ZzX2Vsd3JhcF9oLCBzdGFydF9saW5rfX1dfSwKKworICAgJSBlbHdyYXAgY29uZmlnLgorICAge2Vycl9sb2csICIlTE9HX09UUCUvZXJyX2xvZyJ9LAorICAge2Vycl9sb2dfd3JhcF9pbmZvLCB7e2Vyciw1MDAwMDAwLDEwfSx7c2FzbCw1MDAwMDAwLDEwfX19LCAKKyAgIHtlcnJfbG9nX3R0eSwgdHJ1ZX0gJSBMb2cgdG8gdGhlIHNjcmVlbgorICAgXX0sCisKKyB7JUFQUF9OQU1FJSwKKyAgWworICBdfQorXS4gCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZDI0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL3RocmlmdF9yZWwucmVsLnNyYwpAQCAtMCwwICsxLDE0IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQore3JlbGVhc2UsIAorIHsidGhyaWZ0X3JlbCIsICIlUkVMX1ZTTiUifSwKKyBlcnRzLAorIFsKKyAga2VybmVsLAorICBzdGRsaWIsCisgIHNhc2wsCisgIGZzbGliLAorICBnYXMsCisgIHRocmlmdAorIF0KK30uIAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC92c24ubWsgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC92c24ubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFjOGUwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL3Zzbi5tawpAQCAtMCwwICsxIEBACitSRUxfVlNOPTEuMApkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwveWF3cy5jb25mLnNyYyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL3lhd3MuY29uZi5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1N2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL3lhd3MuY29uZi5zcmMKQEAgLTAsMCArMSwxNjYgQEAKKworIyBjb25mIGZvciB5YXdzCisKKworIyBmaXJzdCB3ZSBoYXZlIGEgc2V0IG9mIGdsb2JhbHMKKyMgVGhhdCBhcHBseSB0byBhbGwgdmlydHVhbCBzZXJ2ZXJzCisKKworIyBUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxvZ2ZpbGVzIGZvcgorIyBhbGwgdmlydHVhbCBzZXJ2ZXJzIHdpbGwgYmUgd3JpdHRlbgorCitsb2dkaXIgPSAvdmFyL2xvZy95YXdzCisKKyMgVGhpcyB0aGUgcGF0aCB0byBhIGRpcmVjdG9yeSB3aGVyZSBhZGRpdGlvbmFsCisjIGJlYW0gY29kZSBjYW4gYmUgcGxhY2VkLiBUaGUgZGFlbW9uIHdpbGwgYWRkIHRoaXMKKyMgZGlyZWN0b3J5IHRvIGl0cyBzZWFyY2ggcGF0aAorCitlYmluX2RpciA9IC92YXIveWF3cy9lYmluCisKKworIyBUaGlzIGlzIGEgZGlyZWN0b3J5IHdoZXJlIGFwcGxpY2F0aW9uIHNwZWNpZmljIC5ocmwKKyMgZmlsZXMgY2FuIGJlIHBsYWNlZC4gYXBwbGljYXRpb24gc3BlY2lmaWcgLnlhd3MgY29kZSBjYW4KKyMgdGhlbiBpbmNsdWRlIHRoZXNlIC5ocmwgZmlsZXMKKworaW5jbHVkZV9kaXIgPSAvdmFyL3lhd3MvaW5jbHVkZQorCisKKworCisKKyMgVGhpcyBpcyBhIGRlYnVnIHZhcmlhYmxlLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGh0dHAgfCB0cmFmZmljIHwgZmFsc2UKKyMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIHRyYWNlIChwb3NzaWJseSB0byB0aGUgdHR5KSB3aGlsZQorIyBpbnZva2luZyB5YXdzIGZyb20gdGhlIHNoZWxsIGFzIGluCisjIHlhd3MgLWkgLVQgLXggKHNlZSBtYW4geWF3cykKKwordHJhY2UgPSBmYWxzZQorCisKKworCisKKyMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB5YXdzIHN0YXJ0IGFkZGl0aW9uYWwgCisjIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgYXQgc3RhcnR1cAorIyAKKyMgcnVubW9kID0gbXltb2R1bGUKKworCisjIEJ5IGRlZmF1bHQgeWF3cyB3aWxsIGNvcHkgdGhlIGVybGFuZyBlcnJvcl9sb2cgYW5kCisjIGVuZCB3cml0ZSBpdCB0byBhIHdyYXAgbG9nIGNhbGxlZCByZXBvcnQubG9nIChpbiB0aGUgbG9nZGlyKQorIyB0aGlzIGZlYXR1cmUgY2FuIGJlIHR1cm5lZCBvZmYuIFRoaXMgd291bGQgdHlwaWNhbGx5CisjIGJlIHRoZSBjYXNlIHdoZW4geWF3cyBydW5zIHdpdGhpbiBhbm90aGVyIGxhcmdlciBhcHAKKworY29weV9lcnJvcl9sb2cgPSB0cnVlCisKKworIyBMb2dzIGFyZSB3cmFwIGxvZ3MKKworbG9nX3dyYXBfc2l6ZSA9IDEwMDAwMDAKKworCisjIFBvc3NpYmx5IHJlc29sdmUgYWxsIGhvc3RuYW1lcyBpbiBsb2dmaWxlcyBzbyB3ZWJhbGl6ZXIKKyMgY2FuIHByb2R1Y2UgdGhlIG5pY2UgZ2VvZ3JhcGh5IHBpZWNoYXJ0CisKK2xvZ19yZXNvbHZlX2hvc3RuYW1lID0gZmFsc2UKKworCisKKyMgZmFpbCBjb21wbGV0ZWx5IG9yIG5vdCBpZiB5YXdzIGZhaWxzIAorIyB0byBiaW5kIGEgbGlzdGVuIHNvY2tldAorZmFpbF9vbl9iaW5kX2VyciA9IHRydWUKKworCisKKyMgSWYgeWF3cyBpcyBzdGFydGVkIGFzIHJvb3QsIGl0IGNhbiwgb25jZSBpdCBoYXMgb3BlbmVkCisjIGFsbCByZWxldmFudCBzb2NrZXRzIGZvciBsaXN0ZW5pbmcsIGNoYW5nZSB0aGUgdWlkIHRvIGEgCisjIHVzZXIgd2l0aCBsb3dlciBhY2Nlc3NyaWdodHMgdGhhbiByb290IAorCisjIHVzZXJuYW1lID0gbm9ib2R5CisKKworIyBJZiBIVFRQIGF1dGggaXMgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIHNwZWNpZmljCisjIGF1dGggbG9nLgorCithdXRoX2xvZyA9IHRydWUKKworCisjIFdoZW4gd2UncmUgcnVubmluZyBtdWx0aXBsZSB5YXdzIHN5c3RlbXMgb24gdGhlIHNhbWUgCisjIGhvc3QsIHdlIG5lZWQgdG8gZ2l2ZSBlYWNoIHlhd3Mgc3lzdGVtIGFuIGluZGl2aWR1YWwKKyMgbmFtZS4gWWF3cyB3aWxsIHdyaXRlIGEgbnVtYmVyIG9mIHJ1bnRpbWUgZmlsZXMgdW5kZXIKKyMgL3RtcC95YXdzLyR7aWR9CisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJkZWZhdWx0IgorCisKKyMgaWQgPSBteW5hbWUKKworCisjIGVhcmxpZXIgdmVyc2lvbnMgb2YgWWF3cyBwaWNrZWQgdGhlIGZpcnN0IHZpcnR1YWwgaG9zdAorIyBpbiBhIGxpc3Qgb2YgaG9zdHMgd2l0aCB0aGUgc2FtZSBJUC9QT1JUIHdoZW4gdGhlIEhvc3Q6CisjIGhlYWRlciBkb2Vzbid0IG1hdGNoIGFueSBuYW1lIG9uIGFueSBIb3N0CisjIFRoaXMgaXMgb2Z0ZW4gbmljZSBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBidXQgbm90CisjIGFjY2VwdGFibGUgaW4gcmVhbCBsaXZlIGhvc3Rpbmcgc2NlbmFyaW9zCisKK3BpY2tfZmlyc3RfdmlydGhvc3Rfb25fbm9tYXRjaCA9IHRydWUKKworCisjIEFsbCB1bmljZXMgYXJlIGJyb2tlbiBzaW5jZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBiaW5kIHRvCisjIGEgcHJpdmlsZWdlZCBwb3J0ICg8IDEwMjQpIHVubGVzcyB1aWQ9PTAKKyMgVGhlcmUgaXMgYSBjb250cmliIGluIGp1bmdlcmwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgYnkgbWVhbnMgCisjIG9mIGFuIGV4dGVybmFsIHNldHVpZCByb290IHByb2dyYW1tIGNhbGxlZCBmZHNydiB0byBsaXN0ZW4gdG8KKyMgdG8gcHJpdmlsZWdlZCBwb3J0LgorIyBJZiB3ZSB1c2UgdGhpcyBmZWF0dXJlLCBpdCByZXF1aXJlcyBmZHNydiB0byBiZSBwcm9wZXJseSBpbnN0YWxsZWQuCisjIERvZXNuJ3QgeWV0IHdvcmsgd2l0aCBTU0wuCisKK3VzZV9mZHNydiA9IGZhbHNlCisKKworCisKKyMgZW5kIHRoZW4gYSBzZXQgb2YgdmlydHVhbCBzZXJ2ZXJzCisjIEZpcnN0IHR3byB2aXJ0aG9zdGVkIHNlcnZlcnMgb24gdGhlIHNhbWUgSVAgKDAuMC4wLjApCisjIGluIHRoaXMgY2FzZSwgYnV0IGFuIGV4cGxpY2l0IElQIGNhbiBiZSBnaXZlbiBhcyB3ZWxsCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA4MAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkb2Nyb290ID0gL3Zhci95YXdzL3d3dworCWFyZ19yZXdyaXRlX21vZCA9IHB3cl9hcmdfcmV3cml0ZV9tb2QKKwlhcHBtb2RzID0gPHB3ciwgcHdyX21haW5fY29udHJvbGxlcl9hcHBtb2Q+Cis8L3NlcnZlcj4KKworPHNlcnZlciBsb2NhbGhvc3Q+CisJcG9ydCA9IDgwCisJbGlzdGVuID0gMC4wLjAuMAorCWRvY3Jvb3QgPSAvdG1wCisJZGlyX2xpc3RpbmdzID0gdHJ1ZQorCWRhdiA9IHRydWUKKwk8YXV0aD4KKwkJcmVhbG0gPSBmb29iYXIKKwkJZGlyID0gLworCQl1c2VyID0gZm9vOmJhcgorCQl1c2VyID0gYmF6OmJhcgorCTwvYXV0aD4KKzwvc2VydmVyPgorCisKKworIyBBbmQgdGhlbiBhbiBzc2wgc2VydmVyCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA0NDMKKwlkb2Nyb290ID0gL3RtcAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkaXJfbGlzdGluZ3MgPSB0cnVlCisJPHNzbD4gIAorCSAgICAgICAga2V5ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1rZXkucGVtCisJICAgICAgICBjZXJ0ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1jZXJ0LnBlbQorCTwvc3NsPgorPC9zZXJ2ZXI+CisJCQkJCisJCisKKworCisKKworCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzL2VtYWNzL2VybGFuZy1zdGFydC5lbCBiL2xpYi9lcmwvdG9vbHMvZW1hY3MvZXJsYW5nLXN0YXJ0LmVsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxODFiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzL2VtYWNzL2VybGFuZy1zdGFydC5lbApAQCAtMCwwICsxLDExNSBAQAorOzsgZXJsYW5nLXN0YXJ0LmVsIC0tLSBMb2FkIHRoaXMgZmlsZSB0byBpbml0aWFsaXplIHRoZSBFcmxhbmcgcGFja2FnZS4KKworOzsgQ29weXJpZ2h0IChDKSAxOTk4ICBFcmljc3NvbiBUZWxlY29tIEFCCisKKzs7IEF1dGhvcjogICBBbmRlcnMgTGluZGdyZW4KKzs7IFZlcnNpb246ICAyLjMKKzs7IEtleXdvcmRzOiBlcmxhbmcsIGxhbmd1YWdlcywgcHJvY2Vzc2VzCis7OyBDcmVhdGVkOiAgMTk5Ni0wOS0xOAorOzsgRGF0ZTogICAgIDE5OTgtMDMtMTYKKworOzs7IENvbW1lbnRhcnk6CisKKzs7IEludHJvZHVjdGlvbjoKKzs7IC0tLS0tLS0tLS0tLQorOzsKKzs7IFRoaXMgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgRXJsYW5nLgorOzsgVGhlIHBhY2thZ2UgcHJvdmlkZXMgYW4gZWRpdGluZyBtb2RlIHdpdGggbG90cyBvZiBiZWxscyBhbmQKKzs7IHdoaXN0bGVzLCBjb21waWxhdGlvbiBzdXBwb3J0LCBhbmQgaXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHRoZQorOzsgdXNlciB0byBzdGFydCBFcmxhbmcgc2hlbGxzIHRoYXQgcnVuIGluc2lkZSBFbWFjcy4KKzs7Cis7OyBTZWUgdGhlIEVybGFuZyBkaXN0cmlidXRpb24gZm9yIGZ1bGwgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHBhY2thZ2UuCisKKzs7IEluc3RhbGxhdGlvbjoKKzs7IC0tLS0tLS0tLS0tLQorOzsKKzs7IFBsYWNlIHRoaXMgZmlsZSBpbiBFbWFjcyBsb2FkIHBhdGgsIGJ5dGUtY29tcGlsZSBpdCwgYW5kIGFkZCB0aGUKKzs7IGZvbGxvd2luZyBsaW5lIHRvIHRoZSBhcHByb3ByaWF0ZSBpbml0IGZpbGU6Cis7OworOzsgICAgKHJlcXVpcmUgJ2VybGFuZy1zdGFydCkKKzs7Cis7OyBUaGUgZnVsbCBkb2N1bWVudGF0aW9uIGNvbnRhaW5zIG11Y2ggbW9yZSBleHRlbnNpdmUgZGVzY3JpcHRpb24gb2YKKzs7IHRoZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlLgorCis7OyBSZXBvcnRpbmcgQnVnczoKKzs7IC0tLS0tLS0tLS0tLS0tCis7OworOzsgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIGZvbGxvd2luZyBlbWFpbCBhZGRyZXNzOgorOzsgICAgIHN1cHBvcnRAZXJsYW5nLmVyaWNzc29uLnNlCis7OworOzsgUGxlYXNlIHN0YXRlIGFzIGV4YWN0bHkgYXMgcG9zc2libGU6Cis7OyAgICAtIFZlcnNpb24gbnVtYmVyIG9mIEVybGFuZyBNb2RlIChzZWUgdGhlIG1lbnUpLCBFbWFjcywgRXJsYW5nLAorOzsJYW5kIG9mIGFueSBvdGhlciByZWxldmFudCBzb2Z0d2FyZS4KKzs7ICAgIC0gV2hhdCB0aGUgZXhwZWN0ZWQgcmVzdWx0IHdhcy4KKzs7ICAgIC0gV2hhdCB5b3UgZGlkLCBwcmVmZXJhYmx5IGluIGEgcmVwZWF0YWJsZSBzdGVwLWJ5LXN0ZXAgZm9ybS4KKzs7ICAgIC0gQSBkZXNjcmlwdGlvbiBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHQuCis7OyAgICAtIFJlbGV2YW50IHBpZWNlcyBvZiBFcmxhbmcgY29kZSBjYXVzaW5nIHRoZSBwcm9ibGVtLgorOzsgICAgLSBQZXJzb25hbCBFbWFjcyBjdXN0b21pc2F0aW9ucywgaWYgYW55LgorOzsKKzs7IFNob3VsZCB0aGUgRW1hY3MgZ2VuZXJhdGUgYW4gZXJyb3IsIHBsZWFzZSBzZXQgdGhlIGVtYWNzIHZhcmlhYmxlCis7OyBgZGVidWctb24tZXJyb3InIHRvIGB0Jy4gIFJlcGVhdCB0aGUgZXJyb3IgYW5kIGVuY2xvc2UgdGhlIGRlYnVnCis7OyBpbmZvcm1hdGlvbiBpbiB5b3VyIGJ1Zy1yZXBvcnQuCis7OworOzsgVG8gc2V0IHRoZSB2YXJpYWJsZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6Cis7OyAgICAgTS14IHNldC12YXJpYWJsZSBSRVQgZGVidWctb24tZXJyb3IgUkVUIHQgUkVUCis7OzsgQ29kZToKKworOzsKKzs7IERlY2xhcmUgZnVuY3Rpb25zIGluICJlcmxhbmcuZWwiLgorOzsKKworKGF1dG9sb2FkICdlcmxhbmctbW9kZSAiZXJsYW5nIiAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBFcmxhbmcgY29kZS4iIHQpCisoYXV0b2xvYWQgJ2VybGFuZy12ZXJzaW9uICJlcmxhbmciIAorICAiUmV0dXJuIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgRXJsYW5nIG1vZGUuIiB0KQorKGF1dG9sb2FkICdlcmxhbmctc2hlbGwgImVybGFuZyIgIlN0YXJ0IGEgbmV3IEVybGFuZyBzaGVsbC4iIHQpCisoYXV0b2xvYWQgJ3J1bi1lcmxhbmcgImVybGFuZyIgIlN0YXJ0IGEgbmV3IEVybGFuZyBzaGVsbC4iIHQpCisKKyhhdXRvbG9hZCAnZXJsYW5nLWNvbXBpbGUgImVybGFuZyIKKyAgIkNvbXBpbGUgRXJsYW5nIG1vZHVsZSBpbiBjdXJyZW50IGJ1ZmZlci4iIHQpCisKKyhhdXRvbG9hZCAnZXJsYW5nLW1hbi1tb2R1bGUgImVybGFuZyIgCisgICJGaW5kIG1hbnVhbCBwYWdlIGZvciBNT0RVTEUuIiB0KQorKGF1dG9sb2FkICdlcmxhbmctbWFuLWZ1bmN0aW9uICJlcmxhbmciCisgICJGaW5kIG1hbnVhbCBwYWdlIGZvciBOQU1FLCB3aGVyZSBOQU1FIGlzIG1vZHVsZTpmdW5jdGlvbi4iIHQpCisKKyhhdXRvbG9hZCAnZXJsYW5nLWZpbmQtdGFnICJlcmxhbmciCisgICJMaWtlIGBmaW5kLXRhZycuICBDYXBhYmxlIG9mIHJldHJlaXZpbmcgRXJsYW5nIG1vZHVsZXMuIikKKyhhdXRvbG9hZCAnZXJsYW5nLWZpbmQtdGFnLW90aGVyLXdpbmRvdyAiZXJsYW5nIgorICAiTGlrZSBgZmluZC10YWctb3RoZXItd2luZG93Jy4gIENhcGFibGUgb2YgcmV0cmVpdmluZyBFcmxhbmcgbW9kdWxlcy4iKQorCisKKzs7Cis7OyBBc3NvY2lhdGUgZmlsZXMgZXh0ZW5zaW9ucyAiLmVybCIgYW5kICIuaHJsIiB3aXRoIEVybGFuZyBtb2RlLgorOzsKKworKGxldCAoKGEgJygiXFwuZXJsXFwnIiAuIGVybGFuZy1tb2RlKSkKKyAgICAgIChiICcoIlxcLmhybFxcJyIgLiBlcmxhbmctbW9kZSkpKQorICAob3IgKGFzc29jIChjYXIgYSkgYXV0by1tb2RlLWFsaXN0KQorICAgICAgKHNldHEgYXV0by1tb2RlLWFsaXN0IChjb25zIGEgYXV0by1tb2RlLWFsaXN0KSkpCisgIChvciAoYXNzb2MgKGNhciBiKSBhdXRvLW1vZGUtYWxpc3QpCisgICAgICAoc2V0cSBhdXRvLW1vZGUtYWxpc3QgKGNvbnMgYiBhdXRvLW1vZGUtYWxpc3QpKSkpCisKKworOzsKKzs7IElnbm9yZSBmaWxlcyBlbmRpbmcgaW4gIi5qYW0iLCAiLnZlZSIsIGFuZCAiLmJlYW0iIHdoZW4gcGVyZm9ybWluZworOzsgZmlsZSBjb21wbGV0aW9uLgorOzsKKworKGxldCAoKGVybC1leHQgJygiLmphbSIgIi52ZWUiICIuYmVhbSIpKSkKKyAgKHdoaWxlIGVybC1leHQKKyAgICAobGV0ICgoY2llIGNvbXBsZXRpb24taWdub3JlZC1leHRlbnNpb25zKSkKKyAgICAgICh3aGlsZSAoYW5kIGNpZSAobm90IChzdHJpbmctZXF1YWwgKGNhciBjaWUpIChjYXIgZXJsLWV4dCkpKSkKKwkoc2V0cSBjaWUgKGNkciBjaWUpKSkKKyAgICAgIChpZiAobnVsbCBjaWUpCisJICAoc2V0cSBjb21wbGV0aW9uLWlnbm9yZWQtZXh0ZW5zaW9ucworCQkoY29ucyAoY2FyIGVybC1leHQpIGNvbXBsZXRpb24taWdub3JlZC1leHRlbnNpb25zKSkpKQorICAgIChzZXRxIGVybC1leHQgKGNkciBlcmwtZXh0KSkpKQorCisKKzs7Cis7OyBUaGUgZW5kLgorOzsKKworKHByb3ZpZGUgJ2VybGFuZy1zdGFydCkKKworOzsgZXJsYW5nLXN0YXJ0LmVsIGVuZHMgaGVyZS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvZW1hY3MvZXJsYW5nLmVsIGIvbGliL2VybC90b29scy9lbWFjcy9lcmxhbmcuZWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTkxNmY3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvZW1hY3MvZXJsYW5nLmVsCkBAIC0wLDAgKzEsNjI5MSBAQAorOzsgJElkOiBlcmxhbmcuZWwsdiAxLjIxIDIwMDQvMDgvMDMgMjA6Mzg6NDMgbWxvZ2FuIEV4cCAkCis7OyBlcmxhbmcuZWwgLS0tIE1ham9yIG1vZGVzIGZvciBlZGl0aW5nIGFuZCBydW5uaW5nIEVybGFuZworCis7OyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwyMDAwICBFcmljc3NvbiBUZWxlY29tIEFCCisKKzs7IEF1dGhvcjogICBBbmRlcnMgTGluZGdyZW4KKzs7IFZlcnNpb246ICAyLjQKKzs7IEtleXdvcmRzOiBlcmxhbmcsIGxhbmd1YWdlcywgcHJvY2Vzc2VzCis7OyBEYXRlOiAgICAgMjAwMC0wOS0xMQorCis7OyBMYXJzIFRob3Jz6W4ncyBtb2RpZmljYXRpb25zIG9mIDIwMDAtMDYtMDcgaW5jbHVkZWQuCisgCis7OyBUaGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2Ugd2FzIHdyaXR0ZW4gYnkgUm9iZXJ0IFZpcmRpbmcuCis7OworOzsgTW9zdCBza2VsZXRvbnMgaGFzIGJlZW4gd3JpdHRlbiBhdCBFcmljc3NvbiBUZWxlY29tIGJ5Cis7OyBtYWdudXNAZXJpeC5lcmljc3Nvbi5zZSBhbmQgamFubmVAZXJpeC5lcmljc3Nvbi5zZQorCis7OzsgQ29tbWVudGFyeToKKworOzsgSW50cm9kdWN0aW9uOgorOzsgLS0tLS0tLS0tLS0tCis7OworOzsgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBFcmxhbmcuCis7OyBUaGUgcGFja2FnZSBwcm92aWRlcyBhbiBlZGl0aW5nIG1vZGUgd2l0aCBsb3RzIG9mIGJlbGxzIGFuZAorOzsgd2hpc3RsZXMsIGNvbXBpbGF0aW9uIHN1cHBvcnQsIGFuZCBpdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdGhlCis7OyB1c2VyIHRvIHN0YXJ0IEVybGFuZyBzaGVsbHMgdGhhdCBydW4gaW5zaWRlIEVtYWNzLgorOzsKKzs7IFNlZSB0aGUgRXJsYW5nIGRpc3RyaWJ1dGlvbiBmb3IgZnVsbCBkb2N1bWVudGF0aW9uIG9mIHRoaXMgcGFja2FnZS4KKworOzsgSW5zdGFsbGF0aW9uOgorOzsgLS0tLS0tLS0tLS0tCis7OworOzsgUGxhY2UgdGhpcyBmaWxlIGluIEVtYWNzIGxvYWQgcGF0aCwgYnl0ZS1jb21waWxlIGl0LCBhbmQgYWRkIHRoZQorOzsgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGFwcHJvcHJpYXRlIGluaXQgZmlsZToKKzs7Cis7OyAgICAocmVxdWlyZSAnZXJsYW5nLXN0YXJ0KQorOzsKKzs7IFRoZSBmdWxsIGRvY3VtZW50YXRpb24gY29udGFpbnMgbXVjaCBtb3JlIGV4dGVuc2l2ZSBkZXNjcmlwdGlvbiBvZgorOzsgdGhlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUuCisKKzs7IFJlcG9ydGluZyBCdWdzOgorOzsgLS0tLS0tLS0tLS0tLS0KKzs7Cis7OyBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byB0aGUgZm9sbG93aW5nIGVtYWlsIGFkZHJlc3M6Cis7OyAgICAgc3VwcG9ydEBlcmxhbmcuZXJpY3Nzb24uc2UKKzs7Cis7OyBQbGVhc2Ugc3RhdGUgYXMgZXhhY3RseSBhcyBwb3NzaWJsZToKKzs7ICAgIC0gVmVyc2lvbiBudW1iZXIgb2YgRXJsYW5nIE1vZGUgKHNlZSB0aGUgbWVudSksIEVtYWNzLCBFcmxhbmcsCis7OwlhbmQgb2YgYW55IG90aGVyIHJlbGV2YW50IHNvZnR3YXJlLgorOzsgICAgLSBXaGF0IHRoZSBleHBlY3RlZCByZXN1bHQgd2FzLgorOzsgICAgLSBXaGF0IHlvdSBkaWQsIHByZWZlcmFibHkgaW4gYSByZXBlYXRhYmxlIHN0ZXAtYnktc3RlcCBmb3JtLgorOzsgICAgLSBBIGRlc2NyaXB0aW9uIG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdC4KKzs7ICAgIC0gUmVsZXZhbnQgcGllY2VzIG9mIEVybGFuZyBjb2RlIGNhdXNpbmcgdGhlIHByb2JsZW0uCis7OyAgICAtIFBlcnNvbmFsIEVtYWNzIGN1c3RvbWlzYXRpb25zLCBpZiBhbnkuCis7OworOzsgU2hvdWxkIHRoZSBFbWFjcyBnZW5lcmF0ZSBhbiBlcnJvciwgcGxlYXNlIHNldCB0aGUgZW1hY3MgdmFyaWFibGUKKzs7IGBkZWJ1Zy1vbi1lcnJvcicgdG8gYHQnLiAgUmVwZWF0IHRoZSBlcnJvciBhbmQgZW5jbG9zZSB0aGUgZGVidWcKKzs7IGluZm9ybWF0aW9uIGluIHlvdXIgYnVnLXJlcG9ydC4KKzs7Cis7OyBUbyBzZXQgdGhlIHZhcmlhYmxlIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKzs7ICAgICBNLXggc2V0LXZhcmlhYmxlIFJFVCBkZWJ1Zy1vbi1lcnJvciBSRVQgdCBSRVQKKwwKKzs7OyBDb2RlOgorCis7OyBWYXJpYWJsZXM6CisKKyhkZWZjb25zdCBlcmxhbmctdmVyc2lvbiAiMi40IgorICAiVGhlIHZlcnNpb24gbnVtYmVyIG9mIEVybGFuZyBtb2RlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXJvb3QtZGlyIG5pbAorICAiVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgRXJsYW5nIHN5c3RlbSBpcyBpbnN0YWxsZWQuCitUaGUgbmFtZSBzaG91bGQgbm90IGNvbnRhaW4gdGhlIGVuZGluZyBzbGFzaC4KKworU2hvdWxkIHRoaXMgdmFyaWFibGUgYmUgbmlsLCBubyBtYW51YWwgcGFnZXMgd2lsbCBzaG93IHVwIGluIHRoZQorRXJsYW5nIG1vZGUgbWVudS4iKQorCisoZGVmdmFyIGVybGFuZy1tZW51LWl0ZW1zICcoZXJsYW5nLW1lbnUtYmFzZS1pdGVtcworCQkJICAgIGVybGFuZy1tZW51LXNrZWwtaXRlbXMKKwkJCSAgICBlcmxhbmctbWVudS1zaGVsbC1pdGVtcworCQkJICAgIGVybGFuZy1tZW51LWNvbXBpbGUtaXRlbXMKKwkJCSAgICBlcmxhbmctbWVudS1tYW4taXRlbXMKKwkJCSAgICBlcmxhbmctbWVudS1wZXJzb25hbC1pdGVtcworCQkJICAgIGVybGFuZy1tZW51LXZlcnNpb24taXRlbXMpCisgICIqTGlzdCBvZiBtZW51IGl0ZW0gbGlzdCB0byBjb21iaW5lIHRvIGNyZWF0ZSBFcmxhbmQgbW9kZSBtZW51LgorCitFeHRlcm5hbCBwcm9ncmFtcyB3aGljaCB0ZW1wb3JhcnkgYWRkcyBtZW51IGl0ZW1zIHRvIHRoZSBFcmxhbmQgbW9kZQorbWVudSB1c2UgdGhpcyB2YXJpYWJsZS4gIFBsZWFzZSB1c2UgdGhlIGZ1bmN0aW9uIGBhZGQtaG9vaycgdG8gYWRkCitpdGVtcy4KKworUGxlYXNlIGNhbGwgdGhlIGZ1bmN0aW9uIGBlcmxhbmctbWVudS1pbml0JyBhZnRlciBldmVyeSBjaGFuZ2UgdG8gdGhpcwordmFyaWFibGUuIikKKworKGRlZnZhciBlcmxhbmctbWVudS1iYXNlLWl0ZW1zCisgICcoKCJJbmRlbnQiCisgICAgICgoIkluZGVudCBMaW5lIiBlcmxhbmctaW5kZW50LWNvbW1hbmQpCisgICAgICAoIkluZGVudCBSZWdpb24gIiBlcmxhbmctaW5kZW50LXJlZ2lvbgorICAgICAgIChpZiBlcmxhbmcteGVtYWNzLXAgKG1hcmspIG1hcmstYWN0aXZlKSkKKyAgICAgICgiSW5kZW50IENsYXVzZSIgZXJsYW5nLWluZGVudC1jbGF1c2UpCisgICAgICAoIkluZGVudCBGdW5jdGlvbiIgZXJsYW5nLWluZGVudC1mdW5jdGlvbikKKyAgICAgICgiSW5kZW50IEJ1ZmZlciIgZXJsYW5nLWluZGVudC1jdXJyZW50LWJ1ZmZlcikpKQorICAgICgiRWRpdCIKKyAgICAgKCgiRmlsbCBDb21tZW50IiBlcmxhbmctZmlsbC1wYXJhZ3JhcGgpCisgICAgICAoIkNvbW1lbnQgUmVnaW9uIiBjb21tZW50LXJlZ2lvbgorICAgICAgIChpZiBlcmxhbmcteGVtYWNzLXAgKG1hcmspIG1hcmstYWN0aXZlKSkKKyAgICAgICgiVW5jb21tZW50IFJlZ2lvbiIgZXJsYW5nLXVuY29tbWVudC1yZWdpb24KKyAgICAgICAoaWYgZXJsYW5nLXhlbWFjcy1wIChtYXJrKSBtYXJrLWFjdGl2ZSkpCisgICAgICBuaWwKKyAgICAgICgiQmVnaW5uaW5nIG9mIEZ1bmN0aW9uIiBlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uKQorICAgICAgKCJFbmQgb2YgRnVuY3Rpb24iIGVybGFuZy1lbmQtb2YtZnVuY3Rpb24pCisgICAgICAoIk1hcmsgRnVuY3Rpb24iIGVybGFuZy1tYXJrLWZ1bmN0aW9uKQorICAgICAgbmlsCisgICAgICAoIkJlZ2lubmluZyBvZiBDbGF1c2UiIGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorICAgICAgKCJFbmQgb2YgQ2xhdXNlIiBlcmxhbmctZW5kLW9mLWNsYXVzZSkKKyAgICAgICgiTWFyayBDbGF1c2UiIGVybGFuZy1tYXJrLWNsYXVzZSkKKyAgICAgIG5pbAorICAgICAgKCJOZXcgQ2xhdXNlIiBlcmxhbmctZ2VuZXJhdGUtbmV3LWNsYXVzZSkKKyAgICAgICgiQ2xvbmUgQXJndW1lbnRzIiBlcmxhbmctY2xvbmUtYXJndW1lbnRzKSkpCisgICAgKCJTeW50YXggSGlnaGxpZ2h0aW5nIgorICAgICAoKCJMZXZlbCAzIiBlcmxhbmctZm9udC1sb2NrLWxldmVsLTMpCisgICAgICAoIkxldmVsIDIiIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMikKKyAgICAgICgiTGV2ZWwgMSIgZXJsYW5nLWZvbnQtbG9jay1sZXZlbC0xKQorICAgICAgKCJPZmYiIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMCkpKQorICAgICgiVEFHUyIKKyAgICAgKCgiRmluZCBUYWciIGZpbmQtdGFnKQorICAgICAgKCJGaW5kIE5leHQgVGFnIiBlcmxhbmctZmluZC1uZXh0LXRhZykKKyAgICAgIDsoIkZpbmQgUmVnZXhwIiBmaW5kLXRhZy1yZWdleHApCisgICAgICAoIkNvbXBsZXRlIFdvcmQiIGVybGFuZy1jb21wbGV0ZS10YWcpCisgICAgICAoIlRhZ3MgQXByb3BvcyIgdGFncy1hcHJvcG9zKQorICAgICAgKCJTZWFyY2ggRmlsZXMiIHRhZ3Mtc2VhcmNoKSkpKQorICAiKkRlc2NyaXB0aW9uIG9mIG1lbnUgdXNlZCBpbiBFcmxhbmcgbW9kZS4KKworVGhpcyB2YXJpYWJsZSBtdXN0IGJlIGEgbGlzdC4gVGhlIGVsZW1lbnRzIGFyZSBlaXRoZXIgbmlsIHJlcHJlc2VudGluZworYSBob3Jpc29udGFsIGxpbmUgb3IgYSBsaXN0IHdpdGggdHdvIG9yIHRocmVlIGVsZW1lbnRzLiAgVGhlIGZpcnN0IGlzCit0aGUgbmFtZSBvZiB0aGUgbWVudSBpdGVtLCB0aGUgc2Vjb25kIGlzIHRoZSBmdW5jdGlvbiB0byBjYWxsLCBvciBhCitzdWJtZW51LCBvbiB0aGUgc2FtZSBzYW1lIGZvcm0gYXMgSVRFTVMuICBUaGUgdGhpcmQgb3B0aW9uYWwgYXJndW1lbnQKK2lzIGFuIGV4cHJlc3Npb24gd2hpY2ggaXMgZXZhbHVhdGVkIGV2ZXJ5IHRpbWUgdGhlIG1lbnUgaXMgZGlzcGxheWVkLgorU2hvdWxkIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlIHRvIG5pbCB0aGUgbWVudSBpdGVtIGlzIGdob3N0ZWQuCisKK0V4YW1wbGU6CisgICAgJygoXCJGdW5jMVwiIGZ1bmN0aW9uLW9uZSkKKyAgICAgIChcIlN1Ykl0ZW1cIgorICAgICAgICgoXCJZZWxsb3dcIiBmdW5jdGlvbi15ZWxsb3cpCisgICAgICAgIChcIkJsdWVcIiBmdW5jdGlvbi1ibHVlKSkpCisgICAgICBuaWwKKyAgICAgIChcIlJlZ2lvbiBGdW50aW9uXCIgc3Bvb2stZnVuY3Rpb24gbWlkbmlnaHQtdmFyaWFibGUpKQorCitDYWxsIHRoZSBmdW5jdGlvbiBgZXJsYW5nLW1lbnUtaW5pdCcgYWZ0ZXIgbW9kaWZ5aW5nIHRoaXMgdmFyaWFibGUuIikKKworKGRlZnZhciBlcmxhbmctbWVudS1zaGVsbC1pdGVtcworICAnKG5pbAorICAgICgiU2hlbGwiCisgICAgICgoIlN0YXJ0IE5ldyBTaGVsbCIgZXJsYW5nLXNoZWxsKQorICAgICAgKCJEaXNwbGF5IFNoZWxsIiAgIGVybGFuZy1zaGVsbC1kaXNwbGF5KSkpKQorICAiKkRlc2NyaXB0aW9uIG9mIHRoZSBTaGVsbCBtZW51IHVzZWQgYnkgRXJsYW5nIG1vZGUuCisKK1BsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgYGVybGFuZy1tZW51LWJhc2UtaXRlbXMnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1lbnUtY29tcGlsZS1pdGVtcworICAnKCgiQ29tcGlsZSIKKyAgICAgKCgiQ29tcGlsZSBCdWZmZXIiIGVybGFuZy1jb21waWxlKQorICAgICAgKCJEaXNwbGF5IFJlc3VsdCIgZXJsYW5nLWNvbXBpbGUtZGlzcGxheSkKKyAgICAgICgiTmV4dCBFcnJvciIgICAgIGVybGFuZy1uZXh0LWVycm9yKSkpKQorICAiKkRlc2NyaXB0aW9uIG9mIHRoZSBDb21waWxlIG1lbnUgdXNlZCBieSBFcmxhbmcgbW9kZS4KKworUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBgZXJsYW5nLW1lbnUtYmFzZS1pdGVtcycuIikKKworKGRlZnZhciBlcmxhbmctbWVudS12ZXJzaW9uLWl0ZW1zCisgICcobmlsCisgICAgKCJWZXJzaW9uIiBlcmxhbmctdmVyc2lvbikpCisgICIqRGVzY3JpcHRpb24gb2YgdGhlIHZlcnNpb24gbWVudSB1c2VkIGluIEVybGFuZyBtb2RlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1lbnUtcGVyc29uYWwtaXRlbXMgbmlsCisgICIqRGVzY3JpcHRpb24gb2YgcGVyc29uYWwgbWVudSBpdGVtcyB1c2VkIGluIEVybGFuZyBtb2RlLgorCitQbGVhc2Ugc2VlIHRoZSB2YXJpYWJsZSBgZXJsYW5nLW1lbnUtYmFzZS1pdGVtcycgZm9yIGEgZGVzY3JpcHRpb24KK29mIHRoZSBmb3JtYXQuIikKKworKGRlZnZhciBlcmxhbmctbWVudS1tYW4taXRlbXMgbmlsCisgICJUaGUgbWVudSBjb250YWluaW5nIG1hbiBwYWdlcy4KKworVGhlIGZvcm1hdCBvZiB0aGUgbWVudSBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIGBlcmxhbmctbWVudS1iYXNlLWl0ZW1zJy4KK1RoaXMgdmFyaWFibGUgaXMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgRXJsYW5nIG1lbnVzIHN0b3JlZCBpbgorYGVybGFuZy1tZW51LWl0ZW1zJy4iKQorCisoZGVmdmFyIGVybGFuZy1tZW51LXNrZWwtaXRlbXMgJygpCisgICJEZXNjcmlwdGlvbiBvZiB0aGUgbWVudSBjb250YWluaW5nIHRoZSBza2VsZXRvbiBlbnRyaWVzLgorVGhlIG1lbnUgaXMgaW4gdGhlIGZvcm0gZGVzY3JpYmVkIGJ5IHRoZSB2YXJpYWJsZSBgZXJsYW5nLW1lbnUtYmFzZS1pdGVtcycuIikKKworKGRlZnZhciBlcmxhbmctbW9kZS1ob29rIG5pbAorICAiKkZ1bmN0aW9ucyB0byBydW4gd2hlbiBFcmxhbmcgbW9kZSBpcyBhY3RpdmF0ZWQuCisKK1RoaXMgaG9vayBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIEVybGFuZyBtb2RlLiAgSXQgaXMKK25vcm1hbGx5IHVzZWQgYnkgdGhlIHVzZXIgdG8gcGVyc29uYWxpc2UgdGhlIHByb2dyYW1taW5nIGVudmlyb25tZW50LgorV2hlbiB1c2VkIGluIGEgc2l0ZSBpbml0IGZpbGUsIGl0IGNvdWxkIGJlIHVzZWQgdG8gY3VzdG9taXNlIEVybGFuZworbW9kZSBmb3IgYWxsIHVzZXJzIG9uIHRoZSBzeXN0ZW0uCisKK1RoZSBmdW5jdGlvbnMgYWRkZWQgdG8gdGhpcyBob29rIGlzIHJ1bmVkIGV2ZXJ5IHRpbWUgRXJsYW5nIG1vZGUgaXMKK3N0YXJ0ZWQuICBTZWUgYWxzbyBgZXJsYW5nLWxvYWQtaG9vaycsIGEgaG9vayB3aGljaCBpcyBydW5lZCBvbmNlLAord2hlbiBFcmxhbmcgbW9kZSBpcyBsb2FkZWQgaW50byBFbWFjcywgYW5kIGBlcmxhbmctc2hlbGwtbW9kZS1ob29rJword2hpY2ggaXMgcnVuIGV2ZXJ5IHRpbWUgYSBuZXcgaW5mZXJpb3IgRXJsYW5nIHNoZWxsIGlzIHN0YXJ0ZWQuCisKK1RvIHVzZSBhIGhvb2ssIGNyZWF0ZSBhbiBFbWFjcyBsaXNwIGZ1bmN0aW9uIHRvIHBlcmZvcm0geW91ciBhY3Rpb25zCithbmQgYWRkIHRoZSBmdW5jdGlvbiB0byB0aGUgaG9vayBieSBjYWxsaW5nIGBhZGQtaG9vaycuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBiaW5kcyB0aGUga2V5IHNlcXVlbmNlIEMtYyBDLWMgdG8gdGhlIGNvbW1hbmQKK2BlcmxhbmctY29tcGlsZScgKG5vcm1hbGx5IGJvdW5kIHRvIEMtYyBDLWspLiAgVGhlIGV4YW1wbGUgYWxzbworYWN0aXZhdGVzIEZvbnQgTG9jayBtb2RlIHRvIGZvbnRpZnkgdGhlIGJ1ZmZlciBhbmQgYWRkcyBhIG1lbnUKK2NvbnRhaW5pbmcgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KKworVG8gdXNlIHRoZSBleGFtcGxlLCBjb3B5IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBgfi8uZW1hY3MnIGZpbGU6CisKKyAgICAoYWRkLWhvb2sgJ2VybGFuZy1tb2RlLWhvb2sgJ215LWVybGFuZy1tb2RlLWhvb2spCisKKyAgICAoZGVmdW4gbXktZXJsYW5nLW1vZGUtaG9vayAoKQorICAgICAgKGxvY2FsLXNldC1rZXkgXCJcXEMtY1xcQy1jXCIgJ2VybGFuZy1jb21waWxlKQorICAgICAgKGlmIHdpbmRvdy1zeXN0ZW0KKyAgICAgICAgICAocHJvZ24KKyAgICAgICAgICAgIChzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24gdCkKKyAgICAgICAgICAgIChmb250LWxvY2stbW9kZSAxKSkpCisgICAgICAoaWYgKGFuZCB3aW5kb3ctc3lzdGVtIChmYm91bmRwICdpbWVudS1hZGQtdG8tbWVudWJhcikpCisgICAgICAgICAgKGltZW51LWFkZC10by1tZW51YmFyIFwiSW1lbnVcIikpKSIpCisKKyhkZWZ2YXIgZXJsYW5nLWxvYWQtaG9vayBuaWwKKyAgIipGdW5jdGlvbnMgdG8gcnVuIHdoZW4gRXJsYW5nIG1vZGUgaXMgbG9hZGVkLgorCitUaGlzIGhvb2sgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBFcmxhbmcgbW9kZS4gIEl0IGlzCitub3JtYWxseSB1c2VkIGJ5IHRoZSB1c2VyIHRvIHBlcnNvbmFsaXNlIHRoZSBwcm9ncmFtbWluZyBlbnZpcm9ubWVudC4KK1doZW4gdXNlZCBpbiBhIHNpdGUgaW5pdCBmaWxlLCBpdCBjb3VsZCBiZSB1c2VkIHRvIGN1c3RvbWl6ZSBFcmxhbmcKK21vZGUgZm9yIGFsbCB1c2VycyBvbiB0aGUgc3lzdGVtLgorCitUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgaG9vayBhbmQgYGVybGFuZy1tb2RlLWhvb2snIGFuZAorYGVybGFuZy1zaGVsbC1tb2RlLWhvb2snIGlzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGhvb2sKK2lzIG9ubHkgY2FsbGVkIG9uY2UsIHdoZW4gdGhlIEVybGFuZyBtb2RlIGlzIGxvYWRlZCBpbnRvIEVtYWNzCit0aGUgZmlyc3QgdGltZS4KKworTmF0dXJhbCBhY3Rpb25zIGZvciB0aGUgZnVuY3Rpb25zIGFkZGVkIHRvIHRoaXMgaG9vayBhcmUgYWN0aW9ucyB3aGljaAorb25seSBzaG91bGQgYmUgcGVyZm9ybWVkIG9uY2UsIGFuZCBhY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBwZXJmb3JtZWQKK2JlZm9yZSBzdGFydGluZyBFcmxhbmcgbW9kZS4gIEZvciBleGFtcGxlLCBhIG51bWJlciBvZiB2YXJpYWJsZXMgYXJlCit1c2VkIGJ5IEVybGFuZyBtb2RlIGJlZm9yZSBgZXJsYW5nLW1vZGUtaG9vaycgaXMgcnVuZWQuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzZXRzIHRoZSB2YXJpYWJsZSBgZXJsYW5nLXJvb3QtZGlyJyBzbyB0aGF0IHRoZQorbWFudWFsIHBhZ2VzIGNhbiBiZSByZXRyaWV2ZWQgKG5vdGUgdGhhdCB5b3UgbXVzdCBzZXQgdGhlIHZhbHVlIG9mCitgZXJsYW5nLXJvb3QtZGlyJyB0byBtYXRjaCB0aGUgbG9hdGlvbiBvZiBFcmxhbmcgb24geW91ciBzeXN0ZW0pOgorCisgICAgKGFkZC1ob29rICdlcmxhbmctbG9hZC1ob29rICdteS1lcmxhbmctbG9hZC1ob29rKQorCisgICAgKGRlZnVuIG15LWVybGFuZy1sb2FkLWhvb2sgKCkKKyAgICAgICAoc2V0cSBlcmxhbmctcm9vdC1kaXIgXCIvdXNyL2xvY2FsL2VybGFuZ1wiKSkiKQorCisoZGVmdmFyIGVybGFuZy1uZXctZmlsZS1ob29rIG5pbAorICAiRnVuY3Rpb25zIHRvIHJ1biB3aGVuIGEgbmV3IEVybGFuZyBzb3VyY2UgZmlsZSBpcyBiZWluZyBlZGl0ZWQuCisKK0EgdXNlZnVsIGZ1bmN0aW9uIGlzIGB0ZW1wby10ZW1wbGF0ZS1lcmxhbmctbm9ybWFsLWhlYWRlcicuCitcKFRoaXMgZnVuY3Rpb24gb25seSBleGlzdHMgd2hlbiB0aGUgYHRlbXBvJyBwYWNrYWdzIGlzIGF2YWlsYWJsZS4pIikKKworKGRlZnZhciBlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUgJ2FzaworICAiKk5vbi1uaWwgbWVhbnMgY2hlY2sgdGhhdCBtb2R1bGUgbmFtZSBhbmQgZmlsZSBuYW1lIGFncmVlcyB3aGVuIHNhdmluZy4KKworSWYgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdGhlIGF0b20gYGFzaycsIHRoZSB1c2VyIGlzCitwcm9tcHRlZC4gIElmIHRoZSB2YWx1ZSBpcyB0IHRoZSBzb3VyY2UgaXMgc2lsZW50bHkgY2hhbmdlZC4iKQorCisoZGVmdmFyIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcworICAnKGVybGFuZy1lbGVjdHJpYy1jb21tYQorICAgIGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24KKyAgICBlcmxhbmctZWxlY3RyaWMtZ3QpCisgICIqTGlzdCBvZiBhY3RpdmF0ZWQgZWxlY3RyaWMgY29tbWFuZHMuCisKK1RoZSBsaXN0IHNob3VsZCBjb250YWluIHRoZSBlbGVjdHJpYyBjb21tYW5kcyB3aGljaCBzaG91bGQgYmUgYWN0aXZlLgorQ3VycmVudGx5LCB0aGUgYXZhaWxhYmxlIGVsZWN0cmljIGNvbW1hbmRzIGFyZToKKyAgICBlcmxhbmctZWxlY3RyaWMtY29tbWEKKyAgICBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uCisgICAgZXJsYW5nLWVsZWN0cmljLWd0CisgICAgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUKKworU2hvdWxkIHRoZSB2YXJpYWJsZSBiZSBib3VuZCB0byB0LCBhbGwgZWxlY3RyaWMgY29tbWFuZHMKK2FyZSBhY3RpdmF0ZWQuCisKK1RvIGRlYWN0aXZhdGUgYWxsIGVsZWN0cmljIGNvbW1hbmRzLCBzZXQgdGhpcyB2YXJpYWJsZSB0byBuaWwuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0IHQKKyAgIipTZXQgdG8gbm9uLW5pbCB0byBpbmhpYml0IG5ld2xpbmUgYWZ0ZXIgZWxlY3RyaWMgY29tbWFuZC4KKworVGhpcyBpcyB1c2VmdWwgc2luY2UgYSBsb3Qgb2YgcGVvcGxlIHByZXNzIHJldHVybiBhZnRlciBleGVjdXRpbmcgYW4KK2VsZWN0cmljIGNvbW1hbmQuCisKK0luIG9yZGVyIHRvIHdvcmssIHRoZSBjb21tYW5kIG11c3QgYWxzbyBiZSBpbiB0aGUKK2xpc3QgYGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQtbGlzdCcuCisKK05vdGUgdGhhdCBjb21tYW5kcyBpbiB0aGlzIGxpc3QgYXJlIHJlcXVpcmVkIHRvIHNldCB0aGUgdmFyaWFibGUKK2BlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0JyB0byBuaWwgd2hlbiB0aGUgbmV3bGluZSBzaG91bGRuJ3QgYmUKK2luaGliaXRlZC4iKQorCisoZGVmdmFyIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQtbGlzdAorICAnKGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24KKyAgICBlcmxhbmctZWxlY3RyaWMtY29tbWEKKyAgICBlcmxhbmctZWxlY3RyaWMtZ3QpCisgICIqQ29tbWFuZCB3aGljaCBjYW4gaW5oaWJpdCB0aGUgbmV4dCBuZXdsaW5lLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbi1pbnNlcnQtYmxhbmstbGluZXMgbmlsCisgICIqTnVtYmVyIG9mIGJsYW5rIGxpbmVzIGluc2VydGVkIGJlZm9yZSBoZWFkZXIsIG9yIG5pbC4KKworVGhpcyB2YXJpYWJsZSBjb250cm9scyB0aGUgYmVoYXZpb3VyIG9mIGBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uJword2hlbiBhIG5ldyBmdW5jdGlvbiBoZWFkZXIgaXMgZ2VuZXJhdGVkLiAgV2hlbiBuaWwsIG5vIGJsYW5rIGxpbmUgaXMKK2luc2VydGVkIGJldHdlZW4gdGhlIGN1cnJlbnQgbGluZSBhbmQgdGhlIG5ldyBoZWFkZXIuICBXaGVuIGJvdW5kIHRvIGEKK251bWJlciBpdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgYmxhbmsgbGluZXMgd2hpY2ggc2hvdWxkIGJlCitpbnNlcnRlZC4iKQorCisoZGVmdmFyIGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24tY3JpdGVyaWEKKyAgJyhlcmxhbmctbmV4dC1saW5lcy1lbXB0eS1wCisgICAgZXJsYW5nLWF0LWtleXdvcmQtZW5kLXAKKyAgICBlcmxhbmctYXQtZW5kLW9mLWZ1bmN0aW9uLXApCisgICIqTGlzdCBvZiBmdW5jdGlvbnMgY29udHJvbGxpbmcgYGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24nLgorVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGxpc3QgYXJlIGNhbGxlZCwgaW4gb3JkZXIsIHdoZW5ldmVyIGEgc2VtaWNvbG9uCitpcyB0eXBlZC4gIEVhY2ggZnVuY3Rpb24gaW4gdGhlIGxpc3QgaXMgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLAorYW5kIHNob3VsZCByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgIG5pbCAgICAgICAgICAgICAtLSBubyBkZXRlcm1pbmF0aW9uIG1hZGUsIGNvbnRpbnVlIGNoZWNraW5nCisgICdzdG9wICAgICAgICAgICAtLSBkbyBub3QgY3JlYXRlIHByb3RvdHlwZSBmb3IgbmV4dCBsaW5lCisgIChhbnl0aGluZyBlbHNlKSAtLSBpbnNlcnQgcHJvdG90eXBlLCBhbmQgc3RvcCBjaGVja2luZworCitJZiBldmVyeSBmdW5jdGlvbiBpbiB0aGUgbGlzdCBpcyBjYWxsZWQgd2l0aCBubyBkZXRlcm1pbmF0aW9uIG1hZGUsCit0aGVuIG5vIHByb3RvdHlwZSBpcyBpbnNlcnRlZC4KKworVGhlIHRlc3QgaXMgcGVyZm9ybWVkIGJ5IHRoZSBmdW5jdGlvbiBgZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdCcuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtY29tbWEtY3JpdGVyaWEKKyAgJyhlcmxhbmctc3RvcC13aGVuLWluc2lkZS1hcmd1bWVudC1saXN0CisgICAgZXJsYW5nLXN0b3Atd2hlbi1hdC1ndWFyZAorICAgIGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAKKyAgICBlcmxhbmctYXQta2V5d29yZC1lbmQtcAorICAgIGVybGFuZy1hdC1lbmQtb2YtZnVuY3Rpb24tcCkKKyAgIipMaXN0IG9mIGZ1bmN0aW9ucyBjb250cm9sbGluZyBgZXJsYW5nLWVsZWN0cmljLWNvbW1hJy4KK1RoZSBmdW5jdGlvbnMgaW4gdGhpcyBsaXN0IGFyZSBjYWxsZWQsIGluIG9yZGVyLCB3aGVuZXZlciBhIGNvbW1hCitpcyB0eXBlZC4gIEVhY2ggZnVuY3Rpb24gaW4gdGhlIGxpc3QgaXMgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLAorYW5kIHNob3VsZCByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgIG5pbCAgICAgICAgICAgICAtLSBubyBkZXRlcm1pbmF0aW9uIG1hZGUsIGNvbnRpbnVlIGNoZWNraW5nCisgICdzdG9wICAgICAgICAgICAtLSBkbyBub3QgY3JlYXRlIHByb3RvdHlwZSBmb3IgbmV4dCBsaW5lCisgIChhbnl0aGluZyBlbHNlKSAtLSBpbnNlcnQgcHJvdG90eXBlLCBhbmQgc3RvcCBjaGVja2luZworCitJZiBldmVyeSBmdW5jdGlvbiBpbiB0aGUgbGlzdCBpcyBjYWxsZWQgd2l0aCBubyBkZXRlcm1pbmF0aW9uIG1hZGUsCit0aGVuIG5vIHByb3RvdHlwZSBpcyBpbnNlcnRlZC4KKworVGhlIHRlc3QgaXMgcGVyZm9ybWVkIGJ5IHRoZSBmdW5jdGlvbiBgZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdCcuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtYXJyb3ctY3JpdGVyaWEKKyAgJyhlcmxhbmctbmV4dC1saW5lcy1lbXB0eS1wCisgICAgZXJsYW5nLWF0LWVuZC1vZi1mdW5jdGlvbi1wKQorICAiKkxpc3Qgb2YgZnVuY3Rpb25zIGNvbnRyb2xsaW5nIHRoZSBhcnJvdyBhc3BlY3Qgb2YgYGVybGFuZy1lbGVjdHJpYy1ndCcuCitUaGUgZnVuY3Rpb25zIGluIHRoaXMgbGlzdCBhcmUgY2FsbGVkLCBpbiBvcmRlciwgd2hlbmV2ZXIgYSBgPicKK2lzIHR5cGVkLiAgRWFjaCBmdW5jdGlvbiBpbiB0aGUgbGlzdCBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsCithbmQgc2hvdWxkIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgbmlsICAgICAgICAgICAgIC0tIG5vIGRldGVybWluYXRpb24gbWFkZSwgY29udGludWUgY2hlY2tpbmcKKyAgJ3N0b3AgICAgICAgICAgIC0tIGRvIG5vdCBjcmVhdGUgcHJvdG90eXBlIGZvciBuZXh0IGxpbmUKKyAgKGFueXRoaW5nIGVsc2UpIC0tIGluc2VydCBwcm90b3R5cGUsIGFuZCBzdG9wIGNoZWNraW5nCisKK0lmIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBsaXN0IGlzIGNhbGxlZCB3aXRoIG5vIGRldGVybWluYXRpb24gbWFkZSwKK3RoZW4gbm8gcHJvdG90eXBlIGlzIGluc2VydGVkLgorCitUaGUgdGVzdCBpcyBwZXJmb3JtZWQgYnkgdGhlIGZ1bmN0aW9uIGBlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0Jy4iKQorCisoZGVmdmFyIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWNyaXRlcmlhCisgICcodCkKKyAgIipMaXN0IG9mIGZ1bmN0aW9ucyBjb250cm9sbGluZyBgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUnLgorCitUaGUgZWxlY3RyaWMgbmV3bGluZSBjb21tYW5kcyBpbmRlbnRzIHRoZSBuZXh0IGxpbmUuICBTaG91bGQgdGhlCitjdXJyZW50IGxpbmUgYmVnaW4gd2l0aCBhIGNvbW1lbnQgdGhlIGNvbW1lbnQgc3RhcnQgaXMgY29waWVkIHRvCit0aGUgbmV3bHkgY3JlYXRlZCBsaW5lLgorCitUaGUgZnVuY3Rpb25zIGluIHRoaXMgbGlzdCBhcmUgY2FsbGVkLCBpbiBvcmRlciwgd2hlbmV2ZXIgYSBjb21tYQoraXMgdHlwZWQuICBFYWNoIGZ1bmN0aW9uIGluIHRoZSBsaXN0IGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywKK2FuZCBzaG91bGQgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICBuaWwgICAgICAgICAgICAgLS0gbm8gZGV0ZXJtaW5hdGlvbiBtYWRlLCBjb250aW51ZSBjaGVja2luZworICAnc3RvcCAgICAgICAgICAgLS0gZG8gbm90IGNyZWF0ZSBwcm90b3R5cGUgZm9yIG5leHQgbGluZQorICAoYW55dGhpbmcgZWxzZSkgLS0gdHJpZ2dlciB0aGUgZWxlY3RyaWMgY29tbWFuZC4KKworSWYgZXZlcnkgZnVuY3Rpb24gaW4gdGhlIGxpc3QgaXMgY2FsbGVkIHdpdGggbm8gZGV0ZXJtaW5hdGlvbiBtYWRlLAordGhlbiBubyBwcm90b3R5cGUgaXMgaW5zZXJ0ZWQuICBTaG91bGQgdGhlIGF0b20gdCBiZSBhIG1lbWJlciBvZiB0aGUKK2xpc3QsIGl0IGlzIHRyZWF0ZWQgYXMgYSBmdW5jdGlvbiB0cmlnZ2VyaW5nIHRoZSBlbGVjdHJpYyBjb21tYW5kLgorCitUaGUgdGVzdCBpcyBwZXJmb3JtZWQgYnkgdGhlIGZ1bmN0aW9uIGBlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0Jy4iKQorCisoZGVmdmFyIGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXRocmVzaG9sZCAyCisgICIqTnVtYmVyIG9mIGJsYW5rIGxpbmVzIHJlcXVpcmVkIHRvIGFjdGl2YXRlIGFuIGVsZWN0cmljIGNvbW1hbmQuCisKK0FjdHVhbGx5LCB0aGlzIHZhbHVlIGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGZ1bmN0aW9uCitgZXJsYW5nLW5leHQtbGluZXMtZW1wdHktcCcgd2hpY2ggbm9ybWFsbHkgaXMgYSBtZW1iZXIgb2YgdGhlCitjcml0ZXJpYSBsaXN0cyBjb250cm9sbGluZyB0aGUgZWxlY3RyaWMgY29tbWFuZHMuICAoUGxlYXNlIHNlZQordGhlIHZhcmlhYmxlcyBgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbi1jcml0ZXJpYScgYW5kCitgZXJsYW5nLWVsZWN0cmljLWNvbW1hLWNyaXRlcmlhJy4pCisKK1RoZSB2YXJpYWJsZSBpcyBib3VuZCB0byBhIHRocmVzaG9sZCB2YWx1ZSwgYSBudW1iZXIsIHJlcHJlc2VudGluZyB0aGUKK251bWJlciBvZiBsaW5lcyB3aGljaCBtdXN0IGJlIGVtcHR5LgorCitTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gemVybywgZWxlY3RyaWMgY29tbWFuZHMgd2lsbCBhbHdheXMgYmUKK3RyaWdnZXJlZCBieSBgZXJsYW5nLW5leHQtbGluZXMtZW1wdHktcCcsIHVubGVzcyBpbmhpYml0ZWQgYnkgb3RoZXIKK3J1bGVzLgorCitTaG91bGQgdGhpcyB2YXJpYWJsZSBiZSBgbmlsJywgYGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAnIHdpbGwgbmV2ZXIKK3RyaWdnZXIgYW4gZWxlY3RyaWMgY29tbWFuZC4gIFRoZSBzYW1lIGVmZmVjdCB3b3VsZCBiZSByZWFjaGVkIGlmIHRoZQorZnVuY3Rpb24gYGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAnIHdvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgY3JpdGVyaWEKK2xpc3RzLgorCitOb3RlIHRoYXQgZXZlbiBpZiBgZXJsYW5nLW5leHQtbGluZXMtZW1wdHktcCcgc2hvdWxkIG5vdCB0cmlnZ2VyIGFuCitlbGVjdHJpYyBjb21tYW5kLCBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGNyaXRlcmlhIGxpc3QgY291bGQuIikKKworKGRlZnZhciBlcmxhbmctbmV3LWNsYXVzZS13aXRoLWFyZ3VtZW50cyBuaWwKKyAgIipOb24tbmlsIG1lYW5zIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgY2xvbmVkIHdoZW4gYSBjbGF1c2UgaXMgZ2VuZXJhdGVkLgorCitBIG5ldyBmdW5jdGlvbiBoZWFkZXIgY2FuIGJlIGdlbmVyYXRlZCBieSBjYWxscyB0byB0aGUgZnVuY3Rpb24KK2BlcmxhbmctZ2VuZXJhdGUtbmV3LWNsYXVzZScgYW5kIGJ5IHVzZSBvZiB0aGUgZWxlY3RyaWMgc2VtaWNvbG9uLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWNvbXBpbGUtdXNlLW91dGRpciB0CisgICIqV2hlbiBuaWwsIGdvIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBzb3VyY2UgZmlsZSB3aGVuIGNvbXBpbGluZy4KKworVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSBgb3V0ZGlyJyBvcHRpb24gb2YgY29tcGlsZS4gIElmIHRoZQorb3V0ZGlyIGlzIG5vdCBpbiB0aGUgY3VycmVudCBsb2FkIHBhdGgsIEVybGFuZyBkb2Vzbid0IGxvYWQgdGhlIG9iamVjdAorbW9kdWxlIGFmdGVyIGl0IGhhcyBiZWVuIGNvbXBpbGVkLgorCitUbyBhY3RpdmF0ZSB0aGUgd29ya2Fyb3VuZCwgcGxhY2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGB+Ly5lbWFjcycgZmlsZToKKyAgICAoc2V0cSBlcmxhbmctY29tcGlsZS11c2Utb3V0ZGlyIG5pbCkiKQorCisoZGVmdmFyIGVybGFuZy1pbmRlbnQtbGV2ZWwgNAorICAiKkluZGVudGF0aW9uIG9mIEVybGFuZyBjYWxscy9jbGF1c2VzIHdpdGhpbiBibG9ja3MuIikKKworKGRlZnZhciBlcmxhbmctaW5kZW50LWd1YXJkIDIKKyAgIipJbmRlbnRhdGlvbiBvZiBFcmxhbmcgZ3VhcmRzLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWFyZ3VtZW50LWluZGVudCAyCisgICIqSW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IGFyZ3VtZW50IGluIGEgZnVuY3Rpb24gY2FsbC4KK1doZW4gbmlsLCBpbmRlbnQgdG8gdGhlIGNvbHVtbiBhZnRlciB0aGUgYCgnIG9mIHRoZQorZnVuY3Rpb24uIikKKworKGRlZnZhciBlcmxhbmctdGFiLWFsd2F5cy1pbmRlbnQgdAorICAiKk5vbi1uaWwgbWVhbnMgVEFCIGluIEVybGFuZyBtb2RlIHNob3VsZCBhbHdheXMgcmVpbmRlbnQgdGhlIGN1cnJlbnQgbGluZSwKK3JlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gdGhlIGxpbmUgcG9pbnQgaXMgd2hlbiB0aGUgVEFCIGNvbW1hbmQgaXMgdXNlZC4iKQorCisoZGVmdmFyIGVybGFuZy1lcnJvci1yZWdleHAtYWxpc3QKKyAgJygoIl5cXChbXjooIFx0XG5dK1xcKVs6KF1bIFx0XSpcXChbMC05XStcXClbOikgXHRdIiAuICgxIDIpKSkKKyAgIipQYXR0ZXJucyBmb3IgbWF0Y2hpbmcgRXJsYW5nIGVycm9ycy4iKQorCisoZGVmdmFyIGVybGFuZy1tYW4taW5oaWJpdCAoZXEgc3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQpCisgICJJbmhpYml0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRXJsYW5nIE1hbnVhbCBQYWdlcyBtZW51LgorCitUaGUgV2luZG93cyBkaXN0cmlidXRpb24gb2YgRXJsYW5nIGRvZXMgbm90IGluY2x1ZGUgbWFuIHBhZ2VzLCBoZW5jZQordGhlcmUgaXMgbm8gaWRlYSB0byBjcmVhdGUgdGhlIG1lbnUuIikKKworKGRlZnZhciBlcmxhbmctbWFuLWRpcnMKKyAgJygoIk1hbiAtIENvbW1hbmRzIiAiL21hbi9tYW4xIiB0KQorICAgICgiTWFuIC0gTW9kdWxlcyIgIi9tYW4vbWFuMyIgdCkKKyAgICAoIk1hbiAtIFVuc3VwcG9ydGVkIiAiL3VjL21hbi9tYW4zIiB0KSkKKyAgIipUaGUgbWFuIGRpcmVjdG9yaWVzIGRpc3BsYXllZCBpbiB0aGUgRXJsYW5nIG1lbnUuCisKK0VhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgYmUgYSBsaXN0IHdpdGggdGhyZWUgZWxlbWVudHMsIHRoZSBmaXJzdAordGhlIG5hbWUgb2YgdGhlIG1lbnUsIHRoZSBzZWNvbmQgdGhlIGRpcmVjdG9yeSwgYW5kIHRoZSBsYXN0IGEgZmxhZy4KK1Nob3VsZCB0aGUgZmxhZyB0aGUgbmlsLCB0aGUgZGlyZWN0b3J5IGlzIGFic29sdXRlLCBzaG91bGQgaXQgYmUgbm9uLW5pbAordGhlIGRpcmVjdG9yeSBpcyByZWxhdGl2ZSB0byB0aGUgdmFyaWFibGUgYGVybGFuZy1yb290LWRpcicuIikKKworKGRlZnZhciBlcmxhbmctbWFuLW1heC1tZW51LXNpemUgMjAKKyAgIipUaGUgbWF4aW11bSBudW1iZXIgb2YgbWVudSBpdGVtcyBpbiBvbmUgbWVudSBhbGxvd2VkLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1hbi1kaXNwbGF5LWZ1bmN0aW9uICdlcmxhbmctbWFuLWRpc3BsYXkKKyAgIipGdW5jdGlvbiB1c2VkIHRvIGRpc3BsYXkgbWFuIHBhZ2UuCisKK1RoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBmaWxlCitjb250YWluaW5nIHRoZSBtYW4gcGFnZS4gIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4gdGhlIGRlZmF1bHQKK2Z1bmN0aW9uLCBlcmxhbmctbWFuLWRpc3BsYXksIGRvZXMgbm90IHdvcmsgb24geW91ciBzeXN0ZW0uIikKKworKGRlZmNvbnN0IGVybGFuZy1hdG9tLXJlZ2V4cCAiXFwoW2Etel1bYS16QS1aMC05X10qXFx8J1teXG4nXSpbXlxcXSdcXCkiCisgICJSZWdleHAgd2hpY2ggc2hvdWxkIG1hdGNoIGFuIEVybGFuZyBhdG9tLgorCitUaGUgcmVnZXhwIG11c3QgYmUgc3Vycm91bmRlZCB3aXRoIGEgcGFpciBvZiByZWdleHAgcGFyZW50aGVzZXMuIikKKyhkZWZjb25zdCBlcmxhbmctYXRvbS1yZWdleHAtbWF0Y2hlcyAxCisgICJOdW1iZXIgb2YgcmVnZXhwIHBhcmVudGhlc2lzIHBhaXJzIGluIGBlcmxhbmctYXRvbS1yZWdleHAnLgorCitUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHBhcmVudGhlc2lzIG1hdGNoZXMgaW4gY29tcGxleCByZWdleHBzIHdoaWNoCitjb250YWlucyBgZXJsYW5nLWF0b20tcmVnZXhwJy4iKQorCisoZGVmY29uc3QgZXJsYW5nLXZhcmlhYmxlLXJlZ2V4cCAiXFwoW0EtWl9dW2EtekEtWjAtOV9dKlxcKSIKKyAgIlJlZ2V4cCB3aGljaCBzaG91bGQgbWF0Y2ggYW4gRXJsYW5nIHZhcmlhYmxlLgorCitUaGUgcmVnZXhwIG11c3QgYmUgc3Vycm91bmRlZCB3aXRoIGEgcGFpciBvZiByZWdleHAgcGFyZW50aGVzaXMuIikKKyhkZWZjb25zdCBlcmxhbmctdmFyaWFibGUtcmVnZXhwLW1hdGNoZXMgMQorICAiTnVtYmVyIG9mIHJlZ2V4cCBwYXJlbnRoZXNpcyBwYWlycyBpbiBgZXJsYW5nLXZhcmlhYmxlLXJlZ2V4cCcuCisKK1RoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgbWF0Y2hlcyBpbiBjb21wbGV4IHJleGVwcyB3aGljaCBjb250YWlucworYGVybGFuZy12YXJpYWJsZS1yZWdleHAnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWRlZnVuLXByb21wdC1yZWdleHAgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKigiKQorICAiKlJlZ2V4cCB3aGljaCBzaG91bGQgbWF0Y2ggYmVnaW5uaW5nIG9mIGEgY2xhdXNlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZpbGUtbmFtZS1leHRlbnNpb24tcmVnZXhwICJcXC5bZWhdcmwkIgorICAiKlJlZ2V4cCB3aGljaCBzaG91bGQgbWF0Y2ggYW4gZXJsYW5nIGZpbGUgbmFtZS4KKworVGhpcyByZWdleHAgaXMgdXNlZCB3aGVuIGFuIEVybGFuZyBtb2R1bGUgbmFtZSBpcyBleHRyYWN0ZWQgZnJvbSB0aGUKK25hbWUgb2YgYW4gRXJsYW5nIHNvdXJjZSBmaWxlLgorCitUaGUgcmVnZXhwIHNob3VsZCBvbmx5IG1hdGNoIHRoZSBzZWN0aW9uIG9mIHRoZSBmaWxlIG5hbWUgd2hpY2ggc2hvdWxkCitiZSBleGNsdWRlZCBmcm9tIHRoZSBtb2R1bGUgbmFtZS4KKworVG8gbWF0Y2ggYWxsIGZpbGVzIHNldCB0aGlzIHZhcmlhYmxlIHRvIFwiXFxcXChcXFxcLi4qXFxcXHxcXFxcKSRcIi4KK1RoZSBtYXRjaGVzIGFsbCBleGNlcHQgdGhlIGV4dGVuc2lvbi4gIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBFcmxhbmcKK3RhZ3Mgc3lzdGVtIHNob3VsZCBpbnRlcnByZXRhdGUgdGFncyBvbiB0aGUgZm9ybSBgbW9kdWxlOnRhZycgZm9yCitmaWxlcyB3cml0dGVuIGluIG90aGVyIGxhbmd1YWdlcyB0aGFuIEVybGFuZy4iKQorCisoZGVmdmFyIGVybGFuZy1tb2RlLW1hcCBuaWwKKyAgIipLZXltYXAgdXNlZCBpbiBFcmxhbmcgbW9kZS4iKQorKGRlZnZhciBlcmxhbmctbW9kZS1hYmJyZXYtdGFibGUgbmlsCisgICJBYmJyZXYgdGFibGUgaW4gdXNlIGluIEVybGFuZy1tb2RlIGJ1ZmZlcnMuIikKKyhkZWZ2YXIgZXJsYW5nLW1vZGUtc3ludGF4LXRhYmxlIG5pbAorICAiU3ludGF4IHRhYmxlIGluIHVzZSBpbiBFcmxhbmctbW9kZSBidWZmZXJzLiIpCisKKyhkZWZjb25zdCBlcmxhbmctZW1hY3MtbWFqb3ItdmVyc2lvbgorICAoaWYgKGJvdW5kcCAnZW1hY3MtbWFqb3ItdmVyc2lvbikKKyAgICAgIGVtYWNzLW1ham9yLXZlcnNpb24KKyAgICAoc3RyaW5nLW1hdGNoICJcXChbMC05XStcXClcXC5cXChbMC05XStcXCkiIGVtYWNzLXZlcnNpb24pCisgICAgKHN0cmluZy10by1pbnQgKHN1YnN0cmluZyBlbWFjcy12ZXJzaW9uCisJCQkgICAgICAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpKSkKKyAgIk1ham9yIHZlcnNpb24gbnVtYmVyIG9mIEVtYWNzLiIpCisKKyhkZWZjb25zdCBlcmxhbmctZW1hY3MtbWlub3ItdmVyc2lvbgorICAoaWYgKGJvdW5kcCAnZW1hY3MtbWlub3ItdmVyc2lvbikKKyAgICAgIGVtYWNzLW1pbm9yLXZlcnNpb24KKyAgICAoc3RyaW5nLW1hdGNoICJcXChbMC05XStcXClcXC5cXChbMC05XStcXCkiIGVtYWNzLXZlcnNpb24pCisgICAgKHN0cmluZy10by1pbnQgKHN1YnN0cmluZyBlbWFjcy12ZXJzaW9uCisJCQkgICAgICAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRjaC1lbmQgMikpKSkKKyAgIk1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIEVtYWNzLiIpCisKKyhkZWZjb25zdCBlcmxhbmcteGVtYWNzLXAgKHN0cmluZy1tYXRjaCAiTHVjaWRcXHxYRW1hY3MiIGVtYWNzLXZlcnNpb24pCisgICJOb24tbmlsIHdoZW4gcnVubmluZyB1bmRlciBYRW1hY3Mgb3IgTHVjaWQgRW1hY3MuIikKKworKGRlZnZhciBlcmxhbmcteGVtYWNzLXBvcHVwLW1lbnUgJygiRXJsYW5nIE1vZGUgQ29tbWFuZHMiIC4gbmlsKQorICAiQ29tbW9uIHBvcHVwIG1lbnUgZm9yIGFsbCBidWZmZXJzIGluIEVybGFuZyBtb2RlLgorCitUaGlzIHZhcmlhYmxlIGlzIGRlc3RydWN0aXZlbHkgbW9kaWZpZWQgZXZlcnkgdGltZSB0aGUgRXJsYW5nIG1lbnUKK2lzIG1vZGlmaWVkLiAgVGhlIGVmZmVjdCBpcyB0aGF0IGFsbCBjaGFuZ2VzIHRha2UgZWZmZWt0IGluIGFsbAorYnVmZmVycyBpbiBFcmxhbmcgbW9kZSwganVzdCBsaWtlIHVuZGVyIEdOVSBFbWFjcy4KKworTmV2ZXIgRVZFUiBzZXQgdGhpcyB2YXJpYWJsZSEiKQorCisMCis7OyBUZW1wbyBza2VsZXRvbiB0ZW1wbGF0ZXM6CisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwKKyAgJygoIklmIiAgICAgICAgICAgICJpZiIgICAgICAgICAgICBlcmxhbmctc2tlbC1pZikKKyAgICAoIkNhc2UiICAgICAgICAgICJjYXNlIiAgICAgICAgICBlcmxhbmctc2tlbC1jYXNlKQorICAgICgiUmVjZWl2ZSIgICAgICAgInJlY2VpdmUiICAgICAgIGVybGFuZy1za2VsLXJlY2VpdmUpCisgICAgKCJSZWNlaXZlIEFmdGVyIiAiYWZ0ZXIiICAgICAgICAgZXJsYW5nLXNrZWwtcmVjZWl2ZS1hZnRlcikKKyAgICAoIlJlY2VpdmUgTG9vcCIgICJsb29wIiAgICAgICAgICBlcmxhbmctc2tlbC1yZWNlaXZlLWxvb3ApCisgICAgKCJNb2R1bGUiICAgICAgICAibW9kdWxlIiAgICAgICAgZXJsYW5nLXNrZWwtbW9kdWxlKQorICAgICgiQXV0aG9yIiAgICAgICAgImF1dGhvciIgICAgICAgIGVybGFuZy1za2VsLWF1dGhvcikKKyAgICAoKQorICAgICgiU21hbGwgSGVhZGVyIiAgInNtYWxsLWhlYWRlciIKKyAgICAgZXJsYW5nLXNrZWwtc21hbGwtaGVhZGVyIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIk5vcm1hbCBIZWFkZXIiICJub3JtYWwtaGVhZGVyIgorICAgICBlcmxhbmctc2tlbC1ub3JtYWwtaGVhZGVyIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIkxhcmdlIEhlYWRlciIgICJsYXJnZS1oZWFkZXIiCisgICAgIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlciBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCkKKyAgICAoIlNtYWxsIFNlcnZlciIgICAic21hbGwtc2VydmVyIgorICAgICBlcmxhbmctc2tlbC1zbWFsbC1zZXJ2ZXIgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgpCisgICAgKCJBcHBsaWNhdGlvbiIgImFwcGxpY2F0aW9uIgorICAgICBlcmxhbmctc2tlbC1hcHBsaWNhdGlvbiBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJHZW5lcmFsIFRjcCBSZWNlaXZlIiAiZnNfZ2VuX3RjcF9yZWN2IgorICAgICBlcmxhbmctc2tlbC1mcy1nZW4tdGNwLXJlY3YgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiVGVzdCBTdWl0ZSIgInRlc3Qtc3VpdGUiCisgICAgIGVybGFuZy1za2VsLXRlc3Qtc3VpdGUgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiVGNwIEdhdGV3YXkiICJmc190Y3BfZ2F0ZXdheSIKKyAgICAgZXJsYW5nLXNrZWwtZnMtdGNwLWdhdGV3YXkgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiRWRvYyBmdW5jdGlvbiIgImZzX2Vkb2NfaGVhZGVyIgorICAgICBlcmxhbmctc2tlbC1mcy1lZG9jLWhlYWRlciBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJEQiBJbml0aWFsaXplIiAiZnNfZGJfaW5pdCIKKyAgICAgZXJsYW5nLXNrZWwtZnMtZGItaW5pdCBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJnZW5fbGVhZGVyIiAiZ2VuZXJpYy1sZWFkZXIiCisgICAgIGVybGFuZy1za2VsLWdlbmVyaWMtbGVhZGVyIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIlN1cGVydmlzb3IiICJzdXBlcnZpc29yIgorICAgICBlcmxhbmctc2tlbC1zdXBlcnZpc29yIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoInN1cGVydmlzb3JfYnJpZGdlIiAic3VwZXJ2aXNvci1icmlkZ2UiCisgICAgIGVybGFuZy1za2VsLXN1cGVydmlzb3ItYnJpZGdlIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoImdlbl9zZXJ2ZXIiICJnZW5lcmljLXNlcnZlciIKKyAgICAgZXJsYW5nLXNrZWwtZ2VuZXJpYy1zZXJ2ZXIgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiZ2VuX2V2ZW50IiAiZ2VuLWV2ZW50IgorICAgICBlcmxhbmctc2tlbC1nZW4tZXZlbnQgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiZ2VuX2ZzbSIgImdlbi1mc20iCisgICAgIGVybGFuZy1za2VsLWdlbi1mc20gZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiTGlicmFyeSBtb2R1bGUiICJnZW4tbGliIgorICAgICBlcmxhbmctc2tlbC1saWIgZXJsYW5nLXNrZWwtaGVhZGVyKQorCSgiQ29yYmEgY2FsbGJhY2siICJnZW4tY29yYmEtY2IiCisgICAgIGVybGFuZy1za2VsLWNvcmJhLWNhbGxiYWNrIGVybGFuZy1za2VsLWhlYWRlcikpCisgICIqRGVzY3JpcHRpb24gb2YgYWxsIHNrZWxldG9ucyB0ZW1wbGF0ZXMuCitCb3RoIGZ1bmN0aW9ucyBhbmQgbWVudSBlbnRyaWVzIHdpbGwgYmUgY3JlYXRlZC4KKworRWFjaCBlbnRyeSBpbiBgZXJsYW5nLXNrZWwnIHNob3VsZCBiZSBhIGxpc3Qgd2l0aCB0aHJlZSBvciBmb3VyCitlbGVtZW50cywgb3IgdGhlIGVtcHR5IGxpc3QuCisKK1RoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBuYW1lIHdoaWNoIHNob3dzIHVwIGluIHRoZSBtZW51LiAgVGhlIHNlY29uZAoraXMgdGhlIGB0ZW1wbycgaWRlbnRmaWVyIChUaGUgc3RyaW5nIFwiZXJsYW5nLVwiIHdpbGwgYmUgYWRkZWQgaW4KK2Zyb250IG9mIGl0KS4gIFRoZSB0aGlyZCBpcyB0aGUgc2tlbGV0b24gZGVzY3JpcHRvciwgYSB2YXJpYWJsZQorY29udGFpbmluZyBgdGVtcG8nIGF0dHJpYnV0ZXMgYXMgZGVzY3JpYmVkIGluIHRoZSBmdW5jdGlvbgorYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuICBUaGUgb3B0aW9uYWwgZm91cnRoIGVsZW1lbnRzIGRlbm90ZXMgYQorZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBtZW51IGlzIHNlbGVjdGVkLgorCitGdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byBldmVyeSB0ZW1wbGF0ZSB3aWxsIGJlIGNyZWF0ZWQuICBUaGUgbmFtZQorb2YgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgYHRlbXBvLXRlbXBsYXRlLWVybGFuZy1YJyB3aGVyZSBgWCcgaXMgdGhlCit0ZW1wbyBpZGVudGlmaWVyIGFzIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBlbGVtZW50cworaW4gdGhpcyBsaXN0LgorCitBIGxpc3Qgd2l0aCB6ZXJvIGVsZW1lbnRzIG1lYW5zIHRoYXQgdGhlIGEgaG9yaXNvbnRhbCBsaW5lIHNob3VsZAorYmUgcGxhY2VkIGluIHRoZSBtZW51LiIpCisKKzs7IEluIFhFbWFjcyBgdXNlci1tYWlsLWFkZHJlc3MnIHJldHVybnMgInhAeS56IChGb28gQmFyKSIgQVJHSCEKKzs7IFdoYXQncyB3cm9uZyB3aXRoIHRoYXQ/IFJGQyA4MjIgc2F5cyBpdCdzIGxlZ2FsLiAgIFtzdmVya2Vyd10KKyhkZWZ2YXIgZXJsYW5nLXNrZWwtbWFpbC1hZGRyZXNzCisgIChjb25jYXQgKHVzZXItbG9naW4tbmFtZSkgIkAiCisJICAob3IgKGFuZCAoYm91bmRwICdtYWlsLWhvc3QtYWRkcmVzcykKKwkJICAgKHN5bWJvbC12YWx1ZSAnbWFpbC1ob3N0LWFkZHJlc3MpKQorCSAgICAgIChzeXN0ZW0tbmFtZSkpKQorICAiTWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyLiIpCisKKzs7IEV4cHJlc3Npb24gdGVtcGxhdGVzOgorKGRlZnZhciBlcmxhbmctc2tlbC1jYXNlCisgICcoKGVybGFuZy1za2VsLXNraXAtYmxhbmspIG8gPgorICAgICJjYXNlICIgcCAiIG9mIiBuPiBwICJfIC0+IiBuPiBwICJvayIgbj4gImVuZCIgcCkKKyAgIipUaGUgc2tlbGV0b24gb2YgYSBgY2FzZScgZXhwcmVzc2lvbi4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtaWYKKyAgJygoZXJsYW5nLXNrZWwtc2tpcC1ibGFuaykgbyA+CisgICAgImlmIiAgbj4gcCAiIC0+IiBuPiBwICJvayIgbj4gImVuZCIgcCkKKyAgIlRoZSBza2VsZXRvbiBvZiBhbiBgaWYnIGV4cHJlc3Npb24uCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLXJlY2VpdmUKKyAgJygoZXJsYW5nLXNrZWwtc2tpcC1ibGFuaykgbyA+CisgICAgInJlY2VpdmUiIG4+IHAgIl8gLT4iIG4+IHAgIm9rIiBuPiAiZW5kIiBwKQorICAiKlRoZSBza2VsZXRvbiBvZiBhIGByZWNlaXZlJyBleHByZXNzaW9uLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1yZWNlaXZlLWFmdGVyCisgICcoKGVybGFuZy1za2VsLXNraXAtYmxhbmspIG8gPgorICAgICJyZWNlaXZlIiBuPiBwICJfIC0+IiBuPiBwICJvayIgbj4gImFmdGVyICIgcCAiVCAtPiIgbj4KKyAgICBwICJvayIgbj4gImVuZCIgcCkKKyAgIipUaGUgc2tlbGV0b24gb2YgYSBgcmVjZWl2ZScgZXhwcmVzc2lvbiB3aXRoIGFuIGBhZnRlcicgY2xhdXNlLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1yZWNlaXZlLWxvb3AKKyAgJygmIG8gImxvb3AoIiBwICIpIC0+IiBuPiAicmVjZWl2ZSIgbj4gcCAiXyAtPiIgbj4KKyAgICAgICJsb29wKCIgcCAiKSIgbj4gImVuZC4iKQorICAiKlRoZSBza2VsZXRvbiBvZiBhIHNpbXBsZSBgcmVjaWV2ZScgbG9vcC4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworOzsgQXR0cmlidXRlIHRlbXBsYXRlcworCisoZGVmdmFyIGVybGFuZy1za2VsLW1vZHVsZQorICAnKCYgIi1tb2R1bGUoIgorICAgICAgKGVybGFuZy1hZGQtcXVvdGVzLWlmLW5lZWRlZCAoZXJsYW5nLWdldC1tb2R1bGUtZnJvbS1maWxlLW5hbWUpKQorICAgICAgIikuIiBuKQorICAiKlRoZSBza2VsZXRvbiBvZiBhIGBtb2R1bGUnIGF0dHJpYnV0ZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtYXV0aG9yCisgICcoJiAiLWF1dGhvcignIiBlcmxhbmctc2tlbC1tYWlsLWFkZHJlc3MgIicpLiIgbikKKyAgIipUaGUgc2tlbGV0b24gb2YgYSBgYXV0aG9yJyBhdHRyaWJ1dGUuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLXZjIG5pbAorICAiKlRoZSBza2VsZXRvbiB0ZW1wbGF0ZSB0byBnZW5lcmF0ZSBhIHZlcnNpb24gY29udHJvbCBhdHRyaWJ1dGUuCitUaGUgZGVmYXVsdCBpcyB0byBpbnNlcnQgbm90aGluZy4gIEV4YW1wbGUgb2YgdXNhZ2U6CisKKyAgICAoc2V0cSBlcmxhbmctc2tlbC12YyAnKCYgXCItcmNzKFxcXCIkXElkOiAkIFxcXCIpLlwiKSBuKQorCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWV4cG9ydAorICAnKCYgIi1leHBvcnQoWyIgbj4gIl0pLiIgbikKKyAgIipUaGUgc2tlbGV0b24gb2YgYW4gYGV4cG9ydCcgYXR0cmlidXRlLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1pbXBvcnQKKyAgJygmICIlJS1pbXBvcnQoTW9kdWxlLCBbRnVuY3Rpb24vQXJpdHksIC4uLl0pLiIgbikKKyAgIipUaGUgc2tlbGV0b24gb2YgYW4gYGltcG9ydCcgYXR0cmlidXRlLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1jb21waWxlIG5pbAorOzsgICcoJiAiJSUtY29tcGlsZShleHBvcnRfYWxsKS4iIG4pCisgICIqVGhlIHNrZWxldG9uIG9mIGEgYGNvbXBpbGUnIGF0dHJpYnV0ZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworOzsgQ29tbWVudCB0ZW1wbGF0ZXMuCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZGF0ZS1mdW5jdGlvbiAnZXJsYW5nLXNrZWwtZGQtbW1tLXl5eXkKKyAgIipGdW5jdGlvbiB3aGljaCByZXR1cm5zIGRhdGUgc3RyaW5nLgorTG9vayBpbiB0aGUgbW9kdWxlIGB0aW1lLXN0YW1wJyBmb3IgYSBiYXR0ZXJ5IG9mIGZ1bmN0aW9ucy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWNvcHlyaWdodC1jb21tZW50ICcoKQorICAiKlRoZSB0ZW1wbGF0ZSBmb3IgYSBjb3B5cmlnaHQgbGluZSBpbiB0aGUgaGVhZGVyLCBub3JtYWxseSBlbXB0eS4KK1RoaXMgdmFyaWFibGUgc2hvdWxkIGJlIGJvdW5kIHRvIGEgYHRlbXBvJyB0ZW1wbGF0ZSwgZm9yIGV4YW1wbGU6CisgICcoJiBcIiUlJSBDb3B5cmlnaHQgKEMpIDIwMDAsIFlveW9keW5lLCBJbmMuXCIgbikKKworUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1jcmVhdGVkLWNvbW1lbnQKKyAgJygmICIlJSUgQ3JlYXRlZCA6ICIgKGZ1bmNhbGwgZXJsYW5nLXNrZWwtZGF0ZS1mdW5jdGlvbikgIiBieSAiCisgICAgICAodXNlci1mdWxsLW5hbWUpICIgPCIgZXJsYW5nLXNrZWwtbWFpbC1hZGRyZXNzICI+IiBuKQorICAiKlRoZSB0ZW1wbGF0ZSBmb3IgdGhlIFwiQ3JlYXRlZDpcIiBjb21tZW50IGxpbmUuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1hdXRob3ItY29tbWVudAorICAnKCYgIiUlJSBBdXRob3IgIDogIiAodXNlci1mdWxsLW5hbWUpICIgPCIgZXJsYW5nLXNrZWwtbWFpbC1hZGRyZXNzICI+IiBuKQorICAiKlRoZSB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgdGhlIFwiQXV0aG9yOlwiIGxpbmUgaW4gdGhlIGhlYWRlci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZmlsZS1jb21tZW50CisgICcoJiAiJSUlIEZpbGUgICAgOiAiIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGJ1ZmZlci1maWxlLW5hbWUpIG4pCisgICIqVGhlIHRlbXBsYXRlIGZvciBjcmVhdGluZyB0aGUgXCJNb2R1bGU6XCIgbGluZSBpbiB0aGUgaGVhZGVyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1zbWFsbC1oZWFkZXIKKyAgJyhvIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLW1vZHVsZSkKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJsYW5nLXNrZWwtYXV0aG9yKQorICAgICAgbgorICAgICAgKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtY29tcGlsZQorOzsJCQkgICBlcmxhbmctc2tlbC1leHBvcnQKKwkJCSAgIGVybGFuZy1za2VsLXZjKSkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBzbWFsbCBoZWFkZXIgd2l0aG91dCBhbnkgY29tbWVudHMuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLW5vcm1hbC1oZWFkZXIKKyAgJyhvIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWNvcHlyaWdodC1jb21tZW50CisJCQkgICBlcmxhbmctc2tlbC1maWxlLWNvbW1lbnQKKwkJCSAgIGVybGFuZy1za2VsLWF1dGhvci1jb21tZW50KQorICAgICAgIiUlJSBEZXNjcmlwdGlvbiA6ICIgcCBuCisgICAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1jcmVhdGVkLWNvbW1lbnQpIG4KKyAgICAgIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLXNtYWxsLWhlYWRlcikgbikKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBub3JtYWwgaGVhZGVyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIKKyAgJyhvICIlJSUgJElkOiBlcmxhbmcuZWwsdiAxLjIxIDIwMDQvMDgvMDMgMjA6Mzg6NDMgbWxvZ2FuIEV4cCAkIiBuIChlcmxhbmctc2tlbC1zZXBhcmF0b3IpCisgICAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1jb3B5cmlnaHQtY29tbWVudAorCQkJICAgZXJsYW5nLXNrZWwtZmlsZS1jb21tZW50CisJCQkgICBlcmxhbmctc2tlbC1hdXRob3ItY29tbWVudCkKKwkgICIlJSUiIG4KKyAgICAgICIlJSUgQGRvYyAgIiBwIG4gCisJICAiJSUlIEBlbmQiIG4KKwkgICIlJSUiIG4KKyAgICAgIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWNyZWF0ZWQtY29tbWVudCkKKyAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IpIAorICAgICAgKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtc21hbGwtaGVhZGVyKSApCisgICIqVGhlIHRlbXBsYXRlIG9mIGEgbGFyZ2UgaGVhZGVyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworCis7OyBTZXJ2ZXIgdGVtcGxhdGVzLgorCisoZGVmdmFyIGVybGFuZy1za2VsLXNtYWxsLXNlcnZlcgorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbc3RhcnRfbGluay8wXSkuIiBuIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFtpbml0LzFdKS4iIG4gbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIE1hY3JvcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKwluCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFRoZSBzdGFydGluZyBwb2ludC4iIG4KKyAgICAiJSUgQHNwZWMgc3RhcnRfbGluaygpIC0+IHtvaywgUGlkfSIgbgorICAgICIlJSBAZW5kIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJzdGFydF9saW5rKCkgLT4iIG4+CisgICAgInByb2NfbGliOnN0YXJ0X2xpbmsoP01PRFVMRSwgaW5pdCwgW3NlbGYoKV0pLiIgbiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgU2VydmVyIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBEZXNjcmlwdGlvbjogSW5pdGlhbGl6ZXMgdGhpcyBzZXJ2ZXIuIiBuCisgICAgIiUlIFZhcmlhYmxlczoiIG4KKyAgICAiJSUgIEZyb20gLSBUaGUgcGlkIG9mIHRoZSBwYXJlbnQgcHJvY2Vzcy4iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoRnJvbSkgLT4iIG4+CisgICAgInJlZ2lzdGVyKD9TRVJWRVIsIHNlbGYoKSksIiBuPgorICAgICJwcm9jX2xpYjppbml0X2FjayhGcm9tLCB7b2ssIHNlbGYoKX0pLCIgbj4KKyAgICAibG9vcChGcm9tKS4iIG4gbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgImxvb3AoRnJvbSkgLT4iIG4+CisgICAgInJlY2VpdmUiIG4+CisgICAgcCAiXyAtPiIgbj4KKyAgICAibG9vcChGcm9tKSIgbj4KKyAgICAiZW5kLiIKKyAgICApCisgICIqVGVtcGxhdGUgb2YgYSBzbWFsbCBzZXJ2ZXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCis7OyBCZWhhdmlvdXIgdGVtcGxhdGVzLgorCisoZGVmdmFyIGVybGFuZy1za2VsLWFwcGxpY2F0aW9uCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICItYmVoYXZpb3VyKGFwcGxpY2F0aW9uKS4iIG4KKyAJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+IAorICAgIAkic3RhcnQvMiwiIG4+CisJInNodXRkb3duLzAsIiBuPgorCSJzdG9wLzEiIG4+CisJIl0pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIE1hY3JvcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFRoZSBzdGFydGluZyBwb2ludCBmb3IgYW4gZXJsYW5nIGFwcGxpY2F0aW9uLiIgbgorICAgICIlJSBAc3BlYyBzdGFydChUeXBlLCBTdGFydEFyZ3MpIC0+IHtvaywgUGlkfSB8IHtvaywgUGlkLCBTdGF0ZX0gfCB7ZXJyb3IsIFJlYXNvbn0iIG4KKyAgICAiJSUgQGVuZCIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhcnQoVHlwZSwgU3RhcnRBcmdzKSAtPiIgbj4KKyAgICAiY2FzZSAiKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lKSJfc3VwOnN0YXJ0X2xpbmsoU3RhcnRBcmdzKSBvZiIgbj4KKyAgICAie29rLCBQaWR9IC0+ICIgbj4KKyAgICAie29rLCBQaWR9OyIgbj4KKyAgICAiRXJyb3IgLT4iIG4+CisgICAgIkVycm9yIiBuPgorICAgICJlbmQuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBDYWxsZWQgdG8gc2h1ZG93biB0aGUgIihlcmxhbmctZ2V0LW1vZHVsZS1mcm9tLWZpbGUtbmFtZSkiIGFwcGxpY2F0aW9uLiIgbgorICAgICIlJSBAc3BlYyBzaHV0ZG93bigpIC0+IG9rICJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic2h1dGRvd24oKSAtPiIgbj4KKyAgICAiYXBwbGljYXRpb246c3RvcCgiKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lKSIpLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIENhbGxlZCB1cG9uIHRoZSB0ZXJtaW50aW9uIG9mIGFuIGFwcGxpY2F0aW9uLiIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RvcChTdGF0ZSkgLT4iIG4+CisgICAgIm9rLiIgbgorICAgIG4KKyAgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGFuIGFwcGxpY2F0aW9uIGJlaGF2aW91ci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKzs7IE1hcnRpbnMgd29yaworCis7OyB0ZXN0IHNlcnZlciB0ZXN0IHN1aXRlIHRlbXBsYXRlCisoZGVmdmFyIGVybGFuZy1za2VsLXRlc3Qtc3VpdGUKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1jb3B5cmlnaHQtY29tbWVudAorCQkJICAgZXJsYW5nLXNrZWwtZmlsZS1jb21tZW50CisJCQkgICBlcmxhbmctc2tlbC1hdXRob3ItY29tbWVudCkKKyAgICAiJSUlIiBuCisgICAgIiUlJSBAZG9jICAiIHAgbiAKKyAgICAiJSUlIDxwPkEgdGVzdCBzcGVjIGNvbnNpc3RzIG9mIHRoZSB0ZXN0IHNlcnZlciByZXF1aXJlZCBmdW5jdGlvbnMgYXMgZGV0YWlsZWQiIG4KKyAgICAiJSUlIGJ5IHRoZSBjb21tZW50cyBmb3IgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGZ1cnRoZXIgZG93biBpbiB0aGlzIiBuCisgICAgIiUlJSBmaWxlLiBUaGUgcmVzdCBvZiBhIHRlc3Qgc3VpdGUgY29uc2lzdHMgb2YgdXNlciBkZWZpbmVkIENhc2UgZnVuY3Rpb25zIiBuCisgICAgIiUlJSBhcyByZWZlcmVuY2VkIGJ5IHRoZSBzdWl0ZSBjbGF1c2Ugb2YgdGhlIGFsbC8xIGZ1bmN0aW9uIGFuZCAibgorICAgICIlJSUgZGVzY3JpYmVkIGJlbG93LjwvcD4ibgorICAgICIlJSUibgorICAgICIlJSUgPHN0cm9uZz4iCisgICAgIiUlJSBDYXNlKGRvYykgICAgLT4gW0RlY3JpcHRpb25dIiBuCisgICAgIiUlJSBDYXNlKHN1aXRlKSAgLT4gW10gfCBUZXN0U3BlYyB8IHtza2lwLCBDb21tZW50fSIgbgorICAgICIlJSUgQ2FzZShDb25maWcpIC0+IHtza2lwLCBDb21tZW50fSB8IHtjb21tZW50LCBDb21tZW50fSB8IE9rIiBuCisgICAgIiUlJSA8L3N0cm9uZz48cHJlPiJuCisgICAgIiUlJSJuCisgICAgIiUlJSBWYXJpYWJsZXM6IiBuCisgICAgIiUlJSAgRGVzY3JpcHRpb24gLSBTaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCBjYXNlIFRlc3RTcGVjIiBuCisgICAgIiUlJSAgQ29tbWVudCAtIFRoaXMgY29tbWVudCB3aWxsIGJlIHByaW50ZWQgb24gdGhlIEhUTUwgcmVzdWx0IHBhZ2UgIiBuCisgICAgIiUlJSJuCisgICAgIiUlJSBUeXBlczoiIG4KKyAgICAiJSUlICBEZXNjcmlwdGlvbiA9IHN0cmluZygpIiBuCisgICAgIiUlJSAgVGVzdFNwZWMgPSBsaXN0KCkiIG4KKyAgICAiJSUlICBPayA9IHRlcm0oKSIgbgorICAgICIlJSUgIENvbW1lbnQgPSBzdHJpbmcoKSIgbgorICAgICIlJSUgIENvbmZpZyA9IHRlcm0oKSIgbgorICAgICIlJSUgPC9wcmU+IiBuCisgICAgIiUlJSA8cD5UaGUgZG9jdW1lbnRhdGlvbiBjbGF1c2UgKGFyZ3VtZW50IGRvYykgY2FuIGJlIHVzZWQgZm9yIiBuCisgICAgIiUlJSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiB0ZXN0IGRvY3VtZW50YXRpb24gb3IgdGVzdCBkZXNjcmlwdGlvbnMuPC9wPiIgbgorICAgICIlJSUibgorICAgICIlJSUgPHA+VGhlIHNwZWNpZmljYXRpb24gY2xhdXNlIChhcmd1bWVudCBzcGVjKSBzaGFsbCByZXR1cm4gYW4gZW1wdHkiIG4gCisgICAgIiUlJSBsaXN0LCB0aGUgdGVzdCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgdGVzdCBjYXNlIG9yIHtza2lwLENvbW1lbnR9LiIgbgorICAgICIlJSUgVGhlIHN5bnRheCBvZiBhIHRlc3Qgc3BlY2lmaWNhdGlvbiBpcyBkZXNjcmliZWQgaW4gdGhlIHJlZmVyZW5jZSAiIG4KKyAgICAiJSUlIG1hbnVhbCBmb3IgdGhlIFRlc3QgU2VydmVyIGFwcGxpY2F0aW9uLjwvcD4iIG4KKyAgICAiJSUlIm4KKyAgICAiJSUlIDxwPk5vdGUgdGhhdCB0aGUgc3BlY2lmaWNhdGlvbiBjbGF1c2UgYWx3YXlzIGlzIGV4ZWN1dGVkIG9uICJuCisgICAgIiUlJSB0aGUgY29udHJvbGxlciBob3N0LjwvcD4ibgorICAgICIlJSUibgorICAgICIlJSUgPHA+VGhlIGV4ZWN1dGlvbiBjbGF1c2UgKGFyZ3VtZW50IENvbmZpZykgaXMgb25seSBjYWxsZWQgaWYgIm4KKyAgICAiJSUlIHRoZSBzcGVjaWZpY2F0aW9uIGNsYXVzZSByZXR1cm5zIGFuIGVtcHR5IGxpc3QuIFRoZSBleGVjdXRpb24gIm4KKyAgICAiJSUlIGNsYXVzZSBpcyB0aGUgcmVhbCB0ZXN0IGNhc2UuIEhlcmUgeW91IG11c3QgY2FsbCB0aGUgZnVuY3Rpb25zICJuCisgICAgIiUlJSB5b3Ugd2FudCB0byB0ZXN0LCBhbmQgZG8gd2hhdGV2ZXIgeW91IG5lZWQgdG8gY2hlY2sgdGhlIHJlc3VsdC4gIm4KKyAgICAiJSUlIElmIHNvbWV0aW5nIGZhaWxzLCBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgY3Jhc2hlcyBvciBjYWxsICJuCisgICAgIiUlJSB0ZXN0X3NlcnZlcjpmYWlsLzAvMSAod2hpY2ggYWxzbyB3aWxsIGNhdXNlIHRoZSBwcm9jZXNzIHRvIGNyYXNoKS48L3A+Im4KKyAgICAiJSUlIm4KKyAgICAiJSUlIDxwPllvdSBjYW4gcmV0dXJuIHtza2lwLENvbW1lbnR9IGlmIHlvdSBkZWNpZGUgbm90IHRvIHJ1biB0aGUgIm4KKyAgICAiJSUlIHRlc3QgY2FzZSBhZnRlciBhbGwsIGUuZy4gaWYgaXQgaXMgbm90IGFwcGxpY2FibGUgb24gdGhpcyBwbGF0Zm9ybS48L3A+Im4KKyAgICAiJSUlIm4KKyAgICAiJSUlIDxwPllvdSBjYW4gcmV0dXJuIHtjb21tZW50LENvbW1lbnR9IGlmIHlvdSB3aXNoIHRvIHByaW50IHNvbWUgIm4KKyAgICAiJSUlIGluZm9ybWF0aW9uIGluIHRoZSAnQ29tbWVudCcgZmllbGQgb24gdGhlIEhUTUwgcmVzdWx0IHBhZ2UuPC9wPiJuCisgICAgIiUlJSJuCisgICAgIiUlJSA8cD5JZiB0aGUgZXhlY3V0aW9uIGNsYXVzZSByZXR1cm5zIGFueXRoaW5nIGVsc2UsIGl0IGlzIGNvbnNpZGVyZWQgIm4KKyAgICAiJSUlIGEgc3VjY2Vzcy4gPC9wPiJuCisgICAgIiUlJSBAZW5kIiBuCisgICAgIiUlJSIgbgorICAgIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWNyZWF0ZWQtY29tbWVudCkKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yKSAKKyAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1zbWFsbC1oZWFkZXIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbmNsdWRlIGZpbGVzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNybyBEZWZpbml0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgVGVzdCBTdWl0ZSBFeHBvcnRzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIm4+ImFsbC8xLCJuPiJpbml0X3Blcl90ZXN0Y2FzZS8yLCJuPiJmaW5fcGVyX3Rlc3RjYXNlLzIibj4iXSkuIiBuIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIEV4cG9ydHMgLSB0ZXN0IGNhc2VzIG11c3QgYmUgZXhwb3J0ZWQuIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIm4+Il0pLiJuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIFRlc3QgU2VydmVyIEZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRlc3Qgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIHRlc3Qgc3VpdGUgbW9kdWxlLiJuCisgICAgIiUlIDxwcmU+Im4KKyAgICAiJSUgVHlwZXM6Im4KKyAgICAiJSUgIFRlc3RTcGVjID0gbGlzdCgpIm4KKyAgICAiJSUgIENvbW1lbnQgPSBzdHJpbmcoKSJuCisgICAgIiUlIm4KKyAgICAiJSUgPC9wcmU+Im4KKyAgICAiJSUgQHNwZWMgYWxsKHN1aXRlKSAtPiBUZXN0U3BlYyB8IHtza2lwLCBDb21tZW50fSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiYWxsKGRvYykgICAtPiBbXTsibiAKKyAgICAiYWxsKHN1aXRlKSAtPiBbXS4ibiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgZWFjaCB0ZXN0IGNhc2UuIm4KKyAgICAiJSUgPHByZT4ibgorICAgICIlJSBUeXBlczoibgorICAgICIlJSAgQ2FzZSA9IGF0b20oKSJuCisgICAgIiUlICBDb25maWcgPSBOZXdDb25maWcgPSB0ZXJtKCkibgorICAgICIlJSJuCisgICAgIiUlIDwvcHJlPiJuCisgICAgIiUlIEBzcGVjIGluaXRfcGVyX3Rlc3RjYXNlKENhc2UsIENvbmZpZykgLT4gTmV3Q29uZmlnIm4KKyAgICAiJSUgQGVuZCJuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0X3Blcl90ZXN0Y2FzZShDYXNlLCBDb25maWcpIC0+IFtdLiJuIG4gCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBlYWNoIHRlc3QgY2FzZS4ibgorICAgICIlJSA8cHJlPiJuCisgICAgIiUlIFR5cGVzOiJuCisgICAgIiUlICBDYXNlID0gYXRvbSgpIm4KKyAgICAiJSUgIENvbmZpZyA9IHRlcm0oKSJuCisgICAgIiUlIm4KKyAgICAiJSUgPC9wcmU+Im4KKyAgICAiJSUgQHNwZWMgZmluX3Blcl90ZXN0Y2FzZShDYXNlLCBDb25maWcpIC0+IHZvaWQoKSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiZmluX3Blcl90ZXN0Y2FzZShDYXNlLCBDb25maWcpIC0+IG9rLiJuIG4gCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEluZGl2aWR1YWwgVGVzdCBDYXNlIEZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyAuIiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIkNhc2UoZG9jKSAgICAgICAgICAgICAgICAgICAgICAtPiBbXTsibgorICAgICJDYXNlKHN1aXRlKSAgICAgICAgICAgICAgICAgICAgLT4gW107Im4KKyAgICAiQ2FzZShDb25maWcpIHdoZW4gbGlzdChDb25maWcpIC0+IG9rLiJuIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgRnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGFuIGFwcGxpY2F0aW9uIGJlaGF2aW91ci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworOzsgZnNfdGNwX2dhdGV3YXkgdGVtcGxhdGUKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZnMtdGNwLWdhdGV3YXkKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgICAgIiUlIFRPRE8gSW1wbGVtZW50IHRoaXMgYmVoYXZpb3VyIiBuCisgICAgIiUlIC1iZWhhdmlvdXIodGNwX2dhdGV3YXkpLiIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW5jbHVkZSBmaWxlcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gInN0YXJ0X2xpbmsvMSwgaW5pdC8wLCBzeW5jX3JlcXVlc3QvNSwgYXN5bmNfcmVxdWVzdC81LCB0ZXJtaW5hdGUvMiIgbgorICAgICIgICAgICAgIF0pLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIE1hY3JvcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiLWRlZmluZShTRVJWRVIsID9NT0RVTEUpLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFJlY29yZHMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItcmVjb3JkKHN0YXRlLCB7fSkuIm4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgU3RhcnRzIHRoZSBnYXRld2F5IHNlcnZlci4ibgorICAgICIlJSA8cHJlPiJuCisgICAgIiUlIm4KKyAgICAiJSUgRXhwZWN0czoibgorICAgICIlJSAgUG9ydCAtIFRoZSBwb3J0IG51bWJlciB0byBiaW5kIHRvLiJuCisgICAgIiUlIm4KKyAgICAiJSUgVHlwZXM6Im4KKyAgICAiJSUgIFBvcnQgPSBpbnRlZ2VyKCkibgorICAgICIlJSJuCisgICAgIiUlIDwvcHJlPiJuCisgICAgIiUlIm4KKyAgICAiJSUgQHNwZWMgc3RhcnRfbGluayhQb3J0KSAtPiB7b2ssIHBpZCgpfSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhcnRfbGluayhQb3J0KSAtPiIgbj4KKyAgICAiQ2FsbEJhY2tNb2R1bGUgPSA/TU9EVUxFLCJuPgorICAgICIgICAgZnNfdGNwX2dhdGV3YXk6c3RhcnRfbGluayhDYWxsQmFja01vZHVsZSwgUG9ydCkuIm4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgQ2FsbGJhY2tzIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgSW5pdGlhbGl6YXRpb24gc3RhZ2UgZm9yIGVhY2ggbmV3IGNvbm5lY3Rpb24gdG8gdGhlIGdhdGV3YXkgc2VydmVyLiJuCisgICAgIiUlIDxwcmU+Im4KKyAgICAiJSUibgorICAgICIlJSBUeXBlczoibgorICAgICIlJSAgU3RhdGUgPSB0ZXJtKCkibgorICAgICIlJSJuCisgICAgIiUlIDwvcHJlPiJuCisgICAgIiUlIm4KKyAgICAiJSUgQHNwZWMgaW5pdCgpIC0+IHtvaywgU3RhdGV9Im4KKyAgICAiJSUgQGVuZCJuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0KCkgLT4ibj4KKyAgICAie29rLCAjc3RhdGV7fX0uIm4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIENhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgYSBzeW5jcm9ub3VzIHJlcXVlc3QgZnJvbSBhIGNsaWVudC4ibgorICAgICIlJSA8cHJlPiJuCisgICAgIiUlIm4KKyAgICAiJSUgRXhwZWN0czoibgorICAgICIlJSAgSUQgLSBUaGUgcmVxdWVzdCBJRCBudW1iZXIibgorICAgICIlJSAgTSAtIG1vZHVsZSBuYW1lIm4KKyAgICAiJSUgIEYgLSBmdW5jdGlvbiBuYW1lIm4KKyAgICAiJSUgIEEgLSBMaXN0IG9mIGFyZ3VtZW50cyJuCisgICAgIiUlICBSZXBseSAtIEEgbWVzc2FnZSBzZW50IGJhY2sgb3ZlciB0aGUgdGNwIHN0cmVhbSB0byB0aGUgY2xpZW50Im4KKyAgICAiJSUibgorICAgICIlJSBUeXBlczoibgorICAgICIlJSAgSUQgPSBNID0gRiA9IFJlcGx5ID0gc3RyaW5nKCkibgorICAgICIlJSAgQSA9IFtzdHJpbmcoKV0ibgorICAgICIlJSAgU3RhdGUgPSB0ZXJtKCkibgorICAgICIlJSAgUmVwbHkgPSBzdHJpbmcoKSJuCisgICAgIiUlIm4KKyAgICAiJSUgPC9wcmU+Im4KKyAgICAiJSUibgorICAgICIlJSBAc3BlYyBzeW5jX3JlcXVlc3QoSUQsIE0sIEYsIEEsIFN0YXRlKSAtPiJuCisgICAgIiUlIHtyZXBseSwgUmVwbHksIFN0YXRlfSB8IHtzdG9wLCBSZXBseSwgUmVhc29uLCBTdGF0ZX0gfCB7bm9yZXBseSwgU3RhdGV9Im4KKyAgICAiJSUgQGVuZCJuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJzeW5jX3JlcXVlc3QoSUQsIE0sIEYsIEEsIFN0YXRlKSAtPiJuPgorICAgICJ7cmVwbHksIFwic3luYyBva1wiLCBTdGF0ZX0uIm4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIENhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgYSBhc3luY3Jvbm91cyByZXF1ZXN0IGZyb20gYSBjbGllbnQuIm4KKyAgICAiJSUgPHByZT4ibgorICAgICIlJSJuCisgICAgIiUlIEV4cGVjdHM6Im4KKyAgICAiJSUgIElEIC0gVGhlIHJlcXVlc3QgSUQgbnVtYmVyIm4KKyAgICAiJSUgIE0gLSBtb2R1bGUgbmFtZSJuCisgICAgIiUlICBGIC0gZnVuY3Rpb24gbmFtZSJuCisgICAgIiUlICBBIC0gTGlzdCBvZiBhcmd1bWVudHMibgorICAgICIlJSAgUmVwbHkgLSBBIG1lc3NhZ2Ugc2VudCBiYWNrIG92ZXIgdGhlIHRjcCBzdHJlYW0gdG8gdGhlIGNsaWVudCJuCisgICAgIiUlIm4KKyAgICAiJSUgVHlwZXM6Im4KKyAgICAiJSUgIElEID0gTSA9IEYgPSBzdHJpbmcoKSJuCisgICAgIiUlICBBID0gW3N0cmluZygpXSJuCisgICAgIiUlICBTdGF0ZSA9IHRlcm0oKSJuCisgICAgIiUlICBSZXBseSA9IHN0cmluZygpIm4KKyAgICAiJSUibgorICAgICIlJSA8L3ByZT4ibgorICAgICIlJSJuCisgICAgIiUlIEBzcGVjIGFzeW5jX3JlcXVlc3QoSUQsIE0sIEYsIEEsIFN0YXRlKSAtPiJuIAorICAgICIlJSB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gfCB7bm9yZXBseSwgU3RhdGV9Im4KKyAgICAiJSUgQGVuZCJuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJhc3luY19yZXF1ZXN0KElELCBNLCBGLCBBLCBTdGF0ZSkgLT4ibj4KKyAgICAie25vcmVwbHksIFN0YXRlfS4ibgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgQ2FsbGVkIHVwb24gdGhlIHNodXRkb3duIG9mIGEgY29ubmVjdGlvbi4ibgorICAgICIlJSBAc3BlYyB0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4gdm9pZCgpIm4KKyAgICAiJSUgQGVuZCJuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJ0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4ibj4KKyAgICAib2suIm4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBmc190Y3BfZ2F0ZXdheSBiZWhhdmlvdXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisKKzs7IGdlbl90Y3BfcmVjdiB0ZW1wbGF0ZQorKGRlZnZhciBlcmxhbmctc2tlbC1mcy1nZW4tdGNwLXJlY3YKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgICAgIiUlIFRPRE8gSW1wbGVtZW50IHRoaXMgYmVoYXZpb3VyIiBuCisgICAgIiUlIC1iZWhhdmlvdXIoZ2VuX3RjcF9yZWN2KS4iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJzdGFydF9saW5rLzAiIG4+ICJdKS4iIG4gbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgU2VydmVyIENhbGxiYWNrcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gImluaXQvMSwiIG4+ICJoYW5kbGVfcGFja2V0LzMsIiBuPiAiaGFuZGxlX2NhbGwvNCIgbj4gCisgICAgImhhbmRsZV9pbmZvLzMiIG4+ICJ0ZXJtaW5hdGUvMiIgbj4gIl0pLiIgbiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbmNsdWRlIGZpbGVzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBBUEkgLSBFeHRlcm5hbCBFeHBvcnRzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuPiAKKyAgICAic3RhcnRfbGluay8xIiBuPgorICAgICJdKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBTdGFydHMgdGhlIGZzX2dlbl90Y3BfcmVjdiBzZXJ2ZXIuIiBuCisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoKSAtPiB7b2ssIFBpZH0iIG4KKyAgICAiJSUgQGVuZCIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhcnRfbGluaygpIC0+IiBuPgorICAgICJmc19nZW5fdGNwX3JlY3Y6c3RhcnRfbGluayhDYWxsYmFja01vZHVsZSwgP1RDUF9QT1JULCBbXSwgW10sIFtdKS4iIG4gbiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgU2VydmVyIEZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEluaXRpYWxpemVzIHRoZSBzdGF0ZSBmb3IgYSBnZW5fdGNwX3JlY3Ygc2VydmVyLiIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIFN0YXRlfSIgbgorICAgICIlJSBTdGF0ZSA9IHRlcm0oKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdChbXSkgLT4iIG4+CisgICAgIntvaywgW119LiIgbiBuIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFJlY2VpdmVzIHBhY2tldHMgZnJvbSB0aGUgc29ja2V0LiBBbHNvIHJlY2VpdmVzIHRpbW91dCBtZXNzYWdlcy4iIG4KKyAgICAiJSUgVHlwZXM6IiBuCisgICAgIiUlICBTb2NrZXQgPSBzb2NrZXQoKSIgbgorICAgICIlJSAgUGFja2V0ID0gYmluYXJ5KCkgfCBzdHJpbmcoKS4gQ2FuIGJlIGFsdGVyZWQgaW4gVENQT3B0aW9ucyIgbgorICAgICIlJSAgUmVwbHkgPSBiaW5hcnkoKSB8IHN0cmluZygpLiBDYW4gYmUgYWx0ZXJlZCBpbiBUQ1BPcHRpb25zIiBuCisgICAgIiUlICBTdGF0ZSA9IE5ld1N0YXRlID0gdGVybSgpIiBuCisgICAgIiUlICBUaW1lb3V0ID0gaW50ZWdlcigpIGluIG1pbGlzZWNvbmRzLiIgbgorICAgICIlJSBSZXR1cm5zOiAiIG4KKyAgICAiJSUgIHtub3JlcGx5LCBOZXdTdGF0ZX0ge25vcmVwbHksIE5ld1N0YXRlLCBUaW1lb3V0fSIgbgorICAgICIlJSAge3JlcGx5LCBSZXBseSwgTmV3U3RhdGV9IHtyZXBseSwgUmVwbHksIE5ld1N0YXRlLCBUaW1lb3V0fSIgbgorICAgICIlJSAge3N0b3AsIFJlYXNvbiwgTmV3U3RhdGV9IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfcGFja2V0KFNvY2tldCwgUGFja2V0LCBTdGF0ZSkgLT4iIG4+CisgICAgIntub3JlcGx5LCBTdGF0ZX0uIiBuIG4gbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjZWl2ZXMgc3luYyBjYWxscyBmcm9tIGEgY2xpZW50LiIgbgorICAgICIlJSBWYXJpYWJsZXM6IiBuCisgICAgIiUlICBSZXBseSAtIEEgbWVzc2FnZSBzZW50IGJhY2sgdG8gdGhlIGNhbGxlci4iIG4KKyAgICAiJSUgIiBuCisgICAgIiUlIFR5cGVzOiIgbgorICAgICIlJSAgU29ja2V0ID0gc29ja2V0KCkiIG4KKyAgICAiJSUgIE1zZyA9IFJlcGx5ID0gdGVybSgpIiBuCisgICAgIiUlICBTdGF0ZSA9IE5ld1N0YXRlID0gdGVybSgpIiBuCisgICAgIiUlICBUaW1lb3V0ID0gaW50ZWdlcigpIGluIG1pbGlzZWNvbmRzLiIgbgorICAgICIlJSBSZXR1cm5zOiAiIG4KKyAgICAiJSUgIHtub3JlcGx5LCBOZXdTdGF0ZX0ge25vcmVwbHksIE5ld1N0YXRlLCBUaW1lb3V0fSIgbgorICAgICIlJSAge3JlcGx5LCBSZXBseSwgTmV3U3RhdGV9IHtyZXBseSwgUmVwbHksIE5ld1N0YXRlLCBUaW1lb3V0fSIgbgorICAgICIlJSAge3N0b3AsIFJlYXNvbiwgTmV3U3RhdGV9IHwge3N0b3AsIFJlYXNvbiwgUmVwbHksIE5ld1N0YXRlfSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2NhbGwoU29ja2V0LCBGcm9tLCBNc2csIFN0YXRlKSAtPiIgbj4KKyAgICAie3JlcGx5LCBSZXBseSwgU3RhdGV9LiIgbiBuIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gb3RoZXIgcHJvY2Vzc2VzIGFuZCB0aW1lb3V0cy4iIG4KKyAgICAiJSUgVHlwZXM6IiBuCisgICAgIiUlICBTb2NrZXQgPSBzb2NrZXQoKSIgbgorICAgICIlJSAgTXNnID0gdGVybSgpIHwgdGltZW91dCIgbgorICAgICIlJSAgU3RhdGUgPSBOZXdTdGF0ZSA9IHRlcm0oKSIgbgorICAgICIlJSAgVGltZW91dCA9IGludGVnZXIoKSBpbiBtaWxpc2Vjb25kcy4iIG4KKyAgICAiJSUgUmV0dXJuczogIiBuCisgICAgIiUlICB7bm9yZXBseSwgTmV3U3RhdGV9IHtub3JlcGx5LCBOZXdTdGF0ZSwgVGltZW91dH0iIG4KKyAgICAiJSUgIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlfSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2luZm8oU29ja2V0LCBNc2csIFN0YXRlKSAtPiIgbj4KKyAgICAie25vcmVwbHksIFN0YXRlfS4iIG4gbiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBDYWxsZWQgYWZ0ZXIgYSBzb2NrZXQgY2xvc2VzIG9yIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlfSIgbgorICAgICIlJSBUeXBlczoiIG4KKyAgICAiJSUgIFNvY2tldCA9IHNvY2tldCgpIiBuCisgICAgIiUlICBTdGF0ZSA9IE5ld1N0YXRlID0gdGVybSgpIiBuCisgICAgIiUlIFJldHVybnM6IHRlcm0oKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFNvY2tldCwgU3RhdGUpIC0+IiBuPgorICAgICAgICAib2suIiBuIG4gbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlJSBJbnRlcm5hbCBGdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGZzX2dlbl90Y3BfcmVjdiBiZWhhdmlvdXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCis7OyBmc19lZG9jX2hlYWRlciB0ZW1wbGF0ZQorKGRlZnZhciBlcmxhbmctc2tlbC1mcy1lZG9jLWhlYWRlcgorICAnKChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyIgbgorICAgICIlJSA8cHJlPiIgbgorICAgICIlJSBWYXJpYWJsZXM6IiBuCisgICAgIiUlIFR5cGVzOiIgbgorICAgICIlJSA8L3ByZT4gdGVybSgpIiBuCisgICAgIiUlIEBzcGVjIiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGFuIGVkb2MgZnVuY3Rpb24gaGVhZGVyLiAKK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKzs7IGZzX2RiX2luaXQgdGVtcGxhdGUKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZnMtZGItaW5pdAorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAgICAiJSUgVE9ETyBJbXBsZW1lbnQgdGhpcyBiZWhhdmlvdXIiIG4KKyAgICAiJSUgLWJlaGF2aW91cihkYl9pbml0KS4iIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIEluY2x1ZGUgZmlsZXMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJzdGFydF9saW5rLzEsIHN0YXJ0X2xpbmsvMywgaW5pdC8xLCBsb2NhbF9pbml0LzAsIHJlbW90ZV9pbml0LzAiIG4KKwkiICAgICAgICBdKS4iIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFN0YXJ0cyB0aGUgc2VydmVyLiAiIG4+CisgICAgIiUlIDxwcmU+IiBuPgorICAgICIlJSBWYXJpYWJsZXM6IiBuPgorICAgICIlJSAgQ2FsbEJhY2tNb2R1bGUgLSBUaGUgbW9kdWxlIHRoYXQgZXhoaWJpdHMgdGhlIGRiIGluaXQgYmVoYXZpb3VyLiIgbj4KKyAgICAiJSUgIEFyZ3MgLSBBIGxpc3Qgb2YgYXJndW1lbnRzIGRlbGl2ZXJlZCB0byB0aGUgQ2FsbEJhY2tNb2R1bGU6aW5pdC8xIGZ1bmN0aW9uLiIgbj4KKyAgICAiJSUgIE9wdGlvbnMgLSBBIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgZnNfZGJfaW5pdC4iIG4+CisgICAgIiUlIiBuPgorICAgICIlJSBUaGUgb3B0aW9ucyBhcmUgYXMgZm9sbG93czoiIG4+CisgICAgIiUlICB7c2NoZW1hX3R5cGUsIFR5cGV9IiBuPgorICAgICIlJSIgbj4KKyAgICAiJSUgVHlwZXM6IiBuPgorICAgICIlJSAgQXJncyA9IGxpc3QoKSIgbj4KKyAgICAiJSUgIE9wdGlvbnMgPSBsaXN0KCkiIG4+CisgICAgIiUlICBUeXBlID0gcmFtX2NvcGllcyB8IGRpc2NfY29waWVzIHwgZGlzY19vbmx5X2NvcGllcyIgbj4KKyAgICAiJSUiIG4+CisgICAgIiUlIDwvcHJlPiIgbj4KKyAgICAiJSUgQHNwZWMgc3RhcnRfbGluayhDYWxsQmFja01vZHVsZSwgQXJncywgT3B0aW9ucykgLT4ge29rLCBwaWQoKX0gfCB7ZXJyb3IsIFJlYXNvbn0iIG4+CisgICAgIiUlIEBlbmQiIG4+CisgICAgIihlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikiCisgICAgInN0YXJ0X2xpbmsoQ2FsbEJhY2tNb2R1bGUsIEFyZ3MsIE9wdGlvbnMpIC0+IiBuPgorICAgICJwcm9jX2xpYjpzdGFydF9saW5rKD9NT0RVTEUsIGRiX2luaXQsIFtzZWxmKCksIENhbGxCYWNrTW9kdWxlLCBBcmdzLCBPcHRpb25zXSkuIiBuPgorICAgIG4KKyAgICAiJSUgQHNwZWMgc3RhcnRfbGluayhDYWxsQmFja01vZHVsZSkgLT4ge29rLCBwaWQoKX0gfCB7ZXJyb3IsIFJlYXNvbn0iIG4+CisgICAgIiUlIEBlcXVpdiBzdGFydF9saW5rKENhbGxCYWNrTW9kdWxlLCBbXSwgW10pIiBuPgorICAgICJzdGFydF9saW5rKENhbGxCYWNrTW9kdWxlKSAtPiIgbj4KKyAgICAic3RhcnRfbGluayhDYWxsQmFja01vZHVsZSwgW10sIFtdKS4iIG4+CisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIENhbGxiYWNrcyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIiBuCisgICAgIiUlIFJldHVybnMgYSBsaXN0IG9mIG5vZGVzIHRoYXQgZGJfaW5pdCBzaG91bGQgdHJ5IHRvIHJlcGxpY2F0ZSB3aXRoLiIgbgorICAgICIlJSIgbgorICAgICIlJSA8cHJlPiIgIG4KKyAgICAiJSUgVHlwZXM6IiBuCisgICAgIiUlICBEQk5vZGVzID0gW25vZGUoKV0iIG4KKyAgICAiJSUgPC9wcmU+IiAgbgorICAgICIlJSIgbgorICAgICIlJSBAc3BlYyBpbml0KEFyZ3MpIC0+IHtvaywgREJOb2Rlc30gfCBub19pbml0IiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoQXJncykgLT4iIG4KKyAgICAiICAgIHtvaywgREJOb2Rlc1RvUmVwbGljYXRlRnJvbSA9IFtdfS4iIG4gCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIiBuCisgICAgIiUlIENyZWF0ZWQgYSBzY2hlbWEgYW5kIHNlZWRzIHRoZSBsb2NhbCBkYXRhYmFzZS4iIG4KKyAgICAiJSUgUmV0dXJucyBhIGxpc3Qgb2YgcmVjb3JkcyB3aXRoIHRoZWlyIGluaXRpYWwgZGF0YS4iIG4KKyAgICAiJSUgVGhlc2UgYXJlIHRvIGJlIHRoZSB0YWJsZXMgYW5kIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgZGF0YWJhc2UuIiBuCisgICAgIiUlIiBuCisgICAgIiUlIDxwcmU+IiBuCisgICAgIiUlIFJlY2xpc3QgPSBbcmVjb3JkKCldIiBuCisgICAgIiUlIFJlYXNvbiA9IGF0b20oKSIgbgorICAgICIlJSA8L3ByZT4iIG4KKyAgICAiJSUiIG4KKyAgICAiJSUgQHNwZWMgbG9jYWxfaW5pdCgpIC0+IHtvaywgUmVjTGlzdH0gfCB7ZXJyb3IsIFJlYXNvbn0iIG4KKyAgICAiJSUgQGVuZCIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAibG9jYWxfaW5pdCgpIC0+IiBuCisgICAgIiAgICB7b2ssIFtdfS4iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgUHVzaGVzIHRoZSBzY2hlbWEgYW5kIHRoZSB0YWJsZSBkZWZpbml0aW9ucyB0byB0aGUgbm9kZSIgbgorICAgICIlJSBzcGVjaWZpZWQgYnkgdGhlIHZhcmlhYmxlIG5vZGUuIiBuCisgICAgIiUlIE5PVEU6IERvIG5vdCBpbmNsdWRlIHRoZSBzY2hlbWEgaW4gdGhpcyBsaXN0LiIgbgorICAgICIlJSIgbgorICAgICIlJSA8cHJlPiIgbgorICAgICIlJSBUeXBlcyAiIG4KKyAgICAiJSUgIE5vZGUgPSBub2RlKCkiIG4KKyAgICAiJSUgIFRhYmxlTGlzdCA9IFt7VGFibGUsIFR5cGV9XSIgbgorICAgICIlJSAgIFRhYmxlID0gYXRvbSgpIiBuCisgICAgIiUlICAgVHlwZSA9IHJhbV9jb3BpZXMsIGRpc2NfY29waWVzIiBuCisgICAgIiUlICBSZWFzb24gPSBhdG9tKCkiIG4KKyAgICAiJSUgPC9wcmU+IiBuCisgICAgIiUlIiBuCisgICAgIiUlIEBzcGVjIHJlbW90ZV9pbml0KCkgLT4ge29rLCBUYWJsZUxpc3R9IHwge2Vycm9yLCBSZWFzb259IiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInJlbW90ZV9pbml0KCkgLT4iIG4KKyAgICAiICAgIHtvaywgW3tpbmksIHJhbV9jb3BpZXN9XX0uIiBuCisgICAgbgorICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGZzX2RiX2luaXQgYmVoYXZpb3VyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1zdXBlcnZpc29yCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICItYmVoYXZpb3VyKHN1cGVydmlzb3IpLiIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiJSUgSW5jbHVkZSBmaWxlcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuPiAic3RhcnRfbGluay8xIiBuCisJIiAgICAgICAgXSkuIiBuCisgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gImluaXQvMSIgbgorCSIgICAgICAgIF0pLiIgbgorCW4gCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgU3RhcnRzIHRoZSBzdXBlcnZpc29yLiIgbgorICAgICIlJSBAc3BlYyBzdGFydF9saW5rKFN0YXJ0QXJncykgLT4ge29rLCBwaWQoKX0gfCBFcnJvciIgbgorICAgICIlJSBAZW5kIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJzdGFydF9saW5rKFN0YXJ0QXJncykgLT4iIG4+CisgICAgInN1cGVydmlzb3I6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSkuIiBuIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBTZXJ2ZXIgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGluaXQvMSIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssICB7U3VwRmxhZ3MsICBbQ2hpbGRTcGVjXX19IHwiIG4KKyAgICAiJSUgICAgICAgICAgaWdub3JlICAgICAgICAgICAgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtlcnJvciwgUmVhc29ufSAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdChbXSkgLT4iIG4+CisgICAgIlJlc3RhcnRTdHJhdGVneSAgICA9IG9uZV9mb3Jfb25lLCIgbj4KKyAgICAiTWF4UmVzdGFydHMgICAgICAgID0gMTAwMCwiIG4+CisgICAgIk1heFRpbWVCZXRSZXN0YXJ0cyA9IDM2MDAsIiBuPgorICAgIG4+CisgICAgIlN1cEZsYWdzID0ge1Jlc3RhcnRTdHJhdGVneSwgTWF4UmVzdGFydHMsIE1heFRpbWVCZXRSZXN0YXJ0c30sIiBuPgorICAgIG4+CisgICAgIkNoaWxkU3BlY3MgPSIgbj4KKyAgICAiWyIgbj4KKyAgICAie0FwcE5hbWUsIiBuPgorICAgICJ7QXBwTmFtZSwgc3RhcnRfbGluaywgW119LCIgbj4KKyAgICAicGVybWFuZW50LCIgbj4KKyAgICAiMTAwMCwiIG4+CisgICAgIndvcmtlciwiIG4+CisgICAgIltBcHBOYW1lXX0iIG4+CisgICAgIl0sIiBuPgorICAgICJ7b2sse1N1cEZsYWdzLCBDaGlsZFNwZWNzfX0uIiBuCisKKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYW4gc3VwZXJ2aXNvciBiZWhhdmlvdXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLXN1cGVydmlzb3ItYnJpZGdlCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICItYmVoYXZpb3VyKHN1cGVydmlzb3JfYnJpZGdlKS4iIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIEluY2x1ZGUgZmlsZXMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gInN0YXJ0X2xpbmsvMCIgbgorCSIgICAgICAgIF0pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJpbml0LzEsICIgbj4gInRlcm1pbmF0ZS8yIiBuCisJIiAgICAgICAgXSkuIiBuCisJbiAKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIE1hY3JvcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisJIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLXJlY29yZChzdGF0ZSwge30pLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IHN0YXJ0X2xpbmsvMCIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogU3RhcnRzIHRoZSBzdXBlcnZpc29yIGJyaWRnZSIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgInN0YXJ0X2xpbmsoKSAtPiIgbj4KKwkic3VwZXJ2aXNvcl9icmlkZ2U6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSkuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIFNlcnZlciBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaW5pdC8xIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgIFBpZCwgU3RhdGV9IHwiIG4KKyAgICAiJSUgICAgICAgICAgaWdub3JlICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7ZXJyb3IsIFJlYXNvbn0gICAgIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0KFtdKSAtPiIgbj4KKyAgICAiY2FzZSAnQU1vZHVsZSc6c3RhcnRfbGluaygpIG9mIiBuPgorICAgICJ7b2ssIFBpZH0gLT4iIG4+CisgICAgIntvaywgUGlkLCAjc3RhdGV7fX07IiBuPgorICAgICJFcnJvciAtPiIgbj4KKyAgICAiRXJyb3IiIG4+CisgICAgImVuZC4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiB0ZXJtaW5hdGUvMiIgbgorICAgICIlJSBQdXJwb3NlOiBTeW5jaHJvbml6ZWQgc2h1dGRvd24gb2YgdGhlIHVuZGVybHlpbmcgc3ViIHN5c3RlbS4iIG4KKyAgICAiJSUgUmV0dXJuczogYW55IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJ0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4iIG4+CisgICAgIidBTW9kdWxlJzpzdG9wKCksIiBuPgorICAgICJvay4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGFuIHN1cGVydmlzb3JfYnJpZGdlIGJlaGF2aW91ci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZ2VuZXJpYy1zZXJ2ZXIKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgICAgIi1iZWhhdmlvdXIoZ2VuX3NlcnZlcikuIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1leHBvcnQoWyIgbj4ic3RhcnRfbGluay8wLCJuPiJzdG9wLzAibj4iXSkuIiBuCisgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgZ2VuX3NlcnZlciBjYWxsYmFja3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1leHBvcnQoW2luaXQvMSwgaGFuZGxlX2NhbGwvMywgaGFuZGxlX2Nhc3QvMiwgIgorICAgICJoYW5kbGVfaW5mby8yLCB0ZXJtaW5hdGUvMiwgY29kZV9jaGFuZ2UvM10pLiIgbiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSByZWNvcmQgZGVmaW5pdGlvbnMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1yZWNvcmQoc3RhdGUsIHt9KS4iIG4gbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgbWFjcm8gZGVmaW5pdGlvbnMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgU3RhcnRzIHRoZSBzZXJ2ZXIuIiBuCisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoKSAtPiB7b2ssIHBpZCgpfSB8IHtlcnJvciwgUmVhc29ufSIgbgorICAgICIlJSBAZW5kIm4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICJzdGFydF9saW5rKCkgLT4iIG4+CisgICAgImdlbl9zZXJ2ZXI6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSwgW10pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgU3RvcHMgdGhlIHNlcnZlci4iIG4KKyAgICAiJSUgQHNwZWMgc3RvcCgpIC0+IG9rIiBuCisgICAgIiUlIEBlbmQibgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgInN0b3AoKSAtPiIgbj4KKyAgICAiZ2VuX3NlcnZlcjpjYXN0KD9TRVJWRVIsIHN0b3ApLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBTZXJ2ZXIgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKwluCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jdGlvbjogaW5pdC8xIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBJbml0aWF0ZXMgdGhlIHNlcnZlciIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtvaywgU3RhdGUsIFRpbWVvdXR9IHwiIG4KKyAgICAiJSUgICAgICAgICAgaWdub3JlICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29ufSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdChbXSkgLT4iIG4+CisgICAgIntvaywgI3N0YXRle319LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBoYW5kbGVfY2FsbC8zIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBIYW5kbGluZyBjYWxsIG1lc3NhZ2VzIiBuCisgICAgIiUlIFJldHVybnM6IHtyZXBseSwgUmVwbHksIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtyZXBseSwgUmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFJlcGx5LCBTdGF0ZX0gICB8ICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpIiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfY2FsbChSZXF1ZXN0LCBGcm9tLCBTdGF0ZSkgLT4iIG4+CisgICAgIlJlcGx5ID0gb2ssIiBuPgorICAgICJ7cmVwbHksIFJlcGx5LCBTdGF0ZX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IGhhbmRsZV9jYXN0LzIiIG4KKyAgICAiJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGNhc3QgbWVzc2FnZXMiIG4KKyAgICAiJSUgUmV0dXJuczoge25vcmVwbHksIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2Nhc3Qoc3RvcCwgU3RhdGUpIC0+IiBuPgorICAgICJ7c3RvcCwgbm9ybWFsLCBTdGF0ZX07IiBuCisgICAgImhhbmRsZV9jYXN0KE1zZywgU3RhdGUpIC0+IiBuPgorICAgICJ7bm9yZXBseSwgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBoYW5kbGVfaW5mby8yIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBIYW5kbGluZyBhbGwgbm9uIGNhbGwvY2FzdCBtZXNzYWdlcyIgbgorICAgICIlJSBSZXR1cm5zOiB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfaW5mbyhJbmZvLCBTdGF0ZSkgLT4iIG4+CisgICAgIntub3JlcGx5LCBTdGF0ZX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IHRlcm1pbmF0ZS8yIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBTaHV0ZG93biB0aGUgc2VydmVyIiBuCisgICAgIiUlIFJldHVybnM6IGFueSAoaWdub3JlZCBieSBnZW5fc2VydmVyKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+IiBuPgorICAgICJvay4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBjb2RlX2NoYW5nZS8zIiBuCisgICAgIiUlIFB1cnBvc2U6IENvbnZlcnQgcHJvY2VzcyBzdGF0ZSB3aGVuIGNvZGUgaXMgY2hhbmdlZCIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIE5ld1N0YXRlfSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiY29kZV9jaGFuZ2UoT2xkVnNuLCBTdGF0ZSwgRXh0cmEpIC0+IiBuPgorICAgICJ7b2ssIFN0YXRlfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGdlbmVyaWMgc2VydmVyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1nZW4tZXZlbnQKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgICAgIi1iZWhhdmlvdXIoZ2VuX2V2ZW50KS4iIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIEluY2x1ZGUgZmlsZXMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiLWV4cG9ydChbc3RhcnRfbGluay8wLCBhZGRfaGFuZGxlci8wXSkuIiBuCisgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgZ2VuX2V2ZW50IGNhbGxiYWNrcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiLWV4cG9ydChbaW5pdC8xLCBoYW5kbGVfZXZlbnQvMiwgaGFuZGxlX2NhbGwvMiwgIgorICAgICJoYW5kbGVfaW5mby8yLCB0ZXJtaW5hdGUvMiwgY29kZV9jaGFuZ2UvM10pLiIgbiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBSZWNvcmQgRGVmaW5pdGlvbnMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1yZWNvcmQoc3RhdGUsIHt9KS4iIG4gbiAKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIE1hY3JvIERlZmluaXRpb25zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFN0YXJ0cyB0aGUgc2VydmVyIiBuCisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoKSAtPiB7b2ssIFBpZH0gfCB7ZXJyb3IsIHthbHJlYWR5X3N0YXJ0ZWQsIFBpZH19IiBuCisgICAgIiUlIEBlbmQiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICJzdGFydF9saW5rKCkgLT4iIG4+CisgICAgImdlbl9ldmVudDpzdGFydF9saW5rKHtsb2NhbCwgP1NFUlZFUn0pLiAiIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIEFkZHMgYW4gZXZlbnQgaGFuZGxlciIgbgorICAgICIlJSBAc3BlYyBhZGRfaGFuZGxlcigpIC0+IG9rIHwgeydFWElUJywgUmVhc29ufSIgbgorICAgICIlJSBAZW5kIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiYWRkX2hhbmRsZXIoKSAtPiIgbj4KKyAgICAiZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKD9TRVJWRVIsID9NT0RVTEUsIFtdKS4iIG4gCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIFNlcnZlciBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaW5pdC8xIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgU3RhdGV9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAgT3RoZXIiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoW10pIC0+IiBuPgorICAgICJ7b2ssICNzdGF0ZXt9fS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBoYW5kbGVfZXZlbnQvMiIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIFN0YXRlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7c3dhcF9oYW5kbGVyLCBBcmdzMSwgU3RhdGUxLCBNb2QyLCBBcmdzMn0gfCIgbgorICAgICIlJSAgICAgICAgICByZW1vdmVfaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2V2ZW50KEV2ZW50LCBTdGF0ZSkgLT4iIG4+CisgICAgIntvaywgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGhhbmRsZV9jYWxsLzIiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBSZXBseSwgU3RhdGV9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzd2FwX2hhbmRsZXIsIFJlcGx5LCBBcmdzMSwgU3RhdGUxLCBNb2QyLCBBcmdzMn0gfCIgbgorICAgICIlJSAgICAgICAgICB7cmVtb3ZlX2hhbmRsZXIsIFJlcGx5fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9jYWxsKFJlcXVlc3QsIFN0YXRlKSAtPiIgbj4KKyAgICAiUmVwbHkgPSBvaywiIG4+CisgICAgIntvaywgUmVwbHksIFN0YXRlfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBoYW5kbGVfaW5mby8yIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgU3RhdGV9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzd2FwX2hhbmRsZXIsIEFyZ3MxLCBTdGF0ZTEsIE1vZDIsIEFyZ3MyfSB8IiBuCisgICAgIiUlICAgICAgICAgIHJlbW92ZV9oYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfaW5mbyhJbmZvLCBTdGF0ZSkgLT4iIG4+CisgICAgIntvaywgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IHRlcm1pbmF0ZS8yIiBuCisgICAgIiUlIFB1cnBvc2U6IFNodXRkb3duIHRoZSBzZXJ2ZXIiIG4KKyAgICAiJSUgUmV0dXJuczogYW55IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJ0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4iIG4+CisgICAgIm9rLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGNvZGVfY2hhbmdlLzMiIG4KKyAgICAiJSUgUHVycG9zZTogQ29udmVydCBwcm9jZXNzIHN0YXRlIHdoZW4gY29kZSBpcyBjaGFuZ2VkIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgTmV3U3RhdGV9IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJjb2RlX2NoYW5nZShPbGRWc24sIFN0YXRlLCBFeHRyYSkgLT4iIG4+CisgICAgIntvaywgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGdlbl9ldmVudC4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZ2VuLWZzbQorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAgICAiLWJlaGF2aW91cihnZW5fZnNtKS4iIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIEluY2x1ZGUgZmlsZXMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorICAgICItZXhwb3J0KFtzdGFydF9saW5rLzBdKS4iIG4KKyAgICBuCisgICAgIiUlIGdlbl9mc20gY2FsbGJhY2tzIiBuCisgICAgIi1leHBvcnQoW2luaXQvMSwgc3RhdGVfbmFtZS8yLCBzdGF0ZV9uYW1lLzMsIGhhbmRsZV9ldmVudC8zLCIgbj4KKyAgICAiaGFuZGxlX3N5bmNfZXZlbnQvNCwgaGFuZGxlX2luZm8vMywgdGVybWluYXRlLzMsIGNvZGVfY2hhbmdlLzRdKS4iIG4gbgorICAgICItcmVjb3JkKHN0YXRlLCB7fSkuIiBuIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IHN0YXJ0X2xpbmsvMCIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogU3RhcnRzIHRoZSBzZXJ2ZXIiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICJzdGFydF9saW5rKCkgLT4iIG4+CisgICAgImdlbl9mc206c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSwgW10pLiIgbiAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgU2VydmVyIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBpbml0LzEiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBTdGF0ZU5hbWUsIFN0YXRlRGF0YX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7b2ssIFN0YXRlTmFtZSwgU3RhdGVEYXRhLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFN0b3BSZWFzb259ICAgICAgICAgICAgICAgICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdChbXSkgLT4iIG4+CisgICAgIntvaywgc3RhdGVfbmFtZSwgI3N0YXRle319LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IFN0YXRlTmFtZS8yIiBuCisgICAgIiUlIFJldHVybnM6IHtuZXh0X3N0YXRlLCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtuZXh0X3N0YXRlLCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlRGF0YX0gICAgICAgICAgICAgICAgICAgICAgICAgIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJzdGF0ZV9uYW1lKEV2ZW50LCBTdGF0ZURhdGEpIC0+IiBuPgorICAgICJ7bmV4dF9zdGF0ZSwgc3RhdGVfbmFtZSwgU3RhdGVEYXRhfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBTdGF0ZU5hbWUvMyIgbgorICAgICIlJSBSZXR1cm5zOiB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YX0gICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtuZXh0X3N0YXRlLCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhLCBUaW1lb3V0fSAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3JlcGx5LCBSZXBseSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7cmVwbHksIFJlcGx5LCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlRGF0YX0gICAgICAgICAgICAgICAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgUmVwbHksIE5ld1N0YXRlRGF0YX0gICAgICAgICAgICAgICAgICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhdGVfbmFtZShFdmVudCwgRnJvbSwgU3RhdGVEYXRhKSAtPiIgbj4KKyAgICAiUmVwbHkgPSBvaywiIG4+CisgICAgIntyZXBseSwgUmVwbHksIHN0YXRlX25hbWUsIFN0YXRlRGF0YX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaGFuZGxlX2V2ZW50LzMiIG4KKyAgICAiJSUgUmV0dXJuczoge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGF9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGEsIFRpbWVvdXR9IHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgTmV3U3RhdGVEYXRhfSAgICAgICAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9ldmVudChFdmVudCwgU3RhdGVOYW1lLCBTdGF0ZURhdGEpIC0+IiBuPgorICAgICJ7bmV4dF9zdGF0ZSwgU3RhdGVOYW1lLCBTdGF0ZURhdGF9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGhhbmRsZV9zeW5jX2V2ZW50LzQiIG4KKyAgICAiJSUgUmV0dXJuczoge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGF9ICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YSwgVGltZW91dH0gICB8IiBuCisgICAgIiUlICAgICAgICAgIHtyZXBseSwgUmVwbHksIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGF9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3JlcGx5LCBSZXBseSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBOZXdTdGF0ZURhdGF9ICAgICAgICAgICAgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFJlcGx5LCBOZXdTdGF0ZURhdGF9ICAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9zeW5jX2V2ZW50KEV2ZW50LCBGcm9tLCBTdGF0ZU5hbWUsIFN0YXRlRGF0YSkgLT4iIG4+CisgICAgIlJlcGx5ID0gb2ssIiBuPgorICAgICJ7cmVwbHksIFJlcGx5LCBTdGF0ZU5hbWUsIFN0YXRlRGF0YX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaGFuZGxlX2luZm8vMyIgbgorICAgICIlJSBSZXR1cm5zOiB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBOZXdTdGF0ZURhdGF9ICAgICAgICAgICAgICAgICAgICAgICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2luZm8oSW5mbywgU3RhdGVOYW1lLCBTdGF0ZURhdGEpIC0+IiBuPgorICAgICJ7bmV4dF9zdGF0ZSwgU3RhdGVOYW1lLCBTdGF0ZURhdGF9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IHRlcm1pbmF0ZS8zIiBuCisgICAgIiUlIFB1cnBvc2U6IFNodXRkb3duIHRoZSBmc20iIG4KKyAgICAiJSUgUmV0dXJuczogYW55IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJ0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZU5hbWUsIFN0YXREYXRhKSAtPiIgbj4KKyAgICAib2suIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogY29kZV9jaGFuZ2UvNCIgbgorICAgICIlJSBQdXJwb3NlOiBDb252ZXJ0IHByb2Nlc3Mgc3RhdGUgd2hlbiBjb2RlIGlzIGNoYW5nZWQiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBOZXdTdGF0ZSwgTmV3U3RhdGVEYXRhfSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiY29kZV9jaGFuZ2UoT2xkVnNuLCBTdGF0ZU5hbWUsIFN0YXRlRGF0YSwgRXh0cmEpIC0+IiBuPgorICAgICJ7b2ssIFN0YXRlTmFtZSwgU3RhdGVEYXRhfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSUgSW50ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBnZW5fZnNtLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1saWIKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4KKwkiICAgICAgICBdKS4iIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuCisJIiAgICAgICAgXSkuIiBuCisJbiAKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIE1hY3JvcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIiBuCisgICAgIiUlIEBzcGVjICIgbgorICAgICIlJSBAZW5kICIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGxpYnJhcnkgbW9kdWxlLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworCisoZGVmdmFyIGVybGFuZy1za2VsLWdlbmVyaWMtbGVhZGVyCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICItYmVoYXZpb3VyKGZzX2dlbl9sZWFkZXIpLiIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW5jbHVkZSBmaWxlcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICItZXhwb3J0KFsiIG4+InN0YXJ0X2xpbmsvMCwibj4ic3RvcC8wIm4+Il0pLiIgbgorICAgICAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgZ2VuX2xlYWRlciBjYWxsYmFja3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICItZXhwb3J0KFtpbml0LzEsIiBuPgorICAgICAgICAiZWxlY3RlZC8yLCIgbj4KKyAgICAgICAgInN1cnJlbmRlcmVkLzMsIiBuPgorICAgICAgICAiaGFuZGxlX0RPV04vMywiIG4+CisgICAgICAgICJoYW5kbGVfbGVhZGVyX2NhbGwvNCwiIG4+CisgICAgICAgICJoYW5kbGVfbGVhZGVyX2Nhc3QvMywiIG4+CisgICAgICAgICJmcm9tX2xlYWRlci8zLCIgbj4KKyAgICAgICAgImhhbmRsZV9jYWxsLzMsIiBuPgorICAgICAgICAiaGFuZGxlX2Nhc3QvMiwiIG4+CisgICAgICAgICJoYW5kbGVfaW5mby8yLCIgbj4KKyAgICAgICAgInRlcm1pbmF0ZS8yLCIgbj4KKyAgICAgICAgImNvZGVfY2hhbmdlLzQiIG4+CisgICAgICAgICJdKS4iIG4+CisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIHJlY29yZCBkZWZpbml0aW9ucyIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICItcmVjb3JkKHN0YXRlLCB7fSkuIiBuIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgbWFjcm8gZGVmaW5pdGlvbnMiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiLWRlZmluZShTRVJWRVIsID9NT0RVTEUpLiIgbgorICAgICAgICBuCisgICAgICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBAZG9jIFN0YXJ0cyB0aGUgZ2VuX2xlYWRlci4iIG4KKyAgICAgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoKSAtPiB7b2ssIHBpZCgpfSB8IHtlcnJvciwgUmVhc29ufSIgbgorICAgICAgICAiJSUgQGVuZCJuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAgICAgInN0YXJ0X2xpbmsoKSAtPiIgbj4KKyAgICAgICAgIkNhbmRpZGF0ZXMgPSBbbm9kZSgpfG5vZGVzKCldLCIgbj4KKyAgICAgICAgIldvcmtlcnMgICAgPSBbXSwiIG4+CisgICAgICAgICJnZW5fbGVhZGVyOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgQ2FuZGlkYXRlcywgV29ya2VycywgP01PRFVMRSwgW10sIFtdKS4iIG4KKyAgICAgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIEBkb2MgU3RvcHMgdGhlIGdlbl9sZWFkZXIuIiBuCisgICAgICAgICIlJSBAc3BlYyBzdG9wKCkgLT4gb2siIG4KKyAgICAgICAgIiUlIEBlbmQibgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICAgICAic3RvcCgpIC0+IiBuPgorICAgICAgICAiZ2VuX2xlYWRlcjpjYXN0KD9TRVJWRVIsIHN0b3ApLiIgbgorICAgICAgICBuCisgICAgICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBTZXJ2ZXIgZnVuY3Rpb25zIiBuCisgICAgICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgICAgIG4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBGdW5jdGlvbjogaW5pdC8xIiBuPgorICAgICAgICAiJSUgRGVzY3JpcHRpb246IEluaXRpYXRlcyB0aGUgc2VydmVyIiBuPgorICAgICAgICAiJSUgUmV0dXJuczoge29rLCBTdGF0ZX0gICAgICAgICAgfCIgbj4KKyAgICAgICAgIiUlICAgICAgICAgIHtvaywgU3RhdGUsIFRpbWVvdXR9IHwiIG4+CisgICAgICAgICIlJSAgICAgICAgICBpZ25vcmUgICAgICAgICAgICAgICB8IiBuPgorICAgICAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbn0iIG4+CisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiaW5pdChbXSkgLT4iIG4+CisgICAgICAgICJ7b2ssICNzdGF0ZXt9fS4iIG4KKyAgICAgICAgbgorCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgQ2FsbGVkIHdoZW4gd2UgYmVjb21lIHRoZSBsZWFkZXIuIiBuPgorICAgICAgICAiJSUiIG4+CisgICAgICAgICIlJSBlbGVjdGVkKFN0YXRlOjpzdGF0ZSgpLCBFOjplbGVjdGlvbigpKSAtPiB7b2ssIEJyb2FkY2FzdCwgTlN0YXRlfSIgbj4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICJlbGVjdGVkKFN0YXRlLCBFKSAtPiIgbj4KKyAgICAgICAgIkJyb2FkY2FzdFRvQWxsQ2FuZGlkYXRlcyA9IFtdLCJuPgorICAgICAgICAie29rLCBCcm9hZGNhc3RUb0FsbENhbmRpZGF0ZXMgLCBTdGF0ZX0uIiBuCisgICAgICAgIG4KKworCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIENhbGxlZCBieSBlYWNoIGNhbmRpZGF0ZSB3aGVuIGl0IHJlY29nbml6ZXMgYW5vdGhlciBpbnN0YW5jZSBhcyBsZWFkZXIuIiBuPgorICAgICAgICAiJSUgU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGNhbmRpZGF0ZSAiIG4+CisgICAgICAgICIlJSBhY2tub3dsZWRnZXMgYSBsZWFkZXIgYW5kIHJlY2VpdmVzIGEgU3luY2ggbWVzc2FnZSBpbiByZXR1cm4uIiBuPgorICAgICAgICAiJSUiIG4+CisgICAgICAgICIlJSBzdXJyZW5kZXJlZChTdGF0ZTo6c3RhdGUoKSwgU3luY2g6OmJyb2FkY2FzdCgpLCBFOjplbGVjdGlvbigpKSAtPiB7b2ssIE5TdGF0ZX0iIG4+CisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAic3VycmVuZGVyZWQoU3RhdGUsIEJDYXN0RnJvbUxlYWRlckVsZWN0ZWRDYWxsLCBFKSAtPiIgbj4KKyAgICAgICAgIntvaywgU3RhdGUjc3RhdGV7bGVhZGVyX25vZGUgPSBMZWFkZXJOb2RlfX0uIm4KKyAgICAgICAgbgorCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgQ2FsbGVkIGJ5IHRoZSBsZWFkZXIgd2hlbiBpdCBkZXRlY3RzIGxvc3Mgb2YgYSBjYW5kaWRhdGUgbm9kZS4iIG4+CisgICAgICAgICIlJSBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGJyb2FkY2FzdCgpIG9iamVjdCwgdGhpcyB3aWxsIiBuPgorICAgICAgICAiJSUgYmUgc2VudCB0byBhbGwgY2FuZGlkYXRlcywgYW5kIHRoZXkgd2lsbCByZWNlaXZlIGl0IGluIHRoZSBmdW5jdGlvbiIgbj4KKyAgICAgICAgIiUlIGxpbmsgZnJvbV9sZWFkZXIvMy4gZnJvbV9sZWFkZXIvMyIgbj4KKyAgICAgICAgIiUlIiBuPgorICAgICAgICAiJSUgaGFuZGxlX0RPV04oTm9kZTo6bm9kZSgpLCBTdGF0ZTo6c3RhdGUoKSwgRTo6ZWxlY3Rpb24oKSkgLT4ge29rLCBOU3RhdGV9IHwge29rLCBCcm9hZGNhc3QsIE5TdGF0ZX0iIG4+CisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiaGFuZGxlX0RPV04oTm9kZSwgU3RhdGUsIF9FKSAtPiIgbj4KKyAgICAgICAgIntvaywgU3RhdGV9LiIgbj4KKworCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlICBoYW5kbGVfbGVhZGVyX2NhbGwoTXNnOjp0ZXJtKCksIEZyb206OmNhbGxlclJlZigpLCBTdGF0ZTo6c3RhdGUoKSwgRTo6ZWxlY3Rpb24oKSkgLT4gIiBuPgorICAgICAgICAiJSUgICAge3JlcGx5LCBSZXBseSwgTlN0YXRlfSB8IiBuPgorICAgICAgICAiJSUgICAge3JlcGx5LCBSZXBseSwgQnJvYWRjYXN0LCBOU3RhdGV9IHwiIG4+CisgICAgICAgICIlJSAgICB7bm9yZXBseSwgc3RhdGUoKX0gfCIgbj4KKyAgICAgICAgIiUlICAgIHtzdG9wLCBSZWFzb24sIFJlcGx5LCBOU3RhdGV9IHwiIG4+CisgICAgICAgICIlJSAgICBjb21tb25SZXBseSgpIiBuPgorICAgICAgICAiJSUiIG4+CisgICAgICAgICIlJSBDYWxsZWQgYnkgdGhlIGxlYWRlciBpbiByZXNwb25zZSB0byBhIGdlbl9sZWFkZXI6bGVhZGVyX2NhbGwvMi4gbGVhZGVyX2NhbGwoKS4iIG4+CisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiaGFuZGxlX2xlYWRlcl9jYWxsKE1zZywgX0Zyb20sIFN0YXRlLCBfRSkgLT4iIG4+CisgICAgICAgICJ7cmVwbHksIFJlcGx5ID0gW10sIFN0YXRlfS4iIG4KKyAgICAgICAgbgorCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgQ2FsbGVkIGJ5IHRoZSBsZWFkZXIgaW4gcmVzcG9uc2UgdG8gYSBnZW5fbGVhZGVyOmxlYWRlcl9jYXN0LzIgbGVhZGVyX2Nhc3QoKSIgbj4KKyAgICAgICAgIiUlIGhhbmRsZV9sZWFkZXJfY2FzdChNc2c6OnRlcm0oKSwgU3RhdGU6OnRlcm0oKSwgRTo6ZWxlY3Rpb24oKSkgLT4gY29tbW9uUmVwbHkoKSIgbj4KKyAgICAgICAgIiUlIiBuPgorICAgICAgICAiJSUgQlVHOiBUaGlzIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuIiBuPgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImhhbmRsZV9sZWFkZXJfY2FzdChfTXNnLCBTdGF0ZSwgX0UpIC0+IiBuPgorICAgICAgICAie29rLCBTdGF0ZX0uIiBuCisgICAgICAgIG4KKworCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIENhbGxlZCBieSBlYWNoIGNhbmRpZGF0ZSBpbiByZXNwb25zZSB0byBhIG1lc3NhZ2UgZnJvbSB0aGUgbGVhZGVyLiAiIG4+CisgICAgICAgICIlJSBJbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCB0aGUgbGVhZGVyIHBhc3NlcyBhbiB1cGRhdGUgZnVuY3Rpb24gdG8gYmUgIiBuPgorICAgICAgICAiJSUgYXBwbGllZCB0byB0aGUgY2FuZGlkYXRlJ3Mgc3RhdGUuICIgbj4KKyAgICAgICAgIiUlICIgbj4KKyAgICAgICAgIiUlIGZyb21fbGVhZGVyKE1zZzo6dGVybSgpLCBTdGF0ZTo6c3RhdGUoKSwgRTo6ZWxlY3Rpb24oKSkgLT4ge29rLCBOU3RhdGV9ICIgbj4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICJmcm9tX2xlYWRlcihNU0csIFN0YXRlLCBfRSkgLT4gIiBuPgorICAgICAgICAie29rLCBTdGF0ZX0uICIgbgorICAgICAgICBuCisKKyAgICAgICAgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBGdW5jdGlvbjogaGFuZGxlX2NhbGwvMyIgbgorICAgICAgICAiJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGNhbGwgbWVzc2FnZXMiIG4KKyAgICAgICAgIiUlIFJldHVybnM6IHtyZXBseSwgUmVwbHksIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgICAgICIlJSAgICAgICAgICB7cmVwbHksIFJlcGx5LCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICAgICAiJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlfSAgICAgICAgICAgICAgIHwiIG4KKyAgICAgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gICAgICB8IiBuCisgICAgICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBSZXBseSwgU3RhdGV9ICAgfCAodGVybWluYXRlLzIgaXMgY2FsbGVkKSIgbgorICAgICAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiaGFuZGxlX2NhbGwoUmVxdWVzdCwgRnJvbSwgU3RhdGUpIC0+IiBuPgorICAgICAgICAiUmVwbHkgPSBvaywiIG4+CisgICAgICAgICJ7cmVwbHksIFJlcGx5LCBTdGF0ZX0uIiBuCisgICAgICAgIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgRnVuY3Rpb246IGhhbmRsZV9jYXN0LzIiIG4KKyAgICAgICAgIiUlIERlc2NyaXB0aW9uOiBIYW5kbGluZyBjYXN0IG1lc3NhZ2VzIiBuCisgICAgICAgICIlJSBSZXR1cm5zOiB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgIHwiIG4KKyAgICAgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiaGFuZGxlX2Nhc3Qoc3RvcCwgU3RhdGUpIC0+IiBuPgorICAgICAgICAie3N0b3AsIG5vcm1hbCwgU3RhdGV9OyIgbgorICAgICAgICAiaGFuZGxlX2Nhc3QoTXNnLCBTdGF0ZSkgLT4iIG4+CisgICAgICAgICJ7bm9yZXBseSwgU3RhdGV9LiIgbgorICAgICAgICBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIEZ1bmN0aW9uOiBoYW5kbGVfaW5mby8yIiBuCisgICAgICAgICIlJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgYWxsIG5vbiBjYWxsL2Nhc3QgbWVzc2FnZXMiIG4KKyAgICAgICAgIiUlIFJldHVybnM6IHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgfCIgbgorICAgICAgICAiJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8IiBuCisgICAgICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKSIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICJoYW5kbGVfaW5mbyhJbmZvLCBTdGF0ZSkgLT4iIG4+CisgICAgICAgICJ7bm9yZXBseSwgU3RhdGV9LiIgbgorICAgICAgICBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIEZ1bmN0aW9uOiB0ZXJtaW5hdGUvMiIgbgorICAgICAgICAiJSUgRGVzY3JpcHRpb246IFNodXRkb3duIHRoZSBzZXJ2ZXIiIG4KKyAgICAgICAgIiUlIFJldHVybnM6IGFueSAoaWdub3JlZCBieSBnZW5fc2VydmVyKSIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICJ0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4iIG4+CisgICAgICAgICJvay4iIG4KKyAgICAgICAgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBGdW5jOiBjb2RlX2NoYW5nZS8zIiBuCisgICAgICAgICIlJSBQdXJwb3NlOiBDb252ZXJ0IHByb2Nlc3Mgc3RhdGUgd2hlbiBjb2RlIGlzIGNoYW5nZWQiIG4KKyAgICAgICAgIiUlIFJldHVybnM6IHtvaywgTmV3U3RhdGV9IiBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImNvZGVfY2hhbmdlKE9sZFZzbiwgU3RhdGUsIF9FLCBfRXh0cmEpIC0+IiBuPgorICAgICAgICAie29rLCBTdGF0ZX0uIiBuCisgICAgICAgIG4KKyAgICAgICAgCisgICAgICAgIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBnZW5lcmljIGxlYWRlci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworKGRlZnZhciBlcmxhbmctc2tlbC1jb3JiYS1jYWxsYmFjaworICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIEluY2x1ZGUgZmlsZXMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gImluaXQvMSwgIiBuPiAidGVybWluYXRlLzIsIiBuPiAiY29kZV9jaGFuZ2UvMyIgbgorCSIgICAgICAgIF0pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4KKwkiICAgICAgICBdKS4iIG4KKwluIAorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgTWFjcm9zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLXJlY29yZChzdGF0ZSwge30pLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IGluaXQvMSIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogSW5pdGlhdGVzIHRoZSBzZXJ2ZXIiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBTdGF0ZX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7b2ssIFN0YXRlLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbn0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoW10pIC0+IiBuPgorICAgICJ7b2ssICNzdGF0ZXt9fS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jdGlvbjogdGVybWluYXRlLzIiIG4KKyAgICAiJSUgRGVzY3JpcHRpb246IFNodXRkb3duIHRoZSBzZXJ2ZXIiIG4KKyAgICAiJSUgUmV0dXJuczogYW55IChpZ25vcmVkIGJ5IGdlbl9zZXJ2ZXIpIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJ0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4iIG4+CisgICAgIm9rLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBjb2RlX2NoYW5nZS8zIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBDb252ZXJ0IHByb2Nlc3Mgc3RhdGUgd2hlbiBjb2RlIGlzIGNoYW5nZWQiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBOZXdTdGF0ZX0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImNvZGVfY2hhbmdlKE9sZFZzbiwgU3RhdGUsIEV4dHJhKSAtPiIgbj4KKyAgICAie29rLCBTdGF0ZX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGxpYnJhcnkgbW9kdWxlLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworCisMCis7OyBGb250LWxvY2sgdmFyaWFibGVzCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1tb2Rlcm4tcAorICAoY29uZCAoKD49IGVybGFuZy1lbWFjcy1tYWpvci12ZXJzaW9uIDIwKSB0KQorCShlcmxhbmcteGVtYWNzLXAgKD49IGVybGFuZy1lbWFjcy1taW5vci12ZXJzaW9uIDE0KSkKKwkoKD0gZXJsYW5nLWVtYWNzLW1ham9yLXZlcnNpb24gMTkpICg+PSBlcmxhbmctZW1hY3MtbWlub3ItdmVyc2lvbiAyOSkpCisJKHQgbmlsKSkKKyAgIk5vbi1uaWwgd2hlbiB0aGlzIHZlcnNpb24gb2YgRW1hY3MgdXNlcyBhIG1vZGVybiB2ZXJzaW9uIG9mIEZvbnQgTG9jay4KKworVGhpcyBpcyBkZXRlcm1pbmF0ZWQgYnkgY2hlY2tpbmcgdGhlIHZlcnNpb24gb2YgRW1hY3MgdXNlZCwgdGhlIGFjdHVhbAorZm9udC1sb2NrIGNvZGUgaXMgbm90IGxvYWRlZC4iKQorCisKKzs7IFRoZSBuZXh0IGZldyB2YXJpYWJsZXMgZGVmaW5lIGRpZmZlcmVudCBFcmxhbmcgZm9udC1sb2NrIHBhdHRlcm5zLgorOzsgVGhleSBjb3VsZCBiZSBhcHBlbmRlZCB0byBmb3JtIGEgY3VzdG9tIGZvbnQtbG9jayBhcHBlYXJlbmNlLgorOzsKKzs7IFRoZSBmdW5jdGlvbiBgZXJsYW5nLWZvbnQtbG9jay1zZXQtZmFjZScgY291bGQgYmUgdXNlZCB0byBjaGFuZ2UKKzs7IHRoZSBmYWNlIG9mIGEgcGF0dGVybi4KKzs7Cis7OyBOb3RlIHRoYXQgRXJsYW5nIHN0cmluZ3MgYW5kIGF0b21zIGFyZSBoaWdodGxpZ2h0ZWQgd2l0aCB1c2luZworOzsgc3ludGFjdGl4IGFuYWx5c2lzLgorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZnVuYworICAobGlzdAorICAgKGxpc3QgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKigiKQorCSAxICdmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlIHQpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIGEgZnVuY3Rpb24gaGVhZGVyLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1kb2xsYXIKKyAgKGxpc3QKKyAgIChsaXN0ICJcXChcXCRcXChbXlxcXVxcfFxcXFxcXChbXjAtN15cbl1cXHxbMC03XStcXHxcXF5bYS16QS1aXVxcKVxcKVxcKSIKKwkgMSAnZm9udC1sb2NrLXN0cmluZy1mYWNlKSkKKyAgIkZvbnQgbG9jayBrZXl3b3JkIGhpZ2hsaWdodGluZyBudW1iZXJzIGluIGFzY2lpLWZvcm0gKGUuZy4gJEEpLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1hcnJvdworICAobGlzdAorICAgKGxpc3QgIlxcKC0+XFx8Oi1cXClcXChcXHMgXFx8JFxcKSIgMiAnZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgY2xhdXNlIGFycm93LiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1sYworICAobGlzdAorICAgKGxpc3QgIlxcKDwtXFwpXFwoXFxzIFxcfCRcXCkiIDEgJ2ZvbnQtbG9jay1rZXl3b3JkLWZhY2UpCisgICAobGlzdCAiXFwofHxcXClcXChcXHMgXFx8JFxcKSIgMSAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgbGlzdCBjb21wcmVoZW5zaW9uIG9wZXJhdG9ycy4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMta2V5d29yZHMKKyAgKGxpc3QKKyAgIChsaXN0IChjb25jYXQgIlxcPFxcKGFmdGVyXFx8YmVnaW5cXHxjXFwoYXRjaFxcfGFzZVxcKVxcfGVuZFxcfGZ1blxcfGlmIgorCQkgIlxcfG9mXFx8cmVjZWl2ZVxcfHdoZW5cXHxxdWVyeVxcKVxcKFteYS16QS1aMC05X11cXHwkXFwpIikKKwkgMSAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgRXJsYW5nIGtleXdvcmRzLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1hdHRyCisgIChsaXN0CisgICAgKGxpc3QgKGNvbmNhdCAiXlxcKC0iIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFwpXFxzICpcXChcXC5cXHwoXFwpIikKKwkgIDEgJ2ZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIGF0dHJpYnVlcy4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtcXVvdGVzCisgIChsaXN0CisgICAgKGxpc3QgImBcXChbLSthLXpBLVowLTlfOipdWy0rYS16QS1aMC05XzoqXStcXCknIgorCSAgMQorCSAgKGlmIGVybGFuZy1mb250LWxvY2stbW9kZXJuLXAKKwkgICAgICAnZm9udC1sb2NrLXJlZmVyZW5jZS1mYWNlCisJICAgICdmb250LWxvY2sta2V5d29yZC1mYWNlKQorCSAgdCkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgd29yZHMgaW4gc2luZ2xlIHF1b3RlcyBpbiBjb21tZW50cy4KKworVGhpcyBpcyBub3QgdGhlIGtleXdvcmQgaGlnaHRsaWdodGluZyBFcmxhbmcgc3RyaW5ncyBhbmQgYXRvbXMsIHRoZXkKK2FyZSBoaWdobGlnaHRlZCBieSBzeW50YWN0aWMgYW5hbHlzaXMuIikKKworOzsgTm90ZTogVGhlIGd1YXJkIGBmbG9hdCcgY29sbGlkZXMgd2l0aCB0aGUgYmlmIGBmbG9hdCcuCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZ3VhcmRzCisgIChsaXN0CisgICAobGlzdAorCisgICAgOzsgWFhYOiAKKzsgICAgIChjb25jYXQgIlxcPCIKKzsgCSAgICAocmVnZXhwLW9wdCAnKCJhdG9tIiAiYmluYXJ5IiAiY29uc3RhbnQiICJmbG9hdCIgImludGVnZXIiICJsaXN0IiAKKzsgCQkJICAibnVtYmVyIiAicGlkIiAicG9ydCIgInJlZmVyZW5jZSIgInJlY29yZCIgInR1cGxlIikgCis7IAkJCXQpCis7IAkgICAgIlxcPiIpCisKKyAgICAoY29uY2F0ICJcXDxcXChhdG9tXFx8YmluYXJ5XFx8Y29uc3RhbnRcXHxmbG9hdFxcfGludGVnZXJcXHxsaXN0XFx8IgorCSAgICAibnVtYmVyXFx8cFxcKGlkXFx8b3J0XFwpXFx8cmVcXChmZXJlbmNlXFx8Y29yZFxcKVxcfHR1cGxlIgorCSAgICAiXFwpXFxzICooIikKKworCSAxCisJIChpZiBlcmxhbmctZm9udC1sb2NrLW1vZGVybi1wCisJICAgICAnZm9udC1sb2NrLXJlZmVyZW5jZS1mYWNlCisJICAgJ2ZvbnQtbG9jay1rZXl3b3JkLWZhY2UpKSkKKyAgIkZvbnQgbG9jayBrZXl3b3JkIGhpZ2hsaWdodGluZyBndWFyZHMuIikKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWJpZnMKKyAgKGxpc3QKKyAgICAobGlzdAorICAgICAoY29uY2F0CisgICAgICAiXFw8XFwoIgorICAgICAgImFcXChic1xcfGxpdmVcXHxwcGx5XFx8dG9tX3RvX2xpc3RcXClcXHwiCisgICAgICAiYmluYXJ5X3RvX1xcKGxpc3RcXHx0ZXJtXFwpXFx8IgorICAgICAgImNvbmNhdF9iaW5hcnlcXHxkXFwoYXRlXFx8aXNjb25uZWN0X25vZGVcXClcXHwiCisgICAgICAiZVxcKGxlbWVudFxcfHJhc2VcXHx4aXRcXClcXHwiCisgICAgICAiZmxvYXRcXChcXHxfdG9fbGlzdFxcKVxcfCIKKyAgICAgICJnXFwoYXJiYWdlX2NvbGxlY3RcXHxldFxcKFxcfF9rZXlzXFwpXFx8cm91cF9sZWFkZXJcXClcXHwiCisgICAgICAiaFxcKGFsdFxcfGRcXClcXHwiCisgICAgICAiaVxcKG50ZVxcKGdlcl90b19saXN0XFx8cm5hbF9iaWZcXClcXHxzX2FsaXZlXFwpXFx8IgorICAgICAgImxcXChlbmd0aFxcfGlcXChua1xcfHN0X3RvX1xcKGF0b21cXHxiaW5hcnlcXHxmbG9hdFxcfGludGVnZXIiCisgICAgICAiXFx8cGlkXFx8dHVwbGVcXClcXClcXClcXHwiCisgICAgICAibWFrZV9yZWZcXHxub1xcKGRlXFwoXFx8X1xcKGxpbmtcXHx1bmxpbmtcXClcXHxzXFwpXFx8dGFsaXZlXFwpXFx8IgorICAgICAgIm9wZW5fcG9ydFxcfCIKKyAgICAgICJwXFwoaWRfdG9fbGlzdFxcfHJvY2Vzc1xcKF9cXChmbGFnXFx8aW5mb1xcKVxcfGVzXFwpXFx8dXRcXClcXHwiCisgICAgICAiclxcKGVnaXN0ZXJcXChcXHxlZFxcKVxcfG91bmRcXClcXHwiCisgICAgICAic1xcKGVcXChsZlxcfHRlbGVtZW50XFwpXFx8aXplXFx8IgorICAgICAgInBcXChhd25cXChcXHxfbGlua1xcKVxcfGxpdF9iaW5hcnlcXClcXHx0YXRpc3RpY3NcXClcXHwiCisgICAgICAidFxcKGVybV90b19iaW5hcnlcXHxocm93XFx8aW1lXFx8bFxcfCIKKyAgICAgICJyXFwoYWNlXFx8dW5jXFwpXFx8dXBsZV90b19saXN0XFwpXFx8IgorICAgICAgInVuXFwobGlua1xcfHJlZ2lzdGVyXFwpXFx8d2hlcmVpcyIKKyAgICAgICJcXClcXHMgKigiKQorICAgICAxCisgICAgICdmb250LWxvY2sta2V5d29yZC1mYWNlKSkKKyAgIkZvbnQgbG9jayBrZXl3b3JkIGhpZ2hsaWdodGluZyBidWlsdCBpbiBmdW5jdGlvbnMuIikKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLW1hY3JvcworICAobGlzdAorICAgKGxpc3QgKGNvbmNhdCAiP1xccyAqXFwoIiBlcmxhbmctYXRvbS1yZWdleHAKKwkJICJcXHwiIGVybGFuZy12YXJpYWJsZS1yZWdleHAgIlxcKVxcPiIpCisJIDEgKGlmIGVybGFuZy1mb250LWxvY2stbW9kZXJuLXAKKwkgICAgICAgJ2ZvbnQtbG9jay1yZWZlcmVuY2UtZmFjZQorCSAgICAgJ2ZvbnQtbG9jay10eXBlLWZhY2UpKQorICAgKGxpc3QgKGNvbmNhdCAiXi1cXChkZWZpbmVcXHxpZm4/ZGVmXFwpXFxzICooXFxzICpcXCgiIGVybGFuZy1hdG9tLXJlZ2V4cAorCQkgIlxcfCIgZXJsYW5nLXZhcmlhYmxlLXJlZ2V4cCAiXFwpXFw+IikKKwkgMiAoaWYgZXJsYW5nLWZvbnQtbG9jay1tb2Rlcm4tcAorCSAgICAgICAnZm9udC1sb2NrLXJlZmVyZW5jZS1mYWNlCisJICAgICAnZm9udC1sb2NrLXR5cGUtZmFjZSkpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIG1hY3Jvcy4KK1RoaXMgbXVzdCBiZSBwbGFjZWQgaW4gZnJvbnQgb2YgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtdmFycycuIikKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLXJlY29yZHMKKyAgKGxpc3QKKyAgIChsaXN0IChjb25jYXQgIiNcXHMgKiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXD4iKQorCSAxICdmb250LWxvY2stdHlwZS1mYWNlKQorICAgOzsgRG9uJ3QgaGlnaGxpZ2h0IG51bWVyaWNhbCBjb25zdGFudHMuCisgICAobGlzdCAiXFw8WzAtOV1bMC05XT8jXFwoWzAtOWEtZkFfRl0rXFwpXFw+IgorCSAxIG5pbCB0KQorICAgKGxpc3QgKGNvbmNhdCAiXi1yZWNvcmQoXFxzICoiIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFw+IikKKwkgMSAnZm9udC1sb2NrLXR5cGUtZmFjZSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgRXJsYW5nIHJlY29yZHMuCitUaGlzIG11c3QgYmUgcGxhY2VkIGluIGZyb250IG9mIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLXZhcnMnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy12YXJzCisgIChsaXN0CisgICAgKGxpc3QgKGNvbmNhdCAiXFw8IiBlcmxhbmctdmFyaWFibGUtcmVnZXhwICJcXD4iKQorCSAgMSAoaWYgZXJsYW5nLWZvbnQtbG9jay1tb2Rlcm4tcAorCQknZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZQorCSAgICAgICdmb250LWxvY2stdHlwZS1mYWNlKSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgRXJsYW5nIHZhcmlhYmxlcy4KK011c3QgYmUgcHJlY2VkZWQgYnkgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtbWFjcm9zJyBhbmQgYC1yZWNvcmRzJwordG8gd29yayBwcm9wZXJseS4iKQorCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xCisgIChhcHBlbmQgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1mdW5jCisJICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWRvbGxhcgorCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1hcnJvdworCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1rZXl3b3JkcykKKyAgOzsgRG9jU3RyaW5nT3JpZzogZXJsYW5nLWZvbnQtbG9jay1rZXl3b3JkcworICAiRm9udC1sb2NrIGtleXdvcmRzIHVzZWQgYnkgRXJsYW5nIE1vZGUuCisKK1RoZXJlIGV4aXN0cyB0aHJlZSBsZXZlbHMgb2YgRm9udCBMb2NrIGtleXdvcmRzIGZvciBFcmxhbmc6CisgIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTEnIC0gRnVuY3Rpb24gaGVhZGVycyBhbmQgcmVzZXJ2ZWQga2V5d29yZHMuCisgIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTInIC0gQmlmcywgZ3VhcmRzIGFuZCBgc2luZ2VsIHF1b3RlcycuCisgIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTMnIC0gVmFyaWFibGVzLCBtYWNyb3MgYW5kIHJlY29yZHMuCisKK1RvIHVzZSBhIHNwZWNpZmljIGxldmVsLCBwbGVhc2Ugc2V0IHRoZSB2YXJpYWJsZQorYGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24nIHRvIHRoZSBhcHByb3ByaWF0ZSBsZXZlbC4gIE5vdGUgdGhhdCB0aGUKK3ZhcmlhYmxlIG11c3QgYmUgc2V0IGJlZm9yZSBFcmxhbmcgbW9kZSBpcyBhY3RpdmF0ZWQuCisKK0V4YW1wbGU6CisgICAgKHNldHEgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbiAyKSIpCisKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTIKKyAgKGFwcGVuZCBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTEKKwkgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtYXR0cgorCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1xdW90ZXMKKwkgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZ3VhcmRzCisJICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWJpZnMpCisgIDs7IERvY1N0cmluZ0NvcHk6IGVybGFuZy1mb250LWxvY2sta2V5d29yZHMKKyAgIkZvbnQtbG9jayBrZXl3b3JkcyB1c2VkIGJ5IEVybGFuZyBNb2RlLgorCitUaGVyZSBleGlzdHMgdGhyZWUgbGV2ZWxzIG9mIEZvbnQgTG9jayBrZXl3b3JkcyBmb3IgRXJsYW5nOgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xJyAtIEZ1bmN0aW9uIGhlYWRlcnMgYW5kIHJlc2VydmVkIGtleXdvcmRzLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yJyAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zJyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyB1c2UgYSBzcGVjaWZpYyBsZXZlbCwgcGxlYXNlIHNldCB0aGUgdmFyaWFibGUKK2Bmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uJyB0byB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwuICBOb3RlIHRoYXQgdGhlCit2YXJpYWJsZSBtdXN0IGJlIHNldCBiZWZvcmUgRXJsYW5nIG1vZGUgaXMgYWN0aXZhdGVkLgorCitFeGFtcGxlOgorICAgIChzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24gMikiKQorCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zCisgIChhcHBlbmQgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yCisJICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLW1hY3JvcworCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1yZWNvcmRzCisJICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLXZhcnMpCisgIDs7IERvY1N0cmluZ0NvcHk6IGVybGFuZy1mb250LWxvY2sta2V5d29yZHMKKyAgIkZvbnQtbG9jayBrZXl3b3JkcyB1c2VkIGJ5IEVybGFuZyBNb2RlLgorCitUaGVyZSBleGlzdHMgdGhyZWUgbGV2ZWxzIG9mIEZvbnQgTG9jayBrZXl3b3JkcyBmb3IgRXJsYW5nOgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xJyAtIEZ1bmN0aW9uIGhlYWRlcnMgYW5kIHJlc2VydmVkIGtleXdvcmRzLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yJyAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zJyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyB1c2UgYSBzcGVjaWZpYyBsZXZlbCwgcGxlYXNlIHNldCB0aGUgdmFyaWFibGUKK2Bmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uJyB0byB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwuICBOb3RlIHRoYXQgdGhlCit2YXJpYWJsZSBtdXN0IGJlIHNldCBiZWZvcmUgRXJsYW5nIG1vZGUgaXMgYWN0aXZhdGVkLgorCitFeGFtcGxlOgorICAgIChzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24gMikiKQorCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTMKKyAgOzsgRG9jU3RyaW5nQ29weTogZXJsYW5nLWZvbnQtbG9jay1rZXl3b3JkcworICAiRm9udC1sb2NrIGtleXdvcmRzIHVzZWQgYnkgRXJsYW5nIE1vZGUuCisKK1RoZXJlIGV4aXN0cyB0aHJlZSBsZXZlbHMgb2YgRm9udCBMb2NrIGtleXdvcmRzIGZvciBFcmxhbmc6CisgIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTEnIC0gRnVuY3Rpb24gaGVhZGVycyBhbmQgcmVzZXJ2ZWQga2V5d29yZHMuCisgIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTInIC0gQmlmcywgZ3VhcmRzIGFuZCBgc2luZ2xlIHF1b3RlcycuCisgIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTMnIC0gVmFyaWFibGVzLCBtYWNyb3MgYW5kIHJlY29yZHMuCisKK1RvIHVzZSBhIHNwZWNpZmljIGxldmVsLCBwbGVhc2Ugc2V0IHRoZSB2YXJpYWJsZQorYGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24nIHRvIHRoZSBhcHByb3ByaWF0ZSBsZXZlbC4gIE5vdGUgdGhhdCB0aGUKK3ZhcmlhYmxlIG11c3QgYmUgc2V0IGJlZm9yZSBFcmxhbmcgbW9kZSBpcyBhY3RpdmF0ZWQuCisKK0V4YW1wbGU6CisgICAgKHNldHEgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbiAyKSIpCisKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLXN5bnRheC10YWJsZSBuaWwKKyAgIlN5bnRheCB0YWJsZSB1c2VkIGJ5IEZvbnQgTG9jayBtb2RlLgorCitUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdGFuZGFyZCBFcmxhbmcgTW9kZQorc3ludGF4IHRhYmxlIGlzIHRoYXQgYF8nIGlzIHRyZWF0ZWQgYXMgcGFydCBvZiB3b3JkcyBieQordGhpcyBzeW50YXggdGFibGUuCisKK1VuZm9ydHVhbnRlbHksIFhFbWFjcyBoYXNuJ3QgZ290IHN1cHBvcnQgZm9yIGEgc3BlY2lhbCBGb250CitMb2NrIHN5bnRheCB0YWJsZS4gIFRoZSBlZmZlY3QgaXMgdGhhdCBgYXBwbHknIGluIHRoZSBhdG9tCitgZm9vX2FwcGx5JyB3aWxsIGJlIGhpZ2hsaWdodGVkIGFzIGEgYmlmLiIpCisKKwwKKzs7OyBBdm9pZCBlcnJvcnMgd2hpbGUgY29tcGlsaW5nIHRoaXMgZmlsZS4KKworOzsgYGV2YWwtd2hlbi1jb21waWxlJyBpcyBub3QgZGVmaW5lZCBpbiBFbWFjcyAxOC4gIFdlIGRlZmluZSBpdCBhcyBhCis7OyBuby1vcC4KKyhvciAoZmJvdW5kcCAnZXZhbC13aGVuLWNvbXBpbGUpCisgICAgKGRlZm1hY3JvIGV2YWwtd2hlbi1jb21waWxlICgmcmVzdCByZXN0KSBuaWwpKQorCis7OyBUaGVzZSB1bW0uLi5mdW5jdGlvbnMgYXJlIG5ldyBpbiBFbWFjcyAyMC4gQW5kLCB5ZXMsIHVudGlsIHZlcnNpb24KKzs7IDE5LjI3IEVtYWNzIGJhY2txdW90ZXMgd2VyZSB0aGlzIHVnbHkuCisKKyhvciAoZmJvdW5kcCAndW5sZXNzKQorICAgIChkZWZtYWNybyB1bmxlc3MgKGNvbmRpdGlvbiAmcmVzdCBib2R5KQorICAgICAgIih1bmxlc3MgQ09ORElUSU9OIEJPRFkuLi4pOiBJZiBDT05ESVRJT04gaXMgZmFsc2UsIGRvIEJPRFksIGVsc2UgcmV0dXJuIG5pbC4iCisgICAgICAoYCAoaWYgKCwgY29uZGl0aW9uKSAKKwkgICAgIG5pbCAKKwkgICAoLEAgYm9keSkpKSkpCisKKyhvciAoZmJvdW5kcCAnd2hlbikKKyAgICAoZGVmbWFjcm8gd2hlbiAoY29uZGl0aW9uICZyZXN0IGJvZHkpCisgICAgICAiKHdoZW4gQ09ORElUSU9OIEJPRFkuLi4pOiBJZiBDT05ESVRJT04gaXMgdHJ1ZSwgZG8gQk9EWSwgZWxzZSByZXR1cm4gbmlsLiIKKyAgICAgIChgIChpZiAoLCBjb25kaXRpb24pCisJICAgICAocHJvZ24gKCxAIGJvZHkpKSAKKwkgICBuaWwpKSkpCisKKyhvciAoZmJvdW5kcCAnY2hhci1iZWZvcmUpCisgICAgKGRlZm1hY3JvIGNoYXItYmVmb3JlICgmb3B0aW9uYWwgcG9zKQorICAgICAgIlJldHVybiB0aGUgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IGJ1ZmZlciBqdXN0IGJlZm9yZSBQT1MuIgorICAgICAgKGAgKGNoYXItYWZ0ZXIgKDEtIChvciAoLCBwb3MpIChwb2ludCkpKSkpKSkKKwkJCSAgIAorKG9yIChmYm91bmRwICdyZWdleHAtb3B0KQorICAgIChkZWZ1biByZWdleHAtb3B0IChzdHJpbmdzICZvcHRpb25hbCBwYXJlbikKKyAgICAgICJSZXR1cm4gYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGFueSBzdHJpbmcgaW4KK1NUUklOR1MuIElmIFBBUkVOIGlzIHRydWUsIGl0IHdpbGwgYWx3YXlzIGVuY2xvc2UgdGhlIHJlZ3VsYXIKK2V4cHJlc3Npb24gaW4gcGFyZW50aGVzZXMuIAorCitVbmxpa2UgaXRzIEVtYWNzLTIwIG5hbWVzYWtlLCBpdCB3aWxsIG5vdCBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGVkCitleHByZXNzaW9uLiIKKyAgICAgIDs7IFRoaXMgc3RvcC1nYXAgZGVmaW5pdGlvbiBpcyB0YWtlbiBmcm9tCisgICAgICA7OyBfR05VX0VtYWNzX0xpc3BfUmVmZXJlbmNlX01hbnVhbF8sIGVkIDIuNSwgZm9yIEVtYWNzIDIwLjMuCisgICAgICAobGV0ICgob3BlbiAoaWYgcGFyZW4gIlxcKCIgIiIpKQorCSAgICAoY2xvc2UgKGlmIHBhcmVuICJcXCkiICIiKSkpCisJKGNvbmNhdCBvcGVuCisJCShtYXBjb25jYXQgJ3JlZ2V4cC1xdW90ZSBzdHJpbmdzICJcXHwiKQorCQljbG9zZSkpKSkKKworKGV2YWwtd2hlbi1jb21waWxlCisgIChpZiAob3IgKGZlYXR1cmVwICdieXRlY29tcCkKKwkgIChmZWF0dXJlcCAnYnl0ZS1jb21waWxlKSkKKyAgICAgIChwcm9nbgorCShjb25kICgoc3RyaW5nLW1hdGNoICJMdWNpZFxcfFhFbWFjcyIgZW1hY3MtdmVyc2lvbikKKwkgICAgICAgKHB1dCAnY29tbWVudC1pbmRlbnQtaG9vayAnYnl0ZS1vYnNvbGV0ZS12YXJpYWJsZSBuaWwpCisJICAgICAgIDs7IERvIG5vdCB3YXJuIGZvciB1bnVzZWQgdmFyaWFibGVzCisJICAgICAgIDs7IHdoZW4gY29tcGlsaW5nIHVuZGVyIFhFbWFjcy4KKwkgICAgICAgKHNldHEgYnl0ZS1jb21waWxlLXdhcm5pbmdzCisJCSAgICAgJyhmcmVlLXZhcnMgdW5yZXNvbHZlZCBjYWxsYXJncyByZWRlZmluZSkpKSkKKwkocmVxdWlyZSAnY29taW50KQorCShyZXF1aXJlICdjb21waWxlKSkpKQorCisMCisoZGVmdW4gZXJsYW5nLXZlcnNpb24gKCkKKyAgIlJldHVybiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEVybGFuZyBtb2RlLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKGludGVyYWN0aXZlLXApCisgICAgICAobWVzc2FnZSAiRXJsYW5nIG1vZGUgdmVyc2lvbiAlcywgd3JpdHRlbiBieSBBbmRlcnMgTGluZGdyZW4iCisJICAgICAgIGVybGFuZy12ZXJzaW9uKSkKKyAgZXJsYW5nLXZlcnNpb24pCisKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBlcmxhbmctbW9kZSAoKQorICAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBFcmxhbmcgc291cmNlIGZpbGVzIGluIEVtYWNzLgorSXQga25vd3MgYWJvdXQgc3ludGF4IGFuZCBjb21tZW50LCBpdCBjYW4gaW5kZW50IGNvZGUsIGl0IGlzIGNhcGFibGUKK29mIGZvbnRpZnlpbmcgdGhlIHNvdXJjZSBmaWxlLCB0aGUgVEFHUyBjb21tYW5kcyBhcmUgYXdhcmUgb2YgRXJsYW5nCittb2R1bGVzLCBhbmQgdGhlIEVybGFuZyBtYW4gcGFnZXMgY2FuIGJlIGFjY2Vzc2VkLgorCitTaG91bGQgdGhpcyBtb2R1bGUsIFwiZXJsYW5nLmVsXCIsIGJlIGluc3RhbGxlZCBwcm9wZXJseSwgRXJsYW5nIG1vZGUKK2lzIGFjdGl2YXRlZCB3aGVuZXZlciBhbiBFcmxhbmcgc291cmNlIG9yIGhlYWRlciBmaWxlIGlzIGxvYWRlZCBpbnRvCitFbWFjcy4gIFRvIGluZGljYXRlIHRoaXMsIHRoZSBtb2RlIGxpbmUgc2hvdWxkIGNvbnRhaW4gdGhlIHdvcmQKK1wiRXJsYW5nXCIuCisKK1RoZSBtYWluIGZlYXR1cmUgb2YgRXJsYW5nIG1vZGUgaXMgaW5kZW50YXRpb24sIHByZXNzIFRBQiBhbmQgdGhlCitjdXJyZW50IGxpbmUgd2lsbCBiZSBpbmRlbnRlZCBjb3JyZWN0bHkuCisKK0NvbW1lbnRzIHN0YXJ0aW5nIHdpdGggb25seSBvbmUgYCUnIGFyZSBpbmRlbnRlZCB0byB0aGUgY29sdW1uIHN0b3JlZAoraW4gdGhlIHZhcmlhYmxlIGBjb21tZW50LWNvbHVtbicuICBDb21tZW50cyBzdGFydGluZyB3aXRoIHR3byBgJSc6cworYXJlIGluZGVudGVkIHdpdGggdGhlIHNhbWUgaW5kZW50YXRpb24gYXMgY29kZS4gIENvbW1lbnRzIHN0YXJ0aW5nCit3aXRoIGF0IGxlYXN0IHRocmVlIGAlJzpzIGFyZSBpbmRlbnRlZCB0byB0aGUgZmlyc3QgY29sdW1uLgorCitIb3dldmVyLCBFcmxhbmcgbW9kZSBjb250YWlucyBtdWNoIG1vcmUsIHRoaXMgaXMgYSBsaXN0IG9mIHRoZSBtb3N0Cit1c2VmdWwgY29tbWFuZHM6CisgICAgIFRBQiAgICAgLSBJbmRlbnQgdGhlIGxpbmUuCisgICAgIEMtYyBDLXEgLSBJbmRlbnQgY3VycmVudCBmdW5jdGlvbi4KKyAgICAgTS07ICAgICAtIENyZWF0ZSBhIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAgTS1xICAgICAtIEZpbGwgYSBjb21tZW50LCBpLmUuIHdyYXAgbGluZXMgc28gdGhhdCB0aGV5IChob3BlZnVsbHkpCisJCSB3aWxsIGxvb2sgYmV0dGVyLgorICAgICBNLWEgICAgIC0gR290byB0aGUgYmVnaW5uaW5nIG9mIGFuIEVybGFuZyBjbGF1c2UuCisgICAgIE0tQy1hICAgLSBEaXR0byBmb3IgZnVuY3Rpb24uCisgICAgIE0tZSAgICAgLSBHb3RvIHRoZSBlbmQgb2YgYW4gRXJsYW5nIGNsYXVzZS4KKyAgICAgTS1DLWUgICAtIERpdHRvIGZvciBmdW5jdGlvbi4KKyAgICAgTS1oICAgICAtIE1hcmsgY3VycmVudCBFcmxhbmcgY2xhdXNlLgorICAgICBNLUMtaCAgIC0gRGl0dG8gZm9yIGZ1bmN0aW9uLgorICAgICBDLWMgQy16IC0gU3RhcnQsIG9yIHN3aXRjaCB0bywgYW4gaW5mZXJpb3IgRXJsYW5nIHNoZWxsLgorICAgICBDLWMgQy1rIC0gQ29tcGlsZSBjdXJyZW50IGZpbGUuCisgICAgIEMteCBgICAgLSBOZXh0IGVycm9yLgorICAgICAsICAgICAgIC0gRWxlY3RyaWMgY29tbWEuCisgICAgIDsgICAgICAgLSBFbGVjdHJpYyBzZW1pY29sb24uCisKK0VybGFuZyBtb2RlIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGFnYWluc3QgdGhlIG1vZHVsZSBuYW1lIHdoZW4KK3NhdmluZywgd2hlbmV2ZXIgYSBtaXNtYXRjaCBvY2N1cnMgRXJsYW5nIG1vZGUgb2ZmZXJzIHRvIG1vZGlmeSB0aGUKK3NvdXJjZS4KKworVGhlIHZhcmlhYmxlIGBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMnIGNvbnRyb2xzIHRoZSBlbGVjdHJpYworY29tbWFuZHMuICBUbyBkZWFjdGl2YXRlIGFsbCBvZiB0aGVtLCBzZXQgaXQgdG8gbmlsLgorCitUaGVyZSBleGlzdHMgYSBsYXJnZSBudW1iZXIgb2YgY29tbWFuZHMgYW5kIHZhcmlhYmxlcyBpbiB0aGUgRXJsYW5nCittb2R1bGUuICBQbGVhc2UgcHJlc3MgYE0teCBhcHJvcG9zIFJFVCBlcmxhbmcgUkVUJyB0byBzZWUgYSBjb21wbGV0ZQorbGlzdC4gIFByZXNzIGBDLWggZiBuYW1lLW9mLWZ1bmN0aW9uIFJFVCcgYW5kIGBDLWggdiBuYW1lLW9mLXZhcmlhYmxlCitSRVQndG8gc2VlIHRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLAorcmVzcGVjdGl2ZWx5LgorCitPbiBlbnRyeSB0byB0aGlzIG1vZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBob29rIGBlcmxhbmctbW9kZS1ob29rJyBpcworZXhlY3V0ZWQuCisKK1BsZWFzZSBzZWUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBgZXJsYW5nLmVsJyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorYW5kIGV4YW1wbGVzIG9mIGhvb2tzLgorCitPdGhlciBjb21tYW5kczoKK1xce2VybGFuZy1tb2RlLW1hcH0iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGtpbGwtYWxsLWxvY2FsLXZhcmlhYmxlcykKKyAgKHNldHEgbWFqb3ItbW9kZSAnZXJsYW5nLW1vZGUpCisgIChzZXRxIG1vZGUtbmFtZSAiRXJsYW5nIikKKyAgKGVybGFuZy1zeW50YXgtdGFibGUtaW5pdCkKKyAgKGVybGFuZy1rZXltYXAtaW5pdCkKKyAgKGVybGFuZy1lbGVjdHJpYy1pbml0KQorICAoZXJsYW5nLW1lbnUtaW5pdCkKKyAgKGVybGFuZy1tb2RlLXZhcmlhYmxlcykKKyAgKGVybGFuZy1jaGVjay1tb2R1bGUtbmFtZS1pbml0KQorICAoZXJsYW5nLWFkZC1jb21waWxhdGlvbi1hbGlzdCBlcmxhbmctZXJyb3ItcmVnZXhwLWFsaXN0KQorICAoZXJsYW5nLW1hbi1pbml0KQorICAoZXJsYW5nLXRhZ3MtaW5pdCkKKyAgKGVybGFuZy1mb250LWxvY2staW5pdCkKKyAgKGVybGFuZy1za2VsLWluaXQpCisgIChydW4taG9va3MgJ2VybGFuZy1tb2RlLWhvb2spCisgIChpZiAoemVyb3AgKGJ1ZmZlci1zaXplKSkKKyAgICAgIChydW4taG9va3MgJ2VybGFuZy1uZXctZmlsZS1ob29rKSkpCisKKworKGRlZnVuIGVybGFuZy1zeW50YXgtdGFibGUtaW5pdCAoKQorICAoaWYgKG51bGwgZXJsYW5nLW1vZGUtc3ludGF4LXRhYmxlKQorICAgIChsZXQgKCh0YWJsZSAobWFrZS1zeW50YXgtdGFibGUpKSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cbiAiPiIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCIgIlwiIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8jICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8kICIvIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8lICI8IiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8mICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cJyAiXCIiIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPyogIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPysgIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPy0gIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPy8gIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPzogIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPzwgIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPz0gIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPz4gIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xcICJcXCIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XyAiXyIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/fCAiLiIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XiAiLyIgdGFibGUpCisKKyAgICAgIDs7IFBzZXVkbyBiaXQtc3ludGF4OiBMYXRpbjEgZG91YmxlIGFuZ2xlIHF1b3RlcyBhcyBwYXJlbnMuCisgICAgICA7Oyhtb2RpZnktc3ludGF4LWVudHJ5ID9cMjUzICIoP1wyNzMiIHRhYmxlKQorICAgICAgOzsobW9kaWZ5LXN5bnRheC1lbnRyeSA/XDI3MyAiKT9cMjUzIiB0YWJsZSkKKworICAgICAgKHNldHEgZXJsYW5nLW1vZGUtc3ludGF4LXRhYmxlIHRhYmxlKSkpCisKKyAgKHNldC1zeW50YXgtdGFibGUgZXJsYW5nLW1vZGUtc3ludGF4LXRhYmxlKSkKKworCisoZGVmdW4gZXJsYW5nLWtleW1hcC1pbml0ICgpCisgIChpZiBlcmxhbmctbW9kZS1tYXAKKyAgICAgIG5pbAorICAgIChzZXRxIGVybGFuZy1tb2RlLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKKyAgICAoZXJsYW5nLW1vZGUtY29tbWFuZHMgZXJsYW5nLW1vZGUtbWFwKSkKKyAgKHVzZS1sb2NhbC1tYXAgZXJsYW5nLW1vZGUtbWFwKSkKKworCisoZGVmdW4gZXJsYW5nLW1vZGUtY29tbWFuZHMgKG1hcCkKKyAgKGRlZmluZS1rZXkgbWFwICJcdCIgICAgICAgICdlcmxhbmctaW5kZW50LWNvbW1hbmQpCisgIChkZWZpbmUta2V5IG1hcCAiOyIJICAgICAgJ2VybGFuZy1lbGVjdHJpYy1zZW1pY29sb24pCisgIChkZWZpbmUta2V5IG1hcCAiLCIJICAgICAgJ2VybGFuZy1lbGVjdHJpYy1jb21tYSkKKyAgKGRlZmluZS1rZXkgbWFwICI8IiAgICAgICAgICdlcmxhbmctZWxlY3RyaWMtbHQpCisgIChkZWZpbmUta2V5IG1hcCAiPiIgICAgICAgICAnZXJsYW5nLWVsZWN0cmljLWd0KQorICAoZGVmaW5lLWtleSBtYXAgIlxDLW0iICAgICAgJ2VybGFuZy1lbGVjdHJpYy1uZXdsaW5lKQorICAoZGVmaW5lLWtleSBtYXAgIlwxNzciICAgICAgJ2JhY2t3YXJkLWRlbGV0ZS1jaGFyLXVudGFiaWZ5KQorICAoZGVmaW5lLWtleSBtYXAgIlxNLXEiICAgICAgJ2VybGFuZy1maWxsLXBhcmFncmFwaCkKKyAgKGRlZmluZS1rZXkgbWFwICJcTS1cQy1hIiAgICdlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLWUiICAgJ2VybGFuZy1lbmQtb2YtZnVuY3Rpb24pCisgIChkZWZpbmUta2V5IG1hcCAiXE0tXEMtaCIgICAnZXJsYW5nLW1hcmstZnVuY3Rpb24pCisgIChkZWZpbmUta2V5IG1hcCAiXE0tXHQiICAgICAnZXJsYW5nLWNvbXBsZXRlLXRhZykKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXE0tXHQiICd0ZW1wby1jb21wbGV0ZS10YWcpCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xNLWEiICAnZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xNLWIiICAndGVtcG8tYmFja3dhcmQtbWFyaykKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXE0tZSIgICdlcmxhbmctZW5kLW9mLWNsYXVzZSkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXE0tZiIgICd0ZW1wby1mb3J3YXJkLW1hcmspCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xNLWgiICAnZXJsYW5nLW1hcmstY2xhdXNlKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1jIiAgJ2NvbW1lbnQtcmVnaW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1qIiAgJ2VybGFuZy1nZW5lcmF0ZS1uZXctY2xhdXNlKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1rIiAgJ2VybGFuZy1jb21waWxlKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1sIiAgJ2VybGFuZy1jb21waWxlLWRpc3BsYXkpCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xDLXMiICAnZXJsYW5nLXNob3ctc3ludGFjdGljLWluZm9ybWF0aW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1xIiAgJ2VybGFuZy1pbmRlbnQtZnVuY3Rpb24pCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xDLXUiICAnZXJsYW5nLXVuY29tbWVudC1yZWdpb24pCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xDLXkiICAnZXJsYW5nLWNsb25lLWFyZ3VtZW50cykKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMteiIgICdlcmxhbmctc2hlbGwtZGlzcGxheSkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy14YCIgICAgICdlcmxhbmctbmV4dC1lcnJvcikpCisKKworKGRlZnVuIGVybGFuZy1lbGVjdHJpYy1pbml0ICgpCisgIDs7IFNldCB1cCBlbGVjdHJpYyBjaGFyYWN0ZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aAorICA7OyBkZWxzZWwvcGVuZGluZy1kZWwgbW9kZS4gQWxzbywgc2V0IHVwIHRleHQgcHJvcGVydGllcyBmb3IgYml0CisgIDs7IHN5bnRheCBoYW5kbGluZy4KKyAgKG1hcGNhciAjJyhsYW1iZGEgKGNtZCkKKwkgICAgICAocHV0IGNtZCAnZGVsZXRlLXNlbGVjdGlvbiB0KQk7Zm9yIGRlbHNlbCAoRW1hY3MpCisJICAgICAgKHB1dCBjbWQgJ3BlbmRpbmctZGVsZXRlIHQpKQk7Zm9yIHBlbmRpbmctZGVsIChYRW1hY3MpCisJICAnKGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24KKwkgICAgZXJsYW5nLWVsZWN0cmljLWNvbW1hCisJICAgIGVybGFuZy1lbGVjdHJpYy1ndCkpCisKKyAgKHB1dCAnYml0c3ludGF4LW9wZW4tb3V0ZXIgJ3N5bnRheC10YWJsZSAnKDQgLiA/PikpCisgIChwdXQgJ2JpdHN5bnRheC1vcGVuLW91dGVyICdyZWFyLW5vbnN0aWNreSAnKGNhdGVnb3J5KSkKKyAgKHB1dCAnYml0c3ludGF4LW9wZW4taW5uZXIgJ3JlYXItbm9uc3RpY2t5ICcoY2F0ZWdvcnkpKQorICAocHV0ICdiaXRzeW50YXgtY2xvc2UtaW5uZXIgJ3JlYXItbm9uc3RpY2t5ICcoY2F0ZWdvcnkpKQorICAocHV0ICdiaXRzeW50YXgtY2xvc2Utb3V0ZXIgJ3N5bnRheC10YWJsZSAnKDUgLiA/PCkpCisgIChwdXQgJ2JpdHN5bnRheC1jbG9zZS1vdXRlciAncmVhci1ub25zdGlja3kgJyhjYXRlZ29yeSkpCisgIChzZXRxIHBhcnNlLXNleHAtbG9va3VwLXByb3BlcnRpZXMgJ3QpKQorCisKKworKGRlZnVuIGVybGFuZy1tb2RlLXZhcmlhYmxlcyAoKQorICAob3IgZXJsYW5nLW1vZGUtYWJicmV2LXRhYmxlCisgICAgICAoZGVmaW5lLWFiYnJldi10YWJsZSAnZXJsYW5nLW1vZGUtYWJicmV2LXRhYmxlICgpKSkKKyAgKHNldHEgbG9jYWwtYWJicmV2LXRhYmxlIGVybGFuZy1tb2RlLWFiYnJldi10YWJsZSkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3BhcmFncmFwaC1zdGFydCkKKyAgKHNldHEgcGFyYWdyYXBoLXN0YXJ0IChjb25jYXQgIl4kXFx8IiBwYWdlLWRlbGltaXRlcikpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdwYXJhZ3JhcGgtc2VwYXJhdGUpCisgIChzZXRxIHBhcmFncmFwaC1zZXBhcmF0ZSBwYXJhZ3JhcGgtc3RhcnQpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdwYXJhZ3JhcGgtaWdub3JlLWZpbGwtcHJlZml4KQorICAoc2V0cSBwYXJhZ3JhcGgtaWdub3JlLWZpbGwtcHJlZml4IHQpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdyZXF1aXJlLWZpbmFsLW5ld2xpbmUpCisgIChzZXRxIHJlcXVpcmUtZmluYWwtbmV3bGluZSB0KQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZGVmdW4tcHJvbXB0LXJlZ2V4cCkKKyAgKHNldHEgZGVmdW4tcHJvbXB0LXJlZ2V4cCBlcmxhbmctZGVmdW4tcHJvbXB0LXJlZ2V4cCkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtc3RhcnQpCisgIChzZXRxIGNvbW1lbnQtc3RhcnQgIiUiKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1zdGFydC1za2lwKQorICAoc2V0cSBjb21tZW50LXN0YXJ0LXNraXAgIiUrXFxzICoiKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1jb2x1bW4pCisgIChzZXRxIGNvbW1lbnQtY29sdW1uIDQ4KQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnaW5kZW50LWxpbmUtZnVuY3Rpb24pCisgIChzZXRxIGluZGVudC1saW5lLWZ1bmN0aW9uICdlcmxhbmctaW5kZW50LWNvbW1hbmQpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdpbmRlbnQtcmVnaW9uLWZ1bmN0aW9uKQorICAoc2V0cSBpbmRlbnQtcmVnaW9uLWZ1bmN0aW9uICdlcmxhbmctaW5kZW50LXJlZ2lvbikKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1pbmRlbnQtZnVuY3Rpb24pICdlcmxhbmctY29tbWVudC1pbmRlbnQpCisgIChpZiAoPD0gZXJsYW5nLWVtYWNzLW1ham9yLXZlcnNpb24gMTgpCisgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21tZW50LWluZGVudC1ob29rKSAnZXJsYW5nLWNvbW1lbnQtaW5kZW50KSkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyc2Utc2V4cC1pZ25vcmUtY29tbWVudHMpIHQpCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2RhYmJyZXYtY2FzZS1mb2xkLXNlYXJjaCkgbmlsKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdpbWVudS1wcmV2LWluZGV4LXBvc2l0aW9uLWZ1bmN0aW9uKQorICAgICAgICdlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdpbWVudS1leHRyYWN0LWluZGV4LW5hbWUtZnVuY3Rpb24pCisgICAgICAgJ2VybGFuZy1nZXQtZnVuY3Rpb24tbmFtZSkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAndGVtcG8tbWF0Y2gtZmluZGVyKQorICAgICAgICJbXi1hLXpBLVowLTlfXVxcKFstYS16QS1aMC05X10qXFwpXFw9IikpCisKKworOzsgQ29tcGlsYXRpb24uCis7OworOzsgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQgcGFja2FnZSBgY29tcGlsYXRpb24nLAorOzsgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGdvIHRvIGVycm9ycyB1c2luZyBgZXJsYW5nLW5leHQtZXJyb3InLgorOzsKKzs7IFRoZSBub3JtYWwgYGNvbXBpbGUnIGNvbW1hbmQgd29ya3Mgb2Zjb3Vyc2UuICBGb3IgYmVzdCByZXN1bHQsIHBsZWFzZQorOzsgZXhlY3V0ZSBgbWFrZScgd2l0aCB0aGUgYC13JyBmbGFnLgorOzsKKzs7IFBsZWFzZSBzZWUgdGhlIHZhcmlhYmxlcyBuYW1lZCBgY29tcGlsaW5nLS4uJyBhYm92ZS4KKworKGRlZnVuIGVybGFuZy1hZGQtY29tcGlsYXRpb24tYWxpc3QgKGFsaXN0KQorICAocmVxdWlyZSAnY29tcGlsZSkKKyAgKGNvbmQgKChib3VuZHAgJ2NvbXBpbGF0aW9uLWVycm9yLXJlZ2V4cC1hbGlzdCkgOyBFbWFjcyAxOQorCSAod2hpbGUgYWxpc3QKKwkgICAob3IgKGFzc29jIChjYXIgKGNhciBhbGlzdCkpIGNvbXBpbGF0aW9uLWVycm9yLXJlZ2V4cC1hbGlzdCkKKwkgICAgICAgKHNldHEgY29tcGlsYXRpb24tZXJyb3ItcmVnZXhwLWFsaXN0CisJCSAgICAgKGNvbnMgKGNhciBhbGlzdCkgY29tcGlsYXRpb24tZXJyb3ItcmVnZXhwLWFsaXN0KSkpCisJICAgKHNldHEgYWxpc3QgKGNkciBhbGlzdCkpKSkKKwkoKGJvdW5kcCAnY29tcGlsYXRpb24tZXJyb3ItcmVnZXhwKQorCSA7OyBFbWFjcyAxOCwgIE9ubHkgb25lIHJlZ2V4cCBpcyBhbGxvd2VkLgorCSAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpCisJCSAgJ2NvbXBpbGF0aW9uLWVycm9yLXJlZ2V4cCAoY2FyIChjYXIgYWxpc3QpKSkpKSkKKwwKKyhkZWZ1biBlcmxhbmctZm9udC1sb2NrLWluaXQgKCkKKyAgIkluaXRpYWxpemUgRm9udCBMb2NrIGZvciBFcmxhbmcgbW9kZS4iCisgIChvciBlcmxhbmctZm9udC1sb2NrLXN5bnRheC10YWJsZQorICAgICAgKHNldHEgZXJsYW5nLWZvbnQtbG9jay1zeW50YXgtdGFibGUKKwkgICAgKGxldCAoKHRhYmxlIChjb3B5LXN5bnRheC10YWJsZSBlcmxhbmctbW9kZS1zeW50YXgtdGFibGUpKSkKKwkgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XyAidyIgdGFibGUpCisJICAgICAgdGFibGUpKSkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLXN5bnRheC10YWJsZSkKKyAgICAgICBlcmxhbmctZm9udC1sb2NrLXN5bnRheC10YWJsZSkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLWJlZ2lubmluZy1vZi1zeW50YXgtZnVuY3Rpb24pCisgICAgICAgJ2VybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLWtleXdvcmRzKQorICAobGV0ICgobGV2ZWwgKGNvbmQgKChib3VuZHAgJ2ZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24pCisJCSAgICAgIChzeW1ib2wtdmFsdWUgJ2ZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24pKQorCQkgICAgICgoYm91bmRwICdmb250LWxvY2stdXNlLW1heGltYWwtZGVjb3JhdGlvbikKKwkJICAgICAgKHN5bWJvbC12YWx1ZSAnZm9udC1sb2NrLXVzZS1tYXhpbWFsLWRlY29yYXRpb24pKQorCQkgICAgICh0IG5pbCkpKSkKKyAgICAoaWYgKGNvbnNwIGxldmVsKQorCShzZXRxIGxldmVsIChjZHItc2FmZSAob3IgKGFzc3EgJ2VybGFuZy1tb2RlIGxldmVsKQorCQkJCSAgKGFzc3EgdCBsZXZlbCkpKSkpCisgICAgOzsgYGxldmVsJyBjYW4gaGVyZSBiZToKKyAgICA7OyAgICAgIEEgbnVtYmVyIC0gVGhlIGZvbnRpZmljYXRpb24gbGV2ZWwKKyAgICA7OyAgICAgIG5pbCAgICAgIC0gVXNlIHRoZSBkZWZhdWx0CisgICAgOzsgICAgICB0ICAgICAgICAtIFVzZSBtYXhpbXVtCisgICAgKGNvbmQgKChlcSBsZXZlbCBuaWwpCisJICAgKHNldCAnZm9udC1sb2NrLWtleXdvcmRzIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMpKQorCSAgKChlcSBsZXZlbCAxKQorCSAgIChzZXQgJ2ZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTEpKQorCSAgKChlcSBsZXZlbCAyKQorCSAgIChzZXQgJ2ZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTIpKQorCSAgKHQKKwkgICAoc2V0ICdmb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zKSkpKQorCisgIDs7IE1vZGVybiBmb250LWxvY2tzIGNhbiBoYW5kbGUgdGhlIGFib3ZlIG11Y2ggbW9yZSBlbGVnYW50OgorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmb250LWxvY2stZGVmYXVsdHMpCisgICAgICAgJygoZXJsYW5nLWZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTEKKyAgICAgICAgICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zKQorCSBuaWwgbmlsICgoP18gLiAidyIpKSBlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZQorCSAoZm9udC1sb2NrLWNvbW1lbnQtc3RhcnQtcmVnZXhwIC4gIiUiKQorCSAoZm9udC1sb2NrLW1hcmstYmxvY2stZnVuY3Rpb24gLiBlcmxhbmctbWFyay1jbGF1c2UpKSkpCisKKworCis7OyBVc2VmdWwgd2hlbiBkZWZpbmlnIHlvdXQgb3duIGtleXdvcmRzLgorKGRlZnVuIGVybGFuZy1mb250LWxvY2stc2V0LWZhY2UgKGtzICZyZXN0IGZhY2VzKQorICAiUmVwbGFjZSB0aGUgZmFjZSBjb21wb25lbnRzIGluIGEgbGlzdCBvZiBrZXl3b3Jkcy4KKworVGhlIGZpcnN0IGFyZ3VtZW50LCBLUywgaXMgYSBsaXN0IG9mIGtleXdvcmRzLiAgVGhlIHJlc3Qgb2YgdGhlCithcmd1bWVudHMgYXJlIGV4cHJlc3Npb25zIHRvIHJlcGxhY2UgdGhlIGZhY2UgaW5mb3JtYXRpb24gd2l0aC4gIFRoZQorZmlyc3QgZXhwcmVzc2lvbiByZXBsYWNlcyB0aGUgZmFjZSBvZiB0aGUgZmlyc3Qga2V5d29yZCwgdGhlIHNlY29uZAorZXhwcmVzc2lvbiB0aGUgc2Vjb25kIGtleXdvcmQgZXRjLgorCitTaG91bGQgYW4gZXhwcmVzc2lvbiBiZSBuaWwsIHRoZSBmYWNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtleXdvcmQgaXMKK25vdCBjaGFuZ2VkLgorCitTaG91bGQgZmV3ZXIgZXhwcmVzc2lvbnMgdGhhbiBrZXl3b3JkcyBiZSBnaXZlbiwgdGhlIGxhc3QgZXhwcmVzc2lvbgoraXMgdXNlZCBmb3IgYWxsIHJlbWFpbmluZyBrZXl3b3Jkcy4KKworTm9ybWFsbHksIHRoZSBleHByZXNzaW9ucyBhcmUganVzdCBhdG9tcyByZXByZXNlbnRpbmcgdGhlIG5ldyBmYWNlLgorVGhleSBjb3VsZCBob3dldmVyIGJlIG1vcmUgY29tcGxleCwgcmV0dXJuaW5nIGRpZmZlcmVudCBmYWNlcyBpbgorZGlmZmVyZW50IHNpdHVhdGlvbnMuCisKK1RoaXMgZnVuY3Rpb24gZG9lcyBvbmx5IGhhbmRsZSBrZXl3b3JkcyB3aXRoIGVsZW1lbnRzIG9uIHRoZSBmb3JtczoKKyAgKFJFR0VYUCBOVU1CRVIgRkFDRSkKKyAgKFJFR0VYUCBOVU1CRVIgRkFDRSBPVkVSV1JJVEUpCisKK1RoaXMgY291bGQgYmUgdXNlZCB3aGVuIGRlZmluaW5nIHlvdXIgb3duIHNwZWNpYWwgZm9udC1sb2NrIHNldHVwLCBlLmc6CisKK1woc2V0cSBteS1mb250LWxvY2sta2V5d29yZHMKKyAgICAgIChhcHBlbmQgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1mdW5jCisgICAgICAgICAgICAgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZG9sbGFyCisgICAgICAgICAgICAgIChlcmxhbmctZm9udC1sb2NrLXNldC1mYWNlCisgICAgICAgICAgICAgICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLW1hY3JvcyAnbXktbmVvbi1ncmVlbi1mYWNlKQorICAgICAgICAgICAgICAoZXJsYW5nLWZvbnQtbG9jay1zZXQtZmFjZQorICAgICAgICAgICAgICAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1sYyAnbXktZGVlcC1yZWQgJ215LWxpZ2h0LXJlZCkKKyAgICAgICAgICAgICAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1hdHRyKSkKKworRm9yIGEgbW9yZSBlbGFib3JhdGUgZXhhbXBsZSwgcGxlYXNlIHNlZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlCitgZXJsYW5nLmVsJy4iCisgIChsZXQgKChyZXMgJygpKSkKKyAgICAod2hpbGUga3MKKyAgICAgIChsZXQqICgocmVnZXhwIChjYXIgKGNhciBrcykpKQorCSAgICAgKG51bWJlciAoY2FyIChjZHIgKGNhciBrcykpKSkKKwkgICAgIChuZXctZmFjZSAoaWYgKGFuZCBmYWNlcyAoY2FyIGZhY2VzKSkKKwkJCSAgIChjYXIgZmFjZXMpCisJCQkgKGNhciAoY2RyIChjZHIgKGNhciBrcykpKSkpKQorCSAgICAgKG92ZXJ3cml0ZSAoY2FyIChjZHIgKGNkciAoY2RyIChjYXIga3MpKSkpKSkKKwkgICAgIChuZXcta2V5d29yZCAobGlzdCByZWdleHAgbnVtYmVyIG5ldy1mYWNlKSkpCisJKGlmIG92ZXJ3cml0ZSAobmNvbmMgbmV3LWtleXdvcmQgKGxpc3Qgb3ZlcndyaXRlKSkpCisJKHNldHEgcmVzIChjb25zIG5ldy1rZXl3b3JkIHJlcykpCisJKHNldHEga3MgKGNkciBrcykpCisJKGlmIChhbmQgZmFjZXMgKGNkciBmYWNlcykpCisJICAgIChzZXRxIGZhY2VzIChjZHIgZmFjZXMpKSkpKQorICAgIChucmV2ZXJzZSByZXMpKSkKKworCisoZGVmdW4gZXJsYW5nLWZvbnQtbG9jay1sZXZlbC0wICgpCisgIDs7IERvY1N0cmluZ09yaWc6IGZvbnQtY21kCisgICJGb250aWZ5IGN1cnJlbnQgYnVmZmVyLiBMZXZlbCByYW5nZXMgZnJvbSAwIChvZmYpIHRvIDMgKENocmlzdG1hcyBUcmVlKS4KKworVGhlIGZvbGxvd2luZyBmb250aWZpY2F0aW9uIGxldmVsIGV4aXN0czoKKyAgMCAtIE5vIGZvbnRpZmljYXRpb24KKyAgMSAtIEZ1bmN0aW9uIGhlYWRlcnMsIHJlc2VydmVkIGtleXdvcmRzLCBzdHJpbmdzIGFuZCBjb21tZW50cy4KKyAgMiAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICAzIC0gVmFyaWFibGVzLCBtYWNyb3MgYW5kIHJlY29yZHMuCisKK1RvIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGUgZm9udCBsb2NrIG1vZGUsIHBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZXMKK2luIHlvdXIgfi8uZW1hY3MgZmlsZToKKworXChkZWZ1biBteS1lcmxhbmctbW9kZS1ob29rICgpCisgIChjb25kICh3aW5kb3ctc3lzdGVtCisJIChmb250LWxvY2stbW9kZSAxKSkpKQorXChhZGQtaG9vayAnZXJsYW5nLW1vZGUtaG9vayAnbXktZXJsYW5nLW1vZGUtaG9vaykKK1woc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQpIgorICAoaW50ZXJhY3RpdmUpCisgIChmb250LWxvY2stbW9kZSAwKSkKKworCisoZGVmdW4gZXJsYW5nLWZvbnQtbG9jay1sZXZlbC0xICgpCisgIDs7IERvY1N0cmluZ0NvcHk6IGZvbnQtY21kCisgICJGb250aWZ5IGN1cnJlbnQgYnVmZmVyLiBMZXZlbCByYW5nZXMgZnJvbSAwIChvZmYpIHRvIDMgKENocmlzdG1hcyBUcmVlKS4KKworVGhlIGZvbGxvd2luZyBmb250aWZpY2F0aW9uIGxldmVsIGV4aXN0czoKKyAgMCAtIE5vIGZvbnRpZmljYXRpb24KKyAgMSAtIEZ1bmN0aW9uIGhlYWRlcnMsIHJlc2VydmVkIGtleXdvcmRzLCBzdHJpbmdzIGFuZCBjb21tZW50cy4KKyAgMiAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICAzIC0gVmFyaWFibGVzLCBtYWNyb3MgYW5kIHJlY29yZHMuCisKK1RvIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGUgZm9udCBsb2NrIG1vZGUsIHBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZXMKK2luIHlvdXIgfi8uZW1hY3MgZmlsZToKKworXChkZWZ1biBteS1lcmxhbmctbW9kZS1ob29rICgpCisgIChjb25kICh3aW5kb3ctc3lzdGVtCisJIChmb250LWxvY2stbW9kZSAxKSkpKQorXChhZGQtaG9vayAnZXJsYW5nLW1vZGUtaG9vayAnbXktZXJsYW5nLW1vZGUtaG9vaykKK1woc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQpIgorICAoaW50ZXJhY3RpdmUpCisgIChyZXF1aXJlICdmb250LWxvY2spCisgIChzZXQgJ2ZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTEpCisgIChmb250LWxvY2stbW9kZSAxKQorICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdmb250LWxvY2stZm9udGlmeS1idWZmZXIpKSkKKworCisoZGVmdW4gZXJsYW5nLWZvbnQtbG9jay1sZXZlbC0yICgpCisgIDs7IERvY1N0cmluZ0NvcHk6IGZvbnQtY21kCisgICJGb250aWZ5IGN1cnJlbnQgYnVmZmVyLiBMZXZlbCByYW5nZXMgZnJvbSAwIChvZmYpIHRvIDMgKENocmlzdG1hcyBUcmVlKS4KKworVGhlIGZvbGxvd2luZyBmb250aWZpY2F0aW9uIGxldmVsIGV4aXN0czoKKyAgMCAtIE5vIGZvbnRpZmljYXRpb24KKyAgMSAtIEZ1bmN0aW9uIGhlYWRlcnMsIHJlc2VydmVkIGtleXdvcmRzLCBzdHJpbmdzIGFuZCBjb21tZW50cy4KKyAgMiAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICAzIC0gVmFyaWFibGVzLCBtYWNyb3MgYW5kIHJlY29yZHMuCisKK1RvIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGUgZm9udCBsb2NrIG1vZGUsIHBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZXMKK2luIHlvdXIgfi8uZW1hY3MgZmlsZToKKworXChkZWZ1biBteS1lcmxhbmctbW9kZS1ob29rICgpCisgIChjb25kICh3aW5kb3ctc3lzdGVtCisJIChmb250LWxvY2stbW9kZSAxKSkpKQorXChhZGQtaG9vayAnZXJsYW5nLW1vZGUtaG9vayAnbXktZXJsYW5nLW1vZGUtaG9vaykKK1woc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQpIgorICAoaW50ZXJhY3RpdmUpCisgIChyZXF1aXJlICdmb250LWxvY2spCisgIChzZXQgJ2ZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTIpCisgIChmb250LWxvY2stbW9kZSAxKQorICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdmb250LWxvY2stZm9udGlmeS1idWZmZXIpKSkKKworCisoZGVmdW4gZXJsYW5nLWZvbnQtbG9jay1sZXZlbC0zICgpCisgIDs7IERvY1N0cmluZ0NvcHk6IGZvbnQtY21kCisgICJGb250aWZ5IGN1cnJlbnQgYnVmZmVyLiBMZXZlbCByYW5nZXMgZnJvbSAwIChvZmYpIHRvIDMgKENocmlzdG1hcyBUcmVlKS4KKworVGhlIGZvbGxvd2luZyBmb250aWZpY2F0aW9uIGxldmVsIGV4aXN0czoKKyAgMCAtIE5vIGZvbnRpZmljYXRpb24KKyAgMSAtIEZ1bmN0aW9uIGhlYWRlcnMsIHJlc2VydmVkIGtleXdvcmRzLCBzdHJpbmdzIGFuZCBjb21tZW50cy4KKyAgMiAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICAzIC0gVmFyaWFibGVzLCBtYWNyb3MgYW5kIHJlY29yZHMuCisKK1RvIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGUgZm9udCBsb2NrIG1vZGUsIHBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZXMKK2luIHlvdXIgfi8uZW1hY3MgZmlsZToKKworXChkZWZ1biBteS1lcmxhbmctbW9kZS1ob29rICgpCisgIChjb25kICh3aW5kb3ctc3lzdGVtCisJIChmb250LWxvY2stbW9kZSAxKSkpKQorXChhZGQtaG9vayAnZXJsYW5nLW1vZGUtaG9vayAnbXktZXJsYW5nLW1vZGUtaG9vaykKK1woc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQpIgorICAoaW50ZXJhY3RpdmUpCisgIChyZXF1aXJlICdmb250LWxvY2spCisgIChzZXQgJ2ZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLTMpCisgIChmb250LWxvY2stbW9kZSAxKQorICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdmb250LWxvY2stZm9udGlmeS1idWZmZXIpKSkKKworDAorKGRlZnVuIGVybGFuZy1tZW51LWluaXQgKCkKKyAgIkluaXQgbWVudXMgZm9yIEVybGFuZyBtb2RlLgorCitUaGUgdmFyaWFibGUgYGVybGFuZy1tZW51LWl0ZW1zJyBjb250YWluIGEgZGVzY3JpcHRpb24gb2YgdGhlIEVybGFuZworbW9kZSBtZW51LiAgTm9ybWFsbHksIHRoZSBsaXN0IGNvbnRhaW5zIGF0b21zLCByZXByZXNlbnRpbmcgdmFyaWFibGVzCitib3VuZCB0byBwaWVjZXMgb2YgdGhlIG1lbnUuCisKK1BlcnNvbmFsIGV4dGVudGlvbnMgY291bGQgYmUgYWRkZWQgdG8gYGVybGFuZy1tZW51LXBlcnNvbmFsLWl0ZW1zJy4KKworU2hvdWxkIGFueSB2YXJpYWJsZSBkZXNjcmliaW5nIHRoZSBtZW51IGNvbmZpZ3VyYXRpb24sIHRoaXMgZnVuY3Rpb24KK3Nob3VsZCBiZSBjYWxsZWQuIgorICAgIChlcmxhbmctbWVudS1pbnN0YWxsICJFcmxhbmciIGVybGFuZy1tZW51LWl0ZW1zIGVybGFuZy1tb2RlLW1hcCB0KSkKKworCisoZGVmdW4gZXJsYW5nLW1lbnUtaW5zdGFsbCAobmFtZSBpdGVtcyBrZXltYXAgJm9wdGlvbmFsIHBvcHVwKQorICAiSW5zdGFsbCBhIG1lbnUgb24gRW1hY3MgMTkgb3IgWEVtYWNzIGJhc2VkIG9uIGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uLgorCitOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBtZW51LgorCitJVEVNUyBpcyBhIGxpc3QuIFRoZSBlbGVtZW50cyBhcmUgZWl0aGVyIG5pbCByZXByZXNlbnRpbmcgYSBob3Jpc29udGFsCitsaW5lIG9yIGEgbGlzdCB3aXRoIHR3byBvciB0aHJlZSBlbGVtZW50cy4gIFRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZgordGhlIG1lbnUgaXRlbSwgdGhlIHNlY29uZCB0aGUgZnVuY3Rpb24gdG8gY2FsbCwgb3IgYSBzdWJtZW51LCBvbiB0aGUKK3NhbWUgc2FtZSBmb3JtIGFzIElURU1TLiAgVGhlIHRoaXJkIG9wdGlvbmFsIGVsZW1lbnQgaXMgYW4gZXhwcmVzc2lvbgord2hpY2ggaXMgZXZhbHVhdGVkIGV2ZXJ5IHRpbWUgdGhlIG1lbnUgaXMgZGlzcGxheWVkLiAgU2hvdWxkIHRoZQorZXhwcmVzc2lvbiBldmFsdWF0ZSB0byBuaWwgdGhlIG1lbnUgaXRlbSBpcyBnaG9zdGVkLgorCitLRVlNQVAgaXMgdGhlIGtleW1hcCB0byBhZGQgdG8gbWVudSB0by4gIChXaGVuIHVzaW5nIFhFbWFjcywgdGhlIG1lbnUKK3dpbGwgb25seSBiZSB2aXNpYmxlIHdoZW4gdGhpcyBtZW55IGlzIHRoZSBnbG9iYWwsIHRoZSBsb2NhbCwgb3IgYW4KK2FjdGl2YXRlZCBtaW5vciBtb2RlIGtleW1hcC4pCisKK0lmIFBPUFVQIGlzIG5vbi1uaWwsIHRoZSBtZW51IGlzIGJvdW5kIHRvIHRoZSBYRW1hY3MgYG1vZGUtcG9wdXAtbWVudScKK3ZhcmlhYmxlLCBpLmUuIGl0IHdpbGwgcG9wdXAgd2hlbiBwcmVzc2luZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLgorCitQbGVhc2Ugc2VlIHRoZSB2YXJpYWJsZSBgZXJsYW5nLW1lbnUtYmFzZS1pdGVtcycuIgorICAoY29uZCAoZXJsYW5nLXhlbWFjcy1wCisJIChsZXQgKChtZW51IChlcmxhbmctbWVudS14ZW1hY3MgbmFtZSBpdGVtcyBrZXltYXApKSkKKwkgICA7OyBXZSBhZGQgdGhlIG1lbnUgdG8gdGhlIGdsb2JhbCBtZW51YmFyLgorCSAgIDs7KGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0LWJ1ZmZlci1tZW51YmFyKQorCSAgIDs7ICAgICAgICAgKHN5bWJvbC12YWx1ZSAnY3VycmVudC1tZW51YmFyKSkKKwkgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdhZGQtc3VibWVudSkgbmlsIG1lbnUpCisJICAgKHNldGNkciBlcmxhbmcteGVtYWNzLXBvcHVwLW1lbnUgKGNkciBtZW51KSkKKwkgICAoaWYgKGFuZCBwb3B1cCAoYm91bmRwICdtb2RlLXBvcHVwLW1lbnUpKQorCSAgICAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpCisJCQknbW9kZS1wb3B1cC1tZW51IGVybGFuZy14ZW1hY3MtcG9wdXAtbWVudSkpKSkKKwkoKD49IGVybGFuZy1lbWFjcy1tYWpvci12ZXJzaW9uIDE5KQorCSAoZGVmaW5lLWtleSBrZXltYXAgKHZlY3RvciAnbWVudS1iYXIgKGludGVybiBuYW1lKSkKKwkgICAoZXJsYW5nLW1lbnUtbWFrZS1rZXltYXAgbmFtZSBpdGVtcykpKQorCSh0IG5pbCkpKQorCisKKyhkZWZ1biBlcmxhbmctbWVudS1tYWtlLWtleW1hcCAobmFtZSBpdGVtcykKKyAgIkJ1aWxkIGEgbWVudSBmb3IgRW1hY3MgMTkuIgorICAobGV0ICgobWVudW1hcCAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdtYWtlLXNwYXJzZS1rZXltYXApCisJCQkgIG5hbWUpKQorCShjb3VudCAwKQorCWlkIGRlZiBmaXJzdCBzZWNvbmQgdGhpcmQpCisgICAgKHNldHEgaXRlbXMgKHJldmVyc2UgaXRlbXMpKQorICAgICh3aGlsZSBpdGVtcworICAgICAgOzsgUmVwbGFjZSBhbnkgb2NjdXJlbmNlIG9mIGF0b21zIGJ5IHRoZWlyIHZhbHVlLgorICAgICAgKHdoaWxlIChhbmQgaXRlbXMgKGF0b20gKGNhciBpdGVtcykpIChub3QgKG51bGwgKGNhciBpdGVtcykpKSkKKwkoaWYgKGFuZCAoYm91bmRwIChjYXIgaXRlbXMpKQorCQkgKGxpc3RwIChzeW1ib2wtdmFsdWUgKGNhciBpdGVtcykpKSkKKwkgICAgKHNldHEgaXRlbXMgKGFwcGVuZCAocmV2ZXJzZSAoc3ltYm9sLXZhbHVlIChjYXIgaXRlbXMpKSkKKwkJCQkoY2RyIGl0ZW1zKSkpCisJICAoc2V0cSBpdGVtcyAoY2RyIGl0ZW1zKSkpKQorICAgICAgKHNldHEgZmlyc3QgKGNhci1zYWZlIChjYXIgaXRlbXMpKSkKKyAgICAgIChzZXRxIHNlY29uZCAoY2FyLXNhZmUgKGNkci1zYWZlIChjYXIgaXRlbXMpKSkpCisgICAgICAoc2V0cSB0aGlyZCAoY2FyLXNhZmUgKGNkci1zYWZlIChjZHItc2FmZSAoY2FyIGl0ZW1zKSkpKSkKKyAgICAgIChjb25kICgobnVsbCBmaXJzdCkKKwkgICAgIChzZXRxIGNvdW50ICgrIGNvdW50IDEpKQorCSAgICAgKHNldHEgaWQgKGludGVybiAoZm9ybWF0ICJzZXBhcmF0b3ItJWQiIGNvdW50KSkpCisJICAgICAoc2V0cSBkZWYgJygiLS0iIC4gbmlsKSkpCisJICAgICgoYW5kIChjb25zcCBzZWNvbmQpIChlcSAoY2FyIHNlY29uZCkgJ2xhbWJkYSkpCisJICAgICAoc2V0cSBjb3VudCAoKyBjb3VudCAxKSkKKwkgICAgIChzZXRxIGlkIChpbnRlcm4gKGZvcm1hdCAibGFtYmRhLSVkIiBjb3VudCkpKQorCSAgICAgKHNldHEgZGVmIChjb25zIGZpcnN0IHNlY29uZCkpKQorCSAgICAoKHN5bWJvbHAgc2Vjb25kKQorCSAgICAgKHNldHEgaWQgc2Vjb25kKQorCSAgICAgKHNldHEgZGVmIChjb25zIGZpcnN0IHNlY29uZCkpKQorCSAgICAodAorCSAgICAgKHNldHEgY291bnQgKCsgY291bnQgMSkpCisJICAgICAoc2V0cSBpZCAoaW50ZXJuIChmb3JtYXQgInN1Ym1lbnUtJWQiIGNvdW50KSkpCisJICAgICAoc2V0cSBkZWYgKGVybGFuZy1tZW51LW1ha2Uta2V5bWFwIGZpcnN0IHNlY29uZCkpKSkKKyAgICAgIChkZWZpbmUta2V5IG1lbnVtYXAgKHZlY3RvciBpZCkgZGVmKQorICAgICAgKGlmIHRoaXJkCisJICAocHV0IGlkICdtZW51LWVuYWJsZSB0aGlyZCkpCisgICAgICAoc2V0cSBpdGVtcyAoY2RyIGl0ZW1zKSkpCisgICAgKGNvbnMgbmFtZSBtZW51bWFwKSkpCisKKworKGRlZnVuIGVybGFuZy1tZW51LXhlbWFjcyAobmFtZSBpdGVtcyAmb3B0aW9uYWwga2V5bWFwKQorICAiQnVpbGQgYSBtZW51IGZvciBYRW1hY3MuIgorICAobGV0ICgocmVzICcoKSkKKwlmaXJzdCBzZWNvbmQgdGhpcmQgZW50cnkpCisgICAgKHdoaWxlIGl0ZW1zCisgICAgICA7OyBSZXBsYWNlIGFueSBvY2N1cmVuY2Ugb2YgYXRvbXMgYnkgdGhlaXIgdmFsdWUuCisgICAgICAod2hpbGUgKGFuZCBpdGVtcyAoYXRvbSAoY2FyIGl0ZW1zKSkgKG5vdCAobnVsbCAoY2FyIGl0ZW1zKSkpKQorCShpZiAoYW5kIChib3VuZHAgKGNhciBpdGVtcykpCisJCSAobGlzdHAgKHN5bWJvbC12YWx1ZSAoY2FyIGl0ZW1zKSkpKQorCSAgICAoc2V0cSBpdGVtcyAoYXBwZW5kIChyZXZlcnNlIChzeW1ib2wtdmFsdWUgKGNhciBpdGVtcykpKQorCQkJCShjZHIgaXRlbXMpKSkKKwkgIChzZXRxIGl0ZW1zIChjZHIgaXRlbXMpKSkpCisgICAgICAoc2V0cSBmaXJzdCAoY2FyLXNhZmUgKGNhciBpdGVtcykpKQorICAgICAgKHNldHEgc2Vjb25kIChjYXItc2FmZSAoY2RyLXNhZmUgKGNhciBpdGVtcykpKSkKKyAgICAgIChzZXRxIHRoaXJkIChjYXItc2FmZSAoY2RyLXNhZmUgKGNkci1zYWZlIChjYXIgaXRlbXMpKSkpKQorICAgICAgKGNvbmQgKChudWxsIGZpcnN0KQorCSAgICAgKHNldHEgcmVzIChjb25zICItLS0tLS0iIHJlcykpKQorCSAgICAoKHN5bWJvbHAgc2Vjb25kKQorCSAgICAgKHNldHEgcmVzIChjb25zICh2ZWN0b3IgZmlyc3Qgc2Vjb25kIChvciB0aGlyZCB0KSkgcmVzKSkpCisJICAgICgoYW5kIChjb25zcCBzZWNvbmQpIChlcSAoY2FyIHNlY29uZCkgJ2xhbWJkYSkpCisJICAgICAoc2V0cSByZXMgKGNvbnMgKHZlY3RvciBmaXJzdCAobGlzdCAnY2FsbC1pbnRlcmFjdGl2ZWx5IHNlY29uZCkKKwkJCQkgICAgIChvciB0aGlyZCB0KSkgcmVzKSkpCisJICAgICh0CisJICAgICAoc2V0cSByZXMgKGNvbnMgKGNvbnMgZmlyc3QKKwkJCQkgICAoY2RyIChlcmxhbmctbWVudS14ZW1hY3MKKwkJCQkJIGZpcnN0IHNlY29uZCkpKQorCQkJICAgICByZXMpKSkpCisgICAgICAoc2V0cSBpdGVtcyAoY2RyIGl0ZW1zKSkpCisgICAgKHNldHEgcmVzIChyZXZlcnNlIHJlcykpCisgICAgOzsgV2hlbiBhZGRpbmcgYSBtZW51IHRvIGEgbWlub3ItbW9kZSBrZXltYXAgdW5kZXIgRW1hY3MgMTksCisgICAgOzsgaXQgZGlzYXBwZWFycyB3aGVuIHRoZSBtb2RlIGlzIGRpc2FibGVkLiAgVGhlIGV4cHJlc3Npb24KKyAgICA7OyBnZW5lcmF0ZWQgYmVsb3cgaW1pdGF0ZXMgdGhpcyBiZWhhdmlvdXIuCisgICAgOzsgKFRoaXMgY291bGQgYmUgZXhwcmVzc2VkIG11Y2ggY2xlYXJlciB1c2luZyBiYWNrcXVvdGVzLAorICAgIDs7IGJ1dCBJIGRvbid0IHdhbnQgdG8gcHVsbCBpbiBldmVyeSBwYWNrYWdlLikKKyAgICAoaWYga2V5bWFwCisJKGxldCAoKGV4cHIgKGxpc3QgJ29yCisJCQkgIChsaXN0ICdlcSBrZXltYXAgJ2dsb2JhbC1tYXApCisJCQkgIChsaXN0ICdlcSBrZXltYXAgKGxpc3QgJ2N1cnJlbnQtbG9jYWwtbWFwKSkKKwkJCSAgKGxpc3QgJ3N5bWJvbC12YWx1ZQorCQkJCShsaXN0ICdjYXItc2FmZQorCQkJCSAgICAgIChsaXN0ICdyYXNzcQorCQkJCQkgICAga2V5bWFwCisJCQkJCSAgICAnbWlub3ItbW9kZS1tYXAtYWxpc3QpKSkpKSkKKwkgIChzZXRxIHJlcyAoY29ucyAnOmluY2x1ZGVkIChjb25zIGV4cHIgcmVzKSkpKSkKKyAgICAoY29ucyBuYW1lIHJlcykpKQorCisKKyhkZWZ1biBlcmxhbmctbWVudS1zdWJzdGl0dXRlIChpdGVtcyBhbGlzdCkKKyAgIlN1YnN0aXR1dGUgZnVuY3Rpb25zIGluIG1lbnUgZGVzY3JpYmVkIGJ5IElURU1TLgorCitUaGUgbWVudSBJVEVNUyBpcyB1cGRhdGVkIGRlc3RydWN0aXZlbHkuCisKK0FMSVNUIGlzIGxpc3Qgb2YgcGFpcnMgd2hlcmUgdGhlIGNhciBpcyB0aGUgb2xkIGZ1bmN0aW9uIGFuZCBjZHIgdGhlIG5ldy4iCisgIChsZXQgKGZpcnN0IHNlY29uZCBwYWlyKQorICAgICh3aGlsZSBpdGVtcworICAgICAgKHNldHEgZmlyc3QgKGNhci1zYWZlIChjYXIgaXRlbXMpKSkKKyAgICAgIChzZXRxIHNlY29uZCAoY2FyLXNhZmUgKGNkci1zYWZlIChjYXIgaXRlbXMpKSkpCisgICAgICAoY29uZCAoKG51bGwgZmlyc3QpKQorCSAgICAoKHN5bWJvbHAgc2Vjb25kKQorCSAgICAgKHNldHEgcGFpciAoYW5kIHNlY29uZCAoYXNzcSBzZWNvbmQgYWxpc3QpKSkKKwkgICAgIChpZiBwYWlyCisJCSAoc2V0Y2FyIChjZHIgKGNhciBpdGVtcykpIChjZHIgcGFpcikpKSkKKwkgICAgKChhbmQgKGNvbnNwIHNlY29uZCkgKGVxIChjYXIgc2Vjb25kKSAnbGFtYmRhKSkpCisJICAgICh0CisJICAgICAoZXJsYW5nLW1lbnUtc3Vic3RpdHV0ZSBzZWNvbmQgYWxpc3QpKSkKKyAgICAgIChzZXRxIGl0ZW1zIChjZHIgaXRlbXMpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctbWVudS1hZGQtYWJvdmUgKGVudHJ5IGFib3ZlIGl0ZW1zKQorICAiQWRkIG1lbnUgRU5UUlkgYWJvdmUgbWVudSBlbnRyeSBBQk9WRSBpbiBtZW51IElURU1TLgorRG8gbm90aGluZyBpZiB0aGUgaXRlbXMgYWxyZWFkeSBzaG91bGQgYmUgaW4gdGhlIG1lbnUuCitTaG91bGQgQUJPVkUgbm90IGJlIGluIHRoZSBsaXN0LCB0aGUgZW50cnkgaXMgYWRkZWQgYXQKK3RoZSBib3R0b20gb2YgdGhlIG1lbnUuCisKK1RoZSBuZXcgbWVudSBpcyByZXR1cm5lZC4gIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiB0aGF0IHRoZSBvcmlnaW5hbAorbWVudSBpcyBsZWZ0IHVuY2hhbmdlZC4KKworVGhlIGVxdWFsaXR5IHRlc3QgaXMgcGVyZm9ybWVkIGJ5IGBlcScuCisKK0V4YW1wbGU6ICAoZXJsYW5nLW1lbnUtYWRkLWFib3ZlICdteS1lcmxhbmctbWVudS1pdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VybGFuZy1tZW51LW1hbi1pdGVtcykiCisgIChlcmxhbmctbWVudS1hZGQtYmVsb3cgZW50cnkgYWJvdmUgaXRlbXMgdCkpCisKKworKGRlZnVuIGVybGFuZy1tZW51LWFkZC1iZWxvdyAoZW50cnkgYmVsb3cgaXRlbXMgJm9wdGlvbmFsIGFib3ZlLXApCisgICJBZGQgbWVudSBFTlRSWSBiZWxvdyBtZW51IGl0ZW1zIEJFTE9XIGluIHRoZSBFcmxhbmcgbWVudS4KK0RvIG5vdGhpbmcgaWYgdGhlIGl0ZW1zIGFscmVhZHkgc2hvdWxkIGJlIGluIHRoZSBtZW51LgorU2hvdWxkIEJFTE9XIG5vdCBiZSBpbiB0aGUgbGlzdCwgaXRlbXMgaXMgYWRkZWQgYXQgdGhlIGJvdHRvbQorb2YgdGhlIG1lbnUuCisKK1RoZSBuZXcgbWVudSBpcyByZXR1cm5lZC4gIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiB0aGF0IHRoZSBvcmlnaW5hbAorbWVudSBpcyBsZWZ0IHVuY2hhbmdlZC4KKworVGhlIGVxdWFsaXR5IHRlc3QgaXMgcGVyZm9ybWVkIGJ5IGBlcScuCisKK0V4YW1wbGU6CisKK1woc2V0cSBlcmxhbmctbWVudS1pdGVtcworICAgICAgKGVybGFuZy1tZW51LWFkZC1iZWxvdyAnbXktZXJsYW5nLW1lbnUtaXRlbXMKKwkgCSAgICAgICAgICAgICAnZXJsYW5nLW1lbnUtYmFzZS1pdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcmxhbmctbWVudS1pdGVtcykpIgorICAoaWYgKG1lbXEgZW50cnkgaXRlbXMpCisgICAgICBpdGVtcwkJCQk7IFJldHVybiB0aGUgb3JpZ2luYWwgbWVudS4KKyAgICAobGV0ICgoaGVhZCAnKCkpCisJICAoZG9uZSBuaWwpCisJICByZXMpCisgICAgICAod2hpbGUgKG5vdCBkb25lKQorCShjb25kICgobnVsbCBpdGVtcykKKwkgICAgICAgKHNldHEgcmVzIChhcHBlbmQgaGVhZCAobGlzdCBlbnRyeSkpKQorCSAgICAgICAoc2V0cSBkb25lIHQpKQorCSAgICAgICgoZXEgYmVsb3cgKGNhciBpdGVtcykpCisJICAgICAgIChzZXRxIHJlcworCQkgICAgIChpZiBhYm92ZS1wCisJCQkgKGFwcGVuZCBoZWFkIChjb25zIGVudHJ5IGl0ZW1zKSkKKwkJICAgICAgIChhcHBlbmQgaGVhZCAoY29ucyAoY2FyIGl0ZW1zKQorCQkJCQkgIChjb25zIGVudHJ5IChjZHIgaXRlbXMpKSkpKSkKKwkgICAgICAgKHNldHEgZG9uZSB0KSkKKwkgICAgICAodAorCSAgICAgICAoc2V0cSBoZWFkIChhcHBlbmQgaGVhZCAobGlzdCAoY2FyIGl0ZW1zKSkpKQorCSAgICAgICAoc2V0cSBpdGVtcyAoY2RyIGl0ZW1zKSkpKSkKKyAgICAgIHJlcykpKQorCisoZGVmdW4gZXJsYW5nLW1lbnUtZGVsZXRlIChlbnRyeSBpdGVtcykKKyAgIkRlbGV0ZSBFTlRSWSBmcm9tIG1lbnUgSVRFTVMuCisKK1RoZSBuZXcgbWVudSBpcyByZXR1cm5lZC4gIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiB0aGF0IHRoZSBvcmlnaW5hbAorbWVudSBpcyBsZWZ0IHVuY2hhbmdlZC4iCisgIChkZWxxIGVudHJ5IGl0ZW1zKSkKKwwKKzs7IE1hbiBjb2RlOgorCisoZGVmdW4gZXJsYW5nLW1hbi1pbml0ICgpCisgICJBZGQgbWVudXMgY29udGFpbmluZyB0aGUgbWFudWFsIHBhZ2VzIG9mIHRoZSBFcmxhbmcuCisKK1RoZSB2YXJpYWJsZSBgZXJsYW5nLW1hbi1kaXJzJyBjb250YWlucyBlbnRyaWVzIGRlc2NyaWJpbmcKK3RoZSBsb2NhdGlvbiBvZiB0aGUgbWFudWFsIHBhZ2VzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgZXJsYW5nLW1hbi1pbmhpYml0CisgICAgICAoKQorICAgIChzZXRxIGVybGFuZy1tZW51LW1hbi1pdGVtcworCSAgJyhuaWwKKwkgICAgKCJNYW4gLSBGdW5jdGlvbiIgZXJsYW5nLW1hbi1mdW5jdGlvbikpKQorICAgIChpZiBlcmxhbmctbWFuLWRpcnMKKwkoc2V0cSBlcmxhbmctbWVudS1tYW4taXRlbXMKKwkgICAgICAoYXBwZW5kIGVybGFuZy1tZW51LW1hbi1pdGVtcworCQkgICAgICAoZXJsYW5nLW1hbi1tYWtlLXRvcC1tZW51IGVybGFuZy1tYW4tZGlycykpKSkKKyAgICAoc2V0cSBlcmxhbmctbWVudS1pdGVtcworCSAgKGVybGFuZy1tZW51LWFkZC1hYm92ZSAnZXJsYW5nLW1lbnUtbWFuLWl0ZW1zCisJCQkJICdlcmxhbmctbWVudS12ZXJzaW9uLWl0ZW1zCisJCQkJIGVybGFuZy1tZW51LWl0ZW1zKSkKKyAgICAoZXJsYW5nLW1lbnUtaW5pdCkpKQorCisKKyhkZWZ1biBlcmxhbmctbWFuLXVuaW5zdGFsbCAoKQorICAiUmVtb3ZlIHRoZSBtYW4gcGFnZXMgZnJvbSB0aGUgRXJsYW5nIG1vZGUuIgorICAoaW50ZXJhY3RpdmUpCisgIChzZXRxIGVybGFuZy1tZW51LWl0ZW1zCisJKGVybGFuZy1tZW51LWRlbGV0ZSAnZXJsYW5nLW1lbnUtbWFuLWl0ZW1zIGVybGFuZy1tZW51LWl0ZW1zKSkKKyAgKGVybGFuZy1tZW51LWluaXQpKQorCisKKzs7IFRoZSBtYW4gbWVudSBpcyBhIGhpZXJhcmNoYWwgc3RydWN0dXJlLCB3aXRoIHRoZSBtYW51YWwgc2VjdGlvbnMKKzs7IGF0IHRoZSB0b3AsIGRlc2NyaWJlZCBieSBgZXJsYW5nLW1hbi1kaXJzJy4gIFRoZSBuZXh0IGxldmVsIGNvdWxkCis7OyBlaXRoZXIgYmUgdGhlIG1hbnVhbCBwYWdlcyBpZiBub3QgdG8gbWFueSwgb3RoZXJ3aXNlIGl0IGlzIGFuIGluZGV4Cis7OyBtZW51IHdob3NlIHN1Ym1lbnVzIHdpbGwgY29udGFpbiB1cCB0byBgZXJsYW5nLW1hbi1tYXgtbWVudS1zaXplJworOzsgbWFudWFsIHBhZ2VzLgorCisoZGVmdW4gZXJsYW5nLW1hbi1tYWtlLXRvcC1tZW51IChkaXItbGlzdCkKKyAgIkNyZWF0ZSBvbmUgbWVudSBlbnRyeSBwZXIgZWxlbWVudCBvZiBESVItTElTVC4KK1RoZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBlcmxhbmctbWFuLWRpcnMnLiIKKyAgKGxldCAoKG1lbnUgJygpKQorCWRpcikKKyAgICAod2hpbGUgZGlyLWxpc3QKKyAgICAgIChzZXRxIGRpciAoY29uZCAoKG50aCAyIChjYXIgZGlyLWxpc3QpKQorCQkgICAgICAgOzsgUmVsYXRpdmUgdG8gYGVybGFuZy1yb290LWRpcicuCisJCSAgICAgICAoYW5kIChzdHJpbmdwIGVybGFuZy1yb290LWRpcikKKwkJCSAgICAoY29uY2F0IGVybGFuZy1yb290LWRpciAobnRoIDEgKGNhciBkaXItbGlzdCkpKSkpCisJCSAgICAgICh0CisJCSAgICAgICA7OyBBYnNvbHV0ZQorCQkgICAgICAgKG50aCAxIChjYXIgZGlyLWxpc3QpKSkpKQorICAgICAgKGlmIChhbmQgZGlyCisJICAgICAgIChmaWxlLXJlYWRhYmxlLXAgZGlyKSkKKwkgIChzZXRxIG1lbnUgKGNvbnMgKGxpc3QgKGNhciAoY2FyIGRpci1saXN0KSkKKwkJCQkgKGVybGFuZy1tYW4tbWFrZS1taWRkbGUtbWVudQorCQkJCSAgKGVybGFuZy1tYW4tZ2V0LWZpbGVzIGRpcikpKQorCQkJICAgbWVudSkpKQorICAgICAgKHNldHEgZGlyLWxpc3QgKGNkciBkaXItbGlzdCkpKQorICAgIDs7IFNob3VsZCBubyBtZW51cyBiZSBmb3VuZCwgZ2VuZXJhdGUgYSBtZW51IGl0ZW0gd2hpY2gKKyAgICA7OyB3aWxsIGRpc3BsYXkgYSBoZWxwIHRleHQsIHdoZW4gc2VsZWN0ZWQuCisgICAgKGlmIG1lbnUKKwkobnJldmVyc2UgbWVudSkKKyAgICAgICcoKCJNYW4gUGFnZXMiCisJICgoIkVycm9yISBXaHk/IiBlcmxhbmctbWFuLWRlc2NyaWJlLWVycm9yKSkpKSkpKQorCisKKzs7IFNob3VsZCB0aGUgbWVudSBiZSB0byBsb25nLCBsZXQncyBzcGxpdCBpdCBpbnRvIGEgbnVtYmVyIG9mCis7OyBzbWFsbGVyIG1lbnVzLiAgV2FybmluZywgdGhpcyBjb2RlIGNvbnRhaW5zIGJlYXRpZnVsCis7OyBkZXN0cnVjdGl2ZSBvcGVyYXRpb25zIQorKGRlZnVuIGVybGFuZy1tYW4tbWFrZS1taWRkbGUtbWVudSAoZmlsZWxpc3QpCisgICJDcmVhdGUgdGhlIHNlY29uZCBsZXZlbCBtZW51IGZyb20gRklMRUxJU1QuCisKK1Nob3VsZCB0aGUgbGlzdCBiZSBsb25nZXIgdGhhbiBgZXJsYW5nLW1hbi1tYXgtbWVudS1zaXplJywgYSB0cmVlIG9mCittZW51cyBpcyBjcmVhdGVkLiIKKyAgKGlmICg8PSAobGVuZ3RoIGZpbGVsaXN0KSBlcmxhbmctbWFuLW1heC1tZW51LXNpemUpCisgICAgICAoZXJsYW5nLW1hbi1tYWtlLW1lbnUgZmlsZWxpc3QpCisgICAgKGxldCAoKG1lbnUgJygpKQorCSAgKGZpbGVsaXN0IChjb3B5LXNlcXVlbmNlIGZpbGVsaXN0KSkKKwkgIHNlZ21lbnQgc3VibWVudSBwYWlyKQorICAgICAgKHdoaWxlIGZpbGVsaXN0CisJKHNldHEgcGFpciAobnRoY2RyICgtIGVybGFuZy1tYW4tbWF4LW1lbnUtc2l6ZSAxKSBmaWxlbGlzdCkpCisJKHNldHEgc2VnbWVudCBmaWxlbGlzdCkKKwkoaWYgKG51bGwgcGFpcikKKwkgICAgKHNldHEgZmlsZWxpc3QgbmlsKQorCSAgKHNldHEgZmlsZWxpc3QgKGNkciBwYWlyKSkKKwkgIChzZXRjZHIgcGFpciBuaWwpKQorCShzZXRxIHN1Ym1lbnUgKGVybGFuZy1tYW4tbWFrZS1tZW51IHNlZ21lbnQpKQorCShzZXRxIG1lbnUgKGNvbnMgKGxpc3QgKGNvbmNhdCAoY2FyIChjYXIgc3VibWVudSkpCisJCQkJICAgICAgICIgLS0gIgorCQkJCSAgICAgICAoY2FyIChjYXIgKHJldmVyc2Ugc3VibWVudSkpKSkKKwkJCSAgICAgICBzdWJtZW51KQorCQkJIG1lbnUpKSkKKyAgICAgIChucmV2ZXJzZSBtZW51KSkpKQorCisKKyhkZWZ1biBlcmxhbmctbWFuLW1ha2UtbWVudSAoZmlsZWxpc3QpCisgICJNYWtlIGEgbGVhZiBtZW51IGJhc2VkIG9uIEZJTEVMSVNULiIKKyAgKGxldCAoKG1lbnUgJygpKQorCWl0ZW0pCisgICAgKHdoaWxlIGZpbGVsaXN0CisgICAgICAoc2V0cSBpdGVtIChlcmxhbmctbWFuLW1ha2UtbWVudS1pdGVtIChjYXIgZmlsZWxpc3QpKSkKKyAgICAgIChpZiBpdGVtCisJICAoc2V0cSBtZW51IChjb25zIGl0ZW0gbWVudSkpKQorICAgICAgKHNldHEgZmlsZWxpc3QgKGNkciBmaWxlbGlzdCkpKQorICAgIChucmV2ZXJzZSBtZW51KSkpCisKKworKGRlZnVuIGVybGFuZy1tYW4tbWFrZS1tZW51LWl0ZW0gKGZpbGUpCisgICJDcmVhdGUgYSBtZW51IGl0ZW0gY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgbWFuIHBhZ2UuIgorICAoYW5kIChzdHJpbmctbWF0Y2ggIi4qL1xcKFteL10rXFwpXFwuW14uXSQiIGZpbGUpCisgICAgICAgKGxldCAoKHBhZ2UgKHN1YnN0cmluZyBmaWxlIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpKQorCSAobGlzdCAoY2FwaXRhbGl6ZSBwYWdlKQorCSAgICAgICAobGlzdCAnbGFtYmRhICcoKQorCQkgICAgICcoaW50ZXJhY3RpdmUpCisJCSAgICAgKGxpc3QgJ2Z1bmNhbGwgJ2VybGFuZy1tYW4tZGlzcGxheS1mdW5jdGlvbgorCQkJICAgZmlsZSkpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctbWFuLWdldC1maWxlcyAoZGlyKQorICAiUmV0dXJuIGZpbGVzIGluIGRpcmVjdG9yeSBESVIuIgorICAoZGlyZWN0b3J5LWZpbGVzIGRpciB0ICIuKlxcLlswLTldXFwnIikpCisKKworKGRlZnVuIGVybGFuZy1tYW4tbW9kdWxlICgmb3B0aW9uYWwgbW9kdWxlKQorICAiRmluZCBtYW51YWwgcGFnZSBmb3IgTU9EVUxFLCBkZWZhdWx0cyB0byBtb2R1bGUgb2YgZnVuY3Rpb24gdW5kZXIgcG9pbnQuCitUaGlzIGZ1bmN0aW9uIGlzIGF3YXJlIG9mIGltcG9ydGVkIGZ1bmN0aW9ucy4iCisgIChpbnRlcmFjdGl2ZQorICAgKGxpc3QgKGxldCogKChtb2QgKGNhci1zYWZlIChlcmxhbmctZ2V0LWZ1bmN0aW9uLXVuZGVyLXBvaW50KSkpCisJCShpbnB1dCAocmVhZC1zdHJpbmcKKwkJCShmb3JtYXQgIk1hbnVhbCBlbnRyeSBmb3IgbW9kdWxlJXM6ICIKKwkJCQkoaWYgKG9yIChudWxsIG1vZCkgKHN0cmluZz0gbW9kICIiKSkKKwkJCQkgICAgIiIKKwkJCQkgIChmb3JtYXQgIiAoZGVmYXVsdCAlcykiIG1vZCkpKSkpKQorCSAgIChpZiAoc3RyaW5nPSBpbnB1dCAiIikKKwkgICAgICAgbW9kCisJICAgICBpbnB1dCkpKSkKKyAgKG9yIG1vZHVsZSAoc2V0cSBtb2R1bGUgKGNhciAoZXJsYW5nLWdldC1mdW5jdGlvbi11bmRlci1wb2ludCkpKSkKKyAgKGlmIChvciAobnVsbCBtb2R1bGUpIChzdHJpbmc9IG1vZHVsZSAiIikpCisgICAgICAoZXJyb3IgIk5vIEVybGFuZyBtb2R1bGUgbmFtZSBnaXZlbiIpKQorICAobGV0ICgoZGlyLWxpc3QgZXJsYW5nLW1hbi1kaXJzKQorCShwYXQgKGNvbmNhdCAiXFxiIiAocmVnZXhwLXF1b3RlIG1vZHVsZSkgIlxcLlteLl0kIikpCisJKGZpbGUgbmlsKQorCWZpbGUtbGlzdCkKKyAgICAod2hpbGUgKGFuZCBkaXItbGlzdCAobnVsbCBmaWxlKSkKKyAgICAgIChzZXRxIGZpbGUtbGlzdCAoZXJsYW5nLW1hbi1nZXQtZmlsZXMKKwkJICAgICAgIChpZiAobnRoIDIgKGNhciBkaXItbGlzdCkpCisJCQkgICAoY29uY2F0IGVybGFuZy1yb290LWRpciAobnRoIDEgKGNhciBkaXItbGlzdCkpKQorCQkJIChudGggMSAoY2FyIGRpci1saXN0KSkpKSkKKyAgICAgICh3aGlsZSAoYW5kIGZpbGUtbGlzdCAobnVsbCBmaWxlKSkKKwkoaWYgKHN0cmluZy1tYXRjaCBwYXQgKGNhciBmaWxlLWxpc3QpKQorCSAgICAoc2V0cSBmaWxlIChjYXIgZmlsZS1saXN0KSkpCisJKHNldHEgZmlsZS1saXN0IChjZHIgZmlsZS1saXN0KSkpCisgICAgICAoc2V0cSBkaXItbGlzdCAoY2RyIGRpci1saXN0KSkpCisgICAgKGlmIGZpbGUKKwkoZnVuY2FsbCBlcmxhbmctbWFuLWRpc3BsYXktZnVuY3Rpb24gZmlsZSkKKyAgICAgIChlcnJvciAiTm8gbWFudWFsIHBhZ2UgZm9yIG1vZHVsZSAlcyBmb3VuZC4iIG1vZHVsZSkpKSkKKworCis7OyBXYXJuaW5nLCB0aGUgZnVuY3Rpb24gYGVybGFuZy1tYW4tZnVuY3Rpb24nIGlzIGEgaGFjayEKKzs7IEl0IGxpbmtzIGl0c2VsZiBpbnRvIHRoZSBtYW4gY29kZSBpbiBhIG5vbi1jbGVhbiB3YXkuICBJIGhhdmUKKzs7IGNob29zZWQgdG8ga2VlcCBpdCBzaW5jZSBpdCBwcm92aWRlcyBhIHZlcnkgdXNlZnVsIGZ1bmN0aW9uYWxpdHkKKzs7IHdoaWNoIGlzIG5vdCBwb3NzaWJsZSB0byBhY2hpdmUgdXNpbmcgYSBjbGVhbiBhcHByb2FjaC4KKzs7ICAgLyBBbmRlcnNMCisKKyhkZWZ2YXIgZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lIG5pbAorICAiTmFtZSBvZiBmdW5jdGlvbiBmb3IgbGFzdCBgZXJsYW5nLW1hbi1mdW5jdGlvbicgY2FsbC4KK1VzZWQgZm9yIGNvbW1uaWNhdGlvbiBiZXR3ZWVuIGBlcmxhbmctbWFuLWZ1bmN0aW9uJyBhbmQgdGhlCitwYXRjaCB0byBgTWFuLW5vdGlmeS13aGVuLXJlYWR5Jy4iKQorCisoZGVmdW4gZXJsYW5nLW1hbi1mdW5jdGlvbiAoJm9wdGlvbmFsIG5hbWUpCisgICJGaW5kIG1hbnVhbCBwYWdlIGZvciBOQU1FLCB3aGVyZSBOQU1FIGlzIG1vZHVsZTpmdW5jdGlvbi4KK1RoZSBlbnRyeSBmb3IgYGZ1bmN0aW9uJyBpcyBkaXNwbGF5ZWQuCisKK1RoaXMgZnVuY3Rpb24gaXMgYXdhcmUgb2YgaW1wb3J0ZWQgZnVuY3Rpb25zLiIKKyAgKGludGVyYWN0aXZlCisgICAobGlzdCAobGV0KiAoKG1vZC1mdW5jIChlcmxhbmctZ2V0LWZ1bmN0aW9uLXVuZGVyLXBvaW50KSkKKwkJKG1vZCAoY2FyLXNhZmUgbW9kLWZ1bmMpKQorCQkoZnVuYyAobnRoIDEgbW9kLWZ1bmMpKQorCQkoaW5wdXQgKHJlYWQtc3RyaW5nCisJCQkoZm9ybWF0CisJCQkgIk1hbnVhbCBlbnRyeSBmb3IgYG1vZHVsZTpmdW5jJyBvciBgbW9kdWxlJyVzOiAiCisJCQkgKGlmIChvciAobnVsbCBtb2QpIChzdHJpbmc9IG1vZCAiIikpCisJCQkgICAgICIiCisJCQkgICAoZm9ybWF0ICIgKGRlZmF1bHQgJXM6JXMpIiBtb2QgZnVuYykpKSkpKQorCSAgIChpZiAoc3RyaW5nPSBpbnB1dCAiIikKKwkgICAgICAgKGlmIChhbmQgbW9kIGZ1bmMpCisJCSAgIChjb25jYXQgbW9kICI6IiBmdW5jKQorCQkgbW9kKQorCSAgICAgaW5wdXQpKSkpCisgIDs7IEVtYWNzIDE4IGRvZXNuJ3QgcHJvdmlkZSBgbWFuJy4uLgorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocmVxdWlyZSAnbWFuKQorICAgIChlcnJvciBuaWwpKQorICAobGV0ICgobW9kbmFtZSBuaWwpCisJKGZ1bmNuYW1lIG5pbCkpCisgICAgKGNvbmQgKChudWxsIG5hbWUpCisJICAgKGxldCAoKG1vZC1mdW5jIChlcmxhbmctZ2V0LWZ1bmN0aW9uLXVuZGVyLXBvaW50KSkpCisJICAgICAoc2V0cSBtb2RuYW1lIChjYXItc2FmZSBtb2QtZnVuYykpCisJICAgICAoc2V0cSBmdW5jbmFtZSAobnRoIDEgbW9kLWZ1bmMpKSkpCisJICAoKHN0cmluZy1tYXRjaCAiOiIgbmFtZSkKKwkgICAoc2V0cSBtb2RuYW1lIChzdWJzdHJpbmcgbmFtZSAwIChtYXRjaC1iZWdpbm5pbmcgMCkpKQorCSAgIChzZXRxIGZ1bmNuYW1lIChzdWJzdHJpbmcgbmFtZSAobWF0Y2gtZW5kIDApIG5pbCkpKQorCSAgKChzdHJpbmdwIG5hbWUpCisJICAgKHNldHEgbW9kbmFtZSBuYW1lKSkpCisgICAgKGlmIChvciAobnVsbCBtb2RuYW1lKSAoc3RyaW5nPSBtb2RuYW1lICIiKSkKKwkoZXJyb3IgIk5vIEVybGFuZyBtb2R1bGUgbmFtZSBnaXZlbiIpKQorICAgIChjb25kICgoZmJvdW5kcCAnTWFuLW5vdGlmeS13aGVuLXJlYWR5KQorCSAgIDs7IEVtYWNzIDE5OiAgVGhlIG1hbiBjb21tYW5kIGNvdWxkIHBvc3NpYmx5IHN0YXJ0IGFuCisJICAgOzsgYXN5bmNyb25vdXMgcHJvY2VzcywgaS5lLiB3ZSBtdXN0IGhvb2sgb3Vyc2VsdmVzIGludG8KKwkgICA7OyB0aGUgc3lzdGVtIHRvIGJlIGFjdGl2YXRlZCB3aGVuIHRoZSBtYW4tcHJvY2VzcworCSAgIDs7IHRlcm1pbmF0ZXMuCisJICAgKGlmIChudWxsIGZ1bmNuYW1lKQorCSAgICAgICAoKQorCSAgICAgKGVybGFuZy1tYW4tcGF0Y2gtbm90aWZ5KQorCSAgICAgKHNldHEgZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lIGZ1bmNuYW1lKSkKKwkgICAoY29uZGl0aW9uLWNhc2UgbmlsCisJICAgICAgIChlcmxhbmctbWFuLW1vZHVsZSBtb2RuYW1lKQorCSAgICAgKGVycm9yIChzZXRxIGVybGFuZy1tYW4tZnVuY3Rpb24tbmFtZSBuaWwpKSkpCisJICAodAorCSAgIChlcmxhbmctbWFuLW1vZHVsZSBtb2RuYW1lKQorCSAgIChpZiBmdW5jbmFtZQorCSAgICAgICAoZXJsYW5nLW1hbi1maW5kLWZ1bmN0aW9uCisJCShvciAoZ2V0LWJ1ZmZlciAiKk1hbnVhbCBFbnRyeSoiKSA7IEVtYWNzIDE4CisJCSAgICAoY3VycmVudC1idWZmZXIpKQkgICAgICAgICAgOyBYRW1hY3MKKwkJZnVuY25hbWUpKSkpKSkKKworCis7OyBTaG91bGQgdGhlIGRlZmFkdmljZSBiZSBhdCB0aGUgdG9wIGxldmVsLCB0aGUgcGFja2FnZSBgYWR2aWNlJyB3b3VsZAorOzsgYmUgcmVxdWlyZWQuICBOb3cgaXQgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoaXMgZnVuY3Rpb25hbGl0eQorOzsgaXMgdXNlZC4gIChFbWFjcyAxOSBzcGVjaWZpYy4pCisoZGVmdW4gZXJsYW5nLW1hbi1wYXRjaC1ub3RpZnkgKCkKKyAgIlBhdGNoIHRoZSBmdW5jdGlvbiBgTWFuLW5vdGlmeS13aGVuLXJlYWR5JyB0byBzZWFyY2ggZm9yIGZ1bmN0aW9uLgorVGhlIHZhcmlhYmxlIGBlcmxhbmctbWFuLWZ1bmN0aW9uLW5hbWUnIGlzIGFzc3VtZWQgdG8gYmUgYm91bmQgdG8KK3RoZSBmdW5jdGlvbiBuYW1lLCBvciB0byBuaWwuCisKK1RoZSByZWFzb24gZm9yIHBhdGNoaW5nIGEgZnVuY3Rpb24gaXMgdGhhdCB1bmRlciBFbWFjcyAxOSwgdGhlIG1hbgorY29tbWFuZCBpcyBleGVjdXRlZCBhc3luY2hyb25vdXNseS4iCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChyZXF1aXJlICdhZHZpY2UpCisgICAgOzsgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuZCBzaW5jZSB0aGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4KKyAgICA7OyBydW5uaW5nIHVuZGVyIEVtYWNzIDE5LgorICAgIChlcnJvciAoZXJyb3IgKGNvbmNhdCAiVGhpcyBjb21tYW5kcyBuZWVkcyB0aGUgcGFja2FnZSBgYWR2aWNlJywgIgorCQkJICAicGxlYXNlIHVwZ3JhZGUgeW91ciBFbWFjcy4iKSkpKQorICAocmVxdWlyZSAnbWFuKQorICAoZGVmYWR2aWNlIE1hbi1ub3RpZnktd2hlbi1yZWFkeQorICAgIChhZnRlciBlcmxhbmctTWFuLW5vdGlmeS13aGVuLXJlYWR5IGFjdGl2YXRlKQorICAgICJTZXRzIHBvaW50IGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbiBuYW1lIGluCitlcmxhbmctbWFuLWZ1bmN0aW9uLW5hbWUgd2hlbiB0aGUgbWFuLXBhZ2UgaXMgZGlzcGxheWVkLiIKKyAgICAoaWYgZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lCisJKGVybGFuZy1tYW4tZmluZC1mdW5jdGlvbiAoYWQtZ2V0LWFyZyAwKSBlcmxhbmctbWFuLWZ1bmN0aW9uLW5hbWUpKQorICAgIChzZXRxIGVybGFuZy1tYW4tZnVuY3Rpb24tbmFtZSBuaWwpKSkKKworCisoZGVmdW4gZXJsYW5nLW1hbi1maW5kLWZ1bmN0aW9uIChidWYgZnVuYykKKyAgIkZpbmQgbWFudWFsIHBhZ2UgZm9yIGZ1bmN0aW9uIGluIGBlcmxhbmctbWFuLWZ1bmN0aW9uLW5hbWUnIGluIGJ1ZmZlciBCVUYuIgorICAoaWYgZnVuYworICAgICAgKGxldCAoKHdpbiAoZ2V0LWJ1ZmZlci13aW5kb3cgYnVmKSkpCisJKGlmIHdpbgorCSAgICAocHJvZ24KKwkgICAgICAoc2V0LWJ1ZmZlciBidWYpCisJICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKwkgICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkCisJCSAgIChjb25jYXQgIl5bIFx0XSsiIGZ1bmMgIiA/KCIpCisJCSAgIChwb2ludC1tYXgpIHQpCisJCSAgKHByb2duCisJCSAgICAoZm9yd2FyZC13b3JkIC0xKQorCQkgICAgKHNldC13aW5kb3ctcG9pbnQgd2luIChwb2ludCkpKQorCQkobWVzc2FnZSAiQ291bGQgbm90IGZpbmQgZnVuY3Rpb24gYCVzJyIgZnVuYykpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLW1hbi1kaXNwbGF5IChmaWxlKQorICAiRGlzcGxheSBGSUxFIGFzIGEgYG1hbicgZmlsZS4KK1RoaXMgaXMgZGUgZGVmYXVsdCBtYW51YWwgcGFnZSBkaXNwbGF5IGZ1bmN0aW9uLgorVGhlIHZhcmlhYmxlcyBgZXJsYW5nLW1hbi1kaXNwbGF5LWZ1bmN0aW9uJyBjb250YWlucyB0aGUgZnVuY3Rpb24KK3RvIGJlIHVzZWQuIgorICA7OyBFbWFjcyAxOCBkb2Vzbid0IGBwcm92aWRlJyBtYW4uCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChyZXF1aXJlICdtYW4pCisgICAgKGVycm9yIG5pbCkpCisgIChpZiBmaWxlCisgICAgICAobGV0ICgocHJvY2Vzcy1lbnZpcm9ubWVudCAoY29weS1zZXF1ZW5jZSBwcm9jZXNzLWVudmlyb25tZW50KSkpCisJKGlmIChzdHJpbmctbWF0Y2ggIlxcKC4qXFwpL21hblteL10qL1xcKFteL10rXFwpXFwuW14uXSQiIGZpbGUpCisJICAgIChsZXQgKChkaXIgKHN1YnN0cmluZyBmaWxlIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCisJCSAgKHBhZ2UgKHN1YnN0cmluZyBmaWxlIChtYXRjaC1iZWdpbm5pbmcgMikgKG1hdGNoLWVuZCAyKSkpKQorCSAgICAgIChpZiAoZmJvdW5kcCAnc2V0ZW52KQorCQkgIChzZXRlbnYgIk1BTlBBVEgiIGRpcikKKwkJOzsgRW1hY3MgMTgKKwkJKHNldHEgcHJvY2Vzcy1lbnZpcm9ubWVudCAoY29ucyAoY29uY2F0ICJNQU5QQVRIPSIgZGlyKQorCQkJCQkJcHJvY2Vzcy1lbnZpcm9ubWVudCkpKQorCSAgICAgIChjb25kICgobm90IChhbmQgKG5vdCBlcmxhbmcteGVtYWNzLXApCisJCQkgICAgICAgKD0gZXJsYW5nLWVtYWNzLW1ham9yLXZlcnNpb24gMTkpCisJCQkgICAgICAgKDwgZXJsYW5nLWVtYWNzLW1pbm9yLXZlcnNpb24gMjkpKSkKKwkJICAgICAobWFudWFsLWVudHJ5IHBhZ2UpKQorCQkgICAgKHQKKwkJICAgICA7OyBFbWFjcyAxOS4yOCBhbmQgZWFybGllciB2ZXJzaW9ucyBvZiAxOToKKwkJICAgICA7OyBUaGUgbWFudWFsLWVudHJ5IGNvbW1hbmQgdW5jb25kaXRpb25hbGx5IHByb21wdHMKKwkJICAgICA7OyB0aGUgdXNlciA6LSgKKwkJICAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdNYW4tZ2V0cGFnZS1pbi1iYWNrZ3JvdW5kKQorCQkJICAgICAgcGFnZSkpKSkKKwkgIChlcnJvciAiQ2FuJ3QgZmluZCBtYW4gcGFnZSBmb3IgJXNcbiIgZmlsZSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1tYW4tZGVzY3JpYmUtZXJyb3IgKCkKKyAgIkRlc2NyaWJlIHdoeSB0aGUgbWFudWFsIHBhZ2VzIHdlcmVuJ3QgZm91bmQuIgorICAoaW50ZXJhY3RpdmUpCisgICh3aXRoLW91dHB1dC10by10ZW1wLWJ1ZmZlciAiKkVybGFuZyBNYW4gRXJyb3IqIgorICAgICAgKHByaW5jICJOb3JtYWxseSwgdGhpcyBtZW51IHNob3VsZCBjb250YWluIEVybGFuZyBtYW51YWwgcGFnZXMuCisKK0luIG9yZGVyIHRvIGZpbmQgdGhlIG1hbnVhbCBwYWdlcywgdGhlIHZhcmlhYmxlIGBlcmxhbmctcm9vdC1kaXInCitzaG91bGQgYmUgYm91bmQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBFcmxhbmcKK2luc3RhbGxhdGlvbi4gIFRoZSBuYW1lIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgZmluYWwgc2xhc2guCisKK1ByYWN0aWNhbGx5LCB5b3Ugc2hvdWxkIGFkZCBhIGxpbmUgb24gdGhlIGZvbGxvd2luZyBmb3JtIHRvCit5b3VyIH4vLmVtYWNzLCBvciBhc2sgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBhZGQgaXQgdG8KK3RoZSBzaXRlIGluaXQgZmlsZToKKyAgICAoc2V0cSBlcmxhbmctcm9vdC1kaXIgXCIvdGhlL2VybGFuZy9yb290L2Rpci9nb2VzL2hlcmVcIikKKworRm9yIGV4YW1wbGU6CisgICAgKHNldHEgZXJsYW5nLXJvb3QtZGlyIFwiL3Vzci9sb2NhbC9lcmxhbmdcIikKKworQWZ0ZXIgaW5zdGFsbGluZyB0aGUgbGluZSwga2lsbCBhbmQgcmVzdGFydCBFbWFjcywgb3IgcmVzdGFydCBFcmxhbmcKK21vZGUgd2l0aCB0aGUgY29tbWFuZCBgTS14IGVybGFuZy1tb2RlIFJFVCcuIikpKQorDAorOzsgU2tlbGV0b24gY29kZToKKworOzsgVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBwYWNrYWdlIGB0ZW1wbycgd2hpY2ggaXMgcGFydCBvZiBtb2Rlcm4KKzs7IEVtYWNzZW4uICAoR05VIEVtYWNzIDE5LjI1ICg/KSBhbmQgWEVtYWNzIDE5LjE0LikKKworKGRlZnVuIGVybGFuZy1za2VsLWluaXQgKCkKKyAgIkdlbmVyYXRlIHRoZSBza2VsZXRvbiBmdW5jdGlvbnMgYW5kIG1lbnUgaXRlbXMuCitUaGUgdmFyaWFibGUgYGVybGFuZy1za2VsJyBjb250YWlucyB0aGUgbmFtZSBhbmQgZGVzY3JpcHRpb25zIG9mCithbGwgc2tlbGV0b25zLgorCitUaGUgc2tlbGV0b24gcm91dGluZXMgYXJlIGJhc2VkIG9uIHRoZSBgdGVtcG8nIHBhY2thZ2UuICBTaG91bGQgdGhpcworcGFja2FnZSBub3QgYmUgcHJlc2VudCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIgorICAoaW50ZXJhY3RpdmUpCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChyZXF1aXJlICd0ZW1wbykKKyAgICAoZXJyb3IgdCkpCisgIChpZiAoZmVhdHVyZXAgJ3RlbXBvKQorICAgICAgKGxldCAoKHNrZWwgZXJsYW5nLXNrZWwpCisJICAgIChtZW51ICcoKSkpCisJKHdoaWxlIHNrZWwKKwkgIChjb25kICgobnVsbCAoY2FyIHNrZWwpKQorCQkgKHNldHEgbWVudSAoY29ucyBuaWwgbWVudSkpKQorCQkodAorCQkgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAndGVtcG8tZGVmaW5lLXRlbXBsYXRlKQorCQkgIChjb25jYXQgImVybGFuZy0iIChudGggMSAoY2FyIHNrZWwpKSkKKwkJICA7OyBUaGUgdGVtcG8gdGVtcGxhdGUgdXNlZCBjb250YWlucyBhbiBgaW5jbHVkZScKKwkJICA7OyBmdW5jdGlvbiBjYWxsIG9ubHksIGhlbmNlIGNoYW5nZXMgdG8gdGhlCisJCSAgOzsgdmFyaWFibGVzIGRlc2NyaWJpbmcgdGhlIHRlbXBsYXRlcyB0YWtlIGVmZmVjdAorCQkgIDs7IGltbWRpYXRlbHkuCisJCSAgKGxpc3QgKGxpc3QgJ2VybGFuZy1za2VsLWluY2x1ZGUgKG50aCAyIChjYXIgc2tlbCkpKSkKKwkJICAobnRoIDEgKGNhciBza2VsKSkpCisJCSAoc2V0cSBtZW51IChjb25zIChlcmxhbmctc2tlbC1tYWtlLW1lbnUtaXRlbQorCQkJCSAgIChjYXIgc2tlbCkpIG1lbnUpKSkpCisJICAoc2V0cSBza2VsIChjZHIgc2tlbCkpKQorCShzZXRxIGVybGFuZy1tZW51LXNrZWwtaXRlbXMKKwkgICAgICAobGlzdCBuaWwgKGxpc3QgIlNrZWxldG9ucyIgKG5yZXZlcnNlIG1lbnUpKSkpCisJKHNldHEgZXJsYW5nLW1lbnUtaXRlbXMKKwkgICAgICAoZXJsYW5nLW1lbnUtYWRkLWFib3ZlICdlcmxhbmctbWVudS1za2VsLWl0ZW1zCisJCQkJICAgICAnZXJsYW5nLW1lbnUtdmVyc2lvbi1pdGVtcworCQkJCSAgICAgZXJsYW5nLW1lbnUtaXRlbXMpKQorCShlcmxhbmctbWVudS1pbml0KSkpKQorCisoZGVmdW4gZXJsYW5nLXNrZWwtbWFrZS1tZW51LWl0ZW0gKHNrZWwpCisgIChsZXQgKChmdW5jIChpbnRlcm4gKGNvbmNhdCAidGVtcG8tdGVtcGxhdGUtZXJsYW5nLSIgKG50aCAxIHNrZWwpKSkpKQorICAgIChjb25kICgobnVsbCAobnRoIDMgc2tlbCkpCisJICAgKGxpc3QgKGNhciBza2VsKSBmdW5jKSkKKwkgICh0CisJICAgKGxpc3QgKGNhciBza2VsKQorCQkgKGxpc3QgJ2xhbWJkYSAnKCkKKwkJICAgICAgICcoaW50ZXJhY3RpdmUpCisJCSAgICAgICAobGlzdCAnZnVuY2FsbAorCQkJICAgICAobGlzdCAncXVvdGUgKG50aCAzIHNrZWwpKQorCQkJICAgICAobGlzdCAncXVvdGUgZnVuYykpKSkpKSkpCisKKzs7IEZ1bmN0aW9ucyBkZXNpZ25lZCB0byBiZSBhZGRlZCB0byB0aGUgc2tlbGV0b24gbWVudS4KKzs7IChOb3Qgbm9ybWFsbHkgdXNlZCkKKyhkZWZ1biBlcmxhbmctc2tlbC1pbnNlcnQgKGZ1bmMpCisgICJJbnNlcnQgc2tlbGV0b24gZ2VuZXJhdGVkIGJ5IEZVTkMgYW5kIGdvdG8gZmlyc3QgdGVtcG8gbWFyay4iCisgIChzYXZlLWV4Y3Vyc2lvbiAoZnVuY2FsbCBmdW5jKSkKKyAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAndGVtcG8tZm9yd2FyZC1tYXJrKSkpCisKKyhkZWZ1biBlcmxhbmctc2tlbC1oZWFkZXIgKGZ1bmMpCisgICJJbnNlcnQgdGhlIGhlYWRlciBnZW5lcmF0ZWQgYnkgRlVOQyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuIgorICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAoc2F2ZS1leGN1cnNpb24gKGZ1bmNhbGwgZnVuYykpCisgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3RlbXBvLWZvcndhcmQtbWFyaykpKQorCisKKzs7IEZ1bmN0aW9ucyB1c2VkIGluc2lkZSB0aGUgc2tlbGV0b24gZGVzY3JpcHRpb25zLgorKGRlZnVuIGVybGFuZy1za2VsLXNraXAtYmxhbmsgKCkKKyAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCisgIG5pbCkKKworKGRlZnVuIGVybGFuZy1za2VsLWluY2x1ZGUgKCZyZXN0IGFyZ3MpCisgICJJbmNsdWRlIGEgdGVtcGxhdGUgaW5zaWRlIGFub3RoZXIgdGVtcGxhdGUuCisKK0V4YW1wbGUgb2YgdXNlLCBhc3N1bWluZyB0aGF0IGBlcmxhbmctc2tlbC1mdW5jJyBpcyBkZWZpbmVkOgorCisgKGRlZnZhciBmb28tc2tlbGV0b24gJyhcIiUlJSBOZXcgZnVuY3Rpb246XCIKKyAgICAgICAgICAgICAgICAgICAgICAgIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWZ1bmMpKSkKKworVGVjaGljYWxseSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBgdGVtcG8nIGF0dHJpYnV0ZWAobCAuLi4pJyB3aGljaAorY2FuIGNvbnRhaW4gb3RoZXIgYHRlbXBvJyBhdHRyaWJ1dGVzLiAgUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24KK2B0ZW1wby1kZWZpbmUtdGVtcGxhdGUnIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBgKGwgLi4uKScgYXR0cmlidXRlLiIKKyAgKGxldCAoKHJlcyAnKCkpCisJZW50cnkpCisgICAgKHdoaWxlIGFyZ3MKKyAgICAgIChzZXRxIGVudHJ5IChjYXIgYXJncykpCisgICAgICAod2hpbGUgZW50cnkKKwkoc2V0cSByZXMgKGNvbnMgKGNhciBlbnRyeSkgcmVzKSkKKwkoc2V0cSBlbnRyeSAoY2RyIGVudHJ5KSkpCisgICAgICAoc2V0cSBhcmdzIChjZHIgYXJncykpKQorICAgIChjb25zICdsIChucmV2ZXJzZSByZXMpKSkpCisKKyhkZWZ1biBlcmxhbmctc2tlbC1zZXBhcmF0b3IgKCZvcHRpb25hbCBwZXJjZW50KQorICAiUmV0dXJuIGEgY29tbWVudCBzZXBhcmF0b3IuIgorICAobGV0ICgocGVyY2VudCAob3IgcGVyY2VudCAzKSkpCisgICAgKGNvbmNhdCAobWFrZS1zdHJpbmcgcGVyY2VudCA/JSkgCisJICAgIChtYWtlLXN0cmluZyAoLSA3MCBwZXJjZW50KSA/LSkgCisJICAgICJcbiIpKSkKKworKGRlZnVuIGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgKCZvcHRpb25hbCBwZXJjZW50KQorICAiUmV0dXJuIGEgY29tbWVudCBzZXBhcmF0b3IuIgorICAobGV0ICgocGVyY2VudCAob3IgcGVyY2VudCAzKSkpCisgICAgKGNvbmNhdCAobWFrZS1zdHJpbmcgcGVyY2VudCA/JSkgCisJICAgIChtYWtlLXN0cmluZyAoLSA3MCBwZXJjZW50KSA/PSkgCisJICAgICJcbiIpKSkKKworKGRlZnVuIGVybGFuZy1za2VsLWRkLW1tbS15eXl5ICgpCisgICJSZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZSBhcyBhIHN0cmluZyBpbiBcIkREIE1vbiBZWVlZXCIgZm9ybS4KK1RoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgREQgaXMgc3BhY2UgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiAxMC4iCisgIChsZXQgKChkYXRlIChjdXJyZW50LXRpbWUtc3RyaW5nKSkpCisgICAgKGZvcm1hdCAiJTJkICVzICVzIgorCSAgICAoc3RyaW5nLXRvLWludCAoc3Vic3RyaW5nIGRhdGUgOCAxMCkpCisJICAgIChzdWJzdHJpbmcgZGF0ZSA0IDcpCisJICAgIChzdWJzdHJpbmcgZGF0ZSAtNCkpKSkKKwwKKzs7IEluZGVudGF0aW9uIGNvZGU6CisKKyhkZWZ1biBlcmxhbmctaW5kZW50LWNvbW1hbmQgKCZvcHRpb25hbCB3aG9sZS1leHApCisgICJJbmRlbnQgY3VycmVudCBsaW5lIGFzIEVybGFuZyBjb2RlLgorV2l0aCBhcmd1bWVudCwgaW5kZW50IGFueSBhZGRpdGlvbmFsIGxpbmVzIG9mIHRoZSBzYW1lIGNsYXVzZQorcmlnaWRseSBhbG9uZyB3aXRoIHRoaXMgb25lLiIKKyAgKGludGVyYWN0aXZlICJQIikKKyAgKGlmIHdob2xlLWV4cAorICAgICAgOzsgSWYgYXJnLCBhbHd5cyBpbmRlbnQgdGhpcyBsaW5lIGFzIEVybGFuZworICAgICAgOzsgYW5kIHNoaWZ0IHJlbWFpbmluZyBsaW5lcyBvZiBjbGF1c2UgdGhlIHNhbWUgYW1vdW50LgorICAgICAgKGxldCAoKHNoaWZ0LWFtdCAoZXJsYW5nLWluZGVudC1saW5lKSkKKwkgICAgYmVnIGVuZCkKKwkoc2F2ZS1leGN1cnNpb24KKwkgIChpZiBlcmxhbmctdGFiLWFsd2F5cy1pbmRlbnQKKwkgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpKQorCSAgKHNldHEgYmVnIChwb2ludCkpCisJICAoZXJsYW5nLWVuZC1vZi1jbGF1c2UgMSkKKwkgIChzZXRxIGVuZCAocG9pbnQpKQorCSAgKGdvdG8tY2hhciBiZWcpCisJICAoZm9yd2FyZC1saW5lIDEpCisJICAoc2V0cSBiZWcgKHBvaW50KSkpCisJKGlmICg+IGVuZCBiZWcpCisJICAgIChpbmRlbnQtY29kZS1yaWdpZGx5IGJlZyBlbmQgc2hpZnQtYW10ICJcbiIpKSkKKyAgICAoaWYgKGFuZCAobm90IGVybGFuZy10YWItYWx3YXlzLWluZGVudCkKKwkgICAgIChzYXZlLWV4Y3Vyc2lvbgorCSAgICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFx0IikKKwkgICAgICAgKG5vdCAoYm9scCkpKSkKKwkoaW5zZXJ0LXRhYikKKyAgICAgIChlcmxhbmctaW5kZW50LWxpbmUpKSkpCisKKworKGRlZnVuIGVybGFuZy1pbmRlbnQtbGluZSAoKQorICAiSW5kZW50IGN1cnJlbnQgbGluZSBhcyBFcmxhbmcgY29kZS4KK1JldHVybiB0aGUgYW1vdW50IHRoZSBpbmRlbnRhdGlvbiBjaGFuZ2VkIGJ5LiIKKyAgKGxldCAoKHBvcyAoLSAocG9pbnQtbWF4KSAocG9pbnQpKSkKKwlpbmRlbnQgYmVnCisJc2hpZnQtYW10KQorICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQorICAgIChzZXRxIGJlZyAocG9pbnQpKQorICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisgICAgKGNvbmQgKChsb29raW5nLWF0ICIlIikKKwkgICAoc2V0cSBpbmRlbnQgKGZ1bmNhbGwgY29tbWVudC1pbmRlbnQtZnVuY3Rpb24pKQorCSAgIChzZXRxIHNoaWZ0LWFtdCAoLSBpbmRlbnQgKGN1cnJlbnQtY29sdW1uKSkpKQorCSAgKHQKKwkgICAoc2V0cSBpbmRlbnQgKGVybGFuZy1jYWxjdWxhdGUtaW5kZW50KSkKKwkgICAoY29uZCAoKG51bGwgaW5kZW50KQorCQkgIChzZXRxIGluZGVudCAoY3VycmVudC1pbmRlbnRhdGlvbikpKQorCQkgKChlcSBpbmRlbnQgdCkKKwkJICA7OyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBoZXJlLgorCQkgIChlcnJvciAiRXJsYW5nIG1vZGUgZXJyb3IiKSkKKwkJICgoPSAoY2hhci1zeW50YXggKGZvbGxvd2luZy1jaGFyKSkgP1wpKQorCQkgIChzZXRxIGluZGVudCAoMS0gaW5kZW50KSkpKQorCSAgIChzZXRxIHNoaWZ0LWFtdCAoLSBpbmRlbnQgKGN1cnJlbnQtY29sdW1uKSkpKSkKKyAgICAoaWYgKHplcm9wIHNoaWZ0LWFtdCkKKwluaWwKKyAgICAgIChkZWxldGUtcmVnaW9uIGJlZyAocG9pbnQpKQorICAgICAgKGluZGVudC10byBpbmRlbnQpKQorICAgIDs7IElmIGluaXRpYWwgcG9pbnQgd2FzIHdpdGhpbiBsaW5lJ3MgaW5kZW50YXRpb24sIHBvc2l0aW9uCisgICAgOzsgYWZ0ZXIgdGhlIGluZGVudGF0aW9uLiBFbHNlIHN0YXkgYXQgc2FtZSBwb2ludCBpbiB0ZXh0LgorICAgIChpZiAoPiAoLSAocG9pbnQtbWF4KSBwb3MpIChwb2ludCkpCisJKGdvdG8tY2hhciAoLSAocG9pbnQtbWF4KSBwb3MpKSkKKyAgICBzaGlmdC1hbXQpKQorCisKKyhkZWZ1biBlcmxhbmctaW5kZW50LXJlZ2lvbiAoYmVnIGVuZCkKKyAgIkluZGVudCByZWdpb24gb2YgZXJsYW5nIGNvZGUuCisKK1RoaXMgaXMgYXV0b21hZ2ljYWxseSBjYWxsZWQgYnkgdGhlIHVzZXIgbGV2ZWwgZnVuY3Rpb24gYGluZGVudC1yZWdpb24nLiIKKyAgKGludGVyYWN0aXZlICJyIikKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggbmlsKQorCSAgKGNvbnRpbnVlIHQpCisJICAoZnJvbS1lbmQgKC0gKHBvaW50LW1heCkgZW5kKSkKKwkgIGluZGVudC1wb2ludAkJOzsgVGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lCisJICBpbmRlbnQgCQk7OyBUaGUgaW5kZW50IGFtb3VudAorCSAgc3RhdGUpCisgICAgICAoZ290by1jaGFyIGJlZykKKyAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKKyAgICAgIChzZXRxIGluZGVudC1wb2ludCAocG9pbnQpKQorICAgICAgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorICAgICAgOzsgUGFyc2UgdGhlIEVybGFuZyBjb2RlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY2xhdXNlIHRvCisgICAgICA7OyB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWdpb24uCisgICAgICAod2hpbGUgKDwgKHBvaW50KSBpbmRlbnQtcG9pbnQpCisJKHNldHEgc3RhdGUgKGVybGFuZy1wYXJ0aWFsLXBhcnNlIChwb2ludCkgaW5kZW50LXBvaW50IHN0YXRlKSkpCisgICAgICA7OyBJbmRlbnQgZXZlcnkgbGluZSBpbiB0aGUgcmVnaW9uCisgICAgICAod2hpbGUgY29udGludWUKKwkoZ290by1jaGFyIGluZGVudC1wb2ludCkKKwkoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQorCShjb25kICgobG9va2luZy1hdCAiJSIpCisJICAgICAgIDs7IERvIG5vdCB1c2Ugb3VyIHN0YWNrIHRvIGhlbHAgdGhlIHVzZXIgdG8gY3VzdG9taXplCisJICAgICAgIDs7IGNvbW1lbnQgaW5kZW50YXRpb24uCisJICAgICAgIChzZXRxIGluZGVudCAoZnVuY2FsbCBjb21tZW50LWluZGVudC1mdW5jdGlvbikpKQorCSAgICAgICgobG9va2luZy1hdCAiJCIpCisJICAgICAgIDs7IERvbid0IGluZGVudCBlbXB0eSBsaW5lcy4KKwkgICAgICAgKHNldHEgaW5kZW50IDApKQorCSAgICAgICh0CisJICAgICAgIChzZXRxIGluZGVudAorCQkgICAgIChzYXZlLWV4Y3Vyc2lvbgorCQkgICAgICAgKGVybGFuZy1jYWxjdWxhdGUtc3RhY2staW5kZW50IChwb2ludCkgc3RhdGUpKSkKKwkgICAgICAgKGNvbmQgKChudWxsIGluZGVudCkKKwkJICAgICAgKHNldHEgaW5kZW50IChjdXJyZW50LWluZGVudGF0aW9uKSkpCisJCSAgICAgKChlcSBpbmRlbnQgdCkKKwkJICAgICAgOzsgVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIgaGVyZS4KKwkJICAgICAgKGVycm9yICJFcmxhbmcgbW9kZSBlcnJvciIpKQorCQkgICAgICgoPSAoY2hhci1zeW50YXggKGZvbGxvd2luZy1jaGFyKSkgP1wpKQorCQkgICAgICAoc2V0cSBpbmRlbnQgKDEtIGluZGVudCkpKSkpKQorCShpZiAoemVyb3AgKC0gaW5kZW50IChjdXJyZW50LWNvbHVtbikpKQorCSAgICBuaWwKKwkgIChkZWxldGUtcmVnaW9uIGluZGVudC1wb2ludCAocG9pbnQpKQorCSAgKGluZGVudC10byBpbmRlbnQpKQorCTs7IEZpbmQgdGhlIG5leHQgbGluZSBpbiB0aGUgcmVnaW9uCisJKGdvdG8tY2hhciBpbmRlbnQtcG9pbnQpCisJKHNhdmUtZXhjdXJzaW9uCisJICAoZm9yd2FyZC1saW5lIDEpCisJICAoc2V0cSBpbmRlbnQtcG9pbnQgKHBvaW50KSkpCisJKGlmICg+PSBmcm9tLWVuZCAoLSAocG9pbnQtbWF4KSBpbmRlbnQtcG9pbnQpKQorCSAgICAoc2V0cSBjb250aW51ZSBuaWwpCisJICAod2hpbGUgKDwgKHBvaW50KSBpbmRlbnQtcG9pbnQpCisJICAgIChzZXRxIHN0YXRlIChlcmxhbmctcGFydGlhbC1wYXJzZQorCQkJIChwb2ludCkgaW5kZW50LXBvaW50IHN0YXRlKSkpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWluZGVudC1jdXJyZW50LWJ1ZmZlciAoKQorICAiSW5kZW50IGN1cnJlbnQgYnVmZmVyIGFzIEVybGFuZyBjb2RlLiIKKyAgKGludGVyYWN0aXZlKQorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoc2F2ZS1yZXN0cmljdGlvbgorICAgICAgKHdpZGVuKQorICAgICAgKGVybGFuZy1pbmRlbnQtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctaW5kZW50LWZ1bmN0aW9uICgpCisgICJJbmRlbnQgY3VycmVudCBFcmxhbmcgZnVuY3Rpb24uIgorICAoaW50ZXJhY3RpdmUpCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQgKChlbmQgKHByb2duIChlcmxhbmctZW5kLW9mLWZ1bmN0aW9uIDEpIChwb2ludCkpKQorCSAgKGJlZyAocHJvZ24gKGVybGFuZy1iZWdpbm5pbmctb2YtZnVuY3Rpb24gMSkgKHBvaW50KSkpKQorICAgICAgKGVybGFuZy1pbmRlbnQtcmVnaW9uIGJlZyBlbmQpKSkpCisKKworKGRlZnVuIGVybGFuZy1pbmRlbnQtY2xhdXNlICgpCisgICJJbmRlbnQgY3VycmVudCBFcmxhbmcgY2xhdXNlLiIKKyAgKGludGVyYWN0aXZlKQorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgoZW5kIChwcm9nbiAoZXJsYW5nLWVuZC1vZi1jbGF1c2UgMSkgKHBvaW50KSkpCisJICAoYmVnIChwcm9nbiAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgMSkgKHBvaW50KSkpKQorICAgICAgKGVybGFuZy1pbmRlbnQtcmVnaW9uIGJlZyBlbmQpKSkpCisKKworKGRlZm1hY3JvIGVybGFuZy1wdXNoICh4IHN0YWNrKSAobGlzdCAnc2V0cSBzdGFjayAobGlzdCAnY29ucyB4IHN0YWNrKSkpCisoZGVmbWFjcm8gZXJsYW5nLXBvcCAoc3RhY2spIChsaXN0ICdzZXRxIHN0YWNrIChsaXN0ICdjZHIgc3RhY2spKSkKKzs7IFdvdWxkIG11Y2ggcHJlZmVyIHRvIG1ha2UgY2FkZHIgYSBtYWNybyBidXQgdGhpcyBjbGFzaGVzLgorKGRlZnVuIGVybGFuZy1jYWRkciAoeCkgKGNhciAoY2RyIChjZHIgeCkpKSkKKworCisoZGVmdW4gZXJsYW5nLWNhbGN1bGF0ZS1pbmRlbnQgKCZvcHRpb25hbCBwYXJzZS1zdGFydCkKKyAgIkNvbXB1dGUgYXBwcm9wcmlhdGUgaW5kZW50YXRpb24gZm9yIGN1cnJlbnQgbGluZSBhcyBFcmxhbmcgY29kZS4KK1JldHVybiBuaWwgaWYgbGluZSBzdGFydHMgaW5zaWRlIHN0cmluZywgdCBpZiBpbiBhIGNvbW1lbnQuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgoaW5kZW50LXBvaW50IChwb2ludCkpCisJICAoY2FzZS1mb2xkLXNlYXJjaCBuaWwpCisJICAoc3RhdGUgbmlsKSkKKyAgICAgIChpZiBwYXJzZS1zdGFydAorCSAgKGdvdG8tY2hhciBwYXJzZS1zdGFydCkKKwkoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpKQorICAgICAgKHdoaWxlICg8IChwb2ludCkgaW5kZW50LXBvaW50KQorCShzZXRxIHN0YXRlIChlcmxhbmctcGFydGlhbC1wYXJzZSAocG9pbnQpIGluZGVudC1wb2ludCBzdGF0ZSkpKQorICAgICAgKGVybGFuZy1jYWxjdWxhdGUtc3RhY2staW5kZW50IGluZGVudC1wb2ludCBzdGF0ZSkpKSkKKworKGRlZnVuIGVybGFuZy1zaG93LXN5bnRhY3RpYy1pbmZvcm1hdGlvbiAoKQorICAiU2hvdyBzeW50YWN0aWMgaW5mb3JtYXRpb24gZm9yIGN1cnJlbnQgbGluZS4iCisKKyAgKGludGVyYWN0aXZlKQorCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQgKChzdGFydGluZy1wb2ludCAocG9pbnQpKQorCSAgKGNhc2UtZm9sZC1zZWFyY2ggbmlsKQorCSAgKHN0YXRlIG5pbCkpCisgICAgICAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisgICAgICAod2hpbGUgKDwgKHBvaW50KSBzdGFydGluZy1wb2ludCkKKwkoc2V0cSBzdGF0ZSAoZXJsYW5nLXBhcnRpYWwtcGFyc2UgKHBvaW50KSBzdGFydGluZy1wb2ludCBzdGF0ZSkpKQorICAgICAgKG1lc3NhZ2UgIiVTIiBzdGF0ZSkpKSkKKworCisoZGVmdW4gZXJsYW5nLXBhcnRpYWwtcGFyc2UgKGZyb20gdG8gJm9wdGlvbmFsIHN0YXRlKQorICAiUGFyc2UgRXJsYW5nIHN5bnRheCBzdGFydGluZyBhdCBGUk9NIHVudGlsIFRPLCB3aXRoIGFuIG9wdGlvbmFsIFNUQVRFLgorVmFsdWUgaXMgbGlzdCAoc3RhY2sgdG9rZW4tc3RhcnQgdG9rZW4tdHlwZSBpbi13aGF0KS4iCisgIChnb3RvLWNoYXIgZnJvbSkJCQk7IFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcKKyAgKGVybGFuZy1za2lwLWJsYW5rIHRvKQorICAobGV0ICgoY3MgKGNoYXItc3ludGF4IChmb2xsb3dpbmctY2hhcikpKQorCShzdGFjayAoY2FyIHN0YXRlKSkKKwkodG9rZW4gKHBvaW50KSkKKwlpbi13aGF0KQorICAgIChjb25kIAorCisgICAgIDs7IERvbmU6IFJldHVybiBwcmV2aW91cyBzdGF0ZS4KKyAgICAgKCg+PSB0b2tlbiB0bykKKwkgICAoc2V0cSB0b2tlbiAobnRoIDEgc3RhdGUpKQorCSAgIChzZXRxIGNzIChudGggMiBzdGF0ZSkpCisJICAgKHNldHEgaW4td2hhdCAobnRoIDMgc3RhdGUpKSkKKyAgICAgOzsgV29yZCBjb25zdGl0dWVudDogY2hlY2sgYW5kIGhhbmRsZSBrZXl3b3Jkcy4KKyAgICAgKCg9IGNzID93KQorICAgICAgKGlmIChsb29raW5nLWF0ICJcXChlbmRcXHxhZnRlclxcKVteX2EtekEtWjAtOV0iKQorCSAgOzsgTXVzdCBwb3AgdG9wIGljciBsYXllciwgYGFmdGVyJyB3aWxsIHB1c2ggYSBuZXcKKwkgIDs7IGxheWVyIG5leHQuCisJICAocHJvZ24KKwkgICAgKHdoaWxlIChhbmQgc3RhY2sgKGVxIChjYXIgKGNhciBzdGFjaykpICctPikpCisJICAgICAgKGVybGFuZy1wb3Agc3RhY2spKQorCSAgICAoaWYgKGFuZCBzdGFjayAobWVtcSAoY2FyIChjYXIgc3RhY2spKSAnKGljciBiZWdpbikpKQorCQkoZXJsYW5nLXBvcCBzdGFjaykpKSkKKyAgICAgIChjb25kICgobG9va2luZy1hdAorCSAgICAgICJcXChpZlxcfGNhc2VcXHxyZWNlaXZlXFx8YWZ0ZXJcXClbXl9hLXpBLVowLTldIikKKwkgICAgIDs7IE11c3QgcHVzaCBhIG5ldyBpY3IgKGlmL2Nhc2UvcmVjZWl2ZSkgbGF5ZXIuCisJICAgICAoZXJsYW5nLXB1c2ggKGxpc3QgJ2ljciB0b2tlbiAoY3VycmVudC1jb2x1bW4pKSBzdGFjaykpCisJICAgICgobG9va2luZy1hdCAiXFwoZnVuXFwpW15fYS16QS1aMC05XSIpCisJICAgICA7OyBQdWNoIGEgbmV3IGljciBsYXllciBpZiB3ZSBhcmUgZGVmaW5pbmcgYSBgZnVuJworCSAgICAgOzsgZXhwcmVzc2lvbiwgbm90IHdoZW4gd2UgYXJlIHJlZmVyaW5nIGFuIGV4aXN0aW5nCisJICAgICA7OyBmdW5jdGlvbi4KKwkgICAgIChpZiAoc2F2ZS1leGN1cnNpb24KKwkJICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDEpKQorCQkgICAoZXJsYW5nLXNraXAtYmxhbmsgdG8pCisJCSAgIChlcSAoZm9sbG93aW5nLWNoYXIpID9cKCkpCisJCSAoZXJsYW5nLXB1c2ggKGxpc3QgJ2ljciB0b2tlbiAoY3VycmVudC1jb2x1bW4pKSBzdGFjaykpKQorCSAgICAoKGxvb2tpbmctYXQgIlxcKGJlZ2luXFx8cXVlcnlcXClbXl9hLXpBLVowLTldIikKKwkgICAgIChlcmxhbmctcHVzaCAobGlzdCAnYmVnaW4gdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spKQorCSAgICAoKGxvb2tpbmctYXQgIndoZW5bXl9hLXpBLVowLTldIikKKwkgICAgIChlcmxhbmctcHVzaCAobGlzdCAnd2hlbiB0b2tlbiAoY3VycmVudC1jb2x1bW4pKSBzdGFjaykpKQorICAgICAgKGZvcndhcmQtc2V4cCAxKSkKKworICAgICA7OyBTdHJpbmc6IFRyeSB0byBza2lwIG92ZXIgaXQuIChDYXRjaCBlcnJvciBpZiBub3QgY29tcGxldGUuKQorICAgICAoKD0gY3MgP1wiKQorICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCSAgKHByb2duCisJICAgIChmb3J3YXJkLXNleHAgMSkKKwkgICAgKGlmICg+IChwb2ludCkgdG8pCisJCShwcm9nbgorCQkgIChzZXRxIGluLXdoYXQgJ3N0cmluZykKKwkJICAoZ290by1jaGFyIHRvKSkpKQorCShlcnJvcgorCSAoc2V0cSBpbi13aGF0ICdzdHJpbmcpCisJIChnb3RvLWNoYXIgdG8pKSkpCisKKyAgICAgOzsgU3ltYm9sIGNvbnN0aXR1ZW50LCBwdW5jdHVhdGlvbiwgb3IgZXhwcmVzc2lvbiBwcmVmaXg/CisgICAgICgobWVtcSBjcyAnKD8uID9fID8nKSkKKyAgICAgIChjb25kIAorCisgICAgICAgOzsgQ2xhdXNlIGVuZAorICAgICAgICgoPSAoZm9sbG93aW5nLWNoYXIpID9cOykKKwkoaWYgKGFuZCBzdGFjayAoZXEgKGNhciAoY2FyIHN0YWNrKSkgJy0+KSkKKwkgICAgKGVybGFuZy1wb3Agc3RhY2spKQorCShmb3J3YXJkLWNoYXIgMSkpCisKKyAgICAgICA7OyBGdW5jdGlvbiBlbmQKKyAgICAgICAoKGxvb2tpbmctYXQgIlxcLlxcKFxccyBcXHxcblxcfFxcczxcXCkiKQorCShzZXRxIHN0YWNrIG5pbCkKKwkoZm9yd2FyZC1jaGFyIDEpKQorCisgICAgICAgOzsgRnVuY3Rpb24gaGVhZAorICAgICAgICgobG9va2luZy1hdCAiLT5cXHw6LSIpCisJKGlmIChhbmQgc3RhY2sgKGVxIChjYXIgKGNhciBzdGFjaykpICd3aGVuKSkKKwkgICAgKGVybGFuZy1wb3Agc3RhY2spKQorCShlcmxhbmctcHVzaCAobGlzdCAnLT4gdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spCisJKGZvcndhcmQtY2hhciAyKSkKKworICAgICAgIDs7IExpc3QtY29tcHJlaGVuc2lvbiBkaXZpZGVyCisgICAgICAgKChsb29raW5nLWF0ICJ8fCIpCisJKGVybGFuZy1wdXNoIChsaXN0ICd8fCB0b2tlbiAoY3VycmVudC1jb2x1bW4pKSBzdGFjaykKKwkoZm9yd2FyZC1jaGFyIDIpKQorCisgICAgICAgOzsgQml0LXN5bnRheCBvcGVuIHBhcmVuCisgICAgICAgKChsb29raW5nLWF0ICI8PCIpCisJKGVybGFuZy1wdXNoIChsaXN0ICdcKCB0b2tlbiAoY3VycmVudC1jb2x1bW4pKSBzdGFjaykKKwkoZm9yd2FyZC1jaGFyIDIpKQorCisgICAgICAgOzsgQmJpdC1zeW50YXggY2xvc2UgcGFyZW4KKyAgICAgICAoKGxvb2tpbmctYXQgIj4+IikKKwkod2hpbGUgKG1lbXEgKGNhciAoY2FyIHN0YWNrKSkgJyh8fCAtPikpCisJICAoZXJsYW5nLXBvcCBzdGFjaykpCisJKGNvbmQgKChlcSAoY2FyIChjYXIgc3RhY2spKSAnXCgpCisJICAgICAgIChlcmxhbmctcG9wIHN0YWNrKSkKKwkgICAgICAoKG1lbXEgKGNhciAoY2FyIHN0YWNrKSkgJyhpY3IgYmVnaW4pKQorCSAgICAgICAoZXJyb3IgIk1pc3NpbmcgYGVuZCciKSkKKwkgICAgICAodAorCSAgICAgICAoZXJyb3IgIlVuYmFsYW5jZWQgcGFyZW50aGVzZXMiKSkpCisJKGZvcndhcmQtY2hhciAyKSkKKworICAgICAgIDs7IE1hY3JvCisgICAgICAgKCg9IChmb2xsb3dpbmctY2hhcikgPz8pCisJOzsgU2tpcCBvdmVyIG1hY3JvIG5hbWUgYW5kIGFueSBmb2xsb3dpbmcgd2hpdGVzcGFjZS4KKwkoZm9yd2FyZC13b3JkIDEpCisJKHNraXAtc3ludGF4LWZvcndhcmQgIi0iIHRvKQorCTs7IE1hY3JvIG1pZ2h0IGhhdmUgYW4gYXJndW1lbnQgbGlzdC4gU2tpcCBpdCB0b28uCisJKHdoZW4gKD0gKGZvbGxvd2luZy1jaGFyKSA/XCgpCisJICAoZm9yd2FyZC1saXN0IDEpKSkKKworICAgICAgIDs7IE90aGVyIHB1bmN0dWF0aW9uOiBTa2lwIG92ZXIgaXQgYW5kIGFueSBmb2xsb3dpbmcgcHVuY3R1YXRpb24KKyAgICAgICAoKD0gY3MgPy4pCisJOzsgU2tpcCBvdmVyIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBvcGVyYW5kLgorCShza2lwLXN5bnRheC1mb3J3YXJkICIuIikpCisKKyAgICAgICA7OyBPdGhlciBjaGFyOiBTa2lwIG92ZXIgaXQuCisgICAgICAgKHQKKwkoZm9yd2FyZC1jaGFyIDEpKSkpCisKKyAgICAgOzsgT3BlbiBwYXJlbnRoZXNpcworICAgICAoKD0gY3MgP1woKQorICAgICAgKGVybGFuZy1wdXNoIChsaXN0ICdcKCB0b2tlbiAoY3VycmVudC1jb2x1bW4pKSBzdGFjaykKKyAgICAgIChmb3J3YXJkLWNoYXIgMSkpCisKKyAgICAgOzsgQ2xvc2UgcGFyZW50aGVzaXMKKyAgICAgKCg9IGNzID9cKSkKKyAgICAgICh3aGlsZSAobWVtcSAoY2FyIChjYXIgc3RhY2spKSAnKHx8IC0+KSkKKwkoZXJsYW5nLXBvcCBzdGFjaykpCisgICAgICAoY29uZCAoKGVxIChjYXIgKGNhciBzdGFjaykpICdcKCkKKwkgICAgIChlcmxhbmctcG9wIHN0YWNrKSkKKwkgICAgKChtZW1xIChjYXIgKGNhciBzdGFjaykpICcoaWNyIGJlZ2luKSkKKwkgICAgIChlcnJvciAiTWlzc2luZyBgZW5kJyIpKQorCSAgICAodAorCSAgICAgKGVycm9yICJVbmJhbGFuY2VkIHBhcmVudGhlc2lzIikpKQorICAgICAgKGZvcndhcmQtY2hhciAxKSkKKyAgICAgCisgICAgIDs7IENoYXJhY3RlciBxdW90ZTogU2tpcCBpdCBhbmQgdGhlIHF1b3RlZCBjaGFyLgorICAgICAoKD0gY3MgPy8pCisgICAgICAoZm9yd2FyZC1jaGFyIDIpKQorCisgICAgIDs7IENoYXJhY3RlciBlc2NhcGU6IFNraXAgaXQgYW5kIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICgoPSBjcyA/XFwpCisgICAgICAoZm9yd2FyZC1jaGFyIDEpCisgICAgICAoc2tpcC1zeW50YXgtZm9yd2FyZCAidyIpKQorCisgICAgIDs7IEV2ZXJ5dGhpbmcgZWxzZQorICAgICAodAorICAgICAgKGZvcndhcmQtY2hhciAxKSkpCisgICAgKGxpc3Qgc3RhY2sgdG9rZW4gY3MgaW4td2hhdCkpKQorCisKKyhkZWZ1biBlcmxhbmctY2FsY3VsYXRlLXN0YWNrLWluZGVudCAoaW5kZW50LXBvaW50IHN0YXRlKQorICAiRnJvbSB0aGUgZ2l2ZW4gbGFzdCBwb3NpdGlvbiBhbmQgc3RhdGUgKHN0YWNrKSBjYWxjdWxhdGUgaW5kZW50YXRpb24uCitSZXR1cm4gbmlsIGlmIGluc2lkZSBzdHJpbmcsIHQgaWYgaW4gYSBjb21tZW50LiIKKyAgKGxldCogKChzdGFjayAoYW5kIHN0YXRlIChjYXIgc3RhdGUpKSkKKwkgKHRva2VuIChudGggMSBzdGF0ZSkpCisJIChzdGFjay10b3AgKGFuZCBzdGFjayAoY2FyIHN0YWNrKSkpKQorICAgIChjb25kICgobnVsbCBzdGF0ZSkJCQk7Tm8gc3RhdGUKKwkgICAwKQorCSAgKChudGggMyBzdGF0ZSkKKwkgICA7OyBSZXR1cm4gbmlsIG9yIHQuCisJICAgKGVxIChudGggMyBzdGF0ZSkgJ2NvbW1lbnQpKQorCSAgKChudWxsIHN0YWNrKQorCSAgIChpZiAobG9va2luZy1hdCAid2hlblteX2EtekEtWjAtOV0iKQorCSAgICAgICBlcmxhbmctaW5kZW50LWd1YXJkCisJICAgICAwKSkKKwkgICgoZXEgKGNhciBzdGFjay10b3ApICdcKCkKKwkgICA7OyBFbGVtZW50IG9mIGxpc3QsIHR1cGxlIG9yIHBhcnQgb2YgYW4gZXhwcmVzc2lvbiwKKwkgICAoaWYgKG51bGwgZXJsYW5nLWFyZ3VtZW50LWluZGVudCkKKwkgICAgICAgOzsgaW5kZW50IHRvIG5leHQgY29sdW1uLgorCSAgICAgICAoMSsgKG50aCAyIHN0YWNrLXRvcCkpCisJICAgICAoZ290by1jaGFyIChudGggMSBzdGFjay10b3ApKQorCSAgICAgKGNvbmQgKChsb29raW5nLWF0ICJbKHtdXFxzICpcXCgkXFx8JVxcKSIpCisJCSAgICA7OyBMaW5lIGVuZHMgd2l0aCBwYXJlbnRoZXNpcy4KKwkJICAgICgrIChlcmxhbmctaW5kZW50LWZpbmQtcHJlY2VkaW5nLWV4cHIpCisJCSAgICAgICBlcmxhbmctYXJndW1lbnQtaW5kZW50KSkKKwkJICAgKHQKKwkJICAgIDs7IEluZGVudCB0byB0aGUgc2FtZSBjb2x1bW4gYXMgdGhlIGZpcnN0CisJCSAgICA7OyBhcmd1bWVudC4KKwkJICAgIChnb3RvLWNoYXIgKDErIChudGggMSBzdGFjay10b3ApKSkKKwkJICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisJCSAgICAoY3VycmVudC1jb2x1bW4pKSkpKQorCSAgKChlcSAoY2FyIHN0YWNrLXRvcCkgJ2ljcikKKwkgICA7OyBUaGUgZGVmYXVsdCBpbmRlbnRhdGlvbiBpcyB0aGUgY29sdW1uIG9mIHRoZSBvcHRpb24KKwkgICA7OyBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIGtleXdvcmQuIChUaGlzIGRvZXMgbm90IGFwcGx5IHRvCisJICAgOzsgYGNhc2UnLikgIFNob3VsZCBubyBvcHRpb24gYmUgb24gdGhlIHNhbWUgbGluZSwgdGhlCisJICAgOzsgaW5kZW50YXRpb24gaXMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBrZXl3b3JkICsKKwkgICA7OyBgZXJsYW5nLWluZGVudC1sZXZlbCcuCisJICAgOzsKKwkgICA7OyBgYWZ0ZXInIHNob3VsZCBiZSBpbmRlbnRhdGVkIHRvIHRoZSBzYXZlIGxldmVsIGFzIHRoZQorCSAgIDs7IGNvcnJlc3BvbmRpbmcgcmVjZWl2ZS4KKwkgICAoaWYgKGxvb2tpbmctYXQgImFmdGVyW15fYS16QS1aMC05XSIpCisJICAgICAgIChudGggMiBzdGFjay10b3ApCisJICAgICAoc2F2ZS1leGN1cnNpb24KKwkgICAgICAgKGdvdG8tY2hhciAobnRoIDEgc3RhY2stdG9wKSkKKwkgICAgICAgKGlmIChsb29raW5nLWF0ICJjYXNlW15fYS16QS1aMC05XSIpCisJCSAgICgrIChudGggMiBzdGFjay10b3ApIGVybGFuZy1pbmRlbnQtbGV2ZWwpCisJCSAoc2tpcC1jaGFycy1mb3J3YXJkICJhLXoiKQorCQkgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikKKwkJIChpZiAobWVtcSAoZm9sbG93aW5nLWNoYXIpICcoPyUgP1xuKSkKKwkJICAgICAoKyAobnRoIDIgc3RhY2stdG9wKSBlcmxhbmctaW5kZW50LWxldmVsKQorCQkgICAoY3VycmVudC1jb2x1bW4pKSkpKSkKKwkgIDs7IFJlYWwgaW5kZW50YXRpb24sIHdoZXJlIG9wZXJhdG9ycyBjcmVhdGUgZXh0cmEgaW5kZW50YXRpb24gZXRjLgorCSAgKChtZW1xIChjYXIgc3RhY2stdG9wKSAnKC0+IHx8IGJlZ2luKSkKKwkgICAoZ290by1jaGFyIChudGggMSBzdGFjay10b3ApKQorCSAgIDs7IENoZWNrIGlmIHRoZXJlIGlzIG1vcmUgY29kZSBhZnRlciB0aGUgJy0+JyBvbiB0aGUKKwkgICA7OyBzYW1lIGxpbmUuIElmIHNvIHVzZSB0aGlzIGluZGVudGF0aW9uIGFzIGJhc2UsIGVsc2UKKwkgICA7OyB1c2UgcGFyZW50IGluZGVudGF0aW9uICsgMiAqIGxldmVsIGFzIGJhc2UuCisJICAgKGxldCAoKG9mZiBlcmxhbmctaW5kZW50LWxldmVsKQorCQkgKHNraXAgMikpCisJICAgICAoY29uZCAoKG51bGwgKGNkciBzdGFjaykpKQk7IFRvcCBsZXZlbCBpbiBmdW5jdGlvbi4KKwkJICAgKChlcSAoY2FyIHN0YWNrLXRvcCkgJ2JlZ2luKQorCQkgICAgKHNldHEgc2tpcCA1KSkKKwkJICAgKChlcSAoY2FyIHN0YWNrLXRvcCkgJy0+KQorCQkgICAgKHNldHEgb2ZmICgqIDIgZXJsYW5nLWluZGVudC1sZXZlbCkpKSkKKwkgICAgIChsZXQgKChiYXNlIChlcmxhbmctaW5kZW50LWZpbmQtYmFzZSBzdGFjayBpbmRlbnQtcG9pbnQgb2ZmIHNraXApKSkKKwkgICAgICAgOzsgTG9vayBhdCBsYXN0IHRoaW5nIHRvIHNlZSBob3cgd2UgYXJlIHRvIG1vdmUgcmVsYXRpdmUKKwkgICAgICAgOzsgdG8gdGhlIGJhc2UuCisJICAgICAgIChnb3RvLWNoYXIgdG9rZW4pCisJICAgICAgIChjb25kICgobG9va2luZy1hdCAifHxcXHwsXFx8LT5cXHw6LSIpCisJCSAgICAgIGJhc2UpCisJCSAgICAgKChlcmxhbmctYXQta2V5d29yZCkKKwkJICAgICAgKCsgKGN1cnJlbnQtY29sdW1uKSBlcmxhbmctaW5kZW50LWxldmVsKSkKKwkJICAgICAoKG9yICg9IChjaGFyLXN5bnRheCAoZm9sbG93aW5nLWNoYXIpKSA/LikKKwkJCSAgKGVybGFuZy1hdC1vcGVyYXRvcikpCisJCSAgICAgICgrIGJhc2UgZXJsYW5nLWluZGVudC1sZXZlbCkpCisJCSAgICAgKHQKKwkJICAgICAgKGdvdG8tY2hhciBpbmRlbnQtcG9pbnQpCisJCSAgICAgIChjb25kICgobWVtcSAoZm9sbG93aW5nLWNoYXIpICcoP1woID97KSkKKwkJCSAgICAgOzsgRnVuY3Rpb24gYXBwbGljYXRpb24gb3IgcmVjb3JkLgorCQkJICAgICAoKyAoZXJsYW5nLWluZGVudC1maW5kLXByZWNlZGluZy1leHByKQorCQkJCWVybGFuZy1hcmd1bWVudC1pbmRlbnQpKQorCQkJICAgIDs7IEVtcHR5IGxpbmUsIG9yIGVuZDsgdHJlYXQgaXQgYXMgdGhlIGVuZCBvZgorCQkJICAgIDs7IHRoZSBibG9jay4gIChIZXJlIHdlIGhhdmUgYSBjaG9pY2U6IHNob3VsZAorCQkJICAgIDs7IHRoZSB1c2VyIGJlIGZvcmNlZCB0byByZWluZGVudCBjb250aW51ZWQKKwkJCSAgICA7OyBsaW5lcywgb3Igc2hvdWxkIHRoZSAiZW5kIiBiZSByZWluZGVudGVkPykKKwkJCSAgICAoKGxvb2tpbmctYXQgIlxcKGVuZFxcfGFmdGVyXFwpW15fYS16QS1aMC05XVxcfCQiKQorCQkJICAgICAoaWYgKGVxIChjYXIgKGNhciBzdGFjaykpICctPikKKwkJCQkgKGVybGFuZy1wb3Agc3RhY2spKQorCQkJICAgICAoaWYgc3RhY2sKKwkJCQkgKGVybGFuZy1jYWRkciAoY2FyIHN0YWNrKSkKKwkJCSAgICAgICAwKSkKKwkJCSAgICA7OyBBdm9pZCB0cmF0aW5nIGNvbW1lbnRzIGEgY29udGludWVkIGxpbmUuCisJCQkgICAgKCg9IChmb2xsb3dpbmctY2hhcikgPyUpCisJCQkgICAgIGJhc2UpCisJCQkgICAgOzsgQ29udGludWVkIGxpbmUgKGUuZy4gbGluZSBiZWdpbm5pbmcKKwkJCSAgICA7OyB3aXRoIGFuIG9wZXJhdG9yLikKKwkJCSAgICAodCAoKyBiYXNlIGVybGFuZy1pbmRlbnQtbGV2ZWwpKSkpKSkpKQorCSAgKChlcSAoY2FyIHN0YWNrLXRvcCkgJ3doZW4pCisJICAgKGdvdG8tY2hhciAobnRoIDEgc3RhY2stdG9wKSkKKwkgICAoaWYgKGxvb2tpbmctYXQgIndoZW5cXHMgKlxcKCRcXHwlXFwpIikKKwkgICAgICAgKHByb2duCisJCSAoZXJsYW5nLXBvcCBzdGFjaykKKwkJIChpZiAoYW5kIHN0YWNrIChlcSAobnRoIDAgKGNhciBzdGFjaykpICdpY3IpKQorCQkgICAgIChwcm9nbgorCQkgICAgICAgKGdvdG8tY2hhciAobnRoIDEgKGNhciBzdGFjaykpKQorCQkgICAgICAgKCsgKG50aCAyIChjYXIgc3RhY2spKSBlcmxhbmctaW5kZW50LWd1YXJkCisJCQkgIDs7IHJlY2VpdmUgWFlaICAgIG9yICAgIHJlY2VpdmUKKwkJCSAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgIFhZWgorCQkJICAoaWYgKGxvb2tpbmctYXQgIlthLXpdK1xccyAqXFwoJFxcfCVcXCkiKQorCQkJICAgICAgZXJsYW5nLWluZGVudC1sZXZlbAorCQkJICAgICgqIDIgZXJsYW5nLWluZGVudC1sZXZlbCkpKSkKKwkJICAgZXJsYW5nLWluZGVudC1ndWFyZCkpCisJICAgICA7OyAid2hlbiIgaXMgZm9sbG93ZWQgYnkgY29kZSwgbGV0J3MgaW5kZW50IHRvIHRoZSBzYW1lCisJICAgICA7OyBjb2x1bW4uCisJICAgICAoZm9yd2FyZC1jaGFyIDQpCQk7IFNraXAgIndoZW4iCisJICAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQorCSAgICAgKGN1cnJlbnQtY29sdW1uKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1pbmRlbnQtZmluZC1iYXNlIChzdGFjayBpbmRlbnQtcG9pbnQgJm9wdGlvbmFsIG9mZnNldCBza2lwKQorICAiRmluZCB0aGUgYmFzZSBjb2x1bW4gZm9yIGN1cnJlbnQgc3RhY2suIgorICAob3Igc2tpcCAoc2V0cSBza2lwIDIpKQorICAob3Igb2Zmc2V0IChzZXRxIG9mZnNldCBlcmxhbmctaW5kZW50LWxldmVsKSkKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCogKChzdGFjay10b3AgKGNhciBzdGFjaykpKQorICAgICAgKGdvdG8tY2hhciAobnRoIDEgc3RhY2stdG9wKSkKKyAgICAgIChmb3J3YXJkLWNoYXIgc2tpcCkKKyAgICAgIChpZiAobG9va2luZy1hdCAiXFxzICpcXCgkXFx8JVxcKSIpCisJICAocHJvZ24KKwkgICAgKGlmIChtZW1xIChjYXIgc3RhY2stdG9wKSAnKC0+IHx8KSkKKwkJKGVybGFuZy1wb3Agc3RhY2spKQorCSAgICA7OyBUYWtlIHBhcmVudCBpZGVudGF0aW9uICsgb2Zmc2V0LAorCSAgICA7OyBlbHNlIGp1c3QgZXJsYW5nLWluZGVudC1sZXZlbCBpZiBubyBwYXJlbnQKKwkgICAgKGlmIHN0YWNrCisJCSgrIChlcmxhbmctY2FkZHIgKGNhciBzdGFjaykpCisJCSAgIG9mZnNldCkKKwkgICAgICBlcmxhbmctaW5kZW50LWxldmVsKSkKKwkoZXJsYW5nLXNraXAtYmxhbmsgaW5kZW50LXBvaW50KQorCShjdXJyZW50LWNvbHVtbikpKSkpCisKKworOzsgRG9lcyBub3QgaGFuZGxlIGBiZWdpbicgLi4gYGVuZCcuCisoZGVmdW4gZXJsYW5nLWluZGVudC1maW5kLXByZWNlZGluZy1leHByICgpCisgICJSZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb24uCitUaGlzIGFzc3VtZXMgdGhhdCB0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb24gaXMgZWl0aGVyIHNpbXBsZQorXChpLmUuIGFuIGF0b20pIG9yIHBhcmVudGhlc2l6ZWQuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoZm9yd2FyZC1zZXhwIC0xKQorICAgIChsZXQgKChjb2wgKGN1cnJlbnQtY29sdW1uKSkpCisgICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFx0IikKKyAgICAgIDs7IE5lZWRlZCB0byBtYXRjaCB0aGUgY29sb24gaW4gIidmb28nOidiYXInIi4KKyAgICAgIChpZiAobm90IChtZW1xIChwcmVjZWRpbmctY2hhcikgJyg/IyA/OikpKQorCSAgY29sCisJKGJhY2t3YXJkLWNoYXIgMSkKKwkoZm9yd2FyZC1zZXhwIC0xKQorCShjdXJyZW50LWNvbHVtbikpKSkpCisKKworKGRlZnVuIGVybGFuZy1za2lwLWJsYW5rICgmb3B0aW9uYWwgbGltKQorICAiU2tpcCBvdmVyIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzIHVudGlsIGxpbWl0IHJlYWNoZWQuIgorICAob3IgbGltIChzZXRxIGxpbSAocG9pbnQtbWF4KSkpCisgIChsZXQgKHN0b3ApCisgICAgKHdoaWxlIChhbmQgKG5vdCBzdG9wKSAoPCAocG9pbnQpIGxpbSkpCisgICAgICAoY29uZCAoKD0gKGZvbGxvd2luZy1jaGFyKSA/JSkKKwkgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIl5cbiIgbGltKSkKKwkgICAgKCg9IChmb2xsb3dpbmctY2hhcikgP1xuKQorCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXG4iIGxpbSkpCisJICAgICgobG9va2luZy1hdCAiXFxzICIpCisJICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICJcXFMgIiBsaW0gJ21vdmUpCisJCSAoZm9yd2FyZC1jaGFyIC0xKSkpCisJICAgICh0CisJICAgICAoc2V0cSBzdG9wIHQpKSkpCisgICAgc3RvcCkpCisKKyhkZWZ1biBlcmxhbmctYXQta2V5d29yZCAoKQorICAiQXJlIHdlIGxvb2tpbmcgYXQgYW4gRXJsYW5nIGtleXdvcmQgd2hpY2ggd2lsbCBpbmNyZWFzZSBpbmRlbnRhdGlvbj8iCisgIChsb29raW5nLWF0IChjb25jYXQgIlxcKHdoZW5cXHxpZlxcfGZ1blxcfGNhc2VcXHxiZWdpblxcfHF1ZXJ5XFx8IgorCQkgICAgICAib2ZcXHxyZWNlaXZlXFx8YWZ0ZXJcXHxjYXRjaFxcKVteX2EtekEtWjAtOV0iKSkpCisKKyhkZWZ1biBlcmxhbmctYXQtb3BlcmF0b3IgKCkKKyAgIkFyZSB3ZSBsb29raW5nIGF0IGFuIEVybGFuZyBvcGVyYXRvcj8iCisgIChsb29raW5nLWF0CisgICAiXFwoYm5vdFxcfGRpdlxcfG1vZFxcfGJhbmRcXHxib3JcXHxieG9yXFx8YnNsXFx8YnNyXFwpW15fYS16QS1aMC05XSIpKQorCisoZGVmdW4gZXJsYW5nLWNvbW1lbnQtaW5kZW50ICgpCisgICJDb21wdXRlIGVybGFuZyBjb21tZW50IGluZGVudGF0aW9uLgorCitVc2VkIGJvdGggYnkgYGluZGVudC1mb3ItY29tbWVudCcgYW5kIHRoZSBlcmxhbmcgc3BlY2lmaWMgaW5kZW50YXRpb24KK2NvbW1hbmRzLiIKKyAgKGNvbmQgKChsb29raW5nLWF0ICIlJSUiKSAwKQorCSgobG9va2luZy1hdCAiJSUiKQorCSAob3IgKGVybGFuZy1jYWxjdWxhdGUtaW5kZW50KQorCSAgICAgKGN1cnJlbnQtaW5kZW50YXRpb24pKSkKKwkodAorCSAoc2F2ZS1leGN1cnNpb24KKwkgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFx0IikKKwkgICAobWF4IChpZiAoYm9scCkgMCAoMSsgKGN1cnJlbnQtY29sdW1uKSkpCisJCWNvbW1lbnQtY29sdW1uKSkpKSkKKwwKKzs7OyBFcmxhbmcgbW92ZW1lbnQgY29tbWFuZHMKKworOzsgQWxsIGNvbW1hbmRzIGJlbG93IHdvcmsgYXMgbW92ZW1lbnQgY29tbWFuZHMuICBJLmUuIGlmIHRoZSBwb2ludCBpcworOzsgYXQgdGhlIGVuZCBvZiB0aGUgY2xhdXNlLCBhbmQgdGhlIGNvbW1hbmQgYGVybGFuZy1lbmQtb2YtY2xhdXNlJyBpcworOzsgZXhlY3V0ZWQsIHRoZSBwb2ludCBpcyBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBORVhUIGNsYXVzZS4gIChUaGlzCis7OyBtaW1pY3MgdGhlIGJlaGF2aW91ciBvZiBgZW5kLW9mLWRlZnVuJy4pCis7OworOzsgUGVyc29uYWxseSBJIHdvdWxkIGxpa2UgdG8gcmV3cml0ZSB0aGVtIHRvIGJlICJwdXJlIiwgYW5kIGFkZCBhIHNldAorOzsgb2YgbW92ZW1lbnQgZnVuY3Rpb25zLCBsaWtlIGBlcmxhbmctbmV4dC1jbGF1c2UnLAorOzsgYGVybGFuZy1wcmV2aW91cy1jbGF1c2UnLCBhbmQgdGhlIHNhbWUgZm9yIGZ1bmN0aW9ucy4KKzs7Cis7OyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWtlcyBpdCBob3BlbGVzcyB0byB1c2UgdGhlIGZ1bmN0aW9ucyBhcworOzsgc3Vicm91dGluZXMgaW4gbW9yZSBjb21wbGV4IGNvbW1hbmRzLiAgIC9hbmRlcnNsCisKKyhkZWZ1biBlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSAoJm9wdGlvbmFsIGFyZykKKyAgIk1vdmUgYmFja3dhcmQgdG8gcHJldmlvdXMgc3RhcnQgb2YgY2xhdXNlLgorV2l0aCBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGltZXMuCitSZXR1cm4gdCB1bmxlc3Mgc2VhcmNoIHN0b3BzIGR1ZSB0byBlbmQgb2YgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlICJwIikKKyAgKG9yIGFyZyAoc2V0cSBhcmcgMSkpCisgIChpZiAoPCBhcmcgMCkKKyAgICAgIDs7IFN0ZXAgYmFjayB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lLCB1bmxlc3Mgd2UgYXJlIGF0CisgICAgICA7OyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuICBUaGUgcmVhc29uIGZvciB0aGlzIG1vdmUgaXMKKyAgICAgIDs7IHRoYXQgdGhlIHJlZ2V4cCBiZWxvdyBpbmNsdWRlcyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlCisgICAgICA7OyBwcmV2aW91cyBsaW5lLgorICAgICAgKGlmIChib2JwKQorCSAgKG9yIChsb29raW5nLWF0ICJcbiIpCisJICAgICAgKGZvcndhcmQtY2hhciAxKSkKKwkoZm9yd2FyZC1jaGFyIC0xKQorCShpZiAobG9va2luZy1hdCAiXFxgXG4iKQorCSAgICAoZm9yd2FyZC1jaGFyIDEpKSkpCisgIDs7IFRoZSByZWdleHAgbWF0Y2hlcyBhIGZ1bmN0aW9uIGhlYWRlciB0aGF0IGlzbid0CisgIDs7IGluY2x1ZGVkIGluIGEgc3RyaW5nLgorICAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCAiXFwoXFxgXFx8XFxgXG5cXHxbXlxcXVxuXFwpXFwoW2Etel1cXHwnXFx8LVxcKSIKKwkJCSAgbmlsICdtb3ZlICgtIGFyZykpCisgICAgICAgKGxldCAoKGJlZyAobWF0Y2gtYmVnaW5uaW5nIDIpKSkKKwkgKGFuZCBiZWcgKGdvdG8tY2hhciBiZWcpKQorCSB0KSkpCisKKyhkZWZ1biBlcmxhbmctZW5kLW9mLWNsYXVzZSAoJm9wdGlvbmFsIGFyZykKKyAgIk1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjbGF1c2UuCitXaXRoIGFyZ3VtZW50LCBkbyB0aGlzIHRoYXQgbWFueSB0aW1lcy4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChvciBhcmcgKHNldHEgYXJnIDEpKQorICAod2hpbGUgKGFuZCAobG9va2luZy1hdCAiWyBcdF0qWyVcbl0iKQorCSAgICAgICh6ZXJvcCAoZm9yd2FyZC1saW5lIDEpKSkpCisgIDs7IE1vdmUgdG8gdGhlIG5leHQgY2xhdXNlLgorICAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgKC0gYXJnKSkKKyAgKGJlZ2lubmluZy1vZi1saW5lKSAgOzsgSnVzdCB0byBiZSBzdXJlLi4uCisgIChsZXQgKChjb250aW51ZSB0KSkKKyAgICAod2hpbGUgKGFuZCAobm90IChib2JwKSkgY29udGludWUpCisgICAgICAoZm9yd2FyZC1saW5lIC0xKQorICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikKKyAgICAgIChpZiAobG9va2luZy1hdCAiWyVcbl0iKQorCSAgbmlsCisJKGVuZC1vZi1saW5lKQorCShzZXRxIGNvbnRpbnVlIG5pbCkpKSkpCisKKyhkZWZ1biBlcmxhbmctbWFyay1jbGF1c2UgKCkKKyAgIlB1dCBtYXJrIGF0IGVuZCBvZiBjbGF1c2UsIHBvaW50IGF0IGJlZ2lubmluZy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHB1c2gtbWFyayAocG9pbnQpKQorICAoZXJsYW5nLWVuZC1vZi1jbGF1c2UgMSkKKyAgOzsgU2V0cyB0aGUgcmVnaW9uLiBJbiBFbWFjcyAxOSBhbmQgWEVtYWNzLCB3ZSB3YW50cyB0byBhY3RpdmF0ZQorICA7OyB0aGUgcmVnaW9uLgorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocHVzaC1tYXJrIChwb2ludCkgbmlsIHQpCisgICAgKGVycm9yIChwdXNoLW1hcmsgKHBvaW50KSkpKQorICAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgMSkKKyAgOzsgVGhlIGFib3ZlIGZ1bmN0aW9uIGRlYWN0aXZhdGVzIHRoZSBtYXJrLgorICAoaWYgKGJvdW5kcCAnZGVhY3RpdmF0ZS1tYXJrKQorICAgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KSAnZGVhY3RpdmF0ZS1tYXJrIG5pbCkpKQorCisoZGVmdW4gZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbiAoJm9wdGlvbmFsIGFyZykKKyAgIk1vdmUgYmFja3dhcmQgdG8gcHJldmlvdXMgc3RhcnQgb2YgZnVuY3Rpb24uCitXaXRoIHBvc2l0aXZlIGFyZ3VtZW50LCBkbyB0aGlzIHRoYXQgbWFueSB0aW1lcy4KK1dpdGggbmVnYXRpdmUgYXJndW1lbnQsIHNlYXJjaCBmb3J3YXJkLgorCitSZXR1cm4gdCB1bmxlc3Mgc2VhcmNoIHN0b3BzIGR1ZSB0byBlbmQgb2YgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlICJwIikKKyAgKG9yIGFyZyAoc2V0cSBhcmcgMSkpCisgIChjb25kCisgICA7OyBTZWFyY2ggYmFja3dhcmQKKyAgICgoPiBhcmcgMCkKKyAgICAod2hpbGUgKGFuZCAoPiBhcmcgMCkKKwkJKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgMSkKKwkJICAgICAobGV0ICgoc3RhcnQgKHBvaW50KSkKKwkJCSAgIChuYW1lIChlcmxhbmctbmFtZS1vZi1mdW5jdGlvbikpCisJCQkgICAoYXJpdHkgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHkpKSkKKwkJICAgICAgIDs7IE5vdGU6ICJhcml0eSIgaXMgbmlsIGZvciBlLmcuICItaW1wb3J0IiwgaGVuY2UKKwkJICAgICAgIDs7IHR3byAiLWltcG9ydCIgY2xhdXNlcyBhcmUgbm90IGNvbnNpZGVyZWQgdG8KKwkJICAgICAgIDs7IGJlIHBhcnQgb2YgdGhlIHNhbWUgZnVuY3Rpb24uCisJCSAgICAgICAod2hpbGUgKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgMSkKKwkJCQkgICAoc3RyaW5nLWVxdWFsIG5hbWUKKwkJCQkJCSAoZXJsYW5nLW5hbWUtb2YtZnVuY3Rpb24pKQorCQkJCSAgIGFyaXR5CisJCQkJICAgKGVxdWFsIGFyaXR5CisJCQkJCSAgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHkpKSkKKwkJCSAoc2V0cSBzdGFydCAocG9pbnQpKSkKKwkJICAgICAgIChnb3RvLWNoYXIgc3RhcnQpCisJCSAgICAgICB0KSkpCisgICAgICAoc2V0cSBhcmcgKDEtIGFyZykpKSkKKyAgIDs7IFNlYXJjaCBmb3J3YXJkCisgICAoKDwgYXJnIDApCisgICAgKGVuZC1vZi1saW5lKQorICAgIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSAxKQorICAgIDs7IFN0ZXAgLWFyZyBmdW5jdGlvbnMgZm9yd2FyZC4KKyAgICAod2hpbGUgKGFuZCAoPCBhcmcgMCkKKwkJOzsgU3RlcCBvbmUgZnVuY3Rpb24gZm9yd2FyZCwgb3Igc3RvcCBpZiB0aGUgZW5kIG9mCisJCTs7IHRoZSBidWZmZXIgd2FzIHJlYWNoZWQuICBSZXR1cm4gdCBpZiB3ZSBmb3VuZCB0aGUKKwkJOzsgZnVuY3Rpb24uCisJCShsZXQgKChuYW1lIChlcmxhbmctbmFtZS1vZi1mdW5jdGlvbikpCisJCSAgICAgIChhcml0eSAoZXJsYW5nLWdldC1mdW5jdGlvbi1hcml0eSkpCisJCSAgICAgIChmb3VuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgLTEpKSkKKwkJICAod2hpbGUgKGFuZCBmb3VuZAorCQkJICAgICAgKHN0cmluZy1lcXVhbCBuYW1lIChlcmxhbmctbmFtZS1vZi1mdW5jdGlvbikpCisJCQkgICAgICBhcml0eQorCQkJICAgICAgKGVxdWFsIGFyaXR5CisJCQkJICAgICAoZXJsYW5nLWdldC1mdW5jdGlvbi1hcml0eSkpKQorCQkgICAgKHNldHEgZm91bmQgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIC0xKSkpCisJCSAgZm91bmQpKQorICAgICAgKHNldHEgYXJnICgxKyBhcmcpKSkpKQorICAoemVyb3AgYXJnKSkKKworCisoZGVmdW4gZXJsYW5nLWVuZC1vZi1mdW5jdGlvbiAoJm9wdGlvbmFsIGFyZykKKyAgIk1vdmUgZm9yd2FyZCB0byBuZXh0IGVuZCBvZiBmdW5jdGlvbi4KKworV2l0aCBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGltZXMuCitXaXRoIG5lZ2F0aXZlIGFyZ3VtZW50IGdvIHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlICJwIikKKyAgKG9yIGFyZyAoc2V0cSBhcmcgMSkpCisgIChsZXQgKChmaXJzdCB0KSkKKyAgICA7OyBGb3J3YXJkCisgICAgKHdoaWxlIChhbmQgKD4gYXJnIDApICg8IChwb2ludCkgKHBvaW50LW1heCkpKQorICAgICAgKGxldCAoKHBvcyAocG9pbnQpKSkKKwkod2hpbGUgKHByb2duCisJCSAoaWYgKGFuZCBmaXJzdAorCQkJICAocHJvZ24KKwkJCSAgICAoZm9yd2FyZC1jaGFyIDEpCisJCQkgICAgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIDEpKSkKKwkJICAgICBuaWwKKwkJICAgKG9yIChib2JwKSAoZm9yd2FyZC1jaGFyIC0xKSkKKwkJICAgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIC0xKSkKKwkJIChzZXRxIGZpcnN0IG5pbCkKKwkJIChlcmxhbmctcGFzcy1vdmVyLWZ1bmN0aW9uKQorCQkgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikKKwkJIChpZiAobG9va2luZy1hdCAiWyVcbl0iKQorCQkgICAgIChmb3J3YXJkLWxpbmUgMSkpCisJCSAoPD0gKHBvaW50KSBwb3MpKSkpCisgICAgICAoc2V0cSBhcmcgKDEtIGFyZykpKQorICAgIDs7IEJhY2t3YXJkCisgICAgKHdoaWxlICg8IGFyZyAwKQorICAgICAgKGxldCAoKHBvcyAocG9pbnQpKSkKKwkoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgMSkKKwkoZXJsYW5nLXBhc3Mtb3Zlci1mdW5jdGlvbikKKwkoZm9yd2FyZC1saW5lIDEpCisJKGlmICg+PSAocG9pbnQpIHBvcykKKwkgICAgKGlmIChlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uIDIpCisJCShwcm9nbgorCQkgIChlcmxhbmctcGFzcy1vdmVyLWZ1bmN0aW9uKQorCQkgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisJCSAgKGlmIChsb29raW5nLWF0ICJbJVxuXSIpCisJCSAgICAgIChmb3J3YXJkLWxpbmUgMSkpKQorCSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKSkpCisgICAgICAoc2V0cSBhcmcgKDErIGFyZykpKSkpCisKKyhkZWZ1biBlcmxhbmctbWFyay1mdW5jdGlvbiAoKQorICAiUHV0IG1hcmsgYXQgZW5kIG9mIGZ1bmN0aW9uLCBwb2ludCBhdCBiZWdpbm5pbmcuIgorICAoaW50ZXJhY3RpdmUpCisgIChwdXNoLW1hcmsgKHBvaW50KSkKKyAgKGVybGFuZy1lbmQtb2YtZnVuY3Rpb24gMSkKKyAgOzsgU2V0cyB0aGUgcmVnaW9uLiBJbiBFbWFjcyAxOSBhbmQgWEVtYWNzLCB3ZSB3YW50cyB0byBhY3RpdmF0ZQorICA7OyB0aGUgcmVnaW9uLgorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocHVzaC1tYXJrIChwb2ludCkgbmlsIHQpCisgICAgKGVycm9yIChwdXNoLW1hcmsgKHBvaW50KSkpKQorICAoZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbiAxKQorICA7OyBUaGUgYWJvdmUgZnVuY3Rpb24gZGVhY3RpdmF0ZXMgdGhlIG1hcmsuCisgIChpZiAoYm91bmRwICdkZWFjdGl2YXRlLW1hcmspCisgICAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpICdkZWFjdGl2YXRlLW1hcmsgbmlsKSkpCisKKyhkZWZ1biBlcmxhbmctcGFzcy1vdmVyLWZ1bmN0aW9uICgpCisgICh3aGlsZSAocHJvZ24KKwkgICAoZXJsYW5nLXNraXAtYmxhbmspCisJICAgKGFuZCAobm90IChsb29raW5nLWF0ICJcXC5cXChcXHMgXFx8XG5cXHxcXHM8XFwpIikpCisJCShub3QgKGVvYnApKSkpCisgICAgKGZvcndhcmQtc2V4cCAxKSkKKyAgKGlmIChub3QgKGVvYnApKQorICAgICAgKGZvcndhcmQtY2hhciAxKSkpCisKKyhkZWZ1biBlcmxhbmctbmFtZS1vZi1mdW5jdGlvbiAoKQorICAoc2F2ZS1leGN1cnNpb24KKyAgICA7OyBTa2lwIG92ZXIgYXR0cmlidXRlIGxlYWRlci4KKyAgICAoaWYgKGxvb2tpbmctYXQgIi1bIFx0XSoiKQorCShyZS1zZWFyY2gtZm9yd2FyZCAiLVsgXHRdKiIgbmlsICdtb3ZlKSkKKyAgICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCisgICAgICAoZm9yd2FyZC1zZXhwIDEpCisgICAgICAoYnVmZmVyLXN1YnN0cmluZyBzdGFydCAocG9pbnQpKSkpKQorCisMCis7OzsgTWlzY2VsbGFuZW91cworCisoZGVmdW4gZXJsYW5nLWZpbGwtcGFyYWdyYXBoICgmb3B0aW9uYWwganVzdGlmeSkKKyAgIkxpa2UgXFxbZmlsbC1wYXJhZ3JhcGhdLCBidXQgaGFuZGxlIEVybGFuZyBjb21tZW50cy4KK0lmIGFueSBvZiB0aGUgY3VycmVudCBsaW5lIGlzIGEgY29tbWVudCwgZmlsbCB0aGUgY29tbWVudCBvciB0aGUKK3BhcmFncmFwaCBvZiBpdCB0aGF0IHBvaW50IGlzIGluLCBwcmVzZXJ2aW5nIHRoZSBjb21tZW50J3MgaW5kZW50YXRpb24KK2FuZCBpbml0aWFsIGAlJzpzLiIKKyAgKGludGVyYWN0aXZlICJQIikKKyAgKGxldCAoKGhhcy1jb21tZW50IG5pbCkKKwk7OyBJZiBoYXMtY29tbWVudCwgdGhlIGFwcHJvcHJpYXRlIGZpbGwtcHJlZml4IGZvciB0aGUgY29tbWVudC4KKwljb21tZW50LWZpbGwtcHJlZml4KQorICAgIDs7IEZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGNvbW1lbnQgd2UgYXJlIGxvb2tpbmcgYXQuCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisgICAgICAoY29uZAorICAgICAgIDs7IEZpbmQgdGhlIGNvbW1hbmQgcHJlZml4LgorICAgICAgICgobG9va2luZy1hdCAoY29uY2F0ICJcXHMgKiIgY29tbWVudC1zdGFydC1za2lwKSkKKwkoc2V0cSBoYXMtY29tbWVudCB0KQorCShzZXRxIGNvbW1lbnQtZmlsbC1wcmVmaXggKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAwKQorCQkJCQkJICAgIChtYXRjaC1lbmQgMCkpKSkKKyAgICAgICA7OyBBIGxpbmUgd2l0aCBzb21lIGNvZGUsIGZvbGxvd2VkIGJ5IGEgY29tbWVudD8gIFJlbWVtYmVyIHRoYXQgdGhlCisgICAgICAgOzsgJSB3aGljaCBzdGFydHMgdGhlIGNvbW1lbnQgc2hvdWxkbid0IGJlIHBhcnQgb2YgYSBzdHJpbmcgb3IKKyAgICAgICA7OyBjaGFyYWN0ZXIuCisgICAgICAgKChwcm9nbgorCSAgKHdoaWxlIChub3QgKGxvb2tpbmctYXQgIiVcXHwkIikpCisJICAgIChza2lwLWNoYXJzLWZvcndhcmQgIl4lXG5cIlxcXFwiKQorCSAgICAoY29uZAorCSAgICAgKChlcSAoY2hhci1hZnRlciAocG9pbnQpKSA/XFwpIChmb3J3YXJkLWNoYXIgMikpCisJICAgICAoKGVxIChjaGFyLWFmdGVyIChwb2ludCkpID9cIikgKGZvcndhcmQtc2V4cCAxKSkpKQorCSAgKGxvb2tpbmctYXQgY29tbWVudC1zdGFydC1za2lwKSkKKwkoc2V0cSBoYXMtY29tbWVudCB0KQorCShzZXRxIGNvbW1lbnQtZmlsbC1wcmVmaXgKKwkgICAgICAoY29uY2F0IChtYWtlLXN0cmluZyAoY3VycmVudC1jb2x1bW4pID8gKQorCQkgICAgICAoYnVmZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpKSkpKSkKKyAgICAoaWYgKG5vdCBoYXMtY29tbWVudCkKKwkoZmlsbC1wYXJhZ3JhcGgganVzdGlmeSkKKyAgICAgIDs7IE5hcnJvdyB0byBpbmNsdWRlIG9ubHkgdGhlIGNvbW1lbnQsIGFuZCB0aGVuIGZpbGwgdGhlIHJlZ2lvbi4KKyAgICAgIChzYXZlLXJlc3RyaWN0aW9uCisJKG5hcnJvdy10by1yZWdpb24KKwkgOzsgRmluZCB0aGUgZmlyc3QgbGluZSB3ZSBzaG91bGQgaW5jbHVkZSBpbiB0aGUgcmVnaW9uIHRvIGZpbGwuCisJIChzYXZlLWV4Y3Vyc2lvbgorCSAgICh3aGlsZSAoYW5kICh6ZXJvcCAoZm9yd2FyZC1saW5lIC0xKSkKKwkJICAgICAgIChsb29raW5nLWF0ICJeXFxzIColIikpKQorCSAgIDs7IFdlIG1heSBoYXZlIGdvbmUgdG8gZmFyLiAgR28gZm9yd2FyZCBhZ2Fpbi4KKwkgICAob3IgKGxvb2tpbmctYXQgIl5cXHMgKiUiKQorCSAgICAgICAoZm9yd2FyZC1saW5lIDEpKQorCSAgIChwb2ludCkpCisJIDs7IEZpbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgbGluZSBwYXN0IHRoZSByZWdpb24gdG8gZmlsbC4KKwkgKHNhdmUtZXhjdXJzaW9uCisJICAgKHdoaWxlIChwcm9nbiAoZm9yd2FyZC1saW5lIDEpCisJCQkgKGxvb2tpbmctYXQgIl5cXHMgKiUiKSkpCisJICAgKHBvaW50KSkpCisJOzsgTGluZXMgd2l0aCBvbmx5ICUgb24gdGhlbSBjYW4gYmUgcGFyYWdyYXBoIGJvdW5kYXJpZXMuCisJKGxldCAoKHBhcmFncmFwaC1zdGFydCAoY29uY2F0IHBhcmFncmFwaC1zdGFydCAiXFx8XlsgXHQlXSokIikpCisJICAgICAgKHBhcmFncmFwaC1zZXBhcmF0ZSAoY29uY2F0IHBhcmFncmFwaC1zdGFydCAiXFx8XlsgXHQlXSokIikpCisJICAgICAgKGZpbGwtcHJlZml4IGNvbW1lbnQtZmlsbC1wcmVmaXgpKQorCSAgKGZpbGwtcGFyYWdyYXBoIGp1c3RpZnkpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLXVuY29tbWVudC1yZWdpb24gKGJlZyBlbmQpCisgICJVbmNvbW1lbnQgYWxsIGNvbW1lbnRlZCBsaW5lcyBpbiB0aGUgcmVnaW9uLiIKKyAgKGludGVyYWN0aXZlICJyIikKKyAgKGNvbW1lbnQtcmVnaW9uIGJlZyBlbmQgLTEpKQorCisKKyhkZWZ1biBlcmxhbmctZ2VuZXJhdGUtbmV3LWNsYXVzZSAoKQorICAiQ3JlYXRlIGFkZGl0aW9uYWwgRXJsYW5nIGNsYXVzZSBoZWFkZXIuCisKK1BhcnNlcyB0aGUgc291cmNlIGZpbGUgZm9yIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IEVybGFuZyBmdW5jdGlvbi4KK0NyZWF0ZSB0aGUgaGVhZGVyIGNvbnRhaW5pbmcgdGhlIG5hbWUsIEEgcGFpciBvZiBwYXJlbnRoZXNlcywKK2FuZCBhbiBhcnJvdy4gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZQorZmlyc3QgcGFyZW50aGVzaXMgaXMgcHJlc2VydmVkLiAgVGhlIHBvaW50IGlzIHBsYWNlZCBiZXR3ZWVuCit0aGUgcGFyZW50aGVzZXMuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChuYW1lIChzYXZlLWV4Y3Vyc2lvbgorCQkoYW5kIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKwkJICAgICAoZXJsYW5nLWdldC1mdW5jdGlvbi1uYW1lIHQpKSkpCisJKGFycm93IChzYXZlLWV4Y3Vyc2lvbgorCQkoYW5kIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKwkJICAgICAoZXJsYW5nLWdldC1mdW5jdGlvbi1hcnJvdykpKSkpCisgICAgKGlmIChvciAobnVsbCBhcnJvdykgKG51bGwgbmFtZSkpCisJKGVycm9yICJDYW4ndCBmaW5kIG5hbWUgb2YgY3VycmVudCBFcmxhbmcgZnVuY3Rpb24uIikpCisgICAgKGlmIChhbmQgKGJvbHApIChlb2xwKSkKKwluaWwKKyAgICAgIChlbmQtb2YtbGluZSkKKyAgICAgIChuZXdsaW5lKSkKKyAgICAoaW5zZXJ0IG5hbWUpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoaW5zZXJ0IChjb25jYXQgIikgIiBhcnJvdykpKQorICAgIChpZiBlcmxhbmctbmV3LWNsYXVzZS13aXRoLWFyZ3VtZW50cworCShlcmxhbmctY2xvbmUtYXJndW1lbnRzKSkpKQorCisKKyhkZWZ1biBlcmxhbmctY2xvbmUtYXJndW1lbnRzICgpCisgICJJbnNlcnQsIGF0IHRoZSBwb2ludCwgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIHByZXZpb3VzIGNsYXVzZS4KKworVGhlIG1hcmsgaXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluc2VydGVkIHRleHQsIHRoZSBwb2ludAorYXQgdGhlIGVuZC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGFyZ3MgKHNhdmUtZXhjdXJzaW9uCisJCShiZWdpbm5pbmctb2YtbGluZSkKKwkJKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisJCSAgICAgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJndW1lbnRzKSkpKQorCShwIChwb2ludCkpKQorICAgIChpZiAobnVsbCBhcmdzKQorCShlcnJvciAiQ2FuJ3QgY2xvbmUgYXJndW1lbnQgbGlzdC4iKSkKKyAgICAoaW5zZXJ0IGFyZ3MpCisgICAgKHNldC1tYXJrIHApKSkKKwwKKzs7OyBJbmZvcm1hdGlvbiByZXRyZWl2YWwgZnVuY3Rpb25zLgorCisoZGVmdW4gZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcgKGJlZyBlbmQpCisgICJMaWtlIGBidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMnLgorQWx0aG91Z2gsIHRoaXMgZnVuY3Rpb24gd29ya3Mgb24gYWxsIHZlcnNpb25zIG9mIEVtYWNzLiIKKyAgKGlmIChmYm91bmRwICdidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMpCisgICAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMpIGJlZyBlbmQpCisgICAgKGJ1ZmZlci1zdWJzdHJpbmcgYmVnIGVuZCkpKQorCisKKyhkZWZ1biBlcmxhbmctZ2V0LW1vZHVsZSAoKQorICAiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYXMgc3BlY2lmaWVkIGJ5IGAtbW9kdWxlJy4KKworUmV0dXJuIG5pbCBpZiBmaWxlIGNvbnRhaW5zIG5vIGAtbW9kdWxlJyBhdHRyaWJ1dGUuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoc2F2ZS1yZXN0cmljdGlvbgorICAgICAgKHdpZGVuKQorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgIChsZXQgKChtZCAobWF0Y2gtZGF0YSkpKQorCSh1bndpbmQtcHJvdGVjdAorCSAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkCisJCSAoY29uY2F0ICJeLW1vZHVsZVxccyAqKFxccyAqXFwoXFwoIgorCQkJIGVybGFuZy1hdG9tLXJlZ2V4cAorCQkJICJcXCk/XFwpXFxzICopXFxzICpcXC4iKQorCQkgKHBvaW50LW1heCkgdCkKKwkJKGVybGFuZy1yZW1vdmUtcXVvdGVzCisJCSAoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAxKQorCQkJCQkgIChtYXRjaC1lbmQgMSkpKQorCSAgICAgIG5pbCkKKwkgIChzdG9yZS1tYXRjaC1kYXRhIG1kKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lICgmb3B0aW9uYWwgZmlsZSkKKyAgIkV4dHJhY3QgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlIG5hbWUuCisKK0ZpcnN0LCB0aGUgZGlyZWN0b3J5IHBhcnQgaXMgcmVtb3ZlZC4gIFNlY29uZCwgdGhlIHBhcnQgb2YgdGhlIGZpbGUgbmFtZQorbWF0Y2hpbmcgYGVybGFuZy1maWxlLW5hbWUtZXh0ZW5zaW9uLXJlZ2V4cCcgaXMgcmVtb3ZlZC4KKworU2hvdWxkIHRoZSBtYXRjaCBmYWlsLCBuaWwgaXMgcmV0dXJuZWQuCisKK0J5IG1vZGlmeWluZyBgZXJsYW5nLWZpbGUtbmFtZS1leHRlbnNpb24tcmVnZXhwJyB0byBtYXRjaCBmaWxlcyBvdGhlcgordGhhbiBFcmxhbmcgc291cmNlIGZpbGVzLCBFcmxhbmcgc3BlY2lmaWMgZnVuY3Rpb25zIGNvdWxkIGJlIGFwcGxpZWQgb24KK25vbi1FcmxhbmcgZmlsZXMuICBNb3N0IG5vdGFibHk7IHRoZSBzdXBwb3J0IGZvciBFcmxhbmcgbW9kdWxlcyBpbiB0aGUKK3RhZ3Mgc3lzdGVtIGNvdWxkIGJlIHVzZWQgYnkgZmlsZXMgd3JpdHRlbiBpbiBvdGhlciBsYW5ndWFnZXMuIgorICAob3IgZmlsZSAoc2V0cSBmaWxlIGJ1ZmZlci1maWxlLW5hbWUpKQorICAoaWYgKG51bGwgZmlsZSkKKyAgICAgIG5pbAorICAgIChzZXRxIGZpbGUgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgZmlsZSkpCisgICAgKGlmIChzdHJpbmctbWF0Y2ggZXJsYW5nLWZpbGUtbmFtZS1leHRlbnNpb24tcmVnZXhwIGZpbGUpCisJKHN1YnN0cmluZyBmaWxlIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkKKyAgICAgIG5pbCkpKQorCisKKzs7IFVzZWQgYnkgYGVybGFuZy1nZXQtZXhwb3J0JyBhbmQgYGVybGFuZy1nZXQtaW1wb3J0Jy4KKworKGRlZnVuIGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHktbGlzdCAoKQorICAiUGFyc2VzIGxpc3Qgb2YgYGZ1bmN0aW9uL2FyaXR5JyBhcyB1c2VkIGJ5IGAtaW1wb3J0JyBhbmQgYC1leHBvcnQnLgorCitUaGUgcG9pbnQgbXVzdCBiZSBwbGFjZWQgYXQgYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNrZXQuICBXaGVuIHRoZQorZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9pbnQgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIGNsb3NpbmcgYnJhY2tldC4KKworVGhlIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhbiBlcnJvciBpZiB0aGUgbGlzdCBpcyBpbmNvcnJlY3RseQorZm9ybWF0dGVkLgorCitSZXR1cm4gbGlzdCBvZiAoZnVuY3Rpb24gLiBhcml0eSkuICBUaGUgb3JkZXIgb2YgdGhlIHJldHVybmVkIGxpc3QKK2NvcnJlc3BvbmRzIHRvIHRoZSBvcmRlciBvZiB0aGUgcGFyc2VkIEVybGFuZyBsaXN0LiIKKyAgKGxldCAoKHJlcyAnKCkpKQorICAgIChlcmxhbmctc2tpcC1ibGFuaykKKyAgICAoZm9yd2FyZC1jaGFyIDEpCisgICAgKGlmIChub3QgKGVxIChwcmVjZWRpbmctY2hhcikgP1xbKSkKKwknKCkJCQkJOyBOb3QgbG9va2luZyBhdCBhbiBFcmxhbmcgbGlzdC4KKyAgICAgICh3aGlsZQkJCQk7IE5vdGU6IGB3aGlsZScgaGFzIG5vIGJvZHkuCisJICAocHJvZ24KKwkgICAgKGVybGFuZy1za2lwLWJsYW5rKQorCSAgICAoYW5kIChsb29raW5nLWF0IChjb25jYXQgZXJsYW5nLWF0b20tcmVnZXhwCisJCQkJICAgICAiL1xcKFswLTldK1xcKVxcPiIpKQorCQkgKHByb2duCisJCSAgIChzZXRxIHJlcyAoY29ucworCQkJICAgICAgKGNvbnMKKwkJCSAgICAgICAoZXJsYW5nLXJlbW92ZS1xdW90ZXMKKwkJCQkoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcKKwkJCQkgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkKKwkJCSAgICAgICAoc3RyaW5nLXRvLWludAorCQkJCShlcmxhbmctYnVmZmVyLXN1YnN0cmluZworCQkJCSAobWF0Y2gtYmVnaW5uaW5nCisJCQkJICAoKyAxIGVybGFuZy1hdG9tLXJlZ2V4cC1tYXRjaGVzKSkKKwkJCQkgKG1hdGNoLWVuZAorCQkJCSAgKCsgMSBlcmxhbmctYXRvbS1yZWdleHAtbWF0Y2hlcykpKSkpCisJCQkgICAgICByZXMpKQorCQkgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpCisJCSAgIChlcmxhbmctc2tpcC1ibGFuaykKKwkJICAgKGZvcndhcmQtY2hhciAxKQorCQkgICA7OyBUZXN0IGlmIHRoZXJlIGFyZSBtb3JlIGV4cG9ydGVkIGZ1bmN0aW9ucy4KKwkJICAgKGVxIChwcmVjZWRpbmctY2hhcikgPywpKSkpKSkKKyAgICAobnJldmVyc2UgcmVzKSkpCisKKworOzs7ICBOb3RlIHRoYXQgYC1leHBvcnQnIGFuZCB0aGUgb3BlbiBwYXJlbnRoZXNpcyBtdXN0IGJlIHdyaXR0ZW4gb24KKzs7OyAgdGhlIHNhbWUgbGluZS4KKworKGRlZnVuIGVybGFuZy1nZXQtZXhwb3J0ICgpCisgICJSZXR1cm4gYSBsaXN0IG9mIGAoZnVuY3Rpb24gLiBhcml0eSknIGFzIHNwZWNpZmllZCBieSBgLWV4cG9ydCcuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgIChsZXQgKChtZCAobWF0Y2gtZGF0YSkpCisJICAocmVzICcoKSkpCisgICAgICAodW53aW5kLXByb3RlY3QKKwkgIChwcm9nbgorCSAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJeLWV4cG9ydFxccyAqKCIgKHBvaW50LW1heCkgdCkKKwkgICAgICAoZXJsYW5nLXNraXAtYmxhbmspCisJICAgICAgKHNldHEgcmVzIChuY29uYyByZXMgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHktbGlzdCkpKSkKKwkgICAgcmVzKQorCShzdG9yZS1tYXRjaC1kYXRhIG1kKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWdldC1pbXBvcnQgKCkKKyAgIlBhcnNlIGFuIEVybGFuZyBzb3VyY2UgZmlsZSBmb3IgaW1wb3J0ZWQgZnVuY3Rpb25zLgorCitSZXR1cm4gYW4gYWxpc3Qgd2l0aCBtb2R1bGUgbmFtZSBhcyBjYXIgcGFydCBhbmQgbGlzdCBvZiBjb25zZXMgY29udGFpbmluZworZnVuY3Rpb24gYW5kIGFyaXR5IGFzIGNkciBwYXJ0LiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAobGV0ICgobWQgKG1hdGNoLWRhdGEpKQorCSAgKHJlcyAnKCkpKQorICAgICAgKHVud2luZC1wcm90ZWN0CisJICAocHJvZ24KKwkgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXi1pbXBvcnRcXHMgKigiIChwb2ludC1tYXgpIHQpCisJICAgICAgKGVybGFuZy1za2lwLWJsYW5rKQorCSAgICAgIChpZiAobG9va2luZy1hdCBlcmxhbmctYXRvbS1yZWdleHApCisJCSAgKGxldCAoKG1vZHVsZSAoZXJsYW5nLXJlbW92ZS1xdW90ZXMKKwkJCQkgKGVybGFuZy1idWZmZXItc3Vic3RyaW5nCisJCQkJICAobWF0Y2gtYmVnaW5uaW5nIDApCisJCQkJICAobWF0Y2gtZW5kIDApKSkpKQorCQkgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKQorCQkgICAgKGVybGFuZy1za2lwLWJsYW5rKQorCQkgICAgKGlmIChlcSAoZm9sbG93aW5nLWNoYXIpID8sKQorCQkJKHByb2duCisJCQkgIChmb3J3YXJkLWNoYXIgMSkKKwkJCSAgKGVybGFuZy1za2lwLWJsYW5rKQorCQkJICAobGV0ICgoZnVuY3MgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHktbGlzdCkpCisJCQkJKHBhaXIgKGFzc29jIG1vZHVsZSByZXMpKSkKKwkJCSAgICAoaWYgcGFpcgorCQkJCShzZXRjZHIgcGFpciAobmNvbmMgKGNkciBwYWlyKSBmdW5jcykpCisJCQkgICAgICAoc2V0cSByZXMgKGNvbnMgKGNvbnMgbW9kdWxlIGZ1bmNzKQorCQkJCQkgICAgICByZXMpKSkpKSkpKSkKKwkgICAgKG5yZXZlcnNlIHJlcykpCisJKHN0b3JlLW1hdGNoLWRhdGEgbWQpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctZ2V0LWZ1bmN0aW9uLW5hbWUgKCZvcHRpb25hbCBhcmcpCisgICJSZXR1cm4gbmFtZSBvZiBjdXJyZW50IGZ1bmN0aW9uLCBvciBuaWwuCisKK0lmIG9wdGlvbmFsIGFyZ3VtZW50IGlzIG5vbi1uaWwsIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZwordGhlIGZpcnN0IGAoJyBpcyByZXR1cm5lZC4KKworTm9ybWFsbHkgdXNlZCBpbiBjb25qdWN0aW9uIHdpdGggYGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlJywgZS5nLjoKKyAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAgICAgICAgICAgKGlmIChub3QgKGVvYnApKSAoZm9yd2FyZC1jaGFyIDEpKQorCQkoYW5kIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKwkJICAgICAoZXJsYW5nLWdldC1mdW5jdGlvbi1uYW1lIHQpKSkiCisgIChsZXQgKChuIChpZiBhcmcgMCAxKSkpCisgICAgKGFuZCAobG9va2luZy1hdCAoY29uY2F0ICJeIiBlcmxhbmctYXRvbS1yZWdleHAgIlxccyAqKCIpKQorCSAoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyBuKSAobWF0Y2gtZW5kIG4pKSkpKQorCisKKyhkZWZ1biBlcmxhbmctZ2V0LWZ1bmN0aW9uLWFycm93ICgpCisgICJSZXR1cm4gYXJyb3cgb2YgY3VycmVudCBmdW5jdGlvbiwgY291bGQgYmUgXCItPlwiLCBcIjotXCIgb3IgbmlsLgorCitUaGUgXCI6LVwiIGFycm93IGlzIHVzZWQgYnkgbW5lc2lhIHF1ZXJpZXMuCisKK05vcm1hbGx5IHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIGBlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZScsIGUuZy46CisgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgIChpZiAobm90IChlb2JwKSkgKGZvcndhcmQtY2hhciAxKSkKKwkJKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisJCSAgICAgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJyb3cpKSkiCisgIChhbmQgKGxvb2tpbmctYXQgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKlxcKChcXCkiKSkKKyAgICAgICAoY29uZGl0aW9uLWNhc2UgKCkKKwkgICAoc2F2ZS1leGN1cnNpb24KKwkgICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAoKyAxIGVybGFuZy1hdG9tLXJlZ2V4cC1tYXRjaGVzKSkpCisJICAgICAoZm9yd2FyZC1zZXhwIDEpCisJICAgICAoZXJsYW5nLXNraXAtYmxhbmspCisJICAgICAoYW5kIChsb29raW5nLWF0ICItPlxcfDotIikKKwkJICAoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcKKwkJICAgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHkgKCkKKyAgIlJldHVybiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBvZiBmdW5jdGlvbiBhdCBwb2ludCwgb3IgbmlsLiIKKyAgKGFuZCAobG9va2luZy1hdCAoY29uY2F0ICJeIiBlcmxhbmctYXRvbS1yZWdleHAgIlxccyAqKCIpKQorICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorCSAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpCisJIChjb25kaXRpb24tY2FzZSBuaWwKKwkgICAgIChsZXQgKChyZXMgMCkKKwkJICAgKGNvbnQgdCkpCisJICAgICAgICh3aGlsZSBjb250CisJCSAoY29uZCAoKGVvYnApCisJCQkoc2V0cSByZXMgbmlsKQorCQkJKHNldHEgY29udCBuaWwpKQorCQkgICAgICAgKChsb29raW5nLWF0ICJcXHMgKikiKQorCQkJKHNldHEgY29udCBuaWwpKQorCQkgICAgICAgKChsb29raW5nLWF0ICJcXHMgKlxcKCRcXHwlXFwpIikKKwkJCShmb3J3YXJkLWxpbmUgMSkpCisJCSAgICAgICAoKGxvb2tpbmctYXQgIlxccyAqLCIpCisJCQkoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQorCQkgICAgICAgKHQKKwkJCShzZXRxIHJlcyAoKyAxIHJlcykpCisJCQkoZm9yd2FyZC1zZXhwIDEpKSkpCisJICAgICAgIHJlcykKKwkgICAoZXJyb3IgbmlsKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWdldC1mdW5jdGlvbi1hcmd1bWVudHMgKCkKKyAgIlJldHVybiBhcmd1bWVudHMgb2YgY3VycmVudCBmdW5jdGlvbiwgb3IgbmlsLiIKKyAgKGlmIChub3QgKGxvb2tpbmctYXQgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKigiKSkpCisgICAgICBuaWwKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkgIChsZXQgKChzdGFydCAobWF0Y2gtZW5kIDApKSkKKwkgICAgKGdvdG8tY2hhciAoLSBzdGFydCAxKSkKKwkgICAgKGZvcndhcmQtc2V4cCkKKwkgICAgKGVybGFuZy1idWZmZXItc3Vic3RyaW5nIHN0YXJ0ICgtIChwb2ludCkgMSkpKQorCShlcnJvciBuaWwpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctZ2V0LWZ1bmN0aW9uLXVuZGVyLXBvaW50ICgpCisgICJSZXR1cm4gdGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24gdW5kZXIgdGhlIHBvaW50LCBvciBuaWwuCisKK1Nob3VsZCBubyBleHBsaWNpdCBtb2R1bGUgbmFtZSBiZSBwcmVzZW50IGF0IHRoZSBwb2ludCwgdGhlCitsaXN0IG9mIGltcG9ydGVkIGZ1bmN0aW9ucyBpcyBzZWFyY2hlZC4KKworVGhlIGZvbGxvd2luZyBjb3VsZCBiZSByZXR1cmVkOgorICAgKFwibW9kdWxlXCIgIFwiZnVuY3Rpb25cIikgICAgLS0gQm90aCBtb2R1bGUgYW5kIGZ1bmN0aW9uIG5hbWUgZm91bmQuCisgICAobmlsICAgICAgIFwiZnVuY3Rpb25cIikgICAgLS0gTm8gbW9kdWxlIG5hbWUgd2FzIGZvdW5kLgorICAgbmlsICAgICAgICAgICAgICAgICAgICAgICAtLSBObyBmdW5jdGlvbiBuYW1lIGZvdW5kCisKK0luIHRoZSBmdXR1cmUgdGhlIGxpc3QgbWF5IGNvbnRhaW4gbW9yZSBlbGVtZW50cy4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQgKChtZCAobWF0Y2gtZGF0YSkpCisJICAocmVzIG5pbCkpCisgICAgICAoaWYgKGVxIChjaGFyLXN5bnRheCAoZm9sbG93aW5nLWNoYXIpKSA/ICkKKwkgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHQiKSkKKyAgICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJhLXpBLVowLTlfOiciKQorICAgICAgKGNvbmQgKChsb29raW5nLWF0IChjb25jYXQgZXJsYW5nLWF0b20tcmVnZXhwICI6IiBlcmxhbmctYXRvbS1yZWdleHApKQorCSAgICAgKHNldHEgcmVzIChsaXN0CisJCQkoZXJsYW5nLXJlbW92ZS1xdW90ZXMKKwkJCSAoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcKKwkJCSAgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkKKwkJCShlcmxhbmctcmVtb3ZlLXF1b3RlcworCQkJIChlcmxhbmctYnVmZmVyLXN1YnN0cmluZworCQkJICAobWF0Y2gtYmVnaW5uaW5nICgxKyBlcmxhbmctYXRvbS1yZWdleHAtbWF0Y2hlcykpCisJCQkgIChtYXRjaC1lbmQgKDErIGVybGFuZy1hdG9tLXJlZ2V4cC1tYXRjaGVzKSkpKSkpKQorCSAgICAoKGxvb2tpbmctYXQgZXJsYW5nLWF0b20tcmVnZXhwKQorCSAgICAgKGxldCAoKGZrIChlcmxhbmctcmVtb3ZlLXF1b3RlcworCQkJKGVybGFuZy1idWZmZXItc3Vic3RyaW5nCisJCQkgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkpCisJCSAgIChtb2QgbmlsKQorCQkgICAoaW1wb3J0cyAoZXJsYW5nLWdldC1pbXBvcnQpKSkKKwkgICAgICAgKHdoaWxlIChhbmQgaW1wb3J0cyAobnVsbCBtb2QpKQorCQkgKGlmIChhc3NvYyBmayAoY2RyIChjYXIgaW1wb3J0cykpKQorCQkgICAgIChzZXRxIG1vZCAoY2FyIChjYXIgaW1wb3J0cykpKQorCQkgICAoc2V0cSBpbXBvcnRzIChjZHIgaW1wb3J0cykpKSkKKwkgICAgICAgKHNldHEgcmVzIChsaXN0IG1vZCBmaykpKSkpCisgICAgICAoc3RvcmUtbWF0Y2gtZGF0YSBtZCkKKyAgICAgIHJlcykpKQorCisKKzs7IFRPRE86IEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluc2lkZSB0aGUgc3RyaW5nLgorKGRlZnVuIGVybGFuZy1hZGQtcXVvdGVzLWlmLW5lZWRlZCAoc3RyKQorICAiUmV0dXJuIFNUUiwgcG9zc2libHkgd2l0aCBxdW90ZXMuIgorICAoaWYgKGFuZCAoc3RyaW5ncCBzdHIpCisJICAgKG5vdCAoc3RyaW5nLW1hdGNoIChjb25jYXQgIlxcYCIgZXJsYW5nLWF0b20tcmVnZXhwICJcXCciKSBzdHIpKSkKKyAgICAgIChjb25jYXQgIiciIHN0ciAiJyIpCisgICAgc3RyKSkKKworCisoZGVmdW4gZXJsYW5nLXJlbW92ZS1xdW90ZXMgKHN0cikKKyAgIlJldHVybiBTVFIgd2l0aG91dCBxdW90ZXMsIGlmIHByZXNlbnQuIgorICAobGV0ICgobWQgKG1hdGNoLWRhdGEpKSkKKyAgICAocHJvZzEKKwkoaWYgKHN0cmluZy1tYXRjaCAiXFxgJ1xcKC4qXFwpJ1xcJyIgc3RyKQorCSAgICAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpCisJICBzdHIpCisgICAgICAoc3RvcmUtbWF0Y2gtZGF0YSBtZCkpKSkKKworDAorOzs7IENoZWNrIG1vZHVsZSBuYW1lCisKKzs7IEkgZG9uJ3Qgd2FudCB0byB1c2UgYGFkdmljZScgc2luY2UgaXQgaXMgbm90IHBhcnQgb2YgRW1hY3MgMTguCis7OworOzsgVGhlIGZ1bmN0aW9uIGB3cml0ZS1maWxlJywgYm91bmQgdG8gQy14IEMtdywgY2FsbHMKKzs7IGBzZXQtdmlzaXRlZC1maWxlLW5hbWUnIHdoaWNoIGNsZWFycyB0aGUgaG9vay4gIDotKAorOzsgVG8gbWFrZSBzdXJlIHRoYXQgdGhlIGhvb2sgYWx3YXlzIGlzIHByZXNlbnQsIHdlIGFkZCBhIHBpZWNlIG9mCis7OyBjb2RlIHRvIHRoZSBmdW5jdGlvbiBgc2V0LXZpc2l0ZWQtZmlsZS1uYW1lJy4KKyhkZWZ1biBlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUtaW5pdCAoKQorICAiSW5pdGlhbGl6ZSB0aGUgZnVuY3Rpb25hbGl0eSB0byBjb21wYXJlIGZpbGUgYW5kIG1vZHVsZSBuYW1lcy4KKworV2UgcmVkZWZpbmVzIHRoZSBmdW5jdGlvbiBgc2V0LXZpc2l0ZWQtZmlsZS1uYW1lJyBzaW5jZSBpdCBjbGVhcnMKK3RoZSB2YXJpYWJsZSBgbG9jYWwtd3JpdGUtZmlsZS1ob29rcycuICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVmaW5pdGlvbgoraXMgc3RvcmVkIGluIGBlcmxhbmctb3JpZy1zZXQtdmlzaXRlZC1maWxlLW5hbWUnLiIKKyAgKGlmIChmYm91bmRwICdlcmxhbmctb3JpZy1zZXQtdmlzaXRlZC1maWxlLW5hbWUpCisgICAgICAoKQorICAgIChmc2V0ICdlcmxhbmctb3JpZy1zZXQtdmlzaXRlZC1maWxlLW5hbWUKKwkgIChzeW1ib2wtZnVuY3Rpb24gJ3NldC12aXNpdGVkLWZpbGUtbmFtZSkpCisgICAgKGRlZnVuIHNldC12aXNpdGVkLWZpbGUtbmFtZSAoJnJlc3QgYXJncykKKyAgICAgICJQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgZXJsYW5nLW9yaWctc2V0LXZpc2l0ZWQtZmlsZS1uYW1lJy4iCisgICAgICAoaW50ZXJhY3RpdmUgIkZTZXQgdmlzaXRlZCBmaWxlIG5hbWU6ICIpCisgICAgICAoYXBwbHkgKHN5bWJvbC1mdW5jdGlvbiAnZXJsYW5nLW9yaWctc2V0LXZpc2l0ZWQtZmlsZS1uYW1lKSBhcmdzKQorICAgICAgKGlmIChlcSBtYWpvci1tb2RlICdlcmxhbmctbW9kZSkKKwkgIChhZGQtaG9vayAnbG9jYWwtd3JpdGUtZmlsZS1ob29rcyAnZXJsYW5nLWNoZWNrLW1vZHVsZS1uYW1lKSkpKQorICAoYWRkLWhvb2sgJ2xvY2FsLXdyaXRlLWZpbGUtaG9va3MgJ2VybGFuZy1jaGVjay1tb2R1bGUtbmFtZSkpCisKKworKGRlZnVuIGVybGFuZy1jaGVjay1tb2R1bGUtbmFtZSAoKQorICAiSWYgdGhlIG1vZHVsZSBuYW1lIGRvZXNuJ3QgbWF0Y2ggZmlsZSBuYW1lLCBhc2sgZm9yIHBlcm1pc3Npb24gdG8gY2hhbmdlLgorCitUaGUgdmFyaWFibGUgYGVybGFuZy1jaGVjay1tb2R1bGUtbmFtZScgY29udHJvbHMgdGhlIGJlaGF2aW91ciBvZiB0aGlzCitmdW5jdGlvbi4gIEl0IGl0IGlzIG5pbCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuICBJZiBpdCBpcyB0LCB0aGUKK3NvdXJjZSBpcyBzaWxlbnRseSBjaGFuZ2VkLiAgSWYgaXQgaXMgc2V0IHRvIHRoZSBhdG9tIGBhc2snLCB0aGUgdXNlcgoraXMgcHJvbXB0ZWQuCisKK1RoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgcGxhY2VkIGluIHRoZSBob29rIGBsb2NhbC13cml0ZS1maWxlLWhvb2snLiIKKyAgKGlmIGVybGFuZy1jaGVjay1tb2R1bGUtbmFtZQorICAgICAgKGxldCAoKG1uIChlcmxhbmctZ2V0LW1vZHVsZSkpCisJICAgIChmbiAoZXJsYW5nLWdldC1tb2R1bGUtZnJvbS1maWxlLW5hbWUgKGJ1ZmZlci1maWxlLW5hbWUpKSkpCisJKGlmIChhbmQgKHN0cmluZ3AgbW4pIChzdHJpbmdwIGZuKSkKKwkgICAgKG9yIChzdHJpbmctZXF1YWwgbW4gZm4pCisJCShpZiAob3IgKGVxIGVybGFuZy1jaGVjay1tb2R1bGUtbmFtZSB0KQorCQkJKHktb3Itbi1wCisJCQkgIk1vZHVsZSBkb2VzIG5vdCBtYXRjaCBmaWxlIG5hbWUuIE1vZGlmeSBzb3VyY2U/ICIpKQorCQkgICAgKHNhdmUtZXhjdXJzaW9uCisJCSAgICAgIChzYXZlLXJlc3RyaWN0aW9uCisJCQkod2lkZW4pCisJCQkoZ290by1jaGFyIChwb2ludC1taW4pKQorCQkJKGlmIChyZS1zZWFyY2gtZm9yd2FyZAorCQkJICAgICAoY29uY2F0ICJeLW1vZHVsZVxccyAqKFxccyAqXFwoXFwoIgorCQkJCSAgICAgZXJsYW5nLWF0b20tcmVnZXhwCisJCQkJICAgICAiXFwpP1xcKVxccyAqKVxccyAqXFwuIikKKwkJCSAgICAgKHBvaW50LW1heCkgdCkKKwkJCSAgICAocHJvZ24KKwkJCSAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAxKSkKKwkJCSAgICAgIChkZWxldGUtcmVnaW9uIChtYXRjaC1iZWdpbm5pbmcgMSkKKwkJCQkJICAgICAobWF0Y2gtZW5kIDEpKQorCQkJICAgICAgKGluc2VydCBmbikpKSkpKSkpKSkKKyAgOzsgTXVzdCByZXR1cm4gbmlsIHNpbmNlIGl0IGlzIGFkZGVkIHRvIGBsb2NhbC13cml0ZS1maWxlLWhvb2snLgorICBuaWwpCisKKwwKKzs7OyBFbGVjdHJpYyBmdW5jdGlvbnMuCisKKyhkZWZ1biBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uICgmb3B0aW9uYWwgYXJnKQorICAiSW5zZXJ0IGEgc2VtaWNvbG9uIGNoYXJhY3RlciBhbmQgcG9zc2libHkgYSBwcm90b3R5cGUgZm9yIHRoZSBuZXh0IGxpbmUuCisKK1RoZSB2YXJpYWJsZSBgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbi1jcml0ZXJpYScgc3RhdGVzIGEgY3JpdGVyYSwKK3doZW4gZnVsZmlsbGVkIGEgbmV3bGluZSBpcyBpbnNlcnRlZCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBhbmQgYQorcHJvdG90eXBlIGZvciB0aGUgbmV4dCBsaW5lIGlzIGluc2VydGVkLiAgTm9ybWFsbHkgdGhlIHByb3RvdHlwZQorY29uc2lzdHMgb2YgXCIgLT5cIi4gIFNob3VsZCB0aGUgc2VtaWNvbG9uIGVuZCB0aGUgY2xhdXNlIGEgbmV3IGNsYXVzZQoraGVhZGVyIGlzIGdlbmVyYXRlZC4KKworVGhlIHZhcmlhYmxlIGBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uLWluc2VydC1ibGFuay1saW5lcycgY29udHJvbHMKK3RoZSBudW1iZXIgb2YgYmxhbmsgbGluZXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgY3VycmVudCBsaW5lIGFuZCBuZXcKK2Z1bmN0aW9uIGhlYWRlci4KKworQmVoYXZlcyBqdXN0IGxpa2UgdGhlIG5vcm1hbCBzZW1pY29sb24gd2hlbiBzdXBwbGllZCB3aXRoIGEKK251bWVyaWNhbCBhcmcsIHBvaW50IGlzIGluc2lkZSBzdHJpbmcgb3IgY29tbWVudCwgb3Igd2hlbiB0aGVyZSBhcmUKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm9sbG93aW5nIHRoZSBwb2ludCBvbiB0aGUgY3VycmVudCBsaW5lLiIKKyAgKGludGVyYWN0aXZlICJQIikKKyAgKHNlbGYtaW5zZXJ0LWNvbW1hbmQgKHByZWZpeC1udW1lcmljLXZhbHVlIGFyZykpCisgIChpZiAob3IgYXJnCisJICAoYW5kIChsaXN0cCBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMpCisJICAgICAgIChub3QgKG1lbXEgJ2VybGFuZy1lbGVjdHJpYy1zZW1pY29sb24KKwkJCSAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKSkpCisJICAoZXJsYW5nLWluLWxpdGVyYWwpCisJICAobm90IChsb29raW5nLWF0ICJcXHMgKlxcKCUuKlxcKT8kIikpCisJICAobnVsbCAoZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdAorCQkgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbi1jcml0ZXJpYSkpKQorICAgICAgKHNldHEgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdCBuaWwpCisgICAgKHNldHEgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdCB0KQorICAgICh1bmRvLWJvdW5kYXJ5KQorICAgIChlbmQtb2YtbGluZSkKKyAgICAobmV3bGluZSkKKyAgICAoaWYgKGNvbmRpdGlvbi1jYXNlIG5pbAorCSAgICAocHJvZ24gKGVybGFuZy1pbmRlbnQtbGluZSkgdCkKKwkgIChlcnJvciAoaWYgKGJvbHApIChkZWxldGUtYmFja3dhcmQtY2hhciAxKSkpKQorCShpZiAobm90IChib2xwKSkKKwkgICAgKHNhdmUtZXhjdXJzaW9uCisJICAgICAgKGluc2VydCAiIC0+IikpCisJICAoY29uZGl0aW9uLWNhc2UgbmlsCisJICAgICAgKHByb2duCisJCShlcmxhbmctZ2VuZXJhdGUtbmV3LWNsYXVzZSkKKwkJKGlmIGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24taW5zZXJ0LWJsYW5rLWxpbmVzCisJCSAgICAoc2F2ZS1leGN1cnNpb24KKwkJICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQorCQkgICAgICAobmV3bGluZQorCQkgICAgICAgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbi1pbnNlcnQtYmxhbmstbGluZXMpKSkpCisJICAgIChlcnJvciAoaWYgKGJvbHApIChkZWxldGUtYmFja3dhcmQtY2hhciAxKSkpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWVsZWN0cmljLWNvbW1hICgmb3B0aW9uYWwgYXJnKQorICAiSW5zZXJ0IGEgY29tbWEgY2hhcmFjdGVyIGFuZCBwb3NzaWJseSBhIG5ldyBpbmRlbnRlZCBsaW5lLgorVGhlIHZhcmlhYmxlIGBlcmxhbmctZWxlY3RyaWMtY29tbWEtY3JpdGVyaWEnIHN0YXRlcyBhIGNyaXRlcmEsCit3aGVuIGZ1bGZpbGxlZCBhIG5ld2xpbmUgaXMgaW5zZXJ0ZWQgYW5kIHRoZSBuZXh0IGxpbmUgaXMgaW5kZXRlZC4KKworQmVoYXZlcyBqdXN0IGxpa2UgdGhlIG5vcm1hbCBjb21tYSB3aGVuIHN1cHBsaWVkIHdpdGggYQorbnVtZXJpY2FsIGFyZywgcG9pbnQgaXMgaW5zaWRlIHN0cmluZyBvciBjb21tZW50LCBvciB3aGVuIHRoZXJlIGFyZQorbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBmb2xsb3dpbmcgdGhlIHBvaW50IG9uIHRoZSBjdXJyZW50IGxpbmUuIgorICAoaW50ZXJhY3RpdmUgIlAiKQorCisgIChzZWxmLWluc2VydC1jb21tYW5kIChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpKQorCisgIChpZiAob3IgYXJnCisJICAoYW5kIChsaXN0cCBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMpCisJICAgICAgIChub3QgKG1lbXEgJ2VybGFuZy1lbGVjdHJpYy1jb21tYSBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMpKSkKKwkgIChlcmxhbmctaW4tbGl0ZXJhbCkKKwkgIChub3QgKGxvb2tpbmctYXQgIlxccyAqXFwoJS4qXFwpPyQiKSkKKwkgIChudWxsIChlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0CisJCSBlcmxhbmctZWxlY3RyaWMtY29tbWEtY3JpdGVyaWEpKSkKKyAgICAgIChzZXRxIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQgbmlsKQorICAgIChzZXRxIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQgdCkKKyAgICAodW5kby1ib3VuZGFyeSkKKyAgICAoZW5kLW9mLWxpbmUpCisgICAgKG5ld2xpbmUpCisgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCShlcmxhbmctaW5kZW50LWxpbmUpCisgICAgICAoZXJyb3IgKGlmIChib2xwKSAoZGVsZXRlLWJhY2t3YXJkLWNoYXIgMSkpKSkpKQorCisoZGVmdW4gZXJsYW5nLWVsZWN0cmljLWx0ICgmb3B0aW9uYWwgYXJnKQorICAiSW5zZXJ0IGEgbGVzcy10aGFuIHNpZ24sIGFuZCBvcHRpb25hbGx5IG1hcmsgaXQgYXMgYW4gb3BlbiBwYXJlbi4iCisgIAorICAoaW50ZXJhY3RpdmUgInAiKQorCisgIChzZWxmLWluc2VydC1jb21tYW5kIGFyZykKKworICA7OyBXYXMgdGhpcyB0aGUgc2Vjb25kIGNoYXIgaW4gYml0LXN5bnRheCBvcGVuIChgPDwnKT8KKyAgKHVubGVzcyAoPCAocG9pbnQpIDIpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoYmFja3dhcmQtY2hhciAyKQorICAgICAgKHdoZW4gKGFuZCAoZXEgKGNoYXItYWZ0ZXIgKHBvaW50KSkgPzwpCisJCSAobm90IChlcSAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnY2F0ZWdvcnkpCisJCQkgICdiaXRzeW50YXgtb3Blbi1pbm5lcikpKQorCTs7IFRoZW4gbWFyayB0aGUgdHdvIGNoYXJzLi4uCisJKHB1dC10ZXh0LXByb3BlcnR5IChwb2ludCkgKDErIChwb2ludCkpIAorCQkJICAgJ2NhdGVnb3J5ICdiaXRzeW50YXgtb3Blbi1vdXRlcikKKwkoZm9yd2FyZC1jaGFyIDEpCisJKHB1dC10ZXh0LXByb3BlcnR5IChwb2ludCkgKDErIChwb2ludCkpCisJCQkgICAnY2F0ZWdvcnkgJ2JpdHN5bnRheC1vcGVuLWlubmVyKQorCTs7Li4uYW5kIHVubWFyayBhbnkgc3Vic2VxdWVudCBsZXNzLXRoYW4gY2hhcnMuCisJKGZvcndhcmQtY2hhciAxKQorCSh3aGlsZSAoZXEgKGNoYXItYWZ0ZXIgKHBvaW50KSkgPzwpCisJICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAocG9pbnQpICgxKyAocG9pbnQpKQorCQkJCSAgJyhjYXRlZ29yeSBuaWwpKQorCSAgKGZvcndhcmQtY2hhciAxKSkpKSkpCisKKyhkZWZ1biBlcmxhbmctYWZ0ZXItYml0c3ludGF4LWNsb3NlICgpCisgICJSZXR1cm5zIHRydWUgaWYgcG9pbnQgaXMgcGxhY2VkIGltbWVkaWF0ZWx5IGFmdGVyIGEgYml0LXN5bnRheCBjbG9zZSBwYXJlbnRoZXNpcyAoYD4+JykuIgorICAoYW5kICg+PSAocG9pbnQpIDIpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoYmFja3dhcmQtY2hhciAyKQorICAgICAgKGFuZCAoZXEgKGNoYXItYWZ0ZXIgKHBvaW50KSkgPz4pCisJICAgKG5vdCAoZXEgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2NhdGVnb3J5KQorCQkgICAgJ2JpdHN5bnRheC1jbG9zZS1vdXRlcikpKSkpKQorCSAKKyhkZWZ1biBlcmxhbmctYWZ0ZXItYXJyb3cgKCkKKyAgIlJldHVybnMgdHJ1ZSBpZiBwb2ludCBpcyBwbGFjZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBmdW5jdGlvbiBhcnJvdyAoYC0+JykuIgorICAoYW5kICg+PSAocG9pbnQpIDIpCisJIChhbmQgCisJICAoc2F2ZS1leGN1cnNpb24KKwkgICAgKGJhY2t3YXJkLWNoYXIpCisJICAgIChlcSAoY2hhci1iZWZvcmUgKHBvaW50KSkgPy0pKQorCSAgKG9yIChub3QgKGxpc3RwIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykpCisJICAgICAgKG1lbXEgJ2VybGFuZy1lbGVjdHJpYy1ndAorCQkgICAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKSkKKwkgIChub3QgKGVybGFuZy1pbi1saXRlcmFsKSkKKwkgIChsb29raW5nLWF0ICJcXHMgKlxcKCUuKlxcKT8kIikKKwkgIChlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0IGVybGFuZy1lbGVjdHJpYy1hcnJvdy1jcml0ZXJpYSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWVsZWN0cmljLWd0ICgmb3B0aW9uYWwgYXJnKQorICAiSW5zZXJ0IGEgZ3JlYXRlci10aGFuIHNpZ24sIGFuZCBvcHRpb25hbGx5IG1hcmsgaXQgYXMgYSBjbG9zZSBwYXJlbi4iCisgIAorICAoaW50ZXJhY3RpdmUgInAiKQorCisgIChzZWxmLWluc2VydC1jb21tYW5kIGFyZykKKworICAoY29uZAorICAgOzsgRGlkIHdlIGp1c3Qgd3JpdGUgYSBiaXQtc3ludGF4IGNsb3NlIChgPj4nKT8KKyAgICgoZXJsYW5nLWFmdGVyLWJpdHN5bnRheC1jbG9zZSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIDs7IFRoZW4gbWFyayB0aGUgdHdvIGNoYXJzLi4uCisgICAgICAoYmFja3dhcmQtY2hhciAyKQorICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IChwb2ludCkgKDErIChwb2ludCkpIAorCQkJICdjYXRlZ29yeSAnYml0c3ludGF4LWNsb3NlLWlubmVyKQorICAgICAgKGZvcndhcmQtY2hhcikKKyAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICgxKyAocG9pbnQpKQorCQkJICdjYXRlZ29yeSAnYml0c3ludGF4LWNsb3NlLW91dGVyKQorICAgICAgOzsuLi5hbmQgdW5tYXJrIGFueSBzdWJzZXF1ZW50IGdyZWF0ZXItdGhhbiBjaGFycy4KKyAgICAgIChmb3J3YXJkLWNoYXIpCisgICAgICAod2hpbGUgKGVxIChjaGFyLWFmdGVyIChwb2ludCkpID8+KQorCShyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIChwb2ludCkgKDErIChwb2ludCkpCisJCQkJJyhjYXRlZ29yeSBuaWwpKQorCShmb3J3YXJkLWNoYXIpKSkpCisKKyAgIDs7IERpZCB3ZSBqdXN0IHdyaXRlIGEgZnVuY3Rpb24gYXJyb3cgKGAtPicpPworICAgKChlcmxhbmctYWZ0ZXItYXJyb3cpCisgICAgKGxldCAoKGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQgdCkpCisgICAgICAodW5kby1ib3VuZGFyeSkKKyAgICAgIChlbmQtb2YtbGluZSkKKyAgICAgIChuZXdsaW5lKQorICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCSAgKGVybGFuZy1pbmRlbnQtbGluZSkKKwkoZXJyb3IgKGlmIChib2xwKSAoZGVsZXRlLWJhY2t3YXJkLWNoYXIgMSkpKSkpKQorCisgICA7OyBUaGVuIGl0J3MganVzdCBhIHBsYWluIGdyZWF0ZXItdGhhbi4KKyAgICh0CisgICAgbmlsKSkpCisgICAgCisKKyhkZWZ1biBlcmxhbmctZWxlY3RyaWMtYXJyb3dcIG9mZiAoJm9wdGlvbmFsIGFyZykKKyAgIkluc2VydCBhICc+Jy1zaWduIGFuZCBwb3NzaWJsZSBhIG5ldyBpbmRlbnRlZCBsaW5lLgorCitUaGlzIGNvbW1hbmQgaXMgb25seSBgZWxlY3RyaWMnIHdoZW4gdGhlIGA+JyBpcyBwYXJ0IG9mIGFuIGAtPicgYXJyb3cuCitUaGUgdmFyaWFibGUgYGVybGFuZy1lbGVjdHJpYy1hcnJvdy1jcml0ZXJpYScgc3RhdGVzIGEgc2VxdWVuY2Ugb2YKK2NyaXRlcmlhLCB3aGljaCBkZWNpZGVzIHdoZW4gYSBuZXdsaW5lIHNob3VsZCBiZSBpbnNlcnRlZCBhbmQgdGhlIG5leHQKK2xpbmUgaW5kZW50ZWQuCisKK0l0IGJlaGF2ZXMganVzdCBsaWtlIHRoZSBub3JtYWwgZ3JlYXRlciB0aGFuIHNpZ24gd2hlbiBzdXBwbGllZCB3aXRoIGEKK251bWVyaWNhbCBhcmcsIHBvaW50IGlzIGluc2lkZSBzdHJpbmcgb3IgY29tbWVudCwgb3Igd2hlbiB0aGVyZSBhcmUKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm9sbG93aW5nIHRoZSBwb2ludCBvbiB0aGUgY3VycmVudCBsaW5lLgorCitBZnRlciBiZWluZyBzcGxpdC9tZXJnZWQgaW50byBlcmxhbmctYWZ0ZXItYXJyb3cgYW5kCitlcmxhbmctZWxlY3RyaWMtZ3QsIGl0IGlzIG5vdyB1bnVzZWQgYW5kIGRpc2FibGVkLiIKKyAgKGludGVyYWN0aXZlICJQIikKKyAgKGxldCAoKHByZWMgKHByZWNlZGluZy1jaGFyKSkpCisgICAgKHNlbGYtaW5zZXJ0LWNvbW1hbmQgKHByZWZpeC1udW1lcmljLXZhbHVlIGFyZykpCisgICAgKGlmIChvciBhcmcKKwkgICAgKGFuZCAobGlzdHAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKQorCQkgKG5vdCAobWVtcSAnZXJsYW5nLWVsZWN0cmljLWFycm93CisJCQkgICAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKSkpCisJICAgIChub3QgKGVxIHByZWMgPy0pKQorCSAgICAoZXJsYW5nLWluLWxpdGVyYWwpCisJICAgIChub3QgKGxvb2tpbmctYXQgIlxccyAqXFwoJS4qXFwpPyQiKSkKKwkgICAgKG51bGwgKGVybGFuZy10ZXN0LWNyaXRlcmlhLWxpc3QKKwkJICAgZXJsYW5nLWVsZWN0cmljLWFycm93LWNyaXRlcmlhKSkpCisJKHNldHEgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdCBuaWwpCisgICAgICAoc2V0cSBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0IHQpCisgICAgICAodW5kby1ib3VuZGFyeSkKKyAgICAgIChlbmQtb2YtbGluZSkKKyAgICAgIChuZXdsaW5lKQorICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCSAgKGVybGFuZy1pbmRlbnQtbGluZSkKKwkoZXJyb3IgKGlmIChib2xwKSAoZGVsZXRlLWJhY2t3YXJkLWNoYXIgMSkpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUgKCZvcHRpb25hbCBhcmcpCisgICJCcmVhayBsaW5lIGF0IHBvaW50IGFuZCBpbmRlbnQsIGNvbnRpbnVpbmcgY29tbWVudCBpZiB3aXRoaW4gb25lLgorVGhlIHZhcmlhYmxlIGBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1jcml0ZXJpYScgc3RhdGVzIGEgY3JpdGVyYSwKK3doZW4gZnVsZmlsbGVkIGEgbmV3bGluZSBpcyBpbnNlcnRlZCBhbmQgdGhlIG5leHQgbGluZSBpcyBpbmRldGVkLgorCitTaG91bGQgdGhlIGN1cnJlbnQgbGluZSBiZWdpbiB3aXRoIGEgY29tbWVudCwgYW5kIHRoZSB2YXJpYWJsZQorYGNvbW1lbnQtbXVsdGktbGluZScgYmUgbm9uLW5pbCwgYSBuZXcgY29tbWVudCBzdGFydCBpcyBpbnNlcnRlZC4KKworU2hvdWxkIHRoZSBwcmV2aW91cyBjb21tYW5kIGJlIGFub3RoZXIgZWxlY3RyaWMgY29tbWFuZCB3ZSBhc3N1bWUgdGhhdAordGhlIHVzZXIgcHJlc3NlZCBuZXdsaW5lIG91dCBvZiBvbGQgaGFiaXQsIGhlbmNlIHdlIHdpbGwgZG8gbm90aGluZy4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChjb25kICgoYW5kIChub3QgYXJnKQorCSAgICAgIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQKKwkgICAgICAobWVtcSBsYXN0LWNvbW1hbmQgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdC1saXN0KSkKKwkgKCkpCQkJCTsgRG8gbm90aGluZyEKKwkoKG9yIGFyZworCSAgICAgKGFuZCAobGlzdHAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKQorCQkgIChub3QgKG1lbXEgJ2VybGFuZy1lbGVjdHJpYy1uZXdsaW5lCisJCQkgICAgIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykpKQorCSAgICAgKG51bGwgKGVybGFuZy10ZXN0LWNyaXRlcmlhLWxpc3QKKwkJICAgIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWNyaXRlcmlhKSkpCisJIChuZXdsaW5lIChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpKSkKKwkodAorCSAoaWYgKGFuZCBjb21tZW50LW11bHRpLWxpbmUKKwkJICAoc2F2ZS1leGN1cnNpb24KKwkJICAgIChiZWdpbm5pbmctb2YtbGluZSkKKwkJICAgIChsb29raW5nLWF0IChjb25jYXQgIlxccyAqIiBjb21tZW50LXN0YXJ0LXNraXApKSkpCisJICAgICAobGV0ICgoc3RyIChidWZmZXItc3Vic3RyaW5nCisJCQkgKG9yIChtYXRjaC1lbmQgMSkgKG1hdGNoLWJlZ2lubmluZyAwKSkKKwkJCSAobWluIChtYXRjaC1lbmQgMCkgKHBvaW50KSkpKSkKKwkgICAgICAgKG5ld2xpbmUpCisJICAgICAgICh1bmRvLWJvdW5kYXJ5KQorCSAgICAgICAoaW5zZXJ0IHN0cikpCisJICAgKG5ld2xpbmUpCisJICAgKHVuZG8tYm91bmRhcnkpCisJICAgKGluZGVudC1hY2NvcmRpbmctdG8tbW9kZSkpKSkpCisKKworKGRlZnVuIGVybGFuZy10ZXN0LWNyaXRlcmlhLWxpc3QgKGNyaXRlcmlhKQorICAiR2l2ZW4gYSBsaXN0IG9mIGNyaXRlcmlhIGZ1bmN0aW9ucywgdGVzdCBpZiBjcml0ZXJpYSBpcyBmdWxmaWxsZWQuCisKK0VhY2ggZWxlbWVudCBpbiB0aGUgY3JpdGVyaWEgbGlzdCBjYW4gYSBmdW5jdGlvbiByZXR1cm5pbmcgbmlsLCB0IG9yCit0aGUgYXRvbSBgc3RvcCcuICB0IG1lYW5zIHRoYXQgdGhlIGNyaXRlcmlhIGlzIGZ1bGZpbGxlZCwgYHN0b3AnIG1lYW5zCit0aGF0IGl0IHRoZSBjcml0ZXJpYSBpc24ndCBmdWxmaWxsZWQgYW5kIHRoYXQgdGhlIHNlYXJjaCBzaG91bGQgc3RvcCwKK2FuZCBuaWwgbWVhbnMgY29udGludWUgc2VhcmNoaW5nLgorCitTaG91bGQgdGhlIGxpc3QgY29udGFpbiB0aGUgYXRvbSB0IHRoZSBjcml0ZXJpYSBpcyBhc3N1bWVkIHRvIGJlCitmdWxmaWxsZWQsIHVubGVzcyBwcmVjZWRlZCBieSBhIGZ1bmN0aW9uIHJldHVybmluZyBgc3RvcCcsIG9mIGNvdXJzZS4KKworU2hvdWxkIHRoZSBhcmd1bWVudCBiZSB0aGUgYXRvbSB0IGluc3RlYWQgb2YgYSBsaXN0LCB0aGUgY3JpdGVyaWEgaXMKK2Fzc3VtZWQgdG8gYmUgdHJpdmlhbGx5IHRydWUuCisKK1Nob3VsZCBhbGwgZnVuY3Rpb24gcmV0dXJuIG5pbCwgdGhlIGNyaXRlcmlhIGlzIGFzc3VtZWQgbm90IHRvIGJlCitmdWxmaWxsZWQuCisKK1JldHVybiB0IGlmIGNyaXRlcmlhIGZ1bGZpbGxlZCwgbmlsIG90aGVyd2lzZS4iCisgIChpZiAoZXEgY3JpdGVyaWEgdCkKKyAgICAgIHQKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChsZXQgKChhbnN3ZXIgbmlsKSkKKwkod2hpbGUgKGFuZCBjcml0ZXJpYSAobnVsbCBhbnN3ZXIpKQorCSAgKGlmIChlcSAoY2FyIGNyaXRlcmlhKSB0KQorCSAgICAgIChzZXRxIGFuc3dlciB0KQorCSAgICAoc2V0cSBhbnN3ZXIgKGZ1bmNhbGwgKGNhciBjcml0ZXJpYSkpKSkKKwkgIChzZXRxIGNyaXRlcmlhIChjZHIgY3JpdGVyaWEpKSkKKwkoaWYgKGFuZCBhbnN3ZXIgKG5vdCAoZXEgYW5zd2VyICdzdG9wKSkpCisJICAgIHQKKwkgIG5pbCkpKSkpCisKKworKGRlZnVuIGVybGFuZy1pbi1saXRlcmFsICgmb3B0aW9uYWwgbGltKQorICAiVGVzdCBpZiBwb2ludCBpcyBpbiBzdHJpbmcsIHF1b3RlZCBhdG9tIG9yIGNvbW1lbnQuCisKK1JldHVybiBvbmUgb2YgdGhlIHRocmVlIGF0b21zIGBhdG9tJywgYHN0cmluZycsIGFuZCBgY29tbWVudCcuCitTaG91bGQgdGhlIHBvaW50IGJlIGluc2lkZSBub25lIG9mIHRoZSBhYm92ZSBtZW50aW9uZWQgdHlwZXMgb2YKK2NvbnRleHQsIG5pbCBpcyByZXR1cm5lZC4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQqICgobGltIChvciBsaW0gKHNhdmUtZXhjdXJzaW9uCisJCQkgIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKwkJCSAgKHBvaW50KSkpKQorCSAgIChzdGF0ZSAocGFyc2UtcGFydGlhbC1zZXhwIGxpbSAocG9pbnQpKSkpCisgICAgICAoY29uZAorICAgICAgICgoZXEgKG50aCAzIHN0YXRlKSA/JykgJ2F0b20pCisgICAgICAgKChudGggMyBzdGF0ZSkgJ3N0cmluZykKKyAgICAgICAoKG50aCA0IHN0YXRlKSAnY29tbWVudCkKKyAgICAgICAodCBuaWwpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctYXQtZW5kLW9mLWZ1bmN0aW9uLXAgKCkKKyAgIlRlc3QgaWYgcG9pbnQgaXMgYXQgZW5kIG9mIGFuIEVybGFuZyBmdW5jdGlvbi4KKworVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBhIG1lbWJlciBvZiBhIGNyaXRlcmlhIGxpc3QuIgorICAoZXEgKHNhdmUtZXhjdXJzaW9uIChlcmxhbmctc2tpcC1ibGFuaykgKHBvaW50KSkKKyAgICAgIChzYXZlLWV4Y3Vyc2lvbgorCShlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uIC0xKSAocG9pbnQpKSkpCisKKworKGRlZnVuIGVybGFuZy1zdG9wLXdoZW4taW5zaWRlLWFyZ3VtZW50LWxpc3QgKCkKKyAgIlJldHVybiBgc3RvcCcgaWYgaW5zaWRlIHBhcmVudGhlc2lzIGxpc3QsIG5pbCBvdGhlcndpc2UuCisKK0tub3dzIGFib3V0IHRoZSBsaXN0IGNvbXByZWhlbnNpb24gc3ludGF4LiAgV2hlbiB0aGUgcG9pbnQgaXMKK2FmdGVyIGB8fCcsIGBzdG9wJyBpcyBub3QgcmV0dXJuZWQuCisKK1RoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgYSBtZW1iZXIgb2YgYSBjcml0ZXJpYSBsaXN0LiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCShsZXQgKChvcmlnLXBvaW50IChwb2ludCkpCisJICAgICAgKHN0YXRlIG5pbCkpCisJICAodXAtbGlzdCAtMSkKKwkgIChpZiAobm90IChlcSAoZm9sbG93aW5nLWNoYXIpID9cWykpCisJICAgICAgJ3N0b3AKKwkgICAgOzsgRG8gbm90IHJldHVybiBgc3RvcCcgd2hlbiBpbnNpZGUgYSBsaXN0IGNvbXByZWhlbnNpb24KKwkgICAgOzsgY29uc3RydW5jdGlvbi4gIChUaGUgcG9pbnQgbXVzdCBiZSBhZnRlciBgfHwnKS4KKwkgICAgKHdoaWxlICg8IChwb2ludCkgb3JpZy1wb2ludCkKKwkgICAgICAoc2V0cSBzdGF0ZSAoZXJsYW5nLXBhcnRpYWwtcGFyc2UgKHBvaW50KSBvcmlnLXBvaW50IHN0YXRlKSkpCisJICAgIChpZiAoYW5kIChjYXIgc3RhdGUpIChlcSAoY2FyIChjYXIgKGNhciBzdGF0ZSkpKSAnfHwpKQorCQluaWwKKwkgICAgICAnc3RvcCkpKQorICAgICAgKGVycm9yIAorICAgICAgIG5pbCkpKSkKKworCisoZGVmdW4gZXJsYW5nLXN0b3Atd2hlbi1hdC1ndWFyZCAoKQorICAiUmV0dXJuIGBzdG9wJyB3aGVuIGF0IGZ1bmN0aW9uIGd1YXJkcy4KKworVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBhIG1lbWJlciBvZiBhIGNyaXRlcmlhIGxpc3QuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisgICAgKGlmIChhbmQgKGxvb2tpbmctYXQgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKigiKSkKKwkgICAgIChub3QgKGxvb2tpbmctYXQKKwkJICAgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICIuKlxcKC0+XFx8Oi1cXCkiKSkpKQorCSdzdG9wCisgICAgICBuaWwpKSkKKworCisoZGVmdW4gZXJsYW5nLW5leHQtbGluZXMtZW1wdHktcCAoKQorICAiUmV0dXJuIG5vbi1uaWwgaWYgbmV4dCBsaW5lcyBhcmUgZW1wdHkuCisKK1RoZSB2YXJpYWJsZSBgZXJsYW5nLW5leHQtbGluZXMtZW1wdHktdGhyZXNob2xkJyBjb250YWlucyB0aGUgbnVtYmVyCitvZiBsaW5lcyByZXF1aXJlZCB0byBiZSBlbXB0eS4KKworQSBsaW5lIGNvbnRhaW5pbmcgb25seSBzcGFjZXMgYW5kIHRhYnMgaXMgY29uc2lkZXJlZCBlbXB0eS4KKworVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBhIG1lbWJlciBvZiBhIGNyaXRlcmlhIGxpc3QuIgorICAoYW5kIGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXRocmVzaG9sZAorICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorCSAobGV0ICgobGVmdCBlcmxhbmctbmV4dC1saW5lcy1lbXB0eS10aHJlc2hvbGQpCisJICAgICAgIChjb250IHQpKQorCSAgICh3aGlsZSAoYW5kIGNvbnQgKD4gbGVmdCAwKSkKKwkgICAgIChmb3J3YXJkLWxpbmUgMSkKKwkgICAgIChzZXRxIGNvbnQgKGxvb2tpbmctYXQgIlxccyAqJCIpKQorCSAgICAgKHNldHEgbGVmdCAoLSBsZWZ0IDEpKSkKKwkgICBjb250KSkpKQorCisKKyhkZWZ1biBlcmxhbmctYXQta2V5d29yZC1lbmQtcCAoKQorICAiVGVzdCBpZiBuZXh0IHJlYWRhYmxlIHRva2VuIGlzIHRoZSBrZXl3b3JkIGVuZC4KKworVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBhIG1lbWJlciBvZiBhIGNyaXRlcmlhIGxpc3QuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoZXJsYW5nLXNraXAtYmxhbmspCisgICAgKGxvb2tpbmctYXQgImVuZFteX2EtekEtWjAtOV0iKSkpCisKKwwKKzs7IEVybGFuZyB0YWdzIHN1cHBvcnQgd2hpY2ggaXMgYXdhcmUgb2YgZXJsYW5nIG1vZHVsZXMuCis7OworOzsgTm90IHlldCBpbXBsZW1lbnRlZCB1bmRlciBYRW1hY3MuICAoSGludDogIFRoZSBFbWFjcyAxOSBldGFncworOzsgcGFja2FnZSB3b3JrIHVuZGVyIFhFbWFjcy4pCisKKyhldmFsLXdoZW4tY29tcGlsZQorICAoaWYgKG9yIChmZWF0dXJlcCAnYnl0ZWNvbXApCisJICAoZmVhdHVyZXAgJ2J5dGUtY29tcGlsZSkpCisgICAgICAocHJvZ24KKwkocmVxdWlyZSAnZXRhZ3MpKSkpCisKKworOzsgVmFyaWFibGVzOgorCisoZGVmdmFyIGVybGFuZy10YWdzLWZ1bmN0aW9uLWFsaXN0CisgICAnKChmaW5kLXRhZyAgICAgICAgICAgICAgICAgLiBlcmxhbmctZmluZC10YWcpCisgICAgIChmaW5kLXRhZy1vdGhlci13aW5kb3cgICAgLiBlcmxhbmctZmluZC10YWctb3RoZXItd2luZG93KQorICAgICAoZmluZC10YWctcmVnZXhwICAgICAgICAgIC4gZXJsYW5nLWZpbmQtdGFnLXJlZ2V4cCkKKyAgICAgKGZpbmQtdGFnLW90aGVyLWZyYW1lICAgICAuIGVybGFuZy1maW5kLXRhZy1vdGhlci1mcmFtZSkpCisgICAiQWxpc3Qgb2Ygb2xkIHRhZ3MgY29tbWFuZHMgYW5kIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbnMuIikKKworKGRlZnZhciBlcmxhbmctdGFncy1pbnN0YWxsZWQgbmlsCisgICJOb24tbmlsIHdoZW4gdGhlIEVybGFuZyB0YWdzIHN5c3RlbSBpcyBpbnN0YWxsZWQuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3MtZmlsZS1saXN0ICcoKQorICAiTGlzdCBvZiBmaWxlcyBpbiB0YWcgbGlzdC4gVXNlZCB3aGVuIGZpbmRpbmcgdGFnIG9uIGZvcm0gYG1vZHVsZTonLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUgbmlsCisgICJMaWtlIGB0YWdzLWNvbXBsZXRpb24tdGFibGUnLCB0aGlzIHRhYmxlIGNvbnRhaW5zIGB0YWcnIGFuZCBgbW9kdWxlOnRhZycuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3MtYnVmZmVyLWluc3RhbGxlZC1wIG5pbAorICAiTm9uLW5pbCB3aGVuIGVybGFuZyBtb2R1bGUgcmVjb2duaXNpbmcgZnVuY3Rpb25zIGluc3RhbGxlZC4iKQorKGRlZnZhciBlcmxhbmctdGFncy1idWZmZXItbGlzdCAnKCkKKyAgIlRlbXBvcmFyeSBsaXN0IG9mIGJ1ZmZlcnMuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3Mtb3JpZy1jb21wbGV0aW9uLXRhYmxlIG5pbAorICAiVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGB0YWdzLWNvbXBsZXRpb24tdGFibGUnLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLW9yaWctdGFnLW9yZGVyIG5pbAorICAiVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGBmaW5kLXRhZy10YWctb3JkZXInLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLW9yaWctcmVnZXhwLXRhZy1vcmRlciBuaWwKKyAgIlRlbXBvcmFyeSBzdG9yYWdlIGZvciBgZmluZC10YWctcmVnZXhwLXRhZy1vcmRlcicuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3Mtb3JpZy1zZWFyY2gtZnVuY3Rpb24gbmlsCisgICJUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgYGZpbmQtdGFnLXNlYXJjaC1mdW5jdGlvbicuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3Mtb3JpZy1yZWdleHAtc2VhcmNoLWZ1bmN0aW9uIG5pbAorICAiVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGBmaW5kLXRhZy1yZWdleHAtc2VhcmNoLWZ1bmN0aW9uJy4iKQorKGRlZnZhciBlcmxhbmctdGFncy1vcmlnLWZvcm1hdC1ob29rcyBuaWwKKyAgIlRlbXBvcmFyeSBzdG9yYWdlIGZvciBgdGFncy10YWJsZS1mb3JtYXQtaG9va3MnLiIpCisKKyhkZWZ1biBlcmxhbmctdGFncy1pbml0ICgpCisgICJJbnN0YWxsIGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRhZ3MsIGF3YXJlIG9mIEVybGFuZyBtb2R1bGVzLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSB0YWdzIGZ1bmN0aW9ucyBhcmUgYXdhcmUgb2YKK0VybGFuZyBtb2R1bGVzLiAgVGFncyBjYW4gYmUgZW50ZXJlZCBvbiB0aGUgZm9yIGBtb2R1bGU6dGFnJyBhc3dlbGwKK2FzIG9uIHRoZSBvbGQgZm9ybSBgdGFnJy4KKworSW4gdGhlIGNvbXBsZXRpb24gbGlzdCwgYG1vZHVsZTp0YWcnIGFuZCBgbW9kdWxlOicgc2hvd3MgdXAuCisKK0NhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIGFwcHJvcHJpYXRlIGluaXQgZmlsZSwgb3IgYWRkIGl0IHRvCitFcmxhbmcgbW9kZSBob29rIHdpdGggdGhlIGNvbW1hbmRzOgorICAgIChhZGQtaG9vayAnZXJsYW5nLW1vZGUtaG9vayAnZXJsYW5nLXRhZ3MtaW5pdCkKKyAgICAoYWRkLWhvb2sgJ2VybGFuZy1zaGVsbC1tb2RlLWhvb2sgJ2VybGFuZy10YWdzLWluaXQpCisKK1RoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB1bmRlciBFbWFjcyAxOCBhbmQgRW1hY3MgMTkuICBDdXJyZW50bHksIEl0CitpcyBub3QgaW1wbGVtZW50ZWQgdW5kZXIgWEVtYWNzLiAgKEhpbnQ6IFRoZSBFbWFjcyAxOSBldGFncyBtb2R1bGUKK3dvcmtzIHVuZGVyIFhFbWFjcy4pIgorICAoaW50ZXJhY3RpdmUpCisgIChjb25kICgoPSBlcmxhbmctZW1hY3MtbWFqb3ItdmVyc2lvbiAxOCkKKwkgKHJlcXVpcmUgJ3RhZ3MpCisJIChlcmxhbmctdGFncy1kZWZpbmUta2V5cyAoY3VycmVudC1sb2NhbC1tYXApKQorCSAoc2V0cSBlcmxhbmctdGFncy1pbnN0YWxsZWQgdCkpCisJKHQKKwkgKHJlcXVpcmUgJ2V0YWdzKQorCSA7OyBUZXN0IG9uIGEgZnVuY3Rpb24gYXZhaWxhYmxlIGluIHRoZSBFbWFjcyAxOSB2ZXJzaW9uCisJIDs7IG9mIHRhZ3MgYnV0IG5vdCBpbiB0aGUgWEVtYWNzIHZlcnNpb24uCisJIChpZiAobm90IChmYm91bmRwICdmaW5kLXRhZy1ub3NlbGVjdCkpCisJICAgICAoKQorCSAgIChlcmxhbmctdGFncy1kZWZpbmUta2V5cyAoY3VycmVudC1sb2NhbC1tYXApKQorCSAgIChzZXRxIGVybGFuZy10YWdzLWluc3RhbGxlZCB0KSkpKSkKKworCis7OyBTZXQgYWxsIGtleXMgYm91bmQgdG8gYGZpbmQtdGFnJyBldC5hbC4gaW4gdGhlIGdsb2JhbCBtYXAgYW5kIHRoZQorOzsgbWVudSB0byBgZXJsYW5nLWZpbmQtdGFnJyBldC5hbC4gaW4gYG1hcCcuCis7OworOzsgVGhlIGZ1bmN0aW9uIGBzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uJyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5Cis7OyBpbiBhbGwgdmVyc2lvbiBvZiBFbWFjcy4KKworKGRlZnVuIGVybGFuZy10YWdzLWRlZmluZS1rZXlzIChtYXApCisgICJCaW5kIHRhZ3MgY29tbWFuZHMgdG8ga2V5bWFwIE1BUCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlcy4iCisgIChsZXQgKChhbGlzdCBlcmxhbmctdGFncy1mdW5jdGlvbi1hbGlzdCkpCisgICAgKHdoaWxlIGFsaXN0CisgICAgICAobGV0KiAoKG9sZCAoY2FyIChjYXIgYWxpc3QpKSkKKwkgICAgIChuZXcgKGNkciAoY2FyIGFsaXN0KSkpCisJICAgICAoa2V5cyAoYXBwZW5kICh3aGVyZS1pcy1pbnRlcm5hbCBvbGQgZ2xvYmFsLW1hcCkpKSkKKwkod2hpbGUga2V5cworCSAgKGRlZmluZS1rZXkgbWFwIChjYXIga2V5cykgbmV3KQorCSAgKHNldHEga2V5cyAoY2RyIGtleXMpKSkpCisgICAgICAoc2V0cSBhbGlzdCAoY2RyIGFsaXN0KSkpKQorICA7OyBVcGRhdGUgdGhlIG1lbnUuCisgIChlcmxhbmctbWVudS1zdWJzdGl0dXRlIGVybGFuZy1tZW51LWJhc2UtaXRlbXMgZXJsYW5nLXRhZ3MtZnVuY3Rpb24tYWxpc3QpCisgIChlcmxhbmctbWVudS1pbml0KSkKKworCis7OyBUaGVyZSBleGlzdHMgYSB2YXJpYWJsZSBgZmluZC10YWctZGVmYXVsdC1mdW5jdGlvbicuICBJdCBpcyBub3QgdXNlZAorOzsgc2luY2UgYGNvbXBsZXRlLXRhZycgdXNlcyBpdCB0byBnZXQgY3VycmVudCB3b3JkIHVuZGVyIHBvaW50LiAgSW4gdGhhdAorOzsgc2l0dWF0aW9uIHdlIGRvZXNuJ3Qgd2FudCB0aGUgbW9kdWxlIHRvIGJlIHByZXBlbmRlZC4KKworKGRlZnVuIGVybGFuZy1maW5kLXRhZy1kZWZhdWx0ICgpCisgICJSZXR1cm4gdGhlIGRlZmF1bHQgdGFnLCBzZWFyY2hlcyBgLWltcG9ydCcgbGlzdCBvZiBpbXBvcnRlZCBmdW5jdGlvbnMuCitTaW5nbGUgcXVvdGVzIGhhcyBiZWVuIHN0cmlwcGVkIGF3YXkuIgorICAobGV0ICgobW9kLWZ1bmMgKGVybGFuZy1nZXQtZnVuY3Rpb24tdW5kZXItcG9pbnQpKSkKKyAgICAoY29uZCAoKG51bGwgbW9kLWZ1bmMpCisJICAgbmlsKQorCSAgKChudWxsIChjYXIgbW9kLWZ1bmMpKQorCSAgIChudGggMSBtb2QtZnVuYykpCisJICAodAorCSAgIChjb25jYXQgKGNhciBtb2QtZnVuYykgIjoiIChudGggMSBtb2QtZnVuYykpKSkpKQorCisKKzs7IFJldHVybiBgdCcgc2luY2UgaXQgaXMgdXNlZCBpbnNpZGUgYHRhZ3MtbG9vcC1mb3JtJy4KKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gZXJsYW5nLWZpbmQtdGFnIChtb2R0YWduYW1lICZvcHRpb25hbCBuZXh0LXAgcmVnZXhwLXApCisgICJMaWtlIGBmaW5kLXRhZycuICBDYXBhYmxlIG9mIHJldHJlaXZpbmcgRXJsYW5nIG1vZHVsZXMuCisKK1RhZ3MgY2FuIGJlIGdpdmVuIG9uIHRoZSBmb3JtcyBgdGFnJywgYG1vZHVsZTonLCBgbW9kdWxlOnRhZycuIgorICAoaW50ZXJhY3RpdmUgKGVybGFuZy10YWctaW50ZXJhY3RpdmUgIkZpbmQgYG1vZHVsZTp0YWcnIG9yIGB0YWcnOiAiKSkKKyAgKHN3aXRjaC10by1idWZmZXIgKGVybGFuZy1maW5kLXRhZy1ub3NlbGVjdCBtb2R0YWduYW1lIG5leHQtcCByZWdleHAtcCkpCisgIHQpCisKKworOzsgQ29kZSBtYWlubHkgZnJvbSBgZmluZC10YWctb3RoZXItd2luZG93JyBpbiBgZXRhZ3MuZWwnLgorOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBlcmxhbmctZmluZC10YWctb3RoZXItd2luZG93ICh0YWduYW1lICZvcHRpb25hbCBuZXh0LXAgcmVnZXhwLXApCisgICJMaWtlIGBmaW5kLXRhZy1vdGhlci13aW5kb3cnIGJ1dCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlcy4iCisgIChpbnRlcmFjdGl2ZSAoZXJsYW5nLXRhZy1pbnRlcmFjdGl2ZQorCQkiRmluZCBgbW9kdWxlOnRhZycgb3IgYHRhZycgb3RoZXIgd2luZG93OiAiKSkKKworICA7OyBUaGlzIGlzIHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgdGFnIGlzIGZvdW5kIGluIHRoZQorICA7OyBzZWxlY3RlZCB3aW5kb3cncyBidWZmZXI7IHdpdGhvdXQgdGhpcywgcG9pbnQgaXMgbW92ZWQgaW4gYm90aAorICA7OyB3aW5kb3dzLiAgVG8gcHJldmVudCB0aGlzLCB3ZSBzYXZlIHRoZSBzZWxlY3RlZCB3aW5kb3cncyBwb2ludAorICA7OyBiZWZvcmUgZG9pbmcgZmluZC10YWctbm9zZWxlY3QsIGFuZCByZXN0b3JlIGl0IGFmdGVyd2FyZHMuCisgIChsZXQqICgod2luZG93LXBvaW50ICh3aW5kb3ctcG9pbnQgKHNlbGVjdGVkLXdpbmRvdykpKQorCSAodGFnYnVmIChlcmxhbmctZmluZC10YWctbm9zZWxlY3QgdGFnbmFtZSBuZXh0LXAgcmVnZXhwLXApKQorCSAodGFncG9pbnQgKHByb2duIChzZXQtYnVmZmVyIHRhZ2J1ZikgKHBvaW50KSkpKQorICAgIChzZXQtd2luZG93LXBvaW50IChwcm9nMQorCQkJICAoc2VsZWN0ZWQtd2luZG93KQorCQkJKHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IHRhZ2J1ZikKKwkJCTs7IFdlIGhhdmUgdG8gc2V0IHRoaXMgbmV3IHdpbmRvdydzIHBvaW50OyBpdAorCQkJOzsgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gZGlzcGxheWluZyBhCisJCQk7OyBkaWZmZXJlbnQgcG9ydGlvbiBvZiB0YWdidWYsIGluIHdoaWNoIGNhc2UKKwkJCTs7IHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IGRvZXNuJ3Qgc2V0CisJCQk7OyB0aGUgd2luZG93J3MgcG9pbnQgZnJvbSB0aGUgYnVmZmVyLgorCQkJKHNldC13aW5kb3ctcG9pbnQgKHNlbGVjdGVkLXdpbmRvdykgdGFncG9pbnQpKQorCQkgICAgICB3aW5kb3ctcG9pbnQpKSkKKworCisoZGVmdW4gZXJsYW5nLWZpbmQtdGFnLW90aGVyLWZyYW1lICh0YWduYW1lICZvcHRpb25hbCBuZXh0LXApCisgICJMaWtlIGBmaW5kLXRhZy1vdGhlci1mcmFtZScgYnV0IGF3YXJlIG9mIEVybGFuZyBtb2R1bGVzLiIKKyAgKGludGVyYWN0aXZlIChlcmxhbmctdGFnLWludGVyYWN0aXZlCisJCSJGaW5kIGBtb2R1bGU6dGFnJyBvciBgdGFnJyBvdGhlciBmcmFtZTogIikpCisgIChsZXQgKChwb3AtdXAtZnJhbWVzIHQpKQorICAgIChlcmxhbmctZmluZC10YWctb3RoZXItd2luZG93IHRhZ25hbWUgbmV4dC1wKSkpCisKKworKGRlZnVuIGVybGFuZy1maW5kLXRhZy1yZWdleHAgKHJlZ2V4cCAmb3B0aW9uYWwgbmV4dC1wIG90aGVyLXdpbmRvdykKKyAgIkxpa2UgYGZpbmQtdGFnLXJlZ2V4cCcgYnV0IGF3YXJlIG9mIEVybGFuZyBtb2R1bGVzLiIKKyAgKGludGVyYWN0aXZlIChpZiAoZmJvdW5kcCAnZmluZC10YWctcmVnZXhwKQorCQkgICAoZXJsYW5nLXRhZy1pbnRlcmFjdGl2ZQorCQkgICAgIkZpbmQgYG1vZHVsZTpyZWdleHAnIG9yIGByZWdleHAnOiAiKQorCQkgKGVycm9yICJUaGlzIHZlcnNpb24gb2YgRW1hY3MgY2FuJ3QgZmluZCB0YWdzIGJ5IHJlZ2V4cHMuIikpKQorICAoZnVuY2FsbCAoaWYgb3RoZXItd2luZG93CisJICAgICAgICdlcmxhbmctZmluZC10YWctb3RoZXItd2luZG93CisJICAgICAnZXJsYW5nLWZpbmQtdGFnKQorCSAgIHJlZ2V4cCBuZXh0LXAgdCkpCisKKworOzsgSnVzdCBsaWtlIEMtdSBNLS4gIFRoaXMgY291bGQgYmUgYWRkZWQgdG8gdGhlIG1lbnUuCisoZGVmdW4gZXJsYW5nLWZpbmQtbmV4dC10YWcgKCkKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoY3VycmVudC1wcmVmaXgtYXJnICcoNCkpKQorICAgIChpZiBlcmxhbmctdGFncy1pbnN0YWxsZWQKKwkoY2FsbC1pbnRlcmFjdGl2ZWx5ICdlcmxhbmctZmluZC10YWcpCisgICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdmaW5kLXRhZykpKSkKKworCis7OyBNaW1pY3MgYGZpbmQtdGFnLW5vc2VsZWN0JyBmb3VuZCBpbiBgZXRhZ3MuZWwnLCBidXQgdXNlcyBgZmluZC10YWcnIHRvCis7OyBiZSBjb21wYXRpYmxlIHdpdGggYHRhZ3MuZWwnLgorOzsKKzs7IEhhbmRsZXMgdGhyZWUgY2FzZXM6Cis7OyAqIGBtb2R1bGU6JyAgTG9vcCBvdmVyIGFsbCBwb3NzaWJsZSBmaWxlbi1hbWVzLiAgU3RvcCBpZiBhIGZpbGUtbmFtZQorOzsgICAgICAgICAgICAgIHdpdGhvdXQgZXh0ZW5zaW9uIGFuZCBkaXJlY3RvcnkgbWF0Y2hlcyB0aGUgbW9kdWxlLgorOzsKKzs7ICogYG1vZHVsZTp0YWcnCis7OwkJRW1hY3MgMTk6IFJlcGxhY2UgdGVzdGZ1bmN0aW9ucyB3aXRoIGZ1bmN0aW9ucyBhd2FyZSBvZgorOzsJICAgICAgICBFcmxhbmcgbW9kdWxlcy4gIFRyaWNreSBiZWNhdXNlIHRoZSBldGFncyBzeXN0ZW0gd2Fzbid0Cis7OwkJYnVpbHQgZm9yIHRoZXNlIGtpbmQgb2Ygb3BlcmF0aW9ucy4uLgorOzsKKzs7ICAgICAgICAgICAgICBFbWFjcyAxODogV2UgbG9vcCBvdmVyIGBmaW5kLXRhZycgdW50aWwgd2UgZmluZCBhIGZpbGUKKzs7ICAgICAgICAgICAgICB3aG9zZSBtb2R1bGUgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIG1vZHVsZS4gIFRoZQorOzsgICAgICAgICAgICAgIGRyYXdiYWNrIGlzIHRoYXQgYSBsb3Qgb2YgZmlsZXMgY291bGQgYmUgbG9hZGVkIGludG8KKzs7ICAgICAgICAgICAgICBFbWFjcy4KKzs7Cis7OyAqIGB0YWcnICAgICAgSnVzdCBnaXZlIGl0IHRvIGBmaW5kLXRhZycuCisKKyhkZWZ1biBlcmxhbmctZmluZC10YWctbm9zZWxlY3QgKG1vZHRhZ25hbWUgJm9wdGlvbmFsIG5leHQtcCByZWdleHAtcCkKKyAgIkxpa2UgYGZpbmQtdGFnLW5vc2VsZWN0JyBidXQgYXdhcmUgb2YgRXJsYW5nIG1vZHVsZXMuIgorICAoaW50ZXJhY3RpdmUgKGVybGFuZy10YWctaW50ZXJhY3RpdmUgIkZpbmQgYG1vZHVsZTp0YWcnIG9yIGB0YWcnOiAiKSkKKyAgKG9yIG1vZHRhZ25hbWUKKyAgICAgIChzZXRxIG1vZHRhZ25hbWUgKHN5bWJvbC12YWx1ZSAnbGFzdC10YWcpKSkKKyAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KSAnbGFzdC10YWcgbW9kdGFnbmFtZSkKKyAgOzsgYHRhZ3MuZWwnIHVzZXMgdGhpcyB2YXJpYWJsZSB0byByZWNvcmQgaG93IE0tLCB3b3VsZAorICA7OyBrbm93IHdoZXJlIHRvIHJlc3RhcnQgYSB0YWdzIGNvbW1hbmQuCisgIChpZiAoYm91bmRwICd0YWdzLWxvb3AtZm9ybSkKKyAgICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkKKwkgICAgICAgJ3RhZ3MtbG9vcC1mb3JtICcoZXJsYW5nLWZpbmQtdGFnIG5pbCB0KSkpCisgIChzYXZlLXdpbmRvdy1leGN1cnNpb24KKyAgICAoY29uZAorICAgICAoKHN0cmluZy1tYXRjaCAiOiQiIG1vZHRhZ25hbWUpCisgICAgICA7OyBPbmx5IHRoZSBtb2R1bGUgbmFtZSB3YXMgZ2l2ZW4uICBSZWFkIGFsbCBmaWxlcyB3aG9zZSBmaWxlIG5hbWUKKyAgICAgIDs7IG1hdGNoLgorICAgICAgKGxldCAoKG1vZG5hbWUgKHN1YnN0cmluZyBtb2R0YWduYW1lIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkpCisJICAgIChmaWxlIG5pbCkpCisJKGlmIChub3QgbmV4dC1wKQorCSAgICAoc2F2ZS1leGN1cnNpb24KKwkgICAgICAodmlzaXQtdGFncy10YWJsZS1idWZmZXIpCisJICAgICAgKHNldHEgZXJsYW5nLXRhZ3MtZmlsZS1saXN0CisJCSAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICd0YWdzLXRhYmxlLWZpbGVzKSkpKSkKKwkod2hpbGUgKG51bGwgZmlsZSkKKwkgIChvciBlcmxhbmctdGFncy1maWxlLWxpc3QKKwkgICAgICAoc2F2ZS1leGN1cnNpb24KKwkJKGlmIChhbmQgKGZlYXR1cmVwICdldGFncykKKwkJCSAoZnVuY2FsbAorCQkJICAoc3ltYm9sLWZ1bmN0aW9uICd2aXNpdC10YWdzLXRhYmxlLWJ1ZmZlcikgJ3NhbWUpCisJCQkgKGZ1bmNhbGwKKwkJCSAgKHN5bWJvbC1mdW5jdGlvbiAndmlzaXQtdGFncy10YWJsZS1idWZmZXIpIHQpKQorCQkgICAgKHNldHEgZXJsYW5nLXRhZ3MtZmlsZS1saXN0CisJCQkgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3RhZ3MtdGFibGUtZmlsZXMpKSkKKwkJICAoZXJyb3IgIk5vICVzdGFncyBjb250YWluaW5nICVzIiAoaWYgbmV4dC1wICJtb3JlICIgIiIpCisJCQkgbW9kdGFnbmFtZSkpKSkKKwkgIChpZiBlcmxhbmctdGFncy1maWxlLWxpc3QKKwkgICAgICAobGV0ICgodGhpcy1tb2R1bGUgKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lCisJCQkJICAoY2FyIGVybGFuZy10YWdzLWZpbGUtbGlzdCkpKSkKKwkJKGlmIChhbmQgKHN0cmluZ3AgdGhpcy1tb2R1bGUpCisJCQkgKHN0cmluZz0gbW9kbmFtZSB0aGlzLW1vZHVsZSkpCisJCSAgICAoc2V0cSBmaWxlIChjYXIgZXJsYW5nLXRhZ3MtZmlsZS1saXN0KSkpCisJCShzZXRxIGVybGFuZy10YWdzLWZpbGUtbGlzdCAoY2RyIGVybGFuZy10YWdzLWZpbGUtbGlzdCkpKSkpCisJKHNldC1idWZmZXIgKG9yIChnZXQtZmlsZS1idWZmZXIgZmlsZSkKKwkJCShmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZSkpKSkpCisKKyAgICAgKChzdHJpbmctbWF0Y2ggIjoiIG1vZHRhZ25hbWUpCisgICAgICAoaWYgKGJvdW5kcCAnZmluZC10YWctdGFnLW9yZGVyKQorCSAgOzsgTWV0aG9kIG9uZTogQWRkIG1vZHVsZS1yZWNvZ25pc2luZyBmdW5jdGlvbnMgdG8gdGhlCisJICA7OyBsaXN0IG9mIG9yZGVyIGZ1bmN0aW9ucy4gIEhvd2V2ZXIsIHRoZSB0YWdzIHN5c3RlbQorCSAgOzsgZnJvbSBFbWFjcyAxOCwgYW5kIGRlcml2ZXMgdGhlcmVvZiAocmVhZDogWEVtYWNzKQorCSAgOzsgaGFzbid0IGdvdCB0aGlzIGZlYXR1cmUuCisJICAocHJvZ24KKwkgICAgKGVybGFuZy10YWdzLWluc3RhbGwtbW9kdWxlLWNoZWNrKQorCSAgICAodW53aW5kLXByb3RlY3QKKwkJKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnZmluZC10YWcpCisJCQkgbW9kdGFnbmFtZSBuZXh0LXAgcmVnZXhwLXApCisJICAgICAgKGVybGFuZy10YWdzLXJlbW92ZS1tb2R1bGUtY2hlY2spKSkKKwk7OyBNZXRob2QgdHdvOiBDYWxsIHRoZSB0YWdzIHN5c3RlbSB1bnRpbCBhIGZpbGUgbWF0Y2hpbmcKKwk7OyB0aGUgbW9kdWxlIGlzIGZvdW5kLiAgVGhpcyBjb3VsZCByZXN1bHQgaW4gdGhhdCBtYW55CisJOzsgZmlsZXMgYXJlIHJlYWQuIChlLmcuIFRoZSB0YWcgImZvbzpmaWxlIiB3aWxsIHRha2UgYQorCTs7IHdoaWxlIHRvIHByb2Nlc3MuKQorCShsZXQqICgobW9kbmFtZSAoc3Vic3RyaW5nIG1vZHRhZ25hbWUgMCAobWF0Y2gtYmVnaW5uaW5nIDApKSkKKwkgICAgICAgKHRhZ25hbWUgKHN1YnN0cmluZyBtb2R0YWduYW1lIChtYXRjaC1lbmQgMCkgbmlsKSkKKwkgICAgICAgKGxhc3QtdGFnIHRhZ25hbWUpCisJICAgICAgIGZpbGUpCisJICAod2hpbGUKKwkgICAgICAocHJvZ24KKwkJKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnZmluZC10YWcpIHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKQorCQkoc2V0cSBuZXh0LXAgdCkKKwkJOzsgRGV0ZXJtaW5lIHRoZSBtb2R1bGUgZm9ybSB0aGUgZmlsZSBuYW1lLiAgKFRoZQorCQk7OyBhbHRlcm5hdGl2ZSwgdG8gY2hlY2sgYC1tb2R1bGUnLCB3b3VsZCBtYWtlIHRoaXMKKwkJOzsgY29kZSB1c2VsZXNzIGZvciBub24tRXJsYW5nIHByb2dyYW1zLikKKwkJKHNldHEgZmlsZSAoZXJsYW5nLWdldC1tb2R1bGUtZnJvbS1maWxlLW5hbWUgYnVmZmVyLWZpbGUtbmFtZSkpCisJCShub3QgKGFuZCAoc3RyaW5ncCBmaWxlKQorCQkJICAoc3RyaW5nPSBtb2RuYW1lIGZpbGUpKSkpKSkpKQorICAgICAodAorICAgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnZmluZC10YWcpIG1vZHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKSkpCisgICAgKGN1cnJlbnQtYnVmZmVyKSkpCQk7IFJldHVybiB0aGUgbmV3IGJ1ZmZlci4KKworCis7OyBQcm9jZXNzIGludGVyYWN0aXZlIGFyZ3VtZW50cyBmb3IgZXJsYW5nLWZpbmQtdGFnLSouCis7OworOzsgTmVnYXRpdmUgYXJndW1lbnRzIHdvcmsgb25seSBmb3IgYGV0YWdzJywgbm90IGB0YWdzJy4gIFRoaXMgaXMgbm90Cis7OyBhIHByb2JsZW0gc2luY2UgbmVnYXRpdmUgYXJndW1lbnRzIG1lYW5zIHN0ZXAgYmFjayBpbnRvIHRoZQorOzsgaGlzdG9yeSBsaXN0LCBhIGZlYXR1cmUgbm90IGltcGxlbWVudGVkIGluIGB0YWdzJy4KKworKGRlZnVuIGVybGFuZy10YWctaW50ZXJhY3RpdmUgKHByb21wdCkKKyAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAgKHJlcXVpcmUgJ2V0YWdzKQorICAgIChlcnJvcgorICAgICAocmVxdWlyZSAndGFncykpKQorICAoaWYgY3VycmVudC1wcmVmaXgtYXJnCisgICAgICAobGlzdCBuaWwgKGlmICg8IChwcmVmaXgtbnVtZXJpYy12YWx1ZSBjdXJyZW50LXByZWZpeC1hcmcpIDApCisJCSAgICAnLQorCQkgIHQpKQorICAgIChsZXQqICgoZGVmYXVsdCAoZXJsYW5nLWZpbmQtdGFnLWRlZmF1bHQpKQorCSAgIChwcm9tcHQgKGlmIGRlZmF1bHQKKwkJICAgICAgIChmb3JtYXQgIiVzKGRlZmF1bHQgJXMpICIgcHJvbXB0IGRlZmF1bHQpCisJCSAgICAgcHJvbXB0KSkKKwkgICAoc3BlYyAoaWYgKGZlYXR1cmVwICdldGFncykKKwkJICAgICAoY29tcGxldGluZy1yZWFkIHByb21wdCAnZXJsYW5nLXRhZ3MtY29tcGxldGUtdGFnKQorCQkgICAocmVhZC1zdHJpbmcgcHJvbXB0KSkpKQorICAgICAgKGxpc3QgKGlmIChlcXVhbCBzcGVjICIiKQorCQkob3IgZGVmYXVsdCAoZXJyb3IgIlRoZXJlIGlzIG5vIGRlZmF1bHQgdGFnIikpCisJICAgICAgc3BlYykpKSkpCisKKwwKKzs7IFNlYXJjaCB0YWcgZnVuY3Rpb25zIHdoaWNoIGFyZSBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlcy4gIFRoZSB0YWN0aWMKKzs7IGlzIHRvIHN0b3JlIG5ldyBzZWFyY2ggZnVuY3Rpb25zIGludG8gdGhlIGxvY2FsIHZhcmlhYmVscyBvZiB0aGUKKzs7IFRBR1MgYnVmZmVycy4gIFRoZSB2YXJpYWJsZXMgYXJlIHJlc3RvcmVkIGRpcmVjdGx5IGFmdGVyIHRoZQorOzsgc2VhcmNoLiAgVGhlIHNpdHVhdGlvbiBpcyBjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0IG5ldyBUQUdTCis7OyBmaWxlcyBjYW4gYmUgbG9hZGVkIGR1cmluZyB0aGUgc2VhcmNoLgorOzsKKzs7IFRoaXMgY29kZSBpcyBFbWFjcyAxOSBgZXRhZ3MnIHNwZWNpZmljLgorCisoZGVmdW4gZXJsYW5nLXRhZ3MtaW5zdGFsbC1tb2R1bGUtY2hlY2sgKCkKKyAgIkluc3RhbGwgb3VyIG93biB0YWcgc2VhcmNoIGZ1bmN0aW9ucy4iCisgIDs7IE1ha2Ugc3VyZSBvdXIgZnVuY3Rpb25zIGFyZSBpbnN0YWxsZWQgaW4gVEFHUyBmaWxlcyBsb2FkZWQKKyAgOzsgaW50byBFbWFjcyB3aGlsZSBzZWFyY2hpbmcuCisgIChzZXRxIGVybGFuZy10YWdzLW9yaWctZm9ybWF0LWhvb2tzCisJKHN5bWJvbC12YWx1ZSAndGFncy10YWJsZS1mb3JtYXQtaG9va3MpKQorICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpICd0YWdzLXRhYmxlLWZvcm1hdC1ob29rcworCSAgIChjb25zICdlcmxhbmctdGFncy1yZWNvZ25pemUtdGFncy10YWJsZQorCQkgZXJsYW5nLXRhZ3Mtb3JpZy1mb3JtYXQtaG9va3MpKQorICAoc2V0cSBlcmxhbmctdGFncy1idWZmZXItbGlzdCAnKCkpCisgIDs7IEluc3RhbGwgb3VyIGZ1bmN0aW9ucyBpbiB0aGUgVEFHUyBmaWxlcyBhbHJlYWR5IHJlc2lkZW50LgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgoZmlsZXMgKHN5bWJvbC12YWx1ZSAndGFncy10YWJsZS1jb21wdXRlZC1saXN0KSkpCisgICAgICAod2hpbGUgZmlsZXMKKwkoaWYgKHN0cmluZ3AgKGNhciBmaWxlcykpCisJICAgIChpZiAoZ2V0LWZpbGUtYnVmZmVyIChjYXIgZmlsZXMpKQorCQkocHJvZ24KKwkJICAoc2V0LWJ1ZmZlciAoZ2V0LWZpbGUtYnVmZmVyIChjYXIgZmlsZXMpKSkKKwkJICAoZXJsYW5nLXRhZ3MtaW5zdGFsbC1sb2NhbCkpKSkKKwkoc2V0cSBmaWxlcyAoY2RyIGZpbGVzKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy10YWdzLWluc3RhbGwtbG9jYWwgKCkKKyAgIkluc3RhbGwgb3VyIHRhZyBzZWFyY2ggZnVuY3Rpb25zIGluIGN1cnJlbnQgYnVmZmVyLiIKKyAgKGlmIGVybGFuZy10YWdzLWJ1ZmZlci1pbnN0YWxsZWQtcAorICAgICAgKCkKKyAgICA7OyBNYXJrIHRoaXMgYnVmZmVyIGFzICJpbnN0YWxsZWQiIGFuZCByZWNvcmQuCisgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZXJsYW5nLXRhZ3MtYnVmZmVyLWluc3RhbGxlZC1wKSB0KQorICAgIChzZXRxIGVybGFuZy10YWdzLWJ1ZmZlci1saXN0CisJICAoY29ucyAoY3VycmVudC1idWZmZXIpIGVybGFuZy10YWdzLWJ1ZmZlci1saXN0KSkKKworICAgIDs7IFNhdmUgdGhlIG9yaWdpbmFsIHZhbHVlcy4KKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdlcmxhbmctdGFncy1vcmlnLXRhZy1vcmRlcikKKwkgKHN5bWJvbC12YWx1ZSAnZmluZC10YWctdGFnLW9yZGVyKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC10YWctb3JkZXIpCisJIChzeW1ib2wtdmFsdWUgJ2ZpbmQtdGFnLXJlZ2V4cC10YWctb3JkZXIpKQorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2VybGFuZy10YWdzLW9yaWctc2VhcmNoLWZ1bmN0aW9uKQorCSAoc3ltYm9sLXZhbHVlICdmaW5kLXRhZy1zZWFyY2gtZnVuY3Rpb24pKQorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2VybGFuZy10YWdzLW9yaWctcmVnZXhwLXNlYXJjaC1mdW5jdGlvbikKKwkgKHN5bWJvbC12YWx1ZSAnZmluZC10YWctcmVnZXhwLXNlYXJjaC1mdW5jdGlvbikpCisKKyAgICA7OyBJbnN0YWxsIG91ciBvd24gZnVuY3Rpb25zLgorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZpbmQtdGFnLXNlYXJjaC1mdW5jdGlvbikKKwkgJ2VybGFuZy10YWdzLXNlYXJjaC1mb3J3YXJkKQorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZpbmQtdGFnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24pCisJICdlcmxhbmctdGFncy1yZWdleHAtc2VhcmNoLWZvcndhcmQpCisgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZmluZC10YWctdGFnLW9yZGVyKQorCSAnKGVybGFuZy10YWctbWF0Y2gtbW9kdWxlLXApKQorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZpbmQtdGFnLXJlZ2V4cC10YWctb3JkZXIpCisJICcoZXJsYW5nLXRhZy1tYXRjaC1tb2R1bGUtcmVnZXhwLXApKSkpCisKKworKGRlZnVuIGVybGFuZy10YWdzLXJlbW92ZS1tb2R1bGUtY2hlY2sgKCkKKyAgIlJlbW92ZSBvdXIgb3duIHRhZ3Mgc2VhcmNoIGZ1bmN0aW9ucy4iCisgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkKKwkgICAndGFncy10YWJsZS1mb3JtYXQtaG9va3MKKwkgICBlcmxhbmctdGFncy1vcmlnLWZvcm1hdC1ob29rcykKKyAgOzsgUmVtb3ZlIG91ciBmdW5jdGlvbnMgZnJvbSB0aGUgVEFHUyBmaWxlcy4gIChOb3RlIHRoYXQKKyAgOzsgYHRhZ3MtdGFibGUtY29tcHV0ZWQtbGlzdCcgbmVlZCBub3QgYmUgdGhlIHNhbWUgbGlzdCBhcyB3aGVuCisgIDs7IHRoZSBzZWFyY2ggd2FzIHN0YXJ0ZWQuKQorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgoYnVmZmVycyBlcmxhbmctdGFncy1idWZmZXItbGlzdCkpCisgICAgICAod2hpbGUgYnVmZmVycworCShpZiAoYnVmZmVyLW5hbWUgKGNhciBidWZmZXJzKSkKKwkgICAgKHByb2duCisJICAgICAgKHNldC1idWZmZXIgKGNhciBidWZmZXJzKSkKKwkgICAgICAoZXJsYW5nLXRhZ3MtcmVtb3ZlLWxvY2FsKSkpCisJKHNldHEgYnVmZmVycyAoY2RyIGJ1ZmZlcnMpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLXRhZ3MtcmVtb3ZlLWxvY2FsICgpCisgICJSZW1vdmUgb3VyIHRhZyBzZWFyY2ggZnVuY3Rpb25zIGZyb20gY3VycmVudCBidWZmZXIuIgorICAoaWYgKG51bGwgZXJsYW5nLXRhZ3MtYnVmZmVyLWluc3RhbGxlZC1wKQorICAgICAgKCkKKyAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpICdlcmxhbmctdGFncy1idWZmZXItaW5zdGFsbGVkLXAgbmlsKQorICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkKKwkgICAgICdmaW5kLXRhZy10YWctb3JkZXIgZXJsYW5nLXRhZ3Mtb3JpZy10YWctb3JkZXIpCisgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KQorCSAgICAgJ2ZpbmQtdGFnLXJlZ2V4cC10YWctb3JkZXIgZXJsYW5nLXRhZ3Mtb3JpZy1yZWdleHAtdGFnLW9yZGVyKQorICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkKKwkgICAgICdmaW5kLXRhZy1zZWFyY2gtZnVuY3Rpb24gZXJsYW5nLXRhZ3Mtb3JpZy1zZWFyY2gtZnVuY3Rpb24pCisgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KQorCSAgICAgJ2ZpbmQtdGFnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24KKwkgICAgIGVybGFuZy10YWdzLW9yaWctcmVnZXhwLXNlYXJjaC1mdW5jdGlvbikpKQorCisKKyhkZWZ1biBlcmxhbmctdGFncy1yZWNvZ25pemUtdGFncy10YWJsZSAoKQorICAiSW5zdGFsbCBvdXIgZnVuY3Rpb25zIGluIGFsbCBsb2FkZWQgVEFHUyBmaWxlcy4KKworVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBgdGFncy10YWJsZS1mb3JtYXQtaG9va3MnIHdoZW4gc2VhcmNoaW5nCitmb3IgYSB0YWcgb24gdGhlIGZvcm0gYG1vZHVsZTp0YWcnLiIKKyAgKGlmIChudWxsIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2V0YWdzLXJlY29nbml6ZS10YWdzLXRhYmxlKSkpCisgICAgICBuaWwKKyAgICAoZXJsYW5nLXRhZ3MtaW5zdGFsbC1sb2NhbCkKKyAgICB0KSkKKworCisoZGVmdW4gZXJsYW5nLXRhZ3Mtc2VhcmNoLWZvcndhcmQgKHRhZyAmb3B0aW9uYWwgYm91bmQgbm9lcnJvciBjb3VudCkKKyAgIkZvcndhcmQgc2VhcmNoIGZ1bmN0aW9uLCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlIHByZWZpeC4iCisgIChpZiAoc3RyaW5nLW1hdGNoICI6IiB0YWcpCisgICAgICAoc2V0cSB0YWcgKHN1YnN0cmluZyB0YWcgKG1hdGNoLWVuZCAwKSBuaWwpKSkKKyAgOzsgQXZvaWQgdW5pbnRlZGVkIHJlY3Vyc2lvbi4KKyAgKGlmIChlcSBlcmxhbmctdGFncy1vcmlnLXNlYXJjaC1mdW5jdGlvbiAnZXJsYW5nLXRhZ3Mtc2VhcmNoLWZvcndhcmQpCisgICAgICAoc2VhcmNoLWZvcndhcmQgdGFnIGJvdW5kIG5vZXJyb3IgY291bnQpCisgICAgKGZ1bmNhbGwgZXJsYW5nLXRhZ3Mtb3JpZy1zZWFyY2gtZnVuY3Rpb24gdGFnIGJvdW5kIG5vZXJyb3IgY291bnQpKSkKKworCisoZGVmdW4gZXJsYW5nLXRhZ3MtcmVnZXhwLXNlYXJjaC1mb3J3YXJkICh0YWcgJm9wdGlvbmFsIGJvdW5kIG5vZXJyb3IgY291bnQpCisgICJGb3J3YXJkIHJlZ2V4cCBzZWFyY2ggZnVuY3Rpb24sIGF3YXJlIG9mIEVybGFuZyBtb2R1bGUgcHJlZml4LiIKKyAgKGlmIChzdHJpbmctbWF0Y2ggIjoiIHRhZykKKyAgICAgIChzZXRxIHRhZyAoc3Vic3RyaW5nIHRhZyAobWF0Y2gtZW5kIDApIG5pbCkpKQorICAoaWYgKGVxIGVybGFuZy10YWdzLW9yaWctcmVnZXhwLXNlYXJjaC1mdW5jdGlvbgorCSAgJ2VybGFuZy10YWdzLXJlZ2V4cC1zZWFyY2gtZm9yd2FyZCkKKyAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCB0YWcgYm91bmQgbm9lcnJvciBjb3VudCkKKyAgICAoZnVuY2FsbCBlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24KKwkgICAgIHRhZyBib3VuZCBub2Vycm9yIGNvdW50KSkpCisKKworOzsgdCBpZiBwb2ludCBpcyBhdCBhIHRhZyBsaW5lIHRoYXQgbWF0Y2hlcyBUQUcsIGNvbnRhaW5pbmcKKzs7IG1vZHVsZSBpbmZvcm1hdGlvbi4gIEFzc3VtZXMgdGhhdCBhbGwgb3RoZXIgb3JkZXIgZnVuY3Rpb25zCis7OyBhcmUgc3RvcmVkIGluIGBlcmxhbmctdGFncy1vcmlnLVtyZWdleF0tdGFnLW9yZGVyJy4KKworKGRlZnVuIGVybGFuZy10YWctbWF0Y2gtbW9kdWxlLXAgKHRhZykKKyAgKGVybGFuZy10YWctbWF0Y2gtbW9kdWxlLWNvbW1vbi1wIHRhZyBlcmxhbmctdGFncy1vcmlnLXRhZy1vcmRlcikpCisKKyhkZWZ1biBlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1yZWdleHAtcCAodGFnKQorICAoZXJsYW5nLXRhZy1tYXRjaC1tb2R1bGUtY29tbW9uLXAgdGFnIGVybGFuZy10YWdzLW9yaWctcmVnZXhwLXRhZy1vcmRlcikpCisKKyhkZWZ1biBlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1jb21tb24tcCAodGFnIG9yZGVyKQorICAobGV0ICgobW9kIG5pbCkKKwkoZm91bmQgbmlsKSkKKyAgKGlmIChzdHJpbmctbWF0Y2ggIjoiIHRhZykKKyAgICAgIChwcm9nbgorCShzZXRxIG1vZCAoc3Vic3RyaW5nIHRhZyAwIChtYXRjaC1iZWdpbm5pbmcgMCkpKQorCShzZXRxIHRhZyAoc3Vic3RyaW5nIHRhZyAobWF0Y2gtZW5kIDApIG5pbCkpKSkKKyAgKHdoaWxlIChhbmQgb3JkZXIgKG5vdCBmb3VuZCkpCisgICAgKHNldHEgZm91bmQKKwkgIChhbmQgKG5vdCAobWVtcSAoY2FyIG9yZGVyKQorCQkJICAnKGVybGFuZy10YWctbWF0Y2gtbW9kdWxlLXAKKwkJCSAgICBlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1yZWdleHAtcCkpKQorCSAgICAgICAoZnVuY2FsbCAoY2FyIG9yZGVyKSB0YWcpKSkKKyAgICAoc2V0cSBvcmRlciAoY2RyIG9yZGVyKSkpCisgIChhbmQgZm91bmQKKyAgICAgICAob3IgKG51bGwgbW9kKQorCSAgIChzdHJpbmc9IG1vZCAoZXJsYW5nLWdldC1tb2R1bGUtZnJvbS1maWxlLW5hbWUKKwkJCSAoZmlsZS1vZi10YWcpKSkpKSkpCisKKwwKKzs7OyBUYWdzIGNvbXBsZXRpb24sIEVtYWNzIDE5IGBldGFncycgc3BlY2lmaWMuCis7OzsKKzs7OyBUaGUgYmFzaWMgaWRlYSBpcyB0byBjcmVhdGUgYSBzZWNvbmQgY29tcGxldGlvbiB0YWJsZSBgZXJsYW5nLXRhZ3MtCis7OzsgY29tcGxldGlvbi10YWJsZScgY29udGFpbmluZyBhbGwgbm9ybWFsIHRhZ3MgcGx1cyB0YWdzIG9uIHRoZSBmb3JtCis7OzsgYG1vZHVsZTp0YWcnLgorCisKKyhkZWZ1biBlcmxhbmctY29tcGxldGUtdGFnICgpCisgICJQZXJmb3JtIHRhZ3MgY29tcGxldGlvbiBvbiB0aGUgdGV4dCBhcm91bmQgcG9pbnQuCitDb21wbGV0ZXMgdG8gdGhlIHNldCBvZiBuYW1lcyBsaXN0ZWQgaW4gdGhlIGN1cnJlbnQgdGFncyB0YWJsZS4KKworU2hvdWxkIHRoZSBFcmxhbmcgdGFncyBzeXN0ZW0gYmUgaW5zdGFsbGVkIHRoaXMgY29tbWFuZCBrbm93cworYWJvdXQgRXJsYW5nIG1vZHVsZXMuIgorICAoaW50ZXJhY3RpdmUpCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChyZXF1aXJlICdldGFncykKKyAgICAoZXJyb3IgbmlsKSkKKyAgKGNvbmQgKChhbmQgZXJsYW5nLXRhZ3MtaW5zdGFsbGVkCisJICAgICAgKGZib3VuZHAgJ2NvbXBsZXRlLXRhZykpCTsgRW1hY3MgMTkKKwkgKGxldCAoKG9yaWctdGFncy1jb21wbGV0ZS10YWcgKHN5bWJvbC1mdW5jdGlvbiAndGFncy1jb21wbGV0ZS10YWcpKSkKKwkgICAoZnNldCAndGFncy1jb21wbGV0ZS10YWcKKwkJIChzeW1ib2wtZnVuY3Rpb24gJ2VybGFuZy10YWdzLWNvbXBsZXRlLXRhZykpCisJICAgKHVud2luZC1wcm90ZWN0CisJICAgICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2NvbXBsZXRlLXRhZykpCisJICAgICAoZnNldCAndGFncy1jb21wbGV0ZS10YWcgb3JpZy10YWdzLWNvbXBsZXRlLXRhZykpKSkKKwkoKGZib3VuZHAgJ2NvbXBsZXRlLXRhZykJOyBFbWFjcyAxOQorCSAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdjb21wbGV0ZS10YWcpKSkKKwkoKGZib3VuZHAgJ3RhZy1jb21wbGV0ZS1zeW1ib2wpCTsgWEVtYWNzCisJIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3RhZy1jb21wbGV0ZS1zeW1ib2wpKSkKKwkodAorCSAoZXJyb3IgIlRoaXMgdmVyc2lvbiBvZiBFbWFjcyBjYW4ndCBjb21wbGV0ZSB0YWdzLiIpKSkpCisKKworOzsgQmFzZWQgb24gYHRhZ3MtY29tcGxldGUtdGFnJywgYnV0IHRoaXMgb25lIHVzZXMKKzs7IGBlcmxhbmctdGFnLWNvbXBsZXRpb24tdGFibGUnIGluc3RlYWQgb2YgYHRhZy1jb21wbGV0aW9uLXRhYmxlJy4KKzs7Cis7OyBUaGlzIGlzIHRoZSBlbnRyeS1wb2ludCBjYWxsZWQgYnkgc3lzdGVtIGZ1bmN0aW9uIGBjb21wbGV0aW5nLXJlYWQnLgorKGRlZnVuIGVybGFuZy10YWdzLWNvbXBsZXRlLXRhZyAoc3RyaW5nIHByZWRpY2F0ZSB3aGF0KQorICAoc2F2ZS1leGN1cnNpb24KKyAgICA7OyBJZiB3ZSBuZWVkIHRvIGFzayBmb3IgdGhlIHRhZyB0YWJsZSwgYWxsb3cgdGhhdC4KKyAgICAobGV0ICgoZW5hYmxlLXJlY3Vyc2l2ZS1taW5pYnVmZmVycyB0KSkKKyAgICAgICh2aXNpdC10YWdzLXRhYmxlLWJ1ZmZlcikpCisgICAgKGlmIChlcSB3aGF0IHQpCisJKGFsbC1jb21wbGV0aW9ucyBzdHJpbmcgKGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUpIHByZWRpY2F0ZSkKKyAgICAgICh0cnktY29tcGxldGlvbiBzdHJpbmcgKGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUpIHByZWRpY2F0ZSkpKSkKKworCis7OyBgdGFncy1jb21wbGV0aW9uLXRhYmxlJyBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHksIG1ha2UgaXQKKzs7IGNhbGwgb3VyIG93biB3ZWRnZSBpbnN0ZWFkLiAgTm90ZSB0aGF0IHRoZSByZWN1cnNpdmUgY2FsbAorOzsgaXMgdmVyeSByYXJlOyAgaXQgb25seSBvY2N1cnMgd2hlbiBhIHRhZ3MtZmlsZSBjb250YWlucworOzsgYGluY2x1ZGUnLXN0YXRlbWVudHMuCisoZGVmdW4gZXJsYW5nLXRhZ3MtY29tcGxldGlvbi10YWJsZSAoKQorICAiQnVpbGQgY29tcGxldGlvbiB0YWJsZS4gIFRhZ3Mgb24gdGhlIGZvcm0gYHRhZycgb3IgYG1vZHVsZTp0YWcnLiIKKyAgKHNldHEgZXJsYW5nLXRhZ3Mtb3JpZy1jb21wbGV0aW9uLXRhYmxlCisJKHN5bWJvbC1mdW5jdGlvbiAndGFncy1jb21wbGV0aW9uLXRhYmxlKSkKKyAgKGZzZXQgJ3RhZ3MtY29tcGxldGlvbi10YWJsZQorCShzeW1ib2wtZnVuY3Rpb24gJ2VybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUtMSkpCisgICh1bndpbmQtcHJvdGVjdAorICAgICAgKGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUtMSkKKyAgICAoZnNldCAndGFncy1jb21wbGV0aW9uLXRhYmxlCisJICBlcmxhbmctdGFncy1vcmlnLWNvbXBsZXRpb24tdGFibGUpKSkKKworCisoZGVmdW4gZXJsYW5nLXRhZ3MtY29tcGxldGlvbi10YWJsZS0xICgpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdlcmxhbmctdGFncy1jb21wbGV0aW9uLXRhYmxlKQorICAob3IgZXJsYW5nLXRhZ3MtY29tcGxldGlvbi10YWJsZQorICAgICAgKGxldCAoKHRhZ3MtY29tcGxldGlvbi10YWJsZSBuaWwpCisJICAgICh0YWdzLWNvbXBsZXRpb24tdGFibGUtZnVuY3Rpb24KKwkgICAgICdlcmxhbmctZXRhZ3MtdGFncy1jb21wbGV0aW9uLXRhYmxlKSkKKwkoZnVuY2FsbCBlcmxhbmctdGFncy1vcmlnLWNvbXBsZXRpb24tdGFibGUpCisJKHNldHEgZXJsYW5nLXRhZ3MtY29tcGxldGlvbi10YWJsZSB0YWdzLWNvbXBsZXRpb24tdGFibGUpKSkpCisKKworOzsgQmFzZWQgb24gYGV0YWdzLXRhZ3MtY29tcGxldGlvbi10YWJsZScuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHdlCis7OyBhZGRzIHRocmVlIHN5bWJvbHMgdG8gdGhlIHZlY3RvciwgdGhlIHRhZywgbW9kdWxlOiBhbmQgbW9kdWxlOnRhZy4KKzs7IFRoZSBtb2R1bGUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGZpbGUgbmFtZSBvZiBhIHRhZy4gIChUaGlzIG9uZQorOzsgb25seSB3b3JrcyBpZiB3ZSBhcmUgbG9va2luZyBhdCBhbiBgZXRhZ3MnIGZpbGUuIEhvd2V2ZXIsIHRoaXMgaXMKKzs7IHRoZSBvbmx5IGZvcm1hdCBzdXBwb3J0ZWQgYnkgRW1hY3MsIHNvIGZhci4pCisoZGVmdW4gZXJsYW5nLWV0YWdzLXRhZ3MtY29tcGxldGlvbi10YWJsZSAoKQorICAobGV0ICgodGFibGUgKG1ha2UtdmVjdG9yIDUxMSAwKSkKKwkoZmlsZSBuaWwpKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgIDs7IFRoaXMgbW9uc3RlciByZWdleHAgbWF0Y2hlcyBhbiBldGFncyB0YWcgbGluZS4KKyAgICAgIDs7ICAgXDEgaXMgdGhlIHN0cmluZyB0byBtYXRjaDsKKyAgICAgIDs7ICAgXDIgaXMgbm90IGludGVyZXN0aW5nOworICAgICAgOzsgICBcMyBpcyB0aGUgZ3Vlc3NlZCB0YWcgbmFtZTsgWFhYIGd1ZXNzIHNob3VsZCBiZSBiZXR0ZXIgZWcgREVGVU4KKyAgICAgIDs7ICAgXDQgaXMgbm90IGludGVyZXN0aW5nOworICAgICAgOzsgICBcNSBpcyB0aGUgZXhwbGljaXRseS1zcGVjaWZpZWQgdGFnIG5hbWUuCisgICAgICA7OyAgIFw2IGlzIHRoZSBsaW5lIHRvIHN0YXJ0IHNlYXJjaGluZyBhdDsKKyAgICAgIDs7ICAgXDcgaXMgdGhlIGNoYXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0LgorICAgICAgKHdoaWxlIChwcm9nbgorCSAgICAgICAod2hpbGUgKGFuZAorCQkgICAgICAgKGVxIChmb2xsb3dpbmctY2hhcikgP1xmKQorCQkgICAgICAgKGxvb2tpbmctYXQgIlxmXG5cXChbXixcbl0qXFwpLC4qXG4iKSkKKwkJIChzZXRxIGZpbGUgKGJ1ZmZlci1zdWJzdHJpbmcKKwkJCSAgICAgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkKKwkJIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkpCisJICAgICAgIChyZS1zZWFyY2gtZm9yd2FyZAorCQkiXAorXlxcKFxcKFteXDE3N10rW14tYS16QS1aMC05XyRcMTc3XStcXCk/XFwoWy1hLXpBLVowLTlfJD86XStcXClcCitcW14tYS16QS1aMC05XyQ/OlwxNzddKlxcKVwxNzdcXChcXChbXlxuXDAwMV0rXFwpXDAwMVxcKT9cCitcXChbMC05XStcXCk/LFxcKFswLTldK1xcKT9cbiIKKwkJbmlsIHQpKQorCShsZXQgKCh0YWcgKGlmIChtYXRjaC1iZWdpbm5pbmcgNSkKKwkJICAgICAgIDs7IFRoZXJlIGlzIGFuIGV4cGxpY2l0IHRhZyBuYW1lLgorCQkgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyA1KSAobWF0Y2gtZW5kIDUpKQorCQkgICAgIDs7IE5vIGV4cGxpY2l0IHRhZyBuYW1lLiAgQmVzdCBndWVzcy4KKwkJICAgICAoYnVmZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDMpIChtYXRjaC1lbmQgMykpKSkKKwkgICAgICAobW9kdWxlIChhbmQgZmlsZQorCQkJICAgKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lIGZpbGUpKSkpCisJICAoaW50ZXJuIHRhZyB0YWJsZSkKKwkgIChpZiAoc3RyaW5ncCBtb2R1bGUpCisJICAgICAgKHByb2duCisJCShpbnRlcm4gKGNvbmNhdCBtb2R1bGUgIjoiIHRhZykgdGFibGUpCisJCTs7IE9ubHkgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgdGFibGUuCisJCShpbnRlcm4gKGNvbmNhdCBtb2R1bGUgIjoiKSB0YWJsZSkpKSkpKQorICAgIHRhYmxlKSkKKwwKKzs7OworOzs7IFByZXBhcmUgZm9yIG90aGVyIG1ldGhvZHMgdG8gcnVuIGFuIEVybGFuZyBzbGF2ZSBwcm9jZXNzLgorOzs7CisKKyhkZWZ2YXIgZXJsYW5nLXNoZWxsLWZ1bmN0aW9uICdpbmZlcmlvci1lcmxhbmcKKyAgIkNvbW1hbmQgdG8gZXhlY3V0ZSBzdGFydCBhIG5ldyBFcmxhbmcgc2hlbGwuCisKK0NoYW5nZSB0aGlzIHZhcmlhYmxlIHRvIHVzZSB5b3VyIGZhdm9yaXRlCitFcmxhbmcgY29tcGlsYXRpb24gcGFja2FnZS4iKQorCisoZGVmdmFyIGVybGFuZy1zaGVsbC1kaXNwbGF5LWZ1bmN0aW9uICdpbmZlcmlvci1lcmxhbmctcnVuLW9yLXNlbGVjdAorICAiQ29tbWFuZCB0byBleGVjdXRlIHRvIGRpc3BsYXkgRXJsYW5nIHNoZWxsLgorCitDaGFuZ2UgdGhpcyB2YXJpYWJsZSB0byB1c2UgeW91ciBmYXZvcml0ZQorRXJsYW5nIGNvbXBpbGF0aW9uIHBhY2thZ2UuIikKKworKGRlZnZhciBlcmxhbmctY29tcGlsZS1mdW5jdGlvbiAnaW5mZXJpb3ItZXJsYW5nLWNvbXBpbGUKKyAgIkNvbW1hbmQgdG8gZXhlY3V0ZSB0byBjb21waWxlIGN1cnJlbnQgYnVmZmVyLgorCitDaGFuZ2UgdGhpcyB2YXJpYWJsZSB0byB1c2UgeW91ciBmYXZvcml0ZQorRXJsYW5nIGNvbXBpbGF0aW9uIHBhY2thZ2UuIikKKworKGRlZnZhciBlcmxhbmctY29tcGlsZS1kaXNwbGF5LWZ1bmN0aW9uICdpbmZlcmlvci1lcmxhbmctcnVuLW9yLXNlbGVjdAorICAiQ29tbWFuZCB0byBleGVjdXRlIHRvIHZpZXcgbGFzdCBjb21waWxhdGlvbi4KKworQ2hhbmdlIHRoaXMgdmFyaWFibGUgdG8gdXNlIHlvdXIgZmF2b3JpdGUKK0VybGFuZyBjb21waWxhdGlvbiBwYWNrYWdlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW5leHQtZXJyb3ItZnVuY3Rpb24gJ2luZmVyaW9yLWVybGFuZy1uZXh0LWVycm9yCisgICJDb21tYW5kIHRvIGV4ZWN1dGUgdG8gZ28gdG8gdGhlIG5leHQgZXJyb3IuCisKK0NoYW5nZSB0aGlzIHZhcmlhYmxlIHRvIHVzZSB5b3VyIGZhdm9yaXRlCitFcmxhbmcgY29tcGlsYXRpb24gcGFja2FnZS4iKQorCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gZXJsYW5nLXNoZWxsICgpCisgICJTdGFydCBhIG5ldyBFcmxhbmcgc2hlbGwuCisKK1RoZSB2YXJpYWJsZSBgZXJsYW5nLXNoZWxsLWZ1bmN0aW9uJyBkZWNpZGVzIHdoaWNoIG1ldGhvZCB0byB1c2UsCitkZWZhdWx0IGlzIHRvIHN0YXJ0IGEgbmV3IEVybGFuZyBob3N0LiAgSXQgaXMgcG9zc2libGUgdGhhdCwgaW4gdGhlCitmdXR1cmUsIGEgbmV3IHNoZWxsIG9uIGFuIGFscmVhZHkgcnVubmluZyBob3N0IHdpbGwgYmUgc3RhcnRlZC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGNhbGwtaW50ZXJhY3RpdmVseSBlcmxhbmctc2hlbGwtZnVuY3Rpb24pKQorCisKKzs7OyMjI2F1dG9sb2FkIChhdXRvbG9hZCAncnVuLWVybGFuZyAiZXJsYW5nIiAiU3RhcnQgYSBuZXcgRXJsYW5nIHNoZWxsLiIgdCkKKworOzsgSXQgaXMgY3VzdG9tYXJ5IGZvciBFbWFjcyBwYWNrYWdlcyB0byBzdXBwbHkgYSBmdW5jdGlvbiBvbiB0aGlzCis7OyBmb3JtLCBldmVuIHRob3VnaCBpdCB2aW9sYXRlcyB0aGUgYGVybGFuZy0qJyBuYW1lIGNvbnZlbnRpb24uCisoZnNldCAncnVuLWVybGFuZyAnZXJsYW5nLXNoZWxsKQorCisKKyhkZWZ1biBlcmxhbmctc2hlbGwtZGlzcGxheSAoKQorICAiRGlzcGxheSBhbiBFcmxhbmcgc2hlbGwsIG9yIHN0YXJ0IGEgbmV3LiIKKyAgKGludGVyYWN0aXZlKQorICAoY2FsbC1pbnRlcmFjdGl2ZWx5IGVybGFuZy1zaGVsbC1kaXNwbGF5LWZ1bmN0aW9uKSkKKworCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIGVybGFuZy1jb21waWxlICgpCisgICJDb21waWxlIEVybGFuZyBtb2R1bGUgaW4gY3VycmVudCBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgIChjYWxsLWludGVyYWN0aXZlbHkgZXJsYW5nLWNvbXBpbGUtZnVuY3Rpb24pKQorCisKKyhkZWZ1biBlcmxhbmctY29tcGlsZS1kaXNwbGF5ICgpCisgICJEaXNwbGF5IGNvbXBpbGF0aW9uIG91dHB1dC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGNhbGwtaW50ZXJhY3RpdmVseSBlcmxhbmctY29tcGlsZS1kaXNwbGF5LWZ1bmN0aW9uKSkKKworCisoZGVmdW4gZXJsYW5nLW5leHQtZXJyb3IgKCkKKyAgIkRpc3BsYXkgbmV4dCBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGxhdGVzdCBjb21waWxhdGlvbi4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGNhbGwtaW50ZXJhY3RpdmVseSBlcmxhbmctbmV4dC1lcnJvci1mdW5jdGlvbikpCisKKworDAorOzs7Cis7OzsgRXJsYW5nIFNoZWxsIE1vZGUgLS0gTWFqb3IgbW9kZSB1c2VkIGZvciBFcmxhbmcgc2hlbGxzLgorOzs7CisKKzs7IFRoaXMgbW9kZSBpcyBkZXNpZ25lZCB0byBiZSBpbXBsZW1lbnRhdGlvbiBpbmRlcGVuZGVudCwKKzs7IGUuZy4gaXQgZG9lcyBub3QgYXNzdW1lIHRoYXQgd2UgYXJlIHJ1bm5pbmcgYW4gaW5mZXJpb3IKKzs7IEVybGFuZywgdGhlcmUgZXhpc3RzIGEgbG90IG9mIG90aGVyIHBvc3NpYmlsaXRpZXMuCisKKworKGRlZnZhciBlcmxhbmctc2hlbGwtYnVmZmVyLW5hbWUgIiplcmxhbmcqIgorICAiKlRoZSBuYW1lIG9mIHRoZSBFcmxhbmcgbGluayBzaGVsbCBidWZmZXIuIikKKworCisoZGVmdmFyIGVybGFuZy1zaGVsbC1tb2RlLW1hcCBuaWwKKyAgIipLZXltYXAgdXNlZCBieSBFcmxhbmcgc2hlbGxzLiIpCisKKworKGRlZnZhciBlcmxhbmctc2hlbGwtbW9kZS1ob29rIG5pbAorICAiKlVzZXIgZnVuY3Rpb25zIHRvIHJ1biB3aGVuIGFuIEVybGFuZyBzaGVsbCBpcyBzdGFydGVkLgorCitUaGlzIGhvb2sgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBFcmxhbmcgbW9kZS4gIEl0IGlzCitub3JtYWxseSB1c2VkIGJ5IHRoZSB1c2VyIHRvIHBlcnNvbmFsaXNlIHRoZSBwcm9ncmFtbWluZyBlbnZpcm9ubWVudC4KK1doZW4gdXNlZCBpbiBhIHNpdGUgaW5pdCBmaWxlLCBpdCBjb3VsZCBiZSB1c2VkIHRvIGN1c3RvbWlzZSBFcmxhbmcKK21vZGUgZm9yIGFsbCB1c2VycyBvbiB0aGUgc3lzdGVtLgorCitUaGUgZnVuY3Rpb25lZCBhZGRlZCB0byB0aGlzIGhvb2sgaXMgcnVuZWQgZXZlcnkgdGltZSBhIG5ldyBFcmxhbmcKK3NoZWxsIGlzIHN0YXJ0ZWQuCisKK1NlZSBhbHNvIGBlcmxhbmctbG9hZC1ob29rJywgYSBob29rIHdoaWNoIGlzIHJ1bmVkIG9uY2UsIHdoZW4gRXJsYW5nCittb2RlIGlzIGxvYWRlZCwgYW5kIGBlcmxhbmctbW9kZS1ob29rJyB3aGljaCBpcyBydW5lZCBldmVyeSB0aW1lIGEgbmV3CitFcmxhbmcgc291cmNlIGZpbGUgaXMgbG9hZGVkIGludG8gRW1hY3MuIikKKworCisoZGVmdmFyIGVybGFuZy1pbnB1dC1yaW5nLWZpbGUtbmFtZSAifi8uZXJsYW5nX2hpc3RvcnkiCisgICIqV2hlbiBub24tbmlsLCBmaWxlIG5hbWUgdXNlZCB0byBzdG9yZSBlcmxhbmcgc2hlbGwgaGlzdG9yeSBpbmZvcm1hdGlvbi4iKQorCisKKyhkZWZ1biBlcmxhbmctc2hlbGwtbW9kZSAoKQorICAiTWFqb3IgbW9kZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbiBFcmxhbmcgc2hlbGwuCisKK1dlIGFzc3VtZSB0aGF0IHdlIGFscmVhZHkgYXJlIGluIGNvbWludC1tb2RlLgorCitUaGUgZm9sbG93aW5nIHNwZWNpYWwgY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKK1xce2VybGFuZy1zaGVsbC1tb2RlLW1hcH0iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHNldHEgbWFqb3ItbW9kZSAnZXJsYW5nLXNoZWxsLW1vZGUpCisgIChzZXRxIG1vZGUtbmFtZSAiRXJsYW5nIFNoZWxsIikKKyAgKGVybGFuZy1tb2RlLXZhcmlhYmxlcykKKyAgKGlmIGVybGFuZy1zaGVsbC1tb2RlLW1hcAorICAgICAgbmlsCisgICAgKHNldHEgZXJsYW5nLXNoZWxsLW1vZGUtbWFwIChjb3B5LWtleW1hcCBjb21pbnQtbW9kZS1tYXApKQorICAgIChlcmxhbmctc2hlbGwtbW9kZS1jb21tYW5kcyBlcmxhbmctc2hlbGwtbW9kZS1tYXApKQorICAodXNlLWxvY2FsLW1hcCBlcmxhbmctc2hlbGwtbW9kZS1tYXApCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbXBpbGF0aW9uLXBhcnNpbmctZW5kKSAxKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21waWxhdGlvbi1lcnJvci1saXN0KSBuaWwpCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbXBpbGF0aW9uLW9sZC1lcnJvci1saXN0KSBuaWwpCisgIDs7IE5lZWRlZCB3aGVuIGNvbXBpbGluZyBkaXJlY3RseSBmcm9tIHRoZSBFcmxhbmcgc2hlbGwuCisgIChzZXRxIGNvbXBpbGF0aW9uLWxhc3QtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCisgIChlcmxhbmctYWRkLWNvbXBpbGF0aW9uLWFsaXN0IGVybGFuZy1lcnJvci1yZWdleHAtYWxpc3QpCisgIChzZXRxIGNvbWludC1wcm9tcHQtcmVnZXhwICJeW14+PV0qPiAqIikKKyAgKHNldHEgY29taW50LWVvbC1vbi1zZW5kIHQpCisgIChzZXRxIGNvbWludC1pbnB1dC1pZ25vcmVkdXBzIHQpCisgIChzZXRxIGNvbWludC1zY3JvbGwtc2hvdy1tYXhpbXVtLW91dHB1dCB0KQorICAoc2V0cSBjb21pbnQtc2Nyb2xsLXRvLWJvdHRvbS1vbi1vdXRwdXQgdCkKKyAgOzsgSW4gRW1hY3MgMTkuMzAsIGBhZGQtaG9vaycgaGFzIGdvdCBhIGBsb2NhbCcgZmxhZywgdXNlIGl0LiAgSWYKKyAgOzsgdGhlIGNhbGwgZmFpbHMsIGp1c3QgY2FsbCB0aGUgbm9ybWFsIGBhZGQtaG9vaycuCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChwcm9nbgorCShmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2FkZC1ob29rKSAnY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zCisJCSAgJ2luZmVyaW9yLWVybGFuZy1zdHJpcC1kZWxldGUgbmlsIHQpCisJKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnYWRkLWhvb2spICdjb21pbnQtb3V0cHV0LWZpbHRlci1mdW5jdGlvbnMKKwkJICAnaW5mZXJpb3ItZXJsYW5nLXN0cmlwLWN0cmwtbSBuaWwgdCkpCisgICAgKGVycm9yCisgICAgIChhZGQtaG9vayAnY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zICdpbmZlcmlvci1lcmxhbmctc3RyaXAtZGVsZXRlKQorICAgICAoYWRkLWhvb2sgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucyAnaW5mZXJpb3ItZXJsYW5nLXN0cmlwLWN0cmwtbSkpKQorICA7OyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIGNvbWludCBkb2Vzbid0IGhhdmUgYW4gaW5wdXQgcmluZy4KKyAgKGlmIChmYm91bmRwICdjb21pbnQtcmVhZC1pbnB1dC1yaW5nKQorICAgICAgKHByb2duCisJKHNldHEgY29taW50LWlucHV0LXJpbmctZmlsZS1uYW1lIGVybGFuZy1pbnB1dC1yaW5nLWZpbGUtbmFtZSkKKwkoY29taW50LXJlYWQtaW5wdXQtcmluZyB0KQorCShtYWtlLWxvY2FsLXZhcmlhYmxlICdraWxsLWJ1ZmZlci1ob29rKQorCShhZGQtaG9vayAna2lsbC1idWZmZXItaG9vayAnY29taW50LXdyaXRlLWlucHV0LXJpbmcpKSkKKyAgKHJ1bi1ob29rcyAnZXJsYW5nLXNoZWxsLW1vZGUtaG9vaykpCisKKworKGRlZnVuIGVybGFuZy1zaGVsbC1tb2RlLWNvbW1hbmRzIChtYXApCisgIChkZWZpbmUta2V5IG1hcCAiXE0tXHQiICAgICdlcmxhbmctY29tcGxldGUtdGFnKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWEiICAgICAnY29taW50LWJvbCkgOyBOb3JtYWxseSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtYSIgJ2JlZ2lubmluZy1vZi1saW5lKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWQiICAgICBuaWwpCTsgV2FzIGBjb21pbnQtZGVsY2hhci1vci1tYXliZS1lb2YnCisgIChkZWZpbmUta2V5IG1hcCAiXEMteGAiICAgICdlcmxhbmctbmV4dC1lcnJvcikpCisMCis7OzsKKzs7OyBJbmZlcmlvciBFcmxhbmcgLS0gUnVuIGFuIEVybGFuZyBzaGVsbCBhcyBhIHN1YnByb2Nlc3MuCis7OzsKKworKGRlZnZhciBpbmZlcmlvci1lcmxhbmctZGlzcGxheS1idWZmZXItYW55LWZyYW1lIG5pbAorICAiKldoZW4gbmlsLCBgaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyJyB1c2Ugb25seSBzZWxlY3RlZCBmcmFtZS4KK1doZW4gdCwgYWxsIGZyYW1lcyBhcmUgc2VhcmNoZWQuICBXaGVuICdyYWlzZSwgdGhlIGZyYW1lIGlzIHJhaXNlZC4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1zaGVsbC10eXBlICduZXdzaGVsbAorICAiVGhlIHR5cGUgb2YgRXJsYW5nIHNoZWxsIHRvIHVzZS4KKworV2hlbiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgYXRvbSBgb2xkc2hlbGwnLCB0aGUgb2xkIHNoZWxsIGlzIHVzZWQuCitXaGVuIHNldCB0byBgbmV3c2hlbGwnIHRoZSBuZXcgc2hlbGwgaXMgdXNlZC4gIFNob3VsZCB0aGUgdmFyaWFibGUgYmUKK25pbCwgdGhlIGRlZmF1bHQgc2hlbGwgaXMgdXNlZC4KKworVGhpcyB2YXJpYWJsZSBpbmZsdWVuY2UgdGhlIHNldHRpbmcgb2Ygb3RoZXIgdmFyaWFibGVzLiIpCisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLW1hY2hpbmUgImVybCIKKyAgIipUaGUgbmFtZSBvZiB0aGUgRXJsYW5nIHNoZWxsLiIpCisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLW1hY2hpbmUtb3B0aW9ucyAnKCkKKyAgIipUaGUgb3B0aW9ucyB1c2VkIHdoZW4gYWN0aXZhdGluZyB0aGUgRXJsYW5nIHNoZWxsLgorCitUaGlzIG11c3QgYmUgYSBsaXN0IG9mIHN0cmluZ3MuIikKKworKGRlZnZhciBpbmZlcmlvci1lcmxhbmctcHJvY2Vzcy1uYW1lICJpbmZlcmlvci1lcmxhbmciCisgICIqVGhlIG5hbWUgb2YgdGhlIGluZmVyaW9yIEVybGFuZyBwcm9jZXNzLiIpCisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlci1uYW1lIGVybGFuZy1zaGVsbC1idWZmZXItbmFtZQorICAiKlRoZSBuYW1lIG9mIHRoZSBpbmZlcmlvciBlcmxhbmcgYnVmZmVyLiIpCisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLXByb21wdC10aW1lb3V0IDYwCisgICIqTnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGBpbmZlcmlvci1lcmxhbmctd2FpdC1wcm9tcHQnIHRpbWVvdXRzLgorCitUaGUgdGltZSBzcGVjaWZpZWQgaXMgd2FpdGVkIGFmdGVyIGV2ZXJ5IG91dHB1dCBtYWRlIGJ5IHRoZSBpbmZlcmlvcgorRXJsYW5nIHNoZWxsLiAgV2hlbiB0aGlzIHZhcmlhYmxlIGlzIHQsIHdlIGFzc3VtZSB0aGF0IHdlIGFsd2F5cyBoYXZlCithIHByb21wdC4gIFdoZW4gbmlsLCB3ZSB3aWxsIHdhaXQgZm9yZXZlciwgb3IgdW50aWwgQy1nLiIpCisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLXByb2Nlc3MgbmlsCisgICJQcm9jZXNzIG9mIGxhc3QgaW52b2tlZCBpbmZlcmlvciBFcmxhbmcsIG9yIG5pbC4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1idWZmZXIgbmlsCisgICJCdWZmZXIgb2YgbGFzdCBpbnZva2VkIGluZmVyaW9yIEVybGFuZywgb3IgbmlsLiIpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nICgpCisgICJSdW4gYW4gaW5mZXJpb3IgRXJsYW5nLgorCitUaGlzIGlzIGp1c3QgbGlrZSBydW5uaW5nIEVybGFuZyBpbiBhIG5vcm1hbCBzaGVsbCwgZXhjZXB0IHRoYXQKK2FuIEVtYWNzIGJ1ZmZlciBpcyB1c2VkIGZvciBpbnB1dCBhbmQgb3V0cHV0LgorCitUaGUgY29tbWFuZCBsaW5lIGhpc3RvcnkgY2FuIGJlIGFjY2Vzc2VkIHdpdGggIE0tcCAgYW5kICBNLW4uCitUaGUgaGlzdG9yeSBpcyBzYXZlZCBiZXR3ZWVuIHNlc3Npb25zLgorCitFbnRyeSB0byB0aGlzIG1vZGUgY2FsbHMgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgdmFyaWFibGVzCitgY29taW50LW1vZGUtaG9vaycgYW5kIGBlcmxhbmctc2hlbGwtbW9kZS1ob29rJyB3aXRoIG5vIGFyZ3VtZW50cy4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbWl0YXRlIHRoZSB1c3VhbCBVbml4IGludGVycnVwdCBhbmQKK2VkaXRpbmcgY29udHJvbCBjaGFyYWN0ZXJzOgorXFx7ZXJsYW5nLXNoZWxsLW1vZGUtbWFwfSIKKyAgKGludGVyYWN0aXZlKQorICAocmVxdWlyZSAnY29taW50KQorICAobGV0ICgob3B0cyBpbmZlcmlvci1lcmxhbmctbWFjaGluZS1vcHRpb25zKSkKKyAgICAoY29uZCAoKGVxIGluZmVyaW9yLWVybGFuZy1zaGVsbC10eXBlICdvbGRzaGVsbCkKKwkgICAoc2V0cSBvcHRzIChjb25zICItb2xkc2hlbGwiIG9wdHMpKSkKKwkgICgoZXEgaW5mZXJpb3ItZXJsYW5nLXNoZWxsLXR5cGUgJ25ld3NoZWxsKQorCSAgIChzZXRxIG9wdHMgKGFwcGVuZCAnKCItbmV3c2hlbGwiICItZW52IiAiVEVSTSIgInZ0MTAwIikgb3B0cykpKSkKKyAgICAoc2V0cSBpbmZlcmlvci1lcmxhbmctYnVmZmVyCisJICAoYXBwbHkgJ21ha2UtY29taW50CisJCSBpbmZlcmlvci1lcmxhbmctcHJvY2Vzcy1uYW1lIGluZmVyaW9yLWVybGFuZy1tYWNoaW5lCisJICAgICAgIG5pbCBvcHRzKSkpCisgIChzZXRxIGluZmVyaW9yLWVybGFuZy1wcm9jZXNzCisJKGdldC1idWZmZXItcHJvY2VzcyBpbmZlcmlvci1lcmxhbmctYnVmZmVyKSkKKyAgKHByb2Nlc3Mta2lsbC13aXRob3V0LXF1ZXJ5IGluZmVyaW9yLWVybGFuZy1wcm9jZXNzKQorICAoc3dpdGNoLXRvLWJ1ZmZlciBpbmZlcmlvci1lcmxhbmctYnVmZmVyKQorICAoaWYgKGFuZCAobm90IChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkpCisJICAgKGVxIGluZmVyaW9yLWVybGFuZy1zaGVsbC10eXBlICduZXdzaGVsbCkpCisgICAgICAoc2V0cSBjb21pbnQtcHJvY2Vzcy1lY2hvZXMgdCkpCisgIDs7IGByZW5hbWUtYnVmZmVyJyB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudCBpbiBFbWFjcyAxOC4KKyAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAgKHJlbmFtZS1idWZmZXIgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlci1uYW1lIHQpCisgICAgKGVycm9yIChyZW5hbWUtYnVmZmVyIGluZmVyaW9yLWVybGFuZy1idWZmZXItbmFtZSkpKQorICAoZXJsYW5nLXNoZWxsLW1vZGUpKQorCisKKyhkZWZ1biBpbmZlcmlvci1lcmxhbmctcnVuLW9yLXNlbGVjdCAoKQorICAiU3dpdGNoIHRvIGFuIGluZmVyaW9yIEVybGFuZyBidWZmZXIsIHBvc3NpYmx5IHN0YXJ0aW5nIG5ldyBwcm9jZXNzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKG51bGwgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApKQorICAgICAgKGluZmVyaW9yLWVybGFuZykKKyAgICAoaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyIHQpKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyICgmb3B0aW9uYWwgc2VsZWN0KQorICAiTWFrZSB0aGUgaW5mZXJpb3IgRXJsYW5nIHByb2Nlc3MgdmlzaWJsZS4KK1RoZSB3aW5kb3cgaXMgcmV0dXJuZWQuCisKK1Nob3VsZCBgaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyLWFueS1mcmFtZScgYmUgbmlsIHRoZSBidWZmZXIgaXMKK2Rpc3BsYXllZCBpbiB0aGUgY3VycmVudCBmcmFtZS4gIFNob3VsZCBpdCBiZSBub24tbmlsLCBhbmQgdGhlIGJ1ZmZlcgorYWxyZWFkeSBpcyB2aXNpYmxlIGluIGFueSBvdGhlciBmcmFtZSwgbm8gbmV3IHdpbmRvdyB3aWxsIGJlIGNyZWF0ZWQuCitTaG91bGQgaXQgYmUgdGhlIGF0b20gJ3JhaXNlLCB0aGUgZnJhbWUgY29udGFpbmluZyB0aGUgd2luZG93IHdpbGwKK2JlIHJhaXNlZC4KKworU2hvdWxkIHRoZSBvcHRpb25hbCBhcmd1bWVudCBTRUxFQ1QgYmUgbm9uLW5pbCwgdGhlIHdpbmRvdyBpcworc2VsZWN0ZWQuICBTaG91bGQgdGhlIHdpbmRvdyBiZSBpbiBhbm90aGVyIGZyYW1lLCB0aGF0IGZyYW1lIGlzIHJhaXNlZC4KKworTm90ZSwgc2hvdWxkIHRoZSBtb3VzZSBwb2ludGVyIGJlIHBsYWNlcyBvdXRzaWRlIHRoZSByYWlzZWQgZnJhbWUsIHRoYXQKK2ZyYW1lIHdpbGwgYmVjb21lIGRlc2VsZWN0ZWQgYmVmb3JlIHRoZSBuZXh0IGNvbW1hbmQuIgorICAoaW50ZXJhY3RpdmUpCisgIChvciAoaW5mZXJpb3ItZXJsYW5nLXJ1bm5pbmctcCkKKyAgICAgIChlcnJvciAiTm8gaW5mZXJpb3IgRXJsYW5nIHByb2Nlc3MgaXMgcnVubmluZy4iKSkKKyAgKGxldCAoKHdpbiAoaW5mZXJpb3ItZXJsYW5nLXdpbmRvdworCSAgICAgIGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlci1hbnktZnJhbWUpKQorCShmcmFtZXMtcCAoZmJvdW5kcCAnc2VsZWN0ZWQtZnJhbWUpKSkKKyAgICAoaWYgKG51bGwgd2luKQorCShsZXQgKChvbGQtd2luIChzZWxlY3RlZC13aW5kb3cpKSkKKwkgIChzYXZlLWV4Y3Vyc2lvbgorCSAgICAoc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikKKwkgICAgKHNldHEgd2luIChzZWxlY3RlZC13aW5kb3cpKSkKKwkgIChzZWxlY3Qtd2luZG93IG9sZC13aW4pKQorICAgICAgKGlmIChhbmQgd2luZG93LXN5c3RlbQorCSAgICAgICBmcmFtZXMtcAorCSAgICAgICAob3Igc2VsZWN0CisJCSAgIChlcSBpbmZlcmlvci1lcmxhbmctZGlzcGxheS1idWZmZXItYW55LWZyYW1lICdyYWlzZSkpCisJICAgICAgIChub3QgKGVxIChzZWxlY3RlZC1mcmFtZSkgKHdpbmRvdy1mcmFtZSB3aW4pKSkpCisJICAocmFpc2UtZnJhbWUgKHdpbmRvdy1mcmFtZSB3aW4pKSkpCisgICAgKGlmIHNlbGVjdAorCShzZWxlY3Qtd2luZG93IHdpbikpCisgICAgKHNpdC1mb3IgMCkKKyAgICB3aW4pKQorCisKKyhkZWZ1biBpbmZlcmlvci1lcmxhbmctcnVubmluZy1wICgpCisgICJOb24tbmlsIHdoZW4gYW4gaW5mZXJpb3IgRXJsYW5nIGlzIHJ1bm5pbmcuIgorICAoYW5kIGluZmVyaW9yLWVybGFuZy1wcm9jZXNzCisJICAgKG1lbXEgKHByb2Nlc3Mtc3RhdHVzIGluZmVyaW9yLWVybGFuZy1wcm9jZXNzKSAnKHJ1biBvcGVuKSkKKwkgICBpbmZlcmlvci1lcmxhbmctYnVmZmVyCisJICAgKGJ1ZmZlci1uYW1lIGluZmVyaW9yLWVybGFuZy1idWZmZXIpKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLXdpbmRvdyAoJm9wdGlvbmFsIGFsbC1mcmFtZXMpCisgICJSZXR1cm4gdGhlIHdpbmRvdyBjb250YWluaW5nIHRoZSBpbmZlcmlvciBFcmxhbmcsIG9yIG5pbC4iCisgIChhbmQgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApCisgICAgICAgKGlmIChhbmQgYWxsLWZyYW1lcyAoPj0gZXJsYW5nLWVtYWNzLW1ham9yLXZlcnNpb24gMTkpKQorCSAgIChnZXQtYnVmZmVyLXdpbmRvdyBpbmZlcmlvci1lcmxhbmctYnVmZmVyIHQpCisJIChnZXQtYnVmZmVyLXdpbmRvdyBpbmZlcmlvci1lcmxhbmctYnVmZmVyKSkpKQorCisKKyhkZWZ1biBpbmZlcmlvci1lcmxhbmctd2FpdC1wcm9tcHQgKCkKKyAgIldhaXQgdW50aWwgdGhlIGluZmVyaW9yIEVybGFuZyBzaGVsbCBwcm9tcHQgYXBwZWFyLiIKKyAgKGlmIChlcSBpbmZlcmlvci1lcmxhbmctcHJvbXB0LXRpbWVvdXQgdCkKKyAgICAgICgpCisgICAgKG9yIChpbmZlcmlvci1lcmxhbmctcnVubmluZy1wKQorCShlcnJvciAiTm8gaW5mZXJpb3IgRXJsYW5nIHNoZWxsIGlzIHJ1bm5pbmcuIikpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoc2V0LWJ1ZmZlciBpbmZlcmlvci1lcmxhbmctYnVmZmVyKQorICAgICAgKGxldCAoKG1zZyBuaWwpKQorCSh3aGlsZSAoc2F2ZS1leGN1cnNpb24KKwkJIChnb3RvLWNoYXIgKHByb2Nlc3MtbWFyayBpbmZlcmlvci1lcmxhbmctcHJvY2VzcykpCisJCSAoZm9yd2FyZC1saW5lIDApCisJCSAobm90IChsb29raW5nLWF0IGNvbWludC1wcm9tcHQtcmVnZXhwKSkpCisJICAoaWYgbXNnCisJICAgICAgKCkKKwkgICAgKHNldHEgbXNnIHQpCisJICAgIChtZXNzYWdlICJXYWl0aW5nIGZvciBFcmxhbmcgc2hlbGwgcHJvbXB0IChwcmVzcyBDLWcgdG8gYWJvcnQpLiIpKQorCSAgKG9yIChhY2NlcHQtcHJvY2Vzcy1vdXRwdXQgaW5mZXJpb3ItZXJsYW5nLXByb2Nlc3MKKwkJCQkgICAgIGluZmVyaW9yLWVybGFuZy1wcm9tcHQtdGltZW91dCkKKwkgICAgICAoZXJyb3IgIk5vIEVybGFuZyBzaGVsbCBwcm9tcHQgYmVmb3JlIHRpbWVvdXQuIikpKQorCShpZiBtc2cgKG1lc3NhZ2UgIiIpKSkpKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLXNlbmQtY29tbWFuZCAoY21kICZvcHRpb25hbCBoaXN0KQorICAiU2VuZCBjb21tYW5kIENNRCB0byB0aGUgaW5mZXJpb3IgRXJsYW5nLgorCitUaGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBsaW5lIChpZiBhbnkpIHdpbGwKK2JlIHBsYWNlZCBhdCB0aGUgbmV4dCBwcm9tcHQuCisKK0lmIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBub24tbmlsIHRoZSBjb21tYW5kIGlzIGluc2VydGVkIGludG8KK3RoZSBoaXN0b3J5IGxpc3QuCisKK1JldHVybiB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIG5ld2x5IGluc2VydGVkIGNvbW1hbmQuIgorICAob3IgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApCisgICAgICAoZXJyb3IgIk5vIGluZmVyaW9yIEVybGFuZyBwcm9jZXNzIGlzIHJ1bm5pbmcuIikpCisgIChsZXQgKChvbGQtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCisJKGluc2VydC1wb2ludCAobWFya2VyLXBvc2l0aW9uCisJCSAgICAgICAocHJvY2Vzcy1tYXJrIGluZmVyaW9yLWVybGFuZy1wcm9jZXNzKSkpCisJKGluc2VydC1sZW5ndGggKGlmIGNvbWludC1wcm9jZXNzLWVjaG9lcworCQkJICAgMAorCQkJICgxKyAobGVuZ3RoIGNtZCkpKSkpCisgICAgKHNldC1idWZmZXIgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikKKyAgICAoZ290by1jaGFyIGluc2VydC1wb2ludCkKKyAgICAoaW5zZXJ0IGNtZCkKKyAgICA7OyBTdHJhbmdlIHRoaW5ncyBoYXBwZW5kIGlmIGBjb21pbnQtZW9sLW9uLXNlbmQnIGlzIGRlY2xhcmVkCisgICAgOzsgaW4gdGhlIGBsZXQnIGV4cHJlc3Npb24gYWJvdmUsIGJ1dCBzZXRxOmQgaGVyZS4gVGhlCisgICAgOzsgYHNldC1idWZmZXInIHN0YXRlbWVudCBvYnZpb3VzbHkgbWFrZXMgdGhlIGJ1ZmZlciBsb2NhbAorICAgIDs7IGluc3RhbmNlIG9mIGBjb21pbnQtZW9sLW9uLXNlbmQnIHNoYWRvdyB0aGlzIG9uZS4KKyAgICA7OyBJJ20gY29uc2lkZXJpbmcgdGhpcyBhIGJ1ZyBpbiBFbGlzcC4KKyAgICAobGV0ICgoY29taW50LWVvbC1vbi1zZW5kIG5pbCkKKwkgIChjb21pbnQtaW5wdXQtZmlsdGVyIChpZiBoaXN0IGNvbWludC1pbnB1dC1maWx0ZXIgJ2lnbm9yZSkpKQorICAgICAgKGNvbWludC1zZW5kLWlucHV0KSkKKyAgICA7OyBBZGp1c3QgYWxsIHdpbmRvd3Mgd2hvc2UgcG9pbnRzIGFyZSBpbmNvcnJlY3QuCisgICAgKGlmIChudWxsIGNvbWludC1wcm9jZXNzLWVjaG9lcykKKwkod2Fsay13aW5kb3dzCisJIChmdW5jdGlvbgorCSAgKGxhbWJkYSAod2luZG93KQorCSAgICAoaWYgKGFuZCAoZXEgKHdpbmRvdy1idWZmZXIgd2luZG93KSBpbmZlcmlvci1lcmxhbmctYnVmZmVyKQorCQkgICAgIChlcSAod2luZG93LXBvaW50IHdpbmRvdykgaW5zZXJ0LXBvaW50KSkKKwkJKHNldC13aW5kb3ctcG9pbnQgd2luZG93CisJCQkJICAoKyBpbnNlcnQtcG9pbnQgaW5zZXJ0LWxlbmd0aCkpKSkpCisJIG5pbCB0KSkKKyAgICAoc2V0LWJ1ZmZlciBvbGQtYnVmZmVyKQorICAgICgrIGluc2VydC1wb2ludCBpbnNlcnQtbGVuZ3RoKSkpCisKKworKGRlZnVuIGluZmVyaW9yLWVybGFuZy1zdHJpcC1kZWxldGUgKCZvcHRpb25hbCBzKQorICAiUmVtb3ZlIGBeSCcgKGRlbGV0ZSkgYW5kIHRoZSBjaGFyYWN0ZXJzIGl0IHdhcyBzdXBwb3NlZCB0byByZW1vdmUuIgorICAoaW50ZXJhY3RpdmUpCisgIChpZiAoYW5kIChib3VuZHAgJ2NvbWludC1sYXN0LWlucHV0LWVuZCkKKwkgICAoYm91bmRwICdjb21pbnQtbGFzdC1vdXRwdXQtc3RhcnQpKQorICAgICAgKHNhdmUtZXhjdXJzaW9uCisJKGdvdG8tY2hhcgorCSAoaWYgKGludGVyYWN0aXZlLXApCisJICAgICAoc3ltYm9sLXZhbHVlICdjb21pbnQtbGFzdC1pbnB1dC1lbmQpCisJICAgKHN5bWJvbC12YWx1ZSAnY29taW50LWxhc3Qtb3V0cHV0LXN0YXJ0KSkpCisJKHdoaWxlIChwcm9nbiAoc2tpcC1jaGFycy1mb3J3YXJkICJeXEMtaCIpCisJCSAgICAgIChub3QgKGVxIChwb2ludCkgKHBvaW50LW1heCkpKSkKKwkgIChkZWxldGUtY2hhciAxKQorCSAgKG9yIChib2xwKQorCSAgICAgIChiYWNrd2FyZC1kZWxldGUtY2hhciAxKSkpKSkpCisKKworOzsgQmFzaWNhbGx5IGBjb21pbnQtc3RyaXAtY3RybC1tJywgd2l0aCBhIGZldyBleHRyYSBjaGVja3MuCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLXN0cmlwLWN0cmwtbSAoJm9wdGlvbmFsIHN0cmluZykKKyAgIlN0cmlwIHRyYWlsaW5nIGBeTScgY2hhcmFjdGVycyBmcm9tIHRoZSBjdXJyZW50IG91dHB1dCBncm91cC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChhbmQgKGJvdW5kcCAnY29taW50LWxhc3QtaW5wdXQtZW5kKQorCSAgIChib3VuZHAgJ2NvbWludC1sYXN0LW91dHB1dC1zdGFydCkpCisgICAgICAobGV0ICgocG1hcmsgKHByb2Nlc3MtbWFyayAoZ2V0LWJ1ZmZlci1wcm9jZXNzIChjdXJyZW50LWJ1ZmZlcikpKSkpCisJKHNhdmUtZXhjdXJzaW9uCisJICAoZ290by1jaGFyCisJICAgKGlmIChpbnRlcmFjdGl2ZS1wKQorCSAgICAgICAoc3ltYm9sLXZhbHVlICdjb21pbnQtbGFzdC1pbnB1dC1lbmQpCisJICAgICAoc3ltYm9sLXZhbHVlICdjb21pbnQtbGFzdC1vdXRwdXQtc3RhcnQpKSkKKwkgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIlxyKyQiIHBtYXJrIHQpCisJICAgIChyZXBsYWNlLW1hdGNoICIiIHQgdCkpKSkpKQorCisKKyhkZWZ1biBpbmZlcmlvci1lcmxhbmctY29tcGlsZSAoKQorICAiQ29tcGlsZSB0aGUgZmlsZSBpbiB0aGUgY3VycmVudCBidWZmZXIuCisKK1Nob3VsZCBFcmxhbmcgcmV0dXJuIGB7ZXJyb3IsIG5vZmlsZX0nIGl0IGNvdWxkIG5vdCBsb2FkIHRoZSBvYmplY3QKK21vZHVsZSBhZnRlciBjb21wbGV0aW5nIHRoZSBjb21waWxhdGlvbi4gIFRoaXMgaXMgZHVlIHRvIGEgYnVnIGluIHRoZQorY29tcGlsZSBjb21tYW5kIGBjJyB3aGVuIHVzaW5nIHRoZSBvcHRpb24gYG91dGRpcicuCisKK1RoZXJlIGV4aXN0cyB0d28gd29ya2Fyb3VuZHMgZm9yIHRoaXMgYnVnOgorCisgIDEpIFBsYWNlIHRoZSBkaXJlY3RvcnkgaW4gdGhlIEVybGFuZyBsb2FkIHBhdGguCisKKyAgMikgU2V0IHRoZSBFbWFjcyB2YXJpYWJsZSBgZXJsYW5nLWNvbXBpbGUtdXNlLW91dGRpcicgdG8gbmlsLgorICAgICBUbyBkbyBzbywgcGxhY2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIgYH4vLmVtYWNzJy1maWxlOgorICAgICAgICAoc2V0cSBlcmxhbmctY29tcGlsZS11c2Utb3V0ZGlyIG5pbCkiCisgIChpbnRlcmFjdGl2ZSkKKyAgKHNhdmUtc29tZS1idWZmZXJzKQorICAob3IgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApCisgICAgICAoc2F2ZS1leGN1cnNpb24KKwkoaW5mZXJpb3ItZXJsYW5nKSkpCisgIChvciAoaW5mZXJpb3ItZXJsYW5nLXJ1bm5pbmctcCkKKyAgICAgIChlcnJvciAiRXJyb3Igc3RhcnRpbmcgaW5mZXJpb3IgRXJsYW5nIHNoZWxsLiIpKQorICAobGV0ICgoZGlyIChmaWxlLW5hbWUtZGlyZWN0b3J5IChidWZmZXItZmlsZS1uYW1lKSkpCisJOzs7IChmaWxlIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IChidWZmZXItZmlsZS1uYW1lKSkpCisJKG5vZXh0IChzdWJzdHJpbmcgKGJ1ZmZlci1maWxlLW5hbWUpIDAgLTQpKQorCTs7IEhvcGVmdWxseSwgbm9vbmUgZWxzZSB3aWxsIGV2ZXIgdXNlIHRoZXNlLi4uCisJKHRtcHZhciAiVG1wNzIzNiIpCisJKHRtcHZhcjIgIlRtcDg3NDIiKQorCWVuZCkKKyAgICAoaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyKQorICAgIChpbmZlcmlvci1lcmxhbmctd2FpdC1wcm9tcHQpCisgICAgKHNldHEgZW5kIChpbmZlcmlvci1lcmxhbmctc2VuZC1jb21tYW5kCisJICAgICAgIChpZiBlcmxhbmctY29tcGlsZS11c2Utb3V0ZGlyCisJCSAgIChmb3JtYXQgImMoXCIlc1wiLCBbe291dGRpciwgXCIlc1wifV0pLiIgbm9leHQgZGlyKQorCQkgKGZvcm1hdAorCQkgIChjb25jYXQKKwkJICAgImYoJXMpLCB7b2ssICVzfSA9IGZpbGU6Z2V0X2N3ZCgpLCAiCisJCSAgICJmaWxlOnNldF9jd2QoXCIlc1wiKSwgIgorCQkgICAiJXMgPSBjKFwiJXNcIiksIGZpbGU6c2V0X2N3ZCglcyksIGYoJXMpLCAlcy4iKQorCQkgIHRtcHZhcjIgdG1wdmFyCisJCSAgICBkaXIKKwkJICAgIHRtcHZhcjIgbm9leHQgdG1wdmFyIHRtcHZhciB0bXB2YXIyKSkKKwkgICAgICAgbmlsKSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChzZXQtYnVmZmVyIGluZmVyaW9yLWVybGFuZy1idWZmZXIpCisgICAgICAoc2V0cSBjb21waWxhdGlvbi1lcnJvci1saXN0IG5pbCkKKyAgICAgIChzZXRxIGNvbXBpbGF0aW9uLXBhcnNpbmctZW5kIGVuZCkpCisgICAgKHNldHEgY29tcGlsYXRpb24tbGFzdC1idWZmZXIgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikpKQorCisKKzs7IGBuZXh0LWVycm9yJyBvbmx5IGFjY2VwdHMgYnVmZmVycyB3aXRoIG1ham9yIG1vZGUgYGNvbXBpbGF0aW9uLW1vZGUnCis7OyBvciB3aXRoIHRoZSBtaW5vciBtb2RlIGBjb21waWxhdGlvbi1taW5vci1tb2RlJyBhY3RpdmF0ZWQuCis7OyAoVG8gYWN0aXZhdGUgdGhlIG1pbm9yIG1vZGUgaXMgb3V0IG9mIHRoZSBxdWVzdGlvbiwgc2luY2UgaXQgd2lsbAorOzsgcnVpbiB0aGUgaW5mZXJpb3IgRXJsYW5nIGtleW1hcC4pCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLW5leHQtZXJyb3IgKCZvcHRpb25hbCBhcmdwKQorICAiSnVzdCBsaWtlIGBuZXh0LWVycm9yJy4KK0NhcGFibGUgb2YgZmluZGluZyBlcnJvciBtZXNzYWdlcyBpbiBhbiBpbmZlcmlvciBFcmxhbmcgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlICJQIikKKyAgKGxldCAoKGRvbmUgbmlsKQorCShidWYgKGFuZCAoYm91bmRwICdjb21waWxhdGlvbi1sYXN0LWJ1ZmZlcikKKwkJICBjb21waWxhdGlvbi1sYXN0LWJ1ZmZlcikpKQorICAgIChpZiAoYW5kIChidWZmZXJwIGJ1ZikKKwkgICAgIChzYXZlLWV4Y3Vyc2lvbgorCSAgICAgICAoc2V0LWJ1ZmZlciBidWYpCisJICAgICAgIChhbmQgKGVxIG1ham9yLW1vZGUgJ2VybGFuZy1zaGVsbC1tb2RlKQorCQkgICAgKHNldHEgbWFqb3ItbW9kZSAnY29tcGlsYXRpb24tbW9kZSkpKSkKKwkodW53aW5kLXByb3RlY3QKKwkgICAgKHByb2duCisJICAgICAgKHNldHEgZG9uZSB0KQorCSAgICAgIChuZXh0LWVycm9yIGFyZ3ApKQorCSAgKHNhdmUtZXhjdXJzaW9uCisJICAgIChzZXQtYnVmZmVyIGJ1ZikKKwkgICAgKHNldHEgbWFqb3ItbW9kZSAnZXJsYW5nLXNoZWxsLW1vZGUpKSkpCisgICAgKG9yIGRvbmUKKwkobmV4dC1lcnJvciBhcmdwKSkpKQorCisKKyhkZWZ1biBpbmZlcmlvci1lcmxhbmctY2hhbmdlLWRpcmVjdG9yeSAoJm9wdGlvbmFsIGRpcikKKyAgIk1ha2UgdGhlIGluZmVyaW9yIGVybGFuZyBjaGFuZ2UgZGlyZWN0b3J5LgorVGhlIGRlZmF1bHQgaXMgdG8gZ28gdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgIChvciBkaXIgKHNldHEgZGlyIChmaWxlLW5hbWUtZGlyZWN0b3J5IChidWZmZXItZmlsZS1uYW1lKSkpKQorICAob3IgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApCisgICAgICAoZXJyb3IgIk5vIGluZmVyaW9yIEVybGFuZyBpcyBydW5uaW5nLiIpKQorICAoaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyKQorICAoaW5mZXJpb3ItZXJsYW5nLXdhaXQtcHJvbXB0KQorICAoaW5mZXJpb3ItZXJsYW5nLXNlbmQtY29tbWFuZCAoZm9ybWF0ICJjZCgnJXMnKS4iIGRpcikgbmlsKSkKKwwKKzs7IEFsaWFzZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBFcmxhbmcgTW9kZS4KKzs7Cis7OyBVbmZvcnR1YW50ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBFbWFjcyBkb2Vzbid0IGhhdmUgYGRlZmFsaWFzJyBhbmQKKzs7IGBtYWtlLW9ic29sZXRlJyBzbyB3ZSBoYXZlIHRvIGRlZmluZSBvdXIgb3duIGBvYnNvbGV0ZScgZnVuY3Rpb24uCisKKyhkZWZ1biBlcmxhbmctb2Jzb2xldGUgKHN5bSBuZXdkZWYpCisgICJNYWtlIHRoZSBvYnNvbGV0ZSBmdW5jdGlvbiBTWU0gcmVmZXIgdG8gdGhlIGRlZmluZWQgZnVuY3Rpb24gTkVXREVGLgorCitTaW1wbGlmaWVkIHZlcnNpb24gb2YgYSBjb21iaW5hdGlvbiBgZGVmYWxpYXMnIGFuZCBgbWFrZS1vYnNvbGV0ZScsCitpdCBhc3N1bWVzIHRoYXQgTkVXREVGIGlzIGxvYWRlZC4iCisgIChmc2V0IHN5bSAoc3ltYm9sLWZ1bmN0aW9uIG5ld2RlZikpCisgIChpZiAoZmJvdW5kcCAnbWFrZS1vYnNvbGV0ZSkKKyAgICAgIChtYWtlLW9ic29sZXRlIHN5bSBuZXdkZWYpKSkKKworCisoZXJsYW5nLW9ic29sZXRlICdjYWxjdWxhdGUtZXJsYW5nLWluZGVudCAnZXJsYW5nLWNhbGN1bGF0ZS1pbmRlbnQpCisoZXJsYW5nLW9ic29sZXRlICdjYWxjdWxhdGUtZXJsYW5nLXN0YWNrLWluZGVudAorCQkgJ2VybGFuZy1jYWxjdWxhdGUtc3RhY2staW5kZW50KQorKGVybGFuZy1vYnNvbGV0ZSAnYXQtZXJsYW5nLWtleXdvcmQgJ2VybGFuZy1hdC1rZXl3b3JkKQorKGVybGFuZy1vYnNvbGV0ZSAnYXQtZXJsYW5nLW9wZXJhdG9yICdlcmxhbmctYXQtb3BlcmF0b3IpCisoZXJsYW5nLW9ic29sZXRlICdiZWdpbm5pbmctb2YtZXJsYW5nLWNsYXVzZSAnZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisoZXJsYW5nLW9ic29sZXRlICdlbmQtb2YtZXJsYW5nLWNsYXVzZSAnZXJsYW5nLWVuZC1vZi1jbGF1c2UpCisoZXJsYW5nLW9ic29sZXRlICdtYXJrLWVybGFuZy1jbGF1c2UgJ2VybGFuZy1tYXJrLWNsYXVzZSkKKyhlcmxhbmctb2Jzb2xldGUgJ2JlZ2lubmluZy1vZi1lcmxhbmctZnVuY3Rpb24gJ2VybGFuZy1iZWdpbm5pbmctb2YtZnVuY3Rpb24pCisoZXJsYW5nLW9ic29sZXRlICdlbmQtb2YtZXJsYW5nLWZ1bmN0aW9uICdlcmxhbmctZW5kLW9mLWZ1bmN0aW9uKQorKGVybGFuZy1vYnNvbGV0ZSAnbWFyay1lcmxhbmctZnVuY3Rpb24gJ2VybGFuZy1tYXJrLWZ1bmN0aW9uKQorKGVybGFuZy1vYnNvbGV0ZSAncGFzcy1vdmVyLWVybGFuZy1jbGF1c2UgJ2VybGFuZy1wYXNzLW92ZXItZnVuY3Rpb24pCisoZXJsYW5nLW9ic29sZXRlICduYW1lLW9mLWVybGFuZy1mdW5jdGlvbiAnZXJsYW5nLW5hbWUtb2YtZnVuY3Rpb24pCisKKworOzsgVGhlIGVuZC4uLgorCisocHJvdmlkZSAnZXJsYW5nKQorCisocnVuLWhvb2tzICdlcmxhbmctbG9hZC1ob29rKQorCis7OzsgZXJsYW5nLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy91dGlsaXRpZXMvYXBwZ2VuIGIvbGliL2VybC90b29scy91dGlsaXRpZXMvYXBwZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2MTkyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzL3V0aWxpdGllcy9hcHBnZW4KQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKKworaWYgWyAkIyAtbmUgMiBdO3RoZW4KKwllY2hvICIiCisJZWNobyAidXNhZ2U6ICQwIDxhcHBuYW1lPiA8cHJlZml4PiIKKwllY2hvICIiCisJZWNobyAiYXBwbmFtZSBpcyB0aGUgdGl0bGUgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIGdlbmVyYXRlZCIKKwllY2hvICJwcmVmaXggaXMgdGhlIHByZWZpeCB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gYWxsIGZpbGVzIGluIgorCWVjaG8gInRoZSBhcHBsaWNhdGlvbiBkdWUgdG8gZXJsYW5ncyBsYWNrIG9mIGEgcGFja2FnZSBzdHJ1Y3R1cmUuICBUaGUgcHJlZml4IgorCWVjaG8gImlzIHR5cGljYWx5IHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiIKKwllY2hvICIiCisJZWNobyAiZXhhbXBsZTogJDAgY2hhdF9zZXJ2ZXIgY3MiCisJZWNobyAiIgorCWV4aXQgMQorZmkKKworQVBQX05BTUU9JDEKK0FQUF9OQU1FX1VQUEVSX0NBU0U9JChlY2hvICRBUFBfTkFNRSB8IHRyIGEteiBBLVopCitQUkVGSVg9JDIKKworY2QgLi4vLmFwcGdlbgorZWNobyBgcHdkYAorCitjcCAtciBibGFua19hcHAgJEFQUF9OQU1FCitjcCAtciBibGFua19hcHBfcmVsICIkQVBQX05BTUUiX3JlbAorCitjZCAiJEFQUF9OQU1FIl9yZWwKK2xzIGJsYW5rX2FwcCogfCAuLi9yZW5hbWUuc2ggYmxhbmtfYXBwICRBUFBfTkFNRQorY2QgLi4KKworIyBUaGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHJlbGVhc2UKKy4vc3Vic3RpdHV0ZS5zaCAlJUFQUF9OQU1FJSUgJEFQUF9OQU1FICIkQVBQX05BTUUiX3JlbC8iJEFQUF9OQU1FIl9yZWwucmVsLnNyYworCisKK2NkICRBUFBfTkFNRS9zcmMKK2xzIGJhKiB8IC4uLy4uL3JlbmFtZS5zaCBiYSAkUFJFRklYCitscyBibGFua19hcHAqIHwgLi4vLi4vcmVuYW1lLnNoIGJsYW5rX2FwcCAkQVBQX05BTUUKK2NkIC0KKworIyBUaGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIGFwcGxpY2F0aW9uCisuL3N1YnN0aXR1dGUuc2ggJSVBUFBfTkFNRV9VUFBFUl9DQVNFJSUgJEFQUF9OQU1FX1VQUEVSX0NBU0UgJEFQUF9OQU1FL01ha2VmaWxlCisuL3N1YnN0aXR1dGUuc2ggJSVBUFBfTkFNRV9VUFBFUl9DQVNFJSUgJEFQUF9OQU1FX1VQUEVSX0NBU0UgJEFQUF9OQU1FL3Zzbi5taworCisjIFRoZSBzcmMgZGlyZWN0b3J5IG9mIHRoZSBhcHBsaWNhdGlvbgorLi9zdWJzdGl0dXRlLnNoICUlQVBQX05BTUUlJSAkQVBQX05BTUUgJEFQUF9OQU1FL3NyYy9NYWtlZmlsZQorLi9zdWJzdGl0dXRlLnNoICUlQVBQX05BTUVfVVBQRVJfQ0FTRSUlICRBUFBfTkFNRV9VUFBFUl9DQVNFICRBUFBfTkFNRS9zcmMvTWFrZWZpbGUKKy4vc3Vic3RpdHV0ZS5zaCAlJVBGWCUlICRQUkVGSVggJEFQUF9OQU1FL3NyYy9NYWtlZmlsZQorCisuL3N1YnN0aXR1dGUuc2ggJSVBUFBfTkFNRSUlICRBUFBfTkFNRSAkQVBQX05BTUUvc3JjLyIkQVBQX05BTUUiLmVybAorLi9zdWJzdGl0dXRlLnNoICUlUEZYJSUgJFBSRUZJWCAkQVBQX05BTUUvc3JjLyIkQVBQX05BTUUiLmVybAorLi9zdWJzdGl0dXRlLnNoICUlUEZYJSUgJFBSRUZJWCAkQVBQX05BTUUvc3JjLyIkUFJFRklYIl9zdXAuZXJsCisuL3N1YnN0aXR1dGUuc2ggJSVBUFBfTkFNRSUlICRBUFBfTkFNRSAkQVBQX05BTUUvc3JjLyIkUFJFRklYIl9zdXAuZXJsCisuL3N1YnN0aXR1dGUuc2ggJSVQRlglJSAkUFJFRklYICRBUFBfTkFNRS9zcmMvIiRQUkVGSVgiX3NlcnZlci5lcmwKKy4vc3Vic3RpdHV0ZS5zaCAlJUFQUF9OQU1FJSUgJEFQUF9OQU1FICRBUFBfTkFNRS9zcmMvIiRQUkVGSVgiX3NlcnZlci5lcmwKKworIyBpbmNsdWRlIGRpcmVjdG9yeQorbXYgJEFQUF9OQU1FL2luY2x1ZGUvYmxhbmtfYXBwLmhybCAkQVBQX05BTUUvaW5jbHVkZS8iJEFQUF9OQU1FIi5ocmwKKworZmluZCAkQVBQX05BTUUgLW5hbWUgIi5zdm4iIHwgeGFyZ3Mgcm0gLXIKK212ICRBUFBfTkFNRSAuLi8uLi9saWIKK212ICIkQVBQX05BTUUiX3JlbCAuLi8uLi9yZWxlYXNlCisKK2VjaG8gIiIKK2VjaG8gIiRBUFBfTkFNRSBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kIHBsYWNlZCB1bmRlciBsaWIvJEFQUF9OQU1FIgorZWNobyAkQVBQX05BTUUiX3JlbCBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kIHBsYWNlZCB1bmRlciByZWxlYXNlLyRBUFBfTkFNRSIiX3JlbCIKK2VjaG8gIiIKKworY2QgLi4vdXRpbGl0aWVzCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzL3V0aWxpdGllcy9jbGVhbl9yZWxlYXNlIGIvbGliL2VybC90b29scy91dGlsaXRpZXMvY2xlYW5fcmVsZWFzZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjAyNjkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy91dGlsaXRpZXMvY2xlYW5fcmVsZWFzZQpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vYmFzaAorCitpZiBbICQjIC1lcSAxIF07IHRoZW4KKwlSRUxFQVNFX05BTUU9JDEKK2Vsc2UKKwlSRUxFQVNFX05BTUU9JChiYXNlbmFtZSAkKGRpcm5hbWUgJChkaXJuYW1lICQoZGlybmFtZSAkKHdoaWNoICQwKSkpKSkKK2ZpCisKK0xPQ0FMPSQoZGlybmFtZSAkKHdoaWNoICQwKSkKKworZWNobyAkTE9DQUwKK2VjaG8gJFJFTEVBU0VfTkFNRQorY2QgJExPQ0FMCisKK2VjaG8gIgorLW1vZHVsZShjbGVhbl9yZWxlYXNlKS4gCistZXhwb3J0KFtjbGVhbl9yZWxlYXNlLzFdKS4gCisKK2NsZWFuX3JlbGVhc2UoW1JlbGVhc2VOYW1lXSkgLT4gCisgICAgUmVsRmlsZSA9IGF0b21fdG9fbGlzdChSZWxlYXNlTmFtZSkgKysgXCIucmVsXCIsCisgICAgY2FzZSBmaWxlOmNvbnN1bHQoUmVsRmlsZSkgb2YKKwl7b2ssIFt7cmVsZWFzZSwge1JlbE5hbWUsIFJlbFZzbn0sIEVydHNTcGVjLCBSZWxlYXNlU3BlY3N9XX0gLT4gZG9fcmVzdChSZWxGaWxlLCBSZWxlYXNlU3BlY3MpOworCXtlcnJvciwgUmVhc29ufSAtPiBpbzpmb3JtYXQoXCJFUlJPUiAtIENvdWxkIG5vdCBmaW5kIGZpbGUgfnN+blwiLCBbUmVsRmlsZV0pLCBleGl0KFJlYXNvbikKKyAgICBlbmQsCisgICAgb3M6Y21kKFwiY2QgLi4vO3JtIC1yZiBcIiArKyBzdHJpbmc6c3RyaXAob3M6Y21kKFwiYmFzZW5hbWUgYHB3ZGBcIikpKS4KKwkgICAgIAorZG9fcmVzdChSZWxGaWxlLCBSZWxlYXNlU3BlY3MpIC0+CisgICAgaW86Zm9ybWF0KFwiRmluZGluZyBPcnBoYW5zIGluIH5wIGFtb25nIGN1cnJlbnQgcmVsZWFzZSBzcGVjcyB+cH5uXCIsIFtSZWxGaWxlLCBSZWxlYXNlU3BlY3NdKSwKKyAgICB7b2ssIEZpbGVOYW1lTGlzdH0gICAgPSBmaWxlOmxpc3RfZGlyKFwiLi4vXCIpLAorICAgIERpcnMgPSBbRmlsZU5hbWUgfHwgRmlsZU5hbWUgPC0gRmlsZU5hbWVMaXN0LCBmaWxlbGliOmlzX2RpcihcIi4uL1wiICsrIEZpbGVOYW1lKV0gLS0KKwkgICBbc3RyaW5nOnN0cmlwKG9zOmNtZChcImJhc2VuYW1lIGBwd2RgXCIpLCByaWdodCwgJFxuKV0sCisgICAgQmlnTGlzdE9mUmVsZWFzZVNwZWNzID0gbGlzdHM6Zm9sZGwoZnVuKERpciwgQWNjKSAtPiAKKwkJCQkJCU90aGVyUmVsRmlsZSA9IFwiLi4vXCIgKysgRGlyICsrIFwiL1wiICsrIFJlbEZpbGUsCisJCQkJCQlpbzpmb3JtYXQoXCJDaGVja2luZyBleHRlcm5hbCByZWxlYXNlIGZpbGUgfnB+blwiLCBbT3RoZXJSZWxGaWxlXSksCisJCQkJCQljYXNlIGZpbGU6Y29uc3VsdChPdGhlclJlbEZpbGUpIG9mCisJCQkJCQkgICAge29rLCBbe3JlbGVhc2UsIHtSZWxOYW1lLCBSZWxWc259LCBFcnRzU3BlYywgUmVsZWFzZVNwZWNzX31dfSAtPiAKKwkJCQkJCQlBY2MgKysgUmVsZWFzZVNwZWNzXzsKKwkJCQkJCSAgICBfICAtPiAKKwkJCQkJCQlBY2MKKwkJCQkJCWVuZCBlbmQsIFtdLCBEaXJzKSwKKyAgICBPcnBoYW5zID0gUmVsZWFzZVNwZWNzIC0tIEJpZ0xpc3RPZlJlbGVhc2VTcGVjcywKKyAgICBpbzpmb3JtYXQoXCJSZW1vdmluZyBvcnBoYW4gcmVsZWFzZSBzcGVjcyB+cCBmcm9tIC4uLy4uL2xpYiB+blwiLCBbT3JwaGFuc10pLAorICAgIGxpc3RzOmZvcmVhY2goZnVuKE9ycGhhbikgLT4gCisJCQkgIG9zOmNtZChcInJtIC1yZiAuLi8uLi9saWIvXCIgKysgYXRvbV90b19saXN0KGVsZW1lbnQoMSwgT3JwaGFuKSkgKysgXCItXCIgKysgZWxlbWVudCgyLCBPcnBoYW4pKSAKKwkJICBlbmQsIE9ycGhhbnMpLgorIiA+IGNsZWFuX3JlbGVhc2UuZXJsCisKK2VybGMgY2xlYW5fcmVsZWFzZS5lcmwKKworQ01EPSJlcmwgLXMgY2xlYW5fcmVsZWFzZSBjbGVhbl9yZWxlYXNlICRSRUxFQVNFX05BTUUgLXMgZXJsYW5nIGhhbHQgLW5vc2hlbGwiCiskQ01ECmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzL3V0aWxpdGllcy9lZG9jIGIvbGliL2VybC90b29scy91dGlsaXRpZXMvZWRvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzJmMjYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy91dGlsaXRpZXMvZWRvYwpAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKK2lmIFsgIiQjIiAtbmUgIjEiIF0KK3RoZW4KKwllY2hvICRVU0FHRQorCWV4aXQgMQorZmkKKworQ1VSUkVOVF9ESVI9YHB3ZGAKK2VjaG8gJENVUlJFTlRfRElSCisKKyMgRXN0YWJsaXNoIHRoZSBvdHAgYmFzZSBkaXJlY3RvcnkuCitNWV9DTUQ9YHdoaWNoICQwYAorTVlfQ01EX0RJUj1gZGlybmFtZSAkTVlfQ01EYAorT1RQX0JBU0VfRElSPSRNWV9DTURfRElSLy4uLy4uCisKK2VybCAtbm9zaGVsbCAtcHogJE9UUF9CQVNFX0RJUi9saWIvZnNsaWIvZWJpbiAtcyBmc19saWIgc19hcHBseSBlZG9jIGFwcGxpY2F0aW9uICIkMSIuICAiXCIuLi8uLi8kMSJcIi4gW10uIiAiIC1zIGluaXQgc3RvcCB8IGVncmVwICIoRVhJVHx0ZXJtaW5hdGluZykiCg==