{ "name": "DigitalMarketplaceWithStruct", "structs": { "ListingKey": [ { "name": "owner", "type": "address" }, { "name": "asset", "type": "uint64" }, { "name": "nonce", "type": "uint64" } ], "ListingValue": [ { "name": "deposited", "type": "uint64" }, { "name": "unitaryPrice", "type": "uint64" }, { "name": "bidder", "type": "address" }, { "name": "bid", "type": "uint64" }, { "name": "bidUnitaryPrice", "type": "uint64" } ] }, "methods": [ { "name": "getListingsMbr", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "allowAsset", "args": [ { "type": "pay", "name": "mbr_pay" }, { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "firstDeposit", "args": [ { "type": "pay", "name": "mbr_pay" }, { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "unitary_price" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setPrice", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "uint64", "name": "unitary_price" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "buy", "args": [ { "type": "address", "name": "owner" }, { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "pay", "name": "buy_pay" }, { "type": "uint64", "name": "quantity" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "bid", "args": [ { "type": "address", "name": "owner" }, { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "pay", "name": "bid_pay" }, { "type": "uint64", "name": "quantity" }, { "type": "uint64", "name": "unitary_price" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "acceptBid", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "listings": { "keyType": "ListingKey", "valueType": "ListingValue", "prefix": "bGlzdGluZ3M=" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 573, 728, 914, 947, 1099 ], "errorMessage": "asset exists" }, { "pc": [ 387, 469, 565, 702, 882, 1055 ], "errorMessage": "check self.listings entry exists" }, { "pc": [ 511, 806 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 158, 232, 241, 347, 434, 443, 452, 519, 528, 547, 672, 682, 814, 826, 847, 858, 1023, 1033 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 224, 339 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 150, 214, 539, 839 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDggMCA0IDUwNTAwCiAgICBieXRlY2Jsb2NrIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjM5CiAgICAvLyBsb2coImluaXQiKQogICAgcHVzaGJ5dGVzICJpbml0IgogICAgbG9nCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weTozNwogICAgLy8gY2xhc3MgRGlnaXRhbE1hcmtldHBsYWNlV2l0aFN0cnVjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxOAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZDk4ZWY2YTkgMHg2YTRlN2ZjYSAweDEyZjA4Yzk4IDB4OWI0YjgyMzQgMHg0ZDhiMjNkOCAweDUyYWM1ZGY3IDB4ZTNhZWIyNWMgMHgzMjM0YjcxMSAweGNjODI2MzQ2IC8vIG1ldGhvZCAiZ2V0TGlzdGluZ3NNYnIoKXVpbnQ2NCIsIG1ldGhvZCAiYWxsb3dBc3NldChwYXksdWludDY0KXZvaWQiLCBtZXRob2QgImZpcnN0RGVwb3NpdChwYXksYXhmZXIsdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzZXRQcmljZSh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJidXkoYWRkcmVzcyx1aW50NjQsdWludDY0LHBheSx1aW50NjQpdm9pZCIsIG1ldGhvZCAid2l0aGRyYXcodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJiaWQoYWRkcmVzcyx1aW50NjQsdWludDY0LHBheSx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFjY2VwdEJpZCh1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldExpc3RpbmdzTWJyX3JvdXRlQDYgYWxsb3dfYXNzZXQgZmlyc3RfZGVwb3NpdCBkZXBvc2l0IHNldF9wcmljZSBidXkgd2l0aGRyYXcgYmlkIGFjY2VwdF9iaWQKICAgIGVycgoKbWFpbl9nZXRMaXN0aW5nc01icl9yb3V0ZUA2OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSwgbmFtZT0iZ2V0TGlzdGluZ3NNYnIiKQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDBjNTQ0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTg6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhTdHJ1Y3QuYWxsb3dfYXNzZXRbcm91dGluZ10oKSAtPiB2b2lkOgphbGxvd19hc3NldDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weTo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9ImFsbG93QXNzZXQiKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6ODQKICAgIC8vIGFzc2VydCBub3QgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5pc19vcHRlZF9pbihhc3NldCkKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkaWcgMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojg2CiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6ODcKICAgIC8vIGFzc2VydCBtYnJfcGF5LmFtb3VudCA9PSBHbG9iYWwuYXNzZXRfb3B0X2luX21pbl9iYWxhbmNlCiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojg5LTkxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXRfYW1vdW50PTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weTo5MAogICAgLy8geGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXRfYW1vdW50PTAKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojg5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojg5LTkxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXRfYW1vdW50PTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJhbGxvd0Fzc2V0IikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5EaWdpdGFsTWFya2V0cGxhY2VXaXRoU3RydWN0LmZpcnN0X2RlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpmaXJzdF9kZXBvc2l0OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iZmlyc3REZXBvc2l0IikKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxMDEKICAgIC8vIGFzc2VydCBtYnJfcGF5LnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMwogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTAyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMwogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTAzCiAgICAvLyBhc3NlcnQgbWJyX3BheS5hbW91bnQgPT0gc2VsZi5saXN0aW5nc19ib3hfbWJyKCkKICAgIHVuY292ZXIgMwogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NDQtNjUKICAgIC8vIHJldHVybiBVSW50NjQoCiAgICAvLyAgICAgMl81MDAKICAgIC8vICAgICArCiAgICAvLyAgICAgIyBmbXQ6IG9mZgogICAgLy8gICAgICMgS2V5IGxlbmd0aAogICAgLy8gICAgICgKICAgIC8vICAgICAgICAgOAogICAgLy8gICAgICAgICArIDMyCiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICAgICAgKwogICAgLy8gICAgICAgICAjIFZhbHVlIGxlbmd0aAogICAgLy8gICAgICAgICA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDMyCiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICApCiAgICAvLyAgICAgKgogICAgLy8gICAgICMgZm10OiBvbgogICAgLy8gICAgIDQwMAogICAgLy8gKQogICAgaW50YyA0IC8vIDUwNTAwCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTAzCiAgICAvLyBhc3NlcnQgbWJyX3BheS5hbW91bnQgPT0gc2VsZi5saXN0aW5nc19ib3hfbWJyKCkKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxMDUKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9VHhuLnNlbmRlciwgYXNzZXQ9eGZlci54ZmVyX2Fzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIHR4biBTZW5kZXIKICAgIGRpZyAzCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTA2CiAgICAvLyBhc3NlcnQga2V5IG5vdCBpbiBzZWxmLmxpc3RpbmdzCiAgICBieXRlY18wIC8vIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTA4CiAgICAvLyBhc3NlcnQgeGZlci5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDIKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IHhmZXIuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDIKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTEwCiAgICAvLyBhc3NlcnQgeGZlci5hc3NldF9hbW91bnQgPiAwCiAgICB1bmNvdmVyIDIKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjExNQogICAgLy8gYmlkZGVyPUFjY291bnQoKSwKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjExMi0xMTgKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBkZXBvc2l0ZWQ9eGZlci5hc3NldF9hbW91bnQsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPXVuaXRhcnlfcHJpY2UsCiAgICAvLyAgICAgYmlkZGVyPUFjY291bnQoKSwKICAgIC8vICAgICBiaWQ9VUludDY0KCksCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPVVJbnQ2NCgpLAogICAgLy8gKQogICAgc3dhcAogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjExNgogICAgLy8gYmlkPVVJbnQ2NCgpLAogICAgaW50Y18yIC8vIDAKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxMTItMTE4CiAgICAvLyBzZWxmLmxpc3RpbmdzW2tleV0gPSBMaXN0aW5nVmFsdWUoCiAgICAvLyAgICAgZGVwb3NpdGVkPXhmZXIuYXNzZXRfYW1vdW50LAogICAgLy8gICAgIHVuaXRhcnlQcmljZT11bml0YXJ5X3ByaWNlLAogICAgLy8gICAgIGJpZGRlcj1BY2NvdW50KCksCiAgICAvLyAgICAgYmlkPVVJbnQ2NCgpLAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT1VSW50NjQoKSwKICAgIC8vICkKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iZmlyc3REZXBvc2l0IikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5EaWdpdGFsTWFya2V0cGxhY2VXaXRoU3RydWN0LmRlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpkZXBvc2l0OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTIyCiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPVR4bi5zZW5kZXIsIGFzc2V0PXhmZXIueGZlcl9hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEyNAogICAgLy8gYXNzZXJ0IHhmZXIuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxMjUKICAgIC8vIGFzc2VydCB4ZmVyLmFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGRpZyAxCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEyNgogICAgLy8gYXNzZXJ0IHhmZXIuYXNzZXRfYW1vdW50ID4gMAogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTI4CiAgICAvLyBleGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XS5jb3B5KCkgICMgb25seSBtdXRhYmxlIHN0cnVjdHMgYXJlIGNvcGllZAogICAgYnl0ZWNfMCAvLyAweDZjNjk3Mzc0Njk2ZTY3NzMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdzIGVudHJ5IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEzMAogICAgLy8gYmlkPWV4aXN0aW5nLmJpZCwKICAgIGR1cAogICAgZXh0cmFjdCA0OCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTMxCiAgICAvLyBiaWRVbml0YXJ5UHJpY2U9ZXhpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgZGlnIDEKICAgIGV4dHJhY3QgNTYgOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEzMgogICAgLy8gYmlkZGVyPWV4aXN0aW5nLmJpZGRlciwKICAgIGRpZyAyCiAgICBleHRyYWN0IDE2IDMyCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTMzCiAgICAvLyB1bml0YXJ5UHJpY2U9ZXhpc3RpbmcudW5pdGFyeVByaWNlLAogICAgZGlnIDMKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTM0CiAgICAvLyBkZXBvc2l0ZWQ9ZXhpc3RpbmcuZGVwb3NpdGVkICsgeGZlci5hc3NldF9hbW91bnQsCiAgICB1bmNvdmVyIDQKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgdW5jb3ZlciA2CiAgICArCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTI5LTEzNQogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGJpZD1leGlzdGluZy5iaWQsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWV4aXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICBiaWRkZXI9ZXhpc3RpbmcuYmlkZGVyLAogICAgLy8gICAgIHVuaXRhcnlQcmljZT1leGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgICAgZGVwb3NpdGVkPWV4aXN0aW5nLmRlcG9zaXRlZCArIHhmZXIuYXNzZXRfYW1vdW50LAogICAgLy8gKQogICAgaXRvYgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhTdHJ1Y3Quc2V0X3ByaWNlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3ByaWNlOgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjEzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9InNldFByaWNlIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxMzkKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9VHhuLnNlbmRlciwgYXNzZXQ9YXNzZXQuaWQsIG5vbmNlPW5vbmNlKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTQxCiAgICAvLyBleGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XS5jb3B5KCkKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTQzCiAgICAvLyBiaWQ9ZXhpc3RpbmcuYmlkLAogICAgZHVwCiAgICBleHRyYWN0IDQ4IDgKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxNDQKICAgIC8vIGJpZFVuaXRhcnlQcmljZT1leGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsCiAgICBkaWcgMQogICAgZXh0cmFjdCA1NiA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTQ1CiAgICAvLyBiaWRkZXI9ZXhpc3RpbmcuYmlkZGVyLAogICAgZGlnIDIKICAgIGV4dHJhY3QgMTYgMzIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxNDYKICAgIC8vIGRlcG9zaXRlZD1leGlzdGluZy5kZXBvc2l0ZWQsCiAgICB1bmNvdmVyIDMKICAgIGV4dHJhY3QgMCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTQyLTE0OAogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGJpZD1leGlzdGluZy5iaWQsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWV4aXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICBiaWRkZXI9ZXhpc3RpbmcuYmlkZGVyLAogICAgLy8gICAgIGRlcG9zaXRlZD1leGlzdGluZy5kZXBvc2l0ZWQsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPXVuaXRhcnlfcHJpY2UsCiAgICAvLyApCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0ic2V0UHJpY2UiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhTdHJ1Y3QuYnV5W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxNTkKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9b3duZXIsIGFzc2V0PWFzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIGRpZyAzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE2MQogICAgLy8gbGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XS5jb3B5KCkKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTYzCiAgICAvLyBhbW91bnRfdG9fYmVfcGFpZCA9IHNlbGYucXVhbnRpdHlfcHJpY2UocXVhbnRpdHksIGxpc3RpbmcudW5pdGFyeVByaWNlLCBhc3NldC5kZWNpbWFscykKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NjkKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgZGlnIDEKICAgIGRpZyA1CiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzEtNzMKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTY1CiAgICAvLyBhc3NlcnQgYnV5X3BheS5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDUKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE2NgogICAgLy8gYXNzZXJ0IGJ1eV9wYXkucmVjZWl2ZXIgPT0gb3duZXIKICAgIGRpZyA1CiAgICBndHhucyBSZWNlaXZlcgogICAgdW5jb3ZlciA4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTY3CiAgICAvLyBhc3NlcnQgYnV5X3BheS5hbW91bnQgPT0gYW1vdW50X3RvX2JlX3BhaWQKICAgIHVuY292ZXIgNQogICAgZ3R4bnMgQW1vdW50CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTcwCiAgICAvLyBiaWQ9bGlzdGluZy5iaWQsCiAgICBkaWcgMQogICAgZXh0cmFjdCA0OCA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTcxCiAgICAvLyBiaWRVbml0YXJ5UHJpY2U9bGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsCiAgICBkaWcgMgogICAgZXh0cmFjdCA1NiA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTcyCiAgICAvLyBiaWRkZXI9bGlzdGluZy5iaWRkZXIsCiAgICBkaWcgMwogICAgZXh0cmFjdCAxNiAzMgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE3NAogICAgLy8gZGVwb3NpdGVkPWxpc3RpbmcuZGVwb3NpdGVkIC0gcXVhbnRpdHksCiAgICB1bmNvdmVyIDQKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDYKICAgIC0KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxNjktMTc1CiAgICAvLyBzZWxmLmxpc3RpbmdzW2tleV0gPSBMaXN0aW5nVmFsdWUoCiAgICAvLyAgICAgYmlkPWxpc3RpbmcuYmlkLAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT1saXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICBiaWRkZXI9bGlzdGluZy5iaWRkZXIsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPWxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgLy8gICAgIGRlcG9zaXRlZD1saXN0aW5nLmRlcG9zaXRlZCAtIHF1YW50aXR5LAogICAgLy8gKQogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE3Ny0xNzkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLCBhc3NldF9hbW91bnQ9cXVhbnRpdHkKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxNzgKICAgIC8vIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsIGFzc2V0X2Ftb3VudD1xdWFudGl0eQogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE3NwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxNzctMTc5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwgYXNzZXRfYW1vdW50PXF1YW50aXR5CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QuRGlnaXRhbE1hcmtldHBsYWNlV2l0aFN0cnVjdC53aXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhkcmF3OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxODMKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9VHhuLnNlbmRlciwgYXNzZXQ9YXNzZXQuaWQsIG5vbmNlPW5vbmNlKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE4NQogICAgLy8gbGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XS5jb3B5KCkKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdzIGVudHJ5IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE4NgogICAgLy8gaWYgbGlzdGluZy5iaWRkZXIgIT0gQWNjb3VudCgpOgogICAgZXh0cmFjdCAxNiAzMgogICAgZHVwCiAgICBjb3ZlciA0CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxODgKICAgIC8vIGxpc3RpbmcuYmlkLCBsaXN0aW5nLmJpZFVuaXRhcnlQcmljZSwgYXNzZXQuZGVjaW1hbHMKICAgIGR1cG4gMgogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIHB1c2hpbnQgNTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NjkKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzEtNzMKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTkwCiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9bGlzdGluZy5iaWRkZXIsIGFtb3VudD1jdXJyZW50X2JpZF9kZXBvc2l0KS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGRpZyAzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0Cgp3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTkyCiAgICAvLyBkZWwgc2VsZi5saXN0aW5nc1trZXldCiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxOTQKICAgIC8vIGl0eG4uUGF5bWVudChyZWNlaXZlcj1UeG4uc2VuZGVyLCBhbW91bnQ9c2VsZi5saXN0aW5nc19ib3hfbWJyKCkpLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NDQtNjUKICAgIC8vIHJldHVybiBVSW50NjQoCiAgICAvLyAgICAgMl81MDAKICAgIC8vICAgICArCiAgICAvLyAgICAgIyBmbXQ6IG9mZgogICAgLy8gICAgICMgS2V5IGxlbmd0aAogICAgLy8gICAgICgKICAgIC8vICAgICAgICAgOAogICAgLy8gICAgICAgICArIDMyCiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICAgICAgKwogICAgLy8gICAgICAgICAjIFZhbHVlIGxlbmd0aAogICAgLy8gICAgICAgICA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDMyCiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICApCiAgICAvLyAgICAgKgogICAgLy8gICAgICMgZm10OiBvbgogICAgLy8gICAgIDQwMAogICAgLy8gKQogICAgaW50YyA0IC8vIDUwNTAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE5NAogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPVR4bi5zZW5kZXIsIGFtb3VudD1zZWxmLmxpc3RpbmdzX2JveF9tYnIoKSkuc3VibWl0KCkKICAgIGludGNfMCAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxOTYtMTk4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwgYXNzZXRfYW1vdW50PWxpc3RpbmcuZGVwb3NpdGVkCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MTk3CiAgICAvLyB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLCBhc3NldF9hbW91bnQ9bGlzdGluZy5kZXBvc2l0ZWQKICAgIHR4biBTZW5kZXIKICAgIHN3YXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE5NgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToxOTYtMTk4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwgYXNzZXRfYW1vdW50PWxpc3RpbmcuZGVwb3NpdGVkCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjE4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QuRGlnaXRhbE1hcmtldHBsYWNlV2l0aFN0cnVjdC5iaWRbcm91dGluZ10oKSAtPiB2b2lkOgpiaWQ6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGNvdmVyIDUKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBjb3ZlciA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBjb3ZlciAzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjEwCiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPW93bmVyLCBhc3NldD1hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICBzd2FwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjEyCiAgICAvLyBsaXN0aW5nID0gc2VsZi5saXN0aW5nc1trZXldLmNvcHkoKQogICAgYnl0ZWNfMCAvLyAweDZjNjk3Mzc0Njk2ZTY3NzMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciA0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjEzCiAgICAvLyBpZiBsaXN0aW5nLmJpZGRlciAhPSBBY2NvdW50KCk6CiAgICBleHRyYWN0IDE2IDMyCiAgICBkdXAKICAgIGNvdmVyIDcKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGJpZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMTQKICAgIC8vIGFzc2VydCB1bml0YXJ5X3ByaWNlID4gbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UKICAgIGR1cG4gMgogICAgcHVzaGludCA1NgogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAzCiAgICBkaWcgMQogICAgPgogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjE3CiAgICAvLyBsaXN0aW5nLmJpZCwgbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsIGFzc2V0LmRlY2ltYWxzCiAgICBzd2FwCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDQKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjY5CiAgICAvLyBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3cgPSBvcC5tdWx3KHByaWNlLCBxdWFudGl0eSkKICAgIGNvdmVyIDIKICAgIG11bHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weTo3MAogICAgLy8gc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93ID0gb3AuZXhwdygxMCwgYXNzZXRfZGVjaW1hbHMpCiAgICBwdXNoaW50IDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weTo3MS03MwogICAgLy8gX3F1b3RpZW50X2hpZ2gsIGFtb3VudF90b19iZV9wYWlkLCBfcmVtYWluZGVyX2hpZ2gsIF9yZW1haW5kZXJfbG93ID0gb3AuZGl2bW9kdygKICAgIC8vICAgICBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3csIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdwogICAgLy8gKQogICAgZGl2bW9kdwogICAgcG9wbiAyCiAgICBzd2FwCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzQKICAgIC8vIGFzc2VydCBfcXVvdGllbnRfaGlnaCA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMjAKICAgIC8vIGl0eG4uUGF5bWVudChyZWNlaXZlcj1saXN0aW5nLmJpZGRlciwgYW1vdW50PWN1cnJlbnRfYmlkX2Ftb3VudCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgNgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50Y18wIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKYmlkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMjIKICAgIC8vIGFtb3VudF90b19iZV9iaWQgPSBzZWxmLnF1YW50aXR5X3ByaWNlKHF1YW50aXR5LCB1bml0YXJ5X3ByaWNlLCBhc3NldC5kZWNpbWFscykKICAgIHVuY292ZXIgMgogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NjkKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHVuY292ZXIgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzEtNzMKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjI0CiAgICAvLyBhc3NlcnQgYmlkX3BheS5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgdW5jb3ZlciA1CiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjIyNQogICAgLy8gYXNzZXJ0IGJpZF9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMjYKICAgIC8vIGFzc2VydCBiaWRfcGF5LmFtb3VudCA9PSBhbW91bnRfdG9fYmVfYmlkCiAgICBndHhucyBBbW91bnQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMjkKICAgIC8vIGRlcG9zaXRlZD1saXN0aW5nLmRlcG9zaXRlZCwKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBleHRyYWN0IDAgOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjIzMAogICAgLy8gdW5pdGFyeVByaWNlPWxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgc3dhcAogICAgZXh0cmFjdCA4IDgKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMzEKICAgIC8vIGJpZGRlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjIyOC0yMzQKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBkZXBvc2l0ZWQ9bGlzdGluZy5kZXBvc2l0ZWQsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPWxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgLy8gICAgIGJpZGRlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGJpZD1xdWFudGl0eSwKICAgIC8vICAgICBiaWRVbml0YXJ5UHJpY2U9dW5pdGFyeV9wcmljZSwKICAgIC8vICkKICAgIGNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjIwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QuRGlnaXRhbE1hcmtldHBsYWNlV2l0aFN0cnVjdC5hY2NlcHRfYmlkW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjZXB0X2JpZDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJhY2NlcHRCaWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjM4CiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPVR4bi5zZW5kZXIsIGFzc2V0PWFzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyNDAKICAgIC8vIGxpc3RpbmcgPSBzZWxmLmxpc3RpbmdzW2tleV0uY29weSgpCiAgICBieXRlY18wIC8vIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5saXN0aW5ncyBlbnRyeSBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyNDEKICAgIC8vIGFzc2VydCBsaXN0aW5nLmJpZGRlciAhPSBBY2NvdW50KCkKICAgIGR1cAogICAgZXh0cmFjdCAxNiAzMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyNDMKICAgIC8vIG1pbl9xdWFudGl0eSA9IGxpc3RpbmcuZGVwb3NpdGVkIGlmIGxpc3RpbmcuZGVwb3NpdGVkIDwgbGlzdGluZy5iaWQgZWxzZSBsaXN0aW5nLmJpZAogICAgZHVwCiAgICBpbnRjXzIgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMwogICAgPAogICAgYnogYWNjZXB0X2JpZF90ZXJuYXJ5X2ZhbHNlQDMKICAgIGRpZyAyCgphY2NlcHRfYmlkX3Rlcm5hcnlfbWVyZ2VANDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyNDYKICAgIC8vIG1pbl9xdWFudGl0eSwgbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsIGFzc2V0LmRlY2ltYWxzCiAgICBzd2FwCiAgICBkdXAKICAgIHB1c2hpbnQgNTYKICAgIGV4dHJhY3RfdWludDY0CiAgICB1bmNvdmVyIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NjkKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgZGlnIDEKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzAKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6NzEtNzMKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjQ5CiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9VHhuLnNlbmRlciwgYW1vdW50PWJlc3RfYmlkX2Ftb3VudCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjUxLTI1MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPWxpc3RpbmcuYmlkZGVyLCBhc3NldF9hbW91bnQ9bWluX3F1YW50aXR5CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIHVuY292ZXIgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyNTEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfbXV0YWJsZV9zdHJ1Y3QucHk6MjUxLTI1MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPWxpc3RpbmcuYmlkZGVyLCBhc3NldF9hbW91bnQ9bWluX3F1YW50aXR5CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjI1OAogICAgLy8gdW5pdGFyeVByaWNlPWxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0IDggOAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjI1OQogICAgLy8gZGVwb3NpdGVkPWxpc3RpbmcuZGVwb3NpdGVkIC0gbWluX3F1YW50aXR5LAogICAgdW5jb3ZlciA1CiAgICBkaWcgMgogICAgLQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX211dGFibGVfc3RydWN0LnB5OjI2MAogICAgLy8gYmlkPWxpc3RpbmcuYmlkIC0gbWluX3F1YW50aXR5LAogICAgdW5jb3ZlciA1CiAgICB1bmNvdmVyIDMKICAgIC0KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyNTUtMjYxCiAgICAvLyBzZWxmLmxpc3RpbmdzW2tleV0gPSBMaXN0aW5nVmFsdWUoCiAgICAvLyAgICAgYmlkZGVyPWxpc3RpbmcuYmlkZGVyLAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT1saXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICB1bml0YXJ5UHJpY2U9bGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgICAgZGVwb3NpdGVkPWxpc3RpbmcuZGVwb3NpdGVkIC0gbWluX3F1YW50aXR5LAogICAgLy8gICAgIGJpZD1saXN0aW5nLmJpZCAtIG1pbl9xdWFudGl0eSwKICAgIC8vICkKICAgIHN3YXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF9tdXRhYmxlX3N0cnVjdC5weToyMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJhY2NlcHRCaWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKYWNjZXB0X2JpZF90ZXJuYXJ5X2ZhbHNlQDM6CiAgICBkaWcgMQogICAgYiBhY2NlcHRfYmlkX3Rlcm5hcnlfbWVyZ2VANAo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAFAQgABMSKAyYBCGxpc3RpbmdzMRhAAAeABGluaXSwMRtBAF8xGRREMRhEggkE2Y72qQRqTn/KBBLwjJgEm0uCNARNiyPYBFKsXfcE466yXAQyNLcRBMyCY0Y2GgCOCQABABoAWQDXATgBhAImAqsDhQCADBUffHUAAAAAAADFRLAiQzEZFDEYFBBDMRYiCUk4ECISRDYaAUkVIxJEFzIKSwFwAEUBFERLATgHMgoSREw4CDIQEkSxMgokshKyFLIRJbIQJLIBsyJDMRaBAglJOBAiEkQxFiIJSTgQJRJENhoBSRUjEkQXNhoCSRUjEkQXSwM4ADEAEkRLAzgHMgoSRE8DOAghBBJEMQBLAzgRFlBMFlAoTFBJvUUBFERLAjgAMQASREsCOBQyChJETwI4EklEMgNMFk8DFlBMUCQWTEsBUExQvyJDMRYiCUk4ECUSRDYaAUkVIxJEFzEASwI4ERZQTBZQSwE4ADEAEkRLATgUMgoSREw4EklEKE8CUEm+RElXMAhLAVc4CEsCVxAgSwNXCAhPBCRbTwYIFkxQTFBPAlBMUL8iQzYaAUkVIxJEFzYaAkkVIxJEFzYaA0kVIxJEFzEATwMWUE8CFlAoTFBJvkRJVzAISwFXOAhLAlcQIE8DVwAITwUWUExQTwJQTFC/IkM2GgFJFYEgEkQ2GgJJFSMSRBc2GgNJFSMSRBcxFiIJSTgQIhJENhoESRUjEkQXSwMWSwVMUE8DFlAoTFBJvkRJI1tLBXEBREsBSwUdgQpPA5UfRgJMFERLBTgAMQASREsFOAdPCBJETwU4CBJESwFXMAhLAlc4CEsDVxAgTwQkW0sGCRZPBBZQTFBPAlBMUL+xMQCyFLISshElshAksgGzIkM2GgFJFSMSRBdJNhoCSRUjEkQXMQBPAhZQTBZQKExQSb5MSU8CRFcQIElOBDIDE0EAK0cCgTBbTIE4W0sEcQFETE8CHYEKTwOVH0YCTBREsbIISwOyByKyECSyAbNMvEixMQAhBLIIsgcishAksgGzsTEATCRbshKyFLIRJbIQJLIBsyJDNhoBSRWBIBJENhoCSRUjEkQXSU4CNhoDSRUjEkQXMRYiCUlOBTgQIhJENhoESRUjEkQXTgQ2GgVJFSMSRBdOA0wWTwJMUEwWUChMUElOBL5MSU8CRFcQIElOBzIDE0EAMEcCgThbSwNLAQ1ETIEwW0sEcQFETgIdgQpPA5UfRgJMFESxsghLBrIHIrIQJLIBs08CcQFETwJJTgJPBElOAx2BCk8DlR9GAkwURE8FSTgAMQASREk4BzIKEkQ4CBJETwJJVwAITFcICDEATgJQTFBMFlBMFlC/IkM2GgFJFSMSRBdJNhoCSRUjEkQXMQBPAhZQTBZQKExQSU4CvkxJTwJESVcQIElOAzIDE0RJJFtJTgJOA4EwW0lOAwxBAGZLAkxJgThbTwZJTgJxAURLAU8FSU4DHYEKTwOVH0YCTBREsTEAsgeyCCKyECSyAbOxSbISTwZJTgKyFE8DshElshAksgGzTwNXCAhPBUsCCU8FTwMJTBZPAlBPAlBMFlBMFlC/IkNLAUL/lw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }