{ "name": "Arc4BoxContract", "structs": { "DynamicArrayInAStruct": [ { "name": "a", "type": "uint64" }, { "name": "arr", "type": "uint64[]" }, { "name": "b", "type": "uint64" }, { "name": "arr2", "type": "uint64[]" } ], "LargeStruct": [ { "name": "a", "type": "byte[1024]" }, { "name": "b", "type": "byte[1024]" }, { "name": "c", "type": "byte[1024]" }, { "name": "d", "type": "byte[1024]" }, { "name": "e", "type": "uint64" }, { "name": "f", "type": "byte[1024]" }, { "name": "g", "type": "byte[1024]" }, { "name": "h", "type": "uint64" } ] }, "methods": [ { "name": "setBoxes", "args": [ { "type": "uint64", "name": "a" }, { "type": "byte[]", "name": "b" }, { "type": "string", "name": "c" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "checkKeys", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "createManyInts", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setManyInts", "args": [ { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sumManyInts", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deleteBoxes", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "indirectExtractAndReplace", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "readBoxes", "args": [], "returns": { "type": "(uint64,byte[],string,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "boxesExist", "args": [], "returns": { "type": "(bool,bool,bool,bool)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sliceBox", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "arc4Box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testBoxRef", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "createBools", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setBool", "args": [ { "type": "uint64", "name": "index" }, { "type": "bool", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sumBools", "args": [ { "type": "uint64", "name": "stopAtTotal" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": { "boxA": { "keyType": "AVMString", "valueType": "uint64", "key": "Ym94QQ==" }, "boxB": { "keyType": "AVMString", "valueType": "byte[]", "key": "Yg==" }, "boxC": { "keyType": "AVMString", "valueType": "string", "key": "Qk9YX0M=" }, "boxD": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94RA==" }, "boxRef": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94UmVm" }, "boxLarge": { "keyType": "AVMString", "valueType": "LargeStruct", "key": "Ym94TGFyZ2U=" }, "manyInts": { "keyType": "AVMString", "valueType": "uint64[513]", "key": "bWFueUludHM=" }, "dynamicBox": { "keyType": "AVMString", "valueType": "uint64[]", "key": "ZHluYW1pY0JveA==" }, "dynamicArrStruct": { "keyType": "AVMString", "valueType": "DynamicArrayInAStruct", "key": "ZHluYW1pY0FyclN0cnVjdA==" }, "tooManyBools": { "keyType": "AVMString", "valueType": "bool[33000]", "key": "dG9vTWFueUJvb2xz" } } }, "maps": { "global": {}, "local": {}, "box": { "boxMap": { "keyType": "uint64", "valueType": "AVMString", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 2169 ], "errorMessage": "Blob exists" }, { "pc": [ 472, 486, 909, 924, 936, 943, 951, 959, 981, 1004, 1096, 1178, 1211, 1307, 1383, 1456, 1538, 1689, 1724, 1730, 1830, 1895, 2004, 2017, 2030, 2043, 2172, 2278 ], "errorMessage": "Box must have value" }, { "pc": [ 1469 ], "errorMessage": "box a key ok" }, { "pc": [ 1475 ], "errorMessage": "box b key ok" }, { "pc": [ 1479 ], "errorMessage": "box c key ok" }, { "pc": [ 1485 ], "errorMessage": "box large key ok" }, { "pc": [ 921 ], "errorMessage": "direct reference should match copy" }, { "pc": [ 2398 ], "errorMessage": "expected ManyInts to exceed max bytes size" }, { "pc": [ 2077, 2194 ], "errorMessage": "has data" }, { "pc": [ 2009, 2022, 2035, 2049, 2243 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 889, 1519, 1566, 1740, 2257, 2314 ], "errorMessage": "index out of bounds" }, { "pc": [ 505, 523, 919 ], "errorMessage": "invalid array length header" }, { "pc": [ 787 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 514, 532 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 498, 570, 579, 778, 805 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 2065, 2069 ], "errorMessage": "no data" }, { "pc": [ 1943, 1954, 1965, 1977 ], "errorMessage": "overflow" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMiA0MDk2CiAgICBieXRlY2Jsb2NrICJCT1hfQyIgImJsb2IiICJib3hEIiAiYm94QSIgImIiICJib3hMYXJnZSIgImQiICJ0b29NYW55Qm9vbHMiIDB4MTUxZjdjNzUgIm1hbnlJbnRzIiAiNDIiICIwIiAiSGVsbG8iICJoZWxsbyIgImJveFJlZiIgMHgwNjgxMDEKICAgIGIgbWFpbl9ibG9ja0AwCgptYWluX2Jsb2NrQDA6CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICBiIG1haW5faWZfYm9keUAxCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgYiBtYWluX2Jsb2NrQDMKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MAogICAgLy8gY2xhc3MgQXJjNEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18xIC8vIDAKICAgICE9CiAgICBieiBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAyNAogICAgYiBtYWluX2FiaV9yb3V0aW5nQDQKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MAogICAgLy8gY2xhc3MgQXJjNEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMSAvLyAwCiAgICAhPQogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyMgogICAgYiBtYWluX2NhbGxfTm9PcEA1CgptYWluX2NhbGxfTm9PcEA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQwCiAgICAvLyBjbGFzcyBBcmM0Qm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDI3Zjc2YjY5IC8vIG1ldGhvZCAic2V0Qm94ZXModWludDY0LGJ5dGVbXSxzdHJpbmcpdm9pZCIKICAgIHB1c2hieXRlcyAweDkxMjM2MTdhIC8vIG1ldGhvZCAiY2hlY2tLZXlzKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjcyNjM5NDggLy8gbWV0aG9kICJjcmVhdGVNYW55SW50cygpdm9pZCIKICAgIHB1c2hieXRlcyAweDA5YmNiYTVlIC8vIG1ldGhvZCAic2V0TWFueUludHModWludDY0LHVpbnQ2NCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4N2EwZDNkYzggLy8gbWV0aG9kICJzdW1NYW55SW50cygpdWludDY0IgogICAgcHVzaGJ5dGVzIDB4N2QwMzliNDMgLy8gbWV0aG9kICJkZWxldGVCb3hlcygpdm9pZCIKICAgIHB1c2hieXRlcyAweDNiYzNiMmY5IC8vIG1ldGhvZCAiaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGRjZGU2MTRkIC8vIG1ldGhvZCAicmVhZEJveGVzKCkodWludDY0LGJ5dGVbXSxzdHJpbmcsdWludDY0KSIKICAgIHB1c2hieXRlcyAweGUxMzkxNzIxIC8vIG1ldGhvZCAiYm94ZXNFeGlzdCgpKGJvb2wsYm9vbCxib29sLGJvb2wpIgogICAgcHVzaGJ5dGVzIDB4NjgzYjVjNjQgLy8gbWV0aG9kICJzbGljZUJveCgpdm9pZCIKICAgIHB1c2hieXRlcyAweGE1YTYyNmZlIC8vIG1ldGhvZCAiYXJjNEJveCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDkwMzllZGRlIC8vIG1ldGhvZCAidGVzdEJveFJlZigpdm9pZCIKICAgIHB1c2hieXRlcyAweDI4YjJlMjQxIC8vIG1ldGhvZCAiY3JlYXRlQm9vbHMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg4ZGNlZDc5YiAvLyBtZXRob2QgInNldEJvb2wodWludDY0LGJvb2wpdm9pZCIKICAgIHB1c2hieXRlcyAweDFjNzdmNDk2IC8vIG1ldGhvZCAic3VtQm9vbHModWludDY0KXVpbnQ2NCIKICAgIHVuY292ZXIgMTUKICAgIG1hdGNoIG1haW5fc2V0Qm94ZXNfcm91dGVANiBtYWluX2NoZWNrS2V5c19yb3V0ZUA3IG1haW5fY3JlYXRlTWFueUludHNfcm91dGVAOCBtYWluX3NldE1hbnlJbnRzX3JvdXRlQDkgbWFpbl9zdW1NYW55SW50c19yb3V0ZUAxMCBtYWluX2RlbGV0ZUJveGVzX3JvdXRlQDExIG1haW5faW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZV9yb3V0ZUAxMiBtYWluX3JlYWRCb3hlc19yb3V0ZUAxMyBtYWluX2JveGVzRXhpc3Rfcm91dGVAMTQgbWFpbl9zbGljZUJveF9yb3V0ZUAxNSBtYWluX2FyYzRCb3hfcm91dGVAMTYgbWFpbl90ZXN0Qm94UmVmX3JvdXRlQDE3IG1haW5fY3JlYXRlQm9vbHNfcm91dGVAMTggbWFpbl9zZXRCb29sX3JvdXRlQDE5IG1haW5fc3VtQm9vbHNfcm91dGVAMjAKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDIxCgptYWluX3N3aXRjaF9jYXNlX25leHRAMjE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAyMwoKbWFpbl9hZnRlcl9pZl9lbHNlQDIzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMjUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyNToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MAogICAgLy8gY2xhc3MgQXJjNEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBlcnIKCm1haW5fc3VtQm9vbHNfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MTAKICAgIC8vIHN1bUJvb2xzKHN0b3BBdFRvdGFsOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzdW1Cb29scwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMjEKCm1haW5fc2V0Qm9vbF9yb3V0ZUAxOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUwNgogICAgLy8gc2V0Qm9vbChpbmRleDogdWludDY0LCB2YWx1ZTogYm9vbGVhbikgewogICAgY2FsbHN1YiBzZXRCb29sCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl9jcmVhdGVCb29sc19yb3V0ZUAxODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUwMgogICAgLy8gY3JlYXRlQm9vbHMoKSB7CiAgICBjYWxsc3ViIGNyZWF0ZUJvb2xzCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl90ZXN0Qm94UmVmX3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDYzCiAgICAvLyB0ZXN0Qm94UmVmKCkgewogICAgY2FsbHN1YiB0ZXN0Qm94UmVmCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl9hcmM0Qm94X3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDU0CiAgICAvLyBhcmM0Qm94KCkgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl9zbGljZUJveF9yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ0NQogICAgLy8gc2xpY2VCb3goKSB7CiAgICBjYWxsc3ViIHNsaWNlQm94CiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl9ib3hlc0V4aXN0X3JvdXRlQDE0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDQxCiAgICAvLyBib3hlc0V4aXN0KCk6IHJlYWRvbmx5IFtib29sZWFuLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuXSB7CiAgICBjYWxsc3ViIGJveGVzRXhpc3QKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDIxCgptYWluX3JlYWRCb3hlc19yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQzNwogICAgLy8gcmVhZEJveGVzKCk6IHJlYWRvbmx5IFt1aW50NjQsIGJ5dGVzLCBhcmM0LlN0ciwgdWludDY0XSB7CiAgICBjYWxsc3ViIHJlYWRCb3hlcwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMjEKCm1haW5faW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZV9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQzMQogICAgLy8gaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZSgpIHsKICAgIGNhbGxzdWIgaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZQogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMjEKCm1haW5fZGVsZXRlQm94ZXNfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MTgKICAgIC8vIGRlbGV0ZUJveGVzKCkgewogICAgY2FsbHN1YiBkZWxldGVCb3hlcwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMjEKCm1haW5fc3VtTWFueUludHNfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MDkKICAgIC8vIHN1bU1hbnlJbnRzKCkgewogICAgY2FsbHN1YiBzdW1NYW55SW50cwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMjEKCm1haW5fc2V0TWFueUludHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQwNQogICAgLy8gc2V0TWFueUludHMoaW5kZXg6IHVpbnQ2NCwgdmFsdWU6IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRNYW55SW50cwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMjEKCm1haW5fY3JlYXRlTWFueUludHNfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQwMQogICAgLy8gY3JlYXRlTWFueUludHMoKSB7CiAgICBjYWxsc3ViIGNyZWF0ZU1hbnlJbnRzCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl9jaGVja0tleXNfcm91dGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM5NAogICAgLy8gY2hlY2tLZXlzKCkgewogICAgY2FsbHN1YiBjaGVja0tleXMKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDIxCgptYWluX3NldEJveGVzX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNTkKICAgIC8vIHNldEJveGVzKGE6IHVpbnQ2NCwgYjogYnl0ZXMsIGM6IGFyYzQuU3RyKSB7CiAgICBjYWxsc3ViIHNldEJveGVzCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAyMQoKbWFpbl9jcmVhdGVfTm9PcEAyMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDIzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAyNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MAogICAgLy8gY2xhc3MgQXJjNEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gTm9PcAogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzEgLy8gMAogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBiIGVuc3VyZV9idWRnZXRfYmxvY2tAMAoKZW5zdXJlX2J1ZGdldF9ibG9ja0AwOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwCiAgICArCiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfYm9keUAyCgplbnN1cmVfYnVkZ2V0X3doaWxlX2JvZHlAMjoKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBieXRlYyAxNSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjIDE1IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2RpZyAtMQogICAgbWF0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpnZXRCb3hWYWx1ZVBsdXMxKGJveDogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0Qm94VmFsdWVQbHVzMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUyNQogICAgLy8gZnVuY3Rpb24gZ2V0Qm94VmFsdWVQbHVzMShib3g6IEJveDx1aW50NjQ+KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgYiBnZXRCb3hWYWx1ZVBsdXMxX2Jsb2NrQDAKCmdldEJveFZhbHVlUGx1czFfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUyNgogICAgLy8gcmV0dXJuIFVpbnQ2NChib3gudmFsdWUgKyAxKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpnZXRCb3hSZWZMZW5ndGgocmVmOiBieXRlcykgLT4gdWludDY0OgpnZXRCb3hSZWZMZW5ndGg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MjkKICAgIC8vIGZ1bmN0aW9uIGdldEJveFJlZkxlbmd0aChyZWY6IEJveDxieXRlcz4pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICBiIGdldEJveFJlZkxlbmd0aF9ibG9ja0AwCgpnZXRCb3hSZWZMZW5ndGhfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUzMAogICAgLy8gcmV0dXJuIHJlZi5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2V0Qm94ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRCb3hlczoKICAgIGIgc2V0Qm94ZXNfYmxvY2tAMAoKc2V0Qm94ZXNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM1OQogICAgLy8gc2V0Qm94ZXMoYTogdWludDY0LCBiOiBieXRlcywgYzogYXJjNC5TdHIpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAxCiAgICAqCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDEKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zZXRCb3hlcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuY2hlY2tLZXlzW3JvdXRpbmddKCkgLT4gdm9pZDoKY2hlY2tLZXlzOgogICAgYiBjaGVja0tleXNfYmxvY2tAMAoKY2hlY2tLZXlzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozOTQKICAgIC8vIGNoZWNrS2V5cygpIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jaGVja0tleXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmNyZWF0ZU1hbnlJbnRzW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlTWFueUludHM6CiAgICBiIGNyZWF0ZU1hbnlJbnRzX2Jsb2NrQDAKCmNyZWF0ZU1hbnlJbnRzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MDEKICAgIC8vIGNyZWF0ZU1hbnlJbnRzKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmNyZWF0ZU1hbnlJbnRzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zZXRNYW55SW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldE1hbnlJbnRzOgogICAgYiBzZXRNYW55SW50c19ibG9ja0AwCgpzZXRNYW55SW50c19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDA1CiAgICAvLyBzZXRNYW55SW50cyhpbmRleDogdWludDY0LCB2YWx1ZTogdWludDY0KSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2V0TWFueUludHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzW3JvdXRpbmddKCkgLT4gdm9pZDoKc3VtTWFueUludHM6CiAgICBiIHN1bU1hbnlJbnRzX2Jsb2NrQDAKCnN1bU1hbnlJbnRzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MDkKICAgIC8vIHN1bU1hbnlJbnRzKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzCiAgICBpdG9iCiAgICBieXRlYyA4IC8vIDB4MTUxZjdjNzUKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmRlbGV0ZUJveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVsZXRlQm94ZXM6CiAgICBiIGRlbGV0ZUJveGVzX2Jsb2NrQDAKCmRlbGV0ZUJveGVzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MTgKICAgIC8vIGRlbGV0ZUJveGVzKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmRlbGV0ZUJveGVzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5pbmRpcmVjdEV4dHJhY3RBbmRSZXBsYWNlW3JvdXRpbmddKCkgLT4gdm9pZDoKaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZToKICAgIGIgaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZV9ibG9ja0AwCgppbmRpcmVjdEV4dHJhY3RBbmRSZXBsYWNlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MzEKICAgIC8vIGluZGlyZWN0RXh0cmFjdEFuZFJlcGxhY2UoKSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QucmVhZEJveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVhZEJveGVzOgogICAgYiByZWFkQm94ZXNfYmxvY2tAMAoKcmVhZEJveGVzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MzcKICAgIC8vIHJlYWRCb3hlcygpOiByZWFkb25seSBbdWludDY0LCBieXRlcywgYXJjNC5TdHIsIHVpbnQ2NF0gewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnJlYWRCb3hlcwogICAgY292ZXIgMwogICAgY292ZXIgMwogICAgY292ZXIgMQogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgY292ZXIgMQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgcHVzaGludCAyMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGNvdmVyIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDIwCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgYnl0ZWMgOCAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5ib3hlc0V4aXN0W3JvdXRpbmddKCkgLT4gdm9pZDoKYm94ZXNFeGlzdDoKICAgIGIgYm94ZXNFeGlzdF9ibG9ja0AwCgpib3hlc0V4aXN0X2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NDEKICAgIC8vIGJveGVzRXhpc3QoKTogcmVhZG9ubHkgW2Jvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5ib3hlc0V4aXN0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBjb3ZlciAxCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMQogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMyAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgYnl0ZWMgOCAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zbGljZUJveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNsaWNlQm94OgogICAgYiBzbGljZUJveF9ibG9ja0AwCgpzbGljZUJveF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDQ1CiAgICAvLyBzbGljZUJveCgpIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zbGljZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuYXJjNEJveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzRCb3g6CiAgICBiIGFyYzRCb3hfYmxvY2tAMAoKYXJjNEJveF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDU0CiAgICAvLyBhcmM0Qm94KCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmFyYzRCb3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnRlc3RCb3hSZWZbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0Qm94UmVmOgogICAgYiB0ZXN0Qm94UmVmX2Jsb2NrQDAKCnRlc3RCb3hSZWZfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ2MwogICAgLy8gdGVzdEJveFJlZigpIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC50ZXN0Qm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jcmVhdGVCb29sc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUJvb2xzOgogICAgYiBjcmVhdGVCb29sc19ibG9ja0AwCgpjcmVhdGVCb29sc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NTAyCiAgICAvLyBjcmVhdGVCb29scygpIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jcmVhdGVCb29scwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2V0Qm9vbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJvb2w6CiAgICBiIHNldEJvb2xfYmxvY2tAMAoKc2V0Qm9vbF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NTA2CiAgICAvLyBzZXRCb29sKGluZGV4OiB1aW50NjQsIHZhbHVlOiBib29sZWFuKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18xIC8vIDAKICAgIGdldGJpdAogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNldEJvb2wKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzW3JvdXRpbmddKCkgLT4gdm9pZDoKc3VtQm9vbHM6CiAgICBiIHN1bUJvb2xzX2Jsb2NrQDAKCnN1bUJvb2xzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MTAKICAgIC8vIHN1bUJvb2xzKHN0b3BBdFRvdGFsOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzCiAgICBpdG9iCiAgICBieXRlYyA4IC8vIDB4MTUxZjdjNzUKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNldEJveGVzKGE6IHVpbnQ2NCwgYjogYnl0ZXMsIGM6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNldEJveGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzU5CiAgICAvLyBzZXRCb3hlcyhhOiB1aW50NjQsIGI6IGJ5dGVzLCBjOiBhcmM0LlN0cikgewogICAgcHJvdG8gMyAwCiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2V0Qm94ZXNfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zZXRCb3hlc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzYwCiAgICAvLyBjb25zdCBkeW5hbWljQnl0ZXMgPSBuZXcgYXJjNC5EeW5hbWljQnl0ZXMoYikKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2MQogICAgLy8gdGhpcy5ib3hBLnZhbHVlID0gYQogICAgZnJhbWVfZGlnIC0zCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDEKICAgIC8vIGJveEEgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEEnIH0pCiAgICBieXRlY18zIC8vICJib3hBIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJveEEudmFsdWUgPSBhCiAgICB1bmNvdmVyIDEKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MgogICAgLy8gYm94QiA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdiJyB9KQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2MgogICAgLy8gdGhpcy5ib3hCLnZhbHVlID0gZHluYW1pY0J5dGVzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MgogICAgLy8gYm94QiA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdiJyB9KQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2MgogICAgLy8gdGhpcy5ib3hCLnZhbHVlID0gZHluYW1pY0J5dGVzCiAgICBkaWcgMQogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNjMKICAgIC8vIHRoaXMuYm94Qy52YWx1ZSA9IGMKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNjMKICAgIC8vIHRoaXMuYm94Qy52YWx1ZSA9IGMKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzY0CiAgICAvLyB0aGlzLmJveEQudmFsdWUgPSBkeW5hbWljQnl0ZXMubmF0aXZlCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDQKICAgIC8vIGJveEQgPSBCb3g8Ynl0ZXM+KHsga2V5OiAnYm94RCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveEQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNjQKICAgIC8vIHRoaXMuYm94RC52YWx1ZSA9IGR5bmFtaWNCeXRlcy5uYXRpdmUKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ0CiAgICAvLyBib3hEID0gQm94PGJ5dGVzPih7IGtleTogJ2JveEQnIH0pCiAgICBieXRlY18yIC8vICJib3hEIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzY0CiAgICAvLyB0aGlzLmJveEQudmFsdWUgPSBkeW5hbWljQnl0ZXMubmF0aXZlCiAgICB1bmNvdmVyIDEKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NwogICAgLy8gYm94TGFyZ2UgPSBCb3g8TGFyZ2VTdHJ1Y3Q+KHsga2V5OiAnYm94TGFyZ2UnIH0pCiAgICBieXRlYyA1IC8vICJib3hMYXJnZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5ib3hMYXJnZS5jcmVhdGUoKQogICAgcHVzaGludCA2MTYwCiAgICBib3hfY3JlYXRlCiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5ib3hMYXJnZS52YWx1ZS5lID0gNDIKICAgIHB1c2hpbnQgNDIKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICBpbnRjIDQgLy8gNDA5NgogICAgKwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ3CiAgICAvLyBib3hMYXJnZSA9IEJveDxMYXJnZVN0cnVjdD4oeyBrZXk6ICdib3hMYXJnZScgfSkKICAgIGJ5dGVjIDUgLy8gImJveExhcmdlIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzY2CiAgICAvLyB0aGlzLmJveExhcmdlLnZhbHVlLmUgPSA0MgogICAgdW5jb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNjcKICAgIC8vIHRoaXMuYm94TGFyZ2UucmVwbGFjZShhcmM0LnNpemVPZjxCeXRlczEwMjQ+KCkgKiA0LCBuZXcgYXJjNC5VaW50NjQoNDIpLmJ5dGVzKQogICAgcHVzaGludCAxMDI0CiAgICBwdXNoaW50IDQKICAgICoKICAgIHB1c2hpbnQgNDIKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NwogICAgLy8gYm94TGFyZ2UgPSBCb3g8TGFyZ2VTdHJ1Y3Q+KHsga2V5OiAnYm94TGFyZ2UnIH0pCiAgICBieXRlYyA1IC8vICJib3hMYXJnZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2NwogICAgLy8gdGhpcy5ib3hMYXJnZS5yZXBsYWNlKGFyYzQuc2l6ZU9mPEJ5dGVzMTAyND4oKSAqIDQsIG5ldyBhcmM0LlVpbnQ2NCg0MikuYnl0ZXMpCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MgogICAgLy8gYm94QiA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdiJyB9KQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM2OQogICAgLy8gY29uc3QgYlZhbHVlID0gY2xvbmUodGhpcy5ib3hCLnZhbHVlKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MgogICAgLy8gYm94QiA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdiJyB9KQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM3MAogICAgLy8gYXNzZXJ0KHRoaXMuYm94Qi52YWx1ZS5sZW5ndGggPT09IGJWYWx1ZS5sZW5ndGgsICdkaXJlY3QgcmVmZXJlbmNlIHNob3VsZCBtYXRjaCBjb3B5JykKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzMgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHVuY292ZXIgMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgID09CiAgICBhc3NlcnQgLy8gZGlyZWN0IHJlZmVyZW5jZSBzaG91bGQgbWF0Y2ggY29weQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQxCiAgICAvLyBib3hBID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hBJyB9KQogICAgYnl0ZWNfMyAvLyAiYm94QSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM3MQogICAgLy8gdGhpcy5ib3hBLnZhbHVlICs9IDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICBwdXNoaW50IDMKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MQogICAgLy8gYm94QSA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94QScgfSkKICAgIGJ5dGVjXzMgLy8gImJveEEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNzEKICAgIC8vIHRoaXMuYm94QS52YWx1ZSArPSAzCiAgICB1bmNvdmVyIDEKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MQogICAgLy8gYm94QSA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94QScgfSkKICAgIGJ5dGVjXzMgLy8gImJveEEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNzQKICAgIC8vIGFzc2VydCh0aGlzLmJveEEubGVuZ3RoID09PSA4KQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDIKICAgIC8vIGJveEIgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYicgfSkKICAgIGJ5dGVjIDQgLy8gImIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNzUKICAgIC8vIGFzc2VydCh0aGlzLmJveEIubGVuZ3RoID09PSBkeW5hbWljQnl0ZXMuYnl0ZXMubGVuZ3RoKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6Mzc2CiAgICAvLyBhc3NlcnQodGhpcy5ib3hDLmxlbmd0aCA9PT0gYy5ieXRlcy5sZW5ndGgpCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NAogICAgLy8gYm94RCA9IEJveDxieXRlcz4oeyBrZXk6ICdib3hEJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94RCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM3NwogICAgLy8gYXNzZXJ0KHRoaXMuYm94RC5sZW5ndGggPT09IGR5bmFtaWNCeXRlcy5uYXRpdmUubGVuZ3RoKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDMKICAgIC8vIGJveEMgPSBCb3g8YXJjNC5TdHI+KHsga2V5OiAnQk9YX0MnIH0pCiAgICBieXRlY18wIC8vICJCT1hfQyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM4MAogICAgLy8gYXNzZXJ0KHRoaXMuYm94Qy52YWx1ZS5ieXRlcy5hdCgwKSA9PT0gYy5ieXRlcy5hdCgwKSkKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyAxCiAgICBleHRyYWN0MwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozODEKICAgIC8vIGFzc2VydCh0aGlzLmJveEMudmFsdWUuYnl0ZXMuYXQoLTEpID09PSBjLmJ5dGVzLmF0KC0xKSkKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozODEKICAgIC8vIGFzc2VydCh0aGlzLmJveEMudmFsdWUuYnl0ZXMuYXQoLTEpID09PSBjLmJ5dGVzLmF0KC0xKSkKICAgIHVuY292ZXIgMQogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAxCiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzgyCiAgICAvLyBhc3NlcnQodGhpcy5ib3hDLnZhbHVlLmJ5dGVzLnNsaWNlKDAsIC0xKSA9PT0gYy5ieXRlcy5zbGljZSgwLCAtMSkpCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgY292ZXIgMQogICAgaW50Y18wIC8vIDEKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18wIC8vIDEKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgdW5jb3ZlciAxCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICAtCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDMKICAgIC8vIGJveEMgPSBCb3g8YXJjNC5TdHI+KHsga2V5OiAnQk9YX0MnIH0pCiAgICBieXRlY18wIC8vICJCT1hfQyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM4MgogICAgLy8gYXNzZXJ0KHRoaXMuYm94Qy52YWx1ZS5ieXRlcy5zbGljZSgwLCAtMSkgPT09IGMuYnl0ZXMuc2xpY2UoMCwgLTEpKQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgY292ZXIgMQogICAgaW50Y18wIC8vIDEKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18wIC8vIDEKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgdW5jb3ZlciAxCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzgzCiAgICAvLyBhc3NlcnQodGhpcy5ib3hDLnZhbHVlLmJ5dGVzLnNsaWNlKDAsIDIpID09PSBjLmJ5dGVzLnNsaWNlKDAsIDIpKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGNvdmVyIDEKICAgIGludGNfMyAvLyAyCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMyAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozODMKICAgIC8vIGFzc2VydCh0aGlzLmJveEMudmFsdWUuYnl0ZXMuc2xpY2UoMCwgMikgPT09IGMuYnl0ZXMuc2xpY2UoMCwgMikpCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBjb3ZlciAxCiAgICBpbnRjXzMgLy8gMgogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzMgLy8gMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ0CiAgICAvLyBib3hEID0gQm94PGJ5dGVzPih7IGtleTogJ2JveEQnIH0pCiAgICBieXRlY18yIC8vICJib3hEIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6Mzg2CiAgICAvLyBhc3NlcnQodGhpcy5ib3hELnZhbHVlLmF0KDApID09PSBkeW5hbWljQnl0ZXMubmF0aXZlLmF0KDApKQogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDEKICAgIGV4dHJhY3QzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDQKICAgIC8vIGJveEQgPSBCb3g8Ynl0ZXM+KHsga2V5OiAnYm94RCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveEQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozODcKICAgIC8vIGFzc2VydCh0aGlzLmJveEQudmFsdWUuYXQoLTEpID09PSBkeW5hbWljQnl0ZXMubmF0aXZlLmF0KC0xKSkKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ0CiAgICAvLyBib3hEID0gQm94PGJ5dGVzPih7IGtleTogJ2JveEQnIH0pCiAgICBieXRlY18yIC8vICJib3hEIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6Mzg3CiAgICAvLyBhc3NlcnQodGhpcy5ib3hELnZhbHVlLmF0KC0xKSA9PT0gZHluYW1pY0J5dGVzLm5hdGl2ZS5hdCgtMSkpCiAgICB1bmNvdmVyIDEKICAgIGludGNfMCAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBjb3ZlciAxCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAxCiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NAogICAgLy8gYm94RCA9IEJveDxieXRlcz4oeyBrZXk6ICdib3hEJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94RCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM4OAogICAgLy8gYXNzZXJ0KHRoaXMuYm94RC52YWx1ZS5zbGljZSgwLCAtMSkgPT09IGR5bmFtaWNCeXRlcy5uYXRpdmUuc2xpY2UoMCwgLTEpKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGNvdmVyIDEKICAgIGludGNfMCAvLyAxCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC0KICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMQogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ0CiAgICAvLyBib3hEID0gQm94PGJ5dGVzPih7IGtleTogJ2JveEQnIH0pCiAgICBieXRlY18yIC8vICJib3hEIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6Mzg4CiAgICAvLyBhc3NlcnQodGhpcy5ib3hELnZhbHVlLnNsaWNlKDAsIC0xKSA9PT0gZHluYW1pY0J5dGVzLm5hdGl2ZS5zbGljZSgwLCAtMSkpCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAwCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGNvdmVyIDEKICAgIGludGNfMCAvLyAxCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC0KICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMQogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDQKICAgIC8vIGJveEQgPSBCb3g8Ynl0ZXM+KHsga2V5OiAnYm94RCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveEQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozODkKICAgIC8vIGFzc2VydCh0aGlzLmJveEQudmFsdWUuc2xpY2UoMCwgNSkgPT09IGR5bmFtaWNCeXRlcy5uYXRpdmUuc2xpY2UoMCwgNSkpCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgY292ZXIgMQogICAgcHVzaGludCA1CiAgICBkaWcgMQogICAgPj0KICAgIHB1c2hpbnQgNQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDEKICAgIC0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NAogICAgLy8gYm94RCA9IEJveDxieXRlcz4oeyBrZXk6ICdib3hEJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94RCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM4OQogICAgLy8gYXNzZXJ0KHRoaXMuYm94RC52YWx1ZS5zbGljZSgwLCA1KSA9PT0gZHluYW1pY0J5dGVzLm5hdGl2ZS5zbGljZSgwLCA1KSkKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgY292ZXIgMQogICAgcHVzaGludCA1CiAgICBkaWcgMQogICAgPj0KICAgIHB1c2hpbnQgNQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ0CiAgICAvLyBib3hEID0gQm94PGJ5dGVzPih7IGtleTogJ2JveEQnIH0pCiAgICBieXRlY18yIC8vICJib3hEIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzkwCiAgICAvLyBhc3NlcnQodGhpcy5ib3hELnZhbHVlLnNsaWNlKDAsIFVpbnQ2NCgyKSkgPT09IGR5bmFtaWNCeXRlcy5uYXRpdmUuc2xpY2UoMCwgVWludDY0KDIpKSkKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBjb3ZlciAxCiAgICBpbnRjXzMgLy8gMgogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzMgLy8gMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDEKICAgIC0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NAogICAgLy8gYm94RCA9IEJveDxieXRlcz4oeyBrZXk6ICdib3hEJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94RCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM5MAogICAgLy8gYXNzZXJ0KHRoaXMuYm94RC52YWx1ZS5zbGljZSgwLCBVaW50NjQoMikpID09PSBkeW5hbWljQnl0ZXMubmF0aXZlLnNsaWNlKDAsIFVpbnQ2NCgyKSkpCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHVuY292ZXIgMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBjb3ZlciAxCiAgICBpbnRjXzMgLy8gMgogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzMgLy8gMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ3CiAgICAvLyBib3hMYXJnZSA9IEJveDxMYXJnZVN0cnVjdD4oeyBrZXk6ICdib3hMYXJnZScgfSkKICAgIGJ5dGVjIDUgLy8gImJveExhcmdlIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzkxCiAgICAvLyBhc3NlcnQodGhpcy5ib3hMYXJnZS5sZW5ndGggPT09IGFyYzQuc2l6ZU9mPExhcmdlU3RydWN0PigpKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgNjE2MAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jaGVja0tleXMoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmNoZWNrS2V5czoKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jaGVja0tleXNfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jaGVja0tleXNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM5NQogICAgLy8gYXNzZXJ0KHRoaXMuYm94QS5rZXkgPT09IEJ5dGVzKCdib3hBJyksICdib3ggYSBrZXkgb2snKQogICAgYnl0ZWNfMyAvLyAiYm94QSIKICAgIGJ5dGVjXzMgLy8gImJveEEiCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveCBhIGtleSBvawogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6Mzk2CiAgICAvLyBhc3NlcnQodGhpcy5ib3hCLmtleSA9PT0gQnl0ZXMoJ2InKSwgJ2JveCBiIGtleSBvaycpCiAgICBieXRlYyA0IC8vICJiIgogICAgYnl0ZWMgNCAvLyAiYiIKICAgID09CiAgICBhc3NlcnQgLy8gYm94IGIga2V5IG9rCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozOTcKICAgIC8vIGFzc2VydCh0aGlzLmJveEMua2V5ID09PSBCeXRlcygnQk9YX0MnKSwgJ2JveCBjIGtleSBvaycpCiAgICBieXRlY18wIC8vICJCT1hfQyIKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgPT0KICAgIGFzc2VydCAvLyBib3ggYyBrZXkgb2sKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM5OAogICAgLy8gYXNzZXJ0KHRoaXMuYm94TGFyZ2Uua2V5ID09PSBCeXRlcygnYm94TGFyZ2UnKSwgJ2JveCBsYXJnZSBrZXkgb2snKQogICAgYnl0ZWMgNSAvLyAiYm94TGFyZ2UiCiAgICBieXRlYyA1IC8vICJib3hMYXJnZSIKICAgID09CiAgICBhc3NlcnQgLy8gYm94IGxhcmdlIGtleSBvawogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jcmVhdGVNYW55SW50cygpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuY3JlYXRlTWFueUludHM6CiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuY3JlYXRlTWFueUludHNfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jcmVhdGVNYW55SW50c19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ4CiAgICAvLyBtYW55SW50cyA9IEJveDxNYW55SW50cz4oeyBrZXk6ICdtYW55SW50cycgfSkKICAgIGJ5dGVjIDkgLy8gIm1hbnlJbnRzIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDAyCiAgICAvLyB0aGlzLm1hbnlJbnRzLmNyZWF0ZSgpCiAgICBwdXNoaW50IDQxMDQKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zZXRNYW55SW50cyhpbmRleDogdWludDY0LCB2YWx1ZTogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNldE1hbnlJbnRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDA1CiAgICAvLyBzZXRNYW55SW50cyhpbmRleDogdWludDY0LCB2YWx1ZTogdWludDY0KSB7CiAgICBwcm90byAyIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zZXRNYW55SW50c19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNldE1hbnlJbnRzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MDYKICAgIC8vIHRoaXMubWFueUludHMudmFsdWVbaW5kZXhdID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgaW50Y18xIC8vIDAKICAgICsKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0OAogICAgLy8gbWFueUludHMgPSBCb3g8TWFueUludHM+KHsga2V5OiAnbWFueUludHMnIH0pCiAgICBieXRlYyA5IC8vICJtYW55SW50cyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQwNgogICAgLy8gdGhpcy5tYW55SW50cy52YWx1ZVtpbmRleF0gPSB2YWx1ZQogICAgdW5jb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzKCkgLT4gdWludDY0Ogp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDA5CiAgICAvLyBzdW1NYW55SW50cygpIHsKICAgIHByb3RvIDAgMQogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtTWFueUludHNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQxMAogICAgLy8gZW5zdXJlQnVkZ2V0KDEwXzUwMCkKICAgIHB1c2hpbnQgMTA1MDAKICAgIGludGNfMSAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQxMQogICAgLy8gbGV0IHRvdGFsID0gVWludDY0KDApCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ4CiAgICAvLyBtYW55SW50cyA9IEJveDxNYW55SW50cz4oeyBrZXk6ICdtYW55SW50cycgfSkKICAgIGJ5dGVjIDkgLy8gIm1hbnlJbnRzIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDEyCiAgICAvLyBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLm1hbnlJbnRzLnZhbHVlKSB7CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1NYW55SW50c19mb3JfaGVhZGVyQDEKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtTWFueUludHNfZm9yX2hlYWRlckAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDEyCiAgICAvLyBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLm1hbnlJbnRzLnZhbHVlKSB7CiAgICBmcmFtZV9kaWcgMgogICAgcHVzaGludCA1MTMKICAgIDwKICAgIGJ6IHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtTWFueUludHNfYWZ0ZXJfZm9yQDQKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1NYW55SW50c19mb3JfYm9keUAyCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzX2Zvcl9ib2R5QDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MTIKICAgIC8vIGZvciAoY29uc3QgdmFsIG9mIHRoaXMubWFueUludHMudmFsdWUpIHsKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgaW50Y18xIC8vIDAKICAgICsKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0OAogICAgLy8gbWFueUludHMgPSBCb3g8TWFueUludHM+KHsga2V5OiAnbWFueUludHMnIH0pCiAgICBieXRlYyA5IC8vICJtYW55SW50cyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQxMgogICAgLy8gZm9yIChjb25zdCB2YWwgb2YgdGhpcy5tYW55SW50cy52YWx1ZSkgewogICAgdW5jb3ZlciAxCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQxMwogICAgLy8gdG90YWwgPSB0b3RhbCArIHZhbAogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzX2Zvcl9mb290ZXJAMwoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1NYW55SW50c19mb3JfZm9vdGVyQDM6CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bU1hbnlJbnRzX2Zvcl9oZWFkZXJAMQoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1NYW55SW50c19hZnRlcl9mb3JANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQxNQogICAgLy8gcmV0dXJuIHRvdGFsCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmRlbGV0ZUJveGVzKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5kZWxldGVCb3hlczoKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5kZWxldGVCb3hlc19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmRlbGV0ZUJveGVzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDEKICAgIC8vIGJveEEgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEEnIH0pCiAgICBieXRlY18zIC8vICJib3hBIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDE5CiAgICAvLyB0aGlzLmJveEEuZGVsZXRlKCkKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQyCiAgICAvLyBib3hCID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2InIH0pCiAgICBieXRlYyA0IC8vICJiIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDIwCiAgICAvLyB0aGlzLmJveEIuZGVsZXRlKCkKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MjEKICAgIC8vIHRoaXMuYm94Qy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDEKICAgIC8vIGJveEEgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEEnIH0pCiAgICBieXRlY18zIC8vICJib3hBIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDIyCiAgICAvLyBhc3NlcnQodGhpcy5ib3hBLmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgY292ZXIgMQogICAgYnRvaQogICAgcHVzaGludCA0MgogICAgdW5jb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCA0MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQyCiAgICAvLyBib3hCID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2InIH0pCiAgICBieXRlYyA0IC8vICJiIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDIzCiAgICAvLyBhc3NlcnQodGhpcy5ib3hCLmdldCh7IGRlZmF1bHQ6IG5ldyBhcmM0LkR5bmFtaWNCeXRlcyhCeXRlcygnNDInKSkgfSkubmF0aXZlID09PSBCeXRlcygnNDInKSkKICAgIGJveF9nZXQKICAgIGNvdmVyIDEKICAgIHB1c2hieXRlcyAweDAwMDIzNDMyCiAgICB1bmNvdmVyIDEKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMTAgLy8gIjQyIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDI0CiAgICAvLyBhc3NlcnQodGhpcy5ib3hDLmdldCh7IGRlZmF1bHQ6IG5ldyBhcmM0LlN0cignNDInKSB9KS5uYXRpdmUgPT09ICc0MicpCiAgICBieXRlYyAxMCAvLyAiNDIiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlYyAxMCAvLyAiNDIiCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDI0CiAgICAvLyBhc3NlcnQodGhpcy5ib3hDLmdldCh7IGRlZmF1bHQ6IG5ldyBhcmM0LlN0cignNDInKSB9KS5uYXRpdmUgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBjb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMQogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDEKICAgIC8vIGJveEEgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEEnIH0pCiAgICBieXRlY18zIC8vICJib3hBIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDI2CiAgICAvLyBjb25zdCBbYSwgYUV4aXN0c10gPSB0aGlzLmJveEEubWF5YmUoKQogICAgYm94X2dldAogICAgY292ZXIgMQogICAgYnRvaQogICAgY292ZXIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDI3CiAgICAvLyBhc3NlcnQoIWFFeGlzdHMpCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQyOAogICAgLy8gYXNzZXJ0KGEgPT09IDApCiAgICBpbnRjXzEgLy8gMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ3CiAgICAvLyBib3hMYXJnZSA9IEJveDxMYXJnZVN0cnVjdD4oeyBrZXk6ICdib3hMYXJnZScgfSkKICAgIGJ5dGVjIDUgLy8gImJveExhcmdlIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDI5CiAgICAvLyB0aGlzLmJveExhcmdlLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZSgpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZToKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5pbmRpcmVjdEV4dHJhY3RBbmRSZXBsYWNlX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuaW5kaXJlY3RFeHRyYWN0QW5kUmVwbGFjZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ3CiAgICAvLyBib3hMYXJnZSA9IEJveDxMYXJnZVN0cnVjdD4oeyBrZXk6ICdib3hMYXJnZScgfSkKICAgIGJ5dGVjIDUgLy8gImJveExhcmdlIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDMyCiAgICAvLyBjb25zdCBsYXJnZSA9IGNsb25lKHRoaXMuYm94TGFyZ2UudmFsdWUpCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDMzCiAgICAvLyBsYXJnZS5lICs9IDEKICAgIGR1cAogICAgaW50YyA0IC8vIDQwOTYKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGl0b2IKICAgIHVuY292ZXIgMQogICAgaW50YyA0IC8vIDQwOTYKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NwogICAgLy8gYm94TGFyZ2UgPSBCb3g8TGFyZ2VTdHJ1Y3Q+KHsga2V5OiAnYm94TGFyZ2UnIH0pCiAgICBieXRlYyA1IC8vICJib3hMYXJnZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQzNAogICAgLy8gdGhpcy5ib3hMYXJnZS52YWx1ZSA9IGNsb25lKGxhcmdlKQogICAgdW5jb3ZlciAxCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnJlYWRCb3hlcygpIC0+IHVpbnQ2NCwgYnl0ZXMsIGJ5dGVzLCB1aW50NjQ6CnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QucmVhZEJveGVzOgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnJlYWRCb3hlc19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnJlYWRCb3hlc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQxCiAgICAvLyBib3hBID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hBJyB9KQogICAgYnl0ZWNfMyAvLyAiYm94QSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQzOAogICAgLy8gcmV0dXJuIFtVaW50NjQoZ2V0Qm94VmFsdWVQbHVzMSh0aGlzLmJveEEpIC0gMSksIHRoaXMuYm94Qi52YWx1ZS5uYXRpdmUsIHRoaXMuYm94Qy52YWx1ZSwgdGhpcy5ib3hMYXJnZS52YWx1ZS5lXSBhcyBjb25zdAogICAgY2FsbHN1YiBnZXRCb3hWYWx1ZVBsdXMxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQyCiAgICAvLyBib3hCID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2InIH0pCiAgICBieXRlYyA0IC8vICJiIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDM4CiAgICAvLyByZXR1cm4gW1VpbnQ2NChnZXRCb3hWYWx1ZVBsdXMxKHRoaXMuYm94QSkgLSAxKSwgdGhpcy5ib3hCLnZhbHVlLm5hdGl2ZSwgdGhpcy5ib3hDLnZhbHVlLCB0aGlzLmJveExhcmdlLnZhbHVlLmVdIGFzIGNvbnN0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDM4CiAgICAvLyByZXR1cm4gW1VpbnQ2NChnZXRCb3hWYWx1ZVBsdXMxKHRoaXMuYm94QSkgLSAxKSwgdGhpcy5ib3hCLnZhbHVlLm5hdGl2ZSwgdGhpcy5ib3hDLnZhbHVlLCB0aGlzLmJveExhcmdlLnZhbHVlLmVdIGFzIGNvbnN0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGludGMgNCAvLyA0MDk2CiAgICArCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDcKICAgIC8vIGJveExhcmdlID0gQm94PExhcmdlU3RydWN0Pih7IGtleTogJ2JveExhcmdlJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94TGFyZ2UiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0MzgKICAgIC8vIHJldHVybiBbVWludDY0KGdldEJveFZhbHVlUGx1czEodGhpcy5ib3hBKSAtIDEpLCB0aGlzLmJveEIudmFsdWUubmF0aXZlLCB0aGlzLmJveEMudmFsdWUsIHRoaXMuYm94TGFyZ2UudmFsdWUuZV0gYXMgY29uc3QKICAgIHVuY292ZXIgMQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuYm94ZXNFeGlzdCgpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5ib3hlc0V4aXN0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDQxCiAgICAvLyBib3hlc0V4aXN0KCk6IHJlYWRvbmx5IFtib29sZWFuLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuXSB7CiAgICBwcm90byAwIDQKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5ib3hlc0V4aXN0X2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuYm94ZXNFeGlzdF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQxCiAgICAvLyBib3hBID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hBJyB9KQogICAgYnl0ZWNfMyAvLyAiYm94QSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ0MgogICAgLy8gcmV0dXJuIFt0aGlzLmJveEEuZXhpc3RzLCB0aGlzLmJveEIuZXhpc3RzLCB0aGlzLmJveEMuZXhpc3RzLCB0aGlzLmJveExhcmdlLmV4aXN0c10gYXMgY29uc3QKICAgIGJveF9sZW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MgogICAgLy8gYm94QiA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdiJyB9KQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ0MgogICAgLy8gcmV0dXJuIFt0aGlzLmJveEEuZXhpc3RzLCB0aGlzLmJveEIuZXhpc3RzLCB0aGlzLmJveEMuZXhpc3RzLCB0aGlzLmJveExhcmdlLmV4aXN0c10gYXMgY29uc3QKICAgIGJveF9sZW4KICAgIGNvdmVyIDEKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDQyCiAgICAvLyByZXR1cm4gW3RoaXMuYm94QS5leGlzdHMsIHRoaXMuYm94Qi5leGlzdHMsIHRoaXMuYm94Qy5leGlzdHMsIHRoaXMuYm94TGFyZ2UuZXhpc3RzXSBhcyBjb25zdAogICAgYm94X2xlbgogICAgY292ZXIgMQogICAgY292ZXIgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQ3CiAgICAvLyBib3hMYXJnZSA9IEJveDxMYXJnZVN0cnVjdD4oeyBrZXk6ICdib3hMYXJnZScgfSkKICAgIGJ5dGVjIDUgLy8gImJveExhcmdlIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDQyCiAgICAvLyByZXR1cm4gW3RoaXMuYm94QS5leGlzdHMsIHRoaXMuYm94Qi5leGlzdHMsIHRoaXMuYm94Qy5leGlzdHMsIHRoaXMuYm94TGFyZ2UuZXhpc3RzXSBhcyBjb25zdAogICAgYm94X2xlbgogICAgY292ZXIgMQogICAgY292ZXIgNAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDcKICAgIHVuY292ZXIgNwogICAgdW5jb3ZlciA3CiAgICB1bmNvdmVyIDcKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2xpY2VCb3goKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNsaWNlQm94OgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNsaWNlQm94X2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2xpY2VCb3hfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ0NwogICAgLy8gYm94MC52YWx1ZSA9IEJ5dGVzKCdUZXN0aW5nIHRlc3RpbmcgMTIzJykKICAgIGJ5dGVjIDExIC8vICIwIgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyAxMSAvLyAiMCIKICAgIHB1c2hieXRlcyAiVGVzdGluZyB0ZXN0aW5nIDEyMyIKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ0OAogICAgLy8gYXNzZXJ0KGJveDAudmFsdWUuc2xpY2UoMCwgNykgPT09IEJ5dGVzKCdUZXN0aW5nJykpCiAgICBieXRlYyAxMSAvLyAiMCIKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBjb3ZlciAxCiAgICBwdXNoaW50IDcKICAgIGRpZyAxCiAgICA+PQogICAgcHVzaGludCA3CiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgYnl0ZWMgMTEgLy8gIjAiCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAiVGVzdGluZyIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ1MAogICAgLy8gdGhpcy5ib3hDLnZhbHVlID0gbmV3IGFyYzQuU3RyKCdIZWxsbycpCiAgICBieXRlYyAxMiAvLyAiSGVsbG8iCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlYyAxMiAvLyAiSGVsbG8iCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDUwCiAgICAvLyB0aGlzLmJveEMudmFsdWUgPSBuZXcgYXJjNC5TdHIoJ0hlbGxvJykKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzQzCiAgICAvLyBib3hDID0gQm94PGFyYzQuU3RyPih7IGtleTogJ0JPWF9DJyB9KQogICAgYnl0ZWNfMCAvLyAiQk9YX0MiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NTAKICAgIC8vIHRoaXMuYm94Qy52YWx1ZSA9IG5ldyBhcmM0LlN0cignSGVsbG8nKQogICAgdW5jb3ZlciAxCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDMKICAgIC8vIGJveEMgPSBCb3g8YXJjNC5TdHI+KHsga2V5OiAnQk9YX0MnIH0pCiAgICBieXRlY18wIC8vICJCT1hfQyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ1MQogICAgLy8gYXNzZXJ0KHRoaXMuYm94Qy52YWx1ZS5ieXRlcy5zbGljZSgyLCAxMCkgPT09IEJ5dGVzKCdIZWxsbycpKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGludGNfMyAvLyAyCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMyAvLyAyCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGNvdmVyIDEKICAgIHB1c2hpbnQgMTAKICAgIGRpZyAxCiAgICA+PQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDEKICAgIC0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0MwogICAgLy8gYm94QyA9IEJveDxhcmM0LlN0cj4oeyBrZXk6ICdCT1hfQycgfSkKICAgIGJ5dGVjXzAgLy8gIkJPWF9DIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDUxCiAgICAvLyBhc3NlcnQodGhpcy5ib3hDLnZhbHVlLmJ5dGVzLnNsaWNlKDIsIDEwKSA9PT0gQnl0ZXMoJ0hlbGxvJykpCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGJ5dGVjIDEyIC8vICJIZWxsbyIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuYXJjNEJveCgpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuYXJjNEJveDoKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5hcmM0Qm94X2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuYXJjNEJveF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDU2CiAgICAvLyBib3hELnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXkobmV3IGFyYzQuVWludDgoMCksIG5ldyBhcmM0LlVpbnQ4KDEpLCBuZXcgYXJjNC5VaW50OCgyKSwgbmV3IGFyYzQuVWludDgoMykpCiAgICBpbnRjXzEgLy8gMAogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDcKICAgIGludGNfMCAvLyAxCiAgICBleHRyYWN0MwogICAgaW50Y18wIC8vIDEKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgcHVzaGludCA3CiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMKICAgIGludGNfMyAvLyAyCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgNwogICAgaW50Y18wIC8vIDEKICAgIGV4dHJhY3QzCiAgICBwdXNoaW50IDMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgcHVzaGludCA3CiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMKICAgIHB1c2hieXRlcyAweAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gImQiCiAgICB1bmNvdmVyIDEKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ1NwogICAgLy8gYXNzZXJ0KGJveEQudmFsdWVbMF0uYXNVaW50NjQoKSA9PT0gMCkKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyAxCiAgICAqCiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDU4CiAgICAvLyBhc3NlcnQoYm94RC52YWx1ZVsxXS5hc1VpbnQ2NCgpID09PSAxKQogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgaW50Y18wIC8vIDEKICAgICoKICAgIGludGNfMCAvLyAxCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NTkKICAgIC8vIGFzc2VydChib3hELnZhbHVlWzJdLmFzVWludDY0KCkgPT09IDIpCiAgICBieXRlYyA2IC8vICJkIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGludGNfMyAvLyAyCiAgICBpbnRjXzAgLy8gMQogICAgKgogICAgaW50Y18wIC8vIDEKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgaW50Y18zIC8vIDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ2MAogICAgLy8gYXNzZXJ0KGJveEQudmFsdWVbM10uYXNVaW50NjQoKSA9PT0gMykKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzCiAgICBpbnRjXzAgLy8gMQogICAgKgogICAgaW50Y18wIC8vIDEKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgcHVzaGludCAzCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnRlc3RCb3hSZWYoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnRlc3RCb3hSZWY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NjMKICAgIC8vIHRlc3RCb3hSZWYoKSB7CiAgICBwcm90byAwIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC50ZXN0Qm94UmVmX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QudGVzdEJveFJlZl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDY2CiAgICAvLyBhc3NlcnQoIWJveFJlZjEuZXhpc3RzLCAnbm8gZGF0YScpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgYm94X2xlbgogICAgIQogICAgYXNzZXJ0IC8vIG5vIGRhdGEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ2OAogICAgLy8gYXNzZXJ0KCFib3hSZWYyLmV4aXN0cywgJ25vIGRhdGEnKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIGJveF9sZW4KICAgICEKICAgIGFzc2VydCAvLyBubyBkYXRhCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NzEKICAgIC8vIGFzc2VydChib3hSZWYxLmNyZWF0ZSh7IHNpemU6IFVpbnQ2NCgzMikgfSkpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgcHVzaGludCAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NzIKICAgIC8vIGFzc2VydChib3hSZWYxLmV4aXN0cywgJ2hhcyBkYXRhJykKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gaGFzIGRhdGEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ3NAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0NzUKICAgIC8vIGNvbnN0IGFwcEFkZHJlc3MgPSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5ieXRlcwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGNvdmVyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ3NwogICAgLy8gYm94UmVmMS5yZXBsYWNlKDAsIHNlbmRlckJ5dGVzKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ3OAogICAgLy8gYm94UmVmMS5yZXNpemUoODAwMCkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBwdXNoaW50IDgwMDAKICAgIGJveF9yZXNpemUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ3OQogICAgLy8gYm94UmVmMS5zcGxpY2UoMCwgMCwgYXBwQWRkcmVzcykKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18xIC8vIDAKICAgIGRpZyA0CiAgICBib3hfc3BsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0ODAKICAgIC8vIGJveFJlZjEucmVwbGFjZSg2NCwgdmFsdWUzKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIHB1c2hpbnQgNjQKICAgIGJ5dGVjIDEzIC8vICJoZWxsbyIKICAgIGJveF9yZXBsYWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0ODEKICAgIC8vIGNvbnN0IHByZWZpeCA9IGJveFJlZjEuZXh0cmFjdCgwLCAzMiAqIDIgKyB2YWx1ZTMubGVuZ3RoKQogICAgYnl0ZWMgMTMgLy8gImhlbGxvIgogICAgbGVuCiAgICBwdXNoaW50IDY0CiAgICArCiAgICBieXRlY18xIC8vICJibG9iIgogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ4MgogICAgLy8gYXNzZXJ0KHByZWZpeCA9PT0gYXBwQWRkcmVzcy5jb25jYXQoc2VuZGVyQnl0ZXMpLmNvbmNhdCh2YWx1ZTMpKQogICAgZGlnIDIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGJ5dGVjIDEzIC8vICJoZWxsbyIKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDg0CiAgICAvLyBib3hSZWYxLmRlbGV0ZSgpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0ODUKICAgIC8vIGFzc2VydChib3hSZWYxLmtleSA9PT0gQnl0ZXMoJ2Jsb2InKSkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBieXRlY18xIC8vICJibG9iIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDg3CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBib3hSZWYxLm1heWJlKCkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBib3hfZ2V0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0ODgKICAgIC8vIGFzc2VydCghZXhpc3RzKQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0ODkKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gQnl0ZXMoJycpKQogICAgcHVzaGJ5dGVzICIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0OTAKICAgIC8vIGFzc2VydChib3hSZWYxLmdldCh7IGRlZmF1bHQ6IHNlbmRlckJ5dGVzIH0pID09PSBzZW5kZXJCeXRlcykKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBib3hfZ2V0CiAgICBjb3ZlciAxCiAgICBkaWcgMgogICAgdW5jb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ5MgogICAgLy8gYm94UmVmMS52YWx1ZSA9IHNlbmRlckJ5dGVzLmNvbmNhdChhcHBBZGRyZXNzKQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICB1bmNvdmVyIDEKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjQ5MwogICAgLy8gYXNzZXJ0KGJveFJlZjEuZXhpc3RzLCAnQmxvYiBleGlzdHMnKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCbG9iIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDk0CiAgICAvLyBhc3NlcnQoYm94UmVmMS5sZW5ndGggPT09IDY0KQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBwdXNoaW50IDY0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0OTUKICAgIC8vIGFzc2VydChnZXRCb3hSZWZMZW5ndGgoYm94UmVmMSkgPT09IDY0KQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIGNhbGxzdWIgZ2V0Qm94UmVmTGVuZ3RoCiAgICBwdXNoaW50IDY0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNDYKICAgIC8vIGJveFJlZiA9IEJveDxieXRlcz4oeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyAxNCAvLyAiYm94UmVmIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NDk3CiAgICAvLyB0aGlzLmJveFJlZi5jcmVhdGUoeyBzaXplOiBVaW50NjQoMzIpIH0pCiAgICBwdXNoaW50IDMyCiAgICBib3hfY3JlYXRlCiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NgogICAgLy8gYm94UmVmID0gQm94PGJ5dGVzPih7IGtleTogJ2JveFJlZicgfSkKICAgIGJ5dGVjIDE0IC8vICJib3hSZWYiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0OTgKICAgIC8vIGFzc2VydCh0aGlzLmJveFJlZi5leGlzdHMsICdoYXMgZGF0YScpCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gaGFzIGRhdGEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM0NgogICAgLy8gYm94UmVmID0gQm94PGJ5dGVzPih7IGtleTogJ2JveFJlZicgfSkKICAgIGJ5dGVjIDE0IC8vICJib3hSZWYiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo0OTkKICAgIC8vIHRoaXMuYm94UmVmLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuY3JlYXRlQm9vbHMoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmNyZWF0ZUJvb2xzOgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LmNyZWF0ZUJvb2xzX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3QuY3JlYXRlQm9vbHNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM1MgogICAgLy8gdG9vTWFueUJvb2xzID0gQm94PEZpeGVkQXJyYXk8Ym9vbGVhbiwgMzNfMDAwPj4oeyBrZXk6ICd0b29NYW55Qm9vbHMnIH0pCiAgICBieXRlYyA3IC8vICJ0b29NYW55Qm9vbHMiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MDMKICAgIC8vIHRoaXMudG9vTWFueUJvb2xzLmNyZWF0ZSgpCiAgICBwdXNoaW50IDQxMjUKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zZXRCb29sKGluZGV4OiB1aW50NjQsIHZhbHVlOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2V0Qm9vbDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUwNgogICAgLy8gc2V0Qm9vbChpbmRleDogdWludDY0LCB2YWx1ZTogYm9vbGVhbikgewogICAgcHJvdG8gMiAwCiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc2V0Qm9vbF9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnNldEJvb2xfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUwNwogICAgLy8gdGhpcy50b29NYW55Qm9vbHMudmFsdWVbaW5kZXhdID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaW50Y18xIC8vIDAKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDgKICAgICUKICAgIGNvdmVyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM1MgogICAgLy8gdG9vTWFueUJvb2xzID0gQm94PEZpeGVkQXJyYXk8Ym9vbGVhbiwgMzNfMDAwPj4oeyBrZXk6ICd0b29NYW55Qm9vbHMnIH0pCiAgICBieXRlYyA3IC8vICJ0b29NYW55Qm9vbHMiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MDcKICAgIC8vIHRoaXMudG9vTWFueUJvb2xzLnZhbHVlW2luZGV4XSA9IHZhbHVlCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBjb3ZlciAxCiAgICBkaWcgMgogICAgaW50Y18yIC8vIDgKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdW5jb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNTIKICAgIC8vIHRvb01hbnlCb29scyA9IEJveDxGaXhlZEFycmF5PGJvb2xlYW4sIDMzXzAwMD4+KHsga2V5OiAndG9vTWFueUJvb2xzJyB9KQogICAgYnl0ZWMgNyAvLyAidG9vTWFueUJvb2xzIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NTA3CiAgICAvLyB0aGlzLnRvb01hbnlCb29scy52YWx1ZVtpbmRleF0gPSB2YWx1ZQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzKHN0b3BBdFRvdGFsOiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUxMAogICAgLy8gc3VtQm9vbHMoc3RvcEF0VG90YWw6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIHB1c2hieXRlcyAiIgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUxMQogICAgLy8gZW5zdXJlQnVkZ2V0KDEzXzAwMCkKICAgIHB1c2hpbnQgMTMwMDAKICAgIGludGNfMSAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUxMgogICAgLy8gbGV0IHRvdGFsOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzUyCiAgICAvLyB0b29NYW55Qm9vbHMgPSBCb3g8Rml4ZWRBcnJheTxib29sZWFuLCAzM18wMDA+Pih7IGtleTogJ3Rvb01hbnlCb29scycgfSkKICAgIGJ5dGVjIDcgLy8gInRvb01hbnlCb29scyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUxMwogICAgLy8gZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnRvb01hbnlCb29scy52YWx1ZSkgewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfZm9yX2hlYWRlckAxCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUxMwogICAgLy8gZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnRvb01hbnlCb29scy52YWx1ZSkgewogICAgZnJhbWVfZGlnIDMKICAgIHB1c2hpbnQgMzMwMDAKICAgIDwKICAgIGJ6IHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfYWZ0ZXJfZm9yQDgKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19mb3JfYm9keUAyCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2Zvcl9ib2R5QDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MTMKICAgIC8vIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy50b29NYW55Qm9vbHMudmFsdWUpIHsKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpbnRjXzEgLy8gMAogICAgKwogICAgdW5jb3ZlciAxCiAgICBpbnRjXzIgLy8gOAogICAgJQogICAgY292ZXIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzUyCiAgICAvLyB0b29NYW55Qm9vbHMgPSBCb3g8Rml4ZWRBcnJheTxib29sZWFuLCAzM18wMDA+Pih7IGtleTogJ3Rvb01hbnlCb29scycgfSkKICAgIGJ5dGVjIDcgLy8gInRvb01hbnlCb29scyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjUxMwogICAgLy8gZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnRvb01hbnlCb29scy52YWx1ZSkgewogICAgdW5jb3ZlciAxCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIHVuY292ZXIgMQogICAgZ2V0Yml0CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfYnVyeSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MTQKICAgIC8vIGlmICh2YWx1ZSkgewogICAgYnogdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19hZnRlcl9pZl9lbHNlQDQKICAgIGIgdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19pZl9ib2R5QDMKCnRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfaWZfYm9keUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NTE1CiAgICAvLyB0b3RhbCArPSAxCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2FmdGVyX2lmX2Vsc2VANAoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MTcKICAgIC8vIGlmICh0b3RhbCA9PT0gc3RvcEF0VG90YWwpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2FmdGVyX2lmX2Vsc2VANgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2lmX2JvZHlANQoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19pZl9ib2R5QDU6CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo1MTgKICAgIC8vIGJyZWFrCiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfYmxvY2tAOQoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19ibG9ja0A5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6NTIxCiAgICAvLyByZXR1cm4gdG90YWwKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5zdW1Cb29sc19hZnRlcl9pZl9lbHNlQDY6CiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfZm9yX2Zvb3RlckA3Cgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2Zvcl9mb290ZXJANzoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfYnVyeSAxCiAgICBiIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjpBcmM0Qm94Q29udHJhY3Quc3VtQm9vbHNfZm9yX2hlYWRlckAxCgp0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2FmdGVyX2ZvckA4OgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0LnN1bUJvb2xzX2Jsb2NrQDkKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czo6QXJjNEJveENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIGIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlX2Jsb2NrQDAKCl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZV9ibG9ja0AwOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6OkFyYzRCb3hDb250cmFjdC5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgogICAgYiBjb25zdHJ1Y3Rvcl9ibG9ja0AwCgpjb25zdHJ1Y3Rvcl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1wcm94aWVzLmFsZ28udHM6MzU1CiAgICAvLyBzdXBlcigpCiAgICBiIGNvbnN0cnVjdG9yX2Jsb2NrQDEKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LXByb3hpZXMuYWxnby50czozNTUKICAgIC8vIHN1cGVyKCkKICAgIGIgY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMgoKY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtcHJveGllcy5hbGdvLnRzOjM1NgogICAgLy8gYXNzZXJ0KGFyYzQuc2l6ZU9mPE1hbnlJbnRzPigpID4gNDA5NiwgJ2V4cGVjdGVkIE1hbnlJbnRzIHRvIGV4Y2VlZCBtYXggYnl0ZXMgc2l6ZScpCiAgICBwdXNoaW50IDQxMDQKICAgIGludGMgNCAvLyA0MDk2CiAgICA+CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgTWFueUludHMgdG8gZXhjZWVkIG1heCBieXRlcyBzaXplCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgcHVzaGludCAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAFAQAIAoAgJhAFQk9YX0MEYmxvYgRib3hEBGJveEEBYghib3hMYXJnZQFkDHRvb01hbnlCb29scwQVH3x1CG1hbnlJbnRzAjQyATAFSGVsbG8FaGVsbG8GYm94UmVmAwaBAUIAADEYQAAJQgAAiAjdQgAAQgAAMRsjE0EA+EIAADEZIxJEMRgjE0EA5kIAADYaAIAEJ/draYAEkSNheoAE9yY5SIAECby6XoAEeg09yIAEfQObQ4AEO8Oy+YAE3N5hTYAE4TkXIYAEaDtcZIAEpaYm/oAEkDnt3oAEKLLiQYAEjc7Xm4AEHHf0lk8Pjg8AXgBYAFIATABGAEAAOgA0AC4AKAAiABwAFgAQAApCAABCAABCAAAAiAH+Qv/ziAHdQv/tiAHPQv/niAHBQv/hiAGzQv/biAGlQv/ViAFyQv/PiAEiQv/JiAEUQv/DiAEGQv+9iADxQv+3iADRQv+xiADDQv+riAC1Qv+liAB3Qv+fQv+fMRkjEjEYIxIQRIgHxyJDigIAQgAAi/6BCghCAAAyDIsADEEAMkIAALGBBrIQgQWyGScPsh4nD7IfIyKL/44CAA4AB0IAALNC/9MyALIBQv/1I7IBQv/viYoBAUIAAIv/vkQXIgiJigEBQgAAi/+9RIlCAAA2GgFJFSQSRBc2GgJJI1kiCyUISwEVEkRXAgA2GgNJI1kiCyUISwEVEkRPAk8CTwKIARUiQ0IAAIgDkSJDQgAAiAOhIkNCAAA2GgFJFSQSRBc2GgJJFSQSRBeIA5IiQ0IAAIgDoRYnCE8BULAiQ0IAAIgD0yJDQgAAiAQsIkNCAACIBEFOA04DTgEWgABPAVBOAUkVFlcGAk8BUIEUFlcGAk8CTwFQTgFJFYEUCBZXBgJPAk8BUE8CFlBPAVBPAVAnCE8BULAiQ0IAAIgEHk4DTgJOAYABACNPAlQiTwJUJU8CVIEDTwJUgABPAVAnCE8BULAiQ0IAAIgEHiJDQgAAiASgIkNCAACIBRIiQ0IAAIgFmiJDQgAANhoBSRUkEkQXNhoCSRUiEkQjU4gFiiJDQgAANhoBSRUkEkQXiAWpFicITwFQsCJDigMAQgAAi/4VFlcGAov+UIv9FitPAb8nBLxIJwRLAb8ovEgoi/+/SVcCACq8SCpPAb8nBYGQMLlIgSoWIyEECCcFTwFPAruBgAiBBAuBKhYnBU8CTwK7JwS+RCcEIyW6F08BI1kSRCu+RBeBAwgWK08Bvyu9RCQSRCcEvURLARUSRCi9RIv/FRJEKr1ESwFXAgAVEkQoIyK6i/8jIlgSRCi9RCIJKE8BIrqL/xUiCYv/TwEiWBJEKL1EI0sBDyNLAk8CTU4BIksBDyJLAk8CTQlJSwIMTwFLAk8CTUsBCShPAk8Cuov/FSNLAQ8jSwJPAk1OASJLAQ8iSwJPAk0JSUsCDE8BSwJPAk2L/08CTwJSEkQovUQjSwEPI0sCTwJNTgElSwEPJU8CTwJNSwEJKE8CTwK6i/8VI0sBDyNLAk8CTU4BJUsBDyVPAk8CTYv/TwJPAlISRCojIrpLAVcCACMiWBJEKr1EIgkqTwEiuksBVwIATgFLAlcCABUiCU8CTwEiWBJEKr1EI0sBDyNLAk8CTU4BIksBDyJLAk8CTQlJSwIMTwFLAk8CTUsBCSpPAk8CuksBVwIASRUjSwEPI0sCTwJNTgEiSwEPIksCTwJNCUlLAgxPAUsCTwJNTwJPAk8CUhJEKr1EI0sBDyNLAk8CTU4BgQVLAQ+BBU8CTwJNSwEJKk8CTwK6SwFXAgBJFSNLAQ8jSwJPAk1OAYEFSwEPgQVPAk8CTU8CTwJPAlISRCq9RCNLAQ8jSwJPAk1OASVLAQ8lTwJPAk1LAQkqTwJPArpPAVcCAEkVI0sBDyNLAk8CTU4BJUsBDyVPAk8CTU8CTwJPAlISRCcFvUSBkDASRIlCAAArKxJEJwQnBBJEKCgSRCcFJwUSRIlCAAAnCYGIILlIiYoCAEIAAIv/Fov+JAsjCCcJTwFPAruJigABQgAAgYRSI4j7iCMnCb5EI0IAAIsCgYEEDEEAIUIAAIsCJAsjCCcJTwEkuheLAAiMAEIAAIsCIgiMAkL/1olCAAArvEgnBLxIKLxIK75OAReBKk8BTwJNgSoSRCcEvk4BgAQAAjQyTwFPAk1XAgAnChJEJwoVFlcGAicKUCi+TgFPAk8BTwJNVwIAJwoSRCu+TgEXTgEURCMSRCcFvEiJQgAAJwW+REkhBCRYFyIIFk8BIQRPAl0nBU8Bv4lCAAAriPsYIgknBL5EVwIAKL5EIyEECCcFTwEkuhdPA08DTwNPA4mKAARCAAArvScEvU4BTgIovU4BTgMnBb1OAU4ETwNPA08DTwNPB08HTwdPB4lCAAAnC7xIJwuAE1Rlc3RpbmcgdGVzdGluZyAxMjO/Jwu9RCNLAQ8jSwJPAk1OAYEHSwEPgQdPAk8CTUsBCScLTwJPArqAB1Rlc3RpbmcSRCcMFRZXBgInDFAovEgoTwG/KL1EJUsBDyVLAk8CTU4BgQpLAQ+BCk8CTwJNSwEJKE8CTwK6JwwSRIlCAAAjFkmTJA5EgQciWCIWSZMkDkSBByJYJRZJkyQORIEHIliBAxZJkyQORIEHIliAAE8EUE8DUE8CUE8BUCcGTwG/Jwa+RCMiCyJYFyMSRCcGvkQiIgsiWBciEkQnBr5EJSILIlgXJRJEJwa+RIEDIgsiWBeBAxJEiYoAAEIAACm9FEQpvRREKYEguUQpvUQxADIKTgEpI0sCuymBwD7TKSMjSwTSKYFAJw27Jw0VgUAIKSNPArpLAksCUCcNUBJEKbxIKSkSRCm+FESAABJEKb5OAUsCTwFPAk1LARJETwFQKbxIKU8Bvym9RCm9RIFAEkQpiPlYgUASRCcOgSC5SCcOvUQnDrxIiUIAACcHgZ0guUiJigIAQgAAi/+L/iQKIwiL/iQYTgEnB0sBIrpOAUsCJAxETwFPAk8DVCcHTwJPAruJigEBgABCAACByGUjiPikIycHvkQjQgAAiwOB6IECDEEAU0IAAIsDSSQKIwhPASQYTgEnB08BIrpPAVOLAYwAQQAMQgAAiwEiCIwAQgAAiwCL/xJBAA9CAACLAIwBQgAAiwGMAIlCAACLAyIIjAOLAIwBQv+jQv/oQgAAiUIAAEIAAEIAAIGIICEEDUSJ", "clear": "C0IAAIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }