UG9wcGluczo1MDA=
LnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9IjE0NDk5ZWNjNTNjNDIyODA2ZDdlYjgyYzkyY2M3MDYxIl0geyBib3JkZXItcmFkaXVzOiAyMHB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHJnYmEoIDIzMiwgMjIyLCAyNDUsIDAuMDIgKSxyZ2JhKCAyMzIsIDIyMiwgMjQ1LCAwLjAyICkpLCAgcmdiYSggMjU1LCAyNTUsIDI1NSwgMCApIHVybCgnaHR0cHM6Ly9wdGMud3BtbC5vcmcvd3AtY29udGVudC91cGxvYWRzLzIwMjQvMDIvSGVyby1iZy1taW4ucG5nJykgY2VudGVyIHRvcCBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmF1dG8sIGNvdmVyO3BhZGRpbmc6IDBweDttYXJnaW4tdG9wOiA0OHB4O21hcmdpbi1ib3R0b206IDQ4cHg7IH0gLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9IjU5OTAzOTA4YTkwZTFkYWJlODM1MmQ2ZGFiMmQ0YjhjIl0geyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAyMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAyMHB4O2JhY2tncm91bmQ6IHVybCgnaHR0cHM6Ly9wdGMud3BtbC5vcmcvd3AtY29udGVudC91cGxvYWRzLzIwMjQvMDIvQm9yZGVyLW1pbi5wbmcnKSBjZW50ZXIgYm90dG9tIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtwYWRkaW5nOiAwcHg7bWluLWhlaWdodDogMnB4O2Rpc3BsYXk6bXMtZmxleGJveCAhaW1wb3J0YW50O2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7IH0gLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9IjE1NDA2Y2ViNzVmNTg4ZTBjMjdjYWZhY2MzZWVjZGY4Il0geyBwYWRkaW5nOiA0OHB4OyB9IC50Yi1idXR0b257Y29sb3I6I2YxZjFmMX0udGItYnV0dG9uLS1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGItYnV0dG9uLS1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRiLWJ1dHRvbi0tcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGItYnV0dG9uX19saW5re2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTAwJTt0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZX0udGItYnV0dG9uX19saW5rOmhvdmVyLC50Yi1idXR0b25fX2xpbms6Zm9jdXMsLnRiLWJ1dHRvbl9fbGluazp2aXNpdGVke2NvbG9yOmluaGVyaXR9LnRiLWJ1dHRvbl9fbGluazpob3ZlciAudGItYnV0dG9uX19jb250ZW50LC50Yi1idXR0b25fX2xpbms6Zm9jdXMgLnRiLWJ1dHRvbl9fY29udGVudCwudGItYnV0dG9uX19saW5rOnZpc2l0ZWQgLnRiLWJ1dHRvbl9fY29udGVudHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1zaGFkb3c6aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0fS50Yi1idXR0b25fX2NvbnRlbnR7dmVydGljYWwtYWxpZ246bWlkZGxlO3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZX0udGItYnV0dG9uX19pY29ue3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zdHlsZTpub3JtYWwgIWltcG9ydGFudH0udGItYnV0dG9uX19pY29uOjpiZWZvcmV7Y29udGVudDphdHRyKGRhdGEtZm9udC1jb2RlKTtmb250LXdlaWdodDpub3JtYWwgIWltcG9ydGFudH0udGItYnV0dG9uX19saW5re2JhY2tncm91bmQtY29sb3I6IzQ0NDtib3JkZXItcmFkaXVzOjAuM2VtO2ZvbnQtc2l6ZToxLjNlbTttYXJnaW4tYm90dG9tOjAuNzZlbTtwYWRkaW5nOjAuNTVlbSAxLjVlbSAwLjU1ZW19IC50Yi1idXR0b25bZGF0YS10b29sc2V0LWJsb2Nrcy1idXR0b249ImM0OGU5NDZlMTU1NTkwYWNiMTBhOGU3M2Y4ZmUxYzA5Il0gLnRiLWJ1dHRvbl9fbGluayB7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoIDIxMiwgMTgwLCAyNTMsIDEgKTtib3JkZXItcmFkaXVzOiAxMHB4O2NvbG9yOiByZ2JhKCAyMiwgMjYsIDI3LCAxICk7cGFkZGluZzogMTZweCAzMnB4IDE2cHggMzJweDttYXJnaW4tYm90dG9tOiAwcHg7Zm9udC1zaXplOiAxNnB4O2xpbmUtaGVpZ2h0OiAyNHB4O2ZvbnQtZmFtaWx5OiBQb3BwaW5zO2ZvbnQtd2VpZ2h0OiA1MDA7Y29sb3I6IHJnYmEoIDIyLCAyNiwgMjcsIDEgKTsgfSAudGItYnV0dG9uW2RhdGEtdG9vbHNldC1ibG9ja3MtYnV0dG9uPSJjNDhlOTQ2ZTE1NTU5MGFjYjEwYThlNzNmOGZlMWMwOSJdIC50Yi1idXR0b25fX2xpbms6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCAyNTUsIDI1NSwgMjU1LCAxICk7IH0gLnRiLWJ1dHRvbltkYXRhLXRvb2xzZXQtYmxvY2tzLWJ1dHRvbj0iYzQ4ZTk0NmUxNTU1OTBhY2IxMGE4ZTczZjhmZTFjMDkiXSAudGItYnV0dG9uX19pY29uIHsgZm9udC1mYW1pbHk6IGRhc2hpY29uczsgfSAudGItaGVhZGluZ1tkYXRhLXRvb2xzZXQtYmxvY2tzLWhlYWRpbmc9ImFjMDdmYzU3NDRiOTlkZDI0OWU1MDQxNzAxNTYwMThjIl0gIHsgZm9udC1zaXplOiAxN3B4O2xpbmUtaGVpZ2h0OiAzMHB4O2NvbG9yOiByZ2JhKCAyMDEsIDIyMywgMjMyLCAxICk7cGFkZGluZy10b3A6IDBweDtwYWRkaW5nLWJvdHRvbTogMHB4O21hcmdpbi10b3A6IDI0cHg7bWFyZ2luLWJvdHRvbTogMjRweDsgfSAgaDMudGItaGVhZGluZ1tkYXRhLXRvb2xzZXQtYmxvY2tzLWhlYWRpbmc9IjFjMzk2Y2M5NGUxOGUwMGM4NjVkMDEzZDgyMjYxZTdmIl0gIHsgY29sb3I6IHJnYmEoIDI1NSwgMjU1LCAyNTUsIDEgKTttYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTZweDsgfSAgLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9ImYxYzUyNTQ4MmQ2NGEwMjJhODRjODU0OWRmMGU3MWU3Il0geyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAyMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAyMHB4O2JhY2tncm91bmQ6IHVybCgnaHR0cHM6Ly9wdGMud3BtbC5vcmcvd3AtY29udGVudC91cGxvYWRzLzIwMjQvMDIvQm9yZGVyLW1pbi5wbmcnKSBjZW50ZXIgdG9wIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtwYWRkaW5nOiAwcHg7bWluLWhlaWdodDogMnB4O2Rpc3BsYXk6bXMtZmxleGJveCAhaW1wb3J0YW50O2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7IH0gLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9IjcyNmViOWI1YzIxNjE1NmVjYTFkN2JlYmUwYWE5ZTliIl0geyBib3JkZXItcmFkaXVzOiAyMHB4O3BhZGRpbmc6IDMycHggMzJweCAyMHB4IDMycHg7bWFyZ2luLXRvcDogNDhweDttYXJnaW4tYm90dG9tOiA0OHB4O2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoIDIwNSwgMTg5LCAyMjYsIDAuMiApOyB9IC50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99IC53cC1ibG9jay10b29sc2V0LWJsb2Nrcy1jb250YWluZXIudGItY29udGFpbmVyW2RhdGEtdG9vbHNldC1ibG9ja3MtY29udGFpbmVyPSI5YzlkYjE4YzgxMmY1NWU4YmVhY2FhMjcyNDU2MTg3YyJdIHsgcGFkZGluZzogMzJweCAzMnB4IDIwcHggMzJweDttYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMHB4OyB9IC50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9ImZiMjdjMjA1MGJjY2U1NjQ0MThiN2I4ZTkyOGFlNTJhIl0geyBiYWNrZ3JvdW5kOiB1cmwoJ2h0dHBzOi8vcHRjLndwbWwub3JnL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzAzL05vLTEucG5nJykgY2VudGVyIGNlbnRlciBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOiAyOHB4IDI4cHg7bWluLWhlaWdodDogMjhweDsgfSAudGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtY29udGFpbmVyLnRiLWNvbnRhaW5lcltkYXRhLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lcj0iNzlmNjliNTdkYjBhZGQxOGY0OTJmYjcwZDMwM2FlMDkiXSB7IGJvcmRlci1yYWRpdXM6IDIwcHg7cGFkZGluZzogMzJweCAzMnB4IDIwcHggMzJweDttYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMHB4O2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoIDIxMiwgMTgwLCAyNTMsIDEgKTsgfSAudGItZ3JpZCwudGItZ3JpZD4uYmxvY2stZWRpdG9yLWlubmVyLWJsb2Nrcz4uYmxvY2stZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dHtkaXNwbGF5OmdyaWQ7Z3JpZC1yb3ctZ2FwOjI1cHg7Z3JpZC1jb2x1bW4tZ2FwOjI1cHh9LnRiLWdyaWQtaXRlbXtiYWNrZ3JvdW5kOiNkMzhhMDM7cGFkZGluZzozMHB4fS50Yi1ncmlkLWNvbHVtbntmbGV4LXdyYXA6d3JhcH0udGItZ3JpZC1jb2x1bW4+Knt3aWR0aDoxMDAlfS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLXRvcHt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9LnRiLWdyaWQtY29sdW1uLnRiLWdyaWQtYWxpZ24tY2VudGVye3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2FsaWduLWNvbnRlbnQ6Y2VudGVyfS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLWJvdHRvbXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmZsZXgtZW5kfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC50Yi1ncmlkW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZD0iNGJiZThlYzBmZDg4NjA4MGI2NzdkYTRlMGEyNmM0YzMiXSB7IG1hcmdpbi1ib3R0b206IDI0cHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMC4wNDVmcikgbWlubWF4KDAsIDAuOTU1ZnIpO2dyaWQtY29sdW1uLWdhcDogMTJweDtncmlkLWF1dG8tZmxvdzogcm93IH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjRiYmU4ZWMwZmQ4ODYwODBiNjc3ZGE0ZTBhMjZjNGMzIl0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAxKSB7IGdyaWQtY29sdW1uOiAxIH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjRiYmU4ZWMwZmQ4ODYwODBiNjc3ZGE0ZTBhMjZjNGMzIl0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAyKSB7IGdyaWQtY29sdW1uOiAyIH0gLnRiLWhlYWRpbmdbZGF0YS10b29sc2V0LWJsb2Nrcy1oZWFkaW5nPSI2OWZlOWMyZWRkYmY0MmZhYzZjZDBlM2Y4ZGNhMjZkMiJdICB7IGZvbnQtc2l6ZTogMThweDtsaW5lLWhlaWdodDogMS42ZW07cGFkZGluZy10b3A6IDBweDtwYWRkaW5nLWJvdHRvbTogMHB4O21hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAwcHg7IH0gIC50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99IC53cC1ibG9jay10b29sc2V0LWJsb2Nrcy1jb250YWluZXIudGItY29udGFpbmVyW2RhdGEtdG9vbHNldC1ibG9ja3MtY29udGFpbmVyPSIzYWYwMDY5YThkYTVjMjc1ZDcwNGVkNmZiZjljMmRmNSJdIHsgYmFja2dyb3VuZDogdXJsKCdodHRwczovL3B0Yy53cG1sLm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wMy9ZZXMucG5nJykgY2VudGVyIGNlbnRlciBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOiAyOHB4IDI4cHg7bWluLWhlaWdodDogMjhweDsgfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW4udGItZ3JpZC1jb2x1bW5bZGF0YS10b29sc2V0LWJsb2Nrcy1ncmlkLWNvbHVtbj0iMzAzNGZiZTg4NmMxMTA1NGU5NWI0NmIwOWQzZTQxMTIiXSB7IGRpc3BsYXk6IGZsZXg7IH0gQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3ODFweCkgeyAudGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfS50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30udGItYnV0dG9ue2NvbG9yOiNmMWYxZjF9LnRiLWJ1dHRvbi0tbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRiLWJ1dHRvbi0tY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50Yi1idXR0b24tLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRiLWJ1dHRvbl9fbGlua3tjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjEwMCU7dGV4dC1kZWNvcmF0aW9uOm5vbmUgIWltcG9ydGFudDt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2V9LnRiLWJ1dHRvbl9fbGluazpob3ZlciwudGItYnV0dG9uX19saW5rOmZvY3VzLC50Yi1idXR0b25fX2xpbms6dmlzaXRlZHtjb2xvcjppbmhlcml0fS50Yi1idXR0b25fX2xpbms6aG92ZXIgLnRiLWJ1dHRvbl9fY29udGVudCwudGItYnV0dG9uX19saW5rOmZvY3VzIC50Yi1idXR0b25fX2NvbnRlbnQsLnRiLWJ1dHRvbl9fbGluazp2aXNpdGVkIC50Yi1idXR0b25fX2NvbnRlbnR7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXN0eWxlOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0O3RleHQtc2hhZG93OmluaGVyaXQ7dGV4dC10cmFuc2Zvcm06aW5oZXJpdH0udGItYnV0dG9uX19jb250ZW50e3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2V9LnRiLWJ1dHRvbl9faWNvbnt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2U7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtc3R5bGU6bm9ybWFsICFpbXBvcnRhbnR9LnRiLWJ1dHRvbl9faWNvbjo6YmVmb3Jle2NvbnRlbnQ6YXR0cihkYXRhLWZvbnQtY29kZSk7Zm9udC13ZWlnaHQ6bm9ybWFsICFpbXBvcnRhbnR9LnRiLWJ1dHRvbl9fbGlua3tiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7Ym9yZGVyLXJhZGl1czowLjNlbTtmb250LXNpemU6MS4zZW07bWFyZ2luLWJvdHRvbTowLjc2ZW07cGFkZGluZzowLjU1ZW0gMS41ZW0gMC41NWVtfSAgLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30udGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfS50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30udGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfS50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LnRiLWdyaWQsLnRiLWdyaWQ+LmJsb2NrLWVkaXRvci1pbm5lci1ibG9ja3M+LmJsb2NrLWVkaXRvci1ibG9jay1saXN0X19sYXlvdXR7ZGlzcGxheTpncmlkO2dyaWQtcm93LWdhcDoyNXB4O2dyaWQtY29sdW1uLWdhcDoyNXB4fS50Yi1ncmlkLWl0ZW17YmFja2dyb3VuZDojZDM4YTAzO3BhZGRpbmc6MzBweH0udGItZ3JpZC1jb2x1bW57ZmxleC13cmFwOndyYXB9LnRiLWdyaWQtY29sdW1uPip7d2lkdGg6MTAwJX0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi10b3B7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0fS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLWNlbnRlcnt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmNlbnRlcn0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi1ib3R0b217d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LWVuZH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjRiYmU4ZWMwZmQ4ODYwODBiNjc3ZGE0ZTBhMjZjNGMzIl0geyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAwLjA1ZnIpIG1pbm1heCgwLCAwLjk1ZnIpO2dyaWQtYXV0by1mbG93OiByb3cgfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC50Yi1ncmlkW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZD0iNGJiZThlYzBmZDg4NjA4MGI2NzdkYTRlMGEyNmM0YzMiXSA+IC50Yi1ncmlkLWNvbHVtbjpudGgtb2YtdHlwZSgybiArIDEpIHsgZ3JpZC1jb2x1bW46IDEgfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC50Yi1ncmlkW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZD0iNGJiZThlYzBmZDg4NjA4MGI2NzdkYTRlMGEyNmM0YzMiXSA+IC50Yi1ncmlkLWNvbHVtbjpudGgtb2YtdHlwZSgybiArIDIpIHsgZ3JpZC1jb2x1bW46IDIgfSAgLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30ud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW4udGItZ3JpZC1jb2x1bW5bZGF0YS10b29sc2V0LWJsb2Nrcy1ncmlkLWNvbHVtbj0iMzAzNGZiZTg4NmMxMTA1NGU5NWI0NmIwOWQzZTQxMTIiXSB7IGRpc3BsYXk6IGZsZXg7IH0gIH0gQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCkgeyAudGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfS50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lci50Yi1jb250YWluZXJbZGF0YS10b29sc2V0LWJsb2Nrcy1jb250YWluZXI9IjE1NDA2Y2ViNzVmNTg4ZTBjMjdjYWZhY2MzZWVjZGY4Il0geyBwYWRkaW5nOiA0MHB4IDI1cHggNDBweCAyNXB4OyB9IC50Yi1idXR0b257Y29sb3I6I2YxZjFmMX0udGItYnV0dG9uLS1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGItYnV0dG9uLS1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRiLWJ1dHRvbi0tcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGItYnV0dG9uX19saW5re2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTAwJTt0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZX0udGItYnV0dG9uX19saW5rOmhvdmVyLC50Yi1idXR0b25fX2xpbms6Zm9jdXMsLnRiLWJ1dHRvbl9fbGluazp2aXNpdGVke2NvbG9yOmluaGVyaXR9LnRiLWJ1dHRvbl9fbGluazpob3ZlciAudGItYnV0dG9uX19jb250ZW50LC50Yi1idXR0b25fX2xpbms6Zm9jdXMgLnRiLWJ1dHRvbl9fY29udGVudCwudGItYnV0dG9uX19saW5rOnZpc2l0ZWQgLnRiLWJ1dHRvbl9fY29udGVudHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1zaGFkb3c6aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0fS50Yi1idXR0b25fX2NvbnRlbnR7dmVydGljYWwtYWxpZ246bWlkZGxlO3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZX0udGItYnV0dG9uX19pY29ue3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zdHlsZTpub3JtYWwgIWltcG9ydGFudH0udGItYnV0dG9uX19pY29uOjpiZWZvcmV7Y29udGVudDphdHRyKGRhdGEtZm9udC1jb2RlKTtmb250LXdlaWdodDpub3JtYWwgIWltcG9ydGFudH0udGItYnV0dG9uX19saW5re2JhY2tncm91bmQtY29sb3I6IzQ0NDtib3JkZXItcmFkaXVzOjAuM2VtO2ZvbnQtc2l6ZToxLjNlbTttYXJnaW4tYm90dG9tOjAuNzZlbTtwYWRkaW5nOjAuNTVlbSAxLjVlbSAwLjU1ZW19IGgzLnRiLWhlYWRpbmdbZGF0YS10b29sc2V0LWJsb2Nrcy1oZWFkaW5nPSIxYzM5NmNjOTRlMThlMDBjODY1ZDAxM2Q4MjI2MWU3ZiJdICB7IGZvbnQtc2l6ZTogMjBweDsgfSAgLnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30udGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfS50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99IC53cC1ibG9jay10b29sc2V0LWJsb2Nrcy1jb250YWluZXIudGItY29udGFpbmVyW2RhdGEtdG9vbHNldC1ibG9ja3MtY29udGFpbmVyPSI5YzlkYjE4YzgxMmY1NWU4YmVhY2FhMjcyNDU2MTg3YyJdIHsgcGFkZGluZzogMHB4OyB9IC50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LnRiLWNvbnRhaW5lciAudGItY29udGFpbmVyLWlubmVye3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0b30udGItY29udGFpbmVyIC50Yi1jb250YWluZXItaW5uZXJ7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtY29udGFpbmVyLnRiLWNvbnRhaW5lcltkYXRhLXRvb2xzZXQtYmxvY2tzLWNvbnRhaW5lcj0iNzlmNjliNTdkYjBhZGQxOGY0OTJmYjcwZDMwM2FlMDkiXSB7IGJvcmRlci1yYWRpdXM6IDA7cGFkZGluZzogMHB4O2JvcmRlcjogMHB4IHNvbGlkIHJnYmEoIDAsIDAsIDAsIDEgKTsgfSAudGItZ3JpZCwudGItZ3JpZD4uYmxvY2stZWRpdG9yLWlubmVyLWJsb2Nrcz4uYmxvY2stZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dHtkaXNwbGF5OmdyaWQ7Z3JpZC1yb3ctZ2FwOjI1cHg7Z3JpZC1jb2x1bW4tZ2FwOjI1cHh9LnRiLWdyaWQtaXRlbXtiYWNrZ3JvdW5kOiNkMzhhMDM7cGFkZGluZzozMHB4fS50Yi1ncmlkLWNvbHVtbntmbGV4LXdyYXA6d3JhcH0udGItZ3JpZC1jb2x1bW4+Knt3aWR0aDoxMDAlfS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLXRvcHt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9LnRiLWdyaWQtY29sdW1uLnRiLWdyaWQtYWxpZ24tY2VudGVye3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2FsaWduLWNvbnRlbnQ6Y2VudGVyfS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLWJvdHRvbXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmZsZXgtZW5kfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC50Yi1ncmlkW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZD0iNGJiZThlYzBmZDg4NjA4MGI2NzdkYTRlMGEyNmM0YzMiXSB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDAuMWZyKSBtaW5tYXgoMCwgMC45ZnIpO2dyaWQtY29sdW1uLWdhcDogMTJweDtncmlkLWF1dG8tZmxvdzogcm93IH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjRiYmU4ZWMwZmQ4ODYwODBiNjc3ZGE0ZTBhMjZjNGMzIl0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAxKSB7IGdyaWQtY29sdW1uOiAxIH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjRiYmU4ZWMwZmQ4ODYwODBiNjc3ZGE0ZTBhMjZjNGMzIl0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAyKSB7IGdyaWQtY29sdW1uOiAyIH0gIC50Yi1jb250YWluZXIgLnRiLWNvbnRhaW5lci1pbm5lcnt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG99LndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uLnRiLWdyaWQtY29sdW1uW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW49IjMwMzRmYmU4ODZjMTEwNTRlOTViNDZiMDlkM2U0MTEyIl0geyBkaXNwbGF5OiBmbGV4OyB9ICB9IA==
PTC delivers Better Than Human AI translations for .properties files, which are often used to localize Java desktop applications and web apps. Learn how to prepare .properties files for translation, integrate your Git repository with PTC, and translate your software.
Translating Your Application for the First Time with PTC
Your first setup takes a few steps. You’ll move all translatable text into a .properties
file, handle dynamic content with placeholders, and connect your code repository to PTC. After that, PTC translates your .properties
file and manages translation updates whenever your text changes.
Step 1: Create a .properties File to Store All User-Facing Text
Create a new .properties
file to store every user-facing string in your app, such as button labels, error messages, form instructions, tooltips, and more. Place the file in src/main/resources
.
You can name the file however you like (messages.properties
, labels.properties
, etc.), but make sure it matches the name you use later in ResourceBundle.getBundle()
.
Using clear, descriptive keys instead of short or cryptic ones like btn1
or msg2
makes the file easier to maintain—especially if multiple developers work on the project.
Step 2: Add Placeholders for Dynamic Text
When a string includes variable content (like names, numbers, or dates), add numbered placeholders like {0}
, {1}
.
This approach breaks grammar and word order in many languages. As a result, translations may be incorrect or sound unnatural.
Step 3: Replace Hardcoded Strings with Keys from the File
Once you’ve created your .properties
file and added any necessary placeholders, go through your code and replace hardcoded strings with references to the file using ResourceBundle
.
PTC only translates strings stored in your .properties
files. Hardcoded strings will stay in the source language.
Step 4: Save the File in UTF-8 Format
Make sure to save your .properties
file in UTF-8. This allows accented characters and non-Latin scripts to display correctly. Most modern IDEs use UTF-8 by default, but double-check your editor settings to avoid encoding issues.
Step 5: Create a Free PTC Account and Connect Your Repository
To start translating with PTC:
- Create a free 30-day account
- Connect your GitHub, GitLab, or Bitbucket repository
PTC needs read/write access so it can detect .properties
files, translate them automatically, and push translated files back via merge requests.
Step 6: Confirm Output File Paths
PTC will list each .properties
file it detects and suggest output file paths for translations — for example, messages_fr.properties
for French.
You can:
- Accept the default output path, or
- Update it to match your project structure
Step 7: Choose Target Languages and Describe Your App
PTC uses project context to improve translation accuracy. Before translating, you’ll be asked to:
- Provide the name of your application
- Explain what it does
- Describe your audience
Then choose the languages you want to translate into. PTC supports 33+ languages.
Step 8: Check the Output Files and Accept the Merge Request
Once PTC finishes translating your .properties
files, it creates a merge request in your repository.
Before merging, make sure:
- Translated files are saved with the correct name (e.g.,
messages_fr.properties
for French)
- File paths match your project’s structure
If you see a missing file or an unexpected folder path, go to Settings → Monitored Files in your PTC project and update the resource file settings.
Step 9: Load the Translations at Runtime
At runtime, Java automatically loads the correct .properties
file based on the user’s locale.
In this example, Java will use messages_fr.properties
for French, falling back to messages.properties
if no translation is available.
Bonus Step: Translate Text Not Stored in .properties Files
If your application includes translatable content not stored in a resource file—such as emails, onboarding messages, or app store listings—you can translate it using the Paste to translate feature in PTC.
- From your PTC dashboard, go to Translations → Paste to translate
- Paste your content and choose your languages
- Copy the translations and add them into your app or docs
How PTC Keeps Your Translations Up to Date
After setup, PTC continues to monitor your repository. Whenever you update a .properties
file, PTC:
- Detects new or modified strings
- Translates the changes automatically
- Sends a new merge request with the updated translations