{ "name": "MutableObjectDemo", "structs": { "PluginInfo": [ { "name": "lastValidRound", "type": "uint64" }, { "name": "cooldown", "type": "uint64" }, { "name": "lastCalled", "type": "uint64" }, { "name": "adminPrivileges", "type": "bool" }, { "name": "methods", "type": "(byte[4],uint64,uint64)[]" } ], "Point": [ { "name": "y", "type": "uint64" }, { "name": "x", "type": "uint64" } ], "Vector": [ { "name": "x", "type": "uint64" }, { "name": "y", "type": "uint64" } ], "VectorPoint": [ { "name": "v", "type": "Vector" }, { "name": "p", "type": "Point" } ] }, "methods": [ { "name": "testVectorCreationAndEquality", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "addVectors", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" }, { "type": "(uint64,uint64)", "struct": "Vector", "name": "v2" } ], "returns": { "type": "(uint64,uint64)", "struct": "Vector" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mutateVector", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" }, { "type": "uint64", "name": "newX" }, { "type": "uint64", "name": "newY" } ], "returns": { "type": "(uint64,uint64)", "struct": "Vector" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "implicitCastingAndSpreading", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testNestedObjects", "args": [ { "type": "((uint64,uint64),(uint64,uint64))", "struct": "VectorPoint", "name": "vp" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testMethodSelector", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testAssertMatch", "args": [ { "type": "uint64", "name": "x" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testArc4Encoding", "args": [ { "type": "(uint64,uint64)", "struct": "Point", "name": "p" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getPlugin", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "(uint64,uint64,uint64,bool,(byte[4],uint64,uint64)[])", "struct": "PluginInfo" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getMain", "args": [], "returns": { "type": "(uint64,uint64,uint64,bool,(byte[4],uint64,uint64)[])", "struct": "PluginInfo" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setPlugin", "args": [ { "type": "string", "name": "key" } ], "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": { "plugin": { "keyType": "AVMString", "valueType": "PluginInfo", "key": "bWFpbg==" } } }, "maps": { "global": {}, "local": {}, "box": { "plugins": { "keyType": "AVMString", "valueType": "PluginInfo", "prefix": "cGx1Z2lucw==" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1253, 1273 ], "errorMessage": "Box must have value" }, { "pc": [ 1239 ], "errorMessage": "Encoded order should be swapped" }, { "pc": [ 1157 ], "errorMessage": "For the purpose of this test, a should not equal b" }, { "pc": [ 1261, 1281 ], "errorMessage": "Last called not zero" }, { "pc": [ 544, 710, 766, 993, 1061, 1119, 1128, 1136 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ 413, 458 ], "errorMessage": "invalid array length header" }, { "pc": [ 423, 468 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 304, 313, 382 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 399 ], "errorMessage": "invalid number of bytes for tests/approvals/mutable-object.algo.ts::Point" }, { "pc": [ 267, 275, 296, 341 ], "errorMessage": "invalid number of bytes for tests/approvals/mutable-object.algo.ts::Vector" }, { "pc": [ 358 ], "errorMessage": "invalid number of bytes for tests/approvals/mutable-object.algo.ts::VectorPoint" }, { "pc": [ 1307 ], "errorMessage": "invalid size" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgOCAwIDE2IDEKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NSAweDAyNDU4ODA3IDB4YmEyN2E5YmEgMHgzODE0ZjkyYSAicGx1Z2lucyIgMHhhNzgwMDBkZQogICAgYiBtYWluX2Jsb2NrQDAKCm1haW5fYmxvY2tAMDoKICAgIGIgbWFpbl9ibG9ja0AxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMgogICAgLy8gZXhwb3J0IGNsYXNzIE11dGFibGVPYmplY3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMSAvLyAwCiAgICAhPQogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTgKICAgIGIgbWFpbl9hYmlfcm91dGluZ0AyCgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMgogICAgLy8gZXhwb3J0IGNsYXNzIE11dGFibGVPYmplY3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzEgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMTYKICAgIGIgbWFpbl9jYWxsX05vT3BAMwoKbWFpbl9jYWxsX05vT3BAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEyCiAgICAvLyBleHBvcnQgY2xhc3MgTXV0YWJsZU9iamVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg4OTM4OGRkZCAvLyBtZXRob2QgInRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZWYzMjJkNmQgLy8gbWV0aG9kICJhZGRWZWN0b3JzKCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpKHVpbnQ2NCx1aW50NjQpIgogICAgYnl0ZWNfMiAvLyBtZXRob2QgIm11dGF0ZVZlY3RvcigodWludDY0LHVpbnQ2NCksdWludDY0LHVpbnQ2NCkodWludDY0LHVpbnQ2NCkiCiAgICBwdXNoYnl0ZXMgMHhjYjgxZGViOCAvLyBtZXRob2QgImltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZygodWludDY0LHVpbnQ2NCkpdm9pZCIKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJ0ZXN0TmVzdGVkT2JqZWN0cygoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSkpdm9pZCIKICAgIHB1c2hieXRlcyAweDJmNjcwYTU1IC8vIG1ldGhvZCAidGVzdE1ldGhvZFNlbGVjdG9yKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZDRjODFmNWIgLy8gbWV0aG9kICJ0ZXN0QXNzZXJ0TWF0Y2godWludDY0KXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhmNDgzNWMyMyAvLyBtZXRob2QgInRlc3RBcmM0RW5jb2RpbmcoKHVpbnQ2NCx1aW50NjQpKXZvaWQiCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZ2V0UGx1Z2luKHN0cmluZykodWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCwoYnl0ZVs0XSx1aW50NjQsdWludDY0KVtdKSIKICAgIHB1c2hieXRlcyAweDAwN2E0Y2IwIC8vIG1ldGhvZCAiZ2V0TWFpbigpKHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wsKGJ5dGVbNF0sdWludDY0LHVpbnQ2NClbXSkiCiAgICBwdXNoYnl0ZXMgMHhhOWJjNjFmMSAvLyBtZXRob2QgInNldFBsdWdpbihzdHJpbmcpdm9pZCIKICAgIHVuY292ZXIgMTEKICAgIG1hdGNoIG1haW5fdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfcm91dGVANCBtYWluX2FkZFZlY3RvcnNfcm91dGVANSBtYWluX211dGF0ZVZlY3Rvcl9yb3V0ZUA2IG1haW5faW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX3JvdXRlQDcgbWFpbl90ZXN0TmVzdGVkT2JqZWN0c19yb3V0ZUA4IG1haW5fdGVzdE1ldGhvZFNlbGVjdG9yX3JvdXRlQDkgbWFpbl90ZXN0QXNzZXJ0TWF0Y2hfcm91dGVAMTAgbWFpbl90ZXN0QXJjNEVuY29kaW5nX3JvdXRlQDExIG1haW5fZ2V0UGx1Z2luX3JvdXRlQDEyIG1haW5fZ2V0TWFpbl9yb3V0ZUAxMyBtYWluX3NldFBsdWdpbl9yb3V0ZUAxNAogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTUKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE3CgptYWluX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxOQoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTIKICAgIC8vIGV4cG9ydCBjbGFzcyBNdXRhYmxlT2JqZWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGVycgoKbWFpbl9zZXRQbHVnaW5fcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMjMKICAgIC8vIHB1YmxpYyBzZXRQbHVnaW4oa2V5OiBzdHJpbmcpIHsKICAgIGNhbGxzdWIgc2V0UGx1Z2luCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNQoKbWFpbl9nZXRNYWluX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTEzCiAgICAvLyBwdWJsaWMgZ2V0TWFpbigpIHsKICAgIGNhbGxzdWIgZ2V0TWFpbgogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTUKCm1haW5fZ2V0UGx1Z2luX3JvdXRlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTA3CiAgICAvLyBwdWJsaWMgZ2V0UGx1Z2luKGtleTogc3RyaW5nKTogUGx1Z2luSW5mbyB7CiAgICBjYWxsc3ViIGdldFBsdWdpbgogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTUKCm1haW5fdGVzdEFyYzRFbmNvZGluZ19yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjkyCiAgICAvLyB0ZXN0QXJjNEVuY29kaW5nKHA6IFBvaW50KSB7CiAgICBjYWxsc3ViIHRlc3RBcmM0RW5jb2RpbmcKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE1CgptYWluX3Rlc3RBc3NlcnRNYXRjaF9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjc1CiAgICAvLyB0ZXN0QXNzZXJ0TWF0Y2goeDogdWludDY0KSB7CiAgICBjYWxsc3ViIHRlc3RBc3NlcnRNYXRjaAogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTUKCm1haW5fdGVzdE1ldGhvZFNlbGVjdG9yX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo2MAogICAgLy8gcHVibGljIHRlc3RNZXRob2RTZWxlY3RvcigpIHsKICAgIGNhbGxzdWIgdGVzdE1ldGhvZFNlbGVjdG9yCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNQoKbWFpbl90ZXN0TmVzdGVkT2JqZWN0c19yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NDkKICAgIC8vIHB1YmxpYyB0ZXN0TmVzdGVkT2JqZWN0cyh2cDogVmVjdG9yUG9pbnQpIHsKICAgIGNhbGxzdWIgdGVzdE5lc3RlZE9iamVjdHMKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE1CgptYWluX2ltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MzQKICAgIC8vIHB1YmxpYyBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IFZlY3RvcikgewogICAgY2FsbHN1YiBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE1CgptYWluX211dGF0ZVZlY3Rvcl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBtdXRhdGVWZWN0b3IodjE6IFZlY3RvciwgbmV3WDogdWludDY0LCBuZXdZOiB1aW50NjQpOiBWZWN0b3IgewogICAgY2FsbHN1YiBtdXRhdGVWZWN0b3IKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE1CgptYWluX2FkZFZlY3RvcnNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjIxCiAgICAvLyBwdWJsaWMgYWRkVmVjdG9ycyh2MTogVmVjdG9yLCB2MjogVmVjdG9yKTogVmVjdG9yIHsKICAgIGNhbGxzdWIgYWRkVmVjdG9ycwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTUKCm1haW5fdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEzCiAgICAvLyBwdWJsaWMgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkoKSB7CiAgICBjYWxsc3ViIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5CiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNQoKbWFpbl9jcmVhdGVfTm9PcEAxNjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE3CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEyCiAgICAvLyBleHBvcnQgY2xhc3MgTXV0YWJsZU9iamVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gTm9PcAogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzEgLy8gMAogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzMgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHk6CiAgICBiIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5X2Jsb2NrQDAKCnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5X2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMwogICAgLy8gcHVibGljIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkKICAgIGludGNfMyAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uYWRkVmVjdG9yc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFkZFZlY3RvcnM6CiAgICBiIGFkZFZlY3RvcnNfYmxvY2tAMAoKYWRkVmVjdG9yc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBhZGRWZWN0b3JzKHYxOiBWZWN0b3IsIHYyOiBWZWN0b3IpOiBWZWN0b3IgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6OlZlY3RvcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6OlZlY3RvcgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uYWRkVmVjdG9ycwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzMgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLm11dGF0ZVZlY3Rvcltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11dGF0ZVZlY3RvcjoKICAgIGIgbXV0YXRlVmVjdG9yX2Jsb2NrQDAKCm11dGF0ZVZlY3Rvcl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBtdXRhdGVWZWN0b3IodjE6IFZlY3RvciwgbmV3WDogdWludDY0LCBuZXdZOiB1aW50NjQpOiBWZWN0b3IgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6OlZlY3RvcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8ubXV0YXRlVmVjdG9yCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMyAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nW3JvdXRpbmddKCkgLT4gdm9pZDoKaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nOgogICAgYiBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmdfYmxvY2tAMAoKaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czozNAogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6VmVjdG9yCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcKICAgIGludGNfMyAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE5lc3RlZE9iamVjdHNbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0TmVzdGVkT2JqZWN0czoKICAgIGIgdGVzdE5lc3RlZE9iamVjdHNfYmxvY2tAMAoKdGVzdE5lc3RlZE9iamVjdHNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjQ5CiAgICAvLyBwdWJsaWMgdGVzdE5lc3RlZE9iamVjdHModnA6IFZlY3RvclBvaW50KSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6OlZlY3RvclBvaW50CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0TmVzdGVkT2JqZWN0cwogICAgaW50Y18zIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0TWV0aG9kU2VsZWN0b3Jbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0TWV0aG9kU2VsZWN0b3I6CiAgICBiIHRlc3RNZXRob2RTZWxlY3Rvcl9ibG9ja0AwCgp0ZXN0TWV0aG9kU2VsZWN0b3JfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjYwCiAgICAvLyBwdWJsaWMgdGVzdE1ldGhvZFNlbGVjdG9yKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE1ldGhvZFNlbGVjdG9yCiAgICBpbnRjXzMgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnRlc3RBc3NlcnRNYXRjaFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RBc3NlcnRNYXRjaDoKICAgIGIgdGVzdEFzc2VydE1hdGNoX2Jsb2NrQDAKCnRlc3RBc3NlcnRNYXRjaF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NzUKICAgIC8vIHRlc3RBc3NlcnRNYXRjaCh4OiB1aW50NjQpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnRlc3RBc3NlcnRNYXRjaAogICAgaW50Y18zIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0QXJjNEVuY29kaW5nW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdEFyYzRFbmNvZGluZzoKICAgIGIgdGVzdEFyYzRFbmNvZGluZ19ibG9ja0AwCgp0ZXN0QXJjNEVuY29kaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo5MgogICAgLy8gdGVzdEFyYzRFbmNvZGluZyhwOiBQb2ludCkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6OlBvaW50CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0QXJjNEVuY29kaW5nCiAgICBpbnRjXzMgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLmdldFBsdWdpbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFBsdWdpbjoKICAgIGIgZ2V0UGx1Z2luX2Jsb2NrQDAKCmdldFBsdWdpbl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTA3CiAgICAvLyBwdWJsaWMgZ2V0UGx1Z2luKGtleTogc3RyaW5nKTogUGx1Z2luSW5mbyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMQogICAgKgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRQbHVnaW4KICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18zIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRNYWluW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0TWFpbjoKICAgIGIgZ2V0TWFpbl9ibG9ja0AwCgpnZXRNYWluX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMTMKICAgIC8vIHB1YmxpYyBnZXRNYWluKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uZ2V0TWFpbgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzMgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnNldFBsdWdpbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFBsdWdpbjoKICAgIGIgc2V0UGx1Z2luX2Jsb2NrQDAKCnNldFBsdWdpbl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTIzCiAgICAvLyBwdWJsaWMgc2V0UGx1Z2luKGtleTogc3RyaW5nKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMQogICAgKgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5zZXRQbHVnaW4KICAgIGludGNfMyAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHk6CiAgICBiIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCB2MTogVmVjdG9yID0geyB5OiAxLCB4OiAwIH0KICAgIGludGNfMSAvLyAwCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgaW50Y18zIC8vIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTUKICAgIC8vIGxvZyh2MS54KQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBpdG9iCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjE2CiAgICAvLyBsb2codjEueSkKICAgIGR1cAogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgaXRvYgogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxNwogICAgLy8gY29uc3QgdjI6IFZlY3RvciA9IHsgeTogMSwgeDogMCB9CiAgICBpbnRjXzEgLy8gMAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGludGNfMyAvLyAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjE4CiAgICAvLyBhc3NlcnRNYXRjaCh2MSwgdjIpCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBjb3ZlciAyCiAgICB1bmNvdmVyIDEKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIHVuY292ZXIgMQogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLmFkZFZlY3RvcnModjE6IGJ5dGVzLCB2MjogYnl0ZXMpIC0+IGJ5dGVzOgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uYWRkVmVjdG9yczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjIxCiAgICAvLyBwdWJsaWMgYWRkVmVjdG9ycyh2MTogVmVjdG9yLCB2MjogVmVjdG9yKTogVmVjdG9yIHsKICAgIHByb3RvIDIgMQogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uYWRkVmVjdG9yc19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uYWRkVmVjdG9yc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MjMKICAgIC8vIHg6IHYxLnggKyB2Mi54LAogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgICsKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjI0CiAgICAvLyB5OiB2MS55ICsgdjIueSwKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICArCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoyMi0yNQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgeDogdjEueCArIHYyLngsCiAgICAvLyAgIHk6IHYxLnkgKyB2Mi55LAogICAgLy8gfQogICAgdW5jb3ZlciAxCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5tdXRhdGVWZWN0b3IodjE6IGJ5dGVzLCBuZXdYOiB1aW50NjQsIG5ld1k6IHVpbnQ2NCkgLT4gYnl0ZXM6CnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5tdXRhdGVWZWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoyOAogICAgLy8gcHVibGljIG11dGF0ZVZlY3Rvcih2MTogVmVjdG9yLCBuZXdYOiB1aW50NjQsIG5ld1k6IHVpbnQ2NCk6IFZlY3RvciB7CiAgICBwcm90byAzIDEKICAgIGIgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLm11dGF0ZVZlY3Rvcl9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8ubXV0YXRlVmVjdG9yX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoyOQogICAgLy8gdjEueCA9IG5ld1gKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICByZXBsYWNlMwogICAgZnJhbWVfYnVyeSAtMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MzAKICAgIC8vIHYxLnkgPSBuZXdZCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgaW50Y18wIC8vIDgKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MzEKICAgIC8vIHJldHVybiB2MQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLmltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czozNAogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICBwcm90byAxIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLmltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czozNQogICAgLy8gY29uc3QgdjIgPSBjbG9uZSh2MSkKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MzYKICAgIC8vIGNvbnN0IHYzID0geyAuLi52MiB9CiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGNvdmVyIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGNvdmVyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnQodjEueCA9PT0gdjIueCkKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZGlnIDEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjM4CiAgICAvLyBhc3NlcnQodjEueSA9PT0gdjIueSkKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZGlnIDEKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjM5CiAgICAvLyBhc3NlcnRNYXRjaCh2MSwgdjIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgY292ZXIgMQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICB1bmNvdmVyIDEKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjQwCiAgICAvLyBhc3NlcnQodjMueCA9PT0gdjEueCkKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo0MQogICAgLy8gYXNzZXJ0KHYzLnkgPT09IHYxLnkpCiAgICBkdXAKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NDIKICAgIC8vIGFzc2VydE1hdGNoKHYzLCB2MSkKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgID09CiAgICB1bmNvdmVyIDIKICAgICYmCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IHsgeCwgeSB9ID0gdjMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICB1bmNvdmVyIDIKICAgIGNvdmVyIDEKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjQ1CiAgICAvLyBhc3NlcnQoeCA9PT0gdjMueCkKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo0NgogICAgLy8gYXNzZXJ0KHkgPT09IHYzLnkpCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE5lc3RlZE9iamVjdHModnA6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE5lc3RlZE9iamVjdHM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo0OQogICAgLy8gcHVibGljIHRlc3ROZXN0ZWRPYmplY3RzKHZwOiBWZWN0b3JQb2ludCkgewogICAgcHJvdG8gMSAwCiAgICBiIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0TmVzdGVkT2JqZWN0c19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE5lc3RlZE9iamVjdHNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjUwCiAgICAvLyBjb25zdCB2MSA9IHsgeDogdnAudi54LCB5OiB2cC52LnkgfQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDE2CiAgICBleHRyYWN0MwogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDE2CiAgICBleHRyYWN0MwogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgdW5jb3ZlciAxCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjUxCiAgICAvLyBjb25zdCBwMSA9IHsgeDogdnAucC54LCB5OiB2cC5wLnkgfQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMTYKICAgIGludGNfMiAvLyAxNgogICAgZXh0cmFjdDMKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDE2CiAgICBpbnRjXzIgLy8gMTYKICAgIGV4dHJhY3QzCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICB1bmNvdmVyIDEKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IHZwMSA9IHsgdjogY2xvbmUodjEpLCBwOiBjbG9uZShwMSkgfQogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo1MwogICAgLy8gbG9nKHZwMS52LngpCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzIgLy8gMTYKICAgIGV4dHJhY3QzCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBpdG9iCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjU0CiAgICAvLyBsb2codnAxLnYueSkKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGludGNfMiAvLyAxNgogICAgZXh0cmFjdDMKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGl0b2IKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NTUKICAgIC8vIGxvZyh2cDEucC54KQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTYKICAgIGludGNfMiAvLyAxNgogICAgZXh0cmFjdDMKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGl0b2IKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NTYKICAgIC8vIGxvZyh2cDEucC55KQogICAgZHVwCiAgICBpbnRjXzIgLy8gMTYKICAgIGludGNfMiAvLyAxNgogICAgZXh0cmFjdDMKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGl0b2IKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NTcKICAgIC8vIGFzc2VydE1hdGNoKHZwMSwgdnApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzIgLy8gMTYKICAgIGV4dHJhY3QzCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzIgLy8gMTYKICAgIGV4dHJhY3QzCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDE2CiAgICBleHRyYWN0MwogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDE2CiAgICBleHRyYWN0MwogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgPT0KICAgIHVuY292ZXIgMgogICAgJiYKICAgIGNvdmVyIDEKICAgIGR1cAogICAgaW50Y18yIC8vIDE2CiAgICBpbnRjXzIgLy8gMTYKICAgIGV4dHJhY3QzCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAxNgogICAgaW50Y18yIC8vIDE2CiAgICBleHRyYWN0MwogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgPT0KICAgIGNvdmVyIDEKICAgIGludGNfMiAvLyAxNgogICAgaW50Y18yIC8vIDE2CiAgICBleHRyYWN0MwogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMTYKICAgIGludGNfMiAvLyAxNgogICAgZXh0cmFjdDMKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgID09CiAgICAmJgogICAgJiYKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE1ldGhvZFNlbGVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnRlc3RNZXRob2RTZWxlY3RvcjoKICAgIGIgdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnRlc3RNZXRob2RTZWxlY3Rvcl9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdE1ldGhvZFNlbGVjdG9yX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo2MgogICAgLy8gbWV0aG9kU2VsZWN0b3IoTXV0YWJsZU9iamVjdERlbW8ucHJvdG90eXBlLm11dGF0ZVZlY3RvcikgPT09CiAgICBieXRlY18yIC8vIG1ldGhvZCAibXV0YXRlVmVjdG9yKCh1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0KSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjYzCiAgICAvLyBtZXRob2RTZWxlY3RvcignbXV0YXRlVmVjdG9yKCh1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0KScpLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgIm11dGF0ZVZlY3RvcigodWludDY0LHVpbnQ2NCksdWludDY0LHVpbnQ2NCkodWludDY0LHVpbnQ2NCkiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo2Mi02MwogICAgLy8gbWV0aG9kU2VsZWN0b3IoTXV0YWJsZU9iamVjdERlbW8ucHJvdG90eXBlLm11dGF0ZVZlY3RvcikgPT09CiAgICAvLyAgIG1ldGhvZFNlbGVjdG9yKCdtdXRhdGVWZWN0b3IoKHVpbnQ2NCx1aW50NjQpLHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpJyksCiAgICA9PQogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NjEtNjQKICAgIC8vIGFzc2VydCgKICAgIC8vICAgbWV0aG9kU2VsZWN0b3IoTXV0YWJsZU9iamVjdERlbW8ucHJvdG90eXBlLm11dGF0ZVZlY3RvcikgPT09CiAgICAvLyAgICAgbWV0aG9kU2VsZWN0b3IoJ211dGF0ZVZlY3RvcigodWludDY0LHVpbnQ2NCksdWludDY0LHVpbnQ2NCkodWludDY0LHVpbnQ2NCknKSwKICAgIC8vICkKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NjYKICAgIC8vIG1ldGhvZFNlbGVjdG9yKE11dGFibGVPYmplY3REZW1vLnByb3RvdHlwZS5nZXRQbHVnaW4pID09PQogICAgYnl0ZWMgNCAvLyBtZXRob2QgImdldFBsdWdpbihzdHJpbmcpKHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wsKGJ5dGVbNF0sdWludDY0LHVpbnQ2NClbXSkiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo2NwogICAgLy8gbWV0aG9kU2VsZWN0b3IoJ2dldFBsdWdpbihzdHJpbmcpKHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wsKGJ5dGVbNF0sdWludDY0LHVpbnQ2NClbXSknKSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJnZXRQbHVnaW4oc3RyaW5nKSh1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLChieXRlWzRdLHVpbnQ2NCx1aW50NjQpW10pIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NjYtNjcKICAgIC8vIG1ldGhvZFNlbGVjdG9yKE11dGFibGVPYmplY3REZW1vLnByb3RvdHlwZS5nZXRQbHVnaW4pID09PQogICAgLy8gICBtZXRob2RTZWxlY3RvcignZ2V0UGx1Z2luKHN0cmluZykodWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCwoYnl0ZVs0XSx1aW50NjQsdWludDY0KVtdKScpLAogICAgPT0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjY1LTY4CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIG1ldGhvZFNlbGVjdG9yKE11dGFibGVPYmplY3REZW1vLnByb3RvdHlwZS5nZXRQbHVnaW4pID09PQogICAgLy8gICAgIG1ldGhvZFNlbGVjdG9yKCdnZXRQbHVnaW4oc3RyaW5nKSh1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLChieXRlWzRdLHVpbnQ2NCx1aW50NjQpW10pJyksCiAgICAvLyApCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjcwCiAgICAvLyBtZXRob2RTZWxlY3RvcihNdXRhYmxlT2JqZWN0RGVtby5wcm90b3R5cGUudGVzdE5lc3RlZE9iamVjdHMpID09PQogICAgYnl0ZWNfMyAvLyBtZXRob2QgInRlc3ROZXN0ZWRPYmplY3RzKCgodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSl2b2lkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NzEKICAgIC8vIG1ldGhvZFNlbGVjdG9yKCd0ZXN0TmVzdGVkT2JqZWN0cygoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSkpdm9pZCcpLAogICAgYnl0ZWNfMyAvLyBtZXRob2QgInRlc3ROZXN0ZWRPYmplY3RzKCgodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSl2b2lkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NzAtNzEKICAgIC8vIG1ldGhvZFNlbGVjdG9yKE11dGFibGVPYmplY3REZW1vLnByb3RvdHlwZS50ZXN0TmVzdGVkT2JqZWN0cykgPT09CiAgICAvLyAgIG1ldGhvZFNlbGVjdG9yKCd0ZXN0TmVzdGVkT2JqZWN0cygoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSkpdm9pZCcpLAogICAgPT0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjY5LTcyCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIG1ldGhvZFNlbGVjdG9yKE11dGFibGVPYmplY3REZW1vLnByb3RvdHlwZS50ZXN0TmVzdGVkT2JqZWN0cykgPT09CiAgICAvLyAgICAgbWV0aG9kU2VsZWN0b3IoJ3Rlc3ROZXN0ZWRPYmplY3RzKCgodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSl2b2lkJyksCiAgICAvLyApCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0QXNzZXJ0TWF0Y2goeDogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdEFzc2VydE1hdGNoOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6NzUKICAgIC8vIHRlc3RBc3NlcnRNYXRjaCh4OiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdEFzc2VydE1hdGNoX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0QXNzZXJ0TWF0Y2hfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjc4CiAgICAvLyB5OiAoYiA9IHggKiAyKSwKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyCiAgICAqCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo3Ny04MAogICAgLy8gY29uc3Qgb2JqOiBWZWN0b3IgPSB7CiAgICAvLyAgIHk6IChiID0geCAqIDIpLAogICAgLy8gICB4OiBiLAogICAgLy8gfQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjgxLTg0CiAgICAvLyBhc3NlcnRNYXRjaChvYmosIHsKICAgIC8vICAgeTogeCAqIDIsCiAgICAvLyAgIHg6IHggKiAyLAogICAgLy8gfSkKICAgIGR1cAogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6ODIKICAgIC8vIHk6IHggKiAyLAogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDIKICAgICoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjgxLTg0CiAgICAvLyBhc3NlcnRNYXRjaChvYmosIHsKICAgIC8vICAgeTogeCAqIDIsCiAgICAvLyAgIHg6IHggKiAyLAogICAgLy8gfSkKICAgID09CiAgICBjb3ZlciAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjgzCiAgICAvLyB4OiB4ICogMiwKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyCiAgICAqCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo4MS04NAogICAgLy8gYXNzZXJ0TWF0Y2gob2JqLCB7CiAgICAvLyAgIHk6IHggKiAyLAogICAgLy8gICB4OiB4ICogMiwKICAgIC8vIH0pCiAgICA9PQogICAgdW5jb3ZlciAyCiAgICAmJgogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjg1CiAgICAvLyBjb25zdCB2ID0geyB5OiBvYmoueSwgeDogb2JqLnggfQogICAgZHVwCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBjb3ZlciAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo4NwogICAgLy8gYXNzZXJ0TWF0Y2gob2JqLCB7IHg6IHYueCwgeTogdi55IH0pCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDAKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDgKICAgIGludGNfMCAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgdW5jb3ZlciAxCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICA9PQogICAgdW5jb3ZlciAyCiAgICAmJgogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjg4CiAgICAvLyBhc3NlcnRNYXRjaChvYmosIHsgeTogeyBncmVhdGVyVGhhbjogeCB9IH0pCiAgICBkdXAKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgPgogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnRNYXRjaChvYmosIHsgeDogeyBncmVhdGVyVGhhbjogeCB9IH0pCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgID4KICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8udGVzdEFyYzRFbmNvZGluZyhwOiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLnRlc3RBcmM0RW5jb2Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo5MgogICAgLy8gdGVzdEFyYzRFbmNvZGluZyhwOiBQb2ludCkgewogICAgcHJvdG8gMSAwCiAgICBiIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0QXJjNEVuY29kaW5nX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby50ZXN0QXJjNEVuY29kaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo5MwogICAgLy8gYXNzZXJ0KHAueCAhPT0gcC55LCAnRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCwgYSBzaG91bGQgbm90IGVxdWFsIGInKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gOAogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgICE9CiAgICBhc3NlcnQgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCwgYSBzaG91bGQgbm90IGVxdWFsIGIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjk1CiAgICAvLyB4OiBwLngsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyA4CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjk2CiAgICAvLyB5OiBwLnksCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjk0LTk3CiAgICAvLyBjb25zdCBvYmo6IFZlY3RvciA9IHsKICAgIC8vICAgeDogcC54LAogICAgLy8gICB5OiBwLnksCiAgICAvLyB9CiAgICB1bmNvdmVyIDEKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6OTgKICAgIC8vIGNvbnN0IHBFbmNvZGVkID0gZW5jb2RlQXJjNChwKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb3ZlciAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMDAKICAgIC8vIGFzc2VydChwRW5jb2RlZCA9PT0gb2JqRW5jb2RlZC5zbGljZSg4KS5jb25jYXQob2JqRW5jb2RlZC5zbGljZSgwLCA4KSksICdFbmNvZGVkIG9yZGVyIHNob3VsZCBiZSBzd2FwcGVkJykKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzAgLy8gOAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgdW5jb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvdmVyIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBjb3ZlciAxCiAgICBpbnRjXzAgLy8gOAogICAgZGlnIDEKICAgID49CiAgICBpbnRjXzAgLy8gOAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0IC8vIEVuY29kZWQgb3JkZXIgc2hvdWxkIGJlIHN3YXBwZWQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRQbHVnaW4oa2V5OiBieXRlcykgLT4gYnl0ZXM6CnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRQbHVnaW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMDcKICAgIC8vIHB1YmxpYyBnZXRQbHVnaW4oa2V5OiBzdHJpbmcpOiBQbHVnaW5JbmZvIHsKICAgIHByb3RvIDEgMQogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uZ2V0UGx1Z2luX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRQbHVnaW5fYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEwMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxzdHJpbmcsIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiAncGx1Z2lucycgfSkKICAgIGJ5dGVjIDUgLy8gInBsdWdpbnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTA4CiAgICAvLyBjb25zdCB2YWx1ZSA9IGNsb25lKHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEwOQogICAgLy8gYXNzZXJ0KHZhbHVlLmxhc3RDYWxsZWQuYXNVaW50NjQoKSA+IDAsICdMYXN0IGNhbGxlZCBub3QgemVybycpCiAgICBkdXAKICAgIGludGNfMiAvLyAxNgogICAgaW50Y18wIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMAogICAgPgogICAgYXNzZXJ0IC8vIExhc3QgY2FsbGVkIG5vdCB6ZXJvCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMTAKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLmdldE1haW4oKSAtPiBieXRlczoKdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6Ok11dGFibGVPYmplY3REZW1vLmdldE1haW46CiAgICBiIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRNYWluX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5nZXRNYWluX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMDUKICAgIC8vIHBsdWdpbiA9IEJveDxQbHVnaW5JbmZvPih7IGtleTogJ21haW4nIH0pCiAgICBwdXNoYnl0ZXMgIm1haW4iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMTQKICAgIC8vIGNvbnN0IHZhbHVlID0gY2xvbmUodGhpcy5wbHVnaW4udmFsdWUpCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTE1CiAgICAvLyBhc3NlcnQodmFsdWUubGFzdENhbGxlZC5hc1VpbnQ2NCgpID4gMCwgJ0xhc3QgY2FsbGVkIG5vdCB6ZXJvJykKICAgIGR1cAogICAgaW50Y18yIC8vIDE2CiAgICBpbnRjXzAgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICA+CiAgICBhc3NlcnQgLy8gTGFzdCBjYWxsZWQgbm90IHplcm8KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjExNgogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uc2V0UGx1Z2luKGtleTogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5zZXRQbHVnaW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMjMKICAgIC8vIHB1YmxpYyBzZXRQbHVnaW4oa2V5OiBzdHJpbmcpIHsKICAgIHByb3RvIDEgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czo6TXV0YWJsZU9iamVjdERlbW8uc2V0UGx1Z2luX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5zZXRQbHVnaW5fYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEyNQogICAgLy8gbGFzdFZhbGlkUm91bmQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIGludGNfMyAvLyAxCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMjYKICAgIC8vIGNvb2xkb3duOiBuZXcgYXJjNC5VaW50NjQoKSwKICAgIGludGNfMSAvLyAwCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMjcKICAgIC8vIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgaW50Y18xIC8vIDAKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEyOAogICAgLy8gYWRtaW5Qcml2aWxlZ2VzOiBuZXcgYXJjNC5Cb29sKGZhbHNlKSwKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18xIC8vIDAKICAgIHNldGJpdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTMxCiAgICAvLyBzZWxlY3RvcjogbmV3IGFyYzQuU3RhdGljQnl0ZXMobWV0aG9kU2VsZWN0b3IoJ3Rlc3QoKXZvaWQnKSksCiAgICBieXRlYyA2IC8vIG1ldGhvZCAidGVzdCgpdm9pZCIKICAgIGxlbgogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb29sZG93bjogbmV3IGFyYzQuVWludDY0KDEpLAogICAgaW50Y18zIC8vIDEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEzMwogICAgLy8gbGFzdENhbGxlZDogbmV3IGFyYzQuVWludDY0KDEpLAogICAgaW50Y18zIC8vIDEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEyNC0xMzYKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlID0gewogICAgLy8gICBsYXN0VmFsaWRSb3VuZDogbmV3IGFyYzQuVWludDY0KDEpLAogICAgLy8gICBjb29sZG93bjogbmV3IGFyYzQuVWludDY0KCksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgLy8gICBhZG1pblByaXZpbGVnZXM6IG5ldyBhcmM0LkJvb2woZmFsc2UpLAogICAgLy8gICBtZXRob2RzOiBbCiAgICAvLyAgICAgewogICAgLy8gICAgICAgc2VsZWN0b3I6IG5ldyBhcmM0LlN0YXRpY0J5dGVzKG1ldGhvZFNlbGVjdG9yKCd0ZXN0KCl2b2lkJykpLAogICAgLy8gICAgICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICB9LAogICAgLy8gICBdLAogICAgLy8gfQogICAgYnl0ZWNfMCAvLyAweAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTMxCiAgICAvLyBzZWxlY3RvcjogbmV3IGFyYzQuU3RhdGljQnl0ZXMobWV0aG9kU2VsZWN0b3IoJ3Rlc3QoKXZvaWQnKSksCiAgICBieXRlYyA2IC8vIG1ldGhvZCAidGVzdCgpdm9pZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjEyNC0xMzYKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlID0gewogICAgLy8gICBsYXN0VmFsaWRSb3VuZDogbmV3IGFyYzQuVWludDY0KDEpLAogICAgLy8gICBjb29sZG93bjogbmV3IGFyYzQuVWludDY0KCksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgLy8gICBhZG1pblByaXZpbGVnZXM6IG5ldyBhcmM0LkJvb2woZmFsc2UpLAogICAgLy8gICBtZXRob2RzOiBbCiAgICAvLyAgICAgewogICAgLy8gICAgICAgc2VsZWN0b3I6IG5ldyBhcmM0LlN0YXRpY0J5dGVzKG1ldGhvZFNlbGVjdG9yKCd0ZXN0KCl2b2lkJykpLAogICAgLy8gICAgICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICB9LAogICAgLy8gICBdLAogICAgLy8gfQogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGludGNfMyAvLyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBwdXNoaW50IDI3CiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL211dGFibGUtb2JqZWN0LmFsZ28udHM6MTAzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPHN0cmluZywgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6ICdwbHVnaW5zJyB9KQogICAgYnl0ZWMgNSAvLyAicGx1Z2lucyIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXV0YWJsZS1vYmplY3QuYWxnby50czoxMjQtMTM2CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgbGFzdFZhbGlkUm91bmQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgLy8gICBsYXN0Q2FsbGVkOiBuZXcgYXJjNC5VaW50NjQoKSwKICAgIC8vICAgYWRtaW5Qcml2aWxlZ2VzOiBuZXcgYXJjNC5Cb29sKGZhbHNlKSwKICAgIC8vICAgbWV0aG9kczogWwogICAgLy8gICAgIHsKICAgIC8vICAgICAgIHNlbGVjdG9yOiBuZXcgYXJjNC5TdGF0aWNCeXRlcyhtZXRob2RTZWxlY3RvcigndGVzdCgpdm9pZCcpKSwKICAgIC8vICAgICAgIGNvb2xkb3duOiBuZXcgYXJjNC5VaW50NjQoMSksCiAgICAvLyAgICAgICBsYXN0Q2FsbGVkOiBuZXcgYXJjNC5VaW50NjQoMSksCiAgICAvLyAgICAgfSwKICAgIC8vICAgXSwKICAgIC8vIH0KICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICB1bmNvdmVyIDEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdXRhYmxlLW9iamVjdC5hbGdvLnRzOjpNdXRhYmxlT2JqZWN0RGVtby5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICBiIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZV9ibG9ja0AwCgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGVfYmxvY2tAMDoKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgcHVzaGludCAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAECAAQASYHAAQVH3x1BAJFiAcEuiepugQ4FPkqB3BsdWdpbnMEp4AA3kIAAEIAADEbIxNBALJCAAAxGSMSRDEYIxNBAKBCAAA2GgCABIk4jd2ABO8yLW0qgATLgd64K4AEL2cKVYAE1MgfW4AE9INcIycEgAQAekywgASpvGHxTwuOCwBGAEAAOgA0AC4AKAAiABwAFgAQAApCAABCAABCAAAAiAEaQv/ziAEHQv/tiADhQv/niADLQv/hiAC0Qv/biACmQv/ViACPQv/PiAB5Qv/JiABGQv/DiAAjQv+9iAAVQv+3Qv+3MRkjEjEYIxIQRIgEXiVDQgAAiADeJUNCAAA2GgFJFSQSRDYaAkkVJBJEiAELKU8BULAlQ0IAADYaAUkVJBJENhoCSRUiEkQXNhoDSRUiEkQXTwJPAk8CiAEKKU8BULAlQ0IAADYaAUkVJBJEiAETJUNCAAA2GgFJFYEgEkSIAbYlQ0IAAIgCcSVDQgAANhoBSRUiEkQXiAJyJUNCAAA2GgFJFSQSRIgC3yVDQgAANhoBSSNZJQuBAghLARUSRFcCAIgDKylPAVCwJUNCAACIAzQpTwFQsCVDQgAANhoBSSNZJQuBAghLARUSRFcCAIgDKCVDQgAAIxYoTwFQJRZQSSMiWBcWsEkiIlgXFrAjFihPAVAlFlBLASMiWBdOAUkjIlgXTwISTgJPASIiWBdPASIiWBcSEESJigIBQgAAi/4jIlgXi/8jIlgXCIv+IiJYF4v/IiJYFwhPARYoTwFQTwEWUImKAwFCAACL/haL/SNPAl2M/Yv/Fov9Ik8CXUmM/YmKAQBCAACL/0kjIlgXTgFJIiJYF08CFihPAVBPARZQTgGL/yMiWBdLASMiWBcSRIv/IiJYF0sBIiJYFxJEi/8jIlgXSwEjIlgXEk4Bi/8iIlgXTwEiIlgXEhBESSMiWBeL/yMiWBcSREkiIlgXi/8iIlgXEkRJIyJYF4v/IyJYFxJOAUkiIlgXi/8iIlgXEk8CEERJIyJYF04BSSIiWBdPAk4BTgJLASMiWBcSRCIiWBcSRImKAQBCAACL/yMkWCMiWBeL/yMkWCIiWBdPARYoTwFQTwEWUIv/JCRYIiJYF4v/JCRYIyJYF08BFihPAVBPARZQKE8CUE8BUEkjJFgjIlgXFrBJIyRYIiJYFxawSSQkWCMiWBcWsEkkJFgiIlgXFrBJIyRYIyJYF4v/IyRYIyJYFxJOAUkjJFgiIlgXi/8jJFgiIlgXEk8CEE4BSSQkWCIiWBeL/yQkWCMiWBcSTgEkJFgjIlgXi/8kJFgiIlgXEhAQRIlCAAAqKhJEJwQnBBJEKysSRImKAQBCAACL/4ECC0kWKE8BUE8BFlBJIiJYF4v/gQILEk4BSSMiWBeL/4ECCxJPAhBESSIiWBdOAUkjIlgXTwIWKE8BUE8BFlBLASMiWBdOAUkiIlgXTwISTgJLASIiWBdPASMiWBcSTwIQREkiIlgXi/8NRCMiWBeL/w1EiYoBAEIAAIv/IiJYF4v/IyJYFxNEi/8iIlgXi/8jIlgXTwEWKE8BUE8BFlCL/04BSRUiSwEPIksCTwJNSwJPAU8CUk4BSRUjSwEPI0sCTwJNTgEiSwEPIk8CTwJNTwJPAk8CUlASRImKAQFCAAAnBYv/UL5ESSQiWBcjDUSJQgAAgARtYWluvkRJJCJYFyMNRImKAQBCAAAlFiMWIxaAAQAjI1QnBhWBBBJEJRYlFignBlBPAlBPAVAlFlcGAk8BUChPBVBPBFBPA1BPAlCBGxZXBgJQTwFQJwWL/1BJvEhPAb+JQgAAiQ==", "clear": "C0IAAIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }