{ "name": "Mithras", "structs": { "PlonkProof": [ { "name": "A", "type": "byte[96]" }, { "name": "B", "type": "byte[96]" }, { "name": "C", "type": "byte[96]" }, { "name": "Z", "type": "byte[96]" }, { "name": "T1", "type": "byte[96]" }, { "name": "T2", "type": "byte[96]" }, { "name": "T3", "type": "byte[96]" }, { "name": "Wxi", "type": "byte[96]" }, { "name": "Wxiw", "type": "byte[96]" }, { "name": "eval_a", "type": "uint256" }, { "name": "eval_b", "type": "uint256" }, { "name": "eval_c", "type": "uint256" }, { "name": "eval_s1", "type": "uint256" }, { "name": "eval_s2", "type": "uint256" }, { "name": "eval_zw", "type": "uint256" } ] }, "methods": [ { "name": "createApplication", "args": [ { "type": "address", "name": "depositVerifier" }, { "type": "address", "name": "spendVerifier" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "bootstrapMerkleTree", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "uint256[]", "name": "signals" }, { "type": "(byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],uint256,uint256,uint256,uint256,uint256,uint256)", "struct": "PlonkProof", "name": "_proof" }, { "type": "byte[250]", "name": "_outHpke" }, { "type": "pay", "name": "deposit" }, { "type": "txn", "name": "verifierTxn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "NewLeaf", "args": [ { "type": "uint256", "name": "leaf" }, { "type": "uint64", "name": "epochId" } ] } ], "recommendations": {} }, { "name": "spend", "args": [ { "type": "uint256[]", "name": "signals" }, { "type": "(byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],byte[96],uint256,uint256,uint256,uint256,uint256,uint256)", "struct": "PlonkProof", "name": "_proof" }, { "type": "byte[250]", "name": "_out0Hpke" }, { "type": "byte[250]", "name": "_out1Hpke" }, { "type": "txn", "name": "verifierTxn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "NewLeaf", "args": [ { "type": "uint256", "name": "leaf" }, { "type": "uint64", "name": "epochId" } ] } ], "recommendations": {} }, { "name": "ensureBudget", "args": [ { "type": "uint64", "name": "budget" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 4, "bytes": 3 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "depositVerifier": { "keyType": "AVMString", "valueType": "address", "key": "ZA==" }, "spendVerifier": { "keyType": "AVMString", "valueType": "address", "key": "cw==" }, "creationRound": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y3I=" }, "rootCounter": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Yw==" }, "treeIndex": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aQ==" }, "epochId": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZQ==" }, "lastComputedRoot": { "keyType": "AVMString", "valueType": "uint256", "key": "bHI=" } }, "local": {}, "box": { "rootCache": { "keyType": "AVMString", "valueType": "uint256[50]", "key": "cg==" }, "subtree": { "keyType": "AVMString", "valueType": "uint256[20]", "key": "dA==" }, "zeroHashes": { "keyType": "AVMString", "valueType": "uint256[20]", "key": "eg==" } } }, "maps": { "global": {}, "local": {}, "box": { "nullifiers": { "keyType": "uint256", "valueType": "AVMBytes", "prefix": "bg==" }, "epochBoxes": { "keyType": "uint64", "valueType": "uint256[32]", "prefix": "ZQ==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 574, 819, 872, 879 ], "errorMessage": "Box must have value" }, { "pc": [ 525 ], "errorMessage": "Fee does not cover nullifier storage cost" }, { "pc": [ 598 ], "errorMessage": "Invalid UTXO root" }, { "pc": [ 564 ], "errorMessage": "Invalid spender" }, { "pc": [ 502 ], "errorMessage": "Nullifier already exists" }, { "pc": [ 507, 516 ], "errorMessage": "account funded" }, { "pc": [ 364, 453, 761, 773, 778, 801, 856, 860, 984, 1006 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 230, 252, 262, 304, 590, 841, 915, 922, 957 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 316, 407 ], "errorMessage": "invalid array length header" }, { "pc": [ 396 ], "errorMessage": "invalid deposit txn" }, { "pc": [ 325, 416 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 342, 433, 441 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 155, 163 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 730 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 334, 425 ], "errorMessage": "invalid number of bytes for contracts/mithras.algo.ts::PlonkProof" }, { "pc": [ 774 ], "errorMessage": "nothing to seal" }, { "pc": [ 455 ], "errorMessage": "sender of verifier call must be the spend verifier lsig" }, { "pc": [ 352, 653 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDMyIDIgMjUwCiAgICBieXRlY2Jsb2NrICJpIiAiciIgImUiICJjIiAidCIgImxyIiAieiIgMHgwNjgxMDEKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6NjAtNjEKICAgIC8vIEBjb250cmFjdCh7IGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgTWl0aHJhcyBleHRlbmRzIE1pbWNNZXJrbGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEA4CiAgICBwdXNoYnl0ZXNzIDB4OWM3YWJmNjYgMHhmZmQ0MDA1NCAweGE4YmQwOGRjIDB4MjMyZWVlMTAgLy8gbWV0aG9kICJib290c3RyYXBNZXJrbGVUcmVlKCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KHVpbnQyNTZbXSwoYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sdWludDI1Nix1aW50MjU2LHVpbnQyNTYsdWludDI1Nix1aW50MjU2LHVpbnQyNTYpLGJ5dGVbMjUwXSxwYXksdHhuKXZvaWQiLCBtZXRob2QgInNwZW5kKHVpbnQyNTZbXSwoYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sYnl0ZVs5Nl0sdWludDI1Nix1aW50MjU2LHVpbnQyNTYsdWludDI1Nix1aW50MjU2LHVpbnQyNTYpLGJ5dGVbMjUwXSxieXRlWzI1MF0sdHhuKXZvaWQiLCBtZXRob2QgImVuc3VyZUJ1ZGdldCh1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGJvb3RzdHJhcE1lcmtsZVRyZWUgZGVwb3NpdCBzcGVuZCBlbnN1cmVCdWRnZXQKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEA4OgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo2MC02MQogICAgLy8gQGNvbnRyYWN0KHsgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXRocmFzIGV4dGVuZHMgTWltY01lcmtsZSB7CiAgICBwdXNoYnl0ZXMgMHhiNGM3N2Q3MSAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlQXBwbGljYXRpb24KICAgIGVycgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyA3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDU6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANDoKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMzoKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2OgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo6TWl0aHJhcy5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo2OAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24oZGVwb3NpdFZlcmlmaWVyOiBBZGRyZXNzLCBzcGVuZFZlcmlmaWVyOiBBZGRyZXNzKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo2MgogICAgLy8gZGVwb3NpdFZlcmlmaWVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBrZXk6ICJkIiB9KTsKICAgIHB1c2hieXRlcyAiZCIKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6NjkKICAgIC8vIHRoaXMuZGVwb3NpdFZlcmlmaWVyLnZhbHVlID0gZGVwb3NpdFZlcmlmaWVyOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo2MwogICAgLy8gc3BlbmRWZXJpZmllciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsga2V5OiAicyIgfSk7CiAgICBwdXNoYnl0ZXMgInMiCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjcwCiAgICAvLyB0aGlzLnNwZW5kVmVyaWZpZXIudmFsdWUgPSBzcGVuZFZlcmlmaWVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6NjQKICAgIC8vIGNyZWF0aW9uUm91bmQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiY3IiIH0pOwogICAgcHVzaGJ5dGVzICJjciIKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6NzEKICAgIC8vIHRoaXMuY3JlYXRpb25Sb3VuZC52YWx1ZSA9IEdsb2JhbC5yb3VuZDsKICAgIGdsb2JhbCBSb3VuZAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6NjgKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKGRlcG9zaXRWZXJpZmllcjogQWRkcmVzcywgc3BlbmRWZXJpZmllcjogQWRkcmVzcykgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6Ok1pdGhyYXMuYm9vdHN0cmFwTWVya2xlVHJlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJvb3RzdHJhcE1lcmtsZVRyZWU6CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo0NgogICAgLy8gZW5zdXJlQnVkZ2V0KE1JTUNfT1BDT0RFX0NPU1QpOwogICAgcHVzaGludCAyMjAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NDcKICAgIC8vIGNvbnN0IHRyZWUgPSBuZXcgRml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgVFJFRV9ERVBUSD4oKTsKICAgIHB1c2hpbnQgNjQwCiAgICBiemVybwogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NDkKICAgIC8vIHRyZWVbMF0gPSBuZXcgVWludDI1NigwKTsKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHJlcGxhY2UyIDAgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo1MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMTsgaSA8IFRSRUVfREVQVEg7IGkrKykgewogICAgaW50Y18xIC8vIDEKCmJvb3RzdHJhcE1lcmtsZVRyZWVfd2hpbGVfdG9wQDI6CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo1MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMTsgaSA8IFRSRUVfREVQVEg7IGkrKykgewogICAgZHVwCiAgICBwdXNoaW50IDIwCiAgICA8CiAgICBieiBib290c3RyYXBNZXJrbGVUcmVlX2FmdGVyX3doaWxlQDQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjU1CiAgICAvLyB0cmVlW2kgLSAxXS5ieXRlcy5jb25jYXQodHJlZVtpIC0gMV0uYnl0ZXMpLAogICAgZHVwbiAyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaW50Y18yIC8vIDMyCiAgICAqCiAgICBkaWcgMwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NTMtNTYKICAgIC8vIG9wLm1pbWMoCiAgICAvLyAgIG9wLk1pbWNDb25maWd1cmF0aW9ucy5CTFMxMl8zODFNcDExMSwKICAgIC8vICAgdHJlZVtpIC0gMV0uYnl0ZXMuY29uY2F0KHRyZWVbaSAtIDFdLmJ5dGVzKSwKICAgIC8vICksCiAgICBtaW1jIEJMUzEyXzM4MU1wMTExCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo1Mi01NwogICAgLy8gdHJlZVtpXSA9IG5ldyBVaW50MjU2KAogICAgLy8gICBvcC5taW1jKAogICAgLy8gICAgIG9wLk1pbWNDb25maWd1cmF0aW9ucy5CTFMxMl8zODFNcDExMSwKICAgIC8vICAgICB0cmVlW2kgLSAxXS5ieXRlcy5jb25jYXQodHJlZVtpIC0gMV0uYnl0ZXMpLAogICAgLy8gICApLAogICAgLy8gKTsKICAgIGRpZyAyCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIHN3YXAKICAgIHJlcGxhY2UzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnVyeSAzCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo1MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMTsgaSA8IFRSRUVfREVQVEg7IGkrKykgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBib290c3RyYXBNZXJrbGVUcmVlX3doaWxlX3RvcEAyCgpib290c3RyYXBNZXJrbGVUcmVlX2FmdGVyX3doaWxlQDQ6CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoyOQogICAgLy8gcm9vdENvdW50ZXIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiYyIgfSk7CiAgICBieXRlY18zIC8vICJjIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NjAKICAgIC8vIHRoaXMucm9vdENvdW50ZXIudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czozMwogICAgLy8gdHJlZUluZGV4ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogImkiIH0pOwogICAgYnl0ZWNfMCAvLyAiaSIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjYxCiAgICAvLyB0aGlzLnRyZWVJbmRleC52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjI3CiAgICAvLyByb290Q2FjaGUgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgUk9PVF9DQUNIRV9TSVpFPj4oeyBrZXk6ICJyIiB9KTsKICAgIGJ5dGVjXzEgLy8gInIiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo2MgogICAgLy8gdGhpcy5yb290Q2FjaGUuY3JlYXRlKCk7CiAgICBwdXNoaW50IDE2MDAKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzUKICAgIC8vIHplcm9IYXNoZXMgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgVFJFRV9ERVBUSD4+KHsga2V5OiAieiIgfSk7CiAgICBieXRlYyA2IC8vICJ6IgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NjMKICAgIC8vIHRoaXMuemVyb0hhc2hlcy52YWx1ZSA9IGNsb25lKHRyZWUpOwogICAgZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzEKICAgIC8vIHN1YnRyZWUgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgVFJFRV9ERVBUSD4+KHsga2V5OiAidCIgfSk7CiAgICBieXRlYyA0IC8vICJ0IgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3VidHJlZS52YWx1ZSA9IGNsb25lKHRyZWUpOwogICAgZGlnIDEKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjM4CiAgICAvLyBlcG9jaElkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogImUiIH0pOwogICAgYnl0ZWNfMiAvLyAiZSIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmVwb2NoSWQudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo2NwogICAgLy8gdGhpcy5sYXN0Q29tcHV0ZWRSb290LnZhbHVlID0gdHJlZVtUUkVFX0RFUFRIIC0gMV07CiAgICBwdXNoaW50IDYwOAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjM5CiAgICAvLyBsYXN0Q29tcHV0ZWRSb290ID0gR2xvYmFsU3RhdGU8VWludDI1Nj4oeyBrZXk6ICJsciIgfSk7CiAgICBieXRlYyA1IC8vICJsciIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjY3CiAgICAvLyB0aGlzLmxhc3RDb21wdXRlZFJvb3QudmFsdWUgPSB0cmVlW1RSRUVfREVQVEggLSAxXTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjc0CiAgICAvLyBib290c3RyYXBNZXJrbGVUcmVlKCkgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6Ok1pdGhyYXMuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjg2LTkyCiAgICAvLyBkZXBvc2l0KAogICAgLy8gICBzaWduYWxzOiBVaW50MjU2W10sCiAgICAvLyAgIF9wcm9vZjogUGxvbmtQcm9vZiwKICAgIC8vICAgX291dEhwa2U6IGJ5dGVzPHR5cGVvZiBIUEtFX1NJWkU+LAogICAgLy8gICBkZXBvc2l0OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHZlcmlmaWVyVHhuOiBndHhuLlRyYW5zYWN0aW9uLAogICAgLy8gKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50MjU2PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgbGVuCiAgICBwdXNoaW50IDEwNTYKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6OlBsb25rUHJvb2YKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGxlbgogICAgaW50YyA0IC8vIDI1MAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMjUwPgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMyAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6OTMKICAgIC8vIGFzc2VydCh2ZXJpZmllclR4bi5zZW5kZXIgPT09IHRoaXMuZGVwb3NpdFZlcmlmaWVyLnZhbHVlLm5hdGl2ZSk7CiAgICBndHhucyBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjYyCiAgICAvLyBkZXBvc2l0VmVyaWZpZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGtleTogImQiIH0pOwogICAgcHVzaGJ5dGVzICJkIgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo5MwogICAgLy8gYXNzZXJ0KHZlcmlmaWVyVHhuLnNlbmRlciA9PT0gdGhpcy5kZXBvc2l0VmVyaWZpZXIudmFsdWUubmF0aXZlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjk1CiAgICAvLyBjb25zdCBjb21taXRtZW50ID0gc2lnbmFsc1swXTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMzIKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6OTYKICAgIC8vIGNvbnN0IGFtb3VudCA9IG9wLmV4dHJhY3RVaW50NjQoc2lnbmFsc1sxXS5ieXRlcywgMjQpOwogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDM0IDMyCiAgICBwdXNoaW50IDI0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo5OAogICAgLy8gdGhpcy5hZGRDb21taXRtZW50KGNvbW1pdG1lbnQpOwogICAgc3dhcAogICAgY2FsbHN1YiBhZGRDb21taXRtZW50CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEwMC0xMDcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBkZXBvc2l0LAogICAgLy8gICB7CiAgICAvLyAgICAgYW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9LAogICAgLy8gICAiaW52YWxpZCBkZXBvc2l0IHR4biIsCiAgICAvLyApOwogICAgZGlnIDEKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEwNAogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTAwLTEwNwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIGRlcG9zaXQsCiAgICAvLyAgIHsKICAgIC8vICAgICBhbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0sCiAgICAvLyAgICJpbnZhbGlkIGRlcG9zaXQgdHhuIiwKICAgIC8vICk7CiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIGRlcG9zaXQgdHhuCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjg2LTkyCiAgICAvLyBkZXBvc2l0KAogICAgLy8gICBzaWduYWxzOiBVaW50MjU2W10sCiAgICAvLyAgIF9wcm9vZjogUGxvbmtQcm9vZiwKICAgIC8vICAgX291dEhwa2U6IGJ5dGVzPHR5cGVvZiBIUEtFX1NJWkU+LAogICAgLy8gICBkZXBvc2l0OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHZlcmlmaWVyVHhuOiBndHhuLlRyYW5zYWN0aW9uLAogICAgLy8gKSB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo6TWl0aHJhcy5zcGVuZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNwZW5kOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTEwLTExNgogICAgLy8gc3BlbmQoCiAgICAvLyAgIHNpZ25hbHM6IFVpbnQyNTZbXSwKICAgIC8vICAgX3Byb29mOiBQbG9ua1Byb29mLAogICAgLy8gICBfb3V0MEhwa2U6IGJ5dGVzPHR5cGVvZiBIUEtFX1NJWkU+LAogICAgLy8gICBfb3V0MUhwa2U6IGJ5dGVzPHR5cGVvZiBIUEtFX1NJWkU+LAogICAgLy8gICB2ZXJpZmllclR4bjogZ3R4bi5UcmFuc2FjdGlvbiwKICAgIC8vICkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDMyCiAgICAqCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDI1Nj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGxlbgogICAgcHVzaGludCAxMDU2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpQbG9ua1Byb29mCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBsZW4KICAgIGludGMgNCAvLyAyNTAKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDI1MD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGxlbgogICAgaW50YyA0IC8vIDI1MAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMjUwPgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjExOAogICAgLy8gdmVyaWZpZXJUeG4uc2VuZGVyID09PSB0aGlzLnNwZW5kVmVyaWZpZXIudmFsdWUubmF0aXZlLAogICAgZ3R4bnMgU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo2MwogICAgLy8gc3BlbmRWZXJpZmllciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsga2V5OiAicyIgfSk7CiAgICBwdXNoYnl0ZXMgInMiCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjExOAogICAgLy8gdmVyaWZpZXJUeG4uc2VuZGVyID09PSB0aGlzLnNwZW5kVmVyaWZpZXIudmFsdWUubmF0aXZlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjExNy0xMjAKICAgIC8vIGFzc2VydCgKICAgIC8vICAgdmVyaWZpZXJUeG4uc2VuZGVyID09PSB0aGlzLnNwZW5kVmVyaWZpZXIudmFsdWUubmF0aXZlLAogICAgLy8gICAic2VuZGVyIG9mIHZlcmlmaWVyIGNhbGwgbXVzdCBiZSB0aGUgc3BlbmQgdmVyaWZpZXIgbHNpZyIsCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIHNlbmRlciBvZiB2ZXJpZmllciBjYWxsIG11c3QgYmUgdGhlIHNwZW5kIHZlcmlmaWVyIGxzaWcKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTIyCiAgICAvLyBjb25zdCBvdXQwQ29tbWl0bWVudCA9IHNpZ25hbHNbMF07CiAgICBkdXAKICAgIGV4dHJhY3QgMiAzMgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxMjMKICAgIC8vIGNvbnN0IG91dDFDb21taXRtZW50ID0gc2lnbmFsc1sxXTsKICAgIGR1cAogICAgZXh0cmFjdCAzNCAzMgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxMjQKICAgIC8vIGNvbnN0IHV0eG9Sb290ID0gc2lnbmFsc1syXTsKICAgIGR1cAogICAgZXh0cmFjdCA2NiAzMgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxMjUKICAgIC8vIGNvbnN0IG51bGxpZmllciA9IHNpZ25hbHNbM107CiAgICBkdXAKICAgIGV4dHJhY3QgOTggMzIKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTI2CiAgICAvLyBjb25zdCB1dHhvRmVlID0gb3AuZXh0cmFjdFVpbnQ2NChzaWduYWxzWzRdLmJ5dGVzLCAyNCk7CiAgICBkaWcgMQogICAgZXh0cmFjdCAxMzAgMzIKICAgIHB1c2hpbnQgMjQKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAzCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEyNwogICAgLy8gY29uc3Qgc3BlbmRlciA9IHNpZ25hbHNbNV07CiAgICBleHRyYWN0IDE2MiAzMgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo2NgogICAgLy8gbnVsbGlmaWVycyA9IEJveE1hcDxVaW50MjU2LCBieXRlczwwPj4oeyBrZXlQcmVmaXg6ICJuIiB9KTsKICAgIHB1c2hieXRlcyAibiIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEyOQogICAgLy8gYXNzZXJ0KCF0aGlzLm51bGxpZmllcnMobnVsbGlmaWVyKS5leGlzdHMsICJOdWxsaWZpZXIgYWxyZWFkeSBleGlzdHMiKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gTnVsbGlmaWVyIGFscmVhZHkgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEzMQogICAgLy8gY29uc3QgcHJlTUJSID0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZTsKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxMzIKICAgIC8vIHRoaXMubnVsbGlmaWVycyhudWxsaWZpZXIpLmNyZWF0ZSgpOwogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IHBvc3RNQlIgPSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEzNQogICAgLy8gY29uc3QgbnVsbGlmaWVyTWJyOiB1aW50NjQgPSBwb3N0TUJSIC0gcHJlTUJSOwogICAgc3dhcAogICAgLQogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEzOAogICAgLy8gdXR4b0ZlZSA+PSBudWxsaWZpZXJNYnIsCiAgICB1bmNvdmVyIDIKICAgIDw9CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjEzNy0xNDAKICAgIC8vIGFzc2VydCgKICAgIC8vICAgdXR4b0ZlZSA+PSBudWxsaWZpZXJNYnIsCiAgICAvLyAgICJGZWUgZG9lcyBub3QgY292ZXIgbnVsbGlmaWVyIHN0b3JhZ2UgY29zdCIsCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIEZlZSBkb2VzIG5vdCBjb3ZlciBudWxsaWZpZXIgc3RvcmFnZSBjb3N0CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE0MwogICAgLy8gQmlnVWludChUeG4uc2VuZGVyLmJ5dGVzKSAlIEJMUzEyXzM4MV9TQ0FMQVJfTU9EVUxVUzsKICAgIHR4biBTZW5kZXIKICAgIHB1c2hieXRlcyAweDczZWRhNzUzMjk5ZDdkNDgzMzM5ZDgwODA5YTFkODA1NTNiZGE0MDJmZmZlNWJmZWZmZmZmZmZmMDAwMDAwMDEKICAgIGIlCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE0NQogICAgLy8gYXNzZXJ0KEJpZ1VpbnQoc3BlbmRlci5ieXRlcykgPT09IHNlbmRlckluU2NhbGFyRmllbGQsICJJbnZhbGlkIHNwZW5kZXIiKTsKICAgIGI9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgc3BlbmRlcgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTQ3CiAgICAvLyBlbnN1cmVCdWRnZXQoNzAwKTsgLy8gVE9ETzogRGV0ZXJtaW5lIGJ1ZGdldCBuZWVkZWQgaGVyZQogICAgcHVzaGludCA3MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjI3CiAgICAvLyByb290Q2FjaGUgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgUk9PVF9DQUNIRV9TSVpFPj4oeyBrZXk6ICJyIiB9KTsKICAgIGJ5dGVjXzEgLy8gInIiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxNDgKICAgIC8vIGZvciAoY29uc3QgdmFsaWRSb290IG9mIHRoaXMucm9vdENhY2hlLnZhbHVlKSB7CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18wIC8vIDAKCnNwZW5kX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjE0OAogICAgLy8gZm9yIChjb25zdCB2YWxpZFJvb3Qgb2YgdGhpcy5yb290Q2FjaGUudmFsdWUpIHsKICAgIGR1cAogICAgcHVzaGludCA1MAogICAgPAogICAgYnogc3BlbmRfYWZ0ZXJfZm9yQDYKICAgIGR1cAogICAgaW50Y18yIC8vIDMyCiAgICAqCiAgICBkaWcgMgogICAgc3dhcAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjE0OQogICAgLy8gaWYgKHJvb3QgPT09IHZhbGlkUm9vdCkgewogICAgZGlnIDUKICAgID09CiAgICBieiBzcGVuZF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjE1MAogICAgLy8gcmV0dXJuIHRydWU7CiAgICBpbnRjXzEgLy8gMQoKc3BlbmRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo6TWltY01lcmtsZS5pc1ZhbGlkUm9vdEA3OgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNDcKICAgIC8vIGFzc2VydCh0aGlzLmlzVmFsaWRSb290KHV0eG9Sb290KSwgIkludmFsaWQgVVRYTyByb290Iik7CiAgICBhc3NlcnQgLy8gSW52YWxpZCBVVFhPIHJvb3QKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTQ5CiAgICAvLyB0aGlzLmFkZENvbW1pdG1lbnQob3V0MENvbW1pdG1lbnQpOwogICAgZGlnIDYKICAgIGNhbGxzdWIgYWRkQ29tbWl0bWVudAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNTAKICAgIC8vIHRoaXMuYWRkQ29tbWl0bWVudChvdXQxQ29tbWl0bWVudCk7CiAgICBkaWcgNQogICAgY2FsbHN1YiBhZGRDb21taXRtZW50CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE1MgogICAgLy8gdGhpcy5tYXliZUNvdmVyRmVlKHV0eG9GZWUgLSBudWxsaWZpZXJNYnIpOwogICAgZGlnIDMKICAgIGRpZyAzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTU4LTE2MAogICAgLy8gY292ZXJhZ2VBbW91bnQgPT09IDAgfHwKICAgIC8vIC8vIFRoZXJlIGFyZSBubyBtb3JlIHR4bnMgaW4gdGhlIGdyb3VwCiAgICAvLyBHbG9iYWwuZ3JvdXBTaXplIDw9IFR4bi5ncm91cEluZGV4ICsgMSB8fAogICAgYnogc3BlbmRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpNaXRocmFzLm1heWJlQ292ZXJGZWVAMTgKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTYwCiAgICAvLyBHbG9iYWwuZ3JvdXBTaXplIDw9IFR4bi5ncm91cEluZGV4ICsgMSB8fAogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICArCiAgICA8PQogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNTgtMTYwCiAgICAvLyBjb3ZlcmFnZUFtb3VudCA9PT0gMCB8fAogICAgLy8gLy8gVGhlcmUgYXJlIG5vIG1vcmUgdHhucyBpbiB0aGUgZ3JvdXAKICAgIC8vIEdsb2JhbC5ncm91cFNpemUgPD0gVHhuLmdyb3VwSW5kZXggKyAxIHx8CiAgICBibnogc3BlbmRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpNaXRocmFzLm1heWJlQ292ZXJGZWVAMTgKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTYyCiAgICAvLyBndHhuLlRyYW5zYWN0aW9uKFR4bi5ncm91cEluZGV4ICsgMSkudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyAxCiAgICAhPQogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNTgtMTYyCiAgICAvLyBjb3ZlcmFnZUFtb3VudCA9PT0gMCB8fAogICAgLy8gLy8gVGhlcmUgYXJlIG5vIG1vcmUgdHhucyBpbiB0aGUgZ3JvdXAKICAgIC8vIEdsb2JhbC5ncm91cFNpemUgPD0gVHhuLmdyb3VwSW5kZXggKyAxIHx8CiAgICAvLyAvLyBUaGUgbmV4dCB0eG4gaXNuJ3QgYSBwYXltZW50CiAgICAvLyBndHhuLlRyYW5zYWN0aW9uKFR4bi5ncm91cEluZGV4ICsgMSkudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQKICAgIGJueiBzcGVuZF9hZnRlcl9pbmxpbmVkX2NvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6Ok1pdGhyYXMubWF5YmVDb3ZlckZlZUAxOAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNjcKICAgIC8vIGNvbnN0IGZlZVBheW1lbnQgPSBndHhuLlBheW1lbnRUeG4oVHhuLmdyb3VwSW5kZXggKyAxKTsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZHVwCiAgICBidXJ5IDkKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTcyCiAgICAvLyBmZWVQYXltZW50LnNlbmRlciA9PT0gVHhuLnNlbmRlciAmJgogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNzItMTc0CiAgICAvLyBmZWVQYXltZW50LnNlbmRlciA9PT0gVHhuLnNlbmRlciAmJgogICAgLy8gLy8gQ2hlY2tpbmcgdGhlIHJlY2VpdmVyIGlzIHByb2JhYmx5IHN1cGVyZmx1b3VzIHNpbmNlIHdlIGxhdGVyIGNoZWNrIGNsb3NlLCBidXQgbWlnaHQgYXMgd2VsbCBiZSBzYWZlCiAgICAvLyBmZWVQYXltZW50LnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcyAmJgogICAgYnogc3BlbmRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpNaXRocmFzLm1heWJlQ292ZXJGZWVAMTgKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTc0CiAgICAvLyBmZWVQYXltZW50LnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcyAmJgogICAgZGlnIDcKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTcyLTE3NAogICAgLy8gZmVlUGF5bWVudC5zZW5kZXIgPT09IFR4bi5zZW5kZXIgJiYKICAgIC8vIC8vIENoZWNraW5nIHRoZSByZWNlaXZlciBpcyBwcm9iYWJseSBzdXBlcmZsdW91cyBzaW5jZSB3ZSBsYXRlciBjaGVjayBjbG9zZSwgYnV0IG1pZ2h0IGFzIHdlbGwgYmUgc2FmZQogICAgLy8gZmVlUGF5bWVudC5yZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgJiYKICAgIGJ6IHNwZW5kX2FmdGVyX2lubGluZWRfY29udHJhY3RzL21pdGhyYXMuYWxnby50czo6TWl0aHJhcy5tYXliZUNvdmVyRmVlQDE4CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE3NgogICAgLy8gZmVlUGF5bWVudC5hbW91bnQgPT09IDAgJiYKICAgIGRpZyA3CiAgICBndHhucyBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTcyLTE3NgogICAgLy8gZmVlUGF5bWVudC5zZW5kZXIgPT09IFR4bi5zZW5kZXIgJiYKICAgIC8vIC8vIENoZWNraW5nIHRoZSByZWNlaXZlciBpcyBwcm9iYWJseSBzdXBlcmZsdW91cyBzaW5jZSB3ZSBsYXRlciBjaGVjayBjbG9zZSwgYnV0IG1pZ2h0IGFzIHdlbGwgYmUgc2FmZQogICAgLy8gZmVlUGF5bWVudC5yZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgJiYKICAgIC8vIC8vIEVuc3VyZSB0aGUgYW1vdW50IGlzIHplcm8gc28gd2UgY2FuIGJlIHN1cmUgdGhlIGFjY291bnQgaXMgc3BlbmRpbmcgTWl0aHJhcyBBTEdPIG9uIGFueXRoaW5nIGVsc2UKICAgIC8vIGZlZVBheW1lbnQuYW1vdW50ID09PSAwICYmCiAgICBibnogc3BlbmRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpNaXRocmFzLm1heWJlQ292ZXJGZWVAMTgKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTgwCiAgICAvLyBmZWVQYXltZW50LmNsb3NlUmVtYWluZGVyVG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkaWcgNwogICAgZ3R4bnMgQ2xvc2VSZW1haW5kZXJUbwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE3Mi0xODAKICAgIC8vIGZlZVBheW1lbnQuc2VuZGVyID09PSBUeG4uc2VuZGVyICYmCiAgICAvLyAvLyBDaGVja2luZyB0aGUgcmVjZWl2ZXIgaXMgcHJvYmFibHkgc3VwZXJmbHVvdXMgc2luY2Ugd2UgbGF0ZXIgY2hlY2sgY2xvc2UsIGJ1dCBtaWdodCBhcyB3ZWxsIGJlIHNhZmUKICAgIC8vIGZlZVBheW1lbnQucmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzICYmCiAgICAvLyAvLyBFbnN1cmUgdGhlIGFtb3VudCBpcyB6ZXJvIHNvIHdlIGNhbiBiZSBzdXJlIHRoZSBhY2NvdW50IGlzIHNwZW5kaW5nIE1pdGhyYXMgQUxHTyBvbiBhbnl0aGluZyBlbHNlCiAgICAvLyBmZWVQYXltZW50LmFtb3VudCA9PT0gMCAmJgogICAgLy8gLy8gQWx3YXlzIGNsb3NlIHRvIHRoZSBhcHAgdG8gZW5zdXJlIGl0IGdldHMgYmFjayBhbnkgZXhjZXNzIGZyb20gdGhlIHNlbmRlcgogICAgLy8gLy8gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBzaW5jZSB3ZSBhbHdheXMgc2VuZCBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gLy8gVGhpcyBpcyBhbHNvIGltcG9ydGFudCBmb3IgdGhlIGZ1dHVyZSB3aGVuIGZlZXMgbWF5IGJlIHJlZnVuZGFibGUKICAgIC8vIGZlZVBheW1lbnQuY2xvc2VSZW1haW5kZXJUbyA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGJ6IHNwZW5kX2FmdGVyX2lubGluZWRfY29udHJhY3RzL21pdGhyYXMuYWxnby50czo6TWl0aHJhcy5tYXliZUNvdmVyRmVlQDE4CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE4NC0xOTAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIC8vIFdlIGFsd2F5cyBhZGQgR2xvYmFsLm1pbkJhbGFuY2UgYXNzdW1pbmcgdGhlIGFjY291bnQgaGFzIDAgQUxHTwogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UgKyBjb3ZlcmFnZUFtb3VudCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxODYKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxODgKICAgIC8vIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UgKyBjb3ZlcmFnZUFtb3VudCwKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICBkaWcgMTAKICAgICsKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjE4NC0xODkKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIC8vIFdlIGFsd2F5cyBhZGQgR2xvYmFsLm1pbkJhbGFuY2UgYXNzdW1pbmcgdGhlIGFjY291bnQgaGFzIDAgQUxHTwogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UgKyBjb3ZlcmFnZUFtb3VudCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTg0LTE5MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgLy8gV2UgYWx3YXlzIGFkZCBHbG9iYWwubWluQmFsYW5jZSBhc3N1bWluZyB0aGUgYWNjb3VudCBoYXMgMCBBTEdPCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZSArIGNvdmVyYWdlQW1vdW50LAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAoKc3BlbmRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpNaXRocmFzLm1heWJlQ292ZXJGZWVAMTg6CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjExMC0xMTYKICAgIC8vIHNwZW5kKAogICAgLy8gICBzaWduYWxzOiBVaW50MjU2W10sCiAgICAvLyAgIF9wcm9vZjogUGxvbmtQcm9vZiwKICAgIC8vICAgX291dDBIcGtlOiBieXRlczx0eXBlb2YgSFBLRV9TSVpFPiwKICAgIC8vICAgX291dDFIcGtlOiBieXRlczx0eXBlb2YgSFBLRV9TSVpFPiwKICAgIC8vICAgdmVyaWZpZXJUeG46IGd0eG4uVHJhbnNhY3Rpb24sCiAgICAvLyApIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnNwZW5kX2FmdGVyX2lmX2Vsc2VANToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBzcGVuZF9mb3JfaGVhZGVyQDIKCnNwZW5kX2FmdGVyX2ZvckA2OgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTU0CiAgICAvLyByZXR1cm4gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxNDcKICAgIC8vIGFzc2VydCh0aGlzLmlzVmFsaWRSb290KHV0eG9Sb290KSwgIkludmFsaWQgVVRYTyByb290Iik7CiAgICBiIHNwZW5kX2FmdGVyX2lubGluZWRfY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6Ok1pbWNNZXJrbGUuaXNWYWxpZFJvb3RANwoKCi8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6Ok1pdGhyYXMuZW5zdXJlQnVkZ2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKZW5zdXJlQnVkZ2V0OgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czoxOTQKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQ6IHVpbnQ2NCkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTk1CiAgICAvLyBlbnN1cmVCdWRnZXQoYnVkZ2V0KTsKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6MTk0CiAgICAvLyBlbnN1cmVCdWRnZXQoYnVkZ2V0OiB1aW50NjQpIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjpNaXRocmFzLmFkZENvbW1pdG1lbnQoY29tbWl0bWVudDogYnl0ZXMpIC0+IHZvaWQ6CmFkZENvbW1pdG1lbnQ6CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjc4CiAgICAvLyBwcml2YXRlIGFkZENvbW1pdG1lbnQoY29tbWl0bWVudDogVWludDI1NikgewogICAgcHJvdG8gMSAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjcyCiAgICAvLyBlbnN1cmVCdWRnZXQoTUlNQ19PUENPREVfQ09TVCArIDcwMCAqIDIpOwogICAgcHVzaGludCAyMzQwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NzQKICAgIC8vIGxldCBpbmRleCA9IHRoaXMudHJlZUluZGV4LnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjMzCiAgICAvLyB0cmVlSW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiaSIgfSk7CiAgICBieXRlY18wIC8vICJpIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6NzQKICAgIC8vIGxldCBpbmRleCA9IHRoaXMudHJlZUluZGV4LnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo3NgogICAgLy8gaWYgKCEoaW5kZXggPCAyICoqIFRSRUVfREVQVEgpKSB7CiAgICBwdXNoaW50IDEwNDg1NzYKICAgIDwKICAgIGJueiBhZGRDb21taXRtZW50X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQodGhpcy50cmVlSW5kZXgudmFsdWUgPiAwLCAibm90aGluZyB0byBzZWFsIik7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzMKICAgIC8vIHRyZWVJbmRleCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICJpIiB9KTsKICAgIGJ5dGVjXzAgLy8gImkiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxMTgKICAgIC8vIGFzc2VydCh0aGlzLnRyZWVJbmRleC52YWx1ZSA+IDAsICJub3RoaW5nIHRvIHNlYWwiKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gbm90aGluZyB0byBzZWFsCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxMjAKICAgIC8vIGNvbnN0IGVwb2NoID0gdGhpcy5lcG9jaElkLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjM4CiAgICAvLyBlcG9jaElkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogImUiIH0pOwogICAgYnl0ZWNfMiAvLyAiZSIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjEyMAogICAgLy8gY29uc3QgZXBvY2ggPSB0aGlzLmVwb2NoSWQudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTIxCiAgICAvLyBjb25zdCBlcG9jaEJveEtleTogdWludDY0ID0gZXBvY2ggLyBFUE9DSFNfUEVSX0JPWDsKICAgIGR1cAogICAgaW50Y18yIC8vIDMyCiAgICAvCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxMjIKICAgIC8vIGNvbnN0IGluZGV4OiB1aW50NjQgPSBlcG9jaCAlIEVQT0NIU19QRVJfQk9YOwogICAgZGlnIDEKICAgIGludGNfMiAvLyAzMgogICAgJQogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTI0CiAgICAvLyBjb25zdCBlcG9jaEJveCA9IHRoaXMuZXBvY2hCb3hlcyhlcG9jaEJveEtleSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo0MS00MwogICAgLy8gZXBvY2hCb3hlcyA9IEJveE1hcDx1aW50NjQsIEZpeGVkQXJyYXk8VWludDI1NiwgdHlwZW9mIEVQT0NIU19QRVJfQk9YPj4oewogICAgLy8gICBrZXlQcmVmaXg6ICJlIiwKICAgIC8vIH0pOwogICAgYnl0ZWNfMiAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTI1CiAgICAvLyBlcG9jaEJveC5jcmVhdGUoKTsKICAgIGR1cAogICAgcHVzaGludCAxMDI0CiAgICBib3hfY3JlYXRlCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjEyNwogICAgLy8gZXBvY2hCb3gudmFsdWVbaW5kZXhdID0gdGhpcy5sYXN0Q29tcHV0ZWRSb290LnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjM5CiAgICAvLyBsYXN0Q29tcHV0ZWRSb290ID0gR2xvYmFsU3RhdGU8VWludDI1Nj4oeyBrZXk6ICJsciIgfSk7CiAgICBieXRlYyA1IC8vICJsciIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjEyNwogICAgLy8gZXBvY2hCb3gudmFsdWVbaW5kZXhdID0gdGhpcy5sYXN0Q29tcHV0ZWRSb290LnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgMgogICAgaW50Y18yIC8vIDMyCiAgICAqCiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTMwCiAgICAvLyB0aGlzLmVwb2NoSWQudmFsdWUgPSBlcG9jaCArIDE7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzgKICAgIC8vIGVwb2NoSWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiZSIgfSk7CiAgICBieXRlY18yIC8vICJlIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTMwCiAgICAvLyB0aGlzLmVwb2NoSWQudmFsdWUgPSBlcG9jaCArIDE7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzMKICAgIC8vIHRyZWVJbmRleCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICJpIiB9KTsKICAgIGJ5dGVjXzAgLy8gImkiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxMzEKICAgIC8vIHRoaXMudHJlZUluZGV4LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzUKICAgIC8vIHplcm9IYXNoZXMgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgVFJFRV9ERVBUSD4+KHsga2V5OiAieiIgfSk7CiAgICBieXRlYyA2IC8vICJ6IgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCB6ZXJvcyA9IGNsb25lKHRoaXMuemVyb0hhc2hlcy52YWx1ZSk7CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzEKICAgIC8vIHN1YnRyZWUgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgVFJFRV9ERVBUSD4+KHsga2V5OiAidCIgfSk7CiAgICBieXRlYyA0IC8vICJ0IgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTMzCiAgICAvLyB0aGlzLnN1YnRyZWUudmFsdWUgPSBjbG9uZSh6ZXJvcyk7CiAgICBkaWcgMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MjkKICAgIC8vIHJvb3RDb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogImMiIH0pOwogICAgYnl0ZWNfMyAvLyAiYyIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjEzNgogICAgLy8gdGhpcy5yb290Q291bnRlci52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjI3CiAgICAvLyByb290Q2FjaGUgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgUk9PVF9DQUNIRV9TSVpFPj4oeyBrZXk6ICJyIiB9KTsKICAgIGJ5dGVjXzEgLy8gInIiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxMzkKICAgIC8vIHRoaXMucm9vdENhY2hlLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoyNwogICAgLy8gcm9vdENhY2hlID0gQm94PEZpeGVkQXJyYXk8VWludDI1NiwgdHlwZW9mIFJPT1RfQ0FDSEVfU0laRT4+KHsga2V5OiAiciIgfSk7CiAgICBieXRlY18xIC8vICJyIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJvb3RDYWNoZS5jcmVhdGUoKTsKICAgIHB1c2hpbnQgMTYwMAogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxNDEKICAgIC8vIGNvbnN0IGVtcHR5Um9vdCA9IHplcm9zW1RSRUVfREVQVEggLSAxXTsKICAgIHB1c2hpbnQgNjA4CiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzkKICAgIC8vIGxhc3RDb21wdXRlZFJvb3QgPSBHbG9iYWxTdGF0ZTxVaW50MjU2Pih7IGtleTogImxyIiB9KTsKICAgIGJ5dGVjIDUgLy8gImxyIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmxhc3RDb21wdXRlZFJvb3QudmFsdWUgPSBlbXB0eVJvb3Q7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjE0MwogICAgLy8gdGhpcy5hZGRSb290KGVtcHR5Um9vdCk7CiAgICBjYWxsc3ViIGFkZFJvb3QKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjgwCiAgICAvLyBpbmRleCA9IHRoaXMudHJlZUluZGV4LnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjMzCiAgICAvLyB0cmVlSW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiaSIgfSk7CiAgICBieXRlY18wIC8vICJpIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6ODAKICAgIC8vIGluZGV4ID0gdGhpcy50cmVlSW5kZXgudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZnJhbWVfYnVyeSA1CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCgphZGRDb21taXRtZW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjgzCiAgICAvLyB0aGlzLnRyZWVJbmRleC52YWx1ZSArPSAxOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjMzCiAgICAvLyB0cmVlSW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiaSIgfSk7CiAgICBieXRlY18wIC8vICJpIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6ODMKICAgIC8vIHRoaXMudHJlZUluZGV4LnZhbHVlICs9IDE7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjMzCiAgICAvLyB0cmVlSW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiaSIgfSk7CiAgICBieXRlY18wIC8vICJpIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6ODMKICAgIC8vIHRoaXMudHJlZUluZGV4LnZhbHVlICs9IDE7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzEKICAgIC8vIHN1YnRyZWUgPSBCb3g8Rml4ZWRBcnJheTxVaW50MjU2LCB0eXBlb2YgVFJFRV9ERVBUSD4+KHsga2V5OiAidCIgfSk7CiAgICBieXRlYyA0IC8vICJ0IgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6ODcKICAgIC8vIGxldCBzdWJ0cmVlID0gY2xvbmUodGhpcy5zdWJ0cmVlLnZhbHVlKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgMgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjM1CiAgICAvLyB6ZXJvSGFzaGVzID0gQm94PEZpeGVkQXJyYXk8VWludDI1NiwgdHlwZW9mIFRSRUVfREVQVEg+Pih7IGtleTogInoiIH0pOwogICAgYnl0ZWMgNiAvLyAieiIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjg4CiAgICAvLyBjb25zdCB6ZXJvSGFzaGVzID0gY2xvbmUodGhpcy56ZXJvSGFzaGVzLnZhbHVlKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgMwogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjkwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgVFJFRV9ERVBUSDsgaSsrKSB7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAoKYWRkQ29tbWl0bWVudF93aGlsZV90b3BANDoKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjkwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgVFJFRV9ERVBUSDsgaSsrKSB7CiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCAyMAogICAgPAogICAgYnogYWRkQ29tbWl0bWVudF9hZnRlcl93aGlsZUA5CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo5MQogICAgLy8gaWYgKChpbmRleCAmIDEpID09PSAwKSB7CiAgICBmcmFtZV9kaWcgNQogICAgaW50Y18xIC8vIDEKICAgICYKICAgIGJueiBhZGRDb21taXRtZW50X2Vsc2VfYm9keUA3CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czo5MgogICAgLy8gc3VidHJlZVtpXSA9IGN1cnJlbnRIYXNoOwogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgZnJhbWVfZGlnIDIKICAgIGRpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciA0CiAgICByZXBsYWNlMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6OTQKICAgIC8vIHJpZ2h0ID0gemVyb0hhc2hlc1tpXTsKICAgIGZyYW1lX2RpZyAzCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxCgphZGRDb21taXRtZW50X2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjEwMwogICAgLy8gbGVmdC5ieXRlcy5jb25jYXQocmlnaHQuYnl0ZXMpLAogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTAxLTEwNAogICAgLy8gb3AubWltYygKICAgIC8vICAgb3AuTWltY0NvbmZpZ3VyYXRpb25zLkJMUzEyXzM4MU1wMTExLAogICAgLy8gICBsZWZ0LmJ5dGVzLmNvbmNhdChyaWdodC5ieXRlcyksCiAgICAvLyApLAogICAgbWltYyBCTFMxMl8zODFNcDExMQogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTAwLTEwNQogICAgLy8gY3VycmVudEhhc2ggPSBuZXcgVWludDI1NigKICAgIC8vICAgb3AubWltYygKICAgIC8vICAgICBvcC5NaW1jQ29uZmlndXJhdGlvbnMuQkxTMTJfMzgxTXAxMTEsCiAgICAvLyAgICAgbGVmdC5ieXRlcy5jb25jYXQocmlnaHQuYnl0ZXMpLAogICAgLy8gICApLAogICAgLy8gKTsKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTA3CiAgICAvLyBpbmRleCA+Pj0gMTsKICAgIGZyYW1lX2RpZyA1CiAgICBpbnRjXzEgLy8gMQogICAgc2hyCiAgICBmcmFtZV9idXJ5IDUKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjkwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgVFJFRV9ERVBUSDsgaSsrKSB7CiAgICBmcmFtZV9kaWcgNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBhZGRDb21taXRtZW50X3doaWxlX3RvcEA0CgphZGRDb21taXRtZW50X2Vsc2VfYm9keUA3OgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6OTYKICAgIC8vIGxlZnQgPSBzdWJ0cmVlW2ldOwogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgZnJhbWVfZGlnIDIKICAgIHN3YXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2RpZyAwCiAgICBiIGFkZENvbW1pdG1lbnRfYWZ0ZXJfaWZfZWxzZUA4CgphZGRDb21taXRtZW50X2FmdGVyX3doaWxlQDk6CiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czozMQogICAgLy8gc3VidHJlZSA9IEJveDxGaXhlZEFycmF5PFVpbnQyNTYsIHR5cGVvZiBUUkVFX0RFUFRIPj4oeyBrZXk6ICJ0IiB9KTsKICAgIGJ5dGVjIDQgLy8gInQiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxMTAKICAgIC8vIHRoaXMuc3VidHJlZS52YWx1ZSA9IGNsb25lKHN1YnRyZWUpOwogICAgZnJhbWVfZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjM5CiAgICAvLyBsYXN0Q29tcHV0ZWRSb290ID0gR2xvYmFsU3RhdGU8VWludDI1Nj4oeyBrZXk6ICJsciIgfSk7CiAgICBieXRlYyA1IC8vICJsciIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjExMQogICAgLy8gdGhpcy5sYXN0Q29tcHV0ZWRSb290LnZhbHVlID0gY3VycmVudEhhc2g7CiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTEyCiAgICAvLyB0aGlzLmFkZFJvb3QoY3VycmVudEhhc2gpOwogICAgY2FsbHN1YiBhZGRSb290CiAgICAvLyBjb250cmFjdHMvbWl0aHJhcy5hbGdvLnRzOjgyCiAgICAvLyBlcG9jaElkOiB0aGlzLmVwb2NoSWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MzgKICAgIC8vIGVwb2NoSWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiZSIgfSk7CiAgICBieXRlY18yIC8vICJlIgogICAgLy8gY29udHJhY3RzL21pdGhyYXMuYWxnby50czo4MgogICAgLy8gZXBvY2hJZDogdGhpcy5lcG9jaElkLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9taXRocmFzLmFsZ28udHM6ODAtODMKICAgIC8vIGVtaXQ8TmV3TGVhZj4oewogICAgLy8gICBsZWFmOiBjb21taXRtZW50LAogICAgLy8gICBlcG9jaElkOiB0aGlzLmVwb2NoSWQudmFsdWUsCiAgICAvLyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NGY5OGZkOCAvLyBtZXRob2QgIk5ld0xlYWYodWludDI1Nix1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjpNaW1jTWVya2xlLmFkZFJvb3Qocm9vdEhhc2g6IGJ5dGVzKSAtPiB2b2lkOgphZGRSb290OgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTY0CiAgICAvLyBwcm90ZWN0ZWQgYWRkUm9vdChyb290SGFzaDogVWludDI1Nik6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxNjUKICAgIC8vIGNvbnN0IGluZGV4OiB1aW50NjQgPSB0aGlzLnJvb3RDb3VudGVyLnZhbHVlICUgUk9PVF9DQUNIRV9TSVpFOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjI5CiAgICAvLyByb290Q291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICJjIiB9KTsKICAgIGJ5dGVjXzMgLy8gImMiCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxNjUKICAgIC8vIGNvbnN0IGluZGV4OiB1aW50NjQgPSB0aGlzLnJvb3RDb3VudGVyLnZhbHVlICUgUk9PVF9DQUNIRV9TSVpFOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGR1cAogICAgcHVzaGludCA1MAogICAgJQogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTY2CiAgICAvLyB0aGlzLnJvb3RDYWNoZS52YWx1ZVtpbmRleF0gPSByb290SGFzaDsKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MjcKICAgIC8vIHJvb3RDYWNoZSA9IEJveDxGaXhlZEFycmF5PFVpbnQyNTYsIHR5cGVvZiBST09UX0NBQ0hFX1NJWkU+Pih7IGtleTogInIiIH0pOwogICAgYnl0ZWNfMSAvLyAiciIKICAgIC8vIGNvbnRyYWN0cy9taW1jX21lcmtsZS5hbGdvLnRzOjE2NgogICAgLy8gdGhpcy5yb290Q2FjaGUudmFsdWVbaW5kZXhdID0gcm9vdEhhc2g7CiAgICBzd2FwCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9yZXBsYWNlCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoxNjgKICAgIC8vIHRoaXMucm9vdENvdW50ZXIudmFsdWUgKz0gMTsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvbWltY19tZXJrbGUuYWxnby50czoyOQogICAgLy8gcm9vdENvdW50ZXIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAiYyIgfSk7CiAgICBieXRlY18zIC8vICJjIgogICAgLy8gY29udHJhY3RzL21pbWNfbWVya2xlLmFsZ28udHM6MTY4CiAgICAvLyB0aGlzLnJvb3RDb3VudGVyLnZhbHVlICs9IDE7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEKICAgIHJldHVybgo=" }, "byteCode": { "approval": "CyAFAAEgAvoBJggBaQFyAWUBYwF0AmxyAXoDBoEBMRkURDEYQQAkggQEnHq/ZgT/1ABUBKi9CNwEIy7uEDYaAI4EAG4A7QFFAogAgAS0x31xNhoAjgEAPACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJweyHicHsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viTYaAUkVJBJENhoCSRUkEkSAAWRPAmeAAXNMZ4ACY3IyBmcjQ4HwqwEiiP+ZgYAFr4AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcACNJgRQMQQAgRwIjCSQLSwNJTwIkWElQ5gFLAiQLTF1FAyMIRQFC/9krImcoImcpgcAMuUgnBksCSU4CvycESwG/KiJngeAEJFgnBUxnI0M2GgFJIlkkCyUISwEVEkQ2GgIVgaAIEkQ2GgMVIQQSRDEWJQlJOBAjEkQxFiMJOAAigAFkZUQSREsBVwIgTwJXIiCBGFtMiAFiSwE4CBJMOAcyChIQRCNDgABJNhoBSSJZJAslCEsBFRJENhoCFYGgCBJENhoDFSEEEkQ2GgQVIQQSRDEWIwk4ACKAAXNlRBJESVcCIExJVyIgTElXQiBMSVdiIEsBV4IggRhbSU8CTwNXoiCAAW5PAlBJvUUBFEQyCnMBREwiuUgyCnMBREwJSU4DTwIORDEAgCBz7adTKZ19SDM52AgJodgFU72kAv/+W/7/////AAAAAaqoRIG8BSKI/h0pvkQiSYEyDEEAh0kkC0sCTCRYSwUSQQBxI0RLBogAhksFiACBSwNLAwlJRQpBAFgyBDEWIwgOQABOMRYjCDgQIxNAAEMxFiMISUUJSTgQIxJEOAAxABJBAC5LBzgHMgoSQQAkSwc4CEAAHUsHOAkyChJBABOxMQAyAUsKCLIIsgcjshAisgGzI0NJIwhFAUL/ciJC/4Q2GgFJFYEIEkQXIoj9eSNDigEAIkcDgACB6LYBIoj9ZyIoZUxJTwJEgYCAQAxAAFciKGVERCIqZURJJApLASQYTBYqTFBJgYAIuUgiJwVlRE8CJAtMuyMIKkxnKCJnJwa+RCcESwG/KyJnKbxIKYHADLlIgeAEJFgnBUsBZ4gAliIoZUyMBUQiKGVEIwgoTGcnBL5MjAJEJwa+TIwDRCKMBIv/jACLBIEUDEEARosFIxpAAC+LBCQLiwJLAYsASU4EXYwCiwNMJFhMjAGLAUxQ5gGMAIsFI5GMBYsEIwiMBEL/wosEJAuLAkwkWIwBiwBC/9knBIsCvycFiwBJTgJniAATIiplRBaL/0xQgARE+Y/YTFCwiYoBACIrZURJgTIYJAspTIv/uyMIK0xniQ==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [ { "name": "NewLeaf", "args": [ { "type": "uint256", "name": "leaf" }, { "type": "uint64", "name": "epochId" } ] } ], "templateVariables": {} }