{ "name": "BoxContract", "structs": {}, "methods": [ { "name": "set_boxes", "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": "check_keys", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "delete_boxes", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "read_boxes", "args": [], "returns": { "type": "(uint64,byte[],string)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "boxes_exist", "args": [], "returns": { "type": "(bool,bool,bool)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "slice_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "arc4_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_box_ref", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_test", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_set", "args": [ { "type": "uint64", "name": "key" }, { "type": "string", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_get", "args": [ { "type": "uint64", "name": "key" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_del", "args": [ { "type": "uint64", "name": "key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_exists", "args": [ { "type": "uint64", "name": "key" } ], "returns": { "type": "bool" }, "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": { "box_a": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Ym94X2E=" }, "box_b": { "keyType": "AVMString", "valueType": "byte[]", "key": "Yg==" }, "box_c": { "keyType": "AVMBytes", "valueType": "string", "key": "Qk9YX0M=" }, "box_d": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94X2Q=" }, "box_ref": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94X3JlZg==" } } }, "maps": { "global": {}, "local": {}, "box": { "box_map": { "keyType": "AVMUint64", "valueType": "AVMString", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1204 ], "errorMessage": "Blob exists" }, { "pc": [ 1055, 1066, 1078, 1090 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 180, 207, 223, 252, 274, 286, 298, 310, 322, 372, 423, 435, 444 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 471 ], "errorMessage": "can only call when creating" }, { "pc": [ 183, 210, 226, 255, 277, 289, 301, 313, 325, 375, 426, 438, 447 ], "errorMessage": "can only call when not creating" }, { "pc": [ 888, 1054, 1065, 1077, 1089 ], "errorMessage": "check Box exists" }, { "pc": [ 1298 ], "errorMessage": "check BoxMap entry exists" }, { "pc": [ 1207, 1214 ], "errorMessage": "check BoxRef exists" }, { "pc": [ 531, 541 ], "errorMessage": "check self.box_a exists" }, { "pc": [ 514, 518, 549, 896 ], "errorMessage": "check self.box_b exists" }, { "pc": [ 557, 902 ], "errorMessage": "check self.box_c exists" }, { "pc": [ 568 ], "errorMessage": "check self.box_d exists" }, { "pc": [ 1253, 1260, 1326 ], "errorMessage": "check self.box_map entry exists" }, { "pc": [ 525 ], "errorMessage": "direct reference should match copy" }, { "pc": [ 1132, 1230 ], "errorMessage": "has data" }, { "pc": [ 1104, 1110, 1116, 1122 ], "errorMessage": "no data" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA1CiAgICBieXRlY2Jsb2NrIDB4NDI0ZjU4NWY0MyAweDYyNmM2ZjYyICJib3hfZCIgImJveF9hIiAiYiIgMHgwMCAweDY0IDB4MTUxZjdjNzUgIjAiIDB4Njg2NTZjNmM2ZiAweDAwMDIzNDMyICJib3hfcmVmIiAiZGVmYXVsdCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgKICAgIC8vIGNsYXNzIEJveENvbnRyYWN0KGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxOAogICAgcHVzaGJ5dGVzcyAweDdkMzcyOTZlIDB4MzMzMjVkM2QgMHhkNTY2YzYzMiAweGZiZGE5YmEwIDB4ZTVhM2VkNTIgMHgwNGVmNDk3MSAweDIzZWNiMzJjIDB4ZWVmNzU4MTYgMHhiNTMyOTEzYSAweGMyOWYxNjY5IDB4OWM4ODhjMDkgMHhlNmY2ODUwNiAweDhlZTJjMzY0IC8vIG1ldGhvZCAic2V0X2JveGVzKHVpbnQ2NCxieXRlW10sc3RyaW5nKXZvaWQiLCBtZXRob2QgImNoZWNrX2tleXMoKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3hlcygpdm9pZCIsIG1ldGhvZCAicmVhZF9ib3hlcygpKHVpbnQ2NCxieXRlW10sc3RyaW5nKSIsIG1ldGhvZCAiYm94ZXNfZXhpc3QoKShib29sLGJvb2wsYm9vbCkiLCBtZXRob2QgInNsaWNlX2JveCgpdm9pZCIsIG1ldGhvZCAiYXJjNF9ib3goKXZvaWQiLCBtZXRob2QgInRlc3RfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAiYm94X21hcF90ZXN0KCl2b2lkIiwgbWV0aG9kICJib3hfbWFwX3NldCh1aW50NjQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImJveF9tYXBfZ2V0KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImJveF9tYXBfZGVsKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJib3hfbWFwX2V4aXN0cyh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fc2V0X2JveGVzX3JvdXRlQDUgbWFpbl9jaGVja19rZXlzX3JvdXRlQDYgbWFpbl9kZWxldGVfYm94ZXNfcm91dGVANyBtYWluX3JlYWRfYm94ZXNfcm91dGVAOCBtYWluX2JveGVzX2V4aXN0X3JvdXRlQDkgbWFpbl9zbGljZV9ib3hfcm91dGVAMTAgbWFpbl9hcmM0X2JveF9yb3V0ZUAxMSBtYWluX3Rlc3RfYm94X3JlZl9yb3V0ZUAxMiBtYWluX2JveF9tYXBfdGVzdF9yb3V0ZUAxMyBtYWluX2JveF9tYXBfc2V0X3JvdXRlQDE0IG1haW5fYm94X21hcF9nZXRfcm91dGVAMTUgbWFpbl9ib3hfbWFwX2RlbF9yb3V0ZUAxNiBtYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDE3CgptYWluX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4CiAgICAvLyBjbGFzcyBCb3hDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDE3OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgQm94Q29udHJhY3QoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9leGlzdHMKICAgIGJ5dGVjIDUgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveF9tYXBfZGVsX3JvdXRlQDE2OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgQm94Q29udHJhY3QoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9kZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9nZXRfcm91dGVAMTU6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4CiAgICAvLyBjbGFzcyBCb3hDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX2dldAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9zZXRfcm91dGVAMTQ6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4CiAgICAvLyBjbGFzcyBCb3hDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9zZXQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF90ZXN0X3JvdXRlQDEzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBib3hfbWFwX3Rlc3QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9ib3hfcmVmX3JvdXRlQDEyOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfYm94X3JlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmM0X2JveF9yb3V0ZUAxMToKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2JveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zbGljZV9ib3hfcm91dGVAMTA6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc2xpY2VfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveGVzX2V4aXN0X3JvdXRlQDk6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94ZXNfZXhpc3QKICAgIGJ5dGVjIDUgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBieXRlYyA1IC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgYnl0ZWMgNSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBpbnRjXzIgLy8gMgogICAgc3dhcAogICAgc2V0Yml0CiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3JlYWRfYm94ZXNfcm91dGVAODoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkX2JveGVzCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGRpZyAyCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYwogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVfYm94ZXNfcm91dGVANzoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBkZWxldGVfYm94ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2hlY2tfa2V5c19yb3V0ZUA2OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9ib3hlc19yb3V0ZUA1OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4CiAgICAvLyBjbGFzcyBCb3hDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hlcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTg6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4CiAgICAvLyBjbGFzcyBCb3hDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LnNldF9ib3hlcyhhOiB1aW50NjQsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gdm9pZDoKc2V0X2JveGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTctMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hlcyhzZWxmLCBhOiBVSW50NjQsIGI6IGFyYzQuRHluYW1pY0J5dGVzLCBjOiBhcmM0LlN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYm94X2EudmFsdWUgPSBhCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gImJveF9hIgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjAKICAgIC8vIHNlbGYuYm94X2IudmFsdWUgPSBiLmNvcHkoKQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNCAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjEKICAgIC8vIHNlbGYuYm94X2MudmFsdWUgPSBjCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMgogICAgLy8gc2VsZi5ib3hfZC52YWx1ZSA9IGIubmF0aXZlCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlY18yIC8vICJib3hfZCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMiAvLyAiYm94X2QiCiAgICBkaWcgMQogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQKICAgIC8vIGJfdmFsdWUgPSBzZWxmLmJveF9iLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9iIGV4aXN0cwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGFzc2VydCBzZWxmLmJveF9iLnZhbHVlLmxlbmd0aCA9PSBiX3ZhbHVlLmxlbmd0aCwgImRpcmVjdCByZWZlcmVuY2Ugc2hvdWxkIG1hdGNoIGNvcHkiCiAgICBieXRlYyA0IC8vICJiIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2IgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgPT0KICAgIGFzc2VydCAvLyBkaXJlY3QgcmVmZXJlbmNlIHNob3VsZCBtYXRjaCBjb3B5CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNwogICAgLy8gc2VsZi5ib3hfYS52YWx1ZSArPSAzCiAgICBieXRlY18zIC8vICJib3hfYSIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9hIGV4aXN0cwogICAgcHVzaGludCAzIC8vIDMKICAgICsKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gImJveF9hIgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjktMzAKICAgIC8vICMgdGVzdCAubGVuZ3RoCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYS5sZW5ndGggPT0gOAogICAgYnl0ZWNfMyAvLyAiYm94X2EiCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfYSBleGlzdHMKICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2IubGVuZ3RoID09IGIuYnl0ZXMubGVuZ3RoCiAgICBieXRlYyA0IC8vICJiIgogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2IgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzIKICAgIC8vIGFzc2VydCBzZWxmLmJveF9jLmxlbmd0aCA9PSBjLmJ5dGVzLmxlbmd0aAogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9jIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2QubGVuZ3RoID09IGIubmF0aXZlLmxlbmd0aAogICAgYnl0ZWNfMiAvLyAiYm94X2QiCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZCBleGlzdHMKICAgIGRpZyAyCiAgICBsZW4KICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNS0zNgogICAgLy8gIyB0ZXN0IC52YWx1ZS5ieXRlcwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbMF0gPT0gYy5ieXRlc1swXQogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy52YWx1ZS5ieXRlc1stMV0gPT0gYy5ieXRlc1stMV0KICAgIGJ5dGVjXzAgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkaWcgMgogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGV4dHJhY3QzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozOAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbOi0xXSA9PSBjLmJ5dGVzWzotMV0KICAgIGJ5dGVjXzAgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIGludGNfMCAvLyAxCiAgICBkaWcgMQogICAgPAogICAgZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMQogICAgZGlnIDMKICAgID49CiAgICBpbnRjXzAgLy8gMQogICAgZGlnIDQKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMwogICAgc3dhcAogICAgLQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozOQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbOjJdID09IGMuYnl0ZXNbOjJdCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2xlbgogICAgcG9wCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDEKICAgIDwKICAgIGludGNfMiAvLyAyCiAgICBzd2FwCiAgICBzZWxlY3QKICAgIGJ5dGVjXzAgLy8gMHg0MjRmNTg1ZjQzCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18yIC8vIDIKICAgIGRpZyAzCiAgICA+PQogICAgaW50Y18yIC8vIDIKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDEtNDIKICAgIC8vICMgdGVzdCAudmFsdWUgd2l0aCBCeXRlcyB0eXBlCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVswXSA9PSBiLm5hdGl2ZVswXQogICAgYnl0ZWNfMiAvLyAiYm94X2QiCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2QudmFsdWVbLTFdID09IGIubmF0aXZlWy0xXQogICAgYnl0ZWNfMiAvLyAiYm94X2QiCiAgICBib3hfbGVuCiAgICBwb3AKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBieXRlY18yIC8vICJib3hfZCIKICAgIHN3YXAKICAgIGludGNfMCAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkaWcgMwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGV4dHJhY3QzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2QudmFsdWVbOi0xXSA9PSBiLm5hdGl2ZVs6LTFdCiAgICBieXRlY18yIC8vICJib3hfZCIKICAgIGJveF9sZW4KICAgIHBvcAogICAgaW50Y18wIC8vIDEKICAgIGRpZyAxCiAgICA8CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAtCiAgICBieXRlY18yIC8vICJib3hfZCIKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMQogICAgZGlnIDIKICAgID49CiAgICBpbnRjXzAgLy8gMQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgc3dhcAogICAgLQogICAgZGlnIDMKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVs6NV0gPT0gYi5uYXRpdmVbOjVdCiAgICBieXRlY18yIC8vICJib3hfZCIKICAgIGJveF9sZW4KICAgIHBvcAogICAgaW50Y18zIC8vIDUKICAgIGRpZyAxCiAgICA8CiAgICBpbnRjXzMgLy8gNQogICAgc3dhcAogICAgc2VsZWN0CiAgICBieXRlY18yIC8vICJib3hfZCIKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzMgLy8gNQogICAgZGlnIDIKICAgID49CiAgICBpbnRjXzMgLy8gNQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9kLnZhbHVlWzogVUludDY0KDIpXSA9PSBiLm5hdGl2ZVs6IFVJbnQ2NCgyKV0KICAgIGJ5dGVjXzIgLy8gImJveF9kIgogICAgYm94X2xlbgogICAgcG9wCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDEKICAgIDwKICAgIGludGNfMiAvLyAyCiAgICBzd2FwCiAgICBzZWxlY3QKICAgIGJ5dGVjXzIgLy8gImJveF9kIgogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgPj0KICAgIGludGNfMiAvLyAyCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmRlbGV0ZV9ib3hlcygpIC0+IHZvaWQ6CmRlbGV0ZV9ib3hlczoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBkZWwgc2VsZi5ib3hfYS52YWx1ZQogICAgYnl0ZWNfMyAvLyAiYm94X2EiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBkZWwgc2VsZi5ib3hfYi52YWx1ZQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTgKICAgIC8vIGRlbCBzZWxmLmJveF9jLnZhbHVlCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo1OQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2EuZ2V0KGRlZmF1bHQ9VUludDY0KDQyKSkgPT0gNDIKICAgIGJ5dGVjXzMgLy8gImJveF9hIgogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgcHVzaGludCA0MiAvLyA0MgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYwCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYi5nZXQoZGVmYXVsdD1hcmM0LkR5bmFtaWNCeXRlcyhiIjQyIikpLm5hdGl2ZSA9PSBiIjQyIgogICAgYnl0ZWMgNCAvLyAiYiIKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgZXh0cmFjdCAyIDAKICAgIHB1c2hieXRlcyAweDM0MzIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYxCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy5nZXQoZGVmYXVsdD1hcmM0LlN0cmluZygiNDIiKSkgPT0gIjQyIgogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgMTAgLy8gMHgwMDAyMzQzMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjIKICAgIC8vIGEsIGFfZXhpc3RzID0gc2VsZi5ib3hfYS5tYXliZSgpCiAgICBieXRlY18zIC8vICJib3hfYSIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NlcnQgbm90IGFfZXhpc3RzCiAgICBzd2FwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBhc3NlcnQgYSA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LnJlYWRfYm94ZXMoKSAtPiB1aW50NjQsIGJ5dGVzLCBieXRlczoKcmVhZF9ib3hlczoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY4CiAgICAvLyByZXR1cm4gZ2V0X2JveF92YWx1ZV9wbHVzXzEoc2VsZi5ib3hfYSkgLSAxLCBzZWxmLmJveF9iLnZhbHVlLm5hdGl2ZSwgc2VsZi5ib3hfYy52YWx1ZQogICAgYnl0ZWNfMyAvLyAiYm94X2EiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxODEKICAgIC8vIHJldHVybiBib3gudmFsdWUgKyAxCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY4CiAgICAvLyByZXR1cm4gZ2V0X2JveF92YWx1ZV9wbHVzXzEoc2VsZi5ib3hfYSkgLSAxLCBzZWxmLmJveF9iLnZhbHVlLm5hdGl2ZSwgc2VsZi5ib3hfYy52YWx1ZQogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGJ5dGVjIDQgLy8gImIiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfYiBleGlzdHMKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2MgZXhpc3RzCiAgICByZXRzdWIKCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hlc19leGlzdCgpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQ6CmJveGVzX2V4aXN0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzIKICAgIC8vIHJldHVybiBib29sKHNlbGYuYm94X2EpLCBib29sKHNlbGYuYm94X2IpLCBib29sKHNlbGYuYm94X2MpCiAgICBieXRlY18zIC8vICJib3hfYSIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnl0ZWMgNCAvLyAiYiIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc2xpY2VfYm94KCkgLT4gdm9pZDoKc2xpY2VfYm94OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzYKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA4IC8vICIwIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzcKICAgIC8vIGJveF8wLnZhbHVlID0gQnl0ZXMoYiJUZXN0aW5nIHRlc3RpbmcgMTIzIikKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzYKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA4IC8vICIwIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzcKICAgIC8vIGJveF8wLnZhbHVlID0gQnl0ZXMoYiJUZXN0aW5nIHRlc3RpbmcgMTIzIikKICAgIHB1c2hieXRlcyAweDU0NjU3Mzc0Njk2ZTY3MjA3NDY1NzM3NDY5NmU2NzIwMzEzMjMzCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NgogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDggLy8gIjAiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo3OAogICAgLy8gYXNzZXJ0IGJveF8wLnZhbHVlWzA6N10gPT0gYiJUZXN0aW5nIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDcgLy8gNwogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3IC8vIDcKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzYKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA4IC8vICIwIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzgKICAgIC8vIGFzc2VydCBib3hfMC52YWx1ZVswOjddID09IGIiVGVzdGluZyIKICAgIGNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBwdXNoYnl0ZXMgMHg1NDY1NzM3NDY5NmU2NwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIHNlbGYuYm94X2MudmFsdWUgPSBhcmM0LlN0cmluZygiSGVsbG8iKQogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMCAvLyAweDQyNGY1ODVmNDMKICAgIHB1c2hieXRlcyAweDAwMDU0ODY1NmM2YzZmCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbMjoxMF0gPT0gYiJIZWxsbyIKICAgIGJ5dGVjXzAgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMQogICAgPAogICAgZGlnIDEKICAgIGludGNfMiAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICAtCiAgICBieXRlY18wIC8vIDB4NDI0ZjU4NWY0MwogICAgY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmFyYzRfYm94KCkgLT4gdm9pZDoKYXJjNF9ib3g6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gYm94X2QgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NgogICAgLy8gYm94X2QudmFsdWUgPSBTdGF0aWNJbnRzKGFyYzQuVUludDgoMCksIGFyYzQuVUludDgoMSksIGFyYzQuVUludDgoMiksIGFyYzQuVUludDgoMykpCiAgICBwdXNoYnl0ZXMgMHgwMDAxMDIwMwogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODUKICAgIC8vIGJveF9kID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODgKICAgIC8vIGFzc2VydCBib3hfZC52YWx1ZVswXSA9PSAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAwIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA1IC8vIDB4MDAKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gYm94X2QgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4OQogICAgLy8gYXNzZXJ0IGJveF9kLnZhbHVlWzFdID09IDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3ggZXhpc3RzCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAxCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODUKICAgIC8vIGJveF9kID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTAKICAgIC8vIGFzc2VydCBib3hfZC52YWx1ZVsyXSA9PSAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMgogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBib3hfZCA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgYm94X2QudmFsdWVbM10gPT0gMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGJ5dGVzIDB4MDMKICAgIGI9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC50ZXN0X2JveF9yZWYoKSAtPiB2b2lkOgp0ZXN0X2JveF9yZWY6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NS05NgogICAgLy8gIyBpbml0IHJlZiwgd2l0aCB2YWxpZCBrZXkgdHlwZXMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PSJibG9iIikKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NwogICAgLy8gYXNzZXJ0IG5vdCBib3hfcmVmLCAibm8gZGF0YSIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIG5vIGRhdGEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1iImJsb2IiKQogICAgYnl0ZWNfMSAvLyAweDYyNmM2ZjYyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IG5vdCBib3hfcmVmLCAibm8gZGF0YSIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIG5vIGRhdGEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9Qnl0ZXMoYiJibG9iIikpCiAgICBieXRlY18xIC8vIDB4NjI2YzZmNjIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gYXNzZXJ0IG5vdCBib3hfcmVmLCAibm8gZGF0YSIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIG5vIGRhdGEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NlcnQgbm90IGJveF9yZWYsICJubyBkYXRhIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gbm8gZGF0YQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAyCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDUtMTA2CiAgICAvLyAjIGNyZWF0ZQogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA3CiAgICAvLyBhc3NlcnQgYm94X3JlZiwgImhhcyBkYXRhIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gaGFzIGRhdGEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwOS0xMTAKICAgIC8vICMgbWFuaXB1bGF0ZSBkYXRhCiAgICAvLyBzZW5kZXJfYnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTEKICAgIC8vIGFwcF9hZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEzCiAgICAvLyBib3hfcmVmLnJlcGxhY2UoMCwgc2VuZGVyX2J5dGVzKQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAyCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTQKICAgIC8vIGJveF9yZWYucmVzaXplKDgwMDApCiAgICBwdXNoaW50IDgwMDAgLy8gODAwMAogICAgYm94X3Jlc2l6ZQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAyCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTUKICAgIC8vIGJveF9yZWYuc3BsaWNlKDAsIDAsIGFwcF9hZGRyZXNzKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTE2CiAgICAvLyBib3hfcmVmLnJlcGxhY2UoNjQsIHZhbHVlXzMpCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTIKICAgIC8vIHZhbHVlXzMgPSBCeXRlcyhiImhlbGxvIikKICAgIGJ5dGVjIDkgLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTYKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGJveF9yZXBsYWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNwogICAgLy8gcHJlZml4ID0gYm94X3JlZi5leHRyYWN0KDAsIDMyICogMiArIHZhbHVlXzMubGVuZ3RoKQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hpbnQgNjkgLy8gNjkKICAgIGJveF9leHRyYWN0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTgKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGNvbmNhdAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyB2YWx1ZV8zID0gQnl0ZXMoYiJoZWxsbyIpCiAgICBieXRlYyA5IC8vIDB4Njg2NTZjNmM2ZgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTE4CiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMC0xMjEKICAgIC8vICMgZGVsZXRlCiAgICAvLyBhc3NlcnQgYm94X3JlZi5kZWxldGUoKQogICAgYm94X2RlbAogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNC0xMjUKICAgIC8vICMgcXVlcnkKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBib3hfcmVmLm1heWJlKCkKICAgIGJveF9nZXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNgogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI3CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gYiIiCiAgICBwdXNoYnl0ZXMgMHgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18xIC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI4CiAgICAvLyBhc3NlcnQgYm94X3JlZi5nZXQoZGVmYXVsdD1zZW5kZXJfYnl0ZXMpID09IHNlbmRlcl9ieXRlcwogICAgYm94X2dldAogICAgZGlnIDMKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMC0xMzEKICAgIC8vICMgdXBkYXRlCiAgICAvLyBib3hfcmVmLnB1dChzZW5kZXJfYnl0ZXMgKyBhcHBfYWRkcmVzcykKICAgIGNvbmNhdAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAyCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzAtMTMxCiAgICAvLyAjIHVwZGF0ZQogICAgLy8gYm94X3JlZi5wdXQoc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MpCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJCbG9iIGV4aXN0cyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJsb2IgZXhpc3RzCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMSAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gYXNzZXJ0IGJveF9yZWYubGVuZ3RoID09IDY0CiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgQm94UmVmIGV4aXN0cwogICAgcHVzaGludCA2NCAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAyCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzEgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxODYKICAgIC8vIHJldHVybiByZWYubGVuZ3RoCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgQm94UmVmIGV4aXN0cwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM0CiAgICAvLyBhc3NlcnQgZ2V0X2JveF9yZWZfbGVuZ3RoKGJveF9yZWYpID09IDY0CiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzYtMTM3CiAgICAvLyAjIGluc3RhbmNlIGJveCByZWYKICAgIC8vIHNlbGYuYm94X3JlZi5jcmVhdGUoc2l6ZT1VSW50NjQoMzIpKQogICAgYnl0ZWMgMTEgLy8gImJveF9yZWYiCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3JlZiwgImhhcyBkYXRhIgogICAgYnl0ZWMgMTEgLy8gImJveF9yZWYiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM5CiAgICAvLyBzZWxmLmJveF9yZWYuZGVsZXRlKCkKICAgIGJ5dGVjIDExIC8vICJib3hfcmVmIgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hfbWFwX3Rlc3QoKSAtPiB2b2lkOgpib3hfbWFwX3Rlc3Q6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDMKICAgIC8vIGtleV8wID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQ2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gdmFsdWUgPSBTdHJpbmcoIkhtbW1tbSIpCiAgICBwdXNoYnl0ZXMgIkhtbW1tbSIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gc2VsZi5ib3hfbWFwW2tleV8wXSA9IHZhbHVlCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDgKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXAubGVuZ3RoKGtleV8wKSA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDQKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUwCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmdldChrZXlfMSwgZGVmYXVsdD1TdHJpbmcoImRlZmF1bHQiKSkgPT0gU3RyaW5nKCJkZWZhdWx0IikKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2dldAogICAgYnl0ZWMgMTIgLy8gImRlZmF1bHQiCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGJ5dGVjIDEyIC8vICJkZWZhdWx0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUxCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gc2VsZi5ib3hfbWFwLm1heWJlKGtleV8xKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBidXJ5IDEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUzCiAgICAvLyBhc3NlcnQga2V5XzAgaW4gc2VsZi5ib3hfbWFwCiAgICBzd2FwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU4CiAgICAvLyB0bXBfYm94X21hcFtrZXlfMV0gPSBTdHJpbmcoImhlbGxvIikKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGJ5dGVjIDkgLy8gImhlbGxvIgogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTkxCiAgICAvLyByZXR1cm4gYm94X21hcFtrZXkgKyAxXQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94TWFwIGVudHJ5IGV4aXN0cwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU5CiAgICAvLyBhc3NlcnQgZ2V0X2JveF9tYXBfdmFsdWVfZnJvbV9rZXlfcGx1c18xKHRtcF9ib3hfbWFwLCBVSW50NjQoMCkpID09ICJoZWxsbyIKICAgIGJ5dGVjIDkgLy8gImhlbGxvIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTYwCiAgICAvLyBkZWwgdG1wX2JveF9tYXBba2V5XzFdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmJveF9tYXBfc2V0KGtleTogdWludDY0LCB2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CmJveF9tYXBfc2V0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTYyLTE2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9zZXQoc2VsZiwga2V5OiBVSW50NjQsIHZhbHVlOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gc2VsZi5ib3hfbWFwW2tleV0gPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hfbWFwX2dldChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmJveF9tYXBfZ2V0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY2LTE2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9nZXQoc2VsZiwga2V5OiBVSW50NjQpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY4CiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwW2tleV0KICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmJveF9tYXBfZGVsKGtleTogdWludDY0KSAtPiB2b2lkOgpib3hfbWFwX2RlbDoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3MC0xNzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfZGVsKHNlbGYsIGtleTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzIKICAgIC8vIGRlbCBzZWxmLmJveF9tYXBba2V5XQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmJveF9tYXBfZXhpc3RzKGtleTogdWludDY0KSAtPiB1aW50NjQ6CmJveF9tYXBfZXhpc3RzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc0LTE3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9leGlzdHMoc2VsZiwga2V5OiBVSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gcmV0dXJuIGtleSBpbiBzZWxmLmJveF9tYXAKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAEAQACBSYNBUJPWF9DBGJsb2IFYm94X2QFYm94X2EBYgEAAWQEFR98dQEwBWhlbGxvBAACNDIHYm94X3JlZgdkZWZhdWx0MRtBAYKCDQR9NyluBDMyXT0E1WbGMgT72pugBOWj7VIEBO9JcQQj7LMsBO73WBYEtTKROgTCnxZpBJyIjAkE5vaFBgSO4sNkNhoAjg0BCgEBAPUAwgCQAIQAeABsAGAASgAtAB0AAiNDMRkURDEYRDYaAReIBHonBSNPAlQnB0xQsCJDMRkURDEYRDYaAReIBFYiQzEZFEQxGEQ2GgEXiAQ9SRUWVwYCTFAnB0xQsCJDMRkURDEYRDYaARc2GgJXAgCIBA0iQzEZFEQxGESIA7siQzEZFEQxGESIAyYiQzEZFEQxGESIAuEiQzEZFEQxGESIAlkiQzEZFEQxGESIAj8nBSNPBFQnBSNPBFQnBSNPBFRMI1NPAiJPAlRMI1MkTFQnB0xQsCJDMRkURDEYRIgB+E8CFksCFRZXBgJPA1BMgAIADFBLARWBDAgWVwYCUExQTFAnB0xQsCJDMRkURDEYRIgBhyJDMRkURDEYRCJDMRkURDEYRDYaARc2GgI2GgOIAA0iQzEZQP7bMRgURCJDigMAi/0WK0y/JwS8SCcEi/6/KLxIKIv/v4v+VwIAKrxIKksBvycEvkQnBL5EI1lMI1kSRCu+TBdMRIEDCBYrTL8rvUSBCBJEJwS9RIv+FRJEKL1Ei/8VTEsBEkQqvURLAhVMSwESRCgjIrqL/1cAARJEKL1IIgkoTCK6SwIiCYv/TCJYEkQovUgiSwEMSwEiTwJNCSgjTwK6IksDDyJLBE8CTUsDTAmL/yNPAlISRCi9SCRLAQwkTE0oI08CuiRLAw8kTwRPAk2L/yNPAlISRCojIrqL/lcCARJEKr1IIgkqTCK6SwEiCUsDTCJYEkQqvUgiSwEMSwEiTwJNCSojTwK6IksCDyJLA08CTUsCTAlLAyNPAlISRCq9SCVLAQwlTE0qI08CuiVLAg8lSwNPAk1LAyNPAlISRCq9SCRLAQwkTE0qI08CuiRLAg8kTwNPAk1PAiNPAlISRIkrvEgnBLxIKLxIK75MF4EqTE8CTYEqEkQnBL4nCk4CTVcCAIACNDISRCi+JwpOAk0nChJEK75MF0wURBREiSu+TBdMRCIIIgknBL5EVwIAKL5EiSu9RQEnBL1FASi9RQGJJwi8SCcIgBNUZXN0aW5nIHRlc3RpbmcgMTIzvycIvUhJI0sCTYEHSwIMTwKBB08CTUsBCScITgK6gAdUZXN0aW5nEkQovEgogAcABUhlbGxvvyi9SCRLAQxLASRPAk2BCksCDE8CgQpPAk1LAQkoTgK6gAVIZWxsbxJEiScGgAQAAQIDvycGvkRXAAEnBahEJwa+RFcBAYABAahEJwa+RFcCAYABAqhEJwa+RFcDAYABA6hEiSm9RQEURCm9RQEURCm9RQEURCm9RQEURCmBILlEKb1FAUQxADIKKSNLA7spgcA+0ykjSUsD0imBQCcJuykjgUW6SwFLA1AnCVASRCm8RCm+FESAABJEKb5LA04CTUsCEkRQKUy/Kb1FAUQpvUSBQBJEKb1EgUASRCcLgSC5SCcLvUUBRCcLvEiJIxZJvEhJgAZIbW1tbW2/Sb1EgQYSREm9RIEGEkQiFkm+JwxOAk0nDBJESb5FARRETL1FAURJvEhJJwm/Sb5EJwkSRLxIiYoCAIv+Fkm8SIv/v4mKAQGL/xa+RImKAQCL/xa8SImKAQGL/xa9RQGJ", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }