{ "name": "ConsentManager", "structs": {}, "methods": [ { "name": "grant_consent", "args": [ { "type": "address", "name": "fiduciary" }, { "type": "string", "name": "purpose" }, { "type": "string", "name": "data_hash" }, { "type": "string", "name": "data_scope" }, { "type": "uint64", "name": "duration_in_seconds" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "revoke_consent", "args": [ { "type": "uint64", "name": "index" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "request_erasure", "args": [ { "type": "uint64", "name": "index" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_patient_consents", "args": [ { "type": "address", "name": "patient" } ], "returns": { "type": "(address,address,string,string,string,uint64,uint64,bool,bool)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "validate_consent", "args": [ { "type": "address", "name": "principal" }, { "type": "uint64", "name": "index" }, { "type": "string", "name": "required_scope" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "update_consent_duration", "args": [ { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "new_duration_in_seconds" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "request_access", "args": [ { "type": "address", "name": "patient" }, { "type": "string", "name": "purpose" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_pending_requests", "args": [ { "type": "address", "name": "patient" } ], "returns": { "type": "(uint64,address,string,uint64,bool)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "approve_request", "args": [ { "type": "uint64", "name": "request_id" }, { "type": "string", "name": "data_hash" }, { "type": "string", "name": "data_scope" }, { "type": "uint64", "name": "duration_in_seconds" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "reject_request", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "request_counter": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmVxX2NvdW50ZXI=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "consents": { "keyType": "address", "valueType": "(address,address,string,string,string,uint64,uint64,bool,bool)[]", "prefix": "Y18=" }, "access_requests": { "keyType": "address", "valueType": "(uint64,address,string,uint64,bool)[]", "prefix": "YXJf" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 700 ], "errorMessage": "Already revoked" }, { "pc": [ 1279 ], "errorMessage": "Consent not active" }, { "pc": [ 1732 ], "errorMessage": "Pending request not found" }, { "pc": [ 1378, 1456, 1653, 1979 ], "errorMessage": "check self.access_requests entry exists" }, { "pc": [ 566, 622, 737, 954, 1007, 1201, 1906 ], "errorMessage": "check self.consents entry exists" }, { "pc": [ 1332 ], "errorMessage": "check self.request_counter exists" }, { "pc": [ 651, 711, 766, 929, 1117, 1230, 1294, 1503, 1760, 1790, 2026, 2113 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 440, 456, 472, 634, 749, 988, 1100, 1213, 1320, 1482, 1609, 1625, 1742, 2000 ], "errorMessage": "invalid array length header" }, { "pc": [ 450, 466, 479, 994, 1327, 1618, 1631 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 434, 949, 971, 1314, 1433 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 487, 615, 730, 979, 1186, 1194, 1602, 1639, 1967 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDIgMSA4CiAgICBieXRlY2Jsb2NrIDB4MDAgMHg2MzVmIDB4ODAgIiIgMHgwMDAyIDB4NjE3MjVmICJyZXFfY291bnRlciIgMHgwMDAxMDAwMiAweDAwMDY0NTUyNDE1MzQ1NDQgMHgxNTFmN2M3NSAweDAwNTcKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6NTAKICAgIC8vIHNlbGYucmVxdWVzdF9jb3VudGVyLnZhbHVlID0gVUludDY0KDApCiAgICBieXRlYyA2IC8vICJyZXFfY291bnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBjbGFzcyBDb25zZW50TWFuYWdlcihBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGZiZDc2MDU0IDB4YmVmZDYzNmYgMHg2ZjRmYWFkMiAweGE0N2RiYzBmIDB4NGMyOGE1YWMgMHg0MzQ2MjdlOSAweGQ4NGRlYmQwIDB4NjAyOWFhZGEgMHhlNGE0YmQ5YiAweGZiODkwNjI5IC8vIG1ldGhvZCAiZ3JhbnRfY29uc2VudChhZGRyZXNzLHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZXZva2VfY29uc2VudCh1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVxdWVzdF9lcmFzdXJlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfcGF0aWVudF9jb25zZW50cyhhZGRyZXNzKShhZGRyZXNzLGFkZHJlc3Msc3RyaW5nLHN0cmluZyxzdHJpbmcsdWludDY0LHVpbnQ2NCxib29sLGJvb2wpW10iLCBtZXRob2QgInZhbGlkYXRlX2NvbnNlbnQoYWRkcmVzcyx1aW50NjQsc3RyaW5nKWJvb2wiLCBtZXRob2QgInVwZGF0ZV9jb25zZW50X2R1cmF0aW9uKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVxdWVzdF9hY2Nlc3MoYWRkcmVzcyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0X3BlbmRpbmdfcmVxdWVzdHMoYWRkcmVzcykodWludDY0LGFkZHJlc3Msc3RyaW5nLHVpbnQ2NCxib29sKVtdIiwgbWV0aG9kICJhcHByb3ZlX3JlcXVlc3QodWludDY0LHN0cmluZyxzdHJpbmcsdWludDY0KXZvaWQiLCBtZXRob2QgInJlamVjdF9yZXF1ZXN0KHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggZ3JhbnRfY29uc2VudCByZXZva2VfY29uc2VudCByZXF1ZXN0X2VyYXN1cmUgZ2V0X3BhdGllbnRfY29uc2VudHMgdmFsaWRhdGVfY29uc2VudCB1cGRhdGVfY29uc2VudF9kdXJhdGlvbiByZXF1ZXN0X2FjY2VzcyBnZXRfcGVuZGluZ19yZXF1ZXN0cyBhcHByb3ZlX3JlcXVlc3QgcmVqZWN0X3JlcXVlc3QKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxOToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18zIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudChzb3VyY2U6IGJ5dGVzLCBuZXdfaXRlbTogYnl0ZXMsIGluZGV4OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIHN1YnN0cmluZyAwIDIKICAgIGR1cAogICAgYnRvaQogICAgZnJhbWVfZGlnIC0zCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDIKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDUKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgaW50Y18yIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkdXAKICAgIGRpZyA0CiAgICAtCiAgICBjb3ZlciA2CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgY292ZXIgNgogICAgZGlnIDQKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDUKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAzCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgZnJhbWVfZGlnIDUKICAgIGR1cAogICAgY292ZXIgMwogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBmcmFtZV9kaWcgMQogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAyCiAgICBzd2FwCiAgICByZXBsYWNlMwogICAgZnJhbWVfYnVyeSAzCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA1CiAgICBiIGR5bmFtaWNfYXJyYXlfcmVwbGFjZV9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAzCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnNlbnRfbWFuYWdlci5jb250cmFjdC5Db25zZW50TWFuYWdlci5ncmFudF9jb25zZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ3JhbnRfY29uc2VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBzZW5kZXJfYWRkciA9IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo2NAogICAgLy8gbm93ID0gb3AuR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6NjUKICAgIC8vIGV4cGlyeSA9IG5vdyArIGR1cmF0aW9uX2luX3NlY29uZHMubmF0aXZlCiAgICB1bmNvdmVyIDIKICAgIGJ0b2kKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjczCiAgICAvLyBncmFudGVkX2F0PWFyYzQuVUludDY0KG5vdyksCiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBleHBpcnk9YXJjNC5VSW50NjQoZXhwaXJ5KSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6NjctNzcKICAgIC8vIG5ld19jb25zZW50ID0gQ29uc2VudCgKICAgIC8vICAgICBkYXRhX3ByaW5jaXBhbD1zZW5kZXJfYWRkciwKICAgIC8vICAgICBkYXRhX2ZpZHVjaWFyeT1maWR1Y2lhcnksCiAgICAvLyAgICAgcHVycG9zZT1wdXJwb3NlLAogICAgLy8gICAgIGRhdGFfaGFzaD1kYXRhX2hhc2gsCiAgICAvLyAgICAgZGF0YV9zY29wZT1kYXRhX3Njb3BlLAogICAgLy8gICAgIGdyYW50ZWRfYXQ9YXJjNC5VSW50NjQobm93KSwKICAgIC8vICAgICBleHBpcnk9YXJjNC5VSW50NjQoZXhwaXJ5KSwKICAgIC8vICAgICBpc19hY3RpdmU9YXJjNC5Cb29sKFRydWUpLAogICAgLy8gICAgIGVyYXNlZD1hcmM0LkJvb2woRmFsc2UpLAogICAgLy8gKQogICAgZGlnIDIKICAgIHVuY292ZXIgOQogICAgY29uY2F0CiAgICBieXRlYyAxMCAvLyAweDAwNTcKICAgIGNvbmNhdAogICAgcHVzaGludCA4NwogICAgdW5jb3ZlciA4CiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgdW5jb3ZlciA2CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4ODAKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo3OQogICAgLy8gaWYgc2VuZGVyX2FkZHIgaW4gc2VsZi5jb25zZW50czoKICAgIGJ5dGVjXzEgLy8gMHg2MzVmCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBncmFudF9jb25zZW50X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBhcnIgPSBzZWxmLmNvbnNlbnRzW3NlbmRlcl9hZGRyXS5jb3B5KCkKICAgIGRpZyAxCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbnNlbnRzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo4MQogICAgLy8gYXJyLmFwcGVuZChuZXdfY29uc2VudC5jb3B5KCkpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDQgLy8gMHgwMDAyCiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6ODIKICAgIC8vIHNlbGYuY29uc2VudHNbc2VuZGVyX2FkZHJdID0gYXJyLmNvcHkoKQogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAoKZ3JhbnRfY29uc2VudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCmdyYW50X2NvbnNlbnRfZWxzZV9ib2R5QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBhcnIgPSBhcmM0LkR5bmFtaWNBcnJheVtDb25zZW50XShuZXdfY29uc2VudC5jb3B5KCkpCiAgICBieXRlYyA3IC8vIDB4MDAwMTAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo4NQogICAgLy8gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0gPSBhcnIuY29weSgpCiAgICBkaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgZ3JhbnRfY29uc2VudF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMuY29uc2VudF9tYW5hZ2VyLmNvbnRyYWN0LkNvbnNlbnRNYW5hZ2VyLnJldm9rZV9jb25zZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKcmV2b2tlX2NvbnNlbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6OTAKICAgIC8vIGFyciA9IHNlbGYuY29uc2VudHNbc2VuZGVyX2FkZHJdLmNvcHkoKQogICAgYnl0ZWNfMSAvLyAweDYzNWYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6ODkKICAgIC8vIHNlbmRlcl9hZGRyID0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhcnIgPSBzZWxmLmNvbnNlbnRzW3NlbmRlcl9hZGRyXS5jb3B5KCkKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb25zZW50cyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6OTEKICAgIC8vIGNvbnNlbnQgPSBhcnJbaW5kZXgubmF0aXZlXS5jb3B5KCkKICAgIHVuY292ZXIgMgogICAgYnRvaQogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDIKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMwogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGRpZyAyCiAgICBkaWcgMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA0CiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGRpZyA1CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo5MC05MgogICAgLy8gYXJyID0gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICAvLyBjb25zZW50ID0gYXJyW2luZGV4Lm5hdGl2ZV0uY29weSgpCiAgICAvLyBhc3NlcnQgY29uc2VudC5pc19hY3RpdmUubmF0aXZlLCAiQWxyZWFkeSByZXZva2VkIgogICAgaW50Y18xIC8vIDIKICAgIGRpZyAzCiAgICAqCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZGlnIDUKICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgcHVzaGludCA4OAogICAgKwogICAgZGlnIDUKICAgIHN3YXAKICAgIGludGNfMiAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo5MgogICAgLy8gYXNzZXJ0IGNvbnNlbnQuaXNfYWN0aXZlLm5hdGl2ZSwgIkFscmVhZHkgcmV2b2tlZCIKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQWxyZWFkeSByZXZva2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBjb25zZW50LmlzX2FjdGl2ZSA9IGFyYzQuQm9vbChGYWxzZSkKICAgIHB1c2hpbnQgNjg4CiAgICBpbnRjXzAgLy8gMAogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhcnJbaW5kZXgubmF0aXZlXSA9IGNvbnNlbnQuY29weSgpCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZXBsYWNlX2R5bmFtaWNfZWxlbWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0gPSBhcnIuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29uc2VudF9tYW5hZ2VyLmNvbnRyYWN0LkNvbnNlbnRNYW5hZ2VyLnJlcXVlc3RfZXJhc3VyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlcXVlc3RfZXJhc3VyZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6OTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMDAKICAgIC8vIGFyciA9IHNlbGYuY29uc2VudHNbc2VuZGVyX2FkZHJdLmNvcHkoKQogICAgYnl0ZWNfMSAvLyAweDYzNWYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6OTkKICAgIC8vIHNlbmRlcl9hZGRyID0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gYXJyID0gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29uc2VudHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gY29uc2VudCA9IGFycltpbmRleC5uYXRpdmVdLmNvcHkoKQogICAgdW5jb3ZlciAyCiAgICBidG9pCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDIKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgZGlnIDIKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gY29uc2VudC5lcmFzZWQgPSBhcmM0LkJvb2woVHJ1ZSkKICAgIHB1c2hpbnQgNjg5CiAgICBpbnRjXzIgLy8gMQogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gY29uc2VudC5pc19hY3RpdmUgPSBhcmM0LkJvb2woRmFsc2UpCiAgICBwdXNoaW50IDY4OAogICAgaW50Y18wIC8vIDAKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMDQKICAgIC8vIGNvbnNlbnQucHVycG9zZSA9IGFyYzQuU3RyaW5nKCJFUkFTRUQiKQogICAgZHVwCiAgICBwdXNoaW50IDY0CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMgogICAgZXh0cmFjdDMKICAgIGJ5dGVjIDggLy8gMHgwMDA2NDU1MjQxNTM0NTQ0CiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBwdXNoaW50IDY2CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDMKICAgIGxlbgogICAgZGlnIDQKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMQogICAgdW5jb3ZlciAzCiAgICAtCiAgICB1bmNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICArCiAgICBkaWcgMQogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgcmVwbGFjZTIgNjYKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA2OAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyA4CiAgICArCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiA2OAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMDUKICAgIC8vIGNvbnNlbnQuZGF0YV9oYXNoID0gYXJjNC5TdHJpbmcoIkVSQVNFRCIpCiAgICBkdXAKICAgIHB1c2hpbnQgNjYKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGRpZyAyCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMDQKICAgIC8vIGNvbnNlbnQucHVycG9zZSA9IGFyYzQuU3RyaW5nKCJFUkFTRUQiKQogICAgYnl0ZWMgOCAvLyAweDAwMDY0NTUyNDE1MzQ1NDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTA1CiAgICAvLyBjb25zZW50LmRhdGFfaGFzaCA9IGFyYzQuU3RyaW5nKCJFUkFTRUQiKQogICAgY29uY2F0CiAgICBkaWcgMgogICAgcHVzaGludCA2OAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgNAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICB1bmNvdmVyIDMKICAgIC0KICAgIHVuY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICsKICAgIHN3YXAKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiA2OAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMDYKICAgIC8vIGNvbnNlbnQuZGF0YV9zY29wZSA9IGFyYzQuU3RyaW5nKCJFUkFTRUQiKQogICAgZHVwCiAgICBwdXNoaW50IDY4CiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGV4dHJhY3QzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gY29uc2VudC5wdXJwb3NlID0gYXJjNC5TdHJpbmcoIkVSQVNFRCIpCiAgICBieXRlYyA4IC8vIDB4MDAwNjQ1NTI0MTUzNDU0NAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMDYKICAgIC8vIGNvbnNlbnQuZGF0YV9zY29wZSA9IGFyYzQuU3RyaW5nKCJFUkFTRUQiKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gYXJyW2luZGV4Lm5hdGl2ZV0gPSBjb25zZW50LmNvcHkoKQogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcmVwbGFjZV9keW5hbWljX2VsZW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTA4CiAgICAvLyBzZWxmLmNvbnNlbnRzW3NlbmRlcl9hZGRyXSA9IGFyci5jb3B5KCkKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6OTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jb25zZW50X21hbmFnZXIuY29udHJhY3QuQ29uc2VudE1hbmFnZXIuZ2V0X3BhdGllbnRfY29uc2VudHNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGF0aWVudF9jb25zZW50czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTE0CiAgICAvLyByZXR1cm4gc2VsZi5jb25zZW50c1twYXRpZW50XS5jb3B5KCkKICAgIGJ5dGVjXzEgLy8gMHg2MzVmCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbnNlbnRzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgOSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jb25zZW50X21hbmFnZXIuY29udHJhY3QuQ29uc2VudE1hbmFnZXIudmFsaWRhdGVfY29uc2VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX2NvbnNlbnQ6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTI1CiAgICAvLyBhcnIgPSBzZWxmLmNvbnNlbnRzW3ByaW5jaXBhbF0uY29weSgpCiAgICBieXRlY18xIC8vIDB4NjM1ZgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb25zZW50cyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTI2CiAgICAvLyBjb25zZW50ID0gYXJyW2luZGV4Lm5hdGl2ZV0uY29weSgpCiAgICBzd2FwCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTI3CiAgICAvLyBub3cgPSBvcC5HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMzAKICAgIC8vIGNvbnNlbnQuaXNfYWN0aXZlLm5hdGl2ZQogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGRpZyAxCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHB1c2hpbnQgODgKICAgICsKICAgIGludGNfMiAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTMwLTEzMgogICAgLy8gY29uc2VudC5pc19hY3RpdmUubmF0aXZlCiAgICAvLyBhbmQgbm90IGNvbnNlbnQuZXJhc2VkLm5hdGl2ZQogICAgLy8gYW5kIG5vdyA8PSBjb25zZW50LmV4cGlyeS5uYXRpdmUKICAgIGJ6IHZhbGlkYXRlX2NvbnNlbnRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gYW5kIG5vdCBjb25zZW50LmVyYXNlZC5uYXRpdmUKICAgIGRpZyA0CiAgICBkdXAKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHB1c2hpbnQgODgKICAgICsKICAgIGludGNfMiAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGdldGJpdAogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJueiB2YWxpZGF0ZV9jb25zZW50X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMzIKICAgIC8vIGFuZCBub3cgPD0gY29uc2VudC5leHBpcnkubmF0aXZlCiAgICBkaWcgNAogICAgZHVwCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBwdXNoaW50IDgwCiAgICArCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAyCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMzAtMTMyCiAgICAvLyBjb25zZW50LmlzX2FjdGl2ZS5uYXRpdmUKICAgIC8vIGFuZCBub3QgY29uc2VudC5lcmFzZWQubmF0aXZlCiAgICAvLyBhbmQgbm93IDw9IGNvbnNlbnQuZXhwaXJ5Lm5hdGl2ZQogICAgYnogdmFsaWRhdGVfY29uc2VudF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTM0CiAgICAvLyBpZiBjb25zZW50LmRhdGFfc2NvcGUgPT0gYXJjNC5TdHJpbmcoIkFsbCIpOgogICAgZGlnIDMKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkaWcgNAogICAgZHVwCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgcHVzaGludCA2OAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgYnVyeSA4CiAgICBwdXNoYnl0ZXMgMHgwMDAzNDE2YzZjCiAgICA9PQogICAgYnogdmFsaWRhdGVfY29uc2VudF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTM1CiAgICAvLyByZXR1cm4gYXJjNC5Cb29sKFRydWUpCiAgICBieXRlY18yIC8vIDB4ODAKCnZhbGlkYXRlX2NvbnNlbnRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuY29uc2VudF9tYW5hZ2VyLmNvbnRyYWN0LkNvbnNlbnRNYW5hZ2VyLnZhbGlkYXRlX2NvbnNlbnRAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjExNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlYyA5IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgp2YWxpZGF0ZV9jb25zZW50X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTM2CiAgICAvLyBpZiBjb25zZW50LmRhdGFfc2NvcGUgPT0gcmVxdWlyZWRfc2NvcGU6CiAgICBkaWcgNgogICAgZGlnIDYKICAgID09CiAgICBieiB2YWxpZGF0ZV9jb25zZW50X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMzcKICAgIC8vIHJldHVybiBhcmM0LkJvb2woVHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHg4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiB2YWxpZGF0ZV9jb25zZW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmNvbnNlbnRfbWFuYWdlci5jb250cmFjdC5Db25zZW50TWFuYWdlci52YWxpZGF0ZV9jb25zZW50QDEwCgp2YWxpZGF0ZV9jb25zZW50X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTM5CiAgICAvLyByZXR1cm4gYXJjNC5Cb29sKEZhbHNlKQogICAgYnl0ZWNfMCAvLyAweDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjExNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHZhbGlkYXRlX2NvbnNlbnRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuY29uc2VudF9tYW5hZ2VyLmNvbnRyYWN0LkNvbnNlbnRNYW5hZ2VyLnZhbGlkYXRlX2NvbnNlbnRAMTAKCgovLyBzbWFydF9jb250cmFjdHMuY29uc2VudF9tYW5hZ2VyLmNvbnRyYWN0LkNvbnNlbnRNYW5hZ2VyLnVwZGF0ZV9jb25zZW50X2R1cmF0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX2NvbnNlbnRfZHVyYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE0OAogICAgLy8gYXJyID0gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICBieXRlY18xIC8vIDB4NjM1ZgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNDcKICAgIC8vIHNlbmRlcl9hZGRyID0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE0OAogICAgLy8gYXJyID0gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29uc2VudHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE0OQogICAgLy8gY29uc2VudCA9IGFycltpbmRleC5uYXRpdmVdLmNvcHkoKQogICAgdW5jb3ZlciAzCiAgICBidG9pCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDIKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgZGlnIDIKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE0OC0xNTAKICAgIC8vIGFyciA9IHNlbGYuY29uc2VudHNbc2VuZGVyX2FkZHJdLmNvcHkoKQogICAgLy8gY29uc2VudCA9IGFycltpbmRleC5uYXRpdmVdLmNvcHkoKQogICAgLy8gYXNzZXJ0IGNvbnNlbnQuaXNfYWN0aXZlLm5hdGl2ZSwgIkNvbnNlbnQgbm90IGFjdGl2ZSIKICAgIGludGNfMSAvLyAyCiAgICBkaWcgMwogICAgKgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHB1c2hpbnQgODgKICAgICsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTUwCiAgICAvLyBhc3NlcnQgY29uc2VudC5pc19hY3RpdmUubmF0aXZlLCAiQ29uc2VudCBub3QgYWN0aXZlIgogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGFzc2VydCAvLyBDb25zZW50IG5vdCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTUxCiAgICAvLyBub3cgPSBvcC5HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNTIKICAgIC8vIGNvbnNlbnQuZXhwaXJ5ID0gYXJjNC5VSW50NjQobm93ICsgbmV3X2R1cmF0aW9uX2luX3NlY29uZHMubmF0aXZlKQogICAgdW5jb3ZlciA2CiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICByZXBsYWNlMiA3OAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNTMKICAgIC8vIGFycltpbmRleC5uYXRpdmVdID0gY29uc2VudC5jb3B5KCkKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0gPSBhcnIuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnNlbnRfbWFuYWdlci5jb250cmFjdC5Db25zZW50TWFuYWdlci5yZXF1ZXN0X2FjY2Vzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlcXVlc3RfYWNjZXNzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNjIKICAgIC8vIHNlbGYucmVxdWVzdF9jb3VudGVyLnZhbHVlICs9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInJlcV9jb3VudGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RfY291bnRlciBleGlzdHMKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBieXRlYyA2IC8vICJyZXFfY291bnRlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNjQKICAgIC8vIGlkPWFyYzQuVUludDY0KHNlbGYucmVxdWVzdF9jb3VudGVyLnZhbHVlKSwKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTY1CiAgICAvLyBwcm92aWRlcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE2NwogICAgLy8gdGltZXN0YW1wPWFyYzQuVUludDY0KG9wLkdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTYzLTE2OQogICAgLy8gbmV3X3JlcXVlc3QgPSBBY2Nlc3NSZXF1ZXN0KAogICAgLy8gICAgIGlkPWFyYzQuVUludDY0KHNlbGYucmVxdWVzdF9jb3VudGVyLnZhbHVlKSwKICAgIC8vICAgICBwcm92aWRlcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgcHVycG9zZT1wdXJwb3NlLAogICAgLy8gICAgIHRpbWVzdGFtcD1hcmM0LlVJbnQ2NChvcC5HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgaXNfcGVuZGluZz1hcmM0LkJvb2woVHJ1ZSksCiAgICAvLyApCiAgICBjb3ZlciAyCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMzMKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gaXNfcGVuZGluZz1hcmM0LkJvb2woVHJ1ZSksCiAgICBieXRlY18yIC8vIDB4ODAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTYzLTE2OQogICAgLy8gbmV3X3JlcXVlc3QgPSBBY2Nlc3NSZXF1ZXN0KAogICAgLy8gICAgIGlkPWFyYzQuVUludDY0KHNlbGYucmVxdWVzdF9jb3VudGVyLnZhbHVlKSwKICAgIC8vICAgICBwcm92aWRlcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgcHVycG9zZT1wdXJwb3NlLAogICAgLy8gICAgIHRpbWVzdGFtcD1hcmM0LlVJbnQ2NChvcC5HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgaXNfcGVuZGluZz1hcmM0LkJvb2woVHJ1ZSksCiAgICAvLyApCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNzEKICAgIC8vIGlmIHBhdGllbnQgaW4gc2VsZi5hY2Nlc3NfcmVxdWVzdHM6CiAgICBieXRlYyA1IC8vIDB4NjE3MjVmCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiByZXF1ZXN0X2FjY2Vzc19lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNzIKICAgIC8vIGFyciA9IHNlbGYuYWNjZXNzX3JlcXVlc3RzW3BhdGllbnRdLmNvcHkoKQogICAgZGlnIDEKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjZXNzX3JlcXVlc3RzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNzMKICAgIC8vIGFyci5hcHBlbmQobmV3X3JlcXVlc3QuY29weSgpKQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyA0IC8vIDB4MDAwMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAxCiAgICB1bmNvdmVyIDMKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gc2VsZi5hY2Nlc3NfcmVxdWVzdHNbcGF0aWVudF0gPSBhcnIuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgpyZXF1ZXN0X2FjY2Vzc19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgpyZXF1ZXN0X2FjY2Vzc19lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTc2CiAgICAvLyBhcnIgPSBhcmM0LkR5bmFtaWNBcnJheVtBY2Nlc3NSZXF1ZXN0XShuZXdfcmVxdWVzdC5jb3B5KCkpCiAgICBieXRlYyA3IC8vIDB4MDAwMTAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNzcKICAgIC8vIHNlbGYuYWNjZXNzX3JlcXVlc3RzW3BhdGllbnRdID0gYXJyLmNvcHkoKQogICAgZGlnIDEKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIHJlcXVlc3RfYWNjZXNzX2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jb25zZW50X21hbmFnZXIuY29udHJhY3QuQ29uc2VudE1hbmFnZXIuZ2V0X3BlbmRpbmdfcmVxdWVzdHNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGVuZGluZ19yZXF1ZXN0czoKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxODMKICAgIC8vIHBlbmRpbmcgPSBhcmM0LkR5bmFtaWNBcnJheVtBY2Nlc3NSZXF1ZXN0XSgpCiAgICBwdXNoYnl0ZXMgMHgwMDAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gaWYgcGF0aWVudCBpbiBzZWxmLmFjY2Vzc19yZXF1ZXN0czoKICAgIGJ5dGVjIDUgLy8gMHg2MTcyNWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9wZW5kaW5nX3JlcXVlc3RzX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxODUKICAgIC8vIGFyciA9IHNlbGYuYWNjZXNzX3JlcXVlc3RzW3BhdGllbnRdLmNvcHkoKQogICAgZHVwbiAyCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidXJ5IDkKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY2Vzc19yZXF1ZXN0cyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTg1LTE4NgogICAgLy8gYXJyID0gc2VsZi5hY2Nlc3NfcmVxdWVzdHNbcGF0aWVudF0uY29weSgpCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXJyLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTg2CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXJyLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAzCgpnZXRfcGVuZGluZ19yZXF1ZXN0c19mb3JfaGVhZGVyQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFyci5sZW5ndGgpOgogICAgZGlnIDIKICAgIGRpZyA0CiAgICA8CiAgICBieiBnZXRfcGVuZGluZ19yZXF1ZXN0c19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTg3CiAgICAvLyByZXEgPSBhcnJbaV0uY29weSgpCiAgICBkaWcgNgogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgMwogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgZHVwCiAgICBidXJ5IDEwCiAgICB1bmNvdmVyIDMKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTg3LTE4OAogICAgLy8gcmVxID0gYXJyW2ldLmNvcHkoKQogICAgLy8gaWYgcmVxLmlzX3BlbmRpbmcubmF0aXZlOgogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgcHVzaGludCA1MgogICAgKwogICAgaW50Y18yIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gaWYgcmVxLmlzX3BlbmRpbmcubmF0aXZlOgogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ6IGdldF9wZW5kaW5nX3JlcXVlc3RzX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxODkKICAgIC8vIHBlbmRpbmcuYXBwZW5kKHJlcS5jb3B5KCkpCiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyA0IC8vIDB4MDAwMgogICAgZGlnIDgKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgoKZ2V0X3BlbmRpbmdfcmVxdWVzdHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgZGlnIDQKICAgIGJ1cnkgMwogICAgYiBnZXRfcGVuZGluZ19yZXF1ZXN0c19mb3JfaGVhZGVyQDMKCmdldF9wZW5kaW5nX3JlcXVlc3RzX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDkgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnNlbnRfbWFuYWdlci5jb250cmFjdC5Db25zZW50TWFuYWdlci5hcHByb3ZlX3JlcXVlc3Rbcm91dGluZ10oKSAtPiB2b2lkOgphcHByb3ZlX3JlcXVlc3Q6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToxOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIwMgogICAgLy8gc2VuZGVyX2FkZHIgPSBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjAzCiAgICAvLyBhcnIgPSBzZWxmLmFjY2Vzc19yZXF1ZXN0c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICBieXRlYyA1IC8vIDB4NjE3MjVmCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIwMgogICAgLy8gc2VuZGVyX2FkZHIgPSBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjAzCiAgICAvLyBhcnIgPSBzZWxmLmFjY2Vzc19yZXF1ZXN0c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgYm94X2dldAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjZXNzX3JlcXVlc3RzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDQKICAgIC8vIGZvdW5kID0gYXJjNC5Cb29sKEZhbHNlKQogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIwNQogICAgLy8gZm91bmRfaWR4ID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDcKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnIubGVuZ3RoKToKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCgphcHByb3ZlX3JlcXVlc3RfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDcKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnIubGVuZ3RoKToKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGFwcHJvdmVfcmVxdWVzdF9hZnRlcl9mb3JAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDgtMjA5CiAgICAvLyByZXEgPSBhcnJbaV0uY29weSgpCiAgICAvLyBpZiByZXEuaWQgPT0gcmVxdWVzdF9pZCBhbmQgcmVxLmlzX3BlbmRpbmcubmF0aXZlOgogICAgaW50Y18xIC8vIDIKICAgIGRpZyAxCiAgICAqCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZHVwCiAgICBidXJ5IDE0CiAgICBkaWcgNgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDkKICAgIC8vIGlmIHJlcS5pZCA9PSByZXF1ZXN0X2lkIGFuZCByZXEuaXNfcGVuZGluZy5uYXRpdmU6CiAgICBkaWcgMTIKICAgIGI9PQogICAgYnogYXBwcm92ZV9yZXF1ZXN0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDgtMjA5CiAgICAvLyByZXEgPSBhcnJbaV0uY29weSgpCiAgICAvLyBpZiByZXEuaWQgPT0gcmVxdWVzdF9pZCBhbmQgcmVxLmlzX3BlbmRpbmcubmF0aXZlOgogICAgZGlnIDUKICAgIGR1cAogICAgZGlnIDE0CiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHB1c2hpbnQgNTIKICAgICsKICAgIGludGNfMiAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDkKICAgIC8vIGlmIHJlcS5pZCA9PSByZXF1ZXN0X2lkIGFuZCByZXEuaXNfcGVuZGluZy5uYXRpdmU6CiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnogYXBwcm92ZV9yZXF1ZXN0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMTAKICAgIC8vIGZvdW5kID0gYXJjNC5Cb29sKFRydWUpCiAgICBieXRlY18yIC8vIDB4ODAKICAgIGJ1cnkgNAogICAgZHVwCiAgICBidXJ5IDMKCmFwcHJvdmVfcmVxdWVzdF9hZnRlcl9mb3JAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjE0CiAgICAvLyBhc3NlcnQgZm91bmQubmF0aXZlLCAiUGVuZGluZyByZXF1ZXN0IG5vdCBmb3VuZCIKICAgIGRpZyAzCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gUGVuZGluZyByZXF1ZXN0IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMTYKICAgIC8vIHJlcSA9IGFycltmb3VuZF9pZHhdLmNvcHkoKQogICAgZGlnIDQKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDUKICAgIGR1cAogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGRpZyAzCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkaWcgMwogICAgZGlnIDEKICAgIC0gLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgNQogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgNgogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDQKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjE3CiAgICAvLyByZXEuaXNfcGVuZGluZyA9IGFyYzQuQm9vbChGYWxzZSkKICAgIHB1c2hpbnQgNDAwCiAgICBpbnRjXzAgLy8gMAogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIxOAogICAgLy8gYXJyW2ZvdW5kX2lkeF0gPSByZXEuY29weSgpCiAgICBkaWcgMQogICAgdW5jb3ZlciAzCiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIxOQogICAgLy8gc2VsZi5hY2Nlc3NfcmVxdWVzdHNbc2VuZGVyX2FkZHJdID0gYXJyLmNvcHkoKQogICAgZGlnIDcKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIyMQogICAgLy8gbm93ID0gb3AuR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjIyCiAgICAvLyBleHBpcnkgPSBub3cgKyBkdXJhdGlvbl9pbl9zZWNvbmRzLm5hdGl2ZQogICAgZGlnIDkKICAgIGJ0b2kKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIyNgogICAgLy8gZGF0YV9maWR1Y2lhcnk9cmVxLnByb3ZpZGVyLAogICAgZGlnIDIKICAgIGV4dHJhY3QgOCAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMjcKICAgIC8vIHB1cnBvc2U9cmVxLnB1cnBvc2UsCiAgICBkaWcgMwogICAgcHVzaGludCA0MAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyA0CiAgICBsZW4KICAgIHVuY292ZXIgNQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMzAKICAgIC8vIGdyYW50ZWRfYXQ9YXJjNC5VSW50NjQobm93KSwKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMzEKICAgIC8vIGV4cGlyeT1hcmM0LlVJbnQ2NChleHBpcnkpLAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIyNC0yMzQKICAgIC8vIG5ld19jb25zZW50ID0gQ29uc2VudCgKICAgIC8vICAgICBkYXRhX3ByaW5jaXBhbD1zZW5kZXJfYWRkciwKICAgIC8vICAgICBkYXRhX2ZpZHVjaWFyeT1yZXEucHJvdmlkZXIsCiAgICAvLyAgICAgcHVycG9zZT1yZXEucHVycG9zZSwKICAgIC8vICAgICBkYXRhX2hhc2g9ZGF0YV9oYXNoLAogICAgLy8gICAgIGRhdGFfc2NvcGU9ZGF0YV9zY29wZSwKICAgIC8vICAgICBncmFudGVkX2F0PWFyYzQuVUludDY0KG5vdyksCiAgICAvLyAgICAgZXhwaXJ5PWFyYzQuVUludDY0KGV4cGlyeSksCiAgICAvLyAgICAgaXNfYWN0aXZlPWFyYzQuQm9vbChUcnVlKSwKICAgIC8vICAgICBlcmFzZWQ9YXJjNC5Cb29sKEZhbHNlKSwKICAgIC8vICkKICAgIGRpZyAxMAogICAgZHVwCiAgICBjb3ZlciA1CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgYnl0ZWMgMTAgLy8gMHgwMDU3CiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBsZW4KICAgIHB1c2hpbnQgODcKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkaWcgMTUKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHg4MAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxMgogICAgY29uY2F0CiAgICBkaWcgMTAKICAgIGNvbmNhdAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMzYKICAgIC8vIGlmIHNlbmRlcl9hZGRyIGluIHNlbGYuY29uc2VudHM6CiAgICBieXRlY18xIC8vIDB4NjM1ZgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgMTYKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogYXBwcm92ZV9yZXF1ZXN0X2Vsc2VfYm9keUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMzcKICAgIC8vIGNfYXJyID0gc2VsZi5jb25zZW50c1tzZW5kZXJfYWRkcl0uY29weSgpCiAgICBkaWcgMTQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29uc2VudHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjIzOAogICAgLy8gY19hcnIuYXBwZW5kKG5ld19jb25zZW50LmNvcHkoKSkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMzkKICAgIC8vIHNlbGYuY29uc2VudHNbc2VuZGVyX2FkZHJdID0gY19hcnIuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphcHByb3ZlX3JlcXVlc3RfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MTkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCmFwcHJvdmVfcmVxdWVzdF9lbHNlX2JvZHlAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjI0MQogICAgLy8gY19hcnIgPSBhcmM0LkR5bmFtaWNBcnJheVtDb25zZW50XShuZXdfY29uc2VudC5jb3B5KCkpCiAgICBieXRlYyA3IC8vIDB4MDAwMTAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNDIKICAgIC8vIHNlbGYuY29uc2VudHNbc2VuZGVyX2FkZHJdID0gY19hcnIuY29weSgpCiAgICBkaWcgMTQKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIGFwcHJvdmVfcmVxdWVzdF9hZnRlcl9pZl9lbHNlQDExCgphcHByb3ZlX3JlcXVlc3RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyMDcKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnIubGVuZ3RoKToKICAgIGR1cAogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcHByb3ZlX3JlcXVlc3RfZm9yX2hlYWRlckAyCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnNlbnRfbWFuYWdlci5jb250cmFjdC5Db25zZW50TWFuYWdlci5yZWplY3RfcmVxdWVzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlamVjdF9yZXF1ZXN0OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNDcKICAgIC8vIGFyciA9IHNlbGYuYWNjZXNzX3JlcXVlc3RzW3NlbmRlcl9hZGRyXS5jb3B5KCkKICAgIGJ5dGVjIDUgLy8gMHg2MTcyNWYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjQ2CiAgICAvLyBzZW5kZXJfYWRkciA9IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNDcKICAgIC8vIGFyciA9IHNlbGYuYWNjZXNzX3JlcXVlc3RzW3NlbmRlcl9hZGRyXS5jb3B5KCkKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2Nlc3NfcmVxdWVzdHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjI0Ny0yNDgKICAgIC8vIGFyciA9IHNlbGYuYWNjZXNzX3JlcXVlc3RzW3NlbmRlcl9hZGRyXS5jb3B5KCkKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnIubGVuZ3RoKToKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjQ4CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXJyLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAoKcmVqZWN0X3JlcXVlc3RfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNDgKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnIubGVuZ3RoKToKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IHJlamVjdF9yZXF1ZXN0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjI0OQogICAgLy8gcmVxID0gYXJyW2ldLmNvcHkoKQogICAgZGlnIDIKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgMTAKICAgIGRpZyAyCiAgICBkdXAKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgZHVwCiAgICBidXJ5IDEyCiAgICB1bmNvdmVyIDQKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBidXJ5IDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjI0OS0yNTAKICAgIC8vIHJlcSA9IGFycltpXS5jb3B5KCkKICAgIC8vIGlmIHJlcS5pZCA9PSByZXF1ZXN0X2lkIGFuZCByZXEuaXNfcGVuZGluZy5uYXRpdmU6CiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGR1cAogICAgYnVyeSA3CiAgICBkaWcgNAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNTAKICAgIC8vIGlmIHJlcS5pZCA9PSByZXF1ZXN0X2lkIGFuZCByZXEuaXNfcGVuZGluZy5uYXRpdmU6CiAgICBkaWcgNQogICAgYj09CiAgICBieiByZWplY3RfcmVxdWVzdF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gcmVxID0gYXJyW2ldLmNvcHkoKQogICAgLy8gaWYgcmVxLmlkID09IHJlcXVlc3RfaWQgYW5kIHJlcS5pc19wZW5kaW5nLm5hdGl2ZToKICAgIGRpZyAzCiAgICBkdXAKICAgIGRpZyA3CiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHB1c2hpbnQgNTIKICAgICsKICAgIGludGNfMiAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNTAKICAgIC8vIGlmIHJlcS5pZCA9PSByZXF1ZXN0X2lkIGFuZCByZXEuaXNfcGVuZGluZy5uYXRpdmU6CiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnogcmVqZWN0X3JlcXVlc3RfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29uc2VudF9tYW5hZ2VyL2NvbnRyYWN0LnB5OjI1MQogICAgLy8gcmVxLmlzX3BlbmRpbmcgPSBhcmM0LkJvb2woRmFsc2UpCiAgICBkaWcgOAogICAgcHVzaGludCA0MDAKICAgIGludGNfMCAvLyAwCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjUyCiAgICAvLyBhcnJbaV0gPSByZXEuY29weSgpCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMTAKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlcGxhY2VfZHluYW1pY19lbGVtZW50CiAgICBidXJ5IDMKCnJlamVjdF9yZXF1ZXN0X2FmdGVyX2ZvckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnNlbnRfbWFuYWdlci9jb250cmFjdC5weToyNTQKICAgIC8vIHNlbGYuYWNjZXNzX3JlcXVlc3RzW3NlbmRlcl9hZGRyXSA9IGFyci5jb3B5KCkKICAgIGRpZyAzCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZGlnIDMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb25zZW50X21hbmFnZXIvY29udHJhY3QucHk6MjQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCnJlamVjdF9yZXF1ZXN0X2FmdGVyX2lmX2Vsc2VANjoKICAgIGRpZyA2CiAgICBidXJ5IDEKICAgIGIgcmVqZWN0X3JlcXVlc3RfZm9yX2hlYWRlckAyCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "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", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }