3hIElQAAAAAkAgAAHAAAADwRAADdAgAAXCIAAAAAAADQLQAAKgAAANEtAAASAAAA/C0AADsAAAAPLgAAJAAAAEsuAAAKAAAAcC4AAA4AAAB7LgAABgAAAIouAAAeAAAAkS4AABQAAACwLgAAHwAAAMUuAAAWAAAA5S4AABUAAAD8LgAACQAAABIvAAARAAAAHC8AABYAAAAuLwAAFgAAAEUvAAAWAAAAXC8AABIAAABzLwAAHQAAAIYvAAAPAAAApC8AACAAAAC0LwAABgAAANUvAAATAAAA3C8AABcAAADwLwAAGwAAAAgwAAAvAAAAJDAAADsAAABUMAAAJAAAAJAwAAA6AAAAtTAAABYAAADwMAAAFgAAAAcxAAAoAAAAHjEAACIAAABHMQAAFAAAAGoxAAAcAAAAfzEAAB0AAACcMQAAMwAAALoxAAAgAAAA7jEAACYAAAAPMgAAJgAAADYyAAAvAAAAXTIAAC8AAACNMgAAFQAAAL0yAAAVAAAA0zIAAC4AAADpMgAAHgAAABgzAAAWAAAANzMAABgAAABOMwAAGwAAAGczAAAdAAAAgzMAABMAAAChMwAAIgAAALUzAAATAAAA2DMAABAAAADsMwAAHQAAAP0zAAAVAAAAGzQAAC8AAAAxNAAAFQAAAGE0AAAVAAAAdzQAABIAAACNNAAALQAAAKA0AAAVAAAAzjQAABwAAADkNAAAEAAAAAE1AAAZAAAAEjUAABAAAAAsNQAAHwAAAD01AAAXAAAAXTUAABgAAAB1NQAAIQAAAI41AAAcAAAAsDUAACkAAADNNQAAGgAAAPc1AAAWAAAAEjYAABIAAAApNgAAFwAAADw2AAATAAAAVDYAAB0AAABoNgAAIAAAAIY2AAAhAAAApzYAABIAAADJNgAAIAAAANw2AAAWAAAA/TYAAA0AAAAUNwAAGwAAACI3AAAfAAAAPjcAABIAAABeNwAADwAAAHE3AAASAAAAgTcAABYAAACUNwAAFwAAAKs3AAAZAAAAwzcAABgAAADdNwAAGgAAAPY3AAANAAAAETgAAB0AAAAfOAAAHwAAAD04AAAmAAAAXTgAAB0AAACEOAAAFQAAAKI4AAAVAAAAuDgAAA4AAADOOAAAJgAAAN04AAAzAAAABDkAABwAAAA4OQAAGwAAAFU5AAAUAAAAcTkAAAsAAACGOQAAEAAAAJI5AAAOAAAAozkAAA0AAACyOQAAFgAAAMA5AAA5AAAA1zkAACMAAAAROgAAAQAAADU6AAAWAAAANzoAABEAAABOOgAACwAAAGA6AADfAwAAbDoAAEgDAABMPgAADwAAAJVBAAAPAAAApUEAAAsAAAC1QQAARgEAAMFBAAAOAAAACEMAAA8AAAAXQwAADAAAACdDAAALAAAANEMAAAkAAABAQwAACQAAAEpDAABrBAAAVEMAABMAAADARwAAuwoAANRHAAAIAAAAkFIAADIAAACZUgAAMQAAAMxSAABhAQAA/lIAAKwBAABgVAAAFwIAAA1WAABdAQAAJVgAAMgDAACDWQAAVAIAAExdAAAVBAAAoV8AAK0DAAC3YwAAEgUAAGVnAAArAgAAeGwAAEwBAACkbgAAqQAAAPFvAAABAwAAm3AAAD8DAACdcwAABAAAAN12AAAIAAAA4nYAAA8AAADrdgAAdAMAAPt2AADyAAAAcHoAAOwFAABjewAASQwAAFCBAACeAAAAmo0AAGcCAAA5jgAA9wAAAKGQAAADAQAAmZEAAPEAAACdkgAAZwIAAI+TAADyAAAA95UAAHUBAADqlgAArAEAAGCYAADXAwAADZoAAHcBAADlnQAABwAAAF2fAAB8AAAAZZ8AANYAAADinwAAiAAAALmgAAAKAAAAQqEAABgAAABNoQAA8gMAAGahAAAaAAAAWaUAABoAAAB0pQAAEgAAAI+lAADLAAAAoqUAABYAAABupgAAGAAAAIWmAAAaAAAAnqYAACAAAAC5pgAADAAAANqmAAAGAAAA56YAAA8AAADupgAACQAAAP6mAAATAAAACKcAABMAAAAcpwAACQAAADCnAAAGAAAAOqcAAE4AAABBpwAATgAAAJCnAABIAgAA36cAAA8EAAAoqgAAvgYAADiuAAAsAQAA97QAAD0BAAAktgAAZgAAAGK3AAAOAAAAybcAAEIHAADYtwAAhQEAABu/AAAEAAAAocAAABkIAACmwAAAUAAAAMDIAAAtBQAAEckAAAsAAAA/zgAAEAMAAEvOAACUAwAAXNEAAKsAAADx1AAA0wEAAJ3VAAD4AgAAcdcAAJACAABq2gAArAEAAPvcAAADAQAAqN4AAJEBAACs3wAARgAAAD7hAABGAAAAheEAAEwBAADM4QAAxgEAABnjAABTAAAA4OQAAAcAAAA05QAAEgAAADzlAAA+AwAAT+UAAMsCAACO6AAAmgYAAFrrAAA/AgAA9fEAAA8CAAA19AAADBAAAEX2AABgBQAAUgYBAEsAAACzCwEARAAAAP8LAQAPAAAARAwBAOMAAABUDAEACQAAADgNAQDBAwAAQg0BAAcAAAAEEQEAEAAAAAwRAQATAAAAHREBABQAAAAxEQEACwAAAEYRAQBPAQAAUhEBACoAAACiEgEACgAAAM0SAQAdAAAA2BIBABgAAAD2EgEAGAAAAA8TAQA2AAAAKBMBAE8BAABfEwEAQwAAAK8UAQDVBQAA8xQBAEIAAADJGgEARQAAAAwbAQAQAAAAUhsBABIAAABjGwEADQAAAHYbAQAOAAAAhBsBAAUCAACTGwEAEwAAAJkdAQBYAAAArR0BAB0AAAAGHgEAKgAAACQeAQANAAAATx4BAA0AAABdHgEA6AEAAGseAQB5AQAAVCABAA4AAADOIQEA6QAAAN0hAQBgAwAAxyIBABMAAAAoJgEAFwAAADwmAQAKAAAAVCYBABAAAABfJgEAEQAAAHAmAQAeAAAAgiYBACUAAAChJgEAJAAAAMcmAQAnAAAA7CYBABMAAAAUJwEAGAAAACgnAQAZAAAAQScBAB4AAABbJwEAIQAAAHonAQAcAAAAnCcBABsAAAC5JwEADAAAANUnAQAWAAAA4icBACcAAAD5JwEAMAAAACEoAQAuAAAAUigBAB4AAACBKAEAOQAAAKAoAQAIAAAA2igBABEAAADjKAEAHwAAAPUoAQAkAAAAFSkBABMAAAA6KQEAEAAAAE4pAQANAAAAXykBAAgAAABtKQEAJgAAAHYpAQAnAAAAnSkBADkAAADFKQEAEQAAAP8pAQCSAAAAESoBAAkAAACkKgEAGAAAAK4qAQAhAAAAxyoBAA0AAADpKgEAMwAAAPcqAQAeAAAAKysBAD0AAABKKwEALQAAAIgrAQAfAAAAtisBACcAAADWKwEAJgAAAP4rAQAqAAAAJSwBACoAAABQLAEAKQAAAHssAQApAAAApSwBACUAAADPLAEAJQAAAPUsAQAgAAAAGy0BADEAAAA8LQEAIwAAAG4tAQAxAAAAki0BACYAAADELQEANQAAAOstAQAOAAAAIS4BABwAAAAwLgEAIQAAAE0uAQAhAAAAby4BADoAAACRLgEAFwAAAMwuAQAaAAAA5C4BACAAAAD/LgEAMQAAACAvAQCVAAAAUi8BAKUAAADoLwEAIwAAAI4wAQAnAAAAsjABACQAAADaMAEADAAAAP8wAQAkAAAADDEBACMAAAAxMQEAJwAAAFUxAQAHAAAAfTEBAC4AAACFMQEALgAAALQxAQAeAAAA4zEBABUAAAACMgEAFQAAABgyAQAWAAAALjIBAB8AAABFMgEADQAAAGUyAQAdAAAAczIBABMAAACRMgEAFQAAAKUyAQAZAAAAuzIBACwAAADVMgEAJQAAAAIzAQAsAAAAKDMBACUAAABVMwEADgAAAHszAQBAAAAAijMBAAgAAADLMwEADAAAANQzAQAUAAAA4TMBACwAAAD2MwEAEwAAACM0AQAjAAAANzQBAAUAAABbNAEAQAAAAGE0AQANAAAAojQBABwAAACwNAEAGgAAAM00AQAtAAAA6DQBACwAAAAWNQEAJwAAAEM1AQAuAAAAazUBACwAAACaNQEAJgAAAMc1AQAwAAAA7jUBADYAAAAfNgEAUAAAAFY2AQAoAAAApzYBABwAAADQNgEAKQAAAO02AQAQAAAAFzcBABkAAAAoNwEAPwAAAEI3AQBUAAAAgjcBABAAAADXNwEAFQAAAOg3AQANAAAA/jcBADgAAAAMOAEAVgAAAEU4AQAmAAAAnDgBACcAAADDOAEAHwAAAOs4AQAXAAAACzkBAAwAAAAjOQEAKAAAADA5AQASAAAAWTkBAA4AAABsOQEAFAAAAHs5AQAVAAAAkDkBACIAAACmOQEADAAAAMk5AQA1AAAA1jkBAE8AAAAMOgEAEQAAAFw6AQARAAAAbjoBAAUAAACAOgEACQAAAIY6AQAYAAAAkDoBAB8AAACpOgEABwAAAMk6AQAKAAAA0ToBAAoAAADcOgEAKwAAAOc6AQA5AAAAEzsBADsAAABNOwEAJAAAAIk7AQAdAAAArjsBAFkAAADMOwEAHgAAACY8AQALAAAARTwBAAsAAABRPAEAGAAAAF08AQAdAAAAdjwBACAAAACUPAEAGgAAALU8AQAVAAAA0DwBABAAAADmPAEASAAAAPc8AQAOAAAAQD0BABwAAABPPQEADAAAAGw9AQASAAAAeT0BACIAAACMPQEAKwAAAK89AQAbAAAA2z0BAAwAAAD3PQEANAAAAAQ+AQAKAAAAOT4BAEQAAABEPgEAPwAAAIk+AQAsAAAAyT4BABMAAAD2PgEAFgAAAAo/AQAhAAAAIT8BACIAAABDPwEAIgAAAGY/AQARAAAAiT8BABoAAACbPwEACQAAALY/AQBvAAAAwD8BABIAAAAwQAEAWwAAAENAAQAxAAAAn0ABAC8AAADRQAEAKQAAAAFBAQAzAAAAK0EBABkAAABfQQEAJgAAAHlBAQAyAAAAoEEBADUAAADTQQEALAAAAAlCAQAKAAAANkIBAAoAAABBQgEAMQAAAExCAQBJAAAAfkIBADQAAADIQgEALgAAAP1CAQA4AAAALEMBACgAAABlQwEALAAAAI5DAQAsAAAAu0MBADAAAADoQwEAKQAAABlEAQAJAAAAQ0QBAAsAAABNRAEAIAAAAFlEAQAiAAAAekQBABsAAACdRAEAGQAAALlEAQAMAAAA00QBAAwAAADgRAEAJgAAAO1EAQA9AAAAFEUBABoAAABSRQEAFgAAAG1FAQAnAAAAhEUBABYAAACsRQEAHAAAAMNFAQAsAAAA4EUBACkAAAANRgEAHgAAADdGAQAkAAAAVkYBABUAAAB7RgEACwAAAJFGAQASAAAAnUYBAAUAAACwRgEAEgAAALZGAQAiAAAAyUYBABsAAADsRgEABAAAAAhHAQAdAAAADUcBACwAAAArRwEAJQAAAFhHAQAWAAAAfkcBABwAAACVRwEAJQAAALJHAQAuAAAA2EcBAC0AAAAHSAEANwAAADVIAQA2AAAAbUgBADIAAACkSAEAMQAAANdIAQAqAAAACUkBACwAAAA0SQEALAAAAGFJAQA7AAAAjkkBACMAAADKSQEABwAAAO5JAQAVAAAA9kkBABoAAAAMSgEAIQAAACdKAQAYAAAASUoBADYAAABiSgEACQAAAJlKAQAKAAAAo0oBACoAAACuSgEAIgAAANlKAQAfAAAA/EoBADYAAAAcSwEACQAAAFNLAQAPAAAAXUsBAC0AAABtSwEALQAAAJtLAQAhAAAAyUsBAA8AAADrSwEAJwAAAPtLAQAnAAAAI0wBAB0AAABLTAEADgAAAGlMAQBTAQAAeEwBACoAAADMTQEAEgAAAPdNAQA7AAAACk4BACQAAABGTgEACgAAAGtOAQAOAAAAdk4BAAYAAACFTgEAHgAAAIxOAQAUAAAAq04BAB8AAADATgEAFgAAAOBOAQAVAAAA904BAAkAAAANTwEAEQAAABdPAQAWAAAAKU8BABYAAABATwEAGgAAAFdPAQASAAAAck8BAB0AAACFTwEADwAAAKNPAQAkAAAAs08BAAYAAADYTwEAEwAAAN9PAQAXAAAA808BABsAAAALUAEALwAAACdQAQA7AAAAV1ABACQAAACTUAEAOgAAALhQAQAWAAAA81ABABYAAAAKUQEAKAAAACFRAQAiAAAASlEBABQAAABtUQEAHAAAAIJRAQAdAAAAn1EBADMAAAC9UQEAIAAAAPFRAQAmAAAAElIBACYAAAA5UgEALwAAAGBSAQAvAAAAkFIBABUAAADAUgEAFQAAANZSAQAuAAAA7FIBAB4AAAAbUwEAFgAAADpTAQAYAAAAUVMBABsAAABqUwEAHQAAAIZTAQATAAAApFMBACIAAAC4UwEAEwAAANtTAQAQAAAA71MBAB0AAAAAVAEAFQAAAB5UAQAvAAAANFQBABUAAABkVAEAFQAAAHpUAQASAAAAkFQBADEAAACjVAEAFQAAANVUAQAcAAAA61QBABAAAAAIVQEAGQAAABlVAQAQAAAAM1UBAB8AAABEVQEAFwAAAGRVAQAYAAAAfFUBACEAAACVVQEAHAAAALdVAQApAAAA1FUBABoAAAD+VQEAFgAAABlWAQASAAAAMFYBABcAAABDVgEAEwAAAFtWAQAdAAAAb1YBACAAAACNVgEAIQAAAK5WAQASAAAA0FYBACAAAADjVgEAFgAAAARXAQANAAAAG1cBABsAAAApVwEAHwAAAEVXAQASAAAAZVcBAA8AAAB4VwEAEgAAAIhXAQAWAAAAm1cBABcAAACyVwEAGQAAAMpXAQAYAAAA5FcBABoAAAD9VwEADQAAABhYAQAdAAAAJlgBAB8AAABEWAEAJgAAAGRYAQAdAAAAi1gBABUAAACpWAEAFQAAAL9YAQAOAAAA1VgBACYAAADkWAEANwAAAAtZAQAcAAAAQ1kBABsAAABgWQEAFAAAAHxZAQALAAAAkVkBABAAAACdWQEADgAAAK5ZAQANAAAAvVkBABYAAADLWQEAOQAAAOJZAQAjAAAAHFoBAAEAAABAWgEAFgAAAEJaAQARAAAAWVoBAAsAAABrWgEA6wMAAHdaAQBUAwAAY14BAA8AAAC4YQEADwAAAMhhAQALAAAA2GEBAEYBAADkYQEADgAAACtjAQAPAAAAOmMBAAwAAABKYwEACwAAAFdjAQAJAAAAY2MBAAkAAABtYwEAcwQAAHdjAQATAAAA62cBAN8KAAD/ZwEACAAAAN9yAQAyAAAA6HIBADEAAAAbcwEAZQEAAE1zAQCwAQAAs3QBAB8CAABkdgEAXQEAAIR4AQDQAwAA4nkBAFQCAACzfQEAOQQAAAiAAQC9AwAAQoQBABYFAAAAiAEAKwIAABeNAQBMAQAAQ48BAKkAAACQkAEAAQMAADqRAQBHAwAAPJQBAAQAAACElwEACAAAAImXAQAPAAAAkpcBAIADAACilwEA9gAAACObAQDsBQAAGpwBAE0MAAAHogEAqgAAAFWuAQBrAgAAAK8BAPcAAABssQEABwEAAGSyAQD1AAAAbLMBAHsCAABitAEA9gAAAN62AQCFAQAA1bcBAKwBAABbuQEA5wMAAAi7AQB3AQAA8L4BAAcAAABowAEAfAAAAHDAAQDWAAAA7cABAIgAAADEwQEACgAAAE3CAQAYAAAAWMIBAPIDAABxwgEAGgAAAGTGAQAaAAAAf8YBABIAAACaxgEAywAAAK3GAQAWAAAAeccBABgAAACQxwEAGgAAAKnHAQAgAAAAxMcBAAwAAADlxwEABgAAAPLHAQAPAAAA+ccBAAkAAAAJyAEAEwAAABPIAQATAAAAJ8gBAAkAAAA7yAEABgAAAEXIAQBOAAAATMgBAE4AAACbyAEATAIAAOrIAQAjBAAAN8sBANYGAABbzwEALAEAADLWAQBBAQAAX9cBAGYAAACh2AEADgAAAAjZAQBOBwAAF9kBAI0BAABm4AEABAAAAPThAQAZCAAA+eEBAFQAAAAT6gEALQUAAGjqAQALAAAAlu8BABADAACi7wEAsAMAALPyAQCrAAAAZPYBANMBAAAQ9wEAFAMAAOT4AQCUAgAA+fsBAKwBAACO/gEAAwEAADsAAgCdAQAAPwECAEYAAADdAgIARgAAACQDAgBMAQAAawMCAM4BAAC4BAIAUwAAAIcGAgAHAAAA2wYCABIAAADjBgIASgMAAPYGAgDPAgAAQQoCAJ4GAAARDQIAQwIAALATAgATAgAA9BUCAAwQAAAIGAIAgAUAABUoAgBPAAAAli0CAEQAAADmLQIADwAAACsuAgDjAAAAOy4CAAkAAAAfLwIAxQMAACkvAgAHAAAA7zICABAAAAD3MgIAEwAAAAgzAgAUAAAAHDMCAAsAAAAxMwIATwEAAD0zAgAuAAAAjTQCAAoAAAC8NAIAHQAAAMc0AgAYAAAA5TQCABgAAAD+NAIANgAAABc1AgBnAQAATjUCAEMAAAC2NgIA3QUAAPo2AgBKAAAA2DwCAEkAAAAjPQIAEAAAAG09AgASAAAAfj0CAA0AAACRPQIADgAAAJ89AgAJAgAArj0CABMAAAC4PwIAWAAAAMw/AgAhAAAAJUACAC4AAABHQAIADQAAAHZAAgANAAAAhEACAOgBAACSQAIAeQEAAHtCAgAOAAAA9UMCAOkAAAAERAIAZAMAAO5EAgATAAAAU0gCABcAAABnSAIACgAAAH9IAgAQAAAAikgCABUAAACbSAIAIgAAALFIAgApAAAA1EgCACgAAAD+SAIAKwAAACdJAgAXAAAAU0kCABwAAABrSQIAHQAAAIhJAgAiAAAApkkCACUAAADJSQIAIAAAAO9JAgAfAAAAEEoCABAAAAAwSgIAGgAAAEFKAgArAAAAXEoCADAAAACISgIALgAAALlKAgAeAAAA6EoCADkAAAAHSwIACAAAAEFLAgARAAAASksCAB8AAABcSwIAJAAAAHxLAgATAAAAoUsCABAAAAC1SwIADQAAAMZLAgAIAAAA1EsCACoAAADdSwIAKwAAAAhMAgA5AAAANEwCABEAAABuTAIAkgAAAIBMAgAJAAAAE00CABgAAAAdTQIAIQAAADZNAgANAAAAWE0CADcAAABmTQIAHgAAAJ5NAgA9AAAAvU0CAC0AAAD7TQIAHwAAAClOAgAnAAAASU4CACYAAABxTgIAKgAAAJhOAgAqAAAAw04CACkAAADuTgIAKQAAABhPAgAlAAAAQk8CACUAAABoTwIAIAAAAI5PAgAxAAAAr08CACMAAADhTwIAMQAAAAVQAgAmAAAAN1ACADUAAABeUAIADgAAAJRQAgAcAAAAo1ACACUAAADAUAIAIQAAAOZQAgA6AAAACFECABcAAABDUQIAGgAAAFtRAgAgAAAAdlECADEAAACXUQIAlQAAAMlRAgClAAAAX1ICACcAAAAFUwIAJwAAAC1TAgAkAAAAVVMCAAwAAAB6UwIAJAAAAIdTAgAjAAAArFMCACsAAADQUwIABwAAAPxTAgAuAAAABFQCAC4AAAAzVAIAHgAAAGJUAgAVAAAAgVQCABUAAACXVAIAFgAAAK1UAgAfAAAAxFQCAA0AAADkVAIAHQAAAPJUAgATAAAAEFUCABUAAAAkVQIAGQAAADpVAgAsAAAAVFUCACUAAACBVQIAMAAAAKdVAgAlAAAA2FUCAA4AAAD+VQIAQAAAAA1WAgAIAAAATlYCABAAAABXVgIAFAAAAGhWAgAsAAAAfVYCABMAAACqVgIAIwAAAL5WAgAFAAAA4lYCAEAAAADoVgIADQAAAClXAgAcAAAAN1cCABoAAABUVwIALQAAAG9XAgAsAAAAnVcCACcAAADKVwIALgAAAPJXAgAsAAAAIVgCACYAAABOWAIAMAAAAHVYAgA2AAAAplgCAFAAAADdWAIAKAAAAC5ZAgAcAAAAV1kCACkAAAB0WQIAEAAAAJ5ZAgAZAAAAr1kCAEMAAADJWQIAVAAAAA1aAgAQAAAAYloCABUAAABzWgIADQAAAIlaAgA4AAAAl1oCAFYAAADQWgIAJgAAACdbAgAnAAAATlsCAB8AAAB2WwIAFwAAAJZbAgAMAAAArlsCACgAAAC7WwIAEgAAAORbAgAOAAAA91sCABQAAAAGXAIAFQAAABtcAgAiAAAAMVwCAAwAAABUXAIANQAAAGFcAgBPAAAAl1wCABEAAADnXAIAEQAAAPlcAgAFAAAAC10CAAkAAAARXQIAGAAAABtdAgAfAAAANF0CAAcAAABUXQIACgAAAFxdAgAKAAAAZ10CACsAAAByXQIAOQAAAJ5dAgA/AAAA2F0CACQAAAAYXgIAHQAAAD1eAgBZAAAAW14CAB4AAAC1XgIADwAAANReAgAPAAAA5F4CABgAAAD0XgIAHQAAAA1fAgAgAAAAK18CAB4AAABMXwIAGQAAAGtfAgAQAAAAhV8CAFgAAACWXwIADgAAAO9fAgAcAAAA/l8CAAwAAAAbYAIAEgAAAChgAgAmAAAAO2ACACsAAABiYAIAHwAAAI5gAgAMAAAArmACAEAAAAC7YAIACgAAAPxgAgBEAAAAB2ECAD8AAABMYQIALAAAAIxhAgATAAAAuWECABYAAADNYQIAJQAAAORhAgAiAAAACmICACIAAAAtYgIAEQAAAFBiAgAaAAAAYmICAAkAAAB9YgIAbwAAAIdiAgASAAAA92ICAFsAAAAKYwIAMQAAAGZjAgAvAAAAmGMCACkAAADIYwIAMwAAAPJjAgAZAAAAJmQCACYAAABAZAIAMgAAAGdkAgA1AAAAmmQCACwAAADQZAIACgAAAP1kAgAKAAAACGUCADEAAAATZQIASQAAAEVlAgA0AAAAj2UCAC4AAADEZQIAOAAAAPNlAgAoAAAALGYCACwAAABVZgIALAAAAIJmAgAwAAAAr2YCACkAAADgZgIACQAAAApnAgALAAAAFGcCACAAAAAgZwIAIgAAAEFnAgAbAAAAZGcCABkAAACAZwIADAAAAJpnAgAMAAAAp2cCACYAAAC0ZwIAQQAAANtnAgAaAAAAHWgCABoAAAA4aAIAKwAAAFNoAgAaAAAAf2gCACAAAACaaAIALAAAALtoAgApAAAA6GgCAB4AAAASaQIAJAAAADFpAgAVAAAAVmkCAAsAAABsaQIAEgAAAHhpAgAFAAAAi2kCABIAAACRaQIAIgAAAKRpAgAbAAAAx2kCAAQAAADjaQIAHQAAAOhpAgAsAAAABmoCACUAAAAzagIAFgAAAFlqAgAcAAAAcGoCACkAAACNagIAMgAAALdqAgAxAAAA6moCADsAAAAcawIAOgAAAFhrAgAyAAAAk2sCADEAAADGawIAKgAAAPhrAgAwAAAAI2wCADAAAABUbAIAPwAAAIVsAgArAAAAxWwCAAcAAADxbAIAFQAAAPlsAgAaAAAAD20CACEAAAAqbQIAGAAAAExtAgA2AAAAZW0CAAkAAACcbQIACgAAAKZtAgAqAAAAsW0CACIAAADcbQIAHwAAAP9tAgA2AAAAH24CAAkAAABWbgIADwAAAGBuAgAtAAAAcG4CAC0AAACebgIAIQAAAMxuAgAPAAAA7m4CACcAAAD+bgIAJwAAACZvAgAdAAAATm8CAA4AAABsbwIAAQAAAAAAAAAjAgAANgEAAB8AAAB8AQAALwAAAHUBAABcAAAAkQAAABoAAADiAQAA0AEAAAICAADuAAAAAAAAAAAAAAABAQAAswAAAKcBAACxAQAAGAEAAKUBAAAAAAAA8QEAAAAAAABlAQAAYwAAANQBAABUAAAA5QAAAAAAAAAAAAAAjQEAACQCAAB3AAAAcgAAAAYAAABwAAAA5AAAAF0BAADEAAAAAAAAAAMBAABLAAAAqAEAAAAAAAAnAQAA+QEAAAAAAACPAQAARwAAALYAAAAAAAAAawEAABoCAAACAAAAvQEAAHQAAADGAAAAAAAAACIAAAAAAAAArwEAAAAAAADvAAAAAAAAAKsAAADZAAAA3gEAAEUBAAAqAAAAVAEAAIcAAADaAQAAnwEAADkAAAAAAAAADQEAACAAAAAAAAAAAAAAACwAAAAAAAAAjgAAAIgAAAACAQAA5AEAAJoAAADFAQAASQEAAEoBAAAxAQAAAAAAABICAADYAAAAmQAAAH8AAAAAAAAAAAAAAAYBAAAAAAAAZQAAAH4AAAD8AQAAnAEAAAAAAAAAAAAAnQAAAJMAAAB2AAAAGAAAAIMBAAAAAAAAMQAAAAAAAAD3AAAAAAAAAN8AAAAnAAAADgAAAC8BAAAAAAAAAAAAAEEBAACbAAAA0QEAAAAAAAAHAAAAfQAAAHoAAAAAAAAAmwEAAPUBAACZAQAAaAAAAEABAAAAAAAAPgEAAAAAAAB3AQAA8QAAAKwAAAAAAAAAAAAAAMIBAAAGAgAAxAEAAAAAAAAAAAAAwQEAAAAAAAAjAQAAyAEAANkBAAAoAQAAXAEAABAAAADWAAAAmgEAAFUBAAA0AAAAhgAAAAAAAADiAAAADwEAAC4BAABdAAAAuQEAAJIAAAAAAAAAfwEAADQBAAB5AQAACwAAALEAAAD6AQAAewAAAPIBAAA4AQAA+QAAAAAAAABTAQAAbgEAAFsAAAAEAgAA3AEAAAAAAACzAQAAuwEAAAAAAAAAAgAAmAEAAAAAAADlAQAACAEAAO0BAADLAQAAAAAAAKIBAAAyAAAA5wAAAA4CAAAAAAAA2wAAAEgAAABMAAAAwgAAAAAAAAADAAAA+gAAAAAAAACXAAAAMwAAAE8BAAAAAAAAhwEAAAAAAABDAAAAAAAAABEBAADNAAAAAAAAAAAAAAAhAQAAHgAAAHYBAADVAAAACAAAAC0AAABGAQAAAAAAAP0BAADrAQAA3QAAALsAAABiAAAArgAAAAAAAABqAAAAGgEAAPQBAADXAAAAAAAAAAAAAADTAAAAiQAAAAAAAAA1AAAAMwEAAPsAAAD/AQAAiQEAAEkAAAAAAAAAFwIAAAAAAADFAAAAZAAAAGkAAADAAQAAxgEAALQAAAAAAAAAdAEAAAAAAAAcAAAAAAAAAIYBAAD4AQAAGwEAAAAAAABNAAAAjAAAAHsBAAC4AQAAvAAAANYBAAAKAgAA9AAAAAAAAAALAQAAAAAAAAcBAACTAQAAWQAAAH4BAAAAAAAAAAAAACUBAABEAAAAAAAAAOgBAABaAAAAoQEAABABAAABAgAAnAAAAAAAAAAOAQAAJAAAAAkBAAAAAAAAvgEAAB8BAAAAAAAAawAAAHwAAAAUAQAAAAAAAP8AAAAVAAAAeAAAAD0AAAAAAAAAtwEAAPUAAADOAAAALgAAAD8BAACgAAAA0wEAAAAAAACpAQAACQAAADwBAAApAAAACAIAABkAAACkAQAAIQIAAAAAAAAAAAAA4AAAAI4BAADXAQAAvgAAAK0AAAD2AQAAAAAAAHUAAAAAAAAAUQEAABIBAAA3AQAAAAAAANwAAAB9AQAA2gAAAJEBAAAAAAAAAAAAAAAAAABZAQAAeAEAAPwAAADpAAAAJAEAAFUAAABoAQAAzQEAAG0AAACtAQAAFAAAAGAAAABeAQAASwEAAFMAAACyAQAAJgAAAJUBAABkAQAAAAAAABgCAAAXAQAASAEAAAAAAABKAAAABQEAACIBAAAAAAAAAAAAAAAAAAAAAAAA4QAAAAAAAAAoAAAAMgEAAAAAAAAAAAAARwEAAAAAAABqAQAACQIAAAAAAAATAQAApwAAAKsBAAC/AAAADQIAAAAAAAAfAgAAAAAAAP4AAABaAQAAcwAAAMoAAAA2AAAAAAAAANEAAABiAQAAZgAAAIAAAACuAQAA0AAAAKoAAADzAAAAowEAANIBAADMAQAAbQEAABECAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAgQEAAAAAAACBAAAAKwEAAAAAAAAAAAAAAAAAALAAAAClAAAAAAAAAKQAAAAAAAAAAAAAACMAAAAUAgAATAEAAO4BAAA4AAAAEwIAAAAAAAC2AQAAGQEAAAABAADzAQAAhAEAAAAAAABSAAAA+AAAAKEAAAC8AQAAwQAAAHMBAAAAAAAAggEAAOoAAAByAQAAAAAAAOwBAABQAQAAFwAAAHABAAB6AQAAAAAAACsAAACLAAAAyQAAALoBAAA/AAAAigAAAFcBAACpAAAAWwEAAAAAAAAgAQAAAAAAADkBAACfAAAAuQAAANgBAABWAAAAAAAAAAAAAAAAAAAAAAAAAGkBAABmAQAAbwAAAGABAACXAQAAAAAAAAAAAAC1AAAAbAAAAO0AAADqAQAAXwAAABwBAADLAAAAAAAAAB0CAAAAAAAAXwEAACEAAAAAAAAArAEAAAAAAAAcAgAADAAAAM8BAAAAAAAAzgEAAJ0BAAAAAAAAAAAAANsBAAADAgAAAAAAAIsBAAAAAAAAYQAAAKoBAAAAAAAAWAEAAA0AAAD7AQAAlAEAAE4BAACYAAAA8AAAAC0BAABBAAAAAAAAAAAAAAD+AQAAGwIAAAAAAADVAQAARQAAAIIAAACoAAAAwwAAAIwBAADjAAAA9wEAANQAAAAAAAAATgAAAPABAAC9AAAAVgEAAAAAAADoAAAAZwAAAAAAAAA3AAAAAAAAAAAAAACNAAAAAAAAABIAAAAAAAAADwAAAAAAAAAQAgAAAAAAADAAAADmAQAAFgEAAM8AAABhAQAAxwEAAHEAAABxAQAACgAAAAAAAAALAgAAxwAAALABAABRAAAAngEAAAAAAABnAQAAvwEAAAAAAAAHAgAAbAEAAIABAACVAAAAAAAAADoBAACIAQAAsgAAAAAAAAAFAgAAkAAAAAAAAAAAAAAAAAAAAPYAAAAPAgAAHgIAACkBAAAEAAAAkgEAAJYBAACUAAAAOwEAAEAAAAC6AAAAgwAAAMkBAABEAQAAQwEAAOcBAAAAAAAATwAAAKIAAAC3AAAAhQEAAAAAAAAAAAAAAAAAAAAAAABCAQAAtAEAAAAAAADvAQAALAEAAAAAAAA6AAAAHgEAABUCAADKAQAAIAIAAOEBAAAAAAAAFgIAAAoBAADIAAAAAAAAAOYAAADjAQAA6QEAAMAAAAATAAAAkAEAAOABAAAAAAAARgAAAP0AAACvAAAAbwEAAIoBAABQAAAA7AAAAAwCAABuAAAAAAAAAAAAAABYAAAAPgAAAAAAAAC1AQAAGQIAAAAAAACgAQAAPQEAAAAAAAA7AAAAFgAAABUBAAAAAAAAhAAAAI8AAAAAAAAAhQAAAKMAAAAAAAAAuAAAAF4AAADMAAAAKgEAAAAAAAAAAAAAwwEAANIAAACeAAAAAAAAAAAAAADeAAAAHQEAAHkAAAAAAAAA8gAAAAQBAAAbAAAApgAAAAAAAAAAAAAA6wAAADABAABXAAAAJQAAAAAAAAAAAAAANQEAAE0BAABSAQAA3wEAAN0BAAARAAAApgEAAAAAAABjAQAAHQAAAEIAAAAFAAAAAAAAAAAAAAAiAgAAAAAAAAwBAACWAAAAJgEAAAAHdGltZWQgb3V0IHdhaXRpbmcgZm9yIGlucHV0OiBhdXRvLWxvZ291dAoACS0lcyBvciAtbyBvcHRpb24KAAktaXJzRCBvciAtYyBjb21tYW5kIG9yIC1PIHNob3B0X29wdGlvbgkJKGludm9jYXRpb24gb25seSkKAA0KbWFsbG9jOiAlczolZDogYXNzZXJ0aW9uIGJvdGNoZWQNCgAgICh3ZDogJXMpACAoY29yZSBkdW1wZWQpACBsaW5lIAAkJXM6IGNhbm5vdCBhc3NpZ24gaW4gdGhpcyB3YXkAJWMlYzogaW52YWxpZCBvcHRpb24AJWQ6IGludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiAlcwAlcyBjYW4gYmUgaW52b2tlZCB2aWEgACVzIGhhcyBudWxsIGV4cG9ydHN0cgAlcyBpcyAlcwoAJXMgaXMgYSBmdW5jdGlvbgoAJXMgaXMgYSBzaGVsbCBidWlsdGluCgAlcyBpcyBhIHNoZWxsIGtleXdvcmQKACVzIGlzIGFsaWFzZWQgdG8gYCVzJwoAJXMgaXMgaGFzaGVkICglcykKACVzIGlzIG5vdCBib3VuZCB0byBhbnkga2V5cy4KACVzIG91dCBvZiByYW5nZQAlcyVzJXM6ICVzIChlcnJvciB0b2tlbiBpcyAiJXMiKQAlczogJXMAJXM6ICVzIG91dCBvZiByYW5nZQAlczogJXM6IGJhZCBpbnRlcnByZXRlcgAlczogJXM6IGNhbm5vdCBvcGVuIGFzIEZJTEUAJXM6ICVzOiBpbnZhbGlkIHZhbHVlIGZvciB0cmFjZSBmaWxlIGRlc2NyaXB0b3IAJXM6ICVzOiBtdXN0IHVzZSBzdWJzY3JpcHQgd2hlbiBhc3NpZ25pbmcgYXNzb2NpYXRpdmUgYXJyYXkAJXM6ICVzOiVkOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzACVzOiAlczolZDogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyAoJWx1IGJ5dGVzIGFsbG9jYXRlZCkAJXM6IGFtYmlndW91cyBqb2Igc3BlYwAlczogYW1iaWd1b3VzIHJlZGlyZWN0ACVzOiBhcmd1bWVudHMgbXVzdCBiZSBwcm9jZXNzIG9yIGpvYiBJRHMAJXM6IGJhZCBuZXR3b3JrIHBhdGggc3BlY2lmaWNhdGlvbgAlczogYmFkIHN1YnN0aXR1dGlvbgAlczogYmluYXJ5IG9wZXJhdG9yIGV4cGVjdGVkACVzOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzACVzOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzICglbHUgYnl0ZXMgYWxsb2NhdGVkKQAlczogY2Fubm90IGFzc2lnbiBmZCB0byB2YXJpYWJsZQAlczogY2Fubm90IGFzc2lnbiBsaXN0IHRvIGFycmF5IG1lbWJlcgAlczogY2Fubm90IGFzc2lnbiB0byBub24tbnVtZXJpYyBpbmRleAAlczogY2Fubm90IGNvbnZlcnQgYXNzb2NpYXRpdmUgdG8gaW5kZXhlZCBhcnJheQAlczogY2Fubm90IGNvbnZlcnQgaW5kZXhlZCB0byBhc3NvY2lhdGl2ZSBhcnJheQAlczogY2Fubm90IGNyZWF0ZTogJXMAJXM6IGNhbm5vdCBkZWxldGU6ICVzACVzOiBjYW5ub3QgZGVzdHJveSBhcnJheSB2YXJpYWJsZXMgaW4gdGhpcyB3YXkAJXM6IGNhbm5vdCBleGVjdXRlIGJpbmFyeSBmaWxlACVzOiBjYW5ub3QgZXhlY3V0ZTogJXMAJXM6IGNhbm5vdCBnZXQgbGltaXQ6ICVzACVzOiBjYW5ub3QgbW9kaWZ5IGxpbWl0OiAlcwAlczogY2Fubm90IG9wZW4gdGVtcCBmaWxlOiAlcwAlczogY2Fubm90IG9wZW46ICVzACVzOiBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUAJXM6IGNhbm5vdCByZWFkOiAlcwAlczogY2Fubm90IHVuc2V0ACVzOiBjYW5ub3QgdW5zZXQ6IHJlYWRvbmx5ICVzACVzOiBjb21tYW5kIG5vdCBmb3VuZAAlczogZXJyb3IgcmV0cmlldmluZyBjdXJyZW50IGRpcmVjdG9yeTogJXM6ICVzCgAlczogZXhwcmVzc2lvbiBlcnJvcgoAJXM6IGZpbGUgaXMgdG9vIGxhcmdlACVzOiBmaWxlIG5vdCBmb3VuZAAlczogZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBgIicAJXM6IGhhc2ggdGFibGUgZW1wdHkKACVzOiBoaXN0b3J5IGV4cGFuc2lvbiBmYWlsZWQAJXM6IGhvc3QgdW5rbm93bgAlczogaWxsZWdhbCBvcHRpb24gLS0gJWMKACVzOiBpbmxpYiBmYWlsZWQAJXM6IGludGVnZXIgZXhwcmVzc2lvbiBleHBlY3RlZAAlczogaW52YWxpZCBhY3Rpb24gbmFtZQAlczogaW52YWxpZCBhcnJheSBvcmlnaW4AJXM6IGludmFsaWQgYXNzb2NpYXRpdmUgYXJyYXkga2V5ACVzOiBpbnZhbGlkIGNhbGxiYWNrIHF1YW50dW0AJXM6IGludmFsaWQgZmlsZSBkZXNjcmlwdG9yIHNwZWNpZmljYXRpb24AJXM6IGludmFsaWQgbGltaXQgYXJndW1lbnQAJXM6IGludmFsaWQgbGluZSBjb3VudAAlczogaW52YWxpZCBvcHRpb24AJXM6IGludmFsaWQgb3B0aW9uIG5hbWUAJXM6IGludmFsaWQgc2VydmljZQAlczogaW52YWxpZCBzaGVsbCBvcHRpb24gbmFtZQAlczogaW52YWxpZCBzaWduYWwgc3BlY2lmaWNhdGlvbgAlczogaW52YWxpZCB0aW1lb3V0IHNwZWNpZmljYXRpb24AJXM6IGlzIGEgZGlyZWN0b3J5ACVzOiBqb2IgJWQgYWxyZWFkeSBpbiBiYWNrZ3JvdW5kACVzOiBqb2IgaGFzIHRlcm1pbmF0ZWQAJXM6IGxpbmUgJWQ6IAAlczogbWlzc2luZyBjb2xvbiBzZXBhcmF0b3IAJXM6IG5vIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbgAlczogbm8gam9iIGNvbnRyb2wAJXM6IG5vIHN1Y2ggam9iACVzOiBub3QgYSBmdW5jdGlvbgAlczogbm90IGEgcmVndWxhciBmaWxlACVzOiBub3QgYSBzaGVsbCBidWlsdGluACVzOiBub3QgYW4gYXJyYXkgdmFyaWFibGUAJXM6IG5vdCBhbiBpbmRleGVkIGFycmF5ACVzOiBub3QgZHluYW1pY2FsbHkgbG9hZGVkACVzOiBub3QgZm91bmQAJXM6IG51bWVyaWMgYXJndW1lbnQgcmVxdWlyZWQAJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudAAlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjCgAlczogcGFyYW1ldGVyIG51bGwgb3Igbm90IHNldAAlczogcmVhZG9ubHkgZnVuY3Rpb24AJXM6IHJlYWRvbmx5IHZhcmlhYmxlACVzOiByZXN0cmljdGVkACVzOiByZXN0cmljdGVkOiBjYW5ub3QgcmVkaXJlY3Qgb3V0cHV0ACVzOiByZXN0cmljdGVkOiBjYW5ub3Qgc3BlY2lmeSBgLycgaW4gY29tbWFuZCBuYW1lcwAlczogc3Vic3RyaW5nIGV4cHJlc3Npb24gPCAwACVzOiB1bmFyeSBvcGVyYXRvciBleHBlY3RlZAAlczogdW5ib3VuZCB2YXJpYWJsZQAlczogdXNhZ2U6IAAoKCBleHByZXNzaW9uICkpAChjb3JlIGR1bXBlZCkgACh3ZCBub3c6ICVzKQoALiBmaWxlbmFtZSBbYXJndW1lbnRzXQAvZGV2Lyh0Y3B8dWRwKS9ob3N0L3BvcnQgbm90IHN1cHBvcnRlZCB3aXRob3V0IG5ldHdvcmtpbmcAL3RtcCBtdXN0IGJlIGEgdmFsaWQgZGlyZWN0b3J5IG5hbWUAOgA8bm8gY3VycmVudCBkaXJlY3Rvcnk+AEFCT1JUIGluc3RydWN0aW9uAEFib3J0aW5nLi4uAEFkZCBkaXJlY3RvcmllcyB0byBzdGFjay4KICAgIAogICAgQWRkcyBhIGRpcmVjdG9yeSB0byB0aGUgdG9wIG9mIHRoZSBkaXJlY3Rvcnkgc3RhY2ssIG9yIHJvdGF0ZXMKICAgIHRoZSBzdGFjaywgbWFraW5nIHRoZSBuZXcgdG9wIG9mIHRoZSBzdGFjayB0aGUgY3VycmVudCB3b3JraW5nCiAgICBkaXJlY3RvcnkuICBXaXRoIG5vIGFyZ3VtZW50cywgZXhjaGFuZ2VzIHRoZSB0b3AgdHdvIGRpcmVjdG9yaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIGFkZGluZwogICAgCWRpcmVjdG9yaWVzIHRvIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSBsZWZ0IG9mIHRoZSBsaXN0IHNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgLU4JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGgKICAgIAl6ZXJvKSBpcyBhdCB0aGUgdG9wLgogICAgCiAgICAgIGRpcglBZGRzIERJUiB0byB0aGUgZGlyZWN0b3J5IHN0YWNrIGF0IHRoZSB0b3AsIG1ha2luZyBpdCB0aGUKICAgIAluZXcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgVGhlIGBkaXJzJyBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHN1cHBsaWVkIG9yIHRoZSBkaXJlY3RvcnkKICAgIGNoYW5nZSBmYWlscy4AQWRkcyBhIGRpcmVjdG9yeSB0byB0aGUgdG9wIG9mIHRoZSBkaXJlY3Rvcnkgc3RhY2ssIG9yIHJvdGF0ZXMKICAgIHRoZSBzdGFjaywgbWFraW5nIHRoZSBuZXcgdG9wIG9mIHRoZSBzdGFjayB0aGUgY3VycmVudCB3b3JraW5nCiAgICBkaXJlY3RvcnkuICBXaXRoIG5vIGFyZ3VtZW50cywgZXhjaGFuZ2VzIHRoZSB0b3AgdHdvIGRpcmVjdG9yaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIGFkZGluZwogICAgCWRpcmVjdG9yaWVzIHRvIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSBsZWZ0IG9mIHRoZSBsaXN0IHNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgLU4JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGgKICAgIAl6ZXJvKSBpcyBhdCB0aGUgdG9wLgogICAgCiAgICAgIGRpcglBZGRzIERJUiB0byB0aGUgZGlyZWN0b3J5IHN0YWNrIGF0IHRoZSB0b3AsIG1ha2luZyBpdCB0aGUKICAgIAluZXcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgVGhlIGBkaXJzJyBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suAEFsYXJtIChwcm9maWxlKQBBbGFybSAodmlydHVhbCkAQWxhcm0gY2xvY2sAQXJpdGhtZXRpYyBmb3IgbG9vcC4KICAgIAogICAgRXF1aXZhbGVudCB0bwogICAgCSgoIEVYUDEgKSkKICAgIAl3aGlsZSAoKCBFWFAyICkpOyBkbwogICAgCQlDT01NQU5EUwogICAgCQkoKCBFWFAzICkpCiAgICAJZG9uZQogICAgRVhQMSwgRVhQMiwgYW5kIEVYUDMgYXJlIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMuICBJZiBhbnkgZXhwcmVzc2lvbiBpcwogICAgb21pdHRlZCwgaXQgYmVoYXZlcyBhcyBpZiBpdCBldmFsdWF0ZXMgdG8gMS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4AQlBUIHRyYWNlL3RyYXAAQmFkIHN5c3RlbSBjYWxsAEJvZ3VzIHNpZ25hbABCcm9rZW4gcGlwZQBCdXMgZXJyb3IAQ1BVIGxpbWl0AENoYW5nZSB0aGUgc2hlbGwgd29ya2luZyBkaXJlY3RvcnkuCiAgICAKICAgIENoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gRElSLiAgVGhlIGRlZmF1bHQgRElSIGlzIHRoZSB2YWx1ZSBvZiB0aGUKICAgIEhPTUUgc2hlbGwgdmFyaWFibGUuCiAgICAKICAgIFRoZSB2YXJpYWJsZSBDRFBBVEggZGVmaW5lcyB0aGUgc2VhcmNoIHBhdGggZm9yIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZwogICAgRElSLiAgQWx0ZXJuYXRpdmUgZGlyZWN0b3J5IG5hbWVzIGluIENEUEFUSCBhcmUgc2VwYXJhdGVkIGJ5IGEgY29sb24gKDopLgogICAgQSBudWxsIGRpcmVjdG9yeSBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIElmIERJUiBiZWdpbnMKICAgIHdpdGggYSBzbGFzaCAoLyksIHRoZW4gQ0RQQVRIIGlzIG5vdCB1c2VkLgogICAgCiAgICBJZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBmb3VuZCwgYW5kIHRoZSBzaGVsbCBvcHRpb24gYGNkYWJsZV92YXJzJyBpcyBzZXQsCiAgICB0aGUgd29yZCBpcyBhc3N1bWVkIHRvIGJlICBhIHZhcmlhYmxlIG5hbWUuICBJZiB0aGF0IHZhcmlhYmxlIGhhcyBhIHZhbHVlLAogICAgaXRzIHZhbHVlIGlzIHVzZWQgZm9yIERJUi4KICAgIAogICAgT3B0aW9uczoKICAgICAgICAtTAlmb3JjZSBzeW1ib2xpYyBsaW5rcyB0byBiZSBmb2xsb3dlZAogICAgICAgIC1QCXVzZSB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRob3V0IGZvbGxvd2luZyBzeW1ib2xpYwogICAgCWxpbmtzCiAgICAgICAgLWUJaWYgdGhlIC1QIG9wdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICAJY2Fubm90IGJlIGRldGVybWluZWQgc3VjY2Vzc2Z1bGx5LCBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMKICAgIAogICAgVGhlIGRlZmF1bHQgaXMgdG8gZm9sbG93IHN5bWJvbGljIGxpbmtzLCBhcyBpZiBgLUwnIHdlcmUgc3BlY2lmaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMCBpZiB0aGUgZGlyZWN0b3J5IGlzIGNoYW5nZWQsIGFuZCBpZiAkUFdEIGlzIHNldCBzdWNjZXNzZnVsbHkgd2hlbgogICAgLVAgaXMgdXNlZDsgbm9uLXplcm8gb3RoZXJ3aXNlLgBDaGlsZCBkZWF0aCBvciBzdG9wAENvbW1vbiBzaGVsbCB2YXJpYWJsZSBuYW1lcyBhbmQgdXNhZ2UuCiAgICAKICAgIEJBU0hfVkVSU0lPTglWZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIEJhc2guCiAgICBDRFBBVEgJQSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2gKICAgIAkJZm9yIGRpcmVjdG9yaWVzIGdpdmVuIGFzIGFyZ3VtZW50cyB0byBgY2QnLgogICAgR0xPQklHTk9SRQlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIGRlc2NyaWJpbmcgZmlsZW5hbWVzIHRvCiAgICAJCWJlIGlnbm9yZWQgYnkgcGF0aG5hbWUgZXhwYW5zaW9uLgogICAgSElTVEZJTEUJVGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgeW91ciBjb21tYW5kIGhpc3RvcnkgaXMgc3RvcmVkLgogICAgSElTVEZJTEVTSVpFCVRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGlzIGZpbGUgY2FuIGNvbnRhaW4uCiAgICBISVNUU0laRQlUaGUgbWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBsaW5lcyB0aGF0IGEgcnVubmluZwogICAgCQlzaGVsbCBjYW4gYWNjZXNzLgogICAgSE9NRQlUaGUgY29tcGxldGUgcGF0aG5hbWUgdG8geW91ciBsb2dpbiBkaXJlY3RvcnkuCiAgICBIT1NUTkFNRQlUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBob3N0LgogICAgSE9TVFRZUEUJVGhlIHR5cGUgb2YgQ1BVIHRoaXMgdmVyc2lvbiBvZiBCYXNoIGlzIHJ1bm5pbmcgdW5kZXIuCiAgICBJR05PUkVFT0YJQ29udHJvbHMgdGhlIGFjdGlvbiBvZiB0aGUgc2hlbGwgb24gcmVjZWlwdCBvZiBhbiBFT0YKICAgIAkJY2hhcmFjdGVyIGFzIHRoZSBzb2xlIGlucHV0LiAgSWYgc2V0LCB0aGVuIHRoZSB2YWx1ZQogICAgCQlvZiBpdCBpcyB0aGUgbnVtYmVyIG9mIEVPRiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHNlZW4KICAgIAkJaW4gYSByb3cgb24gYW4gZW1wdHkgbGluZSBiZWZvcmUgdGhlIHNoZWxsIHdpbGwgZXhpdAogICAgCQkoZGVmYXVsdCAxMCkuICBXaGVuIHVuc2V0LCBFT0Ygc2lnbmlmaWVzIHRoZSBlbmQgb2YgaW5wdXQuCiAgICBNQUNIVFlQRQlBIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN5c3RlbSBCYXNoIGlzIHJ1bm5pbmcgb24uCiAgICBNQUlMQ0hFQ0sJSG93IG9mdGVuLCBpbiBzZWNvbmRzLCBCYXNoIGNoZWNrcyBmb3IgbmV3IG1haWwuCiAgICBNQUlMUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVuYW1lcyB3aGljaCBCYXNoIGNoZWNrcwogICAgCQlmb3IgbmV3IG1haWwuCiAgICBPU1RZUEUJVGhlIHZlcnNpb24gb2YgVW5peCB0aGlzIHZlcnNpb24gb2YgQmFzaCBpcyBydW5uaW5nIG9uLgogICAgUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCB3aGVuCiAgICAJCWxvb2tpbmcgZm9yIGNvbW1hbmRzLgogICAgUFJPTVBUX0NPTU1BTkQJQSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgcHJpbnRpbmcgb2YgZWFjaAogICAgCQlwcmltYXJ5IHByb21wdC4KICAgIFBTMQkJVGhlIHByaW1hcnkgcHJvbXB0IHN0cmluZy4KICAgIFBTMgkJVGhlIHNlY29uZGFyeSBwcm9tcHQgc3RyaW5nLgogICAgUFdECQlUaGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICBTSEVMTE9QVFMJQSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBlbmFibGVkIHNoZWxsIG9wdGlvbnMuCiAgICBURVJNCVRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRlcm1pbmFsIHR5cGUuCiAgICBUSU1FRk9STUFUCVRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aW1pbmcgc3RhdGlzdGljcyBkaXNwbGF5ZWQgYnkgdGhlCiAgICAJCWB0aW1lJyByZXNlcnZlZCB3b3JkLgogICAgYXV0b19yZXN1bWUJTm9uLW51bGwgbWVhbnMgYSBjb21tYW5kIHdvcmQgYXBwZWFyaW5nIG9uIGEgbGluZSBieQogICAgCQlpdHNlbGYgaXMgZmlyc3QgbG9va2VkIGZvciBpbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkKICAgIAkJc3RvcHBlZCBqb2JzLiAgSWYgZm91bmQgdGhlcmUsIHRoYXQgam9iIGlzIGZvcmVncm91bmRlZC4KICAgIAkJQSB2YWx1ZSBvZiBgZXhhY3QnIG1lYW5zIHRoYXQgdGhlIGNvbW1hbmQgd29yZCBtdXN0CiAgICAJCWV4YWN0bHkgbWF0Y2ggYSBjb21tYW5kIGluIHRoZSBsaXN0IG9mIHN0b3BwZWQgam9icy4gIEEKICAgIAkJdmFsdWUgb2YgYHN1YnN0cmluZycgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCB3b3JkIG11c3QKICAgIAkJbWF0Y2ggYSBzdWJzdHJpbmcgb2YgdGhlIGpvYi4gIEFueSBvdGhlciB2YWx1ZSBtZWFucyB0aGF0CiAgICAJCXRoZSBjb21tYW5kIG11c3QgYmUgYSBwcmVmaXggb2YgYSBzdG9wcGVkIGpvYi4KICAgIGhpc3RjaGFycwlDaGFyYWN0ZXJzIGNvbnRyb2xsaW5nIGhpc3RvcnkgZXhwYW5zaW9uIGFuZCBxdWljawogICAgCQlzdWJzdGl0dXRpb24uICBUaGUgZmlyc3QgY2hhcmFjdGVyIGlzIHRoZSBoaXN0b3J5CiAgICAJCXN1YnN0aXR1dGlvbiBjaGFyYWN0ZXIsIHVzdWFsbHkgYCEnLiAgVGhlIHNlY29uZCBpcwogICAgCQl0aGUgYHF1aWNrIHN1YnN0aXR1dGlvbicgY2hhcmFjdGVyLCB1c3VhbGx5IGBeJy4gIFRoZQogICAgCQl0aGlyZCBpcyB0aGUgYGhpc3RvcnkgY29tbWVudCcgY2hhcmFjdGVyLCB1c3VhbGx5IGAjJy4KICAgIEhJU1RJR05PUkUJQSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXR0ZXJucyB1c2VkIHRvIGRlY2lkZSB3aGljaAogICAgCQljb21tYW5kcyBzaG91bGQgYmUgc2F2ZWQgb24gdGhlIGhpc3RvcnkgbGlzdC4KAENvbnRpbnVlAENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KAENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4AQ3JlYXRlIGEgY29wcm9jZXNzIG5hbWVkIE5BTUUuCiAgICAKICAgIEV4ZWN1dGUgQ09NTUFORCBhc3luY2hyb25vdXNseSwgd2l0aCB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZAogICAgaW5wdXQgb2YgdGhlIGNvbW1hbmQgY29ubmVjdGVkIHZpYSBhIHBpcGUgdG8gZmlsZSBkZXNjcmlwdG9ycyBhc3NpZ25lZAogICAgdG8gaW5kaWNlcyAwIGFuZCAxIG9mIGFuIGFycmF5IHZhcmlhYmxlIE5BTUUgaW4gdGhlIGV4ZWN1dGluZyBzaGVsbC4KICAgIFRoZSBkZWZhdWx0IE5BTUUgaXMgIkNPUFJPQyIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgZXhpdCBzdGF0dXMgb2YgQ09NTUFORC4ARGVmaW5lIGxvY2FsIHZhcmlhYmxlcy4KICAgIAogICAgQ3JlYXRlIGEgbG9jYWwgdmFyaWFibGUgY2FsbGVkIE5BTUUsIGFuZCBnaXZlIGl0IFZBTFVFLiAgT1BUSU9OIGNhbgogICAgYmUgYW55IG9wdGlvbiBhY2NlcHRlZCBieSBgZGVjbGFyZScuCiAgICAKICAgIExvY2FsIHZhcmlhYmxlcyBjYW4gb25seSBiZSB1c2VkIHdpdGhpbiBhIGZ1bmN0aW9uOyB0aGV5IGFyZSB2aXNpYmxlCiAgICBvbmx5IHRvIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkIGFuZCBpdHMgY2hpbGRyZW4uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCwgYW4gZXJyb3Igb2NjdXJzLAogICAgb3IgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbi4ARGVmaW5lIG9yIGRpc3BsYXkgYWxpYXNlcy4KICAgIAogICAgV2l0aG91dCBhcmd1bWVudHMsIGBhbGlhcycgcHJpbnRzIHRoZSBsaXN0IG9mIGFsaWFzZXMgaW4gdGhlIHJldXNhYmxlCiAgICBmb3JtIGBhbGlhcyBOQU1FPVZBTFVFJyBvbiBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE90aGVyd2lzZSwgYW4gYWxpYXMgaXMgZGVmaW5lZCBmb3IgZWFjaCBOQU1FIHdob3NlIFZBTFVFIGlzIGdpdmVuLgogICAgQSB0cmFpbGluZyBzcGFjZSBpbiBWQUxVRSBjYXVzZXMgdGhlIG5leHQgd29yZCB0byBiZSBjaGVja2VkIGZvcgogICAgYWxpYXMgc3Vic3RpdHV0aW9uIHdoZW4gdGhlIGFsaWFzIGlzIGV4cGFuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlQcmludCBhbGwgZGVmaW5lZCBhbGlhc2VzIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgYWxpYXMgcmV0dXJucyB0cnVlIHVubGVzcyBhIE5BTUUgaXMgc3VwcGxpZWQgZm9yIHdoaWNoIG5vIGFsaWFzIGhhcyBiZWVuCiAgICBkZWZpbmVkLgBEZWZpbmUgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENyZWF0ZSBhIHNoZWxsIGZ1bmN0aW9uIG5hbWVkIE5BTUUuICBXaGVuIGludm9rZWQgYXMgYSBzaW1wbGUgY29tbWFuZCwKICAgIE5BTUUgcnVucyBDT01NQU5EcyBpbiB0aGUgY2FsbGluZyBzaGVsbCdzIGNvbnRleHQuICBXaGVuIE5BTUUgaXMgaW52b2tlZCwKICAgIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgJDEuLi4kbiwgYW5kIHRoZSBmdW5jdGlvbidzCiAgICBuYW1lIGlzIGluICRGVU5DTkFNRS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgcmVhZG9ubHkuAERpc3BsYXkgZGlyZWN0b3J5IHN0YWNrLgogICAgCiAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGN1cnJlbnRseSByZW1lbWJlcmVkIGRpcmVjdG9yaWVzLiAgRGlyZWN0b3JpZXMKICAgIGZpbmQgdGhlaXIgd2F5IG9udG8gdGhlIGxpc3Qgd2l0aCB0aGUgYHB1c2hkJyBjb21tYW5kOyB5b3UgY2FuIGdldAogICAgYmFjayB1cCB0aHJvdWdoIHRoZSBsaXN0IHdpdGggdGhlIGBwb3BkJyBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJdG8geW91ciBob21lIGRpcmVjdG9yeQogICAgICAtcAlwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lCiAgICAgIC12CXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUgcHJlZml4ZWQKICAgIAl3aXRoIGl0cyBwb3NpdGlvbiBpbiB0aGUgc3RhY2sKICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKICAgIAlkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGggemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5CiAgICAJZGlycyB3aGVuIGludm9rZWQgd2l0aG91dCBvcHRpb25zLCBzdGFydGluZyB3aXRoIHplcm8uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgYnVpbHRpbiBjb21tYW5kcy4KICAgIAogICAgRGlzcGxheXMgYnJpZWYgc3VtbWFyaWVzIG9mIGJ1aWx0aW4gY29tbWFuZHMuICBJZiBQQVRURVJOIGlzCiAgICBzcGVjaWZpZWQsIGdpdmVzIGRldGFpbGVkIGhlbHAgb24gYWxsIGNvbW1hbmRzIG1hdGNoaW5nIFBBVFRFUk4sCiAgICBvdGhlcndpc2UgdGhlIGxpc3Qgb2YgaGVscCB0b3BpY3MgaXMgcHJpbnRlZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWQJb3V0cHV0IHNob3J0IGRlc2NyaXB0aW9uIGZvciBlYWNoIHRvcGljCiAgICAgIC1tCWRpc3BsYXkgdXNhZ2UgaW4gcHNldWRvLW1hbnBhZ2UgZm9ybWF0CiAgICAgIC1zCW91dHB1dCBvbmx5IGEgc2hvcnQgdXNhZ2Ugc3lub3BzaXMgZm9yIGVhY2ggdG9waWMgbWF0Y2hpbmcKICAgIAlQQVRURVJOCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgUEFUVEVSTglQYXR0ZXJuIHNwZWNpZml5aW5nIGEgaGVscCB0b3BpYwogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgUEFUVEVSTiBpcyBub3QgZm91bmQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgY29tbWFuZCB0eXBlLgogICAgCiAgICBGb3IgZWFjaCBOQU1FLCBpbmRpY2F0ZSBob3cgaXQgd291bGQgYmUgaW50ZXJwcmV0ZWQgaWYgdXNlZCBhcyBhCiAgICBjb21tYW5kIG5hbWUuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCWRpc3BsYXkgYWxsIGxvY2F0aW9ucyBjb250YWluaW5nIGFuIGV4ZWN1dGFibGUgbmFtZWQgTkFNRTsKICAgIAlpbmNsdWRlcyBhbGlhc2VzLCBidWlsdGlucywgYW5kIGZ1bmN0aW9ucywgaWYgYW5kIG9ubHkgaWYKICAgIAl0aGUgYC1wJyBvcHRpb24gaXMgbm90IGFsc28gdXNlZAogICAgICAtZglzdXBwcmVzcyBzaGVsbCBmdW5jdGlvbiBsb29rdXAKICAgICAgLVAJZm9yY2UgYSBQQVRIIHNlYXJjaCBmb3IgZWFjaCBOQU1FLCBldmVuIGlmIGl0IGlzIGFuIGFsaWFzLAogICAgCWJ1aWx0aW4sIG9yIGZ1bmN0aW9uLCBhbmQgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZGlzayBmaWxlCiAgICAJdGhhdCB3b3VsZCBiZSBleGVjdXRlZAogICAgICAtcAlyZXR1cm5zIGVpdGhlciB0aGUgbmFtZSBvZiB0aGUgZGlzayBmaWxlIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQsCiAgICAJb3Igbm90aGluZyBpZiBgdHlwZSAtdCBOQU1FJyB3b3VsZCBub3QgcmV0dXJuIGBmaWxlJy4KICAgICAgLXQJb3V0cHV0IGEgc2luZ2xlIHdvcmQgd2hpY2ggaXMgb25lIG9mIGBhbGlhcycsIGBrZXl3b3JkJywKICAgIAlgZnVuY3Rpb24nLCBgYnVpbHRpbicsIGBmaWxlJyBvciBgJywgaWYgTkFNRSBpcyBhbiBhbGlhcywgc2hlbGwKICAgIAlyZXNlcnZlZCB3b3JkLCBzaGVsbCBmdW5jdGlvbiwgc2hlbGwgYnVpbHRpbiwgZGlzayBmaWxlLCBvciBub3QKICAgIAlmb3VuZCwgcmVzcGVjdGl2ZWx5CiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgTkFNRQlDb21tYW5kIG5hbWUgdG8gYmUgaW50ZXJwcmV0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFsbCBvZiB0aGUgTkFNRXMgYXJlIGZvdW5kOyBmYWlscyBpZiBhbnkgYXJlIG5vdCBmb3VuZC4ARGlzcGxheSBvciBleGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4KICAgIAogICAgZmMgaXMgdXNlZCB0byBsaXN0IG9yIGVkaXQgYW5kIHJlLWV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgaGlzdG9yeSBsaXN0LgogICAgRklSU1QgYW5kIExBU1QgY2FuIGJlIG51bWJlcnMgc3BlY2lmeWluZyB0aGUgcmFuZ2UsIG9yIEZJUlNUIGNhbiBiZSBhCiAgICBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIGJlZ2lubmluZyB3aXRoIHRoYXQKICAgIHN0cmluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWUgRU5BTUUJc2VsZWN0IHdoaWNoIGVkaXRvciB0byB1c2UuICBEZWZhdWx0IGlzIEZDRURJVCwgdGhlbiBFRElUT1IsCiAgICAJCXRoZW4gdmkKICAgICAgLWwgCWxpc3QgbGluZXMgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgIC1uCW9taXQgbGluZSBudW1iZXJzIHdoZW4gbGlzdGluZwogICAgICAtcglyZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgKG5ld2VzdCBsaXN0ZWQgZmlyc3QpCiAgICAKICAgIFdpdGggdGhlIGBmYyAtcyBbcGF0PXJlcCAuLi5dIFtjb21tYW5kXScgZm9ybWF0LCBDT01NQU5EIGlzCiAgICByZS1leGVjdXRlZCBhZnRlciB0aGUgc3Vic3RpdHV0aW9uIE9MRD1ORVcgaXMgcGVyZm9ybWVkLgogICAgCiAgICBBIHVzZWZ1bCBhbGlhcyB0byB1c2Ugd2l0aCB0aGlzIGlzIHI9J2ZjIC1zJywgc28gdGhhdCB0eXBpbmcgYHIgY2MnCiAgICBydW5zIHRoZSBsYXN0IGNvbW1hbmQgYmVnaW5uaW5nIHdpdGggYGNjJyBhbmQgdHlwaW5nIGByJyByZS1leGVjdXRlcwogICAgdGhlIGxhc3QgY29tbWFuZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3Mgb3Igc3RhdHVzIG9mIGV4ZWN1dGVkIGNvbW1hbmQ7IG5vbi16ZXJvIGlmIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBtYW5pcHVsYXRlIHRoZSBoaXN0b3J5IGxpc3QuCiAgICAKICAgIERpc3BsYXkgdGhlIGhpc3RvcnkgbGlzdCB3aXRoIGxpbmUgbnVtYmVycywgcHJlZml4aW5nIGVhY2ggbW9kaWZpZWQKICAgIGVudHJ5IHdpdGggYSBgKicuICBBbiBhcmd1bWVudCBvZiBOIGxpc3RzIG9ubHkgdGhlIGxhc3QgTiBlbnRyaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgaGlzdG9yeSBsaXN0IGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZW50cmllcwogICAgICAtZCBvZmZzZXQJZGVsZXRlIHRoZSBoaXN0b3J5IGVudHJ5IGF0IG9mZnNldCBPRkZTRVQuCiAgICAKICAgICAgLWEJYXBwZW5kIGhpc3RvcnkgbGluZXMgZnJvbSB0aGlzIHNlc3Npb24gdG8gdGhlIGhpc3RvcnkgZmlsZQogICAgICAtbglyZWFkIGFsbCBoaXN0b3J5IGxpbmVzIG5vdCBhbHJlYWR5IHJlYWQgZnJvbSB0aGUgaGlzdG9yeSBmaWxlCiAgICAgIC1yCXJlYWQgdGhlIGhpc3RvcnkgZmlsZSBhbmQgYXBwZW5kIHRoZSBjb250ZW50cyB0byB0aGUgaGlzdG9yeQogICAgCWxpc3QKICAgICAgLXcJd3JpdGUgdGhlIGN1cnJlbnQgaGlzdG9yeSB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAJYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBoaXN0b3J5IGxpc3QKICAgIAogICAgICAtcAlwZXJmb3JtIGhpc3RvcnkgZXhwYW5zaW9uIG9uIGVhY2ggQVJHIGFuZCBkaXNwbGF5IHRoZSByZXN1bHQKICAgIAl3aXRob3V0IHN0b3JpbmcgaXQgaW4gdGhlIGhpc3RvcnkgbGlzdAogICAgICAtcwlhcHBlbmQgdGhlIEFSR3MgdG8gdGhlIGhpc3RvcnkgbGlzdCBhcyBhIHNpbmdsZSBlbnRyeQogICAgCiAgICBJZiBGSUxFTkFNRSBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyB0aGUgaGlzdG9yeSBmaWxlLiAgT3RoZXJ3aXNlLAogICAgaWYgJEhJU1RGSUxFIGhhcyBhIHZhbHVlLCB0aGF0IGlzIHVzZWQsIGVsc2Ugfi8uYmFzaF9oaXN0b3J5LgogICAgCiAgICBJZiB0aGUgJEhJU1RUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHNldCBhbmQgbm90IG51bGwsIGl0cyB2YWx1ZSBpcyB1c2VkCiAgICBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpIHRvIHByaW50IHRoZSB0aW1lIHN0YW1wIGFzc29jaWF0ZWQKICAgIHdpdGggZWFjaCBkaXNwbGF5ZWQgaGlzdG9yeSBlbnRyeS4gIE5vIHRpbWUgc3RhbXBzIGFyZSBwcmludGVkIG90aGVyd2lzZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBzZXQgZmlsZSBtb2RlIG1hc2suCiAgICAKICAgIFNldHMgdGhlIHVzZXIgZmlsZS1jcmVhdGlvbiBtYXNrIHRvIE1PREUuICBJZiBNT0RFIGlzIG9taXR0ZWQsIHByaW50cwogICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2suCiAgICAKICAgIElmIE1PREUgYmVnaW5zIHdpdGggYSBkaWdpdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gb2N0YWwgbnVtYmVyOwogICAgb3RoZXJ3aXNlIGl0IGlzIGEgc3ltYm9saWMgbW9kZSBzdHJpbmcgbGlrZSB0aGF0IGFjY2VwdGVkIGJ5IGNobW9kKDEpLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlpZiBNT0RFIGlzIG9taXR0ZWQsIG91dHB1dCBpbiBhIGZvcm0gdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1TCW1ha2VzIHRoZSBvdXRwdXQgc3ltYm9saWM7IG90aGVyd2lzZSBhbiBvY3RhbCBudW1iZXIgaXMgb3V0cHV0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBNT0RFIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAERpc3BsYXkgcG9zc2libGUgY29tcGxldGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zLgogICAgCiAgICBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gd2l0aGluIGEgc2hlbGwgZnVuY3Rpb24gZ2VuZXJhdGluZyBwb3NzaWJsZQogICAgY29tcGxldGlvbnMuICBJZiB0aGUgb3B0aW9uYWwgV09SRCBhcmd1bWVudCBpcyBzdXBwbGllZCwgbWF0Y2hlcyBhZ2FpbnN0CiAgICBXT1JEIGFyZSBnZW5lcmF0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgcHJvY2VzcyB0aW1lcy4KICAgIAogICAgUHJpbnRzIHRoZSBhY2N1bXVsYXRlZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgZm9yIHRoZSBzaGVsbCBhbmQgYWxsIG9mIGl0cwogICAgY2hpbGQgcHJvY2Vzc2VzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBzdWNjZWVkcy4ARGlzcGxheSBzdGF0dXMgb2Ygam9icy4KICAgIAogICAgTGlzdHMgdGhlIGFjdGl2ZSBqb2JzLiAgSk9CU1BFQyByZXN0cmljdHMgb3V0cHV0IHRvIHRoYXQgam9iLgogICAgV2l0aG91dCBvcHRpb25zLCB0aGUgc3RhdHVzIG9mIGFsbCBhY3RpdmUgam9icyBpcyBkaXNwbGF5ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1sCWxpc3RzIHByb2Nlc3MgSURzIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaW5mb3JtYXRpb24KICAgICAgLW4JbGlzdCBvbmx5IHByb2Nlc3NlcyB0aGF0IGhhdmUgY2hhbmdlZCBzdGF0dXMgc2luY2UgdGhlIGxhc3QKICAgIAlub3RpZmljYXRpb24KICAgICAgLXAJbGlzdHMgcHJvY2VzcyBJRHMgb25seQogICAgICAtcglyZXN0cmljdCBvdXRwdXQgdG8gcnVubmluZyBqb2JzCiAgICAgIC1zCXJlc3RyaWN0IG91dHB1dCB0byBzdG9wcGVkIGpvYnMKICAgIAogICAgSWYgLXggaXMgc3VwcGxpZWQsIENPTU1BTkQgaXMgcnVuIGFmdGVyIGFsbCBqb2Igc3BlY2lmaWNhdGlvbnMgdGhhdAogICAgYXBwZWFyIGluIEFSR1MgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhlIHByb2Nlc3MgSUQgb2YgdGhhdCBqb2IncwogICAgcHJvY2VzcyBncm91cCBsZWFkZXIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhbiBlcnJvciBvY2N1cnMuCiAgICBJZiAteCBpcyB1c2VkLCByZXR1cm5zIHRoZSBleGl0IHN0YXR1cyBvZiBDT01NQU5ELgBEaXNwbGF5IHRoZSBsaXN0IG9mIGN1cnJlbnRseSByZW1lbWJlcmVkIGRpcmVjdG9yaWVzLiAgRGlyZWN0b3JpZXMKICAgIGZpbmQgdGhlaXIgd2F5IG9udG8gdGhlIGxpc3Qgd2l0aCB0aGUgYHB1c2hkJyBjb21tYW5kOyB5b3UgY2FuIGdldAogICAgYmFjayB1cCB0aHJvdWdoIHRoZSBsaXN0IHdpdGggdGhlIGBwb3BkJyBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJdG8geW91ciBob21lIGRpcmVjdG9yeQogICAgICAtcAlwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lCiAgICAgIC12CXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUgcHJlZml4ZWQKICAgIAl3aXRoIGl0cyBwb3NpdGlvbiBpbiB0aGUgc3RhY2sKICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKICAgIAlkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGggemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5CglkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGggemVyby4ARG9uZQBEb25lKCVkKQBFTVQgaW5zdHJ1Y3Rpb24ARW5hYmxlIGFuZCBkaXNhYmxlIHNoZWxsIGJ1aWx0aW5zLgogICAgCiAgICBFbmFibGVzIGFuZCBkaXNhYmxlcyBidWlsdGluIHNoZWxsIGNvbW1hbmRzLiAgRGlzYWJsaW5nIGFsbG93cyB5b3UgdG8KICAgIGV4ZWN1dGUgYSBkaXNrIGNvbW1hbmQgd2hpY2ggaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBzaGVsbCBidWlsdGluCiAgICB3aXRob3V0IHVzaW5nIGEgZnVsbCBwYXRobmFtZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcHJpbnQgYSBsaXN0IG9mIGJ1aWx0aW5zIHNob3dpbmcgd2hldGhlciBvciBub3QgZWFjaCBpcyBlbmFibGVkCiAgICAgIC1uCWRpc2FibGUgZWFjaCBOQU1FIG9yIGRpc3BsYXkgYSBsaXN0IG9mIGRpc2FibGVkIGJ1aWx0aW5zCiAgICAgIC1wCXByaW50IHRoZSBsaXN0IG9mIGJ1aWx0aW5zIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAgIC1zCXByaW50IG9ubHkgdGhlIG5hbWVzIG9mIFBvc2l4IGBzcGVjaWFsJyBidWlsdGlucwogICAgCiAgICBPcHRpb25zIGNvbnRyb2xsaW5nIGR5bmFtaWMgbG9hZGluZzoKICAgICAgLWYJTG9hZCBidWlsdGluIE5BTUUgZnJvbSBzaGFyZWQgb2JqZWN0IEZJTEVOQU1FCiAgICAgIC1kCVJlbW92ZSBhIGJ1aWx0aW4gbG9hZGVkIHdpdGggLWYKICAgIAogICAgV2l0aG91dCBvcHRpb25zLCBlYWNoIE5BTUUgaXMgZW5hYmxlZC4KICAgIAogICAgVG8gdXNlIHRoZSBgdGVzdCcgZm91bmQgaW4gJFBBVEggaW5zdGVhZCBvZiB0aGUgc2hlbGwgYnVpbHRpbgogICAgdmVyc2lvbiwgdHlwZSBgZW5hYmxlIC1uIHRlc3QnLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgTkFNRSBpcyBub3QgYSBzaGVsbCBidWlsdGluIG9yIGFuIGVycm9yIG9jY3Vycy4ARXZhbHVhdGUgYXJpdGhtZXRpYyBleHByZXNzaW9uLgogICAgCiAgICBUaGUgRVhQUkVTU0lPTiBpcyBldmFsdWF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgYXJpdGhtZXRpYwogICAgZXZhbHVhdGlvbi4gIEVxdWl2YWxlbnQgdG8gImxldCBFWFBSRVNTSU9OIi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDEgaWYgRVhQUkVTU0lPTiBldmFsdWF0ZXMgdG8gMDsgcmV0dXJucyAwIG90aGVyd2lzZS4ARXZhbHVhdGUgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4KICAgIAogICAgRXZhbHVhdGUgZWFjaCBBUkcgYXMgYW4gYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgRXZhbHVhdGlvbiBpcyBkb25lIGluCiAgICBmaXhlZC13aWR0aCBpbnRlZ2VycyB3aXRoIG5vIGNoZWNrIGZvciBvdmVyZmxvdywgdGhvdWdoIGRpdmlzaW9uIGJ5IDAKICAgIGlzIHRyYXBwZWQgYW5kIGZsYWdnZWQgYXMgYW4gZXJyb3IuICBUaGUgZm9sbG93aW5nIGxpc3Qgb2Ygb3BlcmF0b3JzIGlzCiAgICBncm91cGVkIGludG8gbGV2ZWxzIG9mIGVxdWFsLXByZWNlZGVuY2Ugb3BlcmF0b3JzLiAgVGhlIGxldmVscyBhcmUgbGlzdGVkCiAgICBpbiBvcmRlciBvZiBkZWNyZWFzaW5nIHByZWNlZGVuY2UuCiAgICAKICAgIAlpZCsrLCBpZC0tCXZhcmlhYmxlIHBvc3QtaW5jcmVtZW50LCBwb3N0LWRlY3JlbWVudAogICAgCSsraWQsIC0taWQJdmFyaWFibGUgcHJlLWluY3JlbWVudCwgcHJlLWRlY3JlbWVudAogICAgCS0sICsJCXVuYXJ5IG1pbnVzLCBwbHVzCiAgICAJISwgfgkJbG9naWNhbCBhbmQgYml0d2lzZSBuZWdhdGlvbgogICAgCSoqCQlleHBvbmVudGlhdGlvbgogICAgCSosIC8sICUJCW11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyCiAgICAJKywgLQkJYWRkaXRpb24sIHN1YnRyYWN0aW9uCiAgICAJPDwsID4+CQlsZWZ0IGFuZCByaWdodCBiaXR3aXNlIHNoaWZ0cwogICAgCTw9LCA+PSwgPCwgPgljb21wYXJpc29uCiAgICAJPT0sICE9CQllcXVhbGl0eSwgaW5lcXVhbGl0eQogICAgCSYJCWJpdHdpc2UgQU5ECiAgICAJXgkJYml0d2lzZSBYT1IKICAgIAl8CQliaXR3aXNlIE9SCiAgICAJJiYJCWxvZ2ljYWwgQU5ECiAgICAJfHwJCWxvZ2ljYWwgT1IKICAgIAlleHByID8gZXhwciA6IGV4cHIKICAgIAkJCWNvbmRpdGlvbmFsIG9wZXJhdG9yCiAgICAJPSwgKj0sIC89LCAlPSwKICAgIAkrPSwgLT0sIDw8PSwgPj49LAogICAgCSY9LCBePSwgfD0JYXNzaWdubWVudAogICAgCiAgICBTaGVsbCB2YXJpYWJsZXMgYXJlIGFsbG93ZWQgYXMgb3BlcmFuZHMuICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUKICAgIGlzIHJlcGxhY2VkIGJ5IGl0cyB2YWx1ZSAoY29lcmNlZCB0byBhIGZpeGVkLXdpZHRoIGludGVnZXIpIHdpdGhpbgogICAgYW4gZXhwcmVzc2lvbi4gIFRoZSB2YXJpYWJsZSBuZWVkIG5vdCBoYXZlIGl0cyBpbnRlZ2VyIGF0dHJpYnV0ZQogICAgdHVybmVkIG9uIHRvIGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4KICAgIAogICAgT3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZS4gIFN1Yi1leHByZXNzaW9ucyBpbgogICAgcGFyZW50aGVzZXMgYXJlIGV2YWx1YXRlZCBmaXJzdCBhbmQgbWF5IG92ZXJyaWRlIHRoZSBwcmVjZWRlbmNlCiAgICBydWxlcyBhYm92ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBJZiB0aGUgbGFzdCBBUkcgZXZhbHVhdGVzIHRvIDAsIGxldCByZXR1cm5zIDE7IGxldCByZXR1cm5zIDAgb3RoZXJ3aXNlLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBFeGl0cyB3aXRoIGEgc3RhdHVzIG9mIDAgKHRydWUpIG9yIDEgKGZhbHNlKSBkZXBlbmRpbmcgb24KICAgIHRoZSBldmFsdWF0aW9uIG9mIEVYUFIuICBFeHByZXNzaW9ucyBtYXkgYmUgdW5hcnkgb3IgYmluYXJ5LiAgVW5hcnkKICAgIGV4cHJlc3Npb25zIGFyZSBvZnRlbiB1c2VkIHRvIGV4YW1pbmUgdGhlIHN0YXR1cyBvZiBhIGZpbGUuICBUaGVyZQogICAgYXJlIHN0cmluZyBvcGVyYXRvcnMgYW5kIG51bWVyaWMgY29tcGFyaXNvbiBvcGVyYXRvcnMgYXMgd2VsbC4KICAgIAogICAgVGhlIGJlaGF2aW9yIG9mIHRlc3QgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIFJlYWQgdGhlCiAgICBiYXNoIG1hbnVhbCBwYWdlIGZvciB0aGUgY29tcGxldGUgc3BlY2lmaWNhdGlvbi4KICAgIAogICAgRmlsZSBvcGVyYXRvcnM6CiAgICAKICAgICAgLWEgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGV4aXN0cy4KICAgICAgLWIgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGJsb2NrIHNwZWNpYWwuCiAgICAgIC1jIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBjaGFyYWN0ZXIgc3BlY2lhbC4KICAgICAgLWQgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgZGlyZWN0b3J5LgogICAgICAtZSBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzLgogICAgICAtZiBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZS4KICAgICAgLWcgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIHNldC1ncm91cC1pZC4KICAgICAgLWggRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KICAgICAgLUwgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KICAgICAgLWsgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGhhcyBpdHMgYHN0aWNreScgYml0IHNldC4KICAgICAgLXAgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgbmFtZWQgcGlwZS4KICAgICAgLXIgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIHJlYWRhYmxlIGJ5IHlvdS4KICAgICAgLXMgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5LgogICAgICAtUyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzb2NrZXQuCiAgICAgIC10IEZEICAgICAgICAgIFRydWUgaWYgRkQgaXMgb3BlbmVkIG9uIGEgdGVybWluYWwuCiAgICAgIC11IEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgc2V0LXVzZXItaWQuCiAgICAgIC13IEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgd3JpdGFibGUgYnkgeW91LgogICAgICAteCBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUgYnkgeW91LgogICAgICAtTyBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHlvdS4KICAgICAgLUcgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBlZmZlY3RpdmVseSBvd25lZCBieSB5b3VyIGdyb3VwLgogICAgICAtTiBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0IHdhcyBsYXN0IHJlYWQuCiAgICAKICAgICAgRklMRTEgLW50IEZJTEUyICBUcnVlIGlmIGZpbGUxIGlzIG5ld2VyIHRoYW4gZmlsZTIgKGFjY29yZGluZyB0bwogICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbiBkYXRlKS4KICAgIAogICAgICBGSUxFMSAtb3QgRklMRTIgIFRydWUgaWYgZmlsZTEgaXMgb2xkZXIgdGhhbiBmaWxlMi4KICAgIAogICAgICBGSUxFMSAtZWYgRklMRTIgIFRydWUgaWYgZmlsZTEgaXMgYSBoYXJkIGxpbmsgdG8gZmlsZTIuCiAgICAKICAgIFN0cmluZyBvcGVyYXRvcnM6CiAgICAKICAgICAgLXogU1RSSU5HICAgICAgVHJ1ZSBpZiBzdHJpbmcgaXMgZW1wdHkuCiAgICAKICAgICAgLW4gU1RSSU5HCiAgICAgICAgIFNUUklORyAgICAgIFRydWUgaWYgc3RyaW5nIGlzIG5vdCBlbXB0eS4KICAgIAogICAgICBTVFJJTkcxID0gU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIHRoZSBzdHJpbmdzIGFyZSBlcXVhbC4KICAgICAgU1RSSU5HMSAhPSBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIHN0cmluZ3MgYXJlIG5vdCBlcXVhbC4KICAgICAgU1RSSU5HMSA8IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiBTVFJJTkcxIHNvcnRzIGJlZm9yZSBTVFJJTkcyIGxleGljb2dyYXBoaWNhbGx5LgogICAgICBTVFJJTkcxID4gU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIFNUUklORzEgc29ydHMgYWZ0ZXIgU1RSSU5HMiBsZXhpY29ncmFwaGljYWxseS4KICAgIAogICAgT3RoZXIgb3BlcmF0b3JzOgogICAgCiAgICAgIC1vIE9QVElPTiAgICAgIFRydWUgaWYgdGhlIHNoZWxsIG9wdGlvbiBPUFRJT04gaXMgZW5hYmxlZC4KICAgICAgLXYgVkFSCSBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0CiAgICAgICEgRVhQUiAgICAgICAgIFRydWUgaWYgZXhwciBpcyBmYWxzZS4KICAgICAgRVhQUjEgLWEgRVhQUjIgVHJ1ZSBpZiBib3RoIGV4cHIxIEFORCBleHByMiBhcmUgdHJ1ZS4KICAgICAgRVhQUjEgLW8gRVhQUjIgVHJ1ZSBpZiBlaXRoZXIgZXhwcjEgT1IgZXhwcjIgaXMgdHJ1ZS4KICAgIAogICAgICBhcmcxIE9QIGFyZzIgICBBcml0aG1ldGljIHRlc3RzLiAgT1AgaXMgb25lIG9mIC1lcSwgLW5lLAogICAgICAgICAgICAgICAgICAgICAtbHQsIC1sZSwgLWd0LCBvciAtZ2UuCiAgICAKICAgIEFyaXRobWV0aWMgYmluYXJ5IG9wZXJhdG9ycyByZXR1cm4gdHJ1ZSBpZiBBUkcxIGlzIGVxdWFsLCBub3QtZXF1YWwsCiAgICBsZXNzLXRoYW4sIGxlc3MtdGhhbi1vci1lcXVhbCwgZ3JlYXRlci10aGFuLCBvciBncmVhdGVyLXRoYW4tb3ItZXF1YWwKICAgIHRoYW4gQVJHMi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgaWYgRVhQUiBldmFsdWF0ZXMgdG8gdHJ1ZTsgZmFpbHMgaWYgRVhQUiBldmFsdWF0ZXMgdG8KICAgIGZhbHNlIG9yIGFuIGludmFsaWQgYXJndW1lbnQgaXMgZ2l2ZW4uAEV2YWx1YXRlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgICAKICAgIFRoaXMgaXMgYSBzeW5vbnltIGZvciB0aGUgInRlc3QiIGJ1aWx0aW4sIGJ1dCB0aGUgbGFzdCBhcmd1bWVudCBtdXN0CiAgICBiZSBhIGxpdGVyYWwgYF0nLCB0byBtYXRjaCB0aGUgb3BlbmluZyBgWycuAEV4ZWN1dGUgYSBzaW1wbGUgY29tbWFuZCBvciBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGNvbW1hbmRzLgogICAgCiAgICBSdW5zIENPTU1BTkQgd2l0aCBBUkdTIHN1cHByZXNzaW5nICBzaGVsbCBmdW5jdGlvbiBsb29rdXAsIG9yIGRpc3BsYXkKICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgQ09NTUFORHMuICBDYW4gYmUgdXNlZCB0byBpbnZva2UgY29tbWFuZHMKICAgIG9uIGRpc2sgd2hlbiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1wCXVzZSBhIGRlZmF1bHQgdmFsdWUgZm9yIFBBVEggdGhhdCBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG9mCiAgICAJdGhlIHN0YW5kYXJkIHV0aWxpdGllcwogICAgICAtdglwcmludCBhIGRlc2NyaXB0aW9uIG9mIENPTU1BTkQgc2ltaWxhciB0byB0aGUgYHR5cGUnIGJ1aWx0aW4KICAgICAgLVYJcHJpbnQgYSBtb3JlIHZlcmJvc2UgZGVzY3JpcHRpb24gb2YgZWFjaCBDT01NQU5ECiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBleGl0IHN0YXR1cyBvZiBDT01NQU5ELCBvciBmYWlsdXJlIGlmIENPTU1BTkQgaXMgbm90IGZvdW5kLgBFeGVjdXRlIGFyZ3VtZW50cyBhcyBhIHNoZWxsIGNvbW1hbmQuCiAgICAKICAgIENvbWJpbmUgQVJHcyBpbnRvIGEgc2luZ2xlIHN0cmluZywgdXNlIHRoZSByZXN1bHQgYXMgaW5wdXQgdG8gdGhlIHNoZWxsLAogICAgYW5kIGV4ZWN1dGUgdGhlIHJlc3VsdGluZyBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIGV4aXQgc3RhdHVzIG9mIGNvbW1hbmQgb3Igc3VjY2VzcyBpZiBjb21tYW5kIGlzIG51bGwuAEV4ZWN1dGUgY29tbWFuZHMgYXMgbG9uZyBhcyBhIHRlc3QgZG9lcyBub3Qgc3VjY2VlZC4KICAgIAogICAgRXhwYW5kIGFuZCBleGVjdXRlIENPTU1BTkRTIGFzIGxvbmcgYXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlCiAgICBgdW50aWwnIENPTU1BTkRTIGhhcyBhbiBleGl0IHN0YXR1cyB3aGljaCBpcyBub3QgemVyby4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARXhlY3V0ZSBjb21tYW5kcyBhcyBsb25nIGFzIGEgdGVzdCBzdWNjZWVkcy4KICAgIAogICAgRXhwYW5kIGFuZCBleGVjdXRlIENPTU1BTkRTIGFzIGxvbmcgYXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlCiAgICBgd2hpbGUnIENPTU1BTkRTIGhhcyBhbiBleGl0IHN0YXR1cyBvZiB6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGJhc2VkIG9uIGNvbmRpdGlvbmFsLgogICAgCiAgICBUaGUgYGlmIENPTU1BTkRTJyBsaXN0IGlzIGV4ZWN1dGVkLiAgSWYgaXRzIGV4aXQgc3RhdHVzIGlzIHplcm8sIHRoZW4gdGhlCiAgICBgdGhlbiBDT01NQU5EUycgbGlzdCBpcyBleGVjdXRlZC4gIE90aGVyd2lzZSwgZWFjaCBgZWxpZiBDT01NQU5EUycgbGlzdCBpcwogICAgZXhlY3V0ZWQgaW4gdHVybiwgYW5kIGlmIGl0cyBleGl0IHN0YXR1cyBpcyB6ZXJvLCB0aGUgY29ycmVzcG9uZGluZwogICAgYHRoZW4gQ09NTUFORFMnIGxpc3QgaXMgZXhlY3V0ZWQgYW5kIHRoZSBpZiBjb21tYW5kIGNvbXBsZXRlcy4gIE90aGVyd2lzZSwKICAgIHRoZSBgZWxzZSBDT01NQU5EUycgbGlzdCBpcyBleGVjdXRlZCwgaWYgcHJlc2VudC4gIFRoZSBleGl0IHN0YXR1cyBvZiB0aGUKICAgIGVudGlyZSBjb25zdHJ1Y3QgaXMgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQsIG9yIHplcm8KICAgIGlmIG5vIGNvbmRpdGlvbiB0ZXN0ZWQgdHJ1ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARXhlY3V0ZSBjb21tYW5kcyBiYXNlZCBvbiBwYXR0ZXJuIG1hdGNoaW5nLgogICAgCiAgICBTZWxlY3RpdmVseSBleGVjdXRlIENPTU1BTkRTIGJhc2VkIHVwb24gV09SRCBtYXRjaGluZyBQQVRURVJOLiAgVGhlCiAgICBgfCcgaXMgdXNlZCB0byBzZXBhcmF0ZSBtdWx0aXBsZSBwYXR0ZXJucy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARXhlY3V0ZSBjb21tYW5kcyBmb3IgZWFjaCBtZW1iZXIgaW4gYSBsaXN0LgogICAgCiAgICBUaGUgYGZvcicgbG9vcCBleGVjdXRlcyBhIHNlcXVlbmNlIG9mIGNvbW1hbmRzIGZvciBlYWNoIG1lbWJlciBpbiBhCiAgICBsaXN0IG9mIGl0ZW1zLiAgSWYgYGluIFdPUkRTIC4uLjsnIGlzIG5vdCBwcmVzZW50LCB0aGVuIGBpbiAiJEAiJyBpcwogICAgYXNzdW1lZC4gIEZvciBlYWNoIGVsZW1lbnQgaW4gV09SRFMsIE5BTUUgaXMgc2V0IHRvIHRoYXQgZWxlbWVudCwgYW5kCiAgICB0aGUgQ09NTUFORFMgYXJlIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGZyb20gYSBmaWxlIGluIHRoZSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBSZWFkIGFuZCBleGVjdXRlIGNvbW1hbmRzIGZyb20gRklMRU5BTUUgaW4gdGhlIGN1cnJlbnQgc2hlbGwuICBUaGUKICAgIGVudHJpZXMgaW4gJFBBVEggYXJlIHVzZWQgdG8gZmluZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRU5BTUUuCiAgICBJZiBhbnkgQVJHVU1FTlRTIGFyZSBzdXBwbGllZCwgdGhleSBiZWNvbWUgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgd2hlbiBGSUxFTkFNRSBpcyBleGVjdXRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZCBpbiBGSUxFTkFNRTsgZmFpbHMgaWYKICAgIEZJTEVOQU1FIGNhbm5vdCBiZSByZWFkLgBFeGVjdXRlIGNvbmRpdGlvbmFsIGNvbW1hbmQuCiAgICAKICAgIFJldHVybnMgYSBzdGF0dXMgb2YgMCBvciAxIGRlcGVuZGluZyBvbiB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgY29uZGl0aW9uYWwKICAgIGV4cHJlc3Npb24gRVhQUkVTU0lPTi4gIEV4cHJlc3Npb25zIGFyZSBjb21wb3NlZCBvZiB0aGUgc2FtZSBwcmltYXJpZXMgdXNlZAogICAgYnkgdGhlIGB0ZXN0JyBidWlsdGluLCBhbmQgbWF5IGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzOgogICAgCiAgICAgICggRVhQUkVTU0lPTiApCVJldHVybnMgdGhlIHZhbHVlIG9mIEVYUFJFU1NJT04KICAgICAgISBFWFBSRVNTSU9OCQlUcnVlIGlmIEVYUFJFU1NJT04gaXMgZmFsc2U7IGVsc2UgZmFsc2UKICAgICAgRVhQUjEgJiYgRVhQUjIJVHJ1ZSBpZiBib3RoIEVYUFIxIGFuZCBFWFBSMiBhcmUgdHJ1ZTsgZWxzZSBmYWxzZQogICAgICBFWFBSMSB8fCBFWFBSMglUcnVlIGlmIGVpdGhlciBFWFBSMSBvciBFWFBSMiBpcyB0cnVlOyBlbHNlIGZhbHNlCiAgICAKICAgIFdoZW4gdGhlIGA9PScgYW5kIGAhPScgb3BlcmF0b3JzIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHRvIHRoZSByaWdodCBvZgogICAgdGhlIG9wZXJhdG9yIGlzIHVzZWQgYXMgYSBwYXR0ZXJuIGFuZCBwYXR0ZXJuIG1hdGNoaW5nIGlzIHBlcmZvcm1lZC4KICAgIFdoZW4gdGhlIGA9ficgb3BlcmF0b3IgaXMgdXNlZCwgdGhlIHN0cmluZyB0byB0aGUgcmlnaHQgb2YgdGhlIG9wZXJhdG9yCiAgICBpcyBtYXRjaGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uLgogICAgCiAgICBUaGUgJiYgYW5kIHx8IG9wZXJhdG9ycyBkbyBub3QgZXZhbHVhdGUgRVhQUjIgaWYgRVhQUjEgaXMgc3VmZmljaWVudCB0bwogICAgZGV0ZXJtaW5lIHRoZSBleHByZXNzaW9uJ3MgdmFsdWUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgMCBvciAxIGRlcGVuZGluZyBvbiB2YWx1ZSBvZiBFWFBSRVNTSU9OLgBFeGVjdXRlIHNoZWxsIGJ1aWx0aW5zLgogICAgCiAgICBFeGVjdXRlIFNIRUxMLUJVSUxUSU4gd2l0aCBhcmd1bWVudHMgQVJHcyB3aXRob3V0IHBlcmZvcm1pbmcgY29tbWFuZAogICAgbG9va3VwLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byByZWltcGxlbWVudCBhIHNoZWxsIGJ1aWx0aW4KICAgIGFzIGEgc2hlbGwgZnVuY3Rpb24sIGJ1dCBuZWVkIHRvIGV4ZWN1dGUgdGhlIGJ1aWx0aW4gd2l0aGluIHRoZSBmdW5jdGlvbi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBleGl0IHN0YXR1cyBvZiBTSEVMTC1CVUlMVElOLCBvciBmYWxzZSBpZiBTSEVMTC1CVUlMVElOIGlzCiAgICBub3QgYSBzaGVsbCBidWlsdGluLi4ARXhpdCAlZABFeGl0IGEgbG9naW4gc2hlbGwuCiAgICAKICAgIEV4aXRzIGEgbG9naW4gc2hlbGwgd2l0aCBleGl0IHN0YXR1cyBOLiAgUmV0dXJucyBhbiBlcnJvciBpZiBub3QgZXhlY3V0ZWQKICAgIGluIGEgbG9naW4gc2hlbGwuAEV4aXQgZm9yLCB3aGlsZSwgb3IgdW50aWwgbG9vcHMuCiAgICAKICAgIEV4aXQgYSBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuICBJZiBOIGlzIHNwZWNpZmllZCwgYnJlYWsgTiBlbmNsb3NpbmcKICAgIGxvb3BzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4ARXhpdCB0aGUgc2hlbGwuCiAgICAKICAgIEV4aXRzIHRoZSBzaGVsbCB3aXRoIGEgc3RhdHVzIG9mIE4uICBJZiBOIGlzIG9taXR0ZWQsIHRoZSBleGl0IHN0YXR1cwogICAgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBGaWxlIGxpbWl0AEZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbgBGb3JtYXRzIGFuZCBwcmludHMgQVJHVU1FTlRTIHVuZGVyIGNvbnRyb2wgb2YgdGhlIEZPUk1BVC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXYgdmFyCWFzc2lnbiB0aGUgb3V0cHV0IHRvIHNoZWxsIHZhcmlhYmxlIFZBUiByYXRoZXIgdGhhbgogICAgCQlkaXNwbGF5IGl0IG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQKICAgIAogICAgRk9STUFUIGlzIGEgY2hhcmFjdGVyIHN0cmluZyB3aGljaCBjb250YWlucyB0aHJlZSB0eXBlcyBvZiBvYmplY3RzOiBwbGFpbgogICAgY2hhcmFjdGVycywgd2hpY2ggYXJlIHNpbXBseSBjb3BpZWQgdG8gc3RhbmRhcmQgb3V0cHV0OyBjaGFyYWN0ZXIgZXNjYXBlCiAgICBzZXF1ZW5jZXMsIHdoaWNoIGFyZSBjb252ZXJ0ZWQgYW5kIGNvcGllZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0OyBhbmQKICAgIGZvcm1hdCBzcGVjaWZpY2F0aW9ucywgZWFjaCBvZiB3aGljaCBjYXVzZXMgcHJpbnRpbmcgb2YgdGhlIG5leHQgc3VjY2Vzc2l2ZQogICAgYXJndW1lbnQuCiAgICAKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZGVzY3JpYmVkIGluIHByaW50ZigxKQogICAgYW5kIHByaW50ZigzKSwgcHJpbnRmIGludGVycHJldHM6CiAgICAKICAgICAgJWIJZXhwYW5kIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50CiAgICAgICVxCXF1b3RlIHRoZSBhcmd1bWVudCBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgc2hlbGwgaW5wdXQKICAgICAgJShmbXQpVCBvdXRwdXQgdGhlIGRhdGUtdGltZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gdXNpbmcgRk1UIGFzIGEgZm9ybWF0CiAgICAgICAgICAgIHN0cmluZyBmb3Igc3RyZnRpbWUoMykKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGEgd3JpdGUgb3IgYXNzaWdubWVudAogICAgZXJyb3Igb2NjdXJzLgBHTlUgYmFzaCwgdmVyc2lvbiAlcyAoJXMpCgBHTlUgYmFzaCwgdmVyc2lvbiAlcy0oJXMpCgBHTlUgbG9uZyBvcHRpb25zOgoAR3JvdXAgY29tbWFuZHMgYXMgYSB1bml0LgogICAgCiAgICBSdW4gYSBzZXQgb2YgY29tbWFuZHMgaW4gYSBncm91cC4gIFRoaXMgaXMgb25lIHdheSB0byByZWRpcmVjdCBhbgogICAgZW50aXJlIHNldCBvZiBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ASEZUIGlucHV0IGRhdGEgcGVuZGluZwBIRlQgbW9uaXRvciBtb2RlIGdyYW50ZWQASEZUIG1vbml0b3IgbW9kZSByZXRyYWN0ZWQASEZUIHNvdW5kIHNlcXVlbmNlIGhhcyBjb21wbGV0ZWQASE9NRSBub3Qgc2V0AEhhbmd1cABJIGhhdmUgbm8gbmFtZSEASS9PIHJlYWR5AElsbGVnYWwgaW5zdHJ1Y3Rpb24ASW5mb3JtYXRpb24gcmVxdWVzdABJbnRlcnJ1cHQAS2lsbGVkAExpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+CgBMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPgoATWFyayBzaGVsbCB2YXJpYWJsZXMgYXMgdW5jaGFuZ2VhYmxlLgogICAgCiAgICBNYXJrIGVhY2ggTkFNRSBhcyByZWFkLW9ubHk7IHRoZSB2YWx1ZXMgb2YgdGhlc2UgTkFNRXMgbWF5IG5vdCBiZQogICAgY2hhbmdlZCBieSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQuICBJZiBWQUxVRSBpcyBzdXBwbGllZCwgYXNzaWduIFZBTFVFCiAgICBiZWZvcmUgbWFya2luZyBhcyByZWFkLW9ubHkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlZmVyIHRvIGluZGV4ZWQgYXJyYXkgdmFyaWFibGVzCiAgICAgIC1BCXJlZmVyIHRvIGFzc29jaWF0aXZlIGFycmF5IHZhcmlhYmxlcwogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlYWRvbmx5IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIGAtLScgZGlzYWJsZXMgZnVydGhlciBvcHRpb24gcHJvY2Vzc2luZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIE5BTUUgaXMgaW52YWxpZC4ATW9kaWZ5IG9yIGRpc3BsYXkgY29tcGxldGlvbiBvcHRpb25zLgogICAgCiAgICBNb2RpZnkgdGhlIGNvbXBsZXRpb24gb3B0aW9ucyBmb3IgZWFjaCBOQU1FLCBvciwgaWYgbm8gTkFNRXMgYXJlIHN1cHBsaWVkLAogICAgdGhlIGNvbXBsZXRpb24gY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLiAgSWYgbm8gT1BUSU9OcyBhcmUgZ2l2ZW4sIHByaW50CiAgICB0aGUgY29tcGxldGlvbiBvcHRpb25zIGZvciBlYWNoIE5BTUUgb3IgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBPcHRpb25zOgogICAgCS1vIG9wdGlvbglTZXQgY29tcGxldGlvbiBvcHRpb24gT1BUSU9OIGZvciBlYWNoIE5BTUUKICAgIAktRAkJQ2hhbmdlIG9wdGlvbnMgZm9yIHRoZSAiZGVmYXVsdCIgY29tbWFuZCBjb21wbGV0aW9uCiAgICAJLUUJCUNoYW5nZSBvcHRpb25zIGZvciB0aGUgImVtcHR5IiBjb21tYW5kIGNvbXBsZXRpb24KICAgIAogICAgVXNpbmcgYCtvJyBpbnN0ZWFkIG9mIGAtbycgdHVybnMgb2ZmIHRoZSBzcGVjaWZpZWQgb3B0aW9uLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAKICAgIEVhY2ggTkFNRSByZWZlcnMgdG8gYSBjb21tYW5kIGZvciB3aGljaCBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBtdXN0CiAgICBoYXZlIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSBgY29tcGxldGUnIGJ1aWx0aW4uICBJZiBubyBOQU1FcwogICAgYXJlIHN1cHBsaWVkLCBjb21wb3B0IG11c3QgYmUgY2FsbGVkIGJ5IGEgZnVuY3Rpb24gY3VycmVudGx5IGdlbmVyYXRpbmcKICAgIGNvbXBsZXRpb25zLCBhbmQgdGhlIG9wdGlvbnMgZm9yIHRoYXQgY3VycmVudGx5LWV4ZWN1dGluZyBjb21wbGV0aW9uCiAgICBnZW5lcmF0b3IgYXJlIG1vZGlmaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgTkFNRSBkb2VzIG5vdAogICAgaGF2ZSBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBkZWZpbmVkLgBNb2RpZnkgc2hlbGwgcmVzb3VyY2UgbGltaXRzLgogICAgCiAgICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgdG8gdGhlIHNoZWxsIGFuZCBwcm9jZXNzZXMKICAgIGl0IGNyZWF0ZXMsIG9uIHN5c3RlbXMgdGhhdCBhbGxvdyBzdWNoIGNvbnRyb2wuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1TCXVzZSB0aGUgYHNvZnQnIHJlc291cmNlIGxpbWl0CiAgICAgIC1ICXVzZSB0aGUgYGhhcmQnIHJlc291cmNlIGxpbWl0CiAgICAgIC1hCWFsbCBjdXJyZW50IGxpbWl0cyBhcmUgcmVwb3J0ZWQKICAgICAgLWIJdGhlIHNvY2tldCBidWZmZXIgc2l6ZQogICAgICAtYwl0aGUgbWF4aW11bSBzaXplIG9mIGNvcmUgZmlsZXMgY3JlYXRlZAogICAgICAtZAl0aGUgbWF4aW11bSBzaXplIG9mIGEgcHJvY2VzcydzIGRhdGEgc2VnbWVudAogICAgICAtZQl0aGUgbWF4aW11bSBzY2hlZHVsaW5nIHByaW9yaXR5IChgbmljZScpCiAgICAgIC1mCXRoZSBtYXhpbXVtIHNpemUgb2YgZmlsZXMgd3JpdHRlbiBieSB0aGUgc2hlbGwgYW5kIGl0cyBjaGlsZHJlbgogICAgICAtaQl0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBzaWduYWxzCiAgICAgIC1sCXRoZSBtYXhpbXVtIHNpemUgYSBwcm9jZXNzIG1heSBsb2NrIGludG8gbWVtb3J5CiAgICAgIC1tCXRoZSBtYXhpbXVtIHJlc2lkZW50IHNldCBzaXplCiAgICAgIC1uCXRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICAgICAgLXAJdGhlIHBpcGUgYnVmZmVyIHNpemUKICAgICAgLXEJdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFBPU0lYIG1lc3NhZ2UgcXVldWVzCiAgICAgIC1yCXRoZSBtYXhpbXVtIHJlYWwtdGltZSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgICAgIC1zCXRoZSBtYXhpbXVtIHN0YWNrIHNpemUKICAgICAgLXQJdGhlIG1heGltdW0gYW1vdW50IG9mIGNwdSB0aW1lIGluIHNlY29uZHMKICAgICAgLXUJdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXIgcHJvY2Vzc2VzCiAgICAgIC12CXRoZSBzaXplIG9mIHZpcnR1YWwgbWVtb3J5CiAgICAgIC14CXRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGxvY2tzCiAgICAKICAgIElmIExJTUlUIGlzIGdpdmVuLCBpdCBpcyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2U7IHRoZQogICAgc3BlY2lhbCBMSU1JVCB2YWx1ZXMgYHNvZnQnLCBgaGFyZCcsIGFuZCBgdW5saW1pdGVkJyBzdGFuZCBmb3IgdGhlCiAgICBjdXJyZW50IHNvZnQgbGltaXQsIHRoZSBjdXJyZW50IGhhcmQgbGltaXQsIGFuZCBubyBsaW1pdCwgcmVzcGVjdGl2ZWx5LgogICAgT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIHByaW50ZWQuICBJZgogICAgbm8gb3B0aW9uIGlzIGdpdmVuLCB0aGVuIC1mIGlzIGFzc3VtZWQuCiAgICAKICAgIFZhbHVlcyBhcmUgaW4gMTAyNC1ieXRlIGluY3JlbWVudHMsIGV4Y2VwdCBmb3IgLXQsIHdoaWNoIGlzIGluIHNlY29uZHMsCiAgICAtcCwgd2hpY2ggaXMgaW4gaW5jcmVtZW50cyBvZiA1MTIgYnl0ZXMsIGFuZCAtdSwgd2hpY2ggaXMgYW4gdW5zY2FsZWQKICAgIG51bWJlciBvZiBwcm9jZXNzZXMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAE1vdmUgam9iIHRvIHRoZSBmb3JlZ3JvdW5kLgogICAgCiAgICBQbGFjZSB0aGUgam9iIGlkZW50aWZpZWQgYnkgSk9CX1NQRUMgaW4gdGhlIGZvcmVncm91bmQsIG1ha2luZyBpdCB0aGUKICAgIGN1cnJlbnQgam9iLiAgSWYgSk9CX1NQRUMgaXMgbm90IHByZXNlbnQsIHRoZSBzaGVsbCdzIG5vdGlvbiBvZiB0aGUKICAgIGN1cnJlbnQgam9iIGlzIHVzZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgU3RhdHVzIG9mIGNvbW1hbmQgcGxhY2VkIGluIGZvcmVncm91bmQsIG9yIGZhaWx1cmUgaWYgYW4gZXJyb3Igb2NjdXJzLgBNb3ZlIGpvYnMgdG8gdGhlIGJhY2tncm91bmQuCiAgICAKICAgIFBsYWNlIHRoZSBqb2JzIGlkZW50aWZpZWQgYnkgZWFjaCBKT0JfU1BFQyBpbiB0aGUgYmFja2dyb3VuZCwgYXMgaWYgdGhleQogICAgaGFkIGJlZW4gc3RhcnRlZCB3aXRoIGAmJy4gIElmIEpPQl9TUEVDIGlzIG5vdCBwcmVzZW50LCB0aGUgc2hlbGwncyBub3Rpb24KICAgIG9mIHRoZSBjdXJyZW50IGpvYiBpcyB1c2VkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3Mgam9iIGNvbnRyb2wgaXMgbm90IGVuYWJsZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBOdWxsIGNvbW1hbmQuCiAgICAKICAgIE5vIGVmZmVjdDsgdGhlIGNvbW1hbmQgZG9lcyBub3RoaW5nLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBzdWNjZWVkcy4AT0xEUFdEIG5vdCBzZXQAUGFyc2Ugb3B0aW9uIGFyZ3VtZW50cy4KICAgIAogICAgR2V0b3B0cyBpcyB1c2VkIGJ5IHNoZWxsIHByb2NlZHVyZXMgdG8gcGFyc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCiAgICBhcyBvcHRpb25zLgogICAgCiAgICBPUFRTVFJJTkcgY29udGFpbnMgdGhlIG9wdGlvbiBsZXR0ZXJzIHRvIGJlIHJlY29nbml6ZWQ7IGlmIGEgbGV0dGVyCiAgICBpcyBmb2xsb3dlZCBieSBhIGNvbG9uLCB0aGUgb3B0aW9uIGlzIGV4cGVjdGVkIHRvIGhhdmUgYW4gYXJndW1lbnQsCiAgICB3aGljaCBzaG91bGQgYmUgc2VwYXJhdGVkIGZyb20gaXQgYnkgd2hpdGUgc3BhY2UuCiAgICAKICAgIEVhY2ggdGltZSBpdCBpcyBpbnZva2VkLCBnZXRvcHRzIHdpbGwgcGxhY2UgdGhlIG5leHQgb3B0aW9uIGluIHRoZQogICAgc2hlbGwgdmFyaWFibGUgJG5hbWUsIGluaXRpYWxpemluZyBuYW1lIGlmIGl0IGRvZXMgbm90IGV4aXN0LCBhbmQKICAgIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBhcmd1bWVudCB0byBiZSBwcm9jZXNzZWQgaW50byB0aGUgc2hlbGwKICAgIHZhcmlhYmxlIE9QVElORC4gIE9QVElORCBpcyBpbml0aWFsaXplZCB0byAxIGVhY2ggdGltZSB0aGUgc2hlbGwgb3IKICAgIGEgc2hlbGwgc2NyaXB0IGlzIGludm9rZWQuICBXaGVuIGFuIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCwKICAgIGdldG9wdHMgcGxhY2VzIHRoYXQgYXJndW1lbnQgaW50byB0aGUgc2hlbGwgdmFyaWFibGUgT1BUQVJHLgogICAgCiAgICBnZXRvcHRzIHJlcG9ydHMgZXJyb3JzIGluIG9uZSBvZiB0d28gd2F5cy4gIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIKICAgIG9mIE9QVFNUUklORyBpcyBhIGNvbG9uLCBnZXRvcHRzIHVzZXMgc2lsZW50IGVycm9yIHJlcG9ydGluZy4gIEluCiAgICB0aGlzIG1vZGUsIG5vIGVycm9yIG1lc3NhZ2VzIGFyZSBwcmludGVkLiAgSWYgYW4gaW52YWxpZCBvcHRpb24gaXMKICAgIHNlZW4sIGdldG9wdHMgcGxhY2VzIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZvdW5kIGludG8gT1BUQVJHLiAgSWYgYQogICAgcmVxdWlyZWQgYXJndW1lbnQgaXMgbm90IGZvdW5kLCBnZXRvcHRzIHBsYWNlcyBhICc6JyBpbnRvIE5BTUUgYW5kCiAgICBzZXRzIE9QVEFSRyB0byB0aGUgb3B0aW9uIGNoYXJhY3RlciBmb3VuZC4gIElmIGdldG9wdHMgaXMgbm90IGluCiAgICBzaWxlbnQgbW9kZSwgYW5kIGFuIGludmFsaWQgb3B0aW9uIGlzIHNlZW4sIGdldG9wdHMgcGxhY2VzICc/JyBpbnRvCiAgICBOQU1FIGFuZCB1bnNldHMgT1BUQVJHLiAgSWYgYSByZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgZm91bmQsIGEgJz8nCiAgICBpcyBwbGFjZWQgaW4gTkFNRSwgT1BUQVJHIGlzIHVuc2V0LCBhbmQgYSBkaWFnbm9zdGljIG1lc3NhZ2UgaXMKICAgIHByaW50ZWQuCiAgICAKICAgIElmIHRoZSBzaGVsbCB2YXJpYWJsZSBPUFRFUlIgaGFzIHRoZSB2YWx1ZSAwLCBnZXRvcHRzIGRpc2FibGVzIHRoZQogICAgcHJpbnRpbmcgb2YgZXJyb3IgbWVzc2FnZXMsIGV2ZW4gaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgogICAgT1BUU1RSSU5HIGlzIG5vdCBhIGNvbG9uLiAgT1BURVJSIGhhcyB0aGUgdmFsdWUgMSBieSBkZWZhdWx0LgogICAgCiAgICBHZXRvcHRzIG5vcm1hbGx5IHBhcnNlcyB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzICgkMCAtICQ5KSwgYnV0IGlmCiAgICBtb3JlIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZXkgYXJlIHBhcnNlZCBpbnN0ZWFkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyBpZiBhbiBvcHRpb24gaXMgZm91bmQ7IGZhaWxzIGlmIHRoZSBlbmQgb2Ygb3B0aW9ucyBpcwogICAgZW5jb3VudGVyZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBQcmludCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLUwJcHJpbnQgdGhlIHZhbHVlIG9mICRQV0QgaWYgaXQgbmFtZXMgdGhlIGN1cnJlbnQgd29ya2luZwogICAgCWRpcmVjdG9yeQogICAgICAtUAlwcmludCB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBzeW1ib2xpYyBsaW5rcwogICAgCiAgICBCeSBkZWZhdWx0LCBgcHdkJyBiZWhhdmVzIGFzIGlmIGAtTCcgd2VyZSBzcGVjaWZpZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgIGNhbm5vdCBiZSByZWFkLgBRdWl0AFJlYWQgYSBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBzcGxpdCBpdCBpbnRvIGZpZWxkcy4KICAgIAogICAgUmVhZHMgYSBzaW5nbGUgbGluZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb3IgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQKICAgIGlmIHRoZSAtdSBvcHRpb24gaXMgc3VwcGxpZWQuICBUaGUgbGluZSBpcyBzcGxpdCBpbnRvIGZpZWxkcyBhcyB3aXRoIHdvcmQKICAgIHNwbGl0dGluZywgYW5kIHRoZSBmaXJzdCB3b3JkIGlzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBOQU1FLCB0aGUgc2Vjb25kCiAgICB3b3JkIHRvIHRoZSBzZWNvbmQgTkFNRSwgYW5kIHNvIG9uLCB3aXRoIGFueSBsZWZ0b3ZlciB3b3JkcyBhc3NpZ25lZCB0bwogICAgdGhlIGxhc3QgTkFNRS4gIE9ubHkgdGhlIGNoYXJhY3RlcnMgZm91bmQgaW4gJElGUyBhcmUgcmVjb2duaXplZCBhcyB3b3JkCiAgICBkZWxpbWl0ZXJzLgogICAgCiAgICBJZiBubyBOQU1FcyBhcmUgc3VwcGxpZWQsIHRoZSBsaW5lIHJlYWQgaXMgc3RvcmVkIGluIHRoZSBSRVBMWSB2YXJpYWJsZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgYXJyYXkJYXNzaWduIHRoZSB3b3JkcyByZWFkIHRvIHNlcXVlbnRpYWwgaW5kaWNlcyBvZiB0aGUgYXJyYXkKICAgIAkJdmFyaWFibGUgQVJSQVksIHN0YXJ0aW5nIGF0IHplcm8KICAgICAgLWQgZGVsaW0JY29udGludWUgdW50aWwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBERUxJTSBpcyByZWFkLCByYXRoZXIKICAgIAkJdGhhbiBuZXdsaW5lCiAgICAgIC1lCQl1c2UgUmVhZGxpbmUgdG8gb2J0YWluIHRoZSBsaW5lIGluIGFuIGludGVyYWN0aXZlIHNoZWxsCiAgICAgIC1pIHRleHQJVXNlIFRFWFQgYXMgdGhlIGluaXRpYWwgdGV4dCBmb3IgUmVhZGxpbmUKICAgICAgLW4gbmNoYXJzCXJldHVybiBhZnRlciByZWFkaW5nIE5DSEFSUyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIHdhaXRpbmcKICAgIAkJZm9yIGEgbmV3bGluZSwgYnV0IGhvbm9yIGEgZGVsaW1pdGVyIGlmIGZld2VyIHRoYW4gTkNIQVJTCiAgICAJCWNoYXJhY3RlcnMgYXJlIHJlYWQgYmVmb3JlIHRoZSBkZWxpbWl0ZXIKICAgICAgLU4gbmNoYXJzCXJldHVybiBvbmx5IGFmdGVyIHJlYWRpbmcgZXhhY3RseSBOQ0hBUlMgY2hhcmFjdGVycywgdW5sZXNzCiAgICAJCUVPRiBpcyBlbmNvdW50ZXJlZCBvciByZWFkIHRpbWVzIG91dCwgaWdub3JpbmcgYW55IGRlbGltaXRlcgogICAgICAtcCBwcm9tcHQJb3V0cHV0IHRoZSBzdHJpbmcgUFJPTVBUIHdpdGhvdXQgYSB0cmFpbGluZyBuZXdsaW5lIGJlZm9yZQogICAgCQlhdHRlbXB0aW5nIHRvIHJlYWQKICAgICAgLXIJCWRvIG5vdCBhbGxvdyBiYWNrc2xhc2hlcyB0byBlc2NhcGUgYW55IGNoYXJhY3RlcnMKICAgICAgLXMJCWRvIG5vdCBlY2hvIGlucHV0IGNvbWluZyBmcm9tIGEgdGVybWluYWwKICAgICAgLXQgdGltZW91dAl0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgaWYgYSBjb21wbGV0ZSBsaW5lIG9mIGlucHV0IGlzCiAgICAJCW5vdCByZWFkIHdpdGhpbnQgVElNRU9VVCBzZWNvbmRzLiAgVGhlIHZhbHVlIG9mIHRoZSBUTU9VVAogICAgCQl2YXJpYWJsZSBpcyB0aGUgZGVmYXVsdCB0aW1lb3V0LiAgVElNRU9VVCBtYXkgYmUgYQogICAgCQlmcmFjdGlvbmFsIG51bWJlci4gIElmIFRJTUVPVVQgaXMgMCwgcmVhZCByZXR1cm5zIHN1Y2Nlc3Mgb25seQogICAgCQlpZiBpbnB1dCBpcyBhdmFpbGFibGUgb24gdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuICBUaGUKICAgIAkJZXhpdCBzdGF0dXMgaXMgZ3JlYXRlciB0aGFuIDEyOCBpZiB0aGUgdGltZW91dCBpcyBleGNlZWRlZAogICAgICAtdSBmZAkJcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB1bmxlc3MgZW5kLW9mLWZpbGUgaXMgZW5jb3VudGVyZWQsIHJlYWQgdGltZXMgb3V0LAogICAgb3IgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgaXMgc3VwcGxpZWQgYXMgdGhlIGFyZ3VtZW50IHRvIC11LgBSZWFkIGxpbmVzIGZyb20gYSBmaWxlIGludG8gYW4gYXJyYXkgdmFyaWFibGUuCiAgICAKICAgIEEgc3lub255bSBmb3IgYG1hcGZpbGUnLgBSZWFkIGxpbmVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGludG8gYW4gaW5kZXhlZCBhcnJheSB2YXJpYWJsZS4KICAgIAogICAgUmVhZCBsaW5lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpbnRvIHRoZSBpbmRleGVkIGFycmF5IHZhcmlhYmxlIEFSUkFZLCBvcgogICAgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQgaWYgdGhlIC11IG9wdGlvbiBpcyBzdXBwbGllZC4gIFRoZSB2YXJpYWJsZSBNQVBGSUxFCiAgICBpcyB0aGUgZGVmYXVsdCBBUlJBWS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4gY291bnQJQ29weSBhdCBtb3N0IENPVU5UIGxpbmVzLiAgSWYgQ09VTlQgaXMgMCwgYWxsIGxpbmVzIGFyZSBjb3BpZWQuCiAgICAgIC1PIG9yaWdpbglCZWdpbiBhc3NpZ25pbmcgdG8gQVJSQVkgYXQgaW5kZXggT1JJR0lOLiAgVGhlIGRlZmF1bHQgaW5kZXggaXMgMC4KICAgICAgLXMgY291bnQgCURpc2NhcmQgdGhlIGZpcnN0IENPVU5UIGxpbmVzIHJlYWQuCiAgICAgIC10CQlSZW1vdmUgYSB0cmFpbGluZyBuZXdsaW5lIGZyb20gZWFjaCBsaW5lIHJlYWQuCiAgICAgIC11IGZkCQlSZWFkIGxpbmVzIGZyb20gZmlsZSBkZXNjcmlwdG9yIEZEIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGlucHV0LgogICAgICAtQyBjYWxsYmFjawlFdmFsdWF0ZSBDQUxMQkFDSyBlYWNoIHRpbWUgUVVBTlRVTSBsaW5lcyBhcmUgcmVhZC4KICAgICAgLWMgcXVhbnR1bQlTcGVjaWZ5IHRoZSBudW1iZXIgb2YgbGluZXMgcmVhZCBiZXR3ZWVuIGVhY2ggY2FsbCB0byBDQUxMQkFDSy4KICAgIAogICAgQXJndW1lbnRzOgogICAgICBBUlJBWQkJQXJyYXkgdmFyaWFibGUgbmFtZSB0byB1c2UgZm9yIGZpbGUgZGF0YS4KICAgIAogICAgSWYgLUMgaXMgc3VwcGxpZWQgd2l0aG91dCAtYywgdGhlIGRlZmF1bHQgcXVhbnR1bSBpcyA1MDAwLiAgV2hlbgogICAgQ0FMTEJBQ0sgaXMgZXZhbHVhdGVkLCBpdCBpcyBzdXBwbGllZCB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXJyYXkKICAgIGVsZW1lbnQgdG8gYmUgYXNzaWduZWQgYW5kIHRoZSBsaW5lIHRvIGJlIGFzc2lnbmVkIHRvIHRoYXQgZWxlbWVudAogICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICAKICAgIElmIG5vdCBzdXBwbGllZCB3aXRoIGFuIGV4cGxpY2l0IG9yaWdpbiwgbWFwZmlsZSB3aWxsIGNsZWFyIEFSUkFZIGJlZm9yZQogICAgYXNzaWduaW5nIHRvIGl0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgQVJSQVkgaXMgcmVhZG9ubHkgb3IKICAgIG5vdCBhbiBpbmRleGVkIGFycmF5LgBSZWNvcmQgbG9jawBSZW1lbWJlciBvciBkaXNwbGF5IHByb2dyYW0gbG9jYXRpb25zLgogICAgCiAgICBEZXRlcm1pbmUgYW5kIHJlbWVtYmVyIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGVhY2ggY29tbWFuZCBOQU1FLiAgSWYKICAgIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGluZm9ybWF0aW9uIGFib3V0IHJlbWVtYmVyZWQgY29tbWFuZHMgaXMgZGlzcGxheWVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZAkJZm9yZ2V0IHRoZSByZW1lbWJlcmVkIGxvY2F0aW9uIG9mIGVhY2ggTkFNRQogICAgICAtbAkJZGlzcGxheSBpbiBhIGZvcm1hdCB0aGF0IG1heSBiZSByZXVzZWQgYXMgaW5wdXQKICAgICAgLXAgcGF0aG5hbWUJdXNlIFBBVEhOQU1FIGlzIHRoZSBmdWxsIHBhdGhuYW1lIG9mIE5BTUUKICAgICAgLXIJCWZvcmdldCBhbGwgcmVtZW1iZXJlZCBsb2NhdGlvbnMKICAgICAgLXQJCXByaW50IHRoZSByZW1lbWJlcmVkIGxvY2F0aW9uIG9mIGVhY2ggTkFNRSwgcHJlY2VkaW5nCiAgICAJCWVhY2ggbG9jYXRpb24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBOQU1FIGlmIG11bHRpcGxlCiAgICAJCU5BTUVzIGFyZSBnaXZlbgogICAgQXJndW1lbnRzOgogICAgICBOQU1FCQlFYWNoIE5BTUUgaXMgc2VhcmNoZWQgZm9yIGluICRQQVRIIGFuZCBhZGRlZCB0byB0aGUgbGlzdAogICAgCQlvZiByZW1lbWJlcmVkIGNvbW1hbmRzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgTkFNRSBpcyBub3QgZm91bmQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAFJlbW92ZSBkaXJlY3RvcmllcyBmcm9tIHN0YWNrLgogICAgCiAgICBSZW1vdmVzIGVudHJpZXMgZnJvbSB0aGUgZGlyZWN0b3J5IHN0YWNrLiAgV2l0aCBubyBhcmd1bWVudHMsIHJlbW92ZXMKICAgIHRoZSB0b3AgZGlyZWN0b3J5IGZyb20gdGhlIHN0YWNrLCBhbmQgY2hhbmdlcyB0byB0aGUgbmV3IHRvcCBkaXJlY3RvcnkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gcmVtb3ZpbmcKICAgIAlkaXJlY3RvcmllcyBmcm9tIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUmVtb3ZlcyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3QKICAgIAlzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGggemVyby4gIEZvciBleGFtcGxlOiBgcG9wZCArMCcKICAgIAlyZW1vdmVzIHRoZSBmaXJzdCBkaXJlY3RvcnksIGBwb3BkICsxJyB0aGUgc2Vjb25kLgogICAgCiAgICAgIC1OCVJlbW92ZXMgdGhlIE50aCBlbnRyeSBjb3VudGluZyBmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdAogICAgCXNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IGBwb3BkIC0wJwogICAgCXJlbW92ZXMgdGhlIGxhc3QgZGlyZWN0b3J5LCBgcG9wZCAtMScgdGhlIG5leHQgdG8gbGFzdC4KICAgIAogICAgVGhlIGBkaXJzJyBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHN1cHBsaWVkIG9yIHRoZSBkaXJlY3RvcnkKICAgIGNoYW5nZSBmYWlscy4AUmVtb3ZlIGVhY2ggTkFNRSBmcm9tIHRoZSBsaXN0IG9mIGRlZmluZWQgYWxpYXNlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcmVtb3ZlIGFsbCBhbGlhcyBkZWZpbml0aW9ucy4KICAgIAogICAgUmV0dXJuIHN1Y2Nlc3MgdW5sZXNzIGEgTkFNRSBpcyBub3QgYW4gZXhpc3RpbmcgYWxpYXMuAFJlbW92ZSBqb2JzIGZyb20gY3VycmVudCBzaGVsbC4KICAgIAogICAgUmVtb3ZlcyBlYWNoIEpPQlNQRUMgYXJndW1lbnQgZnJvbSB0aGUgdGFibGUgb2YgYWN0aXZlIGpvYnMuICBXaXRob3V0CiAgICBhbnkgSk9CU1BFQ3MsIHRoZSBzaGVsbCB1c2VzIGl0cyBub3Rpb24gb2YgdGhlIGN1cnJlbnQgam9iLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlyZW1vdmUgYWxsIGpvYnMgaWYgSk9CU1BFQyBpcyBub3Qgc3VwcGxpZWQKICAgICAgLWgJbWFyayBlYWNoIEpPQlNQRUMgc28gdGhhdCBTSUdIVVAgaXMgbm90IHNlbnQgdG8gdGhlIGpvYiBpZiB0aGUKICAgIAlzaGVsbCByZWNlaXZlcyBhIFNJR0hVUAogICAgICAtcglyZW1vdmUgb25seSBydW5uaW5nIGpvYnMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIG9yIEpPQlNQRUMgaXMgZ2l2ZW4uAFJlbW92ZXMgZW50cmllcyBmcm9tIHRoZSBkaXJlY3Rvcnkgc3RhY2suICBXaXRoIG5vIGFyZ3VtZW50cywgcmVtb3ZlcwogICAgdGhlIHRvcCBkaXJlY3RvcnkgZnJvbSB0aGUgc3RhY2ssIGFuZCBjaGFuZ2VzIHRvIHRoZSBuZXcgdG9wIGRpcmVjdG9yeS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JU3VwcHJlc3NlcyB0aGUgbm9ybWFsIGNoYW5nZSBvZiBkaXJlY3Rvcnkgd2hlbiByZW1vdmluZwogICAgCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCXNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IGBwb3BkICswJwogICAgCXJlbW92ZXMgdGhlIGZpcnN0IGRpcmVjdG9yeSwgYHBvcGQgKzEnIHRoZSBzZWNvbmQuCiAgICAKICAgICAgLU4JUmVtb3ZlcyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTogYHBvcGQgLTAnCiAgICAJcmVtb3ZlcyB0aGUgbGFzdCBkaXJlY3RvcnksIGBwb3BkIC0xJyB0aGUgbmV4dCB0byBsYXN0LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AUmVwbGFjZSB0aGUgc2hlbGwgd2l0aCB0aGUgZ2l2ZW4gY29tbWFuZC4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5ELCByZXBsYWNpbmcgdGhpcyBzaGVsbCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS4KICAgIEFSR1VNRU5UUyBiZWNvbWUgdGhlIGFyZ3VtZW50cyB0byBDT01NQU5ELiAgSWYgQ09NTUFORCBpcyBub3Qgc3BlY2lmaWVkLAogICAgYW55IHJlZGlyZWN0aW9ucyB0YWtlIGVmZmVjdCBpbiB0aGUgY3VycmVudCBzaGVsbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgbmFtZQlwYXNzIE5BTUUgYXMgdGhlIHplcm90aCBhcmd1bWVudCB0byBDT01NQU5ECiAgICAgIC1jCQlleGVjdXRlIENPTU1BTkQgd2l0aCBhbiBlbXB0eSBlbnZpcm9ubWVudAogICAgICAtbAkJcGxhY2UgYSBkYXNoIGluIHRoZSB6ZXJvdGggYXJndW1lbnQgdG8gQ09NTUFORAogICAgCiAgICBJZiB0aGUgY29tbWFuZCBjYW5ub3QgYmUgZXhlY3V0ZWQsIGEgbm9uLWludGVyYWN0aXZlIHNoZWxsIGV4aXRzLCB1bmxlc3MKICAgIHRoZSBzaGVsbCBvcHRpb24gYGV4ZWNmYWlsJyBpcyBzZXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBDT01NQU5EIGlzIG5vdCBmb3VuZCBvciBhIHJlZGlyZWN0aW9uIGVycm9yIG9jY3Vycy4AUmVwb3J0IHRpbWUgY29uc3VtZWQgYnkgcGlwZWxpbmUncyBleGVjdXRpb24uCiAgICAKICAgIEV4ZWN1dGUgUElQRUxJTkUgYW5kIHByaW50IGEgc3VtbWFyeSBvZiB0aGUgcmVhbCB0aW1lLCB1c2VyIENQVSB0aW1lLAogICAgYW5kIHN5c3RlbSBDUFUgdGltZSBzcGVudCBleGVjdXRpbmcgUElQRUxJTkUgd2hlbiBpdCB0ZXJtaW5hdGVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlwcmludCB0aGUgdGltaW5nIHN1bW1hcnkgaW4gdGhlIHBvcnRhYmxlIFBvc2l4IGZvcm1hdAogICAgCiAgICBUaGUgdmFsdWUgb2YgdGhlIFRJTUVGT1JNQVQgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgb3V0cHV0IGZvcm1hdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBUaGUgcmV0dXJuIHN0YXR1cyBpcyB0aGUgcmV0dXJuIHN0YXR1cyBvZiBQSVBFTElORS4AUmVzdW1lIGZvciwgd2hpbGUsIG9yIHVudGlsIGxvb3BzLgogICAgCiAgICBSZXN1bWVzIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgZW5jbG9zaW5nIEZPUiwgV0hJTEUgb3IgVU5USUwgbG9vcC4KICAgIElmIE4gaXMgc3BlY2lmaWVkLCByZXN1bWVzIHRoZSBOdGggZW5jbG9zaW5nIGxvb3AuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIGV4aXQgc3RhdHVzIGlzIDAgdW5sZXNzIE4gaXMgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLgBSZXN1bWUgam9iIGluIGZvcmVncm91bmQuCiAgICAKICAgIEVxdWl2YWxlbnQgdG8gdGhlIEpPQl9TUEVDIGFyZ3VtZW50IHRvIHRoZSBgZmcnIGNvbW1hbmQuICBSZXN1bWUgYQogICAgc3RvcHBlZCBvciBiYWNrZ3JvdW5kIGpvYi4gIEpPQl9TUEVDIGNhbiBzcGVjaWZ5IGVpdGhlciBhIGpvYiBuYW1lCiAgICBvciBhIGpvYiBudW1iZXIuICBGb2xsb3dpbmcgSk9CX1NQRUMgd2l0aCBhIGAmJyBwbGFjZXMgdGhlIGpvYiBpbgogICAgdGhlIGJhY2tncm91bmQsIGFzIGlmIHRoZSBqb2Igc3BlY2lmaWNhdGlvbiBoYWQgYmVlbiBzdXBwbGllZCBhcyBhbgogICAgYXJndW1lbnQgdG8gYGJnJy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIHJlc3VtZWQgam9iLgBSZXR1cm4gYSBzdWNjZXNzZnVsIHJlc3VsdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgc3VjY2VlZHMuAFJldHVybiBhbiB1bnN1Y2Nlc3NmdWwgcmVzdWx0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBmYWlscy4AUmV0dXJuIGZyb20gYSBzaGVsbCBmdW5jdGlvbi4KICAgIAogICAgQ2F1c2VzIGEgZnVuY3Rpb24gb3Igc291cmNlZCBzY3JpcHQgdG8gZXhpdCB3aXRoIHRoZSByZXR1cm4gdmFsdWUKICAgIHNwZWNpZmllZCBieSBOLiAgSWYgTiBpcyBvbWl0dGVkLCB0aGUgcmV0dXJuIHN0YXR1cyBpcyB0aGF0IG9mIHRoZQogICAgbGFzdCBjb21tYW5kIGV4ZWN1dGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gb3Igc2NyaXB0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgTiwgb3IgZmFpbHVyZSBpZiB0aGUgc2hlbGwgaXMgbm90IGV4ZWN1dGluZyBhIGZ1bmN0aW9uIG9yIHNjcmlwdC4AUmV0dXJuIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbC4KICAgIAogICAgV2l0aG91dCBFWFBSLCByZXR1cm5zICIkbGluZSAkZmlsZW5hbWUiLiAgV2l0aCBFWFBSLCByZXR1cm5zCiAgICAiJGxpbmUgJHN1YnJvdXRpbmUgJGZpbGVuYW1lIjsgdGhpcyBleHRyYSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0bwogICAgcHJvdmlkZSBhIHN0YWNrIHRyYWNlLgogICAgCiAgICBUaGUgdmFsdWUgb2YgRVhQUiBpbmRpY2F0ZXMgaG93IG1hbnkgY2FsbCBmcmFtZXMgdG8gZ28gYmFjayBiZWZvcmUgdGhlCiAgICBjdXJyZW50IG9uZTsgdGhlIHRvcCBmcmFtZSBpcyBmcmFtZSAwLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMCB1bmxlc3MgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBzaGVsbCBmdW5jdGlvbiBvciBFWFBSCiAgICBpcyBpbnZhbGlkLgBSZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbC4KICAgIAogICAgV2l0aG91dCBFWFBSLCByZXR1cm5zIABSdW5uaW5nAFNlZ21lbnRhdGlvbiBmYXVsdABTZWxlY3Qgd29yZHMgZnJvbSBhIGxpc3QgYW5kIGV4ZWN1dGUgY29tbWFuZHMuCiAgICAKICAgIFRoZSBXT1JEUyBhcmUgZXhwYW5kZWQsIGdlbmVyYXRpbmcgYSBsaXN0IG9mIHdvcmRzLiAgVGhlCiAgICBzZXQgb2YgZXhwYW5kZWQgd29yZHMgaXMgcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3IsIGVhY2gKICAgIHByZWNlZGVkIGJ5IGEgbnVtYmVyLiAgSWYgYGluIFdPUkRTJyBpcyBub3QgcHJlc2VudCwgYGluICIkQCInCiAgICBpcyBhc3N1bWVkLiAgVGhlIFBTMyBwcm9tcHQgaXMgdGhlbiBkaXNwbGF5ZWQgYW5kIGEgbGluZSByZWFkCiAgICBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIElmIHRoZSBsaW5lIGNvbnNpc3RzIG9mIHRoZSBudW1iZXIKICAgIGNvcnJlc3BvbmRpbmcgdG8gb25lIG9mIHRoZSBkaXNwbGF5ZWQgd29yZHMsIHRoZW4gTkFNRSBpcyBzZXQKICAgIHRvIHRoYXQgd29yZC4gIElmIHRoZSBsaW5lIGlzIGVtcHR5LCBXT1JEUyBhbmQgdGhlIHByb21wdCBhcmUKICAgIHJlZGlzcGxheWVkLiAgSWYgRU9GIGlzIHJlYWQsIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4gIEFueSBvdGhlcgogICAgdmFsdWUgcmVhZCBjYXVzZXMgTkFNRSB0byBiZSBzZXQgdG8gbnVsbC4gIFRoZSBsaW5lIHJlYWQgaXMgc2F2ZWQKICAgIGluIHRoZSB2YXJpYWJsZSBSRVBMWS4gIENPTU1BTkRTIGFyZSBleGVjdXRlZCBhZnRlciBlYWNoIHNlbGVjdGlvbgogICAgdW50aWwgYSBicmVhayBjb21tYW5kIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBTZW5kIGEgc2lnbmFsIHRvIGEgam9iLgogICAgCiAgICBTZW5kIHRoZSBwcm9jZXNzZXMgaWRlbnRpZmllZCBieSBQSUQgb3IgSk9CU1BFQyB0aGUgc2lnbmFsIG5hbWVkIGJ5CiAgICBTSUdTUEVDIG9yIFNJR05VTS4gIElmIG5laXRoZXIgU0lHU1BFQyBub3IgU0lHTlVNIGlzIHByZXNlbnQsIHRoZW4KICAgIFNJR1RFUk0gaXMgYXNzdW1lZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXMgc2lnCVNJRyBpcyBhIHNpZ25hbCBuYW1lCiAgICAgIC1uIHNpZwlTSUcgaXMgYSBzaWduYWwgbnVtYmVyCiAgICAgIC1sCWxpc3QgdGhlIHNpZ25hbCBuYW1lczsgaWYgYXJndW1lbnRzIGZvbGxvdyBgLWwnIHRoZXkgYXJlCiAgICAJYXNzdW1lZCB0byBiZSBzaWduYWwgbnVtYmVycyBmb3Igd2hpY2ggbmFtZXMgc2hvdWxkIGJlIGxpc3RlZAogICAgCiAgICBLaWxsIGlzIGEgc2hlbGwgYnVpbHRpbiBmb3IgdHdvIHJlYXNvbnM6IGl0IGFsbG93cyBqb2IgSURzIHRvIGJlIHVzZWQKICAgIGluc3RlYWQgb2YgcHJvY2VzcyBJRHMsIGFuZCBhbGxvd3MgcHJvY2Vzc2VzIHRvIGJlIGtpbGxlZCBpZiB0aGUgbGltaXQKICAgIG9uIHByb2Nlc3NlcyB0aGF0IHlvdSBjYW4gY3JlYXRlIGlzIHJlYWNoZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhbiBlcnJvciBvY2N1cnMuAFNldCBSZWFkbGluZSBrZXkgYmluZGluZ3MgYW5kIHZhcmlhYmxlcy4KICAgIAogICAgQmluZCBhIGtleSBzZXF1ZW5jZSB0byBhIFJlYWRsaW5lIGZ1bmN0aW9uIG9yIGEgbWFjcm8sIG9yIHNldCBhCiAgICBSZWFkbGluZSB2YXJpYWJsZS4gIFRoZSBub24tb3B0aW9uIGFyZ3VtZW50IHN5bnRheCBpcyBlcXVpdmFsZW50IHRvCiAgICB0aGF0IGZvdW5kIGluIH4vLmlucHV0cmMsIGJ1dCBtdXN0IGJlIHBhc3NlZCBhcyBhIHNpbmdsZSBhcmd1bWVudDoKICAgIGUuZy4sIGJpbmQgJyJcQy14XEMtciI6IHJlLXJlYWQtaW5pdC1maWxlJy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW0gIGtleW1hcCAgICAgICAgIFVzZSBLRVlNQVAgYXMgdGhlIGtleW1hcCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuICBBY2NlcHRhYmxlIGtleW1hcCBuYW1lcyBhcmUgZW1hY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBlbWFjcy1zdGFuZGFyZCwgZW1hY3MtbWV0YSwgZW1hY3MtY3RseCwgdmksIHZpLW1vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICB2aS1jb21tYW5kLCBhbmQgdmktaW5zZXJ0LgogICAgICAtbCAgICAgICAgICAgICAgICAgTGlzdCBuYW1lcyBvZiBmdW5jdGlvbnMuCiAgICAgIC1QICAgICAgICAgICAgICAgICBMaXN0IGZ1bmN0aW9uIG5hbWVzIGFuZCBiaW5kaW5ncy4KICAgICAgLXAgICAgICAgICAgICAgICAgIExpc3QgZnVuY3Rpb25zIGFuZCBiaW5kaW5ncyBpbiBhIGZvcm0gdGhhdCBjYW4gYmUKICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZCBhcyBpbnB1dC4KICAgICAgLVMgICAgICAgICAgICAgICAgIExpc3Qga2V5IHNlcXVlbmNlcyB0aGF0IGludm9rZSBtYWNyb3MgYW5kIHRoZWlyIHZhbHVlcwogICAgICAtcyAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIHRoYXQgaW52b2tlIG1hY3JvcyBhbmQgdGhlaXIgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcmV1c2VkIGFzIGlucHV0LgogICAgICAtViAgICAgICAgICAgICAgICAgTGlzdCB2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzCiAgICAgIC12ICAgICAgICAgICAgICAgICBMaXN0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgaW4gYSBmb3JtIHRoYXQgY2FuCiAgICAgICAgICAgICAgICAgICAgICAgICBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAgIC1xICBmdW5jdGlvbi1uYW1lICBRdWVyeSBhYm91dCB3aGljaCBrZXlzIGludm9rZSB0aGUgbmFtZWQgZnVuY3Rpb24uCiAgICAgIC11ICBmdW5jdGlvbi1uYW1lICBVbmJpbmQgYWxsIGtleXMgd2hpY2ggYXJlIGJvdW5kIHRvIHRoZSBuYW1lZCBmdW5jdGlvbi4KICAgICAgLXIgIGtleXNlcSAgICAgICAgIFJlbW92ZSB0aGUgYmluZGluZyBmb3IgS0VZU0VRLgogICAgICAtZiAgZmlsZW5hbWUgICAgICAgUmVhZCBrZXkgYmluZGluZ3MgZnJvbSBGSUxFTkFNRS4KICAgICAgLXggIGtleXNlcTpzaGVsbC1jb21tYW5kCUNhdXNlIFNIRUxMLUNPTU1BTkQgdG8gYmUgZXhlY3V0ZWQgd2hlbgogICAgCQkJCUtFWVNFUSBpcyBlbnRlcmVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIGJpbmQgcmV0dXJucyAwIHVubGVzcyBhbiB1bnJlY29nbml6ZWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4AU2V0IGFuZCB1bnNldCBzaGVsbCBvcHRpb25zLgogICAgCiAgICBDaGFuZ2UgdGhlIHNldHRpbmcgb2YgZWFjaCBzaGVsbCBvcHRpb24gT1BUTkFNRS4gIFdpdGhvdXQgYW55IG9wdGlvbgogICAgYXJndW1lbnRzLCBsaXN0IGFsbCBzaGVsbCBvcHRpb25zIHdpdGggYW4gaW5kaWNhdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCBlYWNoCiAgICBpcyBzZXQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1vCXJlc3RyaWN0IE9QVE5BTUVzIHRvIHRob3NlIGRlZmluZWQgZm9yIHVzZSB3aXRoIGBzZXQgLW8nCiAgICAgIC1wCXByaW50IGVhY2ggc2hlbGwgb3B0aW9uIHdpdGggYW4gaW5kaWNhdGlvbiBvZiBpdHMgc3RhdHVzCiAgICAgIC1xCXN1cHByZXNzIG91dHB1dAogICAgICAtcwllbmFibGUgKHNldCkgZWFjaCBPUFROQU1FCiAgICAgIC11CWRpc2FibGUgKHVuc2V0KSBlYWNoIE9QVE5BTUUKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgaWYgT1BUTkFNRSBpcyBlbmFibGVkOyBmYWlscyBpZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgZ2l2ZW4gb3IgT1BUTkFNRSBpcyBkaXNhYmxlZC4AU2V0IGV4cG9ydCBhdHRyaWJ1dGUgZm9yIHNoZWxsIHZhcmlhYmxlcy4KICAgIAogICAgTWFya3MgZWFjaCBOQU1FIGZvciBhdXRvbWF0aWMgZXhwb3J0IHRvIHRoZSBlbnZpcm9ubWVudCBvZiBzdWJzZXF1ZW50bHkKICAgIGV4ZWN1dGVkIGNvbW1hbmRzLiAgSWYgVkFMVUUgaXMgc3VwcGxpZWQsIGFzc2lnbiBWQUxVRSBiZWZvcmUgZXhwb3J0aW5nLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLW4JcmVtb3ZlIHRoZSBleHBvcnQgcHJvcGVydHkgZnJvbSBlYWNoIE5BTUUKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIGV4cG9ydGVkIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIGAtLScgZGlzYWJsZXMgZnVydGhlciBvcHRpb24gcHJvY2Vzc2luZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIE5BTUUgaXMgaW52YWxpZC4AU2V0IG9yIHVuc2V0IHZhbHVlcyBvZiBzaGVsbCBvcHRpb25zIGFuZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAKICAgIENoYW5nZSB0aGUgdmFsdWUgb2Ygc2hlbGwgYXR0cmlidXRlcyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBvcgogICAgZGlzcGxheSB0aGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzaGVsbCB2YXJpYWJsZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hICBNYXJrIHZhcmlhYmxlcyB3aGljaCBhcmUgbW9kaWZpZWQgb3IgY3JlYXRlZCBmb3IgZXhwb3J0LgogICAgICAtYiAgTm90aWZ5IG9mIGpvYiB0ZXJtaW5hdGlvbiBpbW1lZGlhdGVseS4KICAgICAgLWUgIEV4aXQgaW1tZWRpYXRlbHkgaWYgYSBjb21tYW5kIGV4aXRzIHdpdGggYSBub24temVybyBzdGF0dXMuCiAgICAgIC1mICBEaXNhYmxlIGZpbGUgbmFtZSBnZW5lcmF0aW9uIChnbG9iYmluZykuCiAgICAgIC1oICBSZW1lbWJlciB0aGUgbG9jYXRpb24gb2YgY29tbWFuZHMgYXMgdGhleSBhcmUgbG9va2VkIHVwLgogICAgICAtayAgQWxsIGFzc2lnbm1lbnQgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4gdGhlIGVudmlyb25tZW50IGZvciBhCiAgICAgICAgICBjb21tYW5kLCBub3QganVzdCB0aG9zZSB0aGF0IHByZWNlZGUgdGhlIGNvbW1hbmQgbmFtZS4KICAgICAgLW0gIEpvYiBjb250cm9sIGlzIGVuYWJsZWQuCiAgICAgIC1uICBSZWFkIGNvbW1hbmRzIGJ1dCBkbyBub3QgZXhlY3V0ZSB0aGVtLgogICAgICAtbyBvcHRpb24tbmFtZQogICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSBjb3JyZXNwb25kaW5nIHRvIG9wdGlvbi1uYW1lOgogICAgICAgICAgICAgIGFsbGV4cG9ydCAgICBzYW1lIGFzIC1hCiAgICAgICAgICAgICAgYnJhY2VleHBhbmQgIHNhbWUgYXMgLUIKICAgICAgICAgICAgICBlbWFjcyAgICAgICAgdXNlIGFuIGVtYWNzLXN0eWxlIGxpbmUgZWRpdGluZyBpbnRlcmZhY2UKICAgICAgICAgICAgICBlcnJleGl0ICAgICAgc2FtZSBhcyAtZQogICAgICAgICAgICAgIGVycnRyYWNlICAgICBzYW1lIGFzIC1FCiAgICAgICAgICAgICAgZnVuY3RyYWNlICAgIHNhbWUgYXMgLVQKICAgICAgICAgICAgICBoYXNoYWxsICAgICAgc2FtZSBhcyAtaAogICAgICAgICAgICAgIGhpc3RleHBhbmQgICBzYW1lIGFzIC1ICiAgICAgICAgICAgICAgaGlzdG9yeSAgICAgIGVuYWJsZSBjb21tYW5kIGhpc3RvcnkKICAgICAgICAgICAgICBpZ25vcmVlb2YgICAgdGhlIHNoZWxsIHdpbGwgbm90IGV4aXQgdXBvbiByZWFkaW5nIEVPRgogICAgICAgICAgICAgIGludGVyYWN0aXZlLWNvbW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IGNvbW1lbnRzIHRvIGFwcGVhciBpbiBpbnRlcmFjdGl2ZSBjb21tYW5kcwogICAgICAgICAgICAgIGtleXdvcmQgICAgICBzYW1lIGFzIC1rCiAgICAgICAgICAgICAgbW9uaXRvciAgICAgIHNhbWUgYXMgLW0KICAgICAgICAgICAgICBub2Nsb2JiZXIgICAgc2FtZSBhcyAtQwogICAgICAgICAgICAgIG5vZXhlYyAgICAgICBzYW1lIGFzIC1uCiAgICAgICAgICAgICAgbm9nbG9iICAgICAgIHNhbWUgYXMgLWYKICAgICAgICAgICAgICBub2xvZyAgICAgICAgY3VycmVudGx5IGFjY2VwdGVkIGJ1dCBpZ25vcmVkCiAgICAgICAgICAgICAgbm90aWZ5ICAgICAgIHNhbWUgYXMgLWIKICAgICAgICAgICAgICBub3Vuc2V0ICAgICAgc2FtZSBhcyAtdQogICAgICAgICAgICAgIG9uZWNtZCAgICAgICBzYW1lIGFzIC10CiAgICAgICAgICAgICAgcGh5c2ljYWwgICAgIHNhbWUgYXMgLVAKICAgICAgICAgICAgICBwaXBlZmFpbCAgICAgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHBpcGVsaW5lIGlzIHRoZSBzdGF0dXMgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhc3QgY29tbWFuZCB0byBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHplcm8gaWYgbm8gY29tbWFuZCBleGl0ZWQgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cwogICAgICAgICAgICAgIHBvc2l4ICAgICAgICBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGJhc2ggd2hlcmUgdGhlIGRlZmF1bHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgUG9zaXggc3RhbmRhcmQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIHN0YW5kYXJkCiAgICAgICAgICAgICAgcHJpdmlsZWdlZCAgIHNhbWUgYXMgLXAKICAgICAgICAgICAgICB2ZXJib3NlICAgICAgc2FtZSBhcyAtdgogICAgICAgICAgICAgIHZpICAgICAgICAgICB1c2UgYSB2aS1zdHlsZSBsaW5lIGVkaXRpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgeHRyYWNlICAgICAgIHNhbWUgYXMgLXgKICAgICAgLXAgIFR1cm5lZCBvbiB3aGVuZXZlciB0aGUgcmVhbCBhbmQgZWZmZWN0aXZlIHVzZXIgaWRzIGRvIG5vdCBtYXRjaC4KICAgICAgICAgIERpc2FibGVzIHByb2Nlc3Npbmcgb2YgdGhlICRFTlYgZmlsZSBhbmQgaW1wb3J0aW5nIG9mIHNoZWxsCiAgICAgICAgICBmdW5jdGlvbnMuICBUdXJuaW5nIHRoaXMgb3B0aW9uIG9mZiBjYXVzZXMgdGhlIGVmZmVjdGl2ZSB1aWQgYW5kCiAgICAgICAgICBnaWQgdG8gYmUgc2V0IHRvIHRoZSByZWFsIHVpZCBhbmQgZ2lkLgogICAgICAtdCAgRXhpdCBhZnRlciByZWFkaW5nIGFuZCBleGVjdXRpbmcgb25lIGNvbW1hbmQuCiAgICAgIC11ICBUcmVhdCB1bnNldCB2YXJpYWJsZXMgYXMgYW4gZXJyb3Igd2hlbiBzdWJzdGl0dXRpbmcuCiAgICAgIC12ICBQcmludCBzaGVsbCBpbnB1dCBsaW5lcyBhcyB0aGV5IGFyZSByZWFkLgogICAgICAteCAgUHJpbnQgY29tbWFuZHMgYW5kIHRoZWlyIGFyZ3VtZW50cyBhcyB0aGV5IGFyZSBleGVjdXRlZC4KICAgICAgLUIgIHRoZSBzaGVsbCB3aWxsIHBlcmZvcm0gYnJhY2UgZXhwYW5zaW9uCiAgICAgIC1DICBJZiBzZXQsIGRpc2FsbG93IGV4aXN0aW5nIHJlZ3VsYXIgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgIGJ5IHJlZGlyZWN0aW9uIG9mIG91dHB1dC4KICAgICAgLUUgIElmIHNldCwgdGhlIEVSUiB0cmFwIGlzIGluaGVyaXRlZCBieSBzaGVsbCBmdW5jdGlvbnMuCiAgICAgIC1IICBFbmFibGUgISBzdHlsZSBoaXN0b3J5IHN1YnN0aXR1dGlvbi4gIFRoaXMgZmxhZyBpcyBvbgogICAgICAgICAgYnkgZGVmYXVsdCB3aGVuIHRoZSBzaGVsbCBpcyBpbnRlcmFjdGl2ZS4KICAgICAgLVAgIElmIHNldCwgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcyB3aGVuIGV4ZWN1dGluZyBjb21tYW5kcwogICAgICAgICAgc3VjaCBhcyBjZCB3aGljaCBjaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogICAgICAtVCAgSWYgc2V0LCB0aGUgREVCVUcgdHJhcCBpcyBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtLSAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGFyZ3VtZW50cywgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgICAgICAgYXJlIHVuc2V0LgogICAgICAtICAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBUaGUgLXggYW5kIC12IG9wdGlvbnMgYXJlIHR1cm5lZCBvZmYuCiAgICAKICAgIFVzaW5nICsgcmF0aGVyIHRoYW4gLSBjYXVzZXMgdGhlc2UgZmxhZ3MgdG8gYmUgdHVybmVkIG9mZi4gIFRoZQogICAgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCB1cG9uIGludm9jYXRpb24gb2YgdGhlIHNoZWxsLiAgVGhlIGN1cnJlbnQKICAgIHNldCBvZiBmbGFncyBtYXkgYmUgZm91bmQgaW4gJC0uICBUaGUgcmVtYWluaW5nIG4gQVJHcyBhcmUgcG9zaXRpb25hbAogICAgcGFyYW1ldGVycyBhbmQgYXJlIGFzc2lnbmVkLCBpbiBvcmRlciwgdG8gJDEsICQyLCAuLiAkbi4gIElmIG5vCiAgICBBUkdzIGFyZSBnaXZlbiwgYWxsIHNoZWxsIHZhcmlhYmxlcyBhcmUgcHJpbnRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBEZWNsYXJlIHZhcmlhYmxlcyBhbmQgZ2l2ZSB0aGVtIGF0dHJpYnV0ZXMuICBJZiBubyBOQU1FcyBhcmUgZ2l2ZW4sCiAgICBkaXNwbGF5IHRoZSBhdHRyaWJ1dGVzIGFuZCB2YWx1ZXMgb2YgYWxsIHZhcmlhYmxlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJcmVzdHJpY3QgYWN0aW9uIG9yIGRpc3BsYXkgdG8gZnVuY3Rpb24gbmFtZXMgYW5kIGRlZmluaXRpb25zCiAgICAgIC1GCXJlc3RyaWN0IGRpc3BsYXkgdG8gZnVuY3Rpb24gbmFtZXMgb25seSAocGx1cyBsaW5lIG51bWJlciBhbmQKICAgIAlzb3VyY2UgZmlsZSB3aGVuIGRlYnVnZ2luZykKICAgICAgLWcJY3JlYXRlIGdsb2JhbCB2YXJpYWJsZXMgd2hlbiB1c2VkIGluIGEgc2hlbGwgZnVuY3Rpb247IG90aGVyd2lzZQogICAgCWlnbm9yZWQKICAgICAgLXAJZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWUgb2YgZWFjaCBOQU1FCiAgICAKICAgIE9wdGlvbnMgd2hpY2ggc2V0IGF0dHJpYnV0ZXM6CiAgICAgIC1hCXRvIG1ha2UgTkFNRXMgaW5kZXhlZCBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLUEJdG8gbWFrZSBOQU1FcyBhc3NvY2lhdGl2ZSBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLWkJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSBgaW50ZWdlcicgYXR0cmlidXRlCiAgICAgIC1sCXRvIGNvbnZlcnQgTkFNRXMgdG8gbG93ZXIgY2FzZSBvbiBhc3NpZ25tZW50CiAgICAgIC1yCXRvIG1ha2UgTkFNRXMgcmVhZG9ubHkKICAgICAgLXQJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSBgdHJhY2UnIGF0dHJpYnV0ZQogICAgICAtdQl0byBjb252ZXJ0IE5BTUVzIHRvIHVwcGVyIGNhc2Ugb24gYXNzaWdubWVudAogICAgICAteAl0byBtYWtlIE5BTUVzIGV4cG9ydAogICAgCiAgICBVc2luZyBgKycgaW5zdGVhZCBvZiBgLScgdHVybnMgb2ZmIHRoZSBnaXZlbiBhdHRyaWJ1dGUuCiAgICAKICAgIFZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlZ2VyIGF0dHJpYnV0ZSBoYXZlIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAoc2VlCiAgICB0aGUgYGxldCcgY29tbWFuZCkgcGVyZm9ybWVkIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgdmFsdWUuCiAgICAKICAgIFdoZW4gdXNlZCBpbiBhIGZ1bmN0aW9uLCBgZGVjbGFyZScgbWFrZXMgTkFNRXMgbG9jYWwsIGFzIHdpdGggdGhlIGBsb2NhbCcKICAgIGNvbW1hbmQuICBUaGUgYC1nJyBvcHRpb24gc3VwcHJlc3NlcyB0aGlzIGJlaGF2aW9yLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBPYnNvbGV0ZS4gIFNlZSBgaGVscCBkZWNsYXJlJy4AU2hlbGwgY29tbWFuZHMgbWF0Y2hpbmcga2V5d29yZCBgAFNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmRzIGAAU2hlbGwgb3B0aW9uczoKAFNoaWZ0IHBvc2l0aW9uYWwgcGFyYW1ldGVycy4KICAgIAogICAgUmVuYW1lIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgJE4rMSwkTisyIC4uLiB0byAkMSwkMiAuLi4gIElmIE4gaXMKICAgIG5vdCBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSAxLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgTiBpcyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gJCMuAFNpZ25hbCAlZABTcGVjaWZ5IGhvdyBhcmd1bWVudHMgYXJlIHRvIGJlIGNvbXBsZXRlZCBieSBSZWFkbGluZS4KICAgIAogICAgRm9yIGVhY2ggTkFNRSwgc3BlY2lmeSBob3cgYXJndW1lbnRzIGFyZSB0byBiZSBjb21wbGV0ZWQuICBJZiBubyBvcHRpb25zCiAgICBhcmUgc3VwcGxpZWQsIGV4aXN0aW5nIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbnMgYXJlIHByaW50ZWQgaW4gYSB3YXkgdGhhdAogICAgYWxsb3dzIHRoZW0gdG8gYmUgcmV1c2VkIGFzIGlucHV0LgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlwcmludCBleGlzdGluZyBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAgIC1yCXJlbW92ZSBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBmb3IgZWFjaCBOQU1FLCBvciwgaWYgbm8KICAgIAlOQU1FcyBhcmUgc3VwcGxpZWQsIGFsbCBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zCiAgICAgIC1ECWFwcGx5IHRoZSBjb21wbGV0aW9ucyBhbmQgYWN0aW9ucyBhcyB0aGUgZGVmYXVsdCBmb3IgY29tbWFuZHMKICAgIAl3aXRob3V0IGFueSBzcGVjaWZpYyBjb21wbGV0aW9uIGRlZmluZWQKICAgICAgLUUJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIHRvICJlbXB0eSIgY29tbWFuZHMgLS0KICAgIAljb21wbGV0aW9uIGF0dGVtcHRlZCBvbiBhIGJsYW5rIGxpbmUKICAgIAogICAgV2hlbiBjb21wbGV0aW9uIGlzIGF0dGVtcHRlZCwgdGhlIGFjdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHRoZQogICAgdXBwZXJjYXNlLWxldHRlciBvcHRpb25zIGFyZSBsaXN0ZWQgYWJvdmUuICBUaGUgLUQgb3B0aW9uIHRha2VzCiAgICBwcmVjZWRlbmNlIG92ZXIgLUUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAFN0b3BwZWQAU3RvcHBlZCAoc2lnbmFsKQBTdG9wcGVkICh0dHkgaW5wdXQpAFN0b3BwZWQgKHR0eSBvdXRwdXQpAFN0b3BwZWQoJXMpAFN1c3BlbmQgc2hlbGwgZXhlY3V0aW9uLgogICAgCiAgICBTdXNwZW5kIHRoZSBleGVjdXRpb24gb2YgdGhpcyBzaGVsbCB1bnRpbCBpdCByZWNlaXZlcyBhIFNJR0NPTlQgc2lnbmFsLgogICAgVW5sZXNzIGZvcmNlZCwgbG9naW4gc2hlbGxzIGNhbm5vdCBiZSBzdXNwZW5kZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCWZvcmNlIHRoZSBzdXNwZW5kLCBldmVuIGlmIHRoZSBzaGVsbCBpcyBhIGxvZ2luIHNoZWxsCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBqb2IgY29udHJvbCBpcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnMuAFRJTUVGT1JNQVQ6IGAlYyc6IGludmFsaWQgZm9ybWF0IGNoYXJhY3RlcgBUZXJtaW5hdGVkAFRoZSBtYWlsIGluICVzIGhhcyBiZWVuIHJlYWQKAFRoZXJlIGFyZSBydW5uaW5nIGpvYnMuCgBUaGVyZSBhcmUgc3RvcHBlZCBqb2JzLgoAVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KAFRoZXNlIHNoZWxsIGNvbW1hbmRzIGFyZSBkZWZpbmVkIGludGVybmFsbHkuICBUeXBlIGBoZWxwJyB0byBzZWUgdGhpcyBsaXN0LgpUeXBlIGBoZWxwIG5hbWUnIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGZ1bmN0aW9uIGBuYW1lJy4KVXNlIGBpbmZvIGJhc2gnIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIHNoZWxsIGluIGdlbmVyYWwuClVzZSBgbWFuIC1rJyBvciBgaW5mbycgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBjb21tYW5kcyBub3QgaW4gdGhpcyBsaXN0LgoKQSBzdGFyICgqKSBuZXh0IHRvIGEgbmFtZSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGlzIGRpc2FibGVkLgoKAFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgoAVHJhcCBzaWduYWxzIGFuZCBvdGhlciBldmVudHMuCiAgICAKICAgIERlZmluZXMgYW5kIGFjdGl2YXRlcyBoYW5kbGVycyB0byBiZSBydW4gd2hlbiB0aGUgc2hlbGwgcmVjZWl2ZXMgc2lnbmFscwogICAgb3Igb3RoZXIgY29uZGl0aW9ucy4KICAgIAogICAgQVJHIGlzIGEgY29tbWFuZCB0byBiZSByZWFkIGFuZCBleGVjdXRlZCB3aGVuIHRoZSBzaGVsbCByZWNlaXZlcyB0aGUKICAgIHNpZ25hbChzKSBTSUdOQUxfU1BFQy4gIElmIEFSRyBpcyBhYnNlbnQgKGFuZCBhIHNpbmdsZSBTSUdOQUxfU1BFQwogICAgaXMgc3VwcGxpZWQpIG9yIGAtJywgZWFjaCBzcGVjaWZpZWQgc2lnbmFsIGlzIHJlc2V0IHRvIGl0cyBvcmlnaW5hbAogICAgdmFsdWUuICBJZiBBUkcgaXMgdGhlIG51bGwgc3RyaW5nIGVhY2ggU0lHTkFMX1NQRUMgaXMgaWdub3JlZCBieSB0aGUKICAgIHNoZWxsIGFuZCBieSB0aGUgY29tbWFuZHMgaXQgaW52b2tlcy4KICAgIAogICAgSWYgYSBTSUdOQUxfU1BFQyBpcyBFWElUICgwKSBBUkcgaXMgZXhlY3V0ZWQgb24gZXhpdCBmcm9tIHRoZSBzaGVsbC4gIElmCiAgICBhIFNJR05BTF9TUEVDIGlzIERFQlVHLCBBUkcgaXMgZXhlY3V0ZWQgYmVmb3JlIGV2ZXJ5IHNpbXBsZSBjb21tYW5kLiAgSWYKICAgIGEgU0lHTkFMX1NQRUMgaXMgUkVUVVJOLCBBUkcgaXMgZXhlY3V0ZWQgZWFjaCB0aW1lIGEgc2hlbGwgZnVuY3Rpb24gb3IgYQogICAgc2NyaXB0IHJ1biBieSB0aGUgLiBvciBzb3VyY2UgYnVpbHRpbnMgZmluaXNoZXMgZXhlY3V0aW5nLiAgQSBTSUdOQUxfU1BFQwogICAgb2YgRVJSIG1lYW5zIHRvIGV4ZWN1dGUgQVJHIGVhY2ggdGltZSBhIGNvbW1hbmQncyBmYWlsdXJlIHdvdWxkIGNhdXNlIHRoZQogICAgc2hlbGwgdG8gZXhpdCB3aGVuIHRoZSAtZSBvcHRpb24gaXMgZW5hYmxlZC4KICAgIAogICAgSWYgbm8gYXJndW1lbnRzIGFyZSBzdXBwbGllZCwgdHJhcCBwcmludHMgdGhlIGxpc3Qgb2YgY29tbWFuZHMgYXNzb2NpYXRlZAogICAgd2l0aCBlYWNoIHNpZ25hbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWwJcHJpbnQgYSBsaXN0IG9mIHNpZ25hbCBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBudW1iZXJzCiAgICAgIC1wCWRpc3BsYXkgdGhlIHRyYXAgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggU0lHTkFMX1NQRUMKICAgIAogICAgRWFjaCBTSUdOQUxfU1BFQyBpcyBlaXRoZXIgYSBzaWduYWwgbmFtZSBpbiA8c2lnbmFsLmg+IG9yIGEgc2lnbmFsIG51bWJlci4KICAgIFNpZ25hbCBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSBhbmQgdGhlIFNJRyBwcmVmaXggaXMgb3B0aW9uYWwuICBBCiAgICBzaWduYWwgbWF5IGJlIHNlbnQgdG8gdGhlIHNoZWxsIHdpdGggImtpbGwgLXNpZ25hbCAkJCIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhIFNJR1NQRUMgaXMgaW52YWxpZCBvciBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4AVHlwZSBgJXMgLWMgImhlbHAgc2V0IicgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2hlbGwgb3B0aW9ucy4KAFR5cGUgYCVzIC1jIGhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNoZWxsIGJ1aWx0aW4gY29tbWFuZHMuCgBVbmtub3duIFNpZ25hbCAjAFVua25vd24gU2lnbmFsICMlZABVbmtub3duIGVycm9yAFVua25vd24gc3RhdHVzAFVuc2V0IHZhbHVlcyBhbmQgYXR0cmlidXRlcyBvZiBzaGVsbCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4KICAgIAogICAgRm9yIGVhY2ggTkFNRSwgcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZgl0cmVhdCBlYWNoIE5BTUUgYXMgYSBzaGVsbCBmdW5jdGlvbgogICAgICAtdgl0cmVhdCBlYWNoIE5BTUUgYXMgYSBzaGVsbCB2YXJpYWJsZQogICAgCiAgICBXaXRob3V0IG9wdGlvbnMsIHVuc2V0IGZpcnN0IHRyaWVzIHRvIHVuc2V0IGEgdmFyaWFibGUsIGFuZCBpZiB0aGF0IGZhaWxzLAogICAgdHJpZXMgdG8gdW5zZXQgYSBmdW5jdGlvbi4KICAgIAogICAgU29tZSB2YXJpYWJsZXMgY2Fubm90IGJlIHVuc2V0OyBhbHNvIHNlZSBgcmVhZG9ubHknLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYSBOQU1FIGlzIHJlYWQtb25seS4AVXJnZW50IElPIGNvbmRpdGlvbgBVc2FnZToJJXMgW0dOVSBsb25nIG9wdGlvbl0gW29wdGlvbl0gLi4uCgklcyBbR05VIGxvbmcgb3B0aW9uXSBbb3B0aW9uXSBzY3JpcHQtZmlsZSAuLi4KAFVzZSAiJXMiIHRvIGxlYXZlIHRoZSBzaGVsbC4KAFVzZSB0aGUgYGJhc2hidWcnIGNvbW1hbmQgdG8gcmVwb3J0IGJ1Z3MuCgBVc2VyIHNpZ25hbCAxAFVzZXIgc2lnbmFsIDIAV2FpdCBmb3Igam9iIGNvbXBsZXRpb24gYW5kIHJldHVybiBleGl0IHN0YXR1cy4KICAgIAogICAgV2FpdHMgZm9yIHRoZSBwcm9jZXNzIGlkZW50aWZpZWQgYnkgSUQsIHdoaWNoIG1heSBiZSBhIHByb2Nlc3MgSUQgb3IgYQogICAgam9iIHNwZWNpZmljYXRpb24sIGFuZCByZXBvcnRzIGl0cyB0ZXJtaW5hdGlvbiBzdGF0dXMuICBJZiBJRCBpcyBub3QKICAgIGdpdmVuLCB3YWl0cyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgdGhlIHJldHVybgogICAgc3RhdHVzIGlzIHplcm8uICBJZiBJRCBpcyBhIGEgam9iIHNwZWNpZmljYXRpb24sIHdhaXRzIGZvciBhbGwgcHJvY2Vzc2VzCiAgICBpbiB0aGUgam9iJ3MgcGlwZWxpbmUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIElEOyBmYWlscyBpZiBJRCBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzCiAgICBnaXZlbi4AV2FpdCBmb3IgcHJvY2VzcyBjb21wbGV0aW9uIGFuZCByZXR1cm4gZXhpdCBzdGF0dXMuCiAgICAKICAgIFdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIHByb2Nlc3MgYW5kIHJlcG9ydHMgaXRzIHRlcm1pbmF0aW9uIHN0YXR1cy4gIElmCiAgICBQSUQgaXMgbm90IGdpdmVuLCBhbGwgY3VycmVudGx5IGFjdGl2ZSBjaGlsZCBwcm9jZXNzZXMgYXJlIHdhaXRlZCBmb3IsCiAgICBhbmQgdGhlIHJldHVybiBjb2RlIGlzIHplcm8uICBQSUQgbXVzdCBiZSBhIHByb2Nlc3MgSUQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIElEOyBmYWlscyBpZiBJRCBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzCiAgICBnaXZlbi4AV2luZG93IGNoYW5nZWQAV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3Mgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhIHdyaXRlIGVycm9yIG9jY3Vycy4AV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3Mgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAgIC1lCWVuYWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGJhY2tzbGFzaCBlc2NhcGVzCiAgICAgIC1FCWV4cGxpY2l0bHkgc3VwcHJlc3MgaW50ZXJwcmV0YXRpb24gb2YgYmFja3NsYXNoIGVzY2FwZXMKICAgIAogICAgYGVjaG8nIGludGVycHJldHMgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2gtZXNjYXBlZCBjaGFyYWN0ZXJzOgogICAgICBcYQlhbGVydCAoYmVsbCkKICAgICAgXGIJYmFja3NwYWNlCiAgICAgIFxjCXN1cHByZXNzIGZ1cnRoZXIgb3V0cHV0CiAgICAgIFxlCWVzY2FwZSBjaGFyYWN0ZXIKICAgICAgXGYJZm9ybSBmZWVkCiAgICAgIFxuCW5ldyBsaW5lCiAgICAgIFxyCWNhcnJpYWdlIHJldHVybgogICAgICBcdAlob3Jpem9udGFsIHRhYgogICAgICBcdgl2ZXJ0aWNhbCB0YWIKICAgICAgXFwJYmFja3NsYXNoCiAgICAgIFwwbm5uCXRoZSBjaGFyYWN0ZXIgd2hvc2UgQVNDSUkgY29kZSBpcyBOTk4gKG9jdGFsKS4gIE5OTiBjYW4gYmUKICAgIAkwIHRvIDMgb2N0YWwgZGlnaXRzCiAgICAgIFx4SEgJdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgSEggKGhleGFkZWNpbWFsKS4gIEhICiAgICAJY2FuIGJlIG9uZSBvciB0d28gaGV4IGRpZ2l0cwogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYSB3cml0ZSBlcnJvciBvY2N1cnMuAFlvdSBoYXZlIG1haWwgaW4gJF8AWW91IGhhdmUgbmV3IG1haWwgaW4gJF8AWyBhcmcuLi4gXQBbWyBleHByZXNzaW9uIF1dAGAlYyc6IGJhZCBjb21tYW5kAGAlYyc6IGludmFsaWQgZm9ybWF0IGNoYXJhY3RlcgBgJWMnOiBpbnZhbGlkIHN5bWJvbGljIG1vZGUgY2hhcmFjdGVyAGAlYyc6IGludmFsaWQgc3ltYm9saWMgbW9kZSBvcGVyYXRvcgBgJWMnOiBpbnZhbGlkIHRpbWUgZm9ybWF0IHNwZWNpZmljYXRpb24AYCVzJzogY2Fubm90IHVuYmluZABgJXMnOiBpbnZhbGlkIGFsaWFzIG5hbWUAYCVzJzogaW52YWxpZCBrZXltYXAgbmFtZQBgJXMnOiBtaXNzaW5nIGZvcm1hdCBjaGFyYWN0ZXIAYCVzJzogbm90IGEgcGlkIG9yIHZhbGlkIGpvYiBzcGVjAGAlcyc6IG5vdCBhIHZhbGlkIGlkZW50aWZpZXIAYCVzJzogdW5rbm93biBmdW5jdGlvbiBuYW1lAGApJyBleHBlY3RlZABgKScgZXhwZWN0ZWQsIGZvdW5kICVzAGA6JyBleHBlY3RlZCBmb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgBhZGRfcHJvY2VzczogcGlkICU1bGQgKCVzKSBtYXJrZWQgYXMgc3RpbGwgYWxpdmUAYWRkX3Byb2Nlc3M6IHByb2Nlc3MgJTVsZCAoJXMpIGluIHRoZV9waXBlbGluZQBhbGlhcyBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uIF0AYWxsX2xvY2FsX3ZhcmlhYmxlczogbm8gZnVuY3Rpb24gY29udGV4dCBhdCBjdXJyZW50IHNjb3BlAGFyZ3VtZW50AGFyZ3VtZW50IGV4cGVjdGVkAGFycmF5IHZhcmlhYmxlIHN1cHBvcnQgcmVxdWlyZWQAYXR0ZW1wdGVkIGFzc2lnbm1lbnQgdG8gbm9uLXZhcmlhYmxlAGJhZCBhcnJheSBzdWJzY3JpcHQAYmFkIGNvbW1hbmQgdHlwZQBiYWQgY29ubmVjdG9yAGJhZCBqdW1wAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3NpbmcgImAiIGluICVzAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3NpbmcgYCVzJyBpbiAlcwBiYXNoX2V4ZWN1dGVfdW5peF9jb21tYW5kOiBjYW5ub3QgZmluZCBrZXltYXAgZm9yIGNvbW1hbmQAYmcgW2pvYl9zcGVjIC4uLl0AYmluZCBbLWxwdnNQVlNdIFstbSBrZXltYXBdIFstZiBmaWxlbmFtZV0gWy1xIG5hbWVdIFstdSBuYW1lXSBbLXIga2V5c2VxXSBbLXgga2V5c2VxOnNoZWxsLWNvbW1hbmRdIFtrZXlzZXE6cmVhZGxpbmUtZnVuY3Rpb24gb3IgcmVhZGxpbmUtY29tbWFuZF0AYnJlYWsgW25dAGJ1ZzogYmFkIGV4cGFzc2lnbiB0b2tlbgBidWlsdGluIFtzaGVsbC1idWlsdGluIFthcmcgLi4uXV0AY2FsbGVyIFtleHByXQBjYW4gb25seSBgcmV0dXJuJyBmcm9tIGEgZnVuY3Rpb24gb3Igc291cmNlZCBzY3JpcHQAY2FuIG9ubHkgYmUgdXNlZCBpbiBhIGZ1bmN0aW9uAGNhbm5vdCBhbGxvY2F0ZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGZvciBiYXNoIGlucHV0IGZyb20gZmQgJWQAY2Fubm90IGNyZWF0ZSB0ZW1wIGZpbGUgZm9yIGhlcmUtZG9jdW1lbnQ6ICVzAGNhbm5vdCBkdXBsaWNhdGUgZmQgJWQgdG8gZmQgJWQAY2Fubm90IGR1cGxpY2F0ZSBuYW1lZCBwaXBlICVzIGFzIGZkICVkAGNhbm5vdCBmaW5kICVzIGluIHNoYXJlZCBvYmplY3QgJXM6ICVzAGNhbm5vdCBtYWtlIGNoaWxkIGZvciBjb21tYW5kIHN1YnN0aXR1dGlvbgBjYW5ub3QgbWFrZSBjaGlsZCBmb3IgcHJvY2VzcyBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgcGlwZSBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgcGlwZSBmb3IgcHJvY2VzcyBzdWJzdGl0dXRpb24AY2Fubm90IG9wZW4gbmFtZWQgcGlwZSAlcyBmb3IgcmVhZGluZwBjYW5ub3Qgb3BlbiBuYW1lZCBwaXBlICVzIGZvciB3cml0aW5nAGNhbm5vdCBvcGVuIHNoYXJlZCBvYmplY3QgJXM6ICVzAGNhbm5vdCByZWRpcmVjdCBzdGFuZGFyZCBpbnB1dCBmcm9tIC9kZXYvbnVsbDogJXMAY2Fubm90IHJlc2V0IG5vZGVsYXkgbW9kZSBmb3IgZmQgJWQAY2Fubm90IHNldCBhbmQgdW5zZXQgc2hlbGwgb3B0aW9ucyBzaW11bHRhbmVvdXNseQBjYW5ub3Qgc2V0IHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgKCVkKQBjYW5ub3Qgc2ltdWx0YW5lb3VzbHkgdW5zZXQgYSBmdW5jdGlvbiBhbmQgYSB2YXJpYWJsZQBjYW5ub3Qgc3VzcGVuZABjYW5ub3Qgc3VzcGVuZCBhIGxvZ2luIHNoZWxsAGNhbm5vdCB1c2UgYC1mJyB0byBtYWtlIGZ1bmN0aW9ucwBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgb2YgLWFucncAY2FzZSBXT1JEIGluIFtQQVRURVJOIFt8IFBBVFRFUk5dLi4uKSBDT01NQU5EUyA7O10uLi4gZXNhYwBjZCBbLUx8Wy1QIFstZV1dXSBbZGlyXQBjaGlsZCBzZXRwZ2lkICglbGQgdG8gJWxkKQBjb21tYW5kIFstcFZ2XSBjb21tYW5kIFthcmcgLi4uXQBjb21tYW5kX3N1YnN0aXR1dGU6IGNhbm5vdCBkdXBsaWNhdGUgcGlwZSBhcyBmZCAxAGNvbXBnZW4gWy1hYmNkZWZnamtzdXZdIFstbyBvcHRpb25dICBbLUEgYWN0aW9uXSBbLUcgZ2xvYnBhdF0gWy1XIHdvcmRsaXN0XSAgWy1GIGZ1bmN0aW9uXSBbLUMgY29tbWFuZF0gWy1YIGZpbHRlcnBhdF0gWy1QIHByZWZpeF0gWy1TIHN1ZmZpeF0gW3dvcmRdAGNvbXBsZXRlIFstYWJjZGVmZ2prc3V2XSBbLXByXSBbLURFXSBbLW8gb3B0aW9uXSBbLUEgYWN0aW9uXSBbLUcgZ2xvYnBhdF0gWy1XIHdvcmRsaXN0XSAgWy1GIGZ1bmN0aW9uXSBbLUMgY29tbWFuZF0gWy1YIGZpbHRlcnBhdF0gWy1QIHByZWZpeF0gWy1TIHN1ZmZpeF0gW25hbWUgLi4uXQBjb21wbGV0aW9uOiBmdW5jdGlvbiBgJXMnIG5vdCBmb3VuZABjb21wb3B0IFstb3wrbyBvcHRpb25dIFstREVdIFtuYW1lIC4uLl0AY29uZGl0aW9uYWwgYmluYXJ5IG9wZXJhdG9yIGV4cGVjdGVkAGNvbnRpbnVlIFtuXQBjb3Byb2MgW05BTUVdIGNvbW1hbmQgW3JlZGlyZWN0aW9uc10AY291bGQgbm90IGZpbmQgL3RtcCwgcGxlYXNlIGNyZWF0ZSEAY3ByaW50ZjogYCVjJzogaW52YWxpZCBmb3JtYXQgY2hhcmFjdGVyAGN1cnJlbnQAZGVjbGFyZSBbLWFBZkZnaWxydHV4XSBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uXQBkZWxldGluZyBzdG9wcGVkIGpvYiAlZCB3aXRoIHByb2Nlc3MgZ3JvdXAgJWxkAGRlc2NyaWJlX3BpZDogJWxkOiBubyBzdWNoIHBpZABkaXJlY3Rvcnkgc3RhY2sgZW1wdHkAZGlyZWN0b3J5IHN0YWNrIGluZGV4AGRpcnMgWy1jbHB2XSBbK05dIFstTl0AZGlzb3duIFstaF0gWy1hcl0gW2pvYnNwZWMgLi4uXQBkaXZpc2lvbiBieSAwAGR5bmFtaWMgbG9hZGluZyBub3QgYXZhaWxhYmxlAGVjaG8gWy1uXSBbYXJnIC4uLl0AZWNobyBbLW5lRV0gW2FyZyAuLi5dAGVtcHR5IGFycmF5IHZhcmlhYmxlIG5hbWUAZW5hYmxlIFstYV0gWy1kbnBzXSBbLWYgZmlsZW5hbWVdIFtuYW1lIC4uLl0AZXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBhdHRyaWJ1dGVzOiAlcwBlcnJvciBpbXBvcnRpbmcgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYCVzJwBlcnJvciBzZXR0aW5nIHRlcm1pbmFsIGF0dHJpYnV0ZXM6ICVzAGV2YWwgW2FyZyAuLi5dAGV4ZWMgWy1jbF0gWy1hIG5hbWVdIFtjb21tYW5kIFthcmd1bWVudHMgLi4uXV0gW3JlZGlyZWN0aW9uIC4uLl0AZXhpdCBbbl0AZXhwZWN0ZWQgYCknAGV4cG9uZW50IGxlc3MgdGhhbiAwAGV4cG9ydCBbLWZuXSBbbmFtZVs9dmFsdWVdIC4uLl0gb3IgZXhwb3J0IC1wAGV4cHJlc3Npb24gZXhwZWN0ZWQAZXhwcmVzc2lvbiByZWN1cnNpb24gbGV2ZWwgZXhjZWVkZWQAZmFsc2UAZmMgWy1lIGVuYW1lXSBbLWxucl0gW2ZpcnN0XSBbbGFzdF0gb3IgZmMgLXMgW3BhdD1yZXBdIFtjb21tYW5kXQBmZyBbam9iX3NwZWNdAGZpbGUgZGVzY3JpcHRvciBvdXQgb2YgcmFuZ2UAZmlsZW5hbWUgYXJndW1lbnQgcmVxdWlyZWQAZm9yICgoIGV4cDE7IGV4cDI7IGV4cDMgKSk7IGRvIENPTU1BTkRTOyBkb25lAGZvciBOQU1FIFtpbiBXT1JEUyAuLi4gXSA7IGRvIENPTU1BTkRTOyBkb25lAGZvcmtlZCBwaWQgJWQgYXBwZWFycyBpbiBydW5uaW5nIGpvYiAlZABmcmVlOiBjYWxsZWQgd2l0aCBhbHJlYWR5IGZyZWVkIGJsb2NrIGFyZ3VtZW50AGZyZWU6IGNhbGxlZCB3aXRoIHVuYWxsb2NhdGVkIGJsb2NrIGFyZ3VtZW50AGZyZWU6IHN0YXJ0IGFuZCBlbmQgY2h1bmsgc2l6ZXMgZGlmZmVyAGZyZWU6IHVuZGVyZmxvdyBkZXRlY3RlZDsgbWhfbmJ5dGVzIG91dCBvZiByYW5nZQBmdW5jdGlvbiBuYW1lIHsgQ09NTUFORFMgOyB9IG9yIG5hbWUgKCkgeyBDT01NQU5EUyA7IH0AZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBzaGVsbCB3aWxsIGZvcmNlIGV2YWx1YXRpb24gYXMgYW4gYXJpdGhtZXRpYyBzdWJzdGl0dXRpb24AZ2V0Y3dkOiBjYW5ub3QgYWNjZXNzIHBhcmVudCBkaXJlY3RvcmllcwBnZXRvcHRzIG9wdHN0cmluZyBuYW1lIFthcmddAGhhc2ggWy1scl0gWy1wIHBhdGhuYW1lXSBbLWR0XSBbbmFtZSAuLi5dAGhhc2hpbmcgZGlzYWJsZWQAaGVscCBbLWRtc10gW3BhdHRlcm4gLi4uXQBoZXJlLWRvY3VtZW50IGF0IGxpbmUgJWQgZGVsaW1pdGVkIGJ5IGVuZC1vZi1maWxlICh3YW50ZWQgYCVzJykAaGlzdG9yeSBbLWNdIFstZCBvZmZzZXRdIFtuXSBvciBoaXN0b3J5IC1hbnJ3IFtmaWxlbmFtZV0gb3IgaGlzdG9yeSAtcHMgYXJnIFthcmcuLi5dAGhpc3RvcnkgcG9zaXRpb24AaGlzdG9yeSBzcGVjaWZpY2F0aW9uAGhpdHMJY29tbWFuZAoAaWRlbnRpZmllciBleHBlY3RlZCBhZnRlciBwcmUtaW5jcmVtZW50IG9yIHByZS1kZWNyZW1lbnQAaWYgQ09NTUFORFM7IHRoZW4gQ09NTUFORFM7IFsgZWxpZiBDT01NQU5EUzsgdGhlbiBDT01NQU5EUzsgXS4uLiBbIGVsc2UgQ09NTUFORFM7IF0gZmkAaW5pdGlhbGl6ZV9qb2JfY29udHJvbDogZ2V0cGdycCBmYWlsZWQAaW5pdGlhbGl6ZV9qb2JfY29udHJvbDogbGluZSBkaXNjaXBsaW5lAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IHNldHBnaWQAaW52YWxpZCBhcml0aG1ldGljIGJhc2UAaW52YWxpZCBiYXNlAGludmFsaWQgY2hhcmFjdGVyICVkIGluIGV4cG9ydHN0ciBmb3IgJXMAaW52YWxpZCBoZXggbnVtYmVyAGludmFsaWQgbnVtYmVyAGludmFsaWQgb2N0YWwgbnVtYmVyAGludmFsaWQgc2lnbmFsIG51bWJlcgBqb2IgJWQgc3RhcnRlZCB3aXRob3V0IGpvYiBjb250cm9sAGpvYl9zcGVjIFsmXQBqb2JzIFstbG5wcnNdIFtqb2JzcGVjIC4uLl0gb3Igam9icyAteCBjb21tYW5kIFthcmdzXQBraWxsIFstcyBzaWdzcGVjIHwgLW4gc2lnbnVtIHwgLXNpZ3NwZWNdIHBpZCB8IGpvYnNwZWMgLi4uIG9yIGtpbGwgLWwgW3NpZ3NwZWNdAGxhc3QgY29tbWFuZDogJXMKAGxldCBhcmcgW2FyZyAuLi5dAGxpbWl0AGxpbmUgJWQ6IABsaW5lIGVkaXRpbmcgbm90IGVuYWJsZWQAbG9jYWwgW29wdGlvbl0gbmFtZVs9dmFsdWVdIC4uLgBsb2dvdXQKAGxvZ291dCBbbl0AbG9vcCBjb3VudABtYWtlX2hlcmVfZG9jdW1lbnQ6IGJhZCBpbnN0cnVjdGlvbiB0eXBlICVkAG1ha2VfbG9jYWxfdmFyaWFibGU6IG5vIGZ1bmN0aW9uIGNvbnRleHQgYXQgY3VycmVudCBzY29wZQBtYWtlX3JlZGlyZWN0aW9uOiByZWRpcmVjdGlvbiBpbnN0cnVjdGlvbiBgJWQnIG91dCBvZiByYW5nZQBtYWxsb2M6IGJsb2NrIG9uIGZyZWUgbGlzdCBjbG9iYmVyZWQAbWFsbG9jOiBmYWlsZWQgYXNzZXJ0aW9uOiAlcwoAbWFwZmlsZSBbLW4gY291bnRdIFstTyBvcmlnaW5dIFstcyBjb3VudF0gWy10XSBbLXUgZmRdIFstQyBjYWxsYmFja10gWy1jIHF1YW50dW1dIFthcnJheV0AbWlncmF0ZSBwcm9jZXNzIHRvIGFub3RoZXIgQ1BVAG1pc3NpbmcgYCknAG1pc3NpbmcgYF0nAG1pc3NpbmcgaGV4IGRpZ2l0IGZvciBceABtaXNzaW5nIHVuaWNvZGUgZGlnaXQgZm9yIFwlYwBuZXR3b3JrIG9wZXJhdGlvbnMgbm90IHN1cHBvcnRlZABubyBgPScgaW4gZXhwb3J0c3RyIGZvciAlcwBubyBjbG9zaW5nIGAlYycgaW4gJXMAbm8gY29tbWFuZCBmb3VuZABubyBoZWxwIHRvcGljcyBtYXRjaCBgJXMnLiAgVHJ5IGBoZWxwIGhlbHAnIG9yIGBtYW4gLWsgJXMnIG9yIGBpbmZvICVzJy4Abm8gam9iIGNvbnRyb2wAbm8gam9iIGNvbnRyb2wgaW4gdGhpcyBzaGVsbABubyBtYXRjaDogJXMAbm8gb3RoZXIgZGlyZWN0b3J5AG5vIG90aGVyIG9wdGlvbnMgYWxsb3dlZCB3aXRoIGAteCcAbm90IGN1cnJlbnRseSBleGVjdXRpbmcgY29tcGxldGlvbiBmdW5jdGlvbgBub3QgbG9naW4gc2hlbGw6IHVzZSBgZXhpdCcAb2N0YWwgbnVtYmVyAG9ubHkgbWVhbmluZ2Z1bCBpbiBhIGBmb3InLCBgd2hpbGUnLCBvciBgdW50aWwnIGxvb3AAcGlwZSBlcnJvcgBwb3Bfc2NvcGU6IGhlYWQgb2Ygc2hlbGxfdmFyaWFibGVzIG5vdCBhIHRlbXBvcmFyeSBlbnZpcm9ubWVudCBzY29wZQBwb3BfdmFyX2NvbnRleHQ6IGhlYWQgb2Ygc2hlbGxfdmFyaWFibGVzIG5vdCBhIGZ1bmN0aW9uIGNvbnRleHQAcG9wX3Zhcl9jb250ZXh0OiBubyBnbG9iYWxfdmFyaWFibGVzIGNvbnRleHQAcG9wZCBbLW5dIFsrTiB8IC1OXQBwb3dlciBmYWlsdXJlIGltbWluZW50AHByaW50X2NvbW1hbmQ6IGJhZCBjb25uZWN0b3IgYCVkJwBwcmludGYgWy12IHZhcl0gZm9ybWF0IFthcmd1bWVudHNdAHByb2djb21wX2luc2VydDogJXM6IE5VTEwgQ09NUFNQRUMAcHJvZ3JhbW1pbmcgZXJyb3IAcHVzaGQgWy1uXSBbK04gfCAtTiB8IGRpcl0AcHdkIFstTFBdAHJlYWQgWy1lcnNdIFstYSBhcnJheV0gWy1kIGRlbGltXSBbLWkgdGV4dF0gWy1uIG5jaGFyc10gWy1OIG5jaGFyc10gWy1wIHByb21wdF0gWy10IHRpbWVvdXRdIFstdSBmZF0gW25hbWUgLi4uXQByZWFkIGVycm9yOiAlZDogJXMAcmVhZGFycmF5IFstbiBjb3VudF0gWy1PIG9yaWdpbl0gWy1zIGNvdW50XSBbLXRdIFstdSBmZF0gWy1DIGNhbGxiYWNrXSBbLWMgcXVhbnR1bV0gW2FycmF5XQByZWFkb25seSBbLWFBZl0gW25hbWVbPXZhbHVlXSAuLi5dIG9yIHJlYWRvbmx5IC1wAHJlYWxsb2M6IGNhbGxlZCB3aXRoIHVuYWxsb2NhdGVkIGJsb2NrIGFyZ3VtZW50AHJlYWxsb2M6IHN0YXJ0IGFuZCBlbmQgY2h1bmsgc2l6ZXMgZGlmZmVyAHJlYWxsb2M6IHVuZGVyZmxvdyBkZXRlY3RlZDsgbWhfbmJ5dGVzIG91dCBvZiByYW5nZQByZWN1cnNpb24gc3RhY2sgdW5kZXJmbG93AHJlZGlyZWN0aW9uIGVycm9yOiBjYW5ub3QgZHVwbGljYXRlIGZkAHJlZ2lzdGVyX2FsbG9jOiAlcCBhbHJlYWR5IGluIHRhYmxlIGFzIGFsbG9jYXRlZD8KAHJlZ2lzdGVyX2FsbG9jOiBhbGxvYyB0YWJsZSBpcyBmdWxsIHdpdGggRklORF9BTExPQz8KAHJlZ2lzdGVyX2ZyZWU6ICVwIGFscmVhZHkgaW4gdGFibGUgYXMgZnJlZT8KAHJlc3RyaWN0ZWQAcmV0dXJuIFtuXQBydW5fcGVuZGluZ190cmFwczogYmFkIHZhbHVlIGluIHRyYXBfbGlzdFslZF06ICVwAHJ1bl9wZW5kaW5nX3RyYXBzOiBzaWduYWwgaGFuZGxlciBpcyBTSUdfREZMLCByZXNlbmRpbmcgJWQgKCVzKSB0byBteXNlbGYAc2F2ZV9iYXNoX2lucHV0OiBidWZmZXIgYWxyZWFkeSBleGlzdHMgZm9yIG5ldyBmZCAlZABzZWxlY3QgTkFNRSBbaW4gV09SRFMgLi4uIDtdIGRvIENPTU1BTkRTOyBkb25lAHNldCBbLWFiZWZoa21ucHR1dnhCQ0hQXSBbLW8gb3B0aW9uLW5hbWVdIFstLV0gW2FyZyAuLi5dAHNldGxvY2FsZTogJXM6IGNhbm5vdCBjaGFuZ2UgbG9jYWxlICglcykAc2V0bG9jYWxlOiAlczogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKTogJXMAc2V0bG9jYWxlOiBMQ19BTEw6IGNhbm5vdCBjaGFuZ2UgbG9jYWxlICglcykAc2V0bG9jYWxlOiBMQ19BTEw6IGNhbm5vdCBjaGFuZ2UgbG9jYWxlICglcyk6ICVzAHNoZWxsIGxldmVsICglZCkgdG9vIGhpZ2gsIHJlc2V0dGluZyB0byAxAHNoaWZ0IFtuXQBzaGlmdCBjb3VudABzaG9wdCBbLXBxc3VdIFstb10gW29wdG5hbWUgLi4uXQBzaWdwcm9jbWFzazogJWQ6IGludmFsaWQgb3BlcmF0aW9uAHNvdXJjZSBmaWxlbmFtZSBbYXJndW1lbnRzXQBzdGFydF9waXBlbGluZTogcGdycCBwaXBlAHN1c3BlbmQgWy1mXQBzeW50YXggZXJyb3IAc3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb246IHVuZXhwZWN0ZWQgdG9rZW4gYCVzJwBzeW50YXggZXJyb3IgaW4gZXhwcmVzc2lvbgBzeW50YXggZXJyb3IgbmVhciBgJXMnAHN5bnRheCBlcnJvciBuZWFyIHVuZXhwZWN0ZWQgdG9rZW4gYCVzJwBzeW50YXggZXJyb3I6IGAoKCVzKSknAHN5bnRheCBlcnJvcjogYDsnIHVuZXhwZWN0ZWQAc3ludGF4IGVycm9yOiBhcml0aG1ldGljIGV4cHJlc3Npb24gcmVxdWlyZWQAc3ludGF4IGVycm9yOiBpbnZhbGlkIGFyaXRobWV0aWMgb3BlcmF0b3IAc3ludGF4IGVycm9yOiBvcGVyYW5kIGV4cGVjdGVkAHN5bnRheCBlcnJvcjogdW5leHBlY3RlZCBlbmQgb2YgZmlsZQBzeXN0ZW0gY3Jhc2ggaW1taW5lbnQAdGVzdCBbZXhwcl0AdGltZSBbLXBdIHBpcGVsaW5lAHRpbWVzAHRvbyBtYW55IGFyZ3VtZW50cwB0cmFwIFstbHBdIFtbYXJnXSBzaWduYWxfc3BlYyAuLi5dAHRyYXBfaGFuZGxlcjogYmFkIHNpZ25hbCAlZAB0cnVlAHR5cGUgWy1hZnB0UF0gbmFtZSBbbmFtZSAuLi5dAHR5cGVzZXQgWy1hQWZGZ2lscnR1eF0gWy1wXSBuYW1lWz12YWx1ZV0gLi4uAHVsaW1pdCBbLVNIYWNkZWZpbG1ucHFyc3R1dnhdIFtsaW1pdF0AdW1hc2sgWy1wXSBbLVNdIFttb2RlXQB1bmFsaWFzIFstYV0gbmFtZSBbbmFtZSAuLi5dAHVuZXhwZWN0ZWQgRU9GIHdoaWxlIGxvb2tpbmcgZm9yIGBdXScAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcgYCVjJwB1bmV4cGVjdGVkIEVPRiB3aGlsZSBsb29raW5nIGZvciBtYXRjaGluZyBgKScAdW5leHBlY3RlZCBhcmd1bWVudCBgJXMnIHRvIGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIGFyZ3VtZW50IGAlcycgdG8gY29uZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCB1bmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIHRva2VuICVkIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJWMnIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJXMnIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJXMnLCBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAdW5leHBlY3RlZCB0b2tlbiBgJXMnLCBleHBlY3RlZCBgKScAdW5rbm93bgB1bmtub3duIGNvbW1hbmQgZXJyb3IAdW5zZXQgWy1mXSBbLXZdIFtuYW1lIC4uLl0AdW50aWwgQ09NTUFORFM7IGRvIENPTU1BTkRTOyBkb25lAHZhbHVlIHRvbyBncmVhdCBmb3IgYmFzZQB2YXJpYWJsZXMgLSBOYW1lcyBhbmQgbWVhbmluZ3Mgb2Ygc29tZSBzaGVsbCB2YXJpYWJsZXMAd2FpdCBbaWRdAHdhaXQgW3BpZF0Ad2FpdDogcGlkICVsZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNoZWxsAHdhaXRfZm9yOiBObyByZWNvcmQgb2YgcHJvY2VzcyAlbGQAd2FpdF9mb3Jfam9iOiBqb2IgJWQgaXMgc3RvcHBlZAB3YWl0Y2hsZDogdHVybmluZyBvbiBXTk9IQU5HIHRvIGF2b2lkIGluZGVmaW5pdGUgYmxvY2sAd2FybmluZzogAHdhcm5pbmc6ICVzOiAlcwB3YXJuaW5nOiAtQyBvcHRpb24gbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QAd2FybmluZzogLUYgb3B0aW9uIG1heSBub3Qgd29yayBhcyB5b3UgZXhwZWN0AHdoaWxlIENPTU1BTkRTOyBkbyBDT01NQU5EUzsgZG9uZQB3cml0ZSBlcnJvcjogJXMAeHRyYWNlIGZkICglZCkgIT0gZmlsZW5vIHh0cmFjZSBmcCAoJWQpAHh0cmFjZV9zZXQ6ICVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgB4dHJhY2Vfc2V0OiBOVUxMIGZpbGUgcG9pbnRlcgB7IENPTU1BTkRTIDsgfQBQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBiYXNoIDQuMi1yZWxlYXNlClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDEtMjggMjI6MDktMDUwMApQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTAxLTI4IDIyOjA5LTA1MDAKTGFzdC1UcmFuc2xhdG9yOiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZApMYW5ndWFnZS1UZWFtOiBub25lCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0ClBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpOwoAB3RpbWVkIG91dCB3YWl0aW5nIGZvciBpbnB1dDogYXV0by1sb2dvdXQKAAktJXMgb3IgLW8gb3B0aW9uCgAJLWlyc0Qgb3IgLWMgY29tbWFuZCBvciAtTyBzaG9wdF9vcHRpb24JCShpbnZvY2F0aW9uIG9ubHkpCgANCm1hbGxvYzogJXM6JWQ6IGFzc2VydGlvbiBib3RjaGVkDQoAICAod2Q6ICVzKQAgKGNvcmUgZHVtcGVkKQAgbGluZSAAJCVzOiBjYW5ub3QgYXNzaWduIGluIHRoaXMgd2F5ACVjJWM6IGludmFsaWQgb3B0aW9uACVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjogJXMAJXMgY2FuIGJlIGludm9rZWQgdmlhIAAlcyBoYXMgbnVsbCBleHBvcnRzdHIAJXMgaXMgJXMKACVzIGlzIGEgZnVuY3Rpb24KACVzIGlzIGEgc2hlbGwgYnVpbHRpbgoAJXMgaXMgYSBzaGVsbCBrZXl3b3JkCgAlcyBpcyBhbGlhc2VkIHRvIOKAmCVz4oCZCgAlcyBpcyBoYXNoZWQgKCVzKQoAJXMgaXMgbm90IGJvdW5kIHRvIGFueSBrZXlzLgoAJXMgb3V0IG9mIHJhbmdlACVzJXMlczogJXMgKGVycm9yIHRva2VuIGlzIOKAnCVz4oCdKQAlczogJXMAJXM6ICVzIG91dCBvZiByYW5nZQAlczogJXM6IGJhZCBpbnRlcnByZXRlcgAlczogJXM6IGNhbm5vdCBvcGVuIGFzIEZJTEUAJXM6ICVzOiBpbnZhbGlkIHZhbHVlIGZvciB0cmFjZSBmaWxlIGRlc2NyaXB0b3IAJXM6ICVzOiBtdXN0IHVzZSBzdWJzY3JpcHQgd2hlbiBhc3NpZ25pbmcgYXNzb2NpYXRpdmUgYXJyYXkAJXM6ICVzOiVkOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzACVzOiAlczolZDogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyAoJWx1IGJ5dGVzIGFsbG9jYXRlZCkAJXM6IGFtYmlndW91cyBqb2Igc3BlYwAlczogYW1iaWd1b3VzIHJlZGlyZWN0ACVzOiBhcmd1bWVudHMgbXVzdCBiZSBwcm9jZXNzIG9yIGpvYiBJRHMAJXM6IGJhZCBuZXR3b3JrIHBhdGggc3BlY2lmaWNhdGlvbgAlczogYmFkIHN1YnN0aXR1dGlvbgAlczogYmluYXJ5IG9wZXJhdG9yIGV4cGVjdGVkACVzOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzACVzOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzICglbHUgYnl0ZXMgYWxsb2NhdGVkKQAlczogY2Fubm90IGFzc2lnbiBmZCB0byB2YXJpYWJsZQAlczogY2Fubm90IGFzc2lnbiBsaXN0IHRvIGFycmF5IG1lbWJlcgAlczogY2Fubm90IGFzc2lnbiB0byBub24tbnVtZXJpYyBpbmRleAAlczogY2Fubm90IGNvbnZlcnQgYXNzb2NpYXRpdmUgdG8gaW5kZXhlZCBhcnJheQAlczogY2Fubm90IGNvbnZlcnQgaW5kZXhlZCB0byBhc3NvY2lhdGl2ZSBhcnJheQAlczogY2Fubm90IGNyZWF0ZTogJXMAJXM6IGNhbm5vdCBkZWxldGU6ICVzACVzOiBjYW5ub3QgZGVzdHJveSBhcnJheSB2YXJpYWJsZXMgaW4gdGhpcyB3YXkAJXM6IGNhbm5vdCBleGVjdXRlIGJpbmFyeSBmaWxlACVzOiBjYW5ub3QgZXhlY3V0ZTogJXMAJXM6IGNhbm5vdCBnZXQgbGltaXQ6ICVzACVzOiBjYW5ub3QgbW9kaWZ5IGxpbWl0OiAlcwAlczogY2Fubm90IG9wZW4gdGVtcCBmaWxlOiAlcwAlczogY2Fubm90IG9wZW46ICVzACVzOiBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUAJXM6IGNhbm5vdCByZWFkOiAlcwAlczogY2Fubm90IHVuc2V0ACVzOiBjYW5ub3QgdW5zZXQ6IHJlYWRvbmx5ICVzACVzOiBjb21tYW5kIG5vdCBmb3VuZAAlczogZXJyb3IgcmV0cmlldmluZyBjdXJyZW50IGRpcmVjdG9yeTogJXM6ICVzCgAlczogZXhwcmVzc2lvbiBlcnJvcgoAJXM6IGZpbGUgaXMgdG9vIGxhcmdlACVzOiBmaWxlIG5vdCBmb3VuZAAlczogZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCDigJgi4oCZACVzOiBoYXNoIHRhYmxlIGVtcHR5CgAlczogaGlzdG9yeSBleHBhbnNpb24gZmFpbGVkACVzOiBob3N0IHVua25vd24AJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjCgAlczogaW5saWIgZmFpbGVkACVzOiBpbnRlZ2VyIGV4cHJlc3Npb24gZXhwZWN0ZWQAJXM6IGludmFsaWQgYWN0aW9uIG5hbWUAJXM6IGludmFsaWQgYXJyYXkgb3JpZ2luACVzOiBpbnZhbGlkIGFzc29jaWF0aXZlIGFycmF5IGtleQAlczogaW52YWxpZCBjYWxsYmFjayBxdWFudHVtACVzOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIGxpbWl0IGFyZ3VtZW50ACVzOiBpbnZhbGlkIGxpbmUgY291bnQAJXM6IGludmFsaWQgb3B0aW9uACVzOiBpbnZhbGlkIG9wdGlvbiBuYW1lACVzOiBpbnZhbGlkIHNlcnZpY2UAJXM6IGludmFsaWQgc2hlbGwgb3B0aW9uIG5hbWUAJXM6IGludmFsaWQgc2lnbmFsIHNwZWNpZmljYXRpb24AJXM6IGludmFsaWQgdGltZW91dCBzcGVjaWZpY2F0aW9uACVzOiBpcyBhIGRpcmVjdG9yeQAlczogam9iICVkIGFscmVhZHkgaW4gYmFja2dyb3VuZAAlczogam9iIGhhcyB0ZXJtaW5hdGVkACVzOiBsaW5lICVkOiAAJXM6IG1pc3NpbmcgY29sb24gc2VwYXJhdG9yACVzOiBubyBjb21wbGV0aW9uIHNwZWNpZmljYXRpb24AJXM6IG5vIGpvYiBjb250cm9sACVzOiBubyBzdWNoIGpvYgAlczogbm90IGEgZnVuY3Rpb24AJXM6IG5vdCBhIHJlZ3VsYXIgZmlsZQAlczogbm90IGEgc2hlbGwgYnVpbHRpbgAlczogbm90IGFuIGFycmF5IHZhcmlhYmxlACVzOiBub3QgYW4gaW5kZXhlZCBhcnJheQAlczogbm90IGR5bmFtaWNhbGx5IGxvYWRlZAAlczogbm90IGZvdW5kACVzOiBudW1lcmljIGFyZ3VtZW50IHJlcXVpcmVkACVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQAJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlYwoAJXM6IHBhcmFtZXRlciBudWxsIG9yIG5vdCBzZXQAJXM6IHJlYWRvbmx5IGZ1bmN0aW9uACVzOiByZWFkb25seSB2YXJpYWJsZQAlczogcmVzdHJpY3RlZAAlczogcmVzdHJpY3RlZDogY2Fubm90IHJlZGlyZWN0IG91dHB1dAAlczogcmVzdHJpY3RlZDogY2Fubm90IHNwZWNpZnkg4oCYL+KAmSBpbiBjb21tYW5kIG5hbWVzACVzOiBzdWJzdHJpbmcgZXhwcmVzc2lvbiA8IDAAJXM6IHVuYXJ5IG9wZXJhdG9yIGV4cGVjdGVkACVzOiB1bmJvdW5kIHZhcmlhYmxlACVzOiB1c2FnZTogACgoIGV4cHJlc3Npb24gKSkAKGNvcmUgZHVtcGVkKSAAKHdkIG5vdzogJXMpCgAuIGZpbGVuYW1lIFthcmd1bWVudHNdAC9kZXYvKHRjcHx1ZHApL2hvc3QvcG9ydCBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgbmV0d29ya2luZwAvdG1wIG11c3QgYmUgYSB2YWxpZCBkaXJlY3RvcnkgbmFtZQA6ADxubyBjdXJyZW50IGRpcmVjdG9yeT4AQUJPUlQgaW5zdHJ1Y3Rpb24AQWJvcnRpbmcuLi4AQWRkIGRpcmVjdG9yaWVzIHRvIHN0YWNrLgogICAgCiAgICBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJZGlyZWN0b3JpZXMgdG8gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgLU4JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSDigJhkaXJz4oCZLCBzdGFydGluZyB3aXRoCiAgICAJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICBkaXIJQWRkcyBESVIgdG8gdGhlIGRpcmVjdG9yeSBzdGFjayBhdCB0aGUgdG9wLCBtYWtpbmcgaXQgdGhlCiAgICAJbmV3IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICAKICAgIFRoZSDigJhkaXJz4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgYXJndW1lbnQgaXMgc3VwcGxpZWQgb3IgdGhlIGRpcmVjdG9yeQogICAgY2hhbmdlIGZhaWxzLgBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJZGlyZWN0b3JpZXMgdG8gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgLU4JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSDigJhkaXJz4oCZLCBzdGFydGluZyB3aXRoCiAgICAJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICBkaXIJQWRkcyBESVIgdG8gdGhlIGRpcmVjdG9yeSBzdGFjayBhdCB0aGUgdG9wLCBtYWtpbmcgaXQgdGhlCiAgICAJbmV3IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICAKICAgIFRoZSDigJhkaXJz4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AQWxhcm0gKHByb2ZpbGUpAEFsYXJtICh2aXJ0dWFsKQBBbGFybSBjbG9jawBBcml0aG1ldGljIGZvciBsb29wLgogICAgCiAgICBFcXVpdmFsZW50IHRvCiAgICAJKCggRVhQMSApKQogICAgCXdoaWxlICgoIEVYUDIgKSk7IGRvCiAgICAJCUNPTU1BTkRTCiAgICAJCSgoIEVYUDMgKSkKICAgIAlkb25lCiAgICBFWFAxLCBFWFAyLCBhbmQgRVhQMyBhcmUgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4gIElmIGFueSBleHByZXNzaW9uIGlzCiAgICBvbWl0dGVkLCBpdCBiZWhhdmVzIGFzIGlmIGl0IGV2YWx1YXRlcyB0byAxLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBCUFQgdHJhY2UvdHJhcABCYWQgc3lzdGVtIGNhbGwAQm9ndXMgc2lnbmFsAEJyb2tlbiBwaXBlAEJ1cyBlcnJvcgBDUFUgbGltaXQAQ2hhbmdlIHRoZSBzaGVsbCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBESVIuICBUaGUgZGVmYXVsdCBESVIgaXMgdGhlIHZhbHVlIG9mIHRoZQogICAgSE9NRSBzaGVsbCB2YXJpYWJsZS4KICAgIAogICAgVGhlIHZhcmlhYmxlIENEUEFUSCBkZWZpbmVzIHRoZSBzZWFyY2ggcGF0aCBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCiAgICBESVIuICBBbHRlcm5hdGl2ZSBkaXJlY3RvcnkgbmFtZXMgaW4gQ0RQQVRIIGFyZSBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoOikuCiAgICBBIG51bGwgZGlyZWN0b3J5IG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgSWYgRElSIGJlZ2lucwogICAgd2l0aCBhIHNsYXNoICgvKSwgdGhlbiBDRFBBVEggaXMgbm90IHVzZWQuCiAgICAKICAgIElmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGZvdW5kLCBhbmQgdGhlIHNoZWxsIG9wdGlvbiDigJhjZGFibGVfdmFyc+KAmSBpcyBzZXQsCiAgICB0aGUgd29yZCBpcyBhc3N1bWVkIHRvIGJlICBhIHZhcmlhYmxlIG5hbWUuICBJZiB0aGF0IHZhcmlhYmxlIGhhcyBhIHZhbHVlLAogICAgaXRzIHZhbHVlIGlzIHVzZWQgZm9yIERJUi4KICAgIAogICAgT3B0aW9uczoKICAgICAgICAtTAlmb3JjZSBzeW1ib2xpYyBsaW5rcyB0byBiZSBmb2xsb3dlZAogICAgICAgIC1QCXVzZSB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRob3V0IGZvbGxvd2luZyBzeW1ib2xpYwogICAgCWxpbmtzCiAgICAgICAgLWUJaWYgdGhlIC1QIG9wdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICAJY2Fubm90IGJlIGRldGVybWluZWQgc3VjY2Vzc2Z1bGx5LCBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMKICAgIAogICAgVGhlIGRlZmF1bHQgaXMgdG8gZm9sbG93IHN5bWJvbGljIGxpbmtzLCBhcyBpZiDigJgtTOKAmSB3ZXJlIHNwZWNpZmllZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDAgaWYgdGhlIGRpcmVjdG9yeSBpcyBjaGFuZ2VkLCBhbmQgaWYgJFBXRCBpcyBzZXQgc3VjY2Vzc2Z1bGx5IHdoZW4KICAgIC1QIGlzIHVzZWQ7IG5vbi16ZXJvIG90aGVyd2lzZS4AQ2hpbGQgZGVhdGggb3Igc3RvcABDb21tb24gc2hlbGwgdmFyaWFibGUgbmFtZXMgYW5kIHVzYWdlLgogICAgCiAgICBCQVNIX1ZFUlNJT04JVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBCYXNoLgogICAgQ0RQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoCiAgICAJCWZvciBkaXJlY3RvcmllcyBnaXZlbiBhcyBhcmd1bWVudHMgdG8g4oCYY2TigJkuCiAgICBHTE9CSUdOT1JFCUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgZGVzY3JpYmluZyBmaWxlbmFtZXMgdG8KICAgIAkJYmUgaWdub3JlZCBieSBwYXRobmFtZSBleHBhbnNpb24uCiAgICBISVNURklMRQlUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB5b3VyIGNvbW1hbmQgaGlzdG9yeSBpcyBzdG9yZWQuCiAgICBISVNURklMRVNJWkUJVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRoaXMgZmlsZSBjYW4gY29udGFpbi4KICAgIEhJU1RTSVpFCVRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGxpbmVzIHRoYXQgYSBydW5uaW5nCiAgICAJCXNoZWxsIGNhbiBhY2Nlc3MuCiAgICBIT01FCVRoZSBjb21wbGV0ZSBwYXRobmFtZSB0byB5b3VyIGxvZ2luIGRpcmVjdG9yeS4KICAgIEhPU1ROQU1FCVRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGhvc3QuCiAgICBIT1NUVFlQRQlUaGUgdHlwZSBvZiBDUFUgdGhpcyB2ZXJzaW9uIG9mIEJhc2ggaXMgcnVubmluZyB1bmRlci4KICAgIElHTk9SRUVPRglDb250cm9scyB0aGUgYWN0aW9uIG9mIHRoZSBzaGVsbCBvbiByZWNlaXB0IG9mIGFuIEVPRgogICAgCQljaGFyYWN0ZXIgYXMgdGhlIHNvbGUgaW5wdXQuICBJZiBzZXQsIHRoZW4gdGhlIHZhbHVlCiAgICAJCW9mIGl0IGlzIHRoZSBudW1iZXIgb2YgRU9GIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgc2VlbgogICAgCQlpbiBhIHJvdyBvbiBhbiBlbXB0eSBsaW5lIGJlZm9yZSB0aGUgc2hlbGwgd2lsbCBleGl0CiAgICAJCShkZWZhdWx0IDEwKS4gIFdoZW4gdW5zZXQsIEVPRiBzaWduaWZpZXMgdGhlIGVuZCBvZiBpbnB1dC4KICAgIE1BQ0hUWVBFCUEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3lzdGVtIEJhc2ggaXMgcnVubmluZyBvbi4KICAgIE1BSUxDSEVDSwlIb3cgb2Z0ZW4sIGluIHNlY29uZHMsIEJhc2ggY2hlY2tzIGZvciBuZXcgbWFpbC4KICAgIE1BSUxQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZW5hbWVzIHdoaWNoIEJhc2ggY2hlY2tzCiAgICAJCWZvciBuZXcgbWFpbC4KICAgIE9TVFlQRQlUaGUgdmVyc2lvbiBvZiBVbml4IHRoaXMgdmVyc2lvbiBvZiBCYXNoIGlzIHJ1bm5pbmcgb24uCiAgICBQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHdoZW4KICAgIAkJbG9va2luZyBmb3IgY29tbWFuZHMuCiAgICBQUk9NUFRfQ09NTUFORAlBIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBwcmludGluZyBvZiBlYWNoCiAgICAJCXByaW1hcnkgcHJvbXB0LgogICAgUFMxCQlUaGUgcHJpbWFyeSBwcm9tcHQgc3RyaW5nLgogICAgUFMyCQlUaGUgc2Vjb25kYXJ5IHByb21wdCBzdHJpbmcuCiAgICBQV0QJCVRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgIFNIRUxMT1BUUwlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGVuYWJsZWQgc2hlbGwgb3B0aW9ucy4KICAgIFRFUk0JVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVybWluYWwgdHlwZS4KICAgIFRJTUVGT1JNQVQJVGhlIG91dHB1dCBmb3JtYXQgZm9yIHRpbWluZyBzdGF0aXN0aWNzIGRpc3BsYXllZCBieSB0aGUKICAgIAkJ4oCYdGltZeKAmSByZXNlcnZlZCB3b3JkLgogICAgYXV0b19yZXN1bWUJTm9uLW51bGwgbWVhbnMgYSBjb21tYW5kIHdvcmQgYXBwZWFyaW5nIG9uIGEgbGluZSBieQogICAgCQlpdHNlbGYgaXMgZmlyc3QgbG9va2VkIGZvciBpbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkKICAgIAkJc3RvcHBlZCBqb2JzLiAgSWYgZm91bmQgdGhlcmUsIHRoYXQgam9iIGlzIGZvcmVncm91bmRlZC4KICAgIAkJQSB2YWx1ZSBvZiDigJhleGFjdOKAmSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIHdvcmQgbXVzdAogICAgCQlleGFjdGx5IG1hdGNoIGEgY29tbWFuZCBpbiB0aGUgbGlzdCBvZiBzdG9wcGVkIGpvYnMuICBBCiAgICAJCXZhbHVlIG9mIOKAmHN1YnN0cmluZ+KAmSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIHdvcmQgbXVzdAogICAgCQltYXRjaCBhIHN1YnN0cmluZyBvZiB0aGUgam9iLiAgQW55IG90aGVyIHZhbHVlIG1lYW5zIHRoYXQKICAgIAkJdGhlIGNvbW1hbmQgbXVzdCBiZSBhIHByZWZpeCBvZiBhIHN0b3BwZWQgam9iLgogICAgaGlzdGNoYXJzCUNoYXJhY3RlcnMgY29udHJvbGxpbmcgaGlzdG9yeSBleHBhbnNpb24gYW5kIHF1aWNrCiAgICAJCXN1YnN0aXR1dGlvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgdGhlIGhpc3RvcnkKICAgIAkJc3Vic3RpdHV0aW9uIGNoYXJhY3RlciwgdXN1YWxseSDigJgh4oCZLiAgVGhlIHNlY29uZCBpcwogICAgCQl0aGUg4oCYcXVpY2sgc3Vic3RpdHV0aW9u4oCZIGNoYXJhY3RlciwgdXN1YWxseSDigJhe4oCZLiAgVGhlCiAgICAJCXRoaXJkIGlzIHRoZSDigJhoaXN0b3J5IGNvbW1lbnTigJkgY2hhcmFjdGVyLCB1c3VhbGx5IOKAmCPigJkuCiAgICBISVNUSUdOT1JFCUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgdXNlZCB0byBkZWNpZGUgd2hpY2gKICAgIAkJY29tbWFuZHMgc2hvdWxkIGJlIHNhdmVkIG9uIHRoZSBoaXN0b3J5IGxpc3QuCgBDb250aW51ZQBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuAENyZWF0ZSBhIGNvcHJvY2VzcyBuYW1lZCBOQU1FLgogICAgCiAgICBFeGVjdXRlIENPTU1BTkQgYXN5bmNocm9ub3VzbHksIHdpdGggdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQKICAgIGlucHV0IG9mIHRoZSBjb21tYW5kIGNvbm5lY3RlZCB2aWEgYSBwaXBlIHRvIGZpbGUgZGVzY3JpcHRvcnMgYXNzaWduZWQKICAgIHRvIGluZGljZXMgMCBhbmQgMSBvZiBhbiBhcnJheSB2YXJpYWJsZSBOQU1FIGluIHRoZSBleGVjdXRpbmcgc2hlbGwuCiAgICBUaGUgZGVmYXVsdCBOQU1FIGlzIOKAnENPUFJPQ+KAnS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBleGl0IHN0YXR1cyBvZiBDT01NQU5ELgBEZWZpbmUgbG9jYWwgdmFyaWFibGVzLgogICAgCiAgICBDcmVhdGUgYSBsb2NhbCB2YXJpYWJsZSBjYWxsZWQgTkFNRSwgYW5kIGdpdmUgaXQgVkFMVUUuICBPUFRJT04gY2FuCiAgICBiZSBhbnkgb3B0aW9uIGFjY2VwdGVkIGJ5IOKAmGRlY2xhcmXigJkuCiAgICAKICAgIExvY2FsIHZhcmlhYmxlcyBjYW4gb25seSBiZSB1c2VkIHdpdGhpbiBhIGZ1bmN0aW9uOyB0aGV5IGFyZSB2aXNpYmxlCiAgICBvbmx5IHRvIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkIGFuZCBpdHMgY2hpbGRyZW4uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCwgYW4gZXJyb3Igb2NjdXJzLAogICAgb3IgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbi4ARGVmaW5lIG9yIGRpc3BsYXkgYWxpYXNlcy4KICAgIAogICAgV2l0aG91dCBhcmd1bWVudHMsIOKAmGFsaWFz4oCZIHByaW50cyB0aGUgbGlzdCBvZiBhbGlhc2VzIGluIHRoZSByZXVzYWJsZQogICAgZm9ybSDigJhhbGlhcyBOQU1FPVZBTFVF4oCZIG9uIHN0YW5kYXJkIG91dHB1dC4KICAgIAogICAgT3RoZXJ3aXNlLCBhbiBhbGlhcyBpcyBkZWZpbmVkIGZvciBlYWNoIE5BTUUgd2hvc2UgVkFMVUUgaXMgZ2l2ZW4uCiAgICBBIHRyYWlsaW5nIHNwYWNlIGluIFZBTFVFIGNhdXNlcyB0aGUgbmV4dCB3b3JkIHRvIGJlIGNoZWNrZWQgZm9yCiAgICBhbGlhcyBzdWJzdGl0dXRpb24gd2hlbiB0aGUgYWxpYXMgaXMgZXhwYW5kZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1wCVByaW50IGFsbCBkZWZpbmVkIGFsaWFzZXMgaW4gYSByZXVzYWJsZSBmb3JtYXQKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBhbGlhcyByZXR1cm5zIHRydWUgdW5sZXNzIGEgTkFNRSBpcyBzdXBwbGllZCBmb3Igd2hpY2ggbm8gYWxpYXMgaGFzIGJlZW4KICAgIGRlZmluZWQuAERlZmluZSBzaGVsbCBmdW5jdGlvbi4KICAgIAogICAgQ3JlYXRlIGEgc2hlbGwgZnVuY3Rpb24gbmFtZWQgTkFNRS4gIFdoZW4gaW52b2tlZCBhcyBhIHNpbXBsZSBjb21tYW5kLAogICAgTkFNRSBydW5zIENPTU1BTkRzIGluIHRoZSBjYWxsaW5nIHNoZWxsJ3MgY29udGV4dC4gIFdoZW4gTkFNRSBpcyBpbnZva2VkLAogICAgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBhcyAkMS4uLiRuLCBhbmQgdGhlIGZ1bmN0aW9uJ3MKICAgIG5hbWUgaXMgaW4gJEZVTkNOQU1FLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgTkFNRSBpcyByZWFkb25seS4ARGlzcGxheSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgY3VycmVudGx5IHJlbWVtYmVyZWQgZGlyZWN0b3JpZXMuICBEaXJlY3RvcmllcwogICAgZmluZCB0aGVpciB3YXkgb250byB0aGUgbGlzdCB3aXRoIHRoZSDigJhwdXNoZOKAmSBjb21tYW5kOyB5b3UgY2FuIGdldAogICAgYmFjayB1cCB0aHJvdWdoIHRoZSBsaXN0IHdpdGggdGhlIOKAmHBvcGTigJkgY29tbWFuZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWMJY2xlYXIgdGhlIGRpcmVjdG9yeSBzdGFjayBieSBkZWxldGluZyBhbGwgb2YgdGhlIGVsZW1lbnRzCiAgICAgIC1sCWRvIG5vdCBwcmludCB0aWxkZS1wcmVmaXhlZCB2ZXJzaW9ucyBvZiBkaXJlY3RvcmllcyByZWxhdGl2ZQogICAgCXRvIHlvdXIgaG9tZSBkaXJlY3RvcnkKICAgICAgLXAJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZQogICAgICAtdglwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lIHByZWZpeGVkCiAgICAJd2l0aCBpdHMgcG9zaXRpb24gaW4gdGhlIHN0YWNrCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JRGlzcGxheXMgdGhlIE50aCBlbnRyeSBjb3VudGluZyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBsaXN0IHNob3duIGJ5CiAgICAJZGlycyB3aGVuIGludm9rZWQgd2l0aG91dCBvcHRpb25zLCBzdGFydGluZyB3aXRoIHplcm8uCiAgICAKICAgICAgLU4JRGlzcGxheXMgdGhlIE50aCBlbnRyeSBjb3VudGluZyBmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieQogICAgCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGJ1aWx0aW4gY29tbWFuZHMuCiAgICAKICAgIERpc3BsYXlzIGJyaWVmIHN1bW1hcmllcyBvZiBidWlsdGluIGNvbW1hbmRzLiAgSWYgUEFUVEVSTiBpcwogICAgc3BlY2lmaWVkLCBnaXZlcyBkZXRhaWxlZCBoZWxwIG9uIGFsbCBjb21tYW5kcyBtYXRjaGluZyBQQVRURVJOLAogICAgb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIGhlbHAgdG9waWNzIGlzIHByaW50ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1kCW91dHB1dCBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgZWFjaCB0b3BpYwogICAgICAtbQlkaXNwbGF5IHVzYWdlIGluIHBzZXVkby1tYW5wYWdlIGZvcm1hdAogICAgICAtcwlvdXRwdXQgb25seSBhIHNob3J0IHVzYWdlIHN5bm9wc2lzIGZvciBlYWNoIHRvcGljIG1hdGNoaW5nCiAgICAJUEFUVEVSTgogICAgCiAgICBBcmd1bWVudHM6CiAgICAgIFBBVFRFUk4JUGF0dGVybiBzcGVjaWZpeWluZyBhIGhlbHAgdG9waWMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIFBBVFRFUk4gaXMgbm90IGZvdW5kIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGNvbW1hbmQgdHlwZS4KICAgIAogICAgRm9yIGVhY2ggTkFNRSwgaW5kaWNhdGUgaG93IGl0IHdvdWxkIGJlIGludGVycHJldGVkIGlmIHVzZWQgYXMgYQogICAgY29tbWFuZCBuYW1lLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlkaXNwbGF5IGFsbCBsb2NhdGlvbnMgY29udGFpbmluZyBhbiBleGVjdXRhYmxlIG5hbWVkIE5BTUU7CiAgICAJaW5jbHVkZXMgYWxpYXNlcywgYnVpbHRpbnMsIGFuZCBmdW5jdGlvbnMsIGlmIGFuZCBvbmx5IGlmCiAgICAJdGhlIOKAmC1w4oCZIG9wdGlvbiBpcyBub3QgYWxzbyB1c2VkCiAgICAgIC1mCXN1cHByZXNzIHNoZWxsIGZ1bmN0aW9uIGxvb2t1cAogICAgICAtUAlmb3JjZSBhIFBBVEggc2VhcmNoIGZvciBlYWNoIE5BTUUsIGV2ZW4gaWYgaXQgaXMgYW4gYWxpYXMsCiAgICAJYnVpbHRpbiwgb3IgZnVuY3Rpb24sIGFuZCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGZpbGUKICAgIAl0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkCiAgICAgIC1wCXJldHVybnMgZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGZpbGUgdGhhdCB3b3VsZCBiZSBleGVjdXRlZCwKICAgIAlvciBub3RoaW5nIGlmIOKAmHR5cGUgLXQgTkFNReKAmSB3b3VsZCBub3QgcmV0dXJuIOKAmGZpbGXigJkuCiAgICAgIC10CW91dHB1dCBhIHNpbmdsZSB3b3JkIHdoaWNoIGlzIG9uZSBvZiDigJhhbGlhc+KAmSwg4oCYa2V5d29yZOKAmSwKICAgIAnigJhmdW5jdGlvbuKAmSwg4oCYYnVpbHRpbuKAmSwg4oCYZmlsZeKAmSBvciDigJjigJksIGlmIE5BTUUgaXMgYW4gYWxpYXMsIHNoZWxsCiAgICAJcmVzZXJ2ZWQgd29yZCwgc2hlbGwgZnVuY3Rpb24sIHNoZWxsIGJ1aWx0aW4sIGRpc2sgZmlsZSwgb3Igbm90CiAgICAJZm91bmQsIHJlc3BlY3RpdmVseQogICAgCiAgICBBcmd1bWVudHM6CiAgICAgIE5BTUUJQ29tbWFuZCBuYW1lIHRvIGJlIGludGVycHJldGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyBpZiBhbGwgb2YgdGhlIE5BTUVzIGFyZSBmb3VuZDsgZmFpbHMgaWYgYW55IGFyZSBub3QgZm91bmQuAERpc3BsYXkgb3IgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIHRoZSBoaXN0b3J5IGxpc3QuCiAgICAKICAgIGZjIGlzIHVzZWQgdG8gbGlzdCBvciBlZGl0IGFuZCByZS1leGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4KICAgIEZJUlNUIGFuZCBMQVNUIGNhbiBiZSBudW1iZXJzIHNwZWNpZnlpbmcgdGhlIHJhbmdlLCBvciBGSVJTVCBjYW4gYmUgYQogICAgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCBiZWdpbm5pbmcgd2l0aCB0aGF0CiAgICBzdHJpbmcuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1lIEVOQU1FCXNlbGVjdCB3aGljaCBlZGl0b3IgdG8gdXNlLiAgRGVmYXVsdCBpcyBGQ0VESVQsIHRoZW4gRURJVE9SLAogICAgCQl0aGVuIHZpCiAgICAgIC1sIAlsaXN0IGxpbmVzIGluc3RlYWQgb2YgZWRpdGluZwogICAgICAtbglvbWl0IGxpbmUgbnVtYmVycyB3aGVuIGxpc3RpbmcKICAgICAgLXIJcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGxpbmVzIChuZXdlc3QgbGlzdGVkIGZpcnN0KQogICAgCiAgICBXaXRoIHRoZSDigJhmYyAtcyBbcGF0PXJlcCAuLi5dIFtjb21tYW5kXeKAmSBmb3JtYXQsIENPTU1BTkQgaXMKICAgIHJlLWV4ZWN1dGVkIGFmdGVyIHRoZSBzdWJzdGl0dXRpb24gT0xEPU5FVyBpcyBwZXJmb3JtZWQuCiAgICAKICAgIEEgdXNlZnVsIGFsaWFzIHRvIHVzZSB3aXRoIHRoaXMgaXMgcj0nZmMgLXMnLCBzbyB0aGF0IHR5cGluZyDigJhyIGNj4oCZCiAgICBydW5zIHRoZSBsYXN0IGNvbW1hbmQgYmVnaW5uaW5nIHdpdGgg4oCYY2PigJkgYW5kIHR5cGluZyDigJhy4oCZIHJlLWV4ZWN1dGVzCiAgICB0aGUgbGFzdCBjb21tYW5kLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyBvciBzdGF0dXMgb2YgZXhlY3V0ZWQgY29tbWFuZDsgbm9uLXplcm8gaWYgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IG9yIG1hbmlwdWxhdGUgdGhlIGhpc3RvcnkgbGlzdC4KICAgIAogICAgRGlzcGxheSB0aGUgaGlzdG9yeSBsaXN0IHdpdGggbGluZSBudW1iZXJzLCBwcmVmaXhpbmcgZWFjaCBtb2RpZmllZAogICAgZW50cnkgd2l0aCBhIOKAmCrigJkuICBBbiBhcmd1bWVudCBvZiBOIGxpc3RzIG9ubHkgdGhlIGxhc3QgTiBlbnRyaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgaGlzdG9yeSBsaXN0IGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZW50cmllcwogICAgICAtZCBvZmZzZXQJZGVsZXRlIHRoZSBoaXN0b3J5IGVudHJ5IGF0IG9mZnNldCBPRkZTRVQuCiAgICAKICAgICAgLWEJYXBwZW5kIGhpc3RvcnkgbGluZXMgZnJvbSB0aGlzIHNlc3Npb24gdG8gdGhlIGhpc3RvcnkgZmlsZQogICAgICAtbglyZWFkIGFsbCBoaXN0b3J5IGxpbmVzIG5vdCBhbHJlYWR5IHJlYWQgZnJvbSB0aGUgaGlzdG9yeSBmaWxlCiAgICAgIC1yCXJlYWQgdGhlIGhpc3RvcnkgZmlsZSBhbmQgYXBwZW5kIHRoZSBjb250ZW50cyB0byB0aGUgaGlzdG9yeQogICAgCWxpc3QKICAgICAgLXcJd3JpdGUgdGhlIGN1cnJlbnQgaGlzdG9yeSB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAJYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBoaXN0b3J5IGxpc3QKICAgIAogICAgICAtcAlwZXJmb3JtIGhpc3RvcnkgZXhwYW5zaW9uIG9uIGVhY2ggQVJHIGFuZCBkaXNwbGF5IHRoZSByZXN1bHQKICAgIAl3aXRob3V0IHN0b3JpbmcgaXQgaW4gdGhlIGhpc3RvcnkgbGlzdAogICAgICAtcwlhcHBlbmQgdGhlIEFSR3MgdG8gdGhlIGhpc3RvcnkgbGlzdCBhcyBhIHNpbmdsZSBlbnRyeQogICAgCiAgICBJZiBGSUxFTkFNRSBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyB0aGUgaGlzdG9yeSBmaWxlLiAgT3RoZXJ3aXNlLAogICAgaWYgJEhJU1RGSUxFIGhhcyBhIHZhbHVlLCB0aGF0IGlzIHVzZWQsIGVsc2Ugfi8uYmFzaF9oaXN0b3J5LgogICAgCiAgICBJZiB0aGUgJEhJU1RUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHNldCBhbmQgbm90IG51bGwsIGl0cyB2YWx1ZSBpcyB1c2VkCiAgICBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpIHRvIHByaW50IHRoZSB0aW1lIHN0YW1wIGFzc29jaWF0ZWQKICAgIHdpdGggZWFjaCBkaXNwbGF5ZWQgaGlzdG9yeSBlbnRyeS4gIE5vIHRpbWUgc3RhbXBzIGFyZSBwcmludGVkIG90aGVyd2lzZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBzZXQgZmlsZSBtb2RlIG1hc2suCiAgICAKICAgIFNldHMgdGhlIHVzZXIgZmlsZS1jcmVhdGlvbiBtYXNrIHRvIE1PREUuICBJZiBNT0RFIGlzIG9taXR0ZWQsIHByaW50cwogICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2suCiAgICAKICAgIElmIE1PREUgYmVnaW5zIHdpdGggYSBkaWdpdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gb2N0YWwgbnVtYmVyOwogICAgb3RoZXJ3aXNlIGl0IGlzIGEgc3ltYm9saWMgbW9kZSBzdHJpbmcgbGlrZSB0aGF0IGFjY2VwdGVkIGJ5IGNobW9kKDEpLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlpZiBNT0RFIGlzIG9taXR0ZWQsIG91dHB1dCBpbiBhIGZvcm0gdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1TCW1ha2VzIHRoZSBvdXRwdXQgc3ltYm9saWM7IG90aGVyd2lzZSBhbiBvY3RhbCBudW1iZXIgaXMgb3V0cHV0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBNT0RFIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAERpc3BsYXkgcG9zc2libGUgY29tcGxldGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zLgogICAgCiAgICBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gd2l0aGluIGEgc2hlbGwgZnVuY3Rpb24gZ2VuZXJhdGluZyBwb3NzaWJsZQogICAgY29tcGxldGlvbnMuICBJZiB0aGUgb3B0aW9uYWwgV09SRCBhcmd1bWVudCBpcyBzdXBwbGllZCwgbWF0Y2hlcyBhZ2FpbnN0CiAgICBXT1JEIGFyZSBnZW5lcmF0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgcHJvY2VzcyB0aW1lcy4KICAgIAogICAgUHJpbnRzIHRoZSBhY2N1bXVsYXRlZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgZm9yIHRoZSBzaGVsbCBhbmQgYWxsIG9mIGl0cwogICAgY2hpbGQgcHJvY2Vzc2VzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBzdWNjZWVkcy4ARGlzcGxheSBzdGF0dXMgb2Ygam9icy4KICAgIAogICAgTGlzdHMgdGhlIGFjdGl2ZSBqb2JzLiAgSk9CU1BFQyByZXN0cmljdHMgb3V0cHV0IHRvIHRoYXQgam9iLgogICAgV2l0aG91dCBvcHRpb25zLCB0aGUgc3RhdHVzIG9mIGFsbCBhY3RpdmUgam9icyBpcyBkaXNwbGF5ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1sCWxpc3RzIHByb2Nlc3MgSURzIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaW5mb3JtYXRpb24KICAgICAgLW4JbGlzdCBvbmx5IHByb2Nlc3NlcyB0aGF0IGhhdmUgY2hhbmdlZCBzdGF0dXMgc2luY2UgdGhlIGxhc3QKICAgIAlub3RpZmljYXRpb24KICAgICAgLXAJbGlzdHMgcHJvY2VzcyBJRHMgb25seQogICAgICAtcglyZXN0cmljdCBvdXRwdXQgdG8gcnVubmluZyBqb2JzCiAgICAgIC1zCXJlc3RyaWN0IG91dHB1dCB0byBzdG9wcGVkIGpvYnMKICAgIAogICAgSWYgLXggaXMgc3VwcGxpZWQsIENPTU1BTkQgaXMgcnVuIGFmdGVyIGFsbCBqb2Igc3BlY2lmaWNhdGlvbnMgdGhhdAogICAgYXBwZWFyIGluIEFSR1MgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhlIHByb2Nlc3MgSUQgb2YgdGhhdCBqb2IncwogICAgcHJvY2VzcyBncm91cCBsZWFkZXIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhbiBlcnJvciBvY2N1cnMuCiAgICBJZiAteCBpcyB1c2VkLCByZXR1cm5zIHRoZSBleGl0IHN0YXR1cyBvZiBDT01NQU5ELgBEaXNwbGF5IHRoZSBsaXN0IG9mIGN1cnJlbnRseSByZW1lbWJlcmVkIGRpcmVjdG9yaWVzLiAgRGlyZWN0b3JpZXMKICAgIGZpbmQgdGhlaXIgd2F5IG9udG8gdGhlIGxpc3Qgd2l0aCB0aGUg4oCYcHVzaGTigJkgY29tbWFuZDsgeW91IGNhbiBnZXQKICAgIGJhY2sgdXAgdGhyb3VnaCB0aGUgbGlzdCB3aXRoIHRoZSDigJhwb3Bk4oCZIGNvbW1hbmQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1jCWNsZWFyIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYnkgZGVsZXRpbmcgYWxsIG9mIHRoZSBlbGVtZW50cwogICAgICAtbAlkbyBub3QgcHJpbnQgdGlsZGUtcHJlZml4ZWQgdmVyc2lvbnMgb2YgZGlyZWN0b3JpZXMgcmVsYXRpdmUKICAgIAl0byB5b3VyIGhvbWUgZGlyZWN0b3J5CiAgICAgIC1wCXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUKICAgICAgLXYJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZSBwcmVmaXhlZAogICAgCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieQogICAgCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgogICAgCiAgICAgIC1OCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgBEb25lAERvbmUoJWQpAEVNVCBpbnN0cnVjdGlvbgBFbmFibGUgYW5kIGRpc2FibGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEVuYWJsZXMgYW5kIGRpc2FibGVzIGJ1aWx0aW4gc2hlbGwgY29tbWFuZHMuICBEaXNhYmxpbmcgYWxsb3dzIHlvdSB0bwogICAgZXhlY3V0ZSBhIGRpc2sgY29tbWFuZCB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHNoZWxsIGJ1aWx0aW4KICAgIHdpdGhvdXQgdXNpbmcgYSBmdWxsIHBhdGhuYW1lLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlwcmludCBhIGxpc3Qgb2YgYnVpbHRpbnMgc2hvd2luZyB3aGV0aGVyIG9yIG5vdCBlYWNoIGlzIGVuYWJsZWQKICAgICAgLW4JZGlzYWJsZSBlYWNoIE5BTUUgb3IgZGlzcGxheSBhIGxpc3Qgb2YgZGlzYWJsZWQgYnVpbHRpbnMKICAgICAgLXAJcHJpbnQgdGhlIGxpc3Qgb2YgYnVpbHRpbnMgaW4gYSByZXVzYWJsZSBmb3JtYXQKICAgICAgLXMJcHJpbnQgb25seSB0aGUgbmFtZXMgb2YgUG9zaXgg4oCYc3BlY2lhbOKAmSBidWlsdGlucwogICAgCiAgICBPcHRpb25zIGNvbnRyb2xsaW5nIGR5bmFtaWMgbG9hZGluZzoKICAgICAgLWYJTG9hZCBidWlsdGluIE5BTUUgZnJvbSBzaGFyZWQgb2JqZWN0IEZJTEVOQU1FCiAgICAgIC1kCVJlbW92ZSBhIGJ1aWx0aW4gbG9hZGVkIHdpdGggLWYKICAgIAogICAgV2l0aG91dCBvcHRpb25zLCBlYWNoIE5BTUUgaXMgZW5hYmxlZC4KICAgIAogICAgVG8gdXNlIHRoZSDigJh0ZXN04oCZIGZvdW5kIGluICRQQVRIIGluc3RlYWQgb2YgdGhlIHNoZWxsIGJ1aWx0aW4KICAgIHZlcnNpb24sIHR5cGUg4oCYZW5hYmxlIC1uIHRlc3TigJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBOQU1FIGlzIG5vdCBhIHNoZWxsIGJ1aWx0aW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSBFWFBSRVNTSU9OIGlzIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciBhcml0aG1ldGljCiAgICBldmFsdWF0aW9uLiAgRXF1aXZhbGVudCB0byDigJxsZXQgRVhQUkVTU0lPTuKAnS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDEgaWYgRVhQUkVTU0lPTiBldmFsdWF0ZXMgdG8gMDsgcmV0dXJucyAwIG90aGVyd2lzZS4ARXZhbHVhdGUgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4KICAgIAogICAgRXZhbHVhdGUgZWFjaCBBUkcgYXMgYW4gYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgRXZhbHVhdGlvbiBpcyBkb25lIGluCiAgICBmaXhlZC13aWR0aCBpbnRlZ2VycyB3aXRoIG5vIGNoZWNrIGZvciBvdmVyZmxvdywgdGhvdWdoIGRpdmlzaW9uIGJ5IDAKICAgIGlzIHRyYXBwZWQgYW5kIGZsYWdnZWQgYXMgYW4gZXJyb3IuICBUaGUgZm9sbG93aW5nIGxpc3Qgb2Ygb3BlcmF0b3JzIGlzCiAgICBncm91cGVkIGludG8gbGV2ZWxzIG9mIGVxdWFsLXByZWNlZGVuY2Ugb3BlcmF0b3JzLiAgVGhlIGxldmVscyBhcmUgbGlzdGVkCiAgICBpbiBvcmRlciBvZiBkZWNyZWFzaW5nIHByZWNlZGVuY2UuCiAgICAKICAgIAlpZCsrLCBpZC0tCXZhcmlhYmxlIHBvc3QtaW5jcmVtZW50LCBwb3N0LWRlY3JlbWVudAogICAgCSsraWQsIC0taWQJdmFyaWFibGUgcHJlLWluY3JlbWVudCwgcHJlLWRlY3JlbWVudAogICAgCS0sICsJCXVuYXJ5IG1pbnVzLCBwbHVzCiAgICAJISwgfgkJbG9naWNhbCBhbmQgYml0d2lzZSBuZWdhdGlvbgogICAgCSoqCQlleHBvbmVudGlhdGlvbgogICAgCSosIC8sICUJCW11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyCiAgICAJKywgLQkJYWRkaXRpb24sIHN1YnRyYWN0aW9uCiAgICAJPDwsID4+CQlsZWZ0IGFuZCByaWdodCBiaXR3aXNlIHNoaWZ0cwogICAgCTw9LCA+PSwgPCwgPgljb21wYXJpc29uCiAgICAJPT0sICE9CQllcXVhbGl0eSwgaW5lcXVhbGl0eQogICAgCSYJCWJpdHdpc2UgQU5ECiAgICAJXgkJYml0d2lzZSBYT1IKICAgIAl8CQliaXR3aXNlIE9SCiAgICAJJiYJCWxvZ2ljYWwgQU5ECiAgICAJfHwJCWxvZ2ljYWwgT1IKICAgIAlleHByID8gZXhwciA6IGV4cHIKICAgIAkJCWNvbmRpdGlvbmFsIG9wZXJhdG9yCiAgICAJPSwgKj0sIC89LCAlPSwKICAgIAkrPSwgLT0sIDw8PSwgPj49LAogICAgCSY9LCBePSwgfD0JYXNzaWdubWVudAogICAgCiAgICBTaGVsbCB2YXJpYWJsZXMgYXJlIGFsbG93ZWQgYXMgb3BlcmFuZHMuICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUKICAgIGlzIHJlcGxhY2VkIGJ5IGl0cyB2YWx1ZSAoY29lcmNlZCB0byBhIGZpeGVkLXdpZHRoIGludGVnZXIpIHdpdGhpbgogICAgYW4gZXhwcmVzc2lvbi4gIFRoZSB2YXJpYWJsZSBuZWVkIG5vdCBoYXZlIGl0cyBpbnRlZ2VyIGF0dHJpYnV0ZQogICAgdHVybmVkIG9uIHRvIGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4KICAgIAogICAgT3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZS4gIFN1Yi1leHByZXNzaW9ucyBpbgogICAgcGFyZW50aGVzZXMgYXJlIGV2YWx1YXRlZCBmaXJzdCBhbmQgbWF5IG92ZXJyaWRlIHRoZSBwcmVjZWRlbmNlCiAgICBydWxlcyBhYm92ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBJZiB0aGUgbGFzdCBBUkcgZXZhbHVhdGVzIHRvIDAsIGxldCByZXR1cm5zIDE7IGxldCByZXR1cm5zIDAgb3RoZXJ3aXNlLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBFeGl0cyB3aXRoIGEgc3RhdHVzIG9mIDAgKHRydWUpIG9yIDEgKGZhbHNlKSBkZXBlbmRpbmcgb24KICAgIHRoZSBldmFsdWF0aW9uIG9mIEVYUFIuICBFeHByZXNzaW9ucyBtYXkgYmUgdW5hcnkgb3IgYmluYXJ5LiAgVW5hcnkKICAgIGV4cHJlc3Npb25zIGFyZSBvZnRlbiB1c2VkIHRvIGV4YW1pbmUgdGhlIHN0YXR1cyBvZiBhIGZpbGUuICBUaGVyZQogICAgYXJlIHN0cmluZyBvcGVyYXRvcnMgYW5kIG51bWVyaWMgY29tcGFyaXNvbiBvcGVyYXRvcnMgYXMgd2VsbC4KICAgIAogICAgVGhlIGJlaGF2aW9yIG9mIHRlc3QgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIFJlYWQgdGhlCiAgICBiYXNoIG1hbnVhbCBwYWdlIGZvciB0aGUgY29tcGxldGUgc3BlY2lmaWNhdGlvbi4KICAgIAogICAgRmlsZSBvcGVyYXRvcnM6CiAgICAKICAgICAgLWEgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGV4aXN0cy4KICAgICAgLWIgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGJsb2NrIHNwZWNpYWwuCiAgICAgIC1jIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBjaGFyYWN0ZXIgc3BlY2lhbC4KICAgICAgLWQgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgZGlyZWN0b3J5LgogICAgICAtZSBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzLgogICAgICAtZiBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZS4KICAgICAgLWcgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIHNldC1ncm91cC1pZC4KICAgICAgLWggRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KICAgICAgLUwgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KICAgICAgLWsgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGhhcyBpdHMg4oCYc3RpY2t54oCZIGJpdCBzZXQuCiAgICAgIC1wIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIG5hbWVkIHBpcGUuCiAgICAgIC1yIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyByZWFkYWJsZSBieSB5b3UuCiAgICAgIC1zIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eS4KICAgICAgLVMgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGEgc29ja2V0LgogICAgICAtdCBGRCAgICAgICAgICBUcnVlIGlmIEZEIGlzIG9wZW5lZCBvbiBhIHRlcm1pbmFsLgogICAgICAtdSBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIHNldC11c2VyLWlkLgogICAgICAtdyBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJ5IHlvdS4KICAgICAgLXggRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBleGVjdXRhYmxlIGJ5IHlvdS4KICAgICAgLU8gRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBlZmZlY3RpdmVseSBvd25lZCBieSB5b3UuCiAgICAgIC1HIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZWZmZWN0aXZlbHkgb3duZWQgYnkgeW91ciBncm91cC4KICAgICAgLU4gRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSBpdCB3YXMgbGFzdCByZWFkLgogICAgCiAgICAgIEZJTEUxIC1udCBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBuZXdlciB0aGFuIGZpbGUyIChhY2NvcmRpbmcgdG8KICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb24gZGF0ZSkuCiAgICAKICAgICAgRklMRTEgLW90IEZJTEUyICBUcnVlIGlmIGZpbGUxIGlzIG9sZGVyIHRoYW4gZmlsZTIuCiAgICAKICAgICAgRklMRTEgLWVmIEZJTEUyICBUcnVlIGlmIGZpbGUxIGlzIGEgaGFyZCBsaW5rIHRvIGZpbGUyLgogICAgCiAgICBTdHJpbmcgb3BlcmF0b3JzOgogICAgCiAgICAgIC16IFNUUklORyAgICAgIFRydWUgaWYgc3RyaW5nIGlzIGVtcHR5LgogICAgCiAgICAgIC1uIFNUUklORwogICAgICAgICBTVFJJTkcgICAgICBUcnVlIGlmIHN0cmluZyBpcyBub3QgZW1wdHkuCiAgICAKICAgICAgU1RSSU5HMSA9IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgc3RyaW5ncyBhcmUgZXF1YWwuCiAgICAgIFNUUklORzEgIT0gU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIHRoZSBzdHJpbmdzIGFyZSBub3QgZXF1YWwuCiAgICAgIFNUUklORzEgPCBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgU1RSSU5HMSBzb3J0cyBiZWZvcmUgU1RSSU5HMiBsZXhpY29ncmFwaGljYWxseS4KICAgICAgU1RSSU5HMSA+IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiBTVFJJTkcxIHNvcnRzIGFmdGVyIFNUUklORzIgbGV4aWNvZ3JhcGhpY2FsbHkuCiAgICAKICAgIE90aGVyIG9wZXJhdG9yczoKICAgIAogICAgICAtbyBPUFRJT04gICAgICBUcnVlIGlmIHRoZSBzaGVsbCBvcHRpb24gT1BUSU9OIGlzIGVuYWJsZWQuCiAgICAgIC12IFZBUgkgVHJ1ZSBpZiB0aGUgc2hlbGwgdmFyaWFibGUgVkFSIGlzIHNldAogICAgICAhIEVYUFIgICAgICAgICBUcnVlIGlmIGV4cHIgaXMgZmFsc2UuCiAgICAgIEVYUFIxIC1hIEVYUFIyIFRydWUgaWYgYm90aCBleHByMSBBTkQgZXhwcjIgYXJlIHRydWUuCiAgICAgIEVYUFIxIC1vIEVYUFIyIFRydWUgaWYgZWl0aGVyIGV4cHIxIE9SIGV4cHIyIGlzIHRydWUuCiAgICAKICAgICAgYXJnMSBPUCBhcmcyICAgQXJpdGhtZXRpYyB0ZXN0cy4gIE9QIGlzIG9uZSBvZiAtZXEsIC1uZSwKICAgICAgICAgICAgICAgICAgICAgLWx0LCAtbGUsIC1ndCwgb3IgLWdlLgogICAgCiAgICBBcml0aG1ldGljIGJpbmFyeSBvcGVyYXRvcnMgcmV0dXJuIHRydWUgaWYgQVJHMSBpcyBlcXVhbCwgbm90LWVxdWFsLAogICAgbGVzcy10aGFuLCBsZXNzLXRoYW4tb3ItZXF1YWwsIGdyZWF0ZXItdGhhbiwgb3IgZ3JlYXRlci10aGFuLW9yLWVxdWFsCiAgICB0aGFuIEFSRzIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIEVYUFIgZXZhbHVhdGVzIHRvIHRydWU7IGZhaWxzIGlmIEVYUFIgZXZhbHVhdGVzIHRvCiAgICBmYWxzZSBvciBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIGdpdmVuLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBUaGlzIGlzIGEgc3lub255bSBmb3IgdGhlIOKAnHRlc3TigJ0gYnVpbHRpbiwgYnV0IHRoZSBsYXN0IGFyZ3VtZW50IG11c3QKICAgIGJlIGEgbGl0ZXJhbCDigJhd4oCZLCB0byBtYXRjaCB0aGUgb3BlbmluZyDigJhb4oCZLgBFeGVjdXRlIGEgc2ltcGxlIGNvbW1hbmQgb3IgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kcy4KICAgIAogICAgUnVucyBDT01NQU5EIHdpdGggQVJHUyBzdXBwcmVzc2luZyAgc2hlbGwgZnVuY3Rpb24gbG9va3VwLCBvciBkaXNwbGF5CiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIENPTU1BTkRzLiAgQ2FuIGJlIHVzZWQgdG8gaW52b2tlIGNvbW1hbmRzCiAgICBvbiBkaXNrIHdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAl1c2UgYSBkZWZhdWx0IHZhbHVlIGZvciBQQVRIIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBvZgogICAgCXRoZSBzdGFuZGFyZCB1dGlsaXRpZXMKICAgICAgLXYJcHJpbnQgYSBkZXNjcmlwdGlvbiBvZiBDT01NQU5EIHNpbWlsYXIgdG8gdGhlIOKAmHR5cGXigJkgYnVpbHRpbgogICAgICAtVglwcmludCBhIG1vcmUgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiBlYWNoIENPTU1BTkQKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQsIG9yIGZhaWx1cmUgaWYgQ09NTUFORCBpcyBub3QgZm91bmQuAEV4ZWN1dGUgYXJndW1lbnRzIGFzIGEgc2hlbGwgY29tbWFuZC4KICAgIAogICAgQ29tYmluZSBBUkdzIGludG8gYSBzaW5nbGUgc3RyaW5nLCB1c2UgdGhlIHJlc3VsdCBhcyBpbnB1dCB0byB0aGUgc2hlbGwsCiAgICBhbmQgZXhlY3V0ZSB0aGUgcmVzdWx0aW5nIGNvbW1hbmRzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgZXhpdCBzdGF0dXMgb2YgY29tbWFuZCBvciBzdWNjZXNzIGlmIGNvbW1hbmQgaXMgbnVsbC4ARXhlY3V0ZSBjb21tYW5kcyBhcyBsb25nIGFzIGEgdGVzdCBkb2VzIG5vdCBzdWNjZWVkLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIOKAmHVudGls4oCZIENPTU1BTkRTIGhhcyBhbiBleGl0IHN0YXR1cyB3aGljaCBpcyBub3QgemVyby4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARXhlY3V0ZSBjb21tYW5kcyBhcyBsb25nIGFzIGEgdGVzdCBzdWNjZWVkcy4KICAgIAogICAgRXhwYW5kIGFuZCBleGVjdXRlIENPTU1BTkRTIGFzIGxvbmcgYXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlCiAgICDigJh3aGlsZeKAmSBDT01NQU5EUyBoYXMgYW4gZXhpdCBzdGF0dXMgb2YgemVyby4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARXhlY3V0ZSBjb21tYW5kcyBiYXNlZCBvbiBjb25kaXRpb25hbC4KICAgIAogICAgVGhlIOKAmGlmIENPTU1BTkRT4oCZIGxpc3QgaXMgZXhlY3V0ZWQuICBJZiBpdHMgZXhpdCBzdGF0dXMgaXMgemVybywgdGhlbiB0aGUKICAgIOKAmHRoZW4gQ09NTUFORFPigJkgbGlzdCBpcyBleGVjdXRlZC4gIE90aGVyd2lzZSwgZWFjaCDigJhlbGlmIENPTU1BTkRT4oCZIGxpc3QgaXMKICAgIGV4ZWN1dGVkIGluIHR1cm4sIGFuZCBpZiBpdHMgZXhpdCBzdGF0dXMgaXMgemVybywgdGhlIGNvcnJlc3BvbmRpbmcKICAgIOKAmHRoZW4gQ09NTUFORFPigJkgbGlzdCBpcyBleGVjdXRlZCBhbmQgdGhlIGlmIGNvbW1hbmQgY29tcGxldGVzLiAgT3RoZXJ3aXNlLAogICAgdGhlIOKAmGVsc2UgQ09NTUFORFPigJkgbGlzdCBpcyBleGVjdXRlZCwgaWYgcHJlc2VudC4gIFRoZSBleGl0IHN0YXR1cyBvZiB0aGUKICAgIGVudGlyZSBjb25zdHJ1Y3QgaXMgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQsIG9yIHplcm8KICAgIGlmIG5vIGNvbmRpdGlvbiB0ZXN0ZWQgdHJ1ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARXhlY3V0ZSBjb21tYW5kcyBiYXNlZCBvbiBwYXR0ZXJuIG1hdGNoaW5nLgogICAgCiAgICBTZWxlY3RpdmVseSBleGVjdXRlIENPTU1BTkRTIGJhc2VkIHVwb24gV09SRCBtYXRjaGluZyBQQVRURVJOLiAgVGhlCiAgICDigJh84oCZIGlzIHVzZWQgdG8gc2VwYXJhdGUgbXVsdGlwbGUgcGF0dGVybnMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgZm9yIGVhY2ggbWVtYmVyIGluIGEgbGlzdC4KICAgIAogICAgVGhlIOKAmGZvcuKAmSBsb29wIGV4ZWN1dGVzIGEgc2VxdWVuY2Ugb2YgY29tbWFuZHMgZm9yIGVhY2ggbWVtYmVyIGluIGEKICAgIGxpc3Qgb2YgaXRlbXMuICBJZiDigJhpbiBXT1JEUyAuLi474oCZIGlzIG5vdCBwcmVzZW50LCB0aGVuIOKAmGluIOKAnCRA4oCd4oCZIGlzCiAgICBhc3N1bWVkLiAgRm9yIGVhY2ggZWxlbWVudCBpbiBXT1JEUywgTkFNRSBpcyBzZXQgdG8gdGhhdCBlbGVtZW50LCBhbmQKICAgIHRoZSBDT01NQU5EUyBhcmUgZXhlY3V0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgc2hlbGwuCiAgICAKICAgIFJlYWQgYW5kIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBGSUxFTkFNRSBpbiB0aGUgY3VycmVudCBzaGVsbC4gIFRoZQogICAgZW50cmllcyBpbiAkUEFUSCBhcmUgdXNlZCB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFTkFNRS4KICAgIElmIGFueSBBUkdVTUVOVFMgYXJlIHN1cHBsaWVkLCB0aGV5IGJlY29tZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCiAgICB3aGVuIEZJTEVOQU1FIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkIGluIEZJTEVOQU1FOyBmYWlscyBpZgogICAgRklMRU5BTUUgY2Fubm90IGJlIHJlYWQuAEV4ZWN1dGUgY29uZGl0aW9uYWwgY29tbWFuZC4KICAgIAogICAgUmV0dXJucyBhIHN0YXR1cyBvZiAwIG9yIDEgZGVwZW5kaW5nIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb25kaXRpb25hbAogICAgZXhwcmVzc2lvbiBFWFBSRVNTSU9OLiAgRXhwcmVzc2lvbnMgYXJlIGNvbXBvc2VkIG9mIHRoZSBzYW1lIHByaW1hcmllcyB1c2VkCiAgICBieSB0aGUg4oCYdGVzdOKAmSBidWlsdGluLCBhbmQgbWF5IGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzOgogICAgCiAgICAgICggRVhQUkVTU0lPTiApCVJldHVybnMgdGhlIHZhbHVlIG9mIEVYUFJFU1NJT04KICAgICAgISBFWFBSRVNTSU9OCQlUcnVlIGlmIEVYUFJFU1NJT04gaXMgZmFsc2U7IGVsc2UgZmFsc2UKICAgICAgRVhQUjEgJiYgRVhQUjIJVHJ1ZSBpZiBib3RoIEVYUFIxIGFuZCBFWFBSMiBhcmUgdHJ1ZTsgZWxzZSBmYWxzZQogICAgICBFWFBSMSB8fCBFWFBSMglUcnVlIGlmIGVpdGhlciBFWFBSMSBvciBFWFBSMiBpcyB0cnVlOyBlbHNlIGZhbHNlCiAgICAKICAgIFdoZW4gdGhlIOKAmD094oCZIGFuZCDigJghPeKAmSBvcGVyYXRvcnMgYXJlIHVzZWQsIHRoZSBzdHJpbmcgdG8gdGhlIHJpZ2h0IG9mCiAgICB0aGUgb3BlcmF0b3IgaXMgdXNlZCBhcyBhIHBhdHRlcm4gYW5kIHBhdHRlcm4gbWF0Y2hpbmcgaXMgcGVyZm9ybWVkLgogICAgV2hlbiB0aGUg4oCYPX7igJkgb3BlcmF0b3IgaXMgdXNlZCwgdGhlIHN0cmluZyB0byB0aGUgcmlnaHQgb2YgdGhlIG9wZXJhdG9yCiAgICBpcyBtYXRjaGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uLgogICAgCiAgICBUaGUgJiYgYW5kIHx8IG9wZXJhdG9ycyBkbyBub3QgZXZhbHVhdGUgRVhQUjIgaWYgRVhQUjEgaXMgc3VmZmljaWVudCB0bwogICAgZGV0ZXJtaW5lIHRoZSBleHByZXNzaW9uJ3MgdmFsdWUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgMCBvciAxIGRlcGVuZGluZyBvbiB2YWx1ZSBvZiBFWFBSRVNTSU9OLgBFeGVjdXRlIHNoZWxsIGJ1aWx0aW5zLgogICAgCiAgICBFeGVjdXRlIFNIRUxMLUJVSUxUSU4gd2l0aCBhcmd1bWVudHMgQVJHcyB3aXRob3V0IHBlcmZvcm1pbmcgY29tbWFuZAogICAgbG9va3VwLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byByZWltcGxlbWVudCBhIHNoZWxsIGJ1aWx0aW4KICAgIGFzIGEgc2hlbGwgZnVuY3Rpb24sIGJ1dCBuZWVkIHRvIGV4ZWN1dGUgdGhlIGJ1aWx0aW4gd2l0aGluIHRoZSBmdW5jdGlvbi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBleGl0IHN0YXR1cyBvZiBTSEVMTC1CVUlMVElOLCBvciBmYWxzZSBpZiBTSEVMTC1CVUlMVElOIGlzCiAgICBub3QgYSBzaGVsbCBidWlsdGluLi4ARXhpdCAlZABFeGl0IGEgbG9naW4gc2hlbGwuCiAgICAKICAgIEV4aXRzIGEgbG9naW4gc2hlbGwgd2l0aCBleGl0IHN0YXR1cyBOLiAgUmV0dXJucyBhbiBlcnJvciBpZiBub3QgZXhlY3V0ZWQKICAgIGluIGEgbG9naW4gc2hlbGwuAEV4aXQgZm9yLCB3aGlsZSwgb3IgdW50aWwgbG9vcHMuCiAgICAKICAgIEV4aXQgYSBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuICBJZiBOIGlzIHNwZWNpZmllZCwgYnJlYWsgTiBlbmNsb3NpbmcKICAgIGxvb3BzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4ARXhpdCB0aGUgc2hlbGwuCiAgICAKICAgIEV4aXRzIHRoZSBzaGVsbCB3aXRoIGEgc3RhdHVzIG9mIE4uICBJZiBOIGlzIG9taXR0ZWQsIHRoZSBleGl0IHN0YXR1cwogICAgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBGaWxlIGxpbWl0AEZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbgBGb3JtYXRzIGFuZCBwcmludHMgQVJHVU1FTlRTIHVuZGVyIGNvbnRyb2wgb2YgdGhlIEZPUk1BVC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXYgdmFyCWFzc2lnbiB0aGUgb3V0cHV0IHRvIHNoZWxsIHZhcmlhYmxlIFZBUiByYXRoZXIgdGhhbgogICAgCQlkaXNwbGF5IGl0IG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQKICAgIAogICAgRk9STUFUIGlzIGEgY2hhcmFjdGVyIHN0cmluZyB3aGljaCBjb250YWlucyB0aHJlZSB0eXBlcyBvZiBvYmplY3RzOiBwbGFpbgogICAgY2hhcmFjdGVycywgd2hpY2ggYXJlIHNpbXBseSBjb3BpZWQgdG8gc3RhbmRhcmQgb3V0cHV0OyBjaGFyYWN0ZXIgZXNjYXBlCiAgICBzZXF1ZW5jZXMsIHdoaWNoIGFyZSBjb252ZXJ0ZWQgYW5kIGNvcGllZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0OyBhbmQKICAgIGZvcm1hdCBzcGVjaWZpY2F0aW9ucywgZWFjaCBvZiB3aGljaCBjYXVzZXMgcHJpbnRpbmcgb2YgdGhlIG5leHQgc3VjY2Vzc2l2ZQogICAgYXJndW1lbnQuCiAgICAKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZGVzY3JpYmVkIGluIHByaW50ZigxKQogICAgYW5kIHByaW50ZigzKSwgcHJpbnRmIGludGVycHJldHM6CiAgICAKICAgICAgJWIJZXhwYW5kIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50CiAgICAgICVxCXF1b3RlIHRoZSBhcmd1bWVudCBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgc2hlbGwgaW5wdXQKICAgICAgJShmbXQpVCBvdXRwdXQgdGhlIGRhdGUtdGltZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gdXNpbmcgRk1UIGFzIGEgZm9ybWF0CiAgICAgICAgICAgIHN0cmluZyBmb3Igc3RyZnRpbWUoMykKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGEgd3JpdGUgb3IgYXNzaWdubWVudAogICAgZXJyb3Igb2NjdXJzLgBHTlUgYmFzaCwgdmVyc2lvbiAlcyAoJXMpCgBHTlUgYmFzaCwgdmVyc2lvbiAlcy0oJXMpCgBHTlUgbG9uZyBvcHRpb25zOgoAR3JvdXAgY29tbWFuZHMgYXMgYSB1bml0LgogICAgCiAgICBSdW4gYSBzZXQgb2YgY29tbWFuZHMgaW4gYSBncm91cC4gIFRoaXMgaXMgb25lIHdheSB0byByZWRpcmVjdCBhbgogICAgZW50aXJlIHNldCBvZiBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ASEZUIGlucHV0IGRhdGEgcGVuZGluZwBIRlQgbW9uaXRvciBtb2RlIGdyYW50ZWQASEZUIG1vbml0b3IgbW9kZSByZXRyYWN0ZWQASEZUIHNvdW5kIHNlcXVlbmNlIGhhcyBjb21wbGV0ZWQASE9NRSBub3Qgc2V0AEhhbmd1cABJIGhhdmUgbm8gbmFtZSEASS9PIHJlYWR5AElsbGVnYWwgaW5zdHJ1Y3Rpb24ASW5mb3JtYXRpb24gcmVxdWVzdABJbnRlcnJ1cHQAS2lsbGVkAExpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+CgBMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPgoATWFyayBzaGVsbCB2YXJpYWJsZXMgYXMgdW5jaGFuZ2VhYmxlLgogICAgCiAgICBNYXJrIGVhY2ggTkFNRSBhcyByZWFkLW9ubHk7IHRoZSB2YWx1ZXMgb2YgdGhlc2UgTkFNRXMgbWF5IG5vdCBiZQogICAgY2hhbmdlZCBieSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQuICBJZiBWQUxVRSBpcyBzdXBwbGllZCwgYXNzaWduIFZBTFVFCiAgICBiZWZvcmUgbWFya2luZyBhcyByZWFkLW9ubHkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlZmVyIHRvIGluZGV4ZWQgYXJyYXkgdmFyaWFibGVzCiAgICAgIC1BCXJlZmVyIHRvIGFzc29jaWF0aXZlIGFycmF5IHZhcmlhYmxlcwogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlYWRvbmx5IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIOKAmC0t4oCZIGRpc2FibGVzIGZ1cnRoZXIgb3B0aW9uIHByb2Nlc3NpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBOQU1FIGlzIGludmFsaWQuAE1vZGlmeSBvciBkaXNwbGF5IGNvbXBsZXRpb24gb3B0aW9ucy4KICAgIAogICAgTW9kaWZ5IHRoZSBjb21wbGV0aW9uIG9wdGlvbnMgZm9yIGVhY2ggTkFNRSwgb3IsIGlmIG5vIE5BTUVzIGFyZSBzdXBwbGllZCwKICAgIHRoZSBjb21wbGV0aW9uIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZC4gIElmIG5vIE9QVElPTnMgYXJlIGdpdmVuLCBwcmludAogICAgdGhlIGNvbXBsZXRpb24gb3B0aW9ucyBmb3IgZWFjaCBOQU1FIG9yIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbi4KICAgIAogICAgT3B0aW9uczoKICAgIAktbyBvcHRpb24JU2V0IGNvbXBsZXRpb24gb3B0aW9uIE9QVElPTiBmb3IgZWFjaCBOQU1FCiAgICAJLUQJCUNoYW5nZSBvcHRpb25zIGZvciB0aGUg4oCcZGVmYXVsdOKAnSBjb21tYW5kIGNvbXBsZXRpb24KICAgIAktRQkJQ2hhbmdlIG9wdGlvbnMgZm9yIHRoZSDigJxlbXB0eeKAnSBjb21tYW5kIGNvbXBsZXRpb24KICAgIAogICAgVXNpbmcg4oCYK2/igJkgaW5zdGVhZCBvZiDigJgtb+KAmSB0dXJucyBvZmYgdGhlIHNwZWNpZmllZCBvcHRpb24uCiAgICAKICAgIEFyZ3VtZW50czoKICAgIAogICAgRWFjaCBOQU1FIHJlZmVycyB0byBhIGNvbW1hbmQgZm9yIHdoaWNoIGEgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uIG11c3QKICAgIGhhdmUgcHJldmlvdXNseSBiZWVuIGRlZmluZWQgdXNpbmcgdGhlIOKAmGNvbXBsZXRl4oCZIGJ1aWx0aW4uICBJZiBubyBOQU1FcwogICAgYXJlIHN1cHBsaWVkLCBjb21wb3B0IG11c3QgYmUgY2FsbGVkIGJ5IGEgZnVuY3Rpb24gY3VycmVudGx5IGdlbmVyYXRpbmcKICAgIGNvbXBsZXRpb25zLCBhbmQgdGhlIG9wdGlvbnMgZm9yIHRoYXQgY3VycmVudGx5LWV4ZWN1dGluZyBjb21wbGV0aW9uCiAgICBnZW5lcmF0b3IgYXJlIG1vZGlmaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgTkFNRSBkb2VzIG5vdAogICAgaGF2ZSBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBkZWZpbmVkLgBNb2RpZnkgc2hlbGwgcmVzb3VyY2UgbGltaXRzLgogICAgCiAgICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgdG8gdGhlIHNoZWxsIGFuZCBwcm9jZXNzZXMKICAgIGl0IGNyZWF0ZXMsIG9uIHN5c3RlbXMgdGhhdCBhbGxvdyBzdWNoIGNvbnRyb2wuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1TCXVzZSB0aGUg4oCYc29mdOKAmSByZXNvdXJjZSBsaW1pdAogICAgICAtSAl1c2UgdGhlIOKAmGhhcmTigJkgcmVzb3VyY2UgbGltaXQKICAgICAgLWEJYWxsIGN1cnJlbnQgbGltaXRzIGFyZSByZXBvcnRlZAogICAgICAtYgl0aGUgc29ja2V0IGJ1ZmZlciBzaXplCiAgICAgIC1jCXRoZSBtYXhpbXVtIHNpemUgb2YgY29yZSBmaWxlcyBjcmVhdGVkCiAgICAgIC1kCXRoZSBtYXhpbXVtIHNpemUgb2YgYSBwcm9jZXNzJ3MgZGF0YSBzZWdtZW50CiAgICAgIC1lCXRoZSBtYXhpbXVtIHNjaGVkdWxpbmcgcHJpb3JpdHkgKOKAmG5pY2XigJkpCiAgICAgIC1mCXRoZSBtYXhpbXVtIHNpemUgb2YgZmlsZXMgd3JpdHRlbiBieSB0aGUgc2hlbGwgYW5kIGl0cyBjaGlsZHJlbgogICAgICAtaQl0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBzaWduYWxzCiAgICAgIC1sCXRoZSBtYXhpbXVtIHNpemUgYSBwcm9jZXNzIG1heSBsb2NrIGludG8gbWVtb3J5CiAgICAgIC1tCXRoZSBtYXhpbXVtIHJlc2lkZW50IHNldCBzaXplCiAgICAgIC1uCXRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICAgICAgLXAJdGhlIHBpcGUgYnVmZmVyIHNpemUKICAgICAgLXEJdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFBPU0lYIG1lc3NhZ2UgcXVldWVzCiAgICAgIC1yCXRoZSBtYXhpbXVtIHJlYWwtdGltZSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgICAgIC1zCXRoZSBtYXhpbXVtIHN0YWNrIHNpemUKICAgICAgLXQJdGhlIG1heGltdW0gYW1vdW50IG9mIGNwdSB0aW1lIGluIHNlY29uZHMKICAgICAgLXUJdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXIgcHJvY2Vzc2VzCiAgICAgIC12CXRoZSBzaXplIG9mIHZpcnR1YWwgbWVtb3J5CiAgICAgIC14CXRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGxvY2tzCiAgICAKICAgIElmIExJTUlUIGlzIGdpdmVuLCBpdCBpcyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2U7IHRoZQogICAgc3BlY2lhbCBMSU1JVCB2YWx1ZXMg4oCYc29mdOKAmSwg4oCYaGFyZOKAmSwgYW5kIOKAmHVubGltaXRlZOKAmSBzdGFuZCBmb3IgdGhlCiAgICBjdXJyZW50IHNvZnQgbGltaXQsIHRoZSBjdXJyZW50IGhhcmQgbGltaXQsIGFuZCBubyBsaW1pdCwgcmVzcGVjdGl2ZWx5LgogICAgT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIHByaW50ZWQuICBJZgogICAgbm8gb3B0aW9uIGlzIGdpdmVuLCB0aGVuIC1mIGlzIGFzc3VtZWQuCiAgICAKICAgIFZhbHVlcyBhcmUgaW4gMTAyNC1ieXRlIGluY3JlbWVudHMsIGV4Y2VwdCBmb3IgLXQsIHdoaWNoIGlzIGluIHNlY29uZHMsCiAgICAtcCwgd2hpY2ggaXMgaW4gaW5jcmVtZW50cyBvZiA1MTIgYnl0ZXMsIGFuZCAtdSwgd2hpY2ggaXMgYW4gdW5zY2FsZWQKICAgIG51bWJlciBvZiBwcm9jZXNzZXMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAE1vdmUgam9iIHRvIHRoZSBmb3JlZ3JvdW5kLgogICAgCiAgICBQbGFjZSB0aGUgam9iIGlkZW50aWZpZWQgYnkgSk9CX1NQRUMgaW4gdGhlIGZvcmVncm91bmQsIG1ha2luZyBpdCB0aGUKICAgIGN1cnJlbnQgam9iLiAgSWYgSk9CX1NQRUMgaXMgbm90IHByZXNlbnQsIHRoZSBzaGVsbCdzIG5vdGlvbiBvZiB0aGUKICAgIGN1cnJlbnQgam9iIGlzIHVzZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgU3RhdHVzIG9mIGNvbW1hbmQgcGxhY2VkIGluIGZvcmVncm91bmQsIG9yIGZhaWx1cmUgaWYgYW4gZXJyb3Igb2NjdXJzLgBNb3ZlIGpvYnMgdG8gdGhlIGJhY2tncm91bmQuCiAgICAKICAgIFBsYWNlIHRoZSBqb2JzIGlkZW50aWZpZWQgYnkgZWFjaCBKT0JfU1BFQyBpbiB0aGUgYmFja2dyb3VuZCwgYXMgaWYgdGhleQogICAgaGFkIGJlZW4gc3RhcnRlZCB3aXRoIOKAmCbigJkuICBJZiBKT0JfU1BFQyBpcyBub3QgcHJlc2VudCwgdGhlIHNoZWxsJ3Mgbm90aW9uCiAgICBvZiB0aGUgY3VycmVudCBqb2IgaXMgdXNlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGpvYiBjb250cm9sIGlzIG5vdCBlbmFibGVkIG9yIGFuIGVycm9yIG9jY3Vycy4ATnVsbCBjb21tYW5kLgogICAgCiAgICBObyBlZmZlY3Q7IHRoZSBjb21tYW5kIGRvZXMgbm90aGluZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgc3VjY2VlZHMuAE9MRFBXRCBub3Qgc2V0AFBhcnNlIG9wdGlvbiBhcmd1bWVudHMuCiAgICAKICAgIEdldG9wdHMgaXMgdXNlZCBieSBzaGVsbCBwcm9jZWR1cmVzIHRvIHBhcnNlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgYXMgb3B0aW9ucy4KICAgIAogICAgT1BUU1RSSU5HIGNvbnRhaW5zIHRoZSBvcHRpb24gbGV0dGVycyB0byBiZSByZWNvZ25pemVkOyBpZiBhIGxldHRlcgogICAgaXMgZm9sbG93ZWQgYnkgYSBjb2xvbiwgdGhlIG9wdGlvbiBpcyBleHBlY3RlZCB0byBoYXZlIGFuIGFyZ3VtZW50LAogICAgd2hpY2ggc2hvdWxkIGJlIHNlcGFyYXRlZCBmcm9tIGl0IGJ5IHdoaXRlIHNwYWNlLgogICAgCiAgICBFYWNoIHRpbWUgaXQgaXMgaW52b2tlZCwgZ2V0b3B0cyB3aWxsIHBsYWNlIHRoZSBuZXh0IG9wdGlvbiBpbiB0aGUKICAgIHNoZWxsIHZhcmlhYmxlICRuYW1lLCBpbml0aWFsaXppbmcgbmFtZSBpZiBpdCBkb2VzIG5vdCBleGlzdCwgYW5kCiAgICB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXJndW1lbnQgdG8gYmUgcHJvY2Vzc2VkIGludG8gdGhlIHNoZWxsCiAgICB2YXJpYWJsZSBPUFRJTkQuICBPUFRJTkQgaXMgaW5pdGlhbGl6ZWQgdG8gMSBlYWNoIHRpbWUgdGhlIHNoZWxsIG9yCiAgICBhIHNoZWxsIHNjcmlwdCBpcyBpbnZva2VkLiAgV2hlbiBhbiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQsCiAgICBnZXRvcHRzIHBsYWNlcyB0aGF0IGFyZ3VtZW50IGludG8gdGhlIHNoZWxsIHZhcmlhYmxlIE9QVEFSRy4KICAgIAogICAgZ2V0b3B0cyByZXBvcnRzIGVycm9ycyBpbiBvbmUgb2YgdHdvIHdheXMuICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyCiAgICBvZiBPUFRTVFJJTkcgaXMgYSBjb2xvbiwgZ2V0b3B0cyB1c2VzIHNpbGVudCBlcnJvciByZXBvcnRpbmcuICBJbgogICAgdGhpcyBtb2RlLCBubyBlcnJvciBtZXNzYWdlcyBhcmUgcHJpbnRlZC4gIElmIGFuIGludmFsaWQgb3B0aW9uIGlzCiAgICBzZWVuLCBnZXRvcHRzIHBsYWNlcyB0aGUgb3B0aW9uIGNoYXJhY3RlciBmb3VuZCBpbnRvIE9QVEFSRy4gIElmIGEKICAgIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5vdCBmb3VuZCwgZ2V0b3B0cyBwbGFjZXMgYSDigJg64oCZIGludG8gTkFNRSBhbmQKICAgIHNldHMgT1BUQVJHIHRvIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZvdW5kLiAgSWYgZ2V0b3B0cyBpcyBub3QgaW4KICAgIHNpbGVudCBtb2RlLCBhbmQgYW4gaW52YWxpZCBvcHRpb24gaXMgc2VlbiwgZ2V0b3B0cyBwbGFjZXMg4oCYP+KAmSBpbnRvCiAgICBOQU1FIGFuZCB1bnNldHMgT1BUQVJHLiAgSWYgYSByZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgZm91bmQsIGEg4oCYP+KAmQogICAgaXMgcGxhY2VkIGluIE5BTUUsIE9QVEFSRyBpcyB1bnNldCwgYW5kIGEgZGlhZ25vc3RpYyBtZXNzYWdlIGlzCiAgICBwcmludGVkLgogICAgCiAgICBJZiB0aGUgc2hlbGwgdmFyaWFibGUgT1BURVJSIGhhcyB0aGUgdmFsdWUgMCwgZ2V0b3B0cyBkaXNhYmxlcyB0aGUKICAgIHByaW50aW5nIG9mIGVycm9yIG1lc3NhZ2VzLCBldmVuIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKICAgIE9QVFNUUklORyBpcyBub3QgYSBjb2xvbi4gIE9QVEVSUiBoYXMgdGhlIHZhbHVlIDEgYnkgZGVmYXVsdC4KICAgIAogICAgR2V0b3B0cyBub3JtYWxseSBwYXJzZXMgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyAoJDAgLSAkOSksIGJ1dCBpZgogICAgbW9yZSBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGV5IGFyZSBwYXJzZWQgaW5zdGVhZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgaWYgYW4gb3B0aW9uIGlzIGZvdW5kOyBmYWlscyBpZiB0aGUgZW5kIG9mIG9wdGlvbnMgaXMKICAgIGVuY291bnRlcmVkIG9yIGFuIGVycm9yIG9jY3Vycy4AUHJpbnQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1MCXByaW50IHRoZSB2YWx1ZSBvZiAkUFdEIGlmIGl0IG5hbWVzIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIAlkaXJlY3RvcnkKICAgICAgLVAJcHJpbnQgdGhlIHBoeXNpY2FsIGRpcmVjdG9yeSwgd2l0aG91dCBhbnkgc3ltYm9saWMgbGlua3MKICAgIAogICAgQnkgZGVmYXVsdCwg4oCYcHdk4oCZIGJlaGF2ZXMgYXMgaWYg4oCYLUzigJkgd2VyZSBzcGVjaWZpZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgIGNhbm5vdCBiZSByZWFkLgBRdWl0AFJlYWQgYSBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBzcGxpdCBpdCBpbnRvIGZpZWxkcy4KICAgIAogICAgUmVhZHMgYSBzaW5nbGUgbGluZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb3IgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQKICAgIGlmIHRoZSAtdSBvcHRpb24gaXMgc3VwcGxpZWQuICBUaGUgbGluZSBpcyBzcGxpdCBpbnRvIGZpZWxkcyBhcyB3aXRoIHdvcmQKICAgIHNwbGl0dGluZywgYW5kIHRoZSBmaXJzdCB3b3JkIGlzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBOQU1FLCB0aGUgc2Vjb25kCiAgICB3b3JkIHRvIHRoZSBzZWNvbmQgTkFNRSwgYW5kIHNvIG9uLCB3aXRoIGFueSBsZWZ0b3ZlciB3b3JkcyBhc3NpZ25lZCB0bwogICAgdGhlIGxhc3QgTkFNRS4gIE9ubHkgdGhlIGNoYXJhY3RlcnMgZm91bmQgaW4gJElGUyBhcmUgcmVjb2duaXplZCBhcyB3b3JkCiAgICBkZWxpbWl0ZXJzLgogICAgCiAgICBJZiBubyBOQU1FcyBhcmUgc3VwcGxpZWQsIHRoZSBsaW5lIHJlYWQgaXMgc3RvcmVkIGluIHRoZSBSRVBMWSB2YXJpYWJsZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgYXJyYXkJYXNzaWduIHRoZSB3b3JkcyByZWFkIHRvIHNlcXVlbnRpYWwgaW5kaWNlcyBvZiB0aGUgYXJyYXkKICAgIAkJdmFyaWFibGUgQVJSQVksIHN0YXJ0aW5nIGF0IHplcm8KICAgICAgLWQgZGVsaW0JY29udGludWUgdW50aWwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBERUxJTSBpcyByZWFkLCByYXRoZXIKICAgIAkJdGhhbiBuZXdsaW5lCiAgICAgIC1lCQl1c2UgUmVhZGxpbmUgdG8gb2J0YWluIHRoZSBsaW5lIGluIGFuIGludGVyYWN0aXZlIHNoZWxsCiAgICAgIC1pIHRleHQJVXNlIFRFWFQgYXMgdGhlIGluaXRpYWwgdGV4dCBmb3IgUmVhZGxpbmUKICAgICAgLW4gbmNoYXJzCXJldHVybiBhZnRlciByZWFkaW5nIE5DSEFSUyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIHdhaXRpbmcKICAgIAkJZm9yIGEgbmV3bGluZSwgYnV0IGhvbm9yIGEgZGVsaW1pdGVyIGlmIGZld2VyIHRoYW4gTkNIQVJTCiAgICAJCWNoYXJhY3RlcnMgYXJlIHJlYWQgYmVmb3JlIHRoZSBkZWxpbWl0ZXIKICAgICAgLU4gbmNoYXJzCXJldHVybiBvbmx5IGFmdGVyIHJlYWRpbmcgZXhhY3RseSBOQ0hBUlMgY2hhcmFjdGVycywgdW5sZXNzCiAgICAJCUVPRiBpcyBlbmNvdW50ZXJlZCBvciByZWFkIHRpbWVzIG91dCwgaWdub3JpbmcgYW55IGRlbGltaXRlcgogICAgICAtcCBwcm9tcHQJb3V0cHV0IHRoZSBzdHJpbmcgUFJPTVBUIHdpdGhvdXQgYSB0cmFpbGluZyBuZXdsaW5lIGJlZm9yZQogICAgCQlhdHRlbXB0aW5nIHRvIHJlYWQKICAgICAgLXIJCWRvIG5vdCBhbGxvdyBiYWNrc2xhc2hlcyB0byBlc2NhcGUgYW55IGNoYXJhY3RlcnMKICAgICAgLXMJCWRvIG5vdCBlY2hvIGlucHV0IGNvbWluZyBmcm9tIGEgdGVybWluYWwKICAgICAgLXQgdGltZW91dAl0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgaWYgYSBjb21wbGV0ZSBsaW5lIG9mIGlucHV0IGlzCiAgICAJCW5vdCByZWFkIHdpdGhpbnQgVElNRU9VVCBzZWNvbmRzLiAgVGhlIHZhbHVlIG9mIHRoZSBUTU9VVAogICAgCQl2YXJpYWJsZSBpcyB0aGUgZGVmYXVsdCB0aW1lb3V0LiAgVElNRU9VVCBtYXkgYmUgYQogICAgCQlmcmFjdGlvbmFsIG51bWJlci4gIElmIFRJTUVPVVQgaXMgMCwgcmVhZCByZXR1cm5zIHN1Y2Nlc3Mgb25seQogICAgCQlpZiBpbnB1dCBpcyBhdmFpbGFibGUgb24gdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuICBUaGUKICAgIAkJZXhpdCBzdGF0dXMgaXMgZ3JlYXRlciB0aGFuIDEyOCBpZiB0aGUgdGltZW91dCBpcyBleGNlZWRlZAogICAgICAtdSBmZAkJcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB1bmxlc3MgZW5kLW9mLWZpbGUgaXMgZW5jb3VudGVyZWQsIHJlYWQgdGltZXMgb3V0LAogICAgb3IgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgaXMgc3VwcGxpZWQgYXMgdGhlIGFyZ3VtZW50IHRvIC11LgBSZWFkIGxpbmVzIGZyb20gYSBmaWxlIGludG8gYW4gYXJyYXkgdmFyaWFibGUuCiAgICAKICAgIEEgc3lub255bSBmb3Ig4oCYbWFwZmlsZeKAmS4AUmVhZCBsaW5lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpbnRvIGFuIGluZGV4ZWQgYXJyYXkgdmFyaWFibGUuCiAgICAKICAgIFJlYWQgbGluZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgaW50byB0aGUgaW5kZXhlZCBhcnJheSB2YXJpYWJsZSBBUlJBWSwgb3IKICAgIGZyb20gZmlsZSBkZXNjcmlwdG9yIEZEIGlmIHRoZSAtdSBvcHRpb24gaXMgc3VwcGxpZWQuICBUaGUgdmFyaWFibGUgTUFQRklMRQogICAgaXMgdGhlIGRlZmF1bHQgQVJSQVkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uIGNvdW50CUNvcHkgYXQgbW9zdCBDT1VOVCBsaW5lcy4gIElmIENPVU5UIGlzIDAsIGFsbCBsaW5lcyBhcmUgY29waWVkLgogICAgICAtTyBvcmlnaW4JQmVnaW4gYXNzaWduaW5nIHRvIEFSUkFZIGF0IGluZGV4IE9SSUdJTi4gIFRoZSBkZWZhdWx0IGluZGV4IGlzIDAuCiAgICAgIC1zIGNvdW50IAlEaXNjYXJkIHRoZSBmaXJzdCBDT1VOVCBsaW5lcyByZWFkLgogICAgICAtdAkJUmVtb3ZlIGEgdHJhaWxpbmcgbmV3bGluZSBmcm9tIGVhY2ggbGluZSByZWFkLgogICAgICAtdSBmZAkJUmVhZCBsaW5lcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dC4KICAgICAgLUMgY2FsbGJhY2sJRXZhbHVhdGUgQ0FMTEJBQ0sgZWFjaCB0aW1lIFFVQU5UVU0gbGluZXMgYXJlIHJlYWQuCiAgICAgIC1jIHF1YW50dW0JU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQgYmV0d2VlbiBlYWNoIGNhbGwgdG8gQ0FMTEJBQ0suCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgQVJSQVkJCUFycmF5IHZhcmlhYmxlIG5hbWUgdG8gdXNlIGZvciBmaWxlIGRhdGEuCiAgICAKICAgIElmIC1DIGlzIHN1cHBsaWVkIHdpdGhvdXQgLWMsIHRoZSBkZWZhdWx0IHF1YW50dW0gaXMgNTAwMC4gIFdoZW4KICAgIENBTExCQUNLIGlzIGV2YWx1YXRlZCwgaXQgaXMgc3VwcGxpZWQgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGFycmF5CiAgICBlbGVtZW50IHRvIGJlIGFzc2lnbmVkIGFuZCB0aGUgbGluZSB0byBiZSBhc3NpZ25lZCB0byB0aGF0IGVsZW1lbnQKICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLgogICAgCiAgICBJZiBub3Qgc3VwcGxpZWQgd2l0aCBhbiBleHBsaWNpdCBvcmlnaW4sIG1hcGZpbGUgd2lsbCBjbGVhciBBUlJBWSBiZWZvcmUKICAgIGFzc2lnbmluZyB0byBpdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIEFSUkFZIGlzIHJlYWRvbmx5IG9yCiAgICBub3QgYW4gaW5kZXhlZCBhcnJheS4AUmVjb3JkIGxvY2sAUmVtZW1iZXIgb3IgZGlzcGxheSBwcm9ncmFtIGxvY2F0aW9ucy4KICAgIAogICAgRGV0ZXJtaW5lIGFuZCByZW1lbWJlciB0aGUgZnVsbCBwYXRobmFtZSBvZiBlYWNoIGNvbW1hbmQgTkFNRS4gIElmCiAgICBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBpbmZvcm1hdGlvbiBhYm91dCByZW1lbWJlcmVkIGNvbW1hbmRzIGlzIGRpc3BsYXllZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWQJCWZvcmdldCB0aGUgcmVtZW1iZXJlZCBsb2NhdGlvbiBvZiBlYWNoIE5BTUUKICAgICAgLWwJCWRpc3BsYXkgaW4gYSBmb3JtYXQgdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1wIHBhdGhuYW1lCXVzZSBQQVRITkFNRSBpcyB0aGUgZnVsbCBwYXRobmFtZSBvZiBOQU1FCiAgICAgIC1yCQlmb3JnZXQgYWxsIHJlbWVtYmVyZWQgbG9jYXRpb25zCiAgICAgIC10CQlwcmludCB0aGUgcmVtZW1iZXJlZCBsb2NhdGlvbiBvZiBlYWNoIE5BTUUsIHByZWNlZGluZwogICAgCQllYWNoIGxvY2F0aW9uIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgTkFNRSBpZiBtdWx0aXBsZQogICAgCQlOQU1FcyBhcmUgZ2l2ZW4KICAgIEFyZ3VtZW50czoKICAgICAgTkFNRQkJRWFjaCBOQU1FIGlzIHNlYXJjaGVkIGZvciBpbiAkUEFUSCBhbmQgYWRkZWQgdG8gdGhlIGxpc3QKICAgIAkJb2YgcmVtZW1iZXJlZCBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgbm90IGZvdW5kIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSBzdGFjay4KICAgIAogICAgUmVtb3ZlcyBlbnRyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjay4gIFdpdGggbm8gYXJndW1lbnRzLCByZW1vdmVzCiAgICB0aGUgdG9wIGRpcmVjdG9yeSBmcm9tIHRoZSBzdGFjaywgYW5kIGNoYW5nZXMgdG8gdGhlIG5ldyB0b3AgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIHJlbW92aW5nCiAgICAJZGlyZWN0b3JpZXMgZnJvbSB0aGUgc3RhY2ssIHNvIG9ubHkgdGhlIHN0YWNrIGlzIG1hbmlwdWxhdGVkLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCVJlbW92ZXMgdGhlIE50aCBlbnRyeSBjb3VudGluZyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBsaXN0CiAgICAJc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IOKAmHBvcGQgKzDigJkKICAgIAlyZW1vdmVzIHRoZSBmaXJzdCBkaXJlY3RvcnksIOKAmHBvcGQgKzHigJkgdGhlIHNlY29uZC4KICAgIAogICAgICAtTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3QKICAgIAlzaG93biBieSDigJhkaXJz4oCZLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTog4oCYcG9wZCAtMOKAmQogICAgCXJlbW92ZXMgdGhlIGxhc3QgZGlyZWN0b3J5LCDigJhwb3BkIC0x4oCZIHRoZSBuZXh0IHRvIGxhc3QuCiAgICAKICAgIFRoZSDigJhkaXJz4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgYXJndW1lbnQgaXMgc3VwcGxpZWQgb3IgdGhlIGRpcmVjdG9yeQogICAgY2hhbmdlIGZhaWxzLgBSZW1vdmUgZWFjaCBOQU1FIGZyb20gdGhlIGxpc3Qgb2YgZGVmaW5lZCBhbGlhc2VzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlyZW1vdmUgYWxsIGFsaWFzIGRlZmluaXRpb25zLgogICAgCiAgICBSZXR1cm4gc3VjY2VzcyB1bmxlc3MgYSBOQU1FIGlzIG5vdCBhbiBleGlzdGluZyBhbGlhcy4AUmVtb3ZlIGpvYnMgZnJvbSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBSZW1vdmVzIGVhY2ggSk9CU1BFQyBhcmd1bWVudCBmcm9tIHRoZSB0YWJsZSBvZiBhY3RpdmUgam9icy4gIFdpdGhvdXQKICAgIGFueSBKT0JTUEVDcywgdGhlIHNoZWxsIHVzZXMgaXRzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBqb2IuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlbW92ZSBhbGwgam9icyBpZiBKT0JTUEVDIGlzIG5vdCBzdXBwbGllZAogICAgICAtaAltYXJrIGVhY2ggSk9CU1BFQyBzbyB0aGF0IFNJR0hVUCBpcyBub3Qgc2VudCB0byB0aGUgam9iIGlmIHRoZQogICAgCXNoZWxsIHJlY2VpdmVzIGEgU0lHSFVQCiAgICAgIC1yCXJlbW92ZSBvbmx5IHJ1bm5pbmcgam9icwogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gb3IgSk9CU1BFQyBpcyBnaXZlbi4AUmVtb3ZlcyBlbnRyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjay4gIFdpdGggbm8gYXJndW1lbnRzLCByZW1vdmVzCiAgICB0aGUgdG9wIGRpcmVjdG9yeSBmcm9tIHRoZSBzdGFjaywgYW5kIGNoYW5nZXMgdG8gdGhlIG5ldyB0b3AgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIHJlbW92aW5nCiAgICAJZGlyZWN0b3JpZXMgZnJvbSB0aGUgc3RhY2ssIHNvIG9ubHkgdGhlIHN0YWNrIGlzIG1hbmlwdWxhdGVkLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCVJlbW92ZXMgdGhlIE50aCBlbnRyeSBjb3VudGluZyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBsaXN0CiAgICAJc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IOKAmHBvcGQgKzDigJkKICAgIAlyZW1vdmVzIHRoZSBmaXJzdCBkaXJlY3RvcnksIOKAmHBvcGQgKzHigJkgdGhlIHNlY29uZC4KICAgIAogICAgICAtTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3QKICAgIAlzaG93biBieSDigJhkaXJz4oCZLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTog4oCYcG9wZCAtMOKAmQogICAgCXJlbW92ZXMgdGhlIGxhc3QgZGlyZWN0b3J5LCDigJhwb3BkIC0x4oCZIHRoZSBuZXh0IHRvIGxhc3QuCiAgICAKICAgIFRoZSDigJhkaXJz4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AUmVwbGFjZSB0aGUgc2hlbGwgd2l0aCB0aGUgZ2l2ZW4gY29tbWFuZC4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5ELCByZXBsYWNpbmcgdGhpcyBzaGVsbCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS4KICAgIEFSR1VNRU5UUyBiZWNvbWUgdGhlIGFyZ3VtZW50cyB0byBDT01NQU5ELiAgSWYgQ09NTUFORCBpcyBub3Qgc3BlY2lmaWVkLAogICAgYW55IHJlZGlyZWN0aW9ucyB0YWtlIGVmZmVjdCBpbiB0aGUgY3VycmVudCBzaGVsbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgbmFtZQlwYXNzIE5BTUUgYXMgdGhlIHplcm90aCBhcmd1bWVudCB0byBDT01NQU5ECiAgICAgIC1jCQlleGVjdXRlIENPTU1BTkQgd2l0aCBhbiBlbXB0eSBlbnZpcm9ubWVudAogICAgICAtbAkJcGxhY2UgYSBkYXNoIGluIHRoZSB6ZXJvdGggYXJndW1lbnQgdG8gQ09NTUFORAogICAgCiAgICBJZiB0aGUgY29tbWFuZCBjYW5ub3QgYmUgZXhlY3V0ZWQsIGEgbm9uLWludGVyYWN0aXZlIHNoZWxsIGV4aXRzLCB1bmxlc3MKICAgIHRoZSBzaGVsbCBvcHRpb24g4oCYZXhlY2ZhaWzigJkgaXMgc2V0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgQ09NTUFORCBpcyBub3QgZm91bmQgb3IgYSByZWRpcmVjdGlvbiBlcnJvciBvY2N1cnMuAFJlcG9ydCB0aW1lIGNvbnN1bWVkIGJ5IHBpcGVsaW5lJ3MgZXhlY3V0aW9uLgogICAgCiAgICBFeGVjdXRlIFBJUEVMSU5FIGFuZCBwcmludCBhIHN1bW1hcnkgb2YgdGhlIHJlYWwgdGltZSwgdXNlciBDUFUgdGltZSwKICAgIGFuZCBzeXN0ZW0gQ1BVIHRpbWUgc3BlbnQgZXhlY3V0aW5nIFBJUEVMSU5FIHdoZW4gaXQgdGVybWluYXRlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgdGhlIHRpbWluZyBzdW1tYXJ5IGluIHRoZSBwb3J0YWJsZSBQb3NpeCBmb3JtYXQKICAgIAogICAgVGhlIHZhbHVlIG9mIHRoZSBUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG91dHB1dCBmb3JtYXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIHJldHVybiBzdGF0dXMgaXMgdGhlIHJldHVybiBzdGF0dXMgb2YgUElQRUxJTkUuAFJlc3VtZSBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgUmVzdW1lcyB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIGVuY2xvc2luZyBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuCiAgICBJZiBOIGlzIHNwZWNpZmllZCwgcmVzdW1lcyB0aGUgTnRoIGVuY2xvc2luZyBsb29wLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4AUmVzdW1lIGpvYiBpbiBmb3JlZ3JvdW5kLgogICAgCiAgICBFcXVpdmFsZW50IHRvIHRoZSBKT0JfU1BFQyBhcmd1bWVudCB0byB0aGUg4oCYZmfigJkgY29tbWFuZC4gIFJlc3VtZSBhCiAgICBzdG9wcGVkIG9yIGJhY2tncm91bmQgam9iLiAgSk9CX1NQRUMgY2FuIHNwZWNpZnkgZWl0aGVyIGEgam9iIG5hbWUKICAgIG9yIGEgam9iIG51bWJlci4gIEZvbGxvd2luZyBKT0JfU1BFQyB3aXRoIGEg4oCYJuKAmSBwbGFjZXMgdGhlIGpvYiBpbgogICAgdGhlIGJhY2tncm91bmQsIGFzIGlmIHRoZSBqb2Igc3BlY2lmaWNhdGlvbiBoYWQgYmVlbiBzdXBwbGllZCBhcyBhbgogICAgYXJndW1lbnQgdG8g4oCYYmfigJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSByZXN1bWVkIGpvYi4AUmV0dXJuIGEgc3VjY2Vzc2Z1bCByZXN1bHQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBSZXR1cm4gYW4gdW5zdWNjZXNzZnVsIHJlc3VsdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgZmFpbHMuAFJldHVybiBmcm9tIGEgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENhdXNlcyBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0IHRvIGV4aXQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgICBzcGVjaWZpZWQgYnkgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIHJldHVybiBzdGF0dXMgaXMgdGhhdCBvZiB0aGUKICAgIGxhc3QgY29tbWFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIG9yIHNjcmlwdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIE4sIG9yIGZhaWx1cmUgaWYgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbiBvciBzY3JpcHQuAFJldHVybiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyDigJwkbGluZSAkZmlsZW5hbWXigJ0uICBXaXRoIEVYUFIsIHJldHVybnMKICAgIOKAnCRsaW5lICRzdWJyb3V0aW5lICRmaWxlbmFtZeKAnTsgdGhpcyBleHRyYSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0bwogICAgcHJvdmlkZSBhIHN0YWNrIHRyYWNlLgogICAgCiAgICBUaGUgdmFsdWUgb2YgRVhQUiBpbmRpY2F0ZXMgaG93IG1hbnkgY2FsbCBmcmFtZXMgdG8gZ28gYmFjayBiZWZvcmUgdGhlCiAgICBjdXJyZW50IG9uZTsgdGhlIHRvcCBmcmFtZSBpcyBmcmFtZSAwLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMCB1bmxlc3MgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBzaGVsbCBmdW5jdGlvbiBvciBFWFBSCiAgICBpcyBpbnZhbGlkLgBSZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbC4KICAgIAogICAgV2l0aG91dCBFWFBSLCByZXR1cm5zIABSdW5uaW5nAFNlZ21lbnRhdGlvbiBmYXVsdABTZWxlY3Qgd29yZHMgZnJvbSBhIGxpc3QgYW5kIGV4ZWN1dGUgY29tbWFuZHMuCiAgICAKICAgIFRoZSBXT1JEUyBhcmUgZXhwYW5kZWQsIGdlbmVyYXRpbmcgYSBsaXN0IG9mIHdvcmRzLiAgVGhlCiAgICBzZXQgb2YgZXhwYW5kZWQgd29yZHMgaXMgcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3IsIGVhY2gKICAgIHByZWNlZGVkIGJ5IGEgbnVtYmVyLiAgSWYg4oCYaW4gV09SRFPigJkgaXMgbm90IHByZXNlbnQsIOKAmGluIOKAnCRA4oCd4oCZCiAgICBpcyBhc3N1bWVkLiAgVGhlIFBTMyBwcm9tcHQgaXMgdGhlbiBkaXNwbGF5ZWQgYW5kIGEgbGluZSByZWFkCiAgICBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIElmIHRoZSBsaW5lIGNvbnNpc3RzIG9mIHRoZSBudW1iZXIKICAgIGNvcnJlc3BvbmRpbmcgdG8gb25lIG9mIHRoZSBkaXNwbGF5ZWQgd29yZHMsIHRoZW4gTkFNRSBpcyBzZXQKICAgIHRvIHRoYXQgd29yZC4gIElmIHRoZSBsaW5lIGlzIGVtcHR5LCBXT1JEUyBhbmQgdGhlIHByb21wdCBhcmUKICAgIHJlZGlzcGxheWVkLiAgSWYgRU9GIGlzIHJlYWQsIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4gIEFueSBvdGhlcgogICAgdmFsdWUgcmVhZCBjYXVzZXMgTkFNRSB0byBiZSBzZXQgdG8gbnVsbC4gIFRoZSBsaW5lIHJlYWQgaXMgc2F2ZWQKICAgIGluIHRoZSB2YXJpYWJsZSBSRVBMWS4gIENPTU1BTkRTIGFyZSBleGVjdXRlZCBhZnRlciBlYWNoIHNlbGVjdGlvbgogICAgdW50aWwgYSBicmVhayBjb21tYW5kIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBTZW5kIGEgc2lnbmFsIHRvIGEgam9iLgogICAgCiAgICBTZW5kIHRoZSBwcm9jZXNzZXMgaWRlbnRpZmllZCBieSBQSUQgb3IgSk9CU1BFQyB0aGUgc2lnbmFsIG5hbWVkIGJ5CiAgICBTSUdTUEVDIG9yIFNJR05VTS4gIElmIG5laXRoZXIgU0lHU1BFQyBub3IgU0lHTlVNIGlzIHByZXNlbnQsIHRoZW4KICAgIFNJR1RFUk0gaXMgYXNzdW1lZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXMgc2lnCVNJRyBpcyBhIHNpZ25hbCBuYW1lCiAgICAgIC1uIHNpZwlTSUcgaXMgYSBzaWduYWwgbnVtYmVyCiAgICAgIC1sCWxpc3QgdGhlIHNpZ25hbCBuYW1lczsgaWYgYXJndW1lbnRzIGZvbGxvdyDigJgtbOKAmSB0aGV5IGFyZQogICAgCWFzc3VtZWQgdG8gYmUgc2lnbmFsIG51bWJlcnMgZm9yIHdoaWNoIG5hbWVzIHNob3VsZCBiZSBsaXN0ZWQKICAgIAogICAgS2lsbCBpcyBhIHNoZWxsIGJ1aWx0aW4gZm9yIHR3byByZWFzb25zOiBpdCBhbGxvd3Mgam9iIElEcyB0byBiZSB1c2VkCiAgICBpbnN0ZWFkIG9mIHByb2Nlc3MgSURzLCBhbmQgYWxsb3dzIHByb2Nlc3NlcyB0byBiZSBraWxsZWQgaWYgdGhlIGxpbWl0CiAgICBvbiBwcm9jZXNzZXMgdGhhdCB5b3UgY2FuIGNyZWF0ZSBpcyByZWFjaGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBTZXQgUmVhZGxpbmUga2V5IGJpbmRpbmdzIGFuZCB2YXJpYWJsZXMuCiAgICAKICAgIEJpbmQgYSBrZXkgc2VxdWVuY2UgdG8gYSBSZWFkbGluZSBmdW5jdGlvbiBvciBhIG1hY3JvLCBvciBzZXQgYQogICAgUmVhZGxpbmUgdmFyaWFibGUuICBUaGUgbm9uLW9wdGlvbiBhcmd1bWVudCBzeW50YXggaXMgZXF1aXZhbGVudCB0bwogICAgdGhhdCBmb3VuZCBpbiB+Ly5pbnB1dHJjLCBidXQgbXVzdCBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQ6CiAgICBlLmcuLCBiaW5kICfigJxcQy14XEMtcuKAnTogcmUtcmVhZC1pbml0LWZpbGUnLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbSAga2V5bWFwICAgICAgICAgVXNlIEtFWU1BUCBhcyB0aGUga2V5bWFwIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4gIEFjY2VwdGFibGUga2V5bWFwIG5hbWVzIGFyZSBlbWFjcywKICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWNzLXN0YW5kYXJkLCBlbWFjcy1tZXRhLCBlbWFjcy1jdGx4LCB2aSwgdmktbW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpLWNvbW1hbmQsIGFuZCB2aS1pbnNlcnQuCiAgICAgIC1sICAgICAgICAgICAgICAgICBMaXN0IG5hbWVzIG9mIGZ1bmN0aW9ucy4KICAgICAgLVAgICAgICAgICAgICAgICAgIExpc3QgZnVuY3Rpb24gbmFtZXMgYW5kIGJpbmRpbmdzLgogICAgICAtcCAgICAgICAgICAgICAgICAgTGlzdCBmdW5jdGlvbnMgYW5kIGJpbmRpbmdzIGluIGEgZm9ybSB0aGF0IGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VkIGFzIGlucHV0LgogICAgICAtUyAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIHRoYXQgaW52b2tlIG1hY3JvcyBhbmQgdGhlaXIgdmFsdWVzCiAgICAgIC1zICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgdGhhdCBpbnZva2UgbWFjcm9zIGFuZCB0aGVpciB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAgIC1WICAgICAgICAgICAgICAgICBMaXN0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMKICAgICAgLXYgICAgICAgICAgICAgICAgIExpc3QgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBpbiBhIGZvcm0gdGhhdCBjYW4KICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgICAgLXEgIGZ1bmN0aW9uLW5hbWUgIFF1ZXJ5IGFib3V0IHdoaWNoIGtleXMgaW52b2tlIHRoZSBuYW1lZCBmdW5jdGlvbi4KICAgICAgLXUgIGZ1bmN0aW9uLW5hbWUgIFVuYmluZCBhbGwga2V5cyB3aGljaCBhcmUgYm91bmQgdG8gdGhlIG5hbWVkIGZ1bmN0aW9uLgogICAgICAtciAga2V5c2VxICAgICAgICAgUmVtb3ZlIHRoZSBiaW5kaW5nIGZvciBLRVlTRVEuCiAgICAgIC1mICBmaWxlbmFtZSAgICAgICBSZWFkIGtleSBiaW5kaW5ncyBmcm9tIEZJTEVOQU1FLgogICAgICAteCAga2V5c2VxOnNoZWxsLWNvbW1hbmQJQ2F1c2UgU0hFTEwtQ09NTUFORCB0byBiZSBleGVjdXRlZCB3aGVuCiAgICAJCQkJS0VZU0VRIGlzIGVudGVyZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgYmluZCByZXR1cm5zIDAgdW5sZXNzIGFuIHVucmVjb2duaXplZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBTZXQgYW5kIHVuc2V0IHNoZWxsIG9wdGlvbnMuCiAgICAKICAgIENoYW5nZSB0aGUgc2V0dGluZyBvZiBlYWNoIHNoZWxsIG9wdGlvbiBPUFROQU1FLiAgV2l0aG91dCBhbnkgb3B0aW9uCiAgICBhcmd1bWVudHMsIGxpc3QgYWxsIHNoZWxsIG9wdGlvbnMgd2l0aCBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IGVhY2gKICAgIGlzIHNldC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW8JcmVzdHJpY3QgT1BUTkFNRXMgdG8gdGhvc2UgZGVmaW5lZCBmb3IgdXNlIHdpdGgg4oCYc2V0IC1v4oCZCiAgICAgIC1wCXByaW50IGVhY2ggc2hlbGwgb3B0aW9uIHdpdGggYW4gaW5kaWNhdGlvbiBvZiBpdHMgc3RhdHVzCiAgICAgIC1xCXN1cHByZXNzIG91dHB1dAogICAgICAtcwllbmFibGUgKHNldCkgZWFjaCBPUFROQU1FCiAgICAgIC11CWRpc2FibGUgKHVuc2V0KSBlYWNoIE9QVE5BTUUKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgaWYgT1BUTkFNRSBpcyBlbmFibGVkOyBmYWlscyBpZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgZ2l2ZW4gb3IgT1BUTkFNRSBpcyBkaXNhYmxlZC4AU2V0IGV4cG9ydCBhdHRyaWJ1dGUgZm9yIHNoZWxsIHZhcmlhYmxlcy4KICAgIAogICAgTWFya3MgZWFjaCBOQU1FIGZvciBhdXRvbWF0aWMgZXhwb3J0IHRvIHRoZSBlbnZpcm9ubWVudCBvZiBzdWJzZXF1ZW50bHkKICAgIGV4ZWN1dGVkIGNvbW1hbmRzLiAgSWYgVkFMVUUgaXMgc3VwcGxpZWQsIGFzc2lnbiBWQUxVRSBiZWZvcmUgZXhwb3J0aW5nLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLW4JcmVtb3ZlIHRoZSBleHBvcnQgcHJvcGVydHkgZnJvbSBlYWNoIE5BTUUKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIGV4cG9ydGVkIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIOKAmC0t4oCZIGRpc2FibGVzIGZ1cnRoZXIgb3B0aW9uIHByb2Nlc3NpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBOQU1FIGlzIGludmFsaWQuAFNldCBvciB1bnNldCB2YWx1ZXMgb2Ygc2hlbGwgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgCiAgICBDaGFuZ2UgdGhlIHZhbHVlIG9mIHNoZWxsIGF0dHJpYnV0ZXMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgb3IKICAgIGRpc3BsYXkgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2hlbGwgdmFyaWFibGVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSAgTWFyayB2YXJpYWJsZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9yIGNyZWF0ZWQgZm9yIGV4cG9ydC4KICAgICAgLWIgIE5vdGlmeSBvZiBqb2IgdGVybWluYXRpb24gaW1tZWRpYXRlbHkuCiAgICAgIC1lICBFeGl0IGltbWVkaWF0ZWx5IGlmIGEgY29tbWFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgogICAgICAtZiAgRGlzYWJsZSBmaWxlIG5hbWUgZ2VuZXJhdGlvbiAoZ2xvYmJpbmcpLgogICAgICAtaCAgUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIGNvbW1hbmRzIGFzIHRoZXkgYXJlIGxvb2tlZCB1cC4KICAgICAgLWsgIEFsbCBhc3NpZ25tZW50IGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYQogICAgICAgICAgY29tbWFuZCwgbm90IGp1c3QgdGhvc2UgdGhhdCBwcmVjZWRlIHRoZSBjb21tYW5kIG5hbWUuCiAgICAgIC1tICBKb2IgY29udHJvbCBpcyBlbmFibGVkLgogICAgICAtbiAgUmVhZCBjb21tYW5kcyBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KICAgICAgLW8gb3B0aW9uLW5hbWUKICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBvcHRpb24tbmFtZToKICAgICAgICAgICAgICBhbGxleHBvcnQgICAgc2FtZSBhcyAtYQogICAgICAgICAgICAgIGJyYWNlZXhwYW5kICBzYW1lIGFzIC1CCiAgICAgICAgICAgICAgZW1hY3MgICAgICAgIHVzZSBhbiBlbWFjcy1zdHlsZSBsaW5lIGVkaXRpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgZXJyZXhpdCAgICAgIHNhbWUgYXMgLWUKICAgICAgICAgICAgICBlcnJ0cmFjZSAgICAgc2FtZSBhcyAtRQogICAgICAgICAgICAgIGZ1bmN0cmFjZSAgICBzYW1lIGFzIC1UCiAgICAgICAgICAgICAgaGFzaGFsbCAgICAgIHNhbWUgYXMgLWgKICAgICAgICAgICAgICBoaXN0ZXhwYW5kICAgc2FtZSBhcyAtSAogICAgICAgICAgICAgIGhpc3RvcnkgICAgICBlbmFibGUgY29tbWFuZCBoaXN0b3J5CiAgICAgICAgICAgICAgaWdub3JlZW9mICAgIHRoZSBzaGVsbCB3aWxsIG5vdCBleGl0IHVwb24gcmVhZGluZyBFT0YKICAgICAgICAgICAgICBpbnRlcmFjdGl2ZS1jb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyBjb21tZW50cyB0byBhcHBlYXIgaW4gaW50ZXJhY3RpdmUgY29tbWFuZHMKICAgICAgICAgICAgICBrZXl3b3JkICAgICAgc2FtZSBhcyAtawogICAgICAgICAgICAgIG1vbml0b3IgICAgICBzYW1lIGFzIC1tCiAgICAgICAgICAgICAgbm9jbG9iYmVyICAgIHNhbWUgYXMgLUMKICAgICAgICAgICAgICBub2V4ZWMgICAgICAgc2FtZSBhcyAtbgogICAgICAgICAgICAgIG5vZ2xvYiAgICAgICBzYW1lIGFzIC1mCiAgICAgICAgICAgICAgbm9sb2cgICAgICAgIGN1cnJlbnRseSBhY2NlcHRlZCBidXQgaWdub3JlZAogICAgICAgICAgICAgIG5vdGlmeSAgICAgICBzYW1lIGFzIC1iCiAgICAgICAgICAgICAgbm91bnNldCAgICAgIHNhbWUgYXMgLXUKICAgICAgICAgICAgICBvbmVjbWQgICAgICAgc2FtZSBhcyAtdAogICAgICAgICAgICAgIHBoeXNpY2FsICAgICBzYW1lIGFzIC1QCiAgICAgICAgICAgICAgcGlwZWZhaWwgICAgIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBwaXBlbGluZSBpcyB0aGUgc3RhdHVzIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGNvbW1hbmQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvciB6ZXJvIGlmIG5vIGNvbW1hbmQgZXhpdGVkIHdpdGggYSBub24temVybyBzdGF0dXMKICAgICAgICAgICAgICBwb3NpeCAgICAgICAgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBiYXNoIHdoZXJlIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gdGhlIFBvc2l4IHN0YW5kYXJkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgIHByaXZpbGVnZWQgICBzYW1lIGFzIC1wCiAgICAgICAgICAgICAgdmVyYm9zZSAgICAgIHNhbWUgYXMgLXYKICAgICAgICAgICAgICB2aSAgICAgICAgICAgdXNlIGEgdmktc3R5bGUgbGluZSBlZGl0aW5nIGludGVyZmFjZQogICAgICAgICAgICAgIHh0cmFjZSAgICAgICBzYW1lIGFzIC14CiAgICAgIC1wICBUdXJuZWQgb24gd2hlbmV2ZXIgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcyBkbyBub3QgbWF0Y2guCiAgICAgICAgICBEaXNhYmxlcyBwcm9jZXNzaW5nIG9mIHRoZSAkRU5WIGZpbGUgYW5kIGltcG9ydGluZyBvZiBzaGVsbAogICAgICAgICAgZnVuY3Rpb25zLiAgVHVybmluZyB0aGlzIG9wdGlvbiBvZmYgY2F1c2VzIHRoZSBlZmZlY3RpdmUgdWlkIGFuZAogICAgICAgICAgZ2lkIHRvIGJlIHNldCB0byB0aGUgcmVhbCB1aWQgYW5kIGdpZC4KICAgICAgLXQgIEV4aXQgYWZ0ZXIgcmVhZGluZyBhbmQgZXhlY3V0aW5nIG9uZSBjb21tYW5kLgogICAgICAtdSAgVHJlYXQgdW5zZXQgdmFyaWFibGVzIGFzIGFuIGVycm9yIHdoZW4gc3Vic3RpdHV0aW5nLgogICAgICAtdiAgUHJpbnQgc2hlbGwgaW5wdXQgbGluZXMgYXMgdGhleSBhcmUgcmVhZC4KICAgICAgLXggIFByaW50IGNvbW1hbmRzIGFuZCB0aGVpciBhcmd1bWVudHMgYXMgdGhleSBhcmUgZXhlY3V0ZWQuCiAgICAgIC1CICB0aGUgc2hlbGwgd2lsbCBwZXJmb3JtIGJyYWNlIGV4cGFuc2lvbgogICAgICAtQyAgSWYgc2V0LCBkaXNhbGxvdyBleGlzdGluZyByZWd1bGFyIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICBieSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuCiAgICAgIC1FICBJZiBzZXQsIHRoZSBFUlIgdHJhcCBpcyBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtSCAgRW5hYmxlICEgc3R5bGUgaGlzdG9yeSBzdWJzdGl0dXRpb24uICBUaGlzIGZsYWcgaXMgb24KICAgICAgICAgIGJ5IGRlZmF1bHQgd2hlbiB0aGUgc2hlbGwgaXMgaW50ZXJhY3RpdmUuCiAgICAgIC1QICBJZiBzZXQsIGRvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3Mgd2hlbiBleGVjdXRpbmcgY29tbWFuZHMKICAgICAgICAgIHN1Y2ggYXMgY2Qgd2hpY2ggY2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgICAgLVQgIElmIHNldCwgdGhlIERFQlVHIHRyYXAgaXMgaW5oZXJpdGVkIGJ5IHNoZWxsIGZ1bmN0aW9ucy4KICAgICAgLS0gIEFzc2lnbiBhbnkgcmVtYWluaW5nIGFyZ3VtZW50cyB0byB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgICAgICAgSWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBhcmd1bWVudHMsIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKICAgICAgICAgIGFyZSB1bnNldC4KICAgICAgLSAgIEFzc2lnbiBhbnkgcmVtYWluaW5nIGFyZ3VtZW50cyB0byB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgICAgICAgVGhlIC14IGFuZCAtdiBvcHRpb25zIGFyZSB0dXJuZWQgb2ZmLgogICAgCiAgICBVc2luZyArIHJhdGhlciB0aGFuIC0gY2F1c2VzIHRoZXNlIGZsYWdzIHRvIGJlIHR1cm5lZCBvZmYuICBUaGUKICAgIGZsYWdzIGNhbiBhbHNvIGJlIHVzZWQgdXBvbiBpbnZvY2F0aW9uIG9mIHRoZSBzaGVsbC4gIFRoZSBjdXJyZW50CiAgICBzZXQgb2YgZmxhZ3MgbWF5IGJlIGZvdW5kIGluICQtLiAgVGhlIHJlbWFpbmluZyBuIEFSR3MgYXJlIHBvc2l0aW9uYWwKICAgIHBhcmFtZXRlcnMgYW5kIGFyZSBhc3NpZ25lZCwgaW4gb3JkZXIsIHRvICQxLCAkMiwgLi4gJG4uICBJZiBubwogICAgQVJHcyBhcmUgZ2l2ZW4sIGFsbCBzaGVsbCB2YXJpYWJsZXMgYXJlIHByaW50ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4AU2V0IHZhcmlhYmxlIHZhbHVlcyBhbmQgYXR0cmlidXRlcy4KICAgIAogICAgRGVjbGFyZSB2YXJpYWJsZXMgYW5kIGdpdmUgdGhlbSBhdHRyaWJ1dGVzLiAgSWYgbm8gTkFNRXMgYXJlIGdpdmVuLAogICAgZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXJlc3RyaWN0IGFjdGlvbiBvciBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIGFuZCBkZWZpbml0aW9ucwogICAgICAtRglyZXN0cmljdCBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIG9ubHkgKHBsdXMgbGluZSBudW1iZXIgYW5kCiAgICAJc291cmNlIGZpbGUgd2hlbiBkZWJ1Z2dpbmcpCiAgICAgIC1nCWNyZWF0ZSBnbG9iYWwgdmFyaWFibGVzIHdoZW4gdXNlZCBpbiBhIHNoZWxsIGZ1bmN0aW9uOyBvdGhlcndpc2UKICAgIAlpZ25vcmVkCiAgICAgIC1wCWRpc3BsYXkgdGhlIGF0dHJpYnV0ZXMgYW5kIHZhbHVlIG9mIGVhY2ggTkFNRQogICAgCiAgICBPcHRpb25zIHdoaWNoIHNldCBhdHRyaWJ1dGVzOgogICAgICAtYQl0byBtYWtlIE5BTUVzIGluZGV4ZWQgYXJyYXlzIChpZiBzdXBwb3J0ZWQpCiAgICAgIC1BCXRvIG1ha2UgTkFNRXMgYXNzb2NpYXRpdmUgYXJyYXlzIChpZiBzdXBwb3J0ZWQpCiAgICAgIC1pCXRvIG1ha2UgTkFNRXMgaGF2ZSB0aGUg4oCYaW50ZWdlcuKAmSBhdHRyaWJ1dGUKICAgICAgLWwJdG8gY29udmVydCBOQU1FcyB0byBsb3dlciBjYXNlIG9uIGFzc2lnbm1lbnQKICAgICAgLXIJdG8gbWFrZSBOQU1FcyByZWFkb25seQogICAgICAtdAl0byBtYWtlIE5BTUVzIGhhdmUgdGhlIOKAmHRyYWNl4oCZIGF0dHJpYnV0ZQogICAgICAtdQl0byBjb252ZXJ0IE5BTUVzIHRvIHVwcGVyIGNhc2Ugb24gYXNzaWdubWVudAogICAgICAteAl0byBtYWtlIE5BTUVzIGV4cG9ydAogICAgCiAgICBVc2luZyDigJgr4oCZIGluc3RlYWQgb2Yg4oCYLeKAmSB0dXJucyBvZmYgdGhlIGdpdmVuIGF0dHJpYnV0ZS4KICAgIAogICAgVmFyaWFibGVzIHdpdGggdGhlIGludGVnZXIgYXR0cmlidXRlIGhhdmUgYXJpdGhtZXRpYyBldmFsdWF0aW9uIChzZWUKICAgIHRoZSDigJhsZXTigJkgY29tbWFuZCkgcGVyZm9ybWVkIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgdmFsdWUuCiAgICAKICAgIFdoZW4gdXNlZCBpbiBhIGZ1bmN0aW9uLCDigJhkZWNsYXJl4oCZIG1ha2VzIE5BTUVzIGxvY2FsLCBhcyB3aXRoIHRoZSDigJhsb2NhbOKAmQogICAgY29tbWFuZC4gIFRoZSDigJgtZ+KAmSBvcHRpb24gc3VwcHJlc3NlcyB0aGlzIGJlaGF2aW9yLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBPYnNvbGV0ZS4gIFNlZSDigJhoZWxwIGRlY2xhcmXigJkuAFNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmQgYABTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkcyBgAFNoZWxsIG9wdGlvbnM6CgBTaGlmdCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAKICAgIFJlbmFtZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzICROKzEsJE4rMiAuLi4gdG8gJDEsJDIgLi4uICBJZiBOIGlzCiAgICBub3QgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgMS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE4gaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuICQjLgBTaWduYWwgJWQAU3BlY2lmeSBob3cgYXJndW1lbnRzIGFyZSB0byBiZSBjb21wbGV0ZWQgYnkgUmVhZGxpbmUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIHNwZWNpZnkgaG93IGFyZ3VtZW50cyBhcmUgdG8gYmUgY29tcGxldGVkLiAgSWYgbm8gb3B0aW9ucwogICAgYXJlIHN1cHBsaWVkLCBleGlzdGluZyBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zIGFyZSBwcmludGVkIGluIGEgd2F5IHRoYXQKICAgIGFsbG93cyB0aGVtIHRvIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgZXhpc3RpbmcgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9ucyBpbiBhIHJldXNhYmxlIGZvcm1hdAogICAgICAtcglyZW1vdmUgYSBjb21wbGV0aW9uIHNwZWNpZmljYXRpb24gZm9yIGVhY2ggTkFNRSwgb3IsIGlmIG5vCiAgICAJTkFNRXMgYXJlIHN1cHBsaWVkLCBhbGwgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9ucwogICAgICAtRAlhcHBseSB0aGUgY29tcGxldGlvbnMgYW5kIGFjdGlvbnMgYXMgdGhlIGRlZmF1bHQgZm9yIGNvbW1hbmRzCiAgICAJd2l0aG91dCBhbnkgc3BlY2lmaWMgY29tcGxldGlvbiBkZWZpbmVkCiAgICAgIC1FCWFwcGx5IHRoZSBjb21wbGV0aW9ucyBhbmQgYWN0aW9ucyB0byDigJxlbXB0eeKAnSBjb21tYW5kcyAtLQogICAgCWNvbXBsZXRpb24gYXR0ZW1wdGVkIG9uIGEgYmxhbmsgbGluZQogICAgCiAgICBXaGVuIGNvbXBsZXRpb24gaXMgYXR0ZW1wdGVkLCB0aGUgYWN0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgdGhlCiAgICB1cHBlcmNhc2UtbGV0dGVyIG9wdGlvbnMgYXJlIGxpc3RlZCBhYm92ZS4gIFRoZSAtRCBvcHRpb24gdGFrZXMKICAgIHByZWNlZGVuY2Ugb3ZlciAtRS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkIG9yIGFuIGVycm9yIG9jY3Vycy4AU3RvcHBlZABTdG9wcGVkIChzaWduYWwpAFN0b3BwZWQgKHR0eSBpbnB1dCkAU3RvcHBlZCAodHR5IG91dHB1dCkAU3RvcHBlZCglcykAU3VzcGVuZCBzaGVsbCBleGVjdXRpb24uCiAgICAKICAgIFN1c3BlbmQgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHNoZWxsIHVudGlsIGl0IHJlY2VpdmVzIGEgU0lHQ09OVCBzaWduYWwuCiAgICBVbmxlc3MgZm9yY2VkLCBsb2dpbiBzaGVsbHMgY2Fubm90IGJlIHN1c3BlbmRlZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJZm9yY2UgdGhlIHN1c3BlbmQsIGV2ZW4gaWYgdGhlIHNoZWxsIGlzIGEgbG9naW4gc2hlbGwKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGpvYiBjb250cm9sIGlzIG5vdCBlbmFibGVkIG9yIGFuIGVycm9yIG9jY3Vycy4AVElNRUZPUk1BVDog4oCYJWPigJk6IGludmFsaWQgZm9ybWF0IGNoYXJhY3RlcgBUZXJtaW5hdGVkAFRoZSBtYWlsIGluICVzIGhhcyBiZWVuIHJlYWQKAFRoZXJlIGFyZSBydW5uaW5nIGpvYnMuCgBUaGVyZSBhcmUgc3RvcHBlZCBqb2JzLgoAVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KAFRoZXNlIHNoZWxsIGNvbW1hbmRzIGFyZSBkZWZpbmVkIGludGVybmFsbHkuICBUeXBlIOKAmGhlbHDigJkgdG8gc2VlIHRoaXMgbGlzdC4KVHlwZSDigJhoZWxwIG5hbWXigJkgdG8gZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgZnVuY3Rpb24g4oCYbmFtZeKAmS4KVXNlIOKAmGluZm8gYmFzaOKAmSB0byBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBzaGVsbCBpbiBnZW5lcmFsLgpVc2Ug4oCYbWFuIC1r4oCZIG9yIOKAmGluZm/igJkgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBjb21tYW5kcyBub3QgaW4gdGhpcyBsaXN0LgoKQSBzdGFyICgqKSBuZXh0IHRvIGEgbmFtZSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGlzIGRpc2FibGVkLgoKAFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgoAVHJhcCBzaWduYWxzIGFuZCBvdGhlciBldmVudHMuCiAgICAKICAgIERlZmluZXMgYW5kIGFjdGl2YXRlcyBoYW5kbGVycyB0byBiZSBydW4gd2hlbiB0aGUgc2hlbGwgcmVjZWl2ZXMgc2lnbmFscwogICAgb3Igb3RoZXIgY29uZGl0aW9ucy4KICAgIAogICAgQVJHIGlzIGEgY29tbWFuZCB0byBiZSByZWFkIGFuZCBleGVjdXRlZCB3aGVuIHRoZSBzaGVsbCByZWNlaXZlcyB0aGUKICAgIHNpZ25hbChzKSBTSUdOQUxfU1BFQy4gIElmIEFSRyBpcyBhYnNlbnQgKGFuZCBhIHNpbmdsZSBTSUdOQUxfU1BFQwogICAgaXMgc3VwcGxpZWQpIG9yIOKAmC3igJksIGVhY2ggc3BlY2lmaWVkIHNpZ25hbCBpcyByZXNldCB0byBpdHMgb3JpZ2luYWwKICAgIHZhbHVlLiAgSWYgQVJHIGlzIHRoZSBudWxsIHN0cmluZyBlYWNoIFNJR05BTF9TUEVDIGlzIGlnbm9yZWQgYnkgdGhlCiAgICBzaGVsbCBhbmQgYnkgdGhlIGNvbW1hbmRzIGl0IGludm9rZXMuCiAgICAKICAgIElmIGEgU0lHTkFMX1NQRUMgaXMgRVhJVCAoMCkgQVJHIGlzIGV4ZWN1dGVkIG9uIGV4aXQgZnJvbSB0aGUgc2hlbGwuICBJZgogICAgYSBTSUdOQUxfU1BFQyBpcyBERUJVRywgQVJHIGlzIGV4ZWN1dGVkIGJlZm9yZSBldmVyeSBzaW1wbGUgY29tbWFuZC4gIElmCiAgICBhIFNJR05BTF9TUEVDIGlzIFJFVFVSTiwgQVJHIGlzIGV4ZWN1dGVkIGVhY2ggdGltZSBhIHNoZWxsIGZ1bmN0aW9uIG9yIGEKICAgIHNjcmlwdCBydW4gYnkgdGhlIC4gb3Igc291cmNlIGJ1aWx0aW5zIGZpbmlzaGVzIGV4ZWN1dGluZy4gIEEgU0lHTkFMX1NQRUMKICAgIG9mIEVSUiBtZWFucyB0byBleGVjdXRlIEFSRyBlYWNoIHRpbWUgYSBjb21tYW5kJ3MgZmFpbHVyZSB3b3VsZCBjYXVzZSB0aGUKICAgIHNoZWxsIHRvIGV4aXQgd2hlbiB0aGUgLWUgb3B0aW9uIGlzIGVuYWJsZWQuCiAgICAKICAgIElmIG5vIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQsIHRyYXAgcHJpbnRzIHRoZSBsaXN0IG9mIGNvbW1hbmRzIGFzc29jaWF0ZWQKICAgIHdpdGggZWFjaCBzaWduYWwuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1sCXByaW50IGEgbGlzdCBvZiBzaWduYWwgbmFtZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbnVtYmVycwogICAgICAtcAlkaXNwbGF5IHRoZSB0cmFwIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFNJR05BTF9TUEVDCiAgICAKICAgIEVhY2ggU0lHTkFMX1NQRUMgaXMgZWl0aGVyIGEgc2lnbmFsIG5hbWUgaW4gPHNpZ25hbC5oPiBvciBhIHNpZ25hbCBudW1iZXIuCiAgICBTaWduYWwgbmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUgYW5kIHRoZSBTSUcgcHJlZml4IGlzIG9wdGlvbmFsLiAgQQogICAgc2lnbmFsIG1heSBiZSBzZW50IHRvIHRoZSBzaGVsbCB3aXRoIOKAnGtpbGwgLXNpZ25hbCAkJOKAnS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgU0lHU1BFQyBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBUeXBlIOKAmCVzIC1jIOKAnGhlbHAgc2V04oCd4oCZIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNoZWxsIG9wdGlvbnMuCgBUeXBlIOKAmCVzIC1jIGhlbHDigJkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2hlbGwgYnVpbHRpbiBjb21tYW5kcy4KAFVua25vd24gU2lnbmFsICMAVW5rbm93biBTaWduYWwgIyVkAFVua25vd24gZXJyb3IAVW5rbm93biBzdGF0dXMAVW5zZXQgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzIG9mIHNoZWxsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgogICAgCiAgICBGb3IgZWFjaCBOQU1FLCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgb3IgZnVuY3Rpb24uCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIGZ1bmN0aW9uCiAgICAgIC12CXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIHZhcmlhYmxlCiAgICAKICAgIFdpdGhvdXQgb3B0aW9ucywgdW5zZXQgZmlyc3QgdHJpZXMgdG8gdW5zZXQgYSB2YXJpYWJsZSwgYW5kIGlmIHRoYXQgZmFpbHMsCiAgICB0cmllcyB0byB1bnNldCBhIGZ1bmN0aW9uLgogICAgCiAgICBTb21lIHZhcmlhYmxlcyBjYW5ub3QgYmUgdW5zZXQ7IGFsc28gc2VlIOKAmHJlYWRvbmx54oCZLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYSBOQU1FIGlzIHJlYWQtb25seS4AVXJnZW50IElPIGNvbmRpdGlvbgBVc2FnZToJJXMgW0dOVSBsb25nIG9wdGlvbl0gW29wdGlvbl0gLi4uCgklcyBbR05VIGxvbmcgb3B0aW9uXSBbb3B0aW9uXSBzY3JpcHQtZmlsZSAuLi4KAFVzZSDigJwlc+KAnSB0byBsZWF2ZSB0aGUgc2hlbGwuCgBVc2UgdGhlIOKAmGJhc2hidWfigJkgY29tbWFuZCB0byByZXBvcnQgYnVncy4KAFVzZXIgc2lnbmFsIDEAVXNlciBzaWduYWwgMgBXYWl0IGZvciBqb2IgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgdGhlIHByb2Nlc3MgaWRlbnRpZmllZCBieSBJRCwgd2hpY2ggbWF5IGJlIGEgcHJvY2VzcyBJRCBvciBhCiAgICBqb2Igc3BlY2lmaWNhdGlvbiwgYW5kIHJlcG9ydHMgaXRzIHRlcm1pbmF0aW9uIHN0YXR1cy4gIElmIElEIGlzIG5vdAogICAgZ2l2ZW4sIHdhaXRzIGZvciBhbGwgY3VycmVudGx5IGFjdGl2ZSBjaGlsZCBwcm9jZXNzZXMsIGFuZCB0aGUgcmV0dXJuCiAgICBzdGF0dXMgaXMgemVyby4gIElmIElEIGlzIGEgYSBqb2Igc3BlY2lmaWNhdGlvbiwgd2FpdHMgZm9yIGFsbCBwcm9jZXNzZXMKICAgIGluIHRoZSBqb2IncyBwaXBlbGluZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgSUQ7IGZhaWxzIGlmIElEIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMKICAgIGdpdmVuLgBXYWl0IGZvciBwcm9jZXNzIGNvbXBsZXRpb24gYW5kIHJldHVybiBleGl0IHN0YXR1cy4KICAgIAogICAgV2FpdHMgZm9yIHRoZSBzcGVjaWZpZWQgcHJvY2VzcyBhbmQgcmVwb3J0cyBpdHMgdGVybWluYXRpb24gc3RhdHVzLiAgSWYKICAgIFBJRCBpcyBub3QgZ2l2ZW4sIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNoaWxkIHByb2Nlc3NlcyBhcmUgd2FpdGVkIGZvciwKICAgIGFuZCB0aGUgcmV0dXJuIGNvZGUgaXMgemVyby4gIFBJRCBtdXN0IGJlIGEgcHJvY2VzcyBJRC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgSUQ7IGZhaWxzIGlmIElEIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMKICAgIGdpdmVuLgBXaW5kb3cgY2hhbmdlZABXcml0ZSBhcmd1bWVudHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KICAgIAogICAgRGlzcGxheSB0aGUgQVJHcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JZG8gbm90IGFwcGVuZCBhIG5ld2xpbmUKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgd3JpdGUgZXJyb3Igb2NjdXJzLgBXcml0ZSBhcmd1bWVudHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KICAgIAogICAgRGlzcGxheSB0aGUgQVJHcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JZG8gbm90IGFwcGVuZCBhIG5ld2xpbmUKICAgICAgLWUJZW5hYmxlIGludGVycHJldGF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgYmFja3NsYXNoIGVzY2FwZXMKICAgICAgLUUJZXhwbGljaXRseSBzdXBwcmVzcyBpbnRlcnByZXRhdGlvbiBvZiBiYWNrc2xhc2ggZXNjYXBlcwogICAgCiAgICDigJhlY2hv4oCZIGludGVycHJldHMgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2gtZXNjYXBlZCBjaGFyYWN0ZXJzOgogICAgICBcYQlhbGVydCAoYmVsbCkKICAgICAgXGIJYmFja3NwYWNlCiAgICAgIFxjCXN1cHByZXNzIGZ1cnRoZXIgb3V0cHV0CiAgICAgIFxlCWVzY2FwZSBjaGFyYWN0ZXIKICAgICAgXGYJZm9ybSBmZWVkCiAgICAgIFxuCW5ldyBsaW5lCiAgICAgIFxyCWNhcnJpYWdlIHJldHVybgogICAgICBcdAlob3Jpem9udGFsIHRhYgogICAgICBcdgl2ZXJ0aWNhbCB0YWIKICAgICAgXFwJYmFja3NsYXNoCiAgICAgIFwwbm5uCXRoZSBjaGFyYWN0ZXIgd2hvc2UgQVNDSUkgY29kZSBpcyBOTk4gKG9jdGFsKS4gIE5OTiBjYW4gYmUKICAgIAkwIHRvIDMgb2N0YWwgZGlnaXRzCiAgICAgIFx4SEgJdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgSEggKGhleGFkZWNpbWFsKS4gIEhICiAgICAJY2FuIGJlIG9uZSBvciB0d28gaGV4IGRpZ2l0cwogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYSB3cml0ZSBlcnJvciBvY2N1cnMuAFlvdSBoYXZlIG1haWwgaW4gJF8AWW91IGhhdmUgbmV3IG1haWwgaW4gJF8AWyBhcmcuLi4gXQBbWyBleHByZXNzaW9uIF1dAOKAmCVj4oCZOiBiYWQgY29tbWFuZADigJglY+KAmTogaW52YWxpZCBmb3JtYXQgY2hhcmFjdGVyAOKAmCVj4oCZOiBpbnZhbGlkIHN5bWJvbGljIG1vZGUgY2hhcmFjdGVyAOKAmCVj4oCZOiBpbnZhbGlkIHN5bWJvbGljIG1vZGUgb3BlcmF0b3IA4oCYJWPigJk6IGludmFsaWQgdGltZSBmb3JtYXQgc3BlY2lmaWNhdGlvbgDigJglc+KAmTogY2Fubm90IHVuYmluZADigJglc+KAmTogaW52YWxpZCBhbGlhcyBuYW1lAOKAmCVz4oCZOiBpbnZhbGlkIGtleW1hcCBuYW1lAOKAmCVz4oCZOiBtaXNzaW5nIGZvcm1hdCBjaGFyYWN0ZXIA4oCYJXPigJk6IG5vdCBhIHBpZCBvciB2YWxpZCBqb2Igc3BlYwDigJglc+KAmTogbm90IGEgdmFsaWQgaWRlbnRpZmllcgDigJglc+KAmTogdW5rbm93biBmdW5jdGlvbiBuYW1lAOKAmCnigJkgZXhwZWN0ZWQA4oCYKeKAmSBleHBlY3RlZCwgZm91bmQgJXMA4oCYOuKAmSBleHBlY3RlZCBmb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgBhZGRfcHJvY2VzczogcGlkICU1bGQgKCVzKSBtYXJrZWQgYXMgc3RpbGwgYWxpdmUAYWRkX3Byb2Nlc3M6IHByb2Nlc3MgJTVsZCAoJXMpIGluIHRoZV9waXBlbGluZQBhbGlhcyBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uIF0AYWxsX2xvY2FsX3ZhcmlhYmxlczogbm8gZnVuY3Rpb24gY29udGV4dCBhdCBjdXJyZW50IHNjb3BlAGFyZ3VtZW50AGFyZ3VtZW50IGV4cGVjdGVkAGFycmF5IHZhcmlhYmxlIHN1cHBvcnQgcmVxdWlyZWQAYXR0ZW1wdGVkIGFzc2lnbm1lbnQgdG8gbm9uLXZhcmlhYmxlAGJhZCBhcnJheSBzdWJzY3JpcHQAYmFkIGNvbW1hbmQgdHlwZQBiYWQgY29ubmVjdG9yAGJhZCBqdW1wAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3Npbmcg4oCcYOKAnSBpbiAlcwBiYWQgc3Vic3RpdHV0aW9uOiBubyBjbG9zaW5nIOKAmCVz4oCZIGluICVzAGJhc2hfZXhlY3V0ZV91bml4X2NvbW1hbmQ6IGNhbm5vdCBmaW5kIGtleW1hcCBmb3IgY29tbWFuZABiZyBbam9iX3NwZWMgLi4uXQBiaW5kIFstbHB2c1BWU10gWy1tIGtleW1hcF0gWy1mIGZpbGVuYW1lXSBbLXEgbmFtZV0gWy11IG5hbWVdIFstciBrZXlzZXFdIFsteCBrZXlzZXE6c2hlbGwtY29tbWFuZF0gW2tleXNlcTpyZWFkbGluZS1mdW5jdGlvbiBvciByZWFkbGluZS1jb21tYW5kXQBicmVhayBbbl0AYnVnOiBiYWQgZXhwYXNzaWduIHRva2VuAGJ1aWx0aW4gW3NoZWxsLWJ1aWx0aW4gW2FyZyAuLi5dXQBjYWxsZXIgW2V4cHJdAGNhbiBvbmx5IOKAmHJldHVybuKAmSBmcm9tIGEgZnVuY3Rpb24gb3Igc291cmNlZCBzY3JpcHQAY2FuIG9ubHkgYmUgdXNlZCBpbiBhIGZ1bmN0aW9uAGNhbm5vdCBhbGxvY2F0ZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGZvciBiYXNoIGlucHV0IGZyb20gZmQgJWQAY2Fubm90IGNyZWF0ZSB0ZW1wIGZpbGUgZm9yIGhlcmUtZG9jdW1lbnQ6ICVzAGNhbm5vdCBkdXBsaWNhdGUgZmQgJWQgdG8gZmQgJWQAY2Fubm90IGR1cGxpY2F0ZSBuYW1lZCBwaXBlICVzIGFzIGZkICVkAGNhbm5vdCBmaW5kICVzIGluIHNoYXJlZCBvYmplY3QgJXM6ICVzAGNhbm5vdCBtYWtlIGNoaWxkIGZvciBjb21tYW5kIHN1YnN0aXR1dGlvbgBjYW5ub3QgbWFrZSBjaGlsZCBmb3IgcHJvY2VzcyBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgcGlwZSBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgcGlwZSBmb3IgcHJvY2VzcyBzdWJzdGl0dXRpb24AY2Fubm90IG9wZW4gbmFtZWQgcGlwZSAlcyBmb3IgcmVhZGluZwBjYW5ub3Qgb3BlbiBuYW1lZCBwaXBlICVzIGZvciB3cml0aW5nAGNhbm5vdCBvcGVuIHNoYXJlZCBvYmplY3QgJXM6ICVzAGNhbm5vdCByZWRpcmVjdCBzdGFuZGFyZCBpbnB1dCBmcm9tIC9kZXYvbnVsbDogJXMAY2Fubm90IHJlc2V0IG5vZGVsYXkgbW9kZSBmb3IgZmQgJWQAY2Fubm90IHNldCBhbmQgdW5zZXQgc2hlbGwgb3B0aW9ucyBzaW11bHRhbmVvdXNseQBjYW5ub3Qgc2V0IHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgKCVkKQBjYW5ub3Qgc2ltdWx0YW5lb3VzbHkgdW5zZXQgYSBmdW5jdGlvbiBhbmQgYSB2YXJpYWJsZQBjYW5ub3Qgc3VzcGVuZABjYW5ub3Qgc3VzcGVuZCBhIGxvZ2luIHNoZWxsAGNhbm5vdCB1c2Ug4oCYLWbigJkgdG8gbWFrZSBmdW5jdGlvbnMAY2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIG9mIC1hbnJ3AGNhc2UgV09SRCBpbiBbUEFUVEVSTiBbfCBQQVRURVJOXS4uLikgQ09NTUFORFMgOztdLi4uIGVzYWMAY2QgWy1MfFstUCBbLWVdXV0gW2Rpcl0AY2hpbGQgc2V0cGdpZCAoJWxkIHRvICVsZCkAY29tbWFuZCBbLXBWdl0gY29tbWFuZCBbYXJnIC4uLl0AY29tbWFuZF9zdWJzdGl0dXRlOiBjYW5ub3QgZHVwbGljYXRlIHBpcGUgYXMgZmQgMQBjb21wZ2VuIFstYWJjZGVmZ2prc3V2XSBbLW8gb3B0aW9uXSAgWy1BIGFjdGlvbl0gWy1HIGdsb2JwYXRdIFstVyB3b3JkbGlzdF0gIFstRiBmdW5jdGlvbl0gWy1DIGNvbW1hbmRdIFstWCBmaWx0ZXJwYXRdIFstUCBwcmVmaXhdIFstUyBzdWZmaXhdIFt3b3JkXQBjb21wbGV0ZSBbLWFiY2RlZmdqa3N1dl0gWy1wcl0gWy1ERV0gWy1vIG9wdGlvbl0gWy1BIGFjdGlvbl0gWy1HIGdsb2JwYXRdIFstVyB3b3JkbGlzdF0gIFstRiBmdW5jdGlvbl0gWy1DIGNvbW1hbmRdIFstWCBmaWx0ZXJwYXRdIFstUCBwcmVmaXhdIFstUyBzdWZmaXhdIFtuYW1lIC4uLl0AY29tcGxldGlvbjogZnVuY3Rpb24g4oCYJXPigJkgbm90IGZvdW5kAGNvbXBvcHQgWy1vfCtvIG9wdGlvbl0gWy1ERV0gW25hbWUgLi4uXQBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAY29udGludWUgW25dAGNvcHJvYyBbTkFNRV0gY29tbWFuZCBbcmVkaXJlY3Rpb25zXQBjb3VsZCBub3QgZmluZCAvdG1wLCBwbGVhc2UgY3JlYXRlIQBjcHJpbnRmOiDigJglY+KAmTogaW52YWxpZCBmb3JtYXQgY2hhcmFjdGVyAGN1cnJlbnQAZGVjbGFyZSBbLWFBZkZnaWxydHV4XSBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uXQBkZWxldGluZyBzdG9wcGVkIGpvYiAlZCB3aXRoIHByb2Nlc3MgZ3JvdXAgJWxkAGRlc2NyaWJlX3BpZDogJWxkOiBubyBzdWNoIHBpZABkaXJlY3Rvcnkgc3RhY2sgZW1wdHkAZGlyZWN0b3J5IHN0YWNrIGluZGV4AGRpcnMgWy1jbHB2XSBbK05dIFstTl0AZGlzb3duIFstaF0gWy1hcl0gW2pvYnNwZWMgLi4uXQBkaXZpc2lvbiBieSAwAGR5bmFtaWMgbG9hZGluZyBub3QgYXZhaWxhYmxlAGVjaG8gWy1uXSBbYXJnIC4uLl0AZWNobyBbLW5lRV0gW2FyZyAuLi5dAGVtcHR5IGFycmF5IHZhcmlhYmxlIG5hbWUAZW5hYmxlIFstYV0gWy1kbnBzXSBbLWYgZmlsZW5hbWVdIFtuYW1lIC4uLl0AZXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBhdHRyaWJ1dGVzOiAlcwBlcnJvciBpbXBvcnRpbmcgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3Ig4oCYJXPigJkAZXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBhdHRyaWJ1dGVzOiAlcwBldmFsIFthcmcgLi4uXQBleGVjIFstY2xdIFstYSBuYW1lXSBbY29tbWFuZCBbYXJndW1lbnRzIC4uLl1dIFtyZWRpcmVjdGlvbiAuLi5dAGV4aXQgW25dAGV4cGVjdGVkIOKAmCnigJkAZXhwb25lbnQgbGVzcyB0aGFuIDAAZXhwb3J0IFstZm5dIFtuYW1lWz12YWx1ZV0gLi4uXSBvciBleHBvcnQgLXAAZXhwcmVzc2lvbiBleHBlY3RlZABleHByZXNzaW9uIHJlY3Vyc2lvbiBsZXZlbCBleGNlZWRlZABmYWxzZQBmYyBbLWUgZW5hbWVdIFstbG5yXSBbZmlyc3RdIFtsYXN0XSBvciBmYyAtcyBbcGF0PXJlcF0gW2NvbW1hbmRdAGZnIFtqb2Jfc3BlY10AZmlsZSBkZXNjcmlwdG9yIG91dCBvZiByYW5nZQBmaWxlbmFtZSBhcmd1bWVudCByZXF1aXJlZABmb3IgKCggZXhwMTsgZXhwMjsgZXhwMyApKTsgZG8gQ09NTUFORFM7IGRvbmUAZm9yIE5BTUUgW2luIFdPUkRTIC4uLiBdIDsgZG8gQ09NTUFORFM7IGRvbmUAZm9ya2VkIHBpZCAlZCBhcHBlYXJzIGluIHJ1bm5pbmcgam9iICVkAGZyZWU6IGNhbGxlZCB3aXRoIGFscmVhZHkgZnJlZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAZnJlZTogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAGZ1bmN0aW9uIG5hbWUgeyBDT01NQU5EUyA7IH0gb3IgbmFtZSAoKSB7IENPTU1BTkRTIDsgfQBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIHNoZWxsIHdpbGwgZm9yY2UgZXZhbHVhdGlvbiBhcyBhbiBhcml0aG1ldGljIHN1YnN0aXR1dGlvbgBnZXRjd2Q6IGNhbm5vdCBhY2Nlc3MgcGFyZW50IGRpcmVjdG9yaWVzAGdldG9wdHMgb3B0c3RyaW5nIG5hbWUgW2FyZ10AaGFzaCBbLWxyXSBbLXAgcGF0aG5hbWVdIFstZHRdIFtuYW1lIC4uLl0AaGFzaGluZyBkaXNhYmxlZABoZWxwIFstZG1zXSBbcGF0dGVybiAuLi5dAGhlcmUtZG9jdW1lbnQgYXQgbGluZSAlZCBkZWxpbWl0ZWQgYnkgZW5kLW9mLWZpbGUgKHdhbnRlZCDigJglc+KAmSkAaGlzdG9yeSBbLWNdIFstZCBvZmZzZXRdIFtuXSBvciBoaXN0b3J5IC1hbnJ3IFtmaWxlbmFtZV0gb3IgaGlzdG9yeSAtcHMgYXJnIFthcmcuLi5dAGhpc3RvcnkgcG9zaXRpb24AaGlzdG9yeSBzcGVjaWZpY2F0aW9uAGhpdHMJY29tbWFuZAoAaWRlbnRpZmllciBleHBlY3RlZCBhZnRlciBwcmUtaW5jcmVtZW50IG9yIHByZS1kZWNyZW1lbnQAaWYgQ09NTUFORFM7IHRoZW4gQ09NTUFORFM7IFsgZWxpZiBDT01NQU5EUzsgdGhlbiBDT01NQU5EUzsgXS4uLiBbIGVsc2UgQ09NTUFORFM7IF0gZmkAaW5pdGlhbGl6ZV9qb2JfY29udHJvbDogZ2V0cGdycCBmYWlsZWQAaW5pdGlhbGl6ZV9qb2JfY29udHJvbDogbGluZSBkaXNjaXBsaW5lAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IHNldHBnaWQAaW52YWxpZCBhcml0aG1ldGljIGJhc2UAaW52YWxpZCBiYXNlAGludmFsaWQgY2hhcmFjdGVyICVkIGluIGV4cG9ydHN0ciBmb3IgJXMAaW52YWxpZCBoZXggbnVtYmVyAGludmFsaWQgbnVtYmVyAGludmFsaWQgb2N0YWwgbnVtYmVyAGludmFsaWQgc2lnbmFsIG51bWJlcgBqb2IgJWQgc3RhcnRlZCB3aXRob3V0IGpvYiBjb250cm9sAGpvYl9zcGVjIFsmXQBqb2JzIFstbG5wcnNdIFtqb2JzcGVjIC4uLl0gb3Igam9icyAteCBjb21tYW5kIFthcmdzXQBraWxsIFstcyBzaWdzcGVjIHwgLW4gc2lnbnVtIHwgLXNpZ3NwZWNdIHBpZCB8IGpvYnNwZWMgLi4uIG9yIGtpbGwgLWwgW3NpZ3NwZWNdAGxhc3QgY29tbWFuZDogJXMKAGxldCBhcmcgW2FyZyAuLi5dAGxpbWl0AGxpbmUgJWQ6IABsaW5lIGVkaXRpbmcgbm90IGVuYWJsZWQAbG9jYWwgW29wdGlvbl0gbmFtZVs9dmFsdWVdIC4uLgBsb2dvdXQKAGxvZ291dCBbbl0AbG9vcCBjb3VudABtYWtlX2hlcmVfZG9jdW1lbnQ6IGJhZCBpbnN0cnVjdGlvbiB0eXBlICVkAG1ha2VfbG9jYWxfdmFyaWFibGU6IG5vIGZ1bmN0aW9uIGNvbnRleHQgYXQgY3VycmVudCBzY29wZQBtYWtlX3JlZGlyZWN0aW9uOiByZWRpcmVjdGlvbiBpbnN0cnVjdGlvbiDigJglZOKAmSBvdXQgb2YgcmFuZ2UAbWFsbG9jOiBibG9jayBvbiBmcmVlIGxpc3QgY2xvYmJlcmVkAG1hbGxvYzogZmFpbGVkIGFzc2VydGlvbjogJXMKAG1hcGZpbGUgWy1uIGNvdW50XSBbLU8gb3JpZ2luXSBbLXMgY291bnRdIFstdF0gWy11IGZkXSBbLUMgY2FsbGJhY2tdIFstYyBxdWFudHVtXSBbYXJyYXldAG1pZ3JhdGUgcHJvY2VzcyB0byBhbm90aGVyIENQVQBtaXNzaW5nIOKAmCnigJkAbWlzc2luZyDigJhd4oCZAG1pc3NpbmcgaGV4IGRpZ2l0IGZvciBceABtaXNzaW5nIHVuaWNvZGUgZGlnaXQgZm9yIFwlYwBuZXR3b3JrIG9wZXJhdGlvbnMgbm90IHN1cHBvcnRlZABubyDigJg94oCZIGluIGV4cG9ydHN0ciBmb3IgJXMAbm8gY2xvc2luZyDigJglY+KAmSBpbiAlcwBubyBjb21tYW5kIGZvdW5kAG5vIGhlbHAgdG9waWNzIG1hdGNoIOKAmCVz4oCZLiAgVHJ5IOKAmGhlbHAgaGVscOKAmSBvciDigJhtYW4gLWsgJXPigJkgb3Ig4oCYaW5mbyAlc+KAmS4Abm8gam9iIGNvbnRyb2wAbm8gam9iIGNvbnRyb2wgaW4gdGhpcyBzaGVsbABubyBtYXRjaDogJXMAbm8gb3RoZXIgZGlyZWN0b3J5AG5vIG90aGVyIG9wdGlvbnMgYWxsb3dlZCB3aXRoIOKAmC144oCZAG5vdCBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbXBsZXRpb24gZnVuY3Rpb24Abm90IGxvZ2luIHNoZWxsOiB1c2Ug4oCYZXhpdOKAmQBvY3RhbCBudW1iZXIAb25seSBtZWFuaW5nZnVsIGluIGEg4oCYZm9y4oCZLCDigJh3aGlsZeKAmSwgb3Ig4oCYdW50aWzigJkgbG9vcABwaXBlIGVycm9yAHBvcF9zY29wZTogaGVhZCBvZiBzaGVsbF92YXJpYWJsZXMgbm90IGEgdGVtcG9yYXJ5IGVudmlyb25tZW50IHNjb3BlAHBvcF92YXJfY29udGV4dDogaGVhZCBvZiBzaGVsbF92YXJpYWJsZXMgbm90IGEgZnVuY3Rpb24gY29udGV4dABwb3BfdmFyX2NvbnRleHQ6IG5vIGdsb2JhbF92YXJpYWJsZXMgY29udGV4dABwb3BkIFstbl0gWytOIHwgLU5dAHBvd2VyIGZhaWx1cmUgaW1taW5lbnQAcHJpbnRfY29tbWFuZDogYmFkIGNvbm5lY3RvciDigJglZOKAmQBwcmludGYgWy12IHZhcl0gZm9ybWF0IFthcmd1bWVudHNdAHByb2djb21wX2luc2VydDogJXM6IE5VTEwgQ09NUFNQRUMAcHJvZ3JhbW1pbmcgZXJyb3IAcHVzaGQgWy1uXSBbK04gfCAtTiB8IGRpcl0AcHdkIFstTFBdAHJlYWQgWy1lcnNdIFstYSBhcnJheV0gWy1kIGRlbGltXSBbLWkgdGV4dF0gWy1uIG5jaGFyc10gWy1OIG5jaGFyc10gWy1wIHByb21wdF0gWy10IHRpbWVvdXRdIFstdSBmZF0gW25hbWUgLi4uXQByZWFkIGVycm9yOiAlZDogJXMAcmVhZGFycmF5IFstbiBjb3VudF0gWy1PIG9yaWdpbl0gWy1zIGNvdW50XSBbLXRdIFstdSBmZF0gWy1DIGNhbGxiYWNrXSBbLWMgcXVhbnR1bV0gW2FycmF5XQByZWFkb25seSBbLWFBZl0gW25hbWVbPXZhbHVlXSAuLi5dIG9yIHJlYWRvbmx5IC1wAHJlYWxsb2M6IGNhbGxlZCB3aXRoIHVuYWxsb2NhdGVkIGJsb2NrIGFyZ3VtZW50AHJlYWxsb2M6IHN0YXJ0IGFuZCBlbmQgY2h1bmsgc2l6ZXMgZGlmZmVyAHJlYWxsb2M6IHVuZGVyZmxvdyBkZXRlY3RlZDsgbWhfbmJ5dGVzIG91dCBvZiByYW5nZQByZWN1cnNpb24gc3RhY2sgdW5kZXJmbG93AHJlZGlyZWN0aW9uIGVycm9yOiBjYW5ub3QgZHVwbGljYXRlIGZkAHJlZ2lzdGVyX2FsbG9jOiAlcCBhbHJlYWR5IGluIHRhYmxlIGFzIGFsbG9jYXRlZD8KAHJlZ2lzdGVyX2FsbG9jOiBhbGxvYyB0YWJsZSBpcyBmdWxsIHdpdGggRklORF9BTExPQz8KAHJlZ2lzdGVyX2ZyZWU6ICVwIGFscmVhZHkgaW4gdGFibGUgYXMgZnJlZT8KAHJlc3RyaWN0ZWQAcmV0dXJuIFtuXQBydW5fcGVuZGluZ190cmFwczogYmFkIHZhbHVlIGluIHRyYXBfbGlzdFslZF06ICVwAHJ1bl9wZW5kaW5nX3RyYXBzOiBzaWduYWwgaGFuZGxlciBpcyBTSUdfREZMLCByZXNlbmRpbmcgJWQgKCVzKSB0byBteXNlbGYAc2F2ZV9iYXNoX2lucHV0OiBidWZmZXIgYWxyZWFkeSBleGlzdHMgZm9yIG5ldyBmZCAlZABzZWxlY3QgTkFNRSBbaW4gV09SRFMgLi4uIDtdIGRvIENPTU1BTkRTOyBkb25lAHNldCBbLWFiZWZoa21ucHR1dnhCQ0hQXSBbLW8gb3B0aW9uLW5hbWVdIFstLV0gW2FyZyAuLi5dAHNldGxvY2FsZTogJXM6IGNhbm5vdCBjaGFuZ2UgbG9jYWxlICglcykAc2V0bG9jYWxlOiAlczogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKTogJXMAc2V0bG9jYWxlOiBMQ19BTEw6IGNhbm5vdCBjaGFuZ2UgbG9jYWxlICglcykAc2V0bG9jYWxlOiBMQ19BTEw6IGNhbm5vdCBjaGFuZ2UgbG9jYWxlICglcyk6ICVzAHNoZWxsIGxldmVsICglZCkgdG9vIGhpZ2gsIHJlc2V0dGluZyB0byAxAHNoaWZ0IFtuXQBzaGlmdCBjb3VudABzaG9wdCBbLXBxc3VdIFstb10gW29wdG5hbWUgLi4uXQBzaWdwcm9jbWFzazogJWQ6IGludmFsaWQgb3BlcmF0aW9uAHNvdXJjZSBmaWxlbmFtZSBbYXJndW1lbnRzXQBzdGFydF9waXBlbGluZTogcGdycCBwaXBlAHN1c3BlbmQgWy1mXQBzeW50YXggZXJyb3IAc3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb246IHVuZXhwZWN0ZWQgdG9rZW4g4oCYJXPigJkAc3ludGF4IGVycm9yIGluIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIG5lYXIg4oCYJXPigJkAc3ludGF4IGVycm9yIG5lYXIgdW5leHBlY3RlZCB0b2tlbiDigJglc+KAmQBzeW50YXggZXJyb3I6IOKAmCgoJXMpKeKAmQBzeW50YXggZXJyb3I6IOKAmDvigJkgdW5leHBlY3RlZABzeW50YXggZXJyb3I6IGFyaXRobWV0aWMgZXhwcmVzc2lvbiByZXF1aXJlZABzeW50YXggZXJyb3I6IGludmFsaWQgYXJpdGhtZXRpYyBvcGVyYXRvcgBzeW50YXggZXJyb3I6IG9wZXJhbmQgZXhwZWN0ZWQAc3ludGF4IGVycm9yOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlAHN5c3RlbSBjcmFzaCBpbW1pbmVudAB0ZXN0IFtleHByXQB0aW1lIFstcF0gcGlwZWxpbmUAdGltZXMAdG9vIG1hbnkgYXJndW1lbnRzAHRyYXAgWy1scF0gW1thcmddIHNpZ25hbF9zcGVjIC4uLl0AdHJhcF9oYW5kbGVyOiBiYWQgc2lnbmFsICVkAHRydWUAdHlwZSBbLWFmcHRQXSBuYW1lIFtuYW1lIC4uLl0AdHlwZXNldCBbLWFBZkZnaWxydHV4XSBbLXBdIG5hbWVbPXZhbHVlXSAuLi4AdWxpbWl0IFstU0hhY2RlZmlsbW5wcXJzdHV2eF0gW2xpbWl0XQB1bWFzayBbLXBdIFstU10gW21vZGVdAHVuYWxpYXMgWy1hXSBuYW1lIFtuYW1lIC4uLl0AdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3Ig4oCYXV3igJkAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcg4oCYJWPigJkAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcg4oCYKeKAmQB1bmV4cGVjdGVkIGFyZ3VtZW50IOKAmCVz4oCZIHRvIGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIGFyZ3VtZW50IOKAmCVz4oCZIHRvIGNvbmRpdGlvbmFsIHVuYXJ5IG9wZXJhdG9yAHVuZXhwZWN0ZWQgYXJndW1lbnQgdG8gY29uZGl0aW9uYWwgYmluYXJ5IG9wZXJhdG9yAHVuZXhwZWN0ZWQgYXJndW1lbnQgdG8gY29uZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCB0b2tlbiAlZCBpbiBjb25kaXRpb25hbCBjb21tYW5kAHVuZXhwZWN0ZWQgdG9rZW4g4oCYJWPigJkgaW4gY29uZGl0aW9uYWwgY29tbWFuZAB1bmV4cGVjdGVkIHRva2VuIOKAmCVz4oCZIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiDigJglc+KAmSwgY29uZGl0aW9uYWwgYmluYXJ5IG9wZXJhdG9yIGV4cGVjdGVkAHVuZXhwZWN0ZWQgdG9rZW4g4oCYJXPigJksIGV4cGVjdGVkIOKAmCnigJkAdW5rbm93bgB1bmtub3duIGNvbW1hbmQgZXJyb3IAdW5zZXQgWy1mXSBbLXZdIFtuYW1lIC4uLl0AdW50aWwgQ09NTUFORFM7IGRvIENPTU1BTkRTOyBkb25lAHZhbHVlIHRvbyBncmVhdCBmb3IgYmFzZQB2YXJpYWJsZXMgLSBOYW1lcyBhbmQgbWVhbmluZ3Mgb2Ygc29tZSBzaGVsbCB2YXJpYWJsZXMAd2FpdCBbaWRdAHdhaXQgW3BpZF0Ad2FpdDogcGlkICVsZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNoZWxsAHdhaXRfZm9yOiBObyByZWNvcmQgb2YgcHJvY2VzcyAlbGQAd2FpdF9mb3Jfam9iOiBqb2IgJWQgaXMgc3RvcHBlZAB3YWl0Y2hsZDogdHVybmluZyBvbiBXTk9IQU5HIHRvIGF2b2lkIGluZGVmaW5pdGUgYmxvY2sAd2FybmluZzogAHdhcm5pbmc6ICVzOiAlcwB3YXJuaW5nOiAtQyBvcHRpb24gbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QAd2FybmluZzogLUYgb3B0aW9uIG1heSBub3Qgd29yayBhcyB5b3UgZXhwZWN0AHdoaWxlIENPTU1BTkRTOyBkbyBDT01NQU5EUzsgZG9uZQB3cml0ZSBlcnJvcjogJXMAeHRyYWNlIGZkICglZCkgIT0gZmlsZW5vIHh0cmFjZSBmcCAoJWQpAHh0cmFjZV9zZXQ6ICVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgB4dHJhY2Vfc2V0OiBOVUxMIGZpbGUgcG9pbnRlcgB7IENPTU1BTkRTIDsgfQA=