{ "name": "AarnaRegistry", "structs": {}, "methods": [ { "name": "init", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Deploy the contract and set the caller as admin.", "events": [], "recommendations": {} }, { "name": "set_validator", "args": [ { "type": "address", "name": "addr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Admin assigns a validator address for project reviews.", "events": [], "recommendations": {} }, { "name": "transfer_admin", "args": [ { "type": "address", "name": "new_admin" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Admin transfers ownership to a new admin account.", "events": [], "recommendations": {} }, { "name": "ensure_token", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Create the AARNA ASA if it doesn't exist.\nReturns the ASA ID.", "events": [], "recommendations": {} }, { "name": "submit_project", "args": [ { "type": "string", "name": "name" }, { "type": "string", "name": "location" }, { "type": "string", "name": "ecosystem" }, { "type": "string", "name": "cid" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Developer submits a new project for review.\nReturns the project index (0-5).", "events": [], "recommendations": {} }, { "name": "approve_project", "args": [ { "type": "uint64", "name": "project_id" }, { "type": "uint64", "name": "credits" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Validator approves a project and assigns credit amount.", "events": [], "recommendations": {} }, { "name": "reject_project", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Validator rejects a pending project.", "events": [], "recommendations": {} }, { "name": "issue_credits", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Validator issues AARNA tokens to submitter.\nStatus: 2 (verified) \u2192 4 (issued). Prevents double-issuance.", "events": [], "recommendations": {} }, { "name": "list_for_sale", "args": [ { "type": "uint64", "name": "amount", "desc": "number of AARNA tokens to sell" }, { "type": "uint64", "name": "price_per_token", "desc": "price per token in microALGO" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "List AARNA tokens for sale. Uses clawback to escrow tokens\nfrom seller into the contract. Returns the listing index.", "events": [], "recommendations": {} }, { "name": "buy_listing", "args": [ { "type": "uint64", "name": "listing_id" }, { "type": "pay", "name": "payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Buy tokens from a listing. Buyer sends ALGO payment,\ncontract transfers escrowed tokens to buyer and forwards ALGO to seller.", "events": [], "recommendations": {} }, { "name": "cancel_listing", "args": [ { "type": "uint64", "name": "listing_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Seller cancels their listing. Escrowed tokens returned.", "events": [], "recommendations": {} }, { "name": "get_project_count", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_id", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_admin", "args": [], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_validator", "args": [], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_total_credits_issued", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_status", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_cid", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_name", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_location", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_credits", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_submitter", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_project_ecosystem", "args": [ { "type": "uint64", "name": "project_id" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_listing_count", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_listing_seller", "args": [ { "type": "uint64", "name": "listing_id" } ], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_listing_amount", "args": [ { "type": "uint64", "name": "listing_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_listing_price", "args": [ { "type": "uint64", "name": "listing_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_listing_active", "args": [ { "type": "uint64", "name": "listing_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "\n On-chain registry + marketplace for blue carbon credits.\n\n Lifecycle: SUBMIT \u2192 REVIEW \u2192 VERIFY / REJECT \u2192 ISSUE \u2192 TRADE\n\n Roles:\n - admin: deploys, creates AARNA ASA, assigns validator\n - validator: approves/rejects, issues credits\n - developer: submits projects\n - any holder: lists/buys credits on marketplace\n ", "networks": {}, "state": { "schema": { "global": { "ints": 28, "bytes": 36 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "address", "key": "YWRtaW4=" }, "validator": { "keyType": "AVMString", "valueType": "address", "key": "dmFsaWRhdG9y" }, "aarna_asset": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YWFybmFfYXNzZXQ=" }, "project_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cHJvamVjdF9jb3VudA==" }, "total_credits_issued": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfY3JlZGl0c19pc3N1ZWQ=" }, "p0_submitter": { "keyType": "AVMString", "valueType": "address", "key": "cDBfc3VibWl0dGVy" }, "p0_cid": { "keyType": "AVMString", "valueType": "string", "key": "cDBfY2lk" }, "p0_name": { "keyType": "AVMString", "valueType": "string", "key": "cDBfbmFtZQ==" }, "p0_location": { "keyType": "AVMString", "valueType": "string", "key": "cDBfbG9jYXRpb24=" }, "p0_ecosystem": { "keyType": "AVMString", "valueType": "string", "key": "cDBfZWNvc3lzdGVt" }, "p0_status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDBfc3RhdHVz" }, "p0_credits": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDBfY3JlZGl0cw==" }, "p1_submitter": { "keyType": "AVMString", "valueType": "address", "key": "cDFfc3VibWl0dGVy" }, "p1_cid": { "keyType": "AVMString", "valueType": "string", "key": "cDFfY2lk" }, "p1_name": { "keyType": "AVMString", "valueType": "string", "key": "cDFfbmFtZQ==" }, "p1_location": { "keyType": "AVMString", "valueType": "string", "key": "cDFfbG9jYXRpb24=" }, "p1_ecosystem": { "keyType": "AVMString", "valueType": "string", "key": "cDFfZWNvc3lzdGVt" }, "p1_status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDFfc3RhdHVz" }, "p1_credits": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDFfY3JlZGl0cw==" }, "p2_submitter": { "keyType": "AVMString", "valueType": "address", "key": "cDJfc3VibWl0dGVy" }, "p2_cid": { "keyType": "AVMString", "valueType": "string", "key": "cDJfY2lk" }, "p2_name": { "keyType": "AVMString", "valueType": "string", "key": "cDJfbmFtZQ==" }, "p2_location": { "keyType": "AVMString", "valueType": "string", "key": "cDJfbG9jYXRpb24=" }, "p2_ecosystem": { "keyType": "AVMString", "valueType": "string", "key": "cDJfZWNvc3lzdGVt" }, "p2_status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDJfc3RhdHVz" }, "p2_credits": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDJfY3JlZGl0cw==" }, "p3_submitter": { "keyType": "AVMString", "valueType": "address", "key": "cDNfc3VibWl0dGVy" }, "p3_cid": { "keyType": "AVMString", "valueType": "string", "key": "cDNfY2lk" }, "p3_name": { "keyType": "AVMString", "valueType": "string", "key": "cDNfbmFtZQ==" }, "p3_location": { "keyType": "AVMString", "valueType": "string", "key": "cDNfbG9jYXRpb24=" }, "p3_ecosystem": { "keyType": "AVMString", "valueType": "string", "key": "cDNfZWNvc3lzdGVt" }, "p3_status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDNfc3RhdHVz" }, "p3_credits": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDNfY3JlZGl0cw==" }, "p4_submitter": { "keyType": "AVMString", "valueType": "address", "key": "cDRfc3VibWl0dGVy" }, "p4_cid": { "keyType": "AVMString", "valueType": "string", "key": "cDRfY2lk" }, "p4_name": { "keyType": "AVMString", "valueType": "string", "key": "cDRfbmFtZQ==" }, "p4_location": { "keyType": "AVMString", "valueType": "string", "key": "cDRfbG9jYXRpb24=" }, "p4_ecosystem": { "keyType": "AVMString", "valueType": "string", "key": "cDRfZWNvc3lzdGVt" }, "p4_status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDRfc3RhdHVz" }, "p4_credits": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDRfY3JlZGl0cw==" }, "p5_submitter": { "keyType": "AVMString", "valueType": "address", "key": "cDVfc3VibWl0dGVy" }, "p5_cid": { "keyType": "AVMString", "valueType": "string", "key": "cDVfY2lk" }, "p5_name": { "keyType": "AVMString", "valueType": "string", "key": "cDVfbmFtZQ==" }, "p5_location": { "keyType": "AVMString", "valueType": "string", "key": "cDVfbG9jYXRpb24=" }, "p5_ecosystem": { "keyType": "AVMString", "valueType": "string", "key": "cDVfZWNvc3lzdGVt" }, "p5_status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDVfc3RhdHVz" }, "p5_credits": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cDVfY3JlZGl0cw==" }, "listing_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bGlzdGluZ19jb3VudA==" }, "l0_seller": { "keyType": "AVMString", "valueType": "address", "key": "bDBfc2VsbGVy" }, "l0_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDBfYW1vdW50" }, "l0_price": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDBfcHJpY2U=" }, "l0_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDBfYWN0aXZl" }, "l1_seller": { "keyType": "AVMString", "valueType": "address", "key": "bDFfc2VsbGVy" }, "l1_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDFfYW1vdW50" }, "l1_price": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDFfcHJpY2U=" }, "l1_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDFfYWN0aXZl" }, "l2_seller": { "keyType": "AVMString", "valueType": "address", "key": "bDJfc2VsbGVy" }, "l2_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDJfYW1vdW50" }, "l2_price": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDJfcHJpY2U=" }, "l2_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDJfYWN0aXZl" }, "l3_seller": { "keyType": "AVMString", "valueType": "address", "key": "bDNfc2VsbGVy" }, "l3_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDNfYW1vdW50" }, "l3_price": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDNfcHJpY2U=" }, "l3_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDNfYWN0aXZl" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 2472 ], "errorMessage": "amount must be > 0" }, { "pc": [ 1239, 1337, 2026, 2052, 2123, 2191, 2260, 2328, 2390, 2467, 2660, 2717, 2808, 2900, 2985, 3074, 3129, 3185, 3235, 3276 ], "errorMessage": "check self.aarna_asset exists" }, { "pc": [ 3288, 4233 ], "errorMessage": "check self.admin exists" }, { "pc": [ 2678, 3054, 4180 ], "errorMessage": "check self.l0_active exists" }, { "pc": [ 2686, 3079, 4050 ], "errorMessage": "check self.l0_amount exists" }, { "pc": [ 2691, 4115 ], "errorMessage": "check self.l0_price exists" }, { "pc": [ 2740, 3064, 3989 ], "errorMessage": "check self.l0_seller exists" }, { "pc": [ 2769, 3109, 4198 ], "errorMessage": "check self.l1_active exists" }, { "pc": [ 2777, 3134, 4068 ], "errorMessage": "check self.l1_amount exists" }, { "pc": [ 2782, 4133 ], "errorMessage": "check self.l1_price exists" }, { "pc": [ 2831, 3119, 4006 ], "errorMessage": "check self.l1_seller exists" }, { "pc": [ 2861, 3165, 4213 ], "errorMessage": "check self.l2_active exists" }, { "pc": [ 2869, 3190, 4083 ], "errorMessage": "check self.l2_amount exists" }, { "pc": [ 2874, 4148 ], "errorMessage": "check self.l2_price exists" }, { "pc": [ 2923, 3175, 4020 ], "errorMessage": "check self.l2_seller exists" }, { "pc": [ 2946, 3215, 4222 ], "errorMessage": "check self.l3_active exists" }, { "pc": [ 2954, 3240, 4092 ], "errorMessage": "check self.l3_amount exists" }, { "pc": [ 2959, 4157 ], "errorMessage": "check self.l3_price exists" }, { "pc": [ 3008, 3225, 4028 ], "errorMessage": "check self.l3_seller exists" }, { "pc": [ 2485, 2666, 3042, 3963 ], "errorMessage": "check self.listing_count exists" }, { "pc": [ 3431 ], "errorMessage": "check self.p0_cid exists" }, { "pc": [ 2062, 2088, 2097, 3701 ], "errorMessage": "check self.p0_credits exists" }, { "pc": [ 3887 ], "errorMessage": "check self.p0_ecosystem exists" }, { "pc": [ 3611 ], "errorMessage": "check self.p0_location exists" }, { "pc": [ 3521 ], "errorMessage": "check self.p0_name exists" }, { "pc": [ 1719, 1893, 2044, 3335 ], "errorMessage": "check self.p0_status exists" }, { "pc": [ 2057, 3797 ], "errorMessage": "check self.p0_submitter exists" }, { "pc": [ 3448 ], "errorMessage": "check self.p1_cid exists" }, { "pc": [ 2133, 2159, 2168, 3719 ], "errorMessage": "check self.p1_credits exists" }, { "pc": [ 3904 ], "errorMessage": "check self.p1_ecosystem exists" }, { "pc": [ 3628 ], "errorMessage": "check self.p1_location exists" }, { "pc": [ 3538 ], "errorMessage": "check self.p1_name exists" }, { "pc": [ 1745, 1914, 2115, 3353 ], "errorMessage": "check self.p1_status exists" }, { "pc": [ 2128, 3814 ], "errorMessage": "check self.p1_submitter exists" }, { "pc": [ 3462 ], "errorMessage": "check self.p2_cid exists" }, { "pc": [ 2201, 2227, 2236, 3734 ], "errorMessage": "check self.p2_credits exists" }, { "pc": [ 3918 ], "errorMessage": "check self.p2_ecosystem exists" }, { "pc": [ 3642 ], "errorMessage": "check self.p2_location exists" }, { "pc": [ 3552 ], "errorMessage": "check self.p2_name exists" }, { "pc": [ 1772, 1936, 2183, 3368 ], "errorMessage": "check self.p2_status exists" }, { "pc": [ 2196, 3828 ], "errorMessage": "check self.p2_submitter exists" }, { "pc": [ 3477 ], "errorMessage": "check self.p3_cid exists" }, { "pc": [ 2270, 2296, 2305, 3750 ], "errorMessage": "check self.p3_credits exists" }, { "pc": [ 3933 ], "errorMessage": "check self.p3_ecosystem exists" }, { "pc": [ 3657 ], "errorMessage": "check self.p3_location exists" }, { "pc": [ 3567 ], "errorMessage": "check self.p3_name exists" }, { "pc": [ 1800, 1959, 2252, 3384 ], "errorMessage": "check self.p3_status exists" }, { "pc": [ 2265, 3843 ], "errorMessage": "check self.p3_submitter exists" }, { "pc": [ 3491 ], "errorMessage": "check self.p4_cid exists" }, { "pc": [ 2338, 2364, 2373, 3765 ], "errorMessage": "check self.p4_credits exists" }, { "pc": [ 3947 ], "errorMessage": "check self.p4_ecosystem exists" }, { "pc": [ 3671 ], "errorMessage": "check self.p4_location exists" }, { "pc": [ 3581 ], "errorMessage": "check self.p4_name exists" }, { "pc": [ 1827, 1981, 2320, 3399 ], "errorMessage": "check self.p4_status exists" }, { "pc": [ 2333, 3857 ], "errorMessage": "check self.p4_submitter exists" }, { "pc": [ 3499 ], "errorMessage": "check self.p5_cid exists" }, { "pc": [ 2400, 2426, 2435, 3774 ], "errorMessage": "check self.p5_credits exists" }, { "pc": [ 3955 ], "errorMessage": "check self.p5_ecosystem exists" }, { "pc": [ 3679 ], "errorMessage": "check self.p5_location exists" }, { "pc": [ 3589 ], "errorMessage": "check self.p5_name exists" }, { "pc": [ 1847, 1997, 2382, 3408 ], "errorMessage": "check self.p5_status exists" }, { "pc": [ 2395, 3865 ], "errorMessage": "check self.p5_submitter exists" }, { "pc": [ 1405, 1706, 1881, 2032, 3265 ], "errorMessage": "check self.project_count exists" }, { "pc": [ 2083, 2154, 2222, 2291, 2359, 2421, 3309 ], "errorMessage": "check self.total_credits_issued exists" }, { "pc": [ 3299, 4243 ], "errorMessage": "check self.validator exists" }, { "pc": [ 1711 ], "errorMessage": "credits must be > 0" }, { "pc": [ 2705, 2796, 2888, 2973 ], "errorMessage": "insufficient payment" }, { "pc": [ 1351, 1364, 1377, 1390 ], "errorMessage": "invalid array length header" }, { "pc": [ 2670, 3046 ], "errorMessage": "invalid listing id" }, { "pc": [ 1357, 1370, 1383, 1396 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 1200, 1218 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 1683, 1694, 1871, 2017, 2448, 2459, 2642, 3035, 3325, 3421, 3511, 3601, 3691, 3787, 3877, 3979, 4040, 4105, 4170 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 1710, 1885, 2036 ], "errorMessage": "invalid project id" }, { "pc": [ 1226 ], "errorMessage": "invalid: zero address" }, { "pc": [ 2681, 2772, 2864, 2949, 3057, 3112, 3168, 3218 ], "errorMessage": "listing not active" }, { "pc": [ 2489 ], "errorMessage": "max listings reached (4)" }, { "pc": [ 1410 ], "errorMessage": "max projects reached (6)" }, { "pc": [ 2469, 2661 ], "errorMessage": "no AARNA token" }, { "pc": [ 2027 ], "errorMessage": "no AARNA token created" }, { "pc": [ 3069, 3124, 3180, 3230 ], "errorMessage": "only seller can cancel" }, { "pc": [ 2712, 2803, 2895, 2980 ], "errorMessage": "pay the contract" }, { "pc": [ 2474 ], "errorMessage": "price must be > 0" }, { "pc": [ 1722, 1748, 1775, 1803, 1830, 1850, 1896, 1917, 1939, 1962, 1984, 2000 ], "errorMessage": "project not pending" }, { "pc": [ 2047, 2118, 2186, 2255, 2323, 2385 ], "errorMessage": "project not verified" }, { "pc": [ 2656 ], "errorMessage": "transaction type is pay" }, { "pc": [ 4235 ], "errorMessage": "unauthorized: admin only" }, { "pc": [ 4245 ], "errorMessage": "unauthorized: validator only" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA0CiAgICBieXRlY2Jsb2NrIDB4MDAwMCAiYWFybmFfYXNzZXQiIDB4MTUxZjdjNzUgInRvdGFsX2NyZWRpdHNfaXNzdWVkIiAicDBfc3RhdHVzIiAicDFfc3RhdHVzIiAicDJfc3RhdHVzIiAicDNfc3RhdHVzIiAicDRfc3RhdHVzIiAicDVfc3RhdHVzIiAicHJvamVjdF9jb3VudCIgInAwX2NyZWRpdHMiICJwMV9jcmVkaXRzIiAicDJfY3JlZGl0cyIgInAzX2NyZWRpdHMiICJwNF9jcmVkaXRzIiAicDVfY3JlZGl0cyIgImwwX2FjdGl2ZSIgImwxX2FjdGl2ZSIgImwyX2FjdGl2ZSIgImwzX2FjdGl2ZSIgImxpc3RpbmdfY291bnQiICJhZG1pbiIgImwwX3NlbGxlciIgImwwX2Ftb3VudCIgImwxX3NlbGxlciIgImwxX2Ftb3VudCIgImwyX3NlbGxlciIgImwyX2Ftb3VudCIgImwzX3NlbGxlciIgImwzX2Ftb3VudCIgInZhbGlkYXRvciIgInAwX3N1Ym1pdHRlciIgInAxX3N1Ym1pdHRlciIgInAyX3N1Ym1pdHRlciIgInAzX3N1Ym1pdHRlciIgInA0X3N1Ym1pdHRlciIgInA1X3N1Ym1pdHRlciIgImwwX3ByaWNlIiAibDFfcHJpY2UiICJsMl9wcmljZSIgImwzX3ByaWNlIiAicDBfY2lkIiAicDBfbmFtZSIgInAwX2xvY2F0aW9uIiAicDBfZWNvc3lzdGVtIiAicDFfY2lkIiAicDFfbmFtZSIgInAxX2xvY2F0aW9uIiAicDFfZWNvc3lzdGVtIiAicDJfY2lkIiAicDJfbmFtZSIgInAyX2xvY2F0aW9uIiAicDJfZWNvc3lzdGVtIiAicDNfY2lkIiAicDNfbmFtZSIgInAzX2xvY2F0aW9uIiAicDNfZWNvc3lzdGVtIiAicDRfY2lkIiAicDRfbmFtZSIgInA0X2xvY2F0aW9uIiAicDRfZWNvc3lzdGVtIiAicDVfY2lkIiAicDVfbmFtZSIgInA1X2xvY2F0aW9uIiAicDVfZWNvc3lzdGVtIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5LTUwCiAgICAvLyAjIOKUgOKUgCBSb2xlLWJhc2VkIGFjY2VzcyBjb250cm9sIOKUgOKUgAogICAgLy8gc2VsZi5hZG1pbjogQWNjb3VudCA9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGJ5dGVjIDIyIC8vICJhZG1pbiIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi52YWxpZGF0b3I6IEFjY291bnQgPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBieXRlYyAzMSAvLyAidmFsaWRhdG9yIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUzLTU0CiAgICAvLyAjIOKUgOKUgCBBQVJOQSB0b2tlbiAoQVNBKSDilIDilIAKICAgIC8vIHNlbGYuYWFybmFfYXNzZXQ6IEFzc2V0ID0gQXNzZXQoMCkKICAgIGJ5dGVjXzEgLy8gImFhcm5hX2Fzc2V0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTYtNTcKICAgIC8vICMg4pSA4pSAIFByb2plY3QgYm9va2tlZXBpbmcg4pSA4pSACiAgICAvLyBzZWxmLnByb2plY3RfY291bnQ6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTAgLy8gInByb2plY3RfY291bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1OAogICAgLy8gc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZDogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYwLTYxCiAgICAvLyAjIOKUgOKUgCBGbGF0IHByb2plY3Qgc3RvcmFnZSAoNiBzbG90cykg4pSA4pSACiAgICAvLyBzZWxmLnAwX3N1Ym1pdHRlcjogQWNjb3VudCA9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGJ5dGVjIDMyIC8vICJwMF9zdWJtaXR0ZXIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNDIgLy8gInAwX2NpZCIKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBzZWxmLnAwX25hbWU6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA0MyAvLyAicDBfbmFtZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBzZWxmLnAwX25hbWU6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY0CiAgICAvLyBzZWxmLnAwX2xvY2F0aW9uOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNDQgLy8gInAwX2xvY2F0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQKICAgIC8vIHNlbGYucDBfbG9jYXRpb246IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1CiAgICAvLyBzZWxmLnAwX2Vjb3N5c3RlbTogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjIDQ1IC8vICJwMF9lY29zeXN0ZW0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NQogICAgLy8gc2VsZi5wMF9lY29zeXN0ZW06IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2CiAgICAvLyBzZWxmLnAwX3N0YXR1czogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyA0IC8vICJwMF9zdGF0dXMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NwogICAgLy8gc2VsZi5wMF9jcmVkaXRzOiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDExIC8vICJwMF9jcmVkaXRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjkKICAgIC8vIHNlbGYucDFfc3VibWl0dGVyOiBBY2NvdW50ID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgYnl0ZWMgMzMgLy8gInAxX3N1Ym1pdHRlciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MAogICAgLy8gc2VsZi5wMV9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA0NiAvLyAicDFfY2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzAKICAgIC8vIHNlbGYucDFfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MQogICAgLy8gc2VsZi5wMV9uYW1lOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNDcgLy8gInAxX25hbWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MQogICAgLy8gc2VsZi5wMV9uYW1lOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MgogICAgLy8gc2VsZi5wMV9sb2NhdGlvbjogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjIDQ4IC8vICJwMV9sb2NhdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLnAxX2xvY2F0aW9uOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5wMV9lY29zeXN0ZW06IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA0OSAvLyAicDFfZWNvc3lzdGVtIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYucDFfZWNvc3lzdGVtOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3NAogICAgLy8gc2VsZi5wMV9zdGF0dXM6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgNSAvLyAicDFfc3RhdHVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzUKICAgIC8vIHNlbGYucDFfY3JlZGl0czogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyAxMiAvLyAicDFfY3JlZGl0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBzZWxmLnAyX3N1Ym1pdHRlcjogQWNjb3VudCA9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGJ5dGVjIDM0IC8vICJwMl9zdWJtaXR0ZXIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzgKICAgIC8vIHNlbGYucDJfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNTAgLy8gInAyX2NpZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLnAyX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzkKICAgIC8vIHNlbGYucDJfbmFtZTogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjIDUxIC8vICJwMl9uYW1lIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzkKICAgIC8vIHNlbGYucDJfbmFtZTogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6ODAKICAgIC8vIHNlbGYucDJfbG9jYXRpb246IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA1MiAvLyAicDJfbG9jYXRpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo4MAogICAgLy8gc2VsZi5wMl9sb2NhdGlvbjogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6ODEKICAgIC8vIHNlbGYucDJfZWNvc3lzdGVtOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNTMgLy8gInAyX2Vjb3N5c3RlbSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjgxCiAgICAvLyBzZWxmLnAyX2Vjb3N5c3RlbTogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6ODIKICAgIC8vIHNlbGYucDJfc3RhdHVzOiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDYgLy8gInAyX3N0YXR1cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBzZWxmLnAyX2NyZWRpdHM6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTMgLy8gInAyX2NyZWRpdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo4NQogICAgLy8gc2VsZi5wM19zdWJtaXR0ZXI6IEFjY291bnQgPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBieXRlYyAzNSAvLyAicDNfc3VibWl0dGVyIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBzZWxmLnAzX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjIDU0IC8vICJwM19jaWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo4NgogICAgLy8gc2VsZi5wM19jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBzZWxmLnAzX25hbWU6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA1NSAvLyAicDNfbmFtZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBzZWxmLnAzX25hbWU6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBzZWxmLnAzX2xvY2F0aW9uOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNTYgLy8gInAzX2xvY2F0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6ODgKICAgIC8vIHNlbGYucDNfbG9jYXRpb246IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBzZWxmLnAzX2Vjb3N5c3RlbTogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjIDU3IC8vICJwM19lY29zeXN0ZW0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo4OQogICAgLy8gc2VsZi5wM19lY29zeXN0ZW06IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBzZWxmLnAzX3N0YXR1czogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyA3IC8vICJwM19zdGF0dXMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5MQogICAgLy8gc2VsZi5wM19jcmVkaXRzOiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDE0IC8vICJwM19jcmVkaXRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6OTMKICAgIC8vIHNlbGYucDRfc3VibWl0dGVyOiBBY2NvdW50ID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgYnl0ZWMgMzYgLy8gInA0X3N1Ym1pdHRlciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5NAogICAgLy8gc2VsZi5wNF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA1OCAvLyAicDRfY2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYucDRfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5wNF9uYW1lOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWMgNTkgLy8gInA0X25hbWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5wNF9uYW1lOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5NgogICAgLy8gc2VsZi5wNF9sb2NhdGlvbjogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjIDYwIC8vICJwNF9sb2NhdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBzZWxmLnA0X2xvY2F0aW9uOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5NwogICAgLy8gc2VsZi5wNF9lY29zeXN0ZW06IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA2MSAvLyAicDRfZWNvc3lzdGVtIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6OTcKICAgIC8vIHNlbGYucDRfZWNvc3lzdGVtOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo5OAogICAgLy8gc2VsZi5wNF9zdGF0dXM6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgOCAvLyAicDRfc3RhdHVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6OTkKICAgIC8vIHNlbGYucDRfY3JlZGl0czogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyAxNSAvLyAicDRfY3JlZGl0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwMQogICAgLy8gc2VsZi5wNV9zdWJtaXR0ZXI6IEFjY291bnQgPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBieXRlYyAzNyAvLyAicDVfc3VibWl0dGVyIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwMgogICAgLy8gc2VsZi5wNV9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA2MiAvLyAicDVfY2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTAyCiAgICAvLyBzZWxmLnA1X2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTAzCiAgICAvLyBzZWxmLnA1X25hbWU6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA2MyAvLyAicDVfbmFtZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MgogICAgLy8gc2VsZi5wMF9jaWQ6IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlY18wIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwMwogICAgLy8gc2VsZi5wNV9uYW1lOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMDQKICAgIC8vIHNlbGYucDVfbG9jYXRpb246IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA2NCAvLyAicDVfbG9jYXRpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYucDBfY2lkOiBhcmM0LlN0cmluZyA9IGFyYzQuU3RyaW5nKCIiKQogICAgYnl0ZWNfMCAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMDQKICAgIC8vIHNlbGYucDVfbG9jYXRpb246IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNQogICAgLy8gc2VsZi5wNV9lY29zeXN0ZW06IGFyYzQuU3RyaW5nID0gYXJjNC5TdHJpbmcoIiIpCiAgICBieXRlYyA2NSAvLyAicDVfZWNvc3lzdGVtIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBzZWxmLnAwX2NpZDogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGJ5dGVjXzAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTA1CiAgICAvLyBzZWxmLnA1X2Vjb3N5c3RlbTogYXJjNC5TdHJpbmcgPSBhcmM0LlN0cmluZygiIikKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTA2CiAgICAvLyBzZWxmLnA1X3N0YXR1czogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyA5IC8vICJwNV9zdGF0dXMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMDcKICAgIC8vIHNlbGYucDVfY3JlZGl0czogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyAxNiAvLyAicDVfY3JlZGl0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwOS0xMTAKICAgIC8vICMg4pSA4pSAIE1hcmtldHBsYWNlIGxpc3Rpbmcgc3RvcmFnZSAoNCBzbG90cykg4pSA4pSACiAgICAvLyBzZWxmLmxpc3RpbmdfY291bnQ6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMjEgLy8gImxpc3RpbmdfY291bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMTIKICAgIC8vIHNlbGYubDBfc2VsbGVyOiBBY2NvdW50ID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgYnl0ZWMgMjMgLy8gImwwX3NlbGxlciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMTMKICAgIC8vIHNlbGYubDBfYW1vdW50OiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDI0IC8vICJsMF9hbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMTQKICAgIC8vIHNlbGYubDBfcHJpY2U6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMzggLy8gImwwX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTE1CiAgICAvLyBzZWxmLmwwX2FjdGl2ZTogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyAxNyAvLyAibDBfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTE3CiAgICAvLyBzZWxmLmwxX3NlbGxlcjogQWNjb3VudCA9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGJ5dGVjIDI1IC8vICJsMV9zZWxsZXIiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTE4CiAgICAvLyBzZWxmLmwxX2Ftb3VudDogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyAyNiAvLyAibDFfYW1vdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTE5CiAgICAvLyBzZWxmLmwxX3ByaWNlOiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDM5IC8vICJsMV9wcmljZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMAogICAgLy8gc2VsZi5sMV9hY3RpdmU6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTggLy8gImwxX2FjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMgogICAgLy8gc2VsZi5sMl9zZWxsZXI6IEFjY291bnQgPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBieXRlYyAyNyAvLyAibDJfc2VsbGVyIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMwogICAgLy8gc2VsZi5sMl9hbW91bnQ6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMjggLy8gImwyX2Ftb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNAogICAgLy8gc2VsZi5sMl9wcmljZTogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyA0MCAvLyAibDJfcHJpY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMjUKICAgIC8vIHNlbGYubDJfYWN0aXZlOiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDE5IC8vICJsMl9hY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMjcKICAgIC8vIHNlbGYubDNfc2VsbGVyOiBBY2NvdW50ID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgYnl0ZWMgMjkgLy8gImwzX3NlbGxlciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMjgKICAgIC8vIHNlbGYubDNfYW1vdW50OiBVSW50NjQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDMwIC8vICJsM19hbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMjkKICAgIC8vIHNlbGYubDNfcHJpY2U6IFVJbnQ2NCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgNDEgLy8gImwzX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTMwCiAgICAvLyBzZWxmLmwzX2FjdGl2ZTogVUludDY0ID0gVUludDY0KDApCiAgICBieXRlYyAyMCAvLyAibDNfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNQogICAgLy8gY2xhc3MgQWFybmFSZWdpc3RyeShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweGYxMjZkMDRiIDB4ZDM0OGZiYjMgMHgwOGZiN2I3YyAweGEyMWE4MDc3IDB4NjY0NWYyZjkgMHgyMTk3OTk0MyAweDYyNjI5MDY1IDB4MjI2ZmEyMzcgMHgwNTAwZmNhOSAweDYzZDU1YjZjIDB4MzA1ZTc1YmQgMHg1YmEyMmE4NCAweDM0NmIzZGJjIDB4ZjM4ZTY5NDEgMHg1ZjFjZDJkYyAweDhiYTM5MjU5IDB4MjJmOThhYjYgMHgyMzUyMzExNyAweDQ4YzliNzViIDB4N2I2MTNlMmEgMHhmYmQ3MDllNyAweDRhMjEyN2I2IDB4MWRlYmE0ZTkgMHhhYzc3ZGM2NCAweDUwOGQ3NmQ5IDB4NTc3ZTE0OWEgMHg2NTJiNTFkNCAvLyBtZXRob2QgInNldF92YWxpZGF0b3IoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJ0cmFuc2Zlcl9hZG1pbihhZGRyZXNzKXZvaWQiLCBtZXRob2QgImVuc3VyZV90b2tlbigpdWludDY0IiwgbWV0aG9kICJzdWJtaXRfcHJvamVjdChzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJhcHByb3ZlX3Byb2plY3QodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWplY3RfcHJvamVjdCh1aW50NjQpdm9pZCIsIG1ldGhvZCAiaXNzdWVfY3JlZGl0cyh1aW50NjQpdWludDY0IiwgbWV0aG9kICJsaXN0X2Zvcl9zYWxlKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJidXlfbGlzdGluZyh1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImNhbmNlbF9saXN0aW5nKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfcHJvamVjdF9jb3VudCgpdWludDY0IiwgbWV0aG9kICJnZXRfYXNzZXRfaWQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2FkbWluKClhZGRyZXNzIiwgbWV0aG9kICJnZXRfdmFsaWRhdG9yKClhZGRyZXNzIiwgbWV0aG9kICJnZXRfdG90YWxfY3JlZGl0c19pc3N1ZWQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X3Byb2plY3Rfc3RhdHVzKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImdldF9wcm9qZWN0X2NpZCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJnZXRfcHJvamVjdF9uYW1lKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImdldF9wcm9qZWN0X2xvY2F0aW9uKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImdldF9wcm9qZWN0X2NyZWRpdHModWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X3Byb2plY3Rfc3VibWl0dGVyKHVpbnQ2NClhZGRyZXNzIiwgbWV0aG9kICJnZXRfcHJvamVjdF9lY29zeXN0ZW0odWludDY0KXN0cmluZyIsIG1ldGhvZCAiZ2V0X2xpc3RpbmdfY291bnQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2xpc3Rpbmdfc2VsbGVyKHVpbnQ2NClhZGRyZXNzIiwgbWV0aG9kICJnZXRfbGlzdGluZ19hbW91bnQodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2xpc3RpbmdfcHJpY2UodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2xpc3RpbmdfYWN0aXZlKHVpbnQ2NCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBzZXRfdmFsaWRhdG9yIHRyYW5zZmVyX2FkbWluIGVuc3VyZV90b2tlbiBzdWJtaXRfcHJvamVjdCBhcHByb3ZlX3Byb2plY3QgcmVqZWN0X3Byb2plY3QgaXNzdWVfY3JlZGl0cyBsaXN0X2Zvcl9zYWxlIGJ1eV9saXN0aW5nIGNhbmNlbF9saXN0aW5nIGdldF9wcm9qZWN0X2NvdW50IGdldF9hc3NldF9pZCBnZXRfYWRtaW4gZ2V0X3ZhbGlkYXRvciBnZXRfdG90YWxfY3JlZGl0c19pc3N1ZWQgZ2V0X3Byb2plY3Rfc3RhdHVzIGdldF9wcm9qZWN0X2NpZCBnZXRfcHJvamVjdF9uYW1lIGdldF9wcm9qZWN0X2xvY2F0aW9uIGdldF9wcm9qZWN0X2NyZWRpdHMgZ2V0X3Byb2plY3Rfc3VibWl0dGVyIGdldF9wcm9qZWN0X2Vjb3N5c3RlbSBnZXRfbGlzdGluZ19jb3VudCBnZXRfbGlzdGluZ19zZWxsZXIgZ2V0X2xpc3RpbmdfYW1vdW50IGdldF9saXN0aW5nX3ByaWNlIGdldF9saXN0aW5nX2FjdGl2ZQogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBjbGFzcyBBYXJuYVJlZ2lzdHJ5KEFSQzRDb250cmFjdCk6CiAgICBwdXNoYnl0ZXMgMHg4M2YxNDc0OCAvLyBtZXRob2QgImluaXQoKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBpbml0CiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5pbml0W3JvdXRpbmddKCkgLT4gdm9pZDoKaW5pdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxMzkKICAgIC8vIHNlbGYuYWRtaW4gPSBUeG4uc2VuZGVyCiAgICBieXRlYyAyMiAvLyAiYWRtaW4iCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuc2V0X3ZhbGlkYXRvcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF92YWxpZGF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxNjAKICAgIC8vIHNlbGYuX29ubHlfYWRtaW4oKQogICAgY2FsbHN1YiBfb25seV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MQogICAgLy8gc2VsZi52YWxpZGF0b3IgPSBhZGRyCiAgICBieXRlYyAzMSAvLyAidmFsaWRhdG9yIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxNTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LnRyYW5zZmVyX2FkbWluW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxNjYKICAgIC8vIHNlbGYuX29ubHlfYWRtaW4oKQogICAgY2FsbHN1YiBfb25seV9hZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2NwogICAgLy8gYXNzZXJ0IG5ld19hZG1pbiAhPSBHbG9iYWwuemVyb19hZGRyZXNzLCAiaW52YWxpZDogemVybyBhZGRyZXNzIgogICAgZHVwCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gaW52YWxpZDogemVybyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTY4CiAgICAvLyBzZWxmLmFkbWluID0gbmV3X2FkbWluCiAgICBieXRlYyAyMiAvLyAiYWRtaW4iCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZW5zdXJlX3Rva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKZW5zdXJlX3Rva2VuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gc2VsZi5fb25seV9hZG1pbigpCiAgICBjYWxsc3ViIF9vbmx5X2FkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTc3CiAgICAvLyBpZiBub3Qgc2VsZi5hYXJuYV9hc3NldDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIGJueiBlbnN1cmVfdG9rZW5fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTc4LTE4OQogICAgLy8gcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJBQVJOQSIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iQWFybmEgQ2FyYm9uIENyZWRpdCIsCiAgICAvLyAgICAgdXJsPSJodHRwczovL2Fhcm5hLmVjbyIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE4NQogICAgLy8gbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxODYtMTg4CiAgICAvLyByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTg0CiAgICAvLyB1cmw9Imh0dHBzOi8vYWFybmEuZWNvIiwKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9hYXJuYS5lY28iCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTgzCiAgICAvLyBhc3NldF9uYW1lPSJBYXJuYSBDYXJib24gQ3JlZGl0IiwKICAgIHB1c2hieXRlcyAiQWFybmEgQ2FyYm9uIENyZWRpdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTgyCiAgICAvLyB1bml0X25hbWU9IkFBUk5BIiwKICAgIHB1c2hieXRlcyAiQUFSTkEiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxODEKICAgIC8vIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTgwCiAgICAvLyBkZWNpbWFscz0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE3OQogICAgLy8gdG90YWw9MTBfMDAwXzAwMCwKICAgIHB1c2hpbnQgMTAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE3OAogICAgLy8gcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToxNzgtMTg5CiAgICAvLyByZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEwXzAwMF8wMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICB1bml0X25hbWU9IkFBUk5BIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJBYXJuYSBDYXJib24gQ3JlZGl0IiwKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vYWFybmEuZWNvIiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gc2VsZi5hYXJuYV9hc3NldCA9IHJlc3VsdC5jcmVhdGVkX2Fzc2V0CiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGFwcF9nbG9iYWxfcHV0CgplbnN1cmVfdG9rZW5fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE5MQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYuYWFybmFfYXNzZXQuaWQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5zdWJtaXRfcHJvamVjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1Ym1pdF9wcm9qZWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMDkKICAgIC8vIGlkeCA9IHNlbGYucHJvamVjdF9jb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJwcm9qZWN0X2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm9qZWN0X2NvdW50IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIxMAogICAgLy8gYXNzZXJ0IGlkeCA8IFVJbnQ2NCg2KSwgIm1heCBwcm9qZWN0cyByZWFjaGVkICg2KSIKICAgIGR1cAogICAgcHVzaGludCA2CiAgICA8CiAgICBhc3NlcnQgLy8gbWF4IHByb2plY3RzIHJlYWNoZWQgKDYpCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjExCiAgICAvLyBzZW5kZXIgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjEzCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgYm56IHN1Ym1pdF9wcm9qZWN0X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjE0CiAgICAvLyBzZWxmLnAwX3N1Ym1pdHRlciA9IHNlbmRlcgogICAgYnl0ZWMgMzIgLy8gInAwX3N1Ym1pdHRlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIxNQogICAgLy8gc2VsZi5wMF9uYW1lID0gbmFtZQogICAgYnl0ZWMgNDMgLy8gInAwX25hbWUiCiAgICBkaWcgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMTYKICAgIC8vIHNlbGYucDBfbG9jYXRpb24gPSBsb2NhdGlvbgogICAgYnl0ZWMgNDQgLy8gInAwX2xvY2F0aW9uIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjE3CiAgICAvLyBzZWxmLnAwX2Vjb3N5c3RlbSA9IGVjb3N5c3RlbQogICAgYnl0ZWMgNDUgLy8gInAwX2Vjb3N5c3RlbSIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIxOAogICAgLy8gc2VsZi5wMF9jaWQgPSBjaWQKICAgIGJ5dGVjIDQyIC8vICJwMF9jaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMTkKICAgIC8vIHNlbGYucDBfc3RhdHVzID0gVUludDY0KDEpCiAgICBieXRlYyA0IC8vICJwMF9zdGF0dXMiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMjAKICAgIC8vIHNlbGYucDBfY3JlZGl0cyA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTEgLy8gInAwX2NyZWRpdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCnN1Ym1pdF9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjYyCiAgICAvLyBzZWxmLnByb2plY3RfY291bnQgPSBpZHggKyBVSW50NjQoMSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlYyAxMCAvLyAicHJvamVjdF9jb3VudCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjYzCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoaWR4KQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpzdWJtaXRfcHJvamVjdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMjEKICAgIC8vIGVsaWYgaWR4ID09IFVJbnQ2NCgxKToKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IHN1Ym1pdF9wcm9qZWN0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjIyCiAgICAvLyBzZWxmLnAxX3N1Ym1pdHRlciA9IHNlbmRlcgogICAgYnl0ZWMgMzMgLy8gInAxX3N1Ym1pdHRlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyMwogICAgLy8gc2VsZi5wMV9uYW1lID0gbmFtZQogICAgYnl0ZWMgNDcgLy8gInAxX25hbWUiCiAgICBkaWcgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMjQKICAgIC8vIHNlbGYucDFfbG9jYXRpb24gPSBsb2NhdGlvbgogICAgYnl0ZWMgNDggLy8gInAxX2xvY2F0aW9uIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjI1CiAgICAvLyBzZWxmLnAxX2Vjb3N5c3RlbSA9IGVjb3N5c3RlbQogICAgYnl0ZWMgNDkgLy8gInAxX2Vjb3N5c3RlbSIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNgogICAgLy8gc2VsZi5wMV9jaWQgPSBjaWQKICAgIGJ5dGVjIDQ2IC8vICJwMV9jaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMjcKICAgIC8vIHNlbGYucDFfc3RhdHVzID0gVUludDY0KDEpCiAgICBieXRlYyA1IC8vICJwMV9zdGF0dXMiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMjgKICAgIC8vIHNlbGYucDFfY3JlZGl0cyA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTIgLy8gInAxX2NyZWRpdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgc3VibWl0X3Byb2plY3RfYWZ0ZXJfaWZfZWxzZUAxNgoKc3VibWl0X3Byb2plY3RfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjI5CiAgICAvLyBlbGlmIGlkeCA9PSBVSW50NjQoMik6CiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBzdWJtaXRfcHJvamVjdF9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5wMl9zdWJtaXR0ZXIgPSBzZW5kZXIKICAgIGJ5dGVjIDM0IC8vICJwMl9zdWJtaXR0ZXIiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMzEKICAgIC8vIHNlbGYucDJfbmFtZSA9IG5hbWUKICAgIGJ5dGVjIDUxIC8vICJwMl9uYW1lIgogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjMyCiAgICAvLyBzZWxmLnAyX2xvY2F0aW9uID0gbG9jYXRpb24KICAgIGJ5dGVjIDUyIC8vICJwMl9sb2NhdGlvbiIKICAgIGRpZyA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzMwogICAgLy8gc2VsZi5wMl9lY29zeXN0ZW0gPSBlY29zeXN0ZW0KICAgIGJ5dGVjIDUzIC8vICJwMl9lY29zeXN0ZW0iCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyMzQKICAgIC8vIHNlbGYucDJfY2lkID0gY2lkCiAgICBieXRlYyA1MCAvLyAicDJfY2lkIgogICAgZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjM1CiAgICAvLyBzZWxmLnAyX3N0YXR1cyA9IFVJbnQ2NCgxKQogICAgYnl0ZWMgNiAvLyAicDJfc3RhdHVzIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjM2CiAgICAvLyBzZWxmLnAyX2NyZWRpdHMgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDEzIC8vICJwMl9jcmVkaXRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIHN1Ym1pdF9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTYKCnN1Ym1pdF9wcm9qZWN0X2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzNwogICAgLy8gZWxpZiBpZHggPT0gVUludDY0KDMpOgogICAgZGlnIDEKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IHN1Ym1pdF9wcm9qZWN0X2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjM4CiAgICAvLyBzZWxmLnAzX3N1Ym1pdHRlciA9IHNlbmRlcgogICAgYnl0ZWMgMzUgLy8gInAzX3N1Ym1pdHRlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzOQogICAgLy8gc2VsZi5wM19uYW1lID0gbmFtZQogICAgYnl0ZWMgNTUgLy8gInAzX25hbWUiCiAgICBkaWcgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNDAKICAgIC8vIHNlbGYucDNfbG9jYXRpb24gPSBsb2NhdGlvbgogICAgYnl0ZWMgNTYgLy8gInAzX2xvY2F0aW9uIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjQxCiAgICAvLyBzZWxmLnAzX2Vjb3N5c3RlbSA9IGVjb3N5c3RlbQogICAgYnl0ZWMgNTcgLy8gInAzX2Vjb3N5c3RlbSIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0MgogICAgLy8gc2VsZi5wM19jaWQgPSBjaWQKICAgIGJ5dGVjIDU0IC8vICJwM19jaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNDMKICAgIC8vIHNlbGYucDNfc3RhdHVzID0gVUludDY0KDEpCiAgICBieXRlYyA3IC8vICJwM19zdGF0dXMiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNDQKICAgIC8vIHNlbGYucDNfY3JlZGl0cyA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTQgLy8gInAzX2NyZWRpdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgc3VibWl0X3Byb2plY3RfYWZ0ZXJfaWZfZWxzZUAxNgoKc3VibWl0X3Byb2plY3RfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjQ1CiAgICAvLyBlbGlmIGlkeCA9PSBVSW50NjQoNCk6CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDQKICAgID09CiAgICBieiBzdWJtaXRfcHJvamVjdF9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNDYKICAgIC8vIHNlbGYucDRfc3VibWl0dGVyID0gc2VuZGVyCiAgICBieXRlYyAzNiAvLyAicDRfc3VibWl0dGVyIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjQ3CiAgICAvLyBzZWxmLnA0X25hbWUgPSBuYW1lCiAgICBieXRlYyA1OSAvLyAicDRfbmFtZSIKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0OAogICAgLy8gc2VsZi5wNF9sb2NhdGlvbiA9IGxvY2F0aW9uCiAgICBieXRlYyA2MCAvLyAicDRfbG9jYXRpb24iCiAgICBkaWcgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNDkKICAgIC8vIHNlbGYucDRfZWNvc3lzdGVtID0gZWNvc3lzdGVtCiAgICBieXRlYyA2MSAvLyAicDRfZWNvc3lzdGVtIgogICAgZGlnIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjUwCiAgICAvLyBzZWxmLnA0X2NpZCA9IGNpZAogICAgYnl0ZWMgNTggLy8gInA0X2NpZCIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1MQogICAgLy8gc2VsZi5wNF9zdGF0dXMgPSBVSW50NjQoMSkKICAgIGJ5dGVjIDggLy8gInA0X3N0YXR1cyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1MgogICAgLy8gc2VsZi5wNF9jcmVkaXRzID0gVUludDY0KDApCiAgICBieXRlYyAxNSAvLyAicDRfY3JlZGl0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBzdWJtaXRfcHJvamVjdF9hZnRlcl9pZl9lbHNlQDE2CgpzdWJtaXRfcHJvamVjdF9lbHNlX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjU0CiAgICAvLyBzZWxmLnA1X3N1Ym1pdHRlciA9IHNlbmRlcgogICAgYnl0ZWMgMzcgLy8gInA1X3N1Ym1pdHRlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1NQogICAgLy8gc2VsZi5wNV9uYW1lID0gbmFtZQogICAgYnl0ZWMgNjMgLy8gInA1X25hbWUiCiAgICBkaWcgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNTYKICAgIC8vIHNlbGYucDVfbG9jYXRpb24gPSBsb2NhdGlvbgogICAgYnl0ZWMgNjQgLy8gInA1X2xvY2F0aW9uIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjU3CiAgICAvLyBzZWxmLnA1X2Vjb3N5c3RlbSA9IGVjb3N5c3RlbQogICAgYnl0ZWMgNjUgLy8gInA1X2Vjb3N5c3RlbSIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1OAogICAgLy8gc2VsZi5wNV9jaWQgPSBjaWQKICAgIGJ5dGVjIDYyIC8vICJwNV9jaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNTkKICAgIC8vIHNlbGYucDVfc3RhdHVzID0gVUludDY0KDEpCiAgICBieXRlYyA5IC8vICJwNV9zdGF0dXMiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNjAKICAgIC8vIHNlbGYucDVfY3JlZGl0cyA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTYgLy8gInA1X2NyZWRpdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgc3VibWl0X3Byb2plY3RfYWZ0ZXJfaWZfZWxzZUAxNgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmFwcHJvdmVfcHJvamVjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFwcHJvdmVfcHJvamVjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI3MgogICAgLy8gc2VsZi5fb25seV92YWxpZGF0b3IoKQogICAgY2FsbHN1YiBfb25seV92YWxpZGF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNzMKICAgIC8vIGFzc2VydCBwcm9qZWN0X2lkIDwgc2VsZi5wcm9qZWN0X2NvdW50LCAiaW52YWxpZCBwcm9qZWN0IGlkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJwcm9qZWN0X2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb2plY3RfY291bnQgZXhpc3RzCiAgICBkaWcgMgogICAgPgogICAgYXNzZXJ0IC8vIGludmFsaWQgcHJvamVjdCBpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI3NAogICAgLy8gYXNzZXJ0IGNyZWRpdHMgPiBVSW50NjQoMCksICJjcmVkaXRzIG11c3QgYmUgPiAwIgogICAgYXNzZXJ0IC8vIGNyZWRpdHMgbXVzdCBiZSA+IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNzYKICAgIC8vIGlmIHByb2plY3RfaWQgPT0gVUludDY0KDApOgogICAgYm56IGFwcHJvdmVfcHJvamVjdF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI3NwogICAgLy8gYXNzZXJ0IHNlbGYucDBfc3RhdHVzID09IFVJbnQ2NCgxKSwgInByb2plY3Qgbm90IHBlbmRpbmciCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAicDBfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX3N0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIHByb2plY3Qgbm90IHBlbmRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNzgKICAgIC8vIHNlbGYucDBfc3RhdHVzID0gVUludDY0KDIpCiAgICBieXRlYyA0IC8vICJwMF9zdGF0dXMiCiAgICBpbnRjXzIgLy8gMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNzkKICAgIC8vIHNlbGYucDBfY3JlZGl0cyA9IGNyZWRpdHMKICAgIGJ5dGVjIDExIC8vICJwMF9jcmVkaXRzIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CgphcHByb3ZlX3Byb2plY3RfYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXBwcm92ZV9wcm9qZWN0X2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4MAogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgxKToKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IGFwcHJvdmVfcHJvamVjdF9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4MQogICAgLy8gYXNzZXJ0IHNlbGYucDFfc3RhdHVzID09IFVJbnQ2NCgxKSwgInByb2plY3Qgbm90IHBlbmRpbmciCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAicDFfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAxX3N0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIHByb2plY3Qgbm90IHBlbmRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyODIKICAgIC8vIHNlbGYucDFfc3RhdHVzID0gVUludDY0KDIpCiAgICBieXRlYyA1IC8vICJwMV9zdGF0dXMiCiAgICBpbnRjXzIgLy8gMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyODMKICAgIC8vIHNlbGYucDFfY3JlZGl0cyA9IGNyZWRpdHMKICAgIGJ5dGVjIDEyIC8vICJwMV9jcmVkaXRzIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGFwcHJvdmVfcHJvamVjdF9hZnRlcl9pZl9lbHNlQDE2CgphcHByb3ZlX3Byb2plY3RfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mjg0CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDIpOgogICAgZGlnIDEKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogYXBwcm92ZV9wcm9qZWN0X2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mjg1CiAgICAvLyBhc3NlcnQgc2VsZi5wMl9zdGF0dXMgPT0gVUludDY0KDEpLCAicHJvamVjdCBub3QgcGVuZGluZyIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJwMl9zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDJfc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gcHJvamVjdCBub3QgcGVuZGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4NgogICAgLy8gc2VsZi5wMl9zdGF0dXMgPSBVSW50NjQoMikKICAgIGJ5dGVjIDYgLy8gInAyX3N0YXR1cyIKICAgIGludGNfMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4NwogICAgLy8gc2VsZi5wMl9jcmVkaXRzID0gY3JlZGl0cwogICAgYnl0ZWMgMTMgLy8gInAyX2NyZWRpdHMiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgYXBwcm92ZV9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTYKCmFwcHJvdmVfcHJvamVjdF9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyODgKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMyk6CiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICA9PQogICAgYnogYXBwcm92ZV9wcm9qZWN0X2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mjg5CiAgICAvLyBhc3NlcnQgc2VsZi5wM19zdGF0dXMgPT0gVUludDY0KDEpLCAicHJvamVjdCBub3QgcGVuZGluZyIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJwM19zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDNfc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gcHJvamVjdCBub3QgcGVuZGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5MAogICAgLy8gc2VsZi5wM19zdGF0dXMgPSBVSW50NjQoMikKICAgIGJ5dGVjIDcgLy8gInAzX3N0YXR1cyIKICAgIGludGNfMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5MQogICAgLy8gc2VsZi5wM19jcmVkaXRzID0gY3JlZGl0cwogICAgYnl0ZWMgMTQgLy8gInAzX2NyZWRpdHMiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgYXBwcm92ZV9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTYKCmFwcHJvdmVfcHJvamVjdF9lbHNlX2JvZHlAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weToyOTIKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoNCk6CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDQKICAgID09CiAgICBieiBhcHByb3ZlX3Byb2plY3RfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MjkzCiAgICAvLyBhc3NlcnQgc2VsZi5wNF9zdGF0dXMgPT0gVUludDY0KDEpLCAicHJvamVjdCBub3QgcGVuZGluZyIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJwNF9zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDRfc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gcHJvamVjdCBub3QgcGVuZGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5NAogICAgLy8gc2VsZi5wNF9zdGF0dXMgPSBVSW50NjQoMikKICAgIGJ5dGVjIDggLy8gInA0X3N0YXR1cyIKICAgIGludGNfMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5NQogICAgLy8gc2VsZi5wNF9jcmVkaXRzID0gY3JlZGl0cwogICAgYnl0ZWMgMTUgLy8gInA0X2NyZWRpdHMiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgYXBwcm92ZV9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTYKCmFwcHJvdmVfcHJvamVjdF9lbHNlX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mjk3CiAgICAvLyBhc3NlcnQgc2VsZi5wNV9zdGF0dXMgPT0gVUludDY0KDEpLCAicHJvamVjdCBub3QgcGVuZGluZyIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJwNV9zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gcHJvamVjdCBub3QgcGVuZGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5OAogICAgLy8gc2VsZi5wNV9zdGF0dXMgPSBVSW50NjQoMikKICAgIGJ5dGVjIDkgLy8gInA1X3N0YXR1cyIKICAgIGludGNfMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5OQogICAgLy8gc2VsZi5wNV9jcmVkaXRzID0gY3JlZGl0cwogICAgYnl0ZWMgMTYgLy8gInA1X2NyZWRpdHMiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgYXBwcm92ZV9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTYKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5yZWplY3RfcHJvamVjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlamVjdF9wcm9qZWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzA0CiAgICAvLyBzZWxmLl9vbmx5X3ZhbGlkYXRvcigpCiAgICBjYWxsc3ViIF9vbmx5X3ZhbGlkYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwNQogICAgLy8gYXNzZXJ0IHByb2plY3RfaWQgPCBzZWxmLnByb2plY3RfY291bnQsICJpbnZhbGlkIHByb2plY3QgaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByb2plY3RfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJvamVjdF9jb3VudCBleGlzdHMKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQgLy8gaW52YWxpZCBwcm9qZWN0IGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzA3CiAgICAvLyBpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgwKToKICAgIGJueiByZWplY3RfcHJvamVjdF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYXNzZXJ0IHNlbGYucDBfc3RhdHVzID09IFVJbnQ2NCgxKSwgInByb2plY3Qgbm90IHBlbmRpbmciCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAicDBfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX3N0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIHByb2plY3Qgbm90IHBlbmRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMDkKICAgIC8vIHNlbGYucDBfc3RhdHVzID0gVUludDY0KDMpCiAgICBieXRlYyA0IC8vICJwMF9zdGF0dXMiCiAgICBwdXNoaW50IDMKICAgIGFwcF9nbG9iYWxfcHV0CgpyZWplY3RfcHJvamVjdF9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpyZWplY3RfcHJvamVjdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMTAKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogcmVqZWN0X3Byb2plY3RfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMTEKICAgIC8vIGFzc2VydCBzZWxmLnAxX3N0YXR1cyA9PSBVSW50NjQoMSksICJwcm9qZWN0IG5vdCBwZW5kaW5nIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInAxX3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMV9zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBwcm9qZWN0IG5vdCBwZW5kaW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzEyCiAgICAvLyBzZWxmLnAxX3N0YXR1cyA9IFVJbnQ2NCgzKQogICAgYnl0ZWMgNSAvLyAicDFfc3RhdHVzIgogICAgcHVzaGludCAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiByZWplY3RfcHJvamVjdF9hZnRlcl9pZl9lbHNlQDE2CgpyZWplY3RfcHJvamVjdF9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMTMKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMik6CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogcmVqZWN0X3Byb2plY3RfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMTQKICAgIC8vIGFzc2VydCBzZWxmLnAyX3N0YXR1cyA9PSBVSW50NjQoMSksICJwcm9qZWN0IG5vdCBwZW5kaW5nIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInAyX3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBwcm9qZWN0IG5vdCBwZW5kaW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzE1CiAgICAvLyBzZWxmLnAyX3N0YXR1cyA9IFVJbnQ2NCgzKQogICAgYnl0ZWMgNiAvLyAicDJfc3RhdHVzIgogICAgcHVzaGludCAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiByZWplY3RfcHJvamVjdF9hZnRlcl9pZl9lbHNlQDE2CgpyZWplY3RfcHJvamVjdF9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMTYKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IHJlamVjdF9wcm9qZWN0X2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzE3CiAgICAvLyBhc3NlcnQgc2VsZi5wM19zdGF0dXMgPT0gVUludDY0KDEpLCAicHJvamVjdCBub3QgcGVuZGluZyIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJwM19zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDNfc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gcHJvamVjdCBub3QgcGVuZGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMxOAogICAgLy8gc2VsZi5wM19zdGF0dXMgPSBVSW50NjQoMykKICAgIGJ5dGVjIDcgLy8gInAzX3N0YXR1cyIKICAgIHB1c2hpbnQgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgcmVqZWN0X3Byb2plY3RfYWZ0ZXJfaWZfZWxzZUAxNgoKcmVqZWN0X3Byb2plY3RfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzE5CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDQpOgogICAgZHVwCiAgICBpbnRjXzMgLy8gNAogICAgPT0KICAgIGJ6IHJlamVjdF9wcm9qZWN0X2Vsc2VfYm9keUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMyMAogICAgLy8gYXNzZXJ0IHNlbGYucDRfc3RhdHVzID09IFVJbnQ2NCgxKSwgInByb2plY3Qgbm90IHBlbmRpbmciCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAicDRfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnA0X3N0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIHByb2plY3Qgbm90IHBlbmRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMjEKICAgIC8vIHNlbGYucDRfc3RhdHVzID0gVUludDY0KDMpCiAgICBieXRlYyA4IC8vICJwNF9zdGF0dXMiCiAgICBwdXNoaW50IDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIHJlamVjdF9wcm9qZWN0X2FmdGVyX2lmX2Vsc2VAMTYKCnJlamVjdF9wcm9qZWN0X2Vsc2VfYm9keUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMjMKICAgIC8vIGFzc2VydCBzZWxmLnA1X3N0YXR1cyA9PSBVSW50NjQoMSksICJwcm9qZWN0IG5vdCBwZW5kaW5nIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gInA1X3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNV9zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBwcm9qZWN0IG5vdCBwZW5kaW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzI0CiAgICAvLyBzZWxmLnA1X3N0YXR1cyA9IFVJbnQ2NCgzKQogICAgYnl0ZWMgOSAvLyAicDVfc3RhdHVzIgogICAgcHVzaGludCAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiByZWplY3RfcHJvamVjdF9hZnRlcl9pZl9lbHNlQDE2CgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuaXNzdWVfY3JlZGl0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6Cmlzc3VlX2NyZWRpdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMzIKICAgIC8vIHNlbGYuX29ubHlfdmFsaWRhdG9yKCkKICAgIGNhbGxzdWIgX29ubHlfdmFsaWRhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzMzCiAgICAvLyBhc3NlcnQgc2VsZi5hYXJuYV9hc3NldCwgIm5vIEFBUk5BIHRva2VuIGNyZWF0ZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICBhc3NlcnQgLy8gbm8gQUFSTkEgdG9rZW4gY3JlYXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMzNAogICAgLy8gYXNzZXJ0IHByb2plY3RfaWQgPCBzZWxmLnByb2plY3RfY291bnQsICJpbnZhbGlkIHByb2plY3QgaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByb2plY3RfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJvamVjdF9jb3VudCBleGlzdHMKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQgLy8gaW52YWxpZCBwcm9qZWN0IGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzM2CiAgICAvLyBpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgwKToKICAgIGJueiBpc3N1ZV9jcmVkaXRzX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzM3CiAgICAvLyBhc3NlcnQgc2VsZi5wMF9zdGF0dXMgPT0gVUludDY0KDIpLCAicHJvamVjdCBub3QgdmVyaWZpZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAicDBfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX3N0YXR1cyBleGlzdHMKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIHByb2plY3Qgbm90IHZlcmlmaWVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzM4LTM0MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLnAwX3N1Ym1pdHRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5wMF9jcmVkaXRzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMzOQogICAgLy8geGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFhcm5hX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFhcm5hX2Fzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0MAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9c2VsZi5wMF9zdWJtaXR0ZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzIgLy8gInAwX3N1Ym1pdHRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMF9zdWJtaXR0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzQxCiAgICAvLyBhc3NldF9hbW91bnQ9c2VsZi5wMF9jcmVkaXRzLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJwMF9jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX2NyZWRpdHMgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzM4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMzOC0zNDIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5wMF9zdWJtaXR0ZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYucDBfY3JlZGl0cywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzQzCiAgICAvLyBzZWxmLnAwX3N0YXR1cyA9IFVJbnQ2NCg0KQogICAgYnl0ZWMgNCAvLyAicDBfc3RhdHVzIgogICAgaW50Y18zIC8vIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzQ0CiAgICAvLyBzZWxmLnRvdGFsX2NyZWRpdHNfaXNzdWVkID0gc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCArIHNlbGYucDBfY3JlZGl0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX2NyZWRpdHNfaXNzdWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NyZWRpdHNfaXNzdWVkIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJwMF9jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX2NyZWRpdHMgZXhpc3RzCiAgICArCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzQ1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5wMF9jcmVkaXRzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJwMF9jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX2NyZWRpdHMgZXhpc3RzCiAgICBpdG9iCgppc3N1ZV9jcmVkaXRzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuaXNzdWVfY3JlZGl0c0AxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKaXNzdWVfY3JlZGl0c19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNDYKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogaXNzdWVfY3JlZGl0c19lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0NwogICAgLy8gYXNzZXJ0IHNlbGYucDFfc3RhdHVzID09IFVJbnQ2NCgyKSwgInByb2plY3Qgbm90IHZlcmlmaWVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInAxX3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMV9zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBwcm9qZWN0IG5vdCB2ZXJpZmllZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0OC0zNTIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5wMV9zdWJtaXR0ZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYucDFfY3JlZGl0cywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNDkKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNTAKICAgIC8vIGFzc2V0X3JlY2VpdmVyPXNlbGYucDFfc3VibWl0dGVyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDMzIC8vICJwMV9zdWJtaXR0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDFfc3VibWl0dGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1MQogICAgLy8gYXNzZXRfYW1vdW50PXNlbGYucDFfY3JlZGl0cywKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAicDFfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMV9jcmVkaXRzIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNDgtMzUyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYucDFfc3VibWl0dGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLnAxX2NyZWRpdHMsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1MwogICAgLy8gc2VsZi5wMV9zdGF0dXMgPSBVSW50NjQoNCkKICAgIGJ5dGVjIDUgLy8gInAxX3N0YXR1cyIKICAgIGludGNfMyAvLyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1NAogICAgLy8gc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCA9IHNlbGYudG90YWxfY3JlZGl0c19pc3N1ZWQgKyBzZWxmLnAxX2NyZWRpdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAicDFfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMV9jcmVkaXRzIGV4aXN0cwogICAgKwogICAgYnl0ZWNfMyAvLyAidG90YWxfY3JlZGl0c19pc3N1ZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1NQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYucDFfY3JlZGl0cykKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAicDFfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMV9jcmVkaXRzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBiIGlzc3VlX2NyZWRpdHNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5pc3N1ZV9jcmVkaXRzQDE4Cgppc3N1ZV9jcmVkaXRzX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1NgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgyKToKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBpc3N1ZV9jcmVkaXRzX2Vsc2VfYm9keUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1NwogICAgLy8gYXNzZXJ0IHNlbGYucDJfc3RhdHVzID09IFVJbnQ2NCgyKSwgInByb2plY3Qgbm90IHZlcmlmaWVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInAyX3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBwcm9qZWN0IG5vdCB2ZXJpZmllZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1OC0zNjIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5wMl9zdWJtaXR0ZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYucDJfY3JlZGl0cywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNTkKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNjAKICAgIC8vIGFzc2V0X3JlY2VpdmVyPXNlbGYucDJfc3VibWl0dGVyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM0IC8vICJwMl9zdWJtaXR0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDJfc3VibWl0dGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2MQogICAgLy8gYXNzZXRfYW1vdW50PXNlbGYucDJfY3JlZGl0cywKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAicDJfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9jcmVkaXRzIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNTgtMzYyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYucDJfc3VibWl0dGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLnAyX2NyZWRpdHMsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2MwogICAgLy8gc2VsZi5wMl9zdGF0dXMgPSBVSW50NjQoNCkKICAgIGJ5dGVjIDYgLy8gInAyX3N0YXR1cyIKICAgIGludGNfMyAvLyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2NAogICAgLy8gc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCA9IHNlbGYudG90YWxfY3JlZGl0c19pc3N1ZWQgKyBzZWxmLnAyX2NyZWRpdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAicDJfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9jcmVkaXRzIGV4aXN0cwogICAgKwogICAgYnl0ZWNfMyAvLyAidG90YWxfY3JlZGl0c19pc3N1ZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2NQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYucDJfY3JlZGl0cykKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAicDJfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9jcmVkaXRzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBiIGlzc3VlX2NyZWRpdHNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5pc3N1ZV9jcmVkaXRzQDE4Cgppc3N1ZV9jcmVkaXRzX2Vsc2VfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNjYKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IGlzc3VlX2NyZWRpdHNfZWxzZV9ib2R5QDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzY3CiAgICAvLyBhc3NlcnQgc2VsZi5wM19zdGF0dXMgPT0gVUludDY0KDIpLCAicHJvamVjdCBub3QgdmVyaWZpZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicDNfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX3N0YXR1cyBleGlzdHMKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIHByb2plY3Qgbm90IHZlcmlmaWVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzY4LTM3MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLnAzX3N1Ym1pdHRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5wM19jcmVkaXRzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2OQogICAgLy8geGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFhcm5hX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFhcm5hX2Fzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3MAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9c2VsZi5wM19zdWJtaXR0ZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzUgLy8gInAzX3N1Ym1pdHRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wM19zdWJtaXR0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzcxCiAgICAvLyBhc3NldF9hbW91bnQ9c2VsZi5wM19jcmVkaXRzLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJwM19jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX2NyZWRpdHMgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzY4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2OC0zNzIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5wM19zdWJtaXR0ZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYucDNfY3JlZGl0cywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzczCiAgICAvLyBzZWxmLnAzX3N0YXR1cyA9IFVJbnQ2NCg0KQogICAgYnl0ZWMgNyAvLyAicDNfc3RhdHVzIgogICAgaW50Y18zIC8vIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mzc0CiAgICAvLyBzZWxmLnRvdGFsX2NyZWRpdHNfaXNzdWVkID0gc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCArIHNlbGYucDNfY3JlZGl0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX2NyZWRpdHNfaXNzdWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NyZWRpdHNfaXNzdWVkIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJwM19jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX2NyZWRpdHMgZXhpc3RzCiAgICArCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mzc1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5wM19jcmVkaXRzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJwM19jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX2NyZWRpdHMgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGIgaXNzdWVfY3JlZGl0c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5Lmlzc3VlX2NyZWRpdHNAMTgKCmlzc3VlX2NyZWRpdHNfZWxzZV9ib2R5QDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3NgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCg0KToKICAgIGR1cAogICAgaW50Y18zIC8vIDQKICAgID09CiAgICBieiBpc3N1ZV9jcmVkaXRzX2Vsc2VfYm9keUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3NwogICAgLy8gYXNzZXJ0IHNlbGYucDRfc3RhdHVzID09IFVJbnQ2NCgyKSwgInByb2plY3Qgbm90IHZlcmlmaWVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gInA0X3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBwcm9qZWN0IG5vdCB2ZXJpZmllZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3OC0zODIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5wNF9zdWJtaXR0ZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYucDRfY3JlZGl0cywKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNzkKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozODAKICAgIC8vIGFzc2V0X3JlY2VpdmVyPXNlbGYucDRfc3VibWl0dGVyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM2IC8vICJwNF9zdWJtaXR0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDRfc3VibWl0dGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4MQogICAgLy8gYXNzZXRfYW1vdW50PXNlbGYucDRfY3JlZGl0cywKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAicDRfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9jcmVkaXRzIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozNzgtMzgyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYucDRfc3VibWl0dGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLnA0X2NyZWRpdHMsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4MwogICAgLy8gc2VsZi5wNF9zdGF0dXMgPSBVSW50NjQoNCkKICAgIGJ5dGVjIDggLy8gInA0X3N0YXR1cyIKICAgIGludGNfMyAvLyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4NAogICAgLy8gc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCA9IHNlbGYudG90YWxfY3JlZGl0c19pc3N1ZWQgKyBzZWxmLnA0X2NyZWRpdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAicDRfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9jcmVkaXRzIGV4aXN0cwogICAgKwogICAgYnl0ZWNfMyAvLyAidG90YWxfY3JlZGl0c19pc3N1ZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4NQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYucDRfY3JlZGl0cykKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAicDRfY3JlZGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9jcmVkaXRzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBiIGlzc3VlX2NyZWRpdHNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5pc3N1ZV9jcmVkaXRzQDE4Cgppc3N1ZV9jcmVkaXRzX2Vsc2VfYm9keUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozODcKICAgIC8vIGFzc2VydCBzZWxmLnA1X3N0YXR1cyA9PSBVSW50NjQoMiksICJwcm9qZWN0IG5vdCB2ZXJpZmllZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJwNV9zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfc3RhdHVzIGV4aXN0cwogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gcHJvamVjdCBub3QgdmVyaWZpZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozODgtMzkyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYucDVfc3VibWl0dGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLnA1X2NyZWRpdHMsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mzg5CiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MzkwCiAgICAvLyBhc3NldF9yZWNlaXZlcj1zZWxmLnA1X3N1Ym1pdHRlciwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzNyAvLyAicDVfc3VibWl0dGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnA1X3N1Ym1pdHRlciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozOTEKICAgIC8vIGFzc2V0X2Ftb3VudD1zZWxmLnA1X2NyZWRpdHMsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gInA1X2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfY3JlZGl0cyBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozODgKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Mzg4LTM5MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLnA1X3N1Ym1pdHRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5wNV9jcmVkaXRzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozOTMKICAgIC8vIHNlbGYucDVfc3RhdHVzID0gVUludDY0KDQpCiAgICBieXRlYyA5IC8vICJwNV9zdGF0dXMiCiAgICBpbnRjXzMgLy8gNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozOTQKICAgIC8vIHNlbGYudG90YWxfY3JlZGl0c19pc3N1ZWQgPSBzZWxmLnRvdGFsX2NyZWRpdHNfaXNzdWVkICsgc2VsZi5wNV9jcmVkaXRzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfY3JlZGl0c19pc3N1ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfY3JlZGl0c19pc3N1ZWQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gInA1X2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfY3JlZGl0cyBleGlzdHMKICAgICsKICAgIGJ5dGVjXzMgLy8gInRvdGFsX2NyZWRpdHNfaXNzdWVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozOTUKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnA1X2NyZWRpdHMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gInA1X2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfY3JlZGl0cyBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTozMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYiBpc3N1ZV9jcmVkaXRzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuaXNzdWVfY3JlZGl0c0AxOAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5Lmxpc3RfZm9yX3NhbGVbcm91dGluZ10oKSAtPiB2b2lkOgpsaXN0X2Zvcl9zYWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDExCiAgICAvLyBhc3NlcnQgc2VsZi5hYXJuYV9hc3NldCwgIm5vIEFBUk5BIHRva2VuIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFhcm5hX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFhcm5hX2Fzc2V0IGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQgLy8gbm8gQUFSTkEgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0MTIKICAgIC8vIGFzc2VydCBhbW91bnQgPiBVSW50NjQoMCksICJhbW91bnQgbXVzdCBiZSA+IDAiCiAgICBkaWcgMgogICAgYXNzZXJ0IC8vIGFtb3VudCBtdXN0IGJlID4gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxMwogICAgLy8gYXNzZXJ0IHByaWNlX3Blcl90b2tlbiA+IFVJbnQ2NCgwKSwgInByaWNlIG11c3QgYmUgPiAwIgogICAgc3dhcAogICAgYXNzZXJ0IC8vIHByaWNlIG11c3QgYmUgPiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDE1CiAgICAvLyBpZHggPSBzZWxmLmxpc3RpbmdfY291bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMSAvLyAibGlzdGluZ19jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdfY291bnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDE2CiAgICAvLyBhc3NlcnQgaWR4IDwgVUludDY0KDQpLCAibWF4IGxpc3RpbmdzIHJlYWNoZWQgKDQpIgogICAgZHVwCiAgICBpbnRjXzMgLy8gNAogICAgPAogICAgYXNzZXJ0IC8vIG1heCBsaXN0aW5ncyByZWFjaGVkICg0KQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxOC00MjQKICAgIC8vICMgQ2xhd2JhY2sgdG9rZW5zIGZyb20gc2VsbGVyIGludG8gY29udHJhY3QgZXNjcm93CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0MjEKICAgIC8vIGFzc2V0X3NlbmRlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQyMgogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICB1bmNvdmVyIDQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0MTgtNDE5CiAgICAvLyAjIENsYXdiYWNrIHRva2VucyBmcm9tIHNlbGxlciBpbnRvIGNvbnRyYWN0IGVzY3JvdwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0MTgtNDI0CiAgICAvLyAjIENsYXdiYWNrIHRva2VucyBmcm9tIHNlbGxlciBpbnRvIGNvbnRyYWN0IGVzY3JvdwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQyNgogICAgLy8gc2VsbGVyID0gVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQyOAogICAgLy8gaWYgaWR4ID09IFVJbnQ2NCgwKToKICAgIGJueiBsaXN0X2Zvcl9zYWxlX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDI5CiAgICAvLyBzZWxmLmwwX3NlbGxlciA9IHNlbGxlcgogICAgYnl0ZWMgMjMgLy8gImwwX3NlbGxlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzMAogICAgLy8gc2VsZi5sMF9hbW91bnQgPSBhbW91bnQKICAgIGJ5dGVjIDI0IC8vICJsMF9hbW91bnQiCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0MzEKICAgIC8vIHNlbGYubDBfcHJpY2UgPSBwcmljZV9wZXJfdG9rZW4KICAgIGJ5dGVjIDM4IC8vICJsMF9wcmljZSIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzMgogICAgLy8gc2VsZi5sMF9hY3RpdmUgPSBVSW50NjQoMSkKICAgIGJ5dGVjIDE3IC8vICJsMF9hY3RpdmUiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCmxpc3RfZm9yX3NhbGVfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NDkKICAgIC8vIHNlbGYubGlzdGluZ19jb3VudCA9IGlkeCArIFVJbnQ2NCgxKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjIDIxIC8vICJsaXN0aW5nX2NvdW50IgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NTAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChpZHgpCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmxpc3RfZm9yX3NhbGVfZWxzZV9ib2R5QDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDMzCiAgICAvLyBlbGlmIGlkeCA9PSBVSW50NjQoMSk6CiAgICBkaWcgMQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBsaXN0X2Zvcl9zYWxlX2Vsc2VfYm9keUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDM0CiAgICAvLyBzZWxmLmwxX3NlbGxlciA9IHNlbGxlcgogICAgYnl0ZWMgMjUgLy8gImwxX3NlbGxlciIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzNQogICAgLy8gc2VsZi5sMV9hbW91bnQgPSBhbW91bnQKICAgIGJ5dGVjIDI2IC8vICJsMV9hbW91bnQiCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0MzYKICAgIC8vIHNlbGYubDFfcHJpY2UgPSBwcmljZV9wZXJfdG9rZW4KICAgIGJ5dGVjIDM5IC8vICJsMV9wcmljZSIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzNwogICAgLy8gc2VsZi5sMV9hY3RpdmUgPSBVSW50NjQoMSkKICAgIGJ5dGVjIDE4IC8vICJsMV9hY3RpdmUiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgbGlzdF9mb3Jfc2FsZV9hZnRlcl9pZl9lbHNlQDExCgpsaXN0X2Zvcl9zYWxlX2Vsc2VfYm9keUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzOAogICAgLy8gZWxpZiBpZHggPT0gVUludDY0KDIpOgogICAgZGlnIDEKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogbGlzdF9mb3Jfc2FsZV9lbHNlX2JvZHlAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzOQogICAgLy8gc2VsZi5sMl9zZWxsZXIgPSBzZWxsZXIKICAgIGJ5dGVjIDI3IC8vICJsMl9zZWxsZXIiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NDAKICAgIC8vIHNlbGYubDJfYW1vdW50ID0gYW1vdW50CiAgICBieXRlYyAyOCAvLyAibDJfYW1vdW50IgogICAgZGlnIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDQxCiAgICAvLyBzZWxmLmwyX3ByaWNlID0gcHJpY2VfcGVyX3Rva2VuCiAgICBieXRlYyA0MCAvLyAibDJfcHJpY2UiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NDIKICAgIC8vIHNlbGYubDJfYWN0aXZlID0gVUludDY0KDEpCiAgICBieXRlYyAxOSAvLyAibDJfYWN0aXZlIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGxpc3RfZm9yX3NhbGVfYWZ0ZXJfaWZfZWxzZUAxMQoKbGlzdF9mb3Jfc2FsZV9lbHNlX2JvZHlAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NDQKICAgIC8vIHNlbGYubDNfc2VsbGVyID0gc2VsbGVyCiAgICBieXRlYyAyOSAvLyAibDNfc2VsbGVyIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDQ1CiAgICAvLyBzZWxmLmwzX2Ftb3VudCA9IGFtb3VudAogICAgYnl0ZWMgMzAgLy8gImwzX2Ftb3VudCIKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0NgogICAgLy8gc2VsZi5sM19wcmljZSA9IHByaWNlX3Blcl90b2tlbgogICAgYnl0ZWMgNDEgLy8gImwzX3ByaWNlIgogICAgZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDQ3CiAgICAvLyBzZWxmLmwzX2FjdGl2ZSA9IFVJbnQ2NCgxKQogICAgYnl0ZWMgMjAgLy8gImwzX2FjdGl2ZSIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBsaXN0X2Zvcl9zYWxlX2FmdGVyX2lmX2Vsc2VAMTEKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5idXlfbGlzdGluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmJ1eV9saXN0aW5nOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgY292ZXIgMgogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NTgKICAgIC8vIGFzc2VydCBzZWxmLmFhcm5hX2Fzc2V0LCAibm8gQUFSTkEgdG9rZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICBhc3NlcnQgLy8gbm8gQUFSTkEgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NTkKICAgIC8vIGFzc2VydCBsaXN0aW5nX2lkIDwgc2VsZi5saXN0aW5nX2NvdW50LCAiaW52YWxpZCBsaXN0aW5nIGlkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIxIC8vICJsaXN0aW5nX2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdfY291bnQgZXhpc3RzCiAgICBkaWcgMQogICAgPgogICAgYXNzZXJ0IC8vIGludmFsaWQgbGlzdGluZyBpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2MQogICAgLy8gaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMCk6CiAgICBibnogYnV5X2xpc3RpbmdfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NjIKICAgIC8vIGFzc2VydCBzZWxmLmwwX2FjdGl2ZSA9PSBVSW50NjQoMSksICJsaXN0aW5nIG5vdCBhY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTcgLy8gImwwX2FjdGl2ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMF9hY3RpdmUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBsaXN0aW5nIG5vdCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NjMKICAgIC8vIHRvdGFsX2Nvc3QgPSBzZWxmLmwwX2Ftb3VudCAqIHNlbGYubDBfcHJpY2UKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNCAvLyAibDBfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwwX2Ftb3VudCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzOCAvLyAibDBfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDBfcHJpY2UgZXhpc3RzCiAgICBkaWcgMQogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2NAogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID49IHRvdGFsX2Nvc3QsICJpbnN1ZmZpY2llbnQgcGF5bWVudCIKICAgIGRpZyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDEKICAgID49CiAgICBhc3NlcnQgLy8gaW5zdWZmaWNpZW50IHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NjUKICAgIC8vIGFzc2VydCBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJwYXkgdGhlIGNvbnRyYWN0IgogICAgc3dhcAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIHBheSB0aGUgY29udHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NjYtNDcwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYubDBfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2NwogICAgLy8geGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFhcm5hX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFhcm5hX2Fzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2OAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2NgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NjYtNDcwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYubDBfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NzEtNDc0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5sMF9zZWxsZXIsCiAgICAvLyAgICAgYW1vdW50PXRvdGFsX2Nvc3QsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDcyCiAgICAvLyByZWNlaXZlcj1zZWxmLmwwX3NlbGxlciwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAibDBfc2VsbGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwwX3NlbGxlciBleGlzdHMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDcxCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NzEtNDc0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5sMF9zZWxsZXIsCiAgICAvLyAgICAgYW1vdW50PXRvdGFsX2Nvc3QsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3NQogICAgLy8gc2VsZi5sMF9hY3RpdmUgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDE3IC8vICJsMF9hY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCmJ1eV9saXN0aW5nX2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmJ1eV9saXN0aW5nX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3NgogICAgLy8gZWxpZiBsaXN0aW5nX2lkID09IFVJbnQ2NCgxKToKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IGJ1eV9saXN0aW5nX2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDc3CiAgICAvLyBhc3NlcnQgc2VsZi5sMV9hY3RpdmUgPT0gVUludDY0KDEpLCAibGlzdGluZyBub3QgYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJsMV9hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDFfYWN0aXZlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gbGlzdGluZyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDc4CiAgICAvLyB0b3RhbF9jb3N0ID0gc2VsZi5sMV9hbW91bnQgKiBzZWxmLmwxX3ByaWNlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjYgLy8gImwxX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMV9hbW91bnQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzkgLy8gImwxX3ByaWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwxX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0NzkKICAgIC8vIGFzc2VydCBwYXltZW50LmFtb3VudCA+PSB0b3RhbF9jb3N0LCAiaW5zdWZmaWNpZW50IHBheW1lbnQiCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBndHhucyBBbW91bnQKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIGluc3VmZmljaWVudCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDgwCiAgICAvLyBhc3NlcnQgcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCAicGF5IHRoZSBjb250cmFjdCIKICAgIHN3YXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBwYXkgdGhlIGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDgxLTQ4NQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLmwxX2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0ODIKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0ODMKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0ODEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDgxLTQ4NQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLmwxX2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDg2LTQ4OQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYubDFfc2VsbGVyLAogICAgLy8gICAgIGFtb3VudD10b3RhbF9jb3N0LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ4NwogICAgLy8gcmVjZWl2ZXI9c2VsZi5sMV9zZWxsZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gImwxX3NlbGxlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMV9zZWxsZXIgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ4NgogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDg2LTQ4OQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYubDFfc2VsbGVyLAogICAgLy8gICAgIGFtb3VudD10b3RhbF9jb3N0LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo0OTAKICAgIC8vIHNlbGYubDFfYWN0aXZlID0gVUludDY0KDApCiAgICBieXRlYyAxOCAvLyAibDFfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGJ1eV9saXN0aW5nX2FmdGVyX2lmX2Vsc2VAMTgKCmJ1eV9saXN0aW5nX2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MQogICAgLy8gZWxpZiBsaXN0aW5nX2lkID09IFVJbnQ2NCgyKToKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGJ1eV9saXN0aW5nX2Vsc2VfYm9keUAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MgogICAgLy8gYXNzZXJ0IHNlbGYubDJfYWN0aXZlID09IFVJbnQ2NCgxKSwgImxpc3Rpbmcgbm90IGFjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOSAvLyAibDJfYWN0aXZlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwyX2FjdGl2ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGxpc3Rpbmcgbm90IGFjdGl2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MwogICAgLy8gdG90YWxfY29zdCA9IHNlbGYubDJfYW1vdW50ICogc2VsZi5sMl9wcmljZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI4IC8vICJsMl9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDJfYW1vdW50IGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQwIC8vICJsMl9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMl9wcmljZSBleGlzdHMKICAgIGRpZyAxCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5hbW91bnQgPj0gdG90YWxfY29zdCwgImluc3VmZmljaWVudCBwYXltZW50IgogICAgZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZ3R4bnMgQW1vdW50CiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBpbnN1ZmZpY2llbnQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgInBheSB0aGUgY29udHJhY3QiCiAgICBzd2FwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gcGF5IHRoZSBjb250cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5Ni01MDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5sMl9hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDk3CiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDk4CiAgICAvLyBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NDk2CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5Ni01MDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5sMl9hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUwMS01MDQKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmwyX3NlbGxlciwKICAgIC8vICAgICBhbW91bnQ9dG90YWxfY29zdCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MDIKICAgIC8vIHJlY2VpdmVyPXNlbGYubDJfc2VsbGVyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI3IC8vICJsMl9zZWxsZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDJfc2VsbGVyIGV4aXN0cwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MDEKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUwMS01MDQKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmwyX3NlbGxlciwKICAgIC8vICAgICBhbW91bnQ9dG90YWxfY29zdCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTA1CiAgICAvLyBzZWxmLmwyX2FjdGl2ZSA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTkgLy8gImwyX2FjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBidXlfbGlzdGluZ19hZnRlcl9pZl9lbHNlQDE4CgpidXlfbGlzdGluZ19lbHNlX2JvZHlAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTA3CiAgICAvLyBhc3NlcnQgc2VsZi5sM19hY3RpdmUgPT0gVUludDY0KDEpLCAibGlzdGluZyBub3QgYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIwIC8vICJsM19hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDNfYWN0aXZlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gbGlzdGluZyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTA4CiAgICAvLyB0b3RhbF9jb3N0ID0gc2VsZi5sM19hbW91bnQgKiBzZWxmLmwzX3ByaWNlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzAgLy8gImwzX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sM19hbW91bnQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDEgLy8gImwzX3ByaWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwzX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MDkKICAgIC8vIGFzc2VydCBwYXltZW50LmFtb3VudCA+PSB0b3RhbF9jb3N0LCAiaW5zdWZmaWNpZW50IHBheW1lbnQiCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBndHhucyBBbW91bnQKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIGluc3VmZmljaWVudCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTEwCiAgICAvLyBhc3NlcnQgcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCAicGF5IHRoZSBjb250cmFjdCIKICAgIHN3YXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBwYXkgdGhlIGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTExLTUxNQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLmwzX2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MTIKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MTMKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MTEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTExLTUxNQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLmwzX2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTE2LTUxOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYubDNfc2VsbGVyLAogICAgLy8gICAgIGFtb3VudD10b3RhbF9jb3N0LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUxNwogICAgLy8gcmVjZWl2ZXI9c2VsZi5sM19zZWxsZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImwzX3NlbGxlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sM19zZWxsZXIgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUxNgogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTE2LTUxOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYubDNfc2VsbGVyLAogICAgLy8gICAgIGFtb3VudD10b3RhbF9jb3N0LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MjAKICAgIC8vIHNlbGYubDNfYWN0aXZlID0gVUludDY0KDApCiAgICBieXRlYyAyMCAvLyAibDNfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGJ1eV9saXN0aW5nX2FmdGVyX2lmX2Vsc2VAMTgKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5jYW5jZWxfbGlzdGluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmNhbmNlbF9saXN0aW5nOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTI1CiAgICAvLyBhc3NlcnQgbGlzdGluZ19pZCA8IHNlbGYubGlzdGluZ19jb3VudCwgImludmFsaWQgbGlzdGluZyBpZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMSAvLyAibGlzdGluZ19jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5saXN0aW5nX2NvdW50IGV4aXN0cwogICAgZGlnIDEKICAgID4KICAgIGFzc2VydCAvLyBpbnZhbGlkIGxpc3RpbmcgaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MjcKICAgIC8vIGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDApOgogICAgYm56IGNhbmNlbF9saXN0aW5nX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTI4CiAgICAvLyBhc3NlcnQgc2VsZi5sMF9hY3RpdmUgPT0gVUludDY0KDEpLCAibGlzdGluZyBub3QgYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE3IC8vICJsMF9hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDBfYWN0aXZlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gbGlzdGluZyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTI5CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmwwX3NlbGxlciwgIm9ubHkgc2VsbGVyIGNhbiBjYW5jZWwiCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjMgLy8gImwwX3NlbGxlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMF9zZWxsZXIgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBvbmx5IHNlbGxlciBjYW4gY2FuY2VsCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTMwLTUzNAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLmwwX3NlbGxlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5sMF9hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTMxCiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTMzCiAgICAvLyBhc3NldF9hbW91bnQ9c2VsZi5sMF9hbW91bnQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjQgLy8gImwwX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMF9hbW91bnQgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTMwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUzMC01MzQKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5sMF9zZWxsZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYubDBfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MzUKICAgIC8vIHNlbGYubDBfYWN0aXZlID0gVUludDY0KDApCiAgICBieXRlYyAxNyAvLyAibDBfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgpjYW5jZWxfbGlzdGluZ19hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjYW5jZWxfbGlzdGluZ19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MzYKICAgIC8vIGVsaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogY2FuY2VsX2xpc3RpbmdfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MzcKICAgIC8vIGFzc2VydCBzZWxmLmwxX2FjdGl2ZSA9PSBVSW50NjQoMSksICJsaXN0aW5nIG5vdCBhY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gImwxX2FjdGl2ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMV9hY3RpdmUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBsaXN0aW5nIG5vdCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MzgKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYubDFfc2VsbGVyLCAib25seSBzZWxsZXIgY2FuIGNhbmNlbCIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNSAvLyAibDFfc2VsbGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwxX3NlbGxlciBleGlzdHMKICAgIHN3YXAKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIG9ubHkgc2VsbGVyIGNhbiBjYW5jZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MzktNTQzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYubDFfc2VsbGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLmwxX2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1NDAKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhYXJuYV9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYXJuYV9hc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1NDIKICAgIC8vIGFzc2V0X2Ftb3VudD1zZWxmLmwxX2Ftb3VudCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNiAvLyAibDFfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwxX2Ftb3VudCBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1MzkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTM5LTU0MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLmwxX3NlbGxlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5sMV9hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU0NAogICAgLy8gc2VsZi5sMV9hY3RpdmUgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDE4IC8vICJsMV9hY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY2FuY2VsX2xpc3RpbmdfYWZ0ZXJfaWZfZWxzZUAxNAoKY2FuY2VsX2xpc3RpbmdfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTQ1CiAgICAvLyBlbGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDIpOgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGNhbmNlbF9saXN0aW5nX2Vsc2VfYm9keUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU0NgogICAgLy8gYXNzZXJ0IHNlbGYubDJfYWN0aXZlID09IFVJbnQ2NCgxKSwgImxpc3Rpbmcgbm90IGFjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOSAvLyAibDJfYWN0aXZlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwyX2FjdGl2ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGxpc3Rpbmcgbm90IGFjdGl2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU0NwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5sMl9zZWxsZXIsICJvbmx5IHNlbGxlciBjYW4gY2FuY2VsIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI3IC8vICJsMl9zZWxsZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDJfc2VsbGVyIGV4aXN0cwogICAgc3dhcAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gb25seSBzZWxsZXIgY2FuIGNhbmNlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU0OC01NTIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5sMl9zZWxsZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYubDJfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU0OQogICAgLy8geGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFhcm5hX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFhcm5hX2Fzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU1MQogICAgLy8gYXNzZXRfYW1vdW50PXNlbGYubDJfYW1vdW50LAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI4IC8vICJsMl9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDJfYW1vdW50IGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU0OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1NDgtNTUyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFhcm5hX2Fzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXNlbGYubDJfc2VsbGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1zZWxmLmwyX2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTUzCiAgICAvLyBzZWxmLmwyX2FjdGl2ZSA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTkgLy8gImwyX2FjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBjYW5jZWxfbGlzdGluZ19hZnRlcl9pZl9lbHNlQDE0CgpjYW5jZWxfbGlzdGluZ19lbHNlX2JvZHlAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTU1CiAgICAvLyBhc3NlcnQgc2VsZi5sM19hY3RpdmUgPT0gVUludDY0KDEpLCAibGlzdGluZyBub3QgYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIwIC8vICJsM19hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDNfYWN0aXZlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gbGlzdGluZyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTU2CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmwzX3NlbGxlciwgIm9ubHkgc2VsbGVyIGNhbiBjYW5jZWwiCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImwzX3NlbGxlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sM19zZWxsZXIgZXhpc3RzCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBvbmx5IHNlbGxlciBjYW4gY2FuY2VsCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTU3LTU2MQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hYXJuYV9hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLmwzX3NlbGxlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5sM19hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTU4CiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTYwCiAgICAvLyBhc3NldF9hbW91bnQ9c2VsZi5sM19hbW91bnQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzAgLy8gImwzX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sM19hbW91bnQgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTU3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU1Ny01NjEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYWFybmFfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi5sM19zZWxsZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYubDNfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1NjIKICAgIC8vIHNlbGYubDNfYWN0aXZlID0gVUludDY0KDApCiAgICBieXRlYyAyMCAvLyAibDNfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNhbmNlbF9saXN0aW5nX2FmdGVyX2lmX2Vsc2VAMTQKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9jb3VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9wcm9qZWN0X2NvdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU3MAogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYucHJvamVjdF9jb3VudCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAicHJvamVjdF9jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm9qZWN0X2NvdW50IGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2Fzc2V0X2lkW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2Fzc2V0X2lkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU3NAogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYuYWFybmFfYXNzZXQuaWQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYWFybmFfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWFybmFfYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfYWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTc4CiAgICAvLyByZXR1cm4gc2VsZi5hZG1pbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1NzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF92YWxpZGF0b3Jbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdmFsaWRhdG9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4MgogICAgLy8gcmV0dXJuIHNlbGYudmFsaWRhdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzEgLy8gInZhbGlkYXRvciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52YWxpZGF0b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfdG90YWxfY3JlZGl0c19pc3N1ZWRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdG90YWxfY3JlZGl0c19pc3N1ZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTg2CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9jcmVkaXRzX2lzc3VlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jcmVkaXRzX2lzc3VlZCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1ODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X3N0YXR1c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9wcm9qZWN0X3N0YXR1czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1ODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU5MAogICAgLy8gaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMCk6CiAgICBibnogZ2V0X3Byb2plY3Rfc3RhdHVzX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTkxCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5wMF9zdGF0dXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAicDBfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX3N0YXR1cyBleGlzdHMKICAgIGl0b2IKCmdldF9wcm9qZWN0X3N0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X3N0YXR1c0AxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1ODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Byb2plY3Rfc3RhdHVzX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU5MgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgxKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9zdGF0dXNfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1OTMKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnAxX3N0YXR1cykKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJwMV9zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDFfc3RhdHVzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X3N0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X3N0YXR1c0AxMgoKZ2V0X3Byb2plY3Rfc3RhdHVzX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU5NAogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgyKToKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9zdGF0dXNfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1OTUKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnAyX3N0YXR1cykKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJwMl9zdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDJfc3RhdHVzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X3N0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X3N0YXR1c0AxMgoKZ2V0X3Byb2plY3Rfc3RhdHVzX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU5NgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgzKToKICAgIGR1cAogICAgcHVzaGludCAzCiAgICA9PQogICAgYnogZ2V0X3Byb2plY3Rfc3RhdHVzX2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTk3CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5wM19zdGF0dXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicDNfc3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX3N0YXR1cyBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1ODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9zdGF0dXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9zdGF0dXNAMTIKCmdldF9wcm9qZWN0X3N0YXR1c19lbHNlX2JvZHlAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo1OTgKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoNCk6CiAgICBkdXAKICAgIGludGNfMyAvLyA0CiAgICA9PQogICAgYnogZ2V0X3Byb2plY3Rfc3RhdHVzX2Vsc2VfYm9keUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU5OQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYucDRfc3RhdHVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gInA0X3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9zdGF0dXMgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3Rfc3RhdHVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3Rfc3RhdHVzQDEyCgpnZXRfcHJvamVjdF9zdGF0dXNfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYwMQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYucDVfc3RhdHVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gInA1X3N0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNV9zdGF0dXMgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3Rfc3RhdHVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3Rfc3RhdHVzQDEyCgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY2lkW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Byb2plY3RfY2lkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjA1CiAgICAvLyBpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgwKToKICAgIGJueiBnZXRfcHJvamVjdF9jaWRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MDYKICAgIC8vIHJldHVybiBzZWxmLnAwX2NpZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQyIC8vICJwMF9jaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDBfY2lkIGV4aXN0cwoKZ2V0X3Byb2plY3RfY2lkX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY2lkQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfcHJvamVjdF9jaWRfZWxzZV9ib2R5QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjA3CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDEpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X2NpZF9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYwOAogICAgLy8gcmV0dXJuIHNlbGYucDFfY2lkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDYgLy8gInAxX2NpZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMV9jaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfY2lkX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY2lkQDEyCgpnZXRfcHJvamVjdF9jaWRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjA5CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDIpOgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X2NpZF9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYxMAogICAgLy8gcmV0dXJuIHNlbGYucDJfY2lkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNTAgLy8gInAyX2NpZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9jaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfY2lkX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY2lkQDEyCgpnZXRfcHJvamVjdF9jaWRfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjExCiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDMpOgogICAgZHVwCiAgICBwdXNoaW50IDMKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9jaWRfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MTIKICAgIC8vIHJldHVybiBzZWxmLnAzX2NpZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDU0IC8vICJwM19jaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDNfY2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X2NpZF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2NpZEAxMgoKZ2V0X3Byb2plY3RfY2lkX2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYxMwogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCg0KToKICAgIGR1cAogICAgaW50Y18zIC8vIDQKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9jaWRfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjE0CiAgICAvLyByZXR1cm4gc2VsZi5wNF9jaWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1OCAvLyAicDRfY2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnA0X2NpZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9jaWRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9jaWRAMTIKCmdldF9wcm9qZWN0X2NpZF9lbHNlX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjE2CiAgICAvLyByZXR1cm4gc2VsZi5wNV9jaWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2MiAvLyAicDVfY2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnA1X2NpZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9jaWRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9jaWRAMTIKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9uYW1lW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Byb2plY3RfbmFtZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyMAogICAgLy8gaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMCk6CiAgICBibnogZ2V0X3Byb2plY3RfbmFtZV9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyMQogICAgLy8gcmV0dXJuIHNlbGYucDBfbmFtZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQzIC8vICJwMF9uYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX25hbWUgZXhpc3RzCgpnZXRfcHJvamVjdF9uYW1lX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfbmFtZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Byb2plY3RfbmFtZV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MjIKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogZ2V0X3Byb2plY3RfbmFtZV9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyMwogICAgLy8gcmV0dXJuIHNlbGYucDFfbmFtZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQ3IC8vICJwMV9uYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAxX25hbWUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfbmFtZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X25hbWVAMTIKCmdldF9wcm9qZWN0X25hbWVfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjI0CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDIpOgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X25hbWVfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MjUKICAgIC8vIHJldHVybiBzZWxmLnAyX25hbWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1MSAvLyAicDJfbmFtZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9uYW1lIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X25hbWVfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9uYW1lQDEyCgpnZXRfcHJvamVjdF9uYW1lX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyNgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgzKToKICAgIGR1cAogICAgcHVzaGludCAzCiAgICA9PQogICAgYnogZ2V0X3Byb2plY3RfbmFtZV9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYyNwogICAgLy8gcmV0dXJuIHNlbGYucDNfbmFtZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDU1IC8vICJwM19uYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX25hbWUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfbmFtZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X25hbWVAMTIKCmdldF9wcm9qZWN0X25hbWVfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjI4CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDQpOgogICAgZHVwCiAgICBpbnRjXzMgLy8gNAogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X25hbWVfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjI5CiAgICAvLyByZXR1cm4gc2VsZi5wNF9uYW1lCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNTkgLy8gInA0X25hbWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDRfbmFtZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9uYW1lX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfbmFtZUAxMgoKZ2V0X3Byb2plY3RfbmFtZV9lbHNlX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjMxCiAgICAvLyByZXR1cm4gc2VsZi5wNV9uYW1lCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNjMgLy8gInA1X25hbWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfbmFtZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9uYW1lX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfbmFtZUAxMgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2xvY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Byb2plY3RfbG9jYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MzUKICAgIC8vIGlmIHByb2plY3RfaWQgPT0gVUludDY0KDApOgogICAgYm56IGdldF9wcm9qZWN0X2xvY2F0aW9uX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjM2CiAgICAvLyByZXR1cm4gc2VsZi5wMF9sb2NhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQ0IC8vICJwMF9sb2NhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMF9sb2NhdGlvbiBleGlzdHMKCmdldF9wcm9qZWN0X2xvY2F0aW9uX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfbG9jYXRpb25AMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wcm9qZWN0X2xvY2F0aW9uX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYzNwogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgxKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9sb2NhdGlvbl9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYzOAogICAgLy8gcmV0dXJuIHNlbGYucDFfbG9jYXRpb24KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0OCAvLyAicDFfbG9jYXRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDFfbG9jYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfbG9jYXRpb25fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9sb2NhdGlvbkAxMgoKZ2V0X3Byb2plY3RfbG9jYXRpb25fZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjM5CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDIpOgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X2xvY2F0aW9uX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQwCiAgICAvLyByZXR1cm4gc2VsZi5wMl9sb2NhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUyIC8vICJwMl9sb2NhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMl9sb2NhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9sb2NhdGlvbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2xvY2F0aW9uQDEyCgpnZXRfcHJvamVjdF9sb2NhdGlvbl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NDEKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X2xvY2F0aW9uX2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQyCiAgICAvLyByZXR1cm4gc2VsZi5wM19sb2NhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDU2IC8vICJwM19sb2NhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wM19sb2NhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9sb2NhdGlvbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2xvY2F0aW9uQDEyCgpnZXRfcHJvamVjdF9sb2NhdGlvbl9lbHNlX2JvZHlAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NDMKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoNCk6CiAgICBkdXAKICAgIGludGNfMyAvLyA0CiAgICA9PQogICAgYnogZ2V0X3Byb2plY3RfbG9jYXRpb25fZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQ0CiAgICAvLyByZXR1cm4gc2VsZi5wNF9sb2NhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYwIC8vICJwNF9sb2NhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9sb2NhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9sb2NhdGlvbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2xvY2F0aW9uQDEyCgpnZXRfcHJvamVjdF9sb2NhdGlvbl9lbHNlX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQ2CiAgICAvLyByZXR1cm4gc2VsZi5wNV9sb2NhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDY0IC8vICJwNV9sb2NhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNV9sb2NhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9sb2NhdGlvbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2xvY2F0aW9uQDEyCgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY3JlZGl0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9wcm9qZWN0X2NyZWRpdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTAKICAgIC8vIGlmIHByb2plY3RfaWQgPT0gVUludDY0KDApOgogICAgYm56IGdldF9wcm9qZWN0X2NyZWRpdHNfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTEKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnAwX2NyZWRpdHMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gInAwX2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDBfY3JlZGl0cyBleGlzdHMKICAgIGl0b2IKCmdldF9wcm9qZWN0X2NyZWRpdHNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9jcmVkaXRzQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfcHJvamVjdF9jcmVkaXRzX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1MgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgxKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9jcmVkaXRzX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjUzCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5wMV9jcmVkaXRzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJwMV9jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAxX2NyZWRpdHMgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfY3JlZGl0c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2NyZWRpdHNAMTIKCmdldF9wcm9qZWN0X2NyZWRpdHNfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjU0CiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDIpOgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X2NyZWRpdHNfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTUKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnAyX2NyZWRpdHMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTMgLy8gInAyX2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDJfY3JlZGl0cyBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9jcmVkaXRzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY3JlZGl0c0AxMgoKZ2V0X3Byb2plY3RfY3JlZGl0c19lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTYKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X2NyZWRpdHNfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTcKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnAzX2NyZWRpdHMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gInAzX2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDNfY3JlZGl0cyBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9jcmVkaXRzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY3JlZGl0c0AxMgoKZ2V0X3Byb2plY3RfY3JlZGl0c19lbHNlX2JvZHlAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTgKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoNCk6CiAgICBkdXAKICAgIGludGNfMyAvLyA0CiAgICA9PQogICAgYnogZ2V0X3Byb2plY3RfY3JlZGl0c19lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NTkKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLnA0X2NyZWRpdHMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gInA0X2NyZWRpdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDRfY3JlZGl0cyBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9jcmVkaXRzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfY3JlZGl0c0AxMgoKZ2V0X3Byb2plY3RfY3JlZGl0c19lbHNlX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjYxCiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5wNV9jcmVkaXRzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE2IC8vICJwNV9jcmVkaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnA1X2NyZWRpdHMgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfY3JlZGl0c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2NyZWRpdHNAMTIKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9zdWJtaXR0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcHJvamVjdF9zdWJtaXR0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NjUKICAgIC8vIGlmIHByb2plY3RfaWQgPT0gVUludDY0KDApOgogICAgYm56IGdldF9wcm9qZWN0X3N1Ym1pdHRlcl9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2NgogICAgLy8gcmV0dXJuIHNlbGYucDBfc3VibWl0dGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzIgLy8gInAwX3N1Ym1pdHRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wMF9zdWJtaXR0ZXIgZXhpc3RzCgpnZXRfcHJvamVjdF9zdWJtaXR0ZXJfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9zdWJtaXR0ZXJAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wcm9qZWN0X3N1Ym1pdHRlcl9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NjcKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogZ2V0X3Byb2plY3Rfc3VibWl0dGVyX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjY4CiAgICAvLyByZXR1cm4gc2VsZi5wMV9zdWJtaXR0ZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzMyAvLyAicDFfc3VibWl0dGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAxX3N1Ym1pdHRlciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9zdWJtaXR0ZXJfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9zdWJtaXR0ZXJAMTIKCmdldF9wcm9qZWN0X3N1Ym1pdHRlcl9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NjkKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMik6CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogZ2V0X3Byb2plY3Rfc3VibWl0dGVyX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjcwCiAgICAvLyByZXR1cm4gc2VsZi5wMl9zdWJtaXR0ZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzNCAvLyAicDJfc3VibWl0dGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAyX3N1Ym1pdHRlciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9zdWJtaXR0ZXJfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9zdWJtaXR0ZXJAMTIKCmdldF9wcm9qZWN0X3N1Ym1pdHRlcl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NzEKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X3N1Ym1pdHRlcl9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3MgogICAgLy8gcmV0dXJuIHNlbGYucDNfc3VibWl0dGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzUgLy8gInAzX3N1Ym1pdHRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wM19zdWJtaXR0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3Rfc3VibWl0dGVyX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3Rfc3VibWl0dGVyQDEyCgpnZXRfcHJvamVjdF9zdWJtaXR0ZXJfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjczCiAgICAvLyBlbGlmIHByb2plY3RfaWQgPT0gVUludDY0KDQpOgogICAgZHVwCiAgICBpbnRjXzMgLy8gNAogICAgPT0KICAgIGJ6IGdldF9wcm9qZWN0X3N1Ym1pdHRlcl9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NzQKICAgIC8vIHJldHVybiBzZWxmLnA0X3N1Ym1pdHRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM2IC8vICJwNF9zdWJtaXR0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDRfc3VibWl0dGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X3N1Ym1pdHRlcl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X3N1Ym1pdHRlckAxMgoKZ2V0X3Byb2plY3Rfc3VibWl0dGVyX2Vsc2VfYm9keUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NzYKICAgIC8vIHJldHVybiBzZWxmLnA1X3N1Ym1pdHRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM3IC8vICJwNV9zdWJtaXR0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDVfc3VibWl0dGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X3N1Ym1pdHRlcl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X3N1Ym1pdHRlckAxMgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2Vjb3N5c3RlbVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9wcm9qZWN0X2Vjb3N5c3RlbToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4MAogICAgLy8gaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoMCk6CiAgICBibnogZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NjgxCiAgICAvLyByZXR1cm4gc2VsZi5wMF9lY29zeXN0ZW0KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0NSAvLyAicDBfZWNvc3lzdGVtIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAwX2Vjb3N5c3RlbSBleGlzdHMKCmdldF9wcm9qZWN0X2Vjb3N5c3RlbV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2Vjb3N5c3RlbUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4MgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgxKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9lY29zeXN0ZW1fZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2ODMKICAgIC8vIHJldHVybiBzZWxmLnAxX2Vjb3N5c3RlbQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQ5IC8vICJwMV9lY29zeXN0ZW0iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDFfZWNvc3lzdGVtIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X2Vjb3N5c3RlbV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2Vjb3N5c3RlbUAxMgoKZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4NAogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgyKToKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBnZXRfcHJvamVjdF9lY29zeXN0ZW1fZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2ODUKICAgIC8vIHJldHVybiBzZWxmLnAyX2Vjb3N5c3RlbQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUzIC8vICJwMl9lY29zeXN0ZW0iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucDJfZWNvc3lzdGVtIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wcm9qZWN0X2Vjb3N5c3RlbV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9wcm9qZWN0X2Vjb3N5c3RlbUAxMgoKZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4NgogICAgLy8gZWxpZiBwcm9qZWN0X2lkID09IFVJbnQ2NCgzKToKICAgIGR1cAogICAgcHVzaGludCAzCiAgICA9PQogICAgYnogZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Njg3CiAgICAvLyByZXR1cm4gc2VsZi5wM19lY29zeXN0ZW0KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1NyAvLyAicDNfZWNvc3lzdGVtIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnAzX2Vjb3N5c3RlbSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2NzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfcHJvamVjdF9lY29zeXN0ZW1fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfcHJvamVjdF9lY29zeXN0ZW1AMTIKCmdldF9wcm9qZWN0X2Vjb3N5c3RlbV9lbHNlX2JvZHlAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2ODgKICAgIC8vIGVsaWYgcHJvamVjdF9pZCA9PSBVSW50NjQoNCk6CiAgICBkdXAKICAgIGludGNfMyAvLyA0CiAgICA9PQogICAgYnogZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2Vsc2VfYm9keUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4OQogICAgLy8gcmV0dXJuIHNlbGYucDRfZWNvc3lzdGVtCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNjEgLy8gInA0X2Vjb3N5c3RlbSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNF9lY29zeXN0ZW0gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Njc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfZWNvc3lzdGVtQDEyCgpnZXRfcHJvamVjdF9lY29zeXN0ZW1fZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY5MQogICAgLy8gcmV0dXJuIHNlbGYucDVfZWNvc3lzdGVtCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNjUgLy8gInA1X2Vjb3N5c3RlbSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wNV9lY29zeXN0ZW0gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Njc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3Byb2plY3RfZWNvc3lzdGVtX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X3Byb2plY3RfZWNvc3lzdGVtQDEyCgoKLy8gc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfY291bnRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfbGlzdGluZ19jb3VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2OTcKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmxpc3RpbmdfY291bnQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gImxpc3RpbmdfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ19jb3VudCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2OTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9saXN0aW5nX3NlbGxlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9saXN0aW5nX3NlbGxlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2OTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcwMQogICAgLy8gaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMCk6CiAgICBibnogZ2V0X2xpc3Rpbmdfc2VsbGVyX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzAyCiAgICAvLyByZXR1cm4gc2VsZi5sMF9zZWxsZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAibDBfc2VsbGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwwX3NlbGxlciBleGlzdHMKCmdldF9saXN0aW5nX3NlbGxlcl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9saXN0aW5nX3NlbGxlckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfbGlzdGluZ19zZWxsZXJfZWxzZV9ib2R5QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzAzCiAgICAvLyBlbGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDEpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IGdldF9saXN0aW5nX3NlbGxlcl9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcwNAogICAgLy8gcmV0dXJuIHNlbGYubDFfc2VsbGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gImwxX3NlbGxlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMV9zZWxsZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Njk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3Rpbmdfc2VsbGVyX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3Rpbmdfc2VsbGVyQDgKCmdldF9saXN0aW5nX3NlbGxlcl9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MDUKICAgIC8vIGVsaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMik6CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogZ2V0X2xpc3Rpbmdfc2VsbGVyX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzA2CiAgICAvLyByZXR1cm4gc2VsZi5sMl9zZWxsZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNyAvLyAibDJfc2VsbGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwyX3NlbGxlciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo2OTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfbGlzdGluZ19zZWxsZXJfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfbGlzdGluZ19zZWxsZXJAOAoKZ2V0X2xpc3Rpbmdfc2VsbGVyX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcwOAogICAgLy8gcmV0dXJuIHNlbGYubDNfc2VsbGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImwzX3NlbGxlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sM19zZWxsZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6Njk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3Rpbmdfc2VsbGVyX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3Rpbmdfc2VsbGVyQDgKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfbGlzdGluZ19hbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfbGlzdGluZ19hbW91bnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MTIKICAgIC8vIGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDApOgogICAgYm56IGdldF9saXN0aW5nX2Ftb3VudF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcxMwogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYubDBfYW1vdW50KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vICJsMF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDBfYW1vdW50IGV4aXN0cwogICAgaXRvYgoKZ2V0X2xpc3RpbmdfYW1vdW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfYW1vdW50QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9saXN0aW5nX2Ftb3VudF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MTQKICAgIC8vIGVsaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogZ2V0X2xpc3RpbmdfYW1vdW50X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzE1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5sMV9hbW91bnQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjYgLy8gImwxX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMV9hbW91bnQgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3RpbmdfYW1vdW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfYW1vdW50QDgKCmdldF9saXN0aW5nX2Ftb3VudF9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MTYKICAgIC8vIGVsaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMik6CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogZ2V0X2xpc3RpbmdfYW1vdW50X2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzE3CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5sMl9hbW91bnQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjggLy8gImwyX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMl9hbW91bnQgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3RpbmdfYW1vdW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfYW1vdW50QDgKCmdldF9saXN0aW5nX2Ftb3VudF9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MTkKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmwzX2Ftb3VudCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzMCAvLyAibDNfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwzX2Ftb3VudCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfbGlzdGluZ19hbW91bnRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfbGlzdGluZ19hbW91bnRAOAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9saXN0aW5nX3ByaWNlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2xpc3RpbmdfcHJpY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MjMKICAgIC8vIGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDApOgogICAgYm56IGdldF9saXN0aW5nX3ByaWNlX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzI0CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5sMF9wcmljZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzOCAvLyAibDBfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDBfcHJpY2UgZXhpc3RzCiAgICBpdG9iCgpnZXRfbGlzdGluZ19wcmljZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9saXN0aW5nX3ByaWNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9saXN0aW5nX3ByaWNlX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyNQogICAgLy8gZWxpZiBsaXN0aW5nX2lkID09IFVJbnQ2NCgxKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBnZXRfbGlzdGluZ19wcmljZV9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyNgogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYubDFfcHJpY2UpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzkgLy8gImwxX3ByaWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwxX3ByaWNlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9saXN0aW5nX3ByaWNlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfcHJpY2VAOAoKZ2V0X2xpc3RpbmdfcHJpY2VfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzI3CiAgICAvLyBlbGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDIpOgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGdldF9saXN0aW5nX3ByaWNlX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzI4CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5sMl9wcmljZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0MCAvLyAibDJfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDJfcHJpY2UgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3RpbmdfcHJpY2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfbGlzdGluZ19wcmljZUA4CgpnZXRfbGlzdGluZ19wcmljZV9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MzAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmwzX3ByaWNlKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQxIC8vICJsM19wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sM19wcmljZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfbGlzdGluZ19wcmljZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5LmdldF9saXN0aW5nX3ByaWNlQDgKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfbGlzdGluZ19hY3RpdmVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfbGlzdGluZ19hY3RpdmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MzQKICAgIC8vIGlmIGxpc3RpbmdfaWQgPT0gVUludDY0KDApOgogICAgYm56IGdldF9saXN0aW5nX2FjdGl2ZV9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fhcm5hX3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjczNQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYubDBfYWN0aXZlKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE3IC8vICJsMF9hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubDBfYWN0aXZlIGV4aXN0cwogICAgaXRvYgoKZ2V0X2xpc3RpbmdfYWN0aXZlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfYWN0aXZlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9saXN0aW5nX2FjdGl2ZV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MzYKICAgIC8vIGVsaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMSk6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogZ2V0X2xpc3RpbmdfYWN0aXZlX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzM3CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5sMV9hY3RpdmUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gImwxX2FjdGl2ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMV9hY3RpdmUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3RpbmdfYWN0aXZlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfYWN0aXZlQDgKCmdldF9saXN0aW5nX2FjdGl2ZV9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MzgKICAgIC8vIGVsaWYgbGlzdGluZ19pZCA9PSBVSW50NjQoMik6CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogZ2V0X2xpc3RpbmdfYWN0aXZlX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzM5CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoc2VsZi5sMl9hY3RpdmUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTkgLy8gImwyX2FjdGl2ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sMl9hY3RpdmUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6NzMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X2xpc3RpbmdfYWN0aXZlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFhcm5hX3JlZ2lzdHJ5LmNvbnRyYWN0LkFhcm5hUmVnaXN0cnkuZ2V0X2xpc3RpbmdfYWN0aXZlQDgKCmdldF9saXN0aW5nX2FjdGl2ZV9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3NDEKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChzZWxmLmwzX2FjdGl2ZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAibDNfYWN0aXZlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmwzX2FjdGl2ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYXJuYV9yZWdpc3RyeS9jb250cmFjdC5weTo3MzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfbGlzdGluZ19hY3RpdmVfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5nZXRfbGlzdGluZ19hY3RpdmVAOAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hYXJuYV9yZWdpc3RyeS5jb250cmFjdC5BYXJuYVJlZ2lzdHJ5Ll9vbmx5X2FkbWluKCkgLT4gdm9pZDoKX29ubHlfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ3CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluLCAidW5hdXRob3JpemVkOiBhZG1pbiBvbmx5IgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gdW5hdXRob3JpemVkOiBhZG1pbiBvbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYWFybmFfcmVnaXN0cnkuY29udHJhY3QuQWFybmFSZWdpc3RyeS5fb25seV92YWxpZGF0b3IoKSAtPiB2b2lkOgpfb25seV92YWxpZGF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWFybmFfcmVnaXN0cnkvY29udHJhY3QucHk6MTUxCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLnZhbGlkYXRvciwgInVuYXV0aG9yaXplZDogdmFsaWRhdG9yIG9ubHkiCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzEgLy8gInZhbGlkYXRvciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52YWxpZGF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIHVuYXV0aG9yaXplZDogdmFsaWRhdG9yIG9ubHkKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECBCZCAgAAC2Fhcm5hX2Fzc2V0BBUffHUUdG90YWxfY3JlZGl0c19pc3N1ZWQJcDBfc3RhdHVzCXAxX3N0YXR1cwlwMl9zdGF0dXMJcDNfc3RhdHVzCXA0X3N0YXR1cwlwNV9zdGF0dXMNcHJvamVjdF9jb3VudApwMF9jcmVkaXRzCnAxX2NyZWRpdHMKcDJfY3JlZGl0cwpwM19jcmVkaXRzCnA0X2NyZWRpdHMKcDVfY3JlZGl0cwlsMF9hY3RpdmUJbDFfYWN0aXZlCWwyX2FjdGl2ZQlsM19hY3RpdmUNbGlzdGluZ19jb3VudAVhZG1pbglsMF9zZWxsZXIJbDBfYW1vdW50CWwxX3NlbGxlcglsMV9hbW91bnQJbDJfc2VsbGVyCWwyX2Ftb3VudAlsM19zZWxsZXIJbDNfYW1vdW50CXZhbGlkYXRvcgxwMF9zdWJtaXR0ZXIMcDFfc3VibWl0dGVyDHAyX3N1Ym1pdHRlcgxwM19zdWJtaXR0ZXIMcDRfc3VibWl0dGVyDHA1X3N1Ym1pdHRlcghsMF9wcmljZQhsMV9wcmljZQhsMl9wcmljZQhsM19wcmljZQZwMF9jaWQHcDBfbmFtZQtwMF9sb2NhdGlvbgxwMF9lY29zeXN0ZW0GcDFfY2lkB3AxX25hbWULcDFfbG9jYXRpb24McDFfZWNvc3lzdGVtBnAyX2NpZAdwMl9uYW1lC3AyX2xvY2F0aW9uDHAyX2Vjb3N5c3RlbQZwM19jaWQHcDNfbmFtZQtwM19sb2NhdGlvbgxwM19lY29zeXN0ZW0GcDRfY2lkB3A0X25hbWULcDRfbG9jYXRpb24McDRfZWNvc3lzdGVtBnA1X2NpZAdwNV9uYW1lC3A1X2xvY2F0aW9uDHA1X2Vjb3N5c3RlbTEYQAEKJxYyA2cnHzIDZykiZycKImcrImcnIDIDZycqKGcnKyhnJywoZyctKGcnBCJnJwsiZychMgNnJy4oZycvKGcnMChnJzEoZycFImcnDCJnJyIyA2cnMihnJzMoZyc0KGcnNShnJwYiZycNImcnIzIDZyc2KGcnNyhnJzgoZyc5KGcnByJnJw4iZyckMgNnJzooZyc7KGcnPChnJz0oZycIImcnDyJnJyUyA2cnPihnJz8oZydAKGcnQShnJwkiZycQImcnFSJnJxcyA2cnGCJnJyYiZycRImcnGTIDZycaImcnJyJnJxIiZycbMgNnJxwiZycoImcnEyJnJx0yA2cnHiJnJykiZycUImcxGRREMRhBAMWCGwTxJtBLBNNI+7MECPt7fASiGoB3BGZF8vkEIZeZQwRiYpBlBCJvojcEBQD8qQRj1VtsBDBedb0EW6IqhAQ0az28BPOOaUEEXxzS3ASLo5JZBCL5irYEI1IxFwRIybdbBHthPioE+9cJ5wRKISe2BB3rpOkErHfcZARQjXbZBFd+FJoEZStR1DYaAI4bABYAKAA/AK8B+QK1A0cE9gW4B0EIKwg3CEIITQhYCGMIwwkdCXcJ0QoxCosK5QrxCy4LbwuwAIAEg/FHSDYaAI4BAAEAJxYxAGcjQzYaAUkVgSASRIgLzycfTGcjQzYaAUkVgSASRIgLvUkyAxNEJxZMZyNDiAuvIillREAAW7EyCkcDsiyyK7IqsimAEWh0dHBzOi8vYWFybmEuZWNvsieAE0Fhcm5hIENhcmJvbiBDcmVkaXSyJoAFQUFSTkGyJSKyJCKyI4GAreIEsiKBA7IQIrIBsym0PGciKWVEFipMULAjQzYaAUcCIlkkCEwVEkQ2GgJHAiJZJAhMFRJENhoDRwIiWSQITBUSRDYaBEcCIlkkCEwVEkQiJwplTElPAkRJgQYMRDEATEAAMScgSwFnJytLBmcnLEsFZyctSwRnJypLA2cnBCNnJwsiZ0sBSSMIJwpMZxYqTFCwI0NLASMSQQAkJyFLAWcnL0sGZycwSwVnJzFLBGcnLksDZycFI2cnDCJnQv/FSwEkEkEAJCciSwFnJzNLBmcnNEsFZyc1SwRnJzJLA2cnBiNnJw0iZ0L/mksBgQMSQQAkJyNLAWcnN0sGZyc4SwVnJzlLBGcnNksDZycHI2cnDiJnQv9uSwElEkEAJCckSwFnJztLBmcnPEsFZyc9SwRnJzpLA2cnCCNnJw8iZ0L/QyclSwFnJz9LBmcnQEsFZydBSwRnJz5LA2cnCSNnJxAiZ0L/HzYaAUkVgQgSRBdJNhoCSRWBCBJEF0lOAogJ5yInCmVESwINRERAABMiJwRlRCMSRCcEJGcnC0sBZyNDSwEjEkEAFCInBWVEIxJEJwUkZycMSwFnQv/jSwEkEkEAFCInBmVEIxJEJwYkZycNSwFnQv/ISwGBAxJBABQiJwdlRCMSRCcHJGcnDksBZ0L/rEsBJRJBABQiJwhlRCMSRCcIJGcnD0sBZ0L/kSInCWVEIxJEJwkkZycQSwFnQv99NhoBSRWBCBJEF0mICTgiJwplREsBDURAAA8iJwRlRCMSRCcEgQNnI0NJIxJBABAiJwVlRCMSRCcFgQNnQv/oSSQSQQAQIicGZUQjEkQnBoEDZ0L/0kmBAxJBABAiJwdlRCMSRCcHgQNnQv+7SSUSQQAQIicIZUQjEkQnCIEDZ0L/pSInCWVEIxJEJwmBA2dC/5U2GgFJFYEIEkQXSYgIpiIpZUREIicKZURLAQ1EQABBIicEZUQkEkSxIillRCInIGVEIicLZUSyErIUshElshAisgGzJwQlZyIrZUQiJwtlRAgrTGciJwtlRBYqTFCwI0NJIxJBAD4iJwVlRCQSRLEiKWVEIichZUQiJwxlRLISshSyESWyECKyAbMnBSVnIitlRCInDGVECCtMZyInDGVEFkL/tkkkEkEAPiInBmVEJBJEsSIpZUQiJyJlRCInDWVEshKyFLIRJbIQIrIBsycGJWciK2VEIicNZUQIK0xnIicNZUQWQv9ySYEDEkEAPiInB2VEJBJEsSIpZUQiJyNlRCInDmVEshKyFLIRJbIQIrIBsycHJWciK2VEIicOZUQIK0xnIicOZUQWQv8tSSUSQQA+IicIZUQkEkSxIillRCInJGVEIicPZUSyErIUshElshAisgGzJwglZyIrZUQiJw9lRAgrTGciJw9lRBZC/ukiJwllRCQSRLEiKWVEIiclZUQiJxBlRLISshSyESWyECKyAbMnCSVnIitlRCInEGVECCtMZyInEGVEFkL+qzYaAUkVgQgSRBdJNhoCSRWBCBJEF0lOAiIpZURJREsCRExEIicVZUxJTgJOBERJJQxEsTEAMgpPBLISshSyE0yyESWyECKyAbMxAExAACMnF0sBZycYSwRnJyZLA2cnESNnSwFJIwgnFUxnFipMULAjQ0sBIxJBABYnGUsBZycaSwRnJydLA2cnEiNnQv/TSwEkEkEAFicbSwFnJxxLBGcnKEsDZycTI2dC/7YnHUsBZyceSwRnJylLA2cnFCNnQv+gNhoBSRWBCBJEF0kxFiMJSU4COBAjEkQiKWVERCInFWVESwENREAAVCInEWVEIxJEIicYZUQiJyZlREsBC0sCSU4COAhLAQ9ETDgHMgoSRLEiKWVEMQBPA7ISshSyESWyECKyAbOxIicXZUSyB7III7IQIrIBsycRImcjQ0sBIxJBAFUiJxJlRCMSRCInGmVEIicnZURLAQtLAklOAjgISwEPREw4BzIKEkSxIillRDEATwOyErIUshElshAisgGzsSInGWVEsgeyCCOyECKyAbMnEiJnQv+iSwEkEkEAVSInE2VEIxJEIiccZUQiJyhlREsBC0sCSU4COAhLAQ9ETDgHMgoSRLEiKWVEMQBPA7ISshSyESWyECKyAbOxIicbZUSyB7III7IQIrIBsycTImdC/0YiJxRlRCMSRCInHmVEIicpZURLAQtLAklOAjgISwEPREw4BzIKEkSxIillRDEATwOyErIUshElshAisgGzsSInHWVEsgeyCCOyECKyAbMnFCJnQv7xNhoBSRWBCBJEF0kiJxVlREsBDURAADEiJxFlRCMSRDEAIicXZURMSwESRLEiKWVEIicYZUSyErIRshQlshAisgGzJxEiZyNDSSMSQQAyIicSZUQjEkQxACInGWVETEsBEkSxIillRCInGmVEshKyEbIUJbIQIrIBsycSImdC/8ZJJBJBADIiJxNlRCMSRDEAIicbZURMSwESRLEiKWVEIiccZUSyErIRshQlshAisgGzJxMiZ0L/jiInFGVEIxJEMQAiJx1lRExLARJEsSIpZUQiJx5lRLISshGyFCWyECKyAbMnFCJnQv9cIicKZUQWKkxQsCNDIillRBYqTFCwI0MiJxZlRCpMULAjQyInH2VEKkxQsCNDIitlRBYqTFCwI0M2GgFJFYEIEkQXSUAADCInBGVEFipMULAjQ0kjEkEACSInBWVEFkL/60kkEkEACSInBmVEFkL/3EmBAxJBAAkiJwdlRBZC/8xJJRJBAAkiJwhlRBZC/70iJwllRBZC/7Q2GgFJFYEIEkQXSUAACyInKmVEKkxQsCNDSSMSQQAIIicuZURC/+xJJBJBAAgiJzJlREL/3kmBAxJBAAgiJzZlREL/z0klEkEACCInOmVEQv/BIic+ZURC/7k2GgFJFYEIEkQXSUAACyInK2VEKkxQsCNDSSMSQQAIIicvZURC/+xJJBJBAAgiJzNlREL/3kmBAxJBAAgiJzdlREL/z0klEkEACCInO2VEQv/BIic/ZURC/7k2GgFJFYEIEkQXSUAACyInLGVEKkxQsCNDSSMSQQAIIicwZURC/+xJJBJBAAgiJzRlREL/3kmBAxJBAAgiJzhlREL/z0klEkEACCInPGVEQv/BIidAZURC/7k2GgFJFYEIEkQXSUAADCInC2VEFipMULAjQ0kjEkEACSInDGVEFkL/60kkEkEACSInDWVEFkL/3EmBAxJBAAkiJw5lRBZC/8xJJRJBAAkiJw9lRBZC/70iJxBlRBZC/7Q2GgFJFYEIEkQXSUAACyInIGVEKkxQsCNDSSMSQQAIIichZURC/+xJJBJBAAgiJyJlREL/3kmBAxJBAAgiJyNlREL/z0klEkEACCInJGVEQv/BIiclZURC/7k2GgFJFYEIEkQXSUAACyInLWVEKkxQsCNDSSMSQQAIIicxZURC/+xJJBJBAAgiJzVlREL/3kmBAxJBAAgiJzllREL/z0klEkEACCInPWVEQv/BIidBZURC/7kiJxVlRBYqTFCwI0M2GgFJFYEIEkQXSUAACyInF2VEKkxQsCNDSSMSQQAIIicZZURC/+xJJBJBAAgiJxtlREL/3iInHWVEQv/WNhoBSRWBCBJEF0lAAAwiJxhlRBYqTFCwI0NJIxJBAAkiJxplRBZC/+tJJBJBAAkiJxxlRBZC/9wiJx5lRBZC/9M2GgFJFYEIEkQXSUAADCInJmVEFipMULAjQ0kjEkEACSInJ2VEFkL/60kkEkEACSInKGVEFkL/3CInKWVEFkL/0zYaAUkVgQgSRBdJQAAMIicRZUQWKkxQsCNDSSMSQQAJIicSZUQWQv/rSSQSQQAJIicTZUQWQv/cIicUZUQWQv/TMQAiJxZlRBJEiTEAIicfZUQSRIk=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }