ITxhcmNoPgovICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgICAgMCAgICAgMCAgICAgICA3NCAgICAgICAgYAoAAAABAAABFl9STnZOdENzM0VRdnpIODJRQl8xN3J1c3RjX2Vycm9yX2NvZGVzMTFlcnJvcl9jb2RlczExRElBR05PU1RJQ1MAAC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2ICAgICAgICBgCnJ1c3RjX2Vycm9yX2NvZGVzLTQxNGI5NzZhYmIxYzExMjYucnVzdGNfZXJyb3JfY29kZXMuZGUwOGU0OTctY2d1LjAucmNndS5vLwovMCAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgICAgMCAgICAgNjQ0ICAgICA1NDY2MTYgICAgYAp/RUxGAgEBAAAAAAAAAAAAAQA+AAEAAAAAAAAAAAAAAAAAAAAAAAAAOGAHAAAAAAAAAAAAQAAAAAAAQADcAwEARTAwMDEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIHN1Z2dlc3RzIHRoYXQgdGhlIGV4cHJlc3Npb24gYXJtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vdGVkIHBhdHRlcm4Kd2lsbCBuZXZlciBiZSByZWFjaGVkIGFzIGZvciBhbGwgcG9zc2libGUgdmFsdWVzIG9mIHRoZSBleHByZXNzaW9uIGJlaW5nCm1hdGNoZWQsIG9uZSBvZiB0aGUgcHJlY2VkaW5nIHBhdHRlcm5zIHdpbGwgbWF0Y2guCgpUaGlzIG1lYW5zIHRoYXQgcGVyaGFwcyBzb21lIG9mIHRoZSBwcmVjZWRpbmcgcGF0dGVybnMgYXJlIHRvbyBnZW5lcmFsLCB0aGlzCm9uZSBpcyB0b28gc3BlY2lmaWMgb3IgdGhlIG9yZGVyaW5nIGlzIGluY29ycmVjdC4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGBtYXRjaGAgYmxvY2sgaGFzIHRvbyBtYW55IGFybXM6CgpgYGAKbWF0Y2ggU29tZSgwKSB7CiAgICBTb21lKGJhcikgPT4gey8qIC4uLiAqL30KICAgIHggPT4gey8qIC4uLiAqL30gLy8gVGhpcyBoYW5kbGVzIHRoZSBgTm9uZWAgY2FzZQogICAgXyA9PiB7LyogLi4uICovfSAvLyBBbGwgcG9zc2libGUgY2FzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaGFuZGxlZAp9CmBgYAoKYG1hdGNoYCBibG9ja3MgaGF2ZSB0aGVpciBwYXR0ZXJucyBtYXRjaGVkIGluIG9yZGVyLCBzbywgZm9yIGV4YW1wbGUsIHB1dHRpbmcKYSB3aWxkY2FyZCBhcm0gYWJvdmUgYSBtb3JlIHNwZWNpZmljIGFybSB3aWxsIG1ha2UgdGhlIGxhdHRlciBhcm0gaXJyZWxldmFudC4KCkVuc3VyZSB0aGUgb3JkZXJpbmcgb2YgdGhlIG1hdGNoIGFybSBpcyBjb3JyZWN0IGFuZCByZW1vdmUgYW55IHN1cGVyZmx1b3VzCmFybXMuCkUwMDAyIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhbiBlbXB0eSBtYXRjaCBleHByZXNzaW9uIGlzIGludmFsaWQgYmVjYXVzZSB0aGUgdHlwZQppdCBpcyBtYXRjaGluZyBvbiBpcyBub24tZW1wdHkgKHRoZXJlIGV4aXN0IHZhbHVlcyBvZiB0aGlzIHR5cGUpLiBJbiBzYWZlIGNvZGUKaXQgaXMgaW1wb3NzaWJsZSB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gZW1wdHkgdHlwZSwgc28gZW1wdHkgbWF0Y2gKZXhwcmVzc2lvbnMgYXJlIGFsbW9zdCBuZXZlciBkZXNpcmVkLiBUaGlzIGVycm9yIGlzIHR5cGljYWxseSBmaXhlZCBieSBhZGRpbmcKb25lIG9yIG1vcmUgY2FzZXMgdG8gdGhlIG1hdGNoIGV4cHJlc3Npb24uCgpBbiBleGFtcGxlIG9mIGFuIGVtcHR5IHR5cGUgaXMgYGVudW0gRW1wdHkgeyB9YC4gU28sIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOgoKYGBgCmVudW0gRW1wdHkge30KCmZuIGZvbyh4OiBFbXB0eSkgewogICAgbWF0Y2ggeCB7CiAgICAgICAgLy8gZW1wdHkKICAgIH0KfQpgYGAKCkhvd2V2ZXIsIHRoaXMgd29uJ3Q6CgpgYGBjb21waWxlX2ZhaWwKZm4gZm9vKHg6IE9wdGlvbjxTdHJpbmc+KSB7CiAgICBtYXRjaCB4IHsKICAgICAgICAvLyBlbXB0eQogICAgfQp9CmBgYApFMDAwNFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdCBndWFyYW50ZWUgYSBtYXRjaGluZyBwYXR0ZXJuIGZvcgpvbmUgb3IgbW9yZSBwb3NzaWJsZSBpbnB1dHMgdG8gYSBtYXRjaCBleHByZXNzaW9uLiBHdWFyYW50ZWVkIG1hdGNoZXMgYXJlCnJlcXVpcmVkIGluIG9yZGVyIHRvIGFzc2lnbiB2YWx1ZXMgdG8gbWF0Y2ggZXhwcmVzc2lvbnMsIG9yIGFsdGVybmF0aXZlbHksCmRldGVybWluZSB0aGUgZmxvdyBvZiBleGVjdXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDA0CmVudW0gVGVybWluYXRvciB7CiAgICBIYXN0YUxhVmlzdGFCYWJ5LAogICAgVGFsa1RvTXlIYW5kLAp9CgpsZXQgeCA9IFRlcm1pbmF0b3I6Okhhc3RhTGFWaXN0YUJhYnk7CgptYXRjaCB4IHsgLy8gZXJyb3I6IG5vbi1leGhhdXN0aXZlIHBhdHRlcm5zOiBgSGFzdGFMYVZpc3RhQmFieWAgbm90IGNvdmVyZWQKICAgIFRlcm1pbmF0b3I6OlRhbGtUb015SGFuZCA9PiB7fQp9CmBgYAoKSWYgeW91IGVuY291bnRlciB0aGlzIGVycm9yIHlvdSBtdXN0IGFsdGVyIHlvdXIgcGF0dGVybnMgc28gdGhhdCBldmVyeSBwb3NzaWJsZQp2YWx1ZSBvZiB0aGUgaW5wdXQgdHlwZSBpcyBtYXRjaGVkLiBGb3IgdHlwZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiB2YXJpYW50cwoobGlrZSBlbnVtcykgeW91IHNob3VsZCBwcm9iYWJseSBjb3ZlciBhbGwgY2FzZXMgZXhwbGljaXRseS4gQWx0ZXJuYXRpdmVseSwgdGhlCnVuZGVyc2NvcmUgYF9gIHdpbGRjYXJkIHBhdHRlcm4gY2FuIGJlIGFkZGVkIGFmdGVyIGFsbCBvdGhlciBwYXR0ZXJucyB0byBtYXRjaAoiYW55dGhpbmcgZWxzZSIuIEV4YW1wbGU6CgpgYGAKZW51bSBUZXJtaW5hdG9yIHsKICAgIEhhc3RhTGFWaXN0YUJhYnksCiAgICBUYWxrVG9NeUhhbmQsCn0KCmxldCB4ID0gVGVybWluYXRvcjo6SGFzdGFMYVZpc3RhQmFieTsKCm1hdGNoIHggewogICAgVGVybWluYXRvcjo6VGFsa1RvTXlIYW5kID0+IHt9CiAgICBUZXJtaW5hdG9yOjpIYXN0YUxhVmlzdGFCYWJ5ID0+IHt9Cn0KCi8vIG9yOgoKbWF0Y2ggeCB7CiAgICBUZXJtaW5hdG9yOjpUYWxrVG9NeUhhbmQgPT4ge30KICAgIF8gPT4ge30KfQpgYGAKRTAwMDVQYXR0ZXJucyB1c2VkIHRvIGJpbmQgbmFtZXMgbXVzdCBiZSBpcnJlZnV0YWJsZSwgdGhhdCBpcywgdGhleSBtdXN0IGd1YXJhbnRlZQp0aGF0IGEgbmFtZSB3aWxsIGJlIGV4dHJhY3RlZCBpbiBhbGwgY2FzZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDA1CmxldCB4ID0gU29tZSgxKTsKbGV0IFNvbWUoeSkgPSB4OwovLyBlcnJvcjogcmVmdXRhYmxlIHBhdHRlcm4gaW4gbG9jYWwgYmluZGluZzogYE5vbmVgIG5vdCBjb3ZlcmVkCmBgYAoKSWYgeW91IGVuY291bnRlciB0aGlzIGVycm9yIHlvdSBwcm9iYWJseSBuZWVkIHRvIHVzZSBhIGBtYXRjaGAgb3IgYGlmIGxldGAgdG8KZGVhbCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBFeGFtcGxlOgoKYGBgCmxldCB4ID0gU29tZSgxKTsKCm1hdGNoIHggewogICAgU29tZSh5KSA9PiB7CiAgICAgICAgLy8gZG8gc29tZXRoaW5nCiAgICB9LAogICAgTm9uZSA9PiB7fQp9CgovLyBvcjoKCmlmIGxldCBTb21lKHkpID0geCB7CiAgICAvLyBkbyBzb21ldGhpbmcKfQpgYGAKRTAwMDcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBiaW5kaW5ncyBpbiBhIG1hdGNoIGFybSB3b3VsZCByZXF1aXJlIGEgdmFsdWUgdG8KYmUgbW92ZWQgaW50byBtb3JlIHRoYW4gb25lIGxvY2F0aW9uLCB0aHVzIHZpb2xhdGluZyB1bmlxdWUgb3duZXJzaGlwLiBDb2RlCmxpa2UgdGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGFzIGl0IHJlcXVpcmVzIHRoZSBlbnRpcmUgYE9wdGlvbjxTdHJpbmc+YCB0byBiZQptb3ZlZCBpbnRvIGEgdmFyaWFibGUgY2FsbGVkIGBvcF9zdHJpbmdgIHdoaWxlIHNpbXVsdGFuZW91c2x5IHJlcXVpcmluZyB0aGUKaW5uZXIgYFN0cmluZ2AgdG8gYmUgbW92ZWQgaW50byBhIHZhcmlhYmxlIGNhbGxlZCBgc2AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgyCiMhW2ZlYXR1cmUoYmluZGluZ3NfYWZ0ZXJfYXQpXQoKbGV0IHggPSBTb21lKCJzIi50b19zdHJpbmcoKSk7CgptYXRjaCB4IHsKICAgIG9wX3N0cmluZyBAIFNvbWUocykgPT4ge30sIC8vIGVycm9yOiB1c2Ugb2YgbW92ZWQgdmFsdWUKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpTZWUgYWxzbyB0aGUgZXJyb3IgRTAzMDMuCkUwMDA5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW4gYSBwYXR0ZXJuLCBhbGwgdmFsdWVzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgaGF2ZSB0byBiZSBib3VuZAp0aGUgc2FtZSB3YXkuIFRoZSBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgYmluZGluZyBzaW11bHRhbmVvdXNseSBieS1tb3ZlIGFuZApieS1yZWYuCgpUaGlzIGxpbWl0YXRpb24gbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSdXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKG1vdmVfcmVmX3BhdHRlcm4pXQoKc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKCh5LCByZWYgeikpID0+IHt9LCAvLyBlcnJvcjogY2Fubm90IGJpbmQgYnktbW92ZSBhbmQgYnktcmVmIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHNhbWUgcGF0dGVybgogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYAoKWW91IGhhdmUgdHdvIHNvbHV0aW9uczoKClNvbHV0aW9uICMxOiBCaW5kIHRoZSBwYXR0ZXJuJ3MgdmFsdWVzIHRoZSBzYW1lIHdheS4KCmBgYApzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHJlZiB5LCByZWYgeikpID0+IHt9LAogICAgLy8gb3IgU29tZSgoeSwgeikpID0+IHt9CiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgpTb2x1dGlvbiAjMjogSW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgZm9yIHRoZSBgWGAgc3RydWN0dXJlLgoKSG93ZXZlciwgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBmaXJzdCBzb2x1dGlvbiBzaG91bGQgYmUgcHJlZmVycmVkLgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0Kc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKCh5LCByZWYgeikpID0+IHt9LAogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYApFMDAxMFRoZSB2YWx1ZSBvZiBzdGF0aWNzIGFuZCBjb25zdGFudHMgbXVzdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCB0aGV5IGxpdmUKZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgYSBwcm9ncmFtLiBDcmVhdGluZyBhIGJveGVkIHZhbHVlIGFsbG9jYXRlcyBtZW1vcnkgb24KdGhlIGhlYXAgYXQgcnVudGltZSwgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZG9uZSBhdCBjb21waWxlIHRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDEwCiMhW2ZlYXR1cmUoYm94X3N5bnRheCldCgpjb25zdCBDT04gOiBCb3g8aTMyPiA9IGJveCAwOwpgYGAKRTAwMTNTdGF0aWMgYW5kIGNvbnN0IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgY29uc3QgdmFyaWFibGVzLiBCdXQgYSBjb25zdAp2YXJpYWJsZSBjYW5ub3QgcmVmZXIgdG8gYSBzdGF0aWMgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDEzCnN0YXRpYyBYOiBpMzIgPSA0MjsKY29uc3QgWTogaTMyID0gWDsKYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBZYCBjYW5ub3QgcmVmZXIgdG8gYFhgLiBUbyBmaXggdGhpcywgdGhlIHZhbHVlIGNhbiBiZQpleHRyYWN0ZWQgYXMgYSBjb25zdCBhbmQgdGhlbiB1c2VkOgoKYGBgCmNvbnN0IEE6IGkzMiA9IDQyOwpzdGF0aWMgWDogaTMyID0gQTsKY29uc3QgWTogaTMyID0gQTsKYGBgCkUwMDE0IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQ29uc3RhbnRzIGNhbiBvbmx5IGJlIGluaXRpYWxpemVkIGJ5IGEgY29uc3RhbnQgdmFsdWUgb3IsIGluIGEgZnV0dXJlCnZlcnNpb24gb2YgUnVzdCwgYSBjYWxsIHRvIGEgY29uc3QgZnVuY3Rpb24uIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSB1c2UKb2YgYSBwYXRoIChsaWtlIGE6OmIsIG9yIHgpIGRlbm90aW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIG9uZSBvZiB0aGVzZQphbGxvd2VkIGl0ZW1zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYApjb25zdCBGT086IGkzMiA9IHsgbGV0IHggPSAwOyB4IH07IC8vICd4JyBpc24ndCBhIGNvbnN0YW50IG5vciBhIGZ1bmN0aW9uIQpgYGAKClRvIGF2b2lkIGl0LCB5b3UgaGF2ZSB0byByZXBsYWNlIHRoZSBub24tY29uc3RhbnQgdmFsdWU6CgpgYGAKY29uc3QgRk9POiBpMzIgPSB7IGNvbnN0IFggOiBpMzIgPSAwOyBYIH07Ci8vIG9yIGV2ZW46CmNvbnN0IEZPTzI6IGkzMiA9IHsgMCB9OyAvLyBidXQgYnJhY2tldHMgYXJlIHVzZWxlc3MgaGVyZQpgYGAKRTAwMTVBIGNvbnN0YW50IGl0ZW0gd2FzIGluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgY29uc3RhbnQKZXhwcmVzc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMTUKZm4gY3JlYXRlX3NvbWUoKSAtPiBPcHRpb248dTg+IHsKICAgIFNvbWUoMSkKfQoKY29uc3QgRk9POiBPcHRpb248dTg+ID0gY3JlYXRlX3NvbWUoKTsgLy8gZXJyb3IhCmBgYAoKVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBzdGF0aWMgb3IgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlCmBjb25zdGAgZnVuY3Rpb25zLCBhbmQgc3RydWN0L2VudW0gY29uc3RydWN0b3JzLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBjYW4gZGVjbGFyZSBgY3JlYXRlX3NvbWVgIGFzIGEgY29uc3RhbnQgZnVuY3Rpb246CgpgYGAKY29uc3QgZm4gY3JlYXRlX3NvbWUoKSAtPiBPcHRpb248dTg+IHsgLy8gZGVjbGFyZWQgYXMgYSBjb25zdCBmdW5jdGlvbgogICAgU29tZSgxKQp9Cgpjb25zdCBGT086IE9wdGlvbjx1OD4gPSBjcmVhdGVfc29tZSgpOyAvLyBvayEKCi8vIFRoZXNlIGFyZSBhbHNvIHdvcmtpbmc6CnN0cnVjdCBCYXIgewogICAgeDogdTgsCn0KCmNvbnN0IE9USEVSX0ZPTzogT3B0aW9uPHU4PiA9IFNvbWUoMSk7CmNvbnN0IEJBUjogQmFyID0gQmFyIHt4OiAxfTsKYGBgCkUwMDIzQSBwYXR0ZXJuIGF0dGVtcHRlZCB0byBleHRyYWN0IGFuIGluY29ycmVjdCBudW1iZXIgb2YgZmllbGRzIGZyb20gYSB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyMwplbnVtIEZydWl0IHsKICAgIEFwcGxlKFN0cmluZywgU3RyaW5nKSwKICAgIFBlYXIodTMyKSwKfQoKbGV0IHggPSBGcnVpdDo6QXBwbGUoU3RyaW5nOjpuZXcoKSwgU3RyaW5nOjpuZXcoKSk7CgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhKSA9PiB7fSwgLy8gZXJyb3IhCiAgICBfID0+IHt9Cn0KYGBgCgpBIHBhdHRlcm4gdXNlZCB0byBtYXRjaCBhZ2FpbnN0IGFuIGVudW0gdmFyaWFudCBtdXN0IHByb3ZpZGUgYSBzdWItcGF0dGVybiBmb3IKZWFjaCBmaWVsZCBvZiB0aGUgZW51bSB2YXJpYW50LgoKSGVyZSB0aGUgYEFwcGxlYCB2YXJpYW50IGhhcyB0d28gZmllbGRzLCBhbmQgc2hvdWxkIGJlIG1hdGNoZWQgYWdhaW5zdCBsaWtlIHNvOgoKYGBgCmVudW0gRnJ1aXQgewogICAgQXBwbGUoU3RyaW5nLCBTdHJpbmcpLAogICAgUGVhcih1MzIpLAp9CgpsZXQgeCA9IEZydWl0OjpBcHBsZShTdHJpbmc6Om5ldygpLCBTdHJpbmc6Om5ldygpKTsKCi8vIENvcnJlY3QuCm1hdGNoIHggewogICAgRnJ1aXQ6OkFwcGxlKGEsIGIpID0+IHt9LAogICAgXyA9PiB7fQp9CmBgYAoKTWF0Y2hpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBoYXMgbm8gc2Vuc2libGUgaW50ZXJwcmV0YXRpb246CgpgYGBjb21waWxlX2ZhaWwsRTAwMjMKZW51bSBGcnVpdCB7CiAgICBBcHBsZShTdHJpbmcsIFN0cmluZyksCiAgICBQZWFyKHUzMiksCn0KCmxldCB4ID0gRnJ1aXQ6OkFwcGxlKFN0cmluZzo6bmV3KCksIFN0cmluZzo6bmV3KCkpOwoKLy8gSW5jb3JyZWN0LgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhKSA9PiB7fSwKICAgIEZydWl0OjpBcHBsZShhLCBiLCBjKSA9PiB7fSwKfQpgYGAKCkNoZWNrIGhvdyBtYW55IGZpZWxkcyB0aGUgZW51bSB3YXMgZGVjbGFyZWQgd2l0aCBhbmQgZW5zdXJlIHRoYXQgeW91ciBwYXR0ZXJuCnVzZXMgdGhlIHNhbWUgbnVtYmVyLgpFMDAyNUVhY2ggZmllbGQgb2YgYSBzdHJ1Y3QgY2FuIG9ubHkgYmUgYm91bmQgb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI1CnN0cnVjdCBGb28gewogICAgYTogdTgsCiAgICBiOiB1OCwKfQoKZm4gbWFpbigpewogICAgbGV0IHggPSBGb28geyBhOjEsIGI6MiB9OwoKICAgIGxldCBGb28geyBhOiB4LCBhOiB5IH0gPSB4OwogICAgLy8gZXJyb3I6IGZpZWxkIGBhYCBib3VuZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcGF0dGVybgp9CmBgYAoKRWFjaCBvY2N1cnJlbmNlIG9mIGEgZmllbGQgbmFtZSBiaW5kcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCwgc28gdG8gZml4IHRoaXMKZXJyb3IgeW91IHdpbGwgaGF2ZSB0byByZW1vdmUgb3IgYWx0ZXIgdGhlIGR1cGxpY2F0ZSB1c2VzIG9mIHRoZSBmaWVsZCBuYW1lLgpQZXJoYXBzIHlvdSBtaXNzcGVsbGVkIGFub3RoZXIgZmllbGQgbmFtZT8gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHU4LAogICAgYjogdTgsCn0KCmZuIG1haW4oKXsKICAgIGxldCB4ID0gRm9vIHsgYToxLCBiOjIgfTsKCiAgICBsZXQgRm9vIHsgYTogeCwgYjogeSB9ID0geDsgLy8gb2shCn0KYGBgCkUwMDI2QSBzdHJ1Y3QgcGF0dGVybiBhdHRlbXB0ZWQgdG8gZXh0cmFjdCBhIG5vbi1leGlzdGVudCBmaWVsZCBmcm9tIGEgc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNgpzdHJ1Y3QgVGhpbmcgewogICAgeDogdTMyLAogICAgeTogdTMyLAp9CgpsZXQgdGhpbmcgPSBUaGluZyB7IHg6IDAsIHk6IDAgfTsKCm1hdGNoIHRoaW5nIHsKICAgIFRoaW5nIHsgeCwgeiB9ID0+IHt9IC8vIGVycm9yOiBgVGhpbmc6OnpgIGZpZWxkIGRvZXNuJ3QgZXhpc3QKfQpgYGAKCklmIHlvdSBhcmUgdXNpbmcgc2hvcnRoYW5kIGZpZWxkIHBhdHRlcm5zIGJ1dCB3YW50IHRvIHJlZmVyIHRvIHRoZSBzdHJ1Y3QgZmllbGQKYnkgYSBkaWZmZXJlbnQgbmFtZSwgeW91IHNob3VsZCByZW5hbWUgaXQgZXhwbGljaXRseS4gU3RydWN0IGZpZWxkcyBhcmUKaWRlbnRpZmllZCBieSB0aGUgbmFtZSB1c2VkIGJlZm9yZSB0aGUgY29sb24gYDpgIHNvIHN0cnVjdCBwYXR0ZXJucyBzaG91bGQKcmVzZW1ibGUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBzdHJ1Y3QgdHlwZSBiZWluZyBtYXRjaGVkLgoKYGBgCnN0cnVjdCBUaGluZyB7CiAgICB4OiB1MzIsCiAgICB5OiB1MzIsCn0KCmxldCB0aGluZyA9IFRoaW5nIHsgeDogMCwgeTogMCB9OwoKbWF0Y2ggdGhpbmcgewogICAgVGhpbmcgeyB4LCB5OiB6IH0gPT4ge30gLy8gd2UgcmVuYW1lZCBgeWAgdG8gYHpgCn0KYGBgCkUwMDI3QSBwYXR0ZXJuIGZvciBhIHN0cnVjdCBmYWlscyB0byBzcGVjaWZ5IGEgc3ViLXBhdHRlcm4gZm9yIGV2ZXJ5IG9uZSBvZiB0aGUKc3RydWN0J3MgZmllbGRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNwpzdHJ1Y3QgRG9nIHsKICAgIG5hbWU6IFN0cmluZywKICAgIGFnZTogdTMyLAp9CgpsZXQgZCA9IERvZyB7IG5hbWU6ICJSdXN0eSIudG9fc3RyaW5nKCksIGFnZTogOCB9OwoKLy8gVGhpcyBpcyBpbmNvcnJlY3QuCm1hdGNoIGQgewogICAgRG9nIHsgYWdlOiB4IH0gPT4ge30KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBlbnN1cmUgdGhhdCBlYWNoIGZpZWxkIGZyb20gdGhlIHN0cnVjdCdzIGRlZmluaXRpb24gaXMKbWVudGlvbmVkIGluIHRoZSBwYXR0ZXJuLCBvciB1c2UgYC4uYCB0byBpZ25vcmUgdW53YW50ZWQgZmllbGRzLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBEb2cgewogICAgbmFtZTogU3RyaW5nLAogICAgYWdlOiB1MzIsCn0KCmxldCBkID0gRG9nIHsgbmFtZTogIlJ1c3R5Ii50b19zdHJpbmcoKSwgYWdlOiA4IH07CgptYXRjaCBkIHsKICAgIERvZyB7IG5hbWU6IHJlZiBuLCBhZ2U6IHggfSA9PiB7fQp9CgovLyBUaGlzIGlzIGFsc28gY29ycmVjdCAoaWdub3JlIHVudXNlZCBmaWVsZHMpLgptYXRjaCBkIHsKICAgIERvZyB7IGFnZTogeCwgLi4gfSA9PiB7fQp9CmBgYApFMDAyOVNvbWV0aGluZyBvdGhlciB0aGFuIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgaGFzIGJlZW4gdXNlZCBmb3IgYSByYW5nZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjkKbGV0IHN0cmluZyA9ICJzYWx1dGF0aW9ucyAhIjsKCi8vIFRoZSBvcmRlcmluZyByZWxhdGlvbiBmb3Igc3RyaW5ncyBjYW5ub3QgYmUgZXZhbHVhdGVkIGF0IGNvbXBpbGUgdGltZSwKLy8gc28gdGhpcyBkb2Vzbid0IHdvcms6Cm1hdGNoIHN0cmluZyB7CiAgICAiaGVsbG8iIC4uPSAid29ybGQiID0+IHt9CiAgICBfID0+IHt9Cn0KCi8vIFRoaXMgaXMgYSBtb3JlIGdlbmVyYWwgdmVyc2lvbiwgdXNpbmcgYSBndWFyZDoKbWF0Y2ggc3RyaW5nIHsKICAgIHMgaWYgcyA+PSAiaGVsbG8iICYmIHMgPD0gIndvcmxkIiA9PiB7fQogICAgXyA9PiB7fQp9CmBgYAoKSW4gYSBtYXRjaCBleHByZXNzaW9uLCBvbmx5IG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgY2FuIGJlIG1hdGNoZWQgYWdhaW5zdCBhCnJhbmdlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNoZWNrcyB0aGF0IHRoZSByYW5nZSBpcyBub24tZW1wdHkgYXQKY29tcGlsZS10aW1lLCBhbmQgaXMgdW5hYmxlIHRvIGV2YWx1YXRlIGFyYml0cmFyeSBjb21wYXJpc29uIGZ1bmN0aW9ucy4gSWYgeW91CndhbnQgdG8gY2FwdHVyZSB2YWx1ZXMgb2YgYW4gb3JkZXJhYmxlIHR5cGUgYmV0d2VlbiB0d28gZW5kLXBvaW50cywgeW91IGNhbiB1c2UKYSBndWFyZC4KRTAwMzBXaGVuIG1hdGNoaW5nIGFnYWluc3QgYSByYW5nZSwgdGhlIGNvbXBpbGVyIHZlcmlmaWVzIHRoYXQgdGhlIHJhbmdlIGlzCm5vbi1lbXB0eS4gUmFuZ2UgcGF0dGVybnMgaW5jbHVkZSBib3RoIGVuZC1wb2ludHMsIHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0bwpyZXF1aXJpbmcgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUKcmFuZ2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDMwCm1hdGNoIDV1MzIgewogICAgLy8gVGhpcyByYW5nZSBpcyBvaywgYWxiZWl0IHBvaW50bGVzcy4KICAgIDEgLi49IDEgPT4ge30KICAgIC8vIFRoaXMgcmFuZ2UgaXMgZW1wdHksIGFuZCB0aGUgY29tcGlsZXIgY2FuIHRlbGwuCiAgICAxMDAwIC4uPSA1ID0+IHt9Cn0KYGBgCkUwMDMzQSB0cmFpdCB0eXBlIGhhcyBiZWVuIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzMKIyB0cmFpdCBTb21lVHJhaXQgeyBmbiBtZXRob2Rfb25lKCZzZWxmKXt9IGZuIG1ldGhvZF90d28oJnNlbGYpe30gfQojIGltcGw8VD4gU29tZVRyYWl0IGZvciBUIHt9CmxldCB0cmFpdF9vYmo6ICZTb21lVHJhaXQgPSAmInNvbWVfdmFsdWUiOwoKLy8gVGhpcyB0cmllcyB0byBpbXBsaWNpdGx5IGRlcmVmZXJlbmNlIHRvIGNyZWF0ZSBhbiB1bnNpemVkIGxvY2FsIHZhcmlhYmxlLgpsZXQgJmludmFsaWQgPSB0cmFpdF9vYmo7CgovLyBZb3UgY2FuIGNhbGwgbWV0aG9kcyB3aXRob3V0IGJpbmRpbmcgdG8gdGhlIHZhbHVlIGJlaW5nIHBvaW50ZWQgYXQuCnRyYWl0X29iai5tZXRob2Rfb25lKCk7CnRyYWl0X29iai5tZXRob2RfdHdvKCk7CmBgYAoKQSBwb2ludGVyIHRvIGEgdHJhaXQgdHlwZSBjYW5ub3QgYmUgaW1wbGljaXRseSBkZXJlZmVyZW5jZWQgYnkgYSBwYXR0ZXJuLiBFdmVyeQp0cmFpdCBkZWZpbmVzIGEgdHlwZSwgYnV0IGJlY2F1c2UgdGhlIHNpemUgb2YgdHJhaXQgaW1wbGVtZW50ZXJzIGlzbid0IGZpeGVkLAp0aGlzIHR5cGUgaGFzIG5vIGNvbXBpbGUtdGltZSBzaXplLiBUaGVyZWZvcmUsIGFsbCBhY2Nlc3NlcyB0byB0cmFpdCB0eXBlcyBtdXN0CmJlIHRocm91Z2ggcG9pbnRlcnMuIElmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3Ugc2hvdWxkIHRyeSB0byBhdm9pZApkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyLgoKWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdHJhaXQgb2JqZWN0cyBpbiB0aGUgW1RyYWl0IE9iamVjdHNdIHNlY3Rpb24gb2YgdGhlClJlZmVyZW5jZS4KCltUcmFpdCBPYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZXMuaHRtbCN0cmFpdC1vYmplY3RzCkUwMDM0VGhlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB3aGF0IG1ldGhvZCB0byBjYWxsIGJlY2F1c2UgbW9yZSB0aGFuIG9uZSBtZXRob2QKaGFzIHRoZSBzYW1lIHByb3RvdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzQKc3RydWN0IFRlc3Q7Cgp0cmFpdCBUcmFpdDEgewogICAgZm4gZm9vKCk7Cn0KCnRyYWl0IFRyYWl0MiB7CiAgICBmbiBmb28oKTsKfQoKaW1wbCBUcmFpdDEgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CmltcGwgVHJhaXQyIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQoKZm4gbWFpbigpIHsKICAgIFRlc3Q6OmZvbygpIC8vIGVycm9yLCB3aGljaCBmb28oKSB0byBjYWxsPwp9CmBgYAoKVG8gYXZvaWQgdGhpcyBlcnJvciwgeW91IGhhdmUgdG8ga2VlcCBvbmx5IG9uZSBvZiB0aGVtIGFuZCByZW1vdmUgdGhlIG90aGVycy4KU28gbGV0J3MgdGFrZSBvdXIgZXhhbXBsZSBhbmQgZml4IGl0OgoKYGBgCnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9CgppbXBsIFRyYWl0MSBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICBUZXN0Ojpmb28oKSAvLyBhbmQgbm93IHRoYXQncyBnb29kIQp9CmBgYAoKSG93ZXZlciwgYSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgdXNpbmcgZnVsbHkgZXhwbGljaXQgbmFtaW5nIG9mIHR5cGUgYW5kCnRyYWl0OgoKYGBgCnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9Cgp0cmFpdCBUcmFpdDIgewogICAgZm4gZm9vKCk7Cn0KCmltcGwgVHJhaXQxIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQppbXBsIFRyYWl0MiBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICA8VGVzdCBhcyBUcmFpdDE+Ojpmb28oKQp9CmBgYAoKT25lIGxhc3QgZXhhbXBsZToKCmBgYAp0cmFpdCBGIHsKICAgIGZuIG0oJnNlbGYpOwp9Cgp0cmFpdCBHIHsKICAgIGZuIG0oJnNlbGYpOwp9CgpzdHJ1Y3QgWDsKCmltcGwgRiBmb3IgWCB7IGZuIG0oJnNlbGYpIHsgcHJpbnRsbiEoIkkgYW0gRiIpOyB9IH0KaW1wbCBHIGZvciBYIHsgZm4gbSgmc2VsZikgeyBwcmludGxuISgiSSBhbSBHIik7IH0gfQoKZm4gbWFpbigpIHsKICAgIGxldCBmID0gWDsKCiAgICBGOjptKCZmKTsgLy8gaXQgZGlzcGxheXMgIkkgYW0gRiIKICAgIEc6Om0oJmYpOyAvLyBpdCBkaXNwbGF5cyAiSSBhbSBHIgp9CmBgYApFMDAzOFRyYWl0IG9iamVjdHMgbGlrZSBgQm94PFRyYWl0PmAgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2hlbiBjZXJ0YWluCnJlcXVpcmVtZW50cyBhcmUgc2F0aXNmaWVkIGJ5IHRoZSB0cmFpdCBpbiBxdWVzdGlvbi4KClRyYWl0IG9iamVjdHMgYXJlIGEgZm9ybSBvZiBkeW5hbWljIGRpc3BhdGNoIGFuZCB1c2UgYSBkeW5hbWljYWxseSBzaXplZCB0eXBlCmZvciB0aGUgaW5uZXIgdHlwZS4gU28sIGZvciBhIGdpdmVuIHRyYWl0IGBUcmFpdGAsIHdoZW4gYFRyYWl0YCBpcyB0cmVhdGVkIGFzIGEKdHlwZSwgYXMgaW4gYEJveDxUcmFpdD5gLCB0aGUgaW5uZXIgdHlwZSBpcyAndW5zaXplZCcuIEluIHN1Y2ggY2FzZXMgdGhlIGJveGVkCnBvaW50ZXIgaXMgYSAnZmF0IHBvaW50ZXInIHRoYXQgY29udGFpbnMgYW4gZXh0cmEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG1ldGhvZHMKKGFtb25nIG90aGVyIHRoaW5ncykgZm9yIGR5bmFtaWMgZGlzcGF0Y2guIFRoaXMgZGVzaWduIG1hbmRhdGVzIHNvbWUKcmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0cmFpdHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHRyYWl0Cm9iamVjdHMsIHdoaWNoIGFyZSBjb2xsZWN0aXZlbHkgdGVybWVkIGFzICdvYmplY3Qgc2FmZXR5JyBydWxlcy4KCkF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgdHJhaXQgb2JqZWN0IGZvciBhIG5vbiBvYmplY3Qtc2FmZSB0cmFpdCB3aWxsIHRyaWdnZXIKdGhpcyBlcnJvci4KClRoZXJlIGFyZSB2YXJpb3VzIHJ1bGVzOgoKIyMjIFRoZSB0cmFpdCBjYW5ub3QgcmVxdWlyZSBgU2VsZjogU2l6ZWRgCgpXaGVuIGBUcmFpdGAgaXMgdHJlYXRlZCBhcyBhIHR5cGUsIHRoZSB0eXBlIGRvZXMgbm90IGltcGxlbWVudCB0aGUgc3BlY2lhbApgU2l6ZWRgIHRyYWl0LCBiZWNhdXNlIHRoZSB0eXBlIGRvZXMgbm90IGhhdmUgYSBrbm93biBzaXplIGF0IGNvbXBpbGUgdGltZSBhbmQKY2FuIG9ubHkgYmUgYWNjZXNzZWQgYmVoaW5kIGEgcG9pbnRlci4gVGh1cywgaWYgd2UgaGF2ZSBhIHRyYWl0IGxpa2UgdGhlCmZvbGxvd2luZzoKCmBgYAp0cmFpdCBGb28gd2hlcmUgU2VsZjogU2l6ZWQgewoKfQpgYGAKCldlIGNhbm5vdCBjcmVhdGUgYW4gb2JqZWN0IG9mIHR5cGUgYEJveDxGb28+YCBvciBgJkZvb2Agc2luY2UgaW4gdGhpcyBjYXNlCmBTZWxmYCB3b3VsZCBub3QgYmUgYFNpemVkYC4KCkdlbmVyYWxseSwgYFNlbGY6IFNpemVkYCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYWl0IHNob3VsZCBub3QgYmUgdXNlZAphcyBhIHRyYWl0IG9iamVjdC4gSWYgdGhlIHRyYWl0IGNvbWVzIGZyb20geW91ciBvd24gY3JhdGUsIGNvbnNpZGVyIHJlbW92aW5nCnRoaXMgcmVzdHJpY3Rpb24uCgojIyMgTWV0aG9kIHJlZmVyZW5jZXMgdGhlIGBTZWxmYCB0eXBlIGluIGl0cyBwYXJhbWV0ZXJzIG9yIHJldHVybiB0eXBlCgpUaGlzIGhhcHBlbnMgd2hlbiBhIHRyYWl0IGhhcyBhIG1ldGhvZCBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAiaGkiLnRvX293bmVkKCkKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAxCiAgICB9Cn0KYGBgCgooTm90ZSB0aGF0IGAmc2VsZmAgYW5kIGAmbXV0IHNlbGZgIGFyZSBva2F5LCBpdCdzIGFkZGl0aW9uYWwgYFNlbGZgIHR5cGVzIHdoaWNoCmNhdXNlIHRoaXMgcHJvYmxlbS4pCgpJbiBzdWNoIGEgY2FzZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBwcmVkaWN0IHRoZSByZXR1cm4gdHlwZSBvZiBgZm9vKClgIGluIGEKc2l0dWF0aW9uIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGY7Cn0KCmZuIGNhbGxfZm9vKHg6IEJveDxUcmFpdD4pIHsKICAgIGxldCB5ID0geC5mb28oKTsgLy8gV2hhdCB0eXBlIGlzIHk/CiAgICAvLyAuLi4KfQpgYGAKCklmIG9ubHkgc29tZSBtZXRob2RzIGFyZW4ndCBvYmplY3Qtc2FmZSwgeW91IGNhbiBhZGQgYSBgd2hlcmUgU2VsZjogU2l6ZWRgIGJvdW5kCm9uIHRoZW0gdG8gbWFyayB0aGVtIGFzIGV4cGxpY2l0bHkgdW5hdmFpbGFibGUgdG8gdHJhaXQgb2JqZWN0cy4gVGhlCmZ1bmN0aW9uYWxpdHkgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIGltcGxlbWVudGVycywgaW5jbHVkaW5nCmBCb3g8VHJhaXQ+YCB3aGljaCBpcyBpdHNlbGYgc2l6ZWQgKGFzc3VtaW5nIHlvdSBgaW1wbCBUcmFpdCBmb3IgQm94PFRyYWl0PmApLgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZikgLT4gU2VsZiB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgZnVuY3Rpb25zCn0KYGBgCgpOb3csIGBmb28oKWAgY2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gYSB0cmFpdCBvYmplY3QsIGJ1dCB5b3Ugd2lsbCBub3cgYmUKYWxsb3dlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0LCBhbmQgdGhhdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBhbnkgb2JqZWN0LXNhZmUKbWV0aG9kcy4gV2l0aCBzdWNoIGEgYm91bmQsIG9uZSBjYW4gc3RpbGwgY2FsbCBgZm9vKClgIG9uIHR5cGVzIGltcGxlbWVudGluZwp0aGF0IHRyYWl0IHRoYXQgYXJlbid0IGJlaGluZCB0cmFpdCBvYmplY3RzLgoKIyMjIE1ldGhvZCBoYXMgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMKCkFzIG1lbnRpb25lZCBiZWZvcmUsIHRyYWl0IG9iamVjdHMgY29udGFpbiBwb2ludGVycyB0byBtZXRob2QgdGFibGVzLiBTbywgaWYgd2UKaGF2ZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb28oJnNlbGYpIHsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiAyCiAgICB9Cn0KLy8gLi4uCmBgYAoKQXQgY29tcGlsZSB0aW1lIGVhY2ggaW1wbGVtZW50YXRpb24gb2YgYFRyYWl0YCB3aWxsIHByb2R1Y2UgYSB0YWJsZSBjb250YWluaW5nCnRoZSB2YXJpb3VzIG1ldGhvZHMgKGFuZCBvdGhlciBpdGVtcykgcmVsYXRlZCB0byB0aGUgaW1wbGVtZW50YXRpb24uCgpUaGlzIHdvcmtzIGZpbmUsIGJ1dCB3aGVuIHRoZSBtZXRob2QgZ2FpbnMgZ2VuZXJpYyBwYXJhbWV0ZXJzLCB3ZSBjYW4gaGF2ZSBhCnByb2JsZW0uCgpVc3VhbGx5LCBnZW5lcmljIHBhcmFtZXRlcnMgZ2V0IF9tb25vbW9ycGhpemVkXy4gRm9yIGV4YW1wbGUsIGlmIEkgaGF2ZQoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICAvLyAuLi4KfQpgYGAKClRoZSBtYWNoaW5lIGNvZGUgZm9yIGBmb286Ojx1OD4oKWAsIGBmb286Ojxib29sPigpYCwgYGZvbzo6PFN0cmluZz4oKWAsIG9yIGFueQpvdGhlciB0eXBlIHN1YnN0aXR1dGlvbiBpcyBkaWZmZXJlbnQuIEhlbmNlIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgdGhlCmltcGxlbWVudGF0aW9uIG9uLWRlbWFuZC4gSWYgeW91IGNhbGwgYGZvbygpYCB3aXRoIGEgYGJvb2xgIHBhcmFtZXRlciwgdGhlCmNvbXBpbGVyIHdpbGwgb25seSBnZW5lcmF0ZSBjb2RlIGZvciBgZm9vOjo8Ym9vbD4oKWAuIFdoZW4gd2UgaGF2ZSBhZGRpdGlvbmFsCnR5cGUgcGFyYW1ldGVycywgdGhlIG51bWJlciBvZiBtb25vbW9ycGhpemVkIGltcGxlbWVudGF0aW9ucyB0aGUgY29tcGlsZXIKZ2VuZXJhdGVzIGRvZXMgbm90IGdyb3cgZHJhc3RpY2FsbHksIHNpbmNlIHRoZSBjb21waWxlciB3aWxsIG9ubHkgZ2VuZXJhdGUgYW4KaW1wbGVtZW50YXRpb24gaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHVucGFyYW1ldHJpemVkIHN1YnN0aXR1dGlvbnMKKGkuZS4sIHN1YnN0aXR1dGlvbnMgd2hlcmUgbm9uZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdHlwZXMgYXJlIHRoZW1zZWx2ZXMKcGFyYW1ldGVyaXplZCkuCgpIb3dldmVyLCB3aXRoIHRyYWl0IG9iamVjdHMgd2UgaGF2ZSB0byBtYWtlIGEgdGFibGUgY29udGFpbmluZyBfZXZlcnlfIG9iamVjdAp0aGF0IGltcGxlbWVudHMgdGhlIHRyYWl0LiBOb3csIGlmIGl0IGhhcyB0eXBlIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gYWRkCmltcGxlbWVudGF0aW9ucyBmb3IgZXZlcnkgdHlwZSB0aGF0IGltcGxlbWVudHMgdGhlIHRyYWl0LCBhbmQgdGhlcmUgY291bGQKdGhlb3JldGljYWxseSBiZSBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdHlwZXMuCgpGb3IgZXhhbXBsZSwgd2l0aDoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKTsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDEKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDIKICAgIH0KfQoKLy8gOCBtb3JlIGltcGxlbWVudGF0aW9ucwpgYGAKCk5vdywgaWYgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKIyB0cmFpdCBUcmFpdCB7IGZuIGZvbzxUPigmc2VsZiwgb246IFQpOyB9CiMgaW1wbCBUcmFpdCBmb3IgU3RyaW5nIHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkge30gfQojIGltcGwgVHJhaXQgZm9yIHU4IHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkge30gfQojIGltcGwgVHJhaXQgZm9yIGJvb2wgeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgLy8gZXRjLgpmbiBjYWxsX2Zvbyh0aGluZzogQm94PFRyYWl0PikgewogICAgdGhpbmcuZm9vKHRydWUpOyAvLyB0aGlzIGNvdWxkIGJlIGFueSBvbmUgb2YgdGhlIDggdHlwZXMgYWJvdmUKICAgIHRoaW5nLmZvbygxKTsKICAgIHRoaW5nLmZvbygiaGVsbG8iKTsKfQpgYGAKCldlIGRvbid0IGp1c3QgbmVlZCB0byBjcmVhdGUgYSB0YWJsZSBvZiBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBtZXRob2RzIG9mCmBUcmFpdGAsIHdlIG5lZWQgdG8gY3JlYXRlIHN1Y2ggYSB0YWJsZSwgZm9yIGVhY2ggZGlmZmVyZW50IHR5cGUgZmVkIHRvCmBmb28oKWAuIEluIHRoaXMgY2FzZSB0aGlzIHR1cm5zIG91dCB0byBiZSAoMTAgdHlwZXMgaW1wbGVtZW50aW5nIGBUcmFpdGApXCooMwp0eXBlcyBiZWluZyBmZWQgdG8gYGZvbygpYCkgPSAzMCBpbXBsZW1lbnRhdGlvbnMhCgpXaXRoIHJlYWwgd29ybGQgdHJhaXRzIHRoZXNlIG51bWJlcnMgY2FuIGdyb3cgZHJhc3RpY2FsbHkuCgpUbyBmaXggdGhpcywgaXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSBhIGB3aGVyZSBTZWxmOiBTaXplZGAgYm91bmQgc2ltaWxhciB0byB0aGUKZml4IGZvciB0aGUgc3ViLWVycm9yIGFib3ZlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIHR5cGUKcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CmBgYAoKSWYgdGhpcyBpcyBub3QgYW4gb3B0aW9uLCBjb25zaWRlciByZXBsYWNpbmcgdGhlIHR5cGUgcGFyYW1ldGVyIHdpdGggYW5vdGhlcgp0cmFpdCBvYmplY3QgKGUuZy4sIGlmIGBUOiBPdGhlclRyYWl0YCwgdXNlIGBvbjogQm94PE90aGVyVHJhaXQ+YCkuIElmIHRoZQpudW1iZXIgb2YgdHlwZXMgeW91IGludGVuZCB0byBmZWVkIHRvIHRoaXMgbWV0aG9kIGlzIGxpbWl0ZWQsIGNvbnNpZGVyIG1hbnVhbGx5Cmxpc3Rpbmcgb3V0IHRoZSBtZXRob2RzIG9mIGRpZmZlcmVudCB0eXBlcy4KCiMjIyBNZXRob2QgaGFzIG5vIHJlY2VpdmVyCgpNZXRob2RzIHRoYXQgZG8gbm90IHRha2UgYSBgc2VsZmAgcGFyYW1ldGVyIGNhbid0IGJlIGNhbGxlZCBzaW5jZSB0aGVyZSB3b24ndCBiZQphIHdheSB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBtZXRob2QgdGFibGUgZm9yIHRoZW0uCgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpIC0+IHU4Owp9CmBgYAoKVGhpcyBjb3VsZCBiZSBjYWxsZWQgYXMgYDxGb28gYXMgRm9vPjo6Zm9vKClgLCB3aGljaCB3b3VsZCBub3QgYmUgYWJsZSB0byBwaWNrCmFuIGltcGxlbWVudGF0aW9uLgoKQWRkaW5nIGEgYFNlbGY6IFNpemVkYCBib3VuZCB0byB0aGVzZSBtZXRob2RzIHdpbGwgZ2VuZXJhbGx5IG1ha2UgdGhpcyBjb21waWxlLgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKSAtPiB1OCB3aGVyZSBTZWxmOiBTaXplZDsKfQpgYGAKCiMjIyBUaGUgdHJhaXQgY2Fubm90IGNvbnRhaW4gYXNzb2NpYXRlZCBjb25zdGFudHMKCkp1c3QgbGlrZSBzdGF0aWMgZnVuY3Rpb25zLCBhc3NvY2lhdGVkIGNvbnN0YW50cyBhcmVuJ3Qgc3RvcmVkIG9uIHRoZSBtZXRob2QKdGFibGUuIElmIHRoZSB0cmFpdCBvciBhbnkgc3VidHJhaXQgY29udGFpbiBhbiBhc3NvY2lhdGVkIGNvbnN0YW50LCB0aGV5IGNhbm5vdApiZSBtYWRlIGludG8gYW4gb2JqZWN0LgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IEZvbyB7CiAgICBjb25zdCBYOiBpMzI7Cn0KCmltcGwgRm9vIHt9CmBgYAoKQSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byB1c2UgYSBoZWxwZXIgbWV0aG9kIGluc3RlYWQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIHgoJnNlbGYpIC0+IGkzMjsKfQpgYGAKCiMjIyBUaGUgdHJhaXQgY2Fubm90IHVzZSBgU2VsZmAgYXMgYSB0eXBlIHBhcmFtZXRlciBpbiB0aGUgc3VwZXJ0cmFpdCBsaXN0aW5nCgpUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHNlY29uZCBzdWItZXJyb3IsIGJ1dCBzdWJ0bGVyLiBJdCBoYXBwZW5zIGluIHNpdHVhdGlvbnMKbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IFN1cGVyPEE6ID9TaXplZD4ge30KCnRyYWl0IFRyYWl0OiBTdXBlcjxTZWxmPiB7Cn0KCnN0cnVjdCBGb287CgppbXBsIFN1cGVyPEZvbz4gZm9yIEZvb3t9CgppbXBsIFRyYWl0IGZvciBGb28ge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogQm94PGR5biBUcmFpdD47Cn0KYGBgCgpIZXJlLCB0aGUgc3VwZXJ0cmFpdCBtaWdodCBoYXZlIG1ldGhvZHMgYXMgZm9sbG93czoKCmBgYAp0cmFpdCBTdXBlcjxBOiA/U2l6ZWQ+IHsKICAgIGZuIGdldF9hKCZzZWxmKSAtPiAmQTsgLy8gbm90ZSB0aGF0IHRoaXMgaXMgb2JqZWN0IHNhZmUhCn0KYGBgCgpJZiB0aGUgdHJhaXQgYFRyYWl0YCB3YXMgZGVyaXZpbmcgZnJvbSBzb21ldGhpbmcgbGlrZSBgU3VwZXI8U3RyaW5nPmAgb3IKYFN1cGVyPFQ+YCAod2hlcmUgYEZvb2AgaXRzZWxmIGlzIGBGb288VD5gKSwgdGhpcyBpcyBva2F5LCBiZWNhdXNlIGdpdmVuIGEgdHlwZQpgZ2V0X2EoKWAgd2lsbCBkZWZpbml0ZWx5IHJldHVybiBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgoKSG93ZXZlciwgaWYgaXQgZGVyaXZlcyBmcm9tIGBTdXBlcjxTZWxmPmAsIGV2ZW4gdGhvdWdoIGBTdXBlcmAgaXMgb2JqZWN0IHNhZmUsCnRoZSBtZXRob2QgYGdldF9hKClgIHdvdWxkIHJldHVybiBhbiBvYmplY3Qgb2YgdW5rbm93biB0eXBlIHdoZW4gY2FsbGVkIG9uIHRoZQpmdW5jdGlvbi4gYFNlbGZgIHR5cGUgcGFyYW1ldGVycyBsZXQgdXMgbWFrZSBvYmplY3Qgc2FmZSB0cmFpdHMgbm8gbG9uZ2VyIHNhZmUsCnNvIHRoZXkgYXJlIGZvcmJpZGRlbiB3aGVuIHNwZWNpZnlpbmcgc3VwZXJ0cmFpdHMuCgpUaGVyZSdzIG5vIGVhc3kgZml4IGZvciB0aGlzLiBHZW5lcmFsbHksIGNvZGUgd2lsbCBuZWVkIHRvIGJlIHJlZmFjdG9yZWQgc28gdGhhdAp5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8gZGVyaXZlIGZyb20gYFN1cGVyPFNlbGY+YC4KRTAwNDBJdCBpcyBub3QgYWxsb3dlZCB0byBtYW51YWxseSBjYWxsIGRlc3RydWN0b3JzIGluIFJ1c3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQwCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CgppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCJrYWJvb20iKTsKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IEZvbyB7IHg6IC03IH07CiAgICB4LmRyb3AoKTsgLy8gZXJyb3I6IGV4cGxpY2l0IHVzZSBvZiBkZXN0cnVjdG9yIG1ldGhvZAp9CmBgYAoKSXQgaXMgdW5uZWNlc3NhcnkgdG8gZG8gdGhpcyBzaW5jZSBgZHJvcGAgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYQp2YWx1ZSBnb2VzIG91dCBvZiBzY29wZS4gSG93ZXZlciwgaWYgeW91IHJlYWxseSBuZWVkIHRvIGRyb3AgYSB2YWx1ZSBieSBoYW5kLAp5b3UgY2FuIHVzZSB0aGUgYHN0ZDo6bWVtOjpkcm9wYCBmdW5jdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCJrYWJvb20iKTsKICAgIH0KfQpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gRm9vIHsgeDogLTcgfTsKICAgIGRyb3AoeCk7IC8vIG9rIQp9CmBgYApFMDA0NFlvdSBjYW5ub3QgdXNlIHR5cGUgb3IgY29uc3QgcGFyYW1ldGVycyBvbiBmb3JlaWduIGl0ZW1zLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0NApleHRlcm4gIkMiIHsgZm4gc29tZV9mdW5jPFQ+KHg6IFQpOyB9CmBgYAoKVG8gZml4IHRoaXMsIHJlcGxhY2UgdGhlIGdlbmVyaWMgcGFyYW1ldGVyIHdpdGggdGhlIHNwZWNpYWxpemF0aW9ucyB0aGF0IHlvdQpuZWVkOgoKYGBgCmV4dGVybiAiQyIgeyBmbiBzb21lX2Z1bmNfaTMyKHg6IGkzMik7IH0KZXh0ZXJuICJDIiB7IGZuIHNvbWVfZnVuY19pNjQoeDogaTY0KTsgfQpgYGAKRTAwNDVWYXJpYWRpYyBwYXJhbWV0ZXJzIGhhdmUgYmVlbiB1c2VkIG9uIGEgbm9uLUMgQUJJIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0NQojIVtmZWF0dXJlKHVuYm94ZWRfY2xvc3VyZXMpXQoKZXh0ZXJuICJydXN0LWNhbGwiIHsKICAgIGZuIGZvbyh4OiB1OCwgLi4uKTsgLy8gZXJyb3IhCn0KYGBgCgpSdXN0IG9ubHkgc3VwcG9ydHMgdmFyaWFkaWMgcGFyYW1ldGVycyBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMgY29kZSBpbiBpdHMKRkZJLiBBcyBzdWNoLCB2YXJpYWRpYyBwYXJhbWV0ZXJzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgd2hpY2ggYXJlCnVzaW5nIHRoZSBDIEFCSS4gVG8gZml4IHN1Y2ggY29kZSwgcHV0IHRoZW0gaW4gYW4gZXh0ZXJuICJDIiBibG9jazoKCmBgYApleHRlcm4gIkMiIHsKICAgIGZuIGZvbyAoeDogdTgsIC4uLik7Cn0KYGBgCkUwMDQ2SXRlbXMgYXJlIG1pc3NpbmcgaW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7fQovLyBlcnJvcjogbm90IGFsbCB0cmFpdCBpdGVtcyBpbXBsZW1lbnRlZCwgbWlzc2luZzogYGZvb2AKYGBgCgpXaGVuIHRyeWluZyB0byBtYWtlIHNvbWUgdHlwZSBpbXBsZW1lbnQgYSB0cmFpdCBgRm9vYCwgeW91IG11c3QsIGF0IG1pbmltdW0sCnByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgb2YgYEZvb2AncyByZXF1aXJlZCBtZXRob2RzIChtZWFuaW5nIHRoZQptZXRob2RzIHRoYXQgZG8gbm90IGhhdmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMpLCBhcyB3ZWxsIGFzIGFueSByZXF1aXJlZAp0cmFpdCBpdGVtcyBsaWtlIGFzc29jaWF0ZWQgdHlwZXMgb3IgY29uc3RhbnRzLiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCkUwMDQ5QW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIHR5cGUgb3IKY29uc3QgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDkKdHJhaXQgRm9vIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMCB0eXBlIHBhcmFtZXRlcnMgYnV0IGl0cyB0cmFpdCBkZWNsYXJhdGlvbiBoYXMgMQovLyB0eXBlIHBhcmFtZXRlcgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbyh4OiBib29sKSAtPiBTZWxmIHsgQmFyIH0KfQpgYGAKCkZvciBleGFtcGxlLCB0aGUgYEZvb2AgdHJhaXQgaGFzIGEgbWV0aG9kIGBmb29gIHdpdGggYSB0eXBlIHBhcmFtZXRlciBgVGAsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvb2AgZm9yIHRoZSB0eXBlIGBCYXJgIGlzIG1pc3NpbmcgdGhpcyBwYXJhbWV0ZXIuClRvIGZpeCB0aGlzIGVycm9yLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb288VDogRGVmYXVsdD4oeDogVCkgLT4gU2VsZiB7IC8vIG9rIQogICAgICAgIEJhcgogICAgfQp9CmBgYApFMDA1MEFuIGF0dGVtcHRlZCBpbXBsZW1lbnRhdGlvbiBvZiBhIHRyYWl0IG1ldGhvZCBoYXMgdGhlIHdyb25nIG51bWJlciBvZiBmdW5jdGlvbgpwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1MAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbDsKfQoKc3RydWN0IEJhcjsKCi8vIGVycm9yOiBtZXRob2QgYGZvb2AgaGFzIDEgcGFyYW1ldGVyIGJ1dCB0aGUgZGVjbGFyYXRpb24gaW4gdHJhaXQgYEZvbzo6Zm9vYAovLyBoYXMgMgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbygmc2VsZikgLT4gYm9vbCB7IHRydWUgfQp9CmBgYAoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCB0cmFpdCBoYXMgYSBtZXRob2QgYGZvb2Agd2l0aCB0d28gZnVuY3Rpb24gcGFyYW1ldGVycwooYCZzZWxmYCBhbmQgYHU4YCksIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvb2AgZm9yIHRoZSB0eXBlIGBCYXJgIG9taXRzCnRoZSBgdThgIHBhcmFtZXRlci4gVG8gZml4IHRoaXMgZXJyb3IsIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZiwgeDogdTgpIC0+IGJvb2w7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbygmc2VsZiwgeDogdTgpIC0+IGJvb2wgeyAvLyBvayEKICAgICAgICB0cnVlCiAgICB9Cn0KYGBgCkUwMDUzVGhlIHBhcmFtZXRlcnMgb2YgYW55IHRyYWl0IG1ldGhvZCBtdXN0IG1hdGNoIGJldHdlZW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbgphbmQgdGhlIHRyYWl0IGRlZmluaXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDUzCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oeDogdTE2KTsKICAgIGZuIGJhcigmc2VsZik7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBleHBlY3RlZCB1MTYsIGZvdW5kIGkxNgogICAgZm4gZm9vKHg6IGkxNikgeyB9CgogICAgLy8gZXJyb3IsIHR5cGVzIGRpZmZlciBpbiBtdXRhYmlsaXR5CiAgICBmbiBiYXIoJm11dCBzZWxmKSB7IH0KfQpgYGAKRTAwNTRJdCBpcyBub3QgYWxsb3dlZCB0byBjYXN0IHRvIGEgYm9vbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTQKbGV0IHggPSA1OwoKLy8gTm90IGFsbG93ZWQsIHdvbid0IGNvbXBpbGUKbGV0IHhfaXNfbm9uemVybyA9IHggYXMgYm9vbDsKYGBgCgpJZiB5b3UgYXJlIHRyeWluZyB0byBjYXN0IGEgbnVtZXJpYyB0eXBlIHRvIGEgYm9vbCwgeW91IGNhbiBjb21wYXJlIGl0IHdpdGgKemVybyBpbnN0ZWFkOgoKYGBgCmxldCB4ID0gNTsKCi8vIE9rCmxldCB4X2lzX25vbnplcm8gPSB4ICE9IDA7CmBgYApFMDA1NUR1cmluZyBhIG1ldGhvZCBjYWxsLCBhIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgZGVyZWZlcmVuY2VkIGFzIG1hbnkgdGltZXMgYXMKbmVlZGVkIHRvIG1ha2UgdGhlIHZhbHVlJ3MgdHlwZSBtYXRjaCB0aGUgbWV0aG9kJ3MgcmVjZWl2ZXIuIFRoZSBjYXRjaCBpcyB0aGF0CnRoZSBjb21waWxlciB3aWxsIG9ubHkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZSBhIG51bWJlciBvZiB0aW1lcyB1cCB0byB0aGUKcmVjdXJzaW9uIGxpbWl0ICh3aGljaCBjYW4gYmUgc2V0IHZpYSB0aGUgYHJlY3Vyc2lvbl9saW1pdGAgYXR0cmlidXRlKS4KCkZvciBhIHNvbWV3aGF0IGFydGlmaWNpYWwgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NQojIVtyZWN1cnNpb25fbGltaXQ9IjQiXQoKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCBmb28gPSBGb287CiAgICBsZXQgcmVmX2ZvbyA9ICYmJiYmRm9vOwoKICAgIC8vIGVycm9yLCByZWFjaGVkIHRoZSByZWN1cnNpb24gbGltaXQgd2hpbGUgYXV0by1kZXJlZmVyZW5jaW5nIGAmJiYmJkZvb2AKICAgIHJlZl9mb28uZm9vKCk7Cn0KYGBgCgpPbmUgZml4IG1heSBiZSB0byBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGxpbWl0LiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8KY3JlYXRlIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBvZiBkZXJlZmVyZW5jaW5nLCBpbiB3aGljaCBjYXNlIHRoZSBvbmx5IGZpeCBpcyB0bwpzb21laG93IGJyZWFrIHRoZSByZWN1cnNpb24uCkUwMDU3QW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBnaXZlbiB3aGVuIGNhbGxpbmcgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NwpsZXQgZiA9IHx4fCB4ICogMzsKbGV0IGEgPSBmKCk7ICAgICAgICAvLyBpbnZhbGlkLCB0b28gZmV3IHBhcmFtZXRlcnMKbGV0IGIgPSBmKDQpOyAgICAgICAvLyB0aGlzIHdvcmtzIQpsZXQgYyA9IGYoMiwgMyk7ICAgIC8vIGludmFsaWQsIHRvbyBtYW55IHBhcmFtZXRlcnMKYGBgCgpXaGVuIGludm9raW5nIGNsb3N1cmVzIG9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gdHJhaXRzIGBGbmAsCmBGbk11dGAgb3IgYEZuT25jZWAgdXNpbmcgY2FsbCBub3RhdGlvbiwgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUKZnVuY3Rpb24gbXVzdCBtYXRjaCBpdHMgZGVmaW5pdGlvbi4KCkEgZ2VuZXJpYyBmdW5jdGlvbiBtdXN0IGJlIHRyZWF0ZWQgc2ltaWxhcmx5OgoKYGBgCmZuIGZvbzxGOiBGbigpPihmOiBGKSB7CiAgICBmKCk7IC8vIHRoaXMgaXMgdmFsaWQsIGJ1dCBmKDMpIHdvdWxkIG5vdCB3b3JrCn0KYGBgCkUwMDU5VGhlIGJ1aWx0LWluIGZ1bmN0aW9uIHRyYWl0cyBhcmUgZ2VuZXJpYyBvdmVyIGEgdHVwbGUgb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cy4KSWYgb25lIHVzZXMgYW5nbGUtYnJhY2tldCBub3RhdGlvbiAoYEZuPChULCksIE91dHB1dD1VPmApIGluc3RlYWQgb2YgcGFyZW50aGVzZXMKKGBGbihUKSAtPiBVYCkgdG8gZGVub3RlIHRoZSBmdW5jdGlvbiB0cmFpdCwgdGhlIHR5cGUgcGFyYW1ldGVyIHNob3VsZCBiZSBhCnR1cGxlLiBPdGhlcndpc2UgZnVuY3Rpb24gY2FsbCBub3RhdGlvbiBjYW5ub3QgYmUgdXNlZCBhbmQgdGhlIHRyYWl0IHdpbGwgbm90IGJlCmltcGxlbWVudGVkIGJ5IGNsb3N1cmVzLgoKVGhlIG1vc3QgbGlrZWx5IHNvdXJjZSBvZiB0aGlzIGVycm9yIGlzIHVzaW5nIGFuZ2xlLWJyYWNrZXQgbm90YXRpb24gd2l0aG91dAp3cmFwcGluZyB0aGUgZnVuY3Rpb24gYXJndW1lbnQgdHlwZSBpbnRvIGEgdHVwbGUsIGZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDU5CiMhW2ZlYXR1cmUodW5ib3hlZF9jbG9zdXJlcyldCgpmbiBmb288RjogRm48aTMyPj4oZjogRikgLT4gRjo6T3V0cHV0IHsgZigzKSB9CmBgYAoKSXQgY2FuIGJlIGZpeGVkIGJ5IGFkanVzdGluZyB0aGUgdHJhaXQgYm91bmQgbGlrZSB0aGlzOgoKYGBgCiMhW2ZlYXR1cmUodW5ib3hlZF9jbG9zdXJlcyldCgpmbiBmb288RjogRm48KGkzMiwpPj4oZjogRikgLT4gRjo6T3V0cHV0IHsgZigzKSB9CmBgYAoKTm90ZSB0aGF0IGAoVCwpYCBhbHdheXMgZGVub3RlcyB0aGUgdHlwZSBvZiBhIDEtdHVwbGUgY29udGFpbmluZyBhbiBlbGVtZW50IG9mCnR5cGUgYFRgLiBUaGUgY29tbWEgaXMgbmVjZXNzYXJ5IGZvciBzeW50YWN0aWMgZGlzYW1iaWd1YXRpb24uCkUwMDYwRXh0ZXJuYWwgQyBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgdmFyaWFkaWMuIEhvd2V2ZXIsIGEgdmFyaWFkaWMgZnVuY3Rpb24KdGFrZXMgYSBtaW5pbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBleGFtcGxlLCBjb25zaWRlciBDJ3MgdmFyaWFkaWMgYHByaW50ZmAKZnVuY3Rpb246CgpgYGBjb21waWxlX2ZhaWwsRTAwNjAKdXNlIHN0ZDo6b3M6OnJhdzo6e2NfY2hhciwgY19pbnR9OwoKZXh0ZXJuICJDIiB7CiAgICBmbiBwcmludGYoXzogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKfQoKdW5zYWZlIHsgcHJpbnRmKCk7IH0gLy8gZXJyb3IhCmBgYAoKVXNpbmcgdGhpcyBkZWNsYXJhdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHNvCnNpbXBseSBjYWxsaW5nIGBwcmludGYoKWAgaXMgaW52YWxpZC4gQnV0IHRoZSBmb2xsb3dpbmcgdXNlcyBhcmUgYWxsb3dlZDoKCmBgYAojICMhW2ZlYXR1cmUoc3RhdGljX25vYnVuZGxlKV0KIyB1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CiMgI1tjZmdfYXR0cihhbGwod2luZG93cywgdGFyZ2V0X2VudiA9ICJtc3ZjIiksCiMgICAgICAgICAgICBsaW5rKG5hbWUgPSAibGVnYWN5X3N0ZGlvX2RlZmluaXRpb25zIiwga2luZCA9ICJzdGF0aWMtbm9idW5kbGUiKSldCiMgZXh0ZXJuICJDIiB7IGZuIHByaW50ZihfOiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50OyB9CiMgZm4gbWFpbigpIHsKdW5zYWZlIHsKICAgIHVzZSBzdGQ6OmZmaTo6Q1N0cmluZzsKCiAgICBsZXQgZm10ID0gQ1N0cmluZzo6bmV3KCJ0ZXN0XG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCkpOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoIm51bWJlciA9ICVkXG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCksIDMpOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoIiVkLCAlZFxuIikudW53cmFwKCk7CiAgICBwcmludGYoZm10LmFzX3B0cigpLCAxMCwgNSk7Cn0KIyB9CmBgYApFMDA2MUFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyB3YXMgcGFzc2VkIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MQpmbiBmKHU6IGkzMikge30KCmYoKTsgLy8gZXJyb3IhCmBgYAoKVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIGEgZnVuY3Rpb24gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cwpzcGVjaWZpZWQgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4KCkZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGxpa2U6CgpgYGAKZm4gZihhOiB1MTYsIGI6ICZzdHIpIHt9CmBgYAoKTXVzdCBhbHdheXMgYmUgY2FsbGVkIHdpdGggZXhhY3RseSB0d28gYXJndW1lbnRzLCBlLmcuLCBgZigyLCAidGVzdCIpYC4KCk5vdGUgdGhhdCBSdXN0IGRvZXMgbm90IGhhdmUgYSBub3Rpb24gb2Ygb3B0aW9uYWwgZnVuY3Rpb24gYXJndW1lbnRzIG9yCnZhcmlhZGljIGZ1bmN0aW9ucyAoZXhjZXB0IGZvciBpdHMgQy1GRkkpLgpFMDA2MkEgc3RydWN0J3Mgb3Igc3RydWN0LWxpa2UgZW51bSB2YXJpYW50J3MgZmllbGQgd2FzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjIKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7CiAgICAgICAgICAgICAgICB4OiAwLAogICAgICAgICAgICAgICAgeDogMCwgLy8gZXJyb3I6IGZpZWxkIGB4YCBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKICAgICAgICAgICAgfTsKfQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgZHVyaW5nIGFuIGF0dGVtcHQgdG8gYnVpbGQgYSBzdHJ1Y3Qgb3Igc3RydWN0LWxpa2UKZW51bSB2YXJpYW50LCBvbmUgb2YgdGhlIGZpZWxkcyB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLiBFYWNoIGZpZWxkIHNob3VsZApiZSBzcGVjaWZpZWQgZXhhY3RseSBvbmUgdGltZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMCB9OyAvLyBvayEKfQpgYGAKRTAwNjNBIHN0cnVjdCdzIG9yIHN0cnVjdC1saWtlIGVudW0gdmFyaWFudCdzIGZpZWxkIHdhcyBub3QgcHJvdmlkZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYzCnN0cnVjdCBGb28gewogICAgeDogaTMyLAogICAgeTogaTMyLAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBGb28geyB4OiAwIH07IC8vIGVycm9yOiBtaXNzaW5nIGZpZWxkOiBgeWAKfQpgYGAKCkVhY2ggZmllbGQgc2hvdWxkIGJlIHNwZWNpZmllZCBleGFjdGx5IG9uY2UuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAsIHk6IDAgfTsgLy8gb2shCn0KYGBgCkUwMDY3QW4gaW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBleHByZXNzaW9uIHdhcyB1c2VkIG9uIGFuIGFzc2lnbm1lbnQgb3BlcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2NwoxMiArPSAxOyAvLyBlcnJvciEKYGBgCgpZb3UgbmVlZCB0byBoYXZlIGEgcGxhY2UgZXhwcmVzc2lvbiB0byBiZSBhYmxlIHRvIGFzc2lnbiBpdCBzb21ldGhpbmcuIEZvcgpleGFtcGxlOgoKYGBgCmxldCBtdXQgeDogaTggPSAxMjsKeCArPSAxOyAvLyBvayEKYGBgCkUwMDY5VGhlIGNvbXBpbGVyIGZvdW5kIGEgZnVuY3Rpb24gd2hvc2UgYm9keSBjb250YWlucyBhIGByZXR1cm47YCBzdGF0ZW1lbnQgYnV0Cndob3NlIHJldHVybiB0eXBlIGlzIG5vdCBgKClgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2OQovLyBlcnJvcgpmbiBmb28oKSAtPiB1OCB7CiAgICByZXR1cm47Cn0KYGBgCgpTaW5jZSBgcmV0dXJuO2AgaXMganVzdCBsaWtlIGByZXR1cm4gKCk7YCwgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQpmdW5jdGlvbidzIHJldHVybiB0eXBlIGFuZCB0aGUgdmFsdWUgYmVpbmcgcmV0dXJuZWQuCkUwMDcwQW4gYXNzaWdubWVudCBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIG5vbi1wbGFjZSBleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgeDogaTMyLAogICAgeTogaTMyLAp9Cgpjb25zdCBTT01FX0NPTlNUOiBpMzIgPSAxMjsKCmZuIHNvbWVfb3RoZXJfZnVuYygpIHt9CgpmbiBzb21lX2Z1bmN0aW9uKCkgewogICAgU09NRV9DT05TVCA9IDE0OyAvLyBlcnJvcjogYSBjb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgY2hhbmdlZCEKICAgIDEgPSAzOyAvLyBlcnJvcjogMSBpc24ndCBhIHZhbGlkIHBsYWNlIQogICAgc29tZV9vdGhlcl9mdW5jKCkgPSA0OyAvLyBlcnJvcjogd2UgY2Fubm90IGFzc2lnbiB2YWx1ZSB0byBhIGZ1bmN0aW9uIQogICAgU29tZVN0cnVjdDo6eCA9IDEyOyAvLyBlcnJvcjogU29tZVN0cnVjdCBhIHN0cnVjdHVyZSBuYW1lIGJ1dCBpdCBpcyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsaWtlIGEgdmFyaWFibGUhCn0KYGBgCgpUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvciBtdXN0IGJlIGEgcGxhY2UgZXhwcmVzc2lvbi4gQQpwbGFjZSBleHByZXNzaW9uIHJlcHJlc2VudHMgYSBtZW1vcnkgbG9jYXRpb24gYW5kIGNhbiBiZSBhIHZhcmlhYmxlICh3aXRoCm9wdGlvbmFsIG5hbWVzcGFjaW5nKSwgYSBkZXJlZmVyZW5jZSwgYW4gaW5kZXhpbmcgZXhwcmVzc2lvbiBvciBhIGZpZWxkCnJlZmVyZW5jZS4KCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIFtFeHByZXNzaW9uc10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlLgoKW0V4cHJlc3Npb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwbGFjZXMtcnZhbHVlcy1hbmQtdGVtcG9yYXJpZXMKCkFuZCBub3cgbGV0J3MgZ2l2ZSB3b3JraW5nIGV4YW1wbGVzOgoKYGBgCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQpsZXQgbXV0IHMgPSBTb21lU3RydWN0IHsgeDogMCwgeTogMCB9OwoKcy54ID0gMzsgLy8gdGhhdCdzIGdvb2QgIQoKLy8gLi4uCgpmbiBzb21lX2Z1bmMoeDogJm11dCBpMzIpIHsKICAgICp4ID0gMTI7IC8vIHRoYXQncyBnb29kICEKfQpgYGAKRTAwNzFBIHN0cnVjdHVyZS1saXRlcmFsIHN5bnRheCB3YXMgdXNlZCB0byBjcmVhdGUgYW4gaXRlbSB0aGF0IGlzIG5vdCBhIHN0cnVjdHVyZQpvciBlbnVtIHZhcmlhbnQuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcxCnR5cGUgVTMyID0gdTMyOwpsZXQgdCA9IFUzMiB7IHZhbHVlOiA0IH07IC8vIGVycm9yOiBleHBlY3RlZCBzdHJ1Y3QsIHZhcmlhbnQgb3IgdW5pb24gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBidWlsdGluIHR5cGUgYHUzMmAKYGBgCgpUbyBmaXggdGhpcywgZW5zdXJlIHRoYXQgdGhlIG5hbWUgd2FzIGNvcnJlY3RseSBzcGVsbGVkLCBhbmQgdGhhdCB0aGUgY29ycmVjdApmb3JtIG9mIGluaXRpYWxpemVyIHdhcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoZSBjb2RlIGFib3ZlIGNhbiBiZSBmaXhlZCB0bzoKCmBgYAp0eXBlIFUzMiA9IHUzMjsKbGV0IHQ6IFUzMiA9IDQ7CmBgYAoKb3I6CgpgYGAKc3RydWN0IFUzMiB7IHZhbHVlOiB1MzIgfQpsZXQgdCA9IFUzMiB7IHZhbHVlOiA0IH07CmBgYApFMDA3MkEgcmVjdXJzaXZlIHR5cGUgaGFzIGluZmluaXRlIHNpemUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW4gaW5kaXJlY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcyCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBoZWFkOiB1OCwKICAgIHRhaWw6IE9wdGlvbjxMaXN0Tm9kZT4sIC8vIGVycm9yOiBubyBpbmRpcmVjdGlvbiBoZXJlIHNvIGltcG9zc2libGUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb21wdXRlIHRoZSB0eXBlJ3Mgc2l6ZQp9CmBgYAoKV2hlbiBkZWZpbmluZyBhIHJlY3Vyc2l2ZSBzdHJ1Y3Qgb3IgZW51bSwgYW55IHVzZSBvZiB0aGUgdHlwZSBiZWluZyBkZWZpbmVkCmZyb20gaW5zaWRlIHRoZSBkZWZpbml0aW9uIG11c3Qgb2NjdXIgYmVoaW5kIGEgcG9pbnRlciAobGlrZSBgQm94YCwgYCZgIG9yCmBSY2ApLiBUaGlzIGlzIGJlY2F1c2Ugc3RydWN0cyBhbmQgZW51bXMgbXVzdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHNpemUsIGFuZAp3aXRob3V0IHRoZSBwb2ludGVyLCB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB3b3VsZCBuZWVkIHRvIGJlIHVuYm91bmRlZC4KCkluIHRoZSBleGFtcGxlLCB0aGUgdHlwZSBjYW5ub3QgaGF2ZSBhIHdlbGwtZGVmaW5lZCBzaXplLCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlCmFyYml0cmFyaWx5IGxhcmdlIChzaW5jZSB3ZSB3b3VsZCBiZSBhYmxlIHRvIG5lc3QgYExpc3ROb2RlYHMgdG8gYW55IGRlcHRoKS4KU3BlY2lmaWNhbGx5LAoKYGBgcGxhaW4Kc2l6ZSBvZiBgTGlzdE5vZGVgID0gMSBieXRlIGZvciBgaGVhZGAKICAgICAgICAgICAgICAgICAgICsgMSBieXRlIGZvciB0aGUgZGlzY3JpbWluYW50IG9mIHRoZSBgT3B0aW9uYAogICAgICAgICAgICAgICAgICAgKyBzaXplIG9mIGBMaXN0Tm9kZWAKYGBgCgpPbmUgd2F5IHRvIGZpeCB0aGlzIGlzIGJ5IHdyYXBwaW5nIGBMaXN0Tm9kZWAgaW4gYSBgQm94YCwgbGlrZSBzbzoKCmBgYApzdHJ1Y3QgTGlzdE5vZGUgewogICAgaGVhZDogdTgsCiAgICB0YWlsOiBPcHRpb248Qm94PExpc3ROb2RlPj4sCn0KYGBgCgpUaGlzIHdvcmtzIGJlY2F1c2UgYEJveGAgaXMgYSBwb2ludGVyLCBzbyBpdHMgc2l6ZSBpcyB3ZWxsLWtub3duLgpFMDA3MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW5ub3QgZGVmaW5lIGEgc3RydWN0IChvciBlbnVtKSBgRm9vYCB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIGBGb29gCmluIG9yZGVyIHRvIG1ha2UgYSBuZXcgYEZvb2AgdmFsdWUuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB3YXkgYQpmaXJzdCBpbnN0YW5jZSBvZiBgRm9vYCBjb3VsZCBiZSBtYWRlIHRvIGluaXRpYWxpemUgYW5vdGhlciBpbnN0YW5jZSEKCkhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0IHRoYXQgaGFzIHRoaXMgcHJvYmxlbToKCmBgYApzdHJ1Y3QgRm9vIHsgeDogQm94PEZvbz4gfSAvLyBlcnJvcgpgYGAKCk9uZSBmaXggaXMgdG8gdXNlIGBPcHRpb25gLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBGb28geyB4OiBPcHRpb248Qm94PEZvbz4+IH0KYGBgCgpOb3cgaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIGBGb29gOiBgRm9vIHsgeDogTm9uZSB9YC4KRTAwNzQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgY29tcG9uZW50cyBvZiB0aGUKdHVwbGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIGEgY29uY3JldGUsIG5vbmdlbmVyaWMgdHlwZSBzbyB0aGUgY29tcGlsZXIgY2FuCnJlYXNvbiBhYm91dCBob3cgdG8gdXNlIFNJTUQgd2l0aCB0aGVtLiBUaGlzIGVycm9yIHdpbGwgb2NjdXIgaWYgdGhlIHR5cGVzCmFyZSBnZW5lcmljLgoKVGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZDxUPihULCBULCBULCBUKTsKYGBgCgpUaGlzIHdpbGwgbm90OgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEdvb2QodTMyLCB1MzIsIHUzMiwgdTMyKTsKYGBgCkUwMDc1QSBgI1tzaW1kXWAgYXR0cmlidXRlIHdhcyBhcHBsaWVkIHRvIGFuIGVtcHR5IHR1cGxlIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzUKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgQmFkOyAvLyBlcnJvciEKYGBgCgpUaGUgYCNbc2ltZF1gIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIG5vbiBlbXB0eSB0dXBsZSBzdHJ1Y3RzLCBiZWNhdXNlCml0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgdG8gdXNlIFNJTUQgb3BlcmF0aW9ucyB3aGVuIHRoZXJlIGFyZSBubyB2YWx1ZXMgdG8Kb3BlcmF0ZSBvbi4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIpOyAvLyBvayEKYGBgCkUwMDc2QWxsIHR5cGVzIGluIGEgdHVwbGUgc3RydWN0IGFyZW4ndCB0aGUgc2FtZSB3aGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAKYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA3NgojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBCYWQodTE2LCB1MzIsIHUzMiB1MzIpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIHRvIGF1dG9tYXRpY2FsbHkgdXNlIFNJTUQgb3BlcmF0aW9ucyBpbiB0dXBsZQpzdHJ1Y3QsIHRoZSB0eXBlcyBpbiB0aGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUsIG9yIHRoZSBjb21waWxlcgp3aWxsIHRyaWdnZXIgdGhpcyBlcnJvci4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyLCB1MzIpOyAvLyBvayEKYGBgCkUwMDc3QSB0dXBsZSBzdHJ1Y3QncyBlbGVtZW50IGlzbid0IGEgbWFjaGluZSB0eXBlIHdoZW4gdXNpbmcgdGhlIGAjW3NpbWRdYAphdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDc3CiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZChTdHJpbmcpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgZWxlbWVudHMgaW4gdGhlIHR1cGxlCm11c3QgYmUgbWFjaGluZSB0eXBlcyBzbyBTSU1EIG9wZXJhdGlvbnMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlbS4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyLCB1MzIpOyAvLyBvayEKYGBgCkUwMDgwQSBjb25zdGFudCB2YWx1ZSBmYWlsZWQgdG8gZ2V0IGV2YWx1YXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwODAKZW51bSBFbnVtIHsKICAgIFggPSAoMSA8PCA1MDApLAogICAgWSA9ICgxIC8gMCksCn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciB3YXMgdW5hYmxlIHRvIHNlbnNpYmx5IGV2YWx1YXRlIGEKY29uc3RhbnQgZXhwcmVzc2lvbiB0aGF0IGhhZCB0byBiZSBldmFsdWF0ZWQuIEF0dGVtcHRpbmcgdG8gZGl2aWRlIGJ5IDAKb3IgY2F1c2luZyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFyZSB0d28gd2F5cyB0byBpbmR1Y2UgdGhpcyBlcnJvci4KCkVuc3VyZSB0aGF0IHRoZSBleHByZXNzaW9ucyBnaXZlbiBjYW4gYmUgZXZhbHVhdGVkIGFzIHRoZSBkZXNpcmVkIGludGVnZXIgdHlwZS4KClNlZSB0aGUgW0N1c3RvbSBEaXNjcmltaW5hbnRzXVtjdXN0b20tZGlzY3JpbWluYW50c10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlCmZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNldHRpbmcgY3VzdG9tIGludGVnZXIgdHlwZXMgb24gZmllbGRsZXNzIGVudW1zCnVzaW5nIHRoZSBbYHJlcHJgIGF0dHJpYnV0ZV1bcmVwci1hdHRyaWJ1dGVdLgoKW2N1c3RvbS1kaXNjcmltaW5hbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvZW51bWVyYXRpb25zLmh0bWwjY3VzdG9tLWRpc2NyaW1pbmFudC12YWx1ZXMtZm9yLWZpZWxkLWxlc3MtZW51bWVyYXRpb25zCltyZXByLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGUtbGF5b3V0Lmh0bWwjcmVwcmMtZW51bXMKRTAwODFBIGRpc2NyaW1pbmFudCB2YWx1ZSBpcyBwcmVzZW50IG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA4MQplbnVtIEVudW0gewogICAgUCA9IDMsCiAgICBYID0gMywgLy8gZXJyb3IhCiAgICBZID0gNSwKfQpgYGAKCkVudW0gZGlzY3JpbWluYW50cyBhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGVudW0gdmFyaWFudHMgc3RvcmVkIGluIG1lbW9yeS4KVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgc2FtZSB2YWx1ZSB3YXMgdXNlZCBmb3IgdHdvIG9yIG1vcmUgdmFyaWFudHMsCm1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0uCgpgYGAKZW51bSBFbnVtIHsKICAgIFAsCiAgICBYID0gMywgLy8gb2shCiAgICBZID0gNSwKfQpgYGAKCk5vdGUgdGhhdCB2YXJpYW50cyB3aXRob3V0IGEgbWFudWFsbHkgc3BlY2lmaWVkIGRpc2NyaW1pbmFudCBhcmUgbnVtYmVyZWQgZnJvbQp0b3AgdG8gYm90dG9tIHN0YXJ0aW5nIGZyb20gMCwgc28gY2xhc2hlcyBjYW4gb2NjdXIgd2l0aCBzZWVtaW5nbHkgdW5yZWxhdGVkCnZhcmlhbnRzLgoKYGBgY29tcGlsZV9mYWlsLEUwMDgxCmVudW0gQmFkIHsKICAgIFgsCiAgICBZID0gMCwgLy8gZXJyb3IhCn0KYGBgCgpIZXJlIGBYYCB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNwZWNpZmllZCB0aGUgZGlzY3JpbWluYW50IDAgYnkgdGhlIHRpbWUgYFlgIGlzCmVuY291bnRlcmVkLCBzbyBhIGNvbmZsaWN0IG9jY3Vycy4KRTAwODRBbiB1bnN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgemVyby12YXJpYW50IGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDg0CiNbcmVwcihpMzIpXQplbnVtIE5pZ2h0c1dhdGNoIHt9IC8vIGVycm9yOiB1bnN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiBmb3IgemVyby12YXJpYW50IGVudW0KYGBgCgpJdCBpcyBpbXBvc3NpYmxlIHRvIGRlZmluZSBhbiBpbnRlZ2VyIHR5cGUgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgemVyby12YXJpYW50CmVudW0gdmFsdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHplcm8tdmFyaWFudCBlbnVtIHZhbHVlcy4gVGhlcmUgaXMgbm8gd2F5IHRvCmNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgZm9sbG93aW5nIHR5cGUgdXNpbmcgb25seSBzYWZlIGNvZGUuIFNvIHlvdSBoYXZlCnR3byBzb2x1dGlvbnMuIEVpdGhlciB5b3UgYWRkIHZhcmlhbnRzIGluIHlvdXIgZW51bToKCmBgYAojW3JlcHIoaTMyKV0KZW51bSBOaWdodHNXYXRjaCB7CiAgICBKb25Tbm93LAogICAgQ29tbWFuZGVyLAp9CmBgYAoKb3IgeW91IHJlbW92ZSB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGVudW06CgpgYGAKZW51bSBOaWdodHNXYXRjaCB7fQpgYGAKRTAwODcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUb28gbWFueSB0eXBlIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIGZvciBhIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VD4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PGY2NCwgYm9vbD4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDIKfQpgYGAKClRoZSBudW1iZXIgb2Ygc3VwcGxpZWQgYXJndW1lbnRzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgbnVtYmVyIG9mIGRlZmluZWQgdHlwZQpwYXJhbWV0ZXJzLgpFMDA4OCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBnYXZlIHRvbyBtYW55IGxpZmV0aW1lIGFyZ3VtZW50cy4gRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBmOjo8J3N0YXRpYz4oKSAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAwLCBmb3VuZCAxCn0KYGBgCgpQbGVhc2UgY2hlY2sgeW91IGdpdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHMuIEV4YW1wbGU6CgpgYGAKZm4gZigpIHt9CgpmbiBtYWluKCkgewogICAgZigpIC8vIG9rIQp9CmBgYAoKSXQncyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIFJ1c3QgY29tcGlsZXIgY2FuIGdlbmVyYWxseQpkZXRlcm1pbmUgdGhlIGxpZmV0aW1lIGJ5IGl0c2VsZi4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHZhbHVlOiBTdHJpbmcKfQoKaW1wbCBGb28gewogICAgLy8gaXQgY2FuIGJlIHdyaXR0ZW4gbGlrZSB0aGlzCiAgICBmbiBnZXRfdmFsdWU8J2E+KCYnYSBzZWxmKSAtPiAmJ2Egc3RyIHsgJnNlbGYudmFsdWUgfQogICAgLy8gYnV0IHRoZSBjb21waWxlciB3b3JrcyBmaW5lIHdpdGggdGhpcyB0b286CiAgICBmbiB3aXRob3V0X2xpZmV0aW1lKCZzZWxmKSAtPiAmc3RyIHsgJnNlbGYudmFsdWUgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBGb28geyB2YWx1ZTogImhlbGxvIi50b19vd25lZCgpIH07CgogICAgcHJpbnRsbiEoInt9IiwgZi5nZXRfdmFsdWUoKSk7CiAgICBwcmludGxuISgie30iLCBmLndpdGhvdXRfbGlmZXRpbWUoKSk7Cn0KYGBgCkUwMDg5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVG9vIGZldyB0eXBlIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIGZvciBhIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VCwgVT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PGY2ND4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czogZXhwZWN0ZWQgMiwgZm91bmQgMQp9CmBgYAoKTm90ZSB0aGF0IGlmIGEgZnVuY3Rpb24gdGFrZXMgbXVsdGlwbGUgdHlwZSBhcmd1bWVudHMgYnV0IHlvdSB3YW50IHRoZSBjb21waWxlcgp0byBpbmZlciBzb21lIG9mIHRoZW0sIHlvdSBjYW4gdXNlIHR5cGUgcGxhY2Vob2xkZXJzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxULCBVPih4OiBUKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGY2ND4oeCk7ICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMQogICAgZm9vOjo8XywgZjY0Pih4KTsgLy8gc2FtZSBhcyBgZm9vOjo8Ym9vbCwgZjY0Pih4KWAKfQpgYGAKRTAwOTAjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgZ2F2ZSB0b28gZmV3IGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288J2E6ICdiLCAnYjogJ2E+KCkge30KCmZuIG1haW4oKSB7CiAgICBmb286Ojwnc3RhdGljPigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCn0KYGBgCgpQbGVhc2UgY2hlY2sgeW91IGdpdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHMuIEV4YW1wbGU6CgpgYGAKZm4gZm9vPCdhOiAnYiwgJ2I6ICdhPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8J3N0YXRpYywgJ3N0YXRpYz4oKTsKfQpgYGAKRTAwOTFBbiB1bm5lY2Vzc2FyeSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlciB3YXMgZ2l2ZW4gaW4gYSB0eXBlIGFsaWFzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MQp0eXBlIEZvbzxUPiA9IHUzMjsgLy8gZXJyb3I6IHR5cGUgcGFyYW1ldGVyIGBUYCBpcyB1bnVzZWQKLy8gb3I6CnR5cGUgRm9vPEEsQj4gPSBCb3g8QT47IC8vIGVycm9yOiB0eXBlIHBhcmFtZXRlciBgQmAgaXMgdW51c2VkCmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3Qgd3JpdGUgdG9vIG1hbnkgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYAp0eXBlIEZvbyA9IHUzMjsgLy8gb2shCnR5cGUgRm9vMjxBPiA9IEJveDxBPjsgLy8gb2shCmBgYApFMDA5MkFuIHVuZGVmaW5lZCBhdG9taWMgb3BlcmF0aW9uIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwOTIKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mb28oKTsgLy8gZXJyb3I6IHVucmVjb2duaXplZCBhdG9taWMgb3BlcmF0aW9uCiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBmdW5jdGlvbgp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3QgbWFrZSBhIG1pc3Rha2UgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxsIGludHJpbnNpYwpmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYGNvbXBpbGVyL3J1c3RjX2NvZGVnZW5fbGx2bS9zcmMvaW50cmluc2ljLnJzYCBhbmQgaW4KYGxpYnJhcnkvY29yZS9zcmMvaW50cmluc2ljcy5yc2AgaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mZW5jZSgpOyAvLyBvayEKfQpgYGAKRTAwOTNBbiB1bmtub3duIGludHJpbnNpYyBmdW5jdGlvbiB3YXMgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDkzCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBmb28oKTsgLy8gZXJyb3I6IHVucmVjb2duaXplZCBpbnRyaW5zaWMgZnVuY3Rpb246IGBmb29gCn0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgewogICAgICAgIGZvbygpOwogICAgfQp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3QgbWFrZSBhIG1pc3Rha2UgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxsIGludHJpbnNpYwpmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYGNvbXBpbGVyL3J1c3RjX2NvZGVnZW5fbGx2bS9zcmMvaW50cmluc2ljLnJzYCBhbmQgaW4KYGxpYnJhcnkvY29yZS9zcmMvaW50cmluc2ljcy5yc2AgaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mZW5jZSgpOyAvLyBvayEKfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7CiAgICAgICAgYXRvbWljX2ZlbmNlKCk7CiAgICB9Cn0KYGBgCkUwMDk0QW4gaW52YWxpZCBudW1iZXIgb2YgZ2VuZXJpYyBwYXJhbWV0ZXJzIHdhcyBwYXNzZWQgdG8gYW4gaW50cmluc2ljIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5NAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxULCBVPigpIC0+IHVzaXplOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG9mIHR5cGUgcGFyYW1ldGVycwp9CmBgYAoKUGxlYXNlIGNoZWNrIHRoYXQgeW91IHByb3ZpZGVkIHRoZSByaWdodCBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzCmFuZCB2ZXJpZnkgd2l0aCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIHNpemVfb2Y8VD4oKSAtPiB1c2l6ZTsgLy8gb2shCn0KYGBgCkUwMTA2VGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhIGxpZmV0aW1lIGlzIG1pc3NpbmcgZnJvbSBhIHR5cGUuIElmIGl0IGlzIGFuIGVycm9yCmluc2lkZSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIHByb2JsZW0gbWF5IGJlIHdpdGggZmFpbGluZyB0byBhZGhlcmUgdG8gdGhlCmxpZmV0aW1lIGVsaXNpb24gcnVsZXMgKHNlZSBiZWxvdykuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNgpzdHJ1Y3QgRm9vMSB7IHg6ICZib29sIH0KICAgICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgpzdHJ1Y3QgRm9vMjwnYT4geyB4OiAmJ2EgYm9vbCB9IC8vIGNvcnJlY3QKCnN0cnVjdCBCYXIxIHsgeDogRm9vMiB9CiAgICAgICAgICAgICAgLy8gXl5eXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKc3RydWN0IEJhcjI8J2E+IHsgeDogRm9vMjwnYT4gfSAvLyBjb3JyZWN0CgplbnVtIEJhejEgeyBBKHU4KSwgQigmYm9vbCksIH0KICAgICAgICAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKZW51bSBCYXoyPCdhPiB7IEEodTgpLCBCKCYnYSBib29sKSwgfSAvLyBjb3JyZWN0Cgp0eXBlIE15U3RyMSA9ICZzdHI7CiAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKdHlwZSBNeVN0cjI8J2E+ID0gJidhIHN0cjsgLy8gY29ycmVjdApgYGAKCkxpZmV0aW1lIGVsaXNpb24gaXMgYSBzcGVjaWFsLCBsaW1pdGVkIGtpbmQgb2YgaW5mZXJlbmNlIGZvciBsaWZldGltZXMgaW4KZnVuY3Rpb24gc2lnbmF0dXJlcyB3aGljaCBhbGxvd3MgeW91IHRvIGxlYXZlIG91dCBsaWZldGltZXMgaW4gY2VydGFpbiBjYXNlcy4KRm9yIG1vcmUgYmFja2dyb3VuZCBvbiBsaWZldGltZSBlbGlzaW9uIHNlZSBbdGhlIGJvb2tdW2Jvb2stbGVdLgoKVGhlIGxpZmV0aW1lIGVsaXNpb24gcnVsZXMgcmVxdWlyZSB0aGF0IGFueSBmdW5jdGlvbiBzaWduYXR1cmUgd2l0aCBhbiBlbGlkZWQKb3V0cHV0IGxpZmV0aW1lIG11c3QgZWl0aGVyIGhhdmU6CgogLSBleGFjdGx5IG9uZSBpbnB1dCBsaWZldGltZQogLSBvciwgbXVsdGlwbGUgaW5wdXQgbGlmZXRpbWVzLCBidXQgdGhlIGZ1bmN0aW9uIG11c3QgYWxzbyBiZSBhIG1ldGhvZCB3aXRoIGEKICAgYCZzZWxmYCBvciBgJm11dCBzZWxmYCByZWNlaXZlcgoKSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBvdXRwdXQgbGlmZXRpbWUgaXMgaW5mZXJyZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHVuaXF1ZQppbnB1dCBsaWZldGltZS4gSW4gdGhlIHNlY29uZCBjYXNlLCB0aGUgbGlmZXRpbWUgaXMgaW5zdGVhZCBpbmZlcnJlZCB0byBiZSB0aGUKc2FtZSBhcyB0aGUgbGlmZXRpbWUgb24gYCZzZWxmYCBvciBgJm11dCBzZWxmYC4KCkhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgZWxpc2lvbiBlcnJvcnM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYKLy8gZXJyb3IsIG5vIGlucHV0IGxpZmV0aW1lcwpmbiBmb28oKSAtPiAmc3RyIHsgfQoKLy8gZXJyb3IsIGB4YCBhbmQgYHlgIGhhdmUgZGlzdGluY3QgbGlmZXRpbWVzIGluZmVycmVkCmZuIGJhcih4OiAmc3RyLCB5OiAmc3RyKSAtPiAmc3RyIHsgfQoKLy8gZXJyb3IsIGB5YCdzIGxpZmV0aW1lIGlzIGluZmVycmVkIHRvIGJlIGRpc3RpbmN0IGZyb20gYHhgJ3MKZm4gYmF6PCdhPih4OiAmJ2Egc3RyLCB5OiAmc3RyKSAtPiAmc3RyIHsgfQpgYGAKCltib29rLWxlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDMtbGlmZXRpbWUtc3ludGF4Lmh0bWwjbGlmZXRpbWUtZWxpc2lvbgpFMDEwN0FuIGluY29ycmVjdCBudW1iZXIgb2YgZ2VuZXJpYyBhcmd1bWVudHMgd2FzIHByb3ZpZGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpzdHJ1Y3QgRm9vPFQ+IHsgeDogVCB9CgpzdHJ1Y3QgQmFyIHsgeDogRm9vIH0gICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAxLCBmb3VuZCAwCnN0cnVjdCBCYXo8UywgVD4geyB4OiBGb288UywgVD4gfSAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDIKCmZuIGZvbzxULCBVPih4OiBULCB5OiBVKSB7fQpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286Ojxib29sPih4KTsgICAgICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCiAgICBmb286Ojxib29sLCBpMzIsIGkzMj4oeCwgMiwgNCk7IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAzCiAgICBmOjo8J3N0YXRpYz4oKTsgICAgICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAwLCBmb3VuZCAxCn0KYGBgCgpXaGVuIHVzaW5nL2RlY2xhcmluZyBhbiBpdGVtIHdpdGggZ2VuZXJpYyBhcmd1bWVudHMsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGV4YWN0CnNhbWUgbnVtYmVyOgoKYGBgCnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXI8VD4geyB4OiBGb288VD4gfSAgICAgICAgICAgICAgIC8vIG9rIQpzdHJ1Y3QgQmF6PFMsIFQ+IHsgeDogRm9vPFM+LCB5OiBGb288VD4gfSAvLyBvayEKCmZuIGZvbzxULCBVPih4OiBULCB5OiBVKSB7fQpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286Ojxib29sLCB1MzI+KHgsIDEyKTsgICAgICAgICAgICAgIC8vIG9rIQogICAgZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvayEKfQpgYGAKRTAxMDlZb3UgdHJpZWQgdG8gcHJvdmlkZSBhIGdlbmVyaWMgYXJndW1lbnQgdG8gYSB0eXBlIHdoaWNoIGRvZXNuJ3QgbmVlZCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDkKdHlwZSBYID0gdTMyPGkzMj47IC8vIGVycm9yOiB0eXBlIGFyZ3VtZW50cyBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgdHlwZQp0eXBlIFkgPSBib29sPCdzdGF0aWM+OyAvLyBlcnJvcjogbGlmZXRpbWUgcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgb24KICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoaXMgdHlwZQpgYGAKCkNoZWNrIHRoYXQgeW91IHVzZWQgdGhlIGNvcnJlY3QgYXJndW1lbnQgYW5kIHRoYXQgdGhlIGRlZmluaXRpb24gaXMgY29ycmVjdC4KCkV4YW1wbGU6CgpgYGAKdHlwZSBYID0gdTMyOyAvLyBvayEKdHlwZSBZID0gYm9vbDsgLy8gb2shCmBgYAoKTm90ZSB0aGF0IGdlbmVyaWMgYXJndW1lbnRzIGZvciBlbnVtIHZhcmlhbnQgY29uc3RydWN0b3JzIGdvIGFmdGVyIHRoZSB2YXJpYW50LApub3QgYWZ0ZXIgdGhlIGVudW0uIEZvciBleGFtcGxlLCB5b3Ugd291bGQgd3JpdGUgYE9wdGlvbjo6Tm9uZTo6PHUzMj5gLApyYXRoZXIgdGhhbiBgT3B0aW9uOjo8dTMyPjo6Tm9uZWAuCkUwMTEwIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IHRyaWVkIHRvIHByb3ZpZGUgYSBsaWZldGltZSB0byBhIHR5cGUgd2hpY2ggZG9lc24ndCBuZWVkIGl0LgpTZWUgYEUwMTA5YCBmb3IgbW9yZSBkZXRhaWxzLgpFMDExNkFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBkZWZpbmVkIGZvciBhIHR5cGUgb3V0c2lkZSB0aGUgY3VycmVudCBjcmF0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTYKaW1wbCBWZWM8dTg+IHsgfSAvLyBlcnJvcgpgYGAKCllvdSBjYW4gb25seSBkZWZpbmUgYW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gZm9yIGEgdHlwZSBpbiB0aGUgc2FtZSBjcmF0ZQp3aGVyZSB0aGUgdHlwZSB3YXMgZGVmaW5lZC4gRm9yIGV4YW1wbGUsIGFuIGBpbXBsYCBibG9jayBhcyBhYm92ZSBpcyBub3QgYWxsb3dlZApzaW5jZSBgVmVjYCBpcyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgeW91IGNhbiBlaXRoZXI6CgogLSBkZWZpbmUgYSB0cmFpdCB0aGF0IGhhcyB0aGUgZGVzaXJlZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy90eXBlcy9jb25zdGFudHMgYW5kCiAgIGltcGxlbWVudCB0aGUgdHJhaXQgZm9yIHRoZSB0eXBlIGluIHF1ZXN0aW9uCiAtIGRlZmluZSBhIG5ldyB0eXBlIHdyYXBwaW5nIHRoZSB0eXBlIGFuZCBkZWZpbmUgYW4gaW1wbGVtZW50YXRpb24gb24gdGhlIG5ldwogICB0eXBlCgpOb3RlIHRoYXQgdXNpbmcgdGhlIGB0eXBlYCBrZXl3b3JkIGRvZXMgbm90IHdvcmsgaGVyZSBiZWNhdXNlIGB0eXBlYCBvbmx5CmludHJvZHVjZXMgYSB0eXBlIGFsaWFzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE2CnR5cGUgQnl0ZXMgPSBWZWM8dTg+OwoKaW1wbCBCeXRlcyB7IH0gLy8gZXJyb3IsIHNhbWUgYXMgYWJvdmUKYGBgCkUwMTE3T25seSB0cmFpdHMgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBjcmF0ZSBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIGFyYml0cmFyeSB0eXBlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTcKaW1wbCBEcm9wIGZvciB1MzIge30KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyBhIHZpb2xhdGlvbiBvZiBvbmUgb2YgUnVzdCdzIG9ycGhhbiBydWxlcyBmb3IgdHJhaXQKaW1wbGVtZW50YXRpb25zLiBUaGUgcnVsZSBwcm9oaWJpdHMgYW55IGltcGxlbWVudGF0aW9uIG9mIGEgZm9yZWlnbiB0cmFpdCAoYQp0cmFpdCBkZWZpbmVkIGluIGFub3RoZXIgY3JhdGUpIHdoZXJlCgogLSB0aGUgdHlwZSB0aGF0IGlzIGltcGxlbWVudGluZyB0aGUgdHJhaXQgaXMgZm9yZWlnbgogLSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkIHRvIHRoZSB0cmFpdCAoaWYgdGhlcmUgYXJlIGFueSkgYXJlIGFsc28KICAgZm9yZWlnbi4KClRvIGF2b2lkIHRoaXMga2luZCBvZiBlcnJvciwgZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGxvY2FsIHR5cGUgaXMgcmVmZXJlbmNlZApieSB0aGUgYGltcGxgOgoKYGBgCnB1YiBzdHJ1Y3QgRm9vOyAvLyB5b3UgZGVmaW5lIHlvdXIgdHlwZSBpbiB5b3VyIGNyYXRlCgppbXBsIERyb3AgZm9yIEZvbyB7IC8vIGFuZCB5b3UgY2FuIGltcGxlbWVudCB0aGUgdHJhaXQgb24gaXQhCiAgICAvLyBjb2RlIG9mIHRyYWl0IGltcGxlbWVudGF0aW9uIGhlcmUKIyAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IH0KfQoKaW1wbCBGcm9tPEZvbz4gZm9yIGkzMiB7IC8vIG9yIHlvdSB1c2UgYSB0eXBlIGZyb20geW91ciBjcmF0ZSBhcwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB0eXBlIHBhcmFtZXRlcgogICAgZm4gZnJvbShpOiBGb28pIC0+IGkzMiB7CiAgICAgICAgMAogICAgfQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgZGVmaW5lIGEgdHJhaXQgbG9jYWxseSBhbmQgaW1wbGVtZW50IHRoYXQgaW5zdGVhZDoKCmBgYAp0cmFpdCBCYXIgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbCBCYXIgZm9yIHUzMiB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KYGBgCgpGb3IgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBvZiB0aGUgb3JwaGFuIHJ1bGVzLCBzZWUgW1JGQyAxMDIzXS4KCltSRkMgMTAyM106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzEwMjMtcmViYWxhbmNpbmctY29oZXJlbmNlLm1kCkUwMTE4QW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gd2FzIGRlZmluZWQgZm9yIHNvbWV0aGluZyB3aGljaCBpc24ndCBhIHN0cnVjdCwKZW51bSwgdW5pb24sIG9yIHRyYWl0IG9iamVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTgKaW1wbCAodTgsIHU4KSB7IC8vIGVycm9yOiBubyBub21pbmFsIHR5cGUgZm91bmQgZm9yIGluaGVyZW50IGltcGxlbWVudGF0aW9uCiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZyB7CiAgICAgICAgLy8gLi4uCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGltcGxlbWVudCBhIHRyYWl0IG9uIHRoZSB0eXBlIG9yIHdyYXAgaXQgaW4gYSBzdHJ1Y3QuCkV4YW1wbGU6CgpgYGAKLy8gd2UgY3JlYXRlIGEgdHJhaXQgaGVyZQp0cmFpdCBMaXZlTG9uZ0FuZFByb3NwZXIgewogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmc7Cn0KCi8vIGFuZCBub3cgeW91IGNhbiBpbXBsZW1lbnQgaXQgb24gKHU4LCB1OCkKaW1wbCBMaXZlTG9uZ0FuZFByb3NwZXIgZm9yICh1OCwgdTgpIHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nIHsKICAgICAgICAiSGUncyBkZWFkLCBKaW0hIi50b19vd25lZCgpCiAgICB9Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNyZWF0ZSBhIG5ld3R5cGUuIEEgbmV3dHlwZSBpcyBhIHdyYXBwaW5nIHR1cGxlLXN0cnVjdC4KRm9yIGV4YW1wbGUsIGBOZXdUeXBlYCBpcyBhIG5ld3R5cGUgb3ZlciBgRm9vYCBpbiBgc3RydWN0IE5ld1R5cGUoRm9vKWAuCkV4YW1wbGU6CgpgYGAKc3RydWN0IFR5cGVXcmFwcGVyKCh1OCwgdTgpKTsKCmltcGwgVHlwZVdyYXBwZXIgewogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICJGYXNjaW5hdGluZyEiLnRvX293bmVkKCkKICAgIH0KfQpgYGAKCkluc3RlYWQgb2YgZGVmaW5pbmcgYW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gb24gYSByZWZlcmVuY2UsIHlvdSBjb3VsZCBhbHNvCm1vdmUgdGhlIHJlZmVyZW5jZSBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE4CnN0cnVjdCBGb287CgppbXBsICZGb28geyAvLyBlcnJvcjogbm8gbm9taW5hbCB0eXBlIGZvdW5kIGZvciBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbgogICAgZm4gYmFyKHNlbGYsIG90aGVyOiBTZWxmKSB7fQp9CmBgYAoKYmVjb21lcwoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoJnNlbGYsIG90aGVyOiAmU2VsZikge30KfQpgYGAKRTAxMTlUaGVyZSBhcmUgY29uZmxpY3RpbmcgdHJhaXQgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgc2FtZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExOQp0cmFpdCBNeVRyYWl0IHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGw8VD4gTXlUcmFpdCBmb3IgVCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KCnN0cnVjdCBGb28gewogICAgdmFsdWU6IHVzaXplCn0KCmltcGwgTXlUcmFpdCBmb3IgRm9vIHsgLy8gZXJyb3I6IGNvbmZsaWN0aW5nIGltcGxlbWVudGF0aW9ucyBvZiB0cmFpdAogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBgTXlUcmFpdGAgZm9yIHR5cGUgYEZvb2AKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyBzZWxmLnZhbHVlIH0KfQpgYGAKCldoZW4gbG9va2luZyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHJhaXQsIHRoZSBjb21waWxlciBmaW5kcwpib3RoIHRoZSBgaW1wbDxUPiBNeVRyYWl0IGZvciBUYCB3aGVyZSBUIGlzIGFsbCB0eXBlcyBhbmQgdGhlIGBpbXBsCk15VHJhaXQgZm9yIEZvb2AuIFNpbmNlIGEgdHJhaXQgY2Fubm90IGJlIGltcGxlbWVudGVkIG11bHRpcGxlIHRpbWVzLAp0aGlzIGlzIGFuIGVycm9yLiBTbywgd2hlbiB5b3Ugd3JpdGU6CgpgYGAKdHJhaXQgTXlUcmFpdCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsPFQ+IE15VHJhaXQgZm9yIFQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CmBgYAoKVGhpcyBtYWtlcyB0aGUgdHJhaXQgaW1wbGVtZW50ZWQgb24gYWxsIHR5cGVzIGluIHRoZSBzY29wZS4gU28gaWYgeW91CnRyeSB0byBpbXBsZW1lbnQgaXQgb24gYW5vdGhlciBvbmUgYWZ0ZXIgdGhhdCwgdGhlIGltcGxlbWVudGF0aW9ucyB3aWxsCmNvbmZsaWN0LiBFeGFtcGxlOgoKYGBgCnRyYWl0IE15VHJhaXQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbDxUPiBNeVRyYWl0IGZvciBUIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQoKc3RydWN0IEZvbzsKCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IEZvbzsKCiAgICBmLmdldCgpOyAvLyB0aGUgdHJhaXQgaXMgaW1wbGVtZW50ZWQgc28gd2UgY2FuIHVzZSBpdAp9CmBgYApFMDEyMERyb3Agd2FzIGltcGxlbWVudGVkIG9uIGEgdHJhaXQsIHdoaWNoIGlzIG5vdCBhbGxvd2VkOiBvbmx5IHN0cnVjdHMgYW5kCmVudW1zIGNhbiBpbXBsZW1lbnQgRHJvcC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMjAKdHJhaXQgTXlUcmFpdCB7fQoKaW1wbCBEcm9wIGZvciBNeVRyYWl0IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYAoKQSB3b3JrYXJvdW5kIGZvciB0aGlzIHByb2JsZW0gaXMgdG8gd3JhcCB0aGUgdHJhaXQgdXAgaW4gYSBzdHJ1Y3QsIGFuZCBpbXBsZW1lbnQKRHJvcCBvbiB0aGF0OgoKYGBgCnRyYWl0IE15VHJhaXQge30Kc3RydWN0IE15V3JhcHBlcjxUOiBNeVRyYWl0PiB7IGZvbzogVCB9CgppbXBsIDxUOiBNeVRyYWl0PiBEcm9wIGZvciBNeVdyYXBwZXI8VD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KCmBgYAoKQWx0ZXJuYXRpdmVseSwgd3JhcHBpbmcgdHJhaXQgb2JqZWN0cyByZXF1aXJlcyBzb21ldGhpbmc6CgpgYGAKdHJhaXQgTXlUcmFpdCB7fQoKLy9vciBCb3g8TXlUcmFpdD4sIGlmIHlvdSB3YW50ZWQgYW4gb3duZWQgdHJhaXQgb2JqZWN0CnN0cnVjdCBNeVdyYXBwZXI8J2E+IHsgZm9vOiAmJ2EgTXlUcmFpdCB9CgppbXBsIDwnYT4gRHJvcCBmb3IgTXlXcmFwcGVyPCdhPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKRTAxMjFUaGUgdHlwZSBwbGFjZWhvbGRlciBgX2Agd2FzIHVzZWQgd2l0aGluIGEgdHlwZSBvbiBhbiBpdGVtJ3Mgc2lnbmF0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEyMQpmbiBmb28oKSAtPiBfIHsgNSB9IC8vIGVycm9yCgpzdGF0aWMgQkFSOiBfID0gInRlc3QiOyAvLyBlcnJvcgpgYGAKCkluIHRob3NlIGNhc2VzLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSB0eXBlIGV4cGxpY2l0bHk6CgpgYGAKZm4gZm9vKCkgLT4gaTMyIHsgNSB9IC8vIG9rIQoKc3RhdGljIEJBUjogJnN0ciA9ICJ0ZXN0IjsgLy8gb2shCmBgYAoKVGhlIHR5cGUgcGxhY2Vob2xkZXIgYF9gIGNhbiBiZSB1c2VkIG91dHNpZGUgaXRlbSdzIHNpZ25hdHVyZSBhcyBmb2xsb3dzOgoKYGBgCmxldCB4ID0gImE0YSIuc3BsaXQoJzQnKQogICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7IC8vIE5vIG5lZWQgdG8gcHJlY2lzZSB0aGUgVmVjJ3MgZ2VuZXJpYyB0eXBlLgpgYGAKRTAxMjRBIHN0cnVjdCB3YXMgZGVjbGFyZWQgd2l0aCB0d28gZmllbGRzIGhhdmluZyB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEyNApzdHJ1Y3QgRm9vIHsKICAgIGZpZWxkMTogaTMyLAogICAgZmllbGQxOiBpMzIsIC8vIGVycm9yOiBmaWVsZCBpcyBhbHJlYWR5IGRlY2xhcmVkCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIGZpZWxkIG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0bHkgc3BlbGxlZC4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGZpZWxkMTogaTMyLAogICAgZmllbGQyOiBpMzIsIC8vIG9rIQp9CmBgYApFMDEyOEEgdHlwZSBwYXJhbWV0ZXIgd2l0aCBkZWZhdWx0IHZhbHVlIGlzIHVzaW5nIGZvcndhcmQgZGVjbGFyZWQgaWRlbnRpZmllci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMjgKc3RydWN0IEZvbzxUID0gVSwgVSA9ICgpPiB7CiAgICBmaWVsZDE6IFQsCiAgICBmaWVsZDI6IFUsCn0KLy8gZXJyb3I6IGdlbmVyaWMgcGFyYW1ldGVycyB3aXRoIGEgZGVmYXVsdCBjYW5ub3QgdXNlIGZvcndhcmQgZGVjbGFyZWQKLy8gICAgICAgIGlkZW50aWZpZXJzCmBgYAoKVHlwZSBwYXJhbWV0ZXIgZGVmYXVsdHMgY2FuIG9ubHkgdXNlIHBhcmFtZXRlcnMgdGhhdCBvY2N1ciBiZWZvcmUgdGhlbS4gU2luY2UKdHlwZSBwYXJhbWV0ZXJzIGFyZSBldmFsdWF0ZWQgaW4tb3JkZXIsIHRoaXMgaXNzdWUgY291bGQgYmUgZml4ZWQgYnkgZG9pbmc6CgpgYGAKc3RydWN0IEZvbzxVID0gKCksIFQgPSBVPiB7CiAgICBmaWVsZDE6IFQsCiAgICBmaWVsZDI6IFUsCn0KYGBgCgpQbGVhc2UgYWxzbyB2ZXJpZnkgdGhhdCB0aGlzIHdhc24ndCBiZWNhdXNlIG9mIGEgbmFtZS1jbGFzaCBhbmQgcmVuYW1lIHRoZSB0eXBlCnBhcmFtZXRlciBpZiBzby4KRTAxMzBBIHBhdHRlcm4gd2FzIGRlY2xhcmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgZm9yZWlnbiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzAKZXh0ZXJuICJDIiB7CiAgICBmbiBmb28oKGEsIGIpOiAodTMyLCB1MzIpKTsgLy8gZXJyb3I6IHBhdHRlcm5zIGFyZW4ndCBhbGxvd2VkIGluIGZvcmVpZ24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZnVuY3Rpb24gZGVjbGFyYXRpb25zCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcmVwbGFjZSB0aGUgcGF0dGVybiBhcmd1bWVudCB3aXRoIGEgcmVndWxhciBvbmUuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgYTogdTMyLAogICAgYjogdTMyLAp9CgpleHRlcm4gIkMiIHsKICAgIGZuIGZvbyhzOiBTb21lU3RydWN0KTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApleHRlcm4gIkMiIHsKICAgIGZuIGZvbyhhOiAodTMyLCB1MzIpKTsgLy8gb2shCn0KYGBgCkUwMTMxVGhlIGBtYWluYCBmdW5jdGlvbiB3YXMgZGVmaW5lZCB3aXRoIGdlbmVyaWMgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzEKZm4gbWFpbjxUPigpIHsgLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gaGF2ZSBnZW5lcmljIHBhcmFtZXRlcnMKfQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGBtYWluYCBmdW5jdGlvbiB3aXRoIGdlbmVyaWMgcGFyYW1ldGVycy4KSXQgbXVzdCBub3QgdGFrZSBhbnkgYXJndW1lbnRzLgpFMDEzMkEgZnVuY3Rpb24gd2l0aCB0aGUgYHN0YXJ0YCBhdHRyaWJ1dGUgd2FzIGRlY2xhcmVkIHdpdGggdHlwZSBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMgojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGY8VD4oKSB7fQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWNsYXJlIHR5cGUgcGFyYW1ldGVycyBvbiBhIGZ1bmN0aW9uIHRoYXQgaGFzIHRoZSBgc3RhcnRgCmF0dHJpYnV0ZS4gU3VjaCBhIGZ1bmN0aW9uIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIHR5cGUgc2lnbmF0dXJlIChmb3IgbW9yZQppbmZvcm1hdGlvbiwgdmlldyBbdGhlIHVuc3RhYmxlIGJvb2tdWzFdKToKClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2xhbmctaXRlbXMuaHRtbCN3cml0aW5nLWFuLWV4ZWN1dGFibGUtd2l0aG91dC1zdGRsaWIKCmBgYAojIGxldCBfOgpmbihpc2l6ZSwgKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemU7CmBgYAoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIG15X3N0YXJ0KGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7CiAgICAwCn0KYGBgCkUwMTMzVW5zYWZlIGNvZGUgd2FzIHVzZWQgb3V0c2lkZSBvZiBhbiB1bnNhZmUgZnVuY3Rpb24gb3IgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTMzCnVuc2FmZSBmbiBmKCkgeyByZXR1cm47IH0gLy8gVGhpcyBpcyB0aGUgdW5zYWZlIGNvZGUKCmZuIG1haW4oKSB7CiAgICBmKCk7IC8vIGVycm9yOiBjYWxsIHRvIHVuc2FmZSBmdW5jdGlvbiByZXF1aXJlcyB1bnNhZmUgZnVuY3Rpb24gb3IgYmxvY2sKfQpgYGAKClVzaW5nIHVuc2FmZSBmdW5jdGlvbmFsaXR5IGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBhbmQgZGlzYWxsb3dlZCBieSBzYWZldHkKY2hlY2tzLiBFeGFtcGxlczoKCiogRGVyZWZlcmVuY2luZyByYXcgcG9pbnRlcnMKKiBDYWxsaW5nIGZ1bmN0aW9ucyB2aWEgRkZJCiogQ2FsbGluZyBmdW5jdGlvbnMgbWFya2VkIHVuc2FmZQoKVGhlc2Ugc2FmZXR5IGNoZWNrcyBjYW4gYmUgcmVsYXhlZCBmb3IgYSBzZWN0aW9uIG9mIHRoZSBjb2RlIGJ5IHdyYXBwaW5nIHRoZQp1bnNhZmUgaW5zdHJ1Y3Rpb25zIHdpdGggYW4gYHVuc2FmZWAgYmxvY2suIEZvciBpbnN0YW5jZToKCmBgYAp1bnNhZmUgZm4gZigpIHsgcmV0dXJuOyB9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgZigpOyB9IC8vIG9rIQp9CmBgYAoKU2VlIHRoZSBbdW5zYWZlIHNlY3Rpb25dW3Vuc2FmZS1zZWN0aW9uXSBvZiB0aGUgQm9vayBmb3IgbW9yZSBkZXRhaWxzLgoKW3Vuc2FmZS1zZWN0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDEtdW5zYWZlLXJ1c3QuaHRtbApFMDEzNiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCk1vcmUgdGhhbiBvbmUgYG1haW5gIGZ1bmN0aW9uIHdhcyBmb3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gbWFpbigpIHsKICAgIC8vIC4uLgp9CgovLyAuLi4KCmZuIG1haW4oKSB7IC8vIGVycm9yIQogICAgLy8gLi4uCn0KYGBgCgpBIGJpbmFyeSBjYW4gb25seSBoYXZlIG9uZSBlbnRyeSBwb2ludCwgYW5kIGJ5IGRlZmF1bHQgdGhhdCBlbnRyeSBwb2ludCBpcyB0aGUKYG1haW4oKWAgZnVuY3Rpb24uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiwgcGxlYXNlCnJlbmFtZSBvbmUgb2YgdGhlbS4KRTAxMzcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZCB3aXRoIHRoZSBgI1ttYWluXWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKG1haW4pXQoKI1ttYWluXQpmbiBmb28oKSB7fQoKI1ttYWluXQpmbiBmKCkge30gLy8gZXJyb3I6IG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIGEgYCNbbWFpbl1gIGF0dHJpYnV0ZQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvdW5kIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIHRoZQpgI1ttYWluXWAgYXR0cmlidXRlLiBUaGlzIGlzIGFuIGVycm9yIGJlY2F1c2UgdGhlcmUgbXVzdCBiZSBhIHVuaXF1ZSBlbnRyeQpwb2ludCBpbnRvIGEgUnVzdCBwcm9ncmFtLiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUobWFpbildCgojW21haW5dCmZuIGYoKSB7fSAvLyBvayEKYGBgCkUwMTM4TW9yZSB0aGFuIG9uZSBmdW5jdGlvbiB3YXMgZGVjbGFyZWQgd2l0aCB0aGUgYCNbc3RhcnRdYCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTM4CiMhW2ZlYXR1cmUoc3RhcnQpXQoKI1tzdGFydF0KZm4gZm9vKGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7fQoKI1tzdGFydF0KZm4gZihhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUge30KLy8gZXJyb3I6IG11bHRpcGxlICdzdGFydCcgZnVuY3Rpb25zCmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tcGlsZXIgZm91bmQgbXVsdGlwbGUgZnVuY3Rpb25zIHdpdGggdGhlCmAjW3N0YXJ0XWAgYXR0cmlidXRlLiBUaGlzIGlzIGFuIGVycm9yIGJlY2F1c2UgdGhlcmUgbXVzdCBiZSBhIHVuaXF1ZSBlbnRyeQpwb2ludCBpbnRvIGEgUnVzdCBwcm9ncmFtLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhcnQpXQoKI1tzdGFydF0KZm4gZm9vKGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7IDAgfSAvLyBvayEKYGBgCkUwMTM5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlcmUgYXJlIHZhcmlvdXMgcmVzdHJpY3Rpb25zIG9uIHRyYW5zbXV0aW5nIGJldHdlZW4gdHlwZXMgaW4gUnVzdDsgZm9yIGV4YW1wbGUKdHlwZXMgYmVpbmcgdHJhbnNtdXRlZCBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZS4gVG8gYXBwbHkgYWxsIHRoZXNlIHJlc3RyaWN0aW9ucywKdGhlIGNvbXBpbGVyIG11c3Qga25vdyB0aGUgZXhhY3QgdHlwZXMgdGhhdCBtYXkgYmUgdHJhbnNtdXRlZC4gV2hlbiB0eXBlCnBhcmFtZXRlcnMgYXJlIGludm9sdmVkLCB0aGlzIGNhbm5vdCBhbHdheXMgYmUgZG9uZS4KClNvLCBmb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyBub3QgYWxsb3dlZDoKCmBgYAp1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKCnN0cnVjdCBGb288VD4oVmVjPFQ+KTsKCmZuIGZvbzxUPih4OiBWZWM8VD4pIHsKICAgIC8vIHdlIGFyZSB0cmFuc211dGluZyBiZXR3ZWVuIFZlYzxUPiBhbmQgRm9vPEY+IGhlcmUKICAgIGxldCB5OiBGb288VD4gPSB1bnNhZmUgeyB0cmFuc211dGUoeCkgfTsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHkKfQpgYGAKCkluIHRoaXMgc3BlY2lmaWMgY2FzZSB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgdHJhbnNtdXRlIGlzIGhhcm1sZXNzIChidXQKdGhpcyBpcyBub3QgZ3VhcmFudGVlZCBieSBSdXN0KS4gSG93ZXZlciwgd2hlbiBhbGlnbm1lbnQgYW5kIGVudW0gb3B0aW1pemF0aW9ucwpjb21lIGludG8gdGhlIHBpY3R1cmUsIGl0J3MgcXVpdGUgbGlrZWx5IHRoYXQgdGhlIHNpemVzIG1heSBvciBtYXkgbm90IG1hdGNoCndpdGggZGlmZmVyZW50IHR5cGUgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbnMuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoZWNrIHRoaXMgZm9yCl9hbGxfIHBvc3NpYmxlIHR5cGVzLCBzbyBgdHJhbnNtdXRlKClgIHNpbXBseSBvbmx5IGFjY2VwdHMgdHlwZXMgd2l0aG91dCBhbnkKdW5zdWJzdGl0dXRlZCB0eXBlIHBhcmFtZXRlcnMuCgpJZiB5b3UgbmVlZCB0aGlzLCB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgeW91J3JlIGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gS2VlcCBpbgptaW5kIHRoYXQgUnVzdCBkb2Vzbid0IGd1YXJhbnRlZSBtdWNoIGFib3V0IHRoZSBsYXlvdXQgb2YgZGlmZmVyZW50IHN0cnVjdHMKKGV2ZW4gdHdvIHN0cnVjdHMgd2l0aCBpZGVudGljYWwgZGVjbGFyYXRpb25zIG1heSBoYXZlIGRpZmZlcmVudCBsYXlvdXRzKS4gSWYKdGhlcmUgaXMgYSBzb2x1dGlvbiB0aGF0IGF2b2lkcyB0aGUgdHJhbnNtdXRlIGVudGlyZWx5LCB0cnkgaXQgaW5zdGVhZC4KCklmIGl0J3MgcG9zc2libGUsIGhhbmQtbW9ub21vcnBoaXplIHRoZSBjb2RlIGJ5IHdyaXRpbmcgdGhlIGZ1bmN0aW9uIGZvciBlYWNoCnBvc3NpYmxlIHR5cGUgc3Vic3RpdHV0aW9uLiBJdCdzIHBvc3NpYmxlIHRvIHVzZSB0cmFpdHMgdG8gZG8gdGhpcyBjbGVhbmx5LApmb3IgZXhhbXBsZToKCmBgYAp1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKCnN0cnVjdCBGb288VD4oVmVjPFQ+KTsKCnRyYWl0IE15VHJhbnNtdXRhYmxlVHlwZTogU2l6ZWQgewogICAgZm4gdHJhbnNtdXRlKF86IFZlYzxTZWxmPikgLT4gRm9vPFNlbGY+Owp9CgppbXBsIE15VHJhbnNtdXRhYmxlVHlwZSBmb3IgdTggewogICAgZm4gdHJhbnNtdXRlKHg6IFZlYzx1OD4pIC0+IEZvbzx1OD4gewogICAgICAgIHVuc2FmZSB7IHRyYW5zbXV0ZSh4KSB9CiAgICB9Cn0KCmltcGwgTXlUcmFuc211dGFibGVUeXBlIGZvciBTdHJpbmcgewogICAgZm4gdHJhbnNtdXRlKHg6IFZlYzxTdHJpbmc+KSAtPiBGb288U3RyaW5nPiB7CiAgICAgICAgdW5zYWZlIHsgdHJhbnNtdXRlKHgpIH0KICAgIH0KfQoKLy8gLi4uIG1vcmUgaW1wbHMgZm9yIHRoZSB0eXBlcyB5b3UgaW50ZW5kIHRvIHRyYW5zbXV0ZQoKZm4gZm9vPFQ6IE15VHJhbnNtdXRhYmxlVHlwZT4oeDogVmVjPFQ+KSB7CiAgICBsZXQgeTogRm9vPFQ+ID0gPFQgYXMgTXlUcmFuc211dGFibGVUeXBlPjo6dHJhbnNtdXRlKHgpOwogICAgLy8gZG8gc29tZXRoaW5nIHdpdGggeQp9CmBgYAoKRWFjaCBpbXBsIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBzaXplIG1hdGNoIGluIHRoZSB0cmFuc211dGUgYXMgdXN1YWwsIGFuZCBzaW5jZQp0aGVyZSBhcmUgbm8gdW5ib3VuZCB0eXBlIHBhcmFtZXRlcnMgaW52b2x2ZWQsIHRoaXMgc2hvdWxkIGNvbXBpbGUgdW5sZXNzIHRoZXJlCmlzIGEgc2l6ZSBtaXNtYXRjaCBpbiBvbmUgb2YgdGhlIGltcGxzLgoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtYW51YWxseSB0cmFuc211dGU6CgpgYGAKIyB1c2Ugc3RkOjpwdHI7CiMgbGV0IHYgPSBTb21lKCJ2YWx1ZSIpOwojIHR5cGUgU29tZVR5cGUgPSAmJ3N0YXRpYyBbdThdOwp1bnNhZmUgewogICAgcHRyOjpyZWFkKCZ2IGFzICpjb25zdCBfIGFzICpjb25zdCBTb21lVHlwZSkgLy8gYHZgIHRyYW5zbXV0ZWQgdG8gYFNvbWVUeXBlYAp9CiMgOwpgYGAKCk5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG1vdmUgYHZgICh1bmxpa2UgYHRyYW5zbXV0ZWApLCBhbmQgbWF5IG5lZWQgYQpjYWxsIHRvIGBtZW06OmZvcmdldCh2KWAgaW4gY2FzZSB5b3Ugd2FudCB0byBhdm9pZCBkZXN0cnVjdG9ycyBiZWluZyBjYWxsZWQuCkUwMTUyQSBsYW5nIGl0ZW0gd2FzIHJlZGVmaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNTIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJvd25lZF9ib3giXQpzdHJ1Y3QgRm9vPFQ+KFQpOyAvLyBlcnJvcjogZHVwbGljYXRlIGxhbmcgaXRlbSBmb3VuZDogYG93bmVkX2JveGAKYGBgCgpMYW5nIGl0ZW1zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBVbmxlc3MgeW91IGFyZQp3cml0aW5nIGEgZnJlZS1zdGFuZGluZyBhcHBsaWNhdGlvbiAoZS5nLiwgYSBrZXJuZWwpLCB5b3UgZG8gbm90IG5lZWQgdG8gcHJvdmlkZQp0aGVtIHlvdXJzZWxmLgoKWW91IGNhbiBidWlsZCBhIGZyZWUtc3RhbmRpbmcgY3JhdGUgYnkgYWRkaW5nIGAjIVtub19zdGRdYCB0byB0aGUgY3JhdGUKYXR0cmlidXRlczoKCmBgYGlnbm9yZSAob25seS1mb3Itc3ludGF4LWhpZ2hsaWdodCkKIyFbbm9fc3RkXQpgYGAKClNlZSBhbHNvIHRoZSBbdW5zdGFibGUgYm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9sYW5nLWl0ZW1zLmh0bWwjd3JpdGluZy1hbi1leGVjdXRhYmxlLXdpdGhvdXQtc3RkbGliCkUwMTU0IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW1wb3J0cyAoYHVzZWAgc3RhdGVtZW50cykgYXJlIG5vdCBhbGxvd2VkIGFmdGVyIG5vbi1pdGVtIHN0YXRlbWVudHMsIHN1Y2ggYXMKdmFyaWFibGUgZGVjbGFyYXRpb25zIGFuZCBleHByZXNzaW9uIHN0YXRlbWVudHMuCgpIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBkZW1vbnN0cmF0ZXMgdGhlIGVycm9yOgoKYGBgCmZuIGYoKSB7CiAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbiBiZWZvcmUgaW1wb3J0CiAgICBsZXQgeCA9IDA7CiAgICB1c2Ugc3RkOjppbzo6UmVhZDsKICAgIC8vIC4uLgp9CmBgYAoKVGhlIHNvbHV0aW9uIGlzIHRvIGRlY2xhcmUgdGhlIGltcG9ydHMgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2ssIGZ1bmN0aW9uLCBvcgpmaWxlLgoKSGVyZSBpcyB0aGUgcHJldmlvdXMgZXhhbXBsZSBhZ2Fpbiwgd2l0aCB0aGUgY29ycmVjdCBvcmRlcjoKCmBgYApmbiBmKCkgewogICAgdXNlIHN0ZDo6aW86OlJlYWQ7CiAgICBsZXQgeCA9IDA7CiAgICAvLyAuLi4KfQpgYGAKClNlZSB0aGUgW0RlY2xhcmF0aW9uIFN0YXRlbWVudHNdW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdIHNlY3Rpb24gb2YgdGhlCnJlZmVyZW5jZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGNvbnN0aXR1dGVzIGFuIGl0ZW0gZGVjbGFyYXRpb24KYW5kIHdoYXQgZG9lcyBub3QuCgpbZGVjbGFyYXRpb24tc3RhdGVtZW50c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3N0YXRlbWVudHMuaHRtbCNkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzCkUwMTU4QW4gYXNzb2NpYXRlZCBjb25zdCBoYXMgYmVlbiByZWZlcmVuY2VkIGluIGEgcGF0dGVybi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNTgKZW51bSBFRm9vIHsgQSwgQiwgQywgRCB9Cgp0cmFpdCBGb28gewogICAgY29uc3QgWDogRUZvbzsKfQoKZm4gdGVzdDxBOiBGb28+KGFyZzogRUZvbykgewogICAgbWF0Y2ggYXJnIHsKICAgICAgICBBOjpYID0+IHsgLy8gZXJyb3IhCiAgICAgICAgICAgIHByaW50bG4hKCJBOjpYIik7CiAgICAgICAgfQogICAgfQp9CmBgYAoKYGNvbnN0YCBhbmQgYHN0YXRpY2AgbWVhbiBkaWZmZXJlbnQgdGhpbmdzLiBBIGBjb25zdGAgaXMgYSBjb21waWxlLXRpbWUKY29uc3RhbnQsIGFuIGFsaWFzIGZvciBhIGxpdGVyYWwgdmFsdWUuIFRoaXMgcHJvcGVydHkgbWVhbnMgeW91IGNhbiBtYXRjaCBpdApkaXJlY3RseSB3aXRoaW4gYSBwYXR0ZXJuLgoKVGhlIGBzdGF0aWNgIGtleXdvcmQsIG9uIHRoZSBvdGhlciBoYW5kLCBndWFyYW50ZWVzIGEgZml4ZWQgbG9jYXRpb24gaW4gbWVtb3J5LgpUaGlzIGRvZXMgbm90IGFsd2F5cyBtZWFuIHRoYXQgdGhlIHZhbHVlIGlzIGNvbnN0YW50LiBGb3IgZXhhbXBsZSwgYSBnbG9iYWwKbXV0ZXggY2FuIGJlIGRlY2xhcmVkIGBzdGF0aWNgIGFzIHdlbGwuCgpJZiB5b3Ugd2FudCB0byBtYXRjaCBhZ2FpbnN0IGEgYHN0YXRpY2AsIGNvbnNpZGVyIHVzaW5nIGEgZ3VhcmQgaW5zdGVhZDoKCmBgYApzdGF0aWMgRk9SVFlfVFdPOiBpMzIgPSA0MjsKCm1hdGNoIFNvbWUoNDIpIHsKICAgIFNvbWUoeCkgaWYgeCA9PSBGT1JUWV9UV08gPT4ge30KICAgIF8gPT4ge30KfQpgYGAKRTAxNjFBIHZhbHVlIHdhcyBtb3ZlZCB3aG9zZSBzaXplIHdhcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE2MQojIVtmZWF0dXJlKGJveF9zeW50YXgpXQp0cmFpdCBCYXIgewogICAgZm4gZihzZWxmKTsKfQoKaW1wbCBCYXIgZm9yIGkzMiB7CiAgICBmbiBmKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgYjogQm94PGR5biBCYXI+ID0gYm94ICgwIGFzIGkzMik7CiAgICBiLmYoKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgbW92ZSBhIHZhbHVlIG9mIHR5cGUgZHluIEJhcjogdGhlIHNpemUgb2YgZHluIEJhciBjYW5ub3QKICAgIC8vICAgICAgICBiZSBzdGF0aWNhbGx5IGRldGVybWluZWQKfQpgYGAKCkluIFJ1c3QsIHlvdSBjYW4gb25seSBtb3ZlIGEgdmFsdWUgd2hlbiBpdHMgc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCgpUbyB3b3JrIGFyb3VuZCB0aGlzIHJlc3RyaWN0aW9uLCBjb25zaWRlciAiaGlkaW5nIiB0aGUgdmFsdWUgYmVoaW5kIGEgcmVmZXJlbmNlOgplaXRoZXIgYCZ4YCBvciBgJm11dCB4YC4gU2luY2UgYSByZWZlcmVuY2UgaGFzIGEgZml4ZWQgc2l6ZSwgdGhpcyBsZXRzIHlvdSBtb3ZlCml0IGFyb3VuZCBhcyB1c3VhbC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGJveF9zeW50YXgpXQoKdHJhaXQgQmFyIHsKICAgIGZuIGYoJnNlbGYpOwp9CgppbXBsIEJhciBmb3IgaTMyIHsKICAgIGZuIGYoJnNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgYjogQm94PGR5biBCYXI+ID0gYm94ICgwIGFzIGkzMik7CiAgICBiLmYoKTsKICAgIC8vIG9rIQp9CmBgYApFMDE2MiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGBpZiBsZXRgIHBhdHRlcm4gYXR0ZW1wdHMgdG8gbWF0Y2ggdGhlIHBhdHRlcm4sIGFuZCBlbnRlcnMgdGhlIGJvZHkgaWYgdGhlCm1hdGNoIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUgKHdoZW4gaXQgY2Fubm90IGZhaWwgdG8KbWF0Y2gpLCB1c2UgYSByZWd1bGFyIGBsZXRgLWJpbmRpbmcgaW5zdGVhZC4gRm9yIGluc3RhbmNlOgoKYGBgCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7CgovLyBUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUuCmlmIGxldCBJcnJlZnV0YWJsZSh4KSA9IGlyciB7CiAgICAvLyBUaGlzIGJvZHkgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQuCiAgICAvLyAuLi4KfQpgYGAKClRyeSB0aGlzIGluc3RlYWQ6CgpgYGAKc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCmxldCBJcnJlZnV0YWJsZSh4KSA9IGlycjsKcHJpbnRsbiEoInt9IiwgeCk7CmBgYApFMDE2NFNvbWV0aGluZyB3aGljaCBpcyBuZWl0aGVyIGEgdHVwbGUgc3RydWN0IG5vciBhIHR1cGxlIHZhcmlhbnQgd2FzIHVzZWQgYXMgYQpwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE2NAplbnVtIEEgewogICAgQiwKICAgIEMsCn0KCmltcGwgQSB7CiAgICBmbiBuZXcoKSB7fQp9CgpmbiBiYXIoZm9vOiBBKSB7CiAgICBtYXRjaCBmb28gewogICAgICAgIEE6Om5ldygpID0+ICgpLCAvLyBlcnJvciEKICAgICAgICBfID0+IHt9CiAgICB9Cn0KYGBgCgpUaGlzIGVycm9yIG1lYW5zIHRoYXQgYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtYXRjaCBzb21ldGhpbmcgd2hpY2ggaXMgbmVpdGhlciBhCnR1cGxlIHN0cnVjdCBub3IgYSB0dXBsZSB2YXJpYW50LiBPbmx5IHRoZXNlIHR3byBlbGVtZW50cyBhcmUgYWxsb3dlZCBhcyBhCnBhdHRlcm46CgpgYGAKZW51bSBBIHsKICAgIEIsCiAgICBDLAp9CgppbXBsIEEgewogICAgZm4gbmV3KCkge30KfQoKZm4gYmFyKGZvbzogQSkgewogICAgbWF0Y2ggZm9vIHsKICAgICAgICBBOjpCID0+ICgpLCAvLyBvayEKICAgICAgICBfID0+IHt9CiAgICB9Cn0KYGBgCkUwMTY1IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBgd2hpbGUgbGV0YCBwYXR0ZXJuIGF0dGVtcHRzIHRvIG1hdGNoIHRoZSBwYXR0ZXJuLCBhbmQgZW50ZXJzIHRoZSBib2R5IGlmIHRoZQptYXRjaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlICh3aGVuIGl0IGNhbm5vdCBmYWlsIHRvCm1hdGNoKSwgdXNlIGEgcmVndWxhciBgbGV0YC1iaW5kaW5nIGluc2lkZSBhIGBsb29wYCBpbnN0ZWFkLiBGb3IgaW5zdGFuY2U6CgpgYGBub19ydW4Kc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCi8vIFRoaXMgZmFpbHMgdG8gY29tcGlsZSBiZWNhdXNlIHRoZSBtYXRjaCBpcyBpcnJlZnV0YWJsZS4Kd2hpbGUgbGV0IElycmVmdXRhYmxlKHgpID0gaXJyIHsKICAgIC8vIC4uLgp9CmBgYAoKVHJ5IHRoaXMgaW5zdGVhZDoKCmBgYG5vX3J1bgpzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKbG9vcCB7CiAgICBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnI7CiAgICAvLyAuLi4KfQpgYGAKRTAxNzBBIHBhdHRlcm4gYmluZGluZyBpcyB1c2luZyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiB0aGUgdmFyaWFudHMgb2YgYSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE3MAojICMhW2Rlbnkod2FybmluZ3MpXQplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CgpmbiBpc19lbXB0eShzOiBNZXRob2QpIC0+IGJvb2wgewogICAgbWF0Y2ggcyB7CiAgICAgICAgR0VUID0+IHRydWUsCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpFbnVtIHZhcmlhbnRzIGFyZSBxdWFsaWZpZWQgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGdpdmVuIHRoaXMgdHlwZToKCmBgYAplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CmBgYAoKWW91IHdvdWxkIG1hdGNoIGl0IHVzaW5nOgoKYGBgCmVudW0gTWV0aG9kIHsKICAgIEdFVCwKICAgIFBPU1QsCn0KCmxldCBtID0gTWV0aG9kOjpHRVQ7CgptYXRjaCBtIHsKICAgIE1ldGhvZDo6R0VUID0+IHt9LAogICAgTWV0aG9kOjpQT1NUID0+IHt9LAp9CmBgYAoKSWYgeW91IGRvbid0IHF1YWxpZnkgdGhlIG5hbWVzLCB0aGUgY29kZSB3aWxsIGJpbmQgbmV3IHZhcmlhYmxlcyBuYW1lZCAiR0VUIiBhbmQKIlBPU1QiIGluc3RlYWQuIFRoaXMgYmVoYXZpb3IgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSB3YW50LCBzbyBgcnVzdGNgIHdhcm5zIHdoZW4KdGhhdCBoYXBwZW5zLgoKUXVhbGlmaWVkIG5hbWVzIGFyZSBnb29kIHByYWN0aWNlLCBhbmQgbW9zdCBjb2RlIHdvcmtzIHdlbGwgd2l0aCB0aGVtLiBCdXQgaWYKeW91IHByZWZlciB0aGVtIHVucXVhbGlmaWVkLCB5b3UgY2FuIGltcG9ydCB0aGUgdmFyaWFudHMgaW50byBzY29wZToKCmBgYAp1c2UgTWV0aG9kOjoqOwplbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYAoKSWYgeW91IHdhbnQgb3RoZXJzIHRvIGJlIGFibGUgdG8gaW1wb3J0IHZhcmlhbnRzIGZyb20geW91ciBtb2R1bGUgZGlyZWN0bHksIHVzZQpgcHViIHVzZWA6CgpgYGAKcHViIHVzZSBNZXRob2Q6Oio7CnB1YiBlbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYApFMDE3OFRoZSBgK2AgdHlwZSBvcGVyYXRvciB3YXMgdXNlZCBpbiBhbiBhbWJpZ3VvdXMgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNzgKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPCdhPiB7CiAgICB4OiAmJ2EgRm9vICsgJ2EsICAgICAvLyBlcnJvciEKICAgIHk6ICYnYSBtdXQgRm9vICsgJ2EsIC8vIGVycm9yIQogICAgejogZm4oKSAtPiBGb28gKyAnYSwgLy8gZXJyb3IhCn0KYGBgCgpJbiB0eXBlcywgdGhlIGArYCB0eXBlIG9wZXJhdG9yIGhhcyBsb3cgcHJlY2VkZW5jZSwgc28gaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5CnRvIHVzZSBwYXJlbnRoZXNlczoKCmBgYAp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8J2E+IHsKICAgIHg6ICYnYSAoRm9vICsgJ2EpLCAgICAgLy8gb2shCiAgICB5OiAmJ2EgbXV0IChGb28gKyAnYSksIC8vIG9rIQogICAgejogZm4oKSAtPiAoRm9vICsgJ2EpLCAvLyBvayEKfQpgYGAKCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gW1JGQyA0MzhdLgoKW1JGQyA0MzhdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC80MzgKRTAxODNNYW51YWwgaW1wbGVtZXRhdGlvbiBvZiBhIGBGbipgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4MwpzdHJ1Y3QgTXlDbG9zdXJlIHsKICAgIGZvbzogaTMyCn0KCmltcGwgRm5PbmNlPCgpPiBmb3IgTXlDbG9zdXJlIHsgIC8vIGVycm9yCiAgICB0eXBlIE91dHB1dCA9ICgpOwogICAgZXh0ZXJuICJydXN0LWNhbGwiIGZuIGNhbGxfb25jZShzZWxmLCBhcmdzOiAoKSkgLT4gU2VsZjo6T3V0cHV0IHsKICAgICAgICBwcmludGxuISgie30iLCBzZWxmLmZvbyk7CiAgICB9Cn0KYGBgCgpNYW51YWxseSBpbXBsZW1lbnRpbmcgYEZuYCwgYEZuTXV0YCBvciBgRm5PbmNlYCBpcyB1bnN0YWJsZQphbmQgcmVxdWlyZXMgYCMhW2ZlYXR1cmUoZm5fdHJhaXRzLCB1bmJveGVkX2Nsb3N1cmVzKV1gLgoKYGBgCiMhW2ZlYXR1cmUoZm5fdHJhaXRzLCB1bmJveGVkX2Nsb3N1cmVzKV0KCnN0cnVjdCBNeUNsb3N1cmUgewogICAgZm9vOiBpMzIKfQoKaW1wbCBGbk9uY2U8KCk+IGZvciBNeUNsb3N1cmUgeyAgLy8gb2shCiAgICB0eXBlIE91dHB1dCA9ICgpOwogICAgZXh0ZXJuICJydXN0LWNhbGwiIGZuIGNhbGxfb25jZShzZWxmLCBhcmdzOiAoKSkgLT4gU2VsZjo6T3V0cHV0IHsKICAgICAgICBwcmludGxuISgie30iLCBzZWxmLmZvbyk7CiAgICB9Cn0KYGBgCgpUaGUgYXJndW1lbWVudHMgbXVzdCBiZSBhIHR1cGxlIHJlcHJlc2VudGluZyB0aGUgYXJndW1lbnQgbGlzdC4KRm9yIG1vcmUgaW5mbywgc2VlIHRoZSBbdHJhY2tpbmcgaXNzdWVdW2lzczI5NjI1XToKCltpc3MyOTYyNV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMjk2MjUKRTAxODRUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2l0aCBhIGBEcm9wYCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODQKI1tkZXJpdmUoQ29weSldCnN0cnVjdCBGb287IC8vIGVycm9yIQoKaW1wbCBEcm9wIGZvciBGb28gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgIH0KfQpgYGAKCkV4cGxpY2l0bHkgaW1wbGVtZW50aW5nIGJvdGggYERyb3BgIGFuZCBgQ29weWAgdHJhaXQgb24gYSB0eXBlIGlzIGN1cnJlbnRseQpkaXNhbGxvd2VkLiBUaGlzIGZlYXR1cmUgY2FuIG1ha2Ugc29tZSBzZW5zZSBpbiB0aGVvcnksIGJ1dCB0aGUgY3VycmVudAppbXBsZW1lbnRhdGlvbiBpcyBpbmNvcnJlY3QgYW5kIGNhbiBsZWFkIHRvIG1lbW9yeSB1bnNhZmV0eSAoc2VlCltpc3N1ZSAjMjAxMjZdW2lzczIwMTI2XSksIHNvIGl0IGhhcyBiZWVuIGRpc2FibGVkIGZvciBub3cuCgpbaXNzMjAxMjZdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzIwMTI2CkUwMTg1QW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBzdGF0aWMsIGJ1dCBhbgppbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhaXQgZGVjbGFyZWQgdGhlIHNhbWUgZnVuY3Rpb24gdG8gYmUgYSBtZXRob2QgKGkuZS4sIHRvCnRha2UgYSBgc2VsZmAgcGFyYW1ldGVyKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODUKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICAvLyBlcnJvciwgbWV0aG9kIGBmb29gIGhhcyBhIGAmc2VsZmAgZGVjbGFyYXRpb24gaW4gdGhlIGltcGwsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSB0cmFpdAogICAgZm4gZm9vKCZzZWxmKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCBkb2VzIG5vdCB0YWtlIGFueSBhcmd1bWVudCBhbmQKZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLCBpdHMgaW1wbGVtZW50YXRpb24gb24gYEJhcmAgc2hvdWxkIGJlIHRoZSBzYW1lOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCkUwMTg2QW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8gdGFrZSBhCmBzZWxmYCBwYXJhbWV0ZXIpLCBidXQgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYWl0IGRlY2xhcmVkIHRoZSBzYW1lIGZ1bmN0aW9uCnRvIGJlIHN0YXRpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgdHJhaXQsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSBpbXBsCiAgICBmbiBmb28oKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCB0YWtlcyBgc2VsZmAgYXMgYXJndW1lbnQgYW5kCmRvZXMgbm90IHJldHVybiBhbnl0aGluZywgaXRzIGltcGxlbWVudGF0aW9uIG9uIGBCYXJgIHNob3VsZCBiZSB0aGUgc2FtZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSB7fSAvLyBvayEKfQpgYGAKRTAxOTFBbiBhc3NvY2lhdGVkIHR5cGUgd2Fzbid0IHNwZWNpZmllZCBmb3IgYSB0cmFpdCBvYmplY3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTkxCnRyYWl0IFRyYWl0IHsKICAgIHR5cGUgQmFyOwp9Cgp0eXBlIEZvbyA9IFRyYWl0OyAvLyBlcnJvcjogdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIHR5cGUgYEJhcmAgKGZyb20KICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoZSB0cmFpdCBgVHJhaXRgKSBtdXN0IGJlIHNwZWNpZmllZApgYGAKClRyYWl0IG9iamVjdHMgbmVlZCB0byBoYXZlIGFsbCBhc3NvY2lhdGVkIHR5cGVzIHNwZWNpZmllZC4gUGxlYXNlIHZlcmlmeSB0aGF0CmFsbCBhc3NvY2lhdGVkIHR5cGVzIG9mIHRoZSB0cmFpdCB3ZXJlIHNwZWNpZmllZCBhbmQgdGhlIGNvcnJlY3QgdHJhaXQgd2FzIHVzZWQuCkV4YW1wbGU6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVHJhaXQ8QmFyPWkzMj47IC8vIG9rIQpgYGAKRTAxOTMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpgd2hlcmVgIGNsYXVzZXMgbXVzdCB1c2UgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnM6IGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gdXNlCnRoZW0gb3RoZXJ3aXNlLiBBbiBleGFtcGxlIGNhdXNpbmcgdGhpcyBlcnJvcjoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKI1tkZXJpdmUoQ29weSxDbG9uZSldCnN0cnVjdCBXcmFwcGVyPFQ+IHsKICAgIFdyYXBwZWQ6IFQKfQoKaW1wbCBGb28gZm9yIFdyYXBwZXI8dTMyPiB3aGVyZSBXcmFwcGVyPHUzMj46IENsb25lIHsKICAgIGZuIGJhcigmc2VsZikgeyB9Cn0KYGBgCgpUaGlzIHVzZSBvZiBhIGB3aGVyZWAgY2xhdXNlIGlzIHN0cmFuZ2UgLSBhIG1vcmUgY29tbW9uIHVzYWdlIHdvdWxkIGxvb2sKc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKI1tkZXJpdmUoQ29weSxDbG9uZSldCnN0cnVjdCBXcmFwcGVyPFQ+IHsKICAgIFdyYXBwZWQ6IFQKfQppbXBsIDxUPiBGb28gZm9yIFdyYXBwZXI8VD4gd2hlcmUgV3JhcHBlcjxUPjogQ2xvbmUgewogICAgZm4gYmFyKCZzZWxmKSB7IH0KfQpgYGAKCkhlcmUsIHdlJ3JlIHNheWluZyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBleGlzdHMgb24gV3JhcHBlciBvbmx5IHdoZW4gdGhlCndyYXBwZWQgdHlwZSBgVGAgaW1wbGVtZW50cyBgQ2xvbmVgLiBUaGUgYHdoZXJlYCBjbGF1c2UgaXMgaW1wb3J0YW50IGJlY2F1c2UKc29tZSB0eXBlcyB3aWxsIG5vdCBpbXBsZW1lbnQgYENsb25lYCwgYW5kIHRodXMgd2lsbCBub3QgZ2V0IHRoaXMgbWV0aG9kLgoKSW4gb3VyIGVycm9uZW91cyBleGFtcGxlLCBob3dldmVyLCB3ZSdyZSByZWZlcmVuY2luZyBhIHNpbmdsZSBjb25jcmV0ZSB0eXBlLgpTaW5jZSB3ZSBrbm93IGZvciBjZXJ0YWluIHRoYXQgYFdyYXBwZXI8dTMyPmAgaW1wbGVtZW50cyBgQ2xvbmVgLCB0aGVyZSdzIG5vCnJlYXNvbiB0byBhbHNvIHNwZWNpZnkgaXQgaW4gYSBgd2hlcmVgIGNsYXVzZS4KRTAxOTVUaGUgbGlmZXRpbWUgcGFyYW1ldGVycyBvZiB0aGUgbWV0aG9kIGRvIG5vdCBtYXRjaCB0aGUgdHJhaXQgZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk1CnRyYWl0IFRyYWl0IHsKICAgIGZuIGJhcjwnYSwnYjonYT4oeDogJidhIHN0ciwgeTogJidiIHN0cik7Cn0KCnN0cnVjdCBGb287CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gYmFyPCdhLCdiPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKSB7CiAgICAvLyBlcnJvcjogbGlmZXRpbWUgcGFyYW1ldGVycyBvciBib3VuZHMgb24gbWV0aG9kIGBiYXJgCiAgICAvLyBkbyBub3QgbWF0Y2ggdGhlIHRyYWl0IGRlY2xhcmF0aW9uCiAgICB9Cn0KYGBgCgpUaGUgbGlmZXRpbWUgY29uc3RyYWludCBgJ2JgIGZvciBgYmFyKClgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IG1hdGNoIHRoZQp0cmFpdCBkZWNsYXJhdGlvbi4gRW5zdXJlIGxpZmV0aW1lIGRlY2xhcmF0aW9ucyBtYXRjaCBleGFjdGx5IGluIGJvdGggdHJhaXQKZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uLiBFeGFtcGxlOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpOwp9CgpzdHJ1Y3QgRm9vOwoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpIHsgLy8gb2shCiAgICB9Cn0KYGBgCkUwMTk3QW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gd2FzIG1hcmtlZCB1bnNhZmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk3CnN0cnVjdCBGb287Cgp1bnNhZmUgaW1wbCBGb28geyB9IC8vIGVycm9yIQpgYGAKCkluaGVyZW50IGltcGxlbWVudGF0aW9ucyAob25lIHRoYXQgZG8gbm90IGltcGxlbWVudCBhIHRyYWl0IGJ1dCBwcm92aWRlCm1ldGhvZHMgYXNzb2NpYXRlZCB3aXRoIGEgdHlwZSkgYXJlIGFsd2F5cyBzYWZlIGJlY2F1c2UgdGhleSBhcmUgbm90CmltcGxlbWVudGluZyBhbiB1bnNhZmUgdHJhaXQuIFJlbW92aW5nIHRoZSBgdW5zYWZlYCBrZXl3b3JkIGZyb20gdGhlIGluaGVyZW50CmltcGxlbWVudGF0aW9uIHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7IH0gLy8gb2shCmBgYApFMDE5OEEgbmVnYXRpdmUgaW1wbGVtZW50YXRpb24gd2FzIG1hcmtlZCBhcyB1bnNhZmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk4CnN0cnVjdCBGb287Cgp1bnNhZmUgaW1wbCAhQ2xvbmUgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCmBgYAoKQSBuZWdhdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyBvbmUgdGhhdCBleGNsdWRlcyBhIHR5cGUgZnJvbSBpbXBsZW1lbnRpbmcgYQpwYXJ0aWN1bGFyIHRyYWl0LiBOb3QgYmVpbmcgYWJsZSB0byB1c2UgYSB0cmFpdCBpcyBhbHdheXMgYSBzYWZlIG9wZXJhdGlvbiwKc28gbmVnYXRpdmUgaW1wbGVtZW50YXRpb25zIGFyZSBhbHdheXMgc2FmZSBhbmQgbmV2ZXIgbmVlZCB0byBiZSBtYXJrZWQgYXMKdW5zYWZlLgoKVGhpcyB3aWxsIGNvbXBpbGU6CgpgYGBpZ25vcmUgKGlnbm9yZSBhdXRvX3RyYWl0IGZ1dHVyZSBjb21wYXRpYmlsaXR5IHdhcm5pbmcpCiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKc3RydWN0IEZvbzsKCmF1dG8gdHJhaXQgRW50ZXJwcmlzZSB7fQoKaW1wbCAhRW50ZXJwcmlzZSBmb3IgRm9vIHsgfQpgYGAKClBsZWFzZSBub3RlIHRoYXQgbmVnYXRpdmUgaW1wbHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgYXV0byB0cmFpdHMuCkUwMTk5QSB0cmFpdCBpbXBsZW1lbnRhdGlvbiB3YXMgbWFya2VkIGFzIHVuc2FmZSB3aGlsZSB0aGUgdHJhaXQgaXMgc2FmZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxOTkKc3RydWN0IEZvbzsKCnRyYWl0IEJhciB7IH0KCnVuc2FmZSBpbXBsIEJhciBmb3IgRm9vIHsgfSAvLyBlcnJvciEKYGBgCgpTYWZlIHRyYWl0cyBzaG91bGQgbm90IGhhdmUgdW5zYWZlIGltcGxlbWVudGF0aW9ucywgdGhlcmVmb3JlIG1hcmtpbmcgYW4KaW1wbGVtZW50YXRpb24gZm9yIGEgc2FmZSB0cmFpdCB1bnNhZmUgd2lsbCBjYXVzZSBhIGNvbXBpbGVyIGVycm9yLiBSZW1vdmluZwp0aGUgdW5zYWZlIG1hcmtlciBvbiB0aGUgdHJhaXQgbm90ZWQgaW4gdGhlIGVycm9yIHdpbGwgcmVzb2x2ZSB0aGlzIHByb2JsZW06CgpgYGAKc3RydWN0IEZvbzsKCnRyYWl0IEJhciB7IH0KCmltcGwgQmFyIGZvciBGb28geyB9IC8vIG9rIQpgYGAKRTAyMDBBbiB1bnNhZmUgdHJhaXQgd2FzIGltcGxlbWVudGVkIHdpdGhvdXQgYW4gdW5zYWZlIGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMApzdHJ1Y3QgRm9vOwoKdW5zYWZlIHRyYWl0IEJhciB7IH0KCmltcGwgQmFyIGZvciBGb28geyB9IC8vIGVycm9yIQpgYGAKClVuc2FmZSB0cmFpdHMgbXVzdCBoYXZlIHVuc2FmZSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4KaW1wbGVtZW50YXRpb24gZm9yIGFuIHVuc2FmZSB0cmFpdCBpc24ndCBtYXJrZWQgYXMgdW5zYWZlLiBUaGlzIG1heSBiZSByZXNvbHZlZApieSBtYXJraW5nIHRoZSB1bnNhZmUgaW1wbGVtZW50YXRpb24gYXMgdW5zYWZlLgoKYGBgCnN0cnVjdCBGb287Cgp1bnNhZmUgdHJhaXQgQmFyIHsgfQoKdW5zYWZlIGltcGwgQmFyIGZvciBGb28geyB9IC8vIG9rIQpgYGAKRTAyMDFUd28gYXNzb2NpYXRlZCBpdGVtcyAobGlrZSBtZXRob2RzLCBhc3NvY2lhdGVkIHR5cGVzLCBhc3NvY2lhdGVkIGZ1bmN0aW9ucywKZXRjLikgd2VyZSBkZWZpbmVkIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDEKc3RydWN0IEZvbyh1OCk7CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgPiA1IH0KICAgIGZuIGJhcigpIHt9IC8vIGVycm9yOiBkdXBsaWNhdGUgYXNzb2NpYXRlZCBmdW5jdGlvbgp9Cgp0cmFpdCBCYXogewogICAgdHlwZSBRdXV4OwogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sOwp9CgppbXBsIEJheiBmb3IgRm9vIHsKICAgIHR5cGUgUXV1eCA9IHUzMjsKCiAgICBmbiBiYXooJnNlbGYpIC0+IGJvb2wgeyB0cnVlIH0KCiAgICAvLyBlcnJvcjogZHVwbGljYXRlIG1ldGhvZAogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sIHsgc2VsZi4wID4gNSB9CgogICAgLy8gZXJyb3I6IGR1cGxpY2F0ZSBhc3NvY2lhdGVkIHR5cGUKICAgIHR5cGUgUXV1eCA9IHUzMjsKfQpgYGAKCk5vdGUsIGhvd2V2ZXIsIHRoYXQgaXRlbXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBhbGxvd2VkIGZvciBpbmhlcmVudCBgaW1wbGAKYmxvY2tzIHRoYXQgZG9uJ3Qgb3ZlcmxhcDoKCmBgYApzdHJ1Y3QgRm9vPFQ+KFQpOwoKaW1wbCBGb288dTg+IHsKICAgIGZuIGJhcigmc2VsZikgLT4gYm9vbCB7IHNlbGYuMCA+IDUgfQp9CgppbXBsIEZvbzxib29sPiB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgfQp9CmBgYApFMDIwM0hhdmluZyBtdWx0aXBsZSByZWxheGVkIGRlZmF1bHQgYm91bmRzIGlzIHVuc3VwcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMwpzdHJ1Y3QgQmFkPFQ6ID9TaXplZCArID9TZW5kPnsKICAgIGlubmVyOiBUCn0KYGBgCgpIZXJlIHRoZSB0eXBlIGBUYCBjYW5ub3QgaGF2ZSBhIHJlbGF4ZWQgYm91bmQgZm9yIG11bHRpcGxlIGRlZmF1bHQgdHJhaXRzCihgU2l6ZWRgIGFuZCBgU2VuZGApLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBvbmx5IHVzaW5nIG9uZSByZWxheGVkIGJvdW5kLgoKYGBgCnN0cnVjdCBHb29kPFQ6ID9TaXplZD57CiAgICBpbm5lcjogVAp9CmBgYApFMDIwNFRoZSBgQ29weWAgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGEgdHlwZSB3aGljaCBjb250YWlucyBhIGZpZWxkIHRoYXQgZG9lc24ndAppbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKc3RydWN0IEZvbyB7CiAgICBmb286IFZlYzx1MzI+LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCmBgYAoKVGhlIGBDb3B5YCB0cmFpdCBpcyBpbXBsZW1lbnRlZCBieSBkZWZhdWx0IG9ubHkgb24gcHJpbWl0aXZlIHR5cGVzLiBJZiB5b3VyCnR5cGUgb25seSBjb250YWlucyBwcmltaXRpdmUgdHlwZXMsIHlvdSdsbCBiZSBhYmxlIHRvIGltcGxlbWVudCBgQ29weWAgb24gaXQuCk90aGVyd2lzZSwgaXQgd29uJ3QgYmUgcG9zc2libGUuCgpIZXJlJ3MgYW5vdGhlciBleGFtcGxlIHRoYXQgd2lsbCBmYWlsOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CiNbZGVyaXZlKENvcHkpXSAvLyBlcnJvciEKc3RydWN0IEZvbzwnYT4gewogICAgdHk6ICYnYSBtdXQgYm9vbCwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KRTAyMDUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IGZvciBhbiBlbnVtIGZhaWxlZCBiZWNhdXNlIG9uZSBvZiB0aGUKdmFyaWFudHMgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YC4gVG8gZml4IHRoaXMsIHlvdSBtdXN0IGltcGxlbWVudCBgQ29weWAgZm9yCnRoZSBtZW50aW9uZWQgdmFyaWFudC4gTm90ZSB0aGF0IHRoaXMgbWF5IG5vdCBiZSBwb3NzaWJsZSwgYXMgaW4gdGhlIGV4YW1wbGUgb2YKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNAplbnVtIEZvbyB7CiAgICBCYXIoVmVjPHUzMj4pLAogICAgQmF6LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYFZlYzxUPmAgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YCBmb3IgYW55IGBUYC4KCkhlcmUncyBhbm90aGVyIGV4YW1wbGUgdGhhdCB3aWxsIGZhaWw6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKI1tkZXJpdmUoQ29weSldCmVudW0gRm9vPCdhPiB7CiAgICBCYXIoJidhIG11dCBib29sKSwKICAgIEJheiwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KRTAyMDZUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2hpY2ggaXMgbmVpdGhlciBhIHN0cnVjdCBub3IgYW4KZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDYKI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQpzdHJ1Y3QgQmFyOwoKaW1wbCBDb3B5IGZvciAmJ3N0YXRpYyBtdXQgQmFyIHsgfSAvLyBlcnJvciEKYGBgCgpZb3UgY2FuIG9ubHkgaW1wbGVtZW50IGBDb3B5YCBmb3IgYSBzdHJ1Y3Qgb3IgYW4gZW51bS4KVGhlIHByZXZpb3VzIGV4YW1wbGUgd2lsbCBmYWlsIGJlY2F1c2UgYCYnc3RhdGljIG11dCBCYXJgCmlzIG5vdCBhIHN0cnVjdCBvciBlbnVtLgpFMDIwN0EgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgZm9yIGBpbXBsYCBpcyBub3QgY29uc3RyYWluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA3CnN0cnVjdCBGb287CgppbXBsPFQ6IERlZmF1bHQ+IEZvbyB7CiAgICAvLyBlcnJvcjogdGhlIHR5cGUgcGFyYW1ldGVyIGBUYCBpcyBub3QgY29uc3RyYWluZWQgYnkgdGhlIGltcGwgdHJhaXQsIHNlbGYKICAgIC8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgZm4gZ2V0KCZzZWxmKSAtPiBUIHsKICAgICAgICA8VCBhcyBEZWZhdWx0Pjo6ZGVmYXVsdCgpCiAgICB9Cn0KYGBgCgpBbnkgdHlwZSBwYXJhbWV0ZXIgb2YgYW4gYGltcGxgIG11c3QgbWVldCBhdCBsZWFzdCBvbmUgb2YKdGhlIGZvbGxvd2luZyBjcml0ZXJpYToKCiAtIGl0IGFwcGVhcnMgaW4gdGhlIF9pbXBsZW1lbnRpbmcgdHlwZV8gb2YgdGhlIGltcGwsIGUuZy4gYGltcGw8VD4gRm9vPFQ+YAogLSBmb3IgYSB0cmFpdCBpbXBsLCBpdCBhcHBlYXJzIGluIHRoZSBfaW1wbGVtZW50ZWQgdHJhaXRfLCBlLmcuCiAgIGBpbXBsPFQ+IFNvbWVUcmFpdDxUPiBmb3IgRm9vYAogLSBpdCBpcyBib3VuZCBhcyBhbiBhc3NvY2lhdGVkIHR5cGUsIGUuZy4gYGltcGw8VCwgVT4gU29tZVRyYWl0IGZvciBUCiAgIHdoZXJlIFQ6IEFub3RoZXJUcmFpdDxBc3NvY1R5cGU9VT5gCgojIyMgRXJyb3IgZXhhbXBsZSAxCgpTdXBwb3NlIHdlIGhhdmUgYSBzdHJ1Y3QgYEZvb2AgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGVmaW5lIHNvbWUgbWV0aG9kcyBmb3IgaXQuClRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUgaGFzIGEgZGVmaW5pdGlvbiB3aGljaCBsZWFkcyB0byBhIGNvbXBpbGVyIGVycm9yOgoKVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgcGFyYW1ldGVyIGBUYCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGltcGxlbWVudGluZyB0eXBlCihgRm9vYCkgb2YgdGhlIGltcGwuIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgZXJyb3IgYnkgbW92aW5nIHRoZSB0eXBlCnBhcmFtZXRlciBmcm9tIHRoZSBgaW1wbGAgdG8gdGhlIG1ldGhvZCBgZ2V0YDoKCgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIHR5cGUgcGFyYW1ldGVyIGZyb20gdGhlIGltcGwgdG8gdGhlIG1ldGhvZAppbXBsIEZvbyB7CiAgICBmbiBnZXQ8VDogRGVmYXVsdD4oJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDIKCkFzIGFub3RoZXIgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIGEgYE1ha2VyYCB0cmFpdCBhbmQgd2FudCB0byBlc3RhYmxpc2ggYQp0eXBlIGBGb29NYWtlcmAgdGhhdCBtYWtlcyBgRm9vYHM6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKdHJhaXQgTWFrZXIgewogICAgdHlwZSBJdGVtOwogICAgZm4gbWFrZSgmbXV0IHNlbGYpIC0+IFNlbGY6Okl0ZW07Cn0KCnN0cnVjdCBGb288VD4gewogICAgZm9vOiBUCn0KCnN0cnVjdCBGb29NYWtlcjsKCmltcGw8VDogRGVmYXVsdD4gTWFrZXIgZm9yIEZvb01ha2VyIHsKLy8gZXJyb3I6IHRoZSB0eXBlIHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCi8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgpUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSB0cmFpdCBvciBpbiB0aGUKaW1wbGVtZW50aW5nIHR5cGUuCgpPbmUgd2F5IHRvIHdvcmsgYXJvdW5kIHRoaXMgaXMgdG8gaW50cm9kdWNlIGEgcGhhbnRvbSB0eXBlIHBhcmFtZXRlciBpbnRvCmBGb29NYWtlcmAsIGxpa2Ugc286CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCnRyYWl0IE1ha2VyIHsKICAgIHR5cGUgSXRlbTsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBTZWxmOjpJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgovLyBBZGQgYSB0eXBlIHBhcmFtZXRlciB0byBgRm9vTWFrZXJgCnN0cnVjdCBGb29NYWtlcjxUPiB7CiAgICBwaGFudG9tOiBQaGFudG9tRGF0YTxUPiwKfQoKaW1wbDxUOiBEZWZhdWx0PiBNYWtlciBmb3IgRm9vTWFrZXI8VD4gewogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7CiAgICAgICAgICAgIGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpBbm90aGVyIHdheSBpcyB0byBkbyBhd2F5IHdpdGggdGhlIGFzc29jaWF0ZWQgdHlwZSBpbiBgTWFrZXJgIGFuZCB1c2UgYW4gaW5wdXQKdHlwZSBwYXJhbWV0ZXIgaW5zdGVhZDoKCmBgYAovLyBVc2UgYSB0eXBlIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0ZWQgdHlwZSBoZXJlCnRyYWl0IE1ha2VyPEl0ZW0+IHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgpzdHJ1Y3QgRm9vTWFrZXI7CgppbXBsPFQ6IERlZmF1bHQ+IE1ha2VyPEZvbzxUPj4gZm9yIEZvb01ha2VyIHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgojIyMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbgoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgW1JGQyA0NDddLgoKW1JGQyA0NDddOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDQ3LW5vLXVudXNlZC1pbXBsLXBhcmFtZXRlcnMubWQKRTAyMTBUaGlzIGVycm9yIGluZGljYXRlcyBhIHZpb2xhdGlvbiBvZiBvbmUgb2YgUnVzdCdzIG9ycGhhbiBydWxlcyBmb3IgdHJhaXQKaW1wbGVtZW50YXRpb25zLiBUaGUgcnVsZSBjb25jZXJucyB0aGUgdXNlIG9mIHR5cGUgcGFyYW1ldGVycyBpbiBhbgppbXBsZW1lbnRhdGlvbiBvZiBhIGZvcmVpZ24gdHJhaXQgKGEgdHJhaXQgZGVmaW5lZCBpbiBhbm90aGVyIGNyYXRlKSwgYW5kCnN0YXRlcyB0aGF0IHR5cGUgcGFyYW1ldGVycyBtdXN0IGJlICJjb3ZlcmVkIiBieSBhIGxvY2FsIHR5cGUuCgpXaGVuIGltcGxlbWVudGluZyBhIGZvcmVpZ24gdHJhaXQgZm9yIGEgZm9yZWlnbiB0eXBlLAp0aGUgdHJhaXQgbXVzdCBoYXZlIG9uZSBvciBtb3JlIHR5cGUgcGFyYW1ldGVycy4KQSB0eXBlIGxvY2FsIHRvIHlvdXIgY3JhdGUgbXVzdCBhcHBlYXIgYmVmb3JlIGFueSB1c2Ugb2YgYW55IHR5cGUgcGFyYW1ldGVycy4KClRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zLCBpdCBpcyBwZXJoYXBzIGVhc2llciB0byBjb25zaWRlciBhIGZldyBleGFtcGxlcy4KCklmIGBGb3JlaWduVHJhaXRgIGlzIGEgdHJhaXQgZGVmaW5lZCBpbiBzb21lIGV4dGVybmFsIGNyYXRlIGBmb29gLCB0aGVuIHRoZQpmb2xsb3dpbmcgdHJhaXQgYGltcGxgIGlzIGFuIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwMjEwCiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCmV4dGVybiBjcmF0ZSBmb287CiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCnVzZSBmb286OkZvcmVpZ25UcmFpdDsKIyB1c2Ugc3RkOjpwYW5pYzo6VW53aW5kU2FmZSBhcyBGb3JlaWduVHJhaXQ7CgppbXBsPFQ+IEZvcmVpZ25UcmFpdCBmb3IgVCB7IH0gLy8gZXJyb3IKIyBmbiBtYWluKCkge30KYGBgCgpUbyB3b3JrIGFyb3VuZCB0aGlzLCBpdCBjYW4gYmUgY292ZXJlZCB3aXRoIGEgbG9jYWwgdHlwZSwgYE15VHlwZWA6CgpgYGAKIyB1c2Ugc3RkOjpwYW5pYzo6VW53aW5kU2FmZSBhcyBGb3JlaWduVHJhaXQ7CnN0cnVjdCBNeVR5cGU8VD4oVCk7CmltcGw8VD4gRm9yZWlnblRyYWl0IGZvciBNeVR5cGU8VD4geyB9IC8vIE9rCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCBhIHR5cGUgYWxpYXMgaXMgbm90IHN1ZmZpY2llbnQuCgpGb3IgYW5vdGhlciBleGFtcGxlIG9mIGFuIGVycm9yLCBzdXBwb3NlIHRoZXJlJ3MgYW5vdGhlciB0cmFpdCBkZWZpbmVkIGluIGBmb29gCm5hbWVkIGBGb3JlaWduVHJhaXQyYCB0aGF0IHRha2VzIHR3byB0eXBlIHBhcmFtZXRlcnMuIFRoZW4gdGhpcyBgaW1wbGAgcmVzdWx0cwppbiB0aGUgc2FtZSBydWxlIHZpb2xhdGlvbjoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQpzdHJ1Y3QgTXlUeXBlMjsKaW1wbDxUPiBGb3JlaWduVHJhaXQyPFQsIE15VHlwZTxUPj4gZm9yIE15VHlwZTIgeyB9IC8vIGVycm9yCmBgYAoKVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZXJlIGFyZSB0d28gYXBwZWFyYW5jZXMgb2YgdHlwZSBwYXJhbWV0ZXIgYFRgIGluCnRoZSBgaW1wbGAgaGVhZGVyLCBib3RoIGFzIHBhcmFtZXRlcnMgZm9yIGBGb3JlaWduVHJhaXQyYC4gVGhlIGZpcnN0IGFwcGVhcmFuY2UKaXMgdW5jb3ZlcmVkLCBhbmQgc28gcnVucyBhZm91bCBvZiB0aGUgb3JwaGFuIHJ1bGUuCgpDb25zaWRlciBvbmUgbW9yZSBleGFtcGxlOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCmltcGw8VD4gRm9yZWlnblRyYWl0MjxNeVR5cGU8VD4sIFQ+IGZvciBNeVR5cGUyIHsgfSAvLyBPawpgYGAKClRoaXMgb25seSBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIGBpbXBsYCBpbiB0aGF0IHRoZSBwYXJhbWV0ZXJzIGBUYCBhbmQKYE15VHlwZTxUPmAgZm9yIGBGb3JlaWduVHJhaXQyYCBoYXZlIGJlZW4gc3dhcHBlZC4gVGhpcyBleGFtcGxlIGRvZXMgKm5vdCoKdmlvbGF0ZSB0aGUgb3JwaGFuIHJ1bGU7IGl0IGlzIHBlcm1pdHRlZC4KClRvIHNlZSB3aHkgdGhhdCBsYXN0IGV4YW1wbGUgd2FzIGFsbG93ZWQsIHlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwKcnVsZS4gVW5mb3J0dW5hdGVseSB0aGlzIHJ1bGUgaXMgYSBiaXQgdHJpY2t5IHRvIHN0YXRlLiBDb25zaWRlciBhbiBgaW1wbGA6CgpgYGBpZ25vcmUgKG9ubHktZm9yLXN5bnRheC1oaWdobGlnaHQpCmltcGw8UDEsIC4uLiwgUG0+IEZvcmVpZ25UcmFpdDxUMSwgLi4uLCBUbj4gZm9yIFQwIHsgLi4uIH0KYGBgCgp3aGVyZSBgUDEsIC4uLiwgUG1gIGFyZSB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBgaW1wbGAgYW5kIGBUMCwgLi4uLCBUbmAKYXJlIHR5cGVzLiBPbmUgb2YgdGhlIHR5cGVzIGBUMCwgLi4uLCBUbmAgbXVzdCBiZSBhIGxvY2FsIHR5cGUgKHRoaXMgaXMgYW5vdGhlcgpvcnBoYW4gcnVsZSwgc2VlIHRoZSBleHBsYW5hdGlvbiBmb3IgRTAxMTcpLgoKQm90aCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKMS4gQXQgbGVhc3Qgb25lIG9mIHRoZSB0eXBlcyBgVDAuLj1UbmAgbXVzdCBiZSBhIGxvY2FsIHR5cGUuCkxldCBgVGlgIGJlIHRoZSBmaXJzdCBzdWNoIHR5cGUuCjIuIE5vIHVuY292ZXJlZCB0eXBlIHBhcmFtZXRlcnMgYFAxLi49UG1gIG1heSBhcHBlYXIgaW4gYFQwLi5UaWAKKGV4Y2x1ZGluZyBgVGlgKS4KCkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIG9mIHRoZSBvcnBoYW4gcnVsZXMsCnNlZSBbUkZDIDI0NTFdIGFuZCBbUkZDIDEwMjNdLgoKRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gb2YgdGhlIG9ycGhhbiBydWxlcywgc2VlIFtSRkMgMTAyM10uCgpbUkZDIDI0NTFdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yNDUxLXJlLXJlYmFsYW5jaW5nLWNvaGVyZW5jZS5odG1sCltSRkMgMTAyM106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzEwMjMtcmViYWxhbmNpbmctY29oZXJlbmNlLm1kCkUwMjExIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IHVzZWQgYSBmdW5jdGlvbiBvciB0eXBlIHdoaWNoIGRvZXNuJ3QgZml0IHRoZSByZXF1aXJlbWVudHMgZm9yIHdoZXJlIGl0IHdhcwp1c2VkLiBFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxUPigpOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyB0eXBlCn0KCi8vIG9yOgoKZm4gbWFpbigpIC0+IGkzMiB7IDAgfQovLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBleHBlY3RzIHR5cGU6IGBmbigpIHttYWlufWA6IGV4cGVjdGVkICgpLCBmb3VuZCBpMzIKCi8vIG9yOgoKbGV0IHggPSAxdTg7Cm1hdGNoIHggewogICAgMHU4Li49M2k4ID0+ICgpLAogICAgLy8gZXJyb3I6IG1pc21hdGNoZWQgdHlwZXMgaW4gcmFuZ2U6IGV4cGVjdGVkIHU4LCBmb3VuZCBpOAogICAgXyA9PiAoKQp9CgovLyBvcjoKCnVzZSBzdGQ6OnJjOjpSYzsKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIHgoc2VsZjogUmM8Rm9vPikge30KICAgIC8vIGVycm9yOiBtaXNtYXRjaGVkIHNlbGYgdHlwZTogZXhwZWN0ZWQgYEZvb2A6IGV4cGVjdGVkIHN0cnVjdAogICAgLy8gICAgICAgIGBGb29gLCBmb3VuZCBzdHJ1Y3QgYGFsbG9jOjpyYzo6UmNgCn0KYGBgCgpGb3IgdGhlIGZpcnN0IGNvZGUgZXhhbXBsZSwgcGxlYXNlIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBzaXplX29mPFQ+KCkgLT4gdXNpemU7IC8vIG9rIQp9CmBgYAoKVGhlIHNlY29uZCBjYXNlIGV4YW1wbGUgaXMgYSBiaXQgcGFydGljdWxhcjogdGhlIG1haW4gZnVuY3Rpb24gbXVzdCBhbHdheXMKaGF2ZSB0aGlzIGRlZmluaXRpb246CgpgYGBjb21waWxlX2ZhaWwKZm4gbWFpbigpOwpgYGAKClRoZXkgbmV2ZXIgdGFrZSBwYXJhbWV0ZXJzIGFuZCBuZXZlciByZXR1cm4gdHlwZXMuCgpGb3IgdGhlIHRoaXJkIGV4YW1wbGUsIHdoZW4geW91IG1hdGNoLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUKYXMgdGhlIHR5cGUgeW91J3JlIG1hdGNoaW5nIG9uLiBFeGFtcGxlOgoKYGBgCmxldCB4ID0gMXU4OwoKbWF0Y2ggeCB7CiAgICAwdTguLj0zdTggPT4gKCksIC8vIG9rIQogICAgXyA9PiAoKQp9CmBgYAoKQW5kIGZpbmFsbHksIGZvciB0aGUgbGFzdCBleGFtcGxlLCBvbmx5IGBCb3g8U2VsZj5gLCBgJlNlbGZgLCBgU2VsZmAsCm9yIGAmbXV0IFNlbGZgIHdvcmsgYXMgZXhwbGljaXQgc2VsZiBwYXJhbWV0ZXJzLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiB4KHNlbGY6IEJveDxGb28+KSB7fSAvLyBvayEKfQpgYGAKRTAyMTJDYW5ub3QgdXNlIHRoZSBhc3NvY2lhdGVkIHR5cGUgb2YKYSB0cmFpdCB3aXRoIHVuaW5mZXJyZWQgZ2VuZXJpYyBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIxMgpwdWIgdHJhaXQgRm9vPFQ+IHsKICAgIHR5cGUgQTsKCiAgICBmbiBnZXQoJnNlbGYsIHQ6IFQpIC0+IFNlbGY6OkE7Cn0KCmZuIGZvbzI8SSA6IGZvcjwneD4gRm9vPCYneCBpc2l6ZT4+KAogICAgZmllbGQ6IEk6OkEpIHt9IC8vIGVycm9yIQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgd2UgaGF2ZSB0byBpbnN0YW50aWF0ZSBgJ3hgLCBhbmQKd2UgZG9uJ3Qga25vdyB3aGF0IGxpZmV0aW1lIHRvIGluc3RhbnRpYXRlIGl0IHdpdGguClRvIGZpeCB0aGlzLCBzcGVsbCBvdXQgdGhlIHByZWNpc2UgbGlmZXRpbWVzIGludm9sdmVkLgpFeGFtcGxlOgoKYGBgCnB1YiB0cmFpdCBGb288VD4gewogICAgdHlwZSBBOwoKICAgIGZuIGdldCgmc2VsZiwgdDogVCkgLT4gU2VsZjo6QTsKfQoKZm4gZm9vMzxJIDogZm9yPCd4PiBGb288Jid4IGlzaXplPj4oCiAgICB4OiA8SSBhcyBGb288JmlzaXplPj46OkEpIHt9IC8vIG9rIQoKCmZuIGZvbzQ8J2EsIEkgOiBmb3I8J3g+IEZvbzwmJ3ggaXNpemU+PigKICAgIHg6IDxJIGFzIEZvbzwmJ2EgaXNpemU+Pjo6QSkge30gLy8gb2shCmBgYApFMDIxNEEgZ2VuZXJpYyB0eXBlIHdhcyBkZXNjcmliZWQgdXNpbmcgcGFyZW50aGVzZXMgcmF0aGVyIHRoYW4gYW5nbGUgYnJhY2tldHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjE0CmxldCB2OiBWZWMoJnN0cikgPSB2ZWMhWyJmb28iXTsKYGBgCgpUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkOiBgdmAgc2hvdWxkIGJlIGRlZmluZWQgYXMgYFZlYzwmc3RyPmAuClBhcmVudGhlc2VzIGFyZSBjdXJyZW50bHkgb25seSB1c2VkIHdpdGggZ2VuZXJpYyB0eXBlcyB3aGVuIGRlZmluaW5nIHBhcmFtZXRlcnMKZm9yIGBGbmAtZmFtaWx5IHRyYWl0cy4KClRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUgZml4ZWQ6CgpgYGAKbGV0IHY6IFZlYzwmc3RyPiA9IHZlYyFbImZvbyJdOwpgYGAKRTAyMjBUaGUgYXNzb2NpYXRlZCB0eXBlIHVzZWQgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjAKdHJhaXQgVDEgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVDE8Rj1pMzI+OyAvLyBlcnJvcjogYXNzb2NpYXRlZCB0eXBlIGBGYCBub3QgZm91bmQgZm9yIGBUMWAKCi8vIG9yOgoKdHJhaXQgVDIgewogICAgdHlwZSBCYXI7CgogICAgLy8gZXJyb3I6IEJheiBpcyB1c2VkIGJ1dCBub3QgZGVjbGFyZWQKICAgIGZuIHJldHVybl9ib29sKCZzZWxmLCBfOiAmU2VsZjo6QmFyLCBfOiAmU2VsZjo6QmF6KSAtPiBib29sOwp9CmBgYAoKTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgZGVmaW5lZCB0aGUgYXNzb2NpYXRlZCB0eXBlIGluIHRoZSB0cmFpdCBib2R5LgpBbHNvLCB2ZXJpZnkgdGhhdCB5b3UgdXNlZCB0aGUgcmlnaHQgdHJhaXQgb3IgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUKYXNzb2NpYXRlZCB0eXBlIG5hbWUuIEV4YW1wbGU6CgpgYGAKdHJhaXQgVDEgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVDE8QmFyPWkzMj47IC8vIG9rIQoKLy8gb3I6Cgp0cmFpdCBUMiB7CiAgICB0eXBlIEJhcjsKICAgIHR5cGUgQmF6OyAvLyB3ZSBkZWNsYXJlIGBCYXpgIGluIG91ciB0cmFpdC4KCiAgICAvLyBhbmQgbm93IHdlIGNhbiB1c2UgaXQgaGVyZToKICAgIGZuIHJldHVybl9ib29sKCZzZWxmLCBfOiAmU2VsZjo6QmFyLCBfOiAmU2VsZjo6QmF6KSAtPiBib29sOwp9CmBgYApFMDIyMUFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gcmV0cmlldmUgYW4gYXNzb2NpYXRlZCB0eXBlLCBidXQgdGhlIHR5cGUgd2FzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjEKdHJhaXQgVDEge30KdHJhaXQgVDIge30KCnRyYWl0IEZvbyB7CiAgICB0eXBlIEE6IFQxOwp9Cgp0cmFpdCBCYXIgOiBGb28gewogICAgdHlwZSBBOiBUMjsKICAgIGZuIGRvX3NvbWV0aGluZygpIHsKICAgICAgICBsZXQgXzogU2VsZjo6QTsKICAgIH0KfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgYEZvb2AgZGVmaW5lcyBhbiBhc3NvY2lhdGVkIHR5cGUgYEFgLiBgQmFyYCBpbmhlcml0cyB0aGF0IHR5cGUKZnJvbSBgRm9vYCwgYW5kIGRlZmluZXMgYW5vdGhlciBhc3NvY2lhdGVkIHR5cGUgb2YgdGhlIHNhbWUgbmFtZS4gQXMgYSByZXN1bHQsCndoZW4gd2UgYXR0ZW1wdCB0byB1c2UgYFNlbGY6OkFgLCBpdCdzIGFtYmlndW91cyB3aGV0aGVyIHdlIG1lYW4gdGhlIGBBYCBkZWZpbmVkCmJ5IGBGb29gIG9yIHRoZSBvbmUgZGVmaW5lZCBieSBgQmFyYC4KClRoZXJlIGFyZSB0d28gb3B0aW9ucyB0byB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlLiBUaGUgZmlyc3QgaXMgc2ltcGx5IHRvIHJlbmFtZQpvbmUgb2YgdGhlIHR5cGVzLiBBbHRlcm5hdGl2ZWx5LCBvbmUgY2FuIHNwZWNpZnkgdGhlIGludGVuZGVkIHR5cGUgdXNpbmcgdGhlCmZvbGxvd2luZyBzeW50YXg6CgpgYGAKdHJhaXQgVDEge30KdHJhaXQgVDIge30KCnRyYWl0IEZvbyB7CiAgICB0eXBlIEE6IFQxOwp9Cgp0cmFpdCBCYXIgOiBGb28gewogICAgdHlwZSBBOiBUMjsKICAgIGZuIGRvX3NvbWV0aGluZygpIHsKICAgICAgICBsZXQgXzogPFNlbGYgYXMgQmFyPjo6QTsKICAgIH0KfQpgYGAKRTAyMjJBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGNvbnN0cmFpbiBhbiBhc3NvY2lhdGVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjIyCnB1YiB0cmFpdCBWZWhpY2xlIHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3ggewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveENhciA6IEJveCArIFZlaGljbGUge30KCmZuIGRlbnRfb2JqZWN0PENPTE9SPihjOiBkeW4gQm94Q2FyPENvbG9yPUNPTE9SPikge30gLy8gSW52YWxpZCBjb25zdHJhaW50CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBgQm94Q2FyYCBoYXMgdHdvIHN1cGVydHJhaXRzOiBgVmVoaWNsZWAgYW5kIGBCb3hgLiBCb3RoIG9mCnRoZXNlIHRyYWl0cyBkZWZpbmUgYW4gYXNzb2NpYXRlZCB0eXBlIGBDb2xvcmAuIGBCb3hDYXJgIGluaGVyaXRzIHR3byB0eXBlcwp3aXRoIHRoYXQgbmFtZSBmcm9tIGJvdGggc3VwZXJ0cmFpdHMuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbmVlZCB0byB1c2UgdGhlCmZ1bGx5IHF1YWxpZmllZCBwYXRoIHN5bnRheCB0byByZWZlciB0byB0aGUgYXBwcm9wcmlhdGUgYENvbG9yYCBhc3NvY2lhdGVkCnR5cGUsIGVpdGhlciBgPEJveENhciBhcyBWZWhpY2xlPjo6Q29sb3JgIG9yIGA8Qm94Q2FyIGFzIEJveD46OkNvbG9yYCwgYnV0IHRoaXMKc3ludGF4IGlzIG5vdCBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gYSBmdW5jdGlvbiBzaWduYXR1cmUuCgpJbiBvcmRlciB0byBlbmNvZGUgdGhpcyBraW5kIG9mIGNvbnN0cmFpbnQsIGEgYHdoZXJlYCBjbGF1c2UgYW5kIGEgbmV3IHR5cGUKcGFyYW1ldGVyIGFyZSBuZWVkZWQ6CgpgYGAKcHViIHRyYWl0IFZlaGljbGUgewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveCB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94Q2FyIDogQm94ICsgVmVoaWNsZSB7fQoKLy8gSW50cm9kdWNlIGEgbmV3IGBDQVJgIHR5cGUgcGFyYW1ldGVyCmZuIGZvbzxDQVIsIENPTE9SPigKICAgIGM6IENBUiwKKSB3aGVyZQogICAgLy8gQmluZCB0aGUgdHlwZSBwYXJhbWV0ZXIgYENBUmAgdG8gdGhlIHRyYWl0IGBCb3hDYXJgCiAgICBDQVI6IEJveENhciwKICAgIC8vIEZ1cnRoZXIgcmVzdHJpY3QgYDxCb3hDYXIgYXMgVmVoaWNsZT46OkNvbG9yYCB0byBiZSB0aGUgc2FtZSBhcyB0aGUKICAgIC8vIHR5cGUgcGFyYW1ldGVyIGBDT0xPUmAKICAgIENBUjogVmVoaWNsZTxDb2xvciA9IENPTE9SPiwKICAgIC8vIFdlIGNhbiBhbHNvIHNpbXVsdGFuZW91c2x5IHJlc3RyaWN0IHRoZSBvdGhlciB0cmFpdCdzIGFzc29jaWF0ZWQgdHlwZQogICAgQ0FSOiBCb3g8Q29sb3IgPSBDT0xPUj4Ke30KYGBgCkUwMjIzQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byByZXRyaWV2ZSBhbiBhc3NvY2lhdGVkIHR5cGUsIGJ1dCB0aGUgdHlwZSB3YXMgYW1iaWd1b3VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMwp0cmFpdCBNeVRyYWl0IHt0eXBlIFg7IH0KCmZuIG1haW4oKSB7CiAgICBsZXQgZm9vOiBNeVRyYWl0OjpYOwp9CmBgYAoKVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdlJ3JlIGF0dGVtcHRpbmcgdG8gdGFrZSB0aGUgdHlwZSBvZiBYIGZyb20gTXlUcmFpdC4KVW5mb3J0dW5hdGVseSwgdGhlIHR5cGUgb2YgWCBpcyBub3QgZGVmaW5lZCwgYmVjYXVzZSBpdCdzIG9ubHkgbWFkZSBjb25jcmV0ZSBpbgppbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHRyYWl0LiBBIHdvcmtpbmcgdmVyc2lvbiBvZiB0aGlzIGNvZGUgbWlnaHQgbG9vayBsaWtlOgoKYGBgCnRyYWl0IE15VHJhaXQge3R5cGUgWDsgfQpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIE15VHJhaXQgZm9yIE15U3RydWN0IHsKICAgIHR5cGUgWCA9IHUzMjsKfQoKZm4gbWFpbigpIHsKICAgIGxldCBmb286IDxNeVN0cnVjdCBhcyBNeVRyYWl0Pjo6WDsKfQpgYGAKClRoaXMgc3ludGF4IHNwZWNpZmllcyB0aGF0IHdlIHdhbnQgdGhlIFggdHlwZSBmcm9tIE15VHJhaXQsIGFzIG1hZGUgY29uY3JldGUgaW4KTXlTdHJ1Y3QuIFRoZSByZWFzb24gdGhhdCB3ZSBjYW5ub3Qgc2ltcGx5IHVzZSBgTXlTdHJ1Y3Q6OlhgIGlzIHRoYXQgTXlTdHJ1Y3QKbWlnaHQgaW1wbGVtZW50IHR3byBkaWZmZXJlbnQgdHJhaXRzIHdpdGggaWRlbnRpY2FsbHktbmFtZWQgYXNzb2NpYXRlZCB0eXBlcy4KVGhpcyBzeW50YXggYWxsb3dzIGRpc2FtYmlndWF0aW9uIGJldHdlZW4gdGhlIHR3by4KRTAyMjRBIHRyYWl0IG9iamVjdCB3YXMgZGVjbGFyZWQgd2l0aCBubyB0cmFpdHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI0CnR5cGUgRm9vID0gZHluICdzdGF0aWMgKzsKYGBgCgpSdXN0IGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMuCgpUbyBzb2x2ZSwgZW5zdXJlIHRoYXQgdGhlIHRyYWl0IG9iamVjdCBoYXMgYXQgbGVhc3Qgb25lIHRyYWl0OgoKYGBgCnR5cGUgRm9vID0gZHluICdzdGF0aWMgKyBDb3B5OwpgYGAKRTAyMjVNdWx0aXBsZSB0eXBlcyB3ZXJlIHVzZWQgYXMgYm91bmRzIGZvciBhIGNsb3N1cmUgb3IgdHJhaXQgb2JqZWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNQpmbiBtYWluKCkgewogICAgbGV0IF86IEJveDxkeW4gc3RkOjppbzo6UmVhZCArIHN0ZDo6aW86OldyaXRlPjsKfQpgYGAKClJ1c3QgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcy4KCkF1dG8gdHJhaXRzIHN1Y2ggYXMgU2VuZCBhbmQgU3luYyBhcmUgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZToKSXQncyBwb3NzaWJsZSB0byBoYXZlIGJvdW5kcyBvZiBvbmUgbm9uLWJ1aWx0aW4gdHJhaXQsIHBsdXMgYW55IG51bWJlciBvZgphdXRvIHRyYWl0cy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tcGlsZXMgY29ycmVjdGx5OgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgXzogQm94PGR5biBzdGQ6OmlvOjpSZWFkICsgU2VuZCArIFN5bmM+Owp9CmBgYApFMDIyNk1vcmUgdGhhbiBvbmUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgd2FzIHVzZWQgb24gYSB0cmFpdCBvYmplY3QuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI2CnRyYWl0IEZvbyB7fQoKdHlwZSBUPCdhLCAnYj4gPSBkeW4gRm9vICsgJ2EgKyAnYjsgLy8gZXJyb3I6IFRyYWl0IG9iamVjdCBgYXJnYCBoYXMgdHdvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsaWZldGltZSBib3VuZCwgJ2EgYW5kICdiLgpgYGAKCkhlcmUgYFRgIGlzIGEgdHJhaXQgb2JqZWN0IHdpdGggdHdvIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kcywgJ2EgYW5kICdiLgoKT25seSBhIHNpbmdsZSBleHBsaWNpdCBsaWZldGltZSBib3VuZCBpcyBwZXJtaXR0ZWQgb24gdHJhaXQgb2JqZWN0cy4KVG8gZml4IHRoaXMgZXJyb3IsIGNvbnNpZGVyIHJlbW92aW5nIG9uZSBvZiB0aGUgbGlmZXRpbWUgYm91bmRzOgoKYGBgCnRyYWl0IEZvbyB7fQoKdHlwZSBUPCdhPiA9IGR5biBGb28gKyAnYTsKYGBgCkUwMjI4VGhlIGxpZmV0aW1lIGJvdW5kIGZvciB0aGlzIG9iamVjdCB0eXBlIGNhbm5vdCBiZSBkZWR1Y2VkIGZyb20gY29udGV4dCBhbmQgbXVzdApiZSBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI4CnRyYWl0IFRyYWl0IHsgfQoKc3RydWN0IFR3b0JvdW5kczwnYSwgJ2IsIFQ6IFNpemVkICsgJ2EgKyAnYj4gewogICAgeDogJidhIGkzMiwKICAgIHk6ICYnYiBpMzIsCiAgICB6OiBULAp9Cgp0eXBlIEZvbzwnYSwgJ2I+ID0gVHdvQm91bmRzPCdhLCAnYiwgZHluIFRyYWl0PjsKYGBgCgpXaGVuIGEgdHJhaXQgb2JqZWN0IGlzIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IG9mIGEgZ2VuZXJpYyB0eXBlLCBSdXN0IHdpbGwgdHJ5CnRvIGluZmVyIGl0cyBsaWZldGltZSBpZiB1bnNwZWNpZmllZC4gSG93ZXZlciwgdGhpcyBpc24ndCBwb3NzaWJsZSB3aGVuIHRoZQpjb250YWluaW5nIHR5cGUgaGFzIG1vcmUgdGhhbiBvbmUgbGlmZXRpbWUgYm91bmQuCgpUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgcmVzb2x2ZWQgYnkgZWl0aGVyIHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgbGlmZXRpbWUKYm91bmRzIHRvIG9uZSBvciBieSBtYWtpbmcgdGhlIHRyYWl0IG9iamVjdCBsaWZldGltZSBleHBsaWNpdCwgbGlrZSBzbzoKCmBgYAp0cmFpdCBUcmFpdCB7IH0KCnN0cnVjdCBUd29Cb3VuZHM8J2EsICdiLCBUOiBTaXplZCArICdhICsgJ2I+IHsKICAgIHg6ICYnYSBpMzIsCiAgICB5OiAmJ2IgaTMyLAogICAgejogVCwKfQoKdHlwZSBGb288J2EsICdiPiA9IFR3b0JvdW5kczwnYSwgJ2IsIGR5biBUcmFpdCArICdiPjsKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSRkMgNTk5XSBhbmQgaXRzIGFtZW5kbWVudCBbUkZDIDExNTZdLgoKW1JGQyA1OTldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNTk5LWRlZmF1bHQtb2JqZWN0LWJvdW5kLm1kCltSRkMgMTE1Nl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzExNTYtYWRqdXN0LWRlZmF1bHQtb2JqZWN0LWJvdW5kcy5tZApFMDIyOUFuIGFzc29jaWF0ZWQgdHlwZSBiaW5kaW5nIHdhcyBkb25lIG91dHNpZGUgb2YgdGhlIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uCmFuZCBgd2hlcmVgIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjkKcHViIHRyYWl0IEZvbyB7CiAgICB0eXBlIEE7CiAgICBmbiBib28oJnNlbGYpIC0+IDxTZWxmIGFzIEZvbz46OkE7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgaXNpemUgewogICAgdHlwZSBBID0gdXNpemU7CiAgICBmbiBib28oJnNlbGYpIC0+IHVzaXplIHsgNDIgfQp9CgpmbiBiYXo8ST4oeDogJjxJIGFzIEZvbzxBPUJhcj4+OjpBKSB7fQovLyBlcnJvcjogYXNzb2NpYXRlZCB0eXBlIGJpbmRpbmdzIGFyZSBub3QgYWxsb3dlZCBoZXJlCmBgYAoKVG8gc29sdmUgdGhpcyBlcnJvciwgcGxlYXNlIG1vdmUgdGhlIHR5cGUgYmluZGluZ3MgaW4gdGhlIHR5cGUgcGFyYW1ldGVyCmRlY2xhcmF0aW9uOgoKYGBgCiMgc3RydWN0IEJhcjsKIyB0cmFpdCBGb28geyB0eXBlIEE7IH0KZm4gYmF6PEk6IEZvbzxBPUJhcj4+KHg6ICY8SSBhcyBGb28+OjpBKSB7fSAvLyBvayEKYGBgCgpPciBpbiB0aGUgYHdoZXJlYCBjbGF1c2U6CgpgYGAKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IEZvbyB7IHR5cGUgQTsgfQpmbiBiYXo8ST4oeDogJjxJIGFzIEZvbz46OkEpIHdoZXJlIEk6IEZvbzxBPUJhcj4ge30KYGBgCkUwMjMwVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzAKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se0J9PmAiXSAvLyBlcnJvcgp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKVGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgY29udGFpbiBhbiBpZGVudGlmaWVyIHdoaWNoIGRvZXNuJ3QKbWF0Y2ggd2l0aCBhbnkgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBvciB0aGUgc3RyaW5nIGBTZWxmYC4gVGhpcyBtaWdodCBoYXBwZW4KaWYgeW91IG1pc3NwZWxsZWQgYSB0eXBlIHBhcmFtZXRlciwgb3IgaWYgeW91IGludGVuZGVkIHRvIHVzZSBsaXRlcmFsIGN1cmx5CmJyYWNlcy4gSWYgaXQgaXMgdGhlIGxhdHRlciwgZXNjYXBlIHRoZSBjdXJseSBicmFjZXMgd2l0aCBhIHNlY29uZCBjdXJseSBicmFjZQpvZiB0aGUgc2FtZSB0eXBlOyBlLmcuLCBhIGxpdGVyYWwgYHtgIGlzIGB7e2AuCkUwMjMxVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzEKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se30+YCJdIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgZG8gbm90IGNvbnRhaW4gYW4gaWRlbnRpZmllci4gUGxlYXNlCmFkZCBvbmUgb2YgdGhlIHNhbWUgbmFtZSBhcyBhIHR5cGUgcGFyYW1ldGVyLiBJZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGxpdGVyYWwKYnJhY2VzLCB1c2UgYHt7YCBhbmQgYH19YCB0byBlc2NhcGUgdGhlbS4KRTAyMzJUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMgojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZChsb3JlbT0iIildIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uIHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKRm9yIHRoaXMgdG8gd29yaywgc29tZSBub3RlIG11c3QgYmUgc3BlY2lmaWVkLiBBbiBlbXB0eSBhdHRyaWJ1dGUgd2lsbCBub3QgZG8KYW55dGhpbmcsIHBsZWFzZSByZW1vdmUgdGhlIGF0dHJpYnV0ZSBvciBhZGQgc29tZSBoZWxwZnVsIG5vdGUgZm9yIHVzZXJzIG9mIHRoZQp0cmFpdC4KRTAyNDMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBlbm91Z2ggdHlwZSBwYXJhbWV0ZXJzIHdlcmUgZm91bmQgaW4gYSB0eXBlIG9yCnRyYWl0LgoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCBzdHJ1Y3QgYmVsb3cgaXMgZGVmaW5lZCB0byBiZSBnZW5lcmljIGluIGBUYCwgYnV0IHRoZQp0eXBlIHBhcmFtZXRlciBpcyBtaXNzaW5nIGluIHRoZSBkZWZpbml0aW9uIG9mIGBCYXJgOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXIgeyB4OiBGb28gfQpgYGAKRTAyNDQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRvbyBtYW55IHR5cGUgcGFyYW1ldGVycyB3ZXJlIGZvdW5kIGluIGEgdHlwZSBvcgp0cmFpdC4KCkZvciBleGFtcGxlLCB0aGUgYEZvb2Agc3RydWN0IGJlbG93IGhhcyBubyB0eXBlIHBhcmFtZXRlcnMsIGJ1dCBpcyBzdXBwbGllZAp3aXRoIHR3byBpbiB0aGUgZGVmaW5pdGlvbiBvZiBgQmFyYDoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpzdHJ1Y3QgRm9vIHsgeDogYm9vbCB9CgpzdHJ1Y3QgQmFyPFMsIFQ+IHsgeDogRm9vPFMsIFQ+IH0KYGBgCkUwMjUxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVHdvIGl0ZW1zIG9mIHRoZSBzYW1lIG5hbWUgY2Fubm90IGJlIGltcG9ydGVkIHdpdGhvdXQgcmViaW5kaW5nIG9uZSBvZiB0aGUKaXRlbXMgdW5kZXIgYSBuZXcgbG9jYWwgbmFtZS4KCkFuIGV4YW1wbGUgb2YgdGhpcyBlcnJvcjoKCmBgYAp1c2UgZm9vOjpiYXo7CnVzZSBiYXI6Oio7IC8vIGVycm9yLCBkbyBgdXNlIGZvbzo6YmF6IGFzIHF1dXhgIGluc3RlYWQgb24gdGhlIHByZXZpb3VzIGxpbmUKCmZuIG1haW4oKSB7fQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYApFMDI1MlR3byBpdGVtcyBvZiB0aGUgc2FtZSBuYW1lIGNhbm5vdCBiZSBpbXBvcnRlZCB3aXRob3V0IHJlYmluZGluZyBvbmUgb2YgdGhlCml0ZW1zIHVuZGVyIGEgbmV3IGxvY2FsIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjUyCnVzZSBmb286OmJhejsKdXNlIGJhcjo6YmF6OyAvLyBlcnJvciwgZG8gYHVzZSBiYXI6OmJheiBhcyBxdXV4YCBpbnN0ZWFkCgpmbiBtYWluKCkge30KCm1vZCBmb28gewogICAgcHViIHN0cnVjdCBiYXo7Cn0KCm1vZCBiYXIgewogICAgcHViIG1vZCBiYXoge30KfQpgYGAKCllvdSBjYW4gdXNlIGFsaWFzZXMgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKdXNlIGZvbzo6YmF6IGFzIGZvb19iYXo7CnVzZSBiYXI6OmJhejsgLy8gb2shCgpmbiBtYWluKCkge30KCm1vZCBmb28gewogICAgcHViIHN0cnVjdCBiYXo7Cn0KCm1vZCBiYXIgewogICAgcHViIG1vZCBiYXoge30KfQpgYGAKCk9yIHlvdSBjYW4gcmVmZXJlbmNlIHRoZSBpdGVtIHdpdGggaXRzIHBhcmVudDoKCmBgYAp1c2UgYmFyOjpiYXo7CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBmb286OmJhejsgLy8gb2shCn0KCm1vZCBmb28gewogICAgcHViIHN0cnVjdCBiYXo7Cn0KCm1vZCBiYXIgewogICAgcHViIG1vZCBiYXoge30KfQpgYGAKRTAyNTNBdHRlbXB0IHdhcyBtYWRlIHRvIGltcG9ydCBhbiB1bmltcG9ydGFibGUgdmFsdWUuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRyeWluZwp0byBpbXBvcnQgYSBtZXRob2QgZnJvbSBhIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1Mwptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBNeVRyYWl0IHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6TXlUcmFpdDo6ZG9fc29tZXRoaW5nOwovLyBlcnJvcjogYGRvX3NvbWV0aGluZ2AgaXMgbm90IGRpcmVjdGx5IGltcG9ydGFibGUKCmZuIG1haW4oKSB7fQpgYGAKCkl0J3MgaW52YWxpZCB0byBkaXJlY3RseSBpbXBvcnQgbWV0aG9kcyBiZWxvbmdpbmcgdG8gYSB0cmFpdCBvciBjb25jcmV0ZSB0eXBlLgpFMDI1NEF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wb3J0IGFuIGl0ZW0gd2hlcmVhcyBhbiBleHRlcm4gY3JhdGUgd2l0aCB0aGlzIG5hbWUgaGFzCmFscmVhZHkgYmVlbiBpbXBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTQKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBjb3JlIHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6Y29yZTsgIC8vIGVycm9yOiBhbiBleHRlcm4gY3JhdGUgbmFtZWQgYGNvcmVgIGhhcyBhbHJlYWR5CiAgICAgICAgICAgICAgICAvLyAgICAgICAgYmVlbiBpbXBvcnRlZCBpbiB0aGlzIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBoYXZlIHRvIHJlbmFtZSBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBpbXBvcnRzLgpFeGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlIGFzIGxpYmNvcmU7IC8vIG9rIQoKbW9kIGZvbyB7CiAgICBwdWIgdHJhaXQgY29yZSB7CiAgICAgICAgZm4gZG9fc29tZXRoaW5nKCk7CiAgICB9Cn0KCnVzZSBmb286OmNvcmU7CgpmbiBtYWluKCkge30KYGBgCkUwMjU1WW91IGNhbid0IGltcG9ydCBhIHZhbHVlIHdob3NlIG5hbWUgaXMgdGhlIHNhbWUgYXMgYW5vdGhlciB2YWx1ZSBkZWZpbmVkIGluIHRoZQptb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjU1CnVzZSBiYXI6OmZvbzsgLy8gZXJyb3I6IGFuIGl0ZW0gbmFtZWQgYGZvb2AgaXMgYWxyZWFkeSBpbiBzY29wZQoKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkge30KYGBgCgpZb3UgY2FuIHVzZSBhbGlhc2VzIGluIG9yZGVyIHRvIGZpeCB0aGlzIGVycm9yLiBFeGFtcGxlOgoKYGBgCnVzZSBiYXI6OmZvbyBhcyBiYXJfZm9vOyAvLyBvayEKCmZuIGZvbygpIHt9Cgptb2QgYmFyIHsKICAgICBwdWIgZm4gZm9vKCkge30KfQoKZm4gbWFpbigpIHt9CmBgYAoKT3IgeW91IGNhbiByZWZlcmVuY2UgdGhlIGl0ZW0gd2l0aCBpdHMgcGFyZW50OgoKYGBgCmZuIGZvbygpIHt9Cgptb2QgYmFyIHsKICAgICBwdWIgZm4gZm9vKCkge30KfQoKZm4gbWFpbigpIHsKICAgIGJhcjo6Zm9vKCk7IC8vIHdlIGdldCB0aGUgaXRlbSBieSByZWZlcnJpbmcgdG8gaXRzIHBhcmVudAp9CmBgYApFMDI1NiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW4ndCBpbXBvcnQgYSB0eXBlIG9yIG1vZHVsZSB3aGVuIHRoZSBuYW1lIG9mIHRoZSBpdGVtIGJlaW5nIGltcG9ydGVkIGlzCnRoZSBzYW1lIGFzIGFub3RoZXIgdHlwZSBvciBzdWJtb2R1bGUgZGVmaW5lZCBpbiB0aGUgbW9kdWxlLgoKQW4gZXhhbXBsZSBvZiB0aGlzIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsCnVzZSBmb286OkJhcjsgLy8gZXJyb3IKCnR5cGUgQmFyID0gdTMyOwoKbW9kIGZvbyB7CiAgICBwdWIgbW9kIEJhciB7IH0KfQoKZm4gbWFpbigpIHt9CmBgYApFMDI1OVRoZSBuYW1lIGNob3NlbiBmb3IgYW4gZXh0ZXJuYWwgY3JhdGUgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleHRlcm5hbCBjcmF0ZQp0aGF0IGhhcyBiZWVuIGltcG9ydGVkIGludG8gdGhlIGN1cnJlbnQgbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1OQpleHRlcm4gY3JhdGUgY29yZTsKZXh0ZXJuIGNyYXRlIHN0ZCBhcyBjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHNvbHV0aW9uIGlzIHRvIGNob29zZSBhIGRpZmZlcmVudCBuYW1lIHRoYXQgZG9lc24ndCBjb25mbGljdCB3aXRoIGFueQpleHRlcm5hbCBjcmF0ZSBpbXBvcnRlZCBpbnRvIHRoZSBjdXJyZW50IG1vZHVsZS4KCkNvcnJlY3QgZXhhbXBsZToKCmBgYApleHRlcm4gY3JhdGUgY29yZTsKZXh0ZXJuIGNyYXRlIHN0ZCBhcyBvdGhlcl9uYW1lOwoKZm4gbWFpbigpIHt9CmBgYApFMDI2MFRoZSBuYW1lIGZvciBhbiBpdGVtIGRlY2xhcmF0aW9uIGNvbmZsaWN0cyB3aXRoIGFuIGV4dGVybmFsIGNyYXRlJ3MgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjAKZXh0ZXJuIGNyYXRlIGNvcmU7CgpzdHJ1Y3QgY29yZTsKCmZuIG1haW4oKSB7fQpgYGAKClRoZXJlIGFyZSB0d28gcG9zc2libGUgc29sdXRpb25zOgoKU29sdXRpb24gIzE6IFJlbmFtZSB0aGUgaXRlbS4KCmBgYApleHRlcm4gY3JhdGUgY29yZTsKCnN0cnVjdCB4eXo7CmBgYAoKU29sdXRpb24gIzI6IEltcG9ydCB0aGUgY3JhdGUgd2l0aCBhIGRpZmZlcmVudCBuYW1lLgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlIGFzIHh5ejsKCnN0cnVjdCBhYmM7CmBgYAoKU2VlIHRoZSBbRGVjbGFyYXRpb24gU3RhdGVtZW50c11bZGVjbGFyYXRpb24tc3RhdGVtZW50c10gc2VjdGlvbiBvZiB0aGUKcmVmZXJlbmNlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgY29uc3RpdHV0ZXMgYW4gaXRlbSBkZWNsYXJhdGlvbgphbmQgd2hhdCBkb2VzIG5vdC4KCltkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2Uvc3RhdGVtZW50cy5odG1sI2RlY2xhcmF0aW9uLXN0YXRlbWVudHMKRTAyNjFBbiB1bmRlY2xhcmVkIGxpZmV0aW1lIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MQovLyBlcnJvciwgdXNlIG9mIHVuZGVjbGFyZWQgbGlmZXRpbWUgbmFtZSBgJ2FgCmZuIGZvbyh4OiAmJ2Egc3RyKSB7IH0KCnN0cnVjdCBGb28gewogICAgLy8gZXJyb3IsIHVzZSBvZiB1bmRlY2xhcmVkIGxpZmV0aW1lIG5hbWUgYCdhYAogICAgeDogJidhIHN0ciwKfQpgYGAKClRoZXNlIGNhbiBiZSBmaXhlZCBieSBkZWNsYXJpbmcgbGlmZXRpbWUgcGFyYW1ldGVyczoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgpmbiBmb288J2E+KHg6ICYnYSBzdHIpIHt9CmBgYAoKSW1wbCBibG9ja3MgZGVjbGFyZSBsaWZldGltZSBwYXJhbWV0ZXJzIHNlcGFyYXRlbHkuIFlvdSBuZWVkIHRvIGFkZCBsaWZldGltZQpwYXJhbWV0ZXJzIHRvIGFuIGltcGwgYmxvY2sgaWYgeW91J3JlIGltcGxlbWVudGluZyBhIHR5cGUgdGhhdCBoYXMgYSBsaWZldGltZQpwYXJhbWV0ZXIgb2YgaXRzIG93bi4KRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjEKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIHN0ciwKfQoKLy8gZXJyb3IsICB1c2Ugb2YgdW5kZWNsYXJlZCBsaWZldGltZSBuYW1lIGAnYWAKaW1wbCBGb288J2E+IHsKICAgIGZuIGZvbzwnYT4oeDogJidhIHN0cikge30KfQpgYGAKClRoaXMgaXMgZml4ZWQgYnkgZGVjbGFyaW5nIHRoZSBpbXBsIGJsb2NrIGxpa2UgdGhpczoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgovLyBjb3JyZWN0CmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gZm9vKHg6ICYnYSBzdHIpIHt9Cn0KYGBgCkUwMjYyQW4gaW52YWxpZCBuYW1lIHdhcyB1c2VkIGZvciBhIGxpZmV0aW1lIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjIKLy8gZXJyb3IsIGludmFsaWQgbGlmZXRpbWUgcGFyYW1ldGVyIG5hbWUgYCdzdGF0aWNgCmZuIGZvbzwnc3RhdGljPih4OiAmJ3N0YXRpYyBzdHIpIHsgfQpgYGAKCkRlY2xhcmluZyBjZXJ0YWluIGxpZmV0aW1lIG5hbWVzIGluIHBhcmFtZXRlcnMgaXMgZGlzYWxsb3dlZC4gRm9yIGV4YW1wbGUsCmJlY2F1c2UgdGhlIGAnc3RhdGljYCBsaWZldGltZSBpcyBhIHNwZWNpYWwgYnVpbHQtaW4gbGlmZXRpbWUgbmFtZSBkZW5vdGluZwp0aGUgbGlmZXRpbWUgb2YgdGhlIGVudGlyZSBwcm9ncmFtLCB0aGlzIGlzIGFuIGVycm9yOgpFMDI2M0EgbGlmZXRpbWUgd2FzIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MwpmbiBmb288J2EsICdiLCAnYT4oeDogJidhIHN0ciwgeTogJidiIHN0ciwgejogJidhIHN0cikgeyAvLyBlcnJvciEKfQpgYGAKClR3byBsaWZldGltZXMgY2Fubm90IGhhdmUgdGhlIHNhbWUgbmFtZS4gVG8gZml4IHRoaXMgZXhhbXBsZSwgY2hhbmdlCnRoZSBzZWNvbmQgYCdhYCBsaWZldGltZSBpbnRvIHNvbWV0aGluZyBlbHNlIChgJ2NgIGZvciBleGFtcGxlKToKCmBgYApmbiBmb288J2EsICdiLCAnYz4oeDogJidhIHN0ciwgeTogJidiIHN0ciwgejogJidjIHN0cikgeyAvLyBvayEKfQpgYGAKRTAyNjRBbiB1bmtub3duIGV4dGVybmFsIGxhbmcgaXRlbSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjQKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCmV4dGVybiAiQyIgewogICAgI1tsYW5nID0gImNha2UiXSAvLyBlcnJvcjogdW5rbm93biBleHRlcm5hbCBsYW5nIGl0ZW06IGBjYWtlYAogICAgZm4gY2FrZSgpOwp9CmBgYAoKQSBsaXN0IG9mIGF2YWlsYWJsZSBleHRlcm5hbCBsYW5nIGl0ZW1zIGlzIGF2YWlsYWJsZSBpbgpgc3JjL2xpYnJ1c3RjX21pZGRsZS9taWRkbGUvd2Vha19sYW5nX2l0ZW1zLnJzYC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2xhbmcgPSAicGFuaWNfaW1wbCJdIC8vIG9rIQogICAgZm4gY2FrZSgpOwp9CmBgYApFMDI2N0EgbG9vcCBrZXl3b3JkIChgYnJlYWtgIG9yIGBjb250aW51ZWApIHdhcyB1c2VkIGluc2lkZSBhIGNsb3N1cmUgYnV0IG91dHNpZGUgb2YKYW55IGxvb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjY3CmxldCB3ID0gfHwgeyBicmVhazsgfTsgLy8gZXJyb3I6IGBicmVha2AgaW5zaWRlIG9mIGEgY2xvc3VyZQpgYGAKCmBicmVha2AgYW5kIGBjb250aW51ZWAga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIGluc2lkZSBjbG9zdXJlcyBhcyBsb25nIGFzCnRoZXkgYXJlIGFsc28gY29udGFpbmVkIHdpdGhpbiBhIGxvb3AuIFRvIGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBhIGNsb3N1cmUgeW91CnNob3VsZCBpbnN0ZWFkIHVzZSBhIHJldHVybiBzdGF0ZW1lbnQuIEV4YW1wbGU6CgpgYGAKbGV0IHcgPSB8fCB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7CiAgICB9Cn07Cgp3KCk7CmBgYApFMDI2OEEgbG9vcCBrZXl3b3JkIChgYnJlYWtgIG9yIGBjb250aW51ZWApIHdhcyB1c2VkIG91dHNpZGUgb2YgYSBsb29wLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2OApmbiBzb21lX2Z1bmMoKSB7CiAgICBicmVhazsgLy8gZXJyb3I6IGBicmVha2Agb3V0c2lkZSBvZiBhIGxvb3AKfQpgYGAKCldpdGhvdXQgYSBsb29wIHRvIGJyZWFrIG91dCBvZiBvciBjb250aW51ZSBpbiwgbm8gc2Vuc2libGUgYWN0aW9uIGNhbiBiZSB0YWtlbi4KUGxlYXNlIHZlcmlmeSB0aGF0IHlvdSBhcmUgdXNpbmcgYGJyZWFrYCBhbmQgYGNvbnRpbnVlYCBvbmx5IGluIGxvb3BzLiBFeGFtcGxlOgoKYGBgCmZuIHNvbWVfZnVuYygpIHsKICAgIGZvciBfIGluIDAuLjEwIHsKICAgICAgICBicmVhazsgLy8gb2shCiAgICB9Cn0KYGBgCkUwMjcxQSB0eXBlIG1pc21hdGNoZWQgYW4gYXNzb2NpYXRlZCB0eXBlIG9mIGEgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjcxCnRyYWl0IFRyYWl0IHsgdHlwZSBBc3NvY2lhdGVkVHlwZTsgfQoKZm4gZm9vPFQ+KHQ6IFQpIHdoZXJlIFQ6IFRyYWl0PEFzc29jaWF0ZWRUeXBlPXUzMj4gewovLyAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn4gfn5+fn5+fn5+fn5+fn5+fn5+Ci8vICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKLy8gICAgICAgICBUaGlzIHNheXMgYGZvb2AgY2FuICAgICAgICAgfAovLyAgICAgICAgICAgb25seSBiZSB1c2VkIHdpdGggICAgICAgICB8Ci8vICAgICAgICAgICAgICBzb21lIHR5cGUgdGhhdCAgICAgICAgIHwKLy8gICAgICAgICBpbXBsZW1lbnRzIGBUcmFpdGAuICAgICAgICAgfAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNheXMgbm90IG9ubHkgbXVzdAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFRgIGJlIGFuIGltcGwgb2YgYFRyYWl0YAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGFsc28gdGhhdCB0aGUgaW1wbAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBhc3NpZ24gdGhlIHR5cGUgYHUzMmAKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBhc3NvY2lhdGVkIHR5cGUuCiAgICBwcmludGxuISgiaW4gZm9vIik7Cn0KCmltcGwgVHJhaXQgZm9yIGk4IHsgdHlwZSBBc3NvY2lhdGVkVHlwZSA9ICYnc3RhdGljIHN0cjsgfQovL35+fn5+fn5+fn5+fn5+fiAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyBgaThgIGRvZXMgaGF2ZSAgICAgICAgICAgICAgICAgICAgIHwKLy8gaW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICB8Ci8vIG9mIGBUcmFpdGAuLi4gICAgICAgICAgICAgICAgICAgICAgfAovLyAgICAgICAgICAgICAgICAgICAgIC4uLiBidXQgaXQgaXMgYW4gaW1wbGVtZW50YXRpb24KLy8gICAgICAgICAgICAgICAgICAgICB0aGF0IGFzc2lnbnMgYCYnc3RhdGljIHN0cmAgdG8KLy8gICAgICAgICAgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCB0eXBlLgoKZm9vKDNfaTgpOwovLyBIZXJlLCB3ZSBpbnZva2UgYGZvb2Agd2l0aCBhbiBgaThgLCB3aGljaCBkb2VzIG5vdCBzYXRpc2Z5Ci8vIHRoZSBjb25zdHJhaW50IGA8aTggYXMgVHJhaXQ+OjpBc3NvY2lhdGVkVHlwZT11MzJgLCBhbmQKLy8gdGhlcmVmb3JlIHRoZSB0eXBlLWNoZWNrZXIgY29tcGxhaW5zIHdpdGggdGhpcyBlcnJvciBjb2RlLgpgYGAKClRoZSBpc3N1ZSBjYW4gYmUgcmVzb2x2ZWQgYnkgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgdHlwZToKMSkgaW4gdGhlIGBmb29gIGltcGxlbWVudGF0aW9uOgpgYGAKdHJhaXQgVHJhaXQgeyB0eXBlIEFzc29jaWF0ZWRUeXBlOyB9CgpmbiBmb288VD4odDogVCkgd2hlcmUgVDogVHJhaXQ8QXNzb2NpYXRlZFR5cGUgPSAmJ3N0YXRpYyBzdHI+IHsKICAgIHByaW50bG4hKCJpbiBmb28iKTsKfQoKaW1wbCBUcmFpdCBmb3IgaTggeyB0eXBlIEFzc29jaWF0ZWRUeXBlID0gJidzdGF0aWMgc3RyOyB9Cgpmb28oM19pOCk7CmBgYAoKMikgaW4gdGhlIGBUcmFpdGAgaW1wbGVtZW50YXRpb24gZm9yIGBpOGA6CmBgYAp0cmFpdCBUcmFpdCB7IHR5cGUgQXNzb2NpYXRlZFR5cGU7IH0KCmZuIGZvbzxUPih0OiBUKSB3aGVyZSBUOiBUcmFpdDxBc3NvY2lhdGVkVHlwZSA9IHUzMj4gewogICAgcHJpbnRsbiEoImluIGZvbyIpOwp9CgppbXBsIFRyYWl0IGZvciBpOCB7IHR5cGUgQXNzb2NpYXRlZFR5cGUgPSB1MzI7IH0KCmZvbygzX2k4KTsKYGBgCkUwMjc1QW4gZXZhbHVhdGlvbiBvZiBhIHRyYWl0IHJlcXVpcmVtZW50IG92ZXJmbG93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc1CnRyYWl0IEZvbyB7fQoKc3RydWN0IEJhcjxUPihUKTsKCmltcGw8VD4gRm9vIGZvciBUIHdoZXJlIEJhcjxUPjogRm9vIHt9CmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiB0aGVyZSB3YXMgYSByZWN1cnNpdmUgdHJhaXQgcmVxdWlyZW1lbnQgdGhhdCBvdmVyZmxvd2VkCmJlZm9yZSBpdCBjb3VsZCBiZSBldmFsdWF0ZWQuIFRoaXMgb2Z0ZW4gbWVhbnMgdGhhdCB0aGVyZSBpcyBhbiB1bmJvdW5kZWQKcmVjdXJzaW9uIGluIHJlc29sdmluZyBzb21lIHR5cGUgYm91bmRzLgoKVG8gZGV0ZXJtaW5lIGlmIGEgYFRgIGlzIGBGb29gLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIGBCYXI8VD5gIGlzIGBGb29gLiBIb3dldmVyLAp0byBkbyB0aGlzIGNoZWNrLCB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGF0IGBCYXI8QmFyPFQ+PmAgaXMgYEZvb2AuIFRvCmRldGVybWluZSB0aGlzLCB3ZSBjaGVjayBpZiBgQmFyPEJhcjxCYXI8VD4+PmAgaXMgYEZvb2AsIGFuZCBzbyBvbi4gVGhpcyBpcwpjbGVhcmx5IGEgcmVjdXJzaXZlIHJlcXVpcmVtZW50IHRoYXQgY2FuJ3QgYmUgcmVzb2x2ZWQgZGlyZWN0bHkuCgpDb25zaWRlciBjaGFuZ2luZyB5b3VyIHRyYWl0IGJvdW5kcyBzbyB0aGF0IHRoZXkncmUgbGVzcyBzZWxmLXJlZmVyZW50aWFsLgpFMDI3NkEgdHJhaXQgaW1wbGVtZW50YXRpb24gaGFzIHN0cmljdGVyIHJlcXVpcmVtZW50cyB0aGFuIHRoZSB0cmFpdCBkZWZpbml0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3Ngp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ+KHg6IFQpOwp9CgppbXBsIEZvbyBmb3IgYm9vbCB7CiAgICBmbiBmb288VD4oeDogVCkgd2hlcmUgVDogQ29weSB7fQp9CmBgYAoKSGVyZSwgYWxsIHR5cGVzIGltcGxlbWVudGluZyBgRm9vYCBtdXN0IGhhdmUgYSBtZXRob2QgYGZvbzxUPih4OiBUKWAgd2hpY2ggY2FuCnRha2UgYW55IHR5cGUgYFRgLiBIb3dldmVyLCBpbiB0aGUgYGltcGxgIGZvciBgYm9vbGAsIHdlIGhhdmUgYWRkZWQgYW4gZXh0cmEKYm91bmQgdGhhdCBgVGAgaXMgYENvcHlgLCB3aGljaCBpc24ndCBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIHRyYWl0LgoKQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGJvdW5kIGZyb20gdGhlIG1ldGhvZCBvciBhZGRpbmcgdGhlIGJvdW5kIHRvIHRoZSBvcmlnaW5hbAptZXRob2QgZGVmaW5pdGlvbiBpbiB0aGUgdHJhaXQuCkUwMjc3WW91IHRyaWVkIHRvIHVzZSBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgc29tZSB0cmFpdCBpbiBhIHBsYWNlIHdoaWNoCmV4cGVjdGVkIHRoYXQgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc3Ci8vIGhlcmUgd2UgZGVjbGFyZSB0aGUgRm9vIHRyYWl0IHdpdGggYSBiYXIgbWV0aG9kCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CgovLyB3ZSBub3cgZGVjbGFyZSBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIEZvbyB0cmFpdApmbiBzb21lX2Z1bmM8VDogRm9vPihmb286IFQpIHsKICAgIGZvby5iYXIoKTsKfQoKZm4gbWFpbigpIHsKICAgIC8vIHdlIG5vdyBjYWxsIHRoZSBtZXRob2Qgd2l0aCB0aGUgaTMyIHR5cGUsIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50CiAgICAvLyB0aGUgRm9vIHRyYWl0CiAgICBzb21lX2Z1bmMoNWkzMik7IC8vIGVycm9yOiB0aGUgdHJhaXQgYm91bmQgYGkzMiA6IEZvb2AgaXMgbm90IHNhdGlzZmllZAp9CmBgYAoKSW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IsIHZlcmlmeSB0aGF0IHRoZSB0eXBlIHlvdSdyZSB1c2luZyBkb2VzIGltcGxlbWVudAp0aGUgdHJhaXQuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCi8vIHdlIGltcGxlbWVudCB0aGUgdHJhaXQgb24gdGhlIGkzMiB0eXBlCmltcGwgRm9vIGZvciBpMzIgewogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgpmbiBzb21lX2Z1bmM8VDogRm9vPihmb286IFQpIHsKICAgIGZvby5iYXIoKTsgLy8gd2UgY2FuIG5vdyB1c2UgdGhpcyBtZXRob2Qgc2luY2UgaTMyIGltcGxlbWVudHMgdGhlCiAgICAgICAgICAgICAgIC8vIEZvbyB0cmFpdAp9CgpmbiBtYWluKCkgewogICAgc29tZV9mdW5jKDVpMzIpOyAvLyBvayEKfQpgYGAKCk9yIGluIGEgZ2VuZXJpYyBjb250ZXh0LCBhbiBlcnJvbmVvdXMgY29kZSBleGFtcGxlIHdvdWxkIGxvb2sgbGlrZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3NwpmbiBzb21lX2Z1bmM8VD4oZm9vOiBUKSB7CiAgICBwcmludGxuISgiezo/fSIsIGZvbyk7IC8vIGVycm9yOiB0aGUgdHJhaXQgYGNvcmU6OmZtdDo6RGVidWdgIGlzIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaW1wbGVtZW50ZWQgZm9yIHRoZSB0eXBlIGBUYAp9CgpmbiBtYWluKCkgewogICAgLy8gV2Ugbm93IGNhbGwgdGhlIG1ldGhvZCB3aXRoIHRoZSBpMzIgdHlwZSwKICAgIC8vIHdoaWNoICpkb2VzKiBpbXBsZW1lbnQgdGhlIERlYnVnIHRyYWl0LgogICAgc29tZV9mdW5jKDVpMzIpOwp9CmBgYAoKTm90ZSB0aGF0IHRoZSBlcnJvciBoZXJlIGlzIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBnZW5lcmljIGZ1bmN0aW9uLiBBbHRob3VnaAp3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhIHBhcmFtZXRlciB0aGF0IGRvZXMgaW1wbGVtZW50IGBEZWJ1Z2AsIHRoZSBjb21waWxlcgpzdGlsbCByZWplY3RzIHRoZSBmdW5jdGlvbi4gSXQgbXVzdCB3b3JrIHdpdGggYWxsIHBvc3NpYmxlIGlucHV0IHR5cGVzLiBJbgpvcmRlciB0byBtYWtlIHRoaXMgZXhhbXBsZSBjb21waWxlLCB3ZSBuZWVkIHRvIHJlc3RyaWN0IHRoZSBnZW5lcmljIHR5cGUgd2UncmUKYWNjZXB0aW5nOgoKYGBgCnVzZSBzdGQ6OmZtdDsKCi8vIFJlc3RyaWN0IHRoZSBpbnB1dCB0eXBlIHRvIHR5cGVzIHRoYXQgaW1wbGVtZW50IERlYnVnLgpmbiBzb21lX2Z1bmM8VDogZm10OjpEZWJ1Zz4oZm9vOiBUKSB7CiAgICBwcmludGxuISgiezo/fSIsIGZvbyk7Cn0KCmZuIG1haW4oKSB7CiAgICAvLyBDYWxsaW5nIHRoZSBtZXRob2QgaXMgc3RpbGwgZmluZSwgYXMgaTMyIGltcGxlbWVudHMgRGVidWcuCiAgICBzb21lX2Z1bmMoNWkzMik7CgogICAgLy8gVGhpcyB3b3VsZCBmYWlsIHRvIGNvbXBpbGUgbm93OgogICAgLy8gc3RydWN0IFdpdGhvdXREZWJ1ZzsKICAgIC8vIHNvbWVfZnVuYyhXaXRob3V0RGVidWcpOwp9CmBgYAoKUnVzdCBvbmx5IGxvb2tzIGF0IHRoZSBzaWduYXR1cmUgb2YgdGhlIGNhbGxlZCBmdW5jdGlvbiwgYXMgc3VjaCBpdCBtdXN0CmFscmVhZHkgc3BlY2lmeSBhbGwgcmVxdWlyZW1lbnRzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBldmVyeSB0eXBlIHBhcmFtZXRlci4KRTAyODEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdHJpZWQgdG8gc3VwcGx5IGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBzb21lIHRyYWl0IGluIGEgbG9jYXRpb24Kd2hpY2ggZXhwZWN0ZWQgdGhhdCB0cmFpdC4gVGhpcyBlcnJvciB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gd29ya2luZyB3aXRoCmBGbmAtYmFzZWQgdHlwZXMuIEVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gZm9vPEY6IEZuKHVzaXplKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gdHlwZSBtaXNtYXRjaDogLi4uIGltcGxlbWVudHMgdGhlIHRyYWl0IGBjb3JlOjpvcHM6OkZuPChTdHJpbmcsKT5gLAogICAgLy8gYnV0IHRoZSB0cmFpdCBgY29yZTo6b3BzOjpGbjwodXNpemUsKT5gIGlzIHJlcXVpcmVkCiAgICAvLyBbRTAyODFdCiAgICBmb28ofHk6IFN0cmluZ3wgeyB9KTsKfQpgYGAKClRoZSBpc3N1ZSBpbiB0aGlzIGNhc2UgaXMgdGhhdCBgZm9vYCBpcyBkZWZpbmVkIGFzIGFjY2VwdGluZyBhIGBGbmAgd2l0aCBvbmUKYXJndW1lbnQgb2YgdHlwZSBgU3RyaW5nYCwgYnV0IHRoZSBjbG9zdXJlIHdlIGF0dGVtcHRlZCB0byBwYXNzIHRvIGl0IHJlcXVpcmVzCm9uZSBhcmd1bWVudHMgb2YgdHlwZSBgdXNpemVgLgpFMDI4MlRoZSBjb21waWxlciBjb3VsZCBub3QgaW5mZXIgYSB0eXBlIGFuZCBhc2tlZCBmb3IgYSB0eXBlIGFubm90YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgyCmxldCB4ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHR5cGUgaW5mZXJlbmNlIGRpZCBub3QgcmVzdWx0IGluIG9uZSB1bmlxdWUgcG9zc2libGUKdHlwZSwgYW5kIGV4dHJhIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLiBJbiBtb3N0IGNhc2VzIHRoaXMgY2FuIGJlIHByb3ZpZGVkCmJ5IGFkZGluZyBhIHR5cGUgYW5ub3RhdGlvbi4gU29tZXRpbWVzIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBnZW5lcmljIHR5cGUKcGFyYW1ldGVyIG1hbnVhbGx5LgoKQSBjb21tb24gZXhhbXBsZSBpcyB0aGUgYGNvbGxlY3RgIG1ldGhvZCBvbiBgSXRlcmF0b3JgLiBJdCBoYXMgYSBnZW5lcmljIHR5cGUKcGFyYW1ldGVyIHdpdGggYSBgRnJvbUl0ZXJhdG9yYCBib3VuZCwgd2hpY2ggZm9yIGEgYGNoYXJgIGl0ZXJhdG9yIGlzCmltcGxlbWVudGVkIGJ5IGBWZWNgIGFuZCBgU3RyaW5nYCBhbW9uZyBvdGhlcnMuIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc25pcHBldAp0aGF0IHJldmVyc2VzIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3RyaW5nOgoKSW4gdGhlIGZpcnN0IGNvZGUgZXhhbXBsZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBpbmZlciB3aGF0IHRoZSB0eXBlIG9mIGB4YCBzaG91bGQKYmU6IGBWZWM8Y2hhcj5gIGFuZCBgU3RyaW5nYCBhcmUgYm90aCBzdWl0YWJsZSBjYW5kaWRhdGVzLiBUbyBzcGVjaWZ5IHdoaWNoIHR5cGUKdG8gdXNlLCB5b3UgY2FuIHVzZSBhIHR5cGUgYW5ub3RhdGlvbiBvbiBgeGA6CgpgYGAKbGV0IHg6IFZlYzxjaGFyPiA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0KCk7CmBgYAoKSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBhbm5vdGF0ZSB0aGUgZnVsbCB0eXBlLiBPbmNlIHRoZSBhbWJpZ3VpdHkgaXMgcmVzb2x2ZWQsCnRoZSBjb21waWxlciBjYW4gaW5mZXIgdGhlIHJlc3Q6CgpgYGAKbGV0IHg6IFZlYzxfPiA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0KCk7CmBgYAoKQW5vdGhlciB3YXkgdG8gcHJvdmlkZSB0aGUgY29tcGlsZXIgd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24sIGlzIHRvIHNwZWNpZnkgdGhlCmdlbmVyaWMgdHlwZSBwYXJhbWV0ZXI6CgpgYGAKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdDo6PFZlYzxjaGFyPj4oKTsKYGBgCgpBZ2FpbiwgeW91IG5lZWQgbm90IHNwZWNpZnkgdGhlIGZ1bGwgdHlwZSBpZiB0aGUgY29tcGlsZXIgY2FuIGluZmVyIGl0OgoKYGBgCmxldCB4ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CmBgYAoKQXBhcnQgZnJvbSBhIG1ldGhvZCBvciBmdW5jdGlvbiB3aXRoIGEgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlciwgdGhpcyBlcnJvciBjYW4Kb2NjdXIgd2hlbiBhIHR5cGUgcGFyYW1ldGVyIG9mIGEgc3RydWN0IG9yIHRyYWl0IGNhbm5vdCBiZSBpbmZlcnJlZC4gSW4gdGhhdApjYXNlIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gdXNlIGEgdHlwZSBhbm5vdGF0aW9uLCBiZWNhdXNlIGFsbCBjYW5kaWRhdGVzCmhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUuIEZvciBpbnN0YW5jZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI4MgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIG51bTogVCwKfQoKaW1wbDxUPiBGb288VD4gewogICAgZm4gYmFyKCkgLT4gaTMyIHsKICAgICAgICAwCiAgICB9CgogICAgZm4gYmF6KCkgewogICAgICAgIGxldCBudW1iZXIgPSBGb286OmJhcigpOwogICAgfQp9CmBgYAoKVGhpcyB3aWxsIGZhaWwgYmVjYXVzZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyB3aGljaCBpbnN0YW5jZSBvZiBgRm9vYCB0bwpjYWxsIGBiYXJgIG9uLiBDaGFuZ2UgYEZvbzo6YmFyKClgIHRvIGBGb286OjxUPjo6YmFyKClgIHRvIHJlc29sdmUgdGhlIGVycm9yLgpFMDI4M0FuIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBjaG9zZW4gdW5hbWJpZ3VvdXNseSBiZWNhdXNlIG9mIGxhY2sgb2YgaW5mb3JtYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgzCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBJbXBsOwoKaW1wbCBHZW5lcmF0b3IgZm9yIEltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMSB9Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBjb250OiB1MzIgPSBHZW5lcmF0b3I6OmNyZWF0ZSgpOwogICAgLy8gZXJyb3IsIGltcG9zc2libGUgdG8gY2hvb3NlIG9uZSBvZiBHZW5lcmF0b3IgdHJhaXQgaW1wbGVtZW50YXRpb24KICAgIC8vIFNob3VsZCBpdCBiZSBJbXBsIG9yIEFub3RoZXJJbXBsLCBtYXliZSBzb21ldGhpbmcgZWxzZT8KfQpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIHNvbHZlZCBieSBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucyB0aGF0IHByb3ZpZGUgdGhlIG1pc3NpbmcKaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBpbGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzb2x1dGlvbiBpcyB0byB1c2UgYSBjb25jcmV0ZQp0eXBlOgoKYGBgCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW4xID0gQW5vdGhlckltcGw6OmNyZWF0ZSgpOwoKICAgIC8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtZXRob2RzIHdpdGggc2FtZSBuYW1lIChkaWZmZXJlbnQgdHJhaXRzKQogICAgbGV0IGdlbjIgPSA8QW5vdGhlckltcGwgYXMgR2VuZXJhdG9yPjo6Y3JlYXRlKCk7Cn0KYGBgCkUwMjg0VGhpcyBlcnJvciBvY2N1cnMgd2hlbiB0aGUgY29tcGlsZXIgaXMgdW5hYmxlIHRvIHVuYW1iaWd1b3VzbHkgaW5mZXIgdGhlCnJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIGlzIGdlbmVyaWMgb24gcmV0dXJuIHR5cGUsIHN1Y2gKYXMgdGhlIGBjb2xsZWN0YCBtZXRob2QgZm9yIGBJdGVyYXRvcmBzLgoKRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODQKZm4gbWFpbigpIHsKICAgIGxldCBuOiB1MzIgPSAxOwogICAgbGV0IG11dCBkOiB1NjQgPSAyOwogICAgZCA9IGQgKyBuLmludG8oKTsKfQpgYGAKCkhlcmUgd2UgaGF2ZSBhbiBhZGRpdGlvbiBvZiBgZGAgYW5kIGBuLmludG8oKWAuIEhlbmNlLCBgbi5pbnRvKClgIGNhbiByZXR1cm4KYW55IHR5cGUgYFRgIHdoZXJlIGB1NjQ6IEFkZDxUPmAuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYGludG9gIG1ldGhvZCBjYW4KcmV0dXJuIGFueSB0eXBlIHdoZXJlIGB1MzI6IEludG88VD5gLgoKVGhlIGF1dGhvciBvZiB0aGlzIGNvZGUgcHJvYmFibHkgd2FudHMgYGludG8oKWAgdG8gcmV0dXJuIGEgYHU2NGAsIGJ1dCB0aGUKY29tcGlsZXIgY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZXJlIGlzbid0IGFub3RoZXIgdHlwZSBgVGAgd2hlcmUgYm90aApgdTMyOiBJbnRvPFQ+YCBhbmQgYHU2NDogQWRkPFQ+YC4KClRvIHJlc29sdmUgdGhpcyBlcnJvciwgdXNlIGEgY29uY3JldGUgdHlwZSBmb3IgdGhlIGludGVybWVkaWF0ZSBleHByZXNzaW9uOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbjogdTMyID0gMTsKICAgIGxldCBtdXQgZDogdTY0ID0gMjsKICAgIGxldCBtOiB1NjQgPSBuLmludG8oKTsKICAgIGQgPSBkICsgbTsKfQpgYGAKCk5vdGUgdGhhdCB0aGUgdHlwZSBvZiBgdmAgY2FuIG5vdyBiZSBpbmZlcnJlZCBmcm9tIHRoZSB0eXBlIG9mIGB0ZW1wYC4KRTAyOTcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpQYXR0ZXJucyB1c2VkIHRvIGJpbmQgbmFtZXMgbXVzdCBiZSBpcnJlZnV0YWJsZS4gVGhhdCBpcywgdGhleSBtdXN0IGd1YXJhbnRlZQp0aGF0IGEgbmFtZSB3aWxsIGJlIGV4dHJhY3RlZCBpbiBhbGwgY2FzZXMuIEluc3RlYWQgb2YgcGF0dGVybiBtYXRjaGluZyB0aGUKbG9vcCB2YXJpYWJsZSwgY29uc2lkZXIgdXNpbmcgYSBgbWF0Y2hgIG9yIGBpZiBsZXRgIGluc2lkZSB0aGUgbG9vcCBib2R5LiBGb3IKaW5zdGFuY2U6CgpgYGBjb21waWxlX2ZhaWwsRTAwMDUKbGV0IHhzIDogVmVjPE9wdGlvbjxpMzI+PiA9IHZlYyFbU29tZSgxKSwgTm9uZV07CgovLyBUaGlzIGZhaWxzIGJlY2F1c2UgYE5vbmVgIGlzIG5vdCBjb3ZlcmVkLgpmb3IgU29tZSh4KSBpbiB4cyB7CiAgICAvLyAuLi4KfQpgYGAKCk1hdGNoIGluc2lkZSB0aGUgbG9vcCBpbnN0ZWFkOgoKYGBgCmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKZm9yIGl0ZW0gaW4geHMgewogICAgbWF0Y2ggaXRlbSB7CiAgICAgICAgU29tZSh4KSA9PiB7fSwKICAgICAgICBOb25lID0+IHt9LAogICAgfQp9CmBgYAoKT3IgdXNlIGBpZiBsZXRgOgoKYGBgCmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKZm9yIGl0ZW0gaW4geHMgewogICAgaWYgbGV0IFNvbWUoeCkgPSBpdGVtIHsKICAgICAgICAvLyAuLi4KICAgIH0KfQpgYGAKRTAzMDEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNdXRhYmxlIGJvcnJvd3MgYXJlIG5vdCBhbGxvd2VkIGluIHBhdHRlcm4gZ3VhcmRzLCBiZWNhdXNlIG1hdGNoaW5nIGNhbm5vdCBoYXZlCnNpZGUgZWZmZWN0cy4gU2lkZSBlZmZlY3RzIGNvdWxkIGFsdGVyIHRoZSBtYXRjaGVkIG9iamVjdCBvciB0aGUgZW52aXJvbm1lbnQKb24gd2hpY2ggdGhlIG1hdGNoIGRlcGVuZHMgaW4gc3VjaCBhIHdheSwgdGhhdCB0aGUgbWF0Y2ggd291bGQgbm90IGJlCmV4aGF1c3RpdmUuIEZvciBpbnN0YW5jZSwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3QgbWF0Y2ggYW55IGFybSBpZiBtdXRhYmxlCmJvcnJvd3Mgd2VyZSBhbGxvd2VkOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk2Cm1hdGNoIFNvbWUoKCkpIHsKICAgIE5vbmUgPT4geyB9LAogICAgb3B0aW9uIGlmIG9wdGlvbi50YWtlKCkuaXNfbm9uZSgpID0+IHsKICAgICAgICAvKiBpbXBvc3NpYmxlLCBvcHRpb24gaXMgYFNvbWVgICovCiAgICB9LAogICAgU29tZShfKSA9PiB7IH0gLy8gV2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggZmFpbGVkLCB0aGUgb3B0aW9uIGJlY2FtZSBgTm9uZWAuCn0KYGBgCkUwMzAyIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQXNzaWdubWVudHMgYXJlIG5vdCBhbGxvd2VkIGluIHBhdHRlcm4gZ3VhcmRzLCBiZWNhdXNlIG1hdGNoaW5nIGNhbm5vdCBoYXZlCnNpZGUgZWZmZWN0cy4gU2lkZSBlZmZlY3RzIGNvdWxkIGFsdGVyIHRoZSBtYXRjaGVkIG9iamVjdCBvciB0aGUgZW52aXJvbm1lbnQKb24gd2hpY2ggdGhlIG1hdGNoIGRlcGVuZHMgaW4gc3VjaCBhIHdheSwgdGhhdCB0aGUgbWF0Y2ggd291bGQgbm90IGJlCmV4aGF1c3RpdmUuIEZvciBpbnN0YW5jZSwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3QgbWF0Y2ggYW55IGFybSBpZiBhc3NpZ25tZW50cwp3ZXJlIGFsbG93ZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbWF0Y2ggU29tZSgoKSkgewogICAgTm9uZSA9PiB7IH0sCiAgICBvcHRpb24gaWYgeyBvcHRpb24gPSBOb25lOyBmYWxzZSB9ID0+IHsgfSwKICAgIFNvbWUoXykgPT4geyB9IC8vIFdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGZhaWxlZCwgdGhlIG9wdGlvbiBiZWNhbWUgYE5vbmVgLgp9CmBgYApFMDMwMyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClN1Yi1iaW5kaW5ncywgZS5nLiBgcmVmIHggQCBTb21lKHJlZiB5KWAgYXJlIG5vdyBhbGxvd2VkIHVuZGVyCmAjIVtmZWF0dXJlKGJpbmRpbmdzX2FmdGVyX2F0KV1gIGFuZCBjaGVja2VkIHRvIG1ha2Ugc3VyZSB0aGF0Cm1lbW9yeSBzYWZldHkgaXMgdXBoZWxkLgoKLS0tLS0tLS0tLS0tLS0KCkluIGNlcnRhaW4gY2FzZXMgaXQgaXMgcG9zc2libGUgZm9yIHN1Yi1iaW5kaW5ncyB0byB2aW9sYXRlIG1lbW9yeSBzYWZldHkuClVwZGF0ZXMgdG8gdGhlIGJvcnJvdyBjaGVja2VyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUnVzdCBtYXkgcmVtb3ZlIHRoaXMKcmVzdHJpY3Rpb24sIGJ1dCBmb3Igbm93IHBhdHRlcm5zIG11c3QgYmUgcmV3cml0dGVuIHdpdGhvdXQgc3ViLWJpbmRpbmdzLgoKQmVmb3JlOgoKYGBgY29tcGlsZV9mYWlsCm1hdGNoIFNvbWUoImhpIi50b19zdHJpbmcoKSkgewogICAgcmVmIG9wX3N0cmluZ19yZWYgQCBTb21lKHMpID0+IHt9LAogICAgTm9uZSA9PiB7fSwKfQpgYGAKCkFmdGVyOgoKYGBgCm1hdGNoIFNvbWUoImhpIi50b19zdHJpbmcoKSkgewogICAgU29tZShyZWYgcykgPT4gewogICAgICAgIGxldCBvcF9zdHJpbmdfcmVmID0gJlNvbWUocyk7CiAgICAgICAgLy8gLi4uCiAgICB9LAogICAgTm9uZSA9PiB7fSwKfQpgYGAKClRoZSBgb3Bfc3RyaW5nX3JlZmAgYmluZGluZyBoYXMgdHlwZSBgJk9wdGlvbjwmU3RyaW5nPmAgaW4gYm90aCBjYXNlcy4KClNlZSBhbHNvIFtJc3N1ZSAxNDU4N11baXNzdWUtMTQ1ODddLgoKW2lzc3VlLTE0NTg3XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8xNDU4NwpFMDMwN1RoZSBgc2VsZmAgcGFyYW1ldGVyIGluIGEgbWV0aG9kIGhhcyBhbiBpbnZhbGlkICJyZWNlaXZlciB0eXBlIi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDcKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKCk1ldGhvZHMgdGFrZSBhIHNwZWNpYWwgZmlyc3QgcGFyYW1ldGVyLCBvZiB3aGljaCB0aGVyZSBhcmUgdGhyZWUgdmFyaWFudHM6CmBzZWxmYCwgYCZzZWxmYCwgYW5kIGAmbXV0IHNlbGZgLiBUaGVzZSBhcmUgc3ludGFjdGljIHN1Z2FyIGZvcgpgc2VsZjogU2VsZmAsIGBzZWxmOiAmU2VsZmAsIGFuZCBgc2VsZjogJm11dCBTZWxmYCByZXNwZWN0aXZlbHkuCgpgYGAKIyBzdHJ1Y3QgRm9vOwp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwovLyAgICAgICAgIF5eXl5eIGBzZWxmYCBoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSByZWNlaXZlciBvYmplY3QKfQoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KLy8gICAgICAgICBeXl5eXiB0aGUgcmVjZWl2ZXIgdHlwZSBpcyBgJkZvb2AKfQpgYGAKClRoZSB0eXBlIGBTZWxmYCBhY3RzIGFzIGFuIGFsaWFzIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRyYWl0CmltcGxlbWVudGVyLCBvciAicmVjZWl2ZXIgdHlwZSIuIEJlc2lkZXMgdGhlIGFscmVhZHkgbWVudGlvbmVkIGBTZWxmYCwKYCZTZWxmYCBhbmQgYCZtdXQgU2VsZmAgdmFsaWQgcmVjZWl2ZXIgdHlwZXMsIHRoZSBmb2xsb3dpbmcgYXJlIGFsc28gdmFsaWQ6CmBzZWxmOiBCb3g8U2VsZj5gLCBgc2VsZjogUmM8U2VsZj5gLCBgc2VsZjogQXJjPFNlbGY+YCwgYW5kIGBzZWxmOiBQaW48UD5gCih3aGVyZSBQIGlzIG9uZSBvZiB0aGUgcHJldmlvdXMgdHlwZXMgZXhjZXB0IGBTZWxmYCkuIE5vdGUgdGhhdCBgU2VsZmAgY2FuCmFsc28gYmUgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50aW5nIHR5cGUsIGxpa2UgYEZvb2AgaW4gdGhlIGZvbGxvd2luZwpleGFtcGxlOgoKYGBgCiMgc3RydWN0IEZvbzsKIyB0cmFpdCBUcmFpdCB7CiMgICAgIGZuIGZvbygmc2VsZik7CiMgfQppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZGb28pIHt9Cn0KYGBgCgpUaGlzIGVycm9yIHdpbGwgYmUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiB1c2luZyBhbiBpbnZhbGlkIHJlY2VpdmVyIHR5cGUsCmxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA3CiMgc3RydWN0IEZvbzsKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IFRyYWl0IHsKIyAgICAgZm4gZm9vKCZzZWxmKTsKIyB9CmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKClRoZSBuaWdodGx5IGZlYXR1cmUgW0FyYml0cmFyeSBzZWxmIHR5cGVzXVtBU1RdIGV4dGVuZHMgdGhlIGFjY2VwdGVkCnNldCBvZiByZWNlaXZlciB0eXBlcyB0byBhbHNvIGluY2x1ZGUgYW55IHR5cGUgdGhhdCBjYW4gZGVyZWZlcmVuY2UgdG8KYFNlbGZgOgoKYGBgCiMhW2ZlYXR1cmUoYXJiaXRyYXJ5X3NlbGZfdHlwZXMpXQoKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCi8vIEJlY2F1c2UgeW91IGNhbiBkZXJlZmVyZW5jZSBgQmFyYCBpbnRvIGBGb29gLi4uCmltcGwgc3RkOjpvcHM6OkRlcmVmIGZvciBCYXIgewogICAgdHlwZSBUYXJnZXQgPSBGb287CgogICAgZm4gZGVyZWYoJnNlbGYpIC0+ICZGb28gewogICAgICAgICZGb28KICAgIH0KfQoKaW1wbCBGb28gewogICAgZm4gZm9vKHNlbGY6IEJhcikge30KLy8gICAgICAgICBeXl5eXl5eXl4gLi4uaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHJlY2VpdmVyIHR5cGUKfQpgYGAKCltBU1RdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvYXJiaXRyYXJ5LXNlbGYtdHlwZXMuaHRtbApFMDMwOEV4cGVjdGVkIHR5cGUgZGlkIG5vdCBtYXRjaCB0aGUgcmVjZWl2ZWQgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA4CmZuIHBsdXNfb25lKHg6IGkzMikgLT4gaTMyIHsKICAgIHggKyAxCn0KCnBsdXNfb25lKCJOb3QgYSBudW1iZXIiKTsKLy8gICAgICAgXl5eXl5eXl5eXl5eXl4gZXhwZWN0ZWQgYGkzMmAsIGZvdW5kIGAmc3RyYAoKaWYgIk5vdCBhIGJvb2wiIHsKLy8gXl5eXl5eXl5eXl5eIGV4cGVjdGVkIGBib29sYCwgZm91bmQgYCZzdHJgCn0KCmxldCB4OiBmMzIgPSAiTm90IGEgZmxvYXQiOwovLyAgICAgLS0tICAgXl5eXl5eXl5eXl5eXiBleHBlY3RlZCBgZjMyYCwgZm91bmQgYCZzdHJgCi8vICAgICB8Ci8vICAgICBleHBlY3RlZCBkdWUgdG8gdGhpcwpgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gZXhwcmVzc2lvbiB3YXMgdXNlZCBpbiBhIHBsYWNlIHdoZXJlIHRoZSBjb21waWxlcgpleHBlY3RlZCBhbiBleHByZXNzaW9uIG9mIGEgZGlmZmVyZW50IHR5cGUuIEl0IGNhbiBvY2N1ciBpbiBzZXZlcmFsIGNhc2VzLCB0aGUKbW9zdCBjb21tb24gYmVpbmcgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gYW5kIHBhc3NpbmcgYW4gYXJndW1lbnQgd2hpY2ggaGFzIGEKZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgbWF0Y2hpbmcgdHlwZSBpbiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uCkUwMzA5QSBwYXJhbWV0ZXIgdHlwZSBpcyBtaXNzaW5nIGFuIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIGFuZCBtYXkgbm90IGxpdmUgbG9uZwplbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA5Ci8vIFRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIHRoZSBhcHBsaWNhYmxlIGltcGwgb2YKLy8gYFNvbWVUcmFpdGAgKGJlbG93KSByZXF1aXJlcyB0aGF0IGBUOiAnYWAsIGJ1dCB0aGUgc3RydWN0IGRvZXMKLy8gbm90IGhhdmUgYSBtYXRjaGluZyB3aGVyZS1jbGF1c2UuCnN0cnVjdCBGb288J2EsIFQ+IHsKICAgIGZvbzogPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dCwKfQoKdHJhaXQgU29tZVRyYWl0PCdhPiB7CiAgICB0eXBlIE91dHB1dDsKfQoKaW1wbDwnYSwgVD4gU29tZVRyYWl0PCdhPiBmb3IgVAp3aGVyZQogICAgVDogJ2EsCnsKICAgIHR5cGUgT3V0cHV0ID0gdTMyOwp9CmBgYAoKVGhlIHR5cGUgZGVmaW5pdGlvbiBjb250YWlucyBzb21lIGZpZWxkIHdob3NlIHR5cGUgcmVxdWlyZXMgYW4gb3V0bGl2ZXMKYW5ub3RhdGlvbi4gT3V0bGl2ZXMgYW5ub3RhdGlvbnMgKGUuZy4sIGBUOiAnYWApIGFyZSB1c2VkIHRvIGd1YXJhbnRlZSB0aGF0IGFsbAp0aGUgZGF0YSBpbiBgVGAgaXMgdmFsaWQgZm9yIGF0IGxlYXN0IHRoZSBsaWZldGltZSBgJ2FgLiBUaGlzIHNjZW5hcmlvIG1vc3QKY29tbW9ubHkgYXJpc2VzIHdoZW4gdGhlIHR5cGUgY29udGFpbnMgYW4gYXNzb2NpYXRlZCB0eXBlIHJlZmVyZW5jZSBsaWtlCmA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0YCwgYXMgc2hvd24gaW4gdGhlIHByZXZpb3VzIGNvZGUuCgpUaGVyZSwgdGhlIHdoZXJlIGNsYXVzZSBgVDogJ2FgIHRoYXQgYXBwZWFycyBvbiB0aGUgaW1wbCBpcyBub3Qga25vd24gdG8gYmUKc2F0aXNmaWVkIG9uIHRoZSBzdHJ1Y3QuIFRvIG1ha2UgdGhpcyBleGFtcGxlIGNvbXBpbGUsIHlvdSBoYXZlIHRvIGFkZCBhCndoZXJlLWNsYXVzZSBsaWtlIGBUOiAnYWAgdG8gdGhlIHN0cnVjdCBkZWZpbml0aW9uOgoKYGBgCnN0cnVjdCBGb288J2EsIFQ+CndoZXJlCiAgICBUOiAnYSwKewogICAgZm9vOiA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0Cn0KCnRyYWl0IFNvbWVUcmFpdDwnYT4gewogICAgdHlwZSBPdXRwdXQ7Cn0KCmltcGw8J2EsIFQ+IFNvbWVUcmFpdDwnYT4gZm9yIFQKd2hlcmUKICAgIFQ6ICdhLAp7CiAgICB0eXBlIE91dHB1dCA9IHUzMjsKfQpgYGAKRTAzMTBBIHBhcmFtZXRlciB0eXBlIGlzIG1pc3NpbmcgYSBsaWZldGltZSBjb25zdHJhaW50IG9yIGhhcyBhIGxpZmV0aW1lIHRoYXQKZG9lcyBub3QgbGl2ZSBsb25nIGVub3VnaC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMTAKLy8gVGhpcyB3b24ndCBjb21waWxlIGJlY2F1c2UgVCBpcyBub3QgY29uc3RyYWluZWQgdG8gdGhlIHN0YXRpYyBsaWZldGltZQovLyB0aGUgcmVmZXJlbmNlIG5lZWRzCnN0cnVjdCBGb288VD4gewogICAgZm9vOiAmJ3N0YXRpYyBUCn0KYGBgCgpUeXBlIHBhcmFtZXRlcnMgaW4gdHlwZSBkZWZpbml0aW9ucyBoYXZlIGxpZmV0aW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0aGF0CnJlcHJlc2VudCBob3cgbG9uZyB0aGUgZGF0YSBzdG9yZWQgd2l0aGluIHRoZW0gaXMgZ3VhcmFudGVlZCB0byBsaXZlLiBUaGlzCmxpZmV0aW1lIG11c3QgYmUgYXMgbG9uZyBhcyB0aGUgZGF0YSBuZWVkcyB0byBiZSBhbGl2ZSwgYW5kIG1pc3NpbmcgdGhlCmNvbnN0cmFpbnQgdGhhdCBkZW5vdGVzIHRoaXMgd2lsbCBjYXVzZSB0aGlzIGVycm9yLgoKVGhpcyB3aWxsIGNvbXBpbGUsIGJlY2F1c2UgaXQgaGFzIHRoZSBjb25zdHJhaW50IG9uIHRoZSB0eXBlIHBhcmFtZXRlcjoKCmBgYApzdHJ1Y3QgRm9vPFQ6ICdzdGF0aWM+IHsKICAgIGZvbzogJidzdGF0aWMgVAp9CmBgYApFMDMxMlJlZmVyZW5jZSdzIGxpZmV0aW1lIG9mIGJvcnJvd2VkIGNvbnRlbnQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzEyCnB1YiBmbiBvcHRfc3RyPCdhPihtYXliZXN0cjogJidhIE9wdGlvbjxTdHJpbmc+KSAtPiAmJ3N0YXRpYyBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIEludmFsaWQgbGlmZXRpbWUhCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGxlc3NlbiB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUgb3IgZmluZCBhIHdheSB0byBub3QgaGF2ZQp0byB1c2UgdGhpcyByZWZlcmVuY2Ugb3V0c2lkZSBvZiBpdHMgY3VycmVudCBzY29wZSAoYnkgcnVubmluZyB0aGUgY29kZSBkaXJlY3RseQppbiB0aGUgc2FtZSBibG9jayBmb3IgZXhhbXBsZT8pOgoKYGBgCi8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgaXNzdWUgYnkgc3dpdGNoaW5nIGZyb20gInN0YXRpYyIgbGlmZXRpbWUgdG8gJ2EKcHViIGZuIG9wdF9zdHI8J2E+KG1heWJlc3RyOiAmJ2EgT3B0aW9uPFN0cmluZz4pIC0+ICYnYSBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIE9rIQogICAgfQp9CmBgYApFMDMxNkEgYHdoZXJlYCBjbGF1c2UgY29udGFpbnMgYSBuZXN0ZWQgcXVhbnRpZmljYXRpb24gb3ZlciBsaWZldGltZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzE2CnRyYWl0IFRyPCdhLCAnYj4ge30KCmZuIGZvbzxUPih0OiBUKQp3aGVyZQogICAgZm9yPCdhPiAmJ2EgVDogZm9yPCdiPiBUcjwnYSwgJ2I+LCAvLyBlcnJvcjogbmVzdGVkIHF1YW50aWZpY2F0aW9uCnsKfQpgYGAKClJ1c3Qgc3ludGF4IGFsbG93cyBsaWZldGltZSBxdWFudGlmaWNhdGlvbnMgaW4gdHdvIHBsYWNlcyB3aXRoaW4KYHdoZXJlYCBjbGF1c2VzOiBRdWFudGlmeWluZyBvdmVyIHRoZSB0cmFpdCBib3VuZCBvbmx5IChhcyBpbgpgVHk6IGZvcjwnbD4gVHJhaXQ8J2w+YCkgYW5kIHF1YW50aWZ5aW5nIG92ZXIgdGhlIHdob2xlIGNsYXVzZQooYXMgaW4gYGZvcjwnbD4gJidsIFR5OiBUcmFpdDwnbD5gKS4gVXNpbmcgYm90aCBpbiB0aGUgc2FtZSBjbGF1c2UKbGVhZHMgdG8gYSBuZXN0ZWQgbGlmZXRpbWUgcXVhbnRpZmljYXRpb24sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29tcGlsZXMsIGJlY2F1c2UgdGhlIGNsYXVzZSB3aXRoIHRoZSBuZXN0ZWQKcXVhbnRpZmljYXRpb24gaGFzIGJlZW4gcmV3cml0dGVuIHRvIHVzZSBvbmx5IG9uZSBgZm9yPD5gOgoKYGBgCnRyYWl0IFRyPCdhLCAnYj4ge30KCmZuIGZvbzxUPih0OiBUKQp3aGVyZQogICAgZm9yPCdhLCAnYj4gJidhIFQ6IFRyPCdhLCAnYj4sIC8vIG9rCnsKfQpgYGAKRTAzMTdBbiBgaWZgIGV4cHJlc3Npb24gaXMgbWlzc2luZyBhbiBgZWxzZWAgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzE3CmxldCB4ID0gNTsKbGV0IGEgPSBpZiB4ID09IDUgewogICAgMQp9OwpgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYGlmYCBleHByZXNzaW9uIHdpdGhvdXQgYW4gYGVsc2VgIGJsb2NrIGlzIHVzZWQgaW4gYQpjb250ZXh0IHdoZXJlIGEgdHlwZSBvdGhlciB0aGFuIGAoKWAgaXMgZXhwZWN0ZWQuIEluIHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUsCnRoZSBgbGV0YCBleHByZXNzaW9uIHdhcyBleHBlY3RpbmcgYSB2YWx1ZSBidXQgc2luY2UgdGhlcmUgd2FzIG5vIGBlbHNlYCwgbm8KdmFsdWUgd2FzIHJldHVybmVkLgoKQW4gYGlmYCBleHByZXNzaW9uIHdpdGhvdXQgYW4gYGVsc2VgIGJsb2NrIGhhcyB0aGUgdHlwZSBgKClgLCBzbyB0aGlzIGlzIGEgdHlwZQplcnJvci4gVG8gcmVzb2x2ZSBpdCwgYWRkIGFuIGBlbHNlYCBibG9jayBoYXZpbmcgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYGlmYApibG9jay4KClNvIHRvIGZpeCB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlOgoKYGBgCmxldCB4ID0gNTsKbGV0IGEgPSBpZiB4ID09IDUgewogICAgMQp9IGVsc2UgewogICAgMgp9OwpgYGAKRTAzMjFBIGNyb3NzLWNyYXRlIG9wdC1vdXQgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIHNvbWV0aGluZyB3aGljaCB3YXNuJ3QgYSBzdHJ1Y3QKb3IgZW51bSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyMQojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnN0cnVjdCBGb287CgppbXBsICFTeW5jIGZvciBGb28ge30KCnVuc2FmZSBpbXBsIFNlbmQgZm9yICYnc3RhdGljIEZvbyB7fQovLyBlcnJvcjogY3Jvc3MtY3JhdGUgdHJhaXRzIHdpdGggYSBkZWZhdWx0IGltcGwsIGxpa2UgYGNvcmU6Om1hcmtlcjo6U2VuZGAsCi8vICAgICAgICBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgYSBzdHJ1Y3QvZW51bSB0eXBlLCBub3QKLy8gICAgICAgIGAmJ3N0YXRpYyBGb29gCmBgYAoKT25seSBzdHJ1Y3RzIGFuZCBlbnVtcyBhcmUgcGVybWl0dGVkIHRvIGltcGwgU2VuZCwgU3luYywgYW5kIG90aGVyIG9wdC1vdXQKdHJhaXQsIGFuZCB0aGUgc3RydWN0IG9yIGVudW0gbXVzdCBiZSBsb2NhbCB0byB0aGUgY3VycmVudCBjcmF0ZS4gU28sIGZvcgpleGFtcGxlLCBgdW5zYWZlIGltcGwgU2VuZCBmb3IgUmM8Rm9vPmAgaXMgbm90IGFsbG93ZWQuCkUwMzIyVGhlIGBTaXplZGAgdHJhaXQgd2FzIGltcGxlbWVudGVkIGV4cGxpY2l0bHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIyCnN0cnVjdCBGb287CgppbXBsIFNpemVkIGZvciBGb28ge30gLy8gZXJyb3IhCmBgYAoKVGhlIGBTaXplZGAgdHJhaXQgaXMgYSBzcGVjaWFsIHRyYWl0IGJ1aWx0LWluIHRvIHRoZSBjb21waWxlciBmb3IgdHlwZXMgd2l0aCBhCmNvbnN0YW50IHNpemUga25vd24gYXQgY29tcGlsZS10aW1lLiBUaGlzIHRyYWl0IGlzIGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQKZm9yIHR5cGVzIGFzIG5lZWRlZCBieSB0aGUgY29tcGlsZXIsIGFuZCBpdCBpcyBjdXJyZW50bHkgZGlzYWxsb3dlZCB0bwpleHBsaWNpdGx5IGltcGxlbWVudCBpdCBmb3IgYSB0eXBlLgpFMDMyM0FuIGFzc29jaWF0ZWQgY29uc3Qgd2FzIGltcGxlbWVudGVkIHdoZW4gYW5vdGhlciB0cmFpdCBpdGVtIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjMKdHJhaXQgRm9vIHsKICAgIHR5cGUgTjsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7CiAgICAvLyBlcnJvcjogaXRlbSBgTmAgaXMgYW4gYXNzb2NpYXRlZCBjb25zdCwgd2hpY2ggZG9lc24ndCBtYXRjaCBpdHMKICAgIC8vICAgICAgICB0cmFpdCBgPEJhciBhcyBGb28+YAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBhc3NvY2lhdGVkIGNvbnN0IHdhc24ndCBtaXNzcGVsbGVkIGFuZCB0aGUgY29ycmVjdCB0cmFpdAp3YXMgaW1wbGVtZW50ZWQuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgdHlwZSBOID0gdTMyOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsgLy8gb2shCn0KYGBgCkUwMzI0QSBtZXRob2Qgd2FzIGltcGxlbWVudGVkIHdoZW4gYW5vdGhlciB0cmFpdCBpdGVtIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjQKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwoKICAgIGZuIE0oKTsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBOKCkge30KICAgIC8vIGVycm9yOiBpdGVtIGBOYCBpcyBhbiBhc3NvY2lhdGVkIG1ldGhvZCwgd2hpY2ggZG9lc24ndCBtYXRjaCBpdHMKICAgIC8vICAgICAgICB0cmFpdCBgPEJhciBhcyBGb28+YAp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgbWV0aG9kIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kCnZlcmlmeSB0aGF0IHlvdSBhcmUgaW5kZWVkIGltcGxlbWVudGluZyB0aGUgY29ycmVjdCB0cmFpdCBpdGVtcy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7CgogICAgZm4gTSgpOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOwoKICAgIGZuIE0oKSB7fSAvLyBvayEKfQpgYGAKRTAzMjVBbiBhc3NvY2lhdGVkIHR5cGUgd2FzIGltcGxlbWVudGVkIHdoZW4gYW5vdGhlciB0cmFpdCBpdGVtIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjUKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsKICAgIC8vIGVycm9yOiBpdGVtIGBOYCBpcyBhbiBhc3NvY2lhdGVkIHR5cGUsIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggaXRzCiAgICAvLyAgICAgICAgdHJhaXQgYDxCYXIgYXMgRm9vPmAKfQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgYXNzb2NpYXRlZCB0eXBlIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIHlvdXIKaW1wbGVtZW50YXRpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRyYWl0IGRlZmluaXRpb24uIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgdHlwZSBOID0gdTMyOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsgLy8gb2shCn0KYGBgCkUwMzI2QW4gaW1wbGVtZW50YXRpb24gb2YgYSB0cmFpdCBkb2Vzbid0IG1hdGNoIHRoZSB0eXBlIGNvbnN0cmFpbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI2CnRyYWl0IEZvbyB7CiAgICBjb25zdCBCQVI6IGJvb2w7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IEJBUjogdTMyID0gNTsgLy8gZXJyb3IsIGV4cGVjdGVkIGJvb2wsIGZvdW5kIHUzMgp9CmBgYAoKVGhlIHR5cGVzIG9mIGFueSBhc3NvY2lhdGVkIGNvbnN0YW50cyBpbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uIG11c3QgbWF0Y2ggdGhlCnR5cGVzIGluIHRoZSB0cmFpdCBkZWZpbml0aW9uLgpFMDMyOFRoZSBVbnNpemUgdHJhaXQgc2hvdWxkIG5vdCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseS4gQWxsIGltcGxlbWVudGF0aW9ucyBvZgpVbnNpemUgYXJlIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvbXBpbGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyOAojIVtmZWF0dXJlKHVuc2l6ZSldCgp1c2Ugc3RkOjptYXJrZXI6OlVuc2l6ZTsKCnB1YiBzdHJ1Y3QgTXlUeXBlOwoKaW1wbDxUPiBVbnNpemU8VD4gZm9yIE15VHlwZSB7fQpgYGAKCklmIHlvdSBhcmUgZGVmaW5pbmcgeW91ciBvd24gc21hcnQgcG9pbnRlciB0eXBlIGFuZCB3b3VsZCBsaWtlIHRvIGVuYWJsZQpjb252ZXJzaW9uIGZyb20gYSBzaXplZCB0byBhbiB1bnNpemVkIHR5cGUgd2l0aCB0aGUKW0RTVCBjb2VyY2lvbiBzeXN0ZW1dW1JGQyA5ODJdLCB1c2UgW2BDb2VyY2VVbnNpemVkYF0gaW5zdGVhZC4KCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnB1YiBzdHJ1Y3QgTXlUeXBlPFQ6ID9TaXplZD4gewogICAgZmllbGRfd2l0aF91bnNpemVkX3R5cGU6IFQsCn0KCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxNeVR5cGU8VT4+IGZvciBNeVR5cGU8VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpbUkZDIDk4Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzA5ODItZHN0LWNvZXJjaW9uLm1kCltgQ29lcmNlVW5zaXplZGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9vcHMvdHJhaXQuQ29lcmNlVW5zaXplZC5odG1sCkUwMzI5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhY2Nlc3MgYW4gYXNzb2NpYXRlZCBjb25zdGFudCB0aHJvdWdoIGVpdGhlciBhIGdlbmVyaWMKdHlwZSBwYXJhbWV0ZXIgb3IgYFNlbGZgLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBBbiBleGFtcGxlIGNhdXNpbmcgdGhpcwplcnJvciBpcyBzaG93biBiZWxvdzoKCmBgYAp0cmFpdCBGb28gewogICAgY29uc3QgQkFSOiBmNjQ7Cn0KCnN0cnVjdCBNeVN0cnVjdDsKCmltcGwgRm9vIGZvciBNeVN0cnVjdCB7CiAgICBjb25zdCBCQVI6IGY2NCA9IDBmNjQ7Cn0KCmZuIGdldF9iYXJfYmFkPEY6IEZvbz4odDogRikgLT4gZjY0IHsKICAgIEY6OkJBUgp9CmBgYAoKQ3VycmVudGx5LCB0aGUgdmFsdWUgb2YgYEJBUmAgZm9yIGEgcGFydGljdWxhciB0eXBlIGNhbiBvbmx5IGJlIGFjY2Vzc2VkCnRocm91Z2ggYSBjb25jcmV0ZSB0eXBlLCBhcyBzaG93biBiZWxvdzoKCmBgYAp0cmFpdCBGb28gewogICAgY29uc3QgQkFSOiBmNjQ7Cn0KCnN0cnVjdCBNeVN0cnVjdDsKCmltcGwgRm9vIGZvciBNeVN0cnVjdCB7CiAgICBjb25zdCBCQVI6IGY2NCA9IDBmNjQ7Cn0KCmZuIGdldF9iYXJfZ29vZCgpIC0+IGY2NCB7CiAgICA8TXlTdHJ1Y3QgYXMgRm9vPjo6QkFSCn0KYGBgCkUwMzY0UHJpdmF0ZSBpdGVtcyBjYW5ub3QgYmUgcHVibGljbHkgcmUtZXhwb3J0ZWQuIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgeW91CmF0dGVtcHRlZCB0byBgcHViIHVzZWAgYSB0eXBlIG9yIHZhbHVlIHRoYXQgd2FzIG5vdCBpdHNlbGYgcHVibGljLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NAptb2QgYSB7CiAgICBmbiBmb28oKSB7fQoKICAgIG1vZCBhIHsKICAgICAgICBwdWIgdXNlIHN1cGVyOjpmb287IC8vIGVycm9yIQogICAgfQp9CmBgYAoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgaXRlbXMgdGhhdCB5b3UgYXJlCnJlLWV4cG9ydGluZyBhcmUgdGhlbXNlbHZlcyBtYXJrZWQgd2l0aCBgcHViYDoKCmBgYAptb2QgYSB7CiAgICBwdWIgZm4gZm9vKCkge30gLy8gb2shCgogICAgbW9kIGEgewogICAgICAgIHB1YiB1c2Ugc3VwZXI6OmZvbzsKICAgIH0KfQpgYGAKClNlZSB0aGUgW1VzZSBEZWNsYXJhdGlvbnNdW3VzZS1kZWNsYXJhdGlvbnNdIHNlY3Rpb24gb2YgdGhlIHJlZmVyZW5jZSBmb3IKbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLgoKW3VzZS1kZWNsYXJhdGlvbnNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy91c2UtZGVjbGFyYXRpb25zLmh0bWwKRTAzNjVQcml2YXRlIG1vZHVsZXMgY2Fubm90IGJlIHB1YmxpY2x5IHJlLWV4cG9ydGVkLiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHlvdQphdHRlbXB0ZWQgdG8gYHB1YiB1c2VgIGEgbW9kdWxlIHRoYXQgd2FzIG5vdCBpdHNlbGYgcHVibGljLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NQptb2QgZm9vIHsKICAgIHB1YiBjb25zdCBYOiB1MzIgPSAxOwp9CgpwdWIgdXNlIGZvbyBhcyBmb28yOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgbW9kdWxlIHRoYXQgeW91IGFyZQpyZS1leHBvcnRpbmcgaXMgaXRzZWxmIG1hcmtlZCB3aXRoIGBwdWJgOgoKYGBgCnB1YiBtb2QgZm9vIHsKICAgIHB1YiBjb25zdCBYOiB1MzIgPSAxOwp9CgpwdWIgdXNlIGZvbyBhcyBmb28yOwoKZm4gbWFpbigpIHt9CmBgYAoKU2VlIHRoZSBbVXNlIERlY2xhcmF0aW9uc11bdXNlLWRlY2xhcmF0aW9uc10gc2VjdGlvbiBvZiB0aGUgcmVmZXJlbmNlIGZvcgptb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMuCgpbdXNlLWRlY2xhcmF0aW9uc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2l0ZW1zL3VzZS1kZWNsYXJhdGlvbnMuaHRtbApFMDM2NkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wbGVtZW50IGBEcm9wYCBvbiBhIGNvbmNyZXRlIHNwZWNpYWxpemF0aW9uIG9mIGEKZ2VuZXJpYyB0eXBlLiBBbiBleGFtcGxlIGlzIHNob3duIGJlbG93OgoKYGBgY29tcGlsZV9mYWlsLEUwMzY2CnN0cnVjdCBGb288VD4gewogICAgdDogVAp9CgppbXBsIERyb3AgZm9yIEZvbzx1MzI+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYAoKVGhpcyBjb2RlIGlzIG5vdCBsZWdhbDogaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpYWxpemUgYERyb3BgIHRvIGEgc3Vic2V0IG9mCmltcGxlbWVudGF0aW9ucyBvZiBhIGdlbmVyaWMgdHlwZS4gT25lIHdvcmthcm91bmQgZm9yIHRoaXMgaXMgdG8gd3JhcCB0aGUKZ2VuZXJpYyB0eXBlLCBhcyBzaG93biBiZWxvdzoKCmBgYApzdHJ1Y3QgRm9vPFQ+IHsKICAgIHQ6IFQKfQoKc3RydWN0IEJhciB7CiAgICB0OiBGb288dTMyPgp9CgppbXBsIERyb3AgZm9yIEJhciB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKRTAzNjdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGltcGxlbWVudCBgRHJvcGAgb24gYSBzcGVjaWFsaXphdGlvbiBvZiBhIGdlbmVyaWMgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjcKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgTXlTdHJ1Y3Q8VD4gewogICAgdDogVAp9CgppbXBsPFQ6IEZvbz4gRHJvcCBmb3IgTXlTdHJ1Y3Q8VD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgpUaGlzIGNvZGUgaXMgbm90IGxlZ2FsOiBpdCBpcyBub3QgcG9zc2libGUgdG8gc3BlY2lhbGl6ZSBgRHJvcGAgdG8gYSBzdWJzZXQgb2YKaW1wbGVtZW50YXRpb25zIG9mIGEgZ2VuZXJpYyB0eXBlLiBJbiBvcmRlciBmb3IgdGhpcyBjb2RlIHRvIHdvcmssIGBNeVN0cnVjdGAKbXVzdCBhbHNvIHJlcXVpcmUgdGhhdCBgVGAgaW1wbGVtZW50cyBgRm9vYC4gQWx0ZXJuYXRpdmVseSwgYW5vdGhlciBvcHRpb24gaXMKdG8gd3JhcCB0aGUgZ2VuZXJpYyB0eXBlIGluIGFub3RoZXIgdGhhdCBzcGVjaWFsaXplcyBhcHByb3ByaWF0ZWx5OgoKYGBgCnRyYWl0IEZvb3t9CgpzdHJ1Y3QgTXlTdHJ1Y3Q8VD4gewogICAgdDogVAp9CgpzdHJ1Y3QgTXlTdHJ1Y3RXcmFwcGVyPFQ6IEZvbz4gewogICAgdDogTXlTdHJ1Y3Q8VD4KfQoKaW1wbCA8VDogRm9vPiBEcm9wIGZvciBNeVN0cnVjdFdyYXBwZXI8VD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCkUwMzY4QSBiaW5hcnkgYXNzaWdubWVudCBvcGVyYXRvciBsaWtlIGArPWAgb3IgYF49YCB3YXMgYXBwbGllZCB0byBhIHR5cGUgdGhhdApkb2Vzbid0IHN1cHBvcnQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY4CmxldCBtdXQgeCA9IDEyZjMyOyAvLyBlcnJvcjogYmluYXJ5IG9wZXJhdGlvbiBgPDxgIGNhbm5vdCBiZSBhcHBsaWVkIHRvCiAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdHlwZSBgZjMyYAoKeCA8PD0gMjsKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGNoZWNrIHRoYXQgdGhpcyB0eXBlIGltcGxlbWVudHMgdGhpcyBiaW5hcnkKb3BlcmF0aW9uLiBFeGFtcGxlOgoKYGBgCmxldCBtdXQgeCA9IDEydTMyOyAvLyB0aGUgYHUzMmAgdHlwZSBkb2VzIGltcGxlbWVudCB0aGUgYFNobEFzc2lnbmAgdHJhaXQKCnggPDw9IDI7IC8vIG9rIQpgYGAKCkl0IGlzIGFsc28gcG9zc2libGUgdG8gb3ZlcmxvYWQgbW9zdCBvcGVyYXRvcnMgZm9yIHlvdXIgb3duIHR5cGUgYnkKaW1wbGVtZW50aW5nIHRoZSBgW09QXUFzc2lnbmAgdHJhaXRzIGZyb20gYHN0ZDo6b3BzYC4KCkFub3RoZXIgcHJvYmxlbSB5b3UgbWlnaHQgYmUgZmFjaW5nIGlzIHRoaXM6IHN1cHBvc2UgeW91J3ZlIG92ZXJsb2FkZWQgdGhlIGArYApvcGVyYXRvciBmb3Igc29tZSB0eXBlIGBGb29gIGJ5IGltcGxlbWVudGluZyB0aGUgYHN0ZDo6b3BzOjpBZGRgIHRyYWl0IGZvcgpgRm9vYCwgYnV0IHlvdSBmaW5kIHRoYXQgdXNpbmcgYCs9YCBkb2VzIG5vdCB3b3JrLCBhcyBpbiB0aGlzIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjgKdXNlIHN0ZDo6b3BzOjpBZGQ7CgpzdHJ1Y3QgRm9vKHUzMik7CgppbXBsIEFkZCBmb3IgRm9vIHsKICAgIHR5cGUgT3V0cHV0ID0gRm9vOwoKICAgIGZuIGFkZChzZWxmLCByaHM6IEZvbykgLT4gRm9vIHsKICAgICAgICBGb28oc2VsZi4wICsgcmhzLjApCiAgICB9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHg6IEZvbyA9IEZvbyg1KTsKICAgIHggKz0gRm9vKDcpOyAvLyBlcnJvciwgYCs9IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSB0eXBlIGBGb29gCn0KYGBgCgpUaGlzIGlzIGJlY2F1c2UgYEFkZEFzc2lnbmAgaXMgbm90IGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQsIHNvIHlvdSBuZWVkIHRvCm1hbnVhbGx5IGltcGxlbWVudCBpdCBmb3IgeW91ciB0eXBlLgpFMDM2OUEgYmluYXJ5IG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IHN1cHBvcnQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY5CmxldCB4ID0gMTJmMzI7IC8vIGVycm9yOiBiaW5hcnkgb3BlcmF0aW9uIGA8PGAgY2Fubm90IGJlIGFwcGxpZWQgdG8KICAgICAgICAgICAgICAgLy8gICAgICAgIHR5cGUgYGYzMmAKCnggPDwgMjsKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGNoZWNrIHRoYXQgdGhpcyB0eXBlIGltcGxlbWVudHMgdGhpcyBiaW5hcnkKb3BlcmF0aW9uLiBFeGFtcGxlOgoKYGBgCmxldCB4ID0gMTJ1MzI7IC8vIHRoZSBgdTMyYCB0eXBlIGRvZXMgaW1wbGVtZW50IGl0OgogICAgICAgICAgICAgICAvLyBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS9zdGQvb3BzL3RyYWl0LlNobC5odG1sCgp4IDw8IDI7IC8vIG9rIQpgYGAKCkl0IGlzIGFsc28gcG9zc2libGUgdG8gb3ZlcmxvYWQgbW9zdCBvcGVyYXRvcnMgZm9yIHlvdXIgb3duIHR5cGUgYnkKaW1wbGVtZW50aW5nIHRyYWl0cyBmcm9tIGBzdGQ6Om9wc2AuCgpTdHJpbmcgY29uY2F0ZW5hdGlvbiBhcHBlbmRzIHRoZSBzdHJpbmcgb24gdGhlIHJpZ2h0IHRvIHRoZSBzdHJpbmcgb24gdGhlCmxlZnQgYW5kIG1heSByZXF1aXJlIHJlYWxsb2NhdGlvbi4gVGhpcyByZXF1aXJlcyBvd25lcnNoaXAgb2YgdGhlIHN0cmluZwpvbiB0aGUgbGVmdC4gSWYgc29tZXRoaW5nIHNob3VsZCBiZSBhZGRlZCB0byBhIHN0cmluZyBsaXRlcmFsLCBtb3ZlIHRoZQpsaXRlcmFsIHRvIHRoZSBoZWFwIGJ5IGFsbG9jYXRpbmcgaXQgd2l0aCBgdG9fb3duZWQoKWAgbGlrZSBpbgpgIllvdXIgdGV4dCIudG9fb3duZWQoKWAuCkUwMzcwVGhlIG1heGltdW0gdmFsdWUgb2YgYW4gZW51bSB3YXMgcmVhY2hlZCwgc28gaXQgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkKc2V0IGluIHRoZSBuZXh0IGVudW0gdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzcwCiNbcmVwcihpNjQpXQplbnVtIEZvbyB7CiAgICBYID0gMHg3ZmZmZmZmZmZmZmZmZmZmLAogICAgWSwgLy8gZXJyb3I6IGVudW0gZGlzY3JpbWluYW50IG92ZXJmbG93ZWQgb24gdmFsdWUgYWZ0ZXIKICAgICAgIC8vICAgICAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3OiBpNjQ7IHNldCBleHBsaWNpdGx5IHZpYQogICAgICAgLy8gICAgICAgIFkgPSAtOTIyMzM3MjAzNjg1NDc3NTgwOCBpZiB0aGF0IGlzIGRlc2lyZWQgb3V0Y29tZQp9CmBgYAoKVG8gZml4IHRoaXMsIHBsZWFzZSBzZXQgbWFudWFsbHkgdGhlIG5leHQgZW51bSB2YWx1ZSBvciBwdXQgdGhlIGVudW0gdmFyaWFudAp3aXRoIHRoZSBtYXhpbXVtIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIGVudW0uIEV4YW1wbGVzOgoKYGBgCiNbcmVwcihpNjQpXQplbnVtIEZvbyB7CiAgICBYID0gMHg3ZmZmZmZmZmZmZmZmZmZmLAogICAgWSA9IDAsIC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKI1tyZXByKGk2NCldCmVudW0gRm9vIHsKICAgIFkgPSAwLCAvLyBvayEKICAgIFggPSAweDdmZmZmZmZmZmZmZmZmZmYsCn0KYGBgCkUwMzcxQSB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYW5vdGhlciB3aGljaCBhbHJlYWR5IGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MQp0cmFpdCBGb28geyBmbiBmb28oJnNlbGYpIHsgfSB9CnRyYWl0IEJhcjogRm9vIHsgfQp0cmFpdCBCYXo6IEJhciB7IH0KCmltcGwgQmFyIGZvciBCYXogeyB9IC8vIGVycm9yLCBgQmF6YCBpbXBsZW1lbnRzIGBCYXJgIGJ5IGRlZmluaXRpb24KaW1wbCBGb28gZm9yIEJheiB7IH0gLy8gZXJyb3IsIGBCYXpgIGltcGxlbWVudHMgYEJhcmAgd2hpY2ggaW1wbGVtZW50cyBgRm9vYAppbXBsIEJheiBmb3IgQmF6IHsgfSAvLyBlcnJvciwgYEJhemAgKHRyaXZpYWxseSkgaW1wbGVtZW50cyBgQmF6YAppbXBsIEJheiBmb3IgQmFyIHsgfSAvLyBOb3RlOiBUaGlzIGlzIE9LCmBgYAoKV2hlbiBgVHJhaXQyYCBpcyBhIHN1YnRyYWl0IG9mIGBUcmFpdDFgIChmb3IgZXhhbXBsZSwgd2hlbiBgVHJhaXQyYCBoYXMgYQpkZWZpbml0aW9uIGxpa2UgYHRyYWl0IFRyYWl0MjogVHJhaXQxIHsgLi4uIH1gKSwgaXQgaXMgbm90IGFsbG93ZWQgdG8gaW1wbGVtZW50CmBUcmFpdDFgIGZvciBgVHJhaXQyYC4gVGhpcyBpcyBiZWNhdXNlIGBUcmFpdDJgIGFscmVhZHkgaW1wbGVtZW50cyBgVHJhaXQxYCBieQpkZWZpbml0aW9uLCBzbyBpdCBpcyBub3QgdXNlZnVsIHRvIGRvIHRoaXMuCkUwMzczQSBjYXB0dXJlZCB2YXJpYWJsZSBpbiBhIGNsb3N1cmUgbWF5IG5vdCBsaXZlIGxvbmcgZW5vdWdoLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MwpmbiBmb28oKSAtPiBCb3g8Rm4odTMyKSAtPiB1MzI+IHsKICAgIGxldCB4ID0gMHUzMjsKICAgIEJveDo6bmV3KHx5fCB4ICsgeSkKfQpgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSBkYXRhIGNhcHR1cmVkIGJ5IGEgY2xvc3VyZSwKd2hlbiB0aGF0IGRhdGEgbWF5IG5vIGxvbmdlciBleGlzdC4gSXQncyBtb3N0IGNvbW1vbmx5IHNlZW4gd2hlbiBhdHRlbXB0aW5nIHRvCnJldHVybiBhIGNsb3N1cmUgYXMgc2hvd24gaW4gdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZS4KCk5vdGljZSB0aGF0IGB4YCBpcyBzdGFjay1hbGxvY2F0ZWQgYnkgYGZvbygpYC4gQnkgZGVmYXVsdCwgUnVzdCBjYXB0dXJlcwpjbG9zZWQtb3ZlciBkYXRhIGJ5IHJlZmVyZW5jZS4gVGhpcyBtZWFucyB0aGF0IG9uY2UgYGZvbygpYCByZXR1cm5zLCBgeGAgbm8KbG9uZ2VyIGV4aXN0cy4gQW4gYXR0ZW1wdCB0byBhY2Nlc3MgYHhgIHdpdGhpbiB0aGUgY2xvc3VyZSB3b3VsZCB0aHVzIGJlCnVuc2FmZS4KCkFub3RoZXIgc2l0dWF0aW9uIHdoZXJlIHRoaXMgbWlnaHQgYmUgZW5jb3VudGVyZWQgaXMgd2hlbiBzcGF3bmluZyB0aHJlYWRzOgoKYGBgY29tcGlsZV9mYWlsLEUwMzczCmZuIGZvbygpIHsKICAgIGxldCB4ID0gMHUzMjsKICAgIGxldCB5ID0gMXUzMjsKCiAgICBsZXQgdGhyID0gc3RkOjp0aHJlYWQ6OnNwYXduKHx8IHsKICAgICAgICB4ICsgeQogICAgfSk7Cn0KYGBgCgpTaW5jZSBvdXIgbmV3IHRocmVhZCBydW5zIGluIHBhcmFsbGVsLCB0aGUgc3RhY2sgZnJhbWUgY29udGFpbmluZyBgeGAgYW5kIGB5YAptYXkgd2VsbCBoYXZlIGRpc2FwcGVhcmVkIGJ5IHRoZSB0aW1lIHdlIHRyeSB0byB1c2UgdGhlbS4gRXZlbiBpZiB3ZSBjYWxsCmB0aHIuam9pbigpYCB3aXRoaW4gZm9vICh3aGljaCBibG9ja3MgdW50aWwgYHRocmAgaGFzIGNvbXBsZXRlZCwgZW5zdXJpbmcgdGhlCnN0YWNrIGZyYW1lIHdvbid0IGRpc2FwcGVhciksIHdlIHdpbGwgbm90IHN1Y2NlZWQ6IHRoZSBjb21waWxlciBjYW5ub3QgcHJvdmUKdGhhdCB0aGlzIGJlaGF2aW9yIGlzIHNhZmUsIGFuZCBzbyB3b24ndCBsZXQgdXMgZG8gaXQuCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHVzdWFsbHkgdG8gc3dpdGNoIHRvIHVzaW5nIGEgYG1vdmVgIGNsb3N1cmUuClRoaXMgYXBwcm9hY2ggbW92ZXMgKG9yIGNvcGllcywgd2hlcmUgcG9zc2libGUpIGRhdGEgaW50byB0aGUgY2xvc3VyZSwgcmF0aGVyCnRoYW4gdGFraW5nIHJlZmVyZW5jZXMgdG8gaXQuIEZvciBleGFtcGxlOgoKYGBgCmZuIGZvbygpIC0+IEJveDxGbih1MzIpIC0+IHUzMj4gewogICAgbGV0IHggPSAwdTMyOwogICAgQm94OjpuZXcobW92ZSB8eXwgeCArIHkpCn0KYGBgCgpOb3cgdGhhdCB0aGUgY2xvc3VyZSBoYXMgaXRzIG93biBjb3B5IG9mIHRoZSBkYXRhLCB0aGVyZSdzIG5vIG5lZWQgdG8gd29ycnkKYWJvdXQgc2FmZXR5LgoKVGhpcyBlcnJvciBtYXkgYWxzbyBiZSBlbmNvdW50ZXJlZCB3aGlsZSB1c2luZyBgYXN5bmNgIGJsb2NrczoKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MyxlZGl0aW9uMjAxOAp1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKCmFzeW5jIGZuIGYoKSB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM2kzMl07CiAgICBzcGF3bihhc3luYyB7IC8vfiBFUlJPUiBFMDM3MwogICAgICAgIHByaW50bG4hKCJ7Oj99IiwgdikKICAgIH0pOwp9CgpmbiBzcGF3bjxGOiBGdXR1cmUgKyBTZW5kICsgJ3N0YXRpYz4oZnV0dXJlOiBGKSB7CiAgICB1bmltcGxlbWVudGVkISgpCn0KYGBgCgpTaW1pbGFybHkgdG8gY2xvc3VyZXMsIGBhc3luY2AgYmxvY2tzIGFyZSBub3QgZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYW5kIG1heQpjYXB0dXJlIGNsb3NlZC1vdmVyIGRhdGEgYnkgcmVmZXJlbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCmh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9hc3luYy1ib29rLzAzX2FzeW5jX2F3YWl0LzAxX2NoYXB0ZXIuaHRtbC4KRTAzNzRgQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSBmaWVsZCB3aXRoCmFuIHVuc2l6ZWQgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzQKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBpMzIsCn0KCi8vIGVycm9yOiBTdHJ1Y3QgYEZvb2AgaGFzIG5vIHVuc2l6ZWQgZmllbGRzIHRoYXQgbmVlZCBgQ29lcmNlVW5zaXplZGAuCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpBbiBbdW5zaXplZCB0eXBlXVsxXSBpcyBhbnkgdHlwZSB3aGVyZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9yCmFsaWdubWVudCBvZiBhdCBjb21waWxlIHRpbWUuIEFueSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaXMgYWxzbwp1bnNpemVkLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wNC1hZHZhbmNlZC10eXBlcy5odG1sI2R5bmFtaWNhbGx5LXNpemVkLXR5cGVzLWFuZC10aGUtc2l6ZWQtdHJhaXQKCmBDb2VyY2VVbnNpemVkYCBpcyB1c2VkIHRvIGNvZXJjZSBvbmUgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlCmludG8gYW5vdGhlciBzdHJ1Y3QgY29udGFpbmluZyBhIGRpZmZlcmVudCB1bnNpemVkIHR5cGUuIElmIHRoZSBzdHJ1Y3QKZG9lc24ndCBoYXZlIGFueSBmaWVsZHMgb2YgdW5zaXplZCB0eXBlcyB0aGVuIHlvdSBkb24ndCBuZWVkIGV4cGxpY2l0CmNvZXJjaW9uIHRvIGdldCB0aGUgdHlwZXMgeW91IHdhbnQuIFRvIGZpeCB0aGlzIHlvdSBjYW4gZWl0aGVyCm5vdCB0cnkgdG8gaW1wbGVtZW50IGBDb2VyY2VVbnNpemVkYCBvciB5b3UgY2FuIGFkZCBhIGZpZWxkIHRoYXQgaXMKdW5zaXplZCB0byB0aGUgc3RydWN0LgoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKLy8gV2UgZG9uJ3QgbmVlZCB0byBpbXBsIGBDb2VyY2VVbnNpemVkYCBoZXJlLgpzdHJ1Y3QgRm9vIHsKICAgIGE6IGkzMiwKfQoKLy8gV2UgYWRkIHRoZSB1bnNpemVkIHR5cGUgZmllbGQgdG8gdGhlIHN0cnVjdC4Kc3RydWN0IEJhcjxUOiA/U2l6ZWQ+IHsKICAgIGE6IGkzMiwKICAgIGI6IFQsCn0KCi8vIFRoZSBzdHJ1Y3QgaGFzIGFuIHVuc2l6ZWQgZmllbGQgc28gd2UgY2FuIGltcGxlbWVudAovLyBgQ29lcmNlVW5zaXplZGAgZm9yIGl0LgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8QmFyPFU+PiBmb3IgQmFyPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKTm90ZSB0aGF0IGBDb2VyY2VVbnNpemVkYCBpcyBtYWlubHkgdXNlZCBieSBzbWFydCBwb2ludGVycyBsaWtlIGBCb3hgLCBgUmNgCmFuZCBgQXJjYCB0byBiZSBhYmxlIHRvIG1hcmsgdGhhdCB0aGV5IGNhbiBjb2VyY2UgdW5zaXplZCB0eXBlcyB0aGF0IHRoZXkKYXJlIHBvaW50aW5nIGF0LgpFMDM3NWBDb2VyY2VVbnNpemVkYCB3YXMgaW1wbGVtZW50ZWQgb24gYSBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgbW9yZSB0aGFuIG9uZSBmaWVsZAp3aXRoIGFuIHVuc2l6ZWQgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzUKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkLCBVOiA/U2l6ZWQ+IHsKICAgIGE6IGkzMiwKICAgIGI6IFQsCiAgICBjOiBVLAp9CgovLyBlcnJvcjogU3RydWN0IGBGb29gIGhhcyBtb3JlIHRoYW4gb25lIHVuc2l6ZWQgZmllbGQuCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VSwgVD4+IGZvciBGb288VCwgVT4ge30KYGBgCgpBIHN0cnVjdCB3aXRoIG1vcmUgdGhhbiBvbmUgZmllbGQgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgY2Fubm90IGltcGxlbWVudApgQ29lcmNlVW5zaXplZGAuIFRoaXMgb25seSBvY2N1cnMgd2hlbiB5b3UgYXJlIHRyeWluZyB0byBjb2VyY2Ugb25lIG9mIHRoZQp0eXBlcyBpbiB5b3VyIHN0cnVjdCB0byBhbm90aGVyIHR5cGUgaW4gdGhlIHN0cnVjdC4gSW4gdGhpcyBjYXNlIHdlIHRyeSB0bwppbXBsIGBDb2VyY2VVbnNpemVkYCBmcm9tIGBUYCB0byBgVWAgd2hpY2ggYXJlIGJvdGggdHlwZXMgdGhhdCB0aGUgc3RydWN0CnRha2VzLiBBbiBbdW5zaXplZCB0eXBlXVsxXSBpcyBhbnkgdHlwZSB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgdGhlCmxlbmd0aCBvciBhbGlnbm1lbnQgb2YgYXQgY29tcGlsZSB0aW1lLiBBbnkgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlCmlzIGFsc28gdW5zaXplZC4KCmBDb2VyY2VVbnNpemVkYCBvbmx5IGFsbG93cyBmb3IgY29lcmNpb24gZnJvbSBhIHN0cnVjdHVyZSB3aXRoIGEgc2luZ2xlCnVuc2l6ZWQgdHlwZSBmaWVsZCB0byBhbm90aGVyIHN0cnVjdCB3aXRoIGEgc2luZ2xlIHVuc2l6ZWQgdHlwZSBmaWVsZC4KSW4gZmFjdCBSdXN0IG9ubHkgYWxsb3dzIGZvciBhIHN0cnVjdCB0byBoYXZlIG9uZSB1bnNpemVkIHR5cGUgaW4gYSBzdHJ1Y3QKYW5kIHRoYXQgdW5zaXplZCB0eXBlIG11c3QgYmUgdGhlIGxhc3QgZmllbGQgaW4gdGhlIHN0cnVjdC4gU28gaGF2aW5nIHR3bwp1bnNpemVkIHR5cGVzIGluIGEgc2luZ2xlIHN0cnVjdCBpcyBub3QgYWxsb3dlZCBieSB0aGUgY29tcGlsZXIuIFRvIGZpeCB0aGlzCnVzZSBvbmx5IG9uZSBmaWVsZCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZSBpbiB0aGUgc3RydWN0IGFuZCB0aGVuIHVzZQptdWx0aXBsZSBzdHJ1Y3RzIHRvIG1hbmFnZSBlYWNoIHVuc2l6ZWQgdHlwZSBmaWVsZCB5b3UgbmVlZC4KCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAp9CgppbXBsIDxULCBVPiBDb2VyY2VVbnNpemVkPEZvbzxVPj4gZm9yIEZvbzxUPgogICAgd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQoKZm4gY29lcmNlX2ZvbzxUOiBDb2VyY2VVbnNpemVkPFU+LCBVPih0OiBUKSAtPiBGb288VT4gewogICAgRm9vIHsgYTogMTJpMzIsIGI6IHQgfSAvLyB3ZSB1c2UgY29lcmNpb24gdG8gZ2V0IHRoZSBgRm9vPFU+YCB0eXBlIHdlIG5lZWQKfQpgYGAKClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDQtYWR2YW5jZWQtdHlwZXMuaHRtbCNkeW5hbWljYWxseS1zaXplZC10eXBlcy1hbmQtdGhlLXNpemVkLXRyYWl0CkUwMzc2YENvZXJjZVVuc2l6ZWRgIHdhcyBpbXBsZW1lbnRlZCBvbiBzb21ldGhpbmcgdGhhdCBpc24ndCBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzYKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBULAp9CgovLyBlcnJvcjogVGhlIHR5cGUgYFVgIGlzIG5vdCBhIHN0cnVjdAppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8VT4gZm9yIEZvbzxUPiB7fQpgYGAKCmBDb2VyY2VVbnNpemVkYCBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgYSBzdHJ1Y3QuIFVuc2l6ZWQgdHlwZXMgYXJlCmFscmVhZHkgYWJsZSB0byBiZSBjb2VyY2VkIHdpdGhvdXQgYW4gaW1wbGVtZW50YXRpb24gb2YgYENvZXJjZVVuc2l6ZWRgCndoZXJlYXMgYSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgbmVlZHMgdG8ga25vdyB0aGUgdW5zaXplZCB0eXBlCmZpZWxkIGl0J3MgY29udGFpbmluZyBpcyBhYmxlIHRvIGJlIGNvZXJjZWQuIEFuIFt1bnNpemVkIHR5cGVdWzFdCmlzIGFueSB0eXBlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB0aGUgbGVuZ3RoIG9yIGFsaWdubWVudCBvZiBhdApjb21waWxlIHRpbWUuIEFueSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaXMgYWxzbyB1bnNpemVkLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wNC1hZHZhbmNlZC10eXBlcy5odG1sI2R5bmFtaWNhbGx5LXNpemVkLXR5cGVzLWFuZC10aGUtc2l6ZWQtdHJhaXQKClRoZSBgQ29lcmNlVW5zaXplZGAgdHJhaXQgdGFrZXMgYSBzdHJ1Y3QgdHlwZS4gTWFrZSBzdXJlIHRoZSB0eXBlIHlvdSBhcmUKcHJvdmlkaW5nIHRvIGBDb2VyY2VVbnNpemVkYCBpcyBhIHN0cnVjdCB3aXRoIG9ubHkgdGhlIGxhc3QgZmllbGQgY29udGFpbmluZyBhbgp1bnNpemVkIHR5cGUuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGE6IFQsCn0KCi8vIFRoZSBgRm9vPFU+YCBpcyBhIHN0cnVjdCBzbyBgQ29lcmNlVW5zaXplZGAgY2FuIGJlIGltcGxlbWVudGVkCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4gd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCk5vdGUgdGhhdCBpbiBSdXN0LCBzdHJ1Y3RzIGNhbiBvbmx5IGNvbnRhaW4gYW4gdW5zaXplZCB0eXBlIGlmIHRoZSBmaWVsZApjb250YWluaW5nIHRoZSB1bnNpemVkIHR5cGUgaXMgdGhlIGxhc3QgYW5kIG9ubHkgdW5zaXplZCB0eXBlIGZpZWxkIGluIHRoZQpzdHJ1Y3QuCkUwMzc4VGhlIGBEaXNwYXRjaEZyb21EeW5gIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgcG9pbnRlcgpvciBhIG5ld3R5cGUgd3JhcHBlciBhcm91bmQgYSBwb2ludGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3OAojIVtmZWF0dXJlKGRpc3BhdGNoX2Zyb21fZHluKV0KdXNlIHN0ZDo6b3BzOjpEaXNwYXRjaEZyb21EeW47CgpzdHJ1Y3QgV3JhcHBlckV4dHJhRmllbGQ8VD4gewogICAgcHRyOiBULAogICAgZXh0cmFfc3R1ZmY6IGkzMiwKfQoKaW1wbDxULCBVPiBEaXNwYXRjaEZyb21EeW48V3JhcHBlckV4dHJhRmllbGQ8VT4+IGZvciBXcmFwcGVyRXh0cmFGaWVsZDxUPgp3aGVyZQogICAgVDogRGlzcGF0Y2hGcm9tRHluPFU+LAp7fQpgYGAKClRoZSBgRGlzcGF0Y2hGcm9tRHluYCB0cmFpdCBjdXJyZW50bHkgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yCmJ1aWx0aW4gcG9pbnRlciB0eXBlcyBhbmQgc3RydWN0cyB0aGF0IGFyZSBuZXd0eXBlIHdyYXBwZXJzIGFyb3VuZCB0aGVtCuKAlCB0aGF0IGlzLCB0aGUgc3RydWN0IG11c3QgaGF2ZSBvbmx5IG9uZSBmaWVsZCAoZXhjZXB0IGZvcmBQaGFudG9tRGF0YWApLAphbmQgdGhhdCBmaWVsZCBtdXN0IGl0c2VsZiBpbXBsZW1lbnQgYERpc3BhdGNoRnJvbUR5bmAuCgpgYGAKIyFbZmVhdHVyZShkaXNwYXRjaF9mcm9tX2R5biwgdW5zaXplKV0KdXNlIHN0ZDo6ewogICAgbWFya2VyOjpVbnNpemUsCiAgICBvcHM6OkRpc3BhdGNoRnJvbUR5biwKfTsKCnN0cnVjdCBQdHI8VDogP1NpemVkPigqY29uc3QgVCk7CgppbXBsPFQ6ID9TaXplZCwgVTogP1NpemVkPiBEaXNwYXRjaEZyb21EeW48UHRyPFU+PiBmb3IgUHRyPFQ+CndoZXJlCiAgICBUOiBVbnNpemU8VT4sCnt9CmBgYAoKQW5vdGhlciBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoZGlzcGF0Y2hfZnJvbV9keW4pXQp1c2Ugc3RkOjp7CiAgICBvcHM6OkRpc3BhdGNoRnJvbUR5biwKICAgIG1hcmtlcjo6UGhhbnRvbURhdGEsCn07CgpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBwdHI6IFQsCiAgICBfcGhhbnRvbTogUGhhbnRvbURhdGE8KCk+LAp9CgppbXBsPFQsIFU+IERpc3BhdGNoRnJvbUR5bjxXcmFwcGVyPFU+PiBmb3IgV3JhcHBlcjxUPgp3aGVyZQogICAgVDogRGlzcGF0Y2hGcm9tRHluPFU+LAp7fQpgYGAKRTAzNzlBIHRyYWl0IG1ldGhvZCB3YXMgZGVjbGFyZWQgY29uc3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc5CnRyYWl0IEZvbyB7CiAgICBjb25zdCBmbiBiYXIoKSAtPiB1MzI7IC8vIGVycm9yIQp9CmBgYAoKVHJhaXQgbWV0aG9kcyBjYW5ub3QgYmUgZGVjbGFyZWQgYGNvbnN0YCBieSBkZXNpZ24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKW1JGQyA5MTFdLgoKW1JGQyA5MTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC85MTEKRTAzODBBbiBhdXRvIHRyYWl0IHdhcyBkZWNsYXJlZCB3aXRoIGEgbWV0aG9kIG9yIGFuIGFzc29jaWF0ZWQgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODAKdW5zYWZlIGF1dG8gdHJhaXQgVHJhaXQgewogICAgdHlwZSBPdXRwdXQ7IC8vIGVycm9yIQp9CmBgYAoKQXV0byB0cmFpdHMgY2Fubm90IGhhdmUgbWV0aG9kcyBvciBhc3NvY2lhdGVkIGl0ZW1zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKdGhlIFtvcHQtaW4gYnVpbHRpbiB0cmFpdHMgUkZDXVtSRkMgMTldLgoKW1JGQyAxOV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAwMTktb3B0LWluLWJ1aWx0aW4tdHJhaXRzLm1kCkUwMzgxSXQgaXMgbm90IGFsbG93ZWQgdG8gdXNlIG9yIGNhcHR1cmUgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODEKZm4gbWFpbigpIHsKICAgIGxldCB4OiBpMzI7CiAgICBsZXQgeSA9IHg7IC8vIGVycm9yLCB1c2Ugb2YgcG9zc2libHktdW5pbml0aWFsaXplZCB2YXJpYWJsZQp9CmBgYAoKVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IGFueSBkZWNsYXJlZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZwp1c2VkLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgeDogaTMyID0gMDsKICAgIGxldCB5ID0geDsgLy8gb2shCn0KYGBgCkUwMzgyQSB2YXJpYWJsZSB3YXMgdXNlZCBhZnRlciBpdHMgY29udGVudHMgaGF2ZSBiZWVuIG1vdmVkIGVsc2V3aGVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODIKc3RydWN0IE15U3RydWN0IHsgczogdTMyIH0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSBNeVN0cnVjdHsgczogNXUzMiB9OwogICAgbGV0IHkgPSB4OwogICAgeC5zID0gNjsKICAgIHByaW50bG4hKCJ7fSIsIHgucyk7Cn0KYGBgCgpTaW5jZSBgTXlTdHJ1Y3RgIGlzIGEgdHlwZSB0aGF0IGlzIG5vdCBtYXJrZWQgYENvcHlgLCB0aGUgZGF0YSBnZXRzIG1vdmVkIG91dApvZiBgeGAgd2hlbiB3ZSBzZXQgYHlgLiBUaGlzIGlzIGZ1bmRhbWVudGFsIHRvIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtOiBvdXRzaWRlCm9mIHdvcmthcm91bmRzIGxpa2UgYFJjYCwgYSB2YWx1ZSBjYW5ub3QgYmUgb3duZWQgYnkgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KClNvbWV0aW1lcyB3ZSBkb24ndCBuZWVkIHRvIG1vdmUgdGhlIHZhbHVlLiBVc2luZyBhIHJlZmVyZW5jZSwgd2UgY2FuIGxldCBhbm90aGVyCmZ1bmN0aW9uIGJvcnJvdyB0aGUgdmFsdWUgd2l0aG91dCBjaGFuZ2luZyBpdHMgb3duZXJzaGlwLiBJbiB0aGUgZXhhbXBsZSBiZWxvdywKd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBtb3ZlIG91ciBzdHJpbmcgdG8gYGNhbGN1bGF0ZV9sZW5ndGhgLCB3ZSBjYW4gZ2l2ZSBpdAphIHJlZmVyZW5jZSB0byBpdCB3aXRoIGAmYCBpbnN0ZWFkLgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgczEgPSBTdHJpbmc6OmZyb20oImhlbGxvIik7CgogICAgbGV0IGxlbiA9IGNhbGN1bGF0ZV9sZW5ndGgoJnMxKTsKCiAgICBwcmludGxuISgiVGhlIGxlbmd0aCBvZiAne30nIGlzIHt9LiIsIHMxLCBsZW4pOwp9CgpmbiBjYWxjdWxhdGVfbGVuZ3RoKHM6ICZTdHJpbmcpIC0+IHVzaXplIHsKICAgIHMubGVuKCkKfQpgYGAKCkEgbXV0YWJsZSByZWZlcmVuY2UgY2FuIGJlIGNyZWF0ZWQgd2l0aCBgJm11dGAuCgpTb21ldGltZXMgd2UgZG9uJ3Qgd2FudCBhIHJlZmVyZW5jZSwgYnV0IGEgZHVwbGljYXRlLiBBbGwgdHlwZXMgbWFya2VkIGBDbG9uZWAKY2FuIGJlIGR1cGxpY2F0ZWQgYnkgY2FsbGluZyBgLmNsb25lKClgLiBTdWJzZXF1ZW50IGNoYW5nZXMgdG8gYSBjbG9uZSBkbyBub3QKYWZmZWN0IHRoZSBvcmlnaW5hbCB2YXJpYWJsZS4KCk1vc3QgdHlwZXMgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIG1hcmtlZCBgQ2xvbmVgLiBUaGUgZXhhbXBsZSBiZWxvdwpkZW1vbnN0cmF0ZXMgdXNpbmcgYGNsb25lKClgIG9uIGEgc3RyaW5nLiBgczFgIGlzIGZpcnN0IHNldCB0byAibWFueSIsIGFuZCB0aGVuCmNvcGllZCB0byBgczJgLiBUaGVuIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHMxYCBpcyByZW1vdmVkLCB3aXRob3V0IGFmZmVjdGluZwpgczJgLiAiYW55IG1hbnkiIGlzIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuCgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgczEgPSBTdHJpbmc6OmZyb20oIm1hbnkiKTsKICAgIGxldCBzMiA9IHMxLmNsb25lKCk7CiAgICBzMS5yZW1vdmUoMCk7CiAgICBwcmludGxuISgie30ge30iLCBzMSwgczIpOwp9CmBgYAoKSWYgd2UgY29udHJvbCB0aGUgZGVmaW5pdGlvbiBvZiBhIHR5cGUsIHdlIGNhbiBpbXBsZW1lbnQgYENsb25lYCBvbiBpdCBvdXJzZWx2ZXMKd2l0aCBgI1tkZXJpdmUoQ2xvbmUpXWAuCgpTb21lIHR5cGVzIGhhdmUgbm8gb3duZXJzaGlwIHNlbWFudGljcyBhdCBhbGwgYW5kIGFyZSB0cml2aWFsIHRvIGR1cGxpY2F0ZS4gQW4KZXhhbXBsZSBpcyBgaTMyYCBhbmQgdGhlIG90aGVyIG51bWJlciB0eXBlcy4gV2UgZG9uJ3QgaGF2ZSB0byBjYWxsIGAuY2xvbmUoKWAgdG8KY2xvbmUgdGhlbSwgYmVjYXVzZSB0aGV5IGFyZSBtYXJrZWQgYENvcHlgIGluIGFkZGl0aW9uIHRvIGBDbG9uZWAuICBJbXBsaWNpdApjbG9uaW5nIGlzIG1vcmUgY29udmVuaWVudCBpbiB0aGlzIGNhc2UuIFdlIGNhbiBtYXJrIG91ciBvd24gdHlwZXMgYENvcHlgIGlmCmFsbCB0aGVpciBtZW1iZXJzIGFsc28gYXJlIG1hcmtlZCBgQ29weWAuCgpJbiB0aGUgZXhhbXBsZSBiZWxvdywgd2UgaW1wbGVtZW50IGEgYFBvaW50YCB0eXBlLiBCZWNhdXNlIGl0IG9ubHkgc3RvcmVzIHR3bwppbnRlZ2Vycywgd2Ugb3B0LW91dCBvZiBvd25lcnNoaXAgc2VtYW50aWNzIHdpdGggYENvcHlgLiBUaGVuIHdlIGNhbgpgbGV0IHAyID0gcDFgIHdpdGhvdXQgYHAxYCBiZWluZyBtb3ZlZC4KCmBgYAojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBQb2ludCB7IHg6IGkzMiwgeTogaTMyIH0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHAxID0gUG9pbnR7IHg6IC0xLCB5OiAyIH07CiAgICBsZXQgcDIgPSBwMTsKICAgIHAxLnggPSAxOwogICAgcHJpbnRsbiEoInAxOiB7fSwge30iLCBwMS54LCBwMS55KTsKICAgIHByaW50bG4hKCJwMjoge30sIHt9IiwgcDIueCwgcDIueSk7Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB3ZSBkb24ndCBjb250cm9sIHRoZSBzdHJ1Y3QncyBkZWZpbml0aW9uLCBvciBtdXRhYmxlIHNoYXJlZApvd25lcnNoaXAgaXMgdHJ1bHkgcmVxdWlyZWQsIHdlIGNhbiB1c2UgYFJjYCBhbmQgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CnVzZSBzdGQ6OnJjOjpSYzsKCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gUmM6Om5ldyhSZWZDZWxsOjpuZXcoTXlTdHJ1Y3R7IHM6IDV1MzIgfSkpOwogICAgbGV0IHkgPSB4LmNsb25lKCk7CiAgICB4LmJvcnJvd19tdXQoKS5zID0gNjsKICAgIHByaW50bG4hKCJ7fSIsIHguYm9ycm93KCkucyk7Cn0KYGBgCgpXaXRoIHRoaXMgYXBwcm9hY2gsIHggYW5kIHkgc2hhcmUgb3duZXJzaGlwIG9mIHRoZSBkYXRhIHZpYSB0aGUgYFJjYCAocmVmZXJlbmNlCmNvdW50IHR5cGUpLiBgUmVmQ2VsbGAgZXNzZW50aWFsbHkgcGVyZm9ybXMgcnVudGltZSBib3Jyb3cgY2hlY2tpbmc6IGVuc3VyaW5nCnRoYXQgYXQgbW9zdCBvbmUgd3JpdGVyIG9yIG11bHRpcGxlIHJlYWRlcnMgY2FuIGFjY2VzcyB0aGUgZGF0YSBhdCBhbnkgb25lIHRpbWUuCgpJZiB5b3Ugd2lzaCB0byBsZWFybiBtb3JlIGFib3V0IG93bmVyc2hpcCBpbiBSdXN0LCBzdGFydCB3aXRoIHRoZQpbVW5kZXJzdGFuZGluZyBPd25lcnNoaXBdW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXSBjaGFwdGVyIGluIHRoZSBCb29rLgoKW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDAtdW5kZXJzdGFuZGluZy1vd25lcnNoaXAuaHRtbApFMDM4MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHBhcnRpYWxseSByZWluaXRpYWxpemUgYQpzdHJ1Y3R1cmUgdGhhdCBpcyBjdXJyZW50bHkgdW5pbml0aWFsaXplZC4KCkZvciBleGFtcGxlLCB0aGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRyb3AgaGFzIHRha2VuIHBsYWNlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGb28gewogICAgYTogdTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IC8qIC4uLiAqLyB9Cn0KCmxldCBtdXQgeCA9IEZvbyB7IGE6IDEgfTsKZHJvcCh4KTsgLy8gYHhgIGlzIG5vdyB1bmluaXRpYWxpemVkCnguYSA9IDI7IC8vIGVycm9yLCBwYXJ0aWFsIHJlaW5pdGlhbGl6YXRpb24gb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgYHRgCmBgYAoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgZnVsbHkgcmVpbml0aWFsaXppbmcgdGhlIHN0cnVjdHVyZSBpbiBxdWVzdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHUzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyAvKiAuLi4gKi8gfQp9CgpsZXQgbXV0IHggPSBGb28geyBhOiAxIH07CmRyb3AoeCk7CnggPSBGb28geyBhOiAyIH07CmBgYApFMDM4NEFuIGltbXV0YWJsZSB2YXJpYWJsZSB3YXMgcmVhc3NpZ25lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODQKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gMzsKICAgIHggPSA1OyAvLyBlcnJvciwgcmVhc3NpZ25tZW50IG9mIGltbXV0YWJsZSB2YXJpYWJsZQp9CmBgYAoKQnkgZGVmYXVsdCwgdmFyaWFibGVzIGluIFJ1c3QgYXJlIGltbXV0YWJsZS4gVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUga2V5d29yZApgbXV0YCBhZnRlciB0aGUga2V5d29yZCBgbGV0YCB3aGVuIGRlY2xhcmluZyB0aGUgdmFyaWFibGUuIEZvciBleGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSAzOwogICAgeCA9IDU7Cn0KYGBgCkUwMzg2IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbXV0YXRlIHRoZSB0YXJnZXQgb2YgYSBtdXRhYmxlCnJlZmVyZW5jZSBzdG9yZWQgaW5zaWRlIGFuIGltbXV0YWJsZSBjb250YWluZXIuCgpGb3IgZXhhbXBsZSwgdGhpcyBjYW4gaGFwcGVuIHdoZW4gc3RvcmluZyBhIGAmbXV0YCBpbnNpZGUgYW4gaW1tdXRhYmxlIGBCb3hgOgoKYGBgCmxldCBtdXQgeDogaTY0ID0gMTsKbGV0IHk6IEJveDxfPiA9IEJveDo6bmV3KCZtdXQgeCk7CioqeSA9IDI7IC8vIGVycm9yLCBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYW4gaW1tdXRhYmxlIGNvbnRhaW5lcgpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IG1ha2luZyB0aGUgY29udGFpbmVyIG11dGFibGU6CgpgYGAKbGV0IG11dCB4OiBpNjQgPSAxOwpsZXQgbXV0IHk6IEJveDxfPiA9IEJveDo6bmV3KCZtdXQgeCk7CioqeSA9IDI7CmBgYAoKSXQgY2FuIGFsc28gYmUgZml4ZWQgYnkgdXNpbmcgYSB0eXBlIHdpdGggaW50ZXJpb3IgbXV0YWJpbGl0eSwgc3VjaCBhcyBgQ2VsbGAKb3IgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CgpsZXQgeDogaTY0ID0gMTsKbGV0IHk6IEJveDxDZWxsPF8+PiA9IEJveDo6bmV3KENlbGw6Om5ldyh4KSk7Cnkuc2V0KDIpOwpgYGAKRTAzODcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtdXRhdGUgb3IgbXV0YWJseSByZWZlcmVuY2UgZGF0YQp0aGF0IGEgY2xvc3VyZSBoYXMgY2FwdHVyZWQgaW1tdXRhYmx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAovLyBBY2NlcHRzIGEgZnVuY3Rpb24gb3IgYSBjbG9zdXJlIHRoYXQgY2FwdHVyZXMgaXRzIGVudmlyb25tZW50IGltbXV0YWJseS4KLy8gQ2xvc3VyZXMgcGFzc2VkIHRvIGZvbyB3aWxsIG5vdCBiZSBhYmxlIHRvIG11dGF0ZSB0aGVpciBjbG9zZWQtb3ZlciBzdGF0ZS4KZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKLy8gQXR0ZW1wdHMgdG8gbXV0YXRlIGNsb3NlZC1vdmVyIGRhdGEuIEVycm9yIG1lc3NhZ2UgcmVhZHM6Ci8vIGBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYSBjYXB0dXJlZCBvdXRlciB2YXJpYWJsZS4uLmAKZm4gbXV0YWJsZSgpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeCA9IDIpOwp9CgovLyBBdHRlbXB0cyB0byB0YWtlIGEgbXV0YWJsZSByZWZlcmVuY2UgdG8gY2xvc2VkLW92ZXIgZGF0YS4gIEVycm9yIG1lc3NhZ2UKLy8gcmVhZHM6IGBjYW5ub3QgYm9ycm93IGRhdGEgbXV0YWJseSBpbiBhIGNhcHR1cmVkIG91dGVyIHZhcmlhYmxlLi4uYApmbiBtdXRfYWRkcigpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeyBsZXQgeSA9ICZtdXQgeDsgfSk7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgZm9vIGlzIGRlZmluZWQgYXMgYWNjZXB0aW5nIGEgcGFyYW1ldGVyIG9mIHR5cGUgYEZuYC4KQ2xvc3VyZXMgcGFzc2VkIGludG8gZm9vIHdpbGwgdGh1cyBiZSBpbmZlcnJlZCB0byBiZSBvZiB0eXBlIGBGbmAsIG1lYW5pbmcgdGhhdAp0aGV5IGNhcHR1cmUgdGhlaXIgY29udGV4dCBpbW11dGFibHkuCgpJZiB0aGUgZGVmaW5pdGlvbiBvZiBgZm9vYCBpcyB1bmRlciB5b3VyIGNvbnRyb2wsIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0bwpjYXB0dXJlIHRoZSBkYXRhIG11dGFibHkuIFRoaXMgY2FuIGJlIGRvbmUgYnkgZGVmaW5pbmcgYGZvb2AgdG8gdGFrZSBGbk11dApyYXRoZXIgdGhhbiBGbjoKCmBgYApmbiBmb288RjogRm5NdXQoKT4oZjogRikgeyB9CmBgYAoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGNvbnNpZGVyIHVzaW5nIHRoZSBgQ2VsbGAgYW5kIGBSZWZDZWxsYCB0eXBlcyB0byBhY2hpZXZlCmludGVyaW9yIG11dGFiaWxpdHkgdGhyb3VnaCBhIHNoYXJlZCByZWZlcmVuY2UuIE91ciBleGFtcGxlJ3MgYG11dGFibGVgCmZ1bmN0aW9uIGNvdWxkIGJlIHJlZGVmaW5lZCBhcyBiZWxvdzoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKZm4gbXV0YWJsZSgpIHsKICAgIGxldCB4ID0gQ2VsbDo6bmV3KDB1MzIpOwogICAgZm9vKHx8IHguc2V0KDIpKTsKfQpgYGAKCllvdSBjYW4gcmVhZCBtb3JlIGluIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgW0NlbGxdW3N0ZC1jZWxsXS4KCltzdGQtY2VsbF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2NlbGwvCkUwMzg4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgpFMDM4OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbXV0YXRlIGRhdGEgdXNpbmcgYSBub24tbXV0YWJsZSByZWZlcmVuY2UuIFRoaXMKY29tbW9ubHkgb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byBhc3NpZ24gdG8gYSBub24tbXV0YWJsZSByZWZlcmVuY2Ugb2YgYQptdXRhYmxlIHJlZmVyZW5jZSAoYCYoJm11dCBUKWApLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJigmbXV0IGZhbmN5KTsKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBlcnJvcjogY2Fubm90IGFzc2lnbiB0byBkYXRhIGluIGEgYCZgIHJlZmVyZW5jZQogICAgcHJpbnRsbiEoInt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgJm11dCBmYW5jeWAgaXMgbXV0YWJsZSwgYnV0IGAmKCZtdXQgZmFuY3kpYCBpcyBub3QuIENyZWF0aW5nIGFuCmltbXV0YWJsZSByZWZlcmVuY2UgdG8gYSB2YWx1ZSBib3Jyb3dzIGl0IGltbXV0YWJseS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlCnJlZmVyZW5jZXMgb2YgdHlwZSBgJigmbXV0IFQpYCB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHZhbHVlLCBzbyB0aGV5IG11c3QgYmUKaW1tdXRhYmxlIHRvIHByZXZlbnQgbXVsdGlwbGUgbXV0YWJsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIHZhbHVlLgoKVG8gZml4IHRoaXMsIGVpdGhlciByZW1vdmUgdGhlIG91dGVyIHJlZmVyZW5jZToKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CgogICAgbGV0IGZhbmN5X3JlZiA9ICZtdXQgZmFuY3k7CiAgICAvLyBgZmFuY3lfcmVmYCBpcyBub3cgJm11dCBGYW5jeU51bSwgcmF0aGVyIHRoYW4gJigmbXV0IEZhbmN5TnVtKQoKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBObyBlcnJvciEKCiAgICBwcmludGxuISgie30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCk9yIG1ha2UgdGhlIG91dGVyIHJlZmVyZW5jZSBtdXRhYmxlOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGZhbmN5ID0gRmFuY3lOdW17IG51bTogNSB9OwoKICAgIGxldCBmYW5jeV9yZWYgPSAmbXV0ICgmbXV0IGZhbmN5KTsKICAgIC8vIGBmYW5jeV9yZWZgIGlzIG5vdyAmbXV0KCZtdXQgRmFuY3lOdW0pLCByYXRoZXIgdGhhbiAmKCZtdXQgRmFuY3lOdW0pCgogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIE5vIGVycm9yIQoKICAgIHByaW50bG4hKCJ7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYApFMDM5MEEgbWV0aG9kIG9yIGNvbnN0YW50IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHByaW1pdGl2ZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMgp9CgppbXBsICptdXQgRm9vIHt9Ci8vIGVycm9yOiBvbmx5IGEgc2luZ2xlIGluaGVyZW50IGltcGxlbWVudGF0aW9uIG1hcmtlZCB3aXRoCi8vICAgICAgICBgI1tsYW5nID0gIm11dF9wdHIiXWAgaXMgYWxsb3dlZCBmb3IgdGhlIGAqbXV0IFRgIHByaW1pdGl2ZQpgYGAKClRoaXMgaXNuJ3QgYWxsb3dlZCwgYnV0IHVzaW5nIGEgdHJhaXQgdG8gaW1wbGVtZW50IGEgbWV0aG9kIG9yIGNvbnN0YW50CmlzIGEgZ29vZCBzb2x1dGlvbi4KRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMgp9Cgp0cmFpdCBCYXIgewogICAgZm4gYmFyKCk7Cn0KCmltcGwgQmFyIGZvciAqbXV0IEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBvayEKfQpgYGAKRTAzOTFBIHR5cGUgZGVwZW5kZW5jeSBjeWNsZSBoYXMgYmVlbiBlbmNvdW50ZXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTEKdHJhaXQgRmlyc3RUcmFpdCA6IFNlY29uZFRyYWl0IHsKCn0KCnRyYWl0IFNlY29uZFRyYWl0IDogRmlyc3RUcmFpdCB7Cgp9CmBgYAoKVGhlIHByZXZpb3VzIGV4YW1wbGUgY29udGFpbnMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdHdvIHRyYWl0czoKYEZpcnN0VHJhaXRgIGRlcGVuZHMgb24gYFNlY29uZFRyYWl0YCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgRmlyc3RUcmFpdGAuCkUwMzkyQSB0eXBlIG9yIGxpZmV0aW1lIHBhcmFtZXRlciBoYXMgYmVlbiBkZWNsYXJlZCBidXQgaXMgbm90IGFjdHVhbGx5IHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkyCmVudW0gRm9vPFQ+IHsKICAgIEJhciwKfQpgYGAKCklmIHRoZSB0eXBlIHBhcmFtZXRlciB3YXMgaW5jbHVkZWQgYnkgbWlzdGFrZSwgdGhpcyBlcnJvciBjYW4gYmUgZml4ZWQKYnkgc2ltcGx5IHJlbW92aW5nIHRoZSB0eXBlIHBhcmFtZXRlciwgYXMgc2hvd24gYmVsb3c6CgpgYGAKZW51bSBGb28gewogICAgQmFyLAp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHR5cGUgcGFyYW1ldGVyIHdhcyBpbnRlbnRpb25hbGx5IGluc2VydGVkLCBpdCBtdXN0IGJlCnVzZWQuIEEgc2ltcGxlIGZpeCBpcyBzaG93biBiZWxvdzoKCmBgYAplbnVtIEZvbzxUPiB7CiAgICBCYXIoVCksCn0KYGBgCgpUaGlzIGVycm9yIG1heSBhbHNvIGNvbW1vbmx5IGJlIGZvdW5kIHdoZW4gd29ya2luZyB3aXRoIHVuc2FmZSBjb2RlLiBGb3IKZXhhbXBsZSwgd2hlbiB1c2luZyByYXcgcG9pbnRlcnMgb25lIG1heSB3aXNoIHRvIHNwZWNpZnkgdGhlIGxpZmV0aW1lIGZvcgp3aGljaCB0aGUgcG9pbnRlZC1hdCBkYXRhIGlzIHZhbGlkLiBBbiBpbml0aWFsIGF0dGVtcHQgKGJlbG93KSBjYXVzZXMgdGhpcwplcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MgpzdHJ1Y3QgRm9vPCdhLCBUPiB7CiAgICB4OiAqY29uc3QgVCwKfQpgYGAKCldlIHdhbnQgdG8gZXhwcmVzcyB0aGUgY29uc3RyYWludCB0aGF0IEZvbyBzaG91bGQgbm90IG91dGxpdmUgYCdhYCwgYmVjYXVzZQp0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGBUYCBpcyBvbmx5IHZhbGlkIGZvciB0aGF0IGxpZmV0aW1lLiBUaGUgcHJvYmxlbSBpcwp0aGF0IHRoZXJlIGFyZSBubyBhY3R1YWwgdXNlcyBvZiBgJ2FgLiBJdCdzIHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMKYnkgYWRkaW5nIGEgUGhhbnRvbURhdGEgdHlwZSB0byB0aGUgc3RydWN0LCB1c2luZyBpdCB0byB0ZWxsIHRoZSBjb21waWxlcgp0byBhY3QgYXMgaWYgdGhlIHN0cnVjdCBjb250YWluZWQgYSBib3Jyb3dlZCByZWZlcmVuY2UgYCYnYSBUYDoKCmBgYAp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKc3RydWN0IEZvbzwnYSwgVDogJ2E+IHsKICAgIHg6ICpjb25zdCBULAogICAgcGhhbnRvbTogUGhhbnRvbURhdGE8JidhIFQ+Cn0KYGBgCgpbUGhhbnRvbURhdGFdIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXhwcmVzcyBpbmZvcm1hdGlvbiBhYm91dCB1bnVzZWQgdHlwZQpwYXJhbWV0ZXJzLgoKW1BoYW50b21EYXRhXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvbWFya2VyL3N0cnVjdC5QaGFudG9tRGF0YS5odG1sCkUwMzkzQSB0eXBlIHBhcmFtZXRlciB3aGljaCByZWZlcmVuY2VzIGBTZWxmYCBpbiBpdHMgZGVmYXVsdCB2YWx1ZSB3YXMgbm90IHNwZWNpZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTMKdHJhaXQgQTxUPVNlbGY+IHt9CgpmbiB0b2dldGhlcl93ZV93aWxsX3J1bGVfdGhlX2dhbGF4eShzb246ICZBKSB7fQovLyBlcnJvcjogdGhlIHR5cGUgcGFyYW1ldGVyIGBUYCBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIGFuCi8vICAgICAgICBvYmplY3QgdHlwZSBiZWNhdXNlIGl0cyBkZWZhdWx0IHZhbHVlIGBTZWxmYCByZWZlcmVuY2VzIHRoZQovLyAgICAgICAgdHlwZSBgU2VsZmAKYGBgCgpBIHRyYWl0IG9iamVjdCBpcyBkZWZpbmVkIG92ZXIgYSBzaW5nbGUsIGZ1bGx5LWRlZmluZWQgdHJhaXQuIFdpdGggYSByZWd1bGFyCmRlZmF1bHQgcGFyYW1ldGVyLCB0aGlzIHBhcmFtZXRlciBjYW4ganVzdCBiZSBzdWJzdGl0dXRlZCBpbi4gSG93ZXZlciwgaWYgdGhlCmRlZmF1bHQgcGFyYW1ldGVyIGlzIGBTZWxmYCwgdGhlIHRyYWl0IGNoYW5nZXMgZm9yIGVhY2ggY29uY3JldGUgdHlwZTsgaS5lLgpgaTMyYCB3aWxsIGJlIGV4cGVjdGVkIHRvIGltcGxlbWVudCBgQTxpMzI+YCwgYGJvb2xgIHdpbGwgYmUgZXhwZWN0ZWQgdG8KaW1wbGVtZW50IGBBPGJvb2w+YCwgZXRjLi4uIFRoZXNlIHR5cGVzIHdpbGwgbm90IHNoYXJlIGFuIGltcGxlbWVudGF0aW9uIG9mIGEKZnVsbHktZGVmaW5lZCB0cmFpdDsgaW5zdGVhZCB0aGV5IHNoYXJlIGltcGxlbWVudGF0aW9ucyBvZiBhIHRyYWl0IHdpdGgKZGlmZmVyZW50IHBhcmFtZXRlcnMgc3Vic3RpdHV0ZWQgaW4gZm9yIGVhY2ggaW1wbGVtZW50YXRpb24uIFRoaXMgaXMKaXJyZWNvbmNpbGFibGUgd2l0aCB3aGF0IHdlIG5lZWQgdG8gbWFrZSBhIHRyYWl0IG9iamVjdCB3b3JrLCBhbmQgaXMgdGh1cwpkaXNhbGxvd2VkLiBNYWtpbmcgdGhlIHRyYWl0IGNvbmNyZXRlIGJ5IGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgdmFsdWUgb2YgdGhlCmRlZmF1bHRlZCBwYXJhbWV0ZXIgd2lsbCBmaXggdGhpcyBpc3N1ZS4gRml4ZWQgZXhhbXBsZToKCmBgYAp0cmFpdCBBPFQ9U2VsZj4ge30KCmZuIHRvZ2V0aGVyX3dlX3dpbGxfcnVsZV90aGVfZ2FsYXh5KHNvbjogJkE8aTMyPikge30gLy8gT2shCmBgYApFMDM5OCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkluIFJ1c3QgMS4zLCB0aGUgZGVmYXVsdCBvYmplY3QgbGlmZXRpbWUgYm91bmRzIGFyZSBleHBlY3RlZCB0byBjaGFuZ2UsIGFzCmRlc2NyaWJlZCBpbiBbUkZDIDExNTZdLiBZb3UgYXJlIGdldHRpbmcgYSB3YXJuaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyCnRoaW5rcyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvciBpbiB5b3VyCmNvZGUuIEl0IGlzIHBvc3NpYmxlLCB0aG91Z2ggdW5saWtlbHksIHRoYXQgdGhpcyBpcyBhIGZhbHNlIGFsYXJtLgoKVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCB3aGVyZSBgJidhIEJveDxTb21lVHJhaXQ+YCB1c2VkIHRvIGRlZmF1bHQgdG8KYCYnYSBCb3g8U29tZVRyYWl0KydhPmAsIGl0IG5vdyBkZWZhdWx0cyB0byBgJidhIEJveDxTb21lVHJhaXQrJ3N0YXRpYz5gIChoZXJlLApgU29tZVRyYWl0YCBpcyB0aGUgbmFtZSBvZiBzb21lIHRyYWl0IHR5cGUpLiBOb3RlIHRoYXQgdGhlIG9ubHkgdHlwZXMgd2hpY2ggYXJlCmFmZmVjdGVkIGFyZSByZWZlcmVuY2VzIHRvIGJveGVzLCBsaWtlIGAmQm94PFNvbWVUcmFpdD5gIG9yCmAmW0JveDxTb21lVHJhaXQ+XWAuIE1vcmUgY29tbW9uIHR5cGVzIGxpa2UgYCZTb21lVHJhaXRgIG9yIGBCb3g8U29tZVRyYWl0PmAKYXJlIHVuYWZmZWN0ZWQuCgpUbyBzaWxlbmNlIHRoaXMgd2FybmluZywgZWRpdCB5b3VyIGNvZGUgdG8gdXNlIGFuIGV4cGxpY2l0IGJvdW5kLiBNb3N0IG9mIHRoZQp0aW1lLCB0aGlzIG1lYW5zIHRoYXQgeW91IHdpbGwgd2FudCB0byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiBhIGZ1bmN0aW9uIHRoYXQKeW91IGFyZSBjYWxsaW5nLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGVycm9yIGlzIHJlcG9ydGVkIG9uIGEgY2FsbCBsaWtlIGBmb28oeClgLAphbmQgYGZvb2AgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgoKYGBgCiMgdHJhaXQgU29tZVRyYWl0IHt9CmZuIGZvbyhhcmc6ICZCb3g8U29tZVRyYWl0PikgeyAvKiAuLi4gKi8gfQpgYGAKCllvdSBtaWdodCBjaGFuZ2UgaXQgdG86CgpgYGAKIyB0cmFpdCBTb21lVHJhaXQge30KZm4gZm9vPCdhPihhcmc6ICYnYSBCb3g8U29tZVRyYWl0KydhPikgeyAvKiAuLi4gKi8gfQpgYGAKClRoaXMgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB5b3UgZXhwZWN0IHRoZSB0cmFpdCBvYmplY3QgYFNvbWVUcmFpdGAgdG8gY29udGFpbgpyZWZlcmVuY2VzICh3aXRoIGEgbWF4aW11bSBsaWZldGltZSBvZiBgJ2FgKS4KCltSRkMgMTE1Nl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzExNTYtYWRqdXN0LWRlZmF1bHQtb2JqZWN0LWJvdW5kcy5tZApFMDM5OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlcgoKWW91IGltcGxlbWVudGVkIGEgdHJhaXQsIG92ZXJyaWRpbmcgb25lIG9yIG1vcmUgb2YgaXRzIGFzc29jaWF0ZWQgdHlwZXMgYnV0IGRpZApub3QgcmVpbXBsZW1lbnQgaXRzIGRlZmF1bHQgbWV0aG9kcy4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfZGVmYXVsdHMpXQoKcHViIHRyYWl0IEZvbyB7CiAgICB0eXBlIEFzc29jID0gdTg7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCmltcGwgRm9vIGZvciBpMzIgewogICAgLy8gZXJyb3IgLSB0aGUgZm9sbG93aW5nIHRyYWl0IGl0ZW1zIG5lZWQgdG8gYmUgcmVpbXBsZW1lbnRlZCBhcwogICAgLy8gICAgICAgICBgQXNzb2NgIHdhcyBvdmVycmlkZGVuOiBgYmFyYAogICAgdHlwZSBBc3NvYyA9IGkzMjsKfQpgYGAKClRvIGZpeCB0aGlzLCBhZGQgYW4gaW1wbGVtZW50YXRpb24gZm9yIGVhY2ggZGVmYXVsdCBtZXRob2QgZnJvbSB0aGUgdHJhaXQ6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfZGVmYXVsdHMpXQoKcHViIHRyYWl0IEZvbyB7CiAgICB0eXBlIEFzc29jID0gdTg7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCmltcGwgRm9vIGZvciBpMzIgewogICAgdHlwZSBBc3NvYyA9IGkzMjsKICAgIGZuIGJhcigmc2VsZikge30gLy8gb2shCn0KYGBgCkUwNDAxSW5uZXIgaXRlbXMgZG8gbm90IGluaGVyaXQgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXJzIGZyb20gdGhlIGZ1bmN0aW9ucwp0aGV5IGFyZSBlbWJlZGRlZCBpbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDEKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIGZuIGJhcih5OiBUKSB7IC8vIFQgaXMgZGVmaW5lZCBpbiB0aGUgIm91dGVyIiBmdW5jdGlvbgogICAgICAgIC8vIC4uCiAgICB9CiAgICBiYXIoeCk7Cn0KYGBgCgpOb3Igd2lsbCB0aGlzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAxCmZuIGZvbzxUPih4OiBUKSB7CiAgICB0eXBlIE1heWJlVCA9IE9wdGlvbjxUPjsKICAgIC8vIC4uLgp9CmBgYAoKT3IgdGhpczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMQpmbiBmb288VD4oeDogVCkgewogICAgc3RydWN0IEZvbyB7CiAgICAgICAgeDogVCwKICAgIH0KICAgIC8vIC4uLgp9CmBgYAoKSXRlbXMgaW5zaWRlIGZ1bmN0aW9ucyBhcmUgYmFzaWNhbGx5IGp1c3QgbGlrZSB0b3AtbGV2ZWwgaXRlbXMsIGV4Y2VwdAp0aGF0IHRoZXkgY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSBmdW5jdGlvbiB0aGV5IGFyZSBpbi4KClRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzb2x1dGlvbnMgZm9yIHRoaXMuCgpJZiB0aGUgaXRlbSBpcyBhIGZ1bmN0aW9uLCB5b3UgbWF5IHVzZSBhIGNsb3N1cmU6CgpgYGAKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIGxldCBiYXIgPSB8eTogVHwgeyAvLyBleHBsaWNpdCB0eXBlIGFubm90YXRpb24gbWF5IG5vdCBiZSBuZWNlc3NhcnkKICAgICAgICAvLyAuLgogICAgfTsKICAgIGJhcih4KTsKfQpgYGAKCkZvciBhIGdlbmVyaWMgaXRlbSwgeW91IGNhbiBjb3B5IG92ZXIgdGhlIHBhcmFtZXRlcnM6CgpgYGAKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIGZuIGJhcjxUPih5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgdHlwZSBNYXliZVQ8VD4gPSBPcHRpb248VD47Cn0KYGBgCgpCZSBzdXJlIHRvIGNvcHkgb3ZlciBhbnkgYm91bmRzIGFzIHdlbGw6CgpgYGAKZm4gZm9vPFQ6IENvcHk+KHg6IFQpIHsKICAgIGZuIGJhcjxUOiBDb3B5Pih5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCmBgYApmbiBmb288VDogQ29weT4oeDogVCkgewogICAgc3RydWN0IEZvbzxUOiBDb3B5PiB7CiAgICAgICAgeDogVCwKICAgIH0KfQpgYGAKClRoaXMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCB0eXBlIGhpbnRzIGluIHRoZSBmdW5jdGlvbiBib2R5LgoKSW4gY2FzZSB0aGUgaXRlbSBpcyBhIGZ1bmN0aW9uIGluc2lkZSBhbiBgaW1wbGAsIGRlZmluaW5nIGEgcHJpdmF0ZSBoZWxwZXIKZnVuY3Rpb24gbWlnaHQgYmUgZWFzaWVyOgoKYGBgCiMgc3RydWN0IEZvbzxUPihUKTsKaW1wbDxUPiBGb288VD4gewogICAgcHViIGZuIGZvbygmc2VsZiwgeDogVCkgewogICAgICAgIHNlbGYuYmFyKHgpOwogICAgfQoKICAgIGZuIGJhcigmc2VsZiwgeTogVCkgewogICAgICAgIC8vIC4uCiAgICB9Cn0KYGBgCgpGb3IgZGVmYXVsdCBpbXBscyBpbiB0cmFpdHMsIHRoZSBwcml2YXRlIGhlbHBlciBzb2x1dGlvbiB3b24ndCB3b3JrLCBob3dldmVyCmNsb3N1cmVzIG9yIGNvcHlpbmcgdGhlIHBhcmFtZXRlcnMgc2hvdWxkIHN0aWxsIHdvcmsuCkUwNDAzU29tZSB0eXBlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMwpmbiBmPFQsIFQ+KHM6IFQsIHU6IFQpIHt9IC8vIGVycm9yOiB0aGUgbmFtZSBgVGAgaXMgYWxyZWFkeSB1c2VkIGZvciBhIGdlbmVyaWMKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcGFyYW1ldGVyIGluIHRoaXMgaXRlbSdzIGdlbmVyaWMgcGFyYW1ldGVycwpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCBub25lIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgYXJlIG1pc3NwZWxsZWQsIGFuZCByZW5hbWUgYW55CmNsYXNoaW5nIHBhcmFtZXRlcnMuIEV4YW1wbGU6CgpgYGAKZm4gZjxULCBZPihzOiBULCB1OiBZKSB7fSAvLyBvayEKYGBgCgpUeXBlIHBhcmFtZXRlcnMgaW4gYW4gYXNzb2NpYXRlZCBpdGVtIGFsc28gY2Fubm90IHNoYWRvdyBwYXJhbWV0ZXJzIGZyb20gdGhlCmNvbnRhaW5pbmcgaXRlbToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMwp0cmFpdCBGb288VD4gewogICAgZm4gZG9fc29tZXRoaW5nKCZzZWxmKSAtPiBUOwogICAgZm4gZG9fc29tZXRoaW5nX2Vsc2U8VDogQ2xvbmU+KCZzZWxmLCBiYXI6IFQpOwp9CmBgYApFMDQwNEEgdHlwZSB0aGF0IGlzIG5vdCBhIHRyYWl0IHdhcyB1c2VkIGluIGEgdHJhaXQgcG9zaXRpb24sIHN1Y2ggYXMgYSBib3VuZApvciBgaW1wbGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA0CnN0cnVjdCBGb287CnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBub3QgYSB0cmFpdApmbiBiYXo8VDogRm9vPih0OiBUKSB7fSAvLyBlcnJvcjogYEZvb2AgaXMgbm90IGEgdHJhaXQKYGBgCgpBbm90aGVyIGVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDQKdHlwZSBGb28gPSBJdGVyYXRvcjxJdGVtPVN0cmluZz47CgpmbiBiYXI8VDogRm9vPih0OiBUKSB7fSAvLyBlcnJvcjogYEZvb2AgaXMgYSB0eXBlIGFsaWFzCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSB0cmFpdCdzIG5hbWUgd2FzIG5vdCBtaXNzcGVsbGVkIG9yIHRoYXQgdGhlIHJpZ2h0CmlkZW50aWZpZXIgd2FzIHVzZWQuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0Kc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgeyAvLyBvayEKICAgIC8vIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbgp9CgpmbiBiYXo8VDogRm9vPih0OiBUKSB7fSAvLyBvayEKYGBgCgpBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgaW50cm9kdWNlIGEgbmV3IHRyYWl0IHdpdGggeW91ciBkZXNpcmVkIHJlc3RyaWN0aW9ucwphcyBhIHN1cGVyIHRyYWl0OgoKYGBgCiMgdHJhaXQgRm9vIHt9CiMgc3RydWN0IEJhcjsKIyBpbXBsIEZvbyBmb3IgQmFyIHt9CnRyYWl0IFF1eDogRm9vIHt9IC8vIEFueXRoaW5nIHRoYXQgaW1wbGVtZW50cyBRdXggYWxzbyBuZWVkcyB0byBpbXBsZW1lbnQgRm9vCmZuIGJhejxUOiBRdXg+KHQ6IFQpIHt9IC8vIGFsc28gb2shCmBgYAoKRmluYWxseSwgaWYgeW91IGFyZSBvbiBuaWdodGx5IGFuZCB3YW50IHRvIHVzZSBhIHRyYWl0IGFsaWFzCmluc3RlYWQgb2YgYSB0eXBlIGFsaWFzLCB5b3Ugc2hvdWxkIHVzZSBgIyFbZmVhdHVyZSh0cmFpdF9hbGlhcyldYDoKCmBgYAojIVtmZWF0dXJlKHRyYWl0X2FsaWFzKV0KdHJhaXQgRm9vID0gSXRlcmF0b3I8SXRlbT1TdHJpbmc+OwoKZm4gYmFyPFQ6IEZvbz4odDogVCkge30gLy8gb2shCmBgYApFMDQwNVRoZSBjb2RlIHJlZmVycyB0byBhIHRyYWl0IHRoYXQgaXMgbm90IGluIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwNQpzdHJ1Y3QgRm9vOwoKaW1wbCBTb21lVHJhaXQgZm9yIEZvbyB7fSAvLyBlcnJvcjogdHJhaXQgYFNvbWVUcmFpdGAgaXMgbm90IGluIHNjb3BlCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBuYW1lIG9mIHRoZSB0cmFpdCB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQgZW5zdXJlIHRoYXQgaXQKd2FzIGltcG9ydGVkLiBFeGFtcGxlOgoKYGBgCiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCi8vIHNvbHV0aW9uIDE6CnVzZSBzb21lX2ZpbGU6OlNvbWVUcmFpdDsKCi8vIHNvbHV0aW9uIDI6CnRyYWl0IFNvbWVUcmFpdCB7CiAgICAvLyBzb21lIGZ1bmN0aW9ucwp9CgpzdHJ1Y3QgRm9vOwoKaW1wbCBTb21lVHJhaXQgZm9yIEZvbyB7IC8vIG9rIQogICAgLy8gaW1wbGVtZW50cyBmdW5jdGlvbnMKfQpgYGAKRTA0MDdBIGRlZmluaXRpb24gb2YgYSBtZXRob2Qgbm90IGluIHRoZSBpbXBsZW1lbnRlZCB0cmFpdCB3YXMgZ2l2ZW4gaW4gYSB0cmFpdAppbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDcKdHJhaXQgRm9vIHsKICAgIGZuIGEoKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gYSgpIHt9CiAgICBmbiBiKCkge30gLy8gZXJyb3I6IG1ldGhvZCBgYmAgaXMgbm90IGEgbWVtYmVyIG9mIHRyYWl0IGBGb29gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIG1ldGhvZCBuYW1lIGFuZCB5b3UgdXNlZCB0aGUgY29ycmVjdAp0cmFpdC4gRmlyc3QgZXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYSgpOwogICAgZm4gYigpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBhKCkge30KICAgIGZuIGIoKSB7fSAvLyBvayEKfQpgYGAKClNlY29uZCBleGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBhKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGEoKSB7fQp9CgppbXBsIEJhciB7CiAgICBmbiBiKCkge30KfQpgYGAKRTA0MDhBbiAib3IiIHBhdHRlcm4gd2FzIHVzZWQgd2hlcmUgdGhlIHZhcmlhYmxlIGJpbmRpbmdzIGFyZSBub3QgY29uc2lzdGVudGx5IGJvdW5kCmFjcm9zcyBwYXR0ZXJucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDgKbWF0Y2ggeCB7CiAgICBTb21lKHkpIHwgTm9uZSA9PiB7IC8qIHVzZSB5ICovIH0gLy8gZXJyb3I6IHZhcmlhYmxlIGB5YCBmcm9tIHBhdHRlcm4gIzEgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbm90IGJvdW5kIGluIHBhdHRlcm4gIzIKICAgIF8gPT4gKCkKfQpgYGAKCkhlcmUsIGB5YCBpcyBib3VuZCB0byB0aGUgY29udGVudHMgb2YgdGhlIGBTb21lYCBhbmQgY2FuIGJlIHVzZWQgd2l0aGluIHRoZQpibG9jayBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaCBhcm0uIEhvd2V2ZXIsIGluIGNhc2UgYHhgIGlzIGBOb25lYCwgd2UgaGF2ZQpub3Qgc3BlY2lmaWVkIHdoYXQgYHlgIGlzLCBhbmQgdGhlIGJsb2NrIHdpbGwgdXNlIGEgbm9uZXhpc3RlbnQgdmFyaWFibGUuCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIHNwbGl0IGludG8gbXVsdGlwbGUgbWF0Y2ggYXJtczoKCmBgYApsZXQgeCA9IFNvbWUoMSk7Cm1hdGNoIHggewogICAgU29tZSh5KSA9PiB7IC8qIHVzZSB5ICovIH0KICAgIE5vbmUgPT4geyAvKiAuLi4gKi8gfQp9CmBgYAoKb3IsIGJpbmQgdGhlIHZhcmlhYmxlIHRvIGEgZmllbGQgb2YgdGhlIHNhbWUgdHlwZSBpbiBhbGwgc3ViLXBhdHRlcm5zIG9mIHRoZQpvciBwYXR0ZXJuOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICgwLCB5KSB8ICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiB7fQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBpZiBgeGAgbWF0Y2hlcyB0aGUgcGF0dGVybiBgKDAsIF8pYCwgdGhlIHNlY29uZCBmaWVsZCBpcyBzZXQKdG8gYHlgLiBJZiBpdCBtYXRjaGVzIGAoXywgMClgLCB0aGUgZmlyc3QgZmllbGQgaXMgc2V0IHRvIGB5YDsgc28gaW4gYWxsCmNhc2VzIGB5YCBpcyBzZXQgdG8gc29tZSB2YWx1ZS4KRTA0MDlBbiAib3IiIHBhdHRlcm4gd2FzIHVzZWQgd2hlcmUgdGhlIHZhcmlhYmxlIGJpbmRpbmdzIGFyZSBub3QgY29uc2lzdGVudGx5IGJvdW5kCmFjcm9zcyBwYXR0ZXJucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDkKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKDAsIHJlZiB5KSB8ICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovfSAvLyBlcnJvcjogdmFyaWFibGUgYHlgIGlzIGJvdW5kIHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGRpZmZlcmVudCBtb2RlIGluIHBhdHRlcm4gIzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoYW4gaW4gcGF0dGVybiAjMQogICAgXyA9PiAoKQp9CmBgYAoKSGVyZSwgYHlgIGlzIGJvdW5kIGJ5LXZhbHVlIGluIG9uZSBjYXNlIGFuZCBieS1yZWZlcmVuY2UgaW4gdGhlIG90aGVyLgoKVG8gZml4IHRoaXMgZXJyb3IsIGp1c3QgdXNlIHRoZSBzYW1lIG1vZGUgaW4gYm90aCBjYXNlcy4KR2VuZXJhbGx5IHVzaW5nIGByZWZgIG9yIGByZWYgbXV0YCB3aGVyZSBub3QgYWxyZWFkeSB1c2VkIHdpbGwgZml4IHRoaXM6CgpgYGAKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKDAsIHJlZiB5KSB8IChyZWYgeSwgMCkgPT4geyAvKiB1c2UgeSAqL30KICAgIF8gPT4gKCkKfQpgYGAKCkFsdGVybmF0aXZlbHksIHNwbGl0IHRoZSBwYXR0ZXJuOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovIH0KICAgICgwLCByZWYgeSkgPT4geyAvKiB1c2UgeSAqL30KICAgIF8gPT4gKCkKfQpgYGAKRTA0MTFUaGUgYFNlbGZgIGtleXdvcmQgd2FzIHVzZWQgb3V0c2lkZSBhbiBpbXBsLCB0cmFpdCwgb3IgdHlwZSBkZWZpbml0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQxMQo8U2VsZj46OmZvbzsgLy8gZXJyb3I6IHVzZSBvZiBgU2VsZmAgb3V0c2lkZSBvZiBhbiBpbXBsLCB0cmFpdCwgb3IgdHlwZQogICAgICAgICAgICAgLy8gZGVmaW5pdGlvbgpgYGAKClRoZSBgU2VsZmAga2V5d29yZCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHR5cGUsIHdoaWNoIGV4cGxhaW5zIHdoeSBpdCBjYW4gb25seQpiZSB1c2VkIGluc2lkZSBhbiBpbXBsLCB0cmFpdCwgb3IgdHlwZSBkZWZpbml0aW9uLiBJdCBnaXZlcyBhY2Nlc3MgdG8gdGhlCmFzc29jaWF0ZWQgaXRlbXMgb2YgYSB0eXBlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgQmF6IDogRm9vIHsKICAgIGZuIGJhcigpIC0+IFNlbGY6OkJhcjsgLy8gbGlrZSB0aGlzCn0KYGBgCgpIb3dldmVyLCBiZSBjYXJlZnVsIHdoZW4gdHdvIHR5cGVzIGhhdmUgYSBjb21tb24gYXNzb2NpYXRlZCB0eXBlOgoKYGBgY29tcGlsZV9mYWlsCnRyYWl0IEZvbyB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgRm9vMiB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgQmF6IDogRm9vICsgRm9vMiB7CiAgICBmbiBiYXIoKSAtPiBTZWxmOjpCYXI7CiAgICAvLyBlcnJvcjogYW1iaWd1b3VzIGFzc29jaWF0ZWQgdHlwZSBgQmFyYCBpbiBib3VuZHMgb2YgYFNlbGZgCn0KYGBgCgpUaGlzIHByb2JsZW0gY2FuIGJlIHNvbHZlZCBieSBzcGVjaWZ5aW5nIGZyb20gd2hpY2ggdHJhaXQgd2Ugd2FudCB0byB1c2UgdGhlCmBCYXJgIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBGb28yIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gKyBGb28yIHsKICAgIGZuIGJhcigpIC0+IDxTZWxmIGFzIEZvbz46OkJhcjsgLy8gb2shCn0KYGBgCkUwNDEyQSB1c2VkIHR5cGUgbmFtZSBpcyBub3QgaW4gc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQxMgppbXBsIFNvbWV0aGluZyB7fSAvLyBlcnJvcjogdHlwZSBuYW1lIGBTb21ldGhpbmdgIGlzIG5vdCBpbiBzY29wZQoKLy8gb3I6Cgp0cmFpdCBGb28gewogICAgZm4gYmFyKE4pOyAvLyBlcnJvcjogdHlwZSBuYW1lIGBOYCBpcyBub3QgaW4gc2NvcGUKfQoKLy8gb3I6CgpmbiBmb28oeDogVCkge30gLy8gdHlwZSBuYW1lIGBUYCBpcyBub3QgaW4gc2NvcGUKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlIG5hbWUsIHlvdSBkaWQKZGVjbGFyZSBpdCBvciBpbXBvcnRlZCBpdCBpbnRvIHRoZSBzY29wZS4gRXhhbXBsZXM6CgpgYGAKc3RydWN0IFNvbWV0aGluZzsKCmltcGwgU29tZXRoaW5nIHt9IC8vIG9rIQoKLy8gb3I6Cgp0cmFpdCBGb28gewogICAgdHlwZSBOOwoKICAgIGZuIGJhcihfOiBTZWxmOjpOKTsgLy8gb2shCn0KCi8vIG9yOgoKZm4gZm9vPFQ+KHg6IFQpIHt9IC8vIG9rIQpgYGAKCkFub3RoZXIgY2FzZSB0aGF0IGNhdXNlcyB0aGlzIGVycm9yIGlzIHdoZW4gYSB0eXBlIGlzIGltcG9ydGVkIGludG8gYSBwYXJlbnQKbW9kdWxlLiBUbyBmaXggdGhpcywgeW91IGNhbiBmb2xsb3cgdGhlIHN1Z2dlc3Rpb24gYW5kIHVzZSBGaWxlIGRpcmVjdGx5IG9yCmB1c2Ugc3VwZXI6OkZpbGU7YCB3aGljaCB3aWxsIGltcG9ydCB0aGUgdHlwZXMgZnJvbSB0aGUgcGFyZW50IG5hbWVzcGFjZS4gQW4KZXhhbXBsZSB0aGF0IGNhdXNlcyB0aGlzIGVycm9yIGlzIGJlbG93OgoKYGBgY29tcGlsZV9mYWlsLEUwNDEyCnVzZSBzdGQ6OmZzOjpGaWxlOwoKbW9kIGZvbyB7CiAgICBmbiBzb21lX2Z1bmN0aW9uKGY6IEZpbGUpIHt9Cn0KYGBgCgpgYGAKdXNlIHN0ZDo6ZnM6OkZpbGU7Cgptb2QgZm9vIHsKICAgIC8vIGVpdGhlcgogICAgdXNlIHN1cGVyOjpGaWxlOwogICAgLy8gb3IKICAgIC8vIHVzZSBzdGQ6OmZzOjpGaWxlOwogICAgZm4gZm9vKGY6IEZpbGUpIHt9Cn0KIyBmbiBtYWluKCkge30gLy8gZG9uJ3QgaW5zZXJ0IGl0IGZvciB1czsgdGhhdCdsbCBicmVhayBpbXBvcnRzCmBgYApFMDQxNU1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gcGFyYW1ldGVyIGhhdmUgdGhlIHNhbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTUKZm4gZm9vKGY6IGkzMiwgZjogaTMyKSB7fSAvLyBlcnJvcjogaWRlbnRpZmllciBgZmAgaXMgYm91bmQgbW9yZSB0aGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG9uY2UgaW4gdGhpcyBwYXJhbWV0ZXIgbGlzdApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBwYXJhbWV0ZXJzJyBuYW1lLiBFeGFtcGxlOgoKYGBgCmZuIGZvbyhmOiBpMzIsIGc6IGkzMikge30gLy8gb2shCmBgYApFMDQxNkFuIGlkZW50aWZpZXIgaXMgYm91bmQgbW9yZSB0aGFuIG9uY2UgaW4gYSBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQxNgptYXRjaCAoMSwgMikgewogICAgKHgsIHgpID0+IHt9IC8vIGVycm9yOiBpZGVudGlmaWVyIGB4YCBpcyBib3VuZCBtb3JlIHRoYW4gb25jZSBpbiB0aGUKICAgICAgICAgICAgICAgICAvLyAgICAgICAgc2FtZSBwYXR0ZXJuCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgaWRlbnRpZmllcnMnIG5hbWUuIEV4YW1wbGU6CgpgYGAKbWF0Y2ggKDEsIDIpIHsKICAgICh4LCB5KSA9PiB7fSAvLyBvayEKfQpgYGAKCk9yIG1heWJlIGRpZCB5b3UgbWVhbiB0byB1bmlmeT8gQ29uc2lkZXIgdXNpbmcgYSBndWFyZDoKCmBgYAojIGxldCAoQSwgQiwgQykgPSAoMSwgMiwgMyk7Cm1hdGNoIChBLCBCLCBDKSB7CiAgICAoeCwgeDIsIHNlZSkgaWYgeCA9PSB4MiA9PiB7IC8qIEEgYW5kIEIgYXJlIGVxdWFsLCBkbyBvbmUgdGhpbmcgKi8gfQogICAgKHksIHosIHNlZSkgPT4geyAvKiBBIGFuZCBCIHVuZXF1YWw7IGRvIGFub3RoZXIgdGhpbmcgKi8gfQp9CmBgYApFMDQyMkFuIGlkZW50aWZpZXIgdGhhdCBpcyBuZWl0aGVyIGRlZmluZWQgbm9yIGEgc3RydWN0IHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMgpmbiBtYWluICgpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMSwgeTogMiB9Owp9CmBgYAoKSW4gdGhpcyBjYXNlLCBgRm9vYCBpcyB1bmRlZmluZWQsIHNvIGl0IGluaGVyZW50bHkgaXNuJ3QgYW55dGhpbmcsIGFuZApkZWZpbml0ZWx5IG5vdCBhIHN0cnVjdC4KCmBgYGNvbXBpbGVfZmFpbApmbiBtYWluICgpIHsKICAgIGxldCBmb28gPSAxOwogICAgbGV0IHggPSBmb28geyB4OiAxLCB5OiAyIH07Cn0KYGBgCgpJbiB0aGlzIGNhc2UsIGBmb29gIGlzIGRlZmluZWQsIGJ1dCBpcyBub3QgYSBzdHJ1Y3QsIHNvIFJ1c3QgY2FuJ3QgdXNlIGl0IGFzCm9uZS4KRTA0MjNBbiBpZGVudGlmaWVyIHdhcyB1c2VkIGxpa2UgYSBmdW5jdGlvbiBuYW1lIG9yIGEgdmFsdWUgd2FzIGV4cGVjdGVkIGFuZCB0aGUKaWRlbnRpZmllciBleGlzdHMgYnV0IGl0IGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMwpzdHJ1Y3QgRm9vIHsgYTogYm9vbCB9OwoKbGV0IGYgPSBGb28oKTsKLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwgZm91bmQgYEZvb2AKLy8gYEZvb2AgaXMgYSBzdHJ1Y3QgbmFtZSwgYnV0IHRoaXMgZXhwcmVzc2lvbiB1c2VzIGl0IGxpa2UgYSBmdW5jdGlvbiBuYW1lCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBuYW1lIG9mIHdoYXQgeW91IGFjdHVhbGx5IHdhbnRlZCB0byB1c2UKaGVyZS4gRXhhbXBsZToKCmBgYApmbiBGb28oKSAtPiB1MzIgeyAwIH0KCmxldCBmID0gRm9vKCk7IC8vIG9rIQpgYGAKCkl0IGlzIGNvbW1vbiB0byBmb3JnZXQgdGhlIHRyYWlsaW5nIGAhYCBvbiBtYWNybyBpbnZvY2F0aW9ucywgd2hpY2ggd291bGQgYWxzbwp5aWVsZCB0aGlzIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIzCnByaW50bG4oIiIpOwovLyBlcnJvcjogZXhwZWN0ZWQgZnVuY3Rpb24sIHR1cGxlIHN0cnVjdCBvciB0dXBsZSB2YXJpYW50LAovLyBmb3VuZCBtYWNybyBgcHJpbnRsbmAKLy8gZGlkIHlvdSBtZWFuIGBwcmludGxuISguLi4pYD8gKG5vdGljZSB0aGUgdHJhaWxpbmcgYCFgKQpgYGAKCkFub3RoZXIgY2FzZSB3aGVyZSB0aGlzIGVycm9yIGlzIGVtaXR0ZWQgaXMgd2hlbiBhIHZhbHVlIGlzIGV4cGVjdGVkLCBidXQKc29tZXRoaW5nIGVsc2UgaXMgZm91bmQ6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjMKcHViIG1vZCBhIHsKICAgIHB1YiBjb25zdCBJOiBpMzIgPSAxOwp9CgpmbiBoMSgpIC0+IGkzMiB7CiAgICBhLkkKICAgIC8vfl4gRVJST1IgZXhwZWN0ZWQgdmFsdWUsIGZvdW5kIG1vZHVsZSBgYWAKICAgIC8vIGRpZCB5b3UgbWVhbiBgYTo6SWA/Cn0KYGBgCkUwNDI0VGhlIGBzZWxmYCBrZXl3b3JkIHdhcyB1c2VkIGluc2lkZSBvZiBhbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIHdpdGhvdXQgYSAiYHNlbGZgCnJlY2VpdmVyIiBwYXJhbWV0ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI0CnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICAvLyBgYmFyYCBpcyBhIG1ldGhvZCwgYmVjYXVzZSBpdCBoYXMgYSByZWNlaXZlciBwYXJhbWV0ZXIuCiAgICBmbiBiYXIoJnNlbGYpIHt9CgogICAgLy8gYGZvb2AgaXMgbm90IGEgbWV0aG9kLCBiZWNhdXNlIGl0IGhhcyBubyByZWNlaXZlciBwYXJhbWV0ZXIuCiAgICBmbiBmb28oKSB7CiAgICAgICAgc2VsZi5iYXIoKTsgLy8gZXJyb3I6IGBzZWxmYCB2YWx1ZSBpcyBhIGtleXdvcmQgb25seSBhdmFpbGFibGUgaW4KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbWV0aG9kcyB3aXRoIGEgYHNlbGZgIHBhcmFtZXRlcgogICAgfQp9CmBgYAoKVGhlIGBzZWxmYCBrZXl3b3JkIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG1ldGhvZHMsIHdoaWNoIGFyZSBhc3NvY2lhdGVkCmZ1bmN0aW9ucyAoZnVuY3Rpb25zIGRlZmluZWQgaW5zaWRlIG9mIGEgYHRyYWl0YCBvciBgaW1wbGAgYmxvY2spIHRoYXQgaGF2ZSBhCmBzZWxmYCByZWNlaXZlciBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyLCBsaWtlIGBzZWxmYCwgYCZzZWxmYCwgYCZtdXQgc2VsZmAgb3IKYHNlbGY6ICZtdXQgUGluPFNlbGY+YCAodGhpcyBsYXN0IG9uZSBpcyBhbiBleGFtcGxlIG9mIGFuIFsiYXJiaXRyYXJ5IGBzZWxmYAp0eXBlIl0oaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80NDg3NCkpLgoKQ2hlY2sgaWYgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24ncyBwYXJhbWV0ZXIgbGlzdCBzaG91bGQgaGF2ZSBjb250YWluZWQgYSBgc2VsZmAKcmVjZWl2ZXIgZm9yIGl0IHRvIGJlIGEgbWV0aG9kLCBhbmQgYWRkIGl0IGlmIHNvLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpIHt9CgogICAgZm4gZm9vKHNlbGYpIHsgLy8gYGZvb2AgaXMgbm93IGEgbWV0aG9kLgogICAgICAgIHNlbGYuYmFyKCk7IC8vIG9rIQogICAgfQp9CmBgYApFMDQyNUFuIHVucmVzb2x2ZWQgbmFtZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI1CnNvbWV0aGluZ190aGF0X2RvZXNudF9leGlzdDo6Zm9vOwovLyBlcnJvcjogdW5yZXNvbHZlZCBuYW1lIGBzb21ldGhpbmdfdGhhdF9kb2VzbnRfZXhpc3Q6OmZvb2AKCi8vIG9yOgoKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigpIHsKICAgICAgICBTZWxmOyAvLyBlcnJvcjogdW5yZXNvbHZlZCBuYW1lIGBTZWxmYAogICAgfQp9CgovLyBvcjoKCmxldCB4ID0gdW5rbm93bl92YXJpYWJsZTsgIC8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYHVua25vd25fdmFyaWFibGVgCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBuYW1lIHdhc24ndCBtaXNzcGVsbGVkIGFuZCBlbnN1cmUgdGhhdCB0aGUKaWRlbnRpZmllciBiZWluZyByZWZlcnJlZCB0byBpcyB2YWxpZCBmb3IgdGhlIGdpdmVuIHNpdHVhdGlvbi4gRXhhbXBsZToKCmBgYAplbnVtIHNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3QgewogICAgRm9vLAp9CmBgYAoKT3I6CgpgYGAKbW9kIHNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3QgewogICAgcHViIHN0YXRpYyBmb28gOiBpMzIgPSAwaTMyOwp9Cgpzb21ldGhpbmdfdGhhdF9kb2VzX2V4aXN0Ojpmb287IC8vIG9rIQpgYGAKCk9yOgoKYGBgCmxldCB1bmtub3duX3ZhcmlhYmxlID0gMTJ1MzI7CmxldCB4ID0gdW5rbm93bl92YXJpYWJsZTsgLy8gb2shCmBgYAoKSWYgdGhlIGl0ZW0gaXMgbm90IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbW9kdWxlLCBpdCBtdXN0IGJlIGltcG9ydGVkIHVzaW5nIGEKYHVzZWAgc3RhdGVtZW50LCBsaWtlIHNvOgoKYGBgCiMgbW9kIGZvbyB7IHB1YiBmbiBiYXIoKSB7fSB9CiMgZm4gbWFpbigpIHsKdXNlIGZvbzo6YmFyOwpiYXIoKTsKIyB9CmBgYAoKSWYgdGhlIGl0ZW0geW91IGFyZSBpbXBvcnRpbmcgaXMgbm90IGRlZmluZWQgaW4gc29tZSBzdXBlci1tb2R1bGUgb2YgdGhlCmN1cnJlbnQgbW9kdWxlLCB0aGVuIGl0IG11c3QgYWxzbyBiZSBkZWNsYXJlZCBhcyBwdWJsaWMgKGUuZy4sIGBwdWIgZm5gKS4KRTA0MjZBbiB1bmRlY2xhcmVkIGxhYmVsIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyNgpsb29wIHsKICAgIGJyZWFrICdhOyAvLyBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQgbGFiZWwgYCdhYAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3Ugc3BlbGxlZCBvciBkZWNsYXJlZCB0aGUgbGFiZWwgY29ycmVjdGx5LiBFeGFtcGxlOgoKYGBgCidhOiBsb29wIHsKICAgIGJyZWFrICdhOyAvLyBvayEKfQpgYGAKRTA0MjhBIHR5cGUgb3IgbW9kdWxlIGhhcyBiZWVuIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI4CnN0cnVjdCBCYXI7CnN0cnVjdCBCYXI7IC8vIGVycm9yOiBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiB2YWx1ZSBgQmFyYApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdHlwZS9tb2R1bGUncyBuYW1lIG9yIHJlbW92ZS9yZW5hbWUgdGhlCmR1cGxpY2F0ZWQgb25lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7CnN0cnVjdCBCYXIyOyAvLyBvayEKYGBgCkUwNDI5VGhlIGBzZWxmYCBrZXl3b3JkIGNhbm5vdCBhcHBlYXIgYWxvbmUgYXMgdGhlIGxhc3Qgc2VnbWVudCBpbiBhIGB1c2VgCmRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyOQp1c2Ugc3RkOjpmbXQ6OnNlbGY7IC8vIGVycm9yOiBgc2VsZmAgaW1wb3J0cyBhcmUgb25seSBhbGxvd2VkIHdpdGhpbiBhIHsgfSBsaXN0CmBgYAoKVG8gdXNlIGEgbmFtZXNwYWNlIGl0c2VsZiBpbiBhZGRpdGlvbiB0byBzb21lIG9mIGl0cyBtZW1iZXJzLCBgc2VsZmAgbWF5IGFwcGVhcgphcyBwYXJ0IG9mIGEgYnJhY2UtZW5jbG9zZWQgbGlzdCBvZiBpbXBvcnRzOgoKYGBgCnVzZSBzdGQ6OmZtdDo6e3NlbGYsIERlYnVnfTsKYGBgCgpJZiB5b3Ugb25seSB3YW50IHRvIGltcG9ydCB0aGUgbmFtZXNwYWNlLCBkbyBzbyBkaXJlY3RseToKCmBgYAp1c2Ugc3RkOjpmbXQ7CmBgYApFMDQzMFRoZSBgc2VsZmAgaW1wb3J0IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGxpc3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMwCnVzZSBzb21ldGhpbmc6OntzZWxmLCBzZWxmfTsgLy8gZXJyb3I6IGBzZWxmYCBpbXBvcnQgY2FuIG9ubHkgYXBwZWFyIG9uY2UgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGxpc3QKYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGltcG9ydCBuYW1lIG9yIHJlbW92ZSB0aGUgZHVwbGljYXRlZApgc2VsZmAgaW1wb3J0LiBFeGFtcGxlOgoKYGBgCiMgbW9kIHNvbWV0aGluZyB7fQojIGZuIG1haW4oKSB7CnVzZSBzb21ldGhpbmc6OntzZWxmfTsgLy8gb2shCiMgfQpgYGAKRTA0MzFBbiBpbnZhbGlkIGBzZWxmYCBpbXBvcnQgd2FzIG1hZGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMxCnVzZSB7c2VsZn07IC8vIGVycm9yOiBgc2VsZmAgaW1wb3J0IGNhbiBvbmx5IGFwcGVhciBpbiBhbiBpbXBvcnQgbGlzdCB3aXRoIGEKICAgICAgICAgICAgLy8gICAgICAgIG5vbi1lbXB0eSBwcmVmaXgKYGBgCgpZb3UgY2Fubm90IGltcG9ydCB0aGUgY3VycmVudCBtb2R1bGUgaW50byBpdHNlbGYsIHBsZWFzZSByZW1vdmUgdGhpcyBpbXBvcnQKb3IgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgaXQuCkUwNDMyQW4gaW1wb3J0IHdhcyB1bnJlc29sdmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMgp1c2Ugc29tZXRoaW5nOjpGb287IC8vIGVycm9yOiB1bnJlc29sdmVkIGltcG9ydCBgc29tZXRoaW5nOjpGb29gLgpgYGAKCkluIFJ1c3QgMjAxNSwgcGF0aHMgaW4gYHVzZWAgc3RhdGVtZW50cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNyYXRlIHJvb3QuIFRvCmltcG9ydCBpdGVtcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBhbmQgcGFyZW50IG1vZHVsZXMsIHVzZSB0aGUgYHNlbGY6OmAgYW5kCmBzdXBlcjo6YCBwcmVmaXhlcywgcmVzcGVjdGl2ZWx5LgoKSW4gUnVzdCAyMDE4LCBwYXRocyBpbiBgdXNlYCBzdGF0ZW1lbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtb2R1bGUKdW5sZXNzIHRoZXkgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiBhIGNyYXRlIG9yIGEgbGl0ZXJhbCBgY3JhdGU6OmAsIGluIHdoaWNoCmNhc2UgdGhleSBzdGFydCBmcm9tIHRoZSBjcmF0ZSByb290LiBBcyBpbiBSdXN0IDIwMTUgY29kZSwgdGhlIGBzZWxmOjpgIGFuZApgc3VwZXI6OmAgcHJlZml4ZXMgcmVmZXIgdG8gdGhlIGN1cnJlbnQgYW5kIHBhcmVudCBtb2R1bGVzIHJlc3BlY3RpdmVseS4KCkFsc28gdmVyaWZ5IHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgaW1wb3J0IG5hbWUgYW5kIHRoYXQgdGhlIGltcG9ydCBleGlzdHMKaW4gdGhlIG1vZHVsZSBmcm9tIHdoZXJlIHlvdSB0cmllZCB0byBpbXBvcnQgaXQuIEV4YW1wbGU6CgpgYGAKdXNlIHNlbGY6OnNvbWV0aGluZzo6Rm9vOyAvLyBPay4KCm1vZCBzb21ldGhpbmcgewogICAgcHViIHN0cnVjdCBGb287Cn0KIyBmbiBtYWluKCkge30KYGBgCgpJZiB5b3UgdHJpZWQgdG8gdXNlIGEgbW9kdWxlIGZyb20gYW4gZXh0ZXJuYWwgY3JhdGUgYW5kIGFyZSB1c2luZyBSdXN0IDIwMTUsCnlvdSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uICh3aGljaCBpcyB1c3VhbGx5IHBsYWNlZCBpbgp0aGUgY3JhdGUgcm9vdCk6CgpgYGBlZGl0aW9uMjAxNQpleHRlcm4gY3JhdGUgY29yZTsgLy8gUmVxdWlyZWQgdG8gdXNlIHRoZSBgY29yZWAgY3JhdGUgaW4gUnVzdCAyMDE1LgoKdXNlIGNvcmU6OmFueTsKIyBmbiBtYWluKCkge30KYGBgCgpJbiBSdXN0IDIwMTggdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uIGlzIG5vdCByZXF1aXJlZCBhbmQgeW91IGNhbiBpbnN0ZWFkCmp1c3QgYHVzZWAgaXQ6CgpgYGBlZGl0aW9uMjAxOAp1c2UgY29yZTo6YW55OyAvLyBObyBleHRlcm4gY3JhdGUgcmVxdWlyZWQgaW4gUnVzdCAyMDE4LgojIGZuIG1haW4oKSB7fQpgYGAKRTA0MzNBbiB1bmRlY2xhcmVkIGNyYXRlLCBtb2R1bGUsIG9yIHR5cGUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMzCmxldCBtYXAgPSBIYXNoTWFwOjpuZXcoKTsKLy8gZXJyb3I6IGZhaWxlZCB0byByZXNvbHZlOiB1c2Ugb2YgdW5kZWNsYXJlZCB0eXBlIGBIYXNoTWFwYApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdHlwZS9tb2R1bGUncyBuYW1lIG9yIHRoYXQgeW91IGRpZG4ndApmb3JnZXQgdG8gaW1wb3J0IGl0OgoKYGBgCnVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOyAvLyBIYXNoTWFwIGhhcyBiZWVuIGltcG9ydGVkLgpsZXQgbWFwOiBIYXNoTWFwPHUzMiwgdTMyPiA9IEhhc2hNYXA6Om5ldygpOyAvLyBTbyBpdCBjYW4gYmUgdXNlZCEKYGBgCgpJZiB5b3UndmUgZXhwZWN0ZWQgdG8gdXNlIGEgY3JhdGUgbmFtZToKCmBgYGNvbXBpbGVfZmFpbAp1c2UgZmVycmlzX3doZWVsOjpCaWdPOwovLyBlcnJvcjogZmFpbGVkIHRvIHJlc29sdmU6IHVzZSBvZiB1bmRlY2xhcmVkIGNyYXRlIG9yIG1vZHVsZSBgZmVycmlzX3doZWVsYApgYGAKCk1ha2Ugc3VyZSB0aGUgY3JhdGUgaGFzIGJlZW4gYWRkZWQgYXMgYSBkZXBlbmRlbmN5IGluIGBDYXJnby50b21sYC4KClRvIHVzZSBhIG1vZHVsZSBmcm9tIHlvdXIgY3VycmVudCBjcmF0ZSwgYWRkIHRoZSBgY3JhdGU6OmAgcHJlZml4IHRvIHRoZSBwYXRoLgpFMDQzNEEgdmFyaWFibGUgdXNlZCBpbnNpZGUgYW4gaW5uZXIgZnVuY3Rpb24gY29tZXMgZnJvbSBhIGR5bmFtaWMgZW52aXJvbm1lbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM0CmZuIGZvbygpIHsKICAgIGxldCB5ID0gNTsKICAgIGZuIGJhcigpIC0+IHUzMiB7CiAgICAgICAgeSAvLyBlcnJvcjogY2FuJ3QgY2FwdHVyZSBkeW5hbWljIGVudmlyb25tZW50IGluIGEgZm4gaXRlbTsgdXNlIHRoZQogICAgICAgICAgLy8gICAgICAgIHx8IHsgLi4uIH0gY2xvc3VyZSBmb3JtIGluc3RlYWQuCiAgICB9Cn0KYGBgCgpJbm5lciBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZWlyIGNvbnRhaW5pbmcgZW52aXJvbm1lbnQuIFRvIGZpeCB0aGlzCmVycm9yLCB5b3UgY2FuIHJlcGxhY2UgdGhlIGZ1bmN0aW9uIHdpdGggYSBjbG9zdXJlOgoKYGBgCmZuIGZvbygpIHsKICAgIGxldCB5ID0gNTsKICAgIGxldCBiYXIgPSB8fCB7CiAgICAgICAgeQogICAgfTsKfQpgYGAKCk9yIHJlcGxhY2UgdGhlIGNhcHR1cmVkIHZhcmlhYmxlIHdpdGggYSBjb25zdGFudCBvciBhIHN0YXRpYyBpdGVtOgoKYGBgCmZuIGZvbygpIHsKICAgIHN0YXRpYyBtdXQgWDogdTMyID0gNDsKICAgIGNvbnN0IFk6IHUzMiA9IDU7CiAgICBmbiBiYXIoKSAtPiB1MzIgewogICAgICAgIHVuc2FmZSB7CiAgICAgICAgICAgIFggPSAzOwogICAgICAgIH0KICAgICAgICBZCiAgICB9Cn0KYGBgCkUwNDM1QSBub24tY29uc3RhbnQgdmFsdWUgd2FzIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzNQpsZXQgZm9vID0gNDI7CmxldCBhOiBbdTg7IGZvb107IC8vIGVycm9yOiBhdHRlbXB0IHRvIHVzZSBhIG5vbi1jb25zdGFudCB2YWx1ZSBpbiBhIGNvbnN0YW50CmBgYAoKJ2NvbnN0YW50JyBtZWFucyAnYSBjb21waWxlLXRpbWUgdmFsdWUnLgoKTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiB0aGUgW1ZhcmlhYmxlcyBhbmQgTXV0YWJpbGl0eV0gc2VjdGlvbiBvZiB0aGUgYm9vay4KCltWYXJpYWJsZXMgYW5kIE11dGFiaWxpdHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwMy0wMS12YXJpYWJsZXMtYW5kLW11dGFiaWxpdHkuaHRtbCNkaWZmZXJlbmNlcy1iZXR3ZWVuLXZhcmlhYmxlcy1hbmQtY29uc3RhbnRzCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggYSBjb25zdGFudC4gRXhhbXBsZToKCmBgYApsZXQgYTogW3U4OyA0Ml07IC8vIG9rIQpgYGAKCk9yOgoKYGBgCmNvbnN0IEZPTzogdXNpemUgPSA0MjsKbGV0IGE6IFt1ODsgRk9PXTsgLy8gb2shCmBgYApFMDQzNlRoZSBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUgc3ludGF4IHdhcyB1c2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzNgplbnVtIFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIFdlZWtseSwKICAgIFNlbWlNb250aGx5IHsgZGF5czogKHU4LCB1OCksIGFubnVhbF9zcGVjaWFsOiBib29sIH0sCn0KCmZuIG9uZV91cF9jb21wZXRpdG9yKGNvbXBldGl0b3JfZnJlcXVlbmN5OiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSkKICAgICAgICAgICAgICAgICAgICAgLT4gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgbWF0Y2ggY29tcGV0aXRvcl9mcmVxdWVuY3kgewogICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpXZWVrbHkgPT4gUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgZGF5czogKDEsIDE1KSwgYW5udWFsX3NwZWNpYWw6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBjIEAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5eyAuLiB9ID0+CiAgICAgICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgICAgICBhbm51YWxfc3BlY2lhbDogdHJ1ZSwgLi5jIC8vIGVycm9yOiBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN5bnRheCByZXF1aXJlcyBhIHN0cnVjdAogICAgICAgIH0KICAgIH0KfQpgYGAKClRoZSBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUgc3ludGF4IGlzIG9ubHkgYWxsb3dlZCBmb3Igc3RydWN0cyAoc3RydWN0LWxpa2UKZW51bSB2YXJpYW50cyBkb24ndCBxdWFsaWZ5LCBmb3IgZXhhbXBsZSkuIFRvIGZpeCB0aGUgcHJldmlvdXMgY29kZSwgcmV3cml0ZSB0aGUKZXhwcmVzc2lvbiB3aXRob3V0IGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXg6CgpgYGAKZW51bSBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBXZWVrbHksCiAgICBTZW1pTW9udGhseSB7IGRheXM6ICh1OCwgdTgpLCBhbm51YWxfc3BlY2lhbDogYm9vbCB9LAp9CgpmbiBvbmVfdXBfY29tcGV0aXRvcihjb21wZXRpdG9yX2ZyZXF1ZW5jeTogUHVibGljYXRpb25GcmVxdWVuY3kpCiAgICAgICAgICAgICAgICAgICAgIC0+IFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIG1hdGNoIGNvbXBldGl0b3JfZnJlcXVlbmN5IHsKICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6V2Vla2x5ID0+IFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgIGRheXM6ICgxLCAxNSksIGFubnVhbF9zcGVjaWFsOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5eyBkYXlzLCAuLiB9ID0+CiAgICAgICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgICAgICBkYXlzLCBhbm51YWxfc3BlY2lhbDogdHJ1ZSAvLyBvayEKICAgICAgICB9CiAgICB9Cn0KYGBgCkUwNDM3QW4gYXNzb2NpYXRlZCB0eXBlIHdob3NlIG5hbWUgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBhc3NvY2lhdGVkIHR5cGVzCmluIHRoZSB0cmFpdCB3YXMgdXNlZCB3aGVuIGltcGxlbWVudGluZyB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM3CnRyYWl0IEZvbyB7fQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICB0eXBlIEJhciA9IGJvb2w7Cn0KYGBgCgpUcmFpdCBpbXBsZW1lbnRhdGlvbnMgY2FuIG9ubHkgaW1wbGVtZW50IGFzc29jaWF0ZWQgdHlwZXMgdGhhdCBhcmUgbWVtYmVycyBvZgp0aGUgdHJhaXQgaW4gcXVlc3Rpb24uCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIHJlbW92ZSB0aGUgZXh0cmFuZW91cyBhc3NvY2lhdGVkIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHt9CmBgYApFMDQzOEFuIGFzc29jaWF0ZWQgY29uc3RhbnQgd2hvc2UgbmFtZSBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgY29uc3RhbnRzCmluIHRoZSB0cmFpdCB3YXMgdXNlZCB3aGVuIGltcGxlbWVudGluZyB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM4CnRyYWl0IEZvbyB7fQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICBjb25zdCBCQVI6IGJvb2wgPSB0cnVlOwp9CmBgYAoKVHJhaXQgaW1wbGVtZW50YXRpb25zIGNhbiBvbmx5IGltcGxlbWVudCBhc3NvY2lhdGVkIGNvbnN0YW50cyB0aGF0IGFyZQptZW1iZXJzIG9mIHRoZSB0cmFpdCBpbiBxdWVzdGlvbi4KClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gcmVtb3ZlIHRoZSBleHRyYW5lb3VzIGFzc29jaWF0ZWQgY29uc3RhbnQ6CgpgYGAKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHt9CmBgYApFMDQzOSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBsZW5ndGggb2YgdGhlIHBsYXRmb3JtLWludHJpbnNpYyBmdW5jdGlvbiBgc2ltZF9zaHVmZmxlYCB3YXNuJ3Qgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGVtaXR0ZWQpCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9zaHVmZmxlPEEsQj4oYTogQSwgYjogQSwgYzogW3UzMjsgOF0pIC0+IEI7CiAgICAvLyBlcnJvcjogaW52YWxpZCBgc2ltZF9zaHVmZmxlYCwgbmVlZHMgbGVuZ3RoOiBgc2ltZF9zaHVmZmxlYAp9CmBgYAoKVGhlIGBzaW1kX3NodWZmbGVgIGZ1bmN0aW9uIG5lZWRzIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHBhc3NlZCBhcwpsYXN0IHBhcmFtZXRlciBpbiBpdHMgbmFtZS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKZXh0ZXJuICJwbGF0Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfc2h1ZmZsZTg8QSxCPihhOiBBLCBiOiBBLCBjOiBbdTMyOyA4XSkgLT4gQjsKfQpgYGAKRTA0NDVBIHByaXZhdGUgdHJhaXQgd2FzIHVzZWQgb24gYSBwdWJsaWMgdHlwZSBwYXJhbWV0ZXIgYm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQ0NQojIVtkZW55KHByaXZhdGVfaW5fcHVibGljKV0KCnRyYWl0IEZvbyB7CiAgICBmbiBkdW1teSgmc2VsZikgeyB9Cn0KCnB1YiB0cmFpdCBCYXIgOiBGb28ge30gLy8gZXJyb3I6IHByaXZhdGUgdHJhaXQgaW4gcHVibGljIGludGVyZmFjZQpwdWIgc3RydWN0IEJhcjI8VDogRm9vPihwdWIgVCk7IC8vIHNhbWUgZXJyb3IKcHViIGZuIGZvbzxUOiBGb28+ICh0OiBUKSB7fSAvLyBzYW1lIGVycm9yCgpmbiBtYWluKCkge30KYGBgCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHRyYWl0IGlzIGFsc28gcHVibGljLiBUaGUgdHJhaXQKY2FuIGJlIG1hZGUgaW5hY2Nlc3NpYmxlIGlmIG5lY2Vzc2FyeSBieSBwbGFjaW5nIGl0IGludG8gYSBwcml2YXRlIGlubmVyCm1vZHVsZSwgYnV0IGl0IHN0aWxsIGhhcyB0byBiZSBtYXJrZWQgd2l0aCBgcHViYC4gRXhhbXBsZToKCmBgYApwdWIgdHJhaXQgRm9vIHsgLy8gd2Ugc2V0IHRoZSBGb28gdHJhaXQgcHVibGljCiAgICBmbiBkdW1teSgmc2VsZikgeyB9Cn0KCnB1YiB0cmFpdCBCYXIgOiBGb28ge30gLy8gb2shCnB1YiBzdHJ1Y3QgQmFyMjxUOiBGb28+KHB1YiBUKTsgLy8gb2shCnB1YiBmbiBmb288VDogRm9vPiAodDogVCkge30gLy8gb2shCgpmbiBtYWluKCkge30KYGBgCkUwNDQ2QSBwcml2YXRlIHR5cGUgd2FzIHVzZWQgaW4gYSBwdWJsaWMgdHlwZSBzaWduYXR1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDQ2CiMhW2RlbnkocHJpdmF0ZV9pbl9wdWJsaWMpXQpzdHJ1Y3QgQmFyKHUzMik7Cgptb2QgZm9vIHsKICAgIHVzZSBjcmF0ZTo6QmFyOwogICAgcHViIGZuIGJhcigpIC0+IEJhciB7IC8vIGVycm9yOiBwcml2YXRlIHR5cGUgaW4gcHVibGljIGludGVyZmFjZQogICAgICAgIEJhcigwKQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpUaGVyZSBhcmUgdHdvIHdheXMgdG8gc29sdmUgdGhpcyBlcnJvci4gVGhlIGZpcnN0IGlzIHRvIG1ha2UgdGhlIHB1YmxpYyB0eXBlCnNpZ25hdHVyZSBvbmx5IHB1YmxpYyB0byBhIG1vZHVsZSB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSB0eXBlLgpUaGlzIGlzIGRvbmUgYnkgdXNpbmcgcHViKGNyYXRlKSBvciBwdWIoaW4gY3JhdGU6Om15X21vZDo6ZXRjKQpFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXIodTMyKTsKCm1vZCBmb28gewogICAgdXNlIGNyYXRlOjpCYXI7CiAgICBwdWIoY3JhdGUpIGZuIGJhcigpIC0+IEJhciB7IC8vIG9ubHkgcHVibGljIHRvIGNyYXRlIHJvb3QKICAgICAgICBCYXIoMCkKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIG90aGVyIHdheSB0byBzb2x2ZSB0aGlzIGVycm9yIGlzIHRvIG1ha2UgdGhlIHByaXZhdGUgdHlwZSBwdWJsaWMuCkV4YW1wbGU6CgpgYGAKcHViIHN0cnVjdCBCYXIodTMyKTsgLy8gd2Ugc2V0IHRoZSBCYXIgdHlwZSBwdWJsaWMKbW9kIGZvbyB7CiAgICB1c2UgY3JhdGU6OkJhcjsKICAgIHB1YiBmbiBiYXIoKSAtPiBCYXIgeyAvLyBvayEKICAgICAgICBCYXIoMCkKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYApFMDQ0NyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBgcHViYCBrZXl3b3JkIHdhcyB1c2VkIGluc2lkZSBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYApmbiBmb28oKSB7CiAgICBwdWIgc3RydWN0IEJhcjsgLy8gZXJyb3I6IHZpc2liaWxpdHkgaGFzIG5vIGVmZmVjdCBpbnNpZGUgZnVuY3Rpb25zCn0KYGBgCgpTaW5jZSB3ZSBjYW5ub3QgYWNjZXNzIGl0ZW1zIGRlZmluZWQgaW5zaWRlIGEgZnVuY3Rpb24sIHRoZSB2aXNpYmlsaXR5IG9mIGl0cwppdGVtcyBkb2VzIG5vdCBpbXBhY3Qgb3V0ZXIgY29kZS4gU28gdXNpbmcgdGhlIGBwdWJgIGtleXdvcmQgaW4gdGhpcyBjb250ZXh0CmlzIGludmFsaWQuCkUwNDQ4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGBwdWJgIGtleXdvcmQgd2FzIHVzZWQgaW5zaWRlIGEgcHVibGljIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnB1YiBlbnVtIEZvbyB7CiAgICBwdWIgQmFyLCAvLyBlcnJvcjogdW5uZWNlc3NhcnkgYHB1YmAgdmlzaWJpbGl0eQp9CmBgYAoKU2luY2UgdGhlIGVudW0gaXMgYWxyZWFkeSBwdWJsaWMsIGFkZGluZyBgcHViYCBvbiBvbmUgaXRzIGVsZW1lbnRzIGlzCnVubmVjZXNzYXJ5LiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmVudW0gRm9vIHsKICAgIHB1YiBCYXIsIC8vIG5vdCBvayEKfQpgYGAKClRoaXMgaXMgdGhlIGNvcnJlY3Qgc3ludGF4OgoKYGBgCnB1YiBlbnVtIEZvbyB7CiAgICBCYXIsIC8vIG9rIQp9CmBgYApFMDQ0OUEgdmlzaWJpbGl0eSBxdWFsaWZpZXIgd2FzIHVzZWQgd2hlbiBpdCB3YXMgdW5uZWNlc3NhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQ0OQpzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpwdWIgaW1wbCBCYXIge30gLy8gZXJyb3I6IHVubmVjZXNzYXJ5IHZpc2liaWxpdHkgcXVhbGlmaWVyCgpwdWIgaW1wbCBGb28gZm9yIEJhciB7IC8vIGVycm9yOiB1bm5lY2Vzc2FyeSB2aXNpYmlsaXR5IHF1YWxpZmllcgogICAgcHViIGZuIGZvbygpIHt9IC8vIGVycm9yOiB1bm5lY2Vzc2FyeSB2aXNpYmlsaXR5IHF1YWxpZmllcgp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSByZW1vdmUgdGhlIHZpc2liaWxpdHkgcXVhbGlmaWVyIHdoZW4gaXQgaXMgbm90CnJlcXVpcmVkLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCi8vIERpcmVjdGx5IGltcGxlbWVudGVkIG1ldGhvZHMgc2hhcmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHR5cGUgaXRzZWxmLAovLyBzbyBgcHViYCBpcyB1bm5lY2Vzc2FyeSBoZXJlCmltcGwgQmFyIHt9CgovLyBUcmFpdCBtZXRob2RzIHNoYXJlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSB0cmFpdCwgc28gYHB1YmAgaXMKLy8gdW5uZWNlc3NhcnkgaW4gZWl0aGVyIGNhc2UKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fQp9CmBgYApFMDQ1MUEgc3RydWN0IGNvbnN0cnVjdG9yIHdpdGggcHJpdmF0ZSBmaWVsZHMgd2FzIGludm9rZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDUxCm1vZCBCYXIgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiBhOiBpc2l6ZSwKICAgICAgICBiOiBpc2l6ZSwKICAgIH0KfQoKbGV0IGYgPSBCYXI6OkZvb3sgYTogMCwgYjogMCB9OyAvLyBlcnJvcjogZmllbGQgYGJgIG9mIHN0cnVjdCBgQmFyOjpGb29gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGlzIHByaXZhdGUKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGVuc3VyZSB0aGF0IGFsbCB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3QgYXJlIHB1YmxpYywKb3IgaW1wbGVtZW50IGEgZnVuY3Rpb24gZm9yIGVhc3kgaW5zdGFudGlhdGlvbi4gRXhhbXBsZXM6CgpgYGAKbW9kIEJhciB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIGE6IGlzaXplLAogICAgICAgIHB1YiBiOiBpc2l6ZSwgLy8gd2Ugc2V0IGBiYCBmaWVsZCBwdWJsaWMKICAgIH0KfQoKbGV0IGYgPSBCYXI6OkZvb3sgYTogMCwgYjogMCB9OyAvLyBvayEKYGBgCgpPcjoKCmBgYAptb2QgQmFyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICBwdWIgYTogaXNpemUsCiAgICAgICAgYjogaXNpemUsIC8vIHN0aWxsIHByaXZhdGUKICAgIH0KCiAgICBpbXBsIEZvbyB7CiAgICAgICAgcHViIGZuIG5ldygpIC0+IEZvbyB7IC8vIHdlIGNyZWF0ZSBhIG1ldGhvZCB0byBpbnN0YW50aWF0ZSBgRm9vYAogICAgICAgICAgICBGb28geyBhOiAwLCBiOiAwIH0KICAgICAgICB9CiAgICB9Cn0KCmxldCBmID0gQmFyOjpGb286Om5ldygpOyAvLyBvayEKYGBgCkUwNDUyQW4gaW52YWxpZCBsaW50IGF0dHJpYnV0ZSBoYXMgYmVlbiBnaXZlbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTIKIyFbYWxsb3coZm9vID0gIiIpXSAvLyBlcnJvcjogbWFsZm9ybWVkIGxpbnQgYXR0cmlidXRlCmBgYAoKTGludCBhdHRyaWJ1dGVzIG9ubHkgYWNjZXB0IGEgbGlzdCBvZiBpZGVudGlmaWVycyAod2hlcmUgZWFjaCBpZGVudGlmaWVyIGlzIGEKbGludCBuYW1lKS4gRW5zdXJlIHRoZSBhdHRyaWJ1dGUgaXMgb2YgdGhpcyBmb3JtOgoKYGBgCiMhW2FsbG93KGZvbyldIC8vIG9rIQovLyBvcjoKIyFbYWxsb3coZm9vLCBmb28yKV0gLy8gb2shCmBgYApFMDQ1M0EgbGludCBjaGVjayBhdHRyaWJ1dGUgd2FzIG92ZXJydWxlZCBieSBhIGBmb3JiaWRgIGRpcmVjdGl2ZSBzZXQgYXMgYW4KYXR0cmlidXRlIG9uIGFuIGVuY2xvc2luZyBzY29wZSwgb3Igb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBgLUZgIG9wdGlvbi4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTMKIyFbZm9yYmlkKG5vbl9zbmFrZV9jYXNlKV0KCiNbYWxsb3cobm9uX3NuYWtlX2Nhc2UpXQpmbiBtYWluKCkgewogICAgbGV0IE15TnVtYmVyID0gMjsgLy8gZXJyb3I6IGFsbG93KG5vbl9zbmFrZV9jYXNlKSBvdmVycnVsZWQgYnkgb3V0ZXIKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBmb3JiaWQobm9uX3NuYWtlX2Nhc2UpCn0KYGBgCgpUaGUgYGZvcmJpZGAgbGludCBzZXR0aW5nLCBsaWtlIGBkZW55YCwgdHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgY29tcGlsZXIKd2FybmluZyBpbnRvIGEgaGFyZCBlcnJvci4gVW5saWtlIGBkZW55YCwgYGZvcmJpZGAgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcKb3ZlcnJpZGRlbiBieSBpbm5lciBhdHRyaWJ1dGVzLgoKSWYgeW91J3JlIHN1cmUgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGxpbnQgY2hlY2ssIHlvdSBjYW4gY2hhbmdlIGBmb3JiaWRgIHRvCmBkZW55YCAob3IgdXNlIGAtRGAgaW5zdGVhZCBvZiBgLUZgIGlmIHRoZSBgZm9yYmlkYCBzZXR0aW5nIHdhcyBnaXZlbiBhcyBhCmNvbW1hbmQtbGluZSBvcHRpb24pIHRvIGFsbG93IHRoZSBpbm5lciBsaW50IGNoZWNrIGF0dHJpYnV0ZToKCmBgYAojIVtkZW55KG5vbl9zbmFrZV9jYXNlKV0KCiNbYWxsb3cobm9uX3NuYWtlX2Nhc2UpXQpmbiBtYWluKCkgewogICAgbGV0IE15TnVtYmVyID0gMjsgLy8gb2shCn0KYGBgCgpPdGhlcndpc2UsIGVkaXQgdGhlIGNvZGUgdG8gcGFzcyB0aGUgbGludCBjaGVjaywgYW5kIHJlbW92ZSB0aGUgb3ZlcnJ1bGVkCmF0dHJpYnV0ZToKCmBgYAojIVtmb3JiaWQobm9uX3NuYWtlX2Nhc2UpXQoKZm4gbWFpbigpIHsKICAgIGxldCBteV9udW1iZXIgPSAyOwp9CmBgYApFMDQ1NEEgbGluayBuYW1lIHdhcyBnaXZlbiB3aXRoIGFuIGVtcHR5IG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDU0CiNbbGluayhuYW1lID0gIiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiBgI1tsaW5rKG5hbWUgPSAiIildYCBnaXZlbiB3aXRoIGVtcHR5IG5hbWUKYGBgCgpUaGUgcnVzdCBjb21waWxlciBjYW5ub3QgbGluayB0byBhbiBleHRlcm5hbCBsaWJyYXJ5IGlmIHlvdSBkb24ndCBnaXZlIGl0IGl0cwpuYW1lLiBFeGFtcGxlOgoKYGBgbm9fcnVuCiNbbGluayhuYW1lID0gInNvbWVfbGliIildIGV4dGVybiAiQyIge30gLy8gb2shCmBgYApFMDQ1NUxpbmtpbmcgd2l0aCBga2luZD1mcmFtZXdvcmtgIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGFyZ2V0aW5nIG1hY09TLAphcyBmcmFtZXdvcmtzIGFyZSBzcGVjaWZpYyB0byB0aGF0IG9wZXJhdGluZyBzeXN0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChzaG91bGQtY29tcGlsZV9mYWlsLWJ1dC1jYW5ub3QtZG9jdGVzdC1jb25kaXRpb25hbGx5LXdpdGhvdXQtbWFjb3MpCiNbbGluayhuYW1lID0gIkZvb0NvcmVTZXJ2aWNlcyIsIGtpbmQgPSAiZnJhbWV3b3JrIildIGV4dGVybiAiQyIge30KLy8gT1MgdXNlZCB0byBjb21waWxlIGlzIExpbnV4IGZvciBleGFtcGxlCmBgYAoKVG8gc29sdmUgdGhpcyBlcnJvciB5b3UgY2FuIHVzZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjoKCmBgYAojW2NmZ19hdHRyKHRhcmdldD0ibWFjb3MiLCBsaW5rKG5hbWUgPSAiRm9vQ29yZVNlcnZpY2VzIiwga2luZCA9ICJmcmFtZXdvcmsiKSldCmV4dGVybiAiQyIge30KYGBgCgpMZWFybiBtb3JlIGluIHRoZSBbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWwjY29uZGl0aW9uYWwtY29tcGlsYXRpb24KRTA0NThBbiB1bmtub3duICJraW5kIiB3YXMgc3BlY2lmaWVkIGZvciBhIGxpbmsgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OAojW2xpbmsoa2luZCA9ICJ3b25kZXJmdWxfdW5pY29ybiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiB1bmtub3duIGtpbmQ6IGB3b25kZXJmdWxfdW5pY29ybmAKYGBgCgpQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkICJraW5kIiB2YWx1ZSwgZnJvbSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKCiogc3RhdGljCiogZHlsaWIKKiBmcmFtZXdvcmsKRTA0NTlBIGxpbmsgd2FzIHVzZWQgd2l0aG91dCBhIG5hbWUgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OQojW2xpbmsoa2luZCA9ICJkeWxpYiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiBgI1tsaW5rKC4uLildYCBzcGVjaWZpZWQgd2l0aG91dCBgbmFtZSA9ICJmb28iYApgYGAKClBsZWFzZSBhZGQgdGhlIG5hbWUgcGFyYW1ldGVyIHRvIGFsbG93IHRoZSBydXN0IGNvbXBpbGVyIHRvIGZpbmQgdGhlIGxpYnJhcnkKeW91IHdhbnQuIEV4YW1wbGU6CgpgYGBub19ydW4KI1tsaW5rKGtpbmQgPSAiZHlsaWIiLCBuYW1lID0gInNvbWVfbGliIildIGV4dGVybiAiQyIge30gLy8gb2shCmBgYApFMDQ2M0EgcGx1Z2luL2NyYXRlIHdhcyBkZWNsYXJlZCBidXQgY2Fubm90IGJlIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2MwojIVtmZWF0dXJlKHBsdWdpbildCiMhW3BsdWdpbihjb29raWVfbW9uc3RlcildIC8vIGVycm9yOiBjYW4ndCBmaW5kIGNyYXRlIGZvciBgY29va2llX21vbnN0ZXJgCmV4dGVybiBjcmF0ZSBjYWtlX2lzX2FfbGllOyAvLyBlcnJvcjogY2FuJ3QgZmluZCBjcmF0ZSBmb3IgYGNha2VfaXNfYV9saWVgCmBgYAoKWW91IG5lZWQgdG8gbGluayB5b3VyIGNvZGUgdG8gdGhlIHJlbGV2YW50IGNyYXRlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGl0Cih0aHJvdWdoIENhcmdvIG9yIHRoZSBgLUxgIG9wdGlvbiBvZiBydXN0YyBleGFtcGxlKS4gUGx1Z2lucyBhcmUgY3JhdGVzIGFzCndlbGwsIGFuZCB5b3UgbGluayB0byB0aGVtIHRoZSBzYW1lIHdheS4KCiMjIENvbW1vbiBjYXVzZXMKCi0gVGhlIGNyYXRlIGlzIG5vdCBwcmVzZW50IGF0IGFsbC4gSWYgdXNpbmcgQ2FyZ28sIGFkZCBpdCB0byBgW2RlcGVuZGVuY2llc11gCiAgaW4gQ2FyZ28udG9tbC4KLSBUaGUgY3JhdGUgaXMgcHJlc2VudCwgYnV0IHVuZGVyIGEgZGlmZmVyZW50IG5hbWUuIElmIHVzaW5nIENhcmdvLCBsb29rIGZvcgogIGBwYWNrYWdlID0gYCB1bmRlciBgW2RlcGVuZGVuY2llc11gIGluIENhcmdvLnRvbWwuCgojIyBDb21tb24gY2F1c2VzIGZvciBtaXNzaW5nIGBzdGRgIG9yIGBjb3JlYAoKLSBZb3UgYXJlIGNyb3NzLWNvbXBpbGluZyBmb3IgYSB0YXJnZXQgd2hpY2ggZG9lc24ndCBoYXZlIGBzdGRgIHByZXBhY2thZ2VkLgogIENvbnNpZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICsgQWRkaW5nIGEgcHJlLWNvbXBpbGVkIHZlcnNpb24gb2Ygc3RkIHdpdGggYHJ1c3R1cCB0YXJnZXQgYWRkYAogICsgQnVpbGRpbmcgc3RkIGZyb20gc291cmNlIHdpdGggYGNhcmdvIGJ1aWxkIC1aIGJ1aWxkLXN0ZGAKICArIFVzaW5nIGAjIVtub19zdGRdYCBhdCB0aGUgY3JhdGUgcm9vdCwgc28geW91IHdvbid0IG5lZWQgYHN0ZGAgaW4gdGhlIGZpcnN0CiAgICBwbGFjZS4KLSBZb3UgYXJlIGRldmVsb3BpbmcgdGhlIGNvbXBpbGVyIGl0c2VsZiBhbmQgaGF2ZW4ndCBidWlsdCBsaWJzdGQgZnJvbSBzb3VyY2UuCiAgWW91IGNhbiB1c3VhbGx5IGJ1aWxkIGl0IHdpdGggYHgucHkgYnVpbGQgbGlicmFyeS9zdGRgLiBNb3JlIGluZm9ybWF0aW9uCiAgYWJvdXQgeC5weSBpcyBhdmFpbGFibGUgaW4gdGhlIFtydXN0Yy1kZXYtZ3VpZGVdLgoKW3J1c3RjLWRldi1ndWlkZV06IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvYnVpbGRpbmcvaG93LXRvLWJ1aWxkLWFuZC1ydW4uaHRtbCNidWlsZGluZy10aGUtY29tcGlsZXIKRTA0NjRUaGUgY29tcGlsZXIgZm91bmQgbXVsdGlwbGUgbGlicmFyeSBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgY3JhdGUgbmFtZS4KClRoaXMgZXJyb3IgY2FuIG9jY3VyIGluIHNldmVyYWwgZGlmZmVyZW50IGNhc2VzIC0tIGZvciBleGFtcGxlLCB3aGVuIHVzaW5nCmBleHRlcm4gY3JhdGVgIG9yIHBhc3NpbmcgYC0tZXh0ZXJuYCBvcHRpb25zIHdpdGhvdXQgY3JhdGUgcGF0aHMuIEl0IGNhbiBhbHNvIGJlCmNhdXNlZCBieSBjYWNoaW5nIGlzc3VlcyB3aXRoIHRoZSBidWlsZCBkaXJlY3RvcnksIGluIHdoaWNoIGNhc2UgYGNhcmdvIGNsZWFuYAptYXkgaGVscC4KRTA0NjZNYWNybyBpbXBvcnQgZGVjbGFyYXRpb24gd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDY2CiNbbWFjcm9fdXNlKGFfbWFjcm8oYW5vdGhlcl9tYWNybykpXSAvLyBlcnJvcjogaW52YWxpZCBpbXBvcnQgZGVjbGFyYXRpb24KZXh0ZXJuIGNyYXRlIGNvcmUgYXMgc29tZV9jcmF0ZTsKCiNbbWFjcm9fdXNlKGlfd2FudCA9ICJzb21lX21hY3JvcyIpXSAvLyBlcnJvcjogaW52YWxpZCBpbXBvcnQgZGVjbGFyYXRpb24KZXh0ZXJuIGNyYXRlIGNvcmUgYXMgYW5vdGhlcl9jcmF0ZTsKYGBgCgpUaGlzIGlzIGEgc3ludGF4IGVycm9yIGF0IHRoZSBsZXZlbCBvZiBhdHRyaWJ1dGUgZGVjbGFyYXRpb25zLiBUaGUgcHJvcGVyCnN5bnRheCBmb3IgbWFjcm8gaW1wb3J0cyBpcyB0aGUgZm9sbG93aW5nOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCi8vIEluIHNvbWVfY3JhdGU6CiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZ2V0X3RhY29zIHsKICAgIC4uLgp9CgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGdldF9waW1pZW50b3MgewogICAgLi4uCn0KCi8vIEluIHlvdXIgY3JhdGU6CiNbbWFjcm9fdXNlKGdldF90YWNvcywgZ2V0X3BpbWllbnRvcyldIC8vIEl0IGltcG9ydHMgYGdldF90YWNvc2AgYW5kCmV4dGVybiBjcmF0ZSBzb21lX2NyYXRlOyAgICAgICAgICAgICAgIC8vIGBnZXRfcGltaWVudG9zYCBtYWNyb3MgZnJvbSBzb21lX2NyYXRlCmBgYAoKSWYgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IGFsbCBleHBvcnRlZCBtYWNyb3MsIHdyaXRlIGBtYWNyb191c2VgIHdpdGggbm8KYXJndW1lbnRzLgpFMDQ2OEEgbm9uLXJvb3QgbW9kdWxlIHRyaWVkIHRvIGltcG9ydCBtYWNyb3MgZnJvbSBhbm90aGVyIGNyYXRlLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2OAptb2QgZm9vIHsKICAgICNbbWFjcm9fdXNlKGRlYnVnX2Fzc2VydCldICAvLyBlcnJvcjogbXVzdCBiZSBhdCBjcmF0ZSByb290IHRvIGltcG9ydAogICAgZXh0ZXJuIGNyYXRlIGNvcmU7ICAgICAgICAgIC8vICAgICAgICBtYWNyb3MgZnJvbSBhbm90aGVyIGNyYXRlCiAgICBmbiBydW5fbWFjcm8oKSB7IGRlYnVnX2Fzc2VydCEodHJ1ZSk7IH0KfQpgYGAKCk9ubHkgYGV4dGVybiBjcmF0ZWAgaW1wb3J0cyBhdCB0aGUgY3JhdGUgcm9vdCBsZXZlbCBhcmUgYWxsb3dlZCB0byBpbXBvcnQKbWFjcm9zLgoKRWl0aGVyIG1vdmUgdGhlIG1hY3JvIGltcG9ydCB0byBjcmF0ZSByb290IG9yIGRvIHdpdGhvdXQgdGhlIGZvcmVpZ24gbWFjcm9zLgpUaGlzIHdpbGwgd29yazoKCmBgYAojW21hY3JvX3VzZShkZWJ1Z19hc3NlcnQpXSAvLyBvayEKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIGZuIHJ1bl9tYWNybygpIHsgZGVidWdfYXNzZXJ0ISh0cnVlKTsgfQp9CiMgZm4gbWFpbigpIHt9CmBgYApFMDQ2OUEgbWFjcm8gbGlzdGVkIGZvciBpbXBvcnQgd2FzIG5vdCBmb3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NjkKI1ttYWNyb191c2UoZHJpbmssIGJlX21lcnJ5KV0gLy8gZXJyb3I6IGltcG9ydGVkIG1hY3JvIG5vdCBmb3VuZApleHRlcm4gY3JhdGUgYWxsb2M7CgpmbiBtYWluKCkgewogICAgLy8gLi4uCn0KYGBgCgpFaXRoZXIgdGhlIGxpc3RlZCBtYWNybyBpcyBub3QgY29udGFpbmVkIGluIHRoZSBpbXBvcnRlZCBjcmF0ZSwgb3IgaXQgaXMgbm90CmV4cG9ydGVkIGZyb20gdGhlIGdpdmVuIGNyYXRlLgoKVGhpcyBjb3VsZCBiZSBjYXVzZWQgYnkgYSB0eXBvLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBtYWNybydzIG5hbWU/CgpEb3VibGUtY2hlY2sgdGhlIG5hbWVzIG9mIHRoZSBtYWNyb3MgbGlzdGVkIGZvciBpbXBvcnQsIGFuZCB0aGF0IHRoZSBjcmF0ZQppbiBxdWVzdGlvbiBleHBvcnRzIHRoZW0uCgpBIHdvcmtpbmcgdmVyc2lvbiB3b3VsZCBiZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQovLyBJbiBzb21lX2NyYXRlIGNyYXRlOgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGVhdCB7CiAgICAuLi4KfQoKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBkcmluayB7CiAgICAuLi4KfQoKLy8gSW4geW91ciBjcmF0ZToKI1ttYWNyb191c2UoZWF0LCBkcmluayldCmV4dGVybiBjcmF0ZSBzb21lX2NyYXRlOyAvL29rIQpgYGAKRTA0NzdUaGUgdHlwZSBkb2VzIG5vdCBmdWxmaWxsIHRoZSByZXF1aXJlZCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NzcKdXNlIHN0ZDo6c3luYzo6TXV0ZXg7CgpzdHJ1Y3QgTXlTdHJpbmc8J2E+IHsKICAgIGRhdGE6ICYnYSBzdHIsCn0KCmZuIGlfd2FudF9zdGF0aWNfY2xvc3VyZTxGPihhOiBGKQogICAgd2hlcmUgRjogRm4oKSArICdzdGF0aWMge30KCmZuIHByaW50X3N0cmluZzwnYT4oczogTXV0ZXg8TXlTdHJpbmc8J2E+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIGVycm9yOiB0aGlzIGNsb3N1cmUgaGFzIGxpZmV0aW1lICdhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmF0aGVyIHRoYW4gJ3N0YXRpYwogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBjbG9zdXJlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGAnc3RhdGljYCBsaWZldGltZSBjb25zdHJhaW50LgpUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBsaWZldGltZSBvZiB0aGUgdHlwZS4gSGVyZSwgd2UKY2FuIGZpeCB0aGlzIHByb2JsZW0gYnkgZ2l2aW5nIGBzYCBhIHN0YXRpYyBsaWZldGltZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpNdXRleDsKCnN0cnVjdCBNeVN0cmluZzwnYT4gewogICAgZGF0YTogJidhIHN0ciwKfQoKZm4gaV93YW50X3N0YXRpY19jbG9zdXJlPEY+KGE6IEYpCiAgICB3aGVyZSBGOiBGbigpICsgJ3N0YXRpYyB7fQoKZm4gcHJpbnRfc3RyaW5nKHM6IE11dGV4PE15U3RyaW5nPCdzdGF0aWM+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCkUwNDc4QSBsaWZldGltZSBib3VuZCB3YXMgbm90IHNhdGlzZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NzgKLy8gQ2hlY2sgdGhhdCB0aGUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgKGAnU25vd1doaXRlYCwgaW4gdGhpcyBleGFtcGxlKSBtdXN0Ci8vIG91dGxpdmUgYWxsIHRoZSBzdXBlcmJvdW5kcyBmcm9tIHRoZSB0cmFpdCAoYCdraXNzYCwgaW4gdGhpcyBleGFtcGxlKS4KCnRyYWl0IFdlZGRpbmc8J3Q+OiAndCB7IH0KCnN0cnVjdCBQcmluY2U8J2tpc3MsICdTbm93V2hpdGU+IHsKICAgIGNoaWxkOiBCb3g8V2VkZGluZzwna2lzcz4gKyAnU25vd1doaXRlPiwKICAgIC8vIGVycm9yOiBsaWZldGltZSBib3VuZCBub3Qgc2F0aXNmaWVkCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBgJ1Nub3dXaGl0ZWAgbGlmZXRpbWUgaXMgc3VwcG9zZWQgdG8gb3V0bGl2ZSB0aGUgYCdraXNzYApsaWZldGltZSBidXQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBgUHJpbmNlYCBzdHJ1Y3QgZG9lc24ndCBlbmZvcmNlIGl0LiBUbyBmaXgKdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gc3BlY2lmeSBpdDoKCmBgYAp0cmFpdCBXZWRkaW5nPCd0PjogJ3QgeyB9CgpzdHJ1Y3QgUHJpbmNlPCdraXNzLCAnU25vd1doaXRlOiAna2lzcz4geyAvLyBZb3Ugc2F5IGhlcmUgdGhhdCAnU25vd1doaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgbGl2ZSBsb25nZXIgdGhhbiAna2lzcy4KICAgIGNoaWxkOiBCb3g8V2VkZGluZzwna2lzcz4gKyAnU25vd1doaXRlPiwgLy8gQW5kIG5vdyBpdCdzIGFsbCBnb29kIQp9CmBgYApFMDQ4MiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgbGlmZXRpbWUgb2YgYSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBvdXRsaXZlIHRoZSBmdW5jdGlvbiBjYWxsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMApmbiBwcmVmaXg8J2E+KAogICAgd29yZHM6IGltcGwgSXRlcmF0b3I8SXRlbSA9ICYnYSBzdHI+CikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gU3RyaW5nPiB7IC8vIGVycm9yIQogICAgd29yZHMubWFwKHx2fCBmb3JtYXQhKCJmb28te30iLCB2KSkKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBtYWtlIHRoZSBsaWZldGltZSBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgZXhwbGljaXQ6CgpgYGAKZm4gcHJlZml4PCdhPigKICAgIHdvcmRzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSAmJ2Egc3RyPiArICdhCikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gU3RyaW5nPiArICdhIHsgLy8gb2shCiAgICB3b3Jkcy5tYXAofHZ8IGZvcm1hdCEoImZvby17fSIsIHYpKQp9CmBgYAoKVGhlIFtgaW1wbCBUcmFpdGBdIGZlYXR1cmUgaW4gdGhpcyBleGFtcGxlIHVzZXMgYW4gaW1wbGljaXQgYCdzdGF0aWNgIGxpZmV0aW1lCnJlc3RyaWN0aW9uIGluIHRoZSByZXR1cm5lZCB0eXBlLiBIb3dldmVyIHRoZSB0eXBlIGltcGxlbWVudGluZyB0aGUgYEl0ZXJhdG9yYApwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGxpdmVzIGp1c3QgYXMgbG9uZyBhcyBgJ2FgLCB3aGljaCBpcyBub3QgbG9uZyBlbm91Z2guCgpUaGUgc29sdXRpb24gaW52b2x2ZXMgYWRkaW5nIGxpZmV0aW1lIGJvdW5kIHRvIGJvdGggZnVuY3Rpb24gYXJndW1lbnQgYW5kCnRoZSByZXR1cm4gdmFsdWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBpbnNpZGUgdGhlIGl0ZXJhdG9yCmFyZSBub3QgZHJvcHBlZCB3aGVuIHRoZSBmdW5jdGlvbiBnb2VzIG91dCBvZiB0aGUgc2NvcGUuCgpBbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBndWFyYW50ZWUgdGhhdCB0aGUgYEl0ZW1gIHJlZmVyZW5jZXMKaW4gdGhlIGl0ZXJhdG9yIGFyZSBhbGl2ZSBmb3IgdGhlIHdob2xlIGxpZmV0aW1lIG9mIHRoZSBwcm9ncmFtLgoKYGBgCmZuIHByZWZpeCgKICAgIHdvcmRzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSAmJ3N0YXRpYyBzdHI+CikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gU3RyaW5nPiB7ICAvLyBvayEKICAgIHdvcmRzLm1hcCh8dnwgZm9ybWF0ISgiZm9vLXt9IiwgdikpCn0KYGBgCgpBIHNpbWlsYXIgbGlmZXRpbWUgcHJvYmxlbSBtaWdodCBhcmlzZSB3aGVuIHJldHVybmluZyBjbG9zdXJlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMApmbiBmb28oCiAgICB4OiAmbXV0IFZlYzxpMzI+CikgLT4gaW1wbCBGbk11dCgmbXV0IFZlYzxpMzI+KSAtPiAmW2kzMl0geyAvLyBlcnJvciEKICAgIHx5fCB7CiAgICAgICAgeS5hcHBlbmQoeCk7CiAgICAgICAgeQogICAgfQp9CmBgYAoKQW5hbG9naWNhbGx5LCBhIHNvbHV0aW9uIGhlcmUgaXMgdG8gdXNlIGV4cGxpY2l0IHJldHVybiBsaWZldGltZQphbmQgbW92ZSB0aGUgb3duZXJzaGlwIG9mIHRoZSB2YXJpYWJsZSB0byB0aGUgY2xvc3VyZS4KCmBgYApmbiBmb288J2E+KAogICAgeDogJidhIG11dCBWZWM8aTMyPgopIC0+IGltcGwgRm5NdXQoJm11dCBWZWM8aTMyPikgLT4gJltpMzJdICsgJ2EgeyAvLyBvayEKICAgIG1vdmUgfHl8IHsKICAgICAgICB5LmFwcGVuZCh4KTsKICAgICAgICB5CiAgICB9Cn0KYGBgCgpUbyBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgbGlmZXRpbWUgdHJlYXRtZW50IGluIHRoZSBbYGltcGwgVHJhaXRgXSwKcGxlYXNlIHNlZSB0aGUgW1JGQyAxOTUxXS4KCltgaW1wbCBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS90eXBlcy9pbXBsLXRyYWl0Lmh0bWwKW1JGQyAxOTUxXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3JmY3MvMTk1MS1leHBhbmQtaW1wbC10cmFpdC5odG1sCkUwNDkxQSByZWZlcmVuY2UgaGFzIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGRhdGEgaXQgcmVmZXJlbmNlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTEKc3RydWN0IEZvbzwnYT4gewogICAgeDogZm4oJidhIGkzMiksCn0KCnRyYWl0IFRyYWl0PCdhLCAnYj4gewogICAgdHlwZSBPdXQ7Cn0KCmltcGw8J2EsICdiPiBUcmFpdDwnYSwgJ2I+IGZvciB1c2l6ZSB7CiAgICB0eXBlIE91dCA9ICYnYSBGb288J2I+OyAvLyBlcnJvciEKfQpgYGAKCkhlcmUsIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdCBiZSBzdXJlIHRoYXQgdGhlIGAnYmAgbGlmZXRpbWUKd2lsbCBsaXZlIGxvbmdlciB0aGFuIGAnYWAsIHdoaWNoIHNob3VsZCBiZSBtYW5kYXRvcnkgaW4gb3JkZXIgdG8gYmUgc3VyZSB0aGF0CmBUcmFpdDo6T3V0YCB3aWxsIGFsd2F5cyBoYXZlIGEgcmVmZXJlbmNlIHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHR5cGUuIFNvIGluCnRoaXMgY2FzZSwgd2UganVzdCBuZWVkIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRoYW4gYCdiYCBtdXN0IG91dGxpdmUgYCdhYDoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBmbigmJ2EgaTMyKSwKfQoKdHJhaXQgVHJhaXQ8J2EsICdiPiB7CiAgICB0eXBlIE91dDsKfQoKaW1wbDwnYSwgJ2I6ICdhPiBUcmFpdDwnYSwgJ2I+IGZvciB1c2l6ZSB7IC8vIHdlIGFkZGVkIHRoZSBsaWZldGltZSBlbmZvcmNlbWVudAogICAgdHlwZSBPdXQgPSAmJ2EgRm9vPCdiPjsgLy8gaXQgbm93IHdvcmtzIQp9CmBgYApFMDQ5MkEgYm9ycm93IG9mIGEgY29uc3RhbnQgY29udGFpbmluZyBpbnRlcmlvciBtdXRhYmlsaXR5IHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkyCnVzZSBzdGQ6OnN5bmM6OmF0b21pYzo6QXRvbWljVXNpemU7Cgpjb25zdCBBOiBBdG9taWNVc2l6ZSA9IEF0b21pY1VzaXplOjpuZXcoMCk7CmNvbnN0IEI6ICYnc3RhdGljIEF0b21pY1VzaXplID0gJkE7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGEgY29uc3RhbnQgd2hpY2ggbWF5IGNvbnRhaW4gaW50ZXJpb3IgbXV0YWJpbGl0eSwKLy8gICAgICAgIGNyZWF0ZSBhIHN0YXRpYyBpbnN0ZWFkCmBgYAoKQSBgY29uc3RgIHJlcHJlc2VudHMgYSBjb25zdGFudCB2YWx1ZSB0aGF0IHNob3VsZCBuZXZlciBjaGFuZ2UuIElmIG9uZSB0YWtlcwphIGAmYCByZWZlcmVuY2UgdG8gdGhlIGNvbnN0YW50LCB0aGVuIG9uZSBpcyB0YWtpbmcgYSBwb2ludGVyIHRvIHNvbWUgbWVtb3J5CmxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIHZhbHVlLiBOb3JtYWxseSB0aGlzIGlzIHBlcmZlY3RseSBmaW5lOiBtb3N0IHZhbHVlcwpjYW4ndCBiZSBjaGFuZ2VkIHZpYSBhIHNoYXJlZCBgJmAgcG9pbnRlciwgYnV0IGludGVyaW9yIG11dGFiaWxpdHkgd291bGQgYWxsb3cKaXQuIFRoYXQgaXMsIGEgY29uc3RhbnQgdmFsdWUgY291bGQgYmUgbXV0YXRlZC4gT24gdGhlIG90aGVyIGhhbmQsIGEgYHN0YXRpY2AgaXMKZXhwbGljaXRseSBhIHNpbmdsZSBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNhbiBiZSBtdXRhdGVkIGF0IHdpbGwuCgpTbywgaW4gb3JkZXIgdG8gc29sdmUgdGhpcyBlcnJvciwgdXNlIHN0YXRpY3Mgd2hpY2ggYXJlIGBTeW5jYDoKCmBgYAp1c2Ugc3RkOjpzeW5jOjphdG9taWM6OkF0b21pY1VzaXplOwoKc3RhdGljIEE6IEF0b21pY1VzaXplID0gQXRvbWljVXNpemU6Om5ldygwKTsKc3RhdGljIEI6ICYnc3RhdGljIEF0b21pY1VzaXplID0gJkE7IC8vIG9rIQpgYGAKCllvdSBjYW4gYWxzbyBoYXZlIHRoaXMgZXJyb3Igd2hpbGUgdXNpbmcgYSBjZWxsIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTIKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCmNvbnN0IEE6IENlbGw8dXNpemU+ID0gQ2VsbDo6bmV3KDEpOwpjb25zdCBCOiAmQ2VsbDx1c2l6ZT4gPSAmQTsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYSBjb25zdGFudCB3aGljaCBtYXkgY29udGFpbiBpbnRlcmlvciBtdXRhYmlsaXR5LAovLyAgICAgICAgY3JlYXRlIGEgc3RhdGljIGluc3RlYWQKCi8vIG9yOgpzdHJ1Y3QgQyB7IGE6IENlbGw8dXNpemU+IH0KCmNvbnN0IEQ6IEMgPSBDIHsgYTogQ2VsbDo6bmV3KDEpIH07CmNvbnN0IEU6ICZDZWxsPHVzaXplPiA9ICZELmE7IC8vIGVycm9yCgovLyBvcjoKY29uc3QgRjogJkMgPSAmRDsgLy8gZXJyb3IKYGBgCgpUaGlzIGlzIGJlY2F1c2UgY2VsbCB0eXBlcyBkbyBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCB0aHJlYWQtc2FmZS4gRHVlIHRvIHRoaXMsCnRoZXkgZG9uJ3QgaW1wbGVtZW50IFN5bmMgYW5kIHRodXMgY2FuJ3QgYmUgcGxhY2VkIGluIHN0YXRpY3MuCgpIb3dldmVyLCBpZiB5b3Ugc3RpbGwgd2lzaCB0byB1c2UgdGhlc2UgdHlwZXMsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGFuIHVuc2FmZQp3cmFwcGVyOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CnVzZSBzdGQ6Om1hcmtlcjo6U3luYzsKCnN0cnVjdCBOb3RUaHJlYWRTYWZlPFQ+IHsKICAgIHZhbHVlOiBDZWxsPFQ+LAp9Cgp1bnNhZmUgaW1wbDxUPiBTeW5jIGZvciBOb3RUaHJlYWRTYWZlPFQ+IHt9CgpzdGF0aWMgQTogTm90VGhyZWFkU2FmZTx1c2l6ZT4gPSBOb3RUaHJlYWRTYWZlIHsgdmFsdWUgOiBDZWxsOjpuZXcoMSkgfTsKc3RhdGljIEI6ICYnc3RhdGljIE5vdFRocmVhZFNhZmU8dXNpemU+ID0gJkE7IC8vIG9rIQpgYGAKClJlbWVtYmVyIHRoaXMgc29sdXRpb24gaXMgdW5zYWZlISBZb3Ugd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFjY2Vzc2VzIHRvIHRoZQpjZWxsIGFyZSBzeW5jaHJvbml6ZWQuCkUwNDkzQSB2YWx1ZSB3aXRoIGEgY3VzdG9tIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgZHJvcHBlZCBkdXJpbmcgY29uc3QtZXZhbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTMKZW51bSBEcm9wVHlwZSB7CiAgICBBLAp9CgppbXBsIERyb3AgZm9yIERyb3BUeXBlIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpzdHJ1Y3QgRm9vIHsKICAgIGZpZWxkMTogRHJvcFR5cGUsCn0KCnN0YXRpYyBGT086IEZvbyA9IEZvbyB7IGZpZWxkMTogKERyb3BUeXBlOjpBLCBEcm9wVHlwZTo6QSkuMSB9OyAvLyBlcnJvciEKYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgdGhlIGdpdmVuIHR5cGUgb3Igb25lIG9mIGl0cyBmaWVsZHMgaW1wbGVtZW50cyB0aGUKYERyb3BgIHRyYWl0LCB0aGlzIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhpbiBhIGNvbnN0CmNvbnRleHQgc2luY2UgaXQgbWF5IHJ1biBhcmJpdHJhcnksIG5vbi1jb25zdC1jaGVja2VkIGNvZGUuIFRvIHByZXZlbnQgdGhpcwppc3N1ZSwgZW5zdXJlIGFsbCB2YWx1ZXMgd2l0aCBhIGN1c3RvbSBgRHJvcGAgaW1wbGVtZW50YXRpb24gZXNjYXBlIHRoZQppbml0aWFsaXplci4KCmBgYAplbnVtIERyb3BUeXBlIHsKICAgIEEsCn0KCmltcGwgRHJvcCBmb3IgRHJvcFR5cGUgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KCnN0cnVjdCBGb28gewogICAgZmllbGQxOiBEcm9wVHlwZSwKfQoKc3RhdGljIEZPTzogRm9vID0gRm9vIHsgZmllbGQxOiBEcm9wVHlwZTo6QSB9OyAvLyBXZSBpbml0aWFsaXplIGFsbCBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBoYW5kLgpgYGAKRTA0OTVBIGxpZmV0aW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGluIHRoZSBnaXZlbiBzaXR1YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk1CmZuIHRyYW5zbXV0ZV9saWZldGltZTwnYSwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIGVycm9yIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQoKbGV0IHkgPSBCb3g6Om5ldygoNDIsKSk7CmxldCB4ID0gdHJhbnNtdXRlX2xpZmV0aW1lKCZ5KTsKYGBgCgpJbiB0aGlzIGNvZGUsIHlvdSBoYXZlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgaXNzdWU6CiAxLiBFbmZvcmNlIHRoYXQgYCdhYCBsaXZlcyBhdCBsZWFzdCBhcyBsb25nIGFzIGAnYmAuCiAyLiBVc2UgdGhlIHNhbWUgbGlmZXRpbWUgcmVxdWlyZW1lbnQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMuCgpTbyBmb3IgdGhlIGZpcnN0IHNvbHV0aW9uLCB5b3UgY2FuIGRvIGl0IGJ5IHJlcGxhY2luZyBgJ2FgIHdpdGggYCdhOiAnYmA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhOiAnYiwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIG9rIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQpgYGAKCkluIHRoZSBzZWNvbmQgeW91IGNhbiBkbyBpdCBieSBzaW1wbHkgcmVtb3ZpbmcgYCdiYCBzbyB0aGV5IGJvdGggdXNlIGAnYWA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhLCBUPih0OiAmJ2EgKFQsKSkgLT4gJidhIFQgewogICAgbWF0Y2ggKCZ0LCkgeyAvLyBvayEKICAgICAgICAoKHUsKSwpID0+IHUsCiAgICB9Cn0KYGBgCkUwNDk2QSBsaWZldGltZSBuYW1lIGlzIHNoYWRvd2luZyBhbm90aGVyIGxpZmV0aW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk2CnN0cnVjdCBGb288J2E+IHsKICAgIGE6ICYnYSBpMzIsCn0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gZjwnYT4oeDogJidhIGkzMikgeyAvLyBlcnJvcjogbGlmZXRpbWUgbmFtZSBgJ2FgIHNoYWRvd3MgYSBsaWZldGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbmFtZSB0aGF0IGlzIGFscmVhZHkgaW4gc2NvcGUKICAgIH0KfQpgYGAKClBsZWFzZSBjaGFuZ2UgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBsaWZldGltZXMgdG8gcmVtb3ZlIHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgYTogJidhIGkzMiwKfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmPCdiPih4OiAmJ2IgaTMyKSB7IC8vIG9rIQogICAgfQp9CgpmbiBtYWluKCkgewp9CmBgYApFMDQ5NyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgc3RhYmlsaXR5IGF0dHJpYnV0ZSB3YXMgdXNlZCBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojW3N0YWJsZV0gLy8gZXJyb3I6IHN0YWJpbGl0eSBhdHRyaWJ1dGVzIG1heSBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgLy8gICAgICAgIHN0YW5kYXJkIGxpYnJhcnkKZm4gZm9vKCkge30KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHN0YWJpbGl0eSBhdHRyaWJ1dGVzIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCkFsc28sIGZvciBub3csIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB3cml0ZSBkZXByZWNhdGlvbiBtZXNzYWdlcyBlaXRoZXIuCkUwNDk4VGhlIGBwbHVnaW5gIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5OAojIVtmZWF0dXJlKHBsdWdpbildCiMhW3BsdWdpbihmb28oYXJncykpXSAvLyBlcnJvcjogaW52YWxpZCBhcmd1bWVudAojIVtwbHVnaW4oYmFyPSJ0ZXN0IildIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CmBgYAoKVGhlIGAjW3BsdWdpbl1gIGF0dHJpYnV0ZSBzaG91bGQgdGFrZSBhIHNpbmdsZSBhcmd1bWVudDogdGhlIG5hbWUgb2YgdGhlIHBsdWdpbi4KCkZvciBleGFtcGxlLCBmb3IgdGhlIHBsdWdpbiBgZm9vYDoKCmBgYGlnbm9yZSAocmVxdWlyZXMgZXh0ZXJuYWwgcGx1Z2luIGNyYXRlKQojIVtmZWF0dXJlKHBsdWdpbildCiMhW3BsdWdpbihmb28pXSAvLyBvayEKYGBgCgpTZWUgdGhlIFtgcGx1Z2luYCBmZWF0dXJlXSBzZWN0aW9uIG9mIHRoZSBVbnN0YWJsZSBib29rIGZvciBtb3JlIGRldGFpbHMuCgpbYHBsdWdpbmAgZmVhdHVyZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL3BsdWdpbi5odG1sCkUwNDk5QSB2YXJpYWJsZSB3YXMgYm9ycm93ZWQgYXMgbXV0YWJsZSBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTkKbGV0IG11dCBpID0gMDsKbGV0IG11dCB4ID0gJm11dCBpOwpsZXQgbXV0IGEgPSAmbXV0IGk7Cng7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGBpYCBhcyBtdXRhYmxlIG1vcmUgdGhhbiBvbmNlIGF0IGEgdGltZQpgYGAKClBsZWFzZSBub3RlIHRoYXQgaW4gUnVzdCwgeW91IGNhbiBlaXRoZXIgaGF2ZSBtYW55IGltbXV0YWJsZSByZWZlcmVuY2VzLCBvciBvbmUKbXV0YWJsZSByZWZlcmVuY2UuIEZvciBtb3JlIGRldGFpbHMgeW91IG1heSB3YW50IHRvIHJlYWQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKCkV4YW1wbGU6CgpgYGAKbGV0IG11dCBpID0gMDsKbGV0IG11dCB4ID0gJm11dCBpOyAvLyBvayEKCi8vIG9yOgpsZXQgbXV0IGkgPSAwOwpsZXQgYSA9ICZpOyAvLyBvayEKbGV0IGIgPSAmaTsgLy8gc3RpbGwgb2shCmxldCBjID0gJmk7IC8vIHN0aWxsIG9rIQpiOwphOwpgYGAKRTA1MDBBIGJvcnJvd2VkIHZhcmlhYmxlIHdhcyB1c2VkIGJ5IGEgY2xvc3VyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDAKZm4geW91X2tub3dfbm90aGluZyhqb25fc25vdzogJm11dCBpMzIpIHsKICAgIGxldCBuaWdodHNfd2F0Y2ggPSAmam9uX3Nub3c7CiAgICBsZXQgc3RhcmtzID0gfHwgewogICAgICAgICpqb25fc25vdyA9IDM7IC8vIGVycm9yOiBjbG9zdXJlIHJlcXVpcmVzIHVuaXF1ZSBhY2Nlc3MgdG8gYGpvbl9zbm93YAogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBidXQgaXQgaXMgYWxyZWFkeSBib3Jyb3dlZAogICAgfTsKICAgIHByaW50bG4hKCJ7fSIsIG5pZ2h0c193YXRjaCk7Cn0KYGBgCgpJbiBoZXJlLCBgam9uX3Nub3dgIGlzIGFscmVhZHkgYm9ycm93ZWQgYnkgdGhlIGBuaWdodHNfd2F0Y2hgIHJlZmVyZW5jZSwgc28gaXQKY2Fubm90IGJlIGJvcnJvd2VkIGJ5IHRoZSBgc3RhcmtzYCBjbG9zdXJlIGF0IHRoZSBzYW1lIHRpbWUuIFRvIGZpeCB0aGlzIGlzc3VlLAp5b3UgY2FuIGNyZWF0ZSB0aGUgY2xvc3VyZSBhZnRlciB0aGUgYm9ycm93IGhhcyBlbmRlZDoKCmBgYApmbiB5b3Vfa25vd19ub3RoaW5nKGpvbl9zbm93OiAmbXV0IGkzMikgewogICAgbGV0IG5pZ2h0c193YXRjaCA9ICZqb25fc25vdzsKICAgIHByaW50bG4hKCJ7fSIsIG5pZ2h0c193YXRjaCk7CiAgICBsZXQgc3RhcmtzID0gfHwgewogICAgICAgICpqb25fc25vdyA9IDM7CiAgICB9Owp9CmBgYAoKT3IsIGlmIHRoZSB0eXBlIGltcGxlbWVudHMgdGhlIGBDbG9uZWAgdHJhaXQsIHlvdSBjYW4gY2xvbmUgaXQgYmV0d2VlbgpjbG9zdXJlczoKCmBgYApmbiB5b3Vfa25vd19ub3RoaW5nKGpvbl9zbm93OiAmbXV0IGkzMikgewogICAgbGV0IG11dCBqb25fY29weSA9IGpvbl9zbm93LmNsb25lKCk7CiAgICBsZXQgc3RhcmtzID0gfHwgewogICAgICAgICpqb25fc25vdyA9IDM7CiAgICB9OwogICAgcHJpbnRsbiEoInt9Iiwgam9uX2NvcHkpOwp9CmBgYApFMDUwMUEgbXV0YWJsZSB2YXJpYWJsZSBpcyB1c2VkIGJ1dCBpdCBpcyBhbHJlYWR5IGNhcHR1cmVkIGJ5IGEgY2xvc3VyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDEKZm4gaW5zaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHsKICAgIC8vIEFjdGlvbnMgd2hpY2ggcmVxdWlyZSB1bmlxdWUgYWNjZXNzCn0KCmZuIG91dHNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikgewogICAgLy8gQWN0aW9ucyB3aGljaCByZXF1aXJlIHVuaXF1ZSBhY2Nlc3MKfQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGJhciA9IHx8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShhKQogICAgfTsKICAgIG91dHNpZGVfY2xvc3VyZShhKTsgLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYCphYCBhcyBtdXRhYmxlIGJlY2F1c2UgcHJldmlvdXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNsb3N1cmUgcmVxdWlyZXMgdW5pcXVlIGFjY2Vzcy4KICAgIGJhcigpOwp9CmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhIG11dGFibGUgdmFyaWFibGUgaXMgdXNlZCB3aGlsZSBpdCBpcyBzdGlsbCBjYXB0dXJlZApieSBhIGNsb3N1cmUuIEJlY2F1c2UgdGhlIGNsb3N1cmUgaGFzIGJvcnJvd2VkIHRoZSB2YXJpYWJsZSwgaXQgaXMgbm90IGF2YWlsYWJsZQp1bnRpbCB0aGUgY2xvc3VyZSBnb2VzIG91dCBvZiBzY29wZS4KCk5vdGUgdGhhdCBhIGNhcHR1cmUgd2lsbCBlaXRoZXIgbW92ZSBvciBib3Jyb3cgYSB2YXJpYWJsZSwgYnV0IGluIHRoaXMKc2l0dWF0aW9uLCB0aGUgY2xvc3VyZSBpcyBib3Jyb3dpbmcgdGhlIHZhcmlhYmxlLiBUYWtlIGEgbG9vayBhdCB0aGUgY2hhcHRlcgpvbiBbQ2FwdHVyaW5nXVtjYXB0dXJpbmddIGluIFJ1c3QgQnkgRXhhbXBsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCltjYXB0dXJpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS9ydXN0LWJ5LWV4YW1wbGUvZm4vY2xvc3VyZXMvY2FwdHVyZS5odG1sCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IGNhbiBmaW5pc2ggdXNpbmcgdGhlIGNsb3N1cmUgYmVmb3JlIHVzaW5nIHRoZSBjYXB0dXJlZAp2YXJpYWJsZToKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGJhciA9IHx8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShhKQogICAgfTsKICAgIGJhcigpOwogICAgLy8gYm9ycm93IG9uIGBhYCBlbmRzLgogICAgb3V0c2lkZV9jbG9zdXJlKGEpOyAvLyBvayEKfQpgYGAKCk9yIHlvdSBjYW4gcGFzcyB0aGUgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXIgdG8gdGhlIGNsb3N1cmU6CgpgYGAKZm4gaW5zaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CmZuIG91dHNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KCmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgbGV0IG11dCBiYXIgPSB8czogJm11dCBpMzJ8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShzKQogICAgfTsKICAgIG91dHNpZGVfY2xvc3VyZShhKTsKICAgIGJhcihhKTsKfQpgYGAKCkl0IG1heSBiZSBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGNsb3N1cmUgbGF0ZXI6CgpgYGAKZm4gaW5zaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CmZuIG91dHNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KCmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgb3V0c2lkZV9jbG9zdXJlKGEpOwogICAgbGV0IG11dCBiYXIgPSB8fCB7CiAgICAgICAgaW5zaWRlX2Nsb3N1cmUoYSkKICAgIH07CiAgICBiYXIoKTsKfQpgYGAKRTA1MDJBIHZhcmlhYmxlIGFscmVhZHkgYm9ycm93ZWQgYXMgaW1tdXRhYmxlIHdhcyBib3Jyb3dlZCBhcyBtdXRhYmxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMgpmbiBiYXIoeDogJm11dCBpMzIpIHt9CmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgbGV0IHkgPSAmYTsgLy8gYSBpcyBib3Jyb3dlZCBhcyBpbW11dGFibGUuCiAgICBiYXIoYSk7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGAqYWAgYXMgbXV0YWJsZSBiZWNhdXNlIGBhYCBpcyBhbHNvIGJvcnJvd2VkCiAgICAgICAgICAgIC8vICAgICAgICBhcyBpbW11dGFibGUKICAgIHByaW50bG4hKCJ7fSIsIHkpOwp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGVuc3VyZSB0aGF0IHlvdSBkb24ndCBoYXZlIGFueSBvdGhlciByZWZlcmVuY2VzIHRvIHRoZQp2YXJpYWJsZSBiZWZvcmUgdHJ5aW5nIHRvIGFjY2VzcyBpdCBtdXRhYmx5OgoKYGBgCmZuIGJhcih4OiAmbXV0IGkzMikge30KZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBiYXIoYSk7CiAgICBsZXQgeSA9ICZhOyAvLyBvayEKICAgIHByaW50bG4hKCJ7fSIsIHkpOwp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCkUwNTAzQSB2YWx1ZSB3YXMgdXNlZCBhZnRlciBpdCB3YXMgbXV0YWJseSBib3Jyb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDMKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgLy8gQ3JlYXRlIGEgbXV0YWJsZSBib3Jyb3cgb2YgYHZhbHVlYC4KICAgIGxldCBib3Jyb3cgPSAmbXV0IHZhbHVlOwogICAgbGV0IF9zdW0gPSB2YWx1ZSArIDE7IC8vIGVycm9yOiBjYW5ub3QgdXNlIGB2YWx1ZWAgYmVjYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpdCB3YXMgbXV0YWJseSBib3Jyb3dlZAogICAgcHJpbnRsbiEoInt9IiwgYm9ycm93KTsKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgYHZhbHVlYCBpcyBtdXRhYmx5IGJvcnJvd2VkIGJ5IGBib3Jyb3dgIGFuZCBjYW5ub3QgYmUKdXNlZCB0byBjYWxjdWxhdGUgYHN1bWAuIFRoaXMgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgdGhpcyB3b3VsZCB2aW9sYXRlClJ1c3QncyBtdXRhYmlsaXR5IHJ1bGVzLgoKWW91IGNhbiBmaXggdGhpcyBlcnJvciBieSBmaW5pc2hpbmcgdXNpbmcgdGhlIGJvcnJvdyBiZWZvcmUgdGhlIG5leHQgdXNlIG9mCnRoZSB2YWx1ZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IG11dCB2YWx1ZSA9IDM7CiAgICBsZXQgYm9ycm93ID0gJm11dCB2YWx1ZTsKICAgIHByaW50bG4hKCJ7fSIsIGJvcnJvdyk7CiAgICAvLyBUaGUgYmxvY2sgaGFzIGVuZGVkIGFuZCB3aXRoIGl0IHRoZSBib3Jyb3cuCiAgICAvLyBZb3UgY2FuIG5vdyB1c2UgYHZhbHVlYCBhZ2Fpbi4KICAgIGxldCBfc3VtID0gdmFsdWUgKyAxOwp9CmBgYAoKT3IgYnkgY2xvbmluZyBgdmFsdWVgIGJlZm9yZSBib3Jyb3dpbmcgaXQ6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgLy8gV2UgY2xvbmUgYHZhbHVlYCwgY3JlYXRpbmcgYSBjb3B5LgogICAgbGV0IHZhbHVlX2Nsb25lZCA9IHZhbHVlLmNsb25lKCk7CiAgICAvLyBUaGUgbXV0YWJsZSBib3Jyb3cgaXMgYSByZWZlcmVuY2UgdG8gYHZhbHVlYCBhbmQKICAgIC8vIG5vdCB0byBgdmFsdWVfY2xvbmVkYC4uLgogICAgbGV0IGJvcnJvdyA9ICZtdXQgdmFsdWU7CiAgICAvLyAuLi4gd2hpY2ggbWVhbnMgd2UgY2FuIHN0aWxsIHVzZSBgdmFsdWVfY2xvbmVkYCwKICAgIGxldCBfc3VtID0gdmFsdWVfY2xvbmVkICsgMTsKICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBib3Jyb3cgb25seSBlbmRzIGhlcmUuCiAgICBwcmludGxuISgie30iLCBib3Jyb3cpOwp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCkUwNTA0IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbW92ZSBhIGJvcnJvd2VkIHZhcmlhYmxlIGludG8gYQpjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwogICAgbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CgogICAgbGV0IHggPSBtb3ZlIHx8IHsKICAgICAgICBwcmludGxuISgiY2hpbGQgZnVuY3Rpb246IHt9IiwgZmFuY3lfbnVtLm51bSk7CiAgICAgICAgLy8gZXJyb3I6IGNhbm5vdCBtb3ZlIGBmYW5jeV9udW1gIGludG8gY2xvc3VyZSBiZWNhdXNlIGl0IGlzIGJvcnJvd2VkCiAgICB9OwoKICAgIHgoKTsKICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYAoKSGVyZSwgYGZhbmN5X251bWAgaXMgYm9ycm93ZWQgYnkgYGZhbmN5X3JlZmAgYW5kIHNvIGNhbm5vdCBiZSBtb3ZlZCBpbnRvCnRoZSBjbG9zdXJlIGB4YC4gVGhlcmUgaXMgbm8gd2F5IHRvIG1vdmUgYSB2YWx1ZSBpbnRvIGEgY2xvc3VyZSB3aGlsZSBpdCBpcwpib3Jyb3dlZCwgYXMgdGhhdCB3b3VsZCBpbnZhbGlkYXRlIHRoZSBib3Jyb3cuCgpJZiB0aGUgY2xvc3VyZSBjYW4ndCBvdXRsaXZlIHRoZSB2YWx1ZSBiZWluZyBtb3ZlZCwgdHJ5IHVzaW5nIGEgcmVmZXJlbmNlCnJhdGhlciB0aGFuIG1vdmluZzoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwogICAgbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CgogICAgbGV0IHggPSBtb3ZlIHx8IHsKICAgICAgICAvLyBmYW5jeV9yZWYgaXMgdXNhYmxlIGhlcmUgYmVjYXVzZSBpdCBkb2Vzbid0IG1vdmUgYGZhbmN5X251bWAKICAgICAgICBwcmludGxuISgiY2hpbGQgZnVuY3Rpb246IHt9IiwgZmFuY3lfcmVmLm51bSk7CiAgICB9OwoKICAgIHgoKTsKCiAgICBwcmludGxuISgibWFpbiBmdW5jdGlvbjoge30iLCBmYW5jeV9udW0ubnVtKTsKfQpgYGAKCklmIHRoZSB2YWx1ZSBoYXMgdG8gYmUgYm9ycm93ZWQgYW5kIHRoZW4gbW92ZWQsIHRyeSBsaW1pdGluZyB0aGUgbGlmZXRpbWUgb2YKdGhlIGJvcnJvdyB1c2luZyBhIHNjb3BlZCBibG9jazoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwoKICAgIHsKICAgICAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKICAgICAgICBwcmludGxuISgibWFpbiBmdW5jdGlvbjoge30iLCBmYW5jeV9yZWYubnVtKTsKICAgICAgICAvLyBgZmFuY3lfcmVmYCBnb2VzIG91dCBvZiBzY29wZSBoZXJlCiAgICB9CgogICAgbGV0IHggPSBtb3ZlIHx8IHsKICAgICAgICAvLyBgZmFuY3lfbnVtYCBjYW4gYmUgbW92ZWQgbm93IChubyBtb3JlIHJlZmVyZW5jZXMgZXhpc3QpCiAgICAgICAgcHJpbnRsbiEoImNoaWxkIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X251bS5udW0pOwogICAgfTsKCiAgICB4KCk7Cn0KYGBgCgpJZiB0aGUgbGlmZXRpbWUgb2YgYSByZWZlcmVuY2UgaXNuJ3QgZW5vdWdoLCBzdWNoIGFzIGluIHRoZSBjYXNlIG9mIHRocmVhZGluZywKY29uc2lkZXIgdXNpbmcgYW4gYEFyY2AgdG8gY3JlYXRlIGEgcmVmZXJlbmNlLWNvdW50ZWQgdmFsdWU6CgpgYGAKdXNlIHN0ZDo6c3luYzo6QXJjOwp1c2Ugc3RkOjp0aHJlYWQ7CgpzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBmYW5jeV9yZWYxID0gQXJjOjpuZXcoRmFuY3lOdW0geyBudW06IDUgfSk7CiAgICBsZXQgZmFuY3lfcmVmMiA9IGZhbmN5X3JlZjEuY2xvbmUoKTsKCiAgICBsZXQgeCA9IHRocmVhZDo6c3Bhd24obW92ZSB8fCB7CiAgICAgICAgLy8gYGZhbmN5X3JlZjFgIGNhbiBiZSBtb3ZlZCBhbmQgaGFzIGEgYCdzdGF0aWNgIGxpZmV0aW1lCiAgICAgICAgcHJpbnRsbiEoImNoaWxkIHRocmVhZDoge30iLCBmYW5jeV9yZWYxLm51bSk7CiAgICB9KTsKCiAgICB4LmpvaW4oKS5leHBlY3QoImNoaWxkIHRocmVhZCBzaG91bGQgZmluaXNoIik7CiAgICBwcmludGxuISgibWFpbiB0aHJlYWQ6IHt9IiwgZmFuY3lfcmVmMi5udW0pOwp9CmBgYApFMDUwNUEgdmFsdWUgd2FzIG1vdmVkIG91dCB3aGlsZSBpdCB3YXMgc3RpbGwgYm9ycm93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA1CnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogVmFsdWUpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBWYWx1ZXt9OwogICAgbGV0IF9yZWZfdG9fdmFsOiAmVmFsdWUgPSAmeDsKICAgIGVhdCh4KTsKICAgIGJvcnJvdyhfcmVmX3RvX3ZhbCk7Cn0KYGBgCgpIZXJlLCB0aGUgZnVuY3Rpb24gYGVhdGAgdGFrZXMgb3duZXJzaGlwIG9mIGB4YC4gSG93ZXZlciwKYHhgIGNhbm5vdCBiZSBtb3ZlZCBiZWNhdXNlIHRoZSBib3Jyb3cgdG8gYF9yZWZfdG9fdmFsYApuZWVkcyB0byBsYXN0IHRpbGwgdGhlIGZ1bmN0aW9uIGBib3Jyb3dgLgpUbyBmaXggdGhhdCB5b3UgY2FuIGRvIGEgZmV3IGRpZmZlcmVudCB0aGluZ3M6CgoqIFRyeSB0byBhdm9pZCBtb3ZpbmcgdGhlIHZhcmlhYmxlLgoqIFJlbGVhc2UgYm9ycm93IGJlZm9yZSBtb3ZlLgoqIEltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IG9uIHRoZSB0eXBlLgoKRXhhbXBsZXM6CgpgYGAKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiAmVmFsdWUpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBWYWx1ZXt9OwoKICAgIGxldCByZWZfdG9fdmFsOiAmVmFsdWUgPSAmeDsKICAgIGVhdCgmeCk7IC8vIHBhc3MgYnkgcmVmZXJlbmNlLCBpZiBpdCdzIHBvc3NpYmxlCiAgICBib3Jyb3cocmVmX3RvX3ZhbCk7Cn0KYGBgCgpPcjoKCmBgYApzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6IFZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKCiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBib3Jyb3cocmVmX3RvX3ZhbCk7CiAgICAvLyByZWZfdG9fdmFsIGlzIG5vIGxvbmdlciB1c2VkLgogICAgZWF0KHgpOwp9CmBgYAoKT3I6CgpgYGAKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXSAvLyBpbXBsZW1lbnQgQ29weSB0cmFpdApzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6IFZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKICAgIGxldCByZWZfdG9fdmFsOiAmVmFsdWUgPSAmeDsKICAgIGVhdCh4KTsgLy8gaXQgd2lsbCBiZSBjb3BpZWQgaGVyZS4KICAgIGJvcnJvdyhyZWZfdG9fdmFsKTsKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtLCB0YWtlIGEgbG9vayBhdCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbApFMDUwNkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYXNzaWduIHRvIGEgYm9ycm93ZWQgdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA2CnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CmxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwpmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNiB9OwovLyBlcnJvcjogY2Fubm90IGFzc2lnbiB0byBgZmFuY3lfbnVtYCBiZWNhdXNlIGl0IGlzIGJvcnJvd2VkCgpwcmludGxuISgiTnVtOiB7fSwgUmVmOiB7fSIsIGZhbmN5X251bS5udW0sIGZhbmN5X3JlZi5udW0pOwpgYGAKCkJlY2F1c2UgYGZhbmN5X3JlZmAgc3RpbGwgaG9sZHMgYSByZWZlcmVuY2UgdG8gYGZhbmN5X251bWAsIGBmYW5jeV9udW1gIGNhbid0CmJlIGFzc2lnbmVkIHRvIGEgbmV3IHZhbHVlIGFzIGl0IHdvdWxkIGludmFsaWRhdGUgdGhlIHJlZmVyZW5jZS4KCkFsdGVybmF0aXZlbHksIHdlIGNhbiBtb3ZlIG91dCBvZiBgZmFuY3lfbnVtYCBpbnRvIGEgc2Vjb25kIGBmYW5jeV9udW1gOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CmxldCBtb3ZlZF9udW0gPSBmYW5jeV9udW07CmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CgpwcmludGxuISgiTnVtOiB7fSwgTW92ZWQgbnVtOiB7fSIsIGZhbmN5X251bS5udW0sIG1vdmVkX251bS5udW0pOwpgYGAKCklmIHRoZSB2YWx1ZSBoYXMgdG8gYmUgYm9ycm93ZWQsIHRyeSBsaW1pdGluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIGJvcnJvdyB1c2luZwphIHNjb3BlZCBibG9jazoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwoKewogICAgbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CiAgICBwcmludGxuISgiUmVmOiB7fSIsIGZhbmN5X3JlZi5udW0pOwp9CgovLyBXb3JrcyBiZWNhdXNlIGBmYW5jeV9yZWZgIGlzIG5vIGxvbmdlciBpbiBzY29wZQpmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNiB9OwpwcmludGxuISgiTnVtOiB7fSIsIGZhbmN5X251bS5udW0pOwpgYGAKCk9yIGJ5IG1vdmluZyB0aGUgcmVmZXJlbmNlIGludG8gYSBmdW5jdGlvbjoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gcHJpbnRfZmFuY3lfcmVmKGZhbmN5X3JlZjogJkZhbmN5TnVtKXsKICAgIHByaW50bG4hKCJSZWY6IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKCnByaW50X2ZhbmN5X3JlZigmZmFuY3lfbnVtKTsKCi8vIFdvcmtzIGJlY2F1c2UgZnVuY3Rpb24gYm9ycm93IGhhcyBlbmRlZApmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNiB9OwpwcmludGxuISgiTnVtOiB7fSIsIGZhbmN5X251bS5udW0pOwpgYGAKRTA1MDdBIGJvcnJvd2VkIHZhbHVlIHdhcyBtb3ZlZCBvdXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwoKICAgIHguYm9ycm93KCkubm90aGluZ19pc190cnVlKCk7IC8vIGVycm9yOiBjYW5ub3QgbW92ZSBvdXQgb2YgYm9ycm93ZWQgY29udGVudAp9CmBgYAoKSGVyZSwgdGhlIGBub3RoaW5nX2lzX3RydWVgIG1ldGhvZCB0YWtlcyB0aGUgb3duZXJzaGlwIG9mIGBzZWxmYC4gSG93ZXZlciwKYHNlbGZgIGNhbm5vdCBiZSBtb3ZlZCBiZWNhdXNlIGAuYm9ycm93KClgIG9ubHkgcHJvdmlkZXMgYW4gYCZUaGVEYXJrS25pZ2h0YCwKd2hpY2ggaXMgYSBib3Jyb3cgb2YgdGhlIGNvbnRlbnQgb3duZWQgYnkgdGhlIGBSZWZDZWxsYC4gVG8gZml4IHRoaXMgZXJyb3IsCnlvdSBoYXZlIHRocmVlIGNob2ljZXM6CgoqIFRyeSB0byBhdm9pZCBtb3ZpbmcgdGhlIHZhcmlhYmxlLgoqIFNvbWVob3cgcmVjbGFpbSB0aGUgb3duZXJzaGlwLgoqIEltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IG9uIHRoZSB0eXBlLgoKVGhpcyBjYW4gYWxzbyBoYXBwZW4gd2hlbiB1c2luZyBhIHR5cGUgaW1wbGVtZW50aW5nIGBGbmAgb3IgYEZuTXV0YCwgYXMgbmVpdGhlcgphbGxvd3MgbW92aW5nIG91dCBvZiB0aGVtICh0aGV5IHVzdWFsbHkgcmVwcmVzZW50IGNsb3N1cmVzIHdoaWNoIGNhbiBiZSBjYWxsZWQKbW9yZSB0aGFuIG9uY2UpLiBNdWNoIG9mIHRoZSB0ZXh0IGZvbGxvd2luZyBhcHBsaWVzIGVxdWFsbHkgd2VsbCB0byBub24tYEZuT25jZWAKY2xvc3VyZSBib2RpZXMuCgpFeGFtcGxlczoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKCZzZWxmKSB7fSAvLyBGaXJzdCBjYXNlLCB3ZSBkb24ndCB0YWtlIG93bmVyc2hpcAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKICAgIGxldCB4ID0geC5pbnRvX2lubmVyKCk7IC8vIHdlIGdldCBiYWNrIG93bmVyc2hpcAoKICAgIHgubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gd2UgaW1wbGVtZW50IHRoZSBDb3B5IHRyYWl0CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpNb3ZpbmcgYSBtZW1iZXIgb3V0IG9mIGEgbXV0YWJseSBib3Jyb3dlZCBzdHJ1Y3Qgd2lsbCBhbHNvIGNhdXNlIEUwNTA3IGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpzdHJ1Y3QgQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgY2F2ZSA9IEJhdGNhdmUgewogICAgICAgIGtuaWdodDogVGhlRGFya0tuaWdodAogICAgfTsKICAgIGxldCBib3Jyb3dlZCA9ICZtdXQgY2F2ZTsKCiAgICBib3Jyb3dlZC5rbmlnaHQubm90aGluZ19pc190cnVlKCk7IC8vIEUwNTA3Cn0KYGBgCgpJdCBpcyBmaW5lIG9ubHkgaWYgeW91IHB1dCBzb21ldGhpbmcgYmFjay4gYG1lbTo6cmVwbGFjZWAgY2FuIGJlIHVzZWQgZm9yIHRoYXQ6CgpgYGAKIyBzdHJ1Y3QgVGhlRGFya0tuaWdodDsKIyBpbXBsIFRoZURhcmtLbmlnaHQgeyBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30gfQojIHN0cnVjdCBCYXRjYXZlIHsga25pZ2h0OiBUaGVEYXJrS25pZ2h0IH0KdXNlIHN0ZDo6bWVtOwoKbGV0IG11dCBjYXZlID0gQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfTsKbGV0IGJvcnJvd2VkID0gJm11dCBjYXZlOwoKbWVtOjpyZXBsYWNlKCZtdXQgYm9ycm93ZWQua25pZ2h0LCBUaGVEYXJrS25pZ2h0KS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCkUwNTA4QSB2YWx1ZSB3YXMgbW92ZWQgb3V0IG9mIGEgbm9uLWNvcHkgZml4ZWQtc2l6ZSBhcnJheS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDgKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgbGV0IF92YWx1ZSA9IGFycmF5WzBdOyAvLyBlcnJvcjogY2Fubm90IG1vdmUgb3V0IG9mIHR5cGUgYFtOb25Db3B5OyAxXWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhIG5vbi1jb3B5IGZpeGVkLXNpemUgYXJyYXkKfQpgYGAKClRoZSBmaXJzdCBlbGVtZW50IHdhcyBtb3ZlZCBvdXQgb2YgdGhlIGFycmF5LCBidXQgdGhpcyBpcyBub3QKcG9zc2libGUgYmVjYXVzZSBgTm9uQ29weWAgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQuCgpDb25zaWRlciBib3Jyb3dpbmcgdGhlIGVsZW1lbnQgaW5zdGVhZCBvZiBtb3ZpbmcgaXQ6CgpgYGAKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgbGV0IF92YWx1ZSA9ICZhcnJheVswXTsgLy8gQm9ycm93aW5nIGlzIGFsbG93ZWQsIHVubGlrZSBtb3ZpbmcuCn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB5b3VyIHR5cGUgaW1wbGVtZW50cyBgQ2xvbmVgIGFuZCB5b3UgbmVlZCB0byBvd24gdGhlIHZhbHVlLApjb25zaWRlciBib3Jyb3dpbmcgYW5kIHRoZW4gY2xvbmluZzoKCmBgYAojW2Rlcml2ZShDbG9uZSldCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIC8vIE5vdyB5b3UgY2FuIGNsb25lIHRoZSBhcnJheSBlbGVtZW50LgogICAgbGV0IF92YWx1ZSA9IGFycmF5WzBdLmNsb25lKCk7Cn0KYGBgCgpJZiB5b3UgcmVhbGx5IHdhbnQgdG8gbW92ZSB0aGUgdmFsdWUgb3V0LCB5b3UgY2FuIHVzZSBhIGRlc3RydWN0dXJpbmcgYXJyYXkKcGF0dGVybiB0byBtb3ZlIGl0OgoKYGBgCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIC8vIERlc3RydWN0dXJpbmcgdGhlIGFycmF5CiAgICBsZXQgW192YWx1ZV0gPSBhcnJheTsKfQpgYGAKRTA1MDlUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtb3ZlIG91dCBvZiBhIHZhbHVlIHdob3NlIHR5cGUKaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwOQpzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1c2l6ZQp9CgpzdHJ1Y3QgRHJvcFN0cnVjdCB7CiAgICBmYW5jeTogRmFuY3lOdW0KfQoKaW1wbCBEcm9wIGZvciBEcm9wU3RydWN0IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgLy8gRGVzdHJ1Y3QgRHJvcFN0cnVjdCwgcG9zc2libHkgdXNpbmcgRmFuY3lOdW0KICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBkcm9wX3N0cnVjdCA9IERyb3BTdHJ1Y3R7ZmFuY3k6IEZhbmN5TnVte251bTogNX19OwogICAgbGV0IGZhbmN5X2ZpZWxkID0gZHJvcF9zdHJ1Y3QuZmFuY3k7IC8vIEVycm9yIEUwNTA5CiAgICBwcmludGxuISgiRmFuY3k6IHt9IiwgZmFuY3lfZmllbGQubnVtKTsKICAgIC8vIGltcGxpY2l0IGNhbGwgdG8gYGRyb3Bfc3RydWN0LmRyb3AoKWAgYXMgZHJvcF9zdHJ1Y3QgZ29lcyBvdXQgb2Ygc2NvcGUKfQpgYGAKCkhlcmUsIHdlIHRyaWVkIHRvIG1vdmUgYSBmaWVsZCBvdXQgb2YgYSBzdHJ1Y3Qgb2YgdHlwZSBgRHJvcFN0cnVjdGAgd2hpY2gKaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LiBIb3dldmVyLCBhIHN0cnVjdCBjYW5ub3QgYmUgZHJvcHBlZCBpZiBvbmUgb3IKbW9yZSBvZiBpdHMgZmllbGRzIGhhdmUgYmVlbiBtb3ZlZC4KClN0cnVjdHMgaW1wbGVtZW50aW5nIHRoZSBgRHJvcGAgdHJhaXQgaGF2ZSBhbiBpbXBsaWNpdCBkZXN0cnVjdG9yIHRoYXQgZ2V0cwpjYWxsZWQgd2hlbiB0aGV5IGdvIG91dCBvZiBzY29wZS4gVGhpcyBkZXN0cnVjdG9yIG1heSB1c2UgdGhlIGZpZWxkcyBvZiB0aGUKc3RydWN0LCBzbyBtb3Zpbmcgb3V0IG9mIHRoZSBzdHJ1Y3QgY291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHJ1biB0aGUKZGVzdHJ1Y3Rvci4gVGhlcmVmb3JlLCB3ZSBtdXN0IHRoaW5rIG9mIGFsbCB2YWx1ZXMgd2hvc2UgdHlwZSBpbXBsZW1lbnRzIHRoZQpgRHJvcGAgdHJhaXQgYXMgc2luZ2xlIHVuaXRzIHdob3NlIGZpZWxkcyBjYW5ub3QgYmUgbW92ZWQuCgpUaGlzIGVycm9yIGNhbiBiZSBmaXhlZCBieSBjcmVhdGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZmllbGRzIG9mIGEgc3RydWN0LAplbnVtLCBvciB0dXBsZSB1c2luZyB0aGUgYHJlZmAga2V5d29yZDoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1c2l6ZQp9CgpzdHJ1Y3QgRHJvcFN0cnVjdCB7CiAgICBmYW5jeTogRmFuY3lOdW0KfQoKaW1wbCBEcm9wIGZvciBEcm9wU3RydWN0IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgLy8gRGVzdHJ1Y3QgRHJvcFN0cnVjdCwgcG9zc2libHkgdXNpbmcgRmFuY3lOdW0KICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBkcm9wX3N0cnVjdCA9IERyb3BTdHJ1Y3R7ZmFuY3k6IEZhbmN5TnVte251bTogNX19OwogICAgbGV0IHJlZiBmYW5jeV9maWVsZCA9IGRyb3Bfc3RydWN0LmZhbmN5OyAvLyBObyBtb3JlIGVycm9ycyEKICAgIHByaW50bG4hKCJGYW5jeToge30iLCBmYW5jeV9maWVsZC5udW0pOwogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9zdHJ1Y3QuZHJvcCgpYCBhcyBkcm9wX3N0cnVjdCBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoKTm90ZSB0aGF0IHRoaXMgdGVjaG5pcXVlIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlIGFybXMgb2YgYSBtYXRjaCBleHByZXNzaW9uOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCmVudW0gRHJvcEVudW0gewogICAgRmFuY3koRmFuY3lOdW0pCn0KCmltcGwgRHJvcCBmb3IgRHJvcEVudW0gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wRW51bSwgcG9zc2libHkgdXNpbmcgRmFuY3lOdW0KICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIC8vIENyZWF0ZXMgYW5kIGVudW0gb2YgdHlwZSBgRHJvcEVudW1gLCB3aGljaCBpbXBsZW1lbnRzIGBEcm9wYAogICAgbGV0IGRyb3BfZW51bSA9IERyb3BFbnVtOjpGYW5jeShGYW5jeU51bXtudW06IDEwfSk7CiAgICBtYXRjaCBkcm9wX2VudW0gewogICAgICAgIC8vIENyZWF0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluc2lkZSBvZiBgRHJvcEVudW06OkZhbmN5YAogICAgICAgIERyb3BFbnVtOjpGYW5jeShyZWYgZmFuY3lfZmllbGQpID0+IC8vIE5vIGVycm9yIQogICAgICAgICAgICBwcmludGxuISgiSXQgd2FzIGZhbmN5LS0ge30hIiwgZmFuY3lfZmllbGQubnVtKSwKICAgIH0KICAgIC8vIGltcGxpY2l0IGNhbGwgdG8gYGRyb3BfZW51bS5kcm9wKClgIGFzIGRyb3BfZW51bSBnb2VzIG91dCBvZiBzY29wZQp9CmBgYApFMDUxMFRoZSBtYXRjaGVkIHZhbHVlIHdhcyBhc3NpZ25lZCBpbiBhIG1hdGNoIGd1YXJkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxMApsZXQgbXV0IHggPSBTb21lKDApOwptYXRjaCB4IHsKICAgIE5vbmUgPT4ge30KICAgIFNvbWUoXykgaWYgeyB4ID0gTm9uZTsgZmFsc2UgfSA9PiB7fSAvLyBlcnJvciEKICAgIFNvbWUoXykgPT4ge30KfQpgYGAKCldoZW4gbWF0Y2hpbmcgb24gYSB2YXJpYWJsZSBpdCBjYW5ub3QgYmUgbXV0YXRlZCBpbiB0aGUgbWF0Y2ggZ3VhcmRzLCBhcyB0aGlzCmNvdWxkIGNhdXNlIHRoZSBtYXRjaCB0byBiZSBub24tZXhoYXVzdGl2ZS4KCkhlcmUgZXhlY3V0aW5nIGB4ID0gTm9uZWAgd291bGQgbW9kaWZ5IHRoZSB2YWx1ZSBiZWluZyBtYXRjaGVkIGFuZCByZXF1aXJlIHVzCnRvIGdvICJiYWNrIGluIHRpbWUiIHRvIHRoZSBgTm9uZWAgYXJtLiBUbyBmaXggaXQsIGNoYW5nZSB0aGUgdmFsdWUgaW4gdGhlIG1hdGNoCmFybToKCmBgYApsZXQgbXV0IHggPSBTb21lKDApOwptYXRjaCB4IHsKICAgIE5vbmUgPT4ge30KICAgIFNvbWUoXykgPT4gewogICAgICAgIHggPSBOb25lOyAvLyBvayEKICAgIH0KfQpgYGAKRTA1MTFJbnZhbGlkIG1vbm9tb3JwaGl6YXRpb24gb2YgYW4gaW50cmluc2ljIGZ1bmN0aW9uIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxMQojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKZXh0ZXJuICJwbGF0Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfYWRkPFQ+KGE6IFQsIGI6IFQpIC0+IFQ7Cn0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyBzaW1kX2FkZCgwLCAxKTsgfQogICAgLy8gZXJyb3I6IGludmFsaWQgbW9ub21vcnBoaXphdGlvbiBvZiBgc2ltZF9hZGRgIGludHJpbnNpYwp9CmBgYAoKVGhlIGdlbmVyaWMgdHlwZSBoYXMgdG8gYmUgYSBTSU1EIHR5cGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKI1tyZXByKHNpbWQpXQojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBpMzJ4MihpMzIsIGkzMik7CgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9hZGQ8VD4oYTogVCwgYjogVCkgLT4gVDsKfQoKdW5zYWZlIHsgc2ltZF9hZGQoaTMyeDIoMCwgMCksIGkzMngyKDEsIDIpKTsgfSAvLyBvayEKYGBgCkUwNTEyVHJhbnNtdXRlIHdpdGggdHdvIGRpZmZlcmVudGx5IHNpemVkIHR5cGVzIHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTEyCmZuIHRha2VzX3U4KF86IHU4KSB7fQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHRha2VzX3U4KDo6c3RkOjptZW06OnRyYW5zbXV0ZSgwdTE2KSk7IH0KICAgIC8vIGVycm9yOiBjYW5ub3QgdHJhbnNtdXRlIGJldHdlZW4gdHlwZXMgb2YgZGlmZmVyZW50IHNpemVzLAogICAgLy8gICAgICAgIG9yIGRlcGVuZGVudGx5LXNpemVkIHR5cGVzCn0KYGBgCgpQbGVhc2UgdXNlIHR5cGVzIHdpdGggc2FtZSBzaXplIG9yIHVzZSB0aGUgZXhwZWN0ZWQgdHlwZSBkaXJlY3RseS4gRXhhbXBsZToKCmBgYApmbiB0YWtlc191OChfOiB1OCkge30KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyB0YWtlc191OCg6OnN0ZDo6bWVtOjp0cmFuc211dGUoMGk4KSk7IH0gLy8gb2shCiAgICAvLyBvcjoKICAgIHVuc2FmZSB7IHRha2VzX3U4KDB1OCk7IH0gLy8gb2shCn0KYGBgCkUwNTE1QSByZWZlcmVuY2UgdG8gYSBsb2NhbCB2YXJpYWJsZSB3YXMgcmV0dXJuZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE1CmZuIGdldF9kYW5nbGluZ19yZWZlcmVuY2UoKSAtPiAmJ3N0YXRpYyBpMzIgewogICAgbGV0IHggPSAwOwogICAgJngKfQpgYGAKCmBgYGNvbXBpbGVfZmFpbCxFMDUxNQp1c2Ugc3RkOjpzbGljZTo6SXRlcjsKZm4gZ2V0X2RhbmdsaW5nX2l0ZXJhdG9yPCdhPigpIC0+IEl0ZXI8J2EsIGkzMj4gewogICAgbGV0IHYgPSB2ZWMhWzEsIDIsIDNdOwogICAgdi5pdGVyKCkKfQpgYGAKCkxvY2FsIHZhcmlhYmxlcywgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMgYXJlIGFsbCBkcm9wcGVkIGJlZm9yZSB0aGUKZW5kIG9mIHRoZSBmdW5jdGlvbiBib2R5LiBTbyBhIHJlZmVyZW5jZSB0byB0aGVtIGNhbm5vdCBiZSByZXR1cm5lZC4KCkNvbnNpZGVyIHJldHVybmluZyBhbiBvd25lZCB2YWx1ZSBpbnN0ZWFkOgoKYGBgCnVzZSBzdGQ6OnZlYzo6SW50b0l0ZXI7CgpmbiBnZXRfaW50ZWdlcigpIC0+IGkzMiB7CiAgICBsZXQgeCA9IDA7CiAgICB4Cn0KCmZuIGdldF9vd25lZF9pdGVyYXRvcigpIC0+IEludG9JdGVyPGkzMj4gewogICAgbGV0IHYgPSB2ZWMhWzEsIDIsIDNdOwogICAgdi5pbnRvX2l0ZXIoKQp9CmBgYApFMDUxNlRoZSBgdHlwZW9mYCBrZXl3b3JkIGlzIGN1cnJlbnRseSByZXNlcnZlZCBidXQgdW5pbXBsZW1lbnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTYKZm4gbWFpbigpIHsKICAgIGxldCB4OiB0eXBlb2YoOTIpID0gOTI7Cn0KYGBgCgpUcnkgdXNpbmcgdHlwZSBpbmZlcmVuY2UgaW5zdGVhZC4gRXhhbXBsZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHggPSA5MjsKfQpgYGAKRTA1MTdBIGAjW3JlcHIoLi4pXWAgYXR0cmlidXRlIHdhcyBwbGFjZWQgb24gYW4gdW5zdXBwb3J0ZWQgaXRlbS4KCkV4YW1wbGVzIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE3CiNbcmVwcihDKV0KdHlwZSBGb28gPSB1ODsKCiNbcmVwcihwYWNrZWQpXQplbnVtIEZvbyB7QmFyLCBCYXp9CgojW3JlcHIodTgpXQpzdHJ1Y3QgRm9vIHtiYXI6IGJvb2wsIGJhejogYm9vbH0KCiNbcmVwcihDKV0KaW1wbCBGb28gewogICAgLy8gLi4uCn0KYGBgCgoqIFRoZSBgI1tyZXByKEMpXWAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHBsYWNlZCBvbiBzdHJ1Y3RzIGFuZCBlbnVtcy4KKiBUaGUgYCNbcmVwcihwYWNrZWQpXWAgYW5kIGAjW3JlcHIoc2ltZCldYCBhdHRyaWJ1dGVzIG9ubHkgd29yayBvbiBzdHJ1Y3RzLgoqIFRoZSBgI1tyZXByKHU4KV1gLCBgI1tyZXByKGkxNildYCwgZXRjIGF0dHJpYnV0ZXMgb25seSB3b3JrIG9uIGVudW1zLgoKVGhlc2UgYXR0cmlidXRlcyBkbyBub3Qgd29yayBvbiB0eXBlZGVmcywgc2luY2UgdHlwZWRlZnMgYXJlIGp1c3QgYWxpYXNlcy4KClJlcHJlc2VudGF0aW9ucyBsaWtlIGAjW3JlcHIodTgpXWAsIGAjW3JlcHIoaTY0KV1gIGFyZSBmb3Igc2VsZWN0aW5nIHRoZQpkaXNjcmltaW5hbnQgc2l6ZSBmb3IgZW51bXMgd2l0aCBubyBkYXRhIGZpZWxkcyBvbiBhbnkgb2YgdGhlIHZhcmlhbnRzLCBlLmcuCmBlbnVtIENvbG9yIHtSZWQsIEJsdWUsIEdyZWVufWAsIGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlIHNpemUgb2YgdGhlIGVudW0gdG8KdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVkIHR5cGUuIFN1Y2ggYW4gZW51bSBjYW4gYmUgY2FzdCB0byBhIHZhbHVlIG9mIHRoZSBzYW1lCnR5cGUgYXMgd2VsbC4gSW4gc2hvcnQsIGAjW3JlcHIodTgpXWAgbWFrZXMgdGhlIGVudW0gYmVoYXZlIGxpa2UgYW4gaW50ZWdlcgp3aXRoIGEgY29uc3RyYWluZWQgc2V0IG9mIGFsbG93ZWQgdmFsdWVzLgoKT25seSBmaWVsZC1sZXNzIGVudW1zIGNhbiBiZSBjYXN0IHRvIG51bWVyaWNhbCBwcmltaXRpdmVzLCBzbyB0aGlzIGF0dHJpYnV0ZQp3aWxsIG5vdCBhcHBseSB0byBzdHJ1Y3RzLgoKYCNbcmVwcihwYWNrZWQpXWAgcmVkdWNlcyBwYWRkaW5nIHRvIG1ha2UgdGhlIHN0cnVjdCBzaXplIHNtYWxsZXIuIFRoZQpyZXByZXNlbnRhdGlvbiBvZiBlbnVtcyBpc24ndCBzdHJpY3RseSBkZWZpbmVkIGluIFJ1c3QsIGFuZCB0aGlzIGF0dHJpYnV0ZQp3b24ndCB3b3JrIG9uIGVudW1zLgoKYCNbcmVwcihzaW1kKV1gIHdpbGwgZ2l2ZSBhIHN0cnVjdCBjb25zaXN0aW5nIG9mIGEgaG9tb2dlbmVvdXMgc2VyaWVzIG9mIG1hY2hpbmUKdHlwZXMgKGkuZS4sIGB1OGAsIGBpMzJgLCBldGMpIGEgcmVwcmVzZW50YXRpb24gdGhhdCBwZXJtaXRzIHZlY3Rvcml6YXRpb24gdmlhClNJTUQuIFRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgZm9yIGVudW1zIHNpbmNlIHRoZXkgZG9uJ3QgY29uc2lzdCBvZiBhCnNpbmdsZSBsaXN0IG9mIGRhdGEuCkUwNTE4QW4gYCNbaW5saW5lKC4uKV1gIGF0dHJpYnV0ZSB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEKZnVuY3Rpb24gb3IgbWV0aG9kLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxOAojW2lubGluZShhbHdheXMpXQpzdHJ1Y3QgRm9vOwoKI1tpbmxpbmUobmV2ZXIpXQppbXBsIEZvbyB7CiAgICAvLyAuLi4KfQpgYGAKCmAjW2lubGluZV1gIGhpbnRzIHRoZSBjb21waWxlciB3aGV0aGVyIG9yIG5vdCB0byBhdHRlbXB0IHRvIGlubGluZSBhIG1ldGhvZCBvcgpmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGNvbXBpbGVyIGRvZXMgYSBwcmV0dHkgZ29vZCBqb2Igb2YgZmlndXJpbmcgdGhpcyBvdXQKaXRzZWxmLCBidXQgaWYgeW91IGZlZWwgdGhlIG5lZWQgZm9yIGFubm90YXRpb25zLCBgI1tpbmxpbmUoYWx3YXlzKV1gIGFuZApgI1tpbmxpbmUobmV2ZXIpXWAgY2FuIG92ZXJyaWRlIG9yIGZvcmNlIHRoZSBjb21waWxlcidzIGRlY2lzaW9uLgoKSWYgeW91IHdpc2ggdG8gYXBwbHkgdGhpcyBhdHRyaWJ1dGUgdG8gYWxsIG1ldGhvZHMgaW4gYW4gaW1wbCwgbWFudWFsbHkgYW5ub3RhdGUKZWFjaCBtZXRob2Q7IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhbm5vdGF0ZSB0aGUgZW50aXJlIGltcGwgd2l0aCBhbiBgI1tpbmxpbmVdYAphdHRyaWJ1dGUuCkUwNTIwQSBub24tZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3YXMgYWxyZWFkeSBtYWRlIG9uIHRoaXMgdHlwZSBzbyBpdCBjYW5ub3QgYmUKc3BlY2lhbGl6ZWQgZnVydGhlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjAKIyFbZmVhdHVyZShzcGVjaWFsaXphdGlvbildCgp0cmFpdCBTcGFjZUxsYW1hIHsKICAgIGZuIGZseSgmc2VsZik7Cn0KCi8vIGFwcGxpZXMgdG8gYWxsIFQKaW1wbDxUPiBTcGFjZUxsYW1hIGZvciBUIHsKICAgIGRlZmF1bHQgZm4gZmx5KCZzZWxmKSB7fQp9CgovLyBub24tZGVmYXVsdCBpbXBsCi8vIGFwcGxpZXMgdG8gYWxsIGBDbG9uZWAgVCBhbmQgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBpbXBsCmltcGw8VDogQ2xvbmU+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZm4gZmx5KCZzZWxmKSB7fQp9CgovLyBzaW5jZSBgaTMyYCBpcyBjbG9uZSwgdGhpcyBjb25mbGljdHMgd2l0aCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24KaW1wbCBTcGFjZUxsYW1hIGZvciBpMzIgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9CiAgICAvLyBlcnJvcjogaXRlbSBgZmx5YCBpcyBwcm92aWRlZCBieSBhbiBgaW1wbGAgdGhhdCBzcGVjaWFsaXplcwogICAgLy8gICAgICAgIGFub3RoZXIsIGJ1dCB0aGUgaXRlbSBpbiB0aGUgcGFyZW50IGBpbXBsYCBpcyBub3QgbWFya2VkCiAgICAvLyAgICAgICAgYGRlZmF1bHRgIGFuZCBzbyBpdCBjYW5ub3QgYmUgc3BlY2lhbGl6ZWQuCn0KYGBgCgpTcGVjaWFsaXphdGlvbiBvbmx5IGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgYGRlZmF1bHRgIGZ1bmN0aW9ucyBpbgppbXBsZW1lbnRhdGlvbnMuCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gbWFyayBhbGwgdGhlIHBhcmVudCBpbXBsZW1lbnRhdGlvbnMgYXMgZGVmYXVsdC4KRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHNwZWNpYWxpemF0aW9uKV0KCnRyYWl0IFNwYWNlTGxhbWEgewogICAgZm4gZmx5KCZzZWxmKTsKfQoKLy8gYXBwbGllcyB0byBhbGwgVAppbXBsPFQ+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9IC8vIFRoaXMgaXMgYSBwYXJlbnQgaW1wbGVtZW50YXRpb24uCn0KCi8vIGFwcGxpZXMgdG8gYWxsIGBDbG9uZWAgVDsgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBpbXBsCmltcGw8VDogQ2xvbmU+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9IC8vIFRoaXMgaXMgYSBwYXJlbnQgaW1wbGVtZW50YXRpb24gYnV0IHdhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgbm90IGEgZGVmYXVsdCBvbmUsIGNhdXNpbmcgdGhlIGVycm9yCn0KCi8vIGFwcGxpZXMgdG8gaTMyLCBvdmVycmlkZXMgdGhlIHByZXZpb3VzIHR3byBpbXBscwppbXBsIFNwYWNlTGxhbWEgZm9yIGkzMiB7CiAgICBmbiBmbHkoJnNlbGYpIHt9IC8vIEFuZCBub3cgdGhhdCdzIG9rIQp9CmBgYApFMDUyMUJvcnJvd2VkIGRhdGEgZXNjYXBlcyBvdXRzaWRlIG9mIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTIxCmxldCBtdXQgbGlzdDogVmVjPCZzdHI+ID0gVmVjOjpuZXcoKTsKCmxldCBfYWRkID0gfGVsOiAmc3RyfCB7CiAgICBsaXN0LnB1c2goZWwpOyAvLyBlcnJvcjogYGVsYCBlc2NhcGVzIHRoZSBjbG9zdXJlIGJvZHkgaGVyZQp9OwpgYGAKCkEgdHlwZSBhbm90YXRpb24gb2YgYSBjbG9zdXJlIHBhcmFtZXRlciBpbXBsaWVzIGEgbmV3IGxpZmV0aW1lIGRlY2xhcmF0aW9uLgpDb25zaWRlciB0byBkcm9wIGl0LCB0aGUgY29tcGlsZXIgaXMgcmVsaWFibHkgYWJsZSB0byBpbmZlciB0aGVtLgoKYGBgCmxldCBtdXQgbGlzdDogVmVjPCZzdHI+ID0gVmVjOjpuZXcoKTsKCmxldCBfYWRkID0gfGVsfCB7CiAgICBsaXN0LnB1c2goZWwpOwp9OwpgYGAKClNlZSB0aGUgW0Nsb3N1cmUgdHlwZSBpbmZlcmVuY2UgYW5kIGFubm90YXRpb25dW2Nsb3N1cmUtaW5mZXJlLWFubm90YXRpb25dIGFuZApbTGlmZXRpbWUgZWxpc2lvbl1bbGlmZXRpbWUtZWxpc2lvbl0gc2VjdGlvbnMgb2YgdGhlIEJvb2sgZm9yIG1vcmUgZGV0YWlscy4KCltjbG9zdXJlLWluZmVyZS1hbm5vdGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTMtMDEtY2xvc3VyZXMuaHRtbCNjbG9zdXJlLXR5cGUtaW5mZXJlbmNlLWFuZC1hbm5vdGF0aW9uCltsaWZldGltZS1lbGlzaW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvbGlmZXRpbWUtZWxpc2lvbi5odG1sCkUwNTIyVGhlIGxhbmcgYXR0cmlidXRlIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJjb29raWUiXQpmbiBjb29raWUoKSAtPiAhIHsgLy8gZXJyb3I6IGRlZmluaXRpb24gb2YgYW4gdW5rbm93biBsYW5ndWFnZSBpdGVtOiBgY29va2llYAogICAgbG9vcCB7fQp9CmBgYAoKVGhlIGxhbmcgYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBtYXJraW5nIHNwZWNpYWwgaXRlbXMgdGhhdCBhcmUgYnVpbHQtaW4gdG8KUnVzdCBpdHNlbGYuIFRoaXMgaW5jbHVkZXMgc3BlY2lhbCB0cmFpdHMgKGxpa2UgYENvcHlgIGFuZCBgU2l6ZWRgKSB0aGF0IGFmZmVjdApob3cgdGhlIGNvbXBpbGVyIGJlaGF2ZXMsIGFzIHdlbGwgYXMgc3BlY2lhbCBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgYXV0b21hdGljYWxseQppbnZva2VkIChzdWNoIGFzIHRoZSBoYW5kbGVyIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gaW5kZXhpbmcgYSBzbGljZSkuCkUwNTI0QSB2YXJpYWJsZSB3aGljaCByZXF1aXJlcyB1bmlxdWUgYWNjZXNzIGlzIGJlaW5nIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbG9zdXJlCmF0IHRoZSBzYW1lIHRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI0CmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgbGV0IG11dCBjMSA9IHx8IHNldCh4KTsKICAgIGxldCBtdXQgYzIgPSB8fCBzZXQoeCk7IC8vIGVycm9yIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKVG8gc29sdmUgdGhpcyBpc3N1ZSwgbXVsdGlwbGUgc29sdXRpb25zIGFyZSBhdmFpbGFibGUuIEZpcnN0LCBpcyBpdCByZXF1aXJlZApmb3IgdGhpcyB2YXJpYWJsZSB0byBiZSB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xvc3VyZSBhdCBhIHRpbWU/IElmIGl0IGlzIHRoZQpjYXNlLCB1c2UgcmVmZXJlbmNlIGNvdW50ZWQgdHlwZXMgc3VjaCBhcyBgUmNgIChvciBgQXJjYCBpZiBpdCBydW5zCmNvbmN1cnJlbnRseSk6CgpgYGAKdXNlIHN0ZDo6cmM6OlJjOwp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKZm4gc2V0KHg6ICZtdXQgaXNpemUpIHsKICAgICp4ICs9IDQ7Cn0KCmZuIGRyYWdvb29vbih4OiAmbXV0IGlzaXplKSB7CiAgICBsZXQgeCA9IFJjOjpuZXcoUmVmQ2VsbDo6bmV3KHgpKTsKICAgIGxldCB5ID0gUmM6OmNsb25lKCZ4KTsKICAgIGxldCBtdXQgYzEgPSB8fCB7IGxldCBtdXQgeDIgPSB4LmJvcnJvd19tdXQoKTsgc2V0KCZtdXQgeDIpOyB9OwogICAgbGV0IG11dCBjMiA9IHx8IHsgbGV0IG11dCB4MiA9IHkuYm9ycm93X211dCgpOyBzZXQoJm11dCB4Mik7IH07IC8vIG9rIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKSWYgbm90LCBqdXN0IHJ1biBjbG9zdXJlcyBvbmUgYXQgYSB0aW1lOgoKYGBgCmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgeyAvLyBUaGlzIGJsb2NrIGlzbid0IG5lY2Vzc2FyeSBzaW5jZSBub24tbGV4aWNhbCBsaWZldGltZXMsIGl0J3MganVzdCB0bwogICAgICAvLyBtYWtlIGl0IG1vcmUgY2xlYXIuCiAgICAgICAgbGV0IG11dCBjMSA9IHx8IHNldCgmbXV0ICp4KTsKICAgICAgICBjMSgpOwogICAgfSAvLyBgYzFgIGhhcyBiZWVuIGRyb3BwZWQgaGVyZSBzbyB3ZSdyZSBmcmVlIHRvIHVzZSBgeGAgYWdhaW4hCiAgICBsZXQgbXV0IGMyID0gfHwgc2V0KCZtdXQgKngpOwogICAgYzIoKTsKfQpgYGAKRTA1MjVBIGNsb3N1cmUgd2FzIHVzZWQgYnV0IGRpZG4ndCBpbXBsZW1lbnQgdGhlIGV4cGVjdGVkIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyNQpzdHJ1Y3QgWDsKCmZuIGZvbzxUPihfOiBUKSB7fQpmbiBiYXI8VDogRm4odTMyKT4oXzogVCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFg7CiAgICBsZXQgY2xvc3VyZSA9IHxffCBmb28oeCk7IC8vIGVycm9yOiBleHBlY3RlZCBhIGNsb3N1cmUgdGhhdCBpbXBsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGUgYEZuYCB0cmFpdCwgYnV0IHRoaXMgY2xvc3VyZSBvbmx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbXBsZW1lbnRzIGBGbk9uY2VgCiAgICBiYXIoY2xvc3VyZSk7Cn0KYGBgCgpJbiB0aGUgZXhhbXBsZSBhYm92ZSwgYGNsb3N1cmVgIGlzIGFuIGBGbk9uY2VgIGNsb3N1cmUgd2hlcmVhcyB0aGUgYGJhcmAKZnVuY3Rpb24gZXhwZWN0ZWQgYW4gYEZuYCBjbG9zdXJlLiBJbiB0aGlzIGNhc2UsIGl0J3Mgc2ltcGxlIHRvIGZpeCB0aGUgaXNzdWUsCnlvdSBqdXN0IGhhdmUgdG8gaW1wbGVtZW50IGBDb3B5YCBhbmQgYENsb25lYCB0cmFpdHMgb24gYHN0cnVjdCBYYCBhbmQgaXQnbGwKYmUgb2s6CgpgYGAKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXSAvLyBXZSBpbXBsZW1lbnQgYENsb25lYCBhbmQgYENvcHlgIHRyYWl0cy4Kc3RydWN0IFg7CgpmbiBmb288VD4oXzogVCkge30KZm4gYmFyPFQ6IEZuKHUzMik+KF86IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBYOwogICAgbGV0IGNsb3N1cmUgPSB8X3wgZm9vKHgpOwogICAgYmFyKGNsb3N1cmUpOyAvLyBvayEKfQpgYGAKClRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrIGluIFJ1c3QsIHJlYWQgdGhlIFtDbG9zdXJlc11bY2xvc3VyZXNdCmNoYXB0ZXIgb2YgdGhlIEJvb2suCgpbY2xvc3VyZXNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMy0wMS1jbG9zdXJlcy5odG1sCkUwNTI3VGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIGRpZmZlcmVkIGZyb20gdGhlIG51bWJlciBvZgplbGVtZW50cyBpbiB0aGUgYXJyYXkgYmVpbmcgbWF0Y2hlZC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjcKbGV0IHIgPSAmWzEsIDIsIDMsIDRdOwptYXRjaCByIHsKICAgICZbYSwgYl0gPT4geyAvLyBlcnJvcjogcGF0dGVybiByZXF1aXJlcyAyIGVsZW1lbnRzIGJ1dCBhcnJheQogICAgICAgICAgICAgICAgIC8vICAgICAgICBoYXMgNAogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgcGF0dGVybiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG1hdGNoZWQKYXJyYXkuIEFkZGl0aW9uYWwgZWxlbWVudHMgY2FuIGJlIG1hdGNoZWQgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIC4uXSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCkUwNTI4QW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiByZXF1aXJlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBwcmVzZW50IGluIHRoZQptYXRjaGVkIGFycmF5LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyOApsZXQgciA9ICZbMSwgMl07Cm1hdGNoIHIgewogICAgJlthLCBiLCBjLCByZXN0IEAgLi5dID0+IHsgLy8gZXJyb3I6IHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3QgMwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGVsZW1lbnRzIGJ1dCBhcnJheSBoYXMgMgogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9LCBjPXt9IHJlc3Q9ezo/fSIsIGEsIGIsIGMsIHJlc3QpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIG1hdGNoZWQgYXJyYXkgaGFzIGF0IGxlYXN0IGFzIG1hbnkgZWxlbWVudHMgYXMgdGhlIHBhdHRlcm4KcmVxdWlyZXMuIFlvdSBjYW4gbWF0Y2ggYW4gYXJiaXRyYXJ5IG51bWJlciBvZiByZW1haW5pbmcgZWxlbWVudHMgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0LCA1XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIGMsIHJlc3QgQCAuLl0gPT4geyAvLyBvayEKICAgICAgICAvLyBwcmludHMgYGE9MSwgYj0yLCBjPTMgcmVzdD1bNCwgNV1gCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30sIGM9e30gcmVzdD17Oj99IiwgYSwgYiwgYywgcmVzdCk7CiAgICB9Cn0KYGBgCkUwNTI5QW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiB3YXMgbWF0Y2hlZCBhZ2FpbnN0IHNvbWUgb3RoZXIgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjkKbGV0IHI6IGYzMiA9IDEuMDsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBlcnJvcjogZXhwZWN0ZWQgYW4gYXJyYXkgb3Igc2xpY2UsIGZvdW5kIGBmMzJgCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30iLCBhLCBiKTsKICAgIH0KfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGFuZCB0aGUgZXhwcmVzc2lvbiBiZWluZyBtYXRjaGVkIG9uIGFyZSBvZiBjb25zaXN0ZW50CnR5cGVzOgoKYGBgCmxldCByID0gWzEuMCwgMi4wXTsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYApFMDUzMEEgYmluZGluZyBzaGFkb3dlZCBzb21ldGhpbmcgaXQgc2hvdWxkbid0LgoKQSBtYXRjaCBhcm0gb3IgYSB2YXJpYWJsZSBoYXMgYSBuYW1lIHRoYXQgaXMgYWxyZWFkeSB1c2VkIGJ5CnNvbWV0aGluZyBlbHNlLCBlLmcuCgoqIHN0cnVjdCBuYW1lCiogZW51bSB2YXJpYW50Ciogc3RhdGljCiogYXNzb2NpYXRlZCBjb25zdGFudAoKVGhpcyBlcnJvciBtYXkgYWxzbyBoYXBwZW4gd2hlbiBhbiBlbnVtIHZhcmlhbnQgKndpdGggZmllbGRzKiBpcyB1c2VkCmluIGEgcGF0dGVybiwgYnV0IHdpdGhvdXQgaXRzIGZpZWxkcy4KCmBgYGNvbXBpbGVfZmFpbAplbnVtIEVudW0gewogICAgV2l0aEZpZWxkKGkzMikKfQoKdXNlIEVudW06Oio7Cm1hdGNoIFdpdGhGaWVsZCgxKSB7CiAgICBXaXRoRmllbGQgPT4ge30gLy8gZXJyb3I6IG1pc3NpbmcgKF8pCn0KYGBgCgpNYXRjaCBiaW5kaW5ncyBjYW5ub3Qgc2hhZG93IHN0YXRpY3M6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzAKc3RhdGljIFRFU1Q6IGkzMiA9IDA7CgpsZXQgciA9IDEyMzsKbWF0Y2ggciB7CiAgICBURVNUID0+IHt9IC8vIGVycm9yOiBuYW1lIG9mIGEgc3RhdGljCn0KYGBgCgpGaXhlZCBleGFtcGxlczoKCmBgYApzdGF0aWMgVEVTVDogaTMyID0gMDsKCmxldCByID0gMTIzOwptYXRjaCByIHsKICAgIHNvbWVfdmFsdWUgPT4ge30gLy8gb2shCn0KYGBgCgpvcgoKYGBgCmNvbnN0IFRFU1Q6IGkzMiA9IDA7IC8vIGNvbnN0LCBub3Qgc3RhdGljCgpsZXQgciA9IDEyMzsKbWF0Y2ggciB7CiAgICBURVNUID0+IHt9IC8vIGNvbnN0IGlzIG9rIQogICAgb3RoZXJfdmFsdWVzID0+IHt9Cn0KYGBgCkUwNTMxQW4gdW5rbm93biB0dXBsZSBzdHJ1Y3QvdmFyaWFudCBoYXMgYmVlbiB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMQpsZXQgVHlwZSh4KSA9IFR5cGUoMTIpOyAvLyBlcnJvciEKbWF0Y2ggQmFyKDEyKSB7CiAgICBCYXIoeCkgPT4ge30gLy8gZXJyb3IhCiAgICBfID0+IHt9Cn0KYGBgCgpJbiBtb3N0IGNhc2VzLCBpdCdzIGVpdGhlciBhIGZvcmdvdHRlbiBpbXBvcnQgb3IgYSB0eXBvLiBIb3dldmVyLCBsZXQncyBsb29rIGF0CmhvdyB5b3UgY2FuIGhhdmUgc3VjaCBhIHR5cGU6CgpgYGBlZGl0aW9uMjAxOApzdHJ1Y3QgVHlwZSh1MzIpOyAvLyB0aGlzIGlzIGEgdHVwbGUgc3RydWN0CgplbnVtIEZvbyB7CiAgICBCYXIodTMyKSwgLy8gdGhpcyBpcyBhIHR1cGxlIHZhcmlhbnQKfQoKdXNlIEZvbzo6KjsgLy8gVG8gdXNlIEZvbydzIHZhcmlhbnQgZGlyZWN0bHksIHdlIG5lZWQgdG8gaW1wb3J0IHRoZW0gaW4KICAgICAgICAgICAgLy8gdGhlIHNjb3BlLgpgYGAKCkVpdGhlciB3YXksIGl0IHNob3VsZCB3b3JrIGZpbmUgd2l0aCBvdXIgcHJldmlvdXMgY29kZToKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBUeXBlKHUzMik7CgplbnVtIEZvbyB7CiAgICBCYXIodTMyKSwKfQp1c2UgRm9vOjoqOwoKbGV0IFR5cGUoeCkgPSBUeXBlKDEyKTsgLy8gb2shCm1hdGNoIFR5cGUoMTIpIHsKICAgIFR5cGUoeCkgPT4ge30gLy8gb2shCiAgICBfID0+IHt9Cn0KYGBgCkUwNTMyUGF0dGVybiBhcm0gZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBraW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMgplbnVtIFN0YXRlIHsKICAgIFN1Y2NlZWRlZCwKICAgIEZhaWxlZChTdHJpbmcpLAp9CgpmbiBwcmludF9vbl9mYWlsdXJlKHN0YXRlOiAmU3RhdGUpIHsKICAgIG1hdGNoICpzdGF0ZSB7CiAgICAgICAgLy8gZXJyb3I6IGV4cGVjdGVkIHVuaXQgc3RydWN0LCB1bml0IHZhcmlhbnQgb3IgY29uc3RhbnQsIGZvdW5kIHR1cGxlCiAgICAgICAgLy8gICAgICAgIHZhcmlhbnQgYFN0YXRlOjpGYWlsZWRgCiAgICAgICAgU3RhdGU6OkZhaWxlZCA9PiBwcmludGxuISgiRmFpbGVkIiksCiAgICAgICAgXyA9PiAoKQogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGVuc3VyZSB0aGUgbWF0Y2ggYXJtIGtpbmQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cHJlc3Npb24KbWF0Y2hlZC4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKZW51bSBTdGF0ZSB7CiAgICBTdWNjZWVkZWQsCiAgICBGYWlsZWQoU3RyaW5nKSwKfQoKZm4gcHJpbnRfb25fZmFpbHVyZShzdGF0ZTogJlN0YXRlKSB7CiAgICBtYXRjaCAqc3RhdGUgewogICAgICAgIFN0YXRlOjpGYWlsZWQocmVmIG1zZykgPT4gcHJpbnRsbiEoIkZhaWxlZCB3aXRoIHt9IiwgbXNnKSwKICAgICAgICBfID0+ICgpCiAgICB9Cn0KYGBgCkUwNTMzQW4gaXRlbSB3aGljaCBpc24ndCBhIHVuaXQgc3RydWN0LCBhIHZhcmlhbnQsIG5vciBhIGNvbnN0YW50IGhhcyBiZWVuIHVzZWQgYXMgYQptYXRjaCBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMwpzdHJ1Y3QgVG9ydG9pc2U7CgppbXBsIFRvcnRvaXNlIHsKICAgIGZuIHR1cnRsZSgmc2VsZikgLT4gdTMyIHsgMCB9Cn0KCm1hdGNoIDB1MzIgewogICAgVG9ydG9pc2U6OnR1cnRsZSA9PiB7fSAvLyBFcnJvciEKICAgIF8gPT4ge30KfQppZiBsZXQgVG9ydG9pc2U6OnR1cnRsZSA9IDB1MzIge30gLy8gU2FtZSBlcnJvciEKYGBgCgpJZiB5b3Ugd2FudCB0byBtYXRjaCBhZ2FpbnN0IGEgdmFsdWUgcmV0dXJuZWQgYnkgYSBtZXRob2QsIHlvdSBuZWVkIHRvIGJpbmQgdGhlCnZhbHVlIGZpcnN0OgoKYGBgCnN0cnVjdCBUb3J0b2lzZTsKCmltcGwgVG9ydG9pc2UgewogICAgZm4gdHVydGxlKCZzZWxmKSAtPiB1MzIgeyAwIH0KfQoKbWF0Y2ggMHUzMiB7CiAgICB4IGlmIHggPT0gVG9ydG9pc2UudHVydGxlKCkgPT4ge30gLy8gQm91bmQgaW50byBgeGAgdGhlbiB3ZSBjb21wYXJlIGl0IQogICAgXyA9PiB7fQp9CmBgYApFMDUzNFRoZSBgaW5saW5lYCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzQKI1tpbmxpbmUoKV0gLy8gZXJyb3I6IGV4cGVjdGVkIG9uZSBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBwYXJlbnRoZXNpemVkIGBpbmxpbmVgIGF0dHJpYnV0ZSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIHRvIGJlIHNwZWNpZmllZDoKCmBgYAojW2lubGluZShhbHdheXMpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCm9yOgoKYGBgCiNbaW5saW5lKG5ldmVyKV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpBbHRlcm5hdGl2ZWx5LCBhIHBhcmVuLWxlc3MgdmVyc2lvbiBvZiB0aGUgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIGhpbnQgdGhlCmNvbXBpbGVyIGFib3V0IGlubGluaW5nIG9wcG9ydHVuaXR5OgoKYGBgCiNbaW5saW5lXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW2BpbmxpbmVgIGF0dHJpYnV0ZV1baW5saW5lLWF0dHJpYnV0ZV0gc2VjdGlvbgpvZiB0aGUgUmVmZXJlbmNlLgoKW2lubGluZS1hdHRyaWJ1dGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzL2NvZGVnZW4uaHRtbCN0aGUtaW5saW5lLWF0dHJpYnV0ZQpFMDUzNUFuIHVua25vd24gYXJndW1lbnQgd2FzIGdpdmVuIHRvIHRoZSBgaW5saW5lYCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM1CiNbaW5saW5lKHVua25vd24pXSAvLyBlcnJvcjogaW52YWxpZCBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBgaW5saW5lYCBhdHRyaWJ1dGUgb25seSBzdXBwb3J0cyB0d28gYXJndW1lbnRzOgoKICogYWx3YXlzCiAqIG5ldmVyCgpBbGwgb3RoZXIgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBgaW5saW5lYCBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gdGhpcyBlcnJvci4KRXhhbXBsZToKCmBgYAojW2lubGluZShuZXZlcildIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW2BpbmxpbmVgIEF0dHJpYnV0ZV1baW5saW5lLWF0dHJpYnV0ZV0gc2VjdGlvbgpvZiB0aGUgUmVmZXJlbmNlLgoKW2lubGluZS1hdHRyaWJ1dGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzL2NvZGVnZW4uaHRtbCN0aGUtaW5saW5lLWF0dHJpYnV0ZQpFMDUzNlRoZSBgbm90YCBjZmctcHJlZGljYXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM2CiNbY2ZnKG5vdCgpKV0gLy8gZXJyb3I6IGV4cGVjdGVkIDEgY2ZnLXBhdHRlcm4KcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBub3RgIHByZWRpY2F0ZSBleHBlY3RzIG9uZSBjZmctcGF0dGVybi4gRXhhbXBsZToKCmBgYAojW2NmZyhub3QodGFyZ2V0X29zID0gImxpbnV4IikpXSAvLyBvayEKcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBjZmdgIGF0dHJpYnV0ZSwgcmVhZCB0aGUgc2VjdGlvbiBvbgpbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBpbiB0aGUgUmVmZXJlbmNlLgoKW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbApFMDUzN0FuIHVua25vd24gcHJlZGljYXRlIHdhcyB1c2VkIGluc2lkZSB0aGUgYGNmZ2AgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNwojW2NmZyh1bmtub3duKCkpXSAvLyBlcnJvcjogaW52YWxpZCBwcmVkaWNhdGUgYHVua25vd25gCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgY2ZnYCBhdHRyaWJ1dGUgc3VwcG9ydHMgb25seSB0aHJlZSBraW5kcyBvZiBwcmVkaWNhdGVzOgoKICogYW55CiAqIGFsbAogKiBub3QKCkV4YW1wbGU6CgpgYGAKI1tjZmcobm90KHRhcmdldF9vcyA9ICJsaW51eCIpKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgY2ZnYCBhdHRyaWJ1dGUsIHJlYWQgdGhlIHNlY3Rpb24gb24KW0NvbmRpdGlvbmFsIENvbXBpbGF0aW9uXVtjb25kaXRpb25hbC1jb21waWxhdGlvbl0gaW4gdGhlIFJlZmVyZW5jZS4KCltjb25kaXRpb25hbC1jb21waWxhdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwKRTA1MzhBdHRyaWJ1dGUgY29udGFpbnMgc2FtZSBtZXRhIGl0ZW0gbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM4CiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJGaXJzdCBkZXByZWNhdGlvbiBub3RlLiIsCiAgICBub3RlPSJTZWNvbmQgZGVwcmVjYXRpb24gbm90ZS4iIC8vIGVycm9yOiBtdWx0aXBsZSBzYW1lIG1ldGEgaXRlbQopXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuIEVhY2gga2V5IG1heSBvbmx5IGJlCnVzZWQgb25jZSBpbiBlYWNoIGF0dHJpYnV0ZS4KClRvIGZpeCB0aGUgcHJvYmxlbSwgcmVtb3ZlIGFsbCBidXQgb25lIG9mIHRoZSBtZXRhIGl0ZW1zIHdpdGggdGhlIHNhbWUga2V5LgoKRXhhbXBsZToKCmBgYAojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgbm90ZT0iRmlyc3QgZGVwcmVjYXRpb24gbm90ZS4iCildCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKRTA1MzlBbiBpbnZhbGlkIG1ldGEtaXRlbSB3YXMgdXNlZCBpbnNpZGUgYW4gYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzOQojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbcnVzdGNfZGVwcmVjYXRlZChyZWFzb24pXSAvLyBlcnJvciEKI1t1bnN0YWJsZShmZWF0dXJlID0gImRlcHJlY2F0ZWRfZm4iLCBpc3N1ZSA9ICIxMjMiKV0KZm4gZGVwcmVjYXRlZCgpIHt9CgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfc3RydWN0IiwgaXNzdWUpXSAvLyBlcnJvciEKc3RydWN0IFVuc3RhYmxlOwoKI1tydXN0Y19jb25zdF91bnN0YWJsZShmZWF0dXJlKV0gLy8gZXJyb3IhCmNvbnN0IGZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX3N0cnVjdCIsIHNpbmNlKV0gLy8gZXJyb3IhCnN0cnVjdCBTdGFibGU7CgojW3J1c3RjX2NvbnN0X3N0YWJsZShmZWF0dXJlKV0gLy8gZXJyb3IhCmNvbnN0IGZuIHN0YWJsZV9mbigpIHt9CmBgYAoKTWV0YSBpdGVtcyBhcmUgdGhlIGtleS12YWx1ZSBwYWlycyBpbnNpZGUgb2YgYW4gYXR0cmlidXRlLgpUbyBmaXggdGhlc2UgaXNzdWVzIHlvdSBuZWVkIHRvIGdpdmUgcmVxdWlyZWQga2V5LXZhbHVlIHBhaXJzLgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tydXN0Y19kZXByZWNhdGVkKHNpbmNlID0gIjEuMzkuMCIsIHJlYXNvbiA9ICJyZWFzb24iKV0gLy8gb2shCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJkZXByZWNhdGVkX2ZuIiwgaXNzdWUgPSAiMTIzIildCmZuIGRlcHJlY2F0ZWQoKSB7fQoKI1t1bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX3N0cnVjdCIsIGlzc3VlID0gIjEyMyIpXSAvLyBvayEKc3RydWN0IFVuc3RhYmxlOwoKI1tydXN0Y19jb25zdF91bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX2ZuIiwgaXNzdWUgPSAiMTI0IildIC8vIG9rIQpjb25zdCBmbiB1bnN0YWJsZV9mbigpIHt9CgojW3N0YWJsZShmZWF0dXJlID0gInN0YWJsZV9zdHJ1Y3QiLCBzaW5jZSA9ICIxLjM5LjAiKV0gLy8gb2shCnN0cnVjdCBTdGFibGU7CgojW3J1c3RjX2NvbnN0X3N0YWJsZShmZWF0dXJlID0gInN0YWJsZV9mbiIsIHNpbmNlID0gIjEuMzkuMCIpXSAvLyBvayEKY29uc3QgZm4gc3RhYmxlX2ZuKCkge30KYGBgCkUwNTQxQW4gdW5rbm93biBtZXRhIGl0ZW0gd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQxCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICAvLyBlcnJvcjogdW5rbm93biBtZXRhIGl0ZW0KICAgIHJlYXNvbj0iRXhhbXBsZSBpbnZhbGlkIG1ldGEgaXRlbS4gU2hvdWxkIGJlICdub3RlJyIpCl0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYAoKTWV0YSBpdGVtcyBhcmUgdGhlIGtleS12YWx1ZSBwYWlycyBpbnNpZGUgb2YgYW4gYXR0cmlidXRlLiBUaGUga2V5cyBwcm92aWRlZAptdXN0IGJlIG9uZSBvZiB0aGUgdmFsaWQga2V5cyBmb3IgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUuCgpUbyBmaXggdGhlIHByb2JsZW0sIGVpdGhlciByZW1vdmUgdGhlIHVua25vd24gbWV0YSBpdGVtLCBvciByZW5hbWUgaXQgaWYgeW91CnByb3ZpZGVkIHRoZSB3cm9uZyBuYW1lLgoKSW4gdGhlIGVycm9uZW91cyBjb2RlIGV4YW1wbGUgYWJvdmUsIHRoZSB3cm9uZyBuYW1lIHdhcyBwcm92aWRlZCwgc28gY2hhbmdpbmcKdG8gYSBjb3JyZWN0IG9uZSBpdCB3aWxsIGZpeCB0aGUgZXJyb3IuIEV4YW1wbGU6CgpgYGAKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIG5vdGU9IlRoaXMgaXMgYSB2YWxpZCBtZXRhIGl0ZW0gZm9yIHRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZS4iCildCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKRTA1NDJUaGUgYHNpbmNlYCB2YWx1ZSBpcyBtaXNzaW5nIGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDIKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShmZWF0dXJlID0gIl9zdGFibGVfZm4iKV0gLy8gaW52YWxpZApmbiBfc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9jb25zdF9mbiIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF9zdGFibGVfY29uc3RfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIsIHNpbmNlID0gIjAuMS4wIildCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHJlYXNvbiA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIGludmFsaWQKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgc2luY2VgIGZpZWxkLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfc3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4wLjAiKV0gLy8gb2shCmZuIF9zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSA9ICJfc3RhYmxlX2NvbnN0X2ZuIiwgc2luY2UgPSAiMS4wLjAiKV0gLy8gb2shCmNvbnN0IGZuIF9zdGFibGVfY29uc3RfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIsIHNpbmNlID0gIjAuMS4wIildCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4wIiwKICAgIHJlYXNvbiA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIG9rIQpmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKRTA1NDNUaGUgYHJlYXNvbmAgdmFsdWUgaXMgbWlzc2luZyBpbiBhIHN0YWJpbGl0eSBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQzCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tzdGFibGUoc2luY2UgPSAiMC4xLjAiLCBmZWF0dXJlID0gIl9kZXByZWNhdGVkX2ZuIildCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4wIgopXSAvLyBpbnZhbGlkCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYHJlYXNvbmAgZmllbGQuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShzaW5jZSA9ICIwLjEuMCIsIGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iKV0KI1tydXN0Y19kZXByZWNhdGVkKAogICAgc2luY2UgPSAiMS4wLjAiLAogICAgcmVhc29uID0gImV4cGxhbmF0aW9uIGZvciBkZXByZWNhdGlvbiIKKV0gLy8gb2shCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbApFMDU0NE11bHRpcGxlIHN0YWJpbGl0eSBhdHRyaWJ1dGVzIHdlcmUgZGVjbGFyZWQgb24gdGhlIHNhbWUgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDQKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJydXN0MSIpXQoKI1tzdGFibGUoZmVhdHVyZSA9ICJydXN0MSIsIHNpbmNlID0gIjEuMC4wIildCiNbc3RhYmxlKGZlYXR1cmUgPSAidGVzdCIsIHNpbmNlID0gIjIuMC4wIildIC8vIGludmFsaWQKZm4gZm9vKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgZW5zdXJlIHRoYXQgZWFjaCBpdGVtIGhhcyBhdCBtb3N0IG9uZSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAicnVzdDEiKV0KCiNbc3RhYmxlKGZlYXR1cmUgPSAidGVzdCIsIHNpbmNlID0gIjIuMC4wIildIC8vIG9rIQpmbiBmb28oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCkUwNTQ1VGhlIGBpc3N1ZWAgdmFsdWUgaXMgaW5jb3JyZWN0IGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDUKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2ZuIiwgaXNzdWUgPSAiMCIpXSAvLyBpbnZhbGlkCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwgaXNzdWUgPSAiMCIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBjb3JyZWN0IHZhbHVlIGluIHRoZSBgaXNzdWVgIGZpZWxkLgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9mbiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gb2shCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwgaXNzdWUgPSAiMSIpXSAvLyBvayEKY29uc3QgZm4gX3Vuc3RhYmxlX2NvbnN0X2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbApFMDU0NlRoZSBgZmVhdHVyZWAgdmFsdWUgaXMgbWlzc2luZyBpbiBhIHN0YWJpbGl0eSBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQ2CiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShpc3N1ZSA9ICJub25lIildIC8vIGludmFsaWQKZm4gdW5zdGFibGVfZm4oKSB7fQoKI1tzdGFibGUoc2luY2UgPSAiMS4wLjAiKV0gLy8gaW52YWxpZApmbiBzdGFibGVfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgZmVhdHVyZWAgZmllbGQuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfZm4iLCBpc3N1ZSA9ICJub25lIildIC8vIG9rIQpmbiB1bnN0YWJsZV9mbigpIHt9CgojW3N0YWJsZShmZWF0dXJlID0gInN0YWJsZV9mbiIsIHNpbmNlID0gIjEuMC4wIildIC8vIG9rIQpmbiBzdGFibGVfZm4oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCkUwNTQ3VGhlIGBpc3N1ZWAgdmFsdWUgaXMgbWlzc2luZyBpbiBhIHN0YWJpbGl0eSBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQ3CiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9mbiIpXSAvLyBpbnZhbGlkCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIildIC8vIGludmFsaWQKY29uc3QgZm4gX3Vuc3RhYmxlX2NvbnN0X2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYGlzc3VlYCBmaWVsZC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJfdW5zdGFibGVfZm4iLCBpc3N1ZSA9ICJub25lIildIC8vIG9rIQpmbiBfdW5zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF91bnN0YWJsZSgKICAgIGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwKICAgIGlzc3VlID0gIm5vbmUiCildIC8vIG9rIQpjb25zdCBmbiBfdW5zdGFibGVfY29uc3RfZm4oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCkUwNTQ5QSBgcnVzdGNfZGVwcmVjYXRlZGAgYXR0cmlidXRlIHdhc24ndCBwYWlyZWQgd2l0aCBhIGBzdGFibGVgL2B1bnN0YWJsZWAKYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0OQojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4xIiwKICAgIHJlYXNvbiA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIGludmFsaWQKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBhZGQgYWxzbyBhbiBhdHRyaWJ1dGUgYHN0YWJsZWAgb3IgYHVuc3RhYmxlYC4KRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4xIiwKICAgIHJlYXNvbiA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIG9rIQpmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKRTA1NTBNb3JlIHRoYW4gb25lIGBkZXByZWNhdGVkYCBhdHRyaWJ1dGUgaGFzIGJlZW4gcHV0IG9uIGFuIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTUwCiNbZGVwcmVjYXRlZChub3RlID0gImJlY2F1c2Ugd2h5IG5vdD8iKV0KI1tkZXByZWNhdGVkKG5vdGUgPSAicmlnaHQ/IildIC8vIGVycm9yIQpmbiB0aGVfYmFuaXNoZWQoKSB7fQpgYGAKClRoZSBgZGVwcmVjYXRlZGAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHByZXNlbnQgKipvbmNlKiogb24gYW4gaXRlbS4KCmBgYAojW2RlcHJlY2F0ZWQobm90ZSA9ICJiZWNhdXNlIHdoeSBub3QsIHJpZ2h0PyIpXQpmbiB0aGVfYmFuaXNoZWQoKSB7fSAvLyBvayEKYGBgCkUwNTUxQW4gaW52YWxpZCBtZXRhLWl0ZW0gd2FzIHVzZWQgaW5zaWRlIGFuIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTEKI1tkZXByZWNhdGVkKG5vdGUpXSAvLyBlcnJvciEKZm4gaV9hbV9kZXByZWNhdGVkKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuIFRvIGZpeCB0aGlzIGlzc3VlLAp5b3UgbmVlZCB0byBnaXZlIGEgdmFsdWUgdG8gdGhlIGBub3RlYCBrZXkuIEV4YW1wbGU6CgpgYGAKI1tkZXByZWNhdGVkKG5vdGUgPSAiYmVjYXVzZSIpXSAvLyBvayEKZm4gaV9hbV9kZXByZWNhdGVkKCkge30KYGBgCkUwNTUyQSB1bnJlY29nbml6ZWQgcmVwcmVzZW50YXRpb24gYXR0cmlidXRlIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1MgojW3JlcHIoRCldIC8vIGVycm9yOiB1bnJlY29nbml6ZWQgcmVwcmVzZW50YXRpb24gaGludApzdHJ1Y3QgTXlTdHJ1Y3QgewogICAgbXlfZmllbGQ6IHVzaXplCn0KYGBgCgpZb3UgY2FuIHVzZSBhIGByZXByYCBhdHRyaWJ1dGUgdG8gdGVsbCB0aGUgY29tcGlsZXIgaG93IHlvdSB3YW50IGEgc3RydWN0IG9yCmVudW0gdG8gYmUgbGFpZCBvdXQgaW4gbWVtb3J5LgoKTWFrZSBzdXJlIHlvdSdyZSB1c2luZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBvcHRpb25zOgoKYGBgCiNbcmVwcihDKV0gLy8gb2shCnN0cnVjdCBNeVN0cnVjdCB7CiAgICBteV9maWVsZDogdXNpemUKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZnlpbmcgcmVwcmVzZW50YXRpb25zLCBzZWUgdGhlIFsiQWx0ZXJuYXRpdmUKUmVwcmVzZW50YXRpb25zIiBzZWN0aW9uXSBvZiB0aGUgUnVzdG9ub21pY29uLgoKWyJBbHRlcm5hdGl2ZSBSZXByZXNlbnRhdGlvbnMiIHNlY3Rpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25vbWljb24vb3RoZXItcmVwcnMuaHRtbApFMDU1NEZlYXR1cmUgYXR0cmlidXRlcyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBuaWdodGx5IHJlbGVhc2UgY2hhbm5lbC4gU3RhYmxlIG9yCmJldGEgY29tcGlsZXJzIHdpbGwgbm90IGNvbXBseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGRlcGVuZHMgb24gcmVsZWFzZSBjaGFubmVsKQojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXSAvLyBlcnJvcjogYCMhW2ZlYXR1cmVdYCBtYXkgbm90IGJlIHVzZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBzdGFibGUgcmVsZWFzZSBjaGFubmVsCmBgYAoKSWYgeW91IG5lZWQgdGhlIGZlYXR1cmUsIG1ha2Ugc3VyZSB0byB1c2UgYSBuaWdodGx5IHJlbGVhc2Ugb2YgdGhlIGNvbXBpbGVyCihidXQgYmUgd2FybmVkIHRoYXQgdGhlIGZlYXR1cmUgbWF5IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBpbiB0aGUgZnV0dXJlKS4KRTA1NTZUaGUgYGZlYXR1cmVgIGF0dHJpYnV0ZSB3YXMgYmFkbHkgZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1NgojIVtmZWF0dXJlKGZvb19iYXJfYmF6LCBmb28oYmFyKSwgZm9vID0gImJheiIsIGZvbyldIC8vIGVycm9yIQojIVtmZWF0dXJlXSAvLyBlcnJvciEKIyFbZmVhdHVyZSA9ICJmb28iXSAvLyBlcnJvciEKYGBgCgpUaGUgYGZlYXR1cmVgIGF0dHJpYnV0ZSBvbmx5IGFjY2VwdCBhICJmZWF0dXJlIGZsYWciIGFuZCBjYW4gb25seSBiZSB1c2VkIG9uCm5pZ2h0bHkuIEV4YW1wbGU6CgpgYGBpZ25vcmUgKG9ubHkgd29ya3MgaW4gbmlnaHRseSkKIyFbZmVhdHVyZShmbGFnKV0KYGBgCkUwNTU3QSBmZWF0dXJlIGF0dHJpYnV0ZSBuYW1lZCBhIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1NwojIVtmZWF0dXJlKG1hbmFnZWRfYm94ZXMpXSAvLyBlcnJvcjogZmVhdHVyZSBoYXMgYmVlbiByZW1vdmVkCmBgYAoKRGVsZXRlIHRoZSBvZmZlbmRpbmcgZmVhdHVyZSBhdHRyaWJ1dGUuCkUwNTU5QW4gdW5rbm93biBmaWVsZCB3YXMgc3BlY2lmaWVkIGludG8gYW4gZW51bSdzIHN0cnVjdHVyZSB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1OQplbnVtIEZpZWxkIHsKICAgIEZvb2wgeyB4OiB1MzIgfSwKfQoKbGV0IHMgPSBGaWVsZDo6Rm9vbCB7IGpva2U6IDAgfTsKLy8gZXJyb3I6IHN0cnVjdCB2YXJpYW50IGBGaWVsZDo6Rm9vbGAgaGFzIG5vIGZpZWxkIG5hbWVkIGBqb2tlYApgYGAKClZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBmaWVsZCdzIG5hbWUgb3IgdGhhdCB0aGUgZmllbGQgZXhpc3RzLiBFeGFtcGxlOgoKYGBgCmVudW0gRmllbGQgewogICAgRm9vbCB7IGpva2U6IHUzMiB9LAp9CgpsZXQgcyA9IEZpZWxkOjpGb29sIHsgam9rZTogMCB9OyAvLyBvayEKYGBgCkUwNTYwQW4gdW5rbm93biBmaWVsZCB3YXMgc3BlY2lmaWVkIGludG8gYSBzdHJ1Y3R1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTYwCnN0cnVjdCBTaW1iYSB7CiAgICBtb3RoZXI6IHUzMiwKfQoKbGV0IHMgPSBTaW1iYSB7IG1vdGhlcjogMSwgZmF0aGVyOiAwIH07Ci8vIGVycm9yOiBzdHJ1Y3R1cmUgYFNpbWJhYCBoYXMgbm8gZmllbGQgbmFtZWQgYGZhdGhlcmAKYGBgCgpWZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgZmllbGQncyBuYW1lIG9yIHRoYXQgdGhlIGZpZWxkIGV4aXN0cy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgU2ltYmEgewogICAgbW90aGVyOiB1MzIsCiAgICBmYXRoZXI6IHUzMiwKfQoKbGV0IHMgPSBTaW1iYSB7IG1vdGhlcjogMSwgZmF0aGVyOiAwIH07IC8vIG9rIQpgYGAKRTA1NjFBIG5vbi1pZGVudCBvciBub24td2lsZGNhcmQgcGF0dGVybiBoYXMgYmVlbiB1c2VkIGFzIGEgcGFyYW1ldGVyIG9mIGEgZnVuY3Rpb24KcG9pbnRlciB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MQp0eXBlIEExID0gZm4obXV0IHBhcmFtOiB1OCk7IC8vIGVycm9yIQp0eXBlIEEyID0gZm4oJnBhcmFtOiB1MzIpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIGFuIGFsaWFzIG92ZXIgYSBmdW5jdGlvbiB0eXBlLCB5b3UgY2Fubm90IGUuZy4gZGVub3RlIGEgcGFyYW1ldGVyIGFzCmJlaW5nIG11dGFibGUuCgpUbyBmaXggdGhlIGlzc3VlLCByZW1vdmUgcGF0dGVybnMgKGBfYCBpcyBhbGxvd2VkIHRob3VnaCkuIEV4YW1wbGU6CgpgYGAKdHlwZSBBMSA9IGZuKHBhcmFtOiB1OCk7IC8vIG9rIQp0eXBlIEEyID0gZm4oXzogdTMyKTsgLy8gb2shCmBgYAoKWW91IGNhbiBhbHNvIG9taXQgdGhlIHBhcmFtZXRlciBuYW1lOgoKYGBgCnR5cGUgQTMgPSBmbihpMTYpOyAvLyBvayEKYGBgCkUwNTYyQWJzdHJhY3QgcmV0dXJuIHR5cGVzICh3cml0dGVuIGBpbXBsIFRyYWl0YCBmb3Igc29tZSB0cmFpdCBgVHJhaXRgKSBhcmUgb25seQphbGxvd2VkIGFzIGZ1bmN0aW9uIGFuZCBpbmhlcmVudCBpbXBsIHJldHVybiB0eXBlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjIKZm4gbWFpbigpIHsKICAgIGxldCBjb3VudF90b190ZW46IGltcGwgSXRlcmF0b3I8SXRlbT11c2l6ZT4gPSAwLi4xMDsKICAgIC8vIGVycm9yOiBgaW1wbCBUcmFpdGAgbm90IGFsbG93ZWQgb3V0c2lkZSBvZiBmdW5jdGlvbiBhbmQgaW5oZXJlbnQgbWV0aG9kCiAgICAvLyAgICAgICAgcmV0dXJuIHR5cGVzCiAgICBmb3IgaSBpbiBjb3VudF90b190ZW4gewogICAgICAgIHByaW50bG4hKCJ7fSIsIGkpOwogICAgfQp9CmBgYAoKTWFrZSBzdXJlIGBpbXBsIFRyYWl0YCBvbmx5IGFwcGVhcnMgaW4gcmV0dXJuLXR5cGUgcG9zaXRpb24uCgpgYGAKZm4gY291bnRfdG9fbihuOiB1c2l6ZSkgLT4gaW1wbCBJdGVyYXRvcjxJdGVtPXVzaXplPiB7CiAgICAwLi5uCn0KCmZuIG1haW4oKSB7CiAgICBmb3IgaSBpbiBjb3VudF90b19uKDEwKSB7ICAvLyBvayEKICAgICAgICBwcmludGxuISgie30iLCBpKTsKICAgIH0KfQpgYGAKClNlZSBbUkZDIDE1MjJdIGZvciBtb3JlIGRldGFpbHMuCgpbUkZDIDE1MjJdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xNTIyLWNvbnNlcnZhdGl2ZS1pbXBsLXRyYWl0Lm1kCkUwNTY1QSBsaXRlcmFsIHdhcyB1c2VkIGluIGEgYnVpbHQtaW4gYXR0cmlidXRlIHRoYXQgZG9lc24ndCBzdXBwb3J0IGxpdGVyYWxzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NQojW3JlcHIoIkMiKV0gLy8gZXJyb3I6IG1ldGEgaXRlbSBpbiBgcmVwcmAgbXVzdCBiZSBhbiBpZGVudGlmaWVyCnN0cnVjdCBSZXByIHt9CgpmbiBtYWluKCkge30KYGBgCgpMaXRlcmFscyBpbiBhdHRyaWJ1dGVzIGFyZSBuZXcgYW5kIGxhcmdlbHkgdW5zdXBwb3J0ZWQgaW4gYnVpbHQtaW4gYXR0cmlidXRlcy4KV29yayB0byBzdXBwb3J0IGxpdGVyYWxzIHdoZXJlIGFwcHJvcHJpYXRlIGlzIG9uZ29pbmcuIFRyeSB1c2luZyBhbiB1bnF1b3RlZApuYW1lIGluc3RlYWQ6CgpgYGAKI1tyZXByKEMpXSAvLyBvayEKc3RydWN0IFJlcHIge30KCmZuIG1haW4oKSB7fQpgYGAKRTA1NjZDb25mbGljdGluZyByZXByZXNlbnRhdGlvbiBoaW50cyBoYXZlIGJlZW4gdXNlZCBvbiBhIHNhbWUgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjYKI1tyZXByKHUzMiwgdTY0KV0KZW51bSBSZXByIHsgQSB9CmBgYAoKSW4gbW9zdCBjYXNlcyAoaWYgbm90IGFsbCksIHVzaW5nIGp1c3Qgb25lIHJlcHJlc2VudGF0aW9uIGhpbnQgaXMgbW9yZSB0aGFuCmVub3VnaC4gSWYgeW91IHdhbnQgdG8gaGF2ZSBhIHJlcHJlc2VudGF0aW9uIGhpbnQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50CmFyY2hpdGVjdHVyZSwgdXNlIGBjZmdfYXR0cmAuIEV4YW1wbGU6CgpgYGAKI1tjZmdfYXR0cihsaW51eCwgcmVwcih1MzIpKV0KI1tjZmdfYXR0cihub3QobGludXgpLCByZXByKHU2NCkpXQplbnVtIFJlcHIgeyBBIH0KYGBgCkUwNTY3R2VuZXJpY3MgaGF2ZSBiZWVuIHVzZWQgb24gYW4gYXV0byB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjcKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEdlbmVyaWM8VD4ge30gLy8gZXJyb3IhCiMgZm4gbWFpbigpIHt9CmBgYAoKU2luY2UgYW4gYXV0byB0cmFpdCBpcyBpbXBsZW1lbnRlZCBvbiBhbGwgZXhpc3RpbmcgdHlwZXMsIHRoZQpjb21waWxlciB3b3VsZCBub3QgYmUgYWJsZSB0byBpbmZlciB0aGUgdHlwZXMgb2YgdGhlIHRyYWl0J3MgZ2VuZXJpYwpwYXJhbWV0ZXJzLgoKVG8gZml4IHRoaXMgaXNzdWUsIGp1c3QgcmVtb3ZlIHRoZSBnZW5lcmljczoKCmBgYAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCmF1dG8gdHJhaXQgR2VuZXJpYyB7fSAvLyBvayEKIyBmbiBtYWluKCkge30KYGBgCkUwNTY4QSBzdXBlciB0cmFpdCBoYXMgYmVlbiBhZGRlZCB0byBhbiBhdXRvIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2OAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCmF1dG8gdHJhaXQgQm91bmQgOiBDb3B5IHt9IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKU2luY2UgYW4gYXV0byB0cmFpdCBpcyBpbXBsZW1lbnRlZCBvbiBhbGwgZXhpc3RpbmcgdHlwZXMsIGFkZGluZyBhIHN1cGVyIHRyYWl0CndvdWxkIGZpbHRlciBvdXQgYSBsb3Qgb2YgdGhvc2UgdHlwZXMuIEluIHRoZSBjdXJyZW50IGV4YW1wbGUsIGFsbW9zdCBub25lIG9mCmFsbCB0aGUgZXhpc3RpbmcgdHlwZXMgY291bGQgaW1wbGVtZW50IGBCb3VuZGAgYmVjYXVzZSB2ZXJ5IGZldyBvZiB0aGVtIGhhdmUgdGhlCmBDb3B5YCB0cmFpdC4KClRvIGZpeCB0aGlzIGlzc3VlLCBqdXN0IHJlbW92ZSB0aGUgc3VwZXIgdHJhaXQ6CgpgYGAKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEJvdW5kIHt9IC8vIG9rIQoKZm4gbWFpbigpIHt9CmBgYApFMDU2OUlmIGFuIGltcGwgaGFzIGEgZ2VuZXJpYyBwYXJhbWV0ZXIgd2l0aCB0aGUgYCNbbWF5X2RhbmdsZV1gIGF0dHJpYnV0ZSwgdGhlbgp0aGF0IGltcGwgbXVzdCBiZSBkZWNsYXJlZCBhcyBhbiBgdW5zYWZlIGltcGxgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2OQojIVtmZWF0dXJlKGRyb3Bja19leWVwYXRjaCldCgpzdHJ1Y3QgRm9vPFg+KFgpOwppbXBsPCNbbWF5X2RhbmdsZV0gWD4gRHJvcCBmb3IgRm9vPFg+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IH0KfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgd2UgYXJlIGFzc2VydGluZyB0aGF0IHRoZSBkZXN0cnVjdG9yIGZvciBgRm9vYCB3aWxsIG5vdAphY2Nlc3MgYW55IGRhdGEgb2YgdHlwZSBgWGAsIGFuZCByZXF1aXJlIHRoaXMgYXNzZXJ0aW9uIHRvIGJlIHRydWUgZm9yCm92ZXJhbGwgc2FmZXR5IGluIG91ciBwcm9ncmFtLiBUaGUgY29tcGlsZXIgZG9lcyBub3QgY3VycmVudGx5IGF0dGVtcHQgdG8KdmVyaWZ5IHRoaXMgYXNzZXJ0aW9uOyB0aGVyZWZvcmUgd2UgbXVzdCB0YWcgdGhpcyBgaW1wbGAgYXMgdW5zYWZlLgpFMDU3MFRoZSByZXF1ZXN0ZWQgQUJJIGlzIHVuc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IHRhcmdldC4KClRoZSBydXN0IGNvbXBpbGVyIG1haW50YWlucyBmb3IgZWFjaCB0YXJnZXQgYSBsaXN0IG9mIHVuc3VwcG9ydGVkIEFCSXMgb24KdGhhdCB0YXJnZXQuIElmIGFuIEFCSSBpcyBwcmVzZW50IGluIHN1Y2ggYSBsaXN0IHRoaXMgdXN1YWxseSBtZWFucyB0aGF0IHRoZQp0YXJnZXQgLyBBQkkgY29tYmluYXRpb24gaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkIGJ5IGxsdm0uCgpJZiBuZWNlc3NhcnksIHlvdSBjYW4gY2lyY3VtdmVudCB0aGlzIGNoZWNrIHVzaW5nIGN1c3RvbSB0YXJnZXQgc3BlY2lmaWNhdGlvbnMuCkUwNTcxQSBgYnJlYWtgIHN0YXRlbWVudCB3aXRoIGFuIGFyZ3VtZW50IGFwcGVhcmVkIGluIGEgbm9uLWBsb29wYCBsb29wLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3MQojIGxldCBtdXQgaSA9IDE7CiMgZm4gc2F0aXNmaWVkKG46IHVzaXplKSAtPiBib29sIHsgbiAlIDIzID09IDAgfQpsZXQgcmVzdWx0ID0gd2hpbGUgdHJ1ZSB7CiAgICBpZiBzYXRpc2ZpZWQoaSkgewogICAgICAgIGJyZWFrIDIgKiBpOyAvLyBlcnJvcjogYGJyZWFrYCB3aXRoIHZhbHVlIGZyb20gYSBgd2hpbGVgIGxvb3AKICAgIH0KICAgIGkgKz0gMTsKfTsKYGBgCgpUaGUgYGJyZWFrYCBzdGF0ZW1lbnQgY2FuIHRha2UgYW4gYXJndW1lbnQgKHdoaWNoIHdpbGwgYmUgdGhlIHZhbHVlIG9mIHRoZSBsb29wCmV4cHJlc3Npb24gaWYgdGhlIGBicmVha2Agc3RhdGVtZW50IGlzIGV4ZWN1dGVkKSBpbiBgbG9vcGAgbG9vcHMsIGJ1dCBub3QKYGZvcmAsIGB3aGlsZWAsIG9yIGB3aGlsZSBsZXRgIGxvb3BzLgoKTWFrZSBzdXJlIGBicmVhayB2YWx1ZTtgIHN0YXRlbWVudHMgb25seSBvY2N1ciBpbiBgbG9vcGAgbG9vcHM6CgpgYGAKIyBsZXQgbXV0IGkgPSAxOwojIGZuIHNhdGlzZmllZChuOiB1c2l6ZSkgLT4gYm9vbCB7IG4gJSAyMyA9PSAwIH0KbGV0IHJlc3VsdCA9IGxvb3AgeyAvLyBUaGlzIGlzIG5vdyBhICJsb29wIiBsb29wLgogICAgaWYgc2F0aXNmaWVkKGkpIHsKICAgICAgICBicmVhayAyICogaTsgLy8gb2shCiAgICB9CiAgICBpICs9IDE7Cn07CmBgYApFMDU3MkEgcmV0dXJuIHN0YXRlbWVudCB3YXMgZm91bmQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGJvZHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTcyCmNvbnN0IEZPTzogdTMyID0gcmV0dXJuIDA7IC8vIGVycm9yOiByZXR1cm4gc3RhdGVtZW50IG91dHNpZGUgb2YgZnVuY3Rpb24gYm9keQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIGp1c3QgcmVtb3ZlIHRoZSByZXR1cm4ga2V5d29yZCBvciBtb3ZlIHRoZSBleHByZXNzaW9uIGludG8gYQpmdW5jdGlvbi4gRXhhbXBsZToKCmBgYApjb25zdCBGT086IHUzMiA9IDA7CgpmbiBzb21lX2ZuKCkgLT4gdTMyIHsKICAgIHJldHVybiBGT087Cn0KCmZuIG1haW4oKSB7CiAgICBzb21lX2ZuKCk7Cn0KYGBgCkUwNTczU29tZXRoaW5nIG90aGVyIHRoYW4gYSB0eXBlIGhhcyBiZWVuIHVzZWQgd2hlbiBvbmUgd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzMKZW51bSBEcmFnb24gewogICAgQm9ybiwKfQoKZm4gb2JsaXZpb24oKSAtPiBEcmFnb246OkJvcm4geyAvLyBlcnJvciEKICAgIERyYWdvbjo6Qm9ybgp9Cgpjb25zdCBIT0JCSVQ6IHUzMiA9IDI7CmltcGwgSE9CQklUIHt9IC8vIGVycm9yIQoKZW51bSBXaXphcmQgewogICAgR2FuZGFsZiwKICAgIFNhcnVtYW4sCn0KCnRyYWl0IElzZW5nYXJkIHsKICAgIGZuIHdpemFyZChfOiBXaXphcmQ6OlNhcnVtYW4pOyAvLyBlcnJvciEKfQpgYGAKCkluIGFsbCB0aGVzZSBlcnJvcnMsIGEgdHlwZSB3YXMgZXhwZWN0ZWQuIEZvciBleGFtcGxlLCBpbiB0aGUgZmlyc3QgZXJyb3IsIGlmCndlIHdhbnQgdG8gcmV0dXJuIHRoZSBgQm9ybmAgdmFyaWFudCBmcm9tIHRoZSBgRHJhZ29uYCBlbnVtLCB3ZSBtdXN0IHNldCB0aGUKZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBlbnVtIGFuZCBub3QgaXRzIHZhcmlhbnQ6CgpgYGAKZW51bSBEcmFnb24gewogICAgQm9ybiwKfQoKZm4gb2JsaXZpb24oKSAtPiBEcmFnb24geyAvLyBvayEKICAgIERyYWdvbjo6Qm9ybgp9CmBgYAoKSW4gdGhlIHNlY29uZCBlcnJvciwgeW91IGNhbid0IGltcGxlbWVudCBzb21ldGhpbmcgb24gYW4gaXRlbSwgb25seSBvbiB0eXBlcy4KV2Ugd291bGQgbmVlZCB0byBjcmVhdGUgYSBuZXcgdHlwZSBpZiB3ZSB3YW50ZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXI6CgpgYGAKc3RydWN0IEhvYmJpdCh1MzIpOyAvLyB3ZSBjcmVhdGUgYSBuZXcgdHlwZQoKY29uc3QgSE9CQklUOiBIb2JiaXQgPSBIb2JiaXQoMik7CmltcGwgSG9iYml0IHt9IC8vIG9rIQpgYGAKCkluIHRoZSB0aGlyZCBjYXNlLCB3ZSB0cmllZCB0byBvbmx5IGV4cGVjdCBvbmUgdmFyaWFudCBvZiB0aGUgYFdpemFyZGAgZW51bSwKd2hpY2ggaXMgbm90IHBvc3NpYmxlLiBUbyBtYWtlIHRoaXMgd29yaywgd2UgbmVlZCB0byB1c2luZyBwYXR0ZXJuIG1hdGNoaW5nCm92ZXIgdGhlIGBXaXphcmRgIGVudW06CgpgYGAKZW51bSBXaXphcmQgewogICAgR2FuZGFsZiwKICAgIFNhcnVtYW4sCn0KCnRyYWl0IElzZW5nYXJkIHsKICAgIGZuIHdpemFyZCh3OiBXaXphcmQpIHsgLy8gb2shCiAgICAgICAgbWF0Y2ggdyB7CiAgICAgICAgICAgIFdpemFyZDo6U2FydW1hbiA9PiB7CiAgICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmcKICAgICAgICAgICAgfQogICAgICAgICAgICBfID0+IHt9IC8vIGlnbm9yZSBldmVyeXRoaW5nIGVsc2UKICAgICAgICB9CiAgICB9Cn0KYGBgCkUwNTc0U29tZXRoaW5nIG90aGVyIHRoYW4gYSBzdHJ1Y3QsIHZhcmlhbnQgb3IgdW5pb24gaGFzIGJlZW4gdXNlZCB3aGVuIG9uZSB3YXMKZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc0Cm1vZCBNb3Jkb3Ige30KCmxldCBzYXVyb24gPSBNb3Jkb3IgeyB4OiAoKSB9OyAvLyBlcnJvciEKCmVudW0gSmFrIHsKICAgIERheHRlciB7IGk6IGlzaXplIH0sCn0KCmxldCBlY28gPSBKYWs6OkRheHRlciB7IGk6IDEgfTsKbWF0Y2ggZWNvIHsKICAgIEphayB7IGkgfSA9PiB7fSAvLyBlcnJvciEKfQpgYGAKCkluIGFsbCB0aGVzZSBlcnJvcnMsIGEgdHlwZSB3YXMgZXhwZWN0ZWQuIEZvciBleGFtcGxlLCBpbiB0aGUgZmlyc3QgZXJyb3IsCndlIHRyaWVkIHRvIGluc3RhbnRpYXRlIHRoZSBgTW9yZG9yYCBtb2R1bGUsIHdoaWNoIGlzIGltcG9zc2libGUuIElmIHlvdSB3YW50CnRvIGluc3RhbnRpYXRlIGEgdHlwZSBpbnNpZGUgYSBtb2R1bGUsIHlvdSBjYW4gZG8gaXQgYXMgZm9sbG93OgoKYGBgCm1vZCBNb3Jkb3IgewogICAgcHViIHN0cnVjdCBUaGVSaW5nIHsKICAgICAgICBwdWIgeDogdXNpemUsCiAgICB9Cn0KCmxldCBzYXVyb24gPSBNb3Jkb3I6OlRoZVJpbmcgeyB4OiAxIH07IC8vIG9rIQpgYGAKCkluIHRoZSBzZWNvbmQgZXJyb3IsIHdlIHRyaWVkIHRvIGJpbmQgdGhlIGBKYWtgIGVudW0gZGlyZWN0bHksIHdoaWNoIGlzIG5vdApwb3NzaWJsZTogeW91IGNhbiBvbmx5IGJpbmQgb25lIG9mIGl0cyB2YXJpYW50cy4gVG8gZG8gc286CgpgYGAKZW51bSBKYWsgewogICAgRGF4dGVyIHsgaTogaXNpemUgfSwKfQoKbGV0IGVjbyA9IEphazo6RGF4dGVyIHsgaTogMSB9OwptYXRjaCBlY28gewogICAgSmFrOjpEYXh0ZXIgeyBpIH0gPT4ge30gLy8gb2shCn0KYGBgCkUwNTc1U29tZXRoaW5nIG90aGVyIHRoYW4gYSB0eXBlIG9yIGFuIGFzc29jaWF0ZWQgdHlwZSB3YXMgZ2l2ZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc1CmVudW0gUmljayB7IE1vcnR5IH0KCmxldCBfOiA8dTggYXMgUmljaz46Ok1vcnR5OyAvLyBlcnJvciEKCnRyYWl0IEFnZSB7CiAgICB0eXBlIEVtcGlyZTsKICAgIGZuIE15dGhvbG9neSgpIHt9Cn0KCmltcGwgQWdlIGZvciB1OCB7CiAgICB0eXBlIEVtcGlyZSA9IHUxNjsKfQoKbGV0IF86IDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3k7IC8vIGVycm9yIQpgYGAKCkluIGJvdGggY2FzZXMsIHdlJ3JlIGRlY2xhcmluZyBhIHZhcmlhYmxlIChjYWxsZWQgYF9gKSBhbmQgd2UncmUgZ2l2aW5nIGl0IGEKdHlwZS4gSG93ZXZlciwgYDx1OCBhcyBSaWNrPjo6TW9ydHlgIGFuZCBgPHU4IGFzIEFnZT46Ok15dGhvbG9neWAgYXJlbid0IHR5cGVzLAp0aGVyZWZvcmUgdGhlIGNvbXBpbGVyIHRocm93cyBhbiBlcnJvci4KCmA8dTggYXMgUmljaz46Ok1vcnR5YCBpcyBhbiBlbnVtIHZhcmlhbnQsIHlvdSBjYW5ub3QgdXNlIGEgdmFyaWFudCBhcyBhIHR5cGUsCnlvdSBoYXZlIHRvIHVzZSB0aGUgZW51bSBkaXJlY3RseToKCmBgYAplbnVtIFJpY2sgeyBNb3J0eSB9CgpsZXQgXzogUmljazsgLy8gb2shCmBgYAoKYDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3lgIGlzIGEgdHJhaXQgbWV0aG9kLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCBhIHR5cGUuCkhvd2V2ZXIsIHRoZSBgQWdlYCB0cmFpdCBwcm92aWRlcyBhbiBhc3NvY2lhdGVkIHR5cGUgYEVtcGlyZWAgd2hpY2ggY2FuIGJlCnVzZWQgYXMgYSB0eXBlOgoKYGBgCnRyYWl0IEFnZSB7CiAgICB0eXBlIEVtcGlyZTsKICAgIGZuIE15dGhvbG9neSgpIHt9Cn0KCmltcGwgQWdlIGZvciB1OCB7CiAgICB0eXBlIEVtcGlyZSA9IHUxNjsKfQoKbGV0IF86IDx1OCBhcyBBZ2U+OjpFbXBpcmU7IC8vIG9rIQpgYGAKRTA1NzZBbiBhc3NvY2lhdGVkIGl0ZW0gd2Fzbid0IGZvdW5kIGluIHRoZSBnaXZlbiB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3Ngp0cmFpdCBIZWxsbyB7CiAgICB0eXBlIFdobzsKCiAgICBmbiBoZWxsbygpIC0+IDxTZWxmIGFzIEhlbGxvPjo6WW91OyAvLyBlcnJvciEKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgd2UgdHJpZWQgdG8gdXNlIHRoZSBub24tZXhpc3RlbnQgYXNzb2NpYXRlZCB0eXBlIGBZb3VgIG9mIHRoZQpgSGVsbG9gIHRyYWl0LiBUbyBmaXggdGhpcyBlcnJvciwgdXNlIGFuIGV4aXN0aW5nIGFzc29jaWF0ZWQgdHlwZToKCmBgYAp0cmFpdCBIZWxsbyB7CiAgICB0eXBlIFdobzsKCiAgICBmbiBoZWxsbygpIC0+IDxTZWxmIGFzIEhlbGxvPjo6V2hvOyAvLyBvayEKfQpgYGAKRTA1NzdTb21ldGhpbmcgb3RoZXIgdGhhbiBhIG1vZHVsZSB3YXMgZm91bmQgaW4gdmlzaWJpbGl0eSBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzcsZWRpdGlvbjIwMTgKcHViIHN0cnVjdCBTZWE7CgpwdWIgKGluIGNyYXRlOjpTZWEpIHN0cnVjdCBTaGFyazsgLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpgU2VhYCBpcyBub3QgYSBtb2R1bGUsIHRoZXJlZm9yZSBpdCBpcyBpbnZhbGlkIHRvIHVzZSBpdCBpbiBhIHZpc2liaWxpdHkgcGF0aC4KVG8gZml4IHRoaXMgZXJyb3Igd2UgbmVlZCB0byBlbnN1cmUgYFNlYWAgaXMgYSBtb2R1bGUuCgpQbGVhc2Ugbm90ZSB0aGF0IHRoZSB2aXNpYmlsaXR5IHNjb3BlIGNhbiBvbmx5IGJlIGFwcGxpZWQgb24gYW5jZXN0b3JzIQoKYGBgZWRpdGlvbjIwMTgKcHViIG1vZCBTZWEgewogICAgcHViIChpbiBjcmF0ZTo6U2VhKSBzdHJ1Y3QgU2hhcms7IC8vIG9rIQp9CgpmbiBtYWluKCkge30KYGBgCkUwNTc4QSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kIGFuZCB0aGVyZWZvcmUsIHRoZSB2aXNpYmlsaXR5IGNhbm5vdCBiZSBkZXRlcm1pbmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3OCxlZGl0aW9uMjAxOApmb28hKCk7CgpwdWIgKGluIDo6U2VhKSBzdHJ1Y3QgU2hhcms7IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKQmVjYXVzZSBvZiB0aGUgY2FsbCB0byB0aGUgYGZvb2AgbWFjcm8sIHRoZSBjb21waWxlciBndWVzc2VzIHRoYXQgdGhlIG1pc3NpbmcKbW9kdWxlIGNvdWxkIGJlIGluc2lkZSBpdCBhbmQgZmFpbHMgYmVjYXVzZSB0aGUgbWFjcm8gZGVmaW5pdGlvbiBjYW5ub3QgYmUKZm91bmQuCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGJlIHN1cmUgdGhhdCB0aGUgbW9kdWxlIGlzIGluIHNjb3BlOgoKYGBgZWRpdGlvbjIwMTgKcHViIG1vZCBTZWEgewogICAgcHViIChpbiBjcmF0ZTo6U2VhKSBzdHJ1Y3QgU2hhcms7Cn0KCmZuIG1haW4oKSB7fQpgYGAKRTA1NzlBIGxvd2VyIHJhbmdlIHdhc24ndCBsZXNzIHRoYW4gdGhlIHVwcGVyIHJhbmdlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3OQojIVtmZWF0dXJlKGV4Y2x1c2l2ZV9yYW5nZV9wYXR0ZXJuKV0KCmZuIG1haW4oKSB7CiAgICBtYXRjaCA1dTMyIHsKICAgICAgICAvLyBUaGlzIHJhbmdlIGlzIG9rLCBhbGJlaXQgcG9pbnRsZXNzLgogICAgICAgIDEgLi4gMiA9PiB7fQogICAgICAgIC8vIFRoaXMgcmFuZ2UgaXMgZW1wdHksIGFuZCB0aGUgY29tcGlsZXIgY2FuIHRlbGwuCiAgICAgICAgNSAuLiA1ID0+IHt9IC8vIGVycm9yIQogICAgfQp9CmBgYAoKV2hlbiBtYXRjaGluZyBhZ2FpbnN0IGFuIGV4Y2x1c2l2ZSByYW5nZSwgdGhlIGNvbXBpbGVyIHZlcmlmaWVzIHRoYXQgdGhlIHJhbmdlCmlzIG5vbi1lbXB0eS4gRXhjbHVzaXZlIHJhbmdlIHBhdHRlcm5zIGluY2x1ZGUgdGhlIHN0YXJ0IHBvaW50IGJ1dCBub3QgdGhlIGVuZApwb2ludCwgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvIHJlcXVpcmluZyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlIGxlc3MKdGhhbiB0aGUgZW5kIG9mIHRoZSByYW5nZS4KRTA1ODBUaGUgYG1haW5gIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODAKZm4gbWFpbih4OiBpMzIpIHsgLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gaGFzIHdyb25nIHR5cGUKICAgIHByaW50bG4hKCJ7fSIsIHgpOwp9CmBgYAoKVGhlIGBtYWluYCBmdW5jdGlvbiBwcm90b3R5cGUgc2hvdWxkIG5ldmVyIHRha2UgYXJndW1lbnRzLgpFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICAvLyB5b3VyIGNvZGUKfQpgYGAKCklmIHlvdSB3YW50IHRvIGdldCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCB1c2UgYHN0ZDo6ZW52OjphcmdzYC4gVG8gZXhpdCB3aXRoIGEKc3BlY2lmaWVkIGV4aXQgY29kZSwgdXNlIGBzdGQ6OnByb2Nlc3M6OmV4aXRgLgpFMDU4MUluIGEgYGZuYCB0eXBlLCBhIGxpZmV0aW1lIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGUKYW5kIG5vdCBpbiB0aGUgYXJndW1lbnRzIHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4MQpmbiBtYWluKCkgewogICAgLy8gSGVyZSwgYCdhYCBhcHBlYXJzIG9ubHkgaW4gdGhlIHJldHVybiB0eXBlOgogICAgbGV0IHg6IGZvcjwnYT4gZm4oKSAtPiAmJ2EgaTMyOwp9CmBgYAoKVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBsaWZldGltZSBpc24ndCBjb250cmFpbmVkIGJ5IGFueSBvZiB0aGUgYXJndW1lbnRzLAptYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgaG93IGxvbmcgaXQncyBzdXBwb3NlZCB0byBsaXZlLgoKVG8gZml4IHRoaXMgaXNzdWUsIGVpdGhlciB1c2UgdGhlIGxpZmV0aW1lIGluIHRoZSBhcmd1bWVudHMsIG9yIHVzZSB0aGUKYCdzdGF0aWNgIGxpZmV0aW1lLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICAvLyBIZXJlLCBgJ2FgIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGU6CiAgICBsZXQgeDogZm9yPCdhPiBmbigmJ2EgaTMyKSAtPiAmJ2EgaTMyOwogICAgbGV0IHk6IGZuKCkgLT4gJidzdGF0aWMgaTMyOwp9CmBgYAoKTm90ZTogVGhlIGV4YW1wbGVzIGFib3ZlIHVzZWQgdG8gYmUgKGVycm9uZW91c2x5KSBhY2NlcHRlZCBieSB0aGUKY29tcGlsZXIsIGJ1dCB0aGlzIHdhcyBzaW5jZSBjb3JyZWN0ZWQuIFNlZSBbaXNzdWUgIzMzNjg1XSBmb3IgbW9yZQpkZXRhaWxzLgoKW2lzc3VlICMzMzY4NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMzM2ODUKRTA1ODJBIGxpZmV0aW1lIGlzIG9ubHkgcHJlc2VudCBpbiBhbiBhc3NvY2lhdGVkLXR5cGUgYmluZGluZywgYW5kIG5vdCBpbiB0aGUgaW5wdXQKdHlwZXMgdG8gdGhlIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4MgpmbiBiYXI8Rj4odDogRikKICAgIC8vIE5vIHR5cGUgY2FuIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVudCwgc2luY2UgYCdhYCBkb2VzIG5vdAogICAgLy8gYXBwZWFyIGluIGFueSBvZiB0aGUgaW5wdXQgdHlwZXMgKGhlcmUsIGBpMzJgKToKICAgIHdoZXJlIEY6IGZvcjwnYT4gRm4oaTMyKSAtPiBPcHRpb248JidhIGkzMj4Kewp9CgpmbiBtYWluKCkgeyB9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIGVpdGhlciB1c2UgdGhlIGxpZmV0aW1lIGluIHRoZSBpbnB1dHMsIG9yIHVzZQpgJ3N0YXRpY2AuIEV4YW1wbGU6CgpgYGAKZm4gYmFyPEYsIEc+KHQ6IEYsIHU6IEcpCiAgICB3aGVyZSBGOiBmb3I8J2E+IEZuKCYnYSBpMzIpIC0+IE9wdGlvbjwmJ2EgaTMyPiwKICAgICAgICAgIEc6IEZuKGkzMikgLT4gT3B0aW9uPCYnc3RhdGljIGkzMj4sCnsKfQoKZm4gbWFpbigpIHsgfQpgYGAKCk5vdGU6IFRoZSBleGFtcGxlcyBhYm92ZSB1c2VkIHRvIGJlIChlcnJvbmVvdXNseSkgYWNjZXB0ZWQgYnkgdGhlCmNvbXBpbGVyLCBidXQgdGhpcyB3YXMgc2luY2UgY29ycmVjdGVkLiBTZWUgW2lzc3VlICMzMzY4NV0gZm9yIG1vcmUKZGV0YWlscy4KCltpc3N1ZSAjMzM2ODVdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzMzNjg1CkUwNTgzQSBmaWxlIHdhc24ndCBmb3VuZCBmb3IgYW4gb3V0LW9mLWxpbmUgbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4Mwptb2QgZmlsZV90aGF0X2RvZXNudF9leGlzdDsgLy8gZXJyb3I6IGZpbGUgbm90IGZvdW5kIGZvciBtb2R1bGUKCmZuIG1haW4oKSB7fQpgYGAKClBsZWFzZSBiZSBzdXJlIHRoYXQgYSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZSBleGlzdHMuIElmIHlvdQp3YW50IHRvIHVzZSBhIG1vZHVsZSBuYW1lZCBgZmlsZV90aGF0X2RvZXNudF9leGlzdGAsIHlvdSBuZWVkIHRvIGhhdmUgYSBmaWxlCm5hbWVkIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0LnJzYCBvciBgZmlsZV90aGF0X2RvZXNudF9leGlzdC9tb2QucnNgIGluIHRoZQpzYW1lIGRpcmVjdG9yeS4KRTA1ODRBIGRvYyBjb21tZW50IHRoYXQgaXMgbm90IGF0dGFjaGVkIHRvIGFueXRoaW5nIGhhcyBiZWVuIGVuY291bnRlcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NAp0cmFpdCBJc2xhbmQgewogICAgZm4gbG9zdCgpOwoKICAgIC8vLyBJJ20gbG9zdCEKfQpgYGAKCkEgbGl0dGxlIHJlbWluZGVyOiBhIGRvYyBjb21tZW50IGhhcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoZSBpdGVtIGl0J3Mgc3VwcG9zZWQKdG8gZG9jdW1lbnQuIFNvIGlmIHlvdSB3YW50IHRvIGRvY3VtZW50IHRoZSBgSXNsYW5kYCB0cmFpdCwgeW91IG5lZWQgdG8gcHV0IGEKZG9jIGNvbW1lbnQgYmVmb3JlIGl0LCBub3QgaW5zaWRlIGl0LiBTYW1lIGdvZXMgZm9yIHRoZSBgbG9zdGAgbWV0aG9kOiB0aGUgZG9jCmNvbW1lbnQgbmVlZHMgdG8gYmUgYmVmb3JlIGl0OgoKYGBgCi8vLyBJJ20gVEhFIGlzbGFuZCEKdHJhaXQgSXNsYW5kIHsKICAgIC8vLyBJJ20gbG9zdCEKICAgIGZuIGxvc3QoKTsKfQpgYGAKRTA1ODVBIGRvY3VtZW50YXRpb24gY29tbWVudCB0aGF0IGRvZXNuJ3QgZG9jdW1lbnQgYW55dGhpbmcgd2FzIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NQpmbiBtYWluKCkgewogICAgLy8gVGhlIGZvbGxvd2luZyBkb2MgY29tbWVudCB3aWxsIGZhaWw6CiAgICAvLy8gVGhpcyBpcyBhIHVzZWxlc3MgZG9jIGNvbW1lbnQhCn0KYGBgCgpEb2N1bWVudGF0aW9uIGNvbW1lbnRzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgaXRlbXMsIGluY2x1ZGluZyBmdW5jdGlvbnMsCnR5cGVzLCBtb2R1bGVzLCBldGMuIEV4YW1wbGVzOgoKYGBgCi8vLyBJJ20gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyBzdHJ1Y3Q6CnN0cnVjdCBGb287CgovLy8gSSdtIGRvY3VtZW50aW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CmZuIGZvbygpIHt9CmBgYApFMDU4NkFuIGluY2x1c2l2ZSByYW5nZSB3YXMgdXNlZCB3aXRoIG5vIGVuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODYKZm4gbWFpbigpIHsKICAgIGxldCB0bXAgPSB2ZWMhWzAsIDEsIDIsIDMsIDQsIDQsIDMsIDMsIDIsIDFdOwogICAgbGV0IHggPSAmdG1wWzEuLj1dOyAvLyBlcnJvcjogaW5jbHVzaXZlIHJhbmdlIHdhcyB1c2VkIHdpdGggbm8gZW5kCn0KYGBgCgpBbiBpbmNsdXNpdmUgcmFuZ2UgbmVlZHMgYW4gZW5kIGluIG9yZGVyIHRvICppbmNsdWRlKiBpdC4gSWYgeW91IGp1c3QgbmVlZCBhCnN0YXJ0IGFuZCBubyBlbmQsIHVzZSBhIG5vbi1pbmNsdXNpdmUgcmFuZ2UgKHdpdGggYC4uYCk6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCB0bXAgPSB2ZWMhWzAsIDEsIDIsIDMsIDQsIDQsIDMsIDMsIDIsIDFdOwogICAgbGV0IHggPSAmdG1wWzEuLl07IC8vIG9rIQp9CmBgYAoKT3IgcHV0IGFuIGVuZCB0byB5b3VyIGluY2x1c2l2ZSByYW5nZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uPTNdOyAvLyBvayEKfQpgYGAKRTA1ODdBIHR5cGUgaGFzIGJvdGggYHBhY2tlZGAgYW5kIGBhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg3CiNbcmVwcihwYWNrZWQsIGFsaWduKDgpKV0gLy8gZXJyb3IhCnN0cnVjdCBVbWJyZWxsYShpMzIpOwpgYGAKCllvdSBjYW5ub3QgdXNlIGBwYWNrZWRgIGFuZCBgYWxpZ25gIGhpbnRzIG9uIGEgc2FtZSB0eXBlLiBJZiB5b3Ugd2FudCB0byBwYWNrIGEKdHlwZSB0byBhIGdpdmVuIHNpemUsIHlvdSBzaG91bGQgcHJvdmlkZSBhIHNpemUgdG8gcGFja2VkOgoKYGBgCiNbcmVwcihwYWNrZWQpXSAvLyBvayEKc3RydWN0IFVtYnJlbGxhKGkzMik7CmBgYApFMDU4OEEgdHlwZSB3aXRoIGBwYWNrZWRgIHJlcHJlc2VudGF0aW9uIGhpbnQgaGFzIGEgZmllbGQgd2l0aCBgYWxpZ25gCnJlcHJlc2VudGF0aW9uIGhpbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg4CiNbcmVwcihhbGlnbigxNikpXQpzdHJ1Y3QgQWxpZ25lZChpMzIpOwoKI1tyZXByKHBhY2tlZCldIC8vIGVycm9yIQpzdHJ1Y3QgUGFja2VkKEFsaWduZWQpOwpgYGAKCkp1c3QgbGlrZSB5b3UgY2Fubm90IGhhdmUgYm90aCBgYWxpZ25gIGFuZCBgcGFja2VkYCByZXByZXNlbnRhdGlvbiBoaW50cyBvbiBhCnNhbWUgdHlwZSwgYSBgcGFja2VkYCB0eXBlIGNhbm5vdCBjb250YWluIGFub3RoZXIgdHlwZSB3aXRoIHRoZSBgYWxpZ25gCnJlcHJlc2VudGF0aW9uIGhpbnQuIEhvd2V2ZXIsIHlvdSBjYW4gZG8gdGhlIG9wcG9zaXRlOgoKYGBgCiNbcmVwcihwYWNrZWQpXQpzdHJ1Y3QgUGFja2VkKGkzMik7CgojW3JlcHIoYWxpZ24oMTYpKV0gLy8gb2shCnN0cnVjdCBBbGlnbmVkKFBhY2tlZCk7CmBgYApFMDU4OVRoZSB2YWx1ZSBvZiBgTmAgdGhhdCB3YXMgc3BlY2lmaWVkIGZvciBgcmVwcihhbGlnbihOKSlgIHdhcyBub3QgYSBwb3dlcgpvZiB0d28sIG9yIHdhcyBncmVhdGVyIHRoYW4gMl4yOS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODkKI1tyZXByKGFsaWduKDE1KSldIC8vIGVycm9yOiBpbnZhbGlkIGByZXByKGFsaWduKWAgYXR0cmlidXRlOiBub3QgYSBwb3dlciBvZiB0d28KZW51bSBGb28gewogICAgQmFyKHU2NCksCn0KYGBgCkUwNTkwYGJyZWFrYCBvciBgY29udGludWVgIGtleXdvcmRzIHdlcmUgdXNlZCBpbiBhIGNvbmRpdGlvbiBvZiBhIGB3aGlsZWAgbG9vcAp3aXRob3V0IGEgbGFiZWwuCgpFcnJvbmVvdXMgY29kZSBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkwCndoaWxlIGJyZWFrIHt9CmBgYAoKYGJyZWFrYCBvciBgY29udGludWVgIG11c3QgaW5jbHVkZSBhIGxhYmVsIHdoZW4gdXNlZCBpbiB0aGUgY29uZGl0aW9uIG9mIGEKYHdoaWxlYCBsb29wLgoKVG8gZml4IHRoaXMsIGFkZCBhIGxhYmVsIHNwZWNpZnlpbmcgd2hpY2ggbG9vcCBpcyBiZWluZyBicm9rZW4gb3V0IG9mOgoKYGBgCidmb286IHdoaWxlIGJyZWFrICdmb28ge30KYGBgCkUwNTkxUGVyIFtSRkMgNDAxXVtyZmM0MDFdLCBpZiB5b3UgaGF2ZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGBmb29gOgoKYGBgCnN0cnVjdCBTOwoKLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGV4cGxhbmF0aW9uLCBhbGwgb2YgdGhlc2UKLy8gZGlmZmVyZW50IGtpbmRzIG9mIGBmbmAgZGVjbGFyYXRpb25zIGFyZSBlcXVpdmFsZW50OgoKZm4gZm9vKHg6IFMpIHsgLyogLi4uICovIH0KIyAjW2NmZyhmb3JfZGVtb25zdHJhdGlvbl9vbmx5KV0KZXh0ZXJuICJDIiB7CiAgICBmbiBmb28oeDogUyk7Cn0KIyAjW2NmZyhmb3JfZGVtb25zdHJhdGlvbl9vbmx5KV0KaW1wbCBTIHsKICAgIGZuIGZvbyhzZWxmKSB7IC8qIC4uLiAqLyB9Cn0KYGBgCgp0aGUgdHlwZSBvZiBgZm9vYCBpcyAqKm5vdCoqIGBmbihTKWAsIGFzIG9uZSBtaWdodCBleHBlY3QuClJhdGhlciwgaXQgaXMgYSB1bmlxdWUsIHplcm8tc2l6ZWQgbWFya2VyIHR5cGUgd3JpdHRlbiBoZXJlIGFzIGB0eXBlb2YoZm9vKWAuCkhvd2V2ZXIsIGB0eXBlb2YoZm9vKWAgY2FuIGJlIF9jb2VyY2VkXyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYGZuKFMpYCwKc28geW91IHJhcmVseSBub3RpY2UgdGhpczoKCmBgYAojIHN0cnVjdCBTOwojIGZuIGZvbyhfOiBTKSB7fQpsZXQgeDogZm4oUykgPSBmb287IC8vIE9LLCBjb2VyY2VzCmBgYAoKVGhlIHJlYXNvbiB0aGF0IHRoaXMgbWF0dGVyIGlzIHRoYXQgdGhlIHR5cGUgYGZuKFMpYCBpcyBub3Qgc3BlY2lmaWMgdG8KYW55IHBhcnRpY3VsYXIgZnVuY3Rpb246IGl0J3MgYSBmdW5jdGlvbiBfcG9pbnRlcl8uIFNvIGNhbGxpbmcgYHgoKWAgcmVzdWx0cwppbiBhIHZpcnR1YWwgY2FsbCwgd2hlcmVhcyBgZm9vKClgIGlzIHN0YXRpY2FsbHkgZGlzcGF0Y2hlZCwgYmVjYXVzZSB0aGUgdHlwZQpvZiBgZm9vYCB0ZWxscyB1cyBwcmVjaXNlbHkgd2hhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuCgpBcyBub3RlZCBhYm92ZSwgY29lcmNpb25zIG1lYW4gdGhhdCBtb3N0IGNvZGUgZG9lc24ndCBoYXZlIHRvIGJlCmNvbmNlcm5lZCB3aXRoIHRoaXMgZGlzdGluY3Rpb24uIEhvd2V2ZXIsIHlvdSBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZQp3aGVuIHVzaW5nICoqdHJhbnNtdXRlKiogdG8gY29udmVydCBhIGZuIGl0ZW0gaW50byBhIGZuIHBvaW50ZXIuCgpUaGlzIGlzIHNvbWV0aW1lcyBkb25lIGFzIHBhcnQgb2YgYW4gRkZJOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkxCmV4dGVybiAiQyIgZm4gZm9vKHVzZXJkYXRhOiBCb3g8aTMyPikgewogICAgLyogLi4uICovCn0KCiMgZm4gY2FsbGJhY2soXzogZXh0ZXJuICJDIiBmbigqbXV0IGkzMikpIHt9CiMgdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CnVuc2FmZSB7CiAgICBsZXQgZjogZXh0ZXJuICJDIiBmbigqbXV0IGkzMikgPSB0cmFuc211dGUoZm9vKTsKICAgIGNhbGxiYWNrKGYpOwp9CmBgYAoKSGVyZSwgdHJhbnNtdXRlIGlzIGJlaW5nIHVzZWQgdG8gY29udmVydCB0aGUgdHlwZXMgb2YgdGhlIGZuIGFyZ3VtZW50cy4KVGhpcyBwYXR0ZXJuIGlzIGluY29ycmVjdCBiZWNhdXNlLCBiZWNhdXNlIHRoZSB0eXBlIG9mIGBmb29gIGlzIGEgZnVuY3Rpb24KKippdGVtKiogKGB0eXBlb2YoZm9vKWApLCB3aGljaCBpcyB6ZXJvLXNpemVkLCBhbmQgdGhlIHRhcmdldCB0eXBlIChgZm4oKWApCmlzIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggaXMgbm90IHplcm8tc2l6ZWQuClRoaXMgcGF0dGVybiBzaG91bGQgYmUgcmV3cml0dGVuLiBUaGVyZSBhcmUgYSBmZXcgcG9zc2libGUgd2F5cyB0byBkbyB0aGlzOgoKLSBjaGFuZ2UgdGhlIG9yaWdpbmFsIGZuIGRlY2xhcmF0aW9uIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBzaWduYXR1cmUsCiAgYW5kIGRvIHRoZSBjYXN0IGluIHRoZSBmbiBib2R5ICh0aGUgcHJlZmVycmVkIG9wdGlvbikKLSBjYXN0IHRoZSBmbiBpdGVtIG9mIGEgZm4gcG9pbnRlciBiZWZvcmUgY2FsbGluZyB0cmFuc211dGUsIGFzIHNob3duIGhlcmU6CgogICAgYGBgCiAgICAjIGV4dGVybiAiQyIgZm4gZm9vKF86IEJveDxpMzI+KSB7fQogICAgIyB1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKICAgICMgdW5zYWZlIHsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28gYXMgZXh0ZXJuICJDIiBmbihfKSk7CiAgICBsZXQgZjogZXh0ZXJuICJDIiBmbigqbXV0IGkzMikgPSB0cmFuc211dGUoZm9vIGFzIHVzaXplKTsgLy8gd29ya3MgdG9vCiAgICAjIH0KICAgIGBgYAoKVGhlIHNhbWUgYXBwbGllcyB0byB0cmFuc211dGVzIHRvIGAqbXV0IGZuKClgLCB3aGljaCB3ZXJlIG9ic2VydmVkIGluIHByYWN0aWNlLgpOb3RlIHRob3VnaCB0aGF0IHVzZSBvZiB0aGlzIHR5cGUgaXMgZ2VuZXJhbGx5IGluY29ycmVjdC4KVGhlIGludGVudGlvbiBpcyB0eXBpY2FsbHkgdG8gZGVzY3JpYmUgYSBmdW5jdGlvbiBwb2ludGVyLCBidXQganVzdCBgZm4oKWAKYWxvbmUgc3VmZmljZXMgZm9yIHRoYXQuIGAqbXV0IGZuKClgIGlzIGEgcG9pbnRlciB0byBhIGZuIHBvaW50ZXIuCihTaW5jZSB0aGVzZSB2YWx1ZXMgYXJlIHR5cGljYWxseSBqdXN0IHBhc3NlZCB0byBDIGNvZGUsIGhvd2V2ZXIsIHRoaXMgcmFyZWx5Cm1ha2VzIGEgZGlmZmVyZW5jZSBpbiBwcmFjdGljZS4pCgpbcmZjNDAxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDQwMS1jb2VyY2lvbnMubWQKRTA1OTJUaGlzIGVycm9yIG9jY3VycyB3aGVuIHlvdSBkZWZpbmVkIG1ldGhvZHMgb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aCBzYW1lCm5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkyCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBwcmV2aW91cyBkZWZpbml0aW9uIGhlcmUKfQoKaW1wbCBGb28gewogICAgZm4gYmFyKCkge30gLy8gZHVwbGljYXRlIGRlZmluaXRpb24gaGVyZQp9CmBgYAoKQSBzaW1pbGFyIGVycm9yIGlzIEUwMjAxLiBUaGUgZGlmZmVyZW5jZSBpcyB3aGV0aGVyIHRoZXJlIGlzIG9uZSBkZWNsYXJhdGlvbgpibG9jayBvciBub3QuIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBtdXN0IGdpdmUgZWFjaCBgZm5gIGEgdW5pcXVlIG5hbWUuCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigpIHt9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGJheigpIHt9IC8vIGRlZmluZSB3aXRoIGRpZmZlcmVudCBuYW1lCn0KYGBgCkUwNTkzWW91IHRyaWVkIHRvIHN1cHBseSBhbiBgRm5gLWJhc2VkIHR5cGUgd2l0aCBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwp0aGFuIHdoYXQgd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5MwpmbiBmb288RjogRm4oKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gW0UwNTkzXSBjbG9zdXJlIHRha2VzIDEgYXJndW1lbnQgYnV0IDAgYXJndW1lbnRzIGFyZSByZXF1aXJlZAogICAgZm9vKHx5fCB7IH0pOwp9CmBgYAoKWW91IGhhdmUgdG8gcHJvdmlkZSB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzIGFzIGV4cGVjdGVkIGJ5IHRoZSBgRm5gLWJhc2VkCnR5cGUuIFNvIHRvIGZpeCB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UgbmVlZCB0byByZW1vdmUgdGhlIGB5YCBhcmd1bWVudDoKCmBgYApmbiBmb288RjogRm4oKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgZm9vKHx8IHsgfSk7IC8vIG9rIQp9CmBgYApFMDU5NEEgbm9uLW11dGFibGUgdmFsdWUgd2FzIGFzc2lnbmVkIGEgdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0CnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgc3MgPSBTb2xhclN5c3RlbSB7IGVhcnRoOiAzIH07CnNzLmVhcnRoID0gMjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGRlY2xhcmUgYHNzYCBhcyBtdXRhYmxlIGJ5IHVzaW5nIHRoZSBgbXV0YCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgbXV0IHNzID0gU29sYXJTeXN0ZW0geyBlYXJ0aDogMyB9OyAvLyBkZWNsYXJpbmcgYHNzYCBhcyBtdXRhYmxlCnNzLmVhcnRoID0gMjsgLy8gb2shCmBgYApFMDU5NSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNsb3N1cmVzIGNhbm5vdCBtdXRhdGUgaW1tdXRhYmxlIGNhcHR1cmVkIHZhcmlhYmxlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbGV0IHggPSAzOyAvLyBlcnJvcjogY2xvc3VyZSBjYW5ub3QgYXNzaWduIHRvIGltbXV0YWJsZSBsb2NhbCB2YXJpYWJsZSBgeGAKbGV0IG11dCBjID0gfHwgeyB4ICs9IDEgfTsKYGBgCgpNYWtlIHRoZSB2YXJpYWJsZSBiaW5kaW5nIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMzsgLy8gb2shCmxldCBtdXQgYyA9IHx8IHsgeCArPSAxIH07CmBgYApFMDU5NlRoaXMgZXJyb3Igb2NjdXJzIGJlY2F1c2UgeW91IHRyaWVkIHRvIG11dGFibHkgYm9ycm93IGEgbm9uLW11dGFibGUgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk2CmxldCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IG11dGFibHkKYGBgCgpJbiBoZXJlLCBgeGAgaXNuJ3QgbXV0YWJsZSwgc28gd2hlbiB3ZSB0cnkgdG8gbXV0YWJseSBib3Jyb3cgaXQgaW4gYHlgLCBpdApmYWlscy4gVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgYHhgIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIG9rIQpgYGAKRTA1OTdUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgdmFsdWUgd2FzIGRyb3BwZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NwpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBPcHRpb248JidhIHUzMj4sCn0KCmxldCBtdXQgeCA9IEZvbyB7IHg6IE5vbmUgfTsKewogICAgbGV0IHkgPSAwOwogICAgeC54ID0gU29tZSgmeSk7IC8vIGVycm9yOiBgeWAgZG9lcyBub3QgbGl2ZSBsb25nIGVub3VnaAp9CnByaW50bG4hKCJ7Oj99IiwgeC54KTsKYGBgCgpIZXJlLCBgeWAgaXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbm5lciBzY29wZSwgYnV0IGl0IGlzIGJvcnJvd2VkIGJ5CmB4YCB1bnRpbCB0aGUgYHByaW50bG5gLiBUbyBmaXggdGhlIHByZXZpb3VzIGV4YW1wbGUsIGp1c3QgcmVtb3ZlIHRoZSBzY29wZQpzbyB0aGF0IGB5YCBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIHRoZSBwcmludGxuCgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogT3B0aW9uPCYnYSB1MzI+LAp9CgpsZXQgbXV0IHggPSBGb28geyB4OiBOb25lIH07CgpsZXQgeSA9IDA7CngueCA9IFNvbWUoJnkpOwoKcHJpbnRsbiEoIns6P30iLCB4LngpOwpgYGAKRTA1OTlUaGlzIGVycm9yIG9jY3VycyB3aGVuIGEgbWV0aG9kIGlzIHVzZWQgb24gYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IGl0OgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5OQpzdHJ1Y3QgTW91dGg7CgpsZXQgeCA9IE1vdXRoOwp4LmNob2NvbGF0ZSgpOyAvLyBlcnJvcjogbm8gbWV0aG9kIG5hbWVkIGBjaG9jb2xhdGVgIGZvdW5kIGZvciB0eXBlIGBNb3V0aGAKICAgICAgICAgICAgICAgLy8gICAgICAgIGluIHRoZSBjdXJyZW50IHNjb3BlCmBgYAoKSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGBjaG9jb2xhdGVgIG1ldGhvZCB0byBmaXggdGhlIGVycm9yOgoKYGBgCnN0cnVjdCBNb3V0aDsKCmltcGwgTW91dGggewogICAgZm4gY2hvY29sYXRlKCZzZWxmKSB7IC8vIFdlIGltcGxlbWVudCB0aGUgYGNob2NvbGF0ZWAgbWV0aG9kIGhlcmUuCiAgICAgICAgcHJpbnRsbiEoIkhtbW0hIEkgbG92ZSBjaG9jb2xhdGUhIik7CiAgICB9Cn0KCmxldCB4ID0gTW91dGg7CnguY2hvY29sYXRlKCk7IC8vIG9rIQpgYGAKRTA2MDBBbiB1bmFyeSBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjAwCmVudW0gUXVlc3Rpb24gewogICAgWWVzLAogICAgTm8sCn0KCiFRdWVzdGlvbjo6WWVzOyAvLyBlcnJvcjogY2Fubm90IGFwcGx5IHVuYXJ5IG9wZXJhdG9yIGAhYCB0byB0eXBlIGBRdWVzdGlvbmAKYGBgCgpJbiB0aGlzIGNhc2UsIGBRdWVzdGlvbmAgd291bGQgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGBzdGQ6Om9wczo6Tm90YCB0cmFpdCBpbgpvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBgIWAgb24gaXQuIExldCdzIGltcGxlbWVudCBpdDoKCmBgYAp1c2Ugc3RkOjpvcHM6Ok5vdDsKCmVudW0gUXVlc3Rpb24gewogICAgWWVzLAogICAgTm8sCn0KCi8vIFdlIGltcGxlbWVudCB0aGUgYE5vdGAgdHJhaXQgb24gdGhlIGVudW0uCmltcGwgTm90IGZvciBRdWVzdGlvbiB7CiAgICB0eXBlIE91dHB1dCA9IGJvb2w7CgogICAgZm4gbm90KHNlbGYpIC0+IGJvb2wgewogICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICBRdWVzdGlvbjo6WWVzID0+IGZhbHNlLCAvLyBJZiB0aGUgYEFuc3dlcmAgaXMgYFllc2AsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZS4KICAgICAgICAgICAgUXVlc3Rpb246Ok5vID0+IHRydWUsIC8vIEFuZCBoZXJlIHdlIGRvIHRoZSBvcHBvc2l0ZS4KICAgICAgICB9CiAgICB9Cn0KCmFzc2VydF9lcSEoIVF1ZXN0aW9uOjpZZXMsIGZhbHNlKTsKYXNzZXJ0X2VxISghUXVlc3Rpb246Ok5vLCB0cnVlKTsKYGBgCkUwNjAxTm8gYG1haW5gIGZ1bmN0aW9uIHdhcyBmb3VuZCBpbiBhIGJpbmFyeSBjcmF0ZS4KClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgYSBgbWFpbmAgZnVuY3Rpb246CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIFlvdXIgcHJvZ3JhbSB3aWxsIHN0YXJ0IGhlcmUuCiAgICBwcmludGxuISgiSGVsbG8gd29ybGQhIik7Cn0KYGBgCgpJZiB5b3UgZG9uJ3Qga25vdyB0aGUgYmFzaWNzIG9mIFJ1c3QsIHlvdSBjYW4gbG9vayBhdCB0aGUKW1J1c3QgQm9va11bcnVzdC1ib29rXSB0byBnZXQgc3RhcnRlZC4KCltydXN0LWJvb2tdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svCkUwNjAyQW4gdW5rbm93biBvciBpbnZhbGlkIGxpbnQgd2FzIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBzaApydXN0YyAtRCBib2d1cyBydXN0X2ZpbGUucnMKYGBgCgpNYXliZSB5b3UganVzdCBtaXNzcGVsbGVkIHRoZSBsaW50IG5hbWUgb3IgdGhlIGxpbnQgZG9lc24ndCBleGlzdCBhbnltb3JlLgpFaXRoZXIgd2F5LCB0cnkgdG8gdXBkYXRlL3JlbW92ZSBpdCBpbiBvcmRlciB0byBmaXggdGhlIGVycm9yLgpFMDYwM0EgcHJpdmF0ZSBpdGVtIHdhcyB1c2VkIG91dHNpZGUgaXRzIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwMwptb2QgU29tZU1vZHVsZSB7CiAgICBjb25zdCBQUklWQVRFOiB1MzIgPSAweF9hX2JhZF8xZGVhX3UzMjsgLy8gVGhpcyBjb25zdCBpcyBwcml2YXRlLCBzbyB3ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHVzZSBpdCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBTb21lTW9kdWxlYCBtb2R1bGUuCn0KCnByaW50bG4hKCJjb25zdCB2YWx1ZToge30iLCBTb21lTW9kdWxlOjpQUklWQVRFKTsgLy8gZXJyb3I6IGNvbnN0YW50IGBQUklWQVRFYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpcyBwcml2YXRlCmBgYAoKSW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgdGhlIGl0ZW0gcHVibGljIGJ5IHVzaW5nIHRoZSBgcHViYAprZXl3b3JkLiBFeGFtcGxlOgoKYGBgCm1vZCBTb21lTW9kdWxlIHsKICAgIHB1YiBjb25zdCBQUklWQVRFOiB1MzIgPSAweF9hX2JhZF8xZGVhX3UzMjsgLy8gV2Ugc2V0IGl0IHB1YmxpYyBieSB1c2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHB1YmAga2V5d29yZC4KfQoKcHJpbnRsbiEoImNvbnN0IHZhbHVlOiB7fSIsIFNvbWVNb2R1bGU6OlBSSVZBVEUpOyAvLyBvayEKYGBgCkUwNjA0QSBjYXN0IHRvIGBjaGFyYCB3YXMgYXR0ZW1wdGVkIG9uIGEgdHlwZSBvdGhlciB0aGFuIGB1OGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA0CjB1MzIgYXMgY2hhcjsgLy8gZXJyb3I6IG9ubHkgYHU4YCBjYW4gYmUgY2FzdCBhcyBgY2hhcmAsIG5vdCBgdTMyYApgYGAKCkFzIHRoZSBlcnJvciBtZXNzYWdlIGluZGljYXRlcywgb25seSBgdThgIGNhbiBiZSBjYXN0IGludG8gYGNoYXJgLiBFeGFtcGxlOgoKYGBgCmxldCBjID0gODZ1OCBhcyBjaGFyOyAvLyBvayEKYXNzZXJ0X2VxIShjLCAnVicpOwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKRTA2MDVBbiBpbnZhbGlkIGNhc3Qgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA1CmxldCB4ID0gMHU4Owp4IGFzIFZlYzx1OD47IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGB1OGAgYXMgYHN0ZDo6dmVjOjpWZWM8dTg+YAoKLy8gQW5vdGhlciBleGFtcGxlCgpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOyAvLyBTbyBoZXJlLCBgdmAgaXMgYSBgKmNvbnN0IHU4YC4KdiBhcyAmdTg7IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGAqY29uc3QgdThgIGFzIGAmdThgCmBgYAoKT25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoIG90aGVyLiBFeGFtcGxlczoKCmBgYApsZXQgeCA9IDB1ODsKeCBhcyB1MzI7IC8vIG9rIQoKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsKdiBhcyAqY29uc3QgaTg7IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKRTA2MDZBbiBpbmNvbXBhdGlibGUgY2FzdCB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNgpsZXQgeCA9ICYwdTg7IC8vIEhlcmUsIGB4YCBpcyBhIGAmdThgLgpsZXQgeTogdTMyID0geCBhcyB1MzI7IC8vIGVycm9yOiBjYXN0aW5nIGAmdThgIGFzIGB1MzJgIGlzIGludmFsaWQKYGBgCgpXaGVuIGNhc3RpbmcsIGtlZXAgaW4gbWluZCB0aGF0IG9ubHkgcHJpbWl0aXZlIHR5cGVzIGNhbiBiZSBjYXN0IGludG8gZWFjaApvdGhlci4gRXhhbXBsZToKCmBgYApsZXQgeCA9ICYwdTg7CmxldCB5OiB1MzIgPSAqeCBhcyB1MzI7IC8vIFdlIGRlcmVmZXJlbmNlIGl0IGZpcnN0IGFuZCB0aGVuIGNhc3QgaXQuCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwpFMDYwN0EgY2FzdCBiZXR3ZWVuIGEgdGhpbiBhbmQgYSBmYXQgcG9pbnRlciB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNwpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOwp2IGFzICpjb25zdCBbdThdOwpgYGAKCkZpcnN0OiB3aGF0IGFyZSB0aGluIGFuZCBmYXQgcG9pbnRlcnM/CgpUaGluIHBvaW50ZXJzIGFyZSAic2ltcGxlIiBwb2ludGVyczogdGhleSBhcmUgcHVyZWx5IGEgcmVmZXJlbmNlIHRvIGEgbWVtb3J5CmFkZHJlc3MuCgpGYXQgcG9pbnRlcnMgYXJlIHBvaW50ZXJzIHJlZmVyZW5jaW5nIER5bmFtaWNhbGx5IFNpemVkIFR5cGVzIChhbHNvIGNhbGxlZApEU1RzKS4gRFNUcyBkb24ndCBoYXZlIGEgc3RhdGljYWxseSBrbm93biBzaXplLCB0aGVyZWZvcmUgdGhleSBjYW4gb25seSBleGlzdApiZWhpbmQgc29tZSBraW5kIG9mIHBvaW50ZXIgdGhhdCBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwKc2xpY2VzIGFuZCB0cmFpdCBvYmplY3RzIGFyZSBEU1RzLiBJbiB0aGUgY2FzZSBvZiBzbGljZXMsIHRoZSBhZGRpdGlvbmFsCmluZm9ybWF0aW9uIHRoZSBmYXQgcG9pbnRlciBob2xkcyBpcyB0aGVpciBzaXplLgoKVG8gZml4IHRoaXMgZXJyb3IsIGRvbid0IHRyeSB0byBjYXN0IGRpcmVjdGx5IGJldHdlZW4gdGhpbiBhbmQgZmF0IHBvaW50ZXJzLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdHlwZSBjYXN0cywgdGFrZSBhIGxvb2sgYXQgdGhlIHNlY3Rpb24gb2YgdGhlCltUaGUgUnVzdCBSZWZlcmVuY2VdWzFdIG9uIHR5cGUgY2FzdCBleHByZXNzaW9ucy4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwpFMDYwOEFuIGF0dGVtcHQgdG8gdXNlIGluZGV4IG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQgd2FzIHBlcmZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDgKMHU4WzJdOyAvLyBlcnJvcjogY2Fubm90IGluZGV4IGludG8gYSB2YWx1ZSBvZiB0eXBlIGB1OGAKYGBgCgpUbyBiZSBhYmxlIHRvIGluZGV4IGludG8gYSB0eXBlIGl0IG5lZWRzIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQuIEV4YW1wbGU6CgpgYGAKbGV0IHY6IFZlYzx1OD4gPSB2ZWMhWzAsIDEsIDIsIDNdOwoKLy8gVGhlIGBWZWNgIHR5cGUgaW1wbGVtZW50cyB0aGUgYEluZGV4YCB0cmFpdCBzbyB5b3UgY2FuIGRvOgpwcmludGxuISgie30iLCB2WzJdKTsKYGBgCkUwNjA5QXR0ZW1wdGVkIHRvIGFjY2VzcyBhIG5vbi1leGlzdGVudCBmaWVsZCBpbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDkKc3RydWN0IFN0cnVjdFdpdGhGaWVsZHMgewogICAgeDogdTMyLAp9CgpsZXQgcyA9IFN0cnVjdFdpdGhGaWVsZHMgeyB4OiAwIH07CnByaW50bG4hKCJ7fSIsIHMuZm9vKTsgLy8gZXJyb3I6IG5vIGZpZWxkIGBmb29gIG9uIHR5cGUgYFN0cnVjdFdpdGhGaWVsZHNgCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGNoZWNrIHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgZmllbGQncyBuYW1lIG9yIHRoYXQgdGhlCmZpZWxkIGFjdHVhbGx5IGV4aXN0cy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgU3RydWN0V2l0aEZpZWxkcyB7CiAgICB4OiB1MzIsCn0KCmxldCBzID0gU3RydWN0V2l0aEZpZWxkcyB7IHg6IDAgfTsKcHJpbnRsbiEoInt9Iiwgcy54KTsgLy8gb2shCmBgYApFMDYxMEF0dGVtcHRlZCB0byBhY2Nlc3MgYSBmaWVsZCBvbiBhIHByaW1pdGl2ZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYxMApsZXQgeDogdTMyID0gMDsKcHJpbnRsbiEoInt9IiwgeC5mb28pOyAvLyBlcnJvcjogYHtpbnRlZ2VyfWAgaXMgYSBwcmltaXRpdmUgdHlwZSwgdGhlcmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGRvZXNuJ3QgaGF2ZSBmaWVsZHMKYGBgCgpQcmltaXRpdmUgdHlwZXMgYXJlIHRoZSBtb3N0IGJhc2ljIHR5cGVzIGF2YWlsYWJsZSBpbiBSdXN0IGFuZCBkb24ndCBoYXZlCmZpZWxkcy4gVG8gYWNjZXNzIGRhdGEgdmlhIG5hbWVkIGZpZWxkcywgc3RydWN0IHR5cGVzIGFyZSB1c2VkLiBFeGFtcGxlOgoKYGBgCi8vIFdlIGRlY2xhcmUgc3RydWN0IGNhbGxlZCBgRm9vYCBjb250YWluaW5nIHR3byBmaWVsZHM6CnN0cnVjdCBGb28gewogICAgeDogdTMyLAogICAgeTogaTY0LAp9CgovLyBXZSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3Q6CmxldCB2YXJpYWJsZSA9IEZvbyB7IHg6IDAsIHk6IC0xMiB9OwovLyBBbmQgd2UgY2FuIG5vdyBhY2Nlc3MgaXRzIGZpZWxkczoKcHJpbnRsbiEoIng6IHt9LCB5OiB7fSIsIHZhcmlhYmxlLngsIHZhcmlhYmxlLnkpOwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFtwcmltaXRpdmVzXSBhbmQgW3N0cnVjdHNdLCB0YWtlIGEgbG9vayBhdCB0aGUgQm9vay4KCltwcmltaXRpdmVzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDMtMDItZGF0YS10eXBlcy5odG1sCltzdHJ1Y3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDUtMDAtc3RydWN0cy5odG1sCkUwNjE0QXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdmFyaWFibGUgd2hpY2ggY2Fubm90IGJlIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTQKbGV0IHkgPSAwdTMyOwoqeTsgLy8gZXJyb3I6IHR5cGUgYHUzMmAgY2Fubm90IGJlIGRlcmVmZXJlbmNlZApgYGAKCk9ubHkgdHlwZXMgaW1wbGVtZW50aW5nIGBzdGQ6Om9wczo6RGVyZWZgIGNhbiBiZSBkZXJlZmVyZW5jZWQgKHN1Y2ggYXMgYCZUYCkuCkV4YW1wbGU6CgpgYGAKbGV0IHkgPSAwdTMyOwpsZXQgeCA9ICZ5OwovLyBTbyBoZXJlLCBgeGAgaXMgYSBgJnUzMmAsIHNvIHdlIGNhbiBkZXJlZmVyZW5jZSBpdDoKKng7IC8vIG9rIQpgYGAKRTA2MTVBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWV0aG9kIGxpa2UgYSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTUKc3RydWN0IEZvbyB7CiAgICB4OiB1MzIsCn0KCmltcGwgRm9vIHsKICAgIGZuIG1ldGhvZCgmc2VsZikge30KfQoKbGV0IGYgPSBGb28geyB4OiAwIH07CmYubWV0aG9kOyAvLyBlcnJvcjogYXR0ZW1wdGVkIHRvIHRha2UgdmFsdWUgb2YgbWV0aG9kIGBtZXRob2RgIG9uIHR5cGUgYEZvb2AKYGBgCgpJZiB5b3Ugd2FudCB0byB1c2UgYSBtZXRob2QsIGFkZCBgKClgIGFmdGVyIGl0OgoKYGBgCiMgc3RydWN0IEZvbyB7IHg6IHUzMiB9CiMgaW1wbCBGb28geyBmbiBtZXRob2QoJnNlbGYpIHt9IH0KIyBsZXQgZiA9IEZvbyB7IHg6IDAgfTsKZi5tZXRob2QoKTsKYGBgCgpIb3dldmVyLCBpZiB5b3Ugd2FudGVkIHRvIGFjY2VzcyBhIGZpZWxkIG9mIGEgc3RydWN0IGNoZWNrIHRoYXQgdGhlIGZpZWxkIG5hbWUKaXMgc3BlbGxlZCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKIyBzdHJ1Y3QgRm9vIHsgeDogdTMyIH0KIyBpbXBsIEZvbyB7IGZuIG1ldGhvZCgmc2VsZikge30gfQojIGxldCBmID0gRm9vIHsgeDogMCB9OwpwcmludGxuISgie30iLCBmLngpOwpgYGAKRTA2MTZBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgcHJpdmF0ZSBmaWVsZCBvbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTYKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBlcnJvcjogZmllbGQgYHhgIG9mIHN0cnVjdCBgc29tZV9tb2R1bGU6OkZvb2AgaXMgcHJpdmF0ZQpgYGAKCklmIHlvdSB3YW50IHRvIGFjY2VzcyB0aGlzIGZpZWxkLCB5b3UgaGF2ZSB0d28gb3B0aW9uczoKCjEpIFNldCB0aGUgZmllbGQgcHVibGljOgoKYGBgCm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIHg6IHUzMiwgLy8gYHhgIGlzIG5vdyBwdWJsaWMuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBvayEKYGBgCgoyKSBBZGQgYSBnZXR0ZXIgZnVuY3Rpb246CgpgYGAKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBzdGlsbCBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQoKICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGdldHRlciBmdW5jdGlvbiBoZXJlOgogICAgICAgIHB1YiBmbiBnZXRfeCgmc2VsZikgLT4gJnUzMiB7ICZzZWxmLnggfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLmdldF94KCkpOyAvLyBvayEKYGBgCkUwNjE3QXR0ZW1wdGVkIHRvIHBhc3MgYW4gaW52YWxpZCB0eXBlIG9mIHZhcmlhYmxlIGludG8gYSB2YXJpYWRpYyBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTcKIyB1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CmV4dGVybiAiQyIgewogICAgZm4gcHJpbnRmKGZvcm1hdDogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKfQoKdW5zYWZlIHsKICAgIHByaW50ZigiJWZcblwwIi5hc19wdHIoKSBhcyBfLCAwZjMyKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgcGFzcyBhbiBgZjMyYCB0byB2YXJpYWRpYyBmdW5jdGlvbiwgY2FzdCB0byBgY19kb3VibGVgCn0KYGBgCgpDZXJ0YWluIFJ1c3QgdHlwZXMgbXVzdCBiZSBjYXN0IGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYSB2YXJpYWRpYyBmdW5jdGlvbiwKYmVjYXVzZSBvZiBhcmNhbmUgQUJJIHJ1bGVzIGRpY3RhdGVkIGJ5IHRoZSBDIHN0YW5kYXJkLiBUbyBmaXggdGhlIGVycm9yLApjYXN0IHRoZSB2YWx1ZSB0byB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGVycm9yIG1lc3NhZ2UgKHdoaWNoIHlvdSBtYXkgbmVlZAp0byBpbXBvcnQgZnJvbSBgc3RkOjpvczo6cmF3YCkuCgpJbiB0aGlzIGNhc2UsIGBjX2RvdWJsZWAgaGFzIHRoZSBzYW1lIHNpemUgYXMgYGY2NGAgc28gd2UgY2FuIHVzZSBpdCBkaXJlY3RseToKCmBgYG5vX3J1bgojIHVzZSBzdGQ6Om9zOjpyYXc6OntjX2NoYXIsIGNfaW50fTsKIyBleHRlcm4gIkMiIHsKIyAgICAgZm4gcHJpbnRmKGZvcm1hdDogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKIyB9Cgp1bnNhZmUgewogICAgcHJpbnRmKCIlZlxuXDAiLmFzX3B0cigpIGFzIF8sIDBmNjQpOyAvLyBvayEKfQpgYGAKRTA2MThBdHRlbXB0ZWQgdG8gY2FsbCBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBmdW5jdGlvbiBub3IgYSBtZXRob2QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDYxOAplbnVtIFggewogICAgRW50cnksCn0KClg6OkVudHJ5KCk7IC8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsCiAgICAgICAgICAgIC8vIGZvdW5kIGBYOjpFbnRyeWAKCi8vIE9yIGV2ZW4gc2ltcGxlcjoKbGV0IHggPSAwaTMyOwp4KCk7IC8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsIGZvdW5kIGBpMzJgCmBgYAoKT25seSBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgY2FuIGJlIGNhbGxlZCB1c2luZyBgKClgLiBFeGFtcGxlOgoKYGBgCi8vIFdlIGRlY2xhcmUgYSBmdW5jdGlvbjoKZm4gaV9hbV9hX2Z1bmN0aW9uKCkge30KCi8vIEFuZCB3ZSBjYWxsIGl0OgppX2FtX2FfZnVuY3Rpb24oKTsKYGBgCkUwNjE5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIHR5cGUtY2hlY2tlciBuZWVkZWQgdG8ga25vdyB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLCBidXQgdGhhdCB0eXBlIGhhZCBub3QKeWV0IGJlZW4gaW5mZXJyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmxldCBtdXQgeCA9IHZlYyFbXTsKbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICAvLyBIZXJlLCB0aGUgdHlwZSBvZiBgdmAgaXMgbm90ICh5ZXQpIGtub3duLCBzbyB3ZQogICAgICAgIC8vIGNhbm5vdCByZXNvbHZlIHRoaXMgbWV0aG9kIGNhbGw6CiAgICAgICAgdi50b191cHBlcmNhc2UoKTsgLy8gZXJyb3I6IHRoZSB0eXBlIG9mIHRoaXMgdmFsdWUgbXVzdCBiZSBrbm93biBpbgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzIGNvbnRleHQKICAgIH0KICAgIE5vbmUgPT4ge30KfQpgYGAKClR5cGUgaW5mZXJlbmNlIHR5cGljYWxseSBwcm9jZWVkcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uIHRvIHRoZSBib3R0b20sCmZpZ3VyaW5nIG91dCB0eXBlcyBhcyBpdCBnb2VzLiBJbiBzb21lIGNhc2VzIC0tIG5vdGFibHkgbWV0aG9kIGNhbGxzIGFuZApvdmVybG9hZGFibGUgb3BlcmF0b3JzIGxpa2UgYCpgIC0tIHRoZSB0eXBlIGNoZWNrZXIgbWF5IG5vdCBoYXZlIGVub3VnaAppbmZvcm1hdGlvbiAqeWV0KiB0byBtYWtlIHByb2dyZXNzLiBUaGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYgdGhlIHJlc3Qgb2YgdGhlCmZ1bmN0aW9uIHByb3ZpZGVzIGVub3VnaCBjb250ZXh0IChiZWNhdXNlIHRoZSB0eXBlLWNoZWNrZXIgaGFzbid0IGxvb2tlZCB0aGF0CmZhciBhaGVhZCB5ZXQpLiBJbiB0aGlzIGNhc2UsIHR5cGUgYW5ub3RhdGlvbnMgY2FuIGJlIHVzZWQgdG8gaGVscCBpdCBhbG9uZy4KClRvIGZpeCB0aGlzIGVycm9yLCBqdXN0IHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLiBFeGFtcGxlOgoKYGBgCmxldCBtdXQgeDogVmVjPFN0cmluZz4gPSB2ZWMhW107IC8vIFdlIHByZWNpc2UgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cy4KbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICB2LnRvX3VwcGVyY2FzZSgpOyAvLyBTaW5jZSBydXN0YyBub3cga25vd3MgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gdXNlIGB2YCdzIG1ldGhvZHMuCiAgICB9CiAgICBOb25lID0+IHt9Cn0KYGBgCkUwNjIwQSBjYXN0IHRvIGFuIHVuc2l6ZWQgdHlwZSB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMApsZXQgeCA9ICZbMV91c2l6ZSwgMl0gYXMgW3VzaXplXTsgLy8gZXJyb3I6IGNhc3QgdG8gdW5zaXplZCB0eXBlOiBgJlt1c2l6ZTsgMl1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYXMgYFt1c2l6ZV1gCmBgYAoKSW4gUnVzdCwgc29tZSB0eXBlcyBkb24ndCBoYXZlIGEga25vd24gc2l6ZSBhdCBjb21waWxlLXRpbWUuIEZvciBleGFtcGxlLCBpbiBhCnNsaWNlIHR5cGUgbGlrZSBgW3UzMl1gLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzIG5vdCBrbm93biBhdCBjb21waWxlLXRpbWUgYW5kCmhlbmNlIHRoZSBvdmVyYWxsIHNpemUgY2Fubm90IGJlIGNvbXB1dGVkLiBBcyBhIHJlc3VsdCwgc3VjaCB0eXBlcyBjYW4gb25seSBiZQptYW5pcHVsYXRlZCB0aHJvdWdoIGEgcmVmZXJlbmNlIChlLmcuLCBgJlRgIG9yIGAmbXV0IFRgKSBvciBvdGhlciBwb2ludGVyLXR5cGUKKGUuZy4sIGBCb3hgIG9yIGBSY2ApLiBUcnkgY2FzdGluZyB0byBhIHJlZmVyZW5jZSBpbnN0ZWFkOgoKYGBgCmxldCB4ID0gJlsxX3VzaXplLCAyXSBhcyAmW3VzaXplXTsgLy8gb2shCmBgYApFMDYyMVRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBsaWZldGltZXMgYXBwZWFyaW5nIGluIHRoZQpmdW5jdGlvbiBzaWduYXR1cmUgKGkuZS4sIHRoZSBwYXJhbWV0ZXIgdHlwZXMgYW5kIHRoZSByZXR1cm4gdHlwZSkgYW5kIHRoZQpkYXRhLWZsb3cgZm91bmQgaW4gdGhlIGZ1bmN0aW9uIGJvZHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIxCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJmkzMikgLT4gJidhIGkzMiB7IC8vIGVycm9yOiBleHBsaWNpdCBsaWZldGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmVxdWlyZWQgaW4gdGhlIHR5cGUgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGB5YAogICAgaWYgeCA+IHkgeyB4IH0gZWxzZSB7IHkgfQp9CmBgYAoKSW4gdGhlIGNvZGUgYWJvdmUsIHRoZSBmdW5jdGlvbiBpcyByZXR1cm5pbmcgZGF0YSBib3Jyb3dlZCBmcm9tIGVpdGhlciBgeGAgb3IKYHlgLCBidXQgdGhlIGAnYWAgYW5ub3RhdGlvbiBpbmRpY2F0ZXMgdGhhdCBpdCBpcyByZXR1cm5pbmcgZGF0YSBvbmx5IGZyb20gYHhgLgpUbyBmaXggdGhlIGVycm9yLCB0aGUgc2lnbmF0dXJlIGFuZCB0aGUgYm9keSBtdXN0IGJlIG1hZGUgdG8gbWF0Y2guIFR5cGljYWxseSwKdGhpcyBpcyBkb25lIGJ5IHVwZGF0aW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuIFNvLCBpbiB0aGlzIGNhc2UsIHdlIGNoYW5nZQp0aGUgdHlwZSBvZiBgeWAgdG8gYCYnYSBpMzJgLCBsaWtlIHNvOgoKYGBgCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJidhIGkzMikgLT4gJidhIGkzMiB7CiAgICBpZiB4ID4geSB7IHggfSBlbHNlIHsgeSB9Cn0KYGBgCgpOb3cgdGhlIHNpZ25hdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gZGF0YSBib3Jyb3dlZCBmcm9tIGVpdGhlciBgeGAgb3IKYHlgLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgY2hhbmdlIHRoZSBib2R5IHRvIG5vdCByZXR1cm4gZGF0YSBmcm9tIGB5YDoKCmBgYApmbiBmb288J2E+KHg6ICYnYSBpMzIsIHk6ICZpMzIpIC0+ICYnYSBpMzIgewogICAgeAp9CmBgYApFMDYyMkFuIGludHJpbnNpYyB3YXMgZGVjbGFyZWQgd2l0aG91dCBiZWluZyBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBwdWIgc3RhdGljIGJyZWFrcG9pbnQgOiBmbigpOyAvLyBlcnJvcjogaW50cmluc2ljIG11c3QgYmUgYSBmdW5jdGlvbgp9CgpmbiBtYWluKCkgeyB1bnNhZmUgeyBicmVha3BvaW50KCk7IH0gfQpgYGAKCkFuIGludHJpbnNpYyBpcyBhIGZ1bmN0aW9uIGF2YWlsYWJsZSBmb3IgdXNlIGluIGEgZ2l2ZW4gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UKd2hvc2UgaW1wbGVtZW50YXRpb24gaXMgaGFuZGxlZCBzcGVjaWFsbHkgYnkgdGhlIGNvbXBpbGVyLiBJbiBvcmRlciB0byBmaXggdGhpcwplcnJvciwganVzdCBkZWNsYXJlIGEgZnVuY3Rpb24uIEV4YW1wbGU6CgpgYGBub19ydW4KIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgcHViIGZuIGJyZWFrcG9pbnQoKTsgLy8gb2shCn0KCmZuIG1haW4oKSB7IHVuc2FmZSB7IGJyZWFrcG9pbnQoKTsgfSB9CmBgYApFMDYyM0EgbGlmZXRpbWUgZGlkbid0IG1hdGNoIHdoYXQgd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMwpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2EgaXNpemUsCn0KCmZuIGJhcjwnc2hvcnQsICdsb25nPihjOiBGb288J3Nob3J0PiwgbDogJidsb25nIGlzaXplKSB7CiAgICBsZXQgXzogRm9vPCdsb25nPiA9IGM7IC8vIGVycm9yIQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSB0cmllZCB0byBzZXQgYSB2YWx1ZSB3aXRoIGFuIGluY29tcGF0aWJsZSBsaWZldGltZSB0bwphbm90aGVyIG9uZSAoYCdsb25nYCBpcyB1bnJlbGF0ZWQgdG8gYCdzaG9ydGApLiBXZSBjYW4gc29sdmUgdGhpcyBpc3N1ZSBpbgp0d28gZGlmZmVyZW50IHdheXM6CgpFaXRoZXIgd2UgbWFrZSBgJ3Nob3J0YCBsaXZlIGF0IGxlYXN0IGFzIGxvbmcgYXMgYCdsb25nYDoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2EgaXNpemUsCn0KCi8vIHdlIHNldCAnc2hvcnQgdG8gbGl2ZSBhdCBsZWFzdCBhcyBsb25nIGFzICdsb25nCmZuIGJhcjwnc2hvcnQ6ICdsb25nLCAnbG9uZz4oYzogRm9vPCdzaG9ydD4sIGw6ICYnbG9uZyBpc2l6ZSkgewogICAgbGV0IF86IEZvbzwnbG9uZz4gPSBjOyAvLyBvayEKfQpgYGAKCk9yIHdlIHVzZSBvbmx5IG9uZSBsaWZldGltZToKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2EgaXNpemUsCn0KZm4gYmFyPCdzaG9ydD4oYzogRm9vPCdzaG9ydD4sIGw6ICYnc2hvcnQgaXNpemUpIHsKICAgIGxldCBfOiBGb288J3Nob3J0PiA9IGM7IC8vIG9rIQp9CmBgYApFMDYyNEEgcHJpdmF0ZSBpdGVtIHdhcyB1c2VkIG91dHNpZGUgb2YgaXRzIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNAptb2QgaW5uZXIgewogICAgcHViIHN0cnVjdCBGb287CgogICAgaW1wbCBGb28gewogICAgICAgIGZuIG1ldGhvZCgmc2VsZikge30KICAgIH0KfQoKbGV0IGZvbyA9IGlubmVyOjpGb287CmZvby5tZXRob2QoKTsgLy8gZXJyb3I6IG1ldGhvZCBgbWV0aG9kYCBpcyBwcml2YXRlCmBgYAoKVHdvIHBvc3NpYmlsaXRpZXMgYXJlIGF2YWlsYWJsZSB0byBzb2x2ZSB0aGlzIGlzc3VlOgoKMS4gT25seSB1c2UgdGhlIGl0ZW0gaW4gdGhlIHNjb3BlIGl0IGhhcyBiZWVuIGRlZmluZWQ6CgpgYGAKbW9kIGlubmVyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vOwoKICAgIGltcGwgRm9vIHsKICAgICAgICBmbiBtZXRob2QoJnNlbGYpIHt9CiAgICB9CgogICAgcHViIGZuIGNhbGxfbWV0aG9kKGZvbzogJkZvbykgeyAvLyBXZSBjcmVhdGUgYSBwdWJsaWMgZnVuY3Rpb24uCiAgICAgICAgZm9vLm1ldGhvZCgpOyAvLyBXaGljaCBjYWxscyB0aGUgaXRlbS4KICAgIH0KfQoKbGV0IGZvbyA9IGlubmVyOjpGb287CmlubmVyOjpjYWxsX21ldGhvZCgmZm9vKTsgLy8gQW5kIHNpbmNlIHRoZSBmdW5jdGlvbiBpcyBwdWJsaWMsIHdlIGNhbiBjYWxsIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGhvZCB0aHJvdWdoIGl0LgpgYGAKCjIuIE1ha2UgdGhlIGl0ZW0gcHVibGljOgoKYGBgCm1vZCBpbm5lciB7CiAgICBwdWIgc3RydWN0IEZvbzsKCiAgICBpbXBsIEZvbyB7CiAgICAgICAgcHViIGZuIG1ldGhvZCgmc2VsZikge30gLy8gSXQncyBub3cgcHVibGljLgogICAgfQp9CgpsZXQgZm9vID0gaW5uZXI6OkZvbzsKZm9vLm1ldGhvZCgpOyAvLyBPayEKYGBgCkUwNjI1QSBjb21waWxlLXRpbWUgY29uc3QgdmFyaWFibGUgaXMgcmVmZXJyaW5nIHRvIGEgdGhyZWFkLWxvY2FsIHN0YXRpYyB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjUKIyFbZmVhdHVyZSh0aHJlYWRfbG9jYWwpXQoKI1t0aHJlYWRfbG9jYWxdCnN0YXRpYyBYOiB1c2l6ZSA9IDEyOwoKY29uc3QgWTogdXNpemUgPSAyICogWDsKYGBgCgpTdGF0aWMgYW5kIGNvbnN0IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgY29uc3QgdmFyaWFibGVzIGJ1dCBhIGNvbnN0CnZhcmlhYmxlIGNhbm5vdCByZWZlciB0byBhIHRocmVhZC1sb2NhbCBzdGF0aWMgdmFyaWFibGUuIEluIHRoaXMgZXhhbXBsZSwKYFlgIGNhbm5vdCByZWZlciB0byBgWGAuIFRvIGZpeCB0aGlzLCB0aGUgdmFsdWUgY2FuIGJlIGV4dHJhY3RlZCBhcyBhIGNvbnN0CmFuZCB0aGVuIHVzZWQ6CgpgYGAKIyFbZmVhdHVyZSh0aHJlYWRfbG9jYWwpXQoKY29uc3QgQzogdXNpemUgPSAxMjsKCiNbdGhyZWFkX2xvY2FsXQpzdGF0aWMgWDogdXNpemUgPSBDOwoKY29uc3QgWTogdXNpemUgPSAyICogQzsKYGBgCkUwNjI2VGhpcyBlcnJvciBvY2N1cnMgYmVjYXVzZSBhIGJvcnJvdyBpbiBhIGdlbmVyYXRvciBwZXJzaXN0cyBhY3Jvc3MgYQp5aWVsZCBwb2ludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjYKIyAjIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCwgcGluKV0KIyB1c2Ugc3RkOjpvcHM6OkdlbmVyYXRvcjsKIyB1c2Ugc3RkOjpwaW46OlBpbjsKbGV0IG11dCBiID0gfHwgewogICAgbGV0IGEgPSAmU3RyaW5nOjpuZXcoKTsgLy8gPC0tIFRoaXMgYm9ycm93Li4uCiAgICB5aWVsZCAoKTsgLy8gLi4uaXMgc3RpbGwgaW4gc2NvcGUgaGVyZSwgd2hlbiB0aGUgeWllbGQgb2NjdXJzLgogICAgcHJpbnRsbiEoInt9IiwgYSk7Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpBdCBwcmVzZW50LCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIGhhdmUgYSB5aWVsZCB0aGF0IG9jY3VycyB3aGlsZSBhCmJvcnJvdyBpcyBzdGlsbCBpbiBzY29wZS4gVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCB0aGUgYm9ycm93IG11c3QKZWl0aGVyIGJlICJjb250YWluZWQiIHRvIGEgc21hbGxlciBzY29wZSB0aGF0IGRvZXMgbm90IG92ZXJsYXAgdGhlCnlpZWxkIG9yIGVsc2UgZWxpbWluYXRlZCBpbiBhbm90aGVyIHdheS4gU28sIGZvciBleGFtcGxlLCB3ZSBtaWdodApyZXNvbHZlIHRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IHJlbW92aW5nIHRoZSBib3Jyb3cgYW5kIGp1c3Qgc3RvcmluZwp0aGUgaW50ZWdlciBieSB2YWx1ZToKCmBgYAojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgICBsZXQgYSA9IDM7CiAgICB5aWVsZCAoKTsKICAgIHByaW50bG4hKCJ7fSIsIGEpOwp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CmBgYAoKVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGNhc2UsIG9mIGNvdXJzZS4gSW4gbW9yZSBjb21wbGV4IGNhc2VzLCB3ZSBtYXkKd2lzaCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSB0aGF0IHdhcyBib3Jyb3dlZCAtLQppbiB0aG9zZSBjYXNlcywgc29tZXRoaW5nIGxpa2UgdGhlIGBSY2Agb3IgYEFyY2AgdHlwZXMgbWF5IGJlIHVzZWZ1bC4KClRoaXMgZXJyb3IgYWxzbyBmcmVxdWVudGx5IGFyaXNlcyB3aXRoIGl0ZXJhdGlvbjoKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNgojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgbGV0IHYgPSB2ZWMhWzEsMiwzXTsKICBmb3IgJnggaW4gJnYgeyAvLyA8LS0gYm9ycm93IG9mIGB2YCBpcyBzdGlsbCBpbiBzY29wZS4uLgogICAgeWllbGQgeDsgLy8gLi4ud2hlbiB0aGlzIHlpZWxkIG9jY3Vycy4KICB9Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpTdWNoIGNhc2VzIGNhbiBzb21ldGltZXMgYmUgcmVzb2x2ZWQgYnkgaXRlcmF0aW5nICJieSB2YWx1ZSIgKG9yIHVzaW5nCmBpbnRvX2l0ZXIoKWApIHRvIGF2b2lkIGJvcnJvd2luZzoKCmBgYAojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgbGV0IHYgPSB2ZWMhWzEsMiwzXTsKICBmb3IgeCBpbiB2IHsgLy8gPC0tIFRha2Ugb3duZXJzaGlwIG9mIHRoZSB2YWx1ZXMgaW5zdGVhZCEKICAgIHlpZWxkIHg7IC8vIDwtLSBOb3cgeWllbGQgaXMgT0suCiAgfQp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CmBgYAoKSWYgdGFraW5nIG93bmVyc2hpcCBpcyBub3QgYW4gb3B0aW9uLCB1c2luZyBpbmRpY2VzIGNhbiB3b3JrIHRvbzoKCmBgYAojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgbGV0IHYgPSB2ZWMhWzEsMiwzXTsKICBsZXQgbGVuID0gdi5sZW4oKTsgLy8gKCopCiAgZm9yIGkgaW4gMC4ubGVuIHsKICAgIGxldCB4ID0gdltpXTsgLy8gKCopCiAgICB5aWVsZCB4OyAvLyA8LS0gTm93IHlpZWxkIGlzIE9LLgogIH0KfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwoKLy8gKCopIC0tIFVuZm9ydHVuYXRlbHksIHRoZXNlIHRlbXBvcmFyaWVzIGFyZSBjdXJyZW50bHkgcmVxdWlyZWQuCi8vIFNlZSA8aHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80MzEyMj4uCmBgYApFMDYyN0EgeWllbGQgZXhwcmVzc2lvbiB3YXMgdXNlZCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3IgbGl0ZXJhbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjcKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gZmFrZV9nZW5lcmF0b3IoKSAtPiAmJ3N0YXRpYyBzdHIgewogICAgeWllbGQgMTsKICAgIHJldHVybiAiZm9vIgp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBnZW5lcmF0b3IgPSBmYWtlX2dlbmVyYXRvcjsKfQpgYGAKClRoZSBlcnJvciBvY2N1cnMgYmVjYXVzZSBrZXl3b3JkIGB5aWVsZGAgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdGhlIGdlbmVyYXRvcgpsaXRlcmFsLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBjb25zdHJ1Y3RpbmcgdGhlIGdlbmVyYXRvciBjb3JyZWN0bHkuCgpgYGAKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZ2VuZXJhdG9yID0gfHwgewogICAgICAgIHlpZWxkIDE7CiAgICAgICAgcmV0dXJuICJmb28iCiAgICB9Owp9CmBgYApFMDYyOE1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyIHdhcyB1c2VkIGZvciBhIGdlbmVyYXRvci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjgKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8YTogaTMyLCBiOiBpMzJ8IHsKICAgICAgICAvLyBlcnJvcjogdG9vIG1hbnkgcGFyYW1ldGVycyBmb3IgYSBnZW5lcmF0b3IKICAgICAgICAvLyBBbGxvd2VkIG9ubHkgMCBvciAxIHBhcmFtZXRlcgogICAgICAgIHlpZWxkIGE7CiAgICB9Owp9CmBgYAoKQXQgcHJlc2VudCwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byBwYXNzIG1vcmUgdGhhbiBvbmUgZXhwbGljaXQKcGFyYW1ldGVyIGZvciBhIGdlbmVyYXRvci5UaGlzIGNhbiBiZSBmaXhlZCBieSB1c2luZwphdCBtb3N0IDEgcGFyYW1ldGVyIGZvciB0aGUgZ2VuZXJhdG9yLiBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgcmVzb2x2ZQp0aGUgcHJldmlvdXMgZXhhbXBsZSBieSBwYXNzaW5nIG9ubHkgb25lIHBhcmFtZXRlci4KCmBgYAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHxhOiBpMzJ8IHsKICAgICAgICB5aWVsZCBhOwogICAgfTsKfQpgYGAKRTA2MzFUaGlzIGVycm9yIGluZGljYXRlcyBhIHR5cGUgbWlzbWF0Y2ggaW4gY2xvc3VyZSBhcmd1bWVudHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjMxCmZuIGZvbzxGOiBGbihpMzIpPihmOiBGKSB7Cn0KCmZuIG1haW4oKSB7CiAgICBmb28ofHg6ICZzdHJ8IHt9KTsKfQpgYGAKClRoZSBlcnJvciBvY2N1cnMgYmVjYXVzZSBgZm9vYCBhY2NlcHRzIGEgY2xvc3VyZSB0aGF0IHRha2VzIGFuIGBpMzJgIGFyZ3VtZW50LApidXQgaW4gYG1haW5gLCBpdCBpcyBwYXNzZWQgYSBjbG9zdXJlIHdpdGggYSBgJnN0cmAgYXJndW1lbnQuCgpUaGlzIGNhbiBiZSByZXNvbHZlZCBieSBjaGFuZ2luZyB0aGUgdHlwZSBhbm5vdGF0aW9uIG9yIHJlbW92aW5nIGl0IGVudGlyZWx5CmlmIGl0IGNhbiBiZSBpbmZlcnJlZC4KCmBgYApmbiBmb288RjogRm4oaTMyKT4oZjogRikgewp9CgpmbiBtYWluKCkgewogICAgZm9vKHx4OiBpMzJ8IHt9KTsKfQpgYGAKRTA2MzJBbiBleHBsaWNpdCBnZW5lcmljIGFyZ3VtZW50IHdhcyBwcm92aWRlZCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0aGF0CnVzZXMgYGltcGwgVHJhaXRgIGluIGFyZ3VtZW50IHBvc2l0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzMgpmbiBmb288VDogQ29weT4oYTogVCwgYjogaW1wbCBDbG9uZSkge30KCmZvbzo6PGkzMj4oMGkzMiwgImFiYyIudG9fc3RyaW5nKCkpOwpgYGAKCkVpdGhlciBhbGwgZ2VuZXJpYyBhcmd1bWVudHMgc2hvdWxkIGJlIGluZmVycmVkIGF0IHRoZSBjYWxsIHNpdGUsIG9yCnRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNob3VsZCB1c2UgYW4gZXhwbGljaXQgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcgppbnN0ZWFkIG9mIGBpbXBsIFRyYWl0YC4gRXhhbXBsZToKCmBgYApmbiBmb288VDogQ29weT4oYTogVCwgYjogaW1wbCBDbG9uZSkge30KZm4gYmFyPFQ6IENvcHksIFU6IENsb25lPihhOiBULCBiOiBVKSB7fQoKZm9vKDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKCmJhcjo6PGkzMiwgU3RyaW5nPigwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CmJhcjo6PF8sIF8+KDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKYmFyKDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKYGBgCkUwNjMzIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGB1bndpbmRgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKHVud2luZF9hdHRyaWJ1dGVzKV0KCiNbdW53aW5kKCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGV4dGVybiAiQyIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBgI1t1bndpbmRdYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKCi0gYCNbdW53aW5kKGFib3J0cyldYCAtLSBzcGVjaWZpZXMgdGhhdCBpZiBhIG5vbi1SdXN0IEFCSSBmdW5jdGlvbgogIHNob3VsZCBhYm9ydCB0aGUgcHJvY2VzcyBpZiBpdCBhdHRlbXB0cyB0byB1bndpbmQuIFRoaXMgaXMgdGhlIHNhZmVyCiAgYW5kIHByZWZlcnJlZCBvcHRpb24uCgotIGAjW3Vud2luZChhbGxvd2VkKV1gIC0tIHNwZWNpZmllcyB0aGF0IGEgbm9uLVJ1c3QgQUJJIGZ1bmN0aW9uCiAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gdW53aW5kLiBUaGlzIGNhbiBlYXNpbHkgcmVzdWx0IGluIFVuZGVmaW5lZAogIEJlaGF2aW9yIChVQiksIHNvIGJlIGNhcmVmdWwuCgpOQi4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZSBpcyAiYWxsb3dlZCIsIGJ1dCB0aGlzIGlzIHVuc3BlY2lmaWVkCmFuZCBsaWtlbHkgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCkUwNjM0QSB0eXBlIGhhcyBjb25mbGljdGluZyBgcGFja2VkYCByZXByZXNlbnRhdGlvbiBoaW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM0CiNbcmVwcihwYWNrZWQsIHBhY2tlZCgyKSldIC8vIGVycm9yIQpzdHJ1Y3QgQ29tcGFueShpMzIpOwoKI1tyZXByKHBhY2tlZCgyKSldIC8vIGVycm9yIQojW3JlcHIocGFja2VkKV0Kc3RydWN0IENvbXBhbnkoaTMyKTsKYGBgCgpZb3UgY2Fubm90IHVzZSBjb25mbGljdGluZyBgcGFja2VkYCBoaW50cyBvbiBhIHNhbWUgdHlwZS4gSWYgeW91IHdhbnQgdG8gcGFjayBhCnR5cGUgdG8gYSBnaXZlbiBzaXplLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYSBzaXplIHRvIHBhY2tlZDoKCmBgYAojW3JlcHIocGFja2VkKV0gLy8gb2shCnN0cnVjdCBDb21wYW55KGkzMik7CmBgYApFMDYzNVRoZSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSBzcGVjaWZpZWQgYW4gdW5rbm93biBmZWF0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzNQojIVtmZWF0dXJlKG5vbmV4aXN0ZW50X3J1c3RfZmVhdHVyZSldIC8vIGVycm9yOiB1bmtub3duIGZlYXR1cmUKYGBgCkUwNjM2QSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgbXVsdGlwbGUgdGltZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM2CiMhW2FsbG93KHN0YWJsZV9mZWF0dXJlcyldCiMhW2ZlYXR1cmUocnVzdDEpXQojIVtmZWF0dXJlKHJ1c3QxKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBydXN0MWAgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZApgYGAKRTA2MzdgJ19gIGxpZmV0aW1lIG5hbWUgb3IgYCZUYCB3aXRob3V0IGFuIGV4cGxpY2l0IGxpZmV0aW1lIG5hbWUgaGFzIGJlZW4gdXNlZApvbiBpbGxlZ2FsIHBsYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNixFMDYzNwpmbiB1bmRlcnNjb3JlX2xpZmV0aW1lPCdfPihzdHIxOiAmJ18gc3RyLCBzdHIyOiAmJ18gc3RyKSAtPiAmJ18gc3RyIHsKICAgICAgICAgICAgICAgICAgICAgLy9eXiBgJ19gIGlzIGEgcmVzZXJ2ZWQgbGlmZXRpbWUgbmFtZQogICAgaWYgc3RyMS5sZW4oKSA+IHN0cjIubGVuKCkgewogICAgICAgIHN0cjEKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyMgogICAgfQp9CgpmbiBhbmRfd2l0aG91dF9leHBsaWNpdF9saWZldGltZTxUPigpCndoZXJlCiAgICBUOiBJbnRvPCZ1MzI+LAogICAgICAgICAgLy9eIGAmYCB3aXRob3V0IGFuIGV4cGxpY2l0IGxpZmV0aW1lIG5hbWUKewp9CmBgYAoKRmlyc3QsIGAnX2AgY2Fubm90IGJlIHVzZWQgYXMgYSBsaWZldGltZSBpZGVudGlmaWVyIGluIHNvbWUgcGxhY2VzCmJlY2F1c2UgaXQgaXMgYSByZXNlcnZlZCBmb3IgdGhlIGFub255bW91cyBsaWZldGltZS4gU2Vjb25kLCBgJlRgCndpdGhvdXQgYW4gZXhwbGljaXQgbGlmZXRpbWUgbmFtZSBjYW5ub3QgYWxzbyBiZSB1c2VkIGluIHNvbWUgcGxhY2VzLgpUbyBmaXggdGhlbSwgdXNlIGEgbG93ZXJjYXNlIGxldHRlciBzdWNoIGFzIGAnYWAsIG9yIGEgc2VyaWVzCm9mIGxvd2VyY2FzZSBsZXR0ZXJzIHN1Y2ggYXMgYCdmb29gLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsaWZldGltZQppZGVudGlmaWVyLCBzZWUgW3RoZSBib29rXVtiay1ub10uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nCnRoZSBhbm9ueW1vdXMgbGlmZXRpbWUgaW4gUnVzdCAyMDE4LCBzZWUgW3RoZSBSdXN0IDIwMTggYmxvZyBwb3N0XVtibG9nLWFsXS4KCkNvcnJlY3RlZCBleGFtcGxlOgoKYGBgCmZuIHVuZGVyc2NvcmVfbGlmZXRpbWU8J2E+KHN0cjE6ICYnYSBzdHIsIHN0cjI6ICYnYSBzdHIpIC0+ICYnYSBzdHIgewogICAgaWYgc3RyMS5sZW4oKSA+IHN0cjIubGVuKCkgewogICAgICAgIHN0cjEKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyMgogICAgfQp9CgpmbiBhbmRfd2l0aG91dF9leHBsaWNpdF9saWZldGltZTwnZm9vLCBUPigpCndoZXJlCiAgICBUOiBJbnRvPCYnZm9vIHUzMj4sCnsKfQpgYGAKCltiay1ub106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wMi1vcGVyYXRvcnMuaHRtbCNub24tb3BlcmF0b3Itc3ltYm9scwpbYmxvZy1hbF06IGh0dHBzOi8vYmxvZy5ydXN0LWxhbmcub3JnLzIwMTgvMTIvMDYvUnVzdC0xLjMxLWFuZC1ydXN0LTIwMTguaHRtbCNtb3JlLWxpZmV0aW1lLWVsaXNpb24tcnVsZXMKRTA2MzhUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QsIGVudW0gb3IgZW51bSB2YXJpYW50IG11c3QgYmUgbWF0Y2hlZApub24tZXhoYXVzdGl2ZWx5IGFzIGl0IGhhcyBiZWVuIG1hcmtlZCBhcyBgbm9uX2V4aGF1c3RpdmVgLgoKV2hlbiBhcHBsaWVkIHdpdGhpbiBhIGNyYXRlLCBkb3duc3RyZWFtIHVzZXJzIG9mIHRoZSBjcmF0ZSB3aWxsIG5lZWQgdG8gdXNlIHRoZQpgX2AgcGF0dGVybiB3aGVuIG1hdGNoaW5nIGVudW1zIGFuZCB1c2UgdGhlIGAuLmAgcGF0dGVybiB3aGVuIG1hdGNoaW5nIHN0cnVjdHMuCkRvd25zdHJlYW0gY3JhdGVzIGNhbm5vdCBtYXRjaCBhZ2FpbnN0IG5vbi1leGhhdXN0aXZlIGVudW0gdmFyaWFudHMuCgpGb3IgZXhhbXBsZSwgaW4gdGhlIGJlbG93IGV4YW1wbGUsIHNpbmNlIHRoZSBlbnVtIGlzIG1hcmtlZCBhcwpgbm9uX2V4aGF1c3RpdmVgLCBpdCBpcyByZXF1aXJlZCB0aGF0IGRvd25zdHJlYW0gY3JhdGVzIG1hdGNoIG5vbi1leGhhdXN0aXZlbHkKb24gaXQuCgpgYGBydXN0LGlnbm9yZSAocHNldWRvLVJ1c3QpCiNbbm9uX2V4aGF1c3RpdmVdCnB1YiBlbnVtIEVycm9yIHsKICAgIE1lc3NhZ2UoU3RyaW5nKSwKICAgIE90aGVyLAp9CgppbXBsIERpc3BsYXkgZm9yIEVycm9yIHsKICAgIGZuIGZtdCgmc2VsZiwgZm9ybWF0dGVyOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBlcnJvciwgZGVzcGl0ZSBiZWluZyBtYXJrZWQgYXMgbm9uX2V4aGF1c3RpdmUsIGFzIHRoaXMKICAgICAgICAvLyBlbnVtIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNyYXRlLCBpdCBjYW4gYmUgbWF0Y2hlZAogICAgICAgIC8vIGV4aGF1c3RpdmVseS4KICAgICAgICBsZXQgZGlzcGxheSA9IG1hdGNoIHNlbGYgewogICAgICAgICAgICBNZXNzYWdlKHMpID0+IHMsCiAgICAgICAgICAgIE90aGVyID0+ICJvdGhlciBvciB1bmtub3duIGVycm9yIiwKICAgICAgICB9OwogICAgICAgIGZvcm1hdHRlci53cml0ZV9zdHIoZGlzcGxheSkKICAgIH0KfQpgYGAKCkFuIGV4YW1wbGUgb2YgbWF0Y2hpbmcgbm9uLWV4aGF1c3RpdmVseSBvbiB0aGUgYWJvdmUgZW51bSBpcyBwcm92aWRlZCBiZWxvdzoKCmBgYHJ1c3QsaWdub3JlIChwc2V1ZG8tUnVzdCkKdXNlIG15Y3JhdGU6OkVycm9yOwoKLy8gVGhpcyB3aWxsIG5vdCBlcnJvciBhcyB0aGUgbm9uX2V4aGF1c3RpdmUgRXJyb3IgZW51bSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYQovLyB3aWxkY2FyZC4KbWF0Y2ggZXJyb3IgewogICAgTWVzc2FnZShzKSA9PiAuLi4sCiAgICBPdGhlciA9PiAuLi4sCiAgICBfID0+IC4uLiwKfQpgYGAKClNpbWlsYXJseSwgZm9yIHN0cnVjdHMsIG1hdGNoIHdpdGggYC4uYCB0byBhdm9pZCB0aGlzIGVycm9yLgpFMDYzOVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cnVjdCwgZW51bSBvciBlbnVtIHZhcmlhbnQgY2Fubm90IGJlCmluc3RhbnRpYXRlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGRlZmluaW5nIGNyYXRlIGFzIGl0IGhhcyBiZWVuIG1hcmtlZAphcyBgbm9uX2V4aGF1c3RpdmVgIGFuZCBhcyBzdWNoIG1vcmUgZmllbGRzL3ZhcmlhbnRzIG1heSBiZSBhZGRlZCBpbgpmdXR1cmUgdGhhdCBjb3VsZCBjYXVzZSBhZHZlcnNlIHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBjb2RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoaXQgb25seSB3b3JrcyBjcm9zcy1jcmF0ZSkKI1tub25fZXhoYXVzdGl2ZV0KcHViIHN0cnVjdCBOb3JtYWxTdHJ1Y3QgewogICAgcHViIGZpcnN0X2ZpZWxkOiB1MTYsCiAgICBwdWIgc2Vjb25kX2ZpZWxkOiB1MTYsCn0KCmxldCBucyA9IE5vcm1hbFN0cnVjdCB7IGZpcnN0X2ZpZWxkOiA2NDAsIHNlY29uZF9maWVsZDogNDgwIH07IC8vIGVycm9yIQpgYGAKCkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGxvb2sgZm9yIGEgYG5ld2AgZnVuY3Rpb24gb3IgZXF1aXZhbGVudCBpbiB0aGUKY3JhdGUncyBkb2N1bWVudGF0aW9uLgpFMDY0MUF0dGVtcHRlZCB0byBjYXN0IHRvL2Zyb20gYSBwb2ludGVyIHdpdGggYW4gdW5rbm93biBraW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0MQpsZXQgYiA9IDAgYXMgKmNvbnN0IF87IC8vIGVycm9yCmBgYAoKVHlwZSBpbmZvcm1hdGlvbiBtdXN0IGJlIHByb3ZpZGVkIGlmIGEgcG9pbnRlciB0eXBlIGJlaW5nIGNhc3QgZnJvbS9pbnRvIGFub3RoZXIKdHlwZSB3aGljaCBjYW5ub3QgYmUgaW5mZXJyZWQ6CgpgYGAKLy8gQ3JlYXRpbmcgYSBwb2ludGVyIGZyb20gcmVmZXJlbmNlOiB0eXBlIGNhbiBiZSBpbmZlcnJlZApsZXQgYSA9ICYoU3RyaW5nOjpmcm9tKCJIZWxsbyB3b3JsZCEiKSkgYXMgKmNvbnN0IF87IC8vIG9rIQoKbGV0IGIgPSAwIGFzICpjb25zdCBpMzI7IC8vIG9rIQoKbGV0IGM6ICpjb25zdCBpMzIgPSAwIGFzICpjb25zdCBfOyAvLyBvayEKYGBgCkUwNjQyVHJhaXQgbWV0aG9kcyBjdXJyZW50bHkgY2Fubm90IHRha2UgcGF0dGVybnMgYXMgYXJndW1lbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0Mgp0cmFpdCBGb28gewogICAgZm4gZm9vKCh4LCB5KTogKGkzMiwgaTMyKSk7IC8vIGVycm9yOiBwYXR0ZXJucyBhcmVuJ3QgYWxsb3dlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbiB0cmFpdCBtZXRob2RzCn0KYGBgCgpZb3UgY2FuIGluc3RlYWQgdXNlIGEgc2luZ2xlIG5hbWUgZm9yIHRoZSBhcmd1bWVudDoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKHhfYW5kX3k6IChpMzIsIGkzMikpOyAvLyBvayEKfQpgYGAKRTA2NDNUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiBnZW5lcmljIHBhcmFtZXRlcnMgYW5kCmltcGwgVHJhaXQgcGFyYW1ldGVycyBpbiBhIHRyYWl0IGRlY2xhcmF0aW9uIHZlcnN1cyBpdHMgaW1wbC4KCmBgYGNvbXBpbGVfZmFpbCxFMDY0Mwp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCBfOiAmaW1wbCBJdGVyYXRvcik7Cn0KaW1wbCBGb28gZm9yICgpIHsKICAgIGZuIGZvbzxVOiBJdGVyYXRvcj4oJnNlbGYsIF86ICZVKSB7IH0gLy8gZXJyb3IgbWV0aG9kIGBmb29gIGhhcyBpbmNvbXBhdGlibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGZvciB0cmFpdAp9CmBgYApFMDY0NEEgY2xvc3VyZSBvciBnZW5lcmF0b3Igd2FzIGNvbnN0cnVjdGVkIHRoYXQgcmVmZXJlbmNlcyBpdHMgb3duIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ0CmZuIGZpeDxGPihmOiAmRikKICB3aGVyZSBGOiBGbigmRikKewogICAgZigmZik7Cn0KCmZuIG1haW4oKSB7CiAgICBmaXgoJnx5fCB7CiAgICAgICAgLy8gSGVyZSwgd2hlbiBgeGAgaXMgY2FsbGVkLCB0aGUgcGFyYW1ldGVyIGB5YCBpcyBlcXVhbCB0byBgeGAuCiAgICB9KTsKfQpgYGAKClJ1c3QgZG9lcyBub3QgcGVybWl0IGEgY2xvc3VyZSB0byBkaXJlY3RseSByZWZlcmVuY2UgaXRzIG93biB0eXBlLAplaXRoZXIgdGhyb3VnaCBhbiBhcmd1bWVudCAoYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpIG9yIGJ5IGNhcHR1cmluZwppdHNlbGYgdGhyb3VnaCBpdHMgZW52aXJvbm1lbnQuIFRoaXMgcmVzdHJpY3Rpb24gaGVscHMga2VlcCBjbG9zdXJlCmluZmVyZW5jZSB0cmFjdGFibGUuCgpUaGUgZWFzaWVzdCBmaXggaXMgdG8gcmV3cml0ZSB5b3VyIGNsb3N1cmUgaW50byBhIHRvcC1sZXZlbCBmdW5jdGlvbiwKb3IgaW50byBhIG1ldGhvZC4gSW4gc29tZSBjYXNlcywgeW91IG1heSBhbHNvIGJlIGFibGUgdG8gaGF2ZSB5b3VyCmNsb3N1cmUgY2FsbCBpdHNlbGYgYnkgY2FwdHVyaW5nIGEgYCZGbigpYCBvYmplY3Qgb3IgYGZuKClgIHBvaW50ZXIKdGhhdCByZWZlcnMgdG8gaXRzZWxmLiBUaGF0IGlzIHBlcm1pdHRpbmcsIHNpbmNlIHRoZSBjbG9zdXJlIHdvdWxkIGJlCmludm9raW5nIGl0c2VsZiB2aWEgYSB2aXJ0dWFsIGNhbGwsIGFuZCBoZW5jZSBkb2VzIG5vdCBkaXJlY3RseQpyZWZlcmVuY2UgaXRzIG93biAqdHlwZSouCkUwNjQ2SXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZmluZSBgbWFpbmAgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDYKZm4gbWFpbigpIHdoZXJlIGkzMjogQ29weSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgd2hlcmUgY2xhdXNlCn0KYGBgCkUwNjQ3VGhlIGBzdGFydGAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDcKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBzdGFydChfOiBpc2l6ZSwgXzogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgd2hlcmUgKCk6IENvcHkgewogICAgLy9eIGVycm9yOiBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlIGEgd2hlcmUgY2xhdXNlCiAgICAwCn0KYGBgCkUwNjQ4QW4gYGV4cG9ydF9uYW1lYCBhdHRyaWJ1dGUgY29udGFpbnMgbnVsbCBjaGFyYWN0ZXJzIChgXDBgKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDgKI1tleHBvcnRfbmFtZT0iXDBmb28iXSAvLyBlcnJvcjogYGV4cG9ydF9uYW1lYCBtYXkgbm90IGNvbnRhaW4gbnVsbCBjaGFyYWN0ZXJzCnB1YiBmbiBiYXIoKSB7fQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCByZW1vdmUgdGhlIG51bGwgY2hhcmFjdGVyczoKCmBgYAojW2V4cG9ydF9uYW1lPSJmb28iXSAvLyBvayEKcHViIGZuIGJhcigpIHt9CmBgYApFMDY1N0EgbGlmZXRpbWUgYm91bmQgb24gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbiB3YXMgY2FwdHVyZWQgYXQgYW4gaW5jb3JyZWN0IHBsYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY1Nwp0cmFpdCBJZDxUPiB7fQp0cmFpdCBMdDwnYT4ge30KCmltcGw8J2E+IEx0PCdhPiBmb3IgKCkge30KaW1wbDxUPiBJZDxUPiBmb3IgVCB7fQoKZm4gZnJlZV9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdCgpCiAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdhPj4+IC8vIGVycm9yIQp7CiAgICBCb3g6Om5ldygoKSkKfQoKc3RydWN0IEZvbzsKaW1wbCBGb28gewogICAgZm4gaW1wbF9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdCgpCiAgICAgICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYT4+PiAvLyBlcnJvciEKICAgIHsKICAgICAgICBCb3g6Om5ldygoKSkKICAgIH0KfQpgYGAKCkhlcmUsIHlvdSBoYXZlIHVzZWQgdGhlIGluYXBwcm9wcmlhdGUgbGlmZXRpbWUgaW4gdGhlIGBpbXBsIFRyYWl0YCwKVGhlIGBpbXBsIFRyYWl0YCBjYW4gb25seSBjYXB0dXJlIGxpZmV0aW1lcyBib3VuZCBhdCB0aGUgZm4gb3IgaW1wbApsZXZlbC4KClRvIGZpeCB0aGlzIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBsaWZldGltZSBhdCB0aGUgZnVuY3Rpb24gb3IgaW1wbApsZXZlbCBhbmQgdXNlIHRoYXQgbGlmZXRpbWUgaW4gdGhlIGBpbXBsIFRyYWl0YC4gRm9yIGV4YW1wbGUgeW91IGNhbgpkZWZpbmUgdGhlIGxpZmV0aW1lIGF0IHRoZSBmdW5jdGlvbjoKCmBgYAp0cmFpdCBJZDxUPiB7fQp0cmFpdCBMdDwnYT4ge30KCmltcGw8J2E+IEx0PCdhPiBmb3IgKCkge30KaW1wbDxUPiBJZDxUPiBmb3IgVCB7fQoKZm4gZnJlZV9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdDwnYj4oKQogICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYj4+PiAvLyBvayEKewogICAgQm94OjpuZXcoKCkpCn0KCnN0cnVjdCBGb287CmltcGwgRm9vIHsKICAgIGZuIGltcGxfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQ8J2I+KCkKICAgICAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdiPj4+IC8vIG9rIQogICAgewogICAgICAgIEJveDo6bmV3KCgpKQogICAgfQp9CmBgYApFMDY1OEFuIHVuc3RhYmxlIGZlYXR1cmUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjU4CiNbcmVwcih1MTI4KV0gLy8gZXJyb3I6IHVzZSBvZiB1bnN0YWJsZSBsaWJyYXJ5IGZlYXR1cmUgJ3JlcHIxMjgnCmVudW0gRm9vIHsKICAgIEJhcih1NjQpLAp9CmBgYAoKSWYgeW91J3JlIHVzaW5nIGEgc3RhYmxlIG9yIGEgYmV0YSB2ZXJzaW9uIG9mIHJ1c3RjLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB1c2UKYW55IHVuc3RhYmxlIGZlYXR1cmVzLiBJbiBvcmRlciB0byBkbyBzbywgcGxlYXNlIHN3aXRjaCB0byBhIG5pZ2h0bHkgdmVyc2lvbiBvZgpydXN0YyAoYnkgdXNpbmcgW3J1c3R1cF0pLgoKSWYgeW91J3JlIHVzaW5nIGEgbmlnaHRseSB2ZXJzaW9uIG9mIHJ1c3RjLCBqdXN0IGFkZCB0aGUgY29ycmVzcG9uZGluZyBmZWF0dXJlCnRvIGJlIGFibGUgdG8gdXNlIGl0OgoKYGBgCiMhW2ZlYXR1cmUocmVwcjEyOCldCgojW3JlcHIodTEyOCldIC8vIG9rIQplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKCltydXN0dXBdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcnVzdHVwL2NvbmNlcHRzL2NoYW5uZWxzLmh0bWwKRTA2NTlBbiBpdGVtIHVzYWdlIGlzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA2NTkKcHViIG1vZCBtb29uIHsKICAgIHB1YiBmbiBmb28oKSB7fQp9CgpwdWIgbW9kIGVhcnRoIHsKICAgIHB1YiBmbiBmb28oKSB7fQp9Cgptb2QgY29sbGlkZXIgewogICAgcHViIHVzZSBjcmF0ZTo6bW9vbjo6KjsKICAgIHB1YiB1c2UgY3JhdGU6OmVhcnRoOjoqOwp9CgpmbiBtYWluKCkgewogICAgY3JhdGU6OmNvbGxpZGVyOjpmb28oKTsgLy8gRVJST1I6IGBmb29gIGlzIGFtYmlndW91cwp9CmBgYAoKVGhpcyBlcnJvciBnZW5lcmFsbHkgYXBwZWFycyB3aGVuIHR3byBpdGVtcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGltcG9ydGVkIGludG8KYSBtb2R1bGUuIEhlcmUsIHRoZSBgZm9vYCBmdW5jdGlvbnMgYXJlIGltcG9ydGVkIGFuZCByZWV4cG9ydGVkIGZyb20gdGhlCmBjb2xsaWRlcmAgbW9kdWxlIGFuZCB0aGVyZWZvcmUsIHdoZW4gd2UncmUgdXNpbmcgYGNvbGxpZGVyOjpmb28oKWAsIGJvdGgKZnVuY3Rpb25zIGNvbGxpZGUuCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCB0aGUgYmVzdCBzb2x1dGlvbiBpcyBnZW5lcmFsbHkgdG8ga2VlcCB0aGUgcGF0aCBiZWZvcmUgdGhlCml0ZW0gd2hlbiB1c2luZyBpdC4gRXhhbXBsZToKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgbW9vbiB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKbW9kIGNvbGxpZGVyIHsKICAgIHB1YiB1c2UgY3JhdGU6Om1vb247CiAgICBwdWIgdXNlIGNyYXRlOjplYXJ0aDsKfQoKZm4gbWFpbigpIHsKICAgIGNyYXRlOjpjb2xsaWRlcjo6bW9vbjo6Zm9vKCk7IC8vIG9rIQogICAgY3JhdGU6OmNvbGxpZGVyOjplYXJ0aDo6Zm9vKCk7IC8vIG9rIQp9CmBgYApFMDY2MFRoZSBhcmd1bWVudCB0byB0aGUgYGxsdm1fYXNtYCBtYWNybyBpcyBub3Qgd2VsbC1mb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjYwCmxsdm1fYXNtISgibm9wIiAibm9wIik7CmBgYAoKQ29uc2lkZXJpbmcgdGhhdCB0aGlzIHdvdWxkIGJlIGEgbG9uZyBleHBsYW5hdGlvbiwgd2UgaW5zdGVhZCByZWNvbW1lbmQgeW91CnRha2UgYSBsb29rIGF0IHRoZSBbYGxsdm1fYXNtYF0gY2hhcHRlciBvZiB0aGUgVW5zdGFibGUgYm9vazoKCltgbGx2bV9hc21gXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvdW5zdGFibGUtYm9vay9saWJyYXJ5LWZlYXR1cmVzL2xsdm0tYXNtLmh0bWwKRTA2NjFBbiBpbnZhbGlkIHN5bnRheCB3YXMgcGFzc2VkIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgYW4gYGxsdm1fYXNtYCBtYWNybyBsaW5lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MQpsZXQgYTsKbGx2bV9hc20hKCJub3AiIDogInIiKGEpKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2BsbHZtX2FzbWBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2MkFuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MgpsbHZtX2FzbSEoInhvciAlZWF4LCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOiAiPXRlc3QiKCJhIikKICAgICAgICAgKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2BsbHZtX2FzbWBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2M0FuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MwpsbHZtX2FzbSEoInhvciAlZWF4LCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOiAiK3Rlc3QiKCJhIikKICAgICAgICAgKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2BsbHZtX2FzbWBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2NEEgY2xvYmJlciB3YXMgc3Vycm91bmRlZCBieSBicmFjZXMgaW4gdGhlIGBsbHZtX2FzbWAgbWFjcm8uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY0Cmxsdm1fYXNtISgibW92ICQkMHgyMDAsICVlYXgiCiAgICAgICAgICA6CiAgICAgICAgICA6CiAgICAgICAgICA6ICJ7ZWF4fSIKICAgICAgICAgKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2BsbHZtX2FzbWBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2NSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBgRGVmYXVsdGAgdHJhaXQgd2FzIGRlcml2ZWQgb24gYW4gZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKI1tkZXJpdmUoRGVmYXVsdCldCmVudW0gRm9vZCB7CiAgICBTd2VldCwKICAgIFNhbHR5LAp9CmBgYAoKVGhlIGBEZWZhdWx0YCBjYW5ub3QgYmUgZGVyaXZlZCBvbiBhbiBlbnVtIGZvciB0aGUgc2ltcGxlIHJlYXNvbiB0aGF0IHRoZQpjb21waWxlciBkb2Vzbid0IGtub3cgd2hpY2ggdmFsdWUgdG8gcGljayBieSBkZWZhdWx0IHdoZXJlYXMgaXQgY2FuIGZvciBhCnN0cnVjdCBhcyBsb25nIGFzIGFsbCBpdHMgZmllbGRzIGltcGxlbWVudCB0aGUgYERlZmF1bHRgIHRyYWl0IGFzIHdlbGwuCgpJZiB5b3Ugc3RpbGwgd2FudCB0byBpbXBsZW1lbnQgYERlZmF1bHRgIG9uIHlvdXIgZW51bSwgeW91J2xsIGhhdmUgdG8gZG8gaXQgImJ5CmhhbmQiOgoKYGBgCmVudW0gRm9vZCB7CiAgICBTd2VldCwKICAgIFNhbHR5LAp9CgppbXBsIERlZmF1bHQgZm9yIEZvb2QgewogICAgZm4gZGVmYXVsdCgpIC0+IEZvb2QgewogICAgICAgIEZvb2Q6OlN3ZWV0CiAgICB9Cn0KYGBgCkUwNjY2YGltcGwgVHJhaXRgIHR5cGVzIGNhbm5vdCBhcHBlYXIgbmVzdGVkIGluIHRoZSBnZW5lcmljIGFyZ3VtZW50cyBvZiBvdGhlcgpgaW1wbCBUcmFpdGAgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY2CnRyYWl0IE15R2VuZXJpY1RyYWl0PFQ+IHt9CnRyYWl0IE15SW5uZXJUcmFpdCB7fQoKZm4gZm9vKAogICAgYmFyOiBpbXBsIE15R2VuZXJpY1RyYWl0PGltcGwgTXlJbm5lclRyYWl0PiwgLy8gZXJyb3IhCikge30KYGBgCgpUeXBlIHBhcmFtZXRlcnMgZm9yIGBpbXBsIFRyYWl0YCB0eXBlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVmaW5lZCBhcyBuYW1lZApnZW5lcmljIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgTXlHZW5lcmljVHJhaXQ8VD4ge30KdHJhaXQgTXlJbm5lclRyYWl0IHt9CgpmbiBmb288VDogTXlJbm5lclRyYWl0PigKICAgIGJhcjogaW1wbCBNeUdlbmVyaWNUcmFpdDxUPiwgLy8gb2shCikge30KYGBgCkUwNjY4TWFsZm9ybWVkIGlubGluZSBhc3NlbWJseSByZWplY3RlZCBieSBMTFZNLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2OAojIVtmZWF0dXJlKGxsdm1fYXNtKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgcmF4OiB1NjQ7CiAgICB1bnNhZmUgewogICAgICAgIGxsdm1fYXNtISgiIiA6Ij17cmF4IihyYXgpKTsKICAgICAgICBwcmludGxuISgiQWNjdW11bGF0b3IgaXM6IHt9IiwgcmF4KTsKICAgIH0KfQpgYGAKCkxMVk0gY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uc3RyYWludHMgYW5kIHRoZSBhc3NlbWJseSBzdHJpbmcgcGFzc2VkIHRvCml0LiBUaGlzIGVycm9yIGltcGxpZXMgdGhhdCBMTFZNIHNlZW1zIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBpbmxpbmUKYXNzZW1ibHkgY2FsbC4KCkluIHBhcnRpY3VsYXIsIGl0IGNhbiBoYXBwZW4gaWYgeW91IGZvcmdvdCB0aGUgY2xvc2luZyBicmFja2V0IG9mIGEgcmVnaXN0ZXIKY29uc3RyYWludCAoc2VlIGlzc3VlICM1MTQzMCksIGxpa2UgaW4gdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZS4KRTA2NjlDYW5ub3QgY29udmVydCBpbmxpbmUgYXNzZW1ibHkgb3BlcmFuZCB0byBhIHNpbmdsZSBMTFZNIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2OQojIVtmZWF0dXJlKGxsdm1fYXNtKV0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgewogICAgICAgIGxsdm1fYXNtISgiIiA6OiAiciIoIiIpKTsgLy8gZXJyb3IhCiAgICB9Cn0KYGBgCgpUaGlzIGVycm9yIHVzdWFsbHkgaGFwcGVucyB3aGVuIHRyeWluZyB0byBwYXNzIGluIGEgdmFsdWUgdG8gYW4gaW5wdXQgaW5saW5lCmFzc2VtYmx5IG9wZXJhbmQgdGhhdCBpcyBhY3R1YWxseSBhIHBhaXIgb2YgdmFsdWVzLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGNhbgpoYXBwZW4gd2hlbiB0cnlpbmcgdG8gcGFzcyBpbiBhIHNsaWNlLCBmb3IgaW5zdGFuY2UgYSBgJnN0cmAuIEluIFJ1c3QsIHRoZXNlCnZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhcyBhIHBhaXIgb2YgdmFsdWVzLCB0aGUgcG9pbnRlciBhbmQgaXRzCmxlbmd0aC4gV2hlbiBwYXNzZWQgYXMgYW4gaW5wdXQgb3BlcmFuZCwgdGhpcyBwYWlyIG9mIHZhbHVlcyBjYW4gbm90IGJlCmNvZXJjZWQgaW50byBhIHJlZ2lzdGVyIGFuZCB0aHVzIHdlIG11c3QgZmFpbCB3aXRoIGFuIGVycm9yLgpFMDY3MFJ1c3QgMjAxNSBkb2VzIG5vdCBwZXJtaXQgdGhlIHVzZSBvZiBgYXN5bmMgZm5gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY3MAphc3luYyBmbiBmb28oKSB7fQpgYGAKClN3aXRjaCB0byB0aGUgUnVzdCAyMDE4IGVkaXRpb24gdG8gdXNlIGBhc3luYyBmbmAuCkUwNjcxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQ29uc3QgcGFyYW1ldGVycyBjYW5ub3QgZGVwZW5kIG9uIHR5cGUgcGFyYW1ldGVycy4KVGhlIGZvbGxvd2luZyBpcyB0aGVyZWZvcmUgaW52YWxpZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDc3MApmbiBjb25zdF9pZDxULCBjb25zdCBOOiBUPigpIC0+IFQgeyAvLyBlcnJvcgogICAgTgp9CmBgYApFMDY4N0luLWJhbmQgbGlmZXRpbWVzIGNhbm5vdCBiZSB1c2VkIGluIGBmbmAvYEZuYCBzeW50YXguCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY4NwojIVtmZWF0dXJlKGluX2JhbmRfbGlmZXRpbWVzKV0KCmZuIGZvbyh4OiBmbigmJ2EgdTMyKSkge30gLy8gZXJyb3IhCgpmbiBiYXIoeDogJkZuKCYnYSB1MzIpKSB7fSAvLyBlcnJvciEKCmZuIGJheih4OiBmbigmJ2EgdTMyKSwgeTogJidhIHUzMikge30gLy8gZXJyb3IhCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbCBGb288J2E+IHsKICAgIGZuIGJhcigmc2VsZiwgeDogZm4oJidhIHUzMikpIHt9IC8vIGVycm9yIQp9CmBgYAoKTGlmZXRpbWVzIHVzZWQgaW4gYGZuYCBvciBgRm5gIHN5bnRheCBtdXN0IGJlIGV4cGxpY2l0bHkKZGVjbGFyZWQgdXNpbmcgYDwuLi4+YCBiaW5kZXJzLiBGb3IgZXhhbXBsZToKCmBgYApmbiBmb288J2E+KHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBvayEKCmZuIGJhcjwnYT4oeDogJkZuKCYnYSB1MzIpKSB7fSAvLyBvayEKCmZuIGJhejwnYT4oeDogZm4oJidhIHUzMiksIHk6ICYnYSB1MzIpIHt9IC8vIG9rIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gYmFyKCZzZWxmLCB4OiBmbigmJ2EgdTMyKSkge30gLy8gb2shCn0KYGBgCkUwNjg4SW4tYmFuZCBsaWZldGltZXMgd2VyZSBtaXhlZCB3aXRoIGV4cGxpY2l0IGxpZmV0aW1lIGJpbmRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg4CiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vPCdhPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyKSB7fSAgIC8vIGVycm9yIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGwgRm9vPCdhPiB7CiAgICBmbiBiYXI8J2I+KHg6ICYnYSB1MzIsIHk6ICYnYiB1MzIsIHo6ICYnYyB1MzIpIHt9ICAgLy8gZXJyb3IhCn0KCmltcGw8J2I+IEZvbzwnYT4geyAgLy8gZXJyb3IhCiAgICBmbiBiYXooKSB7fQp9CmBgYAoKSW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIG1peGVkIHdpdGggZXhwbGljaXQgbGlmZXRpbWUgYmluZGVycy4KRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vPCdhLCAnYj4oeDogJidhIHUzMiwgeTogJidiIHUzMikge30gICAvLyBvayEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGJhcjwnYiwnYz4oeDogJidhIHUzMiwgeTogJidiIHUzMiwgejogJidjIHUzMikge30gICAgLy8gb2shCn0KCmltcGw8J2E+IEZvbzwnYT4geyAgLy8gb2shCiAgICBmbiBiYXooKSB7fQp9CmBgYApFMDY4OUEgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gYW1iaWd1b3VzIG51bWVyaWMgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2ODkKMi4wLm5lZygpOyAvLyBlcnJvciEKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljIHZhbHVlIGZvciB0aGUgbWV0aG9kIGJlaW5nIHBhc3NlZCBleGlzdHMKYnV0IHRoZSB0eXBlIG9mIHRoZSBudW1lcmljIHZhbHVlIG9yIGJpbmRpbmcgY291bGQgbm90IGJlIGlkZW50aWZpZWQuCgpUaGUgZXJyb3IgaGFwcGVucyBvbiBudW1lcmljIGxpdGVyYWxzIGFuZCBvbiBudW1lcmljIGJpbmRpbmdzIHdpdGhvdXQgYW4KaWRlbnRpZmllZCBjb25jcmV0ZSB0eXBlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg5CmxldCB4ID0gMi4wOwp4Lm5lZygpOyAgLy8gc2FtZSBlcnJvciBhcyBhYm92ZQpgYGAKCkJlY2F1c2Ugb2YgdGhpcywgeW91IG11c3QgZ2l2ZSB0aGUgbnVtZXJpYyBsaXRlcmFsIG9yIGJpbmRpbmcgYSB0eXBlOgoKYGBgCnVzZSBzdGQ6Om9wczo6TmVnOwoKbGV0IF8gPSAyLjBfZjMyLm5lZygpOyAvLyBvayEKbGV0IHg6IGYzMiA9IDIuMDsKbGV0IF8gPSB4Lm5lZygpOyAvLyBvayEKbGV0IF8gPSAoMi4wIGFzIGYzMikubmVnKCk7IC8vIG9rIQpgYGAKRTA2OTBBIHN0cnVjdCB3aXRoIHRoZSByZXByZXNlbnRhdGlvbiBoaW50IGByZXByKHRyYW5zcGFyZW50KWAgaGFkIHR3byBvciBtb3JlIGZpZWxkcwp0aGF0IHdlcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgemVyby1zaXplZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IExlbmd0aFdpdGhVbml0PFU+IHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IHN0cnVjdCBuZWVkcyBhdCBtb3N0IG9uZQogICAgdmFsdWU6IGYzMiwgICAgICAgICAgICAvLyAgICAgICAgbm9uLXplcm8tc2l6ZWQgZmllbGQsIGJ1dCBoYXMgMgogICAgdW5pdDogVSwKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgc3RydWN0cyBhcmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlIG9uZSBvZiB0aGVpciBmaWVsZHMgYXQKcnVuIHRpbWUsIHNhaWQgZmllbGQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZmllbGRzLAppdCBpcyBub3QgY2xlYXIgaG93IHRoZSBzdHJ1Y3Qgc2hvdWxkIGJlIHJlcHJlc2VudGVkLgpOb3RlIHRoYXQgZmllbGRzIG9mIHplcm8tc2l6ZWQgdHlwZXMgKGUuZy4sIGBQaGFudG9tRGF0YWApIGNhbiBhbHNvIGV4aXN0CmFsb25nc2lkZSB0aGUgZmllbGQgdGhhdCBjb250YWlucyB0aGUgYWN0dWFsIGRhdGEsIHRoZXkgZG8gbm90IGNvdW50IGZvciB0aGlzCmVycm9yLiBXaGVuIGdlbmVyaWMgdHlwZXMgYXJlIGludm9sdmVkIChhcyBpbiB0aGUgYWJvdmUgZXhhbXBsZSksIGFuIGVycm9yIGlzCnJlcG9ydGVkIGJlY2F1c2UgdGhlIHR5cGUgcGFyYW1ldGVyIGNvdWxkIGJlIG5vbi16ZXJvLXNpemVkLgoKVG8gY29tYmluZSBgcmVwcih0cmFuc3BhcmVudClgIHdpdGggdHlwZSBwYXJhbWV0ZXJzLCBgUGhhbnRvbURhdGFgIG1heSBiZQp1c2VmdWw6CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBMZW5ndGhXaXRoVW5pdDxVPiB7CiAgICB2YWx1ZTogZjMyLAogICAgdW5pdDogUGhhbnRvbURhdGE8VT4sCn0KYGBgCkUwNjkxQSBzdHJ1Y3QsIGVudW0sIG9yIHVuaW9uIHdpdGggdGhlIGByZXByKHRyYW5zcGFyZW50KWAgcmVwcmVzZW50YXRpb24gaGludApjb250YWlucyBhIHplcm8tc2l6ZWQgZmllbGQgdGhhdCByZXF1aXJlcyBub24tdHJpdmlhbCBhbGlnbm1lbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkxCiMhW2ZlYXR1cmUocmVwcl9hbGlnbildCgojW3JlcHIoYWxpZ24oMzIpKV0Kc3RydWN0IEZvcmNlQWxpZ24zMjsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBXcmFwcGVyKGYzMiwgRm9yY2VBbGlnbjMyKTsgLy8gZXJyb3I6IHplcm8tc2l6ZWQgZmllbGQgaW4gdHJhbnNwYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc3RydWN0IGhhcyBhbGlnbm1lbnQgbGFyZ2VyIHRoYW4gMQpgYGAKCkEgdHJhbnNwYXJlbnQgc3RydWN0LCBlbnVtLCBvciB1bmlvbiBpcyBzdXBwb3NlZCB0byBiZSByZXByZXNlbnRlZCBleGFjdGx5IGxpa2UKdGhlIHBpZWNlIG9mIGRhdGEgaXQgY29udGFpbnMuIFplcm8tc2l6ZWQgZmllbGRzIHdpdGggZGlmZmVyZW50IGFsaWdubWVudApyZXF1aXJlbWVudHMgcG90ZW50aWFsbHkgY29uZmxpY3Qgd2l0aCB0aGlzIHByb3BlcnR5LiBJbiB0aGUgZXhhbXBsZSBhYm92ZSwKYFdyYXBwZXJgIHdvdWxkIGhhdmUgdG8gYmUgYWxpZ25lZCB0byAzMiBieXRlcyBldmVuIHRob3VnaCBgZjMyYCBoYXMgYSBzbWFsbGVyCmFsaWdubWVudCByZXF1aXJlbWVudC4KCkNvbnNpZGVyIHJlbW92aW5nIHRoZSBvdmVyLWFsaWduZWQgemVyby1zaXplZCBmaWVsZDoKCmBgYAojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIpOwpgYGAKCkFsdGVybmF0aXZlbHksIGBQaGFudG9tRGF0YTxUPmAgaGFzIGFsaWdubWVudCAxIGZvciBhbGwgYFRgLCBzbyB5b3UgY2FuIHVzZSBpdAppZiB5b3UgbmVlZCB0byBrZWVwIHRoZSBmaWVsZCBmb3Igc29tZSByZWFzb246CgpgYGAKIyFbZmVhdHVyZShyZXByX2FsaWduKV0KCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgojW3JlcHIoYWxpZ24oMzIpKV0Kc3RydWN0IEZvcmNlQWxpZ24zMjsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBXcmFwcGVyKGYzMiwgUGhhbnRvbURhdGE8Rm9yY2VBbGlnbjMyPik7CmBgYAoKTm90ZSB0aGF0IGVtcHR5IGFycmF5cyBgW1Q7IDBdYCBoYXZlIHRoZSBzYW1lIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUKZWxlbWVudCB0eXBlIGBUYC4gQWxzbyBub3RlIHRoYXQgdGhlIGVycm9yIGlzIGNvbnNlcnZhdGl2ZWx5IHJlcG9ydGVkIGV2ZW4gd2hlbgp0aGUgYWxpZ25tZW50IG9mIHRoZSB6ZXJvLXNpemVkIHR5cGUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBkYXRhIGZpZWxkJ3MKYWxpZ25tZW50LgpFMDY5MkEgYHJlcHIodHJhbnNwYXJlbnQpYCB0eXBlIHdhcyBhbHNvIGFubm90YXRlZCB3aXRoIG90aGVyLCBpbmNvbXBhdGlibGUKcmVwcmVzZW50YXRpb24gaGludHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkyCiNbcmVwcih0cmFuc3BhcmVudCwgQyldIC8vIGVycm9yOiBpbmNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gaGludHMKc3RydWN0IEdyYW1zKGYzMik7CmBgYAoKQSB0eXBlIGFubm90YXRlZCBhcyBgcmVwcih0cmFuc3BhcmVudClgIGRlbGVnYXRlcyBhbGwgcmVwcmVzZW50YXRpb24gY29uY2VybnMgdG8KYW5vdGhlciB0eXBlLCBzbyBhZGRpbmcgbW9yZSByZXByZXNlbnRhdGlvbiBoaW50cyBpcyBjb250cmFkaWN0b3J5LiBSZW1vdmUKZWl0aGVyIHRoZSBgdHJhbnNwYXJlbnRgIGhpbnQgb3IgdGhlIG90aGVyIGhpbnRzLCBsaWtlIHRoaXM6CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zKGYzMik7CmBgYAoKQWx0ZXJuYXRpdmVseSwgbW92ZSB0aGUgb3RoZXIgYXR0cmlidXRlcyB0byB0aGUgY29udGFpbmVkIHR5cGU6CgpgYGAKI1tyZXByKEMpXQpzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKICAgIC8vIC4uLgp9CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgRm9vV3JhcHBlcihGb28pOwpgYGAKCk5vdGUgdGhhdCBpbnRyb2R1Y2luZyBhbm90aGVyIGBzdHJ1Y3RgIGp1c3QgdG8gaGF2ZSBhIHBsYWNlIGZvciB0aGUgb3RoZXIKYXR0cmlidXRlcyBtYXkgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvbiB0aGUgcmVwcmVzZW50YXRpb246CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zKGYzMik7CgojW3JlcHIoQyldCnN0cnVjdCBGbG9hdChmMzIpOwoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zMihGbG9hdCk7IC8vIHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gYEdyYW1zYCBhYm92ZQpgYGAKCkhlcmUsIGBHcmFtczJgIGlzIGEgbm90IGVxdWl2YWxlbnQgdG8gYEdyYW1zYCAtLSB0aGUgZm9ybWVyIHRyYW5zcGFyZW50bHkgd3JhcHMKYSAobm9uLXRyYW5zcGFyZW50KSBzdHJ1Y3QgY29udGFpbmluZyBhIHNpbmdsZSBmbG9hdCwgd2hpbGUgYEdyYW1zYCBpcyBhCnRyYW5zcGFyZW50IHdyYXBwZXIgYXJvdW5kIGEgZmxvYXQuIFRoaXMgY2FuIG1ha2UgYSBkaWZmZXJlbmNlIGZvciB0aGUgQUJJLgpFMDY5M2BhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCB3YXMgaW5jb3JyZWN0bHkgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MwojW3JlcHIoYWxpZ249OCldIC8vIGVycm9yIQpzdHJ1Y3QgQWxpZ244KGk4KTsKCiNbcmVwcihhbGlnbj0iOCIpXSAvLyBlcnJvciEKc3RydWN0IEFsaWduOChpOCk7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIGBhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCBpcyB0aGUgZm9sbG93aW5nOgoKYGBgCiNbcmVwcihhbGlnbig4KSldIC8vIG9rIQpzdHJ1Y3QgQWxpZ244KGk4KTsKYGBgCkUwNjk1QSBgYnJlYWtgIHN0YXRlbWVudCB3aXRob3V0IGEgbGFiZWwgYXBwZWFyZWQgaW5zaWRlIGEgbGFiZWxlZCBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTUKIyAjIVtmZWF0dXJlKGxhYmVsX2JyZWFrX3ZhbHVlKV0KbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrOwogICAgfQp9CmBgYAoKTWFrZSBzdXJlIHRvIGFsd2F5cyBsYWJlbCB0aGUgYGJyZWFrYDoKCmBgYAojICMhW2ZlYXR1cmUobGFiZWxfYnJlYWtfdmFsdWUpXQonbDogbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrICdsOwogICAgfQp9CmBgYAoKT3IgaWYgeW91IHdhbnQgdG8gYGJyZWFrYCB0aGUgbGFiZWxlZCBibG9jazoKCmBgYAojICMhW2ZlYXR1cmUobGFiZWxfYnJlYWtfdmFsdWUpXQpsb29wIHsKICAgICdhOiB7CiAgICAgICAgYnJlYWsgJ2E7CiAgICB9CiAgICBicmVhazsKfQpgYGAKRTA2OTZBIGZ1bmN0aW9uIGlzIHVzaW5nIGBjb250aW51ZWAga2V5d29yZCBpbmNvcnJlY3RseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTYKZm4gY29udGludWVfc2ltcGxlKCkgewogICAgJ2I6IHsKICAgICAgICBjb250aW51ZTsgLy8gZXJyb3IhCiAgICB9Cn0KZm4gY29udGludWVfbGFiZWxlZCgpIHsKICAgICdiOiB7CiAgICAgICAgY29udGludWUgJ2I7IC8vIGVycm9yIQogICAgfQp9CmZuIGNvbnRpbnVlX2Nyb3NzaW5nKCkgewogICAgbG9vcCB7CiAgICAgICAgJ2I6IHsKICAgICAgICAgICAgY29udGludWU7IC8vIGVycm9yIQogICAgICAgIH0KICAgIH0KfQpgYGAKCkhlcmUgd2UgaGF2ZSB1c2VkIHRoZSBgY29udGludWVgIGtleXdvcmQgaW5jb3JyZWN0bHkuIEFzIHdlCmhhdmUgc2VlbiBhYm92ZSB0aGF0IGBjb250aW51ZWAgcG9pbnRpbmcgdG8gYSBsYWJlbGVkIGJsb2NrLgoKVG8gZml4IHRoaXMgd2UgaGF2ZSB0byB1c2UgdGhlIGxhYmVsZWQgYmxvY2sgcHJvcGVybHkuCkZvciBleGFtcGxlOgoKYGBgCmZuIGNvbnRpbnVlX3NpbXBsZSgpIHsKICAgICdiOiBsb29wIHsKICAgICAgICBjb250aW51ZSA7IC8vIG9rIQogICAgfQp9CmZuIGNvbnRpbnVlX2xhYmVsZWQoKSB7CiAgICAnYjogbG9vcCB7CiAgICAgICAgY29udGludWUgJ2I7IC8vIG9rIQogICAgfQp9CmZuIGNvbnRpbnVlX2Nyb3NzaW5nKCkgewogICAgbG9vcCB7CiAgICAgICAgJ2I6IGxvb3AgewogICAgICAgICAgICBjb250aW51ZTsgLy8gb2shCiAgICAgICAgfQogICAgfQp9CmBgYApFMDY5N0EgY2xvc3VyZSBoYXMgYmVlbiB1c2VkIGFzIGBzdGF0aWNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5NwpmbiBtYWluKCkgewogICAgc3RhdGljIHx8IHt9OyAvLyB1c2VkIGFzIGBzdGF0aWNgCn0KYGBgCgpDbG9zdXJlcyBjYW5ub3QgYmUgdXNlZCBhcyBgc3RhdGljYC4gVGhleSAic2F2ZSIgdGhlIGVudmlyb25tZW50LAphbmQgYXMgc3VjaCBhIHN0YXRpYyBjbG9zdXJlIHdvdWxkIHNhdmUgb25seSBhIHN0YXRpYyBlbnZpcm9ubWVudAp3aGljaCB3b3VsZCBjb25zaXN0IG9ubHkgb2YgdmFyaWFibGVzIHdpdGggYSBzdGF0aWMgbGlmZXRpbWUuIEdpdmVuCnRoaXMgaXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBhIHByb3BlciBmdW5jdGlvbi4gVGhlIGVhc2llc3QgZml4CmlzIHRvIHJlbW92ZSB0aGUgYHN0YXRpY2Aga2V5d29yZC4KRTA2OThXaGVuIHVzaW5nIGdlbmVyYXRvcnMgKG9yIGFzeW5jKSBhbGwgdHlwZSB2YXJpYWJsZXMgbXVzdCBiZSBib3VuZCBzbyBhCmdlbmVyYXRvciBjYW4gYmUgY29uc3RydWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNjk4CmFzeW5jIGZuIGJhcjxUPigpIC0+ICgpIHt9Cgphc3luYyBmbiBmb28oKSB7CiAgICBiYXIoKS5hd2FpdDsgLy8gZXJyb3I6IGNhbm5vdCBpbmZlciB0eXBlIGZvciBgVGAKfQpgYGAKCkluIHRoZSBhYm92ZSBleGFtcGxlIGBUYCBpcyB1bmtub3dhYmxlIGJ5IHRoZSBjb21waWxlci4KVG8gZml4IHRoaXMgeW91IG11c3QgYmluZCBgVGAgdG8gYSBjb25jcmV0ZSB0eXBlIHN1Y2ggYXMgYFN0cmluZ2AKc28gdGhhdCBhIGdlbmVyYXRvciBjYW4gdGhlbiBiZSBjb25zdHJ1Y3RlZDoKCmBgYGVkaXRpb24yMDE4CmFzeW5jIGZuIGJhcjxUPigpIC0+ICgpIHt9Cgphc3luYyBmbiBmb28oKSB7CiAgICBiYXI6OjxTdHJpbmc+KCkuYXdhaXQ7CiAgICAvLyAgIF5eXl5eXl5eIHNwZWNpZnkgdHlwZSBleHBsaWNpdGx5Cn0KYGBgCkUwNjk5QSBtZXRob2Qgd2FzIGNhbGxlZCBvbiBhIHJhdyBwb2ludGVyIHdob3NlIGlubmVyIHR5cGUgd2Fzbid0IGNvbXBsZXRlbHkga25vd24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNjk5CiMgIyFbZGVueSh3YXJuaW5ncyldCiMgZm4gbWFpbigpIHsKbGV0IGZvbyA9ICYxOwpsZXQgYmFyID0gZm9vIGFzICpjb25zdCBfOwppZiBiYXIuaXNfbnVsbCgpIHsKICAgIC8vIC4uLgp9CiMgfQpgYGAKCkhlcmUsIHRoZSB0eXBlIG9mIGBiYXJgIGlzbid0IGtub3duOyBpdCBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gYW55dGhpbmcuIEluc3RlYWQsCnNwZWNpZnkgYSB0eXBlIGZvciB0aGUgcG9pbnRlciAocHJlZmVyYWJseSBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSBmb3IgdGhlCnRoaW5nIHlvdSdyZSBwb2ludGluZyB0byk6CgpgYGAKbGV0IGZvbyA9ICYxOwpsZXQgYmFyID0gZm9vIGFzICpjb25zdCBpMzI7CmlmIGJhci5pc19udWxsKCkgewogICAgLy8gLi4uCn0KYGBgCgpFdmVuIHRob3VnaCBgaXNfbnVsbCgpYCBleGlzdHMgYXMgYSBtZXRob2Qgb24gYW55IHJhdyBwb2ludGVyLCBSdXN0IHNob3dzIHRoaXMKZXJyb3IgYmVjYXVzZSAgUnVzdCBhbGxvd3MgZm9yIGBzZWxmYCB0byBoYXZlIGFyYml0cmFyeSB0eXBlcyAoYmVoaW5kIHRoZQphcmJpdHJhcnlfc2VsZl90eXBlcyBmZWF0dXJlIGZsYWcpLgoKVGhpcyBtZWFucyB0aGF0IHNvbWVvbmUgY2FuIHNwZWNpZnkgc3VjaCBhIGZ1bmN0aW9uOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1mZWF0dXJlLWRvZXNudC1leGlzdC15ZXQpCmltcGwgRm9vIHsKICAgIGZuIGlzX251bGwoc2VsZjogKmNvbnN0IFNlbGYpIC0+IGJvb2wgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyBlbHNlCiAgICB9Cn0KYGBgCgphbmQgbm93IHdoZW4geW91IGNhbGwgYC5pc19udWxsKClgIG9uIGEgcmF3IHBvaW50ZXIgdG8gYEZvb2AsIHRoZXJlJ3MgYW1iaWd1aXR5LgoKR2l2ZW4gdGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdHlwZSB0aGUgcG9pbnRlciBpcywgYW5kIHRoZXJlJ3MgcG90ZW50aWFsCmFtYmlndWl0eSBmb3Igc29tZSB0eXBlcywgd2UgZGlzYWxsb3cgY2FsbGluZyBtZXRob2RzIG9uIHJhdyBwb2ludGVycyB3aGVuCnRoZSB0eXBlIGlzIHVua25vd24uCkUwNzAwVGhlIGBpbXBsIFRyYWl0YCByZXR1cm4gdHlwZSBjYXB0dXJlcyBsaWZldGltZSBwYXJhbWV0ZXJzIHRoYXQgZG8gbm90CmFwcGVhciB3aXRoaW4gdGhlIGBpbXBsIFRyYWl0YCBpdHNlbGYuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAwCnVzZSBzdGQ6OmNlbGw6OkNlbGw7Cgp0cmFpdCBUcmFpdDwnYT4geyB9CgppbXBsPCdhLCAnYj4gVHJhaXQ8J2I+IGZvciBDZWxsPCYnYSB1MzI+IHsgfQoKZm4gZm9vPCd4LCAneT4oeDogQ2VsbDwmJ3ggdTMyPikgLT4gaW1wbCBUcmFpdDwneT4Kd2hlcmUgJ3g6ICd5CnsKICAgIHgKfQpgYGAKCkhlcmUsIHRoZSBmdW5jdGlvbiBgZm9vYCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBgQ2VsbDwmJ3ggdTMyPmAsCndoaWNoIHJlZmVyZW5jZXMgdGhlIGxpZmV0aW1lIGAneGAuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdHlwZSBpcwpkZWNsYXJlZCBhcyBgaW1wbCBUcmFpdDwneT5gIC0tIHRoaXMgaW5kaWNhdGVzIHRoYXQgYGZvb2AgcmV0dXJucwoic29tZSB0eXBlIHRoYXQgaW1wbGVtZW50cyBgVHJhaXQ8J3k+YCIsIGJ1dCBpdCBhbHNvIGluZGljYXRlcyB0aGF0CnRoZSByZXR1cm4gdHlwZSAqKm9ubHkgY2FwdHVyZXMgZGF0YSByZWZlcmVuY2luZyB0aGUgbGlmZXRpbWUgYCd5YCoqLgpJbiB0aGlzIGNhc2UsIHRob3VnaCwgd2UgYXJlIHJlZmVyZW5jaW5nIGRhdGEgd2l0aCBsaWZldGltZSBgJ3hgLCBzbwp0aGlzIGZ1bmN0aW9uIGlzIGluIGVycm9yLgoKVG8gZml4IHRoaXMsIHlvdSBtdXN0IHJlZmVyZW5jZSB0aGUgbGlmZXRpbWUgYCd4YCBmcm9tIHRoZSByZXR1cm4KdHlwZS4gRm9yIGV4YW1wbGUsIGNoYW5naW5nIHRoZSByZXR1cm4gdHlwZSB0byBgaW1wbCBUcmFpdDwneT4gKyAneGAKd291bGQgd29yazoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKdHJhaXQgVHJhaXQ8J2E+IHsgfQoKaW1wbDwnYSwnYj4gVHJhaXQ8J2I+IGZvciBDZWxsPCYnYSB1MzI+IHsgfQoKZm4gZm9vPCd4LCAneT4oeDogQ2VsbDwmJ3ggdTMyPikgLT4gaW1wbCBUcmFpdDwneT4gKyAneAp3aGVyZSAneDogJ3kKewogICAgeAp9CmBgYApFMDcwMVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYSBgI1tub25fZXhoYXVzdGl2ZV1gIGF0dHJpYnV0ZSB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkCm9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RydWN0IG9yIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAxCiNbbm9uX2V4aGF1c3RpdmVdCnRyYWl0IEZvbyB7IH0KYGBgCkUwNzAzSW52YWxpZCBBQkkgKEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UpIHVzZWQgaW4gdGhlIGNvZGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAzCmV4dGVybiAiaW52YWxpZCIgZm4gZm9vKCkge30gLy8gZXJyb3IhCiMgZm4gbWFpbigpIHt9CmBgYAoKQXQgcHJlc2VudCBmZXcgcHJlZGVmaW5lZCBBQkkncyAobGlrZSBSdXN0LCBDLCBzeXN0ZW0sIGV0Yy4pIGNhbiBiZQp1c2VkIGluIFJ1c3QuIFZlcmlmeSB0aGF0IHRoZSBBQkkgaXMgcHJlZGVmaW5lZC4gRm9yIGV4YW1wbGUgeW91IGNhbgpyZXBsYWNlIHRoZSBnaXZlbiBBQkkgZnJvbSAnUnVzdCcuCgpgYGAKZXh0ZXJuICJSdXN0IiBmbiBmb28oKSB7fSAvLyBvayEKIyBmbiBtYWluKCkgeyB9CmBgYApFMDcwNEFuIGluY29ycmVjdCB2aXNpYmlsaXR5IHJlc3RyaWN0aW9uIHdhcyBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzA0Cm1vZCBmb28gewogICAgcHViKGZvbykgc3RydWN0IEJhciB7CiAgICAgICAgeDogaTMyCiAgICB9Cn0KYGBgCgpUbyBtYWtlIHN0cnVjdCBgQmFyYCBvbmx5IHZpc2libGUgaW4gbW9kdWxlIGBmb29gIHRoZSBgaW5gIGtleXdvcmQgc2hvdWxkIGJlCnVzZWQ6CgpgYGAKbW9kIGZvbyB7CiAgICBwdWIoaW4gY3JhdGU6OmZvbykgc3RydWN0IEJhciB7CiAgICAgICAgeDogaTMyCiAgICB9Cn0KIyBmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFJ1c3QgUmVmZXJlbmNlIG9uIFtWaXNpYmlsaXR5XS4KCltWaXNpYmlsaXR5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdmlzaWJpbGl0eS1hbmQtcHJpdmFjeS5odG1sCkUwNzA1QSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgZm9yIGEgZmVhdHVyZSB0aGF0IGlzIHN0YWJsZSBpbiB0aGUKY3VycmVudCBlZGl0aW9uLCBidXQgbm90IGluIGFsbCBlZGl0aW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGxpbWl0ZWQgdG8gYSB3YXJuaW5nIGR1cmluZyAyMDE4IGVkaXRpb24gZGV2ZWxvcG1lbnQpCiMhW2ZlYXR1cmUocnVzdF8yMDE4X3ByZXZpZXcpXQojIVtmZWF0dXJlKHRlc3RfMjAxOF9mZWF0dXJlKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgdGVzdF8yMDE4X2ZlYXR1cmVgIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlZCBpbiB0aGUgUnVzdCAyMDE4IGVkaXRpb24KYGBgCkUwNzA2YGFzeW5jIGZuYHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIHRyYWl0cyBpbiBSdXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOAp0cmFpdCBUIHsKICAgIC8vIE5laXRoZXIgY2FzZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgYXN5bmMgZm4gZm9vKCkge30KICAgIGFzeW5jIGZuIGJhcigmc2VsZikge30KfQpgYGAKCmBhc3luYyBmbmBzIHJldHVybiBhbiBgaW1wbCBGdXR1cmVgLCBtYWtpbmcgdGhlIGZvbGxvd2luZyB0d28gZXhhbXBsZXMKZXF1aXZhbGVudDoKCmBgYGVkaXRpb24yMDE4LGlnbm9yZSAoZXhhbXBsZS1vZi1kZXN1Z2FyaW5nLWVxdWl2YWxlbmNlKQphc3luYyBmbiBmb28oKSAtPiBVc2VyIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQovLyBUaGUgYXN5bmMgZm4gYWJvdmUgZ2V0cyBkZXN1Z2FyZWQgYXMgZm9sbG93czoKZm4gZm9vKCZzZWxmKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSBVc2VyPiArICdfIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQpgYGAKCkJ1dCB3aGVuIGl0IGNvbWVzIHRvIHN1cHBvcnRpbmcgdGhpcyBpbiB0cmFpdHMsIHRoZXJlIGFyZSBbYSBmZXcgaW1wbGVtZW50YXRpb24KaXNzdWVzXVthc3luYy1pcy1oYXJkXS4gT25lIG9mIHRoZW0gaXMgcmV0dXJuaW5nIGBpbXBsIFRyYWl0YCBpbiB0cmFpdHMgaXMgbm90CnN1cHBvcnRlZCwgYXMgaXQgd291bGQgcmVxdWlyZSBbR2VuZXJpYyBBc3NvY2lhdGVkIFR5cGVzXSB0byBiZSBzdXBwb3J0ZWQ6CgpgYGBlZGl0aW9uMjAxOCxpZ25vcmUgKGV4YW1wbGUtb2YtZGVzdWdhcmluZy1lcXVpdmFsZW5jZSkKaW1wbCBNeURhdGFiYXNlIHsKICAgIGFzeW5jIGZuIGdldF91c2VyKCZzZWxmKSAtPiBVc2VyIHsKICAgICAgICB1bmltcGxlbWVudGVkISgpCiAgICB9Cn0KCmltcGwgTXlEYXRhYmFzZSB7CiAgICBmbiBnZXRfdXNlcigmc2VsZikgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gVXNlcj4gKyAnXyB7CiAgICAgICAgdW5pbXBsZW1lbnRlZCEoKQogICAgfQp9CmBgYAoKVW50aWwgdGhlc2UgaXNzdWVzIGFyZSByZXNvbHZlZCwgeW91IGNhbiB1c2UgdGhlIFtgYXN5bmMtdHJhaXRgIGNyYXRlXSwgYWxsb3dpbmcKeW91IHRvIHVzZSBgYXN5bmMgZm5gIGluIHRyYWl0cyBieSBkZXN1Z2FyaW5nIHRvICJib3hlZCBmdXR1cmVzIgooYFBpbjxCb3g8ZHluIEZ1dHVyZSArIFNlbmQgKyAnYXN5bmM+PmApLgoKTm90ZSB0aGF0IHVzaW5nIHRoZXNlIHRyYWl0IG1ldGhvZHMgd2lsbCByZXN1bHQgaW4gYSBoZWFwIGFsbG9jYXRpb24KcGVyLWZ1bmN0aW9uLWNhbGwuIFRoaXMgaXMgbm90IGEgc2lnbmlmaWNhbnQgY29zdCBmb3IgdGhlIHZhc3QgbWFqb3JpdHkgb2YKYXBwbGljYXRpb25zLCBidXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSB0aGlzCmZ1bmN0aW9uYWxpdHkgaW4gdGhlIHB1YmxpYyBBUEkgb2YgYSBsb3ctbGV2ZWwgZnVuY3Rpb24gdGhhdCBpcyBleHBlY3RlZCB0byBiZQpjYWxsZWQgbWlsbGlvbnMgb2YgdGltZXMgYSBzZWNvbmQuCgpZb3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB2aXNpdGluZyB0aGUgW2FzeW5jIGJvb2tdIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgoKW2Bhc3luYy10cmFpdGAgY3JhdGVdOiBodHRwczovL2NyYXRlcy5pby9jcmF0ZXMvYXN5bmMtdHJhaXQKW2FzeW5jLWlzLWhhcmRdOiBodHRwczovL3NtYWxsY3VsdGZvbGxvd2luZy5jb20vYmFieXN0ZXBzL2Jsb2cvMjAxOS8xMC8yNi9hc3luYy1mbi1pbi10cmFpdHMtYXJlLWhhcmQvCltHZW5lcmljIEFzc29jaWF0ZWQgVHlwZXNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ0MjY1Clthc3luYyBib29rXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL2FzeW5jLWJvb2svMDdfd29ya2Fyb3VuZHMvMDZfYXN5bmNfaW5fdHJhaXRzLmh0bWwKRTA3MDhgYXN5bmNgIG5vbi1gbW92ZWAgY2xvc3VyZXMgd2l0aCBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA3MDgKIyFbZmVhdHVyZShhc3luY19jbG9zdXJlKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgYWRkX29uZSA9IGFzeW5jIHxudW06IHU4fCB7IC8vIGVycm9yIQogICAgICAgIG51bSArIDEKICAgIH07Cn0KYGBgCgpgYXN5bmNgIHdpdGggbm9uLW1vdmUgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgd2l0aCB0aGUgY3VycmVudAp2ZXJzaW9uLCB5b3UgY2FuIHVzZSBzdWNjZXNzZnVsbHkgYnkgdXNpbmcgbW92ZToKCmBgYGVkaXRpb24yMDE4CiMhW2ZlYXR1cmUoYXN5bmNfY2xvc3VyZSldCgpmbiBtYWluKCkgewogICAgbGV0IGFkZF9vbmUgPSBhc3luYyBtb3ZlIHxudW06IHU4fCB7IC8vIG9rIQogICAgICAgIG51bSArIDEKICAgIH07Cn0KYGBgCkUwNzEwQW4gdW5rbm93biB0b29sIG5hbWUgd2FzIGZvdW5kIGluIGEgc2NvcGVkIGxpbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMAojW2FsbG93KGNsaXBwOjpmaWx0ZXJfbWFwKV0gLy8gZXJyb3IhYApmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMAojW3dhcm4oY2xpcHA6OmZpbHRlcl9tYXApXSAvLyBlcnJvciFgCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0b29sJ3MgbmFtZSBvciB0aGF0IHlvdSBkaWRuJ3QKZm9yZ2V0IHRvIGltcG9ydCBpdCBpbiB5b3UgcHJvamVjdDoKCmBgYAojW2FsbG93KGNsaXBweTo6ZmlsdGVyX21hcCldIC8vIG9rIQpmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKCmBgYAojW3dhcm4oY2xpcHB5OjpmaWx0ZXJfbWFwKV0gLy8gb2shCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYApFMDcxMkEgYm9ycm93IG9mIGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlIHdhcyBtYWRlIGluc2lkZSBhIGZ1bmN0aW9uIHdoaWNoIG91dGxpdmVkCnRoZSBsaWZldGltZSBvZiB0aGUgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzEyCiMhW2ZlYXR1cmUodGhyZWFkX2xvY2FsKV0KCiNbdGhyZWFkX2xvY2FsXQpzdGF0aWMgRk9POiB1OCA9IDM7CgpmbiBtYWluKCkgewogICAgbGV0IGEgPSAmRk9POyAvLyBlcnJvcjogdGhyZWFkLWxvY2FsIHZhcmlhYmxlIGJvcnJvd2VkIHBhc3QgZW5kIG9mIGZ1bmN0aW9uCgogICAgc3RkOjp0aHJlYWQ6OnNwYXduKG1vdmUgfHwgewogICAgICAgIHByaW50bG4hKCJ7fSIsIGEpOwogICAgfSk7Cn0KYGBgCkUwNzEzVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYm9ycm93IHN0YXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUKbGlmZXRpbWUgb2YgYSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMwojIVtmZWF0dXJlKG5sbCldCgpwdWIgc3RydWN0IFM8J2E+IHsgZGF0YTogJidhIG11dCBTdHJpbmcgfQoKaW1wbDwnYT4gRHJvcCBmb3IgUzwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgc2VsZi5kYXRhLnB1c2hfc3RyKCJiZWluZyBkcm9wcGVkIik7IH0KfQoKZm4gZGVtbzwnYT4oczogUzwnYT4pIC0+ICYnYSBtdXQgU3RyaW5nIHsgbGV0IHAgPSAmbXV0ICpzLmRhdGE7IHAgfQpgYGAKCkhlcmUsIGBkZW1vYCB0cmllcyB0byBib3Jyb3cgdGhlIHN0cmluZyBkYXRhIGhlbGQgd2l0aGluIGl0cwphcmd1bWVudCBgc2AgYW5kIHRoZW4gcmV0dXJuIHRoYXQgYm9ycm93LiBIb3dldmVyLCBgU2AgaXMKZGVjbGFyZWQgYXMgaW1wbGVtZW50aW5nIGBEcm9wYC4KClN0cnVjdHMgaW1wbGVtZW50aW5nIHRoZSBgRHJvcGAgdHJhaXQgaGF2ZSBhbiBpbXBsaWNpdCBkZXN0cnVjdG9yIHRoYXQKZ2V0cyBjYWxsZWQgd2hlbiB0aGV5IGdvIG91dCBvZiBzY29wZS4gVGhpcyBkZXN0cnVjdG9yIGdldHMgZXhjbHVzaXZlCmFjY2VzcyB0byB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3Qgd2hlbiBpdCBydW5zLgoKVGhpcyBtZWFucyB0aGF0IHdoZW4gYHNgIHJlYWNoZXMgdGhlIGVuZCBvZiBgZGVtb2AsIGl0cyBkZXN0cnVjdG9yCmdldHMgZXhjbHVzaXZlIGFjY2VzcyB0byBpdHMgYCZtdXRgLWJvcnJvd2VkIHN0cmluZyBkYXRhLiAgYWxsb3dpbmcKYW5vdGhlciBib3Jyb3cgb2YgdGhhdCBzdHJpbmcgZGF0YSAoYHBgKSwgdG8gZXhpc3QgYWNyb3NzIHRoZSBkcm9wIG9mCmBzYCB3b3VsZCBiZSBhIHZpb2xhdGlvbiBvZiB0aGUgcHJpbmNpcGxlIHRoYXQgYCZtdXRgLWJvcnJvd3MgaGF2ZQpleGNsdXNpdmUsIHVuYWxpYXNlZCBhY2Nlc3MgdG8gdGhlaXIgcmVmZXJlbmNlZCBkYXRhLgoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgY2hhbmdpbmcgYGRlbW9gIHNvIHRoYXQgdGhlIGRlc3RydWN0b3IgZG9lcwpub3QgcnVuIHdoaWxlIHRoZSBzdHJpbmctZGF0YSBpcyBib3Jyb3dlZDsgZm9yIGV4YW1wbGUgYnkgdGFraW5nIGBTYApieSByZWZlcmVuY2U6CgpgYGAKcHViIHN0cnVjdCBTPCdhPiB7IGRhdGE6ICYnYSBtdXQgU3RyaW5nIH0KCmltcGw8J2E+IERyb3AgZm9yIFM8J2E+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IHNlbGYuZGF0YS5wdXNoX3N0cigiYmVpbmcgZHJvcHBlZCIpOyB9Cn0KCmZuIGRlbW88J2E+KHM6ICYnYSBtdXQgUzwnYT4pIC0+ICYnYSBtdXQgU3RyaW5nIHsgbGV0IHAgPSAmbXV0ICooKnMpLmRhdGE7IHAgfQpgYGAKCk5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIG5lZWRzIGEgcmVmZXJlbmNlIHRvIFMgd2l0aCBsaWZldGltZSBgJ2FgLgpOb3RoaW5nIHNob3J0ZXIgdGhhbiBgJ2FgIHdpbGwgc3VmZmljZTogYSBzaG9ydGVyIGxpZmV0aW1lIHdvdWxkIGltcGx5CnRoYXQgYWZ0ZXIgYGRlbW9gIGZpbmlzaGVzIGV4ZWN1dGluZywgc29tZXRoaW5nIGVsc2UgKHN1Y2ggYXMgdGhlCmRlc3RydWN0b3IhKSBjb3VsZCBhY2Nlc3MgYHMuZGF0YWAgYWZ0ZXIgdGhlIGVuZCBvZiB0aGF0IHNob3J0ZXIKbGlmZXRpbWUsIHdoaWNoIHdvdWxkIGFnYWluIHZpb2xhdGUgdGhlIGAmbXV0YC1ib3Jyb3cncyBleGNsdXNpdmUKYWNjZXNzLgpFMDcxNEEgYCNbbWFya2VyXWAgdHJhaXQgY29udGFpbmVkIGFuIGFzc29jaWF0ZWQgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTQKIyFbZmVhdHVyZShtYXJrZXJfdHJhaXRfYXR0cildCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2RlZmF1bHRzKV0KCiNbbWFya2VyXQp0cmFpdCBNYXJrZXJDb25zdCB7CiAgICBjb25zdCBOOiB1c2l6ZTsgLy8gZXJyb3IhCn0KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBpdGVtcyBvZiBtYXJrZXIgdHJhaXRzIGNhbm5vdCBiZSBvdmVycmlkZGVuLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gaGF2ZSB0aGVtCndoZW4gdGhleSBjYW5ub3QgYmUgY2hhbmdlZCBwZXItdHlwZSBhbnl3YXkuICBJZiB5b3Ugd2FudGVkIHRoZW0gZm9yIGVyZ29ub21pYwpyZWFzb25zLCBjb25zaWRlciBtYWtpbmcgYW4gZXh0ZW5zaW9uIHRyYWl0IGluc3RlYWQuCkUwNzE1QW4gYGltcGxgIGZvciBhIGAjW21hcmtlcl1gIHRyYWl0IHRyaWVkIHRvIG92ZXJyaWRlIGFuIGFzc29jaWF0ZWQgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTUKIyFbZmVhdHVyZShtYXJrZXJfdHJhaXRfYXR0cildCgojW21hcmtlcl0KdHJhaXQgTWFya2VyIHsKICAgIGNvbnN0IE46IHVzaXplID0gMDsKICAgIGZuIGRvX3NvbWV0aGluZygpIHt9Cn0KCnN0cnVjdCBPdmVycmlkZUNvbnN0OwppbXBsIE1hcmtlciBmb3IgT3ZlcnJpZGVDb25zdCB7IC8vIGVycm9yIQogICAgY29uc3QgTjogdXNpemUgPSAxOwp9CiMgZm4gbWFpbigpIHt9CmBgYAoKQmVjYXVzZSBtYXJrZXIgdHJhaXRzIGFyZSBhbGxvd2VkIHRvIGhhdmUgbXVsdGlwbGUgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgc2FtZQp0eXBlLCBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJyaWRlIGFueXRoaW5nIGluIHRob3NlIGltcGxlbWVudGF0aW9ucywgYXMgaXQKd291bGQgYmUgYW1iaWd1b3VzIHdoaWNoIG92ZXJyaWRlIHNob3VsZCBhY3R1YWxseSBiZSB1c2VkLgpFMDcxNkEgdGVtcG9yYXJ5IHZhbHVlIGlzIGJlaW5nIGRyb3BwZWQgd2hpbGUgYSBib3Jyb3cgaXMgc3RpbGwgaW4gYWN0aXZlIHVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTYKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgcCA9IGJhcigmZm9vKCkpOwogICAgICAgICAvLyAtLS0tLS0gY3JlYXRlcyBhIHRlbXBvcmFyeQpsZXQgcSA9ICpwOwpgYGAKCkhlcmUsIHRoZSBleHByZXNzaW9uIGAmZm9vKClgIGlzIGJvcnJvd2luZyB0aGUgZXhwcmVzc2lvbiBgZm9vKClgLiBBcyBgZm9vKClgIGlzCmEgY2FsbCB0byBhIGZ1bmN0aW9uLCBhbmQgbm90IHRoZSBuYW1lIG9mIGEgdmFyaWFibGUsIHRoaXMgY3JlYXRlcyBhCioqdGVtcG9yYXJ5KiogLS0gdGhhdCB0ZW1wb3Jhcnkgc3RvcmVzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgZm9vKClgIHNvIHRoYXQgaXQKY2FuIGJlIGJvcnJvd2VkLiBZb3UgY291bGQgaW1hZ2luZSB0aGF0IGBsZXQgcCA9IGJhcigmZm9vKCkpO2AgaXMgZXF1aXZhbGVudCB0bwp0aGUgZm9sbG93aW5nLCB3aGljaCB1c2VzIGFuIGV4cGxpY2l0IHRlbXBvcmFyeSB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTcKIyBmbiBmb28oKSAtPiBpMzIgeyAyMiB9CiMgZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHAgPSB7CiAgbGV0IHRtcCA9IGZvbygpOyAvLyB0aGUgdGVtcG9yYXJ5CiAgYmFyKCZ0bXApIC8vIGVycm9yOiBgdG1wYCBkb2VzIG5vdCBsaXZlIGxvbmcgZW5vdWdoCn07IC8vIDwtLSB0bXAgaXMgZnJlZWQgYXMgd2UgZXhpdCB0aGlzIGJsb2NrCmxldCBxID0gcDsKYGBgCgpXaGVuZXZlciBhIHRlbXBvcmFyeSBpcyBjcmVhdGVkLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgKGZyZWVkKSBhY2NvcmRpbmcKdG8gZml4ZWQgcnVsZXMuIE9yZGluYXJpbHksIHRoZSB0ZW1wb3JhcnkgaXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NpbmcKc3RhdGVtZW50IC0tIGluIHRoaXMgY2FzZSwgYWZ0ZXIgdGhlIGBsZXRgLiBUaGlzIGlzIGlsbHVzdHJhdGVkIGluIHRoZSBleGFtcGxlCmFib3ZlIGJ5IHNob3dpbmcgdGhhdCBgdG1wYCB3b3VsZCBiZSBmcmVlZCBhcyB3ZSBleGl0IHRoZSBibG9jay4KClRvIGZpeCB0aGlzIHByb2JsZW0sIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIGxvY2FsIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbgpyYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgdGVtcG9yYXJ5LiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGNoYW5nZSB0aGUgb3JpZ2luYWwKcHJvZ3JhbSB0byB0aGUgZm9sbG93aW5nOgoKYGBgCmZuIGZvbygpIC0+IGkzMiB7IDIyIH0KZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHZhbHVlID0gZm9vKCk7IC8vIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrCmxldCBwID0gYmFyKCZ2YWx1ZSk7CmxldCBxID0gKnA7CmBgYAoKQnkgaW50cm9kdWNpbmcgdGhlIGV4cGxpY2l0IGBsZXQgdmFsdWVgLCB3ZSBhbGxvY2F0ZSBzdG9yYWdlIHRoYXQgd2lsbCBsYXN0CnVudGlsIHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZyBibG9jayAod2hlbiBgdmFsdWVgIGdvZXMgb3V0IG9mIHNjb3BlKS4gV2hlbiB3ZQpib3Jyb3cgYCZ2YWx1ZWAsIHdlIGFyZSBib3Jyb3dpbmcgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGFscmVhZHkgZXhpc3RzLCBhbmQKaGVuY2Ugbm8gdGVtcG9yYXJ5IGlzIGNyZWF0ZWQuCgpUZW1wb3JhcmllcyBhcmUgbm90IGFsd2F5cyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQuIEluCnNpbXBsZSBjYXNlcyB3aGVyZSB0aGUgYCZgIGV4cHJlc3Npb24gaXMgaW1tZWRpYXRlbHkgc3RvcmVkIGludG8gYSB2YXJpYWJsZSwgdGhlCmNvbXBpbGVyIHdpbGwgYXV0b21hdGljYWxseSBleHRlbmQgdGhlIGxpZmV0aW1lIG9mIHRoZSB0ZW1wb3JhcnkgdW50aWwgdGhlIGVuZApvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLiBUaGVyZWZvcmUsIGFuIGFsdGVybmF0aXZlIHdheSB0byBmaXggdGhlIG9yaWdpbmFsCnByb2dyYW0gaXMgdG8gd3JpdGUgYGxldCB0bXAgPSAmZm9vKClgIGFuZCBub3QgYGxldCB0bXAgPSBmb28oKWA6CgpgYGAKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgdmFsdWUgPSAmZm9vKCk7CmxldCBwID0gYmFyKHZhbHVlKTsKbGV0IHEgPSAqcDsKYGBgCgpIZXJlLCB3ZSBhcmUgc3RpbGwgYm9ycm93aW5nIGBmb28oKWAsIGJ1dCBhcyB0aGUgYm9ycm93IGlzIGFzc2lnbmVkIGRpcmVjdGx5CmludG8gYSB2YXJpYWJsZSwgdGhlIHRlbXBvcmFyeSB3aWxsIG5vdCBiZSBkcm9wcGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlCmVuY2xvc2luZyBibG9jay4gU2ltaWxhciBydWxlcyBhcHBseSB3aGVuIHRlbXBvcmFyaWVzIGFyZSBzdG9yZWQgaW50byBhZ2dyZWdhdGUKc3RydWN0dXJlcyBsaWtlIGEgdHVwbGUgb3Igc3RydWN0OgoKYGBgCi8vIEhlcmUsIHR3byB0ZW1wb3JhcmllcyBhcmUgY3JlYXRlZCwgYnV0Ci8vIGFzIHRoZXkgYXJlIHN0b3JlZCBkaXJlY3RseSBpbnRvIGB2YWx1ZWAsCi8vIHRoZXkgYXJlIG5vdCBkcm9wcGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlCi8vIGVuY2xvc2luZyBibG9jay4KZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpsZXQgdmFsdWUgPSAoJmZvbygpLCAmZm9vKCkpOwpgYGAKRTA3MThBIGAjW2xhbmcgPSAiLi4iXWAgYXR0cmlidXRlIHdhcyBwbGFjZWQgb24gdGhlIHdyb25nIGl0ZW0gdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTgKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJvd25lZF9ib3giXQpzdGF0aWMgWDogdTMyID0gNDI7CmBgYApFMDcxOUFuIGFzc29jaWF0ZWQgdHlwZSB2YWx1ZSB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxOQojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9ib3VuZHMpXQoKdHJhaXQgRm9vVHJhaXQge30KdHJhaXQgQmFyVHJhaXQge30KCi8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYEl0ZW1gIGluIHRyYWl0IGBJdGVyYXRvcmAgaXMgc3BlY2lmaWVkIHR3aWNlCnN0cnVjdCBGb288VDogSXRlcmF0b3I8SXRlbTogRm9vVHJhaXQsIEl0ZW06IEJhclRyYWl0Pj4geyBmOiBUIH0KYGBgCgpgSXRlbWAgaW4gdHJhaXQgYEl0ZXJhdG9yYCBjYW5ub3QgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIGZvciBzdHJ1Y3QgYEZvb2AuClRvIGZpeCB0aGlzLCBjcmVhdGUgYSBuZXcgdHJhaXQgdGhhdCBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBkZXNpcmVkIHRyYWl0cyBhbmQKc3BlY2lmeSB0aGUgYXNzb2NpYXRlZCB0eXBlIHdpdGggdGhlIG5ldyB0cmFpdC4KCkNvcnJlY3RlZCBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2JvdW5kcyldCgp0cmFpdCBGb29UcmFpdCB7fQp0cmFpdCBCYXJUcmFpdCB7fQp0cmFpdCBGb29CYXJUcmFpdDogRm9vVHJhaXQgKyBCYXJUcmFpdCB7fQoKc3RydWN0IEZvbzxUOiBJdGVyYXRvcjxJdGVtOiBGb29CYXJUcmFpdD4+IHsgZjogVCB9IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFzc29jaWF0ZWQgdHlwZXMsIHNlZSBbdGhlIGJvb2tdW2JrLWF0XS4gRm9yIG1vcmUKaW5mb3JtYXRpb24gb24gYXNzb2NpYXRlZCB0eXBlIGJvdW5kcywgc2VlIFtSRkMgMjI4OV1bcmZjLTIyODldLgoKW2JrLWF0XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDMtYWR2YW5jZWQtdHJhaXRzLmh0bWwjc3BlY2lmeWluZy1wbGFjZWhvbGRlci10eXBlcy1pbi10cmFpdC1kZWZpbml0aW9ucy13aXRoLWFzc29jaWF0ZWQtdHlwZXMKW3JmYy0yMjg5XTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3JmY3MvMjI4OS1hc3NvY2lhdGVkLXR5cGUtYm91bmRzLmh0bWwKRTA3MjBBbiBgaW1wbCBUcmFpdGAgdHlwZSBleHBhbmRzIHRvIGEgcmVjdXJzaXZlIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzIwCmZuIG1ha2VfcmVjdXJzaXZlX3R5cGUoKSAtPiBpbXBsIFNpemVkIHsKICAgIFttYWtlX3JlY3Vyc2l2ZV90eXBlKCksIG1ha2VfcmVjdXJzaXZlX3R5cGUoKV0KfQpgYGAKCkFuIGBpbXBsIFRyYWl0YCB0eXBlIG11c3QgYmUgZXhwYW5kYWJsZSB0byBhIGNvbmNyZXRlIHR5cGUgdGhhdCBjb250YWlucyBubwpgaW1wbCBUcmFpdGAgdHlwZXMuIEZvciBleGFtcGxlIHRoZSBwcmV2aW91cyBleGFtcGxlIHRyaWVzIHRvIGNyZWF0ZSBhbgpgaW1wbCBUcmFpdGAgdHlwZSBgVGAgdGhhdCBpcyBlcXVhbCB0byBgW1QsIFRdYC4KRTA3MjJUaGUgYG9wdGltaXplYCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjIKIyFbZmVhdHVyZShvcHRpbWl6ZV9hdHRyaWJ1dGUpXQoKI1tvcHRpbWl6ZShzb21ldGhpbmcpXSAvLyBlcnJvcjogaW52YWxpZCBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KYGBgCgpUaGUgYCNbb3B0aW1pemVdYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKCi0gYCNbb3B0aW1pemUoc2l6ZSldYCAtLSBpbnN0cnVjdHMgdGhlIG9wdGltaXphdGlvbiBwaXBlbGluZSB0byBnZW5lcmF0ZSBjb2RlCiAgdGhhdCdzIHNtYWxsZXIgcmF0aGVyIHRoYW4gZmFzdGVyCgotIGAjW29wdGltaXplKHNwZWVkKV1gIC0tIGluc3RydWN0cyB0aGUgb3B0aW1pemF0aW9uIHBpcGVsaW5lIHRvIGdlbmVyYXRlIGNvZGUKICB0aGF0J3MgZmFzdGVyIHJhdGhlciB0aGFuIHNtYWxsZXIKCkZvciBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUob3B0aW1pemVfYXR0cmlidXRlKV0KCiNbb3B0aW1pemUoc2l6ZSldCnB1YiBmbiBzb21ldGhpbmcoKSB7fQpgYGAKClNlZSBbUkZDIDI0MTJdIGZvciBtb3JlIGRldGFpbHMuCgpbUkZDIDI0MTJdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yNDEyLW9wdGltaXplLWF0dHIuaHRtbApFMDcyNGAjW2ZmaV9yZXR1cm5zX3R3aWNlXWAgd2FzIHVzZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYSBmb3JlaWduIGZ1bmN0aW9uCmRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNAojIVtmZWF0dXJlKGZmaV9yZXR1cm5zX3R3aWNlKV0KIyFbY3JhdGVfdHlwZSA9ICJsaWIiXQoKI1tmZmlfcmV0dXJuc190d2ljZV0gLy8gZXJyb3IhCnB1YiBmbiBmb28oKSB7fQpgYGAKCmAjW2ZmaV9yZXR1cm5zX3R3aWNlXWAgY2FuIG9ubHkgYmUgdXNlZCBvbiBmb3JlaWduIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGNvcnJlY3QgdGhlIHByZXZpb3VzIGV4YW1wbGUgYnkgZGVjbGFyaW5nCnRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW7CoGBleHRlcm5gwqBibG9jay4KCmBgYAojIVtmZWF0dXJlKGZmaV9yZXR1cm5zX3R3aWNlKV0KCmV4dGVybiAiQyIgewogICAjW2ZmaV9yZXR1cm5zX3R3aWNlXSAvLyBvayEKICAgcHViIGZuIGZvbygpOwp9CmBgYApFMDcyNUEgZmVhdHVyZSBhdHRyaWJ1dGUgbmFtZWQgYSBmZWF0dXJlIHRoYXQgd2FzIGRpc2FsbG93ZWQgaW4gdGhlIGNvbXBpbGVyCmNvbW1hbmQgbGluZSBmbGFncy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbid0IHNwZWNpZnkgY29tcGlsZXIgZmxhZ3MgZnJvbSBkb2N0ZXN0cykKIyFbZmVhdHVyZShuZXZlcl90eXBlKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBuZXZlcl90eXBlYCBpcyBub3QgaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpc3Qgb2YgYWxsb3dlZCBmZWF0dXJlcwpgYGAKCkRlbGV0ZSB0aGUgb2ZmZW5kaW5nIGZlYXR1cmUgYXR0cmlidXRlLCBvciBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsb3dlZApmZWF0dXJlcyBpbiB0aGUgYC1aIGFsbG93X2ZlYXR1cmVzYCBmbGFnLgpFMDcyN0EgYHlpZWxkYCBjbGF1c2Ugd2FzIHVzZWQgaW4gYW4gYGFzeW5jYCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNyxlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgYXN5bmMgewogICAgICAgICAgICB5aWVsZDsKICAgICAgICB9CiAgICB9Owp9CmBgYAoKSGVyZSwgdGhlIGB5aWVsZGAga2V5d29yZCBpcyB1c2VkIGluIGFuIGBhc3luY2AgYmxvY2ssCndoaWNoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIG1vdmUgYHlpZWxkYCBvdXQgb2YgdGhlIGBhc3luY2AgYmxvY2s6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgeWllbGQ7CiAgICB9Owp9CmBgYApFMDcyOFtgYXdhaXRgXSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgW2Bhc3luY2BdIGZ1bmN0aW9uIG9yIFtgYXN5bmNgXSBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAxOCxjb21waWxlX2ZhaWwsRTA3MjgKIyB1c2Ugc3RkOjpwaW46OlBpbjsKIyB1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKIyB1c2Ugc3RkOjp0YXNrOjp7Q29udGV4dCwgUG9sbH07CiMKIyBzdHJ1Y3QgV2FrZU9uY2VUaGVuQ29tcGxldGUoYm9vbCk7CiMKIyBmbiB3YWtlX2FuZF95aWVsZF9vbmNlKCkgLT4gV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICBXYWtlT25jZVRoZW5Db21wbGV0ZShmYWxzZSkKIyB9CiMKIyBpbXBsIEZ1dHVyZSBmb3IgV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICB0eXBlIE91dHB1dCA9ICgpOwojICAgICBmbiBwb2xsKG11dCBzZWxmOiBQaW48Jm11dCBTZWxmPiwgY3g6ICZtdXQgQ29udGV4dDwnXz4pIC0+IFBvbGw8KCk+IHsKIyAgICAgICAgIGlmIHNlbGYuMCB7CiMgICAgICAgICAgICAgUG9sbDo6UmVhZHkoKCkpCiMgICAgICAgICB9IGVsc2UgewojICAgICAgICAgICAgIGN4Lndha2VyKCkud2FrZV9ieV9yZWYoKTsKIyAgICAgICAgICAgICBzZWxmLjAgPSB0cnVlOwojICAgICAgICAgICAgIFBvbGw6OlBlbmRpbmcKIyAgICAgICAgIH0KIyAgICAgfQojIH0KIwpmbiBmb28oKSB7CiAgICB3YWtlX2FuZF95aWVsZF9vbmNlKCkuYXdhaXQgLy8gYGF3YWl0YCBpcyB1c2VkIG91dHNpZGUgYGFzeW5jYCBjb250ZXh0Cn0KYGBgCgpbYGF3YWl0YF0gaXMgdXNlZCB0byBzdXNwZW5kIHRoZSBjdXJyZW50IGNvbXB1dGF0aW9uIHVudGlsIHRoZSBnaXZlbgpmdXR1cmUgaXMgcmVhZHkgdG8gcHJvZHVjZSBhIHZhbHVlLiBTbyBpdCBpcyBsZWdhbCBvbmx5IHdpdGhpbgphbiBbYGFzeW5jYF0gY29udGV4dCwgbGlrZSBhbiBgYXN5bmNgIGZ1bmN0aW9uIG9yIGFuIGBhc3luY2AgYmxvY2suCgpgYGBlZGl0aW9uMjAxOAojIHVzZSBzdGQ6OnBpbjo6UGluOwojIHVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwojIHVzZSBzdGQ6OnRhc2s6OntDb250ZXh0LCBQb2xsfTsKIwojIHN0cnVjdCBXYWtlT25jZVRoZW5Db21wbGV0ZShib29sKTsKIwojIGZuIHdha2VfYW5kX3lpZWxkX29uY2UoKSAtPiBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIFdha2VPbmNlVGhlbkNvbXBsZXRlKGZhbHNlKQojIH0KIwojIGltcGwgRnV0dXJlIGZvciBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIHR5cGUgT3V0cHV0ID0gKCk7CiMgICAgIGZuIHBvbGwobXV0IHNlbGY6IFBpbjwmbXV0IFNlbGY+LCBjeDogJm11dCBDb250ZXh0PCdfPikgLT4gUG9sbDwoKT4gewojICAgICAgICAgaWYgc2VsZi4wIHsKIyAgICAgICAgICAgICBQb2xsOjpSZWFkeSgoKSkKIyAgICAgICAgIH0gZWxzZSB7CiMgICAgICAgICAgICAgY3gud2FrZXIoKS53YWtlX2J5X3JlZigpOwojICAgICAgICAgICAgIHNlbGYuMCA9IHRydWU7CiMgICAgICAgICAgICAgUG9sbDo6UGVuZGluZwojICAgICAgICAgfQojICAgICB9CiMgfQojCmFzeW5jIGZuIGZvbygpIHsKICAgIHdha2VfYW5kX3lpZWxkX29uY2UoKS5hd2FpdCAvLyBgYXdhaXRgIGlzIHVzZWQgd2l0aGluIGBhc3luY2AgZnVuY3Rpb24KfQoKZm4gYmFyKHg6IHU4KSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSB1OD4gewogICAgYXN5bmMgbW92ZSB7CiAgICAgICAgd2FrZV9hbmRfeWllbGRfb25jZSgpLmF3YWl0OyAvLyBgYXdhaXRgIGlzIHVzZWQgd2l0aGluIGBhc3luY2AgYmxvY2sKICAgICAgICB4CiAgICB9Cn0KYGBgCgpbYGFzeW5jYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXN5bmMuaHRtbApbYGF3YWl0YF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXdhaXQuaHRtbApFMDcyOVN1cHBvcnQgZm9yIE5vbi1MZXhpY2FsIExpZmV0aW1lcyAoTkxMKSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgUnVzdCBjb21waWxlcgpzaW5jZSAxLjMxLCBhbmQgaGFzIGJlZW4gZW5hYmxlZCBvbiB0aGUgMjAxNSBlZGl0aW9uIHNpbmNlIDEuMzYuIFRoZSBuZXcgYm9ycm93CmNoZWNrZXIgZm9yIE5MTCB1bmNvdmVyZWQgc29tZSBidWdzIGluIHRoZSBvbGQgYm9ycm93IGNoZWNrZXIsIHdoaWNoIGluIHNvbWUKY2FzZXMgYWxsb3dlZCB1bnNvdW5kIGNvZGUgdG8gY29tcGlsZSwgcmVzdWx0aW5nIGluIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKIyMjIFdoYXQgZG8gSSBkbz8KCkNoYW5nZSB5b3VyIGNvZGUgc28gdGhlIHdhcm5pbmcgZG9lcyBubyBsb25nZXIgdHJpZ2dlci4gRm9yIGJhY2t3YXJkcwpjb21wYXRpYmlsaXR5LCB0aGlzIHVuc291bmQgY29kZSBtYXkgc3RpbGwgY29tcGlsZSAod2l0aCBhIHdhcm5pbmcpIHJpZ2h0IG5vdy4KSG93ZXZlciwgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCBubyBsb25nZXIgYWNjZXB0IHRoaXMKY29kZSBhbmQgd2lsbCB0aHJvdyBhIGhhcmQgZXJyb3IuCgojIyMgU2hvdWxkbid0IHlvdSBmaXggdGhlIG9sZCBib3Jyb3cgY2hlY2tlcj8KClRoZSBvbGQgYm9ycm93IGNoZWNrZXIgaGFzIGtub3duIHNvdW5kbmVzcyBpc3N1ZXMgdGhhdCBhcmUgYmFzaWNhbGx5IGltcG9zc2libGUKdG8gZml4LiBUaGUgbmV3IE5MTC1iYXNlZCBib3Jyb3cgY2hlY2tlciBpcyB0aGUgZml4LgoKIyMjIENhbiBJIHR1cm4gdGhlc2Ugd2FybmluZ3MgaW50byBlcnJvcnMgYnkgZGVueWluZyBhIGxpbnQ/CgpOby4KCiMjIyBXaGVuIGFyZSB0aGVzZSB3YXJuaW5ncyBnb2luZyB0byB0dXJuIGludG8gZXJyb3JzPwoKTm8gZm9ybWFsIHRpbWVsaW5lIGZvciB0dXJuaW5nIHRoZSB3YXJuaW5ncyBpbnRvIGVycm9ycyBoYXMgYmVlbiBzZXQuIFNlZQpbR2l0SHViIGlzc3VlIDU4NzgxXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzU4NzgxKSBmb3IgbW9yZQppbmZvcm1hdGlvbi4KCiMjIyBXaHkgZG8gSSBnZXQgdGhpcyBtZXNzYWdlIHdpdGggY29kZSB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBib3Jyb3dpbmc/CgpUaGVyZSBhcmUgc29tZSBrbm93biBidWdzIHRoYXQgdHJpZ2dlciB0aGlzIG1lc3NhZ2UuCkUwNzMwQW4gYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aCB3YXMgcGF0dGVybi1tYXRjaGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMApmbiBpc18xMjM8Y29uc3QgTjogdXNpemU+KHg6IFt1MzI7IE5dKSAtPiBib29sIHsKICAgIG1hdGNoIHggewogICAgICAgIFsxLCAyLCAuLl0gPT4gdHJ1ZSwgLy8gZXJyb3I6IGNhbm5vdCBwYXR0ZXJuLW1hdGNoIG9uIGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aAogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgaGF2ZSB0d28gc29sdXRpb25zOgogMS4gVXNlIGFuIGFycmF5IHdpdGggYSBmaXhlZCBsZW5ndGguCiAyLiBVc2UgYSBzbGljZS4KCkV4YW1wbGUgd2l0aCBhbiBhcnJheSB3aXRoIGEgZml4ZWQgbGVuZ3RoOgoKYGBgCmZuIGlzXzEyMyh4OiBbdTMyOyAzXSkgLT4gYm9vbCB7IC8vIFdlIHVzZSBhbiBhcnJheSB3aXRoIGEgZml4ZWQgc2l6ZQogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBvayEKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KYGBgCgpFeGFtcGxlIHdpdGggYSBzbGljZToKCmBgYApmbiBpc18xMjMoeDogJlt1MzJdKSAtPiBib29sIHsgLy8gV2UgdXNlIGEgc2xpY2UKICAgIG1hdGNoIHggewogICAgICAgIFsxLCAyLCAuLl0gPT4gdHJ1ZSwgLy8gb2shCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CmBgYApFMDczMUFuIGVudW0gd2l0aCB0aGUgcmVwcmVzZW50YXRpb24gaGludCBgcmVwcih0cmFuc3BhcmVudClgIGhhZCB6ZXJvIG9yIG1vcmUgdGhhbgpvbmUgdmFyaWFudHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzMxCiNbcmVwcih0cmFuc3BhcmVudCldCmVudW0gU3RhdHVzIHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IGVudW0gbmVlZHMgZXhhY3RseSBvbmUgdmFyaWFudCwgYnV0IGhhcyAyCiAgICBFcnJubyh1MzIpLAogICAgT2ssCn0KYGBgCgpCZWNhdXNlIHRyYW5zcGFyZW50IGVudW1zIGFyZSByZXByZXNlbnRlZCBleGFjdGx5IGxpa2Ugb25lIG9mIHRoZWlyIHZhcmlhbnRzIGF0CnJ1biB0aW1lLCBzYWlkIHZhcmlhbnQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBpcyBubyB2YXJpYW50LCBvcgppZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmFyaWFudHMsIGl0IGlzIG5vdCBjbGVhciBob3cgdGhlIGVudW0gc2hvdWxkIGJlCnJlcHJlc2VudGVkLgpFMDczMkFuIGBlbnVtYCB3aXRoIGEgZGlzY3JpbWluYW50IG11c3Qgc3BlY2lmeSBhIGAjW3JlcHIoaW50dHlwZSldYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzIKIyFbZmVhdHVyZShhcmJpdHJhcnlfZW51bV9kaXNjcmltaW5hbnQpXQoKZW51bSBFbnVtIHsgLy8gZXJyb3IhCiAgICBVbml0ID0gMSwKICAgIFR1cGxlKCkgPSAyLAogICAgU3RydWN0e30gPSAzLAp9CiMgZm4gbWFpbigpIHt9CmBgYAoKQSBgI1tyZXByKGludHR5cGUpXWAgbXVzdCBiZSBwcm92aWRlZCBvbiBhbiBgZW51bWAgaWYgaXQgaGFzIGEgbm9uLXVuaXQKdmFyaWFudCB3aXRoIGEgZGlzY3JpbWluYW50LCBvciB3aGVyZSB0aGVyZSBhcmUgYm90aCB1bml0IHZhcmlhbnRzIHdpdGgKZGlzY3JpbWluYW50cyBhbmQgbm9uLXVuaXQgdmFyaWFudHMuIFRoaXMgcmVzdHJpY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlCmlzIGEgd2VsbC1kZWZpbmVkIHdheSB0byBleHRyYWN0IGEgdmFyaWFudCdzIGRpc2NyaW1pbmFudCBmcm9tIGEgdmFsdWU7CmZvciBpbnN0YW5jZToKCmBgYAojIVtmZWF0dXJlKGFyYml0cmFyeV9lbnVtX2Rpc2NyaW1pbmFudCldCgojW3JlcHIodTgpXQplbnVtIEVudW0gewogICAgVW5pdCA9IDMsCiAgICBUdXBsZSh1MTYpID0gMiwKICAgIFN0cnVjdCB7CiAgICAgICAgYTogdTgsCiAgICAgICAgYjogdTE2LAogICAgfSA9IDEsCn0KCmZuIGRpc2NyaW1pbmFudCh2IDogJkVudW0pIC0+IHU4IHsKICAgIHVuc2FmZSB7ICoodiBhcyAqY29uc3QgRW51bSBhcyAqY29uc3QgdTgpIH0KfQoKZm4gbWFpbigpIHsKICAgIGFzc2VydF9lcSEoMywgZGlzY3JpbWluYW50KCZFbnVtOjpVbml0KSk7CiAgICBhc3NlcnRfZXEhKDIsIGRpc2NyaW1pbmFudCgmRW51bTo6VHVwbGUoNSkpKTsKICAgIGFzc2VydF9lcSEoMSwgZGlzY3JpbWluYW50KCZFbnVtOjpTdHJ1Y3R7YTogNywgYjogMTF9KSk7Cn0KYGBgCkUwNzMzQW4gW2Bhc3luY2BdIGZ1bmN0aW9uIHVzZWQgcmVjdXJzaW9uIHdpdGhvdXQgYm94aW5nLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDczMwphc3luYyBmbiBmb28objogdXNpemUpIHsKICAgIGlmIG4gPiAwIHsKICAgICAgICBmb28obiAtIDEpLmF3YWl0OwogICAgfQp9CmBgYAoKVG8gcGVyZm9ybSBhc3luYyByZWN1cnNpb24sIHRoZSBgYXN5bmMgZm5gIG5lZWRzIHRvIGJlIGRlc3VnYXJlZCBzdWNoIHRoYXQgdGhlCmBGdXR1cmVgIGlzIGV4cGxpY2l0IGluIHRoZSByZXR1cm4gdHlwZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDcyMAp1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKZm4gZm9vX2Rlc3VnYXJlZChuOiB1c2l6ZSkgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gKCk+IHsKICAgIGFzeW5jIG1vdmUgewogICAgICAgIGlmIG4gPiAwIHsKICAgICAgICAgICAgZm9vX2Rlc3VnYXJlZChuIC0gMSkuYXdhaXQ7CiAgICAgICAgfQogICAgfQp9CmBgYAoKRmluYWxseSwgdGhlIGZ1dHVyZSBpcyB3cmFwcGVkIGluIGEgcGlubmVkIGJveDoKCmBgYGVkaXRpb24yMDE4CnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwp1c2Ugc3RkOjpwaW46OlBpbjsKZm4gZm9vX3JlY3Vyc2l2ZShuOiB1c2l6ZSkgLT4gUGluPEJveDxkeW4gRnV0dXJlPE91dHB1dCA9ICgpPj4+IHsKICAgIEJveDo6cGluKGFzeW5jIG1vdmUgewogICAgICAgIGlmIG4gPiAwIHsKICAgICAgICAgICAgZm9vX3JlY3Vyc2l2ZShuIC0gMSkuYXdhaXQ7CiAgICAgICAgfQogICAgfSkKfQpgYGAKClRoZSBgQm94PC4uLj5gIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0IGlzIG9mIGtub3duIHNpemUsIGFuZCB0aGUgcGluIGlzCnJlcXVpcmVkIHRvIGtlZXAgaXQgaW4gdGhlIHNhbWUgcGxhY2UgaW4gbWVtb3J5LgoKW2Bhc3luY2BdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmFzeW5jLmh0bWwKRTA3MzRBIHN0YWJpbGl0eSBhdHRyaWJ1dGUgaGFzIGJlZW4gdXNlZCBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNAojW3J1c3RjX2RlcHJlY2F0ZWQoc2luY2UgPSAiYiIsIHJlYXNvbiA9ICJ0ZXh0IildIC8vIGludmFsaWQKI1tzdGFibGUoZmVhdHVyZSA9ICJhIiwgc2luY2UgPSAiYiIpXSAvLyBpbnZhbGlkCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJiIiwgaXNzdWUgPSAibm9uZSIpXSAvLyBpbnZhbGlkCmZuIGZvbygpe30KYGBgCgpUaGVzZSBhdHRyaWJ1dGVzIGFyZSBtZWFudCB0byBvbmx5IGJlIHVzZWQgYnkgdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGFyZQpyZWplY3RlZCBpbiB5b3VyIG93biBjcmF0ZXMuCkUwNzM1VHlwZSBwYXJhbWV0ZXIgZGVmYXVsdHMgY2Fubm90IHVzZSBgU2VsZmAgb24gc3RydWN0cywgZW51bXMsIG9yIHVuaW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzUKc3RydWN0IEZvbzxYID0gQm94PFNlbGY+PiB7CiAgICBmaWVsZDE6IE9wdGlvbjxYPiwKICAgIGZpZWxkMjogT3B0aW9uPFg+LAp9Ci8vIGVycm9yOiB0eXBlIHBhcmFtZXRlcnMgY2Fubm90IHVzZSBgU2VsZmAgaW4gdGhlaXIgZGVmYXVsdHMuCmBgYApFMDczNmAjW3RyYWNrX2NhbGxlcl1gIGFuZCBgI1tuYWtlZF1gIGNhbm5vdCBib3RoIGJlIGFwcGxpZWQgdG8gdGhlIHNhbWUgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM2CiNbbmFrZWRdCiNbdHJhY2tfY2FsbGVyXQpmbiBmb28oKSB7fQpgYGAKClRoaXMgaXMgcHJpbWFyaWx5IGR1ZSB0byBBQkkgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiB0aGUgdHdvIGF0dHJpYnV0ZXMuClNlZSBbUkZDIDIwOTFdIGZvciBkZXRhaWxzIG9uIHRoaXMgYW5kIG90aGVyIGxpbWl0YXRpb25zLgoKW1JGQyAyMDkxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMjA5MS1pbmxpbmUtc2VtYW50aWMubWQKRTA3MzdgI1t0cmFja19jYWxsZXJdYCByZXF1aXJlcyBmdW5jdGlvbnMgdG8gaGF2ZSB0aGUgYCJSdXN0ImAgQUJJIGZvciBpbXBsaWNpdGx5CnJlY2VpdmluZyBjYWxsZXIgbG9jYXRpb24uIFNlZSBbUkZDIDIwOTFdIGZvciBkZXRhaWxzIG9uIHRoaXMgYW5kIG90aGVyCnJlc3RyaWN0aW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzcKI1t0cmFja19jYWxsZXJdCmV4dGVybiAiQyIgZm4gZm9vKCkge30KYGBgCgpbUkZDIDIwOTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8yMDkxLWlubGluZS1zZW1hbnRpYy5tZApFMDczOWAjW3RyYWNrX2NhbGxlcl1gIGNhbiBub3QgYmUgYXBwbGllZCBvbiBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM5CiNbdHJhY2tfY2FsbGVyXQpzdHJ1Y3QgQmFyIHsKICAgIGE6IHU4LAp9CmBgYAoKW1JGQyAyMDkxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMjA5MS1pbmxpbmUtc2VtYW50aWMubWQKRTA3NDBBIGB1bmlvbmAgd2FzIGRlY2xhcmVkIHdpdGggZmllbGRzIHdpdGggZGVzdHJ1Y3RvcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQwCnVuaW9uIFRlc3QgewogICAgYTogQSwgLy8gZXJyb3IhCn0KCiNbZGVyaXZlKERlYnVnKV0Kc3RydWN0IEEoaTMyKTsKCmltcGwgRHJvcCBmb3IgQSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyBwcmludGxuISgiQSIpOyB9Cn0KYGBgCgpBIGB1bmlvbmAgY2Fubm90IGhhdmUgZmllbGRzIHdpdGggZGVzdHJ1Y3RvcnMuCkUwNzQxQSBub24tc3RydWN0dXJhbC1tYXRjaCB0eXBlIHdhcyB1c2VkIGFzIHRoZSB0eXBlIG9mIGEgY29uc3QgZ2VuZXJpYyBwYXJhbWV0ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQxCiMhW2ZlYXR1cmUoYWR0X2NvbnN0X3BhcmFtcyldCgpzdHJ1Y3QgQTsKCnN0cnVjdCBCPGNvbnN0IFg6IEE+OyAvLyBlcnJvciEKYGBgCgpPbmx5IHN0cnVjdHVyYWwtbWF0Y2ggdHlwZXMgKHRoYXQgaXMsIHR5cGVzIHRoYXQgZGVyaXZlIGBQYXJ0aWFsRXFgIGFuZCBgRXFgKQptYXkgYmUgdXNlZCBhcyB0aGUgdHlwZXMgb2YgY29uc3QgZ2VuZXJpYyBwYXJhbWV0ZXJzLgoKVG8gZml4IHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUsIHdlIGRlcml2ZSBgUGFydGlhbEVxYCBhbmQgYEVxYDoKCmBgYAojIVtmZWF0dXJlKGFkdF9jb25zdF9wYXJhbXMpXQoKI1tkZXJpdmUoUGFydGlhbEVxLCBFcSldIC8vIFdlIGRlcml2ZSBib3RoIHRyYWl0cyBoZXJlLgpzdHJ1Y3QgQTsKCnN0cnVjdCBCPGNvbnN0IFg6IEE+OyAvLyBvayEKYGBgCkUwNzQyVmlzaWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIGEgbW9kdWxlIHdoaWNoIGlzbid0IGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50Cml0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQyLGVkaXRpb24yMDE4CnB1YiBtb2QgU2VhIHt9CgpwdWIgKGluIGNyYXRlOjpTZWEpIHN0cnVjdCBTaGFyazsgLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgd2UgbmVlZCB0byBtb3ZlIHRoZSBgU2hhcmtgIHN0cnVjdCBpbnNpZGUgdGhlIGBTZWFgIG1vZHVsZToKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgU2VhIHsKICAgIHB1YiAoaW4gY3JhdGU6OlNlYSkgc3RydWN0IFNoYXJrOyAvLyBvayEKfQoKZm4gbWFpbigpIHt9CmBgYAoKT2YgY291cnNlLCB5b3UgY2FuIGRvIGl0IGFzIGxvbmcgYXMgdGhlIG1vZHVsZSB5b3UncmUgcmVmZXJyaW5nIHRvIGlzIGFuCmFuY2VzdG9yOgoKYGBgZWRpdGlvbjIwMTgKcHViIG1vZCBFYXJ0aCB7CiAgICBwdWIgbW9kIFNlYSB7CiAgICAgICAgcHViIChpbiBjcmF0ZTo6RWFydGgpIHN0cnVjdCBTaGFyazsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKRTA3NDNUaGUgQy12YXJpYWRpYyB0eXBlIGAuLi5gIGhhcyBiZWVuIG5lc3RlZCBpbnNpZGUgYW5vdGhlciB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0MwojIVtmZWF0dXJlKGNfdmFyaWFkaWMpXQoKZm4gZm9vMih4OiB1OCwgeTogJi4uLikge30gLy8gZXJyb3IhCmBgYAoKT25seSBmb3JlaWduIGZ1bmN0aW9ucyBjYW4gdXNlIHRoZSBDLXZhcmlhZGljIHR5cGUgKGAuLi5gKS4gSW4gc3VjaCBmdW5jdGlvbnMsCmAuLi5gIG1heSBvbmx5IG9jY3VyIG5vbi1uZXN0ZWQuIFRoYXQgaXMsIGB5OiAmJ2EgLi4uYCBpcyBub3QgYWxsb3dlZC4KCkEgQy12YXJpYWRpYyB0eXBlIGlzIHVzZWQgdG8gZ2l2ZSBhbiB1bmRlZmluZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdG8gYSBnaXZlbgpmdW5jdGlvbiAobGlrZSBgcHJpbnRmYCBpbiBDKS4gVGhlIGVxdWl2YWxlbnQgaW4gUnVzdCB3b3VsZCBiZSB0byB1c2UgbWFjcm9zCmRpcmVjdGx5IChsaWtlIGBwcmludGxuIWAgZm9yIGV4YW1wbGUpLgpFMDc0NEFuIHVuc3VwcG9ydGVkIGV4cHJlc3Npb24gd2FzIHVzZWQgaW5zaWRlIGEgY29uc3QgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA3NDQKY29uc3QgXzogaTMyID0gewogICAgYXN5bmMgeyAwIH0uYXdhaXQKfTsKYGBgCgpBdCB0aGUgbW9tZW50LCBgLmF3YWl0YCBpcyBmb3JiaWRkZW4gaW5zaWRlIGEgYGNvbnN0YCwgYHN0YXRpY2AsIG9yIGBjb25zdCBmbmAuCgpUaGlzIG1heSBiZSBhbGxvd2VkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QKeWV0IGNvbXBsZXRlLiBTZWUgdGhlIHRyYWNraW5nIGlzc3VlIGZvciBbYGFzeW5jYF0gaW4gYGNvbnN0IGZuYC4KCltgYXN5bmNgXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy82OTQzMQpFMDc0NVRoZSBhZGRyZXNzIG9mIHRlbXBvcmFyeSB2YWx1ZSB3YXMgdGFrZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ1CiMgIyFbZmVhdHVyZShyYXdfcmVmX29wKV0KZm4gdGVtcF9hZGRyZXNzKCkgewogICAgbGV0IHB0ciA9ICZyYXcgY29uc3QgMjsgLy8gZXJyb3IhCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGAyYCBpcyBkZXN0cm95ZWQgcmlnaHQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIG1lYW5zIHRoYXQKYHB0cmAgbm93IHBvaW50cyB0byBhbiB1bmF2YWlsYWJsZSBsb2NhdGlvbi4KClRvIGF2b2lkIHRoaXMgZXJyb3IsIGZpcnN0IGJpbmQgdGhlIHRlbXBvcmFyeSB0byBhIG5hbWVkIGxvY2FsIHZhcmlhYmxlOgoKYGBgCiMgIyFbZmVhdHVyZShyYXdfcmVmX29wKV0KZm4gdGVtcF9hZGRyZXNzKCkgewogICAgbGV0IHZhbCA9IDI7CiAgICBsZXQgcHRyID0gJnJhdyBjb25zdCB2YWw7IC8vIG9rIQp9CmBgYApFMDc0NkFuIHVuYm94ZWQgdHJhaXQgb2JqZWN0IHdhcyB1c2VkIGFzIGEgcmV0dXJuIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0Ngp0cmFpdCBUIHsKICAgIGZuIGJhcigmc2VsZik7Cn0Kc3RydWN0IFModXNpemUpOwppbXBsIFQgZm9yIFMgewogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgovLyBIYXZpbmcgdGhlIHRyYWl0IGBUYCBhcyByZXR1cm4gdHlwZSBpcyBpbnZhbGlkIGJlY2F1c2UKLy8gdW5ib3hlZCB0cmFpdCBvYmplY3RzIGRvIG5vdCBoYXZlIGEgc3RhdGljYWxseSBrbm93biBzaXplOgpmbiBmb28oKSAtPiBkeW4gVCB7IC8vIGVycm9yIQogICAgUyg0MikKfQpgYGAKClJldHVybiB0eXBlcyBjYW5ub3QgYmUgYGR5biBUcmFpdGBzIGFzIHRoZXkgbXVzdCBiZSBgU2l6ZWRgLgoKVG8gYXZvaWQgdGhlIGVycm9yIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBvcHRpb25zLgoKSWYgdGhlcmUgaXMgYSBzaW5nbGUgdHlwZSBpbnZvbHZlZCwgeW91IGNhbiB1c2UgW2BpbXBsIFRyYWl0YF06CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9Ci8vIFRoZSBjb21waWxlciB3aWxsIHNlbGVjdCBgUyh1c2l6ZSlgIGFzIHRoZSBtYXRlcmlhbGl6ZWQgcmV0dXJuIHR5cGUgb2YgdGhpcwovLyBmdW5jdGlvbiwgYnV0IGNhbGxlcnMgd2lsbCBvbmx5IGtub3cgdGhhdCB0aGUgcmV0dXJuIHR5cGUgaW1wbGVtZW50cyBgVGAuCmZuIGZvbygpIC0+IGltcGwgVCB7IC8vIG9rIQogICAgUyg0MikKfQpgYGAKCklmIHRoZXJlIGFyZSBtdWx0aXBsZSB0eXBlcyBpbnZvbHZlZCwgdGhlIG9ubHkgd2F5IHlvdSBjYXJlIHRvIGludGVyYWN0IHdpdGgKdGhlbSBpcyB0aHJvdWdoIHRoZSB0cmFpdCdzIGludGVyZmFjZSwgYW5kIGhhdmluZyB0byByZWx5IG9uIGR5bmFtaWMgZGlzcGF0Y2gKaXMgYWNjZXB0YWJsZSwgdGhlbiB5b3UgY2FuIHVzZSBbdHJhaXQgb2JqZWN0c10gd2l0aCBgQm94YCwgb3Igb3RoZXIgY29udGFpbmVyCnR5cGVzIGxpa2UgYFJjYCBvciBgQXJjYDoKCmBgYAojIHRyYWl0IFQgewojICAgICBmbiBiYXIoJnNlbGYpOwojIH0KIyBzdHJ1Y3QgUyh1c2l6ZSk7CiMgaW1wbCBUIGZvciBTIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0Kc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKaW1wbCBUIGZvciBPIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKLy8gVGhpcyBub3cgcmV0dXJucyBhICJ0cmFpdCBvYmplY3QiIGFuZCBjYWxsZXJzIGFyZSBvbmx5IGJlIGFibGUgdG8gYWNjZXNzCi8vIGFzc29jaWF0ZWQgaXRlbXMgZnJvbSBgVGAuCmZuIGZvbyh4OiBib29sKSAtPiBCb3g8ZHluIFQ+IHsgLy8gb2shCiAgICBpZiB4IHsKICAgICAgICBCb3g6Om5ldyhTKDQyKSkKICAgIH0gZWxzZSB7CiAgICAgICAgQm94OjpuZXcoTygidmFsIikpCiAgICB9Cn0KYGBgCgpGaW5hbGx5LCBpZiB5b3Ugd2lzaCB0byBzdGlsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgdHlwZSwgeW91IGNhbgpjcmVhdGUgYSBuZXcgYGVudW1gIHdpdGggYSB2YXJpYW50IGZvciBlYWNoIHR5cGU6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CiMgc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKIyBpbXBsIFQgZm9yIE8gewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQplbnVtIEUgewogICAgUyhTKSwKICAgIE8oTyksCn0KCi8vIFRoZSBjYWxsZXIgY2FuIGFjY2VzcyB0aGUgb3JpZ2luYWwgdHlwZXMgZGlyZWN0bHksIGJ1dCBpdCBuZWVkcyB0byBtYXRjaCBvbgovLyB0aGUgcmV0dXJuZWQgYGVudW0gRWAuCmZuIGZvbyh4OiBib29sKSAtPiBFIHsKICAgIGlmIHggewogICAgICAgIEU6OlMoUyg0MikpCiAgICB9IGVsc2UgewogICAgICAgIEU6Ok8oTygidmFsIikpCiAgICB9Cn0KYGBgCgpZb3UgY2FuIGV2ZW4gaW1wbGVtZW50IHRoZSBgdHJhaXRgIG9uIHRoZSByZXR1cm5lZCBgZW51bWAgc28gdGhlIGNhbGxlcnMKKmRvbid0KiBoYXZlIHRvIG1hdGNoIG9uIHRoZSByZXR1cm5lZCB2YWx1ZSB0byBpbnZva2UgdGhlIGFzc29jaWF0ZWQgaXRlbXM6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CiMgc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKIyBpbXBsIFQgZm9yIE8gewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIGVudW0gRSB7CiMgICAgIFMoUyksCiMgICAgIE8oTyksCiMgfQppbXBsIFQgZm9yIEUgewogICAgZm4gYmFyKCZzZWxmKSB7CiAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgIEU6OlMocykgPT4gcy5iYXIoKSwKICAgICAgICAgICAgRTo6TyhvKSA9PiBvLmJhcigpLAogICAgICAgIH0KICAgIH0KfQpgYGAKCklmIHlvdSBkZWNpZGUgdG8gdXNlIHRyYWl0IG9iamVjdHMsIGJlIGF3YXJlIHRoYXQgdGhlc2UgcmVseSBvbgpbZHluYW1pYyBkaXNwYXRjaF0sIHdoaWNoIGhhcyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFzIHRoZSBjb21waWxlciBuZWVkcwp0byBlbWl0IGNvZGUgdGhhdCB3aWxsIGZpZ3VyZSBvdXQgd2hpY2ggbWV0aG9kIHRvIGNhbGwgKmF0IHJ1bnRpbWUqIGluc3RlYWQgb2YKZHVyaW5nIGNvbXBpbGF0aW9uLiBVc2luZyB0cmFpdCBvYmplY3RzIHdlIGFyZSB0cmFkaW5nIGZsZXhpYmlsaXR5IGZvcgpwZXJmb3JtYW5jZS4KCltgaW1wbCBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMi10cmFpdHMuaHRtbCNyZXR1cm5pbmctdHlwZXMtdGhhdC1pbXBsZW1lbnQtdHJhaXRzClt0cmFpdCBvYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbZHluYW1pYyBkaXNwYXRjaF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE3LTAyLXRyYWl0LW9iamVjdHMuaHRtbCN0cmFpdC1vYmplY3RzLXBlcmZvcm0tZHluYW1pYy1kaXNwYXRjaApFMDc0N0dlbmVyaWMgYXJndW1lbnRzIHdlcmUgbm90IHByb3ZpZGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjb3JyZXNwb25kaW5nCmdlbmVyaWMgcGFyYW1ldGVycyBhcmUgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ3CnN0cnVjdCBTPCdhLCBUPigmJ2EgVCk7Cgp0eXBlIFggPSBTPCgpLCAnc3RhdGljPjsgLy8gZXJyb3I6IHRoZSB0eXBlIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGJlZm9yZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpZmV0aW1lIGFyZ3VtZW50CmBgYAoKVGhlIGFyZ3VtZW50IG9yZGVyIHNob3VsZCBiZSBjaGFuZ2VkIHRvIG1hdGNoIHRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24Kb3JkZXIsIGFzIGluIHRoZSBmb2xsb3dpbmc6CgpgYGAKc3RydWN0IFM8J2EsIFQ+KCYnYSBUKTsKCnR5cGUgWCA9IFM8J3N0YXRpYywgKCk+OyAvLyBvawpgYGAKRTA3NDhBIHJhdyBzdHJpbmcgaXNuJ3QgY29ycmVjdGx5IHRlcm1pbmF0ZWQgYmVjYXVzZSB0aGUgdHJhaWxpbmcgYCNgIGNvdW50IGRvZXNuJ3QKbWF0Y2ggaXRzIGxlYWRpbmcgYCNgIGNvdW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0OApsZXQgZG9scGhpbnMgPSByIyMiRG9scGhpbnMhIiM7IC8vIGVycm9yIQpgYGAKClRvIHRlcm1pbmF0ZSBhIHJhdyBzdHJpbmcsIHlvdSBoYXZlIHRvIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGAjYCBhdCB0aGUgZW5kCmFzIGF0IHRoZSBiZWdpbm5pbmcuIEV4YW1wbGU6CgpgYGAKbGV0IGRvbHBoaW5zID0gciMiRG9scGhpbnMhIiM7IC8vIE9uZSBgI2AgYXQgdGhlIGJlZ2lubmluZywgb25lIGF0IHRoZSBlbmQgc28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBnb29kIQpgYGAKRTA3NDlBbiBpdGVtIHdhcyBhZGRlZCBvbiBhIG5lZ2F0aXZlIGltcGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ5CiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmltcGwgIU15VHJhaXQgZm9yIHUzMiB7CiAgICB0eXBlIEZvbyA9IGkzMjsgLy8gZXJyb3IhCn0KYGBgCgpOZWdhdGl2ZSBpbXBscyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBhbnkgaXRlbXMuIE5lZ2F0aXZlIGltcGxzIGRlY2xhcmUgdGhhdCBhCnRyYWl0IGlzICoqbm90KiogaW1wbGVtZW50ZWQgKGFuZCBuZXZlciB3aWxsIGJlKSBhbmQgaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0bwpzcGVjaWZ5IHRoZSB2YWx1ZXMgZm9yIHRyYWl0IG1ldGhvZHMgb3Igb3RoZXIgaXRlbXMuCgpPbmUgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgaXRlbXMgaW4gbmVnYXRpdmUgaW1wbHM6CgpgYGAKIyAjIVtmZWF0dXJlKG5lZ2F0aXZlX2ltcGxzKV0KdHJhaXQgTXlUcmFpdCB7CiAgICB0eXBlIEZvbzsKfQoKaW1wbCAhTXlUcmFpdCBmb3IgdTMyIHt9CmBgYApFMDc1MEEgbmVnYXRpdmUgaW1wbCB3YXMgbWFkZSBkZWZhdWx0IGltcGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUwCiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCiMgIyFbZmVhdHVyZShzcGVjaWFsaXphdGlvbildCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmRlZmF1bHQgaW1wbCAhTXlUcmFpdCBmb3IgdTMyIHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKCk5lZ2F0aXZlIGltcGxzIGNhbm5vdCBiZSBkZWZhdWx0IGltcGxzLiBBIGRlZmF1bHQgaW1wbCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcwpmb3IgdGhlIGl0ZW1zIHdpdGhpbiB0byBiZSB1c2VkIGJ5IG90aGVyIGltcGxzLCB3aGVyZWFzIGEgbmVnYXRpdmUgaW1wbCBkZWNsYXJlcwp0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBpbXBscy4gQ29tYmluaW5nIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UuCkUwNzUxVGhlcmUgYXJlIGJvdGggYSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdHJhaXQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzYW1lIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUxCnRyYWl0IE15VHJhaXQge30KaW1wbCBNeVRyYWl0IGZvciBpMzIgeyB9CmltcGwgIU15VHJhaXQgZm9yIGkzMiB7IH0gLy8gZXJyb3IhCmBgYAoKTmVnYXRpdmUgaW1wbGVtZW50YXRpb25zIGFyZSBhIHByb21pc2UgdGhhdCB0aGUgdHJhaXQgd2lsbCBuZXZlciBiZSBpbXBsZW1lbnRlZApmb3IgdGhlIGdpdmVuIHR5cGVzLiBUaGVyZWZvcmUsIGJvdGggY2Fubm90IGV4aXN0cyBhdCB0aGUgc2FtZSB0aW1lLgpFMDc1MlRoZSBlbnRyeSBwb2ludCBvZiB0aGUgcHJvZ3JhbSB3YXMgbWFya2VkIGFzIGBhc3luY2AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUyCmFzeW5jIGZuIG1haW4oKSAtPiBSZXN1bHQ8KCksICgpPiB7IC8vIGVycm9yIQogICAgT2soKCkpCn0KYGBgCgpgZm4gbWFpbigpYCBvciB0aGUgc3BlY2lmaWVkIHN0YXJ0IGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGBhc3luY2AuIE5vdApoYXZpbmcgYSBjb3JyZWN0IGFzeW5jIHJ1bnRpbWUgbGlicmFyeSBzZXR1cCBtYXkgY2F1c2UgdGhpcyBlcnJvci4gVG8gZml4IGl0LApkZWNsYXJlIHRoZSBlbnRyeSBwb2ludCB3aXRob3V0IGBhc3luY2A6CgpgYGAKZm4gbWFpbigpIC0+IFJlc3VsdDwoKSwgKCk+IHsgLy8gb2shCiAgICBPaygoKSkKfQpgYGAKRTA3NTNBbiBpbm5lciBkb2MgY29tbWVudCB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUzCmZuIGZvbygpIHt9Ci8vISBmb28KLy8gXiBlcnJvciEKZm4gbWFpbigpIHt9CmBgYAoKSW5uZXIgZG9jdW1lbnQgY2FuIG9ubHkgYmUgdXNlZCBiZWZvcmUgaXRlbXMuIEZvciBleGFtcGxlOgoKYGBgCi8vISBBIHdvcmtpbmcgY29tbWVudCBhcHBsaWVkIHRvIHRoZSBtb2R1bGUhCmZuIGZvbygpIHsKICAgIC8vISBBbm90aGVyIHdvcmtpbmcgY29tbWVudCEKfQpmbiBtYWluKCkge30KYGBgCgpJbiBjYXNlIHlvdSB3YW50IHRvIGRvY3VtZW50IHRoZSBpdGVtIGZvbGxvd2luZyB0aGUgZG9jIGNvbW1lbnQsIHlvdSBtaWdodCB3YW50CnRvIHVzZSBvdXRlciBkb2MgY29tbWVudDoKCmBgYAovLy8gSSBhbSBhbiBvdXRlciBkb2MgY29tbWVudAojW2RvYyA9ICJJIGFtIGFsc28gYW4gb3V0ZXIgZG9jIGNvbW1lbnQhIl0KZm4gZm9vKCkgewogICAgLy8gLi4uCn0KYGBgCkUwNzU0QSBub24tQVNDSUkgaWRlbnRpZmllciB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NAoKbW9kIMWZxbPFm8WlOyAvLyBlcnJvciEKCiNbbm9fbWFuZ2xlXQpmbiDFmcWzxZvFpSgpIHt9IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKTm9uLUFTQ0lJIGNhbiBiZSB1c2VkIGFzIG1vZHVsZSBuYW1lcyBpZiBpdCBpcyBpbmxpbmVkIG9yIGlmIGEgYCNbcGF0aF1gCmF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQuIEZvciBleGFtcGxlOgoKYGBgCm1vZCDFmcWzxZvFpSB7IC8vIG9rIQogICAgY29uc3QgSVNfR1JFQVQ6IGJvb2wgPSB0cnVlOwp9CgpmbiBtYWluKCkge30KYGBgCkUwNzU1VGhlIGBmZmlfcHVyZWAgYXR0cmlidXRlIHdhcyB1c2VkIG9uIGEgbm9uLWZvcmVpZ24gZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU1CiMhW2ZlYXR1cmUoZmZpX3B1cmUpXQoKI1tmZmlfcHVyZV0gLy8gZXJyb3IhCnB1YiBmbiBmb28oKSB7fQojIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgZmZpX3B1cmVgIGF0dHJpYnV0ZSBjYW4gb25seSBiZSB1c2VkIG9uIGZvcmVpZ24gZnVuY3Rpb25zIHdoaWNoIGRvIG5vdCBoYXZlCnNpZGUgZWZmZWN0cyBvciBpbmZpbml0ZSBsb29wczoKCmBgYAojIVtmZWF0dXJlKGZmaV9wdXJlKV0KCmV4dGVybiAiQyIgewogICAgI1tmZmlfcHVyZV0gLy8gb2shCiAgICBwdWIgZm4gc3RybGVuKHM6ICpjb25zdCBpOCkgLT4gaXNpemU7Cn0KIyBmbiBtYWluKCkge30KYGBgCgpZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdCBpbiB0aGUgW3Vuc3RhYmxlIFJ1c3QgQm9va10uCgpbdW5zdGFibGUgUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2ZmaS1wdXJlLmh0bWwKRTA3NTZUaGUgYGZmaV9jb25zdGAgYXR0cmlidXRlIHdhcyB1c2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZm9yZWlnbiBmdW5jdGlvbgpkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTYKIyFbZmVhdHVyZShmZmlfY29uc3QpXQoKI1tmZmlfY29uc3RdIC8vIGVycm9yIQpwdWIgZm4gZm9vKCkge30KIyBmbiBtYWluKCkge30KYGBgCgpUaGUgYGZmaV9jb25zdGAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHVzZWQgb24gZm9yZWlnbiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKd2hpY2ggaGF2ZSBubyBzaWRlIGVmZmVjdHMgZXhjZXB0IGZvciB0aGVpciByZXR1cm4gdmFsdWU6CgpgYGAKIyFbZmVhdHVyZShmZmlfY29uc3QpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2ZmaV9jb25zdF0gLy8gb2shCiAgICBwdWIgZm4gc3RybGVuKHM6ICpjb25zdCBpOCkgLT4gaTMyOwp9CiMgZm4gbWFpbigpIHt9CmBgYAoKWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdCBpbiB0aGUgW3Vuc3RhYmxlIFJ1c3QgQm9va10uCgpbdW5zdGFibGUgUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvZmZpLWNvbnN0Lmh0bWwKRTA3NTdBIGZ1bmN0aW9uIHdhcyBnaXZlbiBib3RoIHRoZSBgZmZpX2NvbnN0YCBhbmQgYGZmaV9wdXJlYCBhdHRyaWJ1dGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NwojIVtmZWF0dXJlKGZmaV9jb25zdCwgZmZpX3B1cmUpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2ZmaV9jb25zdF0KICAgICNbZmZpX3B1cmVdIC8vIGVycm9yOiBgI1tmZmlfY29uc3RdYCBmdW5jdGlvbiBjYW5ub3QgYmUgYCNbZmZpX3B1cmVdYAogICAgcHViIGZuIHNxdWFyZShudW06IGkzMikgLT4gaTMyOwp9CmBgYAoKQXMgYGZmaV9jb25zdGAgcHJvdmlkZXMgc3Ryb25nZXIgZ3VhcmFudGVlcyB0aGFuIGBmZmlfcHVyZWAsIHJlbW92ZSB0aGUKYGZmaV9wdXJlYCBhdHRyaWJ1dGU6CgpgYGAKIyFbZmVhdHVyZShmZmlfY29uc3QpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2ZmaV9jb25zdF0KICAgIHB1YiBmbiBzcXVhcmUobnVtOiBpMzIpIC0+IGkzMjsKfQpgYGAKCllvdSBjYW4gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYGNvbnN0YCBhbmQgYHB1cmVgIGluIHRoZSBbR0NDIGRvY3VtZW50YXRpb24Kb24gQ29tbW9uIEZ1bmN0aW9uIEF0dHJpYnV0ZXNdLiBUaGUgdW5zdGFibGUgUnVzdCBCb29rIGhhcyBtb3JlIGluZm9ybWF0aW9uCmFib3V0IFtgZmZpX2NvbnN0YF0gYW5kIFtgZmZpX3B1cmVgXS4KCltHQ0MgZG9jdW1lbnRhdGlvbiBvbiBDb21tb24gRnVuY3Rpb24gQXR0cmlidXRlc106IGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvQ29tbW9uLUZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbApbYGZmaV9jb25zdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25pZ2h0bHkvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9mZmktY29uc3QuaHRtbApbYGZmaV9wdXJlYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2ZmaS1wdXJlLmh0bWwKRTA3NThBIG11bHRpLWxpbmUgKGRvYy0pY29tbWVudCBpcyB1bnRlcm1pbmF0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU4Ci8qIEkgYW0gbm90IHRlcm1pbmF0ZWQhCmBgYAoKVGhlIHNhbWUgZ29lcyBmb3IgZG9jIGNvbW1lbnRzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU4Ci8qISBJIGFtIG5vdCB0ZXJtaW5hdGVkIQpgYGAKCllvdSBuZWVkIHRvIGVuZCB5b3VyIG11bHRpLWxpbmUgY29tbWVudCB3aXRoIGAqL2AgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3I6CgpgYGAKLyogSSBhbSB0ZXJtaW5hdGVkISAqLwovKiEgSSBhbSBhbHNvIHRlcm1pbmF0ZWQhICovCmBgYApFMDc1OVJldHVybiB0eXBlIGludm9sdmluZyBhIHRyYWl0IGRpZCBub3QgcmVxdWlyZSBgJ3N0YXRpY2AgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDc1OQp1c2Ugc3RkOjpmbXQ6OkRlYnVnOwoKZm4gZm9vKHg6ICZpMzIpIC0+IGltcGwgRGVidWcgeyAvLyBlcnJvciEKICAgIHgKfQoKZm4gYmFyKHg6ICZpMzIpIC0+IEJveDxkeW4gRGVidWc+IHsgLy8gZXJyb3IhCiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKQWRkIGAnc3RhdGljYCByZXF1aXJlbWVudCB0byBmaXggdGhlbToKCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmJ3N0YXRpYyBpMzIpIC0+IGltcGwgRGVidWcgKyAnc3RhdGljIHsgLy8gb2shCiAgICB4Cn0KCmZuIGJhcih4OiAmJ3N0YXRpYyBpMzIpIC0+IEJveDxkeW4gRGVidWcgKyAnc3RhdGljPiB7IC8vIG9rIQogICAgQm94OjpuZXcoeCkKfQpgYGAKCkJvdGggW2BkeW4gVHJhaXRgXSBhbmQgW2BpbXBsIFRyYWl0YF0gaW4gcmV0dXJuIHR5cGVzIGhhdmUgYW4gaW1wbGljaXQKYCdzdGF0aWNgIHJlcXVpcmVtZW50LCBtZWFuaW5nIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudGluZyB0aGVtIHRoYXQgaXMgYmVpbmcKcmV0dXJuZWQgaGFzIHRvIGJlIGVpdGhlciBhIGAnc3RhdGljYCBib3Jyb3cgb3IgYW4gb3duZWQgdmFsdWUuCgpJbiBvcmRlciB0byBjaGFuZ2UgdGhlIHJlcXVpcmVtZW50IGZyb20gYCdzdGF0aWNgIHRvIGJlIGEgbGlmZXRpbWUgZGVyaXZlZCBmcm9tCml0cyBhcmd1bWVudHMsIHlvdSBjYW4gYWRkIGFuIGV4cGxpY2l0IGJvdW5kLCBlaXRoZXIgdG8gYW4gYW5vbnltb3VzIGxpZmV0aW1lCmAnX2Agb3Igc29tZSBhcHByb3ByaWF0ZSBuYW1lZCBsaWZldGltZS4KCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmaTMyKSAtPiBpbXBsIERlYnVnICsgJ18gewogICAgeAp9CmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ18+IHsKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGV4cGxpY2l0IGxpZmV0aW1lIGFubm90YXRpb25zOgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vPCdhPih4OiAmJ2EgaTMyKSAtPiBpbXBsIERlYnVnICsgJ2EgewogICAgeAp9CmZuIGJhcjwnYT4oeDogJidhIGkzMikgLT4gQm94PGR5biBEZWJ1ZyArICdhPiB7CiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKW2BkeW4gVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwpFMDc2MGBhc3luYyBmbmAvYGltcGwgdHJhaXRgIHJldHVybiB0eXBlIGNhbm5vdCBjb250YWluIGEgcHJvamVjdGlvbgpvciBgU2VsZmAgdGhhdCByZWZlcmVuY2VzIGxpZmV0aW1lcyBmcm9tIGEgcGFyZW50IHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2MCxlZGl0aW9uMjAxOApzdHJ1Y3QgUzwnYT4oJidhIGkzMik7CgppbXBsPCdhPiBTPCdhPiB7CiAgICBhc3luYyBmbiBuZXcoaTogJidhIGkzMikgLT4gU2VsZiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciB3ZSBuZWVkIHRvIHNwZWxsIG91dCBgU2VsZmAgdG8gYFM8J2E+YDoKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBTPCdhPigmJ2EgaTMyKTsKCmltcGw8J2E+IFM8J2E+IHsKICAgIGFzeW5jIGZuIG5ldyhpOiAmJ2EgaTMyKSAtPiBTPCdhPiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgYmUgYWxsb3dlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldCBjb21wbGV0ZS4KU2VlIHRoZSBbaXNzdWUtNjE5NDldIGZvciB0aGlzIGxpbWl0YXRpb24uCgpbaXNzdWUtNjE5NDldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzYxOTQ5CkUwNzYxTXVsdGlwbGUgY2FuZGlkYXRlIGZpbGVzIHdlcmUgZm91bmQgZm9yIGFuIG91dC1vZi1saW5lIG1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKE11bHRpcGxlIHNvdXJjZSBmaWxlcyBhcmUgcmVxdWlyZWQgZm9yIGNvbXBpbGVfZmFpbC4pCi8vIGZpbGU6IGFtYmlndW91c19tb2R1bGUvbW9kLnJzCgpmbiBmb28oKSB7fQoKLy8gZmlsZTogYW1iaWd1b3VzX21vZHVsZS5ycwoKZm4gZm9vKCkge30KCi8vIGZpbGU6IGxpYi5ycwoKbW9kIGFtYmlndW91c19tb2R1bGU7IC8vIGVycm9yOiBmaWxlIGZvciBtb2R1bGUgYGFtYmlndW91c19tb2R1bGVgCiAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhdCBib3RoIGFtYmlndW91c19tb2R1bGUucnMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAvLyBhbWJpZ3VvdXNfbW9kdWxlLnJzL21vZC5ycwpgYGAKClBsZWFzZSByZW1vdmUgdGhpcyBhbWJpZ3VpdHkgYnkgZGVsZXRpbmcvcmVuYW1pbmcgb25lIG9mIHRoZSBjYW5kaWRhdGUgZmlsZXMuCkUwNzYyQSBjaGFyYWN0ZXIgbGl0ZXJhbCB3YXNuJ3QgZW5kZWQgd2l0aCBhIHF1b3RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2MgpzdGF0aWMgQzogY2hhciA9ICfil487IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgcXVvdGU6CgpgYGAKc3RhdGljIEM6IGNoYXIgPSAn4pePJzsgLy8gb2shCmBgYApFMDc2M0EgYnl0ZSBjb25zdGFudCB3YXNuJ3QgY29ycmVjdGx5IGVuZGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2MwpsZXQgYyA9IGInYTsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBxdW90ZToKCmBgYApsZXQgYyA9IGInYSc7IC8vIG9rIQpgYGAKRTA3NjRBIG11dGFibGUgcmVmZXJlbmNlIHdhcyB1c2VkIGluIGEgY29uc3RhbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY0CiMhW2ZlYXR1cmUoY29uc3RfbXV0X3JlZnMpXQoKZm4gbWFpbigpIHsKICAgIGNvbnN0IE9IX05POiAmJ3N0YXRpYyBtdXQgdXNpemUgPSAmbXV0IDE7IC8vIGVycm9yIQp9CmBgYAoKTXV0YWJsZSByZWZlcmVuY2VzIChgJm11dGApIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uc3RhbnQgZnVuY3Rpb25zLCBub3Qgc3RhdGljcwpvciBjb25zdGFudHMuIFRoaXMgbGltaXRhdGlvbiBleGlzdHMgdG8gcHJldmVudCB0aGUgY3JlYXRpb24gb2YgY29uc3RhbnRzIHRoYXQKaGF2ZSBhIG11dGFibGUgcmVmZXJlbmNlIGluIHRoZWlyIGZpbmFsIHZhbHVlLiBJZiB5b3UgaGFkIGEgY29uc3RhbnQgb2YKYCZtdXQgaTMyYCB0eXBlLCB5b3UgY291bGQgbW9kaWZ5IHRoZSB2YWx1ZSB0aHJvdWdoIHRoYXQgcmVmZXJlbmNlLCBtYWtpbmcgdGhlCmNvbnN0YW50IGVzc2VudGlhbGx5IG11dGFibGUuCgpXaGlsZSB0aGVyZSBjb3VsZCBiZSBhIG1vcmUgZmluZS1ncmFpbmVkIHNjaGVtZSBpbiB0aGUgZnV0dXJlIHRoYXQgYWxsb3dzCm11dGFibGUgcmVmZXJlbmNlcyBpZiB0aGV5IGFyZSBub3QgImxlYWtlZCIgdG8gdGhlIGZpbmFsIHZhbHVlLCBhIG1vcmUKY29uc2VydmF0aXZlIGFwcHJvYWNoIHdhcyBjaG9zZW4gZm9yIG5vdy4gYGNvbnN0IGZuYCBkbyBub3QgaGF2ZSB0aGlzIHByb2JsZW0sCmFzIHRoZSBib3Jyb3cgY2hlY2tlciB3aWxsIHByZXZlbnQgdGhlIGBjb25zdCBmbmAgZnJvbSByZXR1cm5pbmcgbmV3IG11dGFibGUKcmVmZXJlbmNlcy4KClJlbWVtYmVyOiB5b3UgY2Fubm90IHVzZSBhIGZ1bmN0aW9uIGNhbGwgaW5zaWRlIGEgY29uc3RhbnQgb3Igc3RhdGljLiBIb3dldmVyLAp5b3UgY2FuIHRvdGFsbHkgdXNlIGl0IGluIGNvbnN0YW50IGZ1bmN0aW9uczoKCmBgYAojIVtmZWF0dXJlKGNvbnN0X211dF9yZWZzKV0KCmNvbnN0IGZuIGZvbyh4OiB1c2l6ZSkgLT4gdXNpemUgewogICAgbGV0IG11dCB5ID0gMTsKICAgIGxldCB6ID0gJm11dCB5OwogICAgKnogKz0geDsKICAgIHkKfQoKZm4gbWFpbigpIHsKICAgIGNvbnN0IEZPTzogdXNpemUgPSBmb28oMTApOyAvLyBvayEKfQpgYGAKRTA3NjVBIGRvdWJsZSBxdW90ZSBzdHJpbmcgKGAiYCkgd2FzIG5vdCB0ZXJtaW5hdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NQpsZXQgcyA9ICI7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgZG91YmxlIHF1b3RlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZzoKCmBgYApsZXQgcyA9ICIiOyAvLyBvayEKYGBgCkUwNzY2QSBkb3VibGUgcXVvdGUgYnl0ZSBzdHJpbmcgKGBiImApIHdhcyBub3QgdGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjYKbGV0IHMgPSBiIjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBkb3VibGUgcXVvdGUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nOgoKYGBgCmxldCBzID0gYiIiOyAvLyBvayEKYGBgCkUwNzY3QW4gdW5yZWFjaGFibGUgbGFiZWwgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY3CidhOiBsb29wIHsKICAgIHx8IHsKICAgICAgICBsb29wIHsgYnJlYWsgJ2EgfSAvLyBlcnJvcjogdXNlIG9mIHVucmVhY2hhYmxlIGxhYmVsIGAnYWAKICAgIH07Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgbGFiZWwgaXMgd2l0aGluIHNjb3BlLiBMYWJlbHMgYXJlIG5vdCByZWFjaGFibGUgdGhyb3VnaApmdW5jdGlvbnMsIGNsb3N1cmVzLCBhc3luYyBibG9ja3Mgb3IgbW9kdWxlcy4gRXhhbXBsZToKCmBgYAonYTogbG9vcCB7CiAgICBicmVhayAnYTsgLy8gb2shCn0KYGBgCkUwNzY4QSBudW1iZXIgaW4gYSBub24tZGVjaW1hbCBiYXNlIGhhcyBubyBkaWdpdHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY4CmxldCBzOiBpMzIgPSAwYjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBkaWdpdHM6CgpgYGAKbGV0IHM6IGkzMiA9IDBiMTsgLy8gb2shCmBgYApFMDc2OUEgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQgd2FzIHVzZWQgaW4gYSBwYXR0ZXJuIGFzIGlmIGl0IHdlcmUgYSBzdHJ1Y3Qgb3IKc3RydWN0IHZhcmlhbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY5CmVudW0gRSB7CiAgICBBKGkzMiksCn0KCmxldCBlID0gRTo6QSg0Mik7CgptYXRjaCBlIHsKICAgIEU6OkEgeyBudW1iZXIgfSA9PiB7IC8vIGVycm9yIQogICAgICAgIHByaW50bG4hKCJ7fSIsIG51bWJlcik7CiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IGNhbiB1c2UgdGhlIHR1cGxlIHBhdHRlcm46CgpgYGAKIyBlbnVtIEUgewojICAgICBBKGkzMiksCiMgfQojIGxldCBlID0gRTo6QSg0Mik7Cm1hdGNoIGUgewogICAgRTo6QShudW1iZXIpID0+IHsgLy8gb2shCiAgICAgICAgcHJpbnRsbiEoInt9IiwgbnVtYmVyKTsKICAgIH0KfQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyB1c2UgdGhlIHN0cnVjdCBwYXR0ZXJuIGJ5IHVzaW5nIHRoZSBjb3JyZWN0IGZpZWxkCm5hbWVzIGFuZCBiaW5kaW5nIHRoZW0gdG8gbmV3IGlkZW50aWZpZXJzOgoKYGBgCiMgZW51bSBFIHsKIyAgICAgQShpMzIpLAojIH0KIyBsZXQgZSA9IEU6OkEoNDIpOwptYXRjaCBlIHsKICAgIEU6OkEgeyAwOiBudW1iZXIgfSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIG51bWJlcik7CiAgICB9Cn0KYGBgCkUwNzcwVGhlIHR5cGUgb2YgYSBjb25zdCBwYXJhbWV0ZXIgcmVmZXJlbmNlcyBvdGhlciBnZW5lcmljIHBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzcwCmZuIGZvbzxULCBjb25zdCBOOiBUPigpIHt9IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB1c2UgYSBjb25jcmV0ZSB0eXBlIGZvciB0aGUgY29uc3QgcGFyYW1ldGVyOgoKYGBgCmZuIGZvbzxULCBjb25zdCBOOiB1c2l6ZT4oKSB7fQpgYGAKRTA3NzFBIG5vbi1gJ3N0YXRpY2AgbGlmZXRpbWUgd2FzIHVzZWQgaW4gYSBjb25zdCBnZW5lcmljLiBUaGlzIGlzIGN1cnJlbnRseSBub3QKYWxsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzEKIyFbZmVhdHVyZShhZHRfY29uc3RfcGFyYW1zKV0KCmZuIGZ1bmN0aW9uX3dpdGhfc3RyPCdhLCBjb25zdCBTVFJJTkc6ICYnYSBzdHI+KCkge30gLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHRoZSBsaWZldGltZSBpbiB0aGUgY29uc3QgZ2VuZXJpYyBuZWVkIHRvIGJlIGNoYW5nZWQgdG8KYCdzdGF0aWNgOgoKYGBgCiMhW2ZlYXR1cmUoYWR0X2NvbnN0X3BhcmFtcyldCgpmbiBmdW5jdGlvbl93aXRoX3N0cjxjb25zdCBTVFJJTkc6ICYnc3RhdGljIHN0cj4oKSB7fSAvLyBvayEKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHaXRIdWIgaXNzdWUgIzc0MDUyXS4KCltHaXRIdWIgaXNzdWUgIzc0MDUyXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy83NDA1MgpFMDc3M0EgYnVpbHRpbi1tYWNybyB3YXMgZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzMKIyFbZmVhdHVyZShkZWNsX21hY3JvKV0KIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX2J1aWx0aW5fbWFjcm9dCnB1YiBtYWNybyB0ZXN0KCRpdGVtOml0ZW0pIHsKICAgIC8qIGNvbXBpbGVyIGJ1aWx0LWluICovCn0KCm1vZCBpbm5lciB7CiAgICAjW3J1c3RjX2J1aWx0aW5fbWFjcm9dCiAgICBwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAgICAgLyogY29tcGlsZXIgYnVpbHQtaW4gKi8KICAgIH0KfQpgYGAKClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSB0aGUgZHVwbGljYXRlIGRlY2xhcmF0aW9uOgoKYGBgCiMhW2ZlYXR1cmUoZGVjbF9tYWNybyldCiMhW2ZlYXR1cmUocnVzdGNfYXR0cnMpXQoKI1tydXN0Y19idWlsdGluX21hY3JvXQpwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAvKiBjb21waWxlciBidWlsdC1pbiAqLwp9CmBgYAoKSW4gdmVyeSByYXJlIGVkZ2UgY2FzZXMsIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGxvYWRpbmcgYGNvcmVgIG9yIGBzdGRgIHR3aWNlLApvbmNlIHdpdGggYGNoZWNrYCBtZXRhZGF0YSBhbmQgb25jZSB3aXRoIGBidWlsZGAgbWV0YWRhdGEuCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgWyM3NTE3Nl0uCgpbIzc1MTc2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L3B1bGwvNzUxNzYjaXNzdWVjb21tZW50LTY4MzIzNDQ2OApFMDc3NGBkZXJpdmVgIHdhcyBhcHBsaWVkIG9uIHNvbWV0aGluZyB3aGljaCBpcyBub3QgYSBzdHJ1Y3QsIGEgdW5pb24gb3IgYW4gZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzQKdHJhaXQgRm9vIHsKICAgICNbZGVyaXZlKENsb25lKV0gLy8gZXJyb3IhCiAgICB0eXBlIEJhcjsKfQpgYGAKCkFzIHNhaWQgYWJvdmUsIHRoZSBgZGVyaXZlYCBhdHRyaWJ1dGUgaXMgb25seSBhbGxvd2VkIG9uIHN0cnVjdHMsIHVuaW9ucyBvcgplbnVtczoKCmBgYAojW2Rlcml2ZShDbG9uZSldIC8vIG9rIQpzdHJ1Y3QgQmFyIHsKICAgIGZpZWxkOiB1MzIsCn0KYGBgCgpZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBgZGVyaXZlYCBpbiB0aGUgW1J1c3QgQm9va10uCgpbUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTAzLWRlcml2YWJsZS10cmFpdHMuaHRtbApFMDc3NWAjW2Ntc2Vfbm9uc2VjdXJlX2VudHJ5XWAgaXMgb25seSB2YWxpZCBmb3IgdGFyZ2V0cyB3aXRoIHRoZSBUcnVzdFpvbmUtTQpleHRlbnNpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc1CiMhW2ZlYXR1cmUoY21zZV9ub25zZWN1cmVfZW50cnkpXQoKI1tjbXNlX25vbnNlY3VyZV9lbnRyeV0KcHViIGV4dGVybiAiQyIgZm4gZW50cnlfZnVuY3Rpb24oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBjb21waWxlIHlvdXIgY29kZSBmb3IgYSBSdXN0IHRhcmdldCB0aGF0IHN1cHBvcnRzIHRoZQpUcnVzdFpvbmUtTSBleHRlbnNpb24uIFRoZSBjdXJyZW50IHBvc3NpYmxlIHRhcmdldHMgYXJlOgoqIGB0aHVtYnY4bS5tYWluLW5vbmUtZWFiaWAKKiBgdGh1bWJ2OG0ubWFpbi1ub25lLWVhYmloZmAKKiBgdGh1bWJ2OG0uYmFzZS1ub25lLWVhYmlgCkUwNzc2YCNbY21zZV9ub25zZWN1cmVfZW50cnldYCBmdW5jdGlvbnMgcmVxdWlyZSBhIEMgQUJJCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc2CiMhW2ZlYXR1cmUoY21zZV9ub25zZWN1cmVfZW50cnkpXQoKI1tub19tYW5nbGVdCiNbY21zZV9ub25zZWN1cmVfZW50cnldCnB1YiBmbiBlbnRyeV9mdW5jdGlvbihpbnB1dDogVmVjPHUzMj4pIHt9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGRlY2xhcmUgeW91ciBlbnRyeSBmdW5jdGlvbiB3aXRoIGEgQyBBQkksIHVzaW5nIGBleHRlcm4gIkMiYC4KRTA3NzdBIGxpdGVyYWwgdmFsdWUgd2FzIHVzZWQgaW5zaWRlIGAjW2Rlcml2ZV1gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc3NwojW2Rlcml2ZSgiQ2xvbmUiKV0gLy8gZXJyb3IhCnN0cnVjdCBGb287CmBgYAoKT25seSBwYXRocyB0byB0cmFpdHMgYXJlIGFsbG93ZWQgYXMgYXJndW1lbnQgaW5zaWRlIGAjW2Rlcml2ZV1gLiBZb3UgY2FuIGZpbmQKbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYCNbZGVyaXZlXWAgYXR0cmlidXRlIGluIHRoZSBbUnVzdCBCb29rXS4KCgpgYGAKI1tkZXJpdmUoQ2xvbmUpXSAvLyBvayEKc3RydWN0IEZvbzsKYGBgCgpbUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTAzLWRlcml2YWJsZS10cmFpdHMuaHRtbApFMDc3OFRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzgKIyFbZmVhdHVyZShpc2FfYXR0cmlidXRlKV0KCiNbaW5zdHJ1Y3Rpb25fc2V0KCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmZuIG1haW4oKSB7fQpgYGAKClRoZSBwYXJlbnRoZXNpemVkIGBpbnN0cnVjdGlvbl9zZXRgIGF0dHJpYnV0ZSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIHRvIGJlCnNwZWNpZmllZDoKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6YTMyKSldCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKb3I6CgpgYGAKIyFbZmVhdHVyZShpc2FfYXR0cmlidXRlKV0KCiNbY2ZnX2F0dHIodGFyZ2V0X2FyY2g9ImFybSIsIGluc3RydWN0aW9uX3NldChhcm06OnQzMikpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW2BpbnN0cnVjdGlvbl9zZXRgIGF0dHJpYnV0ZV1baXNhLWF0dHJpYnV0ZV0Kc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlLgoKW2lzYS1hdHRyaWJ1dGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzL2NvZGVnZW4uaHRtbApFMDc3OUFuIHVua25vd24gYXJndW1lbnQgd2FzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc5CiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2luc3RydWN0aW9uX3NldChpbnRlbDo6eDY0KV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmZuIG1haW4oKSB7fQpgYGAKClRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgb25seSBzdXBwb3J0cyB0d28gYXJndW1lbnRzIGN1cnJlbnRseToKCiAqIGFybTo6YTMyCiAqIGFybTo6dDMyCgpBbGwgb3RoZXIgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gdGhpcwplcnJvci4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6YTMyKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlXVtpc2EtYXR0cmlidXRlXQpzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UuCgpbaXNhLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sCkUwNzgwQ2Fubm90IHVzZSBgZG9jKGlubGluZSlgIHdpdGggYW5vbnltb3VzIGltcG9ydHMKCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKCiNbZG9jKGlubGluZSldIC8vIGVycm9yOiBpbnZhbGlkIGRvYyBhcmd1bWVudApwdWIgdXNlIGZvbzo6Rm9vIGFzIF87CmBgYAoKQW5vbnltb3VzIGltcG9ydHMgYXJlIGFsd2F5cyByZW5kZXJlZCB3aXRoIGAjW2RvYyhub19pbmxpbmUpXWAuIFRvIGZpeCB0aGlzCmVycm9yLCByZW1vdmUgdGhlIGAjW2RvYyhpbmxpbmUpXWAgYXR0cmlidXRlLgoKRXhhbXBsZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQoKcHViIHVzZSBmb286OkZvbyBhcyBfOwpgYGAKRTA3ODFUaGUgYEMtY21zZS1ub25zZWN1cmUtY2FsbGAgQUJJIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBmdW5jdGlvbiBwb2ludGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODEKIyFbZmVhdHVyZShhYmlfY19jbXNlX25vbnNlY3VyZV9jYWxsKV0KCnB1YiBleHRlcm4gIkMtY21zZS1ub25zZWN1cmUtY2FsbCIgZm4gdGVzdCgpIHt9CmBgYAoKVGhlIGBDLWNtc2Utbm9uc2VjdXJlLWNhbGxgIEFCSSBzaG91bGQgYmUgdXNlZCBieSBjYXN0aW5nIGZ1bmN0aW9uIHBvaW50ZXJzIHRvCnNwZWNpZmljIGFkZHJlc3Nlcy4KRTA3ODJUcmFpdCBvYmplY3RzIG11c3QgaW5jbHVkZSB0aGUgYGR5bmAga2V5d29yZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAyMSxjb21waWxlX2ZhaWwsRTA3ODIKdHJhaXQgRm9vIHt9CmZuIHRlc3QoYXJnOiBCb3g8Rm9vPikge30gLy8gZXJyb3IhCmBgYAoKVHJhaXQgb2JqZWN0cyBhcmUgYSB3YXkgdG8gY2FsbCBtZXRob2RzIG9uIHR5cGVzIHRoYXQgYXJlIG5vdCBrbm93biB1bnRpbApydW50aW1lIGJ1dCBjb25mb3JtIHRvIHNvbWUgdHJhaXQuCgpUcmFpdCBvYmplY3RzIHNob3VsZCBiZSBmb3JtZWQgd2l0aCBgQm94PGR5biBGb28+YCwgYnV0IGluIHRoZSBjb2RlIGFib3ZlCmBkeW5gIGlzIGxlZnQgb2ZmLgoKVGhpcyBtYWtlcyBpdCBoYXJkZXIgdG8gc2VlIHRoYXQgYGFyZ2AgaXMgYSB0cmFpdCBvYmplY3QgYW5kIG5vdCBhCnNpbXBseSBhIGhlYXAgYWxsb2NhdGVkIHR5cGUgY2FsbGVkIGBGb29gLgoKVG8gZml4IHRoaXMgaXNzdWUsIGFkZCBgZHluYCBiZWZvcmUgdGhlIHRyYWl0IG5hbWUuCgpgYGBlZGl0aW9uMjAyMQp0cmFpdCBGb28ge30KZm4gdGVzdChhcmc6IEJveDxkeW4gRm9vPikge30gLy8gb2shCmBgYAoKVGhpcyB1c2VkIHRvIGJlIGFsbG93ZWQgYmVmb3JlIGVkaXRpb24gMjAyMSwgYnV0IGlzIG5vdyBhbiBlcnJvci4KRTA3ODNUaGUgcmFuZ2UgcGF0dGVybiBgLi4uYCBpcyBubyBsb25nZXIgYWxsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAyMSxjb21waWxlX2ZhaWwsRTA3ODMKbWF0Y2ggMnU4IHsKICAgIDAuLi45ID0+IHByaW50bG4hKCJHb3QgYSBudW1iZXIgbGVzcyB0aGFuIDEwIiksIC8vIGVycm9yIQogICAgXyA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIDEwIG9yIG1vcmUiKSwKfQpgYGAKCk9sZGVyIFJ1c3QgY29kZSB1c2luZyBwcmV2aW91cyBlZGl0aW9ucyBhbGxvd2VkIGAuLi5gIHRvIHN0YW5kIGZvciBleGNsdXNpdmUKcmFuZ2VzIHdoaWNoIGFyZSBub3cgc2lnbmlmaWVkIHVzaW5nIGAuLj1gLgoKVG8gbWFrZSB0aGlzIGNvZGUgY29tcGlsZSByZXBsYWNlIHRoZSBgLi4uYCB3aXRoIGAuLj1gLgoKYGBgZWRpdGlvbjIwMjEKbWF0Y2ggMnU4IHsKICAgIDAuLj05ID0+IHByaW50bG4hKCJHb3QgYSBudW1iZXIgbGVzcyB0aGFuIDEwIiksIC8vIG9rIQogICAgXyA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIDEwIG9yIG1vcmUiKSwKfQpgYGAKRTA3ODRBIHVuaW9uIGV4cHJlc3Npb24gZG9lcyBub3QgaGF2ZSBleGFjdGx5IG9uZSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODQKdW5pb24gQmlyZCB7CiAgICBwaWdlb246IHU4LAogICAgdHVydGxlZG92ZTogdTE2LAp9CgpsZXQgYmlyZCA9IEJpcmQge307IC8vIGVycm9yCmxldCBiaXJkID0gQmlyZCB7IHBpZ2VvbjogMCwgdHVydGxlZG92ZTogMSB9OyAvLyBlcnJvcgpgYGAKClRoZSBrZXkgcHJvcGVydHkgb2YgdW5pb25zIGlzIHRoYXQgYWxsIGZpZWxkcyBvZiBhIHVuaW9uIHNoYXJlIGNvbW1vbiBzdG9yYWdlLgpBcyBhIHJlc3VsdCwgd3JpdGVzIHRvIG9uZSBmaWVsZCBvZiBhIHVuaW9uIGNhbiBvdmVyd3JpdGUgaXRzIG90aGVyIGZpZWxkcywgYW5kCnNpemUgb2YgYSB1bmlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaXplIG9mIGl0cyBsYXJnZXN0IGZpZWxkLgoKWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuaW9uIHR5cGVzIGluIHRoZSBbUnVzdCByZWZlcmVuY2VdLgoKV29ya2luZyBleGFtcGxlOgoKYGBgCnVuaW9uIEJpcmQgewogICAgcGlnZW9uOiB1OCwKICAgIHR1cnRsZWRvdmU6IHUxNiwKfQoKbGV0IGJpcmQgPSBCaXJkIHsgcGlnZW9uOiAwIH07IC8vIE9LCmBgYAoKW1J1c3QgcmVmZXJlbmNlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdW5pb25zLmh0bWwKRTA3ODVBbiBpbmhlcmVudCBgaW1wbGAgd2FzIHdyaXR0ZW4gb24gYSBkeW4gYXV0byB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODUKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gQXV0b1RyYWl0IHt9CmBgYAoKRHluIG9iamVjdHMgYWxsb3cgYW55IG51bWJlciBvZiBhdXRvIHRyYWl0cywgcGx1cyBhdCBtb3N0IG9uZSBub24tYXV0byB0cmFpdC4KVGhlIG5vbi1hdXRvIHRyYWl0IGJlY29tZXMgdGhlICJwcmluY2lwYWwgdHJhaXQiLgoKV2hlbiBjaGVja2luZyBpZiBhbiBpbXBsIG9uIGEgZHluIHRyYWl0IGlzIGNvaGVyZW50LCB0aGUgcHJpbmNpcGFsIHRyYWl0IGlzCm5vcm1hbGx5IHRoZSBvbmx5IG9uZSBjb25zaWRlcmVkLiBTaW5jZSB0aGUgZXJyb25lb3VzIGNvZGUgaGFzIG5vIHByaW5jaXBhbAp0cmFpdCwgaXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KCldvcmtpbmcgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnRyYWl0IFByaW5jaXBhbFRyYWl0IHt9CgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gUHJpbmNpcGFsVHJhaXQgKyBBdXRvVHJhaXQgKyBTZW5kIHt9CmBgYApFMDc4NkEgbWV0YWRhdGEgZmlsZSB3YXMgaW52YWxpZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5lZWRzIGV4dGVybiBmaWxlcykKdXNlIDo6Zm9vOyAvLyBlcnJvcjogZm91bmQgaW52YWxpZCBtZXRhZGF0YSBmaWxlcyBmb3IgY3JhdGUgYGZvb2AKYGBgCgpXaGVuIGxvYWRpbmcgY3JhdGVzLCBlYWNoIGNyYXRlIG11c3QgaGF2ZSBhIHZhbGlkIG1ldGFkYXRhIGZpbGUuCkludmFsaWQgZmlsZXMgY291bGQgYmUgY2F1c2VkIGJ5IGZpbGVzeXN0ZW0gY29ycnVwdGlvbiwKYW4gSU8gZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgZmlsZSwgb3IgKHJhcmVseSkgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi4KCkNvbnNpZGVyIGRlbGV0aW5nIHRoZSBmaWxlIGFuZCByZWNyZWF0aW5nIGl0LApvciByZXBvcnRpbmcgYSBidWcgYWdhaW5zdCB0aGUgY29tcGlsZXIuCkUwMjA4RTAyMjdFMDI3OUUwMjgwRTAzMTFFMDMxM0UwMzIwRTAzNzdFMDQ1N0UwNDYwRTA0NjFFMDQ2MkUwNDY1RTA0NzJFMDQ3NkUwNDkwRTA1MTRFMDUxOUUwNTIzRTA2NDBFMDY2N0UwNzExRTA3MTdFMDcyNkUwNzcyAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAsQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABtBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABeBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAE8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABJAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABwAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADzAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADNBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAO8eAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABGAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADkAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAdAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAyAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAA8DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABwAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAA0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA/AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAEgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABIAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKEEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAByBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACxAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAwwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABdAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPsCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADJAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAPwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB7AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAEAcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAtBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAkAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPkEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAL0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA8wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABQAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAArAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACOAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB4CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABmCgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABIAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFsCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABIAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFgDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADXAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA/BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN4CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB5AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA0gEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAzAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADaAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmQsAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACoCwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANMFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACaAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAkDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABIBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGwDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADNAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH4EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3gMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB5AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABYAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADDAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACOAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADkAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAnAcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADhAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcwgAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACvAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOoHAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA7QMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACoAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA8AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH8DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADHAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABEDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABmAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAdgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABbAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJACAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABOAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACRAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC+BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADdAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEwIAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUQYAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAaBwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHoFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAbAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAZDQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMUCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADZAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG4GAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACzBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABxBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlQUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADcAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJcGAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACWBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAdAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAtBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGEDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5gMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABwBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACpAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADQEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAuBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAPQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADNAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAOgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABGBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB4AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABsGAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAxAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADbAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACMAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAxAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADgAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHgDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAnBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAnAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfgUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA/AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADzAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAATQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADpBwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB0DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+AcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACBAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA/QEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADCAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFACAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD8AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADcHAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAOAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD1BQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPkIAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABwYAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD2BQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALsKAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB+CQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAaAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKUCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA7wAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADqBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2AUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAqAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAC8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADQUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAZBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2gIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADEAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5gIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC5AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGACAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAswIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABoAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABBAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOsEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABQBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOEDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAdQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABJBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMMDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD5AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAaQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACEAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMoBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAagEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAASAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABEAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFwBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADYAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABrAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABgAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKQKAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABwAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAwAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAngIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA9AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKkDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAsAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADiAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG8DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB9AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAdQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAGAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACYFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACWAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbgkAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA4AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACKAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACuAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhgUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACFBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAywEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABuAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAaQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABtAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAK4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADtAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACrAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOkAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACZAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACNBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALcEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADRAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA5AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJMEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADPAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA4AEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAClAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAK0HAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA8QEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAhAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABwcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADOAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA0AoAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC3AAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEYEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAigEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACsAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAogEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADqAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH4HAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAOAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAzwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADhAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACFAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFYBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAcAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAANAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACIDAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAugEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABGAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACmAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAewEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5QMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABZAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMsFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAOAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANcAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACKBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABdAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMsAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAEwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADhAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACbAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAmAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAiAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC8AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTGAAAEAPH/AAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAADABAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABEAAAAAAAAAAAAAAAAAAAAAAAAAAAADABIAAAAAAAAAAAAAAAAAAAAAAAAAAAADABMAAAAAAAAAAAAAAAAAAAAAAAAAAAADABQAAAAAAAAAAAAAAAAAAAAAAAAAAAADABUAAAAAAAAAAAAAAAAAAAAAAAAAAAADABYAAAAAAAAAAAAAAAAAAAAAAAAAAAADABcAAAAAAAAAAAAAAAAAAAAAAAAAAAADABgAAAAAAAAAAAAAAAAAAAAAAAAAAAADABkAAAAAAAAAAAAAAAAAAAAAAAAAAAADABoAAAAAAAAAAAAAAAAAAAAAAAAAAAADABsAAAAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAADACAAAAAAAAAAAAAAAAAAAAAAAAAAAAADACEAAAAAAAAAAAAAAAAAAAAAAAAAAAADACIAAAAAAAAAAAAAAAAAAAAAAAAAAAADACMAAAAAAAAAAAAAAAAAAAAAAAAAAAADACQAAAAAAAAAAAAAAAAAAAAAAAAAAAADACUAAAAAAAAAAAAAAAAAAAAAAAAAAAADACYAAAAAAAAAAAAAAAAAAAAAAAAAAAADACcAAAAAAAAAAAAAAAAAAAAAAAAAAAADACgAAAAAAAAAAAAAAAAAAAAAAAAAAAADACkAAAAAAAAAAAAAAAAAAAAAAAAAAAADACoAAAAAAAAAAAAAAAAAAAAAAAAAAAADACsAAAAAAAAAAAAAAAAAAAAAAAAAAAADACwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAADADAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADEAAAAAAAAAAAAAAAAAAAAAAAAAAAADADIAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMAAAAAAAAAAAAAAAAAAAAAAAAAAAADADQAAAAAAAAAAAAAAAAAAAAAAAAAAAADADUAAAAAAAAAAAAAAAAAAAAAAAAAAAADADYAAAAAAAAAAAAAAAAAAAAAAAAAAAADADcAAAAAAAAAAAAAAAAAAAAAAAAAAAADADgAAAAAAAAAAAAAAAAAAAAAAAAAAAADADkAAAAAAAAAAAAAAAAAAAAAAAAAAAADADoAAAAAAAAAAAAAAAAAAAAAAAAAAAADADsAAAAAAAAAAAAAAAAAAAAAAAAAAAADADwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAADALAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALEAAAAAAAAAAAAAAAAAAAAAAAAAAAADALIAAAAAAAAAAAAAAAAAAAAAAAAAAAADALMAAAAAAAAAAAAAAAAAAAAAAAAAAAADALQAAAAAAAAAAAAAAAAAAAAAAAAAAAADALUAAAAAAAAAAAAAAAAAAAAAAAAAAAADALYAAAAAAAAAAAAAAAAAAAAAAAAAAAADALcAAAAAAAAAAAAAAAAAAAAAAAAAAAADALgAAAAAAAAAAAAAAAAAAAAAAAAAAAADALkAAAAAAAAAAAAAAAAAAAAAAAAAAAADALoAAAAAAAAAAAAAAAAAAAAAAAAAAAADALsAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8AAAAAAAAAAAAAAAAAAAAAAAAAAAADANAAAAAAAAAAAAAAAAAAAAAAAAAAAAADANEAAAAAAAAAAAAAAAAAAAAAAAAAAAADANIAAAAAAAAAAAAAAAAAAAAAAAAAAAADANMAAAAAAAAAAAAAAAAAAAAAAAAAAAADANQAAAAAAAAAAAAAAAAAAAAAAAAAAAADANUAAAAAAAAAAAAAAAAAAAAAAAAAAAADANYAAAAAAAAAAAAAAAAAAAAAAAAAAAADANcAAAAAAAAAAAAAAAAAAAAAAAAAAAADANgAAAAAAAAAAAAAAAAAAAAAAAAAAAADANkAAAAAAAAAAAAAAAAAAAAAAAAAAAADANoAAAAAAAAAAAAAAAAAAAAAAAAAAAADANsAAAAAAAAAAAAAAAAAAAAAAAAAAAADANwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAO4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAO8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAP0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAABAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8BAAAAAAAAAAAAAAAAAAAAAAAAAAADABABAAAAAAAAAAAAAAAAAAAAAAAAAAADABEBAAAAAAAAAAAAAAAAAAAAAAAAAAADABIBAAAAAAAAAAAAAAAAAAAAAAAAAAADABMBAAAAAAAAAAAAAAAAAAAAAAAAAAADABQBAAAAAAAAAAAAAAAAAAAAAAAAAAADABUBAAAAAAAAAAAAAAAAAAAAAAAAAAADABYBAAAAAAAAAAAAAAAAAAAAAAAAAAADABcBAAAAAAAAAAAAAAAAAAAAAAAAAAADABgBAAAAAAAAAAAAAAAAAAAAAAAAAAADABkBAAAAAAAAAAAAAAAAAAAAAAAAAAADABoBAAAAAAAAAAAAAAAAAAAAAAAAAAADABsBAAAAAAAAAAAAAAAAAAAAAAAAAAADABwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8BAAAAAAAAAAAAAAAAAAAAAAAAAAADACABAAAAAAAAAAAAAAAAAAAAAAAAAAADACEBAAAAAAAAAAAAAAAAAAAAAAAAAAADACIBAAAAAAAAAAAAAAAAAAAAAAAAAAADACMBAAAAAAAAAAAAAAAAAAAAAAAAAAADACQBAAAAAAAAAAAAAAAAAAAAAAAAAAADACUBAAAAAAAAAAAAAAAAAAAAAAAAAAADACYBAAAAAAAAAAAAAAAAAAAAAAAAAAADACcBAAAAAAAAAAAAAAAAAAAAAAAAAAADACgBAAAAAAAAAAAAAAAAAAAAAAAAAAADACkBAAAAAAAAAAAAAAAAAAAAAAAAAAADACoBAAAAAAAAAAAAAAAAAAAAAAAAAAADACsBAAAAAAAAAAAAAAAAAAAAAAAAAAADACwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8BAAAAAAAAAAAAAAAAAAAAAAAAAAADADABAAAAAAAAAAAAAAAAAAAAAAAAAAADADEBAAAAAAAAAAAAAAAAAAAAAAAAAAADADIBAAAAAAAAAAAAAAAAAAAAAAAAAAADADMBAAAAAAAAAAAAAAAAAAAAAAAAAAADADQBAAAAAAAAAAAAAAAAAAAAAAAAAAADADUBAAAAAAAAAAAAAAAAAAAAAAAAAAADADYBAAAAAAAAAAAAAAAAAAAAAAAAAAADADcBAAAAAAAAAAAAAAAAAAAAAAAAAAADADgBAAAAAAAAAAAAAAAAAAAAAAAAAAADADkBAAAAAAAAAAAAAAAAAAAAAAAAAAADADoBAAAAAAAAAAAAAAAAAAAAAAAAAAADADsBAAAAAAAAAAAAAAAAAAAAAAAAAAADADwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAEABAAAAAAAAAAAAAAAAAAAAAAAAAAADAEEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAFABAAAAAAAAAAAAAAAAAAAAAAAAAAADAFEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAGABAAAAAAAAAAAAAAAAAAAAAAAAAAADAGEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAHABAAAAAAAAAAAAAAAAAAAAAAAAAAADAHEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAIABAAAAAAAAAAAAAAAAAAAAAAAAAAADAIEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAJABAAAAAAAAAAAAAAAAAAAAAAAAAAADAJEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAKABAAAAAAAAAAAAAAAAAAAAAAAAAAADAKEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8BAAAAAAAAAAAAAAAAAAAAAAAAAAADALABAAAAAAAAAAAAAAAAAAAAAAAAAAADALEBAAAAAAAAAAAAAAAAAAAAAAAAAAADALIBAAAAAAAAAAAAAAAAAAAAAAAAAAADALMBAAAAAAAAAAAAAAAAAAAAAAAAAAADALQBAAAAAAAAAAAAAAAAAAAAAAAAAAADALUBAAAAAAAAAAAAAAAAAAAAAAAAAAADALYBAAAAAAAAAAAAAAAAAAAAAAAAAAADALcBAAAAAAAAAAAAAAAAAAAAAAAAAAADALgBAAAAAAAAAAAAAAAAAAAAAAAAAAADALkBAAAAAAAAAAAAAAAAAAAAAAAAAAADALoBAAAAAAAAAAAAAAAAAAAAAAAAAAADALsBAAAAAAAAAAAAAAAAAAAAAAAAAAADALwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAMABAAAAAAAAAAAAAAAAAAAAAAAAAAADAMEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8BAAAAAAAAAAAAAAAAAAAAAAAAAAADANABAAAAAAAAAAAAAAAAAAAAAAAAAAADANEBAAAAAAAAAAAAAAAAAAAAAAAAAAADANIBAAAAAAAAAAAAAAAAAAAAAAAAAAADANMBAAAAAAAAAAAAAAAAAAAAAAAAAAADANQBAAAAAAAAAAAAAAAAAAAAAAAAAAADANUBAAAAAAAAAAAAAAAAAAAAAAAAAAADANYBAAAAAAAAAAAAAAAAAAAAAAAAAAADANcBAAAAAAAAAAAAAAAAAAAAAAAAAAADANgBAAAAAAAAAAAAAAAAAAAAAAAAAAADANkBAAAAAAAAAAAAAAAAAAAAAAAAAAADANoBAAAAAAAAAAAAAAAAAAAAAAAAAAADANsBAAAAAAAAAAAAAAAAAAAAAAAAAAADANwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAOABAAAAAAAAAAAAAAAAAAAAAAAAAAADAOEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAO0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAO4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAO8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAPABAAAAAAAAAAAAAAAAAAAAAAAAAAADAPEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAP0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAP4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAAACAAAAAAAAAAAAAAAAAAAAAAAAAAADAAECAAAAAAAAAAAAAAAAAAAAAAAAAAADAAICAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8CAAAAAAAAAAAAAAAAAAAAAAAAAAADABACAAAAAAAAAAAAAAAAAAAAAAAAAAADABECAAAAAAAAAAAAAAAAAAAAAAAAAAADABICAAAAAAAAAAAAAAAAAAAAAAAAAAADABMCAAAAAAAAAAAAAAAAAAAAAAAAAAADABQCAAAAAAAAAAAAAAAAAAAAAAAAAAADABUCAAAAAAAAAAAAAAAAAAAAAAAAAAADABYCAAAAAAAAAAAAAAAAAAAAAAAAAAADABcCAAAAAAAAAAAAAAAAAAAAAAAAAAADABgCAAAAAAAAAAAAAAAAAAAAAAAAAAADABkCAAAAAAAAAAAAAAAAAAAAAAAAAAADABoCAAAAAAAAAAAAAAAAAAAAAAAAAAADABsCAAAAAAAAAAAAAAAAAAAAAAAAAAADABwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8CAAAAAAAAAAAAAAAAAAAAAAAAAAADACACAAAAAAAAAAAAAAAAAAAAAAAAAAADACECAAAAAAAAAAAAAAAAAAAAAAAAAAADACICAAAAAAAAAAAAAAAAAAAAAAAAAAADACMCAAAAAAAAAAAAAAAAAAAAAAAAAAADACQCAAAAAAAAAAAAAAAAAAAAAAAAAAADACUCAAAAAAAAAAAAAAAAAAAAAAAAAAADACYCAAAAAAAAAAAAAAAAAAAAAAAAAAADACcCAAAAAAAAAAAAAAAAAAAAAAAAAAADACgCAAAAAAAAAAAAAAAAAAAAAAAAAAADACkCAAAAAAAAAAAAAAAAAAAAAAAAAAADACoCAAAAAAAAAAAAAAAAAAAAAAAAAAADACsCAAAAAAAAAAAAAAAAAAAAAAAAAAADACwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8CAAAAAAAAAAAAAAAAAAAAAAAAAAADADACAAAAAAAAAAAAAAAAAAAAAAAAAAADADECAAAAAAAAAAAAAAAAAAAAAAAAAAADADICAAAAAAAAAAAAAAAAAAAAAAAAAAADADMCAAAAAAAAAAAAAAAAAAAAAAAAAAADADQCAAAAAAAAAAAAAAAAAAAAAAAAAAADADUCAAAAAAAAAAAAAAAAAAAAAAAAAAADADYCAAAAAAAAAAAAAAAAAAAAAAAAAAADADcCAAAAAAAAAAAAAAAAAAAAAAAAAAADADgCAAAAAAAAAAAAAAAAAAAAAAAAAAADADkCAAAAAAAAAAAAAAAAAAAAAAAAAAADADoCAAAAAAAAAAAAAAAAAAAAAAAAAAADADsCAAAAAAAAAAAAAAAAAAAAAAAAAAADADwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAEACAAAAAAAAAAAAAAAAAAAAAAAAAAADAEECAAAAAAAAAAAAAAAAAAAAAAAAAAADAEICAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAFACAAAAAAAAAAAAAAAAAAAAAAAAAAADAFECAAAAAAAAAAAAAAAAAAAAAAAAAAADAFICAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAGACAAAAAAAAAAAAAAAAAAAAAAAAAAADAGECAAAAAAAAAAAAAAAAAAAAAAAAAAADAGICAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAHACAAAAAAAAAAAAAAAAAAAAAAAAAAADAHECAAAAAAAAAAAAAAAAAAAAAAAAAAADAHICAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAIACAAAAAAAAAAAAAAAAAAAAAAAAAAADAIECAAAAAAAAAAAAAAAAAAAAAAAAAAADAIICAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAJACAAAAAAAAAAAAAAAAAAAAAAAAAAADAJECAAAAAAAAAAAAAAAAAAAAAAAAAAADAJICAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAKACAAAAAAAAAAAAAAAAAAAAAAAAAAADAKECAAAAAAAAAAAAAAAAAAAAAAAAAAADAKICAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8CAAAAAAAAAAAAAAAAAAAAAAAAAAADALACAAAAAAAAAAAAAAAAAAAAAAAAAAADALECAAAAAAAAAAAAAAAAAAAAAAAAAAADALICAAAAAAAAAAAAAAAAAAAAAAAAAAADALMCAAAAAAAAAAAAAAAAAAAAAAAAAAADALQCAAAAAAAAAAAAAAAAAAAAAAAAAAADALUCAAAAAAAAAAAAAAAAAAAAAAAAAAADALYCAAAAAAAAAAAAAAAAAAAAAAAAAAADALcCAAAAAAAAAAAAAAAAAAAAAAAAAAADALgCAAAAAAAAAAAAAAAAAAAAAAAAAAADALkCAAAAAAAAAAAAAAAAAAAAAAAAAAADALoCAAAAAAAAAAAAAAAAAAAAAAAAAAADALsCAAAAAAAAAAAAAAAAAAAAAAAAAAADALwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAMACAAAAAAAAAAAAAAAAAAAAAAAAAAADAMECAAAAAAAAAAAAAAAAAAAAAAAAAAADAMICAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8CAAAAAAAAAAAAAAAAAAAAAAAAAAADANACAAAAAAAAAAAAAAAAAAAAAAAAAAADANECAAAAAAAAAAAAAAAAAAAAAAAAAAADANICAAAAAAAAAAAAAAAAAAAAAAAAAAADANMCAAAAAAAAAAAAAAAAAAAAAAAAAAADANQCAAAAAAAAAAAAAAAAAAAAAAAAAAADANUCAAAAAAAAAAAAAAAAAAAAAAAAAAADANYCAAAAAAAAAAAAAAAAAAAAAAAAAAADANcCAAAAAAAAAAAAAAAAAAAAAAAAAAADANgCAAAAAAAAAAAAAAAAAAAAAAAAAAADANkCAAAAAAAAAAAAAAAAAAAAAAAAAAADANoCAAAAAAAAAAAAAAAAAAAAAAAAAAADANsCAAAAAAAAAAAAAAAAAAAAAAAAAAADANwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAOACAAAAAAAAAAAAAAAAAAAAAAAAAAADAOECAAAAAAAAAAAAAAAAAAAAAAAAAAADAOICAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAO0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAO4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAO8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAPACAAAAAAAAAAAAAAAAAAAAAAAAAAADAPECAAAAAAAAAAAAAAAAAAAAAAAAAAADAPICAAAAAAAAAAAAAAAAAAAAAAAAAAADAPMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAP0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAP4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAP8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8DAAAAAAAAAAAAAAAAAAAAAAAAAAADABADAAAAAAAAAAAAAAAAAAAAAAAAAAADABEDAAAAAAAAAAAAAAAAAAAAAAAAAAADABIDAAAAAAAAAAAAAAAAAAAAAAAAAAADABMDAAAAAAAAAAAAAAAAAAAAAAAAAAADABQDAAAAAAAAAAAAAAAAAAAAAAAAAAADABUDAAAAAAAAAAAAAAAAAAAAAAAAAAADABYDAAAAAAAAAAAAAAAAAAAAAAAAAAADABcDAAAAAAAAAAAAAAAAAAAAAAAAAAADABgDAAAAAAAAAAAAAAAAAAAAAAAAAAADABkDAAAAAAAAAAAAAAAAAAAAAAAAAAADABoDAAAAAAAAAAAAAAAAAAAAAAAAAAADABsDAAAAAAAAAAAAAAAAAAAAAAAAAAADABwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8DAAAAAAAAAAAAAAAAAAAAAAAAAAADACADAAAAAAAAAAAAAAAAAAAAAAAAAAADACEDAAAAAAAAAAAAAAAAAAAAAAAAAAADACIDAAAAAAAAAAAAAAAAAAAAAAAAAAADACMDAAAAAAAAAAAAAAAAAAAAAAAAAAADACQDAAAAAAAAAAAAAAAAAAAAAAAAAAADACUDAAAAAAAAAAAAAAAAAAAAAAAAAAADACYDAAAAAAAAAAAAAAAAAAAAAAAAAAADACcDAAAAAAAAAAAAAAAAAAAAAAAAAAADACgDAAAAAAAAAAAAAAAAAAAAAAAAAAADACkDAAAAAAAAAAAAAAAAAAAAAAAAAAADACoDAAAAAAAAAAAAAAAAAAAAAAAAAAADACsDAAAAAAAAAAAAAAAAAAAAAAAAAAADACwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8DAAAAAAAAAAAAAAAAAAAAAAAAAAADADADAAAAAAAAAAAAAAAAAAAAAAAAAAADADEDAAAAAAAAAAAAAAAAAAAAAAAAAAADADIDAAAAAAAAAAAAAAAAAAAAAAAAAAADADMDAAAAAAAAAAAAAAAAAAAAAAAAAAADADQDAAAAAAAAAAAAAAAAAAAAAAAAAAADADUDAAAAAAAAAAAAAAAAAAAAAAAAAAADADYDAAAAAAAAAAAAAAAAAAAAAAAAAAADADcDAAAAAAAAAAAAAAAAAAAAAAAAAAADADgDAAAAAAAAAAAAAAAAAAAAAAAAAAADADkDAAAAAAAAAAAAAAAAAAAAAAAAAAADADoDAAAAAAAAAAAAAAAAAAAAAAAAAAADADsDAAAAAAAAAAAAAAAAAAAAAAAAAAADADwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAEADAAAAAAAAAAAAAAAAAAAAAAAAAAADAEEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAFADAAAAAAAAAAAAAAAAAAAAAAAAAAADAFEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAGADAAAAAAAAAAAAAAAAAAAAAAAAAAADAGEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAHADAAAAAAAAAAAAAAAAAAAAAAAAAAADAHEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAIADAAAAAAAAAAAAAAAAAAAAAAAAAAADAIEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAJADAAAAAAAAAAAAAAAAAAAAAAAAAAADAJEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAKADAAAAAAAAAAAAAAAAAAAAAAAAAAADAKEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8DAAAAAAAAAAAAAAAAAAAAAAAAAAADALADAAAAAAAAAAAAAAAAAAAAAAAAAAADALEDAAAAAAAAAAAAAAAAAAAAAAAAAAADALIDAAAAAAAAAAAAAAAAAAAAAAAAAAADALMDAAAAAAAAAAAAAAAAAAAAAAAAAAADALQDAAAAAAAAAAAAAAAAAAAAAAAAAAADALUDAAAAAAAAAAAAAAAAAAAAAAAAAAADALYDAAAAAAAAAAAAAAAAAAAAAAAAAAADALcDAAAAAAAAAAAAAAAAAAAAAAAAAAADALgDAAAAAAAAAAAAAAAAAAAAAAAAAAADALkDAAAAAAAAAAAAAAAAAAAAAAAAAAADALoDAAAAAAAAAAAAAAAAAAAAAAAAAAADALsDAAAAAAAAAAAAAAAAAAAAAAAAAAADALwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAMADAAAAAAAAAAAAAAAAAAAAAAAAAAADAMEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8DAAAAAAAAAAAAAAAAAAAAAAAAAAADANADAAAAAAAAAAAAAAAAAAAAAAAAAAADANEDAAAAAAAAAAAAAAAAAAAAAAAAAAADANIDAAAAAAAAAAAAAAAAAAAAAAAAAAADANMDAAAAAAAAAAAAAAAAAAAAAAAAAAADANQDAAAAAAAAAAAAAAAAAAAAAAAAAAADANUDAAAAAAAAAAAAAAAAAAAAAAAAAAADANYDAAAAAAAAAAAAAAAAAAAAADkAAAARANgDAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAACAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAADAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAEAAAAAAAAAAAQAAAAYAAAAAAAAAAAAAAFAAAAAAAAAAAQAAAAcAAAAAAAAAAAAAAGAAAAAAAAAAAQAAAAgAAAAAAAAAAAAAAHAAAAAAAAAAAQAAAAkAAAAAAAAAAAAAAIAAAAAAAAAAAQAAAAoAAAAAAAAAAAAAAJAAAAAAAAAAAQAAAAsAAAAAAAAAAAAAAKAAAAAAAAAAAQAAAAwAAAAAAAAAAAAAALAAAAAAAAAAAQAAAA0AAAAAAAAAAAAAAMAAAAAAAAAAAQAAAA4AAAAAAAAAAAAAANAAAAAAAAAAAQAAAA8AAAAAAAAAAAAAAOAAAAAAAAAAAQAAABAAAAAAAAAAAAAAAPAAAAAAAAAAAQAAABEAAAAAAAAAAAAAAAABAAAAAAAAAQAAABIAAAAAAAAAAAAAABABAAAAAAAAAQAAABMAAAAAAAAAAAAAACABAAAAAAAAAQAAABQAAAAAAAAAAAAAADABAAAAAAAAAQAAABUAAAAAAAAAAAAAAEABAAAAAAAAAQAAABYAAAAAAAAAAAAAAFABAAAAAAAAAQAAABcAAAAAAAAAAAAAAGABAAAAAAAAAQAAABgAAAAAAAAAAAAAAHABAAAAAAAAAQAAABkAAAAAAAAAAAAAAIABAAAAAAAAAQAAABoAAAAAAAAAAAAAAJABAAAAAAAAAQAAABsAAAAAAAAAAAAAAKABAAAAAAAAAQAAABwAAAAAAAAAAAAAALABAAAAAAAAAQAAAB0AAAAAAAAAAAAAAMABAAAAAAAAAQAAAB4AAAAAAAAAAAAAANABAAAAAAAAAQAAAB8AAAAAAAAAAAAAAOABAAAAAAAAAQAAACAAAAAAAAAAAAAAAPABAAAAAAAAAQAAACEAAAAAAAAAAAAAAAACAAAAAAAAAQAAACIAAAAAAAAAAAAAABACAAAAAAAAAQAAACMAAAAAAAAAAAAAACACAAAAAAAAAQAAACQAAAAAAAAAAAAAADACAAAAAAAAAQAAACUAAAAAAAAAAAAAAEACAAAAAAAAAQAAACYAAAAAAAAAAAAAAFACAAAAAAAAAQAAACcAAAAAAAAAAAAAAGACAAAAAAAAAQAAACgAAAAAAAAAAAAAAHACAAAAAAAAAQAAACkAAAAAAAAAAAAAAIACAAAAAAAAAQAAACoAAAAAAAAAAAAAAJACAAAAAAAAAQAAACsAAAAAAAAAAAAAAKACAAAAAAAAAQAAACwAAAAAAAAAAAAAALACAAAAAAAAAQAAAC0AAAAAAAAAAAAAAMACAAAAAAAAAQAAAC4AAAAAAAAAAAAAANACAAAAAAAAAQAAAC8AAAAAAAAAAAAAAOACAAAAAAAAAQAAADAAAAAAAAAAAAAAAPACAAAAAAAAAQAAADEAAAAAAAAAAAAAAAADAAAAAAAAAQAAADIAAAAAAAAAAAAAABADAAAAAAAAAQAAADMAAAAAAAAAAAAAACADAAAAAAAAAQAAADQAAAAAAAAAAAAAADADAAAAAAAAAQAAADUAAAAAAAAAAAAAAEADAAAAAAAAAQAAADYAAAAAAAAAAAAAAFADAAAAAAAAAQAAADcAAAAAAAAAAAAAAGADAAAAAAAAAQAAADgAAAAAAAAAAAAAAHADAAAAAAAAAQAAADkAAAAAAAAAAAAAAIADAAAAAAAAAQAAADoAAAAAAAAAAAAAAJADAAAAAAAAAQAAADsAAAAAAAAAAAAAAKADAAAAAAAAAQAAADwAAAAAAAAAAAAAALADAAAAAAAAAQAAAD0AAAAAAAAAAAAAAMADAAAAAAAAAQAAAD4AAAAAAAAAAAAAANADAAAAAAAAAQAAAD8AAAAAAAAAAAAAAOADAAAAAAAAAQAAAEAAAAAAAAAAAAAAAPADAAAAAAAAAQAAAEEAAAAAAAAAAAAAAAAEAAAAAAAAAQAAAEIAAAAAAAAAAAAAABAEAAAAAAAAAQAAAEMAAAAAAAAAAAAAACAEAAAAAAAAAQAAAEQAAAAAAAAAAAAAADAEAAAAAAAAAQAAAEUAAAAAAAAAAAAAAEAEAAAAAAAAAQAAAEYAAAAAAAAAAAAAAFAEAAAAAAAAAQAAAEcAAAAAAAAAAAAAAGAEAAAAAAAAAQAAAEgAAAAAAAAAAAAAAHAEAAAAAAAAAQAAAEkAAAAAAAAAAAAAAIAEAAAAAAAAAQAAAEoAAAAAAAAAAAAAAJAEAAAAAAAAAQAAAEsAAAAAAAAAAAAAAKAEAAAAAAAAAQAAAEwAAAAAAAAAAAAAALAEAAAAAAAAAQAAAE0AAAAAAAAAAAAAAMAEAAAAAAAAAQAAAE4AAAAAAAAAAAAAANAEAAAAAAAAAQAAAE8AAAAAAAAAAAAAAOAEAAAAAAAAAQAAAFAAAAAAAAAAAAAAAPAEAAAAAAAAAQAAAFEAAAAAAAAAAAAAAAAFAAAAAAAAAQAAAFIAAAAAAAAAAAAAABAFAAAAAAAAAQAAAFMAAAAAAAAAAAAAACAFAAAAAAAAAQAAAFQAAAAAAAAAAAAAADAFAAAAAAAAAQAAAFUAAAAAAAAAAAAAAEAFAAAAAAAAAQAAAFYAAAAAAAAAAAAAAFAFAAAAAAAAAQAAAFcAAAAAAAAAAAAAAGAFAAAAAAAAAQAAAFgAAAAAAAAAAAAAAHAFAAAAAAAAAQAAAFkAAAAAAAAAAAAAAIAFAAAAAAAAAQAAAFoAAAAAAAAAAAAAAJAFAAAAAAAAAQAAAFsAAAAAAAAAAAAAAKAFAAAAAAAAAQAAAFwAAAAAAAAAAAAAALAFAAAAAAAAAQAAAF0AAAAAAAAAAAAAAMAFAAAAAAAAAQAAAF4AAAAAAAAAAAAAANAFAAAAAAAAAQAAAF8AAAAAAAAAAAAAAOAFAAAAAAAAAQAAAGAAAAAAAAAAAAAAAPAFAAAAAAAAAQAAAGEAAAAAAAAAAAAAAAAGAAAAAAAAAQAAAGIAAAAAAAAAAAAAABAGAAAAAAAAAQAAAGMAAAAAAAAAAAAAACAGAAAAAAAAAQAAAGQAAAAAAAAAAAAAADAGAAAAAAAAAQAAAGUAAAAAAAAAAAAAAEAGAAAAAAAAAQAAAGYAAAAAAAAAAAAAAFAGAAAAAAAAAQAAAGcAAAAAAAAAAAAAAGAGAAAAAAAAAQAAAGgAAAAAAAAAAAAAAHAGAAAAAAAAAQAAAGkAAAAAAAAAAAAAAIAGAAAAAAAAAQAAAGoAAAAAAAAAAAAAAJAGAAAAAAAAAQAAAGsAAAAAAAAAAAAAAKAGAAAAAAAAAQAAAGwAAAAAAAAAAAAAALAGAAAAAAAAAQAAAG0AAAAAAAAAAAAAAMAGAAAAAAAAAQAAAG4AAAAAAAAAAAAAANAGAAAAAAAAAQAAAG8AAAAAAAAAAAAAAOAGAAAAAAAAAQAAAHAAAAAAAAAAAAAAAPAGAAAAAAAAAQAAAHEAAAAAAAAAAAAAAAAHAAAAAAAAAQAAAHIAAAAAAAAAAAAAABAHAAAAAAAAAQAAAHMAAAAAAAAAAAAAACAHAAAAAAAAAQAAAHQAAAAAAAAAAAAAADAHAAAAAAAAAQAAAHUAAAAAAAAAAAAAAEAHAAAAAAAAAQAAAHYAAAAAAAAAAAAAAFAHAAAAAAAAAQAAAHcAAAAAAAAAAAAAAGAHAAAAAAAAAQAAAHgAAAAAAAAAAAAAAHAHAAAAAAAAAQAAAHkAAAAAAAAAAAAAAIAHAAAAAAAAAQAAAHoAAAAAAAAAAAAAAJAHAAAAAAAAAQAAAHsAAAAAAAAAAAAAAKAHAAAAAAAAAQAAAHwAAAAAAAAAAAAAALAHAAAAAAAAAQAAAH0AAAAAAAAAAAAAAMAHAAAAAAAAAQAAAH4AAAAAAAAAAAAAANAHAAAAAAAAAQAAAH8AAAAAAAAAAAAAAOAHAAAAAAAAAQAAAIAAAAAAAAAAAAAAAPAHAAAAAAAAAQAAAIEAAAAAAAAAAAAAAAAIAAAAAAAAAQAAAIIAAAAAAAAAAAAAABAIAAAAAAAAAQAAAIMAAAAAAAAAAAAAACAIAAAAAAAAAQAAAIQAAAAAAAAAAAAAADAIAAAAAAAAAQAAAIUAAAAAAAAAAAAAAEAIAAAAAAAAAQAAAIYAAAAAAAAAAAAAAFAIAAAAAAAAAQAAAIcAAAAAAAAAAAAAAGAIAAAAAAAAAQAAAIgAAAAAAAAAAAAAAHAIAAAAAAAAAQAAAIkAAAAAAAAAAAAAAIAIAAAAAAAAAQAAAIoAAAAAAAAAAAAAAJAIAAAAAAAAAQAAAIsAAAAAAAAAAAAAAKAIAAAAAAAAAQAAAIwAAAAAAAAAAAAAALAIAAAAAAAAAQAAAI0AAAAAAAAAAAAAAMAIAAAAAAAAAQAAAI4AAAAAAAAAAAAAANAIAAAAAAAAAQAAAI8AAAAAAAAAAAAAAOAIAAAAAAAAAQAAAJAAAAAAAAAAAAAAAPAIAAAAAAAAAQAAAJEAAAAAAAAAAAAAAAAJAAAAAAAAAQAAAJIAAAAAAAAAAAAAABAJAAAAAAAAAQAAAJMAAAAAAAAAAAAAACAJAAAAAAAAAQAAAJQAAAAAAAAAAAAAADAJAAAAAAAAAQAAAJUAAAAAAAAAAAAAAEAJAAAAAAAAAQAAAJYAAAAAAAAAAAAAAFAJAAAAAAAAAQAAAJcAAAAAAAAAAAAAAGAJAAAAAAAAAQAAAJgAAAAAAAAAAAAAAHAJAAAAAAAAAQAAAJkAAAAAAAAAAAAAAIAJAAAAAAAAAQAAAJoAAAAAAAAAAAAAAJAJAAAAAAAAAQAAAJsAAAAAAAAAAAAAAKAJAAAAAAAAAQAAAJwAAAAAAAAAAAAAALAJAAAAAAAAAQAAAJ0AAAAAAAAAAAAAAMAJAAAAAAAAAQAAAJ4AAAAAAAAAAAAAANAJAAAAAAAAAQAAAJ8AAAAAAAAAAAAAAOAJAAAAAAAAAQAAAKAAAAAAAAAAAAAAAPAJAAAAAAAAAQAAAKEAAAAAAAAAAAAAAAAKAAAAAAAAAQAAAKIAAAAAAAAAAAAAABAKAAAAAAAAAQAAAKMAAAAAAAAAAAAAACAKAAAAAAAAAQAAAKQAAAAAAAAAAAAAADAKAAAAAAAAAQAAAKUAAAAAAAAAAAAAAEAKAAAAAAAAAQAAAKYAAAAAAAAAAAAAAFAKAAAAAAAAAQAAAKcAAAAAAAAAAAAAAGAKAAAAAAAAAQAAAKgAAAAAAAAAAAAAAHAKAAAAAAAAAQAAAKkAAAAAAAAAAAAAAIAKAAAAAAAAAQAAAKoAAAAAAAAAAAAAAJAKAAAAAAAAAQAAAKsAAAAAAAAAAAAAAKAKAAAAAAAAAQAAAKwAAAAAAAAAAAAAALAKAAAAAAAAAQAAAK0AAAAAAAAAAAAAAMAKAAAAAAAAAQAAAK4AAAAAAAAAAAAAANAKAAAAAAAAAQAAAK8AAAAAAAAAAAAAAOAKAAAAAAAAAQAAALAAAAAAAAAAAAAAAPAKAAAAAAAAAQAAALEAAAAAAAAAAAAAAAALAAAAAAAAAQAAALIAAAAAAAAAAAAAABALAAAAAAAAAQAAALMAAAAAAAAAAAAAACALAAAAAAAAAQAAALQAAAAAAAAAAAAAADALAAAAAAAAAQAAALUAAAAAAAAAAAAAAEALAAAAAAAAAQAAALYAAAAAAAAAAAAAAFALAAAAAAAAAQAAALcAAAAAAAAAAAAAAGALAAAAAAAAAQAAALgAAAAAAAAAAAAAAHALAAAAAAAAAQAAALkAAAAAAAAAAAAAAIALAAAAAAAAAQAAALoAAAAAAAAAAAAAAJALAAAAAAAAAQAAALsAAAAAAAAAAAAAAKALAAAAAAAAAQAAALwAAAAAAAAAAAAAALALAAAAAAAAAQAAAL0AAAAAAAAAAAAAAMALAAAAAAAAAQAAAL4AAAAAAAAAAAAAANALAAAAAAAAAQAAAL8AAAAAAAAAAAAAAOALAAAAAAAAAQAAAMAAAAAAAAAAAAAAAPALAAAAAAAAAQAAAMEAAAAAAAAAAAAAAAAMAAAAAAAAAQAAAMIAAAAAAAAAAAAAABAMAAAAAAAAAQAAAMMAAAAAAAAAAAAAACAMAAAAAAAAAQAAAMQAAAAAAAAAAAAAADAMAAAAAAAAAQAAAMUAAAAAAAAAAAAAAEAMAAAAAAAAAQAAAMYAAAAAAAAAAAAAAFAMAAAAAAAAAQAAAMcAAAAAAAAAAAAAAGAMAAAAAAAAAQAAAMgAAAAAAAAAAAAAAHAMAAAAAAAAAQAAAMkAAAAAAAAAAAAAAIAMAAAAAAAAAQAAAMoAAAAAAAAAAAAAAJAMAAAAAAAAAQAAAMsAAAAAAAAAAAAAAKAMAAAAAAAAAQAAAMwAAAAAAAAAAAAAALAMAAAAAAAAAQAAAM0AAAAAAAAAAAAAAMAMAAAAAAAAAQAAAM4AAAAAAAAAAAAAANAMAAAAAAAAAQAAAM8AAAAAAAAAAAAAAOAMAAAAAAAAAQAAANAAAAAAAAAAAAAAAPAMAAAAAAAAAQAAANEAAAAAAAAAAAAAAAANAAAAAAAAAQAAANIAAAAAAAAAAAAAABANAAAAAAAAAQAAANMAAAAAAAAAAAAAACANAAAAAAAAAQAAANQAAAAAAAAAAAAAADANAAAAAAAAAQAAANUAAAAAAAAAAAAAAEANAAAAAAAAAQAAANYAAAAAAAAAAAAAAFANAAAAAAAAAQAAANcAAAAAAAAAAAAAAGANAAAAAAAAAQAAANgAAAAAAAAAAAAAAHANAAAAAAAAAQAAANkAAAAAAAAAAAAAAIANAAAAAAAAAQAAANoAAAAAAAAAAAAAAJANAAAAAAAAAQAAANsAAAAAAAAAAAAAAKANAAAAAAAAAQAAANwAAAAAAAAAAAAAALANAAAAAAAAAQAAAN0AAAAAAAAAAAAAAMANAAAAAAAAAQAAAN4AAAAAAAAAAAAAANANAAAAAAAAAQAAAN8AAAAAAAAAAAAAAOANAAAAAAAAAQAAAOAAAAAAAAAAAAAAAPANAAAAAAAAAQAAAOEAAAAAAAAAAAAAAAAOAAAAAAAAAQAAAOIAAAAAAAAAAAAAABAOAAAAAAAAAQAAAOMAAAAAAAAAAAAAACAOAAAAAAAAAQAAAOQAAAAAAAAAAAAAADAOAAAAAAAAAQAAAOUAAAAAAAAAAAAAAEAOAAAAAAAAAQAAAOYAAAAAAAAAAAAAAFAOAAAAAAAAAQAAAOcAAAAAAAAAAAAAAGAOAAAAAAAAAQAAAOgAAAAAAAAAAAAAAHAOAAAAAAAAAQAAAOkAAAAAAAAAAAAAAIAOAAAAAAAAAQAAAOoAAAAAAAAAAAAAAJAOAAAAAAAAAQAAAOsAAAAAAAAAAAAAAKAOAAAAAAAAAQAAAOwAAAAAAAAAAAAAALAOAAAAAAAAAQAAAO0AAAAAAAAAAAAAAMAOAAAAAAAAAQAAAO4AAAAAAAAAAAAAANAOAAAAAAAAAQAAAO8AAAAAAAAAAAAAAOAOAAAAAAAAAQAAAPAAAAAAAAAAAAAAAPAOAAAAAAAAAQAAAPEAAAAAAAAAAAAAAAAPAAAAAAAAAQAAAPIAAAAAAAAAAAAAABAPAAAAAAAAAQAAAPMAAAAAAAAAAAAAACAPAAAAAAAAAQAAAPQAAAAAAAAAAAAAADAPAAAAAAAAAQAAAPUAAAAAAAAAAAAAAEAPAAAAAAAAAQAAAPYAAAAAAAAAAAAAAFAPAAAAAAAAAQAAAPcAAAAAAAAAAAAAAGAPAAAAAAAAAQAAAPgAAAAAAAAAAAAAAHAPAAAAAAAAAQAAAPkAAAAAAAAAAAAAAIAPAAAAAAAAAQAAAPoAAAAAAAAAAAAAAJAPAAAAAAAAAQAAAPsAAAAAAAAAAAAAAKAPAAAAAAAAAQAAAPwAAAAAAAAAAAAAALAPAAAAAAAAAQAAAP0AAAAAAAAAAAAAAMAPAAAAAAAAAQAAAP4AAAAAAAAAAAAAANAPAAAAAAAAAQAAAP8AAAAAAAAAAAAAAOAPAAAAAAAAAQAAAAABAAAAAAAAAAAAAPAPAAAAAAAAAQAAAAEBAAAAAAAAAAAAAAAQAAAAAAAAAQAAAAIBAAAAAAAAAAAAABAQAAAAAAAAAQAAAAMBAAAAAAAAAAAAACAQAAAAAAAAAQAAAAQBAAAAAAAAAAAAADAQAAAAAAAAAQAAAAUBAAAAAAAAAAAAAEAQAAAAAAAAAQAAAAYBAAAAAAAAAAAAAFAQAAAAAAAAAQAAAAcBAAAAAAAAAAAAAGAQAAAAAAAAAQAAAAgBAAAAAAAAAAAAAHAQAAAAAAAAAQAAAAkBAAAAAAAAAAAAAIAQAAAAAAAAAQAAAAoBAAAAAAAAAAAAAJAQAAAAAAAAAQAAAAsBAAAAAAAAAAAAAKAQAAAAAAAAAQAAAAwBAAAAAAAAAAAAALAQAAAAAAAAAQAAAA0BAAAAAAAAAAAAAMAQAAAAAAAAAQAAAA4BAAAAAAAAAAAAANAQAAAAAAAAAQAAAA8BAAAAAAAAAAAAAOAQAAAAAAAAAQAAABABAAAAAAAAAAAAAPAQAAAAAAAAAQAAABEBAAAAAAAAAAAAAAARAAAAAAAAAQAAABIBAAAAAAAAAAAAABARAAAAAAAAAQAAABMBAAAAAAAAAAAAACARAAAAAAAAAQAAABQBAAAAAAAAAAAAADARAAAAAAAAAQAAABUBAAAAAAAAAAAAAEARAAAAAAAAAQAAABYBAAAAAAAAAAAAAFARAAAAAAAAAQAAABcBAAAAAAAAAAAAAGARAAAAAAAAAQAAABgBAAAAAAAAAAAAAHARAAAAAAAAAQAAABkBAAAAAAAAAAAAAIARAAAAAAAAAQAAABoBAAAAAAAAAAAAAJARAAAAAAAAAQAAABsBAAAAAAAAAAAAAKARAAAAAAAAAQAAABwBAAAAAAAAAAAAALARAAAAAAAAAQAAAB0BAAAAAAAAAAAAAMARAAAAAAAAAQAAAB4BAAAAAAAAAAAAANARAAAAAAAAAQAAAB8BAAAAAAAAAAAAAOARAAAAAAAAAQAAACABAAAAAAAAAAAAAPARAAAAAAAAAQAAACEBAAAAAAAAAAAAAAASAAAAAAAAAQAAACIBAAAAAAAAAAAAABASAAAAAAAAAQAAACMBAAAAAAAAAAAAACASAAAAAAAAAQAAACQBAAAAAAAAAAAAADASAAAAAAAAAQAAACUBAAAAAAAAAAAAAEASAAAAAAAAAQAAACYBAAAAAAAAAAAAAFASAAAAAAAAAQAAACcBAAAAAAAAAAAAAGASAAAAAAAAAQAAACgBAAAAAAAAAAAAAHASAAAAAAAAAQAAACkBAAAAAAAAAAAAAIASAAAAAAAAAQAAACoBAAAAAAAAAAAAAJASAAAAAAAAAQAAACsBAAAAAAAAAAAAAKASAAAAAAAAAQAAACwBAAAAAAAAAAAAALASAAAAAAAAAQAAAC0BAAAAAAAAAAAAAMASAAAAAAAAAQAAAC4BAAAAAAAAAAAAANASAAAAAAAAAQAAAC8BAAAAAAAAAAAAAOASAAAAAAAAAQAAADABAAAAAAAAAAAAAPASAAAAAAAAAQAAADEBAAAAAAAAAAAAAAATAAAAAAAAAQAAADIBAAAAAAAAAAAAABATAAAAAAAAAQAAADMBAAAAAAAAAAAAACATAAAAAAAAAQAAADQBAAAAAAAAAAAAADATAAAAAAAAAQAAADUBAAAAAAAAAAAAAEATAAAAAAAAAQAAADYBAAAAAAAAAAAAAFATAAAAAAAAAQAAADcBAAAAAAAAAAAAAGATAAAAAAAAAQAAADgBAAAAAAAAAAAAAHATAAAAAAAAAQAAADkBAAAAAAAAAAAAAIATAAAAAAAAAQAAADoBAAAAAAAAAAAAAJATAAAAAAAAAQAAADsBAAAAAAAAAAAAAKATAAAAAAAAAQAAADwBAAAAAAAAAAAAALATAAAAAAAAAQAAAD0BAAAAAAAAAAAAAMATAAAAAAAAAQAAAD4BAAAAAAAAAAAAANATAAAAAAAAAQAAAD8BAAAAAAAAAAAAAOATAAAAAAAAAQAAAEABAAAAAAAAAAAAAPATAAAAAAAAAQAAAEEBAAAAAAAAAAAAAAAUAAAAAAAAAQAAAEIBAAAAAAAAAAAAABAUAAAAAAAAAQAAAEMBAAAAAAAAAAAAACAUAAAAAAAAAQAAAEQBAAAAAAAAAAAAADAUAAAAAAAAAQAAAEUBAAAAAAAAAAAAAEAUAAAAAAAAAQAAAEYBAAAAAAAAAAAAAFAUAAAAAAAAAQAAAEcBAAAAAAAAAAAAAGAUAAAAAAAAAQAAAEgBAAAAAAAAAAAAAHAUAAAAAAAAAQAAAEkBAAAAAAAAAAAAAIAUAAAAAAAAAQAAAEoBAAAAAAAAAAAAAJAUAAAAAAAAAQAAAEsBAAAAAAAAAAAAAKAUAAAAAAAAAQAAAEwBAAAAAAAAAAAAALAUAAAAAAAAAQAAAE0BAAAAAAAAAAAAAMAUAAAAAAAAAQAAAE4BAAAAAAAAAAAAANAUAAAAAAAAAQAAAE8BAAAAAAAAAAAAAOAUAAAAAAAAAQAAAFABAAAAAAAAAAAAAPAUAAAAAAAAAQAAAFEBAAAAAAAAAAAAAAAVAAAAAAAAAQAAAFIBAAAAAAAAAAAAABAVAAAAAAAAAQAAAFMBAAAAAAAAAAAAACAVAAAAAAAAAQAAAFQBAAAAAAAAAAAAADAVAAAAAAAAAQAAAFUBAAAAAAAAAAAAAEAVAAAAAAAAAQAAAFYBAAAAAAAAAAAAAFAVAAAAAAAAAQAAAFcBAAAAAAAAAAAAAGAVAAAAAAAAAQAAAFgBAAAAAAAAAAAAAHAVAAAAAAAAAQAAAFkBAAAAAAAAAAAAAIAVAAAAAAAAAQAAAFoBAAAAAAAAAAAAAJAVAAAAAAAAAQAAAFsBAAAAAAAAAAAAAKAVAAAAAAAAAQAAAFwBAAAAAAAAAAAAALAVAAAAAAAAAQAAAF0BAAAAAAAAAAAAAMAVAAAAAAAAAQAAAF4BAAAAAAAAAAAAANAVAAAAAAAAAQAAAF8BAAAAAAAAAAAAAOAVAAAAAAAAAQAAAGABAAAAAAAAAAAAAPAVAAAAAAAAAQAAAGEBAAAAAAAAAAAAAAAWAAAAAAAAAQAAAGIBAAAAAAAAAAAAABAWAAAAAAAAAQAAAGMBAAAAAAAAAAAAACAWAAAAAAAAAQAAAGQBAAAAAAAAAAAAADAWAAAAAAAAAQAAAGUBAAAAAAAAAAAAAEAWAAAAAAAAAQAAAGYBAAAAAAAAAAAAAFAWAAAAAAAAAQAAAGcBAAAAAAAAAAAAAGAWAAAAAAAAAQAAAGgBAAAAAAAAAAAAAHAWAAAAAAAAAQAAAGkBAAAAAAAAAAAAAIAWAAAAAAAAAQAAAGoBAAAAAAAAAAAAAJAWAAAAAAAAAQAAAGsBAAAAAAAAAAAAAKAWAAAAAAAAAQAAAGwBAAAAAAAAAAAAALAWAAAAAAAAAQAAAG0BAAAAAAAAAAAAAMAWAAAAAAAAAQAAAG4BAAAAAAAAAAAAANAWAAAAAAAAAQAAAG8BAAAAAAAAAAAAAOAWAAAAAAAAAQAAAHABAAAAAAAAAAAAAPAWAAAAAAAAAQAAAHEBAAAAAAAAAAAAAAAXAAAAAAAAAQAAAHIBAAAAAAAAAAAAABAXAAAAAAAAAQAAAHMBAAAAAAAAAAAAACAXAAAAAAAAAQAAAHQBAAAAAAAAAAAAADAXAAAAAAAAAQAAAHUBAAAAAAAAAAAAAEAXAAAAAAAAAQAAAHYBAAAAAAAAAAAAAFAXAAAAAAAAAQAAAHcBAAAAAAAAAAAAAGAXAAAAAAAAAQAAAHgBAAAAAAAAAAAAAHAXAAAAAAAAAQAAAHkBAAAAAAAAAAAAAIAXAAAAAAAAAQAAAHoBAAAAAAAAAAAAAJAXAAAAAAAAAQAAAHsBAAAAAAAAAAAAAKAXAAAAAAAAAQAAAHwBAAAAAAAAAAAAALAXAAAAAAAAAQAAAH0BAAAAAAAAAAAAAMAXAAAAAAAAAQAAAH4BAAAAAAAAAAAAANAXAAAAAAAAAQAAAH8BAAAAAAAAAAAAAOAXAAAAAAAAAQAAAIABAAAAAAAAAAAAAPAXAAAAAAAAAQAAAIEBAAAAAAAAAAAAAAAYAAAAAAAAAQAAAIIBAAAAAAAAAAAAABAYAAAAAAAAAQAAAIMBAAAAAAAAAAAAACAYAAAAAAAAAQAAAIQBAAAAAAAAAAAAADAYAAAAAAAAAQAAAIUBAAAAAAAAAAAAAEAYAAAAAAAAAQAAAIYBAAAAAAAAAAAAAFAYAAAAAAAAAQAAAIcBAAAAAAAAAAAAAGAYAAAAAAAAAQAAAIgBAAAAAAAAAAAAAHAYAAAAAAAAAQAAAIkBAAAAAAAAAAAAAIAYAAAAAAAAAQAAAIoBAAAAAAAAAAAAAJAYAAAAAAAAAQAAAIsBAAAAAAAAAAAAAKAYAAAAAAAAAQAAAIwBAAAAAAAAAAAAALAYAAAAAAAAAQAAAI0BAAAAAAAAAAAAAMAYAAAAAAAAAQAAAI4BAAAAAAAAAAAAANAYAAAAAAAAAQAAAI8BAAAAAAAAAAAAAOAYAAAAAAAAAQAAAJABAAAAAAAAAAAAAPAYAAAAAAAAAQAAAJEBAAAAAAAAAAAAAAAZAAAAAAAAAQAAAJIBAAAAAAAAAAAAABAZAAAAAAAAAQAAAJMBAAAAAAAAAAAAACAZAAAAAAAAAQAAAJQBAAAAAAAAAAAAADAZAAAAAAAAAQAAAJUBAAAAAAAAAAAAAEAZAAAAAAAAAQAAAJYBAAAAAAAAAAAAAFAZAAAAAAAAAQAAAJcBAAAAAAAAAAAAAGAZAAAAAAAAAQAAAJgBAAAAAAAAAAAAAHAZAAAAAAAAAQAAAJkBAAAAAAAAAAAAAIAZAAAAAAAAAQAAAJoBAAAAAAAAAAAAAJAZAAAAAAAAAQAAAJsBAAAAAAAAAAAAAKAZAAAAAAAAAQAAAJwBAAAAAAAAAAAAALAZAAAAAAAAAQAAAJ0BAAAAAAAAAAAAAMAZAAAAAAAAAQAAAJ4BAAAAAAAAAAAAANAZAAAAAAAAAQAAAJ8BAAAAAAAAAAAAAOAZAAAAAAAAAQAAAKABAAAAAAAAAAAAAPAZAAAAAAAAAQAAAKEBAAAAAAAAAAAAAAAaAAAAAAAAAQAAAKIBAAAAAAAAAAAAABAaAAAAAAAAAQAAAKMBAAAAAAAAAAAAACAaAAAAAAAAAQAAAKQBAAAAAAAAAAAAADAaAAAAAAAAAQAAAKUBAAAAAAAAAAAAAEAaAAAAAAAAAQAAAKYBAAAAAAAAAAAAAFAaAAAAAAAAAQAAAKcBAAAAAAAAAAAAAGAaAAAAAAAAAQAAAKgBAAAAAAAAAAAAAHAaAAAAAAAAAQAAAKkBAAAAAAAAAAAAAIAaAAAAAAAAAQAAAKoBAAAAAAAAAAAAAJAaAAAAAAAAAQAAAKsBAAAAAAAAAAAAAKAaAAAAAAAAAQAAAKwBAAAAAAAAAAAAALAaAAAAAAAAAQAAAK0BAAAAAAAAAAAAAMAaAAAAAAAAAQAAAK4BAAAAAAAAAAAAANAaAAAAAAAAAQAAAK8BAAAAAAAAAAAAAOAaAAAAAAAAAQAAALABAAAAAAAAAAAAAPAaAAAAAAAAAQAAALEBAAAAAAAAAAAAAAAbAAAAAAAAAQAAALIBAAAAAAAAAAAAABAbAAAAAAAAAQAAALMBAAAAAAAAAAAAACAbAAAAAAAAAQAAALQBAAAAAAAAAAAAADAbAAAAAAAAAQAAALUBAAAAAAAAAAAAAEAbAAAAAAAAAQAAALYBAAAAAAAAAAAAAFAbAAAAAAAAAQAAALcBAAAAAAAAAAAAAGAbAAAAAAAAAQAAALgBAAAAAAAAAAAAAHAbAAAAAAAAAQAAALkBAAAAAAAAAAAAAIAbAAAAAAAAAQAAALoBAAAAAAAAAAAAAJAbAAAAAAAAAQAAALsBAAAAAAAAAAAAAKAbAAAAAAAAAQAAALwBAAAAAAAAAAAAALAbAAAAAAAAAQAAAL0BAAAAAAAAAAAAAMAbAAAAAAAAAQAAAL4BAAAAAAAAAAAAANAbAAAAAAAAAQAAAL8BAAAAAAAAAAAAAOAbAAAAAAAAAQAAAMABAAAAAAAAAAAAAPAbAAAAAAAAAQAAAMEBAAAAAAAAAAAAAAAcAAAAAAAAAQAAAMIBAAAAAAAAAAAAABAcAAAAAAAAAQAAAMMBAAAAAAAAAAAAACAcAAAAAAAAAQAAAMQBAAAAAAAAAAAAADAcAAAAAAAAAQAAAMUBAAAAAAAAAAAAAEAcAAAAAAAAAQAAAMYBAAAAAAAAAAAAAFAcAAAAAAAAAQAAAMcBAAAAAAAAAAAAAGAcAAAAAAAAAQAAAMgBAAAAAAAAAAAAAHAcAAAAAAAAAQAAAMkBAAAAAAAAAAAAAIAcAAAAAAAAAQAAAMoBAAAAAAAAAAAAAJAcAAAAAAAAAQAAAMsBAAAAAAAAAAAAAKAcAAAAAAAAAQAAAMwBAAAAAAAAAAAAALAcAAAAAAAAAQAAAM0BAAAAAAAAAAAAAMAcAAAAAAAAAQAAAM4BAAAAAAAAAAAAANAcAAAAAAAAAQAAAM8BAAAAAAAAAAAAAOAcAAAAAAAAAQAAANABAAAAAAAAAAAAAPAcAAAAAAAAAQAAANEBAAAAAAAAAAAAAAAdAAAAAAAAAQAAANIBAAAAAAAAAAAAABAdAAAAAAAAAQAAANMBAAAAAAAAAAAAACAdAAAAAAAAAQAAANQBAAAAAAAAAAAAADAdAAAAAAAAAQAAANUBAAAAAAAAAAAAAEAdAAAAAAAAAQAAANYBAAAAAAAAAAAAAFAdAAAAAAAAAQAAANcBAAAAAAAAAAAAAGAdAAAAAAAAAQAAANgBAAAAAAAAAAAAAHAdAAAAAAAAAQAAANkBAAAAAAAAAAAAAIAdAAAAAAAAAQAAANoBAAAAAAAAAAAAAJAdAAAAAAAAAQAAANsBAAAAAAAAAAAAAKAdAAAAAAAAAQAAANwBAAAAAAAAAAAAALAdAAAAAAAAAQAAAN0BAAAAAAAAAAAAAMAdAAAAAAAAAQAAAN4BAAAAAAAAAAAAANAdAAAAAAAAAQAAAN8BAAAAAAAAAAAAAOAdAAAAAAAAAQAAAOABAAAAAAAAAAAAAPAdAAAAAAAAAQAAAOEBAAAAAAAAAAAAAAAeAAAAAAAAAQAAAOIBAAAAAAAAAAAAABAeAAAAAAAAAQAAAOMBAAAAAAAAAAAAACAeAAAAAAAAAQAAAOQBAAAAAAAAAAAAADAeAAAAAAAAAQAAAOUBAAAAAAAAAAAAAEAeAAAAAAAAAQAAAOYBAAAAAAAAAAAAAFAeAAAAAAAAAQAAAOcBAAAAAAAAAAAAAGAeAAAAAAAAAQAAAOgBAAAAAAAAAAAAAHAeAAAAAAAAAQAAAOkBAAAAAAAAAAAAAIAeAAAAAAAAAQAAAOoBAAAAAAAAAAAAAJAeAAAAAAAAAQAAAOsBAAAAAAAAAAAAAKAeAAAAAAAAAQAAAOwBAAAAAAAAAAAAALAeAAAAAAAAAQAAAO0BAAAAAAAAAAAAAMAeAAAAAAAAAQAAAO4BAAAAAAAAAAAAANAeAAAAAAAAAQAAAO8BAAAAAAAAAAAAAOAeAAAAAAAAAQAAAPABAAAAAAAAAAAAAPAeAAAAAAAAAQAAAPEBAAAAAAAAAAAAAAAfAAAAAAAAAQAAAPIBAAAAAAAAAAAAABAfAAAAAAAAAQAAAPMBAAAAAAAAAAAAACAfAAAAAAAAAQAAAPQBAAAAAAAAAAAAADAfAAAAAAAAAQAAAPUBAAAAAAAAAAAAAEAfAAAAAAAAAQAAAPYBAAAAAAAAAAAAAFAfAAAAAAAAAQAAAPcBAAAAAAAAAAAAAGAfAAAAAAAAAQAAAPgBAAAAAAAAAAAAAHAfAAAAAAAAAQAAAPkBAAAAAAAAAAAAAIAfAAAAAAAAAQAAAPoBAAAAAAAAAAAAAJAfAAAAAAAAAQAAAPsBAAAAAAAAAAAAAKAfAAAAAAAAAQAAAPwBAAAAAAAAAAAAALAfAAAAAAAAAQAAAP0BAAAAAAAAAAAAAMAfAAAAAAAAAQAAAP4BAAAAAAAAAAAAANAfAAAAAAAAAQAAAP8BAAAAAAAAAAAAAOAfAAAAAAAAAQAAAAACAAAAAAAAAAAAAPAfAAAAAAAAAQAAAAECAAAAAAAAAAAAAAAgAAAAAAAAAQAAAAICAAAAAAAAAAAAABAgAAAAAAAAAQAAAAMCAAAAAAAAAAAAACAgAAAAAAAAAQAAAAQCAAAAAAAAAAAAADAgAAAAAAAAAQAAAAUCAAAAAAAAAAAAAEAgAAAAAAAAAQAAAAYCAAAAAAAAAAAAAFAgAAAAAAAAAQAAAAcCAAAAAAAAAAAAAGAgAAAAAAAAAQAAAAgCAAAAAAAAAAAAAHAgAAAAAAAAAQAAAAkCAAAAAAAAAAAAAIAgAAAAAAAAAQAAAAoCAAAAAAAAAAAAAJAgAAAAAAAAAQAAAAsCAAAAAAAAAAAAAKAgAAAAAAAAAQAAAAwCAAAAAAAAAAAAALAgAAAAAAAAAQAAAA0CAAAAAAAAAAAAAMAgAAAAAAAAAQAAAA4CAAAAAAAAAAAAANAgAAAAAAAAAQAAAA8CAAAAAAAAAAAAAOAgAAAAAAAAAQAAABACAAAAAAAAAAAAAPAgAAAAAAAAAQAAABECAAAAAAAAAAAAAAAhAAAAAAAAAQAAABICAAAAAAAAAAAAABAhAAAAAAAAAQAAABMCAAAAAAAAAAAAACAhAAAAAAAAAQAAABQCAAAAAAAAAAAAADAhAAAAAAAAAQAAABUCAAAAAAAAAAAAAEAhAAAAAAAAAQAAABYCAAAAAAAAAAAAAFAhAAAAAAAAAQAAABcCAAAAAAAAAAAAAGAhAAAAAAAAAQAAABgCAAAAAAAAAAAAAHAhAAAAAAAAAQAAABkCAAAAAAAAAAAAAIAhAAAAAAAAAQAAABoCAAAAAAAAAAAAAJAhAAAAAAAAAQAAABsCAAAAAAAAAAAAAKAhAAAAAAAAAQAAABwCAAAAAAAAAAAAALAhAAAAAAAAAQAAAB0CAAAAAAAAAAAAAMAhAAAAAAAAAQAAAB4CAAAAAAAAAAAAANAhAAAAAAAAAQAAAB8CAAAAAAAAAAAAAOAhAAAAAAAAAQAAACACAAAAAAAAAAAAAPAhAAAAAAAAAQAAACECAAAAAAAAAAAAAAAiAAAAAAAAAQAAACICAAAAAAAAAAAAABAiAAAAAAAAAQAAACMCAAAAAAAAAAAAACAiAAAAAAAAAQAAACQCAAAAAAAAAAAAADAiAAAAAAAAAQAAACUCAAAAAAAAAAAAAEAiAAAAAAAAAQAAACYCAAAAAAAAAAAAAFAiAAAAAAAAAQAAACcCAAAAAAAAAAAAAGAiAAAAAAAAAQAAACgCAAAAAAAAAAAAAHAiAAAAAAAAAQAAACkCAAAAAAAAAAAAAIAiAAAAAAAAAQAAACoCAAAAAAAAAAAAAJAiAAAAAAAAAQAAACsCAAAAAAAAAAAAAKAiAAAAAAAAAQAAACwCAAAAAAAAAAAAALAiAAAAAAAAAQAAAC0CAAAAAAAAAAAAAMAiAAAAAAAAAQAAAC4CAAAAAAAAAAAAANAiAAAAAAAAAQAAAC8CAAAAAAAAAAAAAOAiAAAAAAAAAQAAADACAAAAAAAAAAAAAPAiAAAAAAAAAQAAADECAAAAAAAAAAAAAAAjAAAAAAAAAQAAADICAAAAAAAAAAAAABAjAAAAAAAAAQAAADMCAAAAAAAAAAAAACAjAAAAAAAAAQAAADQCAAAAAAAAAAAAADAjAAAAAAAAAQAAADUCAAAAAAAAAAAAAEAjAAAAAAAAAQAAADYCAAAAAAAAAAAAAFAjAAAAAAAAAQAAADcCAAAAAAAAAAAAAGAjAAAAAAAAAQAAADgCAAAAAAAAAAAAAHAjAAAAAAAAAQAAADkCAAAAAAAAAAAAAIAjAAAAAAAAAQAAADoCAAAAAAAAAAAAAJAjAAAAAAAAAQAAADsCAAAAAAAAAAAAAKAjAAAAAAAAAQAAADwCAAAAAAAAAAAAALAjAAAAAAAAAQAAAD0CAAAAAAAAAAAAAMAjAAAAAAAAAQAAAD4CAAAAAAAAAAAAANAjAAAAAAAAAQAAAD8CAAAAAAAAAAAAAOAjAAAAAAAAAQAAAEACAAAAAAAAAAAAAPAjAAAAAAAAAQAAAEECAAAAAAAAAAAAAAAkAAAAAAAAAQAAAEICAAAAAAAAAAAAABAkAAAAAAAAAQAAAEMCAAAAAAAAAAAAACAkAAAAAAAAAQAAAEQCAAAAAAAAAAAAADAkAAAAAAAAAQAAAEUCAAAAAAAAAAAAAEAkAAAAAAAAAQAAAEYCAAAAAAAAAAAAAFAkAAAAAAAAAQAAAEcCAAAAAAAAAAAAAGAkAAAAAAAAAQAAAEgCAAAAAAAAAAAAAHAkAAAAAAAAAQAAAEkCAAAAAAAAAAAAAIAkAAAAAAAAAQAAAEoCAAAAAAAAAAAAAJAkAAAAAAAAAQAAAEsCAAAAAAAAAAAAAKAkAAAAAAAAAQAAAEwCAAAAAAAAAAAAALAkAAAAAAAAAQAAAE0CAAAAAAAAAAAAAMAkAAAAAAAAAQAAAE4CAAAAAAAAAAAAANAkAAAAAAAAAQAAAE8CAAAAAAAAAAAAAOAkAAAAAAAAAQAAAFACAAAAAAAAAAAAAPAkAAAAAAAAAQAAAFECAAAAAAAAAAAAAAAlAAAAAAAAAQAAAFICAAAAAAAAAAAAABAlAAAAAAAAAQAAAFMCAAAAAAAAAAAAACAlAAAAAAAAAQAAAFQCAAAAAAAAAAAAADAlAAAAAAAAAQAAAFUCAAAAAAAAAAAAAEAlAAAAAAAAAQAAAFYCAAAAAAAAAAAAAFAlAAAAAAAAAQAAAFcCAAAAAAAAAAAAAGAlAAAAAAAAAQAAAFgCAAAAAAAAAAAAAHAlAAAAAAAAAQAAAFkCAAAAAAAAAAAAAIAlAAAAAAAAAQAAAFoCAAAAAAAAAAAAAJAlAAAAAAAAAQAAAFsCAAAAAAAAAAAAAKAlAAAAAAAAAQAAAFwCAAAAAAAAAAAAALAlAAAAAAAAAQAAAF0CAAAAAAAAAAAAAMAlAAAAAAAAAQAAAF4CAAAAAAAAAAAAANAlAAAAAAAAAQAAAF8CAAAAAAAAAAAAAOAlAAAAAAAAAQAAAGACAAAAAAAAAAAAAPAlAAAAAAAAAQAAAGECAAAAAAAAAAAAAAAmAAAAAAAAAQAAAGICAAAAAAAAAAAAABAmAAAAAAAAAQAAAGMCAAAAAAAAAAAAACAmAAAAAAAAAQAAAGQCAAAAAAAAAAAAADAmAAAAAAAAAQAAAGUCAAAAAAAAAAAAAEAmAAAAAAAAAQAAAGYCAAAAAAAAAAAAAFAmAAAAAAAAAQAAAGcCAAAAAAAAAAAAAGAmAAAAAAAAAQAAAGgCAAAAAAAAAAAAAHAmAAAAAAAAAQAAAGkCAAAAAAAAAAAAAIAmAAAAAAAAAQAAAGoCAAAAAAAAAAAAAJAmAAAAAAAAAQAAAGsCAAAAAAAAAAAAAKAmAAAAAAAAAQAAAGwCAAAAAAAAAAAAALAmAAAAAAAAAQAAAG0CAAAAAAAAAAAAAMAmAAAAAAAAAQAAAG4CAAAAAAAAAAAAANAmAAAAAAAAAQAAAG8CAAAAAAAAAAAAAOAmAAAAAAAAAQAAAHACAAAAAAAAAAAAAPAmAAAAAAAAAQAAAHECAAAAAAAAAAAAAAAnAAAAAAAAAQAAAHICAAAAAAAAAAAAABAnAAAAAAAAAQAAAHMCAAAAAAAAAAAAACAnAAAAAAAAAQAAAHQCAAAAAAAAAAAAADAnAAAAAAAAAQAAAHUCAAAAAAAAAAAAAEAnAAAAAAAAAQAAAHYCAAAAAAAAAAAAAFAnAAAAAAAAAQAAAHcCAAAAAAAAAAAAAGAnAAAAAAAAAQAAAHgCAAAAAAAAAAAAAHAnAAAAAAAAAQAAAHkCAAAAAAAAAAAAAIAnAAAAAAAAAQAAAHoCAAAAAAAAAAAAAJAnAAAAAAAAAQAAAHsCAAAAAAAAAAAAAKAnAAAAAAAAAQAAAHwCAAAAAAAAAAAAALAnAAAAAAAAAQAAAH0CAAAAAAAAAAAAAMAnAAAAAAAAAQAAAH4CAAAAAAAAAAAAANAnAAAAAAAAAQAAAH8CAAAAAAAAAAAAAOAnAAAAAAAAAQAAAIACAAAAAAAAAAAAAPAnAAAAAAAAAQAAAIECAAAAAAAAAAAAAAAoAAAAAAAAAQAAAIICAAAAAAAAAAAAABAoAAAAAAAAAQAAAIMCAAAAAAAAAAAAACAoAAAAAAAAAQAAAIQCAAAAAAAAAAAAADAoAAAAAAAAAQAAAIUCAAAAAAAAAAAAAEAoAAAAAAAAAQAAAIYCAAAAAAAAAAAAAFAoAAAAAAAAAQAAAIcCAAAAAAAAAAAAAGAoAAAAAAAAAQAAAIgCAAAAAAAAAAAAAHAoAAAAAAAAAQAAAIkCAAAAAAAAAAAAAIAoAAAAAAAAAQAAAIoCAAAAAAAAAAAAAJAoAAAAAAAAAQAAAIsCAAAAAAAAAAAAAKAoAAAAAAAAAQAAAIwCAAAAAAAAAAAAALAoAAAAAAAAAQAAAI0CAAAAAAAAAAAAAMAoAAAAAAAAAQAAAI4CAAAAAAAAAAAAANAoAAAAAAAAAQAAAI8CAAAAAAAAAAAAAOAoAAAAAAAAAQAAAJACAAAAAAAAAAAAAPAoAAAAAAAAAQAAAJECAAAAAAAAAAAAAAApAAAAAAAAAQAAAJICAAAAAAAAAAAAABApAAAAAAAAAQAAAJMCAAAAAAAAAAAAACApAAAAAAAAAQAAAJQCAAAAAAAAAAAAADApAAAAAAAAAQAAAJUCAAAAAAAAAAAAAEApAAAAAAAAAQAAAJYCAAAAAAAAAAAAAFApAAAAAAAAAQAAAJcCAAAAAAAAAAAAAGApAAAAAAAAAQAAAJgCAAAAAAAAAAAAAHApAAAAAAAAAQAAAJkCAAAAAAAAAAAAAIApAAAAAAAAAQAAAJoCAAAAAAAAAAAAAJApAAAAAAAAAQAAAJsCAAAAAAAAAAAAAKApAAAAAAAAAQAAAJwCAAAAAAAAAAAAALApAAAAAAAAAQAAAJ0CAAAAAAAAAAAAAMApAAAAAAAAAQAAAJ4CAAAAAAAAAAAAANApAAAAAAAAAQAAAJ8CAAAAAAAAAAAAAOApAAAAAAAAAQAAAKACAAAAAAAAAAAAAPApAAAAAAAAAQAAAKECAAAAAAAAAAAAAAAqAAAAAAAAAQAAAKICAAAAAAAAAAAAABAqAAAAAAAAAQAAAKMCAAAAAAAAAAAAACAqAAAAAAAAAQAAAKQCAAAAAAAAAAAAADAqAAAAAAAAAQAAAKUCAAAAAAAAAAAAAEAqAAAAAAAAAQAAAKYCAAAAAAAAAAAAAFAqAAAAAAAAAQAAAKcCAAAAAAAAAAAAAGAqAAAAAAAAAQAAAKgCAAAAAAAAAAAAAHAqAAAAAAAAAQAAAKkCAAAAAAAAAAAAAIAqAAAAAAAAAQAAAKoCAAAAAAAAAAAAAJAqAAAAAAAAAQAAAKsCAAAAAAAAAAAAAKAqAAAAAAAAAQAAAKwCAAAAAAAAAAAAALAqAAAAAAAAAQAAAK0CAAAAAAAAAAAAAMAqAAAAAAAAAQAAAK4CAAAAAAAAAAAAANAqAAAAAAAAAQAAAK8CAAAAAAAAAAAAAOAqAAAAAAAAAQAAALACAAAAAAAAAAAAAPAqAAAAAAAAAQAAALECAAAAAAAAAAAAAAArAAAAAAAAAQAAALICAAAAAAAAAAAAABArAAAAAAAAAQAAALMCAAAAAAAAAAAAACArAAAAAAAAAQAAALQCAAAAAAAAAAAAADArAAAAAAAAAQAAALUCAAAAAAAAAAAAAEArAAAAAAAAAQAAALYCAAAAAAAAAAAAAFArAAAAAAAAAQAAALcCAAAAAAAAAAAAAGArAAAAAAAAAQAAALgCAAAAAAAAAAAAAHArAAAAAAAAAQAAALkCAAAAAAAAAAAAAIArAAAAAAAAAQAAALoCAAAAAAAAAAAAAJArAAAAAAAAAQAAALsCAAAAAAAAAAAAAKArAAAAAAAAAQAAALwCAAAAAAAAAAAAALArAAAAAAAAAQAAAL0CAAAAAAAAAAAAAMArAAAAAAAAAQAAAL4CAAAAAAAAAAAAANArAAAAAAAAAQAAAL8CAAAAAAAAAAAAAOArAAAAAAAAAQAAAMACAAAAAAAAAAAAAPArAAAAAAAAAQAAAMECAAAAAAAAAAAAAAAsAAAAAAAAAQAAAMICAAAAAAAAAAAAABAsAAAAAAAAAQAAAMMCAAAAAAAAAAAAACAsAAAAAAAAAQAAAMQCAAAAAAAAAAAAADAsAAAAAAAAAQAAAMUCAAAAAAAAAAAAAEAsAAAAAAAAAQAAAMYCAAAAAAAAAAAAAFAsAAAAAAAAAQAAAMcCAAAAAAAAAAAAAGAsAAAAAAAAAQAAAMgCAAAAAAAAAAAAAHAsAAAAAAAAAQAAAMkCAAAAAAAAAAAAAIAsAAAAAAAAAQAAAMoCAAAAAAAAAAAAAJAsAAAAAAAAAQAAAMsCAAAAAAAAAAAAAKAsAAAAAAAAAQAAAMwCAAAAAAAAAAAAALAsAAAAAAAAAQAAAM0CAAAAAAAAAAAAAMAsAAAAAAAAAQAAAM4CAAAAAAAAAAAAANAsAAAAAAAAAQAAAM8CAAAAAAAAAAAAAOAsAAAAAAAAAQAAANACAAAAAAAAAAAAAPAsAAAAAAAAAQAAANECAAAAAAAAAAAAAAAtAAAAAAAAAQAAANICAAAAAAAAAAAAABAtAAAAAAAAAQAAANMCAAAAAAAAAAAAACAtAAAAAAAAAQAAANQCAAAAAAAAAAAAADAtAAAAAAAAAQAAANUCAAAAAAAAAAAAAEAtAAAAAAAAAQAAANYCAAAAAAAAAAAAAFAtAAAAAAAAAQAAANcCAAAAAAAAAAAAAGAtAAAAAAAAAQAAANgCAAAAAAAAAAAAAHAtAAAAAAAAAQAAANkCAAAAAAAAAAAAAIAtAAAAAAAAAQAAANoCAAAAAAAAAAAAAJAtAAAAAAAAAQAAANsCAAAAAAAAAAAAAKAtAAAAAAAAAQAAANwCAAAAAAAAAAAAALAtAAAAAAAAAQAAAN0CAAAAAAAAAAAAAMAtAAAAAAAAAQAAAN4CAAAAAAAAAAAAANAtAAAAAAAAAQAAAN8CAAAAAAAAAAAAAOAtAAAAAAAAAQAAAOACAAAAAAAAAAAAAPAtAAAAAAAAAQAAAOECAAAAAAAAAAAAAAAuAAAAAAAAAQAAAOICAAAAAAAAAAAAABAuAAAAAAAAAQAAAOMCAAAAAAAAAAAAACAuAAAAAAAAAQAAAOQCAAAAAAAAAAAAADAuAAAAAAAAAQAAAOUCAAAAAAAAAAAAAEAuAAAAAAAAAQAAAOYCAAAAAAAAAAAAAFAuAAAAAAAAAQAAAOcCAAAAAAAAAAAAAGAuAAAAAAAAAQAAAOgCAAAAAAAAAAAAAHAuAAAAAAAAAQAAAOkCAAAAAAAAAAAAAIAuAAAAAAAAAQAAAOoCAAAAAAAAAAAAAJAuAAAAAAAAAQAAAOsCAAAAAAAAAAAAAKAuAAAAAAAAAQAAAOwCAAAAAAAAAAAAALAuAAAAAAAAAQAAAO0CAAAAAAAAAAAAAMAuAAAAAAAAAQAAAO4CAAAAAAAAAAAAANAuAAAAAAAAAQAAAO8CAAAAAAAAAAAAAOAuAAAAAAAAAQAAAPACAAAAAAAAAAAAAPAuAAAAAAAAAQAAAPECAAAAAAAAAAAAAAAvAAAAAAAAAQAAAPICAAAAAAAAAAAAABAvAAAAAAAAAQAAAPMCAAAAAAAAAAAAACAvAAAAAAAAAQAAAPQCAAAAAAAAAAAAADAvAAAAAAAAAQAAAPUCAAAAAAAAAAAAAEAvAAAAAAAAAQAAAPYCAAAAAAAAAAAAAFAvAAAAAAAAAQAAAPcCAAAAAAAAAAAAAGAvAAAAAAAAAQAAAPgCAAAAAAAAAAAAAHAvAAAAAAAAAQAAAPkCAAAAAAAAAAAAAIAvAAAAAAAAAQAAAPoCAAAAAAAAAAAAAJAvAAAAAAAAAQAAAPsCAAAAAAAAAAAAAKAvAAAAAAAAAQAAAPwCAAAAAAAAAAAAALAvAAAAAAAAAQAAAP0CAAAAAAAAAAAAAMAvAAAAAAAAAQAAAP4CAAAAAAAAAAAAANAvAAAAAAAAAQAAAP8CAAAAAAAAAAAAAOAvAAAAAAAAAQAAAAADAAAAAAAAAAAAAPAvAAAAAAAAAQAAAAEDAAAAAAAAAAAAAAAwAAAAAAAAAQAAAAIDAAAAAAAAAAAAABAwAAAAAAAAAQAAAAMDAAAAAAAAAAAAACAwAAAAAAAAAQAAAAQDAAAAAAAAAAAAADAwAAAAAAAAAQAAAAUDAAAAAAAAAAAAAEAwAAAAAAAAAQAAAAYDAAAAAAAAAAAAAFAwAAAAAAAAAQAAAAcDAAAAAAAAAAAAAGAwAAAAAAAAAQAAAAgDAAAAAAAAAAAAAHAwAAAAAAAAAQAAAAkDAAAAAAAAAAAAAIAwAAAAAAAAAQAAAAoDAAAAAAAAAAAAAJAwAAAAAAAAAQAAAAsDAAAAAAAAAAAAAKAwAAAAAAAAAQAAAAwDAAAAAAAAAAAAALAwAAAAAAAAAQAAAA0DAAAAAAAAAAAAAMAwAAAAAAAAAQAAAA4DAAAAAAAAAAAAANAwAAAAAAAAAQAAAA8DAAAAAAAAAAAAAOAwAAAAAAAAAQAAABADAAAAAAAAAAAAAPAwAAAAAAAAAQAAABEDAAAAAAAAAAAAAAAxAAAAAAAAAQAAABIDAAAAAAAAAAAAABAxAAAAAAAAAQAAABMDAAAAAAAAAAAAACAxAAAAAAAAAQAAABQDAAAAAAAAAAAAADAxAAAAAAAAAQAAABUDAAAAAAAAAAAAAEAxAAAAAAAAAQAAABYDAAAAAAAAAAAAAFAxAAAAAAAAAQAAABcDAAAAAAAAAAAAAGAxAAAAAAAAAQAAABgDAAAAAAAAAAAAAHAxAAAAAAAAAQAAABkDAAAAAAAAAAAAAIAxAAAAAAAAAQAAABoDAAAAAAAAAAAAAJAxAAAAAAAAAQAAABsDAAAAAAAAAAAAAKAxAAAAAAAAAQAAABwDAAAAAAAAAAAAALAxAAAAAAAAAQAAAB0DAAAAAAAAAAAAAMAxAAAAAAAAAQAAAB4DAAAAAAAAAAAAANAxAAAAAAAAAQAAAB8DAAAAAAAAAAAAAOAxAAAAAAAAAQAAACADAAAAAAAAAAAAAPAxAAAAAAAAAQAAACEDAAAAAAAAAAAAAAAyAAAAAAAAAQAAACIDAAAAAAAAAAAAABAyAAAAAAAAAQAAACMDAAAAAAAAAAAAACAyAAAAAAAAAQAAACQDAAAAAAAAAAAAADAyAAAAAAAAAQAAACUDAAAAAAAAAAAAAEAyAAAAAAAAAQAAACYDAAAAAAAAAAAAAFAyAAAAAAAAAQAAACcDAAAAAAAAAAAAAGAyAAAAAAAAAQAAACgDAAAAAAAAAAAAAHAyAAAAAAAAAQAAACkDAAAAAAAAAAAAAIAyAAAAAAAAAQAAACoDAAAAAAAAAAAAAJAyAAAAAAAAAQAAACsDAAAAAAAAAAAAAKAyAAAAAAAAAQAAACwDAAAAAAAAAAAAALAyAAAAAAAAAQAAAC0DAAAAAAAAAAAAAMAyAAAAAAAAAQAAAC4DAAAAAAAAAAAAANAyAAAAAAAAAQAAAC8DAAAAAAAAAAAAAOAyAAAAAAAAAQAAADADAAAAAAAAAAAAAPAyAAAAAAAAAQAAADEDAAAAAAAAAAAAAAAzAAAAAAAAAQAAADIDAAAAAAAAAAAAABAzAAAAAAAAAQAAADMDAAAAAAAAAAAAACAzAAAAAAAAAQAAADQDAAAAAAAAAAAAADAzAAAAAAAAAQAAADUDAAAAAAAAAAAAAEAzAAAAAAAAAQAAADYDAAAAAAAAAAAAAFAzAAAAAAAAAQAAADcDAAAAAAAAAAAAAGAzAAAAAAAAAQAAADgDAAAAAAAAAAAAAHAzAAAAAAAAAQAAADkDAAAAAAAAAAAAAIAzAAAAAAAAAQAAADoDAAAAAAAAAAAAAJAzAAAAAAAAAQAAADsDAAAAAAAAAAAAAKAzAAAAAAAAAQAAADwDAAAAAAAAAAAAALAzAAAAAAAAAQAAAD0DAAAAAAAAAAAAAMAzAAAAAAAAAQAAAD4DAAAAAAAAAAAAANAzAAAAAAAAAQAAAD8DAAAAAAAAAAAAAOAzAAAAAAAAAQAAAEADAAAAAAAAAAAAAPAzAAAAAAAAAQAAAEEDAAAAAAAAAAAAAAA0AAAAAAAAAQAAAEIDAAAAAAAAAAAAABA0AAAAAAAAAQAAAEMDAAAAAAAAAAAAACA0AAAAAAAAAQAAAEQDAAAAAAAAAAAAADA0AAAAAAAAAQAAAEUDAAAAAAAAAAAAAEA0AAAAAAAAAQAAAEYDAAAAAAAAAAAAAFA0AAAAAAAAAQAAAEcDAAAAAAAAAAAAAGA0AAAAAAAAAQAAAEgDAAAAAAAAAAAAAHA0AAAAAAAAAQAAAEkDAAAAAAAAAAAAAIA0AAAAAAAAAQAAAEoDAAAAAAAAAAAAAJA0AAAAAAAAAQAAAEsDAAAAAAAAAAAAAKA0AAAAAAAAAQAAAEwDAAAAAAAAAAAAALA0AAAAAAAAAQAAAE0DAAAAAAAAAAAAAMA0AAAAAAAAAQAAAE4DAAAAAAAAAAAAANA0AAAAAAAAAQAAAE8DAAAAAAAAAAAAAOA0AAAAAAAAAQAAAFADAAAAAAAAAAAAAPA0AAAAAAAAAQAAAFEDAAAAAAAAAAAAAAA1AAAAAAAAAQAAAFIDAAAAAAAAAAAAABA1AAAAAAAAAQAAAFMDAAAAAAAAAAAAACA1AAAAAAAAAQAAAFQDAAAAAAAAAAAAADA1AAAAAAAAAQAAAFUDAAAAAAAAAAAAAEA1AAAAAAAAAQAAAFYDAAAAAAAAAAAAAFA1AAAAAAAAAQAAAFcDAAAAAAAAAAAAAGA1AAAAAAAAAQAAAFgDAAAAAAAAAAAAAHA1AAAAAAAAAQAAAFkDAAAAAAAAAAAAAIA1AAAAAAAAAQAAAFoDAAAAAAAAAAAAAJA1AAAAAAAAAQAAAFsDAAAAAAAAAAAAAKA1AAAAAAAAAQAAAFwDAAAAAAAAAAAAALA1AAAAAAAAAQAAAF0DAAAAAAAAAAAAAMA1AAAAAAAAAQAAAF4DAAAAAAAAAAAAANA1AAAAAAAAAQAAAF8DAAAAAAAAAAAAAOA1AAAAAAAAAQAAAGADAAAAAAAAAAAAAPA1AAAAAAAAAQAAAGEDAAAAAAAAAAAAAAA2AAAAAAAAAQAAAGIDAAAAAAAAAAAAABA2AAAAAAAAAQAAAGMDAAAAAAAAAAAAACA2AAAAAAAAAQAAAGQDAAAAAAAAAAAAADA2AAAAAAAAAQAAAGUDAAAAAAAAAAAAAEA2AAAAAAAAAQAAAGYDAAAAAAAAAAAAAFA2AAAAAAAAAQAAAGcDAAAAAAAAAAAAAGA2AAAAAAAAAQAAAGgDAAAAAAAAAAAAAHA2AAAAAAAAAQAAAGkDAAAAAAAAAAAAAIA2AAAAAAAAAQAAAGoDAAAAAAAAAAAAAJA2AAAAAAAAAQAAAGsDAAAAAAAAAAAAAKA2AAAAAAAAAQAAAGwDAAAAAAAAAAAAALA2AAAAAAAAAQAAAG0DAAAAAAAAAAAAAMA2AAAAAAAAAQAAAG4DAAAAAAAAAAAAANA2AAAAAAAAAQAAAG8DAAAAAAAAAAAAAOA2AAAAAAAAAQAAAHADAAAAAAAAAAAAAPA2AAAAAAAAAQAAAHEDAAAAAAAAAAAAAAA3AAAAAAAAAQAAAHIDAAAAAAAAAAAAABA3AAAAAAAAAQAAAHMDAAAAAAAAAAAAACA3AAAAAAAAAQAAAHQDAAAAAAAAAAAAADA3AAAAAAAAAQAAAHUDAAAAAAAAAAAAAEA3AAAAAAAAAQAAAHYDAAAAAAAAAAAAAFA3AAAAAAAAAQAAAHcDAAAAAAAAAAAAAGA3AAAAAAAAAQAAAHgDAAAAAAAAAAAAAHA3AAAAAAAAAQAAAHkDAAAAAAAAAAAAAIA3AAAAAAAAAQAAAHoDAAAAAAAAAAAAAJA3AAAAAAAAAQAAAHsDAAAAAAAAAAAAAKA3AAAAAAAAAQAAAHwDAAAAAAAAAAAAALA3AAAAAAAAAQAAAH0DAAAAAAAAAAAAAMA3AAAAAAAAAQAAAH4DAAAAAAAAAAAAANA3AAAAAAAAAQAAAH8DAAAAAAAAAAAAAOA3AAAAAAAAAQAAAIADAAAAAAAAAAAAAPA3AAAAAAAAAQAAAIEDAAAAAAAAAAAAAAA4AAAAAAAAAQAAAIIDAAAAAAAAAAAAABA4AAAAAAAAAQAAAIMDAAAAAAAAAAAAACA4AAAAAAAAAQAAAIQDAAAAAAAAAAAAADA4AAAAAAAAAQAAAIUDAAAAAAAAAAAAAEA4AAAAAAAAAQAAAIYDAAAAAAAAAAAAAFA4AAAAAAAAAQAAAIcDAAAAAAAAAAAAAGA4AAAAAAAAAQAAAIgDAAAAAAAAAAAAAHA4AAAAAAAAAQAAAIkDAAAAAAAAAAAAAIA4AAAAAAAAAQAAAIoDAAAAAAAAAAAAAJA4AAAAAAAAAQAAAIsDAAAAAAAAAAAAAKA4AAAAAAAAAQAAAIwDAAAAAAAAAAAAALA4AAAAAAAAAQAAAI0DAAAAAAAAAAAAAMA4AAAAAAAAAQAAAI4DAAAAAAAAAAAAANA4AAAAAAAAAQAAAI8DAAAAAAAAAAAAAOA4AAAAAAAAAQAAAJADAAAAAAAAAAAAAPA4AAAAAAAAAQAAAJEDAAAAAAAAAAAAAAA5AAAAAAAAAQAAAJIDAAAAAAAAAAAAABA5AAAAAAAAAQAAAJMDAAAAAAAAAAAAACA5AAAAAAAAAQAAAJQDAAAAAAAAAAAAADA5AAAAAAAAAQAAAJUDAAAAAAAAAAAAAEA5AAAAAAAAAQAAAJYDAAAAAAAAAAAAAFA5AAAAAAAAAQAAAJcDAAAAAAAAAAAAAGA5AAAAAAAAAQAAAJgDAAAAAAAAAAAAAHA5AAAAAAAAAQAAAJkDAAAAAAAAAAAAAIA5AAAAAAAAAQAAAJoDAAAAAAAAAAAAAJA5AAAAAAAAAQAAAJsDAAAAAAAAAAAAAKA5AAAAAAAAAQAAAJwDAAAAAAAAAAAAALA5AAAAAAAAAQAAAJ0DAAAAAAAAAAAAAMA5AAAAAAAAAQAAAJ4DAAAAAAAAAAAAANA5AAAAAAAAAQAAAJ8DAAAAAAAAAAAAAOA5AAAAAAAAAQAAAKADAAAAAAAAAAAAAPA5AAAAAAAAAQAAAKEDAAAAAAAAAAAAAAA6AAAAAAAAAQAAAKIDAAAAAAAAAAAAABA6AAAAAAAAAQAAAKMDAAAAAAAAAAAAACA6AAAAAAAAAQAAAKQDAAAAAAAAAAAAADA6AAAAAAAAAQAAAKUDAAAAAAAAAAAAAEA6AAAAAAAAAQAAAKYDAAAAAAAAAAAAAFA6AAAAAAAAAQAAAKcDAAAAAAAAAAAAAGA6AAAAAAAAAQAAAKgDAAAAAAAAAAAAAHA6AAAAAAAAAQAAAKkDAAAAAAAAAAAAAIA6AAAAAAAAAQAAAKoDAAAAAAAAAAAAAJA6AAAAAAAAAQAAAKsDAAAAAAAAAAAAAKA6AAAAAAAAAQAAAKwDAAAAAAAAAAAAALA6AAAAAAAAAQAAAK0DAAAAAAAAAAAAAMA6AAAAAAAAAQAAAK4DAAAAAAAAAAAAANA6AAAAAAAAAQAAAK8DAAAAAAAAAAAAAOA6AAAAAAAAAQAAALADAAAAAAAAAAAAAPA6AAAAAAAAAQAAALEDAAAAAAAAAAAAAAA7AAAAAAAAAQAAALIDAAAAAAAAAAAAABA7AAAAAAAAAQAAALMDAAAAAAAAAAAAACA7AAAAAAAAAQAAALQDAAAAAAAAAAAAADA7AAAAAAAAAQAAALUDAAAAAAAAAAAAAEA7AAAAAAAAAQAAALYDAAAAAAAAAAAAAFA7AAAAAAAAAQAAALcDAAAAAAAAAAAAAGA7AAAAAAAAAQAAALgDAAAAAAAAAAAAAHA7AAAAAAAAAQAAALkDAAAAAAAAAAAAAIA7AAAAAAAAAQAAALoDAAAAAAAAAAAAAJA7AAAAAAAAAQAAALsDAAAAAAAAAAAAAKA7AAAAAAAAAQAAALwDAAAAAAAAAAAAAMA7AAAAAAAAAQAAAL0DAAAAAAAAAAAAAOA7AAAAAAAAAQAAAL4DAAAAAAAAAAAAAAA8AAAAAAAAAQAAAL8DAAAAAAAAAAAAACA8AAAAAAAAAQAAAMADAAAAAAAAAAAAAEA8AAAAAAAAAQAAAMEDAAAAAAAAAAAAAGA8AAAAAAAAAQAAAMIDAAAAAAAAAAAAAIA8AAAAAAAAAQAAAMMDAAAAAAAAAAAAAKA8AAAAAAAAAQAAAMQDAAAAAAAAAAAAAMA8AAAAAAAAAQAAAMUDAAAAAAAAAAAAAOA8AAAAAAAAAQAAAMYDAAAAAAAAAAAAAAA9AAAAAAAAAQAAAMcDAAAAAAAAAAAAACA9AAAAAAAAAQAAAMgDAAAAAAAAAAAAAEA9AAAAAAAAAQAAAMkDAAAAAAAAAAAAAGA9AAAAAAAAAQAAAMoDAAAAAAAAAAAAAIA9AAAAAAAAAQAAAMsDAAAAAAAAAAAAAKA9AAAAAAAAAQAAAMwDAAAAAAAAAAAAAMA9AAAAAAAAAQAAAM0DAAAAAAAAAAAAAOA9AAAAAAAAAQAAAM4DAAAAAAAAAAAAAAA+AAAAAAAAAQAAAM8DAAAAAAAAAAAAACA+AAAAAAAAAQAAANADAAAAAAAAAAAAAEA+AAAAAAAAAQAAANEDAAAAAAAAAAAAAGA+AAAAAAAAAQAAANIDAAAAAAAAAAAAAIA+AAAAAAAAAQAAANMDAAAAAAAAAAAAAKA+AAAAAAAAAQAAANQDAAAAAAAAAAAAAAAAAAAAAAAAAQAAANUDAAAAAAAAAAAAAAAudGV4dAAubm90ZS5HTlUtc3RhY2sALnN0cnRhYgAuc3ltdGFiAC5yZWxhLmRhdGEucmVsLnJvLl9STnZOdENzM0VRdnpIODJRQl8xN3J1c3RjX2Vycm9yX2NvZGVzMTFlcnJvcl9jb2RlczExRElBR05PU1RJQ1MALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODk5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc5OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42OTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTk5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ5OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zOTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjk5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE5OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44ODkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNzg5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjY4OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41ODkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNDg5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjM4OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yODkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMTg5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5AC5yZWxhLmRhdGEucmVsLnJvLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODc5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTc5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjc5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODY5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTY5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjY5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODU5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTU5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjU5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQ5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQ5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQ5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODM5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTM5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjM5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODI5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTI5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjI5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODE5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTE5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjE5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODA5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTA5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDkALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjA5AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwOQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjk4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzk4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODg4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTg4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjg4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODc4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTc4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjc4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODY4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTY4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjY4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODU4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTU4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjU4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQ4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQ4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQ4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODM4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTM4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjM4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODI4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTI4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjI4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODE4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTE4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjE4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODA4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTA4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDgALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjA4AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwOAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjk3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzk3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODg3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTg3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjg3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODc3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTc3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjc3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODY3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTY3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjY3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODU3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTU3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjU3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQ3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQ3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQ3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40NwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODM3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTM3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjM3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODI3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTI3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjI3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODE3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTE3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjE3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODA3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTA3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDcALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjA3AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwNwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjk2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzk2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODg2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTg2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjg2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODc2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTc2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjc2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODY2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTY2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjY2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODU2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTU2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjU2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQ2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQ2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQ2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40NgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODM2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTM2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjM2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODI2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTI2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjI2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODE2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTE2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjE2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODA2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTA2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDYALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjA2AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwNgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjk1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzk1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODg1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTg1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjg1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODc1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTc1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjc1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODY1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTY1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjY1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODU1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTU1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjU1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQ1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQ1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQ1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40NQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODM1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTM1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjM1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODI1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTI1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjI1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODE1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTE1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjE1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODA1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTA1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDUALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjA1AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwNQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjk0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzk0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODg0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTg0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjg0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODc0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTc0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjc0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODY0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTY0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjY0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODU0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTU0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjU0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQ0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQ0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQ0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40NAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODM0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTM0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjM0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODI0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTI0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjI0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODE0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTE0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjE0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODA0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTA0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDQALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjA0AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwNAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40AC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjkzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzkzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODgzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTgzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjgzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODczAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTczAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjczAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODYzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTYzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjYzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODUzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTUzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjUzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40MwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODMzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTMzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjMzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODIzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTIzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjIzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODEzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTEzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjEzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODAzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTAzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDMALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjAzAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwMwAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjkyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzkyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODgyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTgyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjgyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODcyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTcyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjcyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODYyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTYyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjYyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODUyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTUyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjUyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40MgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODMyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTMyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjMyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODIyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTIyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjIyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODEyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTEyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjEyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODAyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTAyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDIALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjAyAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwMgAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjkxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzkxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODgxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTgxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjgxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODcxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTcxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjcxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODYxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTYxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjYxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODUxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTUxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjUxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40MQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODMxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTMxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjMxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODIxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTIxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjIxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODExAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTExAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjExAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODAxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcwMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MDEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTAxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQwMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMDEALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjAxAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEwMQAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjg5MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43OTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNjkwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjU5MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40OTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMzkwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjI5MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xOTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuOTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODgwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc4MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42ODAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTgwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ4MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zODAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjgwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE4MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC44MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NzAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODcwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc3MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NzAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTcwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ3MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNzAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjcwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE3MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC43MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NjAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODYwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc2MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NjAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTYwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ2MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNjAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjYwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE2MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODUwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc1MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTUwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ1MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjUwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE1MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC41MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45NDAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODQwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjc0MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42NDAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTQwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQ0MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zNDAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjQwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjE0MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC40MAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MzAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODMwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjczMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MzAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTMwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQzMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMzAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjMwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEzMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MjAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODIwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcyMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MjAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTIwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQyMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMjAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjIwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjEyMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4yMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODEwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjcxMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC42MTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuNTEwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjQxMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4zMTAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuMjEwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMyOWNmYTdiZjhjM2E0NTZiNDcxZmRkLjExMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC4xMAAucm9kYXRhLi5MYW5vbi4xNTk5MTJiNTEzMjljZmE3YmY4YzNhNDU2YjQ3MWZkZC45MDAALnJvZGF0YS4uTGFub24uMTU5OTEyYjUxMzI5Y2ZhN2JmOGMzYTQ1NmI0NzFmZGQuODAwAC5yb2RhdGEuLkxhbm9uLjE1OTkxMmI1MTMy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AAAAALkJAAMA7QIOAAABAwAAtAkArwUAl4QBJgABAAAAtAkArwUAl4QBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAsQUAxoQBJgABAAAAtAkAsQUAxoQBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAswUA9YQBJgABAAAAtAkAswUA9YQBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAtQUApIUBJgABAAAAtAkAtQUApIUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAtwUA04UBJgABAAAAtAkAtwUA04UBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAuQUAgoYBJgABAAAAtAkAuQUAgoYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAuwUAsYYBJgABAAAAtAkAuwUAsYYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAvQUA4IYBJgABAAAAtAkAvQUA4IYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAvwUAj4cBJgABAAAAtAkAvwUAj4cBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAwQUAvocBJgABAAAAtAkAwQUAvocBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAwwUA7YcBJgABAAAAtAkAwwUA7YcBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAxQUAnIgBJgABAAAAtAkAxQUAnIgBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAxwUAy4gBJgABAAAAtAkAxwUAy4gBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAyQUA+ogBJgABAAAAtAkAyQUA+ogBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAywUAqYkBJgABAAAAtAkAywUAqYkBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAzQUA2IkBJgABAAAAtAkAzQUA2IkBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAzwUAh4oBJgABAAAAtAkAzwUAh4oBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA0QUAtooBJgABAAAAtAkA0QUAtooBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA0wUA5YoBJgABAAAAtAkA0wUA5YoBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA1QUAlIsBJgABAAAAtAkA1QUAlIsBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA1wUAw4sBJgABAAAAtAkA1wUAw4sBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA2QUA8osBJgABAAAAtAkA2QUA8osBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA2wUAoYwBJgABAAAAtAkA2wUAoYwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA3QUA0IwBJgABAAAAtAkA3QUA0IwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA3wUA/4wBJgABAAAAtAkA3wUA/4wBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA4QUAro0BJgABAAAAtAkA4QUAro0BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA4wUA3Y0BJgABAAAAtAkA4wUA3Y0BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA5QUAjI4BJgABAAAAtAkA5QUAjI4BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA5wUAu44BJgABAAAAtAkA5wUAu44BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA6QUA6o4BJgABAAAAtAkA6QUA6o4BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA6wUAmY8BJgABAAAAtAkA6wUAmY8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA7QUAyI8BJgABAAAAtAkA7QUAyI8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA7wUA948BJgABAAAAtAkA7wUA948BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA8QUAppABJgABAAAAtAkA8QUAppABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA8wUA1ZABJgABAAAAtAkA8wUA1ZABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA9QUAhJEBJgABAAAAtAkA9QUAhJEBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA9wUAs5EBJgABAAAAtAkA9wUAs5EBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA+QUA4pEBJgABAAAAtAkA+QUA4pEBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA+wUAkZIBJgABAAAAtAkA+wUAkZIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA/QUAwJIBJgABAAAAtAkA/QUAwJIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA/wUA75IBJgABAAAAtAkA/wUA75IBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAgQYAnpMBJgABAAAAtAkAgQYAnpMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAgwYAzZMBJgABAAAAtAkAgwYAzZMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAhQYA/JMBJgABAAAAtAkAhQYA/JMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAhwYAq5QBJgABAAAAtAkAhwYAq5QBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAiQYA2pQBJgABAAAAtAkAiQYA2pQBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAiwYAiZUBJgABAAAAtAkAiwYAiZUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAjQYAuJUBJgABAAAAtAkAjQYAuJUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAjwYA55UBJgABAAAAtAkAjwYA55UBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAkQYAlpYBJgABAAAAtAkAkQYAlpYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAkwYAxZYBJgABAAAAtAkAkwYAxZYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAlQYA9JYBJgABAAAAtAkAlQYA9JYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAlwYAo5cBJgABAAAAtAkAlwYAo5cBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAmQYA0pcBJgABAAAAtAkAmQYA0pcBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAmwYAgZgBJgABAAAAtAkAmwYAgZgBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAnQYAsJgBJgABAAAAtAkAnQYAsJgBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAnwYA35gBJgABAAAAtAkAnwYA35gBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAoQYAjpkBJgABAAAAtAkAoQYAjpkBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAowYAvZkBJgABAAAAtAkAowYAvZkBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkApQYA7JkBJgABAAAAtAkApQYA7JkBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkApwYAm5oBJgABAAAAtAkApwYAm5oBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAqQYAypoBJgABAAAAtAkAqQYAypoBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAqwYA+ZoBJgABAAAAtAkAqwYA+ZoBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkArQYAqJsBJgABAAAAtAkArQYAqJsBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkArwYA15sBJgABAAAAtAkArwYA15sBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAsQYAhpwBJgABAAAAtAkAsQYAhpwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAswYAtZwBJgABAAAAtAkAswYAtZwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAtQYA5JwBJgABAAAAtAkAtQYA5JwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAtwYAk50BJgABAAAAtAkAtwYAk50BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAuQYAwp0BJgABAAAAtAkAuQYAwp0BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAuwYA8Z0BJgABAAAAtAkAuwYA8Z0BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAvQYAoJ4BJgABAAAAtAkAvQYAoJ4BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAvwYAz54BJgABAAAAtAkAvwYAz54BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAwQYA/p4BJgABAAAAtAkAwQYA/p4BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAwwYArZ8BJgABAAAAtAkAwwYArZ8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAxQYA3J8BJgABAAAAtAkAxQYA3J8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAxwYAi6ABJgABAAAAtAkAxwYAi6ABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAyQYAuqABJgABAAAAtAkAyQYAuqABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAywYA6aABJgABAAAAtAkAywYA6aABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAzQYAmKEBJgABAAAAtAkAzQYAmKEBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAzwYAx6EBJgABAAAAtAkAzwYAx6EBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA0QYA9qEBJgABAAAAtAkA0QYA9qEBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA0wYApaIBJgABAAAAtAkA0wYApaIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA1QYA1KIBJgABAAAAtAkA1QYA1KIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA1wYAg6MBJgABAAAAtAkA1wYAg6MBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA2QYAsqMBJgABAAAAtAkA2QYAsqMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA2wYA4aMBJgABAAAAtAkA2wYA4aMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA3QYAkKQBJgABAAAAtAkA3QYAkKQBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA3wYAv6QBJgABAAAAtAkA3wYAv6QBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA4QYA7qQBJgABAAAAtAkA4QYA7qQBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA4wYAnaUBJgABAAAAtAkA4wYAnaUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA5QYAzKUBJgABAAAAtAkA5QYAzKUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA5wYA+6UBJgABAAAAtAkA5wYA+6UBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA6QYAqqYBJgABAAAAtAkA6QYAqqYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA6wYA2aYBJgABAAAAtAkA6wYA2aYBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA7QYAiKcBJgABAAAAtAkA7QYAiKcBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA7wYAt6cBJgABAAAAtAkA7wYAt6cBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA8QYA5qcBJgABAAAAtAkA8QYA5qcBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA8wYAlagBJgABAAAAtAkA8wYAlagBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA9QYAxKgBJgABAAAAtAkA9QYAxKgBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA9wYA86gBJgABAAAAtAkA9wYA86gBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA+QYAoqkBJgABAAAAtAkA+QYAoqkBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA+wYA0akBJgABAAAAtAkA+wYA0akBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA/QYAgKoBJgABAAAAtAkA/QYAgKoBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkA/wYAr6oBJgABAAAAtAkA/wYAr6oBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAgQcA3qoBJgABAAAAtAkAgQcA3qoBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAgwcAjasBJgABAAAAtAkAgwcAjasBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAhQcAvKsBJgABAAAAtAkAhQcAvKsBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAhwcA66sBJgABAAAAtAkAhwcA66sBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAiQcAmqwBJgABAAAAtAkAiQcAmqwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAiwcAyawBJgABAAAAtAkAiwcAyawBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAjQcA+KwBJgABAAAAtAkAjQcA+KwBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAjwcAp60BJgABAAAAtAkAjwcAp60BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAkQcA1q0BJgABAAAAtAkAkQcA1q0BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAkwcAha4BJgABAAAAtAkAkwcAha4BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAlQcAtK4BJgABAAAAtAkAlQcAtK4BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAlwcA464BJgABAAAAtAkAlwcA464BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAmQcAkq8BJgABAAAAtAkAmQcAkq8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAmwcAwa8BJgABAAAAtAkAmwcAwa8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAnQcA8K8BJgABAAAAtAkAnQcA8K8BJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAnwcAn7ABJgABAAAAtAkAnwcAn7ABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAoQcAzrABJgABAAAAtAkAoQcAzrABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAowcA/bABJgABAAAAtAkAowcA/bABJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkApQcArLEBJgABAAAAtAkApQcArLEBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkApwcA27EBJgABAAAAtAkApwcA27EBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAqQcAirIBJgABAAAAtAkAqQcAirIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAqwcAubIBJgABAAAAtAkAqwcAubIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkArQcA6LIBJgABAAAAtAkArQcA6LIBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkArwcAl7MBJgABAAAAtAkArwcAl7MBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAsQcAxrMBJgABAAAAtAkAsQcAxrMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAswcA9bMBJgABAAAAtAkAswcA9bMBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAtQcApLQBJgABAAAAtAkAtQcApLQBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAtwcA07QBJgABAAAAtAkAtwcA07QBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAuQcAgrUBJgABAAAAtAkAuQcAgrUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAuwcAsbUBJgABAAAAtAkAuwcAsbUBJgAAAAAAsQkAAwDYAiQAAAAAALkJAAMA7QIOAAABAwAAtAkAvQcA4LUBJgABAAAAtAkAvQcA4LUBJgAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACxCQADAJADGQAAAAAAuQkAAwCkAwQAAAAAALEJAAMAkAMZAAAAAAC5CQADAKQDBAAAAAAAsQkAAwCQAxkAAAAAALkJAAMApAMEAAAAAACuCQADAMYCcQAAAAAAAwCUAqQBAAABAfsWBQD8BiYAAAUAAAIFAPwGJgAAtAkFAesGIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBleHByZXNzaW9uIGFybSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub3RlZCBwYXR0ZXJuCndpbGwgbmV2ZXIgYmUgcmVhY2hlZCBhcyBmb3IgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZXhwcmVzc2lvbiBiZWluZwptYXRjaGVkLCBvbmUgb2YgdGhlIHByZWNlZGluZyBwYXR0ZXJucyB3aWxsIG1hdGNoLgoKVGhpcyBtZWFucyB0aGF0IHBlcmhhcHMgc29tZSBvZiB0aGUgcHJlY2VkaW5nIHBhdHRlcm5zIGFyZSB0b28gZ2VuZXJhbCwgdGhpcwpvbmUgaXMgdG9vIHNwZWNpZmljIG9yIHRoZSBvcmRlcmluZyBpcyBpbmNvcnJlY3QuCgpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBgbWF0Y2hgIGJsb2NrIGhhcyB0b28gbWFueSBhcm1zOgoKYGBgCm1hdGNoIFNvbWUoMCkgewogICAgU29tZShiYXIpID0+IHsvKiAuLi4gKi99CiAgICB4ID0+IHsvKiAuLi4gKi99IC8vIFRoaXMgaGFuZGxlcyB0aGUgYE5vbmVgIGNhc2UKICAgIF8gPT4gey8qIC4uLiAqL30gLy8gQWxsIHBvc3NpYmxlIGNhc2VzIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQKfQpgYGAKCmBtYXRjaGAgYmxvY2tzIGhhdmUgdGhlaXIgcGF0dGVybnMgbWF0Y2hlZCBpbiBvcmRlciwgc28sIGZvciBleGFtcGxlLCBwdXR0aW5nCmEgd2lsZGNhcmQgYXJtIGFib3ZlIGEgbW9yZSBzcGVjaWZpYyBhcm0gd2lsbCBtYWtlIHRoZSBsYXR0ZXIgYXJtIGlycmVsZXZhbnQuCgpFbnN1cmUgdGhlIG9yZGVyaW5nIG9mIHRoZSBtYXRjaCBhcm0gaXMgY29ycmVjdCBhbmQgcmVtb3ZlIGFueSBzdXBlcmZsdW91cwphcm1zLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wYAAQDrBgUA/AYmAAAEAAIHAAUBAAMA7QIOAAADAgUBBFNvbWUBAQC0CQABBAADAO0CDgACAwABAwDYAiQAAAIBAQC0CQACBADZAhIAALQJBQEFRTAwMDEAAR8FAAEABQMA2AIkAAACAQEBuQkAAQMABwCrByYAAAkAAAIHAKsHJgAAtAkFAbEFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhbiBlbXB0eSBtYXRjaCBleHByZXNzaW9uIGlzIGludmFsaWQgYmVjYXVzZSB0aGUgdHlwZQppdCBpcyBtYXRjaGluZyBvbiBpcyBub24tZW1wdHkgKHRoZXJlIGV4aXN0IHZhbHVlcyBvZiB0aGlzIHR5cGUpLiBJbiBzYWZlIGNvZGUKaXQgaXMgaW1wb3NzaWJsZSB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gZW1wdHkgdHlwZSwgc28gZW1wdHkgbWF0Y2gKZXhwcmVzc2lvbnMgYXJlIGFsbW9zdCBuZXZlciBkZXNpcmVkLiBUaGlzIGVycm9yIGlzIHR5cGljYWxseSBmaXhlZCBieSBhZGRpbmcKb25lIG9yIG1vcmUgY2FzZXMgdG8gdGhlIG1hdGNoIGV4cHJlc3Npb24uCgpBbiBleGFtcGxlIG9mIGFuIGVtcHR5IHR5cGUgaXMgYGVudW0gRW1wdHkgeyB9YC4gU28sIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOgoKYGBgCmVudW0gRW1wdHkge30KCmZuIGZvbyh4OiBFbXB0eSkgewogICAgbWF0Y2ggeCB7CiAgICAgICAgLy8gZW1wdHkKICAgIH0KfQpgYGAKCkhvd2V2ZXIsIHRoaXMgd29uJ3Q6CgpgYGBjb21waWxlX2ZhaWwKZm4gZm9vKHg6IE9wdGlvbjxTdHJpbmc+KSB7CiAgICBtYXRjaCB4IHsKICAgICAgICAvLyBlbXB0eQogICAgfQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////9/sQUAAQCxBQcAqwcmAAAIAAIHAAkBAAMA7QIOAAAHAgUBBFNvbWUBAQC0CQABCAADAO0CDgACBwABAwDYAiQAAAYBAQC0CQACBgDZAhIAALQJBQEFRTAwMDIAAR8FAAEABQMA2AIkAAAGAQEBuQkAAQcACQDaByYAAA0AAAIJANoHJgAAtAkFAe0IVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tcGlsZXIgY2Fubm90IGd1YXJhbnRlZSBhIG1hdGNoaW5nIHBhdHRlcm4gZm9yCm9uZSBvciBtb3JlIHBvc3NpYmxlIGlucHV0cyB0byBhIG1hdGNoIGV4cHJlc3Npb24uIEd1YXJhbnRlZWQgbWF0Y2hlcyBhcmUKcmVxdWlyZWQgaW4gb3JkZXIgdG8gYXNzaWduIHZhbHVlcyB0byBtYXRjaCBleHByZXNzaW9ucywgb3IgYWx0ZXJuYXRpdmVseSwKZGV0ZXJtaW5lIHRoZSBmbG93IG9mIGV4ZWN1dGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMDQKZW51bSBUZXJtaW5hdG9yIHsKICAgIEhhc3RhTGFWaXN0YUJhYnksCiAgICBUYWxrVG9NeUhhbmQsCn0KCmxldCB4ID0gVGVybWluYXRvcjo6SGFzdGFMYVZpc3RhQmFieTsKCm1hdGNoIHggeyAvLyBlcnJvcjogbm9uLWV4aGF1c3RpdmUgcGF0dGVybnM6IGBIYXN0YUxhVmlzdGFCYWJ5YCBub3QgY292ZXJlZAogICAgVGVybWluYXRvcjo6VGFsa1RvTXlIYW5kID0+IHt9Cn0KYGBgCgpJZiB5b3UgZW5jb3VudGVyIHRoaXMgZXJyb3IgeW91IG11c3QgYWx0ZXIgeW91ciBwYXR0ZXJucyBzbyB0aGF0IGV2ZXJ5IHBvc3NpYmxlCnZhbHVlIG9mIHRoZSBpbnB1dCB0eXBlIGlzIG1hdGNoZWQuIEZvciB0eXBlcyB3aXRoIGEgc21hbGwgbnVtYmVyIG9mIHZhcmlhbnRzCihsaWtlIGVudW1zKSB5b3Ugc2hvdWxkIHByb2JhYmx5IGNvdmVyIGFsbCBjYXNlcyBleHBsaWNpdGx5LiBBbHRlcm5hdGl2ZWx5LCB0aGUKdW5kZXJzY29yZSBgX2Agd2lsZGNhcmQgcGF0dGVybiBjYW4gYmUgYWRkZWQgYWZ0ZXIgYWxsIG90aGVyIHBhdHRlcm5zIHRvIG1hdGNoCiJhbnl0aGluZyBlbHNlIi4gRXhhbXBsZToKCmBgYAplbnVtIFRlcm1pbmF0b3IgewogICAgSGFzdGFMYVZpc3RhQmFieSwKICAgIFRhbGtUb015SGFuZCwKfQoKbGV0IHggPSBUZXJtaW5hdG9yOjpIYXN0YUxhVmlzdGFCYWJ5OwoKbWF0Y2ggeCB7CiAgICBUZXJtaW5hdG9yOjpUYWxrVG9NeUhhbmQgPT4ge30KICAgIFRlcm1pbmF0b3I6Okhhc3RhTGFWaXN0YUJhYnkgPT4ge30KfQoKLy8gb3I6CgptYXRjaCB4IHsKICAgIFRlcm1pbmF0b3I6OlRhbGtUb015SGFuZCA9PiB7fQogICAgXyA9PiB7fQp9CmBgYAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////B+0IAAEA7QgJANoHJgAADAACBwANAQADAO0CDgAACwIFAQRTb21lAQEAtAkAAQwAAwDtAg4AAgsAAQMA2AIkAAAKAQEAtAkAAggA2QISAAC0CQUBBUUwMDA0AAEfBQABAAUDANgCJAAACgEBAbkJAAELAAsAiQgmAAARAAACCwCJCCYAALQJBQGpBFBhdHRlcm5zIHVzZWQgdG8gYmluZCBuYW1lcyBtdXN0IGJlIGlycmVmdXRhYmxlLCB0aGF0IGlzLCB0aGV5IG11c3QgZ3VhcmFudGVlCnRoYXQgYSBuYW1lIHdpbGwgYmUgZXh0cmFjdGVkIGluIGFsbCBjYXNlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMDUKbGV0IHggPSBTb21lKDEpOwpsZXQgU29tZSh5KSA9IHg7Ci8vIGVycm9yOiByZWZ1dGFibGUgcGF0dGVybiBpbiBsb2NhbCBiaW5kaW5nOiBgTm9uZWAgbm90IGNvdmVyZWQKYGBgCgpJZiB5b3UgZW5jb3VudGVyIHRoaXMgZXJyb3IgeW91IHByb2JhYmx5IG5lZWQgdG8gdXNlIGEgYG1hdGNoYCBvciBgaWYgbGV0YCB0bwpkZWFsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEV4YW1wbGU6CgpgYGAKbGV0IHggPSBTb21lKDEpOwoKbWF0Y2ggeCB7CiAgICBTb21lKHkpID0+IHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcKICAgIH0sCiAgICBOb25lID0+IHt9Cn0KCi8vIG9yOgoKaWYgbGV0IFNvbWUoeSkgPSB4IHsKICAgIC8vIGRvIHNvbWV0aGluZwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/qQQAAQCpBAsAiQgmAAAQAAIHABEBAAMA7QIOAAAPAgUBBFNvbWUBAQC0CQABEAADAO0CDgACDwABAwDYAiQAAA4BAQC0CQACCgDZAhIAALQJBQEFRTAwMDUAAR8FAAEABQMA2AIkAAAOAQEBuQkAAQ8ADQC4CCYAABUAAAINALgIJgAAtAkFAZYFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgYmluZGluZ3MgaW4gYSBtYXRjaCBhcm0gd291bGQgcmVxdWlyZSBhIHZhbHVlIHRvCmJlIG1vdmVkIGludG8gbW9yZSB0aGFuIG9uZSBsb2NhdGlvbiwgdGh1cyB2aW9sYXRpbmcgdW5pcXVlIG93bmVyc2hpcC4gQ29kZQpsaWtlIHRoZSBmb2xsb3dpbmcgaXMgaW52YWxpZCBhcyBpdCByZXF1aXJlcyB0aGUgZW50aXJlIGBPcHRpb248U3RyaW5nPmAgdG8gYmUKbW92ZWQgaW50byBhIHZhcmlhYmxlIGNhbGxlZCBgb3Bfc3RyaW5nYCB3aGlsZSBzaW11bHRhbmVvdXNseSByZXF1aXJpbmcgdGhlCmlubmVyIGBTdHJpbmdgIHRvIGJlIG1vdmVkIGludG8gYSB2YXJpYWJsZSBjYWxsZWQgYHNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM4MgojIVtmZWF0dXJlKGJpbmRpbmdzX2FmdGVyX2F0KV0KCmxldCB4ID0gU29tZSgicyIudG9fc3RyaW5nKCkpOwoKbWF0Y2ggeCB7CiAgICBvcF9zdHJpbmcgQCBTb21lKHMpID0+IHt9LCAvLyBlcnJvcjogdXNlIG9mIG1vdmVkIHZhbHVlCiAgICBOb25lID0+IHt9LAp9CmBgYAoKU2VlIGFsc28gdGhlIGVycm9yIEUwMzAzLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8BlgUAAQCWBQ0AuAgmAAAUAAIHABUBAAMA7QIOAAATAgUBBFNvbWUBAQC0CQABFAADAO0CDgACEwABAwDYAiQAABIBAQC0CQACDADZAhIAALQJBQEFRTAwMDcAAR8FAAEABQMA2AIkAAASAQEBuQkAARMADwDnCCYAABkAAAIPAOcIJgAAtAkFAd4IIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW4gYSBwYXR0ZXJuLCBhbGwgdmFsdWVzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgaGF2ZSB0byBiZSBib3VuZAp0aGUgc2FtZSB3YXkuIFRoZSBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgYmluZGluZyBzaW11bHRhbmVvdXNseSBieS1tb3ZlIGFuZApieS1yZWYuCgpUaGlzIGxpbWl0YXRpb24gbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSdXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKG1vdmVfcmVmX3BhdHRlcm4pXQoKc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKCh5LCByZWYgeikpID0+IHt9LCAvLyBlcnJvcjogY2Fubm90IGJpbmQgYnktbW92ZSBhbmQgYnktcmVmIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHNhbWUgcGF0dGVybgogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYAoKWW91IGhhdmUgdHdvIHNvbHV0aW9uczoKClNvbHV0aW9uICMxOiBCaW5kIHRoZSBwYXR0ZXJuJ3MgdmFsdWVzIHRoZSBzYW1lIHdheS4KCmBgYApzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHJlZiB5LCByZWYgeikpID0+IHt9LAogICAgLy8gb3IgU29tZSgoeSwgeikpID0+IHt9CiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgpTb2x1dGlvbiAjMjogSW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgZm9yIHRoZSBgWGAgc3RydWN0dXJlLgoKSG93ZXZlciwgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBmaXJzdCBzb2x1dGlvbiBzaG91bGQgYmUgcHJlZmVycmVkLgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0Kc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKCh5LCByZWYgeikpID0+IHt9LAogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wPeCAABAN4IDwDnCCYAABgAAgcAGQEAAwDtAg4AABcCBQEEU29tZQEBALQJAAEYAAMA7QIOAAIXAAEDANgCJAAAFgEBALQJAAIOANkCEgAAtAkFAQVFMDAwOQABHwUAAQAFAwDYAiQAABYBAQG5CQABFwARAJYJJgAAHQAAAhEAlgkmAAC0CQUBzwJUaGUgdmFsdWUgb2Ygc3RhdGljcyBhbmQgY29uc3RhbnRzIG11c3QgYmUga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgdGhleSBsaXZlCmZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIGEgcHJvZ3JhbS4gQ3JlYXRpbmcgYSBib3hlZCB2YWx1ZSBhbGxvY2F0ZXMgbWVtb3J5IG9uCnRoZSBoZWFwIGF0IHJ1bnRpbWUsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGRvbmUgYXQgY29tcGlsZSB0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAxMAojIVtmZWF0dXJlKGJveF9zeW50YXgpXQoKY29uc3QgQ09OIDogQm94PGkzMj4gPSBib3ggMDsKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//wHPAgABAM8CEQCWCSYAABwAAgcAHQEAAwDtAg4AABsCBQEEU29tZQEBALQJAAEcAAMA7QIOAAIbAAEDANgCJAAAGgEBALQJAAIQANkCEgAAtAkFAQVFMDAxMAABHwUAAQAFAwDYAiQAABoBAQG5CQABGwATAMUJJgAAIQAAAhMAxQkmAAC0CQUB/wJTdGF0aWMgYW5kIGNvbnN0IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgY29uc3QgdmFyaWFibGVzLiBCdXQgYSBjb25zdAp2YXJpYWJsZSBjYW5ub3QgcmVmZXIgdG8gYSBzdGF0aWMgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDEzCnN0YXRpYyBYOiBpMzIgPSA0MjsKY29uc3QgWTogaTMyID0gWDsKYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBZYCBjYW5ub3QgcmVmZXIgdG8gYFhgLiBUbyBmaXggdGhpcywgdGhlIHZhbHVlIGNhbiBiZQpleHRyYWN0ZWQgYXMgYSBjb25zdCBhbmQgdGhlbiB1c2VkOgoKYGBgCmNvbnN0IEE6IGkzMiA9IDQyOwpzdGF0aWMgWDogaTMyID0gQTsKY29uc3QgWTogaTMyID0gQTsKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////////3//AgABAP8CEwDFCSYAACAAAgcAIQEAAwDtAg4AAB8CBQEEU29tZQEBALQJAAEgAAMA7QIOAAIfAAEDANgCJAAAHgEBALQJAAISANkCEgAAtAkFAQVFMDAxMwABHwUAAQAFAwDYAiQAAB4BAQG5CQABHwAVAPQJJgAAJQAAAhUA9AkmAAC0CQUByQQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpDb25zdGFudHMgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgYnkgYSBjb25zdGFudCB2YWx1ZSBvciwgaW4gYSBmdXR1cmUKdmVyc2lvbiBvZiBSdXN0LCBhIGNhbGwgdG8gYSBjb25zdCBmdW5jdGlvbi4gVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhlIHVzZQpvZiBhIHBhdGggKGxpa2UgYTo6Yiwgb3IgeCkgZGVub3Rpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gb25lIG9mIHRoZXNlCmFsbG93ZWQgaXRlbXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCmNvbnN0IEZPTzogaTMyID0geyBsZXQgeCA9IDA7IHggfTsgLy8gJ3gnIGlzbid0IGEgY29uc3RhbnQgbm9yIGEgZnVuY3Rpb24hCmBgYAoKVG8gYXZvaWQgaXQsIHlvdSBoYXZlIHRvIHJlcGxhY2UgdGhlIG5vbi1jb25zdGFudCB2YWx1ZToKCmBgYApjb25zdCBGT086IGkzMiA9IHsgY29uc3QgWCA6IGkzMiA9IDA7IFggfTsKLy8gb3IgZXZlbjoKY29uc3QgRk9PMjogaTMyID0geyAwIH07IC8vIGJ1dCBicmFja2V0cyBhcmUgdXNlbGVzcyBoZXJlCmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DyQQAAQDJBBUA9AkmAAAkAAIHACUBAAMA7QIOAAAjAgUBBFNvbWUBAQC0CQABJAADAO0CDgACIwABAwDYAiQAACIBAQC0CQACFADZAhIAALQJBQEFRTAwMTQAAR8FAAEABQMA2AIkAAAiAQEBuQkAASMAFwCjCiYAACkAAAIXAKMKJgAAtAkFAbcFQSBjb25zdGFudCBpdGVtIHdhcyBpbml0aWFsaXplZCB3aXRoIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGNvbnN0YW50CmV4cHJlc3Npb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDE1CmZuIGNyZWF0ZV9zb21lKCkgLT4gT3B0aW9uPHU4PiB7CiAgICBTb21lKDEpCn0KCmNvbnN0IEZPTzogT3B0aW9uPHU4PiA9IGNyZWF0ZV9zb21lKCk7IC8vIGVycm9yIQpgYGAKClRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gc3RhdGljIG9yIGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZQpgY29uc3RgIGZ1bmN0aW9ucywgYW5kIHN0cnVjdC9lbnVtIGNvbnN0cnVjdG9ycy4KClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIGRlY2xhcmUgYGNyZWF0ZV9zb21lYCBhcyBhIGNvbnN0YW50IGZ1bmN0aW9uOgoKYGBgCmNvbnN0IGZuIGNyZWF0ZV9zb21lKCkgLT4gT3B0aW9uPHU4PiB7IC8vIGRlY2xhcmVkIGFzIGEgY29uc3QgZnVuY3Rpb24KICAgIFNvbWUoMSkKfQoKY29uc3QgRk9POiBPcHRpb248dTg+ID0gY3JlYXRlX3NvbWUoKTsgLy8gb2shCgovLyBUaGVzZSBhcmUgYWxzbyB3b3JraW5nOgpzdHJ1Y3QgQmFyIHsKICAgIHg6IHU4LAp9Cgpjb25zdCBPVEhFUl9GT086IE9wdGlvbjx1OD4gPSBTb21lKDEpOwpjb25zdCBCQVI6IEJhciA9IEJhciB7eDogMX07CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cFAAEAtwUXAKMKJgAAKAACBwApAQADAO0CDgAAJwIFAQRTb21lAQEAtAkAASgAAwDtAg4AAicAAQMA2AIkAAAmAQEAtAkAAhYA2QISAAC0CQUBBUUwMDE1AAEfBQABAAUDANgCJAAAJgEBAbkJAAEnABkA0gomAAAtAAACGQDSCiYAALQJBQG3CEEgcGF0dGVybiBhdHRlbXB0ZWQgdG8gZXh0cmFjdCBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGZpZWxkcyBmcm9tIGEgdmFyaWFudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjMKZW51bSBGcnVpdCB7CiAgICBBcHBsZShTdHJpbmcsIFN0cmluZyksCiAgICBQZWFyKHUzMiksCn0KCmxldCB4ID0gRnJ1aXQ6OkFwcGxlKFN0cmluZzo6bmV3KCksIFN0cmluZzo6bmV3KCkpOwoKbWF0Y2ggeCB7CiAgICBGcnVpdDo6QXBwbGUoYSkgPT4ge30sIC8vIGVycm9yIQogICAgXyA9PiB7fQp9CmBgYAoKQSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCBhbiBlbnVtIHZhcmlhbnQgbXVzdCBwcm92aWRlIGEgc3ViLXBhdHRlcm4gZm9yCmVhY2ggZmllbGQgb2YgdGhlIGVudW0gdmFyaWFudC4KCkhlcmUgdGhlIGBBcHBsZWAgdmFyaWFudCBoYXMgdHdvIGZpZWxkcywgYW5kIHNob3VsZCBiZSBtYXRjaGVkIGFnYWluc3QgbGlrZSBzbzoKCmBgYAplbnVtIEZydWl0IHsKICAgIEFwcGxlKFN0cmluZywgU3RyaW5nKSwKICAgIFBlYXIodTMyKSwKfQoKbGV0IHggPSBGcnVpdDo6QXBwbGUoU3RyaW5nOjpuZXcoKSwgU3RyaW5nOjpuZXcoKSk7CgovLyBDb3JyZWN0LgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhLCBiKSA9PiB7fSwKICAgIF8gPT4ge30KfQpgYGAKCk1hdGNoaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiBmaWVsZHMgaGFzIG5vIHNlbnNpYmxlIGludGVycHJldGF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwMDIzCmVudW0gRnJ1aXQgewogICAgQXBwbGUoU3RyaW5nLCBTdHJpbmcpLAogICAgUGVhcih1MzIpLAp9CgpsZXQgeCA9IEZydWl0OjpBcHBsZShTdHJpbmc6Om5ldygpLCBTdHJpbmc6Om5ldygpKTsKCi8vIEluY29ycmVjdC4KbWF0Y2ggeCB7CiAgICBGcnVpdDo6QXBwbGUoYSkgPT4ge30sCiAgICBGcnVpdDo6QXBwbGUoYSwgYiwgYykgPT4ge30sCn0KYGBgCgpDaGVjayBob3cgbWFueSBmaWVsZHMgdGhlIGVudW0gd2FzIGRlY2xhcmVkIHdpdGggYW5kIGVuc3VyZSB0aGF0IHlvdXIgcGF0dGVybgp1c2VzIHRoZSBzYW1lIG51bWJlci4KABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////z+3CAABALcIGQDSCiYAACwAAgcALQEAAwDtAg4AACsCBQEEU29tZQEBALQJAAEsAAMA7QIOAAIrAAEDANgCJAAAKgEBALQJAAIYANkCEgAAtAkFAQVFMDAyMwABHwUAAQAFAwDYAiQAACoBAQG5CQABKwAbAIELJgAAMQAAAhsAgQsmAAC0CQUB8ARFYWNoIGZpZWxkIG9mIGEgc3RydWN0IGNhbiBvbmx5IGJlIGJvdW5kIG9uY2UgaW4gYSBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNQpzdHJ1Y3QgRm9vIHsKICAgIGE6IHU4LAogICAgYjogdTgsCn0KCmZuIG1haW4oKXsKICAgIGxldCB4ID0gRm9vIHsgYToxLCBiOjIgfTsKCiAgICBsZXQgRm9vIHsgYTogeCwgYTogeSB9ID0geDsKICAgIC8vIGVycm9yOiBmaWVsZCBgYWAgYm91bmQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHBhdHRlcm4KfQpgYGAKCkVhY2ggb2NjdXJyZW5jZSBvZiBhIGZpZWxkIG5hbWUgYmluZHMgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQsIHNvIHRvIGZpeCB0aGlzCmVycm9yIHlvdSB3aWxsIGhhdmUgdG8gcmVtb3ZlIG9yIGFsdGVyIHRoZSBkdXBsaWNhdGUgdXNlcyBvZiB0aGUgZmllbGQgbmFtZS4KUGVyaGFwcyB5b3UgbWlzc3BlbGxlZCBhbm90aGVyIGZpZWxkIG5hbWU/IEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICBhOiB1OCwKICAgIGI6IHU4LAp9CgpmbiBtYWluKCl7CiAgICBsZXQgeCA9IEZvbyB7IGE6MSwgYjoyIH07CgogICAgbGV0IEZvbyB7IGE6IHgsIGI6IHkgfSA9IHg7IC8vIG9rIQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////z/wBAABAPAEGwCBCyYAADAAAgcAMQEAAwDtAg4AAC8CBQEEU29tZQEBALQJAAEwAAMA7QIOAAIvAAEDANgCJAAALgEBALQJAAIaANkCEgAAtAkFAQVFMDAyNQABHwUAAQAFAwDYAiQAAC4BAQG5CQABLwAdALALJgAANQAAAh0AsAsmAAC0CQUB1wVBIHN0cnVjdCBwYXR0ZXJuIGF0dGVtcHRlZCB0byBleHRyYWN0IGEgbm9uLWV4aXN0ZW50IGZpZWxkIGZyb20gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI2CnN0cnVjdCBUaGluZyB7CiAgICB4OiB1MzIsCiAgICB5OiB1MzIsCn0KCmxldCB0aGluZyA9IFRoaW5nIHsgeDogMCwgeTogMCB9OwoKbWF0Y2ggdGhpbmcgewogICAgVGhpbmcgeyB4LCB6IH0gPT4ge30gLy8gZXJyb3I6IGBUaGluZzo6emAgZmllbGQgZG9lc24ndCBleGlzdAp9CmBgYAoKSWYgeW91IGFyZSB1c2luZyBzaG9ydGhhbmQgZmllbGQgcGF0dGVybnMgYnV0IHdhbnQgdG8gcmVmZXIgdG8gdGhlIHN0cnVjdCBmaWVsZApieSBhIGRpZmZlcmVudCBuYW1lLCB5b3Ugc2hvdWxkIHJlbmFtZSBpdCBleHBsaWNpdGx5LiBTdHJ1Y3QgZmllbGRzIGFyZQppZGVudGlmaWVkIGJ5IHRoZSBuYW1lIHVzZWQgYmVmb3JlIHRoZSBjb2xvbiBgOmAgc28gc3RydWN0IHBhdHRlcm5zIHNob3VsZApyZXNlbWJsZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHN0cnVjdCB0eXBlIGJlaW5nIG1hdGNoZWQuCgpgYGAKc3RydWN0IFRoaW5nIHsKICAgIHg6IHUzMiwKICAgIHk6IHUzMiwKfQoKbGV0IHRoaW5nID0gVGhpbmcgeyB4OiAwLCB5OiAwIH07CgptYXRjaCB0aGluZyB7CiAgICBUaGluZyB7IHgsIHk6IHogfSA9PiB7fSAvLyB3ZSByZW5hbWVkIGB5YCB0byBgemAKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wPXBQABANcFHQCwCyYAADQAAgcANQEAAwDtAg4AADMCBQEEU29tZQEBALQJAAE0AAMA7QIOAAIzAAEDANgCJAAAMgEBALQJAAIcANkCEgAAtAkFAQVFMDAyNgABHwUAAQAFAwDYAiQAADIBAQG5CQABMwAfAN8LJgAAOQAAAh8A3wsmAAC0CQUBvQVBIHBhdHRlcm4gZm9yIGEgc3RydWN0IGZhaWxzIHRvIHNwZWNpZnkgYSBzdWItcGF0dGVybiBmb3IgZXZlcnkgb25lIG9mIHRoZQpzdHJ1Y3QncyBmaWVsZHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI3CnN0cnVjdCBEb2cgewogICAgbmFtZTogU3RyaW5nLAogICAgYWdlOiB1MzIsCn0KCmxldCBkID0gRG9nIHsgbmFtZTogIlJ1c3R5Ii50b19zdHJpbmcoKSwgYWdlOiA4IH07CgovLyBUaGlzIGlzIGluY29ycmVjdC4KbWF0Y2ggZCB7CiAgICBEb2cgeyBhZ2U6IHggfSA9PiB7fQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGVuc3VyZSB0aGF0IGVhY2ggZmllbGQgZnJvbSB0aGUgc3RydWN0J3MgZGVmaW5pdGlvbiBpcwptZW50aW9uZWQgaW4gdGhlIHBhdHRlcm4sIG9yIHVzZSBgLi5gIHRvIGlnbm9yZSB1bndhbnRlZCBmaWVsZHMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IERvZyB7CiAgICBuYW1lOiBTdHJpbmcsCiAgICBhZ2U6IHUzMiwKfQoKbGV0IGQgPSBEb2cgeyBuYW1lOiAiUnVzdHkiLnRvX3N0cmluZygpLCBhZ2U6IDggfTsKCm1hdGNoIGQgewogICAgRG9nIHsgbmFtZTogcmVmIG4sIGFnZTogeCB9ID0+IHt9Cn0KCi8vIFRoaXMgaXMgYWxzbyBjb3JyZWN0IChpZ25vcmUgdW51c2VkIGZpZWxkcykuCm1hdGNoIGQgewogICAgRG9nIHsgYWdlOiB4LCAuLiB9ID0+IHt9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70FAAEAvQUfAN8LJgAAOAACBwA5AQADAO0CDgAANwIFAQRTb21lAQEAtAkAATgAAwDtAg4AAjcAAQMA2AIkAAA2AQEAtAkAAh4A2QISAAC0CQUBBUUwMDI3AAEfBQABAAUDANgCJAAANgEBAbkJAAE3ACEAjgwmAAA9AAACIQCODCYAALQJBQHzBVNvbWV0aGluZyBvdGhlciB0aGFuIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgaGFzIGJlZW4gdXNlZCBmb3IgYSByYW5nZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjkKbGV0IHN0cmluZyA9ICJzYWx1dGF0aW9ucyAhIjsKCi8vIFRoZSBvcmRlcmluZyByZWxhdGlvbiBmb3Igc3RyaW5ncyBjYW5ub3QgYmUgZXZhbHVhdGVkIGF0IGNvbXBpbGUgdGltZSwKLy8gc28gdGhpcyBkb2Vzbid0IHdvcms6Cm1hdGNoIHN0cmluZyB7CiAgICAiaGVsbG8iIC4uPSAid29ybGQiID0+IHt9CiAgICBfID0+IHt9Cn0KCi8vIFRoaXMgaXMgYSBtb3JlIGdlbmVyYWwgdmVyc2lvbiwgdXNpbmcgYSBndWFyZDoKbWF0Y2ggc3RyaW5nIHsKICAgIHMgaWYgcyA+PSAiaGVsbG8iICYmIHMgPD0gIndvcmxkIiA9PiB7fQogICAgXyA9PiB7fQp9CmBgYAoKSW4gYSBtYXRjaCBleHByZXNzaW9uLCBvbmx5IG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgY2FuIGJlIG1hdGNoZWQgYWdhaW5zdCBhCnJhbmdlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNoZWNrcyB0aGF0IHRoZSByYW5nZSBpcyBub24tZW1wdHkgYXQKY29tcGlsZS10aW1lLCBhbmQgaXMgdW5hYmxlIHRvIGV2YWx1YXRlIGFyYml0cmFyeSBjb21wYXJpc29uIGZ1bmN0aW9ucy4gSWYgeW91CndhbnQgdG8gY2FwdHVyZSB2YWx1ZXMgb2YgYW4gb3JkZXJhYmxlIHR5cGUgYmV0d2VlbiB0d28gZW5kLXBvaW50cywgeW91IGNhbiB1c2UKYSBndWFyZC4KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8D8wUAAQDzBSEAjgwmAAA8AAIHAD0BAAMA7QIOAAA7AgUBBFNvbWUBAQC0CQABPAADAO0CDgACOwABAwDYAiQAADoBAQC0CQACIADZAhIAALQJBQEFRTAwMjkAAR8FAAEABQMA2AIkAAA6AQEBuQkAATsAIwC9DCYAAEEAAAIjAL0MJgAAtAkFAbIDV2hlbiBtYXRjaGluZyBhZ2FpbnN0IGEgcmFuZ2UsIHRoZSBjb21waWxlciB2ZXJpZmllcyB0aGF0IHRoZSByYW5nZSBpcwpub24tZW1wdHkuIFJhbmdlIHBhdHRlcm5zIGluY2x1ZGUgYm90aCBlbmQtcG9pbnRzLCBzbyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KcmVxdWlyaW5nIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBlbmQgb2YgdGhlCnJhbmdlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzMAptYXRjaCA1dTMyIHsKICAgIC8vIFRoaXMgcmFuZ2UgaXMgb2ssIGFsYmVpdCBwb2ludGxlc3MuCiAgICAxIC4uPSAxID0+IHt9CiAgICAvLyBUaGlzIHJhbmdlIGlzIGVtcHR5LCBhbmQgdGhlIGNvbXBpbGVyIGNhbiB0ZWxsLgogICAgMTAwMCAuLj0gNSA9PiB7fQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8BsgMAAQCyAyMAvQwmAABAAAIHAEEBAAMA7QIOAAA/AgUBBFNvbWUBAQC0CQABQAADAO0CDgACPwABAwDYAiQAAD4BAQC0CQACIgDZAhIAALQJBQEFRTAwMzAAAR8FAAEABQMA2AIkAAA+AQEBuQkAAT8AJQDsDCYAAEUAAAIlAOwMJgAAtAkFAb4HQSB0cmFpdCB0eXBlIGhhcyBiZWVuIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzMKIyB0cmFpdCBTb21lVHJhaXQgeyBmbiBtZXRob2Rfb25lKCZzZWxmKXt9IGZuIG1ldGhvZF90d28oJnNlbGYpe30gfQojIGltcGw8VD4gU29tZVRyYWl0IGZvciBUIHt9CmxldCB0cmFpdF9vYmo6ICZTb21lVHJhaXQgPSAmInNvbWVfdmFsdWUiOwoKLy8gVGhpcyB0cmllcyB0byBpbXBsaWNpdGx5IGRlcmVmZXJlbmNlIHRvIGNyZWF0ZSBhbiB1bnNpemVkIGxvY2FsIHZhcmlhYmxlLgpsZXQgJmludmFsaWQgPSB0cmFpdF9vYmo7CgovLyBZb3UgY2FuIGNhbGwgbWV0aG9kcyB3aXRob3V0IGJpbmRpbmcgdG8gdGhlIHZhbHVlIGJlaW5nIHBvaW50ZWQgYXQuCnRyYWl0X29iai5tZXRob2Rfb25lKCk7CnRyYWl0X29iai5tZXRob2RfdHdvKCk7CmBgYAoKQSBwb2ludGVyIHRvIGEgdHJhaXQgdHlwZSBjYW5ub3QgYmUgaW1wbGljaXRseSBkZXJlZmVyZW5jZWQgYnkgYSBwYXR0ZXJuLiBFdmVyeQp0cmFpdCBkZWZpbmVzIGEgdHlwZSwgYnV0IGJlY2F1c2UgdGhlIHNpemUgb2YgdHJhaXQgaW1wbGVtZW50ZXJzIGlzbid0IGZpeGVkLAp0aGlzIHR5cGUgaGFzIG5vIGNvbXBpbGUtdGltZSBzaXplLiBUaGVyZWZvcmUsIGFsbCBhY2Nlc3NlcyB0byB0cmFpdCB0eXBlcyBtdXN0CmJlIHRocm91Z2ggcG9pbnRlcnMuIElmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3Ugc2hvdWxkIHRyeSB0byBhdm9pZApkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyLgoKWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdHJhaXQgb2JqZWN0cyBpbiB0aGUgW1RyYWl0IE9iamVjdHNdIHNlY3Rpb24gb2YgdGhlClJlZmVyZW5jZS4KCltUcmFpdCBPYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZXMuaHRtbCN0cmFpdC1vYmplY3RzCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z++BwABAL4HJQDsDCYAAEQAAgcARQEAAwDtAg4AAEMCBQEEU29tZQEBALQJAAFEAAMA7QIOAAJDAAEDANgCJAAAQgEBALQJAAIkANkCEgAAtAkFAQVFMDAzMwABHwUAAQAFAwDYAiQAAEIBAQG5CQABQwAnAJsNJgAASQAAAicAmw0mAAC0CQUBzQlUaGUgY29tcGlsZXIgZG9lc24ndCBrbm93IHdoYXQgbWV0aG9kIHRvIGNhbGwgYmVjYXVzZSBtb3JlIHRoYW4gb25lIG1ldGhvZApoYXMgdGhlIHNhbWUgcHJvdG90eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzNApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKdHJhaXQgVHJhaXQyIHsKICAgIGZuIGZvbygpOwp9CgppbXBsIFRyYWl0MSBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KaW1wbCBUcmFpdDIgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgVGVzdDo6Zm9vKCkgLy8gZXJyb3IsIHdoaWNoIGZvbygpIHRvIGNhbGw/Cn0KYGBgCgpUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgaGF2ZSB0byBrZWVwIG9ubHkgb25lIG9mIHRoZW0gYW5kIHJlbW92ZSB0aGUgb3RoZXJzLgpTbyBsZXQncyB0YWtlIG91ciBleGFtcGxlIGFuZCBmaXggaXQ6CgpgYGAKc3RydWN0IFRlc3Q7Cgp0cmFpdCBUcmFpdDEgewogICAgZm4gZm9vKCk7Cn0KCmltcGwgVHJhaXQxIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQoKZm4gbWFpbigpIHsKICAgIFRlc3Q6OmZvbygpIC8vIGFuZCBub3cgdGhhdCdzIGdvb2QhCn0KYGBgCgpIb3dldmVyLCBhIGJldHRlciBzb2x1dGlvbiB3b3VsZCBiZSB1c2luZyBmdWxseSBleHBsaWNpdCBuYW1pbmcgb2YgdHlwZSBhbmQKdHJhaXQ6CgpgYGAKc3RydWN0IFRlc3Q7Cgp0cmFpdCBUcmFpdDEgewogICAgZm4gZm9vKCk7Cn0KCnRyYWl0IFRyYWl0MiB7CiAgICBmbiBmb28oKTsKfQoKaW1wbCBUcmFpdDEgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CmltcGwgVHJhaXQyIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQoKZm4gbWFpbigpIHsKICAgIDxUZXN0IGFzIFRyYWl0MT46OmZvbygpCn0KYGBgCgpPbmUgbGFzdCBleGFtcGxlOgoKYGBgCnRyYWl0IEYgewogICAgZm4gbSgmc2VsZik7Cn0KCnRyYWl0IEcgewogICAgZm4gbSgmc2VsZik7Cn0KCnN0cnVjdCBYOwoKaW1wbCBGIGZvciBYIHsgZm4gbSgmc2VsZikgeyBwcmludGxuISgiSSBhbSBGIik7IH0gfQppbXBsIEcgZm9yIFggeyBmbiBtKCZzZWxmKSB7IHByaW50bG4hKCJJIGFtIEciKTsgfSB9CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBYOwoKICAgIEY6Om0oJmYpOyAvLyBpdCBkaXNwbGF5cyAiSSBhbSBGIgogICAgRzo6bSgmZik7IC8vIGl0IGRpc3BsYXlzICJJIGFtIEciCn0KYGBgCgAU////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/zQkAAQDNCScAmw0mAABIAAIHAEkBAAMA7QIOAABHAgUBBFNvbWUBAQC0CQABSAADAO0CDgACRwABAwDYAiQAAEYBAQC0CQACJgDZAhIAALQJBQEFRTAwMzQAAR8FAAEABQMA2AIkAABGAQEBuQkAAUcAKQDKDSYAAE0AAAIpAMoNJgAAtAkFAe89VHJhaXQgb2JqZWN0cyBsaWtlIGBCb3g8VHJhaXQ+YCBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aGVuIGNlcnRhaW4KcmVxdWlyZW1lbnRzIGFyZSBzYXRpc2ZpZWQgYnkgdGhlIHRyYWl0IGluIHF1ZXN0aW9uLgoKVHJhaXQgb2JqZWN0cyBhcmUgYSBmb3JtIG9mIGR5bmFtaWMgZGlzcGF0Y2ggYW5kIHVzZSBhIGR5bmFtaWNhbGx5IHNpemVkIHR5cGUKZm9yIHRoZSBpbm5lciB0eXBlLiBTbywgZm9yIGEgZ2l2ZW4gdHJhaXQgYFRyYWl0YCwgd2hlbiBgVHJhaXRgIGlzIHRyZWF0ZWQgYXMgYQp0eXBlLCBhcyBpbiBgQm94PFRyYWl0PmAsIHRoZSBpbm5lciB0eXBlIGlzICd1bnNpemVkJy4gSW4gc3VjaCBjYXNlcyB0aGUgYm94ZWQKcG9pbnRlciBpcyBhICdmYXQgcG9pbnRlcicgdGhhdCBjb250YWlucyBhbiBleHRyYSBwb2ludGVyIHRvIGEgdGFibGUgb2YgbWV0aG9kcwooYW1vbmcgb3RoZXIgdGhpbmdzKSBmb3IgZHluYW1pYyBkaXNwYXRjaC4gVGhpcyBkZXNpZ24gbWFuZGF0ZXMgc29tZQpyZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRyYWl0cyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gdHJhaXQKb2JqZWN0cywgd2hpY2ggYXJlIGNvbGxlY3RpdmVseSB0ZXJtZWQgYXMgJ29iamVjdCBzYWZldHknIHJ1bGVzLgoKQXR0ZW1wdGluZyB0byBjcmVhdGUgYSB0cmFpdCBvYmplY3QgZm9yIGEgbm9uIG9iamVjdC1zYWZlIHRyYWl0IHdpbGwgdHJpZ2dlcgp0aGlzIGVycm9yLgoKVGhlcmUgYXJlIHZhcmlvdXMgcnVsZXM6CgojIyMgVGhlIHRyYWl0IGNhbm5vdCByZXF1aXJlIGBTZWxmOiBTaXplZGAKCldoZW4gYFRyYWl0YCBpcyB0cmVhdGVkIGFzIGEgdHlwZSwgdGhlIHR5cGUgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBzcGVjaWFsCmBTaXplZGAgdHJhaXQsIGJlY2F1c2UgdGhlIHR5cGUgZG9lcyBub3QgaGF2ZSBhIGtub3duIHNpemUgYXQgY29tcGlsZSB0aW1lIGFuZApjYW4gb25seSBiZSBhY2Nlc3NlZCBiZWhpbmQgYSBwb2ludGVyLiBUaHVzLCBpZiB3ZSBoYXZlIGEgdHJhaXQgbGlrZSB0aGUKZm9sbG93aW5nOgoKYGBgCnRyYWl0IEZvbyB3aGVyZSBTZWxmOiBTaXplZCB7Cgp9CmBgYAoKV2UgY2Fubm90IGNyZWF0ZSBhbiBvYmplY3Qgb2YgdHlwZSBgQm94PEZvbz5gIG9yIGAmRm9vYCBzaW5jZSBpbiB0aGlzIGNhc2UKYFNlbGZgIHdvdWxkIG5vdCBiZSBgU2l6ZWRgLgoKR2VuZXJhbGx5LCBgU2VsZjogU2l6ZWRgIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdHJhaXQgc2hvdWxkIG5vdCBiZSB1c2VkCmFzIGEgdHJhaXQgb2JqZWN0LiBJZiB0aGUgdHJhaXQgY29tZXMgZnJvbSB5b3VyIG93biBjcmF0ZSwgY29uc2lkZXIgcmVtb3ZpbmcKdGhpcyByZXN0cmljdGlvbi4KCiMjIyBNZXRob2QgcmVmZXJlbmNlcyB0aGUgYFNlbGZgIHR5cGUgaW4gaXRzIHBhcmFtZXRlcnMgb3IgcmV0dXJuIHR5cGUKClRoaXMgaGFwcGVucyB3aGVuIGEgdHJhaXQgaGFzIGEgbWV0aG9kIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGY7Cn0KCmltcGwgVHJhaXQgZm9yIFN0cmluZyB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGYgewogICAgICAgICJoaSIudG9fb3duZWQoKQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGYgewogICAgICAgIDEKICAgIH0KfQpgYGAKCihOb3RlIHRoYXQgYCZzZWxmYCBhbmQgYCZtdXQgc2VsZmAgYXJlIG9rYXksIGl0J3MgYWRkaXRpb25hbCBgU2VsZmAgdHlwZXMgd2hpY2gKY2F1c2UgdGhpcyBwcm9ibGVtLikKCkluIHN1Y2ggYSBjYXNlLCB0aGUgY29tcGlsZXIgY2Fubm90IHByZWRpY3QgdGhlIHJldHVybiB0eXBlIG9mIGBmb28oKWAgaW4gYQpzaXR1YXRpb24gbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZikgLT4gU2VsZjsKfQoKZm4gY2FsbF9mb28oeDogQm94PFRyYWl0PikgewogICAgbGV0IHkgPSB4LmZvbygpOyAvLyBXaGF0IHR5cGUgaXMgeT8KICAgIC8vIC4uLgp9CmBgYAoKSWYgb25seSBzb21lIG1ldGhvZHMgYXJlbid0IG9iamVjdC1zYWZlLCB5b3UgY2FuIGFkZCBhIGB3aGVyZSBTZWxmOiBTaXplZGAgYm91bmQKb24gdGhlbSB0byBtYXJrIHRoZW0gYXMgZXhwbGljaXRseSB1bmF2YWlsYWJsZSB0byB0cmFpdCBvYmplY3RzLiBUaGUKZnVuY3Rpb25hbGl0eSB3aWxsIHN0aWxsIGJlIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgaW1wbGVtZW50ZXJzLCBpbmNsdWRpbmcKYEJveDxUcmFpdD5gIHdoaWNoIGlzIGl0c2VsZiBzaXplZCAoYXNzdW1pbmcgeW91IGBpbXBsIFRyYWl0IGZvciBCb3g8VHJhaXQ+YCkuCgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHdoZXJlIFNlbGY6IFNpemVkOwogICAgLy8gbW9yZSBmdW5jdGlvbnMKfQpgYGAKCk5vdywgYGZvbygpYCBjYW4gbm8gbG9uZ2VyIGJlIGNhbGxlZCBvbiBhIHRyYWl0IG9iamVjdCwgYnV0IHlvdSB3aWxsIG5vdyBiZQphbGxvd2VkIHRvIG1ha2UgYSB0cmFpdCBvYmplY3QsIGFuZCB0aGF0IHdpbGwgYmUgYWJsZSB0byBjYWxsIGFueSBvYmplY3Qtc2FmZQptZXRob2RzLiBXaXRoIHN1Y2ggYSBib3VuZCwgb25lIGNhbiBzdGlsbCBjYWxsIGBmb28oKWAgb24gdHlwZXMgaW1wbGVtZW50aW5nCnRoYXQgdHJhaXQgdGhhdCBhcmVuJ3QgYmVoaW5kIHRyYWl0IG9iamVjdHMuCgojIyMgTWV0aG9kIGhhcyBnZW5lcmljIHR5cGUgcGFyYW1ldGVycwoKQXMgbWVudGlvbmVkIGJlZm9yZSwgdHJhaXQgb2JqZWN0cyBjb250YWluIHBvaW50ZXJzIHRvIG1ldGhvZCB0YWJsZXMuIFNvLCBpZiB3ZQpoYXZlOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCmltcGwgVHJhaXQgZm9yIFN0cmluZyB7CiAgICBmbiBmb28oJnNlbGYpIHsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiAxCiAgICB9Cn0KCmltcGwgVHJhaXQgZm9yIHU4IHsKICAgIGZuIGZvbygmc2VsZikgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDIKICAgIH0KfQovLyAuLi4KYGBgCgpBdCBjb21waWxlIHRpbWUgZWFjaCBpbXBsZW1lbnRhdGlvbiBvZiBgVHJhaXRgIHdpbGwgcHJvZHVjZSBhIHRhYmxlIGNvbnRhaW5pbmcKdGhlIHZhcmlvdXMgbWV0aG9kcyAoYW5kIG90aGVyIGl0ZW1zKSByZWxhdGVkIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KClRoaXMgd29ya3MgZmluZSwgYnV0IHdoZW4gdGhlIG1ldGhvZCBnYWlucyBnZW5lcmljIHBhcmFtZXRlcnMsIHdlIGNhbiBoYXZlIGEKcHJvYmxlbS4KClVzdWFsbHksIGdlbmVyaWMgcGFyYW1ldGVycyBnZXQgX21vbm9tb3JwaGl6ZWRfLiBGb3IgZXhhbXBsZSwgaWYgSSBoYXZlCgpgYGAKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIC8vIC4uLgp9CmBgYAoKVGhlIG1hY2hpbmUgY29kZSBmb3IgYGZvbzo6PHU4PigpYCwgYGZvbzo6PGJvb2w+KClgLCBgZm9vOjo8U3RyaW5nPigpYCwgb3IgYW55Cm90aGVyIHR5cGUgc3Vic3RpdHV0aW9uIGlzIGRpZmZlcmVudC4gSGVuY2UgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyB0aGUKaW1wbGVtZW50YXRpb24gb24tZGVtYW5kLiBJZiB5b3UgY2FsbCBgZm9vKClgIHdpdGggYSBgYm9vbGAgcGFyYW1ldGVyLCB0aGUKY29tcGlsZXIgd2lsbCBvbmx5IGdlbmVyYXRlIGNvZGUgZm9yIGBmb286Ojxib29sPigpYC4gV2hlbiB3ZSBoYXZlIGFkZGl0aW9uYWwKdHlwZSBwYXJhbWV0ZXJzLCB0aGUgbnVtYmVyIG9mIG1vbm9tb3JwaGl6ZWQgaW1wbGVtZW50YXRpb25zIHRoZSBjb21waWxlcgpnZW5lcmF0ZXMgZG9lcyBub3QgZ3JvdyBkcmFzdGljYWxseSwgc2luY2UgdGhlIGNvbXBpbGVyIHdpbGwgb25seSBnZW5lcmF0ZSBhbgppbXBsZW1lbnRhdGlvbiBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdW5wYXJhbWV0cml6ZWQgc3Vic3RpdHV0aW9ucwooaS5lLiwgc3Vic3RpdHV0aW9ucyB3aGVyZSBub25lIG9mIHRoZSBzdWJzdGl0dXRlZCB0eXBlcyBhcmUgdGhlbXNlbHZlcwpwYXJhbWV0ZXJpemVkKS4KCkhvd2V2ZXIsIHdpdGggdHJhaXQgb2JqZWN0cyB3ZSBoYXZlIHRvIG1ha2UgYSB0YWJsZSBjb250YWluaW5nIF9ldmVyeV8gb2JqZWN0CnRoYXQgaW1wbGVtZW50cyB0aGUgdHJhaXQuIE5vdywgaWYgaXQgaGFzIHR5cGUgcGFyYW1ldGVycywgd2UgbmVlZCB0byBhZGQKaW1wbGVtZW50YXRpb25zIGZvciBldmVyeSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0aGUgdHJhaXQsIGFuZCB0aGVyZSBjb3VsZAp0aGVvcmV0aWNhbGx5IGJlIGFuIGluZmluaXRlIG51bWJlciBvZiB0eXBlcy4KCkZvciBleGFtcGxlLCB3aXRoOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbzxUPigmc2VsZiwgb246IFQpOwogICAgLy8gbW9yZSBtZXRob2RzCn0KCmltcGwgVHJhaXQgZm9yIFN0cmluZyB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMgogICAgfQp9CgovLyA4IG1vcmUgaW1wbGVtZW50YXRpb25zCmBgYAoKTm93LCBpZiB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAojIHRyYWl0IFRyYWl0IHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCk7IH0KIyBpbXBsIFRyYWl0IGZvciBTdHJpbmcgeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgaW1wbCBUcmFpdCBmb3IgdTggeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgaW1wbCBUcmFpdCBmb3IgYm9vbCB7IGZuIGZvbzxUPigmc2VsZiwgb246IFQpIHt9IH0KIyAvLyBldGMuCmZuIGNhbGxfZm9vKHRoaW5nOiBCb3g8VHJhaXQ+KSB7CiAgICB0aGluZy5mb28odHJ1ZSk7IC8vIHRoaXMgY291bGQgYmUgYW55IG9uZSBvZiB0aGUgOCB0eXBlcyBhYm92ZQogICAgdGhpbmcuZm9vKDEpOwogICAgdGhpbmcuZm9vKCJoZWxsbyIpOwp9CmBgYAoKV2UgZG9uJ3QganVzdCBuZWVkIHRvIGNyZWF0ZSBhIHRhYmxlIG9mIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsIG1ldGhvZHMgb2YKYFRyYWl0YCwgd2UgbmVlZCB0byBjcmVhdGUgc3VjaCBhIHRhYmxlLCBmb3IgZWFjaCBkaWZmZXJlbnQgdHlwZSBmZWQgdG8KYGZvbygpYC4gSW4gdGhpcyBjYXNlIHRoaXMgdHVybnMgb3V0IHRvIGJlICgxMCB0eXBlcyBpbXBsZW1lbnRpbmcgYFRyYWl0YClcKigzCnR5cGVzIGJlaW5nIGZlZCB0byBgZm9vKClgKSA9IDMwIGltcGxlbWVudGF0aW9ucyEKCldpdGggcmVhbCB3b3JsZCB0cmFpdHMgdGhlc2UgbnVtYmVycyBjYW4gZ3JvdyBkcmFzdGljYWxseS4KClRvIGZpeCB0aGlzLCBpdCBpcyBzdWdnZXN0ZWQgdG8gdXNlIGEgYHdoZXJlIFNlbGY6IFNpemVkYCBib3VuZCBzaW1pbGFyIHRvIHRoZQpmaXggZm9yIHRoZSBzdWItZXJyb3IgYWJvdmUgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gY2FsbCB0aGUgbWV0aG9kIHdpdGggdHlwZQpwYXJhbWV0ZXJzOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbzxUPigmc2VsZiwgb246IFQpIHdoZXJlIFNlbGY6IFNpemVkOwogICAgLy8gbW9yZSBtZXRob2RzCn0KYGBgCgpJZiB0aGlzIGlzIG5vdCBhbiBvcHRpb24sIGNvbnNpZGVyIHJlcGxhY2luZyB0aGUgdHlwZSBwYXJhbWV0ZXIgd2l0aCBhbm90aGVyCnRyYWl0IG9iamVjdCAoZS5nLiwgaWYgYFQ6IE90aGVyVHJhaXRgLCB1c2UgYG9uOiBCb3g8T3RoZXJUcmFpdD5gKS4gSWYgdGhlCm51bWJlciBvZiB0eXBlcyB5b3UgaW50ZW5kIHRvIGZlZWQgdG8gdGhpcyBtZXRob2QgaXMgbGltaXRlZCwgY29uc2lkZXIgbWFudWFsbHkKbGlzdGluZyBvdXQgdGhlIG1ldGhvZHMgb2YgZGlmZmVyZW50IHR5cGVzLgoKIyMjIE1ldGhvZCBoYXMgbm8gcmVjZWl2ZXIKCk1ldGhvZHMgdGhhdCBkbyBub3QgdGFrZSBhIGBzZWxmYCBwYXJhbWV0ZXIgY2FuJ3QgYmUgY2FsbGVkIHNpbmNlIHRoZXJlIHdvbid0IGJlCmEgd2F5IHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIG1ldGhvZCB0YWJsZSBmb3IgdGhlbS4KCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCkgLT4gdTg7Cn0KYGBgCgpUaGlzIGNvdWxkIGJlIGNhbGxlZCBhcyBgPEZvbyBhcyBGb28+Ojpmb28oKWAsIHdoaWNoIHdvdWxkIG5vdCBiZSBhYmxlIHRvIHBpY2sKYW4gaW1wbGVtZW50YXRpb24uCgpBZGRpbmcgYSBgU2VsZjogU2l6ZWRgIGJvdW5kIHRvIHRoZXNlIG1ldGhvZHMgd2lsbCBnZW5lcmFsbHkgbWFrZSB0aGlzIGNvbXBpbGUuCgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpIC0+IHU4IHdoZXJlIFNlbGY6IFNpemVkOwp9CmBgYAoKIyMjIFRoZSB0cmFpdCBjYW5ub3QgY29udGFpbiBhc3NvY2lhdGVkIGNvbnN0YW50cwoKSnVzdCBsaWtlIHN0YXRpYyBmdW5jdGlvbnMsIGFzc29jaWF0ZWQgY29uc3RhbnRzIGFyZW4ndCBzdG9yZWQgb24gdGhlIG1ldGhvZAp0YWJsZS4gSWYgdGhlIHRyYWl0IG9yIGFueSBzdWJ0cmFpdCBjb250YWluIGFuIGFzc29jaWF0ZWQgY29uc3RhbnQsIHRoZXkgY2Fubm90CmJlIG1hZGUgaW50byBhbiBvYmplY3QuCgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKdHJhaXQgRm9vIHsKICAgIGNvbnN0IFg6IGkzMjsKfQoKaW1wbCBGb28ge30KYGBgCgpBIHNpbXBsZSB3b3JrYXJvdW5kIGlzIHRvIHVzZSBhIGhlbHBlciBtZXRob2QgaW5zdGVhZDoKCmBgYAp0cmFpdCBGb28gewogICAgZm4geCgmc2VsZikgLT4gaTMyOwp9CmBgYAoKIyMjIFRoZSB0cmFpdCBjYW5ub3QgdXNlIGBTZWxmYCBhcyBhIHR5cGUgcGFyYW1ldGVyIGluIHRoZSBzdXBlcnRyYWl0IGxpc3RpbmcKClRoaXMgaXMgc2ltaWxhciB0byB0aGUgc2Vjb25kIHN1Yi1lcnJvciwgYnV0IHN1YnRsZXIuIEl0IGhhcHBlbnMgaW4gc2l0dWF0aW9ucwpsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKdHJhaXQgU3VwZXI8QTogP1NpemVkPiB7fQoKdHJhaXQgVHJhaXQ6IFN1cGVyPFNlbGY+IHsKfQoKc3RydWN0IEZvbzsKCmltcGwgU3VwZXI8Rm9vPiBmb3IgRm9ve30KCmltcGwgVHJhaXQgZm9yIEZvbyB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBCb3g8ZHluIFRyYWl0PjsKfQpgYGAKCkhlcmUsIHRoZSBzdXBlcnRyYWl0IG1pZ2h0IGhhdmUgbWV0aG9kcyBhcyBmb2xsb3dzOgoKYGBgCnRyYWl0IFN1cGVyPEE6ID9TaXplZD4gewogICAgZm4gZ2V0X2EoJnNlbGYpIC0+ICZBOyAvLyBub3RlIHRoYXQgdGhpcyBpcyBvYmplY3Qgc2FmZSEKfQpgYGAKCklmIHRoZSB0cmFpdCBgVHJhaXRgIHdhcyBkZXJpdmluZyBmcm9tIHNvbWV0aGluZyBsaWtlIGBTdXBlcjxTdHJpbmc+YCBvcgpgU3VwZXI8VD5gICh3aGVyZSBgRm9vYCBpdHNlbGYgaXMgYEZvbzxUPmApLCB0aGlzIGlzIG9rYXksIGJlY2F1c2UgZ2l2ZW4gYSB0eXBlCmBnZXRfYSgpYCB3aWxsIGRlZmluaXRlbHkgcmV0dXJuIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCgpIb3dldmVyLCBpZiBpdCBkZXJpdmVzIGZyb20gYFN1cGVyPFNlbGY+YCwgZXZlbiB0aG91Z2ggYFN1cGVyYCBpcyBvYmplY3Qgc2FmZSwKdGhlIG1ldGhvZCBgZ2V0X2EoKWAgd291bGQgcmV0dXJuIGFuIG9iamVjdCBvZiB1bmtub3duIHR5cGUgd2hlbiBjYWxsZWQgb24gdGhlCmZ1bmN0aW9uLiBgU2VsZmAgdHlwZSBwYXJhbWV0ZXJzIGxldCB1cyBtYWtlIG9iamVjdCBzYWZlIHRyYWl0cyBubyBsb25nZXIgc2FmZSwKc28gdGhleSBhcmUgZm9yYmlkZGVuIHdoZW4gc3BlY2lmeWluZyBzdXBlcnRyYWl0cy4KClRoZXJlJ3Mgbm8gZWFzeSBmaXggZm9yIHRoaXMuIEdlbmVyYWxseSwgY29kZSB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZCBzbyB0aGF0CnlvdSBubyBsb25nZXIgbmVlZCB0byBkZXJpdmUgZnJvbSBgU3VwZXI8U2VsZj5gLgoAfP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x/vPQABAO89KQDKDSYAAEwAAgcATQEAAwDtAg4AAEsCBQEEU29tZQEBALQJAAFMAAMA7QIOAAJLAAEDANgCJAAASgEBALQJAAIoANkCEgAAtAkFAQVFMDAzOAABHwUAAQAFAwDYAiQAAEoBAQG5CQABSwArAPkNJgAAUQAAAisA+Q0mAAC0CQUBvgVJdCBpcyBub3QgYWxsb3dlZCB0byBtYW51YWxseSBjYWxsIGRlc3RydWN0b3JzIGluIFJ1c3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQwCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CgppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCJrYWJvb20iKTsKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IEZvbyB7IHg6IC03IH07CiAgICB4LmRyb3AoKTsgLy8gZXJyb3I6IGV4cGxpY2l0IHVzZSBvZiBkZXN0cnVjdG9yIG1ldGhvZAp9CmBgYAoKSXQgaXMgdW5uZWNlc3NhcnkgdG8gZG8gdGhpcyBzaW5jZSBgZHJvcGAgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYQp2YWx1ZSBnb2VzIG91dCBvZiBzY29wZS4gSG93ZXZlciwgaWYgeW91IHJlYWxseSBuZWVkIHRvIGRyb3AgYSB2YWx1ZSBieSBoYW5kLAp5b3UgY2FuIHVzZSB0aGUgYHN0ZDo6bWVtOjpkcm9wYCBmdW5jdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCJrYWJvb20iKTsKICAgIH0KfQpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gRm9vIHsgeDogLTcgfTsKICAgIGRyb3AoeCk7IC8vIG9rIQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z++BQABAL4FKwD5DSYAAFAAAgcAUQEAAwDtAg4AAE8CBQEEU29tZQEBALQJAAFQAAMA7QIOAAJPAAEDANgCJAAATgEBALQJAAIqANkCEgAAtAkFAQVFMDA0MAABHwUAAQAFAwDYAiQAAE4BAQG5CQABTwAtAKgOJgAAVQAAAi0AqA4mAAC0CQUBxgJZb3UgY2Fubm90IHVzZSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlcnMgb24gZm9yZWlnbiBpdGVtcy4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDQKZXh0ZXJuICJDIiB7IGZuIHNvbWVfZnVuYzxUPih4OiBUKTsgfQpgYGAKClRvIGZpeCB0aGlzLCByZXBsYWNlIHRoZSBnZW5lcmljIHBhcmFtZXRlciB3aXRoIHRoZSBzcGVjaWFsaXphdGlvbnMgdGhhdCB5b3UKbmVlZDoKCmBgYApleHRlcm4gIkMiIHsgZm4gc29tZV9mdW5jX2kzMih4OiBpMzIpOyB9CmV4dGVybiAiQyIgeyBmbiBzb21lX2Z1bmNfaTY0KHg6IGk2NCk7IH0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wE/xgIAAQDGAi0AqA4mAABUAAIHAFUBAAMA7QIOAABTAgUBBFNvbWUBAQC0CQABVAADAO0CDgACUwABAwDYAiQAAFIBAQC0CQACLADZAhIAALQJBQEFRTAwNDQAAR8FAAEABQMA2AIkAABSAQEBuQkAAVMALwDXDiYAAFkAAAIvANcOJgAAtAkFAdkDVmFyaWFkaWMgcGFyYW1ldGVycyBoYXZlIGJlZW4gdXNlZCBvbiBhIG5vbi1DIEFCSSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDUKIyFbZmVhdHVyZSh1bmJveGVkX2Nsb3N1cmVzKV0KCmV4dGVybiAicnVzdC1jYWxsIiB7CiAgICBmbiBmb28oeDogdTgsIC4uLik7IC8vIGVycm9yIQp9CmBgYAoKUnVzdCBvbmx5IHN1cHBvcnRzIHZhcmlhZGljIHBhcmFtZXRlcnMgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBDIGNvZGUgaW4gaXRzCkZGSS4gQXMgc3VjaCwgdmFyaWFkaWMgcGFyYW1ldGVycyBjYW4gb25seSBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIHdoaWNoIGFyZQp1c2luZyB0aGUgQyBBQkkuIFRvIGZpeCBzdWNoIGNvZGUsIHB1dCB0aGVtIGluIGFuIGV4dGVybiAiQyIgYmxvY2s6CgpgYGAKZXh0ZXJuICJDIiB7CiAgICBmbiBmb28gKHg6IHU4LCAuLi4pOwp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8P2QMAAQDZAy8A1w4mAABYAAIHAFkBAAMA7QIOAABXAgUBBFNvbWUBAQC0CQABWAADAO0CDgACVwABAwDYAiQAAFYBAQC0CQACLgDZAhIAALQJBQEFRTAwNDUAAR8FAAEABQMA2AIkAABWAQEBuQkAAVcAMQCGDyYAAF0AAAIxAIYPJgAAtAkFAdMESXRlbXMgYXJlIG1pc3NpbmcgaW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7fQovLyBlcnJvcjogbm90IGFsbCB0cmFpdCBpdGVtcyBpbXBsZW1lbnRlZCwgbWlzc2luZzogYGZvb2AKYGBgCgpXaGVuIHRyeWluZyB0byBtYWtlIHNvbWUgdHlwZSBpbXBsZW1lbnQgYSB0cmFpdCBgRm9vYCwgeW91IG11c3QsIGF0IG1pbmltdW0sCnByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgb2YgYEZvb2AncyByZXF1aXJlZCBtZXRob2RzIChtZWFuaW5nIHRoZQptZXRob2RzIHRoYXQgZG8gbm90IGhhdmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMpLCBhcyB3ZWxsIGFzIGFueSByZXF1aXJlZAp0cmFpdCBpdGVtcyBsaWtlIGFzc29jaWF0ZWQgdHlwZXMgb3IgY29uc3RhbnRzLiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wQAAQDTBDEAhg8mAABcAAIHAF0BAAMA7QIOAABbAgUBBFNvbWUBAQC0CQABXAADAO0CDgACWwABAwDYAiQAAFoBAQC0CQACMADZAhIAALQJBQEFRTAwNDYAAR8FAAEABQMA2AIkAABaAQEBuQkAAVsAMwC1DyYAAGEAAAIzALUPJgAAtAkFAeQFQW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIHR5cGUgb3IKY29uc3QgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDkKdHJhaXQgRm9vIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMCB0eXBlIHBhcmFtZXRlcnMgYnV0IGl0cyB0cmFpdCBkZWNsYXJhdGlvbiBoYXMgMQovLyB0eXBlIHBhcmFtZXRlcgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbyh4OiBib29sKSAtPiBTZWxmIHsgQmFyIH0KfQpgYGAKCkZvciBleGFtcGxlLCB0aGUgYEZvb2AgdHJhaXQgaGFzIGEgbWV0aG9kIGBmb29gIHdpdGggYSB0eXBlIHBhcmFtZXRlciBgVGAsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvb2AgZm9yIHRoZSB0eXBlIGBCYXJgIGlzIG1pc3NpbmcgdGhpcyBwYXJhbWV0ZXIuClRvIGZpeCB0aGlzIGVycm9yLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb288VDogRGVmYXVsdD4oeDogVCkgLT4gU2VsZiB7IC8vIG9rIQogICAgICAgIEJhcgogICAgfQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8B5AUAAQDkBTMAtQ8mAABgAAIHAGEBAAMA7QIOAABfAgUBBFNvbWUBAQC0CQABYAADAO0CDgACXwABAwDYAiQAAF4BAQC0CQACMgDZAhIAALQJBQEFRTAwNDkAAR8FAAEABQMA2AIkAABeAQEBuQkAAV8ANQDkDyYAAGUAAAI1AOQPJgAAtAkFAdwFQW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIGZ1bmN0aW9uCnBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDUwCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oJnNlbGYsIHg6IHU4KSAtPiBib29sOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMSBwYXJhbWV0ZXIgYnV0IHRoZSBkZWNsYXJhdGlvbiBpbiB0cmFpdCBgRm9vOjpmb29gCi8vIGhhcyAyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9Cn0KYGBgCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHRyYWl0IGhhcyBhIG1ldGhvZCBgZm9vYCB3aXRoIHR3byBmdW5jdGlvbiBwYXJhbWV0ZXJzCihgJnNlbGZgIGFuZCBgdThgKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgb21pdHMKdGhlIGB1OGAgcGFyYW1ldGVyLiBUbyBmaXggdGhpcyBlcnJvciwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbDsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbCB7IC8vIG9rIQogICAgICAgIHRydWUKICAgIH0KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3/cBQABANwFNQDkDyYAAGQAAgcAZQEAAwDtAg4AAGMCBQEEU29tZQEBALQJAAFkAAMA7QIOAAJjAAEDANgCJAAAYgEBALQJAAI0ANkCEgAAtAkFAQVFMDA1MAABHwUAAQAFAwDYAiQAAGIBAQG5CQABYwA3AJMQJgAAaQAAAjcAkxAmAAC0CQUB9AJUaGUgcGFyYW1ldGVycyBvZiBhbnkgdHJhaXQgbWV0aG9kIG11c3QgbWF0Y2ggYmV0d2VlbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uCmFuZCB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4OiB1MTYpOwogICAgZm4gYmFyKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIGV4cGVjdGVkIHUxNiwgZm91bmQgaTE2CiAgICBmbiBmb28oeDogaTE2KSB7IH0KCiAgICAvLyBlcnJvciwgdHlwZXMgZGlmZmVyIGluIG11dGFiaWxpdHkKICAgIGZuIGJhcigmbXV0IHNlbGYpIHsgfQp9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////////wf0AgABAPQCNwCTECYAAGgAAgcAaQEAAwDtAg4AAGcCBQEEU29tZQEBALQJAAFoAAMA7QIOAAJnAAEDANgCJAAAZgEBALQJAAI2ANkCEgAAtAkFAQVFMDA1MwABHwUAAQAFAwDYAiQAAGYBAQG5CQABZwA5AMIQJgAAbQAAAjkAwhAmAAC0CQUBsgJJdCBpcyBub3QgYWxsb3dlZCB0byBjYXN0IHRvIGEgYm9vbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTQKbGV0IHggPSA1OwoKLy8gTm90IGFsbG93ZWQsIHdvbid0IGNvbXBpbGUKbGV0IHhfaXNfbm9uemVybyA9IHggYXMgYm9vbDsKYGBgCgpJZiB5b3UgYXJlIHRyeWluZyB0byBjYXN0IGEgbnVtZXJpYyB0eXBlIHRvIGEgYm9vbCwgeW91IGNhbiBjb21wYXJlIGl0IHdpdGgKemVybyBpbnN0ZWFkOgoKYGBgCmxldCB4ID0gNTsKCi8vIE9rCmxldCB4X2lzX25vbnplcm8gPSB4ICE9IDA7CmBgYAoABf///////////wH///////////8B////////////Af///////////wH/////////AbICAAEAsgI5AMIQJgAAbAACBwBtAQADAO0CDgAAawIFAQRTb21lAQEAtAkAAWwAAwDtAg4AAmsAAQMA2AIkAABqAQEAtAkAAjgA2QISAAC0CQUBBUUwMDU0AAEfBQABAAUDANgCJAAAagEBAbkJAAFrADsA8RAmAABxAAACOwDxECYAALQJBQGPBkR1cmluZyBhIG1ldGhvZCBjYWxsLCBhIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgZGVyZWZlcmVuY2VkIGFzIG1hbnkgdGltZXMgYXMKbmVlZGVkIHRvIG1ha2UgdGhlIHZhbHVlJ3MgdHlwZSBtYXRjaCB0aGUgbWV0aG9kJ3MgcmVjZWl2ZXIuIFRoZSBjYXRjaCBpcyB0aGF0CnRoZSBjb21waWxlciB3aWxsIG9ubHkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZSBhIG51bWJlciBvZiB0aW1lcyB1cCB0byB0aGUKcmVjdXJzaW9uIGxpbWl0ICh3aGljaCBjYW4gYmUgc2V0IHZpYSB0aGUgYHJlY3Vyc2lvbl9saW1pdGAgYXR0cmlidXRlKS4KCkZvciBhIHNvbWV3aGF0IGFydGlmaWNpYWwgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NQojIVtyZWN1cnNpb25fbGltaXQ9IjQiXQoKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCBmb28gPSBGb287CiAgICBsZXQgcmVmX2ZvbyA9ICYmJiYmRm9vOwoKICAgIC8vIGVycm9yLCByZWFjaGVkIHRoZSByZWN1cnNpb24gbGltaXQgd2hpbGUgYXV0by1kZXJlZmVyZW5jaW5nIGAmJiYmJkZvb2AKICAgIHJlZl9mb28uZm9vKCk7Cn0KYGBgCgpPbmUgZml4IG1heSBiZSB0byBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGxpbWl0LiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8KY3JlYXRlIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBvZiBkZXJlZmVyZW5jaW5nLCBpbiB3aGljaCBjYXNlIHRoZSBvbmx5IGZpeCBpcyB0bwpzb21laG93IGJyZWFrIHRoZSByZWN1cnNpb24uCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8BjwYAAQCPBjsA8RAmAABwAAIHAHEBAAMA7QIOAABvAgUBBFNvbWUBAQC0CQABcAADAO0CDgACbwABAwDYAiQAAG4BAQC0CQACOgDZAhIAALQJBQEFRTAwNTUAAR8FAAEABQMA2AIkAABuAQEBuQkAAW8APQCgESYAAHUAAAI9AKARJgAAtAkFAdkEQW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBnaXZlbiB3aGVuIGNhbGxpbmcgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NwpsZXQgZiA9IHx4fCB4ICogMzsKbGV0IGEgPSBmKCk7ICAgICAgICAvLyBpbnZhbGlkLCB0b28gZmV3IHBhcmFtZXRlcnMKbGV0IGIgPSBmKDQpOyAgICAgICAvLyB0aGlzIHdvcmtzIQpsZXQgYyA9IGYoMiwgMyk7ICAgIC8vIGludmFsaWQsIHRvbyBtYW55IHBhcmFtZXRlcnMKYGBgCgpXaGVuIGludm9raW5nIGNsb3N1cmVzIG9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gdHJhaXRzIGBGbmAsCmBGbk11dGAgb3IgYEZuT25jZWAgdXNpbmcgY2FsbCBub3RhdGlvbiwgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUKZnVuY3Rpb24gbXVzdCBtYXRjaCBpdHMgZGVmaW5pdGlvbi4KCkEgZ2VuZXJpYyBmdW5jdGlvbiBtdXN0IGJlIHRyZWF0ZWQgc2ltaWxhcmx5OgoKYGBgCmZuIGZvbzxGOiBGbigpPihmOiBGKSB7CiAgICBmKCk7IC8vIHRoaXMgaXMgdmFsaWQsIGJ1dCBmKDMpIHdvdWxkIG5vdCB3b3JrCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kEAAEA2QQ9AKARJgAAdAACBwB1AQADAO0CDgAAcwIFAQRTb21lAQEAtAkAAXQAAwDtAg4AAnMAAQMA2AIkAAByAQEAtAkAAjwA2QISAAC0CQUBBUUwMDU3AAEfBQABAAUDANgCJAAAcgEBAbkJAAFzAD8AzxEmAAB5AAACPwDPESYAALQJBQHwBlRoZSBidWlsdC1pbiBmdW5jdGlvbiB0cmFpdHMgYXJlIGdlbmVyaWMgb3ZlciBhIHR1cGxlIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuCklmIG9uZSB1c2VzIGFuZ2xlLWJyYWNrZXQgbm90YXRpb24gKGBGbjwoVCwpLCBPdXRwdXQ9VT5gKSBpbnN0ZWFkIG9mIHBhcmVudGhlc2VzCihgRm4oVCkgLT4gVWApIHRvIGRlbm90ZSB0aGUgZnVuY3Rpb24gdHJhaXQsIHRoZSB0eXBlIHBhcmFtZXRlciBzaG91bGQgYmUgYQp0dXBsZS4gT3RoZXJ3aXNlIGZ1bmN0aW9uIGNhbGwgbm90YXRpb24gY2Fubm90IGJlIHVzZWQgYW5kIHRoZSB0cmFpdCB3aWxsIG5vdCBiZQppbXBsZW1lbnRlZCBieSBjbG9zdXJlcy4KClRoZSBtb3N0IGxpa2VseSBzb3VyY2Ugb2YgdGhpcyBlcnJvciBpcyB1c2luZyBhbmdsZS1icmFja2V0IG5vdGF0aW9uIHdpdGhvdXQKd3JhcHBpbmcgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IHR5cGUgaW50byBhIHR1cGxlLCBmb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1OQojIVtmZWF0dXJlKHVuYm94ZWRfY2xvc3VyZXMpXQoKZm4gZm9vPEY6IEZuPGkzMj4+KGY6IEYpIC0+IEY6Ok91dHB1dCB7IGYoMykgfQpgYGAKCkl0IGNhbiBiZSBmaXhlZCBieSBhZGp1c3RpbmcgdGhlIHRyYWl0IGJvdW5kIGxpa2UgdGhpczoKCmBgYAojIVtmZWF0dXJlKHVuYm94ZWRfY2xvc3VyZXMpXQoKZm4gZm9vPEY6IEZuPChpMzIsKT4+KGY6IEYpIC0+IEY6Ok91dHB1dCB7IGYoMykgfQpgYGAKCk5vdGUgdGhhdCBgKFQsKWAgYWx3YXlzIGRlbm90ZXMgdGhlIHR5cGUgb2YgYSAxLXR1cGxlIGNvbnRhaW5pbmcgYW4gZWxlbWVudCBvZgp0eXBlIGBUYC4gVGhlIGNvbW1hIGlzIG5lY2Vzc2FyeSBmb3Igc3ludGFjdGljIGRpc2FtYmlndWF0aW9uLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AYAAQDwBj8AzxEmAAB4AAIHAHkBAAMA7QIOAAB3AgUBBFNvbWUBAQC0CQABeAADAO0CDgACdwABAwDYAiQAAHYBAQC0CQACPgDZAhIAALQJBQEFRTAwNTkAAR8FAAEABQMA2AIkAAB2AQEBuQkAAXcAQQD+ESYAAH0AAAJBAP4RJgAAtAkFAY0IRXh0ZXJuYWwgQyBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgdmFyaWFkaWMuIEhvd2V2ZXIsIGEgdmFyaWFkaWMgZnVuY3Rpb24KdGFrZXMgYSBtaW5pbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBleGFtcGxlLCBjb25zaWRlciBDJ3MgdmFyaWFkaWMgYHByaW50ZmAKZnVuY3Rpb246CgpgYGBjb21waWxlX2ZhaWwsRTAwNjAKdXNlIHN0ZDo6b3M6OnJhdzo6e2NfY2hhciwgY19pbnR9OwoKZXh0ZXJuICJDIiB7CiAgICBmbiBwcmludGYoXzogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKfQoKdW5zYWZlIHsgcHJpbnRmKCk7IH0gLy8gZXJyb3IhCmBgYAoKVXNpbmcgdGhpcyBkZWNsYXJhdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHNvCnNpbXBseSBjYWxsaW5nIGBwcmludGYoKWAgaXMgaW52YWxpZC4gQnV0IHRoZSBmb2xsb3dpbmcgdXNlcyBhcmUgYWxsb3dlZDoKCmBgYAojICMhW2ZlYXR1cmUoc3RhdGljX25vYnVuZGxlKV0KIyB1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CiMgI1tjZmdfYXR0cihhbGwod2luZG93cywgdGFyZ2V0X2VudiA9ICJtc3ZjIiksCiMgICAgICAgICAgICBsaW5rKG5hbWUgPSAibGVnYWN5X3N0ZGlvX2RlZmluaXRpb25zIiwga2luZCA9ICJzdGF0aWMtbm9idW5kbGUiKSldCiMgZXh0ZXJuICJDIiB7IGZuIHByaW50ZihfOiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50OyB9CiMgZm4gbWFpbigpIHsKdW5zYWZlIHsKICAgIHVzZSBzdGQ6OmZmaTo6Q1N0cmluZzsKCiAgICBsZXQgZm10ID0gQ1N0cmluZzo6bmV3KCJ0ZXN0XG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCkpOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoIm51bWJlciA9ICVkXG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCksIDMpOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoIiVkLCAlZFxuIikudW53cmFwKCk7CiAgICBwcmludGYoZm10LmFzX3B0cigpLCAxMCwgNSk7Cn0KIyB9CmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/P40IAAEAjQhBAP4RJgAAfAACBwB9AQADAO0CDgAAewIFAQRTb21lAQEAtAkAAXwAAwDtAg4AAnsAAQMA2AIkAAB6AQEAtAkAAkAA2QISAAC0CQUBBUUwMDYwAAEfBQABAAUDANgCJAAAegEBAbkJAAF7AEMArRImAACBAQAAAkMArRImAAC0CQUBiwRBbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgd2FzIHBhc3NlZCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjEKZm4gZih1OiBpMzIpIHt9CgpmKCk7IC8vIGVycm9yIQpgYGAKClRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byBhIGZ1bmN0aW9uIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmd1bWVudHMKc3BlY2lmaWVkIGluIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuCgpGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBsaWtlOgoKYGBgCmZuIGYoYTogdTE2LCBiOiAmc3RyKSB7fQpgYGAKCk11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgZS5nLiwgYGYoMiwgInRlc3QiKWAuCgpOb3RlIHRoYXQgUnVzdCBkb2VzIG5vdCBoYXZlIGEgbm90aW9uIG9mIG9wdGlvbmFsIGZ1bmN0aW9uIGFyZ3VtZW50cyBvcgp2YXJpYWRpYyBmdW5jdGlvbnMgKGV4Y2VwdCBmb3IgaXRzIEMtRkZJKS4KAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8PiwQAAQCLBEMArRImAACAAQACBwCBAQEAAwDtAg4AAH8CBQEEU29tZQEBALQJAAGAAQADAO0CDgACfwABAwDYAiQAAH4BAQC0CQACQgDZAhIAALQJBQEFRTAwNjEAAR8FAAEABQMA2AIkAAB+AQEBuQkAAX8ARQDcEiYAAIUBAAACRQDcEiYAALQJBQG/BEEgc3RydWN0J3Mgb3Igc3RydWN0LWxpa2UgZW51bSB2YXJpYW50J3MgZmllbGQgd2FzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjIKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7CiAgICAgICAgICAgICAgICB4OiAwLAogICAgICAgICAgICAgICAgeDogMCwgLy8gZXJyb3I6IGZpZWxkIGB4YCBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKICAgICAgICAgICAgfTsKfQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgZHVyaW5nIGFuIGF0dGVtcHQgdG8gYnVpbGQgYSBzdHJ1Y3Qgb3Igc3RydWN0LWxpa2UKZW51bSB2YXJpYW50LCBvbmUgb2YgdGhlIGZpZWxkcyB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLiBFYWNoIGZpZWxkIHNob3VsZApiZSBzcGVjaWZpZWQgZXhhY3RseSBvbmUgdGltZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMCB9OyAvLyBvayEKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////f78EAAEAvwRFANwSJgAAhAEAAgcAhQEBAAMA7QIOAACDAQIFAQRTb21lAQEAtAkAAYQBAAMA7QIOAAKDAQABAwDYAiQAAIIBAQEAtAkAAkQA2QISAAC0CQUBBUUwMDYyAAEfBQABAAUDANgCJAAAggEBAQG5CQABgwEARwCLEyYAAIkBAAACRwCLEyYAALQJBQH/AkEgc3RydWN0J3Mgb3Igc3RydWN0LWxpa2UgZW51bSB2YXJpYW50J3MgZmllbGQgd2FzIG5vdCBwcm92aWRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjMKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAgfTsgLy8gZXJyb3I6IG1pc3NpbmcgZmllbGQ6IGB5YAp9CmBgYAoKRWFjaCBmaWVsZCBzaG91bGQgYmUgc3BlY2lmaWVkIGV4YWN0bHkgb25jZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMCwgeTogMCB9OyAvLyBvayEKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////////f/8CAAEA/wJHAIsTJgAAiAEAAgcAiQEBAAMA7QIOAACHAQIFAQRTb21lAQEAtAkAAYgBAAMA7QIOAAKHAQABAwDYAiQAAIYBAQEAtAkAAkYA2QISAAC0CQUBBUUwMDYzAAEfBQABAAUDANgCJAAAhgEBAQG5CQABhwEASQC6EyYAAI0BAAACSQC6EyYAALQJBQGSAkFuIGludmFsaWQgbGVmdC1oYW5kIHNpZGUgZXhwcmVzc2lvbiB3YXMgdXNlZCBvbiBhbiBhc3NpZ25tZW50IG9wZXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjcKMTIgKz0gMTsgLy8gZXJyb3IhCmBgYAoKWW91IG5lZWQgdG8gaGF2ZSBhIHBsYWNlIGV4cHJlc3Npb24gdG8gYmUgYWJsZSB0byBhc3NpZ24gaXQgc29tZXRoaW5nLiBGb3IKZXhhbXBsZToKCmBgYApsZXQgbXV0IHg6IGk4ID0gMTI7CnggKz0gMTsgLy8gb2shCmBgYAoABf///////////wH///////////8B////////////Af///////////wH//w+SAgABAJICSQC6EyYAAIwBAAIHAI0BAQADAO0CDgAAiwECBQEEU29tZQEBALQJAAGMAQADAO0CDgACiwEAAQMA2AIkAACKAQEBALQJAAJIANkCEgAAtAkFAQVFMDA2NwABHwUAAQAFAwDYAiQAAIoBAQEBuQkAAYsBAEsA6RMmAACRAQAAAksA6RMmAAC0CQUByAJUaGUgY29tcGlsZXIgZm91bmQgYSBmdW5jdGlvbiB3aG9zZSBib2R5IGNvbnRhaW5zIGEgYHJldHVybjtgIHN0YXRlbWVudCBidXQKd2hvc2UgcmV0dXJuIHR5cGUgaXMgbm90IGAoKWAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDY5Ci8vIGVycm9yCmZuIGZvbygpIC0+IHU4IHsKICAgIHJldHVybjsKfQpgYGAKClNpbmNlIGByZXR1cm47YCBpcyBqdXN0IGxpa2UgYHJldHVybiAoKTtgLCB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCmZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgYW5kIHRoZSB2YWx1ZSBiZWluZyByZXR1cm5lZC4KAAb///////////8B////////////Af///////////wH///////////8B////////////Af8ByAIAAQDIAksA6RMmAACQAQACBwCRAQEAAwDtAg4AAI8BAgUBBFNvbWUBAQC0CQABkAEAAwDtAg4AAo8BAAEDANgCJAAAjgEBAQC0CQACSgDZAhIAALQJBQEFRTAwNjkAAR8FAAEABQMA2AIkAACOAQEBAbkJAAGPAQBNAJgUJgAAlQEAAAJNAJgUJgAAtAkFAaEJQW4gYXNzaWdubWVudCBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIG5vbi1wbGFjZSBleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgeDogaTMyLAogICAgeTogaTMyLAp9Cgpjb25zdCBTT01FX0NPTlNUOiBpMzIgPSAxMjsKCmZuIHNvbWVfb3RoZXJfZnVuYygpIHt9CgpmbiBzb21lX2Z1bmN0aW9uKCkgewogICAgU09NRV9DT05TVCA9IDE0OyAvLyBlcnJvcjogYSBjb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgY2hhbmdlZCEKICAgIDEgPSAzOyAvLyBlcnJvcjogMSBpc24ndCBhIHZhbGlkIHBsYWNlIQogICAgc29tZV9vdGhlcl9mdW5jKCkgPSA0OyAvLyBlcnJvcjogd2UgY2Fubm90IGFzc2lnbiB2YWx1ZSB0byBhIGZ1bmN0aW9uIQogICAgU29tZVN0cnVjdDo6eCA9IDEyOyAvLyBlcnJvcjogU29tZVN0cnVjdCBhIHN0cnVjdHVyZSBuYW1lIGJ1dCBpdCBpcyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsaWtlIGEgdmFyaWFibGUhCn0KYGBgCgpUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvciBtdXN0IGJlIGEgcGxhY2UgZXhwcmVzc2lvbi4gQQpwbGFjZSBleHByZXNzaW9uIHJlcHJlc2VudHMgYSBtZW1vcnkgbG9jYXRpb24gYW5kIGNhbiBiZSBhIHZhcmlhYmxlICh3aXRoCm9wdGlvbmFsIG5hbWVzcGFjaW5nKSwgYSBkZXJlZmVyZW5jZSwgYW4gaW5kZXhpbmcgZXhwcmVzc2lvbiBvciBhIGZpZWxkCnJlZmVyZW5jZS4KCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIFtFeHByZXNzaW9uc10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlLgoKW0V4cHJlc3Npb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwbGFjZXMtcnZhbHVlcy1hbmQtdGVtcG9yYXJpZXMKCkFuZCBub3cgbGV0J3MgZ2l2ZSB3b3JraW5nIGV4YW1wbGVzOgoKYGBgCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQpsZXQgbXV0IHMgPSBTb21lU3RydWN0IHsgeDogMCwgeTogMCB9OwoKcy54ID0gMzsgLy8gdGhhdCdzIGdvb2QgIQoKLy8gLi4uCgpmbiBzb21lX2Z1bmMoeDogJm11dCBpMzIpIHsKICAgICp4ID0gMTI7IC8vIHRoYXQncyBnb29kICEKfQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H6EJAAEAoQlNAJgUJgAAlAEAAgcAlQEBAAMA7QIOAACTAQIFAQRTb21lAQEAtAkAAZQBAAMA7QIOAAKTAQABAwDYAiQAAJIBAQEAtAkAAkwA2QISAAC0CQUBBUUwMDcwAAEfBQABAAUDANgCJAAAkgEBAQG5CQABkwEATwDHFCYAAJkBAAACTwDHFCYAALQJBQGuBEEgc3RydWN0dXJlLWxpdGVyYWwgc3ludGF4IHdhcyB1c2VkIHRvIGNyZWF0ZSBhbiBpdGVtIHRoYXQgaXMgbm90IGEgc3RydWN0dXJlCm9yIGVudW0gdmFyaWFudC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzEKdHlwZSBVMzIgPSB1MzI7CmxldCB0ID0gVTMyIHsgdmFsdWU6IDQgfTsgLy8gZXJyb3I6IGV4cGVjdGVkIHN0cnVjdCwgdmFyaWFudCBvciB1bmlvbiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGJ1aWx0aW4gdHlwZSBgdTMyYApgYGAKClRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCB0aGUgbmFtZSB3YXMgY29ycmVjdGx5IHNwZWxsZWQsIGFuZCB0aGF0IHRoZSBjb3JyZWN0CmZvcm0gb2YgaW5pdGlhbGl6ZXIgd2FzIHVzZWQuCgpGb3IgZXhhbXBsZSwgdGhlIGNvZGUgYWJvdmUgY2FuIGJlIGZpeGVkIHRvOgoKYGBgCnR5cGUgVTMyID0gdTMyOwpsZXQgdDogVTMyID0gNDsKYGBgCgpvcjoKCmBgYApzdHJ1Y3QgVTMyIHsgdmFsdWU6IHUzMiB9CmxldCB0ID0gVTMyIHsgdmFsdWU6IDQgfTsKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8PrgQAAQCuBE8AxxQmAACYAQACBwCZAQEAAwDtAg4AAJcBAgUBBFNvbWUBAQC0CQABmAEAAwDtAg4AApcBAAEDANgCJAAAlgEBAQC0CQACTgDZAhIAALQJBQEFRTAwNzEAAR8FAAEABQMA2AIkAACWAQEBAbkJAAGXAQBRAPYUJgAAnQEAAAJRAPYUJgAAtAkFAfIIQSByZWN1cnNpdmUgdHlwZSBoYXMgaW5maW5pdGUgc2l6ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbiBpbmRpcmVjdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzIKc3RydWN0IExpc3ROb2RlIHsKICAgIGhlYWQ6IHU4LAogICAgdGFpbDogT3B0aW9uPExpc3ROb2RlPiwgLy8gZXJyb3I6IG5vIGluZGlyZWN0aW9uIGhlcmUgc28gaW1wb3NzaWJsZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbXB1dGUgdGhlIHR5cGUncyBzaXplCn0KYGBgCgpXaGVuIGRlZmluaW5nIGEgcmVjdXJzaXZlIHN0cnVjdCBvciBlbnVtLCBhbnkgdXNlIG9mIHRoZSB0eXBlIGJlaW5nIGRlZmluZWQKZnJvbSBpbnNpZGUgdGhlIGRlZmluaXRpb24gbXVzdCBvY2N1ciBiZWhpbmQgYSBwb2ludGVyIChsaWtlIGBCb3hgLCBgJmAgb3IKYFJjYCkuIFRoaXMgaXMgYmVjYXVzZSBzdHJ1Y3RzIGFuZCBlbnVtcyBtdXN0IGhhdmUgYSB3ZWxsLWRlZmluZWQgc2l6ZSwgYW5kCndpdGhvdXQgdGhlIHBvaW50ZXIsIHRoZSBzaXplIG9mIHRoZSB0eXBlIHdvdWxkIG5lZWQgdG8gYmUgdW5ib3VuZGVkLgoKSW4gdGhlIGV4YW1wbGUsIHRoZSB0eXBlIGNhbm5vdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHNpemUsIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUKYXJiaXRyYXJpbHkgbGFyZ2UgKHNpbmNlIHdlIHdvdWxkIGJlIGFibGUgdG8gbmVzdCBgTGlzdE5vZGVgcyB0byBhbnkgZGVwdGgpLgpTcGVjaWZpY2FsbHksCgpgYGBwbGFpbgpzaXplIG9mIGBMaXN0Tm9kZWAgPSAxIGJ5dGUgZm9yIGBoZWFkYAogICAgICAgICAgICAgICAgICAgKyAxIGJ5dGUgZm9yIHRoZSBkaXNjcmltaW5hbnQgb2YgdGhlIGBPcHRpb25gCiAgICAgICAgICAgICAgICAgICArIHNpemUgb2YgYExpc3ROb2RlYApgYGAKCk9uZSB3YXkgdG8gZml4IHRoaXMgaXMgYnkgd3JhcHBpbmcgYExpc3ROb2RlYCBpbiBhIGBCb3hgLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBoZWFkOiB1OCwKICAgIHRhaWw6IE9wdGlvbjxCb3g8TGlzdE5vZGU+PiwKfQpgYGAKClRoaXMgd29ya3MgYmVjYXVzZSBgQm94YCBpcyBhIHBvaW50ZXIsIHNvIGl0cyBzaXplIGlzIHdlbGwta25vd24uCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////AfIIAAEA8ghRAPYUJgAAnAEAAgcAnQEBAAMA7QIOAACbAQIFAQRTb21lAQEAtAkAAZwBAAMA7QIOAAKbAQABAwDYAiQAAJoBAQEAtAkAAlAA2QISAAC0CQUBBUUwMDcyAAEfBQABAAUDANgCJAAAmgEBAQG5CQABmwEAUwClFSYAAKEBAAACUwClFSYAALQJBQGnBCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW5ub3QgZGVmaW5lIGEgc3RydWN0IChvciBlbnVtKSBgRm9vYCB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIGBGb29gCmluIG9yZGVyIHRvIG1ha2UgYSBuZXcgYEZvb2AgdmFsdWUuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB3YXkgYQpmaXJzdCBpbnN0YW5jZSBvZiBgRm9vYCBjb3VsZCBiZSBtYWRlIHRvIGluaXRpYWxpemUgYW5vdGhlciBpbnN0YW5jZSEKCkhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0IHRoYXQgaGFzIHRoaXMgcHJvYmxlbToKCmBgYApzdHJ1Y3QgRm9vIHsgeDogQm94PEZvbz4gfSAvLyBlcnJvcgpgYGAKCk9uZSBmaXggaXMgdG8gdXNlIGBPcHRpb25gLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBGb28geyB4OiBPcHRpb248Qm94PEZvbz4+IH0KYGBgCgpOb3cgaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIGBGb29gOiBgRm9vIHsgeDogTm9uZSB9YC4KAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cEAAEApwRTAKUVJgAAoAEAAgcAoQEBAAMA7QIOAACfAQIFAQRTb21lAQEAtAkAAaABAAMA7QIOAAKfAQABAwDYAiQAAJ4BAQEAtAkAAlIA2QISAAC0CQUBBUUwMDczAAEfBQABAAUDANgCJAAAngEBAQG5CQABnwEA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CkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyLCB1MzIpOyAvLyBvayEKYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8D8wMAAQDzA1kAshYmAACsAQACBwCtAQEAAwDtAg4AAKsBAgUBBFNvbWUBAQC0CQABrAEAAwDtAg4AAqsBAAEDANgCJAAAqgEBAQC0CQACWADZAhIAALQJBQEFRTAwNzYAAR8FAAEABQMA2AIkAACqAQEBAbkJAAGrAQBbAOEWJgAAsQEAAAJbAOEWJgAAtAkFAcMDQSB0dXBsZSBzdHJ1Y3QncyBlbGVtZW50IGlzbid0IGEgbWFjaGluZSB0eXBlIHdoZW4gdXNpbmcgdGhlIGAjW3NpbWRdYAphdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDc3CiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZChTdHJpbmcpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgZWxlbWVudHMgaW4gdGhlIHR1cGxlCm11c3QgYmUgbWFjaGluZSB0eXBlcyBzbyBTSU1EIG9wZXJhdGlvbnMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlbS4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyLCB1MzIpOyAvLyBvayEKYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQfDAwABAMMDWwDhFiYAALABAAIHALEBAQADAO0CDgAArwECBQEEU29tZQEBALQJAAGwAQADAO0CDgACrwEAAQMA2AIkAACuAQEBALQJAAJaANkCEgAAtAkFAQVFMDA3NwABHwUAAQAFAwDYAiQAAK4BAQEBuQkAAa8BAF0AkBcmAAC1AQAAAl0AkBcmAAC0CQUB3QZBIGNvbnN0YW50IHZhbHVlIGZhaWxlZCB0byBnZXQgZXZhbHVhdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA4MAplbnVtIEVudW0gewogICAgWCA9ICgxIDw8IDUwMCksCiAgICBZID0gKDEgLyAwKSwKfQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIHdhcyB1bmFibGUgdG8gc2Vuc2libHkgZXZhbHVhdGUgYQpjb25zdGFudCBleHByZXNzaW9uIHRoYXQgaGFkIHRvIGJlIGV2YWx1YXRlZC4gQXR0ZW1wdGluZyB0byBkaXZpZGUgYnkgMApvciBjYXVzaW5nIGFuIGludGVnZXIgb3ZlcmZsb3cgYXJlIHR3byB3YXlzIHRvIGluZHVjZSB0aGlzIGVycm9yLgoKRW5zdXJlIHRoYXQgdGhlIGV4cHJlc3Npb25zIGdpdmVuIGNhbiBiZSBldmFsdWF0ZWQgYXMgdGhlIGRlc2lyZWQgaW50ZWdlciB0eXBlLgoKU2VlIHRoZSBbQ3VzdG9tIERpc2NyaW1pbmFudHNdW2N1c3RvbS1kaXNjcmltaW5hbnRzXSBzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UKZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2V0dGluZyBjdXN0b20gaW50ZWdlciB0eXBlcyBvbiBmaWVsZGxlc3MgZW51bXMKdXNpbmcgdGhlIFtgcmVwcmAgYXR0cmlidXRlXVtyZXByLWF0dHJpYnV0ZV0uCgpbY3VzdG9tLWRpc2NyaW1pbmFudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy9lbnVtZXJhdGlvbnMuaHRtbCNjdXN0b20tZGlzY3JpbWluYW50LXZhbHVlcy1mb3ItZmllbGQtbGVzcy1lbnVtZXJhdGlvbnMKW3JlcHItYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZS1sYXlvdXQuaHRtbCNyZXByYy1lbnVtcwoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0GAAEA3QZdAJAXJgAAtAEAAgcAtQEBAAMA7QIOAACzAQIFAQRTb21lAQEAtAkAAbQBAAMA7QIOAAKzAQABAwDYAiQAALIBAQEAtAkAAlwA2QISAAC0CQUBBUUwMDgwAAEfBQABAAUDANgCJAAAsgEBAQG5CQABswEAXwC/FyYAALkBAAACXwC/FyYAALQJBQH7BUEgZGlzY3JpbWluYW50IHZhbHVlIGlzIHByZXNlbnQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDgxCmVudW0gRW51bSB7CiAgICBQID0gMywKICAgIFggPSAzLCAvLyBlcnJvciEKICAgIFkgPSA1LAp9CmBgYAoKRW51bSBkaXNjcmltaW5hbnRzIGFyZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgZW51bSB2YXJpYW50cyBzdG9yZWQgaW4gbWVtb3J5LgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzYW1lIHZhbHVlIHdhcyB1c2VkIGZvciB0d28gb3IgbW9yZSB2YXJpYW50cywKbWFraW5nIGl0IGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbS4KCmBgYAplbnVtIEVudW0gewogICAgUCwKICAgIFggPSAzLCAvLyBvayEKICAgIFkgPSA1LAp9CmBgYAoKTm90ZSB0aGF0IHZhcmlhbnRzIHdpdGhvdXQgYSBtYW51YWxseSBzcGVjaWZpZWQgZGlzY3JpbWluYW50IGFyZSBudW1iZXJlZCBmcm9tCnRvcCB0byBib3R0b20gc3RhcnRpbmcgZnJvbSAwLCBzbyBjbGFzaGVzIGNhbiBvY2N1ciB3aXRoIHNlZW1pbmdseSB1bnJlbGF0ZWQKdmFyaWFudHMuCgpgYGBjb21waWxlX2ZhaWwsRTAwODEKZW51bSBCYWQgewogICAgWCwKICAgIFkgPSAwLCAvLyBlcnJvciEKfQpgYGAKCkhlcmUgYFhgIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkIHRoZSBkaXNjcmltaW5hbnQgMCBieSB0aGUgdGltZSBgWWAgaXMKZW5jb3VudGVyZWQsIHNvIGEgY29uZmxpY3Qgb2NjdXJzLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wUAAQD7BV8AvxcmAAC4AQACBwC5AQEAAwDtAg4AALcBAgUBBFNvbWUBAQC0CQABuAEAAwDtAg4AArcBAAEDANgCJAAAtgEBAQC0CQACXgDZAhIAALQJBQEFRTAwODEAAR8FAAEABQMA2AIkAAC2AQEBAbkJAAG3AQBhAO4XJgAAvQEAAAJhAO4XJgAAtAkFAZIFQW4gdW5zdXBwb3J0ZWQgcmVwcmVzZW50YXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIHplcm8tdmFyaWFudCBlbnVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA4NAojW3JlcHIoaTMyKV0KZW51bSBOaWdodHNXYXRjaCB7fSAvLyBlcnJvcjogdW5zdXBwb3J0ZWQgcmVwcmVzZW50YXRpb24gZm9yIHplcm8tdmFyaWFudCBlbnVtCmBgYAoKSXQgaXMgaW1wb3NzaWJsZSB0byBkZWZpbmUgYW4gaW50ZWdlciB0eXBlIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IHplcm8tdmFyaWFudAplbnVtIHZhbHVlcyBiZWNhdXNlIHRoZXJlIGFyZSBubyB6ZXJvLXZhcmlhbnQgZW51bSB2YWx1ZXMuIFRoZXJlIGlzIG5vIHdheSB0bwpjb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGZvbGxvd2luZyB0eXBlIHVzaW5nIG9ubHkgc2FmZSBjb2RlLiBTbyB5b3UgaGF2ZQp0d28gc29sdXRpb25zLiBFaXRoZXIgeW91IGFkZCB2YXJpYW50cyBpbiB5b3VyIGVudW06CgpgYGAKI1tyZXByKGkzMildCmVudW0gTmlnaHRzV2F0Y2ggewogICAgSm9uU25vdywKICAgIENvbW1hbmRlciwKfQpgYGAKCm9yIHlvdSByZW1vdmUgdGhlIGludGVnZXIgcmVwcmVzZW50YXRpb24gb2YgeW91ciBlbnVtOgoKYGBgCmVudW0gTmlnaHRzV2F0Y2gge30KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IFAAEAkgVhAO4XJgAAvAEAAgcAvQEBAAMA7QIOAAC7AQIFAQRTb21lAQEAtAkAAbwBAAMA7QIOAAK7AQABAwDYAiQAALoBAQEAtAkAAmAA2QISAAC0CQUBBUUwMDg0AAEfBQABAAUDANgCJAAAugEBAQG5CQABuwEAYwCdGCYAAMEBAAACYwCdGCYAALQJBQGSAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRvbyBtYW55IHR5cGUgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgZm9yIGEgZnVuY3Rpb24uIEZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxUPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8ZjY0LCBib29sPigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMSwgZm91bmQgMgp9CmBgYAoKVGhlIG51bWJlciBvZiBzdXBwbGllZCBhcmd1bWVudHMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBudW1iZXIgb2YgZGVmaW5lZCB0eXBlCnBhcmFtZXRlcnMuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgMAAQCSA2MAnRgmAADAAQACBwDBAQEAAwDtAg4AAL8BAgUBBFNvbWUBAQC0CQABwAEAAwDtAg4AAr8BAAEDANgCJAAAvgEBAQC0CQACYgDZAhIAALQJBQEFRTAwODcAAR8FAAEABQMA2AIkAAC+AQEBAbkJAAG/AQBlAMwYJgAAxQEAAAJlAMwYJgAAtAkFAZYHIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGdhdmUgdG9vIG1hbnkgbGlmZXRpbWUgYXJndW1lbnRzLiBFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGY6Ojwnc3RhdGljPigpIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDAsIGZvdW5kIDEKfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZ2l2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYApmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBmKCkgLy8gb2shCn0KYGBgCgpJdCdzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgUnVzdCBjb21waWxlciBjYW4gZ2VuZXJhbGx5CmRldGVybWluZSB0aGUgbGlmZXRpbWUgYnkgaXRzZWxmLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgdmFsdWU6IFN0cmluZwp9CgppbXBsIEZvbyB7CiAgICAvLyBpdCBjYW4gYmUgd3JpdHRlbiBsaWtlIHRoaXMKICAgIGZuIGdldF92YWx1ZTwnYT4oJidhIHNlbGYpIC0+ICYnYSBzdHIgeyAmc2VsZi52YWx1ZSB9CiAgICAvLyBidXQgdGhlIGNvbXBpbGVyIHdvcmtzIGZpbmUgd2l0aCB0aGlzIHRvbzoKICAgIGZuIHdpdGhvdXRfbGlmZXRpbWUoJnNlbGYpIC0+ICZzdHIgeyAmc2VsZi52YWx1ZSB9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IEZvbyB7IHZhbHVlOiAiaGVsbG8iLnRvX293bmVkKCkgfTsKCiAgICBwcmludGxuISgie30iLCBmLmdldF92YWx1ZSgpKTsKICAgIHByaW50bG4hKCJ7fSIsIGYud2l0aG91dF9saWZldGltZSgpKTsKfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWBwABAJYHZQDMGCYAAMQBAAIHAMUBAQADAO0CDgAAwwECBQEEU29tZQEBALQJAAHEAQADAO0CDgACwwEAAQMA2AIkAADCAQEBALQJAAJkANkCEgAAtAkFAQVFMDA4OAABHwUAAQAFAwDYAiQAAMIBAQEBuQkAAcMBAGcA+xgmAADJAQAAAmcA+xgmAAC0CQUBmgUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUb28gZmV3IHR5cGUgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgZm9yIGEgZnVuY3Rpb24uIEZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxULCBVPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8ZjY0PigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOiBleHBlY3RlZCAyLCBmb3VuZCAxCn0KYGBgCgpOb3RlIHRoYXQgaWYgYSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSB0eXBlIGFyZ3VtZW50cyBidXQgeW91IHdhbnQgdGhlIGNvbXBpbGVyCnRvIGluZmVyIHNvbWUgb2YgdGhlbSwgeW91IGNhbiB1c2UgdHlwZSBwbGFjZWhvbGRlcnM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKZm4gZm9vPFQsIFU+KHg6IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHg6IGJvb2wgPSB0cnVlOwogICAgZm9vOjo8ZjY0Pih4KTsgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCiAgICBmb286OjxfLCBmNjQ+KHgpOyAvLyBzYW1lIGFzIGBmb286Ojxib29sLCBmNjQ+KHgpYAp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8fmgUAAQCaBWcA+xgmAADIAQACBwDJAQEAAwDtAg4AAMcBAgUBBFNvbWUBAQC0CQAByAEAAwDtAg4AAscBAAEDANgCJAAAxgEBAQC0CQACZgDZAhIAALQJBQEFRTAwODkAAR8FAAEABQMA2AIkAADGAQEBAbkJAAHHAQBpAKoZJgAAzQEAAAJpAKoZJgAAtAkFAckDIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGdhdmUgdG9vIGZldyBsaWZldGltZSBhcmd1bWVudHMuIEV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKZm4gZm9vPCdhOiAnYiwgJ2I6ICdhPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8J3N0YXRpYz4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMQp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBnaXZlIHRoZSByaWdodCBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzLiBFeGFtcGxlOgoKYGBgCmZuIGZvbzwnYTogJ2IsICdiOiAnYT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PCdzdGF0aWMsICdzdGF0aWM+KCk7Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DyQMAAQDJA2kAqhkmAADMAQACBwDNAQEAAwDtAg4AAMsBAgUBBFNvbWUBAQC0CQABzAEAAwDtAg4AAssBAAEDANgCJAAAygEBAQC0CQACaADZAhIAALQJBQEFRTAwOTAAAR8FAAEABQMA2AIkAADKAQEBAbkJAAHLAQBrANkZJgAA0QEAAAJrANkZJgAAtAkFAfECQW4gdW5uZWNlc3NhcnkgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXIgd2FzIGdpdmVuIGluIGEgdHlwZSBhbGlhcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwOTEKdHlwZSBGb288VD4gPSB1MzI7IC8vIGVycm9yOiB0eXBlIHBhcmFtZXRlciBgVGAgaXMgdW51c2VkCi8vIG9yOgp0eXBlIEZvbzxBLEI+ID0gQm94PEE+OyAvLyBlcnJvcjogdHlwZSBwYXJhbWV0ZXIgYEJgIGlzIHVudXNlZApgYGAKClBsZWFzZSBjaGVjayB5b3UgZGlkbid0IHdyaXRlIHRvbyBtYW55IHBhcmFtZXRlcnMuIEV4YW1wbGU6CgpgYGAKdHlwZSBGb28gPSB1MzI7IC8vIG9rIQp0eXBlIEZvbzI8QT4gPSBCb3g8QT47IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////3/xAgABAPECawDZGSYAANABAAIHANEBAQADAO0CDgAAzwECBQEEU29tZQEBALQJAAHQAQADAO0CDgACzwEAAQMA2AIkAADOAQEBALQJAAJqANkCEgAAtAkFAQVFMDA5MQABHwUAAQAFAwDYAiQAAM4BAQEBuQkAAc8BAG0AiBomAADVAQAAAm0AiBomAAC0CQUBvwRBbiB1bmRlZmluZWQgYXRvbWljIG9wZXJhdGlvbiBmdW5jdGlvbiB3YXMgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDkyCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBhdG9taWNfZm9vKCk7IC8vIGVycm9yOiB1bnJlY29nbml6ZWQgYXRvbWljIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZnVuY3Rpb24KfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZGlkbid0IG1ha2UgYSBtaXN0YWtlIGluIHRoZSBmdW5jdGlvbidzIG5hbWUuIEFsbCBpbnRyaW5zaWMKZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBjb21waWxlci9ydXN0Y19jb2RlZ2VuX2xsdm0vc3JjL2ludHJpbnNpYy5yc2AgYW5kIGluCmBsaWJyYXJ5L2NvcmUvc3JjL2ludHJpbnNpY3MucnNgIGluIHRoZSBSdXN0IHNvdXJjZSBjb2RlLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBhdG9taWNfZmVuY2UoKTsgLy8gb2shCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////3+/BAABAL8EbQCIGiYAANQBAAIHANUBAQADAO0CDgAA0wECBQEEU29tZQEBALQJAAHUAQADAO0CDgAC0wEAAQMA2AIkAADSAQEBALQJAAJsANkCEgAAtAkFAQVFMDA5MgABHwUAAQAFAwDYAiQAANIBAQEBuQkAAdMBAG8AtxomAADZAQAAAm8AtxomAAC0CQUB+wRBbiB1bmtub3duIGludHJpbnNpYyBmdW5jdGlvbiB3YXMgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDkzCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBmb28oKTsgLy8gZXJyb3I6IHVucmVjb2duaXplZCBpbnRyaW5zaWMgZnVuY3Rpb246IGBmb29gCn0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgewogICAgICAgIGZvbygpOwogICAgfQp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3QgbWFrZSBhIG1pc3Rha2UgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxsIGludHJpbnNpYwpmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYGNvbXBpbGVyL3J1c3RjX2NvZGVnZW5fbGx2bS9zcmMvaW50cmluc2ljLnJzYCBhbmQgaW4KYGxpYnJhcnkvY29yZS9zcmMvaW50cmluc2ljcy5yc2AgaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mZW5jZSgpOyAvLyBvayEKfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7CiAgICAgICAgYXRvbWljX2ZlbmNlKCk7CiAgICB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wQAAQD7BG8AtxomAADYAQACBwDZAQEAAwDtAg4AANcBAgUBBFNvbWUBAQC0CQAB2AEAAwDtAg4AAtcBAAEDANgCJAAA1gEBAQC0CQACbgDZAhIAALQJBQEFRTAwOTMAAR8FAAEABQMA2AIkAADWAQEBAbkJAAHXAQBxAOYaJgAA3QEAAAJxAOYaJgAAtAkFAawEQW4gaW52YWxpZCBudW1iZXIgb2YgZ2VuZXJpYyBwYXJhbWV0ZXJzIHdhcyBwYXNzZWQgdG8gYW4gaW50cmluc2ljIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5NAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxULCBVPigpIC0+IHVzaXplOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG9mIHR5cGUgcGFyYW1ldGVycwp9CmBgYAoKUGxlYXNlIGNoZWNrIHRoYXQgeW91IHByb3ZpZGVkIHRoZSByaWdodCBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzCmFuZCB2ZXJpZnkgd2l0aCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIHNpemVfb2Y8VD4oKSAtPiB1c2l6ZTsgLy8gb2shCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8DrAQAAQCsBHEA5homAADcAQACBwDdAQEAAwDtAg4AANsBAgUBBFNvbWUBAQC0CQAB3AEAAwDtAg4AAtsBAAEDANgCJAAA2gEBAQC0CQACcADZAhIAALQJBQEFRTAwOTQAAR8FAAEABQMA2AIkAADaAQEBAbkJAAHbAQBzAJUbJgAA4QEAAAJzAJUbJgAAtAkFAZAOVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhIGxpZmV0aW1lIGlzIG1pc3NpbmcgZnJvbSBhIHR5cGUuIElmIGl0IGlzIGFuIGVycm9yCmluc2lkZSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIHByb2JsZW0gbWF5IGJlIHdpdGggZmFpbGluZyB0byBhZGhlcmUgdG8gdGhlCmxpZmV0aW1lIGVsaXNpb24gcnVsZXMgKHNlZSBiZWxvdykuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNgpzdHJ1Y3QgRm9vMSB7IHg6ICZib29sIH0KICAgICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgpzdHJ1Y3QgRm9vMjwnYT4geyB4OiAmJ2EgYm9vbCB9IC8vIGNvcnJlY3QKCnN0cnVjdCBCYXIxIHsgeDogRm9vMiB9CiAgICAgICAgICAgICAgLy8gXl5eXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKc3RydWN0IEJhcjI8J2E+IHsgeDogRm9vMjwnYT4gfSAvLyBjb3JyZWN0CgplbnVtIEJhejEgeyBBKHU4KSwgQigmYm9vbCksIH0KICAgICAgICAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKZW51bSBCYXoyPCdhPiB7IEEodTgpLCBCKCYnYSBib29sKSwgfSAvLyBjb3JyZWN0Cgp0eXBlIE15U3RyMSA9ICZzdHI7CiAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKdHlwZSBNeVN0cjI8J2E+ID0gJidhIHN0cjsgLy8gY29ycmVjdApgYGAKCkxpZmV0aW1lIGVsaXNpb24gaXMgYSBzcGVjaWFsLCBsaW1pdGVkIGtpbmQgb2YgaW5mZXJlbmNlIGZvciBsaWZldGltZXMgaW4KZnVuY3Rpb24gc2lnbmF0dXJlcyB3aGljaCBhbGxvd3MgeW91IHRvIGxlYXZlIG91dCBsaWZldGltZXMgaW4gY2VydGFpbiBjYXNlcy4KRm9yIG1vcmUgYmFja2dyb3VuZCBvbiBsaWZldGltZSBlbGlzaW9uIHNlZSBbdGhlIGJvb2tdW2Jvb2stbGVdLgoKVGhlIGxpZmV0aW1lIGVsaXNpb24gcnVsZXMgcmVxdWlyZSB0aGF0IGFueSBmdW5jdGlvbiBzaWduYXR1cmUgd2l0aCBhbiBlbGlkZWQKb3V0cHV0IGxpZmV0aW1lIG11c3QgZWl0aGVyIGhhdmU6CgogLSBleGFjdGx5IG9uZSBpbnB1dCBsaWZldGltZQogLSBvciwgbXVsdGlwbGUgaW5wdXQgbGlmZXRpbWVzLCBidXQgdGhlIGZ1bmN0aW9uIG11c3QgYWxzbyBiZSBhIG1ldGhvZCB3aXRoIGEKICAgYCZzZWxmYCBvciBgJm11dCBzZWxmYCByZWNlaXZlcgoKSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBvdXRwdXQgbGlmZXRpbWUgaXMgaW5mZXJyZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHVuaXF1ZQppbnB1dCBsaWZldGltZS4gSW4gdGhlIHNlY29uZCBjYXNlLCB0aGUgbGlmZXRpbWUgaXMgaW5zdGVhZCBpbmZlcnJlZCB0byBiZSB0aGUKc2FtZSBhcyB0aGUgbGlmZXRpbWUgb24gYCZzZWxmYCBvciBgJm11dCBzZWxmYC4KCkhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgZWxpc2lvbiBlcnJvcnM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYKLy8gZXJyb3IsIG5vIGlucHV0IGxpZmV0aW1lcwpmbiBmb28oKSAtPiAmc3RyIHsgfQoKLy8gZXJyb3IsIGB4YCBhbmQgYHlgIGhhdmUgZGlzdGluY3QgbGlmZXRpbWVzIGluZmVycmVkCmZuIGJhcih4OiAmc3RyLCB5OiAmc3RyKSAtPiAmc3RyIHsgfQoKLy8gZXJyb3IsIGB5YCdzIGxpZmV0aW1lIGlzIGluZmVycmVkIHRvIGJlIGRpc3RpbmN0IGZyb20gYHhgJ3MKZm4gYmF6PCdhPih4OiAmJ2Egc3RyLCB5OiAmc3RyKSAtPiAmc3RyIHsgfQpgYGAKCltib29rLWxlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDMtbGlmZXRpbWUtc3ludGF4Lmh0bWwjbGlmZXRpbWUtZWxpc2lvbgoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wOQDgABAJAOcwCVGyYAAOABAAIHAOEBAQADAO0CDgAA3wECBQEEU29tZQEBALQJAAHgAQADAO0CDgAC3wEAAQMA2AIkAADeAQEBALQJAAJyANkCEgAAtAkFAQVFMDEwNgABHwUAAQAFAwDYAiQAAN4BAQEBuQkAAd8BAHUAxBsmAADlAQAAAnUAxBsmAAC0CQUBrQpBbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGdlbmVyaWMgYXJndW1lbnRzIHdhcyBwcm92aWRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKc3RydWN0IEZvbzxUPiB7IHg6IFQgfQoKc3RydWN0IEJhciB7IHg6IEZvbyB9ICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMSwgZm91bmQgMApzdHJ1Y3QgQmF6PFMsIFQ+IHsgeDogRm9vPFMsIFQ+IH0gLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAxLCBmb3VuZCAyCgpmbiBmb288VCwgVT4oeDogVCwgeTogVSkge30KZm4gZigpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHg6IGJvb2wgPSB0cnVlOwogICAgZm9vOjo8Ym9vbD4oeCk7ICAgICAgICAgICAgICAgICAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMQogICAgZm9vOjo8Ym9vbCwgaTMyLCBpMzI+KHgsIDIsIDQpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMwogICAgZjo6PCdzdGF0aWM+KCk7ICAgICAgICAgICAgICAgICAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMCwgZm91bmQgMQp9CmBgYAoKV2hlbiB1c2luZy9kZWNsYXJpbmcgYW4gaXRlbSB3aXRoIGdlbmVyaWMgYXJndW1lbnRzLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBleGFjdApzYW1lIG51bWJlcjoKCmBgYApzdHJ1Y3QgRm9vPFQ+IHsgeDogVCB9CgpzdHJ1Y3QgQmFyPFQ+IHsgeDogRm9vPFQ+IH0gICAgICAgICAgICAgICAvLyBvayEKc3RydWN0IEJhejxTLCBUPiB7IHg6IEZvbzxTPiwgeTogRm9vPFQ+IH0gLy8gb2shCgpmbiBmb288VCwgVT4oeDogVCwgeTogVSkge30KZm4gZigpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHg6IGJvb2wgPSB0cnVlOwogICAgZm9vOjo8Ym9vbCwgdTMyPih4LCAxMik7ICAgICAgICAgICAgICAvLyBvayEKICAgIGYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2shCn0KYGBgCgAV////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8HrQoAAQCtCnUAxBsmAADkAQACBwDlAQEAAwDtAg4AAOMBAgUBBFNvbWUBAQC0CQAB5AEAAwDtAg4AAuMBAAEDANgCJAAA4gEBAQC0CQACdADZAhIAALQJBQEFRTAxMDcAAR8FAAEABQMA2AIkAADiAQEBAbkJAAHjAQB3APMbJgAA6QEAAAJ3APMbJgAAtAkFAYQFWW91IHRyaWVkIHRvIHByb3ZpZGUgYSBnZW5lcmljIGFyZ3VtZW50IHRvIGEgdHlwZSB3aGljaCBkb2Vzbid0IG5lZWQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA5CnR5cGUgWCA9IHUzMjxpMzI+OyAvLyBlcnJvcjogdHlwZSBhcmd1bWVudHMgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIHR5cGUKdHlwZSBZID0gYm9vbDwnc3RhdGljPjsgLy8gZXJyb3I6IGxpZmV0aW1lIHBhcmFtZXRlcnMgYXJlIG5vdCBhbGxvd2VkIG9uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzIHR5cGUKYGBgCgpDaGVjayB0aGF0IHlvdSB1c2VkIHRoZSBjb3JyZWN0IGFyZ3VtZW50IGFuZCB0aGF0IHRoZSBkZWZpbml0aW9uIGlzIGNvcnJlY3QuCgpFeGFtcGxlOgoKYGBgCnR5cGUgWCA9IHUzMjsgLy8gb2shCnR5cGUgWSA9IGJvb2w7IC8vIG9rIQpgYGAKCk5vdGUgdGhhdCBnZW5lcmljIGFyZ3VtZW50cyBmb3IgZW51bSB2YXJpYW50IGNvbnN0cnVjdG9ycyBnbyBhZnRlciB0aGUgdmFyaWFudCwKbm90IGFmdGVyIHRoZSBlbnVtLiBGb3IgZXhhbXBsZSwgeW91IHdvdWxkIHdyaXRlIGBPcHRpb246Ok5vbmU6Ojx1MzI+YCwKcmF0aGVyIHRoYW4gYE9wdGlvbjo6PHUzMj46Ok5vbmVgLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAUAAQCEBXcA8xsmAADoAQACBwDpAQEAAwDtAg4AAOcBAgUBBFNvbWUBAQC0CQAB6AEAAwDtAg4AAucBAAEDANgCJAAA5gEBAQC0CQACdgDZAhIAALQJBQEFRTAxMDkAAR8FAAEABQMA2AIkAADmAQEBAbkJAAHnAQB5AKIcJgAA7QEAAAJ5AKIcJgAAtAkFAaEBIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IHRyaWVkIHRvIHByb3ZpZGUgYSBsaWZldGltZSB0byBhIHR5cGUgd2hpY2ggZG9lc24ndCBuZWVkIGl0LgpTZWUgYEUwMTA5YCBmb3IgbW9yZSBkZXRhaWxzLgoAA////////////wH///////////8B/////x+hAQABAKEBeQCiHCYAAOwBAAIHAO0BAQADAO0CDgAA6wECBQEEU29tZQEBALQJAAHsAQADAO0CDgAC6wEAAQMA2AIkAADqAQEBALQJAAJ4ANkCEgAAtAkFAQVFMDExMAABHwUAAQAFAwDYAiQAAOoBAQEBuQkAAesBAHsA0RwmAADxAQAAAnsA0RwmAAC0CQUBpAZBbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiB3YXMgZGVmaW5lZCBmb3IgYSB0eXBlIG91dHNpZGUgdGhlIGN1cnJlbnQgY3JhdGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE2CmltcGwgVmVjPHU4PiB7IH0gLy8gZXJyb3IKYGBgCgpZb3UgY2FuIG9ubHkgZGVmaW5lIGFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIGZvciBhIHR5cGUgaW4gdGhlIHNhbWUgY3JhdGUKd2hlcmUgdGhlIHR5cGUgd2FzIGRlZmluZWQuIEZvciBleGFtcGxlLCBhbiBgaW1wbGAgYmxvY2sgYXMgYWJvdmUgaXMgbm90IGFsbG93ZWQKc2luY2UgYFZlY2AgaXMgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4KClRvIGZpeCB0aGlzIHByb2JsZW0sIHlvdSBjYW4gZWl0aGVyOgoKIC0gZGVmaW5lIGEgdHJhaXQgdGhhdCBoYXMgdGhlIGRlc2lyZWQgYXNzb2NpYXRlZCBmdW5jdGlvbnMvdHlwZXMvY29uc3RhbnRzIGFuZAogICBpbXBsZW1lbnQgdGhlIHRyYWl0IGZvciB0aGUgdHlwZSBpbiBxdWVzdGlvbgogLSBkZWZpbmUgYSBuZXcgdHlwZSB3cmFwcGluZyB0aGUgdHlwZSBhbmQgZGVmaW5lIGFuIGltcGxlbWVudGF0aW9uIG9uIHRoZSBuZXcKICAgdHlwZQoKTm90ZSB0aGF0IHVzaW5nIHRoZSBgdHlwZWAga2V5d29yZCBkb2VzIG5vdCB3b3JrIGhlcmUgYmVjYXVzZSBgdHlwZWAgb25seQppbnRyb2R1Y2VzIGEgdHlwZSBhbGlhczoKCmBgYGNvbXBpbGVfZmFpbCxFMDExNgp0eXBlIEJ5dGVzID0gVmVjPHU4PjsKCmltcGwgQnl0ZXMgeyB9IC8vIGVycm9yLCBzYW1lIGFzIGFib3ZlCmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////AaQGAAEApAZ7ANEcJgAA8AEAAgcA8QEBAAMA7QIOAADvAQIFAQRTb21lAQEAtAkAAfABAAMA7QIOAALvAQABAwDYAiQAAO4BAQEAtAkAAnoA2QISAAC0CQUBBUUwMTE2AAEfBQABAAUDANgCJAAA7gEBAQG5CQAB7wEAfQCAHSYAAPUBAAACfQCAHSYAALQJBQH5CU9ubHkgdHJhaXRzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgY3JhdGUgY2FuIGJlIGltcGxlbWVudGVkIGZvciBhcmJpdHJhcnkgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE3CmltcGwgRHJvcCBmb3IgdTMyIHt9CmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgYSB2aW9sYXRpb24gb2Ygb25lIG9mIFJ1c3QncyBvcnBoYW4gcnVsZXMgZm9yIHRyYWl0CmltcGxlbWVudGF0aW9ucy4gVGhlIHJ1bGUgcHJvaGliaXRzIGFueSBpbXBsZW1lbnRhdGlvbiBvZiBhIGZvcmVpZ24gdHJhaXQgKGEKdHJhaXQgZGVmaW5lZCBpbiBhbm90aGVyIGNyYXRlKSB3aGVyZQoKIC0gdGhlIHR5cGUgdGhhdCBpcyBpbXBsZW1lbnRpbmcgdGhlIHRyYWl0IGlzIGZvcmVpZ24KIC0gYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byB0aGUgdHJhaXQgKGlmIHRoZXJlIGFyZSBhbnkpIGFyZSBhbHNvCiAgIGZvcmVpZ24uCgpUbyBhdm9pZCB0aGlzIGtpbmQgb2YgZXJyb3IsIGVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBsb2NhbCB0eXBlIGlzIHJlZmVyZW5jZWQKYnkgdGhlIGBpbXBsYDoKCmBgYApwdWIgc3RydWN0IEZvbzsgLy8geW91IGRlZmluZSB5b3VyIHR5cGUgaW4geW91ciBjcmF0ZQoKaW1wbCBEcm9wIGZvciBGb28geyAvLyBhbmQgeW91IGNhbiBpbXBsZW1lbnQgdGhlIHRyYWl0IG9uIGl0IQogICAgLy8gY29kZSBvZiB0cmFpdCBpbXBsZW1lbnRhdGlvbiBoZXJlCiMgICBmbiBkcm9wKCZtdXQgc2VsZikgeyB9Cn0KCmltcGwgRnJvbTxGb28+IGZvciBpMzIgeyAvLyBvciB5b3UgdXNlIGEgdHlwZSBmcm9tIHlvdXIgY3JhdGUgYXMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdHlwZSBwYXJhbWV0ZXIKICAgIGZuIGZyb20oaTogRm9vKSAtPiBpMzIgewogICAgICAgIDAKICAgIH0KfQpgYGAKCkFsdGVybmF0aXZlbHksIGRlZmluZSBhIHRyYWl0IGxvY2FsbHkgYW5kIGltcGxlbWVudCB0aGF0IGluc3RlYWQ6CgpgYGAKdHJhaXQgQmFyIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGwgQmFyIGZvciB1MzIgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CmBgYAoKRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gb2YgdGhlIG9ycGhhbiBydWxlcywgc2VlIFtSRkMgMTAyM10uCgpbUkZDIDEwMjNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xMDIzLXJlYmFsYW5jaW5nLWNvaGVyZW5jZS5tZAoAFP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5CQABAPkJfQCAHSYAAPQBAAIHAPUBAQADAO0CDgAA8wECBQEEU29tZQEBALQJAAH0AQADAO0CDgAC8wEAAQMA2AIkAADyAQEBALQJAAJ8ANkCEgAAtAkFAQVFMDExNwABHwUAAQAFAwDYAiQAAPIBAQEBuQkAAfMBAH8Arx0mAAD5AQAAAn8Arx0mAAC0CQUBkApBbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiB3YXMgZGVmaW5lZCBmb3Igc29tZXRoaW5nIHdoaWNoIGlzbid0IGEgc3RydWN0LAplbnVtLCB1bmlvbiwgb3IgdHJhaXQgb2JqZWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExOAppbXBsICh1OCwgdTgpIHsgLy8gZXJyb3I6IG5vIG5vbWluYWwgdHlwZSBmb3VuZCBmb3IgaW5oZXJlbnQgaW1wbGVtZW50YXRpb24KICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nIHsKICAgICAgICAvLyAuLi4KICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgaW1wbGVtZW50IGEgdHJhaXQgb24gdGhlIHR5cGUgb3Igd3JhcCBpdCBpbiBhIHN0cnVjdC4KRXhhbXBsZToKCmBgYAovLyB3ZSBjcmVhdGUgYSB0cmFpdCBoZXJlCnRyYWl0IExpdmVMb25nQW5kUHJvc3BlciB7CiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZzsKfQoKLy8gYW5kIG5vdyB5b3UgY2FuIGltcGxlbWVudCBpdCBvbiAodTgsIHU4KQppbXBsIExpdmVMb25nQW5kUHJvc3BlciBmb3IgKHU4LCB1OCkgewogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICJIZSdzIGRlYWQsIEppbSEiLnRvX293bmVkKCkKICAgIH0KfQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gY3JlYXRlIGEgbmV3dHlwZS4gQSBuZXd0eXBlIGlzIGEgd3JhcHBpbmcgdHVwbGUtc3RydWN0LgpGb3IgZXhhbXBsZSwgYE5ld1R5cGVgIGlzIGEgbmV3dHlwZSBvdmVyIGBGb29gIGluIGBzdHJ1Y3QgTmV3VHlwZShGb28pYC4KRXhhbXBsZToKCmBgYApzdHJ1Y3QgVHlwZVdyYXBwZXIoKHU4LCB1OCkpOwoKaW1wbCBUeXBlV3JhcHBlciB7CiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZyB7CiAgICAgICAgIkZhc2NpbmF0aW5nISIudG9fb3duZWQoKQogICAgfQp9CmBgYAoKSW5zdGVhZCBvZiBkZWZpbmluZyBhbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiBvbiBhIHJlZmVyZW5jZSwgeW91IGNvdWxkIGFsc28KbW92ZSB0aGUgcmVmZXJlbmNlIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb246CgpgYGBjb21waWxlX2ZhaWwsRTAxMTgKc3RydWN0IEZvbzsKCmltcGwgJkZvbyB7IC8vIGVycm9yOiBubyBub21pbmFsIHR5cGUgZm91bmQgZm9yIGluaGVyZW50IGltcGxlbWVudGF0aW9uCiAgICBmbiBiYXIoc2VsZiwgb3RoZXI6IFNlbGYpIHt9Cn0KYGBgCgpiZWNvbWVzCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigmc2VsZiwgb3RoZXI6ICZTZWxmKSB7fQp9CmBgYAoAFf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8DkAoAAQCQCn8Arx0mAAD4AQACBwD5AQEAAwDtAg4AAPcBAgUBBFNvbWUBAQC0CQAB+AEAAwDtAg4AAvcBAAEDANgCJAAA9gEBAQC0CQACfgDZAhIAALQJBQEFRTAxMTgAAR8FAAEABQMA2AIkAAD2AQEBAbkJAAH3AQCBAQDeHSYAAP0BAAACgQEA3h0mAAC0CQUBkglUaGVyZSBhcmUgY29uZmxpY3RpbmcgdHJhaXQgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgc2FtZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExOQp0cmFpdCBNeVRyYWl0IHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGw8VD4gTXlUcmFpdCBmb3IgVCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KCnN0cnVjdCBGb28gewogICAgdmFsdWU6IHVzaXplCn0KCmltcGwgTXlUcmFpdCBmb3IgRm9vIHsgLy8gZXJyb3I6IGNvbmZsaWN0aW5nIGltcGxlbWVudGF0aW9ucyBvZiB0cmFpdAogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBgTXlUcmFpdGAgZm9yIHR5cGUgYEZvb2AKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyBzZWxmLnZhbHVlIH0KfQpgYGAKCldoZW4gbG9va2luZyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHJhaXQsIHRoZSBjb21waWxlciBmaW5kcwpib3RoIHRoZSBgaW1wbDxUPiBNeVRyYWl0IGZvciBUYCB3aGVyZSBUIGlzIGFsbCB0eXBlcyBhbmQgdGhlIGBpbXBsCk15VHJhaXQgZm9yIEZvb2AuIFNpbmNlIGEgdHJhaXQgY2Fubm90IGJlIGltcGxlbWVudGVkIG11bHRpcGxlIHRpbWVzLAp0aGlzIGlzIGFuIGVycm9yLiBTbywgd2hlbiB5b3Ugd3JpdGU6CgpgYGAKdHJhaXQgTXlUcmFpdCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsPFQ+IE15VHJhaXQgZm9yIFQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CmBgYAoKVGhpcyBtYWtlcyB0aGUgdHJhaXQgaW1wbGVtZW50ZWQgb24gYWxsIHR5cGVzIGluIHRoZSBzY29wZS4gU28gaWYgeW91CnRyeSB0byBpbXBsZW1lbnQgaXQgb24gYW5vdGhlciBvbmUgYWZ0ZXIgdGhhdCwgdGhlIGltcGxlbWVudGF0aW9ucyB3aWxsCmNvbmZsaWN0LiBFeGFtcGxlOgoKYGBgCnRyYWl0IE15VHJhaXQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbDxUPiBNeVRyYWl0IGZvciBUIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQoKc3RydWN0IEZvbzsKCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IEZvbzsKCiAgICBmLmdldCgpOyAvLyB0aGUgdHJhaXQgaXMgaW1wbGVtZW50ZWQgc28gd2UgY2FuIHVzZSBpdAp9CmBgYAoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IJAAEAkgmBAQDeHSYAAPwBAAIHAP0BAQADAO0CDgAA+wECBQEEU29tZQEBALQJAAH8AQADAO0CDgAC+wEAAQMA2AIkAAD6AQEBALQJAAKAAQDZAhIAALQJBQEFRTAxMTkAAR8FAAEABQMA2AIkAAD6AQEBAbkJAAH7AQCDAQCNHiYAAIECAAACgwEAjR4mAAC0CQUBvQVEcm9wIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHRyYWl0LCB3aGljaCBpcyBub3QgYWxsb3dlZDogb25seSBzdHJ1Y3RzIGFuZAplbnVtcyBjYW4gaW1wbGVtZW50IERyb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIwCnRyYWl0IE15VHJhaXQge30KCmltcGwgRHJvcCBmb3IgTXlUcmFpdCB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKCkEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtIGlzIHRvIHdyYXAgdGhlIHRyYWl0IHVwIGluIGEgc3RydWN0LCBhbmQgaW1wbGVtZW50CkRyb3Agb24gdGhhdDoKCmBgYAp0cmFpdCBNeVRyYWl0IHt9CnN0cnVjdCBNeVdyYXBwZXI8VDogTXlUcmFpdD4geyBmb286IFQgfQoKaW1wbCA8VDogTXlUcmFpdD4gRHJvcCBmb3IgTXlXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpgYGAKCkFsdGVybmF0aXZlbHksIHdyYXBwaW5nIHRyYWl0IG9iamVjdHMgcmVxdWlyZXMgc29tZXRoaW5nOgoKYGBgCnRyYWl0IE15VHJhaXQge30KCi8vb3IgQm94PE15VHJhaXQ+LCBpZiB5b3Ugd2FudGVkIGFuIG93bmVkIHRyYWl0IG9iamVjdApzdHJ1Y3QgTXlXcmFwcGVyPCdhPiB7IGZvbzogJidhIE15VHJhaXQgfQoKaW1wbCA8J2E+IERyb3AgZm9yIE15V3JhcHBlcjwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70FAAEAvQWDAQCNHiYAAIACAAIHAIECAQADAO0CDgAA/wECBQEEU29tZQEBALQJAAGAAgADAO0CDgAC/wEAAQMA2AIkAAD+AQEBALQJAAKCAQDZAhIAALQJBQEFRTAxMjAAAR8FAAEABQMA2AIk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ZmllbGQyOiBVLAp9CmBgYAoKUGxlYXNlIGFsc28gdmVyaWZ5IHRoYXQgdGhpcyB3YXNuJ3QgYmVjYXVzZSBvZiBhIG5hbWUtY2xhc2ggYW5kIHJlbmFtZSB0aGUgdHlwZQpwYXJhbWV0ZXIgaWYgc28uCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H9oEAAEA2gSJAQCaHyYAAIwCAAIHAI0CAQADAO0CDgAAiwICBQEEU29tZQEBALQJAAGMAgADAO0CDgACiwIAAQMA2AIkAACKAgEBALQJAAKIAQDZAhIAALQJBQEFRTAxMjgAAR8FAAEABQMA2AIkAACKAgEBAbkJAAGLAgCLAQDJHyYAAJECAAACiwEAyR8mAAC0CQUBjwRBIHBhdHRlcm4gd2FzIGRlY2xhcmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgZm9yZWlnbiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzAKZXh0ZXJuICJDIiB7CiAgICBmbiBmb28oKGEsIGIpOiAodTMyLCB1MzIpKTsgLy8gZXJyb3I6IHBhdHRlcm5zIGFyZW4ndCBhbGxvd2VkIGluIGZvcmVpZ24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZnVuY3Rpb24gZGVjbGFyYXRpb25zCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcmVwbGFjZSB0aGUgcGF0dGVybiBhcmd1bWVudCB3aXRoIGEgcmVndWxhciBvbmUuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgYTogdTMyLAogICAgYjogdTMyLAp9CgpleHRlcm4gIkMiIHsKICAgIGZuIGZvbyhzOiBTb21lU3RydWN0KTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApleHRlcm4gIkMiIHsKICAgIGZuIGZvbyhhOiAodTMyLCB1MzIpKTsgLy8gb2shCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPBAABAI8EiwEAyR8mAACQAgACBwCRAgEAAwDtAg4AAI8CAgUBBFNvbWUBAQC0CQABkAIAAwDtAg4AAo8CAAEDANgCJAAAjgIBAQC0CQACigEA2QISAAC0CQUBBUUwMTMwAAEfBQABAAUDANgCJAAAjgIBAQG5CQABjwIAjQEA+B8mAACVAgAAAo0BAPgfJgAAtAkFAasCVGhlIGBtYWluYCBmdW5jdGlvbiB3YXMgZGVmaW5lZCB3aXRoIGdlbmVyaWMgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzEKZm4gbWFpbjxUPigpIHsgLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gaGF2ZSBnZW5lcmljIHBhcmFtZXRlcnMKfQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGBtYWluYCBmdW5jdGlvbiB3aXRoIGdlbmVyaWMgcGFyYW1ldGVycy4KSXQgbXVzdCBub3QgdGFrZSBhbnkgYXJndW1lbnRzLgoABf///////////wH///////////8B////////////Af///////////wH///////8BqwIAAQCrAo0BAPgfJgAAlAIAAgcAlQIBAAMA7QIOAACTAgIFAQRTb21lAQEAtAkAAZQCAAMA7QIOAAKTAgABAwDYAiQAAJICAQEAtAkAAowBANkCEgAAtAkFAQVFMDEzMQABHwUAAQAFAwDYAiQAAJICAQEBuQkAAZMCAI8BAKcgJgAAmQIAAAKPAQCnICYAALQJBQGRBUEgZnVuY3Rpb24gd2l0aCB0aGUgYHN0YXJ0YCBhdHRyaWJ1dGUgd2FzIGRlY2xhcmVkIHdpdGggdHlwZSBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMgojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGY8VD4oKSB7fQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWNsYXJlIHR5cGUgcGFyYW1ldGVycyBvbiBhIGZ1bmN0aW9uIHRoYXQgaGFzIHRoZSBgc3RhcnRgCmF0dHJpYnV0ZS4gU3VjaCBhIGZ1bmN0aW9uIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIHR5cGUgc2lnbmF0dXJlIChmb3IgbW9yZQppbmZvcm1hdGlvbiwgdmlldyBbdGhlIHVuc3RhYmxlIGJvb2tdWzFdKToKClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2xhbmctaXRlbXMuaHRtbCN3cml0aW5nLWFuLWV4ZWN1dGFibGUtd2l0aG91dC1zdGRsaWIKCmBgYAojIGxldCBfOgpmbihpc2l6ZSwgKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemU7CmBgYAoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIG15X3N0YXJ0KGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7CiAgICAwCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B5EFAAEAkQWPAQCnICYAAJgCAAIHAJkCAQADAO0CDgAAlwICBQEEU29tZQEBALQJAAGYAgADAO0CDgAClwIAAQMA2AIkAACWAgEBALQJAAKOAQDZAhIAALQJBQEFRTAxMzIAAR8FAAEABQMA2AIkAACWAgEBAbkJAAGXAgCRAQDWICYAAJ0CAAACkQEA1iAmAAC0CQUBpgZVbnNhZmUgY29kZSB3YXMgdXNlZCBvdXRzaWRlIG9mIGFuIHVuc2FmZSBmdW5jdGlvbiBvciBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzMKdW5zYWZlIGZuIGYoKSB7IHJldHVybjsgfSAvLyBUaGlzIGlzIHRoZSB1bnNhZmUgY29kZQoKZm4gbWFpbigpIHsKICAgIGYoKTsgLy8gZXJyb3I6IGNhbGwgdG8gdW5zYWZlIGZ1bmN0aW9uIHJlcXVpcmVzIHVuc2FmZSBmdW5jdGlvbiBvciBibG9jawp9CmBgYAoKVXNpbmcgdW5zYWZlIGZ1bmN0aW9uYWxpdHkgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFuZCBkaXNhbGxvd2VkIGJ5IHNhZmV0eQpjaGVja3MuIEV4YW1wbGVzOgoKKiBEZXJlZmVyZW5jaW5nIHJhdyBwb2ludGVycwoqIENhbGxpbmcgZnVuY3Rpb25zIHZpYSBGRkkKKiBDYWxsaW5nIGZ1bmN0aW9ucyBtYXJrZWQgdW5zYWZlCgpUaGVzZSBzYWZldHkgY2hlY2tzIGNhbiBiZSByZWxheGVkIGZvciBhIHNlY3Rpb24gb2YgdGhlIGNvZGUgYnkgd3JhcHBpbmcgdGhlCnVuc2FmZSBpbnN0cnVjdGlvbnMgd2l0aCBhbiBgdW5zYWZlYCBibG9jay4gRm9yIGluc3RhbmNlOgoKYGBgCnVuc2FmZSBmbiBmKCkgeyByZXR1cm47IH0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyBmKCk7IH0gLy8gb2shCn0KYGBgCgpTZWUgdGhlIFt1bnNhZmUgc2VjdGlvbl1bdW5zYWZlLXNlY3Rpb25dIG9mIHRoZSBCb29rIGZvciBtb3JlIGRldGFpbHMuCgpbdW5zYWZlLXNlY3Rpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wMS11bnNhZmUtcnVzdC5odG1sCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8HpgYAAQCmBpEBANYgJgAAnAIAAgcAnQIBAAMA7QIOAACbAgIFAQRTb21lAQEAtAkAAZwCAAMA7QIOAAKbAgABAwDYAiQAAJoCAQEAtAkAApABANkCEgAAtAkFAQVFMDEzMwABHwUAAQAFAwDYAiQAAJoCAQEBuQkAAZsCAJMBAIUhJgAAoQIAAAKTAQCFISYAALQJBQGOAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCk1vcmUgdGhhbiBvbmUgYG1haW5gIGZ1bmN0aW9uIHdhcyBmb3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gbWFpbigpIHsKICAgIC8vIC4uLgp9CgovLyAuLi4KCmZuIG1haW4oKSB7IC8vIGVycm9yIQogICAgLy8gLi4uCn0KYGBgCgpBIGJpbmFyeSBjYW4gb25seSBoYXZlIG9uZSBlbnRyeSBwb2ludCwgYW5kIGJ5IGRlZmF1bHQgdGhhdCBlbnRyeSBwb2ludCBpcyB0aGUKYG1haW4oKWAgZnVuY3Rpb24uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiwgcGxlYXNlCnJlbmFtZSBvbmUgb2YgdGhlbS4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44DAAEAjgOTAQCFISYAAKACAAIHAKECAQADAO0CDgAAnwICBQEEU29tZQEBALQJAAGgAgADAO0CDgACnwIAAQMA2AIkAACeAgEBALQJAAKSAQDZAhIAALQJBQEFRTAxMzYAAR8FAAEABQMA2AIkAACeAgEBAbkJAAGfAgCVAQC0ISYAAKUCAAAClQEAtCEmAAC0CQUBngQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZCB3aXRoIHRoZSBgI1ttYWluXWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKG1haW4pXQoKI1ttYWluXQpmbiBmb28oKSB7fQoKI1ttYWluXQpmbiBmKCkge30gLy8gZXJyb3I6IG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIGEgYCNbbWFpbl1gIGF0dHJpYnV0ZQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvdW5kIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIHRoZQpgI1ttYWluXWAgYXR0cmlidXRlLiBUaGlzIGlzIGFuIGVycm9yIGJlY2F1c2UgdGhlcmUgbXVzdCBiZSBhIHVuaXF1ZSBlbnRyeQpwb2ludCBpbnRvIGEgUnVzdCBwcm9ncmFtLiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUobWFpbildCgojW21haW5dCmZuIGYoKSB7fSAvLyBvayEKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A54EAAEAngSVAQC0ISYAAKQCAAIHAKUCAQADAO0CDgAAowICBQEEU29tZQEBALQJAAGkAgADAO0CDgACowIAAQMA2AIkAACiAgEBALQJAAKUAQDZAhIAALQJBQEFRTAxMzcAAR8FAAEABQMA2AIkAACiAgEBAbkJAAGjAgCXAQDjISYAAKkCAAAClwEA4yEmAAC0CQUB0wRNb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZCB3aXRoIHRoZSBgI1tzdGFydF1gIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzgKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBmb28oYXJnYzogaXNpemUsIGFyZ3Y6ICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplIHt9CgojW3N0YXJ0XQpmbiBmKGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7fQovLyBlcnJvcjogbXVsdGlwbGUgJ3N0YXJ0JyBmdW5jdGlvbnMKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBmb3VuZCBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCB0aGUKYCNbc3RhcnRdYCBhdHRyaWJ1dGUuIFRoaXMgaXMgYW4gZXJyb3IgYmVjYXVzZSB0aGVyZSBtdXN0IGJlIGEgdW5pcXVlIGVudHJ5CnBvaW50IGludG8gYSBSdXN0IHByb2dyYW0uIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBmb28oYXJnYzogaXNpemUsIGFyZ3Y6ICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplIHsgMCB9IC8vIG9rIQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x/TBAABANMElwEA4yEmAACoAgACBwCpAgEAAwDtAg4AAKcCAgUBBFNvbWUBAQC0CQABqAIAAwDtAg4AAqcCAAEDANgCJAAApgIBAQC0CQAClgEA2QISAAC0CQUBBUUwMTM4AAEfBQABAAUDANgCJAAApgIBAQG5CQABpwIAmQEAkiImAACtAgAAApkBAJIiJgAAtAkFAeYUIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlcmUgYXJlIHZhcmlvdXMgcmVzdHJpY3Rpb25zIG9uIHRyYW5zbXV0aW5nIGJldHdlZW4gdHlwZXMgaW4gUnVzdDsgZm9yIGV4YW1wbGUKdHlwZXMgYmVpbmcgdHJhbnNtdXRlZCBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZS4gVG8gYXBwbHkgYWxsIHRoZXNlIHJlc3RyaWN0aW9ucywKdGhlIGNvbXBpbGVyIG11c3Qga25vdyB0aGUgZXhhY3QgdHlwZXMgdGhhdCBtYXkgYmUgdHJhbnNtdXRlZC4gV2hlbiB0eXBlCnBhcmFtZXRlcnMgYXJlIGludm9sdmVkLCB0aGlzIGNhbm5vdCBhbHdheXMgYmUgZG9uZS4KClNvLCBmb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyBub3QgYWxsb3dlZDoKCmBgYAp1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKCnN0cnVjdCBGb288VD4oVmVjPFQ+KTsKCmZuIGZvbzxUPih4OiBWZWM8VD4pIHsKICAgIC8vIHdlIGFyZSB0cmFuc211dGluZyBiZXR3ZWVuIFZlYzxUPiBhbmQgRm9vPEY+IGhlcmUKICAgIGxldCB5OiBGb288VD4gPSB1bnNhZmUgeyB0cmFuc211dGUoeCkgfTsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHkKfQpgYGAKCkluIHRoaXMgc3BlY2lmaWMgY2FzZSB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgdHJhbnNtdXRlIGlzIGhhcm1sZXNzIChidXQKdGhpcyBpcyBub3QgZ3VhcmFudGVlZCBieSBSdXN0KS4gSG93ZXZlciwgd2hlbiBhbGlnbm1lbnQgYW5kIGVudW0gb3B0aW1pemF0aW9ucwpjb21lIGludG8gdGhlIHBpY3R1cmUsIGl0J3MgcXVpdGUgbGlrZWx5IHRoYXQgdGhlIHNpemVzIG1heSBvciBtYXkgbm90IG1hdGNoCndpdGggZGlmZmVyZW50IHR5cGUgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbnMuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoZWNrIHRoaXMgZm9yCl9hbGxfIHBvc3NpYmxlIHR5cGVzLCBzbyBgdHJhbnNtdXRlKClgIHNpbXBseSBvbmx5IGFjY2VwdHMgdHlwZXMgd2l0aG91dCBhbnkKdW5zdWJzdGl0dXRlZCB0eXBlIHBhcmFtZXRlcnMuCgpJZiB5b3UgbmVlZCB0aGlzLCB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgeW91J3JlIGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gS2VlcCBpbgptaW5kIHRoYXQgUnVzdCBkb2Vzbid0IGd1YXJhbnRlZSBtdWNoIGFib3V0IHRoZSBsYXlvdXQgb2YgZGlmZmVyZW50IHN0cnVjdHMKKGV2ZW4gdHdvIHN0cnVjdHMgd2l0aCBpZGVudGljYWwgZGVjbGFyYXRpb25zIG1heSBoYXZlIGRpZmZlcmVudCBsYXlvdXRzKS4gSWYKdGhlcmUgaXMgYSBzb2x1dGlvbiB0aGF0IGF2b2lkcyB0aGUgdHJhbnNtdXRlIGVudGlyZWx5LCB0cnkgaXQgaW5zdGVhZC4KCklmIGl0J3MgcG9zc2libGUsIGhhbmQtbW9ub21vcnBoaXplIHRoZSBjb2RlIGJ5IHdyaXRpbmcgdGhlIGZ1bmN0aW9uIGZvciBlYWNoCnBvc3NpYmxlIHR5cGUgc3Vic3RpdHV0aW9uLiBJdCdzIHBvc3NpYmxlIHRvIHVzZSB0cmFpdHMgdG8gZG8gdGhpcyBjbGVhbmx5LApmb3IgZXhhbXBsZToKCmBgYAp1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKCnN0cnVjdCBGb288VD4oVmVjPFQ+KTsKCnRyYWl0IE15VHJhbnNtdXRhYmxlVHlwZTogU2l6ZWQgewogICAgZm4gdHJhbnNtdXRlKF86IFZlYzxTZWxmPikgLT4gRm9vPFNlbGY+Owp9CgppbXBsIE15VHJhbnNtdXRhYmxlVHlwZSBmb3IgdTggewogICAgZm4gdHJhbnNtdXRlKHg6IFZlYzx1OD4pIC0+IEZvbzx1OD4gewogICAgICAgIHVuc2FmZSB7IHRyYW5zbXV0ZSh4KSB9CiAgICB9Cn0KCmltcGwgTXlUcmFuc211dGFibGVUeXBlIGZvciBTdHJpbmcgewogICAgZm4gdHJhbnNtdXRlKHg6IFZlYzxTdHJpbmc+KSAtPiBGb288U3RyaW5nPiB7CiAgICAgICAgdW5zYWZlIHsgdHJhbnNtdXRlKHgpIH0KICAgIH0KfQoKLy8gLi4uIG1vcmUgaW1wbHMgZm9yIHRoZSB0eXBlcyB5b3UgaW50ZW5kIHRvIHRyYW5zbXV0ZQoKZm4gZm9vPFQ6IE15VHJhbnNtdXRhYmxlVHlwZT4oeDogVmVjPFQ+KSB7CiAgICBsZXQgeTogRm9vPFQ+ID0gPFQgYXMgTXlUcmFuc211dGFibGVUeXBlPjo6dHJhbnNtdXRlKHgpOwogICAgLy8gZG8gc29tZXRoaW5nIHdpdGggeQp9CmBgYAoKRWFjaCBpbXBsIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBzaXplIG1hdGNoIGluIHRoZSB0cmFuc211dGUgYXMgdXN1YWwsIGFuZCBzaW5jZQp0aGVyZSBhcmUgbm8gdW5ib3VuZCB0eXBlIHBhcmFtZXRlcnMgaW52b2x2ZWQsIHRoaXMgc2hvdWxkIGNvbXBpbGUgdW5sZXNzIHRoZXJlCmlzIGEgc2l6ZSBtaXNtYXRjaCBpbiBvbmUgb2YgdGhlIGltcGxzLgoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtYW51YWxseSB0cmFuc211dGU6CgpgYGAKIyB1c2Ugc3RkOjpwdHI7CiMgbGV0IHYgPSBTb21lKCJ2YWx1ZSIpOwojIHR5cGUgU29tZVR5cGUgPSAmJ3N0YXRpYyBbdThdOwp1bnNhZmUgewogICAgcHRyOjpyZWFkKCZ2IGFzICpjb25zdCBfIGFzICpjb25zdCBTb21lVHlwZSkgLy8gYHZgIHRyYW5zbXV0ZWQgdG8gYFNvbWVUeXBlYAp9CiMgOwpgYGAKCk5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG1vdmUgYHZgICh1bmxpa2UgYHRyYW5zbXV0ZWApLCBhbmQgbWF5IG5lZWQgYQpjYWxsIHRvIGBtZW06OmZvcmdldCh2KWAgaW4gY2FzZSB5b3Ugd2FudCB0byBhdm9pZCBkZXN0cnVjdG9ycyBiZWluZyBjYWxsZWQuCgAq////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmFAABAOYUmQEAkiImAACsAgACBwCtAgEAAwDtAg4AAKsCAgUBBFNvbWUBAQC0CQABrAIAAwDtAg4AAqsCAAEDANgCJAAAqgIBAQC0CQACmAEA2QISAAC0CQUBBUUwMTM5AAEfBQABAAUDANgCJAAAqgIBAQG5CQABqwIAmwEAwSImAACxAgAAApsBAMEiJgAAtAkFAY8FQSBsYW5nIGl0ZW0gd2FzIHJlZGVmaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNTIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJvd25lZF9ib3giXQpzdHJ1Y3QgRm9vPFQ+KFQpOyAvLyBlcnJvcjogZHVwbGljYXRlIGxhbmcgaXRlbSBmb3VuZDogYG93bmVkX2JveGAKYGBgCgpMYW5nIGl0ZW1zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBVbmxlc3MgeW91IGFyZQp3cml0aW5nIGEgZnJlZS1zdGFuZGluZyBhcHBsaWNhdGlvbiAoZS5nLiwgYSBrZXJuZWwpLCB5b3UgZG8gbm90IG5lZWQgdG8gcHJvdmlkZQp0aGVtIHlvdXJzZWxmLgoKWW91IGNhbiBidWlsZCBhIGZyZWUtc3RhbmRpbmcgY3JhdGUgYnkgYWRkaW5nIGAjIVtub19zdGRdYCB0byB0aGUgY3JhdGUKYXR0cmlidXRlczoKCmBgYGlnbm9yZSAob25seS1mb3Itc3ludGF4LWhpZ2hsaWdodCkKIyFbbm9fc3RkXQpgYGAKClNlZSBhbHNvIHRoZSBbdW5zdGFibGUgYm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9sYW5nLWl0ZW1zLmh0bWwjd3JpdGluZy1hbi1leGVjdXRhYmxlLXdpdGhvdXQtc3RkbGliCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//AY8FAAEAjwWbAQDBIiYAALACAAIHALECAQADAO0CDgAArwICBQEEU29tZQEBALQJAAGwAgADAO0CDgACrwIAAQMA2AIkAACuAgEBALQJAAKaAQDZAhIAALQJBQEFRTAxNTIAAR8FAAEABQMA2AIkAACuAgEBAbkJAAGvAgCdAQDwIiYAALUCAAACnQEA8CImAAC0CQUBwwYjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbXBvcnRzIChgdXNlYCBzdGF0ZW1lbnRzKSBhcmUgbm90IGFsbG93ZWQgYWZ0ZXIgbm9uLWl0ZW0gc3RhdGVtZW50cywgc3VjaCBhcwp2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYW5kIGV4cHJlc3Npb24gc3RhdGVtZW50cy4KCkhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgZXJyb3I6CgpgYGAKZm4gZigpIHsKICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uIGJlZm9yZSBpbXBvcnQKICAgIGxldCB4ID0gMDsKICAgIHVzZSBzdGQ6OmlvOjpSZWFkOwogICAgLy8gLi4uCn0KYGBgCgpUaGUgc29sdXRpb24gaXMgdG8gZGVjbGFyZSB0aGUgaW1wb3J0cyBhdCB0aGUgdG9wIG9mIHRoZSBibG9jaywgZnVuY3Rpb24sIG9yCmZpbGUuCgpIZXJlIGlzIHRoZSBwcmV2aW91cyBleGFtcGxlIGFnYWluLCB3aXRoIHRoZSBjb3JyZWN0IG9yZGVyOgoKYGBgCmZuIGYoKSB7CiAgICB1c2Ugc3RkOjppbzo6UmVhZDsKICAgIGxldCB4ID0gMDsKICAgIC8vIC4uLgp9CmBgYAoKU2VlIHRoZSBbRGVjbGFyYXRpb24gU3RhdGVtZW50c11bZGVjbGFyYXRpb24tc3RhdGVtZW50c10gc2VjdGlvbiBvZiB0aGUKcmVmZXJlbmNlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgY29uc3RpdHV0ZXMgYW4gaXRlbSBkZWNsYXJhdGlvbgphbmQgd2hhdCBkb2VzIG5vdC4KCltkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2Uvc3RhdGVtZW50cy5odG1sI2RlY2xhcmF0aW9uLXN0YXRlbWVudHMKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB8MGAAEAwwadAQDwIiYAALQCAAIHALUCAQADAO0CDgAAswICBQEEU29tZQEBALQJAAG0AgADAO0CDgACswIAAQMA2AIkAACyAgEBALQJAAKcAQDZAhIAALQJBQEFRTAxNTQAAR8FAAEABQMA2AIkAACyAgEBAbkJAAGzAgCfAQCfIyYAALkCAAACnwEAnyMmAAC0CQUByAZBbiBhc3NvY2lhdGVkIGNvbnN0IGhhcyBiZWVuIHJlZmVyZW5jZWQgaW4gYSBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE1OAplbnVtIEVGb28geyBBLCBCLCBDLCBEIH0KCnRyYWl0IEZvbyB7CiAgICBjb25zdCBYOiBFRm9vOwp9CgpmbiB0ZXN0PEE6IEZvbz4oYXJnOiBFRm9vKSB7CiAgICBtYXRjaCBhcmcgewogICAgICAgIEE6OlggPT4geyAvLyBlcnJvciEKICAgICAgICAgICAgcHJpbnRsbiEoIkE6OlgiKTsKICAgICAgICB9CiAgICB9Cn0KYGBgCgpgY29uc3RgIGFuZCBgc3RhdGljYCBtZWFuIGRpZmZlcmVudCB0aGluZ3MuIEEgYGNvbnN0YCBpcyBhIGNvbXBpbGUtdGltZQpjb25zdGFudCwgYW4gYWxpYXMgZm9yIGEgbGl0ZXJhbCB2YWx1ZS4gVGhpcyBwcm9wZXJ0eSBtZWFucyB5b3UgY2FuIG1hdGNoIGl0CmRpcmVjdGx5IHdpdGhpbiBhIHBhdHRlcm4uCgpUaGUgYHN0YXRpY2Aga2V5d29yZCwgb24gdGhlIG90aGVyIGhhbmQsIGd1YXJhbnRlZXMgYSBmaXhlZCBsb2NhdGlvbiBpbiBtZW1vcnkuClRoaXMgZG9lcyBub3QgYWx3YXlzIG1lYW4gdGhhdCB0aGUgdmFsdWUgaXMgY29uc3RhbnQuIEZvciBleGFtcGxlLCBhIGdsb2JhbAptdXRleCBjYW4gYmUgZGVjbGFyZWQgYHN0YXRpY2AgYXMgd2VsbC4KCklmIHlvdSB3YW50IHRvIG1hdGNoIGFnYWluc3QgYSBgc3RhdGljYCwgY29uc2lkZXIgdXNpbmcgYSBndWFyZCBpbnN0ZWFkOgoKYGBgCnN0YXRpYyBGT1JUWV9UV086IGkzMiA9IDQyOwoKbWF0Y2ggU29tZSg0MikgewogICAgU29tZSh4KSBpZiB4ID09IEZPUlRZX1RXTyA9PiB7fQogICAgXyA9PiB7fQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AcgGAAEAyAafAQCfIyYAALgCAAIHALkCAQADAO0CDgAAtwICBQEEU29tZQEBALQJAAG4AgADAO0CDgACtwIAAQMA2AIkAAC2AgEBALQJAAKeAQDZAhIAALQJBQEFRTAxNTgAAR8FAAEABQMA2AIkAAC2AgEBAbkJAAG3AgChAQDOIyYAAL0CAAACoQEAziMmAAC0CQUBywZBIHZhbHVlIHdhcyBtb3ZlZCB3aG9zZSBzaXplIHdhcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE2MQojIVtmZWF0dXJlKGJveF9zeW50YXgpXQp0cmFpdCBCYXIgewogICAgZm4gZihzZWxmKTsKfQoKaW1wbCBCYXIgZm9yIGkzMiB7CiAgICBmbiBmKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgYjogQm94PGR5biBCYXI+ID0gYm94ICgwIGFzIGkzMik7CiAgICBiLmYoKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgbW92ZSBhIHZhbHVlIG9mIHR5cGUgZHluIEJhcjogdGhlIHNpemUgb2YgZHluIEJhciBjYW5ub3QKICAgIC8vICAgICAgICBiZSBzdGF0aWNhbGx5IGRldGVybWluZWQKfQpgYGAKCkluIFJ1c3QsIHlvdSBjYW4gb25seSBtb3ZlIGEgdmFsdWUgd2hlbiBpdHMgc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCgpUbyB3b3JrIGFyb3VuZCB0aGlzIHJlc3RyaWN0aW9uLCBjb25zaWRlciAiaGlkaW5nIiB0aGUgdmFsdWUgYmVoaW5kIGEgcmVmZXJlbmNlOgplaXRoZXIgYCZ4YCBvciBgJm11dCB4YC4gU2luY2UgYSByZWZlcmVuY2UgaGFzIGEgZml4ZWQgc2l6ZSwgdGhpcyBsZXRzIHlvdSBtb3ZlCml0IGFyb3VuZCBhcyB1c3VhbC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGJveF9zeW50YXgpXQoKdHJhaXQgQmFyIHsKICAgIGZuIGYoJnNlbGYpOwp9CgppbXBsIEJhciBmb3IgaTMyIHsKICAgIGZuIGYoJnNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgYjogQm94PGR5biBCYXI+ID0gYm94ICgwIGFzIGkzMik7CiAgICBiLmYoKTsKICAgIC8vIG9rIQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/D8sGAAEAywahAQDOIyYAALwCAAIHAL0CAQADAO0CDgAAuwICBQEEU29tZQEBALQJAAG8AgADAO0CDgACuwIAAQMA2AIkAAC6AgEBALQJAAKgAQDZAhIAALQJBQEFRTAxNjEAAR8FAAEABQMA2AIkAAC6AgEBAbkJAAG7AgCjAQD9IyYAAMECAAACowEA/SMmAAC0CQUB3wQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBgaWYgbGV0YCBwYXR0ZXJuIGF0dGVtcHRzIHRvIG1hdGNoIHRoZSBwYXR0ZXJuLCBhbmQgZW50ZXJzIHRoZSBib2R5IGlmIHRoZQptYXRjaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlICh3aGVuIGl0IGNhbm5vdCBmYWlsIHRvCm1hdGNoKSwgdXNlIGEgcmVndWxhciBgbGV0YC1iaW5kaW5nIGluc3RlYWQuIEZvciBpbnN0YW5jZToKCmBgYApzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKLy8gVGhpcyBmYWlscyB0byBjb21waWxlIGJlY2F1c2UgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlLgppZiBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnIgewogICAgLy8gVGhpcyBib2R5IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLgogICAgLy8gLi4uCn0KYGBgCgpUcnkgdGhpcyBpbnN0ZWFkOgoKYGBgCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7CgpsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnI7CnByaW50bG4hKCJ7fSIsIHgpOwpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////B98EAAEA3wSjAQD9IyYAAMACAAIHAMECAQADAO0CDgAAvwICBQEEU29tZQEBALQJAAHAAgADAO0CDgACvwIAAQMA2AIkAAC+AgEBALQJAAKiAQDZAhIAALQJBQEFRTAxNjIAAR8FAAEABQMA2AIkAAC+AgEBAbkJAAG/AgClAQCsJCYAAMUCAAACpQEArCQmAAC0CQUB0gRTb21ldGhpbmcgd2hpY2ggaXMgbmVpdGhlciBhIHR1cGxlIHN0cnVjdCBub3IgYSB0dXBsZSB2YXJpYW50IHdhcyB1c2VkIGFzIGEKcGF0dGVybi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNjQKZW51bSBBIHsKICAgIEIsCiAgICBDLAp9CgppbXBsIEEgewogICAgZm4gbmV3KCkge30KfQoKZm4gYmFyKGZvbzogQSkgewogICAgbWF0Y2ggZm9vIHsKICAgICAgICBBOjpuZXcoKSA9PiAoKSwgLy8gZXJyb3IhCiAgICAgICAgXyA9PiB7fQogICAgfQp9CmBgYAoKVGhpcyBlcnJvciBtZWFucyB0aGF0IGFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbWF0Y2ggc29tZXRoaW5nIHdoaWNoIGlzIG5laXRoZXIgYQp0dXBsZSBzdHJ1Y3Qgbm9yIGEgdHVwbGUgdmFyaWFudC4gT25seSB0aGVzZSB0d28gZWxlbWVudHMgYXJlIGFsbG93ZWQgYXMgYQpwYXR0ZXJuOgoKYGBgCmVudW0gQSB7CiAgICBCLAogICAgQywKfQoKaW1wbCBBIHsKICAgIGZuIG5ldygpIHt9Cn0KCmZuIGJhcihmb286IEEpIHsKICAgIG1hdGNoIGZvbyB7CiAgICAgICAgQTo6QiA9PiAoKSwgLy8gb2shCiAgICAgICAgXyA9PiB7fQogICAgfQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D9IEAAEA0gSlAQCsJCYAAMQCAAIHAMUCAQADAO0CDgAAwwICBQEEU29tZQEBALQJAAHEAgADAO0CDgACwwIAAQMA2AIkAADCAgEBALQJAAKkAQDZAhIAALQJBQEFRTAxNjQAAR8FAAEABQMA2AIkAADCAgEBAbkJAAHDAgCnAQDbJCYAAMkCAAACpwEA2yQmAAC0CQUB2wQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIGB3aGlsZSBsZXRgIHBhdHRlcm4gYXR0ZW1wdHMgdG8gbWF0Y2ggdGhlIHBhdHRlcm4sIGFuZCBlbnRlcnMgdGhlIGJvZHkgaWYgdGhlCm1hdGNoIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUgKHdoZW4gaXQgY2Fubm90IGZhaWwgdG8KbWF0Y2gpLCB1c2UgYSByZWd1bGFyIGBsZXRgLWJpbmRpbmcgaW5zaWRlIGEgYGxvb3BgIGluc3RlYWQuIEZvciBpbnN0YW5jZToKCmBgYG5vX3J1bgpzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKLy8gVGhpcyBmYWlscyB0byBjb21waWxlIGJlY2F1c2UgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlLgp3aGlsZSBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnIgewogICAgLy8gLi4uCn0KYGBgCgpUcnkgdGhpcyBpbnN0ZWFkOgoKYGBgbm9fcnVuCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7Cgpsb29wIHsKICAgIGxldCBJcnJlZnV0YWJsZSh4KSA9IGlycjsKICAgIC8vIC4uLgp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z/bBAABANsEpwEA2yQmAADIAgACBwDJAgEAAwDtAg4AAMcCAgUBBFNvbWUBAQC0CQAByAIAAwDtAg4AAscCAAEDANgCJAAAxgIBAQC0CQACpgEA2QISAAC0CQUBBUUwMTY1AAEfBQABAAUDANgCJAAAxgIBAQG5CQABxwIAqQEAiiUmAADNAgAAAqkBAIolJgAAtAkFAdwIQSBwYXR0ZXJuIGJpbmRpbmcgaXMgdXNpbmcgdGhlIHNhbWUgbmFtZSBhcyBvbmUgb2YgdGhlIHZhcmlhbnRzIG9mIGEgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNzAKIyAjIVtkZW55KHdhcm5pbmdzKV0KZW51bSBNZXRob2QgewogICAgR0VULAogICAgUE9TVCwKfQoKZm4gaXNfZW1wdHkoczogTWV0aG9kKSAtPiBib29sIHsKICAgIG1hdGNoIHMgewogICAgICAgIEdFVCA9PiB0cnVlLAogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYAoKRW51bSB2YXJpYW50cyBhcmUgcXVhbGlmaWVkIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCBnaXZlbiB0aGlzIHR5cGU6CgpgYGAKZW51bSBNZXRob2QgewogICAgR0VULAogICAgUE9TVCwKfQpgYGAKCllvdSB3b3VsZCBtYXRjaCBpdCB1c2luZzoKCmBgYAplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CgpsZXQgbSA9IE1ldGhvZDo6R0VUOwoKbWF0Y2ggbSB7CiAgICBNZXRob2Q6OkdFVCA9PiB7fSwKICAgIE1ldGhvZDo6UE9TVCA9PiB7fSwKfQpgYGAKCklmIHlvdSBkb24ndCBxdWFsaWZ5IHRoZSBuYW1lcywgdGhlIGNvZGUgd2lsbCBiaW5kIG5ldyB2YXJpYWJsZXMgbmFtZWQgIkdFVCIgYW5kCiJQT1NUIiBpbnN0ZWFkLiBUaGlzIGJlaGF2aW9yIGlzIGxpa2VseSBub3Qgd2hhdCB5b3Ugd2FudCwgc28gYHJ1c3RjYCB3YXJucyB3aGVuCnRoYXQgaGFwcGVucy4KClF1YWxpZmllZCBuYW1lcyBhcmUgZ29vZCBwcmFjdGljZSwgYW5kIG1vc3QgY29kZSB3b3JrcyB3ZWxsIHdpdGggdGhlbS4gQnV0IGlmCnlvdSBwcmVmZXIgdGhlbSB1bnF1YWxpZmllZCwgeW91IGNhbiBpbXBvcnQgdGhlIHZhcmlhbnRzIGludG8gc2NvcGU6CgpgYGAKdXNlIE1ldGhvZDo6KjsKZW51bSBNZXRob2QgeyBHRVQsIFBPU1QgfQojIGZuIG1haW4oKSB7fQpgYGAKCklmIHlvdSB3YW50IG90aGVycyB0byBiZSBhYmxlIHRvIGltcG9ydCB2YXJpYW50cyBmcm9tIHlvdXIgbW9kdWxlIGRpcmVjdGx5LCB1c2UKYHB1YiB1c2VgOgoKYGBgCnB1YiB1c2UgTWV0aG9kOjoqOwpwdWIgZW51bSBNZXRob2QgeyBHRVQsIFBPU1QgfQojIGZuIG1haW4oKSB7fQpgYGAKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3/cCAABANwIqQEAiiUmAADMAgACBwDNAgEAAwDtAg4AAMsCAgUBBFNvbWUBAQC0CQABzAIAAwDtAg4AAssCAAEDANgCJAAAygIBAQC0CQACqAEA2QISAAC0CQUBBUUwMTcwAAEfBQABAAUDANgCJAAAygIBAQG5CQABywIAqwEAuSUmAADRAgAAAqsBALklJgAAtAkFAcgEVGhlIGArYCB0eXBlIG9wZXJhdG9yIHdhcyB1c2VkIGluIGFuIGFtYmlndW91cyBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE3OAp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8J2E+IHsKICAgIHg6ICYnYSBGb28gKyAnYSwgICAgIC8vIGVycm9yIQogICAgeTogJidhIG11dCBGb28gKyAnYSwgLy8gZXJyb3IhCiAgICB6OiBmbigpIC0+IEZvbyArICdhLCAvLyBlcnJvciEKfQpgYGAKCkluIHR5cGVzLCB0aGUgYCtgIHR5cGUgb3BlcmF0b3IgaGFzIGxvdyBwcmVjZWRlbmNlLCBzbyBpdCBpcyBvZnRlbiBuZWNlc3NhcnkKdG8gdXNlIHBhcmVudGhlc2VzOgoKYGBgCnRyYWl0IEZvbyB7fQoKc3RydWN0IEJhcjwnYT4gewogICAgeDogJidhIChGb28gKyAnYSksICAgICAvLyBvayEKICAgIHk6ICYnYSBtdXQgKEZvbyArICdhKSwgLy8gb2shCiAgICB6OiBmbigpIC0+IChGb28gKyAnYSksIC8vIG9rIQp9CmBgYAoKTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiBbUkZDIDQzOF0uCgpbUkZDIDQzOF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9wdWxsLzQzOAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8ByAQAAQDIBKsBALklJgAA0AIAAgcA0QIBAAMA7QIOAADPAgIFAQRTb21lAQEAtAkAAdACAAMA7QIOAALPAgABAwDYAiQAAM4CAQEAtAkAAqoBANkCEgAAtAkFAQVFMDE3OAABHwUAAQAFAwDYAiQAAM4CAQEBuQkAAc8CAK0BAOglJgAA1QIAAAKtAQDoJSYAALQJBQHYBk1hbnVhbCBpbXBsZW1ldGF0aW9uIG9mIGEgYEZuKmAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTgzCnN0cnVjdCBNeUNsb3N1cmUgewogICAgZm9vOiBpMzIKfQoKaW1wbCBGbk9uY2U8KCk+IGZvciBNeUNsb3N1cmUgeyAgLy8gZXJyb3IKICAgIHR5cGUgT3V0cHV0ID0gKCk7CiAgICBleHRlcm4gInJ1c3QtY2FsbCIgZm4gY2FsbF9vbmNlKHNlbGYsIGFyZ3M6ICgpKSAtPiBTZWxmOjpPdXRwdXQgewogICAgICAgIHByaW50bG4hKCJ7fSIsIHNlbGYuZm9vKTsKICAgIH0KfQpgYGAKCk1hbnVhbGx5IGltcGxlbWVudGluZyBgRm5gLCBgRm5NdXRgIG9yIGBGbk9uY2VgIGlzIHVuc3RhYmxlCmFuZCByZXF1aXJlcyBgIyFbZmVhdHVyZShmbl90cmFpdHMsIHVuYm94ZWRfY2xvc3VyZXMpXWAuCgpgYGAKIyFbZmVhdHVyZShmbl90cmFpdHMsIHVuYm94ZWRfY2xvc3VyZXMpXQoKc3RydWN0IE15Q2xvc3VyZSB7CiAgICBmb286IGkzMgp9CgppbXBsIEZuT25jZTwoKT4gZm9yIE15Q2xvc3VyZSB7ICAvLyBvayEKICAgIHR5cGUgT3V0cHV0ID0gKCk7CiAgICBleHRlcm4gInJ1c3QtY2FsbCIgZm4gY2FsbF9vbmNlKHNlbGYsIGFyZ3M6ICgpKSAtPiBTZWxmOjpPdXRwdXQgewogICAgICAgIHByaW50bG4hKCJ7fSIsIHNlbGYuZm9vKTsKICAgIH0KfQpgYGAKClRoZSBhcmd1bWVtZW50cyBtdXN0IGJlIGEgdHVwbGUgcmVwcmVzZW50aW5nIHRoZSBhcmd1bWVudCBsaXN0LgpGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFt0cmFja2luZyBpc3N1ZV1baXNzMjk2MjVdOgoKW2lzczI5NjI1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8yOTYyNQoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8H2AYAAQDYBq0BAOglJgAA1AIAAgcA1QIBAAMA7QIOAADTAgIFAQRTb21lAQEAtAkAAdQCAAMA7QIOAALTAgABAwDYAiQAANICAQEAtAkAAqwBANkCEgAAtAkFAQVFMDE4MwABHwUAAQAFAwDYAiQAANICAQEBuQkAAdMCAK8BAJcmJgAA2QIAAAKvAQCXJiYAALQJBQGnBFRoZSBgQ29weWAgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGEgdHlwZSB3aXRoIGEgYERyb3BgIGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4NAojW2Rlcml2ZShDb3B5KV0Kc3RydWN0IEZvbzsgLy8gZXJyb3IhCgppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgfQp9CmBgYAoKRXhwbGljaXRseSBpbXBsZW1lbnRpbmcgYm90aCBgRHJvcGAgYW5kIGBDb3B5YCB0cmFpdCBvbiBhIHR5cGUgaXMgY3VycmVudGx5CmRpc2FsbG93ZWQuIFRoaXMgZmVhdHVyZSBjYW4gbWFrZSBzb21lIHNlbnNlIGluIHRoZW9yeSwgYnV0IHRoZSBjdXJyZW50CmltcGxlbWVudGF0aW9uIGlzIGluY29ycmVjdCBhbmQgY2FuIGxlYWQgdG8gbWVtb3J5IHVuc2FmZXR5IChzZWUKW2lzc3VlICMyMDEyNl1baXNzMjAxMjZdKSwgc28gaXQgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIG5vdy4KCltpc3MyMDEyNl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMjAxMjYKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cEAAEApwSvAQCXJiYAANgCAAIHANkCAQADAO0CDgAA1wICBQEEU29tZQEBALQJAAHYAgADAO0CDgAC1wIAAQMA2AIkAADWAgEBALQJAAKuAQDZAhIAALQJBQEFRTAxODQAAR8FAAEABQMA2AIkAADWAgEBAbkJAAHXAgCxAQDGJiYAAN0CAAACsQEAxiYmAAC0CQUB1wVBbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIGZvciBhIHRyYWl0IHdhcyBkZWZpbmVkIHRvIGJlIHN0YXRpYywgYnV0IGFuCmltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFpdCBkZWNsYXJlZCB0aGUgc2FtZSBmdW5jdGlvbiB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8KdGFrZSBhIGBzZWxmYCBwYXJhbWV0ZXIpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4NQp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgaW1wbCwgYnV0IG5vdCBpbgogICAgLy8gdGhlIHRyYWl0CiAgICBmbiBmb28oJnNlbGYpIHt9Cn0KYGBgCgpXaGVuIGEgdHlwZSBpbXBsZW1lbnRzIGEgdHJhaXQncyBhc3NvY2lhdGVkIGZ1bmN0aW9uLCBpdCBoYXMgdG8gdXNlIHRoZSBzYW1lCnNpZ25hdHVyZS4gU28gaW4gdGhpcyBjYXNlLCBzaW5jZSBgRm9vOjpmb29gIGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50IGFuZApkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcsIGl0cyBpbXBsZW1lbnRhdGlvbiBvbiBgQmFyYCBzaG91bGQgYmUgdGhlIHNhbWU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fSAvLyBvayEKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wPXBQABANcFsQEAxiYmAADcAgACBwDdAgEAAwDtAg4AANsCAgUBBFNvbWUBAQC0CQAB3AIAAwDtAg4AAtsCAAEDANgCJAAA2gIBAQC0CQACsAEA2QISAAC0CQUBBUUwMTg1AAEfBQABAAUDANgCJAAA2gIBAQG5CQAB2wIAswEA9SYmAADhAgAAArMBAPUmJgAAtAkFAd8FQW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8gdGFrZSBhCmBzZWxmYCBwYXJhbWV0ZXIpLCBidXQgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYWl0IGRlY2xhcmVkIHRoZSBzYW1lIGZ1bmN0aW9uCnRvIGJlIHN0YXRpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgdHJhaXQsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSBpbXBsCiAgICBmbiBmb28oKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCB0YWtlcyBgc2VsZmAgYXMgYXJndW1lbnQgYW5kCmRvZXMgbm90IHJldHVybiBhbnl0aGluZywgaXRzIGltcGxlbWVudGF0aW9uIG9uIGBCYXJgIHNob3VsZCBiZSB0aGUgc2FtZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSB7fSAvLyBvayEKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8H3wUAAQDfBbMBAPUmJgAA4AIAAgcA4QIBAAMA7QIOAADfAgIFAQRTb21lAQEAtAkAAeACAAMA7QIOAALfAgABAwDYAiQAAN4CAQEAtAkAArIBANkCEgAAtAkFAQVFMDE4NgABHwUAAQAFAwDYAiQAAN4CAQEBuQkAAd8CALUBAKQnJgAA5QIAAAK1AQCkJyYAALQJBQGIBEFuIGFzc29jaWF0ZWQgdHlwZSB3YXNuJ3Qgc3BlY2lmaWVkIGZvciBhIHRyYWl0IG9iamVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxOTEKdHJhaXQgVHJhaXQgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVHJhaXQ7IC8vIGVycm9yOiB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgdHlwZSBgQmFyYCAoZnJvbQogICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIHRyYWl0IGBUcmFpdGApIG11c3QgYmUgc3BlY2lmaWVkCmBgYAoKVHJhaXQgb2JqZWN0cyBuZWVkIHRvIGhhdmUgYWxsIGFzc29jaWF0ZWQgdHlwZXMgc3BlY2lmaWVkLiBQbGVhc2UgdmVyaWZ5IHRoYXQKYWxsIGFzc29jaWF0ZWQgdHlwZXMgb2YgdGhlIHRyYWl0IHdlcmUgc3BlY2lmaWVkIGFuZCB0aGUgY29ycmVjdCB0cmFpdCB3YXMgdXNlZC4KRXhhbXBsZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUcmFpdDxCYXI9aTMyPjsgLy8gb2shCmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wGIBAABAIgEtQEApCcmAADkAgACBwDlAgEAAwDtAg4AAOMCAgUBBFNvbWUBAQC0CQAB5AIAAwDtAg4AAuMCAAEDANgCJAAA4gIBAQC0CQACtAEA2QISAAC0CQUBBUUwMTkxAAEfBQABAAUDANgCJAAA4gIBAQG5CQAB4wIAtwEA0ycmAADpAgAAArcBANMnJgAAtAkFAb8IIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKYHdoZXJlYCBjbGF1c2VzIG11c3QgdXNlIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzOiBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHVzZQp0aGVtIG90aGVyd2lzZS4gQW4gZXhhbXBsZSBjYXVzaW5nIHRoaXMgZXJyb3I6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCiNbZGVyaXZlKENvcHksQ2xvbmUpXQpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBXcmFwcGVkOiBUCn0KCmltcGwgRm9vIGZvciBXcmFwcGVyPHUzMj4gd2hlcmUgV3JhcHBlcjx1MzI+OiBDbG9uZSB7CiAgICBmbiBiYXIoJnNlbGYpIHsgfQp9CmBgYAoKVGhpcyB1c2Ugb2YgYSBgd2hlcmVgIGNsYXVzZSBpcyBzdHJhbmdlIC0gYSBtb3JlIGNvbW1vbiB1c2FnZSB3b3VsZCBsb29rCnNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCiNbZGVyaXZlKENvcHksQ2xvbmUpXQpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBXcmFwcGVkOiBUCn0KaW1wbCA8VD4gRm9vIGZvciBXcmFwcGVyPFQ+IHdoZXJlIFdyYXBwZXI8VD46IENsb25lIHsKICAgIGZuIGJhcigmc2VsZikgeyB9Cn0KYGBgCgpIZXJlLCB3ZSdyZSBzYXlpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZXhpc3RzIG9uIFdyYXBwZXIgb25seSB3aGVuIHRoZQp3cmFwcGVkIHR5cGUgYFRgIGltcGxlbWVudHMgYENsb25lYC4gVGhlIGB3aGVyZWAgY2xhdXNlIGlzIGltcG9ydGFudCBiZWNhdXNlCnNvbWUgdHlwZXMgd2lsbCBub3QgaW1wbGVtZW50IGBDbG9uZWAsIGFuZCB0aHVzIHdpbGwgbm90IGdldCB0aGlzIG1ldGhvZC4KCkluIG91ciBlcnJvbmVvdXMgZXhhbXBsZSwgaG93ZXZlciwgd2UncmUgcmVmZXJlbmNpbmcgYSBzaW5nbGUgY29uY3JldGUgdHlwZS4KU2luY2Ugd2Uga25vdyBmb3IgY2VydGFpbiB0aGF0IGBXcmFwcGVyPHUzMj5gIGltcGxlbWVudHMgYENsb25lYCwgdGhlcmUncyBubwpyZWFzb24gdG8gYWxzbyBzcGVjaWZ5IGl0IGluIGEgYHdoZXJlYCBjbGF1c2UuCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////f78IAAEAvwi3AQDTJyYAAOgCAAIHAOkCAQADAO0CDgAA5wICBQEEU29tZQEBALQJAAHoAgADAO0CDgAC5wIAAQMA2AIkAADmAgEBALQJAAK2AQDZAhIAALQJBQEFRTAxOTMAAR8FAAEABQMA2AIkAADmAgEBAbkJAAHnAgC5AQCCKCYAAO0CAAACuQEAgigmAAC0CQUB3gVUaGUgbGlmZXRpbWUgcGFyYW1ldGVycyBvZiB0aGUgbWV0aG9kIGRvIG5vdCBtYXRjaCB0aGUgdHJhaXQgZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk1CnRyYWl0IFRyYWl0IHsKICAgIGZuIGJhcjwnYSwnYjonYT4oeDogJidhIHN0ciwgeTogJidiIHN0cik7Cn0KCnN0cnVjdCBGb287CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gYmFyPCdhLCdiPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKSB7CiAgICAvLyBlcnJvcjogbGlmZXRpbWUgcGFyYW1ldGVycyBvciBib3VuZHMgb24gbWV0aG9kIGBiYXJgCiAgICAvLyBkbyBub3QgbWF0Y2ggdGhlIHRyYWl0IGRlY2xhcmF0aW9uCiAgICB9Cn0KYGBgCgpUaGUgbGlmZXRpbWUgY29uc3RyYWludCBgJ2JgIGZvciBgYmFyKClgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IG1hdGNoIHRoZQp0cmFpdCBkZWNsYXJhdGlvbi4gRW5zdXJlIGxpZmV0aW1lIGRlY2xhcmF0aW9ucyBtYXRjaCBleGFjdGx5IGluIGJvdGggdHJhaXQKZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uLiBFeGFtcGxlOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpOwp9CgpzdHJ1Y3QgRm9vOwoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpIHsgLy8gb2shCiAgICB9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94FAAEA3gW5AQCCKCYAAOwCAAIHAO0CAQADAO0CDgAA6wICBQEEU29tZQEBALQJAAHsAgADAO0CDgAC6wIAAQMA2AIk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YGBgCgpOb3RlLCBob3dldmVyLCB0aGF0IGl0ZW1zIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgYWxsb3dlZCBmb3IgaW5oZXJlbnQgYGltcGxgCmJsb2NrcyB0aGF0IGRvbid0IG92ZXJsYXA6CgpgYGAKc3RydWN0IEZvbzxUPihUKTsKCmltcGwgRm9vPHU4PiB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgPiA1IH0KfQoKaW1wbCBGb288Ym9vbD4gewogICAgZm4gYmFyKCZzZWxmKSAtPiBib29sIHsgc2VsZi4wIH0KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A7MGAAEAswbDAQDtKSYAAIADAAIHAIEDAQADAO0CDgAA/wICBQEEU29tZQEBALQJAAGAAwADAO0CDgAC/wIAAQMA2AIkAAD+AgEBALQJAALCAQDZAhIAALQJBQEFRTAyMDEAAR8FAAEABQMA2AIkAAD+AgEBAbkJAAH/AgDFAQCcKiYAAIUDAAACxQEAnComAAC0CQUB3QJIYXZpbmcgbXVsdGlwbGUgcmVsYXhlZCBkZWZhdWx0IGJvdW5kcyBpcyB1bnN1cHBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDMKc3RydWN0IEJhZDxUOiA/U2l6ZWQgKyA/U2VuZD57CiAgICBpbm5lcjogVAp9CmBgYAoKSGVyZSB0aGUgdHlwZSBgVGAgY2Fubm90IGhhdmUgYSByZWxheGVkIGJvdW5kIGZvciBtdWx0aXBsZSBkZWZhdWx0IHRyYWl0cwooYFNpemVkYCBhbmQgYFNlbmRgKS4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgb25seSB1c2luZyBvbmUgcmVsYXhlZCBib3VuZC4KCmBgYApzdHJ1Y3QgR29vZDxUOiA/U2l6ZWQ+ewogICAgaW5uZXI6IFQKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af////8B3QIAAQDdAsUBAJwqJgAAhAMAAgcAhQMBAAMA7QIOAACDAwIFAQRTb21lAQEAtAkAAYQDAAMA7QIOAAKDAwABAwDYAiQAAIIDAQEAtAkAAsQBANkCEgAAtAkFAQVFMDIwMwABHwUAAQAFAwDYAiQAAIIDAQEBuQkAAYMDAMcBAMsqJgAAiQMAAALHAQDLKiYAALQJBQGrBVRoZSBgQ29weWAgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGEgdHlwZSB3aGljaCBjb250YWlucyBhIGZpZWxkIHRoYXQgZG9lc24ndAppbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKc3RydWN0IEZvbyB7CiAgICBmb286IFZlYzx1MzI+LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCmBgYAoKVGhlIGBDb3B5YCB0cmFpdCBpcyBpbXBsZW1lbnRlZCBieSBkZWZhdWx0IG9ubHkgb24gcHJpbWl0aXZlIHR5cGVzLiBJZiB5b3VyCnR5cGUgb25seSBjb250YWlucyBwcmltaXRpdmUgdHlwZXMsIHlvdSdsbCBiZSBhYmxlIHRvIGltcGxlbWVudCBgQ29weWAgb24gaXQuCk90aGVyd2lzZSwgaXQgd29uJ3QgYmUgcG9zc2libGUuCgpIZXJlJ3MgYW5vdGhlciBleGFtcGxlIHRoYXQgd2lsbCBmYWlsOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CiNbZGVyaXZlKENvcHkpXSAvLyBlcnJvciEKc3RydWN0IEZvbzwnYT4gewogICAgdHk6ICYnYSBtdXQgYm9vbCwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////AasFAAEAqwXHAQDLKiYAAIgDAAIHAIkDAQADAO0CDgAAhwMCBQEEU29tZQEBALQJAAGIAwADAO0CDgAChwMAAQMA2AIkAACGAwEBALQJAALGAQDZAhIAALQJBQEFRTAyMDQAAR8FAAEABQMA2AIkAACGAwEBAbkJAAGHAwDJAQD6KiYAAI0DAAACyQEA+iomAAC0CQUB2gUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IGZvciBhbiBlbnVtIGZhaWxlZCBiZWNhdXNlIG9uZSBvZiB0aGUKdmFyaWFudHMgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YC4gVG8gZml4IHRoaXMsIHlvdSBtdXN0IGltcGxlbWVudCBgQ29weWAgZm9yCnRoZSBtZW50aW9uZWQgdmFyaWFudC4gTm90ZSB0aGF0IHRoaXMgbWF5IG5vdCBiZSBwb3NzaWJsZSwgYXMgaW4gdGhlIGV4YW1wbGUgb2YKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNAplbnVtIEZvbyB7CiAgICBCYXIoVmVjPHUzMj4pLAogICAgQmF6LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYFZlYzxUPmAgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YCBmb3IgYW55IGBUYC4KCkhlcmUncyBhbm90aGVyIGV4YW1wbGUgdGhhdCB3aWxsIGZhaWw6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKI1tkZXJpdmUoQ29weSldCmVudW0gRm9vPCdhPiB7CiAgICBCYXIoJidhIG11dCBib29sKSwKICAgIEJheiwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///x/aBQABANoFyQEA+iomAACMAwACBwCNAwEAAwDtAg4AAIsDAgUBBFNvbWUBAQC0CQABjAMAAwDtAg4AAosDAAEDANgCJAAAigMBAQC0CQACyAEA2QISAAC0CQUBBUUwMjA1AAEfBQABAAUDANgCJAAAigMBAQG5CQABiwMAywEAqSsmAACRAwAAAssBAKkrJgAAtAkFAeICVGhlIGBDb3B5YCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHdoaWNoIGlzIG5laXRoZXIgYSBzdHJ1Y3Qgbm9yIGFuCmVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA2CiNbZGVyaXZlKENvcHksIENsb25lKV0Kc3RydWN0IEJhcjsKCmltcGwgQ29weSBmb3IgJidzdGF0aWMgbXV0IEJhciB7IH0gLy8gZXJyb3IhCmBgYAoKWW91IGNhbiBvbmx5IGltcGxlbWVudCBgQ29weWAgZm9yIGEgc3RydWN0IG9yIGFuIGVudW0uClRoZSBwcmV2aW91cyBleGFtcGxlIHdpbGwgZmFpbCBiZWNhdXNlIGAmJ3N0YXRpYyBtdXQgQmFyYAppcyBub3QgYSBzdHJ1Y3Qgb3IgZW51bS4KAAb///////////8B////////////Af///////////wH///////////8B////////////Af////8/4gIAAQDiAssBAKkrJgAAkAMAAgcAkQMBAAMA7QIOAACPAwIFAQRTb21lAQEAtAkAAZADAAMA7QIOAAKPAwABAwDYAiQAAI4DAQEAtAkAAsoBANkCEgAAtAkFAQVFMDIwNgABHwUAAQAFAwDYAiQAAI4DAQEBuQkAAY8DAM0BANgrJgAAlQMAAALNAQDYKyYAALQJBQGZF0EgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgZm9yIGBpbXBsYCBpcyBub3QgY29uc3RyYWluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA3CnN0cnVjdCBGb287CgppbXBsPFQ6IERlZmF1bHQ+IEZvbyB7CiAgICAvLyBlcnJvcjogdGhlIHR5cGUgcGFyYW1ldGVyIGBUYCBpcyBub3QgY29uc3RyYWluZWQgYnkgdGhlIGltcGwgdHJhaXQsIHNlbGYKICAgIC8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgZm4gZ2V0KCZzZWxmKSAtPiBUIHsKICAgICAgICA8VCBhcyBEZWZhdWx0Pjo6ZGVmYXVsdCgpCiAgICB9Cn0KYGBgCgpBbnkgdHlwZSBwYXJhbWV0ZXIgb2YgYW4gYGltcGxgIG11c3QgbWVldCBhdCBsZWFzdCBvbmUgb2YKdGhlIGZvbGxvd2luZyBjcml0ZXJpYToKCiAtIGl0IGFwcGVhcnMgaW4gdGhlIF9pbXBsZW1lbnRpbmcgdHlwZV8gb2YgdGhlIGltcGwsIGUuZy4gYGltcGw8VD4gRm9vPFQ+YAogLSBmb3IgYSB0cmFpdCBpbXBsLCBpdCBhcHBlYXJzIGluIHRoZSBfaW1wbGVtZW50ZWQgdHJhaXRfLCBlLmcuCiAgIGBpbXBsPFQ+IFNvbWVUcmFpdDxUPiBmb3IgRm9vYAogLSBpdCBpcyBib3VuZCBhcyBhbiBhc3NvY2lhdGVkIHR5cGUsIGUuZy4gYGltcGw8VCwgVT4gU29tZVRyYWl0IGZvciBUCiAgIHdoZXJlIFQ6IEFub3RoZXJUcmFpdDxBc3NvY1R5cGU9VT5gCgojIyMgRXJyb3IgZXhhbXBsZSAxCgpTdXBwb3NlIHdlIGhhdmUgYSBzdHJ1Y3QgYEZvb2AgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGVmaW5lIHNvbWUgbWV0aG9kcyBmb3IgaXQuClRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUgaGFzIGEgZGVmaW5pdGlvbiB3aGljaCBsZWFkcyB0byBhIGNvbXBpbGVyIGVycm9yOgoKVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgcGFyYW1ldGVyIGBUYCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGltcGxlbWVudGluZyB0eXBlCihgRm9vYCkgb2YgdGhlIGltcGwuIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgZXJyb3IgYnkgbW92aW5nIHRoZSB0eXBlCnBhcmFtZXRlciBmcm9tIHRoZSBgaW1wbGAgdG8gdGhlIG1ldGhvZCBgZ2V0YDoKCgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIHR5cGUgcGFyYW1ldGVyIGZyb20gdGhlIGltcGwgdG8gdGhlIG1ldGhvZAppbXBsIEZvbyB7CiAgICBmbiBnZXQ8VDogRGVmYXVsdD4oJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDIKCkFzIGFub3RoZXIgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIGEgYE1ha2VyYCB0cmFpdCBhbmQgd2FudCB0byBlc3RhYmxpc2ggYQp0eXBlIGBGb29NYWtlcmAgdGhhdCBtYWtlcyBgRm9vYHM6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKdHJhaXQgTWFrZXIgewogICAgdHlwZSBJdGVtOwogICAgZm4gbWFrZSgmbXV0IHNlbGYpIC0+IFNlbGY6Okl0ZW07Cn0KCnN0cnVjdCBGb288VD4gewogICAgZm9vOiBUCn0KCnN0cnVjdCBGb29NYWtlcjsKCmltcGw8VDogRGVmYXVsdD4gTWFrZXIgZm9yIEZvb01ha2VyIHsKLy8gZXJyb3I6IHRoZSB0eXBlIHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCi8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgpUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSB0cmFpdCBvciBpbiB0aGUKaW1wbGVtZW50aW5nIHR5cGUuCgpPbmUgd2F5IHRvIHdvcmsgYXJvdW5kIHRoaXMgaXMgdG8gaW50cm9kdWNlIGEgcGhhbnRvbSB0eXBlIHBhcmFtZXRlciBpbnRvCmBGb29NYWtlcmAsIGxpa2Ugc286CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCnRyYWl0IE1ha2VyIHsKICAgIHR5cGUgSXRlbTsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBTZWxmOjpJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgovLyBBZGQgYSB0eXBlIHBhcmFtZXRlciB0byBgRm9vTWFrZXJgCnN0cnVjdCBGb29NYWtlcjxUPiB7CiAgICBwaGFudG9tOiBQaGFudG9tRGF0YTxUPiwKfQoKaW1wbDxUOiBEZWZhdWx0PiBNYWtlciBmb3IgRm9vTWFrZXI8VD4gewogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7CiAgICAgICAgICAgIGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpBbm90aGVyIHdheSBpcyB0byBkbyBhd2F5IHdpdGggdGhlIGFzc29jaWF0ZWQgdHlwZSBpbiBgTWFrZXJgIGFuZCB1c2UgYW4gaW5wdXQKdHlwZSBwYXJhbWV0ZXIgaW5zdGVhZDoKCmBgYAovLyBVc2UgYSB0eXBlIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0ZWQgdHlwZSBoZXJlCnRyYWl0IE1ha2VyPEl0ZW0+IHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgpzdHJ1Y3QgRm9vTWFrZXI7CgppbXBsPFQ6IERlZmF1bHQ+IE1ha2VyPEZvbzxUPj4gZm9yIEZvb01ha2VyIHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgojIyMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbgoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgW1JGQyA0NDddLgoKW1JGQyA0NDddOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDQ3LW5vLXVudXNlZC1pbXBsLXBhcmFtZXRlcnMubWQKAC////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D5kXAAEAmRfNAQDYKyYAAJQDAAIHAJUDAQADAO0CDgAAkwMCBQEEU29tZQEBALQJAAGUAwADAO0CDgACkwMAAQMA2AIkAACSAwEBALQJAALMAQDZAhIAALQJBQEFRTAyMDcAAR8FAAEABQMA2AIkAACSAwEBAbkJAAGTAwDPAQCHLCYAAJkDAAACzwEAhywmAAC0CQUBqBdUaGlzIGVycm9yIGluZGljYXRlcyBhIHZpb2xhdGlvbiBvZiBvbmUgb2YgUnVzdCdzIG9ycGhhbiBydWxlcyBmb3IgdHJhaXQKaW1wbGVtZW50YXRpb25zLiBUaGUgcnVsZSBjb25jZXJucyB0aGUgdXNlIG9mIHR5cGUgcGFyYW1ldGVycyBpbiBhbgppbXBsZW1lbnRhdGlvbiBvZiBhIGZvcmVpZ24gdHJhaXQgKGEgdHJhaXQgZGVmaW5lZCBpbiBhbm90aGVyIGNyYXRlKSwgYW5kCnN0YXRlcyB0aGF0IHR5cGUgcGFyYW1ldGVycyBtdXN0IGJlICJjb3ZlcmVkIiBieSBhIGxvY2FsIHR5cGUuCgpXaGVuIGltcGxlbWVudGluZyBhIGZvcmVpZ24gdHJhaXQgZm9yIGEgZm9yZWlnbiB0eXBlLAp0aGUgdHJhaXQgbXVzdCBoYXZlIG9uZSBvciBtb3JlIHR5cGUgcGFyYW1ldGVycy4KQSB0eXBlIGxvY2FsIHRvIHlvdXIgY3JhdGUgbXVzdCBhcHBlYXIgYmVmb3JlIGFueSB1c2Ugb2YgYW55IHR5cGUgcGFyYW1ldGVycy4KClRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zLCBpdCBpcyBwZXJoYXBzIGVhc2llciB0byBjb25zaWRlciBhIGZldyBleGFtcGxlcy4KCklmIGBGb3JlaWduVHJhaXRgIGlzIGEgdHJhaXQgZGVmaW5lZCBpbiBzb21lIGV4dGVybmFsIGNyYXRlIGBmb29gLCB0aGVuIHRoZQpmb2xsb3dpbmcgdHJhaXQgYGltcGxgIGlzIGFuIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwMjEwCiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCmV4dGVybiBjcmF0ZSBmb287CiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCnVzZSBmb286OkZvcmVpZ25UcmFpdDsKIyB1c2Ugc3RkOjpwYW5pYzo6VW53aW5kU2FmZSBhcyBGb3JlaWduVHJhaXQ7CgppbXBsPFQ+IEZvcmVpZ25UcmFpdCBmb3IgVCB7IH0gLy8gZXJyb3IKIyBmbiBtYWluKCkge30KYGBgCgpUbyB3b3JrIGFyb3VuZCB0aGlzLCBpdCBjYW4gYmUgY292ZXJlZCB3aXRoIGEgbG9jYWwgdHlwZSwgYE15VHlwZWA6CgpgYGAKIyB1c2Ugc3RkOjpwYW5pYzo6VW53aW5kU2FmZSBhcyBGb3JlaWduVHJhaXQ7CnN0cnVjdCBNeVR5cGU8VD4oVCk7CmltcGw8VD4gRm9yZWlnblRyYWl0IGZvciBNeVR5cGU8VD4geyB9IC8vIE9rCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCBhIHR5cGUgYWxpYXMgaXMgbm90IHN1ZmZpY2llbnQuCgpGb3IgYW5vdGhlciBleGFtcGxlIG9mIGFuIGVycm9yLCBzdXBwb3NlIHRoZXJlJ3MgYW5vdGhlciB0cmFpdCBkZWZpbmVkIGluIGBmb29gCm5hbWVkIGBGb3JlaWduVHJhaXQyYCB0aGF0IHRha2VzIHR3byB0eXBlIHBhcmFtZXRlcnMuIFRoZW4gdGhpcyBgaW1wbGAgcmVzdWx0cwppbiB0aGUgc2FtZSBydWxlIHZpb2xhdGlvbjoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQpzdHJ1Y3QgTXlUeXBlMjsKaW1wbDxUPiBGb3JlaWduVHJhaXQyPFQsIE15VHlwZTxUPj4gZm9yIE15VHlwZTIgeyB9IC8vIGVycm9yCmBgYAoKVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZXJlIGFyZSB0d28gYXBwZWFyYW5jZXMgb2YgdHlwZSBwYXJhbWV0ZXIgYFRgIGluCnRoZSBgaW1wbGAgaGVhZGVyLCBib3RoIGFzIHBhcmFtZXRlcnMgZm9yIGBGb3JlaWduVHJhaXQyYC4gVGhlIGZpcnN0IGFwcGVhcmFuY2UKaXMgdW5jb3ZlcmVkLCBhbmQgc28gcnVucyBhZm91bCBvZiB0aGUgb3JwaGFuIHJ1bGUuCgpDb25zaWRlciBvbmUgbW9yZSBleGFtcGxlOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCmltcGw8VD4gRm9yZWlnblRyYWl0MjxNeVR5cGU8VD4sIFQ+IGZvciBNeVR5cGUyIHsgfSAvLyBPawpgYGAKClRoaXMgb25seSBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIGBpbXBsYCBpbiB0aGF0IHRoZSBwYXJhbWV0ZXJzIGBUYCBhbmQKYE15VHlwZTxUPmAgZm9yIGBGb3JlaWduVHJhaXQyYCBoYXZlIGJlZW4gc3dhcHBlZC4gVGhpcyBleGFtcGxlIGRvZXMgKm5vdCoKdmlvbGF0ZSB0aGUgb3JwaGFuIHJ1bGU7IGl0IGlzIHBlcm1pdHRlZC4KClRvIHNlZSB3aHkgdGhhdCBsYXN0IGV4YW1wbGUgd2FzIGFsbG93ZWQsIHlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwKcnVsZS4gVW5mb3J0dW5hdGVseSB0aGlzIHJ1bGUgaXMgYSBiaXQgdHJpY2t5IHRvIHN0YXRlLiBDb25zaWRlciBhbiBgaW1wbGA6CgpgYGBpZ25vcmUgKG9ubHktZm9yLXN5bnRheC1oaWdobGlnaHQpCmltcGw8UDEsIC4uLiwgUG0+IEZvcmVpZ25UcmFpdDxUMSwgLi4uLCBUbj4gZm9yIFQwIHsgLi4uIH0KYGBgCgp3aGVyZSBgUDEsIC4uLiwgUG1gIGFyZSB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBgaW1wbGAgYW5kIGBUMCwgLi4uLCBUbmAKYXJlIHR5cGVzLiBPbmUgb2YgdGhlIHR5cGVzIGBUMCwgLi4uLCBUbmAgbXVzdCBiZSBhIGxvY2FsIHR5cGUgKHRoaXMgaXMgYW5vdGhlcgpvcnBoYW4gcnVsZSwgc2VlIHRoZSBleHBsYW5hdGlvbiBmb3IgRTAxMTcpLgoKQm90aCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKMS4gQXQgbGVhc3Qgb25lIG9mIHRoZSB0eXBlcyBgVDAuLj1UbmAgbXVzdCBiZSBhIGxvY2FsIHR5cGUuCkxldCBgVGlgIGJlIHRoZSBmaXJzdCBzdWNoIHR5cGUuCjIuIE5vIHVuY292ZXJlZCB0eXBlIHBhcmFtZXRlcnMgYFAxLi49UG1gIG1heSBhcHBlYXIgaW4gYFQwLi5UaWAKKGV4Y2x1ZGluZyBgVGlgKS4KCkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIG9mIHRoZSBvcnBoYW4gcnVsZXMsCnNlZSBbUkZDIDI0NTFdIGFuZCBbUkZDIDEwMjNdLgoKRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gb2YgdGhlIG9ycGhhbiBydWxlcywgc2VlIFtSRkMgMTAyM10uCgpbUkZDIDI0NTFdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yNDUxLXJlLXJlYmFsYW5jaW5nLWNvaGVyZW5jZS5odG1sCltSRkMgMTAyM106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzEwMjMtcmViYWxhbmNpbmctY29oZXJlbmNlLm1kCgAv////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H6gXAAEAqBfPAQCHLCYAAJgDAAIHAJkDAQADAO0CDgAAlwMCBQEEU29tZQEBALQJAAGYAwADAO0CDgAClwMAAQMA2AIkAACWAwEBALQJAALOAQDZAhIAALQJBQEFRTAyMTAAAR8FAAEABQMA2AIkAACWAwEBAbkJAAGXAwDRAQC2LCYAAJ0DAAAC0QEAtiwmAAC0CQUB0wsjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdXNlZCBhIGZ1bmN0aW9uIG9yIHR5cGUgd2hpY2ggZG9lc24ndCBmaXQgdGhlIHJlcXVpcmVtZW50cyBmb3Igd2hlcmUgaXQgd2FzCnVzZWQuIEVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBzaXplX29mPFQ+KCk7IC8vIGVycm9yOiBpbnRyaW5zaWMgaGFzIHdyb25nIHR5cGUKfQoKLy8gb3I6CgpmbiBtYWluKCkgLT4gaTMyIHsgMCB9Ci8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGV4cGVjdHMgdHlwZTogYGZuKCkge21haW59YDogZXhwZWN0ZWQgKCksIGZvdW5kIGkzMgoKLy8gb3I6CgpsZXQgeCA9IDF1ODsKbWF0Y2ggeCB7CiAgICAwdTguLj0zaTggPT4gKCksCiAgICAvLyBlcnJvcjogbWlzbWF0Y2hlZCB0eXBlcyBpbiByYW5nZTogZXhwZWN0ZWQgdTgsIGZvdW5kIGk4CiAgICBfID0+ICgpCn0KCi8vIG9yOgoKdXNlIHN0ZDo6cmM6OlJjOwpzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4geChzZWxmOiBSYzxGb28+KSB7fQogICAgLy8gZXJyb3I6IG1pc21hdGNoZWQgc2VsZiB0eXBlOiBleHBlY3RlZCBgRm9vYDogZXhwZWN0ZWQgc3RydWN0CiAgICAvLyAgICAgICAgYEZvb2AsIGZvdW5kIHN0cnVjdCBgYWxsb2M6OnJjOjpSY2AKfQpgYGAKCkZvciB0aGUgZmlyc3QgY29kZSBleGFtcGxlLCBwbGVhc2UgY2hlY2sgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIHNpemVfb2Y8VD4oKSAtPiB1c2l6ZTsgLy8gb2shCn0KYGBgCgpUaGUgc2Vjb25kIGNhc2UgZXhhbXBsZSBpcyBhIGJpdCBwYXJ0aWN1bGFyOiB0aGUgbWFpbiBmdW5jdGlvbiBtdXN0IGFsd2F5cwpoYXZlIHRoaXMgZGVmaW5pdGlvbjoKCmBgYGNvbXBpbGVfZmFpbApmbiBtYWluKCk7CmBgYAoKVGhleSBuZXZlciB0YWtlIHBhcmFtZXRlcnMgYW5kIG5ldmVyIHJldHVybiB0eXBlcy4KCkZvciB0aGUgdGhpcmQgZXhhbXBsZSwgd2hlbiB5b3UgbWF0Y2gsIGFsbCBwYXR0ZXJucyBtdXN0IGhhdmUgdGhlIHNhbWUgdHlwZQphcyB0aGUgdHlwZSB5b3UncmUgbWF0Y2hpbmcgb24uIEV4YW1wbGU6CgpgYGAKbGV0IHggPSAxdTg7CgptYXRjaCB4IHsKICAgIDB1OC4uPTN1OCA9PiAoKSwgLy8gb2shCiAgICBfID0+ICgpCn0KYGBgCgpBbmQgZmluYWxseSwgZm9yIHRoZSBsYXN0IGV4YW1wbGUsIG9ubHkgYEJveDxTZWxmPmAsIGAmU2VsZmAsIGBTZWxmYCwKb3IgYCZtdXQgU2VsZmAgd29yayBhcyBleHBsaWNpdCBzZWxmIHBhcmFtZXRlcnMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIHgoc2VsZjogQm94PEZvbz4pIHt9IC8vIG9rIQp9CmBgYAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wsAAQDTC9EBALYsJgAAnAMAAgcAnQMBAAMA7QIOAACbAwIFAQRTb21lAQEAtAkAAZwDAAMA7QIOAAKbAwABAwDYAiQAAJoDAQEAtAkAAtABANkCEgAAtAkFAQVFMDIxMQABHwUAAQAFAwDYAiQAAJoDAQEBuQkAAZsDANMBAOUsJgAAoQMAAALTAQDlLCYAALQJBQGmBUNhbm5vdCB1c2UgdGhlIGFzc29jaWF0ZWQgdHlwZSBvZgphIHRyYWl0IHdpdGggdW5pbmZlcnJlZCBnZW5lcmljIHBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjEyCnB1YiB0cmFpdCBGb288VD4gewogICAgdHlwZSBBOwoKICAgIGZuIGdldCgmc2VsZiwgdDogVCkgLT4gU2VsZjo6QTsKfQoKZm4gZm9vMjxJIDogZm9yPCd4PiBGb288Jid4IGlzaXplPj4oCiAgICBmaWVsZDogSTo6QSkge30gLy8gZXJyb3IhCmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSBoYXZlIHRvIGluc3RhbnRpYXRlIGAneGAsIGFuZAp3ZSBkb24ndCBrbm93IHdoYXQgbGlmZXRpbWUgdG8gaW5zdGFudGlhdGUgaXQgd2l0aC4KVG8gZml4IHRoaXMsIHNwZWxsIG91dCB0aGUgcHJlY2lzZSBsaWZldGltZXMgaW52b2x2ZWQuCkV4YW1wbGU6CgpgYGAKcHViIHRyYWl0IEZvbzxUPiB7CiAgICB0eXBlIEE7CgogICAgZm4gZ2V0KCZzZWxmLCB0OiBUKSAtPiBTZWxmOjpBOwp9CgpmbiBmb28zPEkgOiBmb3I8J3g+IEZvbzwmJ3ggaXNpemU+PigKICAgIHg6IDxJIGFzIEZvbzwmaXNpemU+Pjo6QSkge30gLy8gb2shCgoKZm4gZm9vNDwnYSwgSSA6IGZvcjwneD4gRm9vPCYneCBpc2l6ZT4+KAogICAgeDogPEkgYXMgRm9vPCYnYSBpc2l6ZT4+OjpBKSB7fSAvLyBvayEKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B6YFAAEApgXTAQDlLCYAAKADAAIHAKEDAQADAO0CDgAAnwMCBQEEU29tZQEBALQJAAGgAwADAO0CDgACnwMAAQMA2AIkAACeAwEBALQJAALSAQDZAhIAALQJBQEFRTAyMTIAAR8FAAEABQMA2AIkAACeAwEBAbkJAAGfAwDVAQCULSYAAKUDAAAC1QEAlC0mAAC0CQUBmgNBIGdlbmVyaWMgdHlwZSB3YXMgZGVzY3JpYmVkIHVzaW5nIHBhcmVudGhlc2VzIHJhdGhlciB0aGFuIGFuZ2xlIGJyYWNrZXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIxNApsZXQgdjogVmVjKCZzdHIpID0gdmVjIVsiZm9vIl07CmBgYAoKVGhpcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDogYHZgIHNob3VsZCBiZSBkZWZpbmVkIGFzIGBWZWM8JnN0cj5gLgpQYXJlbnRoZXNlcyBhcmUgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIGdlbmVyaWMgdHlwZXMgd2hlbiBkZWZpbmluZyBwYXJhbWV0ZXJzCmZvciBgRm5gLWZhbWlseSB0cmFpdHMuCgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGZpeGVkOgoKYGBgCmxldCB2OiBWZWM8JnN0cj4gPSB2ZWMhWyJmb28iXTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oDAAEAmgPVAQCULSYAAKQDAAIHAKUDAQADAO0CDgAAowMCBQEEU29tZQEBALQJAAGkAwADAO0CDgACowMAAQMA2AIkAACiAwEBALQJAALUAQDZAhIAALQJBQEFRTAyMTQAAR8FAAEABQMA2AIkAACiAwEBAbkJAAGjAwDXAQDDLSYAAKkDAAAC1wEAwy0mAAC0CQUBiQZUaGUgYXNzb2NpYXRlZCB0eXBlIHVzZWQgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjAKdHJhaXQgVDEgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVDE8Rj1pMzI+OyAvLyBlcnJvcjogYXNzb2NpYXRlZCB0eXBlIGBGYCBub3QgZm91bmQgZm9yIGBUMWAKCi8vIG9yOgoKdHJhaXQgVDIgewogICAgdHlwZSBCYXI7CgogICAgLy8gZXJyb3I6IEJheiBpcyB1c2VkIGJ1dCBub3QgZGVjbGFyZWQKICAgIGZuIHJldHVybl9ib29sKCZzZWxmLCBfOiAmU2VsZjo6QmFyLCBfOiAmU2VsZjo6QmF6KSAtPiBib29sOwp9CmBgYAoKTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgZGVmaW5lZCB0aGUgYXNzb2NpYXRlZCB0eXBlIGluIHRoZSB0cmFpdCBib2R5LgpBbHNvLCB2ZXJpZnkgdGhhdCB5b3UgdXNlZCB0aGUgcmlnaHQgdHJhaXQgb3IgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUKYXNzb2NpYXRlZCB0eXBlIG5hbWUuIEV4YW1wbGU6CgpgYGAKdHJhaXQgVDEgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVDE8QmFyPWkzMj47IC8vIG9rIQoKLy8gb3I6Cgp0cmFpdCBUMiB7CiAgICB0eXBlIEJhcjsKICAgIHR5cGUgQmF6OyAvLyB3ZSBkZWNsYXJlIGBCYXpgIGluIG91ciB0cmFpdC4KCiAgICAvLyBhbmQgbm93IHdlIGNhbiB1c2UgaXQgaGVyZToKICAgIGZuIHJldHVybl9ib29sKCZzZWxmLCBfOiAmU2VsZjo6QmFyLCBfOiAmU2VsZjo6QmF6KSAtPiBib29sOwp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DiQYAAQCJBtcBAMMtJgAAqAMAAgcAqQMBAAMA7QIOAACnAwIFAQRTb21lAQEAtAkAAagDAAMA7QIOAAKnAwABAwDYAiQAAKYDAQEAtAkAAtYBANkCEgAAtAkFAQVFMDIyMAABHwUAAQAFAwDYAiQAAKYDAQEBuQkAAacDANkBAPItJgAArQMAAALZAQDyLSYAALQJBQGAB0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gcmV0cmlldmUgYW4gYXNzb2NpYXRlZCB0eXBlLCBidXQgdGhlIHR5cGUgd2FzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjEKdHJhaXQgVDEge30KdHJhaXQgVDIge30KCnRyYWl0IEZvbyB7CiAgICB0eXBlIEE6IFQxOwp9Cgp0cmFpdCBCYXIgOiBGb28gewogICAgdHlwZSBBOiBUMjsKICAgIGZuIGRvX3NvbWV0aGluZygpIHsKICAgICAgICBsZXQgXzogU2VsZjo6QTsKICAgIH0KfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgYEZvb2AgZGVmaW5lcyBhbiBhc3NvY2lhdGVkIHR5cGUgYEFgLiBgQmFyYCBpbmhlcml0cyB0aGF0IHR5cGUKZnJvbSBgRm9vYCwgYW5kIGRlZmluZXMgYW5vdGhlciBhc3NvY2lhdGVkIHR5cGUgb2YgdGhlIHNhbWUgbmFtZS4gQXMgYSByZXN1bHQsCndoZW4gd2UgYXR0ZW1wdCB0byB1c2UgYFNlbGY6OkFgLCBpdCdzIGFtYmlndW91cyB3aGV0aGVyIHdlIG1lYW4gdGhlIGBBYCBkZWZpbmVkCmJ5IGBGb29gIG9yIHRoZSBvbmUgZGVmaW5lZCBieSBgQmFyYC4KClRoZXJlIGFyZSB0d28gb3B0aW9ucyB0byB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlLiBUaGUgZmlyc3QgaXMgc2ltcGx5IHRvIHJlbmFtZQpvbmUgb2YgdGhlIHR5cGVzLiBBbHRlcm5hdGl2ZWx5LCBvbmUgY2FuIHNwZWNpZnkgdGhlIGludGVuZGVkIHR5cGUgdXNpbmcgdGhlCmZvbGxvd2luZyBzeW50YXg6CgpgYGAKdHJhaXQgVDEge30KdHJhaXQgVDIge30KCnRyYWl0IEZvbyB7CiAgICB0eXBlIEE6IFQxOwp9Cgp0cmFpdCBCYXIgOiBGb28gewogICAgdHlwZSBBOiBUMjsKICAgIGZuIGRvX3NvbWV0aGluZygpIHsKICAgICAgICBsZXQgXzogPFNlbGYgYXMgQmFyPjo6QTsKICAgIH0KfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQCABwABAIAH2QEA8i0mAACsAwACBwCtAwEAAwDtAg4AAKsDAgUBBFNvbWUBAQC0CQABrAMAAwDtAg4AAqsDAAEDANgCJAAAqgMBAQC0CQAC2AEA2QISAAC0CQUBBUUwMjIxAAEfBQABAAUDANgCJAAAqgMBAQG5CQABqwMA2wEAoS4mAACxAwAAAtsBAKEuJgAAtAkFAcgKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBjb25zdHJhaW4gYW4gYXNzb2NpYXRlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMgpwdWIgdHJhaXQgVmVoaWNsZSB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94IHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3hDYXIgOiBCb3ggKyBWZWhpY2xlIHt9CgpmbiBkZW50X29iamVjdDxDT0xPUj4oYzogZHluIEJveENhcjxDb2xvcj1DT0xPUj4pIHt9IC8vIEludmFsaWQgY29uc3RyYWludApgYGAKCkluIHRoaXMgZXhhbXBsZSwgYEJveENhcmAgaGFzIHR3byBzdXBlcnRyYWl0czogYFZlaGljbGVgIGFuZCBgQm94YC4gQm90aCBvZgp0aGVzZSB0cmFpdHMgZGVmaW5lIGFuIGFzc29jaWF0ZWQgdHlwZSBgQ29sb3JgLiBgQm94Q2FyYCBpbmhlcml0cyB0d28gdHlwZXMKd2l0aCB0aGF0IG5hbWUgZnJvbSBib3RoIHN1cGVydHJhaXRzLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gdXNlIHRoZQpmdWxseSBxdWFsaWZpZWQgcGF0aCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGBDb2xvcmAgYXNzb2NpYXRlZAp0eXBlLCBlaXRoZXIgYDxCb3hDYXIgYXMgVmVoaWNsZT46OkNvbG9yYCBvciBgPEJveENhciBhcyBCb3g+OjpDb2xvcmAsIGJ1dCB0aGlzCnN5bnRheCBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGluIGEgZnVuY3Rpb24gc2lnbmF0dXJlLgoKSW4gb3JkZXIgdG8gZW5jb2RlIHRoaXMga2luZCBvZiBjb25zdHJhaW50LCBhIGB3aGVyZWAgY2xhdXNlIGFuZCBhIG5ldyB0eXBlCnBhcmFtZXRlciBhcmUgbmVlZGVkOgoKYGBgCnB1YiB0cmFpdCBWZWhpY2xlIHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3ggewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveENhciA6IEJveCArIFZlaGljbGUge30KCi8vIEludHJvZHVjZSBhIG5ldyBgQ0FSYCB0eXBlIHBhcmFtZXRlcgpmbiBmb288Q0FSLCBDT0xPUj4oCiAgICBjOiBDQVIsCikgd2hlcmUKICAgIC8vIEJpbmQgdGhlIHR5cGUgcGFyYW1ldGVyIGBDQVJgIHRvIHRoZSB0cmFpdCBgQm94Q2FyYAogICAgQ0FSOiBCb3hDYXIsCiAgICAvLyBGdXJ0aGVyIHJlc3RyaWN0IGA8Qm94Q2FyIGFzIFZlaGljbGU+OjpDb2xvcmAgdG8gYmUgdGhlIHNhbWUgYXMgdGhlCiAgICAvLyB0eXBlIHBhcmFtZXRlciBgQ09MT1JgCiAgICBDQVI6IFZlaGljbGU8Q29sb3IgPSBDT0xPUj4sCiAgICAvLyBXZSBjYW4gYWxzbyBzaW11bHRhbmVvdXNseSByZXN0cmljdCB0aGUgb3RoZXIgdHJhaXQncyBhc3NvY2lhdGVkIHR5cGUKICAgIENBUjogQm94PENvbG9yID0gQ09MT1I+Cnt9CmBgYAoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8ByAoAAQDICtsBAKEuJgAAsAMAAgcAsQMBAAMA7QIOAACvAwIFAQRTb21lAQEAtAkAAbADAAMA7QIOAAKvAwABAwDYAiQAAK4DAQEAtAkAAtoBANkCEgAAtAkFAQVFMDIyMgABHwUAAQAFAwDYAiQAAK4DAQEBuQkAAa8DAN0BANAuJgAAtQMAAALdAQDQLiYAALQJBQHsBkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gcmV0cmlldmUgYW4gYXNzb2NpYXRlZCB0eXBlLCBidXQgdGhlIHR5cGUgd2FzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjMKdHJhaXQgTXlUcmFpdCB7dHlwZSBYOyB9CgpmbiBtYWluKCkgewogICAgbGV0IGZvbzogTXlUcmFpdDo6WDsKfQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB3ZSdyZSBhdHRlbXB0aW5nIHRvIHRha2UgdGhlIHR5cGUgb2YgWCBmcm9tIE15VHJhaXQuClVuZm9ydHVuYXRlbHksIHRoZSB0eXBlIG9mIFggaXMgbm90IGRlZmluZWQsIGJlY2F1c2UgaXQncyBvbmx5IG1hZGUgY29uY3JldGUgaW4KaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0cmFpdC4gQSB3b3JraW5nIHZlcnNpb24gb2YgdGhpcyBjb2RlIG1pZ2h0IGxvb2sgbGlrZToKCmBgYAp0cmFpdCBNeVRyYWl0IHt0eXBlIFg7IH0Kc3RydWN0IE15U3RydWN0OwoKaW1wbCBNeVRyYWl0IGZvciBNeVN0cnVjdCB7CiAgICB0eXBlIFggPSB1MzI7Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZm9vOiA8TXlTdHJ1Y3QgYXMgTXlUcmFpdD46Olg7Cn0KYGBgCgpUaGlzIHN5bnRheCBzcGVjaWZpZXMgdGhhdCB3ZSB3YW50IHRoZSBYIHR5cGUgZnJvbSBNeVRyYWl0LCBhcyBtYWRlIGNvbmNyZXRlIGluCk15U3RydWN0LiBUaGUgcmVhc29uIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgYE15U3RydWN0OjpYYCBpcyB0aGF0IE15U3RydWN0Cm1pZ2h0IGltcGxlbWVudCB0d28gZGlmZmVyZW50IHRyYWl0cyB3aXRoIGlkZW50aWNhbGx5LW5hbWVkIGFzc29jaWF0ZWQgdHlwZXMuClRoaXMgc3ludGF4IGFsbG93cyBkaXNhbWJpZ3VhdGlvbiBiZXR3ZWVuIHRoZSB0d28uCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wPsBgABAOwG3QEA0C4mAAC0AwACBwC1AwEAAwDtAg4AALMDAgUBBFNvbWUBAQC0CQABtAMAAwDtAg4AArMDAAEDANgCJAAAsgMBAQC0CQAC3AEA2QISAAC0CQUBBUUwMjIzAAEfBQABAAUDANgCJAAAsgMBAQG5CQABswMA3wEA/y4mAAC5AwAAAt8BAP8uJgAAtAkFAYkCQSB0cmFpdCBvYmplY3Qgd2FzIGRlY2xhcmVkIHdpdGggbm8gdHJhaXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNAp0eXBlIEZvbyA9IGR5biAnc3RhdGljICs7CmBgYAoKUnVzdCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzLgoKVG8gc29sdmUsIGVuc3VyZSB0aGF0IHRoZSB0cmFpdCBvYmplY3QgaGFzIGF0IGxlYXN0IG9uZSB0cmFpdDoKCmBgYAp0eXBlIEZvbyA9IGR5biAnc3RhdGljICsgQ29weTsKYGBgCgAF////////////Af///////////wH///////////8B////////////Af8DiQIAAQCJAt8BAP8uJgAAuAMAAgcAuQMBAAMA7QIOAAC3AwIFAQRTb21lAQEAtAkAAbgDAAMA7QIOAAK3AwABAwDYAiQAALYDAQEAtAkAAt4BANkCEgAAtAkFAQVFMDIyNAABHwUAAQAFAwDYAiQAALYDAQEBuQkAAbcDAOEBAK4vJgAAvQMAAALhAQCuLyYAALQJBQHvA011bHRpcGxlIHR5cGVzIHdlcmUgdXNlZCBhcyBib3VuZHMgZm9yIGEgY2xvc3VyZSBvciB0cmFpdCBvYmplY3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI1CmZuIG1haW4oKSB7CiAgICBsZXQgXzogQm94PGR5biBzdGQ6OmlvOjpSZWFkICsgc3RkOjppbzo6V3JpdGU+Owp9CmBgYAoKUnVzdCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzLgoKQXV0byB0cmFpdHMgc3VjaCBhcyBTZW5kIGFuZCBTeW5jIGFyZSBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOgpJdCdzIHBvc3NpYmxlIHRvIGhhdmUgYm91bmRzIG9mIG9uZSBub24tYnVpbHRpbiB0cmFpdCwgcGx1cyBhbnkgbnVtYmVyIG9mCmF1dG8gdHJhaXRzLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21waWxlcyBjb3JyZWN0bHk6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBfOiBCb3g8ZHluIHN0ZDo6aW86OlJlYWQgKyBTZW5kICsgU3luYz47Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x/vAwABAO8D4QEAri8mAAC8AwACBwC9AwEAAwDtAg4AALsDAgUBBFNvbWUBAQC0CQABvAMAAwDtAg4AArsDAAEDANgCJAAAugMBAQC0CQAC4AEA2QISAAC0CQUBBUUwMjI1AAEfBQABAAUDANgCJAAAugMBAQG5CQABuwMA4wEA3S8mAADBAwAAAuMBAN0vJgAAtAkFAZwETW9yZSB0aGFuIG9uZSBleHBsaWNpdCBsaWZldGltZSBib3VuZCB3YXMgdXNlZCBvbiBhIHRyYWl0IG9iamVjdC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjYKdHJhaXQgRm9vIHt9Cgp0eXBlIFQ8J2EsICdiPiA9IGR5biBGb28gKyAnYSArICdiOyAvLyBlcnJvcjogVHJhaXQgb2JqZWN0IGBhcmdgIGhhcyB0d28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGxpZmV0aW1lIGJvdW5kLCAnYSBhbmQgJ2IuCmBgYAoKSGVyZSBgVGAgaXMgYSB0cmFpdCBvYmplY3Qgd2l0aCB0d28gZXhwbGljaXQgbGlmZXRpbWUgYm91bmRzLCAnYSBhbmQgJ2IuCgpPbmx5IGEgc2luZ2xlIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIGlzIHBlcm1pdHRlZCBvbiB0cmFpdCBvYmplY3RzLgpUbyBmaXggdGhpcyBlcnJvciwgY29uc2lkZXIgcmVtb3Zpbmcgb25lIG9mIHRoZSBsaWZldGltZSBib3VuZHM6CgpgYGAKdHJhaXQgRm9vIHt9Cgp0eXBlIFQ8J2E+ID0gZHluIEZvbyArICdhOwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cBAABAJwE4wEA3S8mAADAAwACBwDBAwEAAwDtAg4AAL8DAgUBBFNvbWUBAQC0CQABwAMAAwDtAg4AAr8DAAEDANgCJAAAvgMBAQC0CQAC4gEA2QISAAC0CQUBBUUwMjI2AAEfBQABAAUDANgCJAAAvgMBAQG5CQABvwMA5QEAjDAmAADFAwAAAuUBAIwwJgAAtAkFAcMIVGhlIGxpZmV0aW1lIGJvdW5kIGZvciB0aGlzIG9iamVjdCB0eXBlIGNhbm5vdCBiZSBkZWR1Y2VkIGZyb20gY29udGV4dCBhbmQgbXVzdApiZSBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI4CnRyYWl0IFRyYWl0IHsgfQoKc3RydWN0IFR3b0JvdW5kczwnYSwgJ2IsIFQ6IFNpemVkICsgJ2EgKyAnYj4gewogICAgeDogJidhIGkzMiwKICAgIHk6ICYnYiBpMzIsCiAgICB6OiBULAp9Cgp0eXBlIEZvbzwnYSwgJ2I+ID0gVHdvQm91bmRzPCdhLCAnYiwgZHluIFRyYWl0PjsKYGBgCgpXaGVuIGEgdHJhaXQgb2JqZWN0IGlzIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IG9mIGEgZ2VuZXJpYyB0eXBlLCBSdXN0IHdpbGwgdHJ5CnRvIGluZmVyIGl0cyBsaWZldGltZSBpZiB1bnNwZWNpZmllZC4gSG93ZXZlciwgdGhpcyBpc24ndCBwb3NzaWJsZSB3aGVuIHRoZQpjb250YWluaW5nIHR5cGUgaGFzIG1vcmUgdGhhbiBvbmUgbGlmZXRpbWUgYm91bmQuCgpUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgcmVzb2x2ZWQgYnkgZWl0aGVyIHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgbGlmZXRpbWUKYm91bmRzIHRvIG9uZSBvciBieSBtYWtpbmcgdGhlIHRyYWl0IG9iamVjdCBsaWZldGltZSBleHBsaWNpdCwgbGlrZSBzbzoKCmBgYAp0cmFpdCBUcmFpdCB7IH0KCnN0cnVjdCBUd29Cb3VuZHM8J2EsICdiLCBUOiBTaXplZCArICdhICsgJ2I+IHsKICAgIHg6ICYnYSBpMzIsCiAgICB5OiAmJ2IgaTMyLAogICAgejogVCwKfQoKdHlwZSBGb288J2EsICdiPiA9IFR3b0JvdW5kczwnYSwgJ2IsIGR5biBUcmFpdCArICdiPjsKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSRkMgNTk5XSBhbmQgaXRzIGFtZW5kbWVudCBbUkZDIDExNTZdLgoKW1JGQyA1OTldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNTk5LWRlZmF1bHQtb2JqZWN0LWJvdW5kLm1kCltSRkMgMTE1Nl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzExNTYtYWRqdXN0LWRlZmF1bHQtb2JqZWN0LWJvdW5kcy5tZAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB8MIAAEAwwjlAQCMMCYAAMQDAAIHAMUDAQADAO0CDgAAwwMCBQEEU29tZQEBALQJAAHEAwADAO0CDgACwwMAAQMA2AIkAADCAwEBALQJAALkAQDZAhIAALQJBQEFRTAyMjgAAR8FAAEABQMA2AIkAADCAwEBAbkJAAHDAwDnAQC7MCYAAMkDAAAC5wEAuzAmAAC0CQUBzQVBbiBhc3NvY2lhdGVkIHR5cGUgYmluZGluZyB3YXMgZG9uZSBvdXRzaWRlIG9mIHRoZSB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvbgphbmQgYHdoZXJlYCBjbGF1c2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI5CnB1YiB0cmFpdCBGb28gewogICAgdHlwZSBBOwogICAgZm4gYm9vKCZzZWxmKSAtPiA8U2VsZiBhcyBGb28+OjpBOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIGlzaXplIHsKICAgIHR5cGUgQSA9IHVzaXplOwogICAgZm4gYm9vKCZzZWxmKSAtPiB1c2l6ZSB7IDQyIH0KfQoKZm4gYmF6PEk+KHg6ICY8SSBhcyBGb288QT1CYXI+Pjo6QSkge30KLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBiaW5kaW5ncyBhcmUgbm90IGFsbG93ZWQgaGVyZQpgYGAKClRvIHNvbHZlIHRoaXMgZXJyb3IsIHBsZWFzZSBtb3ZlIHRoZSB0eXBlIGJpbmRpbmdzIGluIHRoZSB0eXBlIHBhcmFtZXRlcgpkZWNsYXJhdGlvbjoKCmBgYAojIHN0cnVjdCBCYXI7CiMgdHJhaXQgRm9vIHsgdHlwZSBBOyB9CmZuIGJhejxJOiBGb288QT1CYXI+Pih4OiAmPEkgYXMgRm9vPjo6QSkge30gLy8gb2shCmBgYAoKT3IgaW4gdGhlIGB3aGVyZWAgY2xhdXNlOgoKYGBgCiMgc3RydWN0IEJhcjsKIyB0cmFpdCBGb28geyB0eXBlIEE7IH0KZm4gYmF6PEk+KHg6ICY8SSBhcyBGb28+OjpBKSB3aGVyZSBJOiBGb288QT1CYXI+IHt9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NBQABAM0F5wEAuzAmAADIAwACBwDJAwEAAwDtAg4AAMcDAgUBBFNvbWUBAQC0CQAByAMAAwDtAg4AAscDAAEDANgCJAAAxgMBAQC0CQAC5gEA2QISAAC0CQUBBUUwMjI5AAEfBQABAAUDANgCJAAAxgMBAQG5CQABxwMA6QEA6jAmAADNAwAAAukBAOowJgAAtAkFAf4IVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzAKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se0J9PmAiXSAvLyBlcnJvcgp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKVGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgY29udGFpbiBhbiBpZGVudGlmaWVyIHdoaWNoIGRvZXNuJ3QKbWF0Y2ggd2l0aCBhbnkgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBvciB0aGUgc3RyaW5nIGBTZWxmYC4gVGhpcyBtaWdodCBoYXBwZW4KaWYgeW91IG1pc3NwZWxsZWQgYSB0eXBlIHBhcmFtZXRlciwgb3IgaWYgeW91IGludGVuZGVkIHRvIHVzZSBsaXRlcmFsIGN1cmx5CmJyYWNlcy4gSWYgaXQgaXMgdGhlIGxhdHRlciwgZXNjYXBlIHRoZSBjdXJseSBicmFjZXMgd2l0aCBhIHNlY29uZCBjdXJseSBicmFjZQpvZiB0aGUgc2FtZSB0eXBlOyBlLmcuLCBhIGxpdGVyYWwgYHtgIGlzIGB7e2AuCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z/+CAABAP4I6QEA6jAmAADMAwACBwDNAwEAAwDtAg4AAMsDAgUBBFNvbWUBAQC0CQABzAMAAwDtAg4AAssDAAEDANgCJAAAygMBAQC0CQAC6AEA2QISAAC0CQUBBUUwMjMwAAEfBQABAAUDANgCJAAAygMBAQG5CQABywMA6wEAmTEmAADRAwAAAusBAJkxJgAAtAkFAd4HVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzEKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se30+YCJdIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgZG8gbm90IGNvbnRhaW4gYW4gaWRlbnRpZmllci4gUGxlYXNlCmFkZCBvbmUgb2YgdGhlIHNhbWUgbmFtZSBhcyBhIHR5cGUgcGFyYW1ldGVyLiBJZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGxpdGVyYWwKYnJhY2VzLCB1c2UgYHt7YCBhbmQgYH19YCB0byBlc2NhcGUgdGhlbS4KABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94HAAEA3gfrAQCZMSYAANADAAIHANEDAQADAO0CDgAAzwMCBQEEU29tZQEBALQJAAHQAwADAO0CDgACzwMAAQMA2AIkAADOAwEBALQJAALqAQDZAhIAALQJBQEFRTAyMzEAAR8FAAEABQMA2AIkAADOAwEBAbkJAAHPAwDtAQDIMSYAANUDAAAC7QEAyDEmAAC0CQUBkgVUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMgojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZChsb3JlbT0iIildIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uIHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKRm9yIHRoaXMgdG8gd29yaywgc29tZSBub3RlIG11c3QgYmUgc3BlY2lmaWVkLiBBbiBlbXB0eSBhdHRyaWJ1dGUgd2lsbCBub3QgZG8KYW55dGhpbmcsIHBsZWFzZSByZW1vdmUgdGhlIGF0dHJpYnV0ZSBvciBhZGQgc29tZSBoZWxwZnVsIG5vdGUgZm9yIHVzZXJzIG9mIHRoZQp0cmFpdC4KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgUAAQCSBe0BAMgxJgAA1AMAAgcA1QMBAAMA7QIOAADTAwIFAQRTb21lAQEAtAkAAdQDAAMA7QIOAALTAwABAwDYAiQAANIDAQEAtAkAAuwBANkCEgAAtAkFAQVFMDIzMgABHwUAAQAFAwDYAiQAANIDAQEBuQkAAdMDAO8BAPcxJgAA2QMAAALvAQD3MSYAALQJBQHjAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGVub3VnaCB0eXBlIHBhcmFtZXRlcnMgd2VyZSBmb3VuZCBpbiBhIHR5cGUgb3IKdHJhaXQuCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHN0cnVjdCBiZWxvdyBpcyBkZWZpbmVkIHRvIGJlIGdlbmVyaWMgaW4gYFRgLCBidXQgdGhlCnR5cGUgcGFyYW1ldGVyIGlzIG1pc3NpbmcgaW4gdGhlIGRlZmluaXRpb24gb2YgYEJhcmA6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKc3RydWN0IEZvbzxUPiB7IHg6IFQgfQoKc3RydWN0IEJhciB7IHg6IEZvbyB9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////3/jAgABAOMC7wEA9zEmAADYAwACBwDZAwEAAwDtAg4AANcDAgUBBFNvbWUBAQC0CQAB2AMAAwDtAg4AAtcDAAEDANgCJAAA1gMBAQC0CQAC7gEA2QISAAC0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bzo6YmF6OyAvLyBvayEKfQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x+oBQABAKgF9QEAhDMmAADkAwACBwDlAwEAAwDtAg4AAOMDAgUBBFNvbWUBAQC0CQAB5AMAAwDtAg4AAuMDAAEDANgCJAAA4gMBAQC0CQAC9AEA2QISAAC0CQUBBUUwMjUyAAEfBQABAAUDANgCJAAA4gMBAQG5CQAB4wMA9wEAszMmAADpAwAAAvcBALMzJgAAtAkFAZsDQXR0ZW1wdCB3YXMgbWFkZSB0byBpbXBvcnQgYW4gdW5pbXBvcnRhYmxlIHZhbHVlLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0cnlpbmcKdG8gaW1wb3J0IGEgbWV0aG9kIGZyb20gYSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTMKbW9kIGZvbyB7CiAgICBwdWIgdHJhaXQgTXlUcmFpdCB7CiAgICAgICAgZm4gZG9fc29tZXRoaW5nKCk7CiAgICB9Cn0KCnVzZSBmb286Ok15VHJhaXQ6OmRvX3NvbWV0aGluZzsKLy8gZXJyb3I6IGBkb19zb21ldGhpbmdgIGlzIG5vdCBkaXJlY3RseSBpbXBvcnRhYmxlCgpmbiBtYWluKCkge30KYGBgCgpJdCdzIGludmFsaWQgdG8gZGlyZWN0bHkgaW1wb3J0IG1ldGhvZHMgYmVsb25naW5nIHRvIGEgdHJhaXQgb3IgY29uY3JldGUgdHlwZS4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwMAAQCbA/cBALMzJgAA6AMAAgcA6QMBAAMA7QIOAADnAwIFAQRTb21lAQEAtAkAAegDAAMA7QIOAALnAwABAwDYAiQAAOYDAQEAtAkAAvYBANkCEgAAtAkFAQVFMDI1MwABHwUAAQAFAwDYAiQAAOYDAQEBuQkAAecDAPkBAOIzJgAA7QMAAAL5AQDiMyYAALQJBQHYBEF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wb3J0IGFuIGl0ZW0gd2hlcmVhcyBhbiBleHRlcm4gY3JhdGUgd2l0aCB0aGlzIG5hbWUgaGFzCmFscmVhZHkgYmVlbiBpbXBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTQKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBjb3JlIHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6Y29yZTsgIC8vIGVycm9yOiBhbiBleHRlcm4gY3JhdGUgbmFtZWQgYGNvcmVgIGhhcyBhbHJlYWR5CiAgICAgICAgICAgICAgICAvLyAgICAgICAgYmVlbiBpbXBvcnRlZCBpbiB0aGlzIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBoYXZlIHRvIHJlbmFtZSBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBpbXBvcnRzLgpFeGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlIGFzIGxpYmNvcmU7IC8vIG9rIQoKbW9kIGZvbyB7CiAgICBwdWIgdHJhaXQgY29yZSB7CiAgICAgICAgZm4gZG9fc29tZXRoaW5nKCk7CiAgICB9Cn0KCnVzZSBmb286OmNvcmU7CgpmbiBtYWluKCkge30KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////B9gEAAEA2AT5AQDiMyYAAOwDAAIHAO0DAQADAO0CDgAA6wMCBQEEU29tZQEBALQJAAHsAwADAO0CDgAC6wMAAQMA2AIkAADqAwEBALQJAAL4AQDZAhIAALQJBQEFRTAyNTQAAR8FAAEABQMA2AIkAADqAwEBAbkJAAHrAwD7AQCRNCYAAPEDAAAC+wEAkTQmAAC0CQUB3QRZb3UgY2FuJ3QgaW1wb3J0IGEgdmFsdWUgd2hvc2UgbmFtZSBpcyB0aGUgc2FtZSBhcyBhbm90aGVyIHZhbHVlIGRlZmluZWQgaW4gdGhlCm1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTUKdXNlIGJhcjo6Zm9vOyAvLyBlcnJvcjogYW4gaXRlbSBuYW1lZCBgZm9vYCBpcyBhbHJlYWR5IGluIHNjb3BlCgpmbiBmb28oKSB7fQoKbW9kIGJhciB7CiAgICAgcHViIGZuIGZvbygpIHt9Cn0KCmZuIG1haW4oKSB7fQpgYGAKCllvdSBjYW4gdXNlIGFsaWFzZXMgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKdXNlIGJhcjo6Zm9vIGFzIGJhcl9mb287IC8vIG9rIQoKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkge30KYGBgCgpPciB5b3UgY2FuIHJlZmVyZW5jZSB0aGUgaXRlbSB3aXRoIGl0cyBwYXJlbnQ6CgpgYGAKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkgewogICAgYmFyOjpmb28oKTsgLy8gd2UgZ2V0IHRoZSBpdGVtIGJ5IHJlZmVycmluZyB0byBpdHMgcGFyZW50Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBAABAN0E+wEAkTQmAADwAwACBwDxAwEAAwDtAg4AAO8DAgUBBFNvbWUBAQC0CQAB8AMAAwDtAg4AAu8DAAEDANgCJAAA7gMBAQC0CQAC+gEA2QISAAC0CQUBBUUwMjU1AAEfBQABAAUDANgCJAAA7gMBAQG5CQAB7wMA/QEAwDQmAAD1AwAAAv0BAMA0JgAAtAkFAdQCIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGNhbid0IGltcG9ydCBhIHR5cGUgb3IgbW9kdWxlIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGl0ZW0gYmVpbmcgaW1wb3J0ZWQgaXMKdGhlIHNhbWUgYXMgYW5vdGhlciB0eXBlIG9yIHN1Ym1vZHVsZSBkZWZpbmVkIGluIHRoZSBtb2R1bGUuCgpBbiBleGFtcGxlIG9mIHRoaXMgZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwKdXNlIGZvbzo6QmFyOyAvLyBlcnJvcgoKdHlwZSBCYXIgPSB1MzI7Cgptb2QgZm9vIHsKICAgIHB1YiBtb2QgQmFyIHsgfQp9CgpmbiBtYWluKCkge30KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//z/UAgABANQC/QEAwDQmAAD0AwACBwD1AwEAAwDtAg4AAPMDAgUBBFNvbWUBAQC0CQAB9AMAAwDtAg4AAvMDAAEDANgCJAAA8gMBAQC0CQAC/AEA2QISAAC0CQUBBUUwMjU2AAEfBQABAAUDANgCJAAA8gMBAQG5CQAB8wMA/wEA7zQmAAD5AwAAAv8BAO80JgAAtAkFAcMDVGhlIG5hbWUgY2hvc2VuIGZvciBhbiBleHRlcm5hbCBjcmF0ZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4dGVybmFsIGNyYXRlCnRoYXQgaGFzIGJlZW4gaW1wb3J0ZWQgaW50byB0aGUgY3VycmVudCBtb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjU5CmV4dGVybiBjcmF0ZSBjb3JlOwpleHRlcm4gY3JhdGUgc3RkIGFzIGNvcmU7CgpmbiBtYWluKCkge30KYGBgCgpUaGUgc29sdXRpb24gaXMgdG8gY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUgdGhhdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggYW55CmV4dGVybmFsIGNyYXRlIGltcG9ydGVkIGludG8gdGhlIGN1cnJlbnQgbW9kdWxlLgoKQ29ycmVjdCBleGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlOwpleHRlcm4gY3JhdGUgc3RkIGFzIG90aGVyX25hbWU7CgpmbiBtYWluKCkge30KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQfDAwABAMMD/wEA7zQmAAD4AwACBwD5AwEAAwDtAg4AAPcDAgUBBFNvbWUBAQC0CQAB+AMAAwDtAg4AAvcDAAEDANgCJAAA9gMBAQC0CQAC/gEA2QISAAC0CQUBBUUwMjU5AAEfBQABAAUDANgCJAAA9gMBAQG5CQAB9wMAgQIAnjUmAAD9AwAAAoECAJ41JgAAtAkFAYoFVGhlIG5hbWUgZm9yIGFuIGl0ZW0gZGVjbGFyYXRpb24gY29uZmxpY3RzIHdpdGggYW4gZXh0ZXJuYWwgY3JhdGUncyBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MApleHRlcm4gY3JhdGUgY29yZTsKCnN0cnVjdCBjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBzb2x1dGlvbnM6CgpTb2x1dGlvbiAjMTogUmVuYW1lIHRoZSBpdGVtLgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlOwoKc3RydWN0IHh5ejsKYGBgCgpTb2x1dGlvbiAjMjogSW1wb3J0IHRoZSBjcmF0ZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCgpgYGAKZXh0ZXJuIGNyYXRlIGNvcmUgYXMgeHl6OwoKc3RydWN0IGFiYzsKYGBgCgpTZWUgdGhlIFtEZWNsYXJhdGlvbiBTdGF0ZW1lbnRzXVtkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXSBzZWN0aW9uIG9mIHRoZQpyZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhbiBpdGVtIGRlY2xhcmF0aW9uCmFuZCB3aGF0IGRvZXMgbm90LgoKW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9zdGF0ZW1lbnRzLmh0bWwjZGVjbGFyYXRpb24tc3RhdGVtZW50cwoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/B4oFAAEAigWBAgCeNSYAAPwDAAIHAP0DAQADAO0CDgAA+wMCBQEEU29tZQEBALQJAAH8AwADAO0CDgAC+wMAAQMA2AIkAAD6AwEBALQJAAKAAgDZAhIAALQJBQEFRTAyNjAAAR8FAAEABQMA2AIkAAD6AwEBAbkJAAH7AwCDAgDNNSYAAIEEAAACgwIAzTUmAAC0CQUB5QZBbiB1bmRlY2xhcmVkIGxpZmV0aW1lIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MQovLyBlcnJvciwgdXNlIG9mIHVuZGVjbGFyZWQgbGlmZXRpbWUgbmFtZSBgJ2FgCmZuIGZvbyh4OiAmJ2Egc3RyKSB7IH0KCnN0cnVjdCBGb28gewogICAgLy8gZXJyb3IsIHVzZSBvZiB1bmRlY2xhcmVkIGxpZmV0aW1lIG5hbWUgYCdhYAogICAgeDogJidhIHN0ciwKfQpgYGAKClRoZXNlIGNhbiBiZSBmaXhlZCBieSBkZWNsYXJpbmcgbGlmZXRpbWUgcGFyYW1ldGVyczoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgpmbiBmb288J2E+KHg6ICYnYSBzdHIpIHt9CmBgYAoKSW1wbCBibG9ja3MgZGVjbGFyZSBsaWZldGltZSBwYXJhbWV0ZXJzIHNlcGFyYXRlbHkuIFlvdSBuZWVkIHRvIGFkZCBsaWZldGltZQpwYXJhbWV0ZXJzIHRvIGFuIGltcGwgYmxvY2sgaWYgeW91J3JlIGltcGxlbWVudGluZyBhIHR5cGUgdGhhdCBoYXMgYSBsaWZldGltZQpwYXJhbWV0ZXIgb2YgaXRzIG93bi4KRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjEKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIHN0ciwKfQoKLy8gZXJyb3IsICB1c2Ugb2YgdW5kZWNsYXJlZCBsaWZldGltZSBuYW1lIGAnYWAKaW1wbCBGb288J2E+IHsKICAgIGZuIGZvbzwnYT4oeDogJidhIHN0cikge30KfQpgYGAKClRoaXMgaXMgZml4ZWQgYnkgZGVjbGFyaW5nIHRoZSBpbXBsIGJsb2NrIGxpa2UgdGhpczoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgovLyBjb3JyZWN0CmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gZm9vKHg6ICYnYSBzdHIpIHt9Cn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////A+UGAAEA5QaDAgDNNSYAAIAEAAIHAIEEAQADAO0CDgAA/wMCBQEEU29tZQEBALQJAAGABAADAO0CDgAC/wMAAQMA2AIkAAD+AwEBALQJAAKCAgDZAhIAALQJBQEFRTAyNjEAAR8FAAEABQMA2AIkAAD+AwEBAbkJAAH/AwCFAgD8NSYAAIUEAAAChQIA/DUmAAC0CQUBjgNBbiBpbnZhbGlkIG5hbWUgd2FzIHVzZWQgZm9yIGEgbGlmZXRpbWUgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MgovLyBlcnJvciwgaW52YWxpZCBsaWZldGltZSBwYXJhbWV0ZXIgbmFtZSBgJ3N0YXRpY2AKZm4gZm9vPCdzdGF0aWM+KHg6ICYnc3RhdGljIHN0cikgeyB9CmBgYAoKRGVjbGFyaW5nIGNlcnRhaW4gbGlmZXRpbWUgbmFtZXMgaW4gcGFyYW1ldGVycyBpcyBkaXNhbGxvd2VkLiBGb3IgZXhhbXBsZSwKYmVjYXVzZSB0aGUgYCdzdGF0aWNgIGxpZmV0aW1lIGlzIGEgc3BlY2lhbCBidWlsdC1pbiBsaWZldGltZSBuYW1lIGRlbm90aW5nCnRoZSBsaWZldGltZSBvZiB0aGUgZW50aXJlIHByb2dyYW0sIHRoaXMgaXMgYW4gZXJyb3I6CgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/3+OAwABAI4DhQIA/DUmAACEBAACBwCFBAEAAwDtAg4AAIMEAgUBBFNvbWUBAQC0CQABhAQAAwDtAg4AAoMEAAEDANgCJAAAggQBAQC0CQAChAIA2QISAAC0CQUBBUUwMjYyAAEfBQABAAUDANgCJAAAggQBAQG5CQABgwQAhwIAqzYmAACJBAAAAocCAKs2JgAAtAkFAYUDQSBsaWZldGltZSB3YXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjYzCmZuIGZvbzwnYSwgJ2IsICdhPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyLCB6OiAmJ2Egc3RyKSB7IC8vIGVycm9yIQp9CmBgYAoKVHdvIGxpZmV0aW1lcyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBuYW1lLiBUbyBmaXggdGhpcyBleGFtcGxlLCBjaGFuZ2UKdGhlIHNlY29uZCBgJ2FgIGxpZmV0aW1lIGludG8gc29tZXRoaW5nIGVsc2UgKGAnY2AgZm9yIGV4YW1wbGUpOgoKYGBgCmZuIGZvbzwnYSwgJ2IsICdjPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyLCB6OiAmJ2Mgc3RyKSB7IC8vIG9rIQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////AR+FAwABAIUDhwIAqzYmAACIBAACBwCJBAEAAwDtAg4AAIcEAgUBBFNvbWUBAQC0CQABiAQAAwDtAg4AAocEAAEDANgCJAAAhgQBAQC0CQAChgIA2QISAAC0CQUBBUUwMjYzAAEfBQABAAUDANgCJAAAhgQBAQG5CQABhwQAiQIA2jYmAACNBAAAAokCANo2JgAAtAkFAaoDQW4gdW5rbm93biBleHRlcm5hbCBsYW5nIGl0ZW0gd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjY0CiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgpleHRlcm4gIkMiIHsKICAgICNbbGFuZyA9ICJjYWtlIl0gLy8gZXJyb3I6IHVua25vd24gZXh0ZXJuYWwgbGFuZyBpdGVtOiBgY2FrZWAKICAgIGZuIGNha2UoKTsKfQpgYGAKCkEgbGlzdCBvZiBhdmFpbGFibGUgZXh0ZXJuYWwgbGFuZyBpdGVtcyBpcyBhdmFpbGFibGUgaW4KYHNyYy9saWJydXN0Y19taWRkbGUvbWlkZGxlL3dlYWtfbGFuZ19pdGVtcy5yc2AuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCmV4dGVybiAiQyIgewogICAgI1tsYW5nID0gInBhbmljX2ltcGwiXSAvLyBvayEKICAgIGZuIGNha2UoKTsKfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3+qAwABAKoDiQIA2jYmAACMBAACBwCNBAEAAwDtAg4AAIsEAgUBBFNvbWUBAQC0CQABjAQAAwDtAg4AAosEAAEDANgCJAAAigQBAQC0CQACiAIA2QISAAC0CQUBBUUwMjY0AAEfBQABAAUDANgCJAAAigQBAQG5CQABiwQAiwIAiTcmAACRBAAAAosCAIk3JgAAtAkFAeQDQSBsb29wIGtleXdvcmQgKGBicmVha2Agb3IgYGNvbnRpbnVlYCkgd2FzIHVzZWQgaW5zaWRlIGEgY2xvc3VyZSBidXQgb3V0c2lkZSBvZgphbnkgbG9vcC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjcKbGV0IHcgPSB8fCB7IGJyZWFrOyB9OyAvLyBlcnJvcjogYGJyZWFrYCBpbnNpZGUgb2YgYSBjbG9zdXJlCmBgYAoKYGJyZWFrYCBhbmQgYGNvbnRpbnVlYCBrZXl3b3JkcyBjYW4gYmUgdXNlZCBhcyBub3JtYWwgaW5zaWRlIGNsb3N1cmVzIGFzIGxvbmcgYXMKdGhleSBhcmUgYWxzbyBjb250YWluZWQgd2l0aGluIGEgbG9vcC4gVG8gaGFsdCB0aGUgZXhlY3V0aW9uIG9mIGEgY2xvc3VyZSB5b3UKc2hvdWxkIGluc3RlYWQgdXNlIGEgcmV0dXJuIHN0YXRlbWVudC4gRXhhbXBsZToKCmBgYApsZXQgdyA9IHx8IHsKICAgIGZvciBfIGluIDAuLjEwIHsKICAgICAgICBicmVhazsKICAgIH0KfTsKCncoKTsKYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////AeQDAAEA5AOLAgCJNyYAAJAEAAIHAJEEAQADAO0CDgAAjwQCBQEEU29tZQEBALQJAAGQBAADAO0CDgACjwQAAQMA2AIkAACOBAEBALQJAAKKAgDZAhIAALQJBQEFRTAyNjcAAR8FAAEABQMA2AIkAACOBAEBAbkJAAGPBACNAgC4NyYAAJUEAAACjQIAuDcmAAC0CQUBpwNBIGxvb3Aga2V5d29yZCAoYGJyZWFrYCBvciBgY29udGludWVgKSB3YXMgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjgKZm4gc29tZV9mdW5jKCkgewogICAgYnJlYWs7IC8vIGVycm9yOiBgYnJlYWtgIG91dHNpZGUgb2YgYSBsb29wCn0KYGBgCgpXaXRob3V0IGEgbG9vcCB0byBicmVhayBvdXQgb2Ygb3IgY29udGludWUgaW4sIG5vIHNlbnNpYmxlIGFjdGlvbiBjYW4gYmUgdGFrZW4uClBsZWFzZSB2ZXJpZnkgdGhhdCB5b3UgYXJlIHVzaW5nIGBicmVha2AgYW5kIGBjb250aW51ZWAgb25seSBpbiBsb29wcy4gRXhhbXBsZToKCmBgYApmbiBzb21lX2Z1bmMoKSB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7IC8vIG9rIQogICAgfQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cDAAEApwONAgC4NyYAAJQEAAIHAJUEAQADAO0CDgAAkwQCBQEEU29tZQEBALQJAAGUBAADAO0CDgACkwQAAQMA2AIkAACSBAEBALQJAAKMAgDZAhIAALQJBQEFRTAyNjgAAR8FAAEABQMA2AIkAACSBAEBAbkJAAGTBACPAgDnNyYAAJkEAAACjwIA5zcmAAC0CQUBnA9BIHR5cGUgbWlzbWF0Y2hlZCBhbiBhc3NvY2lhdGVkIHR5cGUgb2YgYSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzEKdHJhaXQgVHJhaXQgeyB0eXBlIEFzc29jaWF0ZWRUeXBlOyB9CgpmbiBmb288VD4odDogVCkgd2hlcmUgVDogVHJhaXQ8QXNzb2NpYXRlZFR5cGU9dTMyPiB7Ci8vICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fiB+fn5+fn5+fn5+fn5+fn5+fn4KLy8gICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAovLyAgICAgICAgIFRoaXMgc2F5cyBgZm9vYCBjYW4gICAgICAgICB8Ci8vICAgICAgICAgICBvbmx5IGJlIHVzZWQgd2l0aCAgICAgICAgIHwKLy8gICAgICAgICAgICAgIHNvbWUgdHlwZSB0aGF0ICAgICAgICAgfAovLyAgICAgICAgIGltcGxlbWVudHMgYFRyYWl0YC4gICAgICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2F5cyBub3Qgb25seSBtdXN0Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVGAgYmUgYW4gaW1wbCBvZiBgVHJhaXRgCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgYWxzbyB0aGF0IHRoZSBpbXBsCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGFzc2lnbiB0aGUgdHlwZSBgdTMyYAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGFzc29jaWF0ZWQgdHlwZS4KICAgIHByaW50bG4hKCJpbiBmb28iKTsKfQoKaW1wbCBUcmFpdCBmb3IgaTggeyB0eXBlIEFzc29jaWF0ZWRUeXBlID0gJidzdGF0aWMgc3RyOyB9Ci8vfn5+fn5+fn5+fn5+fn5+ICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIGBpOGAgZG9lcyBoYXZlICAgICAgICAgICAgICAgICAgICAgfAovLyBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgIHwKLy8gb2YgYFRyYWl0YC4uLiAgICAgICAgICAgICAgICAgICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICAgLi4uIGJ1dCBpdCBpcyBhbiBpbXBsZW1lbnRhdGlvbgovLyAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzaWducyBgJidzdGF0aWMgc3RyYCB0bwovLyAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIHR5cGUuCgpmb28oM19pOCk7Ci8vIEhlcmUsIHdlIGludm9rZSBgZm9vYCB3aXRoIGFuIGBpOGAsIHdoaWNoIGRvZXMgbm90IHNhdGlzZnkKLy8gdGhlIGNvbnN0cmFpbnQgYDxpOCBhcyBUcmFpdD46OkFzc29jaWF0ZWRUeXBlPXUzMmAsIGFuZAovLyB0aGVyZWZvcmUgdGhlIHR5cGUtY2hlY2tlciBjb21wbGFpbnMgd2l0aCB0aGlzIGVycm9yIGNvZGUuCmBgYAoKVGhlIGlzc3VlIGNhbiBiZSByZXNvbHZlZCBieSBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCB0eXBlOgoxKSBpbiB0aGUgYGZvb2AgaW1wbGVtZW50YXRpb246CmBgYAp0cmFpdCBUcmFpdCB7IHR5cGUgQXNzb2NpYXRlZFR5cGU7IH0KCmZuIGZvbzxUPih0OiBUKSB3aGVyZSBUOiBUcmFpdDxBc3NvY2lhdGVkVHlwZSA9ICYnc3RhdGljIHN0cj4gewogICAgcHJpbnRsbiEoImluIGZvbyIpOwp9CgppbXBsIFRyYWl0IGZvciBpOCB7IHR5cGUgQXNzb2NpYXRlZFR5cGUgPSAmJ3N0YXRpYyBzdHI7IH0KCmZvbygzX2k4KTsKYGBgCgoyKSBpbiB0aGUgYFRyYWl0YCBpbXBsZW1lbnRhdGlvbiBmb3IgYGk4YDoKYGBgCnRyYWl0IFRyYWl0IHsgdHlwZSBBc3NvY2lhdGVkVHlwZTsgfQoKZm4gZm9vPFQ+KHQ6IFQpIHdoZXJlIFQ6IFRyYWl0PEFzc29jaWF0ZWRUeXBlID0gdTMyPiB7CiAgICBwcmludGxuISgiaW4gZm9vIik7Cn0KCmltcGwgVHJhaXQgZm9yIGk4IHsgdHlwZSBBc3NvY2lhdGVkVHlwZSA9IHUzMjsgfQoKZm9vKDNfaTgpOwpgYGAKAB////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/nA8AAQCcD48CAOc3JgAAmAQAAgcAmQQBAAMA7QIOAACXBAIFAQRTb21lAQEAtAkAAZgEAAMA7QIOAAKXBAABAwDYAiQAAJYEAQEAtAkAAo4CANkCEgAAtAkFAQVFMDI3MQABHwUAAQAFAwDYAiQAAJYEAQEBuQkAAZcEAJECAJY4JgAAnQQAAAKRAgCWOCYAALQJBQHhBUFuIGV2YWx1YXRpb24gb2YgYSB0cmFpdCByZXF1aXJlbWVudCBvdmVyZmxvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3NQp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8VD4oVCk7CgppbXBsPFQ+IEZvbyBmb3IgVCB3aGVyZSBCYXI8VD46IEZvbyB7fQpgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdGhlcmUgd2FzIGEgcmVjdXJzaXZlIHRyYWl0IHJlcXVpcmVtZW50IHRoYXQgb3ZlcmZsb3dlZApiZWZvcmUgaXQgY291bGQgYmUgZXZhbHVhdGVkLiBUaGlzIG9mdGVuIG1lYW5zIHRoYXQgdGhlcmUgaXMgYW4gdW5ib3VuZGVkCnJlY3Vyc2lvbiBpbiByZXNvbHZpbmcgc29tZSB0eXBlIGJvdW5kcy4KClRvIGRldGVybWluZSBpZiBhIGBUYCBpcyBgRm9vYCwgd2UgbmVlZCB0byBjaGVjayBpZiBgQmFyPFQ+YCBpcyBgRm9vYC4gSG93ZXZlciwKdG8gZG8gdGhpcyBjaGVjaywgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhhdCBgQmFyPEJhcjxUPj5gIGlzIGBGb29gLiBUbwpkZXRlcm1pbmUgdGhpcywgd2UgY2hlY2sgaWYgYEJhcjxCYXI8QmFyPFQ+Pj5gIGlzIGBGb29gLCBhbmQgc28gb24uIFRoaXMgaXMKY2xlYXJseSBhIHJlY3Vyc2l2ZSByZXF1aXJlbWVudCB0aGF0IGNhbid0IGJlIHJlc29sdmVkIGRpcmVjdGx5LgoKQ29uc2lkZXIgY2hhbmdpbmcgeW91ciB0cmFpdCBib3VuZHMgc28gdGhhdCB0aGV5J3JlIGxlc3Mgc2VsZi1yZWZlcmVudGlhbC4KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8f4QUAAQDhBZECAJY4JgAAnAQAAgcAnQQBAAMA7QIOAACbBAIFAQRTb21lAQEAtAkAAZwEAAMA7QIOAAKbBAABAwDYAiQAAJoEAQEAtAkAApACANkCEgAAtAkFAQVFMDI3NQABHwUAAQAFAwDYAiQAAJoEAQEBuQkAAZsEAJMCAMU4JgAAoQQAAAKTAgDFOCYAALQJBQG3BEEgdHJhaXQgaW1wbGVtZW50YXRpb24gaGFzIHN0cmljdGVyIHJlcXVpcmVtZW50cyB0aGFuIHRoZSB0cmFpdCBkZWZpbml0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3Ngp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ+KHg6IFQpOwp9CgppbXBsIEZvbyBmb3IgYm9vbCB7CiAgICBmbiBmb288VD4oeDogVCkgd2hlcmUgVDogQ29weSB7fQp9CmBgYAoKSGVyZSwgYWxsIHR5cGVzIGltcGxlbWVudGluZyBgRm9vYCBtdXN0IGhhdmUgYSBtZXRob2QgYGZvbzxUPih4OiBUKWAgd2hpY2ggY2FuCnRha2UgYW55IHR5cGUgYFRgLiBIb3dldmVyLCBpbiB0aGUgYGltcGxgIGZvciBgYm9vbGAsIHdlIGhhdmUgYWRkZWQgYW4gZXh0cmEKYm91bmQgdGhhdCBgVGAgaXMgYENvcHlgLCB3aGljaCBpc24ndCBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIHRyYWl0LgoKQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGJvdW5kIGZyb20gdGhlIG1ldGhvZCBvciBhZGRpbmcgdGhlIGJvdW5kIHRvIHRoZSBvcmlnaW5hbAptZXRob2QgZGVmaW5pdGlvbiBpbiB0aGUgdHJhaXQuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cEAAEAtwSTAgDFOCYAAKAEAAIHAKEEAQADAO0CDgAAnwQCBQEEU29tZQEBALQJAAGgBAADAO0CDgACnwQAAQMA2AIkAACeBAEBALQJAAKSAgDZAhIAALQJBQEFRTAyNzYAAR8FAAEABQMA2AIkAACeBAEBAbkJAAGfBACVAgD0OCYAAKUEAAAClQIA9DgmAAC0CQUB8xBZb3UgdHJpZWQgdG8gdXNlIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBzb21lIHRyYWl0IGluIGEgcGxhY2Ugd2hpY2gKZXhwZWN0ZWQgdGhhdCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzcKLy8gaGVyZSB3ZSBkZWNsYXJlIHRoZSBGb28gdHJhaXQgd2l0aCBhIGJhciBtZXRob2QKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCi8vIHdlIG5vdyBkZWNsYXJlIGEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgRm9vIHRyYWl0CmZuIHNvbWVfZnVuYzxUOiBGb28+KGZvbzogVCkgewogICAgZm9vLmJhcigpOwp9CgpmbiBtYWluKCkgewogICAgLy8gd2Ugbm93IGNhbGwgdGhlIG1ldGhvZCB3aXRoIHRoZSBpMzIgdHlwZSwgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQKICAgIC8vIHRoZSBGb28gdHJhaXQKICAgIHNvbWVfZnVuYyg1aTMyKTsgLy8gZXJyb3I6IHRoZSB0cmFpdCBib3VuZCBgaTMyIDogRm9vYCBpcyBub3Qgc2F0aXNmaWVkCn0KYGBgCgpJbiBvcmRlciB0byBmaXggdGhpcyBlcnJvciwgdmVyaWZ5IHRoYXQgdGhlIHR5cGUgeW91J3JlIHVzaW5nIGRvZXMgaW1wbGVtZW50CnRoZSB0cmFpdC4gRXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKLy8gd2UgaW1wbGVtZW50IHRoZSB0cmFpdCBvbiB0aGUgaTMyIHR5cGUKaW1wbCBGb28gZm9yIGkzMiB7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCmZuIHNvbWVfZnVuYzxUOiBGb28+KGZvbzogVCkgewogICAgZm9vLmJhcigpOyAvLyB3ZSBjYW4gbm93IHVzZSB0aGlzIG1ldGhvZCBzaW5jZSBpMzIgaW1wbGVtZW50cyB0aGUKICAgICAgICAgICAgICAgLy8gRm9vIHRyYWl0Cn0KCmZuIG1haW4oKSB7CiAgICBzb21lX2Z1bmMoNWkzMik7IC8vIG9rIQp9CmBgYAoKT3IgaW4gYSBnZW5lcmljIGNvbnRleHQsIGFuIGVycm9uZW91cyBjb2RlIGV4YW1wbGUgd291bGQgbG9vayBsaWtlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc3CmZuIHNvbWVfZnVuYzxUPihmb286IFQpIHsKICAgIHByaW50bG4hKCJ7Oj99IiwgZm9vKTsgLy8gZXJyb3I6IHRoZSB0cmFpdCBgY29yZTo6Zm10OjpEZWJ1Z2AgaXMgbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbXBsZW1lbnRlZCBmb3IgdGhlIHR5cGUgYFRgCn0KCmZuIG1haW4oKSB7CiAgICAvLyBXZSBub3cgY2FsbCB0aGUgbWV0aG9kIHdpdGggdGhlIGkzMiB0eXBlLAogICAgLy8gd2hpY2ggKmRvZXMqIGltcGxlbWVudCB0aGUgRGVidWcgdHJhaXQuCiAgICBzb21lX2Z1bmMoNWkzMik7Cn0KYGBgCgpOb3RlIHRoYXQgdGhlIGVycm9yIGhlcmUgaXMgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhlIGdlbmVyaWMgZnVuY3Rpb24uIEFsdGhvdWdoCndlIG9ubHkgY2FsbCBpdCB3aXRoIGEgcGFyYW1ldGVyIHRoYXQgZG9lcyBpbXBsZW1lbnQgYERlYnVnYCwgdGhlIGNvbXBpbGVyCnN0aWxsIHJlamVjdHMgdGhlIGZ1bmN0aW9uLiBJdCBtdXN0IHdvcmsgd2l0aCBhbGwgcG9zc2libGUgaW5wdXQgdHlwZXMuIEluCm9yZGVyIHRvIG1ha2UgdGhpcyBleGFtcGxlIGNvbXBpbGUsIHdlIG5lZWQgdG8gcmVzdHJpY3QgdGhlIGdlbmVyaWMgdHlwZSB3ZSdyZQphY2NlcHRpbmc6CgpgYGAKdXNlIHN0ZDo6Zm10OwoKLy8gUmVzdHJpY3QgdGhlIGlucHV0IHR5cGUgdG8gdHlwZXMgdGhhdCBpbXBsZW1lbnQgRGVidWcuCmZuIHNvbWVfZnVuYzxUOiBmbXQ6OkRlYnVnPihmb286IFQpIHsKICAgIHByaW50bG4hKCJ7Oj99IiwgZm9vKTsKfQoKZm4gbWFpbigpIHsKICAgIC8vIENhbGxpbmcgdGhlIG1ldGhvZCBpcyBzdGlsbCBmaW5lLCBhcyBpMzIgaW1wbGVtZW50cyBEZWJ1Zy4KICAgIHNvbWVfZnVuYyg1aTMyKTsKCiAgICAvLyBUaGlzIHdvdWxkIGZhaWwgdG8gY29tcGlsZSBub3c6CiAgICAvLyBzdHJ1Y3QgV2l0aG91dERlYnVnOwogICAgLy8gc29tZV9mdW5jKFdpdGhvdXREZWJ1Zyk7Cn0KYGBgCgpSdXN0IG9ubHkgbG9va3MgYXQgdGhlIHNpZ25hdHVyZSBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uLCBhcyBzdWNoIGl0IG11c3QKYWxyZWFkeSBzcGVjaWZ5IGFsbCByZXF1aXJlbWVudHMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGV2ZXJ5IHR5cGUgcGFyYW1ldGVyLgoAIv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8D8xAAAQDzEJUCAPQ4JgAApAQAAgcApQQBAAMA7QIOAACjBAIFAQRTb21lAQEAtAkAAaQEAAMA7QIOAAKjBAABAwDYAiQAAKIEAQEAtAkAApQCANkCEgAAtAkFAQVFMDI3NwABHwUAAQAFAwDYAiQAAKIEAQEBuQkAAaMEAJcCAKM5JgAAqQQAAAKXAgCjOSYAALQJBQGvBSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSB0cmllZCB0byBzdXBwbHkgYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IHNvbWUgdHJhaXQgaW4gYSBsb2NhdGlvbgp3aGljaCBleHBlY3RlZCB0aGF0IHRyYWl0LiBUaGlzIGVycm9yIHR5cGljYWxseSBvY2N1cnMgd2hlbiB3b3JraW5nIHdpdGgKYEZuYC1iYXNlZCB0eXBlcy4gRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApmbiBmb288RjogRm4odXNpemUpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICAvLyB0eXBlIG1pc21hdGNoOiAuLi4gaW1wbGVtZW50cyB0aGUgdHJhaXQgYGNvcmU6Om9wczo6Rm48KFN0cmluZywpPmAsCiAgICAvLyBidXQgdGhlIHRyYWl0IGBjb3JlOjpvcHM6OkZuPCh1c2l6ZSwpPmAgaXMgcmVxdWlyZWQKICAgIC8vIFtFMDI4MV0KICAgIGZvbyh8eTogU3RyaW5nfCB7IH0pOwp9CmBgYAoKVGhlIGlzc3VlIGluIHRoaXMgY2FzZSBpcyB0aGF0IGBmb29gIGlzIGRlZmluZWQgYXMgYWNjZXB0aW5nIGEgYEZuYCB3aXRoIG9uZQphcmd1bWVudCBvZiB0eXBlIGBTdHJpbmdgLCBidXQgdGhlIGNsb3N1cmUgd2UgYXR0ZW1wdGVkIHRvIHBhc3MgdG8gaXQgcmVxdWlyZXMKb25lIGFyZ3VtZW50cyBvZiB0eXBlIGB1c2l6ZWAuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x+vBQABAK8FlwIAozkmAACoBAACBwCpBAEAAwDtAg4AAKcEAgUBBFNvbWUBAQC0CQABqAQAAwDtAg4AAqcEAAEDANgCJAAApgQBAQC0CQAClgIA2QISAAC0CQUBBUUwMjgxAAEfBQABAAUDANgCJAAApgQBAQG5CQABpwQAmQIA0jkmAACtBAAAApkCANI5JgAAtAkFAeoPVGhlIGNvbXBpbGVyIGNvdWxkIG5vdCBpbmZlciBhIHR5cGUgYW5kIGFza2VkIGZvciBhIHR5cGUgYW5ub3RhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODIKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdCgpOwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdHlwZSBpbmZlcmVuY2UgZGlkIG5vdCByZXN1bHQgaW4gb25lIHVuaXF1ZSBwb3NzaWJsZQp0eXBlLCBhbmQgZXh0cmEgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQuIEluIG1vc3QgY2FzZXMgdGhpcyBjYW4gYmUgcHJvdmlkZWQKYnkgYWRkaW5nIGEgdHlwZSBhbm5vdGF0aW9uLiBTb21ldGltZXMgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgbWFudWFsbHkuCgpBIGNvbW1vbiBleGFtcGxlIGlzIHRoZSBgY29sbGVjdGAgbWV0aG9kIG9uIGBJdGVyYXRvcmAuIEl0IGhhcyBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgd2l0aCBhIGBGcm9tSXRlcmF0b3JgIGJvdW5kLCB3aGljaCBmb3IgYSBgY2hhcmAgaXRlcmF0b3IgaXMKaW1wbGVtZW50ZWQgYnkgYFZlY2AgYW5kIGBTdHJpbmdgIGFtb25nIG90aGVycy4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0CnRoYXQgcmV2ZXJzZXMgdGhlIGNoYXJhY3RlcnMgb2YgYSBzdHJpbmc6CgpJbiB0aGUgZmlyc3QgY29kZSBleGFtcGxlLCB0aGUgY29tcGlsZXIgY2Fubm90IGluZmVyIHdoYXQgdGhlIHR5cGUgb2YgYHhgIHNob3VsZApiZTogYFZlYzxjaGFyPmAgYW5kIGBTdHJpbmdgIGFyZSBib3RoIHN1aXRhYmxlIGNhbmRpZGF0ZXMuIFRvIHNwZWNpZnkgd2hpY2ggdHlwZQp0byB1c2UsIHlvdSBjYW4gdXNlIGEgdHlwZSBhbm5vdGF0aW9uIG9uIGB4YDoKCmBgYApsZXQgeDogVmVjPGNoYXI+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFubm90YXRlIHRoZSBmdWxsIHR5cGUuIE9uY2UgdGhlIGFtYmlndWl0eSBpcyByZXNvbHZlZCwKdGhlIGNvbXBpbGVyIGNhbiBpbmZlciB0aGUgcmVzdDoKCmBgYApsZXQgeDogVmVjPF8+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpBbm90aGVyIHdheSB0byBwcm92aWRlIHRoZSBjb21waWxlciB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiwgaXMgdG8gc3BlY2lmeSB0aGUKZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcjoKCmBgYApsZXQgeCA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0Ojo8VmVjPGNoYXI+PigpOwpgYGAKCkFnYWluLCB5b3UgbmVlZCBub3Qgc3BlY2lmeSB0aGUgZnVsbCB0eXBlIGlmIHRoZSBjb21waWxlciBjYW4gaW5mZXIgaXQ6CgpgYGAKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKYGBgCgpBcGFydCBmcm9tIGEgbWV0aG9kIG9yIGZ1bmN0aW9uIHdpdGggYSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyLCB0aGlzIGVycm9yIGNhbgpvY2N1ciB3aGVuIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBzdHJ1Y3Qgb3IgdHJhaXQgY2Fubm90IGJlIGluZmVycmVkLiBJbiB0aGF0CmNhc2UgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byB1c2UgYSB0eXBlIGFubm90YXRpb24sIGJlY2F1c2UgYWxsIGNhbmRpZGF0ZXMKaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZS4gRm9yIGluc3RhbmNlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgyCnN0cnVjdCBGb288VD4gewogICAgbnVtOiBULAp9CgppbXBsPFQ+IEZvbzxUPiB7CiAgICBmbiBiYXIoKSAtPiBpMzIgewogICAgICAgIDAKICAgIH0KCiAgICBmbiBiYXooKSB7CiAgICAgICAgbGV0IG51bWJlciA9IEZvbzo6YmFyKCk7CiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBjb21waWxlciBkb2VzIG5vdCBrbm93IHdoaWNoIGluc3RhbmNlIG9mIGBGb29gIHRvCmNhbGwgYGJhcmAgb24uIENoYW5nZSBgRm9vOjpiYXIoKWAgdG8gYEZvbzo6PFQ+OjpiYXIoKWAgdG8gcmVzb2x2ZSB0aGUgZXJyb3IuCgAg////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f+oPAAEA6g+ZAgDSOSYAAKwEAAIHAK0EAQADAO0CDgAAqwQCBQEEU29tZQEBALQJAAGsBAADAO0CDgACqwQAAQMA2AIkAACqBAEBALQJAAKYAgDZAhIAALQJBQEFRTAyODIAAR8FAAEABQMA2AIkAACqBAEBAbkJAAGrBACbAgCBOiYAALEEAAACmwIAgTomAAC0CQUB7QdBbiBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgY2hvc2VuIHVuYW1iaWd1b3VzbHkgYmVjYXVzZSBvZiBsYWNrIG9mIGluZm9ybWF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI4Mwp0cmFpdCBHZW5lcmF0b3IgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyOwp9CgpzdHJ1Y3QgSW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBJbXBsIHsKICAgIGZuIGNyZWF0ZSgpIC0+IHUzMiB7IDEgfQp9CgpzdHJ1Y3QgQW5vdGhlckltcGw7CgppbXBsIEdlbmVyYXRvciBmb3IgQW5vdGhlckltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMiB9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgY29udDogdTMyID0gR2VuZXJhdG9yOjpjcmVhdGUoKTsKICAgIC8vIGVycm9yLCBpbXBvc3NpYmxlIHRvIGNob29zZSBvbmUgb2YgR2VuZXJhdG9yIHRyYWl0IGltcGxlbWVudGF0aW9uCiAgICAvLyBTaG91bGQgaXQgYmUgSW1wbCBvciBBbm90aGVySW1wbCwgbWF5YmUgc29tZXRoaW5nIGVsc2U/Cn0KYGBgCgpUaGlzIGVycm9yIGNhbiBiZSBzb2x2ZWQgYnkgYWRkaW5nIHR5cGUgYW5ub3RhdGlvbnMgdGhhdCBwcm92aWRlIHRoZSBtaXNzaW5nCmluZm9ybWF0aW9uIHRvIHRoZSBjb21waWxlci4gSW4gdGhpcyBjYXNlLCB0aGUgc29sdXRpb24gaXMgdG8gdXNlIGEgY29uY3JldGUKdHlwZToKCmBgYAp0cmFpdCBHZW5lcmF0b3IgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyOwp9CgpzdHJ1Y3QgQW5vdGhlckltcGw7CgppbXBsIEdlbmVyYXRvciBmb3IgQW5vdGhlckltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMiB9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZ2VuMSA9IEFub3RoZXJJbXBsOjpjcmVhdGUoKTsKCiAgICAvLyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWV0aG9kcyB3aXRoIHNhbWUgbmFtZSAoZGlmZmVyZW50IHRyYWl0cykKICAgIGxldCBnZW4yID0gPEFub3RoZXJJbXBsIGFzIEdlbmVyYXRvcj46OmNyZWF0ZSgpOwp9CmBgYAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wftBwABAO0HmwIAgTomAACwBAACBwCxBAEAAwDtAg4AAK8EAgUBBFNvbWUBAQC0CQABsAQAAwDtAg4AAq8EAAEDANgCJAAArgQBAQC0CQACmgIA2QISAAC0CQUBBUUwMjgzAAEfBQABAAUDANgCJAAArgQBAQG5CQABrwQAnQIAsDomAAC1BAAAAp0CALA6JgAAtAkFAagHVGhpcyBlcnJvciBvY2N1cnMgd2hlbiB0aGUgY29tcGlsZXIgaXMgdW5hYmxlIHRvIHVuYW1iaWd1b3VzbHkgaW5mZXIgdGhlCnJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIGlzIGdlbmVyaWMgb24gcmV0dXJuIHR5cGUsIHN1Y2gKYXMgdGhlIGBjb2xsZWN0YCBtZXRob2QgZm9yIGBJdGVyYXRvcmBzLgoKRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODQKZm4gbWFpbigpIHsKICAgIGxldCBuOiB1MzIgPSAxOwogICAgbGV0IG11dCBkOiB1NjQgPSAyOwogICAgZCA9IGQgKyBuLmludG8oKTsKfQpgYGAKCkhlcmUgd2UgaGF2ZSBhbiBhZGRpdGlvbiBvZiBgZGAgYW5kIGBuLmludG8oKWAuIEhlbmNlLCBgbi5pbnRvKClgIGNhbiByZXR1cm4KYW55IHR5cGUgYFRgIHdoZXJlIGB1NjQ6IEFkZDxUPmAuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYGludG9gIG1ldGhvZCBjYW4KcmV0dXJuIGFueSB0eXBlIHdoZXJlIGB1MzI6IEludG88VD5gLgoKVGhlIGF1dGhvciBvZiB0aGlzIGNvZGUgcHJvYmFibHkgd2FudHMgYGludG8oKWAgdG8gcmV0dXJuIGEgYHU2NGAsIGJ1dCB0aGUKY29tcGlsZXIgY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZXJlIGlzbid0IGFub3RoZXIgdHlwZSBgVGAgd2hlcmUgYm90aApgdTMyOiBJbnRvPFQ+YCBhbmQgYHU2NDogQWRkPFQ+YC4KClRvIHJlc29sdmUgdGhpcyBlcnJvciwgdXNlIGEgY29uY3JldGUgdHlwZSBmb3IgdGhlIGludGVybWVkaWF0ZSBleHByZXNzaW9uOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbjogdTMyID0gMTsKICAgIGxldCBtdXQgZDogdTY0ID0gMjsKICAgIGxldCBtOiB1NjQgPSBuLmludG8oKTsKICAgIGQgPSBkICsgbTsKfQpgYGAKCk5vdGUgdGhhdCB0aGUgdHlwZSBvZiBgdmAgY2FuIG5vdyBiZSBpbmZlcnJlZCBmcm9tIHRoZSB0eXBlIG9mIGB0ZW1wYC4KAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H6gHAAEAqAedAgCwOiYAALQEAAIHALUEAQADAO0CDgAAswQCBQEEU29tZQEBALQJAAG0BAADAO0CDgACswQAAQMA2AIkAACyBAEBALQJAAKcAgDZAhIAALQJBQEFRTAyODQAAR8FAAEABQMA2AIkAACyBAEBAbkJAAGzBACfAgDfOiYAALkEAAACnwIA3zomAAC0CQUBkAYjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpQYXR0ZXJucyB1c2VkIHRvIGJpbmQgbmFtZXMgbXVzdCBiZSBpcnJlZnV0YWJsZS4gVGhhdCBpcywgdGhleSBtdXN0IGd1YXJhbnRlZQp0aGF0IGEgbmFtZSB3aWxsIGJlIGV4dHJhY3RlZCBpbiBhbGwgY2FzZXMuIEluc3RlYWQgb2YgcGF0dGVybiBtYXRjaGluZyB0aGUKbG9vcCB2YXJpYWJsZSwgY29uc2lkZXIgdXNpbmcgYSBgbWF0Y2hgIG9yIGBpZiBsZXRgIGluc2lkZSB0aGUgbG9vcCBib2R5LiBGb3IKaW5zdGFuY2U6CgpgYGBjb21waWxlX2ZhaWwsRTAwMDUKbGV0IHhzIDogVmVjPE9wdGlvbjxpMzI+PiA9IHZlYyFbU29tZSgxKSwgTm9uZV07CgovLyBUaGlzIGZhaWxzIGJlY2F1c2UgYE5vbmVgIGlzIG5vdCBjb3ZlcmVkLgpmb3IgU29tZSh4KSBpbiB4cyB7CiAgICAvLyAuLi4KfQpgYGAKCk1hdGNoIGluc2lkZSB0aGUgbG9vcCBpbnN0ZWFkOgoKYGBgCmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKZm9yIGl0ZW0gaW4geHMgewogICAgbWF0Y2ggaXRlbSB7CiAgICAgICAgU29tZSh4KSA9PiB7fSwKICAgICAgICBOb25lID0+IHt9LAogICAgfQp9CmBgYAoKT3IgdXNlIGBpZiBsZXRgOgoKYGBgCmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKZm9yIGl0ZW0gaW4geHMgewogICAgaWYgbGV0IFNvbWUoeCkgPSBpdGVtIHsKICAgICAgICAvLyAuLi4KICAgIH0KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wOQBgABAJAGnwIA3zomAAC4BAACBwC5BAEAAwDtAg4AALcEAgUBBFNvbWUBAQC0CQABuAQAAwDtAg4AArcEAAEDANgCJAAAtgQBAQC0CQACngIA2QISAAC0CQUBBUUwMjk3AAEfBQABAAUDANgCJAAAtgQBAQG5CQABtwQAoQIAjjsmAAC9BAAAAqECAI47JgAAtAkFAfIEIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKTXV0YWJsZSBib3Jyb3dzIGFyZSBub3QgYWxsb3dlZCBpbiBwYXR0ZXJuIGd1YXJkcywgYmVjYXVzZSBtYXRjaGluZyBjYW5ub3QgaGF2ZQpzaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBjb3VsZCBhbHRlciB0aGUgbWF0Y2hlZCBvYmplY3Qgb3IgdGhlIGVudmlyb25tZW50Cm9uIHdoaWNoIHRoZSBtYXRjaCBkZXBlbmRzIGluIHN1Y2ggYSB3YXksIHRoYXQgdGhlIG1hdGNoIHdvdWxkIG5vdCBiZQpleGhhdXN0aXZlLiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IG1hdGNoIGFueSBhcm0gaWYgbXV0YWJsZQpib3Jyb3dzIHdlcmUgYWxsb3dlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NgptYXRjaCBTb21lKCgpKSB7CiAgICBOb25lID0+IHsgfSwKICAgIG9wdGlvbiBpZiBvcHRpb24udGFrZSgpLmlzX25vbmUoKSA9PiB7CiAgICAgICAgLyogaW1wb3NzaWJsZSwgb3B0aW9uIGlzIGBTb21lYCAqLwogICAgfSwKICAgIFNvbWUoXykgPT4geyB9IC8vIFdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGZhaWxlZCwgdGhlIG9wdGlvbiBiZWNhbWUgYE5vbmVgLgp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8B8gQAAQDyBKECAI47JgAAvAQAAgcAvQQBAAMA7QIOAAC7BAIFAQRTb21lAQEAtAkAAbwEAAMA7QIOAAK7BAABAwDYAiQAALoEAQEAtAkAAqACANkCEgAAtAkFAQVFMDMwMQABHwUAAQAFAwDYAiQAALoEAQEBuQkAAbsEAKMCAL07JgAAwQQAAAKjAgC9OyYAALQJBQG8BCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFzc2lnbm1lbnRzIGFyZSBub3QgYWxsb3dlZCBpbiBwYXR0ZXJuIGd1YXJkcywgYmVjYXVzZSBtYXRjaGluZyBjYW5ub3QgaGF2ZQpzaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBjb3VsZCBhbHRlciB0aGUgbWF0Y2hlZCBvYmplY3Qgb3IgdGhlIGVudmlyb25tZW50Cm9uIHdoaWNoIHRoZSBtYXRjaCBkZXBlbmRzIGluIHN1Y2ggYSB3YXksIHRoYXQgdGhlIG1hdGNoIHdvdWxkIG5vdCBiZQpleGhhdXN0aXZlLiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IG1hdGNoIGFueSBhcm0gaWYgYXNzaWdubWVudHMKd2VyZSBhbGxvd2VkOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0Cm1hdGNoIFNvbWUoKCkpIHsKICAgIE5vbmUgPT4geyB9LAogICAgb3B0aW9uIGlmIHsgb3B0aW9uID0gTm9uZTsgZmFsc2UgfSA9PiB7IH0sCiAgICBTb21lKF8pID0+IHsgfSAvLyBXaGVuIHRoZSBwcmV2aW91cyBtYXRjaCBmYWlsZWQsIHRoZSBvcHRpb24gYmVjYW1lIGBOb25lYC4KfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////D7wEAAEAvASjAgC9OyYAAMAEAAIHAMEEAQADAO0CDgAAvwQCBQEEU29tZQEBALQJAAHABAADAO0CDgACvwQAAQMA2AIkAAC+BAEBALQJAAKiAgDZAhIAALQJBQEFRTAzMDIAAR8FAAEABQMA2AIkAAC+BAEBAbkJAAG/BAClAgDsOyYAAMUEAAACpQIA7DsmAAC0CQUB/wYjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpTdWItYmluZGluZ3MsIGUuZy4gYHJlZiB4IEAgU29tZShyZWYgeSlgIGFyZSBub3cgYWxsb3dlZCB1bmRlcgpgIyFbZmVhdHVyZShiaW5kaW5nc19hZnRlcl9hdCldYCBhbmQgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdAptZW1vcnkgc2FmZXR5IGlzIHVwaGVsZC4KCi0tLS0tLS0tLS0tLS0tCgpJbiBjZXJ0YWluIGNhc2VzIGl0IGlzIHBvc3NpYmxlIGZvciBzdWItYmluZGluZ3MgdG8gdmlvbGF0ZSBtZW1vcnkgc2FmZXR5LgpVcGRhdGVzIHRvIHRoZSBib3Jyb3cgY2hlY2tlciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJ1c3QgbWF5IHJlbW92ZSB0aGlzCnJlc3RyaWN0aW9uLCBidXQgZm9yIG5vdyBwYXR0ZXJucyBtdXN0IGJlIHJld3JpdHRlbiB3aXRob3V0IHN1Yi1iaW5kaW5ncy4KCkJlZm9yZToKCmBgYGNvbXBpbGVfZmFpbAptYXRjaCBTb21lKCJoaSIudG9fc3RyaW5nKCkpIHsKICAgIHJlZiBvcF9zdHJpbmdfcmVmIEAgU29tZShzKSA9PiB7fSwKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpBZnRlcjoKCmBgYAptYXRjaCBTb21lKCJoaSIudG9fc3RyaW5nKCkpIHsKICAgIFNvbWUocmVmIHMpID0+IHsKICAgICAgICBsZXQgb3Bfc3RyaW5nX3JlZiA9ICZTb21lKHMpOwogICAgICAgIC8vIC4uLgogICAgfSwKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpUaGUgYG9wX3N0cmluZ19yZWZgIGJpbmRpbmcgaGFzIHR5cGUgYCZPcHRpb248JlN0cmluZz5gIGluIGJvdGggY2FzZXMuCgpTZWUgYWxzbyBbSXNzdWUgMTQ1ODddW2lzc3VlLTE0NTg3XS4KCltpc3N1ZS0xNDU4N106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMTQ1ODcKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////9//wYAAQD/BqUCAOw7JgAAxAQAAgcAxQQBAAMA7QIOAADDBAIFAQRTb21lAQEAtAkAAcQEAAMA7QIOAALDBAABAwDYAiQAAMIEAQEAtAkAAqQCANkCEgAAtAkFAQVFMDMwMwABHwUAAQAFAwDYAiQAAMIEAQEBuQkAAcMEAKcCAJs8JgAAyQQAAAKnAgCbPCYAALQJBQHqD1RoZSBgc2VsZmAgcGFyYW1ldGVyIGluIGEgbWV0aG9kIGhhcyBhbiBpbnZhbGlkICJyZWNlaXZlciB0eXBlIi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDcKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKCk1ldGhvZHMgdGFrZSBhIHNwZWNpYWwgZmlyc3QgcGFyYW1ldGVyLCBvZiB3aGljaCB0aGVyZSBhcmUgdGhyZWUgdmFyaWFudHM6CmBzZWxmYCwgYCZzZWxmYCwgYW5kIGAmbXV0IHNlbGZgLiBUaGVzZSBhcmUgc3ludGFjdGljIHN1Z2FyIGZvcgpgc2VsZjogU2VsZmAsIGBzZWxmOiAmU2VsZmAsIGFuZCBgc2VsZjogJm11dCBTZWxmYCByZXNwZWN0aXZlbHkuCgpgYGAKIyBzdHJ1Y3QgRm9vOwp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwovLyAgICAgICAgIF5eXl5eIGBzZWxmYCBoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSByZWNlaXZlciBvYmplY3QKfQoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KLy8gICAgICAgICBeXl5eXiB0aGUgcmVjZWl2ZXIgdHlwZSBpcyBgJkZvb2AKfQpgYGAKClRoZSB0eXBlIGBTZWxmYCBhY3RzIGFzIGFuIGFsaWFzIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRyYWl0CmltcGxlbWVudGVyLCBvciAicmVjZWl2ZXIgdHlwZSIuIEJlc2lkZXMgdGhlIGFscmVhZHkgbWVudGlvbmVkIGBTZWxmYCwKYCZTZWxmYCBhbmQgYCZtdXQgU2VsZmAgdmFsaWQgcmVjZWl2ZXIgdHlwZXMsIHRoZSBmb2xsb3dpbmcgYXJlIGFsc28gdmFsaWQ6CmBzZWxmOiBCb3g8U2VsZj5gLCBgc2VsZjogUmM8U2VsZj5gLCBgc2VsZjogQXJjPFNlbGY+YCwgYW5kIGBzZWxmOiBQaW48UD5gCih3aGVyZSBQIGlzIG9uZSBvZiB0aGUgcHJldmlvdXMgdHlwZXMgZXhjZXB0IGBTZWxmYCkuIE5vdGUgdGhhdCBgU2VsZmAgY2FuCmFsc28gYmUgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50aW5nIHR5cGUsIGxpa2UgYEZvb2AgaW4gdGhlIGZvbGxvd2luZwpleGFtcGxlOgoKYGBgCiMgc3RydWN0IEZvbzsKIyB0cmFpdCBUcmFpdCB7CiMgICAgIGZuIGZvbygmc2VsZik7CiMgfQppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZGb28pIHt9Cn0KYGBgCgpUaGlzIGVycm9yIHdpbGwgYmUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiB1c2luZyBhbiBpbnZhbGlkIHJlY2VpdmVyIHR5cGUsCmxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA3CiMgc3RydWN0IEZvbzsKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IFRyYWl0IHsKIyAgICAgZm4gZm9vKCZzZWxmKTsKIyB9CmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKClRoZSBuaWdodGx5IGZlYXR1cmUgW0FyYml0cmFyeSBzZWxmIHR5cGVzXVtBU1RdIGV4dGVuZHMgdGhlIGFjY2VwdGVkCnNldCBvZiByZWNlaXZlciB0eXBlcyB0byBhbHNvIGluY2x1ZGUgYW55IHR5cGUgdGhhdCBjYW4gZGVyZWZlcmVuY2UgdG8KYFNlbGZgOgoKYGBgCiMhW2ZlYXR1cmUoYXJiaXRyYXJ5X3NlbGZfdHlwZXMpXQoKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCi8vIEJlY2F1c2UgeW91IGNhbiBkZXJlZmVyZW5jZSBgQmFyYCBpbnRvIGBGb29gLi4uCmltcGwgc3RkOjpvcHM6OkRlcmVmIGZvciBCYXIgewogICAgdHlwZSBUYXJnZXQgPSBGb287CgogICAgZm4gZGVyZWYoJnNlbGYpIC0+ICZGb28gewogICAgICAgICZGb28KICAgIH0KfQoKaW1wbCBGb28gewogICAgZm4gZm9vKHNlbGY6IEJhcikge30KLy8gICAgICAgICBeXl5eXl5eXl4gLi4uaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHJlY2VpdmVyIHR5cGUKfQpgYGAKCltBU1RdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvYXJiaXRyYXJ5LXNlbGYtdHlwZXMuaHRtbAoAIP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qDwABAOoPpwIAmzwmAADIBAACBwDJBAEAAwDtAg4AAMcEAgUBBFNvbWUBAQC0CQAByAQAAwDtAg4AAscEAAEDANgCJAAAxgQBAQC0CQACpgIA2QISAAC0CQUBBUUwMzA3AAEfBQABAAUDANgCJAAAxgQBAQG5CQABxwQAqQIAyjwmAADNBAAAAqkCAMo8JgAAtAkFAccFRXhwZWN0ZWQgdHlwZSBkaWQgbm90IG1hdGNoIHRoZSByZWNlaXZlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDgKZm4gcGx1c19vbmUoeDogaTMyKSAtPiBpMzIgewogICAgeCArIDEKfQoKcGx1c19vbmUoIk5vdCBhIG51bWJlciIpOwovLyAgICAgICBeXl5eXl5eXl5eXl5eXiBleHBlY3RlZCBgaTMyYCwgZm91bmQgYCZzdHJgCgppZiAiTm90IGEgYm9vbCIgewovLyBeXl5eXl5eXl5eXl4gZXhwZWN0ZWQgYGJvb2xgLCBmb3VuZCBgJnN0cmAKfQoKbGV0IHg6IGYzMiA9ICJOb3QgYSBmbG9hdCI7Ci8vICAgICAtLS0gICBeXl5eXl5eXl5eXl5eIGV4cGVjdGVkIGBmMzJgLCBmb3VuZCBgJnN0cmAKLy8gICAgIHwKLy8gICAgIGV4cGVjdGVkIGR1ZSB0byB0aGlzCmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBleHByZXNzaW9uIHdhcyB1c2VkIGluIGEgcGxhY2Ugd2hlcmUgdGhlIGNvbXBpbGVyCmV4cGVjdGVkIGFuIGV4cHJlc3Npb24gb2YgYSBkaWZmZXJlbnQgdHlwZS4gSXQgY2FuIG9jY3VyIGluIHNldmVyYWwgY2FzZXMsIHRoZQptb3N0IGNvbW1vbiBiZWluZyB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiBhbmQgcGFzc2luZyBhbiBhcmd1bWVudCB3aGljaCBoYXMgYQpkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBtYXRjaGluZyB0eXBlIGluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AX/HBQABAMcFqQIAyjwmAADMBAACBwDNBAEAAwDtAg4AAMsEAgUBBFNvbWUBAQC0CQABzAQAAwDtAg4AAssEAAEDANgCJAAAygQBAQC0CQACqAIA2QISAAC0CQUBBUUwMzA4AAEfBQABAAUDANgCJAAAygQBAQG5CQABywQAqwIA+TwmAADRBAAAAqsCAPk8JgAAtAkFAd0JQSBwYXJhbWV0ZXIgdHlwZSBpcyBtaXNzaW5nIGFuIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIGFuZCBtYXkgbm90IGxpdmUgbG9uZwplbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA5Ci8vIFRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIHRoZSBhcHBsaWNhYmxlIGltcGwgb2YKLy8gYFNvbWVUcmFpdGAgKGJlbG93KSByZXF1aXJlcyB0aGF0IGBUOiAnYWAsIGJ1dCB0aGUgc3RydWN0IGRvZXMKLy8gbm90IGhhdmUgYSBtYXRjaGluZyB3aGVyZS1jbGF1c2UuCnN0cnVjdCBGb288J2EsIFQ+IHsKICAgIGZvbzogPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dCwKfQoKdHJhaXQgU29tZVRyYWl0PCdhPiB7CiAgICB0eXBlIE91dHB1dDsKfQoKaW1wbDwnYSwgVD4gU29tZVRyYWl0PCdhPiBmb3IgVAp3aGVyZQogICAgVDogJ2EsCnsKICAgIHR5cGUgT3V0cHV0ID0gdTMyOwp9CmBgYAoKVGhlIHR5cGUgZGVmaW5pdGlvbiBjb250YWlucyBzb21lIGZpZWxkIHdob3NlIHR5cGUgcmVxdWlyZXMgYW4gb3V0bGl2ZXMKYW5ub3RhdGlvbi4gT3V0bGl2ZXMgYW5ub3RhdGlvbnMgKGUuZy4sIGBUOiAnYWApIGFyZSB1c2VkIHRvIGd1YXJhbnRlZSB0aGF0IGFsbAp0aGUgZGF0YSBpbiBgVGAgaXMgdmFsaWQgZm9yIGF0IGxlYXN0IHRoZSBsaWZldGltZSBgJ2FgLiBUaGlzIHNjZW5hcmlvIG1vc3QKY29tbW9ubHkgYXJpc2VzIHdoZW4gdGhlIHR5cGUgY29udGFpbnMgYW4gYXNzb2NpYXRlZCB0eXBlIHJlZmVyZW5jZSBsaWtlCmA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0YCwgYXMgc2hvd24gaW4gdGhlIHByZXZpb3VzIGNvZGUuCgpUaGVyZSwgdGhlIHdoZXJlIGNsYXVzZSBgVDogJ2FgIHRoYXQgYXBwZWFycyBvbiB0aGUgaW1wbCBpcyBub3Qga25vd24gdG8gYmUKc2F0aXNmaWVkIG9uIHRoZSBzdHJ1Y3QuIFRvIG1ha2UgdGhpcyBleGFtcGxlIGNvbXBpbGUsIHlvdSBoYXZlIHRvIGFkZCBhCndoZXJlLWNsYXVzZSBsaWtlIGBUOiAnYWAgdG8gdGhlIHN0cnVjdCBkZWZpbml0aW9uOgoKYGBgCnN0cnVjdCBGb288J2EsIFQ+CndoZXJlCiAgICBUOiAnYSwKewogICAgZm9vOiA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0Cn0KCnRyYWl0IFNvbWVUcmFpdDwnYT4gewogICAgdHlwZSBPdXRwdXQ7Cn0KCmltcGw8J2EsIFQ+IFNvbWVUcmFpdDwnYT4gZm9yIFQKd2hlcmUKICAgIFQ6ICdhLAp7CiAgICB0eXBlIE91dHB1dCA9IHUzMjsKfQpgYGAKABT///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdCQABAN0JqwIA+TwmAADQBAACBwDRBAEAAwDtAg4AAM8EAgUBBFNvbWUBAQC0CQAB0AQAAwDtAg4AAs8EAAEDANgCJAAAzgQBAQC0CQACqgIA2QISAAC0CQUBBUUwMzA5AAEfBQABAAUDANgCJAAAzgQBAQG5CQABzwQArQIAqD0mAADVBAAAAq0CAKg9JgAAtAkFAbUFQSBwYXJhbWV0ZXIgdHlwZSBpcyBtaXNzaW5nIGEgbGlmZXRpbWUgY29uc3RyYWludCBvciBoYXMgYSBsaWZldGltZSB0aGF0CmRvZXMgbm90IGxpdmUgbG9uZyBlbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzEwCi8vIFRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIFQgaXMgbm90IGNvbnN0cmFpbmVkIHRvIHRoZSBzdGF0aWMgbGlmZXRpbWUKLy8gdGhlIHJlZmVyZW5jZSBuZWVkcwpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogJidzdGF0aWMgVAp9CmBgYAoKVHlwZSBwYXJhbWV0ZXJzIGluIHR5cGUgZGVmaW5pdGlvbnMgaGF2ZSBsaWZldGltZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdApyZXByZXNlbnQgaG93IGxvbmcgdGhlIGRhdGEgc3RvcmVkIHdpdGhpbiB0aGVtIGlzIGd1YXJhbnRlZWQgdG8gbGl2ZS4gVGhpcwpsaWZldGltZSBtdXN0IGJlIGFzIGxvbmcgYXMgdGhlIGRhdGEgbmVlZHMgdG8gYmUgYWxpdmUsIGFuZCBtaXNzaW5nIHRoZQpjb25zdHJhaW50IHRoYXQgZGVub3RlcyB0aGlzIHdpbGwgY2F1c2UgdGhpcyBlcnJvci4KClRoaXMgd2lsbCBjb21waWxlLCBiZWNhdXNlIGl0IGhhcyB0aGUgY29uc3RyYWludCBvbiB0aGUgdHlwZSBwYXJhbWV0ZXI6CgpgYGAKc3RydWN0IEZvbzxUOiAnc3RhdGljPiB7CiAgICBmb286ICYnc3RhdGljIFQKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w+1BQABALUFrQIAqD0mAADUBAACBwDVBAEAAwDtAg4AANMEAgUBBFNvbWUBAQC0CQAB1AQAAwDtAg4AAtMEAAEDANgCJAAA0gQBAQC0CQACrAIA2QISAAC0CQUBBUUwMzEwAAEfBQABAAUDANgCJAAA0gQBAQG5CQAB0wQArwIA1z0mAADZBAAAAq8CANc9JgAAtAkFAcAGUmVmZXJlbmNlJ3MgbGlmZXRpbWUgb2YgYm9ycm93ZWQgY29udGVudCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMTIKcHViIGZuIG9wdF9zdHI8J2E+KG1heWJlc3RyOiAmJ2EgT3B0aW9uPFN0cmluZz4pIC0+ICYnc3RhdGljIHN0ciB7CiAgICBpZiBtYXliZXN0ci5pc19ub25lKCkgewogICAgICAgICIobm9uZSkiCiAgICB9IGVsc2UgewogICAgICAgIGxldCBzOiAmJ2Egc3RyID0gbWF5YmVzdHIuYXNfcmVmKCkudW53cmFwKCk7CiAgICAgICAgcyAgLy8gSW52YWxpZCBsaWZldGltZSEKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBlaXRoZXIgbGVzc2VuIHRoZSBleHBlY3RlZCBsaWZldGltZSBvciBmaW5kIGEgd2F5IHRvIG5vdCBoYXZlCnRvIHVzZSB0aGlzIHJlZmVyZW5jZSBvdXRzaWRlIG9mIGl0cyBjdXJyZW50IHNjb3BlIChieSBydW5uaW5nIHRoZSBjb2RlIGRpcmVjdGx5CmluIHRoZSBzYW1lIGJsb2NrIGZvciBleGFtcGxlPyk6CgpgYGAKLy8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gZml4IHRoZSBpc3N1ZSBieSBzd2l0Y2hpbmcgZnJvbSAic3RhdGljIiBsaWZldGltZSB0byAnYQpwdWIgZm4gb3B0X3N0cjwnYT4obWF5YmVzdHI6ICYnYSBPcHRpb248U3RyaW5nPikgLT4gJidhIHN0ciB7CiAgICBpZiBtYXliZXN0ci5pc19ub25lKCkgewogICAgICAgICIobm9uZSkiCiAgICB9IGVsc2UgewogICAgICAgIGxldCBzOiAmJ2Egc3RyID0gbWF5YmVzdHIuYXNfcmVmKCkudW53cmFwKCk7CiAgICAgICAgcyAgLy8gT2shCiAgICB9Cn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQDABgABAMAGrwIA1z0mAADYBAACBwDZBAEAAwDtAg4AANcEAgUBBFNvbWUBAQC0CQAB2AQAAwDtAg4AAtcEAAEDANgCJAAA1gQBAQC0CQACrgIA2QISAAC0CQUBBUUwMzEyAAEfBQABAAUDANgCJAAA1gQBAQG5CQAB1wQAsQIAhj4mAADdBAAAArECAIY+JgAAtAkFAZEGQSBgd2hlcmVgIGNsYXVzZSBjb250YWlucyBhIG5lc3RlZCBxdWFudGlmaWNhdGlvbiBvdmVyIGxpZmV0aW1lcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMTYKdHJhaXQgVHI8J2EsICdiPiB7fQoKZm4gZm9vPFQ+KHQ6IFQpCndoZXJlCiAgICBmb3I8J2E+ICYnYSBUOiBmb3I8J2I+IFRyPCdhLCAnYj4sIC8vIGVycm9yOiBuZXN0ZWQgcXVhbnRpZmljYXRpb24Kewp9CmBgYAoKUnVzdCBzeW50YXggYWxsb3dzIGxpZmV0aW1lIHF1YW50aWZpY2F0aW9ucyBpbiB0d28gcGxhY2VzIHdpdGhpbgpgd2hlcmVgIGNsYXVzZXM6IFF1YW50aWZ5aW5nIG92ZXIgdGhlIHRyYWl0IGJvdW5kIG9ubHkgKGFzIGluCmBUeTogZm9yPCdsPiBUcmFpdDwnbD5gKSBhbmQgcXVhbnRpZnlpbmcgb3ZlciB0aGUgd2hvbGUgY2xhdXNlCihhcyBpbiBgZm9yPCdsPiAmJ2wgVHk6IFRyYWl0PCdsPmApLiBVc2luZyBib3RoIGluIHRoZSBzYW1lIGNsYXVzZQpsZWFkcyB0byBhIG5lc3RlZCBsaWZldGltZSBxdWFudGlmaWNhdGlvbiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4KClRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb21waWxlcywgYmVjYXVzZSB0aGUgY2xhdXNlIHdpdGggdGhlIG5lc3RlZApxdWFudGlmaWNhdGlvbiBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gdXNlIG9ubHkgb25lIGBmb3I8PmA6CgpgYGAKdHJhaXQgVHI8J2EsICdiPiB7fQoKZm4gZm9vPFQ+KHQ6IFQpCndoZXJlCiAgICBmb3I8J2EsICdiPiAmJ2EgVDogVHI8J2EsICdiPiwgLy8gb2sKewp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B5EGAAEAkQaxAgCGPiYAANwEAAIHAN0EAQADAO0CDgAA2wQCBQEEU29tZQEBALQJAAHcBAADAO0CDgAC2wQAAQMA2AIkAADaBAEBALQJAAKwAgDZAhIAALQJBQEFRTAzMTYAAR8FAAEABQMA2AIkAADaBAEBAbkJAAHbBACzAgC1PiYAAOEEAAACswIAtT4mAAC0CQUBlQVBbiBgaWZgIGV4cHJlc3Npb24gaXMgbWlzc2luZyBhbiBgZWxzZWAgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzE3CmxldCB4ID0gNTsKbGV0IGEgPSBpZiB4ID09IDUgewogICAgMQp9OwpgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYGlmYCBleHByZXNzaW9uIHdpdGhvdXQgYW4gYGVsc2VgIGJsb2NrIGlzIHVzZWQgaW4gYQpjb250ZXh0IHdoZXJlIGEgdHlwZSBvdGhlciB0aGFuIGAoKWAgaXMgZXhwZWN0ZWQuIEluIHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUsCnRoZSBgbGV0YCBleHByZXNzaW9uIHdhcyBleHBlY3RpbmcgYSB2YWx1ZSBidXQgc2luY2UgdGhlcmUgd2FzIG5vIGBlbHNlYCwgbm8KdmFsdWUgd2FzIHJldHVybmVkLgoKQW4gYGlmYCBleHByZXNzaW9uIHdpdGhvdXQgYW4gYGVsc2VgIGJsb2NrIGhhcyB0aGUgdHlwZSBgKClgLCBzbyB0aGlzIGlzIGEgdHlwZQplcnJvci4gVG8gcmVzb2x2ZSBpdCwgYWRkIGFuIGBlbHNlYCBibG9jayBoYXZpbmcgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYGlmYApibG9jay4KClNvIHRvIGZpeCB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlOgoKYGBgCmxldCB4ID0gNTsKbGV0IGEgPSBpZiB4ID09IDUgewogICAgMQp9IGVsc2UgewogICAgMgp9OwpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//9/lQUAAQCVBbMCALU+JgAA4AQAAgcA4QQBAAMA7QIOAADfBAIFAQRTb21lAQEAtAkAAeAEAAMA7QIOAALfBAABAwDYAiQAAN4EAQEAtAkAArICANkCEgAAtAkFAQVFMDMxNwABHwUAAQAFAwDYAiQAAN4EAQEBuQkAAd8EALUCAOQ+JgAA5QQAAAK1AgDkPiYAALQJBQHmBEEgY3Jvc3MtY3JhdGUgb3B0LW91dCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHdoaWNoIHdhc24ndCBhIHN0cnVjdApvciBlbnVtIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIxCiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKc3RydWN0IEZvbzsKCmltcGwgIVN5bmMgZm9yIEZvbyB7fQoKdW5zYWZlIGltcGwgU2VuZCBmb3IgJidzdGF0aWMgRm9vIHt9Ci8vIGVycm9yOiBjcm9zcy1jcmF0ZSB0cmFpdHMgd2l0aCBhIGRlZmF1bHQgaW1wbCwgbGlrZSBgY29yZTo6bWFya2VyOjpTZW5kYCwKLy8gICAgICAgIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBhIHN0cnVjdC9lbnVtIHR5cGUsIG5vdAovLyAgICAgICAgYCYnc3RhdGljIEZvb2AKYGBgCgpPbmx5IHN0cnVjdHMgYW5kIGVudW1zIGFyZSBwZXJtaXR0ZWQgdG8gaW1wbCBTZW5kLCBTeW5jLCBhbmQgb3RoZXIgb3B0LW91dAp0cmFpdCwgYW5kIHRoZSBzdHJ1Y3Qgb3IgZW51bSBtdXN0IGJlIGxvY2FsIHRvIHRoZSBjdXJyZW50IGNyYXRlLiBTbywgZm9yCmV4YW1wbGUsIGB1bnNhZmUgaW1wbCBTZW5kIGZvciBSYzxGb28+YCBpcyBub3QgYWxsb3dlZC4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmBAABAOYEtQIA5D4mAADkBAACBwDlBAEAAwDtAg4AAOMEAgUBBFNvbWUBAQC0CQAB5AQAAwDtAg4AAuMEAAEDANgCJAAA4gQBAQC0CQACtAIA2QISAAC0CQUBBUUwMzIxAAEfBQABAAUDANgCJAAA4gQBAQG5CQAB4wQAtwIAkz8mAADpBAAAArcCAJM/JgAAtAkFAZcDVGhlIGBTaXplZGAgdHJhaXQgd2FzIGltcGxlbWVudGVkIGV4cGxpY2l0bHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIyCnN0cnVjdCBGb287CgppbXBsIFNpemVkIGZvciBGb28ge30gLy8gZXJyb3IhCmBgYAoKVGhlIGBTaXplZGAgdHJhaXQgaXMgYSBzcGVjaWFsIHRyYWl0IGJ1aWx0LWluIHRvIHRoZSBjb21waWxlciBmb3IgdHlwZXMgd2l0aCBhCmNvbnN0YW50IHNpemUga25vd24gYXQgY29tcGlsZS10aW1lLiBUaGlzIHRyYWl0IGlzIGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQKZm9yIHR5cGVzIGFzIG5lZWRlZCBieSB0aGUgY29tcGlsZXIsIGFuZCBpdCBpcyBjdXJyZW50bHkgZGlzYWxsb3dlZCB0bwpleHBsaWNpdGx5IGltcGxlbWVudCBpdCBmb3IgYSB0eXBlLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wOXAwABAJcDtwIAkz8mAADoBAACBwDpBAEAAwDtAg4AAOcEAgUBBFNvbWUBAQC0CQAB6AQAAwDtAg4AAucEAAEDANgCJAAA5gQBAQC0CQACtgIA2QISAAC0CQUBBUUwMzIyAAEfBQABAAUDANgCJAAA5gQBAQG5CQAB5wQAuQIAwj8mAADtBAAAArkCAMI/JgAAtAkFAfYEQW4gYXNzb2NpYXRlZCBjb25zdCB3YXMgaW1wbGVtZW50ZWQgd2hlbiBhbm90aGVyIHRyYWl0IGl0ZW0gd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyMwp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsKICAgIC8vIGVycm9yOiBpdGVtIGBOYCBpcyBhbiBhc3NvY2lhdGVkIGNvbnN0LCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgY29uc3Qgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIHRoZSBjb3JyZWN0IHRyYWl0CndhcyBpbXBsZW1lbnRlZC4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIHR5cGUgTjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICB0eXBlIE4gPSB1MzI7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOyAvLyBvayEKfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////H/YEAAEA9gS5AgDCPyYAAOwEAAIHAO0EAQADAO0CDgAA6wQCBQEEU29tZQEBALQJAAHsBAADAO0CDgAC6wQAAQMA2AIkAADqBAEBALQJAAK4AgDZAhIAALQJBQEFRTAzMjMAAR8FAAEABQMA2AIkAADqBAEBAbkJAAHrBAC7AgDxPyYAAPEEAAACuwIA8T8mAAC0CQUB2wRBIG1ldGhvZCB3YXMgaW1wbGVtZW50ZWQgd2hlbiBhbm90aGVyIHRyYWl0IGl0ZW0gd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyNApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7CgogICAgZm4gTSgpOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIE4oKSB7fQogICAgLy8gZXJyb3I6IGl0ZW0gYE5gIGlzIGFuIGFzc29jaWF0ZWQgbWV0aG9kLCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBtZXRob2QgbmFtZSB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQKdmVyaWZ5IHRoYXQgeW91IGFyZSBpbmRlZWQgaW1wbGVtZW50aW5nIHRoZSBjb3JyZWN0IHRyYWl0IGl0ZW1zLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKCiAgICBmbiBNKCk7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7CgogICAgZm4gTSgpIHt9IC8vIG9rIQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z/bBAABANsEuwIA8T8mAADwBAACBwDxBAEAAwDtAg4AAO8EAgUBBFNvbWUBAQC0CQAB8AQAAwDtAg4AAu8EAAEDANgCJAAA7gQBAQC0CQACugIA2QISAAC0CQUBBUUwMzI0AAEfBQABAAUDANgCJAAA7gQBAQG5CQAB7wQAvQIAoEAmAAD1BAAAAr0CAKBAJgAAtAkFAZAFQW4gYXNzb2NpYXRlZCB0eXBlIHdhcyBpbXBsZW1lbnRlZCB3aGVuIGFub3RoZXIgdHJhaXQgaXRlbSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI1CnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICB0eXBlIE4gPSB1MzI7CiAgICAvLyBlcnJvcjogaXRlbSBgTmAgaXMgYW4gYXNzb2NpYXRlZCB0eXBlLCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgdHlwZSBuYW1lIHdhc24ndCBtaXNzcGVsbGVkIGFuZCB5b3VyCmltcGxlbWVudGF0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFpdCBkZWZpbml0aW9uLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7IC8vIG9rIQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wOQBQABAJAFvQIAoEAmAAD0BAACBwD1BAEAAwDtAg4AAPMEAgUBBFNvbWUBAQC0CQAB9AQAAwDtAg4AAvMEAAEDANgCJAAA8gQBAQC0CQACvAIA2QISAAC0CQUBBUUwMzI1AAEfBQABAAUDANgCJAAA8gQBAQG5CQAB8wQAvwIAz0AmAAD5BAAAAr8CAM9AJgAAtAkFAeQCQW4gaW1wbGVtZW50YXRpb24gb2YgYSB0cmFpdCBkb2Vzbid0IG1hdGNoIHRoZSB0eXBlIGNvbnN0cmFpbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI2CnRyYWl0IEZvbyB7CiAgICBjb25zdCBCQVI6IGJvb2w7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IEJBUjogdTMyID0gNTsgLy8gZXJyb3IsIGV4cGVjdGVkIGJvb2wsIGZvdW5kIHUzMgp9CmBgYAoKVGhlIHR5cGVzIG9mIGFueSBhc3NvY2lhdGVkIGNvbnN0YW50cyBpbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uIG11c3QgbWF0Y2ggdGhlCnR5cGVzIGluIHRoZSB0cmFpdCBkZWZpbml0aW9uLgoABv///////////wH///////////8B////////////Af///////////wH///////////8B//////8B5AIAAQDkAr8CAM9AJgAA+AQAAgcA+QQBAAMA7QIOAAD3BAIFAQRTb21lAQEAtAkAAfgEAAMA7QIOAAL3BAABAwDYAiQAAPYEAQEAtAkAAr4CANkCEgAAtAkFAQVFMDMyNgABHwUAAQAFAwDYAiQAAPYEAQEBuQkAAfcEAMECAP5AJgAA/QQAAALBAgD+QCYAALQJBQHOBlRoZSBVbnNpemUgdHJhaXQgc2hvdWxkIG5vdCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseS4gQWxsIGltcGxlbWVudGF0aW9ucyBvZgpVbnNpemUgYXJlIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvbXBpbGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyOAojIVtmZWF0dXJlKHVuc2l6ZSldCgp1c2Ugc3RkOjptYXJrZXI6OlVuc2l6ZTsKCnB1YiBzdHJ1Y3QgTXlUeXBlOwoKaW1wbDxUPiBVbnNpemU8VD4gZm9yIE15VHlwZSB7fQpgYGAKCklmIHlvdSBhcmUgZGVmaW5pbmcgeW91ciBvd24gc21hcnQgcG9pbnRlciB0eXBlIGFuZCB3b3VsZCBsaWtlIHRvIGVuYWJsZQpjb252ZXJzaW9uIGZyb20gYSBzaXplZCB0byBhbiB1bnNpemVkIHR5cGUgd2l0aCB0aGUKW0RTVCBjb2VyY2lvbiBzeXN0ZW1dW1JGQyA5ODJdLCB1c2UgW2BDb2VyY2VVbnNpemVkYF0gaW5zdGVhZC4KCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnB1YiBzdHJ1Y3QgTXlUeXBlPFQ6ID9TaXplZD4gewogICAgZmllbGRfd2l0aF91bnNpemVkX3R5cGU6IFQsCn0KCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxNeVR5cGU8VT4+IGZvciBNeVR5cGU8VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpbUkZDIDk4Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzA5ODItZHN0LWNvZXJjaW9uLm1kCltgQ29lcmNlVW5zaXplZGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9vcHMvdHJhaXQuQ29lcmNlVW5zaXplZC5odG1sCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/zgYAAQDOBsECAP5AJgAA/AQAAgcA/QQBAAMA7QIOAAD7BAIFAQRTb21lAQEAtAkAAfwEAAMA7QIOAAL7BAABAwDYAiQAAPoEAQEAtAkAAsACANkCEgAAtAkFAQVFMDMyOAABHwUAAQAFAwDYAiQAAPoEAQEBuQkAAfsEAMMCAK1BJgAAgQUAAALDAgCtQSYAALQJBQG5BSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWNjZXNzIGFuIGFzc29jaWF0ZWQgY29uc3RhbnQgdGhyb3VnaCBlaXRoZXIgYSBnZW5lcmljCnR5cGUgcGFyYW1ldGVyIG9yIGBTZWxmYC4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIHlldC4gQW4gZXhhbXBsZSBjYXVzaW5nIHRoaXMKZXJyb3IgaXMgc2hvd24gYmVsb3c6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogZjY0Owp9CgpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIEZvbyBmb3IgTXlTdHJ1Y3QgewogICAgY29uc3QgQkFSOiBmNjQgPSAwZjY0Owp9CgpmbiBnZXRfYmFyX2JhZDxGOiBGb28+KHQ6IEYpIC0+IGY2NCB7CiAgICBGOjpCQVIKfQpgYGAKCkN1cnJlbnRseSwgdGhlIHZhbHVlIG9mIGBCQVJgIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBjYW4gb25seSBiZSBhY2Nlc3NlZAp0aHJvdWdoIGEgY29uY3JldGUgdHlwZSwgYXMgc2hvd24gYmVsb3c6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogZjY0Owp9CgpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIEZvbyBmb3IgTXlTdHJ1Y3QgewogICAgY29uc3QgQkFSOiBmNjQgPSAwZjY0Owp9CgpmbiBnZXRfYmFyX2dvb2QoKSAtPiBmNjQgewogICAgPE15U3RydWN0IGFzIEZvbz46OkJBUgp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wG5BQABALkFwwIArUEmAACABQACBwCBBQEAAwDtAg4AAP8EAgUBBFNvbWUBAQC0CQABgAUAAwDtAg4AAv8EAAEDANgCJAAA/gQBAQC0CQACwgIA2QISAAC0CQUBBUUwMzI5AAEfBQABAAUDANgCJAAA/gQBAQG5CQAB/wQAxQIA3EEmAACFBQAAAsUCANxBJgAAtAkFAakFUHJpdmF0ZSBpdGVtcyBjYW5ub3QgYmUgcHVibGljbHkgcmUtZXhwb3J0ZWQuIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgeW91CmF0dGVtcHRlZCB0byBgcHViIHVzZWAgYSB0eXBlIG9yIHZhbHVlIHRoYXQgd2FzIG5vdCBpdHNlbGYgcHVibGljLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NAptb2QgYSB7CiAgICBmbiBmb28oKSB7fQoKICAgIG1vZCBhIHsKICAgICAgICBwdWIgdXNlIHN1cGVyOjpmb287IC8vIGVycm9yIQogICAgfQp9CmBgYAoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgaXRlbXMgdGhhdCB5b3UgYXJlCnJlLWV4cG9ydGluZyBhcmUgdGhlbXNlbHZlcyBtYXJrZWQgd2l0aCBgcHViYDoKCmBgYAptb2QgYSB7CiAgICBwdWIgZm4gZm9vKCkge30gLy8gb2shCgogICAgbW9kIGEgewogICAgICAgIHB1YiB1c2Ugc3VwZXI6OmZvbzsKICAgIH0KfQpgYGAKClNlZSB0aGUgW1VzZSBEZWNsYXJhdGlvbnNdW3VzZS1kZWNsYXJhdGlvbnNdIHNlY3Rpb24gb2YgdGhlIHJlZmVyZW5jZSBmb3IKbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLgoKW3VzZS1kZWNsYXJhdGlvbnNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy91c2UtZGVjbGFyYXRpb25zLmh0bWwKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/qQUAAQCpBcUCANxBJgAAhAUAAgcAhQUBAAMA7QIOAACDBQIFAQRTb21lAQEAtAkAAYQFAAMA7QIOAAKDBQABAwDYAiQAAIIFAQEAtAkAAsQCANkCEgAAtAkFAQVFMDM2NAABHwUAAQAFAwDYAiQAAIIFAQEBuQkAAYMFAMcCAItCJgAAiQUAAALHAgCLQiYAALQJBQGRBVByaXZhdGUgbW9kdWxlcyBjYW5ub3QgYmUgcHVibGljbHkgcmUtZXhwb3J0ZWQuIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgeW91CmF0dGVtcHRlZCB0byBgcHViIHVzZWAgYSBtb2R1bGUgdGhhdCB3YXMgbm90IGl0c2VsZiBwdWJsaWMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY1Cm1vZCBmb28gewogICAgcHViIGNvbnN0IFg6IHUzMiA9IDE7Cn0KCnB1YiB1c2UgZm9vIGFzIGZvbzI7CgpmbiBtYWluKCkge30KYGBgCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2R1bGUgdGhhdCB5b3UgYXJlCnJlLWV4cG9ydGluZyBpcyBpdHNlbGYgbWFya2VkIHdpdGggYHB1YmA6CgpgYGAKcHViIG1vZCBmb28gewogICAgcHViIGNvbnN0IFg6IHUzMiA9IDE7Cn0KCnB1YiB1c2UgZm9vIGFzIGZvbzI7CgpmbiBtYWluKCkge30KYGBgCgpTZWUgdGhlIFtVc2UgRGVjbGFyYXRpb25zXVt1c2UtZGVjbGFyYXRpb25zXSBzZWN0aW9uIG9mIHRoZSByZWZlcmVuY2UgZm9yCm1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYy4KClt1c2UtZGVjbGFyYXRpb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdXNlLWRlY2xhcmF0aW9ucy5odG1sCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B5EFAAEAkQXHAgCLQiYAAIgFAAIHAIkFAQADAO0CDgAAhwUCBQEEU29tZQEBALQJAAGIBQADAO0CDgAChwUAAQMA2AIkAACGBQEBALQJAALGAgDZAhIAALQJBQEFRTAzNjUAAR8FAAEABQMA2AIkAACGBQEBAbkJAAGHBQDJAgC6QiYAAI0FAAACyQIAukImAAC0CQUBjARBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGltcGxlbWVudCBgRHJvcGAgb24gYSBjb25jcmV0ZSBzcGVjaWFsaXphdGlvbiBvZiBhCmdlbmVyaWMgdHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzoKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIHQ6IFQKfQoKaW1wbCBEcm9wIGZvciBGb288dTMyPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKClRoaXMgY29kZSBpcyBub3QgbGVnYWw6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWFsaXplIGBEcm9wYCB0byBhIHN1YnNldCBvZgppbXBsZW1lbnRhdGlvbnMgb2YgYSBnZW5lcmljIHR5cGUuIE9uZSB3b3JrYXJvdW5kIGZvciB0aGlzIGlzIHRvIHdyYXAgdGhlCmdlbmVyaWMgdHlwZSwgYXMgc2hvd24gYmVsb3c6CgpgYGAKc3RydWN0IEZvbzxUPiB7CiAgICB0OiBUCn0KCnN0cnVjdCBCYXIgewogICAgdDogRm9vPHUzMj4KfQoKaW1wbCBEcm9wIGZvciBCYXIgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/H4wEAAEAjATJAgC6QiYAAIwFAAIHAI0FAQADAO0CDgAAiwUCBQEEU29tZQEBALQJAAGMBQADAO0CDgACiwUAAQMA2AIkAACKBQEBALQJAALIAgDZAhIAALQJBQEFRTAzNjYAAR8FAAEABQMA2AIkAACKBQEBAbkJAAGLBQDLAgDpQiYAAJEFAAACywIA6UImAAC0CQUB2AVBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGltcGxlbWVudCBgRHJvcGAgb24gYSBzcGVjaWFsaXphdGlvbiBvZiBhIGdlbmVyaWMgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjcKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgTXlTdHJ1Y3Q8VD4gewogICAgdDogVAp9CgppbXBsPFQ6IEZvbz4gRHJvcCBmb3IgTXlTdHJ1Y3Q8VD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgpUaGlzIGNvZGUgaXMgbm90IGxlZ2FsOiBpdCBpcyBub3QgcG9zc2libGUgdG8gc3BlY2lhbGl6ZSBgRHJvcGAgdG8gYSBzdWJzZXQgb2YKaW1wbGVtZW50YXRpb25zIG9mIGEgZ2VuZXJpYyB0eXBlLiBJbiBvcmRlciBmb3IgdGhpcyBjb2RlIHRvIHdvcmssIGBNeVN0cnVjdGAKbXVzdCBhbHNvIHJlcXVpcmUgdGhhdCBgVGAgaW1wbGVtZW50cyBgRm9vYC4gQWx0ZXJuYXRpdmVseSwgYW5vdGhlciBvcHRpb24gaXMKdG8gd3JhcCB0aGUgZ2VuZXJpYyB0eXBlIGluIGFub3RoZXIgdGhhdCBzcGVjaWFsaXplcyBhcHByb3ByaWF0ZWx5OgoKYGBgCnRyYWl0IEZvb3t9CgpzdHJ1Y3QgTXlTdHJ1Y3Q8VD4gewogICAgdDogVAp9CgpzdHJ1Y3QgTXlTdHJ1Y3RXcmFwcGVyPFQ6IEZvbz4gewogICAgdDogTXlTdHJ1Y3Q8VD4KfQoKaW1wbCA8VDogRm9vPiBEcm9wIGZvciBNeVN0cnVjdFdyYXBwZXI8VD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8H2AUAAQDYBcsCAOlCJgAAkAUAAgcAkQUBAAMA7QIOAACPBQIFAQRTb21lAQEAtAkAAZAFAAMA7QIOAAKPBQABAwDYAiQAAI4FAQEAtAkAAsoCANkCEgAAtAkFAQVFMDM2NwABHwUAAQAFAwDYAiQAAI4FAQEBuQkAAY8FAM0CAJhDJgAAlQUAAALNAgCYQyYAALQJBQG+CUEgYmluYXJ5IGFzc2lnbm1lbnQgb3BlcmF0b3IgbGlrZSBgKz1gIG9yIGBePWAgd2FzIGFwcGxpZWQgdG8gYSB0eXBlIHRoYXQKZG9lc24ndCBzdXBwb3J0IGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OApsZXQgbXV0IHggPSAxMmYzMjsgLy8gZXJyb3I6IGJpbmFyeSBvcGVyYXRpb24gYDw8YCBjYW5ub3QgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHR5cGUgYGYzMmAKCnggPDw9IDI7CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBjaGVjayB0aGF0IHRoaXMgdHlwZSBpbXBsZW1lbnRzIHRoaXMgYmluYXJ5Cm9wZXJhdGlvbi4gRXhhbXBsZToKCmBgYApsZXQgbXV0IHggPSAxMnUzMjsgLy8gdGhlIGB1MzJgIHR5cGUgZG9lcyBpbXBsZW1lbnQgdGhlIGBTaGxBc3NpZ25gIHRyYWl0Cgp4IDw8PSAyOyAvLyBvayEKYGBgCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJsb2FkIG1vc3Qgb3BlcmF0b3JzIGZvciB5b3VyIG93biB0eXBlIGJ5CmltcGxlbWVudGluZyB0aGUgYFtPUF1Bc3NpZ25gIHRyYWl0cyBmcm9tIGBzdGQ6Om9wc2AuCgpBbm90aGVyIHByb2JsZW0geW91IG1pZ2h0IGJlIGZhY2luZyBpcyB0aGlzOiBzdXBwb3NlIHlvdSd2ZSBvdmVybG9hZGVkIHRoZSBgK2AKb3BlcmF0b3IgZm9yIHNvbWUgdHlwZSBgRm9vYCBieSBpbXBsZW1lbnRpbmcgdGhlIGBzdGQ6Om9wczo6QWRkYCB0cmFpdCBmb3IKYEZvb2AsIGJ1dCB5b3UgZmluZCB0aGF0IHVzaW5nIGArPWAgZG9lcyBub3Qgd29yaywgYXMgaW4gdGhpcyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY4CnVzZSBzdGQ6Om9wczo6QWRkOwoKc3RydWN0IEZvbyh1MzIpOwoKaW1wbCBBZGQgZm9yIEZvbyB7CiAgICB0eXBlIE91dHB1dCA9IEZvbzsKCiAgICBmbiBhZGQoc2VsZiwgcmhzOiBGb28pIC0+IEZvbyB7CiAgICAgICAgRm9vKHNlbGYuMCArIHJocy4wKQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4OiBGb28gPSBGb28oNSk7CiAgICB4ICs9IEZvbyg3KTsgLy8gZXJyb3IsIGArPSBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgdHlwZSBgRm9vYAp9CmBgYAoKVGhpcyBpcyBiZWNhdXNlIGBBZGRBc3NpZ25gIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGltcGxlbWVudGVkLCBzbyB5b3UgbmVlZCB0bwptYW51YWxseSBpbXBsZW1lbnQgaXQgZm9yIHlvdXIgdHlwZS4KABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z++CQABAL4JzQIAmEMmAACUBQACBwCVBQEAAwDtAg4AAJMFAgUBBFNvbWUBAQC0CQABlAUAAwDtAg4AApMFAAEDANgCJAAAkgUBAQC0CQACzAIA2QISAAC0CQUBBUUwMzY4AAEfBQABAAUDANgCJAAAkgUBAQG5CQABkwUAzwIAx0MmAACZBQAAAs8CAMdDJgAAtAkFAfsGQSBiaW5hcnkgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSB0eXBlIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjkKbGV0IHggPSAxMmYzMjsgLy8gZXJyb3I6IGJpbmFyeSBvcGVyYXRpb24gYDw8YCBjYW5ub3QgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAvLyAgICAgICAgdHlwZSBgZjMyYAoKeCA8PCAyOwpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgY2hlY2sgdGhhdCB0aGlzIHR5cGUgaW1wbGVtZW50cyB0aGlzIGJpbmFyeQpvcGVyYXRpb24uIEV4YW1wbGU6CgpgYGAKbGV0IHggPSAxMnUzMjsgLy8gdGhlIGB1MzJgIHR5cGUgZG9lcyBpbXBsZW1lbnQgaXQ6CiAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3N0ZC9vcHMvdHJhaXQuU2hsLmh0bWwKCnggPDwgMjsgLy8gb2shCmBgYAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBvdmVybG9hZCBtb3N0IG9wZXJhdG9ycyBmb3IgeW91ciBvd24gdHlwZSBieQppbXBsZW1lbnRpbmcgdHJhaXRzIGZyb20gYHN0ZDo6b3BzYC4KClN0cmluZyBjb25jYXRlbmF0aW9uIGFwcGVuZHMgdGhlIHN0cmluZyBvbiB0aGUgcmlnaHQgdG8gdGhlIHN0cmluZyBvbiB0aGUKbGVmdCBhbmQgbWF5IHJlcXVpcmUgcmVhbGxvY2F0aW9uLiBUaGlzIHJlcXVpcmVzIG93bmVyc2hpcCBvZiB0aGUgc3RyaW5nCm9uIHRoZSBsZWZ0LiBJZiBzb21ldGhpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIGEgc3RyaW5nIGxpdGVyYWwsIG1vdmUgdGhlCmxpdGVyYWwgdG8gdGhlIGhlYXAgYnkgYWxsb2NhdGluZyBpdCB3aXRoIGB0b19vd25lZCgpYCBsaWtlIGluCmAiWW91ciB0ZXh0Ii50b19vd25lZCgpYC4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wYAAQD7Bs8CAMdDJgAAmAUAAgcAmQUBAAMA7QIOAACXBQIFAQRTb21lAQEAtAkAAZgFAAMA7QIOAAKXBQABAwDYAiQAAJYFAQEAtAkAAs4CANkCEgAAtAkFAQVFMDM2OQABHwUAAQAFAwDYAiQAAJYFAQEBuQkAAZcFANECAPZDJgAAnQUAAALRAgD2QyYAALQJBQG8BVRoZSBtYXhpbXVtIHZhbHVlIG9mIGFuIGVudW0gd2FzIHJlYWNoZWQsIHNvIGl0IGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5CnNldCBpbiB0aGUgbmV4dCBlbnVtIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MAojW3JlcHIoaTY0KV0KZW51bSBGb28gewogICAgWCA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwKICAgIFksIC8vIGVycm9yOiBlbnVtIGRpc2NyaW1pbmFudCBvdmVyZmxvd2VkIG9uIHZhbHVlIGFmdGVyCiAgICAgICAvLyAgICAgICAgOTIyMzM3MjAzNjg1NDc3NTgwNzogaTY0OyBzZXQgZXhwbGljaXRseSB2aWEKICAgICAgIC8vICAgICAgICBZID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDggaWYgdGhhdCBpcyBkZXNpcmVkIG91dGNvbWUKfQpgYGAKClRvIGZpeCB0aGlzLCBwbGVhc2Ugc2V0IG1hbnVhbGx5IHRoZSBuZXh0IGVudW0gdmFsdWUgb3IgcHV0IHRoZSBlbnVtIHZhcmlhbnQKd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoZSBlbnVtLiBFeGFtcGxlczoKCmBgYAojW3JlcHIoaTY0KV0KZW51bSBGb28gewogICAgWCA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwKICAgIFkgPSAwLCAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCiNbcmVwcihpNjQpXQplbnVtIEZvbyB7CiAgICBZID0gMCwgLy8gb2shCiAgICBYID0gMHg3ZmZmZmZmZmZmZmZmZmZmLAp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////w+8BQABALwF0QIA9kMmAACcBQACBwCdBQEAAwDtAg4AAJsFAgUBBFNvbWUBAQC0CQABnAUAAwDtAg4AApsFAAEDANgCJAAAmgUBAQC0CQAC0AIA2QISAAC0CQUBBUUwMzcwAAEfBQABAAUDANgCJAAAmgUBAQG5CQABmwUA0wIApUQmAAChBQAAAtMCAKVEJgAAtAkFAd0FQSB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYW5vdGhlciB3aGljaCBhbHJlYWR5IGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MQp0cmFpdCBGb28geyBmbiBmb28oJnNlbGYpIHsgfSB9CnRyYWl0IEJhcjogRm9vIHsgfQp0cmFpdCBCYXo6IEJhciB7IH0KCmltcGwgQmFyIGZvciBCYXogeyB9IC8vIGVycm9yLCBgQmF6YCBpbXBsZW1lbnRzIGBCYXJgIGJ5IGRlZmluaXRpb24KaW1wbCBGb28gZm9yIEJheiB7IH0gLy8gZXJyb3IsIGBCYXpgIGltcGxlbWVudHMgYEJhcmAgd2hpY2ggaW1wbGVtZW50cyBgRm9vYAppbXBsIEJheiBmb3IgQmF6IHsgfSAvLyBlcnJvciwgYEJhemAgKHRyaXZpYWxseSkgaW1wbGVtZW50cyBgQmF6YAppbXBsIEJheiBmb3IgQmFyIHsgfSAvLyBOb3RlOiBUaGlzIGlzIE9LCmBgYAoKV2hlbiBgVHJhaXQyYCBpcyBhIHN1YnRyYWl0IG9mIGBUcmFpdDFgIChmb3IgZXhhbXBsZSwgd2hlbiBgVHJhaXQyYCBoYXMgYQpkZWZpbml0aW9uIGxpa2UgYHRyYWl0IFRyYWl0MjogVHJhaXQxIHsgLi4uIH1gKSwgaXQgaXMgbm90IGFsbG93ZWQgdG8gaW1wbGVtZW50CmBUcmFpdDFgIGZvciBgVHJhaXQyYC4gVGhpcyBpcyBiZWNhdXNlIGBUcmFpdDJgIGFscmVhZHkgaW1wbGVtZW50cyBgVHJhaXQxYCBieQpkZWZpbml0aW9uLCBzbyBpdCBpcyBub3QgdXNlZnVsIHRvIGRvIHRoaXMuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0FAAEA3QXTAgClRCYAAKAFAAIHAKEFAQADAO0CDgAAnwUCBQEEU29tZQEBALQJAAGgBQADAO0CDgACnwUAAQMA2AIkAACeBQEBALQJAALSAgDZAhIAALQJBQEFRTAzNzEAAR8FAAEABQMA2AIkAACeBQEBAbkJAAGfBQDVAgDURCYAAKUFAAAC1QIA1EQmAAC0CQUBzBBBIGNhcHR1cmVkIHZhcmlhYmxlIGluIGEgY2xvc3VyZSBtYXkgbm90IGxpdmUgbG9uZyBlbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzczCmZuIGZvbygpIC0+IEJveDxGbih1MzIpIC0+IHUzMj4gewogICAgbGV0IHggPSAwdTMyOwogICAgQm94OjpuZXcofHl8IHggKyB5KQp9CmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIGRhdGEgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLAp3aGVuIHRoYXQgZGF0YSBtYXkgbm8gbG9uZ2VyIGV4aXN0LiBJdCdzIG1vc3QgY29tbW9ubHkgc2VlbiB3aGVuIGF0dGVtcHRpbmcgdG8KcmV0dXJuIGEgY2xvc3VyZSBhcyBzaG93biBpbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLgoKTm90aWNlIHRoYXQgYHhgIGlzIHN0YWNrLWFsbG9jYXRlZCBieSBgZm9vKClgLiBCeSBkZWZhdWx0LCBSdXN0IGNhcHR1cmVzCmNsb3NlZC1vdmVyIGRhdGEgYnkgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgb25jZSBgZm9vKClgIHJldHVybnMsIGB4YCBubwpsb25nZXIgZXhpc3RzLiBBbiBhdHRlbXB0IHRvIGFjY2VzcyBgeGAgd2l0aGluIHRoZSBjbG9zdXJlIHdvdWxkIHRodXMgYmUKdW5zYWZlLgoKQW5vdGhlciBzaXR1YXRpb24gd2hlcmUgdGhpcyBtaWdodCBiZSBlbmNvdW50ZXJlZCBpcyB3aGVuIHNwYXduaW5nIHRocmVhZHM6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMKZm4gZm9vKCkgewogICAgbGV0IHggPSAwdTMyOwogICAgbGV0IHkgPSAxdTMyOwoKICAgIGxldCB0aHIgPSBzdGQ6OnRocmVhZDo6c3Bhd24ofHwgewogICAgICAgIHggKyB5CiAgICB9KTsKfQpgYGAKClNpbmNlIG91ciBuZXcgdGhyZWFkIHJ1bnMgaW4gcGFyYWxsZWwsIHRoZSBzdGFjayBmcmFtZSBjb250YWluaW5nIGB4YCBhbmQgYHlgCm1heSB3ZWxsIGhhdmUgZGlzYXBwZWFyZWQgYnkgdGhlIHRpbWUgd2UgdHJ5IHRvIHVzZSB0aGVtLiBFdmVuIGlmIHdlIGNhbGwKYHRoci5qb2luKClgIHdpdGhpbiBmb28gKHdoaWNoIGJsb2NrcyB1bnRpbCBgdGhyYCBoYXMgY29tcGxldGVkLCBlbnN1cmluZyB0aGUKc3RhY2sgZnJhbWUgd29uJ3QgZGlzYXBwZWFyKSwgd2Ugd2lsbCBub3Qgc3VjY2VlZDogdGhlIGNvbXBpbGVyIGNhbm5vdCBwcm92ZQp0aGF0IHRoaXMgYmVoYXZpb3IgaXMgc2FmZSwgYW5kIHNvIHdvbid0IGxldCB1cyBkbyBpdC4KClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdXN1YWxseSB0byBzd2l0Y2ggdG8gdXNpbmcgYSBgbW92ZWAgY2xvc3VyZS4KVGhpcyBhcHByb2FjaCBtb3ZlcyAob3IgY29waWVzLCB3aGVyZSBwb3NzaWJsZSkgZGF0YSBpbnRvIHRoZSBjbG9zdXJlLCByYXRoZXIKdGhhbiB0YWtpbmcgcmVmZXJlbmNlcyB0byBpdC4gRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vKCkgLT4gQm94PEZuKHUzMikgLT4gdTMyPiB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBCb3g6Om5ldyhtb3ZlIHx5fCB4ICsgeSkKfQpgYGAKCk5vdyB0aGF0IHRoZSBjbG9zdXJlIGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIGRhdGEsIHRoZXJlJ3Mgbm8gbmVlZCB0byB3b3JyeQphYm91dCBzYWZldHkuCgpUaGlzIGVycm9yIG1heSBhbHNvIGJlIGVuY291bnRlcmVkIHdoaWxlIHVzaW5nIGBhc3luY2AgYmxvY2tzOgoKYGBgY29tcGlsZV9mYWlsLEUwMzczLGVkaXRpb24yMDE4CnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwoKYXN5bmMgZm4gZigpIHsKICAgIGxldCB2ID0gdmVjIVsxLCAyLCAzaTMyXTsKICAgIHNwYXduKGFzeW5jIHsgLy9+IEVSUk9SIEUwMzczCiAgICAgICAgcHJpbnRsbiEoIns6P30iLCB2KQogICAgfSk7Cn0KCmZuIHNwYXduPEY6IEZ1dHVyZSArIFNlbmQgKyAnc3RhdGljPihmdXR1cmU6IEYpIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQpgYGAKClNpbWlsYXJseSB0byBjbG9zdXJlcywgYGFzeW5jYCBibG9ja3MgYXJlIG5vdCBleGVjdXRlZCBpbW1lZGlhdGVseSBhbmQgbWF5CmNhcHR1cmUgY2xvc2VkLW92ZXIgZGF0YSBieSByZWZlcmVuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL2FzeW5jLWJvb2svMDNfYXN5bmNfYXdhaXQvMDFfY2hhcHRlci5odG1sLgoAIv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8fzBAAAQDMENUCANREJgAApAUAAgcApQUBAAMA7QIOAACjBQIFAQRTb21lAQEAtAkAAaQFAAMA7QIOAAKjBQABAwDYAiQAAKIFAQEAtAkAAtQCANkCEgAAtAkFAQVFMDM3MwABHwUAAQAFAwDYAiQAAKIFAQEBuQkAAaMFANcCAINFJgAAqQUAAALXAgCDRSYAALQJBQHRDGBDb2VyY2VVbnNpemVkYCB3YXMgaW1wbGVtZW50ZWQgb24gYSBzdHJ1Y3Qgd2hpY2ggZG9lcyBub3QgY29udGFpbiBhIGZpZWxkIHdpdGgKYW4gdW5zaXplZCB0eXBlLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3NAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKc3RydWN0IEZvbzxUOiA/U2l6ZWQ+IHsKICAgIGE6IGkzMiwKfQoKLy8gZXJyb3I6IFN0cnVjdCBgRm9vYCBoYXMgbm8gdW5zaXplZCBmaWVsZHMgdGhhdCBuZWVkIGBDb2VyY2VVbnNpemVkYC4KaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPEZvbzxVPj4gZm9yIEZvbzxUPgogICAgd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCkFuIFt1bnNpemVkIHR5cGVdWzFdIGlzIGFueSB0eXBlIHdoZXJlIHRoZSBjb21waWxlciBkb2VzIG5vdCBrbm93IHRoZSBsZW5ndGggb3IKYWxpZ25tZW50IG9mIGF0IGNvbXBpbGUgdGltZS4gQW55IHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZSBpcyBhbHNvCnVuc2l6ZWQuCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTA0LWFkdmFuY2VkLXR5cGVzLmh0bWwjZHluYW1pY2FsbHktc2l6ZWQtdHlwZXMtYW5kLXRoZS1zaXplZC10cmFpdAoKYENvZXJjZVVuc2l6ZWRgIGlzIHVzZWQgdG8gY29lcmNlIG9uZSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUKaW50byBhbm90aGVyIHN0cnVjdCBjb250YWluaW5nIGEgZGlmZmVyZW50IHVuc2l6ZWQgdHlwZS4gSWYgdGhlIHN0cnVjdApkb2Vzbid0IGhhdmUgYW55IGZpZWxkcyBvZiB1bnNpemVkIHR5cGVzIHRoZW4geW91IGRvbid0IG5lZWQgZXhwbGljaXQKY29lcmNpb24gdG8gZ2V0IHRoZSB0eXBlcyB5b3Ugd2FudC4gVG8gZml4IHRoaXMgeW91IGNhbiBlaXRoZXIKbm90IHRyeSB0byBpbXBsZW1lbnQgYENvZXJjZVVuc2l6ZWRgIG9yIHlvdSBjYW4gYWRkIGEgZmllbGQgdGhhdCBpcwp1bnNpemVkIHRvIHRoZSBzdHJ1Y3QuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgovLyBXZSBkb24ndCBuZWVkIHRvIGltcGwgYENvZXJjZVVuc2l6ZWRgIGhlcmUuCnN0cnVjdCBGb28gewogICAgYTogaTMyLAp9CgovLyBXZSBhZGQgdGhlIHVuc2l6ZWQgdHlwZSBmaWVsZCB0byB0aGUgc3RydWN0LgpzdHJ1Y3QgQmFyPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAogICAgYjogVCwKfQoKLy8gVGhlIHN0cnVjdCBoYXMgYW4gdW5zaXplZCBmaWVsZCBzbyB3ZSBjYW4gaW1wbGVtZW50Ci8vIGBDb2VyY2VVbnNpemVkYCBmb3IgaXQuCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxCYXI8VT4+IGZvciBCYXI8VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpOb3RlIHRoYXQgYENvZXJjZVVuc2l6ZWRgIGlzIG1haW5seSB1c2VkIGJ5IHNtYXJ0IHBvaW50ZXJzIGxpa2UgYEJveGAsIGBSY2AKYW5kIGBBcmNgIHRvIGJlIGFibGUgdG8gbWFyayB0aGF0IHRoZXkgY2FuIGNvZXJjZSB1bnNpemVkIHR5cGVzIHRoYXQgdGhleQphcmUgcG9pbnRpbmcgYXQuCgAa////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B9EMAAEA0QzXAgCDRSYAAKgFAAIHAKkFAQADAO0CDgAApwUCBQEEU29tZQEBALQJAAGoBQADAO0CDgACpwUAAQMA2AIkAACmBQEBALQJAALWAgDZAhIAALQJBQEFRTAzNzQAAR8FAAEABQMA2AIkAACmBQEBAbkJAAGnBQDZAgCyRSYAAK0FAAAC2QIAskUmAAC0CQUBmg5gQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZmllbGQKd2l0aCBhbiB1bnNpemVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc1CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZCwgVTogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAogICAgYzogVSwKfQoKLy8gZXJyb3I6IFN0cnVjdCBgRm9vYCBoYXMgbW9yZSB0aGFuIG9uZSB1bnNpemVkIGZpZWxkLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFUsIFQ+PiBmb3IgRm9vPFQsIFU+IHt9CmBgYAoKQSBzdHJ1Y3Qgd2l0aCBtb3JlIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGNhbm5vdCBpbXBsZW1lbnQKYENvZXJjZVVuc2l6ZWRgLiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gY29lcmNlIG9uZSBvZiB0aGUKdHlwZXMgaW4geW91ciBzdHJ1Y3QgdG8gYW5vdGhlciB0eXBlIGluIHRoZSBzdHJ1Y3QuIEluIHRoaXMgY2FzZSB3ZSB0cnkgdG8KaW1wbCBgQ29lcmNlVW5zaXplZGAgZnJvbSBgVGAgdG8gYFVgIHdoaWNoIGFyZSBib3RoIHR5cGVzIHRoYXQgdGhlIHN0cnVjdAp0YWtlcy4gQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBrbm93IHRoZQpsZW5ndGggb3IgYWxpZ25tZW50IG9mIGF0IGNvbXBpbGUgdGltZS4gQW55IHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppcyBhbHNvIHVuc2l6ZWQuCgpgQ29lcmNlVW5zaXplZGAgb25seSBhbGxvd3MgZm9yIGNvZXJjaW9uIGZyb20gYSBzdHJ1Y3R1cmUgd2l0aCBhIHNpbmdsZQp1bnNpemVkIHR5cGUgZmllbGQgdG8gYW5vdGhlciBzdHJ1Y3Qgd2l0aCBhIHNpbmdsZSB1bnNpemVkIHR5cGUgZmllbGQuCkluIGZhY3QgUnVzdCBvbmx5IGFsbG93cyBmb3IgYSBzdHJ1Y3QgdG8gaGF2ZSBvbmUgdW5zaXplZCB0eXBlIGluIGEgc3RydWN0CmFuZCB0aGF0IHVuc2l6ZWQgdHlwZSBtdXN0IGJlIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIFNvIGhhdmluZyB0d28KdW5zaXplZCB0eXBlcyBpbiBhIHNpbmdsZSBzdHJ1Y3QgaXMgbm90IGFsbG93ZWQgYnkgdGhlIGNvbXBpbGVyLiBUbyBmaXggdGhpcwp1c2Ugb25seSBvbmUgZmllbGQgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaW4gdGhlIHN0cnVjdCBhbmQgdGhlbiB1c2UKbXVsdGlwbGUgc3RydWN0cyB0byBtYW5hZ2UgZWFjaCB1bnNpemVkIHR5cGUgZmllbGQgeW91IG5lZWQuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAogICAgYjogVCwKfQoKaW1wbCA8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KCmZuIGNvZXJjZV9mb288VDogQ29lcmNlVW5zaXplZDxVPiwgVT4odDogVCkgLT4gRm9vPFU+IHsKICAgIEZvbyB7IGE6IDEyaTMyLCBiOiB0IH0gLy8gd2UgdXNlIGNvZXJjaW9uIHRvIGdldCB0aGUgYEZvbzxVPmAgdHlwZSB3ZSBuZWVkCn0KYGBgCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTA0LWFkdmFuY2VkLXR5cGVzLmh0bWwjZHluYW1pY2FsbHktc2l6ZWQtdHlwZXMtYW5kLXRoZS1zaXplZC10cmFpdAoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8fmg4AAQCaDtkCALJFJgAArAUAAgcArQUBAAMA7QIOAACrBQIFAQRTb21lAQEAtAkAAawFAAMA7QIOAAKrBQABAwDYAiQAAKoFAQEAtAkAAtgCANkCEgAAtAkFAQVFMDM3NQABHwUAAQAFAwDYAiQAAKoFAQEBuQkAAasFANsCAOFFJgAAsQUAAALbAgDhRSYAALQJBQH6CmBDb2VyY2VVbnNpemVkYCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc2CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogVCwKfQoKLy8gZXJyb3I6IFRoZSB0eXBlIGBVYCBpcyBub3QgYSBzdHJ1Y3QKaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPFU+IGZvciBGb288VD4ge30KYGBgCgpgQ29lcmNlVW5zaXplZGAgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIGEgc3RydWN0LiBVbnNpemVkIHR5cGVzIGFyZQphbHJlYWR5IGFibGUgdG8gYmUgY29lcmNlZCB3aXRob3V0IGFuIGltcGxlbWVudGF0aW9uIG9mIGBDb2VyY2VVbnNpemVkYAp3aGVyZWFzIGEgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIG5lZWRzIHRvIGtub3cgdGhlIHVuc2l6ZWQgdHlwZQpmaWVsZCBpdCdzIGNvbnRhaW5pbmcgaXMgYWJsZSB0byBiZSBjb2VyY2VkLiBBbiBbdW5zaXplZCB0eXBlXVsxXQppcyBhbnkgdHlwZSB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgdGhlIGxlbmd0aCBvciBhbGlnbm1lbnQgb2YgYXQKY29tcGlsZSB0aW1lLiBBbnkgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGlzIGFsc28gdW5zaXplZC4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDQtYWR2YW5jZWQtdHlwZXMuaHRtbCNkeW5hbWljYWxseS1zaXplZC10eXBlcy1hbmQtdGhlLXNpemVkLXRyYWl0CgpUaGUgYENvZXJjZVVuc2l6ZWRgIHRyYWl0IHRha2VzIGEgc3RydWN0IHR5cGUuIE1ha2Ugc3VyZSB0aGUgdHlwZSB5b3UgYXJlCnByb3ZpZGluZyB0byBgQ29lcmNlVW5zaXplZGAgaXMgYSBzdHJ1Y3Qgd2l0aCBvbmx5IHRoZSBsYXN0IGZpZWxkIGNvbnRhaW5pbmcgYW4KdW5zaXplZCB0eXBlLgoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKc3RydWN0IEZvbzxUPiB7CiAgICBhOiBULAp9CgovLyBUaGUgYEZvbzxVPmAgaXMgYSBzdHJ1Y3Qgc28gYENvZXJjZVVuc2l6ZWRgIGNhbiBiZSBpbXBsZW1lbnRlZAppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFU+PiBmb3IgRm9vPFQ+IHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpOb3RlIHRoYXQgaW4gUnVzdCwgc3RydWN0cyBjYW4gb25seSBjb250YWluIGFuIHVuc2l6ZWQgdHlwZSBpZiB0aGUgZmllbGQKY29udGFpbmluZyB0aGUgdW5zaXplZCB0eXBlIGlzIHRoZSBsYXN0IGFuZCBvbmx5IHVuc2l6ZWQgdHlwZSBmaWVsZCBpbiB0aGUKc3RydWN0LgoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////A/oKAAEA+grbAgDhRSYAALAFAAIHALEFAQADAO0CDgAArwUCBQEEU29tZQEBALQJAAGwBQADAO0CDgACrwUAAQMA2AIkAACuBQEBALQJAALaAgDZAhIAALQJBQEFRTAzNzYAAR8FAAEABQMA2AIkAACuBQEBAbkJAAGvBQDdAgCQRiYAALUFAAAC3QIAkEYmAAC0CQUBqglUaGUgYERpc3BhdGNoRnJvbUR5bmAgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIHNvbWV0aGluZyB3aGljaCBpcyBub3QgYSBwb2ludGVyCm9yIGEgbmV3dHlwZSB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc4CiMhW2ZlYXR1cmUoZGlzcGF0Y2hfZnJvbV9keW4pXQp1c2Ugc3RkOjpvcHM6OkRpc3BhdGNoRnJvbUR5bjsKCnN0cnVjdCBXcmFwcGVyRXh0cmFGaWVsZDxUPiB7CiAgICBwdHI6IFQsCiAgICBleHRyYV9zdHVmZjogaTMyLAp9CgppbXBsPFQsIFU+IERpc3BhdGNoRnJvbUR5bjxXcmFwcGVyRXh0cmFGaWVsZDxVPj4gZm9yIFdyYXBwZXJFeHRyYUZpZWxkPFQ+CndoZXJlCiAgICBUOiBEaXNwYXRjaEZyb21EeW48VT4sCnt9CmBgYAoKVGhlIGBEaXNwYXRjaEZyb21EeW5gIHRyYWl0IGN1cnJlbnRseSBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBmb3IKYnVpbHRpbiBwb2ludGVyIHR5cGVzIGFuZCBzdHJ1Y3RzIHRoYXQgYXJlIG5ld3R5cGUgd3JhcHBlcnMgYXJvdW5kIHRoZW0K4oCUIHRoYXQgaXMsIHRoZSBzdHJ1Y3QgbXVzdCBoYXZlIG9ubHkgb25lIGZpZWxkIChleGNlcHQgZm9yYFBoYW50b21EYXRhYCksCmFuZCB0aGF0IGZpZWxkIG11c3QgaXRzZWxmIGltcGxlbWVudCBgRGlzcGF0Y2hGcm9tRHluYC4KCmBgYAojIVtmZWF0dXJlKGRpc3BhdGNoX2Zyb21fZHluLCB1bnNpemUpXQp1c2Ugc3RkOjp7CiAgICBtYXJrZXI6OlVuc2l6ZSwKICAgIG9wczo6RGlzcGF0Y2hGcm9tRHluLAp9OwoKc3RydWN0IFB0cjxUOiA/U2l6ZWQ+KCpjb25zdCBUKTsKCmltcGw8VDogP1NpemVkLCBVOiA/U2l6ZWQ+IERpc3BhdGNoRnJvbUR5bjxQdHI8VT4+IGZvciBQdHI8VD4Kd2hlcmUKICAgIFQ6IFVuc2l6ZTxVPiwKe30KYGBgCgpBbm90aGVyIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShkaXNwYXRjaF9mcm9tX2R5bildCnVzZSBzdGQ6OnsKICAgIG9wczo6RGlzcGF0Y2hGcm9tRHluLAogICAgbWFya2VyOjpQaGFudG9tRGF0YSwKfTsKCnN0cnVjdCBXcmFwcGVyPFQ+IHsKICAgIHB0cjogVCwKICAgIF9waGFudG9tOiBQaGFudG9tRGF0YTwoKT4sCn0KCmltcGw8VCwgVT4gRGlzcGF0Y2hGcm9tRHluPFdyYXBwZXI8VT4+IGZvciBXcmFwcGVyPFQ+CndoZXJlCiAgICBUOiBEaXNwYXRjaEZyb21EeW48VT4sCnt9CmBgYAoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f6oJAAEAqgndAgCQRiYAALQFAAIHALUFAQADAO0CDgAAswUCBQEEU29tZQEBALQJAAG0BQADAO0CDgACswUAAQMA2AIkAACyBQEBALQJAALcAgDZAhIAALQJBQEFRTAzNzgAAR8FAAEABQMA2AIkAACyBQEBAbkJAAGzBQDfAgC/RiYAALkFAAAC3wIAv0YmAAC0CQUBmwJBIHRyYWl0IG1ldGhvZCB3YXMgZGVjbGFyZWQgY29uc3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc5CnRyYWl0IEZvbyB7CiAgICBjb25zdCBmbiBiYXIoKSAtPiB1MzI7IC8vIGVycm9yIQp9CmBgYAoKVHJhaXQgbWV0aG9kcyBjYW5ub3QgYmUgZGVjbGFyZWQgYGNvbnN0YCBieSBkZXNpZ24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKW1JGQyA5MTFdLgoKW1JGQyA5MTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC85MTEKAAX///////////8B////////////Af///////////wH///////////8B////P5sCAAEAmwLfAgC/RiYAALgFAAIHALkFAQADAO0CDgAAtwUCBQEEU29tZQEBALQJAAG4BQADAO0CDgACtwUAAQMA2AIkAAC2BQEBALQJAALeAgDZAhIAALQJBQEFRTAzNzkAAR8FAAEABQMA2AIkAAC2BQEBAbkJAAG3BQDhAgDuRiYAAL0FAAAC4QIA7kYmAAC0CQUB/wJBbiBhdXRvIHRyYWl0IHdhcyBkZWNsYXJlZCB3aXRoIGEgbWV0aG9kIG9yIGFuIGFzc29jaWF0ZWQgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODAKdW5zYWZlIGF1dG8gdHJhaXQgVHJhaXQgewogICAgdHlwZSBPdXRwdXQ7IC8vIGVycm9yIQp9CmBgYAoKQXV0byB0cmFpdHMgY2Fubm90IGhhdmUgbWV0aG9kcyBvciBhc3NvY2lhdGVkIGl0ZW1zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKdGhlIFtvcHQtaW4gYnVpbHRpbiB0cmFpdHMgUkZDXVtSRkMgMTldLgoKW1JGQyAxOV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAwMTktb3B0LWluLWJ1aWx0aW4tdHJhaXRzLm1kCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////////3//AgABAP8C4QIA7kYmAAC8BQACBwC9BQEAAwDtAg4AALsFAgUBBFNvbWUBAQC0CQABvAUAAwDtAg4AArsFAAEDANgCJAAAugUBAQC0CQAC4AIA2QISAAC0CQUBBUUwMzgwAAEfBQABAAUDANgCJAAAugUBAQG5CQABuwUA4wIAnUcmAADBBQAAAuMCAJ1HJgAAtAkFAe8CSXQgaXMgbm90IGFsbG93ZWQgdG8gdXNlIG9yIGNhcHR1cmUgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODEKZm4gbWFpbigpIHsKICAgIGxldCB4OiBpMzI7CiAgICBsZXQgeSA9IHg7IC8vIGVycm9yLCB1c2Ugb2YgcG9zc2libHktdW5pbml0aWFsaXplZCB2YXJpYWJsZQp9CmBgYAoKVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IGFueSBkZWNsYXJlZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZwp1c2VkLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgeDogaTMyID0gMDsKICAgIGxldCB5ID0geDsgLy8gb2shCn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8f7wIAAQDvAuMCAJ1HJgAAwAUAAgcAwQUBAAMA7QIOAAC/BQIFAQRTb21lAQEAtAkAAcAFAAMA7QIOAAK/BQABAwDYAiQAAL4FAQEAtAkAAuICANkCEgAAtAkFAQVFMDM4MQABHwUAAQAFAwDYAiQAAL4FAQEBuQkAAb8FAOUCAMxHJgAAxQUAAALlAgDMRyYAALQJBQGZGkEgdmFyaWFibGUgd2FzIHVzZWQgYWZ0ZXIgaXRzIGNvbnRlbnRzIGhhdmUgYmVlbiBtb3ZlZCBlbHNld2hlcmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgyCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gTXlTdHJ1Y3R7IHM6IDV1MzIgfTsKICAgIGxldCB5ID0geDsKICAgIHgucyA9IDY7CiAgICBwcmludGxuISgie30iLCB4LnMpOwp9CmBgYAoKU2luY2UgYE15U3RydWN0YCBpcyBhIHR5cGUgdGhhdCBpcyBub3QgbWFya2VkIGBDb3B5YCwgdGhlIGRhdGEgZ2V0cyBtb3ZlZCBvdXQKb2YgYHhgIHdoZW4gd2Ugc2V0IGB5YC4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbTogb3V0c2lkZQpvZiB3b3JrYXJvdW5kcyBsaWtlIGBSY2AsIGEgdmFsdWUgY2Fubm90IGJlIG93bmVkIGJ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCgpTb21ldGltZXMgd2UgZG9uJ3QgbmVlZCB0byBtb3ZlIHRoZSB2YWx1ZS4gVXNpbmcgYSByZWZlcmVuY2UsIHdlIGNhbiBsZXQgYW5vdGhlcgpmdW5jdGlvbiBib3Jyb3cgdGhlIHZhbHVlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIG93bmVyc2hpcC4gSW4gdGhlIGV4YW1wbGUgYmVsb3csCndlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gbW92ZSBvdXIgc3RyaW5nIHRvIGBjYWxjdWxhdGVfbGVuZ3RoYCwgd2UgY2FuIGdpdmUgaXQKYSByZWZlcmVuY2UgdG8gaXQgd2l0aCBgJmAgaW5zdGVhZC4KCmBgYApmbiBtYWluKCkgewogICAgbGV0IHMxID0gU3RyaW5nOjpmcm9tKCJoZWxsbyIpOwoKICAgIGxldCBsZW4gPSBjYWxjdWxhdGVfbGVuZ3RoKCZzMSk7CgogICAgcHJpbnRsbiEoIlRoZSBsZW5ndGggb2YgJ3t9JyBpcyB7fS4iLCBzMSwgbGVuKTsKfQoKZm4gY2FsY3VsYXRlX2xlbmd0aChzOiAmU3RyaW5nKSAtPiB1c2l6ZSB7CiAgICBzLmxlbigpCn0KYGBgCgpBIG11dGFibGUgcmVmZXJlbmNlIGNhbiBiZSBjcmVhdGVkIHdpdGggYCZtdXRgLgoKU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgYSByZWZlcmVuY2UsIGJ1dCBhIGR1cGxpY2F0ZS4gQWxsIHR5cGVzIG1hcmtlZCBgQ2xvbmVgCmNhbiBiZSBkdXBsaWNhdGVkIGJ5IGNhbGxpbmcgYC5jbG9uZSgpYC4gU3Vic2VxdWVudCBjaGFuZ2VzIHRvIGEgY2xvbmUgZG8gbm90CmFmZmVjdCB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCgpNb3N0IHR5cGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBtYXJrZWQgYENsb25lYC4gVGhlIGV4YW1wbGUgYmVsb3cKZGVtb25zdHJhdGVzIHVzaW5nIGBjbG9uZSgpYCBvbiBhIHN0cmluZy4gYHMxYCBpcyBmaXJzdCBzZXQgdG8gIm1hbnkiLCBhbmQgdGhlbgpjb3BpZWQgdG8gYHMyYC4gVGhlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzMWAgaXMgcmVtb3ZlZCwgd2l0aG91dCBhZmZlY3RpbmcKYHMyYC4gImFueSBtYW55IiBpcyBwcmludGVkIHRvIHRoZSBjb25zb2xlLgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHMxID0gU3RyaW5nOjpmcm9tKCJtYW55Iik7CiAgICBsZXQgczIgPSBzMS5jbG9uZSgpOwogICAgczEucmVtb3ZlKDApOwogICAgcHJpbnRsbiEoInt9IHt9IiwgczEsIHMyKTsKfQpgYGAKCklmIHdlIGNvbnRyb2wgdGhlIGRlZmluaXRpb24gb2YgYSB0eXBlLCB3ZSBjYW4gaW1wbGVtZW50IGBDbG9uZWAgb24gaXQgb3Vyc2VsdmVzCndpdGggYCNbZGVyaXZlKENsb25lKV1gLgoKU29tZSB0eXBlcyBoYXZlIG5vIG93bmVyc2hpcCBzZW1hbnRpY3MgYXQgYWxsIGFuZCBhcmUgdHJpdmlhbCB0byBkdXBsaWNhdGUuIEFuCmV4YW1wbGUgaXMgYGkzMmAgYW5kIHRoZSBvdGhlciBudW1iZXIgdHlwZXMuIFdlIGRvbid0IGhhdmUgdG8gY2FsbCBgLmNsb25lKClgIHRvCmNsb25lIHRoZW0sIGJlY2F1c2UgdGhleSBhcmUgbWFya2VkIGBDb3B5YCBpbiBhZGRpdGlvbiB0byBgQ2xvbmVgLiAgSW1wbGljaXQKY2xvbmluZyBpcyBtb3JlIGNvbnZlbmllbnQgaW4gdGhpcyBjYXNlLiBXZSBjYW4gbWFyayBvdXIgb3duIHR5cGVzIGBDb3B5YCBpZgphbGwgdGhlaXIgbWVtYmVycyBhbHNvIGFyZSBtYXJrZWQgYENvcHlgLgoKSW4gdGhlIGV4YW1wbGUgYmVsb3csIHdlIGltcGxlbWVudCBhIGBQb2ludGAgdHlwZS4gQmVjYXVzZSBpdCBvbmx5IHN0b3JlcyB0d28KaW50ZWdlcnMsIHdlIG9wdC1vdXQgb2Ygb3duZXJzaGlwIHNlbWFudGljcyB3aXRoIGBDb3B5YC4gVGhlbiB3ZSBjYW4KYGxldCBwMiA9IHAxYCB3aXRob3V0IGBwMWAgYmVpbmcgbW92ZWQuCgpgYGAKI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQpzdHJ1Y3QgUG9pbnQgeyB4OiBpMzIsIHk6IGkzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBwMSA9IFBvaW50eyB4OiAtMSwgeTogMiB9OwogICAgbGV0IHAyID0gcDE7CiAgICBwMS54ID0gMTsKICAgIHByaW50bG4hKCJwMToge30sIHt9IiwgcDEueCwgcDEueSk7CiAgICBwcmludGxuISgicDI6IHt9LCB7fSIsIHAyLngsIHAyLnkpOwp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgd2UgZG9uJ3QgY29udHJvbCB0aGUgc3RydWN0J3MgZGVmaW5pdGlvbiwgb3IgbXV0YWJsZSBzaGFyZWQKb3duZXJzaGlwIGlzIHRydWx5IHJlcXVpcmVkLCB3ZSBjYW4gdXNlIGBSY2AgYW5kIGBSZWZDZWxsYDoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwp1c2Ugc3RkOjpyYzo6UmM7CgpzdHJ1Y3QgTXlTdHJ1Y3QgeyBzOiB1MzIgfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IFJjOjpuZXcoUmVmQ2VsbDo6bmV3KE15U3RydWN0eyBzOiA1dTMyIH0pKTsKICAgIGxldCB5ID0geC5jbG9uZSgpOwogICAgeC5ib3Jyb3dfbXV0KCkucyA9IDY7CiAgICBwcmludGxuISgie30iLCB4LmJvcnJvdygpLnMpOwp9CmBgYAoKV2l0aCB0aGlzIGFwcHJvYWNoLCB4IGFuZCB5IHNoYXJlIG93bmVyc2hpcCBvZiB0aGUgZGF0YSB2aWEgdGhlIGBSY2AgKHJlZmVyZW5jZQpjb3VudCB0eXBlKS4gYFJlZkNlbGxgIGVzc2VudGlhbGx5IHBlcmZvcm1zIHJ1bnRpbWUgYm9ycm93IGNoZWNraW5nOiBlbnN1cmluZwp0aGF0IGF0IG1vc3Qgb25lIHdyaXRlciBvciBtdWx0aXBsZSByZWFkZXJzIGNhbiBhY2Nlc3MgdGhlIGRhdGEgYXQgYW55IG9uZSB0aW1lLgoKSWYgeW91IHdpc2ggdG8gbGVhcm4gbW9yZSBhYm91dCBvd25lcnNoaXAgaW4gUnVzdCwgc3RhcnQgd2l0aCB0aGUKW1VuZGVyc3RhbmRpbmcgT3duZXJzaGlwXVt1bmRlcnN0YW5kaW5nLW93bmVyc2hpcF0gY2hhcHRlciBpbiB0aGUgQm9vay4KClt1bmRlcnN0YW5kaW5nLW93bmVyc2hpcF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAwLXVuZGVyc3RhbmRpbmctb3duZXJzaGlwLmh0bWwKADX///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D5kaAAEAmRrlAgDMRyYAAMQFAAIHAMUFAQADAO0CDgAAwwUCBQEEU29tZQEBALQJAAHEBQADAO0CDgACwwUAAQMA2AIkAADCBQEBALQJAALkAgDZAhIAALQJBQEFRTAzODIAAR8FAAEABQMA2AIkAADCBQEBAbkJAAHDBQDnAgD7RyYAAMkFAAAC5wIA+0cmAAC0CQUBxQUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBwYXJ0aWFsbHkgcmVpbml0aWFsaXplIGEKc3RydWN0dXJlIHRoYXQgaXMgY3VycmVudGx5IHVuaW5pdGlhbGl6ZWQuCgpGb3IgZXhhbXBsZSwgdGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBkcm9wIGhhcyB0YWtlbiBwbGFjZToKCmBgYGNvbXBpbGVfZmFpbApzdHJ1Y3QgRm9vIHsKICAgIGE6IHUzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyAvKiAuLi4gKi8gfQp9CgpsZXQgbXV0IHggPSBGb28geyBhOiAxIH07CmRyb3AoeCk7IC8vIGB4YCBpcyBub3cgdW5pbml0aWFsaXplZAp4LmEgPSAyOyAvLyBlcnJvciwgcGFydGlhbCByZWluaXRpYWxpemF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGB0YApgYGAKClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IGZ1bGx5IHJlaW5pdGlhbGl6aW5nIHRoZSBzdHJ1Y3R1cmUgaW4gcXVlc3Rpb246CgpgYGAKc3RydWN0IEZvbyB7CiAgICBhOiB1MzIsCn0KaW1wbCBEcm9wIGZvciBGb28gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgLyogLi4uICovIH0KfQoKbGV0IG11dCB4ID0gRm9vIHsgYTogMSB9Owpkcm9wKHgpOwp4ID0gRm9vIHsgYTogMiB9OwpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AR/FBQABAMUF5wIA+0cmAADIBQACBwDJBQEAAwDtAg4AAMcFAgUBBFNvbWUBAQC0CQAByAUAAwDtAg4AAscFAAEDANgCJAAAxgUBAQC0CQAC5gIA2QISAAC0CQUBBUUwMzgzAAEfBQABAAUDANgCJAAAxgUBAQG5CQABxwUA6QIAqkgmAADNBQAAAukCAKpIJgAAtAkFAf0CQW4gaW1tdXRhYmxlIHZhcmlhYmxlIHdhcyByZWFzc2lnbmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM4NApmbiBtYWluKCkgewogICAgbGV0IHggPSAzOwogICAgeCA9IDU7IC8vIGVycm9yLCByZWFzc2lnbm1lbnQgb2YgaW1tdXRhYmxlIHZhcmlhYmxlCn0KYGBgCgpCeSBkZWZhdWx0LCB2YXJpYWJsZXMgaW4gUnVzdCBhcmUgaW1tdXRhYmxlLiBUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBrZXl3b3JkCmBtdXRgIGFmdGVyIHRoZSBrZXl3b3JkIGBsZXRgIHdoZW4gZGVjbGFyaW5nIHRoZSB2YXJpYWJsZS4gRm9yIGV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IDM7CiAgICB4ID0gNTsKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////////H/0CAAEA/QLpAgCqSCYAAMwFAAIHAM0FAQADAO0C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cm93IGRhdGEgbXV0YWJseSBpbiBhIGNhcHR1cmVkIG91dGVyIHZhcmlhYmxlLi4uYApmbiBtdXRfYWRkcigpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeyBsZXQgeSA9ICZtdXQgeDsgfSk7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgZm9vIGlzIGRlZmluZWQgYXMgYWNjZXB0aW5nIGEgcGFyYW1ldGVyIG9mIHR5cGUgYEZuYC4KQ2xvc3VyZXMgcGFzc2VkIGludG8gZm9vIHdpbGwgdGh1cyBiZSBpbmZlcnJlZCB0byBiZSBvZiB0eXBlIGBGbmAsIG1lYW5pbmcgdGhhdAp0aGV5IGNhcHR1cmUgdGhlaXIgY29udGV4dCBpbW11dGFibHkuCgpJZiB0aGUgZGVmaW5pdGlvbiBvZiBgZm9vYCBpcyB1bmRlciB5b3VyIGNvbnRyb2wsIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0bwpjYXB0dXJlIHRoZSBkYXRhIG11dGFibHkuIFRoaXMgY2FuIGJlIGRvbmUgYnkgZGVmaW5pbmcgYGZvb2AgdG8gdGFrZSBGbk11dApyYXRoZXIgdGhhbiBGbjoKCmBgYApmbiBmb288RjogRm5NdXQoKT4oZjogRikgeyB9CmBgYAoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGNvbnNpZGVyIHVzaW5nIHRoZSBgQ2VsbGAgYW5kIGBSZWZDZWxsYCB0eXBlcyB0byBhY2hpZXZlCmludGVyaW9yIG11dGFiaWxpdHkgdGhyb3VnaCBhIHNoYXJlZCByZWZlcmVuY2UuIE91ciBleGFtcGxlJ3MgYG11dGFibGVgCmZ1bmN0aW9uIGNvdWxkIGJlIHJlZGVmaW5lZCBhcyBiZWxvdzoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKZm4gbXV0YWJsZSgpIHsKICAgIGxldCB4ID0gQ2VsbDo6bmV3KDB1MzIpOwogICAgZm9vKHx8IHguc2V0KDIpKTsKfQpgYGAKCllvdSBjYW4gcmVhZCBtb3JlIGluIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgW0NlbGxdW3N0ZC1jZWxsXS4KCltzdGQtY2VsbF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2NlbGwvCgAa////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w/uDAABAO4M7QIAiEkmAADUBQACBwDVBQEAAwDtAg4AANMFAgUBBFNvbWUBAQC0CQAB1AUAAwDtAg4AAtMFAAEDANgCJAAA0gUBAQC0CQAC7AIA2QISAAC0CQUBBUUwMzg3AAEfBQABAAUDANgCJAAA0gUBAQG5CQAB0wUA7wIAt0kmAADZBQAAAu8CALdJJgAAtAkFAUEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgAC////////////AQFBAAEAQe8CALdJJgAA2AUAAgcA2QUBAAMA7QIOAADXBQIFAQRTb21lAQEAtAkAAdgFAAMA7QIOAALXBQABAwDYAiQAANYFAQEAtAkAAu4CANkCEgAAtAkFAQVFMDM4OAABHwUAAQAFAwDYAiQAANYFAQEBuQkAAdcFAPECAOZJJgAA3QUAAALxAgDmSSYAALQJBQGzCyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbXV0YXRlIGRhdGEgdXNpbmcgYSBub24tbXV0YWJsZSByZWZlcmVuY2UuIFRoaXMKY29tbW9ubHkgb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byBhc3NpZ24gdG8gYSBub24tbXV0YWJsZSByZWZlcmVuY2Ugb2YgYQptdXRhYmxlIHJlZmVyZW5jZSAoYCYoJm11dCBUKWApLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJigmbXV0IGZhbmN5KTsKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBlcnJvcjogY2Fubm90IGFzc2lnbiB0byBkYXRhIGluIGEgYCZgIHJlZmVyZW5jZQogICAgcHJpbnRsbiEoInt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgJm11dCBmYW5jeWAgaXMgbXV0YWJsZSwgYnV0IGAmKCZtdXQgZmFuY3kpYCBpcyBub3QuIENyZWF0aW5nIGFuCmltbXV0YWJsZSByZWZlcmVuY2UgdG8gYSB2YWx1ZSBib3Jyb3dzIGl0IGltbXV0YWJseS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlCnJlZmVyZW5jZXMgb2YgdHlwZSBgJigmbXV0IFQpYCB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHZhbHVlLCBzbyB0aGV5IG11c3QgYmUKaW1tdXRhYmxlIHRvIHByZXZlbnQgbXVsdGlwbGUgbXV0YWJsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIHZhbHVlLgoKVG8gZml4IHRoaXMsIGVpdGhlciByZW1vdmUgdGhlIG91dGVyIHJlZmVyZW5jZToKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CgogICAgbGV0IGZhbmN5X3JlZiA9ICZtdXQgZmFuY3k7CiAgICAvLyBgZmFuY3lfcmVmYCBpcyBub3cgJm11dCBGYW5jeU51bSwgcmF0aGVyIHRoYW4gJigmbXV0IEZhbmN5TnVtKQoKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBObyBlcnJvciEKCiAgICBwcmludGxuISgie30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCk9yIG1ha2UgdGhlIG91dGVyIHJlZmVyZW5jZSBtdXRhYmxlOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGZhbmN5ID0gRmFuY3lOdW17IG51bTogNSB9OwoKICAgIGxldCBmYW5jeV9yZWYgPSAmbXV0ICgmbXV0IGZhbmN5KTsKICAgIC8vIGBmYW5jeV9yZWZgIGlzIG5vdyAmbXV0KCZtdXQgRmFuY3lOdW0pLCByYXRoZXIgdGhhbiAmKCZtdXQgRmFuY3lOdW0pCgogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIE5vIGVycm9yIQoKICAgIHByaW50bG4hKCJ7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYAoAF////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A7MLAAEAswvxAgDmSSYAANwFAAIHAN0FAQADAO0CDgAA2wUCBQEEU29tZQEBALQJAAHcBQADAO0CDgAC2wUAAQMA2AIkAADaBQEBALQJAALwAgDZAhIAALQJBQEFRTAzODkAAR8FAAEABQMA2AIkAADaBQEBAbkJAAHbBQDzAgCVSiYAAOEFAAAC8wIAlUomAAC0CQUB9ANBIG1ldGhvZCBvciBjb25zdGFudCB3YXMgaW1wbGVtZW50ZWQgb24gYSBwcmltaXRpdmUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIKfQoKaW1wbCAqbXV0IEZvbyB7fQovLyBlcnJvcjogb25seSBhIHNpbmdsZSBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiBtYXJrZWQgd2l0aAovLyAgICAgICAgYCNbbGFuZyA9ICJtdXRfcHRyIl1gIGlzIGFsbG93ZWQgZm9yIHRoZSBgKm11dCBUYCBwcmltaXRpdmUKYGBgCgpUaGlzIGlzbid0IGFsbG93ZWQsIGJ1dCB1c2luZyBhIHRyYWl0IHRvIGltcGxlbWVudCBhIG1ldGhvZCBvciBjb25zdGFudAppcyBhIGdvb2Qgc29sdXRpb24uCkV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIKfQoKdHJhaXQgQmFyIHsKICAgIGZuIGJhcigpOwp9CgppbXBsIEJhciBmb3IgKm11dCBGb28gewogICAgZm4gYmFyKCkge30gLy8gb2shCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8H9AMAAQD0A/MCAJVKJgAA4AUAAgcA4QUBAAMA7QIOAADfBQIFAQRTb21lAQEAtAkAAeAFAAMA7QIOAALfBQABAwDYAiQAAN4FAQEAtAkAAvICANkCEgAAtAkFAQVFMDM5MAABHwUAAQAFAwDYAiQAAN4FAQEBuQkAAd8FAPUCAMRKJgAA5QUAAAL1AgDESiYAALQJBQHAAkEgdHlwZSBkZXBlbmRlbmN5IGN5Y2xlIGhhcyBiZWVuIGVuY291bnRlcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MQp0cmFpdCBGaXJzdFRyYWl0IDogU2Vjb25kVHJhaXQgewoKfQoKdHJhaXQgU2Vjb25kVHJhaXQgOiBGaXJzdFRyYWl0IHsKCn0KYGBgCgpUaGUgcHJldmlvdXMgZXhhbXBsZSBjb250YWlucyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gdHJhaXRzOgpgRmlyc3RUcmFpdGAgZGVwZW5kcyBvbiBgU2Vjb25kVHJhaXRgIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIGBGaXJzdFRyYWl0YC4KAAb///////////8B////////////Af///////////wH///////////8B////////////AQDAAgABAMAC9QIAxEomAADkBQACBwDlBQEAAwDtAg4AAOMFAgUBBFNvbWUBAQC0CQAB5AUAAwDtAg4AAuMFAAEDANgCJAAA4gUBAQC0CQAC9AIA2QISAAC0CQUBBUUwMzkxAAEfBQABAAUDANgCJAAA4gUBAQG5CQAB4wUA9wIA80omAADpBQAAAvcCAPNKJgAAtAkFAfEKQSB0eXBlIG9yIGxpZmV0aW1lIHBhcmFtZXRlciBoYXMgYmVlbiBkZWNsYXJlZCBidXQgaXMgbm90IGFjdHVhbGx5IHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkyCmVudW0gRm9vPFQ+IHsKICAgIEJhciwKfQpgYGAKCklmIHRoZSB0eXBlIHBhcmFtZXRlciB3YXMgaW5jbHVkZWQgYnkgbWlzdGFrZSwgdGhpcyBlcnJvciBjYW4gYmUgZml4ZWQKYnkgc2ltcGx5IHJlbW92aW5nIHRoZSB0eXBlIHBhcmFtZXRlciwgYXMgc2hvd24gYmVsb3c6CgpgYGAKZW51bSBGb28gewogICAgQmFyLAp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHR5cGUgcGFyYW1ldGVyIHdhcyBpbnRlbnRpb25hbGx5IGluc2VydGVkLCBpdCBtdXN0IGJlCnVzZWQuIEEgc2ltcGxlIGZpeCBpcyBzaG93biBiZWxvdzoKCmBgYAplbnVtIEZvbzxUPiB7CiAgICBCYXIoVCksCn0KYGBgCgpUaGlzIGVycm9yIG1heSBhbHNvIGNvbW1vbmx5IGJlIGZvdW5kIHdoZW4gd29ya2luZyB3aXRoIHVuc2FmZSBjb2RlLiBGb3IKZXhhbXBsZSwgd2hlbiB1c2luZyByYXcgcG9pbnRlcnMgb25lIG1heSB3aXNoIHRvIHNwZWNpZnkgdGhlIGxpZmV0aW1lIGZvcgp3aGljaCB0aGUgcG9pbnRlZC1hdCBkYXRhIGlzIHZhbGlkLiBBbiBpbml0aWFsIGF0dGVtcHQgKGJlbG93KSBjYXVzZXMgdGhpcwplcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MgpzdHJ1Y3QgRm9vPCdhLCBUPiB7CiAgICB4OiAqY29uc3QgVCwKfQpgYGAKCldlIHdhbnQgdG8gZXhwcmVzcyB0aGUgY29uc3RyYWludCB0aGF0IEZvbyBzaG91bGQgbm90IG91dGxpdmUgYCdhYCwgYmVjYXVzZQp0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGBUYCBpcyBvbmx5IHZhbGlkIGZvciB0aGF0IGxpZmV0aW1lLiBUaGUgcHJvYmxlbSBpcwp0aGF0IHRoZXJlIGFyZSBubyBhY3R1YWwgdXNlcyBvZiBgJ2FgLiBJdCdzIHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMKYnkgYWRkaW5nIGEgUGhhbnRvbURhdGEgdHlwZSB0byB0aGUgc3RydWN0LCB1c2luZyBpdCB0byB0ZWxsIHRoZSBjb21waWxlcgp0byBhY3QgYXMgaWYgdGhlIHN0cnVjdCBjb250YWluZWQgYSBib3Jyb3dlZCByZWZlcmVuY2UgYCYnYSBUYDoKCmBgYAp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKc3RydWN0IEZvbzwnYSwgVDogJ2E+IHsKICAgIHg6ICpjb25zdCBULAogICAgcGhhbnRvbTogUGhhbnRvbURhdGE8JidhIFQ+Cn0KYGBgCgpbUGhhbnRvbURhdGFdIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXhwcmVzcyBpbmZvcm1hdGlvbiBhYm91dCB1bnVzZWQgdHlwZQpwYXJhbWV0ZXJzLgoKW1BoYW50b21EYXRhXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvbWFya2VyL3N0cnVjdC5QaGFudG9tRGF0YS5odG1sCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f/EKAAEA8Qr3AgDzSiYAAOgFAAIHAOkFAQADAO0CDgAA5wUCBQEEU29tZQEBALQJAAHoBQADAO0CDgAC5wUAAQMA2AIkAADmBQEBALQJAAL2AgDZAhIAALQJBQEFRTAzOTIAAR8FAAEABQMA2AIkAADmBQEBAbkJAAHnBQD5AgCiSyYAAO0FAAAC+QIAoksmAAC0CQUBoAlBIHR5cGUgcGFyYW1ldGVyIHdoaWNoIHJlZmVyZW5jZXMgYFNlbGZgIGluIGl0cyBkZWZhdWx0IHZhbHVlIHdhcyBub3Qgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5Mwp0cmFpdCBBPFQ9U2VsZj4ge30KCmZuIHRvZ2V0aGVyX3dlX3dpbGxfcnVsZV90aGVfZ2FsYXh5KHNvbjogJkEpIHt9Ci8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gYW4KLy8gICAgICAgIG9iamVjdCB0eXBlIGJlY2F1c2UgaXRzIGRlZmF1bHQgdmFsdWUgYFNlbGZgIHJlZmVyZW5jZXMgdGhlCi8vICAgICAgICB0eXBlIGBTZWxmYApgYGAKCkEgdHJhaXQgb2JqZWN0IGlzIGRlZmluZWQgb3ZlciBhIHNpbmdsZSwgZnVsbHktZGVmaW5lZCB0cmFpdC4gV2l0aCBhIHJlZ3VsYXIKZGVmYXVsdCBwYXJhbWV0ZXIsIHRoaXMgcGFyYW1ldGVyIGNhbiBqdXN0IGJlIHN1YnN0aXR1dGVkIGluLiBIb3dldmVyLCBpZiB0aGUKZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYFNlbGZgLCB0aGUgdHJhaXQgY2hhbmdlcyBmb3IgZWFjaCBjb25jcmV0ZSB0eXBlOyBpLmUuCmBpMzJgIHdpbGwgYmUgZXhwZWN0ZWQgdG8gaW1wbGVtZW50IGBBPGkzMj5gLCBgYm9vbGAgd2lsbCBiZSBleHBlY3RlZCB0bwppbXBsZW1lbnQgYEE8Ym9vbD5gLCBldGMuLi4gVGhlc2UgdHlwZXMgd2lsbCBub3Qgc2hhcmUgYW4gaW1wbGVtZW50YXRpb24gb2YgYQpmdWxseS1kZWZpbmVkIHRyYWl0OyBpbnN0ZWFkIHRoZXkgc2hhcmUgaW1wbGVtZW50YXRpb25zIG9mIGEgdHJhaXQgd2l0aApkaWZmZXJlbnQgcGFyYW1ldGVycyBzdWJzdGl0dXRlZCBpbiBmb3IgZWFjaCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcwppcnJlY29uY2lsYWJsZSB3aXRoIHdoYXQgd2UgbmVlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0IHdvcmssIGFuZCBpcyB0aHVzCmRpc2FsbG93ZWQuIE1ha2luZyB0aGUgdHJhaXQgY29uY3JldGUgYnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZiB0aGUKZGVmYXVsdGVkIHBhcmFtZXRlciB3aWxsIGZpeCB0aGlzIGlzc3VlLiBGaXhlZCBleGFtcGxlOgoKYGBgCnRyYWl0IEE8VD1TZWxmPiB7fQoKZm4gdG9nZXRoZXJfd2Vfd2lsbF9ydWxlX3RoZV9nYWxheHkoc29uOiAmQTxpMzI+KSB7fSAvLyBPayEKYGBgCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w+gCQABAKAJ+QIAoksmAADsBQACBwDtBQEAAwDtAg4AAOsFAgUBBFNvbWUBAQC0CQAB7AUAAwDtAg4AAusFAAEDANgCJAAA6gUBAQC0CQAC+AIA2QISAAC0CQUBBUUwMzkzAAEfBQABAAUDANgCJAAA6gUBAQG5CQAB6wUA+wIA0UsmAADxBQAAAvsCANFLJgAAtAkFAZULIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW4gUnVzdCAxLjMsIHRoZSBkZWZhdWx0IG9iamVjdCBsaWZldGltZSBib3VuZHMgYXJlIGV4cGVjdGVkIHRvIGNoYW5nZSwgYXMKZGVzY3JpYmVkIGluIFtSRkMgMTE1Nl0uIFlvdSBhcmUgZ2V0dGluZyBhIHdhcm5pbmcgYmVjYXVzZSB0aGUgY29tcGlsZXIKdGhpbmtzIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBjaGFuZ2Ugd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yIGluIHlvdXIKY29kZS4gSXQgaXMgcG9zc2libGUsIHRob3VnaCB1bmxpa2VseSwgdGhhdCB0aGlzIGlzIGEgZmFsc2UgYWxhcm0uCgpUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSBpcyB0aGF0IHdoZXJlIGAmJ2EgQm94PFNvbWVUcmFpdD5gIHVzZWQgdG8gZGVmYXVsdCB0bwpgJidhIEJveDxTb21lVHJhaXQrJ2E+YCwgaXQgbm93IGRlZmF1bHRzIHRvIGAmJ2EgQm94PFNvbWVUcmFpdCsnc3RhdGljPmAgKGhlcmUsCmBTb21lVHJhaXRgIGlzIHRoZSBuYW1lIG9mIHNvbWUgdHJhaXQgdHlwZSkuIE5vdGUgdGhhdCB0aGUgb25seSB0eXBlcyB3aGljaCBhcmUKYWZmZWN0ZWQgYXJlIHJlZmVyZW5jZXMgdG8gYm94ZXMsIGxpa2UgYCZCb3g8U29tZVRyYWl0PmAgb3IKYCZbQm94PFNvbWVUcmFpdD5dYC4gTW9yZSBjb21tb24gdHlwZXMgbGlrZSBgJlNvbWVUcmFpdGAgb3IgYEJveDxTb21lVHJhaXQ+YAphcmUgdW5hZmZlY3RlZC4KClRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLCBlZGl0IHlvdXIgY29kZSB0byB1c2UgYW4gZXhwbGljaXQgYm91bmQuIE1vc3Qgb2YgdGhlCnRpbWUsIHRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIGEgZnVuY3Rpb24gdGhhdAp5b3UgYXJlIGNhbGxpbmcuIEZvciBleGFtcGxlLCBpZiB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgb24gYSBjYWxsIGxpa2UgYGZvbyh4KWAsCmFuZCBgZm9vYCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CgpgYGAKIyB0cmFpdCBTb21lVHJhaXQge30KZm4gZm9vKGFyZzogJkJveDxTb21lVHJhaXQ+KSB7IC8qIC4uLiAqLyB9CmBgYAoKWW91IG1pZ2h0IGNoYW5nZSBpdCB0bzoKCmBgYAojIHRyYWl0IFNvbWVUcmFpdCB7fQpmbiBmb288J2E+KGFyZzogJidhIEJveDxTb21lVHJhaXQrJ2E+KSB7IC8qIC4uLiAqLyB9CmBgYAoKVGhpcyBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHlvdSBleHBlY3QgdGhlIHRyYWl0IG9iamVjdCBgU29tZVRyYWl0YCB0byBjb250YWluCnJlZmVyZW5jZXMgKHdpdGggYSBtYXhpbXVtIGxpZmV0aW1lIG9mIGAnYWApLgoKW1JGQyAxMTU2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTE1Ni1hZGp1c3QtZGVmYXVsdC1vYmplY3QtYm91bmRzLm1kCgAX////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//f5ULAAEAlQv7AgDRSyYAAPAFAAIHAPEFAQADAO0CDgAA7wUCBQEEU29tZQEBALQJAAHwBQADAO0CDgAC7wUAAQMA2AIkAADuBQEBALQJAAL6AgDZAhIAALQJBQEFRTAzOTgAAR8FAAEABQMA2AIkAADuBQEBAbkJAAHvBQD9AgCATCYAAPUFAAAC/QIAgEwmAAC0CQUB3AUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIKCllvdSBpbXBsZW1lbnRlZCBhIHRyYWl0LCBvdmVycmlkaW5nIG9uZSBvciBtb3JlIG9mIGl0cyBhc3NvY2lhdGVkIHR5cGVzIGJ1dCBkaWQKbm90IHJlaW1wbGVtZW50IGl0cyBkZWZhdWx0IG1ldGhvZHMuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2RlZmF1bHRzKV0KCnB1YiB0cmFpdCBGb28gewogICAgdHlwZSBBc3NvYyA9IHU4OwogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIC8vIGVycm9yIC0gdGhlIGZvbGxvd2luZyB0cmFpdCBpdGVtcyBuZWVkIHRvIGJlIHJlaW1wbGVtZW50ZWQgYXMKICAgIC8vICAgICAgICAgYEFzc29jYCB3YXMgb3ZlcnJpZGRlbjogYGJhcmAKICAgIHR5cGUgQXNzb2MgPSBpMzI7Cn0KYGBgCgpUbyBmaXggdGhpcywgYWRkIGFuIGltcGxlbWVudGF0aW9uIGZvciBlYWNoIGRlZmF1bHQgbWV0aG9kIGZyb20gdGhlIHRyYWl0OgoKYGBgCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2RlZmF1bHRzKV0KCnB1YiB0cmFpdCBGb28gewogICAgdHlwZSBBc3NvYyA9IHU4OwogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIHR5cGUgQXNzb2MgPSBpMzI7CiAgICBmbiBiYXIoJnNlbGYpIHt9IC8vIG9rIQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////f9wFAAEA3AX9AgCATCYAAPQFAAIHAPUFAQADAO0CDgAA8wUCBQEEU29tZQEBALQJAAH0BQADAO0CDgAC8wUAAQMA2AIkAADyBQEBALQJAAL8AgDZAhIAALQJBQEFRTAzOTkAAR8FAAEABQMA2AIkAADyBQEBAbkJAAHzBQD/AgCvTCYAAPkFAAAC/wIAr0wmAAC0CQUBlw1Jbm5lciBpdGVtcyBkbyBub3QgaW5oZXJpdCB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlcnMgZnJvbSB0aGUgZnVuY3Rpb25zCnRoZXkgYXJlIGVtYmVkZGVkIGluLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMQpmbiBmb288VD4oeDogVCkgewogICAgZm4gYmFyKHk6IFQpIHsgLy8gVCBpcyBkZWZpbmVkIGluIHRoZSAib3V0ZXIiIGZ1bmN0aW9uCiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCk5vciB3aWxsIHRoaXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDEKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIHR5cGUgTWF5YmVUID0gT3B0aW9uPFQ+OwogICAgLy8gLi4uCn0KYGBgCgpPciB0aGlzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAxCmZuIGZvbzxUPih4OiBUKSB7CiAgICBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiBULAogICAgfQogICAgLy8gLi4uCn0KYGBgCgpJdGVtcyBpbnNpZGUgZnVuY3Rpb25zIGFyZSBiYXNpY2FsbHkganVzdCBsaWtlIHRvcC1sZXZlbCBpdGVtcywgZXhjZXB0CnRoYXQgdGhleSBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIGZ1bmN0aW9uIHRoZXkgYXJlIGluLgoKVGhlcmUgYXJlIGEgY291cGxlIG9mIHNvbHV0aW9ucyBmb3IgdGhpcy4KCklmIHRoZSBpdGVtIGlzIGEgZnVuY3Rpb24sIHlvdSBtYXkgdXNlIGEgY2xvc3VyZToKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgbGV0IGJhciA9IHx5OiBUfCB7IC8vIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiBtYXkgbm90IGJlIG5lY2Vzc2FyeQogICAgICAgIC8vIC4uCiAgICB9OwogICAgYmFyKHgpOwp9CmBgYAoKRm9yIGEgZ2VuZXJpYyBpdGVtLCB5b3UgY2FuIGNvcHkgb3ZlciB0aGUgcGFyYW1ldGVyczoKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgZm4gYmFyPFQ+KHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICB0eXBlIE1heWJlVDxUPiA9IE9wdGlvbjxUPjsKfQpgYGAKCkJlIHN1cmUgdG8gY29weSBvdmVyIGFueSBib3VuZHMgYXMgd2VsbDoKCmBgYApmbiBmb288VDogQ29weT4oeDogVCkgewogICAgZm4gYmFyPFQ6IENvcHk+KHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKYGBgCmZuIGZvbzxUOiBDb3B5Pih4OiBUKSB7CiAgICBzdHJ1Y3QgRm9vPFQ6IENvcHk+IHsKICAgICAgICB4OiBULAogICAgfQp9CmBgYAoKVGhpcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHR5cGUgaGludHMgaW4gdGhlIGZ1bmN0aW9uIGJvZHkuCgpJbiBjYXNlIHRoZSBpdGVtIGlzIGEgZnVuY3Rpb24gaW5zaWRlIGFuIGBpbXBsYCwgZGVmaW5pbmcgYSBwcml2YXRlIGhlbHBlcgpmdW5jdGlvbiBtaWdodCBiZSBlYXNpZXI6CgpgYGAKIyBzdHJ1Y3QgRm9vPFQ+KFQpOwppbXBsPFQ+IEZvbzxUPiB7CiAgICBwdWIgZm4gZm9vKCZzZWxmLCB4OiBUKSB7CiAgICAgICAgc2VsZi5iYXIoeCk7CiAgICB9CgogICAgZm4gYmFyKCZzZWxmLCB5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KfQpgYGAKCkZvciBkZWZhdWx0IGltcGxzIGluIHRyYWl0cywgdGhlIHByaXZhdGUgaGVscGVyIHNvbHV0aW9uIHdvbid0IHdvcmssIGhvd2V2ZXIKY2xvc3VyZXMgb3IgY29weWluZyB0aGUgcGFyYW1ldGVycyBzaG91bGQgc3RpbGwgd29yay4KABv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wOXDQABAJcN/wIAr0wmAAD4BQACBwD5BQEAAwDtAg4AAPcFAgUBBFNvbWUBAQC0CQAB+AUAAwDtAg4AAvcFAAEDANgCJAAA9gUBAQC0CQAC/gIA2QISAAC0CQUBBUUwNDAxAAEfBQABAAUDANgCJAAA9gUBAQG5CQAB9wUAgQMA3kwmAAD9BQAAAoEDAN5MJgAAtAkFAfIEU29tZSB0eXBlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMwpmbiBmPFQsIFQ+KHM6IFQsIHU6IFQpIHt9IC8vIGVycm9yOiB0aGUgbmFtZSBgVGAgaXMgYWxyZWFkeSB1c2VkIGZvciBhIGdlbmVyaWMKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcGFyYW1ldGVyIGluIHRoaXMgaXRlbSdzIGdlbmVyaWMgcGFyYW1ldGVycwpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCBub25lIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgYXJlIG1pc3NwZWxsZWQsIGFuZCByZW5hbWUgYW55CmNsYXNoaW5nIHBhcmFtZXRlcnMuIEV4YW1wbGU6CgpgYGAKZm4gZjxULCBZPihzOiBULCB1OiBZKSB7fSAvLyBvayEKYGBgCgpUeXBlIHBhcmFtZXRlcnMgaW4gYW4gYXNzb2NpYXRlZCBpdGVtIGFsc28gY2Fubm90IHNoYWRvdyBwYXJhbWV0ZXJzIGZyb20gdGhlCmNvbnRhaW5pbmcgaXRlbToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMwp0cmFpdCBGb288VD4gewogICAgZm4gZG9fc29tZXRoaW5nKCZzZWxmKSAtPiBUOwogICAgZm4gZG9fc29tZXRoaW5nX2Vsc2U8VDogQ2xvbmU+KCZzZWxmLCBiYXI6IFQpOwp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8B8gQAAQDyBIEDAN5MJgAA/AUAAgcA/QUBAAMA7QIOAAD7BQIFAQRTb21lAQEAtAkAAfwFAAMA7QIOAAL7BQABAwDYAiQAAPoFAQEAtAkAAoADANkCEgAAtAkFAQVFMDQwMwABHwUAAQAFAwDYAiQAAPoFAQEBuQkAAfsFAIMDAI1NJgAAgQYAAAKDAwCNTSYAALQJBQGWCUEgdHlwZSB0aGF0IGlzIG5vdCBhIHRyYWl0IHdhcyB1c2VkIGluIGEgdHJhaXQgcG9zaXRpb24sIHN1Y2ggYXMgYSBib3VuZApvciBgaW1wbGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA0CnN0cnVjdCBGb287CnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBub3QgYSB0cmFpdApmbiBiYXo8VDogRm9vPih0OiBUKSB7fSAvLyBlcnJvcjogYEZvb2AgaXMgbm90IGEgdHJhaXQKYGBgCgpBbm90aGVyIGVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDQKdHlwZSBGb28gPSBJdGVyYXRvcjxJdGVtPVN0cmluZz47CgpmbiBiYXI8VDogRm9vPih0OiBUKSB7fSAvLyBlcnJvcjogYEZvb2AgaXMgYSB0eXBlIGFsaWFzCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSB0cmFpdCdzIG5hbWUgd2FzIG5vdCBtaXNzcGVsbGVkIG9yIHRoYXQgdGhlIHJpZ2h0CmlkZW50aWZpZXIgd2FzIHVzZWQuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0Kc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgeyAvLyBvayEKICAgIC8vIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbgp9CgpmbiBiYXo8VDogRm9vPih0OiBUKSB7fSAvLyBvayEKYGBgCgpBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgaW50cm9kdWNlIGEgbmV3IHRyYWl0IHdpdGggeW91ciBkZXNpcmVkIHJlc3RyaWN0aW9ucwphcyBhIHN1cGVyIHRyYWl0OgoKYGBgCiMgdHJhaXQgRm9vIHt9CiMgc3RydWN0IEJhcjsKIyBpbXBsIEZvbyBmb3IgQmFyIHt9CnRyYWl0IFF1eDogRm9vIHt9IC8vIEFueXRoaW5nIHRoYXQgaW1wbGVtZW50cyBRdXggYWxzbyBuZWVkcyB0byBpbXBsZW1lbnQgRm9vCmZuIGJhejxUOiBRdXg+KHQ6IFQpIHt9IC8vIGFsc28gb2shCmBgYAoKRmluYWxseSwgaWYgeW91IGFyZSBvbiBuaWdodGx5IGFuZCB3YW50IHRvIHVzZSBhIHRyYWl0IGFsaWFzCmluc3RlYWQgb2YgYSB0eXBlIGFsaWFzLCB5b3Ugc2hvdWxkIHVzZSBgIyFbZmVhdHVyZSh0cmFpdF9hbGlhcyldYDoKCmBgYAojIVtmZWF0dXJlKHRyYWl0X2FsaWFzKV0KdHJhaXQgRm9vID0gSXRlcmF0b3I8SXRlbT1TdHJpbmc+OwoKZm4gYmFyPFQ6IEZvbz4odDogVCkge30gLy8gb2shCmBgYAoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWCQABAJYJgwMAjU0mAACABgACBwCBBgEAAwDtAg4AAP8FAgUBBFNvbWUBAQC0CQABgAYAAwDtAg4AAv8FAAEDANgCJAAA/gUBAQC0CQACggMA2QISAAC0CQUBBUUwNDA0AAEfBQABAAUDANgCJAAA/gUBAQG5CQAB/wUAhQMAvE0mAACFBgAAAoUDALxNJgAAtAkFAfcDVGhlIGNvZGUgcmVmZXJzIHRvIGEgdHJhaXQgdGhhdCBpcyBub3QgaW4gc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA1CnN0cnVjdCBGb287CgppbXBsIFNvbWVUcmFpdCBmb3IgRm9vIHt9IC8vIGVycm9yOiB0cmFpdCBgU29tZVRyYWl0YCBpcyBub3QgaW4gc2NvcGUKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIG5hbWUgb2YgdGhlIHRyYWl0IHdhc24ndCBtaXNzcGVsbGVkIGFuZCBlbnN1cmUgdGhhdCBpdAp3YXMgaW1wb3J0ZWQuIEV4YW1wbGU6CgpgYGAKIyAjW2NmZyhmb3JfZGVtb25zdHJhdGlvbl9vbmx5KV0KLy8gc29sdXRpb24gMToKdXNlIHNvbWVfZmlsZTo6U29tZVRyYWl0OwoKLy8gc29sdXRpb24gMjoKdHJhaXQgU29tZVRyYWl0IHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0KCnN0cnVjdCBGb287CgppbXBsIFNvbWVUcmFpdCBmb3IgRm9vIHsgLy8gb2shCiAgICAvLyBpbXBsZW1lbnRzIGZ1bmN0aW9ucwp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P/cDAAEA9wOFAwC8TSYAAIQGAAIHAIUGAQADAO0CDgAAgwYCBQEEU29tZQEBALQJAAGEBgADAO0CDgACgwYAAQMA2AIkAACCBgEBALQJAAKEAwDZAhIAALQJBQEFRTA0MDUAAR8FAAEABQMA2AIkAACCBgEBAbkJAAGDBgCHAwDrTSYAAIkGAAAChwMA600mAAC0CQUB9ARBIGRlZmluaXRpb24gb2YgYSBtZXRob2Qgbm90IGluIHRoZSBpbXBsZW1lbnRlZCB0cmFpdCB3YXMgZ2l2ZW4gaW4gYSB0cmFpdAppbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDcKdHJhaXQgRm9vIHsKICAgIGZuIGEoKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gYSgpIHt9CiAgICBmbiBiKCkge30gLy8gZXJyb3I6IG1ldGhvZCBgYmAgaXMgbm90IGEgbWVtYmVyIG9mIHRyYWl0IGBGb29gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIG1ldGhvZCBuYW1lIGFuZCB5b3UgdXNlZCB0aGUgY29ycmVjdAp0cmFpdC4gRmlyc3QgZXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYSgpOwogICAgZm4gYigpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBhKCkge30KICAgIGZuIGIoKSB7fSAvLyBvayEKfQpgYGAKClNlY29uZCBleGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBhKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGEoKSB7fQp9CgppbXBsIEJhciB7CiAgICBmbiBiKCkge30KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////B/QEAAEA9ASHAwDrTSYAAIgGAAIHAIkGAQADAO0CDgAAhwYCBQEEU29tZQEBALQJAAGIBgADAO0CDgAChwYAAQMA2AIkAACGBgEBALQJAAKGAwDZAhIAALQJBQEFRTA0MDcAAR8FAAEABQMA2AIkAACGBgEBAbkJAAGHBgCJAwCaTiYAAI0GAAACiQMAmk4mAAC0CQUBrQhBbiAib3IiIHBhdHRlcm4gd2FzIHVzZWQgd2hlcmUgdGhlIHZhcmlhYmxlIGJpbmRpbmdzIGFyZSBub3QgY29uc2lzdGVudGx5IGJvdW5kCmFjcm9zcyBwYXR0ZXJucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDgKbWF0Y2ggeCB7CiAgICBTb21lKHkpIHwgTm9uZSA9PiB7IC8qIHVzZSB5ICovIH0gLy8gZXJyb3I6IHZhcmlhYmxlIGB5YCBmcm9tIHBhdHRlcm4gIzEgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbm90IGJvdW5kIGluIHBhdHRlcm4gIzIKICAgIF8gPT4gKCkKfQpgYGAKCkhlcmUsIGB5YCBpcyBib3VuZCB0byB0aGUgY29udGVudHMgb2YgdGhlIGBTb21lYCBhbmQgY2FuIGJlIHVzZWQgd2l0aGluIHRoZQpibG9jayBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaCBhcm0uIEhvd2V2ZXIsIGluIGNhc2UgYHhgIGlzIGBOb25lYCwgd2UgaGF2ZQpub3Qgc3BlY2lmaWVkIHdoYXQgYHlgIGlzLCBhbmQgdGhlIGJsb2NrIHdpbGwgdXNlIGEgbm9uZXhpc3RlbnQgdmFyaWFibGUuCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIHNwbGl0IGludG8gbXVsdGlwbGUgbWF0Y2ggYXJtczoKCmBgYApsZXQgeCA9IFNvbWUoMSk7Cm1hdGNoIHggewogICAgU29tZSh5KSA9PiB7IC8qIHVzZSB5ICovIH0KICAgIE5vbmUgPT4geyAvKiAuLi4gKi8gfQp9CmBgYAoKb3IsIGJpbmQgdGhlIHZhcmlhYmxlIHRvIGEgZmllbGQgb2YgdGhlIHNhbWUgdHlwZSBpbiBhbGwgc3ViLXBhdHRlcm5zIG9mIHRoZQpvciBwYXR0ZXJuOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICgwLCB5KSB8ICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiB7fQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBpZiBgeGAgbWF0Y2hlcyB0aGUgcGF0dGVybiBgKDAsIF8pYCwgdGhlIHNlY29uZCBmaWVsZCBpcyBzZXQKdG8gYHlgLiBJZiBpdCBtYXRjaGVzIGAoXywgMClgLCB0aGUgZmlyc3QgZmllbGQgaXMgc2V0IHRvIGB5YDsgc28gaW4gYWxsCmNhc2VzIGB5YCBpcyBzZXQgdG8gc29tZSB2YWx1ZS4KABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////B60IAAEArQiJAwCaTiYAAIwGAAIHAI0GAQADAO0CDgAAiwYCBQEEU29tZQEBALQJAAGMBgADAO0CDgACiwYAAQMA2AIkAACKBgEBALQJAAKIAwDZAhIAALQJBQEFRTA0MDgAAR8FAAEABQMA2AIkAACKBgEBAbkJAAGLBgCLAwDJTiYAAJEGAAACiwMAyU4mAAC0CQUB4QZBbiAib3IiIHBhdHRlcm4gd2FzIHVzZWQgd2hlcmUgdGhlIHZhcmlhYmxlIGJpbmRpbmdzIGFyZSBub3QgY29uc2lzdGVudGx5IGJvdW5kCmFjcm9zcyBwYXR0ZXJucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDkKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKDAsIHJlZiB5KSB8ICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovfSAvLyBlcnJvcjogdmFyaWFibGUgYHlgIGlzIGJvdW5kIHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGRpZmZlcmVudCBtb2RlIGluIHBhdHRlcm4gIzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoYW4gaW4gcGF0dGVybiAjMQogICAgXyA9PiAoKQp9CmBgYAoKSGVyZSwgYHlgIGlzIGJvdW5kIGJ5LXZhbHVlIGluIG9uZSBjYXNlIGFuZCBieS1yZWZlcmVuY2UgaW4gdGhlIG90aGVyLgoKVG8gZml4IHRoaXMgZXJyb3IsIGp1c3QgdXNlIHRoZSBzYW1lIG1vZGUgaW4gYm90aCBjYXNlcy4KR2VuZXJhbGx5IHVzaW5nIGByZWZgIG9yIGByZWYgbXV0YCB3aGVyZSBub3QgYWxyZWFkeSB1c2VkIHdpbGwgZml4IHRoaXM6CgpgYGAKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKDAsIHJlZiB5KSB8IChyZWYgeSwgMCkgPT4geyAvKiB1c2UgeSAqL30KICAgIF8gPT4gKCkKfQpgYGAKCkFsdGVybmF0aXZlbHksIHNwbGl0IHRoZSBwYXR0ZXJuOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovIH0KICAgICgwLCByZWYgeSkgPT4geyAvKiB1c2UgeSAqL30KICAgIF8gPT4gKCkKfQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x/hBgABAOEGiwMAyU4mAACQBgACBwCRBgEAAwDtAg4AAI8GAgUBBFNvbWUBAQC0CQABkAYAAwDtAg4AAo8GAAEDANgCJAAAjgYBAQC0CQACigMA2QISAAC0CQUBBUUwNDA5AAEfBQABAAUDANgCJAAAjgYBAQG5CQABjwYAjQMA+E4mAACVBgAAAo0DAPhOJgAAtAkFAeYHVGhlIGBTZWxmYCBrZXl3b3JkIHdhcyB1c2VkIG91dHNpZGUgYW4gaW1wbCwgdHJhaXQsIG9yIHR5cGUgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTEKPFNlbGY+Ojpmb287IC8vIGVycm9yOiB1c2Ugb2YgYFNlbGZgIG91dHNpZGUgb2YgYW4gaW1wbCwgdHJhaXQsIG9yIHR5cGUKICAgICAgICAgICAgIC8vIGRlZmluaXRpb24KYGBgCgpUaGUgYFNlbGZgIGtleXdvcmQgcmVwcmVzZW50cyB0aGUgY3VycmVudCB0eXBlLCB3aGljaCBleHBsYWlucyB3aHkgaXQgY2FuIG9ubHkKYmUgdXNlZCBpbnNpZGUgYW4gaW1wbCwgdHJhaXQsIG9yIHR5cGUgZGVmaW5pdGlvbi4gSXQgZ2l2ZXMgYWNjZXNzIHRvIHRoZQphc3NvY2lhdGVkIGl0ZW1zIG9mIGEgdHlwZToKCmBgYAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyB7CiAgICBmbiBiYXIoKSAtPiBTZWxmOjpCYXI7IC8vIGxpa2UgdGhpcwp9CmBgYAoKSG93ZXZlciwgYmUgY2FyZWZ1bCB3aGVuIHR3byB0eXBlcyBoYXZlIGEgY29tbW9uIGFzc29jaWF0ZWQgdHlwZToKCmBgYGNvbXBpbGVfZmFpbAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEZvbzIgewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyArIEZvbzIgewogICAgZm4gYmFyKCkgLT4gU2VsZjo6QmFyOwogICAgLy8gZXJyb3I6IGFtYmlndW91cyBhc3NvY2lhdGVkIHR5cGUgYEJhcmAgaW4gYm91bmRzIG9mIGBTZWxmYAp9CmBgYAoKVGhpcyBwcm9ibGVtIGNhbiBiZSBzb2x2ZWQgYnkgc3BlY2lmeWluZyBmcm9tIHdoaWNoIHRyYWl0IHdlIHdhbnQgdG8gdXNlIHRoZQpgQmFyYCB0eXBlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgRm9vMiB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgQmF6IDogRm9vICsgRm9vMiB7CiAgICBmbiBiYXIoKSAtPiA8U2VsZiBhcyBGb28+OjpCYXI7IC8vIG9rIQp9CmBgYAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B+YHAAEA5geNAwD4TiYAAJQGAAIHAJUGAQADAO0CDgAAkwYCBQEEU29tZQEBALQJAAGUBgADAO0CDgACkwYAAQMA2AIkAACSBgEBALQJAAKMAwDZAhIAALQJBQEFRTA0MTEAAR8FAAEABQMA2AIkAACSBgEBAbkJAAGTBgCPAwCnTyYAAJkGAAACjwMAp08mAAC0CQUB8AhBIHVzZWQgdHlwZSBuYW1lIGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDEyCmltcGwgU29tZXRoaW5nIHt9IC8vIGVycm9yOiB0eXBlIG5hbWUgYFNvbWV0aGluZ2AgaXMgbm90IGluIHNjb3BlCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoTik7IC8vIGVycm9yOiB0eXBlIG5hbWUgYE5gIGlzIG5vdCBpbiBzY29wZQp9CgovLyBvcjoKCmZuIGZvbyh4OiBUKSB7fSAvLyB0eXBlIG5hbWUgYFRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIHR5cGUgbmFtZSwgeW91IGRpZApkZWNsYXJlIGl0IG9yIGltcG9ydGVkIGl0IGludG8gdGhlIHNjb3BlLiBFeGFtcGxlczoKCmBgYApzdHJ1Y3QgU29tZXRoaW5nOwoKaW1wbCBTb21ldGhpbmcge30gLy8gb2shCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47CgogICAgZm4gYmFyKF86IFNlbGY6Ok4pOyAvLyBvayEKfQoKLy8gb3I6CgpmbiBmb288VD4oeDogVCkge30gLy8gb2shCmBgYAoKQW5vdGhlciBjYXNlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgd2hlbiBhIHR5cGUgaXMgaW1wb3J0ZWQgaW50byBhIHBhcmVudAptb2R1bGUuIFRvIGZpeCB0aGlzLCB5b3UgY2FuIGZvbGxvdyB0aGUgc3VnZ2VzdGlvbiBhbmQgdXNlIEZpbGUgZGlyZWN0bHkgb3IKYHVzZSBzdXBlcjo6RmlsZTtgIHdoaWNoIHdpbGwgaW1wb3J0IHRoZSB0eXBlcyBmcm9tIHRoZSBwYXJlbnQgbmFtZXNwYWNlLiBBbgpleGFtcGxlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgYmVsb3c6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTIKdXNlIHN0ZDo6ZnM6OkZpbGU7Cgptb2QgZm9vIHsKICAgIGZuIHNvbWVfZnVuY3Rpb24oZjogRmlsZSkge30KfQpgYGAKCmBgYAp1c2Ugc3RkOjpmczo6RmlsZTsKCm1vZCBmb28gewogICAgLy8gZWl0aGVyCiAgICB1c2Ugc3VwZXI6OkZpbGU7CiAgICAvLyBvcgogICAgLy8gdXNlIHN0ZDo6ZnM6OkZpbGU7CiAgICBmbiBmb28oZjogRmlsZSkge30KfQojIGZuIG1haW4oKSB7fSAvLyBkb24ndCBpbnNlcnQgaXQgZm9yIHVzOyB0aGF0J2xsIGJyZWFrIGltcG9ydHMKYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AgAAQDwCI8DAKdPJgAAmAYAAgcAmQYBAAMA7QIOAACXBgIFAQRTb21lAQEAtAkAAZgGAAMA7QIOAAKXBgABAwDYAiQAAJYGAQEAtAkAAo4DANkCEgAAtAkFAQVFMDQxMgABHwUAAQAFAwDYAiQAAJYGAQEBuQkAAZcGAJEDANZPJgAAnQYAAAKRAwDWTyYAALQJBQHXAk1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gcGFyYW1ldGVyIGhhdmUgdGhlIHNhbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTUKZm4gZm9vKGY6IGkzMiwgZjogaTMyKSB7fSAvLyBlcnJvcjogaWRlbnRpZmllciBgZmAgaXMgYm91bmQgbW9yZSB0aGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG9uY2UgaW4gdGhpcyBwYXJhbWV0ZXIgbGlzdApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBwYXJhbWV0ZXJzJyBuYW1lLiBFeGFtcGxlOgoKYGBgCmZuIGZvbyhmOiBpMzIsIGc6IGkzMikge30gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////A9cCAAEA1wKRAwDWTyYAAJwGAAIHAJ0GAQADAO0CDgAAmwYCBQEEU29tZQEBALQJAAGcBgADAO0CDgACmwYAAQMA2AIkAACaBgEBALQJAAKQAwDZAhIAALQJBQEFRTA0MTUAAR8FAAEABQMA2AIkAACaBgEBAbkJAAGbBgCTAwCFUCYAAKEGAAACkwMAhVAmAAC0CQUB1gRBbiBpZGVudGlmaWVyIGlzIGJvdW5kIG1vcmUgdGhhbiBvbmNlIGluIGEgcGF0dGVybi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTYKbWF0Y2ggKDEsIDIpIHsKICAgICh4LCB4KSA9PiB7fSAvLyBlcnJvcjogaWRlbnRpZmllciBgeGAgaXMgYm91bmQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCiAgICAgICAgICAgICAgICAgLy8gICAgICAgIHNhbWUgcGF0dGVybgp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIGlkZW50aWZpZXJzJyBuYW1lLiBFeGFtcGxlOgoKYGBgCm1hdGNoICgxLCAyKSB7CiAgICAoeCwgeSkgPT4ge30gLy8gb2shCn0KYGBgCgpPciBtYXliZSBkaWQgeW91IG1lYW4gdG8gdW5pZnk/IENvbnNpZGVyIHVzaW5nIGEgZ3VhcmQ6CgpgYGAKIyBsZXQgKEEsIEIsIEMpID0gKDEsIDIsIDMpOwptYXRjaCAoQSwgQiwgQykgewogICAgKHgsIHgyLCBzZWUpIGlmIHggPT0geDIgPT4geyAvKiBBIGFuZCBCIGFyZSBlcXVhbCwgZG8gb25lIHRoaW5nICovIH0KICAgICh5LCB6LCBzZWUpID0+IHsgLyogQSBhbmQgQiB1bmVxdWFsOyBkbyBhbm90aGVyIHRoaW5nICovIH0KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8B1gQAAQDWBJMDAIVQJgAAoAYAAgcAoQYBAAMA7QIOAACfBgIFAQRTb21lAQEAtAkAAaAGAAMA7QIOAAKfBgABAwDYAiQAAJ4GAQEAtAkAApIDANkCEgAAtAkFAQVFMDQxNgABHwUAAQAFAwDYAiQAAJ4GAQEBuQkAAZ8GAJUDALRQJgAApQYAAAKVAwC0UCYAALQJBQGpA0FuIGlkZW50aWZpZXIgdGhhdCBpcyBuZWl0aGVyIGRlZmluZWQgbm9yIGEgc3RydWN0IHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMgpmbiBtYWluICgpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMSwgeTogMiB9Owp9CmBgYAoKSW4gdGhpcyBjYXNlLCBgRm9vYCBpcyB1bmRlZmluZWQsIHNvIGl0IGluaGVyZW50bHkgaXNuJ3QgYW55dGhpbmcsIGFuZApkZWZpbml0ZWx5IG5vdCBhIHN0cnVjdC4KCmBgYGNvbXBpbGVfZmFpbApmbiBtYWluICgpIHsKICAgIGxldCBmb28gPSAxOwogICAgbGV0IHggPSBmb28geyB4OiAxLCB5OiAyIH07Cn0KYGBgCgpJbiB0aGlzIGNhc2UsIGBmb29gIGlzIGRlZmluZWQsIGJ1dCBpcyBub3QgYSBzdHJ1Y3QsIHNvIFJ1c3QgY2FuJ3QgdXNlIGl0IGFzCm9uZS4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pAwABAKkDlQMAtFAmAACkBgACBwClBgEAAwDtAg4AAKMGAgUBBFNvbWUBAQC0CQABpAYAAwDtAg4AAqMGAAEDANgCJAAAogYBAQC0CQAClAMA2QISAAC0CQUBBUUwNDIyAAEfBQABAAUDANgCJAAAogYBAQG5CQABowYAlwMA41AmAACpBgAAApcDAONQJgAAtAkFAbQIQW4gaWRlbnRpZmllciB3YXMgdXNlZCBsaWtlIGEgZnVuY3Rpb24gbmFtZSBvciBhIHZhbHVlIHdhcyBleHBlY3RlZCBhbmQgdGhlCmlkZW50aWZpZXIgZXhpc3RzIGJ1dCBpdCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IG5hbWVzcGFjZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjMKc3RydWN0IEZvbyB7IGE6IGJvb2wgfTsKCmxldCBmID0gRm9vKCk7Ci8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsIGZvdW5kIGBGb29gCi8vIGBGb29gIGlzIGEgc3RydWN0IG5hbWUsIGJ1dCB0aGlzIGV4cHJlc3Npb24gdXNlcyBpdCBsaWtlIGEgZnVuY3Rpb24gbmFtZQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgbmFtZSBvZiB3aGF0IHlvdSBhY3R1YWxseSB3YW50ZWQgdG8gdXNlCmhlcmUuIEV4YW1wbGU6CgpgYGAKZm4gRm9vKCkgLT4gdTMyIHsgMCB9CgpsZXQgZiA9IEZvbygpOyAvLyBvayEKYGBgCgpJdCBpcyBjb21tb24gdG8gZm9yZ2V0IHRoZSB0cmFpbGluZyBgIWAgb24gbWFjcm8gaW52b2NhdGlvbnMsIHdoaWNoIHdvdWxkIGFsc28KeWllbGQgdGhpcyBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMwpwcmludGxuKCIiKTsKLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwKLy8gZm91bmQgbWFjcm8gYHByaW50bG5gCi8vIGRpZCB5b3UgbWVhbiBgcHJpbnRsbiEoLi4uKWA/IChub3RpY2UgdGhlIHRyYWlsaW5nIGAhYCkKYGBgCgpBbm90aGVyIGNhc2Ugd2hlcmUgdGhpcyBlcnJvciBpcyBlbWl0dGVkIGlzIHdoZW4gYSB2YWx1ZSBpcyBleHBlY3RlZCwgYnV0CnNvbWV0aGluZyBlbHNlIGlzIGZvdW5kOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIzCnB1YiBtb2QgYSB7CiAgICBwdWIgY29uc3QgSTogaTMyID0gMTsKfQoKZm4gaDEoKSAtPiBpMzIgewogICAgYS5JCiAgICAvL35eIEVSUk9SIGV4cGVjdGVkIHZhbHVlLCBmb3VuZCBtb2R1bGUgYGFgCiAgICAvLyBkaWQgeW91IG1lYW4gYGE6OklgPwp9CmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////B7QIAAEAtAiXAwDjUCYAAKgGAAIHAKkGAQADAO0CDgAApwYCBQEEU29tZQEBALQJAAGoBgADAO0CDgACpwYAAQMA2AIkAACmBgEBALQJAAKWAwDZAhIAALQJBQEFRTA0MjMAAR8FAAEABQMA2AIkAACmBgEBAbkJAAGnBgCZAwCSUSYAAK0GAAACmQMAklEmAAC0CQUB5whUaGUgYHNlbGZgIGtleXdvcmQgd2FzIHVzZWQgaW5zaWRlIG9mIGFuIGFzc29jaWF0ZWQgZnVuY3Rpb24gd2l0aG91dCBhICJgc2VsZmAKcmVjZWl2ZXIiIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjQKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIC8vIGBiYXJgIGlzIGEgbWV0aG9kLCBiZWNhdXNlIGl0IGhhcyBhIHJlY2VpdmVyIHBhcmFtZXRlci4KICAgIGZuIGJhcigmc2VsZikge30KCiAgICAvLyBgZm9vYCBpcyBub3QgYSBtZXRob2QsIGJlY2F1c2UgaXQgaGFzIG5vIHJlY2VpdmVyIHBhcmFtZXRlci4KICAgIGZuIGZvbygpIHsKICAgICAgICBzZWxmLmJhcigpOyAvLyBlcnJvcjogYHNlbGZgIHZhbHVlIGlzIGEga2V5d29yZCBvbmx5IGF2YWlsYWJsZSBpbgogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBtZXRob2RzIHdpdGggYSBgc2VsZmAgcGFyYW1ldGVyCiAgICB9Cn0KYGBgCgpUaGUgYHNlbGZgIGtleXdvcmQgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgbWV0aG9kcywgd2hpY2ggYXJlIGFzc29jaWF0ZWQKZnVuY3Rpb25zIChmdW5jdGlvbnMgZGVmaW5lZCBpbnNpZGUgb2YgYSBgdHJhaXRgIG9yIGBpbXBsYCBibG9jaykgdGhhdCBoYXZlIGEKYHNlbGZgIHJlY2VpdmVyIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIsIGxpa2UgYHNlbGZgLCBgJnNlbGZgLCBgJm11dCBzZWxmYCBvcgpgc2VsZjogJm11dCBQaW48U2VsZj5gICh0aGlzIGxhc3Qgb25lIGlzIGFuIGV4YW1wbGUgb2YgYW4gWyJhcmJpdHJhcnkgYHNlbGZgCnR5cGUiXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ0ODc0KSkuCgpDaGVjayBpZiB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbidzIHBhcmFtZXRlciBsaXN0IHNob3VsZCBoYXZlIGNvbnRhaW5lZCBhIGBzZWxmYApyZWNlaXZlciBmb3IgaXQgdG8gYmUgYSBtZXRob2QsIGFuZCBhZGQgaXQgaWYgc28uIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigmc2VsZikge30KCiAgICBmbiBmb28oc2VsZikgeyAvLyBgZm9vYCBpcyBub3cgYSBtZXRob2QuCiAgICAgICAgc2VsZi5iYXIoKTsgLy8gb2shCiAgICB9Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////w/nCAABAOcImQMAklEmAACsBgACBwCtBgEAAwDtAg4AAKsGAgUBBFNvbWUBAQC0CQABrAYAAwDtAg4AAqsGAAEDANgCJAAAqgYBAQC0CQACmAMA2QISAAC0CQUBBUUwNDI0AAEfBQABAAUDANgCJAAAqgYBAQG5CQABqwYAmwMAwVEmAACxBgAAApsDAMFRJgAAtAkFAa4IQW4gdW5yZXNvbHZlZCBuYW1lIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjUKc29tZXRoaW5nX3RoYXRfZG9lc250X2V4aXN0Ojpmb287Ci8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYHNvbWV0aGluZ190aGF0X2RvZXNudF9leGlzdDo6Zm9vYAoKLy8gb3I6Cgp0cmFpdCBGb28gewogICAgZm4gYmFyKCkgewogICAgICAgIFNlbGY7IC8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYFNlbGZgCiAgICB9Cn0KCi8vIG9yOgoKbGV0IHggPSB1bmtub3duX3ZhcmlhYmxlOyAgLy8gZXJyb3I6IHVucmVzb2x2ZWQgbmFtZSBgdW5rbm93bl92YXJpYWJsZWAKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIGVuc3VyZSB0aGF0IHRoZQppZGVudGlmaWVyIGJlaW5nIHJlZmVycmVkIHRvIGlzIHZhbGlkIGZvciB0aGUgZ2l2ZW4gc2l0dWF0aW9uLiBFeGFtcGxlOgoKYGBgCmVudW0gc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdCB7CiAgICBGb28sCn0KYGBgCgpPcjoKCmBgYAptb2Qgc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdCB7CiAgICBwdWIgc3RhdGljIGZvbyA6IGkzMiA9IDBpMzI7Cn0KCnNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3Q6OmZvbzsgLy8gb2shCmBgYAoKT3I6CgpgYGAKbGV0IHVua25vd25fdmFyaWFibGUgPSAxMnUzMjsKbGV0IHggPSB1bmtub3duX3ZhcmlhYmxlOyAvLyBvayEKYGBgCgpJZiB0aGUgaXRlbSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtb2R1bGUsIGl0IG11c3QgYmUgaW1wb3J0ZWQgdXNpbmcgYQpgdXNlYCBzdGF0ZW1lbnQsIGxpa2Ugc286CgpgYGAKIyBtb2QgZm9vIHsgcHViIGZuIGJhcigpIHt9IH0KIyBmbiBtYWluKCkgewp1c2UgZm9vOjpiYXI7CmJhcigpOwojIH0KYGBgCgpJZiB0aGUgaXRlbSB5b3UgYXJlIGltcG9ydGluZyBpcyBub3QgZGVmaW5lZCBpbiBzb21lIHN1cGVyLW1vZHVsZSBvZiB0aGUKY3VycmVudCBtb2R1bGUsIHRoZW4gaXQgbXVzdCBhbHNvIGJlIGRlY2xhcmVkIGFzIHB1YmxpYyAoZS5nLiwgYHB1YiBmbmApLgoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8PrggAAQCuCJsDAMFRJgAAsAYAAgcAsQYBAAMA7QIOAACvBgIFAQRTb21lAQEAtAkAAbAGAAMA7QIOAAKvBgABAwDYAiQAAK4GAQEAtAkAApoDANkCEgAAtAkFAQVFMDQyNQABHwUAAQAFAwDYAiQAAK4GAQEBuQkAAa8GAJ0DAPBRJgAAtQYAAAKdAwDwUSYAALQJBQGAAkFuIHVuZGVjbGFyZWQgbGFiZWwgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI2Cmxvb3AgewogICAgYnJlYWsgJ2E7IC8vIGVycm9yOiB1c2Ugb2YgdW5kZWNsYXJlZCBsYWJlbCBgJ2FgCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBzcGVsbGVkIG9yIGRlY2xhcmVkIHRoZSBsYWJlbCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKJ2E6IGxvb3AgewogICAgYnJlYWsgJ2E7IC8vIG9rIQp9CmBgYAoABf///////////wH///////////8B////////////Af///////////wEAgAIAAQCAAp0DAPBRJgAAtAYAAgcAtQYBAAMA7QIOAACzBgIFAQRTb21lAQEAtAkAAbQGAAMA7QIOAAKzBgABAwDYAiQAALIGAQEAtAkAApwDANkCEgAAtAkFAQVFMDQyNgABHwUAAQAFAwDYAiQAALIGAQEBuQkAAbMGAJ8DAJ9SJgAAuQYAAAKfAwCfUiYAALQJBQG9AkEgdHlwZSBvciBtb2R1bGUgaGFzIGJlZW4gZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjgKc3RydWN0IEJhcjsKc3RydWN0IEJhcjsgLy8gZXJyb3I6IGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIHZhbHVlIGBCYXJgCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlL21vZHVsZSdzIG5hbWUgb3IgcmVtb3ZlL3JlbmFtZSB0aGUKZHVwbGljYXRlZCBvbmUuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKc3RydWN0IEJhcjI7IC8vIG9rIQpgYGAKAAX///////////8B////////////Af///////////wH///////////8B//////////8fvQIAAQC9Ap8DAJ9SJgAAuAYAAgcAuQYBAAMA7QIOAAC3BgIFAQRTb21lAQEAtAkAAbgGAAMA7QIOAAK3BgABAwDYAiQAALYGAQEAtAkAAp4DANkCEgAAtAkFAQVFMDQyOAABHwUAAQAFAwDYAiQAALYGAQEBuQkAAbcGAKEDAM5SJgAAvQYAAAKhAwDOUiYAALQJBQHNA1RoZSBgc2VsZmAga2V5d29yZCBjYW5ub3QgYXBwZWFyIGFsb25lIGFzIHRoZSBsYXN0IHNlZ21lbnQgaW4gYSBgdXNlYApkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjkKdXNlIHN0ZDo6Zm10OjpzZWxmOyAvLyBlcnJvcjogYHNlbGZgIGltcG9ydHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoaW4gYSB7IH0gbGlzdApgYGAKClRvIHVzZSBhIG5hbWVzcGFjZSBpdHNlbGYgaW4gYWRkaXRpb24gdG8gc29tZSBvZiBpdHMgbWVtYmVycywgYHNlbGZgIG1heSBhcHBlYXIKYXMgcGFydCBvZiBhIGJyYWNlLWVuY2xvc2VkIGxpc3Qgb2YgaW1wb3J0czoKCmBgYAp1c2Ugc3RkOjpmbXQ6OntzZWxmLCBEZWJ1Z307CmBgYAoKSWYgeW91IG9ubHkgd2FudCB0byBpbXBvcnQgdGhlIG5hbWVzcGFjZSwgZG8gc28gZGlyZWN0bHk6CgpgYGAKdXNlIHN0ZDo6Zm10OwpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NAwABAM0DoQMAzlImAAC8BgACBwC9BgEAAwDtAg4AALsGAgUBBFNvbWUBAQC0CQABvAYAAwDtAg4AArsGAAEDANgCJAAAugYBAQC0CQACoAMA2QISAAC0CQUBBUUwNDI5AAEfBQABAAUDANgCJAAAugYBAQG5CQABuwYAowMA/VImAADBBgAAAqMDAP1SJgAAtAkFAZcDVGhlIGBzZWxmYCBpbXBvcnQgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgbGlzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzAKdXNlIHNvbWV0aGluZzo6e3NlbGYsIHNlbGZ9OyAvLyBlcnJvcjogYHNlbGZgIGltcG9ydCBjYW4gb25seSBhcHBlYXIgb25jZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGUgbGlzdApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgaW1wb3J0IG5hbWUgb3IgcmVtb3ZlIHRoZSBkdXBsaWNhdGVkCmBzZWxmYCBpbXBvcnQuIEV4YW1wbGU6CgpgYGAKIyBtb2Qgc29tZXRoaW5nIHt9CiMgZm4gbWFpbigpIHsKdXNlIHNvbWV0aGluZzo6e3NlbGZ9OyAvLyBvayEKIyB9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wOXAwABAJcDowMA/VImAADABgACBwDBBgEAAwDtAg4AAL8GAgUBBFNvbWUBAQC0CQABwAYAAwDtAg4AAr8GAAEDANgCJAAAvgYBAQC0CQACogMA2QISAAC0CQUBBUUwNDMwAAEfBQABAAUDANgCJAAAvgYBAQG5CQABvwYApQMArFMmAADFBgAAAqUDAKxTJgAAtAkFAboCQW4gaW52YWxpZCBgc2VsZmAgaW1wb3J0IHdhcyBtYWRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMQp1c2Uge3NlbGZ9OyAvLyBlcnJvcjogYHNlbGZgIGltcG9ydCBjYW4gb25seSBhcHBlYXIgaW4gYW4gaW1wb3J0IGxpc3Qgd2l0aCBhCiAgICAgICAgICAgIC8vICAgICAgICBub24tZW1wdHkgcHJlZml4CmBgYAoKWW91IGNhbm5vdCBpbXBvcnQgdGhlIGN1cnJlbnQgbW9kdWxlIGludG8gaXRzZWxmLCBwbGVhc2UgcmVtb3ZlIHRoaXMgaW1wb3J0Cm9yIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIGl0LgoABf///////////wH///////////8B////////////Af///////////wH//////////wO6AgABALoCpQMArFMmAADEBgACBwDFBgEAAwDtAg4AAMMGAgUBBFNvbWUBAQC0CQABxAYAAwDtAg4AAsMGAAEDANgCJAAAwgYBAQC0CQACpAMA2QISAAC0CQUBBUUwNDMxAAEfBQABAAUDANgCJAAAwgYBAQG5CQABwwYApwMA21MmAADJBgAAAqcDANtTJgAAtAkFAcYKQW4gaW1wb3J0IHdhcyB1bnJlc29sdmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMgp1c2Ugc29tZXRoaW5nOjpGb287IC8vIGVycm9yOiB1bnJlc29sdmVkIGltcG9ydCBgc29tZXRoaW5nOjpGb29gLgpgYGAKCkluIFJ1c3QgMjAxNSwgcGF0aHMgaW4gYHVzZWAgc3RhdGVtZW50cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNyYXRlIHJvb3QuIFRvCmltcG9ydCBpdGVtcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBhbmQgcGFyZW50IG1vZHVsZXMsIHVzZSB0aGUgYHNlbGY6OmAgYW5kCmBzdXBlcjo6YCBwcmVmaXhlcywgcmVzcGVjdGl2ZWx5LgoKSW4gUnVzdCAyMDE4LCBwYXRocyBpbiBgdXNlYCBzdGF0ZW1lbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtb2R1bGUKdW5sZXNzIHRoZXkgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiBhIGNyYXRlIG9yIGEgbGl0ZXJhbCBgY3JhdGU6OmAsIGluIHdoaWNoCmNhc2UgdGhleSBzdGFydCBmcm9tIHRoZSBjcmF0ZSByb290LiBBcyBpbiBSdXN0IDIwMTUgY29kZSwgdGhlIGBzZWxmOjpgIGFuZApgc3VwZXI6OmAgcHJlZml4ZXMgcmVmZXIgdG8gdGhlIGN1cnJlbnQgYW5kIHBhcmVudCBtb2R1bGVzIHJlc3BlY3RpdmVseS4KCkFsc28gdmVyaWZ5IHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgaW1wb3J0IG5hbWUgYW5kIHRoYXQgdGhlIGltcG9ydCBleGlzdHMKaW4gdGhlIG1vZHVsZSBmcm9tIHdoZXJlIHlvdSB0cmllZCB0byBpbXBvcnQgaXQuIEV4YW1wbGU6CgpgYGAKdXNlIHNlbGY6OnNvbWV0aGluZzo6Rm9vOyAvLyBPay4KCm1vZCBzb21ldGhpbmcgewogICAgcHViIHN0cnVjdCBGb287Cn0KIyBmbiBtYWluKCkge30KYGBgCgpJZiB5b3UgdHJpZWQgdG8gdXNlIGEgbW9kdWxlIGZyb20gYW4gZXh0ZXJuYWwgY3JhdGUgYW5kIGFyZSB1c2luZyBSdXN0IDIwMTUsCnlvdSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uICh3aGljaCBpcyB1c3VhbGx5IHBsYWNlZCBpbgp0aGUgY3JhdGUgcm9vdCk6CgpgYGBlZGl0aW9uMjAxNQpleHRlcm4gY3JhdGUgY29yZTsgLy8gUmVxdWlyZWQgdG8gdXNlIHRoZSBgY29yZWAgY3JhdGUgaW4gUnVzdCAyMDE1LgoKdXNlIGNvcmU6OmFueTsKIyBmbiBtYWluKCkge30KYGBgCgpJbiBSdXN0IDIwMTggdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uIGlzIG5vdCByZXF1aXJlZCBhbmQgeW91IGNhbiBpbnN0ZWFkCmp1c3QgYHVzZWAgaXQ6CgpgYGBlZGl0aW9uMjAxOAp1c2UgY29yZTo6YW55OyAvLyBObyBleHRlcm4gY3JhdGUgcmVxdWlyZWQgaW4gUnVzdCAyMDE4LgojIGZuIG1haW4oKSB7fQpgYGAKABb///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wE/xgoAAQDGCqcDANtTJgAAyAYAAgcAyQYBAAMA7QIOAADHBgIFAQRTb21lAQEAtAkAAcgGAAMA7QIOAALHBgABAwDYAiQAAMYGAQEAtAkAAqYDANkCEgAAtAkFAQVFMDQzMgABHwUAAQAFAwDYAiQAAMYGAQEBuQkAAccGAKkDAIpUJgAAzQYAAAKpAwCKVCYAALQJBQHfBUFuIHVuZGVjbGFyZWQgY3JhdGUsIG1vZHVsZSwgb3IgdHlwZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzMKbGV0IG1hcCA9IEhhc2hNYXA6Om5ldygpOwovLyBlcnJvcjogZmFpbGVkIHRvIHJlc29sdmU6IHVzZSBvZiB1bmRlY2xhcmVkIHR5cGUgYEhhc2hNYXBgCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlL21vZHVsZSdzIG5hbWUgb3IgdGhhdCB5b3UgZGlkbid0CmZvcmdldCB0byBpbXBvcnQgaXQ6CgpgYGAKdXNlIHN0ZDo6Y29sbGVjdGlvbnM6Okhhc2hNYXA7IC8vIEhhc2hNYXAgaGFzIGJlZW4gaW1wb3J0ZWQuCmxldCBtYXA6IEhhc2hNYXA8dTMyLCB1MzI+ID0gSGFzaE1hcDo6bmV3KCk7IC8vIFNvIGl0IGNhbiBiZSB1c2VkIQpgYGAKCklmIHlvdSd2ZSBleHBlY3RlZCB0byB1c2UgYSBjcmF0ZSBuYW1lOgoKYGBgY29tcGlsZV9mYWlsCnVzZSBmZXJyaXNfd2hlZWw6OkJpZ087Ci8vIGVycm9yOiBmYWlsZWQgdG8gcmVzb2x2ZTogdXNlIG9mIHVuZGVjbGFyZWQgY3JhdGUgb3IgbW9kdWxlIGBmZXJyaXNfd2hlZWxgCmBgYAoKTWFrZSBzdXJlIHRoZSBjcmF0ZSBoYXMgYmVlbiBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgaW4gYENhcmdvLnRvbWxgLgoKVG8gdXNlIGEgbW9kdWxlIGZyb20geW91ciBjdXJyZW50IGNyYXRlLCBhZGQgdGhlIGBjcmF0ZTo6YCBwcmVmaXggdG8gdGhlIHBhdGguCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////B98FAAEA3wWpAwCKVCYAAMwGAAIHAM0GAQADAO0CDgAAywYCBQEEU29tZQEBALQJAAHMBgADAO0CDgACywYAAQMA2AIkAADKBgEBALQJAAKoAwDZAhIAALQJBQEFRTA0MzMAAR8FAAEABQMA2AIkAADKBgEBAbkJAAHLBgCrAwC5VCYAANEGAAACqwMAuVQmAAC0CQUB5QVBIHZhcmlhYmxlIHVzZWQgaW5zaWRlIGFuIGlubmVyIGZ1bmN0aW9uIGNvbWVzIGZyb20gYSBkeW5hbWljIGVudmlyb25tZW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzNApmbiBmb28oKSB7CiAgICBsZXQgeSA9IDU7CiAgICBmbiBiYXIoKSAtPiB1MzIgewogICAgICAgIHkgLy8gZXJyb3I6IGNhbid0IGNhcHR1cmUgZHluYW1pYyBlbnZpcm9ubWVudCBpbiBhIGZuIGl0ZW07IHVzZSB0aGUKICAgICAgICAgIC8vICAgICAgICB8fCB7IC4uLiB9IGNsb3N1cmUgZm9ybSBpbnN0ZWFkLgogICAgfQp9CmBgYAoKSW5uZXIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGVpciBjb250YWluaW5nIGVudmlyb25tZW50LiBUbyBmaXggdGhpcwplcnJvciwgeW91IGNhbiByZXBsYWNlIHRoZSBmdW5jdGlvbiB3aXRoIGEgY2xvc3VyZToKCmBgYApmbiBmb28oKSB7CiAgICBsZXQgeSA9IDU7CiAgICBsZXQgYmFyID0gfHwgewogICAgICAgIHkKICAgIH07Cn0KYGBgCgpPciByZXBsYWNlIHRoZSBjYXB0dXJlZCB2YXJpYWJsZSB3aXRoIGEgY29uc3RhbnQgb3IgYSBzdGF0aWMgaXRlbToKCmBgYApmbiBmb28oKSB7CiAgICBzdGF0aWMgbXV0IFg6IHUzMiA9IDQ7CiAgICBjb25zdCBZOiB1MzIgPSA1OwogICAgZm4gYmFyKCkgLT4gdTMyIHsKICAgICAgICB1bnNhZmUgewogICAgICAgICAgICBYID0gMzsKICAgICAgICB9CiAgICAgICAgWQogICAgfQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8D5QUAAQDlBasDALlUJgAA0AYAAgcA0QYBAAMA7QIOAADPBgIFAQRTb21lAQEAtAkAAdAGAAMA7QIOAALPBgABAwDYAiQAAM4GAQEAtAkAAqoDANkCEgAAtAkFAQVFMDQzNAABHwUAAQAFAwDYAiQAAM4GAQEBuQkAAc8GAK0DAOhUJgAA1QYAAAKtAwDoVCYAALQJBQH4BEEgbm9uLWNvbnN0YW50IHZhbHVlIHdhcyB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzUKbGV0IGZvbyA9IDQyOwpsZXQgYTogW3U4OyBmb29dOyAvLyBlcnJvcjogYXR0ZW1wdCB0byB1c2UgYSBub24tY29uc3RhbnQgdmFsdWUgaW4gYSBjb25zdGFudApgYGAKCidjb25zdGFudCcgbWVhbnMgJ2EgY29tcGlsZS10aW1lIHZhbHVlJy4KCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIFtWYXJpYWJsZXMgYW5kIE11dGFiaWxpdHldIHNlY3Rpb24gb2YgdGhlIGJvb2suCgpbVmFyaWFibGVzIGFuZCBNdXRhYmlsaXR5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDMtMDEtdmFyaWFibGVzLWFuZC1tdXRhYmlsaXR5Lmh0bWwjZGlmZmVyZW5jZXMtYmV0d2Vlbi12YXJpYWJsZXMtYW5kLWNvbnN0YW50cwoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgY29uc3RhbnQuIEV4YW1wbGU6CgpgYGAKbGV0IGE6IFt1ODsgNDJdOyAvLyBvayEKYGBgCgpPcjoKCmBgYApjb25zdCBGT086IHVzaXplID0gNDI7CmxldCBhOiBbdTg7IEZPT107IC8vIG9rIQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gEAAEA+AStAwDoVCYAANQGAAIHANUGAQADAO0CDgAA0wYCBQEEU29tZQEBALQJAAHUBgADAO0CDgAC0wYAAQMA2AIkAADSBgEBALQJAAKsAwDZAhIAALQJBQEFRTA0MzUAAR8FAAEABQMA2AIkAADSBgEBAbkJAAHTBgCvAwCXVSYAANkGAAACrwMAl1UmAAC0CQUBmwxUaGUgZnVuY3Rpb25hbCByZWNvcmQgdXBkYXRlIHN5bnRheCB3YXMgdXNlZCBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzYKZW51bSBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBXZWVrbHksCiAgICBTZW1pTW9udGhseSB7IGRheXM6ICh1OCwgdTgpLCBhbm51YWxfc3BlY2lhbDogYm9vbCB9LAp9CgpmbiBvbmVfdXBfY29tcGV0aXRvcihjb21wZXRpdG9yX2ZyZXF1ZW5jeTogUHVibGljYXRpb25GcmVxdWVuY3kpCiAgICAgICAgICAgICAgICAgICAgIC0+IFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIG1hdGNoIGNvbXBldGl0b3JfZnJlcXVlbmN5IHsKICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6V2Vla2x5ID0+IFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgIGRheXM6ICgxLCAxNSksIGFubnVhbF9zcGVjaWFsOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgYyBAIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseXsgLi4gfSA9PgogICAgICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHkgewogICAgICAgICAgICAgICAgYW5udWFsX3NwZWNpYWw6IHRydWUsIC4uYyAvLyBlcnJvcjogZnVuY3Rpb25hbCByZWNvcmQgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBzeW50YXggcmVxdWlyZXMgYSBzdHJ1Y3QKICAgICAgICB9CiAgICB9Cn0KYGBgCgpUaGUgZnVuY3Rpb25hbCByZWNvcmQgdXBkYXRlIHN5bnRheCBpcyBvbmx5IGFsbG93ZWQgZm9yIHN0cnVjdHMgKHN0cnVjdC1saWtlCmVudW0gdmFyaWFudHMgZG9uJ3QgcXVhbGlmeSwgZm9yIGV4YW1wbGUpLiBUbyBmaXggdGhlIHByZXZpb3VzIGNvZGUsIHJld3JpdGUgdGhlCmV4cHJlc3Npb24gd2l0aG91dCBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUgc3ludGF4OgoKYGBgCmVudW0gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgV2Vla2x5LAogICAgU2VtaU1vbnRobHkgeyBkYXlzOiAodTgsIHU4KSwgYW5udWFsX3NwZWNpYWw6IGJvb2wgfSwKfQoKZm4gb25lX3VwX2NvbXBldGl0b3IoY29tcGV0aXRvcl9mcmVxdWVuY3k6IFB1YmxpY2F0aW9uRnJlcXVlbmN5KQogICAgICAgICAgICAgICAgICAgICAtPiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBtYXRjaCBjb21wZXRpdG9yX2ZyZXF1ZW5jeSB7CiAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OldlZWtseSA9PiBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHkgewogICAgICAgICAgICBkYXlzOiAoMSwgMTUpLCBhbm51YWxfc3BlY2lhbDogZmFsc2UKICAgICAgICB9LAogICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseXsgZGF5cywgLi4gfSA9PgogICAgICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHkgewogICAgICAgICAgICAgICAgZGF5cywgYW5udWFsX3NwZWNpYWw6IHRydWUgLy8gb2shCiAgICAgICAgfQogICAgfQp9CmBgYAoAGf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z+bDAABAJsMrwMAl1UmAADYBgACBwDZBgEAAwDtAg4AANcGAgUBBFNvbWUBAQC0CQAB2AYAAwDtAg4AAtcGAAEDANgCJAAA1gYBAQC0CQACrgMA2QISAAC0CQUBBUUwNDM2AAEf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OiBgc2ltZF9zaHVmZmxlYAp9CmBgYAoKVGhlIGBzaW1kX3NodWZmbGVgIGZ1bmN0aW9uIG5lZWRzIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHBhc3NlZCBhcwpsYXN0IHBhcmFtZXRlciBpbiBpdHMgbmFtZS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKZXh0ZXJuICJwbGF0Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfc2h1ZmZsZTg8QSxCPihhOiBBLCBiOiBBLCBjOiBbdTMyOyA4XSkgLT4gQjsKfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gEAAEA+AS1AwCkViYAAOQGAAIHAOUGAQADAO0CDgAA4wYCBQEEU29tZQEBALQJAAHkBgADAO0CDgAC4wYAAQMA2AIkAADiBgEBALQJAAK0AwDZAhIAALQJBQEFRTA0MzkAAR8FAAEABQMA2AIkAADiBgEBAbkJAAHjBgC3AwDTViYAAOkGAAACtwMA01YmAAC0CQUB+QVBIHByaXZhdGUgdHJhaXQgd2FzIHVzZWQgb24gYSBwdWJsaWMgdHlwZSBwYXJhbWV0ZXIgYm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQ0NQojIVtkZW55KHByaXZhdGVfaW5fcHVibGljKV0KCnRyYWl0IEZvbyB7CiAgICBmbiBkdW1teSgmc2VsZikgeyB9Cn0KCnB1YiB0cmFpdCBCYXIgOiBGb28ge30gLy8gZXJyb3I6IHByaXZhdGUgdHJhaXQgaW4gcHVibGljIGludGVyZmFjZQpwdWIgc3RydWN0IEJhcjI8VDogRm9vPihwdWIgVCk7IC8vIHNhbWUgZXJyb3IKcHViIGZuIGZvbzxUOiBGb28+ICh0OiBUKSB7fSAvLyBzYW1lIGVycm9yCgpmbiBtYWluKCkge30KYGBgCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHRyYWl0IGlzIGFsc28gcHVibGljLiBUaGUgdHJhaXQKY2FuIGJlIG1hZGUgaW5hY2Nlc3NpYmxlIGlmIG5lY2Vzc2FyeSBieSBwbGFjaW5nIGl0IGludG8gYSBwcml2YXRlIGlubmVyCm1vZHVsZSwgYnV0IGl0IHN0aWxsIGhhcyB0byBiZSBtYXJrZWQgd2l0aCBgcHViYC4gRXhhbXBsZToKCmBgYApwdWIgdHJhaXQgRm9vIHsgLy8gd2Ugc2V0IHRoZSBGb28gdHJhaXQgcHVibGljCiAgICBmbiBkdW1teSgmc2VsZikgeyB9Cn0KCnB1YiB0cmFpdCBCYXIgOiBGb28ge30gLy8gb2shCnB1YiBzdHJ1Y3QgQmFyMjxUOiBGb28+KHB1YiBUKTsgLy8gb2shCnB1YiBmbiBmb288VDogRm9vPiAodDogVCkge30gLy8gb2shCgpmbiBtYWluKCkge30KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5BQABAPkFtwMA01YmAADoBgACBwDpBgEAAwDtAg4AAOcGAgUBBFNvbWUBAQC0CQAB6AYAAwDtAg4AAucGAAEDANgCJAAA5gYBAQC0CQACtgMA2QISAAC0CQUBBUUwNDQ1AAEfBQABAAUDANgCJAAA5gYBAQG5CQAB5wYAuQMAglcmAADtBgAAArkDAIJXJgAAtAkFAYwHQSBwcml2YXRlIHR5cGUgd2FzIHVzZWQgaW4gYSBwdWJsaWMgdHlwZSBzaWduYXR1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDQ2CiMhW2RlbnkocHJpdmF0ZV9pbl9wdWJsaWMpXQpzdHJ1Y3QgQmFyKHUzMik7Cgptb2QgZm9vIHsKICAgIHVzZSBjcmF0ZTo6QmFyOwogICAgcHViIGZuIGJhcigpIC0+IEJhciB7IC8vIGVycm9yOiBwcml2YXRlIHR5cGUgaW4gcHVibGljIGludGVyZmFjZQogICAgICAgIEJhcigwKQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpUaGVyZSBhcmUgdHdvIHdheXMgdG8gc29sdmUgdGhpcyBlcnJvci4gVGhlIGZpcnN0IGlzIHRvIG1ha2UgdGhlIHB1YmxpYyB0eXBlCnNpZ25hdHVyZSBvbmx5IHB1YmxpYyB0byBhIG1vZHVsZSB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSB0eXBlLgpUaGlzIGlzIGRvbmUgYnkgdXNpbmcgcHViKGNyYXRlKSBvciBwdWIoaW4gY3JhdGU6Om15X21vZDo6ZXRjKQpFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXIodTMyKTsKCm1vZCBmb28gewogICAgdXNlIGNyYXRlOjpCYXI7CiAgICBwdWIoY3JhdGUpIGZuIGJhcigpIC0+IEJhciB7IC8vIG9ubHkgcHVibGljIHRvIGNyYXRlIHJvb3QKICAgICAgICBCYXIoMCkKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIG90aGVyIHdheSB0byBzb2x2ZSB0aGlzIGVycm9yIGlzIHRvIG1ha2UgdGhlIHByaXZhdGUgdHlwZSBwdWJsaWMuCkV4YW1wbGU6CgpgYGAKcHViIHN0cnVjdCBCYXIodTMyKTsgLy8gd2Ugc2V0IHRoZSBCYXIgdHlwZSBwdWJsaWMKbW9kIGZvbyB7CiAgICB1c2UgY3JhdGU6OkJhcjsKICAgIHB1YiBmbiBiYXIoKSAtPiBCYXIgeyAvLyBvayEKICAgICAgICBCYXIoMCkKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/x+MBwABAIwHuQMAglcmAADsBgACBwDtBgEAAwDtAg4AAOsGAgUBBFNvbWUBAQC0CQAB7AYAAwDtAg4AAusGAAEDANgCJAAA6gYBAQC0CQACuAMA2QISAAC0CQUBBUUwNDQ2AAEfBQAB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b28gewogICAgZm4gZm9vKCk7Cn0KCi8vIERpcmVjdGx5IGltcGxlbWVudGVkIG1ldGhvZHMgc2hhcmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHR5cGUgaXRzZWxmLAovLyBzbyBgcHViYCBpcyB1bm5lY2Vzc2FyeSBoZXJlCmltcGwgQmFyIHt9CgovLyBUcmFpdCBtZXRob2RzIHNoYXJlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSB0cmFpdCwgc28gYHB1YmAgaXMKLy8gdW5uZWNlc3NhcnkgaW4gZWl0aGVyIGNhc2UKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w/gBQABAOAFvwMAj1gmAAD4BgACBwD5BgEAAwDtAg4AAPcGAgUBBFNvbWUBAQC0CQAB+AYAAwDtAg4AAvcGAAEDANgCJAAA9gYBAQC0CQACvgMA2QISAAC0CQUBBUUwNDQ5AAEfBQABAAUDANgCJAAA9gYBAQG5CQAB9wYAwQMAvlgmAAD9BgAAAsEDAL5YJgAAtAkFAfgGQSBzdHJ1Y3QgY29uc3RydWN0b3Igd2l0aCBwcml2YXRlIGZpZWxkcyB3YXMgaW52b2tlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTEKbW9kIEJhciB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIGE6IGlzaXplLAogICAgICAgIGI6IGlzaXplLAogICAgfQp9CgpsZXQgZiA9IEJhcjo6Rm9veyBhOiAwLCBiOiAwIH07IC8vIGVycm9yOiBmaWVsZCBgYmAgb2Ygc3RydWN0IGBCYXI6OkZvb2AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXMgcHJpdmF0ZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdCBhcmUgcHVibGljLApvciBpbXBsZW1lbnQgYSBmdW5jdGlvbiBmb3IgZWFzeSBpbnN0YW50aWF0aW9uLiBFeGFtcGxlczoKCmBgYAptb2QgQmFyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICBwdWIgYTogaXNpemUsCiAgICAgICAgcHViIGI6IGlzaXplLCAvLyB3ZSBzZXQgYGJgIGZpZWxkIHB1YmxpYwogICAgfQp9CgpsZXQgZiA9IEJhcjo6Rm9veyBhOiAwLCBiOiAwIH07IC8vIG9rIQpgYGAKCk9yOgoKYGBgCm1vZCBCYXIgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiBhOiBpc2l6ZSwKICAgICAgICBiOiBpc2l6ZSwgLy8gc3RpbGwgcHJpdmF0ZQogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgLy8gd2UgY3JlYXRlIGEgbWV0aG9kIHRvIGluc3RhbnRpYXRlIGBGb29gCiAgICAgICAgICAgIEZvbyB7IGE6IDAsIGI6IDAgfQogICAgICAgIH0KICAgIH0KfQoKbGV0IGYgPSBCYXI6OkZvbzo6bmV3KCk7IC8vIG9rIQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3/4BgABAPgGwQMAvlgmAAD8BgACBwD9BgEAAwDtAg4AAPsGAgUBBFNvbWUBAQC0CQAB/AYAAwDtAg4AAvsGAAEDANgCJAAA+gYBAQC0CQACwAMA2QISAAC0CQUBBUUwNDUxAAEfBQABAAUDANgCJAAA+gYBAQG5CQAB+wYAwwMA7VgmAACBBwAAAsMDAO1YJgAAtAkFAdgCQW4gaW52YWxpZCBsaW50IGF0dHJpYnV0ZSBoYXMgYmVlbiBnaXZlbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTIKIyFbYWxsb3coZm9vID0gIiIpXSAvLyBlcnJvcjogbWFsZm9ybWVkIGxpbnQgYXR0cmlidXRlCmBgYAoKTGludCBhdHRyaWJ1dGVzIG9ubHkgYWNjZXB0IGEgbGlzdCBvZiBpZGVudGlmaWVycyAod2hlcmUgZWFjaCBpZGVudGlmaWVyIGlzIGEKbGludCBuYW1lKS4gRW5zdXJlIHRoZSBhdHRyaWJ1dGUgaXMgb2YgdGhpcyBmb3JtOgoKYGBgCiMhW2FsbG93KGZvbyldIC8vIG9rIQovLyBvcjoKIyFbYWxsb3coZm9vLCBmb28yKV0gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////B9gCAAEA2ALDAwDtWCYAAIAHAAIHAIEHAQADAO0CDgAA/wYCBQEEU29tZQEBALQJAAGABwADAO0CDgAC/wYAAQMA2AIkAAD+BgEBALQJAALCAwDZAhIAALQJBQEFRTA0NTIAAR8FAAEABQMA2AIkAAD+BgEBAbkJAAH/BgDFAwCcWSYAAIUHAAACxQMAnFkmAAC0CQUBpwhBIGxpbnQgY2hlY2sgYXR0cmlidXRlIHdhcyBvdmVycnVsZWQgYnkgYSBgZm9yYmlkYCBkaXJlY3RpdmUgc2V0IGFzIGFuCmF0dHJpYnV0ZSBvbiBhbiBlbmNsb3Npbmcgc2NvcGUsIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgYC1GYCBvcHRpb24uCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDUzCiMhW2ZvcmJpZChub25fc25ha2VfY2FzZSldCgojW2FsbG93KG5vbl9zbmFrZV9jYXNlKV0KZm4gbWFpbigpIHsKICAgIGxldCBNeU51bWJlciA9IDI7IC8vIGVycm9yOiBhbGxvdyhub25fc25ha2VfY2FzZSkgb3ZlcnJ1bGVkIGJ5IG91dGVyCiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZm9yYmlkKG5vbl9zbmFrZV9jYXNlKQp9CmBgYAoKVGhlIGBmb3JiaWRgIGxpbnQgc2V0dGluZywgbGlrZSBgZGVueWAsIHR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyCndhcm5pbmcgaW50byBhIGhhcmQgZXJyb3IuIFVubGlrZSBgZGVueWAsIGBmb3JiaWRgIHByZXZlbnRzIGl0c2VsZiBmcm9tIGJlaW5nCm92ZXJyaWRkZW4gYnkgaW5uZXIgYXR0cmlidXRlcy4KCklmIHlvdSdyZSBzdXJlIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBsaW50IGNoZWNrLCB5b3UgY2FuIGNoYW5nZSBgZm9yYmlkYCB0bwpgZGVueWAgKG9yIHVzZSBgLURgIGluc3RlYWQgb2YgYC1GYCBpZiB0aGUgYGZvcmJpZGAgc2V0dGluZyB3YXMgZ2l2ZW4gYXMgYQpjb21tYW5kLWxpbmUgb3B0aW9uKSB0byBhbGxvdyB0aGUgaW5uZXIgbGludCBjaGVjayBhdHRyaWJ1dGU6CgpgYGAKIyFbZGVueShub25fc25ha2VfY2FzZSldCgojW2FsbG93KG5vbl9zbmFrZV9jYXNlKV0KZm4gbWFpbigpIHsKICAgIGxldCBNeU51bWJlciA9IDI7IC8vIG9rIQp9CmBgYAoKT3RoZXJ3aXNlLCBlZGl0IHRoZSBjb2RlIHRvIHBhc3MgdGhlIGxpbnQgY2hlY2ssIGFuZCByZW1vdmUgdGhlIG92ZXJydWxlZAphdHRyaWJ1dGU6CgpgYGAKIyFbZm9yYmlkKG5vbl9zbmFrZV9jYXNlKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXlfbnVtYmVyID0gMjsKfQpgYGAKABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8PpwgAAQCnCMUDAJxZJgAAhAcAAgcAhQcBAAMA7QIOAACDBwIFAQRTb21lAQEAtAkAAYQHAAMA7QIOAAKDBwABAwDYAiQAAIIHAQEAtAkAAsQDANkCEgAAtAkFAQVFMDQ1MwABHwUAAQAFAwDYAiQAAIIHAQEBuQkAAYMHAMcDAMtZJgAAiQcAAALHAwDLWSYAALQJBQHRAkEgbGluayBuYW1lIHdhcyBnaXZlbiB3aXRoIGFuIGVtcHR5IG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDU0CiNbbGluayhuYW1lID0gIiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiBgI1tsaW5rKG5hbWUgPSAiIildYCBnaXZlbiB3aXRoIGVtcHR5IG5hbWUKYGBgCgpUaGUgcnVzdCBjb21waWxlciBjYW5ub3QgbGluayB0byBhbiBleHRlcm5hbCBsaWJyYXJ5IGlmIHlvdSBkb24ndCBnaXZlIGl0IGl0cwpuYW1lLiBFeGFtcGxlOgoKYGBgbm9fcnVuCiNbbGluayhuYW1lID0gInNvbWVfbGliIildIGV4dGVybiAiQyIge30gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B//8H0QIAAQDRAscDAMtZJgAAiAcAAgcAiQcBAAMA7QIOAACHBwIFAQRTb21lAQEAtAkAAYgHAAMA7QIOAAKHBwABAwDYAiQAAIYHAQEAtAkAAsYDANkCEgAAtAkFAQVFMDQ1NAABHwUAAQAFAwDYAiQAAIYHAQEBuQkAAYcHAMkDAPpZJgAAjQcAAALJAwD6WSYAALQJBQHABUxpbmtpbmcgd2l0aCBga2luZD1mcmFtZXdvcmtgIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGFyZ2V0aW5nIG1hY09TLAphcyBmcmFtZXdvcmtzIGFyZSBzcGVjaWZpYyB0byB0aGF0IG9wZXJhdGluZyBzeXN0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChzaG91bGQtY29tcGlsZV9mYWlsLWJ1dC1jYW5ub3QtZG9jdGVzdC1jb25kaXRpb25hbGx5LXdpdGhvdXQtbWFjb3MpCiNbbGluayhuYW1lID0gIkZvb0NvcmVTZXJ2aWNlcyIsIGtpbmQgPSAiZnJhbWV3b3JrIildIGV4dGVybiAiQyIge30KLy8gT1MgdXNlZCB0byBjb21waWxlIGlzIExpbnV4IGZvciBleGFtcGxlCmBgYAoKVG8gc29sdmUgdGhpcyBlcnJvciB5b3UgY2FuIHVzZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjoKCmBgYAojW2NmZ19hdHRyKHRhcmdldD0ibWFjb3MiLCBsaW5rKG5hbWUgPSAiRm9vQ29yZVNlcnZpY2VzIiwga2luZCA9ICJmcmFtZXdvcmsiKSldCmV4dGVybiAiQyIge30KYGBgCgpMZWFybiBtb3JlIGluIHRoZSBbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWwjY29uZGl0aW9uYWwtY29tcGlsYXRpb24KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQDABQABAMAFyQMA+lkmAACMBwACBwCNBwEAAwDtAg4AAIsHAgUBBFNvbWUBAQC0CQABjAcAAwDtAg4AAosHAAEDANgCJAAAigcBAQC0CQACyAMA2QISAAC0CQUBBUUwNDU1AAEfBQABAAUDANgCJAAAigcBAQG5CQABiwcAywMAqVomAACRBwAAAssDAKlaJgAAtAkFAacCQW4gdW5rbm93biAia2luZCIgd2FzIHNwZWNpZmllZCBmb3IgYSBsaW5rIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTgKI1tsaW5rKGtpbmQgPSAid29uZGVyZnVsX3VuaWNvcm4iKV0gZXh0ZXJuICJDIiB7fQovLyBlcnJvcjogdW5rbm93biBraW5kOiBgd29uZGVyZnVsX3VuaWNvcm5gCmBgYAoKUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCAia2luZCIgdmFsdWUsIGZyb20gb25lIG9mIHRoZSBmb2xsb3dpbmc6CgoqIHN0YXRpYwoqIGR5bGliCiogZnJhbWV3b3JrCgAF////////////Af///////////wH///////////8B////////////Af//////D6cCAAEApwLLAwCpWiYAAJAHAAIHAJEHAQADAO0CDgAAjwcCBQEEU29tZQEBALQJAAGQBwADAO0CDgACjwcAAQMA2AIkAACOBwEBALQJAALKAwDZAhIAALQJBQEFRTA0NTgAAR8FAAEABQMA2AIkAACOBwEBAbkJAAGPBwDNAwDYWiYAAJUHAAACzQMA2FomAAC0CQUB7gJBIGxpbmsgd2FzIHVzZWQgd2l0aG91dCBhIG5hbWUgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OQojW2xpbmsoa2luZCA9ICJkeWxpYiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiBgI1tsaW5rKC4uLildYCBzcGVjaWZpZWQgd2l0aG91dCBgbmFtZSA9ICJmb28iYApgYGAKClBsZWFzZSBhZGQgdGhlIG5hbWUgcGFyYW1ldGVyIHRvIGFsbG93IHRoZSBydXN0IGNvbXBpbGVyIHRvIGZpbmQgdGhlIGxpYnJhcnkKeW91IHdhbnQuIEV4YW1wbGU6CgpgYGBub19ydW4KI1tsaW5rKGtpbmQgPSAiZHlsaWIiLCBuYW1lID0gInNvbWVfbGliIildIGV4dGVybiAiQyIge30gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////D+4CAAEA7gLNAwDYWiYAAJQHAAIHAJUHAQADAO0CDgAAkwcCBQEEU29tZQEBALQJAAGUBwADAO0CDgACkwcAAQMA2AIkAACSBwEBALQJAALMAwDZAhIAALQJBQEFRTA0NTkAAR8FAAEABQMA2AIkAACSBwEBAbkJAAGTBwDPAwCHWyYAAJkHAAACzwMAh1smAAC0CQUB/gpBIHBsdWdpbi9jcmF0ZSB3YXMgZGVjbGFyZWQgYnV0IGNhbm5vdCBiZSBmb3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NjMKIyFbZmVhdHVyZShwbHVnaW4pXQojIVtwbHVnaW4oY29va2llX21vbnN0ZXIpXSAvLyBlcnJvcjogY2FuJ3QgZmluZCBjcmF0ZSBmb3IgYGNvb2tpZV9tb25zdGVyYApleHRlcm4gY3JhdGUgY2FrZV9pc19hX2xpZTsgLy8gZXJyb3I6IGNhbid0IGZpbmQgY3JhdGUgZm9yIGBjYWtlX2lzX2FfbGllYApgYGAKCllvdSBuZWVkIHRvIGxpbmsgeW91ciBjb2RlIHRvIHRoZSByZWxldmFudCBjcmF0ZSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBpdAoodGhyb3VnaCBDYXJnbyBvciB0aGUgYC1MYCBvcHRpb24gb2YgcnVzdGMgZXhhbXBsZSkuIFBsdWdpbnMgYXJlIGNyYXRlcyBhcwp3ZWxsLCBhbmQgeW91IGxpbmsgdG8gdGhlbSB0aGUgc2FtZSB3YXkuCgojIyBDb21tb24gY2F1c2VzCgotIFRoZSBjcmF0ZSBpcyBub3QgcHJlc2VudCBhdCBhbGwuIElmIHVzaW5nIENhcmdvLCBhZGQgaXQgdG8gYFtkZXBlbmRlbmNpZXNdYAogIGluIENhcmdvLnRvbWwuCi0gVGhlIGNyYXRlIGlzIHByZXNlbnQsIGJ1dCB1bmRlciBhIGRpZmZlcmVudCBuYW1lLiBJZiB1c2luZyBDYXJnbywgbG9vayBmb3IKICBgcGFja2FnZSA9IGAgdW5kZXIgYFtkZXBlbmRlbmNpZXNdYCBpbiBDYXJnby50b21sLgoKIyMgQ29tbW9uIGNhdXNlcyBmb3IgbWlzc2luZyBgc3RkYCBvciBgY29yZWAKCi0gWW91IGFyZSBjcm9zcy1jb21waWxpbmcgZm9yIGEgdGFyZ2V0IHdoaWNoIGRvZXNuJ3QgaGF2ZSBgc3RkYCBwcmVwYWNrYWdlZC4KICBDb25zaWRlciBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICArIEFkZGluZyBhIHByZS1jb21waWxlZCB2ZXJzaW9uIG9mIHN0ZCB3aXRoIGBydXN0dXAgdGFyZ2V0IGFkZGAKICArIEJ1aWxkaW5nIHN0ZCBmcm9tIHNvdXJjZSB3aXRoIGBjYXJnbyBidWlsZCAtWiBidWlsZC1zdGRgCiAgKyBVc2luZyBgIyFbbm9fc3RkXWAgYXQgdGhlIGNyYXRlIHJvb3QsIHNvIHlvdSB3b24ndCBuZWVkIGBzdGRgIGluIHRoZSBmaXJzdAogICAgcGxhY2UuCi0gWW91IGFyZSBkZXZlbG9waW5nIHRoZSBjb21waWxlciBpdHNlbGYgYW5kIGhhdmVuJ3QgYnVpbHQgbGlic3RkIGZyb20gc291cmNlLgogIFlvdSBjYW4gdXN1YWxseSBidWlsZCBpdCB3aXRoIGB4LnB5IGJ1aWxkIGxpYnJhcnkvc3RkYC4gTW9yZSBpbmZvcm1hdGlvbgogIGFib3V0IHgucHkgaXMgYXZhaWxhYmxlIGluIHRoZSBbcnVzdGMtZGV2LWd1aWRlXS4KCltydXN0Yy1kZXYtZ3VpZGVdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL2J1aWxkaW5nL2hvdy10by1idWlsZC1hbmQtcnVuLmh0bWwjYnVpbGRpbmctdGhlLWNvbXBpbGVyCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8//goAAQD+Cs8DAIdbJgAAmAcAAgcAmQcBAAMA7QIOAACXBwIFAQRTb21lAQEAtAkAAZgHAAMA7QIOAAKXBwABAwDYAiQAAJYHAQEAtAkAAs4DANkCEgAAtAkFAQVFMDQ2MwABHwUAAQAFAwDYAiQAAJYHAQEBuQkAAZcHANEDALZbJgAAnQcAAALRAwC2WyYAALQJBQG/AlRoZSBjb21waWxlciBmb3VuZCBtdWx0aXBsZSBsaWJyYXJ5IGZpbGVzIHdpdGggdGhlIHJlcXVlc3RlZCBjcmF0ZSBuYW1lLgoKVGhpcyBlcnJvciBjYW4gb2NjdXIgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgY2FzZXMgLS0gZm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcKYGV4dGVybiBjcmF0ZWAgb3IgcGFzc2luZyBgLS1leHRlcm5gIG9wdGlvbnMgd2l0aG91dCBjcmF0ZSBwYXRocy4gSXQgY2FuIGFsc28gYmUKY2F1c2VkIGJ5IGNhY2hpbmcgaXNzdWVzIHdpdGggdGhlIGJ1aWxkIGRpcmVjdG9yeSwgaW4gd2hpY2ggY2FzZSBgY2FyZ28gY2xlYW5gCm1heSBoZWxwLgoABf///////////wH///////////8B////////////Af///////////wH//////////3+/AgABAL8C0QMAtlsmAACcBwACBwCdBwEAAwDtAg4AAJsHAgUBBFNvbWUBAQC0CQABnAcAAwDtAg4AApsHAAEDANgCJAAAmgcBAQC0CQAC0AMA2QISAAC0CQUBBUUwNDY0AAEfBQABAAUDANgCJAAAmgcBAQG5CQABmwcA0wMA5VsmAAChBwAAAtMDAOVbJgAAtAkFAd0GTWFjcm8gaW1wb3J0IGRlY2xhcmF0aW9uIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2NgojW21hY3JvX3VzZShhX21hY3JvKGFub3RoZXJfbWFjcm8pKV0gLy8gZXJyb3I6IGludmFsaWQgaW1wb3J0IGRlY2xhcmF0aW9uCmV4dGVybiBjcmF0ZSBjb3JlIGFzIHNvbWVfY3JhdGU7CgojW21hY3JvX3VzZShpX3dhbnQgPSAic29tZV9tYWNyb3MiKV0gLy8gZXJyb3I6IGludmFsaWQgaW1wb3J0IGRlY2xhcmF0aW9uCmV4dGVybiBjcmF0ZSBjb3JlIGFzIGFub3RoZXJfY3JhdGU7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIG1hY3JvIGltcG9ydHMgaXMgdGhlIGZvbGxvd2luZzoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQovLyBJbiBzb21lX2NyYXRlOgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGdldF90YWNvcyB7CiAgICAuLi4KfQoKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBnZXRfcGltaWVudG9zIHsKICAgIC4uLgp9CgovLyBJbiB5b3VyIGNyYXRlOgojW21hY3JvX3VzZShnZXRfdGFjb3MsIGdldF9waW1pZW50b3MpXSAvLyBJdCBpbXBvcnRzIGBnZXRfdGFjb3NgIGFuZApleHRlcm4gY3JhdGUgc29tZV9jcmF0ZTsgICAgICAgICAgICAgICAvLyBgZ2V0X3BpbWllbnRvc2AgbWFjcm9zIGZyb20gc29tZV9jcmF0ZQpgYGAKCklmIHlvdSB3b3VsZCBsaWtlIHRvIGltcG9ydCBhbGwgZXhwb3J0ZWQgbWFjcm9zLCB3cml0ZSBgbWFjcm9fdXNlYCB3aXRoIG5vCmFyZ3VtZW50cy4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBgABAN0G0wMA5VsmAACgBwACBwChBwEAAwDtAg4AAJ8HAgUBBFNvbWUBAQC0CQABoAcAAwDtAg4AAp8HAAEDANgCJAAAngcBAQC0CQAC0gMA2QISAAC0CQUBBUUwNDY2AAEfBQABAAUDANgCJAAAngcBAQG5CQABnwcA1QMAlFwmAAClBwAAAtUDAJRcJgAAtAkFAfEEQSBub24tcm9vdCBtb2R1bGUgdHJpZWQgdG8gaW1wb3J0IG1hY3JvcyBmcm9tIGFub3RoZXIgY3JhdGUuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDY4Cm1vZCBmb28gewogICAgI1ttYWNyb191c2UoZGVidWdfYXNzZXJ0KV0gIC8vIGVycm9yOiBtdXN0IGJlIGF0IGNyYXRlIHJvb3QgdG8gaW1wb3J0CiAgICBleHRlcm4gY3JhdGUgY29yZTsgICAgICAgICAgLy8gICAgICAgIG1hY3JvcyBmcm9tIGFub3RoZXIgY3JhdGUKICAgIGZuIHJ1bl9tYWNybygpIHsgZGVidWdfYXNzZXJ0ISh0cnVlKTsgfQp9CmBgYAoKT25seSBgZXh0ZXJuIGNyYXRlYCBpbXBvcnRzIGF0IHRoZSBjcmF0ZSByb290IGxldmVsIGFyZSBhbGxvd2VkIHRvIGltcG9ydAptYWNyb3MuCgpFaXRoZXIgbW92ZSB0aGUgbWFjcm8gaW1wb3J0IHRvIGNyYXRlIHJvb3Qgb3IgZG8gd2l0aG91dCB0aGUgZm9yZWlnbiBtYWNyb3MuClRoaXMgd2lsbCB3b3JrOgoKYGBgCiNbbWFjcm9fdXNlKGRlYnVnX2Fzc2VydCldIC8vIG9rIQpleHRlcm4gY3JhdGUgY29yZTsKCm1vZCBmb28gewogICAgZm4gcnVuX21hY3JvKCkgeyBkZWJ1Z19hc3NlcnQhKHRydWUpOyB9Cn0KIyBmbiBtYWluKCkge30KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f/EEAAEA8QTVAwCUXCYAAKQHAAIHAKUHAQADAO0CDgAAowcCBQEEU29tZQEBALQJAAGkBwADAO0CDgACowcAAQMA2AIkAACiBwEBALQJAALUAwDZAhIAALQJBQEFRTA0NjgAAR8FAAEABQMA2AIkAACiBwEBAbkJAAGjBwDXAwDDXCYAAKkHAAAC1wMAw1wmAAC0CQUB8wVBIG1hY3JvIGxpc3RlZCBmb3IgaW1wb3J0IHdhcyBub3QgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDY5CiNbbWFjcm9fdXNlKGRyaW5rLCBiZV9tZXJyeSldIC8vIGVycm9yOiBpbXBvcnRlZCBtYWNybyBub3QgZm91bmQKZXh0ZXJuIGNyYXRlIGFsbG9jOwoKZm4gbWFpbigpIHsKICAgIC8vIC4uLgp9CmBgYAoKRWl0aGVyIHRoZSBsaXN0ZWQgbWFjcm8gaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgaW1wb3J0ZWQgY3JhdGUsIG9yIGl0IGlzIG5vdApleHBvcnRlZCBmcm9tIHRoZSBnaXZlbiBjcmF0ZS4KClRoaXMgY291bGQgYmUgY2F1c2VkIGJ5IGEgdHlwby4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgbWFjcm8ncyBuYW1lPwoKRG91YmxlLWNoZWNrIHRoZSBuYW1lcyBvZiB0aGUgbWFjcm9zIGxpc3RlZCBmb3IgaW1wb3J0LCBhbmQgdGhhdCB0aGUgY3JhdGUKaW4gcXVlc3Rpb24gZXhwb3J0cyB0aGVtLgoKQSB3b3JraW5nIHZlcnNpb24gd291bGQgYmU6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKLy8gSW4gc29tZV9jcmF0ZSBjcmF0ZToKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBlYXQgewogICAgLi4uCn0KCiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZHJpbmsgewogICAgLi4uCn0KCi8vIEluIHlvdXIgY3JhdGU6CiNbbWFjcm9fdXNlKGVhdCwgZHJpbmspXQpleHRlcm4gY3JhdGUgc29tZV9jcmF0ZTsgLy9vayEKYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A/MFAAEA8wXXAwDDXCYAAKgHAAIHAKkHAQADAO0CDgAApwcCBQEEU29tZQEBALQJAAGoBwADAO0CDgACpwcAAQMA2AIkAACmBwEBALQJAALWAwDZAhIAALQJBQEFRTA0NjkAAR8FAAEABQMA2AIkAACmBwEBAbkJAAGnBwDZAwDyXCYAAK0HAAAC2QMA8lwmAAC0CQUB5gdUaGUgdHlwZSBkb2VzIG5vdCBmdWxmaWxsIHRoZSByZXF1aXJlZCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NzcKdXNlIHN0ZDo6c3luYzo6TXV0ZXg7CgpzdHJ1Y3QgTXlTdHJpbmc8J2E+IHsKICAgIGRhdGE6ICYnYSBzdHIsCn0KCmZuIGlfd2FudF9zdGF0aWNfY2xvc3VyZTxGPihhOiBGKQogICAgd2hlcmUgRjogRm4oKSArICdzdGF0aWMge30KCmZuIHByaW50X3N0cmluZzwnYT4oczogTXV0ZXg8TXlTdHJpbmc8J2E+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIGVycm9yOiB0aGlzIGNsb3N1cmUgaGFzIGxpZmV0aW1lICdhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmF0aGVyIHRoYW4gJ3N0YXRpYwogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBjbG9zdXJlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGAnc3RhdGljYCBsaWZldGltZSBjb25zdHJhaW50LgpUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBsaWZldGltZSBvZiB0aGUgdHlwZS4gSGVyZSwgd2UKY2FuIGZpeCB0aGlzIHByb2JsZW0gYnkgZ2l2aW5nIGBzYCBhIHN0YXRpYyBsaWZldGltZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpNdXRleDsKCnN0cnVjdCBNeVN0cmluZzwnYT4gewogICAgZGF0YTogJidhIHN0ciwKfQoKZm4gaV93YW50X3N0YXRpY19jbG9zdXJlPEY+KGE6IEYpCiAgICB3aGVyZSBGOiBGbigpICsgJ3N0YXRpYyB7fQoKZm4gcHJpbnRfc3RyaW5nKHM6IE11dGV4PE15U3RyaW5nPCdzdGF0aWM+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8H5gcAAQDmB9kDAPJcJgAArAcAAgcArQcBAAMA7QIOAACrBwIFAQRTb21lAQEAtAkAAawHAAMA7QIOAAKrBwABAwDYAiQAAKoHAQEAtAkAAtgDANkCEgAAtAkFAQVFMDQ3NwABHwUAAQAFAwDYAiQAAKoHAQEBuQkAAasHANsDAKFdJgAAsQcAAALbAwChXSYAALQJBQHNBkEgbGlmZXRpbWUgYm91bmQgd2FzIG5vdCBzYXRpc2ZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDc4Ci8vIENoZWNrIHRoYXQgdGhlIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIChgJ1Nub3dXaGl0ZWAsIGluIHRoaXMgZXhhbXBsZSkgbXVzdAovLyBvdXRsaXZlIGFsbCB0aGUgc3VwZXJib3VuZHMgZnJvbSB0aGUgdHJhaXQgKGAna2lzc2AsIGluIHRoaXMgZXhhbXBsZSkuCgp0cmFpdCBXZWRkaW5nPCd0PjogJ3QgeyB9CgpzdHJ1Y3QgUHJpbmNlPCdraXNzLCAnU25vd1doaXRlPiB7CiAgICBjaGlsZDogQm94PFdlZGRpbmc8J2tpc3M+ICsgJ1Nub3dXaGl0ZT4sCiAgICAvLyBlcnJvcjogbGlmZXRpbWUgYm91bmQgbm90IHNhdGlzZmllZAp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB0aGUgYCdTbm93V2hpdGVgIGxpZmV0aW1lIGlzIHN1cHBvc2VkIHRvIG91dGxpdmUgdGhlIGAna2lzc2AKbGlmZXRpbWUgYnV0IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgYFByaW5jZWAgc3RydWN0IGRvZXNuJ3QgZW5mb3JjZSBpdC4gVG8gZml4CnRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgaXQ6CgpgYGAKdHJhaXQgV2VkZGluZzwndD46ICd0IHsgfQoKc3RydWN0IFByaW5jZTwna2lzcywgJ1Nub3dXaGl0ZTogJ2tpc3M+IHsgLy8gWW91IHNheSBoZXJlIHRoYXQgJ1Nub3dXaGl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGxpdmUgbG9uZ2VyIHRoYW4gJ2tpc3MuCiAgICBjaGlsZDogQm94PFdlZGRpbmc8J2tpc3M+ICsgJ1Nub3dXaGl0ZT4sIC8vIEFuZCBub3cgaXQncyBhbGwgZ29vZCEKfQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NBgABAM0G2wMAoV0mAACwBwACBwCxBwEAAwDtAg4AAK8HAgUBBFNvbWUBAQC0CQABsAcAAwDtAg4AAq8HAAEDANgCJAAArgcBAQC0CQAC2gMA2QISAAC0CQUBBUUwNDc4AAEfBQABAAUDANgCJAAArgcBAQG5CQABrwcA3QMA0F0mAAC1BwAAAt0DANBdJgAAtAkFAekPIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBsaWZldGltZSBvZiBhIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IG91dGxpdmUgdGhlIGZ1bmN0aW9uIGNhbGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAwCmZuIHByZWZpeDwnYT4oCiAgICB3b3JkczogaW1wbCBJdGVyYXRvcjxJdGVtID0gJidhIHN0cj4KKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBTdHJpbmc+IHsgLy8gZXJyb3IhCiAgICB3b3Jkcy5tYXAofHZ8IGZvcm1hdCEoImZvby17fSIsIHYpKQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIG1ha2UgdGhlIGxpZmV0aW1lIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBleHBsaWNpdDoKCmBgYApmbiBwcmVmaXg8J2E+KAogICAgd29yZHM6IGltcGwgSXRlcmF0b3I8SXRlbSA9ICYnYSBzdHI+ICsgJ2EKKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBTdHJpbmc+ICsgJ2EgeyAvLyBvayEKICAgIHdvcmRzLm1hcCh8dnwgZm9ybWF0ISgiZm9vLXt9IiwgdikpCn0KYGBgCgpUaGUgW2BpbXBsIFRyYWl0YF0gZmVhdHVyZSBpbiB0aGlzIGV4YW1wbGUgdXNlcyBhbiBpbXBsaWNpdCBgJ3N0YXRpY2AgbGlmZXRpbWUKcmVzdHJpY3Rpb24gaW4gdGhlIHJldHVybmVkIHR5cGUuIEhvd2V2ZXIgdGhlIHR5cGUgaW1wbGVtZW50aW5nIHRoZSBgSXRlcmF0b3JgCnBhc3NlZCB0byB0aGUgZnVuY3Rpb24gbGl2ZXMganVzdCBhcyBsb25nIGFzIGAnYWAsIHdoaWNoIGlzIG5vdCBsb25nIGVub3VnaC4KClRoZSBzb2x1dGlvbiBpbnZvbHZlcyBhZGRpbmcgbGlmZXRpbWUgYm91bmQgdG8gYm90aCBmdW5jdGlvbiBhcmd1bWVudCBhbmQKdGhlIHJldHVybiB2YWx1ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGluc2lkZSB0aGUgaXRlcmF0b3IKYXJlIG5vdCBkcm9wcGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGdvZXMgb3V0IG9mIHRoZSBzY29wZS4KCkFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBgSXRlbWAgcmVmZXJlbmNlcwppbiB0aGUgaXRlcmF0b3IgYXJlIGFsaXZlIGZvciB0aGUgd2hvbGUgbGlmZXRpbWUgb2YgdGhlIHByb2dyYW0uCgpgYGAKZm4gcHJlZml4KAogICAgd29yZHM6IGltcGwgSXRlcmF0b3I8SXRlbSA9ICYnc3RhdGljIHN0cj4KKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBTdHJpbmc+IHsgIC8vIG9rIQogICAgd29yZHMubWFwKHx2fCBmb3JtYXQhKCJmb28te30iLCB2KSkKfQpgYGAKCkEgc2ltaWxhciBsaWZldGltZSBwcm9ibGVtIG1pZ2h0IGFyaXNlIHdoZW4gcmV0dXJuaW5nIGNsb3N1cmVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAwCmZuIGZvbygKICAgIHg6ICZtdXQgVmVjPGkzMj4KKSAtPiBpbXBsIEZuTXV0KCZtdXQgVmVjPGkzMj4pIC0+ICZbaTMyXSB7IC8vIGVycm9yIQogICAgfHl8IHsKICAgICAgICB5LmFwcGVuZCh4KTsKICAgICAgICB5CiAgICB9Cn0KYGBgCgpBbmFsb2dpY2FsbHksIGEgc29sdXRpb24gaGVyZSBpcyB0byB1c2UgZXhwbGljaXQgcmV0dXJuIGxpZmV0aW1lCmFuZCBtb3ZlIHRoZSBvd25lcnNoaXAgb2YgdGhlIHZhcmlhYmxlIHRvIHRoZSBjbG9zdXJlLgoKYGBgCmZuIGZvbzwnYT4oCiAgICB4OiAmJ2EgbXV0IFZlYzxpMzI+CikgLT4gaW1wbCBGbk11dCgmbXV0IFZlYzxpMzI+KSAtPiAmW2kzMl0gKyAnYSB7IC8vIG9rIQogICAgbW92ZSB8eXwgewogICAgICAgIHkuYXBwZW5kKHgpOwogICAgICAgIHkKICAgIH0KfQpgYGAKClRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBsaWZldGltZSB0cmVhdG1lbnQgaW4gdGhlIFtgaW1wbCBUcmFpdGBdLApwbGVhc2Ugc2VlIHRoZSBbUkZDIDE5NTFdLgoKW2BpbXBsIFRyYWl0YF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGVzL2ltcGwtdHJhaXQuaHRtbApbUkZDIDE5NTFdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8xOTUxLWV4cGFuZC1pbXBsLXRyYWl0Lmh0bWwKACD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/6Q8AAQDpD90DANBdJgAAtAcAAgcAtQcBAAMA7QIOAACzBwIFAQRTb21lAQEAtAkAAbQHAAMA7QIOAAKzBwABAwDYAiQAALIHAQEAtAkAAtwDANkCEgAAtAkFAQVFMDQ4MgABHwUAAQAFAwDYAiQAALIHAQEBuQkAAbMHAN8DAP9dJgAAuQcAAALfAwD/XSYAALQJBQGdBkEgcmVmZXJlbmNlIGhhcyBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBkYXRhIGl0IHJlZmVyZW5jZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkxCnN0cnVjdCBGb288J2E+IHsKICAgIHg6IGZuKCYnYSBpMzIpLAp9Cgp0cmFpdCBUcmFpdDwnYSwgJ2I+IHsKICAgIHR5cGUgT3V0Owp9CgppbXBsPCdhLCAnYj4gVHJhaXQ8J2EsICdiPiBmb3IgdXNpemUgewogICAgdHlwZSBPdXQgPSAmJ2EgRm9vPCdiPjsgLy8gZXJyb3IhCn0KYGBgCgpIZXJlLCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb21waWxlciBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBgJ2JgIGxpZmV0aW1lCndpbGwgbGl2ZSBsb25nZXIgdGhhbiBgJ2FgLCB3aGljaCBzaG91bGQgYmUgbWFuZGF0b3J5IGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdApgVHJhaXQ6Ok91dGAgd2lsbCBhbHdheXMgaGF2ZSBhIHJlZmVyZW5jZSBwb2ludGluZyB0byBhbiBleGlzdGluZyB0eXBlLiBTbyBpbgp0aGlzIGNhc2UsIHdlIGp1c3QgbmVlZCB0byB0ZWxsIHRoZSBjb21waWxlciB0aGFuIGAnYmAgbXVzdCBvdXRsaXZlIGAnYWA6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogZm4oJidhIGkzMiksCn0KCnRyYWl0IFRyYWl0PCdhLCAnYj4gewogICAgdHlwZSBPdXQ7Cn0KCmltcGw8J2EsICdiOiAnYT4gVHJhaXQ8J2EsICdiPiBmb3IgdXNpemUgeyAvLyB3ZSBhZGRlZCB0aGUgbGlmZXRpbWUgZW5mb3JjZW1lbnQKICAgIHR5cGUgT3V0ID0gJidhIEZvbzwnYj47IC8vIGl0IG5vdyB3b3JrcyEKfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////AZ0GAAEAnQbfAwD/XSYAALgHAAIHALkHAQADAO0CDgAAtwcCBQEEU29tZQEBALQJAAG4BwADAO0CDgACtwcAAQMA2AIkAAC2BwEBALQJAALeAwDZAhIAALQJBQEFRTA0OTEAAR8FAAEABQMA2AIkAAC2BwEBAbkJAAG3BwDhAwCuXiYAAL0HAAAC4QMArl4mAAC0CQUB+A9BIGJvcnJvdyBvZiBhIGNvbnN0YW50IGNvbnRhaW5pbmcgaW50ZXJpb3IgbXV0YWJpbGl0eSB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5Mgp1c2Ugc3RkOjpzeW5jOjphdG9taWM6OkF0b21pY1VzaXplOwoKY29uc3QgQTogQXRvbWljVXNpemUgPSBBdG9taWNVc2l6ZTo6bmV3KDApOwpjb25zdCBCOiAmJ3N0YXRpYyBBdG9taWNVc2l6ZSA9ICZBOwovLyBlcnJvcjogY2Fubm90IGJvcnJvdyBhIGNvbnN0YW50IHdoaWNoIG1heSBjb250YWluIGludGVyaW9yIG11dGFiaWxpdHksCi8vICAgICAgICBjcmVhdGUgYSBzdGF0aWMgaW5zdGVhZApgYGAKCkEgYGNvbnN0YCByZXByZXNlbnRzIGEgY29uc3RhbnQgdmFsdWUgdGhhdCBzaG91bGQgbmV2ZXIgY2hhbmdlLiBJZiBvbmUgdGFrZXMKYSBgJmAgcmVmZXJlbmNlIHRvIHRoZSBjb25zdGFudCwgdGhlbiBvbmUgaXMgdGFraW5nIGEgcG9pbnRlciB0byBzb21lIG1lbW9yeQpsb2NhdGlvbiBjb250YWluaW5nIHRoZSB2YWx1ZS4gTm9ybWFsbHkgdGhpcyBpcyBwZXJmZWN0bHkgZmluZTogbW9zdCB2YWx1ZXMKY2FuJ3QgYmUgY2hhbmdlZCB2aWEgYSBzaGFyZWQgYCZgIHBvaW50ZXIsIGJ1dCBpbnRlcmlvciBtdXRhYmlsaXR5IHdvdWxkIGFsbG93Cml0LiBUaGF0IGlzLCBhIGNvbnN0YW50IHZhbHVlIGNvdWxkIGJlIG11dGF0ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCBhIGBzdGF0aWNgIGlzCmV4cGxpY2l0bHkgYSBzaW5nbGUgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjYW4gYmUgbXV0YXRlZCBhdCB3aWxsLgoKU28sIGluIG9yZGVyIHRvIHNvbHZlIHRoaXMgZXJyb3IsIHVzZSBzdGF0aWNzIHdoaWNoIGFyZSBgU3luY2A6CgpgYGAKdXNlIHN0ZDo6c3luYzo6YXRvbWljOjpBdG9taWNVc2l6ZTsKCnN0YXRpYyBBOiBBdG9taWNVc2l6ZSA9IEF0b21pY1VzaXplOjpuZXcoMCk7CnN0YXRpYyBCOiAmJ3N0YXRpYyBBdG9taWNVc2l6ZSA9ICZBOyAvLyBvayEKYGBgCgpZb3UgY2FuIGFsc28gaGF2ZSB0aGlzIGVycm9yIHdoaWxlIHVzaW5nIGEgY2VsbCB0eXBlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkyCnVzZSBzdGQ6OmNlbGw6OkNlbGw7Cgpjb25zdCBBOiBDZWxsPHVzaXplPiA9IENlbGw6Om5ldygxKTsKY29uc3QgQjogJkNlbGw8dXNpemU+ID0gJkE7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGEgY29uc3RhbnQgd2hpY2ggbWF5IGNvbnRhaW4gaW50ZXJpb3IgbXV0YWJpbGl0eSwKLy8gICAgICAgIGNyZWF0ZSBhIHN0YXRpYyBpbnN0ZWFkCgovLyBvcjoKc3RydWN0IEMgeyBhOiBDZWxsPHVzaXplPiB9Cgpjb25zdCBEOiBDID0gQyB7IGE6IENlbGw6Om5ldygxKSB9Owpjb25zdCBFOiAmQ2VsbDx1c2l6ZT4gPSAmRC5hOyAvLyBlcnJvcgoKLy8gb3I6CmNvbnN0IEY6ICZDID0gJkQ7IC8vIGVycm9yCmBgYAoKVGhpcyBpcyBiZWNhdXNlIGNlbGwgdHlwZXMgZG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3QgdGhyZWFkLXNhZmUuIER1ZSB0byB0aGlzLAp0aGV5IGRvbid0IGltcGxlbWVudCBTeW5jIGFuZCB0aHVzIGNhbid0IGJlIHBsYWNlZCBpbiBzdGF0aWNzLgoKSG93ZXZlciwgaWYgeW91IHN0aWxsIHdpc2ggdG8gdXNlIHRoZXNlIHR5cGVzLCB5b3UgY2FuIGFjaGlldmUgdGhpcyBieSBhbiB1bnNhZmUKd3JhcHBlcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwp1c2Ugc3RkOjptYXJrZXI6OlN5bmM7CgpzdHJ1Y3QgTm90VGhyZWFkU2FmZTxUPiB7CiAgICB2YWx1ZTogQ2VsbDxUPiwKfQoKdW5zYWZlIGltcGw8VD4gU3luYyBmb3IgTm90VGhyZWFkU2FmZTxUPiB7fQoKc3RhdGljIEE6IE5vdFRocmVhZFNhZmU8dXNpemU+ID0gTm90VGhyZWFkU2FmZSB7IHZhbHVlIDogQ2VsbDo6bmV3KDEpIH07CnN0YXRpYyBCOiAmJ3N0YXRpYyBOb3RUaHJlYWRTYWZlPHVzaXplPiA9ICZBOyAvLyBvayEKYGBgCgpSZW1lbWJlciB0aGlzIHNvbHV0aW9uIGlzIHVuc2FmZSEgWW91IHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBhY2Nlc3NlcyB0byB0aGUKY2VsbCBhcmUgc3luY2hyb25pemVkLgoAIP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gPAAEA+A/hAwCuXiYAALwHAAIHAL0HAQADAO0CDgAAuwcCBQEEU29tZQEBALQJAAG8BwADAO0CDgACuwcAAQMA2AIkAAC6BwEBALQJAALgAwDZAhIAALQJBQEFRTA0OTIAAR8FAAEABQMA2AIkAAC6BwEBAbkJAAG7BwDjAwDdXiYAAMEHAAAC4wMA3V4mAAC0CQUBgQdBIHZhbHVlIHdpdGggYSBjdXN0b20gYERyb3BgIGltcGxlbWVudGF0aW9uIG1heSBiZSBkcm9wcGVkIGR1cmluZyBjb25zdC1ldmFsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5MwplbnVtIERyb3BUeXBlIHsKICAgIEEsCn0KCmltcGwgRHJvcCBmb3IgRHJvcFR5cGUgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KCnN0cnVjdCBGb28gewogICAgZmllbGQxOiBEcm9wVHlwZSwKfQoKc3RhdGljIEZPTzogRm9vID0gRm9vIHsgZmllbGQxOiAoRHJvcFR5cGU6OkEsIERyb3BUeXBlOjpBKS4xIH07IC8vIGVycm9yIQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiB0aGUgZ2l2ZW4gdHlwZSBvciBvbmUgb2YgaXRzIGZpZWxkcyBpbXBsZW1lbnRzIHRoZQpgRHJvcGAgdHJhaXQsIHRoaXMgYERyb3BgIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBjYWxsZWQgd2l0aGluIGEgY29uc3QKY29udGV4dCBzaW5jZSBpdCBtYXkgcnVuIGFyYml0cmFyeSwgbm9uLWNvbnN0LWNoZWNrZWQgY29kZS4gVG8gcHJldmVudCB0aGlzCmlzc3VlLCBlbnN1cmUgYWxsIHZhbHVlcyB3aXRoIGEgY3VzdG9tIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBlc2NhcGUgdGhlCmluaXRpYWxpemVyLgoKYGBgCmVudW0gRHJvcFR5cGUgewogICAgQSwKfQoKaW1wbCBEcm9wIGZvciBEcm9wVHlwZSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQoKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IERyb3BUeXBlLAp9CgpzdGF0aWMgRk9POiBGb28gPSBGb28geyBmaWVsZDE6IERyb3BUeXBlOjpBIH07IC8vIFdlIGluaXRpYWxpemUgYWxsIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IGhhbmQuCmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BAYEHAAEAgQfjAwDdXiYAAMAHAAIHAMEHAQADAO0CDgAAvwcCBQEEU29tZQEBALQJAAHABwADAO0CDgACvwcAAQMA2AIkAAC+BwEBALQJAALiAwDZAhIAALQJBQEFRTA0OTMAAR8FAAEABQMA2AIkAAC+BwEBAbkJAAG/BwDlAwCMXyYAAMUHAAAC5QMAjF8mAAC0CQUB1gZBIGxpZmV0aW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGluIHRoZSBnaXZlbiBzaXR1YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk1CmZuIHRyYW5zbXV0ZV9saWZldGltZTwnYSwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIGVycm9yIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQoKbGV0IHkgPSBCb3g6Om5ldygoNDIsKSk7CmxldCB4ID0gdHJhbnNtdXRlX2xpZmV0aW1lKCZ5KTsKYGBgCgpJbiB0aGlzIGNvZGUsIHlvdSBoYXZlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgaXNzdWU6CiAxLiBFbmZvcmNlIHRoYXQgYCdhYCBsaXZlcyBhdCBsZWFzdCBhcyBsb25nIGFzIGAnYmAuCiAyLiBVc2UgdGhlIHNhbWUgbGlmZXRpbWUgcmVxdWlyZW1lbnQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMuCgpTbyBmb3IgdGhlIGZpcnN0IHNvbHV0aW9uLCB5b3UgY2FuIGRvIGl0IGJ5IHJlcGxhY2luZyBgJ2FgIHdpdGggYCdhOiAnYmA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhOiAnYiwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIG9rIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQpgYGAKCkluIHRoZSBzZWNvbmQgeW91IGNhbiBkbyBpdCBieSBzaW1wbHkgcmVtb3ZpbmcgYCdiYCBzbyB0aGV5IGJvdGggdXNlIGAnYWA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhLCBUPih0OiAmJ2EgKFQsKSkgLT4gJidhIFQgewogICAgbWF0Y2ggKCZ0LCkgeyAvLyBvayEKICAgICAgICAoKHUsKSwpID0+IHUsCiAgICB9Cn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wHWBgABANYG5QMAjF8mAADEBwACBwDFBwEAAwDtAg4AAMMHAgUBBFNvbWUBAQC0CQABxAcAAwDtAg4AAsMHAAEDANgCJAAAwgcBAQC0CQAC5AMA2QISAAC0CQUBBUUwNDk1AAEfBQABAAUDANgCJAAAwgcBAQG5CQABwwcA5wMAu18mAADJBwAAAucDALtfJgAAtAkFAf0DQSBsaWZldGltZSBuYW1lIGlzIHNoYWRvd2luZyBhbm90aGVyIGxpZmV0aW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk2CnN0cnVjdCBGb288J2E+IHsKICAgIGE6ICYnYSBpMzIsCn0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gZjwnYT4oeDogJidhIGkzMikgeyAvLyBlcnJvcjogbGlmZXRpbWUgbmFtZSBgJ2FgIHNoYWRvd3MgYSBsaWZldGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbmFtZSB0aGF0IGlzIGFscmVhZHkgaW4gc2NvcGUKICAgIH0KfQpgYGAKClBsZWFzZSBjaGFuZ2UgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBsaWZldGltZXMgdG8gcmVtb3ZlIHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgYTogJidhIGkzMiwKfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmPCdiPih4OiAmJ2IgaTMyKSB7IC8vIG9rIQogICAgfQp9CgpmbiBtYWluKCkgewp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9AwABAP0D5wMAu18mAADIBwACBwDJBwEAAwDtAg4AAMcHAgUBBFNvbWUBAQC0CQAByAcAAwDtAg4AAscHAAEDANgCJAAAxgcBAQC0CQAC5gMA2QISAAC0CQUBBUUwNDk2AAEfBQABAAUDANgCJAAAxgcBAQG5CQABxwcA6QMA6l8mAADNBwAAAukDAOpfJgAAtAkFAcIDIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBzdGFiaWxpdHkgYXR0cmlidXRlIHdhcyB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiNbc3RhYmxlXSAvLyBlcnJvcjogc3RhYmlsaXR5IGF0dHJpYnV0ZXMgbWF5IG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAvLyAgICAgICAgc3RhbmRhcmQgbGlicmFyeQpmbiBmb28oKSB7fQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2Ugc3RhYmlsaXR5IGF0dHJpYnV0ZXMgb3V0c2lkZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeS4KQWxzbywgZm9yIG5vdywgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHdyaXRlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIGVpdGhlci4KAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BA8IDAAEAwgPpAwDqXyYAAMwHAAIHAM0HAQADAO0CDgAAywcCBQEEU29tZQEBALQJAAHMBwADAO0CDgACywcAAQMA2AIkAADKBwEBALQJAALoAwDZAhIAALQJBQEFRTA0OTcAAR8FAAEABQMA2AIkAADKBwEBAbkJAAHLBwDrAwCZYCYAANEHAAAC6wMAmWAmAAC0CQUB0ARUaGUgYHBsdWdpbmAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk4CiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGZvbyhhcmdzKSldIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CiMhW3BsdWdpbihiYXI9InRlc3QiKV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKYGBgCgpUaGUgYCNbcGx1Z2luXWAgYXR0cmlidXRlIHNob3VsZCB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLgoKRm9yIGV4YW1wbGUsIGZvciB0aGUgcGx1Z2luIGBmb29gOgoKYGBgaWdub3JlIChyZXF1aXJlcyBleHRlcm5hbCBwbHVnaW4gY3JhdGUpCiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGZvbyldIC8vIG9rIQpgYGAKClNlZSB0aGUgW2BwbHVnaW5gIGZlYXR1cmVdIHNlY3Rpb24gb2YgdGhlIFVuc3RhYmxlIGJvb2sgZm9yIG1vcmUgZGV0YWlscy4KCltgcGx1Z2luYCBmZWF0dXJlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvcGx1Z2luLmh0bWwKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wPQBAABANAE6wMAmWAmAADQBwACBwDRBwEAAwDtAg4AAM8HAgUBBFNvbWUBAQC0CQAB0AcAAwDtAg4AAs8HAAEDANgCJAAAzgcBAQC0CQAC6gMA2QISAAC0CQUBBUUwNDk4AAEfBQABAAUDANgCJAAAzgcBAQG5CQABzwcA7QMAyGAmAADVBwAAAu0DAMhgJgAAtAkFAbgFQSB2YXJpYWJsZSB3YXMgYm9ycm93ZWQgYXMgbXV0YWJsZSBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTkKbGV0IG11dCBpID0gMDsKbGV0IG11dCB4ID0gJm11dCBpOwpsZXQgbXV0IGEgPSAmbXV0IGk7Cng7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGBpYCBhcyBtdXRhYmxlIG1vcmUgdGhhbiBvbmNlIGF0IGEgdGltZQpgYGAKClBsZWFzZSBub3RlIHRoYXQgaW4gUnVzdCwgeW91IGNhbiBlaXRoZXIgaGF2ZSBtYW55IGltbXV0YWJsZSByZWZlcmVuY2VzLCBvciBvbmUKbXV0YWJsZSByZWZlcmVuY2UuIEZvciBtb3JlIGRldGFpbHMgeW91IG1heSB3YW50IHRvIHJlYWQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKCkV4YW1wbGU6CgpgYGAKbGV0IG11dCBpID0gMDsKbGV0IG11dCB4ID0gJm11dCBpOyAvLyBvayEKCi8vIG9yOgpsZXQgbXV0IGkgPSAwOwpsZXQgYSA9ICZpOyAvLyBvayEKbGV0IGIgPSAmaTsgLy8gc3RpbGwgb2shCmxldCBjID0gJmk7IC8vIHN0aWxsIG9rIQpiOwphOwpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3+4BQABALgF7QMAyGAmAADUBwACBwDVBwEAAwDtAg4AANMHAgUBBFNvbWUBAQC0CQAB1AcAAwDtAg4AAtMHAAEDANgCJAAA0gcBAQC0CQAC7AMA2QISAAC0CQUBBUUwNDk5AAEfBQABAAUDANgCJAAA0gcBAQG5CQAB0wcA7wMA92AmAADZBwAAAu8DAPdgJgAAtAkFAfwHQSBib3Jyb3dlZCB2YXJpYWJsZSB3YXMgdXNlZCBieSBhIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAwCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbmlnaHRzX3dhdGNoID0gJmpvbl9zbm93OwogICAgbGV0IHN0YXJrcyA9IHx8IHsKICAgICAgICAqam9uX3Nub3cgPSAzOyAvLyBlcnJvcjogY2xvc3VyZSByZXF1aXJlcyB1bmlxdWUgYWNjZXNzIHRvIGBqb25fc25vd2AKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYnV0IGl0IGlzIGFscmVhZHkgYm9ycm93ZWQKICAgIH07CiAgICBwcmludGxuISgie30iLCBuaWdodHNfd2F0Y2gpOwp9CmBgYAoKSW4gaGVyZSwgYGpvbl9zbm93YCBpcyBhbHJlYWR5IGJvcnJvd2VkIGJ5IHRoZSBgbmlnaHRzX3dhdGNoYCByZWZlcmVuY2UsIHNvIGl0CmNhbm5vdCBiZSBib3Jyb3dlZCBieSB0aGUgYHN0YXJrc2AgY2xvc3VyZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBmaXggdGhpcyBpc3N1ZSwKeW91IGNhbiBjcmVhdGUgdGhlIGNsb3N1cmUgYWZ0ZXIgdGhlIGJvcnJvdyBoYXMgZW5kZWQ6CgpgYGAKZm4geW91X2tub3dfbm90aGluZyhqb25fc25vdzogJm11dCBpMzIpIHsKICAgIGxldCBuaWdodHNfd2F0Y2ggPSAmam9uX3Nub3c7CiAgICBwcmludGxuISgie30iLCBuaWdodHNfd2F0Y2gpOwogICAgbGV0IHN0YXJrcyA9IHx8IHsKICAgICAgICAqam9uX3Nub3cgPSAzOwogICAgfTsKfQpgYGAKCk9yLCBpZiB0aGUgdHlwZSBpbXBsZW1lbnRzIHRoZSBgQ2xvbmVgIHRyYWl0LCB5b3UgY2FuIGNsb25lIGl0IGJldHdlZW4KY2xvc3VyZXM6CgpgYGAKZm4geW91X2tub3dfbm90aGluZyhqb25fc25vdzogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgam9uX2NvcHkgPSBqb25fc25vdy5jbG9uZSgpOwogICAgbGV0IHN0YXJrcyA9IHx8IHsKICAgICAgICAqam9uX3Nub3cgPSAzOwogICAgfTsKICAgIHByaW50bG4hKCJ7fSIsIGpvbl9jb3B5KTsKfQpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////w/8BwABAPwH7wMA92AmAADYBwACBwDZBwEAAwDtAg4AANcHAgUBBFNvbWUBAQC0CQAB2AcAAwDtAg4AAtcHAAEDANgCJAAA1gcBAQC0CQAC7gMA2QISAAC0CQUBBUUwNTAwAAEfBQABAAUDANgCJAAA1gcBAQG5CQAB1wcA8QMApmEmAADdBwAAAvEDAKZhJgAAtAkFAbcOQSBtdXRhYmxlIHZhcmlhYmxlIGlzIHVzZWQgYnV0IGl0IGlzIGFscmVhZHkgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMQpmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikgewogICAgLy8gQWN0aW9ucyB3aGljaCByZXF1aXJlIHVuaXF1ZSBhY2Nlc3MKfQoKZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7CiAgICAvLyBBY3Rpb25zIHdoaWNoIHJlcXVpcmUgdW5pcXVlIGFjY2Vzcwp9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOyAvLyBlcnJvcjogY2Fubm90IGJvcnJvdyBgKmFgIGFzIG11dGFibGUgYmVjYXVzZSBwcmV2aW91cwogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY2xvc3VyZSByZXF1aXJlcyB1bmlxdWUgYWNjZXNzLgogICAgYmFyKCk7Cn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgbXV0YWJsZSB2YXJpYWJsZSBpcyB1c2VkIHdoaWxlIGl0IGlzIHN0aWxsIGNhcHR1cmVkCmJ5IGEgY2xvc3VyZS4gQmVjYXVzZSB0aGUgY2xvc3VyZSBoYXMgYm9ycm93ZWQgdGhlIHZhcmlhYmxlLCBpdCBpcyBub3QgYXZhaWxhYmxlCnVudGlsIHRoZSBjbG9zdXJlIGdvZXMgb3V0IG9mIHNjb3BlLgoKTm90ZSB0aGF0IGEgY2FwdHVyZSB3aWxsIGVpdGhlciBtb3ZlIG9yIGJvcnJvdyBhIHZhcmlhYmxlLCBidXQgaW4gdGhpcwpzaXR1YXRpb24sIHRoZSBjbG9zdXJlIGlzIGJvcnJvd2luZyB0aGUgdmFyaWFibGUuIFRha2UgYSBsb29rIGF0IHRoZSBjaGFwdGVyCm9uIFtDYXB0dXJpbmddW2NhcHR1cmluZ10gaW4gUnVzdCBCeSBFeGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKW2NhcHR1cmluZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3J1c3QtYnktZXhhbXBsZS9mbi9jbG9zdXJlcy9jYXB0dXJlLmh0bWwKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIGZpbmlzaCB1c2luZyB0aGUgY2xvc3VyZSBiZWZvcmUgdXNpbmcgdGhlIGNhcHR1cmVkCnZhcmlhYmxlOgoKYGBgCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgYmFyKCk7CiAgICAvLyBib3Jyb3cgb24gYGFgIGVuZHMuCiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7IC8vIG9rIQp9CmBgYAoKT3IgeW91IGNhbiBwYXNzIHRoZSB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlciB0byB0aGUgY2xvc3VyZToKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGJhciA9IHxzOiAmbXV0IGkzMnwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKHMpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOwogICAgYmFyKGEpOwp9CmBgYAoKSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgY2xvc3VyZSBsYXRlcjoKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7CiAgICBsZXQgbXV0IGJhciA9IHx8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShhKQogICAgfTsKICAgIGJhcigpOwp9CmBgYAoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cOAAEAtw7xAwCmYSYAANwHAAIHAN0HAQADAO0CDgAA2wcCBQEEU29tZQEBALQJAAHcBwADAO0CDgAC2wcAAQMA2AIkAADaBwEBALQJAALwAwDZAhIAALQJBQEFRTA1MDEAAR8FAAEABQMA2AIkAADaBwEBAbkJAAHbBwDzAwDVYSYAAOEHAAAC8wMA1WEmAAC0CQUBuAZBIHZhcmlhYmxlIGFscmVhZHkgYm9ycm93ZWQgYXMgaW1tdXRhYmxlIHdhcyBib3Jyb3dlZCBhcyBtdXRhYmxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMgpmbiBiYXIoeDogJm11dCBpMzIpIHt9CmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgbGV0IHkgPSAmYTsgLy8gYSBpcyBib3Jyb3dlZCBhcyBpbW11dGFibGUuCiAgICBiYXIoYSk7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGAqYWAgYXMgbXV0YWJsZSBiZWNhdXNlIGBhYCBpcyBhbHNvIGJvcnJvd2VkCiAgICAgICAgICAgIC8vICAgICAgICBhcyBpbW11dGFibGUKICAgIHByaW50bG4hKCJ7fSIsIHkpOwp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGVuc3VyZSB0aGF0IHlvdSBkb24ndCBoYXZlIGFueSBvdGhlciByZWZlcmVuY2VzIHRvIHRoZQp2YXJpYWJsZSBiZWZvcmUgdHJ5aW5nIHRvIGFjY2VzcyBpdCBtdXRhYmx5OgoKYGBgCmZuIGJhcih4OiAmbXV0IGkzMikge30KZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBiYXIoYSk7CiAgICBsZXQgeSA9ICZhOyAvLyBvayEKICAgIHByaW50bG4hKCJ7fSIsIHkpOwp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3+4BgABALgG8wMA1WEmAADgBwACBwDhBwEAAwDtAg4AAN8HAgUBBFNvbWUBAQC0CQAB4AcAAwDtAg4AAt8HAAEDANgCJAAA3gcBAQC0CQAC8gMA2QISAAC0CQUBBUUwNTAyAAEfBQABAAUDANgCJAAA3gcBAQG5CQAB3wcA9QMAhGImAADlBwAAAvUDAIRiJgAAtAkFAfULQSB2YWx1ZSB3YXMgdXNlZCBhZnRlciBpdCB3YXMgbXV0YWJseSBib3Jyb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDMKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgLy8gQ3JlYXRlIGEgbXV0YWJsZSBib3Jyb3cgb2YgYHZhbHVlYC4KICAgIGxldCBib3Jyb3cgPSAmbXV0IHZhbHVlOwogICAgbGV0IF9zdW0gPSB2YWx1ZSArIDE7IC8vIGVycm9yOiBjYW5ub3QgdXNlIGB2YWx1ZWAgYmVjYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpdCB3YXMgbXV0YWJseSBib3Jyb3dlZAogICAgcHJpbnRsbiEoInt9IiwgYm9ycm93KTsKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgYHZhbHVlYCBpcyBtdXRhYmx5IGJvcnJvd2VkIGJ5IGBib3Jyb3dgIGFuZCBjYW5ub3QgYmUKdXNlZCB0byBjYWxjdWxhdGUgYHN1bWAuIFRoaXMgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgdGhpcyB3b3VsZCB2aW9sYXRlClJ1c3QncyBtdXRhYmlsaXR5IHJ1bGVzLgoKWW91IGNhbiBmaXggdGhpcyBlcnJvciBieSBmaW5pc2hpbmcgdXNpbmcgdGhlIGJvcnJvdyBiZWZvcmUgdGhlIG5leHQgdXNlIG9mCnRoZSB2YWx1ZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IG11dCB2YWx1ZSA9IDM7CiAgICBsZXQgYm9ycm93ID0gJm11dCB2YWx1ZTsKICAgIHByaW50bG4hKCJ7fSIsIGJvcnJvdyk7CiAgICAvLyBUaGUgYmxvY2sgaGFzIGVuZGVkIGFuZCB3aXRoIGl0IHRoZSBib3Jyb3cuCiAgICAvLyBZb3UgY2FuIG5vdyB1c2UgYHZhbHVlYCBhZ2Fpbi4KICAgIGxldCBfc3VtID0gdmFsdWUgKyAxOwp9CmBgYAoKT3IgYnkgY2xvbmluZyBgdmFsdWVgIGJlZm9yZSBib3Jyb3dpbmcgaXQ6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgLy8gV2UgY2xvbmUgYHZhbHVlYCwgY3JlYXRpbmcgYSBjb3B5LgogICAgbGV0IHZhbHVlX2Nsb25lZCA9IHZhbHVlLmNsb25lKCk7CiAgICAvLyBUaGUgbXV0YWJsZSBib3Jyb3cgaXMgYSByZWZlcmVuY2UgdG8gYHZhbHVlYCBhbmQKICAgIC8vIG5vdCB0byBgdmFsdWVfY2xvbmVkYC4uLgogICAgbGV0IGJvcnJvdyA9ICZtdXQgdmFsdWU7CiAgICAvLyAuLi4gd2hpY2ggbWVhbnMgd2UgY2FuIHN0aWxsIHVzZSBgdmFsdWVfY2xvbmVkYCwKICAgIGxldCBfc3VtID0gdmFsdWVfY2xvbmVkICsgMTsKICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBib3Jyb3cgb25seSBlbmRzIGhlcmUuCiAgICBwcmludGxuISgie30iLCBib3Jyb3cpOwp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgAY////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////D/ULAAEA9Qv1AwCEYiYAAOQHAAIHAOUHAQADAO0CDgAA4wcCBQEEU29tZQEBALQJAAHkBwADAO0CDgAC4wcAAQMA2AIkAADiBwEBALQJAAL0AwDZAhIAALQJBQEFRTA1MDMAAR8FAAEABQMA2AIkAADiBwEBAbkJAAHjBwD3AwCzYiYAAOkHAAAC9wMAs2ImAAC0CQUB+REjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtb3ZlIGEgYm9ycm93ZWQgdmFyaWFibGUgaW50byBhCmNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9udW0ubnVtKTsKICAgICAgICAvLyBlcnJvcjogY2Fubm90IG1vdmUgYGZhbmN5X251bWAgaW50byBjbG9zdXJlIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKICAgIH07CgogICAgeCgpOwogICAgcHJpbnRsbiEoIm1haW4gZnVuY3Rpb246IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgZmFuY3lfbnVtYCBpcyBib3Jyb3dlZCBieSBgZmFuY3lfcmVmYCBhbmQgc28gY2Fubm90IGJlIG1vdmVkIGludG8KdGhlIGNsb3N1cmUgYHhgLiBUaGVyZSBpcyBubyB3YXkgdG8gbW92ZSBhIHZhbHVlIGludG8gYSBjbG9zdXJlIHdoaWxlIGl0IGlzCmJvcnJvd2VkLCBhcyB0aGF0IHdvdWxkIGludmFsaWRhdGUgdGhlIGJvcnJvdy4KCklmIHRoZSBjbG9zdXJlIGNhbid0IG91dGxpdmUgdGhlIHZhbHVlIGJlaW5nIG1vdmVkLCB0cnkgdXNpbmcgYSByZWZlcmVuY2UKcmF0aGVyIHRoYW4gbW92aW5nOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGZhbmN5X3JlZiBpcyB1c2FibGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3QgbW92ZSBgZmFuY3lfbnVtYAogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9yZWYubnVtKTsKICAgIH07CgogICAgeCgpOwoKICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X251bS5udW0pOwp9CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCBhbmQgdGhlbiBtb3ZlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZgp0aGUgYm9ycm93IHVzaW5nIGEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CgogICAgewogICAgICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwogICAgICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X3JlZi5udW0pOwogICAgICAgIC8vIGBmYW5jeV9yZWZgIGdvZXMgb3V0IG9mIHNjb3BlIGhlcmUKICAgIH0KCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGBmYW5jeV9udW1gIGNhbiBiZSBtb3ZlZCBub3cgKG5vIG1vcmUgcmVmZXJlbmNlcyBleGlzdCkKICAgICAgICBwcmludGxuISgiY2hpbGQgZnVuY3Rpb246IHt9IiwgZmFuY3lfbnVtLm51bSk7CiAgICB9OwoKICAgIHgoKTsKfQpgYGAKCklmIHRoZSBsaWZldGltZSBvZiBhIHJlZmVyZW5jZSBpc24ndCBlbm91Z2gsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgdGhyZWFkaW5nLApjb25zaWRlciB1c2luZyBhbiBgQXJjYCB0byBjcmVhdGUgYSByZWZlcmVuY2UtY291bnRlZCB2YWx1ZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpBcmM7CnVzZSBzdGQ6OnRocmVhZDsKCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X3JlZjEgPSBBcmM6Om5ldyhGYW5jeU51bSB7IG51bTogNSB9KTsKICAgIGxldCBmYW5jeV9yZWYyID0gZmFuY3lfcmVmMS5jbG9uZSgpOwoKICAgIGxldCB4ID0gdGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICAvLyBgZmFuY3lfcmVmMWAgY2FuIGJlIG1vdmVkIGFuZCBoYXMgYSBgJ3N0YXRpY2AgbGlmZXRpbWUKICAgICAgICBwcmludGxuISgiY2hpbGQgdGhyZWFkOiB7fSIsIGZhbmN5X3JlZjEubnVtKTsKICAgIH0pOwoKICAgIHguam9pbigpLmV4cGVjdCgiY2hpbGQgdGhyZWFkIHNob3VsZCBmaW5pc2giKTsKICAgIHByaW50bG4hKCJtYWluIHRocmVhZDoge30iLCBmYW5jeV9yZWYyLm51bSk7Cn0KYGBgCgAk////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5EQABAPkR9wMAs2ImAADoBwACBwDpBwEAAwDtAg4AAOcHAgUBBFNvbWUBAQC0CQAB6AcAAwDtAg4AAucHAAEDANgCJAAA5gcBAQC0CQAC9gMA2QISAAC0CQUBBUUwNTA0AAEfBQABAAUDANgCJAAA5gcBAQG5CQAB5wcA+QMA4mImAADtBwAAAvkDAOJiJgAAtAkFAYcMQSB2YWx1ZSB3YXMgbW92ZWQgb3V0IHdoaWxlIGl0IHdhcyBzdGlsbCBib3Jyb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDUKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CiAgICBsZXQgX3JlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgZWF0KHgpOwogICAgYm9ycm93KF9yZWZfdG9fdmFsKTsKfQpgYGAKCkhlcmUsIHRoZSBmdW5jdGlvbiBgZWF0YCB0YWtlcyBvd25lcnNoaXAgb2YgYHhgLiBIb3dldmVyLApgeGAgY2Fubm90IGJlIG1vdmVkIGJlY2F1c2UgdGhlIGJvcnJvdyB0byBgX3JlZl90b192YWxgCm5lZWRzIHRvIGxhc3QgdGlsbCB0aGUgZnVuY3Rpb24gYGJvcnJvd2AuClRvIGZpeCB0aGF0IHlvdSBjYW4gZG8gYSBmZXcgZGlmZmVyZW50IHRoaW5nczoKCiogVHJ5IHRvIGF2b2lkIG1vdmluZyB0aGUgdmFyaWFibGUuCiogUmVsZWFzZSBib3Jyb3cgYmVmb3JlIG1vdmUuCiogSW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgb24gdGhlIHR5cGUuCgpFeGFtcGxlczoKCmBgYApzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6ICZWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CgogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgZWF0KCZ4KTsgLy8gcGFzcyBieSByZWZlcmVuY2UsIGlmIGl0J3MgcG9zc2libGUKICAgIGJvcnJvdyhyZWZfdG9fdmFsKTsKfQpgYGAKCk9yOgoKYGBgCnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogVmFsdWUpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBWYWx1ZXt9OwoKICAgIGxldCByZWZfdG9fdmFsOiAmVmFsdWUgPSAmeDsKICAgIGJvcnJvdyhyZWZfdG9fdmFsKTsKICAgIC8vIHJlZl90b192YWwgaXMgbm8gbG9uZ2VyIHVzZWQuCiAgICBlYXQoeCk7Cn0KYGBgCgpPcjoKCmBgYAojW2Rlcml2ZShDbG9uZSwgQ29weSldIC8vIGltcGxlbWVudCBDb3B5IHRyYWl0CnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogVmFsdWUpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBWYWx1ZXt9OwogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgZWF0KHgpOyAvLyBpdCB3aWxsIGJlIGNvcGllZCBoZXJlLgogICAgYm9ycm93KHJlZl90b192YWwpOwp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgAZ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8Bf4cMAAEAhwz5AwDiYiYAAOwHAAIHAO0HAQADAO0CDgAA6wcCBQEEU29tZQEBALQJAAHsBwADAO0CDgAC6wcAAQMA2AIkAADqBwEBALQJAAL4AwDZAhIAALQJBQEFRTA1MDUAAR8FAAEABQMA2AIkAADqBwEBAbkJAAHrBwD7AwCRYyYAAPEHAAAC+wMAkWMmAAC0CQUB9gtBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGFzc2lnbiB0byBhIGJvcnJvd2VkIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNgpzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwpsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKLy8gZXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gYGZhbmN5X251bWAgYmVjYXVzZSBpdCBpcyBib3Jyb3dlZAoKcHJpbnRsbiEoIk51bToge30sIFJlZjoge30iLCBmYW5jeV9udW0ubnVtLCBmYW5jeV9yZWYubnVtKTsKYGBgCgpCZWNhdXNlIGBmYW5jeV9yZWZgIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGBmYW5jeV9udW1gLCBgZmFuY3lfbnVtYCBjYW4ndApiZSBhc3NpZ25lZCB0byBhIG5ldyB2YWx1ZSBhcyBpdCB3b3VsZCBpbnZhbGlkYXRlIHRoZSByZWZlcmVuY2UuCgpBbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gbW92ZSBvdXQgb2YgYGZhbmN5X251bWAgaW50byBhIHNlY29uZCBgZmFuY3lfbnVtYDoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwpsZXQgbW92ZWRfbnVtID0gZmFuY3lfbnVtOwpmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNiB9OwoKcHJpbnRsbiEoIk51bToge30sIE1vdmVkIG51bToge30iLCBmYW5jeV9udW0ubnVtLCBtb3ZlZF9udW0ubnVtKTsKYGBgCgpJZiB0aGUgdmFsdWUgaGFzIHRvIGJlIGJvcnJvd2VkLCB0cnkgbGltaXRpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBib3Jyb3cgdXNpbmcKYSBzY29wZWQgYmxvY2s6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKCnsKICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwogICAgcHJpbnRsbiEoIlJlZjoge30iLCBmYW5jeV9yZWYubnVtKTsKfQoKLy8gV29ya3MgYmVjYXVzZSBgZmFuY3lfcmVmYCBpcyBubyBsb25nZXIgaW4gc2NvcGUKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKcHJpbnRsbiEoIk51bToge30iLCBmYW5jeV9udW0ubnVtKTsKYGBgCgpPciBieSBtb3ZpbmcgdGhlIHJlZmVyZW5jZSBpbnRvIGEgZnVuY3Rpb246CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmZuIHByaW50X2ZhbmN5X3JlZihmYW5jeV9yZWY6ICZGYW5jeU51bSl7CiAgICBwcmludGxuISgiUmVmOiB7fSIsIGZhbmN5X3JlZi5udW0pOwp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CgpwcmludF9mYW5jeV9yZWYoJmZhbmN5X251bSk7CgovLyBXb3JrcyBiZWNhdXNlIGZ1bmN0aW9uIGJvcnJvdyBoYXMgZW5kZWQKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKcHJpbnRsbiEoIk51bToge30iLCBmYW5jeV9udW0ubnVtKTsKYGBgCgAY////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////H/YLAAEA9gv7AwCRYyYAAPAHAAIHAPEHAQADAO0CDgAA7wcCBQEEU29tZQEBALQJAAHwBwADAO0CDgAC7wcAAQMA2AIkAADuBwEBALQJAAL6AwDZAhIAALQJBQEFRTA1MDYAAR8FAAEABQMA2AIkAADuBwEBAbkJAAHvBwD9AwDAYyYAAPUHAAAC/QMAwGMmAAC0CQUBuxVBIGJvcnJvd2VkIHZhbHVlIHdhcyBtb3ZlZCBvdXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwoKICAgIHguYm9ycm93KCkubm90aGluZ19pc190cnVlKCk7IC8vIGVycm9yOiBjYW5ub3QgbW92ZSBvdXQgb2YgYm9ycm93ZWQgY29udGVudAp9CmBgYAoKSGVyZSwgdGhlIGBub3RoaW5nX2lzX3RydWVgIG1ldGhvZCB0YWtlcyB0aGUgb3duZXJzaGlwIG9mIGBzZWxmYC4gSG93ZXZlciwKYHNlbGZgIGNhbm5vdCBiZSBtb3ZlZCBiZWNhdXNlIGAuYm9ycm93KClgIG9ubHkgcHJvdmlkZXMgYW4gYCZUaGVEYXJrS25pZ2h0YCwKd2hpY2ggaXMgYSBib3Jyb3cgb2YgdGhlIGNvbnRlbnQgb3duZWQgYnkgdGhlIGBSZWZDZWxsYC4gVG8gZml4IHRoaXMgZXJyb3IsCnlvdSBoYXZlIHRocmVlIGNob2ljZXM6CgoqIFRyeSB0byBhdm9pZCBtb3ZpbmcgdGhlIHZhcmlhYmxlLgoqIFNvbWVob3cgcmVjbGFpbSB0aGUgb3duZXJzaGlwLgoqIEltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IG9uIHRoZSB0eXBlLgoKVGhpcyBjYW4gYWxzbyBoYXBwZW4gd2hlbiB1c2luZyBhIHR5cGUgaW1wbGVtZW50aW5nIGBGbmAgb3IgYEZuTXV0YCwgYXMgbmVpdGhlcgphbGxvd3MgbW92aW5nIG91dCBvZiB0aGVtICh0aGV5IHVzdWFsbHkgcmVwcmVzZW50IGNsb3N1cmVzIHdoaWNoIGNhbiBiZSBjYWxsZWQKbW9yZSB0aGFuIG9uY2UpLiBNdWNoIG9mIHRoZSB0ZXh0IGZvbGxvd2luZyBhcHBsaWVzIGVxdWFsbHkgd2VsbCB0byBub24tYEZuT25jZWAKY2xvc3VyZSBib2RpZXMuCgpFeGFtcGxlczoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKCZzZWxmKSB7fSAvLyBGaXJzdCBjYXNlLCB3ZSBkb24ndCB0YWtlIG93bmVyc2hpcAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKICAgIGxldCB4ID0geC5pbnRvX2lubmVyKCk7IC8vIHdlIGdldCBiYWNrIG93bmVyc2hpcAoKICAgIHgubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gd2UgaW1wbGVtZW50IHRoZSBDb3B5IHRyYWl0CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpNb3ZpbmcgYSBtZW1iZXIgb3V0IG9mIGEgbXV0YWJseSBib3Jyb3dlZCBzdHJ1Y3Qgd2lsbCBhbHNvIGNhdXNlIEUwNTA3IGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpzdHJ1Y3QgQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgY2F2ZSA9IEJhdGNhdmUgewogICAgICAgIGtuaWdodDogVGhlRGFya0tuaWdodAogICAgfTsKICAgIGxldCBib3Jyb3dlZCA9ICZtdXQgY2F2ZTsKCiAgICBib3Jyb3dlZC5rbmlnaHQubm90aGluZ19pc190cnVlKCk7IC8vIEUwNTA3Cn0KYGBgCgpJdCBpcyBmaW5lIG9ubHkgaWYgeW91IHB1dCBzb21ldGhpbmcgYmFjay4gYG1lbTo6cmVwbGFjZWAgY2FuIGJlIHVzZWQgZm9yIHRoYXQ6CgpgYGAKIyBzdHJ1Y3QgVGhlRGFya0tuaWdodDsKIyBpbXBsIFRoZURhcmtLbmlnaHQgeyBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30gfQojIHN0cnVjdCBCYXRjYXZlIHsga25pZ2h0OiBUaGVEYXJrS25pZ2h0IH0KdXNlIHN0ZDo6bWVtOwoKbGV0IG11dCBjYXZlID0gQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfTsKbGV0IGJvcnJvd2VkID0gJm11dCBjYXZlOwoKbWVtOjpyZXBsYWNlKCZtdXQgYm9ycm93ZWQua25pZ2h0LCBUaGVEYXJrS25pZ2h0KS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgAr////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8HuxUAAQC7Ff0DAMBjJgAA9AcAAgcA9QcBAAMA7QIOAADzBwIFAQRTb21lAQEAtAkAAfQHAAMA7QIOAALzBwABAwDYAiQAAPIHAQEAtAkAAvwDANkCEgAAtAkFAQVFMDUwNwABHwUAAQAFAwDYAiQAAPIHAQEBuQkAAfMHAP8DAO9jJgAA+QcAAAL/AwDvYyYAALQJBQHuCEEgdmFsdWUgd2FzIG1vdmVkIG91dCBvZiBhIG5vbi1jb3B5IGZpeGVkLXNpemUgYXJyYXkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA4CnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIGxldCBfdmFsdWUgPSBhcnJheVswXTsgLy8gZXJyb3I6IGNhbm5vdCBtb3ZlIG91dCBvZiB0eXBlIGBbTm9uQ29weTsgMV1gLAogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYSBub24tY29weSBmaXhlZC1zaXplIGFycmF5Cn0KYGBgCgpUaGUgZmlyc3QgZWxlbWVudCB3YXMgbW92ZWQgb3V0IG9mIHRoZSBhcnJheSwgYnV0IHRoaXMgaXMgbm90CnBvc3NpYmxlIGJlY2F1c2UgYE5vbkNvcHlgIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0LgoKQ29uc2lkZXIgYm9ycm93aW5nIHRoZSBlbGVtZW50IGluc3RlYWQgb2YgbW92aW5nIGl0OgoKYGBgCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIGxldCBfdmFsdWUgPSAmYXJyYXlbMF07IC8vIEJvcnJvd2luZyBpcyBhbGxvd2VkLCB1bmxpa2UgbW92aW5nLgp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgeW91ciB0eXBlIGltcGxlbWVudHMgYENsb25lYCBhbmQgeW91IG5lZWQgdG8gb3duIHRoZSB2YWx1ZSwKY29uc2lkZXIgYm9ycm93aW5nIGFuZCB0aGVuIGNsb25pbmc6CgpgYGAKI1tkZXJpdmUoQ2xvbmUpXQpzdHJ1Y3QgTm9uQ29weTsKCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXkgPSBbTm9uQ29weTsgMV07CiAgICAvLyBOb3cgeW91IGNhbiBjbG9uZSB0aGUgYXJyYXkgZWxlbWVudC4KICAgIGxldCBfdmFsdWUgPSBhcnJheVswXS5jbG9uZSgpOwp9CmBgYAoKSWYgeW91IHJlYWxseSB3YW50IHRvIG1vdmUgdGhlIHZhbHVlIG91dCwgeW91IGNhbiB1c2UgYSBkZXN0cnVjdHVyaW5nIGFycmF5CnBhdHRlcm4gdG8gbW92ZSBpdDoKCmBgYApzdHJ1Y3QgTm9uQ29weTsKCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXkgPSBbTm9uQ29weTsgMV07CiAgICAvLyBEZXN0cnVjdHVyaW5nIHRoZSBhcnJheQogICAgbGV0IFtfdmFsdWVdID0gYXJyYXk7Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8P7ggAAQDuCP8DAO9jJgAA+AcAAgcA+QcBAAMA7QIOAAD3BwIFAQRTb21lAQEAtAkAAfgHAAMA7QIOAAL3BwABAwDYAiQAAPYHAQEAtAkAAv4DANkCEgAAtAkFAQVFMDUwOAABHwUAAQAFAwDYAiQAAPYHAQEBuQkAAfcHAIEEAJ5kJgAA/QcAAAKBBACeZCYAALQJBQH+ElRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vdmUgb3V0IG9mIGEgdmFsdWUgd2hvc2UgdHlwZQppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA5CnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgZmFuY3lfZmllbGQgPSBkcm9wX3N0cnVjdC5mYW5jeTsgLy8gRXJyb3IgRTA1MDkKICAgIHByaW50bG4hKCJGYW5jeToge30iLCBmYW5jeV9maWVsZC5udW0pOwogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9zdHJ1Y3QuZHJvcCgpYCBhcyBkcm9wX3N0cnVjdCBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoKSGVyZSwgd2UgdHJpZWQgdG8gbW92ZSBhIGZpZWxkIG91dCBvZiBhIHN0cnVjdCBvZiB0eXBlIGBEcm9wU3RydWN0YCB3aGljaAppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuIEhvd2V2ZXIsIGEgc3RydWN0IGNhbm5vdCBiZSBkcm9wcGVkIGlmIG9uZSBvcgptb3JlIG9mIGl0cyBmaWVsZHMgaGF2ZSBiZWVuIG1vdmVkLgoKU3RydWN0cyBpbXBsZW1lbnRpbmcgdGhlIGBEcm9wYCB0cmFpdCBoYXZlIGFuIGltcGxpY2l0IGRlc3RydWN0b3IgdGhhdCBnZXRzCmNhbGxlZCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLiBUaGlzIGRlc3RydWN0b3IgbWF5IHVzZSB0aGUgZmllbGRzIG9mIHRoZQpzdHJ1Y3QsIHNvIG1vdmluZyBvdXQgb2YgdGhlIHN0cnVjdCBjb3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gcnVuIHRoZQpkZXN0cnVjdG9yLiBUaGVyZWZvcmUsIHdlIG11c3QgdGhpbmsgb2YgYWxsIHZhbHVlcyB3aG9zZSB0eXBlIGltcGxlbWVudHMgdGhlCmBEcm9wYCB0cmFpdCBhcyBzaW5nbGUgdW5pdHMgd2hvc2UgZmllbGRzIGNhbm5vdCBiZSBtb3ZlZC4KClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IGNyZWF0aW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3QsCmVudW0sIG9yIHR1cGxlIHVzaW5nIHRoZSBgcmVmYCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgcmVmIGZhbmN5X2ZpZWxkID0gZHJvcF9zdHJ1Y3QuZmFuY3k7IC8vIE5vIG1vcmUgZXJyb3JzIQogICAgcHJpbnRsbiEoIkZhbmN5OiB7fSIsIGZhbmN5X2ZpZWxkLm51bSk7CiAgICAvLyBpbXBsaWNpdCBjYWxsIHRvIGBkcm9wX3N0cnVjdC5kcm9wKClgIGFzIGRyb3Bfc3RydWN0IGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCgpOb3RlIHRoYXQgdGhpcyB0ZWNobmlxdWUgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgYXJtcyBvZiBhIG1hdGNoIGV4cHJlc3Npb246CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdXNpemUKfQoKZW51bSBEcm9wRW51bSB7CiAgICBGYW5jeShGYW5jeU51bSkKfQoKaW1wbCBEcm9wIGZvciBEcm9wRW51bSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIC8vIERlc3RydWN0IERyb3BFbnVtLCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgLy8gQ3JlYXRlcyBhbmQgZW51bSBvZiB0eXBlIGBEcm9wRW51bWAsIHdoaWNoIGltcGxlbWVudHMgYERyb3BgCiAgICBsZXQgZHJvcF9lbnVtID0gRHJvcEVudW06OkZhbmN5KEZhbmN5TnVte251bTogMTB9KTsKICAgIG1hdGNoIGRyb3BfZW51bSB7CiAgICAgICAgLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5zaWRlIG9mIGBEcm9wRW51bTo6RmFuY3lgCiAgICAgICAgRHJvcEVudW06OkZhbmN5KHJlZiBmYW5jeV9maWVsZCkgPT4gLy8gTm8gZXJyb3IhCiAgICAgICAgICAgIHByaW50bG4hKCJJdCB3YXMgZmFuY3ktLSB7fSEiLCBmYW5jeV9maWVsZC5udW0pLAogICAgfQogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9lbnVtLmRyb3AoKWAgYXMgZHJvcF9lbnVtIGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCgAm////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P/4SAAEA/hKBBACeZCYAAPwHAAIHAP0HAQADAO0CDgAA+wcCBQEEU29tZQEBALQJAAH8BwADAO0CDgAC+wcAAQMA2AIkAAD6BwEBALQJAAKABADZAhIAALQJBQEFRTA1MDkAAR8FAAEABQMA2AIkAAD6BwEBAbkJAAH7BwCDBADNZCYAAIEIAAACgwQAzWQmAAC0CQUB4wRUaGUgbWF0Y2hlZCB2YWx1ZSB3YXMgYXNzaWduZWQgaW4gYSBtYXRjaCBndWFyZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTAKbGV0IG11dCB4ID0gU29tZSgwKTsKbWF0Y2ggeCB7CiAgICBOb25lID0+IHt9CiAgICBTb21lKF8pIGlmIHsgeCA9IE5vbmU7IGZhbHNlIH0gPT4ge30gLy8gZXJyb3IhCiAgICBTb21lKF8pID0+IHt9Cn0KYGBgCgpXaGVuIG1hdGNoaW5nIG9uIGEgdmFyaWFibGUgaXQgY2Fubm90IGJlIG11dGF0ZWQgaW4gdGhlIG1hdGNoIGd1YXJkcywgYXMgdGhpcwpjb3VsZCBjYXVzZSB0aGUgbWF0Y2ggdG8gYmUgbm9uLWV4aGF1c3RpdmUuCgpIZXJlIGV4ZWN1dGluZyBgeCA9IE5vbmVgIHdvdWxkIG1vZGlmeSB0aGUgdmFsdWUgYmVpbmcgbWF0Y2hlZCBhbmQgcmVxdWlyZSB1cwp0byBnbyAiYmFjayBpbiB0aW1lIiB0byB0aGUgYE5vbmVgIGFybS4gVG8gZml4IGl0LCBjaGFuZ2UgdGhlIHZhbHVlIGluIHRoZSBtYXRjaAphcm06CgpgYGAKbGV0IG11dCB4ID0gU29tZSgwKTsKbWF0Y2ggeCB7CiAgICBOb25lID0+IHt9CiAgICBTb21lKF8pID0+IHsKICAgICAgICB4ID0gTm9uZTsgLy8gb2shCiAgICB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////3/jBAABAOMEgwQAzWQmAACACAACBwCBCAEAAwDtAg4AAP8HAgUBBFNvbWUBAQC0CQABgAgAAwDtAg4AAv8HAAEDANgCJAAA/gcBAQC0CQACggQA2QISAAC0CQUBBUUwNTEwAAEfBQABAAUDANgCJAAA/gcBAQG5CQAB/wcAhQQA/GQmAACFCAAAAoUEAPxkJgAAtAkFAfIESW52YWxpZCBtb25vbW9ycGhpemF0aW9uIG9mIGFuIGludHJpbnNpYyBmdW5jdGlvbiB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTEKIyFbZmVhdHVyZShwbGF0Zm9ybV9pbnRyaW5zaWNzKV0KCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX2FkZDxUPihhOiBULCBiOiBUKSAtPiBUOwp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgc2ltZF9hZGQoMCwgMSk7IH0KICAgIC8vIGVycm9yOiBpbnZhbGlkIG1vbm9tb3JwaGl6YXRpb24gb2YgYHNpbWRfYWRkYCBpbnRyaW5zaWMKfQpgYGAKClRoZSBnZW5lcmljIHR5cGUgaGFzIHRvIGJlIGEgU0lNRCB0eXBlLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KIyFbZmVhdHVyZShwbGF0Zm9ybV9pbnRyaW5zaWNzKV0KCiNbcmVwcihzaW1kKV0KI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQpzdHJ1Y3QgaTMyeDIoaTMyLCBpMzIpOwoKZXh0ZXJuICJwbGF0Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfYWRkPFQ+KGE6IFQsIGI6IFQpIC0+IFQ7Cn0KCnVuc2FmZSB7IHNpbWRfYWRkKGkzMngyKDAsIDApLCBpMzJ4MigxLCAyKSk7IH0gLy8gb2shCmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8B8gQAAQDyBIUEAPxkJgAAhAgAAgcAhQgBAAMA7QIOAACDCAIFAQRTb21lAQEAtAkAAYQIAAMA7QIOAAKDCAABAwDYAiQAAIIIAQEAtAkAAoQEANkCEgAAtAkFAQVFMDUxMQABHwUAAQAFAwDYAiQAAIIIAQEBuQkAAYMIAIcEAKtlJgAAiQgAAAKHBACrZSYAALQJBQGaBFRyYW5zbXV0ZSB3aXRoIHR3byBkaWZmZXJlbnRseSBzaXplZCB0eXBlcyB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxMgpmbiB0YWtlc191OChfOiB1OCkge30KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyB0YWtlc191OCg6OnN0ZDo6bWVtOjp0cmFuc211dGUoMHUxNikpOyB9CiAgICAvLyBlcnJvcjogY2Fubm90IHRyYW5zbXV0ZSBiZXR3ZWVuIHR5cGVzIG9mIGRpZmZlcmVudCBzaXplcywKICAgIC8vICAgICAgICBvciBkZXBlbmRlbnRseS1zaXplZCB0eXBlcwp9CmBgYAoKUGxlYXNlIHVzZSB0eXBlcyB3aXRoIHNhbWUgc2l6ZSBvciB1c2UgdGhlIGV4cGVjdGVkIHR5cGUgZGlyZWN0bHkuIEV4YW1wbGU6CgpgYGAKZm4gdGFrZXNfdTgoXzogdTgpIHt9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgdGFrZXNfdTgoOjpzdGQ6Om1lbTo6dHJhbnNtdXRlKDBpOCkpOyB9IC8vIG9rIQogICAgLy8gb3I6CiAgICB1bnNhZmUgeyB0YWtlc191OCgwdTgpOyB9IC8vIG9rIQp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oEAAEAmgSHBACrZSYAAIgIAAIHAIkIAQADAO0CDgAAhwgCBQEEU29tZQEBALQJAAGICAADAO0CDgAChwgAAQMA2AIkAACGCAEBALQJAAKGBADZAhIAALQJBQEFRTA1MTIAAR8FAAEABQMA2AIkAACGCAEBAbkJAAGHCACJBADaZSYAAI0IAAACiQQA2mUmAAC0CQUBpQVBIHJlZmVyZW5jZSB0byBhIGxvY2FsIHZhcmlhYmxlIHdhcyByZXR1cm5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTUKZm4gZ2V0X2RhbmdsaW5nX3JlZmVyZW5jZSgpIC0+ICYnc3RhdGljIGkzMiB7CiAgICBsZXQgeCA9IDA7CiAgICAmeAp9CmBgYAoKYGBgY29tcGlsZV9mYWlsLEUwNTE1CnVzZSBzdGQ6OnNsaWNlOjpJdGVyOwpmbiBnZXRfZGFuZ2xpbmdfaXRlcmF0b3I8J2E+KCkgLT4gSXRlcjwnYSwgaTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2Lml0ZXIoKQp9CmBgYAoKTG9jYWwgdmFyaWFibGVzLCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3JhcmllcyBhcmUgYWxsIGRyb3BwZWQgYmVmb3JlIHRoZQplbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkuIFNvIGEgcmVmZXJlbmNlIHRvIHRoZW0gY2Fubm90IGJlIHJldHVybmVkLgoKQ29uc2lkZXIgcmV0dXJuaW5nIGFuIG93bmVkIHZhbHVlIGluc3RlYWQ6CgpgYGAKdXNlIHN0ZDo6dmVjOjpJbnRvSXRlcjsKCmZuIGdldF9pbnRlZ2VyKCkgLT4gaTMyIHsKICAgIGxldCB4ID0gMDsKICAgIHgKfQoKZm4gZ2V0X293bmVkX2l0ZXJhdG9yKCkgLT4gSW50b0l0ZXI8aTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2LmludG9faXRlcigpCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////A6UFAAEApQWJBADaZSYAAIwIAAIHAI0IAQADAO0CDgAAiwgCBQEEU29tZQEBALQJAAGMCAADAO0CDgACiwgAAQMA2AIkAACKCAEBALQJAAKIBADZAhIAALQJBQEFRTA1MTUAAR8FAAEABQMA2AIkAACKCAEBAbkJAAGLCACLBACJZiYAAJEIAAACiwQAiWYmAAC0CQUB7wFUaGUgYHR5cGVvZmAga2V5d29yZCBpcyBjdXJyZW50bHkgcmVzZXJ2ZWQgYnV0IHVuaW1wbGVtZW50ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE2CmZuIG1haW4oKSB7CiAgICBsZXQgeDogdHlwZW9mKDkyKSA9IDkyOwp9CmBgYAoKVHJ5IHVzaW5nIHR5cGUgaW5mZXJlbmNlIGluc3RlYWQuIEV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gOTI7Cn0KYGBgCgAE////////////Af///////////wH///////////8B////////H+8BAAEA7wGLBACJZiYAAJAIAAIHAJEIAQADAO0CDgAAjwgCBQEEU29tZQEBALQJAAGQCAADAO0CDgACjwgAAQMA2AIkAACOCAEBALQJAAKKBADZAhIAALQJBQEFRTA1MTYAAR8FAAEABQMA2AIkAACOCAEBAbkJAAGPCACNBAC4ZiYAAJUIAAACjQQAuGYmAAC0CQUB6gtBIGAjW3JlcHIoLi4pXWAgYXR0cmlidXRlIHdhcyBwbGFjZWQgb24gYW4gdW5zdXBwb3J0ZWQgaXRlbS4KCkV4YW1wbGVzIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE3CiNbcmVwcihDKV0KdHlwZSBGb28gPSB1ODsKCiNbcmVwcihwYWNrZWQpXQplbnVtIEZvbyB7QmFyLCBCYXp9CgojW3JlcHIodTgpXQpzdHJ1Y3QgRm9vIHtiYXI6IGJvb2wsIGJhejogYm9vbH0KCiNbcmVwcihDKV0KaW1wbCBGb28gewogICAgLy8gLi4uCn0KYGBgCgoqIFRoZSBgI1tyZXByKEMpXWAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHBsYWNlZCBvbiBzdHJ1Y3RzIGFuZCBlbnVtcy4KKiBUaGUgYCNbcmVwcihwYWNrZWQpXWAgYW5kIGAjW3JlcHIoc2ltZCldYCBhdHRyaWJ1dGVzIG9ubHkgd29yayBvbiBzdHJ1Y3RzLgoqIFRoZSBgI1tyZXByKHU4KV1gLCBgI1tyZXByKGkxNildYCwgZXRjIGF0dHJpYnV0ZXMgb25seSB3b3JrIG9uIGVudW1zLgoKVGhlc2UgYXR0cmlidXRlcyBkbyBub3Qgd29yayBvbiB0eXBlZGVmcywgc2luY2UgdHlwZWRlZnMgYXJlIGp1c3QgYWxpYXNlcy4KClJlcHJlc2VudGF0aW9ucyBsaWtlIGAjW3JlcHIodTgpXWAsIGAjW3JlcHIoaTY0KV1gIGFyZSBmb3Igc2VsZWN0aW5nIHRoZQpkaXNjcmltaW5hbnQgc2l6ZSBmb3IgZW51bXMgd2l0aCBubyBkYXRhIGZpZWxkcyBvbiBhbnkgb2YgdGhlIHZhcmlhbnRzLCBlLmcuCmBlbnVtIENvbG9yIHtSZWQsIEJsdWUsIEdyZWVufWAsIGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlIHNpemUgb2YgdGhlIGVudW0gdG8KdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVkIHR5cGUuIFN1Y2ggYW4gZW51bSBjYW4gYmUgY2FzdCB0byBhIHZhbHVlIG9mIHRoZSBzYW1lCnR5cGUgYXMgd2VsbC4gSW4gc2hvcnQsIGAjW3JlcHIodTgpXWAgbWFrZXMgdGhlIGVudW0gYmVoYXZlIGxpa2UgYW4gaW50ZWdlcgp3aXRoIGEgY29uc3RyYWluZWQgc2V0IG9mIGFsbG93ZWQgdmFsdWVzLgoKT25seSBmaWVsZC1sZXNzIGVudW1zIGNhbiBiZSBjYXN0IHRvIG51bWVyaWNhbCBwcmltaXRpdmVzLCBzbyB0aGlzIGF0dHJpYnV0ZQp3aWxsIG5vdCBhcHBseSB0byBzdHJ1Y3RzLgoKYCNbcmVwcihwYWNrZWQpXWAgcmVkdWNlcyBwYWRkaW5nIHRvIG1ha2UgdGhlIHN0cnVjdCBzaXplIHNtYWxsZXIuIFRoZQpyZXByZXNlbnRhdGlvbiBvZiBlbnVtcyBpc24ndCBzdHJpY3RseSBkZWZpbmVkIGluIFJ1c3QsIGFuZCB0aGlzIGF0dHJpYnV0ZQp3b24ndCB3b3JrIG9uIGVudW1zLgoKYCNbcmVwcihzaW1kKV1gIHdpbGwgZ2l2ZSBhIHN0cnVjdCBjb25zaXN0aW5nIG9mIGEgaG9tb2dlbmVvdXMgc2VyaWVzIG9mIG1hY2hpbmUKdHlwZXMgKGkuZS4sIGB1OGAsIGBpMzJgLCBldGMpIGEgcmVwcmVzZW50YXRpb24gdGhhdCBwZXJtaXRzIHZlY3Rvcml6YXRpb24gdmlhClNJTUQuIFRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgZm9yIGVudW1zIHNpbmNlIHRoZXkgZG9uJ3QgY29uc2lzdCBvZiBhCnNpbmdsZSBsaXN0IG9mIGRhdGEuCgAY////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qCwABAOoLjQQAuGYmAACUCAACBwCVCAEAAwDtAg4AAJMIAgUBBFNvbWUBAQC0CQABlAgAAwDtAg4AApMIAAEDANgCJAAAkggBAQC0CQACjAQA2QISAAC0CQUBBUUwNTE3AAEfBQABAAUDANgCJAAAkggBAQG5CQABkwgAjwQA52YmAACZCAAAAo8EAOdmJgAAtAkFAbkFQW4gYCNbaW5saW5lKC4uKV1gIGF0dHJpYnV0ZSB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEKZnVuY3Rpb24gb3IgbWV0aG9kLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxOAojW2lubGluZShhbHdheXMpXQpzdHJ1Y3QgRm9vOwoKI1tpbmxpbmUobmV2ZXIpXQppbXBsIEZvbyB7CiAgICAvLyAuLi4KfQpgYGAKCmAjW2lubGluZV1gIGhpbnRzIHRoZSBjb21waWxlciB3aGV0aGVyIG9yIG5vdCB0byBhdHRlbXB0IHRvIGlubGluZSBhIG1ldGhvZCBvcgpmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGNvbXBpbGVyIGRvZXMgYSBwcmV0dHkgZ29vZCBqb2Igb2YgZmlndXJpbmcgdGhpcyBvdXQKaXRzZWxmLCBidXQgaWYgeW91IGZlZWwgdGhlIG5lZWQgZm9yIGFubm90YXRpb25zLCBgI1tpbmxpbmUoYWx3YXlzKV1gIGFuZApgI1tpbmxpbmUobmV2ZXIpXWAgY2FuIG92ZXJyaWRlIG9yIGZvcmNlIHRoZSBjb21waWxlcidzIGRlY2lzaW9uLgoKSWYgeW91IHdpc2ggdG8gYXBwbHkgdGhpcyBhdHRyaWJ1dGUgdG8gYWxsIG1ldGhvZHMgaW4gYW4gaW1wbCwgbWFudWFsbHkgYW5ub3RhdGUKZWFjaCBtZXRob2Q7IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhbm5vdGF0ZSB0aGUgZW50aXJlIGltcGwgd2l0aCBhbiBgI1tpbmxpbmVdYAphdHRyaWJ1dGUuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AbkFAAEAuQWPBADnZiYAAJgIAAIHAJkIAQADAO0CDgAAlwgCBQEEU29tZQEBALQJAAGYCAADAO0CDgAClwgAAQMA2AIkAACWCAEBALQJAAKOBADZAhIAALQJBQEFRTA1MTgAAR8FAAEABQMA2AIkAACWCAEBAbkJAAGXCACRBACWZyYAAJ0IAAACkQQAlmcmAAC0CQUB2AtBIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHdhcyBhbHJlYWR5IG1hZGUgb24gdGhpcyB0eXBlIHNvIGl0IGNhbm5vdCBiZQpzcGVjaWFsaXplZCBmdXJ0aGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyMAojIVtmZWF0dXJlKHNwZWNpYWxpemF0aW9uKV0KCnRyYWl0IFNwYWNlTGxhbWEgewogICAgZm4gZmx5KCZzZWxmKTsKfQoKLy8gYXBwbGllcyB0byBhbGwgVAppbXBsPFQ+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9Cn0KCi8vIG5vbi1kZWZhdWx0IGltcGwKLy8gYXBwbGllcyB0byBhbGwgYENsb25lYCBUIGFuZCBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGltcGwKaW1wbDxUOiBDbG9uZT4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBmbiBmbHkoJnNlbGYpIHt9Cn0KCi8vIHNpbmNlIGBpMzJgIGlzIGNsb25lLCB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbgppbXBsIFNwYWNlTGxhbWEgZm9yIGkzMiB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30KICAgIC8vIGVycm9yOiBpdGVtIGBmbHlgIGlzIHByb3ZpZGVkIGJ5IGFuIGBpbXBsYCB0aGF0IHNwZWNpYWxpemVzCiAgICAvLyAgICAgICAgYW5vdGhlciwgYnV0IHRoZSBpdGVtIGluIHRoZSBwYXJlbnQgYGltcGxgIGlzIG5vdCBtYXJrZWQKICAgIC8vICAgICAgICBgZGVmYXVsdGAgYW5kIHNvIGl0IGNhbm5vdCBiZSBzcGVjaWFsaXplZC4KfQpgYGAKClNwZWNpYWxpemF0aW9uIG9ubHkgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBgZGVmYXVsdGAgZnVuY3Rpb25zIGluCmltcGxlbWVudGF0aW9ucy4KClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBtYXJrIGFsbCB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9ucyBhcyBkZWZhdWx0LgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3BlY2lhbGl6YXRpb24pXQoKdHJhaXQgU3BhY2VMbGFtYSB7CiAgICBmbiBmbHkoJnNlbGYpOwp9CgovLyBhcHBsaWVzIHRvIGFsbCBUCmltcGw8VD4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30gLy8gVGhpcyBpcyBhIHBhcmVudCBpbXBsZW1lbnRhdGlvbi4KfQoKLy8gYXBwbGllcyB0byBhbGwgYENsb25lYCBUOyBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGltcGwKaW1wbDxUOiBDbG9uZT4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30gLy8gVGhpcyBpcyBhIHBhcmVudCBpbXBsZW1lbnRhdGlvbiBidXQgd2FzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNseSBub3QgYSBkZWZhdWx0IG9uZSwgY2F1c2luZyB0aGUgZXJyb3IKfQoKLy8gYXBwbGllcyB0byBpMzIsIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgdHdvIGltcGxzCmltcGwgU3BhY2VMbGFtYSBmb3IgaTMyIHsKICAgIGZuIGZseSgmc2VsZikge30gLy8gQW5kIG5vdyB0aGF0J3Mgb2shCn0KYGBgCgAY////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8H2AsAAQDYC5EEAJZnJgAAnAgAAgcAnQgBAAMA7QIOAACbCAIFAQRTb21lAQEAtAkAAZwIAAMA7QIOAAKbCAABAwDYAiQAAJoIAQEAtAkAApAEANkCEgAAtAkFAQVFMDUyMAABHwUAAQAFAwDYAiQAAJoIAQEBuQkAAZsIAJMEAMVnJgAAoQgAAAKTBADFZyYAALQJBQGqBkJvcnJvd2VkIGRhdGEgZXNjYXBlcyBvdXRzaWRlIG9mIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTIxCmxldCBtdXQgbGlzdDogVmVjPCZzdHI+ID0gVmVjOjpuZXcoKTsKCmxldCBfYWRkID0gfGVsOiAmc3RyfCB7CiAgICBsaXN0LnB1c2goZWwpOyAvLyBlcnJvcjogYGVsYCBlc2NhcGVzIHRoZSBjbG9zdXJlIGJvZHkgaGVyZQp9OwpgYGAKCkEgdHlwZSBhbm90YXRpb24gb2YgYSBjbG9zdXJlIHBhcmFtZXRlciBpbXBsaWVzIGEgbmV3IGxpZmV0aW1lIGRlY2xhcmF0aW9uLgpDb25zaWRlciB0byBkcm9wIGl0LCB0aGUgY29tcGlsZXIgaXMgcmVsaWFibHkgYWJsZSB0byBpbmZlciB0aGVtLgoKYGBgCmxldCBtdXQgbGlzdDogVmVjPCZzdHI+ID0gVmVjOjpuZXcoKTsKCmxldCBfYWRkID0gfGVsfCB7CiAgICBsaXN0LnB1c2goZWwpOwp9OwpgYGAKClNlZSB0aGUgW0Nsb3N1cmUgdHlwZSBpbmZlcmVuY2UgYW5kIGFubm90YXRpb25dW2Nsb3N1cmUtaW5mZXJlLWFubm90YXRpb25dIGFuZApbTGlmZXRpbWUgZWxpc2lvbl1bbGlmZXRpbWUtZWxpc2lvbl0gc2VjdGlvbnMgb2YgdGhlIEJvb2sgZm9yIG1vcmUgZGV0YWlscy4KCltjbG9zdXJlLWluZmVyZS1hbm5vdGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTMtMDEtY2xvc3VyZXMuaHRtbCNjbG9zdXJlLXR5cGUtaW5mZXJlbmNlLWFuZC1hbm5vdGF0aW9uCltsaWZldGltZS1lbGlzaW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvbGlmZXRpbWUtZWxpc2lvbi5odG1sCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////9/qgYAAQCqBpMEAMVnJgAAoAgAAgcAoQgBAAMA7QIOAACfCAIFAQRTb21lAQEAtAkAAaAIAAMA7QIOAAKfCAABAwDYAiQAAJ4IAQEAtAkAApIEANkCEgAAtAkFAQVFMDUyMQABHwUAAQAFAwDYAiQAAJ4IAQEBuQkAAZ8IAJUEAPRnJgAApQgAAAKVBAD0ZyYAALQJBQGvBFRoZSBsYW5nIGF0dHJpYnV0ZSB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTIyCiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgojW2xhbmcgPSAiY29va2llIl0KZm4gY29va2llKCkgLT4gISB7IC8vIGVycm9yOiBkZWZpbml0aW9uIG9mIGFuIHVua25vd24gbGFuZ3VhZ2UgaXRlbTogYGNvb2tpZWAKICAgIGxvb3Age30KfQpgYGAKClRoZSBsYW5nIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBmb3IgbWFya2luZyBzcGVjaWFsIGl0ZW1zIHRoYXQgYXJlIGJ1aWx0LWluIHRvClJ1c3QgaXRzZWxmLiBUaGlzIGluY2x1ZGVzIHNwZWNpYWwgdHJhaXRzIChsaWtlIGBDb3B5YCBhbmQgYFNpemVkYCkgdGhhdCBhZmZlY3QKaG93IHRoZSBjb21waWxlciBiZWhhdmVzLCBhcyB3ZWxsIGFzIHNwZWNpYWwgZnVuY3Rpb25zIHRoYXQgbWF5IGJlIGF1dG9tYXRpY2FsbHkKaW52b2tlZCAoc3VjaCBhcyB0aGUgaGFuZGxlciBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGluZGV4aW5nIGEgc2xpY2UpLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H68EAAEArwSVBAD0ZyYAAKQIAAIHAKUIAQADAO0CDgAAowgCBQEEU29tZQEBALQJAAGkCAADAO0CDgACowgAAQMA2AIkAACiCAEBALQJAAKUBADZAhIAALQJBQEFRTA1MjIAAR8FAAEABQMA2AIkAACiCAEBAbkJAAGjCACXBACjaCYAAKkIAAAClwQAo2gmAAC0CQUBjQpBIHZhcmlhYmxlIHdoaWNoIHJlcXVpcmVzIHVuaXF1ZSBhY2Nlc3MgaXMgYmVpbmcgdXNlZCBpbiBtb3JlIHRoYW4gb25lIGNsb3N1cmUKYXQgdGhlIHNhbWUgdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjQKZm4gc2V0KHg6ICZtdXQgaXNpemUpIHsKICAgICp4ICs9IDQ7Cn0KCmZuIGRyYWdvb29vbih4OiAmbXV0IGlzaXplKSB7CiAgICBsZXQgbXV0IGMxID0gfHwgc2V0KHgpOwogICAgbGV0IG11dCBjMiA9IHx8IHNldCh4KTsgLy8gZXJyb3IhCgogICAgYzIoKTsKICAgIGMxKCk7Cn0KYGBgCgpUbyBzb2x2ZSB0aGlzIGlzc3VlLCBtdWx0aXBsZSBzb2x1dGlvbnMgYXJlIGF2YWlsYWJsZS4gRmlyc3QsIGlzIGl0IHJlcXVpcmVkCmZvciB0aGlzIHZhcmlhYmxlIHRvIGJlIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbG9zdXJlIGF0IGEgdGltZT8gSWYgaXQgaXMgdGhlCmNhc2UsIHVzZSByZWZlcmVuY2UgY291bnRlZCB0eXBlcyBzdWNoIGFzIGBSY2AgKG9yIGBBcmNgIGlmIGl0IHJ1bnMKY29uY3VycmVudGx5KToKCmBgYAp1c2Ugc3RkOjpyYzo6UmM7CnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpmbiBzZXQoeDogJm11dCBpc2l6ZSkgewogICAgKnggKz0gNDsKfQoKZm4gZHJhZ29vb29uKHg6ICZtdXQgaXNpemUpIHsKICAgIGxldCB4ID0gUmM6Om5ldyhSZWZDZWxsOjpuZXcoeCkpOwogICAgbGV0IHkgPSBSYzo6Y2xvbmUoJngpOwogICAgbGV0IG11dCBjMSA9IHx8IHsgbGV0IG11dCB4MiA9IHguYm9ycm93X211dCgpOyBzZXQoJm11dCB4Mik7IH07CiAgICBsZXQgbXV0IGMyID0gfHwgeyBsZXQgbXV0IHgyID0geS5ib3Jyb3dfbXV0KCk7IHNldCgmbXV0IHgyKTsgfTsgLy8gb2shCgogICAgYzIoKTsKICAgIGMxKCk7Cn0KYGBgCgpJZiBub3QsIGp1c3QgcnVuIGNsb3N1cmVzIG9uZSBhdCBhIHRpbWU6CgpgYGAKZm4gc2V0KHg6ICZtdXQgaXNpemUpIHsKICAgICp4ICs9IDQ7Cn0KCmZuIGRyYWdvb29vbih4OiAmbXV0IGlzaXplKSB7CiAgICB7IC8vIFRoaXMgYmxvY2sgaXNuJ3QgbmVjZXNzYXJ5IHNpbmNlIG5vbi1sZXhpY2FsIGxpZmV0aW1lcywgaXQncyBqdXN0IHRvCiAgICAgIC8vIG1ha2UgaXQgbW9yZSBjbGVhci4KICAgICAgICBsZXQgbXV0IGMxID0gfHwgc2V0KCZtdXQgKngpOwogICAgICAgIGMxKCk7CiAgICB9IC8vIGBjMWAgaGFzIGJlZW4gZHJvcHBlZCBoZXJlIHNvIHdlJ3JlIGZyZWUgdG8gdXNlIGB4YCBhZ2FpbiEKICAgIGxldCBtdXQgYzIgPSB8fCBzZXQoJm11dCAqeCk7CiAgICBjMigpOwp9CmBgYAoAFf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NCgABAI0KlwQAo2gmAACoCAACBwCpCAEAAwDtAg4AAKcIAgUBBFNvbWUBAQC0CQABqAgAAwDtAg4AAqcIAAEDANgCJAAApggBAQC0CQAClgQA2QISAAC0CQUBBUUwNTI0AAEfBQABAAUDANgCJAAApggBAQG5CQABpwgAmQQA0mgmAACtCAAAApkEANJoJgAAtAkFAZkIQSBjbG9zdXJlIHdhcyB1c2VkIGJ1dCBkaWRuJ3QgaW1wbGVtZW50IHRoZSBleHBlY3RlZCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjUKc3RydWN0IFg7CgpmbiBmb288VD4oXzogVCkge30KZm4gYmFyPFQ6IEZuKHUzMik+KF86IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBYOwogICAgbGV0IGNsb3N1cmUgPSB8X3wgZm9vKHgpOyAvLyBlcnJvcjogZXhwZWN0ZWQgYSBjbG9zdXJlIHRoYXQgaW1wbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGBGbmAgdHJhaXQsIGJ1dCB0aGlzIGNsb3N1cmUgb25seQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaW1wbGVtZW50cyBgRm5PbmNlYAogICAgYmFyKGNsb3N1cmUpOwp9CmBgYAoKSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGBjbG9zdXJlYCBpcyBhbiBgRm5PbmNlYCBjbG9zdXJlIHdoZXJlYXMgdGhlIGBiYXJgCmZ1bmN0aW9uIGV4cGVjdGVkIGFuIGBGbmAgY2xvc3VyZS4gSW4gdGhpcyBjYXNlLCBpdCdzIHNpbXBsZSB0byBmaXggdGhlIGlzc3VlLAp5b3UganVzdCBoYXZlIHRvIGltcGxlbWVudCBgQ29weWAgYW5kIGBDbG9uZWAgdHJhaXRzIG9uIGBzdHJ1Y3QgWGAgYW5kIGl0J2xsCmJlIG9rOgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gV2UgaW1wbGVtZW50IGBDbG9uZWAgYW5kIGBDb3B5YCB0cmFpdHMuCnN0cnVjdCBYOwoKZm4gZm9vPFQ+KF86IFQpIHt9CmZuIGJhcjxUOiBGbih1MzIpPihfOiBUKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gWDsKICAgIGxldCBjbG9zdXJlID0gfF98IGZvbyh4KTsKICAgIGJhcihjbG9zdXJlKTsgLy8gb2shCn0KYGBgCgpUbyBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdGhlc2Ugd29yayBpbiBSdXN0LCByZWFkIHRoZSBbQ2xvc3VyZXNdW2Nsb3N1cmVzXQpjaGFwdGVyIG9mIHRoZSBCb29rLgoKW2Nsb3N1cmVzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTMtMDEtY2xvc3VyZXMuaHRtbAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8PmQgAAQCZCJkEANJoJgAArAgAAgcArQgBAAMA7QIOAACrCAIFAQRTb21lAQEAtAkAAawIAAMA7QIOAAKrCAABAwDYAiQAAKoIAQEAtAkAApgEANkCEgAAtAkFAQVFMDUyNQABHwUAAQAFAwDYAiQAAKoIAQEBuQkAAasIAJsEAIFpJgAAsQgAAAKbBACBaSYAALQJBQHKBFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiBkaWZmZXJlZCBmcm9tIHRoZSBudW1iZXIgb2YKZWxlbWVudHMgaW4gdGhlIGFycmF5IGJlaW5nIG1hdGNoZWQuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI3CmxldCByID0gJlsxLCAyLCAzLCA0XTsKbWF0Y2ggciB7CiAgICAmW2EsIGJdID0+IHsgLy8gZXJyb3I6IHBhdHRlcm4gcmVxdWlyZXMgMiBlbGVtZW50cyBidXQgYXJyYXkKICAgICAgICAgICAgICAgICAvLyAgICAgICAgaGFzIDQKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzaXplIG9mIHRoZSBtYXRjaGVkCmFycmF5LiBBZGRpdGlvbmFsIGVsZW1lbnRzIGNhbiBiZSBtYXRjaGVkIHdpdGggYC4uYDoKCmBgYApsZXQgciA9ICZbMSwgMiwgMywgNF07Cm1hdGNoIHIgewogICAgJlthLCBiLCAuLl0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8HygQAAQDKBJsEAIFpJgAAsAgAAgcAsQgBAAMA7QIOAACvCAIFAQRTb21lAQEAtAkAAbAIAAMA7QIOAAKvCAABAwDYAiQAAK4IAQEAtAkAApoEANkCEgAAtAkFAQVFMDUyNwABHwUAAQAFAwDYAiQAAK4IAQEBuQkAAa8IAJ0EALBpJgAAtQgAAAKdBACwaSYAALQJBQHaBUFuIGFycmF5IG9yIHNsaWNlIHBhdHRlcm4gcmVxdWlyZWQgbW9yZSBlbGVtZW50cyB0aGFuIHdlcmUgcHJlc2VudCBpbiB0aGUKbWF0Y2hlZCBhcnJheS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjgKbGV0IHIgPSAmWzEsIDJdOwptYXRjaCByIHsKICAgICZbYSwgYiwgYywgcmVzdCBAIC4uXSA9PiB7IC8vIGVycm9yOiBwYXR0ZXJuIHJlcXVpcmVzIGF0IGxlYXN0IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBlbGVtZW50cyBidXQgYXJyYXkgaGFzIDIKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSwgYz17fSByZXN0PXs6P30iLCBhLCBiLCBjLCByZXN0KTsKICAgIH0KfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBtYXRjaGVkIGFycmF5IGhhcyBhdCBsZWFzdCBhcyBtYW55IGVsZW1lbnRzIGFzIHRoZSBwYXR0ZXJuCnJlcXVpcmVzLiBZb3UgY2FuIG1hdGNoIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcmVtYWluaW5nIGVsZW1lbnRzIHdpdGggYC4uYDoKCmBgYApsZXQgciA9ICZbMSwgMiwgMywgNCwgNV07Cm1hdGNoIHIgewogICAgJlthLCBiLCBjLCByZXN0IEAgLi5dID0+IHsgLy8gb2shCiAgICAgICAgLy8gcHJpbnRzIGBhPTEsIGI9MiwgYz0zIHJlc3Q9WzQsIDVdYAogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9LCBjPXt9IHJlc3Q9ezo/fSIsIGEsIGIsIGMsIHJlc3QpOwogICAgfQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H9oFAAEA2gWdBACwaSYAALQIAAIHALUIAQADAO0CDgAAswgCBQEEU29tZQEBALQJAAG0CAADAO0CDgACswgAAQMA2AIkAACyCAEBALQJAAKcBADZAhIAALQJBQEFRTA1MjgAAR8FAAEABQMA2AIkAACyCAEBAbkJAAGzCACfBADfaSYAALkIAAACnwQA32kmAAC0CQUBxANBbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIHdhcyBtYXRjaGVkIGFnYWluc3Qgc29tZSBvdGhlciB0eXBlLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyOQpsZXQgcjogZjMyID0gMS4wOwptYXRjaCByIHsKICAgIFthLCBiXSA9PiB7IC8vIGVycm9yOiBleHBlY3RlZCBhbiBhcnJheSBvciBzbGljZSwgZm91bmQgYGYzMmAKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gYW5kIHRoZSBleHByZXNzaW9uIGJlaW5nIG1hdGNoZWQgb24gYXJlIG9mIGNvbnNpc3RlbnQKdHlwZXM6CgpgYGAKbGV0IHIgPSBbMS4wLCAyLjBdOwptYXRjaCByIHsKICAgIFthLCBiXSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ/EAwABAMQDnwQA32kmAAC4CAACBwC5CAEAAwDtAg4AALcIAgUBBFNvbWUBAQC0CQABuAgAAwDtAg4AArcIAAEDANgCJAAAtggBAQC0CQACngQA2QISAAC0CQUBBUUwNTI5AAEfBQABAAUDANgCJAAAtggBAQG5CQABtwgAoQQAjmomAAC9CAAAAqEEAI5qJgAAtAkFAbYGQSBiaW5kaW5nIHNoYWRvd2VkIHNvbWV0aGluZyBpdCBzaG91bGRuJ3QuCgpBIG1hdGNoIGFybSBvciBhIHZhcmlhYmxlIGhhcyBhIG5hbWUgdGhhdCBpcyBhbHJlYWR5IHVzZWQgYnkKc29tZXRoaW5nIGVsc2UsIGUuZy4KCiogc3RydWN0IG5hbWUKKiBlbnVtIHZhcmlhbnQKKiBzdGF0aWMKKiBhc3NvY2lhdGVkIGNvbnN0YW50CgpUaGlzIGVycm9yIG1heSBhbHNvIGhhcHBlbiB3aGVuIGFuIGVudW0gdmFyaWFudCAqd2l0aCBmaWVsZHMqIGlzIHVzZWQKaW4gYSBwYXR0ZXJuLCBidXQgd2l0aG91dCBpdHMgZmllbGRzLgoKYGBgY29tcGlsZV9mYWlsCmVudW0gRW51bSB7CiAgICBXaXRoRmllbGQoaTMyKQp9Cgp1c2UgRW51bTo6KjsKbWF0Y2ggV2l0aEZpZWxkKDEpIHsKICAgIFdpdGhGaWVsZCA9PiB7fSAvLyBlcnJvcjogbWlzc2luZyAoXykKfQpgYGAKCk1hdGNoIGJpbmRpbmdzIGNhbm5vdCBzaGFkb3cgc3RhdGljczoKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMApzdGF0aWMgVEVTVDogaTMyID0gMDsKCmxldCByID0gMTIzOwptYXRjaCByIHsKICAgIFRFU1QgPT4ge30gLy8gZXJyb3I6IG5hbWUgb2YgYSBzdGF0aWMKfQpgYGAKCkZpeGVkIGV4YW1wbGVzOgoKYGBgCnN0YXRpYyBURVNUOiBpMzIgPSAwOwoKbGV0IHIgPSAxMjM7Cm1hdGNoIHIgewogICAgc29tZV92YWx1ZSA9PiB7fSAvLyBvayEKfQpgYGAKCm9yCgpgYGAKY29uc3QgVEVTVDogaTMyID0gMDsgLy8gY29uc3QsIG5vdCBzdGF0aWMKCmxldCByID0gMTIzOwptYXRjaCByIHsKICAgIFRFU1QgPT4ge30gLy8gY29uc3QgaXMgb2shCiAgICBvdGhlcl92YWx1ZXMgPT4ge30KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////H7YGAAEAtgahBACOaiYAALwIAAIHAL0IAQADAO0CDgAAuwgCBQEEU29tZQEBALQJAAG8CAADAO0CDgACuwgAAQMA2AIkAAC6CAEBALQJAAKgBADZAhIAALQJBQEFRTA1MzAAAR8FAAEABQMA2AIkAAC6CAEBAbkJAAG7CACjBAC9aiYAAMEIAAACowQAvWomAAC0CQUB5gVBbiB1bmtub3duIHR1cGxlIHN0cnVjdC92YXJpYW50IGhhcyBiZWVuIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMxCmxldCBUeXBlKHgpID0gVHlwZSgxMik7IC8vIGVycm9yIQptYXRjaCBCYXIoMTIpIHsKICAgIEJhcih4KSA9PiB7fSAvLyBlcnJvciEKICAgIF8gPT4ge30KfQpgYGAKCkluIG1vc3QgY2FzZXMsIGl0J3MgZWl0aGVyIGEgZm9yZ290dGVuIGltcG9ydCBvciBhIHR5cG8uIEhvd2V2ZXIsIGxldCdzIGxvb2sgYXQKaG93IHlvdSBjYW4gaGF2ZSBzdWNoIGEgdHlwZToKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBUeXBlKHUzMik7IC8vIHRoaXMgaXMgYSB0dXBsZSBzdHJ1Y3QKCmVudW0gRm9vIHsKICAgIEJhcih1MzIpLCAvLyB0aGlzIGlzIGEgdHVwbGUgdmFyaWFudAp9Cgp1c2UgRm9vOjoqOyAvLyBUbyB1c2UgRm9vJ3MgdmFyaWFudCBkaXJlY3RseSwgd2UgbmVlZCB0byBpbXBvcnQgdGhlbSBpbgogICAgICAgICAgICAvLyB0aGUgc2NvcGUuCmBgYAoKRWl0aGVyIHdheSwgaXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIG91ciBwcmV2aW91cyBjb2RlOgoKYGBgZWRpdGlvbjIwMTgKc3RydWN0IFR5cGUodTMyKTsKCmVudW0gRm9vIHsKICAgIEJhcih1MzIpLAp9CnVzZSBGb286Oio7CgpsZXQgVHlwZSh4KSA9IFR5cGUoMTIpOyAvLyBvayEKbWF0Y2ggVHlwZSgxMikgewogICAgVHlwZSh4KSA9PiB7fSAvLyBvayEKICAgIF8gPT4ge30KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B+YFAAEA5gWjBAC9aiYAAMAIAAIHAMEIAQADAO0CDgAAvwgCBQEEU29tZQEBALQJAAHACAADAO0CDgACvwgAAQMA2AIkAAC+CAEBALQJAAKiBADZAhIAALQJBQEFRTA1MzEAAR8FAAEABQMA2AIkAAC+CAEBAbkJAAG/CAClBADsaiYAAMUIAAACpQQA7GomAAC0CQUBuQVQYXR0ZXJuIGFybSBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGtpbmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMyCmVudW0gU3RhdGUgewogICAgU3VjY2VlZGVkLAogICAgRmFpbGVkKFN0cmluZyksCn0KCmZuIHByaW50X29uX2ZhaWx1cmUoc3RhdGU6ICZTdGF0ZSkgewogICAgbWF0Y2ggKnN0YXRlIHsKICAgICAgICAvLyBlcnJvcjogZXhwZWN0ZWQgdW5pdCBzdHJ1Y3QsIHVuaXQgdmFyaWFudCBvciBjb25zdGFudCwgZm91bmQgdHVwbGUKICAgICAgICAvLyAgICAgICAgdmFyaWFudCBgU3RhdGU6OkZhaWxlZGAKICAgICAgICBTdGF0ZTo6RmFpbGVkID0+IHByaW50bG4hKCJGYWlsZWQiKSwKICAgICAgICBfID0+ICgpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoZSBtYXRjaCBhcm0ga2luZCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwcmVzc2lvbgptYXRjaGVkLgoKRml4ZWQgZXhhbXBsZToKCmBgYAplbnVtIFN0YXRlIHsKICAgIFN1Y2NlZWRlZCwKICAgIEZhaWxlZChTdHJpbmcpLAp9CgpmbiBwcmludF9vbl9mYWlsdXJlKHN0YXRlOiAmU3RhdGUpIHsKICAgIG1hdGNoICpzdGF0ZSB7CiAgICAgICAgU3RhdGU6OkZhaWxlZChyZWYgbXNnKSA9PiBwcmludGxuISgiRmFpbGVkIHdpdGgge30iLCBtc2cpLAogICAgICAgIF8gPT4gKCkKICAgIH0KfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8BuQUAAQC5BaUEAOxqJgAAxAgAAgcAxQgBAAMA7QIOAADDCAIFAQRTb21lAQEAtAkAAcQIAAMA7QIOAALDCAABAwDYAiQAAMIIAQEAtAkAAqQEANkCEgAAtAkFAQVFMDUzMgABHwUAAQAFAwDYAiQAAMIIAQEBuQkAAcMIAKcEAJtrJgAAyQgAAAKnBACbayYAALQJBQHgBEFuIGl0ZW0gd2hpY2ggaXNuJ3QgYSB1bml0IHN0cnVjdCwgYSB2YXJpYW50LCBub3IgYSBjb25zdGFudCBoYXMgYmVlbiB1c2VkIGFzIGEKbWF0Y2ggcGF0dGVybi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzMKc3RydWN0IFRvcnRvaXNlOwoKaW1wbCBUb3J0b2lzZSB7CiAgICBmbiB0dXJ0bGUoJnNlbGYpIC0+IHUzMiB7IDAgfQp9CgptYXRjaCAwdTMyIHsKICAgIFRvcnRvaXNlOjp0dXJ0bGUgPT4ge30gLy8gRXJyb3IhCiAgICBfID0+IHt9Cn0KaWYgbGV0IFRvcnRvaXNlOjp0dXJ0bGUgPSAwdTMyIHt9IC8vIFNhbWUgZXJyb3IhCmBgYAoKSWYgeW91IHdhbnQgdG8gbWF0Y2ggYWdhaW5zdCBhIHZhbHVlIHJldHVybmVkIGJ5IGEgbWV0aG9kLCB5b3UgbmVlZCB0byBiaW5kIHRoZQp2YWx1ZSBmaXJzdDoKCmBgYApzdHJ1Y3QgVG9ydG9pc2U7CgppbXBsIFRvcnRvaXNlIHsKICAgIGZuIHR1cnRsZSgmc2VsZikgLT4gdTMyIHsgMCB9Cn0KCm1hdGNoIDB1MzIgewogICAgeCBpZiB4ID09IFRvcnRvaXNlLnR1cnRsZSgpID0+IHt9IC8vIEJvdW5kIGludG8gYHhgIHRoZW4gd2UgY29tcGFyZSBpdCEKICAgIF8gPT4ge30KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////D+AEAAEA4ASnBACbayYAAMgIAAIHAMkIAQADAO0CDgAAxwgCBQEEU29tZQEBALQJAAHICAADAO0CDgACxwgAAQMA2AIkAADGCAEBALQJAAKmBADZAhIAALQJBQEFRTA1MzMAAR8FAAEABQMA2AIkAADGCAEBAbkJAAHHCACpBADKayYAAM0IAAACqQQAymsmAAC0CQUBswVUaGUgYGlubGluZWAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM0CiNbaW5saW5lKCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgcGFyZW50aGVzaXplZCBgaW5saW5lYCBhdHRyaWJ1dGUgcmVxdWlyZXMgdGhlIHBhcmFtZXRlciB0byBiZSBzcGVjaWZpZWQ6CgpgYGAKI1tpbmxpbmUoYWx3YXlzKV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpvcjoKCmBgYAojW2lubGluZShuZXZlcildCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKQWx0ZXJuYXRpdmVseSwgYSBwYXJlbi1sZXNzIHZlcnNpb24gb2YgdGhlIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBoaW50IHRoZQpjb21waWxlciBhYm91dCBpbmxpbmluZyBvcHBvcnR1bml0eToKCmBgYAojW2lubGluZV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFtgaW5saW5lYCBhdHRyaWJ1dGVdW2lubGluZS1hdHRyaWJ1dGVdIHNlY3Rpb24Kb2YgdGhlIFJlZmVyZW5jZS4KCltpbmxpbmUtYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvYXR0cmlidXRlcy9jb2RlZ2VuLmh0bWwjdGhlLWlubGluZS1hdHRyaWJ1dGUKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wOzBQABALMFqQQAymsmAADMCAACBwDNCAEAAwDtAg4AAMsIAgUBBFNvbWUBAQC0CQABzAgAAwDtAg4AAssIAAEDANgCJAAAyggBAQC0CQACqAQA2QISAAC0CQUBBUUwNTM0AAEfBQABAAUDANgCJAAAyggBAQG5CQABywgAqwQA+WsmAADRCAAAAqsEAPlrJgAAtAkFAegEQW4gdW5rbm93biBhcmd1bWVudCB3YXMgZ2l2ZW4gdG8gdGhlIGBpbmxpbmVgIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzUKI1tpbmxpbmUodW5rbm93bildIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSBvbmx5IHN1cHBvcnRzIHR3byBhcmd1bWVudHM6CgogKiBhbHdheXMKICogbmV2ZXIKCkFsbCBvdGhlciBhcmd1bWVudHMgZ2l2ZW4gdG8gdGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSB3aWxsIHJldHVybiB0aGlzIGVycm9yLgpFeGFtcGxlOgoKYGBgCiNbaW5saW5lKG5ldmVyKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGlubGluZWAgQXR0cmlidXRlXVtpbmxpbmUtYXR0cmlidXRlXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbaW5saW5lLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sI3RoZS1pbmxpbmUtYXR0cmlidXRlCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8f6AQAAQDoBKsEAPlrJgAA0AgAAgcA0QgBAAMA7QIOAADPCAIFAQRTb21lAQEAtAkAAdAIAAMA7QIOAALPCAABAwDYAiQAAM4IAQEAtAkAAqoEANkCEgAAtAkFAQVFMDUzNQABHwUAAQAFAwDYAiQAAM4IAQEBuQkAAc8IAK0EAKhsJgAA1QgAAAKtBACobCYAALQJBQGpBFRoZSBgbm90YCBjZmctcHJlZGljYXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM2CiNbY2ZnKG5vdCgpKV0gLy8gZXJyb3I6IGV4cGVjdGVkIDEgY2ZnLXBhdHRlcm4KcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBub3RgIHByZWRpY2F0ZSBleHBlY3RzIG9uZSBjZmctcGF0dGVybi4gRXhhbXBsZToKCmBgYAojW2NmZyhub3QodGFyZ2V0X29zID0gImxpbnV4IikpXSAvLyBvayEKcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBjZmdgIGF0dHJpYnV0ZSwgcmVhZCB0aGUgc2VjdGlvbiBvbgpbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBpbiB0aGUgUmVmZXJlbmNlLgoKW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/qQQAAQCpBK0EAKhsJgAA1AgAAgcA1QgBAAMA7QIOAADTCAIFAQRTb21lAQEAtAkAAdQIAAMA7QIOAALTCAABAwDYAiQAANIIAQEAtAkAAqwEANkCEgAAtAkFAQVFMDUzNgABHwUAAQAFAwDYAiQAANIIAQEBuQkAAdMIAK8EANdsJgAA2QgAAAKvBADXbCYAALQJBQHsBEFuIHVua25vd24gcHJlZGljYXRlIHdhcyB1c2VkIGluc2lkZSB0aGUgYGNmZ2AgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNwojW2NmZyh1bmtub3duKCkpXSAvLyBlcnJvcjogaW52YWxpZCBwcmVkaWNhdGUgYHVua25vd25gCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgY2ZnYCBhdHRyaWJ1dGUgc3VwcG9ydHMgb25seSB0aHJlZSBraW5kcyBvZiBwcmVkaWNhdGVzOgoKICogYW55CiAqIGFsbAogKiBub3QKCkV4YW1wbGU6CgpgYGAKI1tjZmcobm90KHRhcmdldF9vcyA9ICJsaW51eCIpKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgY2ZnYCBhdHRyaWJ1dGUsIHJlYWQgdGhlIHNlY3Rpb24gb24KW0NvbmRpdGlvbmFsIENvbXBpbGF0aW9uXVtjb25kaXRpb25hbC1jb21waWxhdGlvbl0gaW4gdGhlIFJlZmVyZW5jZS4KCltjb25kaXRpb25hbC1jb21waWxhdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8D7AQAAQDsBK8EANdsJgAA2AgAAgcA2QgBAAMA7QIOAADXCAIFAQRTb21lAQEAtAkAAdgIAAMA7QIOAALXCAABAwDYAiQAANYIAQEAtAkAAq4EANkCEgAAtAkFAQVFMDUzNwABHwUAAQAFAwDYAiQAANYIAQEBuQkAAdcIALEEAIZtJgAA3QgAAAKxBACGbSYAALQJBQHBBEF0dHJpYnV0ZSBjb250YWlucyBzYW1lIG1ldGEgaXRlbSBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzgKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIG5vdGU9IkZpcnN0IGRlcHJlY2F0aW9uIG5vdGUuIiwKICAgIG5vdGU9IlNlY29uZCBkZXByZWNhdGlvbiBub3RlLiIgLy8gZXJyb3I6IG11bHRpcGxlIHNhbWUgbWV0YSBpdGVtCildCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gRWFjaCBrZXkgbWF5IG9ubHkgYmUKdXNlZCBvbmNlIGluIGVhY2ggYXR0cmlidXRlLgoKVG8gZml4IHRoZSBwcm9ibGVtLCByZW1vdmUgYWxsIGJ1dCBvbmUgb2YgdGhlIG1ldGEgaXRlbXMgd2l0aCB0aGUgc2FtZSBrZXkuCgpFeGFtcGxlOgoKYGBgCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJGaXJzdCBkZXByZWNhdGlvbiBub3RlLiIKKV0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQHBBAABAMEEsQQAhm0mAADcCAACBwDdCAEAAwDtAg4AANsIAgUBBFNvbWUBAQC0CQAB3AgAAwDtAg4AAtsIAAEDANgCJAAA2ggBAQC0CQACsAQA2QISAAC0CQUBBUUwNTM4AAEfBQABAAUDANgCJAAA2ggBAQG5CQAB2wgAswQAtW0mAADhCAAAArMEALVtJgAAtAkFAesJQW4gaW52YWxpZCBtZXRhLWl0ZW0gd2FzIHVzZWQgaW5zaWRlIGFuIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzkKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3J1c3RjX2RlcHJlY2F0ZWQocmVhc29uKV0gLy8gZXJyb3IhCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJkZXByZWNhdGVkX2ZuIiwgaXNzdWUgPSAiMTIzIildCmZuIGRlcHJlY2F0ZWQoKSB7fQoKI1t1bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX3N0cnVjdCIsIGlzc3VlKV0gLy8gZXJyb3IhCnN0cnVjdCBVbnN0YWJsZTsKCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoZmVhdHVyZSldIC8vIGVycm9yIQpjb25zdCBmbiB1bnN0YWJsZV9mbigpIHt9CgojW3N0YWJsZShmZWF0dXJlID0gInN0YWJsZV9zdHJ1Y3QiLCBzaW5jZSldIC8vIGVycm9yIQpzdHJ1Y3QgU3RhYmxlOwoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSldIC8vIGVycm9yIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4KVG8gZml4IHRoZXNlIGlzc3VlcyB5b3UgbmVlZCB0byBnaXZlIHJlcXVpcmVkIGtleS12YWx1ZSBwYWlycy4KCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbcnVzdGNfZGVwcmVjYXRlZChzaW5jZSA9ICIxLjM5LjAiLCByZWFzb24gPSAicmVhc29uIildIC8vIG9rIQojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiZGVwcmVjYXRlZF9mbiIsIGlzc3VlID0gIjEyMyIpXQpmbiBkZXByZWNhdGVkKCkge30KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJ1bnN0YWJsZV9zdHJ1Y3QiLCBpc3N1ZSA9ICIxMjMiKV0gLy8gb2shCnN0cnVjdCBVbnN0YWJsZTsKCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoZmVhdHVyZSA9ICJ1bnN0YWJsZV9mbiIsIGlzc3VlID0gIjEyNCIpXSAvLyBvayEKY29uc3QgZm4gdW5zdGFibGVfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJzdGFibGVfc3RydWN0Iiwgc2luY2UgPSAiMS4zOS4wIildIC8vIG9rIQpzdHJ1Y3QgU3RhYmxlOwoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSA9ICJzdGFibGVfZm4iLCBzaW5jZSA9ICIxLjM5LjAiKV0gLy8gb2shCmNvbnN0IGZuIHN0YWJsZV9mbigpIHt9CmBgYAoAFP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wkAAQDrCbMEALVtJgAA4AgAAgcA4QgBAAMA7QIOAADfCAIFAQRTb21lAQEAtAkAAeAIAAMA7QIOAALfCAABAwDYAiQAAN4IAQEAtAkAArIEANkCEgAAtAkFAQVFMDUzOQABHwUAAQAFAwDYAiQAAN4IAQEBuQkAAd8IALUEAORtJgAA5QgAAAK1BADkbSYAALQJBQHoBUFuIHVua25vd24gbWV0YSBpdGVtIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0MQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgLy8gZXJyb3I6IHVua25vd24gbWV0YSBpdGVtCiAgICByZWFzb249IkV4YW1wbGUgaW52YWxpZCBtZXRhIGl0ZW0uIFNob3VsZCBiZSAnbm90ZSciKQpdCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gVGhlIGtleXMgcHJvdmlkZWQKbXVzdCBiZSBvbmUgb2YgdGhlIHZhbGlkIGtleXMgZm9yIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlLgoKVG8gZml4IHRoZSBwcm9ibGVtLCBlaXRoZXIgcmVtb3ZlIHRoZSB1bmtub3duIG1ldGEgaXRlbSwgb3IgcmVuYW1lIGl0IGlmIHlvdQpwcm92aWRlZCB0aGUgd3JvbmcgbmFtZS4KCkluIHRoZSBlcnJvbmVvdXMgY29kZSBleGFtcGxlIGFib3ZlLCB0aGUgd3JvbmcgbmFtZSB3YXMgcHJvdmlkZWQsIHNvIGNoYW5naW5nCnRvIGEgY29ycmVjdCBvbmUgaXQgd2lsbCBmaXggdGhlIGVycm9yLiBFeGFtcGxlOgoKYGBgCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJUaGlzIGlzIGEgdmFsaWQgbWV0YSBpdGVtIGZvciB0aGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUuIgopXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x/oBQABAOgFtQQA5G0mAADkCAACBwDlCAEAAwDtAg4AAOMIAgUBBFNvbWUBAQC0CQAB5AgAAwDtAg4AAuMIAAEDANgCJAAA4ggBAQC0CQACtAQA2QISAAC0CQUBBUUwNTQxAAEfBQABAAUDANgCJAAA4ggBAQG5CQAB4wgAtwQAk24mAADpCAAAArcEAJNuJgAAtAkFAdAKVGhlIGBzaW5jZWAgdmFsdWUgaXMgbWlzc2luZyBpbiBhIHN0YWJpbGl0eSBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQyCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfc3RhYmxlX2ZuIildIC8vIGludmFsaWQKZm4gX3N0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3N0YWJsZShmZWF0dXJlID0gIl9zdGFibGVfY29uc3RfZm4iKV0gLy8gaW52YWxpZApjb25zdCBmbiBfc3RhYmxlX2NvbnN0X2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iLCBzaW5jZSA9ICIwLjEuMCIpXQojW3J1c3RjX2RlcHJlY2F0ZWQoCiAgICByZWFzb24gPSAiZXhwbGFuYXRpb24gZm9yIGRlcHJlY2F0aW9uIgopXSAvLyBpbnZhbGlkCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYHNpbmNlYCBmaWVsZC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9mbiIsIHNpbmNlID0gIjEuMC4wIildIC8vIG9rIQpmbiBfc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9jb25zdF9mbiIsIHNpbmNlID0gIjEuMC4wIildIC8vIG9rIQpjb25zdCBmbiBfc3RhYmxlX2NvbnN0X2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iLCBzaW5jZSA9ICIwLjEuMCIpXQojW3J1c3RjX2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMCIsCiAgICByZWFzb24gPSAiZXhwbGFuYXRpb24gZm9yIGRlcHJlY2F0aW9uIgopXSAvLyBvayEKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8D0AoAAQDQCrcEAJNuJgAA6AgAAgcA6QgBAAMA7QIOAADnCAIFAQRTb21lAQEAtAkAAegIAAMA7QIOAALnCAABAwDYAiQAAOYIAQEAtAkAArYEANkCEgAAtAkFAQVFMDU0MgABHwUAAQAFAwDYAiQAAOYIAQEBuQkAAecIALkEAMJuJgAA7QgAAAK5BADCbiYAALQJBQHhB1RoZSBgcmVhc29uYCB2YWx1ZSBpcyBtaXNzaW5nIGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDMKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShzaW5jZSA9ICIwLjEuMCIsIGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iKV0KI1tydXN0Y19kZXByZWNhdGVkKAogICAgc2luY2UgPSAiMS4wLjAiCildIC8vIGludmFsaWQKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgcmVhc29uYCBmaWVsZC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKHNpbmNlID0gIjAuMS4wIiwgZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIpXQojW3J1c3RjX2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMCIsCiAgICByZWFzb24gPSAiZXhwbGFuYXRpb24gZm9yIGRlcHJlY2F0aW9uIgopXSAvLyBvayEKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x/hBwABAOEHuQQAwm4mAADsCAACBwDtCAEAAwDtAg4AAOsIAgUBBFNvbWUBAQC0CQAB7AgAAwDtAg4AAusIAAEDANgCJAAA6ggBAQC0CQACuAQA2QISAAC0CQUBBUUwNTQzAAEfBQABAAUDANgCJAAA6ggBAQG5CQAB6wgAuwQA8W4mAADxCAAAArsEAPFuJgAAtAkFAfUGTXVsdGlwbGUgc3RhYmlsaXR5IGF0dHJpYnV0ZXMgd2VyZSBkZWNsYXJlZCBvbiB0aGUgc2FtZSBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0NAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInJ1c3QxIildCgojW3N0YWJsZShmZWF0dXJlID0gInJ1c3QxIiwgc2luY2UgPSAiMS4wLjAiKV0KI1tzdGFibGUoZmVhdHVyZSA9ICJ0ZXN0Iiwgc2luY2UgPSAiMi4wLjAiKV0gLy8gaW52YWxpZApmbiBmb28oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCBlbnN1cmUgdGhhdCBlYWNoIGl0ZW0gaGFzIGF0IG1vc3Qgb25lIHN0YWJpbGl0eSBhdHRyaWJ1dGUuCgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJydXN0MSIpXQoKI1tzdGFibGUoZmVhdHVyZSA9ICJ0ZXN0Iiwgc2luY2UgPSAiMi4wLjAiKV0gLy8gb2shCmZuIGZvbygpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w/1BgABAPUGuwQA8W4mAADwCAACBwDxCAEAAwDtAg4AAO8IAgUBBFNvbWUBAQC0CQAB8AgAAwDtAg4AAu8IAAEDANgCJAAA7ggBAQC0CQACugQA2QISAAC0CQUBBUUwNTQ0AAEfBQABAAUDANgCJAAA7ggBAQG5CQAB7wgAvQQAoG8mAAD1CAAAAr0EAKBvJgAAtAkFAckIVGhlIGBpc3N1ZWAgdmFsdWUgaXMgaW5jb3JyZWN0IGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDUKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2ZuIiwgaXNzdWUgPSAiMCIpXSAvLyBpbnZhbGlkCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwgaXNzdWUgPSAiMCIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBjb3JyZWN0IHZhbHVlIGluIHRoZSBgaXNzdWVgIGZpZWxkLgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9mbiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gb2shCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwgaXNzdWUgPSAiMSIpXSAvLyBvayEKY29uc3QgZm4gX3Vuc3RhYmxlX2NvbnN0X2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wPJCAABAMkIvQQAoG8mAAD0CAACBwD1CAEAAwDtAg4AAPMIAgUBBFNvbWUBAQC0CQAB9AgAAwDtAg4AAvMIAAEDANgCJAAA8ggBAQC0CQACvAQA2QISAAC0CQUBBUUwNTQ1AAEfBQABAAUDANgCJAAA8ggBAQG5CQAB8wgAvwQAz28mAAD5CAAAAr8EAM9vJgAAtAkFAcMHVGhlIGBmZWF0dXJlYCB2YWx1ZSBpcyBtaXNzaW5nIGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDYKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGlzc3VlID0gIm5vbmUiKV0gLy8gaW52YWxpZApmbiB1bnN0YWJsZV9mbigpIHt9CgojW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIpXSAvLyBpbnZhbGlkCmZuIHN0YWJsZV9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGBmZWF0dXJlYCBmaWVsZC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJ1bnN0YWJsZV9mbiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gb2shCmZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4wLjAiKV0gLy8gb2shCmZuIHN0YWJsZV9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEHwwcAAQDDB78EAM9vJgAA+AgAAgcA+QgBAAMA7QIOAAD3CAIFAQRTb21lAQEAtAkAAfgIAAMA7QIOAAL3CAABAwDYAiQAAPYIAQEAtAkAAr4EANkCEgAAtAkFAQVFMDU0NgABHwUAAQAFAwDYAiQAAPYIAQEBuQkAAfcIAMEEAP5vJgAA/QgAAALBBAD+byYAALQJBQGnCFRoZSBgaXNzdWVgIHZhbHVlIGlzIG1pc3NpbmcgaW4gYSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0NwojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJfdW5zdGFibGVfZm4iKV0gLy8gaW52YWxpZApmbiBfdW5zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF91bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9jb25zdF9mbiIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGBpc3N1ZWAgZmllbGQuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2ZuIiwgaXNzdWUgPSAibm9uZSIpXSAvLyBvayEKZm4gX3Vuc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoCiAgICBmZWF0dXJlID0gIl91bnN0YWJsZV9jb25zdF9mbiIsCiAgICBpc3N1ZSA9ICJub25lIgopXSAvLyBvayEKY29uc3QgZm4gX3Vuc3RhYmxlX2NvbnN0X2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////w+nCAABAKcIwQQA/m8mAAD8CAACBwD9CAEAAwDtAg4AAPsIAgUBBFNvbWUBAQC0CQAB/AgAAwDtAg4AAvsIAAEDANgCJAAA+ggBAQC0CQACwAQA2QISAAC0CQUBBUUwNTQ3AAEfBQABAAUDANgCJAAA+ggBAQG5CQAB+wgAwwQArXAmAACBCQAAAsMEAK1wJgAAtAkFAfkHQSBgcnVzdGNfZGVwcmVjYXRlZGAgYXR0cmlidXRlIHdhc24ndCBwYWlyZWQgd2l0aCBhIGBzdGFibGVgL2B1bnN0YWJsZWAKYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0OQojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4xIiwKICAgIHJlYXNvbiA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIGludmFsaWQKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBhZGQgYWxzbyBhbiBhdHRyaWJ1dGUgYHN0YWJsZWAgb3IgYHVuc3RhYmxlYC4KRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCiNbcnVzdGNfZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4xIiwKICAgIHJlYXNvbiA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIG9rIQpmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5BwABAPkHwwQArXAmAACACQACBwCBCQEAAwDtAg4AAP8IAgUBBFNvbWUBAQC0CQABgAkAAwDtAg4AAv8IAAEDANgCJAAA/ggBAQC0CQACwgQA2QISAAC0CQUBBUUwNTQ5AAEfBQABAAUDANgCJAAA/ggBAQG5CQAB/wgAxQQA3HAmAACFCQAAAsUEANxwJgAAtAkFAfMCTW9yZSB0aGFuIG9uZSBgZGVwcmVjYXRlZGAgYXR0cmlidXRlIGhhcyBiZWVuIHB1dCBvbiBhbiBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1MAojW2RlcHJlY2F0ZWQobm90ZSA9ICJiZWNhdXNlIHdoeSBub3Q/IildCiNbZGVwcmVjYXRlZChub3RlID0gInJpZ2h0PyIpXSAvLyBlcnJvciEKZm4gdGhlX2JhbmlzaGVkKCkge30KYGBgCgpUaGUgYGRlcHJlY2F0ZWRgIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBwcmVzZW50ICoqb25jZSoqIG9uIGFuIGl0ZW0uCgpgYGAKI1tkZXByZWNhdGVkKG5vdGUgPSAiYmVjYXVzZSB3aHkgbm90LCByaWdodD8iKV0KZm4gdGhlX2JhbmlzaGVkKCkge30gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////////wPzAgABAPMCxQQA3HAmAACECQACBwCFCQEAAwDtAg4AAIMJAgUBBFNvbWUBAQC0CQABhAkAAwDtAg4AAoMJAAEDANgCJAAAggkBAQC0CQACxAQA2QISAAC0CQUBBUUwNTUwAAEfBQABAAUDANgCJAAAggkBAQG5CQABgwkAxwQAi3EmAACJCQAAAscEAItxJgAAtAkFAekCQW4gaW52YWxpZCBtZXRhLWl0ZW0gd2FzIHVzZWQgaW5zaWRlIGFuIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTEKI1tkZXByZWNhdGVkKG5vdGUpXSAvLyBlcnJvciEKZm4gaV9hbV9kZXByZWNhdGVkKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuIFRvIGZpeCB0aGlzIGlzc3VlLAp5b3UgbmVlZCB0byBnaXZlIGEgdmFsdWUgdG8gdGhlIGBub3RlYCBrZXkuIEV4YW1wbGU6CgpgYGAKI1tkZXByZWNhdGVkKG5vdGUgPSAiYmVjYXVzZSIpXSAvLyBvayEKZm4gaV9hbV9kZXByZWNhdGVkKCkge30KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////z/pAgABAOkCxwQAi3EmAACICQACBwCJCQEAAwDtAg4AAIcJAgUBBFNvbWUBAQC0CQABiAkAAwDtAg4AAocJAAEDANgCJAAAhgkBAQC0CQACxgQA2QISAAC0CQUBBUUwNTUxAAEfBQABAAUDANgCJAAAhgkBAQG5CQABhwkAyQQAunEmAACNCQAAAskEALpxJgAAtAkFAYQFQSB1bnJlY29nbml6ZWQgcmVwcmVzZW50YXRpb24gYXR0cmlidXRlIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1MgojW3JlcHIoRCldIC8vIGVycm9yOiB1bnJlY29nbml6ZWQgcmVwcmVzZW50YXRpb24gaGludApzdHJ1Y3QgTXlTdHJ1Y3QgewogICAgbXlfZmllbGQ6IHVzaXplCn0KYGBgCgpZb3UgY2FuIHVzZSBhIGByZXByYCBhdHRyaWJ1dGUgdG8gdGVsbCB0aGUgY29tcGlsZXIgaG93IHlvdSB3YW50IGEgc3RydWN0IG9yCmVudW0gdG8gYmUgbGFpZCBvdXQgaW4gbWVtb3J5LgoKTWFrZSBzdXJlIHlvdSdyZSB1c2luZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBvcHRpb25zOgoKYGBgCiNbcmVwcihDKV0gLy8gb2shCnN0cnVjdCBNeVN0cnVjdCB7CiAgICBteV9maWVsZDogdXNpemUKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZnlpbmcgcmVwcmVzZW50YXRpb25zLCBzZWUgdGhlIFsiQWx0ZXJuYXRpdmUKUmVwcmVzZW50YXRpb25zIiBzZWN0aW9uXSBvZiB0aGUgUnVzdG9ub21pY29uLgoKWyJBbHRlcm5hdGl2ZSBSZXByZXNlbnRhdGlvbnMiIHNlY3Rpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25vbWljb24vb3RoZXItcmVwcnMuaHRtbAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAUAAQCEBckEALpxJgAAjAkAAgcAjQkBAAMA7QIOAACLCQIFAQRTb21lAQEAtAkAAYwJAAMA7QIOAAKLCQABAwDYAiQAAIoJAQEAtAkAAsgEANkCEgAAtAkFAQVFMDU1MgABHwUAAQAFAwDYAiQAAIoJAQEBuQkAAYsJAMsEAOlxJgAAkQkAAALLBADpcSYAALQJBQHKA0ZlYXR1cmUgYXR0cmlidXRlcyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBuaWdodGx5IHJlbGVhc2UgY2hhbm5lbC4gU3RhYmxlIG9yCmJldGEgY29tcGlsZXJzIHdpbGwgbm90IGNvbXBseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGRlcGVuZHMgb24gcmVsZWFzZSBjaGFubmVsKQojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXSAvLyBlcnJvcjogYCMhW2ZlYXR1cmVdYCBtYXkgbm90IGJlIHVzZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBzdGFibGUgcmVsZWFzZSBjaGFubmVsCmBgYAoKSWYgeW91IG5lZWQgdGhlIGZlYXR1cmUsIG1ha2Ugc3VyZSB0byB1c2UgYSBuaWdodGx5IHJlbGVhc2Ugb2YgdGhlIGNvbXBpbGVyCihidXQgYmUgd2FybmVkIHRoYXQgdGhlIGZlYXR1cmUgbWF5IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBpbiB0aGUgZnV0dXJlKS4KAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wfKAwABAMoDywQA6XEmAACQCQACBwCRCQEAAwDtAg4AAI8JAgUBBFNvbWUBAQC0CQABkAkAAwDtAg4AAo8JAAEDANgCJAAAjgkBAQC0CQACygQA2QISAAC0CQUBBUUwNTU0AAEfBQABAAUDANgCJAAAjgkBAQG5CQABjwkAzQQAmHImAACVCQAAAs0EAJhyJgAAtAkFAeoCVGhlIGBmZWF0dXJlYCBhdHRyaWJ1dGUgd2FzIGJhZGx5IGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTYKIyFbZmVhdHVyZShmb29fYmFyX2JheiwgZm9vKGJhciksIGZvbyA9ICJiYXoiLCBmb28pXSAvLyBlcnJvciEKIyFbZmVhdHVyZV0gLy8gZXJyb3IhCiMhW2ZlYXR1cmUgPSAiZm9vIl0gLy8gZXJyb3IhCmBgYAoKVGhlIGBmZWF0dXJlYCBhdHRyaWJ1dGUgb25seSBhY2NlcHQgYSAiZmVhdHVyZSBmbGFnIiBhbmQgY2FuIG9ubHkgYmUgdXNlZCBvbgpuaWdodGx5LiBFeGFtcGxlOgoKYGBgaWdub3JlIChvbmx5IHdvcmtzIGluIG5pZ2h0bHkpCiMhW2ZlYXR1cmUoZmxhZyldCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B//////9/6gIAAQDqAs0EAJhyJgAAlAkAAgcAlQkBAAMA7QIOAACTCQIFAQRTb21lAQEAtAkAAZQJAAMA7QIOAAKTCQABAwDYAiQAAJIJAQEAtAkAAswEANkCEgAAtAkFAQVFMDU1NgABHwUAAQAFAwDYAiQAAJIJAQEBuQkAAZMJAM8EAMdyJgAAmQkAAALPBADHciYAALQJBQHWAUEgZmVhdHVyZSBhdHRyaWJ1dGUgbmFtZWQgYSBmZWF0dXJlIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTcKIyFbZmVhdHVyZShtYW5hZ2VkX2JveGVzKV0gLy8gZXJyb3I6IGZlYXR1cmUgaGFzIGJlZW4gcmVtb3ZlZApgYGAKCkRlbGV0ZSB0aGUgb2ZmZW5kaW5nIGZlYXR1cmUgYXR0cmlidXRlLgoABP///////////wH///////////8B////////////Af///wHWAQABANYBzwQAx3ImAACYCQACBwCZCQEAAwDtAg4AAJcJAgUBBFNvbWUBAQC0CQABmAkAAwDtAg4AApcJAAEDANgCJAAAlgkBAQC0CQACzgQA2QISAAC0CQUBBUUwNTU3AAEfBQABAAUDANgCJAAAlgkBAQG5CQABlwkA0QQA9nImAACdCQAAAtEEAPZyJgAAtAkFAaUDQW4gdW5rbm93biBmaWVsZCB3YXMgc3BlY2lmaWVkIGludG8gYW4gZW51bSdzIHN0cnVjdHVyZSB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1OQplbnVtIEZpZWxkIHsKICAgIEZvb2wgeyB4OiB1MzIgfSwKfQoKbGV0IHMgPSBGaWVsZDo6Rm9vbCB7IGpva2U6IDAgfTsKLy8gZXJyb3I6IHN0cnVjdCB2YXJpYW50IGBGaWVsZDo6Rm9vbGAgaGFzIG5vIGZpZWxkIG5hbWVkIGBqb2tlYApgYGAKClZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBmaWVsZCdzIG5hbWUgb3IgdGhhdCB0aGUgZmllbGQgZXhpc3RzLiBFeGFtcGxlOgoKYGBgCmVudW0gRmllbGQgewogICAgRm9vbCB7IGpva2U6IHUzMiB9LAp9CgpsZXQgcyA9IEZpZWxkOjpGb29sIHsgam9rZTogMCB9OyAvLyBvayEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8DpQMAAQClA9EEAPZyJgAAnAkAAgcAnQkBAAMA7QIOAACbCQIFAQRTb21lAQEAtAkAAZwJAAMA7QIOAAKbCQABAwDYAiQAAJoJAQEAtAkAAtAEANkCEgAAtAkFAQVFMDU1OQABHwUAAQAFAwDYAiQAAJoJAQEBuQkAAZsJANMEAKVzJgAAoQkAAALTBAClcyYAALQJBQGkA0FuIHVua25vd24gZmllbGQgd2FzIHNwZWNpZmllZCBpbnRvIGEgc3RydWN0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MApzdHJ1Y3QgU2ltYmEgewogICAgbW90aGVyOiB1MzIsCn0KCmxldCBzID0gU2ltYmEgeyBtb3RoZXI6IDEsIGZhdGhlcjogMCB9OwovLyBlcnJvcjogc3RydWN0dXJlIGBTaW1iYWAgaGFzIG5vIGZpZWxkIG5hbWVkIGBmYXRoZXJgCmBgYAoKVmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGZpZWxkJ3MgbmFtZSBvciB0aGF0IHRoZSBmaWVsZCBleGlzdHMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFNpbWJhIHsKICAgIG1vdGhlcjogdTMyLAogICAgZmF0aGVyOiB1MzIsCn0KCmxldCBzID0gU2ltYmEgeyBtb3RoZXI6IDEsIGZhdGhlcjogMCB9OyAvLyBvayEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8BpAMAAQCkA9MEAKVzJgAAoAkAAgcAoQkBAAMA7QIOAACfCQIFAQRTb21lAQEAtAkAAaAJAAMA7QIOAAKfCQABAwDYAiQAAJ4JAQEAtAkAAtIEANkCEgAAtAkFAQVFMDU2MAABHwUAAQAFAwDYAiQAAJ4JAQEBuQkAAZ8JANUEANRzJgAApQkAAALVBADUcyYAALQJBQGSBEEgbm9uLWlkZW50IG9yIG5vbi13aWxkY2FyZCBwYXR0ZXJuIGhhcyBiZWVuIHVzZWQgYXMgYSBwYXJhbWV0ZXIgb2YgYSBmdW5jdGlvbgpwb2ludGVyIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTYxCnR5cGUgQTEgPSBmbihtdXQgcGFyYW06IHU4KTsgLy8gZXJyb3IhCnR5cGUgQTIgPSBmbigmcGFyYW06IHUzMik7IC8vIGVycm9yIQpgYGAKCldoZW4gdXNpbmcgYW4gYWxpYXMgb3ZlciBhIGZ1bmN0aW9uIHR5cGUsIHlvdSBjYW5ub3QgZS5nLiBkZW5vdGUgYSBwYXJhbWV0ZXIgYXMKYmVpbmcgbXV0YWJsZS4KClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSBwYXR0ZXJucyAoYF9gIGlzIGFsbG93ZWQgdGhvdWdoKS4gRXhhbXBsZToKCmBgYAp0eXBlIEExID0gZm4ocGFyYW06IHU4KTsgLy8gb2shCnR5cGUgQTIgPSBmbihfOiB1MzIpOyAvLyBvayEKYGBgCgpZb3UgY2FuIGFsc28gb21pdCB0aGUgcGFyYW1ldGVyIG5hbWU6CgpgYGAKdHlwZSBBMyA9IGZuKGkxNik7IC8vIG9rIQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IEAAEAkgTVBADUcyYAAKQJAAIHAKUJAQADAO0CDgAAowkCBQEEU29tZQEBALQJAAGkCQADAO0CDgACowkAAQMA2AIkAACiCQEBALQJAALUBADZAhIAALQJBQEFRTA1NjEAAR8FAAEABQMA2AIkAACiCQEBAbkJAAGjCQDXBACDdCYAAKkJAAAC1wQAg3QmAAC0CQUBhAZBYnN0cmFjdCByZXR1cm4gdHlwZXMgKHdyaXR0ZW4gYGltcGwgVHJhaXRgIGZvciBzb21lIHRyYWl0IGBUcmFpdGApIGFyZSBvbmx5CmFsbG93ZWQgYXMgZnVuY3Rpb24gYW5kIGluaGVyZW50IGltcGwgcmV0dXJuIHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MgpmbiBtYWluKCkgewogICAgbGV0IGNvdW50X3RvX3RlbjogaW1wbCBJdGVyYXRvcjxJdGVtPXVzaXplPiA9IDAuLjEwOwogICAgLy8gZXJyb3I6IGBpbXBsIFRyYWl0YCBub3QgYWxsb3dlZCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGFuZCBpbmhlcmVudCBtZXRob2QKICAgIC8vICAgICAgICByZXR1cm4gdHlwZXMKICAgIGZvciBpIGluIGNvdW50X3RvX3RlbiB7CiAgICAgICAgcHJpbnRsbiEoInt9IiwgaSk7CiAgICB9Cn0KYGBgCgpNYWtlIHN1cmUgYGltcGwgVHJhaXRgIG9ubHkgYXBwZWFycyBpbiByZXR1cm4tdHlwZSBwb3NpdGlvbi4KCmBgYApmbiBjb3VudF90b19uKG46IHVzaXplKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW09dXNpemU+IHsKICAgIDAuLm4KfQoKZm4gbWFpbigpIHsKICAgIGZvciBpIGluIGNvdW50X3RvX24oMTApIHsgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIGkpOwogICAgfQp9CmBgYAoKU2VlIFtSRkMgMTUyMl0gZm9yIG1vcmUgZGV0YWlscy4KCltSRkMgMTUyMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzE1MjItY29uc2VydmF0aXZlLWltcGwtdHJhaXQubWQKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAYAAQCEBtcEAIN0JgAAqAkAAgcAqQkBAAMA7QIOAACnCQIFAQRTb21lAQEAtAkAAagJAAMA7QIOAAKnCQABAwDYAiQAAKYJAQEAtAkAAtYEANkCEgAAtAkFAQVFMDU2MgABHwUAAQAFAwDYAiQAAKYJAQEBuQkAAacJANkEALJ0JgAArQkAAALZBACydCYAALQJBQG/A0EgbGl0ZXJhbCB3YXMgdXNlZCBpbiBhIGJ1aWx0LWluIGF0dHJpYnV0ZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBsaXRlcmFscy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjUKI1tyZXByKCJDIildIC8vIGVycm9yOiBtZXRhIGl0ZW0gaW4gYHJlcHJgIG11c3QgYmUgYW4gaWRlbnRpZmllcgpzdHJ1Y3QgUmVwciB7fQoKZm4gbWFpbigpIHt9CmBgYAoKTGl0ZXJhbHMgaW4gYXR0cmlidXRlcyBhcmUgbmV3IGFuZCBsYXJnZWx5IHVuc3VwcG9ydGVkIGluIGJ1aWx0LWluIGF0dHJpYnV0ZXMuCldvcmsgdG8gc3VwcG9ydCBsaXRlcmFscyB3aGVyZSBhcHByb3ByaWF0ZSBpcyBvbmdvaW5nLiBUcnkgdXNpbmcgYW4gdW5xdW90ZWQKbmFtZSBpbnN0ZWFkOgoKYGBgCiNbcmVwcihDKV0gLy8gb2shCnN0cnVjdCBSZXByIHt9CgpmbiBtYWluKCkge30KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////9/vwMAAQC/A9kEALJ0JgAArAkAAgcArQkBAAMA7QIOAACrCQIFAQRTb21lAQEAtAkAAawJAAMA7QIOAAKrCQABAwDYAiQAAKoJAQEAtAkAAtgEANkCEgAAtAkFAQVFMDU2NQABHwUAAQAFAwDYAiQAAKoJAQEBuQkAAasJANsEAOF0JgAAsQkAAALbBADhdCYAALQJBQGvA0NvbmZsaWN0aW5nIHJlcHJlc2VudGF0aW9uIGhpbnRzIGhhdmUgYmVlbiB1c2VkIG9uIGEgc2FtZSBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NgojW3JlcHIodTMyLCB1NjQpXQplbnVtIFJlcHIgeyBBIH0KYGBgCgpJbiBtb3N0IGNhc2VzIChpZiBub3QgYWxsKSwgdXNpbmcganVzdCBvbmUgcmVwcmVzZW50YXRpb24gaGludCBpcyBtb3JlIHRoYW4KZW5vdWdoLiBJZiB5b3Ugd2FudCB0byBoYXZlIGEgcmVwcmVzZW50YXRpb24gaGludCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKYXJjaGl0ZWN0dXJlLCB1c2UgYGNmZ19hdHRyYC4gRXhhbXBsZToKCmBgYAojW2NmZ19hdHRyKGxpbnV4LCByZXByKHUzMikpXQojW2NmZ19hdHRyKG5vdChsaW51eCksIHJlcHIodTY0KSldCmVudW0gUmVwciB7IEEgfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8frwMAAQCvA9sEAOF0JgAAsAkAAgcAsQkBAAMA7QIOAACvCQIFAQRTb21lAQEAtAkAAbAJAAMA7QIOAAKvCQABAwDYAiQAAK4JAQEAtAkAAtoEANkCEgAAtAkFAQVFMDU2NgABHwUAAQAFAwDYAiQAAK4JAQEBuQkAAa8JAN0EAJB1JgAAtQkAAALdBACQdSYAALQJBQG3A0dlbmVyaWNzIGhhdmUgYmVlbiB1c2VkIG9uIGFuIGF1dG8gdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY3CiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKYXV0byB0cmFpdCBHZW5lcmljPFQ+IHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKClNpbmNlIGFuIGF1dG8gdHJhaXQgaXMgaW1wbGVtZW50ZWQgb24gYWxsIGV4aXN0aW5nIHR5cGVzLCB0aGUKY29tcGlsZXIgd291bGQgbm90IGJlIGFibGUgdG8gaW5mZXIgdGhlIHR5cGVzIG9mIHRoZSB0cmFpdCdzIGdlbmVyaWMKcGFyYW1ldGVycy4KClRvIGZpeCB0aGlzIGlzc3VlLCBqdXN0IHJlbW92ZSB0aGUgZ2VuZXJpY3M6CgpgYGAKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEdlbmVyaWMge30gLy8gb2shCiMgZm4gbWFpbigpIHt9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twMAAQC3A90EAJB1JgAAtAkAAgcAtQkBAAMA7QIOAACzCQIFAQRTb21lAQEAtAkAAbQJAAMA7QIOAAKzCQABAwDYAiQAALIJAQEAtAkAAtwEANkCEgAAtAkFAQVFMDU2NwABHwUAAQAFAwDYAiQAALIJAQEBuQkAAbMJAN8EAL91JgAAuQkAAALfBAC/dSYAALQJBQGqBEEgc3VwZXIgdHJhaXQgaGFzIGJlZW4gYWRkZWQgdG8gYW4gYXV0byB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjgKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEJvdW5kIDogQ29weSB7fSAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKClNpbmNlIGFuIGF1dG8gdHJhaXQgaXMgaW1wbGVtZW50ZWQgb24gYWxsIGV4aXN0aW5nIHR5cGVzLCBhZGRpbmcgYSBzdXBlciB0cmFpdAp3b3VsZCBmaWx0ZXIgb3V0IGEgbG90IG9mIHRob3NlIHR5cGVzLiBJbiB0aGUgY3VycmVudCBleGFtcGxlLCBhbG1vc3Qgbm9uZSBvZgphbGwgdGhlIGV4aXN0aW5nIHR5cGVzIGNvdWxkIGltcGxlbWVudCBgQm91bmRgIGJlY2F1c2UgdmVyeSBmZXcgb2YgdGhlbSBoYXZlIHRoZQpgQ29weWAgdHJhaXQuCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIHN1cGVyIHRyYWl0OgoKYGBgCiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKYXV0byB0cmFpdCBCb3VuZCB7fSAvLyBvayEKCmZuIG1haW4oKSB7fQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f6oEAAEAqgTfBAC/dSYAALgJAAIHALkJAQADAO0CDgAAtwkCBQEEU29tZQEBALQJAAG4CQADAO0CDgACtwkAAQMA2AIkAAC2CQEBALQJAALeBADZAhIAALQJBQEFRTA1NjgA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ZW50ICh3aGljaCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiB0aGUgbG9vcApleHByZXNzaW9uIGlmIHRoZSBgYnJlYWtgIHN0YXRlbWVudCBpcyBleGVjdXRlZCkgaW4gYGxvb3BgIGxvb3BzLCBidXQgbm90CmBmb3JgLCBgd2hpbGVgLCBvciBgd2hpbGUgbGV0YCBsb29wcy4KCk1ha2Ugc3VyZSBgYnJlYWsgdmFsdWU7YCBzdGF0ZW1lbnRzIG9ubHkgb2NjdXIgaW4gYGxvb3BgIGxvb3BzOgoKYGBgCiMgbGV0IG11dCBpID0gMTsKIyBmbiBzYXRpc2ZpZWQobjogdXNpemUpIC0+IGJvb2wgeyBuICUgMjMgPT0gMCB9CmxldCByZXN1bHQgPSBsb29wIHsgLy8gVGhpcyBpcyBub3cgYSAibG9vcCIgbG9vcC4KICAgIGlmIHNhdGlzZmllZChpKSB7CiAgICAgICAgYnJlYWsgMiAqIGk7IC8vIG9rIQogICAgfQogICAgaSArPSAxOwp9OwpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44GAAEAjgblBADMdiYAAMQJAAIHAMUJAQADAO0CDgAAwwkCBQEEU29tZQEBALQJAAHECQADAO0CDgACwwkAAQMA2AIkAADCCQEBALQJAALkBADZAhIAALQJBQEFRTA1NzEAAR8FAAEABQMA2AIkAADCCQEBAbkJAAHDCQDnBAD7diYAAMkJAAAC5wQA+3YmAAC0CQUBkgNBIHJldHVybiBzdGF0ZW1lbnQgd2FzIGZvdW5kIG91dHNpZGUgb2YgYSBmdW5jdGlvbiBib2R5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3Mgpjb25zdCBGT086IHUzMiA9IHJldHVybiAwOyAvLyBlcnJvcjogcmV0dXJuIHN0YXRlbWVudCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGJvZHkKCmZuIG1haW4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCBqdXN0IHJlbW92ZSB0aGUgcmV0dXJuIGtleXdvcmQgb3IgbW92ZSB0aGUgZXhwcmVzc2lvbiBpbnRvIGEKZnVuY3Rpb24uIEV4YW1wbGU6CgpgYGAKY29uc3QgRk9POiB1MzIgPSAwOwoKZm4gc29tZV9mbigpIC0+IHUzMiB7CiAgICByZXR1cm4gRk9POwp9CgpmbiBtYWluKCkgewogICAgc29tZV9mbigpOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IDAAEAkgPnBAD7diYAAMgJAAIHAMkJAQADAO0CDgAAxwkCBQEEU29tZQEBALQJAAHICQADAO0CDgACxwkAAQMA2AIkAADGCQEBALQJAALmBADZAhIAALQJBQEFRTA1NzIAAR8FAAEABQMA2AIkAADGCQEBAbkJAAHHCQDpBACqdyYAAM0JAAAC6QQAqncmAAC0CQUB0ApTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR5cGUgaGFzIGJlZW4gdXNlZCB3aGVuIG9uZSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDU3MwplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbjo6Qm9ybiB7IC8vIGVycm9yIQogICAgRHJhZ29uOjpCb3JuCn0KCmNvbnN0IEhPQkJJVDogdTMyID0gMjsKaW1wbCBIT0JCSVQge30gLy8gZXJyb3IhCgplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKF86IFdpemFyZDo6U2FydW1hbik7IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwgaWYKd2Ugd2FudCB0byByZXR1cm4gdGhlIGBCb3JuYCB2YXJpYW50IGZyb20gdGhlIGBEcmFnb25gIGVudW0sIHdlIG11c3Qgc2V0IHRoZQpmdW5jdGlvbiB0byByZXR1cm4gdGhlIGVudW0gYW5kIG5vdCBpdHMgdmFyaWFudDoKCmBgYAplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbiB7IC8vIG9rIQogICAgRHJhZ29uOjpCb3JuCn0KYGBgCgpJbiB0aGUgc2Vjb25kIGVycm9yLCB5b3UgY2FuJ3QgaW1wbGVtZW50IHNvbWV0aGluZyBvbiBhbiBpdGVtLCBvbmx5IG9uIHR5cGVzLgpXZSB3b3VsZCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0eXBlIGlmIHdlIHdhbnRlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhcjoKCmBgYApzdHJ1Y3QgSG9iYml0KHUzMik7IC8vIHdlIGNyZWF0ZSBhIG5ldyB0eXBlCgpjb25zdCBIT0JCSVQ6IEhvYmJpdCA9IEhvYmJpdCgyKTsKaW1wbCBIb2JiaXQge30gLy8gb2shCmBgYAoKSW4gdGhlIHRoaXJkIGNhc2UsIHdlIHRyaWVkIHRvIG9ubHkgZXhwZWN0IG9uZSB2YXJpYW50IG9mIHRoZSBgV2l6YXJkYCBlbnVtLAp3aGljaCBpcyBub3QgcG9zc2libGUuIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBuZWVkIHRvIHVzaW5nIHBhdHRlcm4gbWF0Y2hpbmcKb3ZlciB0aGUgYFdpemFyZGAgZW51bToKCmBgYAplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKHc6IFdpemFyZCkgeyAvLyBvayEKICAgICAgICBtYXRjaCB3IHsKICAgICAgICAgICAgV2l6YXJkOjpTYXJ1bWFuID0+IHsKICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgICAgICAgICB9CiAgICAgICAgICAgIF8gPT4ge30gLy8gaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQogICAgICAgIH0KICAgIH0KfQpgYGAKABb///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wPQCgABANAK6QQAqncmAADMCQACBwDNCQEAAwDtAg4AAMsJAgUBBFNvbWUBAQC0CQABzAkAAwDtAg4AAssJAAEDANgCJAAAygkBAQC0CQAC6AQA2QISAAC0CQUBBUUwNTczAAEfBQABAAUDANgCJAAAygkBAQG5CQABywkA6wQA2XcmAADRCQAAAusEANl3JgAAtAkFAZQHU29tZXRoaW5nIG90aGVyIHRoYW4gYSBzdHJ1Y3QsIHZhcmlhbnQgb3IgdW5pb24gaGFzIGJlZW4gdXNlZCB3aGVuIG9uZSB3YXMKZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc0Cm1vZCBNb3Jkb3Ige30KCmxldCBzYXVyb24gPSBNb3Jkb3IgeyB4OiAoKSB9OyAvLyBlcnJvciEKCmVudW0gSmFrIHsKICAgIERheHRlciB7IGk6IGlzaXplIH0sCn0KCmxldCBlY28gPSBKYWs6OkRheHRlciB7IGk6IDEgfTsKbWF0Y2ggZWNvIHsKICAgIEphayB7IGkgfSA9PiB7fSAvLyBlcnJvciEKfQpgYGAKCkluIGFsbCB0aGVzZSBlcnJvcnMsIGEgdHlwZSB3YXMgZXhwZWN0ZWQuIEZvciBleGFtcGxlLCBpbiB0aGUgZmlyc3QgZXJyb3IsCndlIHRyaWVkIHRvIGluc3RhbnRpYXRlIHRoZSBgTW9yZG9yYCBtb2R1bGUsIHdoaWNoIGlzIGltcG9zc2libGUuIElmIHlvdSB3YW50CnRvIGluc3RhbnRpYXRlIGEgdHlwZSBpbnNpZGUgYSBtb2R1bGUsIHlvdSBjYW4gZG8gaXQgYXMgZm9sbG93OgoKYGBgCm1vZCBNb3Jkb3IgewogICAgcHViIHN0cnVjdCBUaGVSaW5nIHsKICAgICAgICBwdWIgeDogdXNpemUsCiAgICB9Cn0KCmxldCBzYXVyb24gPSBNb3Jkb3I6OlRoZVJpbmcgeyB4OiAxIH07IC8vIG9rIQpgYGAKCkluIHRoZSBzZWNvbmQgZXJyb3IsIHdlIHRyaWVkIHRvIGJpbmQgdGhlIGBKYWtgIGVudW0gZGlyZWN0bHksIHdoaWNoIGlzIG5vdApwb3NzaWJsZTogeW91IGNhbiBvbmx5IGJpbmQgb25lIG9mIGl0cyB2YXJpYW50cy4gVG8gZG8gc286CgpgYGAKZW51bSBKYWsgewogICAgRGF4dGVyIHsgaTogaXNpemUgfSwKfQoKbGV0IGVjbyA9IEphazo6RGF4dGVyIHsgaTogMSB9OwptYXRjaCBlY28gewogICAgSmFrOjpEYXh0ZXIgeyBpIH0gPT4ge30gLy8gb2shCn0KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//z+UBwABAJQH6wQA2XcmAADQCQACBwDRCQEAAwDtAg4AAM8JAgUBBFNvbWUBAQC0CQAB0AkAAwDtAg4AAs8JAAEDANgCJAAAzgkBAQC0CQAC6gQA2QISAAC0CQUBBUUwNTc0AAEfBQABAAUDANgCJAAAzgkBAQG5CQABzwkA7QQAiHgmAADVCQAAAu0EAIh4JgAAtAkFAdgHU29tZXRoaW5nIG90aGVyIHRoYW4gYSB0eXBlIG9yIGFuIGFzc29jaWF0ZWQgdHlwZSB3YXMgZ2l2ZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc1CmVudW0gUmljayB7IE1vcnR5IH0KCmxldCBfOiA8dTggYXMgUmljaz46Ok1vcnR5OyAvLyBlcnJvciEKCnRyYWl0IEFnZSB7CiAgICB0eXBlIEVtcGlyZTsKICAgIGZuIE15dGhvbG9neSgpIHt9Cn0KCmltcGwgQWdlIGZvciB1OCB7CiAgICB0eXBlIEVtcGlyZSA9IHUxNjsKfQoKbGV0IF86IDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3k7IC8vIGVycm9yIQpgYGAKCkluIGJvdGggY2FzZXMsIHdlJ3JlIGRlY2xhcmluZyBhIHZhcmlhYmxlIChjYWxsZWQgYF9gKSBhbmQgd2UncmUgZ2l2aW5nIGl0IGEKdHlwZS4gSG93ZXZlciwgYDx1OCBhcyBSaWNrPjo6TW9ydHlgIGFuZCBgPHU4IGFzIEFnZT46Ok15dGhvbG9neWAgYXJlbid0IHR5cGVzLAp0aGVyZWZvcmUgdGhlIGNvbXBpbGVyIHRocm93cyBhbiBlcnJvci4KCmA8dTggYXMgUmljaz46Ok1vcnR5YCBpcyBhbiBlbnVtIHZhcmlhbnQsIHlvdSBjYW5ub3QgdXNlIGEgdmFyaWFudCBhcyBhIHR5cGUsCnlvdSBoYXZlIHRvIHVzZSB0aGUgZW51bSBkaXJlY3RseToKCmBgYAplbnVtIFJpY2sgeyBNb3J0eSB9CgpsZXQgXzogUmljazsgLy8gb2shCmBgYAoKYDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3lgIGlzIGEgdHJhaXQgbWV0aG9kLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCBhIHR5cGUuCkhvd2V2ZXIsIHRoZSBgQWdlYCB0cmFpdCBwcm92aWRlcyBhbiBhc3NvY2lhdGVkIHR5cGUgYEVtcGlyZWAgd2hpY2ggY2FuIGJlCnVzZWQgYXMgYSB0eXBlOgoKYGBgCnRyYWl0IEFnZSB7CiAgICB0eXBlIEVtcGlyZTsKICAgIGZuIE15dGhvbG9neSgpIHt9Cn0KCmltcGwgQWdlIGZvciB1OCB7CiAgICB0eXBlIEVtcGlyZSA9IHUxNjsKfQoKbGV0IF86IDx1OCBhcyBBZ2U+OjpFbXBpcmU7IC8vIG9rIQpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8H2AcAAQDYB+0EAIh4JgAA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IGJlIGluc2lkZSBpdCBhbmQgZmFpbHMgYmVjYXVzZSB0aGUgbWFjcm8gZGVmaW5pdGlvbiBjYW5ub3QgYmUKZm91bmQuCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGJlIHN1cmUgdGhhdCB0aGUgbW9kdWxlIGlzIGluIHNjb3BlOgoKYGBgZWRpdGlvbjIwMTgKcHViIG1vZCBTZWEgewogICAgcHViIChpbiBjcmF0ZTo6U2VhKSBzdHJ1Y3QgU2hhcms7Cn0KCmZuIG1haW4oKSB7fQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ+EBAABAIQE8wQAlXkmAADgCQACBwDhCQEAAwDtAg4AAN8JAgUBBFNvbWUBAQC0CQAB4AkAAwDtAg4AAt8JAAEDANgCJAAA3gkBAQC0CQAC8gQA2QISAAC0CQUBBUUwNTc4AAEfBQABAAUDANgCJAAA3gkBAQG5CQAB3wkA9QQAxHkmAADlCQAAAvUEAMR5JgAAtAkFAdMEQSBsb3dlciByYW5nZSB3YXNuJ3QgbGVzcyB0aGFuIHRoZSB1cHBlciByYW5nZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzkKIyFbZmVhdHVyZShleGNsdXNpdmVfcmFuZ2VfcGF0dGVybildCgpmbiBtYWluKCkgewogICAgbWF0Y2ggNXUzMiB7CiAgICAgICAgLy8gVGhpcyByYW5nZSBpcyBvaywgYWxiZWl0IHBvaW50bGVzcy4KICAgICAgICAxIC4uIDIgPT4ge30KICAgICAgICAvLyBUaGlzIHJhbmdlIGlzIGVtcHR5LCBhbmQgdGhlIGNvbXBpbGVyIGNhbiB0ZWxsLgogICAgICAgIDUgLi4gNSA9PiB7fSAvLyBlcnJvciEKICAgIH0KfQpgYGAKCldoZW4gbWF0Y2hpbmcgYWdhaW5zdCBhbiBleGNsdXNpdmUgcmFuZ2UsIHRoZSBjb21waWxlciB2ZXJpZmllcyB0aGF0IHRoZSByYW5nZQppcyBub24tZW1wdHkuIEV4Y2x1c2l2ZSByYW5nZSBwYXR0ZXJucyBpbmNsdWRlIHRoZSBzdGFydCBwb2ludCBidXQgbm90IHRoZSBlbmQKcG9pbnQsIHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0byByZXF1aXJpbmcgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZSBsZXNzCnRoYW4gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wQAAQDTBPUEAMR5JgAA5AkAAgcA5QkBAAMA7QIOAADjCQIFAQRTb21lAQEAtAkAAeQJAAMA7QIOAALjCQABAwDYAiQAAOIJAQEAtAkAAvQEANkCEgAAtAkFAQVFMDU3OQABHwUAAQAFAwDYAiQAAOIJAQEBuQkAAeMJAPcEAPN5JgAA6QkAAAL3BADzeSYAALQJBQGhA1RoZSBgbWFpbmAgZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4MApmbiBtYWluKHg6IGkzMikgeyAvLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBoYXMgd3JvbmcgdHlwZQogICAgcHJpbnRsbiEoInt9IiwgeCk7Cn0KYGBgCgpUaGUgYG1haW5gIGZ1bmN0aW9uIHByb3RvdHlwZSBzaG91bGQgbmV2ZXIgdGFrZSBhcmd1bWVudHMuCkV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIHlvdXIgY29kZQp9CmBgYAoKSWYgeW91IHdhbnQgdG8gZ2V0IGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHVzZSBgc3RkOjplbnY6OmFyZ3NgLiBUbyBleGl0IHdpdGggYQpzcGVjaWZpZWQgZXhpdCBjb2RlLCB1c2UgYHN0ZDo6cHJvY2Vzczo6ZXhpdGAuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x+hAwABAKED9wQA83kmAADoCQACBwDpCQEAAwDtAg4AAOcJAgUBBFNvbWUBAQC0CQAB6AkAAwDtAg4AAucJAAEDANgCJAAA5gkBAQC0CQAC9gQA2QISAAC0CQUBBUUwNTgwAAEfBQABAAUDANgCJAAA5gkBAQG5CQAB5wkA+QQAonomAADtCQAAAvkEAKJ6JgAAtAkFAdMGSW4gYSBgZm5gIHR5cGUsIGEgbGlmZXRpbWUgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZQphbmQgbm90IGluIHRoZSBhcmd1bWVudHMgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgxCmZuIG1haW4oKSB7CiAgICAvLyBIZXJlLCBgJ2FgIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGU6CiAgICBsZXQgeDogZm9yPCdhPiBmbigpIC0+ICYnYSBpMzI7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIGxpZmV0aW1lIGlzbid0IGNvbnRyYWluZWQgYnkgYW55IG9mIHRoZSBhcmd1bWVudHMsCm1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBob3cgbG9uZyBpdCdzIHN1cHBvc2VkIHRvIGxpdmUuCgpUbyBmaXggdGhpcyBpc3N1ZSwgZWl0aGVyIHVzZSB0aGUgbGlmZXRpbWUgaW4gdGhlIGFyZ3VtZW50cywgb3IgdXNlIHRoZQpgJ3N0YXRpY2AgbGlmZXRpbWUuIEV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIEhlcmUsIGAnYWAgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZToKICAgIGxldCB4OiBmb3I8J2E+IGZuKCYnYSBpMzIpIC0+ICYnYSBpMzI7CiAgICBsZXQgeTogZm4oKSAtPiAmJ3N0YXRpYyBpMzI7Cn0KYGBgCgpOb3RlOiBUaGUgZXhhbXBsZXMgYWJvdmUgdXNlZCB0byBiZSAoZXJyb25lb3VzbHkpIGFjY2VwdGVkIGJ5IHRoZQpjb21waWxlciwgYnV0IHRoaXMgd2FzIHNpbmNlIGNvcnJlY3RlZC4gU2VlIFtpc3N1ZSAjMzM2ODVdIGZvciBtb3JlCmRldGFpbHMuCgpbaXNzdWUgIzMzNjg1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8zMzY4NQoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x/TBgABANMG+QQAonomAADsCQACBwDtCQEAAwDtAg4AAOsJAgUBBFNvbWUBAQC0CQAB7AkAAwDtAg4AAusJAAEDANgCJAAA6gkBAQC0CQAC+AQA2QISAAC0CQUBBUUwNTgxAAEfBQABAAUDANgCJAAA6gkBAQG5CQAB6wkA+wQA0XomAADxCQAAAvsEANF6JgAAtAkFAaAGQSBsaWZldGltZSBpcyBvbmx5IHByZXNlbnQgaW4gYW4gYXNzb2NpYXRlZC10eXBlIGJpbmRpbmcsIGFuZCBub3QgaW4gdGhlIGlucHV0CnR5cGVzIHRvIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODIKZm4gYmFyPEY+KHQ6IEYpCiAgICAvLyBObyB0eXBlIGNhbiBzYXRpc2Z5IHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIGAnYWAgZG9lcyBub3QKICAgIC8vIGFwcGVhciBpbiBhbnkgb2YgdGhlIGlucHV0IHR5cGVzIChoZXJlLCBgaTMyYCk6CiAgICB3aGVyZSBGOiBmb3I8J2E+IEZuKGkzMikgLT4gT3B0aW9uPCYnYSBpMzI+CnsKfQoKZm4gbWFpbigpIHsgfQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCBlaXRoZXIgdXNlIHRoZSBsaWZldGltZSBpbiB0aGUgaW5wdXRzLCBvciB1c2UKYCdzdGF0aWNgLiBFeGFtcGxlOgoKYGBgCmZuIGJhcjxGLCBHPih0OiBGLCB1OiBHKQogICAgd2hlcmUgRjogZm9yPCdhPiBGbigmJ2EgaTMyKSAtPiBPcHRpb248JidhIGkzMj4sCiAgICAgICAgICBHOiBGbihpMzIpIC0+IE9wdGlvbjwmJ3N0YXRpYyBpMzI+LAp7Cn0KCmZuIG1haW4oKSB7IH0KYGBgCgpOb3RlOiBUaGUgZXhhbXBsZXMgYWJvdmUgdXNlZCB0byBiZSAoZXJyb25lb3VzbHkpIGFjY2VwdGVkIGJ5IHRoZQpjb21waWxlciwgYnV0IHRoaXMgd2FzIHNpbmNlIGNvcnJlY3RlZC4gU2VlIFtpc3N1ZSAjMzM2ODVdIGZvciBtb3JlCmRldGFpbHMuCgpbaXNzdWUgIzMzNjg1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8zMzY4NQoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8PoAYAAQCgBvsEANF6JgAA8AkAAgcA8QkBAAMA7QIOAADvCQIFAQRTb21lAQEAtAkAAfAJAAMA7QIOAALvCQABAwDYAiQAAO4JAQEAtAkAAvoEANkCEgAAtAkFAQVFMDU4MgABHwUAAQAFAwDYAiQAAO4JAQEBuQkAAe8JAP0EAIB7JgAA9QkAAAL9BACAeyYAALQJBQGhA0EgZmlsZSB3YXNuJ3QgZm91bmQgZm9yIGFuIG91dC1vZi1saW5lIG1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODMKbW9kIGZpbGVfdGhhdF9kb2VzbnRfZXhpc3Q7IC8vIGVycm9yOiBmaWxlIG5vdCBmb3VuZCBmb3IgbW9kdWxlCgpmbiBtYWluKCkge30KYGBgCgpQbGVhc2UgYmUgc3VyZSB0aGF0IGEgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2R1bGUgZXhpc3RzLiBJZiB5b3UKd2FudCB0byB1c2UgYSBtb2R1bGUgbmFtZWQgYGZpbGVfdGhhdF9kb2VzbnRfZXhpc3RgLCB5b3UgbmVlZCB0byBoYXZlIGEgZmlsZQpuYW1lZCBgZmlsZV90aGF0X2RvZXNudF9leGlzdC5yc2Agb3IgYGZpbGVfdGhhdF9kb2VzbnRfZXhpc3QvbW9kLnJzYCBpbiB0aGUKc2FtZSBkaXJlY3RvcnkuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x+hAwABAKED/QQAgHsmAAD0CQACBwD1CQEAAwDtAg4AAPMJAgUBBFNvbWUBAQC0CQAB9AkAAwDtAg4AAvMJAAEDANgCJAAA8gkBAQC0CQAC/AQA2QISAAC0CQUBBUUwNTgzAAEfBQABAAUDANgCJAAA8gkBAQG5CQAB8wkA/wQAr3smAAD5CQAAAv8EAK97JgAAtAkFAYgEQSBkb2MgY29tbWVudCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhbnl0aGluZyBoYXMgYmVlbiBlbmNvdW50ZXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODQKdHJhaXQgSXNsYW5kIHsKICAgIGZuIGxvc3QoKTsKCiAgICAvLy8gSSdtIGxvc3QhCn0KYGBgCgpBIGxpdHRsZSByZW1pbmRlcjogYSBkb2MgY29tbWVudCBoYXMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUgaXRlbSBpdCdzIHN1cHBvc2VkCnRvIGRvY3VtZW50LiBTbyBpZiB5b3Ugd2FudCB0byBkb2N1bWVudCB0aGUgYElzbGFuZGAgdHJhaXQsIHlvdSBuZWVkIHRvIHB1dCBhCmRvYyBjb21tZW50IGJlZm9yZSBpdCwgbm90IGluc2lkZSBpdC4gU2FtZSBnb2VzIGZvciB0aGUgYGxvc3RgIG1ldGhvZDogdGhlIGRvYwpjb21tZW50IG5lZWRzIHRvIGJlIGJlZm9yZSBpdDoKCmBgYAovLy8gSSdtIFRIRSBpc2xhbmQhCnRyYWl0IElzbGFuZCB7CiAgICAvLy8gSSdtIGxvc3QhCiAgICBmbiBsb3N0KCk7Cn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AYgEAAEAiAT/BACveyYAAPgJAAIHAPkJAQADAO0CDgAA9wkCBQEEU29tZQEBALQJAAH4CQADAO0CDgAC9wkAAQMA2AIkAAD2CQEBALQJAAL+BADZAhIAALQJBQEFRTA1ODQAAR8FAAEABQMA2AIkAAD2CQEBAbkJAAH3CQCBBQDeeyYAAP0JAAACgQUA3nsmAAC0CQUBuQNBIGRvY3VtZW50YXRpb24gY29tbWVudCB0aGF0IGRvZXNuJ3QgZG9jdW1lbnQgYW55dGhpbmcgd2FzIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NQpmbiBtYWluKCkgewogICAgLy8gVGhlIGZvbGxvd2luZyBkb2MgY29tbWVudCB3aWxsIGZhaWw6CiAgICAvLy8gVGhpcyBpcyBhIHVzZWxlc3MgZG9jIGNvbW1lbnQhCn0KYGBgCgpEb2N1bWVudGF0aW9uIGNvbW1lbnRzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgaXRlbXMsIGluY2x1ZGluZyBmdW5jdGlvbnMsCnR5cGVzLCBtb2R1bGVzLCBldGMuIEV4YW1wbGVzOgoKYGBgCi8vLyBJJ20gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyBzdHJ1Y3Q6CnN0cnVjdCBGb287CgovLy8gSSdtIGRvY3VtZW50aW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CmZuIGZvbygpIHt9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AbkDAAEAuQOBBQDeeyYAAPwJAAIHAP0JAQADAO0CDgAA+wkCBQEEU29tZQEBALQJAAH8CQADAO0CDgAC+wkAAQMA2AIkAAD6CQEBALQJAAKABQDZAhIAALQJBQEFRTA1ODUAAR8FAAEABQMA2AIkAAD6CQEBAbkJAAH7CQCDBQCNfCYAAIEKAAACgwUAjXwmAAC0CQUB4wRBbiBpbmNsdXNpdmUgcmFuZ2Ugd2FzIHVzZWQgd2l0aCBubyBlbmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg2CmZuIG1haW4oKSB7CiAgICBsZXQgdG1wID0gdmVjIVswLCAxLCAyLCAzLCA0LCA0LCAzLCAzLCAyLCAxXTsKICAgIGxldCB4ID0gJnRtcFsxLi49XTsgLy8gZXJyb3I6IGluY2x1c2l2ZSByYW5nZSB3YXMgdXNlZCB3aXRoIG5vIGVuZAp9CmBgYAoKQW4gaW5jbHVzaXZlIHJhbmdlIG5lZWRzIGFuIGVuZCBpbiBvcmRlciB0byAqaW5jbHVkZSogaXQuIElmIHlvdSBqdXN0IG5lZWQgYQpzdGFydCBhbmQgbm8gZW5kLCB1c2UgYSBub24taW5jbHVzaXZlIHJhbmdlICh3aXRoIGAuLmApOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgdG1wID0gdmVjIVswLCAxLCAyLCAzLCA0LCA0LCAzLCAzLCAyLCAxXTsKICAgIGxldCB4ID0gJnRtcFsxLi5dOyAvLyBvayEKfQpgYGAKCk9yIHB1dCBhbiBlbmQgdG8geW91ciBpbmNsdXNpdmUgcmFuZ2U6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCB0bXAgPSB2ZWMhWzAsIDEsIDIsIDMsIDQsIDQsIDMsIDMsIDIsIDFdOwogICAgbGV0IHggPSAmdG1wWzEuLj0zXTsgLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////3/jBAABAOMEgwUAjXwmAACACgACBwCBCgEAAwDtAg4AAP8JAgUBBFNvbWUBAQC0CQABgAoAAwDtAg4AAv8JAAEDANgCJAAA/gkBAQC0CQACggUA2QISAAC0CQUBBUUwNTg2AAEfBQABAAUDANgCJAAA/gkBAQG5CQAB/wkAhQUAvHwmAACFCgAAAoUFALx8JgAAtAkFAesCQSB0eXBlIGhhcyBib3RoIGBwYWNrZWRgIGFuZCBgYWxpZ25gIHJlcHJlc2VudGF0aW9uIGhpbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NwojW3JlcHIocGFja2VkLCBhbGlnbig4KSldIC8vIGVycm9yIQpzdHJ1Y3QgVW1icmVsbGEoaTMyKTsKYGBgCgpZb3UgY2Fubm90IHVzZSBgcGFja2VkYCBhbmQgYGFsaWduYCBoaW50cyBvbiBhIHNhbWUgdHlwZS4gSWYgeW91IHdhbnQgdG8gcGFjayBhCnR5cGUgdG8gYSBnaXZlbiBzaXplLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYSBzaXplIHRvIHBhY2tlZDoKCmBgYAojW3JlcHIocGFja2VkKV0gLy8gb2shCnN0cnVjdCBVbWJyZWxsYShpMzIpOwpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////wHrAgABAOsChQUAvHwmAACECgACBwCFCgEAAwDtAg4AAIMKAgUBBFNvbWUBAQC0CQABhAoAAwDtAg4AAoMKAAEDANgCJAAAggoBAQC0CQAChAUA2QISAAC0CQUBBUUwNTg3AAEfBQABAAUDANgCJAAAggoBAQG5CQABgwoAhwUA63wmAACJCgAAAocFAOt8JgAAtAkFAZQEQSB0eXBlIHdpdGggYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludCBoYXMgYSBmaWVsZCB3aXRoIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODgKI1tyZXByKGFsaWduKDE2KSldCnN0cnVjdCBBbGlnbmVkKGkzMik7CgojW3JlcHIocGFja2VkKV0gLy8gZXJyb3IhCnN0cnVjdCBQYWNrZWQoQWxpZ25lZCk7CmBgYAoKSnVzdCBsaWtlIHlvdSBjYW5ub3QgaGF2ZSBib3RoIGBhbGlnbmAgYW5kIGBwYWNrZWRgIHJlcHJlc2VudGF0aW9uIGhpbnRzIG9uIGEKc2FtZSB0eXBlLCBhIGBwYWNrZWRgIHR5cGUgY2Fubm90IGNvbnRhaW4gYW5vdGhlciB0eXBlIHdpdGggdGhlIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4gSG93ZXZlciwgeW91IGNhbiBkbyB0aGUgb3Bwb3NpdGU6CgpgYGAKI1tyZXByKHBhY2tlZCldCnN0cnVjdCBQYWNrZWQoaTMyKTsKCiNbcmVwcihhbGlnbigxNikpXSAvLyBvayEKc3RydWN0IEFsaWduZWQoUGFja2VkKTsKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//z+UBAABAJQEhwUA63wmAACICgACBwCJCgEAAwDtAg4AAIcKAgUBBFNvbWUBAQC0CQABiAoAAwDtAg4AAocKAAEDANgCJAAAhgoBAQC0CQAChgUA2QISAAC0CQUBBUUwNTg4AAEfBQABAAUDANgCJAAAhgoBAQG5CQABhwoAiQUAmn0mAACNCgAAAokFAJp9JgAAtAkFAYsCVGhlIHZhbHVlIG9mIGBOYCB0aGF0IHdhcyBzcGVjaWZpZWQgZm9yIGByZXByKGFsaWduKE4pKWAgd2FzIG5vdCBhIHBvd2VyCm9mIHR3bywgb3Igd2FzIGdyZWF0ZXIgdGhhbiAyXjI5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4OQojW3JlcHIoYWxpZ24oMTUpKV0gLy8gZXJyb3I6IGludmFsaWQgYHJlcHIoYWxpZ24pYCBhdHRyaWJ1dGU6IG5vdCBhIHBvd2VyIG9mIHR3bwplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKAAX///////////8B////////////Af///////////wH///////////8B/w+LAgABAIsCiQUAmn0mAACMCgACBwCNCgEAAwDtAg4AAIsKAgUBBFNvbWUBAQC0CQABjAoAAwDtAg4AAosKAAEDANgCJAAAigoBAQC0CQACiAUA2QISAAC0CQUBBUUwNTg5AAEfBQABAAUDANgCJAAAigoBAQG5CQABiwoAiwUAyX0mAACRCgAAAosFAMl9JgAAtAkFAeACYGJyZWFrYCBvciBgY29udGludWVgIGtleXdvcmRzIHdlcmUgdXNlZCBpbiBhIGNvbmRpdGlvbiBvZiBhIGB3aGlsZWAgbG9vcAp3aXRob3V0IGEgbGFiZWwuCgpFcnJvbmVvdXMgY29kZSBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkwCndoaWxlIGJyZWFrIHt9CmBgYAoKYGJyZWFrYCBvciBgY29udGludWVgIG11c3QgaW5jbHVkZSBhIGxhYmVsIHdoZW4gdXNlZCBpbiB0aGUgY29uZGl0aW9uIG9mIGEKYHdoaWxlYCBsb29wLgoKVG8gZml4IHRoaXMsIGFkZCBhIGxhYmVsIHNwZWNpZnlpbmcgd2hpY2ggbG9vcCBpcyBiZWluZyBicm9rZW4gb3V0IG9mOgoKYGBgCidmb286IHdoaWxlIGJyZWFrICdmb28ge30KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH/////D+ACAAEA4AKLBQDJfSYAAJAKAAIHAJEKAQADAO0CDgAAjwoCBQEEU29tZQEBALQJAAGQCgADAO0CDgACjwoAAQMA2AIkAACOCgEBALQJAAKKBQDZAhIAALQJBQEFRTA1OTAAAR8FAAEABQMA2AIkAACOCgEBAbkJAAGPCgCNBQD4fSYAAJUKAAACjQUA+H0mAAC0CQUBpBVQZXIgW1JGQyA0MDFdW3JmYzQwMV0sIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYGZvb2A6CgpgYGAKc3RydWN0IFM7CgovLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZXhwbGFuYXRpb24sIGFsbCBvZiB0aGVzZQovLyBkaWZmZXJlbnQga2luZHMgb2YgYGZuYCBkZWNsYXJhdGlvbnMgYXJlIGVxdWl2YWxlbnQ6CgpmbiBmb28oeDogUykgeyAvKiAuLi4gKi8gfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gIkMiIHsKICAgIGZuIGZvbyh4OiBTKTsKfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQppbXBsIFMgewogICAgZm4gZm9vKHNlbGYpIHsgLyogLi4uICovIH0KfQpgYGAKCnRoZSB0eXBlIG9mIGBmb29gIGlzICoqbm90KiogYGZuKFMpYCwgYXMgb25lIG1pZ2h0IGV4cGVjdC4KUmF0aGVyLCBpdCBpcyBhIHVuaXF1ZSwgemVyby1zaXplZCBtYXJrZXIgdHlwZSB3cml0dGVuIGhlcmUgYXMgYHR5cGVvZihmb28pYC4KSG93ZXZlciwgYHR5cGVvZihmb28pYCBjYW4gYmUgX2NvZXJjZWRfIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBgZm4oUylgLApzbyB5b3UgcmFyZWx5IG5vdGljZSB0aGlzOgoKYGBgCiMgc3RydWN0IFM7CiMgZm4gZm9vKF86IFMpIHt9CmxldCB4OiBmbihTKSA9IGZvbzsgLy8gT0ssIGNvZXJjZXMKYGBgCgpUaGUgcmVhc29uIHRoYXQgdGhpcyBtYXR0ZXIgaXMgdGhhdCB0aGUgdHlwZSBgZm4oUylgIGlzIG5vdCBzcGVjaWZpYyB0bwphbnkgcGFydGljdWxhciBmdW5jdGlvbjogaXQncyBhIGZ1bmN0aW9uIF9wb2ludGVyXy4gU28gY2FsbGluZyBgeCgpYCByZXN1bHRzCmluIGEgdmlydHVhbCBjYWxsLCB3aGVyZWFzIGBmb28oKWAgaXMgc3RhdGljYWxseSBkaXNwYXRjaGVkLCBiZWNhdXNlIHRoZSB0eXBlCm9mIGBmb29gIHRlbGxzIHVzIHByZWNpc2VseSB3aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4KCkFzIG5vdGVkIGFib3ZlLCBjb2VyY2lvbnMgbWVhbiB0aGF0IG1vc3QgY29kZSBkb2Vzbid0IGhhdmUgdG8gYmUKY29uY2VybmVkIHdpdGggdGhpcyBkaXN0aW5jdGlvbi4gSG93ZXZlciwgeW91IGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlCndoZW4gdXNpbmcgKip0cmFuc211dGUqKiB0byBjb252ZXJ0IGEgZm4gaXRlbSBpbnRvIGEgZm4gcG9pbnRlci4KClRoaXMgaXMgc29tZXRpbWVzIGRvbmUgYXMgcGFydCBvZiBhbiBGRkk6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTEKZXh0ZXJuICJDIiBmbiBmb28odXNlcmRhdGE6IEJveDxpMzI+KSB7CiAgICAvKiAuLi4gKi8KfQoKIyBmbiBjYWxsYmFjayhfOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSkge30KIyB1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKdW5zYWZlIHsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28pOwogICAgY2FsbGJhY2soZik7Cn0KYGBgCgpIZXJlLCB0cmFuc211dGUgaXMgYmVpbmcgdXNlZCB0byBjb252ZXJ0IHRoZSB0eXBlcyBvZiB0aGUgZm4gYXJndW1lbnRzLgpUaGlzIHBhdHRlcm4gaXMgaW5jb3JyZWN0IGJlY2F1c2UsIGJlY2F1c2UgdGhlIHR5cGUgb2YgYGZvb2AgaXMgYSBmdW5jdGlvbgoqKml0ZW0qKiAoYHR5cGVvZihmb28pYCksIHdoaWNoIGlzIHplcm8tc2l6ZWQsIGFuZCB0aGUgdGFyZ2V0IHR5cGUgKGBmbigpYCkKaXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBpcyBub3QgemVyby1zaXplZC4KVGhpcyBwYXR0ZXJuIHNob3VsZCBiZSByZXdyaXR0ZW4uIFRoZXJlIGFyZSBhIGZldyBwb3NzaWJsZSB3YXlzIHRvIGRvIHRoaXM6CgotIGNoYW5nZSB0aGUgb3JpZ2luYWwgZm4gZGVjbGFyYXRpb24gdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIHNpZ25hdHVyZSwKICBhbmQgZG8gdGhlIGNhc3QgaW4gdGhlIGZuIGJvZHkgKHRoZSBwcmVmZXJyZWQgb3B0aW9uKQotIGNhc3QgdGhlIGZuIGl0ZW0gb2YgYSBmbiBwb2ludGVyIGJlZm9yZSBjYWxsaW5nIHRyYW5zbXV0ZSwgYXMgc2hvd24gaGVyZToKCiAgICBgYGAKICAgICMgZXh0ZXJuICJDIiBmbiBmb28oXzogQm94PGkzMj4pIHt9CiAgICAjIHVzZSBzdGQ6Om1lbTo6dHJhbnNtdXRlOwogICAgIyB1bnNhZmUgewogICAgbGV0IGY6IGV4dGVybiAiQyIgZm4oKm11dCBpMzIpID0gdHJhbnNtdXRlKGZvbyBhcyBleHRlcm4gIkMiIGZuKF8pKTsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28gYXMgdXNpemUpOyAvLyB3b3JrcyB0b28KICAgICMgfQogICAgYGBgCgpUaGUgc2FtZSBhcHBsaWVzIHRvIHRyYW5zbXV0ZXMgdG8gYCptdXQgZm4oKWAsIHdoaWNoIHdlcmUgb2JzZXJ2ZWQgaW4gcHJhY3RpY2UuCk5vdGUgdGhvdWdoIHRoYXQgdXNlIG9mIHRoaXMgdHlwZSBpcyBnZW5lcmFsbHkgaW5jb3JyZWN0LgpUaGUgaW50ZW50aW9uIGlzIHR5cGljYWxseSB0byBkZXNjcmliZSBhIGZ1bmN0aW9uIHBvaW50ZXIsIGJ1dCBqdXN0IGBmbigpYAphbG9uZSBzdWZmaWNlcyBmb3IgdGhhdC4gYCptdXQgZm4oKWAgaXMgYSBwb2ludGVyIHRvIGEgZm4gcG9pbnRlci4KKFNpbmNlIHRoZXNlIHZhbHVlcyBhcmUgdHlwaWNhbGx5IGp1c3QgcGFzc2VkIHRvIEMgY29kZSwgaG93ZXZlciwgdGhpcyByYXJlbHkKbWFrZXMgYSBkaWZmZXJlbmNlIGluIHByYWN0aWNlLikKCltyZmM0MDFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDAxLWNvZXJjaW9ucy5tZAoAK////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////AaQVAAEApBWNBQD4fSYAAJQKAAIHAJUKAQADAO0CDgAAkwoCBQEEU29tZQEBALQJAAGUCgADAO0CDgACkwoAAQMA2AIkAACSCgEBALQJAAKMBQDZAhIAALQJBQEFRTA1OTEAAR8FAAEABQMA2AIkAACSCgEBAbkJAAGTCgCPBQCnfiYAAJkKAAACjwUAp34mAAC0CQUBjwRUaGlzIGVycm9yIG9jY3VycyB3aGVuIHlvdSBkZWZpbmVkIG1ldGhvZHMgb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aCBzYW1lCm5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkyCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBwcmV2aW91cyBkZWZpbml0aW9uIGhlcmUKfQoKaW1wbCBGb28gewogICAgZm4gYmFyKCkge30gLy8gZHVwbGljYXRlIGRlZmluaXRpb24gaGVyZQp9CmBgYAoKQSBzaW1pbGFyIGVycm9yIGlzIEUwMjAxLiBUaGUgZGlmZmVyZW5jZSBpcyB3aGV0aGVyIHRoZXJlIGlzIG9uZSBkZWNsYXJhdGlvbgpibG9jayBvciBub3QuIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBtdXN0IGdpdmUgZWFjaCBgZm5gIGEgdW5pcXVlIG5hbWUuCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigpIHt9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGJheigpIHt9IC8vIGRlZmluZSB3aXRoIGRpZmZlcmVudCBuYW1lCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPBAABAI8EjwUAp34mAACYCgACBwCZCgEAAwDtAg4AAJcKAgUBBFNvbWUBAQC0CQABmAoAAwDtAg4AApcKAAEDANgCJAAAlgoBAQC0CQACjgUA2QISAAC0CQUBBUUwNTkyAAEfBQABAAUDANgCJAAAlgoBAQG5CQABlwoAkQUA1n4mAACdCgAAApEFANZ+JgAAtAkFAf0DWW91IHRyaWVkIHRvIHN1cHBseSBhbiBgRm5gLWJhc2VkIHR5cGUgd2l0aCBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwp0aGFuIHdoYXQgd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5MwpmbiBmb288RjogRm4oKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gW0UwNTkzXSBjbG9zdXJlIHRha2VzIDEgYXJndW1lbnQgYnV0IDAgYXJndW1lbnRzIGFyZSByZXF1aXJlZAogICAgZm9vKHx5fCB7IH0pOwp9CmBgYAoKWW91IGhhdmUgdG8gcHJvdmlkZSB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzIGFzIGV4cGVjdGVkIGJ5IHRoZSBgRm5gLWJhc2VkCnR5cGUuIFNvIHRvIGZpeCB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UgbmVlZCB0byByZW1vdmUgdGhlIGB5YCBhcmd1bWVudDoKCmBgYApmbiBmb288RjogRm4oKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgZm9vKHx8IHsgfSk7IC8vIG9rIQp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9AwABAP0DkQUA1n4mAACcCgACBwCdCgEAAwDtAg4AAJsKAgUBBFNvbWUBAQC0CQABnAoAAwDtAg4AApsKAAEDANgCJAAAmgoBAQC0CQACkAUA2QISAAC0CQUBBUUwNTkzAAEfBQABAAUDANgCJAAAmgoBAQG5CQABmwoAkwUAhX8mAAChCgAAApMFAIV/JgAAtAkFAZMDQSBub24tbXV0YWJsZSB2YWx1ZSB3YXMgYXNzaWduZWQgYSB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKc3RydWN0IFNvbGFyU3lzdGVtIHsKICAgIGVhcnRoOiBpMzIsCn0KCmxldCBzcyA9IFNvbGFyU3lzdGVtIHsgZWFydGg6IDMgfTsKc3MuZWFydGggPSAyOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZGVjbGFyZSBgc3NgIGFzIG11dGFibGUgYnkgdXNpbmcgdGhlIGBtdXRgIGtleXdvcmQ6CgpgYGAKc3RydWN0IFNvbGFyU3lzdGVtIHsKICAgIGVhcnRoOiBpMzIsCn0KCmxldCBtdXQgc3MgPSBTb2xhclN5c3RlbSB7IGVhcnRoOiAzIH07IC8vIGRlY2xhcmluZyBgc3NgIGFzIG11dGFibGUKc3MuZWFydGggPSAyOyAvLyBvayEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8fkwMAAQCTA5MFAIV/JgAAoAoAAgcAoQoBAAMA7QIOAACfCgIFAQRTb21lAQEAtAkAAaAKAAMA7QIOAAKfCgABAwDYAiQAAJ4KAQEAtAkAApIFANkCEgAAtAkFAQVFMDU5NAABHwUAAQAFAwDYAiQAAJ4KAQEBuQkAAZ8KAJUFALR/JgAApQoAAAKVBQC0fyYAALQJBQHvAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNsb3N1cmVzIGNhbm5vdCBtdXRhdGUgaW1tdXRhYmxlIGNhcHR1cmVkIHZhcmlhYmxlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbGV0IHggPSAzOyAvLyBlcnJvcjogY2xvc3VyZSBjYW5ub3QgYXNzaWduIHRvIGltbXV0YWJsZSBsb2NhbCB2YXJpYWJsZSBgeGAKbGV0IG11dCBjID0gfHwgeyB4ICs9IDEgfTsKYGBgCgpNYWtlIHRoZSB2YXJpYWJsZSBiaW5kaW5nIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMzsgLy8gb2shCmxldCBtdXQgYyA9IHx8IHsgeCArPSAxIH07CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////H+8CAAEA7wKVBQC0fyYAAKQKAAIHAKUKAQADAO0CDgAAowoCBQEEU29tZQEBALQJAAGkCgADAO0CDgACowoAAQMA2AIkAACiCgEBALQJAAKUBQDZAhIAALQJBQEFRTA1OTUAAR8FAAEABQMA2AIkAACiCgEBAbkJAAGjCgCXBQDjfyYAAKkKAAAClwUA438mAAC0CQUB8AJUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIHlvdSB0cmllZCB0byBtdXRhYmx5IGJvcnJvdyBhIG5vbi1tdXRhYmxlIHZhcmlhYmxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NgpsZXQgeCA9IDE7CmxldCB5ID0gJm11dCB4OyAvLyBlcnJvcjogY2Fubm90IGJvcnJvdyBtdXRhYmx5CmBgYAoKSW4gaGVyZSwgYHhgIGlzbid0IG11dGFibGUsIHNvIHdoZW4gd2UgdHJ5IHRvIG11dGFibHkgYm9ycm93IGl0IGluIGB5YCwgaXQKZmFpbHMuIFRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBtYWtlIGB4YCBtdXRhYmxlOgoKYGBgCmxldCBtdXQgeCA9IDE7CmxldCB5ID0gJm11dCB4OyAvLyBvayEKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AIAAQDwApcFAON/JgAAqAoAAgcAqQoBAAMA7QIOAACnCgIFAQRTb21lAQEAtAkAAagKAAMA7QIOAAKnCgABAwDYAiQAAKYKAQEAtAkAApYFANkCEgAAtAkFAQVFMDU5NgABHwUAAQAFAwDYAiQAAKYKAQEBuQkAAacKAJkFAJKAASYAAK0KAAACmQUAkoABJgAAtAkFAf0EVGhpcyBlcnJvciBvY2N1cnMgYmVjYXVzZSBhIHZhbHVlIHdhcyBkcm9wcGVkIHdoaWxlIGl0IHdhcyBzdGlsbCBib3Jyb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTcKc3RydWN0IEZvbzwnYT4gewogICAgeDogT3B0aW9uPCYnYSB1MzI+LAp9CgpsZXQgbXV0IHggPSBGb28geyB4OiBOb25lIH07CnsKICAgIGxldCB5ID0gMDsKICAgIHgueCA9IFNvbWUoJnkpOyAvLyBlcnJvcjogYHlgIGRvZXMgbm90IGxpdmUgbG9uZyBlbm91Z2gKfQpwcmludGxuISgiezo/fSIsIHgueCk7CmBgYAoKSGVyZSwgYHlgIGlzIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5uZXIgc2NvcGUsIGJ1dCBpdCBpcyBib3Jyb3dlZCBieQpgeGAgdW50aWwgdGhlIGBwcmludGxuYC4gVG8gZml4IHRoZSBwcmV2aW91cyBleGFtcGxlLCBqdXN0IHJlbW92ZSB0aGUgc2NvcGUKc28gdGhhdCBgeWAgaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciB0aGUgcHJpbnRsbgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6IE9wdGlvbjwmJ2EgdTMyPiwKfQoKbGV0IG11dCB4ID0gRm9vIHsgeDogTm9uZSB9OwoKbGV0IHkgPSAwOwp4LnggPSBTb21lKCZ5KTsKCnByaW50bG4hKCJ7Oj99IiwgeC54KTsKYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8f/QQAAQD9BJkFAJKAASYAAKwKAAIHAK0KAQADAO0CDgAAqwoCBQEEU29tZQEBALQJAAGsCgADAO0CDgACqwoAAQMA2AIkAACqCgEBALQJAAKYBQDZAhIAALQJBQEFRTA1OTcAAR8FAAEABQMA2AIkAACqCgEBAbkJAAGrCgCbBQDBgAEmAACxCgAAApsFAMGAASYAALQJBQGvBFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYSBtZXRob2QgaXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQ6CgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk5CnN0cnVjdCBNb3V0aDsKCmxldCB4ID0gTW91dGg7CnguY2hvY29sYXRlKCk7IC8vIGVycm9yOiBubyBtZXRob2QgbmFtZWQgYGNob2NvbGF0ZWAgZm91bmQgZm9yIHR5cGUgYE1vdXRoYAogICAgICAgICAgICAgICAvLyAgICAgICAgaW4gdGhlIGN1cnJlbnQgc2NvcGUKYGBgCgpJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGUgYGNob2NvbGF0ZWAgbWV0aG9kIHRvIGZpeCB0aGUgZXJyb3I6CgpgYGAKc3RydWN0IE1vdXRoOwoKaW1wbCBNb3V0aCB7CiAgICBmbiBjaG9jb2xhdGUoJnNlbGYpIHsgLy8gV2UgaW1wbGVtZW50IHRoZSBgY2hvY29sYXRlYCBtZXRob2QgaGVyZS4KICAgICAgICBwcmludGxuISgiSG1tbSEgSSBsb3ZlIGNob2NvbGF0ZSEiKTsKICAgIH0KfQoKbGV0IHggPSBNb3V0aDsKeC5jaG9jb2xhdGUoKTsgLy8gb2shCmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H68EAAEArwSbBQDBgAEmAACwCgACBwCxCgEAAwDtAg4AAK8KAgUBBFNvbWUBAQC0CQABsAoAAwDtAg4AAq8KAAEDANgCJAAArgoBAQC0CQACmgUA2QISAAC0CQUBBUUwNTk5AAEfBQABAAUDANgCJAAArgoBAQG5CQABrwoAnQUA8IABJgAAtQoAAAKdBQDwgAEmAAC0CQUB0wZBbiB1bmFyeSBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjAwCmVudW0gUXVlc3Rpb24gewogICAgWWVzLAogICAgTm8sCn0KCiFRdWVzdGlvbjo6WWVzOyAvLyBlcnJvcjogY2Fubm90IGFwcGx5IHVuYXJ5IG9wZXJhdG9yIGAhYCB0byB0eXBlIGBRdWVzdGlvbmAKYGBgCgpJbiB0aGlzIGNhc2UsIGBRdWVzdGlvbmAgd291bGQgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGBzdGQ6Om9wczo6Tm90YCB0cmFpdCBpbgpvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBgIWAgb24gaXQuIExldCdzIGltcGxlbWVudCBpdDoKCmBgYAp1c2Ugc3RkOjpvcHM6Ok5vdDsKCmVudW0gUXVlc3Rpb24gewogICAgWWVzLAogICAgTm8sCn0KCi8vIFdlIGltcGxlbWVudCB0aGUgYE5vdGAgdHJhaXQgb24gdGhlIGVudW0uCmltcGwgTm90IGZvciBRdWVzdGlvbiB7CiAgICB0eXBlIE91dHB1dCA9IGJvb2w7CgogICAgZm4gbm90KHNlbGYpIC0+IGJvb2wgewogICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICBRdWVzdGlvbjo6WWVzID0+IGZhbHNlLCAvLyBJZiB0aGUgYEFuc3dlcmAgaXMgYFllc2AsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZS4KICAgICAgICAgICAgUXVlc3Rpb246Ok5vID0+IHRydWUsIC8vIEFuZCBoZXJlIHdlIGRvIHRoZSBvcHBvc2l0ZS4KICAgICAgICB9CiAgICB9Cn0KCmFzc2VydF9lcSEoIVF1ZXN0aW9uOjpZZXMsIGZhbHNlKTsKYXNzZXJ0X2VxISghUXVlc3Rpb246Ok5vLCB0cnVlKTsKYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H9MGAAEA0wadBQDwgAEmAAC0CgACBwC1CgEAAwDtAg4AALMKAgUBBFNvbWUBAQC0CQABtAoAAwDtAg4AArMKAAEDANgCJAAAsgoBAQC0CQACnAUA2QISAAC0CQUBBUUwNjAwAAEfBQABAAUDANgCJAAAsgoBAQG5CQABswoAnwUAn4EBJgAAuQoAAAKfBQCfgQEmAAC0CQUBxQJObyBgbWFpbmAgZnVuY3Rpb24gd2FzIGZvdW5kIGluIGEgYmluYXJ5IGNyYXRlLgoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCBhIGBtYWluYCBmdW5jdGlvbjoKCmBgYApmbiBtYWluKCkgewogICAgLy8gWW91ciBwcm9ncmFtIHdpbGwgc3RhcnQgaGVyZS4KICAgIHByaW50bG4hKCJIZWxsbyB3b3JsZCEiKTsKfQpgYGAKCklmIHlvdSBkb24ndCBrbm93IHRoZSBiYXNpY3Mgb2YgUnVzdCwgeW91IGNhbiBsb29rIGF0IHRoZQpbUnVzdCBCb29rXVtydXN0LWJvb2tdIHRvIGdldCBzdGFydGVkLgoKW3J1c3QtYm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay8KAAb///////////8B////////////Af///////////wH///////////8B////////////AR/FAgABAMUCnwUAn4EBJgAAuAoAAgcAuQoBAAMA7QIOAAC3CgIFAQRTb21lAQEAtAkAAbgKAAMA7QIOAAK3CgABAwDYAiQAALYKAQEAtAkAAp4FANkCEgAAtAkFAQVFMDYwMQABHwUAAQAFAwDYAiQAALYKAQEBuQkAAbcKAKEFAM6BASYAAL0KAAACoQUAzoEBJgAAtAkFAYQCQW4gdW5rbm93biBvciBpbnZhbGlkIGxpbnQgd2FzIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBzaApydXN0YyAtRCBib2d1cyBydXN0X2ZpbGUucnMKYGBgCgpNYXliZSB5b3UganVzdCBtaXNzcGVsbGVkIHRoZSBsaW50IG5hbWUgb3IgdGhlIGxpbnQgZG9lc24ndCBleGlzdCBhbnltb3JlLgpFaXRoZXIgd2F5LCB0cnkgdG8gdXBkYXRlL3JlbW92ZSBpdCBpbiBvcmRlciB0byBmaXggdGhlIGVycm9yLgoABf///////////wH///////////8B////////////Af///////////wEPhAIAAQCEAqEFAM6BASYAALwKAAIHAL0KAQADAO0CDgAAuwoCBQEEU29tZQEBALQJAAG8CgADAO0CDgACuwoAAQMA2AIkAAC6CgEBALQJAAKgBQDZAhIAALQJBQEFRTA2MDIAAR8FAAEABQMA2AIkAAC6CgEBAbkJAAG7CgCjBQD9gQEmAADBCgAAAqMFAP2BASYAALQJBQGwBkEgcHJpdmF0ZSBpdGVtIHdhcyB1c2VkIG91dHNpZGUgaXRzIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwMwptb2QgU29tZU1vZHVsZSB7CiAgICBjb25zdCBQUklWQVRFOiB1MzIgPSAweF9hX2JhZF8xZGVhX3UzMjsgLy8gVGhpcyBjb25zdCBpcyBwcml2YXRlLCBzbyB3ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHVzZSBpdCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBTb21lTW9kdWxlYCBtb2R1bGUuCn0KCnByaW50bG4hKCJjb25zdCB2YWx1ZToge30iLCBTb21lTW9kdWxlOjpQUklWQVRFKTsgLy8gZXJyb3I6IGNvbnN0YW50IGBQUklWQVRFYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpcyBwcml2YXRlCmBgYAoKSW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgdGhlIGl0ZW0gcHVibGljIGJ5IHVzaW5nIHRoZSBgcHViYAprZXl3b3JkLiBFeGFtcGxlOgoKYGBgCm1vZCBTb21lTW9kdWxlIHsKICAgIHB1YiBjb25zdCBQUklWQVRFOiB1MzIgPSAweF9hX2JhZF8xZGVhX3UzMjsgLy8gV2Ugc2V0IGl0IHB1YmxpYyBieSB1c2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHB1YmAga2V5d29yZC4KfQoKcHJpbnRsbiEoImNvbnN0IHZhbHVlOiB7fSIsIFNvbWVNb2R1bGU6OlBSSVZBVEUpOyAvLyBvayEKYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////P7AGAAEAsAajBQD9gQEmAADACgACBwDBCgEAAwDtAg4AAL8KAgUBBFNvbWUBAQC0CQABwAoAAwDtAg4AAr8KAAEDANgCJAAAvgoBAQC0CQACogUA2QISAAC0CQUBBUUwNjAzAAEfBQABAAUDANgCJAAAvgoBAQG5CQABvwoApQUArIIBJgAAxQoAAAKlBQCsggEmAAC0CQUB+wNBIGNhc3QgdG8gYGNoYXJgIHdhcyBhdHRlbXB0ZWQgb24gYSB0eXBlIG90aGVyIHRoYW4gYHU4YC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDQKMHUzMiBhcyBjaGFyOyAvLyBlcnJvcjogb25seSBgdThgIGNhbiBiZSBjYXN0IGFzIGBjaGFyYCwgbm90IGB1MzJgCmBgYAoKQXMgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzLCBvbmx5IGB1OGAgY2FuIGJlIGNhc3QgaW50byBgY2hhcmAuIEV4YW1wbGU6CgpgYGAKbGV0IGMgPSA4NnU4IGFzIGNoYXI7IC8vIG9rIQphc3NlcnRfZXEhKGMsICdWJyk7CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wf7AwABAPsDpQUArIIBJgAAxAoAAgcAxQoBAAMA7QIOAADDCgIFAQRTb21lAQEAtAkAAcQKAAMA7QIOAALDCgABAwDYAiQAAMIKAQEAtAkAAqQFANkCEgAAtAkFAQVFMDYwNAABHwUAAQAFAwDYAiQAAMIKAQEBuQkAAcMKAKcFANuCASYAAMkKAAACpwUA24IBJgAAtAkFAZ4FQW4gaW52YWxpZCBjYXN0IHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNQpsZXQgeCA9IDB1ODsKeCBhcyBWZWM8dTg+OyAvLyBlcnJvcjogbm9uLXByaW1pdGl2ZSBjYXN0OiBgdThgIGFzIGBzdGQ6OnZlYzo6VmVjPHU4PmAKCi8vIEFub3RoZXIgZXhhbXBsZQoKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsgLy8gU28gaGVyZSwgYHZgIGlzIGEgYCpjb25zdCB1OGAuCnYgYXMgJnU4OyAvLyBlcnJvcjogbm9uLXByaW1pdGl2ZSBjYXN0OiBgKmNvbnN0IHU4YCBhcyBgJnU4YApgYGAKCk9ubHkgcHJpbWl0aXZlIHR5cGVzIGNhbiBiZSBjYXN0IGludG8gZWFjaCBvdGhlci4gRXhhbXBsZXM6CgpgYGAKbGV0IHggPSAwdTg7CnggYXMgdTMyOyAvLyBvayEKCmxldCB2ID0gY29yZTo6cHRyOjpudWxsOjo8dTg+KCk7CnYgYXMgKmNvbnN0IGk4OyAvLyBvayEKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjYXN0cywgdGFrZSBhIGxvb2sgYXQgdGhlIFR5cGUgY2FzdCBzZWN0aW9uIGluCltUaGUgUmVmZXJlbmNlIEJvb2tdWzFdLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9leHByZXNzaW9ucy9vcGVyYXRvci1leHByLmh0bWwjdHlwZS1jYXN0LWV4cHJlc3Npb25zCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8DngUAAQCeBacFANuCASYAAMgKAAIHAMkKAQADAO0CDgAAxwoCBQEEU29tZQEBALQJAAHICgADAO0CDgACxwoAAQMA2AIkAADGCgEBALQJAAKmBQDZAhIAALQJBQEFRTA2MDUAAR8FAAEABQMA2AIkAADGCgEBAbkJAAHHCgCpBQCKgwEmAADNCgAAAqkFAIqDASYAALQJBQG9BEFuIGluY29tcGF0aWJsZSBjYXN0IHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA2CmxldCB4ID0gJjB1ODsgLy8gSGVyZSwgYHhgIGlzIGEgYCZ1OGAuCmxldCB5OiB1MzIgPSB4IGFzIHUzMjsgLy8gZXJyb3I6IGNhc3RpbmcgYCZ1OGAgYXMgYHUzMmAgaXMgaW52YWxpZApgYGAKCldoZW4gY2FzdGluZywga2VlcCBpbiBtaW5kIHRoYXQgb25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoCm90aGVyLiBFeGFtcGxlOgoKYGBgCmxldCB4ID0gJjB1ODsKbGV0IHk6IHUzMiA9ICp4IGFzIHUzMjsgLy8gV2UgZGVyZWZlcmVuY2UgaXQgZmlyc3QgYW5kIHRoZW4gY2FzdCBpdC4KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjYXN0cywgdGFrZSBhIGxvb2sgYXQgdGhlIFR5cGUgY2FzdCBzZWN0aW9uIGluCltUaGUgUmVmZXJlbmNlIEJvb2tdWzFdLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9leHByZXNzaW9ucy9vcGVyYXRvci1leHByLmh0bWwjdHlwZS1jYXN0LWV4cHJlc3Npb25zCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x+9BAABAL0EqQUAioMBJgAAzAoAAgcAzQoBAAMA7QIOAADLCgIFAQRTb21lAQEAtAkAAcwKAAMA7QIOAALLCgABAwDYAiQAAMoKAQEAtAkAAqgFANkCEgAAtAkFAQVFMDYwNgABHwUAAQAFAwDYAiQAAMoKAQEBuQkAAcsKAKsFALmDASYAANEKAAACqwUAuYMBJgAAtAkFAakHQSBjYXN0IGJldHdlZW4gYSB0aGluIGFuZCBhIGZhdCBwb2ludGVyIHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA3CmxldCB2ID0gY29yZTo6cHRyOjpudWxsOjo8dTg+KCk7CnYgYXMgKmNvbnN0IFt1OF07CmBgYAoKRmlyc3Q6IHdoYXQgYXJlIHRoaW4gYW5kIGZhdCBwb2ludGVycz8KClRoaW4gcG9pbnRlcnMgYXJlICJzaW1wbGUiIHBvaW50ZXJzOiB0aGV5IGFyZSBwdXJlbHkgYSByZWZlcmVuY2UgdG8gYSBtZW1vcnkKYWRkcmVzcy4KCkZhdCBwb2ludGVycyBhcmUgcG9pbnRlcnMgcmVmZXJlbmNpbmcgRHluYW1pY2FsbHkgU2l6ZWQgVHlwZXMgKGFsc28gY2FsbGVkCkRTVHMpLiBEU1RzIGRvbid0IGhhdmUgYSBzdGF0aWNhbGx5IGtub3duIHNpemUsIHRoZXJlZm9yZSB0aGV5IGNhbiBvbmx5IGV4aXN0CmJlaGluZCBzb21lIGtpbmQgb2YgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLApzbGljZXMgYW5kIHRyYWl0IG9iamVjdHMgYXJlIERTVHMuIEluIHRoZSBjYXNlIG9mIHNsaWNlcywgdGhlIGFkZGl0aW9uYWwKaW5mb3JtYXRpb24gdGhlIGZhdCBwb2ludGVyIGhvbGRzIGlzIHRoZWlyIHNpemUuCgpUbyBmaXggdGhpcyBlcnJvciwgZG9uJ3QgdHJ5IHRvIGNhc3QgZGlyZWN0bHkgYmV0d2VlbiB0aGluIGFuZCBmYXQgcG9pbnRlcnMuCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0eXBlIGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgc2VjdGlvbiBvZiB0aGUKW1RoZSBSdXN0IFJlZmVyZW5jZV1bMV0gb24gdHlwZSBjYXN0IGV4cHJlc3Npb25zLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9leHByZXNzaW9ucy9vcGVyYXRvci1leHByLmh0bWwjdHlwZS1jYXN0LWV4cHJlc3Npb25zCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pBwABAKkHqwUAuYMBJgAA0AoAAgcA0QoBAAMA7QIOAADPCgIFAQRTb21lAQEAtAkAAdAKAAMA7QIOAALPCgABAwDYAiQAAM4KAQEAtAkAAqoFANkCEgAAtAkFAQVFMDYwNwABHwUAAQAFAwDYAiQAAM4KAQEBuQkAAc8KAK0FAOiDASYAANUKAAACrQUA6IMBJgAAtAkFAbADQW4gYXR0ZW1wdCB0byB1c2UgaW5kZXggb24gYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBgc3RkOjpvcHM6OkluZGV4YAp0cmFpdCB3YXMgcGVyZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwOAowdThbMl07IC8vIGVycm9yOiBjYW5ub3QgaW5kZXggaW50byBhIHZhbHVlIG9mIHR5cGUgYHU4YApgYGAKClRvIGJlIGFibGUgdG8gaW5kZXggaW50byBhIHR5cGUgaXQgbmVlZHMgdG8gaW1wbGVtZW50IHRoZSBgc3RkOjpvcHM6OkluZGV4YAp0cmFpdC4gRXhhbXBsZToKCmBgYApsZXQgdjogVmVjPHU4PiA9IHZlYyFbMCwgMSwgMiwgM107CgovLyBUaGUgYFZlY2AgdHlwZSBpbXBsZW1lbnRzIHRoZSBgSW5kZXhgIHRyYWl0IHNvIHlvdSBjYW4gZG86CnByaW50bG4hKCJ7fSIsIHZbMl0pOwpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/sAMAAQCwA60FAOiDASYAANQKAAIHANUKAQADAO0CDgAA0woCBQEEU29tZQEBALQJAAHUCgADAO0CDgAC0woAAQMA2AIkAADSCgEBALQJAAKsBQDZAhIAALQJBQEFRTA2MDgAAR8FAAEABQMA2AIkAADSCgEBAbkJAAHTCgCvBQCXhAEmAADZCgAAAq8FAJeEASYAALQJBQHiA0F0dGVtcHRlZCB0byBhY2Nlc3MgYSBub24tZXhpc3RlbnQgZmllbGQgaW4gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA5CnN0cnVjdCBTdHJ1Y3RXaXRoRmllbGRzIHsKICAgIHg6IHUzMiwKfQoKbGV0IHMgPSBTdHJ1Y3RXaXRoRmllbGRzIHsgeDogMCB9OwpwcmludGxuISgie30iLCBzLmZvbyk7IC8vIGVycm9yOiBubyBmaWVsZCBgZm9vYCBvbiB0eXBlIGBTdHJ1Y3RXaXRoRmllbGRzYApgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBjaGVjayB0aGF0IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGZpZWxkJ3MgbmFtZSBvciB0aGF0IHRoZQpmaWVsZCBhY3R1YWxseSBleGlzdHMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFN0cnVjdFdpdGhGaWVsZHMgewogICAgeDogdTMyLAp9CgpsZXQgcyA9IFN0cnVjdFdpdGhGaWVsZHMgeyB4OiAwIH07CnByaW50bG4hKCJ7fSIsIHMueCk7IC8vIG9rIQpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////z/iAwABAOIDrwUAl4QBJgAA2AoAAgcA2QoBAAMA7QIOAADXCgIFAQRTb21lAQEAtAkAAdgKAAMA7QIOAALXCgABAwDYAiQAANYKAQEAtAkAAq4FANkCEgAAtAkFAQVFMDYwOQABHwUAAQAFAwDYAiQAANYKAQEBuQkAAdcKALEFAMaEASYAAN0KAAACsQUAxoQBJgAAtAkFAe8GQXR0ZW1wdGVkIHRvIGFjY2VzcyBhIGZpZWxkIG9uIGEgcHJpbWl0aXZlIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjEwCmxldCB4OiB1MzIgPSAwOwpwcmludGxuISgie30iLCB4LmZvbyk7IC8vIGVycm9yOiBge2ludGVnZXJ9YCBpcyBhIHByaW1pdGl2ZSB0eXBlLCB0aGVyZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZG9lc24ndCBoYXZlIGZpZWxkcwpgYGAKClByaW1pdGl2ZSB0eXBlcyBhcmUgdGhlIG1vc3QgYmFzaWMgdHlwZXMgYXZhaWxhYmxlIGluIFJ1c3QgYW5kIGRvbid0IGhhdmUKZmllbGRzLiBUbyBhY2Nlc3MgZGF0YSB2aWEgbmFtZWQgZmllbGRzLCBzdHJ1Y3QgdHlwZXMgYXJlIHVzZWQuIEV4YW1wbGU6CgpgYGAKLy8gV2UgZGVjbGFyZSBzdHJ1Y3QgY2FsbGVkIGBGb29gIGNvbnRhaW5pbmcgdHdvIGZpZWxkczoKc3RydWN0IEZvbyB7CiAgICB4OiB1MzIsCiAgICB5OiBpNjQsCn0KCi8vIFdlIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdDoKbGV0IHZhcmlhYmxlID0gRm9vIHsgeDogMCwgeTogLTEyIH07Ci8vIEFuZCB3ZSBjYW4gbm93IGFjY2VzcyBpdHMgZmllbGRzOgpwcmludGxuISgieDoge30sIHk6IHt9IiwgdmFyaWFibGUueCwgdmFyaWFibGUueSk7CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgW3ByaW1pdGl2ZXNdIGFuZCBbc3RydWN0c10sIHRha2UgYSBsb29rIGF0IHRoZSBCb29rLgoKW3ByaW1pdGl2ZXNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwMy0wMi1kYXRhLXR5cGVzLmh0bWwKW3N0cnVjdHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNS0wMC1zdHJ1Y3RzLmh0bWwKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H+8GAAEA7waxBQDGhAEmAADcCgACBwDdCgEAAwDtAg4AANsKAgUBBFNvbWUBAQC0CQAB3AoAAwDtAg4AAtsKAAEDANgCJAAA2goBAQC0CQACsAUA2QISAAC0CQUBBUUwNjEwAAEfBQABAAUDANgCJAAA2goBAQG5CQAB2woAswUA9YQBJgAA4QoAAAKzBQD1hAEmAAC0CQUB8QJBdHRlbXB0ZWQgdG8gZGVyZWZlcmVuY2UgYSB2YXJpYWJsZSB3aGljaCBjYW5ub3QgYmUgZGVyZWZlcmVuY2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYxNApsZXQgeSA9IDB1MzI7Cip5OyAvLyBlcnJvcjogdHlwZSBgdTMyYCBjYW5ub3QgYmUgZGVyZWZlcmVuY2VkCmBgYAoKT25seSB0eXBlcyBpbXBsZW1lbnRpbmcgYHN0ZDo6b3BzOjpEZXJlZmAgY2FuIGJlIGRlcmVmZXJlbmNlZCAoc3VjaCBhcyBgJlRgKS4KRXhhbXBsZToKCmBgYApsZXQgeSA9IDB1MzI7CmxldCB4ID0gJnk7Ci8vIFNvIGhlcmUsIGB4YCBpcyBhIGAmdTMyYCwgc28gd2UgY2FuIGRlcmVmZXJlbmNlIGl0OgoqeDsgLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////f/ECAAEA8QKzBQD1hAEmAADgCgACBwDhCgEAAwDtAg4AAN8KAgUBBFNvbWUBAQC0CQAB4AoAAwDtAg4AAt8KAAEDANgCJAAA3goBAQC0CQACsgUA2QISAAC0CQUBBUUwNjE0AAEfBQABAAUDANgCJAAA3goBAQG5CQAB3woAtQUApIUBJgAA5QoAAAK1BQCkhQEmAAC0CQUB/QRBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWV0aG9kIGxpa2UgYSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTUKc3RydWN0IEZvbyB7CiAgICB4OiB1MzIsCn0KCmltcGwgRm9vIHsKICAgIGZuIG1ldGhvZCgmc2VsZikge30KfQoKbGV0IGYgPSBGb28geyB4OiAwIH07CmYubWV0aG9kOyAvLyBlcnJvcjogYXR0ZW1wdGVkIHRvIHRha2UgdmFsdWUgb2YgbWV0aG9kIGBtZXRob2RgIG9uIHR5cGUgYEZvb2AKYGBgCgpJZiB5b3Ugd2FudCB0byB1c2UgYSBtZXRob2QsIGFkZCBgKClgIGFmdGVyIGl0OgoKYGBgCiMgc3RydWN0IEZvbyB7IHg6IHUzMiB9CiMgaW1wbCBGb28geyBmbiBtZXRob2QoJnNlbGYpIHt9IH0KIyBsZXQgZiA9IEZvbyB7IHg6IDAgfTsKZi5tZXRob2QoKTsKYGBgCgpIb3dldmVyLCBpZiB5b3Ugd2FudGVkIHRvIGFjY2VzcyBhIGZpZWxkIG9mIGEgc3RydWN0IGNoZWNrIHRoYXQgdGhlIGZpZWxkIG5hbWUKaXMgc3BlbGxlZCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKIyBzdHJ1Y3QgRm9vIHsgeDogdTMyIH0KIyBpbXBsIEZvbyB7IGZuIG1ldGhvZCgmc2VsZikge30gfQojIGxldCBmID0gRm9vIHsgeDogMCB9OwpwcmludGxuISgie30iLCBmLngpOwpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9BAABAP0EtQUApIUBJgAA5AoAAgcA5QoBAAMA7QIOAADjCgIFAQRTb21lAQEAtAkAAeQKAAMA7QIOAALjCgABAwDYAiQAAOIKAQEAtAkAArQFANkCEgAAtAkFAQVFMDYxNQABHwUAAQAFAwDYAiQAAOIKAQEBuQkAAeMKALcFANOFASYAAOkKAAACtwUA04UBJgAAtAkFAZwIQXR0ZW1wdGVkIHRvIGFjY2VzcyBhIHByaXZhdGUgZmllbGQgb24gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE2Cm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgeDogdTMyLCAvLyBTbyBgeGAgaXMgcHJpdmF0ZSBpbiBoZXJlLgogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgRm9vIHsgeDogMCB9IH0KICAgIH0KfQoKbGV0IGYgPSBzb21lX21vZHVsZTo6Rm9vOjpuZXcoKTsKcHJpbnRsbiEoInt9IiwgZi54KTsgLy8gZXJyb3I6IGZpZWxkIGB4YCBvZiBzdHJ1Y3QgYHNvbWVfbW9kdWxlOjpGb29gIGlzIHByaXZhdGUKYGBgCgpJZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhpcyBmaWVsZCwgeW91IGhhdmUgdHdvIG9wdGlvbnM6CgoxKSBTZXQgdGhlIGZpZWxkIHB1YmxpYzoKCmBgYAptb2Qgc29tZV9tb2R1bGUgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiB4OiB1MzIsIC8vIGB4YCBpcyBub3cgcHVibGljLgogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgRm9vIHsgeDogMCB9IH0KICAgIH0KfQoKbGV0IGYgPSBzb21lX21vZHVsZTo6Rm9vOjpuZXcoKTsKcHJpbnRsbiEoInt9IiwgZi54KTsgLy8gb2shCmBgYAoKMikgQWRkIGEgZ2V0dGVyIGZ1bmN0aW9uOgoKYGBgCm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgeDogdTMyLCAvLyBTbyBgeGAgaXMgc3RpbGwgcHJpdmF0ZSBpbiBoZXJlLgogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgRm9vIHsgeDogMCB9IH0KCiAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBnZXR0ZXIgZnVuY3Rpb24gaGVyZToKICAgICAgICBwdWIgZm4gZ2V0X3goJnNlbGYpIC0+ICZ1MzIgeyAmc2VsZi54IH0KICAgIH0KfQoKbGV0IGYgPSBzb21lX21vZHVsZTo6Rm9vOjpuZXcoKTsKcHJpbnRsbiEoInt9IiwgZi5nZXRfeCgpKTsgLy8gb2shCmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/nAgAAQCcCLcFANOFASYAAOgKAAIHAOkKAQADAO0CDgAA5woCBQEEU29tZQEBALQJAAHoCgADAO0CDgAC5woAAQMA2AIkAADmCgEBALQJAAK2BQDZAhIAALQJBQEFRTA2MTYAAR8FAAEABQMA2AIkAADmCgEBAbkJAAHnCgC5BQCChgEmAADtCgAAArkFAIKGASYAALQJBQH1BkF0dGVtcHRlZCB0byBwYXNzIGFuIGludmFsaWQgdHlwZSBvZiB2YXJpYWJsZSBpbnRvIGEgdmFyaWFkaWMgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE3CiMgdXNlIHN0ZDo6b3M6OnJhdzo6e2NfY2hhciwgY19pbnR9OwpleHRlcm4gIkMiIHsKICAgIGZuIHByaW50Zihmb3JtYXQ6ICpjb25zdCBjX2NoYXIsIC4uLikgLT4gY19pbnQ7Cn0KCnVuc2FmZSB7CiAgICBwcmludGYoIiVmXG5cMCIuYXNfcHRyKCkgYXMgXywgMGYzMik7CiAgICAvLyBlcnJvcjogY2Fubm90IHBhc3MgYW4gYGYzMmAgdG8gdmFyaWFkaWMgZnVuY3Rpb24sIGNhc3QgdG8gYGNfZG91YmxlYAp9CmBgYAoKQ2VydGFpbiBSdXN0IHR5cGVzIG11c3QgYmUgY2FzdCBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIGEgdmFyaWFkaWMgZnVuY3Rpb24sCmJlY2F1c2Ugb2YgYXJjYW5lIEFCSSBydWxlcyBkaWN0YXRlZCBieSB0aGUgQyBzdGFuZGFyZC4gVG8gZml4IHRoZSBlcnJvciwKY2FzdCB0aGUgdmFsdWUgdG8gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IHRoZSBlcnJvciBtZXNzYWdlICh3aGljaCB5b3UgbWF5IG5lZWQKdG8gaW1wb3J0IGZyb20gYHN0ZDo6b3M6OnJhd2ApLgoKSW4gdGhpcyBjYXNlLCBgY19kb3VibGVgIGhhcyB0aGUgc2FtZSBzaXplIGFzIGBmNjRgIHNvIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHk6CgpgYGBub19ydW4KIyB1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CiMgZXh0ZXJuICJDIiB7CiMgICAgIGZuIHByaW50Zihmb3JtYXQ6ICpjb25zdCBjX2NoYXIsIC4uLikgLT4gY19pbnQ7CiMgfQoKdW5zYWZlIHsKICAgIHByaW50ZigiJWZcblwwIi5hc19wdHIoKSBhcyBfLCAwZjY0KTsgLy8gb2shCn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8P9QYAAQD1BrkFAIKGASYAAOwKAAIHAO0KAQADAO0CDgAA6woCBQEEU29tZQEBALQJAAHsCgADAO0CDgAC6woAAQMA2AIkAADqCgEBALQJAAK4BQDZAhIAALQJBQEFRTA2MTcAAR8FAAEABQMA2AIkAADqCgEBAbkJAAHrCgC7BQCxhgEmAADxCgAAArsFALGGASYAALQJBQGGBEF0dGVtcHRlZCB0byBjYWxsIHNvbWV0aGluZyB3aGljaCBpc24ndCBhIGZ1bmN0aW9uIG5vciBhIG1ldGhvZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE4CmVudW0gWCB7CiAgICBFbnRyeSwKfQoKWDo6RW50cnkoKTsgLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwKICAgICAgICAgICAgLy8gZm91bmQgYFg6OkVudHJ5YAoKLy8gT3IgZXZlbiBzaW1wbGVyOgpsZXQgeCA9IDBpMzI7CngoKTsgLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwgZm91bmQgYGkzMmAKYGBgCgpPbmx5IGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyBjYW4gYmUgY2FsbGVkIHVzaW5nIGAoKWAuIEV4YW1wbGU6CgpgYGAKLy8gV2UgZGVjbGFyZSBhIGZ1bmN0aW9uOgpmbiBpX2FtX2FfZnVuY3Rpb24oKSB7fQoKLy8gQW5kIHdlIGNhbGwgaXQ6CmlfYW1fYV9mdW5jdGlvbigpOwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AT+GBAABAIYEuwUAsYYBJgAA8AoAAgcA8QoBAAMA7QIOAADvCgIFAQRTb21lAQEAtAkAAfAKAAMA7QIOAALvCgABAwDYAiQAAO4KAQEAtAkAAroFANkCEgAAtAkFAQVFMDYxOAABHwUAAQAFAwDYAiQAAO4KAQEBuQkAAe8KAL0FAOCGASYAAPUKAAACvQUA4IYBJgAAtAkFAaYKIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIHR5cGUtY2hlY2tlciBuZWVkZWQgdG8ga25vdyB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLCBidXQgdGhhdCB0eXBlIGhhZCBub3QKeWV0IGJlZW4gaW5mZXJyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmxldCBtdXQgeCA9IHZlYyFbXTsKbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICAvLyBIZXJlLCB0aGUgdHlwZSBvZiBgdmAgaXMgbm90ICh5ZXQpIGtub3duLCBzbyB3ZQogICAgICAgIC8vIGNhbm5vdCByZXNvbHZlIHRoaXMgbWV0aG9kIGNhbGw6CiAgICAgICAgdi50b191cHBlcmNhc2UoKTsgLy8gZXJyb3I6IHRoZSB0eXBlIG9mIHRoaXMgdmFsdWUgbXVzdCBiZSBrbm93biBpbgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzIGNvbnRleHQKICAgIH0KICAgIE5vbmUgPT4ge30KfQpgYGAKClR5cGUgaW5mZXJlbmNlIHR5cGljYWxseSBwcm9jZWVkcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uIHRvIHRoZSBib3R0b20sCmZpZ3VyaW5nIG91dCB0eXBlcyBhcyBpdCBnb2VzLiBJbiBzb21lIGNhc2VzIC0tIG5vdGFibHkgbWV0aG9kIGNhbGxzIGFuZApvdmVybG9hZGFibGUgb3BlcmF0b3JzIGxpa2UgYCpgIC0tIHRoZSB0eXBlIGNoZWNrZXIgbWF5IG5vdCBoYXZlIGVub3VnaAppbmZvcm1hdGlvbiAqeWV0KiB0byBtYWtlIHByb2dyZXNzLiBUaGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYgdGhlIHJlc3Qgb2YgdGhlCmZ1bmN0aW9uIHByb3ZpZGVzIGVub3VnaCBjb250ZXh0IChiZWNhdXNlIHRoZSB0eXBlLWNoZWNrZXIgaGFzbid0IGxvb2tlZCB0aGF0CmZhciBhaGVhZCB5ZXQpLiBJbiB0aGlzIGNhc2UsIHR5cGUgYW5ub3RhdGlvbnMgY2FuIGJlIHVzZWQgdG8gaGVscCBpdCBhbG9uZy4KClRvIGZpeCB0aGlzIGVycm9yLCBqdXN0IHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLiBFeGFtcGxlOgoKYGBgCmxldCBtdXQgeDogVmVjPFN0cmluZz4gPSB2ZWMhW107IC8vIFdlIHByZWNpc2UgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cy4KbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICB2LnRvX3VwcGVyY2FzZSgpOyAvLyBTaW5jZSBydXN0YyBub3cga25vd3MgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gdXNlIGB2YCdzIG1ldGhvZHMuCiAgICB9CiAgICBOb25lID0+IHt9Cn0KYGBgCgAV////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wemCgABAKYKvQUA4IYBJgAA9AoAAgcA9QoBAAMA7QIOAADzCgIFAQRTb21lAQEAtAkAAfQKAAMA7QIOAALzCgABAwDYAiQAAPIKAQEAtAkAArwFANkCEgAAtAkFAQVFMDYxOQABHwUAAQAFAwDYAiQAAPIKAQEBuQkAAfMKAL8FAI+HASYAAPkKAAACvwUAj4cBJgAAtAkFAZMFQSBjYXN0IHRvIGFuIHVuc2l6ZWQgdHlwZSB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMApsZXQgeCA9ICZbMV91c2l6ZSwgMl0gYXMgW3VzaXplXTsgLy8gZXJyb3I6IGNhc3QgdG8gdW5zaXplZCB0eXBlOiBgJlt1c2l6ZTsgMl1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYXMgYFt1c2l6ZV1gCmBgYAoKSW4gUnVzdCwgc29tZSB0eXBlcyBkb24ndCBoYXZlIGEga25vd24gc2l6ZSBhdCBjb21waWxlLXRpbWUuIEZvciBleGFtcGxlLCBpbiBhCnNsaWNlIHR5cGUgbGlrZSBgW3UzMl1gLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzIG5vdCBrbm93biBhdCBjb21waWxlLXRpbWUgYW5kCmhlbmNlIHRoZSBvdmVyYWxsIHNpemUgY2Fubm90IGJlIGNvbXB1dGVkLiBBcyBhIHJlc3VsdCwgc3VjaCB0eXBlcyBjYW4gb25seSBiZQptYW5pcHVsYXRlZCB0aHJvdWdoIGEgcmVmZXJlbmNlIChlLmcuLCBgJlRgIG9yIGAmbXV0IFRgKSBvciBvdGhlciBwb2ludGVyLXR5cGUKKGUuZy4sIGBCb3hgIG9yIGBSY2ApLiBUcnkgY2FzdGluZyB0byBhIHJlZmVyZW5jZSBpbnN0ZWFkOgoKYGBgCmxldCB4ID0gJlsxX3VzaXplLCAyXSBhcyAmW3VzaXplXTsgLy8gb2shCmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x+TBQABAJMFvwUAj4cBJgAA+AoAAgcA+QoBAAMA7QIOAAD3CgIFAQRTb21lAQEAtAkAAfgKAAMA7QIOAAL3CgABAwDYAiQAAPYKAQEAtAkAAr4FANkCEgAAtAkFAQVFMDYyMAABHwUAAQAFAwDYAiQAAPYKAQEBuQkAAfcKAMEFAL6HASYAAP0KAAACwQUAvocBJgAAtAkFAfgIVGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGxpZmV0aW1lcyBhcHBlYXJpbmcgaW4gdGhlCmZ1bmN0aW9uIHNpZ25hdHVyZSAoaS5lLiwgdGhlIHBhcmFtZXRlciB0eXBlcyBhbmQgdGhlIHJldHVybiB0eXBlKSBhbmQgdGhlCmRhdGEtZmxvdyBmb3VuZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjEKZm4gZm9vPCdhPih4OiAmJ2EgaTMyLCB5OiAmaTMyKSAtPiAmJ2EgaTMyIHsgLy8gZXJyb3I6IGV4cGxpY2l0IGxpZmV0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXF1aXJlZCBpbiB0aGUgdHlwZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYHlgCiAgICBpZiB4ID4geSB7IHggfSBlbHNlIHsgeSB9Cn0KYGBgCgpJbiB0aGUgY29kZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIGlzIHJldHVybmluZyBkYXRhIGJvcnJvd2VkIGZyb20gZWl0aGVyIGB4YCBvcgpgeWAsIGJ1dCB0aGUgYCdhYCBhbm5vdGF0aW9uIGluZGljYXRlcyB0aGF0IGl0IGlzIHJldHVybmluZyBkYXRhIG9ubHkgZnJvbSBgeGAuClRvIGZpeCB0aGUgZXJyb3IsIHRoZSBzaWduYXR1cmUgYW5kIHRoZSBib2R5IG11c3QgYmUgbWFkZSB0byBtYXRjaC4gVHlwaWNhbGx5LAp0aGlzIGlzIGRvbmUgYnkgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gU28sIGluIHRoaXMgY2FzZSwgd2UgY2hhbmdlCnRoZSB0eXBlIG9mIGB5YCB0byBgJidhIGkzMmAsIGxpa2Ugc286CgpgYGAKZm4gZm9vPCdhPih4OiAmJ2EgaTMyLCB5OiAmJ2EgaTMyKSAtPiAmJ2EgaTMyIHsKICAgIGlmIHggPiB5IHsgeCB9IGVsc2UgeyB5IH0KfQpgYGAKCk5vdyB0aGUgc2lnbmF0dXJlIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBkYXRhIGJvcnJvd2VkIGZyb20gZWl0aGVyIGB4YCBvcgpgeWAuIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBjaGFuZ2UgdGhlIGJvZHkgdG8gbm90IHJldHVybiBkYXRhIGZyb20gYHlgOgoKYGBgCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJmkzMikgLT4gJidhIGkzMiB7CiAgICB4Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gIAAEA+AjBBQC+hwEmAAD8CgACBwD9CgEAAwDtAg4AAPsKAgUBBFNvbWUBAQC0CQAB/AoAAwDtAg4AAvsKAAEDANgCJAAA+goBAQC0CQACwAUA2QISAAC0CQUBBUUwNjIxAAEfBQABAAUDANgCJAAA+goBAQG5CQAB+woAwwUA7YcBJgAAgQsAAALDBQDthwEmAAC0CQUB3wRBbiBpbnRyaW5zaWMgd2FzIGRlY2xhcmVkIHdpdGhvdXQgYmVpbmcgYSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjIKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgcHViIHN0YXRpYyBicmVha3BvaW50IDogZm4oKTsgLy8gZXJyb3I6IGludHJpbnNpYyBtdXN0IGJlIGEgZnVuY3Rpb24KfQoKZm4gbWFpbigpIHsgdW5zYWZlIHsgYnJlYWtwb2ludCgpOyB9IH0KYGBgCgpBbiBpbnRyaW5zaWMgaXMgYSBmdW5jdGlvbiBhdmFpbGFibGUgZm9yIHVzZSBpbiBhIGdpdmVuIHByb2dyYW1taW5nIGxhbmd1YWdlCndob3NlIGltcGxlbWVudGF0aW9uIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IHRoZSBjb21waWxlci4gSW4gb3JkZXIgdG8gZml4IHRoaXMKZXJyb3IsIGp1c3QgZGVjbGFyZSBhIGZ1bmN0aW9uLiBFeGFtcGxlOgoKYGBgbm9fcnVuCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIHB1YiBmbiBicmVha3BvaW50KCk7IC8vIG9rIQp9CgpmbiBtYWluKCkgeyB1bnNhZmUgeyBicmVha3BvaW50KCk7IH0gfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////B98EAAEA3wTDBQDthwEmAACACwACBwCBCwEAAwDtAg4AAP8KAgUBBFNvbWUBAQC0CQABgAsAAwDtAg4AAv8KAAEDANgCJAAA/goBAQC0CQACwgUA2QISAAC0CQUBBUUwNjIyAAEfBQABAAUDANgCJAAA/goBAQG5CQAB/woAxQUAnIgBJgAAhQsAAALFBQCciAEmAAC0CQUBtAZBIGxpZmV0aW1lIGRpZG4ndCBtYXRjaCB3aGF0IHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjMKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIGlzaXplLAp9CgpmbiBiYXI8J3Nob3J0LCAnbG9uZz4oYzogRm9vPCdzaG9ydD4sIGw6ICYnbG9uZyBpc2l6ZSkgewogICAgbGV0IF86IEZvbzwnbG9uZz4gPSBjOyAvLyBlcnJvciEKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgd2UgdHJpZWQgdG8gc2V0IGEgdmFsdWUgd2l0aCBhbiBpbmNvbXBhdGlibGUgbGlmZXRpbWUgdG8KYW5vdGhlciBvbmUgKGAnbG9uZ2AgaXMgdW5yZWxhdGVkIHRvIGAnc2hvcnRgKS4gV2UgY2FuIHNvbHZlIHRoaXMgaXNzdWUgaW4KdHdvIGRpZmZlcmVudCB3YXlzOgoKRWl0aGVyIHdlIG1ha2UgYCdzaG9ydGAgbGl2ZSBhdCBsZWFzdCBhcyBsb25nIGFzIGAnbG9uZ2A6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIGlzaXplLAp9CgovLyB3ZSBzZXQgJ3Nob3J0IHRvIGxpdmUgYXQgbGVhc3QgYXMgbG9uZyBhcyAnbG9uZwpmbiBiYXI8J3Nob3J0OiAnbG9uZywgJ2xvbmc+KGM6IEZvbzwnc2hvcnQ+LCBsOiAmJ2xvbmcgaXNpemUpIHsKICAgIGxldCBfOiBGb288J2xvbmc+ID0gYzsgLy8gb2shCn0KYGBgCgpPciB3ZSB1c2Ugb25seSBvbmUgbGlmZXRpbWU6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIGlzaXplLAp9CmZuIGJhcjwnc2hvcnQ+KGM6IEZvbzwnc2hvcnQ+LCBsOiAmJ3Nob3J0IGlzaXplKSB7CiAgICBsZXQgXzogRm9vPCdzaG9ydD4gPSBjOyAvLyBvayEKfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////B7QGAAEAtAbFBQCciAEmAACECwACBwCFCwEAAwDtAg4AAIMLAgUBBFNvbWUBAQC0CQABhAsAAwDtAg4AAoMLAAEDANgCJAAAggsBAQC0CQACxAUA2QISAAC0CQUBBUUwNjIzAAEfBQABAAUDANgCJAAAggsBAQG5CQABgwsAxwUAy4gBJgAAiQsAAALHBQDLiAEmAAC0CQUBlgdBIHByaXZhdGUgaXRlbSB3YXMgdXNlZCBvdXRzaWRlIG9mIGl0cyBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjQKbW9kIGlubmVyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vOwoKICAgIGltcGwgRm9vIHsKICAgICAgICBmbiBtZXRob2QoJnNlbGYpIHt9CiAgICB9Cn0KCmxldCBmb28gPSBpbm5lcjo6Rm9vOwpmb28ubWV0aG9kKCk7IC8vIGVycm9yOiBtZXRob2QgYG1ldGhvZGAgaXMgcHJpdmF0ZQpgYGAKClR3byBwb3NzaWJpbGl0aWVzIGFyZSBhdmFpbGFibGUgdG8gc29sdmUgdGhpcyBpc3N1ZToKCjEuIE9ubHkgdXNlIHRoZSBpdGVtIGluIHRoZSBzY29wZSBpdCBoYXMgYmVlbiBkZWZpbmVkOgoKYGBgCm1vZCBpbm5lciB7CiAgICBwdWIgc3RydWN0IEZvbzsKCiAgICBpbXBsIEZvbyB7CiAgICAgICAgZm4gbWV0aG9kKCZzZWxmKSB7fQogICAgfQoKICAgIHB1YiBmbiBjYWxsX21ldGhvZChmb286ICZGb28pIHsgLy8gV2UgY3JlYXRlIGEgcHVibGljIGZ1bmN0aW9uLgogICAgICAgIGZvby5tZXRob2QoKTsgLy8gV2hpY2ggY2FsbHMgdGhlIGl0ZW0uCiAgICB9Cn0KCmxldCBmb28gPSBpbm5lcjo6Rm9vOwppbm5lcjo6Y2FsbF9tZXRob2QoJmZvbyk7IC8vIEFuZCBzaW5jZSB0aGUgZnVuY3Rpb24gaXMgcHVibGljLCB3ZSBjYW4gY2FsbCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXRob2QgdGhyb3VnaCBpdC4KYGBgCgoyLiBNYWtlIHRoZSBpdGVtIHB1YmxpYzoKCmBgYAptb2QgaW5uZXIgewogICAgcHViIHN0cnVjdCBGb287CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBtZXRob2QoJnNlbGYpIHt9IC8vIEl0J3Mgbm93IHB1YmxpYy4KICAgIH0KfQoKbGV0IGZvbyA9IGlubmVyOjpGb287CmZvby5tZXRob2QoKTsgLy8gT2shCmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////AZYHAAEAlgfHBQDLiAEmAACICwACBwCJCwEAAwDtAg4AAIcLAgUBBFNvbWUBAQC0CQABiAsAAwDtAg4AAocLAAEDANgCJAAAhgsBAQC0CQACxgUA2QISAAC0CQUBBUUwNjI0AAEfBQABAAUDANgCJAAAhgsBAQG5CQABhwsAyQUA+ogBJgAAjQsAAALJBQD6iAEmAAC0CQUBxARBIGNvbXBpbGUtdGltZSBjb25zdCB2YXJpYWJsZSBpcyByZWZlcnJpbmcgdG8gYSB0aHJlYWQtbG9jYWwgc3RhdGljIHZhcmlhYmxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNQojIVtmZWF0dXJlKHRocmVhZF9sb2NhbCldCgojW3RocmVhZF9sb2NhbF0Kc3RhdGljIFg6IHVzaXplID0gMTI7Cgpjb25zdCBZOiB1c2l6ZSA9IDIgKiBYOwpgYGAKClN0YXRpYyBhbmQgY29uc3QgdmFyaWFibGVzIGNhbiByZWZlciB0byBvdGhlciBjb25zdCB2YXJpYWJsZXMgYnV0IGEgY29uc3QKdmFyaWFibGUgY2Fubm90IHJlZmVyIHRvIGEgdGhyZWFkLWxvY2FsIHN0YXRpYyB2YXJpYWJsZS4gSW4gdGhpcyBleGFtcGxlLApgWWAgY2Fubm90IHJlZmVyIHRvIGBYYC4gVG8gZml4IHRoaXMsIHRoZSB2YWx1ZSBjYW4gYmUgZXh0cmFjdGVkIGFzIGEgY29uc3QKYW5kIHRoZW4gdXNlZDoKCmBgYAojIVtmZWF0dXJlKHRocmVhZF9sb2NhbCldCgpjb25zdCBDOiB1c2l6ZSA9IDEyOwoKI1t0aHJlYWRfbG9jYWxdCnN0YXRpYyBYOiB1c2l6ZSA9IEM7Cgpjb25zdCBZOiB1c2l6ZSA9IDIgKiBDOwpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPxAQAAQDEBMkFAPqIASYAAIwLAAIHAI0LAQADAO0CDgAAiwsCBQEEU29tZQEBALQJAAGMCwADAO0CDgACiwsAAQMA2AIkAACKCwEBALQJAALIBQDZAhIAALQJBQEFRTA2MjUAAR8FAAEABQMA2AIkAACKCwEBAbkJAAGLCwDLBQCpiQEmAACRCwAAAssFAKmJASYAALQJBQHuElRoaXMgZXJyb3Igb2NjdXJzIGJlY2F1c2UgYSBib3Jyb3cgaW4gYSBnZW5lcmF0b3IgcGVyc2lzdHMgYWNyb3NzIGEKeWllbGQgcG9pbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI2CiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICAgIGxldCBhID0gJlN0cmluZzo6bmV3KCk7IC8vIDwtLSBUaGlzIGJvcnJvdy4uLgogICAgeWllbGQgKCk7IC8vIC4uLmlzIHN0aWxsIGluIHNjb3BlIGhlcmUsIHdoZW4gdGhlIHlpZWxkIG9jY3Vycy4KICAgIHByaW50bG4hKCJ7fSIsIGEpOwp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CmBgYAoKQXQgcHJlc2VudCwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byBoYXZlIGEgeWllbGQgdGhhdCBvY2N1cnMgd2hpbGUgYQpib3Jyb3cgaXMgc3RpbGwgaW4gc2NvcGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvciwgdGhlIGJvcnJvdyBtdXN0CmVpdGhlciBiZSAiY29udGFpbmVkIiB0byBhIHNtYWxsZXIgc2NvcGUgdGhhdCBkb2VzIG5vdCBvdmVybGFwIHRoZQp5aWVsZCBvciBlbHNlIGVsaW1pbmF0ZWQgaW4gYW5vdGhlciB3YXkuIFNvLCBmb3IgZXhhbXBsZSwgd2UgbWlnaHQKcmVzb2x2ZSB0aGUgcHJldmlvdXMgZXhhbXBsZSBieSByZW1vdmluZyB0aGUgYm9ycm93IGFuZCBqdXN0IHN0b3JpbmcKdGhlIGludGVnZXIgYnkgdmFsdWU6CgpgYGAKIyAjIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCwgcGluKV0KIyB1c2Ugc3RkOjpvcHM6OkdlbmVyYXRvcjsKIyB1c2Ugc3RkOjpwaW46OlBpbjsKbGV0IG11dCBiID0gfHwgewogICAgbGV0IGEgPSAzOwogICAgeWllbGQgKCk7CiAgICBwcmludGxuISgie30iLCBhKTsKfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKClRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBjYXNlLCBvZiBjb3Vyc2UuIEluIG1vcmUgY29tcGxleCBjYXNlcywgd2UgbWF5Cndpc2ggdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgdGhhdCB3YXMgYm9ycm93ZWQgLS0KaW4gdGhvc2UgY2FzZXMsIHNvbWV0aGluZyBsaWtlIHRoZSBgUmNgIG9yIGBBcmNgIHR5cGVzIG1heSBiZSB1c2VmdWwuCgpUaGlzIGVycm9yIGFsc28gZnJlcXVlbnRseSBhcmlzZXMgd2l0aCBpdGVyYXRpb246CgpgYGBjb21waWxlX2ZhaWwsRTA2MjYKIyAjIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCwgcGluKV0KIyB1c2Ugc3RkOjpvcHM6OkdlbmVyYXRvcjsKIyB1c2Ugc3RkOjpwaW46OlBpbjsKbGV0IG11dCBiID0gfHwgewogIGxldCB2ID0gdmVjIVsxLDIsM107CiAgZm9yICZ4IGluICZ2IHsgLy8gPC0tIGJvcnJvdyBvZiBgdmAgaXMgc3RpbGwgaW4gc2NvcGUuLi4KICAgIHlpZWxkIHg7IC8vIC4uLndoZW4gdGhpcyB5aWVsZCBvY2N1cnMuCiAgfQp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CmBgYAoKU3VjaCBjYXNlcyBjYW4gc29tZXRpbWVzIGJlIHJlc29sdmVkIGJ5IGl0ZXJhdGluZyAiYnkgdmFsdWUiIChvciB1c2luZwpgaW50b19pdGVyKClgKSB0byBhdm9pZCBib3Jyb3dpbmc6CgpgYGAKIyAjIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCwgcGluKV0KIyB1c2Ugc3RkOjpvcHM6OkdlbmVyYXRvcjsKIyB1c2Ugc3RkOjpwaW46OlBpbjsKbGV0IG11dCBiID0gfHwgewogIGxldCB2ID0gdmVjIVsxLDIsM107CiAgZm9yIHggaW4gdiB7IC8vIDwtLSBUYWtlIG93bmVyc2hpcCBvZiB0aGUgdmFsdWVzIGluc3RlYWQhCiAgICB5aWVsZCB4OyAvLyA8LS0gTm93IHlpZWxkIGlzIE9LLgogIH0KfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKCklmIHRha2luZyBvd25lcnNoaXAgaXMgbm90IGFuIG9wdGlvbiwgdXNpbmcgaW5kaWNlcyBjYW4gd29yayB0b286CgpgYGAKIyAjIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCwgcGluKV0KIyB1c2Ugc3RkOjpvcHM6OkdlbmVyYXRvcjsKIyB1c2Ugc3RkOjpwaW46OlBpbjsKbGV0IG11dCBiID0gfHwgewogIGxldCB2ID0gdmVjIVsxLDIsM107CiAgbGV0IGxlbiA9IHYubGVuKCk7IC8vICgqKQogIGZvciBpIGluIDAuLmxlbiB7CiAgICBsZXQgeCA9IHZbaV07IC8vICgqKQogICAgeWllbGQgeDsgLy8gPC0tIE5vdyB5aWVsZCBpcyBPSy4KICB9Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKCi8vICgqKSAtLSBVbmZvcnR1bmF0ZWx5LCB0aGVzZSB0ZW1wb3JhcmllcyBhcmUgY3VycmVudGx5IHJlcXVpcmVkLgovLyBTZWUgPGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNDMxMjI+LgpgYGAKACb///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////D+4SAAEA7hLLBQCpiQEmAACQCwACBwCRCwEAAwDtAg4AAI8LAgUBBFNvbWUBAQC0CQABkAsAAwDtAg4AAo8LAAEDANgCJAAAjgsBAQC0CQACygUA2QISAAC0CQUBBUUwNjI2AAEfBQABAAUDANgCJAAAjgsBAQG5CQABjwsAzQUA2IkBJgAAlQsAAALNBQDYiQEmAAC0CQUBuARBIHlpZWxkIGV4cHJlc3Npb24gd2FzIHVzZWQgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhdG9yIGxpdGVyYWwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI3CiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIGZha2VfZ2VuZXJhdG9yKCkgLT4gJidzdGF0aWMgc3RyIHsKICAgIHlpZWxkIDE7CiAgICByZXR1cm4gImZvbyIKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZ2VuZXJhdG9yID0gZmFrZV9nZW5lcmF0b3I7Cn0KYGBgCgpUaGUgZXJyb3Igb2NjdXJzIGJlY2F1c2Uga2V5d29yZCBgeWllbGRgIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHRoZSBnZW5lcmF0b3IKbGl0ZXJhbC4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgY29uc3RydWN0aW5nIHRoZSBnZW5lcmF0b3IgY29ycmVjdGx5LgoKYGBgCiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGdlbmVyYXRvciA9IHx8IHsKICAgICAgICB5aWVsZCAxOwogICAgICAgIHJldHVybiAiZm9vIgogICAgfTsKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/uAQAAQC4BM0FANiJASYAAJQLAAIHAJULAQADAO0CDgAAkwsCBQEEU29tZQEBALQJAAGUCwADAO0CDgACkwsAAQMA2AIkAACSCwEBALQJAALMBQDZAhIAALQJBQEFRTA2MjcAAR8FAAEABQMA2AIkAACSCwEBAbkJAAGTCwDPBQCHigEmAACZCwAAAs8FAIeKASYAALQJBQGiBU1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyIHdhcyB1c2VkIGZvciBhIGdlbmVyYXRvci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjgKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8YTogaTMyLCBiOiBpMzJ8IHsKICAgICAgICAvLyBlcnJvcjogdG9vIG1hbnkgcGFyYW1ldGVycyBmb3IgYSBnZW5lcmF0b3IKICAgICAgICAvLyBBbGxvd2VkIG9ubHkgMCBvciAxIHBhcmFtZXRlcgogICAgICAgIHlpZWxkIGE7CiAgICB9Owp9CmBgYAoKQXQgcHJlc2VudCwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byBwYXNzIG1vcmUgdGhhbiBvbmUgZXhwbGljaXQKcGFyYW1ldGVyIGZvciBhIGdlbmVyYXRvci5UaGlzIGNhbiBiZSBmaXhlZCBieSB1c2luZwphdCBtb3N0IDEgcGFyYW1ldGVyIGZvciB0aGUgZ2VuZXJhdG9yLiBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgcmVzb2x2ZQp0aGUgcHJldmlvdXMgZXhhbXBsZSBieSBwYXNzaW5nIG9ubHkgb25lIHBhcmFtZXRlci4KCmBgYAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHxhOiBpMzJ8IHsKICAgICAgICB5aWVsZCBhOwogICAgfTsKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////z+iBQABAKIFzwUAh4oBJgAAmAsAAgcAmQsBAAMA7QIOAACXCwIFAQRTb21lAQEAtAkAAZgLAAMA7QIOAAKXCwABAwDYAiQAAJYLAQEAtAkAAs4FANkCEgAAtAkFAQVFMDYyOAABHwUAAQAFAwDYAiQAAJYLAQEBuQkAAZcLANEFALaKASYAAJ0LAAAC0QUAtooBJgAAtAkFAfADVGhpcyBlcnJvciBpbmRpY2F0ZXMgYSB0eXBlIG1pc21hdGNoIGluIGNsb3N1cmUgYXJndW1lbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzMQpmbiBmb288RjogRm4oaTMyKT4oZjogRikgewp9CgpmbiBtYWluKCkgewogICAgZm9vKHx4OiAmc3RyfCB7fSk7Cn0KYGBgCgpUaGUgZXJyb3Igb2NjdXJzIGJlY2F1c2UgYGZvb2AgYWNjZXB0cyBhIGNsb3N1cmUgdGhhdCB0YWtlcyBhbiBgaTMyYCBhcmd1bWVudCwKYnV0IGluIGBtYWluYCwgaXQgaXMgcGFzc2VkIGEgY2xvc3VyZSB3aXRoIGEgYCZzdHJgIGFyZ3VtZW50LgoKVGhpcyBjYW4gYmUgcmVzb2x2ZWQgYnkgY2hhbmdpbmcgdGhlIHR5cGUgYW5ub3RhdGlvbiBvciByZW1vdmluZyBpdCBlbnRpcmVseQppZiBpdCBjYW4gYmUgaW5mZXJyZWQuCgpgYGAKZm4gZm9vPEY6IEZuKGkzMik+KGY6IEYpIHsKfQoKZm4gbWFpbigpIHsKICAgIGZvbyh8eDogaTMyfCB7fSk7Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////z/wAwABAPAD0QUAtooBJgAAnAsAAgcAnQsBAAMA7QIOAACbCwIFAQRTb21lAQEAtAkAAZwLAAMA7QIOAAKbCwABAwDYAiQAAJoLAQEAtAkAAtAFANkCEgAAtAkFAQVFMDYzMQABHwUAAQAFAwDYAiQAAJoLAQEBuQkAAZsLANMFAOWKASYAAKELAAAC0wUA5YoBJgAAtAkFAYoFQW4gZXhwbGljaXQgZ2VuZXJpYyBhcmd1bWVudCB3YXMgcHJvdmlkZWQgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdAp1c2VzIGBpbXBsIFRyYWl0YCBpbiBhcmd1bWVudCBwb3NpdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MzIKZm4gZm9vPFQ6IENvcHk+KGE6IFQsIGI6IGltcGwgQ2xvbmUpIHt9Cgpmb286OjxpMzI+KDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKYGBgCgpFaXRoZXIgYWxsIGdlbmVyaWMgYXJndW1lbnRzIHNob3VsZCBiZSBpbmZlcnJlZCBhdCB0aGUgY2FsbCBzaXRlLCBvcgp0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBzaG91bGQgdXNlIGFuIGV4cGxpY2l0IGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIKaW5zdGVhZCBvZiBgaW1wbCBUcmFpdGAuIEV4YW1wbGU6CgpgYGAKZm4gZm9vPFQ6IENvcHk+KGE6IFQsIGI6IGltcGwgQ2xvbmUpIHt9CmZuIGJhcjxUOiBDb3B5LCBVOiBDbG9uZT4oYTogVCwgYjogVSkge30KCmZvbygwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CgpiYXI6OjxpMzIsIFN0cmluZz4oMGkzMiwgImFiYyIudG9fc3RyaW5nKCkpOwpiYXI6OjxfLCBfPigwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CmJhcigwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/B4oFAAEAigXTBQDligEmAACgCwACBwChCwEAAwDtAg4AAJ8LAgUBBFNvbWUBAQC0CQABoAsAAwDtAg4AAp8LAAEDANgCJAAAngsBAQC0CQAC0gUA2QISAAC0CQUBBUUwNjMyAAEfBQABAAUDANgCJAAAngsBAQG5CQABnwsA1QUAlIsBJgAApQsAAALVBQCUiwEmAAC0CQUB+AUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgYHVud2luZGAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUodW53aW5kX2F0dHJpYnV0ZXMpXQoKI1t1bndpbmQoKV0gLy8gZXJyb3I6IGV4cGVjdGVkIG9uZSBhcmd1bWVudApwdWIgZXh0ZXJuICJDIiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIGAjW3Vud2luZF1gIGF0dHJpYnV0ZSBzaG91bGQgYmUgdXNlZCBhcyBmb2xsb3dzOgoKLSBgI1t1bndpbmQoYWJvcnRzKV1gIC0tIHNwZWNpZmllcyB0aGF0IGlmIGEgbm9uLVJ1c3QgQUJJIGZ1bmN0aW9uCiAgc2hvdWxkIGFib3J0IHRoZSBwcm9jZXNzIGlmIGl0IGF0dGVtcHRzIHRvIHVud2luZC4gVGhpcyBpcyB0aGUgc2FmZXIKICBhbmQgcHJlZmVycmVkIG9wdGlvbi4KCi0gYCNbdW53aW5kKGFsbG93ZWQpXWAgLS0gc3BlY2lmaWVzIHRoYXQgYSBub24tUnVzdCBBQkkgZnVuY3Rpb24KICBzaG91bGQgYmUgYWxsb3dlZCB0byB1bndpbmQuIFRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gVW5kZWZpbmVkCiAgQmVoYXZpb3IgKFVCKSwgc28gYmUgY2FyZWZ1bC4KCk5CLiBUaGUgZGVmYXVsdCBiZWhhdmlvciBoZXJlIGlzICJhbGxvd2VkIiwgYnV0IHRoaXMgaXMgdW5zcGVjaWZpZWQKYW5kIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/+AUAAQD4BdUFAJSLASYAAKQLAAIHAKULAQADAO0CDgAAowsCBQEEU29tZQEBALQJAAGkCwADAO0CDgACowsAAQMA2AIkAACiCwEBALQJAALUBQDZAhIAALQJBQEFRTA2MzMAAR8FAAEABQMA2AIkAACiCwEBAbkJAAGjCwDXBQDDiwEmAACpCwAAAtcFAMOLASYAALQJBQGpA0EgdHlwZSBoYXMgY29uZmxpY3RpbmcgYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDYzNAojW3JlcHIocGFja2VkLCBwYWNrZWQoMikpXSAvLyBlcnJvciEKc3RydWN0IENvbXBhbnkoaTMyKTsKCiNbcmVwcihwYWNrZWQoMikpXSAvLyBlcnJvciEKI1tyZXByKHBhY2tlZCldCnN0cnVjdCBDb21wYW55KGkzMik7CmBgYAoKWW91IGNhbm5vdCB1c2UgY29uZmxpY3RpbmcgYHBhY2tlZGAgaGludHMgb24gYSBzYW1lIHR5cGUuIElmIHlvdSB3YW50IHRvIHBhY2sgYQp0eXBlIHRvIGEgZ2l2ZW4gc2l6ZSwgeW91IHNob3VsZCBwcm92aWRlIGEgc2l6ZSB0byBwYWNrZWQ6CgpgYGAKI1tyZXByKHBhY2tlZCldIC8vIG9rIQpzdHJ1Y3QgQ29tcGFueShpMzIpOwpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pAwABAKkD1wUAw4sBJgAAqAsAAgcAqQsBAAMA7QIOAACnCwIFAQRTb21lAQEAtAkAAagLAAMA7QIOAAKnCwABAwDYAiQAAKYLAQEAtAkAAtYFANkCEgAAtAkFAQVFMDYzNAABHwUAAQAFAwDYAiQAAKYLAQEBuQkAAacLANkFAPKLASYAAK0LAAAC2QUA8osBJgAAtAkFAa4BVGhlIGAjIVtmZWF0dXJlXWAgYXR0cmlidXRlIHNwZWNpZmllZCBhbiB1bmtub3duIGZlYXR1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM1CiMhW2ZlYXR1cmUobm9uZXhpc3RlbnRfcnVzdF9mZWF0dXJlKV0gLy8gZXJyb3I6IHVua25vd24gZmVhdHVyZQpgYGAKAAP///////////8B////////////Af///////w+uAQABAK4B2QUA8osBJgAArAsAAgcArQsBAAMA7QIOAACrCwIFAQRTb21lAQEAtAkAAawLAAMA7QIOAAKrCwABAwDYAiQAAKoLAQEAtAkAAtgFANkCEgAAtAkFAQVFMDYzNQABHwUAAQAFAwDYAiQAAKoLAQEBuQkAAasLANsFAKGMASYAALELAAAC2wUAoYwBJgAAtAkFAeQBQSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgbXVsdGlwbGUgdGltZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM2CiMhW2FsbG93KHN0YWJsZV9mZWF0dXJlcyldCiMhW2ZlYXR1cmUocnVzdDEpXQojIVtmZWF0dXJlKHJ1c3QxKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBydXN0MWAgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZApgYGAKAAT///////////8B////////////Af///////////wH//////wHkAQABAOQB2wUAoYwBJgAAsAsAAgcAsQsBAAMA7QIOAACvCwIFAQRTb21lAQEAtAkAAbALAAMA7QIOAAKvCwABAwDYAiQAAK4LAQEAtAkAAtoFANkCEgAAtAkFAQVFMDYzNgABHwUAAQAFAwDYAiQAAK4LAQEBuQkAAa8LAN0FANCMASYAALULAAAC3QUA0IwBJgAAtAkFAYYLYCdfYCBsaWZldGltZSBuYW1lIG9yIGAmVGAgd2l0aG91dCBhbiBleHBsaWNpdCBsaWZldGltZSBuYW1lIGhhcyBiZWVuIHVzZWQKb24gaWxsZWdhbCBwbGFjZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYsRTA2MzcKZm4gdW5kZXJzY29yZV9saWZldGltZTwnXz4oc3RyMTogJidfIHN0ciwgc3RyMjogJidfIHN0cikgLT4gJidfIHN0ciB7CiAgICAgICAgICAgICAgICAgICAgIC8vXl4gYCdfYCBpcyBhIHJlc2VydmVkIGxpZmV0aW1lIG5hbWUKICAgIGlmIHN0cjEubGVuKCkgPiBzdHIyLmxlbigpIHsKICAgICAgICBzdHIxCiAgICB9IGVsc2UgewogICAgICAgIHN0cjIKICAgIH0KfQoKZm4gYW5kX3dpdGhvdXRfZXhwbGljaXRfbGlmZXRpbWU8VD4oKQp3aGVyZQogICAgVDogSW50bzwmdTMyPiwKICAgICAgICAgIC8vXiBgJmAgd2l0aG91dCBhbiBleHBsaWNpdCBsaWZldGltZSBuYW1lCnsKfQpgYGAKCkZpcnN0LCBgJ19gIGNhbm5vdCBiZSB1c2VkIGFzIGEgbGlmZXRpbWUgaWRlbnRpZmllciBpbiBzb21lIHBsYWNlcwpiZWNhdXNlIGl0IGlzIGEgcmVzZXJ2ZWQgZm9yIHRoZSBhbm9ueW1vdXMgbGlmZXRpbWUuIFNlY29uZCwgYCZUYAp3aXRob3V0IGFuIGV4cGxpY2l0IGxpZmV0aW1lIG5hbWUgY2Fubm90IGFsc28gYmUgdXNlZCBpbiBzb21lIHBsYWNlcy4KVG8gZml4IHRoZW0sIHVzZSBhIGxvd2VyY2FzZSBsZXR0ZXIgc3VjaCBhcyBgJ2FgLCBvciBhIHNlcmllcwpvZiBsb3dlcmNhc2UgbGV0dGVycyBzdWNoIGFzIGAnZm9vYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGlmZXRpbWUKaWRlbnRpZmllciwgc2VlIFt0aGUgYm9va11bYmstbm9dLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZwp0aGUgYW5vbnltb3VzIGxpZmV0aW1lIGluIFJ1c3QgMjAxOCwgc2VlIFt0aGUgUnVzdCAyMDE4IGJsb2cgcG9zdF1bYmxvZy1hbF0uCgpDb3JyZWN0ZWQgZXhhbXBsZToKCmBgYApmbiB1bmRlcnNjb3JlX2xpZmV0aW1lPCdhPihzdHIxOiAmJ2Egc3RyLCBzdHIyOiAmJ2Egc3RyKSAtPiAmJ2Egc3RyIHsKICAgIGlmIHN0cjEubGVuKCkgPiBzdHIyLmxlbigpIHsKICAgICAgICBzdHIxCiAgICB9IGVsc2UgewogICAgICAgIHN0cjIKICAgIH0KfQoKZm4gYW5kX3dpdGhvdXRfZXhwbGljaXRfbGlmZXRpbWU8J2ZvbywgVD4oKQp3aGVyZQogICAgVDogSW50bzwmJ2ZvbyB1MzI+LAp7Cn0KYGBgCgpbYmstbm9dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDItb3BlcmF0b3JzLmh0bWwjbm9uLW9wZXJhdG9yLXN5bWJvbHMKW2Jsb2ctYWxdOiBodHRwczovL2Jsb2cucnVzdC1sYW5nLm9yZy8yMDE4LzEyLzA2L1J1c3QtMS4zMS1hbmQtcnVzdC0yMDE4Lmh0bWwjbW9yZS1saWZldGltZS1lbGlzaW9uLXJ1bGVzCgAX////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AT+GCwABAIYL3QUA0IwBJgAAtAsAAgcAtQsBAAMA7QIOAACzCwIFAQRTb21lAQEAtAkAAbQLAAMA7QIOAAKzCwABAwDYAiQAALILAQEAtAkAAtwFANkCEgAAtAkFAQVFMDYzNwABHwUAAQAFAwDYAiQAALILAQEBuQkAAbMLAN8FAP+MASYAALkLAAAC3wUA/4wBJgAAtAkFAYULVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RydWN0LCBlbnVtIG9yIGVudW0gdmFyaWFudCBtdXN0IGJlIG1hdGNoZWQKbm9uLWV4aGF1c3RpdmVseSBhcyBpdCBoYXMgYmVlbiBtYXJrZWQgYXMgYG5vbl9leGhhdXN0aXZlYC4KCldoZW4gYXBwbGllZCB3aXRoaW4gYSBjcmF0ZSwgZG93bnN0cmVhbSB1c2VycyBvZiB0aGUgY3JhdGUgd2lsbCBuZWVkIHRvIHVzZSB0aGUKYF9gIHBhdHRlcm4gd2hlbiBtYXRjaGluZyBlbnVtcyBhbmQgdXNlIHRoZSBgLi5gIHBhdHRlcm4gd2hlbiBtYXRjaGluZyBzdHJ1Y3RzLgpEb3duc3RyZWFtIGNyYXRlcyBjYW5ub3QgbWF0Y2ggYWdhaW5zdCBub24tZXhoYXVzdGl2ZSBlbnVtIHZhcmlhbnRzLgoKRm9yIGV4YW1wbGUsIGluIHRoZSBiZWxvdyBleGFtcGxlLCBzaW5jZSB0aGUgZW51bSBpcyBtYXJrZWQgYXMKYG5vbl9leGhhdXN0aXZlYCwgaXQgaXMgcmVxdWlyZWQgdGhhdCBkb3duc3RyZWFtIGNyYXRlcyBtYXRjaCBub24tZXhoYXVzdGl2ZWx5Cm9uIGl0LgoKYGBgcnVzdCxpZ25vcmUgKHBzZXVkby1SdXN0KQojW25vbl9leGhhdXN0aXZlXQpwdWIgZW51bSBFcnJvciB7CiAgICBNZXNzYWdlKFN0cmluZyksCiAgICBPdGhlciwKfQoKaW1wbCBEaXNwbGF5IGZvciBFcnJvciB7CiAgICBmbiBmbXQoJnNlbGYsIGZvcm1hdHRlcjogJm11dCBmbXQ6OkZvcm1hdHRlcikgLT4gZm10OjpSZXN1bHQgewogICAgICAgIC8vIFRoaXMgd2lsbCBub3QgZXJyb3IsIGRlc3BpdGUgYmVpbmcgbWFya2VkIGFzIG5vbl9leGhhdXN0aXZlLCBhcyB0aGlzCiAgICAgICAgLy8gZW51bSBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudCBjcmF0ZSwgaXQgY2FuIGJlIG1hdGNoZWQKICAgICAgICAvLyBleGhhdXN0aXZlbHkuCiAgICAgICAgbGV0IGRpc3BsYXkgPSBtYXRjaCBzZWxmIHsKICAgICAgICAgICAgTWVzc2FnZShzKSA9PiBzLAogICAgICAgICAgICBPdGhlciA9PiAib3RoZXIgb3IgdW5rbm93biBlcnJvciIsCiAgICAgICAgfTsKICAgICAgICBmb3JtYXR0ZXIud3JpdGVfc3RyKGRpc3BsYXkpCiAgICB9Cn0KYGBgCgpBbiBleGFtcGxlIG9mIG1hdGNoaW5nIG5vbi1leGhhdXN0aXZlbHkgb24gdGhlIGFib3ZlIGVudW0gaXMgcHJvdmlkZWQgYmVsb3c6CgpgYGBydXN0LGlnbm9yZSAocHNldWRvLVJ1c3QpCnVzZSBteWNyYXRlOjpFcnJvcjsKCi8vIFRoaXMgd2lsbCBub3QgZXJyb3IgYXMgdGhlIG5vbl9leGhhdXN0aXZlIEVycm9yIGVudW0gaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGEKLy8gd2lsZGNhcmQuCm1hdGNoIGVycm9yIHsKICAgIE1lc3NhZ2UocykgPT4gLi4uLAogICAgT3RoZXIgPT4gLi4uLAogICAgXyA9PiAuLi4sCn0KYGBgCgpTaW1pbGFybHksIGZvciBzdHJ1Y3RzLCBtYXRjaCB3aXRoIGAuLmAgdG8gYXZvaWQgdGhpcyBlcnJvci4KABf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BH4ULAAEAhQvfBQD/jAEmAAC4CwACBwC5CwEAAwDtAg4AALcLAgUBBFNvbWUBAQC0CQABuAsAAwDtAg4AArcLAAEDANgCJAAAtgsBAQC0CQAC3gUA2QISAAC0CQUBBUUwNjM4AAEfBQABAAUDANgCJAAAtgsBAQG5CQABtwsA4QUAro0BJgAAvQsAAALhBQCujQEmAAC0CQUB3wRUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QsIGVudW0gb3IgZW51bSB2YXJpYW50IGNhbm5vdCBiZQppbnN0YW50aWF0ZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBkZWZpbmluZyBjcmF0ZSBhcyBpdCBoYXMgYmVlbiBtYXJrZWQKYXMgYG5vbl9leGhhdXN0aXZlYCBhbmQgYXMgc3VjaCBtb3JlIGZpZWxkcy92YXJpYW50cyBtYXkgYmUgYWRkZWQgaW4KZnV0dXJlIHRoYXQgY291bGQgY2F1c2UgYWR2ZXJzZSBzaWRlIGVmZmVjdHMgZm9yIHRoaXMgY29kZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGl0IG9ubHkgd29ya3MgY3Jvc3MtY3JhdGUpCiNbbm9uX2V4aGF1c3RpdmVdCnB1YiBzdHJ1Y3QgTm9ybWFsU3RydWN0IHsKICAgIHB1YiBmaXJzdF9maWVsZDogdTE2LAogICAgcHViIHNlY29uZF9maWVsZDogdTE2LAp9CgpsZXQgbnMgPSBOb3JtYWxTdHJ1Y3QgeyBmaXJzdF9maWVsZDogNjQwLCBzZWNvbmRfZmllbGQ6IDQ4MCB9OyAvLyBlcnJvciEKYGBgCgpJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBsb29rIGZvciBhIGBuZXdgIGZ1bmN0aW9uIG9yIGVxdWl2YWxlbnQgaW4gdGhlCmNyYXRlJ3MgZG9jdW1lbnRhdGlvbi4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////B98EAAEA3wThBQCujQEmAAC8CwACBwC9CwEAAwDtAg4AALsLAgUBBFNvbWUBAQC0CQABvAsAAwDtAg4AArsLAAEDANgCJAAAugsBAQC0CQAC4AUA2QISAAC0CQUBBUUwNjM5AAEfBQABAAUDANgCJAAAugsBAQG5CQABuwsA4wUA3Y0BJgAAwQsAAALjBQDdjQEmAAC0CQUBywNBdHRlbXB0ZWQgdG8gY2FzdCB0by9mcm9tIGEgcG9pbnRlciB3aXRoIGFuIHVua25vd24ga2luZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDEKbGV0IGIgPSAwIGFzICpjb25zdCBfOyAvLyBlcnJvcgpgYGAKClR5cGUgaW5mb3JtYXRpb24gbXVzdCBiZSBwcm92aWRlZCBpZiBhIHBvaW50ZXIgdHlwZSBiZWluZyBjYXN0IGZyb20vaW50byBhbm90aGVyCnR5cGUgd2hpY2ggY2Fubm90IGJlIGluZmVycmVkOgoKYGBgCi8vIENyZWF0aW5nIGEgcG9pbnRlciBmcm9tIHJlZmVyZW5jZTogdHlwZSBjYW4gYmUgaW5mZXJyZWQKbGV0IGEgPSAmKFN0cmluZzo6ZnJvbSgiSGVsbG8gd29ybGQhIikpIGFzICpjb25zdCBfOyAvLyBvayEKCmxldCBiID0gMCBhcyAqY29uc3QgaTMyOyAvLyBvayEKCmxldCBjOiAqY29uc3QgaTMyID0gMCBhcyAqY29uc3QgXzsgLy8gb2shCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/D8sDAAEAywPjBQDdjQEmAADACwACBwDBCwEAAwDtAg4AAL8LAgUBBFNvbWUBAQC0CQABwAsAAwDtAg4AAr8LAAEDANgCJAAAvgsBAQC0CQAC4gUA2QISAAC0CQUBBUUwNjQxAAEfBQABAAUDANgCJAAAvgsBAQG5CQABvwsA5QUAjI4BJgAAxQsAAALlBQCMjgEmAAC0CQUB7gJUcmFpdCBtZXRob2RzIGN1cnJlbnRseSBj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Y2xvc3VyZSBjYWxsIGl0c2VsZiBieSBjYXB0dXJpbmcgYSBgJkZuKClgIG9iamVjdCBvciBgZm4oKWAgcG9pbnRlcgp0aGF0IHJlZmVycyB0byBpdHNlbGYuIFRoYXQgaXMgcGVybWl0dGluZywgc2luY2UgdGhlIGNsb3N1cmUgd291bGQgYmUKaW52b2tpbmcgaXRzZWxmIHZpYSBhIHZpcnR1YWwgY2FsbCwgYW5kIGhlbmNlIGRvZXMgbm90IGRpcmVjdGx5CnJlZmVyZW5jZSBpdHMgb3duICp0eXBlKi4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/6QYAAQDpBukFAOqOASYAAMwLAAIHAM0LAQADAO0CDgAAywsCBQEEU29tZQEBALQJAAHMCwADAO0CDgACywsAAQMA2AIkAADKCwEBALQJAALoBQDZAhIAALQJBQEFRTA2NDQAAR8FAAEABQMA2AIkAADKCwEBAbkJAAHLCwDrBQCZjwEmAADRCwAAAusFAJmPASYAALQJBQHoAUl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWZpbmUgYG1haW5gIHdpdGggYSB3aGVyZSBjbGF1c2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ2CmZuIG1haW4oKSB3aGVyZSBpMzI6IENvcHkgeyAvLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHdoZXJlIGNsYXVzZQp9CmBgYAoABP///////////wH///////////8B////////////Af//////H+gBAAEA6AHrBQCZjwEmAADQCwACBwDRCwEAAwDtAg4AAM8LAgUBBFNvbWUBAQC0CQAB0AsAAwDtAg4AAs8LAAEDANgCJAAAzgsBAQC0CQAC6gUA2QISAAC0CQUBBUUwNjQ2AAEfBQABAAUDANgCJAAAzgsBAQG5CQABzwsA7QUAyI8BJgAA1QsAAALtBQDIjwEmAAC0CQUBlQJUaGUgYHN0YXJ0YCBmdW5jdGlvbiB3YXMgZGVmaW5lZCB3aXRoIGEgd2hlcmUgY2xhdXNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0NwojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIHN0YXJ0KF86IGlzaXplLCBfOiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB3aGVyZSAoKTogQ29weSB7CiAgICAvL14gZXJyb3I6IHN0YXJ0IGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUgYSB3aGVyZSBjbGF1c2UKICAgIDAKfQpgYGAKAAX///////////8B////////////Af///////////wH///////////8B//9/lQIAAQCVAu0FAMiPASYAANQLAAIHANULAQADAO0CDgAA0wsCBQEEU29tZQEBALQJAAHUCwADAO0CDgAC0wsAAQMA2AIkAADSCwEBALQJAALsBQDZAhIAALQJBQEFRTA2NDcAAR8FAAEABQMA2AIkAADSCwEBAbkJAAHTCwDvBQD3jwEmAADZCwAAAu8FAPePASYAALQJBQG0AkFuIGBleHBvcnRfbmFtZWAgYXR0cmlidXRlIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVycyAoYFwwYCkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ4CiNbZXhwb3J0X25hbWU9IlwwZm9vIl0gLy8gZXJyb3I6IGBleHBvcnRfbmFtZWAgbWF5IG5vdCBjb250YWluIG51bGwgY2hhcmFjdGVycwpwdWIgZm4gYmFyKCkge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcmVtb3ZlIHRoZSBudWxsIGNoYXJhY3RlcnM6CgpgYGAKI1tleHBvcnRfbmFtZT0iZm9vIl0gLy8gb2shCnB1YiBmbiBiYXIoKSB7fQpgYGAKAAX///////////8B////////////Af///////////wH///////////8B/////////we0AgABALQC7wUA948BJgAA2AsAAgcA2QsBAAMA7QIOAADXCwIFAQRTb21lAQEAtAkAAdgLAAMA7QIOAALXCwABAwDYAiQAANYLAQEAtAkAAu4FANkCEgAAtAkFAQVFMDY0OAABHwUAAQAFAwDYAiQAANYLAQEBuQkAAdcLAPEFAKaQASYAAN0LAAAC8QUAppABJgAAtAkFAfgIQSBsaWZldGltZSBib3VuZCBvbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uIHdhcyBjYXB0dXJlZCBhdCBhbiBpbmNvcnJlY3QgcGxhY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjU3CnRyYWl0IElkPFQ+IHt9CnRyYWl0IEx0PCdhPiB7fQoKaW1wbDwnYT4gTHQ8J2E+IGZvciAoKSB7fQppbXBsPFQ+IElkPFQ+IGZvciBUIHt9CgpmbiBmcmVlX2ZuX2NhcHR1cmVfaHJ0Yl9pbl9pbXBsX3RyYWl0KCkKICAgIC0+IEJveDxmb3I8J2E+IElkPGltcGwgTHQ8J2E+Pj4gLy8gZXJyb3IhCnsKICAgIEJveDo6bmV3KCgpKQp9CgpzdHJ1Y3QgRm9vOwppbXBsIEZvbyB7CiAgICBmbiBpbXBsX2ZuX2NhcHR1cmVfaHJ0Yl9pbl9pbXBsX3RyYWl0KCkKICAgICAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdhPj4+IC8vIGVycm9yIQogICAgewogICAgICAgIEJveDo6bmV3KCgpKQogICAgfQp9CmBgYAoKSGVyZSwgeW91IGhhdmUgdXNlZCB0aGUgaW5hcHByb3ByaWF0ZSBsaWZldGltZSBpbiB0aGUgYGltcGwgVHJhaXRgLApUaGUgYGltcGwgVHJhaXRgIGNhbiBvbmx5IGNhcHR1cmUgbGlmZXRpbWVzIGJvdW5kIGF0IHRoZSBmbiBvciBpbXBsCmxldmVsLgoKVG8gZml4IHRoaXMgd2UgaGF2ZSB0byBkZWZpbmUgdGhlIGxpZmV0aW1lIGF0IHRoZSBmdW5jdGlvbiBvciBpbXBsCmxldmVsIGFuZCB1c2UgdGhhdCBsaWZldGltZSBpbiB0aGUgYGltcGwgVHJhaXRgLiBGb3IgZXhhbXBsZSB5b3UgY2FuCmRlZmluZSB0aGUgbGlmZXRpbWUgYXQgdGhlIGZ1bmN0aW9uOgoKYGBgCnRyYWl0IElkPFQ+IHt9CnRyYWl0IEx0PCdhPiB7fQoKaW1wbDwnYT4gTHQ8J2E+IGZvciAoKSB7fQppbXBsPFQ+IElkPFQ+IGZvciBUIHt9CgpmbiBmcmVlX2ZuX2NhcHR1cmVfaHJ0Yl9pbl9pbXBsX3RyYWl0PCdiPigpCiAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdiPj4+IC8vIG9rIQp7CiAgICBCb3g6Om5ldygoKSkKfQoKc3RydWN0IEZvbzsKaW1wbCBGb28gewogICAgZm4gaW1wbF9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdDwnYj4oKQogICAgICAgIC0+IEJveDxmb3I8J2E+IElkPGltcGwgTHQ8J2I+Pj4gLy8gb2shCiAgICB7CiAgICAgICAgQm94OjpuZXcoKCkpCiAgICB9Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gIAAEA+AjxBQCmkAEmAADcCwACBwDdCwEAAwDtAg4AANsLAgUBBFNvbWUBAQC0CQAB3AsAAwDtAg4AAtsLAAEDANgCJAAA2gsBAQC0CQAC8AUA2QISAAC0CQUBBUUwNjU3AAEfBQABAAUDANgCJAAA2gsBAQG5CQAB2wsA8wUA1ZABJgAA4QsAAALzBQDVkAEmAAC0CQUB4wRBbiB1bnN0YWJsZSBmZWF0dXJlIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY1OAojW3JlcHIodTEyOCldIC8vIGVycm9yOiB1c2Ugb2YgdW5zdGFibGUgbGlicmFyeSBmZWF0dXJlICdyZXByMTI4JwplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKCklmIHlvdSdyZSB1c2luZyBhIHN0YWJsZSBvciBhIGJldGEgdmVyc2lvbiBvZiBydXN0YywgeW91IHdvbid0IGJlIGFibGUgdG8gdXNlCmFueSB1bnN0YWJsZSBmZWF0dXJlcy4gSW4gb3JkZXIgdG8gZG8gc28sIHBsZWFzZSBzd2l0Y2ggdG8gYSBuaWdodGx5IHZlcnNpb24gb2YKcnVzdGMgKGJ5IHVzaW5nIFtydXN0dXBdKS4KCklmIHlvdSdyZSB1c2luZyBhIG5pZ2h0bHkgdmVyc2lvbiBvZiBydXN0YywganVzdCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgZmVhdHVyZQp0byBiZSBhYmxlIHRvIHVzZSBpdDoKCmBgYAojIVtmZWF0dXJlKHJlcHIxMjgpXQoKI1tyZXByKHUxMjgpXSAvLyBvayEKZW51bSBGb28gewogICAgQmFyKHU2NCksCn0KYGBgCgpbcnVzdHVwXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3J1c3R1cC9jb25jZXB0cy9jaGFubmVscy5odG1sCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////3/jBAABAOME8wUA1ZABJgAA4AsAAgcA4QsBAAMA7QIOAADfCwIFAQRTb21lAQEAtAkAAeALAAMA7QIOAALfCwABAwDYAiQAAN4LAQEAtAkAAvIFANkCEgAAtAkFAQVFMDY1OAABHwUAAQAFAwDYAiQAAN4LAQEBuQkAAd8LAPUFAISRASYAAOULAAAC9QUAhJEBJgAAtAkFAagHQW4gaXRlbSB1c2FnZSBpcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNjU5CnB1YiBtb2QgbW9vbiB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKbW9kIGNvbGxpZGVyIHsKICAgIHB1YiB1c2UgY3JhdGU6Om1vb246Oio7CiAgICBwdWIgdXNlIGNyYXRlOjplYXJ0aDo6KjsKfQoKZm4gbWFpbigpIHsKICAgIGNyYXRlOjpjb2xsaWRlcjo6Zm9vKCk7IC8vIEVSUk9SOiBgZm9vYCBpcyBhbWJpZ3VvdXMKfQpgYGAKClRoaXMgZXJyb3IgZ2VuZXJhbGx5IGFwcGVhcnMgd2hlbiB0d28gaXRlbXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBpbXBvcnRlZCBpbnRvCmEgbW9kdWxlLiBIZXJlLCB0aGUgYGZvb2AgZnVuY3Rpb25zIGFyZSBpbXBvcnRlZCBhbmQgcmVleHBvcnRlZCBmcm9tIHRoZQpgY29sbGlkZXJgIG1vZHVsZSBhbmQgdGhlcmVmb3JlLCB3aGVuIHdlJ3JlIHVzaW5nIGBjb2xsaWRlcjo6Zm9vKClgLCBib3RoCmZ1bmN0aW9ucyBjb2xsaWRlLgoKVG8gc29sdmUgdGhpcyBlcnJvciwgdGhlIGJlc3Qgc29sdXRpb24gaXMgZ2VuZXJhbGx5IHRvIGtlZXAgdGhlIHBhdGggYmVmb3JlIHRoZQppdGVtIHdoZW4gdXNpbmcgaXQuIEV4YW1wbGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIG1vb24gewogICAgcHViIGZuIGZvbygpIHt9Cn0KCnB1YiBtb2QgZWFydGggewogICAgcHViIGZuIGZvbygpIHt9Cn0KCm1vZCBjb2xsaWRlciB7CiAgICBwdWIgdXNlIGNyYXRlOjptb29uOwogICAgcHViIHVzZSBjcmF0ZTo6ZWFydGg7Cn0KCmZuIG1haW4oKSB7CiAgICBjcmF0ZTo6Y29sbGlkZXI6Om1vb246OmZvbygpOyAvLyBvayEKICAgIGNyYXRlOjpjb2xsaWRlcjo6ZWFydGg6OmZvbygpOyAvLyBvayEKfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H6gHAAEAqAf1BQCEkQEmAADkCwACBwDlCwEAAwDtAg4AAOMLAgUBBFNvbWUBAQC0CQAB5AsAAwDtAg4AAuMLAAEDANgCJAAA4gsBAQC0CQAC9AUA2QISAAC0CQUBBUUwNjU5AAEfBQABAAUDANgCJAAA4gsBAQG5CQAB4wsA9wUAs5EBJgAA6QsAAAL3BQCzkQEmAAC0CQUB7QJUaGUgYXJndW1lbnQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8gaXMgbm90IHdlbGwtZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MApsbHZtX2FzbSEoIm5vcCIgIm5vcCIpOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbYGxsdm1fYXNtYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3Vuc3RhYmxlLWJvb2svbGlicmFyeS1mZWF0dXJlcy9sbHZtLWFzbS5odG1sCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8H7QIAAQDtAvcFALORASYAAOgLAAIHAOkLAQADAO0CDgAA5wsCBQEEU29tZQEBALQJAAHoCwADAO0CDgAC5wsAAQMA2AIkAADmCwEBALQJAAL2BQDZAhIAALQJBQEFRTA2NjAAAR8FAAEABQMA2AIkAADmCwEBAbkJAAHnCwD5BQDikQEmAADtCwAAAvkFAOKRASYAALQJBQGPA0FuIGludmFsaWQgc3ludGF4IHdhcyBwYXNzZWQgdG8gdGhlIHNlY29uZCBhcmd1bWVudCBvZiBhbiBgbGx2bV9hc21gIG1hY3JvIGxpbmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjYxCmxldCBhOwpsbHZtX2FzbSEoIm5vcCIgOiAiciIoYSkpOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbYGxsdm1fYXNtYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3Vuc3RhYmxlLWJvb2svbGlicmFyeS1mZWF0dXJlcy9sbHZtLWFzbS5odG1sCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8BjwMAAQCPA/kFAOKRASYAAOwLAAIHAO0LAQADAO0CDgAA6wsCBQEEU29tZQEBALQJAAHsCwADAO0CDgAC6wsAAQMA2AIkAADqCwEBALQJAAL4BQDZAhIAALQJBQEFRTA2NjEAAR8FAAEABQMA2AIkAADqCwEBAbkJAAHrCwD7BQCRkgEmAADxCwAAAvsFAJGSASYAALQJBQG9A0FuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MgpsbHZtX2FzbSEoInhvciAlZWF4LCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOiAiPXRlc3QiKCJhIikKICAgICAgICAgKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2BsbHZtX2FzbWBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70DAAEAvQP7BQCRkgEmAADwCwACBwDxCwEAAwDtAg4AAO8LAgUBBFNvbWUBAQC0CQAB8AsAAwDtAg4AAu8LAAEDANgCJAAA7gsBAQC0CQAC+gUA2QISAAC0CQUBBUUwNjYyAAEfBQABAAUDANgCJAAA7gsBAQG5CQAB7wsA/QUAwJIBJgAA9QsAAAL9BQDAkgEmAAC0CQUBvQNBbiBpbnZhbGlkIGlucHV0IG9wZXJhbmQgY29uc3RyYWludCB3YXMgcGFzc2VkIHRvIHRoZSBgbGx2bV9hc21gIG1hY3JvCih0aGlyZCBsaW5lKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjMKbGx2bV9hc20hKCJ4b3IgJWVheCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDogIit0ZXN0IigiYSIpCiAgICAgICAgICk7CmBgYAoKQ29uc2lkZXJpbmcgdGhhdCB0aGlzIHdvdWxkIGJlIGEgbG9uZyBleHBsYW5hdGlvbiwgd2UgaW5zdGVhZCByZWNvbW1lbmQgeW91CnRha2UgYSBsb29rIGF0IHRoZSBbYGxsdm1fYXNtYF0gY2hhcHRlciBvZiB0aGUgVW5zdGFibGUgYm9vazoKCltgbGx2bV9hc21gXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvdW5zdGFibGUtYm9vay9saWJyYXJ5LWZlYXR1cmVzL2xsdm0tYXNtLmh0bWwKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x+9AwABAL0D/QUAwJIBJgAA9AsAAgcA9QsBAAMA7QIOAADzCwIFAQRTb21lAQEAtAkAAfQLAAMA7QIOAALzCwABAwDYAiQAAPILAQEAtAkAAvwFANkCEgAAtAkFAQVFMDY2MwABHwUAAQAFAwDYAiQAAPILAQEBuQkAAfMLAP8FAO+SASYAAPkLAAAC/wUA75IBJgAAtAkFAa4DQSBjbG9iYmVyIHdhcyBzdXJyb3VuZGVkIGJ5IGJyYWNlcyBpbiB0aGUgYGxsdm1fYXNtYCBtYWNyby4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjQKbGx2bV9hc20hKCJtb3YgJCQweDIwMCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDoKICAgICAgICAgIDogIntlYXh9IgogICAgICAgICApOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbYGxsdm1fYXNtYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3Vuc3RhYmxlLWJvb2svbGlicmFyeS1mZWF0dXJlcy9sbHZtLWFzbS5odG1sCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////D64DAAEArgP/BQDvkgEmAAD4CwACBwD5CwEAAwDtAg4AAPcLAgUBBFNvbWUBAQC0CQAB+AsAAwDtAg4AAvcLAAEDANgCJAAA9gsBAQC0CQAC/gUA2QISAAC0CQUBBUUwNjY0AAEfBQABAAUDANgCJAAA9gsBAQG5CQAB9wsAgQYAnpMBJgAA/QsAAAKBBgCekwEmAAC0CQUBhQUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgYERlZmF1bHRgIHRyYWl0IHdhcyBkZXJpdmVkIG9uIGFuIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiNbZGVyaXZlKERlZmF1bHQpXQplbnVtIEZvb2QgewogICAgU3dlZXQsCiAgICBTYWx0eSwKfQpgYGAKClRoZSBgRGVmYXVsdGAgY2Fubm90IGJlIGRlcml2ZWQgb24gYW4gZW51bSBmb3IgdGhlIHNpbXBsZSByZWFzb24gdGhhdCB0aGUKY29tcGlsZXIgZG9lc24ndCBrbm93IHdoaWNoIHZhbHVlIHRvIHBpY2sgYnkgZGVmYXVsdCB3aGVyZWFzIGl0IGNhbiBmb3IgYQpzdHJ1Y3QgYXMgbG9uZyBhcyBhbGwgaXRzIGZpZWxkcyBpbXBsZW1lbnQgdGhlIGBEZWZhdWx0YCB0cmFpdCBhcyB3ZWxsLgoKSWYgeW91IHN0aWxsIHdhbnQgdG8gaW1wbGVtZW50IGBEZWZhdWx0YCBvbiB5b3VyIGVudW0sIHlvdSdsbCBoYXZlIHRvIGRvIGl0ICJieQpoYW5kIjoKCmBgYAplbnVtIEZvb2QgewogICAgU3dlZXQsCiAgICBTYWx0eSwKfQoKaW1wbCBEZWZhdWx0IGZvciBGb29kIHsKICAgIGZuIGRlZmF1bHQoKSAtPiBGb29kIHsKICAgICAgICBGb29kOjpTd2VldAogICAgfQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEfhQUAAQCFBYEGAJ6TASYAAPwLAAIHAP0LAQADAO0CDgAA+wsCBQEEU29tZQEBALQJAAH8CwADAO0CDgAC+wsAAQMA2AIkAAD6CwEBALQJAAKABgDZAhIAALQJBQEFRTA2NjUAAR8FAAEABQMA2AIkAAD6CwEBAbkJAAH7CwCDBgDNkwEmAACBDAAAAoMGAM2TASYAALQJBQHtA2BpbXBsIFRyYWl0YCB0eXBlcyBjYW5ub3QgYXBwZWFyIG5lc3RlZCBpbiB0aGUgZ2VuZXJpYyBhcmd1bWVudHMgb2Ygb3RoZXIKYGltcGwgVHJhaXRgIHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2Ngp0cmFpdCBNeUdlbmVyaWNUcmFpdDxUPiB7fQp0cmFpdCBNeUlubmVyVHJhaXQge30KCmZuIGZvbygKICAgIGJhcjogaW1wbCBNeUdlbmVyaWNUcmFpdDxpbXBsIE15SW5uZXJUcmFpdD4sIC8vIGVycm9yIQopIHt9CmBgYAoKVHlwZSBwYXJhbWV0ZXJzIGZvciBgaW1wbCBUcmFpdGAgdHlwZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlZmluZWQgYXMgbmFtZWQKZ2VuZXJpYyBwYXJhbWV0ZXJzOgoKYGBgCnRyYWl0IE15R2VuZXJpY1RyYWl0PFQ+IHt9CnRyYWl0IE15SW5uZXJUcmFpdCB7fQoKZm4gZm9vPFQ6IE15SW5uZXJUcmFpdD4oCiAgICBiYXI6IGltcGwgTXlHZW5lcmljVHJhaXQ8VD4sIC8vIG9rIQopIHt9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8H7QMAAQDtA4MGAM2TASYAAIAMAAIHAIEMAQADAO0CDgAA/wsCBQEEU29tZQEBALQJAAGADAADAO0CDgAC/wsAAQMA2AIkAAD+CwEBALQJAAKCBgDZAhIAALQJBQEFRTA2NjYAAR8FAAEABQMA2AIkAAD+CwEBAbkJAAH/CwCFBgD8kwEmAACFDAAAAoUGAPyTASYAALQJBQGxBE1hbGZvcm1lZCBpbmxpbmUgYXNzZW1ibHkgcmVqZWN0ZWQgYnkgTExWTS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjgKIyFbZmVhdHVyZShsbHZtX2FzbSldCgpmbiBtYWluKCkgewogICAgbGV0IHJheDogdTY0OwogICAgdW5zYWZlIHsKICAgICAgICBsbHZtX2FzbSEoIiIgOiI9e3JheCIocmF4KSk7CiAgICAgICAgcHJpbnRsbiEoIkFjY3VtdWxhdG9yIGlzOiB7fSIsIHJheCk7CiAgICB9Cn0KYGBgCgpMTFZNIGNoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbnN0cmFpbnRzIGFuZCB0aGUgYXNzZW1ibHkgc3RyaW5nIHBhc3NlZCB0bwppdC4gVGhpcyBlcnJvciBpbXBsaWVzIHRoYXQgTExWTSBzZWVtcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgaW5saW5lCmFzc2VtYmx5IGNhbGwuCgpJbiBwYXJ0aWN1bGFyLCBpdCBjYW4gaGFwcGVuIGlmIHlvdSBmb3Jnb3QgdGhlIGNsb3NpbmcgYnJhY2tldCBvZiBhIHJlZ2lzdGVyCmNvbnN0cmFpbnQgKHNlZSBpc3N1ZSAjNTE0MzApLCBsaWtlIGluIHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////9/sQQAAQCxBIUGAPyTASYAAIQMAAIHAIUMAQADAO0CDgAAgwwCBQEEU29tZQEBALQJAAGEDAADAO0CDgACgwwAAQMA2AIkAACCDAEBALQJAAKEBgDZAhIAALQJBQEFRTA2NjgAAR8FAAEABQMA2AIkAACCDAEBAbkJAAGDDACHBgCrlAEmAACJDAAAAocGAKuUASYAALQJBQGOBUNhbm5vdCBjb252ZXJ0IGlubGluZSBhc3NlbWJseSBvcGVyYW5kIHRvIGEgc2luZ2xlIExMVk0gdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY5CiMhW2ZlYXR1cmUobGx2bV9hc20pXQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7CiAgICAgICAgbGx2bV9hc20hKCIiIDo6ICJyIigiIikpOyAvLyBlcnJvciEKICAgIH0KfQpgYGAKClRoaXMgZXJyb3IgdXN1YWxseSBoYXBwZW5zIHdoZW4gdHJ5aW5nIHRvIHBhc3MgaW4gYSB2YWx1ZSB0byBhbiBpbnB1dCBpbmxpbmUKYXNzZW1ibHkgb3BlcmFuZCB0aGF0IGlzIGFjdHVhbGx5IGEgcGFpciBvZiB2YWx1ZXMuIEluIHBhcnRpY3VsYXIsIHRoaXMgY2FuCmhhcHBlbiB3aGVuIHRyeWluZyB0byBwYXNzIGluIGEgc2xpY2UsIGZvciBpbnN0YW5jZSBhIGAmc3RyYC4gSW4gUnVzdCwgdGhlc2UKdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbnRlcm5hbGx5IGFzIGEgcGFpciBvZiB2YWx1ZXMsIHRoZSBwb2ludGVyIGFuZCBpdHMKbGVuZ3RoLiBXaGVuIHBhc3NlZCBhcyBhbiBpbnB1dCBvcGVyYW5kLCB0aGlzIHBhaXIgb2YgdmFsdWVzIGNhbiBub3QgYmUKY29lcmNlZCBpbnRvIGEgcmVnaXN0ZXIgYW5kIHRodXMgd2UgbXVzdCBmYWlsIHdpdGggYW4gZXJyb3IuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/jgUAAQCOBYcGAKuUASYAAIgMAAIHAIkMAQADAO0CDgAAhwwCBQEEU29tZQEBALQJAAGIDAADAO0CDgAChwwAAQMA2AIkAACGDAEBALQJAAKGBgDZAhIAALQJBQEFRTA2NjkAAR8FAAEABQMA2AIkAACGDAEBAbkJAAGHDACJBgDalAEmAACNDAAAAokGANqUASYAALQJBQGrAVJ1c3QgMjAxNSBkb2VzIG5vdCBwZXJtaXQgdGhlIHVzZSBvZiBgYXN5bmMgZm5gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY3MAphc3luYyBmbiBmb28oKSB7fQpgYGAKClN3aXRjaCB0byB0aGUgUnVzdCAyMDE4IGVkaXRpb24gdG8gdXNlIGBhc3luYyBmbmAuCgAD////////////Af///////////wH///////8BqwEAAQCrAYkGANqUASYAAIwMAAIHAI0MAQADAO0CDgAAiwwCBQEEU29tZQEBALQJAAGMDAADAO0CDgACiwwAAQMA2AIkAACKDAEBALQJAAKIBgDZAhIAALQJBQEFRTA2NzAAAR8FAAEABQMA2AIkAACKDAEBAbkJAAGLDACLBgCJlQEmAACRDAAAAosGAImVASYAALQJBQHpASMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNvbnN0IHBhcmFtZXRlcnMgY2Fubm90IGRlcGVuZCBvbiB0eXBlIHBhcmFtZXRlcnMuClRoZSBmb2xsb3dpbmcgaXMgdGhlcmVmb3JlIGludmFsaWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzAKZm4gY29uc3RfaWQ8VCwgY29uc3QgTjogVD4oKSAtPiBUIHsgLy8gZXJyb3IKICAgIE4KfQpgYGAKAAT///////////8B////////////Af///////////wH//////z/pAQABAOkBiwYAiZUBJgAAkAwAAgcAkQwBAAMA7QIOAACPDAIFAQRTb21lAQEAtAkAAZAMAAMA7QIOAAKPDAABAwDYAiQAAI4MAQEAtAkAAooGANkCEgAAtAkFAQVFMDY3MQABHwUAAQAFAwDYAiQAAI4MAQEBuQkAAY8MAI0GALiVASYAAJUMAAACjQYAuJUBJgAAtAkFAbUFSW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIHVzZWQgaW4gYGZuYC9gRm5gIHN5bnRheC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg3CiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vKHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBlcnJvciEKCmZuIGJhcih4OiAmRm4oJidhIHUzMikpIHt9IC8vIGVycm9yIQoKZm4gYmF6KHg6IGZuKCYnYSB1MzIpLCB5OiAmJ2EgdTMyKSB7fSAvLyBlcnJvciEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsIEZvbzwnYT4gewogICAgZm4gYmFyKCZzZWxmLCB4OiBmbigmJ2EgdTMyKSkge30gLy8gZXJyb3IhCn0KYGBgCgpMaWZldGltZXMgdXNlZCBpbiBgZm5gIG9yIGBGbmAgc3ludGF4IG11c3QgYmUgZXhwbGljaXRseQpkZWNsYXJlZCB1c2luZyBgPC4uLj5gIGJpbmRlcnMuIEZvciBleGFtcGxlOgoKYGBgCmZuIGZvbzwnYT4oeDogZm4oJidhIHUzMikpIHt9IC8vIG9rIQoKZm4gYmFyPCdhPih4OiAmRm4oJidhIHUzMikpIHt9IC8vIG9rIQoKZm4gYmF6PCdhPih4OiBmbigmJ2EgdTMyKSwgeTogJidhIHUzMikge30gLy8gb2shCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBiYXIoJnNlbGYsIHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBvayEKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w+1BQABALUFjQYAuJUBJgAAlAwAAgcAlQwBAAMA7QIOAACTDAIFAQRTb21lAQEAtAkAAZQMAAMA7QIOAAKTDAABAwDYAiQAAJIMAQEAtAkAAowGANkCEgAAtAkFAQVFMDY4NwABHwUAAQAFAwDYAiQAAJIMAQEBuQkAAZMMAI8GAOeVASYAAJkMAAACjwYA55UBJgAAtAkFAZkFSW4tYmFuZCBsaWZldGltZXMgd2VyZSBtaXhlZCB3aXRoIGV4cGxpY2l0IGxpZmV0aW1lIGJpbmRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg4CiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vPCdhPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyKSB7fSAgIC8vIGVycm9yIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGwgRm9vPCdhPiB7CiAgICBmbiBiYXI8J2I+KHg6ICYnYSB1MzIsIHk6ICYnYiB1MzIsIHo6ICYnYyB1MzIpIHt9ICAgLy8gZXJyb3IhCn0KCmltcGw8J2I+IEZvbzwnYT4geyAgLy8gZXJyb3IhCiAgICBmbiBiYXooKSB7fQp9CmBgYAoKSW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIG1peGVkIHdpdGggZXhwbGljaXQgbGlmZXRpbWUgYmluZGVycy4KRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vPCdhLCAnYj4oeDogJidhIHUzMiwgeTogJidiIHUzMikge30gICAvLyBvayEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGJhcjwnYiwnYz4oeDogJidhIHUzMiwgeTogJidiIHUzMiwgejogJidjIHUzMikge30gICAgLy8gb2shCn0KCmltcGw8J2E+IEZvbzwnYT4geyAgLy8gb2shCiAgICBmbiBiYXooKSB7fQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8PmQUAAQCZBY8GAOeVASYAAJgMAAIHAJkMAQADAO0CDgAAlwwCBQEEU29tZQEBALQJAAGYDAADAO0CDgAClwwAAQMA2AIkAACWDAEBALQJAAKOBgDZAhIAALQJBQEFRTA2ODgAAR8FAAEABQMA2AIkAACWDAEBAbkJAAGXDACRBgCWlgEmAACdDAAAApEGAJaWASYAALQJBQGNBUEgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gYW1iaWd1b3VzIG51bWVyaWMgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2ODkKMi4wLm5lZygpOyAvLyBlcnJvciEKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljIHZhbHVlIGZvciB0aGUgbWV0aG9kIGJlaW5nIHBhc3NlZCBleGlzdHMKYnV0IHRoZSB0eXBlIG9mIHRoZSBudW1lcmljIHZhbHVlIG9yIGJpbmRpbmcgY291bGQgbm90IGJlIGlkZW50aWZpZWQuCgpUaGUgZXJyb3IgaGFwcGVucyBvbiBudW1lcmljIGxpdGVyYWxzIGFuZCBvbiBudW1lcmljIGJpbmRpbmdzIHdpdGhvdXQgYW4KaWRlbnRpZmllZCBjb25jcmV0ZSB0eXBlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg5CmxldCB4ID0gMi4wOwp4Lm5lZygpOyAgLy8gc2FtZSBlcnJvciBhcyBhYm92ZQpgYGAKCkJlY2F1c2Ugb2YgdGhpcywgeW91IG11c3QgZ2l2ZSB0aGUgbnVtZXJpYyBsaXRlcmFsIG9yIGJpbmRpbmcgYSB0eXBlOgoKYGBgCnVzZSBzdGQ6Om9wczo6TmVnOwoKbGV0IF8gPSAyLjBfZjMyLm5lZygpOyAvLyBvayEKbGV0IHg6IGYzMiA9IDIuMDsKbGV0IF8gPSB4Lm5lZygpOyAvLyBvayEKbGV0IF8gPSAoMi4wIGFzIGYzMikubmVnKCk7IC8vIG9rIQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NBQABAI0FkQYAlpYBJgAAnAwAAgcAnQwBAAMA7QIOAACbDAIFAQRTb21lAQEAtAkAAZwMAAMA7QIOAAKbDAABAwDYAiQAAJoMAQEAtAkAApAGANkCEgAAtAkFAQVFMDY4OQABHwUAAQAFAwDYAiQAAJoMAQEBuQkAAZsMAJMGAMWWASYAAKEMAAACkwYAxZYBJgAAtAkFAbQIQSBzdHJ1Y3Qgd2l0aCB0aGUgcmVwcmVzZW50YXRpb24gaGludCBgcmVwcih0cmFuc3BhcmVudClgIGhhZCB0d28gb3IgbW9yZSBmaWVsZHMKdGhhdCB3ZXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIHplcm8tc2l6ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkwCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBMZW5ndGhXaXRoVW5pdDxVPiB7IC8vIGVycm9yOiB0cmFuc3BhcmVudCBzdHJ1Y3QgbmVlZHMgYXQgbW9zdCBvbmUKICAgIHZhbHVlOiBmMzIsICAgICAgICAgICAgLy8gICAgICAgIG5vbi16ZXJvLXNpemVkIGZpZWxkLCBidXQgaGFzIDIKICAgIHVuaXQ6IFUsCn0KYGBgCgpCZWNhdXNlIHRyYW5zcGFyZW50IHN0cnVjdHMgYXJlIHJlcHJlc2VudGVkIGV4YWN0bHkgbGlrZSBvbmUgb2YgdGhlaXIgZmllbGRzIGF0CnJ1biB0aW1lLCBzYWlkIGZpZWxkIG11c3QgYmUgdW5pcXVlbHkgZGV0ZXJtaW5lZC4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpZWxkcywKaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgc3RydWN0IHNob3VsZCBiZSByZXByZXNlbnRlZC4KTm90ZSB0aGF0IGZpZWxkcyBvZiB6ZXJvLXNpemVkIHR5cGVzIChlLmcuLCBgUGhhbnRvbURhdGFgKSBjYW4gYWxzbyBleGlzdAphbG9uZ3NpZGUgdGhlIGZpZWxkIHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBkYXRhLCB0aGV5IGRvIG5vdCBjb3VudCBmb3IgdGhpcwplcnJvci4gV2hlbiBnZW5lcmljIHR5cGVzIGFyZSBpbnZvbHZlZCAoYXMgaW4gdGhlIGFib3ZlIGV4YW1wbGUpLCBhbiBlcnJvciBpcwpyZXBvcnRlZCBiZWNhdXNlIHRoZSB0eXBlIHBhcmFtZXRlciBjb3VsZCBiZSBub24temVyby1zaXplZC4KClRvIGNvbWJpbmUgYHJlcHIodHJhbnNwYXJlbnQpYCB3aXRoIHR5cGUgcGFyYW1ldGVycywgYFBoYW50b21EYXRhYCBtYXkgYmUKdXNlZnVsOgoKYGBgCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgTGVuZ3RoV2l0aFVuaXQ8VT4gewogICAgdmFsdWU6IGYzMiwKICAgIHVuaXQ6IFBoYW50b21EYXRhPFU+LAp9CmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////B7QIAAEAtAiTBgDFlgEmAACgDAACBwChDAEAAwDtAg4AAJ8MAgUBBFNvbWUBAQC0CQABoAwAAwDtAg4AAp8MAAEDANgCJAAAngwBAQC0CQACkgYA2QISAAC0CQUBBUUwNjkwAAEfBQABAAUDANgCJAAAngwBAQG5CQABnwwAlQYA9JYBJgAApQwAAAKVBgD0lgEmAAC0CQUBjQtBIHN0cnVjdCwgZW51bSwgb3IgdW5pb24gd2l0aCB0aGUgYHJlcHIodHJhbnNwYXJlbnQpYCByZXByZXNlbnRhdGlvbiBoaW50CmNvbnRhaW5zIGEgemVyby1zaXplZCBmaWVsZCB0aGF0IHJlcXVpcmVzIG5vbi10cml2aWFsIGFsaWdubWVudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTEKIyFbZmVhdHVyZShyZXByX2FsaWduKV0KCiNbcmVwcihhbGlnbigzMikpXQpzdHJ1Y3QgRm9yY2VBbGlnbjMyOwoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IFdyYXBwZXIoZjMyLCBGb3JjZUFsaWduMzIpOyAvLyBlcnJvcjogemVyby1zaXplZCBmaWVsZCBpbiB0cmFuc3BhcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBzdHJ1Y3QgaGFzIGFsaWdubWVudCBsYXJnZXIgdGhhbiAxCmBgYAoKQSB0cmFuc3BhcmVudCBzdHJ1Y3QsIGVudW0sIG9yIHVuaW9uIGlzIHN1cHBvc2VkIHRvIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgbGlrZQp0aGUgcGllY2Ugb2YgZGF0YSBpdCBjb250YWlucy4gWmVyby1zaXplZCBmaWVsZHMgd2l0aCBkaWZmZXJlbnQgYWxpZ25tZW50CnJlcXVpcmVtZW50cyBwb3RlbnRpYWxseSBjb25mbGljdCB3aXRoIHRoaXMgcHJvcGVydHkuIEluIHRoZSBleGFtcGxlIGFib3ZlLApgV3JhcHBlcmAgd291bGQgaGF2ZSB0byBiZSBhbGlnbmVkIHRvIDMyIGJ5dGVzIGV2ZW4gdGhvdWdoIGBmMzJgIGhhcyBhIHNtYWxsZXIKYWxpZ25tZW50IHJlcXVpcmVtZW50LgoKQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIG92ZXItYWxpZ25lZCB6ZXJvLXNpemVkIGZpZWxkOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBXcmFwcGVyKGYzMik7CmBgYAoKQWx0ZXJuYXRpdmVseSwgYFBoYW50b21EYXRhPFQ+YCBoYXMgYWxpZ25tZW50IDEgZm9yIGFsbCBgVGAsIHNvIHlvdSBjYW4gdXNlIGl0CmlmIHlvdSBuZWVkIHRvIGtlZXAgdGhlIGZpZWxkIGZvciBzb21lIHJlYXNvbjoKCmBgYAojIVtmZWF0dXJlKHJlcHJfYWxpZ24pXQoKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCiNbcmVwcihhbGlnbigzMikpXQpzdHJ1Y3QgRm9yY2VBbGlnbjMyOwoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IFdyYXBwZXIoZjMyLCBQaGFudG9tRGF0YTxGb3JjZUFsaWduMzI+KTsKYGBgCgpOb3RlIHRoYXQgZW1wdHkgYXJyYXlzIGBbVDsgMF1gIGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFzIHRoZQplbGVtZW50IHR5cGUgYFRgLiBBbHNvIG5vdGUgdGhhdCB0aGUgZXJyb3IgaXMgY29uc2VydmF0aXZlbHkgcmVwb3J0ZWQgZXZlbiB3aGVuCnRoZSBhbGlnbm1lbnQgb2YgdGhlIHplcm8tc2l6ZWQgdHlwZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGRhdGEgZmllbGQncwphbGlnbm1lbnQuCgAX////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/jQsAAQCNC5UGAPSWASYAAKQMAAIHAKUMAQADAO0CDgAAowwCBQEEU29tZQEBALQJAAGkDAADAO0CDgACowwAAQMA2AIkAACiDAEBALQJAAKUBgDZAhIAALQJBQEFRTA2OTEAAR8FAAEABQMA2AIkAACiDAEBAbkJAAGjDACXBgCjlwEmAACpDAAAApcGAKOXASYAALQJBQG3CUEgYHJlcHIodHJhbnNwYXJlbnQpYCB0eXBlIHdhcyBhbHNvIGFubm90YXRlZCB3aXRoIG90aGVyLCBpbmNvbXBhdGlibGUKcmVwcmVzZW50YXRpb24gaGludHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkyCiNbcmVwcih0cmFuc3BhcmVudCwgQyldIC8vIGVycm9yOiBpbmNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gaGludHMKc3RydWN0IEdyYW1zKGYzMik7CmBgYAoKQSB0eXBlIGFubm90YXRlZCBhcyBgcmVwcih0cmFuc3BhcmVudClgIGRlbGVnYXRlcyBhbGwgcmVwcmVzZW50YXRpb24gY29uY2VybnMgdG8KYW5vdGhlciB0eXBlLCBzbyBhZGRpbmcgbW9yZSByZXByZXNlbnRhdGlvbiBoaW50cyBpcyBjb250cmFkaWN0b3J5LiBSZW1vdmUKZWl0aGVyIHRoZSBgdHJhbnNwYXJlbnRgIGhpbnQgb3IgdGhlIG90aGVyIGhpbnRzLCBsaWtlIHRoaXM6CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zKGYzMik7CmBgYAoKQWx0ZXJuYXRpdmVseSwgbW92ZSB0aGUgb3RoZXIgYXR0cmlidXRlcyB0byB0aGUgY29udGFpbmVkIHR5cGU6CgpgYGAKI1tyZXByKEMpXQpzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKICAgIC8vIC4uLgp9CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgRm9vV3JhcHBlcihGb28pOwpgYGAKCk5vdGUgdGhhdCBpbnRyb2R1Y2luZyBhbm90aGVyIGBzdHJ1Y3RgIGp1c3QgdG8gaGF2ZSBhIHBsYWNlIGZvciB0aGUgb3RoZXIKYXR0cmlidXRlcyBtYXkgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvbiB0aGUgcmVwcmVzZW50YXRpb246CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zKGYzMik7CgojW3JlcHIoQyldCnN0cnVjdCBGbG9hdChmMzIpOwoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zMihGbG9hdCk7IC8vIHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gYEdyYW1zYCBhYm92ZQpgYGAKCkhlcmUsIGBHcmFtczJgIGlzIGEgbm90IGVxdWl2YWxlbnQgdG8gYEdyYW1zYCAtLSB0aGUgZm9ybWVyIHRyYW5zcGFyZW50bHkgd3JhcHMKYSAobm9uLXRyYW5zcGFyZW50KSBzdHJ1Y3QgY29udGFpbmluZyBhIHNpbmdsZSBmbG9hdCwgd2hpbGUgYEdyYW1zYCBpcyBhCnRyYW5zcGFyZW50IHdyYXBwZXIgYXJvdW5kIGEgZmxvYXQuIFRoaXMgY2FuIG1ha2UgYSBkaWZmZXJlbmNlIGZvciB0aGUgQUJJLgoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twkAAQC3CZcGAKOXASYAAKgMAAIHAKkMAQADAO0CDgAApwwCBQEEU29tZQEBALQJAAGoDAADAO0CDgACpwwAAQMA2AIkAACmDAEBALQJAAKWBgDZAhIAALQJBQEFRTA2OTIAAR8FAAEABQMA2AIkAACmDAEBAbkJAAGnDACZBgDSlwEmAACtDAAAApkGANKXASYAALQJBQGDA2BhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCB3YXMgaW5jb3JyZWN0bHkgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MwojW3JlcHIoYWxpZ249OCldIC8vIGVycm9yIQpzdHJ1Y3QgQWxpZ244KGk4KTsKCiNbcmVwcihhbGlnbj0iOCIpXSAvLyBlcnJvciEKc3RydWN0IEFsaWduOChpOCk7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIGBhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCBpcyB0aGUgZm9sbG93aW5nOgoKYGBgCiNbcmVwcihhbGlnbig4KSldIC8vIG9rIQpzdHJ1Y3QgQWxpZ244KGk4KTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB4MDAAEAgwOZBgDSlwEmAACsDAACBwCtDAEAAwDtAg4AAKsMAgUBBFNvbWUBAQC0CQABrAwAAwDtAg4AAqsMAAEDANgCJAAAqgwBAQC0CQACmAYA2QISAAC0CQUBBUUwNjkzAAEfBQABAAUDANgCJAAAqgwBAQG5CQABqwwAmwYAgZgBJgAAsQwAAAKbBgCBmAEmAAC0CQUB0QNBIGBicmVha2Agc3RhdGVtZW50IHdpdGhvdXQgYSBsYWJlbCBhcHBlYXJlZCBpbnNpZGUgYSBsYWJlbGVkIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5NQojICMhW2ZlYXR1cmUobGFiZWxfYnJlYWtfdmFsdWUpXQpsb29wIHsKICAgICdhOiB7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KYGBgCgpNYWtlIHN1cmUgdG8gYWx3YXlzIGxhYmVsIHRoZSBgYnJlYWtgOgoKYGBgCiMgIyFbZmVhdHVyZShsYWJlbF9icmVha192YWx1ZSldCidsOiBsb29wIHsKICAgICdhOiB7CiAgICAgICAgYnJlYWsgJ2w7CiAgICB9Cn0KYGBgCgpPciBpZiB5b3Ugd2FudCB0byBgYnJlYWtgIHRoZSBsYWJlbGVkIGJsb2NrOgoKYGBgCiMgIyFbZmVhdHVyZShsYWJlbF9icmVha192YWx1ZSldCmxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhayAnYTsKICAgIH0KICAgIGJyZWFrOwp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wfRAwABANEDmwYAgZgBJgAAsAwAAgcAsQwBAAMA7QIOAACvDAIFAQRTb21lAQEAtAkAAbAMAAMA7QIOAAKvDAABAwDYAiQAAK4MAQEAtAkAApoGANkCEgAAtAkFAQVFMDY5NQABHwUAAQAFAwDYAiQAAK4MAQEBuQkAAa8MAJ0GALCYASYAALUMAAACnQYAsJgBJgAAtAkFAZsGQSBmdW5jdGlvbiBpcyB1c2luZyBgY29udGludWVgIGtleXdvcmQgaW5jb3JyZWN0bHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk2CmZuIGNvbnRpbnVlX3NpbXBsZSgpIHsKICAgICdiOiB7CiAgICAgICAgY29udGludWU7IC8vIGVycm9yIQogICAgfQp9CmZuIGNvbnRpbnVlX2xhYmVsZWQoKSB7CiAgICAnYjogewogICAgICAgIGNvbnRpbnVlICdiOyAvLyBlcnJvciEKICAgIH0KfQpmbiBjb250aW51ZV9jcm9zc2luZygpIHsKICAgIGxvb3AgewogICAgICAgICdiOiB7CiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlcnJvciEKICAgICAgICB9CiAgICB9Cn0KYGBgCgpIZXJlIHdlIGhhdmUgdXNlZCB0aGUgYGNvbnRpbnVlYCBrZXl3b3JkIGluY29ycmVjdGx5LiBBcyB3ZQpoYXZlIHNlZW4gYWJvdmUgdGhhdCBgY29udGludWVgIHBvaW50aW5nIHRvIGEgbGFiZWxlZCBibG9jay4KClRvIGZpeCB0aGlzIHdlIGhhdmUgdG8gdXNlIHRoZSBsYWJlbGVkIGJsb2NrIHByb3Blcmx5LgpGb3IgZXhhbXBsZToKCmBgYApmbiBjb250aW51ZV9zaW1wbGUoKSB7CiAgICAnYjogbG9vcCB7CiAgICAgICAgY29udGludWUgOyAvLyBvayEKICAgIH0KfQpmbiBjb250aW51ZV9sYWJlbGVkKCkgewogICAgJ2I6IGxvb3AgewogICAgICAgIGNvbnRpbnVlICdiOyAvLyBvayEKICAgIH0KfQpmbiBjb250aW51ZV9jcm9zc2luZygpIHsKICAgIGxvb3AgewogICAgICAgICdiOiBsb29wIHsKICAgICAgICAgICAgY29udGludWU7IC8vIG9rIQogICAgICAgIH0KICAgIH0KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwYAAQCbBp0GALCYASYAALQMAAIHALUMAQADAO0CDgAAswwCBQEEU29tZQEBALQJAAG0DAADAO0CDgACswwAAQMA2AIkAACyDAEBALQJAAKcBgDZAhIAALQJBQEFRTA2OTYAAR8FAAEABQMA2AIkAACyDAEBAbkJAAGzDACfBgDfmAEmAAC5DAAAAp8GAN+YASYAALQJBQG7A0EgY2xvc3VyZSBoYXMgYmVlbiB1c2VkIGFzIGBzdGF0aWNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5NwpmbiBtYWluKCkgewogICAgc3RhdGljIHx8IHt9OyAvLyB1c2VkIGFzIGBzdGF0aWNgCn0KYGBgCgpDbG9zdXJlcyBjYW5ub3QgYmUgdXNlZCBhcyBgc3RhdGljYC4gVGhleSAic2F2ZSIgdGhlIGVudmlyb25tZW50LAphbmQgYXMgc3VjaCBhIHN0YXRpYyBjbG9zdXJlIHdvdWxkIHNhdmUgb25seSBhIHN0YXRpYyBlbnZpcm9ubWVudAp3aGljaCB3b3VsZCBjb25zaXN0IG9ubHkgb2YgdmFyaWFibGVzIHdpdGggYSBzdGF0aWMgbGlmZXRpbWUuIEdpdmVuCnRoaXMgaXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBhIHByb3BlciBmdW5jdGlvbi4gVGhlIGVhc2llc3QgZml4CmlzIHRvIHJlbW92ZSB0aGUgYHN0YXRpY2Aga2V5d29yZC4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////we7AwABALsDnwYA35gBJgAAuAwAAgcAuQwBAAMA7QIOAAC3DAIFAQRTb21lAQEAtAkAAbgMAAMA7QIOAAK3DAABAwDYAiQAALYMAQEAtAkAAp4GANkCEgAAtAkFAQVFMDY5NwABHwUAAQAFAwDYAiQAALYMAQEBuQkAAbcMAKEGAI6ZASYAAL0MAAACoQYAjpkBJgAAtAkFAbkEV2hlbiB1c2luZyBnZW5lcmF0b3JzIChvciBhc3luYykgYWxsIHR5cGUgdmFyaWFibGVzIG11c3QgYmUgYm91bmQgc28gYQpnZW5lcmF0b3IgY2FuIGJlIGNvbnN0cnVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDY5OAphc3luYyBmbiBiYXI8VD4oKSAtPiAoKSB7fQoKYXN5bmMgZm4gZm9vKCkgewogICAgYmFyKCkuYXdhaXQ7IC8vIGVycm9yOiBjYW5ub3QgaW5mZXIgdHlwZSBmb3IgYFRgCn0KYGBgCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSBgVGAgaXMgdW5rbm93YWJsZSBieSB0aGUgY29tcGlsZXIuClRvIGZpeCB0aGlzIHlvdSBtdXN0IGJpbmQgYFRgIHRvIGEgY29uY3JldGUgdHlwZSBzdWNoIGFzIGBTdHJpbmdgCnNvIHRoYXQgYSBnZW5lcmF0b3IgY2FuIHRoZW4gYmUgY29uc3RydWN0ZWQ6CgpgYGBlZGl0aW9uMjAxOAphc3luYyBmbiBiYXI8VD4oKSAtPiAoKSB7fQoKYXN5bmMgZm4gZm9vKCkgewogICAgYmFyOjo8U3RyaW5nPigpLmF3YWl0OwogICAgLy8gICBeXl5eXl5eXiBzcGVjaWZ5IHR5cGUgZXhwbGljaXRseQp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8BuQQAAQC5BKEGAI6ZASYAALwMAAIHAL0MAQADAO0CDgAAuwwCBQEEU29tZQEBALQJAAG8DAADAO0CDgACuwwAAQMA2AIkAAC6DAEBALQJAAKgBgDZAhIAALQJBQEFRTA2OTgAAR8FAAEABQMA2AIkAAC6DAEBAbkJAAG7DACjBgC9mQEmAADBDAAAAqMGAL2ZASYAALQJBQGTCUEgbWV0aG9kIHdhcyBjYWxsZWQgb24gYSByYXcgcG9pbnRlciB3aG9zZSBpbm5lciB0eXBlIHdhc24ndCBjb21wbGV0ZWx5IGtub3duLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOCxFMDY5OQojICMhW2Rlbnkod2FybmluZ3MpXQojIGZuIG1haW4oKSB7CmxldCBmb28gPSAmMTsKbGV0IGJhciA9IGZvbyBhcyAqY29uc3QgXzsKaWYgYmFyLmlzX251bGwoKSB7CiAgICAvLyAuLi4KfQojIH0KYGBgCgpIZXJlLCB0aGUgdHlwZSBvZiBgYmFyYCBpc24ndCBrbm93bjsgaXQgY291bGQgYmUgYSBwb2ludGVyIHRvIGFueXRoaW5nLiBJbnN0ZWFkLApzcGVjaWZ5IGEgdHlwZSBmb3IgdGhlIHBvaW50ZXIgKHByZWZlcmFibHkgc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZQp0aGluZyB5b3UncmUgcG9pbnRpbmcgdG8pOgoKYGBgCmxldCBmb28gPSAmMTsKbGV0IGJhciA9IGZvbyBhcyAqY29uc3QgaTMyOwppZiBiYXIuaXNfbnVsbCgpIHsKICAgIC8vIC4uLgp9CmBgYAoKRXZlbiB0aG91Z2ggYGlzX251bGwoKWAgZXhpc3RzIGFzIGEgbWV0aG9kIG9uIGFueSByYXcgcG9pbnRlciwgUnVzdCBzaG93cyB0aGlzCmVycm9yIGJlY2F1c2UgIFJ1c3QgYWxsb3dzIGZvciBgc2VsZmAgdG8gaGF2ZSBhcmJpdHJhcnkgdHlwZXMgKGJlaGluZCB0aGUKYXJiaXRyYXJ5X3NlbGZfdHlwZXMgZmVhdHVyZSBmbGFnKS4KClRoaXMgbWVhbnMgdGhhdCBzb21lb25lIGNhbiBzcGVjaWZ5IHN1Y2ggYSBmdW5jdGlvbjoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtZmVhdHVyZS1kb2VzbnQtZXhpc3QteWV0KQppbXBsIEZvbyB7CiAgICBmbiBpc19udWxsKHNlbGY6ICpjb25zdCBTZWxmKSAtPiBib29sIHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcgZWxzZQogICAgfQp9CmBgYAoKYW5kIG5vdyB3aGVuIHlvdSBjYWxsIGAuaXNfbnVsbCgpYCBvbiBhIHJhdyBwb2ludGVyIHRvIGBGb29gLCB0aGVyZSdzIGFtYmlndWl0eS4KCkdpdmVuIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHR5cGUgdGhlIHBvaW50ZXIgaXMsIGFuZCB0aGVyZSdzIHBvdGVudGlhbAphbWJpZ3VpdHkgZm9yIHNvbWUgdHlwZXMsIHdlIGRpc2FsbG93IGNhbGxpbmcgbWV0aG9kcyBvbiByYXcgcG9pbnRlcnMgd2hlbgp0aGUgdHlwZSBpcyB1bmtub3duLgoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MJAAEAkwmjBgC9mQEmAADADAACBwDBDAEAAwDtAg4AAL8MAgUBBFNvbWUBAQC0CQABwAwAAwDtAg4AAr8MAAEDANgCJAAAvgwBAQC0CQACogYA2QISAAC0CQUBBUUwNjk5AAEfBQABAAUDANgCJAAAvgwBAQG5CQABvwwApQYA7JkBJgAAxQwAAAKlBgDsmQEmAAC0CQUBtwhUaGUgYGltcGwgVHJhaXRgIHJldHVybiB0eXBlIGNhcHR1cmVzIGxpZmV0aW1lIHBhcmFtZXRlcnMgdGhhdCBkbyBub3QKYXBwZWFyIHdpdGhpbiB0aGUgYGltcGwgVHJhaXRgIGl0c2VsZi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MDAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCnRyYWl0IFRyYWl0PCdhPiB7IH0KCmltcGw8J2EsICdiPiBUcmFpdDwnYj4gZm9yIENlbGw8JidhIHUzMj4geyB9CgpmbiBmb288J3gsICd5Pih4OiBDZWxsPCYneCB1MzI+KSAtPiBpbXBsIFRyYWl0PCd5Pgp3aGVyZSAneDogJ3kKewogICAgeAp9CmBgYAoKSGVyZSwgdGhlIGZ1bmN0aW9uIGBmb29gIHJldHVybnMgYSB2YWx1ZSBvZiB0eXBlIGBDZWxsPCYneCB1MzI+YCwKd2hpY2ggcmVmZXJlbmNlcyB0aGUgbGlmZXRpbWUgYCd4YC4gSG93ZXZlciwgdGhlIHJldHVybiB0eXBlIGlzCmRlY2xhcmVkIGFzIGBpbXBsIFRyYWl0PCd5PmAgLS0gdGhpcyBpbmRpY2F0ZXMgdGhhdCBgZm9vYCByZXR1cm5zCiJzb21lIHR5cGUgdGhhdCBpbXBsZW1lbnRzIGBUcmFpdDwneT5gIiwgYnV0IGl0IGFsc28gaW5kaWNhdGVzIHRoYXQKdGhlIHJldHVybiB0eXBlICoqb25seSBjYXB0dXJlcyBkYXRhIHJlZmVyZW5jaW5nIHRoZSBsaWZldGltZSBgJ3lgKiouCkluIHRoaXMgY2FzZSwgdGhvdWdoLCB3ZSBhcmUgcmVmZXJlbmNpbmcgZGF0YSB3aXRoIGxpZmV0aW1lIGAneGAsIHNvCnRoaXMgZnVuY3Rpb24gaXMgaW4gZXJyb3IuCgpUbyBmaXggdGhpcywgeW91IG11c3QgcmVmZXJlbmNlIHRoZSBsaWZldGltZSBgJ3hgIGZyb20gdGhlIHJldHVybgp0eXBlLiBGb3IgZXhhbXBsZSwgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIHRvIGBpbXBsIFRyYWl0PCd5PiArICd4YAp3b3VsZCB3b3JrOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7Cgp0cmFpdCBUcmFpdDwnYT4geyB9CgppbXBsPCdhLCdiPiBUcmFpdDwnYj4gZm9yIENlbGw8JidhIHUzMj4geyB9CgpmbiBmb288J3gsICd5Pih4OiBDZWxsPCYneCB1MzI+KSAtPiBpbXBsIFRyYWl0PCd5PiArICd4CndoZXJlICd4OiAneQp7CiAgICB4Cn0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twgAAQC3CKUGAOyZASYAAMQMAAIHAMUMAQADAO0CDgAAwwwCBQEEU29tZQEBALQJAAHEDAADAO0CDgACwwwAAQMA2AIkAADCDAEBALQJAAKkBgDZAhIAALQJBQEFRTA3MDAAAR8FAAEABQMA2AIkAADCDAEBAbkJAAHDDACnBgCbmgEmAADJDAAAAqcGAJuaASYAALQJBQHPAVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYSBgI1tub25fZXhoYXVzdGl2ZV1gIGF0dHJpYnV0ZSB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkCm9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RydWN0IG9yIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAxCiNbbm9uX2V4aGF1c3RpdmVdCnRyYWl0IEZvbyB7IH0KYGBgCgAE////////////Af///////////wH///////////8B//8BzwEAAQDPAacGAJuaASYAAMgMAAIHAMkMAQADAO0CDgAAxwwCBQEEU29tZQEBALQJAAHIDAADAO0CDgACxwwAAQMA2AIkAADGDAEBALQJAAKmBgDZAhIAALQJBQEFRTA3MDEAAR8FAAEABQMA2AIkAADGDAEBAbkJAAHHDACpBgDKmgEmAADNDAAAAqkGAMqaASYAALQJBQGOA0ludmFsaWQgQUJJIChBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlKSB1c2VkIGluIHRoZSBjb2RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMwpleHRlcm4gImludmFsaWQiIGZuIGZvbygpIHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKCkF0IHByZXNlbnQgZmV3IHByZWRlZmluZWQgQUJJJ3MgKGxpa2UgUnVzdCwgQywgc3lzdGVtLCBldGMuKSBjYW4gYmUKdXNlZCBpbiBSdXN0LiBWZXJpZnkgdGhhdCB0aGUgQUJJIGlzIHByZWRlZmluZWQuIEZvciBleGFtcGxlIHlvdSBjYW4KcmVwbGFjZSB0aGUgZ2l2ZW4gQUJJIGZyb20gJ1J1c3QnLgoKYGBgCmV4dGVybiAiUnVzdCIgZm4gZm9vKCkge30gLy8gb2shCiMgZm4gbWFpbigpIHsgfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44DAAEAjgOpBgDKmgEmAADMDAACBwDNDAEAAwDtAg4AAMsMAgUBBFNvbWUBAQC0CQABzAwAAwDtAg4AAssMAAEDANgCJAAAygwBAQC0CQACqAYA2QISAAC0CQUBBUUwNzAzAAEfBQABAAUDANgCJAAAygwBAQG5CQABywwAqwYA+ZoBJgAA0QwAAAKrBgD5mgEmAAC0CQUB4ANBbiBpbmNvcnJlY3QgdmlzaWJpbGl0eSByZXN0cmljdGlvbiB3YXMgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwNAptb2QgZm9vIHsKICAgIHB1Yihmb28pIHN0cnVjdCBCYXIgewogICAgICAgIHg6IGkzMgogICAgfQp9CmBgYAoKVG8gbWFrZSBzdHJ1Y3QgYEJhcmAgb25seSB2aXNpYmxlIGluIG1vZHVsZSBgZm9vYCB0aGUgYGluYCBrZXl3b3JkIHNob3VsZCBiZQp1c2VkOgoKYGBgCm1vZCBmb28gewogICAgcHViKGluIGNyYXRlOjpmb28pIHN0cnVjdCBCYXIgewogICAgICAgIHg6IGkzMgogICAgfQp9CiMgZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBSdXN0IFJlZmVyZW5jZSBvbiBbVmlzaWJpbGl0eV0uCgpbVmlzaWJpbGl0eV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3Zpc2liaWxpdHktYW5kLXByaXZhY3kuaHRtbAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////D+ADAAEA4AOrBgD5mgEmAADQDAACBwDRDAEAAwDtAg4AAM8MAgUBBFNvbWUBAQC0CQAB0AwAAwDtAg4AAs8MAAEDANgCJAAAzgwBAQC0CQACqgYA2QISAAC0CQUBBUUwNzA0AAEfBQABAAUDANgCJAAAzgwBAQG5CQABzwwArQYAqJsBJgAA1QwAAAKtBgComwEmAAC0CQUBpQNBIGAjIVtmZWF0dXJlXWAgYXR0cmlidXRlIHdhcyBkZWNsYXJlZCBmb3IgYSBmZWF0dXJlIHRoYXQgaXMgc3RhYmxlIGluIHRoZQpjdXJyZW50IGVkaXRpb24sIGJ1dCBub3QgaW4gYWxsIGVkaXRpb25zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobGltaXRlZCB0byBhIHdhcm5pbmcgZHVyaW5nIDIwMTggZWRpdGlvbiBkZXZlbG9wbWVudCkKIyFbZmVhdHVyZShydXN0XzIwMThfcHJldmlldyldCiMhW2ZlYXR1cmUodGVzdF8yMDE4X2ZlYXR1cmUpXSAvLyBlcnJvcjogdGhlIGZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGB0ZXN0XzIwMThfZmVhdHVyZWAgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBSdXN0IDIwMTggZWRpdGlvbgpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wOlAwABAKUDrQYAqJsBJgAA1AwAAgcA1QwBAAMA7QIOAADTDAIFAQRTb21lAQEAtAkAAdQMAAMA7QIOAALTDAABAwDYAiQAANIMAQEAtAkAAqwGANkCEgAAtAkFAQVFMDcwNQABHwUAAQAFAwDYAiQAANIMAQEBuQkAAdMMAK8GANebASYAANkMAAACrwYA15sBJgAAtAkFAa0PYGFzeW5jIGZuYHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIHRyYWl0cyBpbiBSdXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOAp0cmFpdCBUIHsKICAgIC8vIE5laXRoZXIgY2FzZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgYXN5bmMgZm4gZm9vKCkge30KICAgIGFzeW5jIGZuIGJhcigmc2VsZikge30KfQpgYGAKCmBhc3luYyBmbmBzIHJldHVybiBhbiBgaW1wbCBGdXR1cmVgLCBtYWtpbmcgdGhlIGZvbGxvd2luZyB0d28gZXhhbXBsZXMKZXF1aXZhbGVudDoKCmBgYGVkaXRpb24yMDE4LGlnbm9yZSAoZXhhbXBsZS1vZi1kZXN1Z2FyaW5nLWVxdWl2YWxlbmNlKQphc3luYyBmbiBmb28oKSAtPiBVc2VyIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQovLyBUaGUgYXN5bmMgZm4gYWJvdmUgZ2V0cyBkZXN1Z2FyZWQgYXMgZm9sbG93czoKZm4gZm9vKCZzZWxmKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSBVc2VyPiArICdfIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQpgYGAKCkJ1dCB3aGVuIGl0IGNvbWVzIHRvIHN1cHBvcnRpbmcgdGhpcyBpbiB0cmFpdHMsIHRoZXJlIGFyZSBbYSBmZXcgaW1wbGVtZW50YXRpb24KaXNzdWVzXVthc3luYy1pcy1oYXJkXS4gT25lIG9mIHRoZW0gaXMgcmV0dXJuaW5nIGBpbXBsIFRyYWl0YCBpbiB0cmFpdHMgaXMgbm90CnN1cHBvcnRlZCwgYXMgaXQgd291bGQgcmVxdWlyZSBbR2VuZXJpYyBBc3NvY2lhdGVkIFR5cGVzXSB0byBiZSBzdXBwb3J0ZWQ6CgpgYGBlZGl0aW9uMjAxOCxpZ25vcmUgKGV4YW1wbGUtb2YtZGVzdWdhcmluZy1lcXVpdmFsZW5jZSkKaW1wbCBNeURhdGFiYXNlIHsKICAgIGFzeW5jIGZuIGdldF91c2VyKCZzZWxmKSAtPiBVc2VyIHsKICAgICAgICB1bmltcGxlbWVudGVkISgpCiAgICB9Cn0KCmltcGwgTXlEYXRhYmFzZSB7CiAgICBmbiBnZXRfdXNlcigmc2VsZikgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gVXNlcj4gKyAnXyB7CiAgICAgICAgdW5pbXBsZW1lbnRlZCEoKQogICAgfQp9CmBgYAoKVW50aWwgdGhlc2UgaXNzdWVzIGFyZSByZXNvbHZlZCwgeW91IGNhbiB1c2UgdGhlIFtgYXN5bmMtdHJhaXRgIGNyYXRlXSwgYWxsb3dpbmcKeW91IHRvIHVzZSBgYXN5bmMgZm5gIGluIHRyYWl0cyBieSBkZXN1Z2FyaW5nIHRvICJib3hlZCBmdXR1cmVzIgooYFBpbjxCb3g8ZHluIEZ1dHVyZSArIFNlbmQgKyAnYXN5bmM+PmApLgoKTm90ZSB0aGF0IHVzaW5nIHRoZXNlIHRyYWl0IG1ldGhvZHMgd2lsbCByZXN1bHQgaW4gYSBoZWFwIGFsbG9jYXRpb24KcGVyLWZ1bmN0aW9uLWNhbGwuIFRoaXMgaXMgbm90IGEgc2lnbmlmaWNhbnQgY29zdCBmb3IgdGhlIHZhc3QgbWFqb3JpdHkgb2YKYXBwbGljYXRpb25zLCBidXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSB0aGlzCmZ1bmN0aW9uYWxpdHkgaW4gdGhlIHB1YmxpYyBBUEkgb2YgYSBsb3ctbGV2ZWwgZnVuY3Rpb24gdGhhdCBpcyBleHBlY3RlZCB0byBiZQpjYWxsZWQgbWlsbGlvbnMgb2YgdGltZXMgYSBzZWNvbmQuCgpZb3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB2aXNpdGluZyB0aGUgW2FzeW5jIGJvb2tdIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgoKW2Bhc3luYy10cmFpdGAgY3JhdGVdOiBodHRwczovL2NyYXRlcy5pby9jcmF0ZXMvYXN5bmMtdHJhaXQKW2FzeW5jLWlzLWhhcmRdOiBodHRwczovL3NtYWxsY3VsdGZvbGxvd2luZy5jb20vYmFieXN0ZXBzL2Jsb2cvMjAxOS8xMC8yNi9hc3luYy1mbi1pbi10cmFpdHMtYXJlLWhhcmQvCltHZW5lcmljIEFzc29jaWF0ZWQgVHlwZXNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ0MjY1Clthc3luYyBib29rXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL2FzeW5jLWJvb2svMDdfd29ya2Fyb3VuZHMvMDZfYXN5bmNfaW5fdHJhaXRzLmh0bWwKAB////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8HrQ8AAQCtD68GANebASYAANgMAAIHANkMAQADAO0CDgAA1wwCBQEEU29tZQEBALQJAAHYDAADAO0CDgAC1wwAAQMA2AIkAADWDAEBALQJAAKuBgDZAhIAALQJBQEFRTA3MDYAAR8FAAEABQMA2AIkAADWDAEBAbkJAAHXDACxBgCGnAEmAADdDAAAArEGAIacASYAALQJBQHxA2Bhc3luY2Agbm9uLWBtb3ZlYCBjbG9zdXJlcyB3aXRoIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOCxFMDcwOAojIVtmZWF0dXJlKGFzeW5jX2Nsb3N1cmUpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhZGRfb25lID0gYXN5bmMgfG51bTogdTh8IHsgLy8gZXJyb3IhCiAgICAgICAgbnVtICsgMQogICAgfTsKfQpgYGAKCmBhc3luY2Agd2l0aCBub24tbW92ZSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB3aXRoIHRoZSBjdXJyZW50CnZlcnNpb24sIHlvdSBjYW4gdXNlIHN1Y2Nlc3NmdWxseSBieSB1c2luZyBtb3ZlOgoKYGBgZWRpdGlvbjIwMTgKIyFbZmVhdHVyZShhc3luY19jbG9zdXJlKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgYWRkX29uZSA9IGFzeW5jIG1vdmUgfG51bTogdTh8IHsgLy8gb2shCiAgICAgICAgbnVtICsgMQogICAgfTsKfQpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f/EDAAEA8QOxBgCGnAEmAADcDAACBwDdDAEAAwDtAg4AANsMAgUBBFNvbWUBAQC0CQAB3AwAAwDtAg4AAtsMAAEDANgCJAAA2gwBAQC0CQACsAYA2QISAAC0CQUBBUUwNzA4AAEfBQABAAUDANgCJAAA2gwBAQG5CQAB2wwAswYAtZwBJgAA4QwAAAKzBgC1nAEmAAC0CQUBoQRBbiB1bmtub3duIHRvb2wgbmFtZSB3YXMgZm91bmQgaW4gYSBzY29wZWQgbGludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzEwCiNbYWxsb3coY2xpcHA6OmZpbHRlcl9tYXApXSAvLyBlcnJvciFgCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoKYGBgY29tcGlsZV9mYWlsLEUwNzEwCiNbd2FybihjbGlwcDo6ZmlsdGVyX21hcCldIC8vIGVycm9yIWAKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIHRvb2wncyBuYW1lIG9yIHRoYXQgeW91IGRpZG4ndApmb3JnZXQgdG8gaW1wb3J0IGl0IGluIHlvdSBwcm9qZWN0OgoKYGBgCiNbYWxsb3coY2xpcHB5OjpmaWx0ZXJfbWFwKV0gLy8gb2shCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoKYGBgCiNbd2FybihjbGlwcHk6OmZpbHRlcl9tYXApXSAvLyBvayEKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H6EEAAEAoQSzBgC1nAEmAADgDAACBwDhDAEAAwDtAg4AAN8MAgUBBFNvbWUBAQC0CQAB4AwAAwDtAg4AAt8MAAEDANgCJAAA3gwBAQC0CQACsgYA2QISAAC0CQUBBUUwNzEwAAEfBQABAAUDANgCJAAA3gwBAQG5CQAB3wwAtQYA5JwBJgAA5QwAAAK1BgDknAEmAAC0CQUBgwNBIGJvcnJvdyBvZiBhIHRocmVhZC1sb2NhbCB2YXJpYWJsZSB3YXMgbWFkZSBpbnNpZGUgYSBmdW5jdGlvbiB3aGljaCBvdXRsaXZlZAp0aGUgbGlmZXRpbWUgb2YgdGhlIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMgojIVtmZWF0dXJlKHRocmVhZF9sb2NhbCldCgojW3RocmVhZF9sb2NhbF0Kc3RhdGljIEZPTzogdTggPSAzOwoKZm4gbWFpbigpIHsKICAgIGxldCBhID0gJkZPTzsgLy8gZXJyb3I6IHRocmVhZC1sb2NhbCB2YXJpYWJsZSBib3Jyb3dlZCBwYXN0IGVuZCBvZiBmdW5jdGlvbgoKICAgIHN0ZDo6dGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICBwcmludGxuISgie30iLCBhKTsKICAgIH0pOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////AQeDAwABAIMDtQYA5JwBJgAA5AwAAgcA5QwBAAMA7QIOAADjDAIFAQRTb21lAQEAtAkAAeQMAAMA7QIOAALjDAABAwDYAiQAAOIMAQEAtAkAArQGANkCEgAAtAkFAQVFMDcxMgABHwUAAQAFAwDYAiQAAOIMAQEBuQkAAeMMALcGAJOdASYAAOkMAAACtwYAk50BJgAAtAkFAYcOVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYm9ycm93IHN0YXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUKbGlmZXRpbWUgb2YgYSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMwojIVtmZWF0dXJlKG5sbCldCgpwdWIgc3RydWN0IFM8J2E+IHsgZGF0YTogJidhIG11dCBTdHJpbmcgfQoKaW1wbDwnYT4gRHJvcCBmb3IgUzwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgc2VsZi5kYXRhLnB1c2hfc3RyKCJiZWluZyBkcm9wcGVkIik7IH0KfQoKZm4gZGVtbzwnYT4oczogUzwnYT4pIC0+ICYnYSBtdXQgU3RyaW5nIHsgbGV0IHAgPSAmbXV0ICpzLmRhdGE7IHAgfQpgYGAKCkhlcmUsIGBkZW1vYCB0cmllcyB0byBib3Jyb3cgdGhlIHN0cmluZyBkYXRhIGhlbGQgd2l0aGluIGl0cwphcmd1bWVudCBgc2AgYW5kIHRoZW4gcmV0dXJuIHRoYXQgYm9ycm93LiBIb3dldmVyLCBgU2AgaXMKZGVjbGFyZWQgYXMgaW1wbGVtZW50aW5nIGBEcm9wYC4KClN0cnVjdHMgaW1wbGVtZW50aW5nIHRoZSBgRHJvcGAgdHJhaXQgaGF2ZSBhbiBpbXBsaWNpdCBkZXN0cnVjdG9yIHRoYXQKZ2V0cyBjYWxsZWQgd2hlbiB0aGV5IGdvIG91dCBvZiBzY29wZS4gVGhpcyBkZXN0cnVjdG9yIGdldHMgZXhjbHVzaXZlCmFjY2VzcyB0byB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3Qgd2hlbiBpdCBydW5zLgoKVGhpcyBtZWFucyB0aGF0IHdoZW4gYHNgIHJlYWNoZXMgdGhlIGVuZCBvZiBgZGVtb2AsIGl0cyBkZXN0cnVjdG9yCmdldHMgZXhjbHVzaXZlIGFjY2VzcyB0byBpdHMgYCZtdXRgLWJvcnJvd2VkIHN0cmluZyBkYXRhLiAgYWxsb3dpbmcKYW5vdGhlciBib3Jyb3cgb2YgdGhhdCBzdHJpbmcgZGF0YSAoYHBgKSwgdG8gZXhpc3QgYWNyb3NzIHRoZSBkcm9wIG9mCmBzYCB3b3VsZCBiZSBhIHZpb2xhdGlvbiBvZiB0aGUgcHJpbmNpcGxlIHRoYXQgYCZtdXRgLWJvcnJvd3MgaGF2ZQpleGNsdXNpdmUsIHVuYWxpYXNlZCBhY2Nlc3MgdG8gdGhlaXIgcmVmZXJlbmNlZCBkYXRhLgoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgY2hhbmdpbmcgYGRlbW9gIHNvIHRoYXQgdGhlIGRlc3RydWN0b3IgZG9lcwpub3QgcnVuIHdoaWxlIHRoZSBzdHJpbmctZGF0YSBpcyBib3Jyb3dlZDsgZm9yIGV4YW1wbGUgYnkgdGFraW5nIGBTYApieSByZWZlcmVuY2U6CgpgYGAKcHViIHN0cnVjdCBTPCdhPiB7IGRhdGE6ICYnYSBtdXQgU3RyaW5nIH0KCmltcGw8J2E+IERyb3AgZm9yIFM8J2E+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IHNlbGYuZGF0YS5wdXNoX3N0cigiYmVpbmcgZHJvcHBlZCIpOyB9Cn0KCmZuIGRlbW88J2E+KHM6ICYnYSBtdXQgUzwnYT4pIC0+ICYnYSBtdXQgU3RyaW5nIHsgbGV0IHAgPSAmbXV0ICooKnMpLmRhdGE7IHAgfQpgYGAKCk5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIG5lZWRzIGEgcmVmZXJlbmNlIHRvIFMgd2l0aCBsaWZldGltZSBgJ2FgLgpOb3RoaW5nIHNob3J0ZXIgdGhhbiBgJ2FgIHdpbGwgc3VmZmljZTogYSBzaG9ydGVyIGxpZmV0aW1lIHdvdWxkIGltcGx5CnRoYXQgYWZ0ZXIgYGRlbW9gIGZpbmlzaGVzIGV4ZWN1dGluZywgc29tZXRoaW5nIGVsc2UgKHN1Y2ggYXMgdGhlCmRlc3RydWN0b3IhKSBjb3VsZCBhY2Nlc3MgYHMuZGF0YWAgYWZ0ZXIgdGhlIGVuZCBvZiB0aGF0IHNob3J0ZXIKbGlmZXRpbWUsIHdoaWNoIHdvdWxkIGFnYWluIHZpb2xhdGUgdGhlIGAmbXV0YC1ib3Jyb3cncyBleGNsdXNpdmUKYWNjZXNzLgoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wF/hw4AAQCHDrcGAJOdASYAAOgMAAIHAOkMAQADAO0CDgAA5wwCBQEEU29tZQEBALQJAAHoDAADAO0CDgAC5wwAAQMA2AIkAADmDAEBALQJAAK2BgDZAhIAALQJBQEFRTA3MTMAAR8FAAEABQMA2AIkAADmDAEBAbkJAAHnDAC5BgDCnQEmAADtDAAAArkGAMKdASYAALQJBQHOA0EgYCNbbWFya2VyXWAgdHJhaXQgY29udGFpbmVkIGFuIGFzc29jaWF0ZWQgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTQKIyFbZmVhdHVyZShtYXJrZXJfdHJhaXRfYXR0cildCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2RlZmF1bHRzKV0KCiNbbWFya2VyXQp0cmFpdCBNYXJrZXJDb25zdCB7CiAgICBjb25zdCBOOiB1c2l6ZTsgLy8gZXJyb3IhCn0KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBpdGVtcyBvZiBtYXJrZXIgdHJhaXRzIGNhbm5vdCBiZSBvdmVycmlkZGVuLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gaGF2ZSB0aGVtCndoZW4gdGhleSBjYW5ub3QgYmUgY2hhbmdlZCBwZXItdHlwZSBhbnl3YXkuICBJZiB5b3Ugd2FudGVkIHRoZW0gZm9yIGVyZ29ub21pYwpyZWFzb25zLCBjb25zaWRlciBtYWtpbmcgYW4gZXh0ZW5zaW9uIHRyYWl0IGluc3RlYWQuCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/zgMAAQDOA7kGAMKdASYAAOwMAAIHAO0MAQADAO0CDgAA6wwCBQEEU29tZQEBALQJAAHsDAADAO0CDgAC6wwAAQMA2AIkAADqDAEBALQJAAK4BgDZAhIAALQJBQEFRTA3MTQAAR8FAAEABQMA2AIkAADqDAEBAbkJAAHrDAC7BgDxnQEmAADxDAAAArsGAPGdASYAALQJBQGqBEFuIGBpbXBsYCBmb3IgYSBgI1ttYXJrZXJdYCB0cmFpdCB0cmllZCB0byBvdmVycmlkZSBhbiBhc3NvY2lhdGVkIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE1CiMhW2ZlYXR1cmUobWFya2VyX3RyYWl0X2F0dHIpXQoKI1ttYXJrZXJdCnRyYWl0IE1hcmtlciB7CiAgICBjb25zdCBOOiB1c2l6ZSA9IDA7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7fQp9CgpzdHJ1Y3QgT3ZlcnJpZGVDb25zdDsKaW1wbCBNYXJrZXIgZm9yIE92ZXJyaWRlQ29uc3QgeyAvLyBlcnJvciEKICAgIGNvbnN0IE46IHVzaXplID0gMTsKfQojIGZuIG1haW4oKSB7fQpgYGAKCkJlY2F1c2UgbWFya2VyIHRyYWl0cyBhcmUgYWxsb3dlZCB0byBoYXZlIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUKdHlwZSwgaXQncyBub3QgYWxsb3dlZCB0byBvdmVycmlkZSBhbnl0aGluZyBpbiB0aG9zZSBpbXBsZW1lbnRhdGlvbnMsIGFzIGl0CndvdWxkIGJlIGFtYmlndW91cyB3aGljaCBvdmVycmlkZSBzaG91bGQgYWN0dWFsbHkgYmUgdXNlZC4KAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f6oEAAEAqgS7BgDxnQEmAADwDAACBwDxDAEAAwDtAg4AAO8MAgUBBFNvbWUBAQC0CQAB8AwAAwDtAg4AAu8MAAEDANgCJAAA7gwBAQC0CQACugYA2QISAAC0CQUBBUUwNzE1AAEfBQABAAUDANgCJAAA7gwBAQG5CQAB7wwAvQYAoJ4BJgAA9QwAAAK9BgCgngEmAAC0CQUB0BVBIHRlbXBvcmFyeSB2YWx1ZSBpcyBiZWluZyBkcm9wcGVkIHdoaWxlIGEgYm9ycm93IGlzIHN0aWxsIGluIGFjdGl2ZSB1c2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE2CmZuIGZvbygpIC0+IGkzMiB7IDIyIH0KZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHAgPSBiYXIoJmZvbygpKTsKICAgICAgICAgLy8gLS0tLS0tIGNyZWF0ZXMgYSB0ZW1wb3JhcnkKbGV0IHEgPSAqcDsKYGBgCgpIZXJlLCB0aGUgZXhwcmVzc2lvbiBgJmZvbygpYCBpcyBib3Jyb3dpbmcgdGhlIGV4cHJlc3Npb24gYGZvbygpYC4gQXMgYGZvbygpYCBpcwphIGNhbGwgdG8gYSBmdW5jdGlvbiwgYW5kIG5vdCB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlLCB0aGlzIGNyZWF0ZXMgYQoqKnRlbXBvcmFyeSoqIC0tIHRoYXQgdGVtcG9yYXJ5IHN0b3JlcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYGZvbygpYCBzbyB0aGF0IGl0CmNhbiBiZSBib3Jyb3dlZC4gWW91IGNvdWxkIGltYWdpbmUgdGhhdCBgbGV0IHAgPSBiYXIoJmZvbygpKTtgIGlzIGVxdWl2YWxlbnQgdG8KdGhlIGZvbGxvd2luZywgd2hpY2ggdXNlcyBhbiBleHBsaWNpdCB0ZW1wb3JhcnkgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk3CiMgZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQojIGZuIGJhcih4OiAmaTMyKSAtPiAmaTMyIHsgeCB9CmxldCBwID0gewogIGxldCB0bXAgPSBmb28oKTsgLy8gdGhlIHRlbXBvcmFyeQogIGJhcigmdG1wKSAvLyBlcnJvcjogYHRtcGAgZG9lcyBub3QgbGl2ZSBsb25nIGVub3VnaAp9OyAvLyA8LS0gdG1wIGlzIGZyZWVkIGFzIHdlIGV4aXQgdGhpcyBibG9jawpsZXQgcSA9IHA7CmBgYAoKV2hlbmV2ZXIgYSB0ZW1wb3JhcnkgaXMgY3JlYXRlZCwgaXQgaXMgYXV0b21hdGljYWxseSBkcm9wcGVkIChmcmVlZCkgYWNjb3JkaW5nCnRvIGZpeGVkIHJ1bGVzLiBPcmRpbmFyaWx5LCB0aGUgdGVtcG9yYXJ5IGlzIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nCnN0YXRlbWVudCAtLSBpbiB0aGlzIGNhc2UsIGFmdGVyIHRoZSBgbGV0YC4gVGhpcyBpcyBpbGx1c3RyYXRlZCBpbiB0aGUgZXhhbXBsZQphYm92ZSBieSBzaG93aW5nIHRoYXQgYHRtcGAgd291bGQgYmUgZnJlZWQgYXMgd2UgZXhpdCB0aGUgYmxvY2suCgpUbyBmaXggdGhpcyBwcm9ibGVtLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCB2YXJpYWJsZSB0byBzdG9yZSB0aGUgdmFsdWUgaW4KcmF0aGVyIHRoYW4gcmVseWluZyBvbiBhIHRlbXBvcmFyeS4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBjaGFuZ2UgdGhlIG9yaWdpbmFsCnByb2dyYW0gdG8gdGhlIGZvbGxvd2luZzoKCmBgYApmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmZuIGJhcih4OiAmaTMyKSAtPiAmaTMyIHsgeCB9CmxldCB2YWx1ZSA9IGZvbygpOyAvLyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZyBibG9jawpsZXQgcCA9IGJhcigmdmFsdWUpOwpsZXQgcSA9ICpwOwpgYGAKCkJ5IGludHJvZHVjaW5nIHRoZSBleHBsaWNpdCBgbGV0IHZhbHVlYCwgd2UgYWxsb2NhdGUgc3RvcmFnZSB0aGF0IHdpbGwgbGFzdAp1bnRpbCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NpbmcgYmxvY2sgKHdoZW4gYHZhbHVlYCBnb2VzIG91dCBvZiBzY29wZSkuIFdoZW4gd2UKYm9ycm93IGAmdmFsdWVgLCB3ZSBhcmUgYm9ycm93aW5nIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBhbHJlYWR5IGV4aXN0cywgYW5kCmhlbmNlIG5vIHRlbXBvcmFyeSBpcyBjcmVhdGVkLgoKVGVtcG9yYXJpZXMgYXJlIG5vdCBhbHdheXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3Npbmcgc3RhdGVtZW50LiBJbgpzaW1wbGUgY2FzZXMgd2hlcmUgdGhlIGAmYCBleHByZXNzaW9uIGlzIGltbWVkaWF0ZWx5IHN0b3JlZCBpbnRvIGEgdmFyaWFibGUsIHRoZQpjb21waWxlciB3aWxsIGF1dG9tYXRpY2FsbHkgZXh0ZW5kIHRoZSBsaWZldGltZSBvZiB0aGUgdGVtcG9yYXJ5IHVudGlsIHRoZSBlbmQKb2YgdGhlIGVuY2xvc2luZyBibG9jay4gVGhlcmVmb3JlLCBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gZml4IHRoZSBvcmlnaW5hbApwcm9ncmFtIGlzIHRvIHdyaXRlIGBsZXQgdG1wID0gJmZvbygpYCBhbmQgbm90IGBsZXQgdG1wID0gZm9vKClgOgoKYGBgCmZuIGZvbygpIC0+IGkzMiB7IDIyIH0KZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHZhbHVlID0gJmZvbygpOwpsZXQgcCA9IGJhcih2YWx1ZSk7CmxldCBxID0gKnA7CmBgYAoKSGVyZSwgd2UgYXJlIHN0aWxsIGJvcnJvd2luZyBgZm9vKClgLCBidXQgYXMgdGhlIGJvcnJvdyBpcyBhc3NpZ25lZCBkaXJlY3RseQppbnRvIGEgdmFyaWFibGUsIHRoZSB0ZW1wb3Jhcnkgd2lsbCBub3QgYmUgZHJvcHBlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZQplbmNsb3NpbmcgYmxvY2suIFNpbWlsYXIgcnVsZXMgYXBwbHkgd2hlbiB0ZW1wb3JhcmllcyBhcmUgc3RvcmVkIGludG8gYWdncmVnYXRlCnN0cnVjdHVyZXMgbGlrZSBhIHR1cGxlIG9yIHN0cnVjdDoKCmBgYAovLyBIZXJlLCB0d28gdGVtcG9yYXJpZXMgYXJlIGNyZWF0ZWQsIGJ1dAovLyBhcyB0aGV5IGFyZSBzdG9yZWQgZGlyZWN0bHkgaW50byBgdmFsdWVgLAovLyB0aGV5IGFyZSBub3QgZHJvcHBlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZQovLyBlbmNsb3NpbmcgYmxvY2suCmZuIGZvbygpIC0+IGkzMiB7IDIyIH0KbGV0IHZhbHVlID0gKCZmb28oKSwgJmZvbygpKTsKYGBgCgAs////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//A9AVAAEA0BW9BgCgngEmAAD0DAACBwD1DAEAAwDtAg4AAPMMAgUBBFNvbWUBAQC0CQAB9AwAAwDtAg4AAvMMAAEDANgCJAAA8gwBAQC0CQACvAYA2QISAAC0CQUBBUUwNzE2AAEfBQABAAUDANgCJAAA8gwBAQG5CQAB8wwAvwYAz54BJgAA+QwAAAK/BgDPngEmAAC0CQUBtwFBIGAjW2xhbmcgPSAiLi4iXWAgYXR0cmlidXRlIHdhcyBwbGFjZWQgb24gdGhlIHdyb25nIGl0ZW0gdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTgKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJvd25lZF9ib3giXQpzdGF0aWMgWDogdTMyID0gNDI7CmBgYAoAA////////////wH///////////8B/////////z+3AQABALcBvwYAz54BJgAA+AwAAgcA+QwBAAMA7QIOAAD3DAIFAQRTb21lAQEAtAkAAfgMAAMA7QIOAAL3DAABAwDYAiQAAPYMAQEAtAkAAr4GANkCEgAAtAkFAQVFMDcxOAABHwUAAQAFAwDYAiQAAPYMAQEBuQkAAfcMAMEGAP6eASYAAP0MAAACwQYA/p4BJgAAtAkFAcYIQW4gYXNzb2NpYXRlZCB0eXBlIHZhbHVlIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE5CiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2JvdW5kcyldCgp0cmFpdCBGb29UcmFpdCB7fQp0cmFpdCBCYXJUcmFpdCB7fQoKLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBgSXRlbWAgaW4gdHJhaXQgYEl0ZXJhdG9yYCBpcyBzcGVjaWZpZWQgdHdpY2UKc3RydWN0IEZvbzxUOiBJdGVyYXRvcjxJdGVtOiBGb29UcmFpdCwgSXRlbTogQmFyVHJhaXQ+PiB7IGY6IFQgfQpgYGAKCmBJdGVtYCBpbiB0cmFpdCBgSXRlcmF0b3JgIGNhbm5vdCBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgZm9yIHN0cnVjdCBgRm9vYC4KVG8gZml4IHRoaXMsIGNyZWF0ZSBhIG5ldyB0cmFpdCB0aGF0IGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGRlc2lyZWQgdHJhaXRzIGFuZApzcGVjaWZ5IHRoZSBhc3NvY2lhdGVkIHR5cGUgd2l0aCB0aGUgbmV3IHRyYWl0LgoKQ29ycmVjdGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfYm91bmRzKV0KCnRyYWl0IEZvb1RyYWl0IHt9CnRyYWl0IEJhclRyYWl0IHt9CnRyYWl0IEZvb0JhclRyYWl0OiBGb29UcmFpdCArIEJhclRyYWl0IHt9CgpzdHJ1Y3QgRm9vPFQ6IEl0ZXJhdG9yPEl0ZW06IEZvb0JhclRyYWl0Pj4geyBmOiBUIH0gLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXNzb2NpYXRlZCB0eXBlcywgc2VlIFt0aGUgYm9va11bYmstYXRdLiBGb3IgbW9yZQppbmZvcm1hdGlvbiBvbiBhc3NvY2lhdGVkIHR5cGUgYm91bmRzLCBzZWUgW1JGQyAyMjg5XVtyZmMtMjI4OV0uCgpbYmstYXRdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wMy1hZHZhbmNlZC10cmFpdHMuaHRtbCNzcGVjaWZ5aW5nLXBsYWNlaG9sZGVyLXR5cGVzLWluLXRyYWl0LWRlZmluaXRpb25zLXdpdGgtYXNzb2NpYXRlZC10eXBlcwpbcmZjLTIyODldOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yMjg5LWFzc29jaWF0ZWQtdHlwZS1ib3VuZHMuaHRtbAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BP8YIAAEAxgjBBgD+ngEmAAD8DAACBwD9DAEAAwDtAg4AAPsMAgUBBFNvbWUBAQC0CQAB/AwAAwDtAg4AAvsMAAEDANgCJAAA+gwBAQC0CQACwAYA2QISAAC0CQUBBUUwNzE5AAEfBQABAAUDANgCJAAA+gwBAQG5CQAB+wwAwwYArZ8BJgAAgQ0AAALDBgCtnwEmAAC0CQUBigNBbiBgaW1wbCBUcmFpdGAgdHlwZSBleHBhbmRzIHRvIGEgcmVjdXJzaXZlIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzIwCmZuIG1ha2VfcmVjdXJzaXZlX3R5cGUoKSAtPiBpbXBsIFNpemVkIHsKICAgIFttYWtlX3JlY3Vyc2l2ZV90eXBlKCksIG1ha2VfcmVjdXJzaXZlX3R5cGUoKV0KfQpgYGAKCkFuIGBpbXBsIFRyYWl0YCB0eXBlIG11c3QgYmUgZXhwYW5kYWJsZSB0byBhIGNvbmNyZXRlIHR5cGUgdGhhdCBjb250YWlucyBubwpgaW1wbCBUcmFpdGAgdHlwZXMuIEZvciBleGFtcGxlIHRoZSBwcmV2aW91cyBleGFtcGxlIHRyaWVzIHRvIGNyZWF0ZSBhbgpgaW1wbCBUcmFpdGAgdHlwZSBgVGAgdGhhdCBpcyBlcXVhbCB0byBgW1QsIFRdYC4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/B4oDAAEAigPDBgCtnwEmAACADQACBwCBDQEAAwDtAg4AAP8MAgUBBFNvbWUBAQC0CQABgA0AAwDtAg4AAv8MAAEDANgCJAAA/gwBAQC0CQACwgYA2QISAAC0CQUBBUUwNzIwAAEfBQABAAUDANgCJAAA/gwBAQG5CQAB/wwAxQYA3J8BJgAAhQ0AAALFBgDcnwEmAAC0CQUBrAVUaGUgYG9wdGltaXplYCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjIKIyFbZmVhdHVyZShvcHRpbWl6ZV9hdHRyaWJ1dGUpXQoKI1tvcHRpbWl6ZShzb21ldGhpbmcpXSAvLyBlcnJvcjogaW52YWxpZCBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KYGBgCgpUaGUgYCNbb3B0aW1pemVdYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKCi0gYCNbb3B0aW1pemUoc2l6ZSldYCAtLSBpbnN0cnVjdHMgdGhlIG9wdGltaXphdGlvbiBwaXBlbGluZSB0byBnZW5lcmF0ZSBjb2RlCiAgdGhhdCdzIHNtYWxsZXIgcmF0aGVyIHRoYW4gZmFzdGVyCgotIGAjW29wdGltaXplKHNwZWVkKV1gIC0tIGluc3RydWN0cyB0aGUgb3B0aW1pemF0aW9uIHBpcGVsaW5lIHRvIGdlbmVyYXRlIGNvZGUKICB0aGF0J3MgZmFzdGVyIHJhdGhlciB0aGFuIHNtYWxsZXIKCkZvciBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUob3B0aW1pemVfYXR0cmlidXRlKV0KCiNbb3B0aW1pemUoc2l6ZSldCnB1YiBmbiBzb21ldGhpbmcoKSB7fQpgYGAKClNlZSBbUkZDIDI0MTJdIGZvciBtb3JlIGRldGFpbHMuCgpbUkZDIDI0MTJdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yNDEyLW9wdGltaXplLWF0dHIuaHRtbAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8DrAUAAQCsBcUGANyfASYAAIQNAAIHAIUNAQADAO0CDgAAgw0CBQEEU29tZQEBALQJAAGEDQADAO0CDgACgw0AAQMA2AIkAACCDQEBALQJAALEBgDZAhIAALQJBQEFRTA3MjIAAR8FAAEABQMA2AIkAACCDQEBAbkJAAGDDQDHBgCLoAEmAACJDQAAAscGAIugASYAALQJBQGRBGAjW2ZmaV9yZXR1cm5zX3R3aWNlXWAgd2FzIHVzZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYSBmb3JlaWduIGZ1bmN0aW9uCmRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNAojIVtmZWF0dXJlKGZmaV9yZXR1cm5zX3R3aWNlKV0KIyFbY3JhdGVfdHlwZSA9ICJsaWIiXQoKI1tmZmlfcmV0dXJuc190d2ljZV0gLy8gZXJyb3IhCnB1YiBmbiBmb28oKSB7fQpgYGAKCmAjW2ZmaV9yZXR1cm5zX3R3aWNlXWAgY2FuIG9ubHkgYmUgdXNlZCBvbiBmb3JlaWduIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGNvcnJlY3QgdGhlIHByZXZpb3VzIGV4YW1wbGUgYnkgZGVjbGFyaW5nCnRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW7CoGBleHRlcm5gwqBibG9jay4KCmBgYAojIVtmZWF0dXJlKGZmaV9yZXR1cm5zX3R3aWNlKV0KCmV4dGVybiAiQyIgewogICAjW2ZmaV9yZXR1cm5zX3R3aWNlXSAvLyBvayEKICAgcHViIGZuIGZvbygpOwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8HkQQAAQCRBMcGAIugASYAAIgNAAIHAIkNAQADAO0CDgAAhw0CBQEEU29tZQEBALQJAAGIDQADAO0CDgAChw0AAQMA2AIkAACGDQEBALQJAALGBgDZAhIAALQJBQEFRTA3MjQAAR8FAAEABQMA2AIkAACGDQEBAbkJAAGHDQDJBgC6oAEmAACNDQAAAskGALqgASYAALQJBQGiA0EgZmVhdHVyZSBhdHRyaWJ1dGUgbmFtZWQgYSBmZWF0dXJlIHRoYXQgd2FzIGRpc2FsbG93ZWQgaW4gdGhlIGNvbXBpbGVyCmNvbW1hbmQgbGluZSBmbGFncy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbid0IHNwZWNpZnkgY29tcGlsZXIgZmxhZ3MgZnJvbSBkb2N0ZXN0cykKIyFbZmVhdHVyZShuZXZlcl90eXBlKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBuZXZlcl90eXBlYCBpcyBub3QgaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpc3Qgb2YgYWxsb3dlZCBmZWF0dXJlcwpgYGAKCkRlbGV0ZSB0aGUgb2ZmZW5kaW5nIGZlYXR1cmUgYXR0cmlidXRlLCBvciBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsb3dlZApmZWF0dXJlcyBpbiB0aGUgYC1aIGFsbG93X2ZlYXR1cmVzYCBmbGFnLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8/ogMAAQCiA8kGALqgASYAAIwNAAIHAI0NAQADAO0CDgAAiw0CBQEEU29tZQEBALQJAAGMDQADAO0CDgACiw0AAQMA2AIkAACKDQEBALQJAALIBgDZAhIAALQJBQEFRTA3MjUAAR8FAAEABQMA2AIkAACKDQEBAbkJAAGLDQDLBgDpoAEmAACRDQAAAssGAOmgASYAALQJBQHqA0EgYHlpZWxkYCBjbGF1c2Ugd2FzIHVzZWQgaW4gYW4gYGFzeW5jYCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNyxlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgYXN5bmMgewogICAgICAgICAgICB5aWVsZDsKICAgICAgICB9CiAgICB9Owp9CmBgYAoKSGVyZSwgdGhlIGB5aWVsZGAga2V5d29yZCBpcyB1c2VkIGluIGFuIGBhc3luY2AgYmxvY2ssCndoaWNoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIG1vdmUgYHlpZWxkYCBvdXQgb2YgdGhlIGBhc3luY2AgYmxvY2s6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgeWllbGQ7CiAgICB9Owp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qAwABAOoDywYA6aABJgAAkA0AAgcAkQ0BAAMA7QIOAACPDQIFAQRTb21lAQEAtAkAAZANAAMA7QIOAAKPDQABAwDYAiQAAI4NAQEAtAkAAsoGANkCEgAAtAkFAQVFMDcyNwABHwUAAQAFAwDYAiQAAI4NAQEBuQkAAY8NAM0GAJihASYAAJUNAAACzQYAmKEBJgAAtAkFAf4OW2Bhd2FpdGBdIGhhcyBiZWVuIHVzZWQgb3V0c2lkZSBbYGFzeW5jYF0gZnVuY3Rpb24gb3IgW2Bhc3luY2BdIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDcyOAojIHVzZSBzdGQ6OnBpbjo6UGluOwojIHVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwojIHVzZSBzdGQ6OnRhc2s6OntDb250ZXh0LCBQb2xsfTsKIwojIHN0cnVjdCBXYWtlT25jZVRoZW5Db21wbGV0ZShib29sKTsKIwojIGZuIHdha2VfYW5kX3lpZWxkX29uY2UoKSAtPiBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIFdha2VPbmNlVGhlbkNvbXBsZXRlKGZhbHNlKQojIH0KIwojIGltcGwgRnV0dXJlIGZvciBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIHR5cGUgT3V0cHV0ID0gKCk7CiMgICAgIGZuIHBvbGwobXV0IHNlbGY6IFBpbjwmbXV0IFNlbGY+LCBjeDogJm11dCBDb250ZXh0PCdfPikgLT4gUG9sbDwoKT4gewojICAgICAgICAgaWYgc2VsZi4wIHsKIyAgICAgICAgICAgICBQb2xsOjpSZWFkeSgoKSkKIyAgICAgICAgIH0gZWxzZSB7CiMgICAgICAgICAgICAgY3gud2FrZXIoKS53YWtlX2J5X3JlZigpOwojICAgICAgICAgICAgIHNlbGYuMCA9IHRydWU7CiMgICAgICAgICAgICAgUG9sbDo6UGVuZGluZwojICAgICAgICAgfQojICAgICB9CiMgfQojCmZuIGZvbygpIHsKICAgIHdha2VfYW5kX3lpZWxkX29uY2UoKS5hd2FpdCAvLyBgYXdhaXRgIGlzIHVzZWQgb3V0c2lkZSBgYXN5bmNgIGNvbnRleHQKfQpgYGAKCltgYXdhaXRgXSBpcyB1c2VkIHRvIHN1c3BlbmQgdGhlIGN1cnJlbnQgY29tcHV0YXRpb24gdW50aWwgdGhlIGdpdmVuCmZ1dHVyZSBpcyByZWFkeSB0byBwcm9kdWNlIGEgdmFsdWUuIFNvIGl0IGlzIGxlZ2FsIG9ubHkgd2l0aGluCmFuIFtgYXN5bmNgXSBjb250ZXh0LCBsaWtlIGFuIGBhc3luY2AgZnVuY3Rpb24gb3IgYW4gYGFzeW5jYCBibG9jay4KCmBgYGVkaXRpb24yMDE4CiMgdXNlIHN0ZDo6cGluOjpQaW47CiMgdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CiMgdXNlIHN0ZDo6dGFzazo6e0NvbnRleHQsIFBvbGx9OwojCiMgc3RydWN0IFdha2VPbmNlVGhlbkNvbXBsZXRlKGJvb2wpOwojCiMgZm4gd2FrZV9hbmRfeWllbGRfb25jZSgpIC0+IFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgV2FrZU9uY2VUaGVuQ29tcGxldGUoZmFsc2UpCiMgfQojCiMgaW1wbCBGdXR1cmUgZm9yIFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgdHlwZSBPdXRwdXQgPSAoKTsKIyAgICAgZm4gcG9sbChtdXQgc2VsZjogUGluPCZtdXQgU2VsZj4sIGN4OiAmbXV0IENvbnRleHQ8J18+KSAtPiBQb2xsPCgpPiB7CiMgICAgICAgICBpZiBzZWxmLjAgewojICAgICAgICAgICAgIFBvbGw6OlJlYWR5KCgpKQojICAgICAgICAgfSBlbHNlIHsKIyAgICAgICAgICAgICBjeC53YWtlcigpLndha2VfYnlfcmVmKCk7CiMgICAgICAgICAgICAgc2VsZi4wID0gdHJ1ZTsKIyAgICAgICAgICAgICBQb2xsOjpQZW5kaW5nCiMgICAgICAgICB9CiMgICAgIH0KIyB9CiMKYXN5bmMgZm4gZm9vKCkgewogICAgd2FrZV9hbmRfeWllbGRfb25jZSgpLmF3YWl0IC8vIGBhd2FpdGAgaXMgdXNlZCB3aXRoaW4gYGFzeW5jYCBmdW5jdGlvbgp9CgpmbiBiYXIoeDogdTgpIC0+IGltcGwgRnV0dXJlPE91dHB1dCA9IHU4PiB7CiAgICBhc3luYyBtb3ZlIHsKICAgICAgICB3YWtlX2FuZF95aWVsZF9vbmNlKCkuYXdhaXQ7IC8vIGBhd2FpdGAgaXMgdXNlZCB3aXRoaW4gYGFzeW5jYCBibG9jawogICAgICAgIHgKICAgIH0KfQpgYGAKCltgYXN5bmNgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQva2V5d29yZC5hc3luYy5odG1sCltgYXdhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQva2V5d29yZC5hd2FpdC5odG1sCgAe////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z/+DgABAP4OzQYAmKEBJgAAlA0AAgcAlQ0BAAMA7QIOAACTDQIFAQRTb21lAQEAtAkAAZQNAAMA7QIOAAKTDQABAwDYAiQAAJINAQEAtAkAAswGANkCEgAAtAkFAQVFMDcyOAABHwUAAQAFAwDYAiQAAJINAQEBuQkAAZMNAM8GAMehASYAAJkNAAACzwYAx6EBJgAAtAkFAaQJU3VwcG9ydCBmb3IgTm9uLUxleGljYWwgTGlmZXRpbWVzIChOTEwpIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBSdXN0IGNvbXBpbGVyCnNpbmNlIDEuMzEsIGFuZCBoYXMgYmVlbiBlbmFibGVkIG9uIHRoZSAyMDE1IGVkaXRpb24gc2luY2UgMS4zNi4gVGhlIG5ldyBib3Jyb3cKY2hlY2tlciBmb3IgTkxMIHVuY292ZXJlZCBzb21lIGJ1Z3MgaW4gdGhlIG9sZCBib3Jyb3cgY2hlY2tlciwgd2hpY2ggaW4gc29tZQpjYXNlcyBhbGxvd2VkIHVuc291bmQgY29kZSB0byBjb21waWxlLCByZXN1bHRpbmcgaW4gbWVtb3J5IHNhZmV0eSBpc3N1ZXMuCgojIyMgV2hhdCBkbyBJIGRvPwoKQ2hhbmdlIHlvdXIgY29kZSBzbyB0aGUgd2FybmluZyBkb2VzIG5vIGxvbmdlciB0cmlnZ2VyLiBGb3IgYmFja3dhcmRzCmNvbXBhdGliaWxpdHksIHRoaXMgdW5zb3VuZCBjb2RlIG1heSBzdGlsbCBjb21waWxlICh3aXRoIGEgd2FybmluZykgcmlnaHQgbm93LgpIb3dldmVyLCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIG5vIGxvbmdlciBhY2NlcHQgdGhpcwpjb2RlIGFuZCB3aWxsIHRocm93IGEgaGFyZCBlcnJvci4KCiMjIyBTaG91bGRuJ3QgeW91IGZpeCB0aGUgb2xkIGJvcnJvdyBjaGVja2VyPwoKVGhlIG9sZCBib3Jyb3cgY2hlY2tlciBoYXMga25vd24gc291bmRuZXNzIGlzc3VlcyB0aGF0IGFyZSBiYXNpY2FsbHkgaW1wb3NzaWJsZQp0byBmaXguIFRoZSBuZXcgTkxMLWJhc2VkIGJvcnJvdyBjaGVja2VyIGlzIHRoZSBmaXguCgojIyMgQ2FuIEkgdHVybiB0aGVzZSB3YXJuaW5ncyBpbnRvIGVycm9ycyBieSBkZW55aW5nIGEgbGludD8KCk5vLgoKIyMjIFdoZW4gYXJlIHRoZXNlIHdhcm5pbmdzIGdvaW5nIHRvIHR1cm4gaW50byBlcnJvcnM/CgpObyBmb3JtYWwgdGltZWxpbmUgZm9yIHR1cm5pbmcgdGhlIHdhcm5pbmdzIGludG8gZXJyb3JzIGhhcyBiZWVuIHNldC4gU2VlCltHaXRIdWIgaXNzdWUgNTg3ODFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNTg3ODEpIGZvciBtb3JlCmluZm9ybWF0aW9uLgoKIyMjIFdoeSBkbyBJIGdldCB0aGlzIG1lc3NhZ2Ugd2l0aCBjb2RlIHRoYXQgZG9lc24ndCBpbnZvbHZlIGJvcnJvd2luZz8KClRoZXJlIGFyZSBzb21lIGtub3duIGJ1Z3MgdGhhdCB0cmlnZ2VyIHRoaXMgbWVzc2FnZS4KABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wGkCQABAKQJzwYAx6EBJgAAmA0AAgcAmQ0BAAMA7QIOAACXDQIFAQRTb21lAQEAtAkAAZgNAAMA7QIOAAKXDQABAwDYAiQAAJYNAQEAtAkAAs4GANkCEgAAtAkFAQVFMDcyOQABHwUAAQAFAwDYAiQAAJYNAQEBuQkAAZcNANEGAPahASYAAJ0NAAAC0QYA9qEBJgAAtAkFAY4GQW4gYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aCB3YXMgcGF0dGVybi1tYXRjaGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMApmbiBpc18xMjM8Y29uc3QgTjogdXNpemU+KHg6IFt1MzI7IE5dKSAtPiBib29sIHsKICAgIG1hdGNoIHggewogICAgICAgIFsxLCAyLCAuLl0gPT4gdHJ1ZSwgLy8gZXJyb3I6IGNhbm5vdCBwYXR0ZXJuLW1hdGNoIG9uIGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aAogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgaGF2ZSB0d28gc29sdXRpb25zOgogMS4gVXNlIGFuIGFycmF5IHdpdGggYSBmaXhlZCBsZW5ndGguCiAyLiBVc2UgYSBzbGljZS4KCkV4YW1wbGUgd2l0aCBhbiBhcnJheSB3aXRoIGEgZml4ZWQgbGVuZ3RoOgoKYGBgCmZuIGlzXzEyMyh4OiBbdTMyOyAzXSkgLT4gYm9vbCB7IC8vIFdlIHVzZSBhbiBhcnJheSB3aXRoIGEgZml4ZWQgc2l6ZQogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBvayEKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KYGBgCgpFeGFtcGxlIHdpdGggYSBzbGljZToKCmBgYApmbiBpc18xMjMoeDogJlt1MzJdKSAtPiBib29sIHsgLy8gV2UgdXNlIGEgc2xpY2UKICAgIG1hdGNoIHggewogICAgICAgIFsxLCAyLCAuLl0gPT4gdHJ1ZSwgLy8gb2shCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/jgYAAQCOBtEGAPahASYAAJwNAAIHAJ0NAQADAO0CDgAAmw0CBQEEU29tZQEBALQJAAGcDQADAO0CDgACmw0AAQMA2AIkAACaDQEBALQJAALQBgDZAhIAALQJBQEFRTA3MzAAAR8FAAEABQMA2AIkAACaDQEBAbkJAAGbDQDTBgClogEmAAChDQAAAtMGAKWiASYAALQJBQGCBEFuIGVudW0gd2l0aCB0aGUgcmVwcmVzZW50YXRpb24gaGludCBgcmVwcih0cmFuc3BhcmVudClgIGhhZCB6ZXJvIG9yIG1vcmUgdGhhbgpvbmUgdmFyaWFudHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzMxCiNbcmVwcih0cmFuc3BhcmVudCldCmVudW0gU3RhdHVzIHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IGVudW0gbmVlZHMgZXhhY3RseSBvbmUgdmFyaWFudCwgYnV0IGhhcyAyCiAgICBFcnJubyh1MzIpLAogICAgT2ssCn0KYGBgCgpCZWNhdXNlIHRyYW5zcGFyZW50IGVudW1zIGFyZSByZXByZXNlbnRlZCBleGFjdGx5IGxpa2Ugb25lIG9mIHRoZWlyIHZhcmlhbnRzIGF0CnJ1biB0aW1lLCBzYWlkIHZhcmlhbnQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBpcyBubyB2YXJpYW50LCBvcgppZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmFyaWFudHMsIGl0IGlzIG5vdCBjbGVhciBob3cgdGhlIGVudW0gc2hvdWxkIGJlCnJlcHJlc2VudGVkLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BA4IEAAEAggTTBgClogEmAACgDQACBwChDQEAAwDtAg4AAJ8NAgUBBFNvbWUBAQC0CQABoA0AAwDtAg4AAp8NAAEDANgCJAAAng0BAQC0CQAC0gYA2QISAAC0CQUBBUUwNzMxAAEfBQABAAUDANgCJAAAng0BAQG5CQABnw0A1QYA1KIBJgAApQ0AAALVBgDUogEmAAC0CQUBzwdBbiBgZW51bWAgd2l0aCBhIGRpc2NyaW1pbmFudCBtdXN0IHNwZWNpZnkgYSBgI1tyZXByKGludHR5cGUpXWAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzMyCiMhW2ZlYXR1cmUoYXJiaXRyYXJ5X2VudW1fZGlzY3JpbWluYW50KV0KCmVudW0gRW51bSB7IC8vIGVycm9yIQogICAgVW5pdCA9IDEsCiAgICBUdXBsZSgpID0gMiwKICAgIFN0cnVjdHt9ID0gMywKfQojIGZuIG1haW4oKSB7fQpgYGAKCkEgYCNbcmVwcihpbnR0eXBlKV1gIG11c3QgYmUgcHJvdmlkZWQgb24gYW4gYGVudW1gIGlmIGl0IGhhcyBhIG5vbi11bml0CnZhcmlhbnQgd2l0aCBhIGRpc2NyaW1pbmFudCwgb3Igd2hlcmUgdGhlcmUgYXJlIGJvdGggdW5pdCB2YXJpYW50cyB3aXRoCmRpc2NyaW1pbmFudHMgYW5kIG5vbi11bml0IHZhcmlhbnRzLiBUaGlzIHJlc3RyaWN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZQppcyBhIHdlbGwtZGVmaW5lZCB3YXkgdG8gZXh0cmFjdCBhIHZhcmlhbnQncyBkaXNjcmltaW5hbnQgZnJvbSBhIHZhbHVlOwpmb3IgaW5zdGFuY2U6CgpgYGAKIyFbZmVhdHVyZShhcmJpdHJhcnlfZW51bV9kaXNjcmltaW5hbnQpXQoKI1tyZXByKHU4KV0KZW51bSBFbnVtIHsKICAgIFVuaXQgPSAzLAogICAgVHVwbGUodTE2KSA9IDIsCiAgICBTdHJ1Y3QgewogICAgICAgIGE6IHU4LAogICAgICAgIGI6IHUxNiwKICAgIH0gPSAxLAp9CgpmbiBkaXNjcmltaW5hbnQodiA6ICZFbnVtKSAtPiB1OCB7CiAgICB1bnNhZmUgeyAqKHYgYXMgKmNvbnN0IEVudW0gYXMgKmNvbnN0IHU4KSB9Cn0KCmZuIG1haW4oKSB7CiAgICBhc3NlcnRfZXEhKDMsIGRpc2NyaW1pbmFudCgmRW51bTo6VW5pdCkpOwogICAgYXNzZXJ0X2VxISgyLCBkaXNjcmltaW5hbnQoJkVudW06OlR1cGxlKDUpKSk7CiAgICBhc3NlcnRfZXEhKDEsIGRpc2NyaW1pbmFudCgmRW51bTo6U3RydWN0e2E6IDcsIGI6IDExfSkpOwp9CmBgYAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//Ac8HAAEAzwfVBgDUogEmAACkDQACBwClDQEAAwDtAg4AAKMNAgUBBFNvbWUBAQC0CQABpA0AAwDtAg4AAqMNAAEDANgCJAAAog0BAQC0CQAC1AYA2QISAAC0CQUBBUUwNzMyAAEfBQABAAUDANgCJAAAog0BAQG5CQABow0A1wYAg6MBJgAAqQ0AAALXBgCDowEmAAC0CQUB4QdBbiBbYGFzeW5jYF0gZnVuY3Rpb24gdXNlZCByZWN1cnNpb24gd2l0aG91dCBib3hpbmcuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzMzCmFzeW5jIGZuIGZvbyhuOiB1c2l6ZSkgewogICAgaWYgbiA+IDAgewogICAgICAgIGZvbyhuIC0gMSkuYXdhaXQ7CiAgICB9Cn0KYGBgCgpUbyBwZXJmb3JtIGFzeW5jIHJlY3Vyc2lvbiwgdGhlIGBhc3luYyBmbmAgbmVlZHMgdG8gYmUgZGVzdWdhcmVkIHN1Y2ggdGhhdCB0aGUKYEZ1dHVyZWAgaXMgZXhwbGljaXQgaW4gdGhlIHJldHVybiB0eXBlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzIwCnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwpmbiBmb29fZGVzdWdhcmVkKG46IHVzaXplKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSAoKT4gewogICAgYXN5bmMgbW92ZSB7CiAgICAgICAgaWYgbiA+IDAgewogICAgICAgICAgICBmb29fZGVzdWdhcmVkKG4gLSAxKS5hd2FpdDsKICAgICAgICB9CiAgICB9Cn0KYGBgCgpGaW5hbGx5LCB0aGUgZnV0dXJlIGlzIHdyYXBwZWQgaW4gYSBwaW5uZWQgYm94OgoKYGBgZWRpdGlvbjIwMTgKdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CnVzZSBzdGQ6OnBpbjo6UGluOwpmbiBmb29fcmVjdXJzaXZlKG46IHVzaXplKSAtPiBQaW48Qm94PGR5biBGdXR1cmU8T3V0cHV0ID0gKCk+Pj4gewogICAgQm94OjpwaW4oYXN5bmMgbW92ZSB7CiAgICAgICAgaWYgbiA+IDAgewogICAgICAgICAgICBmb29fcmVjdXJzaXZlKG4gLSAxKS5hd2FpdDsKICAgICAgICB9CiAgICB9KQp9CmBgYAoKVGhlIGBCb3g8Li4uPmAgZW5zdXJlcyB0aGF0IHRoZSByZXN1bHQgaXMgb2Yga25vd24gc2l6ZSwgYW5kIHRoZSBwaW4gaXMKcmVxdWlyZWQgdG8ga2VlcCBpdCBpbiB0aGUgc2FtZSBwbGFjZSBpbiBtZW1vcnkuCgpbYGFzeW5jYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXN5bmMuaHRtbAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8f4QcAAQDhB9cGAIOjASYAAKgNAAIHAKkNAQADAO0CDgAApw0CBQEEU29tZQEBALQJAAGoDQADAO0CDgACpw0AAQMA2AIkAACmDQEBALQJAALWBgDZAhIAALQJBQEFRTA3MzMAAR8FAAEABQMA2AIkAACmDQEBAbkJAAGnDQDZBgCyowEmAACtDQAAAtkGALKjASYAALQJBQGRA0Egc3RhYmlsaXR5IGF0dHJpYnV0ZSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM0CiNbcnVzdGNfZGVwcmVjYXRlZChzaW5jZSA9ICJiIiwgcmVhc29uID0gInRleHQiKV0gLy8gaW52YWxpZAojW3N0YWJsZShmZWF0dXJlID0gImEiLCBzaW5jZSA9ICJiIildIC8vIGludmFsaWQKI1t1bnN0YWJsZShmZWF0dXJlID0gImIiLCBpc3N1ZSA9ICJub25lIildIC8vIGludmFsaWQKZm4gZm9vKCl7fQpgYGAKClRoZXNlIGF0dHJpYnV0ZXMgYXJlIG1lYW50IHRvIG9ubHkgYmUgdXNlZCBieSB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgYXJlCnJlamVjdGVkIGluIHlvdXIgb3duIGNyYXRlcy4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//weRAwABAJED2QYAsqMBJgAArA0AAgcArQ0BAAMA7QIOAACrDQIFAQRTb21lAQEAtAkAAawNAAMA7QIOAAKrDQABAwDYAiQAAKoNAQEAtAkAAtgGANkCEgAAtAkFAQVFMDczNAABHwUAAQAFAwDYAiQAAKoNAQEBuQkAAasNANsGAOGjASYAALENAAAC2wYA4aMBJgAAtAkFAYcCVHlwZSBwYXJhbWV0ZXIgZGVmYXVsdHMgY2Fubm90IHVzZSBgU2VsZmAgb24gc3RydWN0cywgZW51bXMsIG9yIHVuaW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzUKc3RydWN0IEZvbzxYID0gQm94PFNlbGY+PiB7CiAgICBmaWVsZDE6IE9wdGlvbjxYPiwKICAgIGZpZWxkMjogT3B0aW9uPFg+LAp9Ci8vIGVycm9yOiB0eXBlIHBhcmFtZXRlcnMgY2Fubm90IHVzZSBgU2VsZmAgaW4gdGhlaXIgZGVmYXVsdHMuCmBgYAoABf///////////wH///////////8B////////////Af///////////wF/hwIAAQCHAtsGAOGjASYAALANAAIHALENAQADAO0CDgAArw0CBQEEU29tZQEBALQJAAGwDQADAO0CDgACrw0AAQMA2AIkAACuDQEBALQJAALaBgDZAhIAALQJBQEFRTA3MzUAAR8FAAEABQMA2AIkAACuDQEBAbkJAAGvDQDdBgCQpAEmAAC1DQAAAt0GAJCkASYAALQJBQGFA2AjW3RyYWNrX2NhbGxlcl1gIGFuZCBgI1tuYWtlZF1gIGNhbm5vdCBib3RoIGJlIGFwcGxpZWQgdG8gdGhlIHNhbWUgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM2CiNbbmFrZWRdCiNbdHJhY2tfY2FsbGVyXQpmbiBmb28oKSB7fQpgYGAKClRoaXMgaXMgcHJpbWFyaWx5IGR1ZSB0byBBQkkgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiB0aGUgdHdvIGF0dHJpYnV0ZXMuClNlZSBbUkZDIDIwOTFdIGZvciBkZXRhaWxzIG9uIHRoaXMgYW5kIG90aGVyIGxpbWl0YXRpb25zLgoKW1JGQyAyMDkxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMjA5MS1pbmxpbmUtc2VtYW50aWMubWQKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEfhQMAAQCFA90GAJCkASYAALQNAAIHALUNAQADAO0CDgAAsw0CBQEEU29tZQEBALQJAAG0DQADAO0CDgACsw0AAQMA2AIkAACyDQEBALQJAALcBgDZAhIAALQJBQEFRTA3MzYAAR8FAAEABQMA2AIkAACyDQEBAbkJAAGzDQDfBgC/pAEmAAC5DQAAAt8GAL+kASYAALQJBQHWAmAjW3RyYWNrX2NhbGxlcl1gIHJlcXVpcmVzIGZ1bmN0aW9ucyB0byBoYXZlIHRoZSBgIlJ1c3QiYCBBQkkgZm9yIGltcGxpY2l0bHkKcmVjZWl2aW5nIGNhbGxlciBsb2NhdGlvbi4gU2VlIFtSRkMgMjA5MV0gZm9yIGRldGFpbHMgb24gdGhpcyBhbmQgb3RoZXIKcmVzdHJpY3Rpb25zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNwojW3RyYWNrX2NhbGxlcl0KZXh0ZXJuICJDIiBmbiBmb28oKSB7fQpgYGAKCltSRkMgMjA5MV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzIwOTEtaW5saW5lLXNlbWFudGljLm1kCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8B1gIAAQDWAt8GAL+kASYAALgNAAIHALkNAQADAO0CDgAAtw0CBQEEU29tZQEBALQJAAG4DQADAO0CDgACtw0AAQMA2AIkAAC2DQEBALQJAALeBgDZAhIAALQJBQEFRTA3MzcAAR8FAAEABQMA2AIkAAC2DQEBAbkJAAG3DQDhBgDupAEmAAC9DQAAAuEGAO6kASYAALQJBQHmAWAjW3RyYWNrX2NhbGxlcl1gIGNhbiBub3QgYmUgYXBwbGllZCBvbiBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM5CiNbdHJhY2tfY2FsbGVyXQpzdHJ1Y3QgQmFyIHsKICAgIGE6IHU4LAp9CmBgYAoKW1JGQyAyMDkxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMjA5MS1pbmxpbmUtc2VtYW50aWMubWQKAAT///////////8B////////////Af///////////wH//////wfmAQABAOYB4QYA7qQBJgAAvA0AAgcAvQ0BAAMA7QIOAAC7DQIFAQRTb21lAQEAtAkAAbwNAAMA7QIOAAK7DQABAwDYAiQAALoNAQEAtAkAAuAGANkCEgAAtAkFAQVFMDczOQABHwUAAQAFAwDYAiQAALoNAQEBuQkAAbsNAOMGAJ2lASYAAMENAAAC4wYAnaUBJgAAtAkFAZwCQSBgdW5pb25gIHdhcyBkZWNsYXJlZCB3aXRoIGZpZWxkcyB3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azsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94EAAEA3gTnBgD7pQEmAADIDQACBwDJDQEAAwDtAg4AAMcNAgUBBFNvbWUBAQC0CQAByA0AAwDtAg4AAscNAAEDANgCJAAAxg0BAQC0CQAC5gYA2QISAAC0CQUBBUUwNzQyAAEfBQABAAUDANgCJAAAxg0BAQG5CQABxw0A6QYAqqYBJgAAzQ0AAALpBgCqpgEmAAC0CQUBjQRUaGUgQy12YXJpYWRpYyB0eXBlIGAuLi5gIGhhcyBiZWVuIG5lc3RlZCBpbnNpZGUgYW5vdGhlciB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0MwojIVtmZWF0dXJlKGNfdmFyaWFkaWMpXQoKZm4gZm9vMih4OiB1OCwgeTogJi4uLikge30gLy8gZXJyb3IhCmBgYAoKT25seSBmb3JlaWduIGZ1bmN0aW9ucyBjYW4gdXNlIHRoZSBDLXZhcmlhZGljIHR5cGUgKGAuLi5gKS4gSW4gc3VjaCBmdW5jdGlvbnMsCmAuLi5gIG1heSBvbmx5IG9jY3VyIG5vbi1uZXN0ZWQuIFRoYXQgaXMsIGB5OiAmJ2EgLi4uYCBpcyBub3QgYWxsb3dlZC4KCkEgQy12YXJpYWRpYyB0eXBlIGlzIHVzZWQgdG8gZ2l2ZSBhbiB1bmRlZmluZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdG8gYSBnaXZlbgpmdW5jdGlvbiAobGlrZSBgcHJpbnRmYCBpbiBDKS4gVGhlIGVxdWl2YWxlbnQgaW4gUnVzdCB3b3VsZCBiZSB0byB1c2UgbWFjcm9zCmRpcmVjdGx5IChsaWtlIGBwcmludGxuIWAgZm9yIGV4YW1wbGUpLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NBAAB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Ym94ZWQgdHJhaXQgb2JqZWN0cyBkbyBub3QgaGF2ZSBhIHN0YXRpY2FsbHkga25vd24gc2l6ZToKZm4gZm9vKCkgLT4gZHluIFQgeyAvLyBlcnJvciEKICAgIFMoNDIpCn0KYGBgCgpSZXR1cm4gdHlwZXMgY2Fubm90IGJlIGBkeW4gVHJhaXRgcyBhcyB0aGV5IG11c3QgYmUgYFNpemVkYC4KClRvIGF2b2lkIHRoZSBlcnJvciB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3B0aW9ucy4KCklmIHRoZXJlIGlzIGEgc2luZ2xlIHR5cGUgaW52b2x2ZWQsIHlvdSBjYW4gdXNlIFtgaW1wbCBUcmFpdGBdOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQovLyBUaGUgY29tcGlsZXIgd2lsbCBzZWxlY3QgYFModXNpemUpYCBhcyB0aGUgbWF0ZXJpYWxpemVkIHJldHVybiB0eXBlIG9mIHRoaXMKLy8gZnVuY3Rpb24sIGJ1dCBjYWxsZXJzIHdpbGwgb25seSBrbm93IHRoYXQgdGhlIHJldHVybiB0eXBlIGltcGxlbWVudHMgYFRgLgpmbiBmb28oKSAtPiBpbXBsIFQgeyAvLyBvayEKICAgIFMoNDIpCn0KYGBgCgpJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdHlwZXMgaW52b2x2ZWQsIHRoZSBvbmx5IHdheSB5b3UgY2FyZSB0byBpbnRlcmFjdCB3aXRoCnRoZW0gaXMgdGhyb3VnaCB0aGUgdHJhaXQncyBpbnRlcmZhY2UsIGFuZCBoYXZpbmcgdG8gcmVseSBvbiBkeW5hbWljIGRpc3BhdGNoCmlzIGFjY2VwdGFibGUsIHRoZW4geW91IGNhbiB1c2UgW3RyYWl0IG9iamVjdHNdIHdpdGggYEJveGAsIG9yIG90aGVyIGNvbnRhaW5lcgp0eXBlcyBsaWtlIGBSY2Agb3IgYEFyY2A6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CnN0cnVjdCBPKCYnc3RhdGljIHN0cik7CmltcGwgVCBmb3IgTyB7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCi8vIFRoaXMgbm93IHJldHVybnMgYSAidHJhaXQgb2JqZWN0IiBhbmQgY2FsbGVycyBhcmUgb25seSBiZSBhYmxlIHRvIGFjY2VzcwovLyBhc3NvY2lhdGVkIGl0ZW1zIGZyb20gYFRgLgpmbiBmb28oeDogYm9vbCkgLT4gQm94PGR5biBUPiB7IC8vIG9rIQogICAgaWYgeCB7CiAgICAgICAgQm94OjpuZXcoUyg0MikpCiAgICB9IGVsc2UgewogICAgICAgIEJveDo6bmV3KE8oInZhbCIpKQogICAgfQp9CmBgYAoKRmluYWxseSwgaWYgeW91IHdpc2ggdG8gc3RpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsIHR5cGUsIHlvdSBjYW4KY3JlYXRlIGEgbmV3IGBlbnVtYCB3aXRoIGEgdmFyaWFudCBmb3IgZWFjaCB0eXBlOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIHN0cnVjdCBPKCYnc3RhdGljIHN0cik7CiMgaW1wbCBUIGZvciBPIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0KZW51bSBFIHsKICAgIFMoUyksCiAgICBPKE8pLAp9CgovLyBUaGUgY2FsbGVyIGNhbiBhY2Nlc3MgdGhlIG9yaWdpbmFsIHR5cGVzIGRpcmVjdGx5LCBidXQgaXQgbmVlZHMgdG8gbWF0Y2ggb24KLy8gdGhlIHJldHVybmVkIGBlbnVtIEVgLgpmbiBmb28oeDogYm9vbCkgLT4gRSB7CiAgICBpZiB4IHsKICAgICAgICBFOjpTKFMoNDIpKQogICAgfSBlbHNlIHsKICAgICAgICBFOjpPKE8oInZhbCIpKQogICAgfQp9CmBgYAoKWW91IGNhbiBldmVuIGltcGxlbWVudCB0aGUgYHRyYWl0YCBvbiB0aGUgcmV0dXJuZWQgYGVudW1gIHNvIHRoZSBjYWxsZXJzCipkb24ndCogaGF2ZSB0byBtYXRjaCBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gaW52b2tlIHRoZSBhc3NvY2lhdGVkIGl0ZW1zOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIHN0cnVjdCBPKCYnc3RhdGljIHN0cik7CiMgaW1wbCBUIGZvciBPIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0KIyBlbnVtIEUgewojICAgICBTKFMpLAojICAgICBPKE8pLAojIH0KaW1wbCBUIGZvciBFIHsKICAgIGZuIGJhcigmc2VsZikgewogICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICBFOjpTKHMpID0+IHMuYmFyKCksCiAgICAgICAgICAgIEU6Ok8obykgPT4gby5iYXIoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpJZiB5b3UgZGVjaWRlIHRvIHVzZSB0cmFpdCBvYmplY3RzLCBiZSBhd2FyZSB0aGF0IHRoZXNlIHJlbHkgb24KW2R5bmFtaWMgZGlzcGF0Y2hdLCB3aGljaCBoYXMgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhcyB0aGUgY29tcGlsZXIgbmVlZHMKdG8gZW1pdCBjb2RlIHRoYXQgd2lsbCBmaWd1cmUgb3V0IHdoaWNoIG1ldGhvZCB0byBjYWxsICphdCBydW50aW1lKiBpbnN0ZWFkIG9mCmR1cmluZyBjb21waWxhdGlvbi4gVXNpbmcgdHJhaXQgb2JqZWN0cyB3ZSBhcmUgdHJhZGluZyBmbGV4aWJpbGl0eSBmb3IKcGVyZm9ybWFuY2UuCgpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwpbdHJhaXQgb2JqZWN0c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE3LTAyLXRyYWl0LW9iamVjdHMuaHRtbCN1c2luZy10cmFpdC1vYmplY3RzLXRoYXQtYWxsb3ctZm9yLXZhbHVlcy1vZi1kaWZmZXJlbnQtdHlwZXMKW2R5bmFtaWMgZGlzcGF0Y2hdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxNy0wMi10cmFpdC1vYmplY3RzLmh0bWwjdHJhaXQtb2JqZWN0cy1wZXJmb3JtLWR5bmFtaWMtZGlzcGF0Y2gKADP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8BiBkAAQCIGe8GALenASYAANgNAAIHANkNAQADAO0CDgAA1w0CBQEEU29tZQEBALQJAAHYDQADAO0CDgAC1w0AAQMA2AIkAADWDQEBALQJAALuBgDZAhIAALQJBQEFRTA3NDYAAR8FAAEABQMA2AIkAADWDQEBAbkJAAHXDQDxBgDmpwEmAADdDQAA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IGl0ZW1zLgoKT25lIHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIGl0ZW1zIGluIG5lZ2F0aXZlIGltcGxzOgoKYGBgCiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmltcGwgIU15VHJhaXQgZm9yIHUzMiB7fQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wE/xgQAAQDGBPUGAMSoASYAAOQNAAIHAOUNAQADAO0CDgAA4w0CBQEEU29tZQEBALQJAAHkDQADAO0CDgAC4w0AAQMA2AIkAADiDQEBALQJAAL0BgDZAhIAALQJBQEFRTA3NDkAAR8FAAEABQMA2AIkAADiDQEBAbkJAAHjDQD3BgDzqAEmAADpDQAAAvcGAPOoASYAALQJBQHUA0EgbmVnYXRpdmUgaW1wbCB3YXMgbWFkZSBkZWZhdWx0IGltcGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUwCiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCiMgIyFbZmVhdHVyZShzcGVjaWFsaXphdGlvbildCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmRlZmF1bHQgaW1wbCAhTXlUcmFpdCBmb3IgdTMyIHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKCk5lZ2F0aXZlIGltcGxzIGNhbm5vdCBiZSBkZWZhdWx0IGltcGxzLiBBIGRlZmF1bHQgaW1wbCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcwpmb3IgdGhlIGl0ZW1zIHdpdGhpbiB0byBiZSB1c2VkIGJ5IG90aGVyIGltcGxzLCB3aGVyZWFzIGEgbmVnYXRpdmUgaW1wbCBkZWNsYXJlcwp0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBpbXBscy4gQ29tYmluaW5nIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UuCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//P9QDAAEA1AP3BgDzqAEmAADoDQACBwDpDQEAAwDtAg4AAOcNAgUBBFNvbWUBAQC0CQAB6A0AAwDtAg4AAucNAAEDANgCJAAA5g0BAQC0CQAC9gYA2QISAAC0CQUBBUUwNzUwAAEfBQABAAUDANgCJAAA5g0BAQG5CQAB5w0A+QYAoqkBJgAA7Q0AAAL5BgCiqQEmAAC0CQUB5wJUaGVyZSBhcmUgYm90aCBhIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB0cmFpdCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHNhbWUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTEKdHJhaXQgTXlUcmFpdCB7fQppbXBsIE15VHJhaXQgZm9yIGkzMiB7IH0KaW1wbCAhTXlUcmFpdCBmb3IgaTMyIHsgfSAvLyBlcnJvciEKYGBgCgpOZWdhdGl2ZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGEgcHJvbWlzZSB0aGF0IHRoZSB0cmFpdCB3aWxsIG5ldmVyIGJlIGltcGxlbWVudGVkCmZvciB0aGUgZ2l2ZW4gdHlwZXMuIFRoZXJlZm9yZSwgYm90aCBjYW5ub3QgZXhpc3RzIGF0IHRoZSBzYW1lIHRpbWUuCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////w/nAgABAOcC+QYAoqkBJgAA7A0AAgcA7Q0BAAMA7QIOAADrDQIFAQRTb21lAQEAtAkAAewNAAMA7QIOAALrDQABAwDYAiQAAOoNAQEAtAkAAvgGANkCEgAAtAkFAQVFMDc1MQABHwUAAQAFAwDYAiQAAOoNAQEBuQkAAesNAPsGANGpASYAAPENAAAC+wYA0akBJgAAtAkFAaYDVGhlIGVudHJ5IHBvaW50IG9mIHRoZSBwcm9ncmFtIHdhcyBtYXJrZWQgYXMgYGFzeW5jYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTIKYXN5bmMgZm4gbWFpbigpIC0+IFJlc3VsdDwoKSwgKCk+IHsgLy8gZXJyb3IhCiAgICBPaygoKSkKfQpgYGAKCmBmbiBtYWluKClgIG9yIHRoZSBzcGVjaWZpZWQgc3RhcnQgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gYmUgYGFzeW5jYC4gTm90CmhhdmluZyBhIGNvcnJlY3QgYXN5bmMgcnVudGltZSBsaWJyYXJ5IHNldHVwIG1heSBjYXVzZSB0aGlzIGVycm9yLiBUbyBmaXggaXQsCmRlY2xhcmUgdGhlIGVudHJ5IHBvaW50IHdpdGhvdXQgYGFzeW5jYDoKCmBgYApmbiBtYWluKCkgLT4gUmVzdWx0PCgpLCAoKT4geyAvLyBvayEKICAgIE9rKCgpKQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B6YDAAEApgP7BgDRqQEmAADwDQACBwDxDQEAAwDtAg4AAO8NAgUBBFNvbWUBAQC0CQAB8A0AAwDtAg4AAu8NAAEDANgCJAAA7g0BAQC0CQAC+gYA2QISAAC0CQUBBUUwNzUyAAEfBQABAAUDANgCJAAA7g0BAQG5CQAB7w0A/QYAgKoBJgAA9Q0AAAL9BgCAqgEmAAC0CQUBmARBbiBpbm5lciBkb2MgY29tbWVudCB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUzCmZuIGZvbygpIHt9Ci8vISBmb28KLy8gXiBlcnJvciEKZm4gbWFpbigpIHt9CmBgYAoKSW5uZXIgZG9jdW1lbnQgY2FuIG9ubHkgYmUgdXNlZCBiZWZvcmUgaXRlbXMuIEZvciBleGFtcGxlOgoKYGBgCi8vISBBIHdvcmtpbmcgY29tbWVudCBhcHBsaWVkIHRvIHRoZSBtb2R1bGUhCmZuIGZvbygpIHsKICAgIC8vISBBbm90aGVyIHdvcmtpbmcgY29tbWVudCEKfQpmbiBtYWluKCkge30KYGBgCgpJbiBjYXNlIHlvdSB3YW50IHRvIGRvY3VtZW50IHRoZSBpdGVtIGZvbGxvd2luZyB0aGUgZG9jIGNvbW1lbnQsIHlvdSBtaWdodCB3YW50CnRvIHVzZSBvdXRlciBkb2MgY29tbWVudDoKCmBgYAovLy8gSSBhbSBhbiBvdXRlciBkb2MgY29tbWVudAojW2RvYyA9ICJJIGFtIGFsc28gYW4gb3V0ZXIgZG9jIGNvbW1lbnQhIl0KZm4gZm9vKCkgewogICAgLy8gLi4uCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8HmAQAAQCYBP0GAICqASYAAPQNAAIHAPUNAQADAO0CDgAA8w0CBQEEU29tZQEBALQJAAH0DQADAO0CDgAC8w0AAQMA2AIkAADyDQEBALQJAAL8BgDZAhIAALQJBQEFRTA3NTMAAR8FAAEABQMA2AIkAADyDQEBAbkJAAHzDQD/BgCvqgEmAAD5DQAAAv8GAK+qASYAALQJBQH7AkEgbm9uLUFTQ0lJIGlkZW50aWZpZXIgd2FzIHVzZWQgaW4gYW4gaW52YWxpZCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTQKCm1vZCDFmcWzxZvFpTsgLy8gZXJyb3IhCgojW25vX21hbmdsZV0KZm4gxZnFs8WbxaUoKSB7fSAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKCk5vbi1BU0NJSSBjYW4gYmUgdXNlZCBhcyBtb2R1bGUgbmFtZXMgaWYgaXQgaXMgaW5saW5lZCBvciBpZiBhIGAjW3BhdGhdYAphdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLiBGb3IgZXhhbXBsZToKCmBgYAptb2QgxZnFs8WbxaUgeyAvLyBvayEKICAgIGNvbnN0IElTX0dSRUFUOiBib29sID0gdHJ1ZTsKfQoKZm4gbWFpbigpIHt9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wIAAQD7Av8GAK+qASYAAPgNAAIHAPkNAQADAO0CDgAA9w0CBQEEU29tZQEBALQJAAH4DQADAO0CDgAC9w0AAQMA2AIkAAD2DQEBALQJAAL+BgDZAhIAALQJBQEFRTA3NTQAAR8FAAEABQMA2AIkAAD2DQEBAbkJAAH3DQCBBwDeqgEmAAD9DQAAAoEHAN6qASYAALQJBQHSBFRoZSBgZmZpX3B1cmVgIGF0dHJpYnV0ZSB3YXMgdXNlZCBvbiBhIG5vbi1mb3JlaWduIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NQojIVtmZWF0dXJlKGZmaV9wdXJlKV0KCiNbZmZpX3B1cmVdIC8vIGVycm9yIQpwdWIgZm4gZm9vKCkge30KIyBmbiBtYWluKCkge30KYGBgCgpUaGUgYGZmaV9wdXJlYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgdXNlZCBvbiBmb3JlaWduIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QgaGF2ZQpzaWRlIGVmZmVjdHMgb3IgaW5maW5pdGUgbG9vcHM6CgpgYGAKIyFbZmVhdHVyZShmZmlfcHVyZSldCgpleHRlcm4gIkMiIHsKICAgICNbZmZpX3B1cmVdIC8vIG9rIQogICAgcHViIGZuIHN0cmxlbihzOiAqY29uc3QgaTgpIC0+IGlzaXplOwp9CiMgZm4gbWFpbigpIHt9CmBgYAoKWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaXQgaW4gdGhlIFt1bnN0YWJsZSBSdXN0IEJvb2tdLgoKW3Vuc3RhYmxlIFJ1c3QgQm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9mZmktcHVyZS5odG1sCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8P0gQAAQDSBIEHAN6qASYAAPwNAAIHAP0NAQADAO0CDgAA+w0CBQEEU29tZQEBALQJAAH8DQADAO0CDgAC+w0AAQMA2AIkAAD6DQEBALQJAAKABwDZAhIAALQJBQEFRTA3NTUAAR8FAAEABQMA2AIkAAD6DQEBAbkJAAH7DQCDBwCNqwEmAACBDgAAAoMHAI2rASYAALQJBQGPBVRoZSBgZmZpX2NvbnN0YCBhdHRyaWJ1dGUgd2FzIHVzZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYSBmb3JlaWduIGZ1bmN0aW9uCmRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NgojIVtmZWF0dXJlKGZmaV9jb25zdCldCgojW2ZmaV9jb25zdF0gLy8gZXJyb3IhCnB1YiBmbiBmb28oKSB7fQojIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgZmZpX2NvbnN0YCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgdXNlZCBvbiBmb3JlaWduIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwp3aGljaCBoYXZlIG5vIHNpZGUgZWZmZWN0cyBleGNlcHQgZm9yIHRoZWlyIHJldHVybiB2YWx1ZToKCmBgYAojIVtmZWF0dXJlKGZmaV9jb25zdCldCgpleHRlcm4gIkMiIHsKICAgICNbZmZpX2NvbnN0XSAvLyBvayEKICAgIHB1YiBmbiBzdHJsZW4oczogKmNvbnN0IGk4KSAtPiBpMzI7Cn0KIyBmbiBtYWluKCkge30KYGBgCgpZb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGl0IGluIHRoZSBbdW5zdGFibGUgUnVzdCBCb29rXS4KClt1bnN0YWJsZSBSdXN0IEJvb2tdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25pZ2h0bHkvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9mZmktY29uc3QuaHRtbAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPBQABAI8FgwcAjasBJgAAgA4AAgcAgQ4BAAMA7QIOAAD/DQIFAQRTb21lAQEAtAkAAYAOAAMA7QIOAAL/DQABAwDYAiQAAP4NAQEAtAkAAoIHANkCEgAAtAkFAQVFMDc1NgABHwUAAQAFAwDYAiQAAP4NAQEBuQkAAf8NAIUHALyrASYAAIUOAAAChQcAvKsBJgAAtAkFAeUHQSBmdW5jdGlvbiB3YXMgZ2l2ZW4gYm90aCB0aGUgYGZmaV9jb25zdGAgYW5kIGBmZmlfcHVyZWAgYXR0cmlidXRlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTcKIyFbZmVhdHVyZShmZmlfY29uc3QsIGZmaV9wdXJlKV0KCmV4dGVybiAiQyIgewogICAgI1tmZmlfY29uc3RdCiAgICAjW2ZmaV9wdXJlXSAvLyBlcnJvcjogYCNbZmZpX2NvbnN0XWAgZnVuY3Rpb24gY2Fubm90IGJlIGAjW2ZmaV9wdXJlXWAKICAgIHB1YiBmbiBzcXVhcmUobnVtOiBpMzIpIC0+IGkzMjsKfQpgYGAKCkFzIGBmZmlfY29uc3RgIHByb3ZpZGVzIHN0cm9uZ2VyIGd1YXJhbnRlZXMgdGhhbiBgZmZpX3B1cmVgLCByZW1vdmUgdGhlCmBmZmlfcHVyZWAgYXR0cmlidXRlOgoKYGBgCiMhW2ZlYXR1cmUoZmZpX2NvbnN0KV0KCmV4dGVybiAiQyIgewogICAgI1tmZmlfY29uc3RdCiAgICBwdWIgZm4gc3F1YXJlKG51bTogaTMyKSAtPiBpMzI7Cn0KYGBgCgpZb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGBjb25zdGAgYW5kIGBwdXJlYCBpbiB0aGUgW0dDQyBkb2N1bWVudGF0aW9uCm9uIENvbW1vbiBGdW5jdGlvbiBBdHRyaWJ1dGVzXS4gVGhlIHVuc3RhYmxlIFJ1c3QgQm9vayBoYXMgbW9yZSBpbmZvcm1hdGlvbgphYm91dCBbYGZmaV9jb25zdGBdIGFuZCBbYGZmaV9wdXJlYF0uCgpbR0NDIGRvY3VtZW50YXRpb24gb24gQ29tbW9uIEZ1bmN0aW9uIEF0dHJpYnV0ZXNdOiBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL0NvbW1vbi1GdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwKW2BmZmlfY29uc3RgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvZmZpLWNvbnN0Lmh0bWwKW2BmZmlfcHVyZWBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25pZ2h0bHkvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9mZmktcHVyZS5odG1sCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8D5QcAAQDlB4UHALyrASYAAIQOAAIHAIUOAQADAO0CDgAAgw4CBQEEU29tZQEBALQJAAGEDgADAO0CDgACgw4AAQMA2AIkAACCDgEBALQJAAKEBwDZAhIAALQJBQEFRTA3NTcAAR8FAAEABQMA2AIkAACCDgEBAbkJAAGDDgCHBwDrqwEmAACJDgAAAocHAOurASYAALQJBQHZAkEgbXVsdGktbGluZSAoZG9jLSljb21tZW50IGlzIHVudGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyogSSBhbSBub3QgdGVybWluYXRlZCEKYGBgCgpUaGUgc2FtZSBnb2VzIGZvciBkb2MgY29tbWVudHM6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyohIEkgYW0gbm90IHRlcm1pbmF0ZWQhCmBgYAoKWW91IG5lZWQgdG8gZW5kIHlvdXIgbXVsdGktbGluZSBjb21tZW50IHdpdGggYCovYCBpbiBvcmRlciB0byBmaXggdGhpcyBlcnJvcjoKCmBgYAovKiBJIGFtIHRlcm1pbmF0ZWQhICovCi8qISBJIGFtIGFsc28gdGVybWluYXRlZCEgKi8KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8P2QIAAQDZAocHAOurASYAAIgOAAIHAIkOAQADAO0CDgAAhw4CBQEEU29tZQEBALQJAAGIDgADAO0CDgAChw4AAQMA2AIkAACGDgEBALQJAAKGBwDZAhIAALQJBQEFRTA3NTgAAR8FAAEABQMA2AIkAACGDgEBAbkJAAGHDgCJBwCarAEmAACNDgAAAokHAJqsASYAALQJBQHLC1JldHVybiB0eXBlIGludm9sdmluZyBhIHRyYWl0IGRpZCBub3QgcmVxdWlyZSBgJ3N0YXRpY2AgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDc1OQp1c2Ugc3RkOjpmbXQ6OkRlYnVnOwoKZm4gZm9vKHg6ICZpMzIpIC0+IGltcGwgRGVidWcgeyAvLyBlcnJvciEKICAgIHgKfQoKZm4gYmFyKHg6ICZpMzIpIC0+IEJveDxkeW4gRGVidWc+IHsgLy8gZXJyb3IhCiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKQWRkIGAnc3RhdGljYCByZXF1aXJlbWVudCB0byBmaXggdGhlbToKCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmJ3N0YXRpYyBpMzIpIC0+IGltcGwgRGVidWcgKyAnc3RhdGljIHsgLy8gb2shCiAgICB4Cn0KCmZuIGJhcih4OiAmJ3N0YXRpYyBpMzIpIC0+IEJveDxkeW4gRGVidWcgKyAnc3RhdGljPiB7IC8vIG9rIQogICAgQm94OjpuZXcoeCkKfQpgYGAKCkJvdGggW2BkeW4gVHJhaXRgXSBhbmQgW2BpbXBsIFRyYWl0YF0gaW4gcmV0dXJuIHR5cGVzIGhhdmUgYW4gaW1wbGljaXQKYCdzdGF0aWNgIHJlcXVpcmVtZW50LCBtZWFuaW5nIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudGluZyB0aGVtIHRoYXQgaXMgYmVpbmcKcmV0dXJuZWQgaGFzIHRvIGJlIGVpdGhlciBhIGAnc3RhdGljYCBib3Jyb3cgb3IgYW4gb3duZWQgdmFsdWUuCgpJbiBvcmRlciB0byBjaGFuZ2UgdGhlIHJlcXVpcmVtZW50IGZyb20gYCdzdGF0aWNgIHRvIGJlIGEgbGlmZXRpbWUgZGVyaXZlZCBmcm9tCml0cyBhcmd1bWVudHMsIHlvdSBjYW4gYWRkIGFuIGV4cGxpY2l0IGJvdW5kLCBlaXRoZXIgdG8gYW4gYW5vbnltb3VzIGxpZmV0aW1lCmAnX2Agb3Igc29tZSBhcHByb3ByaWF0ZSBuYW1lZCBsaWZldGltZS4KCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmaTMyKSAtPiBpbXBsIERlYnVnICsgJ18gewogICAgeAp9CmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ18+IHsKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGV4cGxpY2l0IGxpZmV0aW1lIGFubm90YXRpb25zOgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vPCdhPih4OiAmJ2EgaTMyKSAtPiBpbXBsIERlYnVnICsgJ2EgewogICAgeAp9CmZuIGJhcjwnYT4oeDogJidhIGkzMikgLT4gQm94PGR5biBEZWJ1ZyArICdhPiB7CiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKW2BkeW4gVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/w/LCwABAMsLiQcAmqwBJgAAjA4AAgcAjQ4BAAMA7QIOAACLDgIFAQRTb21lAQEAtAkAAYwOAAMA7QIOAAKLDgABAwDYAiQAAIoOAQEAtAkAAogHANkCEgAAtAkFAQVFMDc1OQABHwUAAQAFAwDYAiQAAIoOAQEBuQkAAYsOAIsHAMmsASYAAJEOAAACiwcAyawBJgAAtAkFAaAFYGFzeW5jIGZuYC9gaW1wbCB0cmFpdGAgcmV0dXJuIHR5cGUgY2Fubm90IGNvbnRhaW4gYSBwcm9qZWN0aW9uCm9yIGBTZWxmYCB0aGF0IHJlZmVyZW5jZXMgbGlmZXRpbWVzIGZyb20gYSBwYXJlbnQgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzYwLGVkaXRpb24yMDE4CnN0cnVjdCBTPCdhPigmJ2EgaTMyKTsKCmltcGw8J2E+IFM8J2E+IHsKICAgIGFzeW5jIGZuIG5ldyhpOiAmJ2EgaTMyKSAtPiBTZWxmIHsKICAgICAgICBTKCYyMikKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yIHdlIG5lZWQgdG8gc3BlbGwgb3V0IGBTZWxmYCB0byBgUzwnYT5gOgoKYGBgZWRpdGlvbjIwMTgKc3RydWN0IFM8J2E+KCYnYSBpMzIpOwoKaW1wbDwnYT4gUzwnYT4gewogICAgYXN5bmMgZm4gbmV3KGk6ICYnYSBpMzIpIC0+IFM8J2E+IHsKICAgICAgICBTKCYyMikKICAgIH0KfQpgYGAKClRoaXMgd2lsbCBiZSBhbGxvd2VkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwKYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgeWV0IGNvbXBsZXRlLgpTZWUgdGhlIFtpc3N1ZS02MTk0OV0gZm9yIHRoaXMgbGltaXRhdGlvbi4KCltpc3N1ZS02MTk0OV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNjE5NDkKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w+gBQABAKAFiwcAyawBJgAAkA4AAgcAkQ4BAAMA7QIOAACPDgIFAQRTb21lAQEAtAkAAZAOAAMA7QIOAAKPDgABAwDYAiQAAI4OAQEAtAkAAooHANkCEgAAtAkFAQVFMDc2MAABHwUAAQAFAwDYAiQAAI4OAQEBuQkAAY8OAI0HAPisASYAAJUOAAACjQcA+KwBJgAAtAkFAY4ETXVsdGlwbGUgY2FuZGlkYXRlIGZpbGVzIHdlcmUgZm91bmQgZm9yIGFuIG91dC1vZi1saW5lIG1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKE11bHRpcGxlIHNvdXJjZSBmaWxlcyBhcmUgcmVxdWlyZWQgZm9yIGNvbXBpbGVfZmFpbC4pCi8vIGZpbGU6IGFtYmlndW91c19tb2R1bGUvbW9kLnJzCgpmbiBmb28oKSB7fQoKLy8gZmlsZTogYW1iaWd1b3VzX21vZHVsZS5ycwoKZm4gZm9vKCkge30KCi8vIGZpbGU6IGxpYi5ycwoKbW9kIGFtYmlndW91c19tb2R1bGU7IC8vIGVycm9yOiBmaWxlIGZvciBtb2R1bGUgYGFtYmlndW91c19tb2R1bGVgCiAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhdCBib3RoIGFtYmlndW91c19tb2R1bGUucnMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAvLyBhbWJpZ3VvdXNfbW9kdWxlLnJzL21vZC5ycwpgYGAKClBsZWFzZSByZW1vdmUgdGhpcyBhbWJpZ3VpdHkgYnkgZGVsZXRpbmcvcmVuYW1pbmcgb25lIG9mIHRoZSBjYW5kaWRhdGUgZmlsZXMuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44EAAEAjgSNBwD4rAEmAACUDgACBwCVDgEAAwDtAg4AAJMOAgUBBFNvbWUBAQC0CQABlA4AAwDtAg4AApMOAAEDANgCJAAAkg4BAQC0CQACjAcA2QISAAC0CQUBBUUwNzYxAAEfBQABAAUDANgCJAAAkg4BAQG5CQABkw4AjwcAp60BJgAAmQ4AAAKPBwCnrQEmAAC0CQUB1wFBIGNoYXJhY3RlciBsaXRlcmFsIHdhc24ndCBlbmRlZCB3aXRoIGEgcXVvdGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzYyCnN0YXRpYyBDOiBjaGFyID0gJ+KXjzsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBxdW90ZToKCmBgYApzdGF0aWMgQzogY2hhciA9ICfil48nOyAvLyBvayEKYGBgCgAE////////////Af///////////wH///////////8B////A9cBAAEA1wGPBwCnrQEmAACYDgACBwCZDgEAAwDtAg4AAJcOAgUBBFNvbWUBAQC0CQABmA4AAwDtAg4AApcOAAEDANgCJAAAlg4BAQC0CQACjgcA2QISAAC0CQUBBUUwNzYyAAEfBQABAAUDANgCJAAAlg4BAQG5CQABlw4AkQcA1q0BJgAAnQ4AAAKRBwDWrQEmAAC0CQUBvAFBIGJ5dGUgY29uc3RhbnQgd2Fzbid0IGNvcnJlY3RseSBlbmRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjMKbGV0IGMgPSBiJ2E7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgcXVvdGU6CgpgYGAKbGV0IGMgPSBiJ2EnOyAvLyBvayEKYGBgCgAD////////////Af///////////wH//////////w+8AQABALwBkQcA1q0BJgAAnA4AAgcAnQ4BAAMA7QIOAACbDgIFAQRTb21lAQEAtAkAAZwOAAMA7QIOAAKbDgABAwDYAiQAAJoOAQEAtAkAApAHANkCEgAAtAkFAQVFMDc2MwABHwUAAQAFAwDYAiQAAJoOAQEBuQkAAZsOAJMHAIWuASYAAKEOAAACkwcAha4BJgAAtAkFAYoJQSBtdXRhYmxlIHJlZmVyZW5jZSB3YXMgdXNlZCBpbiBhIGNvbnN0YW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NAojIVtmZWF0dXJlKGNvbnN0X211dF9yZWZzKV0KCmZuIG1haW4oKSB7CiAgICBjb25zdCBPSF9OTzogJidzdGF0aWMgbXV0IHVzaXplID0gJm11dCAxOyAvLyBlcnJvciEKfQpgYGAKCk11dGFibGUgcmVmZXJlbmNlcyAoYCZtdXRgKSBjYW4gb25seSBiZSB1c2VkIGluIGNvbnN0YW50IGZ1bmN0aW9ucywgbm90IHN0YXRpY3MKb3IgY29uc3RhbnRzLiBUaGlzIGxpbWl0YXRpb24gZXhpc3RzIHRvIHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIGNvbnN0YW50cyB0aGF0CmhhdmUgYSBtdXRhYmxlIHJlZmVyZW5jZSBpbiB0aGVpciBmaW5hbCB2YWx1ZS4gSWYgeW91IGhhZCBhIGNvbnN0YW50IG9mCmAmbXV0IGkzMmAgdHlwZSwgeW91IGNvdWxkIG1vZGlmeSB0aGUgdmFsdWUgdGhyb3VnaCB0aGF0IHJlZmVyZW5jZSwgbWFraW5nIHRoZQpjb25zdGFudCBlc3NlbnRpYWxseSBtdXRhYmxlLgoKV2hpbGUgdGhlcmUgY291bGQgYmUgYSBtb3JlIGZpbmUtZ3JhaW5lZCBzY2hlbWUgaW4gdGhlIGZ1dHVyZSB0aGF0IGFsbG93cwptdXRhYmxlIHJlZmVyZW5jZXMgaWYgdGhleSBhcmUgbm90ICJsZWFrZWQiIHRvIHRoZSBmaW5hbCB2YWx1ZSwgYSBtb3JlCmNvbnNlcnZhdGl2ZSBhcHByb2FjaCB3YXMgY2hvc2VuIGZvciBub3cuIGBjb25zdCBmbmAgZG8gbm90IGhhdmUgdGhpcyBwcm9ibGVtLAphcyB0aGUgYm9ycm93IGNoZWNrZXIgd2lsbCBwcmV2ZW50IHRoZSBgY29uc3QgZm5gIGZyb20gcmV0dXJuaW5nIG5ldyBtdXRhYmxlCnJlZmVyZW5jZXMuCgpSZW1lbWJlcjogeW91IGNhbm5vdCB1c2UgYSBmdW5jdGlvbiBjYWxsIGluc2lkZSBhIGNvbnN0YW50IG9yIHN0YXRpYy4gSG93ZXZlciwKeW91IGNhbiB0b3RhbGx5IHVzZSBpdCBpbiBjb25zdGFudCBmdW5jdGlvbnM6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9tdXRfcmVmcyldCgpjb25zdCBmbiBmb28oeDogdXNpemUpIC0+IHVzaXplIHsKICAgIGxldCBtdXQgeSA9IDE7CiAgICBsZXQgeiA9ICZtdXQgeTsKICAgICp6ICs9IHg7CiAgICB5Cn0KCmZuIG1haW4oKSB7CiAgICBjb25zdCBGT086IHVzaXplID0gZm9vKDEwKTsgLy8gb2shCn0KYGBgCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/weKCQABAIoJkwcAha4BJgAAoA4AAgcAoQ4BAAMA7QIOAACfDgIFAQRTb21lAQEAtAkAAaAOAAMA7QIOAAKfDgABAwDYAiQAAJ4OAQEAtAkAApIHANkCEgAAtAkFAQVFMDc2NAABHwUAAQAFAwDYAiQAAJ4OAQEBuQkAAZ8OAJUHALSuASYAAKUOAAAClQcAtK4BJgAAtAkFAeABQSBkb3VibGUgcXVvdGUgc3RyaW5nIChgImApIHdhcyBub3QgdGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjUKbGV0IHMgPSAiOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIGRvdWJsZSBxdW90ZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CgpgYGAKbGV0IHMgPSAiIjsgLy8gb2shCmBgYAoABP///////////wH///////////8B////////////Af////8P4AEAAQDgAZUHALSuASYAAKQOAAIHAKUOAQADAO0CDgAAow4CBQEEU29tZQEBALQJAAGkDgADAO0CDgACow4AAQMA2AIkAACiDgEBALQJAAKUBwDZAhIAALQJBQEFRTA3NjUAAR8FAAEABQMA2AIkAACiDgEBAbkJAAGjDgCXBwDjrgEmAACpDgAAApcHAOOuASYAALQJBQHoAUEgZG91YmxlIHF1b3RlIGJ5dGUgc3RyaW5nIChgYiJgKSB3YXMgbm90IHRlcm1pbmF0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY2CmxldCBzID0gYiI7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgZG91YmxlIHF1b3RlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZzoKCmBgYApsZXQgcyA9IGIiIjsgLy8gb2shCmBgYAoABP///////////wH///////////8B////////////Af//////H+gBAAEA6AGXBwDjrgEmAACoDgACBwCpDgEAAwDtAg4AAKcOAgUBBFNvbWUBAQC0CQABqA4AAwDtAg4AAqcOAAEDANgCJAAApg4BAQC0CQAClgcA2QISAAC0CQUBBUUwNzY2AAEfBQABAAUDANgCJAAApg4BAQG5CQABpw4AmQcAkq8BJgAArQ4AAAKZBwCSrwEmAAC0CQUB3QJBbiB1bnJlYWNoYWJsZSBsYWJlbCB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjcKJ2E6IGxvb3AgewogICAgfHwgewogICAgICAgIGxvb3AgeyBicmVhayAnYSB9IC8vIGVycm9yOiB1c2Ugb2YgdW5yZWFjaGFibGUgbGFiZWwgYCdhYAogICAgfTsKfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBsYWJlbCBpcyB3aXRoaW4gc2NvcGUuIExhYmVscyBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoCmZ1bmN0aW9ucywgY2xvc3VyZXMsIGFzeW5jIGJsb2NrcyBvciBtb2R1bGVzLiBFeGFtcGxlOgoKYGBgCidhOiBsb29wIHsKICAgIGJyZWFrICdhOyAvLyBvayEKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af////8B3QIAAQDdApkHAJKvASYAAKwOAAIHAK0OAQADAO0CDgAAqw4CBQEEU29tZQEBALQJAAGsDgADAO0CDgACqw4AAQMA2AIkAACqDgEBALQJAAKYBwDZAhIAALQJBQEFRTA3NjcAAR8FAAEABQMA2AIkAACqDgEBAbkJAAGrDgCbBwDBrwEmAACxDgAAApsHAMGvASYAALQJBQHLAUEgbnVtYmVyIGluIGEgbm9uLWRlY2ltYWwgYmFzZSBoYXMgbm8gZGlnaXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2OApsZXQgczogaTMyID0gMGI7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgZGlnaXRzOgoKYGBgCmxldCBzOiBpMzIgPSAwYjE7IC8vIG9rIQpgYGAKAAT///////////8B////////////Af///////////wH/D8sBAAEAywGbBwDBrwEmAACwDgACBwCxDgEAAwDtAg4AAK8OAgUBBFNvbWUBAQC0CQABsA4AAwDtAg4AAq8OAAEDANgCJAAArg4BAQC0CQACmgcA2QISAAC0CQUBBUUwNzY4AAEfBQABAAUDANgCJAAArg4BAQG5CQABrw4AnQcA8K8BJgAAtQ4AAAKdBwDwrwEmAAC0CQUB2QVBIHR1cGxlIHN0cnVjdCBvciB0dXBsZSB2YXJpYW50IHdhcyB1c2VkIGluIGEgcGF0dGVybiBhcyBpZiBpdCB3ZXJlIGEgc3RydWN0IG9yCnN0cnVjdCB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2OQplbnVtIEUgewogICAgQShpMzIpLAp9CgpsZXQgZSA9IEU6OkEoNDIpOwoKbWF0Y2ggZSB7CiAgICBFOjpBIHsgbnVtYmVyIH0gPT4geyAvLyBlcnJvciEKICAgICAgICBwcmludGxuISgie30iLCBudW1iZXIpOwogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBjYW4gdXNlIHRoZSB0dXBsZSBwYXR0ZXJuOgoKYGBgCiMgZW51bSBFIHsKIyAgICAgQShpMzIpLAojIH0KIyBsZXQgZSA9IEU6OkEoNDIpOwptYXRjaCBlIHsKICAgIEU6OkEobnVtYmVyKSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIG51bWJlcik7CiAgICB9Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gdXNlIHRoZSBzdHJ1Y3QgcGF0dGVybiBieSB1c2luZyB0aGUgY29ycmVjdCBmaWVsZApuYW1lcyBhbmQgYmluZGluZyB0aGVtIHRvIG5ldyBpZGVudGlmaWVyczoKCmBgYAojIGVudW0gRSB7CiMgICAgIEEoaTMyKSwKIyB9CiMgbGV0IGUgPSBFOjpBKDQyKTsKbWF0Y2ggZSB7CiAgICBFOjpBIHsgMDogbnVtYmVyIH0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgie30iLCBudW1iZXIpOwogICAgfQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kFAAEA2QWdBwDwrwEmAAC0DgACBwC1DgEAAwDtAg4AALMOAgUBBFNvbWUBAQC0CQABtA4AAwDtAg4AArMOAAEDANgCJAAAsg4BAQC0CQACnAcA2QISAAC0CQUBBUUwNzY5AAEfBQABAAUDANgCJAAAsg4BAQG5CQABsw4AnwcAn7ABJgAAuQ4AAAKfBwCfsAEmAAC0CQUBhQJUaGUgdHlwZSBvZiBhIGNvbnN0IHBhcmFtZXRlciByZWZlcmVuY2VzIG90aGVyIGdlbmVyaWMgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzAKZm4gZm9vPFQsIGNvbnN0IE46IFQ+KCkge30gLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHVzZSBhIGNvbmNyZXRlIHR5cGUgZm9yIHRoZSBjb25zdCBwYXJhbWV0ZXI6CgpgYGAKZm4gZm9vPFQsIGNvbnN0IE46IHVzaXplPigpIHt9CmBgYAoABf///////////wH///////////8B////////////Af///////////wEfhQIAAQCFAp8HAJ+wASYAALgOAAIHALkOAQADAO0CDgAAtw4CBQEEU29tZQEBALQJAAG4DgADAO0CDgACtw4AAQMA2AIkAAC2DgEBALQJAAKeBwDZAhIAALQJBQEFRTA3NzAAAR8FAAEABQMA2AIkAAC2DgEBAbkJAAG3DgChBwDOsAEmAAC9DgAAAqEHAM6wASYAALQJBQGcBEEgbm9uLWAnc3RhdGljYCBsaWZldGltZSB3YXMgdXNlZCBpbiBhIGNvbnN0IGdlbmVyaWMuIFRoaXMgaXMgY3VycmVudGx5IG5vdAphbGxvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc3MQojIVtmZWF0dXJlKGFkdF9jb25zdF9wYXJhbXMpXQoKZm4gZnVuY3Rpb25fd2l0aF9zdHI8J2EsIGNvbnN0IFNUUklORzogJidhIHN0cj4oKSB7fSAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgdGhlIGxpZmV0aW1lIGluIHRoZSBjb25zdCBnZW5lcmljIG5lZWQgdG8gYmUgY2hhbmdlZCB0bwpgJ3N0YXRpY2A6CgpgYGAKIyFbZmVhdHVyZShhZHRfY29uc3RfcGFyYW1zKV0KCmZuIGZ1bmN0aW9uX3dpdGhfc3RyPGNvbnN0IFNUUklORzogJidzdGF0aWMgc3RyPigpIHt9IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0dpdEh1YiBpc3N1ZSAjNzQwNTJdLgoKW0dpdEh1YiBpc3N1ZSAjNzQwNTJdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzc0MDUyCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/nAQAAQCcBKEHAM6wASYAALwOAAIHAL0OAQADAO0CDgAAuw4CBQEEU29tZQEBALQJAAG8DgADAO0CDgACuw4AAQMA2AIkAAC6DgEBALQJAAKgBwDZAhIAALQJBQEFRTA3NzEAAR8FAAEABQMA2AIkAAC6DgEBAbkJAAG7DgCjBwD9sAEmAADBDgAAAqMHAP2wASYAALQJBQGTBkEgYnVpbHRpbi1tYWNybyB3YXMgZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzMKIyFbZmVhdHVyZShkZWNsX21hY3JvKV0KIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX2J1aWx0aW5fbWFjcm9dCnB1YiBtYWNybyB0ZXN0KCRpdGVtOml0ZW0pIHsKICAgIC8qIGNvbXBpbGVyIGJ1aWx0LWluICovCn0KCm1vZCBpbm5lciB7CiAgICAjW3J1c3RjX2J1aWx0aW5fbWFjcm9dCiAgICBwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAgICAgLyogY29tcGlsZXIgYnVpbHQtaW4gKi8KICAgIH0KfQpgYGAKClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSB0aGUgZHVwbGljYXRlIGRlY2xhcmF0aW9uOgoKYGBgCiMhW2ZlYXR1cmUoZGVjbF9tYWNybyldCiMhW2ZlYXR1cmUocnVzdGNfYXR0cnMpXQoKI1tydXN0Y19idWlsdGluX21hY3JvXQpwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAvKiBjb21waWxlciBidWlsdC1pbiAqLwp9CmBgYAoKSW4gdmVyeSByYXJlIGVkZ2UgY2FzZXMsIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGxvYWRpbmcgYGNvcmVgIG9yIGBzdGRgIHR3aWNlLApvbmNlIHdpdGggYGNoZWNrYCBtZXRhZGF0YSBhbmQgb25jZSB3aXRoIGBidWlsZGAgbWV0YWRhdGEuCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgWyM3NTE3Nl0uCgpbIzc1MTc2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L3B1bGwvNzUxNzYjaXNzdWVjb21tZW50LTY4MzIzNDQ2OAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MGAAEAkwajBwD9sAEmAADADgACBwDBDgEAAwDtAg4AAL8OAgUBBFNvbWUBAQC0CQABwA4AAwDtAg4AAr8OAAEDANgCJAAAvg4BAQC0CQACogcA2QISAAC0CQUBBUUwNzczAAEfBQABAAUDANgCJAAAvg4BAQG5CQABvw4ApQcArLEBJgAAxQ4AAAKlBwCssQEmAAC0CQUB4QNgZGVyaXZlYCB3YXMgYXBwbGllZCBvbiBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgc3RydWN0LCBhIHVuaW9uIG9yIGFuIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc0CnRyYWl0IEZvbyB7CiAgICAjW2Rlcml2ZShDbG9uZSldIC8vIGVycm9yIQogICAgdHlwZSBCYXI7Cn0KYGBgCgpBcyBzYWlkIGFib3ZlLCB0aGUgYGRlcml2ZWAgYXR0cmlidXRlIGlzIG9ubHkgYWxsb3dlZCBvbiBzdHJ1Y3RzLCB1bmlvbnMgb3IKZW51bXM6CgpgYGAKI1tkZXJpdmUoQ2xvbmUpXSAvLyBvayEKc3RydWN0IEJhciB7CiAgICBmaWVsZDogdTMyLAp9CmBgYAoKWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYGRlcml2ZWAgaW4gdGhlIFtSdXN0IEJvb2tdLgoKW1J1c3QgQm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wMy1kZXJpdmFibGUtdHJhaXRzLmh0bWwKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x/hAwABAOEDpQcArLEBJgAAxA4AAgcAxQ4BAAMA7QIOAADDDgIFAQRTb21lAQEAtAkAAcQOAAMA7QIOAALDDgABAwDYAiQAAMIOAQEAtAkAAqQHANkCEgAAtAkFAQVFMDc3NAABHwUAAQAFAwDYAiQAAMIOAQEBuQkAAcMOAKcHANuxASYAAMkOAAACpwcA27EBJgAAtAkFAcIDYCNbY21zZV9ub25zZWN1cmVfZW50cnldYCBpcyBvbmx5IHZhbGlkIGZvciB0YXJnZXRzIHdpdGggdGhlIFRydXN0Wm9uZS1NCmV4dGVuc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzUKIyFbZmVhdHVyZShjbXNlX25vbnNlY3VyZV9lbnRyeSldCgojW2Ntc2Vfbm9uc2VjdXJlX2VudHJ5XQpwdWIgZXh0ZXJuICJDIiBmbiBlbnRyeV9mdW5jdGlvbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGNvbXBpbGUgeW91ciBjb2RlIGZvciBhIFJ1c3QgdGFyZ2V0IHRoYXQgc3VwcG9ydHMgdGhlClRydXN0Wm9uZS1NIGV4dGVuc2lvbi4gVGhlIGN1cnJlbnQgcG9zc2libGUgdGFyZ2V0cyBhcmU6CiogYHRodW1idjhtLm1haW4tbm9uZS1lYWJpYAoqIGB0aHVtYnY4bS5tYWluLW5vbmUtZWFiaWhmYAoqIGB0aHVtYnY4bS5iYXNlLW5vbmUtZWFiaWAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BA8IDAAEAwgOnBwDbsQEmAADIDgACBwDJDgEAAwDtAg4AAMcOAgUBBFNvbWUBAQC0CQAByA4AAwDtAg4AAscOAAEDANgCJAAAxg4BAQC0CQACpgcA2QISAAC0CQUBBUUwNzc1AAEfBQABAAUDANgCJAAAxg4BAQG5CQABxw4AqQcAirIBJgAAzQ4AAAKpBwCKsgEmAAC0CQUBrAJgI1tjbXNlX25vbnNlY3VyZV9lbnRyeV1gIGZ1bmN0aW9ucyByZXF1aXJlIGEgQyBBQkkKCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzYKIyFbZmVhdHVyZShjbXNlX25vbnNlY3VyZV9lbnRyeSldCgojW25vX21hbmdsZV0KI1tjbXNlX25vbnNlY3VyZV9lbnRyeV0KcHViIGZuIGVudHJ5X2Z1bmN0aW9uKGlucHV0OiBWZWM8dTMyPikge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZGVjbGFyZSB5b3VyIGVudHJ5IGZ1bmN0aW9uIHdpdGggYSBDIEFCSSwgdXNpbmcgYGV4dGVybiAiQyJgLgoABf///////////wH///////////8B////////////Af///////////wH///////8DrAIAAQCsAqkHAIqyASYAAMwOAAIHAM0OAQADAO0CDgAAyw4CBQEEU29tZQEBALQJAAHMDgADAO0CDgACyw4AAQMA2AIkAADKDgEBALQJAAKoBwDZAhIAALQJBQEFRTA3NzYAAR8FAAEABQMA2AIkAADKDgEBAbkJAAHLDgCrBwC5sgEmAADRDgAAAqsHALmyASYAALQJBQGbA0EgbGl0ZXJhbCB2YWx1ZSB3YXMgdXNlZCBpbnNpZGUgYCNbZGVyaXZlXWAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc3CiNbZGVyaXZlKCJDbG9uZSIpXSAvLyBlcnJvciEKc3RydWN0IEZvbzsKYGBgCgpPbmx5IHBhdGhzIHRvIHRyYWl0cyBhcmUgYWxsb3dlZCBhcyBhcmd1bWVudCBpbnNpZGUgYCNbZGVyaXZlXWAuIFlvdSBjYW4gZmluZAptb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgI1tkZXJpdmVdYCBhdHRyaWJ1dGUgaW4gdGhlIFtSdXN0IEJvb2tdLgoKCmBgYAojW2Rlcml2ZShDbG9uZSldIC8vIG9rIQpzdHJ1Y3QgRm9vOwpgYGAKCltSdXN0IEJvb2tdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDMtZGVyaXZhYmxlLXRyYWl0cy5odG1sCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////P5sDAAEAmwOrBwC5sgEmAADQDgACBwDRDgEAAwDtAg4AAM8OAgUBBFNvbWUBAQC0CQAB0A4AAwDtAg4AAs8OAAEDANgCJAAAzg4BAQC0CQACqgcA2QISAAC0CQUBBUUwNzc3AAEfBQABAAUDANgCJAAAzg4BAQG5CQABzw4ArQcA6LIBJgAA1Q4AAAKtBwDosgEmAAC0CQUByAVUaGUgYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc4CiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2luc3RydWN0aW9uX3NldCgpXSAvLyBlcnJvcjogZXhwZWN0ZWQgb25lIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQpmbiBtYWluKCkge30KYGBgCgpUaGUgcGFyZW50aGVzaXplZCBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgcmVxdWlyZXMgdGhlIHBhcmFtZXRlciB0byBiZQpzcGVjaWZpZWQ6CgpgYGAKIyFbZmVhdHVyZShpc2FfYXR0cmlidXRlKV0KCiNbY2ZnX2F0dHIodGFyZ2V0X2FyY2g9ImFybSIsIGluc3RydWN0aW9uX3NldChhcm06OmEzMikpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCm9yOgoKYGBgCiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2NmZ19hdHRyKHRhcmdldF9hcmNoPSJhcm0iLCBpbnN0cnVjdGlvbl9zZXQoYXJtOjp0MzIpKV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFtgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGVdW2lzYS1hdHRyaWJ1dGVdCnNlY3Rpb24gb2YgdGhlIFJlZmVyZW5jZS4KCltpc2EtYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvYXR0cmlidXRlcy9jb2RlZ2VuLmh0bWwKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8ByAUAAQDIBa0HAOiyASYAANQOAAIHANUOAQADAO0CDgAA0w4CBQEEU29tZQEBALQJAAHUDgADAO0CDgAC0w4AAQMA2AIkAADSDgEBALQJAAKsBwDZAhIAALQJBQEFRTA3NzgAAR8FAAEABQMA2AIkAADSDgEBAbkJAAHTDgCvBwCXswEmAADZDgAAAq8HAJezASYAALQJBQHrBUFuIHVua25vd24gYXJndW1lbnQgd2FzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc5CiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2luc3RydWN0aW9uX3NldChpbnRlbDo6eDY0KV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmZuIG1haW4oKSB7fQpgYGAKClRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgb25seSBzdXBwb3J0cyB0d28gYXJndW1lbnRzIGN1cnJlbnRseToKCiAqIGFybTo6YTMyCiAqIGFybTo6dDMyCgpBbGwgb3RoZXIgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gdGhpcwplcnJvci4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6YTMyKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlXVtpc2EtYXR0cmlidXRlXQpzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UuCgpbaXNhLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wUAAQDrBa8HAJezASYAANgOAAIHANkOAQADAO0CDgAA1w4CBQEEU29tZQEBALQJAAHYDgADAO0CDgAC1w4AAQMA2AIkAADWDgEBALQJAAKuBwDZAhIAALQJBQEFRTA3NzkAAR8FAAEABQMA2AIkAADWDgEBAbkJAAHXDgCxBwDGswEmAADdDgAAArEHAMazASYAALQJBQGSA0Nhbm5vdCB1c2UgYGRvYyhpbmxpbmUpYCB3aXRoIGFub255bW91cyBpbXBvcnRzCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCgojW2RvYyhpbmxpbmUpXSAvLyBlcnJvcjogaW52YWxpZCBkb2MgYXJndW1lbnQKcHViIHVzZSBmb286OkZvbyBhcyBfOwpgYGAKCkFub255bW91cyBpbXBvcnRzIGFyZSBhbHdheXMgcmVuZGVyZWQgd2l0aCBgI1tkb2Mobm9faW5saW5lKV1gLiBUbyBmaXggdGhpcwplcnJvciwgcmVtb3ZlIHRoZSBgI1tkb2MoaW5saW5lKV1gIGF0dHJpYnV0ZS4KCkV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKCnB1YiB1c2UgZm9vOjpGb28gYXMgXzsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgMAAQCSA7EHAMazASYAANwOAAIHAN0OAQADAO0CDgAA2w4CBQEEU29tZQEBALQJAAHcDgADAO0CDgAC2w4AAQMA2AIkAADaDgEBALQJAAKwBwDZAhIAALQJBQEFRTA3ODAAAR8FAAEABQMA2AIkAADaDgEBAbkJAAHbDgCzBwD1swEmAADhDgAAArMHAPWzASYAALQJBQG5AlRoZSBgQy1jbXNlLW5vbnNlY3VyZS1jYWxsYCBBQkkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc4MQojIVtmZWF0dXJlKGFiaV9jX2Ntc2Vfbm9uc2VjdXJlX2NhbGwpXQoKcHViIGV4dGVybiAiQy1jbXNlLW5vbnNlY3VyZS1jYWxsIiBmbiB0ZXN0KCkge30KYGBgCgpUaGUgYEMtY21zZS1ub25zZWN1cmUtY2FsbGAgQUJJIHNob3VsZCBiZSB1c2VkIGJ5IGNhc3RpbmcgZnVuY3Rpb24gcG9pbnRlcnMgdG8Kc3BlY2lmaWMgYWRkcmVzc2VzLgoABf///////////wH///////////8B////////////Af///////////wH//////////wG5AgABALkCswcA9bMBJgAA4A4AAgcA4Q4BAAMA7QIOAADfDgIFAQRTb21lAQEAtAkAAeAOAAMA7QIOAALfDgABAwDYAiQAAN4OAQEAtAkAArIHANkCEgAAtAkFAQVFMDc4MQABHwUAAQAFAwDYAiQAAN4OAQEBuQkAAd8OALUHAKS0ASYAAOUOAAACtQcApLQBJgAAtAkFAZgFVHJhaXQgb2JqZWN0cyBtdXN0IGluY2x1ZGUgdGhlIGBkeW5gIGtleXdvcmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMjEsY29tcGlsZV9mYWlsLEUwNzgyCnRyYWl0IEZvbyB7fQpmbiB0ZXN0KGFyZzogQm94PEZvbz4pIHt9IC8vIGVycm9yIQpgYGAKClRyYWl0IG9iamVjdHMgYXJlIGEgd2F5IHRvIGNhbGwgbWV0aG9kcyBvbiB0eXBlcyB0aGF0IGFyZSBub3Qga25vd24gdW50aWwKcnVudGltZSBidXQgY29uZm9ybSB0byBzb21lIHRyYWl0LgoKVHJhaXQgb2JqZWN0cyBzaG91bGQgYmUgZm9ybWVkIHdpdGggYEJveDxkeW4gRm9vPmAsIGJ1dCBpbiB0aGUgY29kZSBhYm92ZQpgZHluYCBpcyBsZWZ0IG9mZi4KClRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHNlZSB0aGF0IGBhcmdgIGlzIGEgdHJhaXQgb2JqZWN0IGFuZCBub3QgYQpzaW1wbHkgYSBoZWFwIGFsbG9jYXRlZCB0eXBlIGNhbGxlZCBgRm9vYC4KClRvIGZpeCB0aGlzIGlzc3VlLCBhZGQgYGR5bmAgYmVmb3JlIHRoZSB0cmFpdCBuYW1lLgoKYGBgZWRpdGlvbjIwMjEKdHJhaXQgRm9vIHt9CmZuIHRlc3QoYXJnOiBCb3g8ZHluIEZvbz4pIHt9IC8vIG9rIQpgYGAKClRoaXMgdXNlZCB0byBiZSBhbGxvd2VkIGJlZm9yZSBlZGl0aW9uIDIwMjEsIGJ1dCBpcyBub3cgYW4gZXJyb3IuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///weYBQABAJgFtQcApLQBJgAA5A4AAgcA5Q4BAAMA7QIOAADjDgIFAQRTb21lAQEAtAkAAeQOAAMA7QIOAALjDgABAwDYAiQAAOIOAQEAtAkAArQHANkCEgAAtAkFAQVFMDc4MgABHwUAAQAFAwDYAiQAAOIOAQEBuQkAAeMOALcHANO0ASYAAOkOAAACtwcA07QBJgAAtAkFAaYEVGhlIHJhbmdlIHBhdHRlcm4gYC4uLmAgaXMgbm8gbG9uZ2VyIGFsbG93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMjEsY29tcGlsZV9mYWlsLEUwNzgzCm1hdGNoIDJ1OCB7CiAgICAwLi4uOSA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIGxlc3MgdGhhbiAxMCIpLCAvLyBlcnJvciEKICAgIF8gPT4gcHJpbnRsbiEoIkdvdCBhIG51bWJlciAxMCBvciBtb3JlIiksCn0KYGBgCgpPbGRlciBSdXN0IGNvZGUgdXNpbmcgcHJldmlvdXMgZWRpdGlvbnMgYWxsb3dlZCBgLi4uYCB0byBzdGFuZCBmb3IgZXhjbHVzaXZlCnJhbmdlcyB3aGljaCBhcmUgbm93IHNpZ25pZmllZCB1c2luZyBgLi49YC4KClRvIG1ha2UgdGhpcyBjb2RlIGNvbXBpbGUgcmVwbGFjZSB0aGUgYC4uLmAgd2l0aCBgLi49YC4KCmBgYGVkaXRpb24yMDIxCm1hdGNoIDJ1OCB7CiAgICAwLi49OSA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIGxlc3MgdGhhbiAxMCIpLCAvLyBvayEKICAgIF8gPT4gcHJpbnRsbiEoIkdvdCBhIG51bWJlciAxMCBvciBtb3JlIiksCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wemBAABAKYEtwcA07QBJgAA6A4AAgcA6Q4BAAMA7QIOAADnDgIFAQRTb21lAQEAtAkAAegOAAMA7QIOAALnDgABAwDYAiQAAOYOAQEAtAkAArYHANkCEgAAtAkFAQVFMDc4MwABHwUAAQAFAwDYAiQAAOYOAQEBuQkAAecOALkHAIK1ASYAAO0OAAACuQcAgrUBJgAAtAkFAd0FQSB1bmlvbiBleHByZXNzaW9uIGRvZXMgbm90IGhhdmUgZXhhY3RseSBvbmUgZmllbGQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzg0CnVuaW9uIEJpcmQgewogICAgcGlnZW9uOiB1OCwKICAgIHR1cnRsZWRvdmU6IHUxNiwKfQoKbGV0IGJpcmQgPSBCaXJkIHt9OyAvLyBlcnJvcgpsZXQgYmlyZCA9IEJpcmQgeyBwaWdlb246IDAsIHR1cnRsZWRvdmU6IDEgfTsgLy8gZXJyb3IKYGBgCgpUaGUga2V5IHByb3BlcnR5IG9mIHVuaW9ucyBpcyB0aGF0IGFsbCBmaWVsZHMgb2YgYSB1bmlvbiBzaGFyZSBjb21tb24gc3RvcmFnZS4KQXMgYSByZXN1bHQsIHdyaXRlcyB0byBvbmUgZmllbGQgb2YgYSB1bmlvbiBjYW4gb3ZlcndyaXRlIGl0cyBvdGhlciBmaWVsZHMsIGFuZApzaXplIG9mIGEgdW5pb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2l6ZSBvZiBpdHMgbGFyZ2VzdCBmaWVsZC4KCllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1bmlvbiB0eXBlcyBpbiB0aGUgW1J1c3QgcmVmZXJlbmNlXS4KCldvcmtpbmcgZXhhbXBsZToKCmBgYAp1bmlvbiBCaXJkIHsKICAgIHBpZ2VvbjogdTgsCiAgICB0dXJ0bGVkb3ZlOiB1MTYsCn0KCmxldCBiaXJkID0gQmlyZCB7IHBpZ2VvbjogMCB9OyAvLyBPSwpgYGAKCltSdXN0IHJlZmVyZW5jZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2l0ZW1zL3VuaW9ucy5odG1sCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0FAAEA3QW5BwCCtQEmAADsDgACBwDtDgEAAwDtAg4AAOsOAgUBBFNvbWUBAQC0CQAB7A4AAwDtAg4AAusOAAEDANgCJAAA6g4BAQC0CQACuAcA2QISAAC0CQUBBUUwNzg0AAEfBQABAAUDANgCJAAA6g4BAQG5CQAB6w4AuwcAsbUBJgAA8Q4AAAK7BwCxtQEmAAC0CQUBiAVBbiBpbmhlcmVudCBgaW1wbGAgd2FzIHdyaXR0ZW4gb24gYSBkeW4gYXV0byB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODUKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gQXV0b1RyYWl0IHt9CmBgYAoKRHluIG9iamVjdHMgYWxsb3cgYW55IG51bWJlciBvZiBhdXRvIHRyYWl0cywgcGx1cyBhdCBtb3N0IG9uZSBub24tYXV0byB0cmFpdC4KVGhlIG5vbi1hdXRvIHRyYWl0IGJlY29tZXMgdGhlICJwcmluY2lwYWwgdHJhaXQiLgoKV2hlbiBjaGVja2luZyBpZiBhbiBpbXBsIG9uIGEgZHluIHRyYWl0IGlzIGNvaGVyZW50LCB0aGUgcHJpbmNpcGFsIHRyYWl0IGlzCm5vcm1hbGx5IHRoZSBvbmx5IG9uZSBjb25zaWRlcmVkLiBTaW5jZSB0aGUgZXJyb25lb3VzIGNvZGUgaGFzIG5vIHByaW5jaXBhbAp0cmFpdCwgaXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KCldvcmtpbmcgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnRyYWl0IFByaW5jaXBhbFRyYWl0IHt9CgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gUHJpbmNpcGFsVHJhaXQgKyBBdXRvVHJhaXQgKyBTZW5kIHt9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AYgFAAEAiAW7BwCxtQEmAADwDgACBwDxDgEAAwDtAg4AAO8OAgUBBFNvbWUBAQC0CQAB8A4AAwDtAg4AAu8OAAEDANgCJAAA7g4BAQC0CQACugcA2QISAAC0CQUBBUUwNzg1AAEfBQABAAUDANgCJAAA7g4BAQG5CQAB7w4AvQcA4LUBJgAA9Q4AAAK9BwDgtQEmAAC0CQUBvANBIG1ldGFkYXRhIGZpbGUgd2FzIGludmFsaWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChuZWVkcyBleHRlcm4gZmlsZXMpCnVzZSA6OmZvbzsgLy8gZXJyb3I6IGZvdW5kIGludmFsaWQgbWV0YWRhdGEgZmlsZXMgZm9yIGNyYXRlIGBmb29gCmBgYAoKV2hlbiBsb2FkaW5nIGNyYXRlcywgZWFjaCBjcmF0ZSBtdXN0IGhhdmUgYSB2YWxpZCBtZXRhZGF0YSBmaWxlLgpJbnZhbGlkIGZpbGVzIGNvdWxkIGJlIGNhdXNlZCBieSBmaWxlc3lzdGVtIGNvcnJ1cHRpb24sCmFuIElPIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUsIG9yIChyYXJlbHkpIGEgYnVnIGluIHRoZSBjb21waWxlciBpdHNlbGYuCgpDb25zaWRlciBkZWxldGluZyB0aGUgZmlsZSBhbmQgcmVjcmVhdGluZyBpdCwKb3IgcmVwb3J0aW5nIGEgYnVnIGFnYWluc3QgdGhlIGNvbXBpbGVyLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////D7wDAAEAvAO9BwDgtQEmAAD0DgACBwD1DgEAAwDtAg4AAPMOAgUBBFNvbWUBAQC0CQAB9A4AAwDtAg4AAvMOAAEDANgCJAAA8g4BAQC0CQACvAcA2QISAAC0CQUBBUUwNzg2AAEfBQABAAUDANgCJAAA8g4BAQG5CQAB8w4AAwCkAwQAAvcOAAADAJADGQAA9g4BAQC0CQACvgcAkQMRAAC0CQUBBUUwMjA4AAEfBQABAAUDAJADGQAA9g4BAQG5CQAB9w4AAwCkAwQAAvkOAAADAJADGQAA+A4BAQC0CQACvwcAkQMRAAC0CQUBBUUwMjI3AAEfBQABAAUDAJADGQAA+A4BAQG5CQAB+Q4AAwCkAwQAAvsOAAADAJADGQAA+g4BAQC0CQACwAcAkQMRAAC0CQUBBUUwMjc5AAEfBQABAAUDAJADGQAA+g4BAQG5CQAB+w4AAwCkAwQAAv0OAAADAJADGQAA/A4BAQC0CQACwQcAkQMRAAC0CQUBBUUwMjgwAAEfBQABAAUDAJADGQAA/A4BAQG5CQAB/Q4AAwCkAwQAAv8OAAADAJADGQAA/g4BAQC0CQACwgcAkQMRAAC0CQUBBUUwMzExAAEfBQABAAUDAJADGQAA/g4BAQG5CQAB/w4AAwCkAwQAAoEPAAADAJADGQAAgA8BAQC0CQACwwcAkQMRAAC0CQUBBUUwMzEzAAEfBQABAAUDAJADGQAAgA8BAQG5CQABgQ8AAwCkAwQAAoMPAAADAJADGQAAgg8BAQC0CQACxAcAkQMRAAC0CQUBBUUwMzIwAAEfBQABAAUDAJADGQAAgg8BAQG5CQABgw8AAwCkAwQAAoUPAAADAJADGQAAhA8BAQC0CQACxQcAkQMRAAC0CQUBBUUwMzc3AAEfBQABAAUDAJADGQAAhA8BAQG5CQABhQ8AAwCkAwQAAocPAAADAJADGQAAhg8BAQC0CQACxgcAkQMRAAC0CQUBBUUwNDU3AAEfBQABAAUDAJADGQAAhg8BAQG5CQABhw8AAwCkAwQAAokPAAADAJADGQAAiA8BAQC0CQACxwcAkQMRAAC0CQUBBUUwNDYwAAEfBQABAAUDAJADGQAAiA8BAQG5CQABiQ8AAwCkAwQAAosPAAADAJADGQAAig8BAQC0CQACyAcAkQMRAAC0CQUBBUUwNDYxAAEfBQABAAUDAJADGQAAig8BAQG5CQABiw8AAwCkAwQAAo0PAAADAJADGQAAjA8BAQC0CQACyQcAkQMRAAC0CQUBBUUwNDYyAAEfBQABAAUDAJADGQAAjA8BAQG5CQABjQ8AAwCkAwQAAo8PAAADAJADGQAAjg8BAQC0CQACygcAkQMRAAC0CQUBBUUwNDY1AAEfBQABAAUDAJADGQAAjg8BAQG5CQABjw8AAwCkAwQAApEPAAADAJADGQAAkA8BAQC0CQACywcAkQMRAAC0CQUBBUUwNDcyAAEfBQABAAUDAJADGQAAkA8BAQG5CQABkQ8AAwCkAwQAApMPAAADAJADGQAAkg8BAQC0CQACzAcAkQMRAAC0CQUBBUUwNDc2AAEfBQABAAUDAJADGQAAkg8BAQG5CQABkw8AAwCkAwQAApUPAAADAJADGQAAlA8BAQC0CQACzQcAkQMRAAC0CQUBBUUwNDkwAAEfBQABAAUDAJADGQAAlA8BAQG5CQABlQ8AAwCkAwQAApcPAAADAJADGQAAlg8BAQC0CQACzgcAkQMRAAC0CQUBBUUwNTE0AAEfBQABAAUDAJADGQAAlg8BAQG5CQABlw8AAwCkAwQAApkPAAADAJADGQAAmA8BAQC0CQACzwcAkQMRAAC0CQUBBUUwNTE5AAEfBQABAAUDAJADGQAAmA8BAQG5CQABmQ8AAwCkAwQAApsPAAADAJADGQAAmg8BAQC0CQAC0AcAkQMRAAC0CQUBBUUwNTIzAAEfBQABAAUDAJADGQAAmg8BAQG5CQABmw8AAwCkAwQAAp0PAAADAJADGQAAnA8BAQC0CQAC0QcAkQMRAAC0CQUBBUUwNjQwAAEfBQABAAUDAJADGQAAnA8BAQG5CQABnQ8AAwCkAwQAAp8PAAADAJADGQAAng8BAQC0CQAC0gcAkQMRAAC0CQUBBUUwNjY3AAEfBQABAAUDAJADGQAAng8BAQG5CQABnw8AAwCkAwQAAqEPAAADAJADGQAAoA8BAQC0CQAC0wcAkQMRAAC0CQUBBUUwNzExAAEfBQABAAUDAJADGQAAoA8BAQG5CQABoQ8AAwCkAwQAAqMPAAADAJADGQAAog8BAQC0CQAC1AcAkQMRAAC0CQUBBUUwNzE3AAEfBQABAAUDAJADGQAAog8BAQG5CQABow8AAwCkAwQAAqUPAAADAJADGQAApA8BAQC0CQAC1QcAkQMRAAC0CQUBBUUwNzI2AAEfBQABAAUDAJADGQAApA8BAQG5CQABpQ8AAwCkAwQAAqcPAAADAJADGQAApg8BAQC0CQAC1gcAkQMRAAC0CQUBBUUwNzcyAAEfBQABAAUDAJADGQAApg8BAQG5CQABpw8AAwDHAnAAAAEADACxCfYDAQIAAQYAAQoAAQ4AARIAARYAARoAAR4AASIAASYAASoAAS4AATIAATYAAToAAT4AAUIAAUYAAUoAAU4AAVIAAVYAAVoAAV4AAWIAAWYAAWoAAW4AAXIAAXYAAXoAAX4AAYIBAAGGAQABigEAAY4BAAGSAQABlgEAAZoBAAGeAQABogEAAaYBAAGqAQABrgEAAbIBAAG2AQABugEAAb4BAAHCAQABxgEAAcoBAAHOAQAB0gEAAdYBAAHaAQAB3gEAAeIBAAHmAQAB6gEAAe4BAAHyAQAB9gEAAfoBAAH+AQABggIAAYYCAAGKAgABjgIAAZICAAGWAgABmgIAAZ4CAAGiAgABpgIAAaoCAAGuAgABsgIAAbYCAAG6AgABvgIAAcICAAHGAgABygIAAc4CAAHSAgAB1gIAAdoCAAHeAgAB4gIAAeYCAAHqAgAB7gIAAfICAAH2AgAB+gIAAf4CAAGCAwABhgMAAYoDAAGOAwABkgMAAZYDAAGaAwABngMAAaIDAAGmAwABqgMAAa4DAAGyAwABtgMAAboDAAG+AwABwgMAAcYDAAHKAwABzgMAAdIDAAHWAwAB2gMAAd4DAAHiAwAB5gMAAeoDAAHuAwAB8gMAAfYDAAH6AwAB/gMAAYIEAAGGBAABigQAAY4EAAGSBAABlgQAAZoEAAGeBAABogQAAaYEAAGqBAABrgQAAbIEAAG2BAABugQAAb4EAAHCBAABxgQAAcoEAAHOBAAB0gQAAdYEAAHaBAAB3gQAAeIEAAHmBAAB6gQAAe4EAAHyBAAB9gQAAfoEAAH+BAABggUAAYYFAAGKBQABjgUAAZIFAAGWBQABmgUAAZ4FAAGiBQABpgUAAaoFAAGuBQABsgUAAbYFAAG6BQABvgUAAcIFAAHGBQABygUAAc4FAAHSBQAB1gUAAdoFAAHeBQAB4gUAAeYFAAHqBQAB7gUAAfIFAAH2BQAB+gUAAf4FAAGCBgABhgYAAYoGAAGOBgABkgYAAZYGAAGaBgABngYAAaIGAAGmBgABqgYAAa4GAAGyBgABtgYAAboGAAG+BgABwgYAAcYGAAHKBgABzgYAAdIGAAHWBgAB2gYAAd4GAAHiBgAB5gYAAeoGAAHuBgAB8gYAAfYGAAH6BgAB/gYAAYIHAAGGBwABigcAAY4HAAGSBwABlgcAAZoHAAGeBwABogcAAaYHAAGqBwABrgcAAbIHAAG2BwABugcAAb4HAAHCBwABxgcAAcoHAAHOBwAB0gcAAdYHAAHaBwAB3gcAAeIHAAHmBwAB6gcAAe4HAAHyBwAB9gcAAfoHAAH+BwABgggAAYYIAAGKCAABjggAAZIIAAGWCAABmggAAZ4IAAGiCAABpggAAaoIAAGuCAABsggAAbYIAAG6CAABvggAAcIIAAHGCAAByggAAc4IAAHSCAAB1ggAAdoIAAHeCAAB4ggAAeYIAAHqCAAB7ggAAfIIAAH2CAAB+ggAAf4IAAGCCQABhgkAAYoJAAGOCQABkgkAAZYJAAGaCQABngkAAaIJAAGmCQABqgkAAa4JAAGyCQABtgkAAboJAAG+CQABwgkAAcYJAAHKCQABzgkAAdIJAAHWCQAB2gkAAd4JAAHiCQAB5gkAAeoJAAHuCQAB8gkAAfYJAAH6CQAB/gkAAYIKAAGGCgABigoAAY4KAAGSCgABlgoAAZoKAAGeCgABogoAAaYKAAGqCgABrgoAAbIKAAG2CgABugoAAb4KAAHCCgABxgoAAcoKAAHOCgAB0goAAdYKAAHaCgAB3goAAeIKAAHmCgAB6goAAe4KAAHyCgAB9goAAfoKAAH+CgABggsAAYYLAAGKCwABjgsAAZILAAGWCwABmgsAAZ4LAAGiCwABpgsAAaoLAAGuCwABsgsAAbYLAAG6CwABvgsAAcILAAHGCwABygsAAc4LAAHSCwAB1gsAAdoLAAHeCwAB4gsAAeYLAAHqCwAB7gsAAfILAAH2CwAB+gsA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BPwEBGNvcmUAuAYCALkGuQYEY29yZQBjAgBkZARjb3JlAKACAgChAqECBGNvcmUA3QMCAN4D3gMEY29yZQCaBQIAmwWbBQRjb3JlANcGAgDYBtgGBGNvcmUAggECAIMBgwEEY29yZQC/AgIAwALAAgRjb3JlAPwDAgD9A/0DBGNvcmUAuQUCALoFugUEY29yZQD2BgIA9wb3BgRjb3JlAKEBAgCiAaIBBGNvcmUA3gICAN8C3wIEY29yZQCbBAIAnAScBARjb3JlANgFAgDZBdkFBGNvcmUAlQcCAJYHlgcEY29yZQADAgAEBARjb3JlAMABAgDBAcEBBGNvcmUA/QICAP4C/gIEY29yZQC6BAIAuwS7BARjb3JlAPcFAgD4BfgFBGNvcmUAtAcCALUHtQcEY29yZQAiAgAjIwRjb3JlAN8BAgDgAeABBGNvcmUAnAMCAJ0DnQMEY29yZQDZBAIA2gTaBARjb3JlAJYGAgCXBpcGBGNvcmUA0wcCANQH1AcEY29yZQBBAgBCQgRjb3JlAP4BAgD/Af8BBGNvcmUAuwMCALwDvAMEY29yZQD4BAIA+QT5BARjb3JlALUGAgC2BrYGBGNvcmUAYAIAYWEEY29yZQCdAgIAngKeAgRjb3JlANoDAgDbA9sDBGNvcmUAlwUCAJgFmAUEY29yZQDUBgIA1QbVBgRjb3JlAH8CAIABgAEEY29yZQC8AgIAvQK9AgRjb3JlAPkDAgD6A/oDBGNvcmUAtgUCALcFtwUEY29yZQDzBgIA9Ab0BgRjb3JlAJ4BAgCfAZ8BBGNvcmUA2wICANwC3AIEY29yZQCYBAIAmQSZBARjb3JlANUFAgDWBdYFBGNvcmUAkgcCAJMHkwcEY29yZQABAgABAQVjcmF0ZQC9AQIAvgG+AQRjb3JlAPoCAgD7AvsCBGNvcmUAtwQCALgEuAQEY29yZQD0BQIA9QX1BQRjb3JlALEHAgCyB7IHBGNvcmUAHwIAICAEY29yZQDcAQIA3QHdAQRjb3JlAJkDAgCaA5oDBGNvcmUA1gQCANcE1wQEY29yZQCTBgIAlAaUBgRjb3JlANAHAgDRB9EHBGNvcmUAPgIAPz8EY29yZQD7AQIA/AH8AQRjb3JlALgDAgC5A7kDBGNvcmUA9QQCAPYE9gQEY29yZQCyBgIAswazBgRjb3JlAF0CAF5eBGNvcmUAmgICAJsCmwIEY29yZQDXAwIA2APYAwRjb3JlAJQFAgCVBZUFBGNvcmUA0QYCANIG0gYEY29yZQB8AgB9fQRjb3JlALkCAgC6AroCBGNvcmUA9gMCAPcD9wMEY29yZQCzBQIAtAW0BQRjb3JlAPAGAgDxBvEGBGNvcmUAmwECAJwBnAEEY29yZQDYAgIA2QLZAgRjb3JlAJUEAgCWBJYEBGNvcmUA0gUCANMF0wUEY29yZQCPBwIAkAeQBwRjb3JlALoBAgC7AbsBBGNvcmUA9wICAPgC+AIEY29yZQC0BAIAtQS1BARjb3JlAPEFAgDyBfIFBGNvcmUArgcCAK8HrwcEY29yZQAcAgAdHQRjb3JlANkBAgDaAdoBBGNvcmUAlgMCAJcDlwMEY29yZQDTBAIA1ATUBARjb3JlAJAGAgCRBpEGBGNvcmUAzQcCAM4HzgcEY29yZQA7AgA8PARjb3JlAPgBAgD5AfkBBGNvcmUAtQMCALYDtgMEY29yZQDyBAIA8wTzBARjb3JlAK8GAgCwBrAGBGNvcmUAWgIAW1sEY29yZQCXAgIAmAKYAgRjb3JlANQDAgDVA9UDBGNvcmUAkQUCAJIFkgUEY29yZQDOBgIAzwbPBgRjb3JlAHkCAHp6BGNvcmUAtgICALcCtwIEY29yZQDzAwIA9AP0AwRjb3JlALAFAgCxBbEFBGNvcmUA7QYCAO4G7gYEY29yZQCYAQIAmQGZAQRjb3JlANUCAgDWAtYCBGNvcmUAkgQCAJMEkwQEY29yZQDPBQIA0AXQBQRjb3JlAIwHAgCNB40HBGNvcmUAtwECALgBuAEEY29yZQD0AgIA9QL1AgRjb3JlALEEAgCyBLIEBGNvcmUA7gUCAO8F7wUEY29yZQCrBwIArAesBwRjb3JlABkCABoaBGNvcmUA1gECANcB1wEEY29yZQCTAwIAlAOUAwRjb3JlANAEAgDRBNEEBGNvcmUAjQYCAI4GjgYEY29yZQDKBwIAywfLBwRjb3JlADgCADk5BGNvcmUA9QECAPYB9gEEY29yZQCyAwIAswOzAwRjb3JlAO8EAgDwBPAEBGNvcmUArAYCAK0GrQYEY29yZQBXAgBYWARjb3JlAJQCAgCVApUCBGNvcmUA0QMCANID0gMEY29yZQCOBQIAjwWPBQRjb3JlAMsGAgDMBswGBGNvcmUAdgIAd3cEY29yZQCzAgIAtAK0AgRjb3JlAPADAgDxA/EDBGNvcmUArQUCAK4FrgUEY29yZQDqBgIA6wbrBgRjb3JlAJUBAgCWAZYBBGNvcmUA0gICANMC0wIEY29yZQCPBAIAkASQBARjb3JlAMwFAgDNBc0FBGNvcmUAiQcCAIoHigcEY29yZQC0AQIAtQG1AQRjb3JlAPECAgDyAvICBGNvcmUArgQCAK8ErwQEY29yZQDrBQIA7AXsBQRjb3JlAKgHAgCpB6kHBGNvcmUAFgIAFxcEY29yZQDTAQIA1AHUAQRjb3JlAJADAgCRA5EDBGNvcmUAzQQCAM4EzgQEY29yZQCKBgIAiwaLBgRjb3JlAMcHAgDIB8gHBGNvcmUANQIANjYEY29yZQDyAQIA8wHzAQRjb3JlAK8DAgCwA7ADBGNvcmUA7AQCAO0E7QQEY29yZQCpBgIAqgaqBgRjb3JlAFQCAFVVBGNvcmUAkQICAJICkgIEY29yZQDOAwIAzwPPAwRjb3JlAIsFAgCMBYwFBGNvcmUAyAYCAMkGyQYEY29yZQBzAgB0dARjb3JlALACAgCxArECBGNvcmUA7QMCAO4D7gMEY29yZQCqBQIAqwWrBQRjb3JlAOcGAgDoBugGBGNvcmUAkgECAJMBkwEEY29yZQDPAgIA0ALQAgRjb3JlAIwEAgCNBI0EBGNvcmUAyQUCAMoFygUEY29yZQCGBwIAhweHBwRjb3JlALEBAgCyAbIBBGNvcmUA7gICAO8C7wIEY29yZQCrBAIArASsBARjb3JlAOgFAgDpBekFBGNvcmUApQcCAKYHpgcEY29yZQATAgAUFARjb3JlANABAgDRAdEBBGNvcmUAjQMCAI4DjgMEY29yZQDKBAIAywTLBARjb3JlAIcGAgCIBogGBGNvcmUAxAcCAMUHxQcEY29yZQAyAgAzMwRjb3JlAO8BAgDwAfABBGNvcmUArAMCAK0DrQMEY29yZQDpBAIA6gTqBARjb3JlAKYGAgCnBqcGBGNvcmUAUQIAUlIEY29yZQCOAgIAjwKPAgRjb3JlAMsDAgDMA8wDBGNvcmUAiAUCAIkFiQUEY29yZQDFBgIAxgbGBgRjb3JlAHACAHFxBGNvcmUArQICAK4CrgIEY29yZQDqAwIA6wPrAwRjb3JlAKcFAgCoBagFBGNvcmUA5AYCAOUG5QYEY29yZQCPAQIAkAGQAQRjb3JlAMwCAgDNAs0CBGNvcmUAiQQCAIoEigQEY29yZQDGBQIAxwXHBQRjb3JlAIMHAgCEB4QHBGNvcmUArgECAK8BrwEEY29yZQDrAgIA7ALsAgRjb3JlAKgEAgCpBKkEBGNvcmUA5QUCAOYF5gUEY29yZQCiBwIAowejBwRjb3JlABACABERBGNvcmUAzQECAM4BzgEEY29yZQCKAwIAiwOLAwRjb3JlAMcEAgDIBMgEBGNvcmUAhAYCAIUGhQYEY29yZQDBBwIAwgfCBwRjb3JlAC8CADAwBGNvcmUA7AECAO0B7QEEY29yZQCpAwIAqgOqAwRjb3JlAOYEAgDnBOcEBGNvcmUAowYCAKQGpAYEY29yZQBOAgBPTwRjb3JlAIsCAgCMAowCBGNvcmUAyAMCAMkDyQMEY29yZQCFBQIAhgWGBQRjb3JlAMIGAgDDBsMGBGNvcmUAbQIAbm4EY29yZQCqAgIAqwKrAgRjb3JlAOcDAgDoA+gDBGNvcmUApAUCAKUFpQUEY29yZQDhBgIA4gbiBgRjb3JlAIwBAgCNAY0BBGNvcmUAyQICAMoCygIEY29yZQCGBAIAhwSHBARjb3JlAMMFAgDEBcQFBGNvcmUAgAcCAIEHgQcEY29yZQCrAQIArAGsAQRjb3JlAOgCAgDpAukCBGNvcmUApQQCAKYEpgQEY29yZQDiBQIA4wXjBQRjb3JlAJ8HAgCgB6AHBGNvcmUADQIADg4EY29yZQDKAQIAywHLAQRjb3JlAIcDAgCIA4gDBGNvcmUAxAQCAMUExQQEY29yZQCBBgIAggaCBgRjb3JlAL4HAgC/B78HBGNvcmUALAIALS0EY29yZQDpAQIA6gHqAQRjb3JlAKYDAgCnA6cDBGNvcmUA4wQCAOQE5AQEY29yZQCgBgIAoQahBgRjb3JlAEsCAExMBGNvcmUAiAICAIkCiQIEY29yZQDFAwIAxgPGAwRjb3JlAIIFAgCDBYMFBGNvcmUAvwYCAMAGwAYEY29yZQBqAgBrawRjb3JlAKcCAgCoAqgCBGNvcmUA5AMCAOUD5QMEY29yZQChBQIAogWiBQRjb3JlAN4GAgDfBt8GBGNvcmUAiQECAIoBigEEY29yZQDGAgIAxwLHAgRjb3JlAIMEAgCEBIQEBGNvcmUAwAUCAMEFwQUEY29yZQD9BgIA/gb+BgRjb3JlAKgBAgCpAakBBGNvcmUA5QICAOYC5gIEY29yZQCiBAIAowSjBARjb3JlAN8FAgDgBeAFBGNvcmUAnAcCAJ0HnQcEY29yZQAKAgALCwRjb3JlAMcBAgDIAcgBBGNvcmUAhAMCAIUDhQMEY29yZQDBBAIAwgTCBARjb3JlAP4FAgD/Bf8FBGNvcmUAuwcCALwHvAcEY29yZQApAgAqKgRjb3JlAOYBAgDnAecBBGNvcmUAowMCAKQDpAMEY29yZQDgBAIA4QThBARjb3JlAJ0GAgCeBp4GBGNvcmUASAIASUkEY29yZQCFAgIAhgKGAgRjb3JlAMIDAgDDA8MDBGNvcmUA/wQCAIAFgAUEY29yZQC8BgIAvQa9BgRjb3JlAGcCAGhoBGNvcmUApAICAKUCpQIEY29yZQDhAwIA4gPiAwRjb3JlAJ4FAgCfBZ8FBGNvcmUA2wYCANwG3AYEY29yZQCGAQIAhwGHAQRjb3JlAMMCAgDEAsQCBGNvcmUAgAQCAIEEgQQEY29yZQC9BQIAvgW+BQRjb3JlAPoGAgD7BvsGBGNvcmUApQECAKYBpgEEY29yZQDiAgIA4wLjAgRjb3JlAJ8EAgCgBKAEBGNvcmUA3AUCAN0F3QUEY29yZQCZBwIAmgeaBwRjb3JlAAcCAAgIBGNvcmUAxAECAMUBxQEEY29yZQCBAwIAggOCAwRjb3JlAL4EAgC/BL8EBGNvcmUA+wUCAPwF/AUEY29yZQC4BwIAuQe5BwRjb3JlACYCACcnBGNvcmUA4wECAOQB5AEEY29yZQCgAwIAoQOhAwRjb3JlAN0EAgDeBN4EBGNvcmUAmgYCAJsGmwYEY29yZQBFAgBGRgRjb3JlAIICAgCDAoMCBGNvcmUAvwMCAMADwAMEY29yZQD8BAIA/QT9BARjb3JlALkGAgC6BroGBGNvcmUAZAIAZWUEY29yZQChAgIAogKiAgRjb3JlAN4DAgDfA98DBGNvcmUAmwUCAJwFnAUEY29yZQDYBgIA2QbZBgRjb3JlAIMBAgCEAYQBBGNvcmUAwAICAMECwQIEY29yZQD9AwIA/gP+AwRjb3JlALoFAgC7BbsFBGNvcmUA9wYCAPgG+AYEY29yZQCiAQIAowGjAQRjb3JlAN8CAgDgAuACBGNvcmUAnAQCAJ0EnQQEY29yZQDZBQIA2gXaBQRjb3JlAJYHAgCXB5cHBGNvcmUABAIABQUEY29yZQDBAQIAwgHCAQRjb3JlAP4CAgD/Av8CBGNvcmUAuwQCALwEvAQEY29yZQD4BQIA+QX5BQRjb3JlALUHAgC2B7YHBGNvcmUAIwIAJCQEY29yZQDgAQIA4QHhAQRjb3JlAJ0DAgCeA54DBGNvcmUA2gQCANsE2wQEY29yZQCXBgIAmAaYBgRjb3JlANQHAgDVB9UHBGNvcmUAQgIAQ0MEY29yZQD/AQIAgAKAAgRjb3JlALwDAgC9A70DBGNvcmUA+QQCAPoE+gQEY29yZQC2BgIAtwa3BgRjb3JlAGECAGJiBGNvcmUAngICAJ8CnwIEY29yZQDbAwIA3APcAwRjb3JlAJgFAgCZBZkFBGNvcmUA1QYCANYG1gYEY29yZQCAAQIAgQGBAQRjb3JlAL0CAgC+Ar4CBGNvcmUA+gMCAPsD+wMEY29yZQC3BQIAuAW4BQRjb3JlAPQGAgD1BvUGBGNvcmUAnwECAKABoAEEY29yZQDcAgIA3QLdAgRjb3JlAJkEAgCaBJoEBGNvcmUA1gUCANcF1wUEY29yZQCTBwIAlAeUBwRjb3JlAL4BAgC/Ab8BBGNvcmUA+wICAPwC/AIEY29yZQC4BAIAuQS5BARjb3JlAPUFAgD2BfYFBGNvcmUAsgcCALMHswcEY29yZQAgAgAhIQRjb3JlAN0BAgDeAd4BBGNvcmUAmgMCAJsDmwMEY29yZQDXBAIA2ATYBARjb3JlAJQGAgCVBpUGBGNvcmUA0QcCANIH0gcEY29yZQA/AgBAQARjb3JlAPwBAgD9Af0BBGNvcmUAuQMCALoDugMEY29yZQD2BAIA9wT3BARjb3JlALMGAgC0BrQGBGNvcmUAXgIAX18EY29yZQCbAgIAnAKcAgRjb3JlANgDAgDZA9kDBGNvcmUAlQUCAJYFlgUEY29yZQDSBgIA0wbTBgRjb3JlAH0CAH5+BGNvcmUAugICALsCuwIEY29yZQD3AwIA+AP4AwRjb3JlALQFAgC1BbUFBGNvcmUA8QYCAPIG8gYEY29yZQCcAQIAnQGdAQRjb3JlANkCAgDaAtoCBGNvcmUAlgQCAJcElwQEY29yZQDTBQIA1AXUBQRjb3JlAJAHAgCRB5EHBGNvcmUAuwECALwBvAEEY29yZQD4AgIA+QL5AgRjb3JlALUEAgC2BLYEBGNvcmUA8gUCAPMF8wUEY29yZQCvBwIAsAewBwRjb3JlAB0CAB4eBGNvcmUA2gECANsB2wEEY29yZQCXAwIAmAOYAwRjb3JlANQEAgDVBNUEBGNvcmUAkQYCAJIGkgYEY29yZQDOBwIAzwfPBwRjb3JlADwCAD09BGNvcmUA+QECAPoB+gEEY29yZQC2AwIAtwO3AwRjb3JlAPMEAgD0BPQEBGNvcmUAsAYCALEGsQYEY29yZQBbAgBcXARjb3JlAJgCAgCZApkCBGNvcmUA1QMCANYD1gMEY29yZQCSBQIAkwWTBQRjb3JlAM8GAgDQBtAGBGNvcmUAegIAe3sEY29yZQC3AgIAuAK4AgRjb3JlAPQDAgD1A/UDBGNvcmUAsQUCALIFsgUEY29yZQDuBgIA7wbvBgRjb3JlAJkBAgCaAZoBBGNvcmUA1gICANcC1wIEY29yZQCTBAIAlASUBARjb3JlANAFAgDRBdEFBGNvcmUAjQcCAI4HjgcEY29yZQC4AQIAuQG5AQRjb3JlAPUCAgD2AvYCBGNvcmUAsgQCALMEswQEY29yZQDvBQIA8AXwBQRjb3JlAKwHAgCtB60HBGNvcmUAGgIAGxsEY29yZQDXAQIA2AHYAQRjb3JlAJQDAgCVA5UDBGNvcmUA0QQCANIE0gQEY29yZQCOBgIAjwaPBgRjb3JlAMsHAgDMB8wHBGNvcmUAOQIAOjoEY29yZQD2AQIA9wH3AQRjb3JlALMDAgC0A7QDBGNvcmUA8AQCAPEE8QQEY29yZQCtBgIArgauBgRjb3JlAFgCAFlZBGNvcmUAlQICAJYClgIEY29yZQDSAwIA0wPTAwRjb3JlAI8FAgCQBZAFBGNvcmUAzAYCAM0GzQYEY29yZQB3AgB4eARjb3JlALQCAgC1ArUCBGNvcmUA8QMCAPID8gMEY29yZQCuBQIArwWvBQRjb3JlAOsGAgDsBuwGBGNvcmUAlgECAJcBlwEEY29yZQDTAgIA1ALUAgRjb3JlAJAEAgCRBJEEBGNvcmUAzQUCAM4FzgUEY29yZQCKBwIAiweLBwRjb3JlALUBAgC2AbYBBGNvcmUA8gICAPMC8wIEY29yZQCvBAIAsASwBARjb3JlAOwFAgDtBe0FBGNvcmUAqQcCAKoHqgcEY29yZQAXAgAYGARjb3JlANQBAgDVAdUBBGNvcmUAkQMCAJIDkgMEY29yZQDOBAIAzwTPBARjb3JlAIsGAgCMBowGBGNvcmUAyAcCAMkHyQcEY29yZQA2AgA3NwRjb3JlAPMBAgD0AfQBBGNvcmUAsAMCALEDsQMEY29yZQDtBAIA7gTuBARjb3JlAKoGAgCrBqsGBGNvcmUAVQIAVlYEY29yZQCSAgIAkwKTAgRjb3JlAM8DAgDQA9ADBGNvcmUAjAUCAI0FjQUEY29yZQDJBgIAygbKBgRjb3JlAHQCAHV1BGNvcmUAsQICALICsgIEY29yZQDuAwIA7wPvAwRjb3JlAKsFAgCsBawFBGNvcmUA6AYCAOkG6QYEY29yZQCTAQIAlAGUAQRjb3JlANACAgDRAtECBGNvcmUAjQQCAI4EjgQEY29yZQDKBQIAywXLBQRjb3JlAIcHAgCIB4gHBGNvcmUAsgECALMBswEEY29yZQDvAgIA8ALwAgRjb3JlAKwEAgCtBK0EBGNvcmUA6QUCAOoF6gUEY29yZQCmBwIApwenBwRjb3JlABQCABUVBGNvcmUA0QECANIB0gEEY29yZQCOAwIAjwOPAwRjb3JlAMsEAgDMBMwEBGNvcmUAiAYCAIkGiQYEY29yZQDFBwIAxgfGBwRjb3JlADMCADQ0BGNvcmUA8AECAPEB8QEEY29yZQCtAwIArgOuAwRjb3JlAOoEAgDrBOsEBGNvcmUApwYCAKgGqAYEY29yZQBSAgBTUwRjb3JlAI8CAgCQApACBGNvcmUAzAMCAM0DzQMEY29yZQCJBQIAigWKBQRjb3JlAMYGAgDHBscGBGNvcmUAcQIAcnIEY29yZQCuAgIArwKvAgRjb3JlAOsDAgDsA+wDBGNvcmUAqAUCAKkFqQUEY29yZQDlBgIA5gbmBgRjb3JlAJABAgCRAZEBBGNvcmUAzQICAM4CzgIEY29yZQCKBAIAiwSLBARjb3JlAMcFAgDIBcgFBGNvcmUAhAcCAIUHhQcEY29yZQCvAQIAsAGwAQRjb3JlAOwCAgDtAu0CBGNvcmUAqQQCAKoEqgQEY29yZQDmBQIA5wXnBQRjb3JlAKMHAgCkB6QHBGNvcmUAEQIAEhIEY29yZQDOAQIAzwHPAQRjb3JlAIsDAgCMA4wDBGNvcmUAyAQCAMkEyQQEY29yZQCFBgIAhgaGBgRjb3JlAMIHAgDDB8MHBGNvcmUAMAIAMTEEY29yZQDtAQIA7gHuAQRjb3JlAKoDAgCrA6sDBGNvcmUA5wQCAOgE6AQEY29yZQCkBgIApQalBgRjb3JlAE8CAFBQBGNvcmUAjAICAI0CjQIEY29yZQDJAwIAygPKAwRjb3JlAIYFAgCHBYcFBGNvcmUAwwYCAMQGxAYEY29yZQBuAgBvbwRjb3JlAKsCAgCsAqwCBGNvcmUA6AMCAOkD6QMEY29yZQClBQIApgWmBQRjb3JlAOIGAgDjBuMGBGNvcmUAjQECAI4BjgEEY29yZQDKAgIAywLLAgRjb3JlAIcEAgCIBIgEBGNvcmUAxAUCAMUFxQUEY29yZQCBBwIAggeCBwRjb3JlAKwBAgCtAa0BBGNvcmUA6QICAOoC6gIEY29yZQCmBAIApwSnBARjb3JlAOMFAgDkBeQFBGNvcmUAoAcCAKEHoQcEY29yZQAOAgAPDwRjb3JlAMsBAgDMAcwBBGNvcmUAiAMCAIkDiQMEY29yZQDFBAIAxgTGBARjb3JlAIIGAgCDBoMGBGNvcmUAvwcCAMAHwAcEY29yZQAtAgAuLgRjb3JlAOoBAgDrAesBBGNvcmUApwMCAKgDqAMEY29yZQDkBAIA5QTlBARjb3JlAKEGAgCiBqIGBGNvcmUATAIATU0EY29yZQCJAgIAigKKAgRjb3JlAMYDAgDHA8cDBGNvcmUAgwUCAIQFhAUEY29yZQDABgIAwQbBBgRjb3JlAGsCAGxsBGNvcmUAqAICAKkCqQIEY29yZQDlAwIA5gPmAwRjb3JlAKIFAgCjBaMFBGNvcmUA3wYCAOAG4AYEY29yZQCKAQIAiwGLAQRjb3JlAMcCAgDIAsgCBGNvcmUAhAQCAIUEhQQEY29yZQDBBQIAwgXCBQRjb3JlAP4GAgD/Bv8GBGNvcmUAqQECAKoBqgEEY29yZQDmAgIA5wLnAgRjb3JlAKMEAgCkBKQEBGNvcmUA4AUCAOEF4QUEY29yZQCdBwIAngeeBwRjb3JlAAsCAAwMBGNvcmUAyAECAMkByQEEY29yZQCFAwIAhgOGAwRjb3JlAMIEAgDDBMMEBGNvcmUA/wUCAIAGgAYEY29yZQC8BwIAvQe9BwRjb3JlACoCACsrBGNvcmUA5wECAOgB6AEEY29yZQCkAwIApQOlAwRjb3JlAOEEAgDiBOIEBGNvcmUAngYCAJ8GnwYEY29yZQBJAgBKSgRjb3JlAIYCAgCHAocCBGNvcmUAwwMCAMQDxAMEY29yZQCABQIAgQWBBQRjb3JlAL0GAgC+Br4GBGNvcmUAaAIAaWkEY29yZQClAgIApgKmAgRjb3JlAOIDAgDjA+MDBGNvcmUAnwUCAKAFoAUEY29yZQDcBgIA3QbdBgRjb3JlAIcBAgCIAYgBBGNvcmUAxAICAMUCxQIEY29yZQCBBAIAggSCBARjb3JlAL4FAgC/Bb8FBGNvcmUA+wYCAPwG/AYEY29yZQCmAQIApwGnAQRjb3JlAOMCAgDkAuQCBGNvcmUAoAQCAKEEoQQEY29yZQDdBQIA3gXeBQRjb3JlAJoHAgCbB5sHBGNvcmUACAIACQkEY29yZQDFAQIAxgHGAQRjb3JlAIIDAgCDA4MDBGNvcmUAvwQCAMAEwAQEY29yZQD8BQIA/QX9BQRjb3JlALkHAgC6B7oHBGNvcmUAJwIAKCgEY29yZQDkAQIA5QHlAQRjb3JlAKEDAgCiA6IDBGNvcmUA3gQCAN8E3wQEY29yZQCbBgIAnAacBgRjb3JlAEYCAEdHBGNvcmUAgwICAIQChAIEY29yZQDAAwIAwQPBAwRjb3JlAP0EAgD+BP4EBGNvcmUAugYCALsGuwYEY29yZQBlAgBmZgRjb3JlAKICAgCjAqMCBGNvcmUA3wMCAOAD4AMEY29yZQCcBQIAnQWdBQRjb3JlANkGAgDaBtoGBGNvcmUAhAECAIUBhQEEY29yZQDBAgIAwgLCAgRjb3JlAP4DAgD/A/8DBGNvcmUAuwUCALwFvAUEY29yZQD4BgIA+Qb5BgRjb3JlAKMBAgCkAaQBBGNvcmUA4AICAOEC4QIEY29yZQCdBAIAngSeBARjb3JlANoFAgDbBdsFBGNvcmUAlwcCAJgHmAcEY29yZQAFAgAGBgRjb3JlAMIBAgDDAcMBBGNvcmUA/wICAIADgAMEY29yZQC8BAIAvQS9BARjb3JlAPkFAgD6BfoFBGNvcmUAtgcCALcHtwcEY29yZQAkAgAlJQRjb3JlAOEBAgDiAeIBBGNvcmUAngMCAJ8DnwMEY29yZQDbBAIA3ATcBARjb3JlAJgGAgCZBpkGBGNvcmUA1QcCANYH1gcEY29yZQBDAgBERARjb3JlAIACAgCBAoECBGNvcmUAvQMCAL4DvgMEY29yZQD6BAIA+wT7BARjb3JlALcGAgC4BrgGBGNvcmUAYgIAY2MEY29yZQCfAgIAoAKgAgRjb3JlANwDAgDdA90DBGNvcmUAmQUCAJoFmgUEY29yZQDWBgIA1wbXBgRjb3JlAIEBAgCCAYIBBGNvcmUAvgICAL8CvwIEY29yZQD7AwIA/AP8AwRjb3JlALgFAgC5BbkFBGNvcmUA9QYCAPYG9gYEY29yZQCgAQIAoQGhAQRjb3JlAN0CAgDeAt4CBGNvcmUAmgQCAJsEmwQEY29yZQDXBQIA2AXYBQRjb3JlAJQHAgCVB5UHBGNvcmUAAgEAAAMFY3JhdGUAvwECAMABwAEEY29yZQD8AgIA/QL9AgRjb3JlALkEAgC6BLoEBGNvcmUA9gUCAPcF9wUEY29yZQCzBwIAtAe0BwRjb3JlACECACIiBGNvcmUA3gECAN8B3wEEY29yZQCbAwIAnAOcAwRjb3JlANgEAgDZBNkEBGNvcmUAlQYCAJYGlgYEY29yZQDSBwIA0wfTBwRjb3JlAEACAEFBBGNvcmUA/QECAP4B/gEEY29yZQC6AwIAuwO7AwRjb3JlAPcEAgD4BPgEBGNvcmUAtAYCALUGtQYEY29yZQBfAgBgYARjb3JlAJwCAgCdAp0CBGNvcmUA2QMCANoD2gMEY29yZQCWBQIAlwWXBQRjb3JlANMGAgDUBtQGBGNvcmUAfgIAf38EY29yZQC7AgIAvAK8AgRjb3JlAPgDAgD5A/kDBGNvcmUAtQUCALYFtgUEY29yZQDyBgIA8wbzBgRjb3JlAJ0BAgCeAZ4BBGNvcmUA2gICANsC2wIEY29yZQCXBAIAmASYBARjb3JlANQFAgDVBdUFBGNvcmUAkQcCAJIHkgcEY29yZQAAAAACAAACAAAAAgEAAAAAAAAAAAAAAAAAAAAAAAAAAQAJc3RyaW5naWZ5AAIDANkCEl0AAf+KA2YCAAAAAQECHwECE5fkCN4S968Azx+eshM1L/sBAAtpbmNsdWRlX3N0cgACAADRSyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMoHpFEUMl3gAQAJc3RyaW5naWZ5AAIDANkCEpoCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAEj5YTwOQ0JhAQALaW5jbHVkZV9zdHIAAgAAhJEBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968At24D2lwghBsBAAlzdHJpbmdpZnkAAgMA2QIS1wMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AQa7jm7xNV/kBAAlzdHJpbmdpZnkAAgMA2QISDgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAZqdOqc4+ZDgEAC2luY2x1ZGVfc3RyAAIAANAuJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AduMDovsoVgABAAlzdHJpbmdpZnkAAgMA2QISywEAAf+KA2YCAAAAAQECHwECE5fkCN4S968A7FgrZI0qUYgBAAtpbmNsdWRlX3N0cgACAACDdCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAF4LGpbT1ZD5AQAJc3RyaW5naWZ5AAIDANkCEogDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevALRSpNNeSVz/AQAJc3RyaW5naWZ5AAIDAJEDERMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AngD+z6DcItcBAAtpbmNsdWRlX3N0cgACAADPESYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKB5fSrkeTrmAQAJc3RyaW5naWZ5AAIDANkCEnwAAf+KA2YCAAAAAQECHwECE5fkCN4S968AfjJzriYwilgBAAtpbmNsdWRlX3N0cgACAACCVyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHSH2Ot+W1E6AQAJc3RyaW5naWZ5AAIDANkCErkCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHRCofe5enUqAQALaW5jbHVkZV9zdHIAAgAAtZwBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Aw/9s/F5YyJUBAAlzdHJpbmdpZnkAAgMA2QISLQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCD/QnMxDV49AEAC2luY2x1ZGVfc3RyAAIAAIE6JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AGbrsoKPZsxIBAAlzdHJpbmdpZnkAAgMA2QIS6gEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AAQrQj++mPkoBAAtpbmNsdWRlX3N0cgACAAC0fyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJDgm4lEw5YeAQAJc3RyaW5naWZ5AAIDANkCEqcDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMMiHtCxeW68AQALaW5jbHVkZV9zdHIAAgAAgB0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAAQrD7lPNMawEACXN0cmluZ2lmeQACAwDZAhKbAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDUBO9zclrlGAEAC2luY2x1ZGVfc3RyAAIAALNiJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AN7ksZt0NatQBAAlzdHJpbmdpZnkAAgMA2QIS2AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AutDHda3/v4MBAAtpbmNsdWRlX3N0cgACAADmpwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCmkkzKnOKuaAEACXN0cmluZ2lmeQACAwDZAhJMAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHNjT5xG0GwNAQALaW5jbHVkZV9zdHIAAgAAskUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDVRKjhJ1LdPQEACXN0cmluZ2lmeQACAwDZAhKJAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDJ9oFUP+rfZgEAC2luY2x1ZGVfc3RyAAIAAOWKASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANbWSG//pwM6AQAJc3RyaW5naWZ5AAIDANkCEsYDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAKH0QQnGVRxiAQALaW5jbHVkZV9zdHIAAgAAsSgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD4vM7DBd44uQEACXN0cmluZ2lmeQACAwDZAhK6AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAHKjQcWZhHgQEAC2luY2x1ZGVfc3RyAAIAAORtJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AaMlaH7uCDxYBAAlzdHJpbmdpZnkAAgMA2QIS9wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A1IwNqeom7tEBAAtpbmNsdWRlX3N0cgACAACXswEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBJ4S5NjlxRcQEAC2luY2x1ZGVfc3RyAAIAALALJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AqEhIjTmxG4kBAAlzdHJpbmdpZnkAAgMA2QISawAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCF5djQ6TQZlQEAC2luY2x1ZGVfc3RyAAIAAONQJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A/NHe9scYuLwBAAlzdHJpbmdpZnkAAgMA2QISqAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A9X0doGwdwBQBAAtpbmNsdWRlX3N0cgACAACWlgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBNgL2dUiI1WgEACXN0cmluZ2lmeQACAwCRAxEQAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevALSHbtVx0YyQAQAJc3RyaW5naWZ5AAIDANkCEhwAAf+KA2YCAAAAAQECHwECE5fkCN4S968A/eapbuUm3bMBAAtpbmNsdWRlX3N0cgACAADiMyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJceyjoSEP2fAQAJc3RyaW5naWZ5AAIDANkCEtkBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOYT+iin/ruLAQALaW5jbHVkZV9zdHIAAgAAlXkmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC7olXTc5BPLgEACXN0cmluZ2lmeQACAwDZAhKWAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCD9dJ81f6RZwEAC2luY2x1ZGVfc3RyAAIAAOEWJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AefprMW00GPkBAAlzdHJpbmdpZnkAAgMA2QISigEAAf+KA2YCAAAAAQECHwECE5fkCN4S968A5Sgs8tCE9IoBAAtpbmNsdWRlX3N0cgACAACUXCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKXbkn3mzy7eAQAJc3RyaW5naWZ5AAIDANkCEscCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADpnsdycYw0BAQALaW5jbHVkZV9zdHIAAgAAx6EBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AIlbyo/mw2MoBAAlzdHJpbmdpZnkAAgMA2QISOwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB1IUXfcXjYCgEAC2luY2x1ZGVfc3RyAAIAAJM/JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AA6rHznUS5eEBAAlzdHJpbmdpZnkAAgMA2QIS+AEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AJqTCkGbUqhUBAAtpbmNsdWRlX3N0cgACAADGhAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDhvMcNmBKwBwEACXN0cmluZ2lmeQACAwDZAhK1AwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDP3eh8vsm04AEAC2luY2x1ZGVfc3RyAAIAAJIiJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A0E3aIbCxyiMBAAlzdHJpbmdpZnkAAgMA2QISqQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AWdKe1IoPf7MBAAtpbmNsdWRlX3N0cgACAADFZyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAG+ll3iwGxQKAQAJc3RyaW5naWZ5AAIDANkCEuYCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHLvtP/MUnKMAQALaW5jbHVkZV9zdHIAAgAA+KwBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ADt1paYLXNwYBAAlzdHJpbmdpZnkAAgMA2QISWgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDIIYXBkB2fUwEAC2luY2x1ZGVfc3RyAAIAAMRKJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AvpXJ3nK3sf4BAAlzdHJpbmdpZnkAAgMA2QISlwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AckEPBnezZPIBAAtpbmNsdWRlX3N0cgACAAD3jwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC66V4FqEWSZAEACXN0cmluZ2lmeQACAwDZAhLUAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBTWFbXOZ/aGwEACXN0cmluZ2lmeQACAwDZAhILAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIvqxHaE8Rn9AQALaW5jbHVkZV9zdHIAAgAAwy0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAiAEPj7NgQOAEACXN0cmluZ2lmeQACAwDZAhLIAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBWvFSVb6ScTgEAC2luY2x1ZGVfc3RyAAIAAPZyJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A48XjLQXpCuMBAAlzdHJpbmdpZnkAAgMA2QIShQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AvMn+sfgSmg4BAAlzdHJpbmdpZnkAAgMAkQMRDQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDrUrvMR22EMwEAC2luY2x1ZGVfc3RyAAIAAMIQJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A7k8b1EeqAr0BAAlzdHJpbmdpZnkAAgMA2QISeQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDNJXimlvScGQEAC2luY2x1ZGVfc3RyAAIAAPVVJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AVvayDlTaxWYBAAlzdHJpbmdpZnkAAgMA2QIStgIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ay/ePbcY4H5QBAAtpbmNsdWRlX3N0cgACAAComwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBU5PNMuPoKiAEACXN0cmluZ2lmeQACAwDZAhIqAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADBWW5W53P0OAQALaW5jbHVkZV9zdHIAAgAA9DgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDZi3x2qlT+KgEACXN0cmluZ2lmeQACAwDZAhLnAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCHIbOCXPWS5wEAC2luY2x1ZGVfc3RyAAIAAKd+JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AlmtGF9xBIfgBAAlzdHJpbmdpZnkAAgMA2QISpAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AIU6wnfmePugBAAtpbmNsdWRlX3N0cgACAADzGyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALEvSLbi5j3ZAQAJc3RyaW5naWZ5AAIDANkCEpgBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHvQQZZA+VuGAQALaW5jbHVkZV9zdHIAAgAApmEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD/n+mG3Iry7QEACXN0cmluZ2lmeQACAwDZAhLVAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDj8Yo1idr7jwEAC2luY2x1ZGVfc3RyAAIAANmmASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGae7vHlKETdAQAJc3RyaW5naWZ5AAIDANkCEkkAAf+KA2YCAAAAAQECHwECE5fkCN4S968ATjG39MK5OSQBAAtpbmNsdWRlX3N0cgACAAClRCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMuhyNaatD2/AQAJc3RyaW5naWZ5AAIDANkCEoYCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAA6ytPLFlF8oAQALaW5jbHVkZV9zdHIAAgAA2IkBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AWN5MHESGmd8BAAlzdHJpbmdpZnkAAgMA2QISwwMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AlYhN9z/RQasBAAtpbmNsdWRlX3N0cgACAACkJyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAC/LzGIbp2F4AQAJc3RyaW5naWZ5AAIDANkCErcBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGCfkoIpWpL3AQALaW5jbHVkZV9zdHIAAgAA12wmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD5ZNg6SRLX2wEACXN0cmluZ2lmeQACAwDZAhL0AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDKFRFkqOn4GAEAC2luY2x1ZGVfc3RyAAIAAIqyASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAD6gx2tv9wUDAQALaW5jbHVkZV9zdHIAAgAAowomAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCk67UUmr1qJQEACXN0cmluZ2lmeQACAwDZAhJoAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHkeHNqjS4baAQALaW5jbHVkZV9zdHIAAgAA1k8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC85Qg7LUllTgEACXN0cmluZ2lmeQACAwDZAhKlAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBRBL0ux+y1QQEAC2luY2x1ZGVfc3RyAAIAAImVASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANJYQnUmsVeqAQAJc3RyaW5naWZ5AAIDAJEDEQoAAf+KA2YCAAAAAQECHwECE5fkCN4S968AxGPfndxHWwMBAAlzdHJpbmdpZnkAAgMA2QISGQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDVSBUsLxZ9GgEAC2luY2x1ZGVfc3RyAAIAANUyJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ABJCQ4RrLbfkBAAlzdHJpbmdpZnkAAgMA2QIS1gEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AkZLWiyit7v0BAAtpbmNsdWRlX3N0cgACAACIeCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevADctuJKMfPtlAQAJc3RyaW5naWZ5AAIDANkCEpMDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFF7USeo8v8sAQALaW5jbHVkZV9zdHIAAgAA1BUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC4xWAHN12IgwEACXN0cmluZ2lmeQACAwDZAhKHAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDvadmDki7mYQEAC2luY2x1ZGVfc3RyAAIAAIdbJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AAGuxQicoesIBAAlzdHJpbmdpZnkAAgMA2QISxAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968ArRQSwvPkgfkBAAtpbmNsdWRlX3N0cgACAAC6oAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA14fxwG/NY3gEACXN0cmluZ2lmeQACAwDZAhI4AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADoycT9Sn2OvAQALaW5jbHVkZV9zdHIAAgAAhj4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCK8dTl0+TOAQEACXN0cmluZ2lmeQACAwDZAhL1AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBqexvp3/P2kQEAC2luY2x1ZGVfc3RyAAIAALmDASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOGXuHfwJlVVAQAJc3RyaW5naWZ5AAIDANkCErIDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAG2pA4xQ9iyFAQALaW5jbHVkZV9zdHIAAgAAhSEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDDxThVwoYphQEACXN0cmluZ2lmeQACAwDZAhKmAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBjxU3CDd+t9AEAC2luY2x1ZGVfc3RyAAIAALhmJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A4BxLMM9n2/gBAAlzdHJpbmdpZnkAAgMA2QIS4wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AsplrZMXcFL8BAAtpbmNsdWRlX3N0cgACAADrqwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDe/l+N94n6OgEACXN0cmluZ2lmeQACAwDZAhJXAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIsRpkvaZeV0AQALaW5jbHVkZV9zdHIAAgAAt0kmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCe48qHbgWvBQEACXN0cmluZ2lmeQACAwDZAhKUAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCU8KGnSfLCtgEAC2luY2x1ZGVfc3RyAAIAAOqOASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABgpGEOGCud0AQAJc3RyaW5naWZ5AAIDANkCEtEDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAM76XUS3FNH0AQAJc3RyaW5naWZ5AAIDANkCEggAAf+KA2YCAAAAAQECHwECE5fkCN4S968AbZQTLW4DPxABAAtpbmNsdWRlX3N0cgACAAC2LCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABBFPNghxM8JAQAJc3RyaW5naWZ5AAIDANkCEsUBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAITVq9fGNCprAQALaW5jbHVkZV9zdHIAAgAA6XEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB8qGBDUJgjvwEACXN0cmluZ2lmeQACAwDZAhKCAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDCsLRLX8zozwEACXN0cmluZ2lmeQACAwCRAxEHAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAG4npv8vOM3wAQALaW5jbHVkZV9zdHIAAgAAtQ8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD6B8xMK68xmgEACXN0cmluZ2lmeQACAwDZAhJ2AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGzreMA++7hMAQALaW5jbHVkZV9zdHIAAgAA6FQmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA/5WwwM9flZwEACXN0cmluZ2lmeQACAwDZAhKzAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCgDm3vbV8nLwEAC2luY2x1ZGVfc3RyAAIAAJuaASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPt2MFOw0Qh9AQAJc3RyaW5naWZ5AAIDANkCEicAAf+KA2YCAAAAAQECHwECE5fkCN4S968A2wIJ2HNMncwBAAtpbmNsdWRlX3N0cgACAADnNyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAD/cfqHQ2Q1kAQAJc3RyaW5naWZ5AAIDANkCEuQBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAEGNgdQXg/WUAQALaW5jbHVkZV9zdHIAAgAAmn0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCEs/oVmts+LQEACXN0cmluZ2lmeQACAwDZAhKhAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD6Zaap6dan6AEAC2luY2x1ZGVfc3RyAAIAAOYaJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AM5RZrFwKo1IBAAlzdHJpbmdpZnkAAgMA2QISlQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AY85CNVMQOeUBAAtpbmNsdWRlX3N0cgACAACZYCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKCaS/dxr6/lAQAJc3RyaW5naWZ5AAIDANkCEtICAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFzNjr4Y5WX1AQALaW5jbHVkZV9zdHIAAgAAzKUBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968APjO1zwxnW7sBAAlzdHJpbmdpZnkAAgMA2QISRgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAnIhGhaOU0EwEAC2luY2x1ZGVfc3RyAAIAAJhDJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ApGoyH8Lj6voBAAlzdHJpbmdpZnkAAgMA2QISgwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A/WoDWg8HAYcBAAtpbmNsdWRlX3N0cgACAADLiAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBzHeibJ68CywEACXN0cmluZ2lmeQACAwDZAhLAAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDnbnzmjO6PVAEAC2luY2x1ZGVfc3RyAAIAAJcmJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AFTFyhfgjzYwBAAlzdHJpbmdpZnkAAgMA2QIStAEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AMHlrarQC2JcBAAtpbmNsdWRlX3N0cgACAADKayYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALZ56Au3M4huAQAJc3RyaW5naWZ5AAIDANkCEvECAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAEI38NdU5YIiAQALaW5jbHVkZV9zdHIAAgAA/bABJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A7rdAtRi0+pEBAAtpbmNsdWRlX3N0cgACAACWCSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAN8H1k94wlWOAQAJc3RyaW5naWZ5AAIDANkCEmUAAf+KA2YCAAAAAQECHwECE5fkCN4S968AQbUJXcaqHvgBAAtpbmNsdWRlX3N0cgACAADJTiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevADIm9aRjIwNXAQAJc3RyaW5naWZ5AAIDANkCEqICAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMnWkfySsf0oAQALaW5jbHVkZV9zdHIAAgAA/JMBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AMzwbRZUwj70BAAlzdHJpbmdpZnkAAgMAkQMRBAAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD3dMzB479KvgEACXN0cmluZ2lmeQACAwDZAhIWAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPKmxi6qwGZWAQALaW5jbHVkZV9zdHIAAgAAyDEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCyi8jK6BktAwEACXN0cmluZ2lmeQACAwDZAhLTAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBgllldN9XO0QEAC2luY2x1ZGVfc3RyAAIAAPt2JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ANzkfEApsRk8BAAlzdHJpbmdpZnkAAgMA2QISkAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968Azpc3pKCKxkABAAtpbmNsdWRlX3N0cgACAADHFCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKNjj3jzc5LUAQAJc3RyaW5naWZ5AAIDANkCEoQBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevABEaZblyLg7uAQALaW5jbHVkZV9zdHIAAgAA+lkmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBN5NZvdA4HjwEACXN0cmluZ2lmeQACAwDZAhLBAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCKf0HHvNIeagEAC2luY2x1ZGVfc3RyAAIAAK2fASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKeceGXsJ5lLAQAJc3RyaW5naWZ5AAIDANkCEjUAAf+KA2YCAAAAAQECHwECE5fkCN4S968A8ru+YBDRS5cBAAtpbmNsdWRlX3N0cgACAAD5PCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMv4SBa8DDu7AQAJc3RyaW5naWZ5AAIDANkCEvIBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevABq8UxAxej+rAQALaW5jbHVkZV9zdHIAAgAArIIBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ANtUxj59M8HEBAAlzdHJpbmdpZnkAAgMA2QISrwMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AOV4qRbKXls4BAAtpbmNsdWRlX3N0cgACAAD4HyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAEusYKyO05NiAQAJc3RyaW5naWZ5AAIDANkCEqMBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIKymdpbYlWhAQALaW5jbHVkZV9zdHIAAgAAq2UmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBpyg/qbt6qYQEACXN0cmluZ2lmeQACAwDZAhLgAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCGqncqPOij3gEAC2luY2x1ZGVfc3RyAAIAAN6qASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPf/jCeZzdYMAQAJc3RyaW5naWZ5AAIDANkCElQAAf+KA2YCAAAAAQECHwECE5fkCN4S968A9xQE4cvmyncBAAtpbmNsdWRlX3N0cgACAACqSCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACENV7SSNcPeAQAJc3RyaW5naWZ5AAIDANkCEpECAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAM2E11cj3NjZAQALaW5jbHVkZV9zdHIAAgAA3Y0BJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AUsby6AJp12gBAAlzdHJpbmdpZnkAAgMA2QISzgMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AwQcyyeR1N24BAAlzdHJpbmdpZnkAAgMA2QISBQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBGo2tZwqVRRgEAC2luY2x1ZGVfc3RyAAIAAKkrJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AOqq23dJFJqoBAAlzdHJpbmdpZnkAAgMA2QISwgEAAf+KA2YCAAAAAQECHwECE5fkCN4S968A8htf+EGyAzIBAAtpbmNsdWRlX3N0cgACAADccCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAAk/zMDdkkOaAQAJc3RyaW5naWZ5AAIDANkCEv8CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGHH5MB8ytXLAQAJc3RyaW5naWZ5AAIDAJEDEQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AEWHm7BeB7EABAAtpbmNsdWRlX3N0cgACAACoDiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOPcO9CD/R09AQAJc3RyaW5naWZ5AAIDANkCEnMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A/XYgOURdPM8BAAtpbmNsdWRlX3N0cgACAADbUyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKkNC2YclLv9AQAJc3RyaW5naWZ5AAIDANkCErACAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADeMXOTrh2vmAQALaW5jbHVkZV9zdHIAAgAAjpkBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AaZMQm0ZwvMcBAAlzdHJpbmdpZnkAAgMA2QISJAAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBAigIUNzIgpQEAC2luY2x1ZGVfc3RyAAIAANo2JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A5QIG1/DNeasBAAlzdHJpbmdpZnkAAgMA2QIS4QEAAf+KA2YCAAAAAQECHwECE5fkCN4S968Arq/DdXTSYP4BAAtpbmNsdWRlX3N0cgACAACNfCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANzNkZFYRMPlAQAJc3RyaW5naWZ5AAIDANkCEp4DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOlsEOitjPvYAQALaW5jbHVkZV9zdHIAAgAA2RkmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCba2EgY9WpiwEACXN0cmluZ2lmeQACAwDZAhKSAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCyRzKdg36DjwEAC2luY2x1ZGVfc3RyAAIAAIxfJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AjFDf4b9RWhMBAAlzdHJpbmdpZnkAAgMA2QISzwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AgQcKtfa/1ogBAAtpbmNsdWRlX3N0cgACAAC/pAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCRKO4cL/IWXAEACXN0cmluZ2lmeQACAwDZAhJDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANKGGw2kFi/LAQALaW5jbHVkZV9zdHIAAgAAi0ImAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB/kf3f/aekGQEACXN0cmluZ2lmeQACAwDZAhKAAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC5kTEBxY5Y2AEAC2luY2x1ZGVfc3RyAAIAAL6HASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAE0F62dgcCTxAQAJc3RyaW5naWZ5AAIDANkCEr0DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOJbUYgQKNb2AQALaW5jbHVkZV9zdHIAAgAAiiUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB4ZZqW1uJ8SgEACXN0cmluZ2lmeQACAwDZAhKxAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAKT/MKYZ8t5AEAC2luY2x1ZGVfc3RyAAIAAL1qJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A64l80SCQK+EBAAlzdHJpbmdpZnkAAgMA2QIS7gIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AQBxElXWj+bsBAAtpbmNsdWRlX3N0cgACAADwrwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCohocD4vk7uQEAC2luY2x1ZGVfc3RyAAIAAIkIJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ABm41EEB8jmABAAlzdHJpbmdpZnkAAgMA2QISYgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCoZoNbBRILgwEAC2luY2x1ZGVfc3RyAAIAALxNJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A0s4xvZLHKLsBAAlzdHJpbmdpZnkAAgMA2QISnwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A6symyj9dtNIBAAtpbmNsdWRlX3N0cgACAADvkgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBNVkfXhWbHmwEACXN0cmluZ2lmeQACAwDZAhLcAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB3CeXqgS8zZwEACXN0cmluZ2lmeQACAwDZAhITAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPphDUbNyovxAQALaW5jbHVkZV9zdHIAAgAAuzAmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA4Tk3p5088dwEACXN0cmluZ2lmeQACAwDZAhLQAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB5+x0q1ydD6wEAC2luY2x1ZGVfc3RyAAIAAO51JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AR+PWNq+Ri+EBAAlzdHJpbmdpZnkAAgMA2QISjQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A+NxHocrklvABAAtpbmNsdWRlX3N0cgACAAC6EyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAF+YxNM8TyAcAQAJc3RyaW5naWZ5AAIDANkCEoEBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANB3h2ASJ59YAQALaW5jbHVkZV9zdHIAAgAA7VgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDoPiDR7A8LjgEACXN0cmluZ2lmeQACAwDZAhK+AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAtduuQkl8WpAEAC2luY2x1ZGVfc3RyAAIAAKCeASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALyFliUlob5qAQAJc3RyaW5naWZ5AAIDANkCEjIAAf+KA2YCAAAAAQECHwECE5fkCN4S968ANnryQxB2kMkBAAtpbmNsdWRlX3N0cgACAADsOyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAC+PKN5wLmN3AQAJc3RyaW5naWZ5AAIDANkCEu8BAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJvH5C9tkI/NAQALaW5jbHVkZV9zdHIAAgAAn4EBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Arb02tbhtjmEBAAlzdHJpbmdpZnkAAgMA2QISrAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AReKX/G6XPIkBAAtpbmNsdWRlX3N0cgACAADrHiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAClhPrz0X+LIAQAJc3RyaW5naWZ5AAIDANkCEqABAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAC77UW+iJotkAQALaW5jbHVkZV9zdHIAAgAAnmQmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAzOtPqXzUv5gEACXN0cmluZ2lmeQACAwDZAhLdAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDdNS6DPuIPyQEAC2luY2x1ZGVfc3RyAAIAANGpASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAFU7Ier1w7FIAQAJc3RyaW5naWZ5AAIDANkCElEAAf+KA2YCAAAAAQECHwECE5fkCN4S968ArQAaSu+CCHwBAAtpbmNsdWRlX3N0cgACAACdRyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAIiT7SRlEhYrAQAJc3RyaW5naWZ5AAIDANkCEo4CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIIP6rRoNU9UAQALaW5jbHVkZV9zdHIAAgAA0IwBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A/BeN/9p3Tv8BAAlzdHJpbmdpZnkAAgMA2QISywMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AeT0KTPOv3MABAAlzdHJpbmdpZnkAAgMA2QISAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCNFVf+4cGMTwEAC2luY2x1ZGVfc3RyAAIAAJwqJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ASXTU1PLGo9oBAAlzdHJpbmdpZnkAAgMA2QISvwEAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ab1PnRQSDyl4BAAtpbmNsdWRlX3N0cgACAADPbyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPrnEYufFp0cAQAJc3RyaW5naWZ5AAIDANkCEvwCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANphEVdRjLo3AQALaW5jbHVkZV9zdHIAAgAAgrUBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AbMCBGQxmBBABAAtpbmNsdWRlX3N0cgACAACbDSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKX74kkD4fbjAQAJc3RyaW5naWZ5AAIDANkCEnAAAf+KA2YCAAAAAQECHwECE5fkCN4S968AQ0IRFCKtaWwBAAtpbmNsdWRlX3N0cgACAADOUiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGO58djZy3qPAQAJc3RyaW5naWZ5AAIDANkCEq0CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANC4CLuqGRVOAQALaW5jbHVkZV9zdHIAAgAAgZgBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AQM6fuM149ZEBAAlzdHJpbmdpZnkAAgMA2QISIQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAUSR+LmsqHOgEAC2luY2x1ZGVfc3RyAAIAAM01JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AL7vNztREbZIBAAlzdHJpbmdpZnkAAgMA2QIS3gEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AIfwkTk5iQQoBAAtpbmNsdWRlX3N0cgACAACAeyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHz3AtYuorFHAQAJc3RyaW5naWZ5AAIDANkCEpsDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPVwyvpVRG9lAQALaW5jbHVkZV9zdHIAAgAAzBgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDnGSJRSrXwrAEACXN0cmluZ2lmeQACAwDZAhKPAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD1dLYwwxOhdgEAC2luY2x1ZGVfc3RyAAIAAP9dJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AQBrA+nyRHAcBAAlzdHJpbmdpZnkAAgMA2QISzAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A6DL/ZcA98IkBAAtpbmNsdWRlX3N0cgACAACyowEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAv1zRb/NaiLwEACXN0cmluZ2lmeQACAwDZAhJAAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADYhAJy+aodzAQALaW5jbHVkZV9zdHIAAgAA/kAmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDVuvMgjxRA+AEACXN0cmluZ2lmeQACAwDZAhL9AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBmFt+FyYYXsAEAC2luY2x1ZGVfc3RyAAIAALGGASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAB2GuLKvLXL5AQAJc3RyaW5naWZ5AAIDANkCEroDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGuJ1y83cSMwAQALaW5jbHVkZV9zdHIAAgAA/SMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCxSAghD+qfAwEACXN0cmluZ2lmeQACAwDZAhKuAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAH6dLD0YZIigEAC2luY2x1ZGVfc3RyAAIAALBpJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ApGeT7RrQ29QBAAlzdHJpbmdpZnkAAgMA2QIS6wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A48IA0ud8T+ABAAtpbmNsdWRlX3N0cgACAADjrgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBiJeB7qxXdJQEAC2luY2x1ZGVfc3RyAAIAAPwGJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ATmlCrQfwZL8BAAlzdHJpbmdpZnkAAgMA2QISXwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCFW6wwRDFKpQEAC2luY2x1ZGVfc3RyAAIAAK9MJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AtJNCwdz42bIBAAlzdHJpbmdpZnkAAgMA2QISnAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AS72/FAUyGa8BAAtpbmNsdWRlX3N0cgACAADikQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDpOhEeHnpg6AEACXN0cmluZ2lmeQACAwDZAhLZAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC8Ekdu2h7t1wEACXN0cmluZ2lmeQACAwDZAhIQAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAA1jVlJ+7GrZAQALaW5jbHVkZV9zdHIAAgAAri8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDyBNMjVVj4iwEACXN0cmluZ2lmeQACAwDZAhLNAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBpm7z+n9t4aAEAC2luY2x1ZGVfc3RyAAIAAOF0JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AxcP1Ss+RFLIBAAlzdHJpbmdpZnkAAgMA2QISigMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AmKv+sFAxMv8BAAlzdHJpbmdpZnkAAgMAkQMRFwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB9nuYmXAELcQEAC2luY2x1ZGVfc3RyAAIAAK0SJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AtJjdejuTK4YBAAlzdHJpbmdpZnkAAgMA2QISfgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAwgvhmeNZ6SQEAC2luY2x1ZGVfc3RyAAIAAOBXJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AhGvQ+C5Lk7sBAAlzdHJpbmdpZnkAAgMA2QISuwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AQvLx/qoy0hYBAAtpbmNsdWRlX3N0cgACAACTnQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDxPCOX0UXlogEACXN0cmluZ2lmeQACAwDZAhIvAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAC5H3rsWviRyAQALaW5jbHVkZV9zdHIAAgAA3zomAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAb04w7+kL10wEACXN0cmluZ2lmeQACAwDZAhLsAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA8xjN4xPoXcwEAC2luY2x1ZGVfc3RyAAIAAJKAASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALxxGsRNmlsBAQAJc3RyaW5naWZ5AAIDANkCEqkDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAAJ1gY2/kvzDAQALaW5jbHVkZV9zdHIAAgAA3h0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDvswYokn5OnwEACXN0cmluZ2lmeQACAwDZAhKdAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwABzAVDrDix6AEAC2luY2x1ZGVfc3RyAAIAAJFjJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AueLQNdcqRs4BAAlzdHJpbmdpZnkAAgMA2QIS2gIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AVXppxtMsTYoBAAtpbmNsdWRlX3N0cgACAADEqAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA2F/idUGz1lAEACXN0cmluZ2lmeQACAwDZAhJOAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAO1v2ZbKVzciAQALaW5jbHVkZV9zdHIAAgAAkEYmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDJC2r8mNfbIgEACXN0cmluZ2lmeQACAwDZAhKLAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDiMx0Fv1AQ7QEAC2luY2x1ZGVfc3RyAAIAAMOLASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANFIyUV52yHIAQAJc3RyaW5naWZ5AAIDANkCEsgDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAC43i98+H6q9AgAAAAACAAACAQEOcHJlbHVkZV9pbXBvcnQAAAIAAJfkCN4S968AHJ3zOQEsm9ABAAtpbmNsdWRlX3N0cgACAACPKSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAFgNz46zP9+VAQAJc3RyaW5naWZ5AAIDANkCErwBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAF5mBD1CDYsnAQALaW5jbHVkZV9zdHIAAgAAwm4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC40g1zg95uCAEACXN0cmluZ2lmeQACAwDZAhL5AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC6VgE0jsR9wwEAC2luY2x1ZGVfc3RyAAIAAPWzASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOQsbtoVDqiFAQALaW5jbHVkZV9zdHIAAgAAjgwmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD1doeZ7lPBTQEACXN0cmluZ2lmeQACAwDZAhJtAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAF+PTaEs5iBqAQALaW5jbHVkZV9zdHIAAgAAwVEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCMmHI/ku/09wEACXN0cmluZ2lmeQACAwDZAhKqAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAKaClZaUVodQEAC2luY2x1ZGVfc3RyAAIAAPSWASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAEPWhf59xkYYAQAJc3RyaW5naWZ5AAIDAJEDERQAAf+KA2YCAAAAAQECHwECE5fkCN4S968A77O2S8lmzWwBAAlzdHJpbmdpZnkAAgMA2QISHgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDS8sCWpJhzzgEAC2luY2x1ZGVfc3RyAAIAAMA0JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AwzquQ26uQ+MBAAlzdHJpbmdpZnkAAgMA2QIS2wEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AP7em1HU3c08BAAtpbmNsdWRlX3N0cgACAADzeSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACwWdx1OiGsyAQAJc3RyaW5naWZ5AAIDANkCEpgDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAO5QlUz2gK8uAQALaW5jbHVkZV9zdHIAAgAAvxcmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCF1C+mujzNvQEACXN0cmluZ2lmeQACAwDZAhKMAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAYBpDkOa5lIgEAC2luY2x1ZGVfc3RyAAIAAPJcJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ARArRLMKWv3MBAAlzdHJpbmdpZnkAAgMA2QISyQIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A1W8OUKI4w74BAAtpbmNsdWRlX3N0cgACAAClogEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDxOrhbTng+GgEACXN0cmluZ2lmeQACAwDZAhI9AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGPZlpMBpQ1AAQALaW5jbHVkZV9zdHIAAgAA8T8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA9BjE0bGwHiQEACXN0cmluZ2lmeQACAwDZAhL6AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD3yyHq0Ch5egEAC2luY2x1ZGVfc3RyAAIAAKSFASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJlVwf/7NLgkAQAJc3RyaW5naWZ5AAIDANkCErcDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIfVgHakCTOSAQALaW5jbHVkZV9zdHIAAgAA8CImAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC3/vH9OZWBfQEACXN0cmluZ2lmeQACAwDZAhKrAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDI8xz0+qLK2AEAC2luY2x1ZGVfc3RyAAIAAKNoJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AHgRe3g2e1RoBAAlzdHJpbmdpZnkAAgMA2QIS6AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AH55ys74z5UcBAAtpbmNsdWRlX3N0cgACAADWrQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAXRwDovurs9gEACXN0cmluZ2lmeQACAwDZAhJcAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAAPAJ1NPEPNSAQALaW5jbHVkZV9zdHIAAgAAoksmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCCvzPd3RqN4AEACXN0cmluZ2lmeQACAwDZAhKZAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAADCf1Uxw+CAEAC2luY2x1ZGVfc3RyAAIAANWQASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOsI4o0VNpehAQAJc3RyaW5naWZ5AAIDANkCEtYDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPG+p0xlvgs2AQAJc3RyaW5naWZ5AAIDANkCEg0AAf+KA2YCAAAAAQECHwECE5fkCN4S968AZ3Skqcz9YHgBAAtpbmNsdWRlX3N0cgACAAChLiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGDh+U3kUaelAQAJc3RyaW5naWZ5AAIDANkCEsoBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAD85BVSoSoZJAQALaW5jbHVkZV9zdHIAAgAA1HMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDBZCHNchZu7QEACXN0cmluZ2lmeQACAwDZAhKHAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDa2KjzjDAlFwEACXN0cmluZ2lmeQACAwCRAxERAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHbFQB7SWhSDAQALaW5jbHVkZV9zdHIAAgAAoBEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwClspdlVtMXFAEACXN0cmluZ2lmeQACAwDZAhJ7AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAI1nDrBu9YAlAQALaW5jbHVkZV9zdHIAAgAA01YmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDJ+Ktn1BRIHwEACXN0cmluZ2lmeQACAwDZAhK4AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAYDKVuOfZ3dgEAC2luY2x1ZGVfc3RyAAIAAIacASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHtC8u6/hWMqAQAJc3RyaW5naWZ5AAIDANkCEiwAAf+KA2YCAAAAAQECHwECE5fkCN4S968AIFgyOgr6AhoBAAtpbmNsdWRlX3N0cgACAADSOSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMaAW54hTM5DAQAJc3RyaW5naWZ5AAIDANkCEukBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAH0o99h6ZlknAQALaW5jbHVkZV9zdHIAAgAAhX8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBQEj6IIAAL1AEACXN0cmluZ2lmeQACAwDZAhKmAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA+E/q8zhaYwgEAC2luY2x1ZGVfc3RyAAIAANEcJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AvG5B8HAzp5gBAAlzdHJpbmdpZnkAAgMA2QISmgEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AJ/b0VwELWf0BAAtpbmNsdWRlX3N0cgACAACEYiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJ1mK7gKbkJvAQAJc3RyaW5naWZ5AAIDANkCEtcCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevABGbvknJ3H0yAQALaW5jbHVkZV9zdHIAAgAAt6cBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AbJ+LCPRgJY4BAAlzdHJpbmdpZnkAAgMA2QISSwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBj3LhaxLUORwEAC2luY2x1ZGVfc3RyAAIAAINFJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AywCVS0VsPSUBAAlzdHJpbmdpZnkAAgMA2QISiAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AOvfTgSoSc2cBAAtpbmNsdWRlX3N0cgACAAC2igEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDFS+qciirsSgEACXN0cmluZ2lmeQACAwDZAhLFAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBNbvr/rFPlJAEAC2luY2x1ZGVfc3RyAAIAAIIoJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Av/ScPMzYDsIBAAlzdHJpbmdpZnkAAgMA2QISuQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AiHOul13wPRMBAAtpbmNsdWRlX3N0cgACAAC1bSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALknPCl8hlfXAQAJc3RyaW5naWZ5AAIDANkCEvYCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPDPbZZSB/xQAQALaW5jbHVkZV9zdHIAAgAA6LIBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Ap81Q4uSZDtMBAAtpbmNsdWRlX3N0cgACAACBCyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAL7yyfuNdxntAQAJc3RyaW5naWZ5AAIDANkCEmoAAf+KA2YCAAAAAQECHwECE5fkCN4S968AkvdbYzDxRBcBAAtpbmNsdWRlX3N0cgACAAC0UCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAAqOR4LuYdNsAQAJc3RyaW5naWZ5AAIDANkCEqcCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPUVxpjnMbGOAQALaW5jbHVkZV9zdHIAAgAA55UBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AomzWrQtJygMBAAlzdHJpbmdpZnkAAgMAkQMRDgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCAYzQpqaH3IwEACXN0cmluZ2lmeQACAwDZAhIbAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMvYWZRVZjNwAQALaW5jbHVkZV9zdHIAAgAAszMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCbGXfkHGsebgEACXN0cmluZ2lmeQACAwDZAhLYAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDhOsYdJs9ruwEAC2luY2x1ZGVfc3RyAAIAAOZ4JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A8UbHKUws09sBAAlzdHJpbmdpZnkAAgMA2QISlQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A5xoAc0jPl0UBAAtpbmNsdWRlX3N0cgACAACyFiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMqzy99LnSg6AQAJc3RyaW5naWZ5AAIDANkCEokBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADkUWe9/taB+AQALaW5jbHVkZV9zdHIAAgAA5VsmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAhXhNU+iJEjgEACXN0cmluZ2lmeQACAwDZAhLGAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBLLxXp3LEeUAEAC2luY2x1ZGVfc3RyAAIAAJihASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKk47Mib7c30AQAJc3RyaW5naWZ5AAIDANkCEjoAAf+KA2YCAAAAAQECHwECE5fkCN4S968AmyeOORbb7dcBAAtpbmNsdWRlX3N0cgACAADkPiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGHSW/IaT3H7AQAJc3RyaW5naWZ5AAIDANkCEvcBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFM9WSHcRwTHAQALaW5jbHVkZV9zdHIAAgAAl4QBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AoCbfKNOWxbsBAAlzdHJpbmdpZnkAAgMA2QIStAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ajt+3hWVAmekBAAtpbmNsdWRlX3N0cgACAADjISYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALZP0F9KQGvgAQAJc3RyaW5naWZ5AAIDANkCEqgBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHvcXoO+A+6EAQALaW5jbHVkZV9zdHIAAgAAlmcmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDwdh7FwiKkFgEACXN0cmluZ2lmeQACAwDZAhLlAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBX68lJZwYG0QEAC2luY2x1ZGVfc3RyAAIAAMmsASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACY1eW48kMc3AQAJc3RyaW5naWZ5AAIDANkCElkAAf+KA2YCAAAAAQECHwECE5fkCN4S968AEQtZx4a8+5EBAAtpbmNsdWRlX3N0cgACAACVSiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABy+I0OaIsAIAQAJc3RyaW5naWZ5AAIDANkCEpYCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFVswTnrYFOBAQALaW5jbHVkZV9zdHIAAgAAyI8BJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968APF0tXlguZD4BAAlzdHJpbmdpZnkAAgMA2QIS0wMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A/9z3xoJV2rkBAAlzdHJpbmdpZnkAAgMA2QISCgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB+NmxqPf8a/wEAC2luY2x1ZGVfc3RyAAIAAJQtJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Ah5gnvobIH5IBAAlzdHJpbmdpZnkAAgMA2QISxwEAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ag2lNMZc2ZckBAAtpbmNsdWRlX3N0cgACAADHciYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAG34Ohz6BTTGAQAJc3RyaW5naWZ5AAIDANkCEoQDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAEriDuJN54LQAQAJc3RyaW5naWZ5AAIDAJEDEQsAAf+KA2YCAAAAAQECHwECE5fkCN4S968Al4DqMvcrM7ABAAtpbmNsdWRlX3N0cgACAACTECYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAN9OT0MtMEJsAQAJc3RyaW5naWZ5AAIDANkCEngAAf+KA2YCAAAAAQECHwECE5fkCN4S968Aqv0dqBVoTNEBAAtpbmNsdWRlX3N0cgACAADGVSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHWegVcZEpLJAQAJc3RyaW5naWZ5AAIDANkCErUCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMvSNj1oCDQ8AQALaW5jbHVkZV9zdHIAAgAA+ZoBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968At3AgxmuQ+tcBAAlzdHJpbmdpZnkAAgMA2QISKQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCK3v6Eqi5wIgEAC2luY2x1ZGVfc3RyAAIAAMU4JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ACTfODUn/8HoBAAlzdHJpbmdpZnkAAgMA2QIS5gEAAf+KA2YCAAAAAQECHwECE5fkCN4S968A9jsuEB/r3WgBAAtpbmNsdWRlX3N0cgACAAD4fSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAIicQcXJBq9dAQAJc3RyaW5naWZ5AAIDANkCEqMDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFbqAxZ8z8eWAQALaW5jbHVkZV9zdHIAAgAAxBsmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD1tRJoXTi/DgEACXN0cmluZ2lmeQACAwDZAhKXAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDsJukQqR9tHgEAC2luY2x1ZGVfc3RyAAIAAPdgJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A1m2ir/zvGecBAAlzdHJpbmdpZnkAAgMA2QIS1AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A7QWJKNDeJNcBAAtpbmNsdWRlX3N0cgACAACqpgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDEyjAyuYIUVgEACXN0cmluZ2lmeQACAwDZAhJIAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADnxPADLpRS+AQALaW5jbHVkZV9zdHIAAgAA9kMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDbnbf3mL5wFAEACXN0cmluZ2lmeQACAwDZAhKFAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCUL5Yod9mNGwEAC2luY2x1ZGVfc3RyAAIAAKmJASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAEJRVBNsEvOEAQAJc3RyaW5naWZ5AAIDANkCEsIDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGzqUAge+9qSAQALaW5jbHVkZV9zdHIAAgAA9SYmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAEuDLkSbdhwwEACXN0cmluZ2lmeQACAwDZAhK2AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCQCjJe/8OmKgEAC2luY2x1ZGVfc3RyAAIAAKhsJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Aw6N6Orbc5t8BAAlzdHJpbmdpZnkAAgMA2QIS8wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Akpc4HUZa2JIBAAtpbmNsdWRlX3N0cgACAADbsQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCOksGfjga5kgEAC2luY2x1ZGVfc3RyAAIAAPQJJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A4QhwPf2b44MBAAlzdHJpbmdpZnkAAgMA2QISZwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA3sPjxfdNyeAEAC2luY2x1ZGVfc3RyAAIAAKdPJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Ag6Ldswceyc8BAAlzdHJpbmdpZnkAAgMA2QISpAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AE1PqbRmYXCIBAAtpbmNsdWRlX3N0cgACAADalAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA2M90SSE17SgEACXN0cmluZ2lmeQACAwCRAxEIAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAAN4HznEpJHsAQAJc3RyaW5naWZ5AAIDANkCEhgAAf+KA2YCAAAAAQECHwECE5fkCN4S968AQvIsTNMHDyIBAAtpbmNsdWRlX3N0cgACAACmMiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAF5Wlw+Qam+SAQAJc3RyaW5naWZ5AAIDANkCEtUBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAEIgb2EUXqNLAQALaW5jbHVkZV9zdHIAAgAA2XcmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBUOj9LSylEMAEACXN0cmluZ2lmeQACAwDZAhKSAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAc8s86amUaAwEAC2luY2x1ZGVfc3RyAAIAAKUVJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AK01ir/GPG/QBAAlzdHJpbmdpZnkAAgMA2QIShgEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AqrHXksGTdgkBAAtpbmNsdWRlX3N0cgACAADYWiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAD+QxfKx4//0AQAJc3RyaW5naWZ5AAIDANkCEsMCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevACUlngfJR+8pAQALaW5jbHVkZV9zdHIAAgAAi6ABJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AhbOFx0iSwgMBAAlzdHJpbmdpZnkAAgMA2QISNwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBAqewtHKmOKAEAC2luY2x1ZGVfc3RyAAIAANc9JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AgQhG56gCNEkBAAlzdHJpbmdpZnkAAgMA2QIS9AEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AMWJKvHG6sysBAAtpbmNsdWRlX3N0cgACAACKgwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDrliAOetr25QEACXN0cmluZ2lmeQACAwDZAhKxAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBYWwBV5ZjEuQEAC2luY2x1ZGVfc3RyAAIAANYgJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AZf6SF72fKKABAAlzdHJpbmdpZnkAAgMA2QISpQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AeNbt7fxhz6kBAAtpbmNsdWRlX3N0cgACAACJZiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPa5aMyxC+PrAQAJc3RyaW5naWZ5AAIDANkCEuICAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFroUrjL0ZFeAQALaW5jbHVkZV9zdHIAAgAAvKsBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AL90BWc3ttnUBAAlzdHJpbmdpZnkAAgMA2QISVgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD6LP8UxLH/mAEAC2luY2x1ZGVfc3RyAAIAAIhJJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AY5lBiuQ9RuMBAAlzdHJpbmdpZnkAAgMA2QISkwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AdAYCopVW5QkBAAtpbmNsdWRlX3N0cgACAAC7jgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBEn/Xk3bhUuwEACXN0cmluZ2lmeQACAwDZAhLQAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCVZOJcvMI+/AEACXN0cmluZ2lmeQACAwDZAhIHAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJ9yTzmxBb7PAQALaW5jbHVkZV9zdHIAAgAAhywmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB1G8QWyfendgEACXN0cmluZ2lmeQACAwDZAhLEAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA3pDhUzXJhPQEAC2luY2x1ZGVfc3RyAAIAALpxJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AVeS2HTtBG1MBAAlzdHJpbmdpZnkAAgMA2QISgQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AZeoyHaeQ8u0BAAlzdHJpbmdpZnkAAgMAkQMRBQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDlW9W2VjVJaQEAC2luY2x1ZGVfc3RyAAIAAIYPJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ATvtgO3f6/nABAAlzdHJpbmdpZnkAAgMA2QISdQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCQb9NxdPoh2wEAC2luY2x1ZGVfc3RyAAIAALlUJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AVPrH4ufplqUBAAlzdHJpbmdpZnkAAgMA2QISsgIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ayiarc5SJY6gBAAtpbmNsdWRlX3N0cgACAADsmQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA41+vlKM5n2wEACXN0cmluZ2lmeQACAwDZAhImAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADVVfJgnZFuHAQALaW5jbHVkZV9zdHIAAgAAuDcmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDjqB0T+17HygEACXN0cmluZ2lmeQACAwDZAhLjAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBMe9e5t2yU0gEAC2luY2x1ZGVfc3RyAAIAAOt8JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AGHTiHm7Ln6oBAAlzdHJpbmdpZnkAAgMA2QISoAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968ADiZ4/y93J/IBAAtpbmNsdWRlX3N0cgACAAC3GiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAD2f51vZIrPzAQAJc3RyaW5naWZ5AAIDANkCEpQBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGieq2PLgQPaAQALaW5jbHVkZV9zdHIAAgAA6l8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBRCum7qFk/WAEACXN0cmluZ2lmeQACAwDZAhLRAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCbTo5o9UeFeQEAC2luY2x1ZGVfc3RyAAIAAJ2lASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAP5ZPn0R8aK/AQAJc3RyaW5naWZ5AAIDANkCEkUAAf+KA2YCAAAAAQECHwECE5fkCN4S968A+f1YZU87AH0BAAtpbmNsdWRlX3N0cgACAADpQiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABgfQaS24MSIAQAJc3RyaW5naWZ5AAIDANkCEoICAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAKXb+DVOnbQZAQALaW5jbHVkZV9zdHIAAgAAnIgBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968APRF3JaMNIX0BAAlzdHJpbmdpZnkAAgMA2QISvwMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AHvmGsiYNFqIBAAtpbmNsdWRlX3N0cgACAADoJSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevADFfN2plQ6iSAQAJc3RyaW5naWZ5AAIDANkCErMBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMXo8FMjLtOdAQALaW5jbHVkZV9zdHIAAgAAm2smAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDZ8fTrmwR4aQEACXN0cmluZ2lmeQACAwDZAhLwAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDNu8p/h8hldgEAC2luY2x1ZGVfc3RyAAIAAM6wASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAIgYqwqe4Y8TAQALaW5jbHVkZV9zdHIAAgAA5wgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCrIxqnxOrVJAEACXN0cmluZ2lmeQACAwDZAhJkAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHotbjtGy5KKAQALaW5jbHVkZV9zdHIAAgAAmk4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA26890xQSh+QEACXN0cmluZ2lmeQACAwDZAhKhAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA1CcXsplgAtQEAC2luY2x1ZGVfc3RyAAIAAM2TASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOEliiyfRWfoAQAJc3RyaW5naWZ5AAIDAJEDEQIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Aju0IWPvXSAUBAAlzdHJpbmdpZnkAAgMA2QISFQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBZb+6EEyu+dAEAC2luY2x1ZGVfc3RyAAIAAJkxJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AWxP0SjS2IQUBAAlzdHJpbmdpZnkAAgMA2QIS0gEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AzHg/eHT2aAkBAAtpbmNsdWRlX3N0cgACAADMdiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJqCloaB2XKzAQAJc3RyaW5naWZ5AAIDANkCEo8DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJFLltImGGxzAQALaW5jbHVkZV9zdHIAAgAAmBQmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAyCGo/X/P2VAEACXN0cmluZ2lmeQACAwDZAhKDAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDSM1cmWE/oxQEAC2luY2x1ZGVfc3RyAAIAAMtZJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968An3Y/67fCWt4BAAlzdHJpbmdpZnkAAgMA2QISwAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AeSy4lBg9j4QBAAtpbmNsdWRlX3N0cgACAAD+ngEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCGkdwdi077+QEACXN0cmluZ2lmeQACAwDZAhI0AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJE/93lxy5e7AQALaW5jbHVkZV9zdHIAAgAAyjwmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBFGg4lDMIt/QEACXN0cmluZ2lmeQACAwDZAhLxAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCuygmY5+E58gEAC2luY2x1ZGVfc3RyAAIAAP2BASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAH4lWGg1SBIvAQAJc3RyaW5naWZ5AAIDANkCEq4DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevALlMowk6mNVbAQALaW5jbHVkZV9zdHIAAgAAyR8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBnMecYgatESgEACXN0cmluZ2lmeQACAwDZAhKiAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDkr+UzdO4k0gEAC2luY2x1ZGVfc3RyAAIAAPxkJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AEXnEbv5KDlgBAAlzdHJpbmdpZnkAAgMA2QIS3wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A2TERUVsQw2UBAAtpbmNsdWRlX3N0cgACAACvqgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAUEe1WhLUM2gEACXN0cmluZ2lmeQACAwDZAhJTAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAA2PIntrtSPYAQALaW5jbHVkZV9zdHIAAgAA+0cmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAT/rNFi053lgEACXN0cmluZ2lmeQACAwDZAhKQAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCdW0E9ITi9/gEAC2luY2x1ZGVfc3RyAAIAAK6NASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPbJOkvBKxaIAQAJc3RyaW5naWZ5AAIDANkCEs0DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAETkFkOSBb/IAQAJc3RyaW5naWZ5AAIDANkCEgQAAf+KA2YCAAAAAQECHwECE5fkCN4S968ABke4LbBm9v4BAAtpbmNsdWRlX3N0cgACAAD6KiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOsslrxOtCI+AQAJc3RyaW5naWZ5AAIDANkCEsEBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAAjFHUIKQmIVAQALaW5jbHVkZV9zdHIAAgAArXAmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCVw0QoT8K7gAEACXN0cmluZ2lmeQACAwDZAhL+AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAve4JEdgAIBAEAC2luY2x1ZGVfc3RyAAIAAOC1ASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJm5GQLL5eedAQALaW5jbHVkZV9zdHIAAgAA+Q0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAH5tOaSYsK0wEACXN0cmluZ2lmeQACAwDZAhJyAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevACKeKslOXvY7AQALaW5jbHVkZV9zdHIAAgAArFMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAwM2Acu7GoXQEACXN0cmluZ2lmeQACAwDZAhKvAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCU9RC8iK9BeQEAC2luY2x1ZGVfc3RyAAIAAN+YASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMI/S1GMGxdiAQAJc3RyaW5naWZ5AAIDANkCEiMAAf+KA2YCAAAAAQECHwECE5fkCN4S968ADMNMPVI8pegBAAtpbmNsdWRlX3N0cgACAACrNiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHhwtHa/NMGQAQAJc3RyaW5naWZ5AAIDANkCEuABAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAO1mB3OYZ940AQALaW5jbHVkZV9zdHIAAgAA3nsmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDPJ9NRcDTkdQEACXN0cmluZ2lmeQACAwDZAhKdAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD2WXBdONnzuwEAC2luY2x1ZGVfc3RyAAIAAKoZJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AcqXEMxwE0g8BAAlzdHJpbmdpZnkAAgMA2QISkQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968ASuNhB9TGAdkBAAtpbmNsdWRlX3N0cgACAADdXiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJCo/dbqHelhAQAJc3RyaW5naWZ5AAIDANkCEs4CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAENbm+lBUSbyAQALaW5jbHVkZV9zdHIAAgAAkKQBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ASDCIbUb+aZIBAAlzdHJpbmdpZnkAAgMA2QISQgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA7mW+DxcspXAEAC2luY2x1ZGVfc3RyAAIAANxBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AacIyoCNz0tsBAAlzdHJpbmdpZnkAAgMA2QIS/wEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AaBfWVLr2aY8BAAtpbmNsdWRlX3N0cgACAACPhwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAoGCHkjg6hJQEACXN0cmluZ2lmeQACAwDZAhK8AwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBmQlRDHIiL/wEAC2luY2x1ZGVfc3RyAAIAANskJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AEnoWooiKnKsBAAlzdHJpbmdpZnkAAgMA2QISsAEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AolF7Z8HIgMUBAAtpbmNsdWRlX3N0cgACAACOaiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHk0mf1q8BR+AQAJc3RyaW5naWZ5AAIDANkCEu0CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAF0yqJ648EtkAQALaW5jbHVkZV9zdHIAAgAAwa8BJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AbPvTwoFbYtgBAAtpbmNsdWRlX3N0cgACAADaByYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAFyY5SmO71n/AQAJc3RyaW5naWZ5AAIDANkCEmEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AiuhxSYhNilMBAAtpbmNsdWRlX3N0cgACAACNTSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAAsukCWq9BVmAQAJc3RyaW5naWZ5AAIDANkCEp4CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPE9lZCs2HwDAQALaW5jbHVkZV9zdHIAAgAAwJIBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A7s2ohqrxDNMBAAlzdHJpbmdpZnkAAgMA2QIS2wMAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ag/pZ/MQ7gYkBAAlzdHJpbmdpZnkAAgMA2QISEgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAmbYofR9pNYQEAC2luY2x1ZGVfc3RyAAIAAIwwJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AQVRkgHX+t+EBAAlzdHJpbmdpZnkAAgMA2QISzwEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AJdqW6Ypep5EBAAtpbmNsdWRlX3N0cgACAAC/dSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAH+IJb9ZFm7NAQAJc3RyaW5naWZ5AAIDANkCEowDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADcFwFPDZxcTAQALaW5jbHVkZV9zdHIAAgAAixMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCW9GgIQShyXgEACXN0cmluZ2lmeQACAwDZAhKAAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCxxsbYuehkUgEAC2luY2x1ZGVfc3RyAAIAAL5YJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AN6pDoevsDiQBAAlzdHJpbmdpZnkAAgMA2QISvQIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AjHWfrJ+s9NcBAAtpbmNsdWRlX3N0cgACAADxnQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAu62xrZRYNQwEACXN0cmluZ2lmeQACAwDZAhIxAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANCIZVmJDDj9AQALaW5jbHVkZV9zdHIAAgAAvTsmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBUl3oPhXIkvgEACXN0cmluZ2lmeQACAwDZAhLuAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCcMRu3DUPFGAEAC2luY2x1ZGVfc3RyAAIAAPCAASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAFoGFr7AAKXQAQAJc3RyaW5naWZ5AAIDANkCEqsDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANgmWrEC0tovAQALaW5jbHVkZV9zdHIAAgAAvB4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCSa0rawmAl8gEACXN0cmluZ2lmeQACAwDZAhKfAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAvP4/mEV2BdAEAC2luY2x1ZGVfc3RyAAIAAO9jJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AFKNePKANRM0BAAlzdHJpbmdpZnkAAgMA2QIS3AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AV4QCiIqq+WsBAAtpbmNsdWRlX3N0cgACAACiqQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAc1En2VDiLggEACXN0cmluZ2lmeQACAwDZAhJQAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOPfhHbvUTkQAQALaW5jbHVkZV9zdHIAAgAA7kYmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAQuZOMt+AA3wEACXN0cmluZ2lmeQACAwDZAhKNAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBeYzXgAws77wEAC2luY2x1ZGVfc3RyAAIAAKGMASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAC6Zt1jxfFQoAQAJc3RyaW5naWZ5AAIDANkCEsoDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGkyM/K+JcPcAQAJc3RyaW5naWZ5AAIDANkCEgEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AlmnZgpt6F7gBAAtpbmNsdWRlX3N0cgACAADtKSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAD2TEyLLId4XAQAJc3RyaW5naWZ5AAIDANkCEr4BAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPbTCRkivaqDAQALaW5jbHVkZV9zdHIAAgAAoG8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCFQIEQyyIp5AEACXN0cmluZ2lmeQACAwDZAhL7AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBzqyDAebCRPQEAC2luY2x1ZGVfc3RyAAIAANO0ASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAL99PCK8NfbeAQALaW5jbHVkZV9zdHIAAgAA7AwmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDJHe4uJNHOEQEACXN0cmluZ2lmeQACAwDZAhJvAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAKeVbIcp9FubAQALaW5jbHVkZV9zdHIAAgAAn1ImAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCF+HfbWLm/dgEACXN0cmluZ2lmeQACAwDZAhKsAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAg9CKgLmVs6wEAC2luY2x1ZGVfc3RyAAIAANKXASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHs8f8Oyvw5nAQAJc3RyaW5naWZ5AAIDAJEDERgAAf+KA2YCAAAAAQECHwECE5fkCN4S968A2Bot0vipFykBAAlzdHJpbmdpZnkAAgMA2QISIAAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC1USqHbVb+UQEAC2luY2x1ZGVfc3RyAAIAAJ41JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Arhci6ZD8ybUBAAlzdHJpbmdpZnkAAgMA2QIS3QEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AsmKrdiZRLK8BAAtpbmNsdWRlX3N0cgACAADReiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANL7m6/YJfopAQAJc3RyaW5naWZ5AAIDANkCEpoDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIvEA0sWbmRPAQALaW5jbHVkZV9zdHIAAgAAnRgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA4k8D+aL07RwEACXN0cmluZ2lmeQACAwDZAhKOAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAWYXtoTOa2NgEAC2luY2x1ZGVfc3RyAAIAANBdJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ATwAAM+esILwBAAlzdHJpbmdpZnkAAgMA2QISywIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Ajzc8MXwZ7mABAAtpbmNsdWRlX3N0cgACAACDowEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCr1idqTpFTqwEACXN0cmluZ2lmeQACAwDZAhI/AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAE8Q9Rayt6IbAQALaW5jbHVkZV9zdHIAAgAAz0AmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBtErrmyAcdcwEACXN0cmluZ2lmeQACAwDZAhL8AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBJ2isktkXEgwEAC2luY2x1ZGVfc3RyAAIAAIKGASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAEQTXJwfYPulAQAJc3RyaW5naWZ5AAIDANkCErkDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAM5y2SIa6cHZAQALaW5jbHVkZV9zdHIAAgAAziMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCa9y9v0MI8/QEACXN0cmluZ2lmeQACAwDZAhKtAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAKLLTMiAiahgEAC2luY2x1ZGVfc3RyAAIAAIFpJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ARqDfF6f8YQcBAAlzdHJpbmdpZnkAAgMA2QIS6gIAAf+KA2YCAAAAAQECHwECE5fkCN4S968ADrXce5Y69iQBAAtpbmNsdWRlX3N0cgACAAC0rgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAlQPnbfJ7R6QEAFHJlZ2lzdGVyX2RpYWdub3N0aWNzAAAAAN0Gs+gBAAAAqQGXAgAAAAIBAAMBAACX5AjeEvevAJ78e9zsXGIuAQAJc3RyaW5naWZ5AAIDANkCEl4AAf+KA2YCAAAAAQECHwECE5fkCN4S968AZyfrdiqDwa0BAAtpbmNsdWRlX3N0cgACAACATCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANR5pQoyI6TcAQAJc3RyaW5naWZ5AAIDANkCEpsCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADUrnTFNchPkAQALaW5jbHVkZV9zdHIAAgAAs5EBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AIHbdY1VgT2cBAAlzdHJpbmdpZnkAAgMA2QIS2AMAAf+KA2YCAAAAAQECHwECE5fkCN4S968Afh/V4LU5pxsBAAlzdHJpbmdpZnkAAgMA2QISDwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB/G0P+TKE8pgEAC2luY2x1ZGVfc3RyAAIAAP8uJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AIa9Jbh01D/IBAAlzdHJpbmdpZnkAAgMA2QISzAEAAf+KA2YCAAAAAQECHwECE5fkCN4S968A//7RDAIZC7gBAAtpbmNsdWRlX3N0cgACAACydCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACO3/FSLCAqzAQAJc3RyaW5naWZ5AAIDANkCEokDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJHpydD4Y4AtAQAJc3RyaW5naWZ5AAIDAJEDERUAAf+KA2YCAAAAAQECHwECE5fkCN4S968Am6cLvox+6lEBAAtpbmNsdWRlX3N0cgACAAD+ESYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJAcAL+31Rf9AQAJc3RyaW5naWZ5AAIDANkCEn0AAf+KA2YCAAAAAQECHwECE5fkCN4S968Ab1uR6xg/ewoBAAtpbmNsdWRlX3N0cgACAACxVyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANhQLlMR52arAQAJc3RyaW5naWZ5AAIDANkCEroCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAL35Di4o6pk5AQALaW5jbHVkZV9zdHIAAgAA5JwBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AaNWyZin4+wMBAAlzdHJpbmdpZnkAAgMA2QISLgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDkL0lxRpBU5gEAC2luY2x1ZGVfc3RyAAIAALA6JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A9WptyhWe3SYBAAlzdHJpbmdpZnkAAgMA2QIS6wEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AJVBRre9SvwgBAAtpbmNsdWRlX3N0cgACAADjfyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevALDG3znPT57nAQAJc3RyaW5naWZ5AAIDANkCEqgDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGKmje1V3cg6AQALaW5jbHVkZV9zdHIAAgAArx0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDKTRFLkAX/WAEACXN0cmluZ2lmeQACAwDZAhKcAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBvEohz0HvTCwEAC2luY2x1ZGVfc3RyAAIAAOJiJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AuPlipvGgnPQBAAlzdHJpbmdpZnkAAgMA2QIS2QIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AWG8gxhtHhO0BAAtpbmNsdWRlX3N0cgACAACVqAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAnUfzPn3G3KAEACXN0cmluZ2lmeQACAwDZAhJNAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAE1jrm/EStyoAQALaW5jbHVkZV9zdHIAAgAA4UUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCMHHiyHDscdAEACXN0cmluZ2lmeQACAwDZAhKKAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCKeXYdD6z8TgEAC2luY2x1ZGVfc3RyAAIAAJSLASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGxcsJ4WR+ekAQAJc3RyaW5naWZ5AAIDANkCEscDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAN98tZoqcVTGAQALaW5jbHVkZV9zdHIAAgAA4CgmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAWswMR9Le9MQEACXN0cmluZ2lmeQACAwDZAhK7AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBLtBTxgst16wEAC2luY2x1ZGVfc3RyAAIAAJNuJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A1iBb1KqYtIEBAAlzdHJpbmdpZnkAAgMA2QIS+AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Afc0XQzeRwmMBAAtpbmNsdWRlX3N0cgACAADGswEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAui+lBkhpaawEAC2luY2x1ZGVfc3RyAAIAAN8LJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AUQBO8X7ZmnUBAAlzdHJpbmdpZnkAAgMA2QISbAAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDD9FPAs6mCUgEAC2luY2x1ZGVfc3RyAAIAAJJRJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AxAU/SpQzYPIBAAlzdHJpbmdpZnkAAgMA2QISqQIAAf+KA2YCAAAAAQECHwECE5fkCN4S968A9vkwrHm5JmABAAtpbmNsdWRlX3N0cgACAADFlgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwANZqQ+ZuP5nQEACXN0cmluZ2lmeQACAwCRAxESAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAA+VwqX0rUV4AQAJc3RyaW5naWZ5AAIDANkCEh0AAf+KA2YCAAAAAQECHwECE5fkCN4S968ALeIiHEa+qwMBAAtpbmNsdWRlX3N0cgACAACRNCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPmMKssd36QdAQAJc3RyaW5naWZ5AAIDANkCEtoBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFN2CqOCgKXBAQALaW5jbHVkZV9zdHIAAgAAxHkmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCLgHkrqyP+EQEACXN0cmluZ2lmeQACAwDZAhKXAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD5H5U2U5Qy6AEAC2luY2x1ZGVfc3RyAAIAAJAXJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AzLTT0i2IsagBAAlzdHJpbmdpZnkAAgMA2QISiwEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AoSM52+s58KcBAAtpbmNsdWRlX3N0cgACAADDXCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKrR+IgEEIcuAQAJc3RyaW5naWZ5AAIDANkCEsgCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMp6bAE+DRKxAQALaW5jbHVkZV9zdHIAAgAA9qEBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AKEbgNNdfFNgBAAlzdHJpbmdpZnkAAgMA2QISPAAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCd+pmUh+cuBwEAC2luY2x1ZGVfc3RyAAIAAMI/JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A8MyoJDZnb98BAAlzdHJpbmdpZnkAAgMA2QIS+QEAAf+KA2YCAAAAAQECHwECE5fkCN4S968ArcpC8awC84gBAAtpbmNsdWRlX3N0cgACAAD1hAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCP4GiQYviieAEACXN0cmluZ2lmeQACAwDZAhK2AwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAZWoyyJLj3bQEAC2luY2x1ZGVfc3RyAAIAAMEiJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AFQvUEbBNhSABAAlzdHJpbmdpZnkAAgMA2QISqgEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AMWYQFT8Ch0ABAAtpbmNsdWRlX3N0cgACAAD0ZyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAAKM6hvRE6JMAQAJc3RyaW5naWZ5AAIDANkCEucCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOXWDs7C3SXLAQALaW5jbHVkZV9zdHIAAgAAp60BJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AaScw56ew9ZABAAlzdHJpbmdpZnkAAgMA2QISWwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCOuWnF+RM/ZAEAC2luY2x1ZGVfc3RyAAIAAPNKJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AZ0W2sO5FDcIBAAlzdHJpbmdpZnkAAgMA2QISmAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Anlrq0WiCgvwBAAtpbmNsdWRlX3N0cgACAACmkAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBt3FUw2r4kCAEACXN0cmluZ2lmeQACAwDZAhLVAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAjTck1ddRpagEACXN0cmluZ2lmeQACAwDZAhIMAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJkNwjiaNE1BAQALaW5jbHVkZV9zdHIAAgAA8i0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwArpwONYSX3gQEACXN0cmluZ2lmeQACAwDZAhLJAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC/anz4mEel8AEAC2luY2x1ZGVfc3RyAAIAAKVzJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AhfaDWV/OZ8ABAAlzdHJpbmdpZnkAAgMA2QIShgMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AD30SfOsDAp4BAAlzdHJpbmdpZnkAAgMAkQMRDwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA6jZgSQsyokAEAC2luY2x1ZGVfc3RyAAIAAPEQJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AOKh/IPiy3JEBAAlzdHJpbmdpZnkAAgMA2QISegAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAXplGp8vMbqAEAC2luY2x1ZGVfc3RyAAIAAKRWJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ADXpFZezWdtsBAAlzdHJpbmdpZnkAAgMA2QIStwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AUiXWMxIenogBAAtpbmNsdWRlX3N0cgACAADXmwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBT4qd14Mz45gEACXN0cmluZ2lmeQACAwDZAhIrAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevACHU7e55zIBNAQALaW5jbHVkZV9zdHIAAgAAozkmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDRYIhLfdPoYgEACXN0cmluZ2lmeQACAwDZAhLoAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB/sbz5rh3HygEAC2luY2x1ZGVfc3RyAAIAANZ+JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Ajhu0YipMY6EBAAlzdHJpbmdpZnkAAgMA2QISpQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A2Y7kuzGts0EBAAtpbmNsdWRlX3N0cgACAACiHCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANWWwFt7JUTTAQAJc3RyaW5naWZ5AAIDANkCEpkBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAL+xMIKsCM2sAQALaW5jbHVkZV9zdHIAAgAA1WEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCN/MltNKybiQEACXN0cmluZ2lmeQACAwDZAhLWAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDv2nIfNlUCPgEAC2luY2x1ZGVfc3RyAAIAAIinASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKg/ZcTf3vuLAQAJc3RyaW5naWZ5AAIDANkCEkoAAf+KA2YCAAAAAQECHwECE5fkCN4S968AaWyQxk0F/IcBAAtpbmNsdWRlX3N0cgACAADURCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOArSCt5eA1WAQAJc3RyaW5naWZ5AAIDANkCEocCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOs1s/RxmeR8AQALaW5jbHVkZV9zdHIAAgAAh4oBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Acc65bNFcr9QBAAlzdHJpbmdpZnkAAgMA2QISxAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968Al+HpfWPOq5MBAAtpbmNsdWRlX3N0cgACAADTJyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMfbJ+ofD7i+AQAJc3RyaW5naWZ5AAIDANkCErgBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMF1qMP8Sp3VAQALaW5jbHVkZV9zdHIAAgAAhm0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDZTZISd5XdTAEACXN0cmluZ2lmeQACAwDZAhL1AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDGlxMr6rErvgEAC2luY2x1ZGVfc3RyAAIAALmyASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAN/Q4kHtLVyzAQALaW5jbHVkZV9zdHIAAgAA0gomAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAVqJTdjS6TVQEACXN0cmluZ2lmeQACAwDZAhJpAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevABwnjDaEtAq1AQALaW5jbHVkZV9zdHIAAgAAhVAmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwANfZhb/tBLNQEACXN0cmluZ2lmeQACAwDZAhKmAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBKWjRrHko+ZwEAC2luY2x1ZGVfc3RyAAIAALiVASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOGjrPV+YPj2AQAJc3RyaW5naWZ5AAIDAJEDEQwAAf+KA2YCAAAAAQECHwECE5fkCN4S968AjgEl/Z7VNMsBAAlzdHJpbmdpZnkAAgMA2QISGgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDOCyy/SnED/gEAC2luY2x1ZGVfc3RyAAIAAIQzJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AdOesI0P+gdwBAAlzdHJpbmdpZnkAAgMA2QIS1wEAAf+KA2YCAAAAAQECHwECE5fkCN4S968A+hYDlWo36yQBAAtpbmNsdWRlX3N0cgACAAC3eCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHG8nE3uWAjHAQAJc3RyaW5naWZ5AAIDANkCEpQDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOzOp1H7EU2HAQALaW5jbHVkZV9zdHIAAgAAgxYmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAhyNpYGB/O+wEACXN0cmluZ2lmeQACAwDZAhKIAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAKZzYFZFxnWQEAC2luY2x1ZGVfc3RyAAIAALZbJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AGc3sFHL0QtoBAAlzdHJpbmdpZnkAAgMA2QISxQIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AuqSNpKBXmawBAAtpbmNsdWRlX3N0cgACAADpoAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwABg1rRFVXLEQEACXN0cmluZ2lmeQACAwDZAhI5AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAPRjQc341W+zAQALaW5jbHVkZV9zdHIAAgAAtT4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDvIZ9Ba8EQzQEACXN0cmluZ2lmeQACAwDZAhL2AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAQaeVbQmkvWwEAC2luY2x1ZGVfc3RyAAIAAOiDASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACT/mHiIPI5TAQAJc3RyaW5naWZ5AAIDANkCErMDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAAcGncxgo0GWAQALaW5jbHVkZV9zdHIAAgAAtCEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDDzPkl60PpMwEACXN0cmluZ2lmeQACAwDZAhKnAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA6/+/8yqMqPwEAC2luY2x1ZGVfc3RyAAIAAOdmJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AukeF++8WgSwBAAlzdHJpbmdpZnkAAgMA2QIS5AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AsNP264KigkMBAAtpbmNsdWRlX3N0cgACAACarAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCjcYlnep/XuQEACXN0cmluZ2lmeQACAwDZAhJYAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAC9bAnS6yV0rAQALaW5jbHVkZV9zdHIAAgAA5kkmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB048/S0uc5KAEACXN0cmluZ2lmeQACAwDZAhKVAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDlmZ6VMlLE8gEAC2luY2x1ZGVfc3RyAAIAAJmPASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKLCUlGBPQaGAQAJc3RyaW5naWZ5AAIDANkCEtIDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANgvUqfTcHBEAQAJc3RyaW5naWZ5AAIDANkCEgkAAf+KA2YCAAAAAQECHwECE5fkCN4S968ANPabmnUe1V4BAAtpbmNsdWRlX3N0cgACAADlLCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJnU3P0W+a3lAQAJc3RyaW5naWZ5AAIDANkCEsYBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevACVkhvDpw66EAQALaW5jbHVkZV9zdHIAAgAAmHImAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCsZTYsmZQggQEACXN0cmluZ2lmeQACAwDZAhKDAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBDlukRS8L4yAEACXN0cmluZ2lmeQACAwCRAxEJAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMg6maqT+Qw9AQALaW5jbHVkZV9zdHIAAgAA5A8mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBW2y6FULmfGAEACXN0cmluZ2lmeQACAwDZAhJ3AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAE6TbEwlqv2BAQALaW5jbHVkZV9zdHIAAgAAl1UmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBcw/6XiwKkUgEACXN0cmluZ2lmeQACAwDZAhK0AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAeuKtRQFkPhwEAC2luY2x1ZGVfc3RyAAIAAMqaASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPdKCkgH+9EPAQAJc3RyaW5naWZ5AAIDANkCEigAAf+KA2YCAAAAAQECHwECE5fkCN4S968AFevIMhiC+tIBAAtpbmNsdWRlX3N0cgACAACWOCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACYNkVUqT0gQAQAJc3RyaW5naWZ5AAIDANkCEuUBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAHOnyYUCMTr1AQALaW5jbHVkZV9zdHIAAgAAyX0mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBovByW0USDfAEACXN0cmluZ2lmeQACAwDZAhKiAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAT1/04QiD3LgEAC2luY2x1ZGVfc3RyAAIAAJUbJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AjHhGBNnxE5MBAAlzdHJpbmdpZnkAAgMA2QISlgEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AmEKg7yngQoMBAAtpbmNsdWRlX3N0cgACAADIYCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAI8j8vxFaHJ+AQAJc3RyaW5naWZ5AAIDANkCEtMCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGShDoGyujL6AQALaW5jbHVkZV9zdHIAAgAA+6UBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AcitLEu3UDrUBAAlzdHJpbmdpZnkAAgMA2QISRwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwA/O8Ys7Rq05gEAC2luY2x1ZGVfc3RyAAIAAMdDJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AlczQzF7v/R0BAAlzdHJpbmdpZnkAAgMA2QIShAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AmektCkirSyEBAAtpbmNsdWRlX3N0cgACAAD6iAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDPHkTjQ7Cg4QEACXN0cmluZ2lmeQACAwDZAhLBAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAGKx+D+1b7gAEAC2luY2x1ZGVfc3RyAAIAAMYmJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AlNQgqIXa0aoBAAlzdHJpbmdpZnkAAgMA2QIStQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AicxW05ulaaIBAAtpbmNsdWRlX3N0cgACAAD5ayYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGwDPy2x94/EAQAJc3RyaW5naWZ5AAIDANkCEvICAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADUoHVSIKXtKAQALaW5jbHVkZV9zdHIAAgAArLEBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AXs1Aw/jgKAcBAAtpbmNsdWRlX3N0cgACAADFCSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABD6EAcaAG11AQAJc3RyaW5naWZ5AAIDANkCEmYAAf+KA2YCAAAAAQECHwECE5fkCN4S968Aumj9oOYs1tYBAAtpbmNsdWRlX3N0cgACAAD4TiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKjzVzajRj68AQAJc3RyaW5naWZ5AAIDANkCEqMCAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevALM9zRxK4gnvAQALaW5jbHVkZV9zdHIAAgAAq5QBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A2HyEX8DO4L8BAAlzdHJpbmdpZnkAAgMAkQMRBgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD1nE8jAKumFQEACXN0cmluZ2lmeQACAwDZAhIXAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAInQG3zdwZf2AQALaW5jbHVkZV9zdHIAAgAA9zEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCtESMis8z6uAEACXN0cmluZ2lmeQACAwDZAhLUAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC7ixZTZeEOZQEAC2luY2x1ZGVfc3RyAAIAAKp3JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AMAvF9LZlNIkBAAlzdHJpbmdpZnkAAgMA2QISkQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968AHB56bPcQgqYBAAtpbmNsdWRlX3N0cgACAAD2FCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAFWIbUzWv32gAQAJc3RyaW5naWZ5AAIDANkCEoUBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevABFCoDYElYtzAQALaW5jbHVkZV9zdHIAAgAAqVomAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD//qb15EMGxgEACXN0cmluZ2lmeQACAwDZAhLCAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDUG09G8OYO+AEAC2luY2x1ZGVfc3RyAAIAANyfASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAFaLYGfnfpAaAQAJc3RyaW5naWZ5AAIDANkCEjYAAf+KA2YCAAAAAQECHwECE5fkCN4S968A26OWDFiqkzIBAAtpbmNsdWRlX3N0cgACAACoPSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAHZZ2D4HX9QLAQAJc3RyaW5naWZ5AAIDANkCEvMBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAAXGaNND56MvAQALaW5jbHVkZV9zdHIAAgAA24IBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AsCs+I4kUzNcBAAlzdHJpbmdpZnkAAgMA2QISsAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A8XYPK//c96MBAAtpbmNsdWRlX3N0cgACAACnICYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAGwdv59WuGlvAQAJc3RyaW5naWZ5AAIDANkCEqQBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAId/wzm2gHjdAQALaW5jbHVkZV9zdHIAAgAA2mUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwA+GC8IW1vsPAEACXN0cmluZ2lmeQACAwDZAhLhAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwD33XXvbLnGjwEAC2luY2x1ZGVfc3RyAAIAAI2rASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJZV7vxqyuOgAQAJc3RyaW5naWZ5AAIDANkCElUAAf+KA2YCAAAAAQECHwECE5fkCN4S968AEY9xBC9o8UEBAAtpbmNsdWRlX3N0cgACAADZSCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPEZncJkbZjCAQAJc3RyaW5naWZ5AAIDANkCEpICAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFv0CzN7U/BdAQALaW5jbHVkZV9zdHIAAgAAjI4BJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AYGakKtPg5Q4BAAlzdHJpbmdpZnkAAgMA2QISzwMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A2Wb5wC3bmsABAAlzdHJpbmdpZnkAAgMA2QISBgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDVBmD5VE/k4QEAC2luY2x1ZGVfc3RyAAIAANgrJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AwkZJyAwngcoBAAlzdHJpbmdpZnkAAgMA2QISwwEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AOPbooytBTjMBAAtpbmNsdWRlX3N0cgACAACLcSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACFYH3QRZsiuAQAJc3RyaW5naWZ5AAIDANkCEoADAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAH11QtmEMxcGAQAJc3RyaW5naWZ5AAIDAJEDEQMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A0vdwOp9ktv8BAAtpbmNsdWRlX3N0cgACAADXDiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMEQlrUXzw5jAQAJc3RyaW5naWZ5AAIDANkCEnQAAf+KA2YCAAAAAQECHwECE5fkCN4S968AlIb/46vI8SIBAAtpbmNsdWRlX3N0cgACAACKVCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAIF35Jt7Q5mqAQAJc3RyaW5naWZ5AAIDANkCErECAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGUCj9GTa2O/AQALaW5jbHVkZV9zdHIAAgAAvZkBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AxRhqCZJ88akBAAlzdHJpbmdpZnkAAgMA2QISJQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwC754gRoIziwwEAC2luY2x1ZGVfc3RyAAIAAIk3JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A0xgIMHO/e84BAAlzdHJpbmdpZnkAAgMA2QIS4gEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AcCKQfZArxs0BAAtpbmNsdWRlX3N0cgACAAC8fCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACABRoFluiVgAQAJc3RyaW5naWZ5AAIDANkCEp8DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGsFmcGLR7kcAQALaW5jbHVkZV9zdHIAAgAAiBomAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDB/Q2Gx1TWyAEACXN0cmluZ2lmeQACAwDZAhKTAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCTIdhrEcgOZwEAC2luY2x1ZGVfc3RyAAIAALtfJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A8JNLYcfXP+ABAAlzdHJpbmdpZnkAAgMA2QIS0AIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AvfFt/FqxY74BAAtpbmNsdWRlX3N0cgACAADupAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBdWNtk/SmgUQEACXN0cmluZ2lmeQACAwDZAhJEAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAFkHQaFZ+65LAQALaW5jbHVkZV9zdHIAAgAAukImAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDh4JowrDfCdgEACXN0cmluZ2lmeQACAwDZAhKBAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAbgFOeYmTFygEAC2luY2x1ZGVfc3RyAAIAAO2HASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABCjBCkzDoAtAQAJc3RyaW5naWZ5AAIDANkCEr4DAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAL85sEwyTmvtAQALaW5jbHVkZV9zdHIAAgAAuSUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDwLQ9qlhYPewEACXN0cmluZ2lmeQACAwDZAhKyAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAtJy+yDdXN5gEAC2luY2x1ZGVfc3RyAAIAAOxqJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968Aipqi1aecIFwBAAlzdHJpbmdpZnkAAgMA2QIS7wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AHPdSUajWiEkBAAtpbmNsdWRlX3N0cgACAACfsAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCqx9XpgkzlJgEAC2luY2x1ZGVfc3RyAAIAALgIJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AfmXW+Q8PCmgBAAlzdHJpbmdpZnkAAgMA2QISYwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAilA1P/e6O5wEAC2luY2x1ZGVfc3RyAAIAAOtNJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ALAjYwsrosyEBAAlzdHJpbmdpZnkAAgMA2QISoAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AleCaJBiOVLYBAAtpbmNsdWRlX3N0cgACAACekwEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCRvE5d3E3a6wEACXN0cmluZ2lmeQACAwCRAxEAAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAA6IOryldYGcAQAJc3RyaW5naWZ5AAIDANkCEhQAAf+KA2YCAAAAAQECHwECE5fkCN4S968Al1xD6ix/qOgBAAtpbmNsdWRlX3N0cgACAADqMCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAMiyJW8ra+nKAQAJc3RyaW5naWZ5AAIDANkCEtEBAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAKYBT6TxROlmAQALaW5jbHVkZV9zdHIAAgAAnXYmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwAlDN9P0TVS+QEACXN0cmluZ2lmeQACAwDZAhKOAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDeVchc3SRtgwEAC2luY2x1ZGVfc3RyAAIAAOkTJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A+fxSE8lKhGcBAAlzdHJpbmdpZnkAAgMA2QISggEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AlO/hClt6EDEBAAtpbmNsdWRlX3N0cgACAACcWSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABE1TSapZcttAQAJc3RyaW5naWZ5AAIDANkCEr8CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADxT3tdxVgBlAQALaW5jbHVkZV9zdHIAAgAAz54BJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A//yp6kKBcRcBAAlzdHJpbmdpZnkAAgMA2QISMwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwACfvMiB1piIwEAC2luY2x1ZGVfc3RyAAIAAJs8JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ARwdPXGDY+moBAAlzdHJpbmdpZnkAAgMA2QIS8AEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AX4Glwaev8lABAAtpbmNsdWRlX3N0cgACAADOgQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB9ISwkkBlUxgEACXN0cmluZ2lmeQACAwDZAhKtAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCqXB4yeDUgHAEAC2luY2x1ZGVfc3RyAAIAAJofJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A3rnJzkvHoPoBAAlzdHJpbmdpZnkAAgMA2QISoQEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AXbkukPx6VBIBAAtpbmNsdWRlX3N0cgACAADNZCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevABzcNHxxj7CrAQAJc3RyaW5naWZ5AAIDANkCEt4CAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevABD4zxm0FhCnAQALaW5jbHVkZV9zdHIAAgAAgKoBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AWHVvWF/ER9EBAAlzdHJpbmdpZnkAAgMA2QISUgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwARu1smn/EL2wEAC2luY2x1ZGVfc3RyAAIAAMxHJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AG+ePpSAiCqsBAAlzdHJpbmdpZnkAAgMA2QISjwIAAf+KA2YCAAAAAQECHwECE5fkCN4S968ANPS8vjQeJYwBAAtpbmNsdWRlX3N0cgACAAD/jAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBBhVuoqExXEgEACXN0cmluZ2lmeQACAwDZAhLMAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDL+/nyn35bKAEACXN0cmluZ2lmeQACAwDZAhIDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIaLBuw1vJdaAQALaW5jbHVkZV9zdHIAAgAAyyomAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC9+RsE8XaDowEACXN0cmluZ2lmeQACAwDZAhLAAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCXY6s4bLFefwEAC2luY2x1ZGVfc3RyAAIAAP5vJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968ArWwl8Aug024BAAlzdHJpbmdpZnkAAgMA2QIS/QIAAf+KA2YCAAAAAQECHwECE5fkCN4S968APq5u2ZmtPV0BAAtpbmNsdWRlX3N0cgACAACxtQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBkvQHC+2QRSAEAC2luY2x1ZGVfc3RyAAIAAMoNJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A0bZg3Hb7i3wBAAlzdHJpbmdpZnkAAgMA2QIScQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCamqHjrGvvWQEAC2luY2x1ZGVfc3RyAAIAAP1SJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AnvgabDzZ4J4BAAlzdHJpbmdpZnkAAgMA2QISrgIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AC0BzukshU0cBAAtpbmNsdWRlX3N0cgACAACwmAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDEHN6z6QeU8gEACXN0cmluZ2lmeQACAwDZAhIiAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAMZc42cAMZzUAQALaW5jbHVkZV9zdHIAAgAA/DUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwB28tt3FC/yKQEACXN0cmluZ2lmeQACAwDZAhLfAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwB5PBFzcYKAlwEAC2luY2x1ZGVfc3RyAAIAAK97JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AqQ5HClqCddgBAAlzdHJpbmdpZnkAAgMA2QISnAMAAf+KA2YCAAAAAQECHwECE5fkCN4S968A5sSHiyyXqr4BAAtpbmNsdWRlX3N0cgACAAD7GCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANeITm5J/BOuAQAJc3RyaW5naWZ5AAIDANkCEpABAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIbzM1Fx/JX1AQALaW5jbHVkZV9zdHIAAgAArl4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBcErQw01B8JQEACXN0cmluZ2lmeQACAwDZAhLNAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAj/HMZUIGdqAEAC2luY2x1ZGVfc3RyAAIAAOGjASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevACT+k+c6p1J/AQAJc3RyaW5naWZ5AAIDANkCEkEAAf+KA2YCAAAAAQECHwECE5fkCN4S968ATr2dnW7sptMBAAtpbmNsdWRlX3N0cgACAACtQSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKEa2lpsvgg3AQAJc3RyaW5naWZ5AAIDANkCEv4BAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOmelsxbMnBMAQALaW5jbHVkZV9zdHIAAgAA4IYBJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AjLe7hIJFnZEBAAlzdHJpbmdpZnkAAgMA2QISuwMAAf+KA2YCAAAAAQECHwECE5fkCN4S968ATvRv7AiVdRcBAAtpbmNsdWRlX3N0cgACAACsJCYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKO/usJGTLu8AQAJc3RyaW5naWZ5AAIDANkCEq8BAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevALcBZPFAzJX4AQALaW5jbHVkZV9zdHIAAgAA32kmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDdyNEeACivrgEACXN0cmluZ2lmeQACAwDZAhLsAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBBOa/QOsWjgQEAC2luY2x1ZGVfc3RyAAIAAJKvASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPMuoyl0rmgoAQALaW5jbHVkZV9zdHIAAgAAqwcmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBJRgocaU8HswEACXN0cmluZ2lmeQACAwDZAhJgAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGQPRXH1jm9MAQALaW5jbHVkZV9zdHIAAgAA3kwmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwD+wtmd5EYfHQEACXN0cmluZ2lmeQACAwDZAhKdAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCrBKf9S6jD7QEAC2luY2x1ZGVfc3RyAAIAAJGSASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAOr+6bjP5U4DAQAJc3RyaW5naWZ5AAIDANkCEtoDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOw/fMj/YbkGAQAJc3RyaW5naWZ5AAIDANkCEhEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AKvnkp4OojfcBAAtpbmNsdWRlX3N0cgACAADdLyYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANptH9Q8tGJbAQAJc3RyaW5naWZ5AAIDANkCEs4BAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAL5udKm4VDGtAQALaW5jbHVkZV9zdHIAAgAAkHUmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCGdOVU7E1FBAEACXN0cmluZ2lmeQACAwDZAhKLAwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAYC4cI9MdcdwEAC2luY2x1ZGVfc3RyAAIAANwSJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AkdowZNeuEVUBAAlzdHJpbmdpZnkAAgMA2QISfwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAy4X8sAtaPHgEAC2luY2x1ZGVfc3RyAAIAAI9YJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AruogkiclO1IBAAlzdHJpbmdpZnkAAgMA2QISvAIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AtxsriTxoKaYBAAtpbmNsdWRlX3N0cgACAADCnQEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCp820TCr6RZAEACXN0cmluZ2lmeQACAwDZAhIwAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAIqxPBe+0lIjAQALaW5jbHVkZV9zdHIAAgAAjjsmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDf5OJHoy3rSQEACXN0cmluZ2lmeQACAwDZAhLtAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwCO/3JfCYdHOgEAC2luY2x1ZGVfc3RyAAIAAMGAASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAJDUn3Fb8kK2AQAJc3RyaW5naWZ5AAIDANkCEqoDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevADEUnAlrEblgAQALaW5jbHVkZV9zdHIAAgAAjR4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCo2hTIqtnGcQEACXN0cmluZ2lmeQACAwDZAhKeAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBa0wrDWY9LcAEAC2luY2x1ZGVfc3RyAAIAAMBjJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A2OytDsnS1JUBAAlzdHJpbmdpZnkAAgMA2QIS2wIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AkA2vHAZzBXkBAAtpbmNsdWRlX3N0cgACAADzqAEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDdiNlrFsXX2AEACXN0cmluZ2lmeQACAwDZAhJPAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANXYO/qeFmMhAQALaW5jbHVkZV9zdHIAAgAAv0YmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCopdOo+/oajgEACXN0cmluZ2lmeQACAwDZAhKMAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDUZr/me5ne0gEAC2luY2x1ZGVfc3RyAAIAAPKLASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevADhkm4GEDFQ9AQAJc3RyaW5naWZ5AAIDANkCEskDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAOtKEOzZ2/veAQAJc3RyaW5naWZ5AAIDANkCEgAAAf+KA2YCAAAAAQECHwECE5fkCN4S968Arl8S6zXrbwgBAAtpbmNsdWRlX3N0cgACAAC+KSYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAAaiXhts92+PAQAJc3RyaW5naWZ5AAIDANkCEr0BAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGhSDWL6oQAeAQALaW5jbHVkZV9zdHIAAgAA8W4mAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCgS9o+/qBwGgEACXN0cmluZ2lmeQACAwDZAhL6AgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBanjDBc6s8cQEAC2luY2x1ZGVfc3RyAAIAAKS0ASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAPu68lJWnt6tAQALaW5jbHVkZV9zdHIAAgAAvQwmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBYA5i8fuwcYAEACXN0cmluZ2lmeQACAwDZAhJuAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAJAFwh7nbG0NAQALaW5jbHVkZV9zdHIAAgAA8FEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCZU31svbo9lgEACXN0cmluZ2lmeQACAwDZAhKrAgAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBRu1psIpzmGQEAC2luY2x1ZGVfc3RyAAIAAKOXASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAKagdM0Wu73BAQAJc3RyaW5naWZ5AAIDAJEDERYAAf+KA2YCAAAAAQECHwECE5fkCN4S968AB1pnkCwY/jEBAAlzdHJpbmdpZnkAAgMA2QISHwAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwBsQUUs8y9PTAEAC2luY2x1ZGVfc3RyAAIAAO80JgAAAfeUA10CAAAAAQECIAECE5fkCN4S968A5c+UCGBoweEBAAlzdHJpbmdpZnkAAgMA2QIS3AEAAf+KA2YCAAAAAQECHwECE5fkCN4S968AgeX7fHXUdCwBAAtpbmNsdWRlX3N0cgACAACieiYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevANGT8e75qreAAQAJc3RyaW5naWZ5AAIDANkCEpkDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevANM4x3ZfNNplAQALaW5jbHVkZV9zdHIAAgAA7hcmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwBliExaeYcOuAEACXN0cmluZ2lmeQACAwDZAhKNAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwAp9q/4U2XApQEAC2luY2x1ZGVfc3RyAAIAAKFdJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AbhOU+jBM+rgBAAlzdHJpbmdpZnkAAgMA2QISygIAAf+KA2YCAAAAAQECHwECE5fkCN4S968Am1/PFCWmnJYBAAtpbmNsdWRlX3N0cgACAADUogEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwDzhOFHcMTZDAEACXN0cmluZ2lmeQACAwDZAhI+AAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAA3+z3p/S7xSAQALaW5jbHVkZV9zdHIAAgAAoEAmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCHnsJSLPAWdgEACXN0cmluZ2lmeQACAwDZAhL7AQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDpBLL0NrZeygEAC2luY2x1ZGVfc3RyAAIAANOFASYAAAH3lANdAgAAAAEBAiABAhOX5AjeEvevAEN+5z6o6YXkAQAJc3RyaW5naWZ5AAIDANkCErgDAAH/igNmAgAAAAEBAh8BAhOX5AjeEvevAGHxJJWjukHtAQALaW5jbHVkZV9zdHIAAgAAnyMmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwC9PPZAxsch8gEACXN0cmluZ2lmeQACAwDZAhKsAQAB/4oDZgIAAAABAQIfAQITl+QI3hL3rwDSYE+f05ChFAEAC2luY2x1ZGVfc3RyAAIAANJoJgAAAfeUA10CAAAAAQECIAECE5fkCN4S968AmKkpCnTH0oMBAAlzdHJpbmdpZnkAAgMA2QIS6QIAAf+KA2YCAAAAAQECHwECE5fkCN4S968AAKjpa/E77cABAAtpbmNsdWRlX3N0cgACAACFrgEmAAAB95QDXQIAAAABAQIgAQITl+QI3hL3rwCfRnAdLRQ5RfeDCADSlAgAAAAAAH62CAAfkwgA+qMIAMq0CAB5kQgAVKIIACSzCADTjwgArqAIAH6xCAAtjggACJ8IANivCACHjAgAYp0IADKuCADhiggAvJsIAIysCAA7iQgAFpoIAOaqCACVhwgAcJgIAECpCADvhQgAypYIAJqnCABJhAgAJJUIAPSlCADQtggAcJMIAEukCAAbtQgAypEIAKWiCAB1swgAJJAIAP+gCADPsQgAfo4IAFmfCAApsAgA2IwIALOdCACDrggAMosIAA2cCADdrAgAjIkIAGeaCAA3qwgA5ocIAMGYCACRqQgAQIYIABuXCADrpwgAmoQIAHWVCABFpggAIbcIAMGTCACcpAgAbLUIAA2SCADooggAuLMIAGeQCABCoQgAErIIAMGOCACcnwgAbLAIABuNCAD2nQgAxq4IAHWLCABQnAgAIK0IAM+JCACqmggAeqsIACmICAAEmQgA1KkIAIOGCABelwgALqgIAN2ECAC4lQgAiKYIAGS3CAAElAgA36QIAK+1CABQkggAK6MIAPuzCACqkAgAhaEIAFWyCAAEjwgA358IAK+wCABejQgAOZ4IAAmvCAC4iwgAk5wIAGOtCAASiggA7ZoIAL2rCABsiAgAR5kIABeqCADGhggAoZcIAHGoCAAghQgA+5UIAMumCACntwgAR5QIACKlCADytQgAk5IIAG6jCAA+tAgA7ZAIAMihCACYsggAR48IACKgCADysAgAoY0IAHyeCABMrwgA+4sIANacCACmrQgAVYoIADCbCAAArAgAr4gIAIqZCABaqggACYcIAOSXCAC0qAgAY4UIAD6WCAAOpwgA6rcIAIyUCABopQgAOLYIANmSCAC0owgAhLQIADORCAAOoggA3rIIAI2PCABooAgAOLEIAOeNCADCnggAkq8IAEGMCAAcnQgA7K0IAJuKCAB2mwgARqwIAPWICADQmQgAoKoIAE+HCAAqmAgA+qgIAKmFCACElggAVKcIAAOECADelAgArqUIAIq2CAAqkwgABaQIANW0CACEkQgAX6IIAC+zCADejwgAuaAIAImxCAA4jggAE58IAOOvCACSjAgAbZ0IAD2uCADsiggAx5sIAJesCABGiQgAIZoIAPGqCACghwgAe5gIAEupCAD6hQgA1ZYIAKWnCABUhAgAL5UIAP+lCADbtggAe5MIAFakCAAmtQgA1ZEIALCiCACAswgAL5AIAAqhCADasQgAiY4IAGSfCAA0sAgA44wIAL6dCACOrggAPYsIABicCADorAgAl4kIAHKaCABCqwgA8YcIAMyYCACcqQgAS4YIACaXCAD2pwgApYQIAICVCABQpggALLcIAMyTCACnpAgAd7UIABiSCADzoggAw7MIAHKQCABNoQgAHbIIAMyOCACnnwgAd7AIACaNCAABnggA0a4IAICLCABbnAgAK60IANqJCAC1mggAhasIADSICAAPmQgA36kIAI6GCABplwgAOagIAOiECADDlQgAk6YIAG+3CAAPlAgA6qQIALq1CABbkggANqMIAAa0CAC1kAgAkKEIAGCyCAAPjwgA6p8IALqwCABpjQgARJ4IABSvCADDiwgAnpwIAG6tCAAdiggA+JoIAMirCAB3iAgAUpkIACKqCADRhggArJcIAHyoCAArhQgABpYIANamCACytwgAVJQIADClCAAAtggAoZIIAHyjCABMtAgA+5AIANahCACmsggAVY8IADCgCAAAsQgAr40IAIqeCABarwgACYwIAOScCAC0rQgAY4oIAD6bCAAOrAgAvYgIAJiZCABoqggAF4cIAPKXCADCqAgAcYUIAEyWCAAcpwgA+LcIAJqUCAB2pQgARrYIAOeSCADCowgAkrQIAEGRCAAcoggA7LIIAJuPCAB2oAgARrEIAPWNCADQnggAoK8IAE+MCAAqnQgA+q0IAKmKCACEmwgAVKwIAAOJCADemQgArqoIAF2HCAA4mAgACKkIALeFCACSlggAYqcIABGECADslAgAvKUIAJi2CAA4kwgAE6QIAOO0CACSkQgAbaIIAD2zCADsjwgAx6AIAJexCABGjggAIZ8IAPGvCACgjAgAe50IAEuuCAD6iggA1ZsIAKWsCABUiQgAL5oIAP+qCACuhwgAiZgIAFmpCAAIhggA45YIALOnCABihAgAPZUIAA2mCADptggAiZMIAGSkCAA0tQgA45EIAL6iCACOswgAPZAIABihCADosQgAl44IAHKfCABCsAgA8YwIAMydCACcrggAS4sIACacCAD2rAgApYkIAICaCABQqwgA/4cIANqYCACqqQgAWYYIADSXCAAEqAgAs4QIAI6VCABepggAOrcIANqTCAC1pAgAhbUIACaSCAABowgA0bMIAICQCABboQgAK7IIANqOCAC1nwgAhbAIADSNCAAPnggA364IAI6LCABpnAgAOa0IAOiJCADDmggAk6sIAEKICAAdmQgA7akIAJyGCAB3lwgAR6gIAPaECADRlQgAoaYIAH23CAAdlAgA+KQIAMi1CABpkggARKMIABS0CADDkAgAnqEIAG6yCAAdjwgA+J8IAMiwCAB3jQgAUp4IACKvCADRiwgArJwIAHytCAAriggABpsIANarCACFiAgAYJkIADCqCADfhggAupcIAIqoCAA5hQgAFJYIAOSmCADAtwgAYpQIAD6lCAAOtggAr5IIAIqjCABatAgACZEIAOShCAC0sggAY48IAD6gCAAOsQgAvY0IAJieCABorwgAF4wIAPKcCADCrQgAcYoIAEybCAAcrAgAy4gIAKaZCAB2qggAJYcIAACYCADQqAgAf4UIAFqWCAAqpwgABrgIAKiUCACEpQgAVLYIAPWSCADQowgAoLQIAE+RCAAqoggA+rIIAKmPCACEoAgAVLEIAAOOCADenggArq8IAF2MCAA4nQgACK4IALeKCACSmwgAYqwIABGJCADsmQgAvKoIAGuHCABGmAgAFqkIAMWFCACglggAcKcIAB+ECAD6lAgAyqUIAKa2CABGkwgAIaQIAPG0CACgkQgAe6IIAEuzCAD6jwgA1aAIAKWxCABUjggAL58IAP+vCACujAgAiZ0IAFmuCAAIiwgA45sIALOsCABiiQgAPZoIAA2rCAC8hwgAl5gIAGepCAAWhggA8ZYIAMGnCABwhAgAS5UIABumCAD3tggAl5MIAHKkCABCtQgA8ZEIAMyiCACcswgAS5AIACahCAD2sQgApY4IAICfCABQsAgA/4wIANqdCACqrggAWYsIADScCAAErQgAs4kIAI6aCABeqwgADYgIAOiYCAC4qQgAZ4YIAEKXCAASqAgAwYQIAJyVCABspggASLcIAOiTCADDpAgAk7UIADSSCAAPowgA37MIAI6QCABpoQgAObIIAOiOCADDnwgAk7AIAEKNCAAdnggA7a4IAJyLCAB3nAgAR60IAPaJCADRmggAoasIAFCICAArmQgA+6kIAKqGCACFlwgAVagIAASFCADflQgAr6YIAIu3CAArlAgABqUIANa1CAB3kggAUqMIACK0CADRkAgArKEIAHyyCAArjwgABqAIANawCACFjQgAYJ4IADCvCADfiwgAupwIAIqtCAA5iggAFJsIAOSrCACTiAgAbpkIAD6qCADthggAyJcIAJioCABHhQgAIpYIAPKmCADOtwgAcJQIAEylCAActggAvZIIAJijCABotAgAF5EIAPKhCADCsggAcY8IAEygCAAcsQgAy40IAKaeCAB2rwgAJYwIAACdCADQrQgAf4oIAFqbCAAqrAgA2YgIALSZCACEqggAM4cIAA6YCADeqAgAjYUIAGiWCAA4pwgAFLgIALaUCACSpQgAYrYIAAOTCADeowgArrQIAF2RCAA4oggACLMIALePCACSoAgAYrEIABGOCADsnggAvK8IAGuMCABGnQgAFq4IAMWKCACgmwgAcKwIAB+JCAD6mQgAyqoIAHmHCABUmAgAJKkIANOFCACulggAfqcIAC2ECAAIlQgA2KUIALS2CABUkwgAL6QIAP+0CACukQgAiaIIAFmzCAAIkAgA46AIALOxCABijggAPZ8IAA2wCAC8jAgAl50IAGeuCAAWiwgA8ZsIAMGsCABwiQgAS5oIABurCADKhwgApZgIAHWpCAAkhggA/5YIAM+nCAB+hAgAWZUIACmmCAAFtwgApZMIAICkCABQtQgA/5EIANqiCACqswgAWZAIADShCAAEsggAs44IAI6fCABesAgADY0IAOidCAC4rggAZ4sIAEKcCAASrQgAwYkIAJyaCABsqwgAG4gIAPaYCADGqQgAdYYIAFCXCAAgqAgAz4QIAKqVCAB6pggAVrcIAPaTCADRpAgAobUIAEKSCAAdowgA7bMIAJyQCAB3oQgAR7IIAPaOCADRnwgAobAIAFCNCAArnggA+64IAKqLCACFnAgAVa0IAASKCADfmggAr6sIAF6ICAA5mQgACaoIALiGCACTlwgAY6gIABKFCADt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