{ "name": "TestGlobalMap", "structs": {}, "methods": [ { "name": "setAndGetUint", "args": [ { "type": "string", "name": "key" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setAndGetBytes", "args": [ { "type": "string", "name": "key" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setAndGetString", "args": [ { "type": "string", "name": "key" }, { "type": "string", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deleteValue", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "hasValue", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testKeyPrefix", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testPrefixedMap", "args": [ { "type": "string", "name": "key" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 10, "bytes": 10 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": { "uintMap": { "keyType": "AVMString", "valueType": "AVMUint64", "prefix": "dWludE1hcA==" }, "bytesMap": { "keyType": "AVMString", "valueType": "AVMBytes", "prefix": "Ynl0ZXNNYXA=" }, "stringMap": { "keyType": "AVMString", "valueType": "AVMString", "prefix": "c3RyaW5nTWFw" }, "prefixedMap": { "keyType": "AVMString", "valueType": "AVMUint64", "prefix": "cC8=" } }, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 490 ], "errorMessage": "bytes value should match" }, { "pc": [ 459, 486, 513, 607 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 580 ], "errorMessage": "default key prefix should be property name" }, { "pc": [ 584 ], "errorMessage": "explicit key prefix should match" }, { "pc": [ 211, 246, 264, 290, 308, 334, 360, 411 ], "errorMessage": "invalid array length header" }, { "pc": [ 220, 255, 273, 299, 317, 343, 369, 420 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 231, 431 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 611 ], "errorMessage": "prefixed map value should match" }, { "pc": [ 540 ], "errorMessage": "should have value before delete" }, { "pc": [ 555 ], "errorMessage": "should not have value after delete" }, { "pc": [ 517 ], "errorMessage": "string value should match" }, { "pc": [ 463 ], "errorMessage": "uint value should match" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOAogICAgYnl0ZWNibG9jayAidWludE1hcCIgInAvIiAiYnl0ZXNNYXAiICJzdHJpbmdNYXAiCiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgYiBtYWluX2Jsb2NrQDEKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6NC01CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogMTAsIGdsb2JhbEJ5dGVzOiAxMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgVGVzdEdsb2JhbE1hcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE0CiAgICBiIG1haW5fYWJpX3JvdXRpbmdAMgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo0LTUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiAxMCwgZ2xvYmFsQnl0ZXM6IDEwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBUZXN0R2xvYmFsTWFwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMTIKICAgIGIgbWFpbl9jYWxsX05vT3BAMwoKbWFpbl9jYWxsX05vT3BAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6NC01CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogMTAsIGdsb2JhbEJ5dGVzOiAxMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgVGVzdEdsb2JhbE1hcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDAxMTI0YjczIC8vIG1ldGhvZCAic2V0QW5kR2V0VWludChzdHJpbmcsdWludDY0KXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhZWM0NDFiOCAvLyBtZXRob2QgInNldEFuZEdldEJ5dGVzKHN0cmluZyxieXRlW10pdm9pZCIKICAgIHB1c2hieXRlcyAweGEyZDIwMzkyIC8vIG1ldGhvZCAic2V0QW5kR2V0U3RyaW5nKHN0cmluZyxzdHJpbmcpdm9pZCIKICAgIHB1c2hieXRlcyAweDdiYzEyNjlkIC8vIG1ldGhvZCAiZGVsZXRlVmFsdWUoc3RyaW5nKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg3ZDQ0YWM5NiAvLyBtZXRob2QgImhhc1ZhbHVlKHN0cmluZylib29sIgogICAgcHVzaGJ5dGVzIDB4Mzc2NGIxZWQgLy8gbWV0aG9kICJ0ZXN0S2V5UHJlZml4KCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YjM2Y2JlMmEgLy8gbWV0aG9kICJ0ZXN0UHJlZml4ZWRNYXAoc3RyaW5nLHVpbnQ2NCl2b2lkIgogICAgdW5jb3ZlciA3CiAgICBtYXRjaCBtYWluX3NldEFuZEdldFVpbnRfcm91dGVANCBtYWluX3NldEFuZEdldEJ5dGVzX3JvdXRlQDUgbWFpbl9zZXRBbmRHZXRTdHJpbmdfcm91dGVANiBtYWluX2RlbGV0ZVZhbHVlX3JvdXRlQDcgbWFpbl9oYXNWYWx1ZV9yb3V0ZUA4IG1haW5fdGVzdEtleVByZWZpeF9yb3V0ZUA5IG1haW5fdGVzdFByZWZpeGVkTWFwX3JvdXRlQDEwCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjQtNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDEwLCBnbG9iYWxCeXRlczogMTAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFRlc3RHbG9iYWxNYXAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBlcnIKCm1haW5fdGVzdFByZWZpeGVkTWFwX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo0MgogICAgLy8gdGVzdFByZWZpeGVkTWFwKGtleTogc3RyaW5nLCB2YWx1ZTogdWludDY0KSB7CiAgICBjYWxsc3ViIHRlc3RQcmVmaXhlZE1hcAogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTEKCm1haW5fdGVzdEtleVByZWZpeF9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czozNwogICAgLy8gdGVzdEtleVByZWZpeCgpIHsKICAgIGNhbGxzdWIgdGVzdEtleVByZWZpeAogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTEKCm1haW5faGFzVmFsdWVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MzMKICAgIC8vIGhhc1ZhbHVlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7CiAgICBjYWxsc3ViIGhhc1ZhbHVlCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMQoKbWFpbl9kZWxldGVWYWx1ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoyNgogICAgLy8gZGVsZXRlVmFsdWUoa2V5OiBzdHJpbmcpIHsKICAgIGNhbGxzdWIgZGVsZXRlVmFsdWUKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExCgptYWluX3NldEFuZEdldFN0cmluZ19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoyMQogICAgLy8gc2V0QW5kR2V0U3RyaW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7CiAgICBjYWxsc3ViIHNldEFuZEdldFN0cmluZwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTEKCm1haW5fc2V0QW5kR2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MTYKICAgIC8vIHNldEFuZEdldEJ5dGVzKGtleTogc3RyaW5nLCB2YWx1ZTogYnl0ZXMpIHsKICAgIGNhbGxzdWIgc2V0QW5kR2V0Qnl0ZXMKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExCgptYWluX3NldEFuZEdldFVpbnRfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MTEKICAgIC8vIHNldEFuZEdldFVpbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0QW5kR2V0VWludAogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTEKCm1haW5fY3JlYXRlX05vT3BAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjQtNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDEwLCBnbG9iYWxCeXRlczogMTAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFRlc3RHbG9iYWxNYXAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRVaW50W3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0QW5kR2V0VWludDoKICAgIGIgc2V0QW5kR2V0VWludF9ibG9ja0AwCgpzZXRBbmRHZXRVaW50X2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjExCiAgICAvLyBzZXRBbmRHZXRVaW50KGtleTogc3RyaW5nLCB2YWx1ZTogdWludDY0KSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRVaW50CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRCeXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFuZEdldEJ5dGVzOgogICAgYiBzZXRBbmRHZXRCeXRlc19ibG9ja0AwCgpzZXRBbmRHZXRCeXRlc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoxNgogICAgLy8gc2V0QW5kR2V0Qnl0ZXMoa2V5OiBzdHJpbmcsIHZhbHVlOiBieXRlcykgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRCeXRlcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAuc2V0QW5kR2V0U3RyaW5nW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0QW5kR2V0U3RyaW5nOgogICAgYiBzZXRBbmRHZXRTdHJpbmdfYmxvY2tAMAoKc2V0QW5kR2V0U3RyaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjIxCiAgICAvLyBzZXRBbmRHZXRTdHJpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAxCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAuc2V0QW5kR2V0U3RyaW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5kZWxldGVWYWx1ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlbGV0ZVZhbHVlOgogICAgYiBkZWxldGVWYWx1ZV9ibG9ja0AwCgpkZWxldGVWYWx1ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoyNgogICAgLy8gZGVsZXRlVmFsdWUoa2V5OiBzdHJpbmcpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAxCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLmRlbGV0ZVZhbHVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5oYXNWYWx1ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6Cmhhc1ZhbHVlOgogICAgYiBoYXNWYWx1ZV9ibG9ja0AwCgpoYXNWYWx1ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czozMwogICAgLy8gaGFzVmFsdWUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAxCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLmhhc1ZhbHVlCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAudGVzdEtleVByZWZpeFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RLZXlQcmVmaXg6CiAgICBiIHRlc3RLZXlQcmVmaXhfYmxvY2tAMAoKdGVzdEtleVByZWZpeF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czozNwogICAgLy8gdGVzdEtleVByZWZpeCgpIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC50ZXN0S2V5UHJlZml4CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC50ZXN0UHJlZml4ZWRNYXBbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0UHJlZml4ZWRNYXA6CiAgICBiIHRlc3RQcmVmaXhlZE1hcF9ibG9ja0AwCgp0ZXN0UHJlZml4ZWRNYXBfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6NDIKICAgIC8vIHRlc3RQcmVmaXhlZE1hcChrZXk6IHN0cmluZywgdmFsdWU6IHVpbnQ2NCkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAudGVzdFByZWZpeGVkTWFwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRVaW50KGtleTogYnl0ZXMsIHZhbHVlOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAuc2V0QW5kR2V0VWludDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MTEKICAgIC8vIHNldEFuZEdldFVpbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnNldEFuZEdldFVpbnRfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRVaW50X2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCB1aW50NjQ+KCkKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoxMgogICAgLy8gdGhpcy51aW50TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo2CiAgICAvLyB1aW50TWFwID0gR2xvYmFsTWFwPHN0cmluZywgdWludDY0PigpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydCh0aGlzLnVpbnRNYXAoa2V5KS52YWx1ZSA9PT0gdmFsdWUsICd1aW50IHZhbHVlIHNob3VsZCBtYXRjaCcpCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAxCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIHVpbnQgdmFsdWUgc2hvdWxkIG1hdGNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnNldEFuZEdldEJ5dGVzKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRCeXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MTYKICAgIC8vIHNldEFuZEdldEJ5dGVzKGtleTogc3RyaW5nLCB2YWx1ZTogYnl0ZXMpIHsKICAgIHByb3RvIDIgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnNldEFuZEdldEJ5dGVzX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAuc2V0QW5kR2V0Qnl0ZXNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6NwogICAgLy8gYnl0ZXNNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCBieXRlcz4oKQogICAgYnl0ZWNfMiAvLyAiYnl0ZXNNYXAiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoxNwogICAgLy8gdGhpcy5ieXRlc01hcChrZXkpLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6NwogICAgLy8gYnl0ZXNNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCBieXRlcz4oKQogICAgYnl0ZWNfMiAvLyAiYnl0ZXNNYXAiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoxOAogICAgLy8gYXNzZXJ0KHRoaXMuYnl0ZXNNYXAoa2V5KS52YWx1ZSA9PT0gdmFsdWUsICdieXRlcyB2YWx1ZSBzaG91bGQgbWF0Y2gnKQogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydCAvLyBieXRlcyB2YWx1ZSBzaG91bGQgbWF0Y2gKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAuc2V0QW5kR2V0U3RyaW5nKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5zZXRBbmRHZXRTdHJpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjIxCiAgICAvLyBzZXRBbmRHZXRTdHJpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHsKICAgIHByb3RvIDIgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnNldEFuZEdldFN0cmluZ19ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnNldEFuZEdldFN0cmluZ19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo4CiAgICAvLyBzdHJpbmdNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCBzdHJpbmc+KCkKICAgIGJ5dGVjXzMgLy8gInN0cmluZ01hcCIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjIyCiAgICAvLyB0aGlzLnN0cmluZ01hcChrZXkpLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OAogICAgLy8gc3RyaW5nTWFwID0gR2xvYmFsTWFwPHN0cmluZywgc3RyaW5nPigpCiAgICBieXRlY18zIC8vICJzdHJpbmdNYXAiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoyMwogICAgLy8gYXNzZXJ0KHRoaXMuc3RyaW5nTWFwKGtleSkudmFsdWUgPT09IHZhbHVlLCAnc3RyaW5nIHZhbHVlIHNob3VsZCBtYXRjaCcpCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAxCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIHN0cmluZyB2YWx1ZSBzaG91bGQgbWF0Y2gKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAuZGVsZXRlVmFsdWUoa2V5OiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5kZWxldGVWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MjYKICAgIC8vIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5kZWxldGVWYWx1ZV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLmRlbGV0ZVZhbHVlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCB1aW50NjQ+KCkKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoyNwogICAgLy8gdGhpcy51aW50TWFwKGtleSkudmFsdWUgPSAxMjMKICAgIHB1c2hpbnQgMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo2CiAgICAvLyB1aW50TWFwID0gR2xvYmFsTWFwPHN0cmluZywgdWludDY0PigpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydCh0aGlzLnVpbnRNYXAoa2V5KS5oYXNWYWx1ZSwgJ3Nob3VsZCBoYXZlIHZhbHVlIGJlZm9yZSBkZWxldGUnKQogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBzaG91bGQgaGF2ZSB2YWx1ZSBiZWZvcmUgZGVsZXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCB1aW50NjQ+KCkKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czoyOQogICAgLy8gdGhpcy51aW50TWFwKGtleSkuZGVsZXRlKCkKICAgIGFwcF9nbG9iYWxfZGVsCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCB1aW50NjQ+KCkKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czozMAogICAgLy8gYXNzZXJ0KCF0aGlzLnVpbnRNYXAoa2V5KS5oYXNWYWx1ZSwgJ3Nob3VsZCBub3QgaGF2ZSB2YWx1ZSBhZnRlciBkZWxldGUnKQogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgICEKICAgIGFzc2VydCAvLyBzaG91bGQgbm90IGhhdmUgdmFsdWUgYWZ0ZXIgZGVsZXRlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLmhhc1ZhbHVlKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5oYXNWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MzMKICAgIC8vIGhhc1ZhbHVlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIGIgdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5oYXNWYWx1ZV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLmhhc1ZhbHVlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBHbG9iYWxNYXA8c3RyaW5nLCB1aW50NjQ+KCkKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czozNAogICAgLy8gcmV0dXJuIHRoaXMudWludE1hcChrZXkpLmhhc1ZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAxCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgdW5jb3ZlciAxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnRlc3RLZXlQcmVmaXgoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnRlc3RLZXlQcmVmaXg6CiAgICBiIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6OlRlc3RHbG9iYWxNYXAudGVzdEtleVByZWZpeF9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnRlc3RLZXlQcmVmaXhfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MzgKICAgIC8vIGFzc2VydCh0aGlzLnVpbnRNYXAua2V5UHJlZml4ID09PSBCeXRlcygndWludE1hcCcpLCAnZGVmYXVsdCBrZXkgcHJlZml4IHNob3VsZCBiZSBwcm9wZXJ0eSBuYW1lJykKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgPT0KICAgIGFzc2VydCAvLyBkZWZhdWx0IGtleSBwcmVmaXggc2hvdWxkIGJlIHByb3BlcnR5IG5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6MzkKICAgIC8vIGFzc2VydCh0aGlzLnByZWZpeGVkTWFwLmtleVByZWZpeCA9PT0gQnl0ZXMoJ3AvJyksICdleHBsaWNpdCBrZXkgcHJlZml4IHNob3VsZCBtYXRjaCcpCiAgICBieXRlY18xIC8vICJwLyIKICAgIGJ5dGVjXzEgLy8gInAvIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBsaWNpdCBrZXkgcHJlZml4IHNob3VsZCBtYXRjaAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC50ZXN0UHJlZml4ZWRNYXAoa2V5OiBieXRlcywgdmFsdWU6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC50ZXN0UHJlZml4ZWRNYXA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjQyCiAgICAvLyB0ZXN0UHJlZml4ZWRNYXAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnRlc3RQcmVmaXhlZE1hcF9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjpUZXN0R2xvYmFsTWFwLnRlc3RQcmVmaXhlZE1hcF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo5CiAgICAvLyBwcmVmaXhlZE1hcCA9IEdsb2JhbE1hcDxzdHJpbmcsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdwLycgfSkKICAgIGJ5dGVjXzEgLy8gInAvIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9nbG9iYWwtbWFwLmFsZ28udHM6NDMKICAgIC8vIHRoaXMucHJlZml4ZWRNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvZ2xvYmFsLW1hcC5hbGdvLnRzOjkKICAgIC8vIHByZWZpeGVkTWFwID0gR2xvYmFsTWFwPHN0cmluZywgdWludDY0Pih7IGtleVByZWZpeDogJ3AvJyB9KQogICAgYnl0ZWNfMSAvLyAicC8iCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHRoaXMucHJlZml4ZWRNYXAoa2V5KS52YWx1ZSA9PT0gdmFsdWUsICdwcmVmaXhlZCBtYXAgdmFsdWUgc2hvdWxkIG1hdGNoJykKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDEKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQgLy8gcHJlZml4ZWQgbWFwIHZhbHVlIHNob3VsZCBtYXRjaAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2dsb2JhbC1tYXAuYWxnby50czo6VGVzdEdsb2JhbE1hcC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICBiIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZV9ibG9ja0AwCgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGVfYmxvY2tAMDoKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgcHVzaGludCAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAECCCYEB3VpbnRNYXACcC8IYnl0ZXNNYXAJc3RyaW5nTWFwQgAAQgAAMRsiE0EAiEIAADEZIhJEMRgiE0EAdkIAADYaAIAEARJLc4AErsRBuIAEotIDkoAEe8EmnYAEfUSsloAEN2Sx7YAEs2y+Kk8HjgcALgAoACIAHAAWABAACkIAAEIAAEIAAACIAQFC//OIAPNC/+2IAMJC/+eIAKJC/+GIAHBC/9uIAD5C/9WIABVC/89C/88xGSISMRgiEhBEiAGcI0NCAAA2GgFJIlkjCyQISwEVEkRXAgA2GgJJFSUSRBeIAMojQ0IAADYaAUkiWSMLJAhLARUSRFcCADYaAkkiWSMLJAhLARUSRFcCAIgAuSNDQgAANhoBSSJZIwskCEsBFRJEVwIANhoCSSJZIwskCEsBFRJEVwIAiACoI0NCAAA2GgFJIlkjCyQISwEVEkRXAgCIAKkjQ0IAADYaAUkiWSMLJAhLARUSRFcCAIgAtYABACJPAlSABBUffHVPAVCwI0NCAACIAK0jQ0IAADYaAUkiWSMLJAhLARUSRFcCADYaAkkVJRJEF4gAliNDigIAQgAAKIv+UIv/ZyiL/lAiTwFlRIv/EkSJigIAQgAAKov+UIv/ZyqL/lAiTwFlRIv/EkSJigIAQgAAK4v+UIv/ZyuL/lAiTwFlRIv/EkSJigEAQgAAKIv/UIF7ZyiL/1AiTwFlRCiL/1BpKIv/UCJPAWUURImKAQFCAAAoi/9QIk8BZU8BiUIAACgoEkQpKRJEiYoCAEIAACmL/lCL/2cpi/5QIk8BZUSL/xJEiUIAAIk=", "clear": "C0IAAIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }