ZGlmZiAtLWdpdCBhL0RldGFpbGVkX1Rlc3RpbmdfTWV0aG9kb2xvZ3kudHh0IGIvRGV0YWlsZWRfVGVzdGluZ19NZXRob2RvbG9neS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViNzIzYQotLS0gL2Rldi9udWxsCisrKyBiL0RldGFpbGVkX1Rlc3RpbmdfTWV0aG9kb2xvZ3kudHh0CkBAIC0wLDAgKzEsODA0IEBACisqKioqKipDb25mb3JtYW5jZSBUZXN0LXN1aXRlKioqKioqKioqKioqKioqKioqKioqKioqKioKK09GLVN3aXRjaC0xLjAuMC1UZXN0Q2FzZXMgZGV0YWlsZWQgdGVzdGluZyBtZXRob2RvbG9neQorCisKKyMjIyMjIE9wZW5mbG93IHByb3RvY29sIG1lc3NhZ2VzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworMS4gRmVhdHVyZXMgUmVxdWVzdAorCitUZXN0IERlc2NyaXB0aW9uOiBDaGVjayBmZWF0dXJlcyByZXF1ZXN0IGlzIGltcGxlbWVudGVkCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogZmVhdHVyZXNfcmVxdWVzdAorUG9ydHM6IEkgKENvbnRyb2wgUGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIFNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdCBOb3RlczogCithKSBTZW5kIE9GUFRfRkVBVFVSRVNfUkVRVUVTVCBmcm9tIGNvbnRyb2xsZXIuCitjKSBWZXJpZnkgT0ZQVF9GRUFUVVJFU19SRVBMWSBpcyByZWNlaXZlZCB3aXRob3V0IGVycm9ycworCisKKzIuIENvbmZpZ3VyYXRpb24gcmVxdWVzdAorCitUZXN0IERlc2NyaXB0aW9uOiBDaGVjayBiYXNpYyBnZXQgY29uZmlndXJhdGlvbiByZXF1ZXN0IGlzIGltcGxlbWVudGVkCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogY29uZmlndXJhdGlvbl9yZXF1ZXN0CitQb3J0czogSSAoQ29udHJvbCBQbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gU2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorYSkgU2VuZCBPRlBUX0dFVF9DT05GSUdfUkVRVUVTVAorYykgVmVyaWZ5IE9GUFRfR0VUX0NPTkZJR19SRVBMWSBpcyByZWNlaXZlZCB3aXRob3V0IGVycm9ycy4KKworCiszLiBNb2RpZnkgU3RhdGUgKEFERCkKKworVGVzdCBEZXNjcmlwdGlvbjogQ2hlY2sgYmFzaWMgRmxvdyBBREQgcmVxdWVzdCBpcyBpbXBsZW1lbnRlZAorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1Rlc3QgVGl0bGU6IG1vZGlmeV9zdGF0ZV9hZGQKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBkYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIFNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdCBOb3RlczoKK2EpIFNlbmQgT0ZQVF9GTE9XX01PRCwgY29tbWFuZCA9IE9GUEZDX0FERCAKK2IpIFNlbmQgb2ZwX3RhYmxlX3N0YXRzIHJlcXVlc3QgCitjKSBWZXJpZnkgdGhhdCBhY3RpdmVfY291bnQ9MSBpbiB0aGUgcmVwbHkKKworNC4gTW9kaWZ5IFN0YXRlIChERUxFVEUpCisKK1Rlc3QgRGVzY3JpcHRpb246IENoZWNrIGJhc2ljIEZsb3cgRGVsZXRlIHJlcXVlc3QgaXMgaW1wbGVtZW50ZWQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiBtb2RpZnlfc3RhdGVfZGVsZXRlCitQb3J0czogMyAoMSBDb250cm9sIFBsYW5lIDIgZGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBTZXR1cAorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6CithKSBTZW5kIE9GUFRfRkxPV19NT0QsIGNvbW1hbmQgPSBPRlBGQ19BREQgCitiKSBTZW5kIG9mcF90YWJsZV9zdGF0cyByZXF1ZXN0CitjKSBWZXJpZnkgdGhhdCBhY3RpdmVfY291bnQ9MSBpbiB0aGUgcmVwbHkKK2QpIFNlbmQgT0ZQVF9GTE9XX01PRCwgY29tbWFuZCA9IE9GUEZDX0RFTEVURQorZSkgU2VuZCBvZnBfdGFibGVfc3RhdHMgcmVxdWVzdAorZikgIFZlcmlmeSBhY3RpdmUgX2NvdW50PTAgaW4gdGhlIHJlcGx5CisKKzUuIE1vZGlmeSBTdGF0ZSAoTU9ESUZZKQorCitUZXN0IERlc2NyaXB0aW9uOiBDaGVjayBiYXNpYyBGbG93IE1vZGlmeSByZXF1ZXN0IGlzIGltcGxlbWVudGVkCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogbW9kaWZ5X3N0YXRlX21vZGlmeQorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSBhbmQgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIFNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdCBOb3RlczoKK2EpIFNlbmQgIE9GUFRfRkxPV19NT0QgLCBjb21tYW5kID0gT0ZQRkNfQURELCBhY3Rpb24gQQorYikgU2VuZCBvZnBfdGFibGVfc3RhdHMgcmVxdWVzdCwgVmVyaWZ5ICBhY3RpdmVfY291bnQ9MQorYykgU2VuZCBPRlBUX0ZMT1dfTU9EICwgY29tbWFuZCA9IE9GUEZDX01PRElGWSwgYWN0aW9uIEGSCitkKSBTZW5kIFRlc3QgUGFja2V0ICBtYXRjaGluZyB0aGUgZmxvdworZSkgVmVyaWZ5IHBhY2tldCBpbXBsZW1lbnRzIGFjdGlvbiBBkgorCisKKworNi4gUmVhZCBTdGF0ZQorCitUZXN0IERlc2NyaXB0aW9uOiBDaGVjayBiYXNpYyBSZWFkIFN0YXRlIGlzIGltcGxlbWVudGVkCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogcmVhZF9zdGF0ZQorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSwgMiBkYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIFNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdCBOb3RlczoKK2EpIFNlbmQgIE9GUFRfRkxPV19NT0QsIGNvbW1hbmQgPSBPRlBGQ19BREQKK2IpIENyZWF0ZSBhIE9GUENfRkxPV19TVEFUUyBtZXNzYWdlIGFuZCBzZW5kIGl0CitjKSBWZXJpZnkgc3dpdGNoIHJlcGxpZXMgd2l0aG91dCBlcnJvcnMKKworNy4gU2VuZCBwYWNrZXQKKworVGVzdCBEZXNjcmlwdGlvbjogQ2hlY2sgYmFzaWMgU2VuZC1QYWNrZXQgaXMgaW1wbGVtZW50ZWQuIAorU2VuZC1QYWNrZXQ6IFRoZXNlIGFyZSB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIHRvIHNlbmQgcGFja2V0cyBvdXQgb2YgYSBzcGVjaWZpZWQgcG9ydCBvbiB0aGUgc3dpdGNoLgorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1Rlc3QgVGl0bGU6ICBzZW5kX3BhY2tldAorUG9ydHM6IDUgKDEgQ29udHJvbCBQbGFuZSwgNCBEYXRhcGxhbmUpIAorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBTZXR1cAorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKKworVGVzdCBOb3RlczoKK2EpIFNlbmQgT0ZQVF9QQUNLRVRfT1VUIG91dCBtZXNzYWdlIGZyb20gY29udHJvbGxlciB0byBzd2l0Y2ggZm9yIGV2ZXJ5IGRhdGFwbGFuZSBwb3J0LgorYikgVmVyaWZ5IHRoZSBwYWNrZXQgYXBwZWFycyBvbiB0aGUgZWFjaCBkYXRhcGxhbmUgcG9ydAorYykgVmVyaWZ5IHNlbnQgcGFja2V0IG1hdGNoZXMgdGhlIHJlY2VpdmVkIHBhY2tldAorICAgIAorOC4gQmFycmllciBSZXF1ZXN0IAorCitUZXN0IERlc2NyaXB0aW9uOiBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgYSBiYXNpYyBiYXJyaWVyIHJlcXVlc3QgZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IuCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogYmFycmllcl9yZXF1ZXN0X3JlcGx5CitQb3J0czogSSAoQ29udHJvbCBQbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gU2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorCithKSBTZW5kIE9GUFRfQkFSUklFUl9SRVFVRVNUCitjKSBWZXJpZnkgT0ZQVF9CQVJSSUVSX1JFUExZIGlzIHJlY2VpdmVkIG9uIHRoZSBjb250cm9sIHBsYW5lLgorCisKKzkuIFBhY2tldCBJbgorCitUZXN0IERlc2NyaXB0aW9uOiBDaGVjayBwYWNrZXRfaW4gaXMgaW1wbGVtZW50ZWQuIFRoaXMgdGVzdCBqdXN0IGNoZWNrcyB0aGF0IG5vbiBtYXRjaGVkIGRhdGFwbGFuZSBwYWNrZXRzIGdlbmVyYXRlIGEgcGFja2V0X2luCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogcGFja2V0X0luCitQb3J0czogMiAoMSBDb250cm9sIFBsYW5lIGFuZCAxIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gU2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorYSkgU2VuZCBhIHBhY2tldCB0byBkYXRhcGxhbmUgcG9ydCAsIHdpdGhvdXQgaW5zZXJ0aW5nIGEgZmxvdyBlbnRyeQorYikgVmVyaWZ5IGEgT0ZQVF9QQUNLRVRfSU4gaXMgZ2VuZXJhdGVkIG9uIHRoZSBjb250cm9sIHBsYW5lCisKKworMTAuIEhlbGxvCisKK1Rlc3QgRGVzY3JpcHRpb246IFRoaXMgdGVzdCBjaGVja3MgZm9yIGJhc2ljIEhlbGxvIG1lc3NhZ2UgZ2VuZXJhdGlvbiB3aXRoIGNvcnJlY3QgdmVyc2lvbiBmaWVsZC4KK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiAgaGVsbG8KK1BvcnRzOiAxIChDb250cm9sIFBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBTZXR1cAorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6CithKSBTZW5kICBPRlBUX0hFTExPIGZyb20gY29udHJvbGxlciB0byBzd2l0Y2gKK2IpIFZlcmlmeSBzd2l0Y2ggYWxzbyBzZW5kcyBPRlBUX0hFTExPIG1lc3NhZ2UgaW4gcmVzcG9uc2UgCitjKSBWZXJpZnkgdmVyc2lvbiBmaWVsZCBpbiB0aGUgaGVsbG8gbWVzc2FnZSBpcyBzZXQgdG8gT3BlbmZsb3cgdmVyc2lvbiAxLjAuMAorCisxMS4gRWNobworCitUZXN0IERlc2NyaXB0aW9uOiBUaGlzIHRlc3QgY2hlY2tzIGZvciBiYXNpYyBFY2hvIFJlcGx5IG1lc3NhZ2UgZ2VuZXJhdGlvbiB3aXRoIGNvcnJlY3QgdmVyc2lvbiBmaWVsZCB3aXRoIHNhbWUgdHJhbnNhY3Rpb24gaWQuCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGVjaG9fd2l0aG91dF9ib2R5CitQb3J0czogMSAoQ29udHJvbCBQbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorYSkgU2VuZCBPRlBUX0VDSE9fUkVRVUVTVCBmcm9tIHRoZSBjb250cm9sbGVyIHNpZGUuCitiKSBWZXJpZnkgc3dpdGNoIHJlc3BvbmRzIGJhY2sgd2l0aCBPRlBUX0VDSE9fUkVQTFkgd2l0aCBzYW1lIHhpZC4KK2MpIFZlcmlmeSBPcGVuZmxvdyB2ZXJzaW9uIGluIGhlYWRlciBpcyBzZXQgdG8gT3BlbmZsb3cgdmVyc2lvbiAxLjAuMC4KKworCisKKyMjIyMjIyMjIyMjIyMgIERldGFpbGVkIGNvbnRyb2xsZXIgdG8gc3dpdGNoIG1lc3NhZ2VzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworMS4gT3ZlcmxhcCBjaGVja2luZworCitUZXN0IERlc2NyaXB0aW9uOiBWZXJpZnkgdGhhdCBpZiBvdmVybGFwIGNoZWNrIGZsYWcgaXMgc2V0IGluIHRoZSBmbG93IGVudHJ5IGFuZCBhbiBvdmVybGFwcGluZyBmbG93IGlzIGluc2VydGVkIHRoZW4gYW4gZXJyb3IgaXMgZ2VuZXJhdGVkIGFuZCBzd2l0Y2ggcmVmdXNlcyBmbG93IGVudHJ5CitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG92ZXJsYXBfY2hlY2tpbmcKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBkYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdC1Ob3RlczoKKworYSkgR2VuZXJhdGUgRmxvdyBGMS0tPiBXaWxkY2FyZCBBbGwgCitiKSBTZW5kIG9mcF90YWJsZV9zdGF0cyByZXF1ZXN0ICwgdmVyaWZ5IGFjdGl2ZV9jb3VudD0xCitjKSBHZW5lcmF0ZSBvdmVybGFwcGluZyBmbG93IEYyIC0tPiBXaWxkY2FyZCBBbGwgRXhjZXB0IEluZ3Jlc3MgUG9ydCAoIHdpdGggZmxhZyBPRlBGRl9DSEVDS19PVkVSTEFQIHNldCkKK2QpIFZlcmlmeSB0aGF0IHN3aXRjaCBnZW5lcmF0ZXMgT0ZQVF9FUlJPUiBtc2cuICAKK1R5cGU6IE9GUEVUX0ZMT1dfTU9EX0ZBSUxFRCBjb2RlIDogT0ZQRk1GQ19PVkVSTEFQIAorCisyLiBObyBvdmVybGFwIGNoZWNraW5nCisKK1Rlc3QgRGVzY3JpcHRpb246IFZlcmlmeSB0aGF0IHdpdGhvdXQgb3ZlcmxhcCBjaGVjayBmbGFnIHNldCwgb3ZlcmxhcHBpbmcgZmxvd3MgY2FuIGJlIGNyZWF0ZWQuCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG5vX292ZXJsYXBfY2hlY2tpbmcKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUsIDIgRGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBzZXR1cAorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6CisKK2EpIEdlbmVyYXRlIEZsb3cgRjEtLT4gV2lsZGNhcmQgQWxsLgorYikgU2VuZCBvZnBfdGFibGVfc3RhdHMgcmVxdWVzdCAsIHZlcmlmeSBhY3RpdmVfY291bnQ9MQorZSkgR2VuZXJhdGUgb3ZlcmxhcHBpbmcgZmxvdyBGMiAtLT4gV2lsZGNhcmQgQWxsIEV4Y2VwdCBJbmdyZXNzIFBvcnQgKCB3aXRob3V0IGZsYWcgT0ZQRkZfQ0hFQ0tfT1ZFUkxBUCBzZXQpCitjKSBTZW5kIGEgb2ZwX3RhYmxlX3N0YXRzIHJlcXVlc3QsIHZlcmlmeSBhY3RpdmVfY291bnQ9MgorCiszLiBJZGVudGljYWwgZmxvd3MgCisKK1Rlc3QgRGVzY3JpcHRpb246IFZlcmlmeSB0aGF0IGFkZGluZyB0d28gaWRlbnRpY2FsIGZsb3dzIG92ZXJ3cml0ZXMgdGhlIGV4aXN0aW5nIG9uZSBhbmQgY2xlYXJzIGNvdW50ZXJzCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGlkZW50aWNhbF9mbG93cworUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSksICgyIGRhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorCithKSBHZW5lcmF0ZSBGbG93IEYxLgorYikgU2VuZCBvZnBfdGFibGVfc3RhdHMgcmVxdWVzdCAsIHZlcmlmeSBhY3RpdmVfY291bnQ9MQorYikgICBJbmNyZW1lbnQgY291bnRlcnMgKHBhY2tldF9jb3VudCwgYnl0ZV9jb3VudCkgYnkgc2VuZGluZyBhIHBhY2tldCBtYXRjaGluZyBmbG93IEYxLgorQykgICBTZW5kIG9mcF9mbG93X3N0YXRzIHJlcXVlc3QuIFZlcmlmeSBmbG93IGNvdW50ZXJzOiBieXRlX2NvdW50IGFuZCBwYWNrZXRfY291bnQgCitjKSAgIENyZWF0ZSBpZGVudGljYWwgZmxvdyBGMgorZCkgICBTZW5kIGEgb2ZwX3RhYmxlX3N0YXRzIHJlcXVlc3QsIHZlcmlmeSBhY3RpdmVfY291bnQ9MQorZSkgICBTZW5kIG9mcF9mbG93X3N0YXRzIHJlcXVlc3QuIFZlcmlmeSBmbG93IGNvdW50ZXJzOiBieXRlX2NvdW50IGFuZCBwYWNrZXRfY291bnQgYXJlIHJlc2V0CisKKworCis0LiBObyB0YWJsZSB0byBhZGQgKFdyaXR0ZW4gaW4gb2Z0ZXN0l05lZWQgdG8gYWRkIHRvIGNvbmZvcm1hbmNlIFRlc3QtU3VpdGVzKQorCis1LiBOZXZlciB2YWxpZCBwb3J0IChUQkQpCisKKzYuIEN1cnJlbnRseSBub3QgZXhpc3RpbmcgcG9ydCBWZXJzaW9uIEEgYW5kIEIgKFRCRCkKKworNy4gRW1lcmdlbmN5IGZsb3cgd2l0aCB0aW1lb3V0IHZhbHVlcyAKKworVGVzdCBEZXNjcmlwdGlvbjogVGltZW91dCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGZvciBlbWVyZ2VuY3kgZmxvd3MKK1Rlc3QgVGl0bGU6IGVtZXJfZmxvd193aXRoX3RpbWVvdXQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogMyAoMSBjb250cm9sIHBsYW5lLCAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAgCisKK1Rlc3QgTm90ZXM6CisKK2EpICBHZW5lcmF0ZSBhIGZsb3cgRiB3aXRoIE9GUEZGX0VNRVJHIHNldCBpbiBmbGFnIGFuZCB0aW1lb3V0IHZhbHVlcyBhc3NpZ25lZC4KK2IpICBWZXJpZnkgc3dpdGNoIGdlbmVyYXRlcyBhbiBPRlBUX0VSUk9SIG1zZywgVHlwZTogT0ZQRVRfRkxPV19NT0RfRkFJTEVELCBDb2RlIE9GUEZNRkNfQkFEX0VNRVJHX1RJTUVPVVQKKworCis4LiBNaXNzaW5nIG1vZGlmeSBhZGRzCisKK1Rlc3QgRGVzY3JpcHRpb246IElmIGEgbW9kaWZ5IGRvZXMgbm90IG1hdGNoIGFuIGV4aXN0aW5nIGZsb3csIHRoZSBmbG93IGdldHMgYWRkZWQuCitUaXRsZTogbWlzc2luZ19tb2RpZnlfYWRkCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorUG9ydHM6MyAoMSBjb250cm9sIHBsYW5lLDIgRGF0YSBQbGFuZSkKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIENsZWFyIFN3aXRjaCBTdGF0ZQorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6CisKK2EpIEdlbmVyYXRlIGEgZmxvdy1tb2QgLCBjb21tYW5kIE9GUENfTU9ESUZZIChOb3RlOiBUaGVyZSBzaG91bGQgYmUgbm8gZmxvd3MgbWF0Y2hpbmcgdGhpcyBmbG93X21vZCBtb2RpZnkgY29tbWFuZCkKK2IpIFNlbmQgYSBvZnBfdGFibGVfc3RhdHMgcmVxdWVzdCwgdmVyaWZ5IGFjdGl2ZV9jb3VudD0xCisKKzkuIE1vZGlmeSBjaGFuZ2VzIGFjdGlvbiwgcHJlc2VydmVzIGNvdW50ZXJzCisKK1Rlc3QgRGVzY3JpcHRpb246IEEgbW9kaWZpZWQgZmxvdyBwcmVzZXJ2ZXMgY291bnRlcnMKK1RpdGxlOiBtb2RpZnlfYWN0aW9uCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorUG9ydHM6IDQoMSBjb250cm9sIHBsYW5lLCAzIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIENsZWFyIFN3aXRjaCBTdGF0ZQorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6CisKK2EpIENyZWF0ZSBhIGZsb3dfbW9kIEYtMSB3aXRoIGNvbW1hbmQgT0ZQQ19BREQsIGFjdGlvbiBBCitiKSBTZW5kIGEgdGVzdCBQYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3cKK2MpIFNlbmQgYW4gb2ZwX2Zsb3dfc3RhdHMgcmVxdWVzdCwgdmVyaWZ5IGJ5dGVfY291bnQgYW5kIHBhY2tldF9jb3VudAorZSkgQ3JlYXRlIGZsb3dfbW9kIHdpdGggY29tbWFuZCBPRlBDX01PRElGWSAsYWN0aW9uIEGSIGFuZCBtb2RpZnkgYWN0aW9uIG9mIGZsb3cgRi0xCitmKSAgU2VuZCBhIG9mcF9mbG93X3N0YXRzIHJlcXVlc3QsIHZlcmlmeSBmbG93IGNvdW50ZXJzIGFyZSBwcmVzZXJ2ZWQKK2cpIFNlbmQgdGVzdCBwYWNrZXQsIHZlcmlmeSBpdCBpbXBsZW1lbnRzIGFjdGlvbiBBkgorCisgCisxMC4gU3RyaWN0IE1vZGlmeSBjaGFuZ2VzIGFjdGlvbiwgcHJlc2VydmVzIGNvdW50ZXJzCisKK1Rlc3QgRGVzY3JpcHRpb246IFN0cmljdCBNb2RpZnkgRmxvdyBhbHNvIGNoYW5nZXMgYWN0aW9uIHByZXNlcnZlcyBjb3VudGVycworVGl0bGU6IHN0cmljdF9tb2RpZnlfYWN0aW9uCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorUG9ydHM6IDQoMSBjb250cm9sIHBsYW5lLCAzIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIENsZWFyIFN3aXRjaCBTdGF0ZQorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6CisKK2EpIENyZWF0ZSB0d28gb3ZlcmxhcHBpbmcgZmxvd3M6IEYgLS0+IE1hdGNoIG9uIGFsbCwgZXhjZXB0IG9uZSB3aWxkY2FyZGVkIChzcmMgYWRkcmVzcykuICBBY3Rpb24gQS4gUHJpb3JpdHk9MTAwIAorRpIgLS0+IE1hdGNoIG9uIGluZ3Jlc3NfcG9ydCA9IHBvcnQgWzBdLCB3aWxkY2FyZGVkIHJlc3QuIEFjdGlvbiBBLiBQcmlvcml0eT0xMAorYikgU2VuZCBhIG9mcF90YWJsZV9zdGF0cyByZXF1ZXN0LCB2ZXJpZnkgYWN0aXZlX2NvdW50PTIKK2MpIFNlbmQgUGFja2V0IChpdCB3b3VsZCBoYXZlIG1hdGNoZWQgYm90aCB0aGUgZmxvd3MsIHNpbmNlIHRoZXkgYXJlIG92ZXJsYXBwaW5nIGZsb3dzIGJ1dCBpdCB3b3VsZCBtYXRjaCBGbG93LUYxIGFzIGl0IGhhcyBoaWdoZXIgcHJpb3JpdHkuKQorZCkgU2VuZCBvZnBfZmxvd19zdGF0cyByZXF1ZXN0IGZvciBGbG93LTEgYW5kIHZlcmlmeSBjb3VudGVycyBwYWNrZXRfY291bnQgYW5kIGJ5dGVfY291bnQgCitlKSBDcmVhdGUgZmxvd19tb2QgLGNvbW1hbmQgT0ZQQ19TVFJJQ1RfTU9ESUZZLG1hdGNoIG9uIGFsbCBleGNlcHQgc3JjIGFkZHJlc3MgLHByaW9yaXR5IDEwMCBhY3Rpb24gQZIKK2YpIFNlbmQgdGVzdCBwYWNrZXQgLCB2ZXJpZnkgYWN0aW9uIGlzIG1vZGlmaWVkCitnKSBTZW5kIG9mcF9mbG93X3N0YXRzIHJlcXVlc3QsIHZlcmlmeSBjb3VudGVycyBhcmUgcHJlc2VydmVkLgorCisxMS4gRGVsZXRlIG5vbiBleGlzdGluZyBmbG93IAorCitUZXN0IERlc2NyaXB0aW9uOiBSZXF1ZXN0IGRlbGV0aW9uIG9mIG5vbi1leGlzdGluZyBmbG93CitUaXRsZTogZGVsZXRlX25vbmV4aXN0aW5nX2Zsb3cKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogMSgxIGNvbnRyb2wgcGxhbmUpCitJbml0aWFsIFN0YXRlOiBDb25uZWN0aW9uIHNldHVwLCBDbGVhciBTd2l0Y2ggU3RhdGUKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorCithKSBJc3N1ZSBhIGRlbGV0ZSBjb21tYW5kLCB3aXRoIG5vIGZsb3dzIGluc2VydGVkCitiKSBNYWtlIHN1cmUgbm8gZXJyb3IgaXMgZ2VuZXJhdGVkIG9uIHRoZSBjb250cm9sIHBsYW5lCisKKzEyLiBEZWxldGUgZmxvd3Mgd2l0aCBhbmQgd2l0aG91dCByZW1vdmVkIG1lc3NhZ2UKKworVGVzdCBEZXNjcmlwdGlvbjogQ2hlY2sgZGVsZXRpb24gb2YgZmxvd3MgaGFwcGVucyBhbmQgZ2VuZXJhdGVzIG1lc3NhZ2VzIGFzIGNvbmZpZ3VyZWQuCitJLmUuIGlmIJFTZW5kIEZsb3cgcmVtb3ZlZCBtZXNzYWdlkiBGbGFnIGlzIHNldCBpbiB0aGUgZmxvdyBlbnRyeSwgdGhlIGZsb3cgZGVsZXRpb24gb2YgdGhhdCByZXNwZWN0aXZlIGZsb3cgc2hvdWxkIGdlbmVyYXRlIHRoZSBmbG93IHJlbW92ZWQgbWVzc2FnZSwgdmljZSB2ZXJzYSBhbHNvIGV4aXN0cyAKK1Rlc3QgVGl0bGU6IFNlbmRfRmxvd19SZW0KK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogMyAoMSBjb250cm9sIHBsYW5lLCAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIERlZmF1bHQgKGNsZWFyIHN3aXRjaCBzdGF0ZSkKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorCithKSBHZW5lcmF0ZSBhIGZsb3cgRiB3aXRob3V0IE9GUEZGX1NFTkRfRkxPV19SRU0gZmxhZyBzZXQKK2IpIElzc3VlIGEgZGVsZXRlIGNvbW1hbmQgT0ZQRkNfREVMRVRFCitjKSBWZXJpZnkgdGhhdCBPRlBUX0ZMT1dfUkVNT1ZFRCBtZXNzYWdlIGlzIG5vdCBnZW5lcmF0ZWQuCitjKSBHZW5lcmF0ZSBhIGZsb3cgRpIgd2l0aCBPRlBGRl9TRU5EX0ZMT1dfUkVNIGZsYWcgc2V0CitkKSBJc3N1ZSBhIGRlbGV0ZSBjb21tYW5kIE9GUEZDX0RFTEVURQorZSkgVmVyaWZ5IHRoYXQgT0ZQVF9GTE9XX1JFTU9WRUQgbWVzc2FnZSBpcyBnZW5lcmF0ZWQKKworCisKKzEzLiBEZWxldGUgZW1lcmdlbmN5IGZsb3cgCisKK1Rlc3QgRGVzY3JpcHRpb246IERlbGV0ZSBlbWVyZ2VuY3kgZmxvdyBhbmQgdmVyaWZ5IG5vIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkLgorQW4gZW1lcmdlbmN5IGZsb3cgZGVsZXRpb24gd2lsbCBub3QgZ2VuZXJhdGUgZmxvdy1yZW1vdmVkIG1lc3NhZ2VzIGV2ZW4gaWYgkVNlbmQgRmxvdyByZW1vdmVkIG1lc3NhZ2WSIGZsYWcgd2FzIHNldCBkdXJpbmcgdGhlIGVtZXJnZW5jeSBmbG93IGVudHJ5LgorVGl0bGU6IGRlbGV0ZV9lbWVyX2Zsb3cKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogMyAoMSBjb250cm9sIHBsYW5lLCAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIENsZWFyIFN3aXRjaCBTdGF0ZSAoZGVmYXVsdCkgCisKK1Rlc3QtTm90ZXM6CisKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBPRlBGRl9FTUVSRyBmbGFnIHNldC4KK2IpIERlbGV0ZSB0aGUgYWRkZWQgZmxvdyB3aXRoIE9GUEZGX1NFTkRfRkxPV19SRU0gZmxhZyBzZXQKK2MpIFRlc3Qgc3VjY2Vzc2Z1bCBpZiBubyBmbG93IHJlbW92ZWQgbWVzc2FnZSBpcyBnZW5lcmF0ZWQuCisgICAgCisKKzE0LiBEZWxldGUgYW5kIHZlcmlmeSBzdHJpY3QgYW5kIG5vbi1zdHJpY3QgCisKK1Rlc3QgRGVzY3JpcHRpb246IERlbGV0ZSBhbmQgdmVyaWZ5IHN0cmljdCBhbmQgbm9uLXN0cmljdCBiZWhhdmlvcnMKK1RoaXMgdGVzdCBjb21wYXJlcyB0aGUgYmVoYXZpb3Igb2YgZGVsZXRlIHN0cmljdCBhbmQgbm9uLXN0cmljdC4KK1RpdGxlOiBkZWxldGVfc3RyaWN0X25vbnN0cmljdAorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1BvcnRzOiAzICgxIGNvbnRyb2wgcGxhbmUsIDIgZGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogQ29ubmVjdGlvbiBzZXR1cCwgQ2xlYXIgU3dpdGNoIFN0YXRlCisKK1Rlc3QtTm90ZXM6CisKK2EpIEluc2VydCBGbG93IEYgd2l0aCBhbiBleGFjdCBtYXRjaC4gCitiKSAgSXNzdWUgTm9uLXN0cmljdCBEZWxldGUgY29tbWFuZCwgdmVyaWZ5IEYgZ2V0cyBkZWxldGVkLiAKK2MpICBJbnNlcnQgRiB3aXRoIGFuIGV4YWN0IE1hdGNoIAorZCkgIElzc3VlIFN0cmljdCBEZWxldGUgQ29tbWFuZCwgdmVyaWZ5IEYgZ2V0cyBkZWxldGVkLgorZSkgIEluc2VydCBGbG93IFQgd2l0aCBtYXRjaCBvbiBhbGwsIGV4Y2VwdCBvbmUgd2lsZGNhcmRlZCAoc2F5IHNyYyBhZGRyZXNzKS4gIAorZikgIEluc2VydCBhbm90aGVyIGZsb3cgVCcgd2l0aCBtYXRjaCBvbiBpbmdyZXNzX3BvcnQsIHdpbGRjYXJkZWQgcmVzdC4gIAorZykgIElzc3VlIE5vbi1zdHJpY3QgRGVsZXRlICggbWF0Y2ggb24gaW5ncmVzc19wb3J0KS4gVmVyaWZ5IFQrVCcgZ2V0cyBkZWxldGVkLiAKK2gpICBJbnNlcnQgVCBhbmQgVCcgYWdhaW4uIElzc3VlIFN0cmljdCBEZWxldGUgKG1hdGNoIG9uIGluZ3Jlc3MgcG9ydCksIHZlcmlmeSBvbmx5IFQnIGdldHMgZGVsZXRlZAoraSkgICBJbnNlcnQgVCwgYWRkIFByaW9yaXR5IFAgKHNheSAxMDApIAoraikgIEluc2VydCBUJyBhZGQgcHJpb3JpdHkgKDIwMCkuIAoraykgSW5zZXJ0IFQnIGFnYWluIGFkZCBwcmlvcml0eSAzMDAgLS0+IFSUCitsKSAgSXNzdWUgTm9uLVN0cmljdCBEZWxldGUgKG1hdGNoIG9uIGluZ3Jlc3MgcG9ydCkuIFZlcmlmeSBUK1SSK1SSkiBnZXRzIGRlbGV0ZWQuIAorbSkgSW5zZXJ0IFQsIFSSLCBUkpIgYWdhaW4sIElzc3VlIFN0cmljdCBEZWxldGUgKG1hdGNoIG9uIGluZ3Jlc3NfcG9ydCkgd2l0aCBwcmlvcml0eSA9IDIwMC4gVmVyaWZ5IG9ubHkgVJIgZ2V0cyBkZWxldGVkCisKKworMTUuIERlbGV0ZSBmbG93cyB3aXRoIGNvbnN0cmFpbnQgb3V0X3BvcnQKKworVGVzdCBEZXNjcmlwdGlvbjogRGVsZXRlIGZsb3dzIGZpbHRlcmVkIGJ5IGFjdGlvbiBvdXRwdXQKK0RFTEVURSBhbmQgREVMRVRFIFNUUklDVCBjb21tYW5kcyBjYW4gYmUgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBvdXRwdXQgcG9ydC4gSWYgdGhlIG91dF9wb3J0IGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgb3RoZXIgdGhhbiBPRlBQX05PTkUsIGl0IGludHJvZHVjZXMgYSBjb25zdHJhaW50IHdoZW4gbWF0Y2hpbmcuIFRoaXMgY29uc3RyYWludCBpcyB0aGF0IHRoZSBydWxlIG11c3QgY29udGFpbiBhbiBvdXRwdXQgYWN0aW9uIGRpcmVjdGVkIGF0IHRoYXQgcG9ydC4KKworVGl0bGU6IGRlbGV0ZV93aXRoX291dHBvcnQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogMyAoMSBjb250cm9sIHBsYW5lLCAyIERhdGFwbGFuZXMpCitJbml0aWFsIFN0YXRlOiBDb25uZWN0aW9uIHNldHVwLCBDbGVhciBTd2l0Y2ggU3RhdGUKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0LU5vdGVzOgorCithKSBJbnNlcnQgYSBmbG93IEYgIHdpdGggb3V0cHV0IGFjdGlvbiA9IHBvcnQgeCAKK2IpIFNlbmQgYSBkZWxldGUgY29tbWFuZCBtYXRjaGluZyBmbG93IEYgLGJ1dCAgb3V0X3BvcnQgPXBvcnQgeQorYykgU2VuZCBhIHRhYmxlX3N0YXRzIHJlcXVlc3QgLCB2ZXJpZnkgbm8gZmxvdyBnZXRzIGRlbGV0ZWQgaS5lLiBhY3RpdmVfY291bnQ9MQorZCkgU2VuZCBhIGRlbGV0ZSBjb21tYW5kIG1hdGNoaW5nIGZsb3cgRiAsb3V0cG9ydCA9IHBvcnQgeAorZSkgU2VuZCBhIHRhYmxlX3N0YXRzIHJlcXVlc3QsIHZlcmlmeSBmbG93IEYgZ2V0cyBkZWxldGVkLgorCisKKzE2LiBBZGQsIG1vZGlmeSBmbG93cyB3aXRoIGNvbnN0cmFpbnQgb3V0cHV0CisKK1Rlc3QgRGVzY3JpcHRpb246IEFkZCwgbW9kaWZ5IGZsb3dzIHdpdGggb3V0cG9ydCBzZXQuIFRoaXMgZmllbGQgaXMgaWdub3JlZCBieSBBREQsIE1PRElGWSwgYW5kIE1PRElGWSBTVFJJQ1QgbWVzc2FnZXMuCitUaXRsZTogYWRkX21vZGlmeV93aXRoX291dHBvcnQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogNCAoMSBjb250cm9sIHBsYW5lLCAzIERhdGEgcGxhbmVzKQorSW5pdGlhbCBTdGF0ZTogQ29ubmVjdGlvbiBzZXR1cCwgQ2xlYXIgU3dpdGNoIFN0YXRlCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdC1Ob3RlczoKKworYSkgSW5zZXJ0IGEgZmxvdyBGIHdpdGggYWN0aW9uIEEgKG91dHB1dCAtLT4gcG9ydCB4KSAsIGJ1dCBvdXRfcG9ydCBmaWVsZCBpbiB0aGUgZmxvdyBtb2Qgc2V0IGFzIHBvcnQgeQorYikgU2VuZCBUYWJsZV9TdGF0c19SZXF1ZXN0LCBWZXJpZnkgRmxvdyBnZXRzIGluc2VydGVkLiAoIEZsb3cgYWRkIGlnbm9yZXMgb3V0X3BvcnQgZmllbGQpCitjKSBNb2RpZnkgdGhlIGFjdGlvbiBpbiBmbG93IEYgLCBhY3Rpb24gQZIgKCBvdXRwdXQgLS0+cG9ydCB6ICksIGJ1dCBvdXRfcG9ydCBmaWVsZCBpbiB0aGUgZmxvdyBtb2Qgc2V0IGFzIHBvcnQgeQorZCkgU2VuZCB0ZXN0IHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyBGIAorZSkgVmVyaWZ5IHBhY2tldCBpbXBsZW1lbnRzIGFjdGlvbiBBkiAoZmxvdyBtb2RpZnkgaWdub3JlcyBvdXRfcG9ydCBmaWVsZCkKKworMTcuIFZlcmlmeSB0aGF0IGlkbGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZAorCisKK1Rlc3QgRGVzY3JpcHRpb246IFZlcmlmeSB0aGF0IGlkbGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZAorVGl0bGU6IGlkbGVfdGltZW91dAorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1BvcnRzOiAzICgxIGNvbnRyb2wgcGxhbmUsIDIgRGF0YXBsYW5lcykKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIENsZWFyIFN3aXRjaCBTdGF0ZQorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QtTm90ZXM6CisKK2EpIEFkZCBhIGZsb3cgd2l0aCBpZGxlIHRpbWVvdXQgc2V0IGFuZCB3aXRoIE9GUFBfU0VORF9GTE9XX1JFTSBiaXQgc2V0CitiKSBWZXJpZnkgZmxvdyByZW1vdmVkIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCitjKSBWZXJpZnkgZmxvdyByZW1vdmVkIHJlYXNvbiB3YXMgaWRsZV90aW1lb3V0CitkKSBWZXJpZnkgdGhlIGR1cmF0aW9uX3NlYyBmaWVsZCBpcyAxIHNlYyAKKworCisxOC4gVmVyaWZ5IHRoYXQgaGFyZCB0aW1lb3V0IGlzIGltcGxlbWVudGVkCisKK1Rlc3QgRGVzY3JpcHRpb246IFZlcmlmeSB0aGF0IGhhcmQgdGltZW91dCBpcyBpbXBsZW1lbnRlZAorVGl0bGU6IGhhcmRfdGltZW91dAorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1BvcnRzOiAzICgxIGNvbnRyb2wgcGxhbmUsIDIgRGF0YXBsYW5lcykKK0luaXRpYWwgU3RhdGU6IENvbm5lY3Rpb24gc2V0dXAsIENsZWFyIFN3aXRjaCBTdGF0ZSAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0LU5vdGVzOgorCithKSBBZGQgYSBmbG93IHdpdGggaGFyZCB0aW1lb3V0ID0xIHNldCBhbmQgd2l0aCBPRlBQX1NFTkRfRkxPV19SRU0gYml0IHNldAorYikgVmVyaWZ5IGZsb3cgcmVtb3ZlZCBtZXNzYWdlIGlzIHJlY2VpdmVkLgorYykgVmVyaWZ5IGZsb3cgcmVtb3ZlZCByZWFzb24gd2FzIGhhcmRfdGltZW91dAorZCkgVmVyaWZ5IHRoZSBkdXJhdGlvbl9zZWMgZmllbGQgaXMgMSBzZWMgCisKKzE5LiBWZXJpZnkgdGhhdCBtZXNzYWdlcyBhcmUgZ2VuZXJhdGVkIGFzIGV4cGVjdGVkCisKK1Rlc3QgRGVzY3JpcHRpb246IFZlcmlmeSB0aGF0IEZsb3cgcmVtb3ZlZCBtZXNzYWdlcyBhcmUgZ2VuZXJhdGVkIGFzIGV4cGVjdGVkCitTaW5jZSCTZmxvdyByZW1vdmVkIG1lc3NhZ2VzIGJlaW5nIGdlbmVyYXRlZCB3aGVuIGZsYWcgaXMgc2V0lCBpcyBhbHJlYWR5IHRlc3RlZCBpbiB0aGUgYWJvdmUgdGVzdHMgCitTbyBoZXJlLCB3ZSB0ZXN0IHRoZSB2aWNlLXZlcnNhIGNvbmRpdGlvbi4KK1RpdGxlOiBmbG93X3RpbWVvdXQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitQb3J0czogMyAoMWNvbnRyb2wgcGxhbmUsIDFkYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBDb25uZWN0aW9uIHNldHVwLCBDbGVhciBTd2l0Y2ggU3RhdGUgCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworVGVzdC1Ob3RlczoKKworYSkgIEdlbmVyYXRlIGFuZCBpbnN0YWxsIGEgZmxvdyB3aXRoIGlkbGVfdGltZW91dCA9IDEgc2V0IG5vIE9GUEZGX1NFTkRfRkxPV19SRU0gZmxhZyBzZXQuCitiKSAgVmVyaWZ5IG5vIGZsb3cgcmVtb3ZlZCBtZXNzYWdlIGlzIHJlY2VpdmVkLgorYykgIFNlbmQgdGFibGVfc3RhdHNfcmVxdWVzdCBtZXNzYWdlIGFuZCB2ZXJpZnkgYWN0aXZlX2NvdW50PTAgCisKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjICBBY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworMS4gTm8gQWN0aW9uIGRyb3BzIHBhY2tldCAKKworVGVzdCBEZXNjcmlwdGlvbjogSWYgbm8gZm9yd2FyZCBhY3Rpb25zIGFyZSBwcmVzZW50LCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuIAorUmVxdWlyZWQgQWN0aW9uOiBEcm9wLiAKK0EgZmxvdy1lbnRyeSB3aXRoIG5vIHNwZWNpZmllZCBhY3Rpb24gaW5kaWNhdGVzIHRoYXQgYWxsIG1hdGNoaW5nIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQuIAorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1Rlc3QgVGl0bGU6ICBub19hY3Rpb25fZHJvcAorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOgorYSkgU2VuZCBGbG93IG1vZCBtZXNzYWdlIHdpdGhvdXQgYW55IGFjdGlvbiBzcGVjaWZpZWQKK2IpIFNlbmQgTiBwYWNrZXRzIG1hdGNoaW5nIHRoZSBmbG93IAorYykgVmVyaWZ5IHBhY2tldHMgYXJlIG5vdCByZWNlaXZlZCBvbiBhbnkgb2YgdGhlIGRhdGFwbGFuZSBwb3J0cyAKK2QpIFZlcmlmeSBwYWNrZXRzIGFyZSBub3QgZXZlbiBzZW50IHRvIHRoZSBjb250cm9sbGVyCisKKzIuICBHZXQgc3VwcG9ydGVkIGFjdGlvbnMgZnJvbSBzd2l0Y2gKKworVGVzdCBEZXNjcmlwdGlvbjogR2V0IHRoZSBzdXBwb3J0ZWQgYWN0aW9ucyBmcm9tIHN3aXRjaCBhbmQgbWFrZSBzYW5pdHkgY2hlY2tzLgorV2hlbiBjb25uZWN0aW5nIHRvIHRoZSBjb250cm9sbGVyLCBhIHN3aXRjaCBpbmRpY2F0ZSB3aGljaCBvZiB0aGUgk09wdGlvbmFsIEFjdGlvbnOUIGl0IHN1cHBvcnRzCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGFubm91bmNlbWVudAorUG9ydHM6IDEgKENvbnRyb2wgUGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKyAgICAgICAKK1Rlc3QgTm90ZXM6IAorYSkgU2VuZCBmZWF0dXJlc19yZXF1ZXN0IC4KK2IpIFZlcmlmeSByZXNwb25zZSBpcyBPRlBUX0ZFQVRVUkVTX1JFUExZCitjKSBWZXJpZnkgcmVwbHkgaGFzIHN1cHBvcnRlZCBhY3Rpb24gbGlzdCBzcGVjaWZpZWQKKworCisKKzMuIEZvcndhcmQgQWxsCisKK1Rlc3QgRGVzY3JpcHRpb246IFBhY2tldCBpcyBzZW50IHRvIGFsbCBkYXRhcGxhbmUgcG9ydHMgZXhjZXB0IGluZ3Jlc3MgcG9ydCB3aGVuIG91dHB1dCBhY3Rpb24ucG9ydCA9IE9GUFBfQUxMCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGZvcndhcmRfYWxsCitQb3J0czogMyAoMSBDb250cm9sIFBsYW5lIDIgRGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBzZXR1cAorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKKyAgICAgICAKK1Rlc3QgTm90ZXM6IAorCisgICBhKSBJbnN0YWxsIGEgZmxvdyB3aXRoIG91dHB1dCBhY3Rpb24ucG9ydCA9IE9GUFBfQUxMLgorICAgYikgVmVyaWZ5IHBhY2tldHMgYXJlIGZvcndhcmRlZCB0byBhbGwgcG9ydHMgZXhjZXB0IGluZ3Jlc3MgcG9ydC4KKworCis0LiBGb3J3YXJkIENvbnRyb2xsZXIgCitUZXN0IERlc2NyaXB0aW9uOiBQYWNrZXQgaXMgc2VudCB0byBjb250cm9sbGVyIG91dHB1dC5wb3J0ID0gT0ZQUF9DT05UUk9MTEVSCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGZvcndhcmRfY29udHJvbGxlcgorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCisgICAgICAgCitUZXN0IE5vdGVzOiAKKworYSkgSW5zZXJ0IGEgZmxvdyB3aXRoIGFjdGlvbiBvdXRwdXQgcG9ydCA9IE9GUFBfQ09OVFJPTExFUgorYikgU2VuZCBwYWNrZXRzIG1hdGNoaW5nIHRoZSBmbG93CitjKSBWZXJpZnkgcGFja2V0IHJlY2VpdmVkIG9uIHRoZSBjb250cm9sIHBsYW5lIGFzIGEgcGFja2V0X2luIG1lc3NhZ2UKKworCis1LiBGb3J3YXJkIExvY2FsIChUQkQgliBWZXJpZmljYXRpb24gb2YgcGFja2V0IGJlaW5nIHJlY2VpdmVkIGF0IGxvY2FsIG5ldHdvcmtpbmcgc3RhY2spCisKK1Rlc3QgRGVzY3JpcHRpb246IFBhY2tldCBpcyBzZW50IHRvIHN3aXRjaJJzIGxvY2FsIG5ldHdvcmtpbmcgc3RhY2sgaWYgb3V0cHV0LnBvcnQgPSBPRlBQX0xPQ0FMCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGZvcndhcmRfbG9jYWwKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBNYW5kYXRvcnkKKworICAgICAgIAorVGVzdCBOb3RlczogCisKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gb3V0cHV0IHBvcnQgPSBPRlBQX0xPQ0FMCitiKSBTZW5kIHBhY2tldHMgbWF0Y2hpbmcgdGhlIGZsb3cKK2MpIFZlcmlmeSBwYWNrZXQgcmVjZWl2ZWQgaW4gdGhlIHN3aXRjaJJzIGxvY2FsIG5ldHdvcmtpbmcgc3RhY2suCisKKzYuIEZvcndhcmQgVGFibGUKKworVGVzdCBEZXNjcmlwdGlvbjogUGVyZm9ybSBhY3Rpb25zIGluIGZsb3cgdGFibGUuIE9ubHkgZm9yIHBhY2tldC1vdXQgbWVzc2FnZXMuCitJZiB0aGUgb3V0cHV0IGFjdGlvbi5wb3J0IGluIHRoZSBwYWNrZXRvdXQgbWVzc2FnZSA9IE9GUC5UQUJMRSwgdGhlbiB0aGUgcGFja2V0IGltcGxlbWVudHMgdGhlIGFjdGlvbiBzcGVjaWZpZWQgaW4gdGhlIG1hdGNoaW5nIGZsb3cgb2YgdGhlIEZMT1ctVEFCTEUKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiAgZm9yd2FyZF90YWJsZQorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE1hbmRhdG9yeQorCitUZXN0IE5vdGVzOiAKKworYSkgSW5zZXJ0IGEgZmxvdyBGIHdpdGggYWN0aW9uIG91dHB1dC5wb3J0ID0gZWdyZXNzX3BvcnQKK2IpIFNlbmQgYSBPRlBUX1BBQ0tFVF9PVVQgbWVzc2FnZSB3aXRoIG91dCBwb3J0PU9GUFBfVEFCTEUgbWF0Y2hpbmcgZmxvdyBGIAorYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBvbiBlZ3Jlc3NfcG9ydCAoaS5lIHBhY2tldG91dCBtZXNzYWdlIGltcGxlbWVudGVkIHRoZSBhY3Rpb24gc3BlY2lmaWVkIGluIHRoZSBtYXRjaGluZyBmbG93IG9mIHRoZSBUYWJsZSkKKworCis3LiBGb3J3YXJkIEluIFBvcnQKKworVGVzdCBEZXNjcmlwdGlvbjogUGFja2V0IGlzIHNlbnQgdG8gaW5wdXQgcG9ydCBpZiBvdXRwdXQucG9ydCA9IE9GUFBfSU5QT1JUCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIGZvcndhcmRfaW5wb3J0CitQb3J0czogMyAoMSBDb250cm9sIFBsYW5lIDIgRGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBzZXR1cAorVGVzdC1GaWVsZDogTWFuZGF0b3J5CisKK1Rlc3QgTm90ZXM6IAorCithKSBJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uIG91dHB1dCBwb3J0ID0gT0ZQUF9JTlBPUlQKK2IpIFNlbmQgcGFja2V0cyBtYXRjaGluZyB0aGUgZmxvdworYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBvbiBhbGwgZGF0YXBsYW5lIHBvcnRzIGV4Y2VwdCBmb3IgaW5wdXQgcG9ydAorCisKKzguIEZvcndhcmQgRmxvb2QKKworVGVzdCBEZXNjcmlwdGlvbjogRkxPT0Q6IEZsb29kIHRoZSBwYWNrZXQgYWxvbmcgdGhlIG1pbmltdW0gc3Bhbm5pbmcgdHJlZSwgbm90IGluY2x1ZGluZyB0aGUgaW5jb21pbmcgaW50ZXJmYWNlLiAKK1BhY2tldCBpcyBzZW50IGFsbCB0aGUgZGF0YXBsYW5lIHBvcnRzIGV4Y2VwdCB0aGUgaW5wdXQgcG9ydCBpZiBvdXRwdXQucG9ydCA9IE9GUFBfRkxPT0QKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiAgZm9yd2FyZF9mbG9vZAorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE9wdGlvbmFsCisKK1Rlc3QgTm90ZXM6IAorCithKSBJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uIG91dHB1dCBwb3J0ID0gT0ZQUF9GTE9PRAorYikgU2VuZCBwYWNrZXRzIG1hdGNoaW5nIHRoZSBmbG93CitjKSBWZXJpZnkgcGFja2V0IHJlY2VpdmVkIG9uIGFsbCBkYXRhcGxhbmUgcG9ydHMgZXhjZXB0IGZvciBpbnB1dCBwb3J0CisKKzkuIE11bHRpcGxlIFBvcnRzIC0tIFRCRAorCisxMC4gRm9yd2FyZCBFbnF1ZXVlIC0tLSBUQkQKKworCisxMS4gU2V0IFZMQU4gSWQKKworVGVzdCBEZXNjcmlwdGlvbjogQXR0YWNoIFZMQU4gSUQgdG8gdW50YWdnZWQgcGFja2V0CitJZiBubyBWTEFOIGlzIHByZXNlbnQsIGEgbmV3IGhlYWRlciBpcyBhZGRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgVkxBTiBJRCBhbmQgcHJpb3JpdHkgb2YgemVyby4KK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiAgYWRkX3ZsYW5faWQKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBPcHRpb25hbAorCisgICAgICAgCitUZXN0IE5vdGVzOiAKKworYSkgSW5zZXJ0IGEgZmxvdyB3aXRoIGFjdGlvbiA9IE9GUEFUX1NFVF9WTEFOX1ZJRCAsIHZsYW5fdmlkID0geCAKK2IpIFNlbmQgcGFja2V0IChsZW5ndGggPSAxMDAgYnl0ZXMpIG1hdGNoaW5nIHRoZSBmbG93CitiKSAgIFZlcmlmeSBwYWNrZXQgcmVjZWl2ZWQgaGFzIHZsYW4gaWQgYWRkZWQgdG8gaXQuIChJLmUgbGVuZ3RoIG9mIHBhY2tldCB3aXRoIHZpZCBpcyAxMDQgYnl0ZXMsIGRsX3ZsYW5fZW5hYmxlID0gVHJ1ZSwgZGxfdmxhbj0geCwgZGxfdmxhbl9wY3A9MCkgIAorICAgCisxMi4gTW9kaWZ5IFZMQU4gSWQKKworVGVzdCBEZXNjcmlwdGlvbjogTW9kaWZpZXMgVmxhbiBUYWcgZm9yIGEgdGFnZ2VkIHBhY2tldAorSWYgYSBWTEFOIGhlYWRlciBhbHJlYWR5IGV4aXN0cywgdGhlIFZMQU4gSUQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG1vZGlmeV92bGFuX2lkCitQb3J0czogMyAoMSBDb250cm9sIFBsYW5lIDIgRGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBzZXR1cAorVGVzdC1GaWVsZDogT3B0aW9uYWwKKworICAgICAgIAorVGVzdCBOb3RlczogCithKSBJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uID0gT0ZQQVRfU0VUX1ZMQU5fVklEICwgdmxhbl92aWQgPSB4IAorYikgICBTZW5kIHBhY2tldCAobGVuZ3RoID0gMTAwIGJ5dGVzKSBtYXRjaGluZyB0aGUgZmxvdworYykgICBWZXJpZnkgcGFja2V0IHJlY2VpdmVkIGhhcyB2bGFuIGlkIHJld3JpdHRlbi4gKEkuZSBsZW5ndGggb2YgMTA0IGJ5dGVzLCBkbF92bGFuX2VuYWJsZSA9IFRydWUsIGRsX3ZsYW49eCkgIAorCisKKzEzLiBBZGQgVkxBTiBQcmlvcml0eSB0byBhbiB1bnRhZ2dlZCBwYWNrZXQKKworVGVzdCBEZXNjcmlwdGlvbjogQXR0YWNoIFZMQU4gcHJpb3JpdHkgdG8gYW4gdW50YWdnZWQgcGFja2V0LgorU2luY2UsIG5vIFZMQU4gSUQgaXMgcHJlc2VudDsgYSBuZXcgaGVhZGVyIGlzIGFkZGVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmlvcml0eSBhbmQgYSBWTEFOIElEIG9mIHplcm8uCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIHZsYW5fcHJpb191bnRhZ2dlZAorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE9wdGlvbmFsCisKKyAgICAgICAKK1Rlc3QgTm90ZXM6IAorCithKSBJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uID0gT0ZQQVRfU0VUX1ZMQU5fUENQICwgZGxfdmxhbl9wY3AgPXgKK2IpIFNlbmQgdW50YWdnZWQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93ICAKK2MpIFZlcmlmeSBwYWNrZXQgcmVjZWl2ZWQgaGFzIHZsYW4gcHJpb3JpdHkgYWRkZWQgdG8gaXQgYWxvbmcgd2l0aCBhIHZpZCB2YWx1ZSBvZiB6ZXJvIGFkZGVkIGJ5IGRlZmF1bHQgICAoZGxfdmxhbl9lbmFibGUgLCBkbF92bGFuID0gMCAsIGRsX3ZsYW5fcGNwID14ICkKKworMTQuIFJld3JpdGUgZXhpc3RpbmcgVkxBTiBwcmlvcml0eQorCitUZXN0IERlc2NyaXB0aW9uOiBNb2RpZnkgVkxBTiBwcmlvcml0eSBmb3IgYSB0YWdnZWQgcGFja2V0LgorVGVzdCBtb2RlOiBBdXRvbWF0ZWQKK1Rlc3QgVGl0bGU6ICBtb2RpZnlfdmxhbl9wcmlvCitQb3J0czogMyAoMSBDb250cm9sIFBsYW5lIDIgRGF0YXBsYW5lKQorSW5pdGlhbCBTdGF0ZTogRGVmYXVsdCAoQ2xlYXIgc3dpdGNoIHN0YXRlKSwgQ29ubmVjdGlvbiBzZXR1cAorVGVzdC1GaWVsZDogT3B0aW9uYWwKKworICAgICAgIAorVGVzdCBOb3RlczogCisKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gPSBPRlBBVF9TRVRfVkxBTl9QQ1AgLCBkbF92bGFuX3BjcCA9bmV3X3ZsYW5fcGNwCitiKSBTZW5kIHRhZ2dlZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3cgIChkbF92bGFuID0gb2xkX3ZsYW5faWQgLCBkbF92bGFuX3BjcCA9IG9sZF92bGFuX3BjcCkKK2MpIFZlcmlmeSBwYWNrZXQgcmVjZWl2ZWQgaGFzIHZsYW4gaWQgYWRkZWQgdG8gaXQuIChkbF92bGFuX2VuYWJsZSAsIGRsX3ZsYW4gPSAwICwgZGxfdmxhbl9wY3AgPSBuZXdfdmxhbl9wY3ApCisKKworCisKKzE1LiBNb2RpZnkgTDIgU3JjIEFkZHJlc3MKKworVGVzdCBEZXNjcmlwdGlvbjogTW9kaWZ5IEV0aGVybmV0IFNyYyBBZGRyZXNzIG9mIGEgcGFja2V0CitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG1vZGlmeV9sMl9zcmMKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBPcHRpb25hbAorCisgICAgICAgCitUZXN0IE5vdGVzOiAKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gPSBPRlBBVF9TRVRfRExfU1JDICwgZGxfc3JjID1uZXdfZGxfc3JjCitiKSBTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyAgKGRsX2RzdCA9IG9sZF9kbF9zcmMgKQorYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBoYXMgc3JjIGFkZHJlc3MgcmV3cml0dGVuLiAoZGxfc3JjPSBuZXdfZGxfc3JjKQorCisKKworMTYuIE1vZGlmeSBMMiBEZXN0aW5hdGlvbiBBZGRyZXNzCisKK1Rlc3QgRGVzY3JpcHRpb246IE1vZGlmeSBFdGhlcm5ldCBEZXN0aW5hdGlvbiBBZGRyZXNzIG9mIGEgcGFja2V0CitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG1vZGlmeV9sMl9kc3QKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBPcHRpb25hbAorCisgICAgICAgCitUZXN0IE5vdGVzOiAKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gPSBPRlBBVF9TRVRfRExfRFNUICwgZGxfZHN0ID1uZXdfZGxfZHN0CitiKSBTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyAgKGRsX2RzdCA9IG9sZF9kbF9zcmMgKQorYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBoYXMgZGVzdGluYXRpb24gYWRkcmVzcyByZXdyaXR0ZW4uIChkbF9zcmM9IG5ld19kbF9zcmMpCisKKzE3LiBTdHJpcCBWTEFOIGhlYWRlciCWIChJbiBvZnRlc3QsICBuZWVkIHRvIGFkZCBpbiBjb25mb3JtYW5jZSB0ZXN0LXN1aXRlICkKKworCisxOC4gTW9kaWZ5IEwzIFNyYyBBZGRyZXNzCisKK1Rlc3QgRGVzY3JpcHRpb246IE1vZGlmeSBOZXR3b3JrIFNyYyBBZGRyZXNzIG9mIGEgcGFja2V0CitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG1vZGlmeV9sM19zcmMKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBPcHRpb25hbAorCisgICAgICAgCitUZXN0IE5vdGVzOiAKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gPSBPRlBBVF9TRVRfTldfU1JDICwgbndfc3JjID1uZXdfbndfc3JjCitiKSBTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyAgKG53X3NyYyA9IG9sZF9ud19zcmMgKQorYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBoYXMgbncgYWRkcmVzcyByZXdyaXR0ZW4uIChud19zcmM9IG5ld19ud19zcmMpCisKKworCisKKworCisKKzE5LiBNb2RpZnkgTDMgRHN0IEFkZHJlc3MKKworVGVzdCBEZXNjcmlwdGlvbjogTW9kaWZ5IE5ldHdvcmsgRHN0IEFkZHJlc3Mgb2YgYSBwYWNrZXQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiAgbW9kaWZ5X2wzX2RzdAorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE9wdGlvbmFsCisKKyAgICAgICAKK1Rlc3QgTm90ZXM6IAorYSkgSW5zZXJ0IGEgZmxvdyB3aXRoIGFjdGlvbiA9IE9GUEFUX1NFVF9OV19EU1QgLCBud19kc3QgPW5ld19ud19kc3QKK2IpIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93ICAobndfZHN0ID0gb2xkX253X2RzdCApCitjKSBWZXJpZnkgcGFja2V0IHJlY2VpdmVkIGhhcyBudyBkZXN0aW5hdGlvbiBhZGRyZXNzIHJld3JpdHRlbi4gKG53X2RzdD0gbmV3X253X2RzdCkKKworCisKKworMjAuIE1vZGlmeSBMNCBTcmMgQWRkcmVzcworCitUZXN0IERlc2NyaXB0aW9uOiBNb2RpZnkgVENQIFNvdXJjZSBQb3J0IG9mIGEgcGFja2V0CitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG1vZGlmeV9sNF9zcmMKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBPcHRpb25hbAorCisgICAgICAgCitUZXN0IE5vdGVzOiAKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gPSBPRlBBVF9TRVRfVFBfU1JDICwgdGNwX3Nwb3J0ID1uZXdfdGNwX3Nwb3J0CitiKSBTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyAgKHRjcF9zcG9ydCA9IG9sZF90Y3Bfc3BvcnQgKQorYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBoYXMgdGNwIHNvdXJjZSBwb3J0IHJld3JpdHRlbi4gKHRjcF9zcG9ydCA9IG5ld190Y3Bfc3BvcnQpCisKKworMjEuIE1vZGlmeSBMNCBEc3QgQWRkcmVzcworCitUZXN0IERlc2NyaXB0aW9uOiBNb2RpZnkgVENQIERlc3RpbmF0aW9uIFBvcnQgb2YgYSBwYWNrZXQKK1Rlc3QgbW9kZTogQXV0b21hdGVkCitUZXN0IFRpdGxlOiAgbW9kaWZ5X2w0X2RzdAorUG9ydHM6IDMgKDEgQ29udHJvbCBQbGFuZSAyIERhdGFwbGFuZSkKK0luaXRpYWwgU3RhdGU6IERlZmF1bHQgKENsZWFyIHN3aXRjaCBzdGF0ZSksIENvbm5lY3Rpb24gc2V0dXAKK1Rlc3QtRmllbGQ6IE9wdGlvbmFsCisKKyAgICAgICAKK1Rlc3QgTm90ZXM6IAorYSkgSW5zZXJ0IGEgZmxvdyB3aXRoIGFjdGlvbiA9IE9GUEFUX1NFVF9UUF9EU1QgLCB0Y3BfZHBvcnQgPW5ld190Y3BfZHBvcnQKK2IpIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93ICAodGNwX2Rwb3J0ID0gb2xkX3RjcF9kcG9ydCApCitjKSBWZXJpZnkgcGFja2V0IHJlY2VpdmVkIGhhcyB0Y3AgZGVzdGluYXRpb24gcG9ydCByZXdyaXR0ZW4uICh0Y3Bfc3BvcnQgPSBuZXdfdGNwX3Nwb3J0KQorCisKKworMjIuIE1vZGlmeSBUT1MKKworVGVzdCBEZXNjcmlwdGlvbjogTW9kaWZ5IE5ldHdvcmsgVHlwZSBvZiBzZXJ2aWNlCitUZXN0IG1vZGU6IEF1dG9tYXRlZAorVGVzdCBUaXRsZTogIG1vZGlmeV90b3MKK1BvcnRzOiAzICgxIENvbnRyb2wgUGxhbmUgMiBEYXRhcGxhbmUpCitJbml0aWFsIFN0YXRlOiBEZWZhdWx0IChDbGVhciBzd2l0Y2ggc3RhdGUpLCBDb25uZWN0aW9uIHNldHVwCitUZXN0LUZpZWxkOiBPcHRpb25hbAorCisgICAgICAgCitUZXN0IE5vdGVzOiAKK2EpIEluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gPSBPRlBBVF9TRVRfTldfVE9TLCBpcF90b3MgPW5ld19pcF90b3MKK2IpIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93ICAoaXBfdG9zPSBvbGRfaXBfdG9zKQorYykgVmVyaWZ5IHBhY2tldCByZWNlaXZlZCBoYXMgdGNwIGRlc3RpbmF0aW9uIHBvcnQgcmV3cml0dGVuLiAoaXBfdG9zPSBuZXdfaXBfdG9zKQorCisKKzIzLiBPcmRlciBOb3QgcG9zc2libGUgIC0tIFRCRAorCisyNC4gU2VxdWVudGlhbCBleGVjdXRpb24gIC0tIFRCRCAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvQWN0aW9ucy5weSBiL3Rlc3RzL0FjdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExZDljNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL0FjdGlvbnMucHkKQEAgLTAsMCArMSw4NDcgQEAKKworIiIiVGhlc2UgdGVzdHMgZmFsbCB1bmRlciBDb25mb3JtYW5jZSBUZXN0LVN1aXRlIChPRi1TV0lUQ0gtMS4wLjAgVGVzdENhc2VzKS4KKyAgICBSZWZlciBEb2N1bWVudGF0aW9uIC0tIERldGFpbGVkIHRlc3RpbmcgbWV0aG9kb2xvZ3kgCisgICAgPFNvbWUgb2YgdGVzdC1jYXNlcyBhcmUgZGlyZWN0bHkgdGFrZW4gZnJvbSBvZnRlc3Q+ICIiIgorCisiVGVzdCBTdWl0ZSA2ICAtLS0+IEFjdGlvbnMgIgorCisKK2ltcG9ydCBsb2dnaW5nCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJhbmRvbQorCitpbXBvcnQgb2Z0ZXN0LmNvbnRyb2xsZXIgYXMgY29udHJvbGxlcgoraW1wb3J0IG9mdGVzdC5jc3RydWN0IGFzIG9mcAoraW1wb3J0IG9mdGVzdC5tZXNzYWdlIGFzIG1lc3NhZ2UKK2ltcG9ydCBvZnRlc3QuZGF0YXBsYW5lIGFzIGRhdGFwbGFuZQoraW1wb3J0IG9mdGVzdC5hY3Rpb24gYXMgYWN0aW9uCitpbXBvcnQgb2Z0ZXN0LnBhcnNlIGFzIHBhcnNlCitpbXBvcnQgYmFzaWMKK2ltcG9ydCB0aW1lCisKK2Zyb20gdGVzdHV0aWxzIGltcG9ydCAqCitmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCitmcm9tIEZ1bmNVdGlscyBpbXBvcnQgKgorCithY19wb3J0X21hcCA9IE5vbmUKK2FjX2xvZ2dlciA9IE5vbmUKK2FjX2NvbmZpZyA9IE5vbmUKK29mX3BvcnRzID0gTm9uZQorCitkZWYgdGVzdF9zZXRfaW5pdChjb25maWcpOgorICAgIGJhc2ljLnRlc3Rfc2V0X2luaXQoY29uZmlnKQorICAgIAorICAgIGdsb2JhbCBhY19wb3J0X21hcAorICAgIGdsb2JhbCBhY19sb2dnZXIKKyAgICBnbG9iYWwgYWNfY29uZmlnCisgICAgZ2xvYmFsIG9mX3BvcnRzCisKKyAgICBhY19sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiUnVubmluZyBBY3Rpb25zIHRlc3Qtc3VpdGUiKQorICAgIGFjX2xvZ2dlci5pbmZvKCJJbml0aWFsaXppbmcgdGVzdCBzZXQiKQorICAgIGFjX3BvcnRfbWFwID0gY29uZmlnWyJwb3J0X21hcCJdCisgICAgYWNfY29uZmlnID0gY29uZmlnCisgICAgCisgICAgb2ZfcG9ydHMgPSBhY19wb3J0X21hcC5rZXlzKCkKKyAgICBvZl9wb3J0cy5zb3J0KCkKKworICAgCisKK2NsYXNzIG5vX2FjdGlvbl9kcm9wKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisKKyAgICAiIiJOb0FjdGlvbkRyb3AgOiBubyBhY3Rpb24gYWRkZWQgdG8gZmxvdyAsIGRyb3BzIHRoZSBwYWNrZXQuIiIiCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJSdW5uaW5nIG5vX2FjdGlvbl9kcm9wIHRlc3QiKQorCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc3RhbGwgYSBmbG93IHdpdGhvdXQgYWN0aW9uIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0cyBtYXRjaGluZyB0aGF0IGZsb3ciKQorICAgICAgICBhY19sb2dnZXIuaW5mbygiRXhwZWN0aW5nIHN3aXRjaCB0byBkcm9wIGFsbCBwYWNrZXRzIikKKworICAgICAgICAjIEluc2VydCBhIGZsb3cgd2lsZGNhcmQgYWxsIHdpdGhvdXQgYW55IGFjdGlvbiAKKyAgICAgICAgcGt0ID0gc2ltcGxlX3RjcF9wYWNrZXQoKQorICAgICAgICBtYXRjaCA9IHBhcnNlLnBhY2tldF90b19mbG93X21hdGNoKHBrdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoIGlzIG5vdCBOb25lLCAiQ291bGQgbm90IGdlbmVyYXRlIGZsb3cgbWF0Y2ggZnJvbSBwa3QiKQorICAgICAgICBtYXRjaC53aWxkY2FyZHM9b2ZwLk9GUEZXX0FMTAorICAgICAgICBtYXRjaC5pbl9wb3J0ID0gb2ZfcG9ydHNbMF0KKyAgICAgICAgCisgICAgICAgIG1zZyA9IG1lc3NhZ2UuZmxvd19tb2QoKQorICAgICAgICBtc2cub3V0X3BvcnQgPSBvZnAuT0ZQUF9OT05FCisgICAgICAgIG1zZy5jb21tYW5kID0gb2ZwLk9GUEZDX0FERAorICAgICAgICBtc2cuYnVmZmVyX2lkID0gMHhmZmZmZmZmZgorICAgICAgICBtc2cubWF0Y2ggPSBtYXRjaAorICAgICAgICBydiA9IHNlbGYuY29udHJvbGxlci5tZXNzYWdlX3NlbmQobXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnYgIT0gLTEsICJFcnJvciBpbnN0YWxsaW5nIGZsb3cgbW9kIikKKyAgICAgICAgCisgICAgICAgICNTZW5kaW5nIE4gcGFja2V0cyBtYXRjaGluZyB0aGUgZmxvdyBpbnNlcnRlZAorICAgICAgICBmb3IgcGt0X2NudCBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIHNlbGYuZGF0YXBsYW5lLnNlbmQob2ZfcG9ydHNbMF0sc3RyKHBrdCkpCisgICAgICAgIAorICAgICAgICAjVmVyaWZ5IHBhY2tldHMgbm90IHJlY2lldmVkIG9uIGFueSBvZiB0aGUgZGF0YXBsYW5lIHBvcnRzIAorICAgICAgICBmb3IgYW55X3BvcnQgaW4gb2ZfcG9ydHM6CisgICAgICAgICAgICAocmN2X3BvcnQsIHJjdl9wa3QsIHBrdF90aW1lKSA9IHNlbGYuZGF0YXBsYW5lLnBvbGwodGltZW91dD0xLCBwb3J0X251bWJlcj1hbnlfcG9ydCxleHBfcGt0PXBrdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyY3ZfcGt0IGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIlBhY2tldCByZWNlaXZlZCBvbiBwb3J0ICIgKyBzdHIoYW55X3BvcnQpKQorCisgICAgICAgICNWZXJpZnkgcGFja2V0cyBub3Qgc2VudCBvbiBjb250cm9sIHBsYW5lIGVpdGhlcgorICAgICAgICAocmVzcG9uc2UsIHJhdykgPSBzZWxmLmNvbnRyb2xsZXIucG9sbChvZnAuT0ZQVF9QQUNLRVRfSU4sIHRpbWVvdXQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAnUGFja2V0cyBub3QgcmVjZWl2ZWQgb24gY29udHJvbCBwbGFuZScpCisKKworY2xhc3MgYW5ub3VuY2VtZW50KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiQW5ub3VuY2VtZW50IDogR2V0IGFsbCBzdXBwb3J0ZWQgYWN0aW9ucyBieSB0aGUgc3dpdGNoLgorICAgIFNlbmQgT0ZQVF9GRUFUVVJFU19SRVFVRVNUIHRvIGdldCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgc3cuIiIiCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiUnVubmluZyBhbm5vdW5jZW1lbnQgdGVzdCIpCisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmRpbmcgRmVhdHVyZXNfUmVxdWVzdCIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJFeHBlY3RpbmcgRmVhdHVyZXMgUmVwbHkgd2l0aCBzdXBwb3J0ZWQgYWN0aW9ucyIpCisKKyAgICAgICAgIyBTZW5kaW5nIEZlYXR1cmVzX1JlcXVlc3QKKyAgICAgICAgcmVxdWVzdCA9IG1lc3NhZ2UuZmVhdHVyZXNfcmVxdWVzdCgpCisgICAgICAgIChyZXBseSwgcGt0KSA9IHNlbGYuY29udHJvbGxlci50cmFuc2FjdChyZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbHkgaXMgbm90IE5vbmUsICJGYWlsZWQgdG8gZ2V0IGFueSByZXBseSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwbHkuaGVhZGVyLnR5cGUsIG9mcC5PRlBUX0ZFQVRVUkVTX1JFUExZLCdSZXNwb25zZSBpcyBub3QgRmVhdHVyZXNfcmVwbHknKQorICAgICAgICAKKyAgICAgICAgc3VwcG9ydGVkX2FjdGlvbnMgPVtdCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9PVVRQVVQpOgorICAgICAgICAgICAgc3VwcG9ydGVkX2FjdGlvbnMuYXBwZW5kKCdPRlBBVF9PVVRQVVQnKQorICAgICAgICBpZihyZXBseS5hY3Rpb25zICYxPDxvZnAuT0ZQQVRfU0VUX1ZMQU5fVklEKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX1ZMQU5fVklEJykKKyAgICAgICAgaWYocmVwbHkuYWN0aW9ucyAmMTw8b2ZwLk9GUEFUX1NFVF9WTEFOX1BDUCk6CisgICAgICAgICAgICBzdXBwb3J0ZWRfYWN0aW9ucy5hcHBlbmQoJ09GUEFUX1NFVF9WTEFOX1BDUCcpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TVFJJUF9WTEFOKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU1RSSVBfVkxBTicpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TRVRfRExfU1JDKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX0RMX1NSQycpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TRVRfRExfRFNUKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX05XX1NSQycpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TRVRfTldfRFNUKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX05XX0RTVCcpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TRVRfTldfVE9TKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX05XX1RPUycpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TRVRfVFBfU1JDKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX1RQX1NSQycpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9TRVRfVFBfRFNUKToKKyAgICAgICAgICAgIHN1cHBvcnRlZF9hY3Rpb25zLmFwcGVuZCgnT0ZQQVRfU0VUX1RQX0RTVCcpCisgICAgICAgIGlmKHJlcGx5LmFjdGlvbnMgJjE8PG9mcC5PRlBBVF9WRU5ET1IpOgorICAgICAgICAgICAgc3VwcG9ydGVkX2FjdGlvbnMuYXBwZW5kKCdPRlBBVF9WRU5ET1InKQorICAgICAgICBpZihyZXBseS5hY3Rpb25zICYxPDxvZnAuT0ZQQVRfRU5RVUVVRSk6CisgICAgICAgICAgICBzdXBwb3J0ZWRfYWN0aW9ucy5hcHBlbmQoJ09GUEFUX0VOUVVFVUUnKQorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oc3VwcG9ydGVkX2FjdGlvbnMpCisgICAgICAgIAorCitjbGFzcyBmb3J3YXJkX2FsbChiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorICAgIAorICAgICIiIkZvcndhcmRBbGwgOiBQYWNrZXQgaXMgc2VudCB0byBhbGwgZGF0YXBsYW5lIHBvcnRzCisgICAgZXhjZXB0IGluZ3Jlc3MgcG9ydCB3aGVuIG91dHB1dCBhY3Rpb24ucG9ydCA9IE9GUFBfQUxMIiIiCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiUnVubmluZyBmb3J3YXJkIGFsbCB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKyAgICAgICAgCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnQgYSBmbG93IHdpdGggb3V0cHV0IGFjdGlvbiBwb3J0IE9GUFBfQUxMIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkV4cGVjdGluZyBwYWNrZXQgb24gYWxsIGRhdGFwbGFuZSBwb3J0cyBleGNlcHQgaW5ncmVzc19wb3J0IikKKyAgICAgICAgCisgICAgICAgICNDcmVhdGUgYSBwYWNrZXQKKyAgICAgICAgcGt0ID0gc2ltcGxlX3RjcF9wYWNrZXQoKQorICAgICAgICBtYXRjaCA9IHBhcnNlLnBhY2tldF90b19mbG93X21hdGNoKHBrdCkKKyAgICAgICAgYWN0ID0gYWN0aW9uLmFjdGlvbl9vdXRwdXQoKQorCisgICAgICAgICNEZWxldGUgYWxsIGZsb3dzIAorICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIDAsICJGYWlsZWQgdG8gZGVsZXRlIGFsbCBmbG93cyIpCisgICAgICAgIGluZ3Jlc3NfcG9ydD1vZl9wb3J0c1swXQorICAgICAgICBtYXRjaC5pbl9wb3J0ID0gaW5ncmVzc19wb3J0CisKKyAgICAgICAgI0NyZWF0ZSBhIGZsb3cgbW9kIHdpdGggYWN0aW9uLnBvcnQgPSBPRlBQX0FMTAorICAgICAgICByZXF1ZXN0ID0gbWVzc2FnZS5mbG93X21vZCgpCisgICAgICAgIHJlcXVlc3QubWF0Y2ggPSBtYXRjaAorICAgICAgICByZXF1ZXN0Lm1hdGNoLndpbGRjYXJkcyA9IG9mcC5PRlBGV19BTEwmfm9mcC5PRlBGV19JTl9QT1JUCisgICAgICAgIGFjdC5wb3J0ID0gb2ZwLk9GUFBfQUxMCisgICAgICAgIHJlcXVlc3QuYWN0aW9ucy5hZGQoYWN0KQorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydGluZyBmbG93IikKKyAgICAgICAgcnYgPSBzZWxmLmNvbnRyb2xsZXIubWVzc2FnZV9zZW5kKHJlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydiAhPSAtMSwgIkVycm9yIGluc3RhbGxpbmcgZmxvdyBtb2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvX2JhcnJpZXIoc2VsZi5jb250cm9sbGVyKSwgMCwgIkJhcnJpZXIgZmFpbGVkIikKKworICAgICAgICAjU2VuZCBQYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3cKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmRpbmcgcGFja2V0IHRvIGRwIHBvcnQgIiArIHN0cihpbmdyZXNzX3BvcnQpKQorICAgICAgICBzZWxmLmRhdGFwbGFuZS5zZW5kKGluZ3Jlc3NfcG9ydCwgc3RyKHBrdCkpCisKKyAgICAgICAgI1ZlcmlmeWluZyBwYWNrZXRzIHJlY2lldmVkIG9uIGV4cGVjdGVkIGRhdGFwbGFuZSBwb3J0cworICAgICAgICB5ZXNfcG9ydHMgPSBzZXQob2ZfcG9ydHMpLmRpZmZlcmVuY2UoW2luZ3Jlc3NfcG9ydF0pCisgICAgICAgIHJlY2VpdmVfcGt0X2NoZWNrKHNlbGYuZGF0YXBsYW5lLCBwa3QsIHllc19wb3J0cywgW2luZ3Jlc3NfcG9ydF0sCisgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgYWNfbG9nZ2VyLCBhY19jb25maWcpCisKKworY2xhc3MgZm9yd2FyZF9jb250cm9sbGVyKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiRm9yd2FyZENvbnRyb2xsZXIgOiBQYWNrZXQgaXMgc2VudCB0byBjb250cm9sbGVyIAorICAgIG91dHB1dC5wb3J0ID0gT0ZQUF9DT05UUk9MTEVSIiIiCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJSdW5uaW5nIGZvcndhcmRfY29udHJvbGxlciB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKyAgICAgICAgCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnQgYSBmbG93IHdpdGggb3V0cHV0IGFjdGlvbiBwb3J0IE9GUFBfQ09OVFJPTExFUiIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJFeHBlY3RpbmcgcGFja2V0IG9uIHRoZSBjb250cm9sIHBsYW5lIikKKyAgICAgICAgCisgICAgICAgICNDcmVhdGUgcGFja2V0CisgICAgICAgIHBrdCA9IHNpbXBsZV90Y3BfcGFja2V0KCkKKyAgICAgICAgbWF0Y2ggPSBwYXJzZS5wYWNrZXRfdG9fZmxvd19tYXRjaChwa3QpCisgICAgICAgIGFjdCA9IGFjdGlvbi5hY3Rpb25fb3V0cHV0KCkKKworICAgICAgICBmb3IgaW5ncmVzc19wb3J0IGluIG9mX3BvcnRzOgorICAgICAgICAgICAgI0RlbGV0ZSBhbGwgZmxvd3MgCisgICAgICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorCisgICAgICAgICAgICBtYXRjaC5pbl9wb3J0ID0gaW5ncmVzc19wb3J0CisgICAgICAgICAgICAKKyAgICAgICAgICAgICNDcmVhdGUgYSBmbG93IG1vZCBtZXNzYWdlCisgICAgICAgICAgICByZXF1ZXN0ID0gbWVzc2FnZS5mbG93X21vZCgpCisgICAgICAgICAgICByZXF1ZXN0Lm1hdGNoID0gbWF0Y2gKKyAgICAgICAgICAgIGFjdC5wb3J0ID0gb2ZwLk9GUFBfQ09OVFJPTExFUgorICAgICAgICAgICAgcmVxdWVzdC5hY3Rpb25zLmFkZChhY3QpCisKKyAgICAgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnRpbmcgZmxvdyIpCisgICAgICAgICAgICBydiA9IHNlbGYuY29udHJvbGxlci5tZXNzYWdlX3NlbmQocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydiAhPSAtMSwgIkVycm9yIGluc3RhbGxpbmcgZmxvdyBtb2QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb19iYXJyaWVyKHNlbGYuY29udHJvbGxlciksIDAsICJCYXJyaWVyIGZhaWxlZCIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgICNTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdworICAgICAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmRpbmcgcGFja2V0IHRvIGRwIHBvcnQgIiArIHN0cihpbmdyZXNzX3BvcnQpKQorICAgICAgICAgICAgc2VsZi5kYXRhcGxhbmUuc2VuZChpbmdyZXNzX3BvcnQsIHN0cihwa3QpKQorCisgICAgICAgICAgICAjVmVyaWZ5aW5nIHBhY2tldCByZWNpZXZlZCBvbiB0aGUgY29udHJvbCBwbGFuZSBwb3J0CisgICAgICAgICAgICAocmVzcG9uc2UsIHJhdykgPSBzZWxmLmNvbnRyb2xsZXIucG9sbChvZnAuT0ZQVF9QQUNLRVRfSU4sIHRpbWVvdXQ9MTApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2UgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAnUGFja2V0IGluIG1lc3NhZ2Ugbm90IHJlY2VpdmVkIGJ5IGNvbnRyb2xsZXInKQorICAgIAorCisKK2NsYXNzIGZvcndhcmRfbG9jYWwoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKKyAgIAorICAgICIiIkZvcndhcmRMb2NhbCA6IFBhY2tldCBpcyBzZW50IHRvICBPRlBQX0xPQ0FMIHBvcnQgLiAKKyAgICAgICAgVEJEIDogVG8gdmVyaWZ5IHBhY2tldCByZWNpZXZlZCBpbiB0aGUgbG9jYWwgbmV0d29ya2luZyBzdGFjayBvZiBzd2l0Y2giIiIKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJSdW5uaW5nIEZvcndhcmQgTG9jYWwgdGVzdCIpCisKKyAgICAgICAgb2ZfcG9ydHMgPSBhY19wb3J0X21hcC5rZXlzKCkKKyAgICAgICAgb2ZfcG9ydHMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob2ZfcG9ydHMpID4gMSwgIk5vdCBlbm91Z2ggcG9ydHMgZm9yIHRlc3QiKQorICAgICAgICAKKyAgICAgICAgI0NsZWFyIHN3aXRjaCBzdGF0ZQorICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIDAsICJGYWlsZWQgdG8gZGVsZXRlIGFsbCBmbG93cyIpCisgICAgICAgIAorICAgICAgICBhY19sb2dnZXIuaW5mbygiSW5zZXJ0IGEgZmxvdyB3aXRoIG91dHB1dCBhY3Rpb24gcG9ydCBPRlBQX0xPQ0FMIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkV4cGVjdGluZyBwYWNrZXQgaW4gdGhlIGxvY2FsIG5ldHdvcmtpbmcgc3RhY2sgb2Ygc3dpdGNoIikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcGt0ID0gc2ltcGxlX3RjcF9wYWNrZXQoKQorICAgICAgICBtYXRjaCA9IHBhcnNlLnBhY2tldF90b19mbG93X21hdGNoKHBrdCkKKyAgICAgICAgYWN0ID0gYWN0aW9uLmFjdGlvbl9vdXRwdXQoKQorCisgICAgICAgIGZvciBpbmdyZXNzX3BvcnQgaW4gb2ZfcG9ydHM6CisgICAgICAgICAgICAjRGVsZXRlIHRoZSBmbG93cworICAgICAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKworICAgICAgICAgICAgbWF0Y2guaW5fcG9ydCA9IGluZ3Jlc3NfcG9ydAorICAgICAgICAgICAgI0NyZWF0ZSBmbG93IG1vZCBtZXNzYWdlCisgICAgICAgICAgICByZXF1ZXN0ID0gbWVzc2FnZS5mbG93X21vZCgpCisgICAgICAgICAgICByZXF1ZXN0Lm1hdGNoID0gbWF0Y2gKKyAgICAgICAgICAgIGFjdC5wb3J0ID0gb2ZwLk9GUFBfTE9DQUwKKyAgICAgICAgICAgIHJlcXVlc3QuYWN0aW9ucy5hZGQoYWN0KQorCisgICAgICAgICAgICBhY19sb2dnZXIuaW5mbygiSW5zZXJ0aW5nIGZsb3ciKQorICAgICAgICAgICAgcnYgPSBzZWxmLmNvbnRyb2xsZXIubWVzc2FnZV9zZW5kKHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocnYgIT0gLTEsICJFcnJvciBpbnN0YWxsaW5nIGZsb3cgbW9kIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9fYmFycmllcihzZWxmLmNvbnRyb2xsZXIpLCAwLCAiQmFycmllciBmYWlsZWQiKQorCisgICAgICAgICAgICAjU2VuZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3cKKyAgICAgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kaW5nIHBhY2tldCB0byBkcCBwb3J0ICIgKyBzdHIoaW5ncmVzc19wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuZGF0YXBsYW5lLnNlbmQoaW5ncmVzc19wb3J0LCBzdHIocGt0KSkKKworICAgICAgICAgICAgI1RCRDogVmVyaWZpY2F0aW9uIG9mIHBhY2tldHMgYmVpbmcgcmVjaWV2ZWQuCisKKworY2xhc3MgZm9yd2FyZF9mbG9vZChiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorICAgIAorICAgICIiIkZvcndhcmQ6Rmxvb2QgOiBQYWNrZXQgaXMgc2VudCB0byBhbGwgZGF0YXBsYW5lIHBvcnRzCisgICAgZXhjZXB0IGluZ3Jlc3MgcG9ydCB3aGVuIG91dHB1dCBhY3Rpb24ucG9ydCA9IE9GUFBfRkxPT0QgCisgICAgVEJEIDogVmVyaWZpY2F0aW9uLS0tSW5jYXNlIG9mIFNUUCBiZWluZyBpbXBsZW1lbnRlZCwgZmxvb2QgdGhlIHBhY2tldCBhbG9uZyB0aGUgbWluaW11bSBzcGFubmluZyB0cmVlLAorICAgICAgICAgICAgIG5vdCBpbmNsdWRpbmcgdGhlIGluY29taW5nIGludGVyZmFjZS4gIiIiCisgICAgCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgZm9yd2FyZCBmbG9vZCB0ZXN0cyIpCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBvdXRwdXQgYWN0aW9uIHBvcnQgT0ZQUF9GT1JXQVJEIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkV4cGVjdGluZyBwYWNrZXQgb24gYWxsIHRoZSBwb3J0cyBleGNlcHQgdGhlIGlucHV0IHBvcnQiKQorICAgICAgICAKKyAgICAgICAgI0NyZWF0ZSBhIHBhY2tldAorICAgICAgICBwa3QgPSBzaW1wbGVfdGNwX3BhY2tldCgpCisgICAgICAgIG1hdGNoID0gcGFyc2UucGFja2V0X3RvX2Zsb3dfbWF0Y2gocGt0KQorICAgICAgICBhY3QgPSBhY3Rpb24uYWN0aW9uX291dHB1dCgpCisKKyAgICAgICAgI0RlbGV0ZSBhbGwgZmxvd3MgCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKyAgICAgICAgaW5ncmVzc19wb3J0PW9mX3BvcnRzWzBdCisgICAgICAgIG1hdGNoLmluX3BvcnQgPSBpbmdyZXNzX3BvcnQKKworICAgICAgICAjQ3JlYXRlIGEgZmxvdyBtb2Qgd2l0aCBhY3Rpb24ucG9ydCA9IE9GUFBfQUxMCisgICAgICAgIHJlcXVlc3QgPSBtZXNzYWdlLmZsb3dfbW9kKCkKKyAgICAgICAgcmVxdWVzdC5tYXRjaCA9IG1hdGNoCisgICAgICAgIHJlcXVlc3QubWF0Y2gud2lsZGNhcmRzID0gb2ZwLk9GUEZXX0FMTCZ+b2ZwLk9GUEZXX0lOX1BPUlQKKyAgICAgICAgYWN0LnBvcnQgPSBvZnAuT0ZQUF9GTE9PRAorICAgICAgICByZXF1ZXN0LmFjdGlvbnMuYWRkKGFjdCkKKyAgICAgICAgCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnRpbmcgZmxvdyIpCisgICAgICAgIHJ2ID0gc2VsZi5jb250cm9sbGVyLm1lc3NhZ2Vfc2VuZChyZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnYgIT0gLTEsICJFcnJvciBpbnN0YWxsaW5nIGZsb3cgbW9kIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb19iYXJyaWVyKHNlbGYuY29udHJvbGxlciksIDAsICJCYXJyaWVyIGZhaWxlZCIpCisKKyAgICAgICAgI1NlbmQgUGFja2V0IG1hdGNoaW5nIHRoZSBmbG93CisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kaW5nIHBhY2tldCB0byBkcCBwb3J0ICIgKyBzdHIoaW5ncmVzc19wb3J0KSkKKyAgICAgICAgc2VsZi5kYXRhcGxhbmUuc2VuZChpbmdyZXNzX3BvcnQsIHN0cihwa3QpKQorCisgICAgICAgICNWZXJpZnlpbmcgcGFja2V0cyByZWNpZXZlZCBvbiBleHBlY3RlZCBkYXRhcGxhbmUgcG9ydHMKKyAgICAgICAgeWVzX3BvcnRzID0gc2V0KG9mX3BvcnRzKS5kaWZmZXJlbmNlKFtpbmdyZXNzX3BvcnRdKQorICAgICAgICByZWNlaXZlX3BrdF9jaGVjayhzZWxmLmRhdGFwbGFuZSwgcGt0LCB5ZXNfcG9ydHMsIFtpbmdyZXNzX3BvcnRdLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGFjX2xvZ2dlciwgYWNfY29uZmlnKQorCitjbGFzcyBmb3J3YXJkX2lucG9ydChiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorICAgIAorICAgICIiIiBGb3J3YXJkSW5Qb3J0IDogUGFja2V0IHNlbnQgdG8gdmlydHVhbCBwb3J0IElOX1BPUlQKKyAgICBJZiB0aGUgb3V0cHV0LnBvcnQgPSBPRlBQLklOUE9SVCB0aGVuIHRoZSBwYWNrZXQgaXMgc2VudCB0byB0aGUgaW5wdXQgcG9ydCBpdHNlbGYiIiIKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJSdW5uaW5nIGZvcndhcmRfaW5wb3J0IHRlc3QiKQorCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBvdXRwdXQgYWN0aW9uIHBvcnQgT0ZQUF9JTlBPUlQiKQorICAgICAgICBhY19sb2dnZXIuaW5mbygiU2VuZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3ciKQorICAgICAgICBhY19sb2dnZXIuaW5mbygiRXhwZWN0aW5nIHBhY2tldCBvbiB0aGUgaW5wdXQgcG9ydCIpCisgICAgICAgIAorICAgICAgICAjQ3JlYXRlIGEgcGFja2V0CisgICAgICAgIHBrdCA9IHNpbXBsZV90Y3BfcGFja2V0KCkKKyAgICAgICAgbWF0Y2ggPSBwYXJzZS5wYWNrZXRfdG9fZmxvd19tYXRjaChwa3QpCisgICAgICAgIGFjdCA9IGFjdGlvbi5hY3Rpb25fb3V0cHV0KCkKKworICAgICAgICAjRGVsZXRlIHRoZSBmbG93cworICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIDAsICJGYWlsZWQgdG8gZGVsZXRlIGFsbCBmbG93cyIpCisgICAgICAgIGluZ3Jlc3NfcG9ydD1vZl9wb3J0c1swXQorICAgICAgICBtYXRjaC5pbl9wb3J0ID0gaW5ncmVzc19wb3J0CisKKyAgICAgICAgIyBDcmVhdGUgYSBmbG93IG1vZCBtZXNzYWdlCisgICAgICAgIHJlcXVlc3QgPSBtZXNzYWdlLmZsb3dfbW9kKCkKKyAgICAgICAgcmVxdWVzdC5tYXRjaCA9IG1hdGNoCisgICAgICAgIGFjdC5wb3J0ID0gb2ZwLk9GUFBfSU5fUE9SVAorICAgICAgICAgICAgCisgICAgICAgIHJlcXVlc3QuYWN0aW9ucy5hZGQoYWN0KQorICAgICAgICBhY19sb2dnZXIuaW5mbygiSW5zZXJ0aW5nIGZsb3ciKQorICAgICAgICBydiA9IHNlbGYuY29udHJvbGxlci5tZXNzYWdlX3NlbmQocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ2ICE9IC0xLCAiRXJyb3IgaW5zdGFsbGluZyBmbG93IG1vZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9fYmFycmllcihzZWxmLmNvbnRyb2xsZXIpLCAwLCAiQmFycmllciBmYWlsZWQiKQorCisgICAgICAgICNTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdworICAgICAgICBhY19sb2dnZXIuaW5mbygiU2VuZGluZyBwYWNrZXQgdG8gZHAgcG9ydCAiICsgc3RyKGluZ3Jlc3NfcG9ydCkpCisgICAgICAgIHNlbGYuZGF0YXBsYW5lLnNlbmQoaW5ncmVzc19wb3J0LCBzdHIocGt0KSkKKyAgICAgICAgeWVzX3BvcnRzID0gW2luZ3Jlc3NfcG9ydF0KKworICAgICAgICAjVmVyZnlpbmcgcGFja2V0IHJlY2lldmVkIG9uIGV4cGVjdGVkIGRhdGFwbGFuZSBwb3J0cworICAgICAgICByZWNlaXZlX3BrdF9jaGVjayhzZWxmLmRhdGFwbGFuZSwgcGt0LCB5ZXNfcG9ydHMsc2V0KG9mX3BvcnRzKS5kaWZmZXJlbmNlKFtpbmdyZXNzX3BvcnRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBhY19sb2dnZXIsIGFjX2NvbmZpZykgICAgICAKKworY2xhc3MgZm9yd2FyZF90YWJsZShiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorICAgCisgICAgIiIiRm9yd2FyZFRhYmxlIDogUGVyZm9ybSBhY3Rpb25zIGluIGZsb3cgdGFibGUuIE9ubHkgZm9yIHBhY2tldC1vdXQgbWVzc2FnZXMuCisgICAgICAgIElmIHRoZSBvdXRwdXQgYWN0aW9uLnBvcnQgaW4gdGhlIHBhY2tldG91dCBtZXNzYWdlID0gT0ZQLlRBQkxFICwgdGhlbiAKKyAgICAgICAgdGhlIHBhY2tldCBpbXBsZW1lbnRzIHRoZSBhY3Rpb24gc3BlY2lmaWVkIGluIHRoZSBtYXRjaGluZyBmbG93IG9mIHRoZSBGTE9XLVRBQkxFIiIiCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiUnVubmluZyBGb3J3YXJkIFRhYmxlIHRlc3QiKQorCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgRiB3aXRoIG91dHB1dCBhY3Rpb24gcG9ydCBzZXQgdG8gc29tZSBlZ3Jlc3NfcG9ydCIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHBhY2tldCBvdXQgbWVzc2FnZSAobWF0Y2hpbmcgZmxvdyBGKSB3aXRoIGFjdGlvbi5wb3J0ID0gT0ZQLlRBQkxFIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkV4cGVjdGluZyBwYWNrZXQgb24gdGhlIGVncmVzc19wb3J0IikKKyAgICAgICAgCisgICAgICAgICNJbnNlcnQgYSBhbGwgd2lsZGNhcmRlZCBmbG93CisgICAgICAgIChwa3QsbWF0Y2gpID0gV2lsZGNhcmRfQWxsKHNlbGYsb2ZfcG9ydHMpCisgICAgICAgIAorICAgICAgICAjQ3JlYXRlIGEgcGFja2V0IG91dCBtZXNzYWdlCisgICAgICAgIHBrdF9vdXQgPW1lc3NhZ2UucGFja2V0X291dCgpOworICAgICAgICBwa3Rfb3V0LmRhdGEgPSBzdHIocGt0KQorICAgICAgICBwa3Rfb3V0LmluX3BvcnQgPSBvZl9wb3J0c1swXQorICAgICAgICBhY3QgPSBhY3Rpb24uYWN0aW9uX291dHB1dCgpCisgICAgICAgIGFjdC5wb3J0ID0gb2ZwLk9GUFBfVEFCTEUKKyAgICAgICAgcGt0X291dC5hY3Rpb25zLmFkZChhY3QpCisgICAgICAgIHJ2ID0gc2VsZi5jb250cm9sbGVyLm1lc3NhZ2Vfc2VuZChwa3Rfb3V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnYgPT0gMCwgIkVycm9yIHNlbmRpbmcgb3V0IG1lc3NhZ2UiKQorCisgICAgICAgICNWZXJpZnlpbmcgcGFja2V0IG91dCBtZXNzYWdlIHJlY2lldmVkIG9uIHRoZSBleHBlY3RlZCBkYXRhcGxhbmUgcG9ydC4gCisgICAgICAgIChvZl9wb3J0LCBwa3QsIHBrdF90aW1lKSA9IHNlbGYuZGF0YXBsYW5lLnBvbGwocG9ydF9udW1iZXI9b2ZfcG9ydHNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwX3BrdD1wa3QsdGltZW91dD0zKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGt0IGlzIG5vdCBOb25lLCAnUGFja2V0IG5vdCByZWNlaXZlZCcpCisKKworY2xhc3MgYWRkX3ZsYW5fdGFnKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiQWRkVmxhblRhZyA6IEFkZHMgVkxBTiBUYWcgdG8gdW50YWdnZWQgcGFja2V0LiIiIgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgYWRkX3ZsYW5fdGFnIHRlc3QiKQorCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJWZXJpZnkgaWYgc3dpdGNoIHN1cHBvcnRzIHRoZSBhY3Rpb24gLS0gc2V0IHZsYW4gaWQsIGlmIG5vdCBza2lwIHRoZSB0ZXN0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBzZXQgdmlkIGFjdGlvbiIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyAsIHZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaGFzIHZpZCBzZXQiKQorICAgICAgICAKKyAgICAgICAgI1ZlcmlmeSBzZXRfdmxhbl9pZCBpcyBhIHN1cHBvcnRlZCBhY3Rpb24KKyAgICAgICAgc3VwX2FjdHMgPSBzd19zdXBwb3J0ZWRfYWN0aW9ucyhzZWxmKQorICAgICAgICBpZiBub3Qoc3VwX2FjdHMgJiAxPDxvZnAuT0ZQQVRfU0VUX1ZMQU5fVklEKToKKyAgICAgICAgICAgc2tpcF9tZXNzYWdlX2VtaXQoc2VsZiwgIkFkZCBWTEFOIHRhZyB0ZXN0IHNraXBwZWQiKQorICAgICAgICAgICByZXR1cm4KKyAgICAgICAgCisgICAgICAgICNDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgYW5kIGFuIGV4cGVjdGVkIHBhY2tldCB3aXRoIHZpZCBzZXQKKyAgICAgICAgbmV3X3ZpZCA9IDIKKyAgICAgICAgbGVuX3dvX3ZpZCA9IDEwMAorICAgICAgICBsZW5fd192aWQgPSAxMDQKKyAgICAgICAgcGt0ID0gc2ltcGxlX3RjcF9wYWNrZXQocGt0bGVuPWxlbl93b192aWQpCisgICAgICAgIGV4cF9wa3QgPSBzaW1wbGVfdGNwX3BhY2tldChwa3RsZW49bGVuX3dfdmlkLCBkbF92bGFuX2VuYWJsZT1UcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsX3ZsYW49bmV3X3ZpZCxkbF92bGFuX3BjcD0wKQorICAgICAgICB2aWRfYWN0ID0gYWN0aW9uLmFjdGlvbl9zZXRfdmxhbl92aWQoKQorICAgICAgICB2aWRfYWN0LnZsYW5fdmlkID0gbmV3X3ZpZAorCisgICAgICAgICNJbnNlcnQgZmxvdyB3aXRoIGFjdGlvbiAtLSBzZXQgdmlkICwgU2VuZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3csIFZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaXMgZXhwZWN0ZWQgcGFja2V0CisgICAgICAgIGZsb3dfbWF0Y2hfdGVzdChzZWxmLCBhY19wb3J0X21hcCwgcGt0PXBrdCwgCisgICAgICAgICAgICAgICAgICAgICAgICBleHBfcGt0PWV4cF9wa3QsIGFjdGlvbl9saXN0PVt2aWRfYWN0XSkKKworY2xhc3MgbW9kaWZ5X3ZsYW5fdGFnKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisKKyAgICAiIiJNb2RpZnlWbGFuVGFnIDogTW9kaWZpZXMgVkxBTiBUYWcgdG8gdGFnZ2VkIHBhY2tldC4iIiIKKyAgICAKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiUnVubmluZyBtb2RpZnlfdmxhbl90YWcgdGVzdCIpCisKKyAgICAgICAgb2ZfcG9ydHMgPSBhY19wb3J0X21hcC5rZXlzKCkKKyAgICAgICAgb2ZfcG9ydHMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob2ZfcG9ydHMpID4gMSwgIk5vdCBlbm91Z2ggcG9ydHMgZm9yIHRlc3QiKQorICAgICAgICAKKyAgICAgICAgI0NsZWFyIHN3aXRjaCBzdGF0ZQorICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIDAsICJGYWlsZWQgdG8gZGVsZXRlIGFsbCBmbG93cyIpCisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlZlcmlmeSBpZiBzd2l0Y2ggc3VwcG9ydHMgdGhlIGFjdGlvbiAtLSBtb2RpZnkgdmxhbiBpZCwgaWYgbm90IHNraXAgdGhlIHRlc3QiKQorICAgICAgICBhY19sb2dnZXIuaW5mbygiSW5zZXJ0IGEgZmxvdyB3aXRoIGFjdGlvbiAtLXNldCB2aWQgIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgdGFnZ2VkIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdyAsIHZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaGFzIHZpZCByZXdyaXR0ZW4iKQorICAgICAgICAKKyAgICAgICAgI1ZlcmlmeSBzZXRfdmxhbl9pZCBpcyBhIHN1cHBvcnRlZCBhY3Rpb24KKyAgICAgICAgc3VwX2FjdHMgPSBzd19zdXBwb3J0ZWRfYWN0aW9ucyhzZWxmKQorICAgICAgICBpZiBub3QgKHN1cF9hY3RzICYgMSA8PCBvZnAuT0ZQQVRfU0VUX1ZMQU5fVklEKToKKyAgICAgICAgICAgIHNraXBfbWVzc2FnZV9lbWl0KHNlbGYsICJNb2RpZnkgVkxBTiB0YWcgdGVzdCBza2lwcGVkIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICNDcmVhdGUgYSB0YWdnZWQgcGFja2V0IHdpdGggb2xkX3ZpZCB0byBiZSBzZW50LCBhbmQgZXhwZWN0ZWQgcGFja2V0IHdpdGggbmV3X3ZpZAorICAgICAgICBvbGRfdmlkID0gMgorICAgICAgICBuZXdfdmlkID0gMworICAgICAgICBwa3QgPSBzaW1wbGVfdGNwX3BhY2tldChkbF92bGFuX2VuYWJsZT1UcnVlLCBkbF92bGFuPW9sZF92aWQpCisgICAgICAgIGV4cF9wa3QgPSBzaW1wbGVfdGNwX3BhY2tldChkbF92bGFuX2VuYWJsZT1UcnVlLCBkbF92bGFuPW5ld192aWQpCisgICAgICAgIHZpZF9hY3QgPSBhY3Rpb24uYWN0aW9uX3NldF92bGFuX3ZpZCgpCisgICAgICAgIHZpZF9hY3Qudmxhbl92aWQgPSBuZXdfdmlkCisgICAgICAgIAorICAgICAgICAjSW5zZXJ0IGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IHZpZCAsIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LlZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaXMgZXhwZWN0ZWQgcGFja2V0LgorICAgICAgICBmbG93X21hdGNoX3Rlc3Qoc2VsZiwgYWNfcG9ydF9tYXAsIHBrdD1wa3QsIGV4cF9wa3Q9ZXhwX3BrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9saXN0PVt2aWRfYWN0XSkKKyAgICAgICAgCitjbGFzcyB2bGFuX3ByaW9fdW50YWdnZWQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKKyAgIAorICAgICIiIkFkZFZsYW5QcmlvVW50YWdnZWRQa3QgOiBBZGQgVkxBTiBwcmlvcml0eSB0byB1bnRhZ2dlZCBwYWNrZXQuIiIiCisgICAgCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgdmxhbl9wcmlvX3VudGFnZ2VkIHRlc3QiKQorCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJWZXJpZnkgaWYgc3dpdGNoIHN1cHBvcnRzIHRoZSBhY3Rpb24gLS0gc2V0IHZsYW4gcHJpb3JpdHksIGlmIG5vdCBza2lwIHRoZSB0ZXN0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IHZsYW4gcHJpb3JpdHkgIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgdW50YWdnZWQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93ICwgdmVyaWZ5IHJlY2lldmVkIHBhY2tldCBoYXMgc3BlY2lmaWVkIFZMQU4gcHJpb3JpdHkgYW5kIGhhcyB2aWQgc2V0IHRPIDAgIikKKyAgICAgICAgCisgICAgICAgICNWZXJpZnkgc2V0X3ZsYW5fcHJpb3JpdHkgaXMgYSBzdXBwb3J0ZWQgYWN0aW9uCisgICAgICAgIHN1cF9hY3RzID0gc3dfc3VwcG9ydGVkX2FjdGlvbnMoc2VsZikKKyAgICAgICAgaWYgbm90IChzdXBfYWN0cyAmIDEgPDwgb2ZwLk9GUEFUX1NFVF9WTEFOX1BDUCk6CisgICAgICAgICAgICBza2lwX21lc3NhZ2VfZW1pdChzZWxmLCAiU2V0IFZMQU4gcHJpb3JpdHkgdGVzdCBza2lwcGVkIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgI0NyZWF0ZSBhIHVudGFnZ2VkIHBhY2tldCB0byBiZSBzZW50IGFuZCBhbiBleHBlY3RlZCBwYWNrZXQgd2l0aCB2aWQgPSAwICwgdmxhbl9wcmlvcml0eSBzZXQuIAorICAgICAgICB2bGFuX2lkID0gMAorICAgICAgICBwa3QgPSBzaW1wbGVfdGNwX3BhY2tldCgpCisgICAgICAgIGV4cF9wa3QgPSBzaW1wbGVfdGNwX3BhY2tldChkbF92bGFuX2VuYWJsZT1UcnVlLCBkbF92bGFuPXZsYW5faWQsZGxfdmxhbl9wY3A9MCkKKyAgICAgICAgYWN0ID0gYWN0aW9uLmFjdGlvbl9zZXRfdmxhbl92aWQoKQorCisgICAgICAgICNJbnNlcnQgZmxvdyB3aXRoIGFjdGlvbiAtLSBzZXQgdkxBTiBwcmlvcml0eSwgU2VuZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3csIFZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaXMgZXhwZWN0ZWQgcGFja2V0CisgICAgICAgIGZsb3dfbWF0Y2hfdGVzdChzZWxmLCBhY19wb3J0X21hcCwgcGt0PXBrdCwgZXhwX3BrdD1leHBfcGt0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbGlzdD1bYWN0XSkKKworCitjbGFzcyBtb2RpZnlfdmxhbl9wcmlvKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiTW9kaWZ5VmxhblByaW8gOiBNb2RpZnkgVkxBTiBwcmlvcml0eSB0byB0YWdnZWQgcGFja2V0LiIiIgorICAgIAorICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgbW9kaWZ5X3ZsYW5fcHJpbyB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiVmVyaWZ5IGlmIHN3aXRjaCBzdXBwb3J0cyB0aGUgYWN0aW9uIC0tIHNldCB2bGFuIHByaW9yaXR5LCBpZiBub3Qgc2tpcCB0aGUgdGVzdCIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uIC0tIHNldCB2bGFuIHByaW9yaXR5ICIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHRhZ2dlZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3csIHZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaGFzIHZsYW4gcHJpb3JpdHkgcmV3cml0dGVuIikKKyAgICAgICAgCisgICAgICAgICNWZXJpZnkgc2V0X3ZsYW5fcHJpb3JpdHkgaXMgYSBzdXBwb3J0ZWQgYWN0aW9uCisgICAgICAgIHN1cF9hY3RzID0gc3dfc3VwcG9ydGVkX2FjdGlvbnMoc2VsZiwidHJ1ZSIpCisgICAgICAgIGlmIG5vdCAoc3VwX2FjdHMgJiAxIDw8IG9mcC5PRlBBVF9TRVRfVkxBTl9QQ1ApOgorICAgICAgICAgICAgc2tpcF9tZXNzYWdlX2VtaXQoc2VsZiwgIm1vZGlmeV92bGFuX3ByaW8gdGVzdCBza2lwcGVkIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgI0NyZWF0ZSBhIHRhZ2dlZCBwYWNrZXQgLCBhbmQgYW4gZXhwZWN0ZWQgcGFja2V0IHdpdGggdmxhbl9wcmlvcml0eSBzZXQgdG8gc3BlY2lmaWVkIHZhbHVlCisgICAgICAgIHZpZCAgICAgICAgICA9IDEyMworICAgICAgICBvbGRfdmxhbl9wY3AgPSAyCisgICAgICAgIG5ld192bGFuX3BjcCA9IDMKKyAgICAgICAgcGt0ID0gc2ltcGxlX3RjcF9wYWNrZXQoZGxfdmxhbl9lbmFibGU9VHJ1ZSwgZGxfdmxhbj12aWQsIGRsX3ZsYW5fcGNwPW9sZF92bGFuX3BjcCkKKyAgICAgICAgZXhwX3BrdCA9IHNpbXBsZV90Y3BfcGFja2V0KGRsX3ZsYW5fZW5hYmxlPVRydWUsIGRsX3ZsYW49dmlkLCBkbF92bGFuX3BjcD1uZXdfdmxhbl9wY3ApCisgICAgICAgIHZpZF9hY3QgPSBhY3Rpb24uYWN0aW9uX3NldF92bGFuX3BjcCgpCisgICAgICAgIHZpZF9hY3Qudmxhbl9wY3AgPSBuZXdfdmxhbl9wY3AKKworICAgICAgICAjSW5zZXJ0IGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IHZMQU4gcHJpb3JpdHksIFNlbmQgdGFnZ2VkIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdywgVmVyaWZ5IHJlY2lldmVkIHBhY2tldCBpcyBleHBlY3RlZCBwYWNrZXQKKyAgICAgICAgZmxvd19tYXRjaF90ZXN0KHNlbGYsIGFjX3BvcnRfbWFwLCBwa3Q9cGt0LCBleHBfcGt0PWV4cF9wa3QsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbGlzdD1bdmlkX2FjdF0pCisKKworY2xhc3MgbW9kaWZ5X2wyX3NyYyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorICAgIAorICAgICIiIk1vZGlmeUwyU3JjIDpNb2RpZnkgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyIiIgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgbW9kaWZ5X2wyX3NyYyB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiVmVyaWZ5IGlmIHN3aXRjaCBzdXBwb3J0cyB0aGUgYWN0aW9uIC0tIG1vZGlmeV9sMl9zcmMsIGlmIG5vdCBza2lwIHRoZSB0ZXN0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IGV0aGVyZW50IHNyYyBhZGRyZXNzIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCB2ZXJpZnkgcmVjaWV2ZWQgcGFja2V0IHNyYyBhZGRyZXNzIHJld3JpdHRlbiAiKQorCisgICAgICAgICNWZXJpZnkgc2V0X2RsX3NyYyBpcyBhIHN1cHBvcnRlZCBhY3Rpb24KKyAgICAgICAgc3VwX2FjdHMgPSBzd19zdXBwb3J0ZWRfYWN0aW9ucyhzZWxmLHVzZV9jYWNoZT0idHJ1ZSIpCisgICAgICAgIGlmIG5vdCAoc3VwX2FjdHMgJiAxIDw8IG9mcC5PRlBBVF9TRVRfRExfU1JDKToKKyAgICAgICAgICAgIHNraXBfbWVzc2FnZV9lbWl0KHNlbGYsICJtb2RpZnlfbDJfc3JjIHRlc3Qgc2tpcHBlZCIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjQ3JlYXRlIHBhY2tldCB0byBiZSBzZW50IGFuZCBleHBlY3RlZCBwYWNrZXQgd2l0aCBkbF9zcmMgc2V0IHRvIHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAocGt0LCBleHBfcGt0LCBhY3RzKSA9IHBrdF9hY3Rpb25fc2V0dXAoc2VsZiwgbW9kX2ZpZWxkcz1bJ2RsX3NyYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfdGVzdF9wYXJhbXM9VHJ1ZSkKKyAgICAgICAgCisgICAgICAgICNJbnNlcnQgZmxvdyB3aXRoIGFjdGlvbiAtLSBzZXQgc3JjIGFkZHJlc3MsIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCBWZXJpZnkgcmVjaWV2ZWQgcGFja2V0IGlzIGV4cGVjdGVkIHBhY2tldAorICAgICAgICBmbG93X21hdGNoX3Rlc3Qoc2VsZiwgYWNfcG9ydF9tYXAsIHBrdD1wa3QsIGV4cF9wa3Q9ZXhwX3BrdCwgCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbGlzdD1hY3RzLCBtYXhfdGVzdD0yKQorCisKK2NsYXNzIG1vZGlmeV9sMl9kc3QoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKKyAgICAKKyAgICAiIiJNb2RpZnlMMlNEU3QgOk1vZGlmeSB0aGUgZGVzdCBNQUMgYWRkcmVzcyIiIgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgbW9kaWZ5X2wyX2RzdCB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiVmVyaWZ5IGlmIHN3aXRjaCBzdXBwb3J0cyB0aGUgYWN0aW9uIC0tIG1vZGlmeV9sMl9kc3QsIGlmIG5vdCBza2lwIHRoZSB0ZXN0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IGV0aGVyZW50IGRzdCBhZGRyZXNzICIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdywgdmVyaWZ5IHJlY2lldmVkIHBhY2tldCBkc3QgYWRkcmVzcyByZXdyaXR0ZW4gIikKKworICAgICAgICAjVmVyaWZ5IHNldF9kbF9kc3QgaXMgYSBzdXBwb3J0ZWQgYWN0aW9uCisgICAgICAgIHN1cF9hY3RzID0gc3dfc3VwcG9ydGVkX2FjdGlvbnMoc2VsZikKKyAgICAgICAgaWYgbm90IChzdXBfYWN0cyAmIDEgPDwgb2ZwLk9GUEFUX1NFVF9ETF9EU1QpOgorICAgICAgICAgICAgc2tpcF9tZXNzYWdlX2VtaXQoc2VsZiwgIm1vZGlmeV9sMl9kc3QgdGVzdCBza2lwcGVkIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICNDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgYW5kIGV4cGVjdGVkIHBhY2tldCB3aXRoIGRsX3NyYyBzZXQgdG8gc3BlY2lmaWVkIHZhbHVlCisgICAgICAgIChwa3QsIGV4cF9wa3QsIGFjdHMpID0gcGt0X2FjdGlvbl9zZXR1cChzZWxmLCBtb2RfZmllbGRzPVsnZGxfZHN0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja190ZXN0X3BhcmFtcz1UcnVlKQorICAgICAgICAKKyAgICAgICAgI0luc2VydCBmbG93IHdpdGggYWN0aW9uIC0tIHNldCBkc3QgYWRkcmVzcywgU2VuZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3csIFZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaXMgZXhwZWN0ZWQgcGFja2V0CisgICAgICAgIGZsb3dfbWF0Y2hfdGVzdChzZWxmLCBhY19wb3J0X21hcCwgcGt0PXBrdCwgZXhwX3BrdD1leHBfcGt0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9saXN0PWFjdHMsIG1heF90ZXN0PTIpCisKK2NsYXNzIG1vZGlmeV9sM19zcmMoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKKyAgICAKKyAgICAiIiJNb2RpZnlMM1NyYyA6IE1vZGlmeSB0aGUgc291cmNlIElQIGFkZHJlc3Mgb2YgYW4gSVAgcGFja2V0ICIiIgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgbW9kaWZ5X2wzX3NyYyB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiVmVyaWZ5IGlmIHN3aXRjaCBzdXBwb3J0cyB0aGUgYWN0aW9uIC0tIG1vZGlmeV9sM19zcmMsIGlmIG5vdCBza2lwIHRoZSB0ZXN0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IG5ldHdvcmsgc3JjIGFkZHJlc3MgIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCB2ZXJpZnkgcmVjaWV2ZWQgcGFja2V0IG5ldHdvcmsgc3JjIGFkZHJlc3MgcmV3cml0dGVuICIpCisgICAgICAgIAorICAgICAgICAjVmVyaWZ5IHNldF9ud19zcmMgaXMgYSBzdXBwb3J0ZWQgYWN0aW9uCisgICAgICAgIHN1cF9hY3RzID0gc3dfc3VwcG9ydGVkX2FjdGlvbnMoc2VsZikKKyAgICAgICAgaWYgbm90IChzdXBfYWN0cyAmIDEgPDwgb2ZwLk9GUEFUX1NFVF9OV19TUkMpOgorICAgICAgICAgICAgc2tpcF9tZXNzYWdlX2VtaXQoc2VsZiwgIm1vZGlmeV9sM19zcmMgdGVzdCIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjQ3JlYXRlIHBhY2tldCB0byBiZSBzZW50IGFuZCBleHBlY3RlZCBwYWNrZXQgd2l0aCBud19zcmMgc2V0IHRvIHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAocGt0LCBleHBfcGt0LCBhY3RzKSA9IHBrdF9hY3Rpb25fc2V0dXAoc2VsZiwgbW9kX2ZpZWxkcz1bJ2lwX3NyYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfdGVzdF9wYXJhbXM9VHJ1ZSkKKyAgICAgICAgCisgICAgICAgICNJbnNlcnQgZmxvdyB3aXRoIGFjdGlvbiAtLSBzZXQgbncgc3JjIGFkZHJlc3MsIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCBWZXJpZnkgcmVjaWV2ZWQgcGFja2V0IGlzIGV4cGVjdGVkIHBhY2tldAorICAgICAgICBmbG93X21hdGNoX3Rlc3Qoc2VsZiwgYWNfcG9ydF9tYXAsIHBrdD1wa3QsIGV4cF9wa3Q9ZXhwX3BrdCwgCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbGlzdD1hY3RzLCBtYXhfdGVzdD0yKQorCitjbGFzcyBtb2RpZnlfbDNfZHN0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiTW9kaWZ5TDNEc3QgOk1vZGlmeSB0aGUgZGVzdCBJUCBhZGRyZXNzIG9mIGFuIElQIHBhY2tldCIiIgorICAgIAorICAgIGRlZiBydW5UZXN0KHNlbGYpOgorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJSdW5uaW5nIG1vZGlmeV9sM19kc3QgdGVzdCIpCisKKyAgICAgICAgb2ZfcG9ydHMgPSBhY19wb3J0X21hcC5rZXlzKCkKKyAgICAgICAgb2ZfcG9ydHMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob2ZfcG9ydHMpID4gMSwgIk5vdCBlbm91Z2ggcG9ydHMgZm9yIHRlc3QiKQorICAgICAgICAKKyAgICAgICAgI0NsZWFyIHN3aXRjaCBzdGF0ZQorICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIDAsICJGYWlsZWQgdG8gZGVsZXRlIGFsbCBmbG93cyIpCisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlZlcmlmeSBpZiBzd2l0Y2ggc3VwcG9ydHMgdGhlIGFjdGlvbiAtLSBtb2RpZnlfbDNfZHN0LCBpZiBub3Qgc2tpcCB0aGUgdGVzdCIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uIC0tIHNldCBuZXR3b3JrIGRzdCBhZGRyZXNzICIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdywgdmVyaWZ5IHJlY2lldmVkIHBhY2tldCBuZXR3b3JrIGRzdCBhZGRyZXNzIHJld3JpdHRlbiAiKQorCisgICAgICAgICNWZXJpZnkgc2V0X253X2RzdCBpcyBhIHN1cHBvcnRlZCBhY3Rpb24KKyAgICAgICAgc3VwX2FjdHMgPSBzd19zdXBwb3J0ZWRfYWN0aW9ucyhzZWxmLHVzZV9jYWNoZT0idHJ1ZSIpCisgICAgICAgIGlmIG5vdCAoc3VwX2FjdHMgJiAxIDw8IG9mcC5PRlBBVF9TRVRfTldfRFNUKToKKyAgICAgICAgICAgIHNraXBfbWVzc2FnZV9lbWl0KHNlbGYsICJtb2RpZnlfbDNfZHN0IHRlc3Qgc2tpcHBlZCIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgCisgICAgICAgICNDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgYW5kIGV4cGVjdGVkIHBhY2tldCB3aXRoIG53X2RzdCBzZXQgdG8gc3BlY2lmaWVkIHZhbHVlCisgICAgICAgIChwa3QsIGV4cF9wa3QsIGFjdHMpID0gcGt0X2FjdGlvbl9zZXR1cChzZWxmLCBtb2RfZmllbGRzPVsnaXBfZHN0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja190ZXN0X3BhcmFtcz1UcnVlKQorICAgICAgICAKKyAgICAgICAgI0luc2VydCBmbG93IHdpdGggYWN0aW9uIC0tIHNldCBudyBkc3QgYWRkcmVzcywgU2VuZCBwYWNrZXQgbWF0Y2hpbmcgdGhlIGZsb3csIFZlcmlmeSByZWNpZXZlZCBwYWNrZXQgaXMgZXhwZWN0ZWQgcGFja2V0CisgICAgICAgIGZsb3dfbWF0Y2hfdGVzdChzZWxmLCBhY19wb3J0X21hcCwgcGt0PXBrdCwgZXhwX3BrdD1leHBfcGt0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9saXN0PWFjdHMsIG1heF90ZXN0PTIpCisKKworY2xhc3MgbW9kaWZ5X2w0X3NyYyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorICAgIAorICAgICIiIk1vZGlmeUw0U3JjIDogTW9kaWZ5IHRoZSBzb3VyY2UgVENQIHBvcnQgb2YgYSBUQ1AgcGFja2V0IiIiCisgICAgCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlJ1bm5pbmcgbW9kaWZ5X2w0X3NyYyB0ZXN0IikKKworICAgICAgICBvZl9wb3J0cyA9IGFjX3BvcnRfbWFwLmtleXMoKQorICAgICAgICBvZl9wb3J0cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvZl9wb3J0cykgPiAxLCAiTm90IGVub3VnaCBwb3J0cyBmb3IgdGVzdCIpCisgICAgICAgIAorICAgICAgICAjQ2xlYXIgc3dpdGNoIHN0YXRlCisgICAgICAgIHJ2ID0gZGVsZXRlX2FsbF9mbG93cyhzZWxmLmNvbnRyb2xsZXIsIGFjX2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydiwgMCwgIkZhaWxlZCB0byBkZWxldGUgYWxsIGZsb3dzIikKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiVmVyaWZ5IGlmIHN3aXRjaCBzdXBwb3J0cyB0aGUgYWN0aW9uIC0tIG1vZGlmeV9sNF9zcmMsIGlmIG5vdCBza2lwIHRoZSB0ZXN0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIkluc2VydCBhIGZsb3cgd2l0aCBhY3Rpb24gLS0gc2V0IHNyYyB0Y3AgcG9ydCIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdywgdmVyaWZ5IHJlY2lldmVkIHBhY2tldCBzcmMgdGNwIHBvcnQgaXMgcmV3cml0dGVuICIpCisgICAgICAgIAorICAgICAgICAjVmVyaWZ5IHNldF90cF9zcmMgaXMgYSBzdXBwb3J0ZWQgYWN0aW9uCisgICAgICAgIHN1cF9hY3RzID0gc3dfc3VwcG9ydGVkX2FjdGlvbnMoc2VsZix1c2VfY2FjaGU9InRydWUiKQorICAgICAgICBpZiBub3QgKHN1cF9hY3RzICYgMSA8PCBvZnAuT0ZQQVRfU0VUX1RQX1NSQyk6CisgICAgICAgICAgICBza2lwX21lc3NhZ2VfZW1pdChzZWxmLCAibW9kaWZ5X2w0X3NyYyB0ZXN0IHNraXBwZWQiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgI0NyZWF0ZSBwYWNrZXQgdG8gYmUgc2VudCBhbmQgZXhwZWN0ZWQgcGFja2V0IHdpdGggdGNwX3NyYyBzZXQgdG8gc3BlY2lmaWVkIHZhbHVlCisgICAgICAgIChwa3QsIGV4cF9wa3QsIGFjdHMpID0gcGt0X2FjdGlvbl9zZXR1cChzZWxmLCBtb2RfZmllbGRzPVsndGNwX3Nwb3J0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja190ZXN0X3BhcmFtcz1UcnVlKQorICAgICAgICAKKyAgICAgICAgI0luc2VydCBmbG93IHdpdGggYWN0aW9uIC0tIHNldCB0Y3Agc3JjIHBvcnQsIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCBWZXJpZnkgcmVjaWV2ZWQgcGFja2V0IGlzIGV4cGVjdGVkIHBhY2tldAorICAgICAgICBmbG93X21hdGNoX3Rlc3Qoc2VsZiwgYWNfcG9ydF9tYXAsIHBrdD1wa3QsIGV4cF9wa3Q9ZXhwX3BrdCwgCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbGlzdD1hY3RzLCBtYXhfdGVzdD0yKQorCitjbGFzcyBtb2RpZnlfbDRfZHN0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiIE1vZGlmeUw0RHN0OiBNb2RpZnkgdGhlIGRlc3QgVENQIHBvcnQgb2YgYSBUQ1AgcGFja2V0IChUUDEpIiIiCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKworICAgICAgICBhY19sb2dnZXIuaW5mbygiUnVubmluZyBtb2RpZnlfbDRfZHN0IHRlc3QiKQorCisgICAgICAgIG9mX3BvcnRzID0gYWNfcG9ydF9tYXAua2V5cygpCisgICAgICAgIG9mX3BvcnRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9mX3BvcnRzKSA+IDEsICJOb3QgZW5vdWdoIHBvcnRzIGZvciB0ZXN0IikKKyAgICAgICAgCisgICAgICAgICNDbGVhciBzd2l0Y2ggc3RhdGUKKyAgICAgICAgcnYgPSBkZWxldGVfYWxsX2Zsb3dzKHNlbGYuY29udHJvbGxlciwgYWNfbG9nZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAwLCAiRmFpbGVkIHRvIGRlbGV0ZSBhbGwgZmxvd3MiKQorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJWZXJpZnkgaWYgc3dpdGNoIHN1cHBvcnRzIHRoZSBhY3Rpb24gLS0gbW9kaWZ5X2w0X2RzdCwgaWYgbm90IHNraXAgdGhlIHRlc3QiKQorICAgICAgICBhY19sb2dnZXIuaW5mbygiSW5zZXJ0IGEgZmxvdyB3aXRoIGFjdGlvbiAtLSBzZXQgZHN0IHRjcCBwb3J0IikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCB2ZXJpZnkgcmVjaWV2ZWQgcGFja2V0IGRzdCB0Y3AgcG9ydCBpcyByZXdyaXR0ZW4gIikKKyAgICAgICAKKyAgICAgICAgI1ZlcmlmeSBzZXRfdHBfZHN0IGlzIGEgc3VwcG9ydGVkIGFjdGlvbgorICAgICAgICBzdXBfYWN0cyA9IHN3X3N1cHBvcnRlZF9hY3Rpb25zKHNlbGYsdXNlX2NhY2hlPSJ0cnVlIikKKyAgICAgICAgaWYgbm90IChzdXBfYWN0cyAmIDEgPDwgb2ZwLk9GUEFUX1NFVF9UUF9EU1QpOgorICAgICAgICAgICAgc2tpcF9tZXNzYWdlX2VtaXQoc2VsZiwgIk1vZGlmeUw0RHN0IHRlc3QiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgI0NyZWF0ZSBwYWNrZXQgdG8gYmUgc2VudCBhbmQgZXhwZWN0ZWQgcGFja2V0IHdpdGggdGNwX2RzdCBzZXQgdG8gc3BlY2lmaWVkIHZhbHVlCisgICAgICAgIChwa3QsIGV4cF9wa3QsIGFjdHMpID0gcGt0X2FjdGlvbl9zZXR1cChzZWxmLCBtb2RfZmllbGRzPVsndGNwX2Rwb3J0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja190ZXN0X3BhcmFtcz1UcnVlKQorICAgICAgICAKKyAgICAgICAgI0luc2VydCBmbG93IHdpdGggYWN0aW9uIC0tIHNldCB0Y3AgZHN0IHBvcnQsIFNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCBWZXJpZnkgcmVjaWV2ZWQgcGFja2V0IGlzIGV4cGVjdGVkIHBhY2tldAorICAgICAgICBmbG93X21hdGNoX3Rlc3Qoc2VsZiwgYWNfcG9ydF9tYXAsIHBrdD1wa3QsIGV4cF9wa3Q9ZXhwX3BrdCwgCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbGlzdD1hY3RzLCBtYXhfdGVzdD0yKQorCitjbGFzcyBtb2RpZnlfdG9zKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CisgICAgCisgICAgIiIiTW9kaWZ5VE9TIDpNb2RpZnkgdGhlIElQIHR5cGUgb2Ygc2VydmljZSBvZiBhbiBJUCBwYWNrZXQiIiIKKyAgIAorICAgIGRlZiBydW5UZXN0KHNlbGYpOgorCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJSdW5uaW5nIG1vZGlmeV90b3MgdGVzdCIpCisKKyAgICAgICAgb2ZfcG9ydHMgPSBhY19wb3J0X21hcC5rZXlzKCkKKyAgICAgICAgb2ZfcG9ydHMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob2ZfcG9ydHMpID4gMSwgIk5vdCBlbm91Z2ggcG9ydHMgZm9yIHRlc3QiKQorICAgICAgICAKKyAgICAgICAgI0NsZWFyIHN3aXRjaCBzdGF0ZQorICAgICAgICBydiA9IGRlbGV0ZV9hbGxfZmxvd3Moc2VsZi5jb250cm9sbGVyLCBhY19sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIDAsICJGYWlsZWQgdG8gZGVsZXRlIGFsbCBmbG93cyIpCisKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlZlcmlmeSBpZiBzd2l0Y2ggc3VwcG9ydHMgdGhlIGFjdGlvbiAtLSBtb2RpZnlfdG9zLCBpZiBub3Qgc2tpcCB0aGUgdGVzdCIpCisgICAgICAgIGFjX2xvZ2dlci5pbmZvKCJJbnNlcnQgYSBmbG93IHdpdGggYWN0aW9uIC0tIHNldCB0eXBlIG9mIHNlcnZpY2UgIikKKyAgICAgICAgYWNfbG9nZ2VyLmluZm8oIlNlbmQgcGFja2V0IG1hdGNoaW5nIHRoZSBmbG93LCB2ZXJpZnkgcmVjaWV2ZWQgcGFja2V0IGhhcyBUT1MgcmV3cml0dGVuICIpCisgICAgICAgCisgICAgICAgICNWZXJpZnkgc2V0X3RvcyBpcyBhIHN1cHBvcnRlZCBhY3Rpb24KKyAgICAgICAgc3VwX2FjdHMgPSBzd19zdXBwb3J0ZWRfYWN0aW9ucyhzZWxmLHVzZV9jYWNoZT0idHJ1ZSIpCisgICAgICAgIGlmIG5vdCAoc3VwX2FjdHMgJiAxIDw8IG9mcC5PRlBBVF9TRVRfTldfVE9TKToKKyAgICAgICAgICAgIHNraXBfbWVzc2FnZV9lbWl0KHNlbGYsICJNb2RpZnlUT1MgdGVzdCIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjQ3JlYXRlIHBhY2tldCB0byBiZSBzZW50IGFuZCBleHBlY3RlZCBwYWNrZXQgd2l0aCBUT1Mgc2V0IHRvIHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAocGt0LCBleHBfcGt0LCBhY3RzKSA9IHBrdF9hY3Rpb25fc2V0dXAoc2VsZiwgbW9kX2ZpZWxkcz1bJ2lwX3RvcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfdGVzdF9wYXJhbXM9VHJ1ZSkKKyAgICAgICAgCisgICAgICAgICNJbnNlcnQgZmxvdyB3aXRoIGFjdGlvbiAtLSBzZXQgVE9TLCBTZW5kIHBhY2tldCBtYXRjaGluZyB0aGUgZmxvdywgVmVyaWZ5IHJlY2lldmVkIHBhY2tldCBpcyBleHBlY3RlZCBwYWNrZXQKKyAgICAgICAgZmxvd19tYXRjaF90ZXN0KHNlbGYsIGFjX3BvcnRfbWFwLCBwa3Q9cGt0LCBleHBfcGt0PWV4cF9wa3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX2xpc3Q9YWN0cywgbWF4X3Rlc3Q9MiwgZWdyX2NvdW50PS0xKQpkaWZmIC0tZ2l0IGEvdGVzdHMvRGV0YWlsZWRfQ29udHJfU3dfTWVzc2FnZXMucHkgYi90ZXN0cy9EZXRhaWxlZF9Db250cl9Td19NZXNzYWdlcy5weQppbmRleCBlNWMxYzU3Li4zMGM3MmQ5IDEwMDY0NAotLS0gYS90ZXN0cy9EZXRhaWxlZF9Db250cl9Td19NZXNzYWdlcy5weQorKysgYi90ZXN0cy9EZXRhaWxlZF9Db250cl9Td19NZXNzYWdlcy5weQpAQCAtNDAsNyArNDAsNyBAQAogICAgIGNzX2NvbmZpZyA9IGNvbmZpZwogCiAKLWNsYXNzIE92ZXJsYXBfQ2hlY2tpbmcoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIG92ZXJsYXBfY2hlY2tpbmcoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKICAgICAKICAgICAiIiJWZXJpZnkgdGhhdCBpZiBvdmVybGFwIGNoZWNrIGZsYWcgaXMgc2V0IGluIHRoZSBmbG93IGVudHJ5IGFuZCBhbiBvdmVybGFwcGluZyBmbG93IGlzIGluc2VydGVkIHRoZW4gYW4gZXJyb3IgCiAgICAgICAgIGlzIGdlbmVyYXRlZCBhbmQgc3dpdGNoIHJlZnVzZXMgZmxvdyBlbnRyeSIiIgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIE1lc3NhZ2UgY29kZSBpcyBub3Qgb3ZlcmxhcCcpCiAKIAotY2xhc3MgTm9fT3ZlcmxhcF9DaGVja2luZyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorY2xhc3Mgbm9fb3ZlcmxhcF9jaGVja2luZyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogCiAgICAgIiIiVmVyaWZ5IHRoYXQgd2l0aG91dCBvdmVybGFwIGNoZWNrIGZsYWcgc2V0LCBvdmVybGFwcGluZyBmbG93cyBjYW4gYmUgY3JlYXRlZC4iIiIgIAogICAgIApAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIFZlcmlmeV9UYWJsZVN0YXRzKHNlbGYsYWN0aXZlX2VudHJpZXM9MikKIAogCi1jbGFzcyBJZGVudGljYWxfRmxvd3MoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIGlkZW50aWNhbF9mbG93cyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogICAgIAogICAgICIiIlZlcmlmeSB0aGF0IGFkZGluZyB0d28gaWRlbnRpY2FsIGZsb3dzIG92ZXJ3cml0ZXMgdGhlIGV4aXN0aW5nIG9uZSBhbmQgY2xlYXJzIGNvdW50ZXJzIiIiCiAKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgICBWZXJpZnlfRmxvd1N0YXRzKHNlbGYsbWF0Y2gsYnl0ZV9jb3VudD0wLHBhY2tldF9jb3VudD0wKQogCiAgICAKLWNsYXNzIEVtZXJfRmxvd19XaXRoX1RpbWVvdXQoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOiAKK2NsYXNzIGVtZXJfZmxvd193aXRoX3RpbWVvdXQoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOiAKIAogICAgICIiIlRpbWVvdXQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCBmb3IgZW1lcmdlbmN5IGZsb3dzIiIiCiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvciBNZXNzYWdlIGNvZGUgaXMgbm90IGJhZCBlbWVyZ2VuY3kgdGltZW91dCcpCiAKIAotY2xhc3MgTWlzc2luZ19Nb2RpZnlfQWRkKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CitjbGFzcyBtaXNzaW5nX21vZGlmeV9hZGQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKIAogICAgICIiIklmIGEgbW9kaWZ5IGRvZXMgbm90IG1hdGNoIGFuIGV4aXN0aW5nIGZsb3csIHRoZSBmbG93IGdldHMgYWRkZWQgIiIiCiAgICAgCkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICAgICAgVmVyaWZ5X1RhYmxlU3RhdHMoc2VsZixhY3RpdmVfZW50cmllcz0xKQogCiAKLWNsYXNzIE1vZGlmeV9BY3Rpb24oYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIG1vZGlmeV9hY3Rpb24oYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKIAogICAgICIiIkEgbW9kaWZpZWQgZmxvdyBwcmVzZXJ2ZXMgY291bnRlcnMiIiIKICAgICAKQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICBWZXJpZnlfRmxvd1N0YXRzKHNlbGYsbWF0Y2gsYnl0ZV9jb3VudD0oMipsZW4oc3RyKHBrdCkpKSxwYWNrZXRfY291bnQ9MikKIAogCi1jbGFzcyBTdHJpY3RfTW9kaWZ5X0FjdGlvbihiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorY2xhc3Mgc3RyaWN0X21kaWZ5X2FjdGlvbihiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogCiAgICAgIiIiU3RyaWN0IE1vZGlmeSBGbG93IGFsc28gY2hhbmdlcyBhY3Rpb24gcHJlc2VydmVzIGNvdW50ZXJzIiIiCiAKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICBWZXJpZnlfRmxvd1N0YXRzKHNlbGYsbWF0Y2gsYnl0ZV9jb3VudD0oMipsZW4oc3RyKHBrdCkpKSxwYWNrZXRfY291bnQ9MikKIAogCi1jbGFzcyBEZWxldGVfTm9uRXhpc3RpbmdfRmxvdyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorY2xhc3MgZGVsZXRlX25vbmV4aXN0aW5nX2Zsb3coYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKICAgICAKICAgICAiIiJSZXF1ZXN0IGRlbGV0aW9uIG9mIG5vbi1leGlzdGluZyBmbG93IiIiCiAgICAgCkBAIC0zODIsNyArMzgyLDcgQEAKIAogCiAgICAgICAgIAotY2xhc3MgU2VuZF9GbG93X1JlbShiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorY2xhc3Mgc2VuZF9mbG93X3JlbShiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogICAgIAogICAgICIiIkNoZWNrIGRlbGV0aW9uIG9mIGZsb3dzIGhhcHBlbnMgYW5kIGdlbmVyYXRlcyBtZXNzYWdlcyBhcyBjb25maWd1cmVkLgogICAgIElmIFNlbmQgRmxvdyByZW1vdmVkIG1lc3NhZ2UgRmxhZyBpcyBzZXQgaW4gdGhlIGZsb3cgZW50cnksIHRoZSBmbG93IGRlbGV0aW9uIG9mIHRoYXQgcmVzcGVjdGl2ZSBmbG93IHNob3VsZCBnZW5lcmF0ZSB0aGUgZmxvdyByZW1vdmVkIG1lc3NhZ2UsIApAQCAtNDQzLDcgKzQ0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAnRGlkIG5vdCByZWNlaXZlIGZsb3cgcmVtb3ZlZCBtZXNzYWdlIGZvciB0aGlzIGZsb3cnKQogCiAKLWNsYXNzIERlbGV0ZV9FbWVyX0Zsb3coYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgorY2xhc3MgZGVsZXRlX2VtZXJfZmxvdyhiYXNpYy5TaW1wbGVQcm90b2NvbCk6CiAKICAgICAiIiJEZWxldGUgZW1lcmdlbmN5IGZsb3cgYW5kIHZlcmlmeSBubyBtZXNzYWdlIGlzIGdlbmVyYXRlZC5BbiBlbWVyZ2VuY3kgZmxvdyBkZWxldGlvbiB3aWxsIG5vdCBnZW5lcmF0ZSBmbG93LXJlbW92ZWQgbWVzc2FnZXMgZXZlbiBpZiAKICAgICBTZW5kIEZsb3cgcmVtb3ZlZCBtZXNzYWdlIGZsYWcgd2FzIHNldCBkdXJpbmcgdGhlIGVtZXJnZW5jeSBmbG93IGVudHJ5IiIiCkBAIC00ODYsNyArNDg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0IEZhaWxlZCAnKQogCiAKLWNsYXNzIERlbGV0ZV9TdHJpY3RfTm9uU3RyaWN0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CitjbGFzcyBkZWxldGVfc3RyaWN0X25vbnN0cmljdChiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogCiAgICAgIiIiRGVsZXRlIGFuZCB2ZXJpZnkgc3RyaWN0IGFuZCBub24tc3RyaWN0IGJlaGF2aW9ycwogICAgIFRoaXMgdGVzdCBjb21wYXJlcyB0aGUgYmVoYXZpb3Igb2YgZGVsZXRlIHN0cmljdCBhbmQgbm9uLXN0cmljdCIiIgpAQCAtNTczLDcgKzU3Myw3IEBACiAKICAgICAgICAgCiAgICAKLWNsYXNzIERlbGV0ZV9XaXRoX091dHBvcnQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIGRlbGV0ZV93aXRoX291dHBvcnQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKIAogICAgICIiIkRlbGV0ZSBmbG93cyBmaWx0ZXJlZCBieSBhY3Rpb24gb3V0cG9ydC5JZiB0aGUgb3V0X3BvcnQgZmllbGQgaW4gdGhlIGRlbGV0ZSBjb21tYW5kIGNvbnRhaW5zIGEgdmFsdWUgb3RoZXIgdGhhbiBPRlBQX05PTkUsCiAgICAgaXQgaW50cm9kdWNlcyBhIGNvbnN0cmFpbnQgd2hlbiBtYXRjaGluZy4gVGhpcyBjb25zdHJhaW50IGlzIHRoYXQgdGhlIHJ1bGUgbXVzdCBjb250YWluIGFuIG91dHB1dCBhY3Rpb24gZGlyZWN0ZWQgYXQgdGhhdCBwb3J0LiIiIgpAQCAtNjMyLDcgKzYzMiw3IEBACiAgICAgICAgIFZlcmlmeV9UYWJsZVN0YXRzKHNlbGYsYWN0aXZlX2VudHJpZXM9MCkKIAogCi1jbGFzcyBJZGxlX1RpbWVvdXQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIGlkbGVfdGltZW91dChiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogCiAgICAgIiIiIFZlcmlmeSB0aGF0IGlkbGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZCIiIgogCkBAIC02NzYsNyArNjc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnRmxvdyB3YXMgbm90IGFsaXZlIGZvciAxIHNlYycpCiAKIAotY2xhc3MgQWRkX01vZGlmeV9XaXRoX091dHBvcnQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIGFkZF9tb2RpZnlfd2l0aF9vdXRwb3J0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CiAKICAgICAiIiJBZGQsIG1vZGlmeSBmbG93cyB3aXRoIG91dHBvcnQgc2V0LiBUaGlzIGZpZWxkIGlzIGlnbm9yZWQgYnkgQURELCBNT0RJRlksIGFuZCBNT0RJRlkgU1RSSUNUIG1lc3NhZ2VzLiIiIgogCkBAIC03MTYsNyArNzE2LDcgQEAKIAogCiAKLWNsYXNzIEhhcmRfVGltZW91dChiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorY2xhc3MgaGFyZF90aW1lb3V0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CiAKICAgICAiIiIgVmVyaWZ5IHRoYXQgaGFyZCB0aW1lb3V0IGlzIGltcGxlbWVudGVkICIiIgogCkBAIC03NjAsNyArNzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnRmxvdyB3YXMgbm90IGFsaXZlIGZvciAxIHNlYycpCiAKIAotY2xhc3MgRmxvd19UaW1lb3V0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CitjbGFzcyBmbG93X3RpbWVvdXQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKICAgCiAgICAgIiIiVmVyaWZ5IHRoYXQgRmxvdyByZW1vdmVkIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQgYXMgZXhwZWN0ZWQKICAgICBGbG93IHJlbW92ZWQgbWVzc2FnZXMgYmVpbmcgZ2VuZXJhdGVkIHdoZW4gZmxhZyBpcyBzZXQsIGlzIGFscmVhZHkgdGVzdGVkIGluIHRoZSBhYm92ZSB0ZXN0cyAKZGlmZiAtLWdpdCBhL3Rlc3RzL09wZW5mbG93X1Byb3RvY29sX01lc3NhZ2VzLnB5IGIvdGVzdHMvT3BlbmZsb3dfUHJvdG9jb2xfTWVzc2FnZXMucHkKaW5kZXggZDNkYjNiMS4uMmUzNzA1OCAxMDA2NDQKLS0tIGEvdGVzdHMvT3BlbmZsb3dfUHJvdG9jb2xfTWVzc2FnZXMucHkKKysrIGIvdGVzdHMvT3BlbmZsb3dfUHJvdG9jb2xfTWVzc2FnZXMucHkKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBvZl9jb25maWcgPSBjb25maWcKIAogCi1jbGFzcyBGZWF0dXJlc19SZXF1ZXN0KGJhc2ljLlNpbXBsZVByb3RvY29sKTogCitjbGFzcyBmZWF0dXJlc19yZXF1ZXN0KGJhc2ljLlNpbXBsZVByb3RvY29sKTogCiAKICAgICAiIiJWZXJpZnkgRmVhdHVyZXNfUmVxdWVzdC1SZXBseSBpcyBpbXBsZW1lbnRlZCAKICAgICBhKSBTZW5kIE9GUFRfRkVBVFVSRVNfUkVRVUVTVApAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJ0RpZCBub3QgcmVjZWl2ZSBGZWF0dXJlcyBSZXBseScpCiAKIAotY2xhc3MgQ29uZmlndXJhdGlvbl9SZXF1ZXN0KGJhc2ljLlNpbXBsZVByb3RvY29sKToKK2NsYXNzIGNvbmZpZ3VyYXRpb25fcmVxdWVzdChiYXNpYy5TaW1wbGVQcm90b2NvbCk6CiAgICAgCiAgICAgIiIiQ2hlY2sgYmFzaWMgR2V0IENvbmZpZyByZXF1ZXN0IGlzIGltcGxlbWVudGVkCiAgICAgYSkgU2VuZCBPRlBUX0dFVF9DT05GSUdfUkVRVUVTVApAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZSBpcyBub3QgTm9uZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAnRGlkIG5vdCByZWNlaXZlIE9GUFRfR0VUX0NPTkZJR19SRVBMWScpCiAKLWNsYXNzIE1vZGlmeV9TdGF0ZV9BZGQoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgorY2xhc3MgbW9kaWZ5X3N0YXRlX2FkZChiYXNpYy5TaW1wbGVQcm90b2NvbCk6CiAgICAgCiAgICAgIiIiQ2hlY2sgYmFzaWMgRmxvdyBBZGQgcmVxdWVzdCBpcyBpbXBsZW1lbnRlZAogICAgIGEpIFNlbmQgIE9GUFRfRkxPV19NT0QgLCBjb21tYW5kID0gT0ZQRkNfQUREIApAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgIFZlcmlmeV9UYWJsZVN0YXRzKHNlbGYsYWN0aXZlX2VudHJpZXM9MSkKIAogCi1jbGFzcyBNb2RpZnlfU3RhdGVfRGVsZXRlKGJhc2ljLlNpbXBsZVByb3RvY29sKToKK2NsYXNzIG1vZGlmeV9zdGF0ZV9kZWxldGUoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgogICAgIAogICAgICIiIkNoZWNrIEJhc2ljIEZsb3cgRGVsZXRlIHJlcXVlc3QgaXMgaW1wbGVtZW50ZWQKICAgICBhKSBTZW5kIE9GUFRfRkxPV19NT0QsIGNvbW1hbmQgPSBPRlBGQ19BREQKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAgICAgICAKIAotY2xhc3MgTW9kaWZ5X1N0YXRlX01vZGlmeShiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgorY2xhc3MgbW9kaWZ5X3N0YXRlX21vZGlmeShiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogICAgIAogICAgICIiIlZlcmlmeSBiYXNpYyBGbG93IE1vZGlmeSByZXF1ZXN0IGlzIGltcGxlbWVudGVkCiAgICAgYSkgU2VuZCBPRlBUX0ZMT1dfTU9ELCBjb21tYW5kID0gT0ZQRkNfQURELCBBY3Rpb24gQSAKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICBTZW5kUGFja2V0KHNlbGYsIHBrdCwgb2ZfcG9ydHNbMF0sb2ZfcG9ydHNbMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIAogCi1jbGFzcyBSZWFkX1N0YXRlKGJhc2ljLlNpbXBsZVByb3RvY29sKToKK2NsYXNzIHJlYWRfc3RhdGUoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgogICAgIAogICAgICIiIlRlc3QgdGhhdCBhIGJhc2ljIFJlYWQgc3RhdGUgcmVxdWVzdCAobGlrZSBmbG93X3N0YXRzX2dldCByZXF1ZXN0KSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBlcnJvcgogICAgIGEpIFNlbmQgT0ZQVF9GTE9XX01PRCwgY29tbWFuZCA9IE9GUEZDX0FERApAQCAtMjIxLDcgKzIyMSw3IEBACiAgICAgICAgICNWZXJpZnkgRmxvd19TdGF0cyByZXF1ZXN0IGRvZXMgbm90IGdlbmVyYXRlIGVycm9ycwogICAgICAgICBWZXJpZnlfRmxvd1N0YXRzKHNlbGYsbWF0Y2gpCiAgICAgICAgIAotY2xhc3MgU2VuZF9QYWNrZXQoYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKK2NsYXNzIHNlbmRfcGFja2V0KGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CiAgICAgCiAgICAgIiIiVGVzdCBwYWNrZXQgb3V0IGZ1bmN0aW9uCiAgICAgYSkgU2VuZCBwYWNrZXQgb3V0IG1lc3NhZ2UgZm9yIGVhY2ggZGF0YXBsYW5lIHBvcnQuCkBAIC0yNzgsNyArMjc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXNwb25zZSBwYWNrZXQgZG9lcyBub3QgbWF0Y2ggc2VuZCBwYWNrZXQnKQogCiAgICAgICAgIAotY2xhc3MgUGFja2V0X0luKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CitjbGFzcyBwYWNrZXRfaW4oYmFzaWMuU2ltcGxlRGF0YVBsYW5lKToKICAgICAKICAgICAiIiJUZXN0IGJhc2ljIHBhY2tldF9pbiBmdW5jdGlvbgogICAgIGEpIFNlbmQgYSBzaW1wbGUgdGNwIHBhY2tldCB0byBhIGRhdGFwbGFuZSBwb3J0LCB3aXRob3V0IGFueSBmbG93LWVudHJ5IApAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BhY2tldCBpbiBldmVudCBpcyBub3Qgc2VudCB0byB0aGUgY29udHJvbGxlcicpIAogCiAKLWNsYXNzIEhlbGxvKGJhc2ljLlNpbXBsZURhdGFQbGFuZSk6CitjbGFzcyBoZWxsbyhiYXNpYy5TaW1wbGVEYXRhUGxhbmUpOgogICAgIAogICAgICIiIlRlc3QgSGVsbG8gbWVzc2FnZXMgYXJlIGltcGxlbWVudGVkCiAgICAgYSkgQ3JlYXRlIEhlbGxvIG1lc3NhZ2VzIGZyb20gY29udHJvbGxlcgpAQCAtMzM2LDcgKzMzNiw3IEBACiAKIAogCi1jbGFzcyBFY2hvV2l0aG91dEJvZHkoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgorY2xhc3MgZWNob193aXRob3V0X2JvZHkoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgogICAgIAogICAgICIiIlRlc3QgYmFzaWMgZWNoby1yZXBseSBpcyBpbXBsZW1lbnRlZAogICAgIGEpICBTZW5kIGVjaG8tcmVxdWVzdCBmcm9tIHRoZSBjb250cm9sbGVyIHNpZGUsIG5vdGUgZWNobyBib2R5IGlzIGVtcHR5IGhlcmUuCkBAIC0zNTksNyArMzU5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzcG9uc2UuZGF0YSksIDAsICdyZXNwb25zZSBkYXRhIG5vbi1lbXB0eScpCiAKIAotY2xhc3MgQmFycmllclJlcXVlc3RSZXBseShiYXNpYy5TaW1wbGVQcm90b2NvbCk6CitjbGFzcyBiYXJyaWVyX3JlcXVlc3RfcmVwbHkoYmFzaWMuU2ltcGxlUHJvdG9jb2wpOgogCiAgICAgIiIiIENoZWNrIGJhc2ljIEJhcnJpZXIgcmVxdWVzdCBpcyBpbXBsZW1lbnRlZAogICAgIGEpIFNlbmQgT0ZQVF9CQVJSSUVSX1JFUVVFU1QK