{ "name": "PaymentRouter", "structs": {}, "methods": [ { "name": "createApplication", "args": [ { "type": "address", "name": "payTo" }, { "type": "uint64", "name": "usdcAsset" }, { "type": "uint64", "name": "carryIn" }, { "type": "address", "name": "opsAddress" }, { "type": "address", "name": "treasuryAddress" }, { "type": "uint64", "name": "payoutCap" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setCrediter", "args": [ { "type": "address", "name": "addr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "lowerPayoutCap", "args": [ { "type": "uint64", "name": "cap" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "announceChange", "args": [ { "type": "string", "name": "key" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "applyChange", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "refs", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "credit", "args": [ { "type": "uint64", "name": "batchSeq" }, { "type": "uint64", "name": "newTotal" }, { "type": "uint64", "name": "unattributedTotal" }, { "type": "uint64", "name": "treasuryExtra" }, { "type": "(address,uint64)[]", "name": "payouts" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "announceRelease", "args": [ { "type": "address", "name": "to" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "executeRelease", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 14, "bytes": 7 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "payTo": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "cHRv" }, "assetId": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXN0" }, "crediter": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Y3Jk" }, "lastBatchSeq": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YnNx" }, "poolIn": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGlu" }, "poolOut": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cG90" }, "declaredTotal": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGN0" }, "paidTotal": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGR0" }, "opsAddress": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "b3Bz" }, "treasuryAddress": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "dHJz" }, "payoutCap": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y2Fw" }, "capPeriodIndex": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y3Bp" }, "paidInPeriod": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGlw" }, "pendingKey": { "keyType": "AVMString", "valueType": "AVMString", "key": "cGt5" }, "pendingValue": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "cHZs" }, "pendingRound": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cHJu" }, "announcedTo": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YXRv" }, "announcedRound": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXJu" }, "retired": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmV0" }, "releaseDelay": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmRs" }, "releaseWindow": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cndu" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 3 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 760, 890 ], "errorMessage": "account opted into asset" }, { "pc": [ 367 ], "errorMessage": "address must be 32 bytes" }, { "pc": [ 235, 256, 311, 380, 944, 961 ], "errorMessage": "admin only" }, { "pc": [ 546 ], "errorMessage": "app is retired" }, { "pc": [ 762 ], "errorMessage": "batch total exceeds the balance of payTo" }, { "pc": [ 575 ], "errorMessage": "batchSeq must follow the last credited batch" }, { "pc": [ 264 ], "errorMessage": "cap can only be lowered" }, { "pc": [ 345 ], "errorMessage": "cap must be 8 bytes" }, { "pc": [ 407 ], "errorMessage": "change delay has not passed" }, { "pc": [ 415 ], "errorMessage": "change window has expired; announce again" }, { "pc": [ 260, 389, 398, 424, 452, 463, 544, 553, 569, 619, 666, 684, 694, 752, 757, 767, 784, 844, 854, 864, 872, 882, 887, 973, 998, 1003, 1037, 1042 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 897 ], "errorMessage": "declared total exceeds the USDC that arrived" }, { "pc": [ 602, 822 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 275, 293, 517 ], "errorMessage": "invalid array length header" }, { "pc": [ 283, 301 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 530 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 96, 122, 130, 229, 938 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 104, 113, 138, 249, 482, 491, 500, 509 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 393 ], "errorMessage": "no pending change" }, { "pc": [ 968 ], "errorMessage": "no release announced" }, { "pc": [ 555 ], "errorMessage": "not crediter" }, { "pc": [ 609 ], "errorMessage": "payout amount must be above 0" }, { "pc": [ 633 ], "errorMessage": "payout must not name payTo or the app" }, { "pc": [ 698 ], "errorMessage": "payouts exceed the cap of this period" }, { "pc": [ 795 ], "errorMessage": "pool payouts exceed the pool part" }, { "pc": [ 982 ], "errorMessage": "release delay has not passed" }, { "pc": [ 990 ], "errorMessage": "release window has expired; announce again" }, { "pc": [ 335 ], "errorMessage": "unknown change key" } ], "pcOffsetMethod": "cblocks" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgVE1QTF9SRUxFQVNFX0RFTEFZX1JPVU5EUyBUTVBMX1JFTEVBU0VfV0lORE9XX1JPVU5EUyAzMDAwMAogICAgYnl0ZWNibG9jayAiY2FwIiAicHRvIiAweCAicHZsIiAib3BzIiAiYXN0IiAidHJzIiAicGlwIiAicGt5IiAicHJuIiAicGluIiAicG90IiAiZGN0IiAicGR0IiAiY3BpIiAicmV0IiAiYnNxIiAiYXRvIiAiY3JkIiAiYXJuIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBQYXltZW50Um91dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDEyCiAgICBwdXNoYnl0ZXNzIDB4M2YxZmJhMDEgMHhjZDM1YmYxMyAweDdhZDMxM2Q1IDB4MTcxOGI4MDggMHhhODMxODdlYSAweDM0OTZmZWUwIDB4YWY1ZTc3NmMgMHhkYzY0ZGRmOSAvLyBtZXRob2QgInNldENyZWRpdGVyKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAibG93ZXJQYXlvdXRDYXAodWludDY0KXZvaWQiLCBtZXRob2QgImFubm91bmNlQ2hhbmdlKHN0cmluZyxieXRlW10pdm9pZCIsIG1ldGhvZCAiYXBwbHlDaGFuZ2UoKXZvaWQiLCBtZXRob2QgInJlZnMoKXZvaWQiLCBtZXRob2QgImNyZWRpdCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsKGFkZHJlc3MsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImFubm91bmNlUmVsZWFzZShhZGRyZXNzKXZvaWQiLCBtZXRob2QgImV4ZWN1dGVSZWxlYXNlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggc2V0Q3JlZGl0ZXIgbG93ZXJQYXlvdXRDYXAgYW5ub3VuY2VDaGFuZ2UgYXBwbHlDaGFuZ2UgbWFpbl9yZWZzX3JvdXRlQDcgY3JlZGl0IGFubm91bmNlUmVsZWFzZSBleGVjdXRlUmVsZWFzZQogICAgZXJyCgptYWluX3JlZnNfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIwMQogICAgLy8gcHVibGljIHJlZnMoKTogdm9pZCB7fQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfTm9PcEAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgUGF5bWVudFJvdXRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweDZlZWQ2MWNiIC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyx1aW50NjQsdWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTEyLTExOQogICAgLy8gcHVibGljIGNyZWF0ZUFwcGxpY2F0aW9uKAogICAgLy8gICBwYXlUbzogQWNjb3VudCwKICAgIC8vICAgdXNkY0Fzc2V0OiBBc3NldCwKICAgIC8vICAgY2FycnlJbjogdWludDY0LAogICAgLy8gICBvcHNBZGRyZXNzOiBBY2NvdW50LAogICAgLy8gICB0cmVhc3VyeUFkZHJlc3M6IEFjY291bnQsCiAgICAvLyAgIHBheW91dENhcDogdWludDY0LAogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gcGF5VG8gPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdwdG8nIH0pCiAgICBieXRlY18xIC8vICJwdG8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjAKICAgIC8vIHRoaXMucGF5VG8udmFsdWUgPSBwYXlUby5ieXRlcwogICAgdW5jb3ZlciA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIGFzc2V0SWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnYXN0JyB9KQogICAgYnl0ZWMgNSAvLyAiYXN0IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyB0aGlzLmFzc2V0SWQudmFsdWUgPSB1c2RjQXNzZXQuaWQKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBwb29sSW4gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAncGluJyB9KQogICAgYnl0ZWMgMTAgLy8gInBpbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gdGhpcy5wb29sSW4udmFsdWUgPSBjYXJyeUluCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwb29sT3V0ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BvdCcgfSkKICAgIGJ5dGVjIDExIC8vICJwb3QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIHRoaXMucG9vbE91dC52YWx1ZSA9IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZGVjbGFyZWRUb3RhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdkY3QnIH0pCiAgICBieXRlYyAxMiAvLyAiZGN0IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyB0aGlzLmRlY2xhcmVkVG90YWwudmFsdWUgPSBjYXJyeUluCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gcGFpZFRvdGFsID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BkdCcgfSkKICAgIGJ5dGVjIDEzIC8vICJwZHQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHRoaXMucGFpZFRvdGFsLnZhbHVlID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBvcHNBZGRyZXNzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnb3BzJyB9KQogICAgYnl0ZWMgNCAvLyAib3BzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTI2CiAgICAvLyB0aGlzLm9wc0FkZHJlc3MudmFsdWUgPSBvcHNBZGRyZXNzLmJ5dGVzCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gdHJlYXN1cnlBZGRyZXNzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAndHJzJyB9KQogICAgYnl0ZWMgNiAvLyAidHJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyB0aGlzLnRyZWFzdXJ5QWRkcmVzcy52YWx1ZSA9IHRyZWFzdXJ5QWRkcmVzcy5ieXRlcwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIHBheW91dENhcCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdjYXAnIH0pCiAgICBieXRlY18wIC8vICJjYXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMucGF5b3V0Q2FwLnZhbHVlID0gcGF5b3V0Q2FwCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLmNhcFBlcmlvZEluZGV4LnZhbHVlID0gR2xvYmFsLnJvdW5kIC8gQ0FQX1BFUklPRF9ST1VORFMKICAgIGdsb2JhbCBSb3VuZAogICAgaW50YyA2IC8vIDMwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY2FwUGVyaW9kSW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnY3BpJyB9KQogICAgYnl0ZWMgMTQgLy8gImNwaSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gdGhpcy5jYXBQZXJpb2RJbmRleC52YWx1ZSA9IEdsb2JhbC5yb3VuZCAvIENBUF9QRVJJT0RfUk9VTkRTCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTAKICAgIC8vIHBhaWRJblBlcmlvZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdwaXAnIH0pCiAgICBieXRlYyA3IC8vICJwaXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIHRoaXMucGFpZEluUGVyaW9kLnZhbHVlID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBwZW5kaW5nS2V5ID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogJ3BreScgfSkKICAgIGJ5dGVjIDggLy8gInBreSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gdGhpcy5wZW5kaW5nS2V5LnZhbHVlID0gJycKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gcGVuZGluZ1ZhbHVlID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAncHZsJyB9KQogICAgYnl0ZWNfMyAvLyAicHZsIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyB0aGlzLnBlbmRpbmdWYWx1ZS52YWx1ZSA9IEJ5dGVzKCkKICAgIGJ5dGVjXzIgLy8gMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gcGVuZGluZ1JvdW5kID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BybicgfSkKICAgIGJ5dGVjIDkgLy8gInBybiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5wZW5kaW5nUm91bmQudmFsdWUgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyByZWxlYXNlRGVsYXkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAncmRsJyB9KQogICAgcHVzaGJ5dGVzICJyZGwiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzQKICAgIC8vIHRoaXMucmVsZWFzZURlbGF5LnZhbHVlID0gVGVtcGxhdGVWYXI8dWludDY0PignUkVMRUFTRV9ERUxBWV9ST1VORFMnKQogICAgaW50YyA0IC8vIFRNUExfUkVMRUFTRV9ERUxBWV9ST1VORFMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJlbGVhc2VXaW5kb3cgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAncnduJyB9KQogICAgcHVzaGJ5dGVzICJyd24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIHRoaXMucmVsZWFzZVdpbmRvdy52YWx1ZSA9IFRlbXBsYXRlVmFyPHVpbnQ2ND4oJ1JFTEVBU0VfV0lORE9XX1JPVU5EUycpCiAgICBpbnRjIDUgLy8gVE1QTF9SRUxFQVNFX1dJTkRPV19ST1VORFMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMTItMTE5CiAgICAvLyBwdWJsaWMgY3JlYXRlQXBwbGljYXRpb24oCiAgICAvLyAgIHBheVRvOiBBY2NvdW50LAogICAgLy8gICB1c2RjQXNzZXQ6IEFzc2V0LAogICAgLy8gICBjYXJyeUluOiB1aW50NjQsCiAgICAvLyAgIG9wc0FkZHJlc3M6IEFjY291bnQsCiAgICAvLyAgIHRyZWFzdXJ5QWRkcmVzczogQWNjb3VudCwKICAgIC8vICAgcGF5b3V0Q2FwOiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5zZXRDcmVkaXRlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldENyZWRpdGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBwdWJsaWMgc2V0Q3JlZGl0ZXIoYWRkcjogQWNjb3VudCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNDAKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmJ5dGVzID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MuYnl0ZXMsICdhZG1pbiBvbmx5JykKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gY3JlZGl0ZXIgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdjcmQnIH0pCiAgICBieXRlYyAxOCAvLyAiY3JkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyB0aGlzLmNyZWRpdGVyLnZhbHVlID0gYWRkci5ieXRlcwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gcHVibGljIHNldENyZWRpdGVyKGFkZHI6IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5sb3dlclBheW91dENhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cmxvd2VyUGF5b3V0Q2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTQ2CiAgICAvLyBwdWJsaWMgbG93ZXJQYXlvdXRDYXAoY2FwOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcy5ieXRlcywgJ2FkbWluIG9ubHknKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gYXNzZXJ0KGNhcCA8PSB0aGlzLnBheW91dENhcC52YWx1ZSwgJ2NhcCBjYW4gb25seSBiZSBsb3dlcmVkJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gcGF5b3V0Q2FwID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2NhcCcgfSkKICAgIGJ5dGVjXzAgLy8gImNhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gYXNzZXJ0KGNhcCA8PSB0aGlzLnBheW91dENhcC52YWx1ZSwgJ2NhcCBjYW4gb25seSBiZSBsb3dlcmVkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBjYXAgY2FuIG9ubHkgYmUgbG93ZXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIHBheW91dENhcCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdjYXAnIH0pCiAgICBieXRlY18wIC8vICJjYXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMucGF5b3V0Q2FwLnZhbHVlID0gY2FwCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTQ2CiAgICAvLyBwdWJsaWMgbG93ZXJQYXlvdXRDYXAoY2FwOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo6UGF5bWVudFJvdXRlci5hbm5vdW5jZUNoYW5nZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFubm91bmNlQ2hhbmdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBwdWJsaWMgYW5ub3VuY2VDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBieXRlcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcy5ieXRlcywgJ2FkbWluIG9ubHknKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8ga2V5ID09PSBDSEFOR0VfQ0FQIHx8IGtleSA9PT0gQ0hBTkdFX09QUyB8fCBrZXkgPT09IENIQU5HRV9UUkVBU1VSWSwKICAgIGJ5dGVjXzAgLy8gImNhcCIKICAgID09CiAgICBkdXAKICAgIGJueiBhbm5vdW5jZUNoYW5nZV9ib29sX3RydWVANAogICAgZGlnIDIKICAgIGJ5dGVjIDQgLy8gIm9wcyIKICAgID09CiAgICBibnogYW5ub3VuY2VDaGFuZ2VfYm9vbF90cnVlQDQKICAgIGRpZyAyCiAgICBieXRlYyA2IC8vICJ0cnMiCiAgICA9PQogICAgYnogYW5ub3VuY2VDaGFuZ2VfYm9vbF9mYWxzZUA1Cgphbm5vdW5jZUNoYW5nZV9ib29sX3RydWVANDoKICAgIGludGNfMSAvLyAxCgphbm5vdW5jZUNoYW5nZV9ib29sX21lcmdlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNTctMTYwCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIGtleSA9PT0gQ0hBTkdFX0NBUCB8fCBrZXkgPT09IENIQU5HRV9PUFMgfHwga2V5ID09PSBDSEFOR0VfVFJFQVNVUlksCiAgICAvLyAgICd1bmtub3duIGNoYW5nZSBrZXknLAogICAgLy8gKQogICAgYXNzZXJ0IC8vIHVua25vd24gY2hhbmdlIGtleQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBpZiAoa2V5ID09PSBDSEFOR0VfQ0FQKSB7CiAgICBkdXAKICAgIGJ6IGFubm91bmNlQ2hhbmdlX2Vsc2VfYm9keUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGFzc2VydCh2YWx1ZS5sZW5ndGggPT09IFVpbnQ2NCg4KSwgJ2NhcCBtdXN0IGJlIDggYnl0ZXMnKQogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gY2FwIG11c3QgYmUgOCBieXRlcwoKYW5ub3VuY2VDaGFuZ2VfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIHBlbmRpbmdLZXkgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiAncGt5JyB9KQogICAgYnl0ZWMgOCAvLyAicGt5IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyB0aGlzLnBlbmRpbmdLZXkudmFsdWUgPSBrZXkKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTQKICAgIC8vIHBlbmRpbmdWYWx1ZSA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B2bCcgfSkKICAgIGJ5dGVjXzMgLy8gInB2bCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5wZW5kaW5nVmFsdWUudmFsdWUgPSB2YWx1ZQogICAgZGlnIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gcGVuZGluZ1JvdW5kID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BybicgfSkKICAgIGJ5dGVjIDkgLy8gInBybiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gdGhpcy5wZW5kaW5nUm91bmQudmFsdWUgPSBHbG9iYWwucm91bmQKICAgIGdsb2JhbCBSb3VuZAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE1NQogICAgLy8gcHVibGljIGFubm91bmNlQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogYnl0ZXMpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFubm91bmNlQ2hhbmdlX2Vsc2VfYm9keUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyBhc3NlcnQodmFsdWUubGVuZ3RoID09PSBBRERSRVNTX0xFTkdUSCwgJ2FkZHJlc3MgbXVzdCBiZSAzMiBieXRlcycpCiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gYWRkcmVzcyBtdXN0IGJlIDMyIGJ5dGVzCiAgICBiIGFubm91bmNlQ2hhbmdlX2FmdGVyX2lmX2Vsc2VAOQoKYW5ub3VuY2VDaGFuZ2VfYm9vbF9mYWxzZUA1OgogICAgaW50Y18wIC8vIDAKICAgIGIgYW5ub3VuY2VDaGFuZ2VfYm9vbF9tZXJnZUA2CgoKLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OlBheW1lbnRSb3V0ZXIuYXBwbHlDaGFuZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgphcHBseUNoYW5nZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcy5ieXRlcywgJ2FkbWluIG9ubHknKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3Qga2V5OiBzdHJpbmcgPSB0aGlzLnBlbmRpbmdLZXkudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gcGVuZGluZ0tleSA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6ICdwa3knIH0pCiAgICBieXRlYyA4IC8vICJwa3kiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxNzYKICAgIC8vIGNvbnN0IGtleTogc3RyaW5nID0gdGhpcy5wZW5kaW5nS2V5LnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3NwogICAgLy8gYXNzZXJ0KGtleSAhPT0gJycsICdubyBwZW5kaW5nIGNoYW5nZScpCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gbm8gcGVuZGluZyBjaGFuZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gY29uc3QgYXBwbGljYWJsZUZyb206IHVpbnQ2NCA9IHRoaXMucGVuZGluZ1JvdW5kLnZhbHVlICsgZGVsYXlSb3VuZHMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gcGVuZGluZ1JvdW5kID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BybicgfSkKICAgIGJ5dGVjIDkgLy8gInBybiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gY29uc3QgYXBwbGljYWJsZUZyb206IHVpbnQ2NCA9IHRoaXMucGVuZGluZ1JvdW5kLnZhbHVlICsgZGVsYXlSb3VuZHMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjIDQgLy8gVE1QTF9SRUxFQVNFX0RFTEFZX1JPVU5EUwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBhc3NlcnQoR2xvYmFsLnJvdW5kID49IGFwcGxpY2FibGVGcm9tLCAnY2hhbmdlIGRlbGF5IGhhcyBub3QgcGFzc2VkJykKICAgIGdsb2JhbCBSb3VuZAogICAgZGlnIDEKICAgID49CiAgICBhc3NlcnQgLy8gY2hhbmdlIGRlbGF5IGhhcyBub3QgcGFzc2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIEdsb2JhbC5yb3VuZCA8IGFwcGxpY2FibGVGcm9tICsgd2luZG93Um91bmRzLAogICAgZ2xvYmFsIFJvdW5kCiAgICBzd2FwCiAgICBpbnRjIDUgLy8gVE1QTF9SRUxFQVNFX1dJTkRPV19ST1VORFMKICAgICsKICAgIDwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE4Mi0xODUKICAgIC8vIGFzc2VydCgKICAgIC8vICAgR2xvYmFsLnJvdW5kIDwgYXBwbGljYWJsZUZyb20gKyB3aW5kb3dSb3VuZHMsCiAgICAvLyAgICdjaGFuZ2Ugd2luZG93IGhhcyBleHBpcmVkOyBhbm5vdW5jZSBhZ2FpbicsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gY2hhbmdlIHdpbmRvdyBoYXMgZXhwaXJlZDsgYW5ub3VuY2UgYWdhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE4NgogICAgLy8gaWYgKGtleSA9PT0gQ0hBTkdFX0NBUCkgewogICAgYnl0ZWNfMCAvLyAiY2FwIgogICAgPT0KICAgIGJ6IGFwcGx5Q2hhbmdlX2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxODcKICAgIC8vIHRoaXMucGF5b3V0Q2FwLnZhbHVlID0gb3AuYnRvaSh0aGlzLnBlbmRpbmdWYWx1ZS52YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gcGVuZGluZ1ZhbHVlID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAncHZsJyB9KQogICAgYnl0ZWNfMyAvLyAicHZsIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyB0aGlzLnBheW91dENhcC52YWx1ZSA9IG9wLmJ0b2kodGhpcy5wZW5kaW5nVmFsdWUudmFsdWUpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIHBheW91dENhcCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdjYXAnIH0pCiAgICBieXRlY18wIC8vICJjYXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxODcKICAgIC8vIHRoaXMucGF5b3V0Q2FwLnZhbHVlID0gb3AuYnRvaSh0aGlzLnBlbmRpbmdWYWx1ZS52YWx1ZSkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphcHBseUNoYW5nZV9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gcGVuZGluZ0tleSA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6ICdwa3knIH0pCiAgICBieXRlYyA4IC8vICJwa3kiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxOTMKICAgIC8vIHRoaXMucGVuZGluZ0tleS52YWx1ZSA9ICcnCiAgICBieXRlY18yIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTQKICAgIC8vIHBlbmRpbmdWYWx1ZSA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B2bCcgfSkKICAgIGJ5dGVjXzMgLy8gInB2bCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gdGhpcy5wZW5kaW5nVmFsdWUudmFsdWUgPSBCeXRlcygpCiAgICBieXRlY18yIC8vIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHBlbmRpbmdSb3VuZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdwcm4nIH0pCiAgICBieXRlYyA5IC8vICJwcm4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIHRoaXMucGVuZGluZ1JvdW5kLnZhbHVlID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gcHVibGljIGFwcGx5Q2hhbmdlKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXBwbHlDaGFuZ2VfZWxzZV9ib2R5QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxODgKICAgIC8vIH0gZWxzZSBpZiAoa2V5ID09PSBDSEFOR0VfT1BTKSB7CiAgICBkdXAKICAgIGJ5dGVjIDQgLy8gIm9wcyIKICAgID09CiAgICBieiBhcHBseUNoYW5nZV9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTg5CiAgICAvLyB0aGlzLm9wc0FkZHJlc3MudmFsdWUgPSB0aGlzLnBlbmRpbmdWYWx1ZS52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjk0CiAgICAvLyBwZW5kaW5nVmFsdWUgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdwdmwnIH0pCiAgICBieXRlY18zIC8vICJwdmwiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIHRoaXMub3BzQWRkcmVzcy52YWx1ZSA9IHRoaXMucGVuZGluZ1ZhbHVlLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIG9wc0FkZHJlc3MgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdvcHMnIH0pCiAgICBieXRlYyA0IC8vICJvcHMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIHRoaXMub3BzQWRkcmVzcy52YWx1ZSA9IHRoaXMucGVuZGluZ1ZhbHVlLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBhcHBseUNoYW5nZV9hZnRlcl9pZl9lbHNlQDcKCmFwcGx5Q2hhbmdlX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyB0aGlzLnRyZWFzdXJ5QWRkcmVzcy52YWx1ZSA9IHRoaXMucGVuZGluZ1ZhbHVlLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTQKICAgIC8vIHBlbmRpbmdWYWx1ZSA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B2bCcgfSkKICAgIGJ5dGVjXzMgLy8gInB2bCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gdGhpcy50cmVhc3VyeUFkZHJlc3MudmFsdWUgPSB0aGlzLnBlbmRpbmdWYWx1ZS52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB0cmVhc3VyeUFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICd0cnMnIH0pCiAgICBieXRlYyA2IC8vICJ0cnMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHRoaXMudHJlYXN1cnlBZGRyZXNzLnZhbHVlID0gdGhpcy5wZW5kaW5nVmFsdWUudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGFwcGx5Q2hhbmdlX2FmdGVyX2lmX2Vsc2VANwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjpQYXltZW50Um91dGVyLmNyZWRpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWRpdDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICIiCiAgICBkdXBuIDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIwOC0yMTQKICAgIC8vIHB1YmxpYyBjcmVkaXQoCiAgICAvLyAgIGJhdGNoU2VxOiB1aW50NjQsCiAgICAvLyAgIG5ld1RvdGFsOiB1aW50NjQsCiAgICAvLyAgIHVuYXR0cmlidXRlZFRvdGFsOiB1aW50NjQsCiAgICAvLyAgIHRyZWFzdXJ5RXh0cmE6IHVpbnQ2NCwKICAgIC8vICAgcGF5b3V0czogUGF5b3V0W10sCiAgICAvLyApOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjpQYXlvdXQ+CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIGNvbnN0IGlzUmV0aXJlZDogYm9vbGVhbiA9IHRoaXMucmV0aXJlZC5oYXNWYWx1ZSA/IHRoaXMucmV0aXJlZC52YWx1ZSA6IGZhbHNlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyByZXRpcmVkID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBrZXk6ICdyZXQnIH0pCiAgICBieXRlYyAxNSAvLyAicmV0IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjE1CiAgICAvLyBjb25zdCBpc1JldGlyZWQ6IGJvb2xlYW4gPSB0aGlzLnJldGlyZWQuaGFzVmFsdWUgPyB0aGlzLnJldGlyZWQudmFsdWUgOiBmYWxzZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYnogY3JlZGl0X3Rlcm5hcnlfZmFsc2VAMwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gcmV0aXJlZCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsga2V5OiAncmV0JyB9KQogICAgYnl0ZWMgMTUgLy8gInJldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIxNQogICAgLy8gY29uc3QgaXNSZXRpcmVkOiBib29sZWFuID0gdGhpcy5yZXRpcmVkLmhhc1ZhbHVlID8gdGhpcy5yZXRpcmVkLnZhbHVlIDogZmFsc2UKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCgpjcmVkaXRfdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBhc3NlcnQoIWlzUmV0aXJlZCwgJ2FwcCBpcyByZXRpcmVkJykKICAgICEKICAgIGFzc2VydCAvLyBhcHAgaXMgcmV0aXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjE3CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5jcmVkaXRlci52YWx1ZSwgJ25vdCBjcmVkaXRlcicpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIGNyZWRpdGVyID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnY3JkJyB9KQogICAgYnl0ZWMgMTggLy8gImNyZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIxNwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuY3JlZGl0ZXIudmFsdWUsICdub3QgY3JlZGl0ZXInKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gbm90IGNyZWRpdGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGNvbnN0IGxhc3Q6IHVpbnQ2NCA9IHRoaXMubGFzdEJhdGNoU2VxLmhhc1ZhbHVlID8gdGhpcy5sYXN0QmF0Y2hTZXEudmFsdWUgOiBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gbGFzdEJhdGNoU2VxID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2JzcScgfSkKICAgIGJ5dGVjIDE2IC8vICJic3EiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGNvbnN0IGxhc3Q6IHVpbnQ2NCA9IHRoaXMubGFzdEJhdGNoU2VxLmhhc1ZhbHVlID8gdGhpcy5sYXN0QmF0Y2hTZXEudmFsdWUgOiBVaW50NjQoMCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJ6IGNyZWRpdF90ZXJuYXJ5X2ZhbHNlQDYKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gbGFzdEJhdGNoU2VxID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2JzcScgfSkKICAgIGJ5dGVjIDE2IC8vICJic3EiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGNvbnN0IGxhc3Q6IHVpbnQ2NCA9IHRoaXMubGFzdEJhdGNoU2VxLmhhc1ZhbHVlID8gdGhpcy5sYXN0QmF0Y2hTZXEudmFsdWUgOiBVaW50NjQoMCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCgpjcmVkaXRfdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjIwCiAgICAvLyBhc3NlcnQoYmF0Y2hTZXEgPT09IGxhc3QgKyBVaW50NjQoMSksICdiYXRjaFNlcSBtdXN0IGZvbGxvdyB0aGUgbGFzdCBjcmVkaXRlZCBiYXRjaCcpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZGlnIDYKICAgID09CiAgICBhc3NlcnQgLy8gYmF0Y2hTZXEgbXVzdCBmb2xsb3cgdGhlIGxhc3QgY3JlZGl0ZWQgYmF0Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gbGV0IHBheW91dHNUb3RhbDogdWludDY0ID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjIzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSBVaW50NjQoMCk7IGkgPCBwYXlvdXRzLmxlbmd0aDsgaSA9IGkgKyBVaW50NjQoMSkpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDE1CgpjcmVkaXRfd2hpbGVfdG9wQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IFVpbnQ2NCgwKTsgaSA8IHBheW91dHMubGVuZ3RoOyBpID0gaSArIFVpbnQ2NCgxKSkgewogICAgZGlnIDE0CiAgICBkaWcgMQogICAgPAogICAgYnogY3JlZGl0X2FmdGVyX3doaWxlQDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMjQKICAgIC8vIGFzc2VydChwYXlvdXRzW2ldLmFtb3VudCA+IFVpbnQ2NCgwKSwgJ3BheW91dCBhbW91bnQgbXVzdCBiZSBhYm92ZSAwJykKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDE1CiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICAqCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18zIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDkKICAgIGFzc2VydCAvLyBwYXlvdXQgYW1vdW50IG11c3QgYmUgYWJvdmUgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBwYXlvdXRzW2ldLnJlY2VpdmVyLmJ5dGVzICE9PSB0aGlzLnBheVRvLnZhbHVlICYmCiAgICBleHRyYWN0IDAgMzIKICAgIGR1cAogICAgYnVyeSAxOAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBwYXlUbyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B0bycgfSkKICAgIGJ5dGVjXzEgLy8gInB0byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gcGF5b3V0c1tpXS5yZWNlaXZlci5ieXRlcyAhPT0gdGhpcy5wYXlUby52YWx1ZSAmJgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMjYtMjI3CiAgICAvLyBwYXlvdXRzW2ldLnJlY2VpdmVyLmJ5dGVzICE9PSB0aGlzLnBheVRvLnZhbHVlICYmCiAgICAvLyAgIHBheW91dHNbaV0ucmVjZWl2ZXIgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgYnogY3JlZGl0X2Jvb2xfZmFsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gcGF5b3V0c1tpXS5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBkaWcgMTYKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjI2LTIyNwogICAgLy8gcGF5b3V0c1tpXS5yZWNlaXZlci5ieXRlcyAhPT0gdGhpcy5wYXlUby52YWx1ZSAmJgogICAgLy8gICBwYXlvdXRzW2ldLnJlY2VpdmVyICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGJ6IGNyZWRpdF9ib29sX2ZhbHNlQDEyCiAgICBpbnRjXzEgLy8gMQoKY3JlZGl0X2Jvb2xfbWVyZ2VAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMjUtMjI5CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHBheW91dHNbaV0ucmVjZWl2ZXIuYnl0ZXMgIT09IHRoaXMucGF5VG8udmFsdWUgJiYKICAgIC8vICAgICBwYXlvdXRzW2ldLnJlY2VpdmVyICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgJ3BheW91dCBtdXN0IG5vdCBuYW1lIHBheVRvIG9yIHRoZSBhcHAnLAogICAgLy8gKQogICAgYXNzZXJ0IC8vIHBheW91dCBtdXN0IG5vdCBuYW1lIHBheVRvIG9yIHRoZSBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIzMAogICAgLy8gcGF5b3V0c1RvdGFsID0gcGF5b3V0c1RvdGFsICsgcGF5b3V0c1tpXS5hbW91bnQKICAgIGRpZyA5CiAgICBkaWcgNwogICAgKwogICAgYnVyeSAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjIzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSBVaW50NjQoMCk7IGkgPCBwYXlvdXRzLmxlbmd0aDsgaSA9IGkgKyBVaW50NjQoMSkpIHsKICAgIGRpZyAxNAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMTUKICAgIGIgY3JlZGl0X3doaWxlX3RvcEA4CgpjcmVkaXRfYm9vbF9mYWxzZUAxMjoKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWRpdF9ib29sX21lcmdlQDEzCgpjcmVkaXRfYWZ0ZXJfd2hpbGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNjcKICAgIC8vIGNvbnN0IHBlcmlvZDogdWludDY0ID0gR2xvYmFsLnJvdW5kIC8gQ0FQX1BFUklPRF9ST1VORFMKICAgIGdsb2JhbCBSb3VuZAogICAgaW50YyA2IC8vIDMwMDAwCiAgICAvCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gaWYgKHBlcmlvZCAhPT0gdGhpcy5jYXBQZXJpb2RJbmRleC52YWx1ZSkgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBjYXBQZXJpb2RJbmRleCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdjcGknIH0pCiAgICBieXRlYyAxNCAvLyAiY3BpIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyBpZiAocGVyaW9kICE9PSB0aGlzLmNhcFBlcmlvZEluZGV4LnZhbHVlKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIT0KICAgIGJ6IGNyZWRpdF9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY2FwUGVyaW9kSW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnY3BpJyB9KQogICAgYnl0ZWMgMTQgLy8gImNwaSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI2OQogICAgLy8gdGhpcy5jYXBQZXJpb2RJbmRleC52YWx1ZSA9IHBlcmlvZAogICAgZGlnIDkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gcGFpZEluUGVyaW9kID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BpcCcgfSkKICAgIGJ5dGVjIDcgLy8gInBpcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI3MAogICAgLy8gdGhpcy5wYWlkSW5QZXJpb2QudmFsdWUgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY3JlZGl0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIGNvbnN0IHBhaWQ6IHVpbnQ2NCA9IHRoaXMucGFpZEluUGVyaW9kLnZhbHVlICsgcGF5b3V0c1RvdGFsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OTAKICAgIC8vIHBhaWRJblBlcmlvZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdwaXAnIH0pCiAgICBieXRlYyA3IC8vICJwaXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIGNvbnN0IHBhaWQ6IHVpbnQ2NCA9IHRoaXMucGFpZEluUGVyaW9kLnZhbHVlICsgcGF5b3V0c1RvdGFsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDEwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gYXNzZXJ0KHBhaWQgPD0gdGhpcy5wYXlvdXRDYXAudmFsdWUsICdwYXlvdXRzIGV4Y2VlZCB0aGUgY2FwIG9mIHRoaXMgcGVyaW9kJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gcGF5b3V0Q2FwID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2NhcCcgfSkKICAgIGJ5dGVjXzAgLy8gImNhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gYXNzZXJ0KHBhaWQgPD0gdGhpcy5wYXlvdXRDYXAudmFsdWUsICdwYXlvdXRzIGV4Y2VlZCB0aGUgY2FwIG9mIHRoaXMgcGVyaW9kJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBwYXlvdXRzIGV4Y2VlZCB0aGUgY2FwIG9mIHRoaXMgcGVyaW9kCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gcGFpZEluUGVyaW9kID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BpcCcgfSkKICAgIGJ5dGVjIDcgLy8gInBpcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gdGhpcy5wYWlkSW5QZXJpb2QudmFsdWUgPSBwYWlkCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCBvcHNBbW91bnQ6IHVpbnQ2NCA9IChuZXdUb3RhbCAqIE9QU19TSEFSRV9OVU0pIC8gU1BMSVRfREVOCiAgICBkaWcgNQogICAgZHVwCiAgICBwdXNoaW50IDUwIC8vIDUwCiAgICAqCiAgICBwdXNoaW50IDEwMDAgLy8gMTAwMAogICAgLwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMzUKICAgIC8vIGNvbnN0IGN1dEFtb3VudDogdWludDY0ID0gKG5ld1RvdGFsICogVFJFQVNVUllfQ1VUX05VTSkgLyBTUExJVF9ERU4KICAgIGR1cAogICAgcHVzaGludCAyMDAgLy8gMjAwCiAgICAqCiAgICBwdXNoaW50IDEwMDAgLy8gMTAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBjb25zdCB0cmVhc3VyeUFtb3VudDogdWludDY0ID0gY3V0QW1vdW50ICsgdHJlYXN1cnlFeHRyYSArIHVuYXR0cmlidXRlZFRvdGFsCiAgICBkdXAKICAgIGRpZyA3CiAgICBkdXAKICAgIGNvdmVyIDYKICAgICsKICAgIGRpZyA5CiAgICArCiAgICBkdXAKICAgIGJ1cnkgMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gY29uc3QgYmF0Y2hUb3RhbDogdWludDY0ID0gb3BzQW1vdW50ICsgdHJlYXN1cnlBbW91bnQgKyBwYXlvdXRzVG90YWwKICAgIGRpZyAzCiAgICArCiAgICBkaWcgNAogICAgKwogICAgZHVwCiAgICBidXJ5IDIyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIGNvbnN0IGhlbGRCZWZvcmU6IHVpbnQ2NCA9IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSkuYmFsYW5jZShBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBwYXlUbyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B0bycgfSkKICAgIGJ5dGVjXzEgLy8gInB0byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gY29uc3QgaGVsZEJlZm9yZTogdWludDY0ID0gQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKS5iYWxhbmNlKEFjY291bnQodGhpcy5wYXlUby52YWx1ZSkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBhc3NldElkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2FzdCcgfSkKICAgIGJ5dGVjIDUgLy8gImFzdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gY29uc3QgaGVsZEJlZm9yZTogdWludDY0ID0gQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKS5iYWxhbmNlKEFjY291bnQodGhpcy5wYXlUby52YWx1ZSkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNDAKICAgIC8vIGFzc2VydChiYXRjaFRvdGFsIDw9IGhlbGRCZWZvcmUsICdiYXRjaCB0b3RhbCBleGNlZWRzIHRoZSBiYWxhbmNlIG9mIHBheVRvJykKICAgIDw9CiAgICBhc3NlcnQgLy8gYmF0Y2ggdG90YWwgZXhjZWVkcyB0aGUgYmFsYW5jZSBvZiBwYXlUbwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjQyCiAgICAvLyBjb25zdCBuZXdQb29sSW46IHVpbnQ2NCA9IHRoaXMucG9vbEluLnZhbHVlICsgKG5ld1RvdGFsIC0gb3BzQW1vdW50IC0gY3V0QW1vdW50KQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBwb29sSW4gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAncGluJyB9KQogICAgYnl0ZWMgMTAgLy8gInBpbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gY29uc3QgbmV3UG9vbEluOiB1aW50NjQgPSB0aGlzLnBvb2xJbi52YWx1ZSArIChuZXdUb3RhbCAtIG9wc0Ftb3VudCAtIGN1dEFtb3VudCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgLQogICAgdW5jb3ZlciAyCiAgICAtCiAgICArCiAgICBkdXAKICAgIGJ1cnkgMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI0MwogICAgLy8gY29uc3QgbmV3UG9vbE91dDogdWludDY0ID0gdGhpcy5wb29sT3V0LnZhbHVlICsgcGF5b3V0c1RvdGFsICsgdHJlYXN1cnlFeHRyYQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwb29sT3V0ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BvdCcgfSkKICAgIGJ5dGVjIDExIC8vICJwb3QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNDMKICAgIC8vIGNvbnN0IG5ld1Bvb2xPdXQ6IHVpbnQ2NCA9IHRoaXMucG9vbE91dC52YWx1ZSArIHBheW91dHNUb3RhbCArIHRyZWFzdXJ5RXh0cmEKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBidXJ5IDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIGFzc2VydChuZXdQb29sT3V0IDw9IG5ld1Bvb2xJbiwgJ3Bvb2wgcGF5b3V0cyBleGNlZWQgdGhlIHBvb2wgcGFydCcpCiAgICA+PQogICAgYXNzZXJ0IC8vIHBvb2wgcGF5b3V0cyBleGNlZWQgdGhlIHBvb2wgcGFydAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSBVaW50NjQoMCk7IGkgPCBwYXlvdXRzLmxlbmd0aDsgaSA9IGkgKyBVaW50NjQoMSkpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDE0CgpjcmVkaXRfd2hpbGVfdG9wQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSBVaW50NjQoMCk7IGkgPCBwYXlvdXRzLmxlbmd0aDsgaSA9IGkgKyBVaW50NjQoMSkpIHsKICAgIGRpZyAxMwogICAgZGlnIDEKICAgIDwKICAgIGJ6IGNyZWRpdF9hZnRlcl93aGlsZUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyB0aGlzLnBheShwYXlvdXRzW2ldLnJlY2VpdmVyLCBwYXlvdXRzW2ldLmFtb3VudCkKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDE0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIHN3YXAKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNDYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IFVpbnQ2NCgwKTsgaSA8IHBheW91dHMubGVuZ3RoOyBpID0gaSArIFVpbnQ2NCgxKSkgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMTQKICAgIGIgY3JlZGl0X3doaWxlX3RvcEAxNQoKY3JlZGl0X2FmdGVyX3doaWxlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB0aGlzLnBheShBY2NvdW50KHRoaXMub3BzQWRkcmVzcy52YWx1ZSksIG9wc0Ftb3VudCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gb3BzQWRkcmVzcyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ29wcycgfSkKICAgIGJ5dGVjIDQgLy8gIm9wcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gdGhpcy5wYXkoQWNjb3VudCh0aGlzLm9wc0FkZHJlc3MudmFsdWUpLCBvcHNBbW91bnQpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDExCiAgICBjYWxsc3ViIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyB0aGlzLnBheShBY2NvdW50KHRoaXMudHJlYXN1cnlBZGRyZXNzLnZhbHVlKSwgdHJlYXN1cnlBbW91bnQpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIHRyZWFzdXJ5QWRkcmVzcyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3RycycgfSkKICAgIGJ5dGVjIDYgLy8gInRycyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5wYXkoQWNjb3VudCh0aGlzLnRyZWFzdXJ5QWRkcmVzcy52YWx1ZSksIHRyZWFzdXJ5QW1vdW50KQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA4CiAgICBjYWxsc3ViIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBjb25zdCBuZXdQYWlkOiB1aW50NjQgPSB0aGlzLnBhaWRUb3RhbC52YWx1ZSArIGJhdGNoVG90YWwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gcGFpZFRvdGFsID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BkdCcgfSkKICAgIGJ5dGVjIDEzIC8vICJwZHQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIGNvbnN0IG5ld1BhaWQ6IHVpbnQ2NCA9IHRoaXMucGFpZFRvdGFsLnZhbHVlICsgYmF0Y2hUb3RhbAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxNgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBjb25zdCBuZXdEZWNsYXJlZDogdWludDY0ID0gdGhpcy5kZWNsYXJlZFRvdGFsLnZhbHVlICsgbmV3VG90YWwgKyB1bmF0dHJpYnV0ZWRUb3RhbAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBkZWNsYXJlZFRvdGFsID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2RjdCcgfSkKICAgIGJ5dGVjIDEyIC8vICJkY3QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIGNvbnN0IG5ld0RlY2xhcmVkOiB1aW50NjQgPSB0aGlzLmRlY2xhcmVkVG90YWwudmFsdWUgKyBuZXdUb3RhbCArIHVuYXR0cmlidXRlZFRvdGFsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIGRpZyA1CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGNvbnN0IGhlbGRBZnRlcjogdWludDY0ID0gQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKS5iYWxhbmNlKEFjY291bnQodGhpcy5wYXlUby52YWx1ZSkpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHBheVRvID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsga2V5OiAncHRvJyB9KQogICAgYnl0ZWNfMSAvLyAicHRvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBjb25zdCBoZWxkQWZ0ZXI6IHVpbnQ2NCA9IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSkuYmFsYW5jZShBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdhc3QnIH0pCiAgICBieXRlYyA1IC8vICJhc3QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGNvbnN0IGhlbGRBZnRlcjogdWludDY0ID0gQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKS5iYWxhbmNlKEFjY291bnQodGhpcy5wYXlUby52YWx1ZSkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGFzc2VydChuZXdEZWNsYXJlZCA8PSBoZWxkQWZ0ZXIgKyBuZXdQYWlkLCAnZGVjbGFyZWQgdG90YWwgZXhjZWVkcyB0aGUgVVNEQyB0aGF0IGFycml2ZWQnKQogICAgZGlnIDIKICAgICsKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIGRlY2xhcmVkIHRvdGFsIGV4Y2VlZHMgdGhlIFVTREMgdGhhdCBhcnJpdmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcG9vbEluID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ3BpbicgfSkKICAgIGJ5dGVjIDEwIC8vICJwaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMucG9vbEluLnZhbHVlID0gbmV3UG9vbEluCiAgICBkaWcgMTUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcG9vbE91dCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdwb3QnIH0pCiAgICBieXRlYyAxMSAvLyAicG90IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLnBvb2xPdXQudmFsdWUgPSBuZXdQb29sT3V0CiAgICBkaWcgMTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZGVjbGFyZWRUb3RhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdkY3QnIH0pCiAgICBieXRlYyAxMiAvLyAiZGN0IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjU5CiAgICAvLyB0aGlzLmRlY2xhcmVkVG90YWwudmFsdWUgPSBuZXdEZWNsYXJlZAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyBwYWlkVG90YWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAncGR0JyB9KQogICAgYnl0ZWMgMTMgLy8gInBkdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI2MAogICAgLy8gdGhpcy5wYWlkVG90YWwudmFsdWUgPSBuZXdQYWlkCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGxhc3RCYXRjaFNlcSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdic3EnIH0pCiAgICBieXRlYyAxNiAvLyAiYnNxIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyB0aGlzLmxhc3RCYXRjaFNlcS52YWx1ZSA9IGJhdGNoU2VxCiAgICBkaWcgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjIwOC0yMTQKICAgIC8vIHB1YmxpYyBjcmVkaXQoCiAgICAvLyAgIGJhdGNoU2VxOiB1aW50NjQsCiAgICAvLyAgIG5ld1RvdGFsOiB1aW50NjQsCiAgICAvLyAgIHVuYXR0cmlidXRlZFRvdGFsOiB1aW50NjQsCiAgICAvLyAgIHRyZWFzdXJ5RXh0cmE6IHVpbnQ2NCwKICAgIC8vICAgcGF5b3V0czogUGF5b3V0W10sCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmNyZWRpdF90ZXJuYXJ5X2ZhbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGNvbnN0IGxhc3Q6IHVpbnQ2NCA9IHRoaXMubGFzdEJhdGNoU2VxLmhhc1ZhbHVlID8gdGhpcy5sYXN0QmF0Y2hTZXEudmFsdWUgOiBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWRpdF90ZXJuYXJ5X21lcmdlQDcKCmNyZWRpdF90ZXJuYXJ5X2ZhbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIGNvbnN0IGlzUmV0aXJlZDogYm9vbGVhbiA9IHRoaXMucmV0aXJlZC5oYXNWYWx1ZSA/IHRoaXMucmV0aXJlZC52YWx1ZSA6IGZhbHNlCiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVkaXRfdGVybmFyeV9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OlBheW1lbnRSb3V0ZXIuYW5ub3VuY2VSZWxlYXNlW3JvdXRpbmddKCkgLT4gdm9pZDoKYW5ub3VuY2VSZWxlYXNlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6Mjk5CiAgICAvLyBwdWJsaWMgYW5ub3VuY2VSZWxlYXNlKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjMwMAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIuYnl0ZXMgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcy5ieXRlcywgJ2FkbWluIG9ubHknKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYW5ub3VuY2VkVG8gPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdhdG8nIH0pCiAgICBieXRlYyAxNyAvLyAiYXRvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzAxCiAgICAvLyB0aGlzLmFubm91bmNlZFRvLnZhbHVlID0gdG8uYnl0ZXMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIGFubm91bmNlZFJvdW5kID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2FybicgfSkKICAgIGJ5dGVjIDE5IC8vICJhcm4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIHRoaXMuYW5ub3VuY2VkUm91bmQudmFsdWUgPSBHbG9iYWwucm91bmQKICAgIGdsb2JhbCBSb3VuZAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gcHVibGljIGFubm91bmNlUmVsZWFzZSh0bzogQWNjb3VudCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjpQYXltZW50Um91dGVyLmV4ZWN1dGVSZWxlYXNlW3JvdXRpbmddKCkgLT4gdm9pZDoKZXhlY3V0ZVJlbGVhc2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmJ5dGVzID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MuYnl0ZXMsICdhZG1pbiBvbmx5JykKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydCh0aGlzLmFubm91bmNlZFRvLmhhc1ZhbHVlLCAnbm8gcmVsZWFzZSBhbm5vdW5jZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYW5ub3VuY2VkVG8gPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdhdG8nIH0pCiAgICBieXRlYyAxNyAvLyAiYXRvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzEyCiAgICAvLyBhc3NlcnQodGhpcy5hbm5vdW5jZWRUby5oYXNWYWx1ZSwgJ25vIHJlbGVhc2UgYW5ub3VuY2VkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBubyByZWxlYXNlIGFubm91bmNlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBjb25zdCBleGVjdXRhYmxlRnJvbTogdWludDY0ID0gdGhpcy5hbm5vdW5jZWRSb3VuZC52YWx1ZSArIGRlbGF5Um91bmRzCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBhbm5vdW5jZWRSb3VuZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdhcm4nIH0pCiAgICBieXRlYyAxOSAvLyAiYXJuIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBjb25zdCBleGVjdXRhYmxlRnJvbTogdWludDY0ID0gdGhpcy5hbm5vdW5jZWRSb3VuZC52YWx1ZSArIGRlbGF5Um91bmRzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50YyA0IC8vIFRNUExfUkVMRUFTRV9ERUxBWV9ST1VORFMKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gYXNzZXJ0KEdsb2JhbC5yb3VuZCA+PSBleGVjdXRhYmxlRnJvbSwgJ3JlbGVhc2UgZGVsYXkgaGFzIG5vdCBwYXNzZWQnKQogICAgZ2xvYmFsIFJvdW5kCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyByZWxlYXNlIGRlbGF5IGhhcyBub3QgcGFzc2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIEdsb2JhbC5yb3VuZCA8IGV4ZWN1dGFibGVGcm9tICsgd2luZG93Um91bmRzLAogICAgZ2xvYmFsIFJvdW5kCiAgICBzd2FwCiAgICBpbnRjIDUgLy8gVE1QTF9SRUxFQVNFX1dJTkRPV19ST1VORFMKICAgICsKICAgIDwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjMxNy0zMjAKICAgIC8vIGFzc2VydCgKICAgIC8vICAgR2xvYmFsLnJvdW5kIDwgZXhlY3V0YWJsZUZyb20gKyB3aW5kb3dSb3VuZHMsCiAgICAvLyAgICdyZWxlYXNlIHdpbmRvdyBoYXMgZXhwaXJlZDsgYW5ub3VuY2UgYWdhaW4nLAogICAgLy8gKQogICAgYXNzZXJ0IC8vIHJlbGVhc2Ugd2luZG93IGhhcyBleHBpcmVkOyBhbm5vdW5jZSBhZ2FpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyByZXRpcmVkID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBrZXk6ICdyZXQnIH0pCiAgICBieXRlYyAxNSAvLyAicmV0IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzIyCiAgICAvLyB0aGlzLnJldGlyZWQudmFsdWUgPSB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gY29uc3QgcGF5VG9BY2N0ID0gQWNjb3VudCh0aGlzLnBheVRvLnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBwYXlUbyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B0bycgfSkKICAgIGJ5dGVjXzEgLy8gInB0byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gY29uc3QgcGF5VG9BY2N0ID0gQWNjb3VudCh0aGlzLnBheVRvLnZhbHVlKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgcmVsZWFzZVRvID0gQWNjb3VudCh0aGlzLmFubm91bmNlZFRvLnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYW5ub3VuY2VkVG8gPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdhdG8nIH0pCiAgICBieXRlYyAxNyAvLyAiYXRvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzI1CiAgICAvLyBjb25zdCByZWxlYXNlVG8gPSBBY2NvdW50KHRoaXMuYW5ub3VuY2VkVG8udmFsdWUpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzI2LTMzNAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiBwYXlUb0FjY3QsCiAgICAvLyAgICAgcmVjZWl2ZXI6IHBheVRvQWNjdCwKICAgIC8vICAgICBhbW91bnQ6IFVpbnQ2NCgwKSwKICAgIC8vICAgICByZWtleVRvOiByZWxlYXNlVG8sCiAgICAvLyAgICAgZmVlOiBVaW50NjQoMCksCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMzAKICAgIC8vIGFtb3VudDogVWludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkdXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMjYtMzMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHBheVRvQWNjdCwKICAgIC8vICAgICByZWNlaXZlcjogcGF5VG9BY2N0LAogICAgLy8gICAgIGFtb3VudDogVWludDY0KDApLAogICAgLy8gICAgIHJla2V5VG86IHJlbGVhc2VUbywKICAgIC8vICAgICBmZWU6IFVpbnQ2NCgwKSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIGZlZTogVWludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czozMjYtMzM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHBheVRvQWNjdCwKICAgIC8vICAgICByZWNlaXZlcjogcGF5VG9BY2N0LAogICAgLy8gICAgIGFtb3VudDogVWludDY0KDApLAogICAgLy8gICAgIHJla2V5VG86IHJlbGVhc2VUbywKICAgIC8vICAgICBmZWU6IFVpbnQ2NCgwKSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBwdWJsaWMgZXhlY3V0ZVJlbGVhc2UoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6OlBheW1lbnRSb3V0ZXIucGF5KHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CnBheToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gcHJpdmF0ZSBwYXkocmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gaWYgKGFtb3VudCA9PT0gVWludDY0KDApKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJueiBwYXlfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGF5bWVudF9yb3V0ZXIvY29udHJhY3QuYWxnby50czoyODEKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgpwYXlfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjgzLTI5MQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiBBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKSwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogVWludDY0KDApLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4NQogICAgLy8gc2VuZGVyOiBBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBwYXlUbyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogJ3B0bycgfSkKICAgIGJ5dGVjXzEgLy8gInB0byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4NQogICAgLy8gc2VuZGVyOiBBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4NgogICAgLy8geGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBhc3NldElkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogJ2FzdCcgfSkKICAgIGJ5dGVjIDUgLy8gImFzdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4NgogICAgLy8geGZlckFzc2V0OiBBc3NldCh0aGlzLmFzc2V0SWQudmFsdWUpLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BheW1lbnRfcm91dGVyL2NvbnRyYWN0LmFsZ28udHM6MjgzLTI5MAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiBBY2NvdW50KHRoaXMucGF5VG8udmFsdWUpLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQodGhpcy5hc3NldElkLnZhbHVlKSwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogVWludDY0KDApLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4OQogICAgLy8gZmVlOiBVaW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wYXltZW50X3JvdXRlci9jb250cmFjdC5hbGdvLnRzOjI4My0yOTEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogQWNjb3VudCh0aGlzLnBheVRvLnZhbHVlKSwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KHRoaXMuYXNzZXRJZC52YWx1ZSksCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IFVpbnQ2NCgwKSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAHAAEIIAAAsOoBJhQDY2FwA3B0bwADcHZsA29wcwNhc3QDdHJzA3BpcANwa3kDcHJuA3BpbgNwb3QDZGN0A3BkdANjcGkDcmV0A2JzcQNhdG8DY3JkA2FybjEZFEQxGEEAQoIIBD8fugEEzTW/EwR60xPVBBcYuAgEqDGH6gQ0lv7gBK9ed2wE3GTd+TYaAI4IAJYAqgDGAS8AAQGPA1sDdAAjQ4AEbu1hyzYaAI4BAAEANhoBSRUlEkQ2GgJJFSQSRBc2GgNJFSQSRBc2GgRJFSUSRDYaBUkVJRJENhoGSRUkEkQXKU8GZycFTwVnJwpLBGcnCyJnJwxPBGcnDSJnJwRPA2cnBk8CZyhMZzIGIQYKJw5MZycHImcnCCpnKypnJwkiZ4ADcmRsIQRngANyd24hBWcjQzYaAUkVJRJEMQAyCRJEJxJMZyNDNhoBSRUkEkQXMQAyCRJEIihlREsBD0QoTGcjQzYaAUkiWYECCEsBFRJEVwIASTYaAkkiWYECCEsBFRJEVwIATDEAMgkSRCgSSUAAEEsCJwQSQAAISwInBhJBACUjRElBABZLARUkEkQnCEsDZytLAmcnCTIGZyNDSwEVJRJEQv/nIkL/2DEAMgkSRCInCGVMSU8CREkqE0QiJwllRCEECDIGSwEPRDIGTCEFCAxEKBJBABUiK2VEFyhMZycIKmcrKmcnCSJnI0NJJwQSQQALIitlRCcETGdC/+EiK2VEJwZMZ0L/1iIqRwk2GgFJFSQSRBc2GgJJFSQSRBc2GgNJFSQSRBc2GgRJFSQSRBc2GgVHAiJZSU4CgSgLgQIITBUSRCInD2VFAUEBgyInD2VEFEQxACInEmVEEkQiJxBlRQFBAWYiJxBlRCMISwYSRCJFCiJFD0sOSwEMQQBASwFXAgBLD4EoC4EoWEklW0lFCURXACBJRRIiKWVEE0EAGksQMgoTQQASI0RLCUsHCEUKSw4jCEUPQv+8IkL/6zIGIQYKSUUKIicOZUQTQQAJJw5LCWcnByJnIicHZURLCklOAggiKGVESwEPRCcHTGdLBUmBMguB6AcKSU4CRQ5JgcgBC4HoBwpJSwdJTgYISwkISUUOSwMISwQISUUWIillRCInBWVEcABEDkQiJwplRE8CTwMJTwIJCElFECInC2VETwIITwIISUUOD0QiRQ5LDUsBDEEAIUsBVwIASw5JTgKBKAuBKFhJVwAgTCVbiAC/IwhFDkL/1yInBGVESwuIAK4iJwZlREsIiACkIicNZURLEAgiJwxlREsGCEsFCCIpZUQiJwVlRHAAREsCCEsBD0QnCksPZycLSw5nJwxMZycNTGcnEEsGZyNDIkL+myJC/n42GgFJFSUSRDEAMgkSRCcRTGcnEzIGZyNDMQAyCRJEIicRZUUBRCInE2VEIQQIMgZLAQ9EMgZMIQUIDEQnDyNnIillRCInEWVEsbIgIrIISbIHsgAjshAisgGzI0OKAgCL/0AAAYmxIillRCInBWVEi/+yEov+shSyEbIAgQSyECKyAbOJ", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": { "RELEASE_DELAY_ROUNDS": { "type": "AVMUint64" }, "RELEASE_WINDOW_ROUNDS": { "type": "AVMUint64" } } }