{ "name": "Pieout", "structs": { "GameRegister": [ { "name": "hosting_game", "type": "bool" }, { "name": "best_score", "type": "uint8" }, { "name": "game_id", "type": "uint64" }, { "name": "commit_rand_round", "type": "uint64" }, { "name": "expiry_round", "type": "uint64" } ], "GameState": [ { "name": "staking_finalized", "type": "bool" }, { "name": "quick_play_enabled", "type": "bool" }, { "name": "max_players", "type": "uint8" }, { "name": "active_players", "type": "uint8" }, { "name": "first_place_score", "type": "uint8" }, { "name": "second_place_score", "type": "uint8" }, { "name": "third_place_score", "type": "uint8" }, { "name": "top_score", "type": "uint8" }, { "name": "box_p_start_pos", "type": "uint16" }, { "name": "expiry_ts", "type": "uint64" }, { "name": "prize_pool", "type": "uint64" }, { "name": "admin_address", "type": "address" }, { "name": "first_place_address", "type": "address" }, { "name": "second_place_address", "type": "address" }, { "name": "third_place_address", "type": "address" }, { "name": "topscorer_address", "type": "address" } ], "GameTrophy": [ { "name": "asset_id", "type": "uint64" }, { "name": "ath_score", "type": "uint8" }, { "name": "ath_address", "type": "address" } ] }, "methods": [ { "name": "calc_single_box_cost", "args": [ { "type": "uint8", "name": "key_size" }, { "type": "uint16", "name": "value_size" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "read_gen_unix", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "does_box_game_trophy_exist", "args": [], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "does_box_game_register_exist", "args": [ { "type": "account", "name": "player" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "does_box_game_state_exist", "args": [ { "type": "uint64", "name": "game_id" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "read_box_game_players", "args": [ { "type": "uint64", "name": "game_id" } ], "returns": { "type": "address[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "generate", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mint_trophy", "args": [ { "type": "pay", "name": "box_t_pay" }, { "type": "pay", "name": "mint_pay" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claim_trophy", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_box_game_register", "args": [ { "type": "pay", "name": "box_r_pay" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "del_box_game_register_for_self", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "del_box_game_register_for_other", "args": [ { "type": "account", "name": "player" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "new_game", "args": [ { "type": "bool", "name": "quick_play_enabled" }, { "type": "uint64", "name": "max_players" }, { "type": "pay", "name": "box_s_pay" }, { "type": "pay", "name": "box_p_pay" }, { "type": "pay", "name": "stake_pay" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "join_game", "args": [ { "type": "uint64", "name": "game_id" }, { "type": "pay", "name": "stake_pay" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "game_live", "args": [ { "type": "uint64", "name": "field1" }, { "type": "bool", "name": "field2" }, { "type": "uint64", "name": "field3" } ] } ], "recommendations": {} }, { "name": "set_game_commit", "args": [ { "type": "uint64", "name": "game_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "up_ref_budget_for_play_game", "args": [ { "type": "uint64", "name": "game_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "play_game", "args": [ { "type": "uint64", "name": "game_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "player_score", "args": [ { "type": "uint64", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint8", "name": "field3" } ] }, { "name": "game_over", "args": [ { "type": "uint64", "name": "field1" }, { "type": "uint8", "name": "field2" }, { "type": "uint8", "name": "field3" }, { "type": "uint8", "name": "field4" }, { "type": "address", "name": "field5" }, { "type": "address", "name": "field6" }, { "type": "address", "name": "field7" } ] } ], "recommendations": {} }, { "name": "trigger_game_event", "args": [ { "type": "uint64", "name": "game_id" }, { "type": "uint8", "name": "trigger_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "game_over", "args": [ { "type": "uint64", "name": "field1" }, { "type": "uint8", "name": "field2" }, { "type": "uint8", "name": "field3" }, { "type": "uint8", "name": "field4" }, { "type": "address", "name": "field5" }, { "type": "address", "name": "field6" }, { "type": "address", "name": "field7" } ] }, { "name": "game_live", "args": [ { "type": "uint64", "name": "field1" }, { "type": "bool", "name": "field2" }, { "type": "uint64", "name": "field3" } ] } ], "recommendations": {} }, { "name": "reset_game", "args": [ { "type": "uint64", "name": "game_id" }, { "type": "bool", "name": "change_quick_play" }, { "type": "bool", "name": "change_max_players" }, { "type": "uint64", "name": "new_max_players" }, { "type": "pay", "name": "stake_pay" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "delete_game", "args": [ { "type": "uint64", "name": "game_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "terminate", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "DeleteApplication" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "game_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Z2FtZV9pZA==" } }, "local": {}, "box": { "box_game_trophy": { "keyType": "AVMString", "valueType": "GameTrophy", "key": "dF8=" } } }, "maps": { "global": {}, "local": {}, "box": { "box_game_state": { "keyType": "uint64", "valueType": "GameState", "prefix": "c18=" }, "box_game_players": { "keyType": "uint64", "valueType": "AVMBytes", "prefix": "cF8=" }, "box_game_register": { "keyType": "address", "valueType": "GameRegister", "prefix": "cl8=" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 4726 ], "errorMessage": "Account is not authorized to make this call." }, { "pc": [ 3130, 3405 ], "errorMessage": "Account is not recognized as an active player for this game." }, { "pc": [ 4516 ], "errorMessage": "Account is not recognized as the admin address for this game." }, { "pc": [ 2097 ], "errorMessage": "Account must be opted in to asset in order to perform this action." }, { "pc": [ 1836, 5013 ], "errorMessage": "Account must match application creator address." }, { "pc": [ 3200, 3347 ], "errorMessage": "Application ID mismatch. App ID must be same across all transactions in group." }, { "pc": [ 2084 ], "errorMessage": "Asset trophy receiver must match application ATH address." }, { "pc": [ 1856, 2224 ], "errorMessage": "Box found. Ensure the box you are trying to access does not exist already." }, { "pc": [ 1749, 2896, 3090, 3193, 3327, 4303, 4482, 4700 ], "errorMessage": "Box game state not found. Check if game ID exists." }, { "pc": [ 2229, 2301, 2452, 2603, 2611, 2904, 2912, 3098, 3335, 3340 ], "errorMessage": "Box not found. Ensure the box you are trying to access was created and still exists." }, { "pc": [ 1882, 2253, 2733, 2741 ], "errorMessage": "Box payment receiver address must match application address." }, { "pc": [ 1874, 2245, 2709, 2717 ], "errorMessage": "Box payment sender address must match transaction sender address." }, { "pc": [ 2329, 2473, 3144 ], "errorMessage": "Commit Rand Round not empty. Value must be zero to obtain a valid one." }, { "pc": [ 4402 ], "errorMessage": "Conditions required to trigger this game event check were invalid." }, { "pc": [ 4749 ], "errorMessage": "Game admin address must be sole remaining active player in the game." }, { "pc": [ 4423 ], "errorMessage": "Game event not found. Check if game event Trigger ID exists" }, { "pc": [ 4527, 4985 ], "errorMessage": "Game lobby not empty. Number of active players must be zero." }, { "pc": [ 2318, 2467, 2628 ], "errorMessage": "Game register hosting game boolean value mismatch." }, { "pc": [ 2969, 3111, 3433, 4326, 4436 ], "errorMessage": "Game state staking finalized boolean value mismatch." }, { "pc": [ 827, 859, 874, 879, 943, 977, 996, 1134, 1139, 1144, 1149, 1159, 1169, 1224, 2078, 2972, 2982, 2987, 3138, 3434, 3861, 3884, 3890, 3896, 3902, 3919, 3928, 3946, 3959, 3987, 4194, 4217, 4223, 4247, 4336, 4368, 4438, 4510, 4707 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 1866, 2237, 2663, 2693 ], "errorMessage": "Insufficient funds. Box pay amount is not enough to cover application MBR." }, { "pc": [ 1890 ], "errorMessage": "Insufficient funds. Mint pay amount is not enough to cover asset creation cost." }, { "pc": [ 2655, 2921, 4506 ], "errorMessage": "Insufficient funds. Stake pay amount is not enough to cover staking requirements." }, { "pc": [ 3224, 3372, 3453 ], "errorMessage": "Invalid Game ID. Box Game Register Game ID must be a certain value or match Game ID arg." }, { "pc": [ 3181, 3309 ], "errorMessage": "Invalid group index. Ensure transaction group index matches the expected value. " }, { "pc": [ 1850, 2215, 2598, 2883, 3177, 3304, 4466 ], "errorMessage": "Invalid group size. Ensure number of transaction in group is within valid bounds." }, { "pc": [ 2071, 2293, 2443, 3077, 4290, 4686 ], "errorMessage": "Invalid group size. This app call can only take standalone transactions." }, { "pc": [ 2480, 2979, 3441, 4445 ], "errorMessage": "Invalid time frame. Call made outside the permitted block or timestamp range." }, { "pc": [ 1906 ], "errorMessage": "Mint payment receiver address must match application address." }, { "pc": [ 1898 ], "errorMessage": "Mint payment sender address must match transaction sender address." }, { "pc": [ 2991 ], "errorMessage": "Number of active players must not exceed number of max players." }, { "pc": [ 162 ], "errorMessage": "OnCompletion is not DeleteApplication" }, { "pc": [ 174, 190, 230, 249, 265, 281, 297, 323, 375, 393, 405, 427, 439, 471, 484, 505, 531, 559, 581, 598 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 2956 ], "errorMessage": "Player with this address must not be an active game participant in the game." }, { "pc": [ 3006 ], "errorMessage": "Players box start position index overflow. Can not store more addresses." }, { "pc": [ 4522, 4992 ], "errorMessage": "Prize pool not empty. Amount in prize pool must be zero." }, { "pc": [ 3466 ], "errorMessage": "Randomness commit round not reached yet." }, { "pc": [ 3207, 3354 ], "errorMessage": "Sender mismatch. Sender must be same address across all transactions in group." }, { "pc": [ 2725, 2937, 4498 ], "errorMessage": "Stake payment receiver address must match application address." }, { "pc": [ 2701, 2929, 4490 ], "errorMessage": "Stake payment sender address must match transaction sender address." }, { "pc": [ 5007 ], "errorMessage": "Template variable 'DELETABLE' needs to be 'True' at deploy-time." }, { "pc": [ 2646, 4647 ], "errorMessage": "The number of max players must be within bounds." }, { "pc": [ 3215, 3362 ], "errorMessage": "Transaction at this group index must have exact required method selector." }, { "pc": [ 3521 ], "errorMessage": "application log value is not the result of an ABI return" }, { "pc": [ 475 ], "errorMessage": "can only call when creating" }, { "pc": [ 165, 177, 193, 233, 252, 268, 284, 300, 326, 378, 396, 408, 430, 442, 487, 508, 534, 562, 584, 601 ], "errorMessage": "can only call when not creating" }, { "pc": [ 764, 1085 ], "errorMessage": "check BoxMap entry exists" }, { "pc": [ 1051 ], "errorMessage": "check BoxRef exists" }, { "pc": [ 1758 ], "errorMessage": "check self.box_game_players entry exists" }, { "pc": [ 2307, 2324, 2455, 2617, 2842, 3136, 3230, 3241, 3378, 3422, 3447, 3461, 3473, 4854 ], "errorMessage": "check self.box_game_register entry exists" }, { "pc": [ 2899, 3100, 3389, 3413, 4305, 4508, 4706 ], "errorMessage": "check self.box_game_state entry exists" }, { "pc": [ 2076, 3927, 3937, 3957, 3982, 4128, 5025, 5045 ], "errorMessage": "check self.box_game_trophy exists" }, { "pc": [ 2825 ], "errorMessage": "check self.game_id exists" }, { "pc": [ 2679, 2755, 3025, 3046, 3773, 4149, 4656, 4871 ], "errorMessage": "overflow" }, { "pc": [ 3172, 3299 ], "errorMessage": "transaction type is appl" }, { "pc": [ 221, 314, 346, 356, 366, 418, 452, 462 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "cblocks" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiAzMiAxMDAwMDAwIDEyMDAgMTAwMDAwIDI5NzAwIDYzNjQxMzYyMjM4NDY3OTMwMDUgMTQ0MjY5NTA0MDg4ODk2MzQwNyA0Mjk0OTY3Mjk1IDgwNTAwIDY1NTM1IFRNUExfR0VOX1VOSVggVE1QTF9ERUxFVEFCTEUKICAgIGJ5dGVjYmxvY2sgInJfIiAweDAwICJ0XyIgInBfIiAic18iIDB4MTUxZjdjNzUgMHgwMDAwMDAwMDAwMDAwMDAwIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAiZ2FtZV9pZCIgMHgwMDIwIDB4ZGJkZjRmNzcgMHgxYTc4OWVkMCAweDA2ODEwMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMS0zMgogICAgLy8gIyBTbWFydCBjb250cmFjdCBjbGFzcwogICAgLy8gY2xhc3MgUGllb3V0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZnRlcl9pZl9lbHNlQDI2CiAgICBwdXNoYnl0ZXNzIDB4NjMzM2NkOWQgMHhiNjZkMmY1NiAweDFkMjM2YTM3IDB4MDRiNzE2ZTEgMHhiYmZhOGUwMSAweGIxNmFhOTcxIDB4NWJlMjE5ZjAgMHhiMjQ2MGVmNiAweDNhZTc0Zjc0IDB4MWZhMDY1ZTkgMHhmNmM5MTI1MSAweGMxZGExYmI2IDB4MTI5Nzg0MTcgMHg3MWFmOTY2ZSAweGRjMzQ5NzA3IC8vIG1ldGhvZCAiY2FsY19zaW5nbGVfYm94X2Nvc3QodWludDgsdWludDE2KXVpbnQ2NCIsIG1ldGhvZCAicmVhZF9nZW5fdW5peCgpdWludDY0IiwgbWV0aG9kICJkb2VzX2JveF9nYW1lX3Ryb3BoeV9leGlzdCgpYm9vbCIsIG1ldGhvZCAiZG9lc19ib3hfZ2FtZV9yZWdpc3Rlcl9leGlzdChhY2NvdW50KWJvb2wiLCBtZXRob2QgImRvZXNfYm94X2dhbWVfc3RhdGVfZXhpc3QodWludDY0KWJvb2wiLCBtZXRob2QgInJlYWRfYm94X2dhbWVfcGxheWVycyh1aW50NjQpYWRkcmVzc1tdIiwgbWV0aG9kICJnZW5lcmF0ZSgpdm9pZCIsIG1ldGhvZCAibWludF90cm9waHkocGF5LHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV90cm9waHkoKXZvaWQiLCBtZXRob2QgImdldF9ib3hfZ2FtZV9yZWdpc3RlcihwYXkpdm9pZCIsIG1ldGhvZCAiZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmKCl2b2lkIiwgbWV0aG9kICJkZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX290aGVyKGFjY291bnQpdm9pZCIsIG1ldGhvZCAibmV3X2dhbWUoYm9vbCx1aW50NjQscGF5LHBheSxwYXkpdm9pZCIsIG1ldGhvZCAiam9pbl9nYW1lKHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAic2V0X2dhbWVfY29tbWl0KHVpbnQ2NCl2b2lkIgogICAgYnl0ZWMgMTAgLy8gbWV0aG9kICJ1cF9yZWZfYnVkZ2V0X2Zvcl9wbGF5X2dhbWUodWludDY0KXZvaWQiCiAgICBieXRlYyAxMSAvLyBtZXRob2QgInBsYXlfZ2FtZSh1aW50NjQpdm9pZCIKICAgIHB1c2hieXRlc3MgMHg5ZWVlOWMxOCAweDcxMGViYjhmIDB4MTg5OGEwMmUgMHg1ZmYxNmRhNCAvLyBtZXRob2QgInRyaWdnZXJfZ2FtZV9ldmVudCh1aW50NjQsdWludDgpdm9pZCIsIG1ldGhvZCAicmVzZXRfZ2FtZSh1aW50NjQsYm9vbCxib29sLHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAiZGVsZXRlX2dhbWUodWludDY0KXZvaWQiLCBtZXRob2QgInRlcm1pbmF0ZSgpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY2FsY19zaW5nbGVfYm94X2Nvc3Rfcm91dGVANSBtYWluX3JlYWRfZ2VuX3VuaXhfcm91dGVANiBtYWluX2RvZXNfYm94X2dhbWVfdHJvcGh5X2V4aXN0X3JvdXRlQDcgbWFpbl9kb2VzX2JveF9nYW1lX3JlZ2lzdGVyX2V4aXN0X3JvdXRlQDggbWFpbl9kb2VzX2JveF9nYW1lX3N0YXRlX2V4aXN0X3JvdXRlQDkgbWFpbl9yZWFkX2JveF9nYW1lX3BsYXllcnNfcm91dGVAMTAgbWFpbl9nZW5lcmF0ZV9yb3V0ZUAxMSBtYWluX21pbnRfdHJvcGh5X3JvdXRlQDEyIG1haW5fY2xhaW1fdHJvcGh5X3JvdXRlQDEzIG1haW5fZ2V0X2JveF9nYW1lX3JlZ2lzdGVyX3JvdXRlQDE0IG1haW5fZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmX3JvdXRlQDE1IG1haW5fZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9vdGhlcl9yb3V0ZUAxNiBtYWluX25ld19nYW1lX3JvdXRlQDE3IG1haW5fam9pbl9nYW1lX3JvdXRlQDE4IG1haW5fc2V0X2dhbWVfY29tbWl0X3JvdXRlQDE5IG1haW5fdXBfcmVmX2J1ZGdldF9mb3JfcGxheV9nYW1lX3JvdXRlQDIwIG1haW5fcGxheV9nYW1lX3JvdXRlQDIxIG1haW5fdHJpZ2dlcl9nYW1lX2V2ZW50X3JvdXRlQDIyIG1haW5fcmVzZXRfZ2FtZV9yb3V0ZUAyMyBtYWluX2RlbGV0ZV9nYW1lX3JvdXRlQDI0IG1haW5fdGVybWluYXRlX3JvdXRlQDI1CgptYWluX2FmdGVyX2lmX2Vsc2VAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdGVybWluYXRlX3JvdXRlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4MzAtODMxCiAgICAvLyAjIEFsbG93IGFwcGxpY2F0aW9uIGNyZWF0b3IgdG8gZGVsZXRlIHRoZSBzbWFydCBjb250cmFjdCBhcHBsaWNhdGlvbgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJEZWxldGVBcHBsaWNhdGlvbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXJtaW5hdGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2dhbWVfcm91dGVAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc2MS03NjIKICAgIC8vICMgQWxsb3cgYXBwbGljYXRpb24gY3JlYXRvciBvciBhZG1pbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgZ2FtZSBpbnN0YW5jZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzEtMzIKICAgIC8vICMgU21hcnQgY29udHJhY3QgY2xhc3MKICAgIC8vIGNsYXNzIFBpZW91dChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NjEtNzYyCiAgICAvLyAjIEFsbG93IGFwcGxpY2F0aW9uIGNyZWF0b3Igb3IgYWRtaW4gdG8gZGVsZXRlIGFuIGV4aXN0aW5nIGdhbWUgaW5zdGFuY2UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZWxldGVfZ2FtZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZXNldF9nYW1lX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2ODctNjg4CiAgICAvLyAjIEFsbG93IGFkbWluIHRvIHJlc2V0IGFuIGV4aXN0aW5nIGdhbWUgaW5zdGFuY2UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2ODctNjg4CiAgICAvLyAjIEFsbG93IGFkbWluIHRvIHJlc2V0IGFuIGV4aXN0aW5nIGdhbWUgaW5zdGFuY2UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiByZXNldF9nYW1lCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3RyaWdnZXJfZ2FtZV9ldmVudF9yb3V0ZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjA4LTYwOQogICAgLy8gIyBBbGxvdyBhbnkgdmFsaWQgYWNjb3VudCB0byBjaGVjayBhbmQgdHJpZ2dlciBnYW1lIGV2ZW50IHByb2dyZXNzaW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMS0zMgogICAgLy8gIyBTbWFydCBjb250cmFjdCBjbGFzcwogICAgLy8gY2xhc3MgUGllb3V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYwOC02MDkKICAgIC8vICMgQWxsb3cgYW55IHZhbGlkIGFjY291bnQgdG8gY2hlY2sgYW5kIHRyaWdnZXIgZ2FtZSBldmVudCBwcm9ncmVzc2lvbgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHRyaWdnZXJfZ2FtZV9ldmVudAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wbGF5X2dhbWVfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ3OS00ODAKICAgIC8vICMgUGxheSB0aGUgZ2FtZSwgcmVzb2x2ZSB0aGUgcGxheWVyJ3Mgc2NvcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnYW1lIGluc3RhbmNlLCB1cGRhdGUgZ2FtZSBzdGF0ZSBhY2NvcmRpbmdseQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzEtMzIKICAgIC8vICMgU21hcnQgY29udHJhY3QgY2xhc3MKICAgIC8vIGNsYXNzIFBpZW91dChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NzktNDgwCiAgICAvLyAjIFBsYXkgdGhlIGdhbWUsIHJlc29sdmUgdGhlIHBsYXllcidzIHNjb3JlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2FtZSBpbnN0YW5jZSwgdXBkYXRlIGdhbWUgc3RhdGUgYWNjb3JkaW5nbHkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBwbGF5X2dhbWUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdXBfcmVmX2J1ZGdldF9mb3JfcGxheV9nYW1lX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NTYtNDU3CiAgICAvLyAjIE1ha2UgYXBwIGNhbGwgdG8gYWRkIGV4dHJhIHJlc291cmNlIHJlZmVyZW5jZSBidWRnZXQsIG11c3QgYmUgZ3JvdXBlZCB3LyBwbGF5IGdhbWUgYWJpbWV0aG9kCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMS0zMgogICAgLy8gIyBTbWFydCBjb250cmFjdCBjbGFzcwogICAgLy8gY2xhc3MgUGllb3V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ1Ni00NTcKICAgIC8vICMgTWFrZSBhcHAgY2FsbCB0byBhZGQgZXh0cmEgcmVzb3VyY2UgcmVmZXJlbmNlIGJ1ZGdldCwgbXVzdCBiZSBncm91cGVkIHcvIHBsYXkgZ2FtZSBhYmltZXRob2QKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiB1cF9yZWZfYnVkZ2V0X2Zvcl9wbGF5X2dhbWUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2dhbWVfY29tbWl0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MTctNDE4CiAgICAvLyAjIFNldCBhIGNvbW1pdG1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2V0IG9uLWNoYWluIHJhbmRvbW5lc3MgYW5kIHBsYXkgdGhlIGdhbWUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDE3LTQxOAogICAgLy8gIyBTZXQgYSBjb21taXRtZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdldCBvbi1jaGFpbiByYW5kb21uZXNzIGFuZCBwbGF5IHRoZSBnYW1lCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2dhbWVfY29tbWl0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2pvaW5fZ2FtZV9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzQ5LTM1MAogICAgLy8gIyBKb2luIGV4aXN0aW5nIGdhbWUgaW5zdGFuY2UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNDktMzUwCiAgICAvLyAjIEpvaW4gZXhpc3RpbmcgZ2FtZSBpbnN0YW5jZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGpvaW5fZ2FtZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9uZXdfZ2FtZV9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjY2LTI2NwogICAgLy8gIyBDcmVhdGUgbmV3IGdhbWUgaW5zdGFuY2Ugd2l0aCB1bmlxdWUgSUQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDMgLy8gMwogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjY2LTI2NwogICAgLy8gIyBDcmVhdGUgbmV3IGdhbWUgaW5zdGFuY2Ugd2l0aCB1bmlxdWUgSUQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBuZXdfZ2FtZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX290aGVyX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMjktMjMwCiAgICAvLyAjIERlbGV0ZSB0aGUgZ2FtZSByZWdpc3RlciBib3ggZGF0YSBmb3IgYW5vdGhlciBhY2NvdW50CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMS0zMgogICAgLy8gIyBTbWFydCBjb250cmFjdCBjbGFzcwogICAgLy8gY2xhc3MgUGllb3V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMjktMjMwCiAgICAvLyAjIERlbGV0ZSB0aGUgZ2FtZSByZWdpc3RlciBib3ggZGF0YSBmb3IgYW5vdGhlciBhY2NvdW50CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9vdGhlcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX3NlbGZfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjIwNC0yMDUKICAgIC8vICMgRGVsZXRlIHRoZSBnYW1lIHJlZ2lzdGVyIGJveCBkYXRhIGZvciB0aGVpciBvd24gYWNjb3VudAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9ib3hfZ2FtZV9yZWdpc3Rlcl9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTgwLTE4MQogICAgLy8gIyBDcmVhdGUgYSBnYW1lIHJlZ2lzdGVyIGJveCB0aGF0IGlzIGEgcHJlcmVxdWlzdGUgdG8gaW50ZXJhY3Qgd2l0aCBnYW1lLXJlbGF0ZWQgZmVhdHVyZXMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIENyZWF0ZSBhIGdhbWUgcmVnaXN0ZXIgYm94IHRoYXQgaXMgYSBwcmVyZXF1aXN0ZSB0byBpbnRlcmFjdCB3aXRoIGdhbWUtcmVsYXRlZCBmZWF0dXJlcwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGdldF9ib3hfZ2FtZV9yZWdpc3RlcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbGFpbV90cm9waHlfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE2MC0xNjEKICAgIC8vICMgQWxsb3cgYXRoIGFkZHJlc3MgdG8gY2xhaW0gdGhlIHRyb3BoeSBhbmQgYWRkIGl0IHRvIHRoZWlyIGFzc2V0IGJhbGFuY2UgdmlhIGFuIGFzc2V0IHRyYW5zZmVyIGlubmVyIHRyYW5zYWN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjbGFpbV90cm9waHkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWludF90cm9waHlfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjExMy0xMTQKICAgIC8vICMgQWxsb3cgYXBwIGNyZWF0b3IgdG8gbWludCBhIG9uZS10aW1lIE5GVCBhc3NldCB1c2VkIGFzIGEgdHJvcGh5IHRva2VuIHRvIGhvbm9yIHRoZSBhdGggYWRkcmVzcwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzEtMzIKICAgIC8vICMgU21hcnQgY29udHJhY3QgY2xhc3MKICAgIC8vIGNsYXNzIFBpZW91dChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTEzLTExNAogICAgLy8gIyBBbGxvdyBhcHAgY3JlYXRvciB0byBtaW50IGEgb25lLXRpbWUgTkZUIGFzc2V0IHVzZWQgYXMgYSB0cm9waHkgdG9rZW4gdG8gaG9ub3IgdGhlIGF0aCBhZGRyZXNzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgbWludF90cm9waHkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2VuZXJhdGVfcm91dGVAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjEwMi0xMDMKICAgIC8vICMgR2VuZXJhdGUgdGhlIHNtYXJ0IGNvbnRyYWN0IGFwcGxpY2F0aW9uIGNsaWVudAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBnZW5lcmF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkX2JveF9nYW1lX3BsYXllcnNfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc4LTc5CiAgICAvLyAjIFJFQUQtT05MWTogUmV0dXJuIGFuIGFycmF5IG9mIGFsbCBhY3RpdmUgcGxheWVycyBhdCB0aW1lIG9mIGNhbGwKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzgtNzkKICAgIC8vICMgUkVBRC1PTkxZOiBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIGFjdGl2ZSBwbGF5ZXJzIGF0IHRpbWUgb2YgY2FsbAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIHJlYWRfYm94X2dhbWVfcGxheWVycwogICAgYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kb2VzX2JveF9nYW1lX3N0YXRlX2V4aXN0X3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjczLTc0CiAgICAvLyAjIFJFQUQtT05MWTogUmV0dXJuIFRydWUgaWYgZ2FtZSBzdGF0ZSBib3ggZGF0YSBleGlzdHMsIGVsc2UgRmFsc2UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyAjIFNtYXJ0IGNvbnRyYWN0IGNsYXNzCiAgICAvLyBjbGFzcyBQaWVvdXQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzMtNzQKICAgIC8vICMgUkVBRC1PTkxZOiBSZXR1cm4gVHJ1ZSBpZiBnYW1lIHN0YXRlIGJveCBkYXRhIGV4aXN0cywgZWxzZSBGYWxzZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGRvZXNfYm94X2dhbWVfc3RhdGVfZXhpc3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlYyA1IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2RvZXNfYm94X2dhbWVfcmVnaXN0ZXJfZXhpc3Rfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjgtNjkKICAgIC8vICMgUkVBRC1PTkxZOiBSZXR1cm4gVHJ1ZSBpZiBnYW1lIHJlZ2lzdGVyIGJveCBkYXRhIGV4aXN0cywgZWxzZSBGYWxzZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzEtMzIKICAgIC8vICMgU21hcnQgY29udHJhY3QgY2xhc3MKICAgIC8vIGNsYXNzIFBpZW91dChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjgtNjkKICAgIC8vICMgUkVBRC1PTkxZOiBSZXR1cm4gVHJ1ZSBpZiBnYW1lIHJlZ2lzdGVyIGJveCBkYXRhIGV4aXN0cywgZWxzZSBGYWxzZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGRvZXNfYm94X2dhbWVfcmVnaXN0ZXJfZXhpc3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlYyA1IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2RvZXNfYm94X2dhbWVfdHJvcGh5X2V4aXN0X3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYzLTY0CiAgICAvLyAjIFJFQUQtT05MWTogUmV0dXJuIFRydWUgaWYgZ2FtZSB0cm9waHkgYm94IGRhdGEgZXhpc3RzLCBlbHNlIEZhbHNlCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBkb2VzX2JveF9nYW1lX3Ryb3BoeV9leGlzdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjIDUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZF9nZW5fdW5peF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1OC01OQogICAgLy8gIyBSRUFELU9OTFk6IFJldHVybiB0aGUgYXBwIGdlbmVzaXMgdGltZXN0YW1wIGluIFVuaXggZm9ybWF0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MQogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyW1VJbnQ2NF0oIkdFTl9VTklYIikKICAgIGludGMgMTMgLy8gVE1QTF9HRU5fVU5JWAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1OC01OQogICAgLy8gIyBSRUFELU9OTFk6IFJldHVybiB0aGUgYXBwIGdlbmVzaXMgdGltZXN0YW1wIGluIFVuaXggZm9ybWF0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGl0b2IKICAgIGJ5dGVjIDUgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY19zaW5nbGVfYm94X2Nvc3Rfcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDQtNDUKICAgIC8vICMgUkVBRC1PTkxZOiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gYmFsYW5jZSByZXF1aXJlbWVudCAoTUJSKSBjb3N0IGZvciBzdG9yaW5nIGEgc2luZ2xlIGJveCB1bml0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMS0zMgogICAgLy8gIyBTbWFydCBjb250cmFjdCBjbGFzcwogICAgLy8gY2xhc3MgUGllb3V0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ0LTQ1CiAgICAvLyAjIFJFQUQtT05MWTogQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIGJhbGFuY2UgcmVxdWlyZW1lbnQgKE1CUikgY29zdCBmb3Igc3RvcmluZyBhIHNpbmdsZSBib3ggdW5pdAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGNhbGNfc2luZ2xlX2JveF9jb3N0CiAgICBpdG9iCiAgICBieXRlYyA1IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5zdWJyb3V0aW5lcy5wYXlvdXRfaXR4bihyZWNlaXZlcjogYnl0ZXMsIGFtb3VudDogdWludDY0LCBub3RlOiBieXRlcykgLT4gdm9pZDoKcGF5b3V0X2l0eG46CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjUyLTU0CiAgICAvLyAjIERlZmluZSBhIHBheW91dCBwYXltZW50IGlubmVyIHRyYW5zYWN0aW9uCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHBheW91dF9pdHhuKHJlY2VpdmVyOiBBY2NvdW50LCBhbW91bnQ6IFVJbnQ2NCwgbm90ZTogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjU1LTU5CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9cmVjZWl2ZXIsCiAgICAvLyAgICAgYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBub3RlPW5vdGUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgTm90ZQogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NTUtNTkKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICBhbW91bnQ9YW1vdW50LAogICAgLy8gICAgIG5vdGU9bm90ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LnN1YnJvdXRpbmVzLnJlc29sdmVfcmVjZWl2ZXJfYnlfcHJpbyhhY2MxOiBieXRlcywgYWNjMjogYnl0ZXMsIGFjYzM6IGJ5dGVzKSAtPiBieXRlczoKcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo2Mi02OAogICAgLy8gIyBSZXNvbHZlIHJlY2lldmVyIGFjY291bnQgYWRkcmVzcyBieSBwcmlvcml0eQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8oCiAgICAvLyAgICAgYWNjMTogQWNjb3VudCwKICAgIC8vICAgICBhY2MyOiBBY2NvdW50LAogICAgLy8gICAgIGFjYzM6IEFjY291bnQsCiAgICAvLyApIC0+IEFjY291bnQ6CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NjkKICAgIC8vIGlmIGFjYzEgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyBhbmQgb3AuQWNjdFBhcmFtc0dldC5hY2N0X2JhbGFuY2UoYWNjMSlbMV06CiAgICBmcmFtZV9kaWcgLTMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IHJlc29sdmVfcmVjZWl2ZXJfYnlfcHJpb19lbHNlX2JvZHlAMwogICAgZnJhbWVfZGlnIC0zCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYnogcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjcwCiAgICAvLyByZXR1cm4gYWNjMQogICAgZnJhbWVfZGlnIC0zCiAgICByZXRzdWIKCnJlc29sdmVfcmVjZWl2ZXJfYnlfcHJpb19lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NzEKICAgIC8vIGVsaWYgYWNjMiAhPSBHbG9iYWwuemVyb19hZGRyZXNzIGFuZCBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfYmFsYW5jZShhY2MyKVsxXToKICAgIGZyYW1lX2RpZyAtMgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvX2Vsc2VfYm9keUA2CiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBieiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW9fZWxzZV9ib2R5QDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NzIKICAgIC8vIHJldHVybiBhY2MyCiAgICBmcmFtZV9kaWcgLTIKICAgIHJldHN1YgoKcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvX2Vsc2VfYm9keUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo3MwogICAgLy8gZWxpZiBhY2MzICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MgYW5kIG9wLkFjY3RQYXJhbXNHZXQuYWNjdF9iYWxhbmNlKGFjYzMpWzFdOgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW9fZWxzZV9ib2R5QDkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGJ6IHJlc29sdmVfcmVjZWl2ZXJfYnlfcHJpb19lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo3NAogICAgLy8gcmV0dXJuIGFjYzMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgpyZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW9fZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5Ojc2CiAgICAvLyBUeG4uc2VuZGVyICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NzYtNzcKICAgIC8vIFR4bi5zZW5kZXIgIT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgLy8gYW5kIG9wLkFjY3RQYXJhbXNHZXQuYWNjdF9iYWxhbmNlKFR4bi5zZW5kZXIpWzFdCiAgICBieiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW9fZWxzZV9ib2R5QDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5Ojc3CiAgICAvLyBhbmQgb3AuQWNjdFBhcmFtc0dldC5hY2N0X2JhbGFuY2UoVHhuLnNlbmRlcilbMV0KICAgIHR4biBTZW5kZXIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5Ojc2LTc3CiAgICAvLyBUeG4uc2VuZGVyICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIC8vIGFuZCBvcC5BY2N0UGFyYW1zR2V0LmFjY3RfYmFsYW5jZShUeG4uc2VuZGVyKVsxXQogICAgYnogcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvX2Vsc2VfYm9keUAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo3OQogICAgLy8gcmV0dXJuIFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIHJldHN1YgoKcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvX2Vsc2VfYm9keUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6ODEKICAgIC8vIHJldHVybiBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5zdWJyb3V0aW5lcy5jaGVja19hY2NfaW5fZ2FtZShnYW1lX2lkOiB1aW50NjQsIGFjY291bnQ6IGJ5dGVzLCBib3hfZ2FtZV9wbGF5ZXJzOiBieXRlcywgcGxheWVyX2NvdW50OiB1aW50NjQsIGNsZWFyX3BsYXllcjogdWludDY0KSAtPiB1aW50NjQ6CmNoZWNrX2FjY19pbl9nYW1lOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo5Ni0xMDQKICAgIC8vICMgQ2hlY2sgaWYgYWNjb3VudCBpcyBhbiBhY3RpdmUgcGxheWVyIG9mIGEgZ2FtZQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBjaGVja19hY2NfaW5fZ2FtZSgKICAgIC8vICAgICBnYW1lX2lkOiBVSW50NjQsCiAgICAvLyAgICAgYWNjb3VudDogQWNjb3VudCwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzOiBCb3hNYXBbVUludDY0LCBCeXRlc10sCiAgICAvLyAgICAgcGxheWVyX2NvdW50OiBVSW50NjQsCiAgICAvLyAgICAgY2xlYXJfcGxheWVyOiBib29sLCAgIyBub3FhOiBGQlQwMDEKICAgIC8vICkgLT4gYm9vbDoKICAgIHByb3RvIDUgMQogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxMDUtMTA2CiAgICAvLyAjIENhbGN1bGF0ZSB0b3RhbCBieXRlIGxlbmd0aCB0byBpdGVyYXRlIG92ZXIgYmFzZWQgb24gcGxheWVyIGNvdW50IGFuZCBhZGRyZXNzIHNpemUKICAgIC8vIGdhbWVfcGxheWVyc19sZW5ndGggPSBwbGF5ZXJfY291bnQgKiBjc3QuQUREUkVTU19TSVpFCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMyAvLyAzMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxMDgtMTA5CiAgICAvLyAjIEluaXRpYWxpemUgZmxhZyB0byB0cmFjayBpZiBhY2NvdW50IGlzIGZvdW5kIGluIGdhbWUKICAgIC8vIGFjY19pbl9nYW1lID0gRmFsc2UKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjExMS0xMTIKICAgIC8vICMgSXRlcmF0ZSB0aHJvdWdoIHRoZSBwbGF5ZXIgYnl0ZSBhcnJheSBpbiAzMi1ieXRlIGNodW5rcyAob25lIGFkZHJlc3MgcGVyIGNodW5rKQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDAsIGdhbWVfcGxheWVyc19sZW5ndGgsIGNzdC5BRERSRVNTX1NJWkUpOgogICAgZHVwCgpjaGVja19hY2NfaW5fZ2FtZV9mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjExMS0xMTIKICAgIC8vICMgSXRlcmF0ZSB0aHJvdWdoIHRoZSBwbGF5ZXIgYnl0ZSBhcnJheSBpbiAzMi1ieXRlIGNodW5rcyAob25lIGFkZHJlc3MgcGVyIGNodW5rKQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDAsIGdhbWVfcGxheWVyc19sZW5ndGgsIGNzdC5BRERSRVNTX1NJWkUpOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAxCiAgICBieiBjaGVja19hY2NfaW5fZ2FtZV9hZnRlcl9mb3JAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxMTMtMTE0CiAgICAvLyAjIEV4dHJhY3QgdGhlIDMyLWJ5dGUgcGxheWVyIGFkZHJlc3MgYXQgc3RhcnQgaW5kZXggaQogICAgLy8gcGxheWVyX2FkZHJfYnl0ZXMgPSBvcC5leHRyYWN0KGJveF9nYW1lX3BsYXllcnNbZ2FtZV9pZF0sIGksIGNzdC5BRERSRVNTX1NJWkUpCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveE1hcCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzMgLy8gMzIKICAgIGV4dHJhY3QzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjExNi0xMTcKICAgIC8vICMgQ2hlY2sgaWYgdGhlIGV4dHJhY3RlZCBwbGF5ZXIgYWRkcmVzcyBieXRlcyBtYXRjaCB1cCB3aXRoIHRoZSBhY2NvdW50IGJ5dGVzCiAgICAvLyBpZiBhY2NvdW50LmJ5dGVzID09IHBsYXllcl9hZGRyX2J5dGVzOgogICAgZnJhbWVfZGlnIC00CiAgICA9PQogICAgYnogY2hlY2tfYWNjX2luX2dhbWVfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjExOAogICAgLy8gYWNjX2luX2dhbWUgPSBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjEyMC0xMjEKICAgIC8vICMgT3B0aW9uYWxseSBjbGVhciB0aGlzIHBsYXllciBmcm9tIHRoZSBib3ggYnkgcmVwbGFjaW5nIHRoZWlyIGFkZHJlc3Mgd2l0aCB6ZXJvIGJ5dGVzCiAgICAvLyBpZiBjbGVhcl9wbGF5ZXI6CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6IGNoZWNrX2FjY19pbl9nYW1lX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxMjUKICAgIC8vIGdhbWVfcGxheWVyc19icmVmLnJlcGxhY2UoaSwgY3N0LlpFUk9fQUREUl9CWVRFUykKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgNAogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9yZXBsYWNlCgpjaGVja19hY2NfaW5fZ2FtZV9hZnRlcl9pZl9lbHNlQDU6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAxCgpjaGVja19hY2NfaW5fZ2FtZV9hZnRlcl9mb3JAODoKICAgIGZyYW1lX2RpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjEzMC0xMzEKICAgIC8vICMgUmV0dXJuIFRydWUgaWYgYWNjb3VudCB3YXMgZm91bmQgaW4gdGhlIGdhbWUsIGVsc2UgRmFsc2UKICAgIC8vIHJldHVybiBhY2NfaW5fZ2FtZQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNoZWNrX2FjY19pbl9nYW1lX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTExLTExMgogICAgLy8gIyBJdGVyYXRlIHRocm91Z2ggdGhlIHBsYXllciBieXRlIGFycmF5IGluIDMyLWJ5dGUgY2h1bmtzIChvbmUgYWRkcmVzcyBwZXIgY2h1bmspCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMCwgZ2FtZV9wbGF5ZXJzX2xlbmd0aCwgY3N0LkFERFJFU1NfU0laRSk6CiAgICBmcmFtZV9kaWcgNAogICAgaW50Y18zIC8vIDMyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgY2hlY2tfYWNjX2luX2dhbWVfZm9yX2hlYWRlckAxCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5zdWJyb3V0aW5lcy5jYW5fcXVpY2tfcGxheShnYW1lX3N0YXRlOiBieXRlcykgLT4gdWludDY0LCBieXRlczoKY2FuX3F1aWNrX3BsYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIyMi0yMjQKICAgIC8vICMgQ2hlY2sgaWYgcXVpY2sgcGxheSBpcyBwZXJtaXR0ZWQsIHJldHVybiB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGFyZSBtZXQsIGVsc2UgZmFsc2UKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgY2FuX3F1aWNrX3BsYXkoZ2FtZV9zdGF0ZTogc3RjLkdhbWVTdGF0ZSkgLT4gYm9vbDoKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMjYKICAgIC8vIGdhbWVfc3RhdGUucXVpY2tfcGxheV9lbmFibGVkLm5hdGl2ZSAgIyBRdWljayBwbGF5IG1vZGUgbXVzdCBiZSBlbmFibGVkCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICBnZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIyNi0yMjgKICAgIC8vIGdhbWVfc3RhdGUucXVpY2tfcGxheV9lbmFibGVkLm5hdGl2ZSAgIyBRdWljayBwbGF5IG1vZGUgbXVzdCBiZSBlbmFibGVkCiAgICAvLyBhbmQgZ2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSA9PSBUeG4uc2VuZGVyICAjIFR4biBzZW5kZXIgbXVzdCBiZSBnYW1lIGluc3RhbmNlIGFkbWluCiAgICAvLyBhbmQgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgPiAxICAjIE1vcmUgdGhhbiAxIGFjdGl2ZSBwbGF5ZXIgaW4gZ2FtZSByZXF1aXJlZAogICAgYnogY2FuX3F1aWNrX3BsYXlfYm9vbF9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIyNwogICAgLy8gYW5kIGdhbWVfc3RhdGUuYWRtaW5fYWRkcmVzcy5uYXRpdmUgPT0gVHhuLnNlbmRlciAgIyBUeG4gc2VuZGVyIG11c3QgYmUgZ2FtZSBpbnN0YW5jZSBhZG1pbgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDI1IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjI2LTIyOAogICAgLy8gZ2FtZV9zdGF0ZS5xdWlja19wbGF5X2VuYWJsZWQubmF0aXZlICAjIFF1aWNrIHBsYXkgbW9kZSBtdXN0IGJlIGVuYWJsZWQKICAgIC8vIGFuZCBnYW1lX3N0YXRlLmFkbWluX2FkZHJlc3MubmF0aXZlID09IFR4bi5zZW5kZXIgICMgVHhuIHNlbmRlciBtdXN0IGJlIGdhbWUgaW5zdGFuY2UgYWRtaW4KICAgIC8vIGFuZCBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA+IDEgICMgTW9yZSB0aGFuIDEgYWN0aXZlIHBsYXllciBpbiBnYW1lIHJlcXVpcmVkCiAgICBieiBjYW5fcXVpY2tfcGxheV9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjI4CiAgICAvLyBhbmQgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgPiAxICAjIE1vcmUgdGhhbiAxIGFjdGl2ZSBwbGF5ZXIgaW4gZ2FtZSByZXF1aXJlZAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgZ2V0Ynl0ZQogICAgaW50Y18xIC8vIDEKICAgID4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjI2LTIyOAogICAgLy8gZ2FtZV9zdGF0ZS5xdWlja19wbGF5X2VuYWJsZWQubmF0aXZlICAjIFF1aWNrIHBsYXkgbW9kZSBtdXN0IGJlIGVuYWJsZWQKICAgIC8vIGFuZCBnYW1lX3N0YXRlLmFkbWluX2FkZHJlc3MubmF0aXZlID09IFR4bi5zZW5kZXIgICMgVHhuIHNlbmRlciBtdXN0IGJlIGdhbWUgaW5zdGFuY2UgYWRtaW4KICAgIC8vIGFuZCBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA+IDEgICMgTW9yZSB0aGFuIDEgYWN0aXZlIHBsYXllciBpbiBnYW1lIHJlcXVpcmVkCiAgICBieiBjYW5fcXVpY2tfcGxheV9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgpjYW5fcXVpY2tfcGxheV9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIyNS0yMjkKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS5xdWlja19wbGF5X2VuYWJsZWQubmF0aXZlICAjIFF1aWNrIHBsYXkgbW9kZSBtdXN0IGJlIGVuYWJsZWQKICAgIC8vICAgICBhbmQgZ2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSA9PSBUeG4uc2VuZGVyICAjIFR4biBzZW5kZXIgbXVzdCBiZSBnYW1lIGluc3RhbmNlIGFkbWluCiAgICAvLyAgICAgYW5kIGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMubmF0aXZlID4gMSAgIyBNb3JlIHRoYW4gMSBhY3RpdmUgcGxheWVyIGluIGdhbWUgcmVxdWlyZWQKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgpjYW5fcXVpY2tfcGxheV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBjYW5fcXVpY2tfcGxheV9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LnN1YnJvdXRpbmVzLmlzX2dhbWVfbGl2ZShnYW1lX2lkOiB1aW50NjQsIGdhbWVfc3RhdGU6IGJ5dGVzKSAtPiBieXRlczoKaXNfZ2FtZV9saXZlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMzItMjM0CiAgICAvLyAjIENoZWNrIGlmIGdhbWUgaXMgbGl2ZSBhbmQgZXhlY3V0ZSBpdHMgY29uZGl0aW9uYWwgbG9naWMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgaXNfZ2FtZV9saXZlKGdhbWVfaWQ6IFVJbnQ2NCwgZ2FtZV9zdGF0ZTogc3RjLkdhbWVTdGF0ZSkgLT4gTm9uZToKICAgIHByb3RvIDIgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjM3CiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cyA8IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICAjIElmIGRlYWRsaW5lIGV4cGlyZWQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA5IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpdG9iCiAgICBiPAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIzNy0yMzkKICAgIC8vIGdhbWVfc3RhdGUuZXhwaXJ5X3RzIDwgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgICMgSWYgZGVhZGxpbmUgZXhwaXJlZAogICAgLy8gb3IgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycyA9PSBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzICAjIElmIGxvYmJ5IGZ1bGwKICAgIC8vIG9yIGNhbl9xdWlja19wbGF5KGdhbWVfc3RhdGU9Z2FtZV9zdGF0ZSkgICMgSWYgcXVpY2sgcGxheSBjb25kaXRpb25zIGFyZSBtZXQKICAgIGJueiBpc19nYW1lX2xpdmVfaWZfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIzOAogICAgLy8gb3IgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycyA9PSBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzICAjIElmIGxvYmJ5IGZ1bGwKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMSAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYj09CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMzctMjM5CiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cyA8IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICAjIElmIGRlYWRsaW5lIGV4cGlyZWQKICAgIC8vIG9yIGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMgPT0gZ2FtZV9zdGF0ZS5tYXhfcGxheWVycyAgIyBJZiBsb2JieSBmdWxsCiAgICAvLyBvciBjYW5fcXVpY2tfcGxheShnYW1lX3N0YXRlPWdhbWVfc3RhdGUpICAjIElmIHF1aWNrIHBsYXkgY29uZGl0aW9ucyBhcmUgbWV0CiAgICBibnogaXNfZ2FtZV9saXZlX2lmX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMzkKICAgIC8vIG9yIGNhbl9xdWlja19wbGF5KGdhbWVfc3RhdGU9Z2FtZV9zdGF0ZSkgICMgSWYgcXVpY2sgcGxheSBjb25kaXRpb25zIGFyZSBtZXQKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBjYW5fcXVpY2tfcGxheQogICAgZHVwbiAyCiAgICBmcmFtZV9idXJ5IC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMzctMjM5CiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cyA8IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICAjIElmIGRlYWRsaW5lIGV4cGlyZWQKICAgIC8vIG9yIGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMgPT0gZ2FtZV9zdGF0ZS5tYXhfcGxheWVycyAgIyBJZiBsb2JieSBmdWxsCiAgICAvLyBvciBjYW5fcXVpY2tfcGxheShnYW1lX3N0YXRlPWdhbWVfc3RhdGUpICAjIElmIHF1aWNrIHBsYXkgY29uZGl0aW9ucyBhcmUgbWV0CiAgICBieiBpc19nYW1lX2xpdmVfYWZ0ZXJfaWZfZWxzZUAxMAoKaXNfZ2FtZV9saXZlX2lmX2JvZHlANToKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjQxLTI0MgogICAgLy8gIyBNYXJrIGpvaW4gcGhhc2UgYXMgY29tcGxldGUgd2hlbiBzdGFraW5nIGZpbmFsaXplZCBldmFsdWF0ZXMgVHJ1ZQogICAgLy8gZ2FtZV9zdGF0ZS5zdGFraW5nX2ZpbmFsaXplZCA9IGFyYzQuQm9vbChUcnVlKSAgIyBub3FhOiBGQlQwMDMKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgc2V0Yml0CiAgICBmcmFtZV9idXJ5IC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI0NgogICAgLy8gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBVSW50NjQoY3N0LlBIQVNFX0VYUElSWV9JTlRFUlZBTCkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGMgNSAvLyAxMjAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI0NC0yNDcKICAgIC8vICMgRXN0YWJsaXNoIGdhbWUgcGxheSB3aW5kb3cgYnkgc2V0dGluZyBleHBpcnkgdGltZXN0YW1wCiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICsgVUludDY0KGNzdC5QSEFTRV9FWFBJUllfSU5URVJWQUwpCiAgICAvLyApCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHJlcGxhY2UyIDkKICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjUyCiAgICAvLyBnYW1lX2lkLAogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI1MwogICAgLy8gZ2FtZV9zdGF0ZS5zdGFraW5nX2ZpbmFsaXplZCwKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjU0CiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cywKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA5IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI0OS0yNTUKICAgIC8vICMgRW1pdCBBUkMtMjggZXZlbnQgZm9yIG9mZi1jaGFpbiB0cmFja2luZwogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgICJnYW1lX2xpdmUodWludDY0LGJvb2wsdWludDY0KSIsCiAgICAvLyAgICAgZ2FtZV9pZCwKICAgIC8vICAgICBnYW1lX3N0YXRlLnN0YWtpbmdfZmluYWxpemVkLAogICAgLy8gICAgIGdhbWVfc3RhdGUuZXhwaXJ5X3RzLAogICAgLy8gKQogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDkzNjE3ZDI0IC8vIG1ldGhvZCAiZ2FtZV9saXZlKHVpbnQ2NCxib29sLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKCmlzX2dhbWVfbGl2ZV9hZnRlcl9pZl9lbHNlQDEwOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5zdWJyb3V0aW5lcy5pc19nYW1lX292ZXIoZ2FtZV9pZDogdWludDY0LCBnYW1lX3N0YXRlOiBieXRlcywgYm94X2dhbWVfcmVnaXN0ZXI6IGJ5dGVzLCBib3hfZ2FtZV9wbGF5ZXJzOiBieXRlcykgLT4gYnl0ZXM6CmlzX2dhbWVfb3ZlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjU3LTI2NAogICAgLy8gIyBDaGVjayBpZiBnYW1lIGlzIG92ZXIgYW5kIGV4ZWN1dGUgaXRzIGNvbmRpdGlvbmFsIGxvZ2ljCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGlzX2dhbWVfb3ZlcigKICAgIC8vICAgICBnYW1lX2lkOiBVSW50NjQsCiAgICAvLyAgICAgZ2FtZV9zdGF0ZTogc3RjLkdhbWVTdGF0ZSwKICAgIC8vICAgICBib3hfZ2FtZV9yZWdpc3RlcjogQm94TWFwW0FjY291bnQsIHN0Yy5HYW1lUmVnaXN0ZXJdLAogICAgLy8gICAgIGJveF9nYW1lX3BsYXllcnM6IEJveE1hcFtVSW50NjQsIEJ5dGVzXSwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDQgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gOQogICAgcHVzaGJ5dGVzICIiCiAgICBkdXBuIDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjY1LTI2NgogICAgLy8gIyBEZWZpbmUgZ2FtZSBvdmVyIGNyaXRlcmlhCiAgICAvLyBkZWFkbGluZV9leHBpcmVkID0gZ2FtZV9zdGF0ZS5leHBpcnlfdHMgPCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZnJhbWVfZGlnIC0zCiAgICBleHRyYWN0IDkgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGl0b2IKICAgIGI8CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI2NwogICAgLy8gbm9fYWN0aXZlX3BsYXllcnMgPSBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA9PSAwCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBnZXRieXRlCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjY5CiAgICAvLyBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA9PSAxCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjY5LTI3NgogICAgLy8gZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgPT0gMQogICAgLy8gYW5kIGNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PWdhbWVfc3RhdGUuYWRtaW5fYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgIHBsYXllcl9jb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKQogICAgYnogaXNfZ2FtZV9vdmVyX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyNzIKICAgIC8vIGFjY291bnQ9Z2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSwKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCAyNSAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjcwLTI3NgogICAgLy8gYW5kIGNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PWdhbWVfc3RhdGUuYWRtaW5fYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgIHBsYXllcl9jb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKQogICAgZnJhbWVfZGlnIC00CiAgICBzd2FwCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6Mjc0CiAgICAvLyBwbGF5ZXJfY291bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6Mjc1CiAgICAvLyBjbGVhcl9wbGF5ZXI9RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyNzAtMjc2CiAgICAvLyBhbmQgY2hlY2tfYWNjX2luX2dhbWUoCiAgICAvLyAgICAgZ2FtZV9pZD1nYW1lX2lkLAogICAgLy8gICAgIGFjY291bnQ9Z2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPWJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBjbGVhcl9wbGF5ZXI9RmFsc2UsCiAgICAvLyApCiAgICBjYWxsc3ViIGNoZWNrX2FjY19pbl9nYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI2OS0yNzYKICAgIC8vIGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMubmF0aXZlID09IDEKICAgIC8vIGFuZCBjaGVja19hY2NfaW5fZ2FtZSgKICAgIC8vICAgICBnYW1lX2lkPWdhbWVfaWQsCiAgICAvLyAgICAgYWNjb3VudD1nYW1lX3N0YXRlLmFkbWluX2FkZHJlc3MubmF0aXZlLAogICAgLy8gICAgIGJveF9nYW1lX3BsYXllcnM9Ym94X2dhbWVfcGxheWVycywKICAgIC8vICAgICBwbGF5ZXJfY291bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICkKICAgIGJ6IGlzX2dhbWVfb3Zlcl9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9idXJ5IDEwCgppc19nYW1lX292ZXJfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyNzktMjgwCiAgICAvLyAjIENoZWNrIGdhbWUgb3ZlciBjcml0ZXJpYQogICAgLy8gaWYgZGVhZGxpbmVfZXhwaXJlZCBvciBub19hY3RpdmVfcGxheWVycyBvciBhZG1pbl9vbmx5X3BsYXllcjoKICAgIGZyYW1lX2RpZyAxNgogICAgYm56IGlzX2dhbWVfb3Zlcl9pZl9ib2R5QDcKICAgIGZyYW1lX2RpZyAxNwogICAgYnogaXNfZ2FtZV9vdmVyX2lmX2JvZHlANwogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9idXJ5IDIKICAgIGZyYW1lX2RpZyAxMAogICAgYnogaXNfZ2FtZV9vdmVyX2FmdGVyX2lmX2Vsc2VAMzAKCmlzX2dhbWVfb3Zlcl9pZl9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI4MS0yODIKICAgIC8vICMgUmVzZXQgZ2FtZSByZWdpc3RlciBib3ggY29udGVudHMgZm9yIGFueSByZW1haW5pbmcgcGxheWVycwogICAgLy8gZ2FtZV9wbGF5ZXJzX2JyZWYgPSBCb3hSZWYoa2V5PWJveF9nYW1lX3BsYXllcnMua2V5X3ByZWZpeCArIG9wLml0b2IoZ2FtZV9pZCkpCiAgICBmcmFtZV9kaWcgLTQKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSA5CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjgzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMCwgZ2FtZV9wbGF5ZXJzX2JyZWYubGVuZ3RoLCAzMik6CiAgICBib3hfbGVuCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDE1CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94UmVmIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTIKCmlzX2dhbWVfb3Zlcl9mb3JfaGVhZGVyQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI4MwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDAsIGdhbWVfcGxheWVyc19icmVmLmxlbmd0aCwgMzIpOgogICAgZnJhbWVfZGlnIDEyCiAgICBmcmFtZV9kaWcgMTUKICAgIDwKICAgIGJ6IGlzX2dhbWVfb3Zlcl9hZnRlcl9mb3JAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6Mjg0CiAgICAvLyBwbGF5ZXJfYWRkcl9ieXRlcyA9IGdhbWVfcGxheWVyc19icmVmLmV4dHJhY3QoaSwgMzIpCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDEyCiAgICBpbnRjXzMgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyODUKICAgIC8vIGlmIHBsYXllcl9hZGRyX2J5dGVzICE9IEJ5dGVzKGNzdC5aRVJPX0FERFJfQllURVMpOgogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgICE9CiAgICBieiBpc19nYW1lX292ZXJfYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo5MQogICAgLy8gYm94X2dhbWVfcmVnaXN0ZXJbYWNjb3VudF0uZ2FtZV9pZCA9IGFyYzQuVUludDY0KDApCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveE1hcCBlbnRyeSBleGlzdHMKICAgIGJ5dGVjIDYgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjkyCiAgICAvLyBib3hfZ2FtZV9yZWdpc3RlclthY2NvdW50XS5jb21taXRfcmFuZF9yb3VuZCA9IGFyYzQuVUludDY0KDApCiAgICBieXRlYyA2IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6OTMKICAgIC8vIGJveF9nYW1lX3JlZ2lzdGVyW2FjY291bnRdLmV4cGlyeV9yb3VuZCA9IGFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCArIHJvdW5kX2RlbHRhKQogICAgZ2xvYmFsIFJvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI5MQogICAgLy8gcm91bmRfZGVsdGE9VUludDY0KGNzdC5CT1hfUl9FWFBfUk9VTkRfREVMVEEpLAogICAgaW50YyA2IC8vIDEwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTo5MwogICAgLy8gYm94X2dhbWVfcmVnaXN0ZXJbYWNjb3VudF0uZXhwaXJ5X3JvdW5kID0gYXJjNC5VSW50NjQoR2xvYmFsLnJvdW5kICsgcm91bmRfZGVsdGEpCiAgICArCiAgICBpdG9iCiAgICByZXBsYWNlMiAxOAogICAgYm94X3B1dAoKaXNfZ2FtZV9vdmVyX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI4MwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDAsIGdhbWVfcGxheWVyc19icmVmLmxlbmd0aCwgMzIpOgogICAgZnJhbWVfZGlnIDEyCiAgICBpbnRjXzMgLy8gMzIKICAgICsKICAgIGZyYW1lX2J1cnkgMTIKICAgIGIgaXNfZ2FtZV9vdmVyX2Zvcl9oZWFkZXJAOAoKaXNfZ2FtZV9vdmVyX2FmdGVyX2ZvckAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6Mjk2CiAgICAvLyBjc3QuQUREUkVTU19TSVpFICogZ2FtZV9zdGF0ZS5tYXhfcGxheWVycy5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMwogICAgaW50Y18xIC8vIDEKICAgIGdldGJ5dGUKICAgIGludGNfMyAvLyAzMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyOTQtMjk3CiAgICAvLyAjIENsZWFyIGJveCBnYW1lIHBsYXllcnMgZGF0YSBieSBzZXR0aW5nIGl0cyB2YWx1ZSB0byBhbGwgemVyb2VzCiAgICAvLyBib3hfZ2FtZV9wbGF5ZXJzW2dhbWVfaWRdID0gb3AuYnplcm8oCiAgICAvLyAgICAgY3N0LkFERFJFU1NfU0laRSAqIGdhbWVfc3RhdGUubWF4X3BsYXllcnMubmF0aXZlCiAgICAvLyApCiAgICBiemVybwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI5OS0zMDAKICAgIC8vICMgTWFyayBnYW1lIGFzIG92ZXIgYnkgc2V0dGluZyBhY3RpdmUgcGxheWVycyB0byB6ZXJvCiAgICAvLyBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzID0gYXJjNC5VSW50OCgwKQogICAgZnJhbWVfZGlnIC0zCiAgICBieXRlY18xIC8vIDB4MDAKICAgIHJlcGxhY2UyIDIKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMDYKICAgIC8vIGdhbWVfc3RhdGUuZmlyc3RfcGxhY2Vfc2NvcmUsCiAgICBleHRyYWN0IDMgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzA3CiAgICAvLyBnYW1lX3N0YXRlLnNlY29uZF9wbGFjZV9zY29yZSwKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCA0IDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMwOAogICAgLy8gZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9zY29yZSwKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCA1IDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMwOQogICAgLy8gZ2FtZV9zdGF0ZS5maXJzdF9wbGFjZV9hZGRyZXNzLAogICAgZnJhbWVfZGlnIC0zCiAgICBleHRyYWN0IDU3IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBjb3ZlciA0CiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzEwCiAgICAvLyBnYW1lX3N0YXRlLnNlY29uZF9wbGFjZV9hZGRyZXNzLAogICAgZnJhbWVfZGlnIC0zCiAgICBleHRyYWN0IDg5IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBjb3ZlciA1CiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzExCiAgICAvLyBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MsCiAgICBmcmFtZV9kaWcgLTMKICAgIGV4dHJhY3QgMTIxIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBjb3ZlciA2CiAgICBmcmFtZV9idXJ5IDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzAyLTMxMgogICAgLy8gIyBFbWl0IEFSQy0yOCBldmVudCBmb3Igb2ZmLWNoYWluIHRyYWNraW5nCiAgICAvLyBhcmM0LmVtaXQoCiAgICAvLyAgICAgImdhbWVfb3Zlcih1aW50NjQsdWludDgsdWludDgsdWludDgsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MpIiwKICAgIC8vICAgICBnYW1lX2lkLAogICAgLy8gICAgIGdhbWVfc3RhdGUuZmlyc3RfcGxhY2Vfc2NvcmUsCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2Vfc2NvcmUsCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9zY29yZSwKICAgIC8vICAgICBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX2FkZHJlc3MsCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2VfYWRkcmVzcywKICAgIC8vICAgICBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MsCiAgICAvLyApCiAgICBmcmFtZV9kaWcgOQogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDVmYTViZGQzIC8vIG1ldGhvZCAiZ2FtZV9vdmVyKHVpbnQ2NCx1aW50OCx1aW50OCx1aW50OCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcykiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMTQtMzE1CiAgICAvLyAjIElmIG9ubHkgMSBwbGF5ZXIgaW4gbG9iYnkgYWZ0ZXIgZ2FtZSBnb2VzIGxpdmUsIHRoZXkgZ2V0IGVudGlyZSBwcml6ZSBwb29sCiAgICAvLyBpZiBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlID09IGNzdC5TVEFLRV9BTU9VTlQ6CiAgICBmcmFtZV9kaWcgLTMKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMTEKICAgIGludGMgNCAvLyAxMDAwMDAwCiAgICA9PQogICAgYnogaXNfZ2FtZV9vdmVyX2Vsc2VfYm9keUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMTcKICAgIC8vIHNlY29uZF9wcml6ZV9zaGFyZSA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzE4CiAgICAvLyB0aGlyZF9wcml6ZV9zaGFyZSA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTQKCmlzX2dhbWVfb3Zlcl9hZnRlcl9pZl9lbHNlQDIxOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMzcKICAgIC8vIGFjYzI9Z2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSwKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCAyNSAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzM4CiAgICAvLyBhY2MzPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzM0LTMzOQogICAgLy8gIyBSZXNvbHZlIHByaXplIHBvb2wgd2luIHNoYXJlIHJlY2VpdmVycyBieSBwcmlvcml0eQogICAgLy8gZmlyc3RfcGxhY2VfcmVjZWl2ZXIgPSByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8oCiAgICAvLyAgICAgYWNjMT1nYW1lX3N0YXRlLmZpcnN0X3BsYWNlX2FkZHJlc3MubmF0aXZlLAogICAgLy8gICAgIGFjYzI9Z2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBhY2MzPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyApCiAgICBmcmFtZV9kaWcgNgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8KICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNDMKICAgIC8vIGFjYzM9R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNDAtMzQ0CiAgICAvLyBzZWNvbmRfcGxhY2VfcmVjZWl2ZXIgPSByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8oCiAgICAvLyAgICAgYWNjMT1nYW1lX3N0YXRlLnNlY29uZF9wbGFjZV9hZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBhY2MyPWdhbWVfc3RhdGUuYWRtaW5fYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgYWNjMz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gKQogICAgZnJhbWVfZGlnIDcKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgcmVzb2x2ZV9yZWNlaXZlcl9ieV9wcmlvCiAgICBmcmFtZV9idXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzQ4CiAgICAvLyBhY2MzPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzQ1LTM0OQogICAgLy8gdGhpcmRfcGxhY2VfcmVjZWl2ZXIgPSByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8oCiAgICAvLyAgICAgYWNjMT1nYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MubmF0aXZlLAogICAgLy8gICAgIGFjYzI9Z2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBhY2MzPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyApCiAgICBmcmFtZV9kaWcgOAogICAgY292ZXIgMgogICAgY2FsbHN1YiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8KICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNTEtMzUyCiAgICAvLyAjIElzc3VlIHByaXplIHBvb2wgc2hhcmUgcGF5b3V0cyB0byBmaXJzdCwgc2Vjb25kIGFuZCB0aGlyZCBwbGFjZSBhY2NvdW50cyBpZiB0aGVpciBzaGFyZSBpcyBub24temVybyBhbW91bnQKICAgIC8vIGlmIGZpcnN0X3ByaXplX3NoYXJlID4gVUludDY0KDApOgogICAgZnJhbWVfZGlnIDExCiAgICBieiBpc19nYW1lX292ZXJfYWZ0ZXJfaWZfZWxzZUAyMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNTMtMzU5CiAgICAvLyBwYXlvdXRfaXR4bigKICAgIC8vICAgICByZWNlaXZlcj1maXJzdF9wbGFjZV9yZWNlaXZlciwKICAgIC8vICAgICBhbW91bnQ9Zmlyc3RfcHJpemVfc2hhcmUsCiAgICAvLyAgICAgbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgICAgICdwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O2ZpcnN0X3ByaXplX3NoYXJlIn0nCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzU2LTM1OAogICAgLy8gbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgJ3BpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJpc19nYW1lX292ZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7Zmlyc3RfcHJpemVfc2hhcmUifScKICAgIC8vICksCiAgICBwdXNoYnl0ZXMgInBpZW91dDpqe1wibWV0aG9kXCI6XCJwbGF5X2dhbWVcIixcInN1YnJvdXRpbmU6XCJpc19nYW1lX292ZXJcIixcImNvbmNlcm5cIjpcIml0eG4ucGF5O2ZpcnN0X3ByaXplX3NoYXJlXCJ9IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNTMtMzU5CiAgICAvLyBwYXlvdXRfaXR4bigKICAgIC8vICAgICByZWNlaXZlcj1maXJzdF9wbGFjZV9yZWNlaXZlciwKICAgIC8vICAgICBhbW91bnQ9Zmlyc3RfcHJpemVfc2hhcmUsCiAgICAvLyAgICAgbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgICAgICdwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O2ZpcnN0X3ByaXplX3NoYXJlIn0nCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGNhbGxzdWIgcGF5b3V0X2l0eG4KCmlzX2dhbWVfb3Zlcl9hZnRlcl9pZl9lbHNlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNjAKICAgIC8vIGlmIHNlY29uZF9wcml6ZV9zaGFyZSA+IFVJbnQ2NCgwKToKICAgIGZyYW1lX2RpZyAxMwogICAgYnogaXNfZ2FtZV9vdmVyX2FmdGVyX2lmX2Vsc2VAMjUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzYxLTM2NwogICAgLy8gcGF5b3V0X2l0eG4oCiAgICAvLyAgICAgcmVjZWl2ZXI9c2Vjb25kX3BsYWNlX3JlY2VpdmVyLAogICAgLy8gICAgIGFtb3VudD1zZWNvbmRfcHJpemVfc2hhcmUsCiAgICAvLyAgICAgbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgICAgICdwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O3NlY29uZF9wcml6ZV9zaGFyZSJ9JwogICAgLy8gICAgICksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjM2NC0zNjYKICAgIC8vIG5vdGU9U3RyaW5nKAogICAgLy8gICAgICdwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O3NlY29uZF9wcml6ZV9zaGFyZSJ9JwogICAgLy8gKSwKICAgIHB1c2hieXRlcyAicGllb3V0Omp7XCJtZXRob2RcIjpcInBsYXlfZ2FtZVwiLFwic3Vicm91dGluZTpcImlzX2dhbWVfb3ZlclwiLFwiY29uY2VyblwiOlwiaXR4bi5wYXk7c2Vjb25kX3ByaXplX3NoYXJlXCJ9IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNjEtMzY3CiAgICAvLyBwYXlvdXRfaXR4bigKICAgIC8vICAgICByZWNlaXZlcj1zZWNvbmRfcGxhY2VfcmVjZWl2ZXIsCiAgICAvLyAgICAgYW1vdW50PXNlY29uZF9wcml6ZV9zaGFyZSwKICAgIC8vICAgICBub3RlPVN0cmluZygKICAgIC8vICAgICAgICAgJ3BpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJpc19nYW1lX292ZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7c2Vjb25kX3ByaXplX3NoYXJlIn0nCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGNhbGxzdWIgcGF5b3V0X2l0eG4KCmlzX2dhbWVfb3Zlcl9hZnRlcl9pZl9lbHNlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNjgKICAgIC8vIGlmIHRoaXJkX3ByaXplX3NoYXJlID4gVUludDY0KDApOgogICAgZnJhbWVfZGlnIDE0CiAgICBieiBpc19nYW1lX292ZXJfYWZ0ZXJfaWZfZWxzZUAyNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNjktMzc1CiAgICAvLyBwYXlvdXRfaXR4bigKICAgIC8vICAgICByZWNlaXZlcj10aGlyZF9wbGFjZV9yZWNlaXZlciwKICAgIC8vICAgICBhbW91bnQ9dGhpcmRfcHJpemVfc2hhcmUsCiAgICAvLyAgICAgbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgICAgICdwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O3RoaXJkX3ByaXplX3NoYXJlIn0nCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzcyLTM3NAogICAgLy8gbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgJ3BpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJpc19nYW1lX292ZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7dGhpcmRfcHJpemVfc2hhcmUifScKICAgIC8vICksCiAgICBwdXNoYnl0ZXMgInBpZW91dDpqe1wibWV0aG9kXCI6XCJwbGF5X2dhbWVcIixcInN1YnJvdXRpbmU6XCJpc19nYW1lX292ZXJcIixcImNvbmNlcm5cIjpcIml0eG4ucGF5O3RoaXJkX3ByaXplX3NoYXJlXCJ9IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNjktMzc1CiAgICAvLyBwYXlvdXRfaXR4bigKICAgIC8vICAgICByZWNlaXZlcj10aGlyZF9wbGFjZV9yZWNlaXZlciwKICAgIC8vICAgICBhbW91bnQ9dGhpcmRfcHJpemVfc2hhcmUsCiAgICAvLyAgICAgbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgICAgICdwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O3RoaXJkX3ByaXplX3NoYXJlIn0nCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGNhbGxzdWIgcGF5b3V0X2l0eG4KCmlzX2dhbWVfb3Zlcl9hZnRlcl9pZl9lbHNlQDI3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozNzctMzc4CiAgICAvLyAjIFNldCBwcml6ZSBwb29sIGFtb3VudCB0byB6ZXJvIGFmdGVyIG1ha2luZyBwYXlvdXRzCiAgICAvLyBnYW1lX3N0YXRlLnByaXplX3Bvb2wgPSBhcmM0LlVJbnQ2NCgwKQogICAgZnJhbWVfZGlnIC0zCiAgICBieXRlYyA2IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgcmVwbGFjZTIgMTcKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMwogICAgZnJhbWVfYnVyeSAyCgppc19nYW1lX292ZXJfYWZ0ZXJfaWZfZWxzZUAzMDoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKaXNfZ2FtZV9vdmVyX2Vsc2VfYm9keUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzE5LTMyMAogICAgLy8gIyBFbGlmLCBvbmx5IDIgcGxheWVycyBpbiBsb2JieSBhZnRlciBnYW1lIGdvZXMgbGl2ZSwgc3BsaXQgcHJpemUgcG9vbDogNjAlIC8gcmVtYWluZGVyIC8gMAogICAgLy8gZWxpZiBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlID09IDIgKiBjc3QuU1RBS0VfQU1PVU5UOgogICAgZnJhbWVfZGlnIDExCiAgICBwdXNoaW50IDIwMDAwMDAgLy8gMjAwMDAwMAogICAgPT0KICAgIGJ6IGlzX2dhbWVfb3Zlcl9lbHNlX2JvZHlAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MzIxCiAgICAvLyBmaXJzdF9wcml6ZV9zaGFyZSA9IGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgKiBVSW50NjQoNjApIC8vIFVJbnQ2NCgxMDApCiAgICBmcmFtZV9kaWcgMTEKICAgIGR1cAogICAgcHVzaGludCA2MCAvLyA2MAogICAgKgogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMyMgogICAgLy8gc2Vjb25kX3ByaXplX3NoYXJlID0gZ2FtZV9zdGF0ZS5wcml6ZV9wb29sLm5hdGl2ZSAtIGZpcnN0X3ByaXplX3NoYXJlCiAgICBzd2FwCiAgICBkaWcgMQogICAgLQogICAgZnJhbWVfYnVyeSAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMjMKICAgIC8vIHRoaXJkX3ByaXplX3NoYXJlID0gVUludDY0KDApICAjIE5vIHRoaXJkIHBsYXllcgogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTQKICAgIGZyYW1lX2J1cnkgMTEKICAgIGIgaXNfZ2FtZV9vdmVyX2FmdGVyX2lmX2Vsc2VAMjEKCmlzX2dhbWVfb3Zlcl9lbHNlX2JvZHlAMTk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMyNgogICAgLy8gZmlyc3RfcHJpemVfc2hhcmUgPSBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlICogVUludDY0KDUwKSAvLyBVSW50NjQoMTAwKQogICAgZnJhbWVfZGlnIDExCiAgICBkdXAKICAgIHB1c2hpbnQgNTAgLy8gNTAKICAgICoKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMjgKICAgIC8vIGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgKiBVSW50NjQoMzApIC8vIFVJbnQ2NCgxMDApCiAgICBkaWcgMQogICAgcHVzaGludCAzMCAvLyAzMAogICAgKgogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMyNy0zMjkKICAgIC8vIHNlY29uZF9wcml6ZV9zaGFyZSA9ICgKICAgIC8vICAgICBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlICogVUludDY0KDMwKSAvLyBVSW50NjQoMTAwKQogICAgLy8gKQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMzMQogICAgLy8gZ2FtZV9zdGF0ZS5wcml6ZV9wb29sLm5hdGl2ZSAtIGZpcnN0X3ByaXplX3NoYXJlIC0gc2Vjb25kX3ByaXplX3NoYXJlCiAgICB1bmNvdmVyIDIKICAgIGRpZyAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjMzMC0zMzIKICAgIC8vIHRoaXJkX3ByaXplX3NoYXJlID0gKAogICAgLy8gICAgIGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgLSBmaXJzdF9wcml6ZV9zaGFyZSAtIHNlY29uZF9wcml6ZV9zaGFyZQogICAgLy8gKQogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMzEKICAgIC8vIGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgLSBmaXJzdF9wcml6ZV9zaGFyZSAtIHNlY29uZF9wcml6ZV9zaGFyZQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weTozMzAtMzMyCiAgICAvLyB0aGlyZF9wcml6ZV9zaGFyZSA9ICgKICAgIC8vICAgICBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlIC0gZmlyc3RfcHJpemVfc2hhcmUgLSBzZWNvbmRfcHJpemVfc2hhcmUKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMTQKICAgIGZyYW1lX2J1cnkgMTEKICAgIGIgaXNfZ2FtZV9vdmVyX2FmdGVyX2lmX2Vsc2VAMjEKCmlzX2dhbWVfb3Zlcl9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxMAogICAgYiBpc19nYW1lX292ZXJfYm9vbF9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5jb250cmFjdC5QaWVvdXQuY2FsY19zaW5nbGVfYm94X2Nvc3Qoa2V5X3NpemU6IGJ5dGVzLCB2YWx1ZV9zaXplOiBieXRlcykgLT4gdWludDY0OgpjYWxjX3NpbmdsZV9ib3hfY29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDQtNDgKICAgIC8vICMgUkVBRC1PTkxZOiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gYmFsYW5jZSByZXF1aXJlbWVudCAoTUJSKSBjb3N0IGZvciBzdG9yaW5nIGEgc2luZ2xlIGJveCB1bml0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBjYWxjX3NpbmdsZV9ib3hfY29zdCgKICAgIC8vICAgICBzZWxmLCBrZXlfc2l6ZTogYXJjNC5VSW50OCwgdmFsdWVfc2l6ZTogYXJjNC5VSW50MTYKICAgIC8vICkgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUyCiAgICAvLyBrZXlfc2l6ZS5uYXRpdmUgKyB2YWx1ZV9zaXplLm5hdGl2ZQogICAgZnJhbWVfZGlnIC0yCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTEKICAgIC8vIHNpemVfY29zdCA9IGFyYzQuVUludDE2KDQwMCkubmF0aXZlICogKAogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUxLTUzCiAgICAvLyBzaXplX2Nvc3QgPSBhcmM0LlVJbnQxNig0MDApLm5hdGl2ZSAqICgKICAgIC8vICAgICBrZXlfc2l6ZS5uYXRpdmUgKyB2YWx1ZV9zaXplLm5hdGl2ZQogICAgLy8gKSAgIyBTaXplIGZlZSAoNDAwIHBlciBieXRlICogKGxlbihrZXkpK2xlbih2YWx1ZSkpKQogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1NS01NgogICAgLy8gIyBSZXR1cm4gc2luZ2xlIGJveCB0b3RhbCBjb3N0IGFtb3VudAogICAgLy8gcmV0dXJuIGJhc2VfY29zdC5uYXRpdmUgKyBzaXplX2Nvc3QKICAgIHB1c2hpbnQgMjUwMCAvLyAyNTAwCiAgICArCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC5kb2VzX2JveF9nYW1lX3Ryb3BoeV9leGlzdCgpIC0+IHVpbnQ2NDoKZG9lc19ib3hfZ2FtZV90cm9waHlfZXhpc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjY2CiAgICAvLyByZXR1cm4gc2VsZi5ib3hfZ2FtZV90cm9waHkubWF5YmUoKVsxXQogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBib3hfZ2V0CiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LmRvZXNfYm94X2dhbWVfcmVnaXN0ZXJfZXhpc3QocGxheWVyOiBieXRlcykgLT4gdWludDY0Ogpkb2VzX2JveF9nYW1lX3JlZ2lzdGVyX2V4aXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2OC03MAogICAgLy8gIyBSRUFELU9OTFk6IFJldHVybiBUcnVlIGlmIGdhbWUgcmVnaXN0ZXIgYm94IGRhdGEgZXhpc3RzLCBlbHNlIEZhbHNlCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBkb2VzX2JveF9nYW1lX3JlZ2lzdGVyX2V4aXN0KHNlbGYsIHBsYXllcjogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3MQogICAgLy8gcmV0dXJuIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIubWF5YmUoa2V5PXBsYXllcilbMV0KICAgIGJ5dGVjXzAgLy8gInJfIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5jb250cmFjdC5QaWVvdXQuZG9lc19ib3hfZ2FtZV9zdGF0ZV9leGlzdChnYW1lX2lkOiB1aW50NjQpIC0+IHVpbnQ2NDoKZG9lc19ib3hfZ2FtZV9zdGF0ZV9leGlzdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzMtNzUKICAgIC8vICMgUkVBRC1PTkxZOiBSZXR1cm4gVHJ1ZSBpZiBnYW1lIHN0YXRlIGJveCBkYXRhIGV4aXN0cywgZWxzZSBGYWxzZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZG9lc19ib3hfZ2FtZV9zdGF0ZV9leGlzdChzZWxmLCBnYW1lX2lkOiBVSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzYKICAgIC8vIHJldHVybiBzZWxmLmJveF9nYW1lX3N0YXRlLm1heWJlKGtleT1nYW1lX2lkKVsxXQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBieXRlYyA0IC8vICJzXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC5yZWFkX2JveF9nYW1lX3BsYXllcnMoZ2FtZV9pZDogdWludDY0KSAtPiBieXRlczoKcmVhZF9ib3hfZ2FtZV9wbGF5ZXJzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3OC04MAogICAgLy8gIyBSRUFELU9OTFk6IFJldHVybiBhbiBhcnJheSBvZiBhbGwgYWN0aXZlIHBsYXllcnMgYXQgdGltZSBvZiBjYWxsCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiByZWFkX2JveF9nYW1lX3BsYXllcnMoc2VsZiwgZ2FtZV9pZDogVUludDY0KSAtPiB0YS5HYW1lUGxheWVyc0FycjoKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4MS04MgogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgZ2FtZV9pZCBpbiBzZWxmLmJveF9nYW1lX3N0YXRlLCBlcnIuR0FNRV9JRF9OT1RfRk9VTkQKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAic18iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggZ2FtZSBzdGF0ZSBub3QgZm91bmQuIENoZWNrIGlmIGdhbWUgSUQgZXhpc3RzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NC04NQogICAgLy8gIyBSZXRyaWV2ZSBieXRlIGFycmF5IG9mIGN1cnJlbnQgcGxheWVyIGFkZHJlc3NlcyBmcm9tIHRoZSBib3ggdXNpbmcgdGhlIGdhbWUgaWQgcGFyYW1ldGVyCiAgICAvLyBwbGF5ZXJzX2JfYXJyID0gc2VsZi5ib3hfZ2FtZV9wbGF5ZXJzW2dhbWVfaWRdCiAgICBieXRlY18zIC8vICJwXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3BsYXllcnMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojg3LTg4CiAgICAvLyAjIERlZmluZSBhIGR5bmFtaWMgYXJyYXkgdG8gYXBwZW5kIGFsbCByZW1haW5pbmcgYWN0aXZlIHBsYXllcnMKICAgIC8vIGFjdGl2ZV9wbGF5ZXJzID0gdGEuR2FtZVBsYXllcnNBcnIoKQogICAgcHVzaGJ5dGVzIDB4MDAwMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo5MC05MQogICAgLy8gIyBJdGVyYXRlIHRocm91Z2ggdGhlIHBsYXllcnMgYnl0ZSBhcnJheQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDAsIHBsYXllcnNfYl9hcnIubGVuZ3RoLCBjc3QuQUREUkVTU19TSVpFKToKICAgIGxlbgogICAgaW50Y18wIC8vIDAKCnJlYWRfYm94X2dhbWVfcGxheWVyc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjkwLTkxCiAgICAvLyAjIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGxheWVycyBieXRlIGFycmF5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMCwgcGxheWVyc19iX2Fyci5sZW5ndGgsIGNzdC5BRERSRVNTX1NJWkUpOgogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyA0CiAgICA8CiAgICBieiByZWFkX2JveF9nYW1lX3BsYXllcnNfYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6OTItOTMKICAgIC8vICMgRXh0cmFjdCB0aGUgYnl0ZXMgcmVwcmVzZW50aW5nIHRoZSBwbGF5ZXIgYWRkcmVzcwogICAgLy8gcGxheWVyX2FkZHJfYnl0ZXMgPSBvcC5leHRyYWN0KHBsYXllcnNfYl9hcnIsIGksIGNzdC5BRERSRVNTX1NJWkUpCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojk0LTk1CiAgICAvLyAjIE9ubHkgYXBwZW5kIGFkZHJlc3MgaWYgaXRzIGJ5dGVzIGRvIE5PVCBlcXVhbCB0byBhIHplcm9lZCBieXRlIGFycmF5IG9mIHNpemUgMzIKICAgIC8vIGlmIHBsYXllcl9hZGRyX2J5dGVzICE9IEJ5dGVzKGNzdC5aRVJPX0FERFJfQllURVMpOgogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgICE9CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAwCiAgICBieiByZWFkX2JveF9nYW1lX3BsYXllcnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojk3CiAgICAvLyBhY3RpdmVfcGxheWVycy5hcHBlbmQoYXJjNC5BZGRyZXNzKHBsYXllcl9hY2NvdW50KSkKICAgIGZyYW1lX2RpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCgpyZWFkX2JveF9nYW1lX3BsYXllcnNfYWZ0ZXJfaWZfZWxzZUA0OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo5MC05MQogICAgLy8gIyBJdGVyYXRlIHRocm91Z2ggdGhlIHBsYXllcnMgYnl0ZSBhcnJheQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDAsIHBsYXllcnNfYl9hcnIubGVuZ3RoLCBjc3QuQUREUkVTU19TSVpFKToKICAgIGZyYW1lX2RpZyA1CiAgICBpbnRjXzMgLy8gMzIKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgYiByZWFkX2JveF9nYW1lX3BsYXllcnNfZm9yX2hlYWRlckAxCgpyZWFkX2JveF9nYW1lX3BsYXllcnNfYWZ0ZXJfZm9yQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojk5LTEwMAogICAgLy8gIyBSZXR1cm4gdGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyBhY3RpdmUgcGxheWVycwogICAgLy8gcmV0dXJuIGFjdGl2ZV9wbGF5ZXJzCiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC5nZW5lcmF0ZSgpIC0+IHZvaWQ6CmdlbmVyYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxMDctMTA4CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsIGVyci5JTlZBTElEX0NSRUFUT1IKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBBY2NvdW50IG11c3QgbWF0Y2ggYXBwbGljYXRpb24gY3JlYXRvciBhZGRyZXNzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxMTAtMTExCiAgICAvLyAjIFNldCBHbG9iYWwgU3RhdGUgdmFyaWFibGVzIHRvIHRoZWlyIGRlZmF1bHQgc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBzZWxmLmdhbWVfaWQgPSBVSW50NjQoMSkKICAgIGJ5dGVjIDggLy8gImdhbWVfaWQiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0Lm1pbnRfdHJvcGh5KGJveF90X3BheTogdWludDY0LCBtaW50X3BheTogdWludDY0KSAtPiB2b2lkOgptaW50X3Ryb3BoeToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTEzLTExOQogICAgLy8gIyBBbGxvdyBhcHAgY3JlYXRvciB0byBtaW50IGEgb25lLXRpbWUgTkZUIGFzc2V0IHVzZWQgYXMgYSB0cm9waHkgdG9rZW4gdG8gaG9ub3IgdGhlIGF0aCBhZGRyZXNzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtaW50X3Ryb3BoeSgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIGJveF90X3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24sCiAgICAvLyAgICAgbWludF9wYXk6IGd0eG4uUGF5bWVudFRyYW5zYWN0aW9uLAogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjEyMC0xMjEKICAgIC8vICMgRmFpbCB0cmFuc2FjdGlvbiB1bmxlc3MgdGhlIGFzc2VydGlvbiBiZWxvdyBldmFsdWF0ZXMgVHJ1ZQogICAgLy8gYXNzZXJ0IEdsb2JhbC5ncm91cF9zaXplID09IDMsIGVyci5JTlZBTElEX0dST1VQX1NJWkUKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgZ3JvdXAgc2l6ZS4gRW5zdXJlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBpbiBncm91cCBpcyB3aXRoaW4gdmFsaWQgYm91bmRzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5ib3hfZ2FtZV90cm9waHksIGVyci5CT1hfRk9VTkQKICAgIGJ5dGVjXzIgLy8gInRfIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQm94IGZvdW5kLiBFbnN1cmUgdGhlIGJveCB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3MgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTI0CiAgICAvLyBhc3NlcnQgYm94X3RfcGF5LmFtb3VudCA+PSBjc3QuQk9YX1RfQ09TVCwgZXJyLklOVkFMSURfQk9YX1BBWV9GRUUKICAgIGZyYW1lX2RpZyAtMgogICAgZ3R4bnMgQW1vdW50CiAgICBwdXNoaW50IDE5NzAwIC8vIDE5NzAwCiAgICA+PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBmdW5kcy4gQm94IHBheSBhbW91bnQgaXMgbm90IGVub3VnaCB0byBjb3ZlciBhcHBsaWNhdGlvbiBNQlIuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gYXNzZXJ0IGJveF90X3BheS5zZW5kZXIgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcywgZXJyLklOVkFMSURfQk9YX1BBWV9TRU5ERVIKICAgIGZyYW1lX2RpZyAtMgogICAgZ3R4bnMgU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQm94IHBheW1lbnQgc2VuZGVyIGFkZHJlc3MgbXVzdCBtYXRjaCB0cmFuc2FjdGlvbiBzZW5kZXIgYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTI3CiAgICAvLyBib3hfdF9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjEyNi0xMjgKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgYm94X3RfcGF5LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICksIGVyci5JTlZBTElEX0JPWF9QQVlfUkVDRUlWRVIKICAgIGFzc2VydCAvLyBCb3ggcGF5bWVudCByZWNlaXZlciBhZGRyZXNzIG11c3QgbWF0Y2ggYXBwbGljYXRpb24gYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTMxCiAgICAvLyBtaW50X3BheS5hbW91bnQgPj0gR2xvYmFsLmFzc2V0X2NyZWF0ZV9taW5fYmFsYW5jZQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBbW91bnQKICAgIGdsb2JhbCBBc3NldENyZWF0ZU1pbkJhbGFuY2UKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjEzMC0xMzIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgbWludF9wYXkuYW1vdW50ID49IEdsb2JhbC5hc3NldF9jcmVhdGVfbWluX2JhbGFuY2UKICAgIC8vICksIGVyci5JTlZBTElEX01JTlRfUEFZX0ZFRQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBmdW5kcy4gTWludCBwYXkgYW1vdW50IGlzIG5vdCBlbm91Z2ggdG8gY292ZXIgYXNzZXQgY3JlYXRpb24gY29zdC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTMzCiAgICAvLyBhc3NlcnQgbWludF9wYXkuc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsIGVyci5JTlZBTElEX01JTlRfUEFZX1NFTkRFUgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBNaW50IHBheW1lbnQgc2VuZGVyIGFkZHJlc3MgbXVzdCBtYXRjaCB0cmFuc2FjdGlvbiBzZW5kZXIgYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTM1CiAgICAvLyBtaW50X3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTM0LTEzNgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBtaW50X3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9NSU5UX1BBWV9SRUNFSVZFUgogICAgYXNzZXJ0IC8vIE1pbnQgcGF5bWVudCByZWNlaXZlciBhZGRyZXNzIG11c3QgbWF0Y2ggYXBwbGljYXRpb24gYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTM4LTE1MAogICAgLy8gIyBNaW50IGEgbmV3IHVuaXF1ZSBhc3NldCByZXByZXNlbnRpbmcgdGhlIGdhbWUgdHJvcGh5IGJ5IG1ha2luZyBhbiBhc3NldCBjb25maWcgaW5uZXIgdHJhbnNhY3Rpb24KICAgIC8vIGFjZmdfaXR4biA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MSwKICAgIC8vICAgICB1bml0X25hbWU9IlRSRlkiLAogICAgLy8gICAgIGFzc2V0X25hbWU9IlBpZW91dF9Ucm9waHkiLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIG5vdGU9YidwaWVvdXQ6ansibWV0aG9kIjoibWludF90cm9waHkiLCJjb25jZXJuIjoiaXR4bi5hc3NldF9jb25maWc7Y3JlYXRlX3Ryb3BoeV9hc3NldCJ9JywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNDYtMTQ4CiAgICAvLyByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTQ5CiAgICAvLyBub3RlPWIncGllb3V0Omp7Im1ldGhvZCI6Im1pbnRfdHJvcGh5IiwiY29uY2VybiI6Iml0eG4uYXNzZXRfY29uZmlnO2NyZWF0ZV90cm9waHlfYXNzZXQifScsCiAgICBwdXNoYnl0ZXMgMHg3MDY5NjU2Zjc1NzQzYTZhN2IyMjZkNjU3NDY4NmY2NDIyM2EyMjZkNjk2ZTc0NWY3NDcyNmY3MDY4NzkyMjJjMjI2MzZmNmU2MzY1NzI2ZTIyM2EyMjY5NzQ3ODZlMmU2MTczNzM2NTc0NWY2MzZmNmU2NjY5NjczYjYzNzI2NTYxNzQ2NTVmNzQ3MjZmNzA2ODc5NWY2MTczNzM2NTc0MjI3ZAogICAgaXR4bl9maWVsZCBOb3RlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNDQKICAgIC8vIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE0MwogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTQyCiAgICAvLyBhc3NldF9uYW1lPSJQaWVvdXRfVHJvcGh5IiwKICAgIHB1c2hieXRlcyAiUGllb3V0X1Ryb3BoeSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gdW5pdF9uYW1lPSJUUkZZIiwKICAgIHB1c2hieXRlcyAiVFJGWSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNDAKICAgIC8vIHRvdGFsPTEsCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjEzOC0xMzkKICAgIC8vICMgTWludCBhIG5ldyB1bmlxdWUgYXNzZXQgcmVwcmVzZW50aW5nIHRoZSBnYW1lIHRyb3BoeSBieSBtYWtpbmcgYW4gYXNzZXQgY29uZmlnIGlubmVyIHRyYW5zYWN0aW9uCiAgICAvLyBhY2ZnX2l0eG4gPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxMzgtMTUwCiAgICAvLyAjIE1pbnQgYSBuZXcgdW5pcXVlIGFzc2V0IHJlcHJlc2VudGluZyB0aGUgZ2FtZSB0cm9waHkgYnkgbWFraW5nIGFuIGFzc2V0IGNvbmZpZyBpbm5lciB0cmFuc2FjdGlvbgogICAgLy8gYWNmZ19pdHhuID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIHVuaXRfbmFtZT0iVFJGWSIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iUGllb3V0X1Ryb3BoeSIsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgbm90ZT1iJ3BpZW91dDpqeyJtZXRob2QiOiJtaW50X3Ryb3BoeSIsImNvbmNlcm4iOiJpdHhuLmFzc2V0X2NvbmZpZztjcmVhdGVfdHJvcGh5X2Fzc2V0In0nLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTUyLTE1MwogICAgLy8gIyBDcmVhdGUgdGhlIGdhbWUgdHJvcGh5IGJveCBhbmQgYXNzaWduIGl0cyBkZWZhdWx0IHN0YXJ0aW5nIHZhbHVlcwogICAgLy8gc2VsZi5ib3hfZ2FtZV90cm9waHkuY3JlYXRlKCkKICAgIGJ5dGVjXzIgLy8gInRfIgogICAgcHVzaGludCA0MSAvLyA0MQogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE1NQogICAgLy8gYXNzZXRfaWQ9YXJjNC5VSW50NjQoYWNmZ19pdHhuLmNyZWF0ZWRfYXNzZXQuaWQpLAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNTcKICAgIC8vIGF0aF9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNTQtMTU4CiAgICAvLyBzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZSA9IHN0Yy5HYW1lVHJvcGh5KAogICAgLy8gICAgIGFzc2V0X2lkPWFyYzQuVUludDY0KGFjZmdfaXR4bi5jcmVhdGVkX2Fzc2V0LmlkKSwKICAgIC8vICAgICBhdGhfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBhdGhfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE1NgogICAgLy8gYXRoX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICBieXRlY18xIC8vIDB4MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTU0LTE1OAogICAgLy8gc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUgPSBzdGMuR2FtZVRyb3BoeSgKICAgIC8vICAgICBhc3NldF9pZD1hcmM0LlVJbnQ2NChhY2ZnX2l0eG4uY3JlYXRlZF9hc3NldC5pZCksCiAgICAvLyAgICAgYXRoX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgYXRoX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gKQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTU0CiAgICAvLyBzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZSA9IHN0Yy5HYW1lVHJvcGh5KAogICAgYnl0ZWNfMiAvLyAidF8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE1NC0xNTgKICAgIC8vIHNlbGYuYm94X2dhbWVfdHJvcGh5LnZhbHVlID0gc3RjLkdhbWVUcm9waHkoCiAgICAvLyAgICAgYXNzZXRfaWQ9YXJjNC5VSW50NjQoYWNmZ19pdHhuLmNyZWF0ZWRfYXNzZXQuaWQpLAogICAgLy8gICAgIGF0aF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGF0aF9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICkKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LmNsYWltX3Ryb3BoeSgpIC0+IHZvaWQ6CmNsYWltX3Ryb3BoeToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTYzLTE2NAogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgR2xvYmFsLmdyb3VwX3NpemUgPT0gMSwgZXJyLlNUQU5EQUxPTkVfVFhOX09OTFkKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgZ3JvdXAgc2l6ZS4gVGhpcyBhcHAgY2FsbCBjYW4gb25seSB0YWtlIHN0YW5kYWxvbmUgdHJhbnNhY3Rpb25zLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNjYKICAgIC8vIFR4bi5zZW5kZXIgPT0gc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXRoX2FkZHJlc3MubmF0aXZlCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18yIC8vICJ0XyIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3Ryb3BoeSBleGlzdHMKICAgIGR1cAogICAgZXh0cmFjdCA5IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNjUtMTY3CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIFR4bi5zZW5kZXIgPT0gc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXRoX2FkZHJlc3MubmF0aXZlCiAgICAvLyApLCBlcnIuSU5WQUxJRF9UUk9QSFlfUkVDRUlWRVIKICAgIGFzc2VydCAvLyBBc3NldCB0cm9waHkgcmVjZWl2ZXIgbXVzdCBtYXRjaCBhcHBsaWNhdGlvbiBBVEggYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTY4CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlci5pc19vcHRlZF9pbigKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTY5CiAgICAvLyBBc3NldChzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZS5hc3NldF9pZC5uYXRpdmUpCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTY4LTE3MAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgQXNzZXQoc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXNzZXRfaWQubmF0aXZlKQogICAgLy8gKSwgZXJyLkFTU0VUX09QVF9JTl9SRVFVSVJFRAogICAgc3dhcAogICAgZGlnIDEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQWNjb3VudCBtdXN0IGJlIG9wdGVkIGluIHRvIGFzc2V0IGluIG9yZGVyIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE3Mi0xNzgKICAgIC8vICMgVHJhbnNmZXIgZ2FtZSB0cm9waHkgYXNzZXQgdG8gc2VuZGVyIGJ5IG1ha2luZyBhbiBhc3NldCB0cmFuc2ZlciBpbm5lciB0cmFuc2FjdGlvbgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXNzZXRfaWQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTEsCiAgICAvLyAgICAgbm90ZT1iJ3BpZW91dDpqeyJtZXRob2QiOiJjbGFpbV90cm9waHkiLCJjb25jZXJuIjoiaXR4bi5hc3NldF90cmFuc2Zlcjt0cmFuc2Zlcl90cm9waHlfYXNzZXQifScsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE3NQogICAgLy8gYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTc3CiAgICAvLyBub3RlPWIncGllb3V0Omp7Im1ldGhvZCI6ImNsYWltX3Ryb3BoeSIsImNvbmNlcm4iOiJpdHhuLmFzc2V0X3RyYW5zZmVyO3RyYW5zZmVyX3Ryb3BoeV9hc3NldCJ9JywKICAgIHB1c2hieXRlcyAweDcwNjk2NTZmNzU3NDNhNmE3YjIyNmQ2NTc0Njg2ZjY0MjIzYTIyNjM2YzYxNjk2ZDVmNzQ3MjZmNzA2ODc5MjIyYzIyNjM2ZjZlNjM2NTcyNmUyMjNhMjI2OTc0Nzg2ZTJlNjE3MzczNjU3NDVmNzQ3MjYxNmU3MzY2NjU3MjNiNzQ3MjYxNmU3MzY2NjU3MjVmNzQ3MjZmNzA2ODc5NWY2MTczNzM2NTc0MjI3ZAogICAgaXR4bl9maWVsZCBOb3RlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gYXNzZXRfYW1vdW50PTEsCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxNzItMTczCiAgICAvLyAjIFRyYW5zZmVyIGdhbWUgdHJvcGh5IGFzc2V0IHRvIHNlbmRlciBieSBtYWtpbmcgYW4gYXNzZXQgdHJhbnNmZXIgaW5uZXIgdHJhbnNhY3Rpb24KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE3Mi0xNzgKICAgIC8vICMgVHJhbnNmZXIgZ2FtZSB0cm9waHkgYXNzZXQgdG8gc2VuZGVyIGJ5IG1ha2luZyBhbiBhc3NldCB0cmFuc2ZlciBpbm5lciB0cmFuc2FjdGlvbgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXNzZXRfaWQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTEsCiAgICAvLyAgICAgbm90ZT1iJ3BpZW91dDpqeyJtZXRob2QiOiJjbGFpbV90cm9waHkiLCJjb25jZXJuIjoiaXR4bi5hc3NldF90cmFuc2Zlcjt0cmFuc2Zlcl90cm9waHlfYXNzZXQifScsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5jb250cmFjdC5QaWVvdXQuZ2V0X2JveF9nYW1lX3JlZ2lzdGVyKGJveF9yX3BheTogdWludDY0KSAtPiB2b2lkOgpnZXRfYm94X2dhbWVfcmVnaXN0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE4MC0xODIKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSByZWdpc3RlciBib3ggdGhhdCBpcyBhIHByZXJlcXVpc3RlIHRvIGludGVyYWN0IHdpdGggZ2FtZS1yZWxhdGVkIGZlYXR1cmVzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfYm94X2dhbWVfcmVnaXN0ZXIoc2VsZiwgYm94X3JfcGF5OiBndHhuLlBheW1lbnRUcmFuc2FjdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxODMtMTg0CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAyLCBlcnIuSU5WQUxJRF9HUk9VUF9TSVpFCiAgICBnbG9iYWwgR3JvdXBTaXplCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGdyb3VwIHNpemUuIEVuc3VyZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gaW4gZ3JvdXAgaXMgd2l0aGluIHZhbGlkIGJvdW5kcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTg1CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciBub3QgaW4gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwgZXJyLkJPWF9GT1VORAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJveCBmb3VuZC4gRW5zdXJlIHRoZSBib3ggeW91IGFyZSB0cnlpbmcgdG8gYWNjZXNzIGRvZXMgbm90IGV4aXN0IGFscmVhZHkuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE4NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2dhbWVfdHJvcGh5LCBlcnIuQk9YX05PVF9GT1VORAogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggbm90IGZvdW5kLiBFbnN1cmUgdGhlIGJveCB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3Mgd2FzIGNyZWF0ZWQgYW5kIHN0aWxsIGV4aXN0cy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTg4LTE4OQogICAgLy8gIyAtLSBCT1ggUiBQQVkgLS0KICAgIC8vIGFzc2VydCBib3hfcl9wYXkuYW1vdW50ID09IGNzdC5CT1hfUl9DT1NULCBlcnIuSU5WQUxJRF9CT1hfUEFZX0ZFRQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBbW91bnQKICAgIGludGMgNyAvLyAyOTcwMAogICAgPT0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgZnVuZHMuIEJveCBwYXkgYW1vdW50IGlzIG5vdCBlbm91Z2ggdG8gY292ZXIgYXBwbGljYXRpb24gTUJSLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxOTAKICAgIC8vIGFzc2VydCBib3hfcl9wYXkuc2VuZGVyID09IFR4bi5zZW5kZXIsIGVyci5JTlZBTElEX0JPWF9QQVlfU0VOREVSCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydCAvLyBCb3ggcGF5bWVudCBzZW5kZXIgYWRkcmVzcyBtdXN0IG1hdGNoIHRyYW5zYWN0aW9uIHNlbmRlciBhZGRyZXNzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxOTIKICAgIC8vIGJveF9yX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MTkxLTE5MwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBib3hfcl9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfQk9YX1BBWV9SRUNFSVZFUgogICAgYXNzZXJ0IC8vIEJveCBwYXltZW50IHJlY2VpdmVyIGFkZHJlc3MgbXVzdCBtYXRjaCBhcHBsaWNhdGlvbiBhZGRyZXNzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMDEKICAgIC8vIGV4cGlyeV9yb3VuZD1hcmM0LlVJbnQ2NChHbG9iYWwucm91bmQgKyBjc3QuQk9YX1JfRVhQX1JPVU5EX0RFTFRBKSwKICAgIGdsb2JhbCBSb3VuZAogICAgaW50YyA2IC8vIDEwMDAwMAogICAgKwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToxOTUtMjAyCiAgICAvLyAjIENyZWF0ZSBhIGdhbWUgcmVnaXN0ZXIgYm94IHdpdGggc2VuZGVyIGFzIGtleSBhbmQgYXNzaWduIGl0cyBkZWZhdWx0IHN0YXJ0aW5nIHZhbHVlcwogICAgLy8gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXSA9IHN0Yy5HYW1lUmVnaXN0ZXIoCiAgICAvLyAgICAgaG9zdGluZ19nYW1lPWFyYzQuQm9vbChGYWxzZSksICAjIG5vcWE6IEZCVDAwMwogICAgLy8gICAgIGJlc3Rfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBnYW1lX2lkPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGNvbW1pdF9yYW5kX3JvdW5kPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGV4cGlyeV9yb3VuZD1hcmM0LlVJbnQ2NChHbG9iYWwucm91bmQgKyBjc3QuQk9YX1JfRVhQX1JPVU5EX0RFTFRBKSwKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE5NS0xOTYKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSByZWdpc3RlciBib3ggd2l0aCBzZW5kZXIgYXMga2V5IGFuZCBhc3NpZ24gaXRzIGRlZmF1bHQgc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdID0gc3RjLkdhbWVSZWdpc3RlcigKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjE5NS0yMDIKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSByZWdpc3RlciBib3ggd2l0aCBzZW5kZXIgYXMga2V5IGFuZCBhc3NpZ24gaXRzIGRlZmF1bHQgc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdID0gc3RjLkdhbWVSZWdpc3RlcigKICAgIC8vICAgICBob3N0aW5nX2dhbWU9YXJjNC5Cb29sKEZhbHNlKSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAgYmVzdF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGdhbWVfaWQ9YXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgY29tbWl0X3JhbmRfcm91bmQ9YXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgZXhwaXJ5X3JvdW5kPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCArIGNzdC5CT1hfUl9FWFBfUk9VTkRfREVMVEEpLAogICAgLy8gKQogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5jb250cmFjdC5QaWVvdXQuZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmKCkgLT4gdm9pZDoKZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMDctMjA4CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAxLCBlcnIuU1RBTkRBTE9ORV9UWE5fT05MWQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBncm91cCBzaXplLiBUaGlzIGFwcCBjYWxsIGNhbiBvbmx5IHRha2Ugc3RhbmRhbG9uZSB0cmFuc2FjdGlvbnMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjIwOQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgaW4gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwgZXJyLkJPWF9OT1RfRk9VTkQKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggbm90IGZvdW5kLiBFbnN1cmUgdGhlIGJveCB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3Mgd2FzIGNyZWF0ZWQgYW5kIHN0aWxsIGV4aXN0cy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjExCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0uaG9zdGluZ19nYW1lLm5hdGl2ZSwgZXJyLkhPU1RJTkdfR0FNRV9GTEFHCiAgICBieXRlY18wIC8vICJyXyIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEdhbWUgcmVnaXN0ZXIgaG9zdGluZyBnYW1lIGJvb2xlYW4gdmFsdWUgbWlzbWF0Y2guCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjIxNAogICAgLy8gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXS5jb21taXRfcmFuZF9yb3VuZC5uYXRpdmUgPT0gMAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjEzLTIxNQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdLmNvbW1pdF9yYW5kX3JvdW5kLm5hdGl2ZSA9PSAwCiAgICAvLyApLCBlcnIuTk9OX1pFUk9fQ09NTUlUX1JBTkRfUk9VTkQKICAgIGFzc2VydCAvLyBDb21taXQgUmFuZCBSb3VuZCBub3QgZW1wdHkuIFZhbHVlIG11c3QgYmUgemVybyB0byBvYnRhaW4gYSB2YWxpZCBvbmUuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjIxNy0yMTgKICAgIC8vICMgRGVsZXRlIGdhbWUgcmVnaXN0ZXIgYm94IGZyb20gdGhlIHNtYXJ0IGNvbnRyYWN0IHN0b3JhZ2UgdW5kZXIgc2VuZGVyIGtleQogICAgLy8gZGVsIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0KICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjIyCiAgICAvLyByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMjMKICAgIC8vIGFtb3VudD1VSW50NjQoY3N0LkJPWF9SX0NPU1QpLAogICAgaW50YyA3IC8vIDI5NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjIyNC0yMjYKICAgIC8vIG5vdGU9U3RyaW5nKAogICAgLy8gICAgICdwaWVvdXQ6ansibWV0aG9kIjoiZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmIiwiY29uY2VybiI6InR4bi5hcHBfYzttYnJfYm94X3JfcmVmdW5kIn0nCiAgICAvLyApLAogICAgcHVzaGJ5dGVzICJwaWVvdXQ6antcIm1ldGhvZFwiOlwiZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9zZWxmXCIsXCJjb25jZXJuXCI6XCJ0eG4uYXBwX2M7bWJyX2JveF9yX3JlZnVuZFwifSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjIwLTIyNwogICAgLy8gIyBJc3N1ZSBNQlIgcmVmdW5kIGZvciBnYW1lIHJlZ2lzdGVyIGJveCBkZWxldGlvbiB2aWEgYSBwYXltZW50IGlubmVyIHRyYW5zYWN0aW9uCiAgICAvLyBzcnQucGF5b3V0X2l0eG4oCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ9VUludDY0KGNzdC5CT1hfUl9DT1NUKSwKICAgIC8vICAgICBub3RlPVN0cmluZygKICAgIC8vICAgICAgICAgJ3BpZW91dDpqeyJtZXRob2QiOiJkZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX3NlbGYiLCJjb25jZXJuIjoidHhuLmFwcF9jO21icl9ib3hfcl9yZWZ1bmQifScKICAgIC8vICAgICApLAogICAgLy8gKQogICAgY2FsbHN1YiBwYXlvdXRfaXR4bgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5jb250cmFjdC5QaWVvdXQuZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9vdGhlcihwbGF5ZXI6IGJ5dGVzKSAtPiB2b2lkOgpkZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX290aGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMjktMjMxCiAgICAvLyAjIERlbGV0ZSB0aGUgZ2FtZSByZWdpc3RlciBib3ggZGF0YSBmb3IgYW5vdGhlciBhY2NvdW50CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX290aGVyKHNlbGYsIHBsYXllcjogQWNjb3VudCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyMzItMjMzCiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAxLCBlcnIuU1RBTkRBTE9ORV9UWE5fT05MWQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBncm91cCBzaXplLiBUaGlzIGFwcCBjYWxsIGNhbiBvbmx5IHRha2Ugc3RhbmRhbG9uZSB0cmFuc2FjdGlvbnMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjIzNQogICAgLy8gYXNzZXJ0IHBsYXllciBpbiBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyLCBlcnIuQk9YX05PVF9GT1VORAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggbm90IGZvdW5kLiBFbnN1cmUgdGhlIGJveCB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3Mgd2FzIGNyZWF0ZWQgYW5kIHN0aWxsIGV4aXN0cy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjM2CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbcGxheWVyXS5ob3N0aW5nX2dhbWUubmF0aXZlLCBlcnIuSE9TVElOR19HQU1FX0ZMQUcKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gR2FtZSByZWdpc3RlciBob3N0aW5nIGdhbWUgYm9vbGVhbiB2YWx1ZSBtaXNtYXRjaC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjM5CiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW3BsYXllcl0uY29tbWl0X3JhbmRfcm91bmQubmF0aXZlID09IDAKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjM4LTI0MAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW3BsYXllcl0uY29tbWl0X3JhbmRfcm91bmQubmF0aXZlID09IDAKICAgIC8vICksIGVyci5OT05fWkVST19DT01NSVRfUkFORF9ST1VORAogICAgYXNzZXJ0IC8vIENvbW1pdCBSYW5kIFJvdW5kIG5vdCBlbXB0eS4gVmFsdWUgbXVzdCBiZSB6ZXJvIHRvIG9idGFpbiBhIHZhbGlkIG9uZS4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjQzCiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW3BsYXllcl0uZXhwaXJ5X3JvdW5kLm5hdGl2ZSA8IEdsb2JhbC5yb3VuZAogICAgcHVzaGludCAxOCAvLyAxOAogICAgZXh0cmFjdF91aW50NjQKICAgIGdsb2JhbCBSb3VuZAogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyNDItMjQ0CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbcGxheWVyXS5leHBpcnlfcm91bmQubmF0aXZlIDwgR2xvYmFsLnJvdW5kCiAgICAvLyApLCBlcnIuVElNRV9DT05TVFJBSU5UX1ZJT0xBVElPTgogICAgYXNzZXJ0IC8vIEludmFsaWQgdGltZSBmcmFtZS4gQ2FsbCBtYWRlIG91dHNpZGUgdGhlIHBlcm1pdHRlZCBibG9jayBvciB0aW1lc3RhbXAgcmFuZ2UuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI0Ny0yNDgKICAgIC8vICMgRGVsZXRlIGdhbWUgcmVnaXN0ZXIgYm94IGZyb20gdGhlIHNtYXJ0IGNvbnRyYWN0IHN0b3JhZ2UgdW5kZXIgcGxheWVyIGtleQogICAgLy8gZGVsIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbcGxheWVyXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI1MC0yNTUKICAgIC8vICMgUmVzb2x2ZSBnYW1lIHJlZ2lzdGVyIGJveCBkZWxldGlvbiBNQlIgcmVmdW5kIHJlY2VpdmVyIGJ5IHByaW9yaXR5CiAgICAvLyByZWNlaXZlciA9IHNydC5yZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8oCiAgICAvLyAgICAgYWNjMT1wbGF5ZXIsCiAgICAvLyAgICAgYWNjMj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFjYzM9R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyNTMKICAgIC8vIGFjYzI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjU0CiAgICAvLyBhY2MzPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjUwLTI1NQogICAgLy8gIyBSZXNvbHZlIGdhbWUgcmVnaXN0ZXIgYm94IGRlbGV0aW9uIE1CUiByZWZ1bmQgcmVjZWl2ZXIgYnkgcHJpb3JpdHkKICAgIC8vIHJlY2VpdmVyID0gc3J0LnJlc29sdmVfcmVjZWl2ZXJfYnlfcHJpbygKICAgIC8vICAgICBhY2MxPXBsYXllciwKICAgIC8vICAgICBhY2MyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYWNjMz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gKQogICAgY2FsbHN1YiByZXNvbHZlX3JlY2VpdmVyX2J5X3ByaW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjYwCiAgICAvLyBhbW91bnQ9VUludDY0KGNzdC5CT1hfUl9DT1NUKSwKICAgIGludGMgNyAvLyAyOTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyNjEtMjYzCiAgICAvLyBub3RlPVN0cmluZygKICAgIC8vICAgICAncGllb3V0Omp7Im1ldGhvZCI6ImRlbF9ib3hfZ2FtZV9yZWdpc3Rlcl9mb3Jfb3RoZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7bWJyX2JveF9jX3JlZnVuZCJ9JwogICAgLy8gKSwKICAgIHB1c2hieXRlcyAicGllb3V0Omp7XCJtZXRob2RcIjpcImRlbF9ib3hfZ2FtZV9yZWdpc3Rlcl9mb3Jfb3RoZXJcIixcImNvbmNlcm5cIjpcIml0eG4ucGF5O21icl9ib3hfY19yZWZ1bmRcIn0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI1Ny0yNjQKICAgIC8vICMgSXNzdWUgTUJSIHJlZnVuZCBmb3IgZ2FtZSByZWdpc3RlciBib3ggZGVsZXRpb24gdmlhIGEgcGF5bWVudCBpbm5lciB0cmFuc2FjdGlvbgogICAgLy8gc3J0LnBheW91dF9pdHhuKAogICAgLy8gICAgIHJlY2VpdmVyPXJlY2VpdmVyLAogICAgLy8gICAgIGFtb3VudD1VSW50NjQoY3N0LkJPWF9SX0NPU1QpLAogICAgLy8gICAgIG5vdGU9U3RyaW5nKAogICAgLy8gICAgICAgICAncGllb3V0Omp7Im1ldGhvZCI6ImRlbF9ib3hfZ2FtZV9yZWdpc3Rlcl9mb3Jfb3RoZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7bWJyX2JveF9jX3JlZnVuZCJ9JwogICAgLy8gICAgICksCiAgICAvLyApCiAgICBjYWxsc3ViIHBheW91dF9pdHhuCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC5uZXdfZ2FtZShxdWlja19wbGF5X2VuYWJsZWQ6IHVpbnQ2NCwgbWF4X3BsYXllcnM6IHVpbnQ2NCwgYm94X3NfcGF5OiB1aW50NjQsIGJveF9wX3BheTogdWludDY0LCBzdGFrZV9wYXk6IHVpbnQ2NCkgLT4gdm9pZDoKbmV3X2dhbWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI2Ni0yNzUKICAgIC8vICMgQ3JlYXRlIG5ldyBnYW1lIGluc3RhbmNlIHdpdGggdW5pcXVlIElECiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBuZXdfZ2FtZSgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIHF1aWNrX3BsYXlfZW5hYmxlZDogYm9vbCwgICMgbm9xYTogRkJUMDAxCiAgICAvLyAgICAgbWF4X3BsYXllcnM6IFVJbnQ2NCwKICAgIC8vICAgICBib3hfc19wYXk6IGd0eG4uUGF5bWVudFRyYW5zYWN0aW9uLAogICAgLy8gICAgIGJveF9wX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24sCiAgICAvLyAgICAgc3Rha2VfcGF5OiBndHhuLlBheW1lbnRUcmFuc2FjdGlvbiwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDUgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyNzYtMjc3CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSA0LCBlcnIuSU5WQUxJRF9HUk9VUF9TSVpFCiAgICBnbG9iYWwgR3JvdXBTaXplCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGdyb3VwIHNpemUuIEVuc3VyZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gaW4gZ3JvdXAgaXMgd2l0aGluIHZhbGlkIGJvdW5kcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mjc4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZ2FtZV90cm9waHksIGVyci5CT1hfTk9UX0ZPVU5ECiAgICBieXRlY18yIC8vICJ0XyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBub3QgZm91bmQuIEVuc3VyZSB0aGUgYm94IHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyB3YXMgY3JlYXRlZCBhbmQgc3RpbGwgZXhpc3RzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyNzkKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyIGluIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsIGVyci5CT1hfTk9UX0ZPVU5ECiAgICBieXRlY18wIC8vICJyXyIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQm94IG5vdCBmb3VuZC4gRW5zdXJlIHRoZSBib3ggeW91IGFyZSB0cnlpbmcgdG8gYWNjZXNzIHdhcyBjcmVhdGVkIGFuZCBzdGlsbCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI4MQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyWwogICAgYnl0ZWNfMCAvLyAicl8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI4MgogICAgLy8gVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyODEtMjgzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbCiAgICAvLyAgICAgVHhuLnNlbmRlcgogICAgLy8gXS5ob3N0aW5nX2dhbWUubmF0aXZlLCBlcnIuSE9TVElOR19HQU1FX0ZMQUcKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEdhbWUgcmVnaXN0ZXIgaG9zdGluZyBnYW1lIGJvb2xlYW4gdmFsdWUgbWlzbWF0Y2guCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI4NgogICAgLy8gbWF4X3BsYXllcnMgPj0gY3N0Lk1BWF9QTEFZRVJTX0JPVF9CT1VORAogICAgZnJhbWVfZGlnIC00CiAgICBwdXNoaW50IDMgLy8gMwogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mjg2LTI4NwogICAgLy8gbWF4X3BsYXllcnMgPj0gY3N0Lk1BWF9QTEFZRVJTX0JPVF9CT1VORAogICAgLy8gYW5kIG1heF9wbGF5ZXJzIDw9IGNzdC5NQVhfUExBWUVSU19UT1BfQk9VTkQKICAgIGJ6IG5ld19nYW1lX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyODcKICAgIC8vIGFuZCBtYXhfcGxheWVycyA8PSBjc3QuTUFYX1BMQVlFUlNfVE9QX0JPVU5ECiAgICBmcmFtZV9kaWcgLTQKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI4Ni0yODcKICAgIC8vIG1heF9wbGF5ZXJzID49IGNzdC5NQVhfUExBWUVSU19CT1RfQk9VTkQKICAgIC8vIGFuZCBtYXhfcGxheWVycyA8PSBjc3QuTUFYX1BMQVlFUlNfVE9QX0JPVU5ECiAgICBieiBuZXdfZ2FtZV9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCgpuZXdfZ2FtZV9ib29sX21lcmdlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI4NS0yODgKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgbWF4X3BsYXllcnMgPj0gY3N0Lk1BWF9QTEFZRVJTX0JPVF9CT1VORAogICAgLy8gICAgIGFuZCBtYXhfcGxheWVycyA8PSBjc3QuTUFYX1BMQVlFUlNfVE9QX0JPVU5ECiAgICAvLyApLCBlcnIuSU5WQUxJRF9NQVhfUExBWUVSUwogICAgYXNzZXJ0IC8vIFRoZSBudW1iZXIgb2YgbWF4IHBsYXllcnMgbXVzdCBiZSB3aXRoaW4gYm91bmRzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyOTAKICAgIC8vIGFzc2VydCBzdGFrZV9wYXkuYW1vdW50ID09IGNzdC5TVEFLRV9BTU9VTlQsIGVyci5JTlZBTElEX1NUQUtFX1BBWV9GRUUKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMDAwCiAgICA9PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBmdW5kcy4gU3Rha2UgcGF5IGFtb3VudCBpcyBub3QgZW5vdWdoIHRvIGNvdmVyIHN0YWtpbmcgcmVxdWlyZW1lbnRzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyOTEKICAgIC8vIGFzc2VydCBib3hfc19wYXkuYW1vdW50ID09IGNzdC5CT1hfU19DT1NULCBlcnIuSU5WQUxJRF9CT1hfUEFZX0ZFRQogICAgZnJhbWVfZGlnIC0zCiAgICBndHhucyBBbW91bnQKICAgIGludGMgMTEgLy8gODA1MDAKICAgID09CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGZ1bmRzLiBCb3ggcGF5IGFtb3VudCBpcyBub3QgZW5vdWdoIHRvIGNvdmVyIGFwcGxpY2F0aW9uIE1CUi4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjkyCiAgICAvLyBhc3NlcnQgYm94X3BfcGF5LmFtb3VudCA9PSBzZWxmLmNhbGNfc2luZ2xlX2JveF9jb3N0KAogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mjk0CiAgICAvLyB2YWx1ZV9zaXplPWFyYzQuVUludDE2KGNzdC5BRERSRVNTX1NJWkUgKiBtYXhfcGxheWVycyksCiAgICBpbnRjXzMgLy8gMzIKICAgIGZyYW1lX2RpZyAtNAogICAgKgogICAgZHVwCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MjkzCiAgICAvLyBrZXlfc2l6ZT1hcmM0LlVJbnQ4KDEwKSwKICAgIHB1c2hieXRlcyAweDBhCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjI5Mi0yOTUKICAgIC8vIGFzc2VydCBib3hfcF9wYXkuYW1vdW50ID09IHNlbGYuY2FsY19zaW5nbGVfYm94X2Nvc3QoCiAgICAvLyAgICAga2V5X3NpemU9YXJjNC5VSW50OCgxMCksCiAgICAvLyAgICAgdmFsdWVfc2l6ZT1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFICogbWF4X3BsYXllcnMpLAogICAgLy8gKSwgZXJyLklOVkFMSURfQk9YX1BBWV9GRUUKICAgIHN3YXAKICAgIGNhbGxzdWIgY2FsY19zaW5nbGVfYm94X2Nvc3QKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgZnVuZHMuIEJveCBwYXkgYW1vdW50IGlzIG5vdCBlbm91Z2ggdG8gY292ZXIgYXBwbGljYXRpb24gTUJSLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weToyOTcKICAgIC8vIGFzc2VydCBzdGFrZV9wYXkuc2VuZGVyID09IFR4bi5zZW5kZXIsIGVyci5JTlZBTElEX1NUQUtFX1BBWV9TRU5ERVIKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIFN0YWtlIHBheW1lbnQgc2VuZGVyIGFkZHJlc3MgbXVzdCBtYXRjaCB0cmFuc2FjdGlvbiBzZW5kZXIgYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mjk4CiAgICAvLyBhc3NlcnQgYm94X3NfcGF5LnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuSU5WQUxJRF9CT1hfUEFZX1NFTkRFUgogICAgZnJhbWVfZGlnIC0zCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gQm94IHBheW1lbnQgc2VuZGVyIGFkZHJlc3MgbXVzdCBtYXRjaCB0cmFuc2FjdGlvbiBzZW5kZXIgYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mjk5CiAgICAvLyBhc3NlcnQgYm94X3BfcGF5LnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuSU5WQUxJRF9CT1hfUEFZX1NFTkRFUgogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gQm94IHBheW1lbnQgc2VuZGVyIGFkZHJlc3MgbXVzdCBtYXRjaCB0cmFuc2FjdGlvbiBzZW5kZXIgYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzAyCiAgICAvLyBzdGFrZV9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMwMS0zMDMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc3Rha2VfcGF5LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICksIGVyci5JTlZBTElEX1NUQUtFX1BBWV9SRUNFSVZFUgogICAgYXNzZXJ0IC8vIFN0YWtlIHBheW1lbnQgcmVjZWl2ZXIgYWRkcmVzcyBtdXN0IG1hdGNoIGFwcGxpY2F0aW9uIGFkZHJlc3MuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMwNQogICAgLy8gYm94X3NfcGF5LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGZyYW1lX2RpZyAtMwogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMDQtMzA2CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGJveF9zX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9CT1hfUEFZX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gQm94IHBheW1lbnQgcmVjZWl2ZXIgYWRkcmVzcyBtdXN0IG1hdGNoIGFwcGxpY2F0aW9uIGFkZHJlc3MuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94X3BfcGF5LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGZyYW1lX2RpZyAtMgogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGJveF9wX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9CT1hfUEFZX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gQm94IHBheW1lbnQgcmVjZWl2ZXIgYWRkcmVzcyBtdXN0IG1hdGNoIGFwcGxpY2F0aW9uIGFkZHJlc3MuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxNAogICAgLy8gcXVpY2tfcGxheV9lbmFibGVkPWFyYzQuQm9vbChxdWlja19wbGF5X2VuYWJsZWQpLAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC01CiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzE1CiAgICAvLyBtYXhfcGxheWVycz1hcmM0LlVJbnQ4KG1heF9wbGF5ZXJzKSwKICAgIGZyYW1lX2RpZyAtNAogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMjIKICAgIC8vIGV4cGlyeV90cz1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCArIGNzdC5QSEFTRV9FWFBJUllfSU5URVJWQUwpLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50YyA1IC8vIDEyMDAKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzIzCiAgICAvLyBwcml6ZV9wb29sPWFyYzQuVUludDY0KHN0YWtlX3BheS5hbW91bnQpLAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMyNAogICAgLy8gYWRtaW5fYWRkcmVzcz1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMyNQogICAgLy8gZmlyc3RfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzI2LTMyOAogICAgLy8gc2Vjb25kX3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gdGhpcmRfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyB0b3BzY29yZXJfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzExLTMyOQogICAgLy8gIyBDcmVhdGUgYSBnYW1lIHN0YXRlIGJveCB3aXRoIHVuaXF1ZSBnYW1lIElEIGFzIGtleSBhbmQgYXNzaWduIGl0cyBkZWZhdWx0IHN0YXJ0aW5nIHZhbHVlcwogICAgLy8gc2VsZi5ib3hfZ2FtZV9zdGF0ZVtzZWxmLmdhbWVfaWRdID0gc3RjLkdhbWVTdGF0ZSgKICAgIC8vICAgICBzdGFraW5nX2ZpbmFsaXplZD1hcmM0LkJvb2woRmFsc2UpLCAgIyBub3FhOiBGQlQwMDMKICAgIC8vICAgICBxdWlja19wbGF5X2VuYWJsZWQ9YXJjNC5Cb29sKHF1aWNrX3BsYXlfZW5hYmxlZCksCiAgICAvLyAgICAgbWF4X3BsYXllcnM9YXJjNC5VSW50OChtYXhfcGxheWVycyksCiAgICAvLyAgICAgYWN0aXZlX3BsYXllcnM9YXJjNC5VSW50OCgxKSwKICAgIC8vICAgICBmaXJzdF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRoaXJkX3BsYWNlX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgdG9wX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgYm94X3Bfc3RhcnRfcG9zPWFyYzQuVUludDE2KGNzdC5BRERSRVNTX1NJWkUpLAogICAgLy8gICAgIGV4cGlyeV90cz1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCArIGNzdC5QSEFTRV9FWFBJUllfSU5URVJWQUwpLAogICAgLy8gICAgIHByaXplX3Bvb2w9YXJjNC5VSW50NjQoc3Rha2VfcGF5LmFtb3VudCksCiAgICAvLyAgICAgYWRtaW5fYWRkcmVzcz1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgZmlyc3RfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgc2Vjb25kX3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHRoaXJkX3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHRvcHNjb3Jlcl9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICkKICAgIHVuY292ZXIgOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMTMKICAgIC8vIHN0YWtpbmdfZmluYWxpemVkPWFyYzQuQm9vbChGYWxzZSksICAjIG5vcWE6IEZCVDAwMwogICAgYnl0ZWNfMSAvLyAweDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxMS0zMjkKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSBzdGF0ZSBib3ggd2l0aCB1bmlxdWUgZ2FtZSBJRCBhcyBrZXkgYW5kIGFzc2lnbiBpdHMgZGVmYXVsdCBzdGFydGluZyB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbc2VsZi5nYW1lX2lkXSA9IHN0Yy5HYW1lU3RhdGUoCiAgICAvLyAgICAgc3Rha2luZ19maW5hbGl6ZWQ9YXJjNC5Cb29sKEZhbHNlKSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAgcXVpY2tfcGxheV9lbmFibGVkPWFyYzQuQm9vbChxdWlja19wbGF5X2VuYWJsZWQpLAogICAgLy8gICAgIG1heF9wbGF5ZXJzPWFyYzQuVUludDgobWF4X3BsYXllcnMpLAogICAgLy8gICAgIGFjdGl2ZV9wbGF5ZXJzPWFyYzQuVUludDgoMSksCiAgICAvLyAgICAgZmlyc3RfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRvcF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGJveF9wX3N0YXJ0X3Bvcz1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKSwKICAgIC8vICAgICBleHBpcnlfdHM9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBjc3QuUEhBU0VfRVhQSVJZX0lOVEVSVkFMKSwKICAgIC8vICAgICBwcml6ZV9wb29sPWFyYzQuVUludDY0KHN0YWtlX3BheS5hbW91bnQpLAogICAgLy8gICAgIGFkbWluX2FkZHJlc3M9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0b3BzY29yZXJfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyApCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxNgogICAgLy8gYWN0aXZlX3BsYXllcnM9YXJjNC5VSW50OCgxKSwKICAgIHB1c2hieXRlcyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxMS0zMjkKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSBzdGF0ZSBib3ggd2l0aCB1bmlxdWUgZ2FtZSBJRCBhcyBrZXkgYW5kIGFzc2lnbiBpdHMgZGVmYXVsdCBzdGFydGluZyB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbc2VsZi5nYW1lX2lkXSA9IHN0Yy5HYW1lU3RhdGUoCiAgICAvLyAgICAgc3Rha2luZ19maW5hbGl6ZWQ9YXJjNC5Cb29sKEZhbHNlKSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAgcXVpY2tfcGxheV9lbmFibGVkPWFyYzQuQm9vbChxdWlja19wbGF5X2VuYWJsZWQpLAogICAgLy8gICAgIG1heF9wbGF5ZXJzPWFyYzQuVUludDgobWF4X3BsYXllcnMpLAogICAgLy8gICAgIGFjdGl2ZV9wbGF5ZXJzPWFyYzQuVUludDgoMSksCiAgICAvLyAgICAgZmlyc3RfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRvcF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGJveF9wX3N0YXJ0X3Bvcz1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKSwKICAgIC8vICAgICBleHBpcnlfdHM9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBjc3QuUEhBU0VfRVhQSVJZX0lOVEVSVkFMKSwKICAgIC8vICAgICBwcml6ZV9wb29sPWFyYzQuVUludDY0KHN0YWtlX3BheS5hbW91bnQpLAogICAgLy8gICAgIGFkbWluX2FkZHJlc3M9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0b3BzY29yZXJfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyApCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzE3CiAgICAvLyBmaXJzdF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxMS0zMjkKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSBzdGF0ZSBib3ggd2l0aCB1bmlxdWUgZ2FtZSBJRCBhcyBrZXkgYW5kIGFzc2lnbiBpdHMgZGVmYXVsdCBzdGFydGluZyB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbc2VsZi5nYW1lX2lkXSA9IHN0Yy5HYW1lU3RhdGUoCiAgICAvLyAgICAgc3Rha2luZ19maW5hbGl6ZWQ9YXJjNC5Cb29sKEZhbHNlKSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAgcXVpY2tfcGxheV9lbmFibGVkPWFyYzQuQm9vbChxdWlja19wbGF5X2VuYWJsZWQpLAogICAgLy8gICAgIG1heF9wbGF5ZXJzPWFyYzQuVUludDgobWF4X3BsYXllcnMpLAogICAgLy8gICAgIGFjdGl2ZV9wbGF5ZXJzPWFyYzQuVUludDgoMSksCiAgICAvLyAgICAgZmlyc3RfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRvcF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGJveF9wX3N0YXJ0X3Bvcz1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKSwKICAgIC8vICAgICBleHBpcnlfdHM9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBjc3QuUEhBU0VfRVhQSVJZX0lOVEVSVkFMKSwKICAgIC8vICAgICBwcml6ZV9wb29sPWFyYzQuVUludDY0KHN0YWtlX3BheS5hbW91bnQpLAogICAgLy8gICAgIGFkbWluX2FkZHJlc3M9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0b3BzY29yZXJfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyApCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzE4CiAgICAvLyBzZWNvbmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMTEtMzI5CiAgICAvLyAjIENyZWF0ZSBhIGdhbWUgc3RhdGUgYm94IHdpdGggdW5pcXVlIGdhbWUgSUQgYXMga2V5IGFuZCBhc3NpZ24gaXRzIGRlZmF1bHQgc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBzZWxmLmJveF9nYW1lX3N0YXRlW3NlbGYuZ2FtZV9pZF0gPSBzdGMuR2FtZVN0YXRlKAogICAgLy8gICAgIHN0YWtpbmdfZmluYWxpemVkPWFyYzQuQm9vbChGYWxzZSksICAjIG5vcWE6IEZCVDAwMwogICAgLy8gICAgIHF1aWNrX3BsYXlfZW5hYmxlZD1hcmM0LkJvb2wocXVpY2tfcGxheV9lbmFibGVkKSwKICAgIC8vICAgICBtYXhfcGxheWVycz1hcmM0LlVJbnQ4KG1heF9wbGF5ZXJzKSwKICAgIC8vICAgICBhY3RpdmVfcGxheWVycz1hcmM0LlVJbnQ4KDEpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgc2Vjb25kX3BsYWNlX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgdGhpcmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0b3Bfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBib3hfcF9zdGFydF9wb3M9YXJjNC5VSW50MTYoY3N0LkFERFJFU1NfU0laRSksCiAgICAvLyAgICAgZXhwaXJ5X3RzPWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICsgY3N0LlBIQVNFX0VYUElSWV9JTlRFUlZBTCksCiAgICAvLyAgICAgcHJpemVfcG9vbD1hcmM0LlVJbnQ2NChzdGFrZV9wYXkuYW1vdW50KSwKICAgIC8vICAgICBhZG1pbl9hZGRyZXNzPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICBmaXJzdF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgdGhpcmRfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgdG9wc2NvcmVyX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxOQogICAgLy8gdGhpcmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMTEtMzI5CiAgICAvLyAjIENyZWF0ZSBhIGdhbWUgc3RhdGUgYm94IHdpdGggdW5pcXVlIGdhbWUgSUQgYXMga2V5IGFuZCBhc3NpZ24gaXRzIGRlZmF1bHQgc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBzZWxmLmJveF9nYW1lX3N0YXRlW3NlbGYuZ2FtZV9pZF0gPSBzdGMuR2FtZVN0YXRlKAogICAgLy8gICAgIHN0YWtpbmdfZmluYWxpemVkPWFyYzQuQm9vbChGYWxzZSksICAjIG5vcWE6IEZCVDAwMwogICAgLy8gICAgIHF1aWNrX3BsYXlfZW5hYmxlZD1hcmM0LkJvb2wocXVpY2tfcGxheV9lbmFibGVkKSwKICAgIC8vICAgICBtYXhfcGxheWVycz1hcmM0LlVJbnQ4KG1heF9wbGF5ZXJzKSwKICAgIC8vICAgICBhY3RpdmVfcGxheWVycz1hcmM0LlVJbnQ4KDEpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgc2Vjb25kX3BsYWNlX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgdGhpcmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0b3Bfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBib3hfcF9zdGFydF9wb3M9YXJjNC5VSW50MTYoY3N0LkFERFJFU1NfU0laRSksCiAgICAvLyAgICAgZXhwaXJ5X3RzPWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICsgY3N0LlBIQVNFX0VYUElSWV9JTlRFUlZBTCksCiAgICAvLyAgICAgcHJpemVfcG9vbD1hcmM0LlVJbnQ2NChzdGFrZV9wYXkuYW1vdW50KSwKICAgIC8vICAgICBhZG1pbl9hZGRyZXNzPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICBmaXJzdF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgdGhpcmRfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgdG9wc2NvcmVyX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMyMAogICAgLy8gdG9wX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICBieXRlY18xIC8vIDB4MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzExLTMyOQogICAgLy8gIyBDcmVhdGUgYSBnYW1lIHN0YXRlIGJveCB3aXRoIHVuaXF1ZSBnYW1lIElEIGFzIGtleSBhbmQgYXNzaWduIGl0cyBkZWZhdWx0IHN0YXJ0aW5nIHZhbHVlcwogICAgLy8gc2VsZi5ib3hfZ2FtZV9zdGF0ZVtzZWxmLmdhbWVfaWRdID0gc3RjLkdhbWVTdGF0ZSgKICAgIC8vICAgICBzdGFraW5nX2ZpbmFsaXplZD1hcmM0LkJvb2woRmFsc2UpLCAgIyBub3FhOiBGQlQwMDMKICAgIC8vICAgICBxdWlja19wbGF5X2VuYWJsZWQ9YXJjNC5Cb29sKHF1aWNrX3BsYXlfZW5hYmxlZCksCiAgICAvLyAgICAgbWF4X3BsYXllcnM9YXJjNC5VSW50OChtYXhfcGxheWVycyksCiAgICAvLyAgICAgYWN0aXZlX3BsYXllcnM9YXJjNC5VSW50OCgxKSwKICAgIC8vICAgICBmaXJzdF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRoaXJkX3BsYWNlX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgdG9wX3Njb3JlPWFyYzQuVUludDgoMCksCiAgICAvLyAgICAgYm94X3Bfc3RhcnRfcG9zPWFyYzQuVUludDE2KGNzdC5BRERSRVNTX1NJWkUpLAogICAgLy8gICAgIGV4cGlyeV90cz1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCArIGNzdC5QSEFTRV9FWFBJUllfSU5URVJWQUwpLAogICAgLy8gICAgIHByaXplX3Bvb2w9YXJjNC5VSW50NjQoc3Rha2VfcGF5LmFtb3VudCksCiAgICAvLyAgICAgYWRtaW5fYWRkcmVzcz1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgZmlyc3RfcGxhY2VfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgc2Vjb25kX3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHRoaXJkX3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHRvcHNjb3Jlcl9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMjEKICAgIC8vIGJveF9wX3N0YXJ0X3Bvcz1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKSwKICAgIGJ5dGVjIDkgLy8gMHgwMDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxMS0zMjkKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSBzdGF0ZSBib3ggd2l0aCB1bmlxdWUgZ2FtZSBJRCBhcyBrZXkgYW5kIGFzc2lnbiBpdHMgZGVmYXVsdCBzdGFydGluZyB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbc2VsZi5nYW1lX2lkXSA9IHN0Yy5HYW1lU3RhdGUoCiAgICAvLyAgICAgc3Rha2luZ19maW5hbGl6ZWQ9YXJjNC5Cb29sKEZhbHNlKSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAgcXVpY2tfcGxheV9lbmFibGVkPWFyYzQuQm9vbChxdWlja19wbGF5X2VuYWJsZWQpLAogICAgLy8gICAgIG1heF9wbGF5ZXJzPWFyYzQuVUludDgobWF4X3BsYXllcnMpLAogICAgLy8gICAgIGFjdGl2ZV9wbGF5ZXJzPWFyYzQuVUludDgoMSksCiAgICAvLyAgICAgZmlyc3RfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRvcF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGJveF9wX3N0YXJ0X3Bvcz1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKSwKICAgIC8vICAgICBleHBpcnlfdHM9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBjc3QuUEhBU0VfRVhQSVJZX0lOVEVSVkFMKSwKICAgIC8vICAgICBwcml6ZV9wb29sPWFyYzQuVUludDY0KHN0YWtlX3BheS5hbW91bnQpLAogICAgLy8gICAgIGFkbWluX2FkZHJlc3M9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0b3BzY29yZXJfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyApCiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgY29uY2F0CiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozMTEtMzEyCiAgICAvLyAjIENyZWF0ZSBhIGdhbWUgc3RhdGUgYm94IHdpdGggdW5pcXVlIGdhbWUgSUQgYXMga2V5IGFuZCBhc3NpZ24gaXRzIGRlZmF1bHQgc3RhcnRpbmcgdmFsdWVzCiAgICAvLyBzZWxmLmJveF9nYW1lX3N0YXRlW3NlbGYuZ2FtZV9pZF0gPSBzdGMuR2FtZVN0YXRlKAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImdhbWVfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2FtZV9pZCBleGlzdHMKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAic18iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMxMS0zMjkKICAgIC8vICMgQ3JlYXRlIGEgZ2FtZSBzdGF0ZSBib3ggd2l0aCB1bmlxdWUgZ2FtZSBJRCBhcyBrZXkgYW5kIGFzc2lnbiBpdHMgZGVmYXVsdCBzdGFydGluZyB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbc2VsZi5nYW1lX2lkXSA9IHN0Yy5HYW1lU3RhdGUoCiAgICAvLyAgICAgc3Rha2luZ19maW5hbGl6ZWQ9YXJjNC5Cb29sKEZhbHNlKSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAgcXVpY2tfcGxheV9lbmFibGVkPWFyYzQuQm9vbChxdWlja19wbGF5X2VuYWJsZWQpLAogICAgLy8gICAgIG1heF9wbGF5ZXJzPWFyYzQuVUludDgobWF4X3BsYXllcnMpLAogICAgLy8gICAgIGFjdGl2ZV9wbGF5ZXJzPWFyYzQuVUludDgoMSksCiAgICAvLyAgICAgZmlyc3RfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICBzZWNvbmRfcGxhY2Vfc2NvcmU9YXJjNC5VSW50OCgwKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIHRvcF9zY29yZT1hcmM0LlVJbnQ4KDApLAogICAgLy8gICAgIGJveF9wX3N0YXJ0X3Bvcz1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKSwKICAgIC8vICAgICBleHBpcnlfdHM9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBjc3QuUEhBU0VfRVhQSVJZX0lOVEVSVkFMKSwKICAgIC8vICAgICBwcml6ZV9wb29sPWFyYzQuVUludDY0KHN0YWtlX3BheS5hbW91bnQpLAogICAgLy8gICAgIGFkbWluX2FkZHJlc3M9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIGZpcnN0X3BsYWNlX2FkZHJlc3M9YXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgIHNlY29uZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0aGlyZF9wbGFjZV9hZGRyZXNzPWFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICB0b3BzY29yZXJfYWRkcmVzcz1hcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyApCiAgICB1bmNvdmVyIDMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzMxLTMzMgogICAgLy8gIyBTZXQgdGhlIGhvc3RpbmcgZ2FtZSBmbGFnIHByb3BlcnR5IGluIHNlbmRlcidzIGdhbWUgcmVnaXN0ZXIgYm94IHRvIFRydWUKICAgIC8vIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0uaG9zdGluZ19nYW1lID0gYXJjNC5Cb29sKAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjMzMS0zMzQKICAgIC8vICMgU2V0IHRoZSBob3N0aW5nIGdhbWUgZmxhZyBwcm9wZXJ0eSBpbiBzZW5kZXIncyBnYW1lIHJlZ2lzdGVyIGJveCB0byBUcnVlCiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdLmhvc3RpbmdfZ2FtZSA9IGFyYzQuQm9vbCgKICAgIC8vICAgICBUcnVlICAjIG5vcWE6IEZCVDAwMwogICAgLy8gKQogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyAxCiAgICBzZXRiaXQKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzM2LTMzOAogICAgLy8gIyBDcmVhdGUgYSBnYW1lIHBsYXllcnMgYm94IHdpdGggdW5pcXVlIGdhbWUgSUQgYXMga2V5CiAgICAvLyAjIEFzc2lnbiB6ZXJvZWQgYnl0ZXMgdG8gc3RvcmUgYWxsIHBsYXllciBhZGRyZXNzZXMgKDMyIGJ5dGVzIHBlciBwbGF5ZXIpCiAgICAvLyBzZWxmLmJveF9nYW1lX3BsYXllcnNbc2VsZi5nYW1lX2lkXSA9IG9wLmJ6ZXJvKGNzdC5BRERSRVNTX1NJWkUgKiBtYXhfcGxheWVycykKICAgIHVuY292ZXIgMgogICAgYnplcm8KICAgIGJ5dGVjXzMgLy8gInBfIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNDQKICAgIC8vIGdhbWVfcGxheWVyc19icmVmLnJlcGxhY2UoMCwgVHhuLnNlbmRlci5ieXRlcykKICAgIGludGNfMCAvLyAwCiAgICB0eG4gU2VuZGVyCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNDYtMzQ3CiAgICAvLyAjIEluY3JlbWVudCBnYW1lIGlkIGJ5IDEgZm9yIG5leHQgbmV3IGdhbWUgaW5zdGFuY2UKICAgIC8vIHNlbGYuZ2FtZV9pZCArPSAxCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnl0ZWMgOCAvLyAiZ2FtZV9pZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCm5ld19nYW1lX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIG5ld19nYW1lX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LmpvaW5fZ2FtZShnYW1lX2lkOiB1aW50NjQsIHN0YWtlX3BheTogdWludDY0KSAtPiB2b2lkOgpqb2luX2dhbWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM0OS0zNTUKICAgIC8vICMgSm9pbiBleGlzdGluZyBnYW1lIGluc3RhbmNlCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBqb2luX2dhbWUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBnYW1lX2lkOiBVSW50NjQsCiAgICAvLyAgICAgc3Rha2VfcGF5OiBndHhuLlBheW1lbnRUcmFuc2FjdGlvbiwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNTYtMzU3CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAyLCBlcnIuSU5WQUxJRF9HUk9VUF9TSVpFCiAgICBnbG9iYWwgR3JvdXBTaXplCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGdyb3VwIHNpemUuIEVuc3VyZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gaW4gZ3JvdXAgaXMgd2l0aGluIHZhbGlkIGJvdW5kcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzU4CiAgICAvLyBhc3NlcnQgZ2FtZV9pZCBpbiBzZWxmLmJveF9nYW1lX3N0YXRlLCBlcnIuR0FNRV9JRF9OT1RfRk9VTkQKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAic18iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBnYW1lIHN0YXRlIG5vdCBmb3VuZC4gQ2hlY2sgaWYgZ2FtZSBJRCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM2MC0zNjMKICAgIC8vICMgUmV0cmlldmUgY3VycmVudCBnYW1lIHN0YXRlIGRhdGEgZnJvbSBib3ggdXNpbmcgdGhlIGdhbWUgaWQgcGFyYW1ldGVyCiAgICAvLyBnYW1lX3N0YXRlID0gc2VsZi5ib3hfZ2FtZV9zdGF0ZVsKICAgIC8vICAgICBnYW1lX2lkCiAgICAvLyBdLmNvcHkoKSAgIyBNYWtlIGEgY29weSBvZiB0aGUgZ2FtZSBzdGF0ZSBlbHNlIGltbXV0YWJsZQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV9zdGF0ZSBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzY1LTM2NgogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZ2FtZV90cm9waHksIGVyci5CT1hfTk9UX0ZPVU5ECiAgICBieXRlY18yIC8vICJ0XyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBub3QgZm91bmQuIEVuc3VyZSB0aGUgYm94IHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyB3YXMgY3JlYXRlZCBhbmQgc3RpbGwgZXhpc3RzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNjcKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyIGluIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsIGVyci5CT1hfTk9UX0ZPVU5ECiAgICBieXRlY18wIC8vICJyXyIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQm94IG5vdCBmb3VuZC4gRW5zdXJlIHRoZSBib3ggeW91IGFyZSB0cnlpbmcgdG8gYWNjZXNzIHdhcyBjcmVhdGVkIGFuZCBzdGlsbCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM2OQogICAgLy8gYXNzZXJ0IHN0YWtlX3BheS5hbW91bnQgPT0gY3N0LlNUQUtFX0FNT1VOVCwgZXJyLklOVkFMSURfU1RBS0VfUEFZX0ZFRQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBbW91bnQKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwMDAKICAgID09CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGZ1bmRzLiBTdGFrZSBwYXkgYW1vdW50IGlzIG5vdCBlbm91Z2ggdG8gY292ZXIgc3Rha2luZyByZXF1aXJlbWVudHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM3MAogICAgLy8gYXNzZXJ0IHN0YWtlX3BheS5zZW5kZXIgPT0gVHhuLnNlbmRlciwgZXJyLklOVkFMSURfU1RBS0VfUEFZX1NFTkRFUgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gU3Rha2UgcGF5bWVudCBzZW5kZXIgYWRkcmVzcyBtdXN0IG1hdGNoIHRyYW5zYWN0aW9uIHNlbmRlciBhZGRyZXNzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNzIKICAgIC8vIHN0YWtlX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6MzcxLTM3MwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzdGFrZV9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfU1RBS0VfUEFZX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gU3Rha2UgcGF5bWVudCByZWNlaXZlciBhZGRyZXNzIG11c3QgbWF0Y2ggYXBwbGljYXRpb24gYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzc2CiAgICAvLyBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM3OAogICAgLy8gcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0uYWN0aXZlX3BsYXllcnMubmF0aXZlLAogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICBnZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM3NC0zODAKICAgIC8vIGFzc2VydCBub3Qgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0uYWN0aXZlX3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICksIGVyci5QTEFZRVJfQUNUSVZFCiAgICBmcmFtZV9kaWcgLTIKICAgIHVuY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNzcKICAgIC8vIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgYnl0ZWNfMyAvLyAicF8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM3NC0zODAKICAgIC8vIGFzc2VydCBub3Qgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0uYWN0aXZlX3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICksIGVyci5QTEFZRVJfQUNUSVZFCiAgICBkaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozNzkKICAgIC8vIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM3NC0zODAKICAgIC8vIGFzc2VydCBub3Qgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0uYWN0aXZlX3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICksIGVyci5QTEFZRVJfQUNUSVZFCiAgICBjYWxsc3ViIGNoZWNrX2FjY19pbl9nYW1lCiAgICAhCiAgICBhc3NlcnQgLy8gUGxheWVyIHdpdGggdGhpcyBhZGRyZXNzIG11c3Qgbm90IGJlIGFuIGFjdGl2ZSBnYW1lIHBhcnRpY2lwYW50IGluIHRoZSBnYW1lLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozODIKICAgIC8vIGFzc2VydCBub3QgZ2FtZV9zdGF0ZS5zdGFraW5nX2ZpbmFsaXplZC5uYXRpdmUsIGVyci5TVEFLSU5HX0ZJTkFMX0ZMQUcKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEdhbWUgc3RhdGUgc3Rha2luZyBmaW5hbGl6ZWQgYm9vbGVhbiB2YWx1ZSBtaXNtYXRjaC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzg0CiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cyA+PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZGlnIDIKICAgIGV4dHJhY3QgOSA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgYj49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM4My0zODUKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS5leHBpcnlfdHMgPj0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICksIGVyci5USU1FX0NPTlNUUkFJTlRfVklPTEFUSU9OCiAgICBhc3NlcnQgLy8gSW52YWxpZCB0aW1lIGZyYW1lLiBDYWxsIG1hZGUgb3V0c2lkZSB0aGUgcGVybWl0dGVkIGJsb2NrIG9yIHRpbWVzdGFtcCByYW5nZS4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzg2CiAgICAvLyBhc3NlcnQgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycyA8PSBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzLCBlcnIuRlVMTF9HQU1FX0xPQkJZCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMwogICAgZXh0cmFjdCAxIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBiPD0KICAgIGFzc2VydCAvLyBOdW1iZXIgb2YgYWN0aXZlIHBsYXllcnMgbXVzdCBub3QgZXhjZWVkIG51bWJlciBvZiBtYXggcGxheWVycy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzg4CiAgICAvLyBnYW1lX3N0YXRlLmJveF9wX3N0YXJ0X3Bvcy5uYXRpdmUKICAgIGRpZyAyCiAgICBwdXNoaW50IDcgLy8gNwogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzg5CiAgICAvLyA8IGNzdC5BRERSRVNTX1NJWkUgKiBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzLm5hdGl2ZQogICAgZGlnIDMKICAgIGludGNfMSAvLyAxCiAgICBnZXRieXRlCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzg4LTM4OQogICAgLy8gZ2FtZV9zdGF0ZS5ib3hfcF9zdGFydF9wb3MubmF0aXZlCiAgICAvLyA8IGNzdC5BRERSRVNTX1NJWkUgKiBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzLm5hdGl2ZQogICAgZGlnIDEKICAgID4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Mzg3LTM5MAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBnYW1lX3N0YXRlLmJveF9wX3N0YXJ0X3Bvcy5uYXRpdmUKICAgIC8vICAgICA8IGNzdC5BRERSRVNTX1NJWkUgKiBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzLm5hdGl2ZQogICAgLy8gKSwgZXJyLkJPWF9QX1NUQVJUX1BPU19PVkVSRkxPVwogICAgYXNzZXJ0IC8vIFBsYXllcnMgYm94IHN0YXJ0IHBvc2l0aW9uIGluZGV4IG92ZXJmbG93LiBDYW4gbm90IHN0b3JlIG1vcmUgYWRkcmVzc2VzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozOTQKICAgIC8vIGtleT1zZWxmLmJveF9nYW1lX3BsYXllcnMua2V5X3ByZWZpeCArIG9wLml0b2IoZ2FtZV9pZCkKICAgIGJ5dGVjXzMgLy8gInBfIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozOTItMzk1CiAgICAvLyAjIEZvciBnYW1lIHBsYXllcnMgYm94LCBzdG9yZSB0aGUgc2VuZGVyJ3MgYWRkcmVzcyBhdCB0aGUgY3VycmVudCBnYW1lIHN0YXRlIGJveCBwXyBzdGFydCBwb3NpdGlvbgogICAgLy8gZ2FtZV9wbGF5ZXJzX2JyZWYgPSBCb3hSZWYoCiAgICAvLyAgICAga2V5PXNlbGYuYm94X2dhbWVfcGxheWVycy5rZXlfcHJlZml4ICsgb3AuaXRvYihnYW1lX2lkKQogICAgLy8gKQogICAgdW5jb3ZlciA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM5NAogICAgLy8ga2V5PXNlbGYuYm94X2dhbWVfcGxheWVycy5rZXlfcHJlZml4ICsgb3AuaXRvYihnYW1lX2lkKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjM5NgogICAgLy8gZ2FtZV9wbGF5ZXJzX2JyZWYucmVwbGFjZShnYW1lX3N0YXRlLmJveF9wX3N0YXJ0X3Bvcy5uYXRpdmUsIFR4bi5zZW5kZXIuYnl0ZXMpCiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTozOTgtMzk5CiAgICAvLyAjIEluY3JlbWVudCBudW1iZXIgb2YgYWN0aXZlIHBsYXllcnMgYnkgMQogICAgLy8gZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycyA9IGFyYzQuVUludDgoZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgKyAxKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MDMKICAgIC8vIGdhbWVfc3RhdGUuYm94X3Bfc3RhcnRfcG9zLm5hdGl2ZSArIGNzdC5BRERSRVNTX1NJWkUKICAgIGR1cAogICAgcHVzaGludCA3IC8vIDcKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMzIKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDAxLTQwNAogICAgLy8gIyBJbmNyZW1lbnQgY3VycmVudCBnYW1lIHBsYXllcnMgYm94IG9mZnNldCBieSAzMiBzbyB0aGF0IG5leHQgcGxheWVyIGFkZHJlc3MgY2FuIGJlIHN0b3JlZAogICAgLy8gZ2FtZV9zdGF0ZS5ib3hfcF9zdGFydF9wb3MgPSBhcmM0LlVJbnQxNigKICAgIC8vICAgICBnYW1lX3N0YXRlLmJveF9wX3N0YXJ0X3Bvcy5uYXRpdmUgKyBjc3QuQUREUkVTU19TSVpFCiAgICAvLyApCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDA4CiAgICAvLyBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlICsgc3Rha2VfcGF5LmFtb3VudAogICAgZHVwCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICBleHRyYWN0X3VpbnQ2NAogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQwNi00MDkKICAgIC8vICMgSW5jcmVtZW50IHByaXplIHBvb2wgYnkgc3Rha2UgcGF5bWVudCBhbW91bnQKICAgIC8vIGdhbWVfc3RhdGUucHJpemVfcG9vbCA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgKyBzdGFrZV9wYXkuYW1vdW50CiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MTEtNDEyCiAgICAvLyAjIENoZWNrIGlmIGdhbWUgaXMgbGl2ZSBvbiBldmVyeSBjYWxsCiAgICAvLyBzcnQuaXNfZ2FtZV9saXZlKGdhbWVfaWQ9Z2FtZV9pZCwgZ2FtZV9zdGF0ZT1nYW1lX3N0YXRlKQogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjYWxsc3ViIGlzX2dhbWVfbGl2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MTQtNDE1CiAgICAvLyAjIENvcHkgdGhlIG1vZGlmaWVkIGdhbWUgc3RhdGUgYW5kIHN0b3JlIGl0IGFzIG5ldyB2YWx1ZSBvZiBib3gKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0gPSBnYW1lX3N0YXRlLmNvcHkoKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnBpZW91dC5jb250cmFjdC5QaWVvdXQuc2V0X2dhbWVfY29tbWl0KGdhbWVfaWQ6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0X2dhbWVfY29tbWl0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MTctNDIyCiAgICAvLyAjIFNldCBhIGNvbW1pdG1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2V0IG9uLWNoYWluIHJhbmRvbW5lc3MgYW5kIHBsYXkgdGhlIGdhbWUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9nYW1lX2NvbW1pdCgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIGdhbWVfaWQ6IFVJbnQ2NCwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MjMtNDI0CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAxLCBlcnIuU1RBTkRBTE9ORV9UWE5fT05MWQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBncm91cCBzaXplLiBUaGlzIGFwcCBjYWxsIGNhbiBvbmx5IHRha2Ugc3RhbmRhbG9uZSB0cmFuc2FjdGlvbnMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQyNQogICAgLy8gYXNzZXJ0IGdhbWVfaWQgaW4gc2VsZi5ib3hfZ2FtZV9zdGF0ZSwgZXJyLkdBTUVfSURfTk9UX0ZPVU5ECiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gInNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggZ2FtZSBzdGF0ZSBub3QgZm91bmQuIENoZWNrIGlmIGdhbWUgSUQgZXhpc3RzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MjYKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyIGluIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsIGVyci5CT1hfTk9UX0ZPVU5ECiAgICBieXRlY18wIC8vICJyXyIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQm94IG5vdCBmb3VuZC4gRW5zdXJlIHRoZSBib3ggeW91IGFyZSB0cnlpbmcgdG8gYWNjZXNzIHdhcyBjcmVhdGVkIGFuZCBzdGlsbCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQyNy00MjkKICAgIC8vIGFzc2VydCBzZWxmLmJveF9nYW1lX3N0YXRlWwogICAgLy8gICAgIGdhbWVfaWQKICAgIC8vIF0uc3Rha2luZ19maW5hbGl6ZWQubmF0aXZlLCBlcnIuU1RBS0lOR19GSU5BTF9GTEFHCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV9zdGF0ZSBlbnRyeSBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGFzc2VydCAvLyBHYW1lIHN0YXRlIHN0YWtpbmcgZmluYWxpemVkIGJvb2xlYW4gdmFsdWUgbWlzbWF0Y2guCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQzMwogICAgLy8gYWNjb3VudD1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MzUKICAgIC8vIHBsYXllcl9jb3VudD1zZWxmLmJveF9nYW1lX3N0YXRlW2dhbWVfaWRdLm1heF9wbGF5ZXJzLm5hdGl2ZSwKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICBnZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQzMS00MzcKICAgIC8vIHNydC5jaGVja19hY2NfaW5fZ2FtZSggICMgbm9xYTogRTcxMgogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0ubWF4X3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQzNAogICAgLy8gYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICBieXRlY18zIC8vICJwXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDMxLTQzNwogICAgLy8gc3J0LmNoZWNrX2FjY19pbl9nYW1lKCAgIyBub3FhOiBFNzEyCiAgICAvLyAgICAgZ2FtZV9pZD1nYW1lX2lkLAogICAgLy8gICAgIGFjY291bnQ9VHhuLnNlbmRlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICAgICBwbGF5ZXJfY291bnQ9c2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXS5tYXhfcGxheWVycy5uYXRpdmUsCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKQogICAgdW5jb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQzNgogICAgLy8gY2xlYXJfcGxheWVyPUZhbHNlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDMxLTQzNwogICAgLy8gc3J0LmNoZWNrX2FjY19pbl9nYW1lKCAgIyBub3FhOiBFNzEyCiAgICAvLyAgICAgZ2FtZV9pZD1nYW1lX2lkLAogICAgLy8gICAgIGFjY291bnQ9VHhuLnNlbmRlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICAgICBwbGF5ZXJfY291bnQ9c2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXS5tYXhfcGxheWVycy5uYXRpdmUsCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKQogICAgY2FsbHN1YiBjaGVja19hY2NfaW5fZ2FtZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0MzgKICAgIC8vID09IFRydWUKICAgIGludGNfMSAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQzMS00MzgKICAgIC8vIHNydC5jaGVja19hY2NfaW5fZ2FtZSggICMgbm9xYTogRTcxMgogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0ubWF4X3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICkKICAgIC8vID09IFRydWUKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQzMC00MzkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc3J0LmNoZWNrX2FjY19pbl9nYW1lKCAgIyBub3FhOiBFNzEyCiAgICAvLyAgICAgICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICAgICAgYWNjb3VudD1UeG4uc2VuZGVyLAogICAgLy8gICAgICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICAgICAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0ubWF4X3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgICAgICBjbGVhcl9wbGF5ZXI9RmFsc2UsCiAgICAvLyAgICAgKQogICAgLy8gICAgID09IFRydWUKICAgIC8vICksIGVyci5QTEFZRVJfTk9UX0ZPVU5ECiAgICBhc3NlcnQgLy8gQWNjb3VudCBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBhY3RpdmUgcGxheWVyIGZvciB0aGlzIGdhbWUuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ0MS00NDIKICAgIC8vICMgUmV0cmlldmUgY3VycmVudCBnYW1lIHJlZ2lzdGVyIGRhdGEgZnJvbSBib3ggdXNpbmcgdGhlIGdhbWUgaWQgcGFyYW1ldGVyCiAgICAvLyBnYW1lX3JlZ2lzdGVyID0gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlclsKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NDMKICAgIC8vIFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDQxLTQ0NAogICAgLy8gIyBSZXRyaWV2ZSBjdXJyZW50IGdhbWUgcmVnaXN0ZXIgZGF0YSBmcm9tIGJveCB1c2luZyB0aGUgZ2FtZSBpZCBwYXJhbWV0ZXIKICAgIC8vIGdhbWVfcmVnaXN0ZXIgPSBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyWwogICAgLy8gICAgIFR4bi5zZW5kZXIKICAgIC8vIF0uY29weSgpICAjIE1ha2UgYSBjb3B5IG9mIHRoZSBnYW1lIHN0YXRlIGVsc2UgaW1tdXRhYmxlCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NDYtNDQ3CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBnYW1lX3JlZ2lzdGVyLmNvbW1pdF9yYW5kX3JvdW5kID09IDAsIGVyci5OT05fWkVST19DT01NSVRfUkFORF9ST1VORAogICAgZHVwCiAgICBleHRyYWN0IDEwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA2IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgYj09CiAgICBhc3NlcnQgLy8gQ29tbWl0IFJhbmQgUm91bmQgbm90IGVtcHR5LiBWYWx1ZSBtdXN0IGJlIHplcm8gdG8gb2J0YWluIGEgdmFsaWQgb25lLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NDktNDUwCiAgICAvLyAjIFVwZGF0ZSBnYW1lIHJlZ2lzdGVyIGJveCBkYXRhIGNvbW1pdCByYW5kIHJvdW5kIGFuZCBnYW1lIGlkIHByb3BlcnRpZXMgd2l0aCBuZXcgdmFsdWVzCiAgICAvLyBnYW1lX3JlZ2lzdGVyLmNvbW1pdF9yYW5kX3JvdW5kID0gYXJjNC5VSW50NjQoR2xvYmFsLnJvdW5kICsgNCkKICAgIGdsb2JhbCBSb3VuZAogICAgcHVzaGludCA0IC8vIDQKICAgICsKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ1MQogICAgLy8gZ2FtZV9yZWdpc3Rlci5nYW1lX2lkID0gYXJjNC5VSW50NjQoZ2FtZV9pZCkKICAgIHN3YXAKICAgIHJlcGxhY2UyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDUzLTQ1NAogICAgLy8gIyBDb3B5IHRoZSBtb2RpZmllZCBnYW1lIHN0YXRlIGFuZCBzdG9yZSBpdCBhcyBuZXcgdmFsdWUgb2YgYm94CiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdID0gZ2FtZV9yZWdpc3Rlci5jb3B5KCkKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC51cF9yZWZfYnVkZ2V0X2Zvcl9wbGF5X2dhbWUoZ2FtZV9pZDogdWludDY0KSAtPiB2b2lkOgp1cF9yZWZfYnVkZ2V0X2Zvcl9wbGF5X2dhbWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ1Ni00NTgKICAgIC8vICMgTWFrZSBhcHAgY2FsbCB0byBhZGQgZXh0cmEgcmVzb3VyY2UgcmVmZXJlbmNlIGJ1ZGdldCwgbXVzdCBiZSBncm91cGVkIHcvIHBsYXkgZ2FtZSBhYmltZXRob2QKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHVwX3JlZl9idWRnZXRfZm9yX3BsYXlfZ2FtZShzZWxmLCBnYW1lX2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDU5LTQ2MAogICAgLy8gIyBHZXQgdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBpbiB0aGUgZ3JvdXAKICAgIC8vIHNlY29uZF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKGdyb3VwX2luZGV4PTEpCiAgICBpbnRjXzEgLy8gMQogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXBwbAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NjItNDYzCiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAyLCBlcnIuSU5WQUxJRF9HUk9VUF9TSVpFCiAgICBnbG9iYWwgR3JvdXBTaXplCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGdyb3VwIHNpemUuIEVuc3VyZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gaW4gZ3JvdXAgaXMgd2l0aGluIHZhbGlkIGJvdW5kcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDY0CiAgICAvLyBhc3NlcnQgVHhuLmdyb3VwX2luZGV4ID09IDAsIGVyci5JTlZBTElEX0dST1VQX0lEWAogICAgdHhuIEdyb3VwSW5kZXgKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGdyb3VwIGluZGV4LiBFbnN1cmUgdHJhbnNhY3Rpb24gZ3JvdXAgaW5kZXggbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmFsdWUuIAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NjUKICAgIC8vIGFzc2VydCBnYW1lX2lkIGluIHNlbGYuYm94X2dhbWVfc3RhdGUsIGVyci5HQU1FX0lEX05PVF9GT1VORAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBieXRlYyA0IC8vICJzXyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBnYW1lIHN0YXRlIG5vdCBmb3VuZC4gQ2hlY2sgaWYgZ2FtZSBJRCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ1OS00NjAKICAgIC8vICMgR2V0IHRoZSBzZWNvbmQgdHJhbnNhY3Rpb24gaW4gdGhlIGdyb3VwCiAgICAvLyBzZWNvbmRfdHhuID0gZ3R4bi5BcHBsaWNhdGlvbkNhbGxUcmFuc2FjdGlvbihncm91cF9pbmRleD0xKQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDY3CiAgICAvLyBhc3NlcnQgc2Vjb25kX3R4bi5hcHBfaWQgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQsIGVyci5BUFBfSURfTUlTTUFUQ0gKICAgIGd0eG5zIEFwcGxpY2F0aW9uSUQKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAogICAgPT0KICAgIGFzc2VydCAvLyBBcHBsaWNhdGlvbiBJRCBtaXNtYXRjaC4gQXBwIElEIG11c3QgYmUgc2FtZSBhY3Jvc3MgYWxsIHRyYW5zYWN0aW9ucyBpbiBncm91cC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDU5LTQ2MAogICAgLy8gIyBHZXQgdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBpbiB0aGUgZ3JvdXAKICAgIC8vIHNlY29uZF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKGdyb3VwX2luZGV4PTEpCiAgICBpbnRjXzEgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NjgKICAgIC8vIGFzc2VydCBzZWNvbmRfdHhuLnNlbmRlciA9PSBUeG4uc2VuZGVyLCBlcnIuU0VOREVSX01JU01BVENICiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gU2VuZGVyIG1pc21hdGNoLiBTZW5kZXIgbXVzdCBiZSBzYW1lIGFkZHJlc3MgYWNyb3NzIGFsbCB0cmFuc2FjdGlvbnMgaW4gZ3JvdXAuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ1OS00NjAKICAgIC8vICMgR2V0IHRoZSBzZWNvbmQgdHJhbnNhY3Rpb24gaW4gdGhlIGdyb3VwCiAgICAvLyBzZWNvbmRfdHhuID0gZ3R4bi5BcHBsaWNhdGlvbkNhbGxUcmFuc2FjdGlvbihncm91cF9pbmRleD0xKQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDY5CiAgICAvLyBhc3NlcnQgc2Vjb25kX3R4bi5hcHBfYXJncygwKSA9PSBhcmM0LmFyYzRfc2lnbmF0dXJlKAogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ2OS00NzEKICAgIC8vIGFzc2VydCBzZWNvbmRfdHhuLmFwcF9hcmdzKDApID09IGFyYzQuYXJjNF9zaWduYXR1cmUoCiAgICAvLyAgICAgInBsYXlfZ2FtZSh1aW50NjQpdm9pZCIKICAgIC8vICksIGVyci5JTlZBTElEX01FVEhPRF9TRUxFQ1RPUgogICAgYnl0ZWMgMTEgLy8gbWV0aG9kICJwbGF5X2dhbWUodWludDY0KXZvaWQiCiAgICA9PQogICAgYXNzZXJ0IC8vIFRyYW5zYWN0aW9uIGF0IHRoaXMgZ3JvdXAgaW5kZXggbXVzdCBoYXZlIGV4YWN0IHJlcXVpcmVkIG1ldGhvZCBzZWxlY3Rvci4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDU5LTQ2MAogICAgLy8gIyBHZXQgdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBpbiB0aGUgZ3JvdXAKICAgIC8vIHNlY29uZF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKGdyb3VwX2luZGV4PTEpCiAgICBpbnRjXzEgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0NzMKICAgIC8vIGFzc2VydCBzZWNvbmRfdHhuLmFwcF9hcmdzKDEpID09IG9wLml0b2IoZ2FtZV9pZCksIGVyci5JTlZBTElEX0dBTUVfSUQKICAgIGR1cAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgR2FtZSBJRC4gQm94IEdhbWUgUmVnaXN0ZXIgR2FtZSBJRCBtdXN0IGJlIGEgY2VydGFpbiB2YWx1ZSBvciBtYXRjaCBHYW1lIElEIGFyZy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDc1CiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdLmdhbWVfaWQubmF0aXZlCiAgICBieXRlY18wIC8vICJyXyIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDc0LTQ3NgogICAgLy8gYXNzZXJ0IHNlY29uZF90eG4uYXBwX2FyZ3MoMSkgPT0gb3AuaXRvYigKICAgIC8vICAgICBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdLmdhbWVfaWQubmF0aXZlCiAgICAvLyApCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ3NwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0uZ2FtZV9pZC5uYXRpdmUgPT0gZ2FtZV9pZAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyIGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDIKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LnBsYXlfZ2FtZShnYW1lX2lkOiB1aW50NjQpIC0+IHZvaWQ6CnBsYXlfZ2FtZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDc5LTQ4MQogICAgLy8gIyBQbGF5IHRoZSBnYW1lLCByZXNvbHZlIHRoZSBwbGF5ZXIncyBzY29yZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdhbWUgaW5zdGFuY2UsIHVwZGF0ZSBnYW1lIHN0YXRlIGFjY29yZGluZ2x5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBwbGF5X2dhbWUoc2VsZiwgZ2FtZV9pZDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAxMAogICAgcHVzaGJ5dGVzICIiCiAgICBkdXBuIDYKCnBsYXlfZ2FtZV93aGlsZV90b3BANDE6CiAgICBwdXNoaW50IDE5NjEwIC8vIDE5NjEwCiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICA+CiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfd2hpbGVANDYKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBieXRlYyAxMiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjIDEyIC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBiIHBsYXlfZ2FtZV93aGlsZV90b3BANDEKCnBsYXlfZ2FtZV9hZnRlcl93aGlsZUA0NjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDg1LTQ4NgogICAgLy8gIyBHZXQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBncm91cAogICAgLy8gZmlyc3RfdHhuID0gZ3R4bi5BcHBsaWNhdGlvbkNhbGxUcmFuc2FjdGlvbihncm91cF9pbmRleD0wKQogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFwcGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDg4LTQ4OQogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgR2xvYmFsLmdyb3VwX3NpemUgPT0gMiwgZXJyLklOVkFMSURfR1JPVVBfU0laRQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBncm91cCBzaXplLiBFbnN1cmUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGluIGdyb3VwIGlzIHdpdGhpbiB2YWxpZCBib3VuZHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ5MAogICAgLy8gYXNzZXJ0IFR4bi5ncm91cF9pbmRleCA9PSAxLCBlcnIuSU5WQUxJRF9HUk9VUF9JRFgKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGdyb3VwIGluZGV4LiBFbnN1cmUgdHJhbnNhY3Rpb24gZ3JvdXAgaW5kZXggbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmFsdWUuIAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0OTIKICAgIC8vIGFzc2VydCBnYW1lX2lkIGluIHNlbGYuYm94X2dhbWVfc3RhdGUsIGVyci5HQU1FX0lEX05PVF9GT1VORAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYnl0ZWMgNCAvLyAic18iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBnYW1lIHN0YXRlIG5vdCBmb3VuZC4gQ2hlY2sgaWYgZ2FtZSBJRCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ5MwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgaW4gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwgZXJyLkJPWF9OT1RfRk9VTkQKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggbm90IGZvdW5kLiBFbnN1cmUgdGhlIGJveCB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3Mgd2FzIGNyZWF0ZWQgYW5kIHN0aWxsIGV4aXN0cy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDk0CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZ2FtZV90cm9waHksIGVyci5CT1hfTk9UX0ZPVU5ECiAgICBieXRlY18yIC8vICJ0XyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBub3QgZm91bmQuIEVuc3VyZSB0aGUgYm94IHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyB3YXMgY3JlYXRlZCBhbmQgc3RpbGwgZXhpc3RzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0ODUtNDg2CiAgICAvLyAjIEdldCB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4gdGhlIGdyb3VwCiAgICAvLyBmaXJzdF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKGdyb3VwX2luZGV4PTApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0OTYKICAgIC8vIGFzc2VydCBmaXJzdF90eG4uYXBwX2lkID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLCBlcnIuQVBQX0lEX01JU01BVENICiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICBhc3NlcnQgLy8gQXBwbGljYXRpb24gSUQgbWlzbWF0Y2guIEFwcCBJRCBtdXN0IGJlIHNhbWUgYWNyb3NzIGFsbCB0cmFuc2FjdGlvbnMgaW4gZ3JvdXAuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ4NS00ODYKICAgIC8vICMgR2V0IHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGUgZ3JvdXAKICAgIC8vIGZpcnN0X3R4biA9IGd0eG4uQXBwbGljYXRpb25DYWxsVHJhbnNhY3Rpb24oZ3JvdXBfaW5kZXg9MCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ5NwogICAgLy8gYXNzZXJ0IGZpcnN0X3R4bi5zZW5kZXIgPT0gVHhuLnNlbmRlciwgZXJyLlNFTkRFUl9NSVNNQVRDSAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIFNlbmRlciBtaXNtYXRjaC4gU2VuZGVyIG11c3QgYmUgc2FtZSBhZGRyZXNzIGFjcm9zcyBhbGwgdHJhbnNhY3Rpb25zIGluIGdyb3VwLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0ODUtNDg2CiAgICAvLyAjIEdldCB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4gdGhlIGdyb3VwCiAgICAvLyBmaXJzdF90eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKGdyb3VwX2luZGV4PTApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo0OTgKICAgIC8vIGFzc2VydCBmaXJzdF90eG4uYXBwX2FyZ3MoMCkgPT0gYXJjNC5hcmM0X3NpZ25hdHVyZSgKICAgIGR1cAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NDk4LTUwMAogICAgLy8gYXNzZXJ0IGZpcnN0X3R4bi5hcHBfYXJncygwKSA9PSBhcmM0LmFyYzRfc2lnbmF0dXJlKAogICAgLy8gICAgICJ1cF9yZWZfYnVkZ2V0X2Zvcl9wbGF5X2dhbWUodWludDY0KXZvaWQiCiAgICAvLyApLCBlcnIuSU5WQUxJRF9NRVRIT0RfU0VMRUNUT1IKICAgIGJ5dGVjIDEwIC8vIG1ldGhvZCAidXBfcmVmX2J1ZGdldF9mb3JfcGxheV9nYW1lKHVpbnQ2NCl2b2lkIgogICAgPT0KICAgIGFzc2VydCAvLyBUcmFuc2FjdGlvbiBhdCB0aGlzIGdyb3VwIGluZGV4IG11c3QgaGF2ZSBleGFjdCByZXF1aXJlZCBtZXRob2Qgc2VsZWN0b3IuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjQ4NS00ODYKICAgIC8vICMgR2V0IHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGUgZ3JvdXAKICAgIC8vIGZpcnN0X3R4biA9IGd0eG4uQXBwbGljYXRpb25DYWxsVHJhbnNhY3Rpb24oZ3JvdXBfaW5kZXg9MCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUwMgogICAgLy8gYXNzZXJ0IGZpcnN0X3R4bi5hcHBfYXJncygxKSA9PSBUeG4uYXBwbGljYXRpb25fYXJncygxKSwgZXJyLklOVkFMSURfR0FNRV9JRAogICAgaW50Y18xIC8vIDEKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBHYW1lIElELiBCb3ggR2FtZSBSZWdpc3RlciBHYW1lIElEIG11c3QgYmUgYSBjZXJ0YWluIHZhbHVlIG9yIG1hdGNoIEdhbWUgSUQgYXJnLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MDQKICAgIC8vIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0uZ2FtZV9pZC5uYXRpdmUKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciBlbnRyeSBleGlzdHMKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MDMtNTA1CiAgICAvLyBhc3NlcnQgZmlyc3RfdHhuLmFwcF9hcmdzKDEpID09IG9wLml0b2IoCiAgICAvLyAgICAgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXS5nYW1lX2lkLm5hdGl2ZQogICAgLy8gKQogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MTAKICAgIC8vIGFjY291bnQ9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTEyCiAgICAvLyBwbGF5ZXJfY291bnQ9c2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXS5tYXhfcGxheWVycy5uYXRpdmUsCiAgICBkaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfc3RhdGUgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Ynl0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MDgtNTE0CiAgICAvLyBzcnQuY2hlY2tfYWNjX2luX2dhbWUoICAjIG5vcWE6IEU3MTIKICAgIC8vICAgICBnYW1lX2lkPWdhbWVfaWQsCiAgICAvLyAgICAgYWNjb3VudD1UeG4uc2VuZGVyLAogICAgLy8gICAgIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgIHBsYXllcl9jb3VudD1zZWxmLmJveF9nYW1lX3N0YXRlW2dhbWVfaWRdLm1heF9wbGF5ZXJzLm5hdGl2ZSwKICAgIC8vICAgICBjbGVhcl9wbGF5ZXI9VHJ1ZSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUxMQogICAgLy8gYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICBieXRlY18zIC8vICJwXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTA4LTUxNAogICAgLy8gc3J0LmNoZWNrX2FjY19pbl9nYW1lKCAgIyBub3FhOiBFNzEyCiAgICAvLyAgICAgZ2FtZV9pZD1nYW1lX2lkLAogICAgLy8gICAgIGFjY291bnQ9VHhuLnNlbmRlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICAgICBwbGF5ZXJfY291bnQ9c2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXS5tYXhfcGxheWVycy5uYXRpdmUsCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPVRydWUsCiAgICAvLyApCiAgICB1bmNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTEzCiAgICAvLyBjbGVhcl9wbGF5ZXI9VHJ1ZSwKICAgIGludGNfMSAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUwOC01MTQKICAgIC8vIHNydC5jaGVja19hY2NfaW5fZ2FtZSggICMgbm9xYTogRTcxMgogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0ubWF4X3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1UcnVlLAogICAgLy8gKQogICAgY2FsbHN1YiBjaGVja19hY2NfaW5fZ2FtZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MTUKICAgIC8vID09IFRydWUKICAgIGludGNfMSAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUwOC01MTUKICAgIC8vIHNydC5jaGVja19hY2NfaW5fZ2FtZSggICMgbm9xYTogRTcxMgogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PXNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0ubWF4X3BsYXllcnMubmF0aXZlLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1UcnVlLAogICAgLy8gKQogICAgLy8gPT0gVHJ1ZQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTA3LTUxNgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzcnQuY2hlY2tfYWNjX2luX2dhbWUoICAjIG5vcWE6IEU3MTIKICAgIC8vICAgICAgICAgZ2FtZV9pZD1nYW1lX2lkLAogICAgLy8gICAgICAgICBhY2NvdW50PVR4bi5zZW5kZXIsCiAgICAvLyAgICAgICAgIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgICAgICBwbGF5ZXJfY291bnQ9c2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXS5tYXhfcGxheWVycy5uYXRpdmUsCiAgICAvLyAgICAgICAgIGNsZWFyX3BsYXllcj1UcnVlLAogICAgLy8gICAgICkKICAgIC8vICAgICA9PSBUcnVlCiAgICAvLyApLCBlcnIuUExBWUVSX05PVF9GT1VORAogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gYWN0aXZlIHBsYXllciBmb3IgdGhpcyBnYW1lLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MTgtNTIxCiAgICAvLyAjIFJldHJpZXZlIHRoZSBnYW1lIHN0YXRlIGRhdGEgZnJvbSBpdHMgY29ycmVzcG9uZGluZyBib3ggdXNpbmcgdGhlIGdhbWUgaWQgcGFyYW1ldGVyCiAgICAvLyBnYW1lX3N0YXRlID0gc2VsZi5ib3hfZ2FtZV9zdGF0ZVsKICAgIC8vICAgICBnYW1lX2lkCiAgICAvLyBdLmNvcHkoKSAgIyBNYWtlIGEgY29weSBvZiB0aGUgZ2FtZSBzdGF0ZSBlbHNlIGltbXV0YWJsZQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3N0YXRlIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MjMtNTI0CiAgICAvLyAjIFJldHJpZXZlIHRoZSBnYW1lIHJlZ2lzdGVyIGRhdGEgZnJvbSBpdHMgY29ycmVzcG9uZGluZyBib3ggdXNpbmcgdGhlIGdhbWUgaWQgcGFyYW1ldGVyCiAgICAvLyBnYW1lX3JlZ2lzdGVyID0gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlclsKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MjUKICAgIC8vIFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTIzLTUyNgogICAgLy8gIyBSZXRyaWV2ZSB0aGUgZ2FtZSByZWdpc3RlciBkYXRhIGZyb20gaXRzIGNvcnJlc3BvbmRpbmcgYm94IHVzaW5nIHRoZSBnYW1lIGlkIHBhcmFtZXRlcgogICAgLy8gZ2FtZV9yZWdpc3RlciA9IHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbCiAgICAvLyAgICAgVHhuLnNlbmRlcgogICAgLy8gXS5jb3B5KCkgICMgTWFrZSBhIGNvcHkgb2YgdGhlIGdhbWUgc3RhdGUgZWxzZSBpbW11dGFibGUKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgZnJhbWVfYnVyeSAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTI4LTUyOQogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9ucyBiZWxvdyBldmFsdWF0ZSBUcnVlCiAgICAvLyBhc3NlcnQgZ2FtZV9zdGF0ZS5zdGFraW5nX2ZpbmFsaXplZC5uYXRpdmUsIGVyci5TVEFLSU5HX0ZJTkFMX0ZMQUcKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGFzc2VydCAvLyBHYW1lIHN0YXRlIHN0YWtpbmcgZmluYWxpemVkIGJvb2xlYW4gdmFsdWUgbWlzbWF0Y2guCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUzMQogICAgLy8gZ2FtZV9zdGF0ZS5leHBpcnlfdHMgPj0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGV4dHJhY3QgOSA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgYj49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUzMC01MzIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS5leHBpcnlfdHMgPj0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICksIGVyci5USU1FX0NPTlNUUkFJTlRfVklPTEFUSU9OCiAgICBhc3NlcnQgLy8gSW52YWxpZCB0aW1lIGZyYW1lLiBDYWxsIG1hZGUgb3V0c2lkZSB0aGUgcGVybWl0dGVkIGJsb2NrIG9yIHRpbWVzdGFtcCByYW5nZS4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTM0CiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdLmdhbWVfaWQubmF0aXZlID09IGdhbWVfaWQKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciBlbnRyeSBleGlzdHMKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1MzMtNTM1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0uZ2FtZV9pZC5uYXRpdmUgPT0gZ2FtZV9pZAogICAgLy8gKSwgZXJyLklOVkFMSURfR0FNRV9JRAogICAgYXNzZXJ0IC8vIEludmFsaWQgR2FtZSBJRC4gQm94IEdhbWUgUmVnaXN0ZXIgR2FtZSBJRCBtdXN0IGJlIGEgY2VydGFpbiB2YWx1ZSBvciBtYXRjaCBHYW1lIElEIGFyZy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTM3CiAgICAvLyBHbG9iYWwucm91bmQgPj0gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXS5jb21taXRfcmFuZF9yb3VuZC5uYXRpdmUKICAgIGdsb2JhbCBSb3VuZAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjUzNi01MzgKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgR2xvYmFsLnJvdW5kID49IHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbVHhuLnNlbmRlcl0uY29tbWl0X3JhbmRfcm91bmQubmF0aXZlCiAgICAvLyApLCBlcnIuQ09NTUlUX1JBTkRfUk9VTkRfTk9UX1JFQUNIRUQKICAgIGFzc2VydCAvLyBSYW5kb21uZXNzIGNvbW1pdCByb3VuZCBub3QgcmVhY2hlZCB5ZXQuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU0MC01NDYKICAgIC8vICMgQ2FsbCB0aGUgUmFuZG9tbmVzcyBCZWFjb24gc21hcnQgY29udHJhY3QgdGhhdCBjb21wdXRlcyB0aGUgVlJGIGFuZCBvdXRwdXRzIGEgcmFuZG9tbmVzcyB2YWx1ZQogICAgLy8gc2VlZCA9IGFyYzQuYWJpX2NhbGxbQnl0ZXNdKAogICAgLy8gICAgICJtdXN0X2dldCh1aW50NjQsYnl0ZVtdKWJ5dGVbXSIsCiAgICAvLyAgICAgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXS5jb21taXRfcmFuZF9yb3VuZC5uYXRpdmUsCiAgICAvLyAgICAgVHhuLnNlbmRlci5ieXRlcywKICAgIC8vICAgICBhcHBfaWQ9NjAwMDExODg3LCAgIyBUZXN0TmV0IFZSRiBCZWFjb24gQXBwbGljYXRpb24gSUQKICAgIC8vIClbMF0KICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTQzCiAgICAvLyBzZWxmLmJveF9nYW1lX3JlZ2lzdGVyW1R4bi5zZW5kZXJdLmNvbW1pdF9yYW5kX3JvdW5kLm5hdGl2ZSwKICAgIGJ5dGVjXzAgLy8gInJfIgogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlciBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU0NAogICAgLy8gVHhuLnNlbmRlci5ieXRlcywKICAgIGJ5dGVjIDkgLy8gMHgwMDIwCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTQ1CiAgICAvLyBhcHBfaWQ9NjAwMDExODg3LCAgIyBUZXN0TmV0IFZSRiBCZWFjb24gQXBwbGljYXRpb24gSUQKICAgIHB1c2hpbnQgNjAwMDExODg3IC8vIDYwMDAxMTg4NwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU0MC01NDYKICAgIC8vICMgQ2FsbCB0aGUgUmFuZG9tbmVzcyBCZWFjb24gc21hcnQgY29udHJhY3QgdGhhdCBjb21wdXRlcyB0aGUgVlJGIGFuZCBvdXRwdXRzIGEgcmFuZG9tbmVzcyB2YWx1ZQogICAgLy8gc2VlZCA9IGFyYzQuYWJpX2NhbGxbQnl0ZXNdKAogICAgLy8gICAgICJtdXN0X2dldCh1aW50NjQsYnl0ZVtdKWJ5dGVbXSIsCiAgICAvLyAgICAgc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXS5jb21taXRfcmFuZF9yb3VuZC5uYXRpdmUsCiAgICAvLyAgICAgVHhuLnNlbmRlci5ieXRlcywKICAgIC8vICAgICBhcHBfaWQ9NjAwMDExODg3LCAgIyBUZXN0TmV0IFZSRiBCZWFjb24gQXBwbGljYXRpb24gSUQKICAgIC8vIClbMF0KICAgIHB1c2hieXRlcyAweDQ3YzIwYzIzIC8vIG1ldGhvZCAibXVzdF9nZXQodWludDY0LGJ5dGVbXSlieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlYyA1IC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGR1cAogICAgZXh0cmFjdCA2IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTUzCiAgICAvLyBwbGF5ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2J1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxNDMtMTQ0CiAgICAvLyAjIEluaXRpYWxpemUgdGhlIFBDRyBwc2V1ZG8tcmFuZG9tIGdlbmVyYXRvciBzdGF0ZSB1c2luZyA4IGJ5dGVzIGZyb20gdGhlIGdpdmVuIHNlZWQKICAgIC8vIHN0YXRlID0gcGNnMTZfaW5pdChzZWVkPW9wLmV4dHJhY3Qoc2VlZCwgMTYsIDgpKQogICAgc3dhcAogICAgZXh0cmFjdCAyMiA4CiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIxCiAgICAvLyBhc3NlcnQgc2VlZC5sZW5ndGggPT0gOAogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydAogICAgcHVzaGludCAxNiAvLyAxNgogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyMwogICAgLy8gcmV0dXJuIF9fcGNnMzJfaW5pdChvcC5idG9pKHNlZWQpLCBVSW50NjQoUENHX0ZJUlNUX0lOQ1JFTUVOVCkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToxNTUKICAgIC8vIHN0YXRlID0gX19wY2czMl9zdGVwKFVJbnQ2NCgwKSwgaW5jcikKICAgIGludGNfMCAvLyAwCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI2OQogICAgLy8gX2hpZ2hfbXVsLCBsb3dfbXVsID0gb3AubXVsdyhzdGF0ZSwgUENHX01VTFRJUExJRVIpCiAgICBpbnRjIDggLy8gNjM2NDEzNjIyMzg0Njc5MzAwNQogICAgbXVsdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIzCiAgICAvLyByZXR1cm4gX19wY2czMl9pbml0KG9wLmJ0b2koc2VlZCksIFVJbnQ2NChQQ0dfRklSU1RfSU5DUkVNRU5UKSkKICAgIGludGMgOSAvLyAxNDQyNjk1MDQwODg4OTYzNDA3CiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI3MAogICAgLy8gX2hpZ2hfYWRkLCBsb3dfYWRkID0gb3AuYWRkdyhsb3dfbXVsLCBpbmNyKQogICAgYWRkdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjE1NgogICAgLy8gX2hpZ2hfYWRkdywgc3RhdGUgPSBvcC5hZGR3KHN0YXRlLCBpbml0aWFsX3N0YXRlKQogICAgYWRkdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI2OQogICAgLy8gX2hpZ2hfbXVsLCBsb3dfbXVsID0gb3AubXVsdyhzdGF0ZSwgUENHX01VTFRJUExJRVIpCiAgICBpbnRjIDggLy8gNjM2NDEzNjIyMzg0Njc5MzAwNQogICAgbXVsdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIzCiAgICAvLyByZXR1cm4gX19wY2czMl9pbml0KG9wLmJ0b2koc2VlZCksIFVJbnQ2NChQQ0dfRklSU1RfSU5DUkVNRU5UKSkKICAgIGludGMgOSAvLyAxNDQyNjk1MDQwODg4OTYzNDA3CiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI3MAogICAgLy8gX2hpZ2hfYWRkLCBsb3dfYWRkID0gb3AuYWRkdyhsb3dfbXVsLCBpbmNyKQogICAgYWRkdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjE5OAogICAgLy8gcmVzdWx0ICs9IGFyYzQuVUludDE2KGxlbmd0aCkuYnl0ZXMKICAgIHB1c2hieXRlcyAweDAwZmYKICAgIGZyYW1lX2J1cnkgOQogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyOTIKICAgIC8vIF9hZGR3X2hpZ2gsIGFkZHdfbG93ID0gb3AuYWRkdyh+dmFsdWUsIDEpCiAgICBwdXNoaW50IDE4NDQ2NzQ0MDczNzA5NDg2MDgwIC8vIDE4NDQ2NzQ0MDczNzA5NDg2MDgwCiAgICBpbnRjXzEgLy8gMQogICAgYWRkdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjMwMAogICAgLy8gcmV0dXJuIHZhbHVlICYgKCgxIDw8IDMyKSAtIDEpCiAgICBpbnRjIDEwIC8vIDQyOTQ5NjcyOTUKICAgICYKICAgIC8vIC52ZW52L0xpYi9zaXRlLXBhY2thZ2VzL2xpYl9wY2cvcGNnMzIucHk6MjE5CiAgICAvLyBhYnNvbHV0ZV9ib3VuZCA9ICgxIDw8IGJpdF9zaXplKSAtIGxvd2VyX2JvdW5kCiAgICBpbnRjIDEyIC8vIDY1NTM1CiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIyMQogICAgLy8gdGhyZXNob2xkID0gX19tYXNrX3RvX3VpbnQzMihfX3VpbnQ2NF90d29zKGFic29sdXRlX2JvdW5kKSkgJSBhYnNvbHV0ZV9ib3VuZAogICAgJQogICAgZnJhbWVfYnVyeSAxNgogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyMjMKICAgIC8vIGZvciBpIGluIHVyYW5nZShsZW5ndGgpOiAgIyBub3FhOiBCMDA3CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxMwogICAgZnJhbWVfYnVyeSAxNQoKcGxheV9nYW1lX2Zvcl9oZWFkZXJAMTM6CiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIyMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGxlbmd0aCk6ICAjIG5vcWE6IEIwMDcKICAgIGZyYW1lX2RpZyAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxNTEKICAgIC8vIGxlbmd0aD1VSW50NjQoMjU1KSwgICMgTnVtYmVyIG9mIHZhbHVlcyBnZW5lcmF0ZWQgaXMgMjU1CiAgICBwdXNoaW50IDI1NSAvLyAyNTUKICAgIC8vIC52ZW52L0xpYi9zaXRlLXBhY2thZ2VzL2xpYl9wY2cvcGNnMzIucHk6MjIzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobGVuZ3RoKTogICMgbm9xYTogQjAwNwogICAgPAogICAgYnogcGxheV9nYW1lX2FmdGVyX2ZvckAxOAoKcGxheV9nYW1lX3doaWxlX3RvcEAxNToKICAgIC8vIC52ZW52L0xpYi9zaXRlLXBhY2thZ2VzL2xpYl9wY2cvcGNnMzIucHk6MjY5CiAgICAvLyBfaGlnaF9tdWwsIGxvd19tdWwgPSBvcC5tdWx3KHN0YXRlLCBQQ0dfTVVMVElQTElFUikKICAgIGZyYW1lX2RpZyAxNQogICAgZHVwCiAgICBpbnRjIDggLy8gNjM2NDEzNjIyMzg0Njc5MzAwNQogICAgbXVsdwogICAgYnVyeSAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI1NAogICAgLy8gcmV0dXJuIF9fcGNnMzJfc3RlcChzdGF0ZSwgVUludDY0KFBDR19GSVJTVF9JTkNSRU1FTlQpKSwgX19wY2czMl9vdXRwdXQoc3RhdGUpCiAgICBpbnRjIDkgLy8gMTQ0MjY5NTA0MDg4ODk2MzQwNwogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyNzAKICAgIC8vIF9oaWdoX2FkZCwgbG93X2FkZCA9IG9wLmFkZHcobG93X211bCwgaW5jcikKICAgIGFkZHcKICAgIGNvdmVyIDIKICAgIHBvcAogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyNzkKICAgIC8vIF9fbWFza190b191aW50MzIoKChzdGF0ZSA+PiAxOCkgXiBzdGF0ZSkgPj4gMjcpLCBzdGF0ZSA+PiA1OQogICAgZHVwCiAgICBwdXNoaW50IDE4IC8vIDE4CiAgICBzaHIKICAgIGRpZyAxCiAgICBeCiAgICBwdXNoaW50IDI3IC8vIDI3CiAgICBzaHIKICAgIC8vIC52ZW52L0xpYi9zaXRlLXBhY2thZ2VzL2xpYl9wY2cvcGNnMzIucHk6MzAwCiAgICAvLyByZXR1cm4gdmFsdWUgJiAoKDEgPDwgMzIpIC0gMSkKICAgIGludGMgMTAgLy8gNDI5NDk2NzI5NQogICAgJgogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyNzkKICAgIC8vIF9fbWFza190b191aW50MzIoKChzdGF0ZSA+PiAxOCkgXiBzdGF0ZSkgPj4gMjcpLCBzdGF0ZSA+PiA1OQogICAgc3dhcAogICAgcHVzaGludCA1OSAvLyA1OQogICAgc2hyCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI4NgogICAgLy8gcmV0dXJuICh2YWx1ZSA+PiByb3QpIHwgX19tYXNrX3RvX3VpbnQzMih2YWx1ZSA8PCAoX191aW50NjRfdHdvcyhyb3QpICYgMzEpKQogICAgZHVwMgogICAgc2hyCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI5MgogICAgLy8gX2FkZHdfaGlnaCwgYWRkd19sb3cgPSBvcC5hZGR3KH52YWx1ZSwgMSkKICAgIHN3YXAKICAgIH4KICAgIGludGNfMSAvLyAxCiAgICBhZGR3CiAgICBidXJ5IDEKICAgIC8vIC52ZW52L0xpYi9zaXRlLXBhY2thZ2VzL2xpYl9wY2cvcGNnMzIucHk6Mjg2CiAgICAvLyByZXR1cm4gKHZhbHVlID4+IHJvdCkgfCBfX21hc2tfdG9fdWludDMyKHZhbHVlIDw8IChfX3VpbnQ2NF90d29zKHJvdCkgJiAzMSkpCiAgICBwdXNoaW50IDMxIC8vIDMxCiAgICAmCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIHNobAogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weTozMDAKICAgIC8vIHJldHVybiB2YWx1ZSAmICgoMSA8PCAzMikgLSAxKQogICAgaW50YyAxMCAvLyA0Mjk0OTY3Mjk1CiAgICAmCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjI4NgogICAgLy8gcmV0dXJuICh2YWx1ZSA+PiByb3QpIHwgX19tYXNrX3RvX3VpbnQzMih2YWx1ZSA8PCAoX191aW50NjRfdHdvcyhyb3QpICYgMzEpKQogICAgfAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEyCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIyNgogICAgLy8gaWYgY2FuZGlkYXRlID49IHRocmVzaG9sZDoKICAgIGZyYW1lX2RpZyAxNgogICAgPj0KICAgIGJ6IHBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDE3CiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIyOAogICAgLy8gb3AuaXRvYigoY2FuZGlkYXRlICUgYWJzb2x1dGVfYm91bmQpICsgbG93ZXJfYm91bmQpLAogICAgZnJhbWVfZGlnIDEyCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIxOQogICAgLy8gYWJzb2x1dGVfYm91bmQgPSAoMSA8PCBiaXRfc2l6ZSkgLSBsb3dlcl9ib3VuZAogICAgaW50YyAxMiAvLyA2NTUzNQogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyMjgKICAgIC8vIG9wLml0b2IoKGNhbmRpZGF0ZSAlIGFic29sdXRlX2JvdW5kKSArIGxvd2VyX2JvdW5kKSwKICAgICUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTQ5CiAgICAvLyBsb3dlcl9ib3VuZD1VSW50NjQoMSksICAjIExvd2VyIGJvdW5kIGlzIDEgKHRvIGRpc2FsbG93IDAgYXMgYSB2YWx1ZSkKICAgIGludGNfMSAvLyAxCiAgICAvLyAudmVudi9MaWIvc2l0ZS1wYWNrYWdlcy9saWJfcGNnL3BjZzMyLnB5OjIyOAogICAgLy8gb3AuaXRvYigoY2FuZGlkYXRlICUgYWJzb2x1dGVfYm91bmQpICsgbG93ZXJfYm91bmQpLAogICAgKwogICAgaXRvYgogICAgLy8gLnZlbnYvTGliL3NpdGUtcGFja2FnZXMvbGliX3BjZy9wY2czMi5weToyMjctMjMxCiAgICAvLyByZXN1bHQgKz0gb3AuZXh0cmFjdCgKICAgIC8vICAgICBvcC5pdG9iKChjYW5kaWRhdGUgJSBhYnNvbHV0ZV9ib3VuZCkgKyBsb3dlcl9ib3VuZCksCiAgICAvLyAgICAgdHJ1bmNhdGVfc3RhcnRfY2FjaGVkLAogICAgLy8gICAgIGJ5dGVfc2l6ZSwKICAgIC8vICkKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgOQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDkKICAgIC8vIC52ZW52L0xpYi9zaXRlLXBhY2thZ2VzL2xpYl9wY2cvcGNnMzIucHk6MjIzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobGVuZ3RoKTogICMgbm9xYTogQjAwNwogICAgZnJhbWVfZGlnIDEzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxMwogICAgZnJhbWVfYnVyeSAxNQogICAgYiBwbGF5X2dhbWVfZm9yX2hlYWRlckAxMwoKcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICBmcmFtZV9idXJ5IDE1CiAgICBiIHBsYXlfZ2FtZV93aGlsZV90b3BAMTUKCnBsYXlfZ2FtZV9hZnRlcl9mb3JAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE1NC0xNTUKICAgIC8vICMgSW5pdGlhbGl6ZSB0aGUgcGxheWVyJ3Mgc2NvcmUKICAgIC8vIHNjb3JlID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxNTctMTU4CiAgICAvLyAjIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VxdWVuY2UgYXMgYSBieXRlIGFycmF5IHN0YXJ0aW5nIGF0IGJ5dGUgaW5kZXggMiAoc2tpcCBhcnJheSBoZWFkZXIgYnl0ZXMpCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMiwgc2VxdWVuY2UuYnl0ZXMubGVuZ3RoLCAyKToKICAgIGZyYW1lX2RpZyA5CiAgICBsZW4KICAgIGZyYW1lX2J1cnkgMTcKICAgIGludGNfMiAvLyAyCiAgICBmcmFtZV9idXJ5IDEzCgpwbGF5X2dhbWVfZm9yX2hlYWRlckAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTU3LTE1OAogICAgLy8gIyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlcXVlbmNlIGFzIGEgYnl0ZSBhcnJheSBzdGFydGluZyBhdCBieXRlIGluZGV4IDIgKHNraXAgYXJyYXkgaGVhZGVyIGJ5dGVzKQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDIsIHNlcXVlbmNlLmJ5dGVzLmxlbmd0aCwgMik6CiAgICBmcmFtZV9kaWcgMTMKICAgIGZyYW1lX2RpZyAxNwogICAgPAogICAgYnogcGxheV9nYW1lX2FmdGVyX2ZvckAyMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxNTktMTYwCiAgICAvLyAjIEV4dHJhY3QgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBmcm9tIHRoZSBieXRlIHNlcXVlbmNlCiAgICAvLyByb2xsID0gb3AuZXh0cmFjdF91aW50MTYoc2VxdWVuY2UuYnl0ZXNbMjpdLCBpKQogICAgaW50Y18yIC8vIDIKICAgIGZyYW1lX2RpZyAxNwogICAgZHVwCiAgICBjb3ZlciAyCiAgICA+PQogICAgaW50Y18yIC8vIDIKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZnJhbWVfZGlnIDkKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIDEzCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxNjItMTYzCiAgICAvLyAjIFN0b3AgYWNjdW11bGF0aW5nIHNjb3JlIGlmIHRoZSByb2xsIGlzIGJlbG93IG9yIGVxdWFsIHRvIHRoZSBlbGltaW5hdGlvbiB0aHJlc2hvbGQKICAgIC8vIGlmIHJvbGwgPD0gY3N0LkVMSU1fVEhSRVNIT0xEOgogICAgcHVzaGludCAxMDk5MiAvLyAxMDk5MgogICAgPD0KICAgIGJueiBwbGF5X2dhbWVfYWZ0ZXJfZm9yQDIzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE2Ni0xNjcKICAgIC8vICMgSW5jcmVtZW50IHNjb3JlIGZvciBlYWNoIHJvbGwgYWJvdmUgdGhlIHRocmVzaG9sZAogICAgLy8gc2NvcmUgKz0gMQogICAgZnJhbWVfZGlnIDE0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxNTctMTU4CiAgICAvLyAjIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VxdWVuY2UgYXMgYSBieXRlIGFycmF5IHN0YXJ0aW5nIGF0IGJ5dGUgaW5kZXggMiAoc2tpcCBhcnJheSBoZWFkZXIgYnl0ZXMpCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMiwgc2VxdWVuY2UuYnl0ZXMubGVuZ3RoLCAyKToKICAgIGZyYW1lX2RpZyAxMwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMTMKICAgIGIgcGxheV9nYW1lX2Zvcl9oZWFkZXJAMjAKCnBsYXlfZ2FtZV9hZnRlcl9mb3JAMjM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE3NAogICAgLy8gYXJjNC5VSW50OChzY29yZSksCiAgICBmcmFtZV9kaWcgMTQKICAgIGR1cAogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE2OS0xNzUKICAgIC8vICMgRW1pdCBBUkMtMjggZXZlbnQgZm9yIG9mZi1jaGFpbiB0cmFja2luZwogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgICJwbGF5ZXJfc2NvcmUodWludDY0LGFkZHJlc3MsdWludDgpIiwKICAgIC8vICAgICBnYW1lX2lkLAogICAgLy8gICAgIHBsYXllciwKICAgIC8vICAgICBhcmM0LlVJbnQ4KHNjb3JlKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgNwogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGRlMjI0NGQ2IC8vIG1ldGhvZCAicGxheWVyX3Njb3JlKHVpbnQ2NCxhZGRyZXNzLHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE3Ny0xNzgKICAgIC8vICMgQ2hlY2sgaWYgc2NvcmUgaXMgZ3JlYXRlciB0aGFuIHRoZSBnYW1lIHN0YXRlJ3MgdG9wIHNjb3JlCiAgICAvLyBpZiBzY29yZSA+IGdhbWVfc3RhdGUudG9wX3Njb3JlLm5hdGl2ZToKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBnZXRieXRlCiAgICB1bmNvdmVyIDIKICAgIDwKICAgIHN3YXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICBmcmFtZV9idXJ5IDUKICAgIGJ6IHBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE3OQogICAgLy8gZ2FtZV9zdGF0ZS50b3Bfc2NvcmUgPSBhcmM0LlVJbnQ4KHNjb3JlKSAgIyBVcGRhdGUgdG9wIHNjb3JlCiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDEwCiAgICByZXBsYWNlMiA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE4MAogICAgLy8gZ2FtZV9zdGF0ZS50b3BzY29yZXJfYWRkcmVzcyA9IGFyYzQuQWRkcmVzcyhwbGF5ZXIpICAjIFVwZGF0ZSB0b3BzY29yZXIgYWRkcmVzcwogICAgZnJhbWVfZGlnIDcKICAgIHJlcGxhY2UyIDE1MwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDYKICAgIGZyYW1lX2J1cnkgNQoKcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMjU6CiAgICBmcmFtZV9kaWcgNQogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE4Mi0xODMKICAgIC8vICMgQ2hlY2sgaWYgc2NvcmUgaXMgZ3JlYXRlciB0aGFuIHRoZSBnYW1lIHJlZ2lzdGVyIGFjY291bnQncyBiZXN0IHNjb3JlIGFjcm9zcyBldmVyeSBnYW1lIHBsYXllZAogICAgLy8gaWYgc2NvcmUgPiBnYW1lX3JlZ2lzdGVyLmJlc3Rfc2NvcmUubmF0aXZlOgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgIGdldGJ5dGUKICAgIGZyYW1lX2RpZyAxNAogICAgPAogICAgc3dhcAogICAgZnJhbWVfYnVyeSAzCiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAyNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxODQKICAgIC8vIGdhbWVfcmVnaXN0ZXIuYmVzdF9zY29yZSA9IGFyYzQuVUludDgoc2NvcmUpICAjIFVwZGF0ZSBwZXJzb25hbCB0b3Agc2NvcmUKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMTAKICAgIHJlcGxhY2UyIDEKICAgIGZyYW1lX2J1cnkgMwoKcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMjc6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE4OC0xODkKICAgIC8vICMgRmlyc3QgUGxhY2UKICAgIC8vIGdhbWVfc3RhdGUuZmlyc3RfcGxhY2VfYWRkcmVzcyA9PSBhcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcykKICAgIGZyYW1lX2RpZyA0CiAgICBleHRyYWN0IDU3IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxODgtMTkwCiAgICAvLyAjIEZpcnN0IFBsYWNlCiAgICAvLyBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX2FkZHJlc3MgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpCiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUuZmlyc3RfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBibnogcGxheV9nYW1lX2lmX2JvZHlAMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTkwCiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUuZmlyc3RfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIGZyYW1lX2RpZyAxNAogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxODgtMTkwCiAgICAvLyAjIEZpcnN0IFBsYWNlCiAgICAvLyBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX2FkZHJlc3MgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpCiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUuZmlyc3RfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBieiBwbGF5X2dhbWVfZWxzZV9ib2R5QDMwCgpwbGF5X2dhbWVfaWZfYm9keUAyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTkyLTE5MwogICAgLy8gIyBBc3NpZ246IFNlY29uZCAtPiBUaGlyZAogICAgLy8gZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9zY29yZSA9IGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX3Njb3JlCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBleHRyYWN0IDQgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHJlcGxhY2UyIDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTk0CiAgICAvLyBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MgPSBnYW1lX3N0YXRlLnNlY29uZF9wbGFjZV9hZGRyZXNzCiAgICBkdXAKICAgIGV4dHJhY3QgODkgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICByZXBsYWNlMiAxMjEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MTk1LTE5NgogICAgLy8gIyBBc3NpZ246IEZpcnN0IC0+IFNlY29uZAogICAgLy8gZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2Vfc2NvcmUgPSBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX3Njb3JlCiAgICBkdXAKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcmVwbGFjZTIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToxOTcKICAgIC8vIGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX2FkZHJlc3MgPSBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX2FkZHJlc3MKICAgIGR1cAogICAgZXh0cmFjdCA1NyAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHJlcGxhY2UyIDg5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjE5OC0xOTkKICAgIC8vICMgQXNzaWduOiBTY29yZSAtPiBGaXJzdAogICAgLy8gZ2FtZV9zdGF0ZS5maXJzdF9wbGFjZV9zY29yZSA9IGFyYzQuVUludDgoc2NvcmUpCiAgICBmcmFtZV9kaWcgMTAKICAgIHJlcGxhY2UyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjAwCiAgICAvLyBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX2FkZHJlc3MgPSBhcmM0LkFkZHJlc3MocGxheWVyKQogICAgZnJhbWVfZGlnIDcKICAgIHJlcGxhY2UyIDU3CiAgICBmcmFtZV9idXJ5IDQKCnBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDM4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1NTctNTU4CiAgICAvLyAjIElmIGdhbWUgc3RhdGUgZmlyc3QgcGxhY2Ugc2NvcmUgaXMgaGlnaGVyIHRoYW4gYXRoIHNjb3JlCiAgICAvLyBpZiBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX3Njb3JlID4gc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXRoX3Njb3JlOgogICAgZnJhbWVfZGlnIDQKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDgKICAgIGJ5dGVjXzIgLy8gInRfIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfdHJvcGh5IGV4aXN0cwogICAgZXh0cmFjdCA4IDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBiPgogICAgYnogcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1NTktNTYwCiAgICAvLyAjIFVwZGF0ZSBhdGggc2NvcmUsIGdhbWUgc3RhdGUgZmlyc3QgcGxhY2Ugc2NvcmUgaXMgdGhlIGF0aCBzY29yZQogICAgLy8gc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXRoX3Njb3JlID0gZ2FtZV9zdGF0ZS5maXJzdF9wbGFjZV9zY29yZQogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV90cm9waHkgZXhpc3RzCiAgICBmcmFtZV9kaWcgOAogICAgcmVwbGFjZTIgOAogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBkaWcgMQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1NjItNTYzCiAgICAvLyAjIElmIGF0aCBhZGRyZXNzIGlzIG5vdCBlbXB0eQogICAgLy8gaWYgc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXRoX2FkZHJlc3MubmF0aXZlICE9IEdsb2JhbC56ZXJvX2FkZHJlc3M6CiAgICBleHRyYWN0IDkgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU2NgogICAgLy8gc2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXRoX2FkZHJlc3MubmF0aXZlLAogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV90cm9waHkgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgOSAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTY3CiAgICAvLyBzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZS5hc3NldF9pZC5uYXRpdmUsCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTY0LTU2OAogICAgLy8gIyBVc2UgYm94IGdhbWUgdHJvcGh5IGRhdGEgdG8gY2hlY2sgYWNjb3VudCBhc3NldCBiYWxhbmNlIGZvciB0cm9waHkKICAgIC8vIGFzc2V0X2JhbGFuY2UsIGFzc2V0X2V4aXN0cyA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKAogICAgLy8gICAgIHNlbGYuYm94X2dhbWVfdHJvcGh5LnZhbHVlLmF0aF9hZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZS5hc3NldF9pZC5uYXRpdmUsCiAgICAvLyApCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTcwLTU3MQogICAgLy8gIyBJZiBhc3NldCBleGlzdHMgYW5kIGl0cyBiYWxhbmNlIGlzIDEsIHBlcmZvcm0gY2xhd2JhY2sgdmlhIGFzc2V0IHRyYW5zZmVyIGlubmVyIHRyYW5zYWN0aW9uCiAgICAvLyBpZiBhc3NldF9leGlzdHMgYW5kIGFzc2V0X2JhbGFuY2UgPT0gMToKICAgIGJ6IHBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDcKICAgIGZyYW1lX2RpZyAxMQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU3MwogICAgLy8gYXNzZXRfaWQ9c2VsZi5ib3hfZ2FtZV90cm9waHkudmFsdWUuYXNzZXRfaWQubmF0aXZlLAogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZ2FtZV90cm9waHkgZXhpc3RzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1NzQKICAgIC8vIGFzc2V0X3NlbmRlcj1zZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZS5hdGhfYWRkcmVzcy5uYXRpdmUsCiAgICBzd2FwCiAgICBleHRyYWN0IDkgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU3NQogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjQzLTQ5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YXNzZXRfc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0xLAogICAgLy8gICAgIG5vdGU9bm90ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTc2LTU3OAogICAgLy8gbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgJ3BpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJjbGF3YmFja19pdHhuIiwiY29uY2VybiI6Iml0eG4uYXNzZXRfdHJhbnNmZXI7Y2xhd2JhY2tfdHJvcGh5X2Fzc2V0In0nCiAgICAvLyApLAogICAgcHVzaGJ5dGVzICJwaWVvdXQ6antcIm1ldGhvZFwiOlwicGxheV9nYW1lXCIsXCJzdWJyb3V0aW5lOlwiY2xhd2JhY2tfaXR4blwiLFwiY29uY2VyblwiOlwiaXR4bi5hc3NldF90cmFuc2ZlcjtjbGF3YmFja190cm9waHlfYXNzZXRcIn0iCiAgICBpdHhuX2ZpZWxkIE5vdGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NDcKICAgIC8vIGFzc2V0X2Ftb3VudD0xLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6NDMKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjQzLTQ5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YXNzZXRfcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YXNzZXRfc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0xLAogICAgLy8gICAgIG5vdGU9bm90ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1ODEtNTgyCiAgICAvLyAjIFVwZGF0ZSBhdGggYWRkcmVzcywgdHJhbnNhY3Rpb24gc2VuZGVyIGlzIHRoZSBuZXcgYXRoIGFkZHJlc3MKICAgIC8vIHNlbGYuYm94X2dhbWVfdHJvcGh5LnZhbHVlLmF0aF9hZGRyZXNzID0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpCiAgICBieXRlY18yIC8vICJ0XyIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3Ryb3BoeSBleGlzdHMKICAgIHR4biBTZW5kZXIKICAgIHJlcGxhY2UyIDkKICAgIGJ5dGVjXzIgLy8gInRfIgogICAgc3dhcAogICAgYm94X3B1dAoKcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTg0LTU4NQogICAgLy8gIyBEZWNyZW1lbnQgbnVtYmVyIG9mIGFjdGl2ZSBwbGF5ZXJzIGJ5IDEKICAgIC8vIGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMgPSBhcmM0LlVJbnQ4KGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMubmF0aXZlIC0gMSkKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBnZXRieXRlCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1ODctNTg4CiAgICAvLyAjIFJlc2V0IGdhbWUgY29tbWl0IHZhbHVlcyBpbiBnYW1lIHJlZ2lzdGVyIGJveCBhZnRlciBzY29yZSBpcyBvYnRhaW5lZAogICAgLy8gZ2FtZV9yZWdpc3Rlci5nYW1lX2lkID0gYXJjNC5VSW50NjQoMCkKICAgIGZyYW1lX2RpZyAyCiAgICBieXRlYyA2IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1ODkKICAgIC8vIGdhbWVfcmVnaXN0ZXIuY29tbWl0X3JhbmRfcm91bmQgPSBhcmM0LlVJbnQ2NCgwKQogICAgYnl0ZWMgNiAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU5MQogICAgLy8gR2xvYmFsLnJvdW5kICsgVUludDY0KGNzdC5CT1hfUl9FWFBfUk9VTkRfREVMVEEpCiAgICBnbG9iYWwgUm91bmQKICAgIGludGMgNiAvLyAxMDAwMDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NTkwLTU5MgogICAgLy8gZ2FtZV9yZWdpc3Rlci5leHBpcnlfcm91bmQgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBHbG9iYWwucm91bmQgKyBVSW50NjQoY3N0LkJPWF9SX0VYUF9ST1VORF9ERUxUQSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDE4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjU5NC01OTUKICAgIC8vICMgVXBkYXRlIHRoZSBnYW1lIHJlZ2lzdGVyIGJveCBkYXRhIHdpdGggYSBjb3B5IGNvbnRhaW5pbmcgaXRzIG1vZGlmaWVkIHZhbHVlcwogICAgLy8gc2VsZi5ib3hfZ2FtZV9yZWdpc3RlcltUeG4uc2VuZGVyXSA9IGdhbWVfcmVnaXN0ZXIuY29weSgpCiAgICBieXRlY18wIC8vICJyXyIKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1OTctNjAzCiAgICAvLyAjIENoZWNrIGlmIGdhbWUgaXMgb3ZlciBvbiBldmVyeSBjYWxsCiAgICAvLyBzcnQuaXNfZ2FtZV9vdmVyKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUsCiAgICAvLyAgICAgYm94X2dhbWVfcmVnaXN0ZXI9c2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MDEKICAgIC8vIGJveF9nYW1lX3JlZ2lzdGVyPXNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsCiAgICBieXRlY18wIC8vICJyXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjAyCiAgICAvLyBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIGJ5dGVjXzMgLy8gInBfIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo1OTctNjAzCiAgICAvLyAjIENoZWNrIGlmIGdhbWUgaXMgb3ZlciBvbiBldmVyeSBjYWxsCiAgICAvLyBzcnQuaXNfZ2FtZV9vdmVyKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUsCiAgICAvLyAgICAgYm94X2dhbWVfcmVnaXN0ZXI9c2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICkKICAgIGNhbGxzdWIgaXNfZ2FtZV9vdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYwNS02MDYKICAgIC8vICMgVXBkYXRlIHRoZSBnYW1lIHN0YXRlIGJveCBkYXRhIHdpdGggYSBjb3B5IGNvbnRhaW5pbmcgaXRzIG1vZGlmaWVkIHZhbHVlcwogICAgLy8gc2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXSA9IGdhbWVfc3RhdGUuY29weSgpCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpwbGF5X2dhbWVfZWxzZV9ib2R5QDMwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMDItMjAzCiAgICAvLyAjIFNlY29uZCBQbGFjZQogICAgLy8gZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2VfYWRkcmVzcyA9PSBhcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcykKICAgIGZyYW1lX2RpZyA0CiAgICBleHRyYWN0IDg5IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMDItMjA0CiAgICAvLyAjIFNlY29uZCBQbGFjZQogICAgLy8gZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2VfYWRkcmVzcyA9PSBhcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcykKICAgIC8vIG9yIHNjb3JlID4gZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBibnogcGxheV9nYW1lX2lmX2JvZHlAMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjA0CiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX3Njb3JlLm5hdGl2ZQogICAgZnJhbWVfZGlnIDQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBnZXRieXRlCiAgICBmcmFtZV9kaWcgMTQKICAgIDwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjAyLTIwNAogICAgLy8gIyBTZWNvbmQgUGxhY2UKICAgIC8vIGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX2FkZHJlc3MgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpCiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX3Njb3JlLm5hdGl2ZQogICAgYnogcGxheV9nYW1lX2Vsc2VfYm9keUAzMwoKcGxheV9nYW1lX2lmX2JvZHlAMzI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIwNi0yMDcKICAgIC8vICMgQXNzaWduOiBTZWNvbmQgLT4gVGhpcmQKICAgIC8vIGdhbWVfc3RhdGUudGhpcmRfcGxhY2Vfc2NvcmUgPSBnYW1lX3N0YXRlLnNlY29uZF9wbGFjZV9zY29yZQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgZXh0cmFjdCA0IDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICByZXBsYWNlMiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIwOAogICAgLy8gZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9hZGRyZXNzID0gZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2VfYWRkcmVzcwogICAgZHVwCiAgICBleHRyYWN0IDg5IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcmVwbGFjZTIgMTIxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIwOS0yMTAKICAgIC8vICMgQXNzaWduOiBTY29yZSAtPiBTZWNvbmQKICAgIC8vIGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX3Njb3JlID0gYXJjNC5VSW50OChzY29yZSkKICAgIGZyYW1lX2RpZyAxMAogICAgcmVwbGFjZTIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMTEKICAgIC8vIGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX2FkZHJlc3MgPSBhcmM0LkFkZHJlc3MocGxheWVyKQogICAgZnJhbWVfZGlnIDcKICAgIHJlcGxhY2UyIDg5CiAgICBmcmFtZV9idXJ5IDYKCnBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDM3OgogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2J1cnkgNAogICAgYiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAzOAoKcGxheV9nYW1lX2Vsc2VfYm9keUAzMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjEzLTIxNAogICAgLy8gIyBUaGlyZCBQbGFjZQogICAgLy8gZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9hZGRyZXNzID09IGFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKQogICAgZnJhbWVfZGlnIDQKICAgIGV4dHJhY3QgMTIxIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMTMtMjE1CiAgICAvLyAjIFRoaXJkIFBsYWNlCiAgICAvLyBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpCiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUudGhpcmRfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBibnogcGxheV9nYW1lX2lmX2JvZHlAMzUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjE1CiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUudGhpcmRfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCA1IC8vIDUKICAgIGdldGJ5dGUKICAgIGZyYW1lX2RpZyAxNAogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyMTMtMjE1CiAgICAvLyAjIFRoaXJkIFBsYWNlCiAgICAvLyBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MgPT0gYXJjNC5BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpCiAgICAvLyBvciBzY29yZSA+IGdhbWVfc3RhdGUudGhpcmRfcGxhY2Vfc2NvcmUubmF0aXZlCiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAzNwoKcGxheV9nYW1lX2lmX2JvZHlAMzU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIxNy0yMTgKICAgIC8vICMgQXNzaWduOiBTY29yZSAtPiBUaGlyZAogICAgLy8gZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9zY29yZSA9IGFyYzQuVUludDgoc2NvcmUpCiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDEwCiAgICByZXBsYWNlMiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjIxOQogICAgLy8gZ2FtZV9zdGF0ZS50aGlyZF9wbGFjZV9hZGRyZXNzID0gYXJjNC5BZGRyZXNzKHBsYXllcikKICAgIGZyYW1lX2RpZyA3CiAgICByZXBsYWNlMiAxMjEKICAgIGZyYW1lX2J1cnkgNgogICAgYiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAzNwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LnRyaWdnZXJfZ2FtZV9ldmVudChnYW1lX2lkOiB1aW50NjQsIHRyaWdnZXJfaWQ6IGJ5dGVzKSAtPiB2b2lkOgp0cmlnZ2VyX2dhbWVfZXZlbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYwOC02MTAKICAgIC8vICMgQWxsb3cgYW55IHZhbGlkIGFjY291bnQgdG8gY2hlY2sgYW5kIHRyaWdnZXIgZ2FtZSBldmVudCBwcm9ncmVzc2lvbgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgdHJpZ2dlcl9nYW1lX2V2ZW50KHNlbGYsIGdhbWVfaWQ6IFVJbnQ2NCwgdHJpZ2dlcl9pZDogYXJjNC5VSW50OCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjExLTYxMgogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgR2xvYmFsLmdyb3VwX3NpemUgPT0gMSwgZXJyLlNUQU5EQUxPTkVfVFhOX09OTFkKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgZ3JvdXAgc2l6ZS4gVGhpcyBhcHAgY2FsbCBjYW4gb25seSB0YWtlIHN0YW5kYWxvbmUgdHJhbnNhY3Rpb25zLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MTMKICAgIC8vIGFzc2VydCBnYW1lX2lkIGluIHNlbGYuYm94X2dhbWVfc3RhdGUsIGVyci5HQU1FX0lEX05PVF9GT1VORAogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBieXRlYyA0IC8vICJzXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3ggZ2FtZSBzdGF0ZSBub3QgZm91bmQuIENoZWNrIGlmIGdhbWUgSUQgZXhpc3RzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MTUtNjE4CiAgICAvLyAjIFJldHJpZXZlIGN1cnJlbnQgZ2FtZSBzdGF0ZSBkYXRhIGZyb20gaXRzIGNvcnJlc3BvbmRpbmcgYm94IHVzaW5nIHRoZSBnYW1lIGlkIHBhcmFtZXRlcgogICAgLy8gZ2FtZV9zdGF0ZSA9IHNlbGYuYm94X2dhbWVfc3RhdGVbCiAgICAvLyAgICAgZ2FtZV9pZAogICAgLy8gXS5jb3B5KCkgICMgTWFrZSBhIGNvcHkgb2YgdGhlIGdhbWUgc3RhdGUgZWxzZSBpbW11dGFibGUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9nYW1lX3N0YXRlIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MjAtNjIxCiAgICAvLyAjIFRyaWdnZXIgSUQgMCBjb3JyZXNwb25kcyB3LyBldmVudDogR2FtZSBMaXZlCiAgICAvLyBpZiB0cmlnZ2VyX2lkLm5hdGl2ZSA9PSAwOgogICAgZnJhbWVfZGlnIC0xCiAgICBidG9pCiAgICBkdXAKICAgIGJueiB0cmlnZ2VyX2dhbWVfZXZlbnRfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjIyLTYyMwogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgbm90IGdhbWVfc3RhdGUuc3Rha2luZ19maW5hbGl6ZWQubmF0aXZlLCBlcnIuU1RBS0lOR19GSU5BTF9GTEFHCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEdhbWUgc3RhdGUgc3Rha2luZyBmaW5hbGl6ZWQgYm9vbGVhbiB2YWx1ZSBtaXNtYXRjaC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjI1LTYyNgogICAgLy8gIyBTcGVjaWFsIGNhc2U6IENoZWNrIGlmIHRoZSBhZG1pbiBpcyB0aGUgb25seSBhY3RpdmUgcGxheWVyLCBpZiB0cnVlLCBqdXN0IGVuZCB0aGUgZ2FtZQogICAgLy8gaWYgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgPT0gMSBhbmQgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgaW50Y18yIC8vIDIKICAgIGdldGJ5dGUKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MjUtNjMyCiAgICAvLyAjIFNwZWNpYWwgY2FzZTogQ2hlY2sgaWYgdGhlIGFkbWluIGlzIHRoZSBvbmx5IGFjdGl2ZSBwbGF5ZXIsIGlmIHRydWUsIGp1c3QgZW5kIHRoZSBnYW1lCiAgICAvLyBpZiBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA9PSAxIGFuZCBzcnQuY2hlY2tfYWNjX2luX2dhbWUoCiAgICAvLyAgICAgZ2FtZV9pZD1nYW1lX2lkLAogICAgLy8gICAgIGFjY291bnQ9Z2FtZV9zdGF0ZS5hZG1pbl9hZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICAgICBwbGF5ZXJfY291bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGNsZWFyX3BsYXllcj1GYWxzZSwKICAgIC8vICk6CiAgICBieiB0cmlnZ2VyX2dhbWVfZXZlbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYyOAogICAgLy8gYWNjb3VudD1nYW1lX3N0YXRlLmFkbWluX2FkZHJlc3MubmF0aXZlLAogICAgZnJhbWVfZGlnIDIKICAgIGV4dHJhY3QgMjUgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYyNS02MzIKICAgIC8vICMgU3BlY2lhbCBjYXNlOiBDaGVjayBpZiB0aGUgYWRtaW4gaXMgdGhlIG9ubHkgYWN0aXZlIHBsYXllciwgaWYgdHJ1ZSwganVzdCBlbmQgdGhlIGdhbWUKICAgIC8vIGlmIGdhbWVfc3RhdGUuYWN0aXZlX3BsYXllcnMubmF0aXZlID09IDEgYW5kIHNydC5jaGVja19hY2NfaW5fZ2FtZSgKICAgIC8vICAgICBnYW1lX2lkPWdhbWVfaWQsCiAgICAvLyAgICAgYWNjb3VudD1nYW1lX3N0YXRlLmFkbWluX2FkZHJlc3MubmF0aXZlLAogICAgLy8gICAgIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgIHBsYXllcl9jb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKToKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MjkKICAgIC8vIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgYnl0ZWNfMyAvLyAicF8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYzMAogICAgLy8gcGxheWVyX2NvdW50PVVJbnQ2NCgxKSwKICAgIGludGNfMSAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYzMQogICAgLy8gY2xlYXJfcGxheWVyPUZhbHNlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjI1LTYzMgogICAgLy8gIyBTcGVjaWFsIGNhc2U6IENoZWNrIGlmIHRoZSBhZG1pbiBpcyB0aGUgb25seSBhY3RpdmUgcGxheWVyLCBpZiB0cnVlLCBqdXN0IGVuZCB0aGUgZ2FtZQogICAgLy8gaWYgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgPT0gMSBhbmQgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PWdhbWVfc3RhdGUuYWRtaW5fYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyAgICAgcGxheWVyX2NvdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBjbGVhcl9wbGF5ZXI9RmFsc2UsCiAgICAvLyApOgogICAgY2FsbHN1YiBjaGVja19hY2NfaW5fZ2FtZQogICAgYnogdHJpZ2dlcl9nYW1lX2V2ZW50X2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2MzMtNjM4CiAgICAvLyBzcnQuaXNfZ2FtZV9vdmVyKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUsCiAgICAvLyAgICAgYm94X2dhbWVfcmVnaXN0ZXI9c2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjM2CiAgICAvLyBib3hfZ2FtZV9yZWdpc3Rlcj1zZWxmLmJveF9nYW1lX3JlZ2lzdGVyLAogICAgYnl0ZWNfMCAvLyAicl8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjYzNwogICAgLy8gYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICBieXRlY18zIC8vICJwXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjMzLTYzOAogICAgLy8gc3J0LmlzX2dhbWVfb3ZlcigKICAgIC8vICAgICBnYW1lX2lkPWdhbWVfaWQsCiAgICAvLyAgICAgZ2FtZV9zdGF0ZT1nYW1lX3N0YXRlLAogICAgLy8gICAgIGJveF9nYW1lX3JlZ2lzdGVyPXNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyApCiAgICBjYWxsc3ViIGlzX2dhbWVfb3ZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2NDAtNjQxCiAgICAvLyAjIFVwZGF0ZSB0aGUgZ2FtZSBzdGF0ZSBib3ggZGF0YSB3aXRoIGEgY29weSBjb250YWluaW5nIGl0cyBtb2RpZmllZCB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0gPSBnYW1lX3N0YXRlLmNvcHkoKQogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjQzLTY0NAogICAgLy8gIyBNYWtlIGFuIGVhcmx5IHJldHVybgogICAgLy8gcmV0dXJuCiAgICByZXRzdWIKCnRyaWdnZXJfZ2FtZV9ldmVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjY0OAogICAgLy8gZ2FtZV9zdGF0ZS5leHBpcnlfdHMKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGV4dHJhY3QgOSA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2NDkKICAgIC8vIDwgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgICMgR2FtZSBsaXZlIHRpbWVyIG11c3QgZXhwaXJlZCwgT1IKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjQ4LTY0OQogICAgLy8gZ2FtZV9zdGF0ZS5leHBpcnlfdHMKICAgIC8vIDwgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgICMgR2FtZSBsaXZlIHRpbWVyIG11c3QgZXhwaXJlZCwgT1IKICAgIGl0b2IKICAgIGI8CiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjQ4LTY1MgogICAgLy8gZ2FtZV9zdGF0ZS5leHBpcnlfdHMKICAgIC8vIDwgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgICMgR2FtZSBsaXZlIHRpbWVyIG11c3QgZXhwaXJlZCwgT1IKICAgIC8vIG9yIHNydC5jYW5fcXVpY2tfcGxheSgKICAgIC8vICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUKICAgIC8vICkgICMgUXVpY2sgcGxheSBjb25kaXRpb25zIGFyZSBtZXQKICAgIGJueiB0cmlnZ2VyX2dhbWVfZXZlbnRfYm9vbF90cnVlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjUwLTY1MgogICAgLy8gb3Igc3J0LmNhbl9xdWlja19wbGF5KAogICAgLy8gICAgIGdhbWVfc3RhdGU9Z2FtZV9zdGF0ZQogICAgLy8gKSAgIyBRdWljayBwbGF5IGNvbmRpdGlvbnMgYXJlIG1ldAogICAgZnJhbWVfZGlnIDIKICAgIGNhbGxzdWIgY2FuX3F1aWNrX3BsYXkKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAyCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjQ4LTY1MgogICAgLy8gZ2FtZV9zdGF0ZS5leHBpcnlfdHMKICAgIC8vIDwgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgICMgR2FtZSBsaXZlIHRpbWVyIG11c3QgZXhwaXJlZCwgT1IKICAgIC8vIG9yIHNydC5jYW5fcXVpY2tfcGxheSgKICAgIC8vICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUKICAgIC8vICkgICMgUXVpY2sgcGxheSBjb25kaXRpb25zIGFyZSBtZXQKICAgIGJ6IHRyaWdnZXJfZ2FtZV9ldmVudF9ib29sX2ZhbHNlQDcKCnRyaWdnZXJfZ2FtZV9ldmVudF9ib29sX3RydWVANjoKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDIKICAgIGludGNfMSAvLyAxCgp0cmlnZ2VyX2dhbWVfZXZlbnRfYm9vbF9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2NDYtNjUzCiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb24gYmVsb3cgZXZhbHVhdGVzIFRydWUKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgZ2FtZV9zdGF0ZS5leHBpcnlfdHMKICAgIC8vICAgICA8IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICAjIEdhbWUgbGl2ZSB0aW1lciBtdXN0IGV4cGlyZWQsIE9SCiAgICAvLyAgICAgb3Igc3J0LmNhbl9xdWlja19wbGF5KAogICAgLy8gICAgICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUKICAgIC8vICAgICApICAjIFF1aWNrIHBsYXkgY29uZGl0aW9ucyBhcmUgbWV0CiAgICAvLyApLCBlcnIuSU5WQUxJRF9UUklHR0VSX0NPTkRJVElPTlMKICAgIGFzc2VydCAvLyBDb25kaXRpb25zIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhpcyBnYW1lIGV2ZW50IGNoZWNrIHdlcmUgaW52YWxpZC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjU1LTY1NgogICAgLy8gIyBDaGVjayBpZiBnYW1lIGlzIGxpdmUKICAgIC8vIHNydC5pc19nYW1lX2xpdmUoZ2FtZV9pZD1nYW1lX2lkLCBnYW1lX3N0YXRlPWdhbWVfc3RhdGUpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICBjYWxsc3ViIGlzX2dhbWVfbGl2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2ODQtNjg1CiAgICAvLyAjIFVwZGF0ZSB0aGUgZ2FtZSBzdGF0ZSBib3ggZGF0YSB3aXRoIGEgY29weSBjb250YWluaW5nIGl0cyBtb2RpZmllZCB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0gPSBnYW1lX3N0YXRlLmNvcHkoKQogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKdHJpZ2dlcl9nYW1lX2V2ZW50X2Jvb2xfZmFsc2VANzoKICAgIGludGNfMCAvLyAwCiAgICBiIHRyaWdnZXJfZ2FtZV9ldmVudF9ib29sX21lcmdlQDgKCnRyaWdnZXJfZ2FtZV9ldmVudF9lbHNlX2JvZHlAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjU4LTY1OQogICAgLy8gIyBUcmlnZ2VyIElEIDIgY29ycmVzcG9uZHMgdy8gZXZlbnQ6IEdhbWUgT3ZlcgogICAgLy8gZWxpZiB0cmlnZ2VyX2lkLm5hdGl2ZSA9PSAyOgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEdhbWUgZXZlbnQgbm90IGZvdW5kLiBDaGVjayBpZiBnYW1lIGV2ZW50IFRyaWdnZXIgSUQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjY2MC02NjEKICAgIC8vICMgRmFpbCB0cmFuc2FjdGlvbiB1bmxlc3MgdGhlIGFzc2VydGlvbiBiZWxvdyBldmFsdWF0ZXMgVHJ1ZQogICAgLy8gYXNzZXJ0IGdhbWVfc3RhdGUuc3Rha2luZ19maW5hbGl6ZWQubmF0aXZlLCBlcnIuU1RBS0lOR19GSU5BTF9GTEFHCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYXNzZXJ0IC8vIEdhbWUgc3RhdGUgc3Rha2luZyBmaW5hbGl6ZWQgYm9vbGVhbiB2YWx1ZSBtaXNtYXRjaC4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjYzCiAgICAvLyBnYW1lX3N0YXRlLmV4cGlyeV90cyA8IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBkdXAKICAgIGV4dHJhY3QgOSA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjYyLTY2NAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBnYW1lX3N0YXRlLmV4cGlyeV90cyA8IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyApLCBlcnIuVElNRV9DT05TVFJBSU5UX1ZJT0xBVElPTgogICAgYXNzZXJ0IC8vIEludmFsaWQgdGltZSBmcmFtZS4gQ2FsbCBtYWRlIG91dHNpZGUgdGhlIHBlcm1pdHRlZCBibG9jayBvciB0aW1lc3RhbXAgcmFuZ2UuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjY2Ni02NzIKICAgIC8vICMgQ2hlY2sgaWYgZ2FtZSBpcyBvdmVyCiAgICAvLyBzcnQuaXNfZ2FtZV9vdmVyKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBnYW1lX3N0YXRlPWdhbWVfc3RhdGUsCiAgICAvLyAgICAgYm94X2dhbWVfcmVnaXN0ZXI9c2VsZi5ib3hfZ2FtZV9yZWdpc3RlciwKICAgIC8vICAgICBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2NzAKICAgIC8vIGJveF9nYW1lX3JlZ2lzdGVyPXNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsCiAgICBieXRlY18wIC8vICJyXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NjcxCiAgICAvLyBib3hfZ2FtZV9wbGF5ZXJzPXNlbGYuYm94X2dhbWVfcGxheWVycywKICAgIGJ5dGVjXzMgLy8gInBfIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2NjYtNjcyCiAgICAvLyAjIENoZWNrIGlmIGdhbWUgaXMgb3ZlcgogICAgLy8gc3J0LmlzX2dhbWVfb3ZlcigKICAgIC8vICAgICBnYW1lX2lkPWdhbWVfaWQsCiAgICAvLyAgICAgZ2FtZV9zdGF0ZT1nYW1lX3N0YXRlLAogICAgLy8gICAgIGJveF9nYW1lX3JlZ2lzdGVyPXNlbGYuYm94X2dhbWVfcmVnaXN0ZXIsCiAgICAvLyAgICAgYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICAvLyApCiAgICBjYWxsc3ViIGlzX2dhbWVfb3ZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo2NzQtNjc1CiAgICAvLyAjIFVwZGF0ZSB0aGUgZ2FtZSBzdGF0ZSBib3ggZGF0YSB3aXRoIGEgY29weSBjb250YWluaW5nIGl0cyBtb2RpZmllZCB2YWx1ZXMKICAgIC8vIHNlbGYuYm94X2dhbWVfc3RhdGVbZ2FtZV9pZF0gPSBnYW1lX3N0YXRlLmNvcHkoKQogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Njc3LTY3OAogICAgLy8gIyBNYWtlIGFuIGVhcmx5IHJldHVybgogICAgLy8gcmV0dXJuCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucGllb3V0LmNvbnRyYWN0LlBpZW91dC5yZXNldF9nYW1lKGdhbWVfaWQ6IHVpbnQ2NCwgY2hhbmdlX3F1aWNrX3BsYXk6IHVpbnQ2NCwgY2hhbmdlX21heF9wbGF5ZXJzOiB1aW50NjQsIG5ld19tYXhfcGxheWVyczogdWludDY0LCBzdGFrZV9wYXk6IHVpbnQ2NCkgLT4gdm9pZDoKcmVzZXRfZ2FtZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Njg3LTY5NgogICAgLy8gIyBBbGxvdyBhZG1pbiB0byByZXNldCBhbiBleGlzdGluZyBnYW1lIGluc3RhbmNlCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiByZXNldF9nYW1lKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgZ2FtZV9pZDogVUludDY0LAogICAgLy8gICAgIGNoYW5nZV9xdWlja19wbGF5OiBib29sLCAgIyBub3FhOiBGQlQwMDEKICAgIC8vICAgICBjaGFuZ2VfbWF4X3BsYXllcnM6IGJvb2wsICAjIG5vcWE6IEZCVDAwMQogICAgLy8gICAgIG5ld19tYXhfcGxheWVyczogVUludDY0LAogICAgLy8gICAgIHN0YWtlX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24sCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byA1IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Njk3LTY5OAogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9ucyBiZWxvdyBldmFsdWF0ZSBUcnVlCiAgICAvLyBhc3NlcnQgR2xvYmFsLmdyb3VwX3NpemUgPT0gMiwgZXJyLklOVkFMSURfR1JPVVBfU0laRQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBncm91cCBzaXplLiBFbnN1cmUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGluIGdyb3VwIGlzIHdpdGhpbiB2YWxpZCBib3VuZHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjY5OQogICAgLy8gYXNzZXJ0IGdhbWVfaWQgaW4gc2VsZi5ib3hfZ2FtZV9zdGF0ZSwgZXJyLkdBTUVfSURfTk9UX0ZPVU5ECiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gInNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJveCBnYW1lIHN0YXRlIG5vdCBmb3VuZC4gQ2hlY2sgaWYgZ2FtZSBJRCBleGlzdHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjcwMQogICAgLy8gYXNzZXJ0IHN0YWtlX3BheS5zZW5kZXIgPT0gVHhuLnNlbmRlciwgZXJyLklOVkFMSURfU1RBS0VfUEFZX1NFTkRFUgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gU3Rha2UgcGF5bWVudCBzZW5kZXIgYWRkcmVzcyBtdXN0IG1hdGNoIHRyYW5zYWN0aW9uIHNlbmRlciBhZGRyZXNzLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3MDMKICAgIC8vIHN0YWtlX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzAyLTcwNAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzdGFrZV9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfU1RBS0VfUEFZX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gU3Rha2UgcGF5bWVudCByZWNlaXZlciBhZGRyZXNzIG11c3QgbWF0Y2ggYXBwbGljYXRpb24gYWRkcmVzcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzA1CiAgICAvLyBhc3NlcnQgc3Rha2VfcGF5LmFtb3VudCA+PSBjc3QuU1RBS0VfQU1PVU5ULCBlcnIuSU5WQUxJRF9TVEFLRV9QQVlfRkVFCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgaW50YyA0IC8vIDEwMDAwMDAKICAgID49CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGZ1bmRzLiBTdGFrZSBwYXkgYW1vdW50IGlzIG5vdCBlbm91Z2ggdG8gY292ZXIgc3Rha2luZyByZXF1aXJlbWVudHMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjcwNy03MTAKICAgIC8vICMgUmV0cmlldmUgY3VycmVudCBnYW1lIHN0YXRlIGRhdGEgZnJvbSBpdHMgY29ycmVzcG9uZGluZyBib3ggdXNpbmcgdGhlIGdhbWUgaWQgcGFyYW1ldGVyCiAgICAvLyBnYW1lX3N0YXRlID0gc2VsZi5ib3hfZ2FtZV9zdGF0ZVsKICAgIC8vICAgICBnYW1lX2lkCiAgICAvLyBdLmNvcHkoKSAgIyBNYWtlIGEgY29weSBvZiB0aGUgZ2FtZSBzdGF0ZSBlbHNlIGltbXV0YWJsZQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfc3RhdGUgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjcxMi03MTMKICAgIC8vICMgRmFpbCB0cmFuc2FjdGlvbiB1bmxlc3MgdGhlIGFzc2VydGlvbiBiZWxvdyBldmFsdWF0ZXMgVHJ1ZQogICAgLy8gYXNzZXJ0IGdhbWVfc3RhdGUuYWRtaW5fYWRkcmVzcyA9PSBUeG4uc2VuZGVyLCBlcnIuSU5WQUxJRF9BRE1JTgogICAgZHVwCiAgICBleHRyYWN0IDI1IDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydCAvLyBBY2NvdW50IGlzIG5vdCByZWNvZ25pemVkIGFzIHRoZSBhZG1pbiBhZGRyZXNzIGZvciB0aGlzIGdhbWUuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjcxNAogICAgLy8gYXNzZXJ0IGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgPT0gMCwgZXJyLk5PTl9aRVJPX1BSSVpFX1BPT0wKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgICEKICAgIGFzc2VydCAvLyBQcml6ZSBwb29sIG5vdCBlbXB0eS4gQW1vdW50IGluIHByaXplIHBvb2wgbXVzdCBiZSB6ZXJvLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3MTUKICAgIC8vIGFzc2VydCBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA9PSAwLCBlcnIuTk9OX1pFUk9fQUNUSVZFX1BMQVlFUlMKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgIGdldGJ5dGUKICAgICEKICAgIGFzc2VydCAvLyBHYW1lIGxvYmJ5IG5vdCBlbXB0eS4gTnVtYmVyIG9mIGFjdGl2ZSBwbGF5ZXJzIG11c3QgYmUgemVyby4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzE5CiAgICAvLyBrZXk9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLmtleV9wcmVmaXggKyBvcC5pdG9iKGdhbWVfaWQpCiAgICBieXRlY18zIC8vICJwXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzE3LTcyMAogICAgLy8gIyBGb3IgZ2FtZSBwbGF5ZXJzIGJveCwgcmVwbGFjZSB0aGUgc2VuZGVyJ3MgYWRkcmVzcyBhdCBzdGFydCBpbmRleCAwCiAgICAvLyBnYW1lX3BsYXllcnNfYnJlZiA9IEJveFJlZigKICAgIC8vICAgICBrZXk9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLmtleV9wcmVmaXggKyBvcC5pdG9iKGdhbWVfaWQpCiAgICAvLyApCiAgICB1bmNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzE5CiAgICAvLyBrZXk9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLmtleV9wcmVmaXggKyBvcC5pdG9iKGdhbWVfaWQpCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzIxCiAgICAvLyBnYW1lX3BsYXllcnNfYnJlZi5yZXBsYWNlKDAsIFR4bi5zZW5kZXIuYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgdHhuIFNlbmRlcgogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzIzLTcyNAogICAgLy8gIyBSZXNldCBnYW1lIHN0YXRlIHByb3BlcnRpZXMgYmFjayB0byB0aGVpciBkZWZhdWx0IHN0YXJ0aW5nIHZhbHVlcwogICAgLy8gZ2FtZV9zdGF0ZS5zdGFraW5nX2ZpbmFsaXplZCA9IGFyYzQuQm9vbChGYWxzZSkgICMgbm9xYTogRkJUMDAzCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzI1CiAgICAvLyBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzID0gYXJjNC5VSW50OCgxKQogICAgcHVzaGJ5dGVzIDB4MDEKICAgIHJlcGxhY2UyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzI2CiAgICAvLyBnYW1lX3N0YXRlLmZpcnN0X3BsYWNlX3Njb3JlID0gYXJjNC5VSW50OCgwKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICByZXBsYWNlMiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjcyNwogICAgLy8gZ2FtZV9zdGF0ZS5zZWNvbmRfcGxhY2Vfc2NvcmUgPSBhcmM0LlVJbnQ4KDApCiAgICBieXRlY18xIC8vIDB4MDAKICAgIHJlcGxhY2UyIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzI4CiAgICAvLyBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX3Njb3JlID0gYXJjNC5VSW50OCgwKQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICByZXBsYWNlMiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjcyOQogICAgLy8gZ2FtZV9zdGF0ZS5ib3hfcF9zdGFydF9wb3MgPSBhcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFKQogICAgYnl0ZWMgOSAvLyAweDAwMjAKICAgIHJlcGxhY2UyIDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzMxCiAgICAvLyBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCArIGNzdC5QSEFTRV9FWFBJUllfSU5URVJWQUwKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGMgNSAvLyAxMjAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjczMC03MzIKICAgIC8vIGdhbWVfc3RhdGUuZXhwaXJ5X3RzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBjc3QuUEhBU0VfRVhQSVJZX0lOVEVSVkFMCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjczNAogICAgLy8gZ2FtZV9zdGF0ZS5wcml6ZV9wb29sLm5hdGl2ZSArIGNzdC5TVEFLRV9BTU9VTlQKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgIGludGMgNCAvLyAxMDAwMDAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjczMy03MzUKICAgIC8vIGdhbWVfc3RhdGUucHJpemVfcG9vbCA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUgKyBjc3QuU1RBS0VfQU1PVU5UCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3MzYKICAgIC8vIGdhbWVfc3RhdGUuZmlyc3RfcGxhY2VfYWRkcmVzcyA9IGFyYzQuQWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICByZXBsYWNlMiA1NwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3MzcKICAgIC8vIGdhbWVfc3RhdGUuc2Vjb25kX3BsYWNlX2FkZHJlc3MgPSBhcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcykKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgcmVwbGFjZTIgODkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzM4CiAgICAvLyBnYW1lX3N0YXRlLnRoaXJkX3BsYWNlX2FkZHJlc3MgPSBhcmM0LkFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcykKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgcmVwbGFjZTIgMTIxCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzQwLTc0MQogICAgLy8gIyBJZiBjYWxsZXIgc2V0cyBjaGFuZ2VfcXVpY2tfcGxheSBib29sIGFzIFRydWUKICAgIC8vIGlmIGNoYW5nZV9xdWlja19wbGF5OgogICAgZnJhbWVfZGlnIC00CiAgICBieiByZXNldF9nYW1lX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NDQKICAgIC8vIG5vdCBnYW1lX3N0YXRlLnF1aWNrX3BsYXlfZW5hYmxlZC5uYXRpdmUKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBnZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAhCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc0Mi03NDUKICAgIC8vICMgRmxpcCB0aGUgcXVpY2sgcGxheSBib29sIHZhbHVlCiAgICAvLyBnYW1lX3N0YXRlLnF1aWNrX3BsYXlfZW5hYmxlZCA9IGFyYzQuQm9vbCgKICAgIC8vICAgICBub3QgZ2FtZV9zdGF0ZS5xdWlja19wbGF5X2VuYWJsZWQubmF0aXZlCiAgICAvLyApCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHNldGJpdAogICAgZnJhbWVfYnVyeSAyCgpyZXNldF9nYW1lX2FmdGVyX2lmX2Vsc2VAMjoKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc0Ny03NDgKICAgIC8vICMgSWYgY2FsbGVyIHNldHMgY2hhbmdlX21heF9wbGF5ZXJzIGJvb2wgYXMgVHJ1ZQogICAgLy8gaWYgY2hhbmdlX21heF9wbGF5ZXJzOgogICAgZnJhbWVfZGlnIC0zCiAgICBieiByZXNldF9nYW1lX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NTEKICAgIC8vIG5ld19tYXhfcGxheWVycyA+PSBjc3QuTUFYX1BMQVlFUlNfQk9UX0JPVU5ECiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NTEtNzUyCiAgICAvLyBuZXdfbWF4X3BsYXllcnMgPj0gY3N0Lk1BWF9QTEFZRVJTX0JPVF9CT1VORAogICAgLy8gYW5kIG5ld19tYXhfcGxheWVycyA8PSBjc3QuTUFYX1BMQVlFUlNfVE9QX0JPVU5ECiAgICBieiByZXNldF9nYW1lX2Jvb2xfZmFsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NTIKICAgIC8vIGFuZCBuZXdfbWF4X3BsYXllcnMgPD0gY3N0Lk1BWF9QTEFZRVJTX1RPUF9CT1VORAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NTEtNzUyCiAgICAvLyBuZXdfbWF4X3BsYXllcnMgPj0gY3N0Lk1BWF9QTEFZRVJTX0JPVF9CT1VORAogICAgLy8gYW5kIG5ld19tYXhfcGxheWVycyA8PSBjc3QuTUFYX1BMQVlFUlNfVE9QX0JPVU5ECiAgICBieiByZXNldF9nYW1lX2Jvb2xfZmFsc2VANgogICAgaW50Y18xIC8vIDEKCnJlc2V0X2dhbWVfYm9vbF9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NDktNzUzCiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gaWYgbmV3IG1heCBwbGF5ZXJzIGFyZ3VtZW50IGlzIG91dHNpZGUgcGVybWl0dGVkIGJvdW5kcwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBuZXdfbWF4X3BsYXllcnMgPj0gY3N0Lk1BWF9QTEFZRVJTX0JPVF9CT1VORAogICAgLy8gICAgIGFuZCBuZXdfbWF4X3BsYXllcnMgPD0gY3N0Lk1BWF9QTEFZRVJTX1RPUF9CT1VORAogICAgLy8gKSwgZXJyLklOVkFMSURfTUFYX1BMQVlFUlMKICAgIGFzc2VydCAvLyBUaGUgbnVtYmVyIG9mIG1heCBwbGF5ZXJzIG11c3QgYmUgd2l0aGluIGJvdW5kcy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzU1LTc1NgogICAgLy8gIyBVcGRhdGUgdGhlIG9sZCBtYXggcGxheWVycyB2YWx1ZSB3aXRoIHRoZSBuZXcgdmFsdWUKICAgIC8vIGdhbWVfc3RhdGUubWF4X3BsYXllcnMgPSBhcmM0LlVJbnQ4KG5ld19tYXhfcGxheWVycykKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIHJlcGxhY2UyIDEKICAgIGZyYW1lX2J1cnkgMgoKcmVzZXRfZ2FtZV9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc1OC03NTkKICAgIC8vICMgQ29weSB0aGUgbW9kaWZpZWQgZ2FtZSBzdGF0ZSBhbmQgc3RvcmUgaXQgYXMgbmV3IHZhbHVlIG9mIGJveAogICAgLy8gc2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXSA9IGdhbWVfc3RhdGUuY29weSgpCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDIKICAgIGJveF9wdXQKICAgIHJldHN1YgoKcmVzZXRfZ2FtZV9ib29sX2ZhbHNlQDY6CiAgICBpbnRjXzAgLy8gMAogICAgYiByZXNldF9nYW1lX2Jvb2xfbWVyZ2VANwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LmRlbGV0ZV9nYW1lKGdhbWVfaWQ6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlX2dhbWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc2MS03NjYKICAgIC8vICMgQWxsb3cgYXBwbGljYXRpb24gY3JlYXRvciBvciBhZG1pbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgZ2FtZSBpbnN0YW5jZQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGVsZXRlX2dhbWUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBnYW1lX2lkOiBVSW50NjQsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3NjctNzY4CiAgICAvLyAjIEZhaWwgdHJhbnNhY3Rpb24gdW5sZXNzIHRoZSBhc3NlcnRpb25zIGJlbG93IGV2YWx1YXRlIFRydWUKICAgIC8vIGFzc2VydCBHbG9iYWwuZ3JvdXBfc2l6ZSA9PSAxLCBlcnIuU1RBTkRBTE9ORV9UWE5fT05MWQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBncm91cCBzaXplLiBUaGlzIGFwcCBjYWxsIGNhbiBvbmx5IHRha2Ugc3RhbmRhbG9uZSB0cmFuc2FjdGlvbnMuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc2OQogICAgLy8gYXNzZXJ0IGdhbWVfaWQgaW4gc2VsZi5ib3hfZ2FtZV9zdGF0ZSwgZXJyLkdBTUVfSURfTk9UX0ZPVU5ECiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYnl0ZWMgNCAvLyAic18iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQm94IGdhbWUgc3RhdGUgbm90IGZvdW5kLiBDaGVjayBpZiBnYW1lIElEIGV4aXN0cy4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzcxLTc3NAogICAgLy8gIyBSZXRyaWV2ZSBjdXJyZW50IGdhbWUgc3RhdGUgZGF0YSBmcm9tIGl0cyBjb3JyZXNwb25kaW5nIGJveCB1c2luZyB0aGUgZ2FtZSBpZCBwYXJhbWV0ZXIKICAgIC8vIGdhbWVfc3RhdGUgPSBzZWxmLmJveF9nYW1lX3N0YXRlWwogICAgLy8gICAgIGdhbWVfaWQKICAgIC8vIF0uY29weSgpICAjIE1ha2UgYSBjb3B5IG9mIHRoZSBnYW1lIHN0YXRlIGVsc2UgaW1tdXRhYmxlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfc3RhdGUgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc3Ni03NzcKICAgIC8vICMgR2V0IHRoZSBhZG1pbiBhY2NvdW50IGFkZHJlc3MgZnJvbSB0aGUgZ2FtZSBzdGF0ZSBib3gKICAgIC8vIGFkbWluID0gc2VsZi5ib3hfZ2FtZV9zdGF0ZVtnYW1lX2lkXS5hZG1pbl9hZGRyZXNzLm5hdGl2ZQogICAgZXh0cmFjdCAyNSAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3ODEKICAgIC8vIFR4bi5zZW5kZXIgPT0gYWRtaW4gb3IgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYm56IGRlbGV0ZV9nYW1lX2Jvb2xfdHJ1ZUAyCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBieiBkZWxldGVfZ2FtZV9ib29sX2ZhbHNlQDMKCmRlbGV0ZV9nYW1lX2Jvb2xfdHJ1ZUAyOgogICAgaW50Y18xIC8vIDEKCmRlbGV0ZV9nYW1lX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Nzc5LTc4MgogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9ucyBiZWxvdyBldmFsdWF0ZSBUcnVlCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIFR4bi5zZW5kZXIgPT0gYWRtaW4gb3IgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9DQUxMRVIKICAgIGFzc2VydCAvLyBBY2NvdW50IGlzIG5vdCBhdXRob3JpemVkIHRvIG1ha2UgdGhpcyBjYWxsLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3ODQtNzg1CiAgICAvLyAjIEVuc3VyZSBnYW1lIGhhcyB6ZXJvIGFjdGl2ZSBwbGF5ZXJzIE9SIG9ubHkgcGxheWVyIGxlZnQgaXMgdGhlIGFkbWluCiAgICAvLyBpZiBnYW1lX3N0YXRlLmFjdGl2ZV9wbGF5ZXJzLm5hdGl2ZSA9PSAxOgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMiAvLyAyCiAgICBnZXRieXRlCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZWxldGVfZ2FtZV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3ODYtNzkyCiAgICAvLyBhc3NlcnQgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PWFkbWluLAogICAgLy8gICAgIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgIHBsYXllcl9jb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKSwgZXJyLkFETUlOX1NPTEVfUExBWUVSCiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc4OQogICAgLy8gYm94X2dhbWVfcGxheWVycz1zZWxmLmJveF9nYW1lX3BsYXllcnMsCiAgICBieXRlY18zIC8vICJwXyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzkwCiAgICAvLyBwbGF5ZXJfY291bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6NzkxCiAgICAvLyBjbGVhcl9wbGF5ZXI9RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3ODYtNzkyCiAgICAvLyBhc3NlcnQgc3J0LmNoZWNrX2FjY19pbl9nYW1lKAogICAgLy8gICAgIGdhbWVfaWQ9Z2FtZV9pZCwKICAgIC8vICAgICBhY2NvdW50PWFkbWluLAogICAgLy8gICAgIGJveF9nYW1lX3BsYXllcnM9c2VsZi5ib3hfZ2FtZV9wbGF5ZXJzLAogICAgLy8gICAgIHBsYXllcl9jb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgY2xlYXJfcGxheWVyPUZhbHNlLAogICAgLy8gKSwgZXJyLkFETUlOX1NPTEVfUExBWUVSCiAgICBjYWxsc3ViIGNoZWNrX2FjY19pbl9nYW1lCiAgICBhc3NlcnQgLy8gR2FtZSBhZG1pbiBhZGRyZXNzIG11c3QgYmUgc29sZSByZW1haW5pbmcgYWN0aXZlIHBsYXllciBpbiB0aGUgZ2FtZS4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6Nzk2CiAgICAvLyByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3OTcKICAgIC8vIGFtb3VudD1nYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlLAogICAgZnJhbWVfZGlnIDMKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojc5OC04MDAKICAgIC8vIG5vdGU9U3RyaW5nKAogICAgLy8gICAgICdwaWVvdXQ6ansibWV0aG9kIjoiZGVsZXRlX2dhbWUiLCJjb25jZXJuIjoiaXR4bi5wYXk7cHJpemVfcG9vbF9hZG1pbl9zdGFrZSJ9JwogICAgLy8gKSwKICAgIHB1c2hieXRlcyAicGllb3V0Omp7XCJtZXRob2RcIjpcImRlbGV0ZV9nYW1lXCIsXCJjb25jZXJuXCI6XCJpdHhuLnBheTtwcml6ZV9wb29sX2FkbWluX3N0YWtlXCJ9IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo3OTQtODAxCiAgICAvLyAjIElzc3VlIHByaXplIHBvb2wgcGF5b3V0cyBlcXVhbCB0byBhZG1pbiBzdGFrZQogICAgLy8gc3J0LnBheW91dF9pdHhuKAogICAgLy8gICAgIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYW1vdW50PWdhbWVfc3RhdGUucHJpemVfcG9vbC5uYXRpdmUsCiAgICAvLyAgICAgbm90ZT1TdHJpbmcoCiAgICAvLyAgICAgICAgICdwaWVvdXQ6ansibWV0aG9kIjoiZGVsZXRlX2dhbWUiLCJjb25jZXJuIjoiaXR4bi5wYXk7cHJpemVfcG9vbF9hZG1pbl9zdGFrZSJ9JwogICAgLy8gICAgICksCiAgICAvLyApCiAgICBjYWxsc3ViIHBheW91dF9pdHhuCgpkZWxldGVfZ2FtZV9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgwOC04MDkKICAgIC8vICMgRGVsZXRlIGJveCBnYW1lIHN0YXRlIGFuZCBib3ggZ2FtZSBwbGF5ZXJzIGZyb20gdGhlIHNtYXJ0IGNvbnRyYWN0IHN0b3JhZ2UKICAgIC8vIGRlbCBzZWxmLmJveF9nYW1lX3N0YXRlW2dhbWVfaWRdCiAgICBmcmFtZV9kaWcgMgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgxMAogICAgLy8gZGVsIHNlbGYuYm94X2dhbWVfcGxheWVyc1tnYW1lX2lkXQogICAgYnl0ZWNfMyAvLyAicF8iCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6ODEyLTgxMwogICAgLy8gIyBTZXQgdGhlIGhvc3RpbmcgZ2FtZSBmbGFnIGluIGFkbWluJ3MgZ2FtZSByZWdpc3RlciBib3ggdG8gRmFsc2UKICAgIC8vIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXJbYWRtaW5dLmhvc3RpbmdfZ2FtZSA9IGFyYzQuQm9vbChGYWxzZSkgICMgbm9xYTogRkJUMDAzCiAgICBieXRlY18wIC8vICJyXyIKICAgIGZyYW1lX2RpZyA0CiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfcmVnaXN0ZXIgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBzZXRiaXQKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6ODE4CiAgICAvLyB2YWx1ZV9zaXplPWFyYzQuVUludDE2KGNzdC5BRERSRVNTX1NJWkUgKiBnYW1lX3N0YXRlLm1heF9wbGF5ZXJzLm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18xIC8vIDEKICAgIGdldGJ5dGUKICAgIGludGNfMyAvLyAzMgogICAgKgogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgxNwogICAgLy8ga2V5X3NpemU9YXJjNC5VSW50OCgxMCksCiAgICBwdXNoYnl0ZXMgMHgwYQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4MTUtODE5CiAgICAvLyAjIENhbGN1bGF0ZSBib3ggZ2FtZSBwbGF5ZXJzIGZlZQogICAgLy8gYm94X3BfY29zdCA9IHNlbGYuY2FsY19zaW5nbGVfYm94X2Nvc3QoCiAgICAvLyAgICAga2V5X3NpemU9YXJjNC5VSW50OCgxMCksCiAgICAvLyAgICAgdmFsdWVfc2l6ZT1hcmM0LlVJbnQxNihjc3QuQUREUkVTU19TSVpFICogZ2FtZV9zdGF0ZS5tYXhfcGxheWVycy5uYXRpdmUpLAogICAgLy8gKQogICAgc3dhcAogICAgY2FsbHN1YiBjYWxjX3NpbmdsZV9ib3hfY29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4MjMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgyNAogICAgLy8gYW1vdW50PWNzdC5CT1hfU19DT1NUICsgYm94X3BfY29zdCwKICAgIGludGMgMTEgLy8gODA1MDAKICAgIHVuY292ZXIgMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4MjUtODI3CiAgICAvLyBub3RlPVN0cmluZygKICAgIC8vICAgICAncGllb3V0Omp7Im1ldGhvZCI6ImRlbGV0ZV9nYW1lIiwiY29uY2VybiI6Iml0eG4ucGF5O2JveF9zX21icl9yZWZ1bmQrYm94X3BfbWJyX3JlZnVuZCJ9JwogICAgLy8gKSwKICAgIHB1c2hieXRlcyAicGllb3V0Omp7XCJtZXRob2RcIjpcImRlbGV0ZV9nYW1lXCIsXCJjb25jZXJuXCI6XCJpdHhuLnBheTtib3hfc19tYnJfcmVmdW5kK2JveF9wX21icl9yZWZ1bmRcIn0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgyMS04MjgKICAgIC8vICMgSXNzdWUgTUJSIHJlZnVuZCBmb3IgZ2FtZSBzdGF0ZSBib3ggYW5kIGdhbWUgcGxheWVycyBib3ggZGVsZXRpb24gdmlhIGEgcGF5bWVudCBpbm5lciB0cmFuc2FjdGlvbgogICAgLy8gc3J0LnBheW91dF9pdHhuKAogICAgLy8gICAgIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYW1vdW50PWNzdC5CT1hfU19DT1NUICsgYm94X3BfY29zdCwKICAgIC8vICAgICBub3RlPVN0cmluZygKICAgIC8vICAgICAgICAgJ3BpZW91dDpqeyJtZXRob2QiOiJkZWxldGVfZ2FtZSIsImNvbmNlcm4iOiJpdHhuLnBheTtib3hfc19tYnJfcmVmdW5kK2JveF9wX21icl9yZWZ1bmQifScKICAgIC8vICAgICApLAogICAgLy8gKQogICAgY2FsbHN1YiBwYXlvdXRfaXR4bgogICAgcmV0c3ViCgpkZWxldGVfZ2FtZV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6ODA0LTgwNQogICAgLy8gIyBGYWlsIHRyYW5zYWN0aW9uIHVubGVzcyB0aGUgYXNzZXJ0aW9uIGJlbG93IGV2YWx1YXRlcyBUcnVlCiAgICAvLyBhc3NlcnQgZ2FtZV9zdGF0ZS5hY3RpdmVfcGxheWVycy5uYXRpdmUgPT0gMCwgZXJyLk5PTl9aRVJPX0FDVElWRV9QTEFZRVJTCiAgICBmcmFtZV9kaWcgMAogICAgIQogICAgYXNzZXJ0IC8vIEdhbWUgbG9iYnkgbm90IGVtcHR5LiBOdW1iZXIgb2YgYWN0aXZlIHBsYXllcnMgbXVzdCBiZSB6ZXJvLgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4MDYKICAgIC8vIGFzc2VydCBnYW1lX3N0YXRlLnByaXplX3Bvb2wubmF0aXZlID09IDAsIGVyci5OT05fWkVST19QUklaRV9QT09MCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgICEKICAgIGFzc2VydCAvLyBQcml6ZSBwb29sIG5vdCBlbXB0eS4gQW1vdW50IGluIHByaXplIHBvb2wgbXVzdCBiZSB6ZXJvLgogICAgYiBkZWxldGVfZ2FtZV9hZnRlcl9pZl9lbHNlQDcKCmRlbGV0ZV9nYW1lX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIGRlbGV0ZV9nYW1lX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5waWVvdXQuY29udHJhY3QuUGllb3V0LnRlcm1pbmF0ZSgpIC0+IHZvaWQ6CnRlcm1pbmF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6ODMwLTgzMgogICAgLy8gIyBBbGxvdyBhcHBsaWNhdGlvbiBjcmVhdG9yIHRvIGRlbGV0ZSB0aGUgc21hcnQgY29udHJhY3QgYXBwbGljYXRpb24KICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiRGVsZXRlQXBwbGljYXRpb24iXSkKICAgIC8vIGRlZiB0ZXJtaW5hdGUoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgzMy04MzQKICAgIC8vICMgRmFpbCB0cmFuc2FjdGlvbiB1bmxlc3MgdGhlIGFzc2VydGlvbnMgYmVsb3cgZXZhbHVhdGUgVHJ1ZQogICAgLy8gYXNzZXJ0IFRlbXBsYXRlVmFyW2Jvb2xdKCJERUxFVEFCTEUiKSwgZXJyLkRFTEVURUFCTEVfTk9UX1RSVUUKICAgIGludGMgMTQgLy8gVE1QTF9ERUxFVEFCTEUKICAgIGFzc2VydCAvLyBUZW1wbGF0ZSB2YXJpYWJsZSAnREVMRVRBQkxFJyBuZWVkcyB0byBiZSAnVHJ1ZScgYXQgZGVwbG95LXRpbWUuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgzNQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcywgZXJyLklOVkFMSURfQ1JFQVRPUgogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBtYXRjaCBhcHBsaWNhdGlvbiBjcmVhdG9yIGFkZHJlc3MuCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgzNy04MzgKICAgIC8vICMgQ2hlY2sgaWYgZ2FtZSB0cm9waHkgYm94IGV4aXN0cwogICAgLy8gaWYgc2VsZi5ib3hfZ2FtZV90cm9waHk6CiAgICBieXRlY18yIC8vICJ0XyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogdGVybWluYXRlX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NDEKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NDIKICAgIC8vIHNlbGYuYm94X2dhbWVfdHJvcGh5LnZhbHVlLmFzc2V0X2lkLm5hdGl2ZSwKICAgIGJ5dGVjXzIgLy8gInRfIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfdHJvcGh5IGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5OjgzOS04NDMKICAgIC8vICMgVXNlIGdhbWUgdHJvcGh5IGJveCBkYXRhIGFzc2V0IGlkIHByb3BlcnR5IHRvIGNoZWNrIGFwcCBhY2NvdW50IGFzc2V0IGJhbGFuY2UgZm9yIHRyb3BoeQogICAgLy8gYXNzZXRfYmFsYW5jZSwgYXNzZXRfZXhpc3RzID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoCiAgICAvLyAgICAgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZS5hc3NldF9pZC5uYXRpdmUsCiAgICAvLyApCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NDQtODQ1CiAgICAvLyAjIElmIGFzc2V0IGV4aXN0cyBhbmQgaXRzIGJhbGFuY2UgaXMgMSwgcGVyZm9ybSBidXJuIHZpYSBhc3NldCBjb25maWcgaW5uZXIgdHJhbnNhY3Rpb24KICAgIC8vIGlmIGFzc2V0X2V4aXN0cyBhbmQgYXNzZXRfYmFsYW5jZSA9PSAxOgogICAgYnogdGVybWluYXRlX2FmdGVyX2lmX2Vsc2VANAogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogdGVybWluYXRlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NDcKICAgIC8vIGFzc2V0X2lkPXNlbGYuYm94X2dhbWVfdHJvcGh5LnZhbHVlLmFzc2V0X2lkLm5hdGl2ZSwKICAgIGJ5dGVjXzIgLy8gInRfIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2dhbWVfdHJvcGh5IGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L3N1YnJvdXRpbmVzLnB5OjI5LTMyCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBub3RlPW5vdGUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojg0OC04NTAKICAgIC8vIG5vdGU9U3RyaW5nKAogICAgLy8gICAgICdwaWVvdXQ6ansibWV0aG9kIjoidGVybWluYXRlIiwiY29uY2VybiI6Iml0eG4uYXNzZXRfY29uZmlnO2J1cm5fdHJvcGh5X2Fzc2V0In0nCiAgICAvLyApLAogICAgcHVzaGJ5dGVzICJwaWVvdXQ6antcIm1ldGhvZFwiOlwidGVybWluYXRlXCIsXCJjb25jZXJuXCI6XCJpdHhuLmFzc2V0X2NvbmZpZztidXJuX3Ryb3BoeV9hc3NldFwifSIKICAgIGl0eG5fZmllbGQgTm90ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9zdWJyb3V0aW5lcy5weToyOQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvc3Vicm91dGluZXMucHk6MjktMzIKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0X2lkLAogICAgLy8gICAgIG5vdGU9bm90ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0Cgp0ZXJtaW5hdGVfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NTItODUzCiAgICAvLyAjIERlbGV0ZSBib3ggZ2FtZSB0cm9waHkgZnJvbSBjb250cmFjdCBzdG9yYWdlIGlmIGl0IGV4c2lzdHMKICAgIC8vIGRlbCBzZWxmLmJveF9nYW1lX3Ryb3BoeS52YWx1ZQogICAgYnl0ZWNfMiAvLyAidF8iCiAgICBib3hfZGVsCiAgICBwb3AKCnRlcm1pbmF0ZV9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojg1NS04NjEKICAgIC8vICMgSXNzdWUgcGF5bWVudCBpbm5lciB0cmFuc2FjdGlvbiBjbG9zaW5nIGFsbCByZW1haW5pbmcgZnVuZHMgaW4gYXBwbGljYXRpb24gYWNjb3VudCBiYWxhbmNlCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ9MCwKICAgIC8vICAgICBjbG9zZV9yZW1haW5kZXJfdG89VHhuLnNlbmRlciwKICAgIC8vICAgICBub3RlPWIncGllb3V0Omp7Im1ldGhvZCI6InRlcm1pbmF0ZSIsImNvbmNlcm4iOiJpdHhuLnBheTtjbG9zZV9yZW1haW5kZXJfdG8ifScsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojg1NwogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6ODU5CiAgICAvLyBjbG9zZV9yZW1haW5kZXJfdG89VHhuLnNlbmRlciwKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NjAKICAgIC8vIG5vdGU9YidwaWVvdXQ6ansibWV0aG9kIjoidGVybWluYXRlIiwiY29uY2VybiI6Iml0eG4ucGF5O2Nsb3NlX3JlbWFpbmRlcl90byJ9JywKICAgIHB1c2hieXRlcyAweDcwNjk2NTZmNzU3NDNhNmE3YjIyNmQ2NTc0Njg2ZjY0MjIzYTIyNzQ2NTcyNmQ2OTZlNjE3NDY1MjIyYzIyNjM2ZjZlNjM2NTcyNmUyMjNhMjI2OTc0Nzg2ZTJlNzA2MTc5M2I2MzZjNmY3MzY1NWY3MjY1NmQ2MTY5NmU2NDY1NzI1Zjc0NmYyMjdkCiAgICBpdHhuX2ZpZWxkIE5vdGUKICAgIGl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwogICAgLy8gc21hcnRfY29udHJhY3RzL3BpZW91dC9jb250cmFjdC5weTo4NTgKICAgIC8vIGFtb3VudD0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGllb3V0L2NvbnRyYWN0LnB5Ojg1NS04NTYKICAgIC8vICMgSXNzdWUgcGF5bWVudCBpbm5lciB0cmFuc2FjdGlvbiBjbG9zaW5nIGFsbCByZW1haW5pbmcgZnVuZHMgaW4gYXBwbGljYXRpb24gYWNjb3VudCBiYWxhbmNlCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9waWVvdXQvY29udHJhY3QucHk6ODU1LTg2MQogICAgLy8gIyBJc3N1ZSBwYXltZW50IGlubmVyIHRyYW5zYWN0aW9uIGNsb3NpbmcgYWxsIHJlbWFpbmluZyBmdW5kcyBpbiBhcHBsaWNhdGlvbiBhY2NvdW50IGJhbGFuY2UKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudD0wLAogICAgLy8gICAgIGNsb3NlX3JlbWFpbmRlcl90bz1UeG4uc2VuZGVyLAogICAgLy8gICAgIG5vdGU9YidwaWVvdXQ6ansibWV0aG9kIjoidGVybWluYXRlIiwiY29uY2VybiI6Iml0eG4ucGF5O2Nsb3NlX3JlbWFpbmRlcl90byJ9JywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAPAAECIMCEPbAJoI0GhOgBrf7V5NSF/ahYz4Keu+/v3oIU/////w/09AT//wMAACYNAnJfAQACdF8CcF8Cc18EFR98dQgAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdnYW1lX2lkAgAgBNvfT3cEGnie0AMGgQExG0EAloIPBGMzzZ0Etm0vVgQdI2o3BAS3FuEEu/qOAQSxaqlxBFviGfAEskYO9gQ65090BB+gZekE9skSUQTB2hu2BBKXhBcEca+WbgTcNJcHJwonC4IEBJ7unBgEcQ67jwQYmKAuBF/xbaQ2GgCOFQG4AacBkQF1AVsBRgE5ARkBDQD3AOsA2QClAIsAewBrAFsASAAgABAAAiJDMRmBBRJEMRhEiBLfI0MxGRREMRhENhoBF4gRjCNDMRkURDEYRDYaARc2GgIiUzYaAyJTNhoEFzEWIwlJOBAjEkSIEIojQzEZFEQxGEQ2GgEXNhoCiA/GI0MxGRREMRhENhoBF4gLrSNDMRkURDEYRDYaAReIC0cjQzEZFEQxGEQ2GgEXiAraI0MxGRREMRhENhoBFzEWIwlJOBAjEkSICf4jQzEZFEQxGEQ2GgEiUzYaAhcxFoEDCUk4ECMSRDEWJAlJOBAjEkQxFiMJSTgQIxJEiAisI0MxGRREMRhENhoBF8AciAgAI0MxGRREMRhEiAdhI0MxGRREMRhEMRYjCUk4ECMSRIgG+iNDMRkURDEYRIgGYSNDMRkURDEYRDEWJAlJOBAjEkQxFiMJSTgQIxJEiAVgI0MxGRREMRgURIgFSCNDMRkURDEYRDYaAReIBNYnBUxQsCNDMRkURDEYRDYaAReIBLMpIk8CVCcFTFCwI0MxGRREMRhENhoBF8AciASMKSJPAlQnBUxQsCNDMRkURDEYRIgEcSkiTwJUJwVMULAjQzEZFEQxGEQhDRYnBUxQsCNDMRkURDEYRDYaATYaAogEMRYnBUxQsCNDigMAsYv/sgWL/rIIi/2yByOyECKyAbOJigMBi/0yAxNBAAyL/XMARQFBAAOL/YmL/jIDE0EADIv+cwBFAUEAA4v+iYv/MgMTQQAMi/9zAEUBQQADi/+JMQAyAxNBAAwxAHMARQFBAAMxAIkyComKBQEigACL/iULIkmLBIsCDIsDjAFBACmL+xaL/UxQSYwAvkSLBCVYi/wSQQAYI4wDi/9BAAeLAIsEJwe7iwOMAYsBjACJiwQlCIwEQv+9igECi/8jUykiTwJUIlNBABiL/1cZIDEAEkEADYv/JFUjDUEABCOL/4kiQv/5igIBIov/VwkIMgcWpIv/TEAAIov/VwIBi/9XAQGoi/+MAUAAEIv/iP+pRwKM/4wAjAFBADqLAUmM/yIjVIz/MgchBQgWi/9MXAmM/4v+Fov/IlMpIk8CVIv/VwkITgJQTFCABJNhfSRMULCL/4wAiYoEASJHCYAARwWL/VcJCDIHFqSL/SRVSSMSQQKsi/1XGSCL/EyL/yMiiP7oQQKaI4wKixBAAA6LEUEACYv9jAKLCkECPIv8FkmMCYv/TFBJjAG9TIwPRCKMDIsMiw8MQQAxiwGLDCW6SYwDJwcTQQAZi/6LA1BJvkQnBlwCJwZcCjIGIQYIFlwSv4sMJQiMDEL/x4v9I1UlC6+LAUm8SEy/i/0pXAJJjP1XAwGL/VcEAYv9VwUBi/1XOSBJTgSMBov9V1kgSU4FjAeL/Vd5IElOBowIiwlPA1BPAlBMUExQTFBMUIAEX6W900xQsIv9gRFbSYwLIQQSQQGLIowNIowOi/1XGSAyCYsGSwJPAoj9rYwAMgmLB0sCTwKI/aCMBDIJiwhOAoj9lYwFiwtBAGmLAIsLgGBwaWVvdXQ6ansibWV0aG9kIjoicGxheV9nYW1lIiwic3Vicm91dGluZToiaXNfZ2FtZV9vdmVyIiwiY29uY2VybiI6Iml0eG4ucGF5O2ZpcnN0X3ByaXplX3NoYXJlIn2I/Q2LDUEAaosEiw2AYXBpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJpc19nYW1lX292ZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7c2Vjb25kX3ByaXplX3NoYXJlIn2I/J6LDkEAaYsFiw6AYHBpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJpc19nYW1lX292ZXIiLCJjb25jZXJuIjoiaXR4bi5wYXk7dGhpcmRfcHJpemVfc2hhcmUifYj8MIv9JwZcEUmM/YwCiwKMAImLC4GAiXoSQQAXiwtJgTwLgWQKTEsBCYwNIowOjAtC/lqLC0mBMguBZApLAYEeC4FkCkmMDU8CSwIJTAmMDowLQv44IowKQv1jigIBi/4Xi/8XCIGQAwuBxBMIiSq+RQGJigEBKIv/UL5FAYmKAQGL/xYnBExQvkUBiYoBASJJi/8WJwRLAVC9RQFEK0xQvkxJTwJEgAIAAEwVIosFiwQMQQA0iwKLBSVYSYwBJwcTiwOMAEEAFIsDVwIAiwFQSRUlChZXBgJMUIwAiwCMA4sFJQiMBUL/xIsDjACJMQAyCRJEJwgjZ4mKAgAyBIEDEkQqvUUBFESL/jgIgfSZAQ9Ei/44ADIJEkSL/jgHMgoSRIv/OAgyDw9Ei/84ADIJEkSL/zgHMgoSRLEyCkcDgFJwaWVvdXQ6ansibWV0aG9kIjoibWludF90cm9waHkiLCJjb25jZXJuIjoiaXR4bi5hc3NldF9jb25maWc7Y3JlYXRlX3Ryb3BoeV9hc3NldCJ9sgWyLLIrsiqyKSKyJCKyI4ANUGllb3V0X1Ryb3BoebImgARUUkZZsiUjsiKBA7IQIrIBs7Q8KoEpuUgWMgNMKVBMUCpMv4kyBCMSRDEAKr5ESVcJIE8CEkQxAEwiW0xLAXAARQFEsTEAgFdwaWVvdXQ6ansibWV0aG9kIjoiY2xhaW1fdHJvcGh5IiwiY29uY2VybiI6Iml0eG4uYXNzZXRfdHJhbnNmZXI7dHJhbnNmZXJfdHJvcGh5X2Fzc2V0In2yBSOyErIUshGBBLIQIrIBs4mKAQAyBCQSRCgxAFC9RQEURCq9RQFEi/84CCEHEkSL/zgAMQASRIv/OAcyChJEMgYhBggWgBIAAAAAAAAAAAAAAAAAAAAAAABMUCgxAFBMv4kyBCMSRCgxAFC9RQFEKDEAUL5EIlMpIk8CVCJTFEQoMQBQvkSBClsURCgxAFC8SDEAIQeAWnBpZW91dDpqeyJtZXRob2QiOiJkZWxfYm94X2dhbWVfcmVnaXN0ZXJfZm9yX3NlbGYiLCJjb25jZXJuIjoidHhuLmFwcF9jO21icl9ib3hfcl9yZWZ1bmQifYj46ImKAQAyBCMSRCiL/1BJvUUBREm+REkiUykiTwJUIlMUREmBClsURIESWzIGDES8SIv/MQAyCYj4xyEHgFpwaWVvdXQ6ansibWV0aG9kIjoiZGVsX2JveF9nYW1lX3JlZ2lzdGVyX2Zvcl9vdGhlciIsImNvbmNlcm4iOiJpdHhuLnBheTttYnJfYm94X2NfcmVmdW5kIn2I+E6JigUAMgSBBBJEKr1FAUQoMQBQvUUBRCgxAFC+RCJTKSJPAlQiUxREi/yBAw9BAOuL/IEQDkEA4yNEi/84CEkhBBJEi/04CCELEkSL/jgIJYv8C0kWSZOBEA5EVwYCgAEKTIj8Ek8CEkSL/zgAMQASRIv9OAAxABJEi/44ADEAEkSL/zgHMgoSRIv9OAcyChJEi/44BzIKEkQpIov7VIv8FkmTgQgORFcHATIHIQUIFk8EFjEAMgNHA08IIlMpI08CVE8IUIABAVApUClQKVApUCcJUE8HUE8GUE8FUE8EUE8DUE8CUExQIicIZURJFicESwFQTwO/KDEAUEm+RCIjVL9PAq8rTwJQSbxISU8CvyIxALsjCCcITGeJIkL/GooCADIEJBJEi/4WJwRLAVBJvUUBREm+RCq9RQFEKDEAUL1FAUSL/zgISSEEEkSL/zgAMQASRIv/OAcyChJEMQBLAiRVi/5PAitLAyKI904UREsCIlMpIk8CVCJTFERLAlcJCDIHFqdESwJXAgFLA1cBAaZESwKBB1lLAyNVJQtLAQ1EK08GUDEATE4CuyMIFkmTgQgORFcHAU8CTFwCSYEHWSUIFkmTgRAORFcGAlwHSYERW08CCBZcEYv+TIj3Wb+JigEAMgQjEkSL/xYnBEsBUEm9RQFEKDEAUL1FAUS+REkiUykiTwJUIlNEMQBMI1WL/08CK08DIoj2oSMSRCgxAFC+RElXCggnBqhEMgaBBAgWXApMXAIoMQBQTL+JigEAIzgQgQYSRDIEJBJEMRYURIv/FicESwFQvUUBRCM4GDIIEkQjOAAxABJEIyLCGicLEkQjScIaSU8CEkQoMQBQvkQkWxYSRCgxAFC+RCRbi/8SRImKAQAiRwqAAEcGgZqZATIMDUEAGLGBBrIQgQWyGScMsh4nDLIfIrIBs0L/3iI4EIEGEkQyBCQSRDEWIxJEi/8WSYwBJwRMUEmMAEm9RQFEKDEAUL1FAUQqvUUBRCI4GDIIEkQiOAAxABJEIknCGicKEkQiI8IaSTYaARJEKDEAUL5EJFsWEkQxAEsBvkQjVYv/TwIrTwMjiPWOIxJEvkxJTgKMBEQoMQBQvkyMAkRJIlMpIk8CVCJTRFcJCDIHFqdEKDEAUL5EJFuL/xJEMgYoMQBQvkSBClsPRLEoMQBQvkSBClsWJwkxAFCB7+iNngKyGIAER8IMI7IaTLIashqBBrIQIrIBs7Q+SVcABCcFEkRJVwYAMQCMB0xXFggVgQgSRIEQWyIhCB1FASEJHkUBHkUBIQgdRQEhCR5FAYACAP+MCYGAgPz///////8BIx5FASEKGiEMGIwQIowNjA+LDYH/AQxBAFyLD0khCB1FASEJHk4CSEmBEpFLARuBG5EhChpMgTuRSpFMHCMeRQGBHxpPAkyQIQoaGUmMDIsQD0EAHIsMIQwYIwgWVwYCiwlMUIwJiw0jCIwNjA9C/6CMD0L/pCKMDosJFYwRJIwNiw2LEQxBACwkixFJTgIPJEsCTwJNiwlMTwJSiw1ZgfBVDkAAD4sOIwiMDosNJAiMDUL/zIsOSRZJk4EIDkRXBwFJjAqLAYsHUExQgATeIkTWTFCwiwRJgQZVTwIMTEmMBowFQQAPiwSLClwGiwdcmUmMBowFiwWMBIsCSSNViw4MTIwDQQAIiwKLClwBjAOLA4wCiwRXOSAyAxJAAAuLBIEDVYsODEEBN4sESVcEAVwFSVdZIFx5SVcDAVwESVc5IFxZiwpcA4sHXDmMBIsEVwMBSYwIKr5EVwgBpUEAySq+RIsIXAgqSwG/VwkgMgMTQQCrKr5ESVcJIEwiW3AATIwLQQCZiwsjEkEAkiq+REkiW0xXCSAyCrGAcHBpZW91dDpqeyJtZXRob2QiOiJwbGF5X2dhbWUiLCJzdWJyb3V0aW5lOiJjbGF3YmFja19pdHhuIiwiY29uY2VybiI6Iml0eG4uYXNzZXRfdHJhbnNmZXI7Y2xhd2JhY2tfdHJvcGh5X2Fzc2V0In2yBSOyErIUshOyEYEEshAisgGzKr5EMQBcCSpMv4sESSRVIwkWSZOBCA5EVwcBXAKLAicGXAInBlwKMgYhBggWXBIoMQBQTL+L/0woK4jzaosATL+JiwRXWSAyAxJAAAuLBIEEVYsODEEAH4sESVcEAVwFSVdZIFx5iwpcBIsHXFmMBosGjARC/riLBFd5IDIDEkAAC4sEgQVViw4MQf/jiwSLClwFiwdceYwGQv/UigIAIjIEIxJEi/4WJwRMUEcCvUUBRL5Ei/8XSUAAaosCSSJTKSJPAlQiUxREJFUjEkEAH4sCVxkgi/5MKyMiiPHdQQAOi/6LAigriPK9iwFMv4mLAklXCQgyBxakTIwAQAAQiwKI8gZJTgKMAkyMAEEAEosAjAIjRIv+iwKI8huLAUy/iSJC/++LAyQSRIsCSSJTKSJPAlQiU0RJVwkIMgcWpESL/kwoK4jyX4sBTL+JigUAMgQkEkSL+xYnBEsBUElOAkm9RQFEi/84ADEAEkSL/zgHMgoSRIv/OAghBA9EvkRJVxkgMQASREmBEVsUREkkVRREK08CUCIxALsiSVSAAQFcAilcAylcBClcBScJXAcyByEFCBZcCUmBEVshBAgWXBEyA1w5MgNcWTIDXHlJi/xBABmLAUkjUykiTwJUIlMUKSJPAlQiUyNMVIwCiwJJjAGMAov9QQAli/6BAw9BACOL/oEQDkEAGyNEi/4WSZOBCA5EVwcBiwFMXAGMAosAiwK/iSJC/+KKAQCAADIEIxJEi/8WSScETFBHAr1FAUS+TElPAkRXGSBJMQASQAAIMQAyCRJBAQ8jRIsDJFVJjAAjEkEA84v/iwQrIyKI8ExEMQCLA4ERW4BMcGllb3V0Omp7Im1ldGhvZCI6ImRlbGV0ZV9nYW1lIiwiY29uY2VybiI6Iml0eG4ucGF5O3ByaXplX3Bvb2xfYWRtaW5fc3Rha2UifYjvhYsCvEgriwFQvEgoiwRQSb5EIklUv4sDI1UlCxZJk4EQDkRXBgKAAQpMiPOCMQAhC08CCIBXcGllb3V0Omp7Im1ldGhvZCI6ImRlbGV0ZV9nYW1lIiwiY29uY2VybiI6Iml0eG4ucGF5O2JveF9zX21icl9yZWZ1bmQrYm94X3BfbWJyX3JlZnVuZCJ9iO72iYsAFESLA4ERWxREQv9iIkL+7ooAAIAAIQ5EMQAyCRJEKr1FAUEAezIKKr5EIltwAEyMAEEAaYsAIxJBAGIqvkQiW7GATnBpZW91dDpqeyJtZXRob2QiOiJ0ZXJtaW5hdGUiLCJjb25jZXJuIjoiaXR4bi5hc3NldF9jb25maWc7YnVybl90cm9waHlfYXNzZXQifbIFsiGBA7IQIrIBsyq8SLExAEmARnBpZW91dDpqeyJtZXRob2QiOiJ0ZXJtaW5hdGUiLCJjb25jZXJuIjoiaXR4bi5wYXk7Y2xvc2VfcmVtYWluZGVyX3RvIn2yBbIJIrIIsgcjshAisgGziQ==", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, "minor": 9, "patch": 0 } }, "events": [ { "name": "game_live", "args": [ { "type": "uint64", "name": "field1" }, { "type": "bool", "name": "field2" }, { "type": "uint64", "name": "field3" } ] }, { "name": "player_score", "args": [ { "type": "uint64", "name": "field1" }, { "type": "address", "name": "field2" }, { "type": "uint8", "name": "field3" } ] }, { "name": "game_over", "args": [ { "type": "uint64", "name": "field1" }, { "type": "uint8", "name": "field2" }, { "type": "uint8", "name": "field3" }, { "type": "uint8", "name": "field4" }, { "type": "address", "name": "field5" }, { "type": "address", "name": "field6" }, { "type": "address", "name": "field7" } ] } ], "templateVariables": { "GEN_UNIX": { "type": "AVMUint64" }, "DELETABLE": { "type": "AVMUint64" } } }