{ "name": "ShieldedPool", "desc": "", "methods": [ { "name": "createApplication", "args": [ { "name": "assetId", "type": "uint64" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] } }, { "name": "shield", "desc": "Shield — deposit funds, create a shielded UTXO note.", "args": [ { "name": "commitment", "type": "byte[]" }, { "name": "amount", "type": "uint64" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "transfer", "desc": "Transfer — consume input notes, create output notes (2-in/2-out).\nZK proof in LogicSig verifies membership, nullifiers, conservation, range proofs.", "args": [ { "name": "nullifierHash1", "type": "byte[]" }, { "name": "nullifierHash2", "type": "byte[]" }, { "name": "outputCommitment1", "type": "byte[]" }, { "name": "outputCommitment2", "type": "byte[]" }, { "name": "proof_root", "type": "byte[]" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "unshield", "desc": "Unshield — withdraw funds by consuming a shielded note.", "args": [ { "name": "nullifierHash", "type": "byte[]" }, { "name": "recipient", "type": "address" }, { "name": "amount", "type": "uint64" }, { "name": "changeCommitment", "type": "byte[]" }, { "name": "proof_root", "type": "byte[]" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "optInToAsset", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] } } ], "arcs": [ 4, 56 ], "structs": {}, "state": { "schema": { "global": { "bytes": 1, "ints": 3 }, "local": { "bytes": 0, "ints": 0 } }, "keys": { "global": { "currentRoot": { "key": "cm9vdA==", "keyType": "AVMBytes", "valueType": "AVMBytes" }, "nextIndex": { "key": "bmV4dF9pZHg=", "keyType": "AVMBytes", "valueType": "uint64" }, "assetId": { "key": "YXNzZXRfaWQ=", "keyType": "AVMBytes", "valueType": "uint64" }, "rootHistoryIndex": { "key": "cmhp", "keyType": "AVMBytes", "valueType": "uint64" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "treeFrontier": { "keyType": "uint64", "valueType": "AVMBytes", "prefix": "dHJlZQ==" }, "nullifiers": { "keyType": "AVMBytes", "valueType": "AVMBytes", "prefix": "bnVsbA==" }, "rootHistory": { "keyType": "uint64", "valueType": "AVMBytes", "prefix": "cm9vdA==" }, "zeroHashes": { "keyType": "uint64", "valueType": "AVMBytes", "prefix": "emVybw==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxIDAgMzIgMTAwIDQgMiAyMApieXRlY2Jsb2NrIDB4IDB4NzI2ZjZmNzQgMHg2MTczNzM2NTc0NWY2OTY0IDB4NmU2NTc4NzQ1ZjY5NjQ3OCAweDcyNjg2OSAweDZlNzU2YzZjIDB4MDEgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDB4NzQ3MjY1NjUgMHg3YTY1NzI2ZgoKLy8gVGhpcyBURUFMIHdhcyBnZW5lcmF0ZWQgYnkgVEVBTFNjcmlwdCB2MC4xMDcuMgovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICIqTk9UX0lNUExFTUVOVEVEIiB3aGljaCBqdXN0IGNvbnRhaW5zICJlcnIiCnR4biBBcHBsaWNhdGlvbklECiEKcHVzaGludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CgkvLyBhc3NldElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGNyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGNyZWF0ZUFwcGxpY2F0aW9uCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBjcmVhdGVBcHBsaWNhdGlvbihhc3NldElkOiB1aW50NjQpOiB2b2lkCmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMSAwCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxOQoJLy8gdGhpcy5hc3NldElkLnZhbHVlID0gYXNzZXRJZAoJYnl0ZWMgMiAvLyAgImFzc2V0X2lkIgoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0SWQ6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjIwCgkvLyB0aGlzLm5leHRJbmRleC52YWx1ZSA9IDAKCWJ5dGVjIDMgLy8gICJuZXh0X2lkeCIKCWludGMgMSAvLyAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MjEKCS8vIHRoaXMucm9vdEhpc3RvcnlJbmRleC52YWx1ZSA9IDAKCWJ5dGVjIDQgLy8gICJyaGkiCglpbnRjIDEgLy8gMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjIyCgkvLyB0aGlzLmN1cnJlbnRSb290LnZhbHVlID0gYnplcm8oMzIpCglieXRlYyAxIC8vICAicm9vdCIKCWJ5dGVjIDcgLy8gMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBzaGllbGQoYnl0ZVtdLHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfc2hpZWxkOgoJLy8gYW1vdW50OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyBjb21taXRtZW50OiBieXRlW10KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBzaGllbGQoYnl0ZVtdLHVpbnQ2NCl2b2lkCgljYWxsc3ViIHNoaWVsZAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gc2hpZWxkKGNvbW1pdG1lbnQ6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCk6IHZvaWQKLy8KLy8gU2hpZWxkIOKAlCBkZXBvc2l0IGZ1bmRzLCBjcmVhdGUgYSBzaGllbGRlZCBVVFhPIG5vdGUuCnNoaWVsZDoKCXByb3RvIDIgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlYyAwIC8vIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjI5CgkvLyBhc3NlcnQobGVuKGNvbW1pdG1lbnQpID09PSAzMikKCWZyYW1lX2RpZyAtMSAvLyBjb21taXRtZW50OiBieXRlcwoJbGVuCglpbnRjIDIgLy8gMzIKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjMxCgkvLyBwYXlUeG4gPSB0aGlzLnR4bkdyb3VwW3RoaXMudHhuLmdyb3VwSW5kZXggLSAxXQoJdHhuIEdyb3VwSW5kZXgKCWludGMgMCAvLyAxCgktCglmcmFtZV9idXJ5IDAgLy8gcGF5VHhuOiB0eG4KCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czozMgoJLy8gdGhpcy5hc3NldElkLnZhbHVlID09PSAwCglieXRlYyAyIC8vICAiYXNzZXRfaWQiCglhcHBfZ2xvYmFsX2dldAoJaW50YyAxIC8vIDAKCT09CglieiAqaWYwX2Vsc2UKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MzMKCS8vIHZlcmlmeVBheVR4bihwYXlUeG4sIHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgIGFtb3VudDogYW1vdW50LAoJLy8gICAgICAgfSkKCS8vIHZlcmlmeSBwYXkKCWZyYW1lX2RpZyAwIC8vIHBheVR4bjogdHhuCglndHhucyBUeXBlRW51bQoJaW50YyAwIC8vICBwYXkKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwYXlUeG4iLCJmaWVsZCI6InR5cGVFbnVtIiwiZXhwZWN0ZWQiOiJwYXkifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgMCAvLyBwYXlUeG46IHR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoicGF5VHhuIiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgMCAvLyBwYXlUeG46IHR4bgoJZ3R4bnMgQW1vdW50CglmcmFtZV9kaWcgLTIgLy8gYW1vdW50OiB1aW50NjQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwYXlUeG4iLCJmaWVsZCI6ImFtb3VudCIsImV4cGVjdGVkIjoiYW1vdW50In0KCWFzc2VydAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czozOAoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihwYXlUeG4sIHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQodGhpcy5hc3NldElkLnZhbHVlKSwKCS8vICAgICAgIH0pCgkvLyB2ZXJpZnkgYXhmZXIKCWZyYW1lX2RpZyAwIC8vIHBheVR4bjogdHhuCglndHhucyBUeXBlRW51bQoJaW50YyA0IC8vICBheGZlcgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheVR4biIsImZpZWxkIjoidHlwZUVudW0iLCJleHBlY3RlZCI6ImF4ZmVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgMCAvLyBwYXlUeG46IHR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwYXlUeG4iLCJmaWVsZCI6ImFzc2V0UmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFzc2V0QW1vdW50CglmcmFtZV9kaWcgMCAvLyBwYXlUeG46IHR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnQ6IHVpbnQ2NAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheVR4biIsImZpZWxkIjoiYXNzZXRBbW91bnQiLCJleHBlY3RlZCI6ImFtb3VudCJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgeGZlckFzc2V0CglmcmFtZV9kaWcgMCAvLyBwYXlUeG46IHR4bgoJZ3R4bnMgWGZlckFzc2V0CglieXRlYyAyIC8vICAiYXNzZXRfaWQiCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheVR4biIsImZpZWxkIjoieGZlckFzc2V0IiwiZXhwZWN0ZWQiOiJBc3NldElELmZyb21VaW50NjQodGhpcy5hc3NldElkLnZhbHVlKSJ9Cglhc3NlcnQKCippZjBfZW5kOgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo0NQoJLy8gaWR4ID0gdGhpcy5uZXh0SW5kZXgudmFsdWUKCWJ5dGVjIDMgLy8gICJuZXh0X2lkeCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9idXJ5IDEgLy8gaWR4OiB1aW50NjQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjQ2CgkvLyBhc3NlcnQoaWR4IDwgKDEgPDwgVFJFRV9ERVBUSCkpCglmcmFtZV9kaWcgMSAvLyBpZHg6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCWludGMgNiAvLyAyMAoJc2hsCgk8Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjQ3CgkvLyB0aGlzLmluc2VydExlYWYoY29tbWl0bWVudCwgaWR4KQoJZnJhbWVfZGlnIDEgLy8gaWR4OiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBjb21taXRtZW50OiBieXRlcwoJY2FsbHN1YiBpbnNlcnRMZWFmCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo0OAoJLy8gdGhpcy5uZXh0SW5kZXgudmFsdWUgPSBpZHggKyAxCglieXRlYyAzIC8vICAibmV4dF9pZHgiCglmcmFtZV9kaWcgMSAvLyBpZHg6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo1MAoJLy8gaGlzdElkeCA9IHRoaXMucm9vdEhpc3RvcnlJbmRleC52YWx1ZQoJYnl0ZWMgNCAvLyAgInJoaSIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9idXJ5IDIgLy8gaGlzdElkeDogdWludDY0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo1MQoJLy8gdGhpcy5yb290SGlzdG9yeShoaXN0SWR4ICUgUk9PVF9ISVNUT1JZX1NJWkUpLnZhbHVlID0gdGhpcy5jdXJyZW50Um9vdC52YWx1ZQoJYnl0ZWMgMSAvLyAgInJvb3QiCglmcmFtZV9kaWcgMiAvLyBoaXN0SWR4OiB1aW50NjQKCWludGMgMyAvLyAxMDAKCSUKCWl0b2IKCWNvbmNhdAoJZHVwCglib3hfZGVsCglwb3AKCWJ5dGVjIDEgLy8gICJyb290IgoJYXBwX2dsb2JhbF9nZXQKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjUyCgkvLyB0aGlzLnJvb3RIaXN0b3J5SW5kZXgudmFsdWUgPSBoaXN0SWR4ICsgMQoJYnl0ZWMgNCAvLyAgInJoaSIKCWZyYW1lX2RpZyAyIC8vIGhpc3RJZHg6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo1NAoJLy8gbG9nKGNvbmNhdChoZXgoJzczNjg2OTY1NmM2NCcpLCBjb21taXRtZW50KSkKCXB1c2hieXRlcyAweDczNjg2OTY1NmM2NAoJZnJhbWVfZGlnIC0xIC8vIGNvbW1pdG1lbnQ6IGJ5dGVzCgljb25jYXQKCWxvZwoJcmV0c3ViCgovLyB0cmFuc2ZlcihieXRlW10sYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdKXZvaWQKKmFiaV9yb3V0ZV90cmFuc2ZlcjoKCS8vIHByb29mX3Jvb3Q6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQoJZXh0cmFjdCAyIDAKCgkvLyBvdXRwdXRDb21taXRtZW50MjogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglleHRyYWN0IDIgMAoKCS8vIG91dHB1dENvbW1pdG1lbnQxOiBieXRlW10KCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWV4dHJhY3QgMiAwCgoJLy8gbnVsbGlmaWVySGFzaDI6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCgkvLyBudWxsaWZpZXJIYXNoMTogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGV4ZWN1dGUgdHJhbnNmZXIoYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkCgljYWxsc3ViIHRyYW5zZmVyCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyB0cmFuc2ZlcihudWxsaWZpZXJIYXNoMTogYnl0ZXMsIG51bGxpZmllckhhc2gyOiBieXRlcywgb3V0cHV0Q29tbWl0bWVudDE6IGJ5dGVzLCBvdXRwdXRDb21taXRtZW50MjogYnl0ZXMsIHByb29mX3Jvb3Q6IGJ5dGVzKTogdm9pZAovLwovLyBUcmFuc2ZlciDigJQgY29uc3VtZSBpbnB1dCBub3RlcywgY3JlYXRlIG91dHB1dCBub3RlcyAoMi1pbi8yLW91dCkuCi8vIFpLIHByb29mIGluIExvZ2ljU2lnIHZlcmlmaWVzIG1lbWJlcnNoaXAsIG51bGxpZmllcnMsIGNvbnNlcnZhdGlvbiwgcmFuZ2UgcHJvb2ZzLgp0cmFuc2ZlcjoKCXByb3RvIDUgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlYyAwIC8vIDB4CglkdXAKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjY4CgkvLyBhc3NlcnQodGhpcy5pc0tub3duUm9vdChwcm9vZl9yb290KSkKCWZyYW1lX2RpZyAtNSAvLyBwcm9vZl9yb290OiBieXRlcwoJY2FsbHN1YiBpc0tub3duUm9vdAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo2OQoJLy8gYXNzZXJ0KHRoaXMudHhuLmdyb3VwSW5kZXggPiAwKQoJdHhuIEdyb3VwSW5kZXgKCWludGMgMSAvLyAwCgk+Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjcyCgkvLyBhc3NlcnQoIXRoaXMubnVsbGlmaWVycyhudWxsaWZpZXJIYXNoMSkuZXhpc3RzKQoJYnl0ZWMgNSAvLyAgIm51bGwiCglmcmFtZV9kaWcgLTEgLy8gbnVsbGlmaWVySGFzaDE6IGJ5dGVzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo3MwoJLy8gdGhpcy5udWxsaWZpZXJzKG51bGxpZmllckhhc2gxKS52YWx1ZSA9IGhleCgnMDEnKQoJYnl0ZWMgNSAvLyAgIm51bGwiCglmcmFtZV9kaWcgLTEgLy8gbnVsbGlmaWVySGFzaDE6IGJ5dGVzCgljb25jYXQKCWR1cAoJYm94X2RlbAoJcG9wCglieXRlYyA2IC8vIDB4MDEKCWJveF9wdXQKCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo3NQoJLy8gbGVuKG51bGxpZmllckhhc2gyKSA+IDAKCWZyYW1lX2RpZyAtMiAvLyBudWxsaWZpZXJIYXNoMjogYnl0ZXMKCWxlbgoJaW50YyAxIC8vIDAKCT4KCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjc2CgkvLyBhc3NlcnQoIXRoaXMubnVsbGlmaWVycyhudWxsaWZpZXJIYXNoMikuZXhpc3RzKQoJYnl0ZWMgNSAvLyAgIm51bGwiCglmcmFtZV9kaWcgLTIgLy8gbnVsbGlmaWVySGFzaDI6IGJ5dGVzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo3NwoJLy8gdGhpcy5udWxsaWZpZXJzKG51bGxpZmllckhhc2gyKS52YWx1ZSA9IGhleCgnMDEnKQoJYnl0ZWMgNSAvLyAgIm51bGwiCglmcmFtZV9kaWcgLTIgLy8gbnVsbGlmaWVySGFzaDI6IGJ5dGVzCgljb25jYXQKCWR1cAoJYm94X2RlbAoJcG9wCglieXRlYyA2IC8vIDB4MDEKCWJveF9wdXQKCippZjFfZW5kOgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czo4MQoJLy8gaWR4ID0gdGhpcy5uZXh0SW5kZXgudmFsdWUKCWJ5dGVjIDMgLy8gICJuZXh0X2lkeCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9idXJ5IDAgLy8gaWR4OiB1aW50NjQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjgyCgkvLyB0aGlzLmluc2VydExlYWYob3V0cHV0Q29tbWl0bWVudDEsIGlkeCkKCWZyYW1lX2RpZyAwIC8vIGlkeDogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gb3V0cHV0Q29tbWl0bWVudDE6IGJ5dGVzCgljYWxsc3ViIGluc2VydExlYWYKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjgzCgkvLyBpZHggPSBpZHggKyAxCglmcmFtZV9kaWcgMCAvLyBpZHg6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCSsKCWZyYW1lX2J1cnkgMCAvLyBpZHg6IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjg1CgkvLyBsZW4ob3V0cHV0Q29tbWl0bWVudDIpID4gMAoJZnJhbWVfZGlnIC00IC8vIG91dHB1dENvbW1pdG1lbnQyOiBieXRlcwoJbGVuCglpbnRjIDEgLy8gMAoJPgoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6ODYKCS8vIHRoaXMuaW5zZXJ0TGVhZihvdXRwdXRDb21taXRtZW50MiwgaWR4KQoJZnJhbWVfZGlnIDAgLy8gaWR4OiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBvdXRwdXRDb21taXRtZW50MjogYnl0ZXMKCWNhbGxzdWIgaW5zZXJ0TGVhZgoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6ODcKCS8vIGlkeCA9IGlkeCArIDEKCWZyYW1lX2RpZyAwIC8vIGlkeDogdWludDY0CglpbnRjIDAgLy8gMQoJKwoJZnJhbWVfYnVyeSAwIC8vIGlkeDogdWludDY0CgoqaWYyX2VuZDoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6OTAKCS8vIHRoaXMubmV4dEluZGV4LnZhbHVlID0gaWR4CglieXRlYyAzIC8vICAibmV4dF9pZHgiCglmcmFtZV9kaWcgMCAvLyBpZHg6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjkyCgkvLyBoaXN0SWR4ID0gdGhpcy5yb290SGlzdG9yeUluZGV4LnZhbHVlCglieXRlYyA0IC8vICAicmhpIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2J1cnkgMSAvLyBoaXN0SWR4OiB1aW50NjQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjkzCgkvLyB0aGlzLnJvb3RIaXN0b3J5KGhpc3RJZHggJSBST09UX0hJU1RPUllfU0laRSkudmFsdWUgPSB0aGlzLmN1cnJlbnRSb290LnZhbHVlCglieXRlYyAxIC8vICAicm9vdCIKCWZyYW1lX2RpZyAxIC8vIGhpc3RJZHg6IHVpbnQ2NAoJaW50YyAzIC8vIDEwMAoJJQoJaXRvYgoJY29uY2F0CglkdXAKCWJveF9kZWwKCXBvcAoJYnl0ZWMgMSAvLyAgInJvb3QiCglhcHBfZ2xvYmFsX2dldAoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6OTQKCS8vIHRoaXMucm9vdEhpc3RvcnlJbmRleC52YWx1ZSA9IGhpc3RJZHggKyAxCglieXRlYyA0IC8vICAicmhpIgoJZnJhbWVfZGlnIDEgLy8gaGlzdElkeDogdWludDY0CglpbnRjIDAgLy8gMQoJKwoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjk2CgkvLyBsb2coaGV4KCc3NDcyNjE2ZTczNjY2NTcyJykpCglwdXNoYnl0ZXMgMHg3NDcyNjE2ZTczNjY2NTcyCglsb2cKCXJldHN1YgoKLy8gdW5zaGllbGQoYnl0ZVtdLGFkZHJlc3MsdWludDY0LGJ5dGVbXSxieXRlW10pdm9pZAoqYWJpX3JvdXRlX3Vuc2hpZWxkOgoJLy8gcHJvb2Zfcm9vdDogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglleHRyYWN0IDIgMAoKCS8vIGNoYW5nZUNvbW1pdG1lbnQ6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAoJZXh0cmFjdCAyIDAKCgkvLyBhbW91bnQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIHJlY2lwaWVudDogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludGMgMiAvLyAzMgoJPT0KCgkvLyBhcmd1bWVudCAzIChyZWNpcGllbnQpIGZvciB1bnNoaWVsZCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gbnVsbGlmaWVySGFzaDogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGV4ZWN1dGUgdW5zaGllbGQoYnl0ZVtdLGFkZHJlc3MsdWludDY0LGJ5dGVbXSxieXRlW10pdm9pZAoJY2FsbHN1YiB1bnNoaWVsZAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gdW5zaGllbGQobnVsbGlmaWVySGFzaDogYnl0ZXMsIHJlY2lwaWVudDogQWRkcmVzcywgYW1vdW50OiB1aW50NjQsIGNoYW5nZUNvbW1pdG1lbnQ6IGJ5dGVzLCBwcm9vZl9yb290OiBieXRlcyk6IHZvaWQKLy8KLy8gVW5zaGllbGQg4oCUIHdpdGhkcmF3IGZ1bmRzIGJ5IGNvbnN1bWluZyBhIHNoaWVsZGVkIG5vdGUuCnVuc2hpZWxkOgoJcHJvdG8gNSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGVjIDAgLy8gMHgKCWR1cAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTA5CgkvLyBhc3NlcnQobGVuKG51bGxpZmllckhhc2gpID09PSAzMikKCWZyYW1lX2RpZyAtMSAvLyBudWxsaWZpZXJIYXNoOiBieXRlcwoJbGVuCglpbnRjIDIgLy8gMzIKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjExMAoJLy8gYXNzZXJ0KHRoaXMuaXNLbm93blJvb3QocHJvb2Zfcm9vdCkpCglmcmFtZV9kaWcgLTUgLy8gcHJvb2Zfcm9vdDogYnl0ZXMKCWNhbGxzdWIgaXNLbm93blJvb3QKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTExCgkvLyBhc3NlcnQodGhpcy50eG4uZ3JvdXBJbmRleCA+IDApCgl0eG4gR3JvdXBJbmRleAoJaW50YyAxIC8vIDAKCT4KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTEzCgkvLyBhc3NlcnQoIXRoaXMubnVsbGlmaWVycyhudWxsaWZpZXJIYXNoKS5leGlzdHMpCglieXRlYyA1IC8vICAibnVsbCIKCWZyYW1lX2RpZyAtMSAvLyBudWxsaWZpZXJIYXNoOiBieXRlcwoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCSEKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTE0CgkvLyB0aGlzLm51bGxpZmllcnMobnVsbGlmaWVySGFzaCkudmFsdWUgPSBoZXgoJzAxJykKCWJ5dGVjIDUgLy8gICJudWxsIgoJZnJhbWVfZGlnIC0xIC8vIG51bGxpZmllckhhc2g6IGJ5dGVzCgljb25jYXQKCWR1cAoJYm94X2RlbAoJcG9wCglieXRlYyA2IC8vIDB4MDEKCWJveF9wdXQKCgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMTcKCS8vIGxlbihjaGFuZ2VDb21taXRtZW50KSA9PT0gMzIKCWZyYW1lX2RpZyAtNCAvLyBjaGFuZ2VDb21taXRtZW50OiBieXRlcwoJbGVuCglpbnRjIDIgLy8gMzIKCT09CglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMTgKCS8vIGlkeCA9IHRoaXMubmV4dEluZGV4LnZhbHVlCglieXRlYyAzIC8vICAibmV4dF9pZHgiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfYnVyeSAwIC8vIGlkeDogdWludDY0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMTkKCS8vIHRoaXMuaW5zZXJ0TGVhZihjaGFuZ2VDb21taXRtZW50LCBpZHgpCglmcmFtZV9kaWcgMCAvLyBpZHg6IHVpbnQ2NAoJZnJhbWVfZGlnIC00IC8vIGNoYW5nZUNvbW1pdG1lbnQ6IGJ5dGVzCgljYWxsc3ViIGluc2VydExlYWYKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjEyMAoJLy8gdGhpcy5uZXh0SW5kZXgudmFsdWUgPSBpZHggKyAxCglieXRlYyAzIC8vICAibmV4dF9pZHgiCglmcmFtZV9kaWcgMCAvLyBpZHg6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMjIKCS8vIGhpc3RJZHggPSB0aGlzLnJvb3RIaXN0b3J5SW5kZXgudmFsdWUKCWJ5dGVjIDQgLy8gICJyaGkiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfYnVyeSAxIC8vIGhpc3RJZHg6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTIzCgkvLyB0aGlzLnJvb3RIaXN0b3J5KGhpc3RJZHggJSBST09UX0hJU1RPUllfU0laRSkudmFsdWUgPSB0aGlzLmN1cnJlbnRSb290LnZhbHVlCglieXRlYyAxIC8vICAicm9vdCIKCWZyYW1lX2RpZyAxIC8vIGhpc3RJZHg6IHVpbnQ2NAoJaW50YyAzIC8vIDEwMAoJJQoJaXRvYgoJY29uY2F0CglkdXAKCWJveF9kZWwKCXBvcAoJYnl0ZWMgMSAvLyAgInJvb3QiCglhcHBfZ2xvYmFsX2dldAoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTI0CgkvLyB0aGlzLnJvb3RIaXN0b3J5SW5kZXgudmFsdWUgPSBoaXN0SWR4ICsgMQoJYnl0ZWMgNCAvLyAgInJoaSIKCWZyYW1lX2RpZyAxIC8vIGhpc3RJZHg6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCSsKCWFwcF9nbG9iYWxfcHV0CgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjEyNwoJLy8gdGhpcy5hc3NldElkLnZhbHVlID09PSAwCglieXRlYyAyIC8vICAiYXNzZXRfaWQiCglhcHBfZ2xvYmFsX2dldAoJaW50YyAxIC8vIDAKCT09CglieiAqaWY0X2Vsc2UKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTI4CgkvLyBzZW5kUGF5bWVudCh7IHJlY2VpdmVyOiByZWNpcGllbnQsIGFtb3VudDogYW1vdW50LCBmZWU6IDAgfSkKCWl0eG5fYmVnaW4KCWludGMgMCAvLyAgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMjgKCS8vIHJlY2VpdmVyOiByZWNpcGllbnQKCWZyYW1lX2RpZyAtMiAvLyByZWNpcGllbnQ6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjEyOAoJLy8gYW1vdW50OiBhbW91bnQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjEyOAoJLy8gZmVlOiAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgliICppZjRfZW5kCgoqaWY0X2Vsc2U6CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjEzMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNpcGllbnQsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KHRoaXMuYXNzZXRJZC52YWx1ZSksCgkvLyAgICAgICAgIGZlZTogMCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnRjIDQgLy8gIGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMzEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2lwaWVudAoJZnJhbWVfZGlnIC0yIC8vIHJlY2lwaWVudDogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxMzIKCS8vIGFzc2V0QW1vdW50OiBhbW91bnQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTMzCgkvLyB4ZmVyQXNzZXQ6IEFzc2V0SUQuZnJvbVVpbnQ2NCh0aGlzLmFzc2V0SWQudmFsdWUpCglieXRlYyAyIC8vICAiYXNzZXRfaWQiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjEzNAoJLy8gZmVlOiAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTM4CgkvLyBsb2coY29uY2F0KGhleCgnNzU2ZTczNjg2OTY1NmM2NCcpLCBudWxsaWZpZXJIYXNoKSkKCXB1c2hieXRlcyAweDc1NmU3MzY4Njk2NTZjNjQKCWZyYW1lX2RpZyAtMSAvLyBudWxsaWZpZXJIYXNoOiBieXRlcwoJY29uY2F0Cglsb2cKCXJldHN1YgoKLy8gaXNLbm93blJvb3Qocm9vdDogYnl0ZXMpOiBib29sZWFuCmlzS25vd25Sb290OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGVjIDAgLy8gMHgKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNDIKCS8vIHJvb3QgPT09IHRoaXMuY3VycmVudFJvb3QudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByb290OiBieXRlcwoJYnl0ZWMgMSAvLyAgInJvb3QiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE0MgoJLy8gcmV0dXJuIHRydWU7CglpbnRjIDAgLy8gMQoJYiAqaXNLbm93blJvb3QqcmV0dXJuCgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTQzCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IFJPT1RfSElTVE9SWV9TSVpFOyBpICs9IDEpCglpbnRjIDEgLy8gMAoJZnJhbWVfYnVyeSAwIC8vIGk6IHVpbnQ2NAoKKmZvcl8wOgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNDMKCS8vIGkgPCBST09UX0hJU1RPUllfU0laRQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnRjIDMgLy8gMTAwCgk8CglieiAqZm9yXzBfZW5kCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTQ0CgkvLyB0aGlzLnJvb3RIaXN0b3J5KGkgYXMgdWludDY0KS5leGlzdHMKCWJ5dGVjIDEgLy8gICJyb290IgoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpdG9iCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE0NQoJLy8gdGhpcy5yb290SGlzdG9yeShpIGFzIHVpbnQ2NCkudmFsdWUgPT09IHJvb3QKCWJ5dGVjIDEgLy8gICJyb290IgoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpdG9iCgljb25jYXQKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMucm9vdEhpc3RvcnkoaSBhcyB1aW50NjQpLnZhbHVlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyByb290OiBieXRlcwoJPT0KCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE0NQoJLy8gcmV0dXJuIHRydWU7CglpbnRjIDAgLy8gMQoJYiAqaXNLbm93blJvb3QqcmV0dXJuCgoqaWY3X2VuZDoKCippZjZfZW5kOgoKKmZvcl8wX2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNDMKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnRjIDAgLy8gMQoJKwoJZnJhbWVfYnVyeSAwIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzAKCipmb3JfMF9lbmQ6CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE0OAoJLy8gcmV0dXJuIGZhbHNlOwoJaW50YyAxIC8vIDAKCippc0tub3duUm9vdCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaW5zZXJ0TGVhZihsZWFmOiBieXRlcywgaW5kZXg6IHVpbnQ2NCk6IHZvaWQKaW5zZXJ0TGVhZjoKCXByb3RvIDIgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlYyAwIC8vIDB4CglkdXBuIDUKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE1MgoJLy8gY3VycmVudEhhc2ggPSBsZWFmCglmcmFtZV9kaWcgLTEgLy8gbGVhZjogYnl0ZXMKCWZyYW1lX2J1cnkgMCAvLyBjdXJyZW50SGFzaDogYnl0ZVtdCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNTMKCS8vIGN1cnJlbnRJbmRleCA9IGluZGV4CglmcmFtZV9kaWcgLTIgLy8gaW5kZXg6IHVpbnQ2NAoJZnJhbWVfYnVyeSAxIC8vIGN1cnJlbnRJbmRleDogdWludDY0CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNTUKCS8vIGZvciAobGV0IGxldmVsID0gMDsgbGV2ZWwgPCBUUkVFX0RFUFRIOyBsZXZlbCArPSAxKQoJaW50YyAxIC8vIDAKCWZyYW1lX2J1cnkgMiAvLyBsZXZlbDogdWludDY0CgoqZm9yXzE6CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE1NQoJLy8gbGV2ZWwgPCBUUkVFX0RFUFRICglmcmFtZV9kaWcgMiAvLyBsZXZlbDogdWludDY0CglpbnRjIDYgLy8gMjAKCTwKCWJ6ICpmb3JfMV9lbmQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE1NgoJLy8gbHZsID0gbGV2ZWwgYXMgdWludDY0CglmcmFtZV9kaWcgMiAvLyBsZXZlbDogdWludDY0CglmcmFtZV9idXJ5IDMgLy8gbHZsOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNTcKCS8vIGN1cnJlbnRJbmRleCAlIDIgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGN1cnJlbnRJbmRleDogdWludDY0CglpbnRjIDUgLy8gMgoJJQoJaW50YyAxIC8vIDAKCT09CglieiAqaWY4X2Vsc2UKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTU4CgkvLyB0aGlzLnRyZWVGcm9udGllcihsdmwpLnZhbHVlID0gY3VycmVudEhhc2gKCWJ5dGVjIDggLy8gICJ0cmVlIgoJZnJhbWVfZGlnIDMgLy8gbHZsOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZHVwCglib3hfZGVsCglwb3AKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRIYXNoOiBieXRlW10KCWJveF9wdXQKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE1OQoJLy8gemVyb0hhc2ggPSB0aGlzLnplcm9IYXNoZXMobHZsKS5leGlzdHMKCS8vICAgICAgICAgICA/IHRoaXMuemVyb0hhc2hlcyhsdmwpLnZhbHVlCgkvLyAgICAgICAgICAgOiBiemVybygzMikKCWJ5dGVjIDkgLy8gICJ6ZXJvIgoJZnJhbWVfZGlnIDMgLy8gbHZsOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWJ5dGVjIDkgLy8gICJ6ZXJvIgoJZnJhbWVfZGlnIDMgLy8gbHZsOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy56ZXJvSGFzaGVzKGx2bCkudmFsdWUKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglieXRlYyA3IC8vIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoKKnRlcm5hcnkwX2VuZDoKCWZyYW1lX2J1cnkgNCAvLyB6ZXJvSGFzaDogYnl0ZVszMl0KCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE2MgoJLy8gY3VycmVudEhhc2ggPSByYXdCeXRlcyhzaGEyNTYoY29uY2F0KGN1cnJlbnRIYXNoLCB6ZXJvSGFzaCkpKQoJZnJhbWVfZGlnIDAgLy8gY3VycmVudEhhc2g6IGJ5dGVbXQoJZnJhbWVfZGlnIDQgLy8gemVyb0hhc2g6IGJ5dGVbMzJdCgljb25jYXQKCXNoYTI1NgoJZnJhbWVfYnVyeSAwIC8vIGN1cnJlbnRIYXNoOiBieXRlW10KCWIgKmlmOF9lbmQKCippZjhfZWxzZToKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTY0CgkvLyBsZWZ0U2libGluZyA9IHRoaXMudHJlZUZyb250aWVyKGx2bCkudmFsdWUKCWJ5dGVjIDggLy8gICJ0cmVlIgoJZnJhbWVfZGlnIDMgLy8gbHZsOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy50cmVlRnJvbnRpZXIobHZsKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDUgLy8gbGVmdFNpYmxpbmc6IGJ5dGVbXQoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTY1CgkvLyBjdXJyZW50SGFzaCA9IHJhd0J5dGVzKHNoYTI1Nihjb25jYXQobGVmdFNpYmxpbmcsIGN1cnJlbnRIYXNoKSkpCglmcmFtZV9kaWcgNSAvLyBsZWZ0U2libGluZzogYnl0ZVtdCglmcmFtZV9kaWcgMCAvLyBjdXJyZW50SGFzaDogYnl0ZVtdCgljb25jYXQKCXNoYTI1NgoJZnJhbWVfYnVyeSAwIC8vIGN1cnJlbnRIYXNoOiBieXRlW10KCippZjhfZW5kOgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNjcKCS8vIGN1cnJlbnRJbmRleCA9IGN1cnJlbnRJbmRleCAvIDIKCWZyYW1lX2RpZyAxIC8vIGN1cnJlbnRJbmRleDogdWludDY0CglpbnRjIDUgLy8gMgoJLwoJZnJhbWVfYnVyeSAxIC8vIGN1cnJlbnRJbmRleDogdWludDY0CgoqZm9yXzFfY29udGludWU6CgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE1NQoJLy8gbGV2ZWwgKz0gMQoJZnJhbWVfZGlnIDIgLy8gbGV2ZWw6IHVpbnQ2NAoJaW50YyAwIC8vIDEKCSsKCWZyYW1lX2J1cnkgMiAvLyBsZXZlbDogdWludDY0CgliICpmb3JfMQoKKmZvcl8xX2VuZDoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTcwCgkvLyB0aGlzLmN1cnJlbnRSb290LnZhbHVlID0gY3VycmVudEhhc2gKCWJ5dGVjIDEgLy8gICJyb290IgoJZnJhbWVfZGlnIDAgLy8gY3VycmVudEhhc2g6IGJ5dGVbXQoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gb3B0SW5Ub0Fzc2V0KCl2b2lkCiphYmlfcm91dGVfb3B0SW5Ub0Fzc2V0OgoJLy8gZXhlY3V0ZSBvcHRJblRvQXNzZXQoKXZvaWQKCWNhbGxzdWIgb3B0SW5Ub0Fzc2V0CglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBvcHRJblRvQXNzZXQoKTogdm9pZApvcHRJblRvQXNzZXQ6Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE3NAoJLy8gYXNzZXJ0KHRoaXMuYXNzZXRJZC52YWx1ZSAhPT0gMCkKCWJ5dGVjIDIgLy8gICJhc3NldF9pZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnRjIDEgLy8gMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTc1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IEFzc2V0SUQuZnJvbVVpbnQ2NCh0aGlzLmFzc2V0SWQudmFsdWUpLAoJLy8gICAgICAgZmVlOiAwLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnRjIDQgLy8gIGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNzYKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc2hpZWxkZWQtcG9vbC5hbGdvLnRzOjE3NwoJLy8gYXNzZXRBbW91bnQ6IDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL3NoaWVsZGVkLXBvb2wuYWxnby50czoxNzgKCS8vIHhmZXJBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KHRoaXMuYXNzZXRJZC52YWx1ZSkKCWJ5dGVjIDIgLy8gICJhc3NldF9pZCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9zaGllbGRlZC1wb29sLmFsZ28udHM6MTc5CgkvLyBmZWU6IDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJcHVzaGJ5dGVzIDB4OTczYjYxNmYgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCXB1c2hieXRlcyAweDdhZGIxYjgwIC8vIG1ldGhvZCAic2hpZWxkKGJ5dGVbXSx1aW50NjQpdm9pZCIKCXB1c2hieXRlcyAweDVjNjkwZjRjIC8vIG1ldGhvZCAidHJhbnNmZXIoYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgoJcHVzaGJ5dGVzIDB4YmUwZGU0Y2QgLy8gbWV0aG9kICJ1bnNoaWVsZChieXRlW10sYWRkcmVzcyx1aW50NjQsYnl0ZVtdLGJ5dGVbXSl2b2lkIgoJcHVzaGJ5dGVzIDB4OWZmZDNlNTMgLy8gbWV0aG9kICJvcHRJblRvQXNzZXQoKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3NoaWVsZCAqYWJpX3JvdXRlX3RyYW5zZmVyICphYmlfcm91dGVfdW5zaGllbGQgKmFiaV9yb3V0ZV9vcHRJblRvQXNzZXQKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" } }