LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBCcmV0b24gKEZyYW5jZSkKICoKICogQ29weXJpZ2h0IDE5OTggTWFyY2VsIEJhdXIKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2Rld2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19CUkVUT04sIFNVQkxBTkdfREVGQVVMVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDAwMmZceDgwMDBceDM4MDhceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDFceDAwMDBceDAwMDBceDQwMDBceDAwMTNceDAwMDBceDAwMDBceGM1ZDQiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiMzMiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjMiCiAgTE9DQUxFX0lEQVRFICIxIgogIExPQ0FMRV9JREFZTFpFUk8gIjAiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjUyIgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI4NTAiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiMzMiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjIwMjk3IgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDBjIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwMCIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDkzIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjgiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICIiCiAgTE9DQUxFX1MyMzU5ICIiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiRlJBIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIkx1biIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICJNZXUiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAiTWVyIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIllhbyIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICJHd2UiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAiU2FkIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIlN1bCIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJCUkYiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICJHZW4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICJDJ2giCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICJNZXUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICJFYnIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICJNYWUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICJNZXoiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICJHb3UiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICJFb3MiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICJHd2UiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAiSGVyIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIkR1IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIktlciIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJGcmFuY2UiCiAgTE9DQUxFX1NDVVJSRU5DWSAigCIKICBMT0NBTEVfU0RBVEUgIi8iCiAgTE9DQUxFX1NEQVlOQU1FMSAiTHVuIgogIExPQ0FMRV9TREFZTkFNRTIgIk1ldXJ6aCIKICBMT0NBTEVfU0RBWU5BTUUzICJNZXJjJ2hlciIKICBMT0NBTEVfU0RBWU5BTUU0ICJZYW91IgogIExPQ0FMRV9TREFZTkFNRTUgIkd3ZW5lciIKICBMT0NBTEVfU0RBWU5BTUU2ICJTYWRvcm4iCiAgTE9DQUxFX1NEQVlOQU1FNyAiU3VsIgogIExPQ0FMRV9TREVDSU1BTCAiLCIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIkZyYW5jZSIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJFdXJvIgogIExPQ0FMRV9TRU5HTEFOR1VBR0UgIkJyZXRvbiIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJFVVIiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIkZSIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgImJyIgogIExPQ0FMRV9TTEFOR1VBR0UgIkJyZXpob25lZyIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAiZGRkZCBkIE1NTU0geXl5eSIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIiwiCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAiR2VudmVyIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAiQydod2V2cmVyIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAiTWV1cnpoIgogIExPQ0FMRV9TTU9OVEhOQU1FNCAiRWJyZWwiCiAgTE9DQUxFX1NNT05USE5BTUU1ICJNYWUiCiAgTE9DQUxFX1NNT05USE5BTUU2ICJNZXpoZXZlbiIKICBMT0NBTEVfU01PTlRITkFNRTcgIkdvdWVyZSIKICBMT0NBTEVfU01PTlRITkFNRTggIkVvc3QiCiAgTE9DQUxFX1NNT05USE5BTUU5ICJHd2VuZ29sbyIKICBMT0NBTEVfU01PTlRITkFNRTEwICJIZXJlIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIkR1IgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIktlcnp1IgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICKgIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIkJyby1DJ2hhaWxsIgogIExPQ0FMRV9TTkFUSVZFQ1VSUk5BTUUgIiIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICJCcmV6aG9uZWciCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQvTU0veXl5eSIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIqAiCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSEg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSIKfQo=