{ "name": "ProofOfAttendance", "structs": {}, "methods": [ { "name": "init", "args": [ { "type": "uint64", "name": "maxAttendees" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "confirmAttendance", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "confirmAttendanceWithBox", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "confirmAttendanceWithBoxRef", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "confirmAttendanceWithBoxMap", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getPoaId", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPoaIdWithBox", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPoaIdWithBoxRef", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPoaIdWithBoxMap", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "claimPoa", "args": [ { "type": "axfer", "name": "optInTxn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claimPoaWithBox", "args": [ { "type": "axfer", "name": "optInTxn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claimPoaWithBoxRef", "args": [ { "type": "axfer", "name": "optInTxn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claimPoaWithBoxMap", "args": [ { "type": "axfer", "name": "optInTxn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 2, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "maxAttendees": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bWF4QXR0ZW5kZWVz" }, "assetUrl": { "keyType": "AVMString", "valueType": "AVMString", "key": "YXNzZXRVcmw=" }, "totalAttendees": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxBdHRlbmRlZXM=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "boxMap": { "keyType": "AVMBytes", "valueType": "uint64", "prefix": "Ym94TWFw" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 291, 330, 367, 409 ], "errorMessage": "Already claimed POA" }, { "pc": [ 270, 308, 345, 386 ], "errorMessage": "Max attendees reached" }, { "pc": [ 134 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 255 ], "errorMessage": "Only creator can initialize" }, { "pc": [ 556, 658, 759, 863 ], "errorMessage": "Opt-in transaction close to must be zero address" }, { "pc": [ 531, 633, 734, 838 ], "errorMessage": "Opt-in transaction sender and receiver must be the same" }, { "pc": [ 499, 601, 702, 806 ], "errorMessage": "POA ID mismatch" }, { "pc": [ 422, 437, 448, 465 ], "errorMessage": "POA not found" }, { "pc": [ 488, 592, 691, 797 ], "errorMessage": "POA not found, attendance validation failed!" }, { "pc": [ 504, 606, 707, 811 ], "errorMessage": "We got you covered for free!" }, { "pc": [ 264, 268, 279, 302, 306, 317, 339, 343, 354, 380, 384, 395, 921, 945 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 484, 585, 687, 788 ], "errorMessage": "transaction type is axfer" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQKICAgIGJ5dGVjYmxvY2sgInRvdGFsQXR0ZW5kZWVzIiAibWF4QXR0ZW5kZWVzIiAiYm94TWFwIiAweDE1MWY3Yzc1ICJhc3NldFVybCIgMHgwNjgxMDEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyNQogICAgLy8gbWF4QXR0ZW5kZWVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMCkgfSk7CiAgICBieXRlY18xIC8vICJtYXhBdHRlbmRlZXMiCiAgICBwdXNoaW50IDMwIC8vIDMwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI2CiAgICAvLyBhc3NldFVybCA9IEdsb2JhbFN0YXRlKHsKICAgIGJ5dGVjIDQgLy8gImFzc2V0VXJsIgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI3CiAgICAvLyBpbml0aWFsVmFsdWU6ICJpcGZzOi8vUW1XNXZFUmtnZUpKdFNZMVlRZGNXVTZnc0hDWkN5TEZ0TTFvVDl1eXkyV0dtOCIsCiAgICBwdXNoYnl0ZXMgImlwZnM6Ly9RbVc1dkVSa2dlSkp0U1kxWVFkY1dVNmdzSENaQ3lMRnRNMW9UOXV5eTJXR204IgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI2LTI4CiAgICAvLyBhc3NldFVybCA9IEdsb2JhbFN0YXRlKHsKICAgIC8vICAgaW5pdGlhbFZhbHVlOiAiaXBmczovL1FtVzV2RVJrZ2VKSnRTWTFZUWRjV1U2Z3NIQ1pDeUxGdE0xb1Q5dXl5MldHbTgiLAogICAgLy8gfSk7CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb29mT2ZBdHRlbmRhbmNlIGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMTgKICAgIHB1c2hieXRlc3MgMHgwOTUyNzM1MiAweDM0ZWY3NDdiIDB4NzczMmE5MDAgMHg4NDg1YTE5NSAweDdmOGNmMGFiIDB4ZGQ2MTdkN2QgMHg5YjQ4N2E4MCAweGJhNzk2ZmVhIDB4N2RlOTc1NjYgMHg4M2RkMzc1ZiAweDc2NWEzM2RhIDB4MmM3YTgxOGMgLy8gbWV0aG9kICJjb25maXJtQXR0ZW5kYW5jZSgpdm9pZCIsIG1ldGhvZCAiY29uZmlybUF0dGVuZGFuY2VXaXRoQm94KCl2b2lkIiwgbWV0aG9kICJjb25maXJtQXR0ZW5kYW5jZVdpdGhCb3hSZWYoKXZvaWQiLCBtZXRob2QgImNvbmZpcm1BdHRlbmRhbmNlV2l0aEJveE1hcCgpdm9pZCIsIG1ldGhvZCAiZ2V0UG9hSWQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0UG9hSWRXaXRoQm94KCl1aW50NjQiLCBtZXRob2QgImdldFBvYUlkV2l0aEJveFJlZigpdWludDY0IiwgbWV0aG9kICJnZXRQb2FJZFdpdGhCb3hNYXAoKXVpbnQ2NCIsIG1ldGhvZCAiY2xhaW1Qb2EoYXhmZXIpdm9pZCIsIG1ldGhvZCAiY2xhaW1Qb2FXaXRoQm94KGF4ZmVyKXZvaWQiLCBtZXRob2QgImNsYWltUG9hV2l0aEJveFJlZihheGZlcil2b2lkIiwgbWV0aG9kICJjbGFpbVBvYVdpdGhCb3hNYXAoYXhmZXIpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNvbmZpcm1BdHRlbmRhbmNlIGNvbmZpcm1BdHRlbmRhbmNlV2l0aEJveCBjb25maXJtQXR0ZW5kYW5jZVdpdGhCb3hSZWYgY29uZmlybUF0dGVuZGFuY2VXaXRoQm94TWFwIGdldFBvYUlkIGdldFBvYUlkV2l0aEJveCBnZXRQb2FJZFdpdGhCb3hSZWYgZ2V0UG9hSWRXaXRoQm94TWFwIGNsYWltUG9hIGNsYWltUG9hV2l0aEJveCBjbGFpbVBvYVdpdGhCb3hSZWYgY2xhaW1Qb2FXaXRoQm94TWFwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMTg6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb29mT2ZBdHRlbmRhbmNlIGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwdXNoYnl0ZXMgMHgxYmNkZTUyZCAvLyBtZXRob2QgImluaXQodWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBpbml0CiAgICBlcnIKCgovLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OlByb29mT2ZBdHRlbmRhbmNlLmluaXRbcm91dGluZ10oKSAtPiB2b2lkOgppbml0OgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBvbkNyZWF0ZTogInJlcXVpcmUiIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsICJPbmx5IGNyZWF0b3IgY2FuIGluaXRpYWxpemUiKTsKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGNyZWF0b3IgY2FuIGluaXRpYWxpemUKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyNQogICAgLy8gbWF4QXR0ZW5kZWVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMCkgfSk7CiAgICBieXRlY18xIC8vICJtYXhBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MzUKICAgIC8vIHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlID0gbWF4QXR0ZW5kZWVzOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czozMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgb25DcmVhdGU6ICJyZXF1aXJlIiB9KQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UuY29uZmlybUF0dGVuZGFuY2Vbcm91dGluZ10oKSAtPiB2b2lkOgpjb25maXJtQXR0ZW5kYW5jZToKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0MQogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyOQogICAgLy8gdG90YWxBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAidG90YWxBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6NDEKICAgIC8vIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgPCB0aGlzLm1heEF0dGVuZGVlcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI1CiAgICAvLyBtYXhBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDMwKSB9KTsKICAgIGJ5dGVjXzEgLy8gIm1heEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0MQogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDwKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0MC00MwogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlIDwgdGhpcy5tYXhBdHRlbmRlZXMudmFsdWUsCiAgICAvLyAgICJNYXggYXR0ZW5kZWVzIHJlYWNoZWQiLAogICAgLy8gKTsKICAgIGFzc2VydCAvLyBNYXggYXR0ZW5kZWVzIHJlYWNoZWQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0NQogICAgLy8gY29uc3QgbWludGVkQXNzZXQgPSB0aGlzLm1pbnRQb2EoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIG1pbnRQb2EKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0NgogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyOQogICAgLy8gdG90YWxBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAidG90YWxBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6NDYKICAgIC8vIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgKz0gMTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0NgogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo0OAogICAgLy8gY29uc3QgW19pZCwgaGFzQ2xhaW1lZF0gPSBvcC5Cb3guZ2V0KFR4bi5zZW5kZXIuYnl0ZXMpOwogICAgdHhuIFNlbmRlcgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6NDkKICAgIC8vIGFzc2VydCghaGFzQ2xhaW1lZCwgIkFscmVhZHkgY2xhaW1lZCBQT0EiKTsKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IGNsYWltZWQgUE9BCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6NTEKICAgIC8vIG9wLkJveC5wdXQoVHhuLnNlbmRlci5ieXRlcywgb3AuaXRvYihtaW50ZWRBc3NldC5pZCkpOwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UuY29uZmlybUF0dGVuZGFuY2VXaXRoQm94W3JvdXRpbmddKCkgLT4gdm9pZDoKY29uZmlybUF0dGVuZGFuY2VXaXRoQm94OgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjU3CiAgICAvLyB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlIDwgdGhpcy5tYXhBdHRlbmRlZXMudmFsdWUsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo1NwogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjUKICAgIC8vIG1heEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzApIH0pOwogICAgYnl0ZWNfMSAvLyAibWF4QXR0ZW5kZWVzIgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjU3CiAgICAvLyB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlIDwgdGhpcy5tYXhBdHRlbmRlZXMudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjU2LTU5CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgPCB0aGlzLm1heEF0dGVuZGVlcy52YWx1ZSwKICAgIC8vICAgIk1heCBhdHRlbmRlZXMgcmVhY2hlZCIsCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIE1heCBhdHRlbmRlZXMgcmVhY2hlZAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCBtaW50ZWRBc3NldCA9IHRoaXMubWludFBvYShUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgbWludFBvYQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlICs9IDE7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo2MgogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsQXR0ZW5kZWVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzAgLy8gInRvdGFsQXR0ZW5kZWVzIgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlICs9IDE7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCBib3ggPSBCb3g8dWludDY0Pih7IGtleTogVHhuLnNlbmRlci5ieXRlcyB9KTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo2NQogICAgLy8gY29uc3QgaGFzQ2xhaW1lZCA9IGJveC5leGlzdHM7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjY2CiAgICAvLyBhc3NlcnQoIWhhc0NsYWltZWQsICJBbHJlYWR5IGNsYWltZWQgUE9BIik7CiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBjbGFpbWVkIFBPQQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjY4CiAgICAvLyBib3gudmFsdWUgPSBtaW50ZWRBc3NldC5pZDsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OlByb29mT2ZBdHRlbmRhbmNlLmNvbmZpcm1BdHRlbmRhbmNlV2l0aEJveFJlZltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNvbmZpcm1BdHRlbmRhbmNlV2l0aEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3NAogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyOQogICAgLy8gdG90YWxBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAidG90YWxBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6NzQKICAgIC8vIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgPCB0aGlzLm1heEF0dGVuZGVlcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI1CiAgICAvLyBtYXhBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDMwKSB9KTsKICAgIGJ5dGVjXzEgLy8gIm1heEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3NAogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDwKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3My03NgogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlIDwgdGhpcy5tYXhBdHRlbmRlZXMudmFsdWUsCiAgICAvLyAgICJNYXggYXR0ZW5kZWVzIHJlYWNoZWQiLAogICAgLy8gKTsKICAgIGFzc2VydCAvLyBNYXggYXR0ZW5kZWVzIHJlYWNoZWQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3OAogICAgLy8gY29uc3QgbWludGVkQXNzZXQgPSB0aGlzLm1pbnRQb2EoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIG1pbnRQb2EKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3OQogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyOQogICAgLy8gdG90YWxBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAidG90YWxBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6NzkKICAgIC8vIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgKz0gMTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3OQogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo4MQogICAgLy8gY29uc3QgYm94UmVmID0gQm94PGJ5dGVzPih7IGtleTogVHhuLnNlbmRlci5ieXRlcyB9KTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo4MgogICAgLy8gY29uc3QgaGFzQ2xhaW1lZCA9IGJveFJlZi5leGlzdHM7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjgzCiAgICAvLyBhc3NlcnQoIWhhc0NsYWltZWQsICJBbHJlYWR5IGNsYWltZWQgUE9BIik7CiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBjbGFpbWVkIFBPQQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjg1CiAgICAvLyBib3hSZWYudmFsdWUgPSBvcC5pdG9iKG1pbnRlZEFzc2V0LmlkKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo3MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OlByb29mT2ZBdHRlbmRhbmNlLmNvbmZpcm1BdHRlbmRhbmNlV2l0aEJveE1hcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNvbmZpcm1BdHRlbmRhbmNlV2l0aEJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5MQogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyOQogICAgLy8gdG90YWxBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAidG90YWxBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OTEKICAgIC8vIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgPCB0aGlzLm1heEF0dGVuZGVlcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI1CiAgICAvLyBtYXhBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDMwKSB9KTsKICAgIGJ5dGVjXzEgLy8gIm1heEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5MQogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSA8IHRoaXMubWF4QXR0ZW5kZWVzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDwKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5MC05MwogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLnRvdGFsQXR0ZW5kZWVzLnZhbHVlIDwgdGhpcy5tYXhBdHRlbmRlZXMudmFsdWUsCiAgICAvLyAgICJNYXggYXR0ZW5kZWVzIHJlYWNoZWQiLAogICAgLy8gKTsKICAgIGFzc2VydCAvLyBNYXggYXR0ZW5kZWVzIHJlYWNoZWQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5NQogICAgLy8gY29uc3QgbWludGVkQXNzZXQgPSB0aGlzLm1pbnRQb2EoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIG1pbnRQb2EKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5NgogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyOQogICAgLy8gdG90YWxBdHRlbmRlZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAidG90YWxBdHRlbmRlZXMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OTYKICAgIC8vIHRoaXMudG90YWxBdHRlbmRlZXMudmFsdWUgKz0gMTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5NgogICAgLy8gdGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSArPSAxOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czozMAogICAgLy8gYm94TWFwID0gQm94TWFwPGJ5dGVzLCB1aW50NjQ+KHsga2V5UHJlZml4OiAiYm94TWFwIiB9KTsKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo5OAogICAgLy8gY29uc3QgaGFzQ2xhaW1lZCA9IHRoaXMuYm94TWFwKFR4bi5zZW5kZXIuYnl0ZXMpLmV4aXN0czsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czozMAogICAgLy8gYm94TWFwID0gQm94TWFwPGJ5dGVzLCB1aW50NjQ+KHsga2V5UHJlZml4OiAiYm94TWFwIiB9KTsKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjk4CiAgICAvLyBjb25zdCBoYXNDbGFpbWVkID0gdGhpcy5ib3hNYXAoVHhuLnNlbmRlci5ieXRlcykuZXhpc3RzOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OTkKICAgIC8vIGFzc2VydCghaGFzQ2xhaW1lZCwgIkFscmVhZHkgY2xhaW1lZCBQT0EiKTsKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IGNsYWltZWQgUE9BCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MzAKICAgIC8vIGJveE1hcCA9IEJveE1hcDxieXRlcywgdWludDY0Pih7IGtleVByZWZpeDogImJveE1hcCIgfSk7CiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTAxCiAgICAvLyB0aGlzLmJveE1hcChUeG4uc2VuZGVyLmJ5dGVzKS52YWx1ZSA9IG1pbnRlZEFzc2V0LmlkOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjMwCiAgICAvLyBib3hNYXAgPSBCb3hNYXA8Ynl0ZXMsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICJib3hNYXAiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTAxCiAgICAvLyB0aGlzLmJveE1hcChUeG4uc2VuZGVyLmJ5dGVzKS52YWx1ZSA9IG1pbnRlZEFzc2V0LmlkOwogICAgc3dhcAogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UuZ2V0UG9hSWRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRQb2FJZDoKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IFtwb2FJZCwgZXhpc3RzXSA9IG9wLkJveC5nZXQoVHhuLnNlbmRlci5ieXRlcyk7CiAgICB0eG4gU2VuZGVyCiAgICBib3hfZ2V0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTA2CiAgICAvLyBhc3NlcnQoZXhpc3RzLCAiUE9BIG5vdCBmb3VuZCIpOwogICAgYXNzZXJ0IC8vIFBPQSBub3QgZm91bmQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMDcKICAgIC8vIHJldHVybiBvcC5idG9pKHBvYUlkKTsKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjpQcm9vZk9mQXR0ZW5kYW5jZS5nZXRQb2FJZFdpdGhCb3hbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRQb2FJZFdpdGhCb3g6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTEyCiAgICAvLyBjb25zdCBib3ggPSBCb3g8dWludDY0Pih7IGtleTogVHhuLnNlbmRlci5ieXRlcyB9KTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMTMKICAgIC8vIGNvbnN0IFtwb2FJZCwgZXhpc3RzXSA9IGJveC5tYXliZSgpOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjExNAogICAgLy8gYXNzZXJ0KGV4aXN0cywgIlBPQSBub3QgZm91bmQiKTsKICAgIHN3YXAKICAgIGFzc2VydCAvLyBQT0Egbm90IGZvdW5kCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UuZ2V0UG9hSWRXaXRoQm94UmVmW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0UG9hSWRXaXRoQm94UmVmOgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEyMAogICAgLy8gY29uc3QgYm94UmVmID0gQm94PGJ5dGVzPih7IGtleTogVHhuLnNlbmRlci5ieXRlcyB9KTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMjEKICAgIC8vIGNvbnN0IFtwb2FJZCwgZXhpc3RzXSA9IGJveFJlZi5tYXliZSgpOwogICAgYm94X2dldAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KGV4aXN0cywgIlBPQSBub3QgZm91bmQiKTsKICAgIGFzc2VydCAvLyBQT0Egbm90IGZvdW5kCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTIzCiAgICAvLyByZXR1cm4gb3AuYnRvaShwb2FJZCk7CiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UuZ2V0UG9hSWRXaXRoQm94TWFwW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0UG9hSWRXaXRoQm94TWFwOgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjMwCiAgICAvLyBib3hNYXAgPSBCb3hNYXA8Ynl0ZXMsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICJib3hNYXAiIH0pOwogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgW3BvYUlkLCBleGlzdHNdID0gdGhpcy5ib3hNYXAoVHhuLnNlbmRlci5ieXRlcykubWF5YmUoKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czozMAogICAgLy8gYm94TWFwID0gQm94TWFwPGJ5dGVzLCB1aW50NjQ+KHsga2V5UHJlZml4OiAiYm94TWFwIiB9KTsKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgW3BvYUlkLCBleGlzdHNdID0gdGhpcy5ib3hNYXAoVHhuLnNlbmRlci5ieXRlcykubWF5YmUoKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChleGlzdHMsICJQT0Egbm90IGZvdW5kIik7CiAgICBzd2FwCiAgICBhc3NlcnQgLy8gUE9BIG5vdCBmb3VuZAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OlByb29mT2ZBdHRlbmRhbmNlLmNsYWltUG9hW3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1Qb2E6CiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwbiAyCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18yIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMzUKICAgIC8vIGNvbnN0IFtwb2FJZCwgZXhpc3RzXSA9IG9wLkJveC5nZXQoVHhuLnNlbmRlci5ieXRlcyk7CiAgICB0eG4gU2VuZGVyCiAgICBib3hfZ2V0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTM2CiAgICAvLyBhc3NlcnQoZXhpc3RzLCAiUE9BIG5vdCBmb3VuZCwgYXR0ZW5kYW5jZSB2YWxpZGF0aW9uIGZhaWxlZCEiKTsKICAgIGFzc2VydCAvLyBQT0Egbm90IGZvdW5kLCBhdHRlbmRhbmNlIHZhbGlkYXRpb24gZmFpbGVkIQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjEzNwogICAgLy8gYXNzZXJ0KG9wdEluVHhuLnhmZXJBc3NldC5pZCA9PT0gb3AuYnRvaShwb2FJZCksICJQT0EgSUQgbWlzbWF0Y2giKTsKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgY292ZXIgMwogICAgc3dhcAogICAgYnRvaQogICAgPT0KICAgIGFzc2VydCAvLyBQT0EgSUQgbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMzgKICAgIC8vIGFzc2VydChvcHRJblR4bi5mZWUgPT09IDAsICJXZSBnb3QgeW91IGNvdmVyZWQgZm9yIGZyZWUhIik7CiAgICBkdXAKICAgIGd0eG5zIEZlZQogICAgIQogICAgYXNzZXJ0IC8vIFdlIGdvdCB5b3UgY292ZXJlZCBmb3IgZnJlZSEKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxMzkKICAgIC8vIGFzc2VydChvcHRJblR4bi5hc3NldEFtb3VudCA9PT0gMCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNDEKICAgIC8vIG9wdEluVHhuLnNlbmRlciA9PT0gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciAmJgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHN3YXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNDEtMTQyCiAgICAvLyBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIC8vICAgb3B0SW5UeG4uYXNzZXRSZWNlaXZlciA9PT0gVHhuLnNlbmRlciwKICAgIGJ6IGNsYWltUG9hX2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE0MgogICAgLy8gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciA9PT0gVHhuLnNlbmRlciwKICAgIGR1cAogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNDEtMTQyCiAgICAvLyBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIC8vICAgb3B0SW5UeG4uYXNzZXRSZWNlaXZlciA9PT0gVHhuLnNlbmRlciwKICAgIGJ6IGNsYWltUG9hX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCmNsYWltUG9hX2Jvb2xfbWVyZ2VANToKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNDAtMTQ0CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIG9wdEluVHhuLnNlbmRlciA9PT0gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciAmJgogICAgLy8gICAgIG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgPT09IFR4bi5zZW5kZXIsCiAgICAvLyAgICJPcHQtaW4gdHJhbnNhY3Rpb24gc2VuZGVyIGFuZCByZWNlaXZlciBtdXN0IGJlIHRoZSBzYW1lIiwKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gT3B0LWluIHRyYW5zYWN0aW9uIHNlbmRlciBhbmQgcmVjZWl2ZXIgbXVzdCBiZSB0aGUgc2FtZQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE0NgogICAgLy8gb3B0SW5UeG4uYXNzZXRDbG9zZVRvID09PSBvcHRJblR4bi5yZWtleVRvICYmCiAgICBkaWcgMgogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIHN3YXAKICAgIGd0eG5zIFJla2V5VG8KICAgIGR1cAogICAgYnVyeSA2CiAgICA9PQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE0Ni0xNDcKICAgIC8vIG9wdEluVHhuLmFzc2V0Q2xvc2VUbyA9PT0gb3B0SW5UeG4ucmVrZXlUbyAmJgogICAgLy8gICBvcHRJblR4bi5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICBieiBjbGFpbVBvYV9ib29sX2ZhbHNlQDgKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNDcKICAgIC8vIG9wdEluVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGRpZyAzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTQ2LTE0NwogICAgLy8gb3B0SW5UeG4uYXNzZXRDbG9zZVRvID09PSBvcHRJblR4bi5yZWtleVRvICYmCiAgICAvLyAgIG9wdEluVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGJ6IGNsYWltUG9hX2Jvb2xfZmFsc2VAOAogICAgaW50Y18wIC8vIDEKCmNsYWltUG9hX2Jvb2xfbWVyZ2VAOToKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNDUtMTQ5CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIG9wdEluVHhuLmFzc2V0Q2xvc2VUbyA9PT0gb3B0SW5UeG4ucmVrZXlUbyAmJgogICAgLy8gICAgIG9wdEluVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgIk9wdC1pbiB0cmFuc2FjdGlvbiBjbG9zZSB0byBtdXN0IGJlIHplcm8gYWRkcmVzcyIsCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIE9wdC1pbiB0cmFuc2FjdGlvbiBjbG9zZSB0byBtdXN0IGJlIHplcm8gYWRkcmVzcwogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zZW5kUG9hKFR4bi5zZW5kZXIsIG9wdEluVHhuLnhmZXJBc3NldCk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgY2FsbHN1YiBzZW5kUG9hCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKY2xhaW1Qb2FfYm9vbF9mYWxzZUA4OgogICAgaW50Y18xIC8vIDAKICAgIGIgY2xhaW1Qb2FfYm9vbF9tZXJnZUA5CgpjbGFpbVBvYV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBjbGFpbVBvYV9ib29sX21lcmdlQDUKCgovLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OlByb29mT2ZBdHRlbmRhbmNlLmNsYWltUG9hV2l0aEJveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltUG9hV2l0aEJveDoKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXBuIDIKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE1NgogICAgLy8gY29uc3QgYm94ID0gQm94PHVpbnQ2ND4oeyBrZXk6IFR4bi5zZW5kZXIuYnl0ZXMgfSk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTU3CiAgICAvLyBjb25zdCBbcG9hSWQsIGV4aXN0c10gPSBib3gubWF5YmUoKTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNTgKICAgIC8vIGFzc2VydChleGlzdHMsICJQT0Egbm90IGZvdW5kLCBhdHRlbmRhbmNlIHZhbGlkYXRpb24gZmFpbGVkISIpOwogICAgc3dhcAogICAgYXNzZXJ0IC8vIFBPQSBub3QgZm91bmQsIGF0dGVuZGFuY2UgdmFsaWRhdGlvbiBmYWlsZWQhCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTU5CiAgICAvLyBhc3NlcnQob3B0SW5UeG4ueGZlckFzc2V0LmlkID09PSBwb2FJZCwgIlBPQSBJRCBtaXNtYXRjaCIpOwogICAgZGlnIDEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZHVwCiAgICBjb3ZlciAzCiAgICA9PQogICAgYXNzZXJ0IC8vIFBPQSBJRCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2MAogICAgLy8gYXNzZXJ0KG9wdEluVHhuLmZlZSA9PT0gMCwgIldlIGdvdCB5b3UgY292ZXJlZCBmb3IgZnJlZSEiKTsKICAgIGR1cAogICAgZ3R4bnMgRmVlCiAgICAhCiAgICBhc3NlcnQgLy8gV2UgZ290IHlvdSBjb3ZlcmVkIGZvciBmcmVlIQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2MQogICAgLy8gYXNzZXJ0KG9wdEluVHhuLmFzc2V0QW1vdW50ID09PSAwKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2MwogICAgLy8gb3B0SW5UeG4uc2VuZGVyID09PSBvcHRJblR4bi5hc3NldFJlY2VpdmVyICYmCiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICA9PQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2My0xNjQKICAgIC8vIG9wdEluVHhuLnNlbmRlciA9PT0gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciAmJgogICAgLy8gICBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgYnogY2xhaW1Qb2FXaXRoQm94X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2NAogICAgLy8gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciA9PT0gVHhuLnNlbmRlciwKICAgIGR1cAogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNjMtMTY0CiAgICAvLyBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIC8vICAgb3B0SW5UeG4uYXNzZXRSZWNlaXZlciA9PT0gVHhuLnNlbmRlciwKICAgIGJ6IGNsYWltUG9hV2l0aEJveF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpjbGFpbVBvYVdpdGhCb3hfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2Mi0xNjYKICAgIC8vIGFzc2VydCgKICAgIC8vICAgb3B0SW5UeG4uc2VuZGVyID09PSBvcHRJblR4bi5hc3NldFJlY2VpdmVyICYmCiAgICAvLyAgICAgb3B0SW5UeG4uYXNzZXRSZWNlaXZlciA9PT0gVHhuLnNlbmRlciwKICAgIC8vICAgIk9wdC1pbiB0cmFuc2FjdGlvbiBzZW5kZXIgYW5kIHJlY2VpdmVyIG11c3QgYmUgdGhlIHNhbWUiLAogICAgLy8gKTsKICAgIGFzc2VydCAvLyBPcHQtaW4gdHJhbnNhY3Rpb24gc2VuZGVyIGFuZCByZWNlaXZlciBtdXN0IGJlIHRoZSBzYW1lCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTY4CiAgICAvLyBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIGRpZyAyCiAgICBkdXAKICAgIGd0eG5zIEFzc2V0Q2xvc2VUbwogICAgc3dhcAogICAgZ3R4bnMgUmVrZXlUbwogICAgZHVwCiAgICBidXJ5IDYKICAgID09CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTY4LTE2OQogICAgLy8gb3B0SW5UeG4uYXNzZXRDbG9zZVRvID09PSBvcHRJblR4bi5yZWtleVRvICYmCiAgICAvLyAgIG9wdEluVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGJ6IGNsYWltUG9hV2l0aEJveF9ib29sX2ZhbHNlQDgKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNjkKICAgIC8vIG9wdEluVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGRpZyAzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTY4LTE2OQogICAgLy8gb3B0SW5UeG4uYXNzZXRDbG9zZVRvID09PSBvcHRJblR4bi5yZWtleVRvICYmCiAgICAvLyAgIG9wdEluVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGJ6IGNsYWltUG9hV2l0aEJveF9ib29sX2ZhbHNlQDgKICAgIGludGNfMCAvLyAxCgpjbGFpbVBvYVdpdGhCb3hfYm9vbF9tZXJnZUA5OgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE2Ny0xNzEKICAgIC8vIGFzc2VydCgKICAgIC8vICAgb3B0SW5UeG4uYXNzZXRDbG9zZVRvID09PSBvcHRJblR4bi5yZWtleVRvICYmCiAgICAvLyAgICAgb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICAiT3B0LWluIHRyYW5zYWN0aW9uIGNsb3NlIHRvIG11c3QgYmUgemVybyBhZGRyZXNzIiwKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gT3B0LWluIHRyYW5zYWN0aW9uIGNsb3NlIHRvIG11c3QgYmUgemVybyBhZGRyZXNzCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTczCiAgICAvLyB0aGlzLnNlbmRQb2EoVHhuLnNlbmRlciwgb3B0SW5UeG4ueGZlckFzc2V0KTsKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICBjYWxsc3ViIHNlbmRQb2EKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpjbGFpbVBvYVdpdGhCb3hfYm9vbF9mYWxzZUA4OgogICAgaW50Y18xIC8vIDAKICAgIGIgY2xhaW1Qb2FXaXRoQm94X2Jvb2xfbWVyZ2VAOQoKY2xhaW1Qb2FXaXRoQm94X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMSAvLyAwCiAgICBiIGNsYWltUG9hV2l0aEJveF9ib29sX21lcmdlQDUKCgovLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6OlByb29mT2ZBdHRlbmRhbmNlLmNsYWltUG9hV2l0aEJveFJlZltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltUG9hV2l0aEJveFJlZjoKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXBuIDIKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE3OAogICAgLy8gY29uc3QgYm94UmVmID0gQm94PGJ5dGVzPih7IGtleTogVHhuLnNlbmRlci5ieXRlcyB9KTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxNzkKICAgIC8vIGNvbnN0IFtwb2FJZCwgZXhpc3RzXSA9IGJveFJlZi5tYXliZSgpOwogICAgYm94X2dldAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KGV4aXN0cywgIlBPQSBub3QgZm91bmQsIGF0dGVuZGFuY2UgdmFsaWRhdGlvbiBmYWlsZWQhIik7CiAgICBhc3NlcnQgLy8gUE9BIG5vdCBmb3VuZCwgYXR0ZW5kYW5jZSB2YWxpZGF0aW9uIGZhaWxlZCEKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxODEKICAgIC8vIGFzc2VydChvcHRJblR4bi54ZmVyQXNzZXQuaWQgPT09IG9wLmJ0b2kocG9hSWQpLCAiUE9BIElEIG1pc21hdGNoIik7CiAgICBkaWcgMQogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHN3YXAKICAgIGJ0b2kKICAgID09CiAgICBhc3NlcnQgLy8gUE9BIElEIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTgyCiAgICAvLyBhc3NlcnQob3B0SW5UeG4uZmVlID09PSAwLCAiV2UgZ290IHlvdSBjb3ZlcmVkIGZvciBmcmVlISIpOwogICAgZHVwCiAgICBndHhucyBGZWUKICAgICEKICAgIGFzc2VydCAvLyBXZSBnb3QgeW91IGNvdmVyZWQgZm9yIGZyZWUhCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTgzCiAgICAvLyBhc3NlcnQob3B0SW5UeG4uYXNzZXRBbW91bnQgPT09IDApOwogICAgZHVwCiAgICBndHhucyBBc3NldEFtb3VudAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTg1CiAgICAvLyBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICBzd2FwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgID09CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTg1LTE4NgogICAgLy8gb3B0SW5UeG4uc2VuZGVyID09PSBvcHRJblR4bi5hc3NldFJlY2VpdmVyICYmCiAgICAvLyAgIG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgPT09IFR4bi5zZW5kZXIsCiAgICBieiBjbGFpbVBvYVdpdGhCb3hSZWZfYm9vbF9mYWxzZUA0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTg2CiAgICAvLyBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE4NS0xODYKICAgIC8vIG9wdEluVHhuLnNlbmRlciA9PT0gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciAmJgogICAgLy8gICBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgYnogY2xhaW1Qb2FXaXRoQm94UmVmX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCmNsYWltUG9hV2l0aEJveFJlZl9ib29sX21lcmdlQDU6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTg0LTE4OAogICAgLy8gYXNzZXJ0KAogICAgLy8gICBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIC8vICAgICBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgLy8gICAiT3B0LWluIHRyYW5zYWN0aW9uIHNlbmRlciBhbmQgcmVjZWl2ZXIgbXVzdCBiZSB0aGUgc2FtZSIsCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIE9wdC1pbiB0cmFuc2FjdGlvbiBzZW5kZXIgYW5kIHJlY2VpdmVyIG11c3QgYmUgdGhlIHNhbWUKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxOTAKICAgIC8vIG9wdEluVHhuLmFzc2V0Q2xvc2VUbyA9PT0gb3B0SW5UeG4ucmVrZXlUbyAmJgogICAgZGlnIDIKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBzd2FwCiAgICBndHhucyBSZWtleVRvCiAgICBkdXAKICAgIGJ1cnkgNgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxOTAtMTkxCiAgICAvLyBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIC8vICAgb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogY2xhaW1Qb2FXaXRoQm94UmVmX2Jvb2xfZmFsc2VAOAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE5MQogICAgLy8gb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZGlnIDMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxOTAtMTkxCiAgICAvLyBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIC8vICAgb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogY2xhaW1Qb2FXaXRoQm94UmVmX2Jvb2xfZmFsc2VAOAogICAgaW50Y18wIC8vIDEKCmNsYWltUG9hV2l0aEJveFJlZl9ib29sX21lcmdlQDk6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MTg5LTE5MwogICAgLy8gYXNzZXJ0KAogICAgLy8gICBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIC8vICAgICBvcHRJblR4bi5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgICJPcHQtaW4gdHJhbnNhY3Rpb24gY2xvc2UgdG8gbXVzdCBiZSB6ZXJvIGFkZHJlc3MiLAogICAgLy8gKTsKICAgIGFzc2VydCAvLyBPcHQtaW4gdHJhbnNhY3Rpb24gY2xvc2UgdG8gbXVzdCBiZSB6ZXJvIGFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxOTUKICAgIC8vIHRoaXMuc2VuZFBvYShUeG4uc2VuZGVyLCBvcHRJblR4bi54ZmVyQXNzZXQpOwogICAgdHhuIFNlbmRlcgogICAgZGlnIDIKICAgIGNhbGxzdWIgc2VuZFBvYQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCmNsYWltUG9hV2l0aEJveFJlZl9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzEgLy8gMAogICAgYiBjbGFpbVBvYVdpdGhCb3hSZWZfYm9vbF9tZXJnZUA5CgpjbGFpbVBvYVdpdGhCb3hSZWZfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgY2xhaW1Qb2FXaXRoQm94UmVmX2Jvb2xfbWVyZ2VANQoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UuY2xhaW1Qb2FXaXRoQm94TWFwW3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1Qb2FXaXRoQm94TWFwOgogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoxOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cG4gMgogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMiAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MzAKICAgIC8vIGJveE1hcCA9IEJveE1hcDxieXRlcywgdWludDY0Pih7IGtleVByZWZpeDogImJveE1hcCIgfSk7CiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjAwCiAgICAvLyBjb25zdCBbcG9hSWQsIGV4aXN0c10gPSB0aGlzLmJveE1hcChUeG4uc2VuZGVyLmJ5dGVzKS5tYXliZSgpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjMwCiAgICAvLyBib3hNYXAgPSBCb3hNYXA8Ynl0ZXMsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICJib3hNYXAiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjAwCiAgICAvLyBjb25zdCBbcG9hSWQsIGV4aXN0c10gPSB0aGlzLmJveE1hcChUeG4uc2VuZGVyLmJ5dGVzKS5tYXliZSgpOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIwMQogICAgLy8gYXNzZXJ0KGV4aXN0cywgIlBPQSBub3QgZm91bmQsIGF0dGVuZGFuY2UgdmFsaWRhdGlvbiBmYWlsZWQhIik7CiAgICBzd2FwCiAgICBhc3NlcnQgLy8gUE9BIG5vdCBmb3VuZCwgYXR0ZW5kYW5jZSB2YWxpZGF0aW9uIGZhaWxlZCEKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMDIKICAgIC8vIGFzc2VydChvcHRJblR4bi54ZmVyQXNzZXQuaWQgPT09IHBvYUlkLCAiUE9BIElEIG1pc21hdGNoIik7CiAgICBkaWcgMQogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgID09CiAgICBhc3NlcnQgLy8gUE9BIElEIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjAzCiAgICAvLyBhc3NlcnQob3B0SW5UeG4uZmVlID09PSAwLCAiV2UgZ290IHlvdSBjb3ZlcmVkIGZvciBmcmVlISIpOwogICAgZHVwCiAgICBndHhucyBGZWUKICAgICEKICAgIGFzc2VydCAvLyBXZSBnb3QgeW91IGNvdmVyZWQgZm9yIGZyZWUhCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjA0CiAgICAvLyBhc3NlcnQob3B0SW5UeG4uYXNzZXRBbW91bnQgPT09IDApOwogICAgZHVwCiAgICBndHhucyBBc3NldEFtb3VudAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjA2CiAgICAvLyBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICBzd2FwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgID09CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjA2LTIwNwogICAgLy8gb3B0SW5UeG4uc2VuZGVyID09PSBvcHRJblR4bi5hc3NldFJlY2VpdmVyICYmCiAgICAvLyAgIG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgPT09IFR4bi5zZW5kZXIsCiAgICBieiBjbGFpbVBvYVdpdGhCb3hNYXBfYm9vbF9mYWxzZUA0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjA3CiAgICAvLyBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIwNi0yMDcKICAgIC8vIG9wdEluVHhuLnNlbmRlciA9PT0gb3B0SW5UeG4uYXNzZXRSZWNlaXZlciAmJgogICAgLy8gICBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgYnogY2xhaW1Qb2FXaXRoQm94TWFwX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCmNsYWltUG9hV2l0aEJveE1hcF9ib29sX21lcmdlQDU6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjA1LTIwOQogICAgLy8gYXNzZXJ0KAogICAgLy8gICBvcHRJblR4bi5zZW5kZXIgPT09IG9wdEluVHhuLmFzc2V0UmVjZWl2ZXIgJiYKICAgIC8vICAgICBvcHRJblR4bi5hc3NldFJlY2VpdmVyID09PSBUeG4uc2VuZGVyLAogICAgLy8gICAiT3B0LWluIHRyYW5zYWN0aW9uIHNlbmRlciBhbmQgcmVjZWl2ZXIgbXVzdCBiZSB0aGUgc2FtZSIsCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIE9wdC1pbiB0cmFuc2FjdGlvbiBzZW5kZXIgYW5kIHJlY2VpdmVyIG11c3QgYmUgdGhlIHNhbWUKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMTEKICAgIC8vIG9wdEluVHhuLmFzc2V0Q2xvc2VUbyA9PT0gb3B0SW5UeG4ucmVrZXlUbyAmJgogICAgZGlnIDIKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBzd2FwCiAgICBndHhucyBSZWtleVRvCiAgICBkdXAKICAgIGJ1cnkgNgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMTEtMjEyCiAgICAvLyBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIC8vICAgb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogY2xhaW1Qb2FXaXRoQm94TWFwX2Jvb2xfZmFsc2VAOAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIxMgogICAgLy8gb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZGlnIDMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMTEtMjEyCiAgICAvLyBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIC8vICAgb3B0SW5UeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogY2xhaW1Qb2FXaXRoQm94TWFwX2Jvb2xfZmFsc2VAOAogICAgaW50Y18wIC8vIDEKCmNsYWltUG9hV2l0aEJveE1hcF9ib29sX21lcmdlQDk6CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjEwLTIxNAogICAgLy8gYXNzZXJ0KAogICAgLy8gICBvcHRJblR4bi5hc3NldENsb3NlVG8gPT09IG9wdEluVHhuLnJla2V5VG8gJiYKICAgIC8vICAgICBvcHRJblR4bi5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgICJPcHQtaW4gdHJhbnNhY3Rpb24gY2xvc2UgdG8gbXVzdCBiZSB6ZXJvIGFkZHJlc3MiLAogICAgLy8gKTsKICAgIGFzc2VydCAvLyBPcHQtaW4gdHJhbnNhY3Rpb24gY2xvc2UgdG8gbXVzdCBiZSB6ZXJvIGFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMTYKICAgIC8vIHRoaXMuc2VuZFBvYShUeG4uc2VuZGVyLCBvcHRJblR4bi54ZmVyQXNzZXQpOwogICAgdHhuIFNlbmRlcgogICAgZGlnIDIKICAgIGNhbGxzdWIgc2VuZFBvYQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjE5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCmNsYWltUG9hV2l0aEJveE1hcF9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzEgLy8gMAogICAgYiBjbGFpbVBvYVdpdGhCb3hNYXBfYm9vbF9tZXJnZUA5CgpjbGFpbVBvYVdpdGhCb3hNYXBfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgY2xhaW1Qb2FXaXRoQm94TWFwX2Jvb2xfbWVyZ2VANQoKCi8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czo6UHJvb2ZPZkF0dGVuZGFuY2UubWludFBvYShjbGFpbWVyOiBieXRlcykgLT4gdWludDY0OgptaW50UG9hOgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIxOQogICAgLy8gcHJpdmF0ZSBtaW50UG9hKGNsYWltZXI6IEFjY291bnQpOiBBc3NldCB7CiAgICBwcm90byAxIDEKCm1pbnRQb2Ffd2hpbGVfdG9wQDM6CiAgICBwdXNoaW50IDEwMDEwIC8vIDEwMDEwCiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICA+CiAgICBieiBtaW50UG9hX2FmdGVyX3doaWxlQDgKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBieXRlYyA1IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgNSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBiIG1pbnRQb2Ffd2hpbGVfdG9wQDMKCm1pbnRQb2FfYWZ0ZXJfd2hpbGVAODoKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMjIKICAgIC8vIG9wLml0b2IodGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSksCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbEF0dGVuZGVlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18wIC8vICJ0b3RhbEF0dGVuZGVlcyIKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMjIKICAgIC8vIG9wLml0b2IodGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSksCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIyMQogICAgLy8gY29uc3QgYXNzZXROYW1lID0gQnl0ZXMoIkFsZ29LaXQgUE9BICMiKS5jb25jYXQoCiAgICBwdXNoYnl0ZXMgIkFsZ29LaXQgUE9BICMiCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjIxLTIyMwogICAgLy8gY29uc3QgYXNzZXROYW1lID0gQnl0ZXMoIkFsZ29LaXQgUE9BICMiKS5jb25jYXQoCiAgICAvLyAgIG9wLml0b2IodGhpcy50b3RhbEF0dGVuZGVlcy52YWx1ZSksCiAgICAvLyApOwogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjI0LTIzMwogICAgLy8gcmV0dXJuIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBhc3NldE5hbWU6IGFzc2V0TmFtZSwKICAgIC8vICAgICB1bml0TmFtZTogIlBPQSIsCiAgICAvLyAgICAgdG90YWw6IDEsCiAgICAvLyAgICAgZGVjaW1hbHM6IDAsCiAgICAvLyAgICAgdXJsOiB0aGlzLmFzc2V0VXJsLnZhbHVlLAogICAgLy8gICAgIG1hbmFnZXI6IGNsYWltZXIsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXNzZXQ7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjMwCiAgICAvLyB1cmw6IHRoaXMuYXNzZXRVcmwudmFsdWUsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI2CiAgICAvLyBhc3NldFVybCA9IEdsb2JhbFN0YXRlKHsKICAgIGJ5dGVjIDQgLy8gImFzc2V0VXJsIgogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIzMAogICAgLy8gdXJsOiB0aGlzLmFzc2V0VXJsLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMjkKICAgIC8vIGRlY2ltYWxzOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIyOAogICAgLy8gdG90YWw6IDEsCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjI3CiAgICAvLyB1bml0TmFtZTogIlBPQSIsCiAgICBwdXNoYnl0ZXMgIlBPQSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMjQtMjMyCiAgICAvLyByZXR1cm4gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGFzc2V0TmFtZTogYXNzZXROYW1lLAogICAgLy8gICAgIHVuaXROYW1lOiAiUE9BIiwKICAgIC8vICAgICB0b3RhbDogMSwKICAgIC8vICAgICBkZWNpbWFsczogMCwKICAgIC8vICAgICB1cmw6IHRoaXMuYXNzZXRVcmwudmFsdWUsCiAgICAvLyAgICAgbWFuYWdlcjogY2xhaW1lciwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMjQtMjMzCiAgICAvLyByZXR1cm4gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGFzc2V0TmFtZTogYXNzZXROYW1lLAogICAgLy8gICAgIHVuaXROYW1lOiAiUE9BIiwKICAgIC8vICAgICB0b3RhbDogMSwKICAgIC8vICAgICBkZWNpbWFsczogMCwKICAgIC8vICAgICB1cmw6IHRoaXMuYXNzZXRVcmwudmFsdWUsCiAgICAvLyAgICAgbWFuYWdlcjogY2xhaW1lciwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBc3NldDsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjMzCiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFzc2V0OwogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIyNC0yMzMKICAgIC8vIHJldHVybiBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgYXNzZXROYW1lOiBhc3NldE5hbWUsCiAgICAvLyAgICAgdW5pdE5hbWU6ICJQT0EiLAogICAgLy8gICAgIHRvdGFsOiAxLAogICAgLy8gICAgIGRlY2ltYWxzOiAwLAogICAgLy8gICAgIHVybDogdGhpcy5hc3NldFVybC52YWx1ZSwKICAgIC8vICAgICBtYW5hZ2VyOiBjbGFpbWVyLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFzc2V0OwogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjpQcm9vZk9mQXR0ZW5kYW5jZS5zZW5kUG9hKHJlY2VpdmVyOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKc2VuZFBvYToKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMzYKICAgIC8vIHByaXZhdGUgc2VuZFBvYShyZWNlaXZlcjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyMzctMjQ0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHNlbmRlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9wcm9vZi1vZi1hdHRlbmRhbmNlL3Byb29mLW9mLWF0dGVuZGFuY2UuYWxnby50czoyNDAKICAgIC8vIHNlbmRlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjI0MgogICAgLy8gYXNzZXRBbW91bnQ6IDEsCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBjb250cmFjdHMvcHJvb2Ytb2YtYXR0ZW5kYW5jZS9wcm9vZi1vZi1hdHRlbmRhbmNlLmFsZ28udHM6MjM3LTI0MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBzZW5kZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAxLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL3Byb29mLW9mLWF0dGVuZGFuY2UvcHJvb2Ytb2YtYXR0ZW5kYW5jZS5hbGdvLnRzOjIzNy0yNDQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgc2VuZGVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKICAgIC8vICAgICBhc3NldEFtb3VudDogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CiADAQAEJgYOdG90YWxBdHRlbmRlZXMMbWF4QXR0ZW5kZWVzBmJveE1hcAQVH3x1CGFzc2V0VXJsAwaBATEYQABBKYEeZycEgDVpcGZzOi8vUW1XNXZFUmtnZUpKdFNZMVlRZGNXVTZnc0hDWkN5TEZ0TTFvVDl1eXkyV0dtOGcoI2cxGRREMRhBAFyCDAQJUnNSBDTvdHsEdzKpAASEhaGVBH+M8KsE3WF9fQSbSHqABLp5b+oEfel1ZgSD3TdfBHZaM9oELHqBjDYaAI4MAB4ARABpAJIAvADIANYA4gDyAVcBvQIiAIAEG83lLTYaAI4BAAEANhoBFzEAMgkSRClMZyJDIyhlRCMpZUQMRDEAiAJdIyhlRCIIKExnMQC9RQEURDEATBa/IkMjKGVEIyllRAxEMQCIAjcjKGVEIggoTGcxAEm9RQEUREwWvyJDIyhlRCMpZUQMRDEAiAISIyhlRCIIKExnMQBJvUUBFERMFksBvEi/IkMjKGVEIyllRAxEMQCIAekjKGVEIggoTGcqMQBQvUUBFEQqMQBQTBa/IkMxAL5EFxYrTFCwIkMxAL5MF0xEFitMULAiQzEAvkQXFitMULAiQyoxAFC+TBdMRBYrTFCwIkMjMRYiCUcCOBAkEkQxAL5ESwE4EUlOA0wXEkRJOAEUREk4EhRESTgATDgUSU4CEkEAL0kxABJBACgiREsCSTgVTDggSUUGEkEAE0sDMgMSQQALIkQxAEsCiAGeIkMjQv/yI0L/1SMxFiIJRwI4ECQSRDEAvkwXTERLATgRSU4DEkRJOAEUREk4EhRESTgATDgUSU4CEkEAL0kxABJBACgiREsCSTgVTDggSUUGEkEAE0sDMgMSQQALIkQxAEsCiAE4IkMjQv/yI0L/1SMxFiIJRwI4ECQSRDEAvkRLATgRSU4DTBcSREk4ARRESTgSFERJOABMOBRJTgISQQAvSTEAEkEAKCJESwJJOBVMOCBJRQYSQQATSwMyAxJBAAsiRDEASwKIANMiQyNC//IjQv/VIzEWIglHAjgQJBJEKjEAUL5MF0xESwE4EUlOAxJESTgBFERJOBIUREk4AEw4FElOAhJBAC9JMQASQQAoIkRLAkk4FUw4IElFBhJBABNLAzIDEkEACyJEMQBLAogAayJDI0L/8iNC/9WKAQGBmk4yDA1BABmxgQayEIEFshknBbIeJwWyHzIAsgGzQv/eIyhlRBaADUFsZ29LaXQgUE9BICNMULEjJwRlRIv/simyJyOyIyKyIoADUE9BsiWyJoEDshAjsgGztDyJigIAsTIKIrISi/6yFLIAi/+yESSyECOyAbOJ", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 0, "patch": 0 } }, "events": [], "templateVariables": {} }