{ "name": "AlgoCdtStable", "structs": {}, "methods": [ { "name": "create_asa", "args": [ { "type": "string", "name": "name_" }, { "type": "string", "name": "symbol_" }, { "type": "uint64", "name": "decimals_" }, { "type": "uint64", "name": "cap_" }, { "type": "address", "name": "reserve_addr" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_asset", "args": [ { "type": "uint64", "name": "asset_id_" }, { "type": "address", "name": "reserve_addr_" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mint", "args": [ { "type": "address", "name": "to" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "burn", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "burn_from", "args": [ { "type": "address", "name": "account" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "transfer", "args": [ { "type": "address", "name": "to" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "transfer_from", "args": [ { "type": "address", "name": "from_" }, { "type": "address", "name": "to" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "approve", "args": [ { "type": "address", "name": "spender" }, { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "allowance", "args": [ { "type": "address", "name": "owner" }, { "type": "address", "name": "spender" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "balance_of", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "add_minter", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "remove_minter", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "is_minter", "args": [ { "type": "address", "name": "account" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_total_supply", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_cap", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_reserve", "args": [ { "type": "address", "name": "reserve_addr_" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 4, "bytes": 5 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfaWQ=" }, "name": { "keyType": "AVMString", "valueType": "AVMString", "key": "bmFtZQ==" }, "symbol": { "keyType": "AVMString", "valueType": "AVMString", "key": "c3ltYm9s" }, "decimals": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVjaW1hbHM=" }, "total_supply": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfc3VwcGx5" }, "cap": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y2Fw" }, "reserve_addr": { "keyType": "AVMString", "valueType": "address", "key": "cmVzZXJ2ZV9hZGRy" }, "allowances": { "keyType": "AVMString", "valueType": "(address,(address,uint64)[])[]", "key": "YWxsb3dhbmNlcw==" }, "minters": { "keyType": "AVMString", "valueType": "address[]", "key": "bWludGVycw==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 616 ], "errorMessage": "Burn amount exceeds allowance" }, { "pc": [ 516, 810, 856 ], "errorMessage": "Caller is not a minter" }, { "pc": [ 860 ], "errorMessage": "Cannot remove self" }, { "pc": [ 532 ], "errorMessage": "Cap exceeded" }, { "pc": [ 109 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 240 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 308 ], "errorMessage": "Only deployer can create ASA" }, { "pc": [ 465 ], "errorMessage": "Only deployer can set asset" }, { "pc": [ 997 ], "errorMessage": "Only deployer can set reserve" }, { "pc": [ 699 ], "errorMessage": "Transfer amount exceeds allowance" }, { "pc": [ 1191, 1210, 1279, 1426, 1660, 1675, 1736 ], "errorMessage": "check self.allowances exists" }, { "pc": [ 543, 1023, 1058 ], "errorMessage": "check self.asset_id exists" }, { "pc": [ 528, 975 ], "errorMessage": "check self.cap exists" }, { "pc": [ 820, 870, 1795 ], "errorMessage": "check self.minters exists" }, { "pc": [ 547, 1027 ], "errorMessage": "check self.reserve_addr exists" }, { "pc": [ 520, 962, 1009 ], "errorMessage": "check self.total_supply exists" }, { "pc": [ 891, 1125, 1151, 1240, 1289, 1618, 1705, 1752, 1817 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 248, 264, 872, 1100, 1193, 1217, 1282, 1596, 1662, 1682, 1743, 1797 ], "errorMessage": "invalid array length header" }, { "pc": [ 255, 271 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 302, 459, 500, 594, 642, 669, 677, 725, 752, 760, 778, 804, 850, 941, 991 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 283, 293, 450, 509, 577, 603, 651, 686, 734 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 91, 824, 906, 1174 ], "errorMessage": "max array length exceeded" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgMgogICAgYnl0ZWNibG9jayAiYWxsb3dhbmNlcyIgIm1pbnRlcnMiICJ0b3RhbF9zdXBwbHkiICJyZXNlcnZlX2FkZHIiICJhc3NldF9pZCIgMHgxNTFmN2M3NSAweDAwMDAgImNhcCIgMHgwMDIyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBzZWxmLmFsbG93YW5jZXMgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlR1cGxlW2FyYzQuQWRkcmVzcywgYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5UdXBsZVthcmM0LkFkZHJlc3MsIFVJbnQ2NF1dXV0oKQogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIGJ5dGVjIDYgLy8gMHgwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyOQogICAgLy8gc2VsZi5taW50ZXJzID0gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5BZGRyZXNzXSgpCiAgICBieXRlYyA2IC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTozMC0zMQogICAgLy8gIyBBZGQgZGVwbG95ZXIgYXMgaW5pdGlhbCBtaW50ZXIKICAgIC8vIHNlbGYubWludGVycy5hcHBlbmQoYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKQogICAgdHhuIFNlbmRlcgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBwdXNoYnl0ZXMgMHgwMDAxCiAgICByZXBsYWNlMiAwCiAgICBieXRlY18xIC8vICJtaW50ZXJzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQWxnb0NkdFN0YWJsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4MWEyZDViMmUgMHgxMjU5ZmVlMiAweDQ4MjBiNDc4IDB4N2YxZDQzZTEgMHhkODE4Y2U4YiAweDlmZWU3NDE4IDB4NTg5YmMzZmEgMHhlZTFkNThiMyAweDQ2N2JjN2E0IDB4OGE3Nzc4MzkgMHhlZDMwZDk2OCAweDQ4MGRmNzFhIDB4YTI2ZGIxYzQgMHg0NjkwOTM1NSAweGY0NWFiODhlIDB4YjFjOWJhYTQgLy8gbWV0aG9kICJjcmVhdGVfYXNhKHN0cmluZyxzdHJpbmcsdWludDY0LHVpbnQ2NCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAic2V0X2Fzc2V0KHVpbnQ2NCxhZGRyZXNzKXZvaWQiLCBtZXRob2QgIm1pbnQoYWRkcmVzcyx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYnVybih1aW50NjQpdm9pZCIsIG1ldGhvZCAiYnVybl9mcm9tKGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgInRyYW5zZmVyKGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgInRyYW5zZmVyX2Zyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhcHByb3ZlKGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgImFsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJiYWxhbmNlX29mKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhZGRfbWludGVyKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX21pbnRlcihhZGRyZXNzKXZvaWQiLCBtZXRob2QgImlzX21pbnRlcihhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldF90b3RhbF9zdXBwbHkoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2NhcCgpdWludDY0IiwgbWV0aG9kICJzZXRfcmVzZXJ2ZShhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVfYXNhIHNldF9hc3NldCBtaW50IGJ1cm4gYnVybl9mcm9tIHRyYW5zZmVyIHRyYW5zZmVyX2Zyb20gYXBwcm92ZSBhbGxvd2FuY2UgYmFsYW5jZV9vZiBhZGRfbWludGVyIHJlbW92ZV9taW50ZXIgaXNfbWludGVyIGdldF90b3RhbF9zdXBwbHkgZ2V0X2NhcCBzZXRfcmVzZXJ2ZQogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDI1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuY3JlYXRlX2FzYVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZV9hc2E6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQyLTQzCiAgICAvLyAjIE9ubHkgZGVwbG95ZXIgY2FuIGNyZWF0ZSBBU0EKICAgIC8vIGFzc2VydCBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MpLCAiT25seSBkZXBsb3llciBjYW4gY3JlYXRlIEFTQSIKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGRlcGxveWVyIGNhbiBjcmVhdGUgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBzZWxmLm5hbWUgPSBuYW1lXwogICAgcHVzaGJ5dGVzICJuYW1lIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBzZWxmLnN5bWJvbCA9IHN5bWJvbF8KICAgIHB1c2hieXRlcyAic3ltYm9sIgogICAgZGlnIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBzZWxmLmRlY2ltYWxzID0gZGVjaW1hbHNfCiAgICBwdXNoYnl0ZXMgImRlY2ltYWxzIgogICAgZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNhcCA9IGNhcF8KICAgIGJ5dGVjIDcgLy8gImNhcCIKICAgIGRpZyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSByZXNlcnZlX2FkZHIKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVfYWRkciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9zdXBwbHkgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo1Mi02NQogICAgLy8gIyBDcmVhdGUgQVNBIHdpdGggdG90YWwgPSBjYXAsIGNsYXdiYWNrID0gYXBwLCByZXNlcnZlID0gcmVzZXJ2ZV9hZGRyCiAgICAvLyByZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPWNhcF8sCiAgICAvLyAgICAgZGVjaW1hbHM9ZGVjaW1hbHNfLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgLy8gICAgIHVuaXRfbmFtZT1zeW1ib2xfLAogICAgLy8gICAgIGFzc2V0X25hbWU9bmFtZV8sCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9cmVzZXJ2ZV9hZGRyLm5hdGl2ZSwKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHVybD0iaHR0cHM6Ly9jYXNhZG90b2tlbi5jb20uYnIvIiwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo2NAogICAgLy8gZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NTkKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjYxLTYyCiAgICAvLyBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NjMKICAgIC8vIHVybD0iaHR0cHM6Ly9jYXNhZG90b2tlbi5jb20uYnIvIiwKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9jYXNhZG90b2tlbi5jb20uYnIvIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgdW5jb3ZlciA0CiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NTYKICAgIC8vIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgc3dhcAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjUyLTUzCiAgICAvLyAjIENyZWF0ZSBBU0Egd2l0aCB0b3RhbCA9IGNhcCwgY2xhd2JhY2sgPSBhcHAsIHJlc2VydmUgPSByZXNlcnZlX2FkZHIKICAgIC8vIHJlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NTItNjUKICAgIC8vICMgQ3JlYXRlIEFTQSB3aXRoIHRvdGFsID0gY2FwLCBjbGF3YmFjayA9IGFwcCwgcmVzZXJ2ZSA9IHJlc2VydmVfYWRkcgogICAgLy8gcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD1jYXBfLAogICAgLy8gICAgIGRlY2ltYWxzPWRlY2ltYWxzXywKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICB1bml0X25hbWU9c3ltYm9sXywKICAgIC8vICAgICBhc3NldF9uYW1lPW5hbWVfLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPXJlc2VydmVfYWRkci5uYXRpdmUsCiAgICAvLyAgICAgZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vY2FzYWRvdG9rZW4uY29tLmJyLyIsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjY3LTY4CiAgICAvLyAjIElEIGRvIEFTQSBjcmlhZG8gcGVsYSBpbm5lciB0eAogICAgLy8gc2VsZi5hc3NldF9pZCA9IHJlc3VsdC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyA0IC8vICJhc3NldF9pZCIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTozMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlYyA1IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLnNldF9hc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9hc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6NzIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojc0LTc1CiAgICAvLyAjIE9ubHkgZGVwbG95ZXIgY2FuIHNldCBhc3NldAogICAgLy8gYXNzZXJ0IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSA9PSBhcmM0LkFkZHJlc3MoR2xvYmFsLmNyZWF0b3JfYWRkcmVzcyksICJPbmx5IGRlcGxveWVyIGNhbiBzZXQgYXNzZXQiCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBkZXBsb3llciBjYW4gc2V0IGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBzZWxmLmFzc2V0X2lkID0gYXNzZXRfaWRfCiAgICBieXRlYyA0IC8vICJhc3NldF9pZCIKICAgIGRpZyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo3OAogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSByZXNlcnZlX2FkZHJfCiAgICBieXRlY18zIC8vICJyZXNlcnZlX2FkZHIiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo4MC04NQogICAgLy8gIyBSZWNvbmZpZ3VyZSBBU0EgKGV4LjogZ2FyYW50aXIgY2xhd2JhY2sgPSBhcHApCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldF9pZF8sCiAgICAvLyAgICAgY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo4NAogICAgLy8gZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6ODMKICAgIC8vIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjgwLTgxCiAgICAvLyAjIFJlY29uZmlndXJlIEFTQSAoZXguOiBnYXJhbnRpciBjbGF3YmFjayA9IGFwcCkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6ODAtODUKICAgIC8vICMgUmVjb25maWd1cmUgQVNBIChleC46IGdhcmFudGlyIGNsYXdiYWNrID0gYXBwKQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBjb25maWdfYXNzZXQ9YXNzZXRfaWRfLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjcyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUubWludFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1pbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo4OQogICAgLy8gYXNzZXJ0IHNlbGYuX2lzX21pbnRlcihhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikpLCAiQ2FsbGVyIGlzIG5vdCBhIG1pbnRlciIKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX2lzX21pbnRlcgogICAgYXNzZXJ0IC8vIENhbGxlciBpcyBub3QgYSBtaW50ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6OTQKICAgIC8vIGFzc2VydCBzZWxmLnRvdGFsX3N1cHBseSArIGFtb3VudCA8PSBzZWxmLmNhcCwgIkNhcCBleGNlZWRlZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9zdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfc3VwcGx5IGV4aXN0cwogICAgZGlnIDEKICAgICsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJjYXAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2FwIGV4aXN0cwogICAgZGlnIDEKICAgID49CiAgICBhc3NlcnQgLy8gQ2FwIGV4Y2VlZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBzZWxmLnRvdGFsX3N1cHBseSArPSBhbW91bnQKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3N1cHBseSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojk3LTEwNAogICAgLy8gIyBNaW50IHZpYSBjbGF3YmFjayB0cmFuc2ZlciBmcm9tIHJlc2VydmUgdG8gcmVjaXBpZW50CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPXNlbGYucmVzZXJ2ZV9hZGRyLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj10by5uYXRpdmUsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMDMKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsICAjIGltcG9ydGFudGUKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6OTkKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9pZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTAxCiAgICAvLyBhc3NldF9zZW5kZXI9c2VsZi5yZXNlcnZlX2FkZHIubmF0aXZlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXNlcnZlX2FkZHIgZXhpc3RzCiAgICB1bmNvdmVyIDQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weTo5Ny05OAogICAgLy8gIyBNaW50IHZpYSBjbGF3YmFjayB0cmFuc2ZlciBmcm9tIHJlc2VydmUgdG8gcmVjaXBpZW50CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5Ojk3LTEwNAogICAgLy8gIyBNaW50IHZpYSBjbGF3YmFjayB0cmFuc2ZlciBmcm9tIHJlc2VydmUgdG8gcmVjaXBpZW50CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPXNlbGYucmVzZXJ2ZV9hZGRyLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj10by5uYXRpdmUsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6ODcKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5idXJuW3JvdXRpbmddKCkgLT4gdm9pZDoKYnVybjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTA2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTA4CiAgICAvLyBzZWxmLl9idXJuKGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYW1vdW50KQogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgY2FsbHN1YiBfYnVybgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5idXJuX2Zyb21bcm91dGluZ10oKSAtPiB2b2lkOgpidXJuX2Zyb206CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTEyCiAgICAvLyBhbGxvd2FuY2UgPSBzZWxmLl9nZXRfYWxsb3dhbmNlKGFjY291bnQsIGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSkKICAgIGRpZyAxCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9nZXRfYWxsb3dhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExMwogICAgLy8gYXNzZXJ0IGFsbG93YW5jZSA+PSBhbW91bnQsICJCdXJuIGFtb3VudCBleGNlZWRzIGFsbG93YW5jZSIKICAgIGR1cAogICAgZGlnIDIKICAgID49CiAgICBhc3NlcnQgLy8gQnVybiBhbW91bnQgZXhjZWVkcyBhbGxvd2FuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTE0CiAgICAvLyBzZWxmLl9hcHByb3ZlKGFjY291bnQsIGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgYWxsb3dhbmNlIC0gYW1vdW50KQogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgZGlnIDIKICAgIC0KICAgIGRpZyAzCiAgICBjb3ZlciAyCiAgICBjYWxsc3ViIF9hcHByb3ZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExNQogICAgLy8gc2VsZi5fYnVybihhY2NvdW50LCBhbW91bnQpCiAgICBjYWxsc3ViIF9idXJuCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLnRyYW5zZmVyW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEzMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTMyCiAgICAvLyBzZWxmLl90cmFuc2ZlcihhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksIHRvLCBhbW91bnQpCiAgICB0eG4gU2VuZGVyCiAgICBjb3ZlciAyCiAgICBjYWxsc3ViIF90cmFuc2ZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMzAKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS50cmFuc2Zlcl9mcm9tW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJfZnJvbToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTM0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gYWxsb3dhbmNlID0gc2VsZi5fZ2V0X2FsbG93YW5jZShmcm9tXywgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKQogICAgZGlnIDIKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX2dldF9hbGxvd2FuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTM3CiAgICAvLyBhc3NlcnQgYWxsb3dhbmNlID49IGFtb3VudCwgIlRyYW5zZmVyIGFtb3VudCBleGNlZWRzIGFsbG93YW5jZSIKICAgIGR1cAogICAgZGlnIDIKICAgID49CiAgICBhc3NlcnQgLy8gVHJhbnNmZXIgYW1vdW50IGV4Y2VlZHMgYWxsb3dhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5fYXBwcm92ZShmcm9tXywgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLCBhbGxvd2FuY2UgLSBhbW91bnQpCiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBkaWcgMgogICAgLQogICAgZGlnIDQKICAgIGNvdmVyIDIKICAgIGNhbGxzdWIgX2FwcHJvdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTM5CiAgICAvLyBzZWxmLl90cmFuc2Zlcihmcm9tXywgdG8sIGFtb3VudCkKICAgIGNhbGxzdWIgX3RyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLmFwcHJvdmVbcm91dGluZ10oKSAtPiB2b2lkOgphcHByb3ZlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gc2VsZi5fYXBwcm92ZShhcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksIHNwZW5kZXIsIGFtb3VudCkKICAgIHR4biBTZW5kZXIKICAgIGNvdmVyIDIKICAgIGNhbGxzdWIgX2FwcHJvdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTUyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuYWxsb3dhbmNlW3JvdXRpbmddKCkgLT4gdm9pZDoKYWxsb3dhbmNlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTc4CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2FsbG93YW5jZShvd25lciwgc3BlbmRlcikKICAgIGNhbGxzdWIgX2dldF9hbGxvd2FuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTc2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjIDUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuYmFsYW5jZV9vZltyb3V0aW5nXSgpIC0+IHZvaWQ6CmJhbGFuY2Vfb2Y6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE5NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwMDAKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5hZGRfbWludGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkX21pbnRlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMDIKICAgIC8vIGFzc2VydCBzZWxmLl9pc19taW50ZXIoYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKSwgIkNhbGxlciBpcyBub3QgYSBtaW50ZXIiCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIGFzc2VydCAvLyBDYWxsZXIgaXMgbm90IGEgbWludGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gaWYgbm90IHNlbGYuX2lzX21pbnRlcihhY2NvdW50KToKICAgIGNhbGxzdWIgX2lzX21pbnRlcgogICAgYm56IGFkZF9taW50ZXJfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwNAogICAgLy8gc2VsZi5taW50ZXJzLmFwcGVuZChhY2NvdW50KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIm1pbnRlcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWludGVycyBleGlzdHMKICAgIGR1cAogICAgZGlnIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ5dGVjXzEgLy8gIm1pbnRlcnMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAoKYWRkX21pbnRlcl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLnJlbW92ZV9taW50ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVfbWludGVyOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjA2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMDgKICAgIC8vIGFzc2VydCBzZWxmLl9pc19taW50ZXIoYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpKSwgIkNhbGxlciBpcyBub3QgYSBtaW50ZXIiCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIGFzc2VydCAvLyBDYWxsZXIgaXMgbm90IGEgbWludGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIwOQogICAgLy8gYXNzZXJ0IGFjY291bnQgIT0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLCAiQ2Fubm90IHJlbW92ZSBzZWxmIgogICAgdHhuIFNlbmRlcgogICAgIT0KICAgIGFzc2VydCAvLyBDYW5ub3QgcmVtb3ZlIHNlbGYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjEwCiAgICAvLyBuZXdfbWludGVycyA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuQWRkcmVzc10oKQogICAgYnl0ZWMgNiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjExCiAgICAvLyBmb3IgbWludGVyIGluIHNlbGYubWludGVyczoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJtaW50ZXJzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5taW50ZXJzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpyZW1vdmVfbWludGVyX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjExCiAgICAvLyBmb3IgbWludGVyIGluIHNlbGYubWludGVyczoKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IHJlbW92ZV9taW50ZXJfYWZ0ZXJfZm9yQDcKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgYnVyeSA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIxMgogICAgLy8gaWYgbWludGVyICE9IGFjY291bnQ6CiAgICBkaWcgNQogICAgIT0KICAgIGJ6IHJlbW92ZV9taW50ZXJfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gbmV3X21pbnRlcnMuYXBwZW5kKG1pbnRlcikKICAgIGRpZyAzCiAgICBkdXAKICAgIGRpZyA3CiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDQKCnJlbW92ZV9taW50ZXJfYWZ0ZXJfaWZfZWxzZUA1OgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHJlbW92ZV9taW50ZXJfZm9yX2hlYWRlckAyCgpyZW1vdmVfbWludGVyX2FmdGVyX2ZvckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMTQKICAgIC8vIHNlbGYubWludGVycyA9IG5ld19taW50ZXJzLmNvcHkoKQogICAgYnl0ZWNfMSAvLyAibWludGVycyIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5pc19taW50ZXJbcm91dGluZ10oKSAtPiB2b2lkOgppc19taW50ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjE4CiAgICAvLyByZXR1cm4gc2VsZi5faXNfbWludGVyKGFjY291bnQpCiAgICBjYWxsc3ViIF9pc19taW50ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjIDUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuZ2V0X3RvdGFsX3N1cHBseVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF90b3RhbF9zdXBwbHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIyOQogICAgLy8gcmV0dXJuIHNlbGYudG90YWxfc3VwcGx5CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfc3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3N1cHBseSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjI3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjIDUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuZ2V0X2NhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9jYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIzMwogICAgLy8gcmV0dXJuIHNlbGYuY2FwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiY2FwIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNhcCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjMxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGl0b2IKICAgIGJ5dGVjIDUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuc2V0X3Jlc2VydmVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfcmVzZXJ2ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjM1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMzctMjM4CiAgICAvLyAjIE9ubHkgZGVwbG95ZXIgY2FuIHNldCByZXNlcnZlCiAgICAvLyBhc3NlcnQgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpID09IGFyYzQuQWRkcmVzcyhHbG9iYWwuY3JlYXRvcl9hZGRyZXNzKSwgIk9ubHkgZGVwbG95ZXIgY2FuIHNldCByZXNlcnZlIgogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgZGVwbG95ZXIgY2FuIHNldCByZXNlcnZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIzOQogICAgLy8gc2VsZi5yZXNlcnZlX2FkZHIgPSByZXNlcnZlX2FkZHJfCiAgICBieXRlY18zIC8vICJyZXNlcnZlX2FkZHIiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMzUKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5fYnVybihhY2NvdW50OiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6Cl9idXJuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMTctMTE4CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9idXJuKHNlbGYsIGFjY291bnQ6IGFyYzQuQWRkcmVzcywgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTE5CiAgICAvLyBzZWxmLnRvdGFsX3N1cHBseSAtPSBhbW91bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9zdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfc3VwcGx5IGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBieXRlY18yIC8vICJ0b3RhbF9zdXBwbHkiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMjEtMTI4CiAgICAvLyAjIEJ1cm4gdmlhIGNsYXdiYWNrIHRyYW5zZmVyIGZyb20gYWNjb3VudCB0byByZXNlcnZlCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPWFjY291bnQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYucmVzZXJ2ZV9hZGRyLm5hdGl2ZSwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLCAgIyBpbXBvcnRhbnRlCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxMjMKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9pZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTI2CiAgICAvLyBhc3NldF9yZWNlaXZlcj1zZWxmLnJlc2VydmVfYWRkci5uYXRpdmUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZV9hZGRyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlc2VydmVfYWRkciBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjEyMS0xMjIKICAgIC8vICMgQnVybiB2aWEgY2xhd2JhY2sgdHJhbnNmZXIgZnJvbSBhY2NvdW50IHRvIHJlc2VydmUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTIxLTEyOAogICAgLy8gIyBCdXJuIHZpYSBjbGF3YmFjayB0cmFuc2ZlciBmcm9tIGFjY291bnQgdG8gcmVzZXJ2ZQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hY2NvdW50Lm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLnJlc2VydmVfYWRkci5uYXRpdmUsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5fdHJhbnNmZXIoZnJvbV86IGJ5dGVzLCB0bzogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgpfdHJhbnNmZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE0MS0xNDIKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX3RyYW5zZmVyKHNlbGYsIGZyb21fOiBhcmM0LkFkZHJlc3MsIHRvOiBhcmM0LkFkZHJlc3MsIGFtb3VudDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE0My0xNTAKICAgIC8vICMgVHJhbnNmZXLDqm5jaWEgdmlhIGNsYXdiYWNrIChvIGFwcCDDqSBvIGNsYXdiYWNrIGNvbmZpZ3VyYWRvIG5vIEFTQSkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9ZnJvbV8ubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXRvLm5hdGl2ZSwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLCAgIyBpbXBvcnRhbnRlCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE0OQogICAgLy8gZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNDUKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9pZCBleGlzdHMKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgQXNzZXRTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTQzLTE0NAogICAgLy8gIyBUcmFuc2ZlcsOqbmNpYSB2aWEgY2xhd2JhY2sgKG8gYXBwIMOpIG8gY2xhd2JhY2sgY29uZmlndXJhZG8gbm8gQVNBKQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNDMtMTUwCiAgICAvLyAjIFRyYW5zZmVyw6puY2lhIHZpYSBjbGF3YmFjayAobyBhcHAgw6kgbyBjbGF3YmFjayBjb25maWd1cmFkbyBubyBBU0EpCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPWZyb21fLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj10by5uYXRpdmUsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwgICMgaW1wb3J0YW50ZQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvX2NkdF9zdGFibGUuY29udHJhY3QuQWxnb0NkdFN0YWJsZS5fYXBwcm92ZShvd25lcjogYnl0ZXMsIHNwZW5kZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKX2FwcHJvdmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE1Ni0xNTcKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2FwcHJvdmUoc2VsZiwgb3duZXI6IGFyYzQuQWRkcmVzcywgc3BlbmRlcjogYXJjNC5BZGRyZXNzLCBhbW91bnQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwogICAgcHVzaGJ5dGVzICIiCiAgICBkdXBuIDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE1OC0xNTkKICAgIC8vICMgVXBkYXRlIGFsbG93YW5jZXMgaW4gc3RhdGUKICAgIC8vIG93bmVyX2FsbG93YW5jZXMgPSBzZWxmLl9nZXRfb3duZXJfYWxsb3dhbmNlcyhvd25lcikKICAgIGZyYW1lX2RpZyAtMwogICAgY2FsbHN1YiBfZ2V0X293bmVyX2FsbG93YW5jZXMKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjAKICAgIC8vIHNwZW5kZXJfZm91bmQgPSBGYWxzZQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTYxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2Uob3duZXJfYWxsb3dhbmNlcy5sZW5ndGgpOgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpfYXBwcm92ZV9mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKG93bmVyX2FsbG93YW5jZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAxOQogICAgZnJhbWVfZGlnIDE4CiAgICA8CiAgICBieiBfYXBwcm92ZV9hZnRlcl9mb3JANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjIKICAgIC8vIGlmIG93bmVyX2FsbG93YW5jZXNbaV1bMF0gPT0gc3BlbmRlcjoKICAgIGZyYW1lX2RpZyAxNgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxOQogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDUKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZXh0cmFjdCAwIDMyCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieiBfYXBwcm92ZV9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTYzCiAgICAvLyBvd25lcl9hbGxvd2FuY2VzW2ldID0gYXJjNC5UdXBsZSgoc3BlbmRlciwgYW1vdW50KSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyA1CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZnJhbWVfZGlnIDE2CiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjQKICAgIC8vIHNwZW5kZXJfZm91bmQgPSBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAxNwoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gaWYgbm90IHNwZW5kZXJfZm91bmQ6CiAgICBmcmFtZV9kaWcgMTcKICAgIGJueiBfYXBwcm92ZV9hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTY3CiAgICAvLyBvd25lcl9hbGxvd2FuY2VzLmFwcGVuZChhcmM0LlR1cGxlKChzcGVuZGVyLCBhbW91bnQpKSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxNgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGZyYW1lX2J1cnkgMTYKCl9hcHByb3ZlX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTY5LTE3MAogICAgLy8gIyBVcGRhdGUgdGhlIGFsbG93YW5jZXMgYXJyYXkKICAgIC8vIGZvciBpIGluIHVyYW5nZShzZWxmLmFsbG93YW5jZXMubGVuZ3RoKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFsbG93YW5jZXMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxOQoKX2FwcHJvdmVfZm9yX2hlYWRlckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNjktMTcwCiAgICAvLyAjIFVwZGF0ZSB0aGUgYWxsb3dhbmNlcyBhcnJheQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHNlbGYuYWxsb3dhbmNlcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDE5CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogX2FwcHJvdmVfYWZ0ZXJfZm9yQDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE3MQogICAgLy8gaWYgc2VsZi5hbGxvd2FuY2VzW2ldWzBdID09IG93bmVyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFsbG93YW5jZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWxsb3dhbmNlcyBleGlzdHMKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBmcmFtZV9kaWcgMTkKICAgIGR1cAogICAgaW50Y18zIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICBkaWcgMwogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNwogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgLSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgaW50Y18zIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSA4CiAgICBkaWcgNAogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDAgMzIKICAgIGZyYW1lX2RpZyAtMwogICAgPT0KICAgIGJ6IF9hcHByb3ZlX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTcyCiAgICAvLyBzZWxmLmFsbG93YW5jZXNbaV0gPSBhcmM0LlR1cGxlKChvd25lciwgb3duZXJfYWxsb3dhbmNlcy5jb3B5KCkpKQogICAgZnJhbWVfZGlnIC0zCiAgICBieXRlYyA4IC8vIDB4MDAyMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTYKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFsbG93YW5jZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWxsb3dhbmNlcyBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGZyYW1lX2RpZyAxOQogICAgZHVwCiAgICBjb3ZlciAzCiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgc3Vic3RyaW5nIDAgMgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDMKICAgIGJ0b2kKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGZyYW1lX2RpZyA4CiAgICBkdXAKICAgIGNvdmVyIDYKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICBkaWcgNAogICAgdW5jb3ZlciA2CiAgICAtCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDEKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGR1cAogICAgZGlnIDMKICAgIC0KICAgIGZyYW1lX2J1cnkgMTMKICAgIGRpZyA2CiAgICBsZW4KICAgIGZyYW1lX2J1cnkgMTIKICAgIGRpZyAzCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzdWJzdHJpbmczCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDIKICAgIGludGNfMyAvLyAyCiAgICAqCiAgICBmcmFtZV9idXJ5IDE1CiAgICBmcmFtZV9idXJ5IDExCgpfYXBwcm92ZV9mb3JfaGVhZGVyQDIzOgogICAgZnJhbWVfZGlnIDExCiAgICBmcmFtZV9kaWcgMTUKICAgIDwKICAgIGJ6IF9hcHByb3ZlX2FmdGVyX2ZvckAyNQogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgZnJhbWVfZGlnIDExCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMTIKICAgICsKICAgIGZyYW1lX2RpZyAxMwogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAyCiAgICBzd2FwCiAgICByZXBsYWNlMwogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAxMQogICAgYiBfYXBwcm92ZV9mb3JfaGVhZGVyQDIzCgpfYXBwcm92ZV9hZnRlcl9mb3JAMjU6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzIKICAgIC8vIHNlbGYuYWxsb3dhbmNlc1tpXSA9IGFyYzQuVHVwbGUoKG93bmVyLCBvd25lcl9hbGxvd2FuY2VzLmNvcHkoKSkpCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4KICAgIHJldHN1YgoKX2FwcHJvdmVfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIGZyYW1lX2RpZyA3CiAgICBmcmFtZV9idXJ5IDE5CiAgICBiIF9hcHByb3ZlX2Zvcl9oZWFkZXJAOQoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzQKICAgIC8vIHNlbGYuYWxsb3dhbmNlcy5hcHBlbmQoYXJjNC5UdXBsZSgob3duZXIsIG93bmVyX2FsbG93YW5jZXMpKSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFsbG93YW5jZXMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgIGJ5dGVjIDggLy8gMHgwMDIyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxNgogICAgY29uY2F0CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGZyYW1lX2J1cnkgOQogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcHVzaGJ5dGVzIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDIKICAgIHB1c2hieXRlcyAweAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSAxNAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTEKCl9hcHByb3ZlX2Zvcl9oZWFkZXJAMTY6CiAgICBmcmFtZV9kaWcgMTEKICAgIGZyYW1lX2RpZyAxNAogICAgPAogICAgYnogX2FwcHJvdmVfYWZ0ZXJfZm9yQDE4CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDExCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMTEKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckAxNgoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDE4OgogICAgZnJhbWVfZGlnIDAKICAgIGxlbgogICAgZnJhbWVfYnVyeSAxMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTEKCl9hcHByb3ZlX2Zvcl9oZWFkZXJAMTk6CiAgICBmcmFtZV9kaWcgMTEKICAgIGludGNfMyAvLyAyCiAgICA8CiAgICBieiBfYXBwcm92ZV9hZnRlcl9mb3JAMjEKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMTEKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAxMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMTEKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckAxOQoKX2FwcHJvdmVfYWZ0ZXJfZm9yQDIxOgogICAgZnJhbWVfZGlnIDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTc0CiAgICAvLyBzZWxmLmFsbG93YW5jZXMuYXBwZW5kKGFyYzQuVHVwbGUoKG93bmVyLCBvd25lcl9hbGxvd2FuY2VzKSkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMTQKICAgIGZyYW1lX2RpZyAxMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxNzQKICAgIC8vIHNlbGYuYWxsb3dhbmNlcy5hcHBlbmQoYXJjNC5UdXBsZSgob3duZXIsIG93bmVyX2FsbG93YW5jZXMpKSkKICAgIGJ5dGVjXzAgLy8gImFsbG93YW5jZXMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgpfYXBwcm92ZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKG93bmVyX2FsbG93YW5jZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAxOQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMTkKICAgIGIgX2FwcHJvdmVfZm9yX2hlYWRlckAxCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLl9nZXRfYWxsb3dhbmNlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IHVpbnQ2NDoKX2dldF9hbGxvd2FuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE4MC0xODEKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2dldF9hbGxvd2FuY2Uoc2VsZiwgb3duZXI6IGFyYzQuQWRkcmVzcywgc3BlbmRlcjogYXJjNC5BZGRyZXNzKSAtPiBVSW50NjQ6CiAgICBwcm90byAyIDEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gb3duZXJfYWxsb3dhbmNlcyA9IHNlbGYuX2dldF9vd25lcl9hbGxvd2FuY2VzKG93bmVyKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIF9nZXRfb3duZXJfYWxsb3dhbmNlcwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gZm9yIGFsbG93YW5jZSBpbiBvd25lcl9hbGxvd2FuY2VzOgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMCAvLyAwCgpfZ2V0X2FsbG93YW5jZV9mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gZm9yIGFsbG93YW5jZSBpbiBvd25lcl9hbGxvd2FuY2VzOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBfZ2V0X2FsbG93YW5jZV9hZnRlcl9mb3JANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxODMtMTg0CiAgICAvLyBmb3IgYWxsb3dhbmNlIGluIG93bmVyX2FsbG93YW5jZXM6CiAgICAvLyAgICAgaWYgYWxsb3dhbmNlWzBdID09IHNwZW5kZXI6CiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAzCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICAqCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTg0CiAgICAvLyBpZiBhbGxvd2FuY2VbMF0gPT0gc3BlbmRlcjoKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IF9nZXRfYWxsb3dhbmNlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxODUKICAgIC8vIHJldHVybiBhbGxvd2FuY2VbMV0KICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hbGxvd2FuY2VfYWZ0ZXJfaWZfZWxzZUA0OgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDMKICAgIGIgX2dldF9hbGxvd2FuY2VfZm9yX2hlYWRlckAxCgpfZ2V0X2FsbG93YW5jZV9hZnRlcl9mb3JANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTg2CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb19jZHRfc3RhYmxlLmNvbnRyYWN0LkFsZ29DZHRTdGFibGUuX2dldF9vd25lcl9hbGxvd2FuY2VzKG93bmVyOiBieXRlcykgLT4gYnl0ZXM6Cl9nZXRfb3duZXJfYWxsb3dhbmNlczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTg4LTE4OQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X293bmVyX2FsbG93YW5jZXMoc2VsZiwgb3duZXI6IGFyYzQuQWRkcmVzcykgLT4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5UdXBsZVthcmM0LkFkZHJlc3MsIFVJbnQ2NF1dOgogICAgcHJvdG8gMSAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxOTAKICAgIC8vIGZvciBpIGluIHVyYW5nZShzZWxmLmFsbG93YW5jZXMubGVuZ3RoKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFsbG93YW5jZXMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDAKCl9nZXRfb3duZXJfYWxsb3dhbmNlc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHNlbGYuYWxsb3dhbmNlcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBfZ2V0X293bmVyX2FsbG93YW5jZXNfYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MTkxCiAgICAvLyBpZiBzZWxmLmFsbG93YW5jZXNbaV1bMF0gPT0gb3duZXI6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWxsb3dhbmNlcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hbGxvd2FuY2VzIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGludGNfMyAvLyAyCiAgICAqCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgZGlnIDMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMCAzMgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogX2dldF9vd25lcl9hbGxvd2FuY2VzX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxOTIKICAgIC8vIHJldHVybiBzZWxmLmFsbG93YW5jZXNbaV1bMV0KICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhbGxvd2FuY2VzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFsbG93YW5jZXMgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgdW5jb3ZlciAzCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGZyYW1lX2RpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9nZXRfb3duZXJfYWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDQ6CiAgICBmcmFtZV9idXJ5IDMKICAgIGIgX2dldF9vd25lcl9hbGxvd2FuY2VzX2Zvcl9oZWFkZXJAMQoKX2dldF9vd25lcl9hbGxvd2FuY2VzX2FmdGVyX2ZvckA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToxOTMKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlR1cGxlW2FyYzQuQWRkcmVzcywgVUludDY0XV0oKQogICAgYnl0ZWMgNiAvLyAweDAwMDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29fY2R0X3N0YWJsZS5jb250cmFjdC5BbGdvQ2R0U3RhYmxlLl9pc19taW50ZXIoYWNjb3VudDogYnl0ZXMpIC0+IHVpbnQ2NDoKX2lzX21pbnRlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvX2NkdF9zdGFibGUvY29udHJhY3QucHk6MjIwLTIyMQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfaXNfbWludGVyKHNlbGYsIGFjY291bnQ6IGFyYzQuQWRkcmVzcykgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMjIKICAgIC8vIGZvciBtaW50ZXIgaW4gc2VsZi5taW50ZXJzOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIm1pbnRlcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1pbnRlcnMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDAKCl9pc19taW50ZXJfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMjIKICAgIC8vIGZvciBtaW50ZXIgaW4gc2VsZi5taW50ZXJzOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBfaXNfbWludGVyX2FmdGVyX2ZvckA2CiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gaWYgbWludGVyID09IGFjY291bnQ6CiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBfaXNfbWludGVyX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29fY2R0X3N0YWJsZS9jb250cmFjdC5weToyMjQKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9pc19taW50ZXJfYWZ0ZXJfaWZfZWxzZUA0OgogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgX2lzX21pbnRlcl9mb3JfaGVhZGVyQDEKCl9pc19taW50ZXJfYWZ0ZXJfZm9yQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb19jZHRfc3RhYmxlL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gcmV0dXJuIEZhbHNlCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAEgAiYJCmFsbG93YW5jZXMHbWludGVycwx0b3RhbF9zdXBwbHkMcmVzZXJ2ZV9hZGRyCGFzc2V0X2lkBBUffHUCAAADY2FwAgAiMRhAABIoJwZnJwYxAFCAAgABXAApTGcxG0EAfzEZFEQxGESCEAQaLVsuBBJZ/uIESCC0eAR/HUPhBNgYzosEn+50GARYm8P6BO4dWLMERnvHpASKd3g5BO0w2WgESA33GgSibbHEBEaQk1UE9Fq4jgSxybqkNhoAjhAACwDSAQUBUQFjAZMBrgHmAgECHAI0AmECvgLXAuMC8AAxGRQxGBQQRCNDNhoBSSJZJQhLARUSRFcCADYaAkkiWSUISwEVEkRXAgA2GgNJFYEIEkQXNhoESRWBCBJEFzYaBUkVJBJEMQAyCRJEgARuYW1lSwVngAZzeW1ib2xLBGeACGRlY2ltYWxzSwNnJwdLAmcrSwFnKiJnsTIAMgpHAoAbaHR0cHM6Ly9jYXNhZG90b2tlbi5jb20uYnIvsieyLLIrTwKyKrIpTwSyJk8DsiUisiRPArIjTLIigQOyELIBs7Q8JwRLAWcWJwVMULAjQzYaAUkVgQgSRBc2GgJJFSQSRDEAMgkSRCcESwJnK0xnsTIAMgqyLEyyIYEDshCyAbMjQzYaAUkVJBJENhoCSRWBCBJEFzEAiAT1RCIqZURLAQgiJwdlREsBD0QqTGexMgAiJwRlRCIrZURPBLIUshNPArISshGBBLIQsgGzI0M2GgFJFYEIEkQXMQBMiAGiI0M2GgFJFSQSRDYaAkkVgQgSRBdLATEAiAPNSUsCD0QxAExLAglLA04CiAHDiAFyI0M2GgFJFSQSRDYaAkkVgQgSRBcxAE4CiAGEI0M2GgFJFSQSRDYaAkkVJBJENhoDSRWBCBJEF0sCMQCIA3pJSwIPRDEATEsCCUsETgKIAXCIAUwjQzYaAUkVJBJENhoCSRWBCBJEFzEATgKIAVIjQzYaAUkVJBJENhoCSRUkEkSIAzUWJwVMULAjQzYaARUkEkSADBUffHUAAAAAAAAAALAjQzYaAUcCFSQSRDEAiAPPRIgDy0AAFiIpZURJSwJQTCJZIwgWVwYCXAApTGcjQyI2GgFHAhUkEkQxAIgDoUQxABNEJwYiKWVMSU8CRCJZIklLAgxBAC9LAlcCAEsBJAskWElFB0sFE0EAE0sDSUsHUEwiWSMIFlcGAlwARQRJIwhFAUL/yilLBGcjQzYaAUkVJBJEiANIgAEAIk8CVCcFTFCwI0MiKmVEFicFTFCwI0MiJwdlRBYnBUxQsCNDNhoBSRUkEkQxADIJEkQrTGcjQ4oCACIqZUSL/wkqTGexMgAiJwRlRCIrZUSyFIv+shOL/7ISshGBBLIQsgGziYoDALEyACInBGVEi/6yFIv9shOL/7ISshGBBLIQsgGziYoDACJHA4AARwuL/YgCK0kiTCJZIosTixIMQQAvixBXAgCLE4EoC0mMBYEoWFcAIIv+EkEBuYv/Fov+TFCLBSUIixBMTwJdjBAjjBGLEUAAGov/Fov+TFCLEElPAlBMIlkjCBZXBgJcAIwQIihlRCJZjAQijBOLE4sEDEEA2CIoZURJVwIATCJZixNJJQtJjAZLA0xZTCMISYwHTwJLAQlLAxVPAiULSYwISwRMWU8CTVJXACCL/RJBAJSL/ScIUIsQUCIoZURJIlmLE0lOAw1ESVEAAkmMAxdMVwIASYsGWUsBiwhJTgZZSwIVSwRPBgkjCUsBTwNPAk1JSwMJjA1LBhWMDEsDIk8EUk8GUE8DTwJPA1JQjAIlC4wPjAuLC4sPDEEAIIsCSYsLSU4DWYsMCIsNCRZXBgJLAkxdjAIlCIwLQv/YiwOLAlAoTGeJiweME0L/ICIoZUSL/ScIUIsQUEsBIllJTgOMCUxXAgCMAIACAAJMUIwCgACMASULjA4ijAuLC4sODEEAG4sAiwtJTgJZJQgWVwYCiwFMUIwBJQiMC0L/3YsAFYwKIowLiwslDEEAHIsCiwtJTgJZiwoIFlcGAosBTFCMASUIjAtC/92LCSMIFlcGAosBUIsAiw6LClJQiwJXAgBQKExniYsTIwiME0L+HYoCASKL/ogAOUkiWSKLA4sCDEEAKYsBVwIAiwOBKAuBKFhJjABXACCL/xJBAAeLACRbjACJiwMjCIwDQv/PIowAiYoBAYAASSIoZUQiWSKLA4sCDEEAbCIoZURJVwIATCJZiwNJJQtJjABLA0xZTCMISU4ETwJLAQlLAxVPAiULSYwBSwRMWU8CTVJXACCL/xJBACoiKGVESVcCAEwiWUsBiwBZTE8DCUsCFUsDiwFZTwJNUkkkWUsBFVKMAImMA0L/jCcGjACJigEBIillTElPAkQiWSKLAosBDEEAHosAVwIAiwIkCyRYi/8SQQAEI4wAiYsCIwiMAkL/2iKMAIk=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }